ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWNwaS1ob3RrZXkudHh0IGIvRG9jdW1lbnRhdGlvbi9hY3BpLWhvdGtleS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MDQwZmEuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9hY3BpLWhvdGtleS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1kcml2ZXIvYWNwaS9ob3RrZXkuYyBpbXBsZW1lbnQ6Ci0xLiAvcHJvYy9hY3BpL2hvdGtleS9ldmVudF9jb25maWcgCi0oZXZlbnQgYmFzZWQgaG90a2V5IG9yIGV2ZW50IGNvbmZpZyBpbnRlcmZhY2UpOgotYS4gYWRkIGEgIGV2ZW50IGJhc2VkIGhvdGtleShldmVudCkgOiAKLWVjaG8gIjA6YnVzOjphY3Rpb246bWV0aG9kOm51bTpudW0iID4gZXZlbnRfY29uZmlnCi0KLWIuIGRlbGV0ZSBhIGV2ZW50IGJhc2VkIGhvdGtleShldmVudCk6IAotZWNobyAiMTo6Ojo6bnVtOm51bSIgPiBldmVudF9jb25maWcKLQotYy4gIG1vZGlmeSBhIGV2ZW50IGJhc2VkIGhvdGtleShldmVudCk6ICAgIAotZWNobyAiMjpidXM6OmFjdGlvbjptZXRob2Q6bnVtOm51bSIgPiBldmVudF9jb25maWcKLQotMi4gL3Byb2MvYWNwaS9ob3RrZXkvcG9sbF9jb25maWcgCi0ocG9sbGluZyBiYXNlZCBob3RrZXkgb3IgZXZlbnQgY29uZmlnIGludGVyZmFjZSk6Ci1hLmFkZCBhIHBvbGxpbmcgYmFzZWQgaG90a2V5KGV2ZW50KSA6IAkKLWVjaG8gIjA6YnVzOm1ldGhvZDphY3Rpb246bWV0aG9kOm51bSIgPiBwb2xsX2NvbmZpZwotdGhpcyBhZGRpbmcgY29tbWFuZCB3aWxsIGNyZWF0ZSBhIHByb2MgZmlsZSAKLS9wcm9jL2FjcGkvaG90a2V5L21ldGhvZCwgd2hpY2ggaXMgdXNlZCB0byBnZXQgCi1yZXN1bHQgb2YgcG9sbGluZy4KLQotYi5kZWxldGUgYSBwb2xsaW5nIGJhc2VkIGhvdGtleShldmVudCk6IAkKLWVjaG8gIjE6Ojo6Om51bSIgPiBldmVudF9jb25maWcKLQotYy5tb2RpZnkgYSBwb2xsaW5nIGJhc2VkIGhvdGtleShldmVudCk6ICAgIAotZWNobyAiMjpidXM6bWV0aG9kOmFjdGlvbjptZXRob2Q6bnVtIiA+IHBvbGxfY29uZmlnCi0KLTMuL3Byb2MvYWNwaS9ob3RrZXkvYWN0aW9uIAotKGludGVyZmFjZSB0byBjYWxsIGFtbCBtZXRob2QgYXNzb2NpYXRlZCB3aXRoIGEgCi1zcGVjaWZpYyBob3RrZXkoZXZlbnQpKQotZWNobyAiZXZlbnRfbnVtOmV2ZW50X3R5cGU6ZXZlbnRfYXJndW1lbnQiID4gCi0JL3Byb2MvYWNwaS9ob3RrZXkvYWN0aW9uLgotVGhlIHJlc3VsdCBvZiB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgYW1sIG1ldGhvZCBpcyAKLWF0dGFjaGVkIHRvIC9wcm9jL2FjcGkvaG90a2V5L3BvbGxfbWV0aG9kLCB3aGljaCBpcyBkeW5hbWljYWxseQotY3JlYXRlZC4gIFBsZWFzZSB1c2UgY29tbWFuZCAiY2F0IC9wcm9jL2FjcGkvaG90a2V5L3BvbGxpbmdfbWV0aG9kIiAKLXRvIHJldHJpZXZlIGl0LgotCi1Ob3RlOiBVc2UgY21kbGluZSAiYWNwaV9nZW5lcmljX2hvdGtleSIgdG8gb3Zlci1yaWRlCi1wbGF0Zm9ybS1zcGVjaWZpYyB3aXRoIGdlbmVyaWMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0RNQS50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvRE1BLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y0ZWRjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0RNQS50eHQKQEAgLTAsMCArMSw0NiBAQAorCQkJUzNDMjQxMCBETUEKKwkJCT09PT09PT09PT09CisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKKyAgIFRoZSBrZXJuZWwgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIG1hbmFnZSBETUEgdHJhbnNmZXJzCisgICB1c2luZyB0aGUgRE1BIGNoYW5uZWxzIGluIHRoZSBjcHUsIHNvIHRoYXQgdGhlIGNlbnRyYWwKKyAgIGR1dHkgb2YgbWFuYWdpbmcgY2hhbm5lbCBtYXBwaW5ncywgYW5kIHByb2dyYW1taW5nIHRoZQorICAgY2hhbm5lbCBnZW5lcmF0b3JzIGlzIGluIG9uZSBwbGFjZS4KKworCitETUEgQ2hhbm5lbCBPcmRlcmluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgTWFueSBvZiB0aGUgcmFuZ2UgZG8gbm90IGhhdmUgY29ubmVjdGlvbnMgZm9yIHRoZSBETUEKKyAgIGNoYW5uZWxzIHRvIGFsbCBzb3VyY2VzLCB3aGljaCBtZWFucyB0aGF0IHNvbWUgZGV2aWNlcworICAgaGF2ZSBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQuCisKKyAgIFRvIGFsbG93IGZsZXhpYmlsdHkgZm9yIGVhY2ggY3B1IHR5cGUgYW5kIGJvYXJkLCB0aGUKKyAgIGRtYSBjb2RlIGNhbiBiZSBnaXZlbiBhbiBkbWEgb3JkZXJpbmcgc3RydWN0dXJlIHdoaWNoCisgICBhbGxvd3MgdGhlIG9yZGVyIG9mIGNoYW5uZWwgc2VhcmNoIHRvIGJlIHNwZWNpZmllZCwgYXMKKyAgIHdlbGwgYXMgYWxsb3dpbmcgdGhlIHByb2hpYml0aW9uIG9mIGNlcnRhaW4gY2xhaW1zLgorCisgICBzdHJ1Y3QgczNjMjR4eF9kbWFfb3JkZXIgaGFzIGEgbGlzdCBvZiBjaGFubmVscywgYW5kCisgICBlYWNoIGNoYW5uZWwgd2l0aGluIGhhcyBhIHNsb3QgZm9yIGEgbGlzdCBvZiBkbWEKKyAgIGNoYW5uZWwgbnVtYmVycy4gVGhlIHNsb3RzIGFyZSBzZWFyY2hlZCBpbiBvcmRlciwgZm9yCisgICB0aGUgcHJlc2VuY2Ugb2YgYSBkbWEgY2hhbm5lbCBudW1iZXIgd2l0aCBETUFfQ0hfVkFMSUQKKyAgIG9ycmVkIGluLgorCisgICBJZiB0aGUgb3JkZXIgaGFzIHRoZSBmbGFnIERNQV9DSF9ORVZFUiBzZXQsIHRoZW4gYWZ0ZXIKKyAgIGNoZWNraW5nIHRoZSBjaGFubmVsIGxpc3QsIHRoZSBzeXN0ZW0gd2lsbCByZXR1cm4gbm8KKyAgIGZvdW5kIGNoYW5uZWwsIHRodXMgZGVueWluZyB0aGUgcmVxdWVzdC4KKworICAgQSBib2FyZCBzdXBwb3J0IGZpbGUgY2FuIGNhbGwgczNjMjR4eF9kbWFfb3JkZXJfc2V0KCkKKyAgIHRvIHJlZ2lzdGVyIGFuIGNvbXBsZXRlIG9yZGVyaW5nIHNldC4gVGhlIHJvdXRpbmUgd2lsbAorICAgY29weSB0aGUgZGF0YSwgc28gdGhlIG9yaWdpbmFsIGNhbiBiZSBkaXNjYXJlZCB3aXRoCisgICBfX2luaXRkYXRhLgorCisKK0F1dGhvdXIKKy0tLS0tLS0KKworQmVuIERvb2tzLAorQ29weXJpZ2h0IChjKSAyMDA3IEJlbiBEb29rcywgU2ltdGVjIEVsZWN0cm9uaWNzCitMaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvT3ZlcnZpZXcudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL092ZXJ2aWV3LnR4dAppbmRleCAyOGQwMTQ3Li5jMzFiNzZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvT3ZlcnZpZXcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9PdmVydmlldy50eHQKQEAgLTgsMTMgKzgsMTAgQEAKIAogICBUaGUgU2Ftc3VuZyBTM0MyNFhYIHJhbmdlIG9mIEFSTTkgU3lzdGVtLW9uLUNoaXAgQ1BVcyBhcmUgc3VwcG9ydGVkCiAgIGJ5IHRoZSAnczNjMjQxMCcgYXJjaGl0ZWN0dXJlIG9mIEFSTSBMaW51eC4gQ3VycmVudGx5IHRoZSBTM0MyNDEwLAotICBTM0MyNDQwIGFuZCBTM0MyNDQyIGRldmljZXMgYXJlIHN1cHBvcnRlZC4KKyAgUzNDMjQxMiwgUzNDMjQxMywgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQuCiAKICAgU3VwcG9ydCBmb3IgdGhlIFMzQzI0MDAgc2VyaWVzIGlzIGluIHByb2dyZXNzLgogCi0gIFN1cHBvcnQgZm9yIHRoZSBTM0MyNDEyIGFuZCBTM0MyNDEzIENQVXMgaXMgYmVpbmcgbWVyZ2VkLgotCi0KIENvbmZpZ3VyYXRpb24KIC0tLS0tLS0tLS0tLS0KIApAQCAtMjYsNiArMjMsMjIgQEAKICAgcGxlYXNlIGNoZWNrIHRoZSBtYWNoaW5lIHNwZWNpZmljIGRvY3VtZW50YXRpb24uCiAKIAorTGF5b3V0CistLS0tLS0KKworICBUaGUgY29yZSBzdXBwb3J0IGZpbGVzIGFyZSBsb2NhdGVkIGluIHRoZSBwbGF0Zm9ybSBjb2RlIGNvbnRhaW5lZCBpbgorICBhcmNoL2FybS9wbGF0LXMzYzI0eHggd2l0aCBoZWFkZXJzIGluIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHguCisgIFRoaXMgZGlyZWN0b3J5IHNob3VsZCBiZSBrZXB0IHRvIGl0ZW1zIHNoYXJlZCBiZXR3ZWVuIHRoZSBwbGF0Zm9ybQorICBjb2RlIChhcmNoL2FybS9wbGF0LXMzYzI0eHgpIGFuZCB0aGUgYXJjaC9hcm0vbWFjaC1zM2MyNCogY29kZS4KKworICBFYWNoIGNwdSBoYXMgYSBkaXJlY3Rvcnkgd2l0aCB0aGUgc3VwcG9ydCBmaWxlcyBmb3IgaXQsIGFuZCB0aGUKKyAgbWFjaGluZXMgdGhhdCBjYXJyeSB0aGUgZGV2aWNlLiBGb3IgZXhhbXBsZSBTM0MyNDEwIGlzIGNvbnRhaW5lZAorICBpbiBhcmNoL2FybS9tYWNoLXMzYzI0MTAgYW5kIFMzQzI0NDAgaW4gYXJjaC9hcm0vbWFjaC1zM2MyNDQwCisKKyAgUmVnaXN0ZXIsIGtlcm5lbCBhbmQgcGxhdGZvcm0gZGF0YSBkZWZpbml0aW9ucyBhcmUgaGVsZCBpbiB0aGUKKyAgaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMCBkaXJlY3RvcnkuCisKKwogTWFjaGluZXMKIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL3BsYXRmb3JtLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL3BsYXRmb3JtLnR4dAppbmRleCA5ZjBiYzNiLi5mN2M5MjYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9wbGF0Zm9ybS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvcGxhdGZvcm0udHh0CkBAIC02Niw3ICs2Niw3IEBACiAKIERldmljZSBFbnVtZXJhdGlvbgogfn5+fn5+fn5+fn5+fn5+fn5+Ci1BcyBhIHJ1bGUsIHBsYXRmb3JtIHNwZWNpZmljIChhbmQgb2Z0ZW4gYm9hcmQtc3BlY2lmaWMpIHNldHVwIGNvZGUgd2lsCitBcyBhIHJ1bGUsIHBsYXRmb3JtIHNwZWNpZmljIChhbmQgb2Z0ZW4gYm9hcmQtc3BlY2lmaWMpIHNldHVwIGNvZGUgd2lsbAogcmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlczoKIAogCWludCBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAqIHBsYXRmb3JtX2RldmljZS5pZCAuLi4gdGhlIGRldmljZSBpbnN0YW5jZSBudW1iZXIsIG9yIGVsc2UgIi0xIgogICAgICAgdG8gaW5kaWNhdGUgdGhlcmUncyBvbmx5IG9uZS4KIAotVGhlc2UgYXJlIGNhdGVuYXRlZCwgc28gbmFtZS9pZCAic2VyaWFsIi8wIGluZGljYXRlcyBidXNfaWQgInNlcmlhbC4wIiwgYW5kCitUaGVzZSBhcmUgY29uY2F0ZW5hdGVkLCBzbyBuYW1lL2lkICJzZXJpYWwiLzAgaW5kaWNhdGVzIGJ1c19pZCAic2VyaWFsLjAiLCBhbmQKICJzZXJpYWwvMyIgaW5kaWNhdGVzIGJ1c19pZCAic2VyaWFsLjMiOyBib3RoIHdvdWxkIHVzZSB0aGUgcGxhdGZvcm1fZHJpdmVyCiBuYW1lZCAic2VyaWFsIi4gIFdoaWxlICJteV9ydGMiLy0xIHdvdWxkIGJlIGJ1c19pZCAibXlfcnRjIiAobm8gaW5zdGFuY2UgaWQpCiBhbmQgdXNlIHRoZSBwbGF0Zm9ybV9kcml2ZXIgY2FsbGVkICJteV9ydGMiLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IGM1ODVhYTguLjZhNDUxZjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTI1MywyOSArMjUzLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLTw8PDw8PDwgdGVzdDpEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKLVdoYXQ6CUFDUEkgaG90a2V5IGRyaXZlciAoQ09ORklHX0FDUElfSE9US0VZKQotV2hlbjoJMi42LjIxCi1XaHk6CWhvdGtleS5jIHdhcyBhbiBhdHRlbXB0IHRvIGNvbnNvbGlkYXRlIG11bHRpcGxlIGRyaXZlcnMgdGhhdCB1c2UKLQlBQ1BJIHRvIGltcGxlbWVudCBob3RrZXlzLiAgSG93ZXZlciwgaG90a2V5cyBhcmUgbm90IGRvY3VtZW50ZWQKLQlpbiB0aGUgQUNQSSBzcGVjaWZpY2F0aW9uLCBzbyB0aGUgZHJpdmVycyB1c2VkIHVuZG9jdW1lbnRlZAotCXZlbmRvci1zcGVjaWZpYyBob29rcyBhbmQgdHVybmVkIG91dCB0byBiZSBtb3JlIGRpZmZlcmVudCB0aGFuCi0JdGhlIHNhbWUuCi0KLQlGdXJ0aGVyLCB0aGUga2V5cyBhbmQgdGhlIGZlYXR1cmVzIHN1cHBsaWVkIGJ5IGVhY2ggcGxhdGZvcm0KLQlhcmUgZGlmZmVyZW50LCBzbyB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhIG5lZWQgZm9yCi0JcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVycy4KLQotCVNvIHRoZSBuZXcgcGxhbiBpcyB0byBkZWxldGUgaG90a2V5LmMgYW5kIGluc3RlYWQsIHdvcmsgb24gdGhlCi0JcGxhdGZvcm0gc3BlY2lmaWMgZHJpdmVycyB0byB0cnkgdG8gbWFrZSB0aGVtIGxvb2sgdGhlIHNhbWUKLQl0byB0aGUgdXNlciB3aGVuIHRoZXkgc3VwcGx5IHRoZSBzYW1lIGZlYXR1cmVzLgotCi0JaG90a2V5LmMgaGFzIGFsd2F5cyBkZXBlbmRlZCBvbiBDT05GSUdfRVhQRVJJTUVOVEFMCi0KLVdobzoJTGVuIEJyb3duIDxsZW4uYnJvd25AaW50ZWwuY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJL3N5cy9maXJtd2FyZS9hY3BpL25hbWVzcGFjZQogV2hlbjoJMi42LjIxCiBXaHk6CVRoZSBBQ1BJIG5hbWVzcGFjZSBpcyBlZmZlY3RpdmVseSB0aGUgc3ltYm9sIGxpc3QgZm9yCkBAIC0zMDYsMTMgKzI4Myw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglKRkZTICh2ZXJzaW9uIDEpCi1XaGVuOgkyLjYuMjEKLVdoeToJVW5tYWludGFpbmVkIGZvciB5ZWFycywgc3VwZXJjZWRlZCBieSBKRkZTMiBmb3IgeWVhcnMuCi1XaG86CUplZmYgR2FyemlrIDxqZWZmQGdhcnppay5vcmc+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OiAgIHNrOThsaW4gbmV0d29yayBkcml2ZXIKIFdoZW46ICAgSnVseSAyMDA3CiBXaHk6ICAgIEluIGtlcm5lbCB0cmVlIHZlcnNpb24gb2YgZHJpdmVyIGlzIHVubWFpbnRhaW5lZC4gU2s5OGxpbiBkcml2ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYCmluZGV4IDRkYzI4Y2MuLjU3MTc4NTg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVgKQEAgLTQsNiArNCw4IEBACiAJLSBleHBsYW5hdGlvbiBvZiBob3cgdG8gbWFrZSBmaWxlc3lzdGVtcyBleHBvcnRhYmxlLgogTG9ja2luZwogCS0gaW5mbyBvbiBsb2NraW5nIHJ1bGVzIGFzIHRoZXkgcGVydGFpbiB0byBMaW51eCBWRlMuCis5cC50eHQKKwktIDlwICh2OWZzKSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUGxhbiA5IHJlbW90ZSBmcyBwcm90b2NvbC4KIGFkZnMudHh0CiAJLSBpbmZvIGFuZCBtb3VudCBvcHRpb25zIGZvciB0aGUgQWNvcm4gQWR2YW5jZWQgRGlzYyBGaWxpbmcgU3lzdGVtLgogYWZzLnR4dApAQCAtODIsOCArODQsNiBAQAogCS0gaW5mbyBhbmQgbW91bnQgb3B0aW9ucyBmb3IgdGhlIFVERiBmaWxlc3lzdGVtLgogdWZzLnR4dAogCS0gaW5mbyBvbiB0aGUgdWZzIGZpbGVzeXN0ZW0uCi12OWZzLnR4dAotCS0gdjlmcyBpcyBhIFVuaXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFBsYW4gOSA5cCByZW1vdGUgZnMgcHJvdG9jb2wuCiB2ZmF0LnR4dAogCS0gaW5mbyBvbiB1c2luZyB0aGUgVkZBVCBmaWxlc3lzdGVtIHVzZWQgaW4gV2luZG93cyBOVCBhbmQgV2luZG93cyA5NQogdmZzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dAppbmRleCA0ZDA3NWE0Li5iYmQ4YjI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dApAQCAtNDAsNiArNDAsMTAgQEAKICAgYW5hbWU9bmFtZQlhbmFtZSBzcGVjaWZpZXMgdGhlIGZpbGUgdHJlZSB0byBhY2Nlc3Mgd2hlbiB0aGUgc2VydmVyIGlzCiAgIAkJb2ZmZXJpbmcgc2V2ZXJhbCBleHBvcnRlZCBmaWxlIHN5c3RlbXMuCiAKKyAgY2FjaGU9bW9kZQlzcGVjaWZpZXMgYSBjYWNoZWluZyBwb2xpY3kuICBCeSBkZWZhdWx0LCBubyBjYWNoZXMgYXJlIHVzZWQuCisJCQlsb29zZSA9IG5vIGF0dGVtcHRzIGFyZSBtYWRlIGF0IGNvbnNpc3RlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbmRlZCBmb3IgZXhjbHVzaXZlLCByZWFkLW9ubHkgbW91bnRzCisKICAgZGVidWc9bglzcGVjaWZpZXMgZGVidWcgbGV2ZWwuICBUaGUgZGVidWcgbGV2ZWwgaXMgYSBiaXRtYXNrLgogICAJCQkweDAxID0gZGlzcGxheSB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzCiAJCQkweDAyID0gZGV2ZWxvcGVyIGRlYnVnIChERUJVR19DVVJSRU5UKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy1wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy1wY2kudHh0CmluZGV4IDdiYTJiYWEuLjVkYWEyYWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMtcGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLXBjaS50eHQKQEAgLTY1LDcgKzY1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogTGVnYWN5IEkvTyBwb3J0IGFuZCBJU0EgbWVtb3J5IHJlc291cmNlcyBhcmUgYWxzbyBwcm92aWRlZCBpbiBzeXNmcyBpZiB0aGUKLXVuZGVybHlpbmcgcGxhdGZvcm0gc3VwcG9ydHMgdGhlbS4gIFRoZXkncmUgbG9jYXRlZCBpbiB0aGUgUENJIGNsYXNzIGhlaXJhcmNoeSwKK3VuZGVybHlpbmcgcGxhdGZvcm0gc3VwcG9ydHMgdGhlbS4gIFRoZXkncmUgbG9jYXRlZCBpbiB0aGUgUENJIGNsYXNzIGhpZXJhcmNoeSwKIGUuZy4KIAogCS9zeXMvY2xhc3MvcGNpX2J1cy8wMDAwOjE3LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CmluZGV4IDc3MzdiZmQuLmVhMjcxZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKQEAgLTYxNyw2ICs2MTcsMTEgQEAKIAlJbiB0aGlzIGNhc2UgdGhlIHByZXBhcmVfd3JpdGUgd2lsbCBiZSByZXRyaWVkIG9uZSB0aGUgbG9jayBpcwogICAJcmVnYWluZWQuCiAKKwlOb3RlOiB0aGUgcGFnZSBfbXVzdCBub3RfIGJlIG1hcmtlZCB1cHRvZGF0ZSBpbiB0aGlzIGZ1bmN0aW9uCisJKG9yIGFueXdoZXJlIGVsc2UpIHVubGVzcyBpdCBhY3R1YWxseSBpcyB1cHRvZGF0ZSByaWdodCBub3cuIEFzCisJc29vbiBhcyBhIHBhZ2UgaXMgbWFya2VkIHVwdG9kYXRlLCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBjb25jdXJyZW50CisJcmVhZCgyKSB0byBjb3B5IGl0IHRvIHVzZXJzcGFjZS4KKwogICBjb21taXRfd3JpdGU6IElmIHByZXBhcmVfd3JpdGUgc3VjY2VlZHMsIG5ldyBkYXRhIHdpbGwgYmUgY29waWVkCiAgICAgICAgIGludG8gdGhlIHBhZ2UgYW5kIHRoZW4gY29tbWl0X3dyaXRlIHdpbGwgYmUgY2FsbGVkLiAgSXQgd2lsbAogICAgICAgICB0eXBpY2FsbHkgdXBkYXRlIHRoZSBzaXplIG9mIHRoZSBmaWxlIChpZiBhcHByb3ByaWF0ZSkgYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dAppbmRleCAwOWRkNTEwLi41NzZjZTQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKQEAgLTc4LDcgKzc4LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tCiBHUElPcyBhcmUgaWRlbnRpZmllZCBieSB1bnNpZ25lZCBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMC4uTUFYX0lOVC4gIFRoYXQKIHJlc2VydmVzICJuZWdhdGl2ZSIgbnVtYmVycyBmb3Igb3RoZXIgcHVycG9zZXMgbGlrZSBtYXJraW5nIHNpZ25hbHMgYXMKLSJub3QgYXZhaWxhYmxlIG9uIHRoaXMgYm9hcmQiLCBvciBpbmRpY2F0aW5nIGZhdWx0cy4KKyJub3QgYXZhaWxhYmxlIG9uIHRoaXMgYm9hcmQiLCBvciBpbmRpY2F0aW5nIGZhdWx0cy4gIENvZGUgdGhhdCBkb2Vzbid0Cit0b3VjaCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSB0cmVhdHMgdGhlc2UgaW50ZWdlcnMgYXMgb3BhcXVlIGNvb2tpZXMuCiAKIFBsYXRmb3JtcyBkZWZpbmUgaG93IHRoZXkgdXNlIHRob3NlIGludGVnZXJzLCBhbmQgdXN1YWxseSAjZGVmaW5lIHN5bWJvbHMKIGZvciB0aGUgR1BJTyBsaW5lcyBzbyB0aGF0IGJvYXJkLXNwZWNpZmljIHNldHVwIGNvZGUgZGlyZWN0bHkgY29ycmVzcG9uZHMKQEAgLTEzOSwxMCArMTQwLDEwIEBACiBUaGUgZ2V0L3NldCBjYWxscyBoYXZlIG5vIGVycm9yIHJldHVybnMgYmVjYXVzZSAiaW52YWxpZCBHUElPIiBzaG91bGQgaGF2ZQogYmVlbiByZXBvcnRlZCBlYXJsaWVyIGluIGdwaW9fc2V0X2RpcmVjdGlvbigpLiAgSG93ZXZlciwgbm90ZSB0aGF0IG5vdCBhbGwKIHBsYXRmb3JtcyBjYW4gcmVhZCB0aGUgdmFsdWUgb2Ygb3V0cHV0IHBpbnM7IHRob3NlIHRoYXQgY2FuJ3Qgc2hvdWxkIGFsd2F5cwotcmV0dXJuIHplcm8uICBBbHNvLCB0aGVzZSBjYWxscyB3aWxsIGJlIGlnbm9yZWQgZm9yIEdQSU9zIHRoYXQgY2FuJ3Qgc2FmZWx5Ci1iZSBhY2Nlc3NlZCB3aWh0b3V0IHNsZWVwaW5nIChzZWUgYmVsb3cpLgorcmV0dXJuIHplcm8uICBBbHNvLCB1c2luZyB0aGVzZSBjYWxscyBmb3IgR1BJT3MgdGhhdCBjYW4ndCBzYWZlbHkgYmUgYWNjZXNzZWQKK3dpdGhvdXQgc2xlZXBpbmcgKHNlZSBiZWxvdykgaXMgYW4gZXJyb3IuCiAKLVBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBhcmUgZW5jb3VyYWdlZCB0byBvcHRpbWlzZSB0aGUgdHdvCitQbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgYXJlIGVuY291cmFnZWQgdG8gb3B0aW1pemUgdGhlIHR3bwogY2FsbHMgdG8gYWNjZXNzIHRoZSBHUElPIHZhbHVlIGluIGNhc2VzIHdoZXJlIHRoZSBHUElPIG51bWJlciAoYW5kIGZvcgogb3V0cHV0LCB2YWx1ZSkgYXJlIGNvbnN0YW50LiAgSXQncyBub3JtYWwgZm9yIHRoZW0gdG8gbmVlZCBvbmx5IGEgY291cGxlCiBvZiBpbnN0cnVjdGlvbnMgaW4gc3VjaCBjYXNlcyAocmVhZGluZyBvciB3cml0aW5nIGEgaGFyZHdhcmUgcmVnaXN0ZXIpLApAQCAtMjM5LDcgKzI0MCw4IEBACiBzeXN0ZW0gd2FrZXVwIGNhcGFiaWxpdGllcy4KIAogTm9uLWVycm9yIHZhbHVlcyByZXR1cm5lZCBmcm9tIGlycV90b19ncGlvKCkgd291bGQgbW9zdCBjb21tb25seSBiZSB1c2VkCi13aXRoIGdwaW9fZ2V0X3ZhbHVlKCkuCit3aXRoIGdwaW9fZ2V0X3ZhbHVlKCksIGZvciBleGFtcGxlIHRvIGluaXRpYWxpemUgb3IgdXBkYXRlIGRyaXZlciBzdGF0ZQord2hlbiB0aGUgSVJRIGlzIGVkZ2UtdHJpZ2dlcmVkLgogCiAKIApAQCAtMjYwLDkgKzI2MiwxMCBAQAogVGhlcmUgYXJlIG90aGVyIHN5c3RlbS1zcGVjaWZpYyBtZWNoYW5pc21zIHRoYXQgYXJlIG5vdCBzcGVjaWZpZWQgaGVyZSwKIGxpa2UgdGhlIGFmb3JlbWVudGlvbmVkIG9wdGlvbnMgZm9yIGlucHV0IGRlLWdsaXRjaGluZyBhbmQgd2lyZS1PUiBvdXRwdXQuCiBIYXJkd2FyZSBtYXkgc3VwcG9ydCByZWFkaW5nIG9yIHdyaXRpbmcgR1BJT3MgaW4gZ2FuZ3MsIGJ1dCB0aGF0J3MgdXN1YWxseQotY29uZmlndXJhdGlvbiBkZXBlbmRlZG50OiAgZm9yIEdQSU9zIHNoYXJpbmcgdGhlIHNhbWUgYmFuay4gIChHUElPcyBhcmUKK2NvbmZpZ3VyYXRpb24gZGVwZW5kZW50OiAgZm9yIEdQSU9zIHNoYXJpbmcgdGhlIHNhbWUgYmFuay4gIChHUElPcyBhcmUKIGNvbW1vbmx5IGdyb3VwZWQgaW4gYmFua3Mgb2YgMTYgb3IgMzIsIHdpdGggYSBnaXZlbiBTT0MgaGF2aW5nIHNldmVyYWwgc3VjaAotYmFua3MuKSAgQ29kZSByZWx5aW5nIG9uIHN1Y2ggbWVjaGFuaXNtcyB3aWxsIG5lY2Vzc2FyaWx5IGJlIG5vbnBvcnRhYmxlLgorYmFua3MuKSAgU29tZSBzeXN0ZW1zIGNhbiB0cmlnZ2VyIElSUXMgZnJvbSBvdXRwdXQgR1BJT3MuICBDb2RlIHJlbHlpbmcgb24KK3N1Y2ggbWVjaGFuaXNtcyB3aWxsIG5lY2Vzc2FyaWx5IGJlIG5vbnBvcnRhYmxlLgogCiBEeW5hbWljIGRlZmluaXRpb24gb2YgR1BJT3MgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQ7IGZvciBleGFtcGxlLCBhcwogYSBzaWRlIGVmZmVjdCBvZiBjb25maWd1cmluZyBhbiBhZGQtb24gYm9hcmQgd2l0aCBzb21lIEdQSU8gZXhwYW5kZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ocnRpbWVyL3RpbWVyX3N0YXRzLnR4dCBiL0RvY3VtZW50YXRpb24vaHJ0aW1lci90aW1lcl9zdGF0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmNzgyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHJ0aW1lci90aW1lcl9zdGF0cy50eHQKQEAgLTAsMCArMSw2OCBAQAordGltZXJfc3RhdHMgLSB0aW1lciB1c2FnZSBzdGF0aXN0aWNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGltZXJfc3RhdHMgaXMgYSBkZWJ1Z2dpbmcgZmFjaWxpdHkgdG8gbWFrZSB0aGUgdGltZXIgKGFiKXVzYWdlIGluIGEgTGludXgKK3N5c3RlbSB2aXNpYmxlIHRvIGtlcm5lbCBhbmQgdXNlcnNwYWNlIGRldmVsb3BlcnMuIEl0IGlzIG5vdCBpbnRlbmRlZCBmb3IKK3Byb2R1Y3Rpb24gdXNhZ2UgYXMgaXQgYWRkcyBzaWduaWZpY2FudCBvdmVyaGVhZCB0byB0aGUgKGhyKXRpbWVyIGNvZGUgYW5kIHRoZQorKGhyKXRpbWVyIGRhdGEgc3RydWN0dXJlcy4KKwordGltZXJfc3RhdHMgc2hvdWxkIGJlIHVzZWQgYnkga2VybmVsIGFuZCB1c2Vyc3BhY2UgZGV2ZWxvcGVycyB0byB2ZXJpZnkgdGhhdAordGhlaXIgY29kZSBkb2VzIG5vdCBtYWtlIHVuZHVseSB1c2Ugb2YgdGltZXJzLiBUaGlzIGhlbHBzIHRvIGF2b2lkIHVubmVjZXNzYXJ5Cit3YWtldXBzLCB3aGljaCBzaG91bGQgYmUgYXZvaWRlZCB0byBvcHRpbWl6ZSBwb3dlciBjb25zdW1wdGlvbi4KKworSXQgY2FuIGJlIGVuYWJsZWQgYnkgQ09ORklHX1RJTUVSX1NUQVRTIGluIHRoZSAiS2VybmVsIGhhY2tpbmciIGNvbmZpZ3VyYXRpb24KK3NlY3Rpb24uCisKK3RpbWVyX3N0YXRzIGNvbGxlY3RzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0aW1lciBldmVudHMgd2hpY2ggYXJlIGZpcmVkIGluIGEKK0xpbnV4IHN5c3RlbSBvdmVyIGEgc2FtcGxlIHBlcmlvZDoKKworLSB0aGUgcGlkIG9mIHRoZSB0YXNrKHByb2Nlc3MpIHdoaWNoIGluaXRpYWxpemVkIHRoZSB0aW1lcgorLSB0aGUgbmFtZSBvZiB0aGUgcHJvY2VzcyB3aGljaCBpbml0aWFsaXplZCB0aGUgdGltZXIKKy0gdGhlIGZ1bmN0aW9uIHdoZXJlIHRoZSB0aW1lciB3YXMgaW50aWFsaXplZAorLSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggaXMgYXNzb2NpYXRlZCB0byB0aGUgdGltZXIKKy0gdGhlIG51bWJlciBvZiBldmVudHMgKGNhbGxiYWNrcykKKwordGltZXJfc3RhdHMgYWRkcyBhbiBlbnRyeSB0byAvcHJvYzogL3Byb2MvdGltZXJfc3RhdHMKKworVGhpcyBlbnRyeSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHN0YXRpc3RpY3MgZnVuY3Rpb25hbGl0eSBhbmQgdG8gcmVhZCBvdXQgdGhlCitzYW1wbGVkIGluZm9ybWF0aW9uLgorCitUaGUgdGltZXJfc3RhdHMgZnVuY3Rpb25hbGl0eSBpcyBpbmFjdGl2ZSBvbiBib290dXAuCisKK1RvIGFjdGl2YXRlIGEgc2FtcGxlIHBlcmlvZCBpc3N1ZToKKyMgZWNobyAxID4vcHJvYy90aW1lcl9zdGF0cworCitUbyBzdG9wIGEgc2FtcGxlIHBlcmlvZCBpc3N1ZToKKyMgZWNobyAwID4vcHJvYy90aW1lcl9zdGF0cworCitUaGUgc3RhdGlzdGljcyBjYW4gYmUgcmV0cmlldmVkIGJ5OgorIyBjYXQgL3Byb2MvdGltZXJfc3RhdHMKKworVGhlIHJlYWRvdXQgb2YgL3Byb2MvdGltZXJfc3RhdHMgYXV0b21hdGljYWxseSBkaXNhYmxlcyBzYW1wbGluZy4gVGhlIHNhbXBsZWQKK2luZm9ybWF0aW9uIGlzIGtlcHQgdW50aWwgYSBuZXcgc2FtcGxlIHBlcmlvZCBpcyBzdGFydGVkLiBUaGlzIGFsbG93cyBtdWx0aXBsZQorcmVhZG91dHMuCisKK1NhbXBsZSBvdXRwdXQgb2YgL3Byb2MvdGltZXJfc3RhdHM6CisKK1RpbWVyc3RhdHMgc2FtcGxlIHBlcmlvZDogMy44ODg3NzAgcworICAxMiwgICAgIDAgc3dhcHBlciAgICAgICAgICBocnRpbWVyX3N0b3Bfc2NoZWRfdGljayAoaHJ0aW1lcl9zY2hlZF90aWNrKQorICAxNSwgICAgIDEgc3dhcHBlciAgICAgICAgICBoY2Rfc3VibWl0X3VyYiAocmhfdGltZXJfZnVuYykKKyAgIDQsICAgOTU5IGtlZGFjICAgICAgICAgICAgc2NoZWR1bGVfdGltZW91dCAocHJvY2Vzc190aW1lb3V0KQorICAgMSwgICAgIDAgc3dhcHBlciAgICAgICAgICBwYWdlX3dyaXRlYmFja19pbml0ICh3Yl90aW1lcl9mbikKKyAgMjgsICAgICAwIHN3YXBwZXIgICAgICAgICAgaHJ0aW1lcl9zdG9wX3NjaGVkX3RpY2sgKGhydGltZXJfc2NoZWRfdGljaykKKyAgMjIsICAyOTQ4IElSUSA0ICAgICAgICAgICAgdHR5X2ZsaXBfYnVmZmVyX3B1c2ggKGRlbGF5ZWRfd29ya190aW1lcl9mbikKKyAgIDMsICAzMTAwIGJhc2ggICAgICAgICAgICAgc2NoZWR1bGVfdGltZW91dCAocHJvY2Vzc190aW1lb3V0KQorICAgMSwgICAgIDEgc3dhcHBlciAgICAgICAgICBxdWV1ZV9kZWxheWVkX3dvcmtfb24gKGRlbGF5ZWRfd29ya190aW1lcl9mbikKKyAgIDEsICAgICAxIHN3YXBwZXIgICAgICAgICAgcXVldWVfZGVsYXllZF93b3JrX29uIChkZWxheWVkX3dvcmtfdGltZXJfZm4pCisgICAxLCAgICAgMSBzd2FwcGVyICAgICAgICAgIG5laWdoX3RhYmxlX2luaXRfbm9fbmV0bGluayAobmVpZ2hfcGVyaW9kaWNfdGltZXIpCisgICAxLCAgMjI5MiBpcCAgICAgICAgICAgICAgIF9fbmV0ZGV2X3dhdGNoZG9nX3VwIChkZXZfd2F0Y2hkb2cpCisgICAxLCAgICAyMyBldmVudHMvMSAgICAgICAgIGRvX2NhY2hlX2NsZWFuIChkZWxheWVkX3dvcmtfdGltZXJfZm4pCis5MCB0b3RhbCBldmVudHMsIDMwLjAgZXZlbnRzL3NlYworCitUaGUgZmlyc3QgY29sdW1uIGlzIHRoZSBudW1iZXIgb2YgZXZlbnRzLCB0aGUgc2Vjb25kIGNvbHVtbiB0aGUgcGlkLCB0aGUgdGhpcmQKK2NvbHVtbiBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvY2Vzcy4gVGhlIGZvcnRoIGNvbHVtbiBzaG93cyB0aGUgZnVuY3Rpb24gd2hpY2gKK2luaXRpYWxpemVkIHRoZSB0aW1lciBhbmQgaW4gcGFyYW50aGVzZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdhcworZXhlY3V0ZWQgb24gZXhwaXJ5LgorCisgICAgVGhvbWFzLCBJbmdvCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHJ0aW1lcnMvaGlnaHJlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2hydGltZXJzL2hpZ2hyZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMGU5YTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hydGltZXJzL2hpZ2hyZXMudHh0CkBAIC0wLDAgKzEsMjQ5IEBACitIaWdoIHJlc29sdXRpb24gdGltZXJzIGFuZCBkeW5hbWljIHRpY2tzIGRlc2lnbiBub3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnVydGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIHBhcGVyIG9mIHRoZSBPTFMgMjAwNiB0YWxrICJocnRpbWVycworYW5kIGJleW9uZCIuIFRoZSBwYXBlciBpcyBwYXJ0IG9mIHRoZSBPTFMgMjAwNiBQcm9jZWVkaW5ncyBWb2x1bWUgMSwgd2hpY2ggY2FuCitiZSBmb3VuZCBvbiB0aGUgT0xTIHdlYnNpdGU6CitodHRwOi8vd3d3LmxpbnV4c3ltcG9zaXVtLm9yZy8yMDA2L2xpbnV4c3ltcG9zaXVtX3Byb2N2MS5wZGYKKworVGhlIHNsaWRlcyB0byB0aGlzIHRhbGsgYXJlIGF2YWlsYWJsZSBmcm9tOgoraHR0cDovL3RnbHguZGUvcHJvamVjdHMvaHJ0aW1lcnMvb2xzMjAwNi1ocnRpbWVycy5wZGYKKworVGhlIHNsaWRlcyBjb250YWluIGZpdmUgZmlndXJlcyAocGFnZXMgMiwgMTUsIDE4LCAyMCwgMjIpLCB3aGljaCBpbGx1c3RyYXRlIHRoZQorY2hhbmdlcyBpbiB0aGUgdGltZShyKSByZWxhdGVkIExpbnV4IHN1YnN5c3RlbXMuIEZpZ3VyZSAjMSAocC4gMikgc2hvd3MgdGhlCitkZXNpZ24gb2YgdGhlIExpbnV4IHRpbWUocikgc3lzdGVtIGJlZm9yZSBocnRpbWVycyBhbmQgb3RoZXIgYnVpbGRpbmcgYmxvY2tzCitnb3QgbWVyZ2VkIGludG8gbWFpbmxpbmUuCisKK05vdGU6IHRoZSBwYXBlciBhbmQgdGhlIHNsaWRlcyBhcmUgdGFsa2luZyBhYm91dCAiY2xvY2sgZXZlbnQgc291cmNlIiwgd2hpbGUgd2UKK3N3aXRjaGVkIHRvIHRoZSBuYW1lICJjbG9jayBldmVudCBkZXZpY2VzIiBpbiBtZWFudGltZS4KKworVGhlIGRlc2lnbiBjb250YWlucyB0aGUgZm9sbG93aW5nIGJhc2ljIGJ1aWxkaW5nIGJsb2NrczoKKworLSBocnRpbWVyIGJhc2UgaW5mcmFzdHJ1Y3R1cmUKKy0gdGltZW9mZGF5IGFuZCBjbG9jayBzb3VyY2UgbWFuYWdlbWVudAorLSBjbG9jayBldmVudCBtYW5hZ2VtZW50CistIGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBmdW5jdGlvbmFsaXR5CistIGR5bmFtaWMgdGlja3MKKworCitocnRpbWVyIGJhc2UgaW5mcmFzdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaHJ0aW1lciBiYXNlIGluZnJhc3RydWN0dXJlIHdhcyBtZXJnZWQgaW50byB0aGUgMi42LjE2IGtlcm5lbC4gRGV0YWlscyBvZgordGhlIGJhc2UgaW1wbGVtZW50YXRpb24gYXJlIGNvdmVyZWQgaW4gRG9jdW1lbnRhdGlvbi9ocnRpbWVycy9ocnRpbWVyLnR4dC4gU2VlCithbHNvIGZpZ3VyZSAjMiAoT0xTIHNsaWRlcyBwLiAxNSkKKworVGhlIG1haW4gZGlmZmVyZW5jZXMgdG8gdGhlIHRpbWVyIHdoZWVsLCB3aGljaCBob2xkcyB0aGUgYXJtZWQgdGltZXJfbGlzdCB0eXBlCit0aW1lcnMgYXJlOgorICAgICAgIC0gdGltZSBvcmRlcmVkIGVucXVldWVpbmcgaW50byBhIHJiLXRyZWUKKyAgICAgICAtIGluZGVwZW5kZW50IG9mIHRpY2tzICh0aGUgcHJvY2Vzc2luZyBpcyBiYXNlZCBvbiBuYW5vc2Vjb25kcykKKworCit0aW1lb2ZkYXkgYW5kIGNsb2NrIHNvdXJjZSBtYW5hZ2VtZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0pvaG4gU3R1bHR6J3MgR2VuZXJpYyBUaW1lIE9mIERheSAoR1RPRCkgZnJhbWV3b3JrIG1vdmVzIGEgbGFyZ2UgcG9ydGlvbiBvZgorY29kZSBvdXQgb2YgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhcmVhcyBpbnRvIGEgZ2VuZXJpYyBtYW5hZ2VtZW50CitmcmFtZXdvcmssIGFzIGlsbHVzdHJhdGVkIGluIGZpZ3VyZSAjMyAoT0xTIHNsaWRlcyBwLiAxOCkuIFRoZSBhcmNoaXRlY3R1cmUKK3NwZWNpZmljIHBvcnRpb24gaXMgcmVkdWNlZCB0byB0aGUgbG93IGxldmVsIGhhcmR3YXJlIGRldGFpbHMgb2YgdGhlIGNsb2NrCitzb3VyY2VzLCB3aGljaCBhcmUgcmVnaXN0ZXJlZCBpbiB0aGUgZnJhbWV3b3JrIGFuZCBzZWxlY3RlZCBvbiBhIHF1YWxpdHkgYmFzZWQKK2RlY2lzaW9uLiBUaGUgbG93IGxldmVsIGNvZGUgcHJvdmlkZXMgaGFyZHdhcmUgc2V0dXAgYW5kIHJlYWRvdXQgcm91dGluZXMgYW5kCitpbml0aWFsaXplcyBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGFyZSB1c2VkIGJ5IHRoZSBnZW5lcmljIHRpbWUga2VlcGluZyBjb2RlIHRvCitjb252ZXJ0IHRoZSBjbG9jayB0aWNrcyB0byBuYW5vc2Vjb25kIGJhc2VkIHRpbWUgdmFsdWVzLiBBbGwgb3RoZXIgdGltZSBrZWVwaW5nCityZWxhdGVkIGZ1bmN0aW9uYWxpdHkgaXMgbW92ZWQgaW50byB0aGUgZ2VuZXJpYyBjb2RlLiBUaGUgR1RPRCBiYXNlIHBhdGNoIGdvdAorbWVyZ2VkIGludG8gdGhlIDIuNi4xOCBrZXJuZWwuCisKK0Z1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEdlbmVyaWMgVGltZSBPZiBEYXkgZnJhbWV3b3JrIGlzIGF2YWlsYWJsZSBpbiB0aGUKK09MUyAyMDA1IFByb2NlZWRpbmdzIFZvbHVtZSAxOgoraHR0cDovL3d3dy5saW51eHN5bXBvc2l1bS5vcmcvMjAwNS9saW51eHN5bXBvc2l1bV9wcm9jdjEucGRmCisKK1RoZSBwYXBlciAiV2UgQXJlIE5vdCBHZXR0aW5nIEFueSBZb3VuZ2VyOiBBIE5ldyBBcHByb2FjaCB0byBUaW1lIGFuZAorVGltZXJzIiB3YXMgd3JpdHRlbiBieSBKLiBTdHVsdHosIEQuVi4gSGFydCwgJiBOLiBBcmF2YW11ZGFuLgorCitGaWd1cmUgIzMgKE9MUyBzbGlkZXMgcC4xOCkgaWxsdXN0cmF0ZXMgdGhlIHRyYW5zZm9ybWF0aW9uLgorCisKK2Nsb2NrIGV2ZW50IG1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hpbGUgY2xvY2sgc291cmNlcyBwcm92aWRlIHJlYWQgYWNjZXNzIHRvIHRoZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdGltZQordmFsdWUsIGNsb2NrIGV2ZW50IGRldmljZXMgYXJlIHVzZWQgdG8gc2NoZWR1bGUgdGhlIG5leHQgZXZlbnQKK2ludGVycnVwdChzKS4gVGhlIG5leHQgZXZlbnQgaXMgY3VycmVudGx5IGRlZmluZWQgdG8gYmUgcGVyaW9kaWMsIHdpdGggaXRzCitwZXJpb2QgZGVmaW5lZCBhdCBjb21waWxlIHRpbWUuIFRoZSBzZXR1cCBhbmQgc2VsZWN0aW9uIG9mIHRoZSBldmVudCBkZXZpY2UKK2ZvciB2YXJpb3VzIGV2ZW50IGRyaXZlbiBmdW5jdGlvbmFsaXRpZXMgaXMgaGFyZHdpcmVkIGludG8gdGhlIGFyY2hpdGVjdHVyZQorZGVwZW5kZW50IGNvZGUuIFRoaXMgcmVzdWx0cyBpbiBkdXBsaWNhdGVkIGNvZGUgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzIGFuZAorbWFrZXMgaXQgZXh0cmVtZWx5IGRpZmZpY3VsdCB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbSB0byB1c2UKK2V2ZW50IGludGVycnVwdCBkZXZpY2VzIG90aGVyIHRoYW4gdGhvc2UgYWxyZWFkeSBidWlsdCBpbnRvIHRoZQorYXJjaGl0ZWN0dXJlLiBBbm90aGVyIGltcGxpY2F0aW9uIG9mIHRoZSBjdXJyZW50IGRlc2lnbiBpcyB0aGF0IGl0IGlzIG5lY2Vzc2FyeQordG8gdG91Y2ggYWxsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGluIG9yZGVyIHRvIHByb3ZpZGUgbmV3CitmdW5jdGlvbmFsaXR5IGxpa2UgaGlnaCByZXNvbHV0aW9uIHRpbWVycyBvciBkeW5hbWljIHRpY2tzLgorCitUaGUgY2xvY2sgZXZlbnRzIHN1YnN5c3RlbSB0cmllcyB0byBhZGRyZXNzIHRoaXMgcHJvYmxlbSBieSBwcm92aWRpbmcgYSBnZW5lcmljCitzb2x1dGlvbiB0byBtYW5hZ2UgY2xvY2sgZXZlbnQgZGV2aWNlcyBhbmQgdGhlaXIgdXNhZ2UgZm9yIHRoZSB2YXJpb3VzIGNsb2NrCitldmVudCBkcml2ZW4ga2VybmVsIGZ1bmN0aW9uYWxpdGllcy4gVGhlIGdvYWwgb2YgdGhlIGNsb2NrIGV2ZW50IHN1YnN5c3RlbSBpcwordG8gbWluaW1pemUgdGhlIGNsb2NrIGV2ZW50IHJlbGF0ZWQgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBjb2RlIHRvIHRoZSBwdXJlCitoYXJkd2FyZSByZWxhdGVkIGhhbmRsaW5nIGFuZCB0byBhbGxvdyBlYXN5IGFkZGl0aW9uIGFuZCB1dGlsaXphdGlvbiBvZiBuZXcKK2Nsb2NrIGV2ZW50IGRldmljZXMuIEl0IGFsc28gbWluaW1pemVzIHRoZSBkdXBsaWNhdGVkIGNvZGUgYWNyb3NzIHRoZQorYXJjaGl0ZWN0dXJlcyBhcyBpdCBwcm92aWRlcyBnZW5lcmljIGZ1bmN0aW9uYWxpdHkgZG93biB0byB0aGUgaW50ZXJydXB0CitzZXJ2aWNlIGhhbmRsZXIsIHdoaWNoIGlzIGFsbW9zdCBpbmhlcmVudGx5IGhhcmR3YXJlIGRlcGVuZGVudC4KKworQ2xvY2sgZXZlbnQgZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZCBlaXRoZXIgYnkgdGhlIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgYm9vdAorY29kZSBvciBhdCBtb2R1bGUgaW5zZXJ0aW9uIHRpbWUuIEVhY2ggY2xvY2sgZXZlbnQgZGV2aWNlIGZpbGxzIGEgZGF0YQorc3RydWN0dXJlIHdpdGggY2xvY2stc3BlY2lmaWMgcHJvcGVydHkgcGFyYW1ldGVycyBhbmQgY2FsbGJhY2sgZnVuY3Rpb25zLiBUaGUKK2Nsb2NrIGV2ZW50IG1hbmFnZW1lbnQgZGVjaWRlcywgYnkgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBwYXJhbWV0ZXJzLCB0aGUKK3NldCBvZiBzeXN0ZW0gZnVuY3Rpb25zIGEgY2xvY2sgZXZlbnQgZGV2aWNlIHdpbGwgYmUgdXNlZCB0byBzdXBwb3J0LiBUaGlzCitpbmNsdWRlcyB0aGUgZGlzdGluY3Rpb24gb2YgcGVyLUNQVSBhbmQgcGVyLXN5c3RlbSBnbG9iYWwgZXZlbnQgZGV2aWNlcy4KKworU3lzdGVtLWxldmVsIGdsb2JhbCBldmVudCBkZXZpY2VzIGFyZSB1c2VkIGZvciB0aGUgTGludXggcGVyaW9kaWMgdGljay4gUGVyLUNQVQorZXZlbnQgZGV2aWNlcyBhcmUgdXNlZCB0byBwcm92aWRlIGxvY2FsIENQVSBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgcHJvY2VzcworYWNjb3VudGluZywgcHJvZmlsaW5nLCBhbmQgaGlnaCByZXNvbHV0aW9uIHRpbWVycy4KKworVGhlIG1hbmFnZW1lbnQgbGF5ZXIgYXNzaWduZXMgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxpd2luZyBmdW5jdGlvbnMgdG8gYSBjbG9jaworZXZlbnQgZGV2aWNlOgorICAgICAgLSBzeXN0ZW0gZ2xvYmFsIHBlcmlvZGljIHRpY2sgKGppZmZpZXMgdXBkYXRlKQorICAgICAgLSBjcHUgbG9jYWwgdXBkYXRlX3Byb2Nlc3NfdGltZXMKKyAgICAgIC0gY3B1IGxvY2FsIHByb2ZpbGluZworICAgICAgLSBjcHUgbG9jYWwgbmV4dCBldmVudCBpbnRlcnJ1cHQgKG5vbiBwZXJpb2RpYyBtb2RlKQorCitUaGUgY2xvY2sgZXZlbnQgZGV2aWNlIGRlbGVnYXRlcyB0aGUgc2VsZWN0aW9uIG9mIHRob3NlIHRpbWVyIGludGVycnVwdCByZWxhdGVkCitmdW5jdGlvbnMgY29tcGxldGVseSB0byB0aGUgbWFuYWdlbWVudCBsYXllci4gVGhlIGNsb2NrIG1hbmFnZW1lbnQgbGF5ZXIgc3RvcmVzCithIGZ1bmN0aW9uIHBvaW50ZXIgaW4gdGhlIGRldmljZSBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUsIHdoaWNoIGhhcyB0byBiZSBjYWxsZWQKK2Zyb20gdGhlIGhhcmR3YXJlIGxldmVsIGhhbmRsZXIuIFRoaXMgcmVtb3ZlcyBhIGxvdCBvZiBkdXBsaWNhdGVkIGNvZGUgZnJvbSB0aGUKK2FyY2hpdGVjdHVyZSBzcGVjaWZpYyB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIGhhbmRzIHRoZSBjb250cm9sIG92ZXIgdGhlCitjbG9jayBldmVudCBkZXZpY2VzIGFuZCB0aGUgYXNzaWdubWVudCBvZiB0aW1lciBpbnRlcnJ1cHQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5Cit0byB0aGUgY29yZSBjb2RlLgorCitUaGUgY2xvY2sgZXZlbnQgbGF5ZXIgQVBJIGlzIHJhdGhlciBzbWFsbC4gQXNpZGUgZnJvbSB0aGUgY2xvY2sgZXZlbnQgZGV2aWNlCityZWdpc3RyYXRpb24gaW50ZXJmYWNlIGl0IHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBzY2hlZHVsZSB0aGUgbmV4dCBldmVudAoraW50ZXJydXB0LCBjbG9jayBldmVudCBkZXZpY2Ugbm90aWZpY2F0aW9uIHNlcnZpY2UgYW5kIHN1cHBvcnQgZm9yIHN1c3BlbmQgYW5kCityZXN1bWUuCisKK1RoZSBmcmFtZXdvcmsgYWRkcyBhYm91dCA3MDAgbGluZXMgb2YgY29kZSB3aGljaCByZXN1bHRzIGluIGEgMktCIGluY3JlYXNlIG9mCit0aGUga2VybmVsIGJpbmFyeSBzaXplLiBUaGUgY29udmVyc2lvbiBvZiBpMzg2IHJlbW92ZXMgYWJvdXQgMTAwIGxpbmVzIG9mCitjb2RlLiBUaGUgYmluYXJ5IHNpemUgZGVjcmVhc2UgaXMgaW4gdGhlIHJhbmdlIG9mIDQwMCBieXRlLiBXZSBiZWxpZXZlIHRoYXQgdGhlCitpbmNyZWFzZSBvZiBmbGV4aWJpbGl0eSBhbmQgdGhlIGF2b2lkYW5jZSBvZiBkdXBsaWNhdGVkIGNvZGUgYWNyb3NzCithcmNoaXRlY3R1cmVzIGp1c3RpZmllcyB0aGUgc2xpZ2h0IGluY3JlYXNlIG9mIHRoZSBiaW5hcnkgc2l6ZS4KKworVGhlIGNvbnZlcnNpb24gb2YgYW4gYXJjaGl0ZWN0dXJlIGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCwgYnV0IGFsbG93cyB0bwordXRpbGl6ZSB0aGUgaGlnaCByZXNvbHV0aW9uIGFuZCBkeW5hbWljIHRpY2sgZnVuY3Rpb25hbGl0ZXMgd2l0aG91dCBhbnkgY2hhbmdlCit0byB0aGUgY2xvY2sgZXZlbnQgZGV2aWNlIGFuZCB0aW1lciBpbnRlcnJ1cHQgY29kZS4gQWZ0ZXIgdGhlIGNvbnZlcnNpb24gdGhlCitlbmFibGluZyBvZiBoaWdoIHJlc29sdXRpb24gdGltZXJzIGFuZCBkeW5hbWljIHRpY2tzIGlzIHNpbXBseSBwcm92aWRlZCBieQorYWRkaW5nIHRoZSBrZXJuZWwvdGltZS9LY29uZmlnIGZpbGUgdG8gdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBLY29uZmlnIGFuZAorYWRkaW5nIHRoZSBkeW5hbWljIHRpY2sgc3BlY2lmaWMgY2FsbHMgdG8gdGhlIGlkbGUgcm91dGluZSAoYSB0b3RhbCBvZiAzIGxpbmVzCithZGRlZCB0byB0aGUgaWRsZSBmdW5jdGlvbiBhbmQgdGhlIEtjb25maWcgZmlsZSkKKworRmlndXJlICM0IChPTFMgc2xpZGVzIHAuMjApIGlsbHVzdHJhdGVzIHRoZSB0cmFuc2Zvcm1hdGlvbi4KKworCitoaWdoIHJlc29sdXRpb24gdGltZXIgZnVuY3Rpb25hbGl0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHVyaW5nIHN5c3RlbSBib290IGl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgdGhlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lcgorZnVuY3Rpb25hbGl0eSwgd2hpbGUgbWFraW5nIGl0IHBvc3NpYmxlIHdvdWxkIGJlIGRpZmZpY3VsdCBhbmQgd291bGQgc2VydmUgbm8KK3VzZWZ1bCBmdW5jdGlvbi4gVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjbG9jayBldmVudCBkZXZpY2UgZnJhbWV3b3JrLCB0aGUKK2Nsb2NrIHNvdXJjZSBmcmFtZXdvcmsgKEdUT0QpIGFuZCBocnRpbWVycyBpdHNlbGYgaGFzIHRvIGJlIGRvbmUgYW5kCithcHByb3ByaWF0ZSBjbG9jayBzb3VyY2VzIGFuZCBjbG9jayBldmVudCBkZXZpY2VzIGhhdmUgdG8gYmUgcmVnaXN0ZXJlZCBiZWZvcmUKK3RoZSBoaWdoIHJlc29sdXRpb24gZnVuY3Rpb25hbGl0eSBjYW4gd29yay4gVXAgdG8gdGhlIHBvaW50IHdoZXJlIGhydGltZXJzIGFyZQoraW5pdGlhbGl6ZWQsIHRoZSBzeXN0ZW0gd29ya3MgaW4gdGhlIHVzdWFsIGxvdyByZXNvbHV0aW9uIHBlcmlvZGljIG1vZGUuIFRoZQorY2xvY2sgc291cmNlIGFuZCB0aGUgY2xvY2sgZXZlbnQgZGV2aWNlIGxheWVycyBwcm92aWRlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbnMKK3doaWNoIGluZm9ybSBocnRpbWVycyBhYm91dCBhdmFpbGFiaWxpdHkgb2YgbmV3IGhhcmR3YXJlLiBocnRpbWVycyB2YWxpZGF0ZXMKK3RoZSB1c2FiaWxpdHkgb2YgdGhlIHJlZ2lzdGVyZWQgY2xvY2sgc291cmNlcyBhbmQgY2xvY2sgZXZlbnQgZGV2aWNlcyBiZWZvcmUKK3N3aXRjaGluZyB0byBoaWdoIHJlc29sdXRpb24gbW9kZS4gVGhpcyBlbnN1cmVzIGFsc28gdGhhdCBhIGtlcm5lbCB3aGljaCBpcworY29uZmlndXJlZCBmb3IgaGlnaCByZXNvbHV0aW9uIHRpbWVycyBjYW4gcnVuIG9uIGEgc3lzdGVtIHdoaWNoIGxhY2tzIHRoZQorbmVjZXNzYXJ5IGhhcmR3YXJlIHN1cHBvcnQuCisKK1RoZSBoaWdoIHJlc29sdXRpb24gdGltZXIgY29kZSBkb2VzIG5vdCBzdXBwb3J0IFNNUCBtYWNoaW5lcyB3aGljaCBoYXZlIG9ubHkKK2dsb2JhbCBjbG9jayBldmVudCBkZXZpY2VzLiBUaGUgc3VwcG9ydCBvZiBzdWNoIGhhcmR3YXJlIHdvdWxkIGludm9sdmUgSVBJCitjYWxscyB3aGVuIGFuIGludGVycnVwdCBoYXBwZW5zLiBUaGUgb3ZlcmhlYWQgd291bGQgYmUgbXVjaCBsYXJnZXIgdGhhbiB0aGUKK2JlbmVmaXQuIFRoaXMgaXMgdGhlIHJlYXNvbiB3aHkgd2UgY3VycmVudGx5IGRpc2FibGUgaGlnaCByZXNvbHV0aW9uIGFuZAorZHluYW1pYyB0aWNrcyBvbiBpMzg2IFNNUCBzeXN0ZW1zIHdoaWNoIHN0b3AgdGhlIGxvY2FsIEFQSUMgaW4gQzMgcG93ZXIKK3N0YXRlLiBBIHdvcmthcm91bmQgaXMgYXZhaWxhYmxlIGFzIGFuIGlkZWEsIGJ1dCB0aGUgcHJvYmxlbSBoYXMgbm90IGJlZW4KK3RhY2tsZWQgeWV0LgorCitUaGUgdGltZSBvcmRlcmVkIGluc2VydGlvbiBvZiB0aW1lcnMgcHJvdmlkZXMgYWxsIHRoZSBpbmZyYXN0cnVjdHVyZSB0byBkZWNpZGUKK3doZXRoZXIgdGhlIGV2ZW50IGRldmljZSBoYXMgdG8gYmUgcmVwcm9ncmFtbWVkIHdoZW4gYSB0aW1lciBpcyBhZGRlZC4gVGhlCitkZWNpc2lvbiBpcyBtYWRlIHBlciB0aW1lciBiYXNlIGFuZCBzeW5jaHJvbml6ZWQgYWNyb3NzIHBlci1jcHUgdGltZXIgYmFzZXMgaW4KK2Egc3VwcG9ydCBmdW5jdGlvbi4gVGhlIGRlc2lnbiBhbGxvd3MgdGhlIHN5c3RlbSB0byB1dGlsaXplIHNlcGFyYXRlIHBlci1DUFUKK2Nsb2NrIGV2ZW50IGRldmljZXMgZm9yIHRoZSBwZXItQ1BVIHRpbWVyIGJhc2VzLCBidXQgY3VycmVudGx5IG9ubHkgb25lCityZXByb2dyYW1tYWJsZSBjbG9jayBldmVudCBkZXZpY2UgcGVyLUNQVSBpcyB1dGlsaXplZC4KKworV2hlbiB0aGUgdGltZXIgaW50ZXJydXB0IGhhcHBlbnMsIHRoZSBuZXh0IGV2ZW50IGludGVycnVwdCBoYW5kbGVyIGlzIGNhbGxlZAorZnJvbSB0aGUgY2xvY2sgZXZlbnQgZGlzdHJpYnV0aW9uIGNvZGUgYW5kIG1vdmVzIGV4cGlyZWQgdGltZXJzIGZyb20gdGhlCityZWQtYmxhY2sgdHJlZSB0byBhIHNlcGFyYXRlIGRvdWJsZSBsaW5rZWQgbGlzdCBhbmQgaW52b2tlcyB0aGUgc29mdGlycQoraGFuZGxlci4gQW4gYWRkaXRpb25hbCBtb2RlIGZpZWxkIGluIHRoZSBocnRpbWVyIHN0cnVjdHVyZSBhbGxvd3MgdGhlIHN5c3RlbSB0bworZXhlY3V0ZSBjYWxsYmFjayBmdW5jdGlvbnMgZGlyZWN0bHkgZnJvbSB0aGUgbmV4dCBldmVudCBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcworaXMgcmVzdHJpY3RlZCB0byBjb2RlIHdoaWNoIGNhbiBzYWZlbHkgYmUgZXhlY3V0ZWQgaW4gdGhlIGhhcmQgaW50ZXJydXB0Citjb250ZXh0LiBUaGlzIGFwcGxpZXMsIGZvciBleGFtcGxlLCB0byB0aGUgY29tbW9uIGNhc2Ugb2YgYSB3YWtldXAgZnVuY3Rpb24gYXMKK3VzZWQgYnkgbmFub3NsZWVwLiBUaGUgYWR2YW50YWdlIG9mIGV4ZWN1dGluZyB0aGUgaGFuZGxlciBpbiB0aGUgaW50ZXJydXB0Citjb250ZXh0IGlzIHRoZSBhdm9pZGFuY2Ugb2YgdXAgdG8gdHdvIGNvbnRleHQgc3dpdGNoZXMgLSBmcm9tIHRoZSBpbnRlcnJ1cHRlZAorY29udGV4dCB0byB0aGUgc29mdGlycSBhbmQgdG8gdGhlIHRhc2sgd2hpY2ggaXMgd29rZW4gdXAgYnkgdGhlIGV4cGlyZWQKK3RpbWVyLgorCitPbmNlIGEgc3lzdGVtIGhhcyBzd2l0Y2hlZCB0byBoaWdoIHJlc29sdXRpb24gbW9kZSwgdGhlIHBlcmlvZGljIHRpY2sgaXMKK3N3aXRjaGVkIG9mZi4gVGhpcyBkaXNhYmxlcyB0aGUgcGVyIHN5c3RlbSBnbG9iYWwgcGVyaW9kaWMgY2xvY2sgZXZlbnQgZGV2aWNlIC0KK2UuZy4gdGhlIFBJVCBvbiBpMzg2IFNNUCBzeXN0ZW1zLgorCitUaGUgcGVyaW9kaWMgdGljayBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IGFuIHBlci1jcHUgaHJ0aW1lci4gVGhlIGNhbGxiYWNrCitmdW5jdGlvbiBpcyBleGVjdXRlZCBpbiB0aGUgbmV4dCBldmVudCBpbnRlcnJ1cHQgY29udGV4dCBhbmQgdXBkYXRlcyBqaWZmaWVzCithbmQgY2FsbHMgdXBkYXRlX3Byb2Nlc3NfdGltZXMgYW5kIHByb2ZpbGluZy4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBocnRpbWVyCitiYXNlZCBwZXJpb2RpYyB0aWNrIGlzIGRlc2lnbmVkIHRvIGJlIGV4dGVuZGVkIHdpdGggZHluYW1pYyB0aWNrIGZ1bmN0aW9uYWxpdHkuCitUaGlzIGFsbG93cyB0byB1c2UgYSBzaW5nbGUgY2xvY2sgZXZlbnQgZGV2aWNlIHRvIHNjaGVkdWxlIGhpZ2ggcmVzb2x1dGlvbgordGltZXIgYW5kIHBlcmlvZGljIGV2ZW50cyAoamlmZmllcyB0aWNrLCBwcm9maWxpbmcsIHByb2Nlc3MgYWNjb3VudGluZykgb24gVVAKK3N5c3RlbXMuIFRoaXMgaGFzIGJlZW4gcHJvdmVkIHRvIHdvcmsgd2l0aCB0aGUgUElUIG9uIGkzODYgYW5kIHRoZSBJbmNyZW1lbnRlcgorb24gUFBDLgorCitUaGUgc29mdGlycSBmb3IgcnVubmluZyB0aGUgaHJ0aW1lciBxdWV1ZXMgYW5kIGV4ZWN1dGluZyB0aGUgY2FsbGJhY2tzIGhhcyBiZWVuCitzZXBhcmF0ZWQgZnJvbSB0aGUgdGljayBib3VuZCB0aW1lciBzb2Z0aXJxIHRvIGFsbG93IGFjY3VyYXRlIGRlbGl2ZXJ5IG9mIGhpZ2gKK3Jlc29sdXRpb24gdGltZXIgc2lnbmFscyB3aGljaCBhcmUgdXNlZCBieSBpdGltZXIgYW5kIFBPU0lYIGludGVydmFsCit0aW1lcnMuIFRoZSBleGVjdXRpb24gb2YgdGhpcyBzb2Z0aXJxIGNhbiBzdGlsbCBiZSBkZWxheWVkIGJ5IG90aGVyIHNvZnRpcnFzLAorYnV0IHRoZSBvdmVyYWxsIGxhdGVuY2llcyBoYXZlIGJlZW4gc2lnbmlmaWNhbnRseSBpbXByb3ZlZCBieSB0aGlzIHNlcGFyYXRpb24uCisKK0ZpZ3VyZSAjNSAoT0xTIHNsaWRlcyBwLjIyKSBpbGx1c3RyYXRlcyB0aGUgdHJhbnNmb3JtYXRpb24uCisKKworZHluYW1pYyB0aWNrcworLS0tLS0tLS0tLS0tLQorCitEeW5hbWljIHRpY2tzIGFyZSB0aGUgbG9naWNhbCBjb25zZXF1ZW5jZSBvZiB0aGUgaHJ0aW1lciBiYXNlZCBwZXJpb2RpYyB0aWNrCityZXBsYWNlbWVudCAoc2NoZWRfdGljaykuIFRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBzY2hlZF90aWNrIGhydGltZXIgaXMKK2V4dGVuZGVkIGJ5IHRocmVlIGZ1bmN0aW9uczoKKworLSBocnRpbWVyX3N0b3Bfc2NoZWRfdGljaworLSBocnRpbWVyX3Jlc3RhcnRfc2NoZWRfdGljaworLSBocnRpbWVyX3VwZGF0ZV9qaWZmaWVzCisKK2hydGltZXJfc3RvcF9zY2hlZF90aWNrKCkgaXMgY2FsbGVkIHdoZW4gYSBDUFUgZ29lcyBpbnRvIGlkbGUgc3RhdGUuIFRoZSBjb2RlCitldmFsdWF0ZXMgdGhlIG5leHQgc2NoZWR1bGVkIHRpbWVyIGV2ZW50IChmcm9tIGJvdGggaHJ0aW1lcnMgYW5kIHRoZSB0aW1lcgord2hlZWwpIGFuZCBpbiBjYXNlIHRoYXQgdGhlIG5leHQgZXZlbnQgaXMgZnVydGhlciBhd2F5IHRoYW4gdGhlIG5leHQgdGljayBpdAorcmVwcm9ncmFtcyB0aGUgc2NoZWRfdGljayB0byB0aGlzIGZ1dHVyZSBldmVudCwgdG8gYWxsb3cgbG9uZ2VyIGlkbGUgc2xlZXBzCit3aXRob3V0IHdvcnRobGVzcyBpbnRlcnJ1cHRpb24gYnkgdGhlIHBlcmlvZGljIHRpY2suIFRoZSBmdW5jdGlvbiBpcyBhbHNvCitjYWxsZWQgd2hlbiBhbiBpbnRlcnJ1cHQgaGFwcGVucyBkdXJpbmcgdGhlIGlkbGUgcGVyaW9kLCB3aGljaCBkb2VzIG5vdCBjYXVzZSBhCityZXNjaGVkdWxlLiBUaGUgY2FsbCBpcyBuZWNlc3NhcnkgYXMgdGhlIGludGVycnVwdCBoYW5kbGVyIG1pZ2h0IGhhdmUgYXJtZWQgYQorbmV3IHRpbWVyIHdob3NlIGV4cGlyeSB0aW1lIGlzIGJlZm9yZSB0aGUgdGltZSB3aGljaCB3YXMgaWRlbnRpZmllZCBhcyB0aGUKK25lYXJlc3QgZXZlbnQgaW4gdGhlIHByZXZpb3VzIGNhbGwgdG8gaHJ0aW1lcl9zdG9wX3NjaGVkX3RpY2suCisKK2hydGltZXJfcmVzdGFydF9zY2hlZF90aWNrKCkgaXMgY2FsbGVkIHdoZW4gdGhlIENQVSBsZWF2ZXMgdGhlIGlkbGUgc3RhdGUgYmVmb3JlCitpdCBjYWxscyBzY2hlZHVsZSgpLiBocnRpbWVyX3Jlc3RhcnRfc2NoZWRfdGljaygpIHJlc3VtZXMgdGhlIHBlcmlvZGljIHRpY2ssCit3aGljaCBpcyBrZXB0IGFjdGl2ZSB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIGhydGltZXJfc3RvcF9zY2hlZF90aWNrKCkuCisKK2hydGltZXJfdXBkYXRlX2ppZmZpZXMoKSBpcyBjYWxsZWQgZnJvbSBpcnFfZW50ZXIoKSB3aGVuIGFuIGludGVycnVwdCBoYXBwZW5zCitpbiB0aGUgaWRsZSBwZXJpb2QgdG8gbWFrZSBzdXJlIHRoYXQgamlmZmllcyBhcmUgdXAgdG8gZGF0ZSBhbmQgdGhlIGludGVycnVwdAoraGFuZGxlciBoYXMgbm90IHRvIGRlYWwgd2l0aCBhbiBldmVudHVhbGx5IHN0YWxlIGppZmZ5IHZhbHVlLgorCitUaGUgZHluYW1pYyB0aWNrIGZlYXR1cmUgcHJvdmlkZXMgc3RhdGlzdGljYWwgdmFsdWVzIHdoaWNoIGFyZSBleHBvcnRlZCB0bwordXNlcnNwYWNlIHZpYSAvcHJvYy9zdGF0cyBhbmQgY2FuIGJlIG1hZGUgYXZhaWxhYmxlIGZvciBlbmhhbmNlZCBwb3dlcgorbWFuYWdlbWVudCBjb250cm9sLgorCitUaGUgaW1wbGVtZW50YXRpb24gbGVhdmVzIHJvb20gZm9yIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgbGlrZSBmdWxsIHRpY2tsZXNzCitzeXN0ZW1zLCB3aGVyZSB0aGUgdGltZSBzbGljZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBzY2hlZHVsZXIsIHZhcmlhYmxlCitmcmVxdWVuY3kgcHJvZmlsaW5nLCBhbmQgYSBjb21wbGV0ZSByZW1vdmFsIG9mIGppZmZpZXMgaW4gdGhlIGZ1dHVyZS4KKworCitBc2lkZSB0aGUgY3VycmVudCBpbml0aWFsIHN1Ym1pc3Npb24gb2YgaTM4NiBzdXBwb3J0LCB0aGUgcGF0Y2hzZXQgaGFzIGJlZW4KK2V4dGVuZGVkIHRvIHg4Nl82NCBhbmQgQVJNIGFscmVhZHkuIEluaXRpYWwgKHdvcmsgaW4gcHJvZ3Jlc3MpIHN1cHBvcnQgaXMgYWxzbworYXZhaWxhYmxlIGZvciBNSVBTIGFuZCBQb3dlclBDLgorCisJICBUaG9tYXMsIEluZ28KKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHJ0aW1lcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9ocnRpbWVycy9ocnRpbWVycy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaHJ0aW1lcnMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2hydGltZXJzL2hydGltZXJzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3IGIvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3CmluZGV4IDc0YTgwOTkuLmMwNTI4ZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKQEAgLTEzNSw2ICsxMzUsMTYgQEAKIHN0YXJ0dXAsIGNvbnN1bHQgbG1fc2Vuc29ycydzIC9ldGMvc2Vuc29ycy5jb25mLiAoMiA9IHRoZXJtaXN0b3I7CiAzID0gdGhlcm1hbCBkaW9kZSkKIAorCitGYW4gc3BlZWQgY29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0KKwogVGhlIGZhbiBzcGVlZCBjb250cm9sIGZlYXR1cmVzIGFyZSBsaW1pdGVkIHRvIG1hbnVhbCBQV00gbW9kZS4gQXV0b21hdGljCiAiU21hcnQgR3VhcmRpYW4iIG1vZGUgY29udHJvbCBoYW5kbGluZyBpcyBub3QgaW1wbGVtZW50ZWQuIEhvd2V2ZXIKIGlmIHlvdSB3YW50IHRvIGdvIGZvciAibWFudWFsIG1vZGUiIGp1c3Qgd3JpdGUgMSB0byBwd21OX2VuYWJsZS4KKworSWYgeW91IGFyZSBvbmx5IGFibGUgdG8gY29udHJvbCB0aGUgZmFuIHNwZWVkIHdpdGggdmVyeSBzbWFsbCBQV00gdmFsdWVzLAordHJ5IGxvd2VyaW5nIHRoZSBQV00gYmFzZSBmcmVxdWVuY3kgKHB3bTFfZnJlcSkuIERlcGVuZGluZyBvbiB0aGUgZmFuLAoraXQgbWF5IGdpdmUgeW91IGEgc29tZXdoYXQgZ3JlYXRlciBjb250cm9sIHJhbmdlLiBUaGUgc2FtZSBmcmVxdWVuY3kgaXMKK3VzZWQgdG8gZHJpdmUgYWxsIGZhbiBvdXRwdXRzLCB3aGljaCBpcyB3aHkgcHdtMl9mcmVxIGFuZCBwd20zX2ZyZXEgYXJlCityZWFkLW9ubHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZSBiL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlCmluZGV4IGVmZWYzYjkuLmQ3M2QyZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlCkBAIC0xNjYsMTYgKzE2NiwyMSBAQAogCiBwd21bMS0qXV9lbmFibGUKIAkJU3dpdGNoIFBXTSBvbiBhbmQgb2ZmLgotCQlOb3QgYWx3YXlzIHByZXNlbnQgZXZlbiBpZiBmYW4qX3B3bSBpcy4KKwkJTm90IGFsd2F5cyBwcmVzZW50IGV2ZW4gaWYgcHdtTiBpcy4KIAkJMDogdHVybiBvZmYKIAkJMTogdHVybiBvbiBpbiBtYW51YWwgbW9kZQogCQkyKzogdHVybiBvbiBpbiBhdXRvbWF0aWMgbW9kZQotCQlDaGVjayBpbmRpdmlkdWFsIGNoaXAgZG9jdW1lbnRhdGlvbiBmaWxlcyBmb3IgYXV0b21hdGljIG1vZGUgZGV0YWlscy4KKwkJQ2hlY2sgaW5kaXZpZHVhbCBjaGlwIGRvY3VtZW50YXRpb24gZmlsZXMgZm9yIGF1dG9tYXRpYyBtb2RlCisJCWRldGFpbHMuCiAJCVJXCiAKLXB3bVsxLSpdX21vZGUKLQkJMDogREMgbW9kZQotCQkxOiBQV00gbW9kZQorcHdtWzEtKl1fbW9kZQkwOiBEQyBtb2RlIChkaXJlY3QgY3VycmVudCkKKwkJMTogUFdNIG1vZGUgKHB1bHNlLXdpZHRoIG1vZHVsYXRpb24pCisJCVJXCisKK3B3bVsxLSpdX2ZyZXEJQmFzZSBQV00gZnJlcXVlbmN5IGluIEh6LgorCQlPbmx5IHBvc3NpYmx5IGF2YWlsYWJsZSB3aGVuIHB3bU5fbW9kZSBpcyBQV00sIGJ1dCBub3QgYWx3YXlzCisJCXByZXNlbnQgZXZlbiB0aGVuLgogCQlSVwogCiBwd21bMS0qXV9hdXRvX2NoYW5uZWxzX3RlbXAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNjI3ZWhmIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYKaW5kZXggOGExNWE3NC4uMDMwZmFjNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYKQEAgLTIsMjYgKzIsMjkgQEAKID09PT09PT09PT09PT09PT09PT09PT09CiAKIFN1cHBvcnRlZCBjaGlwczoKLSAgKiBXaW5ib25kIFc4MzYyN0VIRi9FSEcgKElTQSBhY2Nlc3MgT05MWSkKKyAgKiBXaW5ib25kIFc4MzYyN0VIRi9FSEcvREhHIChJU0EgYWNjZXNzIE9OTFkpCiAgICAgUHJlZml4OiAndzgzNjI3ZWhmJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3LndpbmJvbmQtdXNhLmNvbS9wcm9kdWN0cy93aW5ib25kX3Byb2R1Y3RzL3BkZnMvUENJQy9XODM2MjdFSEZfJTIwVzgzNjI3RUhHYi5wZGYKKyAgICBEYXRhc2hlZXQ6CisgICAgICAgIGh0dHA6Ly93d3cud2luYm9uZC11c2EuY29tL3Byb2R1Y3RzL3dpbmJvbmRfcHJvZHVjdHMvcGRmcy9QQ0lDL1c4MzYyN0VIRl8lMjBXODM2MjdFSEdiLnBkZgorICAgICAgICBESEcgZGF0YXNoZWV0IGNvbmZpZGVudGlhbC4KIAogQXV0aG9yczoKICAgICAgICAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgICAgICAgIFl1YW4gTXUgKFdpbmJvbmQpCiAgICAgICAgIFJ1ZG9sZiBNYXJlayA8ci5tYXJla0Bhc3NlbWJsZXIuY3o+CisgICAgICAgIERhdmlkIEh1YmJhcmQgPGRhdmlkLmMuaHViYmFyZEBnbWFpbC5jb20+CiAKIERlc2NyaXB0aW9uCiAtLS0tLS0tLS0tLQogCi1UaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBXaW5ib25kIFc4MzYyN0VIRiBhbmQgVzgzNjI3RUhHCi1zdXBlciBJL08gY2hpcHMuIFdlIHdpbGwgcmVmZXIgdG8gdGhlbSBjb2xsZWN0aXZlbHkgYXMgV2luYm9uZCBjaGlwcy4KK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIFdpbmJvbmQgVzgzNjI3RUhGLCBXODM2MjdFSEcsIGFuZAorVzgzNjI3REhHIHN1cGVyIEkvTyBjaGlwcy4gV2Ugd2lsbCByZWZlciB0byB0aGVtIGNvbGxlY3RpdmVseSBhcyBXaW5ib25kIGNoaXBzLgogCiBUaGUgY2hpcHMgaW1wbGVtZW50IHRocmVlIHRlbXBlcmF0dXJlIHNlbnNvcnMsIGZpdmUgZmFuIHJvdGF0aW9uCi1zcGVlZCBzZW5zb3JzLCB0ZW4gYW5hbG9nIHZvbHRhZ2Ugc2Vuc29ycywgYWxhcm1zIHdpdGggYmVlcCB3YXJuaW5ncyAoY29udHJvbAotdW5pbXBsZW1lbnRlZCksIGFuZCBzb21lIGF1dG9tYXRpYyBmYW4gcmVndWxhdGlvbiBzdHJhdGVnaWVzIChwbHVzIG1hbnVhbAotZmFuIGNvbnRyb2wgbW9kZSkuCitzcGVlZCBzZW5zb3JzLCB0ZW4gYW5hbG9nIHZvbHRhZ2Ugc2Vuc29ycyAob25seSBuaW5lIGZvciB0aGUgNjI3REhHKSwgYWxhcm1zCit3aXRoIGJlZXAgd2FybmluZ3MgKGNvbnRyb2wgdW5pbXBsZW1lbnRlZCksIGFuZCBzb21lIGF1dG9tYXRpYyBmYW4gcmVndWxhdGlvbgorc3RyYXRlZ2llcyAocGx1cyBtYW51YWwgZmFuIGNvbnRyb2wgbW9kZSkuCiAKIFRlbXBlcmF0dXJlcyBhcmUgbWVhc3VyZWQgaW4gZGVncmVlcyBDZWxzaXVzIGFuZCBtZWFzdXJlbWVudCByZXNvbHV0aW9uIGlzIDEKIGRlZ0MgZm9yIHRlbXAxIGFuZCAwLjUgZGVnQyBmb3IgdGVtcDIgYW5kIHRlbXAzLiBBbiBhbGFybSBpcyB0cmlnZ2VyZWQgd2hlbgpAQCAtNTUsNiArNTgsOSBAQAogL3N5cyBmaWxlcwogLS0tLS0tLS0tLQogCituYW1lIC0gdGhpcyBpcyBhIHN0YW5kYXJkIGh3bW9uIGRldmljZSBlbnRyeS4gRm9yIHRoZSBXODM2MjdFSEYgYW5kIFc4MzYyN0VIRywKKyAgICAgICBpdCBpcyBzZXQgdG8gInc4MzYyN2VoZiIgYW5kIGZvciB0aGUgVzgzNjI3REhHIGl0IGlzIHNldCB0byAidzgzNjI3ZGhnIgorCiBwd21bMS00XSAtIHRoaXMgZmlsZSBzdG9yZXMgUFdNIGR1dHkgY3ljbGUgb3IgREMgdmFsdWUgKGZhbiBzcGVlZCkgaW4gcmFuZ2U6CiAJICAgMCAoc3RvcCkgdG8gMjU1IChmdWxsKQogCkBAIC04MywzICs4OSwzNyBAQAogCiBOb3RlOiBsYXN0IHR3byBmdW5jdGlvbnMgYXJlIGluZmx1ZW5jZWQgYnkgb3RoZXIgY29udHJvbCBiaXRzLCBub3QgeWV0IGV4cG9ydGVkCiAgICAgICBieSB0aGUgZHJpdmVyLCBzbyBhIGNoYW5nZSBtaWdodCBub3QgaGF2ZSBhbnkgZWZmZWN0LgorCitJbXBsZW1lbnRhdGlvbiBEZXRhaWxzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Z1dHVyZSBkcml2ZXIgZGV2ZWxvcG1lbnQgc2hvdWxkIGJlYXIgaW4gbWluZCB0aGF0IHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGhhdmUKK2RpZmZlcmVudCBmdW5jdGlvbnMgb24gdGhlIDYyN0VIRiBhbmQgdGhlIDYyN0RIRy4gU29tZSByZWdpc3RlcnMgYWxzbyBoYXZlCitkaWZmZXJlbnQgcG93ZXItb24gZGVmYXVsdCB2YWx1ZXMsIGJ1dCBCSU9TIHNob3VsZCBhbHJlYWR5IGJlIGxvYWRpbmcKK2FwcHJvcHJpYXRlIGRlZmF1bHRzLiBOb3RlIHRoYXQgYmFuayBzZWxlY3Rpb24gbXVzdCBiZSBwZXJmb3JtZWQgYXMgaXMgY3VycmVudGx5Citkb25lIGluIHRoZSBkcml2ZXIgZm9yIGFsbCByZWdpc3RlciBhZGRyZXNzZXMuCisKKzB4NDk6ICBvbmx5IG9uIERIRywgc2VsZWN0cyB0ZW1wZXJhdHVyZSBzb3VyY2UgZm9yIEFVWCBmYW4sIENQVSBmYW4wCisweDRhOiAgbm90IGNvbXBsZXRlbHkgZG9jdW1lbnRlZCBmb3IgdGhlIEVIRiBhbmQgdGhlIERIRyBkb2N1bWVudGF0aW9uIGFzc2lnbnMKKyAgICAgICBkaWZmZXJlbnQgYmVoYXZpb3IgdG8gYml0cyA3IGFuZCA2LCBpbmNsdWRpbmcgZXh0ZW5kaW5nIHRoZSB0ZW1wZXJhdHVyZQorICAgICAgIGlucHV0IHNlbGVjdGlvbiB0byBTbWFydEZhbiBJLCBub3QganVzdCBTbWFydEZhbiBJSUkuIFRlc3Rpbmcgb24gdGhlIEVIRgorICAgICAgIHdpbGwgcmV2ZWFsIHdoZXRoZXIgdGhleSBhcmUgY29tcGF0aWJsZSBvciBub3QuCisKKzB4NTg6ICBDaGlwIElEOiAweGExPUVIRiAweGMxPURIRworMHg1ZTogIG9ubHkgb24gREhHLCBoYXMgYml0cyB0byBlbmFibGUgImN1cnJlbnQgbW9kZSIgdGVtcGVyYXR1cmUgZGV0ZWN0aW9uIGFuZAorICAgICAgIGNyaXRpY2FsIHRlbXBlcmF0dXJlIHByb3RlY3Rpb24KKzB4NDViOiBvbmx5IG9uIEVIRiwgYml0IDMsIHZpbjQgYWxhcm0gKEVIRiBzdXBwb3J0cyAxMCBpbnB1dHMsIG9ubHkgOSBvbiBESEcpCisweDU1Mjogb25seSBvbiBFSEYsIHZpbjQKKzB4NTU4OiBvbmx5IG9uIEVIRiwgdmluNCBoaWdoIGxpbWl0CisweDU1OTogb25seSBvbiBFSEYsIHZpbjQgbG93IGxpbWl0CisweDZiOiAgb25seSBvbiBESEcsIFNZUyBmYW4gY3JpdGljYWwgdGVtcGVyYXR1cmUKKzB4NmM6ICBvbmx5IG9uIERIRywgQ1BVIGZhbjAgY3JpdGljYWwgdGVtcGVyYXR1cmUKKzB4NmQ6ICBvbmx5IG9uIERIRywgQVVYIGZhbiBjcml0aWNhbCB0ZW1wZXJhdHVyZQorMHg2ZTogIG9ubHkgb24gREhHLCBDUFUgZmFuMSBjcml0aWNhbCB0ZW1wZXJhdHVyZQorCisweDUwLTB4NTUgYW5kIDB4NjUwLTB4NjU3IGFyZSBtYXJrZWQgIlRlc3QgUmVnaXN0ZXIiIGZvciB0aGUgRUhGLCBidXQgIlJlc2VydmVkCisgICAgICAgUmVnaXN0ZXIiIGZvciB0aGUgREhHCisKK1RoZSBESEcgYWxzbyBzdXBwb3J0cyBQRUNJLCB3aGVyZSB0aGUgREhHIHF1ZXJpZXMgSW50ZWwgQ1BVIHRlbXBlcmF0dXJlcywgYW5kCit0aGUgSUNIOCBzb3V0aGJyaWRnZSBnZXRzIHRoYXQgZGF0YSB2aWEgUEVDSSBmcm9tIHRoZSBESEcsIHNvIHRoYXQgdGhlCitzb3V0aGJyaWRnZSBkcml2ZXMgdGhlIGZhbnMuIEFuZCB0aGUgREhHIHN1cHBvcnRzIFNTVCwgYSBvbmUtd2lyZSBzZXJpYWwgYnVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQKaW5kZXggNGIzZDY3MS4uYmI1MzA2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0CkBAIC0zNCw3ICszNCw3IEBACiAJICAgLS0tIDYuMSBTZXQgdmFyaWFibGVzIHRvIHR3ZWFrIHRoZSBidWlsZCB0byB0aGUgYXJjaGl0ZWN0dXJlCiAJICAgLS0tIDYuMiBBZGQgcHJlcmVxdWlzaXRlcyB0byBhcmNocHJlcGFyZToKIAkgICAtLS0gNi4zIExpc3QgZGlyZWN0b3JpZXMgdG8gdmlzaXQgd2hlbiBkZXNjZW5kaW5nCi0JICAgLS0tIDYuNCBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgYm9vdCBpbWFnZXMKKwkgICAtLS0gNi40IEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBib290IGltYWdlcwogCSAgIC0tLSA2LjUgQnVpbGRpbmcgbm9uLWtidWlsZCB0YXJnZXRzCiAJICAgLS0tIDYuNiBDb21tYW5kcyB1c2VmdWwgZm9yIGJ1aWxkaW5nIGEgYm9vdCBpbWFnZQogCSAgIC0tLSA2LjcgQ3VzdG9tIGtidWlsZCBjb21tYW5kcwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJRXhhbXBsZToKIAkJb2JqLXkgKz0gZm9vLm8KIAotCVRoaXMgdGVsbCBrYnVpbGQgdGhhdCB0aGVyZSBpcyBvbmUgb2JqZWN0IGluIHRoYXQgZGlyZWN0b3J5LCBuYW1lZAorCVRoaXMgdGVsbHMga2J1aWxkIHRoYXQgdGhlcmUgaXMgb25lIG9iamVjdCBpbiB0aGF0IGRpcmVjdG9yeSwgbmFtZWQKIAlmb28uby4gZm9vLm8gd2lsbCBiZSBidWlsdCBmcm9tIGZvby5jIG9yIGZvby5TLgogCiAJSWYgZm9vLm8gc2hhbGwgYmUgYnVpbHQgYXMgYSBtb2R1bGUsIHRoZSB2YXJpYWJsZSBvYmotbSBpcyB1c2VkLgpAQCAtMzUzLDcgKzM1Myw3IEBACiAJU3BlY2lhbCBydWxlcyBhcmUgdXNlZCB3aGVuIHRoZSBrYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgZG9lcwogCW5vdCBwcm92aWRlIHRoZSByZXF1aXJlZCBzdXBwb3J0LiBBIHR5cGljYWwgZXhhbXBsZSBpcwogCWhlYWRlciBmaWxlcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLgotCUFub3RoZXIgZXhhbXBsZSBhcmUgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBNYWtlZmlsZXMgd2hpY2gKKwlBbm90aGVyIGV4YW1wbGUgYXJlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgTWFrZWZpbGVzIHdoaWNoCiAJbmVlZCBzcGVjaWFsIHJ1bGVzIHRvIHByZXBhcmUgYm9vdCBpbWFnZXMgZXRjLgogCiAJU3BlY2lhbCBydWxlcyBhcmUgd3JpdHRlbiBhcyBub3JtYWwgTWFrZSBydWxlcy4KQEAgLTQxNiw3ICs0MTYsNyBAQAogCQkjYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQogCQl2c3lzY2FsbC1mbGFncyArPSAkKGNhbGwgbGQtb3B0aW9uLCAtV2wkKGNvbW1hKS0taGFzaC1zdHlsZT1zeXN2KQogCi0JSW4gdGhlIGFib3ZlIGV4YW1wbGUgdnN5c2NhbGwtZmxhZ3Mgd2lsbCBiZSBhc3NpZ25lZCB0aGUgb3B0aW9uCisJSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHZzeXNjYWxsLWZsYWdzIHdpbGwgYmUgYXNzaWduZWQgdGhlIG9wdGlvbgogCS1XbCQoY29tbWEpLS1oYXNoLXN0eWxlPXN5c3YgaWYgaXQgaXMgc3VwcG9ydGVkIGJ5ICQoQ0MpLgogCVRoZSBzZWNvbmQgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBpZiBzdXBwbGllZCB3aWxsIGJlIHVzZWQKIAlpZiBmaXJzdCBhcmd1bWVudCBpcyBub3Qgc3VwcG9ydGVkLgpAQCAtNDM0LDcgKzQzNCw3IEBACiAJCSNhcmNoL2kzODYvTWFrZWZpbGUKIAkJY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9cGVudGl1bS1tbXgsLW1hcmNoPWk1ODYpCiAKLQlJbiB0aGUgYWJvdmUgZXhhbXBsZSBjZmxhZ3MteSB3aWxsIGJlIGFzc2lnbmVkIHRoZSBvcHRpb24KKwlJbiB0aGUgYWJvdmUgZXhhbXBsZSwgY2ZsYWdzLXkgd2lsbCBiZSBhc3NpZ25lZCB0aGUgb3B0aW9uCiAJLW1hcmNoPXBlbnRpdW0tbW14IGlmIHN1cHBvcnRlZCBieSAkKENDKSwgb3RoZXJ3aXNlIC1tYXJjaD1pNTg2LgogCVRoZSBzZWNvbmQgYXJndW1lbnQgdG8gY2Mtb3B0aW9uIGlzIG9wdGlvbmFsLCBhbmQgaWYgb21pdHRlZCwKIAljZmxhZ3MteSB3aWxsIGJlIGFzc2lnbmVkIG5vIHZhbHVlIGlmIGZpcnN0IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgpAQCAtNzUwLDEwICs3NTAsMTAgQEAKICAgIGxvY2F0ZWQgYXQgdGhlIHJvb3Qgb2YgdGhlIG9iaiB0cmVlLgogICAgVGhlIHZlcnkgZmlyc3Qgb2JqZWN0cyBsaW5rZWQgYXJlIGxpc3RlZCBpbiBoZWFkLXksIGFzc2lnbmVkIGJ5CiAgICBhcmNoLyQoQVJDSCkvTWFrZWZpbGUuCi03KSBGaW5hbGx5LCB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBhcnQgZG9lcyBhbnkgcmVxdWlyZWQgcG9zdCBwcm9jZXNzaW5nCis3KSBGaW5hbGx5LCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhcnQgZG9lcyBhbnkgcmVxdWlyZWQgcG9zdCBwcm9jZXNzaW5nCiAgICBhbmQgYnVpbGRzIHRoZSBmaW5hbCBib290aW1hZ2UuCiAgICAtIFRoaXMgaW5jbHVkZXMgYnVpbGRpbmcgYm9vdCByZWNvcmRzCi0gICAtIFByZXBhcmluZyBpbml0cmQgaW1hZ2VzIGFuZCB0aGVsaWtlCisgICAtIFByZXBhcmluZyBpbml0cmQgaW1hZ2VzIGFuZCB0aGUgbGlrZQogCiAKIC0tLSA2LjEgU2V0IHZhcmlhYmxlcyB0byB0d2VhayB0aGUgYnVpbGQgdG8gdGhlIGFyY2hpdGVjdHVyZQpAQCAtODgwLDcgKzg4MCw3IEBACiAKIAkkKGhlYWQteSkgbGlzdHMgb2JqZWN0cyB0byBiZSBsaW5rZWQgZmlyc3QgaW4gdm1saW51eC4KIAkkKGxpYnMteSkgbGlzdHMgZGlyZWN0b3JpZXMgd2hlcmUgYSBsaWIuYSBhcmNoaXZlIGNhbiBiZSBsb2NhdGVkLgotCVRoZSByZXN0IGxpc3RzIGRpcmVjdG9yaWVzIHdoZXJlIGEgYnVpbHQtaW4ubyBvYmplY3QgZmlsZSBjYW4gYmUKKwlUaGUgcmVzdCBsaXN0IGRpcmVjdG9yaWVzIHdoZXJlIGEgYnVpbHQtaW4ubyBvYmplY3QgZmlsZSBjYW4gYmUKIAlsb2NhdGVkLgogCiAJJChpbml0LXkpIG9iamVjdHMgd2lsbCBiZSBsb2NhdGVkIGFmdGVyICQoaGVhZC15KS4KQEAgLTg4OCw3ICs4ODgsNyBAQAogCSQoY29yZS15KSwgJChsaWJzLXkpLCAkKGRyaXZlcnMteSkgYW5kICQobmV0LXkpLgogCiAJVGhlIHRvcCBsZXZlbCBNYWtlZmlsZSBkZWZpbmVzIHZhbHVlcyBmb3IgYWxsIGdlbmVyaWMgZGlyZWN0b3JpZXMsCi0JYW5kIGFyY2gvJChBUkNIKS9NYWtlZmlsZSBvbmx5IGFkZHMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRpcmVjdG9yaWVzLgorCWFuZCBhcmNoLyQoQVJDSCkvTWFrZWZpbGUgb25seSBhZGRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkaXJlY3Rvcmllcy4KIAogCUV4YW1wbGU6CiAJCSNhcmNoL3NwYXJjNjQvTWFrZWZpbGUKQEAgLTg5Nyw3ICs4OTcsNyBAQAogCQlkcml2ZXJzLSQoQ09ORklHX09QUk9GSUxFKSAgKz0gYXJjaC9zcGFyYzY0L29wcm9maWxlLwogCiAKLS0tLSA2LjQgQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJvb3QgaW1hZ2VzCistLS0gNi40IEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBib290IGltYWdlcwogCiAJQW4gYXJjaCBNYWtlZmlsZSBzcGVjaWZpZXMgZ29hbHMgdGhhdCB0YWtlIHRoZSB2bWxpbnV4IGZpbGUsIGNvbXByZXNzCiAJaXQsIHdyYXAgaXQgaW4gYm9vdHN0cmFwcGluZyBjb2RlLCBhbmQgY29weSB0aGUgcmVzdWx0aW5nIGZpbGVzCkBAIC05MjQsNyArOTI0LDcgQEAKIAkiJChRKSQoTUFLRSkgJChidWlsZCk9PGRpcj4iIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkgdG8gaW52b2tlCiAJbWFrZSBpbiBhIHN1YmRpcmVjdG9yeS4KIAotCVRoZXJlIGFyZSBubyBydWxlcyBmb3IgbmFtaW5nIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB0YXJnZXRzLAorCVRoZXJlIGFyZSBubyBydWxlcyBmb3IgbmFtaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0YXJnZXRzLAogCWJ1dCBleGVjdXRpbmcgIm1ha2UgaGVscCIgd2lsbCBsaXN0IGFsbCByZWxldmFudCB0YXJnZXRzLgogCVRvIHN1cHBvcnQgdGhpcywgJChhcmNoaGVscCkgbXVzdCBiZSBkZWZpbmVkLgogCkBAIC05ODIsNyArOTgyLDcgQEAKIAkJCSQoY2FsbCBpZl9jaGFuZ2VkLGxkL29iamNvcHkvZ3ppcCkKIAogCVdoZW4gdGhlIHJ1bGUgaXMgZXZhbHVhdGVkLCBpdCBpcyBjaGVja2VkIHRvIHNlZSBpZiBhbnkgZmlsZXMKLQluZWVkcyBhbiB1cGRhdGUsIG9yIHRoZSBjb21tYW5kIGxpbmUgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QKKwluZWVkIGFuIHVwZGF0ZSwgb3IgdGhlIGNvbW1hbmQgbGluZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdAogCWludm9jYXRpb24uIFRoZSBsYXR0ZXIgd2lsbCBmb3JjZSBhIHJlYnVpbGQgaWYgYW55IG9wdGlvbnMKIAl0byB0aGUgZXhlY3V0YWJsZSBoYXZlIGNoYW5nZWQuCiAJQW55IHRhcmdldCB0aGF0IHV0aWxpc2VzIGlmX2NoYW5nZWQgbXVzdCBiZSBsaXN0ZWQgaW4gJCh0YXJnZXRzKSwKQEAgLTEwODksNyArMTA4OSw3IEBACiAJICAgICAgICAgICAgICAgICAgYXNzaWdubWVudC4KIAogCVRoZSBrYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgZm9yICpsZHMgZmlsZSBhcmUgdXNlZCBpbiBzZXZlcmFsCi0JYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZpbGVzLgorCWFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcy4KIAogCiA9PT0gNyBLYnVpbGQgVmFyaWFibGVzCkBAIC0xMTMzLDcgKzExMzMsNyBAQAogCiAJVGhpcyB2YXJpYWJsZSBkZWZpbmVzIGEgcGxhY2UgZm9yIHRoZSBhcmNoIE1ha2VmaWxlcyB0byBpbnN0YWxsCiAJdGhlIHJlc2lkZW50IGtlcm5lbCBpbWFnZSBhbmQgU3lzdGVtLm1hcCBmaWxlLgotCVVzZSB0aGlzIGZvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaW5zdGFsbCB0YXJnZXRzLgorCVVzZSB0aGlzIGZvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW5zdGFsbCB0YXJnZXRzLgogCiAgICAgSU5TVEFMTF9NT0RfUEFUSCwgTU9ETElCCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0IGIvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKaW5kZXggNzk3NzVhNC4uMmZlZGMwOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQKQEAgLTMwLDYgKzMwLDEwIEBACiByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBrZXJuZWwgbG9hZHMuIFRoZXJlZm9yZSwga2V4ZWMgYmFja3MgdXAgdGhpcwogcmVnaW9uIGp1c3QgYmVmb3JlIHJlYm9vdGluZyBpbnRvIHRoZSBkdW1wLWNhcHR1cmUga2VybmVsLgogCitTaW1pbGFybHkgb24gUFBDNjQgbWFjaGluZXMgZmlyc3QgMzJLQiBvZiBwaHlzaWNhbCBtZW1vcnkgaXMgbmVlZGVkIGZvcgorYm9vdGluZyByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBrZXJuZWwgaXMgbG9hZGVkIGFuZCB0byBzdXBwb3J0IDY0SyBwYWdlCitzaXplIGtleGVjIGJhY2tzIHVwIHRoZSBmaXJzdCA2NEtCIG1lbW9yeS4KKwogQWxsIG9mIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5c3RlbSBrZXJuZWwncyBjb3JlIGltYWdlIGlzCiBlbmNvZGVkIGluIHRoZSBFTEYgZm9ybWF0LCBhbmQgc3RvcmVkIGluIGEgcmVzZXJ2ZWQgYXJlYSBvZiBtZW1vcnkKIGJlZm9yZSBhIGNyYXNoLiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YgdGhlIEVMRiBoZWFkZXIgaXMKQEAgLTIyNCw3ICsyMjgsNyBAQAogRHVtcC1jYXB0dXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyAoQXJjaCBEZXBlbmRlbnQsIHBwYzY0KQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0tICBNYWtlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgYW5kIGl0cyBtb2R1bGVzLiBETyBOT1QgYWRkIHRoaXMga2VybmVsCisqICBNYWtlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgYW5kIGl0cyBtb2R1bGVzLiBETyBOT1QgYWRkIHRoaXMga2VybmVsCiAgICB0byB0aGUgYm9vdCBsb2FkZXIgY29uZmlndXJhdGlvbiBmaWxlcy4KIAogRHVtcC1jYXB0dXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyAoQXJjaCBEZXBlbmRlbnQsIGlhNjQpCkBAIC0yNTEsOCArMjU1LDggQEAKIEJvb3QgaW50byBTeXN0ZW0gS2VybmVsCiA9PT09PT09PT09PT09PT09PT09PT09PQogCi0xKSBNYWtlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgYW5kIGl0cyBtb2R1bGVzLiBVcGRhdGUgdGhlIGJvb3QgbG9hZGVyCi0gICAoc3VjaCBhcyBncnViLCB5YWJvb3QsIG9yIGxpbG8pIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXMgbmVjZXNzYXJ5LgorMSkgVXBkYXRlIHRoZSBib290IGxvYWRlciAoc3VjaCBhcyBncnViLCB5YWJvb3QsIG9yIGxpbG8pIGNvbmZpZ3VyYXRpb24KKyAgIGZpbGVzIGFzIG5lY2Vzc2FyeS4KIAogMikgQm9vdCB0aGUgc3lzdGVtIGtlcm5lbCB3aXRoIHRoZSBib290IHBhcmFtZXRlciAiY3Jhc2hrZXJuZWw9WUBYIiwKICAgIHdoZXJlIFkgc3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSB0byByZXNlcnZlIGZvciB0aGUgZHVtcC1jYXB0dXJlIGtlcm5lbApAQCAtMzU2LDEwICszNjAsMTEgQEAKIGlzIGNhbGxlZCBpbnNpZGUgaW50ZXJydXB0IGNvbnRleHQgb3IgZGllKCkgaXMgY2FsbGVkIGFuZCBwYW5pY19vbl9vb3BzIGlzIHNldCwKIHRoZSBzeXN0ZW0gd2lsbCBib290IGludG8gdGhlIGR1bXAtY2FwdHVyZSBrZXJuZWwuCiAKLU9uIHBvd2VyZXJwYyBzeXN0ZW1zIHdoZW4gYSBzb2Z0LXJlc2V0IGlzIGdlbmVyYXRlZCwgZGllKCkgaXMgY2FsbGVkIGJ5IGFsbCBjcHVzIGFuZCB0aGUgc3lzdGVtIHdpbGwgYm9vdCBpbnRvIHRoZSBkdW1wLWNhcHR1cmUga2VybmVsLgorT24gcG93ZXJlcnBjIHN5c3RlbXMgd2hlbiBhIHNvZnQtcmVzZXQgaXMgZ2VuZXJhdGVkLCBkaWUoKSBpcyBjYWxsZWQgYnkgYWxsIGNwdXMKK2FuZCB0aGUgc3lzdGVtIHdpbGwgYm9vdCBpbnRvIHRoZSBkdW1wLWNhcHR1cmUga2VybmVsLgogCiBGb3IgdGVzdGluZyBwdXJwb3NlcywgeW91IGNhbiB0cmlnZ2VyIGEgY3Jhc2ggYnkgdXNpbmcgIkFMVC1TeXNScS1jIiwKLSJlY2hvIGMgPiAvcHJvYy9zeXNycS10cmlnZ2VyIG9yIHdyaXRlIGEgbW9kdWxlIHRvIGZvcmNlIHRoZSBwYW5pYy4KKyJlY2hvIGMgPiAvcHJvYy9zeXNycS10cmlnZ2VyIiBvciB3cml0ZSBhIG1vZHVsZSB0byBmb3JjZSB0aGUgcGFuaWMuCiAKIFdyaXRlIE91dCB0aGUgRHVtcCBGaWxlCiA9PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDEwLDEyICs0MTUsOSBAQAogVG8gRG8KID09PT09CiAKLTEpIFByb3ZpZGUgYSBrZXJuZWwgcGFnZXMgZmlsdGVyaW5nIG1lY2hhbmlzbSwgc28gY29yZSBmaWxlIHNpemUgaXMgbm90Ci0gICBleHRyZW1lIG9uIHN5c3RlbXMgd2l0aCBodWdlIG1lbW9yeSBiYW5rcy4KLQotMikgUmVsb2NhdGFibGUga2VybmVsIGNhbiBoZWxwIGluIG1haW50YWluaW5nIG11bHRpcGxlIGtlcm5lbHMgZm9yCi0gICBjcmFzaF9kdW1wLCBhbmQgdGhlIHNhbWUga2VybmVsIGFzIHRoZSBzeXN0ZW0ga2VybmVsIGNhbiBiZSB1c2VkIHRvCi0gICBjYXB0dXJlIHRoZSBkdW1wLgorMSkgUHJvdmlkZSByZWxvY2F0YWJsZSBrZXJuZWxzIGZvciBhbGwgYXJjaGl0ZWN0dXJlcyB0byBoZWxwIGluIG1haW50YWluaW5nCisgICBtdWx0aXBsZSBrZXJuZWxzIGZvciBjcmFzaF9kdW1wLCBhbmQgdGhlIHNhbWUga2VybmVsIGFzIHRoZSBzeXN0ZW0ga2VybmVsCisgICBjYW4gYmUgdXNlZCB0byBjYXB0dXJlIHRoZSBkdW1wLgogCiAKIENvbnRhY3QKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jcy50eHQKaW5kZXggYjUzYmNjYi4uYzY4ZGFmZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jcy50eHQKQEAgLTEsMTAgKzEsMTAgQEAKIAotICAgICAgIEluZGV4IG9mIERvY3VtZW50YXRpb24gZm9yIFBlb3BsZSBJbnRlcmVzdGVkIGluIFdyaXRpbmcgYW5kL29yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgdGhlIExpbnV4IEtlcm5lbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICBKdWFuLU1hcmlhbm8gZGUgR295ZW5lY2hlIDxqbXNleWFzQGRpdC51cG0uZXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIEluZGV4IG9mIERvY3VtZW50YXRpb24gZm9yIFBlb3BsZSBJbnRlcmVzdGVkIGluIFdyaXRpbmcgYW5kL29yCisKKyAgICAgICAgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIHRoZSBMaW51eCBLZXJuZWwuCisKKyAgICAgICAgICBKdWFuLU1hcmlhbm8gZGUgR295ZW5lY2hlIDxqbXNleWFzQGRpdC51cG0uZXM+CisKIC8qCiAgKiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCBtYXkgYmUgZm91bmQgYXQ6CiAgKiAgIGh0dHA6Ly93d3cuZGl0LnVwbS5lcy9+am1zZXlhcy9saW51eC9rZXJuZWwvaGFja2Vycy1kb2NzLmh0bWwKQEAgLTYxLDE4ICs2MSwxOCBAQAogICAgICAgIDEzLi1UaGUgTGludXggS2VybmVsIFNvdXJjZXMsIEEuLUxpbnV4IERhdGEgU3RydWN0dXJlcywgQi4tVGhlCiAgICAgICAgQWxwaGEgQVhQIFByb2Nlc3NvciwgQy4tVXNlZnVsIFdlYiBhbmQgRlRQIFNpdGVzLCBELi1UaGUgR05VCiAgICAgICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgR2xvc3NhcnkiLiBJbiBzaG9ydDogYSBtdXN0IGhhdmUuCi0gICAgICAgCi0gICAgICogVGl0bGU6ICJUaGUgTGludXggS2VybmVsIEhhY2tlcnMnIEd1aWRlIgotICAgICAgIEF1dGhvcjogTWljaGFlbCBLLkpvaG5zb24gYW5kIG90aGVycy4KLSAgICAgICBVUkw6IGh0dHA6Ly93d3cudGxkcC5vcmcvTERQL2toZy9IeXBlck5ld3MvZ2V0L2toZy5odG1sCi0gICAgICAgS2V5d29yZHM6IGV2ZXJ5dGhpbmchCi0gICAgICAgRGVzY3JpcHRpb246IE5vIG1vcmUgUG9zdHNjcmlwdCBib29rLWxpa2UgdmVyc2lvbi4gT25seSBIVE1MIG5vdy4KLSAgICAgICBNYW55IHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkLiBUaGUgaW50ZXJmYWNlIGlzIHNpbWlsYXIgdG8gd2ViCi0gICAgICAgYXZhaWxhYmxlIG1haWxpbmcgbGlzdHMgYXJjaGl2ZXMuIFlvdSBjYW4gZmluZCBzb21lIGFydGljbGVzIGFuZAotICAgICAgIHRoZW4gc29tZSBtYWlscyBhc2tpbmcgcXVlc3Rpb25zIGFib3V0IHRoZW0gYW5kL29yIGNvbXBsZW1lbnRpbmcKLSAgICAgICBwcmV2aW91cyBjb250cmlidXRpb25zLiBBIGxpdHRsZSBiaXQgYW5hcmNoaWMgaW4gdGhpcyBhc3BlY3QsIGJ1dAotICAgICAgIHdpdGggc29tZSB2YWx1YWJsZSBpbmZvcm1hdGlvbiBpbiBzb21lIGNhc2VzLgotICAgICAgIAorCisgICAgICogVGl0bGU6ICJMaW51eCBEZXZpY2UgRHJpdmVycywgMm5kIEVkaXRpb24iCisgICAgICAgQXV0aG9yOiBBbGVzc2FuZHJvIFJ1YmluaSBhbmQgSm9uYXRoYW4gQ29yYmV0LgorICAgICAgIFVSTDogaHR0cDovL3d3dy54bWwuY29tL2xkZC9jaGFwdGVyL2Jvb2svaW5kZXguaHRtbAorICAgICAgIEtleXdvcmRzOiBkZXZpY2UgZHJpdmVycywgbW9kdWxlcywgZGVidWdnaW5nLCBtZW1vcnksIGhhcmR3YXJlLAorICAgICAgIGludGVycnVwdCBoYW5kbGluZywgY2hhciBkcml2ZXJzLCBibG9jayBkcml2ZXJzLCBrbW9kLCBtbWFwLCBETUEsCisgICAgICAgYnVzZXMuCisgICAgICAgRGVzY3JpcHRpb246IE8nUmVpbGx5J3MgcG9wdWxhciBib29rLCBub3cgYWxzbyBvbi1saW5lIHVuZGVyIHRoZQorICAgICAgIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZS4KKyAgICAgICBOb3RlczogWW91IGNhbiBhbHNvIGJ1eSBpdCBpbiBwYXBlci1mb3JtIGZyb20gTydSZWlsbHkuIFNlZSBiZWxvdworICAgICAgIHVuZGVyIEJPT0tTIChOb3Qgb24tbGluZSkuCisKICAgICAgKiBUaXRsZTogIkNvbmNlcHR1YWwgQXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBLZXJuZWwiCiAgICAgICAgQXV0aG9yOiBJdmFuIFQuIEJvd21hbi4KICAgICAgICBVUkw6IGh0dHA6Ly9wbGcudXdhdGVybG9vLmNhL35pdGJvd21hbi9wYXBlcnMvQ1M3NDZHLWExLmh0bWwKQEAgLTgxLDE3ICs4MSwxNyBAQAogICAgICAgIERlc2NyaXB0aW9uOiBDb25jZXB0dWFsIHNvZnR3YXJlIGFycXVpdGVjdHVyZSBvZiB0aGUgTGludXgga2VybmVsLAogICAgICAgIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHNvdXJjZSBjb2RlLiBWZXJ5IGRldGFpbGVkLiBHb29kCiAgICAgICAgZmlndXJlcy4gR2l2ZXMgZ29vZCBvdmVyYWxsIGtlcm5lbCB1bmRlcnN0YW5kaW5nLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJDb25jcmV0ZSBBcmNoaXRlY3R1cmUgb2YgdGhlIExpbnV4IEtlcm5lbCIKICAgICAgICBBdXRob3I6IEl2YW4gVC4gQm93bWFuLCBTYWhlZW0gU2lkZGlxaSwgYW5kIE1leWVyIEMuIFRhbnVhbi4KICAgICAgICBVUkw6IGh0dHA6Ly9wbGcudXdhdGVybG9vLmNhL35pdGJvd21hbi9wYXBlcnMvQ1M3NDZHLWEyLmh0bWwKLSAgICAgICBLZXl3b3JkczogY29uY3JldGUgYXJxdWl0ZWN0dXJlLCBleHRyYWN0ZWQgZGVzaWduLCByZXZlcnNlCisgICAgICAgS2V5d29yZHM6IGNvbmNyZXRlIGFyY2hpdGVjdHVyZSwgZXh0cmFjdGVkIGRlc2lnbiwgcmV2ZXJzZQogICAgICAgIGVuZ2luZWVyaW5nLCBzeXN0ZW0gc3RydWN0dXJlLCBkZXBlbmRlbmNpZXMuCi0gICAgICAgRGVzY3JpcHRpb246IENvbmNyZXRlIGFycXVpdGVjdHVyZSBvZiB0aGUgTGludXgga2VybmVsLAorICAgICAgIERlc2NyaXB0aW9uOiBDb25jcmV0ZSBhcmNoaXRlY3R1cmUgb2YgdGhlIExpbnV4IGtlcm5lbCwKICAgICAgICBhdXRvbWF0aWNhbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSBzb3VyY2UgY29kZS4gVmVyeSBkZXRhaWxlZC4gR29vZAogICAgICAgIGZpZ3VyZXMuIEdpdmVzIGdvb2Qgb3ZlcmFsbCBrZXJuZWwgdW5kZXJzdGFuZGluZy4gVGhpcyBwYXBlcnMKICAgICAgICBmb2N1cyBvbiBsb3dlciBkZXRhaWxzIHRoYW4gaXRzIHByZWRlY2Vzc29yIChmaWxlcywgdmFyaWFibGVzLi4uKS4KLSAgICAgICAKKwogICAgICAqIFRpdGxlOiAiTGludXggYXMgYSBDYXNlIFN0dWR5OiBJdHMgRXh0cmFjdGVkIFNvZnR3YXJlCiAgICAgICAgQXJjaGl0ZWN0dXJlIgogICAgICAgIEF1dGhvcjogSXZhbiBULiBCb3dtYW4sIFJpY2hhcmQgQy4gSG9sdCBhbmQgTmVpbCBWLiBCcmV3c3Rlci4KQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgIERlc2NyaXB0aW9uOiBQYXBlciBhcHBlYXJlZCBhdCBJQ1NFJzk5LCBMb3MgQW5nZWxlcywgTWF5IDE2LTIyLAogICAgICAgIDE5OTkuIEEgbWl4dHVyZSBvZiB0aGUgcHJldmlvdXMgdHdvIGRvY3VtZW50cyBmcm9tIHRoZSBzYW1lCiAgICAgICAgYXV0aG9yLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJPdmVydmlldyBvZiB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSIKICAgICAgICBBdXRob3I6IFJpY2hhcmQgR29vY2guCiAgICAgICAgVVJMOiBodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC92ZnMudHh0CkBAIC0xMTEsMjAgKzExMSwyMCBAQAogICAgICAgIFdoYXQgaXMgaXQsIGhvdyBpdCB3b3Jrcywgb3BlcmF0aW9ucyB0YWtlbiB3aGVuIG9wZW5pbmcgYSBmaWxlIG9yCiAgICAgICAgbW91bnRpbmcgYSBmaWxlIHN5c3RlbSBhbmQgZGVzY3JpcHRpb24gb2YgaW1wb3J0YW50IGRhdGEKICAgICAgICBzdHJ1Y3R1cmVzIGV4cGxhaW5pbmcgdGhlIHB1cnBvc2Ugb2YgZWFjaCBvZiB0aGVpciBlbnRyaWVzLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJUaGUgTGludXggUkFJRC0xLCA0LCA1IENvZGUiCiAgICAgICAgQXV0aG9yOiBJbmdvIE1vbG5hciwgR2FkaSBPeG1hbiBhbmQgTWlndWVsIGRlIEljYXphLgotICAgICAgIFVSTDogaHR0cDovL3d3dzIubGludXhqb3VybmFsLmNvbS9sai1pc3N1ZXMvaXNzdWU0NC8yMzkxLmh0bWwKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXhqb3VybmFsLmNvbS9hcnRpY2xlLnBocD9zaWQ9MjM5MQogICAgICAgIEtleXdvcmRzOiBSQUlELCBNRCBkcml2ZXIuCiAgICAgICAgRGVzY3JpcHRpb246IExpbnV4IEpvdXJuYWwgS2VybmVsIEtvcm5lciBhcnRpY2xlLiBIZXJlIGlzIGl0J3MKICAgICAgICBhYnN0cmFjdDogIkEgZGVzY3JpcHRpb24gb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSQUlELTEsCiAgICAgICAgUkFJRC00IGFuZCBSQUlELTUgcGVyc29uYWxpdGllcyBvZiB0aGUgTUQgZGV2aWNlIGRyaXZlciBpbiB0aGUKICAgICAgICBMaW51eCBrZXJuZWwsIHByb3ZpZGluZyB1c2VycyB3aXRoIGhpZ2ggcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmxlLAogICAgICAgIHNlY29uZGFyeS1zdG9yYWdlIGNhcGFiaWxpdHkgdXNpbmcgc29mdHdhcmUiLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJEeW5hbWljIEtlcm5lbHM6IE1vZHVsYXJpemVkIERldmljZSBEcml2ZXJzIgogICAgICAgIEF1dGhvcjogQWxlc3NhbmRybyBSdWJpbmkuCi0gICAgICAgVVJMOiBodHRwOi8vd3d3Mi5saW51eGpvdXJuYWwuY29tL2xqLWlzc3Vlcy9pc3N1ZTIzLzEyMTkuaHRtbAorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eGpvdXJuYWwuY29tL2FydGljbGUucGhwP3NpZD0xMjE5CiAgICAgICAgS2V5d29yZHM6IGRldmljZSBkcml2ZXIsIG1vZHVsZSwgbG9hZGluZy91bmxvYWRpbmcgbW9kdWxlcywKICAgICAgICBhbGxvY2F0aW5nIHJlc291cmNlcy4KICAgICAgICBEZXNjcmlwdGlvbjogTGludXggSm91cm5hbCBLZXJuZWwgS29ybmVyIGFydGljbGUuIEhlcmUgaXMgaXQncwpAQCAtMTM0LDEwICsxMzQsMTAgQEAKICAgICAgICBsb2FkYWJsZSBtb2R1bGVzLiBUaGlzIGluc3RhbGxtZW50IHByZXNlbnRzIGFuIGludHJvZHVjdGlvbiB0byB0aGUKICAgICAgICB0b3BpYywgcHJlcGFyaW5nIHRoZSByZWFkZXIgdG8gdW5kZXJzdGFuZCBuZXh0IG1vbnRoJ3MKICAgICAgICBpbnN0YWxsbWVudCIuCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIkR5bmFtaWMgS2VybmVsczogRGlzY292ZXJ5IgogICAgICAgIEF1dGhvcjogQWxlc3NhbmRybyBSdWJpbmkuCi0gICAgICAgVVJMOiBodHRwOi8vd3d3Mi5saW51eGpvdXJuYWwuY29tL2xqLWlzc3Vlcy9pc3N1ZTI0LzEyMjAuaHRtbAorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eGpvdXJuYWwuY29tL2FydGljbGUucGhwP3NpZD0xMjIwCiAgICAgICAgS2V5d29yZHM6IGNoYXJhY3RlciBkcml2ZXIsIGluaXRfbW9kdWxlLCBjbGVhbl91cCBtb2R1bGUsCiAgICAgICAgYXV0b2RldGVjdGlvbiwgbWF5b3IgbnVtYmVyLCBtaW5vciBudW1iZXIsIGZpbGUgb3BlcmF0aW9ucywKICAgICAgICBvcGVuKCksIGNsb3NlKCkuCkBAIC0xNDYsMjAgKzE0NiwyMCBAQAogICAgICAgIHRoZSBhY3R1YWwgY29kZSB0byBjcmVhdGUgY3VzdG9tIG1vZHVsZSBpbXBsZW1lbnRpbmcgYSBjaGFyYWN0ZXIKICAgICAgICBkZXZpY2UgZHJpdmVyLiBJdCBkZXNjcmliZXMgdGhlIGNvZGUgZm9yIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQKICAgICAgICBjbGVhbnVwLCBhcyB3ZWxsIGFzIHRoZSBvcGVuKCkgYW5kIGNsb3NlKCkgc3lzdGVtIGNhbGxzIi4KLSAgICAgICAKKwogICAgICAqIFRpdGxlOiAiVGhlIERldmlsJ3MgaW4gdGhlIERldGFpbHMiCiAgICAgICAgQXV0aG9yOiBHZW9yZyB2LiBaZXpzY2h3aXR6IGFuZCBBbGVzc2FuZHJvIFJ1YmluaS4KLSAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlMjUvMTIyMS5odG1sCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4am91cm5hbC5jb20vYXJ0aWNsZS5waHA/c2lkPTEyMjEKICAgICAgICBLZXl3b3JkczogcmVhZCgpLCB3cml0ZSgpLCBzZWxlY3QoKSwgaW9jdGwoKSwgYmxvY2tpbmcvbm9uCiAgICAgICAgYmxvY2tpbmcgbW9kZSwgaW50ZXJydXB0IGhhbmRsZXIuCiAgICAgICAgRGVzY3JpcHRpb246IExpbnV4IEpvdXJuYWwgS2VybmVsIEtvcm5lciBhcnRpY2xlLiBIZXJlIGlzIGl0J3MKICAgICAgICBhYnN0cmFjdDogIlRoaXMgYXJ0aWNsZSwgdGhlIHRoaXJkIG9mIGZvdXIgb24gd3JpdGluZyBjaGFyYWN0ZXIKICAgICAgICBkZXZpY2UgZHJpdmVycywgaW50cm9kdWNlcyBjb25jZXB0cyBvZiByZWFkaW5nLCB3cml0aW5nLCBhbmQgdXNpbmcKICAgICAgICBpb2N0bC1jYWxscyIuCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIkRpc3NlY3RpbmcgSW50ZXJydXB0cyBhbmQgQnJvd3NpbmcgRE1BIgogICAgICAgIEF1dGhvcjogQWxlc3NhbmRybyBSdWJpbmkgYW5kIEdlb3JnIHYuIFplenNjaHdpdHouCi0gICAgICAgVVJMOiBodHRwOi8vd3d3Mi5saW51eGpvdXJuYWwuY29tL2xqLWlzc3Vlcy9pc3N1ZTI2LzEyMjIuaHRtbAorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eGpvdXJuYWwuY29tL2FydGljbGUucGhwP3NpZD0xMjIyCiAgICAgICAgS2V5d29yZHM6IGludGVycnVwdHMsIGlycXMsIERNQSwgYm90dG9tIGhhbHZlcywgdGFzayBxdWV1ZXMuCiAgICAgICAgRGVzY3JpcHRpb246IExpbnV4IEpvdXJuYWwgS2VybmVsIEtvcm5lciBhcnRpY2xlLiBIZXJlIGlzIGl0J3MKICAgICAgICBhYnN0cmFjdDogIlRoaXMgaXMgdGhlIGZvdXJ0aCBpbiBhIHNlcmllcyBvZiBhcnRpY2xlcyBhYm91dApAQCAtMTcwLDEwICsxNzAsMTAgQEAKICAgICAgICB3cml0aW5nLCBhbmQgc2V2ZXJhbCBkaWZmZXJlbnQgZmFjaWxpdGllcyBoYXZlIGJlZW4gcHJvdmlkZWQgZm9yCiAgICAgICAgZGlmZmVyZW50IHNpdHVhdGlvbnMuIFdlIGFsc28gaW52ZXN0aWdhdGUgdGhlIGNvbXBsZXggdG9waWMgb2YKICAgICAgICBETUEiLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJEZXZpY2UgRHJpdmVycyBDb25jbHVkZWQiCiAgICAgICAgQXV0aG9yOiBHZW9yZyB2LiBaZXpzY2h3aXR6LgotICAgICAgIFVSTDogaHR0cDovL3d3dzIubGludXhqb3VybmFsLmNvbS9sai1pc3N1ZXMvaXNzdWUyOC8xMjg3Lmh0bWwKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXhqb3VybmFsLmNvbS9hcnRpY2xlLnBocD9zaWQ9MTI4NwogICAgICAgIEtleXdvcmRzOiBhZGRyZXNzIHNwYWNlcywgcGFnZXMsIHBhZ2luYXRpb24sIHBhZ2UgbWFuYWdlbWVudCwKICAgICAgICBkZW1hbmQgbG9hZGluZywgc3dhcHBpbmcsIG1lbW9yeSBwcm90ZWN0aW9uLCBtZW1vcnkgbWFwcGluZywgbW1hcCwKICAgICAgICB2aXJ0dWFsIG1lbW9yeSBhcmVhcyAoVk1BcyksIHZyZW1hcCwgUENJLgpAQCAtMTgyLDEwICsxODIsMTAgQEAKICAgICAgICBmaXZlIGFydGljbGVzIGFib3V0IGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycy4gSW4gdGhpcyBmaW5hbAogICAgICAgIHNlY3Rpb24sIEdlb3JnIGRlYWxzIHdpdGggbWVtb3J5IG1hcHBpbmcgZGV2aWNlcywgYmVnaW5uaW5nIHdpdGgKICAgICAgICBhbiBvdmVyYWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBMaW51eCBtZW1vcnkgbWFuYWdlbWVudCBjb25jZXB0cyIuCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIk5ldHdvcmsgQnVmZmVycyBBbmQgTWVtb3J5IE1hbmFnZW1lbnQiCiAgICAgICAgQXV0aG9yOiBBbGFuIENveC4KLSAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlMzAvMTMxMi5odG1sCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4am91cm5hbC5jb20vYXJ0aWNsZS5waHA/c2lkPTEzMTIKICAgICAgICBLZXl3b3Jkczogc2tfYnVmZnMsIG5ldHdvcmsgZGV2aWNlcywgcHJvdG9jb2wvbGluayBsYXllcgogICAgICAgIHZhcmlhYmxlcywgbmV0d29yayBkZXZpY2VzIGZsYWdzLCB0cmFuc21pdCwgcmVjZWl2ZSwKICAgICAgICBjb25maWd1cmF0aW9uLCBtdWx0aWNhc3QuCkBAIC0yMTQsMjggKzIxNCwyNiBAQAogICAgICAgIG9mIHRoZSBDb2RhIGZpbGVzeXN0ZW0uIFRoaXMgdmVyc2lvbiBkb2N1bWVudCBpcyBtZWFudCB0byBkZXNjcmliZQogICAgICAgIHRoZSBjdXJyZW50IGludGVyZmFjZSAodmVyc2lvbiAxLjApIGFzIHdlbGwgYXMgaW1wcm92ZW1lbnRzIHdlCiAgICAgICAgZW52aXNhZ2UiLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJQcm9ncmFtbWluZyBQQ0ktRGV2aWNlcyB1bmRlciBMaW51eCIKICAgICAgICBBdXRob3I6IENsYXVzIFNjaHJvZXRlci4KICAgICAgICBVUkw6Ci0gICAgICAgZnRwOi8vZnRwLmxscC5mdS1iZXJsaW4uZGUvcHViL2xpbnV4L0xJTlVYLUxBQi93aGl0ZXBhcGVycy9wY2lwLnBzCi0gICAgICAgLmd6CisgICAgICAgZnRwOi8vZnRwLmxscC5mdS1iZXJsaW4uZGUvcHViL2xpbnV4L0xJTlVYLUxBQi93aGl0ZXBhcGVycy9wY2lwLnBzLmd6CiAgICAgICAgS2V5d29yZHM6IFBDSSwgZGV2aWNlLCBidXNtYXN0ZXJpbmcuCiAgICAgICAgRGVzY3JpcHRpb246IDYgcGFnZXMgdHV0b3JpYWwgb24gUENJIHByb2dyYW1taW5nIHVuZGVyIExpbnV4LgogICAgICAgIEdpdmVzIHRoZSBiYXNpYyBjb25jZXB0cyBvbiB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBQQ0kgc3Vic3lzdGVtLAogICAgICAgIGFzIGxvbmcgYXMgYmFzaWMgZnVuY3Rpb25zIGFuZCBtYWNyb3MgdG8gcmVhZC93cml0ZSB0aGUgZGV2aWNlcwogICAgICAgIGFuZCBwZXJmb3JtIGJ1c21hc3RlcmluZy4KLSAgICAgICAKKwogICAgICAqIFRpdGxlOiAiV3JpdGluZyBDaGFyYWN0ZXIgRGV2aWNlIERyaXZlciBmb3IgTGludXgiCiAgICAgICAgQXV0aG9yOiBSLiBCYXJ1Y2ggYW5kIEMuIFNjaHJvZXRlci4KICAgICAgICBVUkw6Ci0gICAgICAgZnRwOi8vZnRwLmxscC5mdS1iZXJsaW4uZGUvcHViL2xpbnV4L0xJTlVYLUxBQi93aGl0ZXBhcGVycy9kcml2ZXJzCi0gICAgICAgLnBzLmd6CisgICAgICAgZnRwOi8vZnRwLmxscC5mdS1iZXJsaW4uZGUvcHViL2xpbnV4L0xJTlVYLUxBQi93aGl0ZXBhcGVycy9kcml2ZXJzLnBzLmd6CiAgICAgICAgS2V5d29yZHM6IGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycywgSS9PLCBzaWduYWxzLCBETUEsIGFjY2Vzc2luZwogICAgICAgIHBvcnRzIGluIHVzZXIgc3BhY2UsIGtlcm5lbCBlbnZpcm9ubWVudC4KICAgICAgICBEZXNjcmlwdGlvbjogNjggcGFnZXMgcGFwZXIgb24gd3JpdGluZyBjaGFyYWN0ZXIgZHJpdmVycy4gQSBsaXR0bGUKICAgICAgICBiaXQgb2xkICgxLjk5MywgMS45OTQpIGFsdGhvdWdoIHN0aWxsIHVzZWZ1bC4KLSAgICAgICAKKwogICAgICAqIFRpdGxlOiAiRGVzaWduIGFuZCBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2Vjb25kIEV4dGVuZGVkCiAgICAgICAgRmlsZXN5c3RlbSIKICAgICAgICBBdXRob3I6IFLpbXkgQ2FyZCwgVGhlb2RvcmUgVHMnbywgU3RlcGhlbiBUd2VlZGllLgpAQCAtMjQ5LDE0ICsyNDcsMTQgQEAKICAgICAgICBlMmZzY2sncyBwYXNzZXMgZGVzY3JpcHRpb24uLi4gQSBtdXN0IHJlYWQhCiAgICAgICAgTm90ZXM6IFRoaXMgcGFwZXIgd2FzIGZpcnN0IHB1Ymxpc2hlZCBpbiB0aGUgUHJvY2VlZGluZ3Mgb2YgdGhlCiAgICAgICAgRmlyc3QgRHV0Y2ggSW50ZXJuYXRpb25hbCBTeW1wb3NpdW0gb24gTGludXgsIElTQk4gOTAtMzY3LTAzODUtOS4KLSAgICAgICAKKwogICAgICAqIFRpdGxlOiAiQW5hbHlzaXMgb2YgdGhlIEV4dDJmcyBzdHJ1Y3R1cmUiCiAgICAgICAgQXV0aG9yOiBMb3Vpcy1Eb21pbmlxdWUgRHViZWF1LgotICAgICAgIFVSTDogaHR0cDovL3N0ZXAucG9seW10bC5jYS9+bGRkL2V4dDJmcy9leHQyZnNfdG9jLmh0bWwKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubm9uZG90Lm9yZy9zYWJyZS9vcy9maWxlcy9GaWxlU3lzdGVtcy9leHQyZnMvCiAgICAgICAgS2V5d29yZHM6IGV4dDIsIGZpbGVzeXN0ZW0sIGV4dDJmcy4KICAgICAgICBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gb2YgZXh0MidzIGJsb2NrcywgZGlyZWN0b3JpZXMsIGlub2RlcywKICAgICAgICBiaXRtYXBzLCBpbnZhcmlhbnRzLi4uCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIkpvdXJuYWxpbmcgdGhlIExpbnV4IGV4dDJmcyBGaWxlc3lzdGVtIgogICAgICAgIEF1dGhvcjogU3RlcGhlbiBDLiBUd2VlZGllLgogICAgICAgIFVSTDoKQEAgLTI2NSw3ICsyNjMsNyBAQAogICAgICAgIERlc2NyaXB0aW9uOiBFeGNlbGxlbnQgOC1wYWdlcyBwYXBlciBleHBsYWluaW5nIHRoZSBqb3VybmFsaW5nCiAgICAgICAgY2FwYWJpbGl0aWVzIGFkZGVkIHRvIGV4dDIgYnkgdGhlIGF1dGhvciwgc2hvd2luZyBkaWZmZXJlbnQKICAgICAgICBwcm9ibGVtcyBmYWNlZCBhbmQgdGhlIGFsdGVybmF0aXZlcyBjaG9zZW4uCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIktlcm5lbCBBUEkgY2hhbmdlcyBmcm9tIDIuMCB0byAyLjIiCiAgICAgICAgQXV0aG9yOiBSaWNoYXJkIEdvb2NoLgogICAgICAgIFVSTDoKQEAgLTI3Myw3ICsyNzEsNyBAQAogICAgICAgIEtleXdvcmRzOiAyLjIsIGNoYW5nZXMuCiAgICAgICAgRGVzY3JpcHRpb246IEtlcm5lbCBmdW5jdGlvbnMvc3RydWN0dXJlcy92YXJpYWJsZXMgd2hpY2ggY2hhbmdlZAogICAgICAgIGZyb20gMi4wLnggdG8gMi4yLnguCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIktlcm5lbCBBUEkgY2hhbmdlcyBmcm9tIDIuMiB0byAyLjQiCiAgICAgICAgQXV0aG9yOiBSaWNoYXJkIEdvb2NoLgogICAgICAgIFVSTDoKQEAgLTM0NSwxNyArMzQzLDcgQEAKICAgICAgICBOb3RlczogQmV3YXJlOiB0aGUgbWFpbiBwYWdlIHN0YXRlczogIlRoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZQogICAgICAgIHB1Ymxpc2hlZCwgcHJpbnRlZCBvciB1c2VkIGluIGV4Y2VycHRzIHdpdGhvdXQgZXhwbGljaXQgcGVybWlzc2lvbgogICAgICAgIG9mIHRoZSBhdXRob3IiLiBGb3J0dW5hdGVseSwgaXQgbWF5IHN0aWxsIGJlIHJlYWQuLi4KLSAgICAgICAKLSAgICAgKiBUaXRsZTogIlRvdXIgT2YgdGhlIExpbnV4IEtlcm5lbCBTb3VyY2UiCi0gICAgICAgQXV0aG9yOiBWaWpvIENoZXJpYW4uCi0gICAgICAgVVJMOiBodHRwOi8vd3d3Lmdlb2NpdGllcy5jb20vdmlqb2MvdG9sa3MvdG9sa3MuaHRtbAotICAgICAgIEtleXdvcmRzOiAuCi0gICAgICAgRGVzY3JpcHRpb246IEEgY2xhc3NpYyBvZiB0aGlzIHBhZ2UhIFdhcyBsb3N0IGZvciBhIHdoaWxlIGFuZCBpcwotICAgICAgIGJhY2sgYWdhaW4uIFRoYW5rcyBWaWpvISBUT0xLUzogdGhlIG5hbWUgc2F5cyBpdCBhbGwuIEEgdG91ciBvZgotICAgICAgIHRoZSBzb3VyY2VzLCBkZXNjcmliaW5nIGRpcmVjdG9yaWVzLCBmaWxlcywgdmFyaWFibGVzLCBkYXRhCi0gICAgICAgc3RydWN0dXJlcy4uLiBJdCBjb3ZlcnMgZ2VuZXJhbCBzdHVmZiwgZGV2aWNlIGRyaXZlcnMsCi0gICAgICAgZmlsZXN5c3RlbXMsIElQQyBhbmQgTmV0d29ya2luZyBDb2RlLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJMaW51eCBLZXJuZWwgTWFpbGluZyBMaXN0IEdsb3NzYXJ5IgogICAgICAgIEF1dGhvcjogdmFyaW91cwogICAgICAgIFVSTDogaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL2dsb3NzYXJ5LwpAQCAtMzc3LDcgKzM2NSwxNyBAQAogICAgICAgIGtlcm5lbHMsIGJ1dCBtb3N0IG9mIGl0IGFwcGxpZXMgdG8gMi4yIHRvbzsgMi4wIGlzIHNsaWdodGx5CiAgICAgICAgZGlmZmVyZW50Ii4gRnJlZWx5IHJlZGlzdHJpYnV0YWJsZSB1bmRlciB0aGUgY29uZGl0aW9ucyBvZiB0aGUgR05VCiAgICAgICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAgICAgICAKKworICAgICAqIFRpdGxlOiAiR2xvYmFsIHNwaW5sb2NrIGxpc3QgYW5kIHVzYWdlIgorICAgICAgIEF1dGhvcjogUmljayBMaW5kc2xleS4KKyAgICAgICBVUkw6IGh0dHA6Ly9sc2Uuc291cmNlZm9yZ2UubmV0L2xvY2toaWVyL2dsb2JhbC1zcGluLWxvY2sKKyAgICAgICBLZXl3b3Jkczogc3BpbmxvY2suCisgICAgICAgRGVzY3JpcHRpb246IFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBkb2N1bWVudCBib3RoIHRoZSBleGlzdGVuY2UgYW5kCisgICAgICAgdXNhZ2Ugb2YgdGhlIHNwaW5sb2NrcyBpbiB0aGUgTGludXggMi40LjUga2VybmVsLiBDb21wcmVoZW5zaXZlCisgICAgICAgbGlzdCBvZiBzcGlubG9ja3Mgc2hvd2luZyB3aGVuIHRoZXkgYXJlIHVzZWQsIHdoaWNoIGZ1bmN0aW9ucworICAgICAgIGFjY2VzcyB0aGVtLCBob3cgZWFjaCBsb2NrIGlzIGFjcXVpcmVkLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgaXQKKyAgICAgICBpcyBoZWxkLCB3aGV0aGVyIGludGVycnVwdHMgY2FuIG9jY3VyIG9yIG5vdCB3aGlsZSBpdCBpcyBoZWxkLi4uCisKICAgICAgKiBUaXRsZTogIlBvcnRpbmcgTGludXggMi4wIERyaXZlcnMgVG8gTGludXggMi4yOiBDaGFuZ2VzIGFuZCBOZXcKICAgICAgICBGZWF0dXJlcyAiCiAgICAgICAgQXV0aG9yOiBBbGFuIENveC4KQEAgLTM4NSw3MCArMzgzLDcwIEBACiAgICAgICAgS2V5d29yZHM6IHBvcnRzLCBwb3J0aW5nLgogICAgICAgIERlc2NyaXB0aW9uOiBBcnRpY2xlIGZyb20gTGludXggTWFnYXppbmUgb24gcG9ydGluZyBmcm9tIDIuMCB0bwogICAgICAgIDIuMiBrZXJuZWxzLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJQb3J0aW5nIERldmljZSBEcml2ZXJzIFRvIExpbnV4IDIuMjogcGFydCBJSSIKICAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMDYvZ2Vhcl8wMS5odG1sCiAgICAgICAgS2V5d29yZHM6IHBvcnRzLCBwb3J0aW5nLgogICAgICAgIERlc2NyaXB0aW9uOiBTZWNvbmQgcGFydCBvbiBwb3J0aW5nIGZyb20gMi4wIHRvIDIuMiBrZXJuZWxzLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJIb3cgVG8gTWFrZSBTdXJlIFlvdXIgRHJpdmVyIFdpbGwgV29yayBPbiBUaGUgUG93ZXIKICAgICAgICBNYWNpbnRvc2giCiAgICAgICAgQXV0aG9yOiBQYXVsIE1hY2tlcnJhcy4KICAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTA3L2dlYXJfMDEuaHRtbAogICAgICAgIEtleXdvcmRzOiBNYWMsIFBvd2VyIE1hY2ludG9zaCwgcG9ydGluZywgZHJpdmVycywgY29tcGF0aWJpbGl0eS4KICAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJBbiBJbnRyb2R1Y3Rpb24gdG8gU0NTSSBEcml2ZXJzIgogICAgICAgIEF1dGhvcjogQWxhbiBDb3guCiAgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0wOC9nZWFyXzAxLmh0bWwKICAgICAgICBLZXl3b3JkczogU0NTSSwgZGV2aWNlLCBkcml2ZXIuCiAgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KLSAgICAgICAKKwogICAgICAqIFRpdGxlOiAiQWR2YW5jZWQgU0NTSSBEcml2ZXJzIEFuZCBPdGhlciBUYWxlcyIKICAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMDkvZ2Vhcl8wMS5odG1sCiAgICAgICAgS2V5d29yZHM6IFNDU0ksIGRldmljZSwgZHJpdmVyLCBhZHZhbmNlZC4KICAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJXcml0aW5nIExpbnV4IE1vdXNlIERyaXZlcnMiCiAgICAgICAgQXV0aG9yOiBBbGFuIENveC4KICAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTEwL2dlYXJfMDEuaHRtbAogICAgICAgIEtleXdvcmRzOiBtb3VzZSwgZHJpdmVyLCBncG0uCiAgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KLSAgICAgICAKKwogICAgICAqIFRpdGxlOiAiTW9yZSBvbiBNb3VzZSBEcml2ZXJzIgogICAgICAgIEF1dGhvcjogQWxhbiBDb3guCiAgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0xMS9nZWFyXzAxLmh0bWwKICAgICAgICBLZXl3b3JkczogbW91c2UsIGRyaXZlciwgZ3BtLCByYWNlcywgYXN5bmNocm9ub3VzIEkvTy4KICAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHN0aWxsIHNheXMgaXQgYWxsLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJXcml0aW5nIFZpZGVvNGxpbnV4IFJhZGlvIERyaXZlciIKICAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMTIvZ2Vhcl8wMS5odG1sCiAgICAgICAgS2V5d29yZHM6IHZpZGVvNGxpbnV4LCBkcml2ZXIsIHJhZGlvLCByYWRpbyBkZXZpY2VzLgogICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIlZpZGVvNGxpbnV4IERyaXZlcnMsIFBhcnQgMTogVmlkZW8tQ2FwdHVyZSBEZXZpY2UiCiAgICAgICAgQXV0aG9yOiBBbGFuIENveC4KICAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8yMDAwLTAxL2dlYXJfMDEuaHRtbAogICAgICAgIEtleXdvcmRzOiB2aWRlbzRsaW51eCwgZHJpdmVyLCB2aWRlbyBjYXB0dXJlLCBjYXB0dXJlIGRldmljZXMsCiAgICAgICAgY2FtZXJhIGRyaXZlci4KICAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJWaWRlbzRsaW51eCBEcml2ZXJzLCBQYXJ0IDI6IFZpZGVvLWNhcHR1cmUgRGV2aWNlcyIKICAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzIwMDAtMDIvZ2Vhcl8wMS5odG1sCiAgICAgICAgS2V5d29yZHM6IHZpZGVvNGxpbnV4LCBkcml2ZXIsIHZpZGVvIGNhcHR1cmUsIGNhcHR1cmUgZGV2aWNlcywKICAgICAgICBjYW1lcmEgZHJpdmVyLCBjb250cm9sLCBxdWVyeSBjYXBhYmlsaXRpZXMsIGNhcGFiaWxpdHksIGZhY2lsaXR5LgogICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIlBDSSBNYW5hZ2VtZW50IGluIExpbnV4IDIuMiIKICAgICAgICBBdXRob3I6IEFsYW4gQ294LgogICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzIwMDAtMDMvZ2Vhcl8wMS5odG1sCiAgICAgICAgS2V5d29yZHM6IFBDSSwgYnVzLCBidXMtbWFzdGVyaW5nLgogICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIkxpbnV4IDIuNCBLZXJuZWwgSW50ZXJuYWxzIgogICAgICAgIEF1dGhvcjogVGlncmFuIEFpdmF6aWFuIGFuZCBDaHJpc3RvcGggSGVsbHdpZy4KICAgICAgICBVUkw6IGh0dHA6Ly93d3cubW9zZXMudWtsaW51eC5uZXQvcGF0Y2hlcy9sa2kuaHRtbApAQCAtNDU2LDEzICs0NTQsMTEgQEAKICAgICAgICBEZXNjcmlwdGlvbjogQSBsaXR0bGUgYm9vayB1c2VkIGZvciBhIHNob3J0IHRyYWluaW5nIGNvdXJzZS4KICAgICAgICBDb3ZlcnMgYnVpbGRpbmcgdGhlIGtlcm5lbCBpbWFnZSwgYm9vdGluZyAoaW5jbHVkaW5nIFNNUCBib290dXApLAogICAgICAgIHByb2Nlc3MgbWFuYWdlbWVudCwgVkZTIGFuZCBtb3JlLgotICAgICAgIAorCiAgICAgICogVGl0bGU6ICJMaW51eCBJUCBOZXR3b3JraW5nLiBBIEd1aWRlIHRvIHRoZSBJbXBsZW1lbnRhdGlvbiBhbmQKICAgICAgICBNb2RpZmljYXRpb24gb2YgdGhlIExpbnV4IFByb3RvY29sIFN0YWNrLiIKICAgICAgICBBdXRob3I6IEdsZW5uIEhlcnJpbi4KLSAgICAgICBVUkw6Ci0gICAgICAgaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL2RvY3VtZW50cy9pcG5ldHdvcmtpbmcvbGludXhpcG5ldHdvcmtpbmcuCi0gICAgICAgaHRtbAorICAgICAgIFVSTDogaHR0cDovL3d3dy5jcy51bmguZWR1L2NucmcvZ2hlcnJpbgogICAgICAgIEtleXdvcmRzOiBuZXR3b3JrLCBuZXR3b3JraW5nLCBwcm90b2NvbCwgSVAsIFVEUCwgVENQLCBjb25uZWN0aW9uLAogICAgICAgIHNvY2tldCwgcmVjZWl2aW5nLCB0cmFuc21pdHRpbmcsIGZvcndhcmRpbmcsIHJvdXRpbmcsIHBhY2tldHMsCiAgICAgICAgbW9kdWxlcywgL3Byb2MsIHNrX2J1ZmYsIEZJQiwgdGFncy4KQEAgLTQ5NSw3ICs0OTEsNyBAQAogICAgICAgIGRyaXZlcnMgZm9yIHRoZSBMaW51eCBQQ01DSUEgQ2FyZCBTZXJ2aWNlcyBpbnRlcmZhY2UuIEl0IGFsc28KICAgICAgICBkZXNjcmliZXMgaG93IHRvIHdyaXRlIHVzZXItbW9kZSB1dGlsaXRpZXMgZm9yIGNvbW11bmljYXRpbmcgd2l0aAogICAgICAgIENhcmQgU2VydmljZXMuCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIlRoZSBMaW51eCBLZXJuZWwgTkZTRCBJbXBsZW1lbnRhdGlvbiIKICAgICAgICBBdXRob3I6IE5laWwgQnJvd24uCiAgICAgICAgVVJMOgpAQCAtNTkxLDQ3ICs1ODcsMjIgQEAKICAgICAgICBQYWdlczogNTIwLgogICAgICAgIElTQk46IDItMjEyLTA4OTMyLTUKICAgICAgICBOb3RlczogRnJlbmNoLgotICAgICAgIAotICAgICAqIFRpdGxlOiAiVGhlIExpbnV4IEtlcm5lbCBCb29rIgotICAgICAgIEF1dGhvcjogUmVteSBDYXJkLCBFcmljIER1bWFzLCBGcmFuY2sgTWV2ZWwuCi0gICAgICAgUHVibGlzaGVyOiBKb2huIFdpbGV5ICYgU29ucy4KLSAgICAgICBEYXRlOiAxOTk4LgotICAgICAgIElTQk46IDAtNDcxLTk4MTQxLTkKLSAgICAgICBOb3RlczogRW5nbGlzaCB0cmFuc2xhdGlvbi4KLSAgICAgICAKLSAgICAgKiBUaXRsZTogIkxpbnV4IDIuMCIKLSAgICAgICBBdXRob3I6IFJlbXkgQ2FyZCwgRXJpYyBEdW1hcywgRnJhbmNrIE1ldmVsLgotICAgICAgIFB1Ymxpc2hlcjogR2VzdGnzbiAyMDAwLgotICAgICAgIERhdGU6IDE5OTcuCi0gICAgICAgUGFnZXM6IDUwMS4KLSAgICAgICBJU0JOOiA4LTQ4MC04ODIwOC01Ci0gICAgICAgTm90ZXM6IFNwYW5pc2ggdHJhbnNsYXRpb24uCi0gICAgICAgCisKICAgICAgKiBUaXRsZTogIlVuaXggaW50ZXJuYWxzIC0tIHRoZSBuZXcgZnJvbnRpZXJzIgogICAgICAgIEF1dGhvcjogVXJlc2ggVmFoYWxpYS4KICAgICAgICBQdWJsaXNoZXI6IFByZW50aWNlIEhhbGwuCiAgICAgICAgRGF0ZTogMTk5Ni4KICAgICAgICBQYWdlczogNjAwLgogICAgICAgIElTQk46IDAtMTMtMTAxOTA4LTIKLSAgICAgICAKLSAgICAgKiBUaXRsZTogIkxpbnV4IENvcmUgS2VybmVsIENvbW1lbnRhcnkuIEd1aWRlIHRvIEluc2lkZXIncyBLbm93bGVkZ2UKLSAgICAgICBvbiB0aGUgQ29yZSBLZXJuZWwgb2YgdGhlIExpbnV4IENvZGUiCi0gICAgICAgQXV0aG9yOiBTY290dCBNYXh3ZWxsLgotICAgICAgIFB1Ymxpc2hlcjogQ29yaW9saXMuCi0gICAgICAgRGF0ZTogMTk5OS4KLSAgICAgICBQYWdlczogNTkyLgotICAgICAgIElTQk46IDEtNTc2MTAtNDY5LTkKLSAgICAgICBOb3RlczogQ0QtUk9NIGluY2x1ZGVkLiBMaW5lIGJ5IGxpbmUgY29tbWVudGFyeSBvZiB0aGUga2VybmVsCi0gICAgICAgY29kZS4KLSAgICAgICAKLSAgICAgKiBUaXRsZTogIkxpbnV4IElQIFN0YWNrcyBDb21tZW50YXJ5IgotICAgICAgIEF1dGhvcjogU3RlcGhlbiBTYXRjaGVsbCBhbmQgSEJKIENsaWZmb3JkLgotICAgICAgIFB1Ymxpc2hlcjogQ29yaW9saXMuCi0gICAgICAgRGF0ZTogMjAwMC4KLSAgICAgICBQYWdlczogPz8/LgotICAgICAgIElTQk46IDEtNTc2MTAtNDcwLTIKLSAgICAgICBOb3RlczogTGluZSBieSBsaW5lIHNvdXJjZSBjb2RlIGNvbW1lbnRhcnkgYm9vay4KLSAgICAgICAKKworICAgICAqIFRpdGxlOiAgIlRoZSAgRGVzaWduICBhbmQgSW1wbGVtZW50YXRpb24gb2YgdGhlIDQuNCBCU0QgVU5JWAorICAgICAgIE9wZXJhdGluZyBTeXN0ZW0iCisgICAgICAgQXV0aG9yOiBNYXJzaGFsbCBLaXJrIE1jS3VzaWNrLCBLZWl0aCBCb3N0aWMsIE1pY2hhZWwgSi4gS2FyZWxzLAorICAgICAgIEpvaG4gUy4gUXVhcnRlcm1hbi4KKyAgICAgICBQdWJsaXNoZXI6IEFkZGlzb24tV2VzbGV5LgorICAgICAgIERhdGU6IDE5OTYuCisgICAgICAgSVNCTjogMC0yMDEtNTQ5NzktNAorCiAgICAgICogVGl0bGU6ICJQcm9ncmFtbWluZyBmb3IgdGhlIHJlYWwgd29ybGQgLSBQT1NJWC40IgogICAgICAgIEF1dGhvcjogQmlsbCBPLiBHYWxsbWVpc3Rlci4KICAgICAgICBQdWJsaXNoZXI6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcywgSW5jLi4KQEAgLTY0MCwxOCArNjExLDMyIEBACiAgICAgICAgSVNCTjogSS01NjU5Mi0wNzQtMAogICAgICAgIE5vdGVzOiBUaG91Z2ggbm90IGJlaW5nIGRpcmVjdGx5IGFib3V0IExpbnV4LCBMaW51eCBhaW1zIHRvIGJlCiAgICAgICAgUE9TSVguIEdvb2QgcmVmZXJlbmNlLgotICAgICAgIAotICAgICAqIFRpdGxlOiAiVW5kZXJzdGFuZGluZyB0aGUgTGludXggS2VybmVsIgotICAgICAgIEF1dGhvcjogRGFuaWVsIFAuIEJvdmV0IGFuZCBNYXJjbyBDZXNhdGkuCi0gICAgICAgUHVibGlzaGVyOiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMsIEluYy4uCi0gICAgICAgRGF0ZTogMjAwMC4KLSAgICAgICBQYWdlczogNzAyLgotICAgICAgIElTQk46IDAtNTk2LTAwMDAyLTIKLSAgICAgICBOb3RlczogRnVydGhlciBpbmZvcm1hdGlvbiBpbgotICAgICAgIGh0dHA6Ly93d3cub3JlaWxseS5jb20vY2F0YWxvZy9saW51eGtlcm5lbC8KLSAgICAgICAKKworICAgICAqIFRpdGxlOiAgIlVOSVggIFN5c3RlbXMgIGZvciAgTW9kZXJuIEFyY2hpdGVjdHVyZXM6IFN5bW1ldHJpYworICAgICAgIE11bHRpcHJvY2Vzc3NpbmcgYW5kIENhY2hpbmcgZm9yIEtlcm5lbCBQcm9ncmFtbWVycyIKKyAgICAgICBBdXRob3I6IEN1cnQgU2NoaW1tZWwuCisgICAgICAgUHVibGlzaGVyOiBBZGRpc29uIFdlc2xleS4KKyAgICAgICBEYXRlOiBKdW5lLCAxOTk0LgorICAgICAgIFBhZ2VzOiA0MzIuCisgICAgICAgSVNCTjogMC0yMDEtNjMzMzgtOAorCisgICAgICogVGl0bGU6ICAiVGhlICBEZXNpZ24gIGFuZCBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgNC4zIEJTRCBVTklYCisgICAgICAgT3BlcmF0aW5nIFN5c3RlbSIKKyAgICAgICBBdXRob3I6IFNhbXVlbCBKLiBMZWZmbGVyLCBNYXJzaGFsbCBLaXJrIE1jS3VzaWNrLCBNaWNoYWVsIEouCisgICAgICAgS2FyZWxzLCBKb2huIFMuIFF1YXJ0ZXJtYW4uCisgICAgICAgUHVibGlzaGVyOiBBZGRpc29uLVdlc2xleS4KKyAgICAgICBEYXRlOiAxOTg5IChyZXByaW50ZWQgd2l0aCBjb3JyZWN0aW9ucyBvbiBPY3RvYmVyLCAxOTkwKS4KKyAgICAgICBJU0JOOiAwLTIwMS0wNjE5Ni0xCisKKyAgICAgKiBUaXRsZTogIlRoZSBEZXNpZ24gb2YgdGhlIFVOSVggT3BlcmF0aW5nIFN5c3RlbSIKKyAgICAgICBBdXRob3I6IE1hdXJpY2UgSi4gQmFjaC4KKyAgICAgICBQdWJsaXNoZXI6IFByZW50aWNlIEhhbGwuCisgICAgICAgRGF0ZTogMTk4Ni4KKyAgICAgICBQYWdlczogNDcxLgorICAgICAgIElTQk46IDAtMTMtMjAxNzU3LTEKKwogICAgICBNSVNDRUxMQU5FT1VTOgotICAgCisKICAgICAgKiBOYW1lOiBsaW51eC9Eb2N1bWVudGF0aW9uCiAgICAgICAgQXV0aG9yOiBNYW55LgogICAgICAgIFVSTDogSnVzdCBsb29rIGluc2lkZSB5b3VyIGtlcm5lbCBzb3VyY2VzLgpAQCAtNjYwLDcgKzY0NSw3IEBACiAgICAgICAgaW5zaWRlIHRoZSBEb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4gU29tZSBwYWdlcyBmcm9tIHRoaXMgZG9jdW1lbnQKICAgICAgICAoaW5jbHVkaW5nIHRoaXMgZG9jdW1lbnQgaXRzZWxmKSBoYXZlIGJlZW4gbW92ZWQgdGhlcmUsIGFuZCBtaWdodAogICAgICAgIGJlIG1vcmUgdXAgdG8gZGF0ZSB0aGFuIHRoZSB3ZWIgdmVyc2lvbi4KLSAgICAgICAKKwogICAgICAqIE5hbWU6ICJMaW51eCBTb3VyY2UgRHJpdmVyIgogICAgICAgIFVSTDogaHR0cDovL2xzZC5saW51eC5jegogICAgICAgIEtleXdvcmRzOiBCcm93c2luZyBzb3VyY2UgY29kZS4KQEAgLTY3MSw3ICs2NTYsNyBAQAogICAgICAgIHlvdSBjYW4gc2VhcmNoIExpbnV4IGtlcm5lbCAoZnVsbHRleHQsIG1hY3JvcywgdHlwZXMsIGZ1bmN0aW9ucwogICAgICAgIGFuZCB2YXJpYWJsZXMpIGFuZCBMU0QgY2FuIGdlbmVyYXRlIHBhdGNoZXMgZm9yIHlvdSBvbiB0aGUgZmx5CiAgICAgICAgKGZpbGVzLCBkaXJlY3RvcmllcyBvciBrZXJuZWwpIi4KLSAgICAgICAKKwogICAgICAqIE5hbWU6ICJMaW51eCBLZXJuZWwgU291cmNlIFJlZmVyZW5jZSIKICAgICAgICBBdXRob3I6IFRob21hcyBHcmFpY2hlbi4KICAgICAgICBVUkw6IGh0dHA6Ly9pbm5vbWluYXRlLm9yZy9+Z3JhaWNoZW4vcHJvamVjdHMvbGtzci8KQEAgLTY4MSwyNyArNjY2LDI3IEBACiAgICAgICAgc291cmNlcyBvZiBhbnkgdmVyc2lvbiBzdGFydGluZyBmcm9tIDEuMCB1cCB0byB0aGUgKGRhaWx5IHVwZGF0ZWQpCiAgICAgICAgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZS4gQWxzbyB5b3UgY2FuIGNoZWNrIHRoZSBkaWZmZXJlbmNlcwogICAgICAgIGJldHdlZW4gdHdvIHZlcnNpb25zIG9mIGEgZmlsZSIuCi0gICAgICAgCisKICAgICAgKiBOYW1lOiAiQ3Jvc3MtUmVmZXJlbmNpbmcgTGludXgiCiAgICAgICAgVVJMOiBodHRwOi8vbHhyLmxpbnV4Lm5vL3NvdXJjZS8KICAgICAgICBLZXl3b3JkczogQnJvd3Npbmcgc291cmNlIGNvZGUuCiAgICAgICAgRGVzY3JpcHRpb246IEFub3RoZXIgd2ViLWJhc2VkIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZSBicm93c2VyLgogICAgICAgIExvdHMgb2YgY3Jvc3MgcmVmZXJlbmNlcyB0byB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucy4gWW91IGNhbiBzZWUKICAgICAgICB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkIGFuZCB3aGVyZSB0aGV5IGFyZSB1c2VkLgotICAgICAgIAorCiAgICAgICogTmFtZTogIkxpbnV4IFdlZWtseSBOZXdzIgogICAgICAgIFVSTDogaHR0cDovL2x3bi5uZXQKICAgICAgICBLZXl3b3JkczogbGF0ZXN0IGtlcm5lbCBuZXdzLgogICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuIFRoZXJlJ3MgYSBmaXhlZCBrZXJuZWwgc2VjdGlvbgogICAgICAgIHN1bW1hcml6aW5nIGRldmVsb3BlcnMnIHdvcmssIGJ1ZyBmaXhlcywgbmV3IGZlYXR1cmVzIGFuZCB2ZXJzaW9ucwogICAgICAgIHByb2R1Y2VkIGR1cmluZyB0aGUgd2Vlay4gUHVibGlzaGVkIGV2ZXJ5IFRodXJzZGF5LgotICAgICAgIAorCiAgICAgICogTmFtZTogIktlcm5lbCBUcmFmZmljIgotICAgICAgIFVSTDogaHR0cDovL3d3dy5rZXJuZWx0cmFmZmljLm9yZy9rZXJuZWwtdHJhZmZpYy8KKyAgICAgICBVUkw6IGh0dHA6Ly9rdC56b3JrLm5ldC9rZXJuZWwtdHJhZmZpYy8KICAgICAgICBLZXl3b3JkczogbGludXgta2VybmVsIG1haWxpbmcgbGlzdCwgd2Vla2x5IGtlcm5lbCBuZXdzLgogICAgICAgIERlc2NyaXB0aW9uOiBXZWVrbHkgbmV3c2xldHRlciBjb3ZlcmluZyB0aGUgbW9zdCByZWxldmFudAogICAgICAgIGRpc2N1c3Npb25zIG9mIHRoZSBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0LgotICAgICAgIAorCiAgICAgICogTmFtZTogIkN1VFRpTkcuZURHZS5MaU51WCIKICAgICAgICBVUkw6IGh0dHA6Ly9lZGdlLmtlcm5lbG5vdGVzLm9yZwogICAgICAgIEtleXdvcmRzOiBjaGFuZ2VsaXN0LgpAQCAtNzA5LDcgKzY5NCw3IEBACiAgICAgICAgcmVsZWFzZS4gV2hhdCdzIG5ldywgd2hhdCdzIGJldHRlciwgd2hhdCdzIGNoYW5nZWQuIE15cmRyYWFsIHJlYWRzCiAgICAgICAgdGhlIHBhdGNoZXMgYW5kIGRlc2NyaWJlcyB0aGVtLiBQb2ludGVycyB0byB0aGUgcGF0Y2hlcyBhcmUgdGhlcmUsCiAgICAgICAgdG9vLgotICAgICAgIAorCiAgICAgICogTmFtZTogIk5ldyBsaW51eC1rZXJuZWwgTWFpbGluZyBMaXN0IEZBUSIKICAgICAgICBVUkw6IGh0dHA6Ly93d3cudHV4Lm9yZy9sa21sLwogICAgICAgIEtleXdvcmRzOiBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0IEZBUS4KQEAgLTcxOSw3ICs3MDQsNyBAQAogICAgICAgIGl0LiBSZWFkIGl0IHRvIHNlZSBob3cgdG8gam9pbiB0aGUgbWFpbGluZyBsaXN0LiBEb3plbnMgb2YKICAgICAgICBpbnRlcmVzdGluZyBxdWVzdGlvbnMgcmVnYXJkaW5nIHRoZSBsaXN0LCBMaW51eCwgZGV2ZWxvcGVycyAod2hvCiAgICAgICAgaXMgLi4uPyksIHRlcm1zICh3aGF0IGlzLi4uPykgYXJlIGFuc3dlcmVkIGhlcmUgdG9vLiBKdXN0IHJlYWQgaXQuCi0gICAgICAgCisKICAgICAgKiBOYW1lOiAiTGludXggVmlydHVhbCBGaWxlIFN5c3RlbSIKICAgICAgICBBdXRob3I6IFBldGVyIEouIEJyYWFtLgogICAgICAgIFVSTDogaHR0cDovL3d3dy5jb2RhLmNzLmNtdS5lZHUvZG9jL3RhbGtzL2xpbnV4dmZzLwpAQCAtNzI3LDEwICs3MTIsMTAgQEAKICAgICAgICBEZXNjcmlwdGlvbjogU2V0IG9mIHNsaWRlcywgcHJlc3VtYWJseSBmcm9tIGEgcHJlc2VudGF0aW9uIG9uIHRoZQogICAgICAgIExpbnV4IFZGUyBsYXllci4gQ292ZXJzIHZlcnNpb24gMi4xLngsIHdpdGggZGVudHJpZXMgYW5kIHRoZQogICAgICAgIGRjYWNoZS4KLSAgICAgICAKKwogICAgICAqIE5hbWU6ICJHYXJ5J3MgRW5jeWNsb3BlZGlhIC0gVGhlIExpbnV4IEtlcm5lbCIKICAgICAgICBBdXRob3I6IEdhcnkgKEkgc3VwcG9zZS4uLikuCi0gICAgICAgVVJMOiBodHRwOi8vbWVtYmVycy5hYS5uZXQvfnN3ZWFyL3BlZGlhL2tlcm5lbC5odG1sCisgICAgICAgVVJMOiBodHRwOi8vd3d3Lmxpc29sZWcubmV0L2NnaS1iaW4vbGlzb2xlZy5wbD92aWV3PWtlcm5lbC5odG0KICAgICAgICBLZXl3b3JkczogbGlua3MsIG5vdCBmb3VuZCBoZXJlPy4KICAgICAgICBEZXNjcmlwdGlvbjogR2FyeSdzIEVuY3ljbG9wZWRpYSBleGlzdHMgdG8gYWxsb3cgdGhlIHJhcGlkIGZpbmRpbmcKICAgICAgICBvZiBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBpbmZvcm1hdGlvbiBvZiBpbnRlcmVzdCB0byBHTlUvTGludXgKQEAgLTczOCw3ICs3MjMsNyBAQAogICAgICAgIGNhdGVnb3JpZXMuIFRoaXMgbGluayBpcyBmb3Iga2VybmVsLXNwZWNpZmljIGxpbmtzLCBkb2N1bWVudHMsCiAgICAgICAgc2l0ZXMuLi4gTG9vayB0aGVyZSBpZiB5b3UgY291bGQgbm90IGZpbmQgaGVyZSB3aGF0IHlvdSB3ZXJlCiAgICAgICAgbG9va2luZyBmb3IuCi0gICAgICAgCisKICAgICAgKiBOYW1lOiAiVGhlIGhvbWUgcGFnZSBvZiBMaW51eC1NTSIKICAgICAgICBBdXRob3I6IFRoZSBMaW51eC1NTSB0ZWFtLgogICAgICAgIFVSTDogaHR0cDovL2xpbnV4LW1tLm9yZy8KQEAgLTc0Nyw3ICs3MzIsNyBAQAogICAgICAgIERlc2NyaXB0aW9uOiBTaXRlIGRldm90ZWQgdG8gTGludXggTWVtb3J5IE1hbmFnZW1lbnQgZGV2ZWxvcG1lbnQuCiAgICAgICAgTWVtb3J5IHJlbGF0ZWQgcGF0Y2hlcywgSE9XVE9zLCBsaW5rcywgbW0gZGV2ZWxvcGVycy4uLiBEb24ndCBtaXNzCiAgICAgICAgaXQgaWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIG1lbW9yeSBtYW5hZ2VtZW50IGRldmVsb3BtZW50IQotICAgICAgIAorCiAgICAgICogTmFtZTogIktlcm5lbCBOZXdiaWVzIElSQyBDaGFubmVsIgogICAgICAgIFVSTDogaHR0cDovL3d3dy5rZXJuZWxuZXdiaWVzLm9yZwogICAgICAgIEtleXdvcmRzOiBJUkMsIG5ld2JpZXMsIGNoYW5uZWwsIGFza2luZyBkb3VidHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGQyNWFjZDUuLmM0NzlkMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC00OCw2ICs0OCw3IEBACiAJSVNBUE5QCUlTQSBQblAgY29kZSBpcyBlbmFibGVkLgogCUlTRE4JQXBwcm9wcmlhdGUgSVNETiBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJSk9ZCUFwcHJvcHJpYXRlIGpveXN0aWNrIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlMSUJBVEEgIExpYmF0YSBkcml2ZXIgaXMgZW5hYmxlZAogCUxQCVByaW50ZXIgc3VwcG9ydCBpcyBlbmFibGVkLgogCUxPT1AJTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlNNjhrCU02OGsgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCkBAIC0xMDQsNiArMTA1LDkgQEAKIERvIG5vdCBtb2RpZnkgdGhlIHN5bnRheCBvZiBib290IGxvYWRlciBwYXJhbWV0ZXJzIHdpdGhvdXQgZXh0cmVtZQogbmVlZCBvciBjb29yZGluYXRpb24gd2l0aCA8RG9jdW1lbnRhdGlvbi9pMzg2L2Jvb3QudHh0Pi4KIAorVGhlcmUgYXJlIGFsc28gYXJjaC1zcGVjaWZpYyBrZXJuZWwtcGFyYW1ldGVycyBub3QgZG9jdW1lbnRlZCBoZXJlLgorU2VlIGZvciBleGFtcGxlIDxEb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0Pi4KKwogTm90ZSB0aGF0IEFMTCBrZXJuZWwgcGFyYW1ldGVycyBsaXN0ZWQgYmVsb3cgYXJlIENBU0UgU0VOU0lUSVZFLCBhbmQgdGhhdAogYSB0cmFpbGluZyA9IG9uIHRoZSBuYW1lIG9mIGFueSBwYXJhbWV0ZXIgc3RhdGVzIHRoYXQgdGhhdCBwYXJhbWV0ZXIgd2lsbAogYmUgZW50ZXJlZCBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hlcmVhcyBpdHMgYWJzZW5jZSBpbmRpY2F0ZXMgdGhhdApAQCAtMzYxLDYgKzM2NSwxMSBAQAogCQkJY2xvY2tzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSwgaXQgZGVmYXVsdHMgdG8gUElULgogCQkJRm9ybWF0OiB7IHBpdCB8IHRzYyB8IGN5Y2xvbmUgfCBwbXRtciB9CiAKKwljb2RlX2J5dGVzCVtJQTMyXSBIb3cgbWFueSBieXRlcyBvZiBvYmplY3QgY29kZSB0byBwcmludCBpbiBhbgorCQkJb29wcyByZXBvcnQuCisJCQlSYW5nZTogMCAtIDgxOTIKKwkJCURlZmF1bHQ6IDY0CisKIAlkaXNhYmxlXzgyNTRfdGltZXIKIAllbmFibGVfODI1NF90aW1lcgogCQkJW0lBMzIvWDg2XzY0XSBEaXNhYmxlL0VuYWJsZSBpbnRlcnJ1cHQgMCB0aW1lciByb3V0aW5nCkBAIC02MDEsNiArNjEwLDEwIEBACiAJCQloaWdobWVtIG90aGVyd2lzZS4gVGhpcyBhbHNvIHdvcmtzIHRvIHJlZHVjZSBoaWdobWVtCiAJCQlzaXplIG9uIGJpZ2dlciBib3hlcy4KIAorCWhpZ2hyZXM9CVtLTkxdIEVuYWJsZS9kaXNhYmxlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBtb2RlLgorCQkJVmFsaWQgcGFyYW1ldGVyczogIm9uIiwgIm9mZiIKKwkJCURlZmF1bHQ6ICJvbiIKKwogCWhpc2F4PQkJW0hXLElTRE5dCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5IaVNheC4KIApAQCAtODUxLDcgKzg2NCwxNCBAQAogCQkJRm9ybWF0OiA8MS0yNTY+CiAKIAltYXhjcHVzPQlbU01QXSBNYXhpbXVtIG51bWJlciBvZiBwcm9jZXNzb3JzIHRoYXQJYW4gU01QIGtlcm5lbAotCQkJc2hvdWxkIG1ha2UgdXNlIG9mCisJCQlzaG91bGQgbWFrZSB1c2Ugb2YuCisJCQlVc2luZyAibm9zbXAiIG9yICJtYXhjcHVzPTAiIHdpbGwgZGlzYWJsZSBTTVAKKwkJCWVudGlyZWx5ICh0aGUgTVBTIHRhYmxlIHByb2JlIHN0aWxsIGhhcHBlbnMsIHRob3VnaCkuCisJCQlBIGNvbW1hbmQtbGluZSBvcHRpb24gb2YgIm1heGNwdXM9PE5VTT4iLCB3aGVyZSA8TlVNPgorCQkJaXMgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMCwgbGltaXRzIHRoZSBtYXhpbXVtIG51bWJlcgorCQkJb2YgQ1BVcyBhY3RpdmF0ZWQgaW4gU01QIG1vZGUgdG8gPE5VTT4uCisJCQlVc2luZyAibWF4Y3B1cz0xIiBvbiBhbiBTTVAga2VybmVsIGlzIHRoZSB0cml2aWFsCisJCQljYXNlIG9mIGFuIFNNUCBrZXJuZWwgd2l0aCBvbmx5IG9uZSBDUFUuCiAKIAltYXhfYWRkcj1bS01HXQlbS05MLEJPT1QsaWE2NF0gQWxsIHBoeXNpY2FsIG1lbW9yeSBncmVhdGVyIHRoYW4gb3IKIAkJCWVxdWFsIHRvIHRoaXMgcGh5c2ljYWwgYWRkcmVzcyBpcyBpZ25vcmVkLgpAQCAtMTAyNiw2ICsxMDQ2LDEwIEBACiAJCQllbXVsYXRpb24gbGlicmFyeSBldmVuIGlmIGEgMzg3IG1hdGhzIGNvcHJvY2Vzc29yCiAJCQlpcyBwcmVzZW50LgogCisJbm9hY3BpCQlbTElCQVRBXSBEaXNhYmxlcyB1c2Ugb2YgQUNQSSBpbiBsaWJhdGEgc3VzcGVuZC9yZXN1bWUKKwkJCXdoZW4gc2V0LgorCQkJRm9ybWF0OiA8aW50PgorCiAJbm9hbGllbmNhY2hlCVtNTSwgTlVNQV0gRGlzYWJsZXMgdGhlIGFsbGNvYXRpb24gb2YgYWxpZW4gY2FjaGVzIGluCiAJCQl0aGUgc2xhYiBhbGxvY2F0b3IuICBTYXZlcyBwZXItbm9kZSBtZW1vcnksIGJ1dCB3aWxsCiAJCQlpbXBhY3QgcGVyZm9ybWFuY2Ugb24gcmVhbCBOVU1BIGhhcmR3YXJlLgpAQCAtMTA3MCw2ICsxMDk0LDEwIEBACiAJCQlpbiBjZXJ0YWluIGVudmlyb25tZW50cyBzdWNoIGFzIG5ldHdvcmtlZCBzZXJ2ZXJzIG9yCiAJCQlyZWFsLXRpbWUgc3lzdGVtcy4KIAorCW5vaHo9CQlbS05MXSBCb290dGltZSBlbmFibGUvZGlzYWJsZSBkeW5hbWljIHRpY2tzCisJCQlWYWxpZCBhcmd1bWVudHM6IG9uLCBvZmYKKwkJCURlZmF1bHQ6IG9uCisKIAlub2lycWJhbGFuY2UJW0lBLTMyLFNNUCxLTkxdIERpc2FibGUga2VybmVsIGlycSBiYWxhbmNpbmcKIAogCW5vaXJxZGVidWcJW0lBLTMyXSBEaXNhYmxlcyB0aGUgY29kZSB3aGljaCBhdHRlbXB0cyB0byBkZXRlY3QgYW5kCkBAIC0xMjU5LDYgKzEyODcsMTIgQEAKIAkJCQlUaGlzIHNvcnRpbmcgaXMgZG9uZSB0byBnZXQgYSBkZXZpY2UKIAkJCQlvcmRlciBjb21wYXRpYmxlIHdpdGggb2xkZXIgKDw9IDIuNCkga2VybmVscy4KIAkJbm9iZnNvcnQJRG9uJ3Qgc29ydCBQQ0kgZGV2aWNlcyBpbnRvIGJyZWFkdGgtZmlyc3Qgb3JkZXIuCisJCWNiaW9zaXplPW5uW0tNR10JVGhlIGZpeGVkIGFtb3VudCBvZiBidXMgc3BhY2Ugd2hpY2ggaXMKKwkJCQlyZXNlcnZlZCBmb3IgdGhlIENhcmRCdXMgYnJpZGdlJ3MgSU8gd2luZG93LgorCQkJCVRoZSBkZWZhdWx0IHZhbHVlIGlzIDI1NiBieXRlcy4KKwkJY2JtZW1zaXplPW5uW0tNR10JVGhlIGZpeGVkIGFtb3VudCBvZiBidXMgc3BhY2Ugd2hpY2ggaXMKKwkJCQlyZXNlcnZlZCBmb3IgdGhlIENhcmRCdXMgYnJpZGdlJ3MgbWVtb3J5CisJCQkJd2luZG93LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2NCBtZWdhYnl0ZXMuCiAKIAlwY212PQkJW0hXLFBDTUNJQV0gQmFkZ2VQQUQgNAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQKaW5kZXggMjUwMzQwNC4uZWE1NWVhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9vb3BzLXRyYWNpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vb29wcy10cmFjaW5nLnR4dApAQCAtMjM0LDYgKzIzNCwxMiBAQAogICA2OiAnQicgaWYgYSBwYWdlLXJlbGVhc2UgZnVuY3Rpb24gaGFzIGZvdW5kIGEgYmFkIHBhZ2UgcmVmZXJlbmNlIG9yCiAgICAgIHNvbWUgdW5leHBlY3RlZCBwYWdlIGZsYWdzLgogCisgIDc6ICdVJyBpZiBhIHVzZXIgc3BlY2lmaWNhbGx5IHJlcXVlc3RlZCB0aGF0IHRoZSBUYWludGVkIGZsYWcgYmUgc2V0LAorICAgICAnICcgb3RoZXJ3aXNlLgorCisgIDc6ICdVJyBpZiBhIHVzZXIgb3IgdXNlciBhcHBsaWNhdGlvbiBzcGVjaWZpY2FsbHkgcmVxdWVzdGVkIHRoYXQgdGhlCisgICAgIFRhaW50ZWQgZmxhZyBiZSBzZXQsICcgJyBvdGhlcndpc2UuCisKIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgdGhlICdUYWludGVkOiAnIHN0cmluZyBpcyB0byB0ZWxsIGtlcm5lbAogZGVidWdnZXJzIGlmIHRoaXMgaXMgYSBjbGVhbiBrZXJuZWwgb3IgaWYgYW55dGhpbmcgdW51c3VhbCBoYXMKIG9jY3VycmVkLiAgVGFpbnRpbmcgaXMgcGVybWFuZW50OiBldmVuIGlmIGFuIG9mZmVuZGluZyBtb2R1bGUgaXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vcGNpLnR4dAppbmRleCBmZDUwMjhlLi5jZGYyZjNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3BjaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wY2kudHh0CkBAIC0yMDUsOCArMjA1LDggQEAKIAkgIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSB0aGUgcHJvYmUoKSByb3V0aW5lLCBjYW4gYmUgbWFya2VkIF9fZGV2aW5pdC4KIAkgIERpdHRvIGZvciByZW1vdmUoKSBhbmQgX19kZXZleGl0LgogCi0JbyBJZiBteWRyaXZlcl9wcm9iZSgpIGlzIG1hcmtlZCB3aXRoIF9fZGV2aW5pdCgpLCB0aGVuIGFsbCBhZGRyZXNzCi0JICByZWZlcmVuY2VzIHRvIG15ZHJpdmVyX3Byb2JlIG11c3QgdXNlIF9fZGV2ZXhpdF9wKG15ZHJpdmVyX3Byb2JlKQorCW8gSWYgbXlkcml2ZXJfcmVtb3ZlKCkgaXMgbWFya2VkIHdpdGggX19kZXZleGl0KCksIHRoZW4gYWxsIGFkZHJlc3MKKwkgIHJlZmVyZW5jZXMgdG8gbXlkcml2ZXJfcmVtb3ZlIG11c3QgdXNlIF9fZGV2ZXhpdF9wKG15ZHJpdmVyX3JlbW92ZSkKIAkgIChpbiB0aGUgc3RydWN0IHBjaV9kcml2ZXIgZGVjbGFyYXRpb24gZm9yIGV4YW1wbGUpLgogCSAgX19kZXZleGl0X3AoKSB3aWxsIGdlbmVyYXRlIHRoZSBmdW5jdGlvbiBuYW1lIF9vcl8gTlVMTCBpZiB0aGUKIAkgIGZ1bmN0aW9uIHdpbGwgYmUgZGlzY2FyZGVkLiAgRm9yIGFuIGV4YW1wbGUsIHNlZSBkcml2ZXJzL25ldC90ZzMuYy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKaW5kZXggM2I1MTQ2Ny4uYjQxMzk3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogICAgICAgfCAgIHwtIGRldmljZV90eXBlID0gImNwdSIKICAgICAgIHwgICB8LSByZWcgPSA8MD4KICAgICAgIHwgICB8LSBjbG9jay1mcmVxdWVuY3kgPSA8NWY1ZTEwMDA+Ci0gICAgICB8ICAgfC0gbGludXgsYm9vdC1jcHUKKyAgICAgIHwgICB8LSA2NC1iaXQKICAgICAgIHwgICB8LSBsaW51eCxwaGFuZGxlID0gPDI+CiAgICAgICB8CiAgICAgICBvIG1lbW9yeUAwCkBAIC01MDksNyArNTA5LDYgQEAKICAgICAgIG8gY2hvc2VuCiAgICAgICAgIHwtIG5hbWUgPSAiY2hvc2VuIgogICAgICAgICB8LSBib290YXJncyA9ICJyb290PS9kZXYvc2RhMiIKLSAgICAgICAgfC0gbGludXgscGxhdGZvcm0gPSA8MDAwMDA2MDA+CiAgICAgICAgIHwtIGxpbnV4LHBoYW5kbGUgPSA8ND4KIAogVGhpcyB0cmVlIGlzIGFsbW9zdCBhIG1pbmltYWwgdHJlZS4gSXQgcHJldHR5IG11Y2ggY29udGFpbnMgdGhlCkBAIC01MTksNyArNTE4LDcgQEAKIHRocm91Z2ggL2Nob3NlbiwgbGlrZSBpbiB0aGlzIGV4YW1wbGUsIHRoZSBwbGF0Zm9ybSB0eXBlIChtYW5kYXRvcnkpCiBhbmQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIChvcHRpb25hbCkuCiAKLVRoZSAvY3B1cy9Qb3dlclBDLDk3MEAwL2xpbnV4LGJvb3QtY3B1IHByb3BlcnR5IGlzIGFuIGV4YW1wbGUgb2YgYQorVGhlIC9jcHVzL1Bvd2VyUEMsOTcwQDAvNjQtYml0IHByb3BlcnR5IGlzIGFuIGV4YW1wbGUgb2YgYQogcHJvcGVydHkgd2l0aG91dCBhIHZhbHVlLiBBbGwgb3RoZXIgcHJvcGVydGllcyBoYXZlIGEgdmFsdWUuIFRoZQogc2lnbmlmaWNhbmNlIG9mIHRoZSAjYWRkcmVzcy1jZWxscyBhbmQgI3NpemUtY2VsbHMgcHJvcGVydGllcyB3aWxsIGJlCiBleHBsYWluZWQgaW4gY2hhcHRlciBJViB3aGljaCBkZWZpbmVzIHByZWNpc2VseSB0aGUgcmVxdWlyZWQgbm9kZXMgYW5kCkBAIC03MzMsOCArNzMyLDcgQEAKICAgICAgIHRoYXQgdHlwaWNhbGx5IGdldCBkcml2ZW4gYnkgdGhlIHNhbWUgcGxhdGZvcm0gY29kZSBpbiB0aGUKICAgICAgIGtlcm5lbCwgeW91IHdvdWxkIHVzZSBhIGRpZmZlcmVudCAibW9kZWwiIHByb3BlcnR5IGJ1dCBwdXQgYQogICAgICAgdmFsdWUgaW4gImNvbXBhdGlibGUiLiBUaGUga2VybmVsIGRvZXNuJ3QgZGlyZWN0bHkgdXNlIHRoYXQKLSAgICAgIHZhbHVlIChzZWUgL2Nob3Nlbi9saW51eCxwbGF0Zm9ybSBmb3IgaG93IHRoZSBrZXJuZWwgY2hvb3NlcyBhCi0gICAgICBwbGF0Zm9ybSB0eXBlKSBidXQgaXQgaXMgZ2VuZXJhbGx5IHVzZWZ1bC4KKyAgICAgIHZhbHVlIGJ1dCBpdCBpcyBnZW5lcmFsbHkgdXNlZnVsLgogCiAgIFRoZSByb290IG5vZGUgaXMgYWxzbyBnZW5lcmFsbHkgd2hlcmUgeW91IGFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMKICAgc3BlY2lmaWMgdG8geW91ciBib2FyZCBsaWtlIHRoZSBzZXJpYWwgbnVtYmVyIGlmIGFueSwgdGhhdCBzb3J0IG9mCkBAIC03NzgsNyArNzc2LDYgQEAKICAgICAgIGJ5dGVzCiAgICAgLSBkLWNhY2hlLXNpemUgOiBvbmUgY2VsbCwgc2l6ZSBvZiBMMSBkYXRhIGNhY2hlIGluIGJ5dGVzCiAgICAgLSBpLWNhY2hlLXNpemUgOiBvbmUgY2VsbCwgc2l6ZSBvZiBMMSBpbnN0cnVjdGlvbiBjYWNoZSBpbiBieXRlcwotICAgIC0gbGludXgsIGJvb3QtY3B1IDogU2hvdWxkIGJlIGRlZmluZWQgaWYgdGhpcyBjcHUgaXMgdGhlIGJvb3QgY3B1LgogCiAgIFJlY29tbWVuZGVkIHByb3BlcnRpZXM6CiAKQEAgLTg0MywxMSArODQwLDYgQEAKICAgdGhlIHByb21faW5pdCgpIHRyYW1wb2xpbmUgd2hlbiBib290aW5nIHdpdGggYW4gT0YgY2xpZW50IGludGVyZmFjZSwKICAgYnV0IHRoYXQgeW91IGhhdmUgdG8gcHJvdmlkZSB5b3Vyc2VsZiB3aGVuIHVzaW5nIHRoZSBmbGF0dGVuZWQgZm9ybWF0LgogCi0gIFJlcXVpcmVkIHByb3BlcnRpZXM6Ci0KLSAgICAtIGxpbnV4LHBsYXRmb3JtIDogVGhpcyBpcyB5b3VyIHBsYXRmb3JtIG51bWJlciBhcyBhc3NpZ25lZCBieSB0aGUKLSAgICAgIGFyY2hpdGVjdHVyZSBtYWludGFpbmVycwotCiAgIFJlY29tbWVuZGVkIHByb3BlcnRpZXM6CiAKICAgICAtIGJvb3RhcmdzIDogVGhpcyB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5nIGlzIHBhc3NlZCBhcyB0aGUga2VybmVsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NoL25ldy1tYWNoaW5lLnR4dCBiL0RvY3VtZW50YXRpb24vc2gvbmV3LW1hY2hpbmUudHh0CmluZGV4IDczOTg4ZTAuLjU0ODJiZjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2gvbmV3LW1hY2hpbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2gvbmV3LW1hY2hpbmUudHh0CkBAIC0xNyw3ICsxNyw3IEBACiBpbiBhcmNoL3NoL2tlcm5lbC8gZGlyZWN0bHksIHdpdGggYm9hcmQtc3BlY2lmaWMgaGVhZGVycyBlbmRpbmcgdXAgaW4KIGluY2x1ZGUvYXNtLXNoLy4gRm9yIHRoZSBuZXcga2VybmVsLCB0aGluZ3MgYXJlIGJyb2tlbiBvdXQgYnkgYm9hcmQgdHlwZSwKIGNvbXBhbmlvbiBjaGlwIHR5cGUsIGFuZCBDUFUgdHlwZS4gTG9va2luZyBhdCBhIHRyZWUgdmlldyBvZiB0aGlzIGRpcmVjdG9yeQotaGVpcmFyY2h5IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzoKK2hpZXJhcmNoeSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CiAKIEJvYXJkLXNwZWNpZmljIGNvZGU6CiAKQEAgLTEwOCw3ICsxMDgsNyBAQAogbWVtYmVyIGl0c2VsZi4KIAogVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB0aGF0IGVhY2ggYm9hcmQgaXMgcmVxdWlyZWQgdG8gaGF2ZSwgYm90aCBpbiB0aGUKLWFyY2gvc2gvYm9hcmRzIGFuZCB0aGUgaW5jbHVkZS9hc20tc2gvIGhlaXJhcmNoeS4gSW4gb3JkZXIgdG8gYmV0dGVyCithcmNoL3NoL2JvYXJkcyBhbmQgdGhlIGluY2x1ZGUvYXNtLXNoLyBoaWVyYXJjaHkuIEluIG9yZGVyIHRvIGJldHRlcgogZXhwbGFpbiB0aGlzLCB3ZSB1c2Ugc29tZSBleGFtcGxlcyBmb3IgYWRkaW5nIGFuIGltYWdpbmFyeSBib2FyZC4gRm9yCiBzZXR1cCBjb2RlLCB3ZSdyZSByZXF1aXJlZCBhdCB0aGUgdmVyeSBsZWFzdCB0byBwcm92aWRlIGRlZmluaXRpb25zIGZvcgogZ2V0X3N5c3RlbV90eXBlKCkgYW5kIHBsYXRmb3JtX3NldHVwKCkuIEZvciBvdXIgaW1hZ2luYXJ5IGJvYXJkLCB0aGlzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvbnktbGFwdG9wLnR4dCBiL0RvY3VtZW50YXRpb24vc29ueS1sYXB0b3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZDI2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvbnktbGFwdG9wLnR4dApAQCAtMCwwICsxLDEwNiBAQAorU29ueSBOb3RlYm9vayBDb250cm9sIERyaXZlciAoU05DKSBSZWFkbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQ29weXJpZ2h0IChDKSAyMDA0LSAyMDA1IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CisJQ29weXJpZ2h0IChDKSAyMDA3IE1hdHRpYSBEb25naWxpIDxtYWxhdHRpYUBsaW51eC5pdD4KKworVGhpcyBtaW5pLWRyaXZlciBkcml2ZXMgdGhlIFNOQyBkZXZpY2UgcHJlc2VudCBpbiB0aGUgQUNQSSBCSU9TIG9mCit0aGUgU29ueSBWYWlvIGxhcHRvcHMuCisKK0l0IGdpdmVzIGFjY2VzcyB0byBzb21lIGV4dHJhIGxhcHRvcCBmdW5jdGlvbmFsaXRpZXMuIEluIGl0cyBjdXJyZW50Citmb3JtLCB0aGlzIGRyaXZlciBsZXQgdGhlIHVzZXIgc2V0IG9yIHF1ZXJ5IHRoZSBzY3JlZW4gYnJpZ2h0bmVzcwordGhyb3VnaCB0aGUgYmFja2xpZ2h0IHN1YnN5c3RlbSBhbmQgcmVtb3ZlL2FwcGx5IHBvd2VyIHRvIHNvbWUgZGV2aWNlcy4KKworQmFja2xpZ2h0IGNvbnRyb2w6CistLS0tLS0tLS0tLS0tLS0tLS0KK0lmIHlvdXIgbGFwdG9wIG1vZGVsIHN1cHBvcnRzIGl0LCB5b3Ugd2lsbCBmaW5kIHN5c2ZzIGZpbGVzIGluIHRoZQorL3N5cy9jbGFzcy9iYWNrbGlnaHQvc29ueS8KK2RpcmVjdG9yeS4gWW91IHdpbGwgYmUgYWJsZSB0byBxdWVyeSBhbmQgc2V0IHRoZSBjdXJyZW50IHNjcmVlbgorYnJpZ2h0bmVzczoKKwlicmlnaHRuZXNzCQlnZXQvc2V0IHNjcmVlbiBicmlnaHRuZXNzIChhbiBpdGVnZXIKKwkJCQliZXR3ZWVuIDAgYW5kIDcpCisJYWN0dWFsX2JyaWdodG5lc3MJcmVhZGluZyBmcm9tIHRoaXMgZmlsZSB3aWxsIHF1ZXJ5IHRoZSBIVworCQkJCXRvIGdldCByZWFsIGJyaWdodG5lc3MgdmFsdWUKKwltYXhfYnJpZ2h0bmVzcwkJdGhlIG1heGltdW0gYnJpZ2h0bmVzcyB2YWx1ZQorCisKK1BsYXRmb3JtIHNwZWNpZmljOgorLS0tLS0tLS0tLS0tLS0tLS0tCitMb2FkaW5nIHRoZSBzb255LWxhcHRvcCBtb2R1bGUgd2lsbCBjcmVhdGUgYQorL3N5cy9kZXZpY2VzL3BsYXRmb3JtL3NvbnktbGFwdG9wLworZGlyZWN0b3J5IHBvcHVsYXRlZCB3aXRoIHNvbWUgZmlsZXMuCisKK1lvdSB0aGVuIHJlYWQvd3JpdGUgaW50ZWdlciB2YWx1ZXMgZnJvbS90byB0aG9zZSBmaWxlcyBieSB1c2luZworc3RhbmRhcmQgVU5JWCB0b29scy4KKworVGhlIGZpbGVzIGFyZToKKwlicmlnaHRuZXNzX2RlZmF1bHQJc2NyZWVuIGJyaWdodG5lc3Mgd2hpY2ggd2lsbCBiZSBzZXQKKwkJCQl3aGVuIHRoZSBsYXB0b3Agd2lsbCBiZSByZWJvb3RlZAorCWNkcG93ZXIJCQlwb3dlciBvbi9vZmYgdGhlIGludGVybmFsIENEIGRyaXZlCisJYXVkaW9wb3dlcgkJcG93ZXIgb24vb2ZmIHRoZSBpbnRlcm5hbCBzb3VuZCBjYXJkCisJbGFucG93ZXIJCXBvd2VyIG9uL29mZiB0aGUgaW50ZXJuYWwgZXRoZXJuZXQgY2FyZAorCQkJCShvbmx5IGluIGRlYnVnIG1vZGUpCisKK05vdGUgdGhhdCBzb21lIGZpbGVzIG1heSBiZSBtaXNzaW5nIGlmIHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQKK2J5IHlvdXIgcGFydGljdWxhciBsYXB0b3AgbW9kZWwuCisKK0V4YW1wbGUgdXNhZ2U6CisJIyBlY2hvICIxIiA+IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9zb255LWxhcHRvcC9icmlnaHRuZXNzX2RlZmF1bHQKK3NldHMgdGhlIGxvd2VzdCBzY3JlZW4gYnJpZ2h0bmVzcyBmb3IgdGhlIG5leHQgYW5kIGxhdGVyIHJlYm9vdHMsCisJIyBlY2hvICI4IiA+IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9zb255LWxhcHRvcC9icmlnaHRuZXNzX2RlZmF1bHQKK3NldHMgdGhlIGhpZ2hlc3Qgc2NyZWVuIGJyaWdodG5lc3MgZm9yIHRoZSBuZXh0IGFuZCBsYXRlciByZWJvb3RzLAorCSMgY2F0IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9zb255LWxhcHRvcC9icmlnaHRuZXNzX2RlZmF1bHQKK3JldHJpZXZlcyB0aGUgdmFsdWUuCisKKwkjIGVjaG8gIjAiID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL3NvbnktbGFwdG9wL2F1ZGlvcG93ZXIKK3Bvd2VycyBvZmYgdGhlIHNvdW5kIGNhcmQsCisJIyBlY2hvICIxIiA+IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9zb255LWxhcHRvcC9hdWRpb3Bvd2VyCitwb3dlcnMgb24gdGhlIHNvdW5kIGNhcmQuCisKK0RldmVsb3BtZW50OgorLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIGhlbHAgd2l0aCB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBkcml2ZXIgKGFuZAoreW91IGFyZSBub3QgYWZyYWlkIG9mIGFueSBzaWRlIGVmZmVjdHMgZG9pbmcgc3RyYW5nZSB0aGluZ3Mgd2l0aAoreW91ciBBQ1BJIEJJT1MgY291bGQgaGF2ZSBvbiB5b3VyIGxhcHRvcCksIGxvYWQgdGhlIGRyaXZlciBhbmQKK3Bhc3MgdGhlIG9wdGlvbiAnZGVidWc9MScuCisKK1JFUEVBVDogRE9OJ1QgRE8gVEhJUyBJRiBZT1UgRE9OJ1QgTElLRSBSSVNLWSBCVVNJTkVTUy4KKworSW4geW91ciBrZXJuZWwgbG9ncyB5b3Ugd2lsbCBmaW5kIHRoZSBsaXN0IG9mIGFsbCBBQ1BJIG1ldGhvZHMKK3RoZSBTTkMgZGV2aWNlIGhhcyBvbiB5b3VyIGxhcHRvcC4gWW91IGNhbiBzZWUgdGhlIEdDRFAvR0NEUCBtZXRob2RzCit1c2VkIHRvIHB3ZXIgb24vb2ZmIHRoZSBDRCBkcml2ZSwgYnV0IHRoZXJlIGFyZSBvdGhlcnMuCisKK0kgSEFWRSBOTyBJREVBIFdIQVQgVEhPU0UgTUVUSE9EUyBETy4KKworVGhlIHNvbnktbGFwdG9wIGRyaXZlciBjcmVhdGVzLCBmb3Igc29tZSBvZiB0aG9zZSBtZXRob2RzICh0aGUgbW9zdAorY3VycmVudCBvbmVzIGZvdW5kIG9uIHNldmVyYWwgVmFpbyBtb2RlbHMpLCBhbiBlbnRyeSB1bmRlcgorL3N5cy9kZXZpY2VzL3BsYXRmb3JtL3NvbnktbGFwdG9wLCBqdXN0IGxpa2UgdGhlICdjZHBvd2VyJyBvbmUuCitZb3UgY2FuIGNyZWF0ZSBvdGhlciBlbnRyaWVzIGNvcnJlc3BvbmRpbmcgdG8geW91ciBvd24gbGFwdG9wIG1ldGhvZHMgYnkKK2Z1cnRoZXIgZWRpdGluZyB0aGUgc291cmNlIChzZWUgdGhlICdzb255X2FjcGlfdmFsdWVzJyB0YWJsZSwgYW5kIGFkZCBhIG5ldworZW50cnkgdG8gdGhpcyB0YWJsZSB3aXRoIHlvdXIgZ2V0L3NldCBtZXRob2QgbmFtZXMgdXNpbmcgdGhlCitIQU5ETEVfTkFNRVMgbWFjcm8pLgorCitZb3VyIG1pc3Npb24sIHNob3VsZCB5b3UgYWNjZXB0IGl0LCBpcyB0byB0cnkgZmluZGluZyBvdXQgd2hhdAordGhvc2UgZW50cmllcyBhcmUgZm9yLCBieSByZWFkaW5nL3dyaXRpbmcgcmFuZG9tIHZhbHVlcyBmcm9tL3RvIHRob3NlCitmaWxlcyBhbmQgZmluZCBvdXQgd2hhdCBpcyB0aGUgaW1wYWN0IG9uIHlvdXIgbGFwdG9wLgorCitTaG91bGQgeW91IGZpbmQgYW55dGhpbmcgaW50ZXJlc3RpbmcsIHBsZWFzZSByZXBvcnQgaXQgYmFjayB0byBtZSwKK0kgd2lsbCBub3QgZGlzYXZvdyBhbGwga25vd2xlZGdlIG9mIHlvdXIgYWN0aW9ucyA6KQorCitCdWdzL0xpbWl0YXRpb25zOgorLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGlzIGRyaXZlciBpcyBub3QgYmFzZWQgb24gb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBmcm9tIFNvbnkKKyAgKGJlY2F1c2UgdGhlcmUgaXMgbm9uZSksIHNvIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGlzIGRyaXZlcgorICB3aWxsIHdvcmsgYXQgYWxsLCBvciBkbyB0aGUgcmlnaHQgdGhpbmcuIEFsdGhvdWdoIHRoaXMgaGFzbid0CisgIGhhcHBlbmVkIHRvIG1lLCB0aGlzIGRyaXZlciBjb3VsZCBkbyB2ZXJ5IGJhZCB0aGluZ3MgdG8geW91cgorICBsYXB0b3AsIGluY2x1ZGluZyBwZXJtYW5lbnQgZGFtYWdlLgorCisqIFRoZSBzb255LWxhcHRvcCBhbmQgc29ueXBpIGRyaXZlcnMgZG8gbm90IGludGVyYWN0IGF0IGFsbC4gSW4gdGhlCisgIGZ1dHVyZSwgc29ueXBpIGNvdWxkIHVzZSBzb255LWxhcHRvcCB0byBkbyAocGFydCBvZikgaXRzIGJ1c2luZXNzLgorCisqIHNwaWNjdHJsLCB3aGljaCBpcyB0aGUgdXNlcnNwYWNlIHRvb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZQorICBzb255cGkgZHJpdmVyICh0aHJvdWdoIC9kZXYvc29ueXBpKSBkb2VzIG5vdCB0cnkgdG8gdXNlIHRoZQorICBzb255LWxhcHRvcCBkcml2ZXIuIEluIHRoZSBmdXR1cmUsIHNwaWNjdHJsIGNvdWxkIHRyeSBzb255cGkgZmlyc3QsCisgIGFuZCBpZiBpdCBpc24ndCBwcmVzZW50LCB0cnkgc29ueS1sYXB0b3AgaW5zdGVhZC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CmluZGV4IDRlZmE0NjQuLmZjMmZlOWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKQEAgLTEyNiw3ICsxMjYsNyBAQAogMTI1IC0+IE1BVFJJWCBWaXNpb24gU2lnbWEtU1EKIDEyNiAtPiBNQVRSSVggVmlzaW9uIFNpZ21hLVNMQwogMTI3IC0+IEFQQUMgVmlld2NvbXAgODc4KEFNQVgpCi0xMjggLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVCBMaXRlICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmRiMTBdCisxMjggLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVCBMaXRlICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmRiMTAsMThhYzpkYjExXQogMTI5IC0+IFYtR2VhciBNeVZDRAogMTMwIC0+IFN1cGVyIFRWIFR1bmVyCiAxMzEgLT4gVGliZXQgU3lzdGVtcyAnUHJvZ3Jlc3MgRFZSJyBDUzE2CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggZjYyMDFjYy4uYTEyMjQ2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMTA0LDMgKzEwNCw2IEBACiAxMDMgLT4gQ29tcHJvIFZpZGVvbWF0ZSBEVkItVDIwMEEKIDEwNCAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTExMCBEVkItVC9IeWJyaWQgICAgIFswMDcwOjY3MDFdCiAxMDUgLT4gVGVycmF0ZWMgQ2luZXJneSBIVCBQQ01DSUEgICAgICAgICAgICAgICBbMTUzYjoxMTcyXQorMTA2IC0+IEVuY29yZSBFTkxUViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzExMzE6MjM0MiwxMTMxOjIzNDEsMzAxNjoyMzQ0XQorMTA3IC0+IEVuY29yZSBFTkxUVi1GTSAgICAgICAgICAgICAgICAgICAgICAgICAgWzExMzE6MjMwZl0KKzEwOCAtPiBUZXJyYXRlYyBDaW5lcmd5IEhUIFBDSSAgICAgICAgICAgICAgICAgIFsxNTNiOjExNzVdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NRY2FtLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0CmluZGV4IGFkZTg2NTEuLjA0OTg2ZWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0CkBAIC0xOTcsMTAgKzE5NywxMCBAQAogUE9SVCBTVVBQT1JUIHNlY3Rpb25zCiAKIFRoZSB2aWRlbzRsaW51eCBwYWdlOgotICBodHRwOi8vcm9hZHJ1bm5lci5zd2Fuc2VhLmxpbnV4Lm9yZy51ay92NGwuc2h0bWwKKyAgaHR0cDovL2xpbnV4dHYub3JnCiAKLVRoZSB2aWRlbzRsaW51eDIgcGFnZToKLSAgaHR0cDovL21pbGxlbm5pdW0uZGlhZHMuY29tL2JkaXJrcy92NGwyLmh0bQorVGhlIFY0TDIgQVBJIHNwZWM6CisgIGh0dHA6Ly92NGwyc3BlYy5ieXRlc2V4Lm9yZy8KIAogU29tZSB3ZWIgcGFnZXMgYWJvdXQgdGhlIHF1aWNrY2FtczoKICAgIGh0dHA6Ly93d3cuZGtmei1oZWlkZWxiZXJnLmRlL01hY3JvbW9sL3dlZGVtYW5uL21pbmktSE9XVE8tY3FjYW0uaHRtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KaW5kZXggZGViMjE4Zi4uODVjNTc1YWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgpAQCAtMzM5LDkgKzMzOSw5IEBACiAoYWxzbyBzZWUgYmVsb3cpCiAKIEluZm9ybWF0aW9uIC0gdmlkZW80bGludXgyOgotaHR0cDovL3d3dy50aGVkaXJrcy5vcmcvdjRsMi8KK2h0dHA6Ly9saW51eHR2Lm9yZworaHR0cDovL3Y0bDJzcGVjLmJ5dGVzZXgub3JnLwogL3Vzci9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCi1odHRwOi8vd3d3LmJ5dGVzZXgub3JnL3Y0bC8KIAogTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmlkZW80bGludXgvbWpwZWcgZXh0ZW5zaW9ucywgYnkgU2VyZ3VlaQogTWlyaWRvbm92aSBhbmQgUmFpbmVyIEpvaGFubmk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMKaW5kZXggYmI3YzJjYS4uNWVmNzU3OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucwpAQCAtNTcsNyArNTcsNyBAQAogCQlpMmNfdWRlbGF5PSAgICAgQWxsb3cgcmVkdWNlIEkyQyBzcGVlZC4gRGVmYXVsdCBpcyA1IHVzZWNzCiAJCQkJKG1lYW5pbmcgNjYsNjcgS2JwcykuIFRoZSBkZWZhdWx0IGlzIHRoZQogCQkJCW1heGltdW0gc3VwcG9ydGVkIHNwZWVkIGJ5IGtlcm5lbCBiaXRiYW5nCi0JCQkJYWxnb3JpdG0uIFlvdSBtYXkgdXNlIGxvd2VyIG51bWJlcnMsIGlmIEkyQworCQkJCWFsZ29yaXRobS4gWW91IG1heSB1c2UgbG93ZXIgbnVtYmVycywgaWYgSTJDCiAJCQkJbWVzc2FnZXMgYXJlIGxvc3QgKDE2IGlzIGtub3duIHRvIHdvcmsgb24KIAkJCQlhbGwgc3VwcG9ydGVkIGNhcmRzKS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L2Z3LWRlY29kZXItYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9mdy1kZWNvZGVyLWFwaS50eHQKaW5kZXggNzhiZjVmMi4uOGMzMTdiNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L2Z3LWRlY29kZXItYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctZGVjb2Rlci1hcGkudHh0CkBAIC0yMSw3ICsyMSw3IEBACiAJMCBiYXNlZCBmcmFtZSBudW1iZXIgaW4gR09QIHRvIGJlZ2luIHBsYXliYWNrIGZyb20uCiBQYXJhbVsxXQogCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIG11dGVkIGF1ZGlvIGZyYW1lcyB0byBwbGF5IGJlZm9yZSBub3JtYWwKLQlhdWRpbyByZXN1bWVzLgorCWF1ZGlvIHJlc3VtZXMuIChUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgZmlybXdhcmUsIGxlYXZlIGF0IDApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzIsNiArMzIsMTAgQEAKIAlwbGF5YmFjayBzdG9wcyBhdCBzcGVjaWZpZWQgUFRTLgogUGFyYW1bMF0KIAlEaXNwbGF5IDA9bGFzdCBmcmFtZSwgMT1ibGFjaworCU5vdGU6IHRoaXMgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5LCBzbyBpZiB5b3Ugd2FudCB0byB3YWl0IGZvciBhIFBUUywKKwl0aGVuIHVzZSAnMCcsIG90aGVyd2lzZSB0aGUgc2NyZWVuIGdvZXMgdG8gYmxhY2sgYXQgb25jZS4KKwlZb3UgY2FuIGNhbGwgdGhpcyBsYXRlciAoZXZlbiBpZiB0aGVyZSBpcyBubyBwbGF5YmFjaykgd2l0aCBhIDEgdmFsdWUKKwl0byBzZXQgdGhlIHNjcmVlbiB0byBibGFjay4KIFBhcmFtWzFdCiAJUFRTIGxvdwogUGFyYW1bMl0KQEAgLTYwLDggKzY0LDEyIEBACiAJICAgIDMxICAgU3BlZWQ6CiAJCSAgICAgJzAnIHNsb3cKIAkJICAgICAnMScgZmFzdAorCU5vdGU6IG4gaXMgbGltaXRlZCB0byAyLiBBbnl0aGluZyBoaWdoZXIgZG9lcyBub3QgcmVzdWx0IGluCisJZmFzdGVyIHBsYXliYWNrLiBJbnN0ZWFkIHRoZSBob3N0IHNob3VsZCBzdGFydCBkcm9wcGluZyBmcmFtZXMuCiBQYXJhbVsxXQogCURpcmVjdGlvbjogMD1mb3J3YXJkLCAxPXJldmVyc2UKKwlOb3RlOiB0byBtYWtlIHJldmVyc2UgcGxheWJhY2sgd29yayB5b3UgaGF2ZSB0byB3cml0ZSBmdWxsIEdPUHMgaW4KKwlyZXZlcnNlIG9yZGVyLgogUGFyYW1bMl0KIAlQaWN0dXJlIG1hc2s6CiAJICAgIDE9SSBmcmFtZXMKQEAgLTY5LDEzICs3NywxNiBAQAogCSAgICA3PUksIFAsIEIgZnJhbWVzCiBQYXJhbVszXQogCUIgZnJhbWVzIHBlciBHT1AgKGZvciByZXZlcnNlIHBsYXkgb25seSkKKwlOb3RlOiBmb3IgcmV2ZXJzZSBwbGF5YmFjayB0aGUgUGljdHVyZSBNYXNrIHNob3VsZCBiZSBzZXQgdG8gSSBvciBJLCBQLgorCUFkZGluZyBCIGZyYW1lcyB0byB0aGUgbWFzayB3aWxsIHJlc3VsdCBpbiBjb3JydXB0IHZpZGVvLiBUaGlzIGZpZWxkCisJaGFzIHRvIGJlIHNldCB0byB0aGUgY29ycmVjdCB2YWx1ZSBpbiBvcmRlciB0byBrZWVwIHRoZSB0aW1pbmcgY29ycmVjdC4KIFBhcmFtWzRdCiAJTXV0ZSBhdWRpbzogMD1kaXNhYmxlLCAxPWVuYWJsZQogUGFyYW1bNV0KIAlEaXNwbGF5IDA9ZnJhbWUsIDE9ZmllbGQKIFBhcmFtWzZdCiAJU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgbXV0ZWQgYXVkaW8gZnJhbWVzIHRvIHBsYXkgYmVmb3JlIG5vcm1hbCBhdWRpbwotCXJlc3VtZXMuCisJcmVzdW1lcy4gKE5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgZmlybXdhcmUsIGxlYXZlIGF0IDApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjEyLDYgKzIyMyw3IEBACiAJU2VsZWN0IGF1ZGlvIG1vZGUKIFBhcmFtWzBdCiAJRHVhbCBtb25vIG1vZGUgYWN0aW9uCisJICAgIDA9U3RlcmVvLCAxPUxlZnQsIDI9UmlnaHQsIDM9TW9ubywgND1Td2FwLCAtMT1VbmNoYW5nZWQKIFBhcmFtWzFdCiAJU3RlcmVvIG1vZGUgYWN0aW9uOgogCSAgICAwPVN0ZXJlbywgMT1MZWZ0LCAyPVJpZ2h0LCAzPU1vbm8sIDQ9U3dhcCwgLTE9VW5jaGFuZ2VkCkBAIC0yMjQsNyArMjM2LDEwIEBACiAJU2V0dXAgZmlybXdhcmUgdG8gbm90aWZ5IHRoZSBob3N0IGFib3V0IGEgcGFydGljdWxhciBldmVudC4KIAlDb3VudGVycGFydCB0byBBUEkgMHhENQogUGFyYW1bMF0KLQlFdmVudDogMD1BdWRpbyBtb2RlIGNoYW5nZSBiZXR3ZWVuIHN0ZXJlbyBhbmQgZHVhbCBjaGFubmVsCisJRXZlbnQ6IDA9QXVkaW8gbW9kZSBjaGFuZ2UgYmV0d2VlbiBtb25vLCAoam9pbnQpIHN0ZXJlbyBhbmQgZHVhbCBjaGFubmVsLgorCUV2ZW50OiAzPURlY29kZXIgc3RhcnRlZAorCUV2ZW50OiA0PVVua25vd246IGdvZXMgb2ZmIDEwLTE1IHRpbWVzIHBlciBzZWNvbmQgd2hpbGUgZGVjb2RpbmcuCisJRXZlbnQ6IDU9U29tZSBzeW5jIGV2ZW50OiBnb2VzIG9mZiBvbmNlIHBlciBmcmFtZS4KIFBhcmFtWzFdCiAJTm90aWZpY2F0aW9uIDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZAogUGFyYW1bMl0KQEAgLTI3Myw0MyArMjg4LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1OYW1lIAlDWDIzNDFYX0RFQ19TRVRfQVVESU9fT1VUUFVUCi1FbnVtIAkyNy8weDFCCi1EZXNjcmlwdGlvbgotCVNlbGVjdCBhdWRpbyBvdXRwdXQgZm9ybWF0Ci1QYXJhbVswXQotCUJpdG1hc2s6Ci0JICAgICAwOjEgIERhdGEgc2l6ZToKLQkJICAgICAgJzAwJyAxNiBiaXQKLQkJICAgICAgJzAxJyAyMCBiaXQKLQkJICAgICAgJzEwJyAyNCBiaXQKLQkgICAgIDI6NyAgVW51c2VkCi0JICAgICA4OjkgIE1vZGU6Ci0JCSAgICAgICcwMCcgMiBjaGFubmVscwotCQkgICAgICAnMDEnIDQgY2hhbm5lbHMKLQkJICAgICAgJzEwJyA2IGNoYW5uZWxzCi0JCSAgICAgICcxMScgNiBjaGFubmVscyB3aXRoIG9uZSBsaW5lIGRhdGEgbW9kZQotCQkJICAgKGZvciBsZWZ0IGp1c3RpZmllZCBNU0IgZmlyc3QgbW9kZSwgMjAgYml0IG9ubHkpCi0JICAgIDEwOjExIFVudXNlZAotCSAgICAxMjoxMyBDaGFubmVsIGZvcm1hdDoKLQkJICAgICAgJzAwJyByaWdodCBqdXN0aWZpZWQgTVNCIGZpcnN0IG1vZGUKLQkJICAgICAgJzAxJyBsZWZ0IGp1c3RpZmllZCBNU0IgZmlyc3QgbW9kZQotCQkgICAgICAnMTAnIEkyUyBtb2RlCi0JICAgIDE0OjE1IFVudXNlZAotCSAgICAxNjoyMSBSaWdodCBqdXN0aWZ5IGJpdCBjb3VudAotCSAgICAyMjozMSBVbnVzZWQKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1OYW1lIAlDWDIzNDFYX0RFQ19TRVRfQVZfREVMQVkKLUVudW0gCTI4LzB4MUMKLURlc2NyaXB0aW9uCi0JU2V0IGF1ZGlvL3ZpZGVvIGRlbGF5IGluIDkwS2h6IHRpY2tzCi1QYXJhbVswXQotCTA9QS9WIGluIHN5bmMsIG5lZ2F0aXZlPWF1ZGlvIGxhZ3MsIHBvc2l0aXZlPXZpZGVvIGxhZ3MKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBOYW1lIAlDWDIzNDFYX0RFQ19TRVRfUFJFQlVGRkVSSU5HCiBFbnVtIAkzMC8weDFFCiBEZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L2Z3LWRlY29kZXItcmVncy50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctZGVjb2Rlci1yZWdzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjIzNjZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L2Z3LWRlY29kZXItcmVncy50eHQKQEAgLTAsMCArMSw4MTUgQEAKK1BWUjM1MCBWaWRlbyBkZWNvZGVyIHJlZ2lzdGVycyAweDAyMDAyODAwIC0+IDB4MDIwMDJCMDAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBsaXN0IGhhcyBiZWVuIHdvcmtlZCBvdXQgdGhyb3VnaCB0cmlhbCBhbmQgZXJyb3IuIFRoZXJlIHdpbGwgYmUgbWlzdGFrZXMKK2FuZCBvbWlzc2lvbnMuIFNvbWUgcmVnaXN0ZXJzIGhhdmUgbm8gb2J2aW91cyBlZmZlY3Qgc28gaXQncyBoYXJkIHRvIHNheSB3aGF0Cit0aGV5IGRvLCB3aGlsZSBvdGhlcnMgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLCBvciByZXF1aXJlIGEgY2VydGFpbiBsb2FkCitzZXF1ZW5jZS4gSG9yaXpvbnRhbCBmaWx0ZXIgc2V0dXAgaXMgb25lIGV4YW1wbGUsIHdpdGggc2l4IHJlZ2lzdGVycyB3b3JraW5nCitpbiB1bmlzb24gYW5kIHJlcXVpcmluZyBhIGNlcnRhaW4gbG9hZCBzZXF1ZW5jZSB0byBjb3JyZWN0bHkgY29uZmlndXJlLiBUaGUKK2luZGV4ZWQgY29sb3VyIHBhbGV0dGUgaXMgbXVjaCBlYXNpZXIgdG8gc2V0IGF0IGp1c3QgdHdvIHJlZ2lzdGVycywgYnV0IGFnYWluCitpdCByZXF1aXJlcyBhIGNlcnRhaW4gbG9hZCBzZXF1ZW5jZS4KKworU29tZSByZWdpc3RlcnMgYXJlIGZ1c3N5IGFib3V0IHdoYXQgdGhleSBhcmUgc2V0IHRvLiBMb2FkIGluIGEgYmFkIHZhbHVlICYgdGhlCitkZWNvZGVyIHdpbGwgZmFpbC4gQSBmaXJtd2FyZSByZWxvYWQgd2lsbCBvZnRlbiByZWNvdmVyLCBidXQgc29tZXRpbWVzIGEgcmVzZXQKK2lzIHJlcXVpcmVkLiBGb3IgcmVnaXN0ZXJzIGNvbnRhaW5pbmcgc2l6ZSBpbmZvcm1hdGlvbiwgc2V0dGluZyB0aGVtIHRvIDAgaXMKK2dlbmVyYWxseSBhIGJhZCBpZGVhLiBGb3Igb3RoZXIgY29udHJvbCByZWdpc3RlcnMgaS5lLiAyODc4LCB5b3UnbGwgb25seSBmaW5kCitvdXQgd2hhdCB2YWx1ZXMgYXJlIGJhZCB3aGVuIGl0IGhhbmdzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjgwMAorICAgICAgYml0IDAKKwlEZWNvZGVyIGVuYWJsZQorCSAgMCA9IGRpc2FibGUKKwkgIDEgPSBlbmFibGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyODA0CisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyIGhvcml6b250YWwgWSBhbGlhcyByZWdpc3RlciAxCistLS0tLS0tLS0tLS0tLS0KKzI4MDgKKyAgICAgIGJpdHMgMDozMQorCURlY29kZXIgaG9yaXpvbnRhbCBZIGFsaWFzIHJlZ2lzdGVyIDIKKy0tLS0tLS0tLS0tLS0tLQorMjgwQworICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBob3Jpem9udGFsIFkgYWxpYXMgcmVnaXN0ZXIgMworLS0tLS0tLS0tLS0tLS0tCisyODEwCisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyIGhvcml6b250YWwgWSBhbGlhcyByZWdpc3RlciA0CistLS0tLS0tLS0tLS0tLS0KKzI4MTQKKyAgICAgIGJpdHMgMDozMQorCURlY29kZXIgaG9yaXpvbnRhbCBZIGFsaWFzIHJlZ2lzdGVyIDUKKy0tLS0tLS0tLS0tLS0tLQorMjgxOAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBob3Jpem9udGFsIFkgYWxpYXMgdHJpZ2dlcgorCisgICAgIFRoZXNlIHNpeCByZWdpc3RlcnMgY29udHJvbCB0aGUgaG9yaXpvbnRhbCBhbGlhc2luZyBmaWx0ZXIgZm9yIHRoZSBZIHBsYW5lLgorICAgICBUaGUgZmlyc3QgZml2ZSByZWdpc3RlcnMgbXVzdCBhbGwgYmUgbG9hZGVkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIHRyaWdnZXIKKyAgICAgKDI4MTgpLCBhcyB0aGlzIHJlZ2lzdGVyIGFjdHVhbGx5IGNsb2NrcyB0aGUgZGF0YSB0aHJvdWdoIGZvciB0aGUgZmlyc3QKKyAgICAgZml2ZS4KKworICAgICBUbyBjb3JyZWN0bHkgcHJvZ3JhbSBzZXQgdGhlIGZpbHRlciwgdGhpcyB3aG9sZSBwcm9jZWR1cmUgbXVzdCBiZSBkb25lIDE2CisgICAgIHRpbWVzLiBUaGUgYWN0dWFsIHJlZ2lzdGVyIGNvbnRlbnRzIGFyZSBjb3BpZWQgZnJvbSBhIGxvb2t1cC10YWJsZSBpbiB0aGUKKyAgICAgZmlybXdhcmUgd2hpY2ggY29udGFpbnMgNCBkaWZmZXJlbnQgZmlsdGVyIHNldHRpbmdzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjgxQworICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBob3Jpem9udGFsIFVWIGFsaWFzIHJlZ2lzdGVyIDEKKy0tLS0tLS0tLS0tLS0tLQorMjgyMAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBob3Jpem9udGFsIFVWIGFsaWFzIHJlZ2lzdGVyIDIKKy0tLS0tLS0tLS0tLS0tLQorMjgyNAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBob3Jpem9udGFsIFVWIGFsaWFzIHJlZ2lzdGVyIDMKKy0tLS0tLS0tLS0tLS0tLQorMjgyOAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBob3Jpem9udGFsIFVWIGFsaWFzIHJlZ2lzdGVyIDQKKy0tLS0tLS0tLS0tLS0tLQorMjgyQworICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBob3Jpem9udGFsIFVWIGFsaWFzIHJlZ2lzdGVyIDUKKy0tLS0tLS0tLS0tLS0tLQorMjgzMAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBob3Jpem9udGFsIFVWIGFsaWFzIHRyaWdnZXIKKworICAgICBUaGVzZSBzaXggcmVnaXN0ZXJzIGNvbnRyb2wgdGhlIGhvcml6b250YWwgYWxpYXNpbmcgZm9yIHRoZSBVViBwbGFuZS4KKyAgICAgT3BlcmF0aW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBZIGZpbHRlciwgd2l0aCAyODMwIGJlaW5nIHRoZSB0cmlnZ2VyCisgICAgIHJlZ2lzdGVyLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjgzNAorICAgICAgYml0cyAwOjE1CisJRGVjb2RlciBZIHNvdXJjZSB3aWR0aCBpbiBwaXhlbHMKKworICAgICAgYml0cyAxNjozMQorCURlY29kZXIgWSBkZXN0aW5hdGlvbiB3aWR0aCBpbiBwaXhlbHMKKy0tLS0tLS0tLS0tLS0tLQorMjgzOAorICAgICAgYml0cyAwOjE1CisJRGVjb2RlciBVViBzb3VyY2Ugd2lkdGggaW4gcGl4ZWxzCisKKyAgICAgIGJpdHMgMTY6MzEKKwlEZWNvZGVyIFVWIGRlc3RpbmF0aW9uIHdpZHRoIGluIHBpeGVscworCisgICAgIE5PVEU6IEZvciBib3RoIHJlZ2lzdGVycywgdGhlIHJlc3VsdGluZyBpbWFnZSBtdXN0IGJlIGZ1bGx5IHZpc2libGUgb24KKyAgICAgc2NyZWVuLiBJZiB0aGUgaW1hZ2UgZXhjZWVkcyB0aGUgcmlnaHQgZWRnZSBib3RoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisgICAgIHNpemUgbXVzdCBiZSBhZGp1c3RlZCB0byByZWZsZWN0IHRoZSB2aXNpYmxlIHBvcnRpb24uIEZvciB0aGUgc291cmNlIHdpZHRoLAorICAgICB5b3UgbXVzdCB0YWtlIGludG8gYWNjb3VudCB0aGUgc2NhbGluZyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZXcgdmFsdWUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisyODNDCisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyIFkgaG9yaXpvbnRhbCBzY2FsaW5nCisJCSAgICBOb3JtYWxseSA9IFJlZyAyODU0ID4+IDIKKy0tLS0tLS0tLS0tLS0tLQorMjg0MAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciA/PyB1bmtub3duIC0gaG9yaXpvbnRhbCBzY2FsaW5nCisJICBVc3VhbGx5IDB4MDAwODA1MTQKKy0tLS0tLS0tLS0tLS0tLQorMjg0NAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBVViBob3Jpem9udGFsIHNjYWxpbmcKKwkgIE5vcm1hbGx5ID0gUmVnIDI4NTQgPj4gMgorLS0tLS0tLS0tLS0tLS0tCisyODQ4CisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyID8/IHVua25vd24gLSBob3Jpem9udGFsIHNjYWxpbmcKKwkgIFVzdWFsbHkgMHgwMDEwMDUxNAorLS0tLS0tLS0tLS0tLS0tCisyODRDCisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyID8/IHVua25vd24gLSBZIHBsYW5lCisJICBVc3VhbGx5IDB4MDAyMDAwMjAKKy0tLS0tLS0tLS0tLS0tLQorMjg1MAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciA/PyB1bmtub3duIC0gVVYgcGxhbmUKKwkgIFVzdWFsbHkgMHgwMDIwMDAyMAorLS0tLS0tLS0tLS0tLS0tCisyODU0CisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyICdtYXN0ZXInIHZhbHVlIGZvciBob3Jpem9udGFsIHNjYWxpbmcKKy0tLS0tLS0tLS0tLS0tLQorMjg1OAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciA/PyB1bmtub3duCisJICBVc3VhbGx5IDAKKy0tLS0tLS0tLS0tLS0tLQorMjg1QworICAgICAgYml0cyAwOjMxCisJRGVjb2RlciA/PyB1bmtub3duCisJICBOb3JtYWxseSA9IFJlZyAyODU0ID4+IDEKKy0tLS0tLS0tLS0tLS0tLQorMjg2MAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciA/PyB1bmtub3duCisJICBVc3VhbGx5IDAKKy0tLS0tLS0tLS0tLS0tLQorMjg2NAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciA/PyB1bmtub3duCisJICBOb3JtYWxseSA9IFJlZyAyODU0ID4+IDEKKy0tLS0tLS0tLS0tLS0tLQorMjg2OAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciA/PyB1bmtub3duCisJICBVc3VhbGx5IDAKKworICAgICBNb3N0IG9mIHRoZXNlIHJlZ2lzdGVycyBlaXRoZXIgY29udHJvbCBob3Jpem9udGFsIHNjYWxpbmcsIG9yIGFwcGVhciBsaW5rZWQKKyAgICAgdG8gaXQgaW4gc29tZSB3YXkuIFJlZ2lzdGVyIDI4NTQgY29udGFpbnMgdGhlICdtYXN0ZXInIHZhbHVlICYgdGhlIG90aGVyCisgICAgIHJlZ2lzdGVycyBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIHRoYXQgb25lLiBZb3UgbXVzdCBhbHNvIHJlbWVtYmVyIHRvCisgICAgIGNvcnJlY3RseSBzZXQgdGhlIGRpdmlkZXIgaW4gUmVnIDI4NzQuCisKKyAgICAgVG8gZW5sYXJnZToKKwkgICAgIFJlZyAyODU0ID0gKHNvdXJjZV93aWR0aCAqIDB4MDAyMDAwMDApIC8gZGVzdGluYXRpb25fd2lkdGgKKwkgICAgIFJlZyAyODc0ID0gTm8gZGl2aWRlCisKKyAgICAgVG8gcmVkdWNlIGZyb20gZnVsbCBzaXplIGRvd24gdG8gaGFsZiBzaXplOgorCSAgICAgUmVnIDI4NTQgPSAoc291cmNlX3dpZHRoLzIgKiAweDAwMjAwMDAwKSAvIGRlc3RpbmF0aW9uIHdpZHRoCisJICAgICBSZWcgMjg3NCA9IERpdmlkZSBieSAyCisKKyAgICAgVG8gcmVkdWNlIGZyb20gaGFsZiBzaXplIGRvd24gdG8gcXVhcnRlciBzaXplOgorCSAgICAgUmVnIDI4NTQgPSAoc291cmNlX3dpZHRoLzQgKiAweDAwMjAwMDAwKSAvIGRlc3RpbmF0aW9uIHdpZHRoCisJICAgICBSZWcgMjg3NCA9IERpdmlkZSBieSA0CisKKyAgICAgVGhlIHJlc3VsdCBpcyBhbHdheXMgcm91bmRlZCB1cC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI4NkMKKyAgICAgIGJpdHMgMDoxNQorCURlY29kZXIgaG9yaXpvbnRhbCBZIGJ1ZmZlciBvZmZzZXQKKworICAgICAgYml0cyAxNTozMQorCURlY29kZXIgaG9yaXpvbnRhbCBVViBidWZmZXIgb2Zmc2V0CisKKyAgICAgT2Zmc2V0IGludG8gdGhlIHZpZGVvIGltYWdlIGJ1ZmZlci4gSWYgdGhlIG9mZnNldCBpcyBncmFkdWFsbHkgaW5jcmVtZW50ZWQsCisgICAgIHRoZSBvbiBzY3JlZW4gaW1hZ2Ugd2lsbCBtb3ZlIGxlZnQgJiB3cmFwIGFyb3VuZCBoaWdoZXIgdXAgb24gdGhlIHJpZ2h0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjg3MAorICAgICAgYml0cyAwOjE1CisJRGVjb2RlciBob3Jpem9udGFsIFkgb3V0cHV0IG9mZnNldAorCisgICAgICBiaXRzIDE2OjMxCisJRGVjb2RlciBob3Jpem9udGFsIFVWIG91dHB1dCBvZmZzZXQKKworICAgICBPZmZzZXRzIHRoZSBhY3R1YWwgdmlkZW8gb3V0cHV0LiBDb250cm9scyBvdXRwdXQgYWxpZ25tZW50IG9mIHRoZSBZICYgVVYKKyAgICAgcGxhbmVzLiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSwgdGhlIGdyZWF0ZXIgdGhlIHNoaWZ0IHRvIHRoZSBsZWZ0LiBVc2UKKyAgICAgcmVnIDI4OTAgdG8gbW92ZSB0aGUgaW1hZ2UgcmlnaHQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyODc0CisgICAgICBiaXRzIDA6MQorCURlY29kZXIgaG9yaXpvbnRhbCBZIG91dHB1dCBzaXplIGRpdmlkZXIKKwkgIDAwID0gTm8gZGl2aWRlCisJICAwMSA9IERpdmlkZSBieSAyCisJICAxMCA9IERpdmlkZSBieSAzCisKKyAgICAgIGJpdHMgNDo1CisJRGVjb2RlciBob3Jpem9udGFsIFVWIG91dHB1dCBzaXplIGRpdmlkZXIKKwkgIDAwID0gTm8gZGl2aWRlCisJICAwMSA9IERpdmlkZSBieSAyCisJICAxMCA9IERpdmlkZSBieSAzCisKKyAgICAgIGJpdCA4CisJRGVjb2RlciA/PyB1bmtub3duCisJICAwID0gTm9ybWFsCisJICAxID0gQWZmZWN0cyB2aWRlbyBvdXRwdXQgbGV2ZWxzCisKKyAgICAgIGJpdCAxNgorCURlY29kZXIgPz8gdW5rbm93bgorCSAgMCA9IE5vcm1hbAorCSAgMSA9IERpc2FibGUgaG9yaXpvbnRhbCBmaWx0ZXIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI4NzgKKyAgICAgIGJpdCAwCisJPz8gdW5rbm93bgorCisgICAgICBiaXQgMQorCW9zZCBvbi9vZmYKKwkgIDAgPSBvc2Qgb2ZmCisJICAxID0gb3NkIG9uCisKKyAgICAgIGJpdCAyCisJRGVjb2RlciArIG9zZCB2aWRlbyB0aW1pbmcKKwkgIDAgPSBOVFNDCisJICAxID0gUEFMCisKKyAgICAgIGJpdHMgMzo0CisJPz8gdW5rbm93bgorCisgICAgICBiaXQgNQorCURlY29kZXIgKyBvc2QKKwkgIFN3YXBzIHVwcGVyICYgbG93ZXIgZmllbGRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyODdDCisgICAgICBiaXRzIDA6MTAKKwlEZWNvZGVyICYgb3NkID8/IHVua25vd24KKwkgIE1vdmVzIGVudGlyZSBzY3JlZW4gaG9yaXpvbnRhbGx5LiBTdGFydHMgYXQgMHgwMDUgd2l0aCB0aGUgc2NyZWVuCisJICBzaGlmdGVkIGhlYXZpbHkgdG8gdGhlIHJpZ2h0LiBJbmNyZW1lbnRpbmcgaW4gc3RlcHMgb2YgMHgwMDQgd2lsbAorCSAgZ3JhZHVhbGx5IHNoaWZ0IHRoZSBzY3JlZW4gdG8gdGhlIGxlZnQuCisKKyAgICAgIGJpdHMgMTE6MzEKKwk/PyB1bmtub3duCisKKyAgICAgTm9ybWFsbHkgY29udGVudHMgYXJlIDB4MDAxMDExMTEgKE5UU0MpIG9yIDB4MTAxMDExMWQgKFBBTCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI4ODAgIC0tLS0tLS0tICAgID8/IHVua25vd24KKzI4ODQgIC0tLS0tLS0tICAgID8/IHVua25vd24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyODg4CisgICAgICBiaXQgMAorCURlY29kZXIgKyBvc2QgPz8gdW5rbm93bgorCSAgMCA9IE5vcm1hbAorCSAgMSA9IE1pc2FsaWduZWQgZmllbGRzIChDb3JyZWN0YWJsZSB0aHJvdWdoIDI4OUMgJiAyOEE0KQorCisgICAgICBiaXQgNAorCT8/IHVua25vd24KKworICAgICAgYml0IDgKKwk/PyB1bmtub3duCisKKyAgICAgV2FybmluZzogQmFkIHZhbHVlcyB3aWxsIHJlcXVpcmUgYSBmaXJtd2FyZSByZWxvYWQgdG8gcmVjb3Zlci4KKwkJIEtub3duIHRvIGJlIGJhZCBhcmUgMHgwMDAsMHgwMTEsMHgxMDAsMHgxMTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyODhDCisgICAgICBiaXRzIDA6MTUKKwlvc2QgPz8gdW5rbm93bgorCSAgQXBwZWFycyB0byBhZmZlY3QgdGhlIG9zZCBwb3NpdGlvbiBzdGFiaWxpdHkuIFRoZSBoaWdoZXIgdGhlIHZhbHVlIHRoZQorCSAgbW9yZSB1bnN0YWJsZSBpdCBiZWNvbWVzLiBEZWNvZGVyIG91dHB1dCByZW1haW5zIHN0YWJsZS4KKworICAgICAgYml0cyAxNjozMQorCW9zZCA/PyB1bmtub3duCisJICBTYW1lIGFzIGJpdHMgMDoxNQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjg5MAorICAgICAgYml0cyAwOjExCisJRGVjb2RlciBvdXRwdXQgaG9yaXpvbnRhbCBvZmZzZXQuCisKKyAgICAgSG9yaXpvbnRhbCBvZmZzZXQgbW92ZXMgdGhlIHZpZGVvIGltYWdlIHJpZ2h0LiBBIHNtYWxsIGxlZnQgc2hpZnQgaXMKKyAgICAgcG9zc2libGUsIGJ1dCBpdCdzIGJldHRlciB0byB1c2UgcmVnIDI4NzAgZm9yIHRoYXQgZHVlIHRvIGl0cyBncmVhdGVyCisgICAgIHJhbmdlLgorCisgICAgIE5PVEU6IFZpZGVvIGNvcnJ1cHRpb24gd2lsbCBvY2N1ciBpZiB2aWRlbyB3aW5kb3cgaXMgc2hpZnRlZCBvZmYgdGhlIHJpZ2h0CisgICAgIGVkZ2UuIFRvIGF2b2lkIHRoaXMgcmVhZCB0aGUgbm90ZXMgZm9yIDI4MzQgJiAyODM4LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI4OTQKKyAgICAgIGJpdHMgMDoyMworCURlY29kZXIgb3V0cHV0IHZpZGVvIHN1cnJvdW5kIGNvbG91ci4KKworICAgICBDb250YWlucyB0aGUgY29sb3VyIChpbiB5dXYpIHVzZWQgdG8gZmlsbCB0aGUgc2NyZWVuIHdoZW4gdGhlIHZpZGVvIGlzCisgICAgIHJ1bm5pbmcgaW4gYSB3aW5kb3cuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjg5OAorICAgICAgYml0cyAwOjIzCisJRGVjb2RlciB2aWRlbyB3aW5kb3cgY29sb3VyCisJICBDb250YWlucyB0aGUgY29sb3VyIChpbiB5dXYpIHVzZWQgdG8gZmlsbCB0aGUgdmlkZW8gd2luZG93IHdoZW4gdGhlCisJICB2aWRlbyBpcyB0dXJuZWQgb2ZmLgorCisgICAgICBiaXQgMjQKKwlEZWNvZGVyIHZpZGVvIG91dHB1dAorCSAgMCA9IFZpZGVvIG9uCisJICAxID0gVmlkZW8gb2ZmCisKKyAgICAgIGJpdCAyOAorCURlY29kZXIgcGxhbmUgb3JkZXIKKwkgIDAgPSBZLFVWCisJICAxID0gVVYsWQorCisgICAgICBiaXQgMjkKKwlEZWNvZGVyIHNlY29uZCBwbGFuZSBieXRlIG9yZGVyCisJICAwID0gTm9ybWFsIChVVikKKwkgIDEgPSBTd2FwcGVkIChWVSkKKworICAgICBJbiBub3JtYWwgdXNhZ2UsIHRoZSBmaXJzdCBwbGFuZSBpcyBZICYgdGhlIHNlY29uZCBwbGFuZSBpcyBVVi4gVGhvdWdoIHRoZQorICAgICBvcmRlciBvZiB0aGUgcGxhbmVzIGNhbiBiZSBzd2FwcGVkLCBvbmx5IHRoZSBieXRlIG9yZGVyIG9mIHRoZSBzZWNvbmQgcGxhbmUKKyAgICAgY2FuIGJlIHN3YXBwZWQuIFRoaXMgaXNuJ3QgbXVjaCB1c2UgZm9yIHRoZSBZIHBsYW5lLCBidXQgY2FuIGJlIHVzZWZ1bCBmb3IKKyAgICAgdGhlIFVWIHBsYW5lLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjg5QworICAgICAgYml0cyAwOjE1CisJRGVjb2RlciB2ZXJ0aWNhbCBmaWVsZCBvZmZzZXQgMQorCisgICAgICBiaXRzIDE2OjMxCisJRGVjb2RlciB2ZXJ0aWNhbCBmaWVsZCBvZmZzZXQgMgorCisgICAgIENvbnRyb2xzIGZpZWxkIG91dHB1dCB2ZXJ0aWNhbCBhbGlnbm1lbnQuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIGxvd2VyCisgICAgIHRoZSBpbWFnZSBvbiBzY3JlZW4uIEtub3duIHN0YXJ0aW5nIHZhbHVlcyBhcmUgMHgwMTFFMDAxNyAoTlRTQykgJgorICAgICAweDAxNTAwMDE3IChQQUwpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjhBMAorICAgICAgYml0cyAwOjE1CisJRGVjb2RlciAmIG9zZCB3aWR0aCBpbiBwaXhlbHMKKworICAgICAgYml0cyAxNjozMQorCURlY29kZXIgJiBvc2QgaGVpZ2h0IGluIHBpeGVscworCisgICAgIEFsbCBvdXRwdXQgZnJvbSB0aGUgZGVjb2RlciAmIG9zZCBhcmUgZGlzYWJsZWQgYmV5b25kIHRoaXMgYXJlYS4gRGVjb2RlcgorICAgICBvdXRwdXQgd2lsbCBzaW1wbHkgZ28gYmxhY2sgb3V0c2lkZSBvZiB0aGlzIHJlZ2lvbi4gSWYgdGhlIG9zZCB0cmllcyB0bworICAgICBleGNlZWQgdGhpcyBhcmVhIGl0IHdpbGwgYmVjb21lIGNvcnJ1cHQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjhBNAorICAgICAgYml0cyAwOjExCisJb3NkIGxlZnQgc2hpZnQuCisKKyAgICAgSGFzIGEgcmFuZ2Ugb2YgMHg3NzAtPjB4N0ZGLiBXaXRoIHRoZSBleGNlcHRpb24gb2YgMCwgYW55IHZhbHVlIG91dHNpZGUgb2YKKyAgICAgdGhpcyByYW5nZSBjb3JydXB0cyB0aGUgb3NkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI4QTgKKyAgICAgIGJpdHMgMDoxNQorCW9zZCB2ZXJ0aWNhbCBmaWVsZCBvZmZzZXQgMQorCisgICAgICBiaXRzIDE2OjMxCisJb3NkIHZlcnRpY2FsIGZpZWxkIG9mZnNldCAyCisKKyAgICAgQ29udHJvbHMgZmllbGQgb3V0cHV0IHZlcnRpY2FsIGFsaWdubWVudC4gVGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUgbG93ZXIKKyAgICAgdGhlIGltYWdlIG9uIHNjcmVlbi4gS25vd24gc3RhcnRpbmcgdmFsdWVzIGFyZSAweDAxMUUwMDE3IChOVFNDKSAmCisgICAgIDB4MDE1MDAwMTcgKFBBTCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyOEFDICAtLS0tLS0tLSAgICA/PyB1bmtub3duCisgfAorIFYKKzI4QkMgIC0tLS0tLS0tICAgID8/IHVua25vd24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyOEMwCisgICAgICBiaXQgMAorCUN1cnJlbnQgb3V0cHV0IGZpZWxkCisJICAwID0gZmlyc3QgZmllbGQKKwkgIDEgPSBzZWNvbmQgZmllbGQKKworICAgICAgYml0cyAxNjozMQorCUN1cnJlbnQgc2NhbmxpbmUKKwkgIFRoZSBzY2FubGluZSBjb3VudHMgZnJvbSB0aGUgdG9wIGxpbmUgb2YgdGhlIGZpcnN0IGZpZWxkCisJICB0aHJvdWdoIHRvIHRoZSBsYXN0IGxpbmUgb2YgdGhlIHNlY29uZCBmaWVsZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyOEM0ICAtLS0tLS0tLSAgICA/PyB1bmtub3duCisgfAorIFYKKzI4RjggIC0tLS0tLS0tICAgID8/IHVua25vd24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyOEZDCisgICAgICBiaXQgMAorCT8/IHVua25vd24KKwkgIDAgPSBOb3JtYWwKKwkgIDEgPSBCcmVha3MgZGVjb2RlciAmIG9zZCBvdXRwdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyOTAwCisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyIHZlcnRpY2FsIFkgYWxpYXMgcmVnaXN0ZXIgMQorLS0tLS0tLS0tLS0tLS0tCisyOTA0CisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyIHZlcnRpY2FsIFkgYWxpYXMgcmVnaXN0ZXIgMgorLS0tLS0tLS0tLS0tLS0tCisyOTA4CisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyIHZlcnRpY2FsIFkgYWxpYXMgdHJpZ2dlcgorCisgICAgIFRoZXNlIHRocmVlIHJlZ2lzdGVycyBjb250cm9sIHRoZSB2ZXJ0aWNhbCBhbGlhc2luZyBmaWx0ZXIgZm9yIHRoZSBZIHBsYW5lLgorICAgICBPcGVyYXRpb24gaXMgc2ltaWxhciB0byB0aGUgaG9yaXpvbnRhbCBZIGZpbHRlciAoMjgwNCkuIFRoZSBvbmx5IHJlYWwKKyAgICAgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZXJlIGFyZSBvbmx5IHR3byByZWdpc3RlcnMgdG8gc2V0IGJlZm9yZSBhY2Nlc3NpbmcKKyAgICAgdGhlIHRyaWdnZXIgcmVnaXN0ZXIgKDI5MDgpLiBBcyBmb3IgdGhlIGhvcml6b250YWwgZmlsdGVyLCB0aGUgdmFsdWVzIGFyZQorICAgICB0YWtlbiBmcm9tIGEgbG9va3VwIHRhYmxlIGluIHRoZSBmaXJtd2FyZSwgYW5kIHRoZSBwcm9jZWR1cmUgbXVzdCBiZQorICAgICByZXBlYXRlZCAxNiB0aW1lcyB0byBmdWxseSBwcm9ncmFtIHRoZSBmaWx0ZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjkwQworICAgICAgYml0cyAwOjMxCisJRGVjb2RlciB2ZXJ0aWNhbCBVViBhbGlhcyByZWdpc3RlciAxCistLS0tLS0tLS0tLS0tLS0KKzI5MTAKKyAgICAgIGJpdHMgMDozMQorCURlY29kZXIgdmVydGljYWwgVVYgYWxpYXMgcmVnaXN0ZXIgMgorLS0tLS0tLS0tLS0tLS0tCisyOTE0CisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyIHZlcnRpY2FsIFVWIGFsaWFzIHRyaWdnZXIKKworICAgICBUaGVzZSB0aHJlZSByZWdpc3RlcnMgY29udHJvbCB0aGUgdmVydGljYWwgYWxpYXNpbmcgZmlsdGVyIGZvciB0aGUgVVYKKyAgICAgcGxhbmUuIE9wZXJhdGlvbiBpcyB0aGUgc2FtZSBhcyB0aGUgWSBmaWx0ZXIsIHdpdGggMjkxNCBiZWluZyB0aGUgdHJpZ2dlci4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyOTE4CisgICAgICBiaXRzIDA6MTUKKwlEZWNvZGVyIFkgc291cmNlIGhlaWdodCBpbiBwaXhlbHMKKworICAgICAgYml0cyAxNjozMQorCURlY29kZXIgWSBkZXN0aW5hdGlvbiBoZWlnaHQgaW4gcGl4ZWxzCistLS0tLS0tLS0tLS0tLS0KKzI5MUMKKyAgICAgIGJpdHMgMDoxNQorCURlY29kZXIgVVYgc291cmNlIGhlaWdodCBpbiBwaXhlbHMgZGl2aWRlZCBieSAyCisKKyAgICAgIGJpdHMgMTY6MzEKKwlEZWNvZGVyIFVWIGRlc3RpbmF0aW9uIGhlaWdodCBpbiBwaXhlbHMKKworICAgICBOT1RFOiBGb3IgYm90aCByZWdpc3RlcnMsIHRoZSByZXN1bHRpbmcgaW1hZ2UgbXVzdCBiZSBmdWxseSB2aXNpYmxlIG9uCisgICAgIHNjcmVlbi4gSWYgdGhlIGltYWdlIGV4Y2VlZHMgdGhlIGJvdHRvbSBlZGdlIGJvdGggdGhlIHNvdXJjZSBhbmQKKyAgICAgZGVzdGluYXRpb24gc2l6ZSBtdXN0IGJlIGFkanVzdGVkIHRvIHJlZmxlY3QgdGhlIHZpc2libGUgcG9ydGlvbi4gRm9yIHRoZQorICAgICBzb3VyY2UgaGVpZ2h0LCB5b3UgbXVzdCB0YWtlIGludG8gYWNjb3VudCB0aGUgc2NhbGluZyB3aGVuIGNhbGN1bGF0aW5nIHRoZQorICAgICBuZXcgdmFsdWUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjkyMAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBZIHZlcnRpY2FsIHNjYWxpbmcKKwkgIE5vcm1hbGx5ID0gUmVnIDI5MzAgPj4gMgorLS0tLS0tLS0tLS0tLS0tCisyOTI0CisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyIFkgdmVydGljYWwgc2NhbGluZworCSAgTm9ybWFsbHkgPSBSZWcgMjkyMCArIDB4NTE0CistLS0tLS0tLS0tLS0tLS0KKzI5MjgKKyAgICAgIGJpdHMgMDozMQorCURlY29kZXIgVVYgdmVydGljYWwgc2NhbGluZworCSAgV2hlbiBlbmxhcmdpbmcgPSBSZWcgMjkzMCA+PiAyCisJICBXaGVuIHJlZHVjaW5nID0gUmVnIDI5MzAgPj4gMworLS0tLS0tLS0tLS0tLS0tCisyOTJDCisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyIFVWIHZlcnRpY2FsIHNjYWxpbmcKKwkgIE5vcm1hbGx5ID0gUmVnIDI5MjggKyAweDUxNAorLS0tLS0tLS0tLS0tLS0tCisyOTMwCisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyICdtYXN0ZXInIHZhbHVlIGZvciB2ZXJ0aWNhbCBzY2FsaW5nCistLS0tLS0tLS0tLS0tLS0KKzI5MzQKKyAgICAgIGJpdHMgMDozMQorCURlY29kZXIgPz8gdW5rbm93biAtIFkgdmVydGljYWwgc2NhbGluZworLS0tLS0tLS0tLS0tLS0tCisyOTM4CisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyIFkgdmVydGljYWwgc2NhbGluZworCSAgTm9ybWFsbHkgPSBSZWcgMjkzMAorLS0tLS0tLS0tLS0tLS0tCisyOTNDCisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyID8/IHVua25vd24gLSBZIHZlcnRpY2FsIHNjYWxpbmcKKy0tLS0tLS0tLS0tLS0tLQorMjk0MAorICAgICAgYml0cyAwOjMxCisJRGVjb2RlciBVViB2ZXJ0aWNhbCBzY2FsaW5nCisJICBXaGVuIGVubGFyZ2luZyA9IFJlZyAyOTMwID4+IDEKKwkgIFdoZW4gcmVkdWNpbmcgPSBSZWcgMjkzMAorLS0tLS0tLS0tLS0tLS0tCisyOTQ0CisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyID8/IHVua25vd24gLSBVViB2ZXJ0aWNhbCBzY2FsaW5nCistLS0tLS0tLS0tLS0tLS0KKzI5NDgKKyAgICAgIGJpdHMgMDozMQorCURlY29kZXIgVVYgdmVydGljYWwgc2NhbGluZworCSAgTm9ybWFsbHkgPSBSZWcgMjk0MAorLS0tLS0tLS0tLS0tLS0tCisyOTRDCisgICAgICBiaXRzIDA6MzEKKwlEZWNvZGVyID8/IHVua25vd24gLSBVViB2ZXJ0aWNhbCBzY2FsaW5nCisKKyAgICAgTW9zdCBvZiB0aGVzZSByZWdpc3RlcnMgZWl0aGVyIGNvbnRyb2wgdmVydGljYWwgc2NhbGluZywgb3IgYXBwZWFyIGxpbmtlZAorICAgICB0byBpdCBpbiBzb21lIHdheS4gUmVnaXN0ZXIgMjkzMCBjb250YWlucyB0aGUgJ21hc3RlcicgdmFsdWUgJiBhbGwgb3RoZXIKKyAgICAgcmVnaXN0ZXJzIGNhbiBiZSBjYWxjdWxhdGVkIGZyb20gdGhhdCBvbmUuIFlvdSBtdXN0IGFsc28gcmVtZW1iZXIgdG8KKyAgICAgY29ycmVjdGx5IHNldCB0aGUgZGl2aWRlciBpbiBSZWcgMjk2QworCisgICAgIFRvIGVubGFyZ2U6CisJICAgICBSZWcgMjkzMCA9IChzb3VyY2VfaGVpZ2h0ICogMHgwMDIwMDAwMCkgLyBkZXN0aW5hdGlvbl9oZWlnaHQKKwkgICAgIFJlZyAyOTZDID0gTm8gZGl2aWRlCisKKyAgICAgVG8gcmVkdWNlIGZyb20gZnVsbCBzaXplIGRvd24gdG8gaGFsZiBzaXplOgorCSAgICAgUmVnIDI5MzAgPSAoc291cmNlX2hlaWdodC8yICogMHgwMDIwMDAwMCkgLyBkZXN0aW5hdGlvbiBoZWlnaHQKKwkgICAgIFJlZyAyOTZDID0gRGl2aWRlIGJ5IDIKKworICAgICAgVG8gcmVkdWNlIGZyb20gaGFsZiBkb3duIHRvIHF1YXJ0ZXIuCisJICAgICBSZWcgMjkzMCA9IChzb3VyY2VfaGVpZ2h0LzQgKiAweDAwMjAwMDAwKSAvIGRlc3RpbmF0aW9uIGhlaWdodAorCSAgICAgUmVnIDI5NkMgPSBEaXZpZGUgYnkgNAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjk1MAorICAgICAgYml0cyAwOjE1CisJRGVjb2RlciBZIGxpbmUgaW5kZXggaW50byBkaXNwbGF5IGJ1ZmZlciwgZmlyc3QgZmllbGQKKworICAgICAgYml0cyAxNjozMQorCURlY29kZXIgWSB2ZXJ0aWNhbCBsaW5lIHNraXAsIGZpcnN0IGZpZWxkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjk1NAorICAgICAgYml0cyAwOjE1CisJRGVjb2RlciBZIGxpbmUgaW5kZXggaW50byBkaXNwbGF5IGJ1ZmZlciwgc2Vjb25kIGZpZWxkCisKKyAgICAgIGJpdHMgMTY6MzEKKwlEZWNvZGVyIFkgdmVydGljYWwgbGluZSBza2lwLCBzZWNvbmQgZmllbGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyOTU4CisgICAgICBiaXRzIDA6MTUKKwlEZWNvZGVyIFVWIGxpbmUgaW5kZXggaW50byBkaXNwbGF5IGJ1ZmZlciwgZmlyc3QgZmllbGQKKworICAgICAgYml0cyAxNjozMQorCURlY29kZXIgVVYgdmVydGljYWwgbGluZSBza2lwLCBmaXJzdCBmaWVsZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI5NUMKKyAgICAgIGJpdHMgMDoxNQorCURlY29kZXIgVVYgbGluZSBpbmRleCBpbnRvIGRpc3BsYXkgYnVmZmVyLCBzZWNvbmQgZmllbGQKKworICAgICAgYml0cyAxNjozMQorCURlY29kZXIgVVYgdmVydGljYWwgbGluZSBza2lwLCBzZWNvbmQgZmllbGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyOTYwCisgICAgICBiaXRzIDA6MTUKKwlEZWNvZGVyIGRlc3RpbmF0aW9uIGhlaWdodCBtaW51cyAxCisKKyAgICAgIGJpdHMgMTY6MzEKKwlEZWNvZGVyIGRlc3RpbmF0aW9uIGhlaWdodCBkaXZpZGVkIGJ5IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyOTY0CisgICAgICBiaXRzIDA6MTUKKwlEZWNvZGVyIFkgdmVydGljYWwgb2Zmc2V0LCBzZWNvbmQgZmllbGQKKworICAgICAgYml0cyAxNjozMQorCURlY29kZXIgWSB2ZXJ0aWNhbCBvZmZzZXQsIGZpcnN0IGZpZWxkCisKKyAgICAgVGhlc2UgdHdvIHJlZ2lzdGVycyBzaGlmdCB0aGUgWSBwbGFuZSB1cC4gVGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUKKyAgICAgZ3JlYXRlciB0aGUgc2hpZnQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjk2OAorICAgICAgYml0cyAwOjE1CisJRGVjb2RlciBVViB2ZXJ0aWNhbCBvZmZzZXQsIHNlY29uZCBmaWVsZAorCisgICAgICBiaXRzIDE2OjMxCisJRGVjb2RlciBVViB2ZXJ0aWNhbCBvZmZzZXQsIGZpcnN0IGZpZWxkCisKKyAgICAgVGhlc2UgdHdvIHJlZ2lzdGVycyBzaGlmdCB0aGUgVVYgcGxhbmUgdXAuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlCisgICAgIGdyZWF0ZXIgdGhlIHNoaWZ0LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI5NkMKKyAgICAgIGJpdHMgMDoxCisJRGVjb2RlciB2ZXJ0aWNhbCBZIG91dHB1dCBzaXplIGRpdmlkZXIKKwkgIDAwID0gTm8gZGl2aWRlCisJICAwMSA9IERpdmlkZSBieSAyCisJICAxMCA9IERpdmlkZSBieSA0CisKKyAgICAgIGJpdHMgODo5CisJRGVjb2RlciB2ZXJ0aWNhbCBVViBvdXRwdXQgc2l6ZSBkaXZpZGVyCisJICAwMCA9IE5vIGRpdmlkZQorCSAgMDEgPSBEaXZpZGUgYnkgMgorCSAgMTAgPSBEaXZpZGUgYnkgNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI5NzAKKyAgICAgIGJpdCAwCisJRGVjb2RlciA/PyB1bmtub3duCisJICAwID0gTm9ybWFsCisJICAxID0gQWZmZWN0IHZpZGVvIG91dHB1dCBsZXZlbHMKKworICAgICAgYml0IDE2CisJRGVjb2RlciA/PyB1bmtub3duCisJICAwID0gTm9ybWFsCisJICAxID0gRGlzYWJsZSB2ZXJ0aWNhbCBmaWx0ZXIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzI5NzQgIC0tLS0tLS0tICAgPz8gdW5rbm93bgorIHwKKyBWCisyOUVGICAtLS0tLS0tLSAgID8/IHVua25vd24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyQTAwCisgICAgICBiaXRzIDA6MgorCW9zZCBjb2xvdXIgbW9kZQorCSAgMDAxID0gMTYgYml0ICg1NjUpCisJICAwMTAgPSAxNSBiaXQgKDU1NSkKKwkgIDAxMSA9IDEyIGJpdCAoNDQ0KQorCSAgMTAwID0gMzIgYml0ICg4ODg4KQorCSAgMTAxID0gOCBiaXQgaW5kZXhlZAorCisgICAgICBiaXRzIDQ6NQorCW9zZCBkaXNwbGF5IGJwcAorCSAgMDEgPSA4IGJpdAorCSAgMTAgPSAxNiBiaXQKKwkgIDExID0gMzIgYml0CisKKyAgICAgIGJpdCA4CisJb3NkIGdsb2JhbCBhbHBoYQorCSAgMCA9IE9mZgorCSAgMSA9IE9uCisKKyAgICAgIGJpdCA5CisJb3NkIGxvY2FsIGFscGhhCisJICAwID0gT2ZmCisJICAxID0gT24KKworICAgICAgYml0IDEwCisJb3NkIGNvbG91ciBrZXkKKwkgIDAgPSBPZmYKKwkgIDEgPSBPbgorCisgICAgICBiaXQgMTEKKwlvc2QgPz8gdW5rbm93bgorCSAgTXVzdCBiZSAxCisKKyAgICAgIGJpdCAxMworCW9zZCBjb2xvdXIgc3BhY2UKKwkgIDAgPSBBUkdCCisJICAxID0gQVlWVQorCisgICAgICBiaXRzIDE2OjMxCisJb3NkID8/IHVua25vd24KKwkgIE11c3QgYmUgMHgwMDFCIChzb21lIGtpbmQgb2YgYnVmZmVyIHBvaW50ZXIgPykKKworICAgICBXaGVuIHRoZSBiaXRzLXBlci1waXhlbCBpcyBzZXQgdG8gOCwgdGhlIGNvbG91ciBtb2RlIGlzIGlnbm9yZWQgYW5kCisgICAgIGFzc3VtZWQgdG8gYmUgOCBiaXQgaW5kZXhlZC4gRm9yIDE2ICYgMzIgYml0cy1wZXItcGl4ZWwgdGhlIGNvbG91ciBkZXB0aAorICAgICBpcyBob25vdXJlZCwgYW5kIHdoZW4gdXNpbmcgYSBjb2xvdXIgZGVwdGggdGhhdCByZXF1aXJlcyBmZXdlciBieXRlcyB0aGFuCisgICAgIGFsbG9jYXRlZCB0aGUgZXh0cmEgYnl0ZXMgYXJlIHVzZWQgYXMgcGFkZGluZy4gU28gZm9yIGEgMzIgYnBwIHdpdGggOCBiaXQKKyAgICAgaW5kZXggY29sb3VyLCB0aGVyZSBhcmUgMyBwYWRkaW5nIGJ5dGVzIHBlciBwaXhlbC4gSXQncyBhbHNvIHBvc3NpYmxlIHRvCisgICAgIHNlbGVjdCAxNmJwcCB3aXRoIGEgMzIgYml0IGNvbG91ciBtb2RlLiBUaGlzIHJlc3VsdHMgaW4gdGhlIHBpeGVsIHdpZHRoCisgICAgIGJlaW5nIGRvdWJsZWQsIGJ1dCB0aGUgY29sb3Iga2V5IHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgaW4gdGhpcyBtb2RlLgorCisgICAgIENvbG91ciBrZXkgaXMgYXMgaXQgc3VnZ2VzdHMuIFlvdSBkZXNpZ25hdGUgYSBjb2xvdXIgd2hpY2ggd2lsbCBiZWNvbWUKKyAgICAgY29tcGxldGVseSB0cmFuc3BhcmVudC4gV2hlbiB1c2luZyA1NjUsIDU1NSBvciA0NDQgY29sb3VyIG1vZGVzLCB0aGUKKyAgICAgY29sb3VyIGtleSBpcyBhbHdheXMgMTYgYml0cyB3aWRlLiBUaGUgY29sb3VyIHRvIGtleSBvbiBpcyBzZXQgaW4gUmVnIDJBMTguCisKKyAgICAgTG9jYWwgYWxwaGEgaXMgYSBwZXItcGl4ZWwgMjU2IHN0ZXAgdHJhbnNwYXJlbmN5LCB3aXRoIDAgYmVpbmcgdHJhbnNwYXJlbnQKKyAgICAgYW5kIDI1NSBiZWluZyBzb2xpZC4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBpbiAzMiBiaXQgJiA4IGJpdCBpbmRleGVkCisgICAgIGNvbG91ciBtb2Rlcy4KKworICAgICBHbG9iYWwgYWxwaGEgaXMgYSAyNTYgc3RlcCB0cmFuc3BhcmVuY3kgdGhhdCBhcHBsaWVzIHRvIHRoZSBlbnRpcmUgb3NkLAorICAgICB3aXRoIDAgYmVpbmcgdHJhbnNwYXJlbnQgJiAyNTUgYmVpbmcgc29saWQuCisKKyAgICAgSXQncyBwb3NzaWJsZSB0byBjb21iaW5lIGNvbG91ciBrZXksIGxvY2FsIGFscGhhICYgZ2xvYmFsIGFscGhhLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzJBMDQKKyAgICAgIGJpdHMgMDoxNQorCW9zZCB4IGNvb3JkIGZvciBsZWZ0IGVkZ2UKKworICAgICAgYml0cyAxNjozMQorCW9zZCB5IGNvb3JkIGZvciB0b3AgZWRnZQorLS0tLS0tLS0tLS0tLS0tCisyQTA4CisgICAgICBiaXRzIDA6MTUKKwlvc2QgeCBjb29yZCBmb3IgcmlnaHQgZWRnZQorCisgICAgICBiaXRzIDE2OjMxCisJb3NkIHkgY29vcmQgZm9yIGJvdHRvbSBlZGdlCisKKyAgICAgRm9yIGJvdGggcmVnaXN0ZXJzLCAoMCwwKSA9IHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZGlzcGxheSBhcmVhLiBUaGVzZQorICAgICByZWdpc3RlcnMgZG8gbm90IGNvbnRyb2wgdGhlIG9zZCBzaXplLCBvbmx5IHdoZXJlIGl0J3MgcG9zaXRpb25lZCAmIGhvdworICAgICBtdWNoIGlzIHZpc2libGUuIFRoZSB2aXNpYmxlIG9zZCBhcmVhIGNhbm5vdCBleGNlZWQgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlCisgICAgIGRpc3BsYXksIG90aGVyd2lzZSB0aGUgb3NkIHdpbGwgYmVjb21lIGNvcnJ1cHQuIFNlZSByZWcgMkExMCBmb3IKKyAgICAgc2V0dGluZyBvc2Qgd2lkdGguCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMkEwQworICAgICAgYml0cyAwOjMxCisJb3NkIGJ1ZmZlciBpbmRleAorCisgICAgIEFuIGluZGV4IGludG8gdGhlIG9zZCBidWZmZXIuIFNsb3dseSBpbmNyZW1lbnRpbmcgdGhpcyBtb3ZlcyB0aGUgb3NkIGxlZnQsCisgICAgIHdyYXBwaW5nIGFyb3VuZCBvbnRvIHRoZSByaWdodCBlZGdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMkExMAorICAgICAgYml0cyAwOjExCisJb3NkIGJ1ZmZlciAzMiBiaXQgd29yZCB3aWR0aAorCisgICAgIENvbnRhaW5zIHRoZSB3aWR0aCBvZiB0aGUgb3NkIG1lYXN1cmVkIGluIDMyIGJpdCB3b3Jkcy4gVGhpcyBtZWFucyB0aGF0IGFsbAorICAgICBjb2xvdXIgbW9kZXMgYXJlIHJlc3RyaWN0ZWQgdG8gYSBieXRlIHdpZHRoIHdoaWNoIGlzIGRpdmlzaWJsZSBieSA0LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzJBMTQKKyAgICAgIGJpdHMgMDoxNQorCW9zZCBoZWlnaHQgaW4gcGl4ZWxzCisKKyAgICAgIGJpdHMgMTY6MzIKKwlvc2QgbGluZSBpbmRleCBpbnRvIGJ1ZmZlcgorCSAgb3NkIHdpbGwgc3RhcnQgZGlzcGxheWluZyBmcm9tIHRoaXMgbGluZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyQTE4CisgICAgICBiaXRzIDA6MzEKKwlvc2QgY29sb3VyIGtleQorCisgICAgIENvbnRhaW5zIHRoZSBjb2xvdXIgdmFsdWUgd2hpY2ggd2lsbCBiZSB0cmFuc3BhcmVudC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyQTFDCisgICAgICBiaXRzIDA6NworCW9zZCBnbG9iYWwgYWxwaGEKKworICAgICBDb250YWlucyB0aGUgZ2xvYmFsIGFscGhhIHZhbHVlIChlcXVpdiBpdnR2ZmJjdGwgLS1hbHBoYSBYWCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyQTIwICAtLS0tLS0tLSAgICA/PyB1bmtub3duCisgfAorIFYKKzJBMkMgIC0tLS0tLS0tICAgID8/IHVua25vd24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyQTMwCisgICAgICBiaXRzIDA6NworCW9zZCBjb2xvdXIgdG8gY2hhbmdlIGluIGluZGV4ZWQgcGFsZXR0ZQorLS0tLS0tLS0tLS0tLS0tCisyQTM0CisgICAgICBiaXRzIDA6MzEKKwlvc2QgY29sb3VyIGZvciBpbmRleGVkIHBhbGV0dGUKKworICAgICBUbyBzZXQgdGhlIG5ldyBwYWxldHRlLCBmaXJzdCBsb2FkIHRoZSBpbmRleCBvZiB0aGUgY29sb3VyIHRvIGNoYW5nZSBpbnRvCisgICAgIDJBMzAsIHRoZW4gbG9hZCB0aGUgbmV3IGNvbG91ciBpbnRvIDJBMzQuIFRoZSBmdWxsIHBhbGV0dGUgaXMgMjU2IGNvbG91cnMsCisgICAgIHNvIHRoZSBpbmRleCByYW5nZSBpcyAweDAwLTB4RkYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyQTM4ICAtLS0tLS0tLSAgICA/PyB1bmtub3duCisyQTNDICAtLS0tLS0tLSAgICA/PyB1bmtub3duCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMkE0MAorICAgICAgYml0cyAwOjMxCisJb3NkID8/IHVua25vd24KKworICAgICBBZmZlY3RzIG92ZXJhbGwgYnJpZ2h0bmVzcywgd3JhcHBpbmcgYXJvdW5kIHRvIGJsYWNrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMkE0NAorICAgICAgYml0cyAwOjMxCisJb3NkID8/IHVua25vd24KKworICAgICBHcmVlbiB0aW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMkE0OAorICAgICAgYml0cyAwOjMxCisJb3NkID8/IHVua25vd24KKworICAgICBSZWQgdGludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzJBNEMKKyAgICAgIGJpdHMgMDozMQorCW9zZCA/PyB1bmtub3duCisKKyAgICAgQWZmZWN0cyBvdmVyYWxsIGJyaWdodG5lc3MsIHdyYXBwaW5nIGFyb3VuZCB0byBibGFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzJBNTAKKyAgICAgIGJpdHMgMDozMQorCW9zZCA/PyB1bmtub3duCisKKyAgICAgQ29sb3VyIHNoaWZ0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMkE1NAorICAgICAgYml0cyAwOjMxCisJb3NkID8/IHVua25vd24KKworICAgICBDb2xvdXIgc2hpZnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyQTU4ICAtLS0tLS0tLSAgICA/PyB1bmtub3duCisgfAorIFYKKzJBRkMgIC0tLS0tLS0tICAgID8/IHVua25vd24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyQjAwCisgICAgICBiaXQgMAorCW9zZCBmaWx0ZXIgY29udHJvbAorCSAgMCA9IGZpbHRlciBvZmYKKwkgIDEgPSBmaWx0ZXIgb24KKworICAgICAgYml0cyAxOjQKKwlvc2QgPz8gdW5rbm93bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2MC4zIC0gMiBGZWJydWFyeSAyMDA3IC0gSWFuIEFybXN0cm9uZyAoaWFuQGlhcm1zdC5kZW1vbi5jby51aykKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L2Z3LWRtYS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctZG1hLnR4dAppbmRleCA4MTIzZTI2Li5iZTUyYjZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctZG1hLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctZG1hLnR4dApAQCAtMjIsNiArMjIsOCBAQAogCiBNYWlsYm94ICMxMCBpcyByZXNlcnZlZCBmb3IgRE1BIHRyYW5zZmVyIGluZm9ybWF0aW9uLgogCitOb3RlOiB0aGUgaGFyZHdhcmUgZXhwZWN0cyBsaXR0bGUtZW5kaWFuIGRhdGEgKCdpbnRlbCBmb3JtYXQnKS4KKwogRmxvdwogPT09PQogCkBAIC02NCw3ICs2Niw3IEBACiAKIEVhY2ggUy1HIGFycmF5IGVsZW1lbnQgaXMgYSBzdHJ1Y3Qgb2YgdGhyZWUgMzItYml0IHdvcmRzLiBUaGUgZmlyc3Qgd29yZCBpcwogdGhlIHNvdXJjZSBhZGRyZXNzLCB0aGUgc2Vjb25kIGlzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLiBCb3RoIHRha2UgdXAgdGhlCi1lbnRpcmUgMzIgYml0cy4gVGhlIGxvd2VzdCAxNiBiaXRzIG9mIHRoZSB0aGlyZCB3b3JkIGlzIHRoZSB0cmFuc2ZlciBieXRlCitlbnRpcmUgMzIgYml0cy4gVGhlIGxvd2VzdCAxOCBiaXRzIG9mIHRoZSB0aGlyZCB3b3JkIGlzIHRoZSB0cmFuc2ZlciBieXRlCiBjb3VudC4gVGhlIGhpZ2gtYml0IG9mIHRoZSB0aGlyZCB3b3JkIGlzIHRoZSAibGFzdCIgZmxhZy4gVGhlIGxhc3QtZmxhZyB0ZWxscwogdGhlIGNhcmQgdG8gcmFpc2UgdGhlIERNQV9ET05FIGludGVycnVwdC4gRnJvbSBoYXJkIHBlcnNvbmFsIGV4cGVyaWVuY2UsIGlmCiB5b3UgZm9yZ2V0IHRvIHNldCB0aGlzIGJpdCwgdGhlIGNhcmQgd2lsbCBzdGlsbCAid29yayIgYnV0IHRoZSBzdHJlYW0gd2lsbApAQCAtNzgsOCArODAsOCBAQAogCiAtIDMyLWJpdCBTb3VyY2UgQWRkcmVzcwogLSAzMi1iaXQgRGVzdGluYXRpb24gQWRkcmVzcwotLSAxNi1iaXQgcmVzZXJ2ZWQgKGhpZ2ggYml0IGlzIHRoZSBsYXN0IGZsYWcpCi0tIDE2LWJpdCBieXRlIGNvdW50CistIDE0LWJpdCByZXNlcnZlZCAoaGlnaCBiaXQgaXMgdGhlIGxhc3QgZmxhZykKKy0gMTgtYml0IGJ5dGUgY291bnQKIAogRE1BIFRyYW5zZmVyIFN0YXR1cwogPT09PT09PT09PT09PT09PT09PQpAQCAtODcsOCArODksOCBAQAogUmVnaXN0ZXIgMHgwMDA0IGhvbGRzIHRoZSBETUEgVHJhbnNmZXIgU3RhdHVzOgogCiBCaXQKLTQgICBTY2F0dGVyLUdhdGhlciBhcnJheSBlcnJvcgotMyAgIERNQSB3cml0ZSBlcnJvcgotMiAgIERNQSByZWFkIGVycm9yCi0xICAgd3JpdGUgY29tcGxldGVkCiAwICAgcmVhZCBjb21wbGV0ZWQKKzEgICB3cml0ZSBjb21wbGV0ZWQKKzIgICBETUEgcmVhZCBlcnJvcgorMyAgIERNQSB3cml0ZSBlcnJvcgorNCAgIFNjYXR0ZXItR2F0aGVyIGFycmF5IGVycm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctZW5jb2Rlci1hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L2Z3LWVuY29kZXItYXBpLnR4dAppbmRleCAxNWRmMGRmLi4yNDIxMDRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctZW5jb2Rlci1hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9mdy1lbmNvZGVyLWFwaS50eHQKQEAgLTIxMywxNiArMjEzLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1OYW1lIAlDWDIzNDFYX0VOQ19TRVRfM18yX1BVTExET1dOCi1FbnVtIAkxNzcvMHhCMQotRGVzY3JpcHRpb24KLQkzOjIgcHVsbGRvd24gcHJvcGVydGllcwotUGFyYW1bMF0KLQkwPWVuYWJsZWQKLQkxPWRpc2FibGVkCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogTmFtZSAJQ1gyMzQxWF9FTkNfU0VUX1ZCSV9MSU5FCiBFbnVtIAkxODMvMHhCNwogRGVzY3JpcHRpb24KQEAgLTMzMiw5ICszMjIsNyBAQAogCQknMDEnPUpvaW50U3RlcmVvCiAJCScxMCc9RHVhbAogCQknMTEnPU1vbm8KLQkJTm90ZTogdGVzdGluZyBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IE1vbm8gYW5kIHBvc3NpYmx5Ci0JCUpvaW50U3RlcmVvIGFyZSBub3Qgd29ya2luZyAoZGVmYXVsdCB0byBzdGVyZW8pLgotCQlEdWFsIGRvZXMgd29yaywgdGhvdWdoLgorCQlOb3RlOiB0aGUgY3gyMzQxNSBjYW5ub3QgZGVjb2RlIEpvaW50IFN0ZXJlbyBwcm9wZXJseS4KIAogCSAgMTA6MTEgTW9kZSBFeHRlbnNpb24gdXNlZCBpbiBqb2ludF9zdGVyZW8gbW9kZS4KIAkJSW4gTGF5ZXIgSSBhbmQgSUkgdGhleSBpbmRpY2F0ZSB3aGljaCBzdWJiYW5kcyBhcmUgaW4KQEAgLTQxMywxNiArNDAxLDM0IEBACiBFbnVtIAkxOTkvMHhDNwogRGVzY3JpcHRpb24KIAlTZXRzIHRoZSBQcm9ncmFtIEluZGV4IEluZm9ybWF0aW9uLgorCVRoZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYXMgZm9sbG93czoKKworCXN0cnVjdCBpbmZvIHsKKwkJdTMyIGxlbmd0aDsJCS8vIExlbmd0aCBvZiB0aGlzIGZyYW1lCisJCXUzMiBvZmZzZXRfbG93OwkJLy8gT2Zmc2V0IGluIHRoZSBmaWxlIG9mIHRoZQorCQl1MzIgb2Zmc2V0X2hpZ2g7CS8vIHN0YXJ0IG9mIHRoaXMgZnJhbWUKKwkJdTMyIG1hc2sxOwkJLy8gQml0cyAwLTEgYXJlIHRoZSB0eXBlIG1hc2s6CisJCQkJCS8vIDE9SSwgMj1QLCA0PUIKKwkJdTMyIHB0czsJCS8vIFRoZSBQVFMgb2YgdGhlIGZyYW1lCisJCXUzMiBtYXNrMjsJCS8vIEJpdCAwIGlzIGJpdCAzMiBvZiB0aGUgcHRzLgorCX07CisJdTMyIHRhYmxlX3B0cjsKKwlzdHJ1Y3QgaW5mbyBpbmRleFs0MDBdOworCisJVGhlIHRhYmxlX3B0ciBpcyB0aGUgZW5jb2RlciBtZW1vcnkgYWRkcmVzcyBpbiB0aGUgdGFibGUgd2VyZQorCSpuZXcqIGVudHJpZXMgd2lsbCBiZSB3cml0dGVuLiBOb3RlIHRoYXQgdGhpcyBpcyBhIHJpbmdidWZmZXIsCisJc28gdGhlIHRhYmxlX3B0ciB3aWxsIHdyYXBhcm91bmQuCiBQYXJhbVswXQogCVBpY3R1cmUgTWFzazoKIAkgICAgMD1ObyBpbmRleCBjYXB0dXJlCiAJICAgIDE9SSBmcmFtZXMKIAkgICAgMz1JLFAgZnJhbWVzCiAJICAgIDc9SSxQLEIgZnJhbWVzCisJKFNlZW1zIHRvIGJlIGlnbm9yZWQsIGl0IGFsd2F5cyBpbmRleGVzIEksIFAgYW5kIEIgZnJhbWVzKQogUGFyYW1bMV0KIAlFbGVtZW50cyByZXF1ZXN0ZWQgKHVwIHRvIDQwMCkKIFJlc3VsdFswXQotCU9mZnNldCBpbiBTREYgbWVtb3J5IG9mIHRoZSB0YWJsZS4KKwlPZmZzZXQgaW4gdGhlIGVuY29kZXIgbWVtb3J5IG9mIHRoZSBzdGFydCBvZiB0aGUgdGFibGUuCiBSZXN1bHRbMV0KIAlOdW1iZXIgb2YgYWxsb2NhdGVkIGVsZW1lbnRzIHVwIHRvIGEgbWF4aW11bSBvZiBQYXJhbVsxXQogCkBAIC00OTIsMTIgKzQ5OCwxNCBAQAogRW51bSAJMjAzLzB4Q0IKIERlc2NyaXB0aW9uCiAJUmV0dXJucyBpbmZvcm1hdGlvbiBvbiB0aGUgcHJldmlvdXMgRE1BIHRyYW5zZmVyIGluIGNvbmp1bmN0aW9uIHdpdGgKLQliaXQgMjcgb2YgdGhlIGludGVycnVwdCBtYXNrLiBVc2VzIG1haWxib3ggOS4KKwliaXQgMjcgb3IgMTggb2YgdGhlIGludGVycnVwdCBtYXNrLiBVc2VzIG1haWxib3ggOS4KIFJlc3VsdFswXQogCVN0YXR1cyBiaXRzOgotCSAgICBCaXQgMCBzZXQgaW5kaWNhdGVzIHRyYW5zZmVyIGNvbXBsZXRlCi0JICAgIEJpdCAyIHNldCBpbmRpY2F0ZXMgdHJhbnNmZXIgZXJyb3IKLQkgICAgQml0IDQgc2V0IGluZGljYXRlcyBsaW5rZWQgbGlzdCBlcnJvcgorCQkwICAgcmVhZCBjb21wbGV0ZWQKKwkJMSAgIHdyaXRlIGNvbXBsZXRlZAorCQkyICAgRE1BIHJlYWQgZXJyb3IKKwkJMyAgIERNQSB3cml0ZSBlcnJvcgorCQk0ICAgU2NhdHRlci1HYXRoZXIgYXJyYXkgZXJyb3IKIFJlc3VsdFsxXQogCURNQSB0eXBlCiBSZXN1bHRbMl0KQEAgLTY3Miw3ICs2ODAsNyBAQAogCXRoZSB2YWx1ZS4KIFBhcmFtWzBdCiAJQ29tbWFuZCBudW1iZXI6Ci0JIDE9c2V0IGluaXRpYWwgU0NSIHZhbHVlIHdoZW4gc3RhcnRpbmcgZW5jb2RpbmcuCisJIDE9c2V0IGluaXRpYWwgU0NSIHZhbHVlIHdoZW4gc3RhcnRpbmcgZW5jb2RpbmcgKHdvcmtzKS4KIAkgMj1zZXQgcXVhbGl0eSBtb2RlIChhcHBhcmVudGx5IHNvbWUgdGVzdCBzZXR0aW5nKS4KIAkgMz1zZXR1cCBhZHZhbmNlZCBWSU0gcHJvdGVjdGlvbiBoYW5kbGluZyAoc3VwcG9zZWRseSBvbmx5IGZvciB0aGUgY3gyMzQxNgogCSAgIGZvciByYXcgWVVWKS4KQEAgLTY4MSw3ICs2ODksMTEgQEAKIAkgND1nZW5lcmF0ZSBhcnRpZmljaWFsIFBUUyB0aW1lc3RhbXBzCiAJIDU9VVNCIGZsdXNoIG1vZGUKIAkgNj1zb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgcXVhbnRpemF0aW9uIG1hdHJpeAotCSA3PXNldCBuYXZpZ2F0aW9uIHBhY2sgaW5zZXJ0aW9uIGZvciBEVkQKKwkgNz1zZXQgbmF2aWdhdGlvbiBwYWNrIGluc2VydGlvbiBmb3IgRFZEOiBhZGRzIDB4YmYgKHByaXZhdGUgc3RyZWFtIDIpCisJICAgcGFja2V0cyB0byB0aGUgTVBFRy4gVGhlIHNpemUgb2YgdGhlc2UgcGFja2V0cyBpcyAyMDQ4IGJ5dGVzIChpbmNsdWRpbmcKKwkgICB0aGUgaGVhZGVyIG9mIDYgYnl0ZXM6IDB4MDAwMDAxYmYgKyBsZW5ndGgpLiBUaGUgcGF5bG9hZCBpcyB6ZXJvZWQgYW5kCisJICAgaXQgaXMgdXAgdG8gdGhlIGFwcGxpY2F0aW9uIHRvIGZpbGwgdGhlbSBpbi4gVGhlc2UgcGFja2V0cyBhcmUgYXBwYXJlbnRseQorCSAgIGluc2VydGVkIGV2ZXJ5IGZvdXIgZnJhbWVzLgogCSA4PWVuYWJsZSBzY2VuZSBjaGFuZ2UgZGV0ZWN0aW9uIChzZWVtcyB0byBiZSBhIGZhaWx1cmUpCiAJIDk9c2V0IGhpc3RvcnkgcGFyYW1ldGVycyBvZiB0aGUgdmlkZW8gaW5wdXQgbW9kdWxlCiAJMTA9c2V0IGlucHV0IGZpZWxkIG9yZGVyIG9mIFZJTQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L2Z3LW1lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctbWVtb3J5LnR4dAppbmRleCBlZjBhYWQzLi45ZDczNmZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctbWVtb3J5LnR4dApAQCAtMSw2ICsxLDggQEAKIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjeDIzNDF4IG1lbW9yeSBtYXAgYW5kIGRvY3VtZW50cyBzb21lIG9mIHRoZSByZWdpc3Rlcgogc3BhY2UuCiAKK05vdGU6IHRoZSBtZW1vcnkgbG9uZyB3b3JkcyBhcmUgbGl0dGxlLWVuZGlhbiAoJ2ludGVsIGZvcm1hdCcpLgorCiBXYXJuaW5nISBUaGlzIGluZm9ybWF0aW9uIHdhcyBmaWd1cmVkIG91dCBmcm9tIHNlYXJjaGluZyB0aHJvdWdoIHRoZSBtZW1vcnkgYW5kCiByZWdpc3RlcnMsIHRoaXMgaW5mb3JtYXRpb24gbWF5IG5vdCBiZSBjb3JyZWN0IGFuZCBpcyBjZXJ0YWlubHkgbm90IGNvbXBsZXRlLCBhbmQKIHdhcyBub3QgZGVyaXZlZCBmcm9tIGFueXRoaW5nIG1vcmUgdGhhbiBzZWFyY2hpbmcgdGhyb3VnaCB0aGUgbWVtb3J5IHNwYWNlIHdpdGgKQEAgLTY3LDcgKzY5LDcgQEAKICAweDg0IC0gZmlyc3Qgd3JpdGUgbGlua2VkIGxpc3QgcmVnLCBmb3IgcGNpIG1lbW9yeSBhZGRyCiAgMHg4OCAtIGZpcnN0IHdyaXRlIGxpbmtlZCBsaXN0IHJlZywgZm9yIGxlbmd0aCBvZiBidWZmZXIgaW4gbWVtb3J5IGFkZHIKIAkofDB4ODAwMDAwMDAgb3IgdGhpcyBmb3IgbGFzdCBsaW5rKQotIDB4OGMtMHhjYyAtIHJlc3Qgb2Ygd3JpdGUgbGlua2VkIGxpc3QgcmVnLCA4IHNldHMgb2YgMyB0b3RhbCwgRE1BIGdvZXMgaGVyZQorIDB4OGMtMHhkYyAtIHJlc3Qgb2Ygd3JpdGUgbGlua2VkIGxpc3QgcmVnLCA4IHNldHMgb2YgMyB0b3RhbCwgRE1BIGdvZXMgaGVyZQogCWZyb20gbGlua2VkIGxpc3QgYWRkciBpbiByZWcgMHgwYywgZmlybXdhcmUgbXVzdCBwdXNoIHRocm91Z2ggb3IKIAlzb21ldGhpbmcuCiAgMHhlMCAtIGZpcnN0IChhbmQgb25seSkgcmVhZCBsaW5rZWQgbGlzdCByZWcsIGZvciBwY2kgbWVtb3J5IGFkZHIKQEAgLTEyMywxMiArMTI1LDggQEAKIDI5IEVuY29kZXIgVkJJIGNhcHR1cmUKIDI4IEVuY29kZXIgVmlkZW8gSW5wdXQgTW9kdWxlIHJlc2V0IGV2ZW50CiAyNyBFbmNvZGVyIERNQSBjb21wbGV0ZQotMjYKLTI1IERlY29kZXIgY29weSBwcm90ZWN0IGRldGVjdGlvbiBldmVudAotMjQgRGVjb2RlciBhdWRpbyBtb2RlIGNoYW5nZSBkZXRlY3Rpb24gZXZlbnQKLTIzCisyNCBEZWNvZGVyIGF1ZGlvIG1vZGUgY2hhbmdlIGRldGVjdGlvbiBldmVudCAodGhyb3VnaCBldmVudCBub3RpZmljYXRpb24pCiAyMiBEZWNvZGVyIGRhdGEgcmVxdWVzdAotMjEgRGVjb2RlciBJLUZyYW1lPyBkb25lCiAyMCBEZWNvZGVyIERNQSBjb21wbGV0ZQogMTkgRGVjb2RlciBWQkkgcmUtaW5zZXJ0aW9uCiAxOCBEZWNvZGVyIERNQSBlcnIgKGxpbmtlZC1saXN0IGJhZCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZXQ2MXgyNTEudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ldDYxeDI1MS50eHQKaW5kZXggMWJkZWU4Zi4uMTI0NzU2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ldDYxeDI1MS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ldDYxeDI1MS50eHQKQEAgLTIzLDcgKzIzLDcgQEAKIAogMS4gQ29weXJpZ2h0CiA9PT09PT09PT09PT0KLUNvcHlyaWdodCAoQykgMjAwNiBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+CitDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+CiAKIAogMi4gRGlzY2xhaW1lcgpAQCAtMTM1LDggKzEzNSw5IEBACiA2LiBNb2R1bGUgbG9hZGluZwogPT09PT09PT09PT09PT09PT0KIFRvIHVzZSB0aGUgZHJpdmVyLCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9hZCB0aGUgImV0NjF4MjUxIiBtb2R1bGUgaW50byBtZW1vcnkKLWFmdGVyIGV2ZXJ5IG90aGVyIG1vZHVsZSByZXF1aXJlZDogInZpZGVvZGV2IiwgInVzYmNvcmUiIGFuZCwgZGVwZW5kaW5nIG9uCi10aGUgVVNCIGhvc3QgY29udHJvbGxlciB5b3UgaGF2ZSwgImVoY2ktaGNkIiwgInVoY2ktaGNkIiBvciAib2hjaS1oY2QiLgorYWZ0ZXIgZXZlcnkgb3RoZXIgbW9kdWxlIHJlcXVpcmVkOiAidmlkZW9kZXYiLCAidjRsMl9jb21tb24iLCAiY29tcGF0X2lvY3RsMzIiLAorInVzYmNvcmUiIGFuZCwgZGVwZW5kaW5nIG9uIHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIHlvdSBoYXZlLCAiZWhjaS1oY2QiLAorInVoY2ktaGNkIiBvciAib2hjaS1oY2QiLgogCiBMb2FkaW5nIGNhbiBiZSBkb25lIGFzIHNob3duIGJlbG93OgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NuOWMxMDIudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zbjljMTAyLnR4dAppbmRleCA4Y2RhNDcyLi4yOTEzZGEzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NuOWMxMDIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc245YzEwMi50eHQKQEAgLTEsNSArMSw1IEBACiAKLQkJCSBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycworCQkJIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCiAJCQkJRHJpdmVyIGZvciBMaW51eAogCQkJID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTUzLDIwICs1MywxNCBAQAogCiA0LiBPdmVydmlldyBhbmQgZmVhdHVyZXMKID09PT09PT09PT09PT09PT09PT09PT09PQotVGhpcyBkcml2ZXIgYXR0ZW1wdHMgdG8gc3VwcG9ydCB0aGUgdmlkZW8gaW50ZXJmYWNlIG9mIHRoZSBkZXZpY2VzIG1vdW50aW5nIHRoZQotU09OaVggU045QzEwMSwgU045QzEwMiBhbmQgU045QzEwMyBQQyBDYW1lcmEgQ29udHJvbGxlcnMuCi0KLUl0J3Mgd29ydGggdG8gbm90ZSB0aGF0IFNPTmlYIGhhcyBuZXZlciBjb2xsYWJvcmF0ZWQgd2l0aCB0aGUgYXV0aG9yIGR1cmluZyB0aGUKLWRldmVsb3BtZW50IG9mIHRoaXMgcHJvamVjdCwgZGVzcGl0ZSBzZXZlcmFsIHJlcXVlc3RzIGZvciBlbm91Z2ggZGV0YWlsZWQKLXNwZWNpZmljYXRpb25zIG9mIHRoZSByZWdpc3RlciB0YWJsZXMsIGNvbXByZXNzaW9uIGVuZ2luZSBhbmQgdmlkZW8gZGF0YSBmb3JtYXQKLW9mIHRoZSBhYm92ZSBjaGlwcy4gTmV2ZXJ0aGVsZXNzLCB0aGVzZSBpbmZvcm1hdGlvbnMgYXJlIG5vIGxvbmdlciBuZWNlc3NhcnksCi1iZWNhdXNlIGFsbCB0aGUgYXNwZWN0cyByZWxhdGVkIHRvIHRoZXNlIGNoaXBzIGFyZSBrbm93biBhbmQgaGF2ZSBiZWVuCi1kZXNjcmliZWQgaW4gZGV0YWlsIGluIHRoaXMgZG9jdW1lbnRhdGlvbi4KK1RoaXMgZHJpdmVyIGF0dGVtcHRzIHRvIHN1cHBvcnQgdGhlIHZpZGVvIGludGVyZmFjZSBvZiB0aGUgZGV2aWNlcyBhc3NlbWJsaW5nCit0aGUgU09OaVggU045QzEwMSwgU045QzEwMiwgU045QzEwMywgU045QzEwNSBhbmQgU045QzEyMCBQQyBDYW1lcmEgQ29udHJvbGxlcnMKKygiU045QzF4eCIgZnJvbSBub3cgb24pLgogCiBUaGUgZHJpdmVyIHJlbGllcyBvbiB0aGUgVmlkZW80TGludXgyIGFuZCBVU0IgY29yZSBtb2R1bGVzLiBJdCBoYXMgYmVlbgogZGVzaWduZWQgdG8gcnVuIHByb3Blcmx5IG9uIFNNUCBzeXN0ZW1zIGFzIHdlbGwuCiAKLVRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgU045QzEweCBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgVVJMOgorVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBTTjlDMXh4IGRyaXZlciBjYW4gYmUgZm91bmQgYXQgdGhlIGZvbGxvd2luZyBVUkw6CiBodHRwOi8vd3d3LmxpbnV4LXByb2plY3RzLm9yZy8KIAogU29tZSBvZiB0aGUgZmVhdHVyZXMgb2YgdGhlIGRyaXZlciBhcmU6CkBAIC04NSwxMSArNzksMTEgQEAKICAgaGlnaCBjb21wcmVzc2lvbiBxdWFsaXR5IChzZWUgYWxzbyAiTm90ZXMgZm9yIFY0TDIgYXBwbGljYXRpb24gZGV2ZWxvcGVycyIKICAgYW5kICJWaWRlbyBmcmFtZSBmb3JtYXRzIiBwYXJhZ3JhcGhzKTsKIC0gZnVsbCBzdXBwb3J0IGZvciB0aGUgY2FwYWJpbGl0aWVzIG9mIG1hbnkgb2YgdGhlIHBvc3NpYmxlIGltYWdlIHNlbnNvcnMgdGhhdAotICBjYW4gYmUgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IGJyaWRnZXMsIGluY2x1ZGluZywgZm9yIGluc3RhbmNlLCByZWQsIGdyZWVuLAorICBjYW4gYmUgY29ubmVjdGVkIHRvIHRoZSBTTjlDMXh4IGJyaWRnZXMsIGluY2x1ZGluZywgZm9yIGluc3RhbmNlLCByZWQsIGdyZWVuLAogICBibHVlIGFuZCBnbG9iYWwgZ2FpbiBhZGp1c3RtZW50cyBhbmQgZXhwb3N1cmUgKHNlZSAiU3VwcG9ydGVkIGRldmljZXMiCiAgIHBhcmFncmFwaCBmb3IgZGV0YWlscyk7CiAtIHVzZSBvZiBkZWZhdWx0IGNvbG9yIHNldHRpbmdzIGZvciBzdW5saWdodCBjb25kaXRpb25zOwotLSBkeW5hbWljIEkvTyBpbnRlcmZhY2UgZm9yIGJvdGggU045QzEweCBhbmQgaW1hZ2Ugc2Vuc29yIGNvbnRyb2wgYW5kCistIGR5bmFtaWMgSS9PIGludGVyZmFjZSBmb3IgYm90aCBTTjlDMXh4IGFuZCBpbWFnZSBzZW5zb3IgY29udHJvbCBhbmQKICAgbW9uaXRvcmluZyAoc2VlICJPcHRpb25hbCBkZXZpY2UgY29udHJvbCB0aHJvdWdoICdzeXNmcyciIHBhcmFncmFwaCk7CiAtIGR5bmFtaWMgZHJpdmVyIGNvbnRyb2wgdGhhbmtzIHRvIHZhcmlvdXMgbW9kdWxlIHBhcmFtZXRlcnMgKHNlZSAiTW9kdWxlCiAgIHBhcmFtZXRlcnMiIHBhcmFncmFwaCk7CkBAIC0xMzAsOCArMTI0LDggQEAKIAlDT05GSUdfVVNCX1VIQ0lfSENEPW0KIAlDT05GSUdfVVNCX09IQ0lfSENEPW0KIAotVGhlIFNOOUMxMDMgY29udHJvbGxlciBhbHNvIHByb3ZpZGVzIGEgYnVpbHQtaW4gbWljcm9waG9uZSBpbnRlcmZhY2UuIEl0IGlzCi1zdXBwb3J0ZWQgYnkgdGhlIFVTQiBBdWRpbyBkcml2ZXIgdGhhbmtzIHRvIHRoZSBBTFNBIEFQSToKK1RoZSBTTjlDMTAzLCBTTjljMTA1IGFuZCBTTjlDMTIwIGNvbnRyb2xsZXJzIGFsc28gcHJvdmlkZSBhIGJ1aWx0LWluIG1pY3JvcGhvbmUKK2ludGVyZmFjZS4gSXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0IgQXVkaW8gZHJpdmVyIHRoYW5rcyB0byB0aGUgQUxTQSBBUEk6CiAKIAkjIFNvdW5kCiAJIwpAQCAtMTU1LDE4ICsxNDksMjcgQEAKIDYuIE1vZHVsZSBsb2FkaW5nCiA9PT09PT09PT09PT09PT09PQogVG8gdXNlIHRoZSBkcml2ZXIsIGl0IGlzIG5lY2Vzc2FyeSB0byBsb2FkIHRoZSAic245YzEwMiIgbW9kdWxlIGludG8gbWVtb3J5Ci1hZnRlciBldmVyeSBvdGhlciBtb2R1bGUgcmVxdWlyZWQ6ICJ2aWRlb2RldiIsICJ1c2Jjb3JlIiBhbmQsIGRlcGVuZGluZyBvbgotdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgeW91IGhhdmUsICJlaGNpLWhjZCIsICJ1aGNpLWhjZCIgb3IgIm9oY2ktaGNkIi4KK2FmdGVyIGV2ZXJ5IG90aGVyIG1vZHVsZSByZXF1aXJlZDogInZpZGVvZGV2IiwgInY0bDJfY29tbW9uIiwgImNvbXBhdF9pb2N0bDMyIiwKKyJ1c2Jjb3JlIiBhbmQsIGRlcGVuZGluZyBvbiB0aGUgVVNCIGhvc3QgY29udHJvbGxlciB5b3UgaGF2ZSwgImVoY2ktaGNkIiwKKyJ1aGNpLWhjZCIgb3IgIm9oY2ktaGNkIi4KIAogTG9hZGluZyBjYW4gYmUgZG9uZSBhcyBzaG93biBiZWxvdzoKIAogCVtyb290QGxvY2FsaG9zdCBob21lXSMgbW9kcHJvYmUgc245YzEwMgogCi1BdCB0aGlzIHBvaW50IHRoZSBkZXZpY2VzIHNob3VsZCBiZSByZWNvZ25pemVkLiBZb3UgY2FuIGludm9rZSAiZG1lc2ciIHRvCi1hbmFseXplIGtlcm5lbCBtZXNzYWdlcyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGxvYWRpbmcgcHJvY2VzcyBoYXMgZ29uZSB3ZWxsOgorTm90ZSB0aGF0IHRoZSBtb2R1bGUgaXMgY2FsbGVkICJzbjljMTAyIiBmb3IgaGlzdG9yaWMgcmVhc29ucywgYWx0aG91Z2h0IGl0Citkb2VzIG5vdCBqdXN0IHN1cHBvcnQgdGhlIFNOOUMxMDIuCisKK0F0IHRoaXMgcG9pbnQgYWxsIHRoZSBkZXZpY2VzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIGFuZCBjb25uZWN0ZWQgdG8gdGhlIFVTQgorcG9ydHMgc2hvdWxkIGJlIHJlY29nbml6ZWQuIFlvdSBjYW4gaW52b2tlICJkbWVzZyIgdG8gYW5hbHl6ZSBrZXJuZWwgbWVzc2FnZXMKK2FuZCB2ZXJpZnkgdGhhdCB0aGUgbG9hZGluZyBwcm9jZXNzIGhhcyBnb25lIHdlbGw6CiAKIAlbdXNlckBsb2NhbGhvc3QgaG9tZV0kIGRtZXNnCiAKK29yLCB0byBpc29sYXRlIGFsbCB0aGUga2VybmVsIG1lc3NhZ2VzIGdlbmVyYXRlZCBieSB0aGUgZHJpdmVyOgorCisJW3VzZXJAbG9jYWxob3N0IGhvbWVdJCBkbWVzZyB8IGdyZXAgc245YzEwMgorCiAKIDcuIE1vZHVsZSBwYXJhbWV0ZXJzCiA9PT09PT09PT09PT09PT09PT09PQpAQCAtMTk4LDEwICsyMDEsMTEgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE5hbWU6ICAgICAgICAgICBmcmFtZV90aW1lb3V0CiBUeXBlOiAgICAgICAgICAgdWludCBhcnJheSAobWluID0gMCwgbWF4ID0gNjQpCi1TeW50YXg6ICAgICAgICAgPG5bLC4uLl0+Ci1EZXNjcmlwdGlvbjogICAgVGltZW91dCBmb3IgYSB2aWRlbyBmcmFtZSBpbiBzZWNvbmRzLiBUaGlzIHBhcmFtZXRlciBpcwotCQlzcGVjaWZpYyBmb3IgZWFjaCBkZXRlY3RlZCBjYW1lcmEuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZQotCQljaGFuZ2VkIGF0IHJ1bnRpbWUgdGhhbmtzIHRvIHRoZSAvc3lzIGZpbGVzeXN0ZW0gaW50ZXJmYWNlLgorU3ludGF4OiAgICAgICAgIDwwfG5bLC4uLl0+CitEZXNjcmlwdGlvbjogICAgVGltZW91dCBmb3IgYSB2aWRlbyBmcmFtZSBpbiBzZWNvbmRzIGJlZm9yZSByZXR1cm5pbmcgYW4gSS9PCisJCWVycm9yOyAwIGZvciBpbmZpbml0eS4gVGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWMgZm9yIGVhY2gKKwkJZGV0ZWN0ZWQgY2FtZXJhIGFuZCBjYW4gYmUgY2hhbmdlZCBhdCBydW50aW1lIHRoYW5rcyB0byB0aGUKKwkJL3N5cyBmaWxlc3lzdGVtIGludGVyZmFjZS4KIERlZmF1bHQ6ICAgICAgICAyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgZGVidWcKQEAgLTIyMywyMCArMjI3LDIxIEBACiA4LiBPcHRpb25hbCBkZXZpY2UgY29udHJvbCB0aHJvdWdoICJzeXNmcyIgWzFdCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIElmIHRoZSBrZXJuZWwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCB0aGUgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBvcHRpb24gZW5hYmxlZCwKLWl0IGlzIHBvc3NpYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGJvdGggdGhlIFNOOUMxMHggYW5kIHRoZSBpbWFnZSBzZW5zb3IKK2l0IGlzIHBvc3NpYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGJvdGggdGhlIFNOOUMxeHggYW5kIHRoZSBpbWFnZSBzZW5zb3IKIHJlZ2lzdGVycyBieSB1c2luZyB0aGUgInN5c2ZzIiBmaWxlc3lzdGVtIGludGVyZmFjZS4KIAogRXZlcnkgdGltZSBhIHN1cHBvcnRlZCBkZXZpY2UgaXMgcmVjb2duaXplZCwgYSB3cml0ZS1vbmx5IGZpbGUgbmFtZWQgImdyZWVuIiBpcwogY3JlYXRlZCBpbiB0aGUgL3N5cy9jbGFzcy92aWRlbzRsaW51eC92aWRlb1ggZGlyZWN0b3J5LiBZb3UgY2FuIHNldCB0aGUgZ3JlZW4KIGNoYW5uZWwncyBnYWluIGJ5IHdyaXRpbmcgdGhlIGRlc2lyZWQgdmFsdWUgdG8gaXQuIFRoZSB2YWx1ZSBtYXkgcmFuZ2UgZnJvbSAwCi10byAxNSBmb3IgU045QzEwMSBvciBTTjlDMTAyIGJyaWRnZXMsIGZyb20gMCB0byAxMjcgZm9yIFNOOUMxMDMgYnJpZGdlcy4KLVNpbWlsYXJseSwgb25seSBmb3IgU045QzEwMyBjb250cm9sbGVycywgYmx1ZSBhbmQgcmVkIGdhaW4gY29udHJvbCBmaWxlcyBhcmUKLWF2YWlsYWJsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnksIGZvciB3aGljaCBhY2NlcHRlZCB2YWx1ZXMgbWF5IHJhbmdlIGZyb20gMCB0bwotMTI3LgordG8gMTUgZm9yIHRoZSBTTjlDMTAxIG9yIFNOOUMxMDIgYnJpZGdlcywgZnJvbSAwIHRvIDEyNyBmb3IgdGhlIFNOOUMxMDMsCitTTjlDMTA1IGFuZCBTTjlDMTIwIGJyaWRnZXMuCitTaW1pbGFybHksIG9ubHkgZm9yIHRoZSBTTjlDMTAzLCBTTjlDMTA1IGFuZCBTTjkxMjAgY29udHJvbGxlcnMsIGJsdWUgYW5kIHJlZAorZ2FpbiBjb250cm9sIGZpbGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCBmb3Igd2hpY2ggYWNjZXB0ZWQKK3ZhbHVlcyBtYXkgcmFuZ2UgZnJvbSAwIHRvIDEyNy4KIAogVGhlcmUgYXJlIG90aGVyIGZvdXIgZW50cmllcyBpbiB0aGUgZGlyZWN0b3J5IGFib3ZlIGZvciBlYWNoIHJlZ2lzdGVyZWQgY2FtZXJhOgogInJlZyIsICJ2YWwiLCAiaTJjX3JlZyIgYW5kICJpMmNfdmFsIi4gVGhlIGZpcnN0IHR3byBmaWxlcyBjb250cm9sIHRoZQotU045QzEweCBicmlkZ2UsIHdoaWxlIHRoZSBvdGhlciB0d28gY29udHJvbCB0aGUgc2Vuc29yIGNoaXAuICJyZWciIGFuZAorU045QzF4eCBicmlkZ2UsIHdoaWxlIHRoZSBvdGhlciB0d28gY29udHJvbCB0aGUgc2Vuc29yIGNoaXAuICJyZWciIGFuZAogImkyY19yZWciIGhvbGQgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudCByZWdpc3RlciBpbmRleCB3aGVyZSB0aGUgZm9sbG93aW5nCiByZWFkaW5nL3dyaXRpbmcgb3BlcmF0aW9ucyBhcmUgYWRkcmVzc2VkIGF0IHRocm91Z2ggInZhbCIgYW5kICJpMmNfdmFsIi4gVGhlaXIKIHVzZSBpcyBub3QgaW50ZW5kZWQgZm9yIGVuZC11c2Vycy4gTm90ZSB0aGF0ICJpMmNfcmVnIiBhbmQgImkyY192YWwiIHdpbGwgbm90CkBAIC0yNTksNjEgKzI2NCw4NCBAQAogCVtyb290QGxvY2FsaG9zdCAjXSBlY2hvIDB4MTEgPiByZWcKIAlbcm9vdEBsb2NhbGhvc3QgI10gZWNobyAyID4gdmFsCiAKLU5vdGUgdGhhdCB0aGUgU045QzEweCBhbHdheXMgcmV0dXJucyAwIHdoZW4gc29tZSBvZiBpdHMgcmVnaXN0ZXJzIGFyZSByZWFkLgorTm90ZSB0aGF0IHRoZSBTTjlDMXh4IGFsd2F5cyByZXR1cm5zIDAgd2hlbiBzb21lIG9mIGl0cyByZWdpc3RlcnMgYXJlIHJlYWQuCiBUbyBhdm9pZCByYWNlIGNvbmRpdGlvbnMsIGFsbCB0aGUgSS9PIGFjY2Vzc2VzIHRvIHRoZSBhYm92ZSBmaWxlcyBhcmUKIHNlcmlhbGl6ZWQuCi0KIFRoZSBzeXNmcyBpbnRlcmZhY2UgYWxzbyBwcm92aWRlcyB0aGUgImZyYW1lX2hlYWRlciIgZW50cnksIHdoaWNoIGV4cG9ydHMgdGhlCiBmcmFtZSBoZWFkZXIgb2YgdGhlIG1vc3QgcmVjZW50IHJlcXVlc3RlZCBhbmQgY2FwdHVyZWQgdmlkZW8gZnJhbWUuIFRoZSBoZWFkZXIKLWlzIGFsd2F5cyAxOC1ieXRlcyBsb25nIGFuZCBpcyBhcHBlbmRlZCB0byBldmVyeSB2aWRlbyBmcmFtZSBieSB0aGUgU045QzEweAoraXMgYWx3YXlzIDE4LWJ5dGVzIGxvbmcgYW5kIGlzIGFwcGVuZGVkIHRvIGV2ZXJ5IHZpZGVvIGZyYW1lIGJ5IHRoZSBTTjlDMXh4CiBjb250cm9sbGVycy4gQXMgYW4gZXhhbXBsZSwgdGhpcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSB1c2VyCiBhcHBsaWNhdGlvbiBmb3IgaW1wbGVtZW50aW5nIGF1dG8tZXhwb3N1cmUgZmVhdHVyZXMgdmlhIHNvZnR3YXJlLgogCi1UaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyB0aGUgZnJhbWUgaGVhZGVyOgorVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgdGhlIGZyYW1lIGhlYWRlciBleHBvcnRlZCBieSB0aGUgU045QzEwMSBhbmQKK1NOOUMxMDI6CiAKLUJ5dGUgIyAgVmFsdWUgICAgICAgICBEZXNjcmlwdGlvbgotLS0tLS0tICAtLS0tLSAgICAgICAgIC0tLS0tLS0tLS0tCi0weDAwICAgIDB4RkYgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCi0weDAxICAgIDB4RkYgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCi0weDAyICAgIDB4MDAgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCi0weDAzICAgIDB4QzQgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCi0weDA0ICAgIDB4QzQgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCi0weDA1ICAgIDB4OTYgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCi0weDA2ICAgIDB4WFggICAgICAgICAgVW5rbm93biBtZWFuaW5nLiBUaGUgZXhhY3QgdmFsdWUgZGVwZW5kcyBvbiB0aGUgY2hpcDsKLQkJICAgICAgcG9zc2libGUgdmFsdWVzIGFyZSAweDAwLCAweDAxIGFuZCAweDIwLgotMHgwNyAgICAweFhYICAgICAgICAgIFZhcmlhYmxlIHZhbHVlLCB3aG9zZSBiaXRzIGFyZSBmZjAwdXp6Yywgd2hlcmUgZmYgaXMgYQotCQkgICAgICBmcmFtZSBjb3VudGVyLCB1IGlzIHVua25vd24sIHp6IGlzIGEgc2l6ZSBpbmRpY2F0b3IKLQkJICAgICAgKDAwID0gVkdBLCAwMSA9IFNJRiwgMTAgPSBRU0lGKSBhbmQgYyBzdGFuZHMgZm9yCi0JCSAgICAgICJjb21wcmVzc2lvbiBlbmFibGVkIiAoMSA9IHllcywgMCA9IG5vKS4KLTB4MDggICAgMHhYWCAgICAgICAgICBCcmlnaHRuZXNzIHN1bSBpbnNpZGUgQXV0by1FeHBvc3VyZSBhcmVhIChsb3ctYnl0ZSkuCi0weDA5ICAgIDB4WFggICAgICAgICAgQnJpZ2h0bmVzcyBzdW0gaW5zaWRlIEF1dG8tRXhwb3N1cmUgYXJlYSAoaGlnaC1ieXRlKS4KLQkJICAgICAgRm9yIGEgcHVyZSB3aGl0ZSBpbWFnZSwgdGhpcyBudW1iZXIgd2lsbCBiZSBlcXVhbCB0byA1MDAKLQkJICAgICAgdGltZXMgdGhlIGFyZWEgb2YgdGhlIHNwZWNpZmllZCBBRSBhcmVhLiBGb3IgaW1hZ2VzCi0JCSAgICAgIHRoYXQgYXJlIG5vdCBwdXJlIHdoaXRlLCB0aGUgdmFsdWUgc2NhbGVzIGRvd24gYWNjb3JkaW5nCi0JCSAgICAgIHRvIHJlbGF0aXZlIHdoaXRlbmVzcy4KLTB4MEEgICAgMHhYWCAgICAgICAgICBCcmlnaHRuZXNzIHN1bSBvdXRzaWRlIEF1dG8tRXhwb3N1cmUgYXJlYSAobG93LWJ5dGUpLgotMHgwQiAgICAweFhYICAgICAgICAgIEJyaWdodG5lc3Mgc3VtIG91dHNpZGUgQXV0by1FeHBvc3VyZSBhcmVhIChoaWdoLWJ5dGUpLgotCQkgICAgICBGb3IgYSBwdXJlIHdoaXRlIGltYWdlLCB0aGlzIG51bWJlciB3aWxsIGJlIGVxdWFsIHRvIDEyNQotCQkgICAgICB0aW1lcyB0aGUgYXJlYSBvdXRzaWRlIG9mIHRoZSBzcGVjaWZpZWQgQUUgYXJlYS4gRm9yCi0JCSAgICAgIGltYWdlcyB0aGF0IGFyZSBub3QgcHVyZSB3aGl0ZSwgdGhlIHZhbHVlIHNjYWxlcyBkb3duCi0JCSAgICAgIGFjY29yZGluZyB0byByZWxhdGl2ZSB3aGl0ZW5lc3MuCi0JCSAgICAgIGFjY29yZGluZyB0byByZWxhdGl2ZSB3aGl0ZW5lc3MuCitCeXRlICMgIFZhbHVlIG9yIGJpdHMgRGVzY3JpcHRpb24KKy0tLS0tLSAgLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLQorMHgwMCAgICAweEZGICAgICAgICAgIEZyYW1lIHN5bmNocm9uaXNhdGlvbiBwYXR0ZXJuCisweDAxICAgIDB4RkYgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4KKzB4MDIgICAgMHgwMCAgICAgICAgICBGcmFtZSBzeW5jaHJvbmlzYXRpb24gcGF0dGVybgorMHgwMyAgICAweEM0ICAgICAgICAgIEZyYW1lIHN5bmNocm9uaXNhdGlvbiBwYXR0ZXJuCisweDA0ICAgIDB4QzQgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4KKzB4MDUgICAgMHg5NiAgICAgICAgICBGcmFtZSBzeW5jaHJvbmlzYXRpb24gcGF0dGVybgorMHgwNiAgICBbMzowXSAgICAgICAgIFJlYWQgY2hhbm5lbCBnYWluIGNvbnRyb2wgPSAoMStSX0dBSU4vOCkKKwlbNzo0XSAgICAgICAgIEJsdWUgY2hhbm5lbCBnYWluIGNvbnRyb2wgPSAoMStCX0dBSU4vOCkKKzB4MDcgICAgWyAwIF0gICAgICAgICBDb21wcmVzc2lvbiBtb2RlLiAwPU5vIGNvbXByZXNzaW9uLCAxPUNvbXByZXNzaW9uIGVuYWJsZWQKKwlbMjoxXSAgICAgICAgIE1heGltdW0gc2NhbGUgZmFjdG9yIGZvciBjb21wcmVzc2lvbgorCVsgMyBdICAgICAgICAgMSA9IFVTQiBmaWZvKDJLIGJ5dGVzKSBpcyBmdWxsCisJWyA0IF0gICAgICAgICAxID0gRGlnaXRhbCBnYWluIGlzIGZpbmlzaAorCVsgNSBdICAgICAgICAgMSA9IEV4cG9zdXJlIGlzIGZpbmlzaAorCVs3OjZdICAgICAgICAgRnJhbWUgaW5kZXgKKzB4MDggICAgWzc6MF0gICAgICAgICBZIHN1bSBpbnNpZGUgQXV0by1FeHBvc3VyZSBhcmVhIChsb3ctYnl0ZSkKKzB4MDkgICAgWzc6MF0gICAgICAgICBZIHN1bSBpbnNpZGUgQXV0by1FeHBvc3VyZSBhcmVhIChoaWdoLWJ5dGUpCisJCSAgICAgIHdoZXJlIFkgc3VtID0gKFIvNCArIDVHLzE2ICsgQi84KSAvIDMyCisweDBBICAgIFs3OjBdICAgICAgICAgWSBzdW0gb3V0c2lkZSBBdXRvLUV4cG9zdXJlIGFyZWEgKGxvdy1ieXRlKQorMHgwQiAgICBbNzowXSAgICAgICAgIFkgc3VtIG91dHNpZGUgQXV0by1FeHBvc3VyZSBhcmVhIChoaWdoLWJ5dGUpCisJCSAgICAgIHdoZXJlIFkgc3VtID0gKFIvNCArIDVHLzE2ICsgQi84KSAvIDEyOAorMHgwQyAgICAweFhYICAgICAgICAgIE5vdCB1c2VkCisweDBEICAgIDB4WFggICAgICAgICAgTm90IHVzZWQKKzB4MEUgICAgMHhYWCAgICAgICAgICBOb3QgdXNlZAorMHgwRiAgICAweFhYICAgICAgICAgIE5vdCB1c2VkCisweDEwICAgIDB4WFggICAgICAgICAgTm90IHVzZWQKKzB4MTEgICAgMHhYWCAgICAgICAgICBOb3QgdXNlZAogCi1UaGUgZm9sbG93aW5nIGJ5dGVzIGFyZSB1c2VkIGJ5IHRoZSBTTjlDMTAzIGJyaWRnZSBvbmx5OgorVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgdGhlIGZyYW1lIGhlYWRlciBleHBvcnRlZCBieSB0aGUgU045QzEwMzoKIAotMHgwQyAgICAweFhYICAgICAgICAgIFVua25vd24gbWVhbmluZwotMHgwRCAgICAweFhYICAgICAgICAgIFVua25vd24gbWVhbmluZwotMHgwRSAgICAweFhYICAgICAgICAgIFVua25vd24gbWVhbmluZwotMHgwRiAgICAweFhYICAgICAgICAgIFVua25vd24gbWVhbmluZwotMHgxMCAgICAweFhYICAgICAgICAgIFVua25vd24gbWVhbmluZwotMHgxMSAgICAweFhYICAgICAgICAgIFVua25vd24gbWVhbmluZworQnl0ZSAjICBWYWx1ZSBvciBiaXRzIERlc2NyaXB0aW9uCistLS0tLS0gIC0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0KKzB4MDAgICAgMHhGRiAgICAgICAgICBGcmFtZSBzeW5jaHJvbmlzYXRpb24gcGF0dGVybgorMHgwMSAgICAweEZGICAgICAgICAgIEZyYW1lIHN5bmNocm9uaXNhdGlvbiBwYXR0ZXJuCisweDAyICAgIDB4MDAgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4KKzB4MDMgICAgMHhDNCAgICAgICAgICBGcmFtZSBzeW5jaHJvbmlzYXRpb24gcGF0dGVybgorMHgwNCAgICAweEM0ICAgICAgICAgIEZyYW1lIHN5bmNocm9uaXNhdGlvbiBwYXR0ZXJuCisweDA1ICAgIDB4OTYgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4KKzB4MDYgICAgWzY6MF0gICAgICAgICBSZWFkIGNoYW5uZWwgZ2FpbiBjb250cm9sID0gKDEvMitSX0dBSU4vNjQpCisweDA3ICAgIFs2OjBdICAgICAgICAgQmx1ZSBjaGFubmVsIGdhaW4gY29udHJvbCA9ICgxLzIrQl9HQUlOLzY0KQorCVs3OjRdCisweDA4ICAgIFsgMCBdICAgICAgICAgQ29tcHJlc3Npb24gbW9kZS4gMD1ObyBjb21wcmVzc2lvbiwgMT1Db21wcmVzc2lvbiBlbmFibGVkCisJWzI6MV0gICAgICAgICBNYXhpbXVtIHNjYWxlIGZhY3RvciBmb3IgY29tcHJlc3Npb24KKwlbIDMgXSAgICAgICAgIDEgPSBVU0IgZmlmbygySyBieXRlcykgaXMgZnVsbAorCVsgNCBdICAgICAgICAgMSA9IERpZ2l0YWwgZ2FpbiBpcyBmaW5pc2gKKwlbIDUgXSAgICAgICAgIDEgPSBFeHBvc3VyZSBpcyBmaW5pc2gKKwlbNzo2XSAgICAgICAgIEZyYW1lIGluZGV4CisweDA5ICAgIFs3OjBdICAgICAgICAgWSBzdW0gaW5zaWRlIEF1dG8tRXhwb3N1cmUgYXJlYSAobG93LWJ5dGUpCisweDBBICAgIFs3OjBdICAgICAgICAgWSBzdW0gaW5zaWRlIEF1dG8tRXhwb3N1cmUgYXJlYSAoaGlnaC1ieXRlKQorCQkgICAgICB3aGVyZSBZIHN1bSA9IChSLzQgKyA1Ry8xNiArIEIvOCkgLyAzMgorMHgwQiAgICBbNzowXSAgICAgICAgIFkgc3VtIG91dHNpZGUgQXV0by1FeHBvc3VyZSBhcmVhIChsb3ctYnl0ZSkKKzB4MEMgICAgWzc6MF0gICAgICAgICBZIHN1bSBvdXRzaWRlIEF1dG8tRXhwb3N1cmUgYXJlYSAoaGlnaC1ieXRlKQorCQkgICAgICB3aGVyZSBZIHN1bSA9IChSLzQgKyA1Ry8xNiArIEIvOCkgLyAxMjgKKzB4MEQgICAgWzE6MF0gICAgICAgICBBdWRpbyBmcmFtZSBudW1iZXIKKwlbIDIgXSAgICAgICAgIDEgPSBBdWRpbyBpcyByZWNvcmRpbmcKKzB4MEUgICAgWzc6MF0gICAgICAgICBBdWRpbyBzdW1tYXRpb24gKGxvdy1ieXRlKQorMHgwRiAgICBbNzowXSAgICAgICAgIEF1ZGlvIHN1bW1hdGlvbiAoaGlnaC1ieXRlKQorMHgxMCAgICBbNzowXSAgICAgICAgIEF1ZGlvIHNhbXBsZSBjb3VudAorMHgxMSAgICBbNzowXSAgICAgICAgIEF1ZGlvIHBlYWsgZGF0YSBpbiBhdWRpbyBmcmFtZQogCiBUaGUgQUUgYXJlYSAoc3gsIHN5LCBleCwgZXkpIGluIHRoZSBhY3RpdmUgd2luZG93IGNhbiBiZSBzZXQgYnkgcHJvZ3JhbW1pbmcgdGhlCi1yZWdpc3RlcnMgMHgxYywgMHgxZCwgMHgxZSBhbmQgMHgxZiBvZiB0aGUgU045QzEweCBjb250cm9sbGVycywgd2hlcmUgb25lIHVuaXQKK3JlZ2lzdGVycyAweDFjLCAweDFkLCAweDFlIGFuZCAweDFmIG9mIHRoZSBTTjlDMXh4IGNvbnRyb2xsZXJzLCB3aGVyZSBvbmUgdW5pdAogY29ycmVzcG9uZHMgdG8gMzIgcGl4ZWxzLgogCi1bMV0gUGFydCBvZiB0aGUgbWVhbmluZyBvZiB0aGUgZnJhbWUgaGVhZGVyIGhhcyBiZWVuIGRvY3VtZW50ZWQgYnkgQmVydHJpawotICAgIFNpa2tlbi4KK1sxXSBUaGUgZnJhbWUgaGVhZGVycyBleHBvcnRlZCBieSB0aGUgU045QzEwNSBhbmQgU045QzEyMCBhcmUgbm90IGRlc2NyaWJlZC4KIAogCiA5LiBTdXBwb3J0ZWQgZGV2aWNlcwpAQCAtMzIzLDE1ICszNTEsMTkgQEAKIAogRnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBhIGRyaXZlciwgd2hhdCB1bmFtYmlndW91c2x5IGlkZW50aWZ5IGEgZGV2aWNlIGFyZQogaXRzIHZlbmRvciBhbmQgcHJvZHVjdCBVU0IgaWRlbnRpZmllcnMuIEJlbG93IGlzIGEgbGlzdCBvZiBrbm93biBpZGVudGlmaWVycyBvZgotZGV2aWNlcyBtb3VudGluZyB0aGUgU045QzEweCBQQyBjYW1lcmEgY29udHJvbGxlcnM6CitkZXZpY2VzIGFzc2VtYmxpbmcgdGhlIFNOOUMxeHggUEMgY2FtZXJhIGNvbnRyb2xsZXJzOgogCiBWZW5kb3IgSUQgIFByb2R1Y3QgSUQKIC0tLS0tLS0tLSAgLS0tLS0tLS0tLQorMHgwNDcxICAgICAweDAzMjcKKzB4MDQ3MSAgICAgMHgwMzI4CiAweDBjNDUgICAgIDB4NjAwMQogMHgwYzQ1ICAgICAweDYwMDUKIDB4MGM0NSAgICAgMHg2MDA3CiAweDBjNDUgICAgIDB4NjAwOQogMHgwYzQ1ICAgICAweDYwMGQKKzB4MGM0NSAgICAgMHg2MDExCisweDBjNDUgICAgIDB4NjAxOQogMHgwYzQ1ICAgICAweDYwMjQKIDB4MGM0NSAgICAgMHg2MDI1CiAweDBjNDUgICAgIDB4NjAyOApAQCAtMzQyLDYgKzM3NCw3IEBACiAweDBjNDUgICAgIDB4NjAyZAogMHgwYzQ1ICAgICAweDYwMmUKIDB4MGM0NSAgICAgMHg2MDMwCisweDBjNDUgICAgIDB4NjAzZgogMHgwYzQ1ICAgICAweDYwODAKIDB4MGM0NSAgICAgMHg2MDgyCiAweDBjNDUgICAgIDB4NjA4MwpAQCAtMzY4LDI0ICs0MDEsNDAgQEAKIDB4MGM0NSAgICAgMHg2MGJiCiAweDBjNDUgICAgIDB4NjBiYwogMHgwYzQ1ICAgICAweDYwYmUKKzB4MGM0NSAgICAgMHg2MGMwCisweDBjNDUgICAgIDB4NjBjOAorMHgwYzQ1ICAgICAweDYwY2MKKzB4MGM0NSAgICAgMHg2MGVhCisweDBjNDUgICAgIDB4NjBlYworMHgwYzQ1ICAgICAweDYwZmEKKzB4MGM0NSAgICAgMHg2MGZiCisweDBjNDUgICAgIDB4NjBmYworMHgwYzQ1ICAgICAweDYwZmUKKzB4MGM0NSAgICAgMHg2MTMwCisweDBjNDUgICAgIDB4NjEzYQorMHgwYzQ1ICAgICAweDYxM2IKKzB4MGM0NSAgICAgMHg2MTNjCisweDBjNDUgICAgIDB4NjEzZQogCiBUaGUgbGlzdCBhYm92ZSBkb2VzIG5vdCBpbXBseSB0aGF0IGFsbCB0aG9zZSBkZXZpY2VzIHdvcmsgd2l0aCB0aGlzIGRyaXZlcjogdXAKLXVudGlsIG5vdyBvbmx5IHRoZSBvbmVzIHRoYXQgbW91bnQgdGhlIGZvbGxvd2luZyBpbWFnZSBzZW5zb3JzIGFyZSBzdXBwb3J0ZWQ7Ci1rZXJuZWwgbWVzc2FnZXMgd2lsbCBhbHdheXMgdGVsbCB5b3Ugd2hldGhlciB0aGlzIGlzIHRoZSBjYXNlOgordW50aWwgbm93IG9ubHkgdGhlIG9uZXMgdGhhdCBhc3NlbWJsZSB0aGUgZm9sbG93aW5nIGltYWdlIHNlbnNvcnMgYXJlCitzdXBwb3J0ZWQ7IGtlcm5lbCBtZXNzYWdlcyB3aWxsIGFsd2F5cyB0ZWxsIHlvdSB3aGV0aGVyIHRoaXMgaXMgdGhlIGNhc2UgKHNlZQorIk1vZHVsZSBsb2FkaW5nIiBwYXJhZ3JhcGgpOgogCiBNb2RlbCAgICAgICBNYW51ZmFjdHVyZXIKIC0tLS0tICAgICAgIC0tLS0tLS0tLS0tLQogSFY3MTMxRCAgICAgSHluaXggU2VtaWNvbmR1Y3RvciwgSW5jLgogTUktMDM0MyAgICAgTWljcm9uIFRlY2hub2xvZ3ksIEluYy4KIE9WNzYzMCAgICAgIE9tbmlWaXNpb24gVGVjaG5vbG9naWVzLCBJbmMuCitPVjc2NjAgICAgICBPbW5pVmlzaW9uIFRlY2hub2xvZ2llcywgSW5jLgogUEFTMTA2QiAgICAgUGl4QXJ0IEltYWdpbmcsIEluYy4KIFBBUzIwMkJDQSAgIFBpeEFydCBJbWFnaW5nLCBJbmMuCiBQQVMyMDJCQ0IgICBQaXhBcnQgSW1hZ2luZywgSW5jLgogVEFTNTExMEMxQiAgVGFpd2FuIEFkdmFuY2VkIFNlbnNvciBDb3Jwb3JhdGlvbgogVEFTNTEzMEQxQiAgVGFpd2FuIEFkdmFuY2VkIFNlbnNvciBDb3Jwb3JhdGlvbgogCi1BbGwgdGhlIGF2YWlsYWJsZSBjb250cm9sIHNldHRpbmdzIG9mIGVhY2ggaW1hZ2Ugc2Vuc29yIGFyZSBzdXBwb3J0ZWQgdGhyb3VnaAotdGhlIFY0TDIgaW50ZXJmYWNlLgorU29tZSBvZiB0aGUgYXZhaWxhYmxlIGNvbnRyb2wgc2V0dGluZ3Mgb2YgZWFjaCBpbWFnZSBzZW5zb3IgYXJlIHN1cHBvcnRlZAordGhyb3VnaCB0aGUgVjRMMiBpbnRlcmZhY2UuCiAKIERvbmF0aW9ucyBvZiBuZXcgbW9kZWxzIGZvciBmdXJ0aGVyIHRlc3RpbmcgYW5kIHN1cHBvcnQgd291bGQgYmUgbXVjaAogYXBwcmVjaWF0ZWQuIE5vbi1hdmFpbGFibGUgaGFyZHdhcmUgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBhdXRob3Igb2YgdGhpcwpAQCAtNDI5LDEyICs0NzgsMTUgQEAKIAogMTEuIFZpZGVvIGZyYW1lIGZvcm1hdHMgWzFdCiA9PT09PT09PT09PT09PT09PT09PT09PQotVGhlIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzIGNhbiBzZW5kIGltYWdlcyBpbiB0d28gcG9zc2libGUgdmlkZW8KLWZvcm1hdHMgb3ZlciB0aGUgVVNCOiBlaXRoZXIgbmF0aXZlICJTZXF1ZW50aWFsIFJHQiBCYXllciIgb3IgSHVmZm1hbgotY29tcHJlc3NlZC4gVGhlIGxhdHRlciBpcyB1c2VkIHRvIGFjaGlldmUgaGlnaCBmcmFtZSByYXRlcy4gVGhlIGN1cnJlbnQgdmlkZW8KLWZvcm1hdCBtYXkgYmUgc2VsZWN0ZWQgb3IgcXVlcmllZCBmcm9tIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGJ5IGNhbGxpbmcgdGhlCi1WSURJT0NfU19GTVQgb3IgVklESU9DX0dfRk1UIGlvY3RsJ3MsIGFzIGRlc2NyaWJlZCBpbiB0aGUgVjRMMiBBUEkKLXNwZWNpZmljYXRpb25zLgorVGhlIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzIGNhbiBzZW5kIGltYWdlcyBpbiB0d28gcG9zc2libGUgdmlkZW8KK2Zvcm1hdHMgb3ZlciB0aGUgVVNCOiBlaXRoZXIgbmF0aXZlICJTZXF1ZW50aWFsIFJHQiBCYXllciIgb3IgY29tcHJlc3NlZC4KK1RoZSBjb21wcmVzc2lvbiBpcyB1c2VkIHRvIGFjaGlldmUgaGlnaCBmcmFtZSByYXRlcy4gV2l0aCByZWdhcmQgdG8gdGhlCitTTjlDMTAxLCBTTjlDMTAyIGFuZCBTTjlDMTAzLCB0aGUgY29tcHJlc3Npb24gaXMgYmFzZWQgb24gdGhlIEh1ZmZtYW4gZW5jb2RpbmcKK2FsZ29yaXRobSBkZXNjcmliZWQgYmVsb3csIHdoaWxlIHRoZSBTTjlDMTA1IGFuZCBTTjlDMTIwIHRoZSBjb21wcmVzc2lvbiBpcworYmFzZWQgb24gdGhlIEpQRUcgc3RhbmRhcmQuCitUaGUgY3VycmVudCB2aWRlbyBmb3JtYXQgbWF5IGJlIHNlbGVjdGVkIG9yIHF1ZXJpZWQgZnJvbSB0aGUgdXNlciBhcHBsaWNhdGlvbgorYnkgY2FsbGluZyB0aGUgVklESU9DX1NfRk1UIG9yIFZJRElPQ19HX0ZNVCBpb2N0bCdzLCBhcyBkZXNjcmliZWQgaW4gdGhlIFY0TDIKK0FQSSBzcGVjaWZpY2F0aW9ucy4KIAogVGhlIG5hbWUgIlNlcXVlbnRpYWwgQmF5ZXIiIGluZGljYXRlcyB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZSByZWQsIGdyZWVuIGFuZAogYmx1ZSBwaXhlbHMgaW4gb25lIHZpZGVvIGZyYW1lLiBFYWNoIHBpeGVsIGlzIGFzc29jaWF0ZWQgd2l0aCBhIDgtYml0IGxvbmcKQEAgLTQ0NywxNCArNDk5LDE0IEBACiAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1tuKG0tMildICAgICAgUltuKG0tMSldCiAKIFRoZSBhYm92ZSBtYXRyaXggYWxzbyByZXByZXNlbnRzIHRoZSBzZXF1ZW50aWFsIG9yIHByb2dyZXNzaXZlIHJlYWQtb3V0IG1vZGUgb2YKLXRoZSAobiwgbSkgQmF5ZXIgY29sb3IgZmlsdGVyIGFycmF5IHVzZWQgaW4gbWFueSBDQ0QvQ01PUyBpbWFnZSBzZW5zb3JzLgordGhlIChuLCBtKSBCYXllciBjb2xvciBmaWx0ZXIgYXJyYXkgdXNlZCBpbiBtYW55IENDRCBvciBDTU9TIGltYWdlIHNlbnNvcnMuCiAKLU9uZSBjb21wcmVzc2VkIHZpZGVvIGZyYW1lIGNvbnNpc3RzIG9mIGEgYml0c3RyZWFtIHRoYXQgZW5jb2RlcyBmb3IgZXZlcnkgUiwgRywKLW9yIEIgcGl4ZWwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdmFsdWUgb2YgdGhlIHBpeGVsIGl0c2VsZiBhbmQgc29tZQotcmVmZXJlbmNlIHBpeGVsIHZhbHVlLiBQaXhlbHMgYXJlIG9yZ2FuaXNlZCBpbiB0aGUgQmF5ZXIgcGF0dGVybiBhbmQgdGhlIEJheWVyCi1zdWItcGl4ZWxzIGFyZSB0cmFja2VkIGluZGl2aWR1YWxseSBhbmQgYWx0ZXJuYXRpbmdseS4gRm9yIGV4YW1wbGUsIGluIHRoZQotZmlyc3QgbGluZSB2YWx1ZXMgZm9yIHRoZSBCIGFuZCBHMSBwaXhlbHMgYXJlIGFsdGVybmF0aW5nbHkgZW5jb2RlZCwgd2hpbGUgaW4KLXRoZSBzZWNvbmQgbGluZSB2YWx1ZXMgZm9yIHRoZSBHMiBhbmQgUiBwaXhlbHMgYXJlIGFsdGVybmF0aW5nbHkgZW5jb2RlZC4KK1RoZSBIdWZmbWFuIGNvbXByZXNzZWQgdmlkZW8gZnJhbWUgY29uc2lzdHMgb2YgYSBiaXRzdHJlYW0gdGhhdCBlbmNvZGVzIGZvcgorZXZlcnkgUiwgRywgb3IgQiBwaXhlbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB2YWx1ZSBvZiB0aGUgcGl4ZWwgaXRzZWxmIGFuZAorc29tZSByZWZlcmVuY2UgcGl4ZWwgdmFsdWUuIFBpeGVscyBhcmUgb3JnYW5pc2VkIGluIHRoZSBCYXllciBwYXR0ZXJuIGFuZCB0aGUKK0JheWVyIHN1Yi1waXhlbHMgYXJlIHRyYWNrZWQgaW5kaXZpZHVhbGx5IGFuZCBhbHRlcm5hdGluZ2x5LiBGb3IgZXhhbXBsZSwgaW4KK3RoZSBmaXJzdCBsaW5lIHZhbHVlcyBmb3IgdGhlIEIgYW5kIEcxIHBpeGVscyBhcmUgYWx0ZXJuYXRpbmdseSBlbmNvZGVkLCB3aGlsZQoraW4gdGhlIHNlY29uZCBsaW5lIHZhbHVlcyBmb3IgdGhlIEcyIGFuZCBSIHBpeGVscyBhcmUgYWx0ZXJuYXRpbmdseSBlbmNvZGVkLgogCiBUaGUgcGl4ZWwgcmVmZXJlbmNlIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYXMgZm9sbG93czoKIC0gdGhlIDQgdG9wIGxlZnQgcGl4ZWxzIGFyZSBlbmNvZGVkIGluIHJhdyB1bmNvbXByZXNzZWQgOC1iaXQgZm9ybWF0OwpAQCAtNDcwLDggKzUyMiw5IEBACiAgIGRlY29kaW5nLgogCiBUaGUgYWxnb3JpdGhtIHB1cmVseSBkZXNjcmliZXMgdGhlIGNvbnZlcnNpb24gZnJvbSBjb21wcmVzc2VkIEJheWVyIGNvZGUgdXNlZAotaW4gdGhlIFNOOUMxMHggY2hpcHMgdG8gdW5jb21wcmVzc2VkIEJheWVyLiBBZGRpdGlvbmFsIHN0ZXBzIGFyZSByZXF1aXJlZCB0bwotY29udmVydCB0aGlzIHRvIGEgY29sb3IgaW1hZ2UgKGkuZS4gYSBjb2xvciBpbnRlcnBvbGF0aW9uIGFsZ29yaXRobSkuCitpbiB0aGUgU045QzEwMSwgU045QzEwMiBhbmQgU045QzEwMyBjaGlwcyB0byB1bmNvbXByZXNzZWQgQmF5ZXIuIEFkZGl0aW9uYWwKK3N0ZXBzIGFyZSByZXF1aXJlZCB0byBjb252ZXJ0IHRoaXMgdG8gYSBjb2xvciBpbWFnZSAoaS5lLiBhIGNvbG9yIGludGVycG9sYXRpb24KK2FsZ29yaXRobSkuCiAKIFRoZSBmb2xsb3dpbmcgSHVmZm1hbiBjb2RlcyBoYXZlIGJlZW4gZm91bmQ6CiAwOiArMCAocmVsYXRpdmUgdG8gcmVmZXJlbmNlIHBpeGVsIHZhbHVlKQpAQCAtNTA2LDEzICs1NTksMTggQEAKIC0gUGhpbGlwcGUgQ292YWwgZm9yIGhhdmluZyBoZWxwZWQgdGVzdGluZyB0aGUgUEFTMjAyQkNBIGltYWdlIHNlbnNvcjsKIC0gSm9hbyBSb2RyaWdvIEZ1emFybywgSm9hbyBMaW1pcmlvLCBDbGF1ZGlvIEZpbGhvIGFuZCBDYWlvIEJlZ290dGkgZm9yIHRoZQogICBkb25hdGlvbiBvZiBhIHdlYmNhbTsKKy0gRGVubmlzIEhlaXRtYW5uIGZvciB0aGUgZG9uYXRpb24gb2YgYSB3ZWJjYW07CiAtIEpvbiBIb2xsc3Ryb20gZm9yIHRoZSBkb25hdGlvbiBvZiBhIHdlYmNhbTsKKy0gTmljayBNY0dpbGwgZm9yIHRoZSBkb25hdGlvbiBvZiBhIHdlYmNhbTsKIC0gQ2FybG9zIEVkdWFyZG8gTWVkYWdsaWEgRHlvbmlzaW8sIHdobyBhZGRlZCB0aGUgc3VwcG9ydCBmb3IgdGhlIFBBUzIwMkJDQgogICBpbWFnZSBzZW5zb3I7CiAtIFN0ZWZhbm8gTW96emksIHdobyBkb25hdGVkIDQ1IEVVOwogLSBBbmRyZXcgUGVhcmNlIGZvciB0aGUgZG9uYXRpb24gb2YgYSB3ZWJjYW07CistIEpvaG4gUHVsbGFuIGZvciB0aGUgZG9uYXRpb24gb2YgYSB3ZWJjYW07CiAtIEJlcnRyaWsgU2lra2VuLCB3aG8gcmV2ZXJzZS1lbmdpbmVlcmVkIGFuZCBkb2N1bWVudGVkIHRoZSBIdWZmbWFuIGNvbXByZXNzaW9uCi0gIGFsZ29yaXRobSB1c2VkIGluIHRoZSBTTjlDMTB4IGNvbnRyb2xsZXJzIGFuZCBpbXBsZW1lbnRlZCB0aGUgZmlyc3QgZGVjb2RlcjsKKyAgYWxnb3JpdGhtIHVzZWQgaW4gdGhlIFNOOUMxMDEsIFNOOUMxMDIgYW5kIFNOOUMxMDMgY29udHJvbGxlcnMgYW5kCisgIGltcGxlbWVudGVkIHRoZSBmaXJzdCBkZWNvZGVyOwogLSBNaXp1bm8gVGFrYWZ1bWkgZm9yIHRoZSBkb25hdGlvbiBvZiBhIHdlYmNhbTsKIC0gYW4gImFub255bW91cyIgZG9uYXRvciAod2hvIGRpZG4ndCB3YW50IGhpcyBuYW1lIHRvIGJlIHJldmVhbGVkKSBmb3IgdGhlCiAgIGRvbmF0aW9uIG9mIGEgd2ViY2FtLgorLSBhbiBhbm9ueW1vdXMgZG9uYXRvciBmb3IgdGhlIGRvbmF0aW9uIG9mIGZvdXIgd2ViY2Ftcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvemMwMzAxLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvemMwMzAxLnR4dAppbmRleCBmNDA2ZjVlLi5iZWZkZmRhY2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvemMwMzAxLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pjMDMwMS50eHQKQEAgLTIzLDcgKzIzLDcgQEAKIAogMS4gQ29weXJpZ2h0CiA9PT09PT09PT09PT0KLUNvcHlyaWdodCAoQykgMjAwNiBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+CitDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+CiAKIAogMi4gRGlzY2xhaW1lcgpAQCAtMTI1LDggKzEyNSw5IEBACiA2LiBNb2R1bGUgbG9hZGluZwogPT09PT09PT09PT09PT09PT0KIFRvIHVzZSB0aGUgZHJpdmVyLCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9hZCB0aGUgInpjMDMwMSIgbW9kdWxlIGludG8gbWVtb3J5Ci1hZnRlciBldmVyeSBvdGhlciBtb2R1bGUgcmVxdWlyZWQ6ICJ2aWRlb2RldiIsICJ1c2Jjb3JlIiBhbmQsIGRlcGVuZGluZyBvbgotdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgeW91IGhhdmUsICJlaGNpLWhjZCIsICJ1aGNpLWhjZCIgb3IgIm9oY2ktaGNkIi4KK2FmdGVyIGV2ZXJ5IG90aGVyIG1vZHVsZSByZXF1aXJlZDogInZpZGVvZGV2IiwgInY0bDJfY29tbW9uIiwgImNvbXBhdF9pb2N0bDMyIiwKKyJ1c2Jjb3JlIiBhbmQsIGRlcGVuZGluZyBvbiB0aGUgVVNCIGhvc3QgY29udHJvbGxlciB5b3UgaGF2ZSwgImVoY2ktaGNkIiwKKyJ1aGNpLWhjZCIgb3IgIm9oY2ktaGNkIi4KIAogTG9hZGluZyBjYW4gYmUgZG9uZSBhcyBzaG93biBiZWxvdzoKIApAQCAtMjExLDEyICsyMTIsMTEgQEAKIDB4MDQxZSAgICAgMHg0MDM2CiAweDA0MWUgICAgIDB4NDAzYQogMHgwNDU4ICAgICAweDcwMDcKLTB4MDQ1OCAgICAgMHg3MDBDCisweDA0NTggICAgIDB4NzAwYwogMHgwNDU4ICAgICAweDcwMGYKIDB4MDQ2ZCAgICAgMHgwOGFlCiAweDA1NWYgICAgIDB4ZDAwMwogMHgwNTVmICAgICAweGQwMDQKLTB4MDQ2ZCAgICAgMHgwOGFlCiAweDBhYzggICAgIDB4MDMwMQogMHgwYWM4ICAgICAweDMwMWIKIDB4MGFjOCAgICAgMHgzMDNiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAppbmRleCA1Yzg2ZWQ2Li42MjVhMjFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKQEAgLTE4MCw0MCArMTgwLDgxIEBACiAgIHBjaT1sYXN0YnVzPU5VTUJFUgkgICAgICAgU2NhbiB1cHRvIE5VTUJFUiBidXNzZXMsIG5vIG1hdHRlciB3aGF0IHRoZSBtcHRhYmxlIHNheXMuCiAgIHBjaT1ub2FjcGkJCURvbid0IHVzZSBBQ1BJIHRvIHNldCB1cCBQQ0kgaW50ZXJydXB0IHJvdXRpbmcuCiAKLUlPTU1VCitJT01NVSAoaW5wdXQvb3V0cHV0IG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQpCiAKLSBpb21tdT1bc2l6ZV1bLG5vYWdwXVssb2ZmXVssZm9yY2VdWyxub2ZvcmNlXVssbGVha11bLG1lbWFwZXJbPW9yZGVyXV1bLG1lcmdlXQotICAgICAgICAgWyxmb3JjZXNhY11bLGZ1bGxmbHVzaF1bLG5vbWVyZ2VdWyxub2FwZXJ0dXJlXVssY2FsZ2FyeV0KLSAgIHNpemUgIHNldCBzaXplIG9mIGlvbW11IChpbiBieXRlcykKLSAgIG5vYWdwIGRvbid0IGluaXRpYWxpemUgdGhlIEFHUCBkcml2ZXIgYW5kIHVzZSBmdWxsIGFwZXJ0dXJlLgotICAgb2ZmICAgZG9uJ3QgdXNlIHRoZSBJT01NVQotICAgbGVhayAgdHVybiBvbiBzaW1wbGUgaW9tbXUgbGVhayB0cmFjaW5nIChvbmx5IHdoZW4gQ09ORklHX0lPTU1VX0xFQUsgaXMgb24pCi0gICBtZW1hcGVyWz1vcmRlcl0gYWxsb2NhdGUgYW4gb3duIGFwZXJ0dXJlIG92ZXIgUkFNIHdpdGggc2l6ZSAzMk1CXm9yZGVyLgotICAgbm9mb3JjZSBkb24ndCBmb3JjZSBJT01NVSB1c2FnZS4gRGVmYXVsdC4KLSAgIGZvcmNlICBGb3JjZSBJT01NVS4KLSAgIG1lcmdlICBEbyBTRyBtZXJnaW5nLiBJbXBsaWVzIGZvcmNlIChleHBlcmltZW50YWwpCi0gICBub21lcmdlIERvbid0IGRvIFNHIG1lcmdpbmcuCi0gICBmb3JjZXNhYyBGb3IgU0FDIG1vZGUgZm9yIG1hc2tzIDw0MGJpdHMgIChleHBlcmltZW50YWwpCi0gICBmdWxsZmx1c2ggRmx1c2ggSU9NTVUgb24gZWFjaCBhbGxvY2F0aW9uIChkZWZhdWx0KQotICAgbm9mdWxsZmx1c2ggRG9uJ3QgdXNlIElPTU1VIGZ1bGxmbHVzaAotICAgYWxsb3dlZCAgb3ZlcndyaXRlIGlvbW11IG9mZiB3b3JrYXJvdW5kcyBmb3Igc3BlY2lmaWMgY2hpcHNldHMuCi0gICBzb2Z0CSBVc2Ugc29mdHdhcmUgYm91bmNlIGJ1ZmZlcmluZyAoZGVmYXVsdCBmb3IgSW50ZWwgbWFjaGluZXMpCi0gICBub2FwZXJ0dXJlIERvbid0IHRvdWNoIHRoZSBhcGVydHVyZSBmb3IgQUdQLgotICAgYWxsb3dkYWMgQWxsb3cgRE1BID40R0IKLQkgICAgV2hlbiBvZmYgYWxsIERNQSBvdmVyID40R0IgaXMgZm9yY2VkIHRocm91Z2ggYW4gSU9NTVUgb3IgYm91bmNlCi0JICAgIGJ1ZmZlcmluZy4KLSAgIG5vZGFjICAgIEZvcmJpZCBETUEgPjRHQgotICAgcGFuaWMgICAgQWx3YXlzIHBhbmljIHdoZW4gSU9NTVUgb3ZlcmZsb3dzCi0gICBjYWxnYXJ5ICBVc2UgdGhlIENhbGdhcnkgSU9NTVUgaWYgaXQgaXMgYXZhaWxhYmxlCisgQ3VycmVudGx5IGZvdXIgeDg2LTY0IFBDSS1ETUEgbWFwcGluZyBpbXBsZW1lbnRhdGlvbnMgZXhpc3Q6CiAKLSAgc3dpb3RsYj1wYWdlc1ssZm9yY2VdCisgICAxLiA8YXJjaC94ODZfNjQva2VybmVsL3BjaS1ub21tdS5jPjogdXNlIG5vIGhhcmR3YXJlL3NvZnR3YXJlIElPTU1VIGF0IGFsbAorICAgICAgKGUuZy4gYmVjYXVzZSB5b3UgaGF2ZSA8IDMgR0IgbWVtb3J5KS4KKyAgICAgIEtlcm5lbCBib290IG1lc3NhZ2U6ICJQQ0ktRE1BOiBEaXNhYmxpbmcgSU9NTVUiCiAKLSAgcGFnZXMgIFByZXJlc2VydmUgdGhhdCBtYW55IDEyOEsgcGFnZXMgZm9yIHRoZSBzb2Z0d2FyZSBJTyBib3VuY2UgYnVmZmVyaW5nLgotICBmb3JjZSAgRm9yY2UgYWxsIElPIHRocm91Z2ggdGhlIHNvZnR3YXJlIFRMQi4KKyAgIDIuIDxhcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWdhcnQuYz46IEFNRCBHQVJUIGJhc2VkIGhhcmR3YXJlIElPTU1VLgorICAgICAgS2VybmVsIGJvb3QgbWVzc2FnZTogIlBDSS1ETUE6IHVzaW5nIEdBUlQgSU9NTVUiCiAKLSAgY2FsZ2FyeT1bNjRrLDEyOGssMjU2ayw1MTJrLDFNLDJNLDRNLDhNXQotICBjYWxnYXJ5PVt0cmFuc2xhdGVfZW1wdHlfc2xvdHNdCi0gIGNhbGdhcnk9W2Rpc2FibGU9PFBDSSBidXMgbnVtYmVyPl0KKyAgIDMuIDxhcmNoL3g4Nl82NC9rZXJuZWwvcGNpLXN3aW90bGIuYz4gOiBTb2Z0d2FyZSBJT01NVSBpbXBsZW1lbnRhdGlvbi4gVXNlZAorICAgICAgZS5nLiBpZiB0aGVyZSBpcyBubyBoYXJkd2FyZSBJT01NVSBpbiB0aGUgc3lzdGVtIGFuZCBpdCBpcyBuZWVkIGJlY2F1c2UKKyAgICAgIHlvdSBoYXZlID4zR0IgbWVtb3J5IG9yIHRvbGQgdGhlIGtlcm5lbCB0byB1cyBpdCAoaW9tbXU9c29mdCkpCisgICAgICBLZXJuZWwgYm9vdCBtZXNzYWdlOiAiUENJLURNQTogVXNpbmcgc29mdHdhcmUgYm91bmNlIGJ1ZmZlcmluZworICAgICAgZm9yIElPIChTV0lPVExCKSIKKworICAgNC4gPGFyY2gveDg2XzY0L3BjaS1jYWxnYXJ5LmM+IDogSUJNIENhbGdhcnkgaGFyZHdhcmUgSU9NTVUuIFVzZWQgaW4gSUJNCisgICAgICBwU2VyaWVzIGFuZCB4U2VyaWVzIHNlcnZlcnMuIFRoaXMgaGFyZHdhcmUgSU9NTVUgc3VwcG9ydHMgRE1BIGFkZHJlc3MKKyAgICAgIG1hcHBpbmcgd2l0aCBtZW1vcnkgcHJvdGVjdGlvbiwgZXRjLgorICAgICAgS2VybmVsIGJvb3QgbWVzc2FnZTogIlBDSS1ETUE6IFVzaW5nIENhbGdhcnkgSU9NTVUiCisKKyBpb21tdT1bPHNpemU+XVssbm9hZ3BdWyxvZmZdWyxmb3JjZV1bLG5vZm9yY2VdWyxsZWFrWz08bnJfb2ZfbGVha19wYWdlcz5dCisJWyxtZW1hcGVyWz08b3JkZXI+XV1bLG1lcmdlXVssZm9yY2VzYWNdWyxmdWxsZmx1c2hdWyxub21lcmdlXQorCVssbm9hcGVydHVyZV1bLGNhbGdhcnldCisKKyAgR2VuZXJhbCBpb21tdSBvcHRpb25zOgorICAgIG9mZiAgICAgICAgICAgICAgICBEb24ndCBpbml0aWFsaXplIGFuZCB1c2UgYW55IGtpbmQgb2YgSU9NTVUuCisgICAgbm9mb3JjZSAgICAgICAgICAgIERvbid0IGZvcmNlIGhhcmR3YXJlIElPTU1VIHVzYWdlIHdoZW4gaXQgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQpLgorICAgIGZvcmNlICAgICAgICAgICAgICBGb3JjZSB0aGUgdXNlIG9mIHRoZSBoYXJkd2FyZSBJT01NVSBldmVuIHdoZW4gaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgbm90IGFjdHVhbGx5IG5lZWRlZCAoZS5nLiBiZWNhdXNlIDwgMyBHQiBtZW1vcnkpLgorICAgIHNvZnQgICAgICAgICAgICAgICBVc2Ugc29mdHdhcmUgYm91bmNlIGJ1ZmZlcmluZyAoU1dJT1RMQikgKGRlZmF1bHQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1hY2hpbmVzKS4gVGhpcyBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IHRoZSB1c2FnZQorICAgICAgICAgICAgICAgICAgICAgICBvZiBhbiBhdmFpbGFibGUgaGFyZHdhcmUgSU9NTVUuCisKKyAgaW9tbXUgb3B0aW9ucyBvbmx5IHJlbGV2YW50IHRvIHRoZSBBTUQgR0FSVCBoYXJkd2FyZSBJT01NVToKKyAgICA8c2l6ZT4gICAgICAgICAgICAgU2V0IHRoZSBzaXplIG9mIHRoZSByZW1hcHBpbmcgYXJlYSBpbiBieXRlcy4KKyAgICBhbGxvd2VkICAgICAgICAgICAgT3ZlcndyaXRlIGlvbW11IG9mZiB3b3JrYXJvdW5kcyBmb3Igc3BlY2lmaWMgY2hpcHNldHMuCisgICAgZnVsbGZsdXNoICAgICAgICAgIEZsdXNoIElPTU1VIG9uIGVhY2ggYWxsb2NhdGlvbiAoZGVmYXVsdCkuCisgICAgbm9mdWxsZmx1c2ggICAgICAgIERvbid0IHVzZSBJT01NVSBmdWxsZmx1c2guCisgICAgbGVhayAgICAgICAgICAgICAgIFR1cm4gb24gc2ltcGxlIGlvbW11IGxlYWsgdHJhY2luZyAob25seSB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgIENPTkZJR19JT01NVV9MRUFLIGlzIG9uKS4gRGVmYXVsdCBudW1iZXIgb2YgbGVhayBwYWdlcworICAgICAgICAgICAgICAgICAgICAgICBpcyAyMC4KKyAgICBtZW1hcGVyWz08b3JkZXI+XSAgQWxsb2NhdGUgYW4gb3duIGFwZXJ0dXJlIG92ZXIgUkFNIHdpdGggc2l6ZSAzMk1CPDxvcmRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQ6IG9yZGVyPTEsIGkuZS4gNjRNQikKKyAgICBtZXJnZSAgICAgICAgICAgICAgRG8gc2NhdHRlci1nYXRoZXIgKFNHKSBtZXJnaW5nLiBJbXBsaWVzICJmb3JjZSIKKyAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVyaW1lbnRhbCkuCisgICAgbm9tZXJnZSAgICAgICAgICAgIERvbid0IGRvIHNjYXR0ZXItZ2F0aGVyIChTRykgbWVyZ2luZy4KKyAgICBub2FwZXJ0dXJlICAgICAgICAgQXNrIHRoZSBJT01NVSBub3QgdG8gdG91Y2ggdGhlIGFwZXJ0dXJlIGZvciBBR1AuCisgICAgZm9yY2VzYWMgICAgICAgICAgIEZvcmNlIHNpbmdsZS1hZGRyZXNzIGN5Y2xlIChTQUMpIG1vZGUgZm9yIG1hc2tzIDw0MGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVyaW1lbnRhbCkuCisgICAgbm9hZ3AgICAgICAgICAgICAgIERvbid0IGluaXRpYWxpemUgdGhlIEFHUCBkcml2ZXIgYW5kIHVzZSBmdWxsIGFwZXJ0dXJlLgorICAgIGFsbG93ZGFjICAgICAgICAgICBBbGxvdyBkb3VibGUtYWRkcmVzcyBjeWNsZSAoREFDKSBtb2RlLCBpLmUuIERNQSA+NEdCLgorICAgICAgICAgICAgICAgICAgICAgICBEQUMgaXMgdXNlZCB3aXRoIDMyLWJpdCBQQ0kgdG8gcHVzaCBhIDY0LWJpdCBhZGRyZXNzIGluCisgICAgICAgICAgICAgICAgICAgICAgIHR3byBjeWNsZXMuIFdoZW4gb2ZmIGFsbCBETUEgb3ZlciA+NEdCIGlzIGZvcmNlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgIGFuIElPTU1VIG9yIHNvZnR3YXJlIGJvdW5jZSBidWZmZXJpbmcuCisgICAgbm9kYWMgICAgICAgICAgICAgIEZvcmJpZCBEQUMgbW9kZSwgaS5lLiBETUEgPjRHQi4KKyAgICBwYW5pYyAgICAgICAgICAgICAgQWx3YXlzIHBhbmljIHdoZW4gSU9NTVUgb3ZlcmZsb3dzLgorICAgIGNhbGdhcnkgICAgICAgICAgICBVc2UgdGhlIENhbGdhcnkgSU9NTVUgaWYgaXQgaXMgYXZhaWxhYmxlCisKKyAgaW9tbXUgb3B0aW9ucyBvbmx5IHJlbGV2YW50IHRvIHRoZSBzb2Z0d2FyZSBib3VuY2UgYnVmZmVyaW5nIChTV0lPVExCKSBJT01NVQorICBpbXBsZW1lbnRhdGlvbjoKKyAgICBzd2lvdGxiPTxwYWdlcz5bLGZvcmNlXQorICAgIDxwYWdlcz4gICAgICAgICAgICBQcmVyZXNlcnZlIHRoYXQgbWFueSAxMjhLIHBhZ2VzIGZvciB0aGUgc29mdHdhcmUgSU8KKyAgICAgICAgICAgICAgICAgICAgICAgYm91bmNlIGJ1ZmZlcmluZy4KKyAgICBmb3JjZSAgICAgICAgICAgICAgRm9yY2UgYWxsIElPIHRocm91Z2ggdGhlIHNvZnR3YXJlIFRMQi4KKworICBTZXR0aW5ncyBmb3IgdGhlIElCTSBDYWxnYXJ5IGhhcmR3YXJlIElPTU1VIGN1cnJlbnRseSBmb3VuZCBpbiBJQk0KKyAgcFNlcmllcyBhbmQgeFNlcmllcyBtYWNoaW5lczoKKworICAgIGNhbGdhcnk9WzY0aywxMjhrLDI1NmssNTEyaywxTSwyTSw0TSw4TV0KKyAgICBjYWxnYXJ5PVt0cmFuc2xhdGVfZW1wdHlfc2xvdHNdCisgICAgY2FsZ2FyeT1bZGlzYWJsZT08UENJIGJ1cyBudW1iZXI+XQorICAgIHBhbmljICAgICAgICAgICAgICBBbHdheXMgcGFuaWMgd2hlbiBJT01NVSBvdmVyZmxvd3MKIAogICAgIDY0aywuLi4sOE0gLSBTZXQgdGhlIHNpemUgb2YgZWFjaCBQQ0kgc2xvdCdzIHRyYW5zbGF0aW9uIHRhYmxlCiAgICAgd2hlbiB1c2luZyB0aGUgQ2FsZ2FyeSBJT01NVS4gVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNsYXRpb24KQEAgLTIzNCwxNCArMjc1LDE0IEBACiAKIERlYnVnZ2luZwogCi0gIG9vcHM9cGFuaWMgQWx3YXlzIHBhbmljIG9uIG9vcHNlcy4gRGVmYXVsdCBpcyB0byBqdXN0IGtpbGwgdGhlIHByb2Nlc3MsCi0JICAgICBidXQgdGhlcmUgaXMgYSBzbWFsbCBwcm9iYWJpbGl0eSBvZiBkZWFkbG9ja2luZyB0aGUgbWFjaGluZS4KLQkgICAgIFRoaXMgd2lsbCBhbHNvIGNhdXNlIHBhbmljcyBvbiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnMuCi0JICAgICBVc2VmdWwgdG9nZXRoZXIgd2l0aCBwYW5pYz0zMCB0byB0cmlnZ2VyIGEgcmVib290LgorICBvb3BzPXBhbmljCUFsd2F5cyBwYW5pYyBvbiBvb3BzZXMuIERlZmF1bHQgaXMgdG8ganVzdCBraWxsIHRoZSBwcm9jZXNzLAorCQlidXQgdGhlcmUgaXMgYSBzbWFsbCBwcm9iYWJpbGl0eSBvZiBkZWFkbG9ja2luZyB0aGUgbWFjaGluZS4KKwkJVGhpcyB3aWxsIGFsc28gY2F1c2UgcGFuaWNzIG9uIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9ucy4KKwkJVXNlZnVsIHRvZ2V0aGVyIHdpdGggcGFuaWM9MzAgdG8gdHJpZ2dlciBhIHJlYm9vdC4KIAotICBrc3RhY2s9TiAgIFByaW50IHRoYXQgbWFueSB3b3JkcyBmcm9tIHRoZSBrZXJuZWwgc3RhY2sgaW4gb29wcyBkdW1wcy4KKyAga3N0YWNrPU4JUHJpbnQgTiB3b3JkcyBmcm9tIHRoZSBrZXJuZWwgc3RhY2sgaW4gb29wcyBkdW1wcy4KIAotICBwYWdlZmF1bHR0cmFjZSBEdW1wIGFsbCBwYWdlIGZhdWx0cy4gT25seSB1c2VmdWwgZm9yIGV4dHJlbWUgZGVidWdnaW5nCisgIHBhZ2VmYXVsdHRyYWNlICBEdW1wIGFsbCBwYWdlIGZhdWx0cy4gT25seSB1c2VmdWwgZm9yIGV4dHJlbWUgZGVidWdnaW5nCiAJCWFuZCB3aWxsIGNyZWF0ZSBhIGxvdCBvZiBvdXRwdXQuCiAKICAgY2FsbF90cmFjZT1bb2xkfGJvdGh8bmV3ZmFsbGJhY2t8bmV3XQpAQCAtMjUxLDE1ICsyOTIsOCBAQAogCQluZXdmYWxsYmFjazogdXNlIG5ldyB1bndpbmRlciBidXQgZmFsbCBiYWNrIHRvIG9sZCBpZiBpdCBnZXRzCiAJCQlzdHVjayAoZGVmYXVsdCkKIAotICBjYWxsX3RyYWNlPVtvbGR8Ym90aHxuZXdmYWxsYmFja3xuZXddCi0JCW9sZDogdXNlIG9sZCBpbmV4YWN0IGJhY2t0cmFjZXIKLQkJbmV3OiB1c2UgbmV3IGV4YWN0IGR3YXJmMiB1bndpbmRlcgotIAkJYm90aDogcHJpbnQgZW50cmllcyBmcm9tIGJvdGgKLQkJbmV3ZmFsbGJhY2s6IHVzZSBuZXcgdW53aW5kZXIgYnV0IGZhbGwgYmFjayB0byBvbGQgaWYgaXQgZ2V0cwotCQkJc3R1Y2sgKGRlZmF1bHQpCi0KLU1pc2MKK01pc2NlbGxhbmVvdXMKIAogICBub3JlcGxhY2VtZW50ICBEb24ndCByZXBsYWNlIGluc3RydWN0aW9ucyB3aXRoIG1vcmUgYXBwcm9wcmlhdGUgb25lcwogCQkgZm9yIHRoZSBDUFUuIFRoaXMgbWF5IGJlIHVzZWZ1bCBvbiBhc3ltbWV0cmljIE1QIHN5c3RlbXMKLQkJIHdoZXJlIHNvbWUgQ1BVIGhhdmUgbGVzcyBjYXBhYmlsaXRpZXMgdGhhbiB0aGUgb3RoZXJzLgorCQkgd2hlcmUgc29tZSBDUFVzIGhhdmUgbGVzcyBjYXBhYmlsaXRpZXMgdGhhbiBvdGhlcnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Nl82NC9jcHUtaG90cGx1Zy1zcGVjIGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvY3B1LWhvdHBsdWctc3BlYwppbmRleCA1YzBmYTM0Li4zYzIzZTA1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Nl82NC9jcHUtaG90cGx1Zy1zcGVjCisrKyBiL0RvY3VtZW50YXRpb24veDg2XzY0L2NwdS1ob3RwbHVnLXNwZWMKQEAgLTIsNyArMiw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogTGludXgveDg2LTY0IHN1cHBvcnRzIENQVSBob3RwbHVnIG5vdy4gRm9yIHZhcmlvdXMgcmVhc29ucyBMaW51eCB3YW50cyB0bwota25vdyBpbiBhZHZhbmNlIGJvb3QgdGltZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ1BVcyB0aGF0IGNvdWxkIGJlIHBsdWdnZWQKK2tub3cgaW4gYWR2YW5jZSBvZiBib290IHRpbWUgdGhlIG1heGltdW0gbnVtYmVyIG9mIENQVXMgdGhhdCBjb3VsZCBiZSBwbHVnZ2VkCiBpbnRvIHRoZSBzeXN0ZW0uIEFDUEkgMy4wIGN1cnJlbnRseSBoYXMgbm8gb2ZmaWNpYWwgd2F5IHRvIHN1cHBseQogdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmaXJtd2FyZSB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODZfNjQva2VybmVsLXN0YWNrcyBiL0RvY3VtZW50YXRpb24veDg2XzY0L2tlcm5lbC1zdGFja3MKaW5kZXggYmRkZmRkZC4uNWFkNjVkNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODZfNjQva2VybmVsLXN0YWNrcworKysgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9rZXJuZWwtc3RhY2tzCkBAIC05LDkgKzksOSBAQAogZXhjZXB0IGZvciB0aGUgdGhyZWFkX2luZm8gc3RydWN0dXJlIGF0IHRoZSBib3R0b20uCiAKIEluIGFkZGl0aW9uIHRvIHRoZSBwZXIgdGhyZWFkIHN0YWNrcywgdGhlcmUgYXJlIHNwZWNpYWxpemVkIHN0YWNrcwotYXNzb2NpYXRlZCB3aXRoIGVhY2ggY3B1LiAgVGhlc2Ugc3RhY2tzIGFyZSBvbmx5IHVzZWQgd2hpbGUgdGhlIGtlcm5lbAotaXMgaW4gY29udHJvbCBvbiB0aGF0IGNwdSwgd2hlbiBhIGNwdSByZXR1cm5zIHRvIHVzZXIgc3BhY2UgdGhlCi1zcGVjaWFsaXplZCBzdGFja3MgY29udGFpbiBubyB1c2VmdWwgZGF0YS4gIFRoZSBtYWluIGNwdSBzdGFja3MgaXMKK2Fzc29jaWF0ZWQgd2l0aCBlYWNoIENQVS4gIFRoZXNlIHN0YWNrcyBhcmUgb25seSB1c2VkIHdoaWxlIHRoZSBrZXJuZWwKK2lzIGluIGNvbnRyb2wgb24gdGhhdCBDUFU7IHdoZW4gYSBDUFUgcmV0dXJucyB0byB1c2VyIHNwYWNlIHRoZQorc3BlY2lhbGl6ZWQgc3RhY2tzIGNvbnRhaW4gbm8gdXNlZnVsIGRhdGEuICBUaGUgbWFpbiBDUFUgc3RhY2tzIGFyZToKIAogKiBJbnRlcnJ1cHQgc3RhY2suICBJUlFTVEFDS1NJWkUKIApAQCAtMzIsMTcgKzMyLDE3IEBACiB0byBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0byBhIG5ldyBzdGFjayBmb3IgZGVzaWduYXRlZCBldmVudHMgc3VjaCBhcwogZG91YmxlIGZhdWx0IG9yIE5NSSwgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIGhhbmRsZSB0aGVzZSB1bnVzdWFsCiBldmVudHMgb24geDg2XzY0LiAgVGhpcyBmZWF0dXJlIGlzIGNhbGxlZCB0aGUgSW50ZXJydXB0IFN0YWNrIFRhYmxlCi0oSVNUKS4gIFRoZXJlIGNhbiBiZSB1cCB0byA3IElTVCBlbnRyaWVzIHBlciBjcHUuIFRoZSBJU1QgY29kZSBpcyBhbgotaW5kZXggaW50byB0aGUgVGFzayBTdGF0ZSBTZWdtZW50IChUU1MpLCB0aGUgSVNUIGVudHJpZXMgaW4gdGhlIFRTUwotcG9pbnQgdG8gZGVkaWNhdGVkIHN0YWNrcywgZWFjaCBzdGFjayBjYW4gYmUgYSBkaWZmZXJlbnQgc2l6ZS4KKyhJU1QpLiAgVGhlcmUgY2FuIGJlIHVwIHRvIDcgSVNUIGVudHJpZXMgcGVyIENQVS4gVGhlIElTVCBjb2RlIGlzIGFuCitpbmRleCBpbnRvIHRoZSBUYXNrIFN0YXRlIFNlZ21lbnQgKFRTUykuIFRoZSBJU1QgZW50cmllcyBpbiB0aGUgVFNTCitwb2ludCB0byBkZWRpY2F0ZWQgc3RhY2tzOyBlYWNoIHN0YWNrIGNhbiBiZSBhIGRpZmZlcmVudCBzaXplLgogCi1BbiBJU1QgaXMgc2VsZWN0ZWQgYnkgYW4gbm9uLXplcm8gdmFsdWUgaW4gdGhlIElTVCBmaWVsZCBvZiBhbgorQW4gSVNUIGlzIHNlbGVjdGVkIGJ5IGEgbm9uLXplcm8gdmFsdWUgaW4gdGhlIElTVCBmaWVsZCBvZiBhbgogaW50ZXJydXB0LWdhdGUgZGVzY3JpcHRvci4gIFdoZW4gYW4gaW50ZXJydXB0IG9jY3VycyBhbmQgdGhlIGhhcmR3YXJlCiBsb2FkcyBzdWNoIGEgZGVzY3JpcHRvciwgdGhlIGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGUgbmV3IHN0YWNrCiBwb2ludGVyIGJhc2VkIG9uIHRoZSBJU1QgdmFsdWUsIHRoZW4gaW52b2tlcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICBJZgogc29mdHdhcmUgd2FudHMgdG8gYWxsb3cgbmVzdGVkIElTVCBpbnRlcnJ1cHRzIHRoZW4gdGhlIGhhbmRsZXIgbXVzdAogYWRqdXN0IHRoZSBJU1QgdmFsdWVzIG9uIGVudHJ5IHRvIGFuZCBleGl0IGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyLgotKHRoaXMgaXMgb2NjYXNpb25hbGx5IGRvbmUsIGUuZy4gZm9yIGRlYnVnIGV4Y2VwdGlvbnMpCisoVGhpcyBpcyBvY2Nhc2lvbmFsbHkgZG9uZSwgZS5nLiBmb3IgZGVidWcgZXhjZXB0aW9ucy4pCiAKIEV2ZW50cyB3aXRoIGRpZmZlcmVudCBJU1QgY29kZXMgKGkuZS4gd2l0aCBkaWZmZXJlbnQgc3RhY2tzKSBjYW4gYmUKIG5lc3RlZC4gIEZvciBleGFtcGxlLCBhIGRlYnVnIGludGVycnVwdCBjYW4gc2FmZWx5IGJlIGludGVycnVwdGVkIGJ5IGFuCkBAIC01OCwxNyArNTgsMTcgQEAKIAogICBVc2VkIGZvciBpbnRlcnJ1cHQgMTIgLSBTdGFjayBGYXVsdCBFeGNlcHRpb24gKCNTUykuCiAKLSAgVGhpcyBhbGxvd3MgdG8gcmVjb3ZlciBmcm9tIGludmFsaWQgc3RhY2sgc2VnbWVudHMuIFJhcmVseQorICBUaGlzIGFsbG93cyB0aGUgQ1BVIHRvIHJlY292ZXIgZnJvbSBpbnZhbGlkIHN0YWNrIHNlZ21lbnRzLiBSYXJlbHkKICAgaGFwcGVucy4KIAogKiBET1VCTEVGQVVMVF9TVEFDSy4gIEVYQ0VQVElPTl9TVEtTWiAoUEFHRV9TSVpFKS4KIAogICBVc2VkIGZvciBpbnRlcnJ1cHQgOCAtIERvdWJsZSBGYXVsdCBFeGNlcHRpb24gKCNERikuCiAKLSAgSW52b2tlZCB3aGVuIGhhbmRsaW5nIGEgZXhjZXB0aW9uIGNhdXNlcyBhbm90aGVyIGV4Y2VwdGlvbi4gSGFwcGVucwotICB3aGVuIHRoZSBrZXJuZWwgaXMgdmVyeSBjb25mdXNlZCAoZS5nLiBrZXJuZWwgc3RhY2sgcG9pbnRlciBjb3JydXB0KQotICBVc2luZyBhIHNlcGFyYXRlIHN0YWNrIGFsbG93cyB0byByZWNvdmVyIGZyb20gaXQgd2VsbCBlbm91Z2ggaW4gbWFueQotICBjYXNlcyB0byBzdGlsbCBvdXRwdXQgYW4gb29wcy4KKyAgSW52b2tlZCB3aGVuIGhhbmRsaW5nIG9uZSBleGNlcHRpb24gY2F1c2VzIGFub3RoZXIgZXhjZXB0aW9uLiBIYXBwZW5zCisgIHdoZW4gdGhlIGtlcm5lbCBpcyB2ZXJ5IGNvbmZ1c2VkIChlLmcuIGtlcm5lbCBzdGFjayBwb2ludGVyIGNvcnJ1cHQpLgorICBVc2luZyBhIHNlcGFyYXRlIHN0YWNrIGFsbG93cyB0aGUga2VybmVsIHRvIHJlY292ZXIgZnJvbSBpdCB3ZWxsIGVub3VnaAorICBpbiBtYW55IGNhc2VzIHRvIHN0aWxsIG91dHB1dCBhbiBvb3BzLgogCiAqIE5NSV9TVEFDSy4gIEVYQ0VQVElPTl9TVEtTWiAoUEFHRV9TSVpFKS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvbWFjaGluZWNoZWNrIGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvbWFjaGluZWNoZWNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OGE2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9tYWNoaW5lY2hlY2sKQEAgLTAsMCArMSw3MCBAQAorCitDb25maWd1cmFibGUgc3lzZnMgcGFyYW1ldGVycyBmb3IgdGhlIHg4Ni02NCBtYWNoaW5lIGNoZWNrIGNvZGUuCisKK01hY2hpbmUgY2hlY2tzIHJlcG9ydCBpbnRlcm5hbCBoYXJkd2FyZSBlcnJvciBjb25kaXRpb25zIGRldGVjdGVkCitieSB0aGUgQ1BVLiBVbmNvcnJlY3RlZCBlcnJvcnMgdHlwaWNhbGx5IGNhdXNlIGEgbWFjaGluZSBjaGVjaworKG9mdGVuIHdpdGggcGFuaWMpLCBjb3JyZWN0ZWQgb25lcyBjYXVzZSBhIG1hY2hpbmUgY2hlY2sgbG9nIGVudHJ5LgorCitNYWNoaW5lIGNoZWNrcyBhcmUgb3JnYW5pemVkIGluIGJhbmtzIChub3JtYWxseSBhc3NvY2lhdGVkIHdpdGgKK2EgaGFyZHdhcmUgc3Vic3lzdGVtKSBhbmQgc3ViZXZlbnRzIGluIGEgYmFuay4gVGhlIGV4YWN0IG1lYW5pbmcKK29mIHRoZSBiYW5rcyBhbmQgc3ViZXZlbnQgaXMgQ1BVIHNwZWNpZmljLgorCittY2Vsb2cga25vd3MgaG93IHRvIGRlY29kZSB0aGVtLgorCitXaGVuIHlvdSBzZWUgdGhlICJNYWNoaW5lIGNoZWNrIGVycm9ycyBsb2dnZWQiIG1lc3NhZ2UgaW4gdGhlIHN5c3RlbQorbG9nIHRoZW4gbWNlbG9nIHNob3VsZCBydW4gdG8gY29sbGVjdCBhbmQgZGVjb2RlIG1hY2hpbmUgY2hlY2sgZW50cmllcworZnJvbSAvZGV2L21jZWxvZy4gTm9ybWFsbHkgbWNlbG9nIHNob3VsZCBiZSBydW4gcmVndWxhcmx5IGZyb20gYSBjcm9uam9iLgorCitFYWNoIENQVSBoYXMgYSBkaXJlY3RvcnkgaW4gL3N5cy9kZXZpY2VzL3N5c3RlbS9tYWNoaW5lY2hlY2svbWFjaGluZWNoZWNrTgorKE4gPSBDUFUgbnVtYmVyKQorCitUaGUgZGlyZWN0b3J5IGNvbnRhaW5zIHNvbWUgY29uZmlndXJhYmxlIGVudHJpZXM6CisKK0VudHJpZXM6CisKK2JhbmtOY3RsCisoTiBiYW5rIG51bWJlcikKKwk2NGJpdCBIZXggYml0bWFzayBlbmFibGluZy9kaXNhYmxpbmcgc3BlY2lmaWMgc3ViZXZlbnRzIGZvciBiYW5rIE4KKwlXaGVuIGEgYml0IGluIHRoZSBiaXRtYXNrIGlzIHplcm8gdGhlbiB0aGUgcmVzcGVjdGl2ZQorCXN1YmV2ZW50IHdpbGwgbm90IGJlIHJlcG9ydGVkLgorCUJ5IGRlZmF1bHQgYWxsIGV2ZW50cyBhcmUgZW5hYmxlZC4KKwlOb3RlIHRoYXQgQklPUyBtYWludGFpbiBhbm90aGVyIG1hc2sgdG8gZGlzYWJsZSBzcGVjaWZpYyBldmVudHMKKwlwZXIgYmFuay4gIFRoaXMgaXMgbm90IHZpc2libGUgaGVyZQorCitUaGUgZm9sbG93aW5nIGVudHJpZXMgYXBwZWFyIGZvciBlYWNoIENQVSwgYnV0IHRoZXkgYXJlIHRydWx5IHNoYXJlZAorYmV0d2VlbiBhbGwgQ1BVcy4KKworY2hlY2tfaW50ZXJ2YWwKKwlIb3cgb2Z0ZW4gdG8gcG9sbCBmb3IgY29ycmVjdGVkIG1hY2hpbmUgY2hlY2sgZXJyb3JzLCBpbiBzZWNvbmRzCisJKE5vdGUgb3V0cHV0IGlzIGhleGFkZW1pY2FsKS4gRGVmYXVsdCA1IG1pbnV0ZXMuCisKK3RvbGVyYW50CisJVG9sZXJhbmNlIGxldmVsLiBXaGVuIGEgbWFjaGluZSBjaGVjayBleGNlcHRpb24gb2NjdXJzIGZvciBhIG5vbgorCWNvcnJlY3RlZCBtYWNoaW5lIGNoZWNrIHRoZSBrZXJuZWwgY2FuIHRha2UgZGlmZmVyZW50IGFjdGlvbnMuCisJU2luY2UgbWFjaGluZSBjaGVjayBleGNlcHRpb25zIGNhbiBoYXBwZW4gYW55IHRpbWUgaXQgaXMgc29tZXRpbWVzCisJcmlza3kgZm9yIHRoZSBrZXJuZWwgdG8ga2lsbCBhIHByb2Nlc3MgYmVjYXVzZSBpdCBkZWZpZXMKKwlub3JtYWwga2VybmVsIGxvY2tpbmcgcnVsZXMuIFRoZSB0b2xlcmFuY2UgbGV2ZWwgY29uZmlndXJlcworCWhvdyBoYXJkIHRoZSBrZXJuZWwgdHJpZXMgdG8gcmVjb3ZlciBldmVuIGF0IHNvbWUgcmlzayBvZiBkZWFkbG9jay4KKworCTA6IGFsd2F5cyBwYW5pYywKKwkxOiBwYW5pYyBpZiBkZWFkbG9jayBwb3NzaWJsZSwKKwkyOiB0cnkgdG8gYXZvaWQgcGFuaWMsCisgICAJMzogbmV2ZXIgcGFuaWMgb3IgZXhpdCAoZm9yIHRlc3Rpbmcgb25seSkKKworCURlZmF1bHQ6IDEKKworCU5vdGUgdGhpcyBvbmx5IG1ha2VzIGEgZGlmZmVyZW5jZSBpZiB0aGUgQ1BVIGFsbG93cyByZWNvdmVyeQorCWZyb20gYSBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbi4gQ3VycmVudCB4ODYgQ1BVcyBnZW5lcmFsbHkgZG8gbm90LgorCit0cmlnZ2VyCisJUHJvZ3JhbSB0byBydW4gd2hlbiBhIG1hY2hpbmUgY2hlY2sgZXZlbnQgaXMgZGV0ZWN0ZWQuCisJVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB0byBydW5uaW5nIG1jZWxvZyByZWd1bGFybHkgZnJvbSBjcm9uCisJYW5kIGFsbG93cyB0byBkZXRlY3QgZXZlbnRzIGZhc3Rlci4KKworVEJEIGRvY3VtZW50IGVudHJpZXMgZm9yIEFNRCB0aHJlc2hvbGQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24KKworRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgeDg2IG1hY2hpbmUgY2hlY2sgYXJjaGl0ZWN0dXJlCitzZWUgdGhlIEludGVsIGFuZCBBTUQgYXJjaGl0ZWN0dXJlIG1hbnVhbHMgZnJvbSB0aGVpciBkZXZlbG9wZXIgd2Vic2l0ZXMuCisKK0ZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZSBzZWUKK3NlZSBodHRwOi8vb25lLmZpcnN0Zmxvb3Iub3JnL35hbmRpL21jZS5wZGYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2XzY0L21tLnR4dCBiL0RvY3VtZW50YXRpb24veDg2XzY0L21tLnR4dAppbmRleCAxMzM1NjFiLi5mNDI3OThlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Nl82NC9tbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvbW0udHh0CkBAIC0zLDI2ICszLDI2IEBACiAKIFZpcnR1YWwgbWVtb3J5IG1hcCB3aXRoIDQgbGV2ZWwgcGFnZSB0YWJsZXM6CiAKLTAwMDAwMDAwMDAwMDAwMDAgLSAwMDAwN2ZmZmZmZmZmZmZmICg9NDdiaXRzKSB1c2VyIHNwYWNlLCBkaWZmZXJlbnQgcGVyIG1tCiswMDAwMDAwMDAwMDAwMDAwIC0gMDAwMDdmZmZmZmZmZmZmZiAoPTQ3IGJpdHMpIHVzZXIgc3BhY2UsIGRpZmZlcmVudCBwZXIgbW0KIGhvbGUgY2F1c2VkIGJ5IFs0ODo2M10gc2lnbiBleHRlbnNpb24KLWZmZmY4MDAwMDAwMDAwMDAgLSBmZmZmODBmZmZmZmZmZmZmICg9NDBiaXRzKSBndWFyZCBob2xlCi1mZmZmODEwMDAwMDAwMDAwIC0gZmZmZmMwZmZmZmZmZmZmZiAoPTQ2Yml0cykgZGlyZWN0IG1hcHBpbmcgb2YgYWxsIHBoeXMuIG1lbW9yeQotZmZmZmMxMDAwMDAwMDAwMCAtIGZmZmZjMWZmZmZmZmZmZmYgKD00MGJpdHMpIGhvbGUKLWZmZmZjMjAwMDAwMDAwMDAgLSBmZmZmZTFmZmZmZmZmZmZmICg9NDViaXRzKSB2bWFsbG9jL2lvcmVtYXAgc3BhY2UKK2ZmZmY4MDAwMDAwMDAwMDAgLSBmZmZmODBmZmZmZmZmZmZmICg9NDAgYml0cykgZ3VhcmQgaG9sZQorZmZmZjgxMDAwMDAwMDAwMCAtIGZmZmZjMGZmZmZmZmZmZmYgKD00NiBiaXRzKSBkaXJlY3QgbWFwcGluZyBvZiBhbGwgcGh5cy4gbWVtb3J5CitmZmZmYzEwMDAwMDAwMDAwIC0gZmZmZmMxZmZmZmZmZmZmZiAoPTQwIGJpdHMpIGhvbGUKK2ZmZmZjMjAwMDAwMDAwMDAgLSBmZmZmZTFmZmZmZmZmZmZmICg9NDUgYml0cykgdm1hbGxvYy9pb3JlbWFwIHNwYWNlCiAuLi4gdW51c2VkIGhvbGUgLi4uCi1mZmZmZmZmZjgwMDAwMDAwIC0gZmZmZmZmZmY4MjgwMDAwMCAoPTQwTUIpICAga2VybmVsIHRleHQgbWFwcGluZywgZnJvbSBwaHlzIDAKK2ZmZmZmZmZmODAwMDAwMDAgLSBmZmZmZmZmZjgyODAwMDAwICg9NDAgTUIpICAga2VybmVsIHRleHQgbWFwcGluZywgZnJvbSBwaHlzIDAKIC4uLiB1bnVzZWQgaG9sZSAuLi4KLWZmZmZmZmZmODgwMDAwMDAgLSBmZmZmZmZmZmZmZjAwMDAwICg9MTkxOU1CKSBtb2R1bGUgbWFwcGluZyBzcGFjZQorZmZmZmZmZmY4ODAwMDAwMCAtIGZmZmZmZmZmZmZmMDAwMDAgKD0xOTE5IE1CKSBtb2R1bGUgbWFwcGluZyBzcGFjZQogCi1UaGUgZGlyZWN0IG1hcHBpbmcgY292ZXJzIGFsbCBtZW1vcnkgaW4gdGhlIHN5c3RlbSB1cHRvIHRoZSBoaWdoZXN0CitUaGUgZGlyZWN0IG1hcHBpbmcgY292ZXJzIGFsbCBtZW1vcnkgaW4gdGhlIHN5c3RlbSB1cCB0byB0aGUgaGlnaGVzdAogbWVtb3J5IGFkZHJlc3MgKHRoaXMgbWVhbnMgaW4gc29tZSBjYXNlcyBpdCBjYW4gYWxzbyBpbmNsdWRlIFBDSSBtZW1vcnkKLWhvbGVzKQoraG9sZXMpLgogCiB2bWFsbG9jIHNwYWNlIGlzIGxhemlseSBzeW5jaHJvbml6ZWQgaW50byB0aGUgZGlmZmVyZW50IFBNTDQgcGFnZXMgb2YKIHRoZSBwcm9jZXNzZXMgdXNpbmcgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciwgd2l0aCBpbml0X2xldmVsNF9wZ3QgYXMKIHJlZmVyZW5jZS4KIAotQ3VycmVudCBYODYtNjQgaW1wbGVtZW50YXRpb25zIG9ubHkgc3VwcG9ydCA0MCBiaXQgb2YgYWRkcmVzcyBzcGFjZSwKLWJ1dCB3ZSBzdXBwb3J0IHVwdG8gNDZiaXRzLiBUaGlzIGV4cGFuZHMgaW50byBNQlogc3BhY2UgaW4gdGhlIHBhZ2UgdGFibGVzLgorQ3VycmVudCBYODYtNjQgaW1wbGVtZW50YXRpb25zIG9ubHkgc3VwcG9ydCA0MCBiaXRzIG9mIGFkZHJlc3Mgc3BhY2UsCitidXQgd2Ugc3VwcG9ydCB1cCB0byA0NiBiaXRzLiBUaGlzIGV4cGFuZHMgaW50byBNQlogc3BhY2UgaW4gdGhlIHBhZ2UgdGFibGVzLgogCiAtQW5kaSBLbGVlbiwgSnVsIDIwMDQKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggOWU2YzlmZi4uYzI2OGI1MSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTI0Nyw2ICsyNDcsMTMgQEAKIFc6CWh0dHA6Ly9hY3BpLnNvdXJjZWZvcmdlLm5ldC8KIFM6CVN1cHBvcnRlZAogCitBQ1BJIFZJREVPIERSSVZFUgorUDoJTHVtaW5nIFl1CitNOglsdW1pbmcueXVAaW50ZWwuY29tCitMOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL2FjcGkuc291cmNlZm9yZ2UubmV0LworUzoJU3VwcG9ydGVkCisKIEFEMTgxNiBTT1VORCBEUklWRVIKIFA6CVRob3JzdGVuIEtuYWJlCiBNOglUaG9yc3RlbiBLbmFiZSA8bGludXhAdGhvcnN0ZW4ta25hYmUuZGU+CkBAIC0yNjgsNiArMjc1LDEyIEBACiBMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCiBTOglNYWludGFpbmVkCiAKK0FETTEwMjkgSEFSRFdBUkUgTU9OSVRPUiBEUklWRVIKK1A6CUNvcmVudGluIExhYmJlCitNOgljb3JlbnRpbi5sYWJiZUBnZW9tYXR5cy5mcgorTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZworUzoJTWFpbnRhaW5lZAorCiBBRFQ3NDZYIEZBTiBEUklWRVIKIFA6CUNvbGluIExlcm95CiBNOgljb2xpbkBjb2xpbm8ubmV0CkBAIC02NjYsNiArNjc5LDExIEBACiBXOglodHRwOi8vd3d3LmxpbnV4LWF4MjUub3JnLwogUzoJTWFpbnRhaW5lZAogCitCQUNLTElHSFQgQ0xBU1MvU1VCU1lTVEVNCitQOglSaWNoYXJkIFB1cmRpZQorTToJcnB1cmRpZUBycHN5cy5uZXQKK1M6CU1haW50YWluZWQKKwogQkFZQ09NL0hETENEUlYgRFJJVkVSUyBGT1IgQVguMjUKIFA6CVRob21hcyBTYWlsZXIKIE06CXQuc2FpbGVyQGFsdW1uaS5ldGh6LmNoCkBAIC0xMjg4LDcgKzEzMDYsNyBAQAogRVRIRVJORVQgQlJJREdFCiBQOglTdGVwaGVuIEhlbW1pbmdlcgogTToJc2hlbW1pbmdlckBsaW51eC1mb3VuZGF0aW9uLm9yZwotTDoJYnJpZGdlQG9zZGwub3JnCitMOglicmlkZ2VAbGlzdHMub3NkbC5vcmcKIFc6CWh0dHA6Ly9icmlkZ2Uuc291cmNlZm9yZ2UubmV0LwogUzoJTWFpbnRhaW5lZAogCkBAIC0xMzAzLDEzICsxMzIxLDEzIEBACiAKIEVYVDMgRklMRSBTWVNURU0KIFA6CVN0ZXBoZW4gVHdlZWRpZSwgQW5kcmV3IE1vcnRvbgotTToJc2N0QHJlZGhhdC5jb20sIGFrcG1Ab3NkbC5vcmcsIGFkaWxnZXJAY2x1c3RlcmZzLmNvbQorTToJc2N0QHJlZGhhdC5jb20sIGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmcsIGFkaWxnZXJAY2x1c3RlcmZzLmNvbQogTDoJbGludXgtZXh0NEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAogRVhUNCBGSUxFIFNZU1RFTQogUDoJU3RlcGhlbiBUd2VlZGllLCBBbmRyZXcgTW9ydG9uCi1NOglzY3RAcmVkaGF0LmNvbSwgYWtwbUBvc2RsLm9yZywgYWRpbGdlckBjbHVzdGVyZnMuY29tCitNOglzY3RAcmVkaGF0LmNvbSwgYWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZywgYWRpbGdlckBjbHVzdGVyZnMuY29tCiBMOglsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCkBAIC0xOTA2LDcgKzE5MjQsNyBAQAogCiBKT1VSTkFMTElORyBMQVlFUiBGT1IgQkxPQ0sgREVWSUNFUyAoSkJEKQogUDoJU3RlcGhlbiBUd2VlZGllLCBBbmRyZXcgTW9ydG9uCi1NOglzY3RAcmVkaGF0LmNvbSwgYWtwbUBvc2RsLm9yZworTToJc2N0QHJlZGhhdC5jb20sIGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmcKIEw6CWxpbnV4LWV4dDRAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKQEAgLTE5NzcsNyArMTk5NSw3IEBACiBNOgllYmllZGVybUB4bWlzc2lvbi5jb20KIFc6CWh0dHA6Ly93d3cueG1pc3Npb24uY29tL35lYmllZGVybS9maWxlcy9rZXhlYy8KIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKLUw6CWZhc3Rib290QG9zZGwub3JnCitMOglmYXN0Ym9vdEBsaXN0cy5vc2RsLm9yZwogUzoJTWFpbnRhaW5lZAogCiBLUFJPQkVTCkBAIC0yMzE1LDcgKzIzMzMsNyBAQAogTkVURU0gTkVUV09SSyBFTVVMQVRPUgogUDoJU3RlcGhlbiBIZW1taW5nZXIKIE06CXNoZW1taW5nZXJAbGludXgtZm91bmRhdGlvbi5vcmcKLUw6CW5ldGVtQG9zZGwub3JnCitMOgluZXRlbUBsaXN0cy5vc2RsLm9yZwogUzoJTWFpbnRhaW5lZAogCiBORVRGSUxURVIvSVBUQUJMRVMvSVBDSEFJTlMKQEAgLTIzNTQsNyArMjM3Miw3IEBACiAKIE5FVFdPUksgREVWSUNFIERSSVZFUlMKIFA6CUFuZHJldyBNb3J0b24KLU06CWFrcG1Ab3NkbC5vcmcKK006CWFrcG1AbGludXgtZm91bmRhdGlvbi5vcmcKIFA6CUplZmYgR2FyemlrCiBNOglqZ2FyemlrQHBvYm94LmNvbQogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpAQCAtMjYyMyw4ICsyNjQxLDggQEAKIFM6CU1haW50YWluZWQKIAogUENORVQzMiBORVRXT1JLIERSSVZFUgotUDoJVGhvbWFzIEJvZ2VuZPZyZmVyCi1NOgl0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlCitQOglEb24gRnJ5CitNOglwY25ldDMyQHZlcml6b24ubmV0CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKQEAgLTI3MzAsNyArMjc0OCw3IEBACiBQVlJVU0IyIFZJREVPNExJTlVYIERSSVZFUgogUDoJTWlrZSBJc2VseQogTToJaXNlbHlAcG9ib3guY29tCi1MOglwdnJ1c2IyQGlzZWx5Lm5ldAorTDoJcHZydXNiMkBpc2VseS5uZXQJKHN1YnNjcmliZXJzLW9ubHkpCiBMOgl2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20KIFc6CWh0dHA6Ly93d3cuaXNlbHkubmV0L3B2cnVzYjIvCiBTOglNYWludGFpbmVkCkBAIC0zMDQ5LDcgKzMwNjcsNyBAQAogU09GVFdBUkUgU1VTUEVORDoKIFA6CVBhdmVsIE1hY2hlawogTToJcGF2ZWxAc3VzZS5jegotTDoJbGludXgtcG1Ab3NkbC5vcmcKK0w6CWxpbnV4LXBtQGxpc3RzLm9zZGwub3JnCiBTOglNYWludGFpbmVkCiAKIFNPTklDIE5FVFdPUksgRFJJVkVSCkBAIC0zMDYxLDYgKzMwNzksOCBAQAogU09OWSBWQUlPIENPTlRST0wgREVWSUNFIERSSVZFUgogUDoJU3RlbGlhbiBQb3AKIE06CXN0ZWxpYW5AcG9waWVzLm5ldAorUDoJTWF0dGlhIERvbmdpbGkKK006CW1hbGF0dGlhQGxpbnV4Lml0CiBXOglodHRwOi8vcG9waWVzLm5ldC9zb255cGkvCiBTOglNYWludGFpbmVkCiAKQEAgLTM3NzksNiArMzc5OSw3IEBACiBNOglha0BzdXNlLmRlCiBMOglkaXNjdXNzQHg4Ni02NC5vcmcKIFc6CWh0dHA6Ly93d3cueDg2LTY0Lm9yZworVDoJcXVpbHQgZnRwOi8vZnRwLmZpcnN0Zmxvb3Iub3JnL3B1Yi9hay94ODZfNjQvcXVpbHQtY3VycmVudAogUzoJTWFpbnRhaW5lZAogCiBZQU0gRFJJVkVSIEZPUiBBWC4yNQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBiNmM4NzkwLi4zMGI2NmUyIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgotU1VCTEVWRUwgPSAyMAotRVhUUkFWRVJTSU9OID0KK1NVQkxFVkVMID0gMjEKK0VYVFJBVkVSU0lPTiA9IC1yYzEKIE5BTUUgPSBIb21pY2lkYWwgRHdhcmYgSGFtc3RlcgogCiAjICpET0NVTUVOVEFUSU9OKgpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDQ2YTY2YzYuLjE1OTkxMmMgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTI0LDcgKzI0LDcgQEAKICAgdG9kYXkgTGludXggYWxzbyBydW5zIG9uIChhdCBsZWFzdCkgdGhlIENvbXBhcSBBbHBoYSBBWFAsIFN1biBTUEFSQyBhbmQKICAgVWx0cmFTUEFSQywgTW90b3JvbGEgNjgwMDAsIFBvd2VyUEMsIFBvd2VyUEM2NCwgQVJNLCBIaXRhY2hpIFN1cGVySCwgQ2VsbCwKICAgSUJNIFMvMzkwLCBNSVBTLCBIUCBQQS1SSVNDLCBJbnRlbCBJQS02NCwgREVDIFZBWCwgQU1EIHg4Ni02NCwgQVhJUyBDUklTLAotICBDcmlzLCBYdGVuc2EsIEFWUjMyIGFuZCBSZW5lc2FzIE0zMlIgYXJjaGl0ZWN0dXJlcy4KKyAgWHRlbnNhLCBBVlIzMiBhbmQgUmVuZXNhcyBNMzJSIGFyY2hpdGVjdHVyZXMuCiAKICAgTGludXggaXMgZWFzaWx5IHBvcnRhYmxlIHRvIG1vc3QgZ2VuZXJhbC1wdXJwb3NlIDMyLSBvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcwogICBhcyBsb25nIGFzIHRoZXkgaGF2ZSBhIHBhZ2VkIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgKFBNTVUpIGFuZCBhIHBvcnQgb2YgdGhlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA1Yzc5NTE5Li40NDA5NTYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTI0NSw2ICsyNDUsOCBAQAogCiBjb25maWcgQVJDSF9JT1AxM1hYCiAJYm9vbCAiSU9QMTN4eC1iYXNlZCIKKwlkZXBlbmRzIG9uIE1NVQorCXNlbGVjdCBQTEFUX0lPUAogCXNlbGVjdCBQQ0kKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJbnRlbCdzIElPUDEzWFggKFhTY2FsZSkgZmFtaWx5IG9mIHByb2Nlc3NvcnMuCkBAIC0yODMsNiArMjg1LDE0IEBACiAJICBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGNvbW1lbnRzIGFib3V0IHRoZSBMaW51eCBrZXJuZWwgcG9ydAogCSAgdG8gdGhpcyBib2FyZCwgc2VuZCBlLW1haWwgdG8gPHNqaGlsbEBjb3R3LmNvbT4uCiAKK2NvbmZpZyBBUkNIX05TOVhYWAorCWJvb2wgIk5ldFNpbGljb24gTlM5eHh4IgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBOZXRTaWxpY29uIE5TOXh4eAorCSAgU3lzdGVtLgorCisJICA8aHR0cDovL3d3dy5kaWdpLmNvbS9wcm9kdWN0cy9taWNyb3Byb2Nlc3NvcnMvaW5kZXguanNwPgorCiBjb25maWcgQVJDSF9QTlg0MDA4CiAJYm9vbCAiUGhpbGlwcyBOZXhwZXJpYSBQTlg0MDA4IE1vYmlsZSIKIAloZWxwCkBAIC0yOTIsNiArMzAyLDcgQEAKIAlib29sICJQWEEyeHgtYmFzZWQiCiAJZGVwZW5kcyBvbiBNTVUKIAlzZWxlY3QgQVJDSF9NVERfWElQCisJc2VsZWN0IEdFTkVSSUNfVElNRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEludGVsJ3MgUFhBMlhYIHByb2Nlc3NvciBsaW5lLgogCkBAIC0zMTYsNyArMzI3LDcgQEAKIAkgIFN1cHBvcnQgZm9yIFN0cm9uZ0FSTSAxMXgwIGJhc2VkIGJvYXJkcy4KIAogY29uZmlnIEFSQ0hfUzNDMjQxMAotCWJvb2wgIlNhbXN1bmcgUzNDMjQxMCwgUzNDMjQxMiwgUzNDMjQxMywgUzNDMjQ0MCwgUzNDMjQ0MiIKKwlib29sICJTYW1zdW5nIFMzQzI0MTAsIFMzQzI0MTIsIFMzQzI0MTMsIFMzQzI0NDAsIFMzQzI0NDIsIFMzQzI0NDMiCiAJaGVscAogCSAgU2Ftc3VuZyBTM0MyNDEwWCBDUFUgYmFzZWQgc3lzdGVtcywgc3VjaCBhcyB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzCiAJICBCQVNUICg8aHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIxMTBJVFgvPiksIHRoZSBJUEFRIDE5NDAgb3IKQEAgLTM3Niw3ICszODcsMTYgQEAKIAogc291cmNlICJhcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWciCiAKK3NvdXJjZSAiYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWciCisKK2lmIEFSQ0hfUzNDMjQxMAorc291cmNlICJhcmNoL2FybS9tYWNoLXMzYzI0MDAvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnIgorc291cmNlICJhcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZyIKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1zM2MyNDQyL0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtczNjMjQ0My9LY29uZmlnIgorZW5kaWYKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyIKIApAQCAtMzkwLDEwICs0MTAsMTIgQEAKIAogc291cmNlICJhcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWciCiAKLXNvdXJjZSAiYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbmV0eC9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtbnM5eHh4L0tjb25maWciCisKICMgRGVmaW5pdGlvbnMgdG8gbWFrZSBsaWZlIGVhc2llcgogY29uZmlnIEFSQ0hfQUNPUk4KIAlib29sCkBAIC00MDUsNyArNDI3LDcgQEAKIAogY29uZmlnIElXTU1YVAogCWJvb2wgIkVuYWJsZSBpV01NWHQgc3VwcG9ydCIKLQlkZXBlbmRzIENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMKKwlkZXBlbmRzIG9uIENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMKIAlkZWZhdWx0IHkgaWYgUFhBMjd4CiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGlXTU1YdCBjb250ZXh0IHN3aXRjaGluZyBhdCBydW4gdGltZSBpZgpAQCAtNzUxLDYgKzc3MywyMCBAQAogCSAgYmUgbGlua2VkIGZvciBhbmQgc3RvcmVkIHRvLiAgVGhpcyBhZGRyZXNzIGlzIGRlcGVuZGVudCBvbiB5b3VyCiAJICBvd24gZmxhc2ggdXNhZ2UuCiAKK2NvbmZpZyBLRVhFQworCWJvb2wgIktleGVjIHN5c3RlbSBjYWxsIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJaGVscAorCSAga2V4ZWMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IGltcGxlbWVudHMgdGhlIGFiaWxpdHkgdG8gc2h1dGRvd24geW91cgorCSAgY3VycmVudCBrZXJuZWwsIGFuZCB0byBzdGFydCBhbm90aGVyIGtlcm5lbC4gIEl0IGlzIGxpa2UgYSByZWJvb3QKKwkgIGJ1dCBpdCBpcyBpbmRlcGVkZW50IG9mIHRoZSBzeXN0ZW0gZmlybXdhcmUuICAgQW5kIGxpa2UgYSByZWJvb3QKKwkgIHlvdSBjYW4gc3RhcnQgYW55IGtlcm5lbCB3aXRoIGl0LCBub3QganVzdCBMaW51eC4KKworCSAgSXQgaXMgYW4gb25nb2luZyBwcm9jZXNzIHRvIGJlIGNlcnRhaW4gdGhlIGhhcmR3YXJlIGluIGEgbWFjaGluZQorCSAgaXMgcHJvcGVybHkgc2h1dGRvd24sIHNvIGRvIG5vdCBiZSBzdXJwcmlzZWQgaWYgdGhpcyBjb2RlIGRvZXMgbm90CisJICBpbml0aWFsbHkgd29yayBmb3IgeW91LiAgSXQgbWF5IGhlbHAgdG8gZW5hYmxlIGRldmljZSBob3RwbHVnZ2luZworCSAgc3VwcG9ydC4KKwogZW5kbWVudQogCiBpZiAoQVJDSF9TQTExMDAgfHwgQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfT01BUCB8fCBBUkNIX0lNWCApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDAwMGYxMTAuLmFiOWYyZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC0xMjQsMTAgKzEyNCwxMiBAQAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9INzIwWCkJICAgOj0gaDcyMHgKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQUFFQzIwMDApICAgOj0gYWFlYzIwMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUkVBTFZJRVcpICAgOj0gcmVhbHZpZXcKLSBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQVQ5MSkgICAgICAgOj0gYXQ5MXJtOTIwMAotIG1hY2hpbmUtJChDT05GSUdfQVJDSF9FUDkzWFgpICAgICA6PSBlcDkzeHgKLSBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUE5YNDAwOCkgICAgOj0gcG54NDAwOAotIG1hY2hpbmUtJChDT05GSUdfQVJDSF9ORVRYKSAgICAgICA6PSBuZXR4CisgbWFjaGluZS0kKENPTkZJR19BUkNIX0FUOTEpCSAgIDo9IGF0OTEKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfRVA5M1hYKQkgICA6PSBlcDkzeHgKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUE5YNDAwOCkJICAgOj0gcG54NDAwOAorIG1hY2hpbmUtJChDT05GSUdfQVJDSF9ORVRYKQkgICA6PSBuZXR4CisgbWFjaGluZS0kKENPTkZJR19BUkNIX05TOVhYWCkJICAgOj0gbnM5eHh4CisgdGV4dG9mcy0kKENPTkZJR19BUkNIX05TOVhYWCkJICAgOj0gMHgwMDEwODAwMAogCiBpZmVxICgkKENPTkZJR19BUkNIX0VCU0ExMTApLHkpCiAjIFRoaXMgaXMgd2hhdCBoYXBwZW5zIGlmIHlvdSBmb3JnZXQgdGhlIElPQ1MxNiBsaW5lLgpAQCAtMTQ5LDcgKzE1MSw3IEBACiBlbHNlCiBNQUNISU5FICA6PQogZW5kaWYKLSAgCisKIGV4cG9ydAlURVhUX09GRlNFVCBHWkZMQUdTIE1NVUVYVAogCiAjIERvIHdlIGhhdmUgRkFTVEZQRT8KQEAgLTE2MSw2ICsxNjMsMTEgQEAKICMgSWYgd2UgaGF2ZSBhIG1hY2hpbmUtc3BlY2lmaWMgZGlyZWN0b3J5LCB0aGVuIGluY2x1ZGUgaXQgaW4gdGhlIGJ1aWxkLgogY29yZS15CQkJCSs9IGFyY2gvYXJtL2tlcm5lbC8gYXJjaC9hcm0vbW0vIGFyY2gvYXJtL2NvbW1vbi8KIGNvcmUteQkJCQkrPSAkKE1BQ0hJTkUpCitjb3JlLSQoQ09ORklHX0FSQ0hfUzNDMjQxMCkJKz0gYXJjaC9hcm0vbWFjaC1zM2MyNDAwLworY29yZS0kKENPTkZJR19BUkNIX1MzQzI0MTApCSs9IGFyY2gvYXJtL21hY2gtczNjMjQxMi8KK2NvcmUtJChDT05GSUdfQVJDSF9TM0MyNDEwKQkrPSBhcmNoL2FybS9tYWNoLXMzYzI0NDAvCitjb3JlLSQoQ09ORklHX0FSQ0hfUzNDMjQxMCkJKz0gYXJjaC9hcm0vbWFjaC1zM2MyNDQyLworY29yZS0kKENPTkZJR19BUkNIX1MzQzI0MTApCSs9IGFyY2gvYXJtL21hY2gtczNjMjQ0My8KIGNvcmUtJChDT05GSUdfRlBFX05XRlBFKQkrPSBhcmNoL2FybS9ud2ZwZS8KIGNvcmUtJChDT05GSUdfRlBFX0ZBU1RGUEUpCSs9ICQoRkFTVEZQRV9PQkopCiBjb3JlLSQoQ09ORklHX1ZGUCkJCSs9IGFyY2gvYXJtL3ZmcC8KQEAgLTE2OCw2ICsxNzUsNyBAQAogIyBJZiB3ZSBoYXZlIGEgY29tbW9uIHBsYXRmb3JtIGRpcmVjdG9yeSwgdGhlbiBpbmNsdWRlIGl0IGluIHRoZSBidWlsZC4KIGNvcmUtJChDT05GSUdfUExBVF9JT1ApCQkrPSBhcmNoL2FybS9wbGF0LWlvcC8KIGNvcmUtJChDT05GSUdfQVJDSF9PTUFQKQkrPSBhcmNoL2FybS9wbGF0LW9tYXAvCitjb3JlLSQoQ09ORklHX1BMQVRfUzNDMjRYWCkJCSs9IGFyY2gvYXJtL3BsYXQtczNjMjR4eC8KIAogZHJpdmVycy0kKENPTkZJR19PUFJPRklMRSkgICAgICArPSBhcmNoL2FybS9vcHJvZmlsZS8KIGRyaXZlcnMtJChDT05GSUdfQVJDSF9DTFBTNzUwMCkJKz0gZHJpdmVycy9hY29ybi9jaGFyLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC8uZ2l0aWdub3JlIGIvYXJjaC9hcm0vYm9vdC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MWEwODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitJbWFnZQorekltYWdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvLmdpdGlnbm9yZSBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZmVlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitwaWdneS5negpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jIGIvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCmluZGV4IDJlNjM1YjguLjZmYmU3NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYworKysgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLSN1bmRlZiBERUJVRwogI3VuZGVmIFNUQVRTCiAKICNpZmRlZiBTVEFUUwpAQCAtNjYsMTQgKzY1LDEzIEBACiB9OwogCiBzdHJ1Y3QgZG1hYm91bmNlX2RldmljZV9pbmZvIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0KIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IGxpc3RfaGVhZCBzYWZlX2J1ZmZlcnM7CiAjaWZkZWYgU1RBVFMKIAl1bnNpZ25lZCBsb25nIHRvdGFsX2FsbG9jczsKIAl1bnNpZ25lZCBsb25nIG1hcF9vcF9jb3VudDsKIAl1bnNpZ25lZCBsb25nIGJvdW5jZV9jb3VudDsKKwlpbnQgYXR0cl9yZXM7CiAjZW5kaWYKIAlzdHJ1Y3QgZG1hYm91bmNlX3Bvb2wJc21hbGw7CiAJc3RydWN0IGRtYWJvdW5jZV9wb29sCWxhcmdlOwpAQCAtODEsMzQgKzc5LDI0IEBACiAJcndsb2NrX3QgbG9jazsKIH07CiAKLXN0YXRpYyBMSVNUX0hFQUQoZG1hYm91bmNlX2RldnMpOwotCiAjaWZkZWYgU1RBVFMKLXN0YXRpYyB2b2lkIHByaW50X2FsbG9jX3N0YXRzKHN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvKQorc3RhdGljIHNzaXplX3QgZG1hYm91bmNlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKIHsKLQlwcmludGsoS0VSTl9JTkZPCi0JCSIlczogZG1hYm91bmNlOiBzYnA6ICVsdSwgbGJwOiAlbHUsIG90aGVyOiAlbHUsIHRvdGFsOiAlbHVcbiIsCi0JCWRldmljZV9pbmZvLT5kZXYtPmJ1c19pZCwKLQkJZGV2aWNlX2luZm8tPnNtYWxsLmFsbG9jcywgZGV2aWNlX2luZm8tPmxhcmdlLmFsbG9jcywKKwlzdHJ1Y3QgZG1hYm91bmNlX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbyA9IGRldi0+YXJjaGRhdGEuZG1hYm91bmNlOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1XG4iLAorCQlkZXZpY2VfaW5mby0+c21hbGwuYWxsb2NzLAorCQlkZXZpY2VfaW5mby0+bGFyZ2UuYWxsb2NzLAogCQlkZXZpY2VfaW5mby0+dG90YWxfYWxsb2NzIC0gZGV2aWNlX2luZm8tPnNtYWxsLmFsbG9jcyAtCiAJCQlkZXZpY2VfaW5mby0+bGFyZ2UuYWxsb2NzLAotCQlkZXZpY2VfaW5mby0+dG90YWxfYWxsb2NzKTsKKwkJZGV2aWNlX2luZm8tPnRvdGFsX2FsbG9jcywKKwkJZGV2aWNlX2luZm8tPm1hcF9vcF9jb3VudCwKKwkJZGV2aWNlX2luZm8tPmJvdW5jZV9jb3VudCk7CiB9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihkbWFib3VuY2Vfc3RhdHMsIDA0MDAsIGRtYWJvdW5jZV9zaG93LCBOVUxMKTsKICNlbmRpZgogCi0vKiBmaW5kIHRoZSBnaXZlbiBkZXZpY2UgaW4gdGhlIGRtYWJvdW5jZSBkZXZpY2UgbGlzdCAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hYm91bmNlX2RldmljZV9pbmZvICoKLWZpbmRfZG1hYm91bmNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRtYWJvdW5jZV9kZXZpY2VfaW5mbyAqZDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZCwgJmRtYWJvdW5jZV9kZXZzLCBub2RlKQotCQlpZiAoZC0+ZGV2ID09IGRldikKLQkJCXJldHVybiBkOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIAogLyogYWxsb2NhdGUgYSAnc2FmZScgYnVmZmVyIGFuZCBrZWVwIHRyYWNrIG9mIGl0ICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWZlX2J1ZmZlciAqCkBAIC0xNjIsOCArMTUwLDYgQEAKIAlpZiAocG9vbCkKIAkJcG9vbC0+YWxsb2NzKys7CiAJZGV2aWNlX2luZm8tPnRvdGFsX2FsbG9jcysrOwotCWlmIChkZXZpY2VfaW5mby0+dG90YWxfYWxsb2NzICUgMTAwMCA9PSAwKQotCQlwcmludF9hbGxvY19zdGF0cyhkZXZpY2VfaW5mbyk7CiAjZW5kaWYKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2aWNlX2luZm8tPmxvY2ssIGZsYWdzKTsKQEAgLTIxOCwyMCArMjA0LDExIEBACiAKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKLSNpZmRlZiBTVEFUUwotc3RhdGljIHZvaWQgcHJpbnRfbWFwX3N0YXRzKHN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvKQotewotCWRldl9pbmZvKGRldmljZV9pbmZvLT5kZXYsCi0JCSJkbWFib3VuY2U6IG1hcF9vcF9jb3VudD0lbHUsIGJvdW5jZV9jb3VudD0lbHVcbiIsCi0JCWRldmljZV9pbmZvLT5tYXBfb3BfY291bnQsIGRldmljZV9pbmZvLT5ib3VuY2VfY291bnQpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAogbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCiAJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hYm91bmNlX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbyA9IGZpbmRfZG1hYm91bmNlX2RldihkZXYpOworCXN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvID0gZGV2LT5hcmNoZGF0YS5kbWFib3VuY2U7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlpbnQgbmVlZHNfYm91bmNlID0gMDsKIApAQCAtMjgxLDEwICsyNTgsMTQgQEAKIAkJcHRyID0gYnVmLT5zYWZlOwogCiAJCWRtYV9hZGRyID0gYnVmLT5zYWZlX2RtYV9hZGRyOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdlIGRvbid0IG5lZWQgdG8gc3luYyB0aGUgRE1BIGJ1ZmZlciBzaW5jZQorCQkgKiBpdCB3YXMgYWxsb2NhdGVkIHZpYSB0aGUgY29oZXJlbnQgYWxsb2NhdG9ycy4KKwkJICovCisJCWNvbnNpc3RlbnRfc3luYyhwdHIsIHNpemUsIGRpcik7CiAJfQogCi0JY29uc2lzdGVudF9zeW5jKHB0ciwgc2l6ZSwgZGlyKTsKLQogCXJldHVybiBkbWFfYWRkcjsKIH0KIApAQCAtMjkyLDcgKzI3Myw3IEBACiB1bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKIAkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvID0gZmluZF9kbWFib3VuY2VfZGV2KGRldik7CisJc3RydWN0IGRtYWJvdW5jZV9kZXZpY2VfaW5mbyAqZGV2aWNlX2luZm8gPSBkZXYtPmFyY2hkYXRhLmRtYWJvdW5jZTsKIAlzdHJ1Y3Qgc2FmZV9idWZmZXIgKmJ1ZiA9IE5VTEw7CiAKIAkvKgpAQCAtMzE3LDEyICsyOTgsMTIgQEAKIAkJRE9fU1RBVFMgKCBkZXZpY2VfaW5mby0+Ym91bmNlX2NvdW50KysgKTsKIAogCQlpZiAoZGlyID09IERNQV9GUk9NX0RFVklDRSB8fCBkaXIgPT0gRE1BX0JJRElSRUNUSU9OQUwpIHsKLQkJCXVuc2lnbmVkIGxvbmcgcHRyOworCQkJdm9pZCAqcHRyID0gYnVmLT5wdHI7CiAKIAkJCWRldl9kYmcoZGV2LAogCQkJCSIlczogY29weSBiYWNrIHNhZmUgJXAgdG8gdW5zYWZlICVwIHNpemUgJWRcbiIsCi0JCQkJX19mdW5jX18sIGJ1Zi0+c2FmZSwgYnVmLT5wdHIsIHNpemUpOwotCQkJbWVtY3B5KGJ1Zi0+cHRyLCBidWYtPnNhZmUsIHNpemUpOworCQkJCV9fZnVuY19fLCBidWYtPnNhZmUsIHB0ciwgc2l6ZSk7CisJCQltZW1jcHkocHRyLCBidWYtPnNhZmUsIHNpemUpOwogCiAJCQkvKgogCQkJICogRE1BIGJ1ZmZlcnMgbXVzdCBoYXZlIHRoZSBzYW1lIGNhY2hlIHByb3BlcnRpZXMKQEAgLTMzMiw4ICszMTMsOCBAQAogCQkJICogYmlkaXJlY3Rpb25hbCBjYXNlIGJlY2F1c2Ugd2Uga25vdyB0aGUgY2FjaGUKIAkJCSAqIGxpbmVzIHdpbGwgYmUgY29oZXJlbnQgd2l0aCB0aGUgZGF0YSB3cml0dGVuLgogCQkJICovCi0JCQlwdHIgPSAodW5zaWduZWQgbG9uZylidWYtPnB0cjsKIAkJCWRtYWNfY2xlYW5fcmFuZ2UocHRyLCBwdHIgKyBzaXplKTsKKwkJCW91dGVyX2NsZWFuX3JhbmdlKF9fcGEocHRyKSwgX19wYShwdHIpICsgc2l6ZSk7CiAJCX0KIAkJZnJlZV9zYWZlX2J1ZmZlcihkZXZpY2VfaW5mbywgYnVmKTsKIAl9CkBAIC0zNDMsNyArMzI0LDcgQEAKIHN5bmNfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCiAJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hYm91bmNlX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbyA9IGZpbmRfZG1hYm91bmNlX2RldihkZXYpOworCXN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvID0gZGV2LT5hcmNoZGF0YS5kbWFib3VuY2U7CiAJc3RydWN0IHNhZmVfYnVmZmVyICpidWYgPSBOVUxMOwogCiAJaWYgKGRldmljZV9pbmZvKQpAQCAtMzk3LDcgKzM3OCwxMCBAQAogCQlkZWZhdWx0OgogCQkJQlVHKCk7CiAJCX0KLQkJY29uc2lzdGVudF9zeW5jKGJ1Zi0+c2FmZSwgc2l6ZSwgZGlyKTsKKwkJLyoKKwkJICogTm8gbmVlZCB0byBzeW5jIHRoZSBzYWZlIGJ1ZmZlciAtIGl0IHdhcyBhbGxvY2F0ZWQKKwkJICogdmlhIHRoZSBjb2hlcmVudCBhbGxvY2F0b3JzLgorCQkgKi8KIAl9IGVsc2UgewogCQljb25zaXN0ZW50X3N5bmMoZG1hX3RvX3ZpcnQoZGV2LCBkbWFfYWRkciksIHNpemUsIGRpcik7CiAJfQpAQCAtNjA0LDkgKzU4OCwxMCBAQAogCWRldmljZV9pbmZvLT50b3RhbF9hbGxvY3MgPSAwOwogCWRldmljZV9pbmZvLT5tYXBfb3BfY291bnQgPSAwOwogCWRldmljZV9pbmZvLT5ib3VuY2VfY291bnQgPSAwOworCWRldmljZV9pbmZvLT5hdHRyX3JlcyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kbWFib3VuY2Vfc3RhdHMpOwogI2VuZGlmCiAKLQlsaXN0X2FkZCgmZGV2aWNlX2luZm8tPm5vZGUsICZkbWFib3VuY2VfZGV2cyk7CisJZGV2LT5hcmNoZGF0YS5kbWFib3VuY2UgPSBkZXZpY2VfaW5mbzsKIAogCXByaW50ayhLRVJOX0lORk8gImRtYWJvdW5jZTogcmVnaXN0ZXJlZCBkZXZpY2UgJXMgb24gJXMgYnVzXG4iLAogCQlkZXYtPmJ1c19pZCwgZGV2LT5idXMtPm5hbWUpOwpAQCAtNjIzLDcgKzYwOCw5IEBACiB2b2lkCiBkbWFib3VuY2VfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvID0gZmluZF9kbWFib3VuY2VfZGV2KGRldik7CisJc3RydWN0IGRtYWJvdW5jZV9kZXZpY2VfaW5mbyAqZGV2aWNlX2luZm8gPSBkZXYtPmFyY2hkYXRhLmRtYWJvdW5jZTsKKworCWRldi0+YXJjaGRhdGEuZG1hYm91bmNlID0gTlVMTDsKIAogCWlmICghZGV2aWNlX2luZm8pIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtNjQ1LDEyICs2MzIsMTAgQEAKIAkJZG1hX3Bvb2xfZGVzdHJveShkZXZpY2VfaW5mby0+bGFyZ2UucG9vbCk7CiAKICNpZmRlZiBTVEFUUwotCXByaW50X2FsbG9jX3N0YXRzKGRldmljZV9pbmZvKTsKLQlwcmludF9tYXBfc3RhdHMoZGV2aWNlX2luZm8pOworCWlmIChkZXZpY2VfaW5mby0+YXR0cl9yZXMgPT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RtYWJvdW5jZV9zdGF0cyk7CiAjZW5kaWYKIAotCWxpc3RfZGVsKCZkZXZpY2VfaW5mby0+bm9kZSk7Ci0KIAlrZnJlZShkZXZpY2VfaW5mbyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJkbWFib3VuY2U6IGRldmljZSAlcyBvbiAlcyBidXMgdW5yZWdpc3RlcmVkXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2dpYy5jIGIvYXJjaC9hcm0vY29tbW9uL2dpYy5jCmluZGV4IDA5YjlkMWIuLjRkZWVjZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9naWMuYworKysgYi9hcmNoL2FybS9jb21tb24vZ2ljLmMKQEAgLTE0LDcgKzE0LDkgQEAKICAqCiAgKiBvIFRoZXJlIGlzIG9uZSBDUFUgSW50ZXJmYWNlIHBlciBDUFUsIHdoaWNoIHNlbmRzIGludGVycnVwdHMgc2VudAogICogICBieSB0aGUgRGlzdHJpYnV0b3IsIGFuZCBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBsb2NhbGx5LCB0byB0aGUKLSAqICAgYXNzb2NpYXRlZCBDUFUuCisgKiAgIGFzc29jaWF0ZWQgQ1BVLiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBDUFUgaW50ZXJmYWNlIGlzIHVzdWFsbHkKKyAqICAgYWxpYXNlZCBzbyB0aGF0IHRoZSBzYW1lIGFkZHJlc3MgcG9pbnRzIHRvIGRpZmZlcmVudCBjaGlwcyBkZXBlbmRpbmcKKyAqICAgb24gdGhlIENQVSBpdCBpcyBhY2Nlc3NlZCBmcm9tLgogICoKICAqIE5vdGUgdGhhdCBJUlFzIDAtMzEgYXJlIHNwZWNpYWwgLSB0aGV5IGFyZSBsb2NhbCB0byBlYWNoIENQVS4KICAqIEFzIHN1Y2gsIHRoZSBlbmFibGUgc2V0L2NsZWFyLCBwZW5kaW5nIHNldC9jbGVhciBhbmQgYWN0aXZlIGJpdApAQCAtMzEsMTAgKzMzLDM4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlOwotc3RhdGljIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlOwogc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfY29udHJvbGxlcl9sb2NrKTsKIAorc3RydWN0IGdpY19jaGlwX2RhdGEgeworCXVuc2lnbmVkIGludCBpcnFfb2Zmc2V0OworCXZvaWQgX19pb21lbSAqZGlzdF9iYXNlOworCXZvaWQgX19pb21lbSAqY3B1X2Jhc2U7Cit9OworCisjaWZuZGVmIE1BWF9HSUNfTlIKKyNkZWZpbmUgTUFYX0dJQ19OUgkxCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBnaWNfY2hpcF9kYXRhIGdpY19kYXRhW01BWF9HSUNfTlJdOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqZ2ljX2Rpc3RfYmFzZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBnaWNfY2hpcF9kYXRhICpnaWNfZGF0YSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJcmV0dXJuIGdpY19kYXRhLT5kaXN0X2Jhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgZ2ljX2NoaXBfZGF0YSAqZ2ljX2RhdGEgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXJldHVybiBnaWNfZGF0YS0+Y3B1X2Jhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdpY19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgZ2ljX2NoaXBfZGF0YSAqZ2ljX2RhdGEgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXJldHVybiBpcnEgLSBnaWNfZGF0YS0+aXJxX29mZnNldDsKK30KKwogLyoKICAqIFJvdXRpbmVzIHRvIGFja25vd2xlZGdlLCBkaXNhYmxlIGFuZCBlbmFibGUgaW50ZXJydXB0cwogICoKQEAgLTU1LDggKzg1LDggQEAKIAl1MzIgbWFzayA9IDEgPDwgKGlycSAlIDMyKTsKIAogCXNwaW5fbG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7Ci0Jd3JpdGVsKG1hc2ssIGdpY19kaXN0X2Jhc2UgKyBHSUNfRElTVF9FTkFCTEVfQ0xFQVIgKyAoaXJxIC8gMzIpICogNCk7Ci0Jd3JpdGVsKGlycSwgZ2ljX2NwdV9iYXNlICsgR0lDX0NQVV9FT0kpOworCXdyaXRlbChtYXNrLCBnaWNfZGlzdF9iYXNlKGlycSkgKyBHSUNfRElTVF9FTkFCTEVfQ0xFQVIgKyAoZ2ljX2lycShpcnEpIC8gMzIpICogNCk7CisJd3JpdGVsKGdpY19pcnEoaXJxKSwgZ2ljX2NwdV9iYXNlKGlycSkgKyBHSUNfQ1BVX0VPSSk7CiAJc3Bpbl91bmxvY2soJmlycV9jb250cm9sbGVyX2xvY2spOwogfQogCkBAIC02NSw3ICs5NSw3IEBACiAJdTMyIG1hc2sgPSAxIDw8IChpcnEgJSAzMik7CiAKIAlzcGluX2xvY2soJmlycV9jb250cm9sbGVyX2xvY2spOwotCXdyaXRlbChtYXNrLCBnaWNfZGlzdF9iYXNlICsgR0lDX0RJU1RfRU5BQkxFX0NMRUFSICsgKGlycSAvIDMyKSAqIDQpOworCXdyaXRlbChtYXNrLCBnaWNfZGlzdF9iYXNlKGlycSkgKyBHSUNfRElTVF9FTkFCTEVfQ0xFQVIgKyAoZ2ljX2lycShpcnEpIC8gMzIpICogNCk7CiAJc3Bpbl91bmxvY2soJmlycV9jb250cm9sbGVyX2xvY2spOwogfQogCkBAIC03NCwxNCArMTA0LDE0IEBACiAJdTMyIG1hc2sgPSAxIDw8IChpcnEgJSAzMik7CiAKIAlzcGluX2xvY2soJmlycV9jb250cm9sbGVyX2xvY2spOwotCXdyaXRlbChtYXNrLCBnaWNfZGlzdF9iYXNlICsgR0lDX0RJU1RfRU5BQkxFX1NFVCArIChpcnEgLyAzMikgKiA0KTsKKwl3cml0ZWwobWFzaywgZ2ljX2Rpc3RfYmFzZShpcnEpICsgR0lDX0RJU1RfRU5BQkxFX1NFVCArIChnaWNfaXJxKGlycSkgLyAzMikgKiA0KTsKIAlzcGluX3VubG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgdm9pZCBnaWNfc2V0X2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFza192YWwpCiB7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBnaWNfZGlzdF9iYXNlICsgR0lDX0RJU1RfVEFSR0VUICsgKGlycSAmIH4zKTsKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGdpY19kaXN0X2Jhc2UoaXJxKSArIEdJQ19ESVNUX1RBUkdFVCArIChnaWNfaXJxKGlycSkgJiB+Myk7CiAJdW5zaWduZWQgaW50IHNoaWZ0ID0gKGlycSAlIDQpICogODsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gZmlyc3RfY3B1KG1hc2tfdmFsKTsKIAl1MzIgdmFsOwpAQCAtOTUsNiArMTI1LDM3IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgZmFzdGNhbGwgZ2ljX2hhbmRsZV9jYXNjYWRlX2lycSh1bnNpZ25lZCBpbnQgaXJxLAorCQkJCQkgICAgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBnaWNfY2hpcF9kYXRhICpjaGlwX2RhdGEgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXAoaXJxKTsKKwl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnE7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisKKwkvKiBwcmltYXJ5IGNvbnRyb2xsZXIgYWNrJ2luZyAqLworCWNoaXAtPmFjayhpcnEpOworCisJc3Bpbl9sb2NrKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKKwlzdGF0dXMgPSByZWFkbChjaGlwX2RhdGEtPmNwdV9iYXNlICsgR0lDX0NQVV9JTlRBQ0spOworCXNwaW5fdW5sb2NrKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKKworCWNhc2NhZGVfaXJxID0gKHN0YXR1cyAmIDB4M2ZmKTsKKwlpZiAoY2FzY2FkZV9pcnEgPiAxMDIwKQorCQlnb3RvIG91dDsKKwlpZiAoY2FzY2FkZV9pcnEgPCAzMiB8fCBjYXNjYWRlX2lycSA+PSBOUl9JUlFTKSB7CisJCWRvX2JhZF9JUlEoY2FzY2FkZV9pcnEsIGRlc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwljYXNjYWRlX2lycSArPSBjaGlwX2RhdGEtPmlycV9vZmZzZXQ7CisJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxKTsKKworIG91dDoKKwkvKiBwcmltYXJ5IGNvbnRyb2xsZXIgdW5tYXNraW5nICovCisJY2hpcC0+dW5tYXNrKGlycSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ2ljX2NoaXAgPSB7CiAJLm5hbWUJCT0gIkdJQyIsCiAJLmFjawkJPSBnaWNfYWNrX2lycSwKQEAgLTEwNSwxNSArMTY2LDI5IEBACiAjZW5kaWYKIH07CiAKLXZvaWQgX19pbml0IGdpY19kaXN0X2luaXQodm9pZCBfX2lvbWVtICpiYXNlKQordm9pZCBfX2luaXQgZ2ljX2Nhc2NhZGVfaXJxKHVuc2lnbmVkIGludCBnaWNfbnIsIHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKGdpY19uciA+PSBNQVhfR0lDX05SKQorCQlCVUcoKTsKKwlpZiAoc2V0X2lycV9kYXRhKGlycSwgJmdpY19kYXRhW2dpY19ucl0pICE9IDApCisJCUJVRygpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycSwgZ2ljX2hhbmRsZV9jYXNjYWRlX2lycSk7Cit9CisKK3ZvaWQgX19pbml0IGdpY19kaXN0X2luaXQodW5zaWduZWQgaW50IGdpY19uciwgdm9pZCBfX2lvbWVtICpiYXNlLAorCQkJICB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0KQogewogCXVuc2lnbmVkIGludCBtYXhfaXJxLCBpOwogCXUzMiBjcHVtYXNrID0gMSA8PCBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKKwlpZiAoZ2ljX25yID49IE1BWF9HSUNfTlIpCisJCUJVRygpOworCiAJY3B1bWFzayB8PSBjcHVtYXNrIDw8IDg7CiAJY3B1bWFzayB8PSBjcHVtYXNrIDw8IDE2OwogCi0JZ2ljX2Rpc3RfYmFzZSA9IGJhc2U7CisJZ2ljX2RhdGFbZ2ljX25yXS5kaXN0X2Jhc2UgPSBiYXNlOworCWdpY19kYXRhW2dpY19ucl0uaXJxX29mZnNldCA9IChpcnFfc3RhcnQgLSAxKSAmIH4zMTsKIAogCXdyaXRlbCgwLCBiYXNlICsgR0lDX0RJU1RfQ1RSTCk7CiAKQEAgLTE1OCw4ICsyMzMsOSBAQAogCS8qCiAJICogU2V0dXAgdGhlIExpbnV4IElSUSBzdWJzeXN0ZW0uCiAJICovCi0JZm9yIChpID0gMjk7IGkgPCBtYXhfaXJxOyBpKyspIHsKKwlmb3IgKGkgPSBpcnFfc3RhcnQ7IGkgPCBnaWNfZGF0YVtnaWNfbnJdLmlycV9vZmZzZXQgKyBtYXhfaXJxOyBpKyspIHsKIAkJc2V0X2lycV9jaGlwKGksICZnaWNfY2hpcCk7CisJCXNldF9pcnFfY2hpcF9kYXRhKGksICZnaWNfZGF0YVtnaWNfbnJdKTsKIAkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKIAl9CkBAIC0xNjcsOSArMjQzLDEzIEBACiAJd3JpdGVsKDEsIGJhc2UgKyBHSUNfRElTVF9DVFJMKTsKIH0KIAotdm9pZCBfX2NwdWluaXQgZ2ljX2NwdV9pbml0KHZvaWQgX19pb21lbSAqYmFzZSkKK3ZvaWQgX19jcHVpbml0IGdpY19jcHVfaW5pdCh1bnNpZ25lZCBpbnQgZ2ljX25yLCB2b2lkIF9faW9tZW0gKmJhc2UpCiB7Ci0JZ2ljX2NwdV9iYXNlID0gYmFzZTsKKwlpZiAoZ2ljX25yID49IE1BWF9HSUNfTlIpCisJCUJVRygpOworCisJZ2ljX2RhdGFbZ2ljX25yXS5jcHVfYmFzZSA9IGJhc2U7CisKIAl3cml0ZWwoMHhmMCwgYmFzZSArIEdJQ19DUFVfUFJJTUFTSyk7CiAJd3JpdGVsKDEsIGJhc2UgKyBHSUNfQ1BVX0NUUkwpOwogfQpAQCAtMTc5LDYgKzI1OSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBtYXAgPSAqY3B1c19hZGRyKGNwdW1hc2spOwogCi0Jd3JpdGVsKG1hcCA8PCAxNiB8IGlycSwgZ2ljX2Rpc3RfYmFzZSArIEdJQ19ESVNUX1NPRlRJTlQpOworCS8qIHRoaXMgYWx3YXlzIGhhcHBlbnMgb24gR0lDMCAqLworCXdyaXRlbChtYXAgPDwgMTYgfCBpcnEsIGdpY19kYXRhWzBdLmRpc3RfYmFzZSArIEdJQ19ESVNUX1NPRlRJTlQpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcG0uYwppbmRleCBhM2I0NTBmLi5hOWJjNWI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMKQEAgLTIzLDExICsyMywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9hcG0tZW11bGF0aW9uLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vYXBtLWVtdWxhdGlvbi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3BtLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zaGFycHNsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzJhYjgyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZwpAQCAtMCwwICsxLDExODQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzEKKyMgTW9uIEphbiAgOCAxNjowNjo1NCAyMDA3CisjCitDT05GSUdfQVJNPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAKKyMKKyMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjM9eQorCisjCisjIEFUOTFTQU05MjYzIEJvYXJkIFR5cGUKKyMKK0NPTkZJR19NQUNIX0FUOTFTQU05MjYzRUs9eQorCisjCisjIEFUOTEgQm9hcmQgT3B0aW9ucworIworQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEPXkKKyMgQ09ORklHX01URF9OQU5EX0FUOTFfQlVTV0lEVEhfMTYgaXMgbm90IHNldAorCisjCisjIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTI2VD15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMzE0NTcyOCByb290PS9kZXYvcmFtMCBydyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUE0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTVREX0RBVEFGTEFTSD15CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfQVQ5MT15CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKworIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UU0RFVj15CitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MjQwCitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDAgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQVRNRUw9eQorQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworQ09ORklHX0kyQ19BVDkxPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9BVE1FTD15CisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKKyMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKKyMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKworIworIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0FUOTE9eQorQ09ORklHX1VTQl9BVDkxPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWkVSTz1tCisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQVQ5MT1tCisjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0ZWI5MjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCmluZGV4IDNkZTVjNjQuLmJhYTk3NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0RSVl9BVDkxPXkKK0NPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQogIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnCmluZGV4IDJjYWRkNTEuLjg4ZTVkMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiMzM3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcKQEAgLTM1NSwxMCArMzU1LDEyIEBACiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTAKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NTQjMzNz15CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCkBAIC05ODYsNyArOTg4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotQ09ORklHX1JUQ19EUlZfQVQ5MT15CitDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwPXkKICMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnCmluZGV4IDk0OTA4YzEuLjY2OWYwMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiNjM3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NzYjYzN19kZWZjb25maWcKQEAgLTM1NSwxMCArMzU1LDEyIEBACiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTAKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NTQjYzNz15CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2thZmFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9rYWZhX2RlZmNvbmZpZwppbmRleCBhNGNkYWZjLi5hMGY0OGQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2thZmFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcKQEAgLTcxOCw3ICs3MTgsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0RSVl9BVDkxPXkKK0NPTkZJR19SVENfRFJWX0FUOTFSTTkyMDA9eQogIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uczl4eHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uczl4eHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTc5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL25zOXh4eF9kZWZjb25maWcKQEAgLTAsMCArMSw2MjEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBUaHUgRmViIDE1IDIwOjUxOjQ3IDIwMDcKKyMKK0NPTkZJR19BUk09eQorIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorCisjCisjIEJsb2NrIGxheWVyCisjCitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTlM5WFhYPXkKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKworIworIyBOUzl4eHggSW1wbGVtZW50YXRpb25zCisjCitDT05GSUdfTUFDSF9DQzlQOTM2MERFVj15CitDT05GSUdfUFJPQ0VTU09SX05TOTM2MD15CitDT05GSUdfQk9BUkRfQTlNOTc1MERFVj15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjZUPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUE0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKKyMgQ09ORklHX05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorQ09ORklHX0RFQlVHX0VSUk9SUz15CitDT05GSUdfREVCVUdfTEw9eQorQ09ORklHX0RFQlVHX0lDRURDQz15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCmluZGV4IDNiMzFhMzMuLmRmMTllMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzQKLSMgRnJpIE5vdiAgMyAxNzo0MTozMSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgVGh1IEZlYiAxNSAxMToyNjoyNCAyMDA3CiAjCiBDT05GSUdfQVJNPXkKICMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CkBAIC0xMSw2ICsxMSw4IEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMApAQCAtMzcsMTMgKzM5LDE0IEBACiAjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VSUQxNj15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTc2LDcgKzc5LDkgQEAKICMgQmxvY2sgbGF5ZXIKICMKIENPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTExMCw2ICsxMTUsNyBAQAogIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldApAQCAtMTIyLDU0ICsxMjgsNzMgQEAKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfUExBVF9TM0MyNFhYPXkKK0NPTkZJR19DUFVfUzNDMjQ0WD15CitDT05GSUdfUE1fU0lNVEVDPXkKKyMgQ09ORklHX1MzQzI0MTBfQk9PVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TM0MyNDEwX0JPT1RfRVJST1JfUkVTRVQgaXMgbm90IHNldAorIyBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TM0MyNDEwX1BNX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19TM0MyNDEwX0xPV0xFVkVMX1VBUlRfUE9SVD0wCitDT05GSUdfUzNDMjQxMF9ETUE9eQorIyBDT05GSUdfUzNDMjQxMF9ETUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01BQ0hfU01ESz15CiAKICMKLSMgUzNDMjRYWCBJbXBsZW1lbnRhdGlvbnMKKyMgUzNDMjQwMCBNYWNoaW5lcwogIwotIyBDT05GSUdfTUFDSF9BTUxfTTU5MDAgaXMgbm90IHNldAorQ09ORklHX0NQVV9TM0MyNDEwPXkKK0NPTkZJR19DUFVfUzNDMjQxMF9ETUE9eQorQ09ORklHX1MzQzI0MTBfUE09eQorQ09ORklHX1MzQzI0MTBfR1BJTz15CitDT05GSUdfUzNDMjQxMF9DTE9DSz15CisKKyMKKyMgUzNDMjQxMCBNYWNoaW5lcworIworQ09ORklHX0FSQ0hfU01ESzI0MTA9eQorQ09ORklHX0FSQ0hfSDE5NDA9eQorQ09ORklHX1BNX0gxOTQwPXkKK0NPTkZJR19NQUNIX04zMD15CitDT05GSUdfQVJDSF9CQVNUPXkKK0NPTkZJR19NQUNIX09UT009eQorQ09ORklHX01BQ0hfQU1MX001OTAwPXkKK0NPTkZJR19CQVNUX1BDMTA0X0lSUT15CitDT05GSUdfTUFDSF9WUjEwMDA9eQorQ09ORklHX0NQVV9TM0MyNDEyPXkKK0NPTkZJR19TM0MyNDEyX0RNQT15CitDT05GSUdfUzNDMjQxMl9QTT15CisKKyMKKyMgUzNDMjQxMiBNYWNoaW5lcworIworQ09ORklHX01BQ0hfU01ESzI0MTM9eQorQ09ORklHX01BQ0hfUzNDMjQxMz15CitDT05GSUdfTUFDSF9WU1RNUz15CitDT05GSUdfQ1BVX1MzQzI0NDA9eQorQ09ORklHX1MzQzI0NDBfRE1BPXkKKworIworIyBTM0MyNDQwIE1hY2hpbmVzCisjCiBDT05GSUdfTUFDSF9BTlVCSVM9eQogQ09ORklHX01BQ0hfT1NJUklTPXkKLUNPTkZJR19BUkNIX0JBU1Q9eQotQ09ORklHX0JBU1RfUEMxMDRfSVJRPXkKLUNPTkZJR19BUkNIX0gxOTQwPXkKLUNPTkZJR19NQUNIX04zMD15Ci1DT05GSUdfTUFDSF9TTURLPXkKLUNPTkZJR19BUkNIX1NNREsyNDEwPXkKLUNPTkZJR19BUkNIX1MzQzI0NDA9eQotQ09ORklHX1NNREsyNDQwX0NQVTI0NDA9eQotQ09ORklHX1NNREsyNDQwX0NQVTI0NDI9eQotQ09ORklHX01BQ0hfUzNDMjQxMz15Ci1DT05GSUdfTUFDSF9TTURLMjQxMz15Ci1DT05GSUdfTUFDSF9WUjEwMDA9eQogQ09ORklHX01BQ0hfUlgzNzE1PXkKLUNPTkZJR19NQUNIX09UT009eQorQ09ORklHX0FSQ0hfUzNDMjQ0MD15CiBDT05GSUdfTUFDSF9ORVhDT0RFUl8yNDQwPXkKLUNPTkZJR19NQUNIX1ZTVE1TPXkKLUNPTkZJR19TM0MyNDEwX0NMT0NLPXkKLUNPTkZJR19TM0MyNDEwX1BNPXkKLUNPTkZJR19DUFVfUzNDMjQxMF9ETUE9eQotQ09ORklHX0NQVV9TM0MyNDEwPXkKLUNPTkZJR19TM0MyNDEyX1BNPXkKLUNPTkZJR19DUFVfUzNDMjQxMj15Ci1DT05GSUdfQ1BVX1MzQzI0NFg9eQotQ09ORklHX0NQVV9TM0MyNDQwPXkKK0NPTkZJR19TTURLMjQ0MF9DUFUyNDQwPXkKIENPTkZJR19DUFVfUzNDMjQ0Mj15CiAKICMKLSMgUzNDMjQxMCBCb290CisjIFMzQzI0NDIgTWFjaGluZXMKICMKLSMgQ09ORklHX1MzQzI0MTBfQk9PVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TM0MyNDEwX0JPT1RfRVJST1JfUkVTRVQgaXMgbm90IHNldAorQ09ORklHX1NNREsyNDQwX0NQVTI0NDI9eQorQ09ORklHX0NQVV9TM0MyNDQzPXkKIAogIwotIyBTM0MyNDEwIFNldHVwCisjIFMzQzI0NDMgTWFjaGluZXMKICMKLUNPTkZJR19TM0MyNDEwX0RNQT15Ci0jIENPTkZJR19TM0MyNDEwX0RNQV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TM0MyNDEwX1BNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX1BNX1NJTVRFQz15Ci1DT05GSUdfUzNDMjQxMF9MT1dMRVZFTF9VQVJUX1BPUlQ9MAorQ09ORklHX01BQ0hfU01ESzI0NDM9eQogCiAjCiAjIFByb2Nlc3NvciBUeXBlCkBAIC0xOTYsNiArMjIxLDcgQEAKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBzdXBwb3J0CkBAIC0zMDMsNiArMzI5LDcgQEAKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTM4NSw2ICs0MTIsNyBAQAogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwogIwogQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKQEAgLTUzMSw2ICs1NTksMTEgQEAKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAKICMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCiAjCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CkBAIC02ODIsNyArNzE1LDcgQEAKICMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAogIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1hBX1NNQVJUSU9fTkVXIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LTVAgaXMgbm90IHNldAogIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldApAQCAtNzAwLDEzICs3MzMsMTQgQEAKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF84MjUwX0ZPVVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF84MjUwX0FDQ0VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfODI1MF9CT0NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYQVJfU1QxNkM1NTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMXzgyNTBfSFVCNiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKIAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CkBAIC03NTUsMTAgKzc4OSw2IEBACiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCkBAIC04NjMsNiArODkzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldApAQCAtODcwLDYgKzkwMSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKQEAgLTk1Miw2ICs5ODQsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTEwMjgsNiArMTA2NSw3IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogCkBAIC0xMTc5LDkgKzEyMTcsNiBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTX0ZTPXkKLUNPTkZJR19KRkZTX0ZTX1ZFUkJPU0U9MAotIyBDT05GSUdfSkZGU19QUk9DX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKQEAgLTExOTEsNyArMTIyNiw3IEBACiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CkBAIC0xMjg1LDYgKzEzMjAsMTEgQEAKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMjk2LDYgKzEzMzYsOCBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CkBAIC0xMzExLDEyICsxMzUzLDEwIEBACiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKQEAgLTEzMzksNiArMTM3OSw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQpAQCAtMTM0NiwzICsxMzg3LDQgQEAKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0lPTUFQX0NPUFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IDFiOTM1ZmIuLmJiMjgwODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAKIG9iai0kKENPTkZJR19JU0FfRE1BKQkJKz0gZG1hLWlzYS5vCiBvYmotJChDT05GSUdfUENJKQkJKz0gYmlvczMyLm8gaXNhLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubworb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlYy5vIHJlbG9jYXRlX2tlcm5lbC5vCiBvYmotJChDT05GSUdfT0FCSV9DT01QQVQpCSs9IHN5c19vYWJpLWNvbXBhdC5vCiAKIG9iai0kKENPTkZJR19DUlVOQ0gpCQkrPSBjcnVuY2gubyBjcnVuY2gtYml0cy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCmluZGV4IGY3NTk4Y2IuLmFlODljZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCkBAIC0zNTYsNiArMzU2LDcgQEAKIAkJQ0FMTChzeXNfbW92ZV9wYWdlcykKIC8qIDM0NSAqLwlDQUxMKHN5c19nZXRjcHUpCiAJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiBldmVudHVhbGx5IGVwb2xsX3B3YWl0ICovCisJCUNBTEwoc3lzX2tleGVjX2xvYWQpCiAjaWZuZGVmIHN5c2NhbGxzX2NvdW50ZWQKIC5lcXUgc3lzY2FsbHNfcGFkZGluZywgKChOUl9zeXNjYWxscyArIDMpICYgfjMpIC0gTlJfc3lzY2FsbHMKICNkZWZpbmUgc3lzY2FsbHNfY291bnRlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2NydW5jaC5jIGIvYXJjaC9hcm0va2VybmVsL2NydW5jaC5jCmluZGV4IGNlYzgzNzguLjYyN2Q3OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jcnVuY2guYworKysgYi9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLmMKQEAgLTc1LDYgKzc1LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGNydW5jaF9pbml0KHZvaWQpCiB7CiAJdGhyZWFkX3JlZ2lzdGVyX25vdGlmaWVyKCZjcnVuY2hfbm90aWZpZXJfYmxvY2spOworCWVsZl9od2NhcCB8PSBIV0NBUF9DUlVOQ0g7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jIGIvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKaW5kZXggNzEyNTdlMy4uZjFjMGZiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKQEAgLTEwMDksNyArMTAwOSw3IEBACiAJCWVjLT5maXFtYXNrID0gNDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJsYWNrbGlzdCkgLyBzaXplb2YoKmJsYWNrbGlzdCk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShibGFja2xpc3QpOyBpKyspCiAJCWlmIChibGFja2xpc3RbaV0ubWFudWZhY3R1cmVyID09IGVjLT5jaWQubWFudWZhY3R1cmVyICYmCiAJCSAgICBibGFja2xpc3RbaV0ucHJvZHVjdCA9PSBlYy0+Y2lkLnByb2R1Y3QpIHsKIAkJCWVjLT5jYXJkX2Rlc2MgPSBibGFja2xpc3RbaV0udHlwZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IDg1MTdjM2MuLmQ2NDU4OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtMjcsNiArMjcsNyBAQAogICogSW50ZXJydXB0IGhhbmRsaW5nLiAgUHJlc2VydmVzIHI3LCByOCwgcjkKICAqLwogCS5tYWNybwlpcnFfaGFuZGxlcgorCWdldF9pcnFucl9wcmVhbWJsZSByNSwgbHIKIDE6CWdldF9pcnFucl9hbmRfYmFzZSByMCwgcjYsIHI1LCBscgogCW1vdm5lCXIxLCBzcAogCUAKQEAgLTk5LDcgKzEwMCw2IEBACiAJCQkJCUAgY3Bzcl88ZXhjZXB0aW9uPiwgIm9sZF9yMCIKIAogCW1vdglyMCwgc3AKLQlhbmQJcjIsIHI2LCAjMHgxZgogCWIJYmFkX21vZGUKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCA2ZjVlN2M1Li5jNTg5ZGMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC05LDYgKzksNyBAQAogICovCiAKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZW50cnktbWFjcm8uUz4KIAogI2luY2x1ZGUgImVudHJ5LWhlYWRlci5TIgogCkBAIC0yNSw2ICsyNiw5IEBACiAJdHN0CXIxLCAjX1RJRl9XT1JLX01BU0sKIAlibmUJZmFzdF93b3JrX3BlbmRpbmcKIAorCS8qIHBlcmZvcm0gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGFjdGlvbnMgYmVmb3JlIHVzZXIgcmV0dXJuICovCisJYXJjaF9yZXRfdG9fdXNlciByMSwgbHIKKwogCUAgZmFzdF9yZXN0b3JlX3VzZXJfcmVncwogCWxkcglyMSwgW3NwLCAjU19PRkYgKyBTX1BTUl0JQCBnZXQgY2FsbGluZyBjcHNyCiAJbGRyCWxyLCBbc3AsICNTX09GRiArIFNfUENdIQlAIGdldCBwYwpAQCAtNjEsNiArNjUsOSBAQAogCXRzdAlyMSwgI19USUZfV09SS19NQVNLCiAJYm5lCXdvcmtfcGVuZGluZwogbm9fd29ya19wZW5kaW5nOgorCS8qIHBlcmZvcm0gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGFjdGlvbnMgYmVmb3JlIHVzZXIgcmV0dXJuICovCisJYXJjaF9yZXRfdG9fdXNlciByMSwgbHIKKwogCUAgc2xvd19yZXN0b3JlX3VzZXJfcmVncwogCWxkcglyMSwgW3NwLCAjU19QU1JdCQlAIGdldCBjYWxsaW5nIGNwc3IKIAlsZHIJbHIsIFtzcCwgI1NfUENdIQkJQCBnZXQgcGMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwppbmRleCBlYzAxZjA4Li5lMTAxODQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCkBAIC0xNTksOCArMTU5LDcgQEAKIAlpbnQgaXJxOwogCiAJZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgfD0gSVJRX05PUkVRVUVTVCB8IElSUV9ERUxBWUVEX0RJU0FCTEUgfAotCQkJSVJRX05PUFJPQkU7CisJCWlycV9kZXNjW2lycV0uc3RhdHVzIHw9IElSUV9OT1JFUVVFU1QgfCBJUlFfTk9QUk9CRTsKIAogI2lmZGVmIENPTkZJR19TTVAKIAliYWRfaXJxX2Rlc2MuYWZmaW5pdHkgPSBDUFVfTUFTS19BTEw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9hcm0va2VybmVsL21hY2hpbmVfa2V4ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjNjNjY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMCwwICsxLDc4IEBACisvKgorICogbWFjaGluZV9rZXhlYy5jIC0gaGFuZGxlIHRyYW5zaXRpb24gb2YgTGludXggYm9vdGluZyBhbm90aGVyIGtlcm5lbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCitjb25zdCBleHRlcm4gdW5zaWduZWQgY2hhciByZWxvY2F0ZV9uZXdfa2VybmVsW107Citjb25zdCBleHRlcm4gdW5zaWduZWQgaW50IHJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZTsKKworZXh0ZXJuIHZvaWQgc2V0dXBfbW1fZm9yX3JlYm9vdChjaGFyIG1vZGUpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBrZXhlY19zdGFydF9hZGRyZXNzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2V4ZWNfaW5kaXJlY3Rpb25fcGFnZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGtleGVjX21hY2hfdHlwZTsKKworLyoKKyAqIFByb3ZpZGUgYSBkdW1teSBjcmFzaF9ub3RlcyBkZWZpbml0aW9uIHdoaWxlIGNyYXNoIGR1bXAgYXJyaXZlcyB0byBhcm0uCisgKiBUaGlzIHByZXZlbnRzIGJyZWFrYWdlIG9mIGNyYXNoX25vdGVzIGF0dHJpYnV0ZSBpbiBrZXJuZWwva3N5c2ZzLmMuCisgKi8KKworaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtYWNoaW5lX2tleGVjX2NsZWFudXAoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCit7Cit9CisKK3ZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQoreworfQorCit2b2lkIG1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7Cit9CisKK3ZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhZ2VfbGlzdDsKKwl1bnNpZ25lZCBsb25nIHJlYm9vdF9jb2RlX2J1ZmZlcl9waHlzOworCXZvaWQgKnJlYm9vdF9jb2RlX2J1ZmZlcjsKKworCisJcGFnZV9saXN0ID0gaW1hZ2UtPmhlYWQgJiBQQUdFX01BU0s7CisKKwkvKiB3ZSBuZWVkIGJvdGggZWZmZWN0aXZlIGFuZCByZWFsIGFkZHJlc3MgaGVyZSAqLworCXJlYm9vdF9jb2RlX2J1ZmZlcl9waHlzID0KKwkgICAgcGFnZV90b19wZm4oaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKSA8PCBQQUdFX1NISUZUOworCXJlYm9vdF9jb2RlX2J1ZmZlciA9IHBhZ2VfYWRkcmVzcyhpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpOworCisJLyogUHJlcGFyZSBwYXJhbWV0ZXJzIGZvciByZWJvb3RfY29kZV9idWZmZXIqLworCWtleGVjX3N0YXJ0X2FkZHJlc3MgPSBpbWFnZS0+c3RhcnQ7CisJa2V4ZWNfaW5kaXJlY3Rpb25fcGFnZSA9IHBhZ2VfbGlzdDsKKwlrZXhlY19tYWNoX3R5cGUgPSBtYWNoaW5lX2FyY2hfdHlwZTsKKworCS8qIGNvcHkgb3VyIGtlcm5lbCByZWxvY2F0aW9uIGNvZGUgdG8gdGhlIGNvbnRyb2wgY29kZSBwYWdlICovCisJbWVtY3B5KHJlYm9vdF9jb2RlX2J1ZmZlciwKKwkgICAgICAgcmVsb2NhdGVfbmV3X2tlcm5lbCwgcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplKTsKKworCisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKSByZWJvb3RfY29kZV9idWZmZXIsCisJCQkgICAodW5zaWduZWQgbG9uZykgcmVib290X2NvZGVfYnVmZmVyICsgS0VYRUNfQ09OVFJPTF9DT0RFX1NJWkUpOworCXByaW50ayhLRVJOX0lORk8gIkJ5ZSFcbiIpOworCisJY3B1X3Byb2NfZmluKCk7CisJc2V0dXBfbW1fZm9yX3JlYm9vdCgwKTsgLyogbW9kZSBpcyBub3QgdXNlZCwgc28ganVzdCBwYXNzIDAqLworCWNwdV9yZXNldChyZWJvb3RfY29kZV9idWZmZXJfcGh5cyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCBhOWU4ZjdlLi43ODJhZjNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTM2LDcgKzM2LDEzIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKLWV4dGVybiBjb25zdCBjaGFyICpwcm9jZXNzb3JfbW9kZXNbXTsKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9jZXNzb3JfbW9kZXNbXSA9IHsKKyAgIlVTRVJfMjYiLCAiRklRXzI2IiAsICJJUlFfMjYiICwgIlNWQ18yNiIgLCAiVUs0XzI2IiAsICJVSzVfMjYiICwgIlVLNl8yNiIgLCAiVUs3XzI2IiAsCisgICJVSzhfMjYiICwgIlVLOV8yNiIgLCAiVUsxMF8yNiIsICJVSzExXzI2IiwgIlVLMTJfMjYiLCAiVUsxM18yNiIsICJVSzE0XzI2IiwgIlVLMTVfMjYiLAorICAiVVNFUl8zMiIsICJGSVFfMzIiICwgIklSUV8zMiIgLCAiU1ZDXzMyIiAsICJVSzRfMzIiICwgIlVLNV8zMiIgLCAiVUs2XzMyIiAsICJBQlRfMzIiICwKKyAgIlVLOF8zMiIgLCAiVUs5XzMyIiAsICJVSzEwXzMyIiwgIlVORF8zMiIgLCAiVUsxMl8zMiIsICJVSzEzXzMyIiwgIlVLMTRfMzIiLCAiU1lTXzMyIgorfTsKKwogZXh0ZXJuIHZvaWQgc2V0dXBfbW1fZm9yX3JlYm9vdChjaGFyIG1vZGUpOwogCiBzdGF0aWMgdm9sYXRpbGUgaW50IGhsdF9jb3VudGVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TIGIvYXJjaC9hcm0va2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYWFkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIHJlbG9jYXRlX2tlcm5lbC5TIC0gcHV0IHRoZSBrZXJuZWwgaW1hZ2UgaW4gcGxhY2UgdG8gYm9vdAorICovCisKKyNpbmNsdWRlIDxhc20va2V4ZWMuaD4KKworCS5nbG9ibCByZWxvY2F0ZV9uZXdfa2VybmVsCityZWxvY2F0ZV9uZXdfa2VybmVsOgorCisJbGRyCXIwLGtleGVjX2luZGlyZWN0aW9uX3BhZ2UKKwlsZHIJcjEsa2V4ZWNfc3RhcnRfYWRkcmVzcworCisKKzA6CS8qIHRvcCwgcmVhZCBhbm90aGVyIHdvcmQgZm9yIHRoZSBpbmRpcmVjdGlvbiBwYWdlICovCisJbGRyCXIzLCBbcjBdLCM0CisKKwkvKiBJcyBpdCBhIGRlc3RpbmF0aW9uIHBhZ2UuIFB1dCBkZXN0aW5hdGlvbiBhZGRyZXNzIHRvIHI0ICovCisJdHN0CXIzLCMxLDAKKwliZXEJMWYKKwliaWMJcjQscjMsIzEKKwliCTBiCisxOgorCS8qIElzIGl0IGFuIGluZGlyZWN0aW9uIHBhZ2UgKi8KKwl0c3QJcjMsIzIsMAorCWJlcQkxZgorCWJpYwlyMCxyMywjMgorCWIJMGIKKzE6CisKKwkvKiBhcmUgd2UgZG9uZSA/ICovCisJdHN0CXIzLCM0LDAKKwliZXEJMWYKKwliCTJmCisKKzE6CisJLyogaXMgaXQgc291cmNlID8gKi8KKwl0c3QJcjMsIzgsMAorCWJlcQkwYgorCWJpYyByMyxyMywjOAorCW1vdiByNiwjMTAyNAorOToKKwlsZHIgcjUsW3IzXSwjNAorCXN0ciByNSxbcjRdLCM0CisJc3VicyByNixyNiwjMQorCWJuZSA5YgorCWIgMGIKKworMjoKKwkvKiBKdW1wIHRvIHJlbG9jYXRlZCBrZXJuZWwgKi8KKwltb3YgbHIscjEKKwltb3YgcjAsIzAKKwlsZHIgcjEsa2V4ZWNfbWFjaF90eXBlCisJbW92IHIyLCMwCisJbW92IHBjLGxyCisKKwkuZ2xvYmwga2V4ZWNfc3RhcnRfYWRkcmVzcwora2V4ZWNfc3RhcnRfYWRkcmVzczoKKwkubG9uZwkweDAKKworCS5nbG9ibCBrZXhlY19pbmRpcmVjdGlvbl9wYWdlCitrZXhlY19pbmRpcmVjdGlvbl9wYWdlOgorCS5sb25nCTB4MAorCisJLmdsb2JsIGtleGVjX21hY2hfdHlwZQora2V4ZWNfbWFjaF90eXBlOgorCS5sb25nCTB4MAorCityZWxvY2F0ZV9uZXdfa2VybmVsX2VuZDoKKworCS5nbG9ibCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemUKK3JlbG9jYXRlX25ld19rZXJuZWxfc2l6ZToKKwkubG9uZyByZWxvY2F0ZV9uZXdfa2VybmVsX2VuZCAtIHJlbG9jYXRlX25ld19rZXJuZWwKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCmluZGV4IGVkNTIyMTUuLjAzZTM3YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC04OCw2ICs4OCw5IEBACiAjaWZkZWYgTVVMVElfQ0FDSEUKIHN0cnVjdCBjcHVfY2FjaGVfZm5zIGNwdV9jYWNoZTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19PVVRFUl9DQUNIRQorc3RydWN0IG91dGVyX2NhY2hlX2ZucyBvdXRlcl9jYWNoZTsKKyNlbmRpZgogCiBzdHJ1Y3Qgc3RhY2sgewogCXUzMiBpcnFbM107CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwppbmRleCBlZTQ3YzUzLi5mNjFkZWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKQEAgLTQwLDEyICs0MCwxNCBAQAogICovCiBzdHJ1Y3Qgc3lzX3RpbWVyICpzeXN0ZW1fdGltZXI7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1MpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQ01PU19NT0RVTEUpCiAvKiB0aGlzIG5lZWRzIGEgYmV0dGVyIGhvbWUgKi8KIERFRklORV9TUElOTE9DSyhydGNfbG9jayk7CiAKLSNpZmRlZiBDT05GSUdfU0ExMTAwX1JUQ19NT0RVTEUKKyNpZmRlZiBDT05GSUdfUlRDX0RSVl9DTU9TX01PRFVMRQogRVhQT1JUX1NZTUJPTChydGNfbG9jayk7CiAjZW5kaWYKKyNlbmRpZgkvKiBwYy1zdHlsZSAnQ01PUycgUlRDIHN1cHBvcnQgKi8KIAogLyogY2hhbmdlIHRoaXMgaWYgeW91IGhhdmUgc29tZSBjb25zdGFudCB0aW1lIGRyaWZ0ICovCiAjZGVmaW5lIFVTRUNTX1BFUl9KSUZGWQkoMTAwMDAwMC9IWikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggOTA4OTE1Ni4uMjQwOTU2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTMyLDEzICszMiw2IEBACiAjaW5jbHVkZSAicHRyYWNlLmgiCiAjaW5jbHVkZSAic2lnbmFsLmgiCiAKLWNvbnN0IGNoYXIgKnByb2Nlc3Nvcl9tb2Rlc1tdPQoteyAiVVNFUl8yNiIsICJGSVFfMjYiICwgIklSUV8yNiIgLCAiU1ZDXzI2IiAsICJVSzRfMjYiICwgIlVLNV8yNiIgLCAiVUs2XzI2IiAsICJVSzdfMjYiICwKLSAgIlVLOF8yNiIgLCAiVUs5XzI2IiAsICJVSzEwXzI2IiwgIlVLMTFfMjYiLCAiVUsxMl8yNiIsICJVSzEzXzI2IiwgIlVLMTRfMjYiLCAiVUsxNV8yNiIsCi0gICJVU0VSXzMyIiwgIkZJUV8zMiIgLCAiSVJRXzMyIiAsICJTVkNfMzIiICwgIlVLNF8zMiIgLCAiVUs1XzMyIiAsICJVSzZfMzIiICwgIkFCVF8zMiIgLAotICAiVUs4XzMyIiAsICJVSzlfMzIiICwgIlVLMTBfMzIiLCAiVU5EXzMyIiAsICJVSzEyXzMyIiwgIlVLMTNfMzIiLCAiVUsxNF8zMiIsICJTWVNfMzIiCi19OwotCiBzdGF0aWMgY29uc3QgY2hhciAqaGFuZGxlcltdPSB7ICJwcmVmZXRjaCBhYm9ydCIsICJkYXRhIGFib3J0IiwgImFkZHJlc3MgZXhjZXB0aW9uIiwgImludGVycnVwdCIgfTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19VU0VSCkBAIC0yODksNyArMjgyLDEwIEBACiAJcmVncy0+QVJNX3BjIC09IGNvcnJlY3Rpb247CiAKIAlwYyA9ICh2b2lkIF9fdXNlciAqKWluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7Ci0JaWYgKHRodW1iX21vZGUocmVncykpIHsKKworCWlmIChwcm9jZXNzb3JfbW9kZShyZWdzKSA9PSBTVkNfTU9ERSkgeworCQlpbnN0ciA9ICoodTMyICopIHBjOworCX0gZWxzZSBpZiAodGh1bWJfbW9kZShyZWdzKSkgewogCQlnZXRfdXNlcihpbnN0ciwgKHUxNiBfX3VzZXIgKilwYyk7CiAJfSBlbHNlIHsKIAkJZ2V0X3VzZXIoaW5zdHIsICh1MzIgX191c2VyICopcGMpOwpAQCAtMzM3LDEyICszMzMsMTEgQEAKICAqIEl0IG5ldmVyIHJldHVybnMsIGFuZCBuZXZlciB0cmllcyB0byBzeW5jLiAgV2UgaG9wZSB0aGF0IHdlIGNhbiBhdCBsZWFzdAogICogZHVtcCBvdXQgc29tZSBzdGF0ZSBpbmZvcm1hdGlvbi4uLgogICovCi1hc21saW5rYWdlIHZvaWQgYmFkX21vZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCByZWFzb24sIGludCBwcm9jX21vZGUpCithc21saW5rYWdlIHZvaWQgYmFkX21vZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCByZWFzb24pCiB7CiAJY29uc29sZV92ZXJib3NlKCk7CiAKLQlwcmludGsoS0VSTl9DUklUICJCYWQgbW9kZSBpbiAlcyBoYW5kbGVyIGRldGVjdGVkOiBtb2RlICVzXG4iLAotCQloYW5kbGVyW3JlYXNvbl0sIHByb2Nlc3Nvcl9tb2Rlc1twcm9jX21vZGVdKTsKKwlwcmludGsoS0VSTl9DUklUICJCYWQgbW9kZSBpbiAlcyBoYW5kbGVyIGRldGVjdGVkXG4iLCBoYW5kbGVyW3JlYXNvbl0pOwogCiAJZGllKCJPb3BzIC0gYmFkIG1vZGUiLCByZWdzLCAwKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvS2NvbmZpZwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKaW5kZXggOWYxMWRiOC4uYmYwZDk2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKQEAgLTksMTEgKzksMTQgQEAKIAlib29sICJBVDkxUk05MjAwIgogCiBjb25maWcgQVJDSF9BVDkxU0FNOTI2MAotCWJvb2wgIkFUOTFTQU05MjYwIgorCWJvb2wgIkFUOTFTQU05MjYwIG9yIEFUOTFTQU05WEUiCiAKIGNvbmZpZyBBUkNIX0FUOTFTQU05MjYxCiAJYm9vbCAiQVQ5MVNBTTkyNjEiCiAKK2NvbmZpZyBBUkNIX0FUOTFTQU05MjYzCisJYm9vbCAiQVQ5MVNBTTkyNjMiCisKIGVuZGNob2ljZQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkwLDEzICs5MywyMiBAQAogCiBpZiBBUkNIX0FUOTFTQU05MjYwCiAKLWNvbW1lbnQgIkFUOTFTQU05MjYwIEJvYXJkIFR5cGUiCitjb21tZW50ICJBVDkxU0FNOTI2MCBWYXJpYW50cyIKIAotY29uZmlnIE1BQ0hfQVQ5MVNBTTkyNjBFSwotCWJvb2wgIkF0bWVsIEFUOTFTQU05MjYwLUVLIEV2YWx1YXRpb24gS2l0IgorY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjBfU0FNOVhFCisJYm9vbCAiQVQ5MVNBTTlYRSIKIAlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVNBTTkyNjAKIAloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVNBTTkyNjAtRUsgRXZhbHVhdGlvbiBLaXQuCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVNBTTlYRSBTeXN0ZW0tb24tQ2hpcC4KKwkgIFRoZXkgYXJlIGJhc2ljYWx5IEFUOTFTQU05MjYwcyB3aXRoIHZhcmlvdXMgc2l6ZXMgb2YgZW1iZWRkZWQgRmxhc2guCisKK2NvbW1lbnQgIkFUOTFTQU05MjYwIC8gQVQ5MVNBTTlYRSBCb2FyZCBUeXBlIgorCitjb25maWcgTUFDSF9BVDkxU0FNOTI2MEVLCisJYm9vbCAiQXRtZWwgQVQ5MVNBTTkyNjAtRUsgLyBBVDkxU0FNOVhFIEV2YWx1YXRpb24gS2l0IgorCWRlcGVuZHMgb24gQVJDSF9BVDkxU0FNOTI2MAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOTI2MC1FSyBvciBBVDkxU0FNOVhFIEV2YWx1YXRpb24gS2l0CiAJICA8aHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Byb2R1Y3RzL3Rvb2xzX2NhcmQuYXNwP3Rvb2xfaWQ9MzkzMz4KIAogZW5kaWYKQEAgLTExOCwxNyArMTMwLDMyIEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitpZiBBUkNIX0FUOTFTQU05MjYzCisKK2NvbW1lbnQgIkFUOTFTQU05MjYzIEJvYXJkIFR5cGUiCisKK2NvbmZpZyBNQUNIX0FUOTFTQU05MjYzRUsKKwlib29sICJBdG1lbCBBVDkxU0FNOTI2My1FSyBFdmFsdWF0aW9uIEtpdCIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVNBTTkyNjMKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVNBTTkyNjMtRUsgRXZhbHVhdGlvbiBLaXQuCisJICA8aHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Byb2R1Y3RzL3Rvb2xzX2NhcmQuYXNwP3Rvb2xfaWQ9NDA1Nz4KKworZW5kaWYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIGNvbW1lbnQgIkFUOTEgQm9hcmQgT3B0aW9ucyIKIAogY29uZmlnIE1URF9BVDkxX0RBVEFGTEFTSF9DQVJECiAJYm9vbCAiRW5hYmxlIERhdGFGbGFzaCBDYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoQVJDSF9BVDkxUk05MjAwREsgfHwgTUFDSF9BVDkxUk05MjAwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjFFSykKKwlkZXBlbmRzIG9uIChBUkNIX0FUOTFSTTkyMDBESyB8fCBNQUNIX0FUOTFSTTkyMDBFSyB8fCBNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSykKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIERhdGFGbGFzaCBjYXJkLgogCiBjb25maWcgTVREX05BTkRfQVQ5MV9CVVNXSURUSF8xNgogCWJvb2wgIkVuYWJsZSAxNi1iaXQgZGF0YSBidXMgaW50ZXJmYWNlIHRvIE5BTkQgZmxhc2giCi0JZGVwZW5kcyBvbiAoTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjBFSykKKwlkZXBlbmRzIG9uIChNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSykKIAloZWxwCiAJICBPbiBBVDkxU0FNOTI2eCBib2FyZHMgYm90aCB0eXBlcyBvZiBOQU5EIGZsYXNoIGNhbiBiZSBwcmVzZW50CiAJICAoOCBhbmQgMTYgYml0IGRhdGEgYnVzIHdpZHRoKS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDg4JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCBjZjc3NzAwLi4wNWRlNmNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC0xMyw2ICsxMyw3IEBACiBvYmotJChDT05GSUdfQVJDSF9BVDkxUk05MjAwKQkrPSBhdDkxcm05MjAwLm8gYXQ5MXJtOTIwMF90aW1lLm8gYXQ5MXJtOTIwMF9kZXZpY2VzLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05MjYwKQkrPSBhdDkxc2FtOTI2MC5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOTI2MF9kZXZpY2VzLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05MjYxKQkrPSBhdDkxc2FtOTI2MS5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOTI2MV9kZXZpY2VzLm8KK29iai0kKENPTkZJR19BUkNIX0FUOTFTQU05MjYzKQkrPSBhdDkxc2FtOTI2My5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOTI2M19kZXZpY2VzLm8KIAogIyBBVDkxUk05MjAwIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX09ORUFSTSkJKz0gYm9hcmQtMWFybS5vCkBAIC0zMSw2ICszMiw5IEBACiAjIEFUOTFTQU05MjYxIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX0FUOTFTQU05MjYxRUspICs9IGJvYXJkLXNhbTkyNjFlay5vCiAKKyMgQVQ5MVNBTTkyNjMgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjNFSykgKz0gYm9hcmQtc2FtOTI2M2VrLm8KKwogIyBMRURzIHN1cHBvcnQKIGxlZC0kKENPTkZJR19BUkNIX0FUOTFSTTkyMDBESykJKz0gbGVkcy5vCiBsZWQtJChDT05GSUdfTUFDSF9BVDkxUk05MjAwRUspCSs9IGxlZHMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUuYm9vdApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL01ha2VmaWxlLmJvb3QKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZS5ib290CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDAuYwpzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMC5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMC5jCmluZGV4IGE5MmU5YTQuLjJkZGNkZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMC5jCisgKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMC5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCiAgKgpAQCAtMTE3LDYgKzExNywzNiBAQAogCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9QSU9ELAogCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCiB9Oworc3RhdGljIHN0cnVjdCBjbGsgdGMwX2NsayA9IHsKKwkubmFtZQkJPSAidGMwX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1RDMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jbGsgPSB7CisJLm5hbWUJCT0gInRjMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9UQzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0geworCS5uYW1lCQk9ICJ0YzJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVEMyLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdGMzX2NsayA9IHsKKwkubmFtZQkJPSAidGMzX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1RDMywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRjNF9jbGsgPSB7CisJLm5hbWUJCT0gInRjNF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9UQzQsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0YzVfY2xrID0geworCS5uYW1lCQk9ICJ0YzVfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVEM1LAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7CiAJJnBpb0FfY2xrLApAQCAtMTMyLDcgKzE2MiwxMiBAQAogCSZ0d2lfY2xrLAogCSZzcGlfY2xrLAogCS8vIHNzYyAwIC4uIHNzYzIKLQkvLyB0YzAgLi4gdGM1CisJJnRjMF9jbGssCisJJnRjMV9jbGssCisJJnRjMl9jbGssCisJJnRjM19jbGssCisJJnRjNF9jbGssCisJJnRjNV9jbGssCiAJJm9oY2lfY2xrLAogCSZldGhlcl9jbGssCiAJLy8gaXJxMCAuLiBpcnE2CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfZGV2aWNlcy5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMKaW5kZXggNTdmYWM3Mi4uMjYyNGE0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX2RldmljZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9kZXZpY2VzLmMKKyAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX2RldmljZXMuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgVGhpYmF1dCBWQVJFTkUgPHZhcmVuZXRAcGFyaXNjLWxpbnV4Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgRGF2aWQgQnJvd25lbGwKQEAgLTMxNSw3ICszMTUsNyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWNfcmVzb3VyY2VzKSwKIH07CiAKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc3RydWN0IGF0OTFfbW1jX2RhdGEgKmRhdGEpCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbW1jKHNob3J0IG1tY19pZCwgc3RydWN0IGF0OTFfbW1jX2RhdGEgKmRhdGEpCiB7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm47CkBAIC0zNjEsNyArMzYxLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFybTkyMDBfbW1jX2RldmljZSk7CiB9CiAjZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkge30KK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkge30KICNlbmRpZgogCiAKQEAgLTU5NCw2ICs1OTQsMTAgQEAKIAogdm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKQogeworCS8qIEVuYWJsZSBHUElPIHRvIGFjY2VzcyB0aGUgTEVEcyAqLworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNwdV9sZWQsIDEpOworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KHRpbWVyX2xlZCwgMSk7CisKIAlhdDkxX2xlZHNfY3B1CT0gY3B1X2xlZDsKIAlhdDkxX2xlZHNfdGltZXIJPSB0aW1lcl9sZWQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF90aW1lLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfdGltZS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF90aW1lLmMKaW5kZXggYjk5OWUxOS4uOTQ5MTk5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF90aW1lLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgU0FOIFBlb3BsZQogICogIENvcHlyaWdodCAoQykgMjAwMyBBVE1FTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjAuYwpzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjAuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwLmMKaW5kZXggYjE0ODcxYS4uNmVhNDFkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwLmMKKyAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MC5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiBTQU4gUGVvcGxlCiAgKgpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9wbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3JzdGMuaD4KQEAgLTI3LDcgKzI4LDExIEBACiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfU1lTKSwKIAkJLmxlbmd0aAkJPSBTWl8xNkssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7CisJfQorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDkxc2FtOTI2MF9zcmFtX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKIAkJLnZpcnR1YWwJPSBBVDkxX0lPX1ZJUlRfQkFTRSAtIEFUOTFTQU05MjYwX1NSQU0wX1NJWkUsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxU0FNOTI2MF9TUkFNMF9CQVNFKSwKIAkJLmxlbmd0aAkJPSBBVDkxU0FNOTI2MF9TUkFNMF9TSVpFLApAQCAtMzcsNyArNDIsMTQgQEAKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFTQU05MjYwX1NSQU0xX0JBU0UpLAogCQkubGVuZ3RoCQk9IEFUOTFTQU05MjYwX1NSQU0xX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgYXQ5MXNhbTl4ZV9zcmFtX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFTQU05WEVfU1JBTV9CQVNFKSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0KIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDcsMTMgKzExOSwyOCBAQAogCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfU1BJMSwKIAkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAogfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRjMF9jbGsgPSB7CisJLm5hbWUJCT0gInRjMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVEMwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NsayA9IHsKKwkubmFtZQkJPSAidGMxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9UQzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0geworCS5uYW1lCQk9ICJ0YzJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1RDMiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0gewogCS5uYW1lCQk9ICJvaGNpX2NsayIsCiAJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9VSFAsCiAJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKIH07Ci1zdGF0aWMgc3RydWN0IGNsayBldGhlcl9jbGsgPSB7Ci0JLm5hbWUJCT0gImV0aGVyX2NsayIsCitzdGF0aWMgc3RydWN0IGNsayBtYWNiX2NsayA9IHsKKwkubmFtZQkJPSAibWFjYl9jbGsiLAogCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfRU1BQywKIAkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAogfTsKQEAgLTEzNyw2ICsxNjQsMjEgQEAKIAkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1VTNSwKIAkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAogfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRjM19jbGsgPSB7CisJLm5hbWUJCT0gInRjM19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjBfSURfVEMzLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdGM0X2NsayA9IHsKKwkubmFtZQkJPSAidGM0X2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MF9JRF9UQzQsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0YzVfY2xrID0geworCS5uYW1lCQk9ICJ0YzVfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYwX0lEX1RDNSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgKnBlcmlwaF9jbG9ja3NbXSBfX2luaXRkYXRhID0gewogCSZwaW9BX2NsaywKQEAgLTE1MiwxNCArMTk0LDE4IEBACiAJJnNwaTBfY2xrLAogCSZzcGkxX2NsaywKIAkvLyBzc2MKLQkvLyB0YzAgLi4gdGMyCisJJnRjMF9jbGssCisJJnRjMV9jbGssCisJJnRjMl9jbGssCiAJJm9oY2lfY2xrLAotCSZldGhlcl9jbGssCisJJm1hY2JfY2xrLAogCSZpc2lfY2xrLAogCSZ1c2FydDNfY2xrLAogCSZ1c2FydDRfY2xrLAogCSZ1c2FydDVfY2xrLAotCS8vIHRjMyAuLiB0YzUKKwkmdGMzX2NsaywKKwkmdGM0X2NsaywKKwkmdGM1X2NsaywKIAkvLyBpcnEwIC4uIGlycTIKIH07CiAKQEAgLTIxMyw3ICsyNTksNyBAQAogCiBzdGF0aWMgdm9pZCBhdDkxc2FtOTI2MF9yZXNldCh2b2lkKQogewotCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlNUQ19DUiwgKDB4QTUgPDwgMjQpIHwgQVQ5MV9SU1RDX1BST0NSU1QgfCBBVDkxX1JTVENfUEVSUlNUKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsIEFUOTFfUlNUQ19LRVkgfCBBVDkxX1JTVENfUFJPQ1JTVCB8IEFUOTFfUlNUQ19QRVJSU1QpOwogfQogCiAKQEAgLTIyMSwxMSArMjY3LDM3IEBACiAgKiAgQVQ5MVNBTTkyNjAgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTl4ZV9pbml0aWFsaXplKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjaWRyLCBzcmFtX3NpemU7CisKKwljaWRyID0gYXQ5MV9zeXNfcmVhZChBVDkxX0RCR1VfQ0lEUik7CisKKwlzd2l0Y2ggKGNpZHIgJiBBVDkxX0NJRFJfU1JBTVNJWikgeworCQljYXNlIEFUOTFfQ0lEUl9TUkFNU0laXzMySzoKKwkJCXNyYW1fc2l6ZSA9IDIgKiBTWl8xNks7CisJCQlicmVhazsKKwkJY2FzZSBBVDkxX0NJRFJfU1JBTVNJWl8xNks6CisJCWRlZmF1bHQ6CisJCQlzcmFtX3NpemUgPSBTWl8xNks7CisJfQorCisJYXQ5MXNhbTl4ZV9zcmFtX2Rlc2MtPnZpcnR1YWwgPSBBVDkxX0lPX1ZJUlRfQkFTRSAtIHNyYW1fc2l6ZTsKKwlhdDkxc2FtOXhlX3NyYW1fZGVzYy0+bGVuZ3RoID0gc3JhbV9zaXplOworCisJaW90YWJsZV9pbml0KGF0OTFzYW05eGVfc3JhbV9kZXNjLCBBUlJBWV9TSVpFKGF0OTFzYW05eGVfc3JhbV9kZXNjKSk7Cit9CisKIHZvaWQgX19pbml0IGF0OTFzYW05MjYwX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKQogewogCS8qIE1hcCBwZXJpcGhlcmFscyAqLwogCWlvdGFibGVfaW5pdChhdDkxc2FtOTI2MF9pb19kZXNjLCBBUlJBWV9TSVpFKGF0OTFzYW05MjYwX2lvX2Rlc2MpKTsKIAorCWlmIChjcHVfaXNfYXQ5MXNhbTl4ZSgpKQorCQlhdDkxc2FtOXhlX2luaXRpYWxpemUoKTsKKwllbHNlCisJCWlvdGFibGVfaW5pdChhdDkxc2FtOTI2MF9zcmFtX2Rlc2MsIEFSUkFZX1NJWkUoYXQ5MXNhbTkyNjBfc3JhbV9kZXNjKSk7CisKIAlhdDkxX2FyY2hfcmVzZXQgPSBhdDkxc2FtOTI2MF9yZXNldDsKIAlhdDkxX2V4dGVybl9pcnEgPSAoMSA8PCBBVDkxU0FNOTI2MF9JRF9JUlEwKSB8ICgxIDw8IEFUOTFTQU05MjYwX0lEX0lSUTEpCiAJCQl8ICgxIDw8IEFUOTFTQU05MjYwX0lEX0lSUTIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwX2RldmljZXMuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwppbmRleCBmNDJkM2E0Li5mN2QzNDJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwX2RldmljZXMuYworICogYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKICAqCkBAIC0xMjgsNyArMTI4LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX01BQ0IpIHx8IGRlZmluZWQoQ09ORklHX01BQ0JfTU9EVUxFKQogc3RhdGljIHU2NCBldGhfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKLXN0YXRpYyBzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgZXRoX2RhdGE7CitzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgZXRoX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXRoX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTE1NSw3ICsxNTUsNyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShldGhfcmVzb3VyY2VzKSwKIH07CiAKLXZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IGV0aF9wbGF0Zm9ybV9kYXRhICpkYXRhKQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkKIHsKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfZXRoX2RldmljZSk7CiB9CiAjZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9Cit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBhdDkxX2V0aF9kYXRhICpkYXRhKSB7fQogI2VuZGlmCiAKIApAQCAtMjI5LDcgKzIyOSw3IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tY19yZXNvdXJjZXMpLAogfTsKIAotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkKIHsKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKQEAgLTI3NSw3ICsyNzUsNyBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfbW1jX2RldmljZSk7CiB9CiAjZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkge30KK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkge30KICNlbmRpZgogCiAKQEAgLTUxNSw2ICs1MTUsMTAgQEAKIAogdm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKQogeworCS8qIEVuYWJsZSBHUElPIHRvIGFjY2VzcyB0aGUgTEVEcyAqLworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNwdV9sZWQsIDEpOworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KHRpbWVyX2xlZCwgMSk7CisKIAlhdDkxX2xlZHNfY3B1CT0gY3B1X2xlZDsKIAlhdDkxX2xlZHNfdGltZXIJPSB0aW1lcl9sZWQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MS5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwppbmRleCBkMjQyYmI4Li43ODRkMWU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjEuYworICogYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKICAqCkBAIC05Nyw2ICs5NywyMSBAQAogCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfU1BJMSwKIAkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAogfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRjMF9jbGsgPSB7CisJLm5hbWUJCT0gInRjMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjFfSURfVEMwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NsayA9IHsKKwkubmFtZQkJPSAidGMxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9UQzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0geworCS5uYW1lCQk9ICJ0YzJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYxX0lEX1RDMiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0gewogCS5uYW1lCQk9ICJvaGNpX2NsayIsCiAJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2MV9JRF9VSFAsCkBAIC0xMjEsNyArMTM2LDkgQEAKIAkmc3BpMF9jbGssCiAJJnNwaTFfY2xrLAogCS8vIHNzYyAwIC4uIHNzYzIKLQkvLyB0YzAgLi4gdGMyCisJJnRjMF9jbGssCisJJnRjMV9jbGssCisJJnRjMl9jbGssCiAJJm9oY2lfY2xrLAogCSZsY2RjX2NsaywKIAkvLyBpcnEwIC4uIGlycTIKQEAgLTIwOCw3ICsyMjUsNyBAQAogCiBzdGF0aWMgdm9pZCBhdDkxc2FtOTI2MV9yZXNldCh2b2lkKQogewotCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlNUQ19DUiwgKDB4QTUgPDwgMjQpIHwgQVQ5MV9SU1RDX1BST0NSU1QgfCBBVDkxX1JTVENfUEVSUlNUKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsIEFUOTFfUlNUQ19LRVkgfCBBVDkxX1JTVENfUFJPQ1JTVCB8IEFUOTFfUlNUQ19QRVJSU1QpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKaW5kZXggZWQxZDc5MC4uZTE1MDQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYxX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKKyAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IERhdmlkIEJyb3duZWxsCkBAIC0xNTksNyArMTU5LDcgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jX3Jlc291cmNlcyksCiB9OwogCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbW1jKHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKQogewogCWlmICghZGF0YSkKIAkJcmV0dXJuOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MV9tbWNfZGV2aWNlKTsKIH0KICNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbW1jKHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKSB7fQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKSB7fQogI2VuZGlmCiAKIApAQCAtNTEzLDYgKzUxMywxMCBAQAogCiB2b2lkIF9faW5pdCBhdDkxX2luaXRfbGVkcyh1OCBjcHVfbGVkLCB1OCB0aW1lcl9sZWQpCiB7CisJLyogRW5hYmxlIEdQSU8gdG8gYWNjZXNzIHRoZSBMRURzICovCisJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoY3B1X2xlZCwgMSk7CisJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQodGltZXJfbGVkLCAxKTsKKwogCWF0OTFfbGVkc19jcHUJPSBjcHVfbGVkOwogCWF0OTFfbGVkc190aW1lcgk9IHRpbWVyX2xlZDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2My5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhMzQyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2My5jCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEF0bWVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2My5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcG1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9yc3RjLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDkxc2FtOTI2M19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1NZUywKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9TWVMpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX0lPX1ZJUlRfQkFTRSAtIEFUOTFTQU05MjYzX1NSQU0wX1NJWkUsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxU0FNOTI2M19TUkFNMF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBBVDkxU0FNOTI2M19TUkFNMF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEFUOTFfSU9fVklSVF9CQVNFIC0gQVQ5MVNBTTkyNjNfU1JBTTBfU0laRSAtIEFUOTFTQU05MjYzX1NSQU0xX1NJWkUsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxU0FNOTI2M19TUkFNMV9CQVNFKSwKKwkJLmxlbmd0aAkJPSBBVDkxU0FNOTI2M19TUkFNMV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ2xvY2tzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKKwkubmFtZQkJPSAicGlvQV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfUElPQSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBpb0JfY2xrID0geworCS5uYW1lCQk9ICJwaW9CX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9QSU9CLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGlvQ0RFX2NsayA9IHsKKwkubmFtZQkJPSAicGlvQ0RFX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9QSU9DREUsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0geworCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1VTMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MV9jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0MV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfVVMxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQyX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQyX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9VUzIsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBtbWMwX2NsayA9IHsKKwkubmFtZQkJPSAibWNpMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfTUNJMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2xrID0geworCS5uYW1lCQk9ICJtY2kxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9NQ0kxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdHdpX2NsayA9IHsKKwkubmFtZQkJPSAidHdpX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9UV0ksCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBzcGkwX2NsayA9IHsKKwkubmFtZQkJPSAic3BpMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfU1BJMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaTFfY2xrID0geworCS5uYW1lCQk9ICJzcGkxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9TUEkxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdGNiX2NsayA9IHsKKwkubmFtZQkJPSAidGNiX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9UQ0IsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBtYWNiX2NsayA9IHsKKwkubmFtZQkJPSAibWFjYl9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfRU1BQywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVkY19jbGsgPSB7CisJLm5hbWUJCT0gInVkY19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfVURQLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgaXNpX2NsayA9IHsKKwkubmFtZQkJPSAiaXNpX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOTI2M19JRF9JU0ksCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKKwkubmFtZQkJPSAibGNkY19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTkyNjNfSURfSVNJLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgb2hjaV9jbGsgPSB7CisJLm5hbWUJCT0gIm9oY2lfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05MjYzX0lEX1VIUCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKnBlcmlwaF9jbG9ja3NbXSBfX2luaXRkYXRhID0geworCSZwaW9BX2NsaywKKwkmcGlvQl9jbGssCisJJnBpb0NERV9jbGssCisJJnVzYXJ0MF9jbGssCisJJnVzYXJ0MV9jbGssCisJJnVzYXJ0Ml9jbGssCisJJm1tYzBfY2xrLAorCSZtbWMxX2NsaywKKwkvLyBjYW4KKwkmdHdpX2NsaywKKwkmc3BpMF9jbGssCisJJnNwaTFfY2xrLAorCS8vIHNzYzAgLi4gc3NjMQorCS8vIGFjOTcKKwkmdGNiX2NsaywKKwkvLyBwd21jCisJJm1hY2JfY2xrLAorCS8vIDJkZ2UKKwkmdWRjX2NsaywKKwkmaXNpX2NsaywKKwkmbGNkY19jbGssCisJLy8gZG1hCisJJm9oY2lfY2xrLAorCS8vIGlycTAgLi4gaXJxMQorfTsKKworLyoKKyAqIFRoZSBmb3VyIHByb2dyYW1tYWJsZSBjbG9ja3MuCisgKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKKwkubmFtZQkJPSAicGNrMCIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCisJLmlkCQk9IDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKKwkubmFtZQkJPSAicGNrMSIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCisJLmlkCQk9IDEsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGNrMiA9IHsKKwkubmFtZQkJPSAicGNrMiIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCisJLmlkCQk9IDIsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGNrMyA9IHsKKwkubmFtZQkJPSAicGNrMyIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMywKKwkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCisJLmlkCQk9IDMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQorCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7CisKKwljbGtfcmVnaXN0ZXIoJnBjazApOworCWNsa19yZWdpc3RlcigmcGNrMSk7CisJY2xrX3JlZ2lzdGVyKCZwY2syKTsKKwljbGtfcmVnaXN0ZXIoJnBjazMpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEdQSU8KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXNhbTkyNjNfZ3Bpb1tdID0geworCXsKKwkJLmlkCQk9IEFUOTFTQU05MjYzX0lEX1BJT0EsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9BLAorCQkuY2xvY2sJCT0gJnBpb0FfY2xrLAorCX0sIHsKKwkJLmlkCQk9IEFUOTFTQU05MjYzX0lEX1BJT0IsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9CLAorCQkuY2xvY2sJCT0gJnBpb0JfY2xrLAorCX0sIHsKKwkJLmlkCQk9IEFUOTFTQU05MjYzX0lEX1BJT0NERSwKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0MsCisJCS5jbG9jawkJPSAmcGlvQ0RFX2NsaywKKwl9LCB7CisJCS5pZAkJPSBBVDkxU0FNOTI2M19JRF9QSU9DREUsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9ELAorCQkuY2xvY2sJCT0gJnBpb0NERV9jbGssCisJfSwgeworCQkuaWQJCT0gQVQ5MVNBTTkyNjNfSURfUElPQ0RFLAorCQkub2Zmc2V0CQk9IEFUOTFfUElPRSwKKwkJLmNsb2NrCQk9ICZwaW9DREVfY2xrLAorCX0KK307CisKK3N0YXRpYyB2b2lkIGF0OTFzYW05MjYzX3Jlc2V0KHZvaWQpCit7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SU1RDX0NSLCBBVDkxX1JTVENfS0VZIHwgQVQ5MV9SU1RDX1BST0NSU1QgfCBBVDkxX1JTVENfUEVSUlNUKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEFUOTFTQU05MjYzIHByb2Nlc3NvciBpbml0aWFsaXphdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCit7CisJLyogTWFwIHBlcmlwaGVyYWxzICovCisJaW90YWJsZV9pbml0KGF0OTFzYW05MjYzX2lvX2Rlc2MsIEFSUkFZX1NJWkUoYXQ5MXNhbTkyNjNfaW9fZGVzYykpOworCisJYXQ5MV9hcmNoX3Jlc2V0ID0gYXQ5MXNhbTkyNjNfcmVzZXQ7CisJYXQ5MV9leHRlcm5faXJxID0gKDEgPDwgQVQ5MVNBTTkyNjNfSURfSVJRMCkgfCAoMSA8PCBBVDkxU0FNOTI2M19JRF9JUlExKTsKKworCS8qIEluaXQgY2xvY2sgc3Vic3lzdGVtICovCisJYXQ5MV9jbG9ja19pbml0KG1haW5fY2xvY2spOworCisJLyogUmVnaXN0ZXIgdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBjbG9ja3MgKi8KKwlhdDkxc2FtOTI2M19yZWdpc3Rlcl9jbG9ja3MoKTsKKworCS8qIFJlZ2lzdGVyIEdQSU8gc3Vic3lzdGVtICovCisJYXQ5MV9ncGlvX2luaXQoYXQ5MXNhbTkyNjNfZ3BpbywgNSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSW50ZXJydXB0IGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAoMCA9IGxvd2VzdCwgNyA9IGhpZ2hlc3QpLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0OTFzYW05MjYzX2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0geworCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCisJNywJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCisJMCwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCisJMCwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCisJMCwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBDLCBEIGFuZCBFICovCisJMCwKKwkwLAorCTYsCS8qIFVTQVJUIDAgKi8KKwk2LAkvKiBVU0FSVCAxICovCisJNiwJLyogVVNBUlQgMiAqLworCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgMCAqLworCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgMSAqLworCTQsCS8qIENBTiAqLworCTAsCS8qIFR3by1XaXJlIEludGVyZmFjZSAqLworCTYsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCisJNiwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KKwk1LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCisJNSwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLworCTYsCS8qIEFDOTcgQ29udHJvbGxlciAqLworCTAsCS8qIFRpbWVyIENvdW50ZXIgMCwgMSBhbmQgMiAqLworCTAsCS8qIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciAqLworCTMsCS8qIEV0aGVybmV0ICovCisJMCwKKwkwLAkvKiAyRCBHcmFwaGljIEVuZ2luZSAqLworCTMsCS8qIFVTQiBEZXZpY2UgUG9ydCAqLworCTAsCS8qIEltYWdlIFNlbnNvciBJbnRlcmZhY2UgKi8KKwkzLAkvKiBMREMgQ29udHJvbGxlciAqLworCTAsCS8qIERNQSBDb250cm9sbGVyICovCisJMCwKKwkzLAkvKiBVU0IgSG9zdCBwb3J0ICovCisJMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovCisJMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovCit9OworCit2b2lkIF9faW5pdCBhdDkxc2FtOTI2M19pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W05SX0FJQ19JUlFTXSkKK3sKKwlpZiAoIXByaW9yaXR5KQorCQlwcmlvcml0eSA9IGF0OTFzYW05MjYzX2RlZmF1bHRfaXJxX3ByaW9yaXR5OworCisJLyogSW5pdGlhbGl6ZSB0aGUgQUlDIGludGVycnVwdCBjb250cm9sbGVyICovCisJYXQ5MV9haWNfaW5pdChwcmlvcml0eSk7CisKKwkvKiBFbmFibGUgR1BJTyBpbnRlcnJ1cHRzICovCisJYXQ5MV9ncGlvX2lycV9zZXR1cCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhZjdjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKQEAgLTAsMCArMSw4MTggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTkyNjMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2eF9tYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYzX21hdHJpeC5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisjZGVmaW5lIFNaXzUxMgkweDAwMDAwMjAwCisjZGVmaW5lIFNaXzI1NgkweDAwMDAwMTAwCisjZGVmaW5lIFNaXzE2CTB4MDAwMDAwMTAKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBVU0IgSG9zdAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKK3N0YXRpYyB1NjQgb2hjaV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYzX1VIUF9CQVNFLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjNfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19JRF9VSFAsCisJCS5lbmQJPSBBVDkxU0FNOTI2M19JRF9VSFAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3VzYmhfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX29oY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJm9oY2lfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1c2JoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1c2JoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXNiaF9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKQoreworCWludCBpOworCisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwkvKiBFbmFibGUgVkJ1cyBjb250cm9sIGZvciBVSFAgcG9ydHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cG9ydHM7IGkrKykgeworCQlpZiAoZGF0YS0+dmJ1c19waW5baV0pCisJCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT52YnVzX3BpbltpXSwgMCk7CisJfQorCisJdXNiaF9kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmhfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaChzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFVTQiBEZXZpY2UgKEdhZGdldCkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9BVDkxCitzdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgdWRjX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWRjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9VRFAsCisJCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1VEUCArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19JRF9VRFAsCisJCS5lbmQJPSBBVDkxU0FNOTI2M19JRF9VRFAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3VkY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfdWRjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVkY19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gdWRjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWRjX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRhKQoreworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJaWYgKGRhdGEtPnZidXNfcGluKSB7CisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+dmJ1c19waW4sIDApOworCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT52YnVzX3BpbiwgMSk7CisJfQorCisJLyogUHVsbHVwIHBpbiBpcyBoYW5kbGVkIGludGVybmFsbHkgYnkgVVNCIGRldmljZSBwZXJpcGhlcmFsICovCisKKwl1ZGNfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91ZGNfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBFdGhlcm5ldAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01BQ0IpIHx8IGRlZmluZWQoQ09ORklHX01BQ0JfTU9EVUxFKQorc3RhdGljIHU2NCBldGhfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBldGhfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldGhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX0VNQUMsCisJCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX0VNQUMgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfSURfRU1BQywKKwkJLmVuZAk9IEFUOTFTQU05MjYzX0lEX0VNQUMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19ldGhfZGV2aWNlID0geworCS5uYW1lCQk9ICJtYWNiIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWlmIChkYXRhLT5waHlfaXJxX3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnBoeV9pcnFfcGluLCAwKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+cGh5X2lycV9waW4sIDEpOworCX0KKworCS8qIFBpbnMgdXNlZCBmb3IgTUlJIGFuZCBSTUlJICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyMSwgMCk7CS8qIEVUWENLX0VSRUZDSyAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjUsIDApOwkvKiBFUlhEViAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjUsIDApOwkvKiBFUlgwICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNiwgMCk7CS8qIEVSWDEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI3LCAwKTsJLyogRVJYRVIgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI4LCAwKTsJLyogRVRYRU4gKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIzLCAwKTsJLyogRVRYMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjQsIDApOwkvKiBFVFgxICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUzMCwgMCk7CS8qIEVNRElPICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyOSwgMCk7CS8qIEVNREMgKi8KKworCWlmICghZGF0YS0+aXNfcm1paSkgeworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIyLCAwKTsJLyogRUNSUyAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI2LCAwKTsJLyogRUNPTCAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIyLCAwKTsJLyogRVJYMiAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIzLCAwKTsJLyogRVJYMyAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzI3LCAwKTsJLyogRVJYQ0sgKi8KKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyMCwgMCk7CS8qIEVUWDIgKi8KKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyMSwgMCk7CS8qIEVUWDMgKi8KKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNCwgMCk7CS8qIEVUWEVSICovCisJfQorCisJZXRoX2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX2V0aF9kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IGF0OTFfZXRoX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIE1NQyAvIFNECisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX01NQ19BVDkxX01PRFVMRSkKK3N0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CitzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgbW1jMF9kYXRhLCBtbWMxX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfTUNJMCwKKwkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfTUNJMCArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19JRF9NQ0kwLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjNfSURfTUNJMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX21tYzBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX21jaSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZtbWNfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtbWMwX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBtbWMwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9NQ0kxLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9NQ0kxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYzX0lEX01DSTEsCisJCS5lbmQJPSBBVDkxU0FNOTI2M19JRF9NQ0kxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfbW1jMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfbWNpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJm1tYzFfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IG1tYzFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMxX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbW1jKHNob3J0IG1tY19pZCwgc3RydWN0IGF0OTFfbW1jX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwkvKiBpbnB1dC9pcnEgKi8KKwlpZiAoZGF0YS0+ZGV0X3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDEpOworCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5kZXRfcGluLCAxKTsKKwl9CisJaWYgKGRhdGEtPndwX3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT53cF9waW4sIDEpOworCWlmIChkYXRhLT52Y2NfcGluKQorCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT52Y2NfcGluLCAwKTsKKworCWlmIChtbWNfaWQgPT0gMCkgewkJLyogTUNJMCAqLworCQkvKiBDTEsgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7CisKKwkJaWYgKGRhdGEtPnNsb3RfYikgeworCQkJLyogQ01EICovCisJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE2LCAxKTsKKworCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLworCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNywgMSk7CisJCQlpZiAoZGF0YS0+d2lyZTQpIHsKKwkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAxKTsKKwkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAxKTsKKwkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAxKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIENNRCAqLworCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExLCAxKTsKKworCQkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAqLworCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEwLCAxKTsKKwkJCWlmIChkYXRhLT53aXJlNCkgeworCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMywgMSk7CisJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE0LCAxKTsKKwkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTUsIDEpOworCQkJfQorCQl9CisKKwkJbW1jMF9kYXRhID0gKmRhdGE7CisJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJtY2kwX2NsayIsICZhdDkxc2FtOTI2M19tbWMxX2RldmljZS5kZXYsICJtY2lfY2xrIik7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfbW1jMF9kZXZpY2UpOworCX0gZWxzZSB7CQkJLyogTUNJMSAqLworCQkvKiBDTEsgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE2LCAwKTsKKworCQlpZiAoZGF0YS0+c2xvdF9iKSB7CisJCQkvKiBDTUQgKi8KKwkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjEsIDEpOworCisJCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCisJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAxKTsKKwkJCWlmIChkYXRhLT53aXJlNCkgeworCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjMsIDEpOworCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjQsIDEpOworCQkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDEpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQ01EICovCisJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTcsIDEpOworCisJCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCisJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTgsIDEpOworCQkJaWYgKGRhdGEtPndpcmU0KSB7CisJCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAxKTsKKwkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAxKTsKKwkJCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTExLCAxKTsKKwkJCX0KKwkJfQorCisJCW1tYzFfZGF0YSA9ICpkYXRhOworCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgibWNpMV9jbGsiLCAmYXQ5MXNhbTkyNjNfbW1jMV9kZXZpY2UuZGV2LCAibWNpX2NsayIpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX21tYzFfZGV2aWNlKTsKKwl9Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBOQU5EIC8gU21hcnRNZWRpYQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUOTFfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBhdDkxX25hbmRfZGF0YSBuYW5kX2RhdGE7CisKKyNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE5BTkRfQkFTRSwKKwkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M19uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gbmFuZF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdDkxX25hbmRfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGNzYSwgbW9kZTsKKworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJY3NhID0gYXQ5MV9zeXNfcmVhZChBVDkxX01BVFJJWF9FQkkwQ1NBKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX01BVFJJWF9FQkkwQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9FQkkwX0NTM0FfU01DKTsKKworCS8qIHNldCB0aGUgYnVzIGludGVyZmFjZSBjaGFyYWN0ZXJpc3RpY3MgKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19TRVRVUCgzKSwgQVQ5MV9TTUNfTldFU0VUVVBfKDApIHwgQVQ5MV9TTUNfTkNTX1dSU0VUVVBfKDApCisJCQl8IEFUOTFfU01DX05SRFNFVFVQXygwKSB8IEFUOTFfU01DX05DU19SRFNFVFVQXygwKSk7CisKKwlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19QVUxTRSgzKSwgQVQ5MV9TTUNfTldFUFVMU0VfKDMpIHwgQVQ5MV9TTUNfTkNTX1dSUFVMU0VfKDMpCisJCQl8IEFUOTFfU01DX05SRFBVTFNFXygzKSB8IEFUOTFfU01DX05DU19SRFBVTFNFXygzKSk7CisKKwlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19DWUNMRSgzKSwgQVQ5MV9TTUNfTldFQ1lDTEVfKDUpIHwgQVQ5MV9TTUNfTlJEQ1lDTEVfKDUpKTsKKworCWlmIChkYXRhLT5idXNfd2lkdGhfMTYpCisJCW1vZGUgPSBBVDkxX1NNQ19EQldfMTY7CisJZWxzZQorCQltb2RlID0gQVQ5MV9TTUNfREJXXzg7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERSgzKSwgbW9kZSB8IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX1RERl8oMikpOworCisJLyogZW5hYmxlIHBpbiAqLworCWlmIChkYXRhLT5lbmFibGVfcGluKQorCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5lbmFibGVfcGluLCAxKTsKKworCS8qIHJlYWR5L2J1c3kgcGluICovCisJaWYgKGRhdGEtPnJkeV9waW4pCisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cmR5X3BpbiwgMSk7CisKKwkvKiBjYXJkIGRldGVjdCBwaW4gKi8KKwlpZiAoZGF0YS0+ZGV0X3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKKworCW5hbmRfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfbmFuZF9kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdDkxX25hbmRfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVFdJIChpMmMpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfSTJDX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19BVDkxX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19CQVNFX1RXSSwKKwkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfVFdJICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYzX0lEX1RXSSwKKwkJLmVuZAk9IEFUOTFTQU05MjYzX0lEX1RXSSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3R3aV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gLTEsCisJLnJlc291cmNlCT0gdHdpX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHZvaWQpCit7CisJLyogcGlucyB1c2VkIGZvciBUV0kgaW50ZXJmYWNlICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAwKTsJCS8qIFRXRCAqLworCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCNCwgMSk7CisKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjUsIDApOwkJLyogVFdDSyAqLworCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCNSwgMSk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYzX3R3aV9kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pMmModm9pZCkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgU1BJCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQorc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGkwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9TUEkwLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9TUEkwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYzX0lEX1NQSTAsCisJCS5lbmQJPSBBVDkxU0FNOTI2M19JRF9TUEkwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfc3BpMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3NwaSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCisJLnJlc291cmNlCT0gc3BpMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaTBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGkwX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQTUsIEFUOTFfUElOX1BBMywgQVQ5MV9QSU5fUEE0LCBBVDkxX1BJTl9QQjExIH07CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfU1BJMSwKKwkJLmVuZAk9IEFUOTFTQU05MjYzX0JBU0VfU1BJMSArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19JRF9TUEkxLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjNfSURfU1BJMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX3NwaTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorCS5yZXNvdXJjZQk9IHNwaTFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkxX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMV9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEIxNSwgQVQ5MV9QSU5fUEIxNiwgQVQ5MV9QSU5fUEIxNywgQVQ5MV9QSU5fUEIxOCB9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBjc19waW47CisJc2hvcnQgZW5hYmxlX3NwaTAgPSAwOworCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKKworCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCisJZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgeworCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCisJCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7CisJCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQorCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKwkJZWxzZQorCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKworCQlpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCisJCQllbmFibGVfc3BpMCA9IDE7CisJCWVsc2UKKwkJCWVuYWJsZV9zcGkxID0gMTsKKworCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7CisKKwkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCisJCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOworCX0KKworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOworCisJLyogQ29uZmlndXJlIFNQSSBidXMoZXMpICovCisJaWYgKGVuYWJsZV9zcGkwKSB7CisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMCwgMCk7CS8qIFNQSTBfTUlTTyAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTEsIDApOwkvKiBTUEkwX01PU0kgKi8KKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAwKTsJLyogU1BJMV9TUENLICovCisKKwkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInNwaTBfY2xrIiwgJmF0OTFzYW05MjYzX3NwaTBfZGV2aWNlLmRldiwgInNwaV9jbGsiKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M19zcGkwX2RldmljZSk7CisJfQorCWlmIChlbmFibGVfc3BpMSkgeworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEyLCAwKTsJLyogU1BJMV9NSVNPICovCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTMsIDApOwkvKiBTUEkxX01PU0kgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNCwgMCk7CS8qIFNQSTFfU1BDSyAqLworCisJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJzcGkxX2NsayIsICZhdDkxc2FtOTI2M19zcGkxX2RldmljZS5kZXYsICJzcGlfY2xrIik7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjNfc3BpMV9kZXZpY2UpOworCX0KK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIExFRHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19MRURTKQordTggYXQ5MV9sZWRzX2NwdTsKK3U4IGF0OTFfbGVkc190aW1lcjsKKwordm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKQoreworCS8qIEVuYWJsZSBHUElPIHRvIGFjY2VzcyB0aGUgTEVEcyAqLworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNwdV9sZWQsIDEpOworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KHRpbWVyX2xlZCwgMSk7CisKKwlhdDkxX2xlZHNfY3B1CT0gY3B1X2xlZDsKKwlhdDkxX2xlZHNfdGltZXIJPSB0aW1lcl9sZWQ7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBVQVJUCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVLAorCQkuZW5kCT0gQVQ5MV9WQV9CQVNFX1NZUyArIEFUOTFfREJHVSArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxX0lEX1NZUywKKwkJLmVuZAk9IEFUOTFfSURfU1lTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMCwKKwkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCisJLnJlZ3MJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYzX2RiZ3VfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmZGJndV9kYXRhLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMwLCAwKTsJCS8qIERSWEQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMxLCAxKTsJCS8qIERUWEQgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVVMwLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9VUzAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfSURfVVMwLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjNfSURfVVMwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKKwkudXNlX2RtYV90eAk9IDEsCisJLnVzZV9kbWFfcngJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfdWFydDBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmdWFydDBfZGF0YSwKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCisJLnJlc291cmNlCT0gdWFydDBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDBfcGlucyh2b2lkKQoreworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjYsIDEpOwkJLyogVFhEMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjcsIDApOwkJLyogUlhEMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjgsIDApOwkJLyogUlRTMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjksIDApOwkJLyogQ1RTMCAqLworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfQkFTRV9VUzEsCisJCS5lbmQJPSBBVDkxU0FNOTI2M19CQVNFX1VTMSArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOTI2M19JRF9VUzEsCisJCS5lbmQJPSBBVDkxU0FNOTI2M19JRF9VUzEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MV9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2M191YXJ0MV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMiwKKwkuZGV2CQk9IHsKKwkJCQkucGxhdGZvcm1fZGF0YQk9ICZ1YXJ0MV9kYXRhLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkucmVzb3VyY2UJPSB1YXJ0MV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQxX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHZvaWQpCit7CisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQwLCAxKTsJCS8qIFRYRDEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEsIDApOwkJLyogUlhEMSAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BENywgMCk7CQkvKiBSVFMxICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQ4LCAwKTsJCS8qIENUUzEgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05MjYzX0JBU0VfVVMyLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjNfQkFTRV9VUzIgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjNfSURfVVMyLAorCQkuZW5kCT0gQVQ5MVNBTTkyNjNfSURfVVMyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDJfZGF0YSA9IHsKKwkudXNlX2RtYV90eAk9IDEsCisJLnVzZV9kbWFfcngJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfdWFydDJfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDMsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmdWFydDJfZGF0YSwKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCisJLnJlc291cmNlCT0gdWFydDJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0Ml9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDJfcGlucyh2b2lkKQoreworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMiwgMSk7CQkvKiBUWEQyICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQzLCAwKTsJCS8qIFJYRDIgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDUsIDApOwkJLyogUlRTMiAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BENiwgMCk7CQkvKiBDVFMyICovCit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlOwkvKiB0aGUgc2VyaWFsIGNvbnNvbGUgZGV2aWNlICovCisKK3ZvaWQgX19pbml0IGF0OTFfaW5pdF9zZXJpYWwoc3RydWN0IGF0OTFfdWFydF9jb25maWcgKmNvbmZpZykKK3sKKwlpbnQgaTsKKworCS8qIEZpbGwgaW4gbGlzdCBvZiBzdXBwb3J0ZWQgVUFSVHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ucl90dHk7IGkrKykgeworCQlzd2l0Y2ggKGNvbmZpZy0+dHR5X21hcFtpXSkgeworCQkJY2FzZSAwOgorCQkJCWNvbmZpZ3VyZV91c2FydDBfcGlucygpOworCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjNfdWFydDBfZGV2aWNlOworCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDBfY2xrIiwgJmF0OTFzYW05MjYzX3VhcnQwX2RldmljZS5kZXYsICJ1c2FydCIpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWNvbmZpZ3VyZV91c2FydDFfcGlucygpOworCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjNfdWFydDFfZGV2aWNlOworCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDFfY2xrIiwgJmF0OTFzYW05MjYzX3VhcnQxX2RldmljZS5kZXYsICJ1c2FydCIpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCWNvbmZpZ3VyZV91c2FydDJfcGlucygpOworCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjNfdWFydDJfZGV2aWNlOworCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDJfY2xrIiwgJmF0OTFzYW05MjYzX3VhcnQyX2RldmljZS5kZXYsICJ1c2FydCIpOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCWNvbmZpZ3VyZV9kYmd1X3BpbnMoKTsKKwkJCQlhdDkxX3VhcnRzW2ldID0gJmF0OTFzYW05MjYzX2RiZ3VfZGV2aWNlOworCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJtY2siLCAmYXQ5MXNhbTkyNjNfZGJndV9kZXZpY2UuZGV2LCAidXNhcnQiKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJY29udGludWU7CisJCX0KKwkJYXQ5MV91YXJ0c1tpXS0+aWQgPSBpOwkJLyogdXBkYXRlIElEIG51bWJlciB0byBtYXBwZWQgSUQgKi8KKwl9CisKKwkvKiBTZXQgc2VyaWFsIGNvbnNvbGUgZGV2aWNlICovCisJaWYgKGNvbmZpZy0+Y29uc29sZV90dHkgPCBBVE1FTF9NQVhfVUFSVCkKKwkJYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSA9IGF0OTFfdWFydHNbY29uZmlnLT5jb25zb2xlX3R0eV07CisJaWYgKCFhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKQorCQlwcmludGsoS0VSTl9JTkZPICJBVDkxOiBObyBkZWZhdWx0IHNlcmlhbCBjb25zb2xlIGRlZmluZWQuXG4iKTsKK30KKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKKwkJaWYgKGF0OTFfdWFydHNbaV0pCisJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7CisJfQorfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfaW5pdF9zZXJpYWwoc3RydWN0IGF0OTFfdWFydF9jb25maWcgKmNvbmZpZykge30KK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogVGhlc2UgZGV2aWNlcyBhcmUgYWx3YXlzIHByZXNlbnQgYW5kIGRvbid0IG5lZWQgYW55IGJvYXJkLXNwZWNpZmljCisgKiBzZXR1cC4KKyAqLworc3RhdGljIGludCBfX2luaXQgYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQoreworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjZ4X3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2eF90aW1lLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjZ4X3RpbWUuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjZ4X3RpbWUuYwppbmRleCA5OWRmNWY2Li5hNGRkZWQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNnhfdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2eF90aW1lLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjZ4X3RpbWUuYworICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjZ4X3RpbWUuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE0uIEFtaW5lIFNBWUEsIEFUTUVMIFJvdXNzZXQsIEZyYW5jZQogICogUmV2aXNpb24JIDIwMDUgTS4gTmljb2xhcyBEaXJlbWRqaWFuLCBBVE1FTCBSb3Vzc2V0LCBGcmFuY2UKQEAgLTMwLDcgKzMwLDYgQEAKICAqIFJldHVybnMgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBzaW5jZSBsYXN0IHRpbWVyIGludGVycnVwdC4gIE5vdGUgdGhhdCBpbnRlcnJ1cHRzCiAgKiB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBieSBkb19nZXR0aW1lb2ZkYXkoKQogICogICdMQVRDSCcgaXMgaHdjbG9jayB0aWNrcyAoc2VlIENMT0NLX1RJQ0tfUkFURSBpbiB0aW1leC5oKSBwZXIgamlmZnkuCi0gKiAgJ3RpY2snIGlzIHVzZWNzIHBlciBqaWZmeSAobGludXgvdGltZXguaCkuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGF0OTFzYW05MjZ4X2dldHRpbWVvZmZzZXQodm9pZCkKIHsKQEAgLTM5LDcgKzM4LDcgQEAKIAogCWVsYXBzZWQgPSAoUElUX1BJQ05UKHQpICogTEFUQ0gpICsgUElUX0NQSVYodCk7CQkvKiBoYXJkd2FyZSBjbG9jayBjeWNsZXMgKi8KIAotCXJldHVybiAodW5zaWduZWQgbG9uZykoZWxhcHNlZCAqIDEwMDAwMDApIC8gTEFUQ0g7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKShlbGFwc2VkICogamlmZmllc190b191c2VjcygxKSkgLyBMQVRDSDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC0xYXJtLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtMWFybS5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC0xYXJtLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC0xYXJtLmMKaW5kZXggOTcxYzNlMi4uMmQzZDRiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLTFhcm0uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtMWFybS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC0xYXJtLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC0xYXJtLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY2FybWV2YS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY2FybWV2YS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jCmluZGV4IDY1NGYwMzcuLmI0NTE4NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jYXJtZXZhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY2FybWV2YS5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jCiAgKgogICogIENvcHlyaWdodCAoYykgMjAwNSBQZWVyIEdlb3JnaQogICogIAkJICAgICAgIENvbml0ZWMgRGF0YXN5c3RlbXMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCS8qIENvbXBhY3QgRmxhc2ggKi8KIC8vCWF0OTFfYWRkX2RldmljZV9jZigmY2FybWV2YV9jZl9kYXRhKTsKIAkvKiBNTUMgKi8KLQlhdDkxX2FkZF9kZXZpY2VfbW1jKCZjYXJtZXZhX21tY19kYXRhKTsKKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZjYXJtZXZhX21tY19kYXRhKTsKIH0KIAogTUFDSElORV9TVEFSVChDQVJNRVZBLCAiQ2FybWV2YSIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiMzM3LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMKc2ltaWxhcml0eSBpbmRleCA3OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjMzNy5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3NiMzM3LmMKaW5kZXggYjhiYjgwNS4uZTE4YTQxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjMzNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiMzM3LmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2IzMzcuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQogICoKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMTEyLDYgKzExMyw0MiBAQAogCX0sCiB9OwogCisjZGVmaW5lIENTQl9GTEFTSF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8wCisjZGVmaW5lIENTQl9GTEFTSF9TSVpFCTB4ODAwMDAwCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjc2JfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gInVNT04gZmxhc2giLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogcmVhZCBvbmx5ICovCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgY3NiX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IGNzYl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY3NiX2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjc2JfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBDU0JfRkxBU0hfQkFTRSwKKwkJLmVuZAk9IENTQl9GTEFTSF9CQVNFICsgQ1NCX0ZMQVNIX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2JfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhID0gJmNzYl9mbGFzaF9kYXRhLAorCQkJfSwKKwkucmVzb3VyY2UJPSBjc2JfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjc2JfZmxhc2hfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBjc2IzMzdfYm9hcmRfaW5pdCh2b2lkKQogewogCS8qIFNlcmlhbCAqLwpAQCAtMTMwLDcgKzE2Nyw5IEBACiAJLyogU1BJICovCiAJYXQ5MV9hZGRfZGV2aWNlX3NwaShjc2IzMzdfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoY3NiMzM3X3NwaV9kZXZpY2VzKSk7CiAJLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21tYygmY3NiMzM3X21tY19kYXRhKTsKKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZjc2IzMzdfbW1jX2RhdGEpOworCS8qIE5PUiBmbGFzaCAqLworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3NiX2ZsYXNoKTsKIH0KIAogTUFDSElORV9TVEFSVChDU0IzMzcsICJDb2dlbnQgQ1NCMzM3IikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jc2I2MzcuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2I2MzcuYwpzaW1pbGFyaXR5IGluZGV4IDc0JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiNjM3LmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2I2MzcuYwppbmRleCBhMjlmYTBlOC4uNzdmMDRiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjYzNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2I2MzcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiNjM3LmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jc2I2MzcuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQogICoKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTgxLDYgKzgyLDQyIEBACiAJLnB1bGx1cF9waW4gICA9IEFUOTFfUElOX1BCMSwKIH07CiAKKyNkZWZpbmUgQ1NCX0ZMQVNIX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKKyNkZWZpbmUgQ1NCX0ZMQVNIX1NJWkUJMHgxMDAwMDAwCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjc2JfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gInVNT04gZmxhc2giLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogcmVhZCBvbmx5ICovCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgY3NiX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IGNzYl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY3NiX2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjc2JfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBDU0JfRkxBU0hfQkFTRSwKKwkJLmVuZAk9IENTQl9GTEFTSF9CQVNFICsgQ1NCX0ZMQVNIX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2JfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhID0gJmNzYl9mbGFzaF9kYXRhLAorCQkJfSwKKwkucmVzb3VyY2UJPSBjc2JfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjc2JfZmxhc2hfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBjc2I2MzdfYm9hcmRfaW5pdCh2b2lkKQogewogCS8qIFNlcmlhbCAqLwpAQCAtOTUsNiArMTMyLDggQEAKIAlhdDkxX2FkZF9kZXZpY2VfaTJjKCk7CiAJLyogU1BJICovCiAJYXQ5MV9hZGRfZGV2aWNlX3NwaShOVUxMLCAwKTsKKwkvKiBOT1IgZmxhc2ggKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNzYl9mbGFzaCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoQ1NCNjM3LCAiQ29nZW50IENTQjYzNyIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZGsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1kay5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1kay5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZGsuYwppbmRleCA3NTIyYmY5Li42MDQzYzM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZGsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZGsuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZGsuYworICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWRrLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKICAqCkBAIC0xOTQsNyArMTk0LDcgQEAKICNlbHNlCiAJLyogTU1DICovCiAJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEI3LCAxKTsJLyogdGhpcyBNTUMgY2FyZCBzbG90IGNhbiBvcHRpb25hbGx5IHVzZSBTUEkgc2lnbmFsaW5nIChDUzMpLiAqLwotCWF0OTFfYWRkX2RldmljZV9tbWMoJmRrX21tY19kYXRhKTsKKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZka19tbWNfZGF0YSk7CiAjZW5kaWYKIAkvKiBOQU5EICovCiAJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmRrX25hbmRfZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWI5MjAwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWI5MjAwLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWViOTIwMC5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWI5MjAwLmMKaW5kZXggODBiNzJjZi4uMjA0NThiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWViOTIwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjkyMDAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWI5MjAwLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjkyMDAuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZSwgYWRhcHRlZCBmb3IgQVRFQjkyMDAgZnJvbSBFbWJlc3QKICAqICBieSBBbmRyZXcgUGF0cmlrYWxha2lzCkBAIC0xMDksNyArMTA5LDcgQEAKIAlhdDkxX2FkZF9kZXZpY2Vfc3BpKE5VTEwsIDApOwogCS8qIE1NQyAqLwogCS8qIG9ubHkgc3VwcG9ydHMgMSBvciA0IGJpdCBpbnRlcmZhY2UsIG5vdCB3aXJlZCB0aHJvdWdoIHRvIFNQSSAqLwotCWF0OTFfYWRkX2RldmljZV9tbWMoJmViOTIwMF9tbWNfZGF0YSk7CisJYXQ5MV9hZGRfZGV2aWNlX21tYygwLCAmZWI5MjAwX21tY19kYXRhKTsKIH0KIAogTUFDSElORV9TVEFSVChBVEVCOTIwMCwgIkVtYmVzdCBBVEVCOTIwMCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lay5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1lay5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWsuYwppbmRleCBjNGZkYjQxLi4zMjJmZGQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWsuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWsuYworICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWVrLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKICAqCkBAIC0xNTQsNyArMTU0LDcgQEAKICNlbHNlCiAJLyogTU1DICovCiAJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoQVQ5MV9QSU5fUEIyMiwgMSk7CS8qIHRoaXMgTU1DIGNhcmQgc2xvdCBjYW4gb3B0aW9uYWxseSB1c2UgU1BJIHNpZ25hbGluZyAoQ1MzKS4gKi8KLQlhdDkxX2FkZF9kZXZpY2VfbW1jKCZla19tbWNfZGF0YSk7CisJYXQ5MV9hZGRfZGV2aWNlX21tYygwLCAmZWtfbW1jX2RhdGEpOwogI2VuZGlmCiAJLyogTk9SIEZsYXNoICovCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZla19mbGFzaCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQta2FmYS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWthZmEuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQta2FmYS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jCmluZGV4IDZlZjNjNDguLmM3N2Q4NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1rYWZhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWthZmEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQta2FmYS5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2FmYS5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiBTcGVycnktU3VuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWtiOTIwMi5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1rYjkyMDIuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jCmluZGV4IDc1OWQ4MTkuLjc2ZjZlMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1rYjkyMDIuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2I5MjAyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWtiOTIwMi5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2I5MjAyLmMKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IGtiX2FkbWluCiAgKiAgCQkgICAgICAgS3dpa0J5dGUsIEluYy4KQEAgLTEyMiw3ICsxMjIsNyBAQAogCS8qIFVTQiBEZXZpY2UgKi8KIAlhdDkxX2FkZF9kZXZpY2VfdWRjKCZrYjkyMDJfdWRjX2RhdGEpOwogCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tbWMoJmtiOTIwMl9tbWNfZGF0YSk7CisJYXQ5MV9hZGRfZGV2aWNlX21tYygwLCAma2I5MjAyX21tY19kYXRhKTsKIAkvKiBJMkMgKi8KIAlhdDkxX2FkZF9kZXZpY2VfaTJjKCk7CiAJLyogU1BJICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtc2FtOTI2MGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MGVrLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLXNhbTkyNjBlay5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MGVrLmMKaW5kZXggZGE1ZDU4YS4uNTdmYjQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLXNhbTkyNjBlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYwZWsuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWsuYworICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjBlay5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEF0bWVsCkBAIC0xMTgsNyArMTE4LDcgQEAKIC8qCiAgKiBNQUNCIEV0aGVybmV0IGRldmljZQogICovCi1zdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgZXRoX3BsYXRmb3JtX2RhdGEgZWtfbWFjYl9kYXRhID0geworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIGF0OTFfZXRoX2RhdGEgZWtfbWFjYl9kYXRhID0gewogCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKIAkuaXNfcm1paQk9IDEsCiB9OwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJLyogRXRoZXJuZXQgKi8KIAlhdDkxX2FkZF9kZXZpY2VfZXRoKCZla19tYWNiX2RhdGEpOwogCS8qIE1NQyAqLwotCWF0OTFfYWRkX2RldmljZV9tbWMoJmVrX21tY19kYXRhKTsKKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZla19tbWNfZGF0YSk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoQVQ5MVNBTTkyNjBFSywgIkF0bWVsIEFUOTFTQU05MjYwLUVLIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1zYW05MjYxZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtc2FtOTI2MWVrLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYwppbmRleCAzMGI0OTBkLi5iN2U3NzI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtc2FtOTI2MWVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1lay5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKQEAgLTI0Myw3ICsyNDMsNyBAQAogCWF0OTFfYWRkX2RldmljZV9zcGkoZWtfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUoZWtfc3BpX2RldmljZXMpKTsKICNlbHNlCiAJLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21tYygmZWtfbW1jX2RhdGEpOworCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmVrX21tY19kYXRhKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtc2FtOTI2MGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKc2ltaWxhcml0eSBpbmRleCA3MyUKY29weSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1zYW05MjYwZWsuYwpjb3B5IHRvIGFyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYwppbmRleCBkYTVkNThhLi44ZmRjZTExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtc2FtOTI2MGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCkBAIC0xLDggKzEsOCBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1lay5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00NCwxOSArNDQsMTkgQEAKIAogLyoKICAqIFNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24uCi0gKiAgICAwIC4uIDUgPSBVU0FSVDAgLi4gVVNBUlQ1Ci0gKiAgICA2ICAgICAgPSBEQkdVCisgKiAgICAwIC4uIDIgPSBVU0FSVDAgLi4gVVNBUlQyCisgKiAgICAzICAgICAgPSBEQkdVCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXQ5MV91YXJ0X2NvbmZpZyBfX2luaXRkYXRhIGVrX3VhcnRfY29uZmlnID0gewogCS5jb25zb2xlX3R0eQk9IDAsCQkJCS8qIHR0eVMwICovCi0JLm5yX3R0eQkJPSAzLAotCS50dHlfbWFwCT0geyA2LCAwLCAxLCAtMSwgLTEsIC0xLCAtMSB9CS8qIHR0eVMwLCAuLi4sIHR0eVM2ICovCisJLm5yX3R0eQkJPSAyLAorCS50dHlfbWFwCT0geyAzLCAwLCAtMSwgLTEsIH0JCS8qIHR0eVMwLCAuLi4sIHR0eVMzICovCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZWtfbWFwX2lvKHZvaWQpCiB7Ci0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFzYW05MjYwX2luaXRpYWxpemUoMTg0MzIwMDApOworCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxNi4zNjcgTUh6IGNyeXN0YWwgKi8KKwlhdDkxc2FtOTI2M19pbml0aWFsaXplKDE2MzY3NjYwKTsKIAogCS8qIFNldHVwIHRoZSBzZXJpYWwgcG9ydHMgYW5kIGNvbnNvbGUgKi8KIAlhdDkxX2luaXRfc2VyaWFsKCZla191YXJ0X2NvbmZpZyk7CkBAIC02NCw3ICs2NCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2lycSh2b2lkKQogewotCWF0OTFzYW05MjYwX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKKwlhdDkxc2FtOTI2M19pbml0X2ludGVycnVwdHMoTlVMTCk7CiB9CiAKIApAQCAtNzMsMTMgKzczLDE0IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBla191c2JoX2RhdGEgPSB7CiAJLnBvcnRzCQk9IDIsCisJLnZidXNfcGluCT0geyBBVDkxX1BJTl9QQTI0LCBBVDkxX1BJTl9QQTIxIH0sCiB9OwogCiAvKgogICogVVNCIERldmljZSBwb3J0CiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGVrX3VkY19kYXRhID0gewotCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDNSwKKwkudmJ1c19waW4JPSBBVDkxX1BJTl9QQTI1LAogCS5wdWxsdXBfcGluCT0gMCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLwogfTsKIApAQCAtODgsMTMgKzg5LDYgQEAKICAqIFNQSSBkZXZpY2VzLgogICovCiBzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0jaWYgIWRlZmluZWQoQ09ORklHX01NQ19BVDkxKQotCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KLQkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAotCQkuY2hpcF9zZWxlY3QJPSAxLAotCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKLQkJLmJ1c19udW0JPSAwLAotCX0sCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCiAJewkvKiBEYXRhRmxhc2ggY2FyZCAqLwogCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCkBAIC0xMDMsMjQgKzk3LDE3IEBACiAJCS5idXNfbnVtCT0gMCwKIAl9LAogI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVQ3M0MyMTMpCi0JewkvKiBBVDczQzIxMyBEQUMgKi8KLQkJLm1vZGFsaWFzCT0gInNuZF9hdDczYzIxMyIsCi0JCS5jaGlwX3NlbGVjdAk9IDAsCi0JCS5tYXhfc3BlZWRfaHoJPSAxMCAqIDEwMDAgKiAxMDAwLAotCQkuYnVzX251bQk9IDEsCi0JfSwKLSNlbmRpZgogfTsKIAogCiAvKgotICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKKyAqIE1DSSAoU0QvTU1DKQogICovCi1zdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgZXRoX3BsYXRmb3JtX2RhdGEgZWtfbWFjYl9kYXRhID0gewotCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BBNywKLQkuaXNfcm1paQk9IDEsCitzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgX19pbml0ZGF0YSBla19tbWNfZGF0YSA9IHsKKwkud2lyZTQJCT0gMSwKKwkuZGV0X3Bpbgk9IEFUOTFfUElOX1BFMTgsCisJLndwX3BpbgkJPSBBVDkxX1BJTl9QRTE5LAorLy8JLnZjY19waW4JPSAuLi4gbm90IGNvbm5lY3RlZAogfTsKIAogCkBAIC0xMzEsMTEgKzExOCwxMSBAQAogCXsKIAkJLm5hbWUJPSAiUGFydGl0aW9uIDEiLAogCQkub2Zmc2V0CT0gMCwKLQkJLnNpemUJPSAyNTYgKiAxMDI0LAorCQkuc2l6ZQk9IDY0ICogMTAyNCAqIDEwMjQsCiAJfSwKIAl7CiAJCS5uYW1lCT0gIlBhcnRpdGlvbiAyIiwKLQkJLm9mZnNldAk9IDI1NiAqIDEwMjQsCisJCS5vZmZzZXQJPSA2NCAqIDEwMjQgKiAxMDI0LAogCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCiAJfSwKIH07CkBAIC0xNTAsOCArMTM3LDggQEAKIAkuYWxlCQk9IDIxLAogCS5jbGUJCT0gMjIsCiAvLwkuZGV0X3Bpbgk9IC4uLiBub3QgY29ubmVjdGVkCi0JLnJkeV9waW4JPSBBVDkxX1BJTl9QQzEzLAotCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEMxNCwKKwkucmR5X3Bpbgk9IEFUOTFfUElOX1BBMjIsCisJLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QRDE1LAogCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydGl0aW9ucywKICNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVDkxX0JVU1dJRFRIXzE2KQogCS5idXNfd2lkdGhfMTYJPSAxLApAQCAtMTYxLDE3ICsxNDgsNiBAQAogfTsKIAogCi0vKgotICogTUNJIChTRC9NTUMpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0gewotCS5zbG90X2IJCT0gMSwKLQkud2lyZTQJCT0gMSwKLS8vCS5kZXRfcGluCT0gLi4uIG5vdCBjb25uZWN0ZWQKLS8vCS53cF9waW4JCT0gLi4uIG5vdCBjb25uZWN0ZWQKLS8vCS52Y2NfcGluCT0gLi4uIG5vdCBjb25uZWN0ZWQKLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCiB7CiAJLyogU2VyaWFsICovCkBAIC0xODIsMTUgKzE1OCwxMyBAQAogCWF0OTFfYWRkX2RldmljZV91ZGMoJmVrX3VkY19kYXRhKTsKIAkvKiBTUEkgKi8KIAlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7CisJLyogTU1DICovCisJYXQ5MV9hZGRfZGV2aWNlX21tYygxLCAmZWtfbW1jX2RhdGEpOwogCS8qIE5BTkQgKi8KIAlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKLQkvKiBFdGhlcm5ldCAqLwotCWF0OTFfYWRkX2RldmljZV9ldGgoJmVrX21hY2JfZGF0YSk7Ci0JLyogTU1DICovCi0JYXQ5MV9hZGRfZGV2aWNlX21tYygmZWtfbW1jX2RhdGEpOwogfQogCi1NQUNISU5FX1NUQVJUKEFUOTFTQU05MjYwRUssICJBdG1lbCBBVDkxU0FNOTI2MC1FSyIpCitNQUNISU5FX1NUQVJUKEFUOTFTQU05MjYzRUssICJBdG1lbCBBVDkxU0FNOTI2My1FSyIpCiAJLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KIAkucGh5c19pbwk9IEFUOTFfQkFTRV9TWVMsCiAJLmlvX3BnX29mZnN0CT0gKEFUOTFfVkFfQkFTRV9TWVMgPj4gMTgpICYgMHhmZmZjLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYwpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1hdDkxL2Nsb2NrLmMKaW5kZXggMzZhOGU0ZC4uMDZjOWEwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2Nsb2NrLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IERhdmlkIEJyb3duZWxsCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5CkBAIC01MjUsMjcgKzUyNSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBTZXZlcmFsIHVudXNlZCBjbG9ja3MgbWF5IGJlIGFjdGl2ZS4gIFR1cm4gdGhlbSBvZmYuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBhdDkxX3BlcmlwaGNsa19yZXNldCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCXN0cnVjdCBjbGsgKmNsazsKLQotCXJlZyA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfUENTUik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaywgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAoY2xrLT5tb2RlICE9IHBtY19wZXJpcGhfbW9kZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjbGstPnVzZXJzID4gMCkKLQkJCXJlZyAmPSB+Y2xrLT5wbWNfbWFzazsKLQl9Ci0KLQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0RSLCByZWcpOwotfQotCiBzdGF0aWMgc3RydWN0IGNsayAqY29uc3Qgc3RhbmRhcmRfcG1jX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogZm91ciBwcmltYXJ5IGNsb2NrcyAqLwogCSZjbGszMmssCkBAIC01ODYsNyArNTY1LDcgQEAKIAkJcHJfaW5mbygiQ2xvY2tzOiBQTExBIG92ZXJjbG9ja2VkLCAlbGQgTUh6XG4iLCBwbGxhLnJhdGVfaHogLyAxMDAwMDAwKTsKIAogCS8qCi0JICogVVNCIGNsb2NrIGluaXQ6ICBjaG9vc2UgNDggTUh6IFBMTEIgdmFsdWUsIHR1cm4gYWxsIGNsb2NrcyBvZmYsCisJICogVVNCIGNsb2NrIGluaXQ6ICBjaG9vc2UgNDggTUh6IFBMTEIgdmFsdWUsCiAJICogZGlzYWJsZSA0OE1IeiBjbG9jayBkdXJpbmcgdXNiIHBlcmlwaGVyYWwgc3VzcGVuZC4KIAkgKgogCSAqIFJFVklTSVQ6ICBhc3N1bWVzIE1DSyBkb2Vzbid0IGRlcml2ZSBmcm9tIFBMTEIhCkBAIC01OTYsMTYgKzU3NSwxMCBAQAogCWlmIChjcHVfaXNfYXQ5MXJtOTIwMCgpKSB7CiAJCXVocGNrLnBtY19tYXNrID0gQVQ5MVJNOTIwMF9QTUNfVUhQOwogCQl1ZHBjay5wbWNfbWFzayA9IEFUOTFSTTkyMDBfUE1DX1VEUDsKLQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NEUiwgQVQ5MVJNOTIwMF9QTUNfVUhQIHwgQVQ5MVJNOTIwMF9QTUNfVURQKTsKIAkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgQVQ5MVJNOTIwMF9QTUNfTUNLVURQKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpKSB7CisJfSBlbHNlIGlmIChjcHVfaXNfYXQ5MXNhbTkyNjAoKSB8fCBjcHVfaXNfYXQ5MXNhbTkyNjEoKSB8fCBjcHVfaXNfYXQ5MXNhbTkyNjMoKSkgewogCQl1aHBjay5wbWNfbWFzayA9IEFUOTFTQU05MjZ4X1BNQ19VSFA7CiAJCXVkcGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VEUDsKLQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NEUiwgQVQ5MVNBTTkyNnhfUE1DX1VIUCB8IEFUOTFTQU05MjZ4X1BNQ19VRFApOwotCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYxKCkpIHsKLQkJdWhwY2sucG1jX21hc2sgPSAoQVQ5MVNBTTkyNnhfUE1DX1VIUCB8IEFUOTFfUE1DX0hDSzApOwotCQl1ZHBjay5wbWNfbWFzayA9IEFUOTFTQU05MjZ4X1BNQ19VRFA7Ci0JCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1NDRFIsIEFUOTFTQU05MjZ4X1BNQ19VSFAgfCBBVDkxX1BNQ19IQ0swIHwgQVQ5MVNBTTkyNnhfUE1DX1VEUCk7CiAJfQogCWF0OTFfc3lzX3dyaXRlKEFUOTFfQ0tHUl9QTExCUiwgMCk7CiAKQEAgLTYzNCwxMSArNjA3LDM0IEBACiAJCSh1bnNpZ25lZCkgbWFpbl9jbG9jayAvIDEwMDAwMDAsCiAJCSgodW5zaWduZWQpIG1haW5fY2xvY2sgJSAxMDAwMDAwKSAvIDEwMDApOwogCi0JLyogZGlzYWJsZSBhbGwgcHJvZ3JhbW1hYmxlIGNsb2NrcyAqLwotCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1NDRFIsIEFUOTFfUE1DX1BDSzAgfCBBVDkxX1BNQ19QQ0sxIHwgQVQ5MV9QTUNfUENLMiB8IEFUOTFfUE1DX1BDSzMpOworCXJldHVybiAwOworfQogCi0JLyogZGlzYWJsZSBhbGwgb3RoZXIgdW51c2VkIHBlcmlwaGVyYWwgY2xvY2tzICovCi0JYXQ5MV9wZXJpcGhjbGtfcmVzZXQoKTsKKy8qCisgKiBTZXZlcmFsIHVudXNlZCBjbG9ja3MgbWF5IGJlIGFjdGl2ZS4gIFR1cm4gdGhlbSBvZmYuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfY2xvY2tfcmVzZXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBjZHIgPSAwOworCXVuc2lnbmVkIGxvbmcgc2NkciA9IDA7CisJc3RydWN0IGNsayAqY2xrOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGssICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKGNsay0+dXNlcnMgPiAwKQorCQkJY29udGludWU7CisKKwkJaWYgKGNsay0+bW9kZSA9PSBwbWNfcGVyaXBoX21vZGUpCisJCQlwY2RyIHw9IGNsay0+cG1jX21hc2s7CisKKwkJaWYgKGNsay0+bW9kZSA9PSBwbWNfc3lzX21vZGUpCisJCQlzY2RyIHw9IGNsay0+cG1jX21hc2s7CisKKwkJcHJfZGVidWcoIkNsb2NrczogZGlzYWJsZSB1bnVzZWQgJXNcbiIsIGNsay0+bmFtZSk7CisJfQorCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfUENEUiwgcGNkcik7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NEUiwgc2Nkcik7CiAKIAlyZXR1cm4gMDsKIH0KK2xhdGVfaW5pdGNhbGwoYXQ5MV9jbG9ja19yZXNldCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jbG9jay5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suaAppbmRleCBiNWM3YTJlLi4xYmEzYjk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suaAorICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxL2Nsb2NrLmgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9nZW5lcmljLmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKaW5kZXggOGM0ZDVhNy4uYmRhMjYyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9nZW5lcmljLmgKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IERhdmlkIEJyb3duZWxsCiAgKgpAQCAtMTIsMTEgKzEyLDEzIEBACiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaywgdW5zaWduZWQgc2hvcnQgYmFua3MpOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05MjYwX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MV9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jayk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogCiAgLyogSW50ZXJydXB0cyAqLwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFybTkyMDBfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05MjYxX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FpY19pbml0KHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIAogIC8qIFRpbWVyICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCmluZGV4IDE1ZWI1YjYuLjdiODdmM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEhQIExhYnMKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvaXJxLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2lycS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvaXJxLmMKaW5kZXggMjE0OGRhYWYuLjc4YTVjZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaXJxLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2lycS5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvaXJxLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IFNBTiBQZW9wbGUKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQVRNRUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvbGVkcy5jCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9sZWRzLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtYXQ5MS9sZWRzLmMKaW5kZXggMWEzMzM3My4uMGQ1MTQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2xlZHMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvbGVkcy5jCkBAIC04NiwxMCArODYsNiBAQAogCWlmICghYXQ5MV9sZWRzX3RpbWVyIHx8ICFhdDkxX2xlZHNfY3B1KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIEVuYWJsZSBQSU8gdG8gYWNjZXNzIHRoZSBMRURzICovCi0JYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoYXQ5MV9sZWRzX3RpbWVyLCAxKTsKLQlhdDkxX3NldF9ncGlvX291dHB1dChhdDkxX2xlZHNfY3B1LCAxKTsKLQogCWxlZHNfZXZlbnQgPSBhdDkxX2xlZHNfZXZlbnQ7CiAKIAlsZWRzX2V2ZW50KGxlZF9zdGFydCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvcG0uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9wbS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLWF0OTEvcG0uYwppbmRleCA2N2FhNTU3Li5iNDliZmRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvcG0uYworICogYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKICAqIEFUOTEgUG93ZXIgTWFuYWdlbWVudAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbApAQCAtODAsNiArODAsOCBAQAogI3dhcm5pbmcgIkNoZWNrIFNBTTkyNjAgVVNCIGNsb2NrcyIKIAl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MSgpKSB7CiAjd2FybmluZyAiQ2hlY2sgU0FNOTI2MSBVU0IgY2xvY2tzIgorCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYzKCkpIHsKKyN3YXJuaW5nICJDaGVjayBTQU05MjYzIFVTQiBjbG9ja3MiCiAJfQogCiAjaWZkZWYgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKaW5kZXggYWY3OTA0Yi4uNTc1YTIxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCkBAIC01MSw2ICs1MSwzMSBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEdsb21hdGlvbgogCSAgR0VTQkMtOTMxMi1zeCBib2FyZC4KIAorY29uZmlnIE1BQ0hfTUlDUk85CisgICAgICAgIGJvb2wKKyAgICAgICAgZGVmYXVsdCBuCisKK2NvbmZpZyBNQUNIX01JQ1JPOUgKKyAgICAgICBib29sICJTdXBwb3J0IENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUgiCisgICAgICAgc2VsZWN0IE1BQ0hfTUlDUk85CisgICAgICAgaGVscAorICAgICAgICAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisgICAgICAgICBDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1IIGJvYXJkLgorCitjb25maWcgTUFDSF9NSUNSTzlNCisgICAgICAgYm9vbCAiU3VwcG9ydCBDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1NIgorICAgICAgIHNlbGVjdCBNQUNIX01JQ1JPOQorICAgICAgIGhlbHAKKyAgICAgICAgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorICAgICAgICAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSBib2FyZC4KKworY29uZmlnIE1BQ0hfTUlDUk85TAorICAgICAgIGJvb2wgIlN1cHBvcnQgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTCIKKyAgICAgICBzZWxlY3QgTUFDSF9NSUNSTzkKKyAgICAgICBoZWxwCisgICAgICAgICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKyAgICAgICAgIENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUwgYm9hcmQuCisKIGNvbmZpZyBNQUNIX1RTNzJYWAogCWJvb2wgIlN1cHBvcnQgVGVjaG5vbG9naWMgU3lzdGVtcyBUUy03Mnh4IFNCQyIKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCmluZGV4IGIwNjY0MWQuLjBkM2JmOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCkBAIC0xMyw0ICsxMyw1IEBACiBvYmotJChDT05GSUdfTUFDSF9FREI5MzE1KQkrPSBlZGI5MzE1Lm8KIG9iai0kKENPTkZJR19NQUNIX0VEQjkzMTVBKQkrPSBlZGI5MzE1YS5vCiBvYmotJChDT05GSUdfTUFDSF9HRVNCQzkzMTIpCSs9IGdlc2JjOTMxMi5vCitvYmotJChDT05GSUdfTUFDSF9NSUNSTzkpCSs9IG1pY3JvOS5vCiBvYmotJChDT05GSUdfTUFDSF9UUzcyWFgpCSs9IHRzNzJ4eC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwppbmRleCAwOGFkNzgyLi5mMTc0ZDFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KQEAgLTEyNCw3ICsxMjUsNyBAQAogCXJldHVybiAodW5zaWduZWQgbG9uZylyYXRlOwogfQogCi12b2lkIGVwOTN4eF9jbG9ja19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBlcDkzeHhfY2xvY2tfaW5pdCh2b2lkKQogewogCXUzMiB2YWx1ZTsKIApAQCAtMTUzLDQgKzE1NCw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiZXA5M3h4OiBGQ0xLICVsZCBNSHosIEhDTEsgJWxkIE1IeiwgUENMSyAlbGQgTUh6XG4iLAogCQljbGtfZi5yYXRlIC8gMTAwMDAwMCwgY2xrX2gucmF0ZSAvIDEwMDAwMDAsCiAJCWNsa19wLnJhdGUgLyAxMDAwMDAwKTsKKworCXJldHVybiAwOwogfQorYXJjaF9pbml0Y2FsbChlcDkzeHhfY2xvY2tfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKaW5kZXggNmIyNjM0Ni4uODI5YWVkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwpAQCAtMTUyLDIyICsxNTIsMzAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHUElPIGhhbmRsaW5nIGZvciBFUDkzeHgKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfZW5hYmxlWzJdOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfdHlwZTFbMl07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF90eXBlMlsyXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X3VubWFza2VkWzNdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfZW5hYmxlZFszXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X3R5cGUxWzNdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfdHlwZTJbM107CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9ncGlvX2FiX2ludF9wYXJhbXMoaW50IHBvcnQpCitzdGF0aWMgdm9pZCB1cGRhdGVfZ3Bpb19pbnRfcGFyYW1zKGludCBhYmYpCiB7Ci0JaWYgKHBvcnQgPT0gMCkgeworCWlmIChhYmYgPT0gMCkgewogCQlfX3Jhd193cml0ZWIoMCwgRVA5M1hYX0dQSU9fQV9JTlRfRU5BQkxFKTsKIAkJX19yYXdfd3JpdGViKGdwaW9faW50X3R5cGUyWzBdLCBFUDkzWFhfR1BJT19BX0lOVF9UWVBFMik7CiAJCV9fcmF3X3dyaXRlYihncGlvX2ludF90eXBlMVswXSwgRVA5M1hYX0dQSU9fQV9JTlRfVFlQRTEpOwotCQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfZW5hYmxlWzBdLCBFUDkzWFhfR1BJT19BX0lOVF9FTkFCTEUpOwotCX0gZWxzZSBpZiAocG9ydCA9PSAxKSB7CisJCV9fcmF3X3dyaXRlYihncGlvX2ludF91bm1hc2tlZFswXSAmIGdwaW9faW50X2VuYWJsZWRbMF0sIEVQOTNYWF9HUElPX0FfSU5UX0VOQUJMRSk7CisJfSBlbHNlIGlmIChhYmYgPT0gMSkgewogCQlfX3Jhd193cml0ZWIoMCwgRVA5M1hYX0dQSU9fQl9JTlRfRU5BQkxFKTsKIAkJX19yYXdfd3JpdGViKGdwaW9faW50X3R5cGUyWzFdLCBFUDkzWFhfR1BJT19CX0lOVF9UWVBFMik7CiAJCV9fcmF3X3dyaXRlYihncGlvX2ludF90eXBlMVsxXSwgRVA5M1hYX0dQSU9fQl9JTlRfVFlQRTEpOwotCQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfZW5hYmxlWzFdLCBFUDkzWFhfR1BJT19CX0lOVF9FTkFCTEUpOworCQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfdW5tYXNrZWRbMV0gJiBncGlvX2ludF9lbmFibGVkWzFdLCBFUDkzWFhfR1BJT19CX0lOVF9FTkFCTEUpOworCX0gZWxzZSBpZiAoYWJmID09IDIpIHsKKwkJX19yYXdfd3JpdGViKDAsIEVQOTNYWF9HUElPX0ZfSU5UX0VOQUJMRSk7CisJCV9fcmF3X3dyaXRlYihncGlvX2ludF90eXBlMlsyXSwgRVA5M1hYX0dQSU9fRl9JTlRfVFlQRTIpOworCQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfdHlwZTFbMl0sIEVQOTNYWF9HUElPX0ZfSU5UX1RZUEUxKTsKKwkJX19yYXdfd3JpdGViKGdwaW9faW50X3VubWFza2VkWzJdICYgZ3Bpb19pbnRfZW5hYmxlZFsyXSwgRVA5M1hYX0dQSU9fRl9JTlRfRU5BQkxFKTsKKwl9IGVsc2UgeworCQlCVUcoKTsKIAl9CiB9CiAKQEAgLTE5Miw4ICsyMDAsMTMgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJaWYgKGRpcmVjdGlvbiA9PSBHUElPX09VVCkgewogCQlpZiAobGluZSA+PSAwICYmIGxpbmUgPCAxNikgewotCQkJZ3Bpb19pbnRfZW5hYmxlW2xpbmUgPj4gM10gJj0gfigxIDw8IChsaW5lICYgNykpOwotCQkJdXBkYXRlX2dwaW9fYWJfaW50X3BhcmFtcyhsaW5lID4+IDMpOworCQkJLyogUG9ydCBBL0IuICAqLworCQkJZ3Bpb19pbnRfdW5tYXNrZWRbbGluZSA+PiAzXSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7CisJCQl1cGRhdGVfZ3Bpb19pbnRfcGFyYW1zKGxpbmUgPj4gMyk7CisJCX0gZWxzZSBpZiAobGluZSA+PSA0MCAmJiBsaW5lIDwgNDgpIHsKKwkJCS8qIFBvcnQgRi4gICovCisJCQlncGlvX2ludF91bm1hc2tlZFsyXSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7CisJCQl1cGRhdGVfZ3Bpb19pbnRfcGFyYW1zKDIpOwogCQl9CiAKIAkJdiA9IF9fcmF3X3JlYWRiKGRhdGFfZGlyZWN0aW9uX3JlZ2lzdGVyKTsKQEAgLTI0NCw4ICsyNTcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEVQOTN4eCBJUlEgaGFuZGxpbmcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fYWJfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwKLQkJc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fYWJfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwogCWludCBpOwpAQCAtMjY3LDM3ICsyNzksNDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2FiX2lycV9tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJaW50IGdwaW9faXJxID0gSVJRX0VQOTNYWF9HUElPKDE2KSArICgoKGlycSArIDEpICYgNykgXiA0KTsKKworCWRlc2NfaGFuZGxlX2lycShncGlvX2lycSwgaXJxX2Rlc2MgKyBncGlvX2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2lycV9tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBsaW5lID0gaXJxIC0gSVJRX0VQOTNYWF9HUElPKDApOwogCWludCBwb3J0ID0gbGluZSA+PiAzOwogCi0JZ3Bpb19pbnRfZW5hYmxlW3BvcnRdICY9IH4oMSA8PCAobGluZSAmIDcpKTsKLQl1cGRhdGVfZ3Bpb19hYl9pbnRfcGFyYW1zKHBvcnQpOworCWdwaW9faW50X3VubWFza2VkW3BvcnRdICY9IH4oMSA8PCAobGluZSAmIDcpKTsKKwl1cGRhdGVfZ3Bpb19pbnRfcGFyYW1zKHBvcnQpOwogCi0JaWYgKGxpbmUgPj4gMykgewotCQlfX3Jhd193cml0ZWwoMSA8PCAobGluZSAmIDcpLCBFUDkzWFhfR1BJT19CX0lOVF9BQ0spOwotCX0gZWxzZSB7CisJaWYgKHBvcnQgPT0gMCkgewogCQlfX3Jhd193cml0ZWwoMSA8PCAobGluZSAmIDcpLCBFUDkzWFhfR1BJT19BX0lOVF9BQ0spOworCX0gZWxzZSBpZiAocG9ydCA9PSAxKSB7CisJCV9fcmF3X3dyaXRlbCgxIDw8IChsaW5lICYgNyksIEVQOTNYWF9HUElPX0JfSU5UX0FDSyk7CisJfSBlbHNlIGlmIChwb3J0ID09IDIpIHsKKwkJX19yYXdfd3JpdGVsKDEgPDwgKGxpbmUgJiA3KSwgRVA5M1hYX0dQSU9fRl9JTlRfQUNLKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2FiX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBsaW5lID0gaXJxIC0gSVJRX0VQOTNYWF9HUElPKDApOwogCWludCBwb3J0ID0gbGluZSA+PiAzOwogCi0JZ3Bpb19pbnRfZW5hYmxlW3BvcnRdICY9IH4oMSA8PCAobGluZSAmIDcpKTsKLQl1cGRhdGVfZ3Bpb19hYl9pbnRfcGFyYW1zKHBvcnQpOworCWdwaW9faW50X3VubWFza2VkW3BvcnRdICY9IH4oMSA8PCAobGluZSAmIDcpKTsKKwl1cGRhdGVfZ3Bpb19pbnRfcGFyYW1zKHBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19hYl9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaW50IGxpbmUgPSBpcnEgLSBJUlFfRVA5M1hYX0dQSU8oMCk7CiAJaW50IHBvcnQgPSBsaW5lID4+IDM7CiAKLQlncGlvX2ludF9lbmFibGVbcG9ydF0gfD0gMSA8PCAobGluZSAmIDcpOwotCXVwZGF0ZV9ncGlvX2FiX2ludF9wYXJhbXMocG9ydCk7CisJZ3Bpb19pbnRfdW5tYXNrZWRbcG9ydF0gfD0gMSA8PCAobGluZSAmIDcpOworCXVwZGF0ZV9ncGlvX2ludF9wYXJhbXMocG9ydCk7CiB9CiAKIApAQCAtMzA2LDQwICszMjcsNTEgQEAKICAqIGVkZ2UgKDEpIHRyaWdnZXJlZCwgd2hpbGUgZ3Bpb19pbnRfdHlwZTIgY29udHJvbHMgd2hldGhlciBpdAogICogdHJpZ2dlcnMgb24gbG93L2ZhbGxpbmcgKDApIG9yIGhpZ2gvcmlzaW5nICgxKS4KICAqLwotc3RhdGljIGludCBlcDkzeHhfZ3Bpb19hYl9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3N0YXRpYyBpbnQgZXA5M3h4X2dwaW9faXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJaW50IHBvcnQ7CiAJaW50IGxpbmU7CiAKIAlsaW5lID0gaXJxIC0gSVJRX0VQOTNYWF9HUElPKDApOwotCWdwaW9fbGluZV9jb25maWcobGluZSwgR1BJT19JTik7CisJaWYgKGxpbmUgPj0gMCAmJiBsaW5lIDwgMTYpIHsKKwkJZ3Bpb19saW5lX2NvbmZpZyhsaW5lLCBHUElPX0lOKTsKKwl9IGVsc2UgeworCQlncGlvX2xpbmVfY29uZmlnKEVQOTNYWF9HUElPX0xJTkVfRihsaW5lKSwgR1BJT19JTik7CisJfQogCiAJcG9ydCA9IGxpbmUgPj4gMzsKIAlsaW5lICY9IDc7CiAKIAlpZiAodHlwZSAmIElSUVRfUklTSU5HKSB7CisJCWdwaW9faW50X2VuYWJsZWRbcG9ydF0gfD0gMSA8PCBsaW5lOwogCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSAxIDw8IGxpbmU7CiAJCWdwaW9faW50X3R5cGUyW3BvcnRdIHw9IDEgPDwgbGluZTsKIAl9IGVsc2UgaWYgKHR5cGUgJiBJUlFUX0ZBTExJTkcpIHsKKwkJZ3Bpb19pbnRfZW5hYmxlZFtwb3J0XSB8PSAxIDw8IGxpbmU7CiAJCWdwaW9faW50X3R5cGUxW3BvcnRdIHw9IDEgPDwgbGluZTsKIAkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfigxIDw8IGxpbmUpOwogCX0gZWxzZSBpZiAodHlwZSAmIElSUVRfSElHSCkgeworCQlncGlvX2ludF9lbmFibGVkW3BvcnRdIHw9IDEgPDwgbGluZTsKIAkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gJj0gfigxIDw8IGxpbmUpOwogCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSAxIDw8IGxpbmU7CiAJfSBlbHNlIGlmICh0eXBlICYgSVJRVF9MT1cpIHsKKwkJZ3Bpb19pbnRfZW5hYmxlZFtwb3J0XSB8PSAxIDw8IGxpbmU7CiAJCWdwaW9faW50X3R5cGUxW3BvcnRdICY9IH4oMSA8PCBsaW5lKTsKIAkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfigxIDw8IGxpbmUpOworCX0gZWxzZSB7CisJCWdwaW9faW50X2VuYWJsZWRbcG9ydF0gJj0gfigxIDw8IGxpbmUpOwogCX0KLQl1cGRhdGVfZ3Bpb19hYl9pbnRfcGFyYW1zKHBvcnQpOworCXVwZGF0ZV9ncGlvX2ludF9wYXJhbXMocG9ydCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBlcDkzeHhfZ3Bpb19hYl9pcnFfY2hpcCA9IHsKLQkuYWNrCQk9IGVwOTN4eF9ncGlvX2FiX2lycV9tYXNrX2FjaywKLQkubWFzawkJPSBlcDkzeHhfZ3Bpb19hYl9pcnFfbWFzaywKLQkudW5tYXNrCQk9IGVwOTN4eF9ncGlvX2FiX2lycV91bm1hc2ssCi0JLnNldF90eXBlCT0gZXA5M3h4X2dwaW9fYWJfaXJxX3R5cGUsCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGVwOTN4eF9ncGlvX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJHUElPIiwKKwkuYWNrCQk9IGVwOTN4eF9ncGlvX2lycV9tYXNrX2FjaywKKwkubWFzawkJPSBlcDkzeHhfZ3Bpb19pcnFfbWFzaywKKwkudW5tYXNrCQk9IGVwOTN4eF9ncGlvX2lycV91bm1hc2ssCisJLnNldF90eXBlCT0gZXA5M3h4X2dwaW9faXJxX3R5cGUsCiB9OwogCiAKQEAgLTM1MCwxMiArMzgyLDIxIEBACiAJdmljX2luaXQoKHZvaWQgKilFUDkzWFhfVklDMV9CQVNFLCAwLCBFUDkzWFhfVklDMV9WQUxJRF9JUlFfTUFTSyk7CiAJdmljX2luaXQoKHZvaWQgKilFUDkzWFhfVklDMl9CQVNFLCAzMiwgRVA5M1hYX1ZJQzJfVkFMSURfSVJRX01BU0spOwogCi0JZm9yIChpcnEgPSBJUlFfRVA5M1hYX0dQSU8oMCkgOyBpcnEgPD0gSVJRX0VQOTNYWF9HUElPKDE1KTsgaXJxKyspIHsKLQkJc2V0X2lycV9jaGlwKGlycSwgJmVwOTN4eF9ncGlvX2FiX2lycV9jaGlwKTsKKwlmb3IgKGlycSA9IElSUV9FUDkzWFhfR1BJTygwKTsgaXJxIDw9IElSUV9FUDkzWFhfR1BJTygyMyk7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZlcDkzeHhfZ3Bpb19pcnFfY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CiAJfQorCiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPX0FCLCBlcDkzeHhfZ3Bpb19hYl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPME1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPMU1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPMk1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPM01VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPNE1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPNU1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPNk1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPN01VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CiB9CiAKIApAQCAtNDYxLDggKzUwMiw2IEBACiB7CiAJdW5zaWduZWQgaW50IHY7CiAKLQllcDkzeHhfY2xvY2tfaW5pdCgpOwotCiAJLyoKIAkgKiBEaXNhbGxvdyBhY2Nlc3MgdG8gTWF2ZXJpY2tDcnVuY2ggaW5pdGlhbGx5LgogCSAqLwpAQCAtNDc3LDggKzUxNiw0IEBACiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9ydGNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9vaGNpX2RldmljZSk7Ci0KLSNpZmRlZiBDT05GSUdfQ1JVTkNICi0JZWxmX2h3Y2FwIHw9IEhXQ0FQX0NSVU5DSDsKLSNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjhjMTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ29udGVjIFN0ZXVlcnVuZ3N0ZWNobmlrICYgQXV0b21hdGlvbiBHbWJICisgKiAgICAgICAgICAgICAgICAgICBNYW5mcmVkIEdydWJlciA8bWFuZnJlZC5ncnViZXJAY29udGVjLmF0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgbWljcm85X2V0aF9kYXRhID0geworICAgICAgIC5waHlfaWQgICAgICAgICAgICAgICAgID0gMHgxZiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWljcm85X2V0aF9yZXNvdXJjZVtdID0geworICAgICAgIHsKKyAgICAgICAgICAgICAgIC5zdGFydCAgPSBFUDkzWFhfRVRIRVJORVRfUEhZU19CQVNFLAorICAgICAgICAgICAgICAgLmVuZCAgICA9IEVQOTNYWF9FVEhFUk5FVF9QSFlTX0JBU0UgKyAweGZmZmYsCisgICAgICAgICAgICAgICAuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisgICAgICAgfSwgeworICAgICAgICAgICAgICAgLnN0YXJ0ICA9IElSUV9FUDkzWFhfRVRIRVJORVQsCisgICAgICAgICAgICAgICAuZW5kICAgID0gSVJRX0VQOTNYWF9FVEhFUk5FVCwKKyAgICAgICAgICAgICAgIC5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKyAgICAgICB9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaWNybzlfZXRoX2RldmljZSA9IHsKKyAgICAgICAubmFtZSAgICAgICAgICAgPSAiZXA5M3h4LWV0aCIsCisgICAgICAgLmlkICAgICAgICAgICAgID0gLTEsCisgICAgICAgLmRldiAgICAgICAgICAgID0geworICAgICAgICAgICAgICAgLnBsYXRmb3JtX2RhdGEgID0gJm1pY3JvOV9ldGhfZGF0YSwKKyAgICAgICB9LAorICAgICAgIC5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShtaWNybzlfZXRoX3Jlc291cmNlKSwKKyAgICAgICAucmVzb3VyY2UgICAgICAgPSBtaWNybzlfZXRoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOV9ldGhfaW5pdCh2b2lkKQoreworICAgICAgIG1lbWNweShtaWNybzlfZXRoX2RhdGEuZGV2X2FkZHIsCisgICAgICAgICAgICAgICAodm9pZCAqKShFUDkzWFhfRVRIRVJORVRfQkFTRSArIDB4NTApLCA2KTsKKyAgICAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1pY3JvOV9ldGhfZGV2aWNlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOV9pbml0KHZvaWQpCit7CisgICAgICAgbWljcm85X2V0aF9pbml0KCk7Cit9CisKKy8qCisgKiBNaWNybzktSAorICovCisjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85SAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWljcm85aF9mbGFzaF9kYXRhID0geworICAgICAgIC53aWR0aCAgICAgICAgICA9IDQsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1pY3JvOWhfZmxhc2hfcmVzb3VyY2UgPSB7CisgICAgICAgLnN0YXJ0ICAgICAgICAgID0gMHgxMDAwMDAwMCwKKyAgICAgICAuZW5kICAgICAgICAgICAgPSAweDEzZmZmZmZmLAorICAgICAgIC5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWljcm85aF9mbGFzaCA9IHsKKyAgICAgICAubmFtZSAgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCisgICAgICAgLmlkICAgICAgICAgICAgID0gMCwKKyAgICAgICAuZGV2ICAgICAgICAgICAgPSB7CisgICAgICAgICAgICAgICAucGxhdGZvcm1fZGF0YSAgPSAmbWljcm85aF9mbGFzaF9kYXRhLAorICAgICAgIH0sCisgICAgICAgLm51bV9yZXNvdXJjZXMgID0gMSwKKyAgICAgICAucmVzb3VyY2UgICAgICAgPSAmbWljcm85aF9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtaWNybzloX2luaXQodm9pZCkKK3sKKyAgICAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1pY3JvOWhfZmxhc2gpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbWljcm85aF9pbml0X21hY2hpbmUodm9pZCkKK3sKKyAgICAgICBlcDkzeHhfaW5pdF9kZXZpY2VzKCk7CisgICAgICAgbWljcm85X2luaXQoKTsKKyAgICAgICBtaWNybzloX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChNSUNSTzksICJDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1IIikKKyAgICAgICAvKiBNYWludGFpbmVyOiBNYW5mcmVkIEdydWJlciA8bWFuZnJlZC5ncnViZXJAY29udGVjLmF0PiAqLworICAgICAgIC5waHlzX2lvICAgICAgICA9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAorICAgICAgIC5pb19wZ19vZmZzdCAgICA9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKyAgICAgICAuYm9vdF9wYXJhbXMgICAgPSAweDAwMDAwMTAwLAorICAgICAgIC5tYXBfaW8gICAgICAgICA9IGVwOTN4eF9tYXBfaW8sCisgICAgICAgLmluaXRfaXJxICAgICAgID0gZXA5M3h4X2luaXRfaXJxLAorICAgICAgIC50aW1lciAgICAgICAgICA9ICZlcDkzeHhfdGltZXIsCisgICAgICAgLmluaXRfbWFjaGluZSAgID0gbWljcm85aF9pbml0X21hY2hpbmUsCitNQUNISU5FX0VORAorI2VuZGlmCisKKy8qCisgKiBNaWNybzktTQorICovCisjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85TQorc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOW1faW5pdF9tYWNoaW5lKHZvaWQpCit7CisgICAgICAgZXA5M3h4X2luaXRfZGV2aWNlcygpOworICAgICAgIG1pY3JvOV9pbml0KCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoTUlDUk85TSwgIkNvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LU0iKQorICAgICAgIC8qIE1haW50YWluZXI6IE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+ICovCisgICAgICAgLnBoeXNfaW8gICAgICAgID0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCisgICAgICAgLmlvX3BnX29mZnN0ICAgID0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorICAgICAgIC5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCisgICAgICAgLm1hcF9pbyAgICAgICAgID0gZXA5M3h4X21hcF9pbywKKyAgICAgICAuaW5pdF9pcnEgICAgICAgPSBlcDkzeHhfaW5pdF9pcnEsCisgICAgICAgLnRpbWVyICAgICAgICAgID0gJmVwOTN4eF90aW1lciwKKyAgICAgICAuaW5pdF9tYWNoaW5lICAgPSBtaWNybzltX2luaXRfbWFjaGluZSwKK01BQ0hJTkVfRU5ECisjZW5kaWYKKworLyoKKyAqIE1pY3JvOS1MCisgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlMCitzdGF0aWMgdm9pZCBfX2luaXQgbWljcm85bF9pbml0X21hY2hpbmUodm9pZCkKK3sKKyAgICAgICBlcDkzeHhfaW5pdF9kZXZpY2VzKCk7CisgICAgICAgbWljcm85X2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChNSUNSTzlMLCAiQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTCIpCisgICAgICAgLyogTWFpbnRhaW5lcjogTWFuZnJlZCBHcnViZXIgPG1hbmZyZWQuZ3J1YmVyQGNvbnRlYy5hdD4gKi8KKyAgICAgICAucGh5c19pbyAgICAgICAgPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKKyAgICAgICAuaW9fcGdfb2Zmc3QgICAgPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisgICAgICAgLmJvb3RfcGFyYW1zICAgID0gMHgwMDAwMDEwMCwKKyAgICAgICAubWFwX2lvICAgICAgICAgPSBlcDkzeHhfbWFwX2lvLAorICAgICAgIC5pbml0X2lycSAgICAgICA9IGVwOTN4eF9pbml0X2lycSwKKyAgICAgICAudGltZXIgICAgICAgICAgPSAmZXA5M3h4X3RpbWVyLAorICAgICAgIC5pbml0X21hY2hpbmUgICA9IG1pY3JvOWxfaW5pdF9tYWNoaW5lLAorTUFDSElORV9FTkQKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWlteC90aW1lLmMKaW5kZXggNDAwMzliMi4uMjcwM2E3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L3RpbWUuYwpAQCAtODcsNyArODcsNyBAQAogCS5yZWFkCQk9IGlteF9nZXRfY3ljbGVzLAogCS5tYXNrCQk9IDB4RkZGRkZGRkYsCiAJLnNoaWZ0IAkJPSAyMCwKLQkuaXNfY29udGludW91cyAJPSAxLAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGlteF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvTWFrZWZpbGUKaW5kZXggYzNkNmMwOC4uNDE4NWUwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9NYWtlZmlsZQpAQCAtNSw3ICs1LDYgQEAKIAogb2JqLSQoQ09ORklHX0FSQ0hfSU9QMTNYWCkgKz0gc2V0dXAubwogb2JqLSQoQ09ORklHX0FSQ0hfSU9QMTNYWCkgKz0gaXJxLm8KLW9iai0kKENPTkZJR19BUkNIX0lPUDEzWFgpICs9IHRpbWUubwogb2JqLSQoQ09ORklHX0FSQ0hfSU9QMTNYWCkgKz0gcGNpLm8KIG9iai0kKENPTkZJR19BUkNIX0lPUDEzWFgpICs9IGlvLm8KIG9iai0kKENPTkZJR19NQUNIX0lRODEzNDBTQykgKz0gaXE4MTM0MHNjLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwbWMuYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwbWMuYwppbmRleCAyYTFiYmZlLi5hNTE5ZDcwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lxODEzNDBtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwbWMuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vYXJjaC9wY2kuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdGltZS5oPgogCiBleHRlcm4gaW50IGluaXRfYXR1OyAvKiBGbGFnIHRvIHNlbGVjdCB3aGljaCBBVFUocykgdG8gaW5pdGlhbGl6ZSAvIGRpc2FibGUgKi8KIApAQCAtNzgsMTIgKzc5LDEyIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpcTgxMzQwbWNfdGltZXJfaW5pdCh2b2lkKQogewotCWlvcDEzeHhfaW5pdF90aW1lKDQwMDAwMDAwMCk7CisJaW9wX2luaXRfdGltZSg0MDAwMDAwMDApOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c190aW1lciBpcTgxMzQwbWNfdGltZXIgPSB7CiAgICAgICAgLmluaXQgICAgICAgPSBpcTgxMzQwbWNfdGltZXJfaW5pdCwKLSAgICAgICAub2Zmc2V0ICAgICA9IGlvcDEzeHhfZ2V0dGltZW9mZnNldCwKKyAgICAgICAub2Zmc2V0ICAgICA9IGlvcF9nZXR0aW1lb2Zmc2V0LAogfTsKIAogTUFDSElORV9TVEFSVChJUTgxMzQwTUMsICJJbnRlbCBJUTgxMzQwTUMiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lxODEzNDBzYy5jIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lxODEzNDBzYy5jCmluZGV4IDVhZDJiNjIuLjBlNzFmYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwc2MuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXE4MTM0MHNjLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RpbWUuaD4KIAogZXh0ZXJuIGludCBpbml0X2F0dTsKIApAQCAtODAsMTIgKzgxLDEyIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpcTgxMzQwc2NfdGltZXJfaW5pdCh2b2lkKQogewotCWlvcDEzeHhfaW5pdF90aW1lKDQwMDAwMDAwMCk7CisJaW9wX2luaXRfdGltZSg0MDAwMDAwMDApOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c190aW1lciBpcTgxMzQwc2NfdGltZXIgPSB7CiAgICAgICAgLmluaXQgICAgICAgPSBpcTgxMzQwc2NfdGltZXJfaW5pdCwKLSAgICAgICAub2Zmc2V0ICAgICA9IGlvcDEzeHhfZ2V0dGltZW9mZnNldCwKKyAgICAgICAub2Zmc2V0ICAgICA9IGlvcF9nZXR0aW1lb2Zmc2V0LAogfTsKIAogTUFDSElORV9TVEFSVChJUTgxMzQwU0MsICJJbnRlbCBJUTgxMzQwU0MiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lycS5jCmluZGV4IGRiYmMwN2MuLmIyZWIwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXJxLmMKQEAgLTE2MSw2NSArMTYxLDQ5IEBACiBzdGF0aWMgdm9pZAogaW9wMTN4eF9pcnFfbWFzazAgKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdTMyIGNwX2ZsYWdzID0gaW9wMTN4eF9jcDZfc2F2ZSgpOwogCXdyaXRlX2ludGN0bF8wKHJlYWRfaW50Y3RsXzAoKSAmIH4oMSA8PCAoaXJxIC0gMCkpKTsKLQlpb3AxM3h4X2NwNl9yZXN0b3JlKGNwX2ZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQKIGlvcDEzeHhfaXJxX21hc2sxICh1bnNpZ25lZCBpbnQgaXJxKQogewotCXUzMiBjcF9mbGFncyA9IGlvcDEzeHhfY3A2X3NhdmUoKTsKIAl3cml0ZV9pbnRjdGxfMShyZWFkX2ludGN0bF8xKCkgJiB+KDEgPDwgKGlycSAtIDMyKSkpOwotCWlvcDEzeHhfY3A2X3Jlc3RvcmUoY3BfZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZAogaW9wMTN4eF9pcnFfbWFzazIgKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdTMyIGNwX2ZsYWdzID0gaW9wMTN4eF9jcDZfc2F2ZSgpOwogCXdyaXRlX2ludGN0bF8yKHJlYWRfaW50Y3RsXzIoKSAmIH4oMSA8PCAoaXJxIC0gNjQpKSk7Ci0JaW9wMTN4eF9jcDZfcmVzdG9yZShjcF9mbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkCiBpb3AxM3h4X2lycV9tYXNrMyAodW5zaWduZWQgaW50IGlycSkKIHsKLQl1MzIgY3BfZmxhZ3MgPSBpb3AxM3h4X2NwNl9zYXZlKCk7CiAJd3JpdGVfaW50Y3RsXzMocmVhZF9pbnRjdGxfMygpICYgfigxIDw8IChpcnEgLSA5NikpKTsKLQlpb3AxM3h4X2NwNl9yZXN0b3JlKGNwX2ZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQKIGlvcDEzeHhfaXJxX3VubWFzazAodW5zaWduZWQgaW50IGlycSkKIHsKLQl1MzIgY3BfZmxhZ3MgPSBpb3AxM3h4X2NwNl9zYXZlKCk7CiAJd3JpdGVfaW50Y3RsXzAocmVhZF9pbnRjdGxfMCgpIHwgKDEgPDwgKGlycSAtIDApKSk7Ci0JaW9wMTN4eF9jcDZfcmVzdG9yZShjcF9mbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkCiBpb3AxM3h4X2lycV91bm1hc2sxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdTMyIGNwX2ZsYWdzID0gaW9wMTN4eF9jcDZfc2F2ZSgpOwogCXdyaXRlX2ludGN0bF8xKHJlYWRfaW50Y3RsXzEoKSB8ICgxIDw8IChpcnEgLSAzMikpKTsKLQlpb3AxM3h4X2NwNl9yZXN0b3JlKGNwX2ZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQKIGlvcDEzeHhfaXJxX3VubWFzazIodW5zaWduZWQgaW50IGlycSkKIHsKLQl1MzIgY3BfZmxhZ3MgPSBpb3AxM3h4X2NwNl9zYXZlKCk7CiAJd3JpdGVfaW50Y3RsXzIocmVhZF9pbnRjdGxfMigpIHwgKDEgPDwgKGlycSAtIDY0KSkpOwotCWlvcDEzeHhfY3A2X3Jlc3RvcmUoY3BfZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZAogaW9wMTN4eF9pcnFfdW5tYXNrMyh1bnNpZ25lZCBpbnQgaXJxKQogewotCXUzMiBjcF9mbGFncyA9IGlvcDEzeHhfY3A2X3NhdmUoKTsKIAl3cml0ZV9pbnRjdGxfMyhyZWFkX2ludGN0bF8zKCkgfCAoMSA8PCAoaXJxIC0gOTYpKSk7Ci0JaW9wMTN4eF9jcDZfcmVzdG9yZShjcF9mbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9wMTN4eF9pcnFjaGlwMSA9IHsKQEAgLTI1MCwxMSArMjM0LDEzIEBACiAJLnVubWFzayA9IGlvcDEzeHhfaXJxX3VubWFzazMsCiB9OwogCitleHRlcm4gdm9pZCBpb3BfaW5pdF9jcDZfaGFuZGxlcih2b2lkKTsKKwogdm9pZCBfX2luaXQgaW9wMTN4eF9pbml0X2lycSh2b2lkKQogewogCXVuc2lnbmVkIGludCBpOwogCi0JdTMyIGNwX2ZsYWdzID0gaW9wMTN4eF9jcDZfc2F2ZSgpOworCWlvcF9pbml0X2NwNl9oYW5kbGVyKCk7CiAKIAkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJd3JpdGVfaW50Y3RsXzAoMCk7CkBAIC0yODUsNiArMjcxLDQgQEAKIAkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKIAl9Ci0KLQlpb3AxM3h4X2NwNl9yZXN0b3JlKGNwX2ZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3NldHVwLmMKaW5kZXggNWZiZWIyOC4uOWE0NmJjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3NldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3NldHVwLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgSU9QMTNYWF9VQVJUX1hUQUwgMzMzMzQwMDAKICNkZWZpbmUgSU9QMTNYWF9TRVRVUF9ERUJVRyAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3RpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIyMTM2NS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvdGltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWlvcDEzeHgvdGltZS5jCi0gKgotICogVGltZXIgY29kZSBmb3IgSU9QMTN4eCAoY29waWVkIGZyb20gSU9QMzJ4L0lPUDMzeCBpbXBsZW1lbnRhdGlvbikKLSAqCi0gKiBBdXRob3I6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAbXZpc3RhLmNvbT4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMi0yMDAzIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpY2tzX3Blcl9qaWZmeTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpY2tzX3Blcl91c2VjOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbmV4dF9qaWZmeV90aW1lOwotCi1zdGF0aWMgaW5saW5lIHUzMiByZWFkX3RjcjEodm9pZCkKLXsKLQl1MzIgdmFsOwotCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzMsIGM5LCAwIiA6ICI9ciIgKHZhbCkpOwotCXJldHVybiB2YWw7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgaW9wMTN4eF9nZXR0aW1lb2Zmc2V0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0JdTMyIGNwX2ZsYWdzOwotCi0JY3BfZmxhZ3MgPSBpb3AxM3h4X2NwNl9zYXZlKCk7Ci0Jb2Zmc2V0ID0gbmV4dF9qaWZmeV90aW1lIC0gcmVhZF90Y3IxKCk7Ci0JaW9wMTN4eF9jcDZfcmVzdG9yZShjcF9mbGFncyk7Ci0KLQlyZXR1cm4gb2Zmc2V0IC8gdGlja3NfcGVyX3VzZWM7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdAotaW9wMTN4eF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXUzMiBjcF9mbGFncyA9IGlvcDEzeHhfY3A2X3NhdmUoKTsKLQotCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwotCi0JYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNiwgYzksIDAiIDogOiAiciIgKDEpKTsKLQotCXdoaWxlICgoc2lnbmVkIGxvbmcpKG5leHRfamlmZnlfdGltZSAtIHJlYWRfdGNyMSgpKQotCQkJCQkJCT49IHRpY2tzX3Blcl9qaWZmeSkgewotCQl0aW1lcl90aWNrKCk7Ci0JCW5leHRfamlmZnlfdGltZSAtPSB0aWNrc19wZXJfamlmZnk7Ci0JfQotCi0Jd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKLQotCWlvcDEzeHhfY3A2X3Jlc3RvcmUoY3BfZmxhZ3MpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpb3AxM3h4X3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiSU9QMTNYWCBUaW1lciBUaWNrIiwKLQkuaGFuZGxlcgk9IGlvcDEzeHhfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKLX07Ci0KLXZvaWQgX19pbml0IGlvcDEzeHhfaW5pdF90aW1lKHVuc2lnbmVkIGxvbmcgdGlja19yYXRlKQotewotCXUzMiB0aW1lcl9jdGw7Ci0JdTMyIGNwX2ZsYWdzOwotCi0JdGlja3NfcGVyX2ppZmZ5ID0gKHRpY2tfcmF0ZSArIEhaLzIpIC8gSFo7Ci0JdGlja3NfcGVyX3VzZWMgPSB0aWNrX3JhdGUgLyAxMDAwMDAwOwotCW5leHRfamlmZnlfdGltZSA9IDB4ZmZmZmZmZmY7Ci0KLQl0aW1lcl9jdGwgPSBJT1AxM1hYX1RNUl9FTiB8IElPUDEzWFhfVE1SX1BSSVZJTEVHRUQgfAotCQkJSU9QMTNYWF9UTVJfUkVMT0FEIHwgSU9QMTNYWF9UTVJfUkFUSU9fMV8xOwotCi0JLyoKLQkgKiBXZSB1c2UgdGltZXIgMCBmb3Igb3VyIHRpbWVyIGludGVycnVwdCwgYW5kIHRpbWVyIDEgYXMKLQkgKiBtb25vdG9uaWMgY291bnRlciBmb3IgdHJhY2tpbmcgbWlzc2VkIGppZmZpZXMuCi0JICovCi0JY3BfZmxhZ3MgPSBpb3AxM3h4X2NwNl9zYXZlKCk7Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNCwgYzksIDAiIDogOiAiciIgKHRpY2tzX3Blcl9qaWZmeSAtIDEpKTsKLQlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMwLCBjOSwgMCIgOiA6ICJyIiAodGltZXJfY3RsKSk7Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNSwgYzksIDAiIDogOiAiciIgKDB4ZmZmZmZmZmYpKTsKLQlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMxLCBjOSwgMCIgOiA6ICJyIiAodGltZXJfY3RsKSk7Ci0JaW9wMTN4eF9jcDZfcmVzdG9yZShjcF9mbGFncyk7Ci0KLQlzZXR1cF9pcnEoSVJRX0lPUDEzWFhfVElNRVIwLCAmaW9wMTN4eF90aW1lcl9pcnEpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvZ2xhbnRhbmsuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2dsYW50YW5rLmMKaW5kZXggYjliNzY1MC4uNDVmNGYxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvZ2xhbnRhbmsuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9nbGFudGFuay5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC90aW1lLmg+CiAKIC8qCiAgKiBHTEFOIFRhbmsgdGltZXIgdGljayBjb25maWd1cmF0aW9uLgpAQCAtMzgsMTIgKzM5LDEyIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgZ2xhbnRhbmtfdGltZXJfaW5pdCh2b2lkKQogewogCS8qIDMzLjMzMyBNSHogY3J5c3RhbC4gICovCi0JaW9wM3h4X2luaXRfdGltZSgyMDAwMDAwMDApOworCWlvcF9pbml0X3RpbWUoMjAwMDAwMDAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgZ2xhbnRhbmtfdGltZXIgPSB7CiAJLmluaXQJCT0gZ2xhbnRhbmtfdGltZXJfaW5pdCwKLQkub2Zmc2V0CQk9IGlvcDN4eF9nZXR0aW1lb2Zmc2V0LAorCS5vZmZzZXQJCT0gaW9wX2dldHRpbWVvZmZzZXQsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxMzEyNDQuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxMzEyNDQuYwppbmRleCBiZTRhZWRmLi41NzFhYzM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTMxMjQ0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXEzMTI0NC5jCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0KKyNpbmNsdWRlIDxhc20vYXJjaC90aW1lLmg+CiAKIC8qCiAgKiBUaGUgRVA4MDIxOSBhbmQgSVEzMTI0NCB1c2UgdGhlIHNhbWUgbWFjaGluZSBJRC4gIFRvIGZpbmQgb3V0CkBAIC01NiwxNiArNTYsMTYgQEAKIHsKIAlpZiAoaXNfODAyMTkoKSkgewogCQkvKiAzMy4zMzMgTUh6IGNyeXN0YWwuICAqLwotCQlpb3AzeHhfaW5pdF90aW1lKDIwMDAwMDAwMCk7CisJCWlvcF9pbml0X3RpbWUoMjAwMDAwMDAwKTsKIAl9IGVsc2UgewogCQkvKiAzMy4wMDAgTUh6IGNyeXN0YWwuICAqLwotCQlpb3AzeHhfaW5pdF90aW1lKDE5ODAwMDAwMCk7CisJCWlvcF9pbml0X3RpbWUoMTk4MDAwMDAwKTsKIAl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGlxMzEyNDRfdGltZXIgPSB7CiAJLmluaXQJCT0gaXEzMTI0NF90aW1lcl9pbml0LAotCS5vZmZzZXQJCT0gaW9wM3h4X2dldHRpbWVvZmZzZXQsCisJLm9mZnNldAkJPSBpb3BfZ2V0dGltZW9mZnNldCwKIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXE4MDMyMS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXE4MDMyMS5jCmluZGV4IDFmMzdiNTUuLjM2MWM3MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxODAzMjEuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTgwMzIxLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC90aW1lLmg+CiAKIC8qCiAgKiBJUTgwMzIxIHRpbWVyIHRpY2sgY29uZmlndXJhdGlvbi4KQEAgLTQwLDEyICs0MSwxMiBAQAogc3RhdGljIHZvaWQgX19pbml0IGlxODAzMjFfdGltZXJfaW5pdCh2b2lkKQogewogCS8qIDMzLjMzMyBNSHogY3J5c3RhbC4gICovCi0JaW9wM3h4X2luaXRfdGltZSgyMDAwMDAwMDApOworCWlvcF9pbml0X3RpbWUoMjAwMDAwMDAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgaXE4MDMyMV90aW1lciA9IHsKIAkuaW5pdAkJPSBpcTgwMzIxX3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSBpb3AzeHhfZ2V0dGltZW9mZnNldCwKKwkub2Zmc2V0CQk9IGlvcF9nZXR0aW1lb2Zmc2V0LAogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lycS5jCmluZGV4IDNlYzFjZDUuLjgyNTk4ZGMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcnEuYwpAQCAtMjMsMTYgKzIzLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRjdGxfd3JpdGUodTMyIHZhbCkKIHsKLQlpb3AzeHhfY3A2X2VuYWJsZSgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzAsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKLQlpb3AzeHhfY3A2X2Rpc2FibGUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGludHN0cl93cml0ZSh1MzIgdmFsKQogewotCWlvcDN4eF9jcDZfZW5hYmxlKCk7CiAJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNCwgYzAsIDAiIDogOiAiciIgKHZhbCkpOwotCWlvcDN4eF9jcDZfZGlzYWJsZSgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjAsNiArNTYsOCBAQAogewogCWludCBpOwogCisJaW9wX2luaXRfY3A2X2hhbmRsZXIoKTsKKwogCWludGN0bF93cml0ZSgwKTsKIAlpbnRzdHJfd3JpdGUoMCk7CiAJaWYgKG1hY2hpbmVfaXNfZ2xhbnRhbmsoKSB8fApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvbjIxMDAuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L24yMTAwLmMKaW5kZXggMjQ5OWE3Ny4uNWYwNzM0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvbjIxMDAuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9uMjEwMC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdGltZS5oPgogCiAvKgogICogTjIxMDAgdGltZXIgdGljayBjb25maWd1cmF0aW9uLgpAQCAtNDQsMTIgKzQ1LDEyIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbjIxMDBfdGltZXJfaW5pdCh2b2lkKQogewogCS8qIDMzLjAwMCBNSHogY3J5c3RhbC4gICovCi0JaW9wM3h4X2luaXRfdGltZSgxOTgwMDAwMDApOworCWlvcF9pbml0X3RpbWUoMTk4MDAwMDAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbjIxMDBfdGltZXIgPSB7CiAJLmluaXQJCT0gbjIxMDBfdGltZXJfaW5pdCwKLQkub2Zmc2V0CQk9IGlvcDN4eF9nZXR0aW1lb2Zmc2V0LAorCS5vZmZzZXQJCT0gaW9wX2dldHRpbWVvZmZzZXQsCiB9OwogCiAKQEAgLTEyMCw2ICsxMjEsMjAgQEAKIAkubWFwX2lycQk9IG4yMTAwX3BjaV9tYXBfaXJxLAogfTsKIAorLyoKKyAqIEJvdGggcjgxNjkgY2hpcHMgb24gdGhlIG4yMTAwIGV4aGliaXQgUENJIHBhcml0eSBwcm9ibGVtcy4gIFNldAorICogdGhlIC0+YnJva2VuX3Bhcml0eV9zdGF0dXMgZmxhZyBmb3IgYm90aCBwb3J0cyBzbyB0aGF0IHRoZSByODE2OQorICogZHJpdmVyIGtub3dzIGl0IHNob3VsZCBpZ25vcmUgZXJyb3IgaW50ZXJydXB0cy4KKyAqLworc3RhdGljIHZvaWQgbjIxMDBfZml4dXBfcjgxNjkoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5idXMtPm51bWJlciA9PSAwICYmCisJICAgIChkZXYtPmRldmZuID09IFBDSV9ERVZGTigxLCAwKSB8fAorCSAgICAgZGV2LT5kZXZmbiA9PSBQQ0lfREVWRk4oMiwgMCkpKQorCQlkZXYtPmJyb2tlbl9wYXJpdHlfc3RhdHVzID0gMTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgUENJX0FOWV9JRCwgbjIxMDBfZml4dXBfcjgxNjkpOworCiBzdGF0aWMgaW50IF9faW5pdCBuMjEwMF9wY2lfaW5pdCh2b2lkKQogewogCWlmIChtYWNoaW5lX2lzX24yMTAwKCkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMxLmMgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMxLmMKaW5kZXggOTdhN2I3NC4uMWE5ZTM2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzEuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RpbWUuaD4KIAogLyoKICAqIElRODAzMzEgdGltZXIgdGljayBjb25maWd1cmF0aW9uLgpAQCAtNDAsMTQgKzQxLDE0IEBACiB7CiAJLyogRC1TdGVwIHBhcnRzIHJ1biBhdCBhIGhpZ2hlciBpbnRlcm5hbCBidXMgZnJlcXVlbmN5ICovCiAJaWYgKCpJT1AzWFhfQVRVUklEID49IDB4YSkKLQkJaW9wM3h4X2luaXRfdGltZSgzMzMwMDAwMDApOworCQlpb3BfaW5pdF90aW1lKDMzMzAwMDAwMCk7CiAJZWxzZQotCQlpb3AzeHhfaW5pdF90aW1lKDI2NjAwMDAwMCk7CisJCWlvcF9pbml0X3RpbWUoMjY2MDAwMDAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgaXE4MDMzMV90aW1lciA9IHsKIAkuaW5pdAkJPSBpcTgwMzMxX3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSBpb3AzeHhfZ2V0dGltZW9mZnNldCwKKwkub2Zmc2V0CQk9IGlvcF9nZXR0aW1lb2Zmc2V0LAogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMyLmMgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMyLmMKaW5kZXggOTg4N2JmYy4uOTZkNmYwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzIuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3RpbWUuaD4KIAogLyoKICAqIElRODAzMzIgdGltZXIgdGljayBjb25maWd1cmF0aW9uLgpAQCAtNDAsMTQgKzQxLDE0IEBACiB7CiAJLyogRC1TdGVwIHBhcnRzIGFuZCB0aGUgaW9wMzMzIHJ1biBhdCBhIGhpZ2hlciBpbnRlcm5hbCBidXMgZnJlcXVlbmN5ICovCiAJaWYgKCpJT1AzWFhfQVRVUklEID49IDB4YSB8fCAqSU9QM1hYX0FUVURJRCA9PSAweDM3NCkKLQkJaW9wM3h4X2luaXRfdGltZSgzMzMwMDAwMDApOworCQlpb3BfaW5pdF90aW1lKDMzMzAwMDAwMCk7CiAJZWxzZQotCQlpb3AzeHhfaW5pdF90aW1lKDI2NjAwMDAwMCk7CisJCWlvcF9pbml0X3RpbWUoMjY2MDAwMDAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgaXE4MDMzMl90aW1lciA9IHsKIAkuaW5pdAkJPSBpcTgwMzMyX3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSBpb3AzeHhfZ2V0dGltZW9mZnNldCwKKwkub2Zmc2V0CQk9IGlvcF9nZXR0aW1lb2Zmc2V0LAogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lycS5jCmluZGV4IDAwYjM3ZjMuLmM2NWVhNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lycS5jCkBAIC0yNCw0NCArMjQsMzIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGludGN0bDBfd3JpdGUodTMyIHZhbCkKIHsKLQlpb3AzeHhfY3A2X2VuYWJsZSgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzAsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKLQlpb3AzeHhfY3A2X2Rpc2FibGUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGludGN0bDFfd3JpdGUodTMyIHZhbCkKIHsKLQlpb3AzeHhfY3A2X2VuYWJsZSgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzEsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKLQlpb3AzeHhfY3A2X2Rpc2FibGUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGludHN0cjBfd3JpdGUodTMyIHZhbCkKIHsKLQlpb3AzeHhfY3A2X2VuYWJsZSgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzIsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKLQlpb3AzeHhfY3A2X2Rpc2FibGUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGludHN0cjFfd3JpdGUodTMyIHZhbCkKIHsKLQlpb3AzeHhfY3A2X2VuYWJsZSgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzMsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKLQlpb3AzeHhfY3A2X2Rpc2FibGUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGludGJhc2Vfd3JpdGUodTMyIHZhbCkKIHsKLQlpb3AzeHhfY3A2X2VuYWJsZSgpOwogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzEyLCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7Ci0JaW9wM3h4X2NwNl9kaXNhYmxlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRzaXplX3dyaXRlKHUzMiB2YWwpCiB7Ci0JaW9wM3h4X2NwNl9lbmFibGUoKTsKIAlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMxMywgYzAsIDAiIDogOiAiciIgKHZhbCkpOwotCWlvcDN4eF9jcDZfZGlzYWJsZSgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTEwLDYgKzk4LDggQEAKIHsKIAlpbnQgaTsKIAorCWlvcF9pbml0X2NwNl9oYW5kbGVyKCk7CisKIAlpbnRjdGwwX3dyaXRlKDApOwogCWludGN0bDFfd3JpdGUoMCk7CiAJaW50c3RyMF93cml0ZSgwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCmluZGV4IGUzMTZiZDkuLjhhMzM5Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZwpAQCAtMTcsNyArMTcsNyBAQAogCSAgTlNMVTIgTkFTIGRldmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwbGF0Zm9ybSwKIAkgIHNlZSBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZwogCi1jb25maWcgQVJDSF9BVklMQQorY29uZmlnIE1BQ0hfQVZJTEEKIAlib29sICJBdmlsYSIKIAlzZWxlY3QgUENJCiAJaGVscApAQCAtMjUsNiArMjUsMTQgQEAKIAkgIEF2aWxhIE5ldHdvcmsgUGxhdGZvcm0uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgcGxhdGZvcm0sCiAJICBzZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9hcm0vSVhQNHh4Pi4KIAorY29uZmlnIE1BQ0hfTE9GVAorICAgIGJvb2wgIkxvZnQiCisgICAgZGVwZW5kcyBvbiBNQUNIX0FWSUxBCisgICAgaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEdpYW50CisJICBTaG91bGRlciBJbmMgTG9mdCBib2FyZCAoYSBtaW5vciB2YXJpYXRpb24gb24gdGhlIHN0YW5kYXJkCisJICBHYXRld29ya3MgQXZpbGEgTmV0d29yayBQbGF0Zm9ybSkuCisKIGNvbmZpZyBBUkNIX0FESV9DT1lPVEUKIAlib29sICJDb3lvdGUiCiAJc2VsZWN0IFBDSQpAQCAtODYsNyArOTQsNyBAQAogIwogY29uZmlnCUFSQ0hfSVhEUDRYWAogCWJvb2wKLQlkZXBlbmRzIG9uIEFSQ0hfSVhEUDQyNSB8fCBBUkNIX0FWSUxBIHx8IE1BQ0hfSVhEUDQ2NQorCWRlcGVuZHMgb24gQVJDSF9JWERQNDI1IHx8IE1BQ0hfSVhEUDQ2NQogCWRlZmF1bHQgeQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlCmluZGV4IDY0MDMxNWQuLjc0NmUyOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogb2JqLXBjaS1uCTo9CiAKIG9iai1wY2ktJChDT05GSUdfQVJDSF9JWERQNFhYKQkJKz0gaXhkcDQyNS1wY2kubworb2JqLXBjaS0kKENPTkZJR19NQUNIX0FWSUxBKQkJKz0gYXZpbGEtcGNpLm8KIG9iai1wY2ktJChDT05GSUdfTUFDSF9JWERQRzQyNSkJCSs9IGl4ZHBnNDI1LXBjaS5vCiBvYmotcGNpLSQoQ09ORklHX0FSQ0hfQURJX0NPWU9URSkJKz0gY295b3RlLXBjaS5vCiBvYmotcGNpLSQoQ09ORklHX01BQ0hfR1RXWDU3MTUpCQkrPSBndHd4NTcxNS1wY2kubwpAQCAtMTUsNiArMTYsNyBAQAogb2JqLXkJKz0gY29tbW9uLm8KIAogb2JqLSQoQ09ORklHX0FSQ0hfSVhEUDRYWCkJKz0gaXhkcDQyNS1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9BVklMQSkJKz0gYXZpbGEtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfSVhEUEc0MjUpCSs9IGNveW90ZS1zZXR1cC5vCiBvYmotJChDT05GSUdfQVJDSF9BRElfQ09ZT1RFKQkrPSBjb3lvdGUtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfR1RXWDU3MTUpCSs9IGd0d3g1NzE1LXNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2F2aWxhLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvYXZpbGEtcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4Njc2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2F2aWxhLXBjaS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWl4cDR4eC9hdmlsYS1wY2kuYworICoKKyAqIEdhdGV3b3JrcyBBdmlsYSBib2FyZC1sZXZlbCBQQ0kgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBBdXRob3I6IE1pY2hhZWwtTHVrZSBKb25lcyA8bWxqMjhAY2FtLmFjLnVrPgorICoKKyAqIEJhc2VkIG9uIGl4ZHAtcGNpLmMKKyAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBNYWludGFpbmVyOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCit2b2lkIF9faW5pdCBhdmlsYV9wY2lfcHJlaW5pdCh2b2lkKQoreworCXNldF9pcnFfdHlwZShJUlFfQVZJTEFfUENJX0lOVEEsIElSUVRfTE9XKTsKKwlzZXRfaXJxX3R5cGUoSVJRX0FWSUxBX1BDSV9JTlRCLCBJUlFUX0xPVyk7CisJc2V0X2lycV90eXBlKElSUV9BVklMQV9QQ0lfSU5UQywgSVJRVF9MT1cpOworCXNldF9pcnFfdHlwZShJUlFfQVZJTEFfUENJX0lOVEQsIElSUVRfTE9XKTsKKworCWl4cDR4eF9wY2lfcHJlaW5pdCgpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhdmlsYV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbQVZJTEFfUENJX0lSUV9MSU5FU10gPSB7CisJCUlSUV9BVklMQV9QQ0lfSU5UQSwKKwkJSVJRX0FWSUxBX1BDSV9JTlRCLAorCQlJUlFfQVZJTEFfUENJX0lOVEMsCisJCUlSUV9BVklMQV9QQ0lfSU5URAorCX07CisKKwlpbnQgaXJxID0gLTE7CisKKwlpZiAoc2xvdCA+PSAxICYmCisJc2xvdCA8PSAobWFjaGluZV9pc19sb2Z0KCkgPyBMT0ZUX1BDSV9NQVhfREVWIDogQVZJTEFfUENJX01BWF9ERVYpICYmCisJCXBpbiA+PSAxICYmIHBpbiA8PSBBVklMQV9QQ0lfSVJRX0xJTkVTKSB7CisJCWlycSA9IHBjaV9pcnFfdGFibGVbKHNsb3QgKyBwaW4gLSAyKSAlIDRdOworCX0KKworCXJldHVybiBpcnE7Cit9CisKK3N0cnVjdCBod19wY2kgYXZpbGFfcGNpIF9faW5pdGRhdGEgPSB7CisJLm5yX2NvbnRyb2xsZXJzID0gMSwKKwkucHJlaW5pdAk9IGF2aWxhX3BjaV9wcmVpbml0LAorCS5zd2l6emxlCT0gcGNpX3N0ZF9zd2l6emxlLAorCS5zZXR1cAkJPSBpeHA0eHhfc2V0dXAsCisJLnNjYW4JCT0gaXhwNHh4X3NjYW5fYnVzLAorCS5tYXBfaXJxCT0gYXZpbGFfbWFwX2lycSwKK307CisKK2ludCBfX2luaXQgYXZpbGFfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19hdmlsYSgpIHx8IG1hY2hpbmVfaXNfbG9mdCgpKQorCQlwY2lfY29tbW9uX2luaXQoJmF2aWxhX3BjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChhdmlsYV9wY2lfaW5pdCk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2F2aWxhLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9hdmlsYS1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OWI4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9hdmlsYS1zZXR1cC5jCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1peHA0eHgvYXZpbGEtc2V0dXAuYworICoKKyAqIEdhdGV3b3JrcyBBdmlsYSBib2FyZC1zZXR1cAorICoKKyAqIEF1dGhvcjogTWljaGFlbC1MdWtlIEpvbmVzIDxtbGoyOEBjYW0uYWMudWs+CisgKgorICogQmFzZWQgb24gaXhkcC1zZXR1cC5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBhdmlsYV9mbGFzaF9kYXRhID0geworCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorCS53aWR0aAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdmlsYV9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdmlsYV9mbGFzaCA9IHsKKwkubmFtZQkJPSAiSVhQNFhYLUZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYXZpbGFfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmYXZpbGFfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IGl4cDR4eF9pMmNfcGlucyBhdmlsYV9pMmNfZ3Bpb19waW5zID0geworCS5zZGFfcGluCT0gQVZJTEFfU0RBX1BJTiwKKwkuc2NsX3Bpbgk9IEFWSUxBX1NDTF9QSU4sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdmlsYV9pMmNfY29udHJvbGxlciA9IHsKKwkubmFtZQkJPSAiSVhQNFhYLUkyQyIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmF2aWxhX2kyY19ncGlvX3BpbnMsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDAKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXZpbGFfdWFydF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBJWFA0WFhfVUFSVDFfQkFTRV9QSFlTLAorCQkuZW5kCQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMgKyAweDBmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTQorCX0sCisJeworCQkuc3RhcnQJCT0gSVhQNFhYX1VBUlQyX0JBU0VfUEhZUywKKwkJLmVuZAkJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTICsgMHgwZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0KKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGF2aWxhX3VhcnRfZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSBJWFA0WFhfVUFSVDFfQkFTRV9QSFlTLAorCQkubWVtYmFzZQk9IChjaGFyICopSVhQNFhYX1VBUlQxX0JBU0VfVklSVCArIFJFR19PRkZTRVQsCisJCS5pcnEJCT0gSVJRX0lYUDRYWF9VQVJUMSwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSBJWFA0WFhfVUFSVF9YVEFMLAorCX0sCisJeworCQkubWFwYmFzZQk9IElYUDRYWF9VQVJUMl9CQVNFX1BIWVMsCisJCS5tZW1iYXNlCT0gKGNoYXIgKilJWFA0WFhfVUFSVDJfQkFTRV9WSVJUICsgUkVHX09GRlNFVCwKKwkJLmlycQkJPSBJUlFfSVhQNFhYX1VBUlQyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IElYUDRYWF9VQVJUX1hUQUwsCisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdmlsYV91YXJ0ID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gYXZpbGFfdWFydF9kYXRhLAorCS5udW1fcmVzb3VyY2VzCQk9IDIsCisJLnJlc291cmNlCQk9IGF2aWxhX3VhcnRfcmVzb3VyY2VzCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF2aWxhX3BhdGFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sCisJeworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUJPSAiaW50cnEiLAorCQkuc3RhcnQJPSBJUlFfSVhQNFhYX0dQSU8xMiwKKwkJLmVuZAk9IElSUV9JWFA0WFhfR1BJTzEyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpeHA0eHhfcGF0YV9kYXRhIGF2aWxhX3BhdGFfZGF0YSA9IHsKKwkuY3MwX2JpdHMJPSAweGJmZmYwMDQzLAorCS5jczFfYml0cwk9IDB4YmZmZjAwNDMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdmlsYV9wYXRhID0geworCS5uYW1lCQkJPSAicGF0YV9peHA0eHhfY2YiLAorCS5pZAkJCT0gMCwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgICAgICA9ICZhdmlsYV9wYXRhX2RhdGEsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShhdmlsYV9wYXRhX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IGF2aWxhX3BhdGFfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF2aWxhX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZhdmlsYV9pMmNfY29udHJvbGxlciwKKwkmYXZpbGFfZmxhc2gsCisJJmF2aWxhX3VhcnQKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdmlsYV9pbml0KHZvaWQpCit7CisJaXhwNHh4X3N5c19pbml0KCk7CisKKwlhdmlsYV9mbGFzaF9yZXNvdXJjZS5zdGFydCA9IElYUDRYWF9FWFBfQlVTX0JBU0UoMCk7CisJYXZpbGFfZmxhc2hfcmVzb3VyY2UuZW5kID0KKwkJSVhQNFhYX0VYUF9CVVNfQkFTRSgwKSArIGl4cDR4eF9leHBfYnVzX3NpemUgLSAxOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoYXZpbGFfZGV2aWNlcywgQVJSQVlfU0laRShhdmlsYV9kZXZpY2VzKSk7CisKKwlhdmlsYV9wYXRhX3Jlc291cmNlc1swXS5zdGFydCA9IElYUDRYWF9FWFBfQlVTX0JBU0UoMSk7CisJYXZpbGFfcGF0YV9yZXNvdXJjZXNbMF0uZW5kID0gSVhQNFhYX0VYUF9CVVNfRU5EKDEpOworCisJYXZpbGFfcGF0YV9yZXNvdXJjZXNbMV0uc3RhcnQgPSBJWFA0WFhfRVhQX0JVU19CQVNFKDIpOworCWF2aWxhX3BhdGFfcmVzb3VyY2VzWzFdLmVuZCA9IElYUDRYWF9FWFBfQlVTX0VORCgyKTsKKworCWF2aWxhX3BhdGFfZGF0YS5jczBfY2ZnID0gSVhQNFhYX0VYUF9DUzE7CisJYXZpbGFfcGF0YV9kYXRhLmNzMV9jZmcgPSBJWFA0WFhfRVhQX0NTMjsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXZpbGFfcGF0YSk7CisKK30KKworTUFDSElORV9TVEFSVChBVklMQSwgIkdhdGV3b3JrcyBBdmlsYSBOZXR3b3JrIFBsYXRmb3JtIikKKwkvKiBNYWludGFpbmVyOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PiAqLworCS5waHlzX2lvCT0gSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9QSFlTLAorCS5pb19wZ19vZmZzdAk9ICgoSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbwkJPSBpeHA0eHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGl4cDR4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJml4cDR4eF90aW1lciwKKwkuYm9vdF9wYXJhbXMJPSAweDAxMDAsCisJLmluaXRfbWFjaGluZQk9IGF2aWxhX2luaXQsCitNQUNISU5FX0VORAorCisgLyoKKyAgKiBMb2Z0IGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEF2aWxhIGV4Y2VwdCB0aGF0IGl0IGhhcyBhCisgICogZGlmZmVyZW50IG51bWJlciBmb3IgdGhlIG1heGltdW0gUENJIGRldmljZXMuICBUaGUgTUFDSElORQorICAqIHN0cnVjdHVyZSBiZWxvdyBpcyBpZGVudGljYWwgdG8gQXZpbGEgZXhjZXB0IGZvciB0aGUgY29tbWVudC4KKyAgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9MT0ZUCitNQUNISU5FX1NUQVJUKExPRlQsICJHaWFudCBTaG91bGRlciBJbmMgTG9mdCBib2FyZCIpCisJLyogTWFpbnRhaW5lcjogVG9tIEJpbGxtYW4gPGtlcm5lbEBnaWFudHNob3VsZGVyaW5jLmNvbT4gKi8KKwkucGh5c19pbwk9IElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfUEhZUywKKwkuaW9fcGdfb2Zmc3QJPSAoKElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gaXhwNHh4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBpeHA0eHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZpeHA0eHhfdGltZXIsCisJLmJvb3RfcGFyYW1zCT0gMHgwMTAwLAorCS5pbml0X21hY2hpbmUJPSBhdmlsYV9pbml0LAorTUFDSElORV9FTkQKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IDJlYzlhOWUuLjQ1MDY4YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC0zOTUsNyArMzk1LDcgQEAKIAkucmVhZAkJPSBpeHA0eHhfZ2V0X2N5Y2xlcywKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKIAkuc2hpZnQgCQk9IDIwLAotCS5pc19jb250aW51b3VzIAk9IDEsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAogdW5zaWduZWQgbG9uZyBpeHA0eHhfdGltZXJfZnJlcSA9IEZSRVE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1wY2kuYwppbmRleCBkNTE1NmMwLi45OWMxZGM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtcGNpLmMKQEAgLTY2LDcgKzY2LDcgQEAKIGludCBfX2luaXQgaXhkcDQyNV9wY2lfaW5pdCh2b2lkKQogewogCWlmIChtYWNoaW5lX2lzX2l4ZHA0MjUoKSB8fCBtYWNoaW5lX2lzX2l4Y2RwMTEwMCgpIHx8Ci0JCQltYWNoaW5lX2lzX2F2aWxhKCkgfHwgbWFjaGluZV9pc19peGRwNDY1KCkpCisJCQltYWNoaW5lX2lzX2l4ZHA0NjUoKSkKIAkJcGNpX2NvbW1vbl9pbml0KCZpeGRwNDI1X3BjaSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXNldHVwLmMKaW5kZXggZGE3MjM4My4uMDRiMWQ1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtc2V0dXAuYwpAQCAtMTU2LDIzICsxNTYsMyBAQAogCS5pbml0X21hY2hpbmUJPSBpeGRwNDI1X2luaXQsCiBNQUNISU5FX0VORAogI2VuZGlmCi0KLS8qCi0gKiBBdmlsYSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBJWERQNDI1IGV4Y2VwdCB0aGF0IGl0IGFkZHMKLSAqIGEgQ0YgSURFIHNsb3QgaGFuZ2luZyBvZmYgdGhlIGV4cGFuc2lvbiBidXMuIFdoZW4gd2UgaGF2ZSBhIAotICogZHJpdmVyIGZvciBJWFA0eHggQ0YgSURFIHdpdGggZHJpdmVyIG1vZGVsIHN1cHBvcnQgd2UnbGwgbW92ZQotICogQXZpbGEgdG8gaXQncyBvd24gc2V0dXAgZmlsZS4KLSAqLwotI2lmZGVmIENPTkZJR19BUkNIX0FWSUxBCi1NQUNISU5FX1NUQVJUKEFWSUxBLCAiR2F0ZXdvcmtzIEF2aWxhIE5ldHdvcmsgUGxhdGZvcm0iKQotCS8qIE1haW50YWluZXI6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+ICovCi0JLnBoeXNfaW8JPSBJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1BIWVMsCi0JLmlvX3BnX29mZnN0CT0gKChJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkubWFwX2lvCQk9IGl4cDR4eF9tYXBfaW8sCi0JLmluaXRfaXJxCT0gaXhwNHh4X2luaXRfaXJxLAotCS50aW1lcgkJPSAmaXhwNHh4X3RpbWVyLAotCS5ib290X3BhcmFtcwk9IDB4MDEwMCwKLQkuaW5pdF9tYWNoaW5lCT0gaXhkcDQyNV9pbml0LAotTUFDSElORV9FTkQKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1uZXR4L3RpbWUuYwppbmRleCA1NzczYjU1Li43ZTEzMmZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC90aW1lLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAkucmVhZAkJPSBuZXR4X2dldF9jeWNsZXMsCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCiAJLnNoaWZ0IAkJPSAyMCwKLQkuaXNfY29udGludW91cyAJPSAxLAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTc1YmE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvS2NvbmZpZwpAQCAtMCwwICsxLDIxIEBACitpZiBBUkNIX05TOVhYWAorCittZW51ICJOUzl4eHggSW1wbGVtZW50YXRpb25zIgorCitjb25maWcgTUFDSF9DQzlQOTM2MERFVgorCWJvb2wgIkNvbm5lY3QgQ29yZSA5UCA5MzYwIG9uIGFuIEE5TTk3NTAgRGV2Ym9hcmQiCisJc2VsZWN0IFBST0NFU1NPUl9OUzkzNjAKKwlzZWxlY3QgQk9BUkRfQTlNOTc1MERFVgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgRGlnaSBDb25uZWN0IENvcmUgOVAgOTM2MAorCSAgb24gYW4gQTlNOTc1MCBEZXZlbG9wbWVudCBCb2FyZC4KKworY29uZmlnIFBST0NFU1NPUl9OUzkzNjAKKwlib29sCisKK2NvbmZpZyBCT0FSRF9BOU05NzUwREVWCisJYm9vbAorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTk0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK29iai15IDo9IGlycS5vIHRpbWUubyBnZW5lcmljLm8KKworb2JqLSQoQ09ORklHX01BQ0hfQ0M5UDkzNjBERVYpICs9IG1hY2gtY2M5cDkzNjBkZXYubworCitvYmotJChDT05GSUdfQk9BUkRfQTlNOTc1MERFVikgKz0gYm9hcmQtYTltOTc1MGRldi5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWVkNjRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDIgQEAKK3pyZWxhZGRyLXkgOj0gMHgxMDgwMDAKK3BhcmFtc19waHlzLXkgOj0gMHgxMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2JvYXJkLWE5bTk3NTBkZXYuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2JvYXJkLWE5bTk3NTBkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTI4OTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvYm9hcmQtYTltOTc1MGRldi5jCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1uczl4eHgvYm9hcmQtYTltOTc1MGRldi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLXN5cy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLWJidS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLWJvYXJkLWE5bTk3NTBkZXYuaD4KKworI2luY2x1ZGUgImJvYXJkLWE5bTk3NTBkZXYuaCIKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBib2FyZF9hOW05NzUwZGV2X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsgLyogRlBHQSBvbiBDUzAgKi8KKwkJLnZpcnR1YWwgPSBpb19wMnYoTlM5WFhYX0NTeFNUQVRfUEhZUygwKSksCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE5TOVhYWF9DU3hTVEFUX1BIWVMoMCkpLAorCQkubGVuZ3RoID0gTlM5WFhYX0NTMFNUQVRfTEVOR1RILAorCQkudHlwZSA9IE1UX0RFVklDRSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgYm9hcmRfYTltOTc1MGRldl9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoYm9hcmRfYTltOTc1MGRldl9pb19kZXNjLAorCQkgICAgIEFSUkFZX1NJWkUoYm9hcmRfYTltOTc1MGRldl9pb19kZXNjKSk7Cit9CisKK3N0YXRpYyB2b2lkIGE5bTk3NTBkZXZfZnBnYV9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJLyogbm90aGluZyAqLworfQorCitzdGF0aWMgdm9pZCBhOW05NzUwZGV2X2ZwZ2FfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlGUEdBX0lFUiAmPSB+KDEgPDwgKGlycSAtIEZQR0FfSVJRKDApKSk7Cit9CisKK3N0YXRpYyB2b2lkIGE5bTk3NTBkZXZfZnBnYV9tYXNrYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWE5bTk3NTBkZXZfZnBnYV9tYXNrX2lycShpcnEpOworCWE5bTk3NTBkZXZfZnBnYV9hY2tfaXJxKGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIGE5bTk3NTBkZXZfZnBnYV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJRlBHQV9JRVIgfD0gMSA8PCAoaXJxIC0gRlBHQV9JUlEoMCkpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGE5bTk3NTBkZXZfZnBnYV9jaGlwID0geworCS5hY2sJCT0gYTltOTc1MGRldl9mcGdhX2Fja19pcnEsCisJLm1hc2sJCT0gYTltOTc1MGRldl9mcGdhX21hc2tfaXJxLAorCS5tYXNrX2Fjawk9IGE5bTk3NTBkZXZfZnBnYV9tYXNrYWNrX2lycSwKKwkudW5tYXNrCQk9IGE5bTk3NTBkZXZfZnBnYV91bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgYTltOTc1MGRldl9mcGdhX2RlbXV4X2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWludCBzdGF0ID0gRlBHQV9JU1I7CisKKwl3aGlsZSAoc3RhdCAhPSAwKSB7CisJCWludCBpcnFubyA9IGZscyhzdGF0KSAtIDE7CisKKwkJc3RhdCAmPSB+KDEgPDwgaXJxbm8pOworCisJCWRlc2MgPSBpcnFfZGVzYyArIEZQR0FfSVJRKGlycW5vKTsKKworCQlkZXNjX2hhbmRsZV9pcnEoaXJxbm8sIGRlc2MpOworCX0KK30KKwordm9pZCBfX2luaXQgYm9hcmRfYTltOTc1MGRldl9pbml0X2lycSh2b2lkKQoreworCXUzMiByZWc7CisJaW50IGk7CisKKwkvKgorCSAqIGNvbmZpZ3VyZSBncGlvIGZvciBJUlFfRVhUMgorCSAqIHVzZSBHUElPIDExLCBiZWNhdXNlIEdQSU8gMzIgaXMgdXNlZCBmb3IgdGhlIExDRAorCSAqLworCS8qIFhYWDogcHJvcGVyIEdQSU8gaGFuZGxpbmcgKi8KKwlCQlVfR0MoMikgJj0gfjB4MjAwMDsKKworCWZvciAoaSA9IEZQR0FfSVJRKDApOyBpIDw9IEZQR0FfSVJRKDcpOyArK2kpIHsKKwkJc2V0X2lycV9jaGlwKGksICZhOW05NzUwZGV2X2ZwZ2FfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKKwl9CisKKwkvKiBJUlFfRVhUMjogbGV2ZWwgc2Vuc2l0aXZlICsgYWN0aXZlIGxvdyAqLworCXJlZyA9IFNZU19FSUMoMik7CisJUkVHU0VUKHJlZywgU1lTX0VJQywgUExUWSwgQUwpOworCVJFR1NFVChyZWcsIFNZU19FSUMsIExWRURHLCBMRVZFTCk7CisJU1lTX0VJQygyKSA9IHJlZzsKKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FWFQyLAorCQkJYTltOTc1MGRldl9mcGdhX2RlbXV4X2hhbmRsZXIpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGJvYXJkX2E5bTk3NTBkZXZfc2VyaWFsODI1MF9wb3J0W10gPSB7CisJeworCQkuaW9iYXNlICAgICAgICAgPSBGUEdBX1VBUlRBX0JBU0UsCisJCS5tZW1iYXNlICAgICAgICA9ICh1bnNpZ25lZCBjaGFyKilGUEdBX1VBUlRBX0JBU0UsCisJCS5tYXBiYXNlICAgICAgICA9IEZQR0FfVUFSVEFfQkFTRSwKKwkJLmlycSAgICAgICAgICAgID0gSVJRX0ZQR0FfVUFSVEEsCisJCS5pb3R5cGUgICAgICAgICA9IFVQSU9fTUVNLAorCQkudWFydGNsayAgICAgICAgPSAxODQzMjAwMCwKKwkJLnJlZ3NoaWZ0ICAgICAgID0gMCwKKwkJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0hBUkVfSVJRLAorCX0sIHsKKwkJLmlvYmFzZSAgICAgICAgID0gRlBHQV9VQVJUQl9CQVNFLAorCQkubWVtYmFzZSAgICAgICAgPSAodW5zaWduZWQgY2hhciopRlBHQV9VQVJUQl9CQVNFLAorCQkubWFwYmFzZSAgICAgICAgPSBGUEdBX1VBUlRCX0JBU0UsCisJCS5pcnEgICAgICAgICAgICA9IElSUV9GUEdBX1VBUlRCLAorCQkuaW90eXBlICAgICAgICAgPSBVUElPX01FTSwKKwkJLnVhcnRjbGsgICAgICAgID0gMTg0MzIwMDAsCisJCS5yZWdzaGlmdCAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NIQVJFX0lSUSwKKwl9LCB7CisJCS5pb2Jhc2UgICAgICAgICA9IEZQR0FfVUFSVENfQkFTRSwKKwkJLm1lbWJhc2UgICAgICAgID0gKHVuc2lnbmVkIGNoYXIqKUZQR0FfVUFSVENfQkFTRSwKKwkJLm1hcGJhc2UgICAgICAgID0gRlBHQV9VQVJUQ19CQVNFLAorCQkuaXJxICAgICAgICAgICAgPSBJUlFfRlBHQV9VQVJUQywKKwkJLmlvdHlwZSAgICAgICAgID0gVVBJT19NRU0sCisJCS51YXJ0Y2xrICAgICAgICA9IDE4NDMyMDAwLAorCQkucmVnc2hpZnQgICAgICAgPSAwLAorCQkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TSEFSRV9JUlEsCisJfSwgeworCQkuaW9iYXNlICAgICAgICAgPSBGUEdBX1VBUlREX0JBU0UsCisJCS5tZW1iYXNlICAgICAgICA9ICh1bnNpZ25lZCBjaGFyKilGUEdBX1VBUlREX0JBU0UsCisJCS5tYXBiYXNlICAgICAgICA9IEZQR0FfVUFSVERfQkFTRSwKKwkJLmlycSAgICAgICAgICAgID0gSVJRX0ZQR0FfVUFSVEQsCisJCS5pb3R5cGUgICAgICAgICA9IFVQSU9fTUVNLAorCQkudWFydGNsayAgICAgICAgPSAxODQzMjAwMCwKKwkJLnJlZ3NoaWZ0ICAgICAgID0gMCwKKwkJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0hBUkVfSVJRLAorCX0sIHsKKwkJLyogZW5kIG1hcmtlciAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBib2FyZF9hOW05NzUwZGV2X3NlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUgPSAic2VyaWFsODI1MCIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBib2FyZF9hOW05NzUwZGV2X3NlcmlhbDgyNTBfcG9ydCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmJvYXJkX2E5bTk3NTBkZXZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmJvYXJkX2E5bTk3NTBkZXZfc2VyaWFsX2RldmljZSwKK307CisKK3ZvaWQgX19pbml0IGJvYXJkX2E5bTk3NTBkZXZfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJdTMyIHJlZzsKKworCS8qIHNldHVwIHN0YXRpYyBDUzA6IG1lbW9yeSBiYXNlIC4uLiAqLworCVJFR1NFVElNKFNZU19TTUNTU01CKDApLCBTWVNfU01DU1NNQiwgQ1N4QiwKKwkJCU5TOVhYWF9DU3hTVEFUX1BIWVMoMCkgPj4gMTIpOworCisJLyogLi4uIGFuZCBtYXNrICovCisJcmVnID0gU1lTX1NNQ1NTTU0oMCk7CisJUkVHU0VUSU0ocmVnLCBTWVNfU01DU1NNTSwgQ1N4TSwgMHhmZmZmZik7CisJUkVHU0VUKHJlZywgU1lTX1NNQ1NTTU0sIENTRXgsIEVOKTsKKwlTWVNfU01DU1NNTSgwKSA9IHJlZzsKKworCS8qIHNldHVwIHN0YXRpYyBDUzA6IG1lbW9yeSBjb25maWd1cmF0aW9uICovCisJcmVnID0gTUVNX1NNQygwKTsKKwlSRUdTRVQocmVnLCBNRU1fU01DLCBXU01DLCBPRkYpOworCVJFR1NFVChyZWcsIE1FTV9TTUMsIEJTTUMsIE9GRik7CisJUkVHU0VUKHJlZywgTUVNX1NNQywgRVcsIE9GRik7CisJUkVHU0VUKHJlZywgTUVNX1NNQywgUEIsIDEpOworCVJFR1NFVChyZWcsIE1FTV9TTUMsIFBDLCBBTCk7CisJUkVHU0VUKHJlZywgTUVNX1NNQywgUE0sIERJUyk7CisJUkVHU0VUKHJlZywgTUVNX1NNQywgTVcsIDgpOworCU1FTV9TTUMoMCkgPSByZWc7CisKKwkvKiBzZXR1cCBzdGF0aWMgQ1MwOiB0aW1pbmcgKi8KKwlNRU1fU01XRUQoMCkgPSAweDI7CisJTUVNX1NNT0VEKDApID0gMHgyOworCU1FTV9TTVJEKDApID0gMHg2OworCU1FTV9TTVdEKDApID0gMHg2OworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoYm9hcmRfYTltOTc1MGRldl9kZXZpY2VzLAorCQkJQVJSQVlfU0laRShib2FyZF9hOW05NzUwZGV2X2RldmljZXMpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvYm9hcmQtYTltOTc1MGRldi5oIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvYm9hcmQtYTltOTc1MGRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYzc1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9ib2FyZC1hOW05NzUwZGV2LmgKQEAgLTAsMCArMSwxNSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnM5eHh4L2JvYXJkLWE5bTk3NTBkZXYuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCit2b2lkIF9faW5pdCBib2FyZF9hOW05NzUwZGV2X21hcF9pbyh2b2lkKTsKK3ZvaWQgX19pbml0IGJvYXJkX2E5bTk3NTBkZXZfaW5pdF9tYWNoaW5lKHZvaWQpOwordm9pZCBfX2luaXQgYm9hcmRfYTltOTc1MGRldl9pbml0X2lycSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2dlbmVyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2UyYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvZ2VuZXJpYy5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW5zOXh4eC9nZW5lcmljLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLXN5cy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9ib2FyZC5oPgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHN0YW5kYXJkX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsgLyogQkJ1cyAqLworCQkudmlydHVhbCA9IGlvX3AydigweDkwMDAwMDAwKSwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oMHg5MDAwMDAwMCksCisJCS5sZW5ndGggPSAweDAwNzAwMDAwLAorCQkudHlwZSA9IE1UX0RFVklDRSwKKwl9LCB7IC8qIEFIQiAqLworCQkudmlydHVhbCA9IGlvX3AydigweGEwMTAwMDAwKSwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oMHhhMDEwMDAwMCksCisJCS5sZW5ndGggPSAweDAwOTAwMDAwLAorCQkudHlwZSA9IE1UX0RFVklDRSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgbnM5eHh4X21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChzdGFuZGFyZF9pb19kZXNjLCBBUlJBWV9TSVpFKHN0YW5kYXJkX2lvX2Rlc2MpKTsKK30KKwordm9pZCBfX2luaXQgbnM5eHh4X2luaXRfbWFjaGluZSh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvZ2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4N2UyOTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvZ2VuZXJpYy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW5zOXh4eC9nZW5lcmljLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCit2b2lkIF9faW5pdCBuczl4eHhfaW5pdF9pcnEodm9pZCk7Cit2b2lkIF9faW5pdCBuczl4eHhfbWFwX2lvKHZvaWQpOwordm9pZCBfX2luaXQgbnM5eHh4X2luaXRfbWFjaGluZSh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbnM5eHh4X3RpbWVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Q5MjcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L2lycXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvYm9hcmQuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworc3RhdGljIHZvaWQgbnM5eHh4X2Fja19pcnFfdGltZXIodW5zaWduZWQgaW50IGlycSkKK3sKKwl1MzIgdGMgPSBTWVNfVEMoaXJxIC0gSVJRX1RJTUVSMCk7CisKKwlSRUdTRVQodGMsIFNZU19UQ3gsIElOVEMsIFNFVCk7CisJU1lTX1RDKGlycSAtIElSUV9USU1FUjApID0gdGM7CisKKwlSRUdTRVQodGMsIFNZU19UQ3gsIElOVEMsIFVOU0VUKTsKKwlTWVNfVEMoaXJxIC0gSVJRX1RJTUVSMCkgPSB0YzsKK30KKwordm9pZCAoKm5zOXh4eF9hY2tfaXJxX2Z1bmN0aW9uc1tOUl9JUlFTXSkodW5zaWduZWQgaW50KSA9IHsKKwlbSVJRX1RJTUVSMF0gPSBuczl4eHhfYWNrX2lycV90aW1lciwKKwlbSVJRX1RJTUVSMV0gPSBuczl4eHhfYWNrX2lycV90aW1lciwKKwlbSVJRX1RJTUVSMl0gPSBuczl4eHhfYWNrX2lycV90aW1lciwKKwlbSVJRX1RJTUVSM10gPSBuczl4eHhfYWNrX2lycV90aW1lciwKK307CisKK3N0YXRpYyB2b2lkIG5zOXh4eF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCS8qIFhYWDogYmV0dGVyIHVzZSBjcHAgc3ltYm9scyAqLworCVNZU19JQyhpcnEgLyA0KSAmPSB+KDEgPDwgKDcgKyA4ICogKDMgLSAoaXJxICYgMykpKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5zOXh4eF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKCFuczl4eHhfYWNrX2lycV9mdW5jdGlvbnNbaXJxXSkgeworCQlwcmludGsoS0VSTl9FUlIgIm5vIGFjayBmdW5jdGlvbiBmb3IgaXJxICV1XG4iLCBpcnEpOworCQlCVUcoKTsKKwl9CisKKwluczl4eHhfYWNrX2lycV9mdW5jdGlvbnNbaXJxXShpcnEpOworCVNZU19JU1JBRERSID0gMDsKK30KKworc3RhdGljIHZvaWQgbnM5eHh4X21hc2thY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJbnM5eHh4X21hc2tfaXJxKGlycSk7CisJbnM5eHh4X2Fja19pcnEoaXJxKTsKK30KKworc3RhdGljIHZvaWQgbnM5eHh4X3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwkvKiBYWFg6IGJldHRlciB1c2UgY3BwIHN5bWJvbHMgKi8KKwlTWVNfSUMoaXJxIC8gNCkgfD0gMSA8PCAoNyArIDggKiAoMyAtIChpcnEgJiAzKSkpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG5zOXh4eF9jaGlwID0geworCS5hY2sJCT0gbnM5eHh4X2Fja19pcnEsCisJLm1hc2sJCT0gbnM5eHh4X21hc2tfaXJxLAorCS5tYXNrX2Fjawk9IG5zOXh4eF9tYXNrYWNrX2lycSwKKwkudW5tYXNrCQk9IG5zOXh4eF91bm1hc2tfaXJxLAorfTsKKwordm9pZCBfX2luaXQgbnM5eHh4X2luaXRfaXJxKHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBkaXNhYmxlIGFsbCBJUlFzICovCisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJU1lTX0lDKGkpID0gKDQgKiBpKSA8PCAyNCB8ICg0ICogaSArIDEpIDw8IDE2IHwKKwkJCSg0ICogaSArIDIpIDw8IDggfCAoNCAqIGkgKyAzKTsKKworCS8qIHNpbXBsZSBpbnRlcnJ1cHQgcHJpbyB0YWJsZToKKwkgKiBwcmlvKHgpIDwgcHJpbyh5KSA8PT4geCA8IHkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkKKwkJU1lTX0lWQShpKSA9IGk7CisKKwlmb3IgKGkgPSBJUlFfV0FUQ0hET0c7IGkgPD0gSVJRX0VYVDM7ICsraSkgeworCQlzZXRfaXJxX2NoaXAoaSwgJm5zOXh4eF9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L21hY2gtY2M5cDkzNjBkZXYuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L21hY2gtY2M5cDkzNjBkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTkzZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvbWFjaC1jYzlwOTM2MGRldi5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW5zOXh4eC9tYWNoLWNjOXA5MzYwZGV2LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSAiYm9hcmQtYTltOTc1MGRldi5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworc3RhdGljIHZvaWQgX19pbml0IG1hY2hfY2M5cDkzNjBkZXZfbWFwX2lvKHZvaWQpCit7CisJbnM5eHh4X21hcF9pbygpOworCWJvYXJkX2E5bTk3NTBkZXZfbWFwX2lvKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtYWNoX2NjOXA5MzYwZGV2X2luaXRfaXJxKHZvaWQpCit7CisJbnM5eHh4X2luaXRfaXJxKCk7CisJYm9hcmRfYTltOTc1MGRldl9pbml0X2lycSgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbWFjaF9jYzlwOTM2MGRldl9pbml0X21hY2hpbmUodm9pZCkKK3sKKwluczl4eHhfaW5pdF9tYWNoaW5lKCk7CisJYm9hcmRfYTltOTc1MGRldl9pbml0X21hY2hpbmUoKTsKK30KKworTUFDSElORV9TVEFSVChDQzlQOTM2MERFViwgIkNvbm5lY3QgQ29yZSA5UCA5MzYwIG9uIGFuIEE5TTk3NTAgRGV2Ym9hcmQiKQorCS5tYXBfaW8gPSBtYWNoX2NjOXA5MzYwZGV2X21hcF9pbywKKwkuaW5pdF9pcnEgPSBtYWNoX2NjOXA5MzYwZGV2X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgPSBtYWNoX2NjOXA5MzYwZGV2X2luaXRfbWFjaGluZSwKKwkudGltZXIgPSAmbnM5eHh4X3RpbWVyLAorCS5ib290X3BhcmFtcyA9IDB4MTAwLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWMwNWYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvdGltZS5jCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW5zOXh4eC90aW1lLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1zeXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c3RlbS5oPgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworI2RlZmluZSBUSU1FUkNMT0NLU0VMRUNUIDY0CisKK3N0YXRpYyB1MzIgdXNlY3NfcGVyX3RpY2s7CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbnM5eHh4X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisJdGltZXJfdGljaygpOworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5zOXh4eF90aW1lcl9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJLyogcmV0dXJuIHRoZSBtaWNyb3NlY29uZHMgd2hpY2ggaGF2ZSBwYXNzZWQgc2luY2UgdGhlIGxhc3QgaW50ZXJydXB0CisJICogd2FzIF9zZXJ2aWNlZF8uICBUaGF0IGlzLCBpZiBhbiBpbnRlcnJ1cHQgaXMgcGVuZGluZyBvciB0aGUgY291bnRlcgorCSAqIHJlbG9hZHMsIHJldHVybiBvbmUgcGVyaW9kZSBtb3JlLiAqLworCisJdTMyIGNvdW50ZXIxID0gU1lTX1RSKDApOworCWludCBwZW5kaW5nID0gU1lTX0lTUiAmICgxIDw8IElSUV9USU1FUjApOworCXUzMiBjb3VudGVyMiA9IFNZU19UUigwKTsKKwl1MzIgZWxhcHNlZDsKKworCWlmIChwZW5kaW5nIHx8IGNvdW50ZXIyID4gY291bnRlcjEpCisJCWVsYXBzZWQgPSAyICogU1lTX1RSQygwKSAtIGNvdW50ZXIyOworCWVsc2UKKwkJZWxhcHNlZCA9IFNZU19UUkMoMCkgLSBjb3VudGVyMTsKKworCXJldHVybiAoZWxhcHNlZCAqIHVzZWNzX3Blcl90aWNrKSA+PiAxNjsKKworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBuczl4eHhfdGltZXJfaXJxID0geworCS5uYW1lID0gIk5TOXh4eCBUaW1lciBUaWNrIiwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuaGFuZGxlciA9IG5zOXh4eF90aW1lcl9pbnRlcnJ1cHQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbnM5eHh4X3RpbWVyX2luaXQodm9pZCkKK3sKKwlpbnQgdGM7CisKKwl1c2Vjc19wZXJfdGljayA9CisJCVNIX0RJVigxMDAwMDAwICogVElNRVJDTE9DS1NFTEVDVCwgbnM5eHh4X2NwdWNsb2NrKCksIDE2KTsKKworCS8qIGRpc2FibGUgdGltZXIgKi8KKwlpZiAoKHRjID0gU1lTX1RDKDApKSAmIFNZU19UQ3hfVEVOKQorCQlTWVNfVEMoMCkgPSB0YyAmIH5TWVNfVEN4X1RFTjsKKworCVNZU19UUkMoMCkgPSBTSF9ESVYobnM5eHh4X2NwdWNsb2NrKCksIChUSU1FUkNMT0NLU0VMRUNUICogSFopLCAwKTsKKworCVJFR1NFVCh0YywgU1lTX1RDeCwgVEVOLCBFTik7CisJUkVHU0VUKHRjLCBTWVNfVEN4LCBUTENTLCBESVY2NCk7IC8qIFRoaXMgbXVzdCBtYXRjaCBUSU1FUkNMT0NLU0VMRUNUICovCisJUkVHU0VUKHRjLCBTWVNfVEN4LCBJTlRTLCBFTik7CisJUkVHU0VUKHRjLCBTWVNfVEN4LCBVRFMsIERPV04pOworCVJFR1NFVCh0YywgU1lTX1RDeCwgVERCRywgU1RPUCk7CisJUkVHU0VUKHRjLCBTWVNfVEN4LCBUU1osIDMyKTsKKwlSRUdTRVQodGMsIFNZU19UQ3gsIFJFTiwgRU4pOworCVNZU19UQygwKSA9IHRjOworCisJc2V0dXBfaXJxKElSUV9USU1FUjAsICZuczl4eHhfdGltZXJfaXJxKTsKK30KKworc3RydWN0IHN5c190aW1lciBuczl4eHhfdGltZXIgPSB7CisJLmluaXQgPSBuczl4eHhfdGltZXJfaW5pdCwKKwkub2Zmc2V0ID0gbnM5eHh4X3RpbWVyX2dldHRpbWVvZmZzZXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jCmluZGV4IDlkZTEyNzguLmI4Y2I3OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VkYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CkBAIC0xMDYsMTMgKzEwNywxNiBAQAogICogSGFuZHkgZnVuY3Rpb24gdG8gc2V0IEdQSU8gYWx0ZXJuYXRlIGZ1bmN0aW9ucwogICovCiAKLXZvaWQgcHhhX2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKQoraW50IHB4YV9ncGlvX21vZGUoaW50IGdwaW9fbW9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBncGlvID0gZ3Bpb19tb2RlICYgR1BJT19NRF9NQVNLX05SOwogCWludCBmbiA9IChncGlvX21vZGUgJiBHUElPX01EX01BU0tfRk4pID4+IDg7CiAJaW50IGdhZnI7CiAKKwlpZiAoZ3BpbyA+IFBYQV9MQVNUX0dQSU8pCisJCXJldHVybiAtRUlOVkFMOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmIChncGlvX21vZGUgJiBHUElPX0RGTFRfTE9XKQogCQlHUENSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7CkBAIC0xMjUsMTEgKzEyOSwzMyBAQAogCWdhZnIgPSBHQUZSKGdwaW8pICYgfigweDMgPDwgKCgoZ3BpbykgJiAweGYpKjIpKTsKIAlHQUZSKGdwaW8pID0gZ2FmciB8ICAoZm4gIDw8ICgoKGdwaW8pICYgMHhmKSoyKSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7CiB9CiAKIEVYUE9SVF9TWU1CT0wocHhhX2dwaW9fbW9kZSk7CiAKIC8qCisgKiBSZXR1cm4gR1BJTyBsZXZlbAorICovCitpbnQgcHhhX2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIF9fZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Cit9CisKK0VYUE9SVF9TWU1CT0wocHhhX2dwaW9fZ2V0X3ZhbHVlKTsKKworLyoKKyAqIFNldCBvdXRwdXQgR1BJTyBsZXZlbAorICovCit2b2lkIHB4YV9ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJX19ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Cit9CisKK0VYUE9SVF9TWU1CT0wocHhhX2dwaW9fc2V0X3ZhbHVlKTsKKworLyoKICAqIFJvdXRpbmUgdG8gc2FmZWx5IGVuYWJsZSBvciBkaXNhYmxlIGEgY2xvY2sgaW4gdGhlIENLRU4KICAqLwogdm9pZCBweGFfc2V0X2NrZW4oaW50IGNsb2NrLCBpbnQgZW5hYmxlKQpAQCAtMzM4LDYgKzM2NCwyNyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzKSwKIH07CiAKKyNpZmRlZiBDT05GSUdfUFhBMjd4CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGkyY19wb3dlcl9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NDBmMDAxODAsCisJCS5lbmQJPSAweDQwZjAwMWEzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IElSUV9QV1JJMkMsCisJCS5lbmQJPSBJUlFfUFdSSTJDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjX3Bvd2VyX2RldmljZSA9IHsKKwkubmFtZQkJPSAicHhhMnh4LWkyYyIsCisJLmlkCQk9IDEsCisJLnJlc291cmNlCT0gaTJjX3Bvd2VyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlcyksCit9OworI2VuZGlmCisKIHZvaWQgX19pbml0IHB4YV9zZXRfaTJjX2luZm8oc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqaW5mbykKIHsKIAlpMmNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5mbzsKQEAgLTM5Miw2ICs0MzksOSBAQAogCSZzdHVhcnRfZGV2aWNlLAogCSZweGFmaWNwX2RldmljZSwKIAkmaTJjX2RldmljZSwKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisJJmkyY19wb3dlcl9kZXZpY2UsCisjZW5kaWYKIAkmaTJzX2RldmljZSwKIAkmcHhhcnRjX2RldmljZSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKaW5kZXggZWUyYmViNC4uZmMzYjgyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAJLnJlYWQgICAgICAgICAgID0gcHhhX2dldF9jeWNsZXMsCiAJLm1hc2sgICAgICAgICAgID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCiAJLnNoaWZ0ICAgICAgICAgID0gMjAsCi0JLmlzX2NvbnRpbnVvdXMgID0gMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHhhX3RpbWVyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCAxN2Y1ZjQ0Li4zNTE1NmNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC0xMCwxMCArMTAsMjEgQEAKIGNvbmZpZyBSRUFMVklFV19NUENPUkUKIAlib29sICJTdXBwb3J0IE1QY29yZSB0aWxlIgogCWRlcGVuZHMgb24gTUFDSF9SRUFMVklFV19FQgorCXNlbGVjdCBDQUNIRV9MMlgwCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBNUENvcmUgdGlsZSBvbiB0aGUgUmVhbHZpZXcgcGxhdGZvcm0uCiAJICBTaW5jZSB0aGVyZSBhcmUgZGV2aWNlIGFkZHJlc3MgYW5kIGludGVycnVwdCBkaWZmZXJlbmNlcywgYQogCSAga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCBpcyBub3QgY29tcGF0aWJsZSB3aXRoCiAJICBvdGhlciB0aWxlcy4KIAorY29uZmlnIFJFQUxWSUVXX01QQ09SRV9SRVZCCisJYm9vbCAiU3VwcG9ydCBNUGNvcmUgUmV2QiB0aWxlIgorCWRlcGVuZHMgb24gUkVBTFZJRVdfTVBDT1JFCisJZGVmYXVsdCBuCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBNUENvcmUgUmV2QiB0aWxlIG9uIHRoZSBSZWFsdmlldyBwbGF0Zm9ybS4KKwkgIFNpbmNlIHRoZXJlIGFyZSBkZXZpY2UgYWRkcmVzcyBkaWZmZXJlbmNlcywgYQorCSAga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCBpcyBub3QgY29tcGF0aWJsZSB3aXRoCisJICBvdGhlciB0aWxlcy4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwppbmRleCBiODQ4NGUxLi5mY2UzNTk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwpAQCAtNTIsMTMgKzUyLDE0IEBACiAJICogY29yZSAoZS5nLiB0aW1lciBpcnEpLCB0aGVuIHRoZXkgd2lsbCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQKIAkgKiBmb3IgdXM6IGRvIHNvCiAJICovCi0JZ2ljX2NwdV9pbml0KF9faW9fYWRkcmVzcyhSRUFMVklFV19HSUNfQ1BVX0JBU0UpKTsKKwlnaWNfY3B1X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX0dJQ19DUFVfQkFTRSkpOwogCiAJLyoKIAkgKiBsZXQgdGhlIHByaW1hcnkgcHJvY2Vzc29yIGtub3cgd2UncmUgb3V0IG9mIHRoZQogCSAqIHBlbiwgdGhlbiBoZWFkIG9mZiBpbnRvIHRoZSBDIGVudHJ5IHBvaW50CiAJICovCiAJcGVuX3JlbGVhc2UgPSAtMTsKKwlzbXBfd21iKCk7CiAKIAkvKgogCSAqIFN5bmNocm9uaXNlIHdpdGggdGhlIGJvb3QgdGhyZWFkLgpAQCAtMTAyLDYgKzEwMyw3IEBACiAKIAl0aW1lb3V0ID0gamlmZmllcyArICgxICogSFopOwogCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQlzbXBfcm1iKCk7CiAJCWlmIChwZW5fcmVsZWFzZSA9PSAtMSkKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKaW5kZXggOTc0MWI0ZC4uM2RiYTY2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pY3N0MzA3Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTU3LDcgKzU4LDI2IEBACiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19HSUNfRElTVF9CQVNFKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sCisjaWZkZWYgQ09ORklHX1JFQUxWSUVXX01QQ09SRQorCXsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX0dJQzFfQ1BVX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUkVBTFZJRVdfR0lDMV9DUFVfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhSRUFMVklFV19HSUMxX0RJU1RfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19HSUMxX0RJU1RfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhSRUFMVklFV19NUENPUkVfTDIyMF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFJFQUxWSUVXX01QQ09SRV9MMjIwX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzhLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKKyNlbmRpZgorCXsKIAkJLnZpcnR1YWwJPSBJT19BRERSRVNTKFJFQUxWSUVXX1NDVExfQkFTRSksCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihSRUFMVklFV19TQ1RMX0JBU0UpLAogCQkubGVuZ3RoCQk9IFNaXzRLLApAQCAtMTM4LDE5ICsxNTgsMjkgQEAKICNpZmRlZiBDT05GSUdfUkVBTFZJRVdfTVBDT1JFCiAJdW5zaWduZWQgaW50IHBsZGN0cmw7CiAJd3JpdGVsKDB4MDAwMGEwNWYsIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfTE9DSykpOwotCXBsZGN0cmwgPSByZWFkbChfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpCSsgMHhkOCk7CisJcGxkY3RybCA9IHJlYWRsKF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkJKyBSRUFMVklFV19NUENPUkVfU1lTX1BMRF9DVFJMMSk7CiAJcGxkY3RybCB8PSAweDAwODAwMDAwOwkvKiBOZXcgaXJxIG1vZGUgKi8KLQl3cml0ZWwocGxkY3RybCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIDB4ZDgpOworCXdyaXRlbChwbGRjdHJsLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfTVBDT1JFX1NZU19QTERfQ1RSTDEpOwogCXdyaXRlbCgweDAwMDAwMDAwLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0xPQ0spKTsKICNlbmRpZgotCWdpY19kaXN0X2luaXQoX19pb19hZGRyZXNzKFJFQUxWSUVXX0dJQ19ESVNUX0JBU0UpKTsKLQlnaWNfY3B1X2luaXQoX19pb19hZGRyZXNzKFJFQUxWSUVXX0dJQ19DUFVfQkFTRSkpOworCWdpY19kaXN0X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX0dJQ19ESVNUX0JBU0UpLCAyOSk7CisJZ2ljX2NwdV9pbml0KDAsIF9faW9fYWRkcmVzcyhSRUFMVklFV19HSUNfQ1BVX0JBU0UpKTsKKyNpZmRlZiBDT05GSUdfUkVBTFZJRVdfTVBDT1JFCisJZ2ljX2Rpc3RfaW5pdCgxLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfR0lDMV9ESVNUX0JBU0UpLCA2NCk7CisJZ2ljX2NwdV9pbml0KDEsIF9faW9fYWRkcmVzcyhSRUFMVklFV19HSUMxX0NQVV9CQVNFKSk7CisJZ2ljX2Nhc2NhZGVfaXJxKDEsIElSUV9FQl9JUlExKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfZWJfaW5pdCh2b2lkKQogewogCWludCBpOwogCisjaWZkZWYgQ09ORklHX1JFQUxWSUVXX01QQ09SRQorCS8qIDFNQiAoMTI4S0Ivd2F5KSwgOC13YXkgYXNzb2NpYXRpdml0eSwgZXZtb24vcGFyaXR5L3NoYXJlIGVuYWJsZWQKKwkgKiBCaXRzOiAgLi4uLiAuLi4wIDAxMTEgMTAwMSAwMDAwIC4uLi4gLi4uLiAuLi4uICovCisJbDJ4MF9pbml0KF9faW9fYWRkcmVzcyhSRUFMVklFV19NUENPUkVfTDIyMF9CQVNFKSwgMHgwMDc5MDAwMCwgMHhmZTAwMGZmZik7CisjZW5kaWYKIAljbGtfcmVnaXN0ZXIoJnJlYWx2aWV3X2NsY2RfY2xrKTsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfZmxhc2hfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDAwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhYjA3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MDAvS2NvbmZpZwpAQCAtMCwwICsxLDEzIEBACisjIGFyY2gvYXJtL21hY2gtczNjMjQwMC9LY29uZmlnCisjCisjIENvcHlyaWdodCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCisKKworbWVudSAiUzNDMjQwMCBNYWNoaW5lcyIKKworCitlbmRtZW51CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTIzZjRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDAwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKKyMgYXJjaC9hcm0vbWFjaC1zM2MyNDAwL01ha2VmaWxlCisjCisjIENvcHlyaWdodCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitvYmoteQkJCQk6PQorb2JqLW0JCQkJOj0KK29iai1uCQkJCTo9CitvYmotCQkJCTo9CisKK29iai0kKENPTkZJR19DUFVfUzNDMjQwMCkJKz0gZ3Bpby5vCisKKyMgTWFjaGluZSBzdXBwb3J0CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDAwLWdwaW8uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQwMC9ncGlvLmMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MDAtZ3Bpby5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzI0MDAvZ3Bpby5jCmluZGV4IDE1NzZkMDEuLjc1OGUxNjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQwMC1ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDAwL2dwaW8uYwpAQCAtMSw0ICsxLDQgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDAwLWdwaW8uYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDAwL2dwaW8uYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNiBMdWNhcyBDb3JyZWlhIFZpbGxhIFJlYWwgPGx1Y2FzdnJAZ29ib2xpbnV4Lm9yZz4KICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IGViNGVjNDEuLmQ0YjAxM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC0xLDMwICsxLDY5IEBACi1pZiBBUkNIX1MzQzI0MTAKKyMgYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKKyMKKyMgQ29weXJpZ2h0IDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCiAKLW1lbnUgIlMzQzI0WFggSW1wbGVtZW50YXRpb25zIgorY29uZmlnIENQVV9TM0MyNDEwCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJc2VsZWN0IFMzQzI0MTBfQ0xPQ0sKKwlzZWxlY3QgUzNDMjQxMF9HUElPCisJc2VsZWN0IFMzQzI0MTBfUE0gaWYgUE0KKwloZWxwCisJICBTdXBwb3J0IGZvciBTM0MyNDEwIGFuZCBTM0MyNDEwQSBmYW1pbHkgZnJvbSB0aGUgUzNDMjRYWCBsaW5lCisJICBvZiBTYW1zdW5nIE1vYmlsZSBDUFVzLgogCi1jb25maWcgTUFDSF9BTUxfTTU5MDAKLQlib29sICJBTUwgTTU5MDAgU2VyaWVzIgorY29uZmlnIENQVV9TM0MyNDEwX0RNQQorCWJvb2wKKwlkZXBlbmRzIG9uIFMzQzI0MTBfRE1BICYmIChDUFVfUzNDMjQxMCB8fCBDUFVfUzNDMjQ0MikKKwlkZWZhdWx0IHkgaWYgQ1BVX1MzQzI0MTAgfHwgQ1BVX1MzQzI0NDIKKwloZWxwCisJICBETUEgZGV2aWNlIHNlbGVjdGlvbiBmb3IgUzNDMjQxMCBhbmQgY29tcGF0aWJsZSBDUFVzCisKK2NvbmZpZyBTM0MyNDEwX1BNCisJYm9vbAorCWhlbHAKKwkgIFBvd2VyIE1hbmFnZW1lbnQgY29kZSBjb21tb24gdG8gUzNDMjQxMCBhbmQgYmV0dGVyCisKK2NvbmZpZyBTM0MyNDEwX0dQSU8KKwlib29sCisJaGVscAorCSAgR1BJTyBjb2RlIGZvciBTM0MyNDEwIGFuZCBzaW1pbGFyIHByb2Nlc3NvcnMKKworY29uZmlnIFMzQzI0MTBfQ0xPQ0sKKwlib29sCisJaGVscAorCSAgQ2xvY2sgY29kZSBmb3IgdGhlIFMzQzI0MTAsIGFuZCBzaW1pbGFyIHByb2Nlc3NvcnMKKworCittZW51ICJTM0MyNDEwIE1hY2hpbmVzIgorCitjb25maWcgQVJDSF9TTURLMjQxMAorCWJvb2wgIlNNREsyNDEwL0E5TTI0MTAiCiAJc2VsZWN0IENQVV9TM0MyNDEwCi0Jc2VsZWN0IFBNX1NJTVRFQyBpZiBQTQorCXNlbGVjdCBNQUNIX1NNREsKIAloZWxwCi0JICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBBbWVyaWNhbiBNaWNyb3N5c3RlbXMgTTU5MDAgU2VyaWVzCi0gICAgICAgICAgIDxodHRwOi8vd3d3LmFtbHRkLmNvbT4KKwkgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNNREsyNDEwIG9yIHRoZSBkZXJpdmVkIG1vZHVsZSBBOU0yNDEwCisgICAgICAgICAgIDxodHRwOi8vd3d3LmZzZm9ydGguZGU+CiAKLWNvbmZpZyBNQUNIX0FOVUJJUwotCWJvb2wgIlNpbXRlYyBFbGVjdHJvbmljcyBBTlVCSVMiCi0Jc2VsZWN0IENQVV9TM0MyNDQwCi0Jc2VsZWN0IFBNX1NJTVRFQyBpZiBQTQorY29uZmlnIEFSQ0hfSDE5NDAKKwlib29sICJJUEFRIEgxOTQwIgorCXNlbGVjdCBDUFVfUzNDMjQxMAorCXNlbGVjdCBQTV9IMTk0MCBpZiBQTQogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzIEFOVUJJUwotCSAgZGV2ZWxvcG1lbnQgc3lzdGVtCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEhQIElQQVEgSDE5NDAKIAotY29uZmlnIE1BQ0hfT1NJUklTCi0JYm9vbCAiU2ltdGVjIElNMjQ0MEQyMCAoT1NJUklTKSBtb2R1bGUiCi0Jc2VsZWN0IENQVV9TM0MyNDQwCi0Jc2VsZWN0IFBNX1NJTVRFQyBpZiBQTQorY29uZmlnIFBNX0gxOTQwCisJYm9vbAogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIElNMjQ0MEQyMCBtb2R1bGUsIGFsc28KLQkgIGtub3duIGFzIHRoZSBPc2lyaXMuCisJICBJbnRlcm5hbCBub2RlIGZvciBIMTk0MCBhbmQgcmVsYXRlZCBQTQorCitjb25maWcgTUFDSF9OMzAKKwlib29sICJBY2VyIE4zMCIKKwlzZWxlY3QgQ1BVX1MzQzI0MTAKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFjZXIgTjMwCiAKIGNvbmZpZyBBUkNIX0JBU1QKIAlib29sICJTaW10ZWMgRWxlY3Ryb25pY3MgQkFTVCAoRUIyNDEwSVRYKSIKQEAgLTM1LDcgKzc0LDE5IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNpbXRlYyBFbGVjdHJvbmljcyBFQjI0MTBJVFgKIAkgIGRldmVsb3BtZW50IGJvYXJkIChhbHNvIGtub3duIGFzIEJBU1QpCiAKLQkgIFByb2R1Y3QgcGFnZTogPGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL0VCMjQxMElUWC8+LgorY29uZmlnIE1BQ0hfT1RPTQorIAlib29sICJOZXhWaXNpb24gT1RPTSBCb2FyZCIKKyAJc2VsZWN0IENQVV9TM0MyNDEwCisJaGVscAorIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTmV4IFZpc2lvbiBPVE9NIGJvYXJkCisKK2NvbmZpZyBNQUNIX0FNTF9NNTkwMAorCWJvb2wgIkFNTCBNNTkwMCBTZXJpZXMiCisJc2VsZWN0IENQVV9TM0MyNDEwCisJc2VsZWN0IFBNX1NJTVRFQyBpZiBQTQorCWhlbHAKKwkgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFtZXJpY2FuIE1pY3Jvc3lzdGVtcyBNNTkwMCBTZXJpZXMKKyAgICAgICAgICAgPGh0dHA6Ly93d3cuYW1sdGQuY29tPgogCiBjb25maWcgQkFTVF9QQzEwNF9JUlEKIAlib29sICJCQVNUIFBDMTA0IElSUSBzdXBwb3J0IgpAQCAtNDUsNzQgKzk2LDYgQEAKIAkgIFNheSBZCWhlcmUgdG8gZW5hYmxlIHRoZSBQQzEwNCBJUlEgcm91dGluZyBvbiB0aGUKIAkgIFNpbXRlYyBCQVNUIChFQjI0MTBJVFgpCiAKLWNvbmZpZyBQTV9IMTk0MAotCWJvb2wKLQloZWxwCi0JICBJbnRlcm5hbCBub2RlIGZvciBIMTk0MCBhbmQgcmVsYXRlZCBQTQotCi1jb25maWcgQVJDSF9IMTk0MAotCWJvb2wgIklQQVEgSDE5NDAiCi0Jc2VsZWN0IENQVV9TM0MyNDEwCi0Jc2VsZWN0IFBNX0gxOTQwIGlmIFBNCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBIUCBJUEFRIEgxOTQwCi0KLQkgIDxodHRwOi8vd3d3LmhhbmRoZWxkcy5vcmcvcHJvamVjdHMvaDE5NDAuaHRtbD4uCi0KLWNvbmZpZyBNQUNIX04zMAotCWJvb2wgIkFjZXIgTjMwIgotCXNlbGVjdCBDUFVfUzNDMjQxMAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgQWNlciBOMzAKLQotCSAgPGh0dHA6Ly96b28ud2VpbmlnZWwuc2UvbjMwPi4KLQotY29uZmlnIE1BQ0hfU01ESwotCWJvb2wKLQloZWxwCi0JICBDb21tb24gbWFjaGluZSBjb2RlIGZvciBTTURLMjQxMCBhbmQgU01ESzI0NDAKLQotY29uZmlnIEFSQ0hfU01ESzI0MTAKLQlib29sICJTTURLMjQxMC9BOU0yNDEwIgotCXNlbGVjdCBDUFVfUzNDMjQxMAotCXNlbGVjdCBNQUNIX1NNREsKLQloZWxwCi0JICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTTURLMjQxMCBvciB0aGUgZGVyaXZlZCBtb2R1bGUgQTlNMjQxMAotICAgICAgICAgICA8aHR0cDovL3d3dy5mc2ZvcnRoLmRlPgotCi1jb25maWcgQVJDSF9TM0MyNDQwCi0JYm9vbCAiU01ESzI0NDAiCi0Jc2VsZWN0IENQVV9TM0MyNDQwCi0Jc2VsZWN0IE1BQ0hfU01ESwotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU01ESzI0NDAuCi0KLWNvbmZpZyBTTURLMjQ0MF9DUFUyNDQwCi0JYm9vbCAiU01ESzI0NDAgd2l0aCBTM0MyNDQwIENQVSBtb2R1bGUiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0NDAKLQlkZWZhdWx0IHkgaWYgQVJDSF9TM0MyNDQwCi0Jc2VsZWN0IENQVV9TM0MyNDQwCi0KLWNvbmZpZyBTTURLMjQ0MF9DUFUyNDQyCi0JYm9vbCAiU01ETTI0NDAgd2l0aCBTM0MyNDQyIENQVSBtb2R1bGUiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0NDAKLQlzZWxlY3QgQ1BVX1MzQzI0NDIKLQotY29uZmlnIE1BQ0hfUzNDMjQxMwotCWJvb2wKLQloZWxwCi0JICBJbnRlcm5hbCBub2RlIGZvciBTM0MyNDEzIHZlcnNpb24gb2YgU01ESzI0MTMsIHNvIHRoYXQKLQkgIG1hY2hpbmVfaXNfczNjMjQxMygpIHdpbGwgd29yayB3aGVuIE1BQ0hfU01ESzI0MTMgaXMKLQkgIHNlbGVjdGVkCi0KLWNvbmZpZyBNQUNIX1NNREsyNDEzCi0JYm9vbCAiU01ESzI0MTMiCi0Jc2VsZWN0IENQVV9TM0MyNDEyCi0Jc2VsZWN0IE1BQ0hfUzNDMjQxMwotCXNlbGVjdCBNQUNIX1NNREsKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgYW4gU01ESzI0MTMKLQogY29uZmlnIE1BQ0hfVlIxMDAwCiAJYm9vbCAiVGhvcmNvbSBWUjEwMDAiCiAJc2VsZWN0IFBNX1NJTVRFQyBpZiBQTQpAQCAtMTIwLDIwMiArMTAzLDExIEBACiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBUaG9yY29tIFZSMTAwMCBib2FyZC4KIAotCSAgVGhpcyBsaW51eCBwb3J0IGlzIGN1cnJlbnRseSBiZWluZyBtYWludGFpbmVkIGJ5IFNpbXRlYywgb24gYmVoYWxmCi0JICBvZiBUaG9yY29tLiBBbnkgcXVlcmllcywgcGxlYXNlIGNvbnRhY3QgVGhvcmNvbSBmaXJzdC4KLQotY29uZmlnIE1BQ0hfUlgzNzE1Ci0JYm9vbCAiSFAgaVBBUSByeDM3MTUiCi0Jc2VsZWN0IENQVV9TM0MyNDQwCi0Jc2VsZWN0IFBNX0gxOTQwIGlmIFBNCitjb25maWcgTUFDSF9RVDI0MTAKKwlib29sICJRVDI0MTAiCisJc2VsZWN0IENQVV9TM0MyNDEwCiAJaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBIUCBpUEFRIHJ4MzcxNS4KLQotCSAgU2VlIDxodHRwOi8vd3d3LmhhbmRoZWxkcy5vcmcvcHJvamVjdHMvcngzNzE1Lmh0bWw+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiBvbiB0aGlzIHByb2plY3QKLQotY29uZmlnIE1BQ0hfT1RPTQotIAlib29sICJOZXhWaXNpb24gT1RPTSBCb2FyZCIKLSAJc2VsZWN0IENQVV9TM0MyNDEwCi0JaGVscAotIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTmV4IFZpc2lvbiBPVE9NIGJvYXJkCi0KLWNvbmZpZyBNQUNIX05FWENPREVSXzI0NDAKLSAJYm9vbCAiTmV4VmlzaW9uIE5FWENPREVSIDI0NDAgTGlnaHQgQm9hcmQiCi0gCXNlbGVjdCBDUFVfUzNDMjQ0MAotCWhlbHAKLSAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIE5leCBWaXNpb24gTkVYQ09ERVIgMjQ0MCBMaWdodCBCb2FyZAotCi1jb25maWcgTUFDSF9WU1RNUwotCWJvb2wgIlZNU1RNUyIKLQlzZWxlY3QgQ1BVX1MzQzI0MTIKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgYW4gVlNUTVMgYm9hcmQKKwkgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFybXpvbmUgUVQyNDEwCiAKIGVuZG1lbnUKIAotY29uZmlnIFMzQzI0MTBfQ0xPQ0sKLQlib29sCi0JaGVscAotCSAgQ2xvY2sgY29kZSBmb3IgdGhlIFMzQzI0MTAsIGFuZCBzaW1pbGFyIHByb2Nlc3NvcnMKLQotY29uZmlnIFMzQzI0MTBfUE0KLQlib29sCi0JaGVscAotCSAgUG93ZXIgTWFuYWdlbWVudCBjb2RlIGNvbW1vbiB0byBTM0MyNDEwIGFuZCBiZXR0ZXIKLQotY29uZmlnIENQVV9TM0MyNDEwX0RNQQotCWJvb2wKLQlkZXBlbmRzIG9uIFMzQzI0MTBfRE1BICYmIChDUFVfUzNDMjQxMCB8fCBDUFVfUzNDMjQ0MikKLQlkZWZhdWx0IHkgaWYgQ1BVX1MzQzI0MTAgfHwgQ1BVX1MzQzI0NDIKLQloZWxwCi0JICBETUEgZGV2aWNlIHNlbGVjdGlvbiBmb3IgUzNDMjQxMCBhbmQgY29tcGF0aWJsZSBDUFVzCi0KLWNvbmZpZyBDUFVfUzNDMjQxMAotCWJvb2wKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAotCXNlbGVjdCBTM0MyNDEwX0NMT0NLCi0Jc2VsZWN0IFMzQzI0MTBfUE0gaWYgUE0KLQloZWxwCi0JICBTdXBwb3J0IGZvciBTM0MyNDEwIGFuZCBTM0MyNDEwQSBmYW1pbHkgZnJvbSB0aGUgUzNDMjRYWCBsaW5lCi0JICBvZiBTYW1zdW5nIE1vYmlsZSBDUFVzLgotCi0jIGludGVybmFsIG5vZGUgdG8gc2lnbmlmeSBpZiB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggYW4gUzNDMjQxMgotCi1jb25maWcgQ1BVX1MzQzI0MTJfT05MWQotCWJvb2wKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiAhQ1BVX1MzQzI0MDAgJiYgIUNQVV9TM0MyNDEwICYmIFwKLQkJICAgIUNQVV9TM0MyNDQwICYmICFDUFVfUzNDMjQ0MiAmJiBDUFVfUzNDMjQxMgotCWRlZmF1bHQgeSBpZiBDUFVfUzNDMjQxMgotCi1jb25maWcgUzNDMjQxMl9QTQotCWJvb2wKLQloZWxwCi0JICBJbnRlcm5hbCBjb25maWcgbm9kZSB0byBhcHBseSBTM0MyNDEyIHBvd2VyIG1hbmFnZW1lbnQKLQotY29uZmlnIENQVV9TM0MyNDEyCi0JYm9vbAotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCi0Jc2VsZWN0IFMzQzI0MTJfUE0gaWYgUE0KLQloZWxwCi0JICBTdXBwb3J0IGZvciB0aGUgUzNDMjQxMiBhbmQgUzNDMjQxMyBTb0NzIGZyb20gdGhlIFMzQzI0WFggbGluZQotCi1jb25maWcgQ1BVX1MzQzI0NFgKLQlib29sCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgJiYgKENQVV9TM0MyNDQwIHx8IENQVV9TM0MyNDQyKQotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFMzQzI0NDAgYW5kIFMzQzI0NDIgU2Ftc3VuZyBNb2JpbGUgQ1BVIGJhc2VkIHN5c3RlbXMuCi0KLWNvbmZpZyBDUFVfUzNDMjQ0MAotCWJvb2wKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAotCXNlbGVjdCBTM0MyNDEwX0NMT0NLCi0Jc2VsZWN0IFMzQzI0MTBfUE0gaWYgUE0KLQlzZWxlY3QgQ1BVX1MzQzI0NFgKLQloZWxwCi0JICBTdXBwb3J0IGZvciBTM0MyNDQwIFNhbXN1bmcgTW9iaWxlIENQVSBiYXNlZCBzeXN0ZW1zLgotCi1jb25maWcgQ1BVX1MzQzI0NDIKLQlib29sCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MjAKLQlzZWxlY3QgUzNDMjQxMF9DTE9DSwotCXNlbGVjdCBTM0MyNDEwX1BNIGlmIFBNCi0Jc2VsZWN0IENQVV9TM0MyNDRYCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MiBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KLQotY29tbWVudCAiUzNDMjQxMCBCb290IgotCi1jb25maWcgUzNDMjQxMF9CT09UX1dBVENIRE9HCi0JYm9vbCAiUzNDMjQxMCBJbml0aWFsaXNhdGlvbiB3YXRjaGRvZyIKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBTM0MyNDEwX1dBVENIRE9HCi0JaGVscAotCSAgU2F5IHkgdG8gZW5hYmxlIHRoZSB3YXRjaGRvZyBkdXJpbmcgdGhlIGtlcm5lbCBkZWNvbXByZXNzaW9uCi0JICBzdGFnZS4gSWYgdGhlIGtlcm5lbCBmYWlscyB0byB1bmNvbXByZXNzLCB0aGVuIHRoZSB3YXRjaGRvZwotCSAgd2lsbCB0cmlnZ2VyIGEgcmVzZXQgYW5kIHRoZSBzeXN0ZW0gc2hvdWxkIHJlc3RhcnQuCi0KLQkgIEFsdGhvdWdoIHRoaXMgdXNlcyB0aGUgc2FtZSBoYXJkd2FyZSB1bml0IGFzIHRoZSBrZXJuZWwgd2F0Y2hkb2cKLQkgIGRyaXZlciwgaXQgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIGl0LiBJZiB5b3UgdXNlIHRoaXMgb3B0aW9uLAotCSAgeW91IHdpbGwgaGF2ZSB0byB1c2UgdGhlIHdhdGNoZGcgZHJpdmVyIHRvIGVpdGhlciBzdG9wIHRoZSB0aW1lb3V0Ci0JICBvciByZXN0YXJ0IGl0LiBJZiB5b3UgZG8gbm90LCB0aGVuIHlvdXIga2VybmVsIHdpbGwgcmVib290IGFmdGVyCi0JICBzdGFydHVwLgotCi0JICBUaGUgZHJpdmVyIHVzZXMgYSBmaXhlZCB0aW1lb3V0IHZhbHVlLCBzbyB0aGUgZXhhY3QgdGltZSB0aWxsIHRoZQotCSAgc3lzdGVtIHJlc2V0cyBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBQQ0xLLiBUaGUgdGltZW91dCBvbiBhbgotCSAgMjAwTUh6IHMzYzI0MTAgc2hvdWxkIGJlIGFib3V0IDMwIHNlY29uZHMuCi0KLWNvbmZpZyBTM0MyNDEwX0JPT1RfRVJST1JfUkVTRVQKLQlib29sICJTM0MyNDEwIFJlYm9vdCBvbiBkZWNvbXByZXNzaW9uIGVycm9yIgotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCi0JaGVscAotCSAgU2F5IHkgaGVyZSB0byB1c2UgdGhlIHdhdGNoZG9nIHRvIHJlc2V0IHRoZSBzeXN0ZW0gaWYgdGhlCi0JICBrZXJuZWwgZGVjb21wcmVzc29yIGRldGVjdHMgYW4gZXJyb3IgZHVyaW5nIGRlY29tcHJlc3Npb24uCi0KLQotY29tbWVudCAiUzNDMjQxMCBTZXR1cCIKLQotY29uZmlnIFMzQzI0MTBfRE1BCi0JYm9vbCAiUzNDMjQxMCBETUEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAotCWhlbHAKLQkgIFMzQzI0MTAgRE1BIHN1cHBvcnQuIFRoaXMgaXMgbmVlZGVkIGZvciBkcml2ZXJzIGxpa2Ugc291bmQgd2hpY2gKLQkgIHVzZSB0aGUgUzNDMjQxMCdzIERNQSBzeXN0ZW0gdG8gbW92ZSBkYXRhIHRvIGFuZCBmcm9tIHRoZQotCSAgcGVyaXBoZXJhbCBibG9ja3MuCi0KLWNvbmZpZyBTM0MyNDEwX0RNQV9ERUJVRwotCWJvb2wgIlMzQzI0MTAgRE1BIHN1cHBvcnQgZGVidWciCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgJiYgUzNDMjQxMF9ETUEKLQloZWxwCi0JICBFbmFibGUgZGVidWdnaW5nIG91dHB1dCBmb3IgdGhlIERNQSBjb2RlLiBUaGlzIG9wdGlvbiBzZW5kcyBpbmZvCi0JICB0byB0aGUga2VybmVsIGxvZywgYXQgcHJpb3JpdHkgS0VSTl9ERUJVRy4KLQotCSAgTm90ZSwgaXQgaXMgZWFzeSB0byBjcmVhdGUgYW5kIGZpbGwgdGhlIGxvZyBidWZmZXIgaW4gYSBzbWFsbAotCSAgYW1vdW50IG9mIHRpbWUsIGFzIHdlbGwgYXMgdXNpbmcgYW4gc2lnbmlmaWNhbnQgcGVyY2VudGFnZSBvZgotCSAgdGhlIENQVSB0aW1lIGRvaW5nIHNvLgotCi0KLWNvbmZpZyBTM0MyNDEwX1BNX0RFQlVHCi0JYm9vbCAiUzNDMjQxMCBQTSBTdXNwZW5kIGRlYnVnIgotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIFBNCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB2ZXJib3NlIGRlYnVnZ2luZyBmcm9tIHRoZSBQTSBTdXNwZW5kIGFuZAotCSAgUmVzdW1lIGNvZGUuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQ+Ci0JICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotY29uZmlnIFMzQzI0MTBfUE1fQ0hFQ0sKLQlib29sICJTM0MyNDEwIFBNIFN1c3BlbmQgTWVtb3J5IENSQyIKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBQTSAmJiBDUkMzMgotCWhlbHAKLSAJICBFbmFibGUgdGhlIFBNIGNvZGUncyBtZW1vcnkgYXJlYSBjaGVja3N1bSBvdmVyIHNsZWVwLiBUaGlzIG9wdGlvbgotCSAgd2lsbCBnZW5lcmF0ZSBDUkNzIG9mIGFsbCBibG9ja3Mgb2YgbWVtb3J5LCBhbmQgc3RvcmUgdGhlbSBiZWZvcmUKLQkgIGdvaW5nIHRvIHNsZWVwLiBUaGUgYmxvY2tzIGFyZSB0aGVuIGNoZWNrZWQgb24gcmVzdW1lIGZvciBhbnkKLQkgIGVycm9ycy4KLQotY29uZmlnIFMzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFCi0JaW50ICJTM0MyNDEwIFBNIFN1c3BlbmQgQ1JDIENodW5rc2l6ZSAoS2lCKSIKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBQTSAmJiBTM0MyNDEwX1BNX0NIRUNLCi0JZGVmYXVsdCA2NAotCWhlbHAKLQkgIFNldCB0aGUgY2h1bmtzaXplIGluIEtpbG9ieXRlcyBvZiB0aGUgQ1JDIGZvciBjaGVja2luZyBtZW1vcnkKLQkgIGNvcnJ1cHRpb24gb3ZlciBzdXNwZW5kIGFuZCByZXN1bWUuIEEgc21hbGxlciB2YWx1ZSB3aWxsIG1lYW4gdGhhdAotCSAgdGhlIENSQyBkYXRhIGJsb2NrIHdpbGwgdGFrZSBtb3JlIG1lbW9yeSwgYnV0IHdpbCBpZGVudGlmeSBhbnkKLQkgIGZhdWx0cyB3aXRoIGJldHRlciBwcmVjaXNpb24uCi0KLWNvbmZpZyBQTV9TSU1URUMKLQlib29sCi0JaGVscAotCSAgQ29tbW9uIHBvd2VyIG1hbmFnZW1lbnQgY29kZSBmb3Igc3lzdGVtcyB0aGF0IGFyZQotCSAgY29tcGF0aWJsZSB3aXRoIHRoZSBTaW10ZWMgc3R5bGUgb2YgcG93ZXIgbWFuYWdlbWVudAotCi1jb25maWcgUzNDMjQxMF9MT1dMRVZFTF9VQVJUX1BPUlQKLQlpbnQgIlMzQzI0MTAgVUFSVCB0byB1c2UgZm9yIGxvdy1sZXZlbCBtZXNzYWdlcyIKLQlkZWZhdWx0IDAKLQloZWxwCi0JICBDaG9pY2Ugb2Ygd2hpY2ggVUFSVCBwb3J0IHRvIHVzZSBmb3IgdGhlIGxvdy1sZXZlbCBtZXNzYWdlcywKLQkgIHN1Y2ggYXMgdGhlIGBVbmNvbXByZXNzaW5nLi4uYCBhdCBzdGFydCB0aW1lLiBUaGUgdmFsdWUgb2YKLQkgIHRoaXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgYmV0d2VlbiB6ZXJvIGFuZCB0d28uIFRoZSBwb3J0Ci0JICBtdXN0IGhhdmUgYmVlbiBpbml0aWFsaXNlZCBieSB0aGUgYm9vdC1sb2FkZXIgYmVmb3JlIHVzZS4KLQotCSAgTm90ZSwgdGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIHBvcnQgdXNlZCBieSB0aGUgZGVidWcgbWVzc2FnZXMsCi0JICB3aGljaCBpcyBhIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24uCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKaW5kZXggMjc2NjNlMi4uOWEzZDNkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQpAQCAtMSw5MiArMSwzMSBAQAotCisjIGFyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQogIwotIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMgQ29weXJpZ2h0IDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCiAjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCiAKLSMgT2JqZWN0IGZpbGUgbGlzdHMuCi0KLW9iai15CQkJOj0gY3B1Lm8gaXJxLm8gdGltZS5vIGdwaW8ubyBjbG9jay5vIGRldnMubwotb2JqLW0JCQk6PQotb2JqLW4JCQk6PQotb2JqLQkJCTo9Ci1vYmotZG1hLXkJCTo9Ci1vYmotZG1hLW4JCTo9Ci0KLSMgRE1BCi1vYmotJChDT05GSUdfUzNDMjQxMF9ETUEpCSs9IGRtYS5vCi0KLSMgUzNDMjQwMCBzdXBwb3J0IGZpbGVzCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0MDApCSs9IHMzYzI0MDAtZ3Bpby5vCi0KLSMgUzNDMjQxMCBzdXBwb3J0IGZpbGVzCitvYmoteQkJCQk6PQorb2JqLW0JCQkJOj0KK29iai1uCQkJCTo9CitvYmotCQkJCTo9CiAKIG9iai0kKENPTkZJR19DUFVfUzNDMjQxMCkJKz0gczNjMjQxMC5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0MTApCSs9IHMzYzI0MTAtZ3Bpby5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0MTApCSs9IHMzYzI0MTAtaXJxLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQxMCkJKz0gaXJxLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQxMF9ETUEpCSs9IGRtYS5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0MTBfRE1BKQkrPSBkbWEubworb2JqLSQoQ09ORklHX1MzQzI0MTBfUE0pCSs9IHBtLm8gc2xlZXAubworb2JqLSQoQ09ORklHX1MzQzI0MTBfR1BJTykJKz0gZ3Bpby5vCitvYmotJChDT05GSUdfUzNDMjQxMF9DTE9DSykJKz0gY2xvY2subwogCi1vYmotJChDT05GSUdfUzNDMjQxMF9QTSkJKz0gczNjMjQxMC1wbS5vIHMzYzI0MTAtc2xlZXAubwotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwX0RNQSkJKz0gczNjMjQxMC1kbWEubworIyBNYWNoaW5lIHN1cHBvcnQKIAotIyBQb3dlciBNYW5hZ2VtZW50IHN1cHBvcnQKLQotb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubyBzbGVlcC5vCi1vYmotJChDT05GSUdfUE1fU0lNVEVDKQkJKz0gcG0tc2ltdGVjLm8KLW9iai0kKENPTkZJR19QTV9IMTk0MCkJCSs9IHBtLWgxOTQwLm8KLQotIyBTM0MyNDEyIHN1cHBvcnQKLW9iai0kKENPTkZJR19DUFVfUzNDMjQxMikJKz0gczNjMjQxMi5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0MTIpCSs9IHMzYzI0MTItaXJxLm8KLW9iai0kKENPTkZJR19DUFVfUzNDMjQxMikJKz0gczNjMjQxMi1jbG9jay5vCi1vYmotZG1hLSQoQ09ORklHX0NQVV9TM0MyNDEyKQkrPSBzM2MyNDEyLWRtYS5vCi0KLW9iai0kKENPTkZJR19TM0MyNDEyX1BNKQkrPSBzM2MyNDEyLXBtLm8KLQotIwotIyBTM0MyNDRYIHN1cHBvcnQKLQotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDRYKQkrPSBzM2MyNDR4Lm8KLW9iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkJKz0gczNjMjQ0eC1pcnEubwotCi0jIENsb2NrIGNvbnRyb2wKLQotb2JqLSQoQ09ORklHX1MzQzI0MTBfQ0xPQ0spCSs9IHMzYzI0MTAtY2xvY2subwotCi0jIFMzQzI0NDAgc3VwcG9ydAotCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0NDApCSs9IHMzYzI0NDAubyBzM2MyNDQwLWRzYy5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0NDApCSs9IHMzYzI0NDAtaXJxLm8KLW9iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkJKz0gczNjMjQ0MC1jbG9jay5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0NDApCSs9IHMzYzI0MTAtZ3Bpby5vCi1vYmotZG1hLSQoQ09ORklHX0NQVV9TM0MyNDQwKQkrPSBzM2MyNDQwLWRtYS5vCi0KLSMgUzNDMjQ0MiBzdXBwb3J0Ci0KLW9iai0kKENPTkZJR19DUFVfUzNDMjQ0MikJKz0gczNjMjQ0Mi5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0NDIpCSs9IHMzYzI0NDItY2xvY2subwotCi0jIGJhc3QgZXh0cmFzCi0KLW9iai0kKENPTkZJR19CQVNUX1BDMTA0X0lSUSkJKz0gYmFzdC1pcnEubwotCi0jIG1lcmdlIGluIGRtYSBvYmplY3RzCi0KLW9iai15CQkJCSs9ICQob2JqLWRtYS15KQotCi0jIG1hY2hpbmUgc3BlY2lmaWMgc3VwcG9ydAotCi1vYmotJChDT05GSUdfTUFDSF9BTUxfTTU5MDApCSs9IG1hY2gtYW1sbTU5MDAubwotb2JqLSQoQ09ORklHX01BQ0hfQU5VQklTKQkrPSBtYWNoLWFudWJpcy5vCi1vYmotJChDT05GSUdfTUFDSF9PU0lSSVMpCSs9IG1hY2gtb3NpcmlzLm8KLW9iai0kKENPTkZJR19BUkNIX0JBU1QpCQkrPSBtYWNoLWJhc3QubyB1c2Itc2ltdGVjLm8KLW9iai0kKENPTkZJR19BUkNIX0gxOTQwKQkrPSBtYWNoLWgxOTQwLm8KLW9iai0kKENPTkZJR19NQUNIX04zMCkJCSs9IG1hY2gtbjMwLm8KIG9iai0kKENPTkZJR19BUkNIX1NNREsyNDEwKQkrPSBtYWNoLXNtZGsyNDEwLm8KLW9iai0kKENPTkZJR19NQUNIX1NNREsyNDEzKQkrPSBtYWNoLXNtZGsyNDEzLm8KLW9iai0kKENPTkZJR19BUkNIX1MzQzI0NDApCSs9IG1hY2gtc21kazI0NDAubwotb2JqLSQoQ09ORklHX01BQ0hfVlIxMDAwKQkrPSBtYWNoLXZyMTAwMC5vIHVzYi1zaW10ZWMubwotb2JqLSQoQ09ORklHX01BQ0hfUlgzNzE1KQkrPSBtYWNoLXJ4MzcxNS5vCitvYmotJChDT05GSUdfQVJDSF9IMTk0MCkJKz0gbWFjaC1oMTk0MC5vCitvYmotJChDT05GSUdfUE1fSDE5NDApCQkrPSBwbS1oMTk0MC5vCitvYmotJChDT05GSUdfTUFDSF9OMzApCQkrPSBtYWNoLW4zMC5vCitvYmotJChDT05GSUdfQVJDSF9CQVNUKQkJKz0gbWFjaC1iYXN0Lm8gdXNiLXNpbXRlYy5vCiBvYmotJChDT05GSUdfTUFDSF9PVE9NKQkJKz0gbWFjaC1vdG9tLm8KLW9iai0kKENPTkZJR19NQUNIX05FWENPREVSXzI0NDApICs9IG1hY2gtbmV4Y29kZXIubwotb2JqLSQoQ09ORklHX01BQ0hfVlNUTVMpCSs9IG1hY2gtdnN0bXMubwotCi1vYmotJChDT05GSUdfTUFDSF9TTURLKQkJKz0gY29tbW9uLXNtZGsubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai0kKENPTkZJR19NQUNIX0FNTF9NNTkwMCkJKz0gbWFjaC1hbWxtNTkwMC5vCitvYmotJChDT05GSUdfQkFTVF9QQzEwNF9JUlEpCSs9IGJhc3QtaXJxLm8KK29iai0kKENPTkZJR19NQUNIX1ZSMTAwMCkJKz0gbWFjaC12cjEwMDAubyB1c2Itc2ltdGVjLm8KK29iai0kKENPTkZJR19NQUNIX1FUMjQxMCkJKz0gbWFjaC1xdDI0MTAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pcnEuYwppbmRleCAzNzllZmU3Li5kYWViYTQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pcnEuYwpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2Jhc3QtbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYmFzdC1pcnEuaD4KIAotI2luY2x1ZGUgImlycS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvaXJxLmg+CiAKICNpZiAwCiAjaW5jbHVkZSA8YXNtL2RlYnVnLWxsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QuaAppbmRleCBlNWQwMzMxLi5lOTg1NDM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LmgKQEAgLTEsMiArMSwyIEBACi0KKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LmgKIGV4dGVybiB2b2lkIGJhc3RfaW5pdF9pcnEodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCmluZGV4IGUxM2ZiNjcuLjViNDgzMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCkBAIC0xLDE1ICsxLDkgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgotICogUzNDMjRYWCBDb3JlIGNsb2NrIGNvbnRyb2wgc3VwcG9ydAotICoKLSAqIEJhc2VkIG9uLCBhbmQgY29kZSBmcm9tIGxpbnV4L2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2Nsb2NrLmMKLSAqKgotICoqICBDb3B5cmlnaHQgKEMpIDIwMDQgQVJNIExpbWl0ZWQuCi0gKiogIFdyaXR0ZW4gYnkgRGVlcCBCbHVlIFNvbHV0aW9ucyBMaW1pdGVkLgotICoKKyAqIFMzQzI0MTAsUzNDMjQ0MCxTM0MyNDQyIENsb2NrIGNvbnRyb2wgc3VwcG9ydAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzIsNDE4ICsyNiwyNTEgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgogCi0vKiBjbG9jayBpbmZvcm1hdGlvbiAqLwotCi1zdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7Ci0KLURFRklORV9NVVRFWChjbG9ja3NfbXV0ZXgpOwotCi0vKiBlbmFibGUgYW5kIGRpc2FibGUgY2FsbHMgZm9yIHVzZSB3aXRoIHRoZSBjbGsgc3RydWN0ICovCi0KLXN0YXRpYyBpbnQgY2xrX251bGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK2ludCBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQogewotCXJldHVybiAwOwotfQorCXVuc2lnbmVkIGludCBjbG9ja3MgPSBjbGstPmN0cmxiaXQ7CisJdW5zaWduZWQgbG9uZyBjbGtjb247CiAKLS8qIENsb2NrIEFQSSBjYWxscyAqLwotCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0Jc3RydWN0IGNsayAqcDsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwotCWludCBpZG5vOwotCi0JaWYgKGRldiA9PSBOVUxMIHx8IGRldi0+YnVzICE9ICZwbGF0Zm9ybV9idXNfdHlwZSkKLQkJaWRubyA9IC0xOwotCWVsc2UKLQkJaWRubyA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpLT5pZDsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIGxpc3QpIHsKLQkJaWYgKHAtPmlkID09IGlkbm8gJiYKLQkJICAgIHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJgotCQkgICAgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7Ci0JCQljbGsgPSBwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBjaGVjayBmb3IgdGhlIGNhc2Ugd2hlcmUgYSBkZXZpY2Ugd2FzIHN1cHBsaWVkLCBidXQgdGhlCi0JICogY2xvY2sgdGhhdCB3YXMgYmVpbmcgc2VhcmNoZWQgZm9yIGlzIG5vdCBkZXZpY2Ugc3BlY2lmaWMgKi8KLQotCWlmIChJU19FUlIoY2xrKSkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIGxpc3QpIHsKLQkJCWlmIChwLT5pZCA9PSAtMSAmJiBzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYKLQkJCSAgICB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKLQkJCQljbGsgPSBwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCXJldHVybiBjbGs7Ci19Ci0KLXZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JbW9kdWxlX3B1dChjbGstPm93bmVyKTsKLX0KLQotaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChJU19FUlIoY2xrKSB8fCBjbGsgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlpZiAoKGNsay0+dXNhZ2UrKykgPT0gMCkKLQkJKGNsay0+ZW5hYmxlKShjbGssIDEpOwotCi0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCXJldHVybiAwOwotfQotCi12b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpZiAoSVNfRVJSKGNsaykgfHwgY2xrID09IE5VTEwpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlpZiAoKC0tY2xrLT51c2FnZSkgPT0gMCkKLQkJKGNsay0+ZW5hYmxlKShjbGssIDApOwotCi0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWNsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLX0KLQotCi11bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKElTX0VSUihjbGspKQotCQlyZXR1cm4gMDsKLQotCWlmIChjbGstPnJhdGUgIT0gMCkKLQkJcmV0dXJuIGNsay0+cmF0ZTsKLQotCWlmIChjbGstPmdldF9yYXRlICE9IE5VTEwpCi0JCXJldHVybiAoY2xrLT5nZXRfcmF0ZSkoY2xrKTsKLQotCWlmIChjbGstPnBhcmVudCAhPSBOVUxMKQotCQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXJldHVybiBjbGstPnJhdGU7Ci19Ci0KLWxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JaWYgKCFJU19FUlIoY2xrKSAmJiBjbGstPnJvdW5kX3JhdGUpCi0JCXJldHVybiAoY2xrLT5yb3VuZF9yYXRlKShjbGssIHJhdGUpOwotCi0JcmV0dXJuIHJhdGU7Ci19Ci0KLWludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JaW50IHJldDsKLQotCWlmIChJU19FUlIoY2xrKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCXJldCA9IChjbGstPnNldF9yYXRlKShjbGssIHJhdGUpOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrLT5wYXJlbnQ7Ci19Ci0KLWludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChJU19FUlIoY2xrKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCi0JaWYgKGNsay0+c2V0X3BhcmVudCkKLQkJcmV0ID0gKGNsay0+c2V0X3BhcmVudCkoY2xrLCBwYXJlbnQpOwotCi0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKLUVYUE9SVF9TWU1CT0woY2xrX3B1dCk7Ci1FWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOwotRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKLUVYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKLUVYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOwotRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7Ci0KLS8qIGJhc2UgY2xvY2tzICovCi0KLXN0cnVjdCBjbGsgY2xrX3h0YWwgPSB7Ci0JLm5hbWUJCT0gInh0YWwiLAotCS5pZAkJPSAtMSwKLQkucmF0ZQkJPSAwLAotCS5wYXJlbnQJCT0gTlVMTCwKLQkuY3RybGJpdAk9IDAsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa19tcGxsID0gewotCS5uYW1lCQk9ICJtcGxsIiwKLQkuaWQJCT0gLTEsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa191cGxsID0gewotCS5uYW1lCQk9ICJ1cGxsIiwKLQkuaWQJCT0gLTEsCi0JLnBhcmVudAkJPSBOVUxMLAotCS5jdHJsYml0CT0gMCwKLX07Ci0KLXN0cnVjdCBjbGsgY2xrX2YgPSB7Ci0JLm5hbWUJCT0gImZjbGsiLAotCS5pZAkJPSAtMSwKLQkucmF0ZQkJPSAwLAotCS5wYXJlbnQJCT0gJmNsa19tcGxsLAotCS5jdHJsYml0CT0gMCwKLX07Ci0KLXN0cnVjdCBjbGsgY2xrX2ggPSB7Ci0JLm5hbWUJCT0gImhjbGsiLAotCS5pZAkJPSAtMSwKLQkucmF0ZQkJPSAwLAotCS5wYXJlbnQJCT0gTlVMTCwKLQkuY3RybGJpdAk9IDAsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa19wID0gewotCS5uYW1lCQk9ICJwY2xrIiwKLQkuaWQJCT0gLTEsCi0JLnJhdGUJCT0gMCwKLQkucGFyZW50CQk9IE5VTEwsCi0JLmN0cmxiaXQJPSAwLAotfTsKLQotc3RydWN0IGNsayBjbGtfdXNiX2J1cyA9IHsKLQkubmFtZQkJPSAidXNiLWJ1cyIsCi0JLmlkCQk9IC0xLAotCS5yYXRlCQk9IDAsCi0JLnBhcmVudAkJPSAmY2xrX3VwbGwsCi19OwotCi0vKiBjbG9ja3MgdGhhdCBjb3VsZCBiZSByZWdpc3RlcmVkIGJ5IGV4dGVybmFsIGNvZGUgKi8KLQotc3RhdGljIGludCBzM2MyNHh4X2RjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBsb25nIGRjbGtjb24gPSBfX3Jhd19yZWFkbChTM0MyNFhYX0RDTEtDT04pOworCWNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLQ09OKTsKIAogCWlmIChlbmFibGUpCi0JCWRjbGtjb24gfD0gY2xrLT5jdHJsYml0OworCQljbGtjb24gfD0gY2xvY2tzOwogCWVsc2UKLQkJZGNsa2NvbiAmPSB+Y2xrLT5jdHJsYml0OworCQljbGtjb24gJj0gfmNsb2NrczsKIAotCV9fcmF3X3dyaXRlbChkY2xrY29uLCBTM0MyNFhYX0RDTEtDT04pOworCS8qIGVuc3VyZSBub25lIG9mIHRoZSBzcGVjaWFsIGZ1bmN0aW9uIGJpdHMgc2V0ICovCisJY2xrY29uICY9IH4oUzNDMjQxMF9DTEtDT05fSURMRXxTM0MyNDEwX0NMS0NPTl9QT1dFUik7CisKKwlfX3Jhd193cml0ZWwoY2xrY29uLCBTM0MyNDEwX0NMS0NPTik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNHh4X2RjbGtfc2V0cGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQorc3RhdGljIGludCBzM2MyNDEwX3VwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKLQl1bnNpZ25lZCBsb25nIGRjbGtjb247Ci0JdW5zaWduZWQgaW50IHVjbGs7CisJdW5zaWduZWQgbG9uZyBjbGtzbG93ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtTTE9XKTsKKwl1bnNpZ25lZCBsb25nIG9yaWcgPSBjbGtzbG93OwogCi0JaWYgKHBhcmVudCA9PSAmY2xrX3VwbGwpCi0JCXVjbGsgPSAxOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX3ApCi0JCXVjbGsgPSAwOworCWlmIChlbmFibGUpCisJCWNsa3Nsb3cgJj0gflMzQzI0MTBfQ0xLU0xPV19VQ0xLX09GRjsKIAllbHNlCi0JCXJldHVybiAtRUlOVkFMOworCQljbGtzbG93IHw9IFMzQzI0MTBfQ0xLU0xPV19VQ0xLX09GRjsKIAotCWNsay0+cGFyZW50ID0gcGFyZW50OworCV9fcmF3X3dyaXRlbChjbGtzbG93LCBTM0MyNDEwX0NMS1NMT1cpOwogCi0JZGNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRENMS0NPTik7CisJLyogaWYgd2Ugc3RhcnRlZCB0aGUgVVBMTCwgdGhlbiBhbGxvdyB0byBzZXR0bGUgKi8KIAotCWlmIChjbGstPmN0cmxiaXQgPT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4pIHsKLQkJaWYgKHVjbGspCi0JCQlkY2xrY29uIHw9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMF9VQ0xLOwotCQllbHNlCi0JCQlkY2xrY29uICY9IH5TM0MyNDEwX0RDTEtDT05fRENMSzBfVUNMSzsKLQl9IGVsc2UgewotCQlpZiAodWNsaykKLQkJCWRjbGtjb24gfD0gUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX1VDTEs7Ci0JCWVsc2UKLQkJCWRjbGtjb24gJj0gflMzQzI0MTBfRENMS0NPTl9EQ0xLMV9VQ0xLOworCWlmIChlbmFibGUgJiYgKG9yaWcgJiBTM0MyNDEwX0NMS1NMT1dfVUNMS19PRkYpKQorCQl1ZGVsYXkoMjAwKTsKKworCXJldHVybiAwOworfQorCisvKiBzdGFuZGFyZCBjbG9jayBkZWZpbml0aW9ucyAqLworCitzdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc19kaXNhYmxlW10gPSB7CisJeworCQkubmFtZQkJPSAibmFuZCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX05BTkQsCisJfSwgeworCQkubmFtZQkJPSAic2RpIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fU0RJLAorCX0sIHsKKwkJLm5hbWUJCT0gImFkYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0FEQywKKwl9LCB7CisJCS5uYW1lCQk9ICJpMmMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9JSUMsCisJfSwgeworCQkubmFtZQkJPSAiaWlzIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fSUlTLAorCX0sIHsKKwkJLm5hbWUJCT0gInNwaSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1NQSSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc1tdID0geworCXsKKwkJLm5hbWUJCT0gImxjZCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0xDREMsCisJfSwgeworCQkubmFtZQkJPSAiZ3BpbyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0dQSU8sCisJfSwgeworCQkubmFtZQkJPSAidXNiLWhvc3QiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VU0JILAorCX0sIHsKKwkJLm5hbWUJCT0gInVzYi1kZXZpY2UiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKKwkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VU0JELAorCX0sIHsKKwkJLm5hbWUJCT0gInRpbWVycyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAorCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1BXTVQsCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fVUFSVDAsCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fVUFSVDEsCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAyLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fVUFSVDIsCisJfSwgeworCQkubmFtZQkJPSAicnRjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCisJCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fUlRDLAorCX0sIHsKKwkJLm5hbWUJCT0gIndhdGNoZG9nIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmN0cmxiaXQJPSAwLAorCX0sIHsKKwkJLm5hbWUJCT0gInVzYi1idXMtaG9zdCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3VzYl9idXMsCisJfSwgeworCQkubmFtZQkJPSAidXNiLWJ1cy1nYWRnZXQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa191c2JfYnVzLAorCX0sCit9OworCisvKiBzM2MyNDEwX2Jhc2VjbGtfYWRkKCkKKyAqCisgKiBBZGQgYWxsIHRoZSBjbG9ja3MgdXNlZCBieSB0aGUgczNjMjQxMCBvciBjb21wYXRpYmxlIENQVXMKKyAqIHN1Y2ggYXMgdGhlIFMzQzI0NDAgYW5kIFMzQzI0NDIuCisgKgorICogV2UgY2Fubm90IHVzZSBhIHN5c3RlbSBkZXZpY2UgYXMgd2UgYXJlIG5lZWRlZCBiZWZvcmUgYW55CisgKiBvZiB0aGUgaW5pdC1jYWxscyB0aGF0IGluaXRpYWxpc2UgdGhlIGRldmljZXMgYXJlIGFjdHVhbGx5CisgKiBkb25lLgorKi8KKworaW50IF9faW5pdCBzM2MyNDEwX2Jhc2VjbGtfYWRkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjbGtzbG93ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtTTE9XKTsKKwl1bnNpZ25lZCBsb25nIGNsa2NvbiAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0NPTik7CisJc3RydWN0IGNsayAqY2xrcDsKKwlzdHJ1Y3QgY2xrICp4dGFsOworCWludCByZXQ7CisJaW50IHB0cjsKKworCWNsa191cGxsLmVuYWJsZSA9IHMzYzI0MTBfdXBsbF9lbmFibGU7CisKKwlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3VzYl9idXMpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXNiIGJ1cyBjbG9ja1xuIik7CisKKwkvKiByZWdpc3RlciBjbG9ja3MgZnJvbSBjbG9jayBhcnJheSAqLworCisJY2xrcCA9IGluaXRfY2xvY2tzOworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2Nsb2Nrcyk7IHB0cisrLCBjbGtwKyspIHsKKwkJLyogZW5zdXJlIHRoYXQgd2Ugbm90ZSB0aGUgY2xvY2sgc3RhdGUgKi8KKworCQljbGtwLT51c2FnZSA9IGNsa2NvbiAmIGNsa3AtPmN0cmxiaXQgPyAxIDogMDsKKworCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOworCQl9CiAJfQogCi0JX19yYXdfd3JpdGVsKGRjbGtjb24sIFMzQzI0WFhfRENMS0NPTik7CisJLyogV2UgbXVzdCBiZSBjYXJlZnVsIGRpc2FibGluZyB0aGUgY2xvY2tzIHdlIGFyZSBub3QgaW50ZW5kaW5nIHRvCisJICogYmUgdXNpbmcgYXQgYm9vdCB0aW1lLCBhcyBzdWJzeXRlbXMgc3VjaCBhcyB0aGUgTENEIHdoaWNoIGRvCisJICogdGhlaXIgb3duIERNQSByZXF1ZXN0cyB0byB0aGUgYnVzIGNhbiBjYXVzZSB0aGUgc3lzdGVtIHRvIGxvY2t1cAorCSAqIGlmIHRoZXkgd2hlcmUgaW4gdGhlIG1pZGRsZSBvZiByZXF1ZXN0aW5nIGJ1cyBhY2Nlc3MuCisJICoKKwkgKiBEaXNhYmxpbmcgdGhlIExDRCBjbG9jayBpZiB0aGUgTENEIGlzIGFjdGl2ZSBpcyB2ZXJ5IGRhbmdlcm91cywKKwkgKiBhbmQgdGhlcmVmb3JlIHRoZSBib290bG9hZGVyIHNob3VsZCBiZSBjYXJlZnVsIHRvIG5vdCBlbmFibGUKKwkgKiB0aGUgTENEIGNsb2NrIGlmIGl0IGlzIG5vdCBuZWVkZWQuCisJKi8KIAotCXJldHVybiAwOwotfQorCS8qIGluc3RhbGwgKGFuZCBkaXNhYmxlKSB0aGUgY2xvY2tzIHdlIGRvIG5vdCBuZWVkIGltbWVkaWF0ZWx5ICovCiAKKwljbGtwID0gaW5pdF9jbG9ja3NfZGlzYWJsZTsKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoaW5pdF9jbG9ja3NfZGlzYWJsZSk7IHB0cisrLCBjbGtwKyspIHsKIAotc3RhdGljIGludCBzM2MyNHh4X2Nsa291dF9zZXRwYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrOwotCXVuc2lnbmVkIGxvbmcgc291cmNlOworCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOworCQl9CiAKLQkvKiBjYWxjdWxhdGUgdGhlIE1JU0NDUiBzZXR0aW5nIGZvciB0aGUgY2xvY2sgKi8KLQotCWlmIChwYXJlbnQgPT0gJmNsa194dGFsKQotCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX01QTEw7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfdXBsbCkKLQkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9VUExMOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2YpCi0JCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfRkNMSzsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19oKQotCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX0hDTEs7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfcCkKLQkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9QQ0xLOwotCWVsc2UgaWYgKGNsayA9PSAmczNjMjR4eF9jbGtvdXQwICYmIHBhcmVudCA9PSAmczNjMjR4eF9kY2xrMCkKLQkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9EQ0xLMDsKLQllbHNlIGlmIChjbGsgPT0gJnMzYzI0eHhfY2xrb3V0MSAmJiBwYXJlbnQgPT0gJnMzYzI0eHhfZGNsazEpCi0JCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfRENMSzA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCi0JaWYgKGNsayA9PSAmczNjMjR4eF9kY2xrMCkKLQkJbWFzayA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfTUFTSzsKLQllbHNlIHsKLQkJc291cmNlIDw8PSA0OwotCQltYXNrID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMV9NQVNLOworCQlzM2MyNDEwX2Nsa2Nvbl9lbmFibGUoY2xrcCwgMCk7CiAJfQogCi0JczNjMjQxMF9tb2RpZnlfbWlzY2NyKG1hc2ssIHNvdXJjZSk7Ci0JcmV0dXJuIDA7Ci19CisJLyogc2hvdyB0aGUgY2xvY2stc2xvdyB2YWx1ZSAqLwogCi0vKiBleHRlcm5hbCBjbG9jayBkZWZpbml0aW9ucyAqLworCXh0YWwgPSBjbGtfZ2V0KE5VTEwsICJ4dGFsIik7CiAKLXN0cnVjdCBjbGsgczNjMjR4eF9kY2xrMCA9IHsKLQkubmFtZQkJPSAiZGNsazAiLAotCS5pZAkJPSAtMSwKLQkuY3RybGJpdAk9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMEVOLAotCS5lbmFibGUJICAgICAgICA9IHMzYzI0eHhfZGNsa19lbmFibGUsCi0JLnNldF9wYXJlbnQJPSBzM2MyNHh4X2RjbGtfc2V0cGFyZW50LAotfTsKLQotc3RydWN0IGNsayBzM2MyNHh4X2RjbGsxID0gewotCS5uYW1lCQk9ICJkY2xrMSIsCi0JLmlkCQk9IC0xLAotCS5jdHJsYml0CT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4sCi0JLmVuYWJsZQkJPSBzM2MyNHh4X2RjbGtfZW5hYmxlLAotCS5zZXRfcGFyZW50CT0gczNjMjR4eF9kY2xrX3NldHBhcmVudCwKLX07Ci0KLXN0cnVjdCBjbGsgczNjMjR4eF9jbGtvdXQwID0gewotCS5uYW1lCQk9ICJjbGtvdXQwIiwKLQkuaWQJCT0gLTEsCi0JLnNldF9wYXJlbnQJPSBzM2MyNHh4X2Nsa291dF9zZXRwYXJlbnQsCi19OwotCi1zdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrb3V0MSA9IHsKLQkubmFtZQkJPSAiY2xrb3V0MSIsCi0JLmlkCQk9IC0xLAotCS5zZXRfcGFyZW50CT0gczNjMjR4eF9jbGtvdXRfc2V0cGFyZW50LAotfTsKLQotc3RydWN0IGNsayBzM2MyNHh4X3VjbGsgPSB7Ci0JLm5hbWUJCT0gInVjbGsiLAotCS5pZAkJPSAtMSwKLX07Ci0KLS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrIHN5c3RlbSAqLwotCi1pbnQgczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JY2xrLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JaWYgKGNsay0+ZW5hYmxlID09IE5VTEwpCi0JCWNsay0+ZW5hYmxlID0gY2xrX251bGxfZW5hYmxlOwotCi0JLyogYWRkIHRvIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjbG9ja3MgKi8KLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JbGlzdF9hZGQoJmNsay0+bGlzdCwgJmNsb2Nrcyk7Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGluaXRhbGlzZSBhbGwgdGhlIGNsb2NrcyAqLwotCi1pbnQgX19pbml0IHMzYzI0eHhfc2V0dXBfY2xvY2tzKHVuc2lnbmVkIGxvbmcgeHRhbCwKLQkJCQl1bnNpZ25lZCBsb25nIGZjbGssCi0JCQkJdW5zaWduZWQgbG9uZyBoY2xrLAotCQkJCXVuc2lnbmVkIGxvbmcgcGNsaykKLXsKLQlwcmludGsoS0VSTl9JTkZPICJTM0MyNFhYIENsb2NrcywgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iKTsKLQotCS8qIGluaXRpYWxpc2UgdGhlIG1haW4gc3lzdGVtIGNsb2NrcyAqLwotCi0JY2xrX3h0YWwucmF0ZSA9IHh0YWw7Ci0JY2xrX3VwbGwucmF0ZSA9IHMzYzI0MTBfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX1VQTExDT04pLCB4dGFsKTsKLQotCWNsa19tcGxsLnJhdGUgPSBmY2xrOwotCWNsa19oLnJhdGUgPSBoY2xrOwotCWNsa19wLnJhdGUgPSBwY2xrOwotCWNsa19mLnJhdGUgPSBmY2xrOwotCi0JLyogYXNzdW1lIHVhcnQgY2xvY2tzIGFyZSBjb3JyZWN0bHkgc2V0dXAgKi8KLQotCS8qIHJlZ2lzdGVyIG91ciBjbG9ja3MgKi8KLQotCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfeHRhbCkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBtYXN0ZXIgeHRhbFxuIik7Ci0KLQlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX21wbGwpIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgbXBsbCBjbG9ja1xuIik7Ci0KLQlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3VwbGwpIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXBsbCBjbG9ja1xuIik7Ci0KLQlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX2YpIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1IGZjbGtcbiIpOwotCi0JaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19oKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdSBoY2xrXG4iKTsKLQotCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfcCkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBjcHUgcGNsa1xuIik7CisJcHJpbnRrKCJDTE9DSzogU2xvdyBtb2RlICglbGQuJWxkIE1IeiksICVzLCBNUExMICVzLCBVUExMICVzXG4iLAorCSAgICAgICBwcmludF9taHooY2xrX2dldF9yYXRlKHh0YWwpIC8KKwkJCSAoIDIgKiBTM0MyNDEwX0NMS1NMT1dfR0VUX1NMT1dWQUwoY2xrc2xvdykpKSwKKwkgICAgICAgKGNsa3Nsb3cgJiBTM0MyNDEwX0NMS1NMT1dfU0xPVykgPyAic2xvdyIgOiAiZmFzdCIsCisJICAgICAgIChjbGtzbG93ICYgUzNDMjQxMF9DTEtTTE9XX01QTExfT0ZGKSA/ICJvZmYiIDogIm9uIiwKKwkgICAgICAgKGNsa3Nsb3cgJiBTM0MyNDEwX0NMS1NMT1dfVUNMS19PRkYpID8gIm9mZiIgOiAib24iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCmluZGV4IGZhODYwZTcuLjY3ZDFhZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKQEAgLTEsOSArMSw5IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSwyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKLSAqIFMzQzI0MTAgRE1BIGNvcmUKKyAqIFMzQzI0MTAgRE1BIHNlbGVjdGlvbgogICoKICAqIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCiAgKgpAQCAtMTIsMTQzMCArMTIsMTcwIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICovCiAKLQotI2lmZGVmIENPTkZJR19TM0MyNDEwX0RNQV9ERUJVRwotI2RlZmluZSBERUJVRwotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RtYS5oPgogCi0jaW5jbHVkZSAiZG1hLmgiCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWFjOTcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbGNkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZGkuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc3BpLmg+CiAKLS8qIGlvIG1hcCBmb3IgZG1hICovCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpkbWFfYmFzZTsKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZG1hX2ttZW07Ci0KLXN0cnVjdCBzM2MyNHh4X2RtYV9zZWxlY3Rpb24gZG1hX3NlbDsKLQotLyogZG1hIGNoYW5uZWwgc3RhdGUgaW5mb3JtYXRpb24gKi8KLXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuIHMzYzI0MTBfY2hhbnNbUzNDMjQxMF9ETUFfQ0hBTk5FTFNdOwotCi0vKiBkZWJ1Z2dpbmcgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgQlVGX01BR0lDICgweGNhZmViYWJlKQotCi0jZGVmaW5lIGRtYXdhcm4oZm10Li4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQpCi0KLSNkZWZpbmUgZG1hX3JlZ2FkZHIoY2hhbiwgcmVnKSAoKGNoYW4pLT5yZWdzICsgKHJlZykpCi0KLSNpZiAxCi0jZGVmaW5lIGRtYV93cnJlZyhjaGFuLCByZWcsIHZhbCkgd3JpdGVsKCh2YWwpLCAoY2hhbiktPnJlZ3MgKyAocmVnKSkKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV93cnJlZyhzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwgaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JcHJfZGVidWcoIndyaXRpbmcgJTA4eCB0byByZWdpc3RlciAlMDh4XG4iLCh1bnNpZ25lZCBpbnQpdmFsLHJlZyk7Ci0Jd3JpdGVsKHZhbCwgZG1hX3JlZ2FkZHIoY2hhbiwgcmVnKSk7Ci19Ci0jZW5kaWYKLQotI2RlZmluZSBkbWFfcmRyZWcoY2hhbiwgcmVnKSByZWFkbCgoY2hhbiktPnJlZ3MgKyAocmVnKSkKLQotLyogY2FwdHVyZWQgcmVnaXN0ZXIgc3RhdGUgZm9yIGRlYnVnICovCi0KLXN0cnVjdCBzM2MyNDEwX2RtYV9yZWdzdGF0ZSB7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgIGRjc3JjOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICBkaXNyYzsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgZHN0YXQ7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgIGRjb247Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgIGRtc2t0cmlnOworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgX19pbml0ZGF0YSBzM2MyNDEwX2RtYV9tYXBwaW5nc1tdID0geworCVtETUFDSF9YRDBdID0geworCQkubmFtZQkJPSAieGRyZXEwIiwKKwkJLmNoYW5uZWxzWzBdCT0gUzNDMjQxMF9EQ09OX0NIMF9YRFJFUTAgfCBETUFfQ0hfVkFMSUQsCisJfSwKKwlbRE1BQ0hfWEQxXSA9IHsKKwkJLm5hbWUJCT0gInhkcmVxMSIsCisJCS5jaGFubmVsc1sxXQk9IFMzQzI0MTBfRENPTl9DSDFfWERSRVExIHwgRE1BX0NIX1ZBTElELAorCX0sCisJW0RNQUNIX1NESV0gPSB7CisJCS5uYW1lCQk9ICJzZGkiLAorCQkuY2hhbm5lbHNbMF0JPSBTM0MyNDEwX0RDT05fQ0gwX1NESSB8IERNQV9DSF9WQUxJRCwKKwkJLmNoYW5uZWxzWzJdCT0gUzNDMjQxMF9EQ09OX0NIMl9TREkgfCBETUFfQ0hfVkFMSUQsCisJCS5jaGFubmVsc1szXQk9IFMzQzI0MTBfRENPTl9DSDNfU0RJIHwgRE1BX0NIX1ZBTElELAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfSUlTICsgUzNDMjQxMF9JSVNGSUZPLAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9JSVMgKyBTM0MyNDEwX0lJU0ZJRk8sCisJfSwKKwlbRE1BQ0hfU1BJMF0gPSB7CisJCS5uYW1lCQk9ICJzcGkwIiwKKwkJLmNoYW5uZWxzWzFdCT0gUzNDMjQxMF9EQ09OX0NIMV9TUEkgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9TUEkgKyBTM0MyNDEwX1NQVERBVCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfU1BJICsgUzNDMjQxMF9TUFJEQVQsCisJfSwKKwlbRE1BQ0hfU1BJMV0gPSB7CisJCS5uYW1lCQk9ICJzcGkxIiwKKwkJLmNoYW5uZWxzWzNdCT0gUzNDMjQxMF9EQ09OX0NIM19TUEkgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9TUEkgKyAweDIwICsgUzNDMjQxMF9TUFREQVQsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1NQSSArIDB4MjAgKyBTM0MyNDEwX1NQUkRBVCwKKwl9LAorCVtETUFDSF9VQVJUMF0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MCIsCisJCS5jaGFubmVsc1swXQk9IFMzQzI0MTBfRENPTl9DSDBfVUFSVDAgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9VQVJUMCArIFMzQzI0MTBfVVRYSCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfVUFSVDAgKyBTM0MyNDEwX1VSWEgsCisJfSwKKwlbRE1BQ0hfVUFSVDFdID0geworCQkubmFtZQkJPSAidWFydDEiLAorCQkuY2hhbm5lbHNbMV0JPSBTM0MyNDEwX0RDT05fQ0gxX1VBUlQxIHwgRE1BX0NIX1ZBTElELAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfVUFSVDEgKyBTM0MyNDEwX1VUWEgsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1VBUlQxICsgUzNDMjQxMF9VUlhILAorCX0sCisgICAgICAJW0RNQUNIX1VBUlQyXSA9IHsKKwkJLm5hbWUJCT0gInVhcnQyIiwKKwkJLmNoYW5uZWxzWzNdCT0gUzNDMjQxMF9EQ09OX0NIM19VQVJUMiB8IERNQV9DSF9WQUxJRCwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQyICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMiArIFMzQzI0MTBfVVJYSCwKKwl9LAorCVtETUFDSF9USU1FUl0gPSB7CisJCS5uYW1lCQk9ICJ0aW1lciIsCisJCS5jaGFubmVsc1swXQk9IFMzQzI0MTBfRENPTl9DSDBfVElNRVIgfCBETUFfQ0hfVkFMSUQsCisJCS5jaGFubmVsc1syXQk9IFMzQzI0MTBfRENPTl9DSDJfVElNRVIgfCBETUFfQ0hfVkFMSUQsCisJCS5jaGFubmVsc1szXQk9IFMzQzI0MTBfRENPTl9DSDNfVElNRVIgfCBETUFfQ0hfVkFMSUQsCisJfSwKKwlbRE1BQ0hfSTJTX0lOXSA9IHsKKwkJLm5hbWUJCT0gImkycy1zZGkiLAorCQkuY2hhbm5lbHNbMV0JPSBTM0MyNDEwX0RDT05fQ0gxX0kyU1NESSB8IERNQV9DSF9WQUxJRCwKKwkJLmNoYW5uZWxzWzJdCT0gUzNDMjQxMF9EQ09OX0NIMl9JMlNTREkgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX0lJUyArIFMzQzI0MTBfSUlTRklGTywKKwl9LAorCVtETUFDSF9JMlNfT1VUXSA9IHsKKwkJLm5hbWUJCT0gImkycy1zZG8iLAorCQkuY2hhbm5lbHNbMl0JPSBTM0MyNDEwX0RDT05fQ0gyX0kyU1NETyB8IERNQV9DSF9WQUxJRCwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX0lJUyArIFMzQzI0MTBfSUlTRklGTywKKwl9LAorCVtETUFDSF9VU0JfRVAxXSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDEiLAorCQkuY2hhbm5lbHNbMF0JPSBTM0MyNDEwX0RDT05fQ0gwX1VTQkVQMSB8IERNQV9DSF9WQUxJRCwKKwl9LAorCVtETUFDSF9VU0JfRVAyXSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDIiLAorCQkuY2hhbm5lbHNbMV0JPSBTM0MyNDEwX0RDT05fQ0gxX1VTQkVQMiB8IERNQV9DSF9WQUxJRCwKKwl9LAorCVtETUFDSF9VU0JfRVAzXSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDMiLAorCQkuY2hhbm5lbHNbMl0JPSBTM0MyNDEwX0RDT05fQ0gyX1VTQkVQMyB8IERNQV9DSF9WQUxJRCwKKwl9LAorCVtETUFDSF9VU0JfRVA0XSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDQiLAorCQkuY2hhbm5lbHNbM10JPVMzQzI0MTBfRENPTl9DSDNfVVNCRVA0IHwgRE1BX0NIX1ZBTElELAorCX0sCiB9OwogCi0jaWZkZWYgQ09ORklHX1MzQzI0MTBfRE1BX0RFQlVHCi0KLS8qIGRtYWRiZ19zaG93cmVncwotICoKLSAqIHNpbXBsZSBkZWJ1ZyByb3V0aW5lIHRvIHByaW50IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkbWEgcmVnaXN0ZXJzCi0qLwotCi1zdGF0aWMgdm9pZAotZG1hZGJnX2NhcHR1cmUoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzM2MyNDEwX2RtYV9yZWdzdGF0ZSAqcmVncykKK3N0YXRpYyB2b2lkIHMzYzI0MTBfZG1hX3NlbGVjdChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwKKwkJCSAgICAgICBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICptYXApCiB7Ci0JcmVncy0+ZGNzcmMgICAgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENTUkMpOwotCXJlZ3MtPmRpc3JjICAgID0gZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RJU1JDKTsKLQlyZWdzLT5kc3RhdCAgICA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EU1RBVCk7Ci0JcmVncy0+ZGNvbiAgICAgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENPTik7Ci0JcmVncy0+ZG1za3RyaWcgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRE1BU0tUUklHKTsKKwljaGFuLT5kY29uID0gbWFwLT5jaGFubmVsc1tjaGFuLT5udW1iZXJdICYgfkRNQV9DSF9WQUxJRDsKIH0KIAotc3RhdGljIHZvaWQKLWRtYWRiZ19kdW1wcmVncyhjb25zdCBjaGFyICpmbmFtZSwgaW50IGxpbmUsIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAotCQkgc3RydWN0IHMzYzI0MTBfZG1hX3JlZ3N0YXRlICpyZWdzKQotewotCXByaW50ayhLRVJOX0RFQlVHICJkbWElZDogJXM6JWQ6IERDU1JDPSUwOGx4LCBESVNSQz0lMDhseCwgRFNUQVQ9JTA4bHggRE1UPSUwMmx4LCBEQ09OPSUwOGx4XG4iLAotCSAgICAgICBjaGFuLT5udW1iZXIsIGZuYW1lLCBsaW5lLAotCSAgICAgICByZWdzLT5kY3NyYywgcmVncy0+ZGlzcmMsIHJlZ3MtPmRzdGF0LCByZWdzLT5kbXNrdHJpZywKLQkgICAgICAgcmVncy0+ZGNvbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kbWFkYmdfc2hvd2NoYW4oY29uc3QgY2hhciAqZm5hbWUsIGludCBsaW5lLCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfcmVnc3RhdGUgc3RhdGU7Ci0KLQlkbWFkYmdfY2FwdHVyZShjaGFuLCAmc3RhdGUpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgImRtYSVkOiAlczolZDogbHM9JWQsIGN1cj0lcCwgJXAgJXBcbiIsCi0JICAgICAgIGNoYW4tPm51bWJlciwgZm5hbWUsIGxpbmUsIGNoYW4tPmxvYWRfc3RhdGUsCi0JICAgICAgIGNoYW4tPmN1cnIsIGNoYW4tPm5leHQsIGNoYW4tPmVuZCk7Ci0KLQlkbWFkYmdfZHVtcHJlZ3MoZm5hbWUsIGxpbmUsIGNoYW4sICZzdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kbWFkYmdfc2hvd3JlZ3MoY29uc3QgY2hhciAqZm5hbWUsIGludCBsaW5lLCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfcmVnc3RhdGUgc3RhdGU7Ci0KLQlkbWFkYmdfY2FwdHVyZShjaGFuLCAmc3RhdGUpOwotCWRtYWRiZ19kdW1wcmVncyhmbmFtZSwgbGluZSwgY2hhbiwgJnN0YXRlKTsKLX0KLQotI2RlZmluZSBkYmdfc2hvd3JlZ3MoY2hhbikgZG1hZGJnX3Nob3dyZWdzKF9fRlVOQ1RJT05fXywgX19MSU5FX18sIChjaGFuKSkKLSNkZWZpbmUgZGJnX3Nob3djaGFuKGNoYW4pIGRtYWRiZ19zaG93Y2hhbihfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAoY2hhbikpCi0jZWxzZQotI2RlZmluZSBkYmdfc2hvd3JlZ3MoY2hhbikgZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIGRiZ19zaG93Y2hhbihjaGFuKSBkbyB7IH0gd2hpbGUoMCkKLSNlbmRpZiAvKiBDT05GSUdfUzNDMjQxMF9ETUFfREVCVUcgKi8KLQotc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpkbWFfY2hhbl9tYXBbRE1BQ0hfTUFYXTsKLQotLyogbG9va3VwX2RtYV9jaGFubmVsCi0gKgotICogY2hhbmdlIHRoZSBkbWEgY2hhbm5lbCBudW1iZXIgZ2l2ZW4gaW50byBhIHJlYWwgZG1hIGNoYW5uZWwgaWQKLSovCi0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqbG9va3VwX2RtYV9jaGFubmVsKHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCWlmIChjaGFubmVsICYgRE1BQ0hfTE9XX0xFVkVMKQotCQlyZXR1cm4gJnMzYzI0MTBfY2hhbnNbY2hhbm5lbCAmIH5ETUFDSF9MT1dfTEVWRUxdOwotCWVsc2UKLQkJcmV0dXJuIGRtYV9jaGFuX21hcFtjaGFubmVsXTsKLX0KLQotLyogczNjMjQxMF9kbWFfc3RhdHNfdGltZW91dAotICoKLSAqIFVwZGF0ZSBETUEgc3RhdHMgZnJvbSB0aW1lb3V0IGluZm8KLSovCi0KLXN0YXRpYyB2b2lkCi1zM2MyNDEwX2RtYV9zdGF0c190aW1lb3V0KHN0cnVjdCBzM2MyNDEwX2RtYV9zdGF0cyAqc3RhdHMsIGludCB2YWwpCi17Ci0JaWYgKHN0YXRzID09IE5VTEwpCi0JCXJldHVybjsKLQotCWlmICh2YWwgPiBzdGF0cy0+dGltZW91dF9sb25nZXN0KQotCQlzdGF0cy0+dGltZW91dF9sb25nZXN0ID0gdmFsOwotCWlmICh2YWwgPCBzdGF0cy0+dGltZW91dF9zaG9ydGVzdCkKLQkJc3RhdHMtPnRpbWVvdXRfc2hvcnRlc3QgPSB2YWw7Ci0KLQlzdGF0cy0+dGltZW91dF9hdmcgKz0gdmFsOwotfQotCi0vKiBzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZAotICoKLSAqIHdhaXQgZm9yIHRoZSBETUEgZW5naW5lIHRvIGxvYWQgYSBidWZmZXIsIGFuZCB1cGRhdGUgdGhlIHN0YXRlIGFjY29yZGluZ2x5Ci0qLwotCi1zdGF0aWMgaW50Ci1zM2MyNDEwX2RtYV93YWl0Zm9ybG9hZChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwgaW50IGxpbmUpCi17Ci0JaW50IHRpbWVvdXQgPSBjaGFuLT5sb2FkX3RpbWVvdXQ7Ci0JaW50IHRvb2s7Ci0KLQlpZiAoY2hhbi0+bG9hZF9zdGF0ZSAhPSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRCkgewotCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZCgpIGNhbGxlZCBpbiBsb2Fkc3RhdGUgJWQgZnJvbSBsaW5lICVkXG4iLCBjaGFuLT5udW1iZXIsIGNoYW4tPmxvYWRfc3RhdGUsIGxpbmUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY2hhbi0+c3RhdHMgIT0gTlVMTCkKLQkJY2hhbi0+c3RhdHMtPmxvYWRzKys7Ci0KLQl3aGlsZSAoLS10aW1lb3V0ID4gMCkgewotCQlpZiAoKGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EU1RBVCkgPDwgKDMyLTIwKSkgIT0gMCkgewotCQkJdG9vayA9IGNoYW4tPmxvYWRfdGltZW91dCAtIHRpbWVvdXQ7Ci0KLQkJCXMzYzI0MTBfZG1hX3N0YXRzX3RpbWVvdXQoY2hhbi0+c3RhdHMsIHRvb2spOwotCi0JCQlzd2l0Y2ggKGNoYW4tPmxvYWRfc3RhdGUpIHsKLQkJCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQ6Ci0JCQkJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF8xUlVOTklORzsKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB1bmtub3duIGxvYWRfc3RhdGUgaW4gczNjMjQxMF9kbWFfd2FpdGZvcmxvYWQoKSAlZFxuIiwgY2hhbi0+bnVtYmVyLCBjaGFuLT5sb2FkX3N0YXRlKTsKLQkJCX0KLQotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQlpZiAoY2hhbi0+c3RhdHMgIT0gTlVMTCkgewotCQljaGFuLT5zdGF0cy0+dGltZW91dF9mYWlsZWQrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLS8qIHMzYzI0MTBfZG1hX2xvYWRidWZmZXIKLSAqCi0gKiBsb2FkIGEgYnVmZmVyLCBhbmQgdXBkYXRlIHRoZSBjaGFubmVsIHN0YXRlCi0qLwotCi1zdGF0aWMgaW5saW5lIGludAotczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwKLQkJICAgICAgIHN0cnVjdCBzM2MyNDEwX2RtYV9idWYgKmJ1ZikKLXsKLQl1bnNpZ25lZCBsb25nIHJlbG9hZDsKLQotCXByX2RlYnVnKCJzM2MyNDEwX2NoYW5fbG9hZGJ1ZmZlcjogbG9hZGluZyBidWZmICVwICgweCUwOGx4LDB4JTA2eClcbiIsCi0JCSBidWYsICh1bnNpZ25lZCBsb25nKWJ1Zi0+ZGF0YSwgYnVmLT5zaXplKTsKLQotCWlmIChidWYgPT0gTlVMTCkgewotCQlkbWF3YXJuKCJidWZmZXIgaXMgTlVMTFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGNoZWNrIHRoZSBzdGF0ZSBvZiB0aGUgY2hhbm5lbCBiZWZvcmUgd2UgZG8gYW55dGhpbmcgKi8KLQotCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEKSB7Ci0JCWRtYXdhcm4oImxvYWRfc3RhdGUgaXMgUzNDMjQxMF9ETUFMT0FEXzFMT0FERURcbiIpOwotCX0KLQotCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEXzFSVU5OSU5HKSB7Ci0JCWRtYXdhcm4oInN0YXRlIGlzIFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEXzFSVU5OSU5HXG4iKTsKLQl9Ci0KLQkvKiBpdCB3b3VsZCBzZWVtIHNlbnNpYmxlIGlmIHdlIGFyZSB0aGUgbGFzdCBidWZmZXIgdG8gbm90IGJvdGhlcgotCSAqIHdpdGggdGhlIGF1dG8tcmVsb2FkIGJpdCwgc28gdGhhdCB0aGUgRE1BIGVuZ2luZSB3aWxsIG5vdCB0cnkKLQkgKiBhbmQgbG9hZCBhbm90aGVyIHRyYW5zZmVyIGFmdGVyIHRoaXMgb25lIGhhcyBmaW5pc2hlZC4uLgotCSAqLwotCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF9OT05FKSB7Ci0JCXByX2RlYnVnKCJsb2FkX3N0YXRlIGlzIG5vbmUsIGNoZWNraW5nIGZvciBub3JlbG9hZCAobmV4dD0lcClcbiIsCi0JCQkgYnVmLT5uZXh0KTsKLQkJcmVsb2FkID0gKGJ1Zi0+bmV4dCA9PSBOVUxMKSA/IFMzQzI0MTBfRENPTl9OT1JFTE9BRCA6IDA7Ci0JfSBlbHNlIHsKLQkJLy9wcl9kZWJ1ZygibG9hZF9zdGF0ZSBpcyAlZCA9PiBhdXRvcmVsb2FkXG4iLCBjaGFuLT5sb2FkX3N0YXRlKTsKLQkJcmVsb2FkID0gUzNDMjQxMF9EQ09OX0FVVE9SRUxPQUQ7Ci0JfQotCi0JaWYgKChidWYtPmRhdGEgJiAweGYwMDAwMDAwKSAhPSAweDMwMDAwMDAwKSB7Ci0JCWRtYXdhcm4oImRtYWxvYWQ6IGJ1ZmZlciBpcyAlcFxuIiwgKHZvaWQgKilidWYtPmRhdGEpOwotCX0KLQotCXdyaXRlbChidWYtPmRhdGEsIGNoYW4tPmFkZHJfcmVnKTsKLQotCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OLAotCQkgIGNoYW4tPmRjb24gfCByZWxvYWQgfCAoYnVmLT5zaXplL2NoYW4tPnhmZXJfdW5pdCkpOwotCi0JY2hhbi0+bmV4dCA9IGJ1Zi0+bmV4dDsKLQotCS8qIHVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIGNoYW5uZWwgKi8KLQotCXN3aXRjaCAoY2hhbi0+bG9hZF9zdGF0ZSkgewotCWNhc2UgUzNDMjQxMF9ETUFMT0FEX05PTkU6Ci0JCWNoYW4tPmxvYWRfc3RhdGUgPSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRDsKLQkJYnJlYWs7Ci0KLQljYXNlIFMzQzI0MTBfRE1BTE9BRF8xUlVOTklORzoKLQkJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEXzFSVU5OSU5HOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRtYXdhcm4oImRtYWxvYWQ6IHVua25vd24gc3RhdGUgJWQgaW4gbG9hZGJ1ZmZlclxuIiwKLQkJCWNoYW4tPmxvYWRfc3RhdGUpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogczNjMjQxMF9kbWFfY2FsbF9vcAotICoKLSAqIHNtYWxsIHJvdXRpbmUgdG8gY2FsbCB0aGUgb3Agcm91dGluZSB3aXRoIHRoZSBnaXZlbiBvcCBpZiBpdCBoYXMgYmVlbgotICogcmVnaXN0ZXJlZAotKi8KLQotc3RhdGljIHZvaWQKLXMzYzI0MTBfZG1hX2NhbGxfb3Aoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sIGVudW0gczNjMjQxMF9jaGFuX29wIG9wKQotewotCWlmIChjaGFuLT5vcF9mbiAhPSBOVUxMKSB7Ci0JCShjaGFuLT5vcF9mbikoY2hhbiwgb3ApOwotCX0KLX0KLQotLyogczNjMjQxMF9kbWFfYnVmZmRvbmUKLSAqCi0gKiBzbWFsbCB3cmFwcGVyIHRvIGNoZWNrIGlmIGNhbGxiYWNrIHJvdXRpbmUgbmVlZHMgdG8gYmUgY2FsbGVkLCBhbmQKLSAqIGlmIHNvLCBjYWxsIGl0Ci0qLwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXMzYzI0MTBfZG1hX2J1ZmZkb25lKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmICpidWYsCi0JCSAgICAgZW51bSBzM2MyNDEwX2RtYV9idWZmcmVzdWx0IHJlc3VsdCkKLXsKLSNpZiAwCi0JcHJfZGVidWcoImNhbGxiYWNrX2ZuPSVwLCBidWY9JXAsIGlkPSVwLCBzaXplPSVkLCByZXN1bHQ9JWRcbiIsCi0JCSBjaGFuLT5jYWxsYmFja19mbiwgYnVmLCBidWYtPmlkLCBidWYtPnNpemUsIHJlc3VsdCk7Ci0jZW5kaWYKLQotCWlmIChjaGFuLT5jYWxsYmFja19mbiAhPSBOVUxMKSB7Ci0JCShjaGFuLT5jYWxsYmFja19mbikoY2hhbiwgYnVmLT5pZCwgYnVmLT5zaXplLCByZXN1bHQpOwotCX0KLX0KLQotLyogczNjMjQxMF9kbWFfc3RhcnQKLSAqCi0gKiBzdGFydCBhIGRtYSBjaGFubmVsIGdvaW5nCi0qLwotCi1zdGF0aWMgaW50IHMzYzI0MTBfZG1hX3N0YXJ0KHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQotewotCXVuc2lnbmVkIGxvbmcgdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlwcl9kZWJ1ZygiczNjMjQxMF9zdGFydF9kbWE6IGNoYW5uZWw9JWRcbiIsIGNoYW4tPm51bWJlcik7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlpZiAoY2hhbi0+c3RhdGUgPT0gUzNDMjQxMF9ETUFfUlVOTklORykgewotCQlwcl9kZWJ1ZygiczNjMjQxMF9zdGFydF9kbWE6IGFscmVhZHkgcnVubmluZyAoJWQpXG4iLCBjaGFuLT5zdGF0ZSk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2hhbi0+c3RhdGUgPSBTM0MyNDEwX0RNQV9SVU5OSU5HOwotCi0JLyogY2hlY2sgd2V0aGVyIHRoZXJlIGlzIGFueXRoaW5nIHRvIGxvYWQsIGFuZCBpZiBub3QsIHNlZQotCSAqIGlmIHdlIGNhbiBmaW5kIGFueXRoaW5nIHRvIGxvYWQKLQkgKi8KLQotCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF9OT05FKSB7Ci0JCWlmIChjaGFuLT5uZXh0ID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGNoYW5uZWwgaGFzIG5vdGhpbmcgbG9hZGVkXG4iLAotCQkJICAgICAgIGNoYW4tPm51bWJlcik7Ci0JCQljaGFuLT5zdGF0ZSA9IFMzQzI0MTBfRE1BX0lETEU7Ci0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXMzYzI0MTBfZG1hX2xvYWRidWZmZXIoY2hhbiwgY2hhbi0+bmV4dCk7Ci0JfQotCi0JZGJnX3Nob3djaGFuKGNoYW4pOwotCi0JLyogZW5hYmxlIHRoZSBjaGFubmVsICovCi0KLQlpZiAoIWNoYW4tPmlycV9lbmFibGVkKSB7Ci0JCWVuYWJsZV9pcnEoY2hhbi0+aXJxKTsKLQkJY2hhbi0+aXJxX2VuYWJsZWQgPSAxOwotCX0KLQotCS8qIHN0YXJ0IHRoZSBjaGFubmVsIGdvaW5nICovCi0KLQl0bXAgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRE1BU0tUUklHKTsKLQl0bXAgJj0gflMzQzI0MTBfRE1BU0tUUklHX1NUT1A7Ci0JdG1wIHw9IFMzQzI0MTBfRE1BU0tUUklHX09OOwotCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcsIHRtcCk7Ci0KLQlwcl9kZWJ1ZygiZG1hJWQ6ICUwOGx4IHRvIERNQVNLVFJJR1xuIiwgY2hhbi0+bnVtYmVyLCB0bXApOwotCi0jaWYgMAotCS8qIHRoZSBkbWEgYnVmZmVyIGxvYWRzIHNob3VsZCB0YWtlIGNhcmUgb2YgY2xlYXJpbmcgdGhlIEFVVE8KLQkgKiByZWxvYWRpbmcgZmVhdHVyZSAqLwotCXRtcCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OKTsKLQl0bXAgJj0gflMzQzI0MTBfRENPTl9OT1JFTE9BRDsKLQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENPTiwgdG1wKTsKLSNlbmRpZgotCi0JczNjMjQxMF9kbWFfY2FsbF9vcChjaGFuLCBTM0MyNDEwX0RNQU9QX1NUQVJUKTsKLQotCWRiZ19zaG93Y2hhbihjaGFuKTsKLQotCS8qIGlmIHdlJ3ZlIG9ubHkgbG9hZGVkIG9uZSBidWZmZXIgb250byB0aGUgY2hhbm5lbCwgdGhlbiBjaGVjCi0JICogdG8gc2VlIGlmIHdlIGhhdmUgYW5vdGhlciwgYW5kIGlmIHNvLCB0cnkgYW5kIGxvYWQgaXQgc28gd2hlbgotCSAqIHRoZSBmaXJzdCBidWZmZXIgaXMgZmluaXNoZWQsIHRoZSBuZXcgb25lIHdpbGwgYmUgbG9hZGVkIG9udG8KLQkgKiB0aGUgY2hhbm5lbCAqLwotCi0JaWYgKGNoYW4tPm5leHQgIT0gTlVMTCkgewotCQlpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRCkgewotCi0JCQlpZiAoczNjMjQxMF9kbWFfd2FpdGZvcmxvYWQoY2hhbiwgX19MSU5FX18pID09IDApIHsKLQkJCQlwcl9kZWJ1ZygiJXM6IGJ1ZmYgbm90IHlldCBsb2FkZWQsIG5vIG1vcmUgdG9kb1xuIiwKLQkJCQkJIF9fRlVOQ1RJT05fXyk7Ci0JCQl9IGVsc2UgewotCQkJCWNoYW4tPmxvYWRfc3RhdGUgPSBTM0MyNDEwX0RNQUxPQURfMVJVTk5JTkc7Ci0JCQkJczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcihjaGFuLCBjaGFuLT5uZXh0KTsKLQkJCX0KLQotCQl9IGVsc2UgaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HKSB7Ci0JCQlzM2MyNDEwX2RtYV9sb2FkYnVmZmVyKGNoYW4sIGNoYW4tPm5leHQpOwotCQl9Ci0JfQotCi0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogczNjMjQxMF9kbWFfY2FubG9hZAotICoKLSAqIHdvcmsgb3V0IGlmIHdlIGNhbiBxdWV1ZSBhbm90aGVyIGJ1ZmZlciBpbnRvIHRoZSBETUEgZW5naW5lCi0qLwotCi1zdGF0aWMgaW50Ci1zM2MyNDEwX2RtYV9jYW5sb2FkKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQotewotCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF9OT05FIHx8Ci0JICAgIGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi0vKiBzM2MyNDEwX2RtYV9lbnF1ZXVlCi0gKgotICogcXVldWUgYW4gZ2l2ZW4gYnVmZmVyIGZvciBkbWEgdHJhbnNmZXIuCi0gKgotICogaWQgICAgICAgICB0aGUgZGV2aWNlIGRyaXZlcidzIGlkIGluZm9ybWF0aW9uIGZvciB0aGlzIGJ1ZmZlcgotICogZGF0YSAgICAgICB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGRhdGEKLSAqIHNpemUgICAgICAgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRlcwotICoKLSAqIElmIHRoZSBjaGFubmVsIGlzIG5vdCBydW5uaW5nLCB0aGVuIHRoZSBmbGFnIFMzQzI0MTBfRE1BRl9BVVRPU1RBUlQKLSAqIGlzIGNoZWNrZWQsIGFuZCBpZiBzZXQsIHRoZSBjaGFubmVsIGlzIHN0YXJ0ZWQuIElmIHRoaXMgZmxhZyBpc24ndCBzZXQsCi0gKiB0aGVuIGFuIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCi0gKgotICogSXQgaXMgcG9zc2libGUgdG8gcXVldWUgbW9yZSB0aGFuIG9uZSBETUEgYnVmZmVyIG9udG8gYSBjaGFubmVsIGF0Ci0gKiBvbmNlLCBhbmQgdGhlIGNvZGUgd2lsbCBkZWFsIHdpdGggdGhlIHJlLWxvYWRpbmcgb2YgdGhlIG5leHQgYnVmZmVyCi0gKiB3aGVuIG5lY2Vzc2FyeS4KLSovCi0KLWludCBzM2MyNDEwX2RtYV9lbnF1ZXVlKHVuc2lnbmVkIGludCBjaGFubmVsLCB2b2lkICppZCwKLQkJCWRtYV9hZGRyX3QgZGF0YSwgaW50IHNpemUpCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2J1ZiAqYnVmOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCIlczogaWQ9JXAsIGRhdGE9JTA4eCwgc2l6ZT0lZFxuIiwKLQkJIF9fRlVOQ1RJT05fXywgaWQsICh1bnNpZ25lZCBpbnQpZGF0YSwgc2l6ZSk7Ci0KLQlidWYgPSBrbWVtX2NhY2hlX2FsbG9jKGRtYV9rbWVtLCBHRlBfQVRPTUlDKTsKLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJcHJfZGVidWcoIiVzOiBvdXQgb2YgbWVtb3J5ICglbGQgYWxsb2MpXG4iLAotCQkJIF9fRlVOQ1RJT05fXywgKGxvbmcpc2l6ZW9mKCpidWYpKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLy9wcl9kZWJ1ZygiJXM6IG5ldyBidWZmZXIgJXBcbiIsIF9fRlVOQ1RJT05fXywgYnVmKTsKLQkvL2RiZ19zaG93Y2hhbihjaGFuKTsKLQotCWJ1Zi0+bmV4dCAgPSBOVUxMOwotCWJ1Zi0+ZGF0YSAgPSBidWYtPnB0ciA9IGRhdGE7Ci0JYnVmLT5zaXplICA9IHNpemU7Ci0JYnVmLT5pZCAgICA9IGlkOwotCWJ1Zi0+bWFnaWMgPSBCVUZfTUFHSUM7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlpZiAoY2hhbi0+Y3VyciA9PSBOVUxMKSB7Ci0JCS8qIHdlJ3ZlIGdvdCBub3RoaW5nIGxvYWRlZC4uLiAqLwotCQlwcl9kZWJ1ZygiJXM6IGJ1ZmZlciAlcCBxdWV1ZWQgb250byBlbXB0eSBjaGFubmVsXG4iLAotCQkJIF9fRlVOQ1RJT05fXywgYnVmKTsKLQotCQljaGFuLT5jdXJyID0gYnVmOwotCQljaGFuLT5lbmQgID0gYnVmOwotCQljaGFuLT5uZXh0ID0gTlVMTDsKLQl9IGVsc2UgewotCQlwcl9kZWJ1ZygiZG1hJWQ6ICVzOiBidWZmZXIgJXAgcXVldWVkIG9udG8gbm9uLWVtcHR5IGNoYW5uZWxcbiIsCi0JCQkgY2hhbi0+bnVtYmVyLCBfX0ZVTkNUSU9OX18sIGJ1Zik7Ci0KLQkJaWYgKGNoYW4tPmVuZCA9PSBOVUxMKQotCQkJcHJfZGVidWcoImRtYSVkOiAlczogJXAgbm90IGVtcHR5LCBhbmQgY2hhbi0+ZW5kPT1OVUxMP1xuIiwKLQkJCQkgY2hhbi0+bnVtYmVyLCBfX0ZVTkNUSU9OX18sIGNoYW4pOwotCi0JCWNoYW4tPmVuZC0+bmV4dCA9IGJ1ZjsKLQkJY2hhbi0+ZW5kID0gYnVmOwotCX0KLQotCS8qIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBuZXh0IGJ1ZmZlciBmaWVsZCAqLwotCWlmIChjaGFuLT5uZXh0ID09IE5VTEwpCi0JCWNoYW4tPm5leHQgPSBidWY7Ci0KLQkvKiBjaGVjayB0byBzZWUgaWYgd2UgY2FuIGxvYWQgYSBidWZmZXIgKi8KLQlpZiAoY2hhbi0+c3RhdGUgPT0gUzNDMjQxMF9ETUFfUlVOTklORykgewotCQlpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRCAmJiAxKSB7Ci0JCQlpZiAoczNjMjQxMF9kbWFfd2FpdGZvcmxvYWQoY2hhbiwgX19MSU5FX18pID09IDApIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBsb2FkYnVmZmVyOiIKLQkJCQkgICAgICAgInRpbWVvdXQgbG9hZGluZyBidWZmZXJcbiIsCi0JCQkJICAgICAgIGNoYW4tPm51bWJlcik7Ci0JCQkJZGJnX3Nob3djaGFuKGNoYW4pOwotCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfQotCi0JCXdoaWxlIChzM2MyNDEwX2RtYV9jYW5sb2FkKGNoYW4pICYmIGNoYW4tPm5leHQgIT0gTlVMTCkgewotCQkJczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcihjaGFuLCBjaGFuLT5uZXh0KTsKLQkJfQotCX0gZWxzZSBpZiAoY2hhbi0+c3RhdGUgPT0gUzNDMjQxMF9ETUFfSURMRSkgewotCQlpZiAoY2hhbi0+ZmxhZ3MgJiBTM0MyNDEwX0RNQUZfQVVUT1NUQVJUKSB7Ci0JCQlzM2MyNDEwX2RtYV9jdHJsKGNoYW4tPm51bWJlciwgUzNDMjQxMF9ETUFPUF9TVEFSVCk7Ci0JCX0KLQl9Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfZW5xdWV1ZSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotczNjMjQxMF9kbWFfZnJlZWJ1ZihzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmICpidWYpCi17Ci0JaW50IG1hZ2ljb2sgPSAoYnVmLT5tYWdpYyA9PSBCVUZfTUFHSUMpOwotCi0JYnVmLT5tYWdpYyA9IC0xOwotCi0JaWYgKG1hZ2ljb2spIHsKLQkJa21lbV9jYWNoZV9mcmVlKGRtYV9rbWVtLCBidWYpOwotCX0gZWxzZSB7Ci0JCXByaW50aygiczNjMjQxMF9kbWFfZnJlZWJ1ZjogYnVmZiAlcCB3aXRoIGJhZCBtYWdpY1xuIiwgYnVmKTsKLQl9Ci19Ci0KLS8qIHMzYzI0MTBfZG1hX2xhc3R4ZmVyCi0gKgotICogY2FsbGVkIHdoZW4gdGhlIHN5c3RlbSBpcyBvdXQgb2YgYnVmZmVycywgdG8gZW5zdXJlIHRoYXQgdGhlIGNoYW5uZWwKLSAqIGlzIHByZXBhcmVkIGZvciBzaHV0ZG93bi4KLSovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotczNjMjQxMF9kbWFfbGFzdHhmZXIoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCi17Ci0jaWYgMAotCXByX2RlYnVnKCJkbWElZDogczNjMjQxMF9kbWFfbGFzdHhmZXI6IGxvYWRfc3RhdGUgJWRcbiIsCi0JCSBjaGFuLT5udW1iZXIsIGNoYW4tPmxvYWRfc3RhdGUpOwotI2VuZGlmCi0KLQlzd2l0Y2ggKGNoYW4tPmxvYWRfc3RhdGUpIHsKLQljYXNlIFMzQzI0MTBfRE1BTE9BRF9OT05FOgotCQlicmVhazsKLQotCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQ6Ci0JCWlmIChzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZChjaGFuLCBfX0xJTkVfXykgPT0gMCkgewotCQkJCS8qIGZsYWcgZXJyb3I/ICovCi0JCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGxvYWQgKCVzKVxuIiwKLQkJCSAgICAgICBjaGFuLT5udW1iZXIsIF9fRlVOQ1RJT05fXyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEXzFSVU5OSU5HOgotCQkvKiBJIGJlbGl2ZSBpbiB0aGlzIGNhc2Ugd2UgZG8gbm90IGhhdmUgYW55dGhpbmcgdG8gZG8KLQkJICogdW50aWwgdGhlIG5leHQgYnVmZmVyIGNvbWVzIGFsb25nLCBhbmQgd2UgdHVybiBvZmYgdGhlCi0JCSAqIHJlbG9hZCAqLwotCQlyZXR1cm47Ci0KLQlkZWZhdWx0OgotCQlwcl9kZWJ1ZygiZG1hJWQ6IGxhc3R4ZmVyOiB1bmhhbmRsZWQgbG9hZF9zdGF0ZSAlZCB3aXRoIG5vIG5leHRcbiIsCi0JCQkgY2hhbi0+bnVtYmVyLCBjaGFuLT5sb2FkX3N0YXRlKTsKLQkJcmV0dXJuOwotCi0JfQotCi0JLyogaG9wZWZ1bGx5IHRoaXMnbGwgc2h1dCB0aGUgZGFtbmVkIHRoaW5nIHVwIGFmdGVyIHRoZSB0cmFuc2Zlci4uLiAqLwotCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OLCBjaGFuLT5kY29uIHwgUzNDMjQxMF9EQ09OX05PUkVMT0FEKTsKLX0KLQotCi0jZGVmaW5lIGRtYWRiZzIoeC4uLikKLQotc3RhdGljIGlycXJldHVybl90Ci1zM2MyNDEwX2RtYV9pcnEoaW50IGlycSwgdm9pZCAqZGV2cHcpCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSAoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKilkZXZwdzsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmICAqYnVmOwotCi0JYnVmID0gY2hhbi0+Y3VycjsKLQotCWRiZ19zaG93Y2hhbihjaGFuKTsKLQotCS8qIG1vZGlmeSB0aGUgY2hhbm5lbCBzdGF0ZSAqLwotCi0Jc3dpdGNoIChjaGFuLT5sb2FkX3N0YXRlKSB7Ci0JY2FzZSBTM0MyNDEwX0RNQUxPQURfMVJVTk5JTkc6Ci0JCS8qIFRPRE8gLSBpZiB3ZSBhcmUgcnVubmluZyBvbmx5IG9uZSBidWZmZXIsIHdlIHByb2JhYmx5Ci0JCSAqIHdhbnQgdG8gcmVsb2FkIGhlcmUsIGFuZCB0aGVuIHdvcnJ5IGFib3V0IHRoZSBidWZmZXIKLQkJICogY2FsbGJhY2sgKi8KLQotCQljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEX05PTkU7Ci0JCWJyZWFrOwotCi0JY2FzZSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRDoKLQkJLyogaWlyYywgd2Ugc2hvdWxkIGdvIGJhY2sgdG8gTk9ORSBsb2FkZWQgaGVyZSwgd2UKLQkJICogaGFkIGEgYnVmZmVyLCBhbmQgaXQgd2FzIG5ldmVyIHZlcmlmaWVkIGFzIGJlaW5nCi0JCSAqIGxvYWRlZC4KLQkJICovCi0KLQkJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF9OT05FOwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFMT0FERURfMVJVTk5JTkc6Ci0JCS8qIHdlJ2xsIHdvcnJ5IGFib3V0IGNoZWNraW5nIHRvIHNlZSBpZiBhbm90aGVyIGJ1ZmZlciBpcwotCQkgKiByZWFkeSBhZnRlciB3ZSd2ZSBjYWxsZWQgYmFjayB0aGUgb3duZXIuIFRoaXMgc2hvdWxkCi0JCSAqIGVuc3VyZSB3ZSBkbyBub3Qgd2FpdCBhcm91bmQgdG9vIGxvbmcgZm9yIHRoZSBETUEKLQkJICogZW5naW5lIHRvIHN0YXJ0IHRoZSBuZXh0IHRyYW5zZmVyCi0JCSAqLwotCi0JCWNoYW4tPmxvYWRfc3RhdGUgPSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRDsKLQkJYnJlYWs7Ci0KLQljYXNlIFMzQzI0MTBfRE1BTE9BRF9OT05FOgotCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBJUlEgd2l0aCBubyBsb2FkZWQgYnVmZmVyP1xuIiwKLQkJICAgICAgIGNoYW4tPm51bWJlcik7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogSVJRIGluIGludmFsaWQgbG9hZF9zdGF0ZSAlZFxuIiwKLQkJICAgICAgIGNoYW4tPm51bWJlciwgY2hhbi0+bG9hZF9zdGF0ZSk7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChidWYgIT0gTlVMTCkgewotCQkvKiB1cGRhdGUgdGhlIGNoYWluIHRvIG1ha2Ugc3VyZSB0aGF0IGlmIHdlIGxvYWQgYW55IG1vcmUKLQkJICogYnVmZmVycyB3aGVuIHdlIGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGluZ3Mgc2hvdWxkCi0JCSAqIHdvcmsgcHJvcGVybHkgKi8KLQotCQljaGFuLT5jdXJyID0gYnVmLT5uZXh0OwotCQlidWYtPm5leHQgID0gTlVMTDsKLQotCQlpZiAoYnVmLT5tYWdpYyAhPSBCVUZfTUFHSUMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6ICVzOiBidWYgJXAgaW5jb3JyZWN0IG1hZ2ljXG4iLAotCQkJICAgICAgIGNoYW4tPm51bWJlciwgX19GVU5DVElPTl9fLCBidWYpOwotCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQl9Ci0KLQkJczNjMjQxMF9kbWFfYnVmZmRvbmUoY2hhbiwgYnVmLCBTM0MyNDEwX1JFU19PSyk7Ci0KLQkJLyogZnJlZSByZXNvdWNlcyAqLwotCQlzM2MyNDEwX2RtYV9mcmVlYnVmKGJ1Zik7Ci0JfSBlbHNlIHsKLQl9Ci0KLQkvKiBvbmx5IHJlbG9hZCBpZiB0aGUgY2hhbm5lbCBpcyBzdGlsbCBydW5uaW5nLi4uIG91ciBidWZmZXIgZG9uZQotCSAqIHJvdXRpbmUgbWF5IGhhdmUgYWx0ZXJlZCB0aGUgc3RhdGUgYnkgcmVxdWVzdGluZyB0aGUgZG1hIGNoYW5uZWwKLQkgKiB0byBzdG9wIG9yIHNodXRkb3duLi4uICovCi0KLQkvKiB0b2RvOiBjaGVjayB0aGF0IHdoZW4gdGhlIGNoYW5uZWwgaXMgc2h1dC1kb3duIGZyb20gaW5zaWRlIHRoaXMKLQkgKiBmdW5jdGlvbiwgd2UgY29wZSB3aXRoIHVuc2V0dGluZyByZWxvYWQsIGV0YyAqLwotCi0JaWYgKGNoYW4tPm5leHQgIT0gTlVMTCAmJiBjaGFuLT5zdGF0ZSAhPSBTM0MyNDEwX0RNQV9JRExFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJc3dpdGNoIChjaGFuLT5sb2FkX3N0YXRlKSB7Ci0JCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HOgotCQkJLyogZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3IgdGhpcyBzdGF0ZSAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTM0MyNDEwX0RNQUxPQURfTk9ORToKLQkJCS8qIGNhbiBsb2FkIGJ1ZmZlciBpbW1lZGlhdGVseSAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRDoKLQkJCWlmIChzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZChjaGFuLCBfX0xJTkVfXykgPT0gMCkgewotCQkJCS8qIGZsYWcgZXJyb3I/ICovCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogdGltZW91dCB3YWl0aW5nIGZvciBsb2FkICglcylcbiIsCi0JCQkJICAgICAgIGNoYW4tPm51bWJlciwgX19GVU5DVElPTl9fKTsKLQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFMT0FERURfMVJVTk5JTkc6Ci0JCQlnb3RvIG5vX2xvYWQ7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHVua25vd24gbG9hZF9zdGF0ZSBpbiBpcnEsICVkXG4iLAotCQkJICAgICAgIGNoYW4tPm51bWJlciwgY2hhbi0+bG9hZF9zdGF0ZSk7Ci0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCX0KLQotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCXMzYzI0MTBfZG1hX2xvYWRidWZmZXIoY2hhbiwgY2hhbi0+bmV4dCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9IGVsc2UgewotCQlzM2MyNDEwX2RtYV9sYXN0eGZlcihjaGFuKTsKLQotCQkvKiBzZWUgaWYgd2UgY2FuIHN0b3AgdGhpcyBjaGFubmVsLi4gKi8KLQkJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEX05PTkUpIHsKLQkJCXByX2RlYnVnKCJkbWElZDogZW5kIG9mIHRyYW5zZmVyLCBzdG9wcGluZyBjaGFubmVsICglbGQpXG4iLAotCQkJCSBjaGFuLT5udW1iZXIsIGppZmZpZXMpOwotCQkJczNjMjQxMF9kbWFfY3RybChjaGFuLT5udW1iZXIgfCBETUFDSF9MT1dfTEVWRUwsCi0JCQkJCSBTM0MyNDEwX0RNQU9QX1NUT1ApOwotCQl9Ci0JfQotCi0gbm9fbG9hZDoKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqczNjMjQxMF9kbWFfbWFwX2NoYW5uZWwoaW50IGNoYW5uZWwpOwotCi0vKiBzM2MyNDEwX3JlcXVlc3RfZG1hCi0gKgotICogZ2V0IGNvbnRyb2wgb2YgYW4gZG1hIGNoYW5uZWwKLSovCi0KLWludCBzM2MyNDEwX2RtYV9yZXF1ZXN0KHVuc2lnbmVkIGludCBjaGFubmVsLAotCQkJc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCAqY2xpZW50LAotCQkJdm9pZCAqZGV2KQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQotCXByX2RlYnVnKCJkbWElZDogczNjMjQxMF9yZXF1ZXN0X2RtYTogY2xpZW50PSVzLCBkZXY9JXBcbiIsCi0JCSBjaGFubmVsLCBjbGllbnQtPm5hbWUsIGRldik7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQljaGFuID0gczNjMjQxMF9kbWFfbWFwX2NoYW5uZWwoY2hhbm5lbCk7Ci0JaWYgKGNoYW4gPT0gTlVMTCkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JZGJnX3Nob3djaGFuKGNoYW4pOwotCi0JY2hhbi0+Y2xpZW50ID0gY2xpZW50OwotCWNoYW4tPmluX3VzZSA9IDE7Ci0KLQlpZiAoIWNoYW4tPmlycV9jbGFpbWVkKSB7Ci0JCXByX2RlYnVnKCJkbWElZDogJXMgOiByZXF1ZXN0aW5nIGlycSAlZFxuIiwKLQkJCSBjaGFubmVsLCBfX0ZVTkNUSU9OX18sIGNoYW4tPmlycSk7Ci0KLQkJY2hhbi0+aXJxX2NsYWltZWQgPSAxOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkJZXJyID0gcmVxdWVzdF9pcnEoY2hhbi0+aXJxLCBzM2MyNDEwX2RtYV9pcnEsIElSUUZfRElTQUJMRUQsCi0JCQkJICBjbGllbnQtPm5hbWUsICh2b2lkICopY2hhbik7Ci0KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JCWlmIChlcnIpIHsKLQkJCWNoYW4tPmluX3VzZSA9IDA7Ci0JCQljaGFuLT5pcnFfY2xhaW1lZCA9IDA7Ci0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBnZXQgSVJRICVkIGZvciBETUEgJWRcbiIsCi0JCQkgICAgICAgY2xpZW50LT5uYW1lLCBjaGFuLT5pcnEsIGNoYW4tPm51bWJlcik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJY2hhbi0+aXJxX2VuYWJsZWQgPSAxOwotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCS8qIG5lZWQgdG8gc2V0dXAgKi8KLQotCXByX2RlYnVnKCIlczogY2hhbm5lbCBpbml0aWFsaXNlZCwgJXBcbiIsIF9fRlVOQ1RJT05fXywgY2hhbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9yZXF1ZXN0KTsKLQotLyogczNjMjQxMF9kbWFfZnJlZQotICoKLSAqIHJlbGVhc2UgdGhlIGdpdmVuIGNoYW5uZWwgYmFjayB0byB0aGUgc3lzdGVtLCB3aWxsIHN0b3AgYW5kIGZsdXNoCi0gKiBhbnkgb3V0c3RhbmRpbmcgdHJhbnNmZXJzLCBhbmQgZW5zdXJlIHRoZSBjaGFubmVsIGlzIHJlYWR5IGZvciB0aGUKLSAqIG5leHQgY2xhaW1hbnQuCi0gKgotICogTm90ZSwgYWx0aG91Z2ggYSB3YXJuaW5nIGlzIGN1cnJlbnRseSBwcmludGVkIGlmIHRoZSBmcmVlaW5nIGNsaWVudAotICogaW5mbyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHJlZ2lzdHJhbnQncyBjbGllbnQgaW5mbywgdGhlIGZyZWUgaXMgc3RpbGwKLSAqIGFsbG93ZWQgdG8gZ28gdGhyb3VnaC4KLSovCi0KLWludCBzM2MyNDEwX2RtYV9mcmVlKGRtYWNoX3QgY2hhbm5lbCwgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWlmIChjaGFuLT5jbGllbnQgIT0gY2xpZW50KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImRtYSVkOiBwb3NzaWJsZSBmcmVlIGZyb20gZGlmZmVyZW50IGNsaWVudCAoY2hhbm5lbCAlcCwgcGFzc2VkICVwKVxuIiwKLQkJICAgICAgIGNoYW5uZWwsIGNoYW4tPmNsaWVudCwgY2xpZW50KTsKLQl9Ci0KLQkvKiBzb3J0IG91dCBzdG9wcGluZyBhbmQgZnJlZWluZyB0aGUgY2hhbm5lbCAqLwotCi0JaWYgKGNoYW4tPnN0YXRlICE9IFMzQzI0MTBfRE1BX0lETEUpIHsKLQkJcHJfZGVidWcoIiVzOiBuZWVkIHRvIHN0b3AgZG1hIGNoYW5uZWwgJXBcbiIsCi0JCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoYW4pOwotCi0JCS8qIHBvc3NpYmx5IGZsdXNoIHRoZSBjaGFubmVsICovCi0JCXMzYzI0MTBfZG1hX2N0cmwoY2hhbm5lbCwgUzNDMjQxMF9ETUFPUF9TVE9QKTsKLQl9Ci0KLQljaGFuLT5jbGllbnQgPSBOVUxMOwotCWNoYW4tPmluX3VzZSA9IDA7Ci0KLQlpZiAoY2hhbi0+aXJxX2NsYWltZWQpCi0JCWZyZWVfaXJxKGNoYW4tPmlycSwgKHZvaWQgKiljaGFuKTsKLQotCWNoYW4tPmlycV9jbGFpbWVkID0gMDsKLQotCWlmICghKGNoYW5uZWwgJiBETUFDSF9MT1dfTEVWRUwpKQotCQlkbWFfY2hhbl9tYXBbY2hhbm5lbF0gPSBOVUxMOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfZnJlZSk7Ci0KLXN0YXRpYyBpbnQgczNjMjQxMF9kbWFfZG9zdG9wKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlwcl9kZWJ1ZygiJXM6XG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JZGJnX3Nob3djaGFuKGNoYW4pOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JczNjMjQxMF9kbWFfY2FsbF9vcChjaGFuLCAgUzNDMjQxMF9ETUFPUF9TVE9QKTsKLQotCXRtcCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcpOwotCXRtcCB8PSBTM0MyNDEwX0RNQVNLVFJJR19TVE9QOwotCS8vdG1wICY9IH5TM0MyNDEwX0RNQVNLVFJJR19PTjsKLQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRE1BU0tUUklHLCB0bXApOwotCi0jaWYgMAotCS8qIHNob3VsZCBhbHNvIGNsZWFyIGludGVycnVwdHMsIGFjY29yZGluZyB0byBXaW5DRSBCU1AgKi8KLQl0bXAgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENPTik7Ci0JdG1wIHw9IFMzQzI0MTBfRENPTl9OT1JFTE9BRDsKLQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENPTiwgdG1wKTsKLSNlbmRpZgotCi0JLyogc2hvdWxkIHN0b3AgZG8gdGhpcywgb3Igc2hvdWxkIHdlIHdhaXQgZm9yIGZsdXNoPyAqLwotCWNoYW4tPnN0YXRlICAgICAgPSBTM0MyNDEwX0RNQV9JRExFOwotCWNoYW4tPmxvYWRfc3RhdGUgPSBTM0MyNDEwX0RNQUxPQURfTk9ORTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIHMzYzI0MTBfZG1hX3dhaXRmb3JzdG9wKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQotewotCXVuc2lnbmVkIGxvbmcgdG1wOwotCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gMHgxMDAwMDsKLQotCXdoaWxlICh0aW1lb3V0LS0gPiAwKSB7Ci0JCXRtcCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcpOwotCi0JCWlmICghKHRtcCAmIFMzQzI0MTBfRE1BU0tUUklHX09OKSkKLQkJCXJldHVybjsKLQl9Ci0KLQlwcl9kZWJ1ZygiZG1hJWQ6IGZhaWxlZCB0byBzdG9wP1xuIiwgY2hhbi0+bnVtYmVyKTsKLX0KLQotCi0vKiBzM2MyNDEwX2RtYV9mbHVzaAotICoKLSAqIHN0b3AgdGhlIGNoYW5uZWwsIGFuZCByZW1vdmUgYWxsIGN1cnJlbnQgYW5kIHBlbmRpbmcgdHJhbnNmZXJzCi0qLwotCi1zdGF0aWMgaW50IHMzYzI0MTBfZG1hX2ZsdXNoKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9idWYgKmJ1ZiwgKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXByX2RlYnVnKCIlczogY2hhbiAlcCAoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIGNoYW4sIGNoYW4tPm51bWJlcik7Ci0KLQlkYmdfc2hvd2NoYW4oY2hhbik7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlpZiAoY2hhbi0+c3RhdGUgIT0gUzNDMjQxMF9ETUFfSURMRSkgewotCQlwcl9kZWJ1ZygiJXM6IHN0b3BwaW5nIGNoYW5uZWwuLi5cbiIsIF9fRlVOQ1RJT05fXyApOwotCQlzM2MyNDEwX2RtYV9jdHJsKGNoYW4tPm51bWJlciwgUzNDMjQxMF9ETUFPUF9TVE9QKTsKLQl9Ci0KLQlidWYgPSBjaGFuLT5jdXJyOwotCWlmIChidWYgPT0gTlVMTCkKLQkJYnVmID0gY2hhbi0+bmV4dDsKLQotCWNoYW4tPmN1cnIgPSBjaGFuLT5uZXh0ID0gY2hhbi0+ZW5kID0gTlVMTDsKLQotCWlmIChidWYgIT0gTlVMTCkgewotCQlmb3IgKCA7IGJ1ZiAhPSBOVUxMOyBidWYgPSBuZXh0KSB7Ci0JCQluZXh0ID0gYnVmLT5uZXh0OwotCi0JCQlwcl9kZWJ1ZygiJXM6IGZyZWUgYnVmZmVyICVwLCBuZXh0ICVwXG4iLAotCQkJICAgICAgIF9fRlVOQ1RJT05fXywgYnVmLCBidWYtPm5leHQpOwotCi0JCQlzM2MyNDEwX2RtYV9idWZmZG9uZShjaGFuLCBidWYsIFMzQzI0MTBfUkVTX0FCT1JUKTsKLQkJCXMzYzI0MTBfZG1hX2ZyZWVidWYoYnVmKTsKLQkJfQotCX0KLQotCWRiZ19zaG93cmVncyhjaGFuKTsKLQotCXMzYzI0MTBfZG1hX3dhaXRmb3JzdG9wKGNoYW4pOwotCi0jaWYgMAotCS8qIHNob3VsZCBhbHNvIGNsZWFyIGludGVycnVwdHMsIGFjY29yZGluZyB0byBXaW5DRSBCU1AgKi8KLQl7Ci0JCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JCXRtcCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OKTsKLQkJdG1wIHw9IFMzQzI0MTBfRENPTl9OT1JFTE9BRDsKLQkJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RDT04sIHRtcCk7Ci0JfQotI2VuZGlmCi0KLQlkYmdfc2hvd3JlZ3MoY2hhbik7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1zM2MyNDEwX2RtYV9zdGFydGVkKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlkYmdfc2hvd2NoYW4oY2hhbik7Ci0KLQkvKiBpZiB3ZSd2ZSBvbmx5IGxvYWRlZCBvbmUgYnVmZmVyIG9udG8gdGhlIGNoYW5uZWwsIHRoZW4gY2hlYwotCSAqIHRvIHNlZSBpZiB3ZSBoYXZlIGFub3RoZXIsIGFuZCBpZiBzbywgdHJ5IGFuZCBsb2FkIGl0IHNvIHdoZW4KLQkgKiB0aGUgZmlyc3QgYnVmZmVyIGlzIGZpbmlzaGVkLCB0aGUgbmV3IG9uZSB3aWxsIGJlIGxvYWRlZCBvbnRvCi0JICogdGhlIGNoYW5uZWwgKi8KLQotCWlmIChjaGFuLT5uZXh0ICE9IE5VTEwpIHsKLQkJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQpIHsKLQotCQkJaWYgKHMzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkKGNoYW4sIF9fTElORV9fKSA9PSAwKSB7Ci0JCQkJcHJfZGVidWcoIiVzOiBidWZmIG5vdCB5ZXQgbG9hZGVkLCBubyBtb3JlIHRvZG9cbiIsCi0JCQkJCSBfX0ZVTkNUSU9OX18pOwotCQkJfSBlbHNlIHsKLQkJCQljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HOwotCQkJCXMzYzI0MTBfZG1hX2xvYWRidWZmZXIoY2hhbiwgY2hhbi0+bmV4dCk7Ci0JCQl9Ci0KLQkJfSBlbHNlIGlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF8xUlVOTklORykgewotCQkJczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcihjaGFuLCBjaGFuLT5uZXh0KTsKLQkJfQotCX0KLQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci0KLX0KLQotaW50Ci1zM2MyNDEwX2RtYV9jdHJsKGRtYWNoX3QgY2hhbm5lbCwgZW51bSBzM2MyNDEwX2NoYW5fb3Agb3ApCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7Ci0KLQlpZiAoY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAob3ApIHsKLQljYXNlIFMzQzI0MTBfRE1BT1BfU1RBUlQ6Ci0JCXJldHVybiBzM2MyNDEwX2RtYV9zdGFydChjaGFuKTsKLQotCWNhc2UgUzNDMjQxMF9ETUFPUF9TVE9QOgotCQlyZXR1cm4gczNjMjQxMF9kbWFfZG9zdG9wKGNoYW4pOwotCi0JY2FzZSBTM0MyNDEwX0RNQU9QX1BBVVNFOgotCWNhc2UgUzNDMjQxMF9ETUFPUF9SRVNVTUU6Ci0JCXJldHVybiAtRU5PRU5UOwotCi0JY2FzZSBTM0MyNDEwX0RNQU9QX0ZMVVNIOgotCQlyZXR1cm4gczNjMjQxMF9kbWFfZmx1c2goY2hhbik7Ci0KLQljYXNlIFMzQzI0MTBfRE1BT1BfU1RBUlRFRDoKLQkJcmV0dXJuIHMzYzI0MTBfZG1hX3N0YXJ0ZWQoY2hhbik7Ci0KLQljYXNlIFMzQzI0MTBfRE1BT1BfVElNRU9VVDoKLQkJcmV0dXJuIDA7Ci0KLQl9Ci0KLQlyZXR1cm4gLUVOT0VOVDsgICAgICAvKiB1bmtub3duLCBkb24ndCBib3RoZXIgKi8KLX0KLQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9jdHJsKTsKLQotLyogRE1BIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggY2hhbm5lbAotICoKLSAqIERJU1JDQyAtPiBzb3VyY2Ugb2YgdGhlIERNQSAoQUhCLEFQQikKLSAqIERJU1JDICAtPiBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgRE1BCi0gKiBESURTVEMgLT4gZGVzdGluYXRpb24gb2YgdGhlIERNQSAoQUhCLEFQRCkKLSAqIERJRFNUICAtPiBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBETUEKLSovCi0KLS8qIHMzYzI0MTBfZG1hX2NvbmZpZwotICoKLSAqIHhmZXJzaXplOiAgICAgc2l6ZSBvZiB1bml0IGluIGJ5dGVzICgxLDIsNCkKLSAqIGRjb246ICAgICAgICAgYmFzZSB2YWx1ZSBvZiB0aGUgRENPTnggcmVnaXN0ZXIKLSovCi0KLWludCBzM2MyNDEwX2RtYV9jb25maWcoZG1hY2hfdCBjaGFubmVsLAotCQkgICAgICAgaW50IHhmZXJ1bml0LAotCQkgICAgICAgaW50IGRjb24pCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7Ci0KLQlwcl9kZWJ1ZygiJXM6IGNoYW49JWQsIHhmZXJfdW5pdD0lZCwgZGNvbj0lMDh4XG4iLAotCQkgX19GVU5DVElPTl9fLCBjaGFubmVsLCB4ZmVydW5pdCwgZGNvbik7Ci0KLQlpZiAoY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCIlczogSW5pdGlhbCBkY29uIGlzICUwOHhcbiIsIF9fRlVOQ1RJT05fXywgZGNvbik7Ci0KLQlkY29uIHw9IGNoYW4tPmRjb24gJiBkbWFfc2VsLmRjb25fbWFzazsKLQotCXByX2RlYnVnKCIlczogTmV3IGRjb24gaXMgJTA4eFxuIiwgX19GVU5DVElPTl9fLCBkY29uKTsKLQotCXN3aXRjaCAoeGZlcnVuaXQpIHsKLQljYXNlIDE6Ci0JCWRjb24gfD0gUzNDMjQxMF9EQ09OX0JZVEU7Ci0JCWJyZWFrOwotCi0JY2FzZSAyOgotCQlkY29uIHw9IFMzQzI0MTBfRENPTl9IQUxGV09SRDsKLQkJYnJlYWs7Ci0KLQljYXNlIDQ6Ci0JCWRjb24gfD0gUzNDMjQxMF9EQ09OX1dPUkQ7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJfZGVidWcoIiVzOiBiYWQgdHJhbnNmZXIgc2l6ZSAlZFxuIiwgX19GVU5DVElPTl9fLCB4ZmVydW5pdCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRjb24gfD0gUzNDMjQxMF9EQ09OX0hXVFJJRzsKLQlkY29uIHw9IFMzQzI0MTBfRENPTl9JTlRSRVE7Ci0KLQlwcl9kZWJ1ZygiJXM6IGRjb24gbm93ICUwOHhcbiIsIF9fRlVOQ1RJT05fXywgZGNvbik7Ci0KLQljaGFuLT5kY29uID0gZGNvbjsKLQljaGFuLT54ZmVyX3VuaXQgPSB4ZmVydW5pdDsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2NvbmZpZyk7Ci0KLWludCBzM2MyNDEwX2RtYV9zZXRmbGFncyhkbWFjaF90IGNoYW5uZWwsIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKLQotCWlmIChjaGFuID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJfZGVidWcoIiVzOiBjaGFuPSVwLCBmbGFncz0lMDh4XG4iLCBfX0ZVTkNUSU9OX18sIGNoYW4sIGZsYWdzKTsKLQotCWNoYW4tPmZsYWdzID0gZmxhZ3M7Ci0KLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9zZXRmbGFncyk7Ci0KLQotLyogZG8gd2UgbmVlZCB0byBwcm90ZWN0IHRoZSBzZXR0aW5ncyBvZiB0aGUgZmllbGRzIGZyb20KLSAqIGlycT8KLSovCi0KLWludCBzM2MyNDEwX2RtYV9zZXRfb3BmbihkbWFjaF90IGNoYW5uZWwsIHMzYzI0MTBfZG1hX29wZm5fdCBydG4pCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7Ci0KLQlpZiAoY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCIlczogY2hhbj0lcCwgb3AgcnRuPSVwXG4iLCBfX0ZVTkNUSU9OX18sIGNoYW4sIHJ0bik7Ci0KLQljaGFuLT5vcF9mbiA9IHJ0bjsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX3NldF9vcGZuKTsKLQotaW50IHMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihkbWFjaF90IGNoYW5uZWwsIHMzYzI0MTBfZG1hX2NiZm5fdCBydG4pCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7Ci0KLQlpZiAoY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCIlczogY2hhbj0lcCwgY2FsbGJhY2sgcnRuPSVwXG4iLCBfX0ZVTkNUSU9OX18sIGNoYW4sIHJ0bik7Ci0KLQljaGFuLT5jYWxsYmFja19mbiA9IHJ0bjsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbik7Ci0KLS8qIHMzYzI0MTBfZG1hX2RldmNvbmZpZwotICoKLSAqIGNvbmZpZ3VyZSB0aGUgZG1hIHNvdXJjZS9kZXN0aW5hdGlvbiBoYXJkd2FyZSB0eXBlIGFuZCBhZGRyZXNzCi0gKgotICogc291cmNlOiAgICBTM0MyNDEwX0RNQVNSQ19IVzogc291cmNlIGlzIGhhcmR3YXJlCi0gKiAgICAgICAgICAgIFMzQzI0MTBfRE1BU1JDX01FTTogc291cmNlIGlzIG1lbW9yeQotICoKLSAqIGh3Y2ZnOiAgICAgdGhlIHZhbHVlIGZvciB4eHhTVENuIHJlZ2lzdGVyLAotICogICAgICAgICAgICBiaXQgMDogMD1pbmNyZW1lbnQgcG9pbnRlciwgMT1sZWF2ZSBwb2ludGVyCi0gKiAgICAgICAgICAgIGJpdCAxOiAwPXNvdWNyZSBpcyBBSEIsIDE9c291Y3JlIGlzIEFQQgotICoKLSAqIGRldmFkZHI6ICAgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgc291cmNlCi0qLwotCi1pbnQgczNjMjQxMF9kbWFfZGV2Y29uZmlnKGludCBjaGFubmVsLAotCQkJICBlbnVtIHMzYzI0MTBfZG1hc3JjIHNvdXJjZSwKLQkJCSAgaW50IGh3Y2ZnLAotCQkJICB1bnNpZ25lZCBsb25nIGRldmFkZHIpCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7Ci0KLQlpZiAoY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCIlczogc291cmNlPSVkLCBod2NmZz0lMDh4LCBkZXZhZGRyPSUwOGx4XG4iLAotCQkgX19GVU5DVElPTl9fLCAoaW50KXNvdXJjZSwgaHdjZmcsIGRldmFkZHIpOwotCi0JY2hhbi0+c291cmNlID0gc291cmNlOwotCWNoYW4tPmRldl9hZGRyID0gZGV2YWRkcjsKLQotCXN3aXRjaCAoc291cmNlKSB7Ci0JY2FzZSBTM0MyNDEwX0RNQVNSQ19IVzoKLQkJLyogc291cmNlIGlzIGhhcmR3YXJlICovCi0JCXByX2RlYnVnKCIlczogaHcgc291cmNlLCBkZXZhZGRyPSUwOGx4LCBod2NmZz0lZFxuIiwKLQkJCSBfX0ZVTkNUSU9OX18sIGRldmFkZHIsIGh3Y2ZnKTsKLQkJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RJU1JDQywgaHdjZmcgJiAzKTsKLQkJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RJU1JDLCAgZGV2YWRkcik7Ci0JCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ESURTVEMsICgwPDwxKSB8ICgwPDwwKSk7Ci0KLQkJY2hhbi0+YWRkcl9yZWcgPSBkbWFfcmVnYWRkcihjaGFuLCBTM0MyNDEwX0RNQV9ESURTVCk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTM0MyNDEwX0RNQVNSQ19NRU06Ci0JCS8qIHNvdXJjZSBpcyBtZW1vcnkgKi8KLQkJcHJfZGVidWcoICIlczogbWVtIHNvdXJjZSwgZGV2YWRkcj0lMDhseCwgaHdjZmc9JWRcbiIsCi0JCQkgIF9fRlVOQ1RJT05fXywgZGV2YWRkciwgaHdjZmcpOwotCQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElTUkNDLCAoMDw8MSkgfCAoMDw8MCkpOwotCQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElEU1QsICBkZXZhZGRyKTsKLQkJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RJRFNUQywgaHdjZmcgJiAzKTsKLQotCQljaGFuLT5hZGRyX3JlZyA9IGRtYV9yZWdhZGRyKGNoYW4sIFMzQzI0MTBfRE1BX0RJU1JDKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHJpbnRrKEtFUk5fRVJSICJkbWElZDogaW52YWxpZCBzb3VyY2UgdHlwZSAoJWQpXG4iLCBjaGFubmVsLCBzb3VyY2UpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1FWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2RldmNvbmZpZyk7Ci0KLS8qIHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uCi0gKgotICogcmV0dXJucyB0aGUgY3VycmVudCB0cmFuc2ZlciBwb2ludHMgZm9yIHRoZSBkbWEgc291cmNlIGFuZCBkZXN0aW5hdGlvbgotKi8KLQotaW50IHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKGRtYWNoX3QgY2hhbm5lbCwgZG1hX2FkZHJfdCAqc3JjLCBkbWFfYWRkcl90ICpkc3QpCi17Ci0gCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOwotCi0JaWYgKGNoYW4gPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc3JjICE9IE5VTEwpCi0gCQkqc3JjID0gZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RDU1JDKTsKLQotIAlpZiAoZHN0ICE9IE5VTEwpCi0gCQkqZHN0ID0gZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RDRFNUKTsKLQotIAlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbik7Ci0KLQotLyogc3lzdGVtIGRldmljZSBjbGFzcyAqLwotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgczNjMjQxMF9kbWFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNwID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4sIGRldik7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAic3VzcGVuZGluZyBkbWEgY2hhbm5lbCAlZFxuIiwgY3AtPm51bWJlcik7Ci0KLQlpZiAoZG1hX3JkcmVnKGNwLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcpICYgUzNDMjQxMF9ETUFTS1RSSUdfT04pIHsKLQkJLyogdGhlIGRtYSBjaGFubmVsIGlzIHN0aWxsIHdvcmtpbmcsIHdoaWNoIGlzIHByb2JhYmx5Ci0JCSAqIGEgYmFkIHRoaW5nIHRvIGRvIG92ZXIgc3VzcGVuZC9yZXN1bWUuIFdlIHN0b3AgdGhlCi0JCSAqIGNoYW5uZWwgYW5kIGFzc3VtZSB0aGF0IHRoZSBjbGllbnQgaXMgZWl0aGVyIGdvaW5nIHRvCi0JCSAqIHJldHJ5IGFmdGVyIHJlc3VtZSwgb3IgdGhhdCBpdCBpcyBicm9rZW4uCi0JCSAqLwotCi0JCXByaW50ayhLRVJOX0lORk8gImRtYTogc3RvcHBpbmcgY2hhbm5lbCAlZCBkdWUgdG8gc3VzcGVuZFxuIiwKLQkJICAgICAgIGNwLT5udW1iZXIpOwotCi0JCXMzYzI0MTBfZG1hX2Rvc3RvcChjcCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQxMF9kbWFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbHNlCi0jZGVmaW5lIHMzYzI0MTBfZG1hX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2MyNDEwX2RtYV9yZXN1bWUgIE5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotc3RydWN0IHN5c2Rldl9jbGFzcyBkbWFfc3lzY2xhc3MgPSB7Ci0Jc2V0X2tzZXRfbmFtZSgiczNjMjR4eC1kbWEiKSwKLQkuc3VzcGVuZAk9IHMzYzI0MTBfZG1hX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNDEwX2RtYV9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX3NlbGVjdGlvbiBfX2luaXRkYXRhIHMzYzI0MTBfZG1hX3NlbCA9IHsKKwkuc2VsZWN0CQk9IHMzYzI0MTBfZG1hX3NlbGVjdCwKKwkuZGNvbl9tYXNrCT0gNyA8PCAyNCwKKwkubWFwCQk9IHMzYzI0MTBfZG1hX21hcHBpbmdzLAorCS5tYXBfc2l6ZQk9IEFSUkFZX1NJWkUoczNjMjQxMF9kbWFfbWFwcGluZ3MpLAogfTsKIAotLyoga21lbSBjYWNoZSBpbXBsZW1lbnRhdGlvbiAqLworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2RtYV9vcmRlciBfX2luaXRkYXRhIHMzYzI0MTBfZG1hX29yZGVyID0geworCS5jaGFubmVscwk9IHsKKwkJW0RNQUNIX1NESV0JPSB7CisJCQkubGlzdAk9IHsKKwkJCQlbMF0JPSAzIHwgRE1BX0NIX1ZBTElELAorCQkJCVsxXQk9IDIgfCBETUFfQ0hfVkFMSUQsCisJCQkJWzJdCT0gMCB8IERNQV9DSF9WQUxJRCwKKwkJCX0sCisJCX0sCisJCVtETUFDSF9JMlNfSU5dCT0geworCQkJLmxpc3QJPSB7CisJCQkJWzBdCT0gMSB8IERNQV9DSF9WQUxJRCwKKwkJCQlbMV0JPSAyIHwgRE1BX0NIX1ZBTElELAorCQkJfSwKKwkJfSwKKwl9LAorfTsKIAotc3RhdGljIHZvaWQgczNjMjQxMF9kbWFfY2FjaGVfY3Rvcih2b2lkICpwLCBzdHJ1Y3Qga21lbV9jYWNoZSAqYywgdW5zaWduZWQgbG9uZyBmKQorc3RhdGljIGludCBzM2MyNDEwX2RtYV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKLQltZW1zZXQocCwgMCwgc2l6ZW9mKHN0cnVjdCBzM2MyNDEwX2RtYV9idWYpKTsKKwlzM2MyNDEwX2RtYV9pbml0KCk7CisJczNjMjR4eF9kbWFfb3JkZXJfc2V0KCZzM2MyNDEwX2RtYV9vcmRlcik7CisJcmV0dXJuIHMzYzI0eHhfZG1hX2luaXRfbWFwKCZzM2MyNDEwX2RtYV9zZWwpOwogfQogCi0vKiBpbml0aWFsaXNhdGlvbiBjb2RlICovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTApCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9kbWFfZHJpdmVyID0geworCS5hZGQJPSBzM2MyNDEwX2RtYV9hZGQsCit9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX2luaXRfZG1hKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX2RtYV9kcnZpbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNwOwotCWludCBjaGFubmVsOwotCWludCByZXQ7Ci0KLQlwcmludGsoIlMzQzI0WFggRE1BIERyaXZlciwgKGMpIDIwMDMtMjAwNCwyMDA2IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7Ci0KLQlkbWFfYmFzZSA9IGlvcmVtYXAoUzNDMjRYWF9QQV9ETUEsIDB4MjAwKTsKLQlpZiAoZG1hX2Jhc2UgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImRtYSBmYWlsZWQgdG8gcmVtYXAgcmVnaXN0ZXIgYmxvY2tcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlwcmludGsoIlJlZ2lzdGVyaW5nIHN5c2NsYXNzXG4iKTsKLQotCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmZG1hX3N5c2NsYXNzKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJkbWEgc3lzY2xhc3MgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWRtYV9rbWVtID0ga21lbV9jYWNoZV9jcmVhdGUoImRtYV9kZXNjIiwgc2l6ZW9mKHN0cnVjdCBzM2MyNDEwX2RtYV9idWYpLCAwLAotCQkJCSAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLAotCQkJCSAgICAgczNjMjQxMF9kbWFfY2FjaGVfY3RvciwgTlVMTCk7Ci0KLQlpZiAoZG1hX2ttZW0gPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImRtYSBmYWlsZWQgdG8gbWFrZSBrbWVtIGNhY2hlXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnI7Ci0JfQotCi0JZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IFMzQzI0MTBfRE1BX0NIQU5ORUxTOyBjaGFubmVsKyspIHsKLQkJY3AgPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKLQotCQltZW1zZXQoY3AsIDAsIHNpemVvZihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbikpOwotCi0JCS8qIGRtYSBjaGFubmVsIGlycXMgYXJlIGluIG9yZGVyLi4gKi8KLQkJY3AtPm51bWJlciA9IGNoYW5uZWw7Ci0JCWNwLT5pcnEgICAgPSBjaGFubmVsICsgSVJRX0RNQTA7Ci0JCWNwLT5yZWdzICAgPSBkbWFfYmFzZSArIChjaGFubmVsKjB4NDApOwotCi0JCS8qIHBvaW50IGN1cnJlbnQgc3RhdHMgc29tZXdoZXJlICovCi0JCWNwLT5zdGF0cyAgPSAmY3AtPnN0YXRzX3N0b3JlOwotCQljcC0+c3RhdHNfc3RvcmUudGltZW91dF9zaG9ydGVzdCA9IExPTkdfTUFYOwotCi0JCS8qIGJhc2ljIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLwotCi0JCWNwLT5sb2FkX3RpbWVvdXQgPSAxPDwxODsKLQotCQkvKiByZWdpc3RlciBzeXN0ZW0gZGV2aWNlICovCi0KLQkJY3AtPmRldi5jbHMgPSAmZG1hX3N5c2NsYXNzOwotCQljcC0+ZGV2LmlkICA9IGNoYW5uZWw7Ci0JCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmY3AtPmRldik7Ci0KLQkJcHJpbnRrKCJETUEgY2hhbm5lbCAlZCBhdCAlcCwgaXJxICVkXG4iLAotCQkgICAgICAgY3AtPm51bWJlciwgY3AtPnJlZ3MsIGNwLT5pcnEpOwotCX0KLQotCXJldHVybiAwOwotCi0gZXJyOgotCWttZW1fY2FjaGVfZGVzdHJveShkbWFfa21lbSk7Ci0JaW91bm1hcChkbWFfYmFzZSk7Ci0JZG1hX2Jhc2UgPSBOVUxMOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBfc3lzY2xhc3MsICZzM2MyNDEwX2RtYV9kcml2ZXIpOwogfQogCi1jb3JlX2luaXRjYWxsKHMzYzI0MTBfaW5pdF9kbWEpOworYXJjaF9pbml0Y2FsbChzM2MyNDEwX2RtYV9kcnZpbml0KTsKKyNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX3ZhbGlkKHVuc2lnbmVkIGludCBjaGFubmVsKQorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQyKQorLyogUzNDMjQ0MiBETUEgY29udGFpbnMgdGhlIHNhbWUgc2VsZWN0aW9uIHRhYmxlIGFzIHRoZSBTM0MyNDEwICovCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9kbWFfZHJpdmVyID0geworCS5hZGQJPSBzM2MyNDEwX2RtYV9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQyX2RtYV9kcnZpbml0KHZvaWQpCiB7Ci0JcmV0dXJuIChjaGFubmVsICYgRE1BX0NIX1ZBTElEKTsKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNjbGFzcywgJnMzYzI0NDJfZG1hX2RyaXZlcik7CiB9CiAKLS8qIHMzYzI0MTBfZG1hX21hcF9jaGFubmVsKCkKLSAqCi0gKiB0dXJuIHRoZSB2aXJ0dWFsIGNoYW5uZWwgbnVtYmVyIGludG8gYSByZWFsLCBhbmQgdW4tdXNlZCBoYXJkd2FyZQotICogY2hhbm5lbC4KLSAqCi0gKiBjdXJyZW50bHkgdGhpcyBjb2RlIHVzZXMgZmlyc3QtZnJlZSBjaGFubmVsIGZyb20gdGhlIHNwZWNpZmllZCBoYXJ3YXJlCi0gKiBtYXAsIG5vdCB0YWtpbmcgaW50byBhY2NvdW50IGFueXRoaW5nIHRoYXQgdGhlIGJvYXJkIHNldHVwIGNvZGUgbWF5Ci0gKiBoYXZlIHRvIHNheSBhYm91dCB0aGUgbGlrZWx5IHBlcmlwaGVyYWwgc2V0IHRvIGJlIGluIHVzZS4KLSovCithcmNoX2luaXRjYWxsKHMzYzI0NDJfZG1hX2RydmluaXQpOworI2VuZGlmCiAKLXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpzM2MyNDEwX2RtYV9tYXBfY2hhbm5lbChpbnQgY2hhbm5lbCkKLXsKLQlzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICpjaF9tYXA7Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmRtYWNoOwotCWludCBjaDsKLQotCWlmIChkbWFfc2VsLm1hcCA9PSBOVUxMIHx8IGNoYW5uZWwgPiBkbWFfc2VsLm1hcF9zaXplKQotCQlyZXR1cm4gTlVMTDsKLQotCWNoX21hcCA9IGRtYV9zZWwubWFwICsgY2hhbm5lbDsKLQotCWZvciAoY2ggPSAwOyBjaCA8IFMzQzI0MTBfRE1BX0NIQU5ORUxTOyBjaCsrKSB7Ci0JCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9tYXAtPmNoYW5uZWxzW2NoXSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoczNjMjQxMF9jaGFuc1tjaF0uaW5fdXNlID09IDApIHsKLQkJCXByaW50aygibWFwcGVkIGNoYW5uZWwgJWQgdG8gJWRcbiIsIGNoYW5uZWwsIGNoKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGNoID49IFMzQzI0MTBfRE1BX0NIQU5ORUxTKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIHVwZGF0ZSBvdXIgY2hhbm5lbCBtYXBwaW5nICovCi0KLQlkbWFjaCA9ICZzM2MyNDEwX2NoYW5zW2NoXTsKLQlkbWFfY2hhbl9tYXBbY2hhbm5lbF0gPSBkbWFjaDsKLQotCS8qIHNlbGVjdCB0aGUgY2hhbm5lbCAqLwotCi0JKGRtYV9zZWwuc2VsZWN0KShkbWFjaCwgY2hfbWFwKTsKLQotCXJldHVybiBkbWFjaDsKLX0KLQotc3RhdGljIHZvaWQgczNjMjR4eF9kbWFfc2hvd19jaChzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICptYXAsIGludCBjaCkKLXsKLQkvKiBzaG93IHRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KLQotCXByaW50aygiJTJkOiAlMjBzLCBjaGFubmVscyAlYyVjJWMlY1xuIiwgY2gsIG1hcC0+bmFtZSwKLQkgICAgICAgKGlzX2NoYW5uZWxfdmFsaWQobWFwLT5jaGFubmVsc1swXSkgPyAnMCcgOiAnLScpLAotCSAgICAgICAoaXNfY2hhbm5lbF92YWxpZChtYXAtPmNoYW5uZWxzWzFdKSA/ICcxJyA6ICctJyksCi0JICAgICAgIChpc19jaGFubmVsX3ZhbGlkKG1hcC0+Y2hhbm5lbHNbMl0pID8gJzInIDogJy0nKSwKLQkgICAgICAgKGlzX2NoYW5uZWxfdmFsaWQobWFwLT5jaGFubmVsc1szXSkgPyAnMycgOiAnLScpKTsKLX0KLQotc3RhdGljIGludCBzM2MyNHh4X2RtYV9jaGVja19lbnRyeShzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICptYXAsIGludCBjaCkKLXsKLQlpZiAoMSkKLQkJczNjMjR4eF9kbWFfc2hvd19jaChtYXAsIGNoKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgX19pbml0IHMzYzI0eHhfZG1hX2luaXRfbWFwKHN0cnVjdCBzM2MyNHh4X2RtYV9zZWxlY3Rpb24gKnNlbCkKLXsKLQlzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICpubWFwOwotCXNpemVfdCBtYXBfc3ogPSBzaXplb2YoKm5tYXApICogc2VsLT5tYXBfc2l6ZTsKLQlpbnQgcHRyOwotCi0Jbm1hcCA9IGttYWxsb2MobWFwX3N6LCBHRlBfS0VSTkVMKTsKLQlpZiAobm1hcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShubWFwLCBzZWwtPm1hcCwgbWFwX3N6KTsKLQltZW1jcHkoJmRtYV9zZWwsIHNlbCwgc2l6ZW9mKCpzZWwpKTsKLQotCWRtYV9zZWwubWFwID0gbm1hcDsKLQotCWZvciAocHRyID0gMDsgcHRyIDwgc2VsLT5tYXBfc2l6ZTsgcHRyKyspCi0JCXMzYzI0eHhfZG1hX2NoZWNrX2VudHJ5KG5tYXArcHRyLCBwdHIpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYmZlMGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFNhbXN1bmcgUzNDMjRYWCBETUEgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBkbWFfc3lzY2xhc3M7Ci1leHRlcm4gc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gczNjMjQxMF9jaGFuc1tTM0MyNDEwX0RNQV9DSEFOTkVMU107Ci0KLSNkZWZpbmUgRE1BX0NIX1ZBTElECQkoMTw8MzEpCi0KLXN0cnVjdCBzM2MyNHh4X2RtYV9hZGRyIHsKLQl1bnNpZ25lZCBsb25nCQlmcm9tOwotCXVuc2lnbmVkIGxvbmcJCXRvOwotfTsKLQotLyogc3RydWN0IHMzYzI0eHhfZG1hX21hcAotICoKLSAqIHRoaXMgaG9sZHMgdGhlIG1hcHBpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjaGFubmVsIHNlbGVjdGVkCi0gKiB0byBiZSBjb25uZWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBkZXZpY2UKLSovCi0KLXN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgewotCWNvbnN0IGNoYXIJCSpuYW1lOwotCXN0cnVjdCBzM2MyNHh4X2RtYV9hZGRyICBod19hZGRyOwotCi0JdW5zaWduZWQgbG9uZwkJIGNoYW5uZWxzW1MzQzI0MTBfRE1BX0NIQU5ORUxTXTsKLX07Ci0KLXN0cnVjdCBzM2MyNHh4X2RtYV9zZWxlY3Rpb24gewotCXN0cnVjdCBzM2MyNHh4X2RtYV9tYXAJKm1hcDsKLQl1bnNpZ25lZCBsb25nCQkgbWFwX3NpemU7Ci0JdW5zaWduZWQgbG9uZwkJIGRjb25fbWFzazsKLQotCXZvaWQJKCpzZWxlY3QpKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAotCQkJICBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICptYXApOwotfTsKLQotZXh0ZXJuIGludCBzM2MyNHh4X2RtYV9pbml0X21hcChzdHJ1Y3QgczNjMjR4eF9kbWFfc2VsZWN0aW9uICpzZWwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKaW5kZXggZjZmYjIxNS4uMDFlNzk1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jCkBAIC0xLDkgKzEsOSBAQAogLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgotICogUzNDMjRYWCBHUElPIHN1cHBvcnQKKyAqIFMzQzI0MTAgR1BJTyBzdXBwb3J0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOCw4ICsxOCw3IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSovCi0KKyAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMzMsMTU2ICszMiw0MCBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAKLXZvaWQgczNjMjQxMF9ncGlvX2NmZ3Bpbih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCitpbnQgczNjMjQxMF9ncGlvX2lycWZpbHRlcih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgb24sCisJCQkgICB1bnNpZ25lZCBpbnQgY29uZmlnKQogewotCXZvaWQgX19pb21lbSAqYmFzZSA9IFMzQzI0WFhfR1BJT19CQVNFKHBpbik7Ci0JdW5zaWduZWQgbG9uZyBtYXNrOwotCXVuc2lnbmVkIGxvbmcgY29uOworCXZvaWQgX19pb21lbSAqcmVnID0gUzNDMjRYWF9FSU5GTFQwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAKLQlpZiAocGluIDwgUzNDMjQxMF9HUElPX0JBTktCKSB7Ci0JCW1hc2sgPSAxIDw8IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKTsKLQl9IGVsc2UgewotCQltYXNrID0gMyA8PCBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikqMjsKLQl9CisJaWYgKHBpbiA8IFMzQzI0MTBfR1BHOCB8fCBwaW4gPiBTM0MyNDEwX0dQRzE1KQorCQlyZXR1cm4gLTE7CiAKLQlzd2l0Y2ggKGZ1bmN0aW9uKSB7Ci0JY2FzZSBTM0MyNDEwX0dQSU9fTEVBVkU6Ci0JCW1hc2sgPSAwOwotCQlmdW5jdGlvbiA9IDA7Ci0JCWJyZWFrOworCWNvbmZpZyAmPSAweGZmOwogCi0JY2FzZSBTM0MyNDEwX0dQSU9fSU5QVVQ6Ci0JY2FzZSBTM0MyNDEwX0dQSU9fT1VUUFVUOgotCWNhc2UgUzNDMjQxMF9HUElPX1NGTjI6Ci0JY2FzZSBTM0MyNDEwX0dQSU9fU0ZOMzoKLQkJaWYgKHBpbiA8IFMzQzI0MTBfR1BJT19CQU5LQikgewotCQkJZnVuY3Rpb24gLT0gMTsKLQkJCWZ1bmN0aW9uICY9IDE7Ci0JCQlmdW5jdGlvbiA8PD0gUzNDMjQxMF9HUElPX09GRlNFVChwaW4pOwotCQl9IGVsc2UgewotCQkJZnVuY3Rpb24gJj0gMzsKLQkJCWZ1bmN0aW9uIDw8PSBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikqMjsKLQkJfQotCX0KLQotCS8qIG1vZGlmeSB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyIHd3aXRoIElSUXMgb2ZmICovCisJcGluIC09IFMzQzI0MTBfR1BHODsKKwlyZWcgKz0gcGluICYgfjM7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQljb24gID0gX19yYXdfcmVhZGwoYmFzZSArIDB4MDApOwotCWNvbiAmPSB+bWFzazsKLQljb24gfD0gZnVuY3Rpb247CisJLyogdXBkYXRlIGZpbHRlciB3aWR0aCBhbmQgY2xvY2sgc291cmNlICovCiAKLQlfX3Jhd193cml0ZWwoY29uLCBiYXNlICsgMHgwMCk7CisJdmFsID0gX19yYXdfcmVhZGwocmVnKTsKKwl2YWwgJj0gfigweGZmIDw8ICgocGluICYgMykgKiA4KSk7CisJdmFsIHw9IGNvbmZpZyA8PCAoKHBpbiAmIDMpICogOCk7CisJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKKworCS8qIHVwZGF0ZSBmaWx0ZXIgZW5hYmxlICovCisKKwl2YWwgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VYVElOVDIpOworCXZhbCAmPSB+KDEgPDwgKChwaW4gKiA0KSArIDMpKTsKKwl2YWwgfD0gb24gPDwgKChwaW4gKiA0KSArIDMpOworCV9fcmF3X3dyaXRlbCh2YWwsIFMzQzI0WFhfRVhUSU5UMik7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKIH0KIAotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fY2ZncGluKTsKLQotdW5zaWduZWQgaW50IHMzYzI0MTBfZ3Bpb19nZXRjZmcodW5zaWduZWQgaW50IHBpbikKLXsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBTM0MyNFhYX0dQSU9fQkFTRShwaW4pOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gX19yYXdfcmVhZGwoYmFzZSk7Ci0KLQlpZiAocGluIDwgUzNDMjQxMF9HUElPX0JBTktCKSB7Ci0JCXZhbCA+Pj0gUzNDMjQxMF9HUElPX09GRlNFVChwaW4pOwotCQl2YWwgJj0gMTsKLQkJdmFsICs9IDE7Ci0JfSBlbHNlIHsKLQkJdmFsID4+PSBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikqMjsKLQkJdmFsICY9IDM7Ci0JfQotCi0JcmV0dXJuIHZhbCB8IFMzQzI0MTBfR1BJT19JTlBVVDsKLX0KLQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fZ2V0Y2ZnKTsKLQotdm9pZCBzM2MyNDEwX2dwaW9fcHVsbHVwKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB0bykKLXsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBTM0MyNFhYX0dQSU9fQkFTRShwaW4pOwotCXVuc2lnbmVkIGxvbmcgb2ZmcyA9IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgdXA7Ci0KLQlpZiAocGluIDwgUzNDMjQxMF9HUElPX0JBTktCKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQl1cCA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDA4KTsKLQl1cCAmPSB+KDFMIDw8IG9mZnMpOwotCXVwIHw9IHRvIDw8IG9mZnM7Ci0JX19yYXdfd3JpdGVsKHVwLCBiYXNlICsgMHgwOCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woczNjMjQxMF9ncGlvX3B1bGx1cCk7Ci0KLXZvaWQgczNjMjQxMF9ncGlvX3NldHBpbih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgdG8pCi17Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gUzNDMjRYWF9HUElPX0JBU0UocGluKTsKLQl1bnNpZ25lZCBsb25nIG9mZnMgPSBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGRhdDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDA0KTsKLQlkYXQgJj0gfigxIDw8IG9mZnMpOwotCWRhdCB8PSB0byA8PCBvZmZzOwotCV9fcmF3X3dyaXRlbChkYXQsIGJhc2UgKyAweDA0KTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fc2V0cGluKTsKLQotdW5zaWduZWQgaW50IHMzYzI0MTBfZ3Bpb19nZXRwaW4odW5zaWduZWQgaW50IHBpbikKLXsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBTM0MyNFhYX0dQSU9fQkFTRShwaW4pOwotCXVuc2lnbmVkIGxvbmcgb2ZmcyA9IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKTsKLQotCXJldHVybiBfX3Jhd19yZWFkbChiYXNlICsgMHgwNCkgJiAoMTw8IG9mZnMpOwotfQotCi1FWFBPUlRfU1lNQk9MKHMzYzI0MTBfZ3Bpb19nZXRwaW4pOwotCi11bnNpZ25lZCBpbnQgczNjMjQxMF9tb2RpZnlfbWlzY2NyKHVuc2lnbmVkIGludCBjbGVhciwgdW5zaWduZWQgaW50IGNoYW5nZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgbWlzY2NyOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1pc2NjciA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfTUlTQ0NSKTsKLQltaXNjY3IgJj0gfmNsZWFyOwotCW1pc2NjciBePSBjaGFuZ2U7Ci0JX19yYXdfd3JpdGVsKG1pc2NjciwgUzNDMjRYWF9NSVNDQ1IpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiBtaXNjY3I7Ci19Ci0KLUVYUE9SVF9TWU1CT0woczNjMjQxMF9tb2RpZnlfbWlzY2NyKTsKLQotaW50IHMzYzI0MTBfZ3Bpb19nZXRpcnEodW5zaWduZWQgaW50IHBpbikKLXsKLQlpZiAocGluIDwgUzNDMjQxMF9HUEYwIHx8IHBpbiA+IFMzQzI0MTBfR1BHMTUpCi0JCXJldHVybiAtMTsJLyogbm90IHZhbGlkIGludGVycnVwdHMgKi8KLQotCWlmIChwaW4gPCBTM0MyNDEwX0dQRzAgJiYgcGluID4gUzNDMjQxMF9HUEY3KQotCQlyZXR1cm4gLTE7CS8qIG5vdCB2YWxpZCBwaW4gKi8KLQotCWlmIChwaW4gPCBTM0MyNDEwX0dQRjQpCi0JCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEYwKSArIElSUV9FSU5UMDsKLQotCWlmIChwaW4gPCBTM0MyNDEwX0dQRzApCi0JCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEY0KSArIElSUV9FSU5UNDsKLQotCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEcwKSArIElSUV9FSU5UODsKLX0KLQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fZ2V0aXJxKTsKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9ncGlvX2lycWZpbHRlcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKaW5kZXggM2MwZWQ3OC4uNTNjYmRhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMywyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNywzNyArMTcsNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKgotICogICAyMi1KdWwtMjAwNCAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogICAgICAgICAgICAgICAgRml4ZWQgY29tcGlsZSB3YXJuaW5ncwotICoKLSAqICAgMjItSnVsLTIwMDQgIFJvYyBXdSA8Y29vbG9uZXlAeWFob28uY29tLmNuPgotICogICAgICAgICAgICAgICAgRml4ZWQgczNjX2V4dGlycV90eXBlCi0gKgotICogICAyMS1KdWwtMjAwNCAgQXJuYXVkIFBhdGFyZCAoUnRwKSA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KLSAqICAgICAgICAgICAgICAgIEFkZGl0aW9uIG9mIEFEQy9UQyBkZW11eAotICoKLSAqICAgMDQtT2N0LTIwMDQgIEtsYXVzIEZldHNjaGVyIDxrLmZldHNjaGVyQGZldHJvbi5kZT4KLSAqCQkgIEZpeCBmb3Igc2V0X2lycV90eXBlKCkgb24gbG93IEVJTlQgbnVtYmVycwotICoKLSAqICAgMDUtT2N0LTIwMDQgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCQkgIFRpZHkgdXAgS0YncyBwYXRjaCBhbmQgc29ydCBvdXQgbmV3IHJlbGVhc2UKLSAqCi0gKiAgIDA1LU9jdC0yMDA0ICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgkJICBBZGQgc3VwcG9ydCBmb3IgcG93ZXIgbWFuYWdlbWVudCBjb250cm9scwotICoKLSAqICAgMDQtTm92LTIwMDQgIEJlbiBEb29rcwotICoJCSAgRml4IHN0YW5kYXJkIElSUSB3YWtlIGZvciBFSU5UMC4uNCBhbmQgUlRDCi0gKgotICogICAyMi1GZWItMjAwNSAgQmVuIERvb2tzCi0gKgkJICBGaXhlZCBlZGdlLXRyaWdnZXJpbmcgb24gQURDIElSUQotICoKLSAqICAgMjgtSnVuLTIwMDUgIEJlbiBEb29rcwotICoJCSAgTWFyayBJUlFfTENEIHZhbGlkCi0gKgotICogICAyNS1KdWwtMjAwNSAgQmVuIERvb2tzCi0gKgkJICBTcGxpdCB0aGUgUzNDMjQ0MCBJUlEgY29kZSB0byBzZXBlcmF0ZSBmaWxlCiAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTcsNzQ1ICsyNiwyMyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWlycS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgotCi0jaW5jbHVkZSAiY3B1LmgiCi0jaW5jbHVkZSAicG0uaCIKLSNpbmNsdWRlICJpcnEuaCIKLQotLyogd2FrZXVwIGlycSBjb250cm9sICovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotLyogc3RhdGUgZm9yIElSUXMgb3ZlciBzbGVlcCAqLwotCi0vKiBkZWZhdWx0IGlzIHRvIGFsbG93IGZvciBFSU5UMC4uRUlOVDE1LCBhbmQgSVJRX1JUQyBhcyB3YWtldXAgc291cmNlcwotICoKLSAqIHNldCBiaXQgdG8gMSBpbiBhbGxvdyBiaXRmaWVsZCB0byBlbmFibGUgdGhlIHdha2V1cCBzZXR0aW5ncyBvbiBpdAotKi8KLQotdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9pbnRhbGxvdwk9IDFMIDw8IChJUlFfUlRDIC0gSVJRX0VJTlQwKSB8IDB4Zkw7Ci11bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludG1hc2sJPSAweGZmZmZmZmZmTDsKLXVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludGFsbG93CT0gMHgwMDAwZmZmMEw7Ci11bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRtYXNrCT0gMHhmZmZmZmZmZkw7Ci0KLWludAotczNjX2lycV93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQorc3RhdGljIGludCBzM2MyNDEwX2lycV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKLQl1bnNpZ25lZCBsb25nIGlycWJpdCA9IDEgPDwgKGlycW5vIC0gSVJRX0VJTlQwKTsKLQotCWlmICghKHMzY19pcnF3YWtlX2ludGFsbG93ICYgaXJxYml0KSkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJ3YWtlICVzIGZvciBpcnEgJWRcbiIsCi0JICAgICAgIHN0YXRlID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwgaXJxbm8pOwotCi0JaWYgKCFzdGF0ZSkKLQkJczNjX2lycXdha2VfaW50bWFzayB8PSBpcnFiaXQ7Ci0JZWxzZQotCQlzM2NfaXJxd2FrZV9pbnRtYXNrICY9IH5pcnFiaXQ7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotczNjX2lycWV4dF93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQotewotCXVuc2lnbmVkIGxvbmcgYml0ID0gMUwgPDwgKGlycW5vIC0gRVhUSU5UX09GRik7Ci0KLQlpZiAoIShzM2NfaXJxd2FrZV9laW50YWxsb3cgJiBiaXQpKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCXByaW50ayhLRVJOX0lORk8gIndha2UgJXMgZm9yIGlycSAlZFxuIiwKLQkgICAgICAgc3RhdGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBpcnFubyk7Ci0KLQlpZiAoIXN0YXRlKQotCQlzM2NfaXJxd2FrZV9laW50bWFzayB8PSBiaXQ7Ci0JZWxzZQotCQlzM2NfaXJxd2FrZV9laW50bWFzayAmPSB+Yml0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNlbHNlCi0jZGVmaW5lIHMzY19pcnFleHRfd2FrZSBOVUxMCi0jZGVmaW5lIHMzY19pcnFfd2FrZSBOVUxMCi0jZW5kaWYKLQotCi1zdGF0aWMgdm9pZAotczNjX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0KLQlpcnFubyAtPSBJUlFfRUlOVDA7Ci0KLQltYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRNU0spOwotCW1hc2sgfD0gMVVMIDw8IGlycW5vOwotCV9fcmF3X3dyaXRlbChtYXNrLCBTM0MyNDEwX0lOVE1TSyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotczNjX2lycV9hY2sodW5zaWduZWQgaW50IGlycW5vKQotewotCXVuc2lnbmVkIGxvbmcgYml0dmFsID0gMVVMIDw8IChpcnFubyAtIElSUV9FSU5UMCk7Ci0KLQlfX3Jhd193cml0ZWwoYml0dmFsLCBTM0MyNDEwX1NSQ1BORCk7Ci0JX19yYXdfd3JpdGVsKGJpdHZhbCwgUzNDMjQxMF9JTlRQTkQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXMzY19pcnFfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCi17Ci0JdW5zaWduZWQgbG9uZyBiaXR2YWwgPSAxVUwgPDwgKGlycW5vIC0gSVJRX0VJTlQwKTsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0KLQltYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRNU0spOwotCV9fcmF3X3dyaXRlbChtYXNrfGJpdHZhbCwgUzNDMjQxMF9JTlRNU0spOwotCi0JX19yYXdfd3JpdGVsKGJpdHZhbCwgUzNDMjQxMF9TUkNQTkQpOwotCV9fcmF3X3dyaXRlbChiaXR2YWwsIFMzQzI0MTBfSU5UUE5EKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotczNjX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQotewotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQotCWlmIChpcnFubyAhPSBJUlFfVElNRVI0ICYmIGlycW5vICE9IElSUV9FSU5UOHQyMykKLQkJaXJxZGJmMigiczNjX2lycV91bm1hc2sgJWRcbiIsIGlycW5vKTsKLQotCWlycW5vIC09IElSUV9FSU5UMDsKLQotCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0lOVE1TSyk7Ci0JbWFzayAmPSB+KDFVTCA8PCBpcnFubyk7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIFMzQzI0MTBfSU5UTVNLKTsKLX0KLQotc3RydWN0IGlycV9jaGlwIHMzY19pcnFfbGV2ZWxfY2hpcCA9IHsKLQkubmFtZQkJPSAiczNjLWxldmVsIiwKLQkuYWNrCQk9IHMzY19pcnFfbWFza2FjaywKLQkubWFzawkJPSBzM2NfaXJxX21hc2ssCi0JLnVubWFzawkJPSBzM2NfaXJxX3VubWFzaywKLQkuc2V0X3dha2UJPSBzM2NfaXJxX3dha2UKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwX2lycV9kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDEwX2lycV9hZGQsCisJLnN1c3BlbmQJPSBzM2MyNHh4X2lycV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjR4eF9pcnFfcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX2NoaXAgPSB7Ci0JLm5hbWUJCT0gInMzYyIsCi0JLmFjawkJPSBzM2NfaXJxX2FjaywKLQkubWFzawkJPSBzM2NfaXJxX21hc2ssCi0JLnVubWFzawkJPSBzM2NfaXJxX3VubWFzaywKLQkuc2V0X3dha2UJPSBzM2NfaXJxX3dha2UKLX07Ci0KLXN0YXRpYyB2b2lkCi1zM2NfaXJxZXh0X21hc2sodW5zaWduZWQgaW50IGlycW5vKQorc3RhdGljIGludCBzM2MyNDEwX2lycV9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXNrOwotCi0JaXJxbm8gLT0gRVhUSU5UX09GRjsKLQotCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRNQVNLKTsKLQltYXNrIHw9ICggMVVMIDw8IGlycW5vKTsKLQlfX3Jhd193cml0ZWwobWFzaywgUzNDMjRYWF9FSU5UTUFTSyk7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBfc3lzY2xhc3MsICZzM2MyNDEwX2lycV9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZAotczNjX2lycWV4dF9hY2sodW5zaWduZWQgaW50IGlycW5vKQotewotCXVuc2lnbmVkIGxvbmcgcmVxOwotCXVuc2lnbmVkIGxvbmcgYml0OwotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQotCWJpdCA9IDFVTCA8PCAoaXJxbm8gLSBFWFRJTlRfT0ZGKTsKLQotCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRNQVNLKTsKLQotCV9fcmF3X3dyaXRlbChiaXQsIFMzQzI0WFhfRUlOVFBFTkQpOwotCi0JcmVxID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UUEVORCk7Ci0JcmVxICY9IH5tYXNrOwotCi0JLyogbm90IHN1cmUgaWYgd2Ugc2hvdWxkIGJlIGFja2luZyB0aGUgcGFyZW50IGlycS4uLiAqLwotCi0JaWYgKGlycW5vIDw9IElSUV9FSU5UNyApIHsKLQkJaWYgKChyZXEgJiAweGYwKSA9PSAwKQotCQkJczNjX2lycV9hY2soSVJRX0VJTlQ0dDcpOwotCX0gZWxzZSB7Ci0JCWlmICgocmVxID4+IDgpID09IDApCi0JCQlzM2NfaXJxX2FjayhJUlFfRUlOVDh0MjMpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXMzY19pcnFleHRfdW5tYXNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0KLQlpcnFubyAtPSBFWFRJTlRfT0ZGOwotCi0JbWFzayA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlOVE1BU0spOwotCW1hc2sgJj0gfiggMVVMIDw8IGlycW5vKTsKLQlfX3Jhd193cml0ZWwobWFzaywgUzNDMjRYWF9FSU5UTUFTSyk7Ci19Ci0KLWludAotczNjX2lycWV4dF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQotewotCXZvaWQgX19pb21lbSAqZXh0aW50X3JlZzsKLQl2b2lkIF9faW9tZW0gKmdwY29uX3JlZzsKLQl1bnNpZ25lZCBsb25nIGdwY29uX29mZnNldCwgZXh0aW50X29mZnNldDsKLQl1bnNpZ25lZCBsb25nIG5ld3ZhbHVlID0gMCwgdmFsdWU7Ci0KLQlpZiAoKGlycSA+PSBJUlFfRUlOVDApICYmIChpcnEgPD0gSVJRX0VJTlQzKSkKLQl7Ci0JCWdwY29uX3JlZyA9IFMzQzI0MTBfR1BGQ09OOwotCQlleHRpbnRfcmVnID0gUzNDMjRYWF9FWFRJTlQwOwotCQlncGNvbl9vZmZzZXQgPSAoaXJxIC0gSVJRX0VJTlQwKSAqIDI7Ci0JCWV4dGludF9vZmZzZXQgPSAoaXJxIC0gSVJRX0VJTlQwKSAqIDQ7Ci0JfQotCWVsc2UgaWYgKChpcnEgPj0gSVJRX0VJTlQ0KSAmJiAoaXJxIDw9IElSUV9FSU5UNykpCi0JewotCQlncGNvbl9yZWcgPSBTM0MyNDEwX0dQRkNPTjsKLQkJZXh0aW50X3JlZyA9IFMzQzI0WFhfRVhUSU5UMDsKLQkJZ3Bjb25fb2Zmc2V0ID0gKGlycSAtIChFWFRJTlRfT0ZGKSkgKiAyOwotCQlleHRpbnRfb2Zmc2V0ID0gKGlycSAtIChFWFRJTlRfT0ZGKSkgKiA0OwotCX0KLQllbHNlIGlmICgoaXJxID49IElSUV9FSU5UOCkgJiYgKGlycSA8PSBJUlFfRUlOVDE1KSkKLQl7Ci0JCWdwY29uX3JlZyA9IFMzQzI0MTBfR1BHQ09OOwotCQlleHRpbnRfcmVnID0gUzNDMjRYWF9FWFRJTlQxOwotCQlncGNvbl9vZmZzZXQgPSAoaXJxIC0gSVJRX0VJTlQ4KSAqIDI7Ci0JCWV4dGludF9vZmZzZXQgPSAoaXJxIC0gSVJRX0VJTlQ4KSAqIDQ7Ci0JfQotCWVsc2UgaWYgKChpcnEgPj0gSVJRX0VJTlQxNikgJiYgKGlycSA8PSBJUlFfRUlOVDIzKSkKLQl7Ci0JCWdwY29uX3JlZyA9IFMzQzI0MTBfR1BHQ09OOwotCQlleHRpbnRfcmVnID0gUzNDMjRYWF9FWFRJTlQyOwotCQlncGNvbl9vZmZzZXQgPSAoaXJxIC0gSVJRX0VJTlQ4KSAqIDI7Ci0JCWV4dGludF9vZmZzZXQgPSAoaXJxIC0gSVJRX0VJTlQxNikgKiA0OwotCX0gZWxzZQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBTZXQgdGhlIEdQSU8gdG8gZXh0ZXJuYWwgaW50ZXJydXB0IG1vZGUgKi8KLQl2YWx1ZSA9IF9fcmF3X3JlYWRsKGdwY29uX3JlZyk7Ci0JdmFsdWUgPSAodmFsdWUgJiB+KDMgPDwgZ3Bjb25fb2Zmc2V0KSkgfCAoMHgwMiA8PCBncGNvbl9vZmZzZXQpOwotCV9fcmF3X3dyaXRlbCh2YWx1ZSwgZ3Bjb25fcmVnKTsKLQotCS8qIFNldCB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0IHRvIHBvaW50ZWQgdHJpZ2dlciB0eXBlICovCi0Jc3dpdGNoICh0eXBlKQotCXsKLQkJY2FzZSBJUlFUX05PRURHRToKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIGVkZ2Ugc2V0dGluZyFcbiIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJUlFUX1JJU0lORzoKLQkJCW5ld3ZhbHVlID0gUzNDMjQxMF9FWFRJTlRfUklTRUVER0U7Ci0JCQlicmVhazsKLQotCQljYXNlIElSUVRfRkFMTElORzoKLQkJCW5ld3ZhbHVlID0gUzNDMjQxMF9FWFRJTlRfRkFMTEVER0U7Ci0JCQlicmVhazsKLQotCQljYXNlIElSUVRfQk9USEVER0U6Ci0JCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX0JPVEhFREdFOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJUlFUX0xPVzoKLQkJCW5ld3ZhbHVlID0gUzNDMjQxMF9FWFRJTlRfTE9XTEVWOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJUlFUX0hJR0g6Ci0JCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX0hJTEVWOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAiTm8gc3VjaCBpcnEgdHlwZSAlZCIsIHR5cGUpOwotCQkJcmV0dXJuIC0xOwotCX0KLQotCXZhbHVlID0gX19yYXdfcmVhZGwoZXh0aW50X3JlZyk7Ci0JdmFsdWUgPSAodmFsdWUgJiB+KDcgPDwgZXh0aW50X29mZnNldCkpIHwgKG5ld3ZhbHVlIDw8IGV4dGludF9vZmZzZXQpOwotCV9fcmF3X3dyaXRlbCh2YWx1ZSwgZXh0aW50X3JlZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxZXh0X2NoaXAgPSB7Ci0JLm5hbWUJCT0gInMzYy1leHQiLAotCS5tYXNrCQk9IHMzY19pcnFleHRfbWFzaywKLQkudW5tYXNrCQk9IHMzY19pcnFleHRfdW5tYXNrLAotCS5hY2sJCT0gczNjX2lycWV4dF9hY2ssCi0JLnNldF90eXBlCT0gczNjX2lycWV4dF90eXBlLAotCS5zZXRfd2FrZQk9IHMzY19pcnFleHRfd2FrZQotfTsKLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX2VpbnQwdDQgPSB7Ci0JLm5hbWUJCT0gInMzYy1leHQwIiwKLQkuYWNrCQk9IHMzY19pcnFfYWNrLAotCS5tYXNrCQk9IHMzY19pcnFfbWFzaywKLQkudW5tYXNrCQk9IHMzY19pcnFfdW5tYXNrLAotCS5zZXRfd2FrZQk9IHMzY19pcnFfd2FrZSwKLQkuc2V0X3R5cGUJPSBzM2NfaXJxZXh0X3R5cGUsCi19OwotCi0vKiBtYXNrIHZhbHVlcyBmb3IgdGhlIHBhcmVudCByZWdpc3RlcnMgZm9yIGVhY2ggb2YgdGhlIGludGVycnVwdCB0eXBlcyAqLwotCi0jZGVmaW5lIElOVE1TS19VQVJUMAkgKDFVTCA8PCAoSVJRX1VBUlQwIC0gSVJRX0VJTlQwKSkKLSNkZWZpbmUgSU5UTVNLX1VBUlQxCSAoMVVMIDw8IChJUlFfVUFSVDEgLSBJUlFfRUlOVDApKQotI2RlZmluZSBJTlRNU0tfVUFSVDIJICgxVUwgPDwgKElSUV9VQVJUMiAtIElSUV9FSU5UMCkpCi0jZGVmaW5lIElOVE1TS19BRENQQVJFTlQgKDFVTCA8PCAoSVJRX0FEQ1BBUkVOVCAtIElSUV9FSU5UMCkpCi0KLQotLyogVUFSVDAgKi8KLQotc3RhdGljIHZvaWQKLXMzY19pcnFfdWFydDBfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCi17Ci0JczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfVUFSVDAsIDcpOwotfQotCi1zdGF0aWMgdm9pZAotczNjX2lycV91YXJ0MF91bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQotewotCXMzY19pcnFzdWJfdW5tYXNrKGlycW5vLCBJTlRNU0tfVUFSVDApOwotfQotCi1zdGF0aWMgdm9pZAotczNjX2lycV91YXJ0MF9hY2sodW5zaWduZWQgaW50IGlycW5vKQotewotCXMzY19pcnFzdWJfbWFza2FjayhpcnFubywgSU5UTVNLX1VBUlQwLCA3KTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX3VhcnQwID0gewotCS5uYW1lCQk9ICJzM2MtdWFydDAiLAotCS5tYXNrCQk9IHMzY19pcnFfdWFydDBfbWFzaywKLQkudW5tYXNrCQk9IHMzY19pcnFfdWFydDBfdW5tYXNrLAotCS5hY2sJCT0gczNjX2lycV91YXJ0MF9hY2ssCi19OwotCi0vKiBVQVJUMSAqLwotCi1zdGF0aWMgdm9pZAotczNjX2lycV91YXJ0MV9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQlzM2NfaXJxc3ViX21hc2soaXJxbm8sIElOVE1TS19VQVJUMSwgNyA8PCAzKTsKLX0KLQotc3RhdGljIHZvaWQKLXMzY19pcnFfdWFydDFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQlzM2NfaXJxc3ViX3VubWFzayhpcnFubywgSU5UTVNLX1VBUlQxKTsKLX0KLQotc3RhdGljIHZvaWQKLXMzY19pcnFfdWFydDFfYWNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQlzM2NfaXJxc3ViX21hc2thY2soaXJxbm8sIElOVE1TS19VQVJUMSwgNyA8PCAzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX3VhcnQxID0gewotCS5uYW1lCQk9ICJzM2MtdWFydDEiLAotCS5tYXNrCQk9IHMzY19pcnFfdWFydDFfbWFzaywKLQkudW5tYXNrCQk9IHMzY19pcnFfdWFydDFfdW5tYXNrLAotCS5hY2sJCT0gczNjX2lycV91YXJ0MV9hY2ssCi19OwotCi0vKiBVQVJUMiAqLwotCi1zdGF0aWMgdm9pZAotczNjX2lycV91YXJ0Ml9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQlzM2NfaXJxc3ViX21hc2soaXJxbm8sIElOVE1TS19VQVJUMiwgNyA8PCA2KTsKLX0KLQotc3RhdGljIHZvaWQKLXMzY19pcnFfdWFydDJfdW5tYXNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQlzM2NfaXJxc3ViX3VubWFzayhpcnFubywgSU5UTVNLX1VBUlQyKTsKLX0KLQotc3RhdGljIHZvaWQKLXMzY19pcnFfdWFydDJfYWNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQlzM2NfaXJxc3ViX21hc2thY2soaXJxbm8sIElOVE1TS19VQVJUMiwgNyA8PCA2KTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX3VhcnQyID0gewotCS5uYW1lCQk9ICJzM2MtdWFydDIiLAotCS5tYXNrCQk9IHMzY19pcnFfdWFydDJfbWFzaywKLQkudW5tYXNrCQk9IHMzY19pcnFfdWFydDJfdW5tYXNrLAotCS5hY2sJCT0gczNjX2lycV91YXJ0Ml9hY2ssCi19OwotCi0vKiBBREMgYW5kIFRvdWNoc2NyZWVuICovCi0KLXN0YXRpYyB2b2lkCi1zM2NfaXJxX2FkY19tYXNrKHVuc2lnbmVkIGludCBpcnFubykKLXsKLQlzM2NfaXJxc3ViX21hc2soaXJxbm8sIElOVE1TS19BRENQQVJFTlQsIDMgPDwgOSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zM2NfaXJxX2FkY191bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQotewotCXMzY19pcnFzdWJfdW5tYXNrKGlycW5vLCBJTlRNU0tfQURDUEFSRU5UKTsKLX0KLQotc3RhdGljIHZvaWQKLXMzY19pcnFfYWRjX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCi17Ci0JczNjX2lycXN1Yl9hY2soaXJxbm8sIElOVE1TS19BRENQQVJFTlQsIDMgPDwgOSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjX2lycV9hZGMgPSB7Ci0JLm5hbWUJCT0gInMzYy1hZGMiLAotCS5tYXNrCQk9IHMzY19pcnFfYWRjX21hc2ssCi0JLnVubWFzawkJPSBzM2NfaXJxX2FkY191bm1hc2ssCi0JLmFjawkJPSBzM2NfaXJxX2FkY19hY2ssCi19OwotCi0vKiBpcnEgZGVtdXggZm9yIGFkYyAqLwotc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF9hZGModW5zaWduZWQgaW50IGlycSwKLQkJCSAgICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQl1bnNpZ25lZCBpbnQgc3Vic3JjLCBzdWJtc2s7Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IDk7Ci0Jc3RydWN0IGlycV9kZXNjICpteWRlc2M7Ci0KLQkvKiByZWFkIHRoZSBjdXJyZW50IHBlbmRpbmcgaW50ZXJydXB0cywgYW5kIHRoZSBtYXNrCi0JICogZm9yIHdoYXQgaXQgaXMgYXZhaWxhYmxlICovCi0KLQlzdWJzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1NVQlNSQ1BORCk7Ci0Jc3VibXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRTVUJNU0spOwotCi0Jc3Vic3JjICY9IH5zdWJtc2s7Ci0Jc3Vic3JjID4+PSBvZmZzZXQ7Ci0Jc3Vic3JjICY9IDM7Ci0KLQlpZiAoc3Vic3JjICE9IDApIHsKLQkJaWYgKHN1YnNyYyAmIDEpIHsKLQkJCW15ZGVzYyA9IGlycV9kZXNjICsgSVJRX1RDOwotCQkJZGVzY19oYW5kbGVfaXJxKElSUV9UQywgbXlkZXNjKTsKLQkJfQotCQlpZiAoc3Vic3JjICYgMikgewotCQkJbXlkZXNjID0gaXJxX2Rlc2MgKyBJUlFfQURDOwotCQkJZGVzY19oYW5kbGVfaXJxKElSUV9BREMsIG15ZGVzYyk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdWFydCh1bnNpZ25lZCBpbnQgc3RhcnQpCi17Ci0JdW5zaWduZWQgaW50IHN1YnNyYywgc3VibXNrOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzdGFydCAtIElSUV9TM0NVQVJUX1JYMDsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KLQkvKiByZWFkIHRoZSBjdXJyZW50IHBlbmRpbmcgaW50ZXJydXB0cywgYW5kIHRoZSBtYXNrCi0JICogZm9yIHdoYXQgaXQgaXMgYXZhaWxhYmxlICovCi0KLQlzdWJzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1NVQlNSQ1BORCk7Ci0Jc3VibXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRTVUJNU0spOwotCi0JaXJxZGJmMigiczNjX2lycV9kZW11eF91YXJ0OiBzdGFydD0lZCAoJWQpLCBzdWJzcmM9MHglMDh4LDB4JTA4eFxuIiwKLQkJc3RhcnQsIG9mZnNldCwgc3Vic3JjLCBzdWJtc2spOwotCi0Jc3Vic3JjICY9IH5zdWJtc2s7Ci0Jc3Vic3JjID4+PSBvZmZzZXQ7Ci0Jc3Vic3JjICY9IDc7Ci0KLQlpZiAoc3Vic3JjICE9IDApIHsKLQkJZGVzYyA9IGlycV9kZXNjICsgc3RhcnQ7Ci0KLQkJaWYgKHN1YnNyYyAmIDEpCi0JCQlkZXNjX2hhbmRsZV9pcnEoc3RhcnQsIGRlc2MpOwotCi0JCWRlc2MrKzsKLQotCQlpZiAoc3Vic3JjICYgMikKLQkJCWRlc2NfaGFuZGxlX2lycShzdGFydCsxLCBkZXNjKTsKLQotCQlkZXNjKys7Ci0KLQkJaWYgKHN1YnNyYyAmIDQpCi0JCQlkZXNjX2hhbmRsZV9pcnEoc3RhcnQrMiwgZGVzYyk7Ci0JfQotfQotCi0vKiB1YXJ0IGRlbXV4IGVudHJ5IHBvaW50cyAqLwotCi1zdGF0aWMgdm9pZAotczNjX2lycV9kZW11eF91YXJ0MCh1bnNpZ25lZCBpbnQgaXJxLAotCQkgICAgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCWlycSA9IGlycTsKLQlzM2NfaXJxX2RlbXV4X3VhcnQoSVJRX1MzQ1VBUlRfUlgwKTsKLX0KLQotc3RhdGljIHZvaWQKLXMzY19pcnFfZGVtdXhfdWFydDEodW5zaWduZWQgaW50IGlycSwKLQkJICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlpcnEgPSBpcnE7Ci0JczNjX2lycV9kZW11eF91YXJ0KElSUV9TM0NVQVJUX1JYMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zM2NfaXJxX2RlbXV4X3VhcnQyKHVuc2lnbmVkIGludCBpcnEsCi0JCSAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JaXJxID0gaXJxOwotCXMzY19pcnFfZGVtdXhfdWFydChJUlFfUzNDVUFSVF9SWDIpOwotfQotCi1zdGF0aWMgdm9pZAotczNjX2lycV9kZW11eF9leHRpbnQ4KHVuc2lnbmVkIGludCBpcnEsCi0JCSAgICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQl1bnNpZ25lZCBsb25nIGVpbnRwbmQgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRQRU5EKTsKLQl1bnNpZ25lZCBsb25nIGVpbnRtc2sgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRNQVNLKTsKLQotCWVpbnRwbmQgJj0gfmVpbnRtc2s7Ci0JZWludHBuZCAmPSB+MHhmZjsJLyogaWdub3JlIGxvd2VyIGlycXMgKi8KLQotCS8qIHdlIG1heSBhcyB3ZWxsIGhhbmRsZSBhbGwgdGhlIHBlbmRpbmcgSVJRcyBoZXJlICovCi0KLQl3aGlsZSAoZWludHBuZCkgewotCQlpcnEgPSBfX2ZmcyhlaW50cG5kKTsKLQkJZWludHBuZCAmPSB+KDE8PGlycSk7Ci0KLQkJaXJxICs9IChJUlFfRUlOVDQgLSA0KTsKLQkJZGVzY19oYW5kbGVfaXJxKGlycSwgaXJxX2Rlc2MgKyBpcnEpOwotCX0KLQotfQotCi1zdGF0aWMgdm9pZAotczNjX2lycV9kZW11eF9leHRpbnQ0dDcodW5zaWduZWQgaW50IGlycSwKLQkJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQl1bnNpZ25lZCBsb25nIGVpbnRwbmQgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRQRU5EKTsKLQl1bnNpZ25lZCBsb25nIGVpbnRtc2sgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRNQVNLKTsKLQotCWVpbnRwbmQgJj0gfmVpbnRtc2s7Ci0JZWludHBuZCAmPSAweGZmOwkvKiBvbmx5IGxvd2VyIGlycXMgKi8KLQotCS8qIHdlIG1heSBhcyB3ZWxsIGhhbmRsZSBhbGwgdGhlIHBlbmRpbmcgSVJRcyBoZXJlICovCi0KLQl3aGlsZSAoZWludHBuZCkgewotCQlpcnEgPSBfX2ZmcyhlaW50cG5kKTsKLQkJZWludHBuZCAmPSB+KDE8PGlycSk7Ci0KLQkJaXJxICs9IChJUlFfRUlOVDQgLSA0KTsKLQotCQlkZXNjX2hhbmRsZV9pcnEoaXJxLCBpcnFfZGVzYyArIGlycSk7Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBpcnFfc2F2ZVtdID0gewotCVNBVkVfSVRFTShTM0MyNDEwX0lOVE1TSyksCi0JU0FWRV9JVEVNKFMzQzI0MTBfSU5UU1VCTVNLKSwKLX07Ci0KLS8qIHRoZSBleHRpbnQgdmFsdWVzIG1vdmUgYmV0d2VlbiB0aGUgczNjMjQxMC9zM2MyNDQwIGFuZCB0aGUgczNjMjQxMgotICogc28gd2UgdXNlIGFuIGFycmF5IHRvIGhvbGQgdGhlbSwgYW5kIHRvIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZgotICogdGhlIHJlZ2lzdGVyIGF0IHJ1bi10aW1lCi0qLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2V4dGludFszXTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVfZWludGZsdFs0XTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVfZWludG1hc2s7Ci0KLWludCBzM2MyNHh4X2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZXh0aW50KTsgaSsrKQotCQlzYXZlX2V4dGludFtpXSA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRVhUSU5UMCArIChpKjQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZWludGZsdCk7IGkrKykKLQkJc2F2ZV9laW50Zmx0W2ldID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5GTFQwICsgKGkqNCkpOwotCi0JczNjMjQxMF9wbV9kb19zYXZlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7Ci0Jc2F2ZV9laW50bWFzayA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlOVE1BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBzM2MyNHh4X2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZXh0aW50KTsgaSsrKQotCQlfX3Jhd193cml0ZWwoc2F2ZV9leHRpbnRbaV0sIFMzQzI0WFhfRVhUSU5UMCArIChpKjQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZWludGZsdCk7IGkrKykKLQkJX19yYXdfd3JpdGVsKHNhdmVfZWludGZsdFtpXSwgUzNDMjRYWF9FSU5GTFQwICsgKGkqNCkpOwotCi0JczNjMjQxMF9wbV9kb19yZXN0b3JlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7Ci0JX19yYXdfd3JpdGVsKHNhdmVfZWludG1hc2ssIFMzQzI0WFhfRUlOVE1BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNlbHNlCi0jZGVmaW5lIHMzYzI0eHhfaXJxX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2MyNHh4X2lycV9yZXN1bWUgIE5VTEwKLSNlbmRpZgotCi0vKiBzM2MyNHh4X2luaXRfaXJxCi0gKgotICogSW5pdGlhbGlzZSBTM0MyNDEwIElSUSBzeXN0ZW0KLSovCi0KLXZvaWQgX19pbml0IHMzYzI0eHhfaW5pdF9pcnEodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHBlbmQ7Ci0JdW5zaWduZWQgbG9uZyBsYXN0OwotCWludCBpcnFubzsKLQlpbnQgaTsKLQotCWlycWRiZigiczNjMjQxMF9pbml0X2lycTogY2xlYXJpbmcgaW50ZXJydXB0IHN0YXR1cyBmbGFnc1xuIik7Ci0KLQkvKiBmaXJzdCwgY2xlYXIgYWxsIGludGVycnVwdHMgcGVuZGluZy4uLiAqLwotCi0JbGFzdCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlwZW5kID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UUEVORCk7Ci0KLQkJaWYgKHBlbmQgPT0gMCB8fCBwZW5kID09IGxhc3QpCi0JCQlicmVhazsKLQotCQlfX3Jhd193cml0ZWwocGVuZCwgUzNDMjRYWF9FSU5UUEVORCk7Ci0JCXByaW50aygiaXJxOiBjbGVhcmluZyBwZW5kaW5nIGV4dCBzdGF0dXMgJTA4eFxuIiwgKGludClwZW5kKTsKLQkJbGFzdCA9IHBlbmQ7Ci0JfQotCi0JbGFzdCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlwZW5kID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRQTkQpOwotCi0JCWlmIChwZW5kID09IDAgfHwgcGVuZCA9PSBsYXN0KQotCQkJYnJlYWs7Ci0KLQkJX19yYXdfd3JpdGVsKHBlbmQsIFMzQzI0MTBfU1JDUE5EKTsKLQkJX19yYXdfd3JpdGVsKHBlbmQsIFMzQzI0MTBfSU5UUE5EKTsKLQkJcHJpbnRrKCJpcnE6IGNsZWFyaW5nIHBlbmRpbmcgc3RhdHVzICUwOHhcbiIsIChpbnQpcGVuZCk7Ci0JCWxhc3QgPSBwZW5kOwotCX0KLQotCWxhc3QgPSAwOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJcGVuZCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfU1VCU1JDUE5EKTsKLQotCQlpZiAocGVuZCA9PSAwIHx8IHBlbmQgPT0gbGFzdCkKLQkJCWJyZWFrOwotCi0JCXByaW50aygiaXJxOiBjbGVhcmluZyBzdWJwZW5kaW5nIHN0YXR1cyAlMDh4XG4iLCAoaW50KXBlbmQpOwotCQlfX3Jhd193cml0ZWwocGVuZCwgUzNDMjQxMF9TVUJTUkNQTkQpOwotCQlsYXN0ID0gcGVuZDsKLQl9Ci0KLQkvKiByZWdpc3RlciB0aGUgbWFpbiBpbnRlcnJ1cHRzICovCi0KLQlpcnFkYmYoInMzYzI0MTBfaW5pdF9pcnE6IHJlZ2lzdGVyaW5nIHMzYzI0MTAgaW50ZXJydXB0IGhhbmRsZXJzXG4iKTsKLQotCWZvciAoaXJxbm8gPSBJUlFfRUlOVDR0NzsgaXJxbm8gPD0gSVJRX0FEQ1BBUkVOVDsgaXJxbm8rKykgewotCQkvKiBzZXQgYWxsIHRoZSBzM2MyNDEwIGludGVybmFsIGlycXMgKi8KLQotCQlzd2l0Y2ggKGlycW5vKSB7Ci0JCQkvKiBkZWFsIHdpdGggdGhlIHNwZWNpYWwgSVJRcyAoY2FzY2FkZWQpICovCi0KLQkJY2FzZSBJUlFfRUlOVDR0NzoKLQkJY2FzZSBJUlFfRUlOVDh0MjM6Ci0JCWNhc2UgSVJRX1VBUlQwOgotCQljYXNlIElSUV9VQVJUMToKLQkJY2FzZSBJUlFfVUFSVDI6Ci0JCWNhc2UgSVJRX0FEQ1BBUkVOVDoKLQkJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfbGV2ZWxfY2hpcCk7Ci0JCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGhhbmRsZV9sZXZlbF9pcnEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJUlFfUkVTRVJWRUQ2OgotCQljYXNlIElSUV9SRVNFUlZFRDI0OgotCQkJLyogbm8gSVJRIGhlcmUgKi8KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQkvL2lycWRiZigicmVnaXN0ZXJpbmcgaXJxICVkIChzM2MgaXJxKVxuIiwgaXJxbm8pOwotCQkJc2V0X2lycV9jaGlwKGlycW5vLCAmczNjX2lycV9jaGlwKTsKLQkJCXNldF9pcnFfaGFuZGxlcihpcnFubywgaGFuZGxlX2VkZ2VfaXJxKTsKLQkJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOwotCQl9Ci0JfQotCi0JLyogc2V0dXAgdGhlIGNhc2NhZGUgaXJxIGhhbmRsZXJzICovCi0KLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRUlOVDR0NywgczNjX2lycV9kZW11eF9leHRpbnQ0dDcpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FSU5UOHQyMywgczNjX2lycV9kZW11eF9leHRpbnQ4KTsKLQotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9VQVJUMCwgczNjX2lycV9kZW11eF91YXJ0MCk7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1VBUlQxLCBzM2NfaXJxX2RlbXV4X3VhcnQxKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVUFSVDIsIHMzY19pcnFfZGVtdXhfdWFydDIpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9BRENQQVJFTlQsIHMzY19pcnFfZGVtdXhfYWRjKTsKLQotCS8qIGV4dGVybmFsIGludGVycnVwdHMgKi8KLQotCWZvciAoaXJxbm8gPSBJUlFfRUlOVDA7IGlycW5vIDw9IElSUV9FSU5UMzsgaXJxbm8rKykgewotCQlpcnFkYmYoInJlZ2lzdGVyaW5nIGlycSAlZCAoZXh0IGludClcbiIsIGlycW5vKTsKLQkJc2V0X2lycV9jaGlwKGlycW5vLCAmczNjX2lycV9laW50MHQ0KTsKLQkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBoYW5kbGVfZWRnZV9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKLQl9Ci0KLQlmb3IgKGlycW5vID0gSVJRX0VJTlQ0OyBpcnFubyA8PSBJUlFfRUlOVDIzOyBpcnFubysrKSB7Ci0JCWlycWRiZigicmVnaXN0ZXJpbmcgaXJxICVkIChleHRlbmRlZCBzM2MgaXJxKVxuIiwgaXJxbm8pOwotCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZzM2NfaXJxZXh0X2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGhhbmRsZV9lZGdlX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOwotCX0KLQotCS8qIHJlZ2lzdGVyIHRoZSB1YXJ0IGludGVycnVwdHMgKi8KLQotCWlycWRiZigiczNjMjQxMDogcmVnaXN0ZXJpbmcgZXh0ZXJuYWwgaW50ZXJydXB0c1xuIik7Ci0KLQlmb3IgKGlycW5vID0gSVJRX1MzQ1VBUlRfUlgwOyBpcnFubyA8PSBJUlFfUzNDVUFSVF9FUlIwOyBpcnFubysrKSB7Ci0JCWlycWRiZigicmVnaXN0ZXJpbmcgaXJxICVkIChzM2MgdWFydDAgaXJxKVxuIiwgaXJxbm8pOwotCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZzM2NfaXJxX3VhcnQwKTsKLQkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7Ci0JfQotCi0JZm9yIChpcnFubyA9IElSUV9TM0NVQVJUX1JYMTsgaXJxbm8gPD0gSVJRX1MzQ1VBUlRfRVJSMTsgaXJxbm8rKykgewotCQlpcnFkYmYoInJlZ2lzdGVyaW5nIGlycSAlZCAoczNjIHVhcnQxIGlycSlcbiIsIGlycW5vKTsKLQkJc2V0X2lycV9jaGlwKGlycW5vLCAmczNjX2lycV91YXJ0MSk7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnFubywgaGFuZGxlX2xldmVsX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOwotCX0KLQotCWZvciAoaXJxbm8gPSBJUlFfUzNDVUFSVF9SWDI7IGlycW5vIDw9IElSUV9TM0NVQVJUX0VSUjI7IGlycW5vKyspIHsKLQkJaXJxZGJmKCJyZWdpc3RlcmluZyBpcnEgJWQgKHMzYyB1YXJ0MiBpcnEpXG4iLCBpcnFubyk7Ci0JCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfdWFydDIpOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGhhbmRsZV9sZXZlbF9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKLQl9Ci0KLQlmb3IgKGlycW5vID0gSVJRX1RDOyBpcnFubyA8PSBJUlFfQURDOyBpcnFubysrKSB7Ci0JCWlycWRiZigicmVnaXN0ZXJpbmcgaXJxICVkIChzM2MgYWRjIGlycSlcbiIsIGlycW5vKTsKLQkJc2V0X2lycV9jaGlwKGlycW5vLCAmczNjX2lycV9hZGMpOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGhhbmRsZV9lZGdlX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOwotCX0KLQotCWlycWRiZigiczNjMjQxMDogcmVnaXN0ZXJlZCBpbnRlcnJ1cHQgaGFuZGxlcnNcbiIpOwotfQorYXJjaF9pbml0Y2FsbChzM2MyNDEwX2lycV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbWxtNTkwMC5jCmluZGV4IDgxN2UyYzYuLjcyZjJjYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW1sbTU5MDAuYwpAQCAtMSw0ICsxLDQgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW1sbTU5MDAuYwogICoKICAqIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKICAqCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTUyLDggKzUyLDggQEAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSAiZGV2cy5oIgotI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIApAQCAtMTEzLDEyICsxMTMsNiBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgYW1sbTU5MDBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsCT0gKHUzMilTM0MyNFhYX1ZBX1NQSSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfUEFfU1BJKSwKLQkJLmxlbmd0aAkJPSBTWl8xTSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfQogfTsKIAogI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKaW5kZXggYjhiNzY3NS4uN2I4MTI5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYwpAQCAtNTAsOSArNTAsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiZGV2cy5oIgotI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgogI2luY2x1ZGUgInVzYi1zaW10ZWMuaCIKIAogI2RlZmluZSBDT1BZUklHSFQgIiwgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwppbmRleCAxNWI2MjVlLi4wMWM2MGQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKQEAgLTI1LDIzICsyNSwyNCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvbWQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotCiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWxjZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL2gxOTQwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaDE5NDAtbGF0Y2guaD4KICNpbmNsdWRlIDxhc20vYXJjaC9mYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VkYy5oPgogCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJkZXZzLmgiCi0jaW5jbHVkZSAiY3B1LmgiCi0jaW5jbHVkZSAicG0uaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaDE5NDBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CkBAIC0xMDIsNiArMTAzLDMyIEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGgxOTQwX2xhdGNoX2NvbnRyb2wpOwogCitzdGF0aWMgdm9pZCBoMTk0MF91ZGNfcHVsbHVwKGVudW0gczNjMjQxMF91ZGNfY21kX2UgY21kKQoreworCXByaW50ayhLRVJOX0RFQlVHICJ1ZGM6IHB1bGx1cCglZClcbiIsY21kKTsKKworCXN3aXRjaCAoY21kKQorCXsKKwkJY2FzZSBTM0MyNDEwX1VEQ19QX0VOQUJMRSA6CisJCQloMTk0MF9sYXRjaF9jb250cm9sKDAsIEgxOTQwX0xBVENIX1VTQl9EUCk7CisJCQlicmVhazsKKwkJY2FzZSBTM0MyNDEwX1VEQ19QX0RJU0FCTEUgOgorCQkJaDE5NDBfbGF0Y2hfY29udHJvbChIMTk0MF9MQVRDSF9VU0JfRFAsIDApOworCQkJYnJlYWs7CisJCWNhc2UgUzNDMjQxMF9VRENfUF9SRVNFVCA6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VkY19tYWNoX2luZm8gaDE5NDBfdWRjX2NmZyBfX2luaXRkYXRhID0geworCS51ZGNfY29tbWFuZAkJPSBoMTk0MF91ZGNfcHVsbHVwLAorCS52YnVzX3BpbgkJPSBTM0MyNDEwX0dQRzUsCisJLnZidXNfcGluX2ludmVydGVkCT0gMSwKK307CisKKwogCiAvKioKICAqIFNldCBsY2Qgb24gb3Igb2ZmCkBAIC0xNDYsMTIgKzE3MywxOSBAQAogCS5icHA9CQl7MTYsMTYsMTZ9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9sZWRzID0geworCS5uYW1lICAgICAgICAgICAgID0gImgxOTQwLWxlZHMiLAorCS5pZCAgICAgICAgICAgICAgID0gLTEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaDE5NDBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnMzY19kZXZpY2VfdXNiLAogCSZzM2NfZGV2aWNlX2xjZCwKIAkmczNjX2RldmljZV93ZHQsCiAJJnMzY19kZXZpY2VfaTJjLAogCSZzM2NfZGV2aWNlX2lpcywKKwkmczNjX2RldmljZV91c2JnYWRnZXQsCisJJnMzY19kZXZpY2VfbGVkcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9ib2FyZCBoMTk0MF9ib2FyZCBfX2luaXRkYXRhID0gewpAQCAtMTc5LDcgKzIxMywyMyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDE5NDBfaW5pdCh2b2lkKQogeworCXUzMiB0bXA7CisKIAlzM2MyNHh4X2ZiX3NldF9wbGF0ZGF0YSgmaDE5NDBfbGNkY2ZnKTsKKyAJczNjMjR4eF91ZGNfc2V0X3BsYXRkYXRhKCZoMTk0MF91ZGNfY2ZnKTsKKworCS8qIFR1cm4gb2ZmIHN1c3BlbmQgb24gYm90aCBVU0IgcG9ydHMsIGFuZCBzd2l0Y2ggdGhlCisJICogc2VsZWN0YWJsZSBVU0IgcG9ydCB0byBVU0IgZGV2aWNlIG1vZGUuICovCisKKwlzM2MyNDEwX21vZGlmeV9taXNjY3IoUzNDMjQxMF9NSVNDQ1JfVVNCSE9TVCB8CisJCQkgICAgICBTM0MyNDEwX01JU0NDUl9VU0JTVVNQTkQwIHwKKwkJCSAgICAgIFMzQzI0MTBfTUlTQ0NSX1VTQlNVU1BORDEsIDB4MCk7CisKKwl0bXAgPSAoCisJCSAweDc4IDw8IFMzQzI0MTBfUExMQ09OX01ESVZTSElGVCkKKwkgICAgICB8ICgweDAyIDw8IFMzQzI0MTBfUExMQ09OX1BESVZTSElGVCkKKwkgICAgICB8ICgweDAzIDw8IFMzQzI0MTBfUExMQ09OX1NESVZTSElGVCk7CisJd3JpdGVsKHRtcCwgUzNDMjQxMF9VUExMQ09OKTsKIH0KIAogTUFDSElORV9TVEFSVChIMTk0MCwgIklQQVEtSDE5NDAiKQpAQCAtMTg5LDYgKzIzOSw2IEBACiAJLmJvb3RfcGFyYW1zCT0gUzNDMjQxMF9TRFJBTV9QQSArIDB4MTAwLAogCS5tYXBfaW8JCT0gaDE5NDBfbWFwX2lvLAogCS5pbml0X2lycQk9IGgxOTQwX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IGgxOTQwX2luaXQsCisJLmluaXRfbWFjaGluZQk9IGgxOTQwX2luaXQsCiAJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW4zMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMKaW5kZXggMDQxMWU5YS4uMjYxYWE0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb21kLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zOCwxMCArMzcsMTAgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9paWMuaD4KIAotI2luY2x1ZGUgInMzYzI0MTAuaCIKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBuMzBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBub3RoaW5nIGhlcmUgeWV0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKaW5kZXggMmM3MzhiMy4uYzc4YWI3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYwpAQCAtMzIsMTAgKzMyLDEwIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgInMzYzI0MTAuaCIKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvdG9tMTFfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKICAgLyogRGV2aWNlIGFyZWEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcXQyNDEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhNDE1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCkBAIC0wLDAgKzEsNDQ4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBPcGVuTW9rbywgSW5jLgorICogQXV0aG9yOiBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAb3Blbm1va28ub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbGVkcy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9mYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL25hbmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcGkuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcGktZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHF0MjQxMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsgMHhlMDAwMDAwMCwgX19waHlzX3RvX3BmbihTM0MyNDEwX0NTMysweDAxMDAwMDAwKSwgU1pfMU0sIE1UX0RFVklDRSB9Cit9OworCisjZGVmaW5lIFVDT04gUzNDMjQxMF9VQ09OX0RFRkFVTFQKKyNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgorI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGsyNDEwX3VhcnRjZmdzW10gPSB7CisJWzBdID0geworCQkuaHdwb3J0CSAgICAgPSAwLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCX0sCisJWzFdID0geworCQkuaHdwb3J0CSAgICAgPSAxLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCX0sCisJWzJdID0geworCQkuaHdwb3J0CSAgICAgPSAyLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCX0KK307CisKKy8qIExDRCBkcml2ZXIgaW5mbyAqLworCisvKiBDb25maWd1cmF0aW9uIGZvciA2NDB4NDgwIFNIQVJQIExRMDgwVjNERzAxICovCitzdGF0aWMgc3RydWN0IHMzYzI0MTBmYl9tYWNoX2luZm8gcXQyNDEwX2JpZ2xjZF9jZmcgX19pbml0ZGF0YSA9IHsKKwkucmVncwk9IHsKKworCQkubGNkY29uMQk9IFMzQzI0MTBfTENEQ09OMV9URlQxNkJQUCB8CisJCQkJICBTM0MyNDEwX0xDRENPTjFfVEZUIHwKKwkJCQkgIFMzQzI0MTBfTENEQ09OMV9DTEtWQUwoMHgwMSksCS8qIEhDTEsvNCAqLworCisJCS5sY2Rjb24yCT0gUzNDMjQxMF9MQ0RDT04yX1ZCUEQoMTgpIHwJLyogMTkgKi8KKwkJCQkgIFMzQzI0MTBfTENEQ09OMl9MSU5FVkFMKDQ3OSkgfAorCQkJCSAgUzNDMjQxMF9MQ0RDT04yX1ZGUEQoMTApIHwJLyogMTEgKi8KKwkJCQkgIFMzQzI0MTBfTENEQ09OMl9WU1BXKDE0KSwJLyogMTUgKi8KKworCQkubGNkY29uMwk9IFMzQzI0MTBfTENEQ09OM19IQlBEKDQzKSB8CS8qIDQ0ICovCisJCQkJICBTM0MyNDEwX0xDRENPTjNfSE9aVkFMKDYzOSkgfAkvKiA2NDAgKi8KKwkJCQkgIFMzQzI0MTBfTENEQ09OM19IRlBEKDExNSksCS8qIDExNiAqLworCisJCS5sY2Rjb240CT0gUzNDMjQxMF9MQ0RDT040X01WQUwoMCkgfAorCQkJCSAgUzNDMjQxMF9MQ0RDT040X0hTUFcoOTUpLAkvKiA5NiAqLworCisJCS5sY2Rjb241CT0gUzNDMjQxMF9MQ0RDT041X0ZSTTU2NSB8CisJCQkJICBTM0MyNDEwX0xDRENPTjVfSU5WVkxJTkUgfAorCQkJCSAgUzNDMjQxMF9MQ0RDT041X0lOVlZGUkFNRSB8CisJCQkJICBTM0MyNDEwX0xDRENPTjVfUFdSRU4gfAorCQkJCSAgUzNDMjQxMF9MQ0RDT041X0hXU1dQLAorCX0sCisKKwkubHBjc2VsCQk9ICgoMHhDRTYpICYgfjcpIHwgMTw8NCwKKworCS53aWR0aAkJPSA2NDAsCisJLmhlaWdodAkJPSA0ODAsCisKKwkueHJlcwkJPSB7CisJCS5taW4JPSA2NDAsCisJCS5tYXgJPSA2NDAsCisJCS5kZWZ2YWwJPSA2NDAsCisJfSwKKworCS55cmVzCQk9IHsKKwkJLm1pbgk9IDQ4MCwKKwkJLm1heAk9IDQ4MCwKKwkJLmRlZnZhbCA9IDQ4MCwKKwl9LAorCisJLmJwcAkJPSB7CisJCS5taW4JPSAxNiwKKwkJLm1heAk9IDE2LAorCQkuZGVmdmFsID0gMTYsCisJfSwKK307CisKKy8qIENvbmZpZ3VyYXRpb24gZm9yIDQ4MHg2NDAgdG9wcG9seSBURDAyOFRURUMxICovCitzdGF0aWMgc3RydWN0IHMzYzI0MTBmYl9tYWNoX2luZm8gcXQyNDEwX3Byb2RsY2RfY2ZnIF9faW5pdGRhdGEgPSB7CisJLnJlZ3MJPSB7CisKKwkJLmxjZGNvbjEJPSBTM0MyNDEwX0xDRENPTjFfVEZUMTZCUFAgfAorCQkJCSAgUzNDMjQxMF9MQ0RDT04xX1RGVCB8CisJCQkJICBTM0MyNDEwX0xDRENPTjFfQ0xLVkFMKDB4MDEpLAkvKiBIQ0xLLzQgKi8KKworCQkubGNkY29uMgk9IFMzQzI0MTBfTENEQ09OMl9WQlBEKDEpIHwJLyogMiAqLworCQkJCSAgUzNDMjQxMF9MQ0RDT04yX0xJTkVWQUwoNjM5KSB8LyogNjQwICovCisJCQkJICBTM0MyNDEwX0xDRENPTjJfVkZQRCgzKSB8CS8qIDQgKi8KKwkJCQkgIFMzQzI0MTBfTENEQ09OMl9WU1BXKDEpLAkvKiAyICovCisKKwkJLmxjZGNvbjMJPSBTM0MyNDEwX0xDRENPTjNfSEJQRCg3KSB8CS8qIDggKi8KKwkJCQkgIFMzQzI0MTBfTENEQ09OM19IT1pWQUwoNDc5KSB8CS8qIDQ3OSAqLworCQkJCSAgUzNDMjQxMF9MQ0RDT04zX0hGUEQoMjMpLAkvKiAyNCAqLworCisJCS5sY2Rjb240CT0gUzNDMjQxMF9MQ0RDT040X01WQUwoMCkgfAorCQkJCSAgUzNDMjQxMF9MQ0RDT040X0hTUFcoNyksCS8qIDggKi8KKworCQkubGNkY29uNQk9IFMzQzI0MTBfTENEQ09ONV9GUk01NjUgfAorCQkJCSAgUzNDMjQxMF9MQ0RDT041X0lOVlZMSU5FIHwKKwkJCQkgIFMzQzI0MTBfTENEQ09ONV9JTlZWRlJBTUUgfAorCQkJCSAgUzNDMjQxMF9MQ0RDT041X1BXUkVOIHwKKwkJCQkgIFMzQzI0MTBfTENEQ09ONV9IV1NXUCwKKwl9LAorCisJLmxwY3NlbAkJPSAoKDB4Q0U2KSAmIH43KSB8IDE8PDQsCisKKwkud2lkdGgJCT0gNDgwLAorCS5oZWlnaHQJCT0gNjQwLAorCisJLnhyZXMJCT0geworCQkubWluCT0gNDgwLAorCQkubWF4CT0gNDgwLAorCQkuZGVmdmFsCT0gNDgwLAorCX0sCisKKwkueXJlcwkJPSB7CisJCS5taW4JPSA2NDAsCisJCS5tYXgJPSA2NDAsCisJCS5kZWZ2YWwgPSA2NDAsCisJfSwKKworCS5icHAJCT0geworCQkubWluCT0gMTYsCisJCS5tYXgJPSAxNiwKKwkJLmRlZnZhbCA9IDE2LAorCX0sCit9OworCisvKiBDb25maWcgZm9yIDI0MHgzMjAgTENEICovCitzdGF0aWMgc3RydWN0IHMzYzI0MTBmYl9tYWNoX2luZm8gcXQyNDEwX2xjZF9jZmcgX19pbml0ZGF0YSA9IHsKKwkucmVncwk9IHsKKworCQkubGNkY29uMQk9IFMzQzI0MTBfTENEQ09OMV9URlQxNkJQUCB8CisJCQkJICBTM0MyNDEwX0xDRENPTjFfVEZUIHwKKwkJCQkgIFMzQzI0MTBfTENEQ09OMV9DTEtWQUwoMHgwNCksCisKKwkJLmxjZGNvbjIJPSBTM0MyNDEwX0xDRENPTjJfVkJQRCgxKSB8CisJCQkJICBTM0MyNDEwX0xDRENPTjJfTElORVZBTCgzMTkpIHwKKwkJCQkgIFMzQzI0MTBfTENEQ09OMl9WRlBEKDYpIHwKKwkJCQkgIFMzQzI0MTBfTENEQ09OMl9WU1BXKDMpLAorCisJCS5sY2Rjb24zCT0gUzNDMjQxMF9MQ0RDT04zX0hCUEQoMTIpIHwKKwkJCQkgIFMzQzI0MTBfTENEQ09OM19IT1pWQUwoMjM5KSB8CisJCQkJICBTM0MyNDEwX0xDRENPTjNfSEZQRCg3KSwKKworCQkubGNkY29uNAk9IFMzQzI0MTBfTENEQ09ONF9NVkFMKDApIHwKKwkJCQkgIFMzQzI0MTBfTENEQ09ONF9IU1BXKDMpLAorCisJCS5sY2Rjb241CT0gUzNDMjQxMF9MQ0RDT041X0ZSTTU2NSB8CisJCQkJICBTM0MyNDEwX0xDRENPTjVfSU5WVkxJTkUgfAorCQkJCSAgUzNDMjQxMF9MQ0RDT041X0lOVlZGUkFNRSB8CisJCQkJICBTM0MyNDEwX0xDRENPTjVfUFdSRU4gfAorCQkJCSAgUzNDMjQxMF9MQ0RDT041X0hXU1dQLAorCX0sCisKKwkubHBjc2VsCQk9ICgoMHhDRTYpICYgfjcpIHwgMTw8NCwKKworCS53aWR0aAkJPSAyNDAsCisJLmhlaWdodAkJPSAzMjAsCisKKwkueHJlcwkJPSB7CisJCS5taW4JPSAyNDAsCisJCS5tYXgJPSAyNDAsCisJCS5kZWZ2YWwJPSAyNDAsCisJfSwKKworCS55cmVzCQk9IHsKKwkJLm1pbgk9IDMyMCwKKwkJLm1heAk9IDMyMCwKKwkJLmRlZnZhbCA9IDMyMCwKKwl9LAorCisJLmJwcAkJPSB7CisJCS5taW4JPSAxNiwKKwkJLm1heAk9IDE2LAorCQkuZGVmdmFsID0gMTYsCisJfSwKK307CisKKy8qIENTODkwMCAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHF0MjQxMF9jczg5eDBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweDE5MDAwMDAwLAorCQkuZW5kCT0gMHgxOTAwMDAwMCArIDE2LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0VJTlQ5LAorCQkuZW5kCT0gSVJRX0VJTlQ5LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcXQyNDEwX2NzODl4MCA9IHsKKwkubmFtZQkJPSAiY2lycnVzLWNzODl4MCIsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHF0MjQxMF9jczg5eDBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBxdDI0MTBfY3M4OXgwX3Jlc291cmNlcywKK307CisKKy8qIExFRCAqLworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfbGVkX3BsYXRkYXRhIHF0MjQxMF9wZGF0YV9sZWQgPSB7CisJLmdwaW8JCT0gUzNDMjQxMF9HUEIwLAorCS5mbGFncwkJPSBTM0MyNFhYX0xFREZfQUNUTE9XIHwgUzNDMjRYWF9MRURGX1RSSVNUQVRFLAorCS5uYW1lCQk9ICJsZWQiLAorCS5kZWZfdHJpZ2dlcgk9ICJ0aW1lciIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxdDI0MTBfbGVkID0geworCS5uYW1lCQk9ICJzM2MyNHh4X2xlZCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnF0MjQxMF9wZGF0YV9sZWQsCisJfSwKK307CisKKy8qIFNQSSAqLworCitzdGF0aWMgdm9pZCBzcGlfZ3Bpb19jcyhzdHJ1Y3QgczNjMjQxMF9zcGlncGlvX2luZm8gKnNwaSwgaW50IGNzKQoreworCXN3aXRjaCAoY3MpIHsKKwljYXNlIEJJVEJBTkdfQ1NfQUNUSVZFOgorCQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BCNSwgMCk7CisJCWJyZWFrOworCWNhc2UgQklUQkFOR19DU19JTkFDVElWRToKKwkJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQQjUsIDEpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9zcGlncGlvX2luZm8gc3BpX2dwaW9fY2ZnID0geworCS5waW5fY2xrCT0gUzNDMjQxMF9HUEc3LAorCS5waW5fbW9zaQk9IFMzQzI0MTBfR1BHNiwKKwkucGluX21pc28JPSBTM0MyNDEwX0dQRzUsCisJLmNoaXBfc2VsZWN0CT0gJnNwaV9ncGlvX2NzLAorfTsKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxdDI0MTBfc3BpID0geworCS5uYW1lCQkgID0gInMzYzI0eHgtc3BpLWdwaW8iLAorCS5pZAkJICA9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpX2dwaW9fY2ZnLAorCX0sCit9OworCisvKiBCb2FyZCBkZXZpY2VzICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpxdDI0MTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzY19kZXZpY2VfdXNiLAorCSZzM2NfZGV2aWNlX2xjZCwKKwkmczNjX2RldmljZV93ZHQsCisJJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2lpcywKKwkmczNjX2RldmljZV9zZGksCisJJnMzY19kZXZpY2VfdXNiZ2FkZ2V0LAorCSZxdDI0MTBfc3BpLAorCSZxdDI0MTBfY3M4OXgwLAorCSZxdDI0MTBfbGVkLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2JvYXJkIHF0MjQxMF9ib2FyZCBfX2luaXRkYXRhID0geworCS5kZXZpY2VzICAgICAgID0gcXQyNDEwX2RldmljZXMsCisJLmRldmljZXNfY291bnQgPSBBUlJBWV9TSVpFKHF0MjQxMF9kZXZpY2VzKQorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHF0MjQxMF9uYW5kX3BhcnRbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIlUtQm9vdCIsCisJCS5zaXplCT0gMHgzMDAwMCwKKwkJLm9mZnNldAk9IDAsCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCT0gIlUtQm9vdCBlbnZpcm9ubWVudCIsCisJCS5vZmZzZXQgPSAweDMwMDAwLAorCQkuc2l6ZQk9IDB4NDAwMCwKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAia2VybmVsIiwKKwkJLm9mZnNldCA9IDB4MzQwMDAsCisJCS5zaXplCT0gU1pfMk0sCisJfSwKKwlbM10gPSB7CisJCS5uYW1lCT0gImluaXRyZCIsCisJCS5vZmZzZXQJPSAweDIzNDAwMCwKKwkJLnNpemUJPSBTWl80TSwKKwl9LAorCVs0XSA9IHsKKwkJLm5hbWUJPSAiamZmczIiLAorCQkub2Zmc2V0ID0gMHg2MzQwMDAsCisJCS5zaXplCT0gMHgzOWNjMDAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfbmFuZF9zZXQgcXQyNDEwX25hbmRfc2V0c1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gIk5BTkQiLAorCQkubnJfY2hpcHMJPSAxLAorCQkubnJfcGFydGl0aW9ucwk9IEFSUkFZX1NJWkUocXQyNDEwX25hbmRfcGFydCksCisJCS5wYXJ0aXRpb25zCT0gcXQyNDEwX25hbmRfcGFydCwKKwl9LAorfTsKKworLyogY2hvb3NlIGEgc2V0IG9mIHRpbWluZ3Mgd2hpY2ggc2hvdWxkIHN1aXQgbW9zdCA1MTJNYml0CisgKiBjaGlwcyBhbmQgYmV5b25kLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kIHF0MjQxMF9uYW5kX2luZm8gPSB7CisJLnRhY2xzCQk9IDIwLAorCS50d3JwaDAJCT0gNjAsCisJLnR3cnBoMQkJPSAyMCwKKwkubnJfc2V0cwk9IEFSUkFZX1NJWkUocXQyNDEwX25hbmRfc2V0cyksCisJLnNldHMJCT0gcXQyNDEwX25hbmRfc2V0cywKK307CisKKy8qIFVEQyAqLworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWRjX21hY2hfaW5mbyBxdDI0MTBfdWRjX2NmZyA9IHsKK307CisKK3N0YXRpYyBjaGFyIHRmdF90eXBlID0gJ3MnOworCitzdGF0aWMgaW50IF9faW5pdCBxdDI0MTBfdGZ0X3NldHVwKGNoYXIgKnN0cikKK3sKKwl0ZnRfdHlwZSA9IHN0clswXTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgidGZ0PSIsIHF0MjQxMF90ZnRfc2V0dXApOworCitzdGF0aWMgdm9pZCBfX2luaXQgcXQyNDEwX21hcF9pbyh2b2lkKQoreworCXMzYzI0eHhfaW5pdF9pbyhxdDI0MTBfaW9kZXNjLCBBUlJBWV9TSVpFKHF0MjQxMF9pb2Rlc2MpKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDEyKjEwMDAqMTAwMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKHNtZGsyNDEwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHNtZGsyNDEwX3VhcnRjZmdzKSk7CisJczNjMjR4eF9zZXRfYm9hcmQoJnF0MjQxMF9ib2FyZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBxdDI0MTBfbWFjaGluZV9pbml0KHZvaWQpCit7CisJczNjX2RldmljZV9uYW5kLmRldi5wbGF0Zm9ybV9kYXRhID0gJnF0MjQxMF9uYW5kX2luZm87CisKKwlzd2l0Y2ggKHRmdF90eXBlKSB7CisJY2FzZSAncCc6IC8qIHByb2R1Y3Rpb24gKi8KKwkJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJnF0MjQxMF9wcm9kbGNkX2NmZyk7CisJCWJyZWFrOworCWNhc2UgJ2InOiAvKiBiaWcgKi8KKwkJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJnF0MjQxMF9iaWdsY2RfY2ZnKTsKKwkJYnJlYWs7CisJY2FzZSAncyc6IC8qIHNtYWxsICovCisJZGVmYXVsdDoKKwkJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJnF0MjQxMF9sY2RfY2ZnKTsKKwkJYnJlYWs7CisJfQorCisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQQjAsIFMzQzI0MTBfR1BJT19PVVRQVVQpOworCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEIwLCAxKTsKKworCXMzYzI0eHhfdWRjX3NldF9wbGF0ZGF0YSgmcXQyNDEwX3VkY19jZmcpOworCisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQQjUsIFMzQzI0MTBfR1BJT19PVVRQVVQpOworCisJczNjMjQxMF9wbV9pbml0KCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoUVQyNDEwLCAiUVQyNDEwIikKKwkucGh5c19pbwk9IFMzQzI0MTBfUEFfVUFSVCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDMjRYWF9WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUzNDMjQxMF9TRFJBTV9QQSArIDB4MTAwLAorCS5tYXBfaW8JCT0gcXQyNDEwX21hcF9pbywKKwkuaW5pdF9pcnEJPSBzM2MyNHh4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBxdDI0MTBfbWFjaGluZV9pbml0LAorCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKK01BQ0hJTkVfRU5ECisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKaW5kZXggMDFjMGM5OC4uNTdiOGE4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCkBAIC0xLDQgKzEsNCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCiAgKgogICogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwogICoKQEAgLTQ5LDEwICs0OSwxMCBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KIAotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgogCi0jaW5jbHVkZSAiY29tbW9uLXNtZGsuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc21kazI0MTBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKICAgLyogbm90aGluZyBoZXJlIHlldCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYwppbmRleCBhMzgyZmMwLi5jOTQ3Yzc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYwpAQCAtNDMsOSArNDMsOSBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2xlZHMtZ3Bpby5oPgogCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJkZXZzLmgiCi0jaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CiAjaW5jbHVkZSAidXNiLXNpbXRlYy5oIgogCiAvKiBtYWNyb3MgZm9yIHZpcnR1YWwgYWRkcmVzcyBtb2RzIGZvciB0aGUgaW8gc3BhY2UgZW50cmllcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwppbmRleCBlYmYyOTRkLi4zYjNhN2RiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwpAQCAtMSwxMSArMSw5IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKLSAqIFMzQzI0WFggUG93ZXIgTWFuYWdlciAoU3VzcGVuZC1Uby1SQU0pIHN1cHBvcnQKLSAqCi0gKiBTZWUgRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uCisgKiBTM0MyNDEwIChhbmQgY29tcGF0aWJsZSkgUG93ZXIgTWFuYWdlciAoU3VzcGVuZC1Uby1SQU0pIHN1cHBvcnQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIwLDY0MCArMTgsMTM5IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKiBQYXJ0cyBiYXNlZCBvbiBhcmNoL2FybS9tYWNoLXB4YS9wbS5jCi0gKgotICogVGhhbmtzIHRvIERpbWl0cnkgQW5kcmljIGZvciBkZWJ1Z2dpbmcKICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCi0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1lbS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaDE5NDAuaD4KIAotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLQotI2luY2x1ZGUgInBtLmgiCi0KLS8qIGZvciBleHRlcm5hbCB1c2UgKi8KLQotdW5zaWduZWQgbG9uZyBzM2NfcG1fZmxhZ3M7Ci0KLSNkZWZpbmUgUEZYICJzM2MyNHh4LXBtOiAiCi0KLXN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBjb3JlX3NhdmVbXSA9IHsKLQlTQVZFX0lURU0oUzNDMjQxMF9MT0NLVElNRSksCi0JU0FWRV9JVEVNKFMzQzI0MTBfQ0xLQ09OKSwKLQotCS8qIHdlIHJlc3RvcmUgdGhlIHRpbWluZ3MgaGVyZSwgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IHRoZSBib2FyZAotCSAqIGJyaW5ncyB0aGUgc3lzdGVtIHVwIGluIGFuIHNsb3dlciwgb3IgZXF1YWwgZnJlcXVlbmN5IHNldHRpbmcKLQkgKiB0byB0aGUgb3JpZ2luYWwgc3lzdGVtLgotCSAqCi0JICogaWYgd2UgY2Fubm90IGd1YXJhbnRlZSB0aGlzLCB0aGVuIHRoaW5ncyBhcmUgZ29pbmcgdG8gZ28gdmVyeQotCSAqIHdyb25nIGhlcmUsIGFzIHdlIG1vZGlmeSB0aGUgcmVmcmVzaCBhbmQgYm90aCBwbGwgc2V0dGluZ3MuCi0JICovCi0KLQlTQVZFX0lURU0oUzNDMjQxMF9CV1NDT04pLAotCVNBVkVfSVRFTShTM0MyNDEwX0JBTktDT04wKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9CQU5LQ09OMSksCi0JU0FWRV9JVEVNKFMzQzI0MTBfQkFOS0NPTjIpLAotCVNBVkVfSVRFTShTM0MyNDEwX0JBTktDT04zKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9CQU5LQ09ONCksCi0JU0FWRV9JVEVNKFMzQzI0MTBfQkFOS0NPTjUpLAotCi0JU0FWRV9JVEVNKFMzQzI0MTBfQ0xLRElWTiksCi0JU0FWRV9JVEVNKFMzQzI0MTBfTVBMTENPTiksCi0JU0FWRV9JVEVNKFMzQzI0MTBfVVBMTENPTiksCi0JU0FWRV9JVEVNKFMzQzI0MTBfQ0xLU0xPVyksCi0JU0FWRV9JVEVNKFMzQzI0MTBfUkVGUkVTSCksCi19OwotCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgZ3Bpb19zYXZlW10gPSB7Ci0JU0FWRV9JVEVNKFMzQzI0MTBfR1BBQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9HUEFEQVQpLAotCi0JU0FWRV9JVEVNKFMzQzI0MTBfR1BCQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9HUEJEQVQpLAotCVNBVkVfSVRFTShTM0MyNDEwX0dQQlVQKSwKLQotCVNBVkVfSVRFTShTM0MyNDEwX0dQQ0NPTiksCi0JU0FWRV9JVEVNKFMzQzI0MTBfR1BDREFUKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9HUENVUCksCi0KLQlTQVZFX0lURU0oUzNDMjQxMF9HUERDT04pLAotCVNBVkVfSVRFTShTM0MyNDEwX0dQRERBVCksCi0JU0FWRV9JVEVNKFMzQzI0MTBfR1BEVVApLAotCi0JU0FWRV9JVEVNKFMzQzI0MTBfR1BFQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9HUEVEQVQpLAotCVNBVkVfSVRFTShTM0MyNDEwX0dQRVVQKSwKLQotCVNBVkVfSVRFTShTM0MyNDEwX0dQRkNPTiksCi0JU0FWRV9JVEVNKFMzQzI0MTBfR1BGREFUKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9HUEZVUCksCi0KLQlTQVZFX0lURU0oUzNDMjQxMF9HUEdDT04pLAotCVNBVkVfSVRFTShTM0MyNDEwX0dQR0RBVCksCi0JU0FWRV9JVEVNKFMzQzI0MTBfR1BHVVApLAotCi0JU0FWRV9JVEVNKFMzQzI0MTBfR1BIQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9HUEhEQVQpLAotCVNBVkVfSVRFTShTM0MyNDEwX0dQSFVQKSwKLQotCVNBVkVfSVRFTShTM0MyNDEwX0RDTEtDT04pLAotfTsKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KIAogI2lmZGVmIENPTkZJR19TM0MyNDEwX1BNX0RFQlVHCi0KLSNkZWZpbmUgU0FWRV9VQVJUKHZhKSBcCi0JU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VMQ09OKSwgXAotCVNBVkVfSVRFTSgodmEpICsgUzNDMjQxMF9VQ09OKSwgXAotCVNBVkVfSVRFTSgodmEpICsgUzNDMjQxMF9VRkNPTiksIFwKLQlTQVZFX0lURU0oKHZhKSArIFMzQzI0MTBfVU1DT04pLCBcCi0JU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VCUkRJVikKLQotc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIHVhcnRfc2F2ZVtdID0gewotCVNBVkVfVUFSVChTM0MyNFhYX1ZBX1VBUlQwKSwKLQlTQVZFX1VBUlQoUzNDMjRYWF9WQV9VQVJUMSksCi0jaWZuZGVmIENPTkZJR19DUFVfUzNDMjQwMAotCVNBVkVfVUFSVChTM0MyNFhYX1ZBX1VBUlQyKSwKLSNlbmRpZgotfTsKLQotLyogZGVidWcKLSAqCi0gKiB3ZSBzZW5kIHRoZSBkZWJ1ZyB0byBwcmludGFzY2lpKCkgdG8gYWxsb3cgaXQgdG8gYmUgc2VlbiBpZiB0aGUKLSAqIHN5c3RlbSBuZXZlciB3YWtlcyB1cCBmcm9tIHRoZSBzbGVlcAotKi8KLQotZXh0ZXJuIHZvaWQgcHJpbnRhc2NpaShjb25zdCBjaGFyICopOwotCi12b2lkIHBtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0IHZhOwotCWNoYXIgYnVmZlsyNTZdOwotCi0JdmFfc3RhcnQodmEsIGZtdCk7Ci0JdnNwcmludGYoYnVmZiwgZm10LCB2YSk7Ci0JdmFfZW5kKHZhKTsKLQotCXByaW50YXNjaWkoYnVmZik7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fZGVidWdfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdG1wID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtDT04pOwotCi0JLyogcmUtc3RhcnQgdWFydCBjbG9ja3MgKi8KLQl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDA7Ci0JdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQxOwotCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMjsKLQotCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzI0MTBfQ0xLQ09OKTsKLQl1ZGVsYXkoMTApOwotfQotCitleHRlcm4gdm9pZCBwbV9kYmcoY29uc3QgY2hhciAqZm10LCAuLi4pOwogI2RlZmluZSBEQkcoZm10Li4uKSBwbV9kYmcoZm10KQogI2Vsc2UKICNkZWZpbmUgREJHKGZtdC4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm10KQotCi0jZGVmaW5lIHMzYzI0MTBfcG1fZGVidWdfaW5pdCgpIGRvIHsgfSB3aGlsZSgwKQotCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgdWFydF9zYXZlW10gPSB7fTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfUzNDMjQxMF9QTV9DSEVDSykgJiYgQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFICE9IDAKLQotLyogc3VzcGVuZCBjaGVja2luZyBjb2RlLi4uCi0gKgotICogdGhpcyBuZXh0IGFyZWEgZG9lcyBhIHNldCBvZiBjcmMgY2hlY2tzIG92ZXIgYWxsIHRoZSBpbnN0YWxsZWQKLSAqIG1lbW9yeSwgc28gdGhlIHN5c3RlbSBjYW4gdmVyaWZ5IGlmIHRoZSByZXN1bWUgd2FzIG9rLgotICoKLSAqIENPTkZJR19TM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRSBkZWZpbmVzIHRoZSBibG9jay1zaXplIGZvciB0aGUgQ1JDLAotICogaW5jcmVhc2luZyBpdCB3aWxsIG1lYW4gdGhhdCB0aGUgYXJlYSBjb3JydXB0ZWQgd2lsbCBiZSBsZXNzIGVhc3kgdG8gc3BvdCwKLSAqIGFuZCByZWR1Y2luZyB0aGUgc2l6ZSB3aWxsIGNhdXNlIHRoZSBDUkMgc2F2ZSBhcmVhIHRvIGdyb3cKLSovCi0KLSNkZWZpbmUgQ0hFQ0tfQ0hVTktTSVpFIChDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgKiAxMDI0KQotCi1zdGF0aWMgdTMyIGNyY19zaXplOwkvKiBzaXplIG5lZWRlZCBmb3IgdGhlIGNyYyBibG9jayAqLwotc3RhdGljIHUzMiAqY3JjczsJLyogYWxsb2NhdGVkIG92ZXIgc3VzcGVuZC9yZXN1bWUgKi8KLQotdHlwZWRlZiB1MzIgKihydW5fZm5fdCkoc3RydWN0IHJlc291cmNlICpwdHIsIHUzMiAqYXJnKTsKLQotLyogczNjMjQxMF9wbV9ydW5fcmVzCi0gKgotICogZ28gdGhvcnVnaCB0aGUgZ2l2ZW4gcmVzb3VyY2UgbGlzdCwgYW5kIGxvb2sgZm9yIHN5c3RlbSByYW0KLSovCi0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fcnVuX3JlcyhzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgcnVuX2ZuX3QgZm4sIHUzMiAqYXJnKQorc3RhdGljIHZvaWQgczNjMjQxMF9wbV9wcmVwYXJlKHZvaWQpCiB7Ci0Jd2hpbGUgKHB0ciAhPSBOVUxMKSB7Ci0JCWlmIChwdHItPmNoaWxkICE9IE5VTEwpCi0JCQlzM2MyNDEwX3BtX3J1bl9yZXMocHRyLT5jaGlsZCwgZm4sIGFyZyk7CisJLyogZW5zdXJlIGF0IGxlYXN0IEdTVEFUVVMzIGhhcyB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KIAotCQlpZiAoKHB0ci0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKLQkJICAgIHN0cmNtcChwdHItPm5hbWUsICJTeXN0ZW0gUkFNIikgPT0gMCkgewotCQkJREJHKCJGb3VuZCBzeXN0ZW0gUkFNIGF0ICUwOGx4Li4lMDhseFxuIiwKLQkJCSAgICBwdHItPnN0YXJ0LCBwdHItPmVuZCk7Ci0JCQlhcmcgPSAoZm4pKHB0ciwgYXJnKTsKLQkJfQorCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoczNjMjQxMF9jcHVfcmVzdW1lKSwgUzNDMjQxMF9HU1RBVFVTMyk7CiAKLQkJcHRyID0gcHRyLT5zaWJsaW5nOwotCX0KLX0KKwlEQkcoIkdTVEFUVVMzIDB4JTA4eFxuIiwgX19yYXdfcmVhZGwoUzNDMjQxMF9HU1RBVFVTMykpOworCURCRygiR1NUQVRVUzQgMHglMDh4XG4iLCBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVM0KSk7CiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fcnVuX3N5c3JhbShydW5fZm5fdCBmbiwgdTMyICphcmcpCi17Ci0JczNjMjQxMF9wbV9ydW5fcmVzKCZpb21lbV9yZXNvdXJjZSwgZm4sIGFyZyk7Ci19CisJaWYgKG1hY2hpbmVfaXNfaDE5NDAoKSkgeworCQl2b2lkICpiYXNlID0gcGh5c190b192aXJ0KEgxOTQwX1NVU1BFTkRfQ0hFQ0spOworCQl1bnNpZ25lZCBsb25nIHB0cjsKKwkJdW5zaWduZWQgbG9uZyBjYWxjID0gMDsKIAotc3RhdGljIHUzMiAqczNjMjQxMF9wbV9jb3VudHJhbShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCi17Ci0JdTMyIHNpemUgPSAodTMyKShyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKzE7CisJCS8qIGdlbmVyYXRlIGNoZWNrIGZvciB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBvbiByZXN1bWUgKi8KIAotCXNpemUgKz0gQ0hFQ0tfQ0hVTktTSVpFLTE7Ci0Jc2l6ZSAvPSBDSEVDS19DSFVOS1NJWkU7CisJCWZvciAocHRyID0gMDsgcHRyIDwgMHg0MDAwMDsgcHRyICs9IDB4NDAwKQorCQkJY2FsYyArPSBfX3Jhd19yZWFkbChiYXNlK3B0cik7CiAKLQlEQkcoIkFyZWEgJTA4bHguLiUwOGx4LCAlZCBibG9ja3NcbiIsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCBzaXplKTsKLQotCSp2YWwgKz0gc2l6ZSAqIHNpemVvZih1MzIpOwotCXJldHVybiB2YWw7Ci19Ci0KLS8qIHMzYzI0MTBfcG1fcHJlcGFyZV9jaGVjawotICoKLSAqIHByZXBhcmUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgY3JlYXRpbmcgdGhlIENSQ3MuIFRoaXMKLSAqIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIGZpbmFsIHNhdmUsIGFzIGl0IHdpbGwgcmVxdWlyZSBtZW1vcnkKLSAqIGFsbG9jYXRpbmcsIGFuZCB0aHVzIHRvdWNoaW5nIGJpdHMgb2YgdGhlIGtlcm5lbCB3ZSBkbyBub3QKLSAqIGtub3cgYWJvdXQuCi0qLwotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUodm9pZCkKLXsKLQljcmNfc2l6ZSA9IDA7Ci0KLQlzM2MyNDEwX3BtX3J1bl9zeXNyYW0oczNjMjQxMF9wbV9jb3VudHJhbSwgJmNyY19zaXplKTsKLQotCURCRygiczNjMjQxMF9wbV9wcmVwYXJlX2NoZWNrOiAldSBjaGVja3MgbmVlZGVkXG4iLCBjcmNfc2l6ZSk7Ci0KLQljcmNzID0ga21hbGxvYyhjcmNfc2l6ZSs0LCBHRlBfS0VSTkVMKTsKLQlpZiAoY3JjcyA9PSBOVUxMKQotCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBhbGxvY2F0ZWQgQ1JDIHNhdmUgYXJlYVxuIik7Ci19Ci0KLXN0YXRpYyB1MzIgKnMzYzI0MTBfcG1fbWFrZWNoZWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIsIGxlZnQ7Ci0KLQlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7Ci0JICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgewotCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOwotCi0JCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQotCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKLQotCQkqdmFsID0gY3JjMzJfbGUofjAsIHBoeXNfdG9fdmlydChhZGRyKSwgbGVmdCk7Ci0JCXZhbCsrOworCQlfX3Jhd193cml0ZWwoY2FsYywgcGh5c190b192aXJ0KEgxOTQwX1NVU1BFTkRfQ0hFQ0tTVU0pKTsKIAl9CiAKLQlyZXR1cm4gdmFsOworCS8qIHRoZSBSWDM3MTUgdXNlcyBzaW1pbGFyIGNvZGUgYW5kIHRoZSBzYW1lIEgxOTQwIGFuZCB0aGUKKwkgKiBzYW1lIG9mZnNldHMgZm9yIHJlc3VtZSBhbmQgY2hlY2tzdW0gcG9pbnRlcnMgKi8KKworCWlmIChtYWNoaW5lX2lzX3J4MzcxNSgpKSB7CisJCXZvaWQgKmJhc2UgPSBwaHlzX3RvX3ZpcnQoSDE5NDBfU1VTUEVORF9DSEVDSyk7CisJCXVuc2lnbmVkIGxvbmcgcHRyOworCQl1bnNpZ25lZCBsb25nIGNhbGMgPSAwOworCisJCS8qIGdlbmVyYXRlIGNoZWNrIGZvciB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBvbiByZXN1bWUgKi8KKworCQlmb3IgKHB0ciA9IDA7IHB0ciA8IDB4NDAwMDA7IHB0ciArPSAweDQpCisJCQljYWxjICs9IF9fcmF3X3JlYWRsKGJhc2UrcHRyKTsKKworCQlfX3Jhd193cml0ZWwoY2FsYywgcGh5c190b192aXJ0KEgxOTQwX1NVU1BFTkRfQ0hFQ0tTVU0pKTsKKwl9CisKKwlpZiAoIG1hY2hpbmVfaXNfYW1sX201OTAwKCkgKQorCQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGMiwgMSk7CisKIH0KIAotLyogczNjMjQxMF9wbV9jaGVja19zdG9yZQotICoKLSAqIGNvbXB1dGUgdGhlIENSQyB2YWx1ZXMgZm9yIHRoZSBtZW1vcnkgYmxvY2tzIGJlZm9yZSB0aGUgZmluYWwKLSAqIHNsZWVwLgotKi8KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jaGVja19zdG9yZSh2b2lkKQorc3RhdGljIGludCBzM2MyNDEwX3BtX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQogewotCWlmIChjcmNzICE9IE5VTEwpCi0JCXMzYzI0MTBfcG1fcnVuX3N5c3JhbShzM2MyNDEwX3BtX21ha2VjaGVjaywgY3Jjcyk7Ci19CisJdW5zaWduZWQgbG9uZyB0bXA7CiAKLS8qIGluX3JlZ2lvbgotICoKLSAqIHJldHVybiBUUlVFIGlmIHRoZSBhcmVhIGRlZmluZWQgYnkgcHRyLi5wdHIrc2l6ZSBjb250YXRpbnMgdGhlCi0gKiB3aGF0Li53aGF0K3doYXRzegotKi8KKwkvKiB1bnNldCB0aGUgcmV0dXJuLWZyb20tc2xlZXAgZmxhZywgdG8gZW5zdXJlIHJlc2V0ICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGluX3JlZ2lvbih2b2lkICpwdHIsIGludCBzaXplLCB2b2lkICp3aGF0LCBzaXplX3Qgd2hhdHN6KQotewotCWlmICgod2hhdCt3aGF0c3opIDwgcHRyKQotCQlyZXR1cm4gMDsKKwl0bXAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVMyKTsKKwl0bXAgJj0gUzNDMjQxMF9HU1RBVFVTMl9PRkZSRVNFVDsKKwlfX3Jhd193cml0ZWwodG1wLCBTM0MyNDEwX0dTVEFUVVMyKTsKIAotCWlmICh3aGF0ID4gKHB0citzaXplKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHUzMiAqczNjMjQxMF9wbV9ydW5jaGVjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCi17Ci0Jdm9pZCAqc2F2ZV9hdCA9IHBoeXNfdG9fdmlydChzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cyk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGxvbmcgbGVmdDsKLQl2b2lkICpwdHI7Ci0JdTMyIGNhbGM7Ci0KLQlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7Ci0JICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgewotCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOwotCi0JCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQotCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKLQotCQlwdHIgPSBwaHlzX3RvX3ZpcnQoYWRkcik7Ci0KLQkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIGNyY3MsIGNyY19zaXplKSkgewotCQkJREJHKCJza2lwcGluZyAlMDhseCwgaGFzIGNyYyBibG9jayBpblxuIiwgYWRkcik7Ci0JCQlnb3RvIHNraXBfY2hlY2s7Ci0JCX0KLQotCQlpZiAoaW5fcmVnaW9uKHB0ciwgbGVmdCwgc2F2ZV9hdCwgMzIqNCApKSB7Ci0JCQlEQkcoInNraXBwaW5nICUwOGx4LCBoYXMgc2F2ZSBibG9jayBpblxuIiwgYWRkcik7Ci0JCQlnb3RvIHNraXBfY2hlY2s7Ci0JCX0KLQotCQkvKiBjYWxjdWxhdGUgYW5kIGNoZWNrIHRoZSBjaGVja3N1bSAqLwotCi0JCWNhbGMgPSBjcmMzMl9sZSh+MCwgcHRyLCBsZWZ0KTsKLQkJaWYgKGNhbGMgIT0gKnZhbCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUmVzdG9yZSBDUkMgZXJyb3IgYXQgIgotCQkJICAgICAgICIlMDhseCAoJTA4eCB2cyAlMDh4KVxuIiwgYWRkciwgY2FsYywgKnZhbCk7Ci0KLQkJCURCRygiUmVzdG9yZSBDUkMgZXJyb3IgYXQgJTA4bHggKCUwOHggdnMgJTA4eClcbiIsCi0JCQkgICAgYWRkciwgY2FsYywgKnZhbCk7Ci0JCX0KLQotCXNraXBfY2hlY2s6Ci0JCXZhbCsrOwotCX0KLQotCXJldHVybiB2YWw7Ci19Ci0KLS8qIHMzYzI0MTBfcG1fY2hlY2tfcmVzdG9yZQotICoKLSAqIGNoZWNrIHRoZSBDUkNzIGFmdGVyIHRoZSByZXN0b3JlIGV2ZW50IGFuZCBmcmVlIHRoZSBtZW1vcnkgdXNlZAotICogdG8gaG9sZCB0aGVtCi0qLwotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NoZWNrX3Jlc3RvcmUodm9pZCkKLXsKLQlpZiAoY3JjcyAhPSBOVUxMKSB7Ci0JCXMzYzI0MTBfcG1fcnVuX3N5c3JhbShzM2MyNDEwX3BtX3J1bmNoZWNrLCBjcmNzKTsKLQkJa2ZyZWUoY3Jjcyk7Ci0JCWNyY3MgPSBOVUxMOwotCX0KLX0KLQotI2Vsc2UKLQotI2RlZmluZSBzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUoKSBkbyB7IH0gd2hpbGUoMCkKLSNkZWZpbmUgczNjMjQxMF9wbV9jaGVja19yZXN0b3JlKCkgZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIHMzYzI0MTBfcG1fY2hlY2tfc3RvcmUoKSAgIGRvIHsgfSB3aGlsZSgwKQotI2VuZGlmCi0KLS8qIGhlbHBlciBmdW5jdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlciBzdGF0ZSAqLwotCi12b2lkIHMzYzI0MTBfcG1fZG9fc2F2ZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpCi17Ci0JZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcHRyKyspIHsKLQkJcHRyLT52YWwgPSBfX3Jhd19yZWFkbChwdHItPnJlZyk7Ci0JCURCRygic2F2ZWQgJXAgdmFsdWUgJTA4bHhcbiIsIHB0ci0+cmVnLCBwdHItPnZhbCk7Ci0JfQotfQotCi0vKiBzM2MyNDEwX3BtX2RvX3Jlc3RvcmUKLSAqCi0gKiByZXN0b3JlIHRoZSBzeXN0ZW0gZnJvbSB0aGUgZ2l2ZW4gbGlzdCBvZiBzYXZlZCByZWdpc3RlcnMKLSAqCi0gKiBOb3RlLCB3ZSBkbyBub3QgdXNlIERCRygpIGluIGhlcmUsIGFzIHRoZSBzeXN0ZW0gbWF5IG5vdCBoYXZlCi0gKiByZXN0b3JlIHRoZSBVQVJUcyBzdGF0ZSB5ZXQKLSovCi0KLXZvaWQgczNjMjQxMF9wbV9kb19yZXN0b3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKLXsKLQlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgewotCQlwcmludGsoS0VSTl9ERUJVRyAicmVzdG9yZSAlcCAocmVzdG9yZSAlMDhseCwgd2FzICUwOHgpXG4iLAotCQkgICAgICAgcHRyLT5yZWcsIHB0ci0+dmFsLCBfX3Jhd19yZWFkbChwdHItPnJlZykpOwotCi0JCV9fcmF3X3dyaXRlbChwdHItPnZhbCwgcHRyLT5yZWcpOwotCX0KLX0KLQotLyogczNjMjQxMF9wbV9kb19yZXN0b3JlX2NvcmUKLSAqCi0gKiBzaW1pbGFyIHRvIHMzYzI0MTBfcG1fZG9fcmVzdG9yZV9jb3JlCi0gKgotICogV0FSTklORzogRG8gbm90IHB1dCBhbnkgZGVidWcgaW4gaGVyZSB0aGF0IG1heSBlZmZlY3QgbWVtb3J5IG9yIHVzZQotICogcGVyaXBoZXJhbHMsIGFzIHRoaW5ncyBtYXkgYmUgY2hhbmdpbmchCi0qLwotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2RvX3Jlc3RvcmVfY29yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpCi17Ci0JZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcHRyKyspIHsKLQkJX19yYXdfd3JpdGVsKHB0ci0+dmFsLCBwdHItPnJlZyk7Ci0JfQotfQotCi0vKiBzM2MyNDEwX3BtX3Nob3dfcmVzdW1lX2lycXMKLSAqCi0gKiBwcmludCBhbnkgSVJRcyBhc3NlcnRlZCBhdCByZXN1bWUgdGltZSAoaWUsIHdlIHdva2UgZnJvbSkKLSovCi0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fc2hvd19yZXN1bWVfaXJxcyhpbnQgc3RhcnQsIHVuc2lnbmVkIGxvbmcgd2hpY2gsCi0JCQkJCXVuc2lnbmVkIGxvbmcgbWFzaykKLXsKLQlpbnQgaTsKLQotCXdoaWNoICY9IH5tYXNrOwotCi0JZm9yIChpID0gMDsgaSA8PSAzMTsgaSsrKSB7Ci0JCWlmICgod2hpY2gpICYgKDFMPDxpKSkgewotCQkJREJHKCJJUlEgJWQgYXNzZXJ0ZWQgYXQgcmVzdW1lXG4iLCBzdGFydCtpKTsKLQkJfQotCX0KLX0KLQotLyogczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluCi0gKgotICogY2hlY2sgdG8gc2VlIGlmIHRoZSBwaW4gaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHNsZWVwIG1vZGUsIGFuZAotICogbWFrZSBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIGlmIGl0IGlzIG5vdAotKi8KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBpcnFvZmZzKQotewotCXVuc2lnbmVkIGxvbmcgaXJxc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBwaW5zdGF0ZTsKLQlpbnQgaXJxID0gczNjMjQxMF9ncGlvX2dldGlycShwaW4pOwotCi0JaWYgKGlycW9mZnMgPCA0KQotCQlpcnFzdGF0ZSA9IHMzY19pcnF3YWtlX2ludG1hc2sgJiAoMUw8PGlycW9mZnMpOwotCWVsc2UKLQkJaXJxc3RhdGUgPSBzM2NfaXJxd2FrZV9laW50bWFzayAmICgxTDw8aXJxb2Zmcyk7Ci0KLQlwaW5zdGF0ZSA9IHMzYzI0MTBfZ3Bpb19nZXRjZmcocGluKTsKLQotCWlmICghaXJxc3RhdGUpIHsKLQkJaWYgKHBpbnN0YXRlID09IFMzQzI0MTBfR1BJT19JUlEpCi0JCQlEQkcoIkxlYXZpbmcgSVJRICVkIChwaW4gJWQpIGVuYWJsZWRcbiIsIGlycSwgcGluKTsKLQl9IGVsc2UgewotCQlpZiAocGluc3RhdGUgPT0gUzNDMjQxMF9HUElPX0lSUSkgewotCQkJREJHKCJEaXNhYmxpbmcgSVJRICVkIChwaW4gJWQpXG4iLCBpcnEsIHBpbik7Ci0JCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBpbiwgUzNDMjQxMF9HUElPX0lOUFVUKTsKLQkJfQotCX0KLX0KLQotLyogczNjMjQxMF9wbV9jb25maWd1cmVfZXh0aW50Ci0gKgotICogY29uZmlndXJlIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHQgcGlucwotKi8KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jb25maWd1cmVfZXh0aW50KHZvaWQpCi17Ci0JaW50IHBpbjsKLQotCS8qIGZvciBlYWNoIG9mIHRoZSBleHRlcm5hbCBpbnRlcnJ1cHRzIChFSU5UMC4uRUlOVDE1KSB3ZQotCSAqIG5lZWQgdG8gY2hlY2sgd2V0aGVyIGl0IGlzIGFuIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2UsCi0JICogYW5kIHRoZW4gY29uZmlndXJlIGl0IGFzIGFuIGlucHV0IGlmIGl0IGlzIG5vdAotCSovCi0KLQlmb3IgKHBpbiA9IFMzQzI0MTBfR1BGMDsgcGluIDw9IFMzQzI0MTBfR1BGNzsgcGluKyspIHsKLQkJczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluKHBpbiwgcGluIC0gUzNDMjQxMF9HUEYwKTsKLQl9Ci0KLQlmb3IgKHBpbiA9IFMzQzI0MTBfR1BHMDsgcGluIDw9IFMzQzI0MTBfR1BHNzsgcGluKyspIHsKLQkJczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluKHBpbiwgKHBpbiAtIFMzQzI0MTBfR1BHMCkrOCk7Ci0JfQotfQotCi12b2lkICgqcG1fY3B1X3ByZXApKHZvaWQpOwotdm9pZCAoKnBtX2NwdV9zbGVlcCkodm9pZCk7Ci0KLSNkZWZpbmUgYW55X2FsbG93ZWQobWFzaywgYWxsb3cpICgoKG1hc2spICYgKGFsbG93KSkgIT0gKGFsbG93KSkKLQotLyogczNjMjQxMF9wbV9lbnRlcgotICoKLSAqIGNlbnRyYWwgY29udHJvbCBmb3Igc2xlZXAvcmVzdW1lIHByb2Nlc3MKLSovCi0KLXN0YXRpYyBpbnQgczNjMjQxMF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyByZWdzX3NhdmVbMTZdOwotCi0JLyogZW5zdXJlIHRoZSBkZWJ1ZyBpcyBpbml0aWFsaXNlZCAoaWYgZW5hYmxlZCkgKi8KLQotCXMzYzI0MTBfcG1fZGVidWdfaW5pdCgpOwotCi0JREJHKCJzM2MyNDEwX3BtX2VudGVyKCVkKVxuIiwgc3RhdGUpOwotCi0JaWYgKHBtX2NwdV9wcmVwID09IE5VTEwgfHwgcG1fY3B1X3NsZWVwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXJyb3I6IG5vIGNwdSBzbGVlcCBmdW5jdGlvbnMgc2V0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfTUVNKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVycm9yOiBvbmx5IFBNX1NVU1BFTkRfTUVNIHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55dGhpbmcgdG8gd2FrZS11cCB3aXRoLi4uIGJhZCB0aGluZ3Mgc2VlbQotCSAqIHRvIGhhcHBlbiBpZiB5b3Ugc3VzcGVuZCB3aXRoIG5vIHdha2V1cCAoc3lzdGVtIHdpbGwgb2Z0ZW4KLQkgKiByZXF1aXJlIGEgZnVsbCBwb3dlci1jeWNsZSkKLQkqLwotCi0JaWYgKCFhbnlfYWxsb3dlZChzM2NfaXJxd2FrZV9pbnRtYXNrLCBzM2NfaXJxd2FrZV9pbnRhbGxvdykgJiYKLQkgICAgIWFueV9hbGxvd2VkKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBzM2NfaXJxd2FrZV9laW50YWxsb3cpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIHNvdXJjZXMgZW5hYmxlZCBmb3Igd2FrZS11cCFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJBYm9ydGluZyBzbGVlcFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIHByZXBhcmUgY2hlY2sgYXJlYSBpZiBjb25maWd1cmVkICovCi0KLQlzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUoKTsKLQotCS8qIHN0b3JlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciByZWNvdmVyeSBibG9jayAqLwotCi0JczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMgPSB2aXJ0X3RvX3BoeXMocmVnc19zYXZlKTsKLQotCURCRygiczNjMjQxMF9zbGVlcF9zYXZlX3BoeXM9MHglMDhseFxuIiwgczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMpOwotCi0JLyogc2F2ZSBhbGwgbmVjZXNzYXJ5IGNvcmUgcmVnaXN0ZXJzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBkcml2ZXJzICovCi0KLQlzM2MyNDEwX3BtX2RvX3NhdmUoZ3Bpb19zYXZlLCBBUlJBWV9TSVpFKGdwaW9fc2F2ZSkpOwotCXMzYzI0MTBfcG1fZG9fc2F2ZShjb3JlX3NhdmUsIEFSUkFZX1NJWkUoY29yZV9zYXZlKSk7Ci0JczNjMjQxMF9wbV9kb19zYXZlKHVhcnRfc2F2ZSwgQVJSQVlfU0laRSh1YXJ0X3NhdmUpKTsKLQotCS8qIHNldCB0aGUgaXJxIGNvbmZpZ3VyYXRpb24gZm9yIHdha2UgKi8KLQotCXMzYzI0MTBfcG1fY29uZmlndXJlX2V4dGludCgpOwotCi0JREJHKCJzbGVlcDogaXJxIHdha2V1cCBtYXNrczogJTA4bHgsJTA4bHhcbiIsCi0JICAgIHMzY19pcnF3YWtlX2ludG1hc2ssIHMzY19pcnF3YWtlX2VpbnRtYXNrKTsKLQotCV9fcmF3X3dyaXRlbChzM2NfaXJxd2FrZV9pbnRtYXNrLCBTM0MyNDEwX0lOVE1TSyk7Ci0JX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBTM0MyNDEwX0VJTlRNQVNLKTsKLQotCS8qIGFjayBhbnkgb3V0c3RhbmRpbmcgZXh0ZXJuYWwgaW50ZXJydXB0cyBiZWZvcmUgd2UgZ28gdG8gc2xlZXAgKi8KLQotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwgUzNDMjQxMF9FSU5UUEVORCk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UUE5EKSwgUzNDMjQxMF9JTlRQTkQpOwotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksIFMzQzI0MTBfU1JDUE5EKTsKLQotCS8qIGNhbGwgY3B1IHNwZWNpZmljIHByZXBlcmF0aW9uICovCi0KLQlwbV9jcHVfcHJlcCgpOwotCi0JLyogZmx1c2ggY2FjaGUgYmFjayB0byByYW0gKi8KLQotCWZsdXNoX2NhY2hlX2FsbCgpOwotCi0JczNjMjQxMF9wbV9jaGVja19zdG9yZSgpOwotCi0JLyogc2VuZCB0aGUgY3B1IHRvIHNsZWVwLi4uICovCi0KLQlfX3Jhd193cml0ZWwoMHgwMCwgUzNDMjQxMF9DTEtDT04pOyAgLyogdHVybiBvZmYgY2xvY2tzIG92ZXIgc2xlZXAgKi8KLQotCS8qIHMzYzI0MTBfY3B1X3NhdmUgd2lsbCBhbHNvIGFjdCBhcyBvdXIgcmV0dXJuIHBvaW50IGZyb20gd2hlbgotCSAqIHdlIHJlc3VtZSBhcyBpdCBzYXZlcyBpdHMgb3duIHJlZ2lzdGVyIHN0YXRlLCBzbyB1c2UgdGhlIHJldHVybgotCSAqIGNvZGUgdG8gZGlmZmVyZW50aWF0ZSByZXR1cm4gZnJvbSBzYXZlIGFuZCByZXR1cm4gZnJvbSBzbGVlcCAqLwotCi0JaWYgKHMzYzI0MTBfY3B1X3NhdmUocmVnc19zYXZlKSA9PSAwKSB7Ci0JCWZsdXNoX2NhY2hlX2FsbCgpOwotCQlwbV9jcHVfc2xlZXAoKTsKLQl9Ci0KLQkvKiByZXN0b3JlIHRoZSBjcHUgc3RhdGUgKi8KLQotCWNwdV9pbml0KCk7Ci0KLQkvKiByZXN0b3JlIHRoZSBzeXN0ZW0gc3RhdGUgKi8KLQotCXMzYzI0MTBfcG1fZG9fcmVzdG9yZV9jb3JlKGNvcmVfc2F2ZSwgQVJSQVlfU0laRShjb3JlX3NhdmUpKTsKLQlzM2MyNDEwX3BtX2RvX3Jlc3RvcmUoZ3Bpb19zYXZlLCBBUlJBWV9TSVpFKGdwaW9fc2F2ZSkpOwotCXMzYzI0MTBfcG1fZG9fcmVzdG9yZSh1YXJ0X3NhdmUsIEFSUkFZX1NJWkUodWFydF9zYXZlKSk7Ci0KLQlzM2MyNDEwX3BtX2RlYnVnX2luaXQoKTsKLQotCS8qIGNoZWNrIHdoYXQgaXJxIChpZiBhbnkpIHJlc3RvcmVkIHRoZSBzeXN0ZW0gKi8KLQotCURCRygicG9zdCBzbGVlcDogSVJRcyAweCUwOHgsIDB4JTA4eFxuIiwKLQkgICAgX19yYXdfcmVhZGwoUzNDMjQxMF9TUkNQTkQpLAotCSAgICBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSk7Ci0KLQlzM2MyNDEwX3BtX3Nob3dfcmVzdW1lX2lycXMoSVJRX0VJTlQwLCBfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksCi0JCQkJICAgIHMzY19pcnF3YWtlX2ludG1hc2spOwotCi0JczNjMjQxMF9wbV9zaG93X3Jlc3VtZV9pcnFzKElSUV9FSU5UNC00LCBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwKLQkJCQkgICAgczNjX2lycXdha2VfZWludG1hc2spOwotCi0JREJHKCJwb3N0IHNsZWVwLCBwcmVwYXJpbmcgdG8gcmV0dXJuXG4iKTsKLQotCXMzYzI0MTBfcG1fY2hlY2tfcmVzdG9yZSgpOwotCi0JLyogb2ssIGxldCdzIHJldHVybiBmcm9tIHNsZWVwICovCisJaWYgKCBtYWNoaW5lX2lzX2FtbF9tNTkwMCgpICkKKwkJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRjIsIDApOwogCi0JREJHKCJTM0MyNDEwIFBNIFJlc3VtZSAocG9zdC1yZXN0b3JlKVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBDYWxsZWQgYWZ0ZXIgcHJvY2Vzc2VzIGFyZSBmcm96ZW4sIGJ1dCBiZWZvcmUgd2Ugc2h1dCBkb3duIGRldmljZXMuCi0gKi8KLXN0YXRpYyBpbnQgczNjMjQxMF9wbV9wcmVwYXJlKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgczNjMjQxMF9wbV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKmRldikKIHsKKwlwbV9jcHVfcHJlcCA9IHMzYzI0MTBfcG1fcHJlcGFyZTsKKwlwbV9jcHVfc2xlZXAgPSBzM2MyNDEwX2NwdV9zdXNwZW5kOworCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBDYWxsZWQgYWZ0ZXIgZGV2aWNlcyBhcmUgcmUtc2V0dXAsIGJ1dCBiZWZvcmUgcHJvY2Vzc2VzIGFyZSB0aGF3ZWQuCi0gKi8KLXN0YXRpYyBpbnQgczNjMjQxMF9wbV9maW5pc2goc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQotewotCXJldHVybiAwOwotfQotCi0vKgotICogU2V0IHRvIFBNX0RJU0tfRklSTVdBUkUgc28gd2UgY2FuIHF1aWNrbHkgdmV0byBzdXNwZW5kLXRvLWRpc2suCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcG1fb3BzIHMzYzI0MTBfcG1fb3BzID0gewotCS5wbV9kaXNrX21vZGUJPSBQTV9ESVNLX0ZJUk1XQVJFLAotCS5wcmVwYXJlCT0gczNjMjQxMF9wbV9wcmVwYXJlLAotCS5lbnRlcgkJPSBzM2MyNDEwX3BtX2VudGVyLAotCS5maW5pc2gJCT0gczNjMjQxMF9wbV9maW5pc2gsCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTApCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9wbV9kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDEwX3BtX2FkZCwKKwkucmVzdW1lCQk9IHMzYzI0MTBfcG1fcmVzdW1lLAogfTsKIAotLyogczNjMjQxMF9wbV9pbml0Ci0gKgotICogQXR0YWNoIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCi0gKiBmcm9tIHRoZSBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBpZiB0aGUgYm9hcmQgc3VwcG9ydHMKLSAqIGl0LgotKi8KKy8qIHJlZ2lzdGVyIG91cnNlbHZlcyAqLwogCi1pbnQgX19pbml0IHMzYzI0MTBfcG1faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgczNjMjQxMF9wbV9kcnZpbml0KHZvaWQpCiB7Ci0JcHJpbnRrKCJTM0MyNDEwIFBvd2VyIE1hbmFnZW1lbnQsIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7Ci0KLQlwbV9zZXRfb3BzKCZzM2MyNDEwX3BtX29wcyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBfc3lzY2xhc3MsICZzM2MyNDEwX3BtX2RyaXZlcik7CiB9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMF9wbV9kcnZpbml0KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDApCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0MF9wbV9kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDEwX3BtX2FkZCwKKwkucmVzdW1lCQk9IHMzYzI0MTBfcG1fcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQ0MF9wbV9kcnZpbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MsICZzM2MyNDQwX3BtX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0MF9wbV9kcnZpbml0KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDIpCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9wbV9kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDEwX3BtX2FkZCwKKwkucmVzdW1lCQk9IHMzYzI0MTBfcG1fcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQ0Ml9wbV9kcnZpbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsICZzM2MyNDQyX3BtX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0Ml9wbV9kcnZpbml0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWNsb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MmNjNmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtY2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1jbG9jay5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQzI0MTAsUzNDMjQ0MCxTM0MyNDQyIENsb2NrIGNvbnRyb2wgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+Ci0KLSNpbmNsdWRlICJzM2MyNDEwLmgiCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjcHUuaCIKLQotaW50IHMzYzI0MTBfY2xrY29uX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCi17Ci0JdW5zaWduZWQgaW50IGNsb2NrcyA9IGNsay0+Y3RybGJpdDsKLQl1bnNpZ25lZCBsb25nIGNsa2NvbjsKLQotCWNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLQ09OKTsKLQotCWlmIChlbmFibGUpCi0JCWNsa2NvbiB8PSBjbG9ja3M7Ci0JZWxzZQotCQljbGtjb24gJj0gfmNsb2NrczsKLQotCS8qIGVuc3VyZSBub25lIG9mIHRoZSBzcGVjaWFsIGZ1bmN0aW9uIGJpdHMgc2V0ICovCi0JY2xrY29uICY9IH4oUzNDMjQxMF9DTEtDT05fSURMRXxTM0MyNDEwX0NMS0NPTl9QT1dFUik7Ci0KLQlfX3Jhd193cml0ZWwoY2xrY29uLCBTM0MyNDEwX0NMS0NPTik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDEwX3VwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBsb25nIGNsa3Nsb3cgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS1NMT1cpOwotCXVuc2lnbmVkIGxvbmcgb3JpZyA9IGNsa3Nsb3c7Ci0KLQlpZiAoZW5hYmxlKQotCQljbGtzbG93ICY9IH5TM0MyNDEwX0NMS1NMT1dfVUNMS19PRkY7Ci0JZWxzZQotCQljbGtzbG93IHw9IFMzQzI0MTBfQ0xLU0xPV19VQ0xLX09GRjsKLQotCV9fcmF3X3dyaXRlbChjbGtzbG93LCBTM0MyNDEwX0NMS1NMT1cpOwotCi0JLyogaWYgd2Ugc3RhcnRlZCB0aGUgVVBMTCwgdGhlbiBhbGxvdyB0byBzZXR0bGUgKi8KLQotCWlmIChlbmFibGUgJiYgKG9yaWcgJiBTM0MyNDEwX0NMS1NMT1dfVUNMS19PRkYpKQotCQl1ZGVsYXkoMjAwKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBzdGFuZGFyZCBjbG9jayBkZWZpbml0aW9ucyAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc19kaXNhYmxlW10gPSB7Ci0JewotCQkubmFtZQkJPSAibmFuZCIsCi0JCS5pZAkJPSAtMSwKLQkJLnBhcmVudAkJPSAmY2xrX2gsCi0JCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX05BTkQsCi0JfSwgewotCQkubmFtZQkJPSAic2RpIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fU0RJLAotCX0sIHsKLQkJLm5hbWUJCT0gImFkYyIsCi0JCS5pZAkJPSAtMSwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0FEQywKLQl9LCB7Ci0JCS5uYW1lCQk9ICJpMmMiLAotCQkuaWQJCT0gLTEsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9JSUMsCi0JfSwgewotCQkubmFtZQkJPSAiaWlzIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fSUlTLAotCX0sIHsKLQkJLm5hbWUJCT0gInNwaSIsCi0JCS5pZAkJPSAtMSwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1NQSSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc1tdID0gewotCXsKLQkJLm5hbWUJCT0gImxjZCIsCi0JCS5pZAkJPSAtMSwKLQkJLnBhcmVudAkJPSAmY2xrX2gsCi0JCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0xDREMsCi0JfSwgewotCQkubmFtZQkJPSAiZ3BpbyIsCi0JCS5pZAkJPSAtMSwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX0dQSU8sCi0JfSwgewotCQkubmFtZQkJPSAidXNiLWhvc3QiLAotCQkuaWQJCT0gLTEsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VU0JILAotCX0sIHsKLQkJLm5hbWUJCT0gInVzYi1kZXZpY2UiLAotCQkuaWQJCT0gLTEsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkJLmN0cmxiaXQJPSBTM0MyNDEwX0NMS0NPTl9VU0JELAotCX0sIHsKLQkJLm5hbWUJCT0gInRpbWVycyIsCi0JCS5pZAkJPSAtMSwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAotCQkuY3RybGJpdAk9IFMzQzI0MTBfQ0xLQ09OX1BXTVQsCi0JfSwgewotCQkubmFtZQkJPSAidWFydCIsCi0JCS5pZAkJPSAwLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fVUFSVDAsCi0JfSwgewotCQkubmFtZQkJPSAidWFydCIsCi0JCS5pZAkJPSAxLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fVUFSVDEsCi0JfSwgewotCQkubmFtZQkJPSAidWFydCIsCi0JCS5pZAkJPSAyLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fVUFSVDIsCi0JfSwgewotCQkubmFtZQkJPSAicnRjIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2MyNDEwX2Nsa2Nvbl9lbmFibGUsCi0JCS5jdHJsYml0CT0gUzNDMjQxMF9DTEtDT05fUlRDLAotCX0sIHsKLQkJLm5hbWUJCT0gIndhdGNoZG9nIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmN0cmxiaXQJPSAwLAotCX0sIHsKLQkJLm5hbWUJCT0gInVzYi1idXMtaG9zdCIsCi0JCS5pZAkJPSAtMSwKLQkJLnBhcmVudAkJPSAmY2xrX3VzYl9idXMsCi0JfSwgewotCQkubmFtZQkJPSAidXNiLWJ1cy1nYWRnZXQiLAotCQkuaWQJCT0gLTEsCi0JCS5wYXJlbnQJCT0gJmNsa191c2JfYnVzLAotCX0sCi19OwotCi0vKiBzM2MyNDEwX2Jhc2VjbGtfYWRkKCkKLSAqCi0gKiBBZGQgYWxsIHRoZSBjbG9ja3MgdXNlZCBieSB0aGUgczNjMjQxMCBvciBjb21wYXRpYmxlIENQVXMKLSAqIHN1Y2ggYXMgdGhlIFMzQzI0NDAgYW5kIFMzQzI0NDIuCi0gKgotICogV2UgY2Fubm90IHVzZSBhIHN5c3RlbSBkZXZpY2UgYXMgd2UgYXJlIG5lZWRlZCBiZWZvcmUgYW55Ci0gKiBvZiB0aGUgaW5pdC1jYWxscyB0aGF0IGluaXRpYWxpc2UgdGhlIGRldmljZXMgYXJlIGFjdHVhbGx5Ci0gKiBkb25lLgotKi8KLQotaW50IF9faW5pdCBzM2MyNDEwX2Jhc2VjbGtfYWRkKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBjbGtzbG93ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtTTE9XKTsKLQl1bnNpZ25lZCBsb25nIGNsa2NvbiAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0NPTik7Ci0Jc3RydWN0IGNsayAqY2xrcDsKLQlzdHJ1Y3QgY2xrICp4dGFsOwotCWludCByZXQ7Ci0JaW50IHB0cjsKLQotCWNsa191cGxsLmVuYWJsZSA9IHMzYzI0MTBfdXBsbF9lbmFibGU7Ci0KLQlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3VzYl9idXMpIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXNiIGJ1cyBjbG9ja1xuIik7Ci0KLQkvKiByZWdpc3RlciBjbG9ja3MgZnJvbSBjbG9jayBhcnJheSAqLwotCi0JY2xrcCA9IGluaXRfY2xvY2tzOwotCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2Nsb2Nrcyk7IHB0cisrLCBjbGtwKyspIHsKLQkJLyogZW5zdXJlIHRoYXQgd2Ugbm90ZSB0aGUgY2xvY2sgc3RhdGUgKi8KLQotCQljbGtwLT51c2FnZSA9IGNsa2NvbiAmIGNsa3AtPmN0cmxiaXQgPyAxIDogMDsKLQotCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKLQkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOwotCQl9Ci0JfQotCi0JLyogV2UgbXVzdCBiZSBjYXJlZnVsIGRpc2FibGluZyB0aGUgY2xvY2tzIHdlIGFyZSBub3QgaW50ZW5kaW5nIHRvCi0JICogYmUgdXNpbmcgYXQgYm9vdCB0aW1lLCBhcyBzdWJzeXRlbXMgc3VjaCBhcyB0aGUgTENEIHdoaWNoIGRvCi0JICogdGhlaXIgb3duIERNQSByZXF1ZXN0cyB0byB0aGUgYnVzIGNhbiBjYXVzZSB0aGUgc3lzdGVtIHRvIGxvY2t1cAotCSAqIGlmIHRoZXkgd2hlcmUgaW4gdGhlIG1pZGRsZSBvZiByZXF1ZXN0aW5nIGJ1cyBhY2Nlc3MuCi0JICoKLQkgKiBEaXNhYmxpbmcgdGhlIExDRCBjbG9jayBpZiB0aGUgTENEIGlzIGFjdGl2ZSBpcyB2ZXJ5IGRhbmdlcm91cywKLQkgKiBhbmQgdGhlcmVmb3JlIHRoZSBib290bG9hZGVyIHNob3VsZCBiZSBjYXJlZnVsIHRvIG5vdCBlbmFibGUKLQkgKiB0aGUgTENEIGNsb2NrIGlmIGl0IGlzIG5vdCBuZWVkZWQuCi0JKi8KLQotCS8qIGluc3RhbGwgKGFuZCBkaXNhYmxlKSB0aGUgY2xvY2tzIHdlIGRvIG5vdCBuZWVkIGltbWVkaWF0ZWx5ICovCi0KLQljbGtwID0gaW5pdF9jbG9ja3NfZGlzYWJsZTsKLQlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoaW5pdF9jbG9ja3NfZGlzYWJsZSk7IHB0cisrLCBjbGtwKyspIHsKLQotCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKLQkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOwotCQl9Ci0KLQkJczNjMjQxMF9jbGtjb25fZW5hYmxlKGNsa3AsIDApOwotCX0KLQotCS8qIHNob3cgdGhlIGNsb2NrLXNsb3cgdmFsdWUgKi8KLQotCXh0YWwgPSBjbGtfZ2V0KE5VTEwsICJ4dGFsIik7Ci0KLQlwcmludGsoIkNMT0NLOiBTbG93IG1vZGUgKCVsZC4lbGQgTUh6KSwgJXMsIE1QTEwgJXMsIFVQTEwgJXNcbiIsCi0JICAgICAgIHByaW50X21oeihjbGtfZ2V0X3JhdGUoeHRhbCkgLwotCQkJICggMiAqIFMzQzI0MTBfQ0xLU0xPV19HRVRfU0xPV1ZBTChjbGtzbG93KSkpLAotCSAgICAgICAoY2xrc2xvdyAmIFMzQzI0MTBfQ0xLU0xPV19TTE9XKSA/ICJzbG93IiA6ICJmYXN0IiwKLQkgICAgICAgKGNsa3Nsb3cgJiBTM0MyNDEwX0NMS1NMT1dfTVBMTF9PRkYpID8gIm9mZiIgOiAib24iLAotCSAgICAgICAoY2xrc2xvdyAmIFMzQzI0MTBfQ0xLU0xPV19VQ0xLX09GRikgPyAib2ZmIiA6ICJvbiIpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWRtYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjdiYTM5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWRtYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWRtYS5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQzI0MTAgRE1BIHNlbGVjdGlvbgotICoKLSAqIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLQotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KLSNpbmNsdWRlICJkbWEuaCIKLQotI2luY2x1ZGUgImNwdS5oIgotCi0jaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWFjOTcuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1lbS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbGNkLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZGkuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWlpcy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc3BpLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwIF9faW5pdGRhdGEgczNjMjQxMF9kbWFfbWFwcGluZ3NbXSA9IHsKLQlbRE1BQ0hfWEQwXSA9IHsKLQkJLm5hbWUJCT0gInhkcmVxMCIsCi0JCS5jaGFubmVsc1swXQk9IFMzQzI0MTBfRENPTl9DSDBfWERSRVEwIHwgRE1BX0NIX1ZBTElELAotCX0sCi0JW0RNQUNIX1hEMV0gPSB7Ci0JCS5uYW1lCQk9ICJ4ZHJlcTEiLAotCQkuY2hhbm5lbHNbMV0JPSBTM0MyNDEwX0RDT05fQ0gxX1hEUkVRMSB8IERNQV9DSF9WQUxJRCwKLQl9LAotCVtETUFDSF9TREldID0gewotCQkubmFtZQkJPSAic2RpIiwKLQkJLmNoYW5uZWxzWzBdCT0gUzNDMjQxMF9EQ09OX0NIMF9TREkgfCBETUFfQ0hfVkFMSUQsCi0JCS5jaGFubmVsc1syXQk9IFMzQzI0MTBfRENPTl9DSDJfU0RJIHwgRE1BX0NIX1ZBTElELAotCQkuY2hhbm5lbHNbM10JPSBTM0MyNDEwX0RDT05fQ0gzX1NESSB8IERNQV9DSF9WQUxJRCwKLQkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX0lJUyArIFMzQzI0MTBfSUlTRklGTywKLQkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfSUlTICsgUzNDMjQxMF9JSVNGSUZPLAotCX0sCi0JW0RNQUNIX1NQSTBdID0gewotCQkubmFtZQkJPSAic3BpMCIsCi0JCS5jaGFubmVsc1sxXQk9IFMzQzI0MTBfRENPTl9DSDFfU1BJIHwgRE1BX0NIX1ZBTElELAotCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfU1BJICsgUzNDMjQxMF9TUFREQVQsCi0JCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1NQSSArIFMzQzI0MTBfU1BSREFULAotCX0sCi0JW0RNQUNIX1NQSTFdID0gewotCQkubmFtZQkJPSAic3BpMSIsCi0JCS5jaGFubmVsc1szXQk9IFMzQzI0MTBfRENPTl9DSDNfU1BJIHwgRE1BX0NIX1ZBTElELAotCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfU1BJICsgMHgyMCArIFMzQzI0MTBfU1BUREFULAotCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9TUEkgKyAweDIwICsgUzNDMjQxMF9TUFJEQVQsCi0JfSwKLQlbRE1BQ0hfVUFSVDBdID0gewotCQkubmFtZQkJPSAidWFydDAiLAotCQkuY2hhbm5lbHNbMF0JPSBTM0MyNDEwX0RDT05fQ0gwX1VBUlQwIHwgRE1BX0NIX1ZBTElELAotCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfVUFSVDAgKyBTM0MyNDEwX1VUWEgsCi0JCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1VBUlQwICsgUzNDMjQxMF9VUlhILAotCX0sCi0JW0RNQUNIX1VBUlQxXSA9IHsKLQkJLm5hbWUJCT0gInVhcnQxIiwKLQkJLmNoYW5uZWxzWzFdCT0gUzNDMjQxMF9EQ09OX0NIMV9VQVJUMSB8IERNQV9DSF9WQUxJRCwKLQkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQxICsgUzNDMjQxMF9VVFhILAotCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMSArIFMzQzI0MTBfVVJYSCwKLQl9LAotICAgICAgCVtETUFDSF9VQVJUMl0gPSB7Ci0JCS5uYW1lCQk9ICJ1YXJ0MiIsCi0JCS5jaGFubmVsc1szXQk9IFMzQzI0MTBfRENPTl9DSDNfVUFSVDIgfCBETUFfQ0hfVkFMSUQsCi0JCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9VQVJUMiArIFMzQzI0MTBfVVRYSCwKLQkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfVUFSVDIgKyBTM0MyNDEwX1VSWEgsCi0JfSwKLQlbRE1BQ0hfVElNRVJdID0gewotCQkubmFtZQkJPSAidGltZXIiLAotCQkuY2hhbm5lbHNbMF0JPSBTM0MyNDEwX0RDT05fQ0gwX1RJTUVSIHwgRE1BX0NIX1ZBTElELAotCQkuY2hhbm5lbHNbMl0JPSBTM0MyNDEwX0RDT05fQ0gyX1RJTUVSIHwgRE1BX0NIX1ZBTElELAotCQkuY2hhbm5lbHNbM10JPSBTM0MyNDEwX0RDT05fQ0gzX1RJTUVSIHwgRE1BX0NIX1ZBTElELAotCX0sCi0JW0RNQUNIX0kyU19JTl0gPSB7Ci0JCS5uYW1lCQk9ICJpMnMtc2RpIiwKLQkJLmNoYW5uZWxzWzFdCT0gUzNDMjQxMF9EQ09OX0NIMV9JMlNTREkgfCBETUFfQ0hfVkFMSUQsCi0JCS5jaGFubmVsc1syXQk9IFMzQzI0MTBfRENPTl9DSDJfSTJTU0RJIHwgRE1BX0NIX1ZBTElELAotCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9JSVMgKyBTM0MyNDEwX0lJU0ZJRk8sCi0JfSwKLQlbRE1BQ0hfSTJTX09VVF0gPSB7Ci0JCS5uYW1lCQk9ICJpMnMtc2RvIiwKLQkJLmNoYW5uZWxzWzJdCT0gUzNDMjQxMF9EQ09OX0NIMl9JMlNTRE8gfCBETUFfQ0hfVkFMSUQsCi0JCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9JSVMgKyBTM0MyNDEwX0lJU0ZJRk8sCi0JfSwKLQlbRE1BQ0hfVVNCX0VQMV0gPSB7Ci0JCS5uYW1lCQk9ICJ1c2ItZXAxIiwKLQkJLmNoYW5uZWxzWzBdCT0gUzNDMjQxMF9EQ09OX0NIMF9VU0JFUDEgfCBETUFfQ0hfVkFMSUQsCi0JfSwKLQlbRE1BQ0hfVVNCX0VQMl0gPSB7Ci0JCS5uYW1lCQk9ICJ1c2ItZXAyIiwKLQkJLmNoYW5uZWxzWzFdCT0gUzNDMjQxMF9EQ09OX0NIMV9VU0JFUDIgfCBETUFfQ0hfVkFMSUQsCi0JfSwKLQlbRE1BQ0hfVVNCX0VQM10gPSB7Ci0JCS5uYW1lCQk9ICJ1c2ItZXAzIiwKLQkJLmNoYW5uZWxzWzJdCT0gUzNDMjQxMF9EQ09OX0NIMl9VU0JFUDMgfCBETUFfQ0hfVkFMSUQsCi0JfSwKLQlbRE1BQ0hfVVNCX0VQNF0gPSB7Ci0JCS5uYW1lCQk9ICJ1c2ItZXA0IiwKLQkJLmNoYW5uZWxzWzNdCT1TM0MyNDEwX0RDT05fQ0gzX1VTQkVQNCB8IERNQV9DSF9WQUxJRCwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgczNjMjQxMF9kbWFfc2VsZWN0KHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAotCQkJICAgICAgIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgKm1hcCkKLXsKLQljaGFuLT5kY29uID0gbWFwLT5jaGFubmVsc1tjaGFuLT5udW1iZXJdICYgfkRNQV9DSF9WQUxJRDsKLX0KLQotc3RhdGljIHN0cnVjdCBzM2MyNHh4X2RtYV9zZWxlY3Rpb24gX19pbml0ZGF0YSBzM2MyNDEwX2RtYV9zZWwgPSB7Ci0JLnNlbGVjdAkJPSBzM2MyNDEwX2RtYV9zZWxlY3QsCi0JLmRjb25fbWFzawk9IDcgPDwgMjQsCi0JLm1hcAkJPSBzM2MyNDEwX2RtYV9tYXBwaW5ncywKLQkubWFwX3NpemUJPSBBUlJBWV9TSVpFKHMzYzI0MTBfZG1hX21hcHBpbmdzKSwKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQxMF9kbWFfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCi17Ci0JcmV0dXJuIHMzYzI0eHhfZG1hX2luaXRfbWFwKCZzM2MyNDEwX2RtYV9zZWwpOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTApCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9kbWFfZHJpdmVyID0gewotCS5hZGQJPSBzM2MyNDEwX2RtYV9hZGQsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX2RtYV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBfc3lzY2xhc3MsICZzM2MyNDEwX2RtYV9kcml2ZXIpOwotfQotCi1hcmNoX2luaXRjYWxsKHMzYzI0MTBfZG1hX2luaXQpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKLS8qIFMzQzI0NDIgRE1BIGNvbnRhaW5zIHRoZSBzYW1lIHNlbGVjdGlvbiB0YWJsZSBhcyB0aGUgUzNDMjQxMCAqLwotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfZG1hX2RyaXZlciA9IHsKLQkuYWRkCT0gczNjMjQxMF9kbWFfYWRkLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgczNjMjQ0Ml9kbWFfaW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQyX3N5c2NsYXNzLCAmczNjMjQ0Ml9kbWFfZHJpdmVyKTsKLX0KLQotYXJjaF9pbml0Y2FsbChzM2MyNDQyX2RtYV9pbml0KTsKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1ncGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjM2EyNzYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtZ3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtZ3Bpby5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDMjQxMCBHUElPIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgotCi1pbnQgczNjMjQxMF9ncGlvX2lycWZpbHRlcih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgb24sCi0JCQkgICB1bnNpZ25lZCBpbnQgY29uZmlnKQotewotCXZvaWQgX19pb21lbSAqcmVnID0gUzNDMjRYWF9FSU5GTFQwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQlpZiAocGluIDwgUzNDMjQxMF9HUEc4IHx8IHBpbiA+IFMzQzI0MTBfR1BHMTUpCi0JCXJldHVybiAtMTsKLQotCWNvbmZpZyAmPSAweGZmOwotCi0JcGluIC09IFMzQzI0MTBfR1BHODsKLQlyZWcgKz0gcGluICYgfjM7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQkvKiB1cGRhdGUgZmlsdGVyIHdpZHRoIGFuZCBjbG9jayBzb3VyY2UgKi8KLQotCXZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JdmFsICY9IH4oMHhmZiA8PCAoKHBpbiAmIDMpICogOCkpOwotCXZhbCB8PSBjb25maWcgPDwgKChwaW4gJiAzKSAqIDgpOwotCV9fcmF3X3dyaXRlbCh2YWwsIHJlZyk7Ci0KLQkvKiB1cGRhdGUgZmlsdGVyIGVuYWJsZSAqLwotCi0JdmFsID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FWFRJTlQyKTsKLQl2YWwgJj0gfigxIDw8ICgocGluICogNCkgKyAzKSk7Ci0JdmFsIHw9IG9uIDw8ICgocGluICogNCkgKyAzKTsKLQlfX3Jhd193cml0ZWwodmFsLCBTM0MyNFhYX0VYVElOVDIpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woczNjMjQxMF9ncGlvX2lycWZpbHRlcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWlycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzk2YzljLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWlycS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtaXJxLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0KLSNpbmNsdWRlICJjcHUuaCIKLSNpbmNsdWRlICJwbS5oIgotCi1zdGF0aWMgaW50IHMzYzI0MTBfaXJxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9pcnFfZHJpdmVyID0gewotCS5hZGQJCT0gczNjMjQxMF9pcnFfYWRkLAotCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQxMF9pcnFfaW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3N5c2NsYXNzLCAmczNjMjQxMF9pcnFfZHJpdmVyKTsKLX0KLQotYXJjaF9pbml0Y2FsbChzM2MyNDEwX2lycV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLXBtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1wbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmI2ZTVlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLXBtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtcG0uYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MyNDEwIChhbmQgY29tcGF0aWJsZSkgUG93ZXIgTWFuYWdlciAoU3VzcGVuZC1Uby1SQU0pIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2gxOTQwLmg+Ci0KLSNpbmNsdWRlICJjcHUuaCIKLSNpbmNsdWRlICJwbS5oIgotCi0jaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKLWV4dGVybiB2b2lkIHBtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLik7Ci0jZGVmaW5lIERCRyhmbXQuLi4pIHBtX2RiZyhmbXQpCi0jZWxzZQotI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQpCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9wcmVwYXJlKHZvaWQpCi17Ci0JLyogZW5zdXJlIGF0IGxlYXN0IEdTVEFUVVMzIGhhcyB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KLQotCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoczNjMjQxMF9jcHVfcmVzdW1lKSwgUzNDMjQxMF9HU1RBVFVTMyk7Ci0KLQlEQkcoIkdTVEFUVVMzIDB4JTA4eFxuIiwgX19yYXdfcmVhZGwoUzNDMjQxMF9HU1RBVFVTMykpOwotCURCRygiR1NUQVRVUzQgMHglMDh4XG4iLCBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVM0KSk7Ci0KLQlpZiAobWFjaGluZV9pc19oMTk0MCgpKSB7Ci0JCXZvaWQgKmJhc2UgPSBwaHlzX3RvX3ZpcnQoSDE5NDBfU1VTUEVORF9DSEVDSyk7Ci0JCXVuc2lnbmVkIGxvbmcgcHRyOwotCQl1bnNpZ25lZCBsb25nIGNhbGMgPSAwOwotCi0JCS8qIGdlbmVyYXRlIGNoZWNrIGZvciB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBvbiByZXN1bWUgKi8KLQotCQlmb3IgKHB0ciA9IDA7IHB0ciA8IDB4NDAwMDA7IHB0ciArPSAweDQwMCkKLQkJCWNhbGMgKz0gX19yYXdfcmVhZGwoYmFzZStwdHIpOwotCi0JCV9fcmF3X3dyaXRlbChjYWxjLCBwaHlzX3RvX3ZpcnQoSDE5NDBfU1VTUEVORF9DSEVDS1NVTSkpOwotCX0KLQotCS8qIHRoZSBSWDM3MTUgdXNlcyBzaW1pbGFyIGNvZGUgYW5kIHRoZSBzYW1lIEgxOTQwIGFuZCB0aGUKLQkgKiBzYW1lIG9mZnNldHMgZm9yIHJlc3VtZSBhbmQgY2hlY2tzdW0gcG9pbnRlcnMgKi8KLQotCWlmIChtYWNoaW5lX2lzX3J4MzcxNSgpKSB7Ci0JCXZvaWQgKmJhc2UgPSBwaHlzX3RvX3ZpcnQoSDE5NDBfU1VTUEVORF9DSEVDSyk7Ci0JCXVuc2lnbmVkIGxvbmcgcHRyOwotCQl1bnNpZ25lZCBsb25nIGNhbGMgPSAwOwotCi0JCS8qIGdlbmVyYXRlIGNoZWNrIGZvciB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBvbiByZXN1bWUgKi8KLQotCQlmb3IgKHB0ciA9IDA7IHB0ciA8IDB4NDAwMDA7IHB0ciArPSAweDQpCi0JCQljYWxjICs9IF9fcmF3X3JlYWRsKGJhc2UrcHRyKTsKLQotCQlfX3Jhd193cml0ZWwoY2FsYywgcGh5c190b192aXJ0KEgxOTQwX1NVU1BFTkRfQ0hFQ0tTVU0pKTsKLQl9Ci0KLQlpZiAoIG1hY2hpbmVfaXNfYW1sX201OTAwKCkgKQotCQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGMiwgMSk7Ci0KLX0KLQotc3RhdGljIGludCBzM2MyNDEwX3BtX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JLyogdW5zZXQgdGhlIHJldHVybi1mcm9tLXNsZWVwIGZsYWcsIHRvIGVuc3VyZSByZXNldCAqLwotCi0JdG1wID0gX19yYXdfcmVhZGwoUzNDMjQxMF9HU1RBVFVTMik7Ci0JdG1wICY9IFMzQzI0MTBfR1NUQVRVUzJfT0ZGUkVTRVQ7Ci0JX19yYXdfd3JpdGVsKHRtcCwgUzNDMjQxMF9HU1RBVFVTMik7Ci0KLQlpZiAoIG1hY2hpbmVfaXNfYW1sX201OTAwKCkgKQotCQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGMiwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDEwX3BtX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXBtX2NwdV9wcmVwID0gczNjMjQxMF9wbV9wcmVwYXJlOwotCXBtX2NwdV9zbGVlcCA9IHMzYzI0MTBfY3B1X3N1c3BlbmQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDEwKQotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0MTBfcG1fZHJpdmVyID0gewotCS5hZGQJCT0gczNjMjQxMF9wbV9hZGQsCi0JLnJlc3VtZQkJPSBzM2MyNDEwX3BtX3Jlc3VtZSwKLX07Ci0KLS8qIHJlZ2lzdGVyIG91cnNlbHZlcyAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX3BtX2RydmluaXQodm9pZCkKLXsKLQlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9zeXNjbGFzcywgJnMzYzI0MTBfcG1fZHJpdmVyKTsKLX0KLQotYXJjaF9pbml0Y2FsbChzM2MyNDEwX3BtX2RydmluaXQpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MCkKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQwX3BtX2RyaXZlciA9IHsKLQkuYWRkCQk9IHMzYzI0MTBfcG1fYWRkLAotCS5yZXN1bWUJCT0gczNjMjQxMF9wbV9yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX3BtX2RydmluaXQodm9pZCkKLXsKLQlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9zeXNjbGFzcywgJnMzYzI0NDBfcG1fZHJpdmVyKTsKLX0KLQotYXJjaF9pbml0Y2FsbChzM2MyNDQwX3BtX2RydmluaXQpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQyX3BtX2RyaXZlciA9IHsKLQkuYWRkCQk9IHMzYzI0MTBfcG1fYWRkLAotCS5yZXN1bWUJCT0gczNjMjQxMF9wbV9yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNDQyX3BtX2RydmluaXQodm9pZCkKLXsKLQlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNjbGFzcywgJnMzYzI0NDJfcG1fZHJpdmVyKTsKLX0KLQotYXJjaF9pbml0Y2FsbChzM2MyNDQyX3BtX2RydmluaXQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtc2xlZXAuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE3OWExMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1zbGVlcC5TCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtc2xlZXAuUwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MyNDEwIFBvd2VyIE1hbmFnZXIgKFN1c3BlbmQtVG8tUkFNKSBzdXBwb3J0Ci0gKgotICogQmFzZWQgb24gUFhBL1NBMTEwMCBzbGVlcCBjb2RlIGJ5OgotICoJTmljb2xhcyBQaXRyZSwgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUgSW5jCi0gKglDbGlmZiBCcmFrZSwgKGMpIDIwMDEKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0qLwotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1lbS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+Ci0KLQkvKiBzM2MyNDEwX2NwdV9zdXNwZW5kCi0JICoKLQkgKiBwdXQgdGhlIGNwdSBpbnRvIHNsZWVwIG1vZGUKLQkqLwotCi1FTlRSWShzM2MyNDEwX2NwdV9zdXNwZW5kKQotCUBAIHByZXBhcmUgY3B1IHRvIHNsZWVwCi0KLQlsZHIJcjQsID1TM0MyNDEwX1JFRlJFU0gKLQlsZHIJcjUsID1TM0MyNFhYX01JU0NDUgotCWxkcglyNiwgPVMzQzI0MTBfQ0xLQ09OCi0JbGRyCXI3LCBbIHI0IF0JCUAgZ2V0IFJFRlJFU0ggKGFuZCBlbnN1cmUgaW4gVExCKQotCWxkcglyOCwgWyByNSBdCQlAIGdldCBNSVNDQ1IgKGFuZCBlbnN1cmUgaW4gVExCKQotCWxkcglyOSwgWyByNiBdCQlAIGdldCBDTEtDT04gKGFuZCBlbnN1cmUgaW4gVExCKQotCi0Jb3JyCXI3LCByNywgI1MzQzI0MTBfUkVGUkVTSF9TRUxGCUAgU0RSQU0gc2xlZXAgY29tbWFuZAotCW9ycglyOCwgcjgsICNTM0MyNDEwX01JU0NDUl9TRFNMRUVQIEAgU0RSQU0gcG93ZXItZG93biBzaWduYWxzCi0Jb3JyCXI5LCByOSwgI1MzQzI0MTBfQ0xLQ09OX1BPV0VSCUAgcG93ZXIgZG93biBjb21tYW5kCi0KLQl0ZXEJcGMsICMwCQkJQCBmaXJzdCBhcyBhIHRyaWFsLXJ1biB0byBsb2FkIGNhY2hlCi0JYmwJczNjMjQxMF9kb19zbGVlcAotCXRlcQlyMCwgcjAJCQlAIG5vdyBkbyBpdCBmb3IgcmVhbAotCWIJczNjMjQxMF9kb19zbGVlcAlACi0KLQlAQCBhbGlnbiBuZXh0IGJpdCBvZiBjb2RlIHRvIGNhY2hlIGxpbmUKLQkuYWxpZ24JOAotczNjMjQxMF9kb19zbGVlcDoKLQlzdHJlcQlyNywgWyByNCBdCQkJQCBTRFJBTSBzbGVlcCBjb21tYW5kCi0Jc3RyZXEJcjgsIFsgcjUgXQkJCUAgU0RSQU0gcG93ZXItZG93biBjb25maWcKLQlzdHJlcQlyOSwgWyByNiBdCQkJQCBDUFUgc2xlZXAKLTE6CWJlcQkxYgotCW1vdglwYywgcjE0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwppbmRleCA0Y2RjMGQ3Li4xYTg2YTk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKQEAgLTMxLDEwICszMSwxMCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgogCi0jaW5jbHVkZSAiczNjMjQxMC5oIgotI2luY2x1ZGUgImNwdS5oIgotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgogCiAvKiBJbml0aWFsIElPIG1hcHBpbmdzICovCiAKQEAgLTExMCw3ICsxMTAsNyBAQAogCiAvKiBuZWVkIHRvIHJlZ2lzdGVyIGNsYXNzIGJlZm9yZSB3ZSBhY3R1YWxseSByZWdpc3RlciB0aGUgZGV2aWNlLCBhbmQKICAqIHdlIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgYmVlbiBpbml0aWFsaXNlZCBiZWZvcmUgYW55IG9mIHRoZQotICogZHJpdmVycyBldmVuIHRyeSB0byB1c2UgaXQgKGV2ZW4gaWYgbm90IG9uIGFuIHMzYzI0NDAgYmFzZWQgc3lzdGVtKQorICogZHJpdmVycyBldmVuIHRyeSB0byB1c2UgaXQgKGV2ZW4gaWYgbm90IG9uIGFuIHMzYzI0MTAgYmFzZWQgc3lzdGVtKQogICogYXMgYSBkcml2ZXIgd2hpY2ggbWF5IHN1cHBvcnQgYm90aCAyNDEwIGFuZCAyNDQwIG1heSB0cnkgYW5kIHVzZSBpdC4KICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKaW5kZXggMjAxOGMyZS4uNjM3YWFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtc2xlZXAuUwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KQEAgLTM0LDEyNiArMzQsMzUgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CiAKLS8qIENPTkZJR19ERUJVR19SRVNVTUUgaXMgZGFuZ2Vyb3VzIGlmIHlvdXIgYm9vdGxvYWRlciBkb2VzIG5vdAotICogcmVzZXQgdGhlIFVBUlQgY29uZmlndXJhdGlvbiwgb25seSBlbmFibGUgaWYgeW91IHJlYWxseSBuZWVkIHRoaXMhCi0qLwotLy8jZGVmaW5lIENPTkZJR19ERUJVR19SRVNVTUUKLQotCS50ZXh0Ci0KLQkvKiBzM2MyNDEwX2NwdV9zYXZlCisJLyogczNjMjQxMF9jcHVfc3VzcGVuZAogCSAqCi0JICogc2F2ZSBlbm91Z2ggb2YgdGhlIENQVSBzdGF0ZSB0byBhbGxvdyB1cyB0byByZS1zdGFydAotCSAqIHBtLmMgY29kZS4gYXMgd2Ugc3RvcmUgaXRlbXMgbGlrZSB0aGUgc3AvbHIsIHdlIHdpbGwKLQkgKiBlbmQgdXAgcmV0dXJuaW5nIGZyb20gdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSBjcHUgcmVzdW1lcwotCSAqIHNvIHRoZSByZXR1cm4gdmFsdWUgaXMgc2V0IHRvIG1hcmsgdGhpcy4KLQkgKgotCSAqIFRoaXMgYXJhbmdlbWVudCBtZWFucyB3ZSBhdm9pZCBoYXZpbmcgdG8gZmx1c2ggdGhlIGNhY2hlCi0JICogZnJvbSB0aGlzIGNvZGUuCi0JICoKLQkgKiBlbnRyeToKLQkgKglyMCA9IHBvaW50ZXIgdG8gc2F2ZSBibG9jawotCSAqCi0JICogZXhpdDoKLQkgKglyMCA9IDAgPT4gd2Ugc3RvcmVkIGV2ZXJ5dGhpbmcKLQkgKgkgICAgIDEgPT4gcmVzdW1lZCBmcm9tIHNsZWVwCisJICogcHV0IHRoZSBjcHUgaW50byBzbGVlcCBtb2RlCiAJKi8KIAotRU5UUlkoczNjMjQxMF9jcHVfc2F2ZSkKLQlzdG1mZAlzcCEsIHsgcjQgLSByMTIsIGxyIH0KK0VOVFJZKHMzYzI0MTBfY3B1X3N1c3BlbmQpCisJQEAgcHJlcGFyZSBjcHUgdG8gc2xlZXAKIAotCUBAIHN0b3JlIGNvLXByb2Nlc3NvciByZWdpc3RlcnMKKwlsZHIJcjQsID1TM0MyNDEwX1JFRlJFU0gKKwlsZHIJcjUsID1TM0MyNFhYX01JU0NDUgorCWxkcglyNiwgPVMzQzI0MTBfQ0xLQ09OCisJbGRyCXI3LCBbIHI0IF0JCUAgZ2V0IFJFRlJFU0ggKGFuZCBlbnN1cmUgaW4gVExCKQorCWxkcglyOCwgWyByNSBdCQlAIGdldCBNSVNDQ1IgKGFuZCBlbnN1cmUgaW4gVExCKQorCWxkcglyOSwgWyByNiBdCQlAIGdldCBDTEtDT04gKGFuZCBlbnN1cmUgaW4gVExCKQogCi0JbXJjCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDAJQCBDUCBhY2Nlc3MgcmVnaXN0ZXIKLQltcmMJcDE1LCAwLCByNSwgYzEzLCBjMCwgMAlAIFBJRAotCW1yYwlwMTUsIDAsIHI2LCBjMywgYzAsIDAJQCBEb21haW4gSUQKLQltcmMJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyZXNzCi0JbXJjCXAxNSwgMCwgcjgsIGMxLCBjMCwgMAlAIGNvbnRyb2wgcmVnaXN0ZXIKKwlvcnIJcjcsIHI3LCAjUzNDMjQxMF9SRUZSRVNIX1NFTEYJQCBTRFJBTSBzbGVlcCBjb21tYW5kCisJb3JyCXI4LCByOCwgI1MzQzI0MTBfTUlTQ0NSX1NEU0xFRVAgQCBTRFJBTSBwb3dlci1kb3duIHNpZ25hbHMKKwlvcnIJcjksIHI5LCAjUzNDMjQxMF9DTEtDT05fUE9XRVIJQCBwb3dlciBkb3duIGNvbW1hbmQKIAotCXN0bWlhCXIwLCB7IHI0IC0gcjEzIH0KKwl0ZXEJcGMsICMwCQkJQCBmaXJzdCBhcyBhIHRyaWFsLXJ1biB0byBsb2FkIGNhY2hlCisJYmwJczNjMjQxMF9kb19zbGVlcAorCXRlcQlyMCwgcjAJCQlAIG5vdyBkbyBpdCBmb3IgcmVhbAorCWIJczNjMjQxMF9kb19zbGVlcAlACiAKLQltb3YJcjAsICMwCi0JbGRtZmQJc3AsIHsgcjQgLSByMTIsIHBjIH0KLQotCUBAIHJldHVybiB0byB0aGUgY2FsbGVyLCBhZnRlciBoYXZpbmcgdGhlIE1NVQotCUBAIHR1cm5lZCBvbiwgdGhpcyByZXN0b3JlcyB0aGUgbGFzdCBiaXRzIGZyb20gdGhlCi0JQEAgc3RhY2sKLXJlc3VtZV93aXRoX21tdToKLQltb3YJcjAsICMxCi0JbGRtZmQJc3AhLCB7IHI0IC0gcjEyLCBwYyB9Ci0KLQkubHRvcmcKLQotCUBAIHRoZSBuZXh0IGJpdHMgc2l0IGluIHRoZSAuZGF0YSBzZWdtZW50LCBldmVuIHRob3VnaCB0aGV5Ci0JQEAgaGFwcGVuIHRvIGJlIGNvZGUuLi4gdGhlIHMzYzI0MTBfc2xlZXBfc2F2ZV9waHlzIG5lZWRzIHRvIGJlCi0JQEAgYWNjZXNzZWQgYnkgdGhlIHJlc3VtZSBjb2RlIGJlZm9yZSBpdCBjYW4gcmVzdG9yZSB0aGUgTU1VLgotCUBAIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFyaWFibGUgaGFzIHRvIGJlIGNsb3NlIGVub3VnaCBmb3IgdGhlCi0JQEAgY29kZSB0byByZWFkIGl0Li4uIHNpbmNlIHRoZSAudGV4dCBzZWdtZW50IG5lZWRzIHRvIGJlIFJPLAotCUBAIHRoZSBkYXRhIHNlZ21lbnQgY2FuIGJlIHRoZSBvbmx5IHBsYWNlIHRvIHB1dCB0aGlzIGNvZGUuCi0KLQkuZGF0YQotCi0JLmdsb2JhbAlzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cwotczNjMjQxMF9zbGVlcF9zYXZlX3BoeXM6Ci0JLndvcmQJMAotCi0JLyogczNjMjQxMF9jcHVfcmVzdW1lCi0JICoKLQkgKiByZXN1bWUgY29kZSBlbnRyeSBmb3IgYm9vdGxvYWRlciB0byBjYWxsCi0JICoKLQkgKiB3ZSBtdXN0IHB1dCB0aGlzIGNvZGUgaGVyZSBpbiB0aGUgZGF0YSBzZWdtZW50IGFzIHdlIGhhdmUgbm8KLQkgKiBvdGhlciB3YXkgb2YgcmVzdG9yaW5nIHRoZSBzdGFjayBwb2ludGVyIGFmdGVyIHNsZWVwLCBhbmQgd2UKLQkgKiBtdXN0IG5vdCB3cml0ZSB0byB0aGUgY29kZSBzZWdtZW50IChjb2RlIGlzIHJlYWQtb25seSkKLQkqLwotCi1FTlRSWShzM2MyNDEwX2NwdV9yZXN1bWUpCi0JbW92CXIwLCAjUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgU1ZDX01PREUKLQltc3IJY3Bzcl9jLCByMAotCi0JQEAgbG9hZCBVQVJUIHRvIGFsbG93IHVzIHRvIHByaW50IHRoZSB0d28gY2hhcmFjdGVycyBmb3IKLQlAQCByZXN1bWUgZGVidWcKLQotCW1vdglyMiwgI1MzQzI0WFhfUEFfVUFSVCAmIDB4ZmYwMDAwMDAKLQlvcnIJcjIsIHIyLCAjUzNDMjRYWF9QQV9VQVJUICYgMHhmZjAwMAotCi0jaWYgMAotCS8qIFNNREsyNDQwIExFRCBzZXQgKi8KLQltb3YJcjE0LCAjUzNDMjRYWF9QQV9HUElPCi0JbGRyCXIxMiwgWyByMTQsICMweDU0IF0KLQliaWMJcjEyLCByMTIsICMzPDw0Ci0Jb3JyCXIxMiwgcjEyLCAjMTw8NwotCXN0cglyMTIsIFsgcjE0LCAjMHg1NCBdCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19ERUJVR19SRVNVTUUKLQltb3YJcjMsICMnTCcKLQlzdHJiCXIzLCBbIHIyLCAjUzNDMjQxMF9VVFhIIF0KLTEwMDE6Ci0JbGRyYglyMTQsIFsgcjMsICNTM0MyNDEwX1VUUlNUQVQgXQotCXRzdAlyMTQsICNTM0MyNDEwX1VUUlNUQVRfVFhFCi0JYmVxCTEwMDFiCi0jZW5kaWYgLyogQ09ORklHX0RFQlVHX1JFU1VNRSAqLwotCi0JbW92CXIxLCAjMAotCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUBAIGludmFsaWRhdGUgSSAmIEQgVExCcwotCW1jcglwMTUsIDAsIHIxLCBjNywgYzcsIDAJCUBAIGludmFsaWRhdGUgSSAmIEQgY2FjaGVzCi0KLQlsZHIJcjAsIHMzYzI0MTBfc2xlZXBfc2F2ZV9waHlzCUAgYWRkcmVzcyBvZiByZXN0b3JlIGJsb2NrCi0JbGRtaWEJcjAsIHsgcjQgLSByMTMgfQotCi0JbWNyCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDAJCUAgQ1AgYWNjZXNzIHJlZ2lzdGVyCi0JbWNyCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECi0JbWNyCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAkJQCBEb21haW4gSUQKLQltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAwCQlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UKLQotI2lmZGVmIENPTkZJR19ERUJVR19SRVNVTUUKLQltb3YJcjMsICMnUicKLQlzdHJiCXIzLCBbIHIyLCAjUzNDMjQxMF9VVFhIIF0KLSNlbmRpZgotCi0JbGRyCXIyLCA9cmVzdW1lX3dpdGhfbW11Ci0JbWNyCXAxNSwgMCwgcjgsIGMxLCBjMCwgMAkJQCB0dXJuIG9uIE1NVSwgZXRjCi0Jbm9wCQkJCQlAIHNlY29uZC10by1sYXN0IGJlZm9yZSBtbXUKLQltb3YJcGMsIHIyCQkJCUAgZ28gYmFjayB0byB2aXJ0dWFsIGFkZHJlc3MKLQotCS5sdG9yZworCUBAIGFsaWduIG5leHQgYml0IG9mIGNvZGUgdG8gY2FjaGUgbGluZQorCS5hbGlnbgk1CitzM2MyNDEwX2RvX3NsZWVwOgorCXN0cmVxCXI3LCBbIHI0IF0JCQlAIFNEUkFNIHNsZWVwIGNvbW1hbmQKKwlzdHJlcQlyOCwgWyByNSBdCQkJQCBTRFJBTSBwb3dlci1kb3duIGNvbmZpZworCXN0cmVxCXI5LCBbIHI2IF0JCQlAIENQVSBzbGVlcAorMToJYmVxCTFiCisJbW92CXBjLCByMTQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCmluZGV4IDIyYjBlMWMuLmJjZDU2MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAKIC8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZjNWZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL0tjb25maWcKQEAgLTAsMCArMSw1OCBAQAorIyBhcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZworIworIyBDb3B5cmlnaHQgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyMKKyMgTGljZW5zZWQgdW5kZXIgR1BMdjIKKworY29uZmlnIENQVV9TM0MyNDEyCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJc2VsZWN0IFMzQzI0MTJfUE0gaWYgUE0KKwlzZWxlY3QgUzNDMjQxMl9ETUEgaWYgUzNDMjQxMF9ETUEKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgUzNDMjQxMiBhbmQgUzNDMjQxMyBTb0NzIGZyb20gdGhlIFMzQzI0WFggbGluZQorCitjb25maWcgQ1BVX1MzQzI0MTJfT05MWQorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiAhQ1BVX1MzQzI0MDAgJiYgIUNQVV9TM0MyNDEwICYmIFwKKwkJICAgIUNQVV9TM0MyNDQwICYmICFDUFVfUzNDMjQ0MiAmJiAhQ1BVX1MzQzI0NDMgJiYgQ1BVX1MzQzI0MTIKKwlkZWZhdWx0IHkgaWYgQ1BVX1MzQzI0MTIKKworY29uZmlnIFMzQzI0MTJfRE1BCisJYm9vbAorCWRlcGVuZHMgb24gQ1BVX1MzQzI0MTIKKwloZWxwCisJICBJbnRlcm5hbCBjb25maWcgbm9kZSBmb3IgUzNDMjQxMiBETUEgc3VwcG9ydAorCitjb25maWcgUzNDMjQxMl9QTQorCWJvb2wKKwloZWxwCisJICBJbnRlcm5hbCBjb25maWcgbm9kZSB0byBhcHBseSBTM0MyNDEyIHBvd2VyIG1hbmFnZW1lbnQKKworCittZW51ICJTM0MyNDEyIE1hY2hpbmVzIgorCitjb25maWcgTUFDSF9TTURLMjQxMworCWJvb2wgIlNNREsyNDEzIgorCXNlbGVjdCBDUFVfUzNDMjQxMgorCXNlbGVjdCBNQUNIX1MzQzI0MTMKKwlzZWxlY3QgTUFDSF9TTURLCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIGFuIFNNREsyNDEzCisKK2NvbmZpZyBNQUNIX1MzQzI0MTMKKwlib29sCisJaGVscAorCSAgSW50ZXJuYWwgbm9kZSBmb3IgUzNDMjQxMyB2ZXJzaW9uIG9mIFNNREsyNDEzLCBzbyB0aGF0CisJICBtYWNoaW5lX2lzX3MzYzI0MTMoKSB3aWxsIHdvcmsgd2hlbiBNQUNIX1NNREsyNDEzIGlzCisJICBzZWxlY3RlZAorCitjb25maWcgTUFDSF9WU1RNUworCWJvb2wgIlZNU1RNUyIKKwlzZWxlY3QgQ1BVX1MzQzI0MTIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgYW4gVlNUTVMgYm9hcmQKKworCitlbmRtZW51CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGUwMTE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL01ha2VmaWxlCkBAIC0wLDAgKzEsMjEgQEAKKyMgYXJjaC9hcm0vbWFjaC1zM2MyNDEyL01ha2VmaWxlCisjCisjIENvcHlyaWdodCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitvYmoteQkJCQk6PQorb2JqLW0JCQkJOj0KK29iai1uCQkJCTo9CitvYmotCQkJCTo9CisKK29iai0kKENPTkZJR19DUFVfUzNDMjQxMikJKz0gczNjMjQxMi5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0MTIpCSs9IGlycS5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0MTIpCSs9IGNsb2NrLm8KK29iai0kKENPTkZJR19TM0MyNDEyX0RNQSkJKz0gZG1hLm8KK29iai0kKENPTkZJR19TM0MyNDEyX1BNKQkrPSBwbS5vCisKKyMgTWFjaGluZSBzdXBwb3J0CisKK29iai0kKENPTkZJR19NQUNIX1NNREsyNDEzKQkrPSBtYWNoLXNtZGsyNDEzLm8KK29iai0kKENPTkZJR19NQUNIX1ZTVE1TKQkrPSBtYWNoLXZzdG1zLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLWNsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1jbG9jay5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwppbmRleCA4Zjk0YWQ4Li42YThlNDQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9jbG9jay5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItY2xvY2suYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2Nsb2NrLmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CkBAIC00MSw5ICs0MSw5IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSAiczNjMjQxMi5oIgotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CiAKIC8qIFdlIGN1cnJlbnRseSBoYXZlIHRvIGFzc3VtZSB0aGF0IHRoZSBzeXN0ZW0gaXMgcnVubmluZwogICogZnJvbSB0aGUgWFRQbGwgaW5wdXQsIGFuZCB0aGF0IGFsbCAqKipSRUZDTEtzIGFyZSBiZWluZwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItZG1hLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYwppbmRleCAxMzhmNzI2Li5kMGY0Njk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1kbWEuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpAQCAtMjEsOCArMjEsOCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaW5jbHVkZSAiZG1hLmgiCi0jaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kbWEuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KQEAgLTE0Niw2ICsxNDYsNyBAQAogCiBzdGF0aWMgaW50IHMzYzI0MTJfZG1hX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQogeworCXMzYzI0MTBfZG1hX2luaXQoKTsKIAlyZXR1cm4gczNjMjR4eF9kbWFfaW5pdF9tYXAoJnMzYzI0MTJfZG1hX3NlbCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLWlycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2lycS5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLWlycS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzI0MTIvaXJxLmMKaW5kZXggZmZjYzMwYi4uZTg5ZGJkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2lycS5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTItaXJxLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMi9pcnEuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWlycS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSAiY3B1LmgiCi0jaW5jbHVkZSAiaXJxLmgiCi0jaW5jbHVkZSAicG0uaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvaXJxLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgogCiAvKiB0aGUgczNjMjQxMiBjaGFuZ2VzIHRoZSBiZWhhdmlvdXIgb2YgSVJRX0VJTlQwIHRocm91Z2ggSVJRX0VJTlQzIGJ5CiAgKiBoYXZpbmcgdGhlbSB0dXJuIHVwIGluIGJvdGggdGhlIElOVCogYW5kIHRoZSBFSU5UKiByZWdpc3RlcnMuIFdoaWxzdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTMuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYwppbmRleCA0Zjg5YWJkNy4uYjViZWZjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1zbWRrMjQxMy5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTMuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KQEAgLTM3LDE1ICszNywxNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbGNkLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9pZGxlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdWRjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZmIuaD4KIAotI2luY2x1ZGUgInMzYzI0MTAuaCIKLSNpbmNsdWRlICJzM2MyNDEyLmgiCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJkZXZzLmgiCi0jaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CiAKLSNpbmNsdWRlICJjb21tb24tc21kay5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzbWRrMjQxM19pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogfTsKQEAgLTc1LDEyICs3NiwzOCBAQAogCX0KIH07CiAKK3N0YXRpYyB2b2lkIHNtZGsyNDEzX3VkY19wdWxsdXAoZW51bSBzM2MyNDEwX3VkY19jbWRfZSBjbWQpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgInVkYzogcHVsbHVwKCVkKVxuIixjbWQpOworCisJc3dpdGNoIChjbWQpCisJeworCQljYXNlIFMzQzI0MTBfVURDX1BfRU5BQkxFIDoKKwkJCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEYyLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIFMzQzI0MTBfVURDX1BfRElTQUJMRSA6CisJCQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGMiwgMCk7CisJCQlicmVhazsKKwkJY2FzZSBTM0MyNDEwX1VEQ19QX1JFU0VUIDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91ZGNfbWFjaF9pbmZvIHNtZGsyNDEzX3VkY19jZmcgX19pbml0ZGF0YSA9IHsKKwkudWRjX2NvbW1hbmQJCT0gc21kazI0MTNfdWRjX3B1bGx1cCwKK307CisKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtZGsyNDEzX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzM2NfZGV2aWNlX3VzYiwKIAkvLyZzM2NfZGV2aWNlX2xjZCwKIAkmczNjX2RldmljZV93ZHQsCiAJJnMzY19kZXZpY2VfaTJjLAogCSZzM2NfZGV2aWNlX2lpcywKKwkmczNjX2RldmljZV91c2JnYWRnZXQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfYm9hcmQgc21kazI0MTNfYm9hcmQgX19pbml0ZGF0YSA9IHsKQEAgLTEwOSw3ICsxMzYsMTkgQEAKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDEzX21hY2hpbmVfaW5pdCh2b2lkKQoteworewkvKiBUdXJuIG9mZiBzdXNwZW5kIG9uIGJvdGggVVNCIHBvcnRzLCBhbmQgc3dpdGNoIHRoZQorCSAqIHNlbGVjdGFibGUgVVNCIHBvcnQgdG8gVVNCIGRldmljZSBtb2RlLiAqLworCisJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRjIsIDApOworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEYyLCBTM0MyNDEwX0dQSU9fT1VUUFVUKTsKKworCXMzYzI0MTBfbW9kaWZ5X21pc2NjcihTM0MyNDEwX01JU0NDUl9VU0JIT1NUIHwKKwkJCSAgICAgIFMzQzI0MTBfTUlTQ0NSX1VTQlNVU1BORDAgfAorCQkJICAgICAgUzNDMjQxMF9NSVNDQ1JfVVNCU1VTUE5EMSwgMHgwKTsKKworCisgCXMzYzI0eHhfdWRjX3NldF9wbGF0ZGF0YSgmc21kazI0MTNfdWRjX2NmZyk7CisKIAlzbWRrX21hY2hpbmVfaW5pdCgpOwogfQogCkBAIC0xMjYsNiArMTY1LDE5IEBACiAJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAogTUFDSElORV9FTkQKIAorTUFDSElORV9TVEFSVChTTURLMjQxMiwgIlNNREsyNDEyIikKKwkvKiBNYWludGFpbmVyOiBCZW4gRG9va3MgPGJlbkBmbHVmZi5vcmc+ICovCisJLnBoeXNfaW8JPSBTM0MyNDEwX1BBX1VBUlQsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQzI0WFhfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCwKKworCS5maXh1cAkJPSBzbWRrMjQxM19maXh1cCwKKwkuaW5pdF9pcnEJPSBzM2MyNHh4X2luaXRfaXJxLAorCS5tYXBfaW8JCT0gc21kazI0MTNfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBzbWRrMjQxM19tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKKwogTUFDSElORV9TVEFSVChTTURLMjQxMywgIlNNREsyNDEzIikKIAkvKiBNYWludGFpbmVyOiBCZW4gRG9va3MgPGJlbkBmbHVmZi5vcmc+ICovCiAJLnBoeXNfaW8JPSBTM0MyNDEwX1BBX1VBUlQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12c3Rtcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtdnN0bXMuYwpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12c3Rtcy5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC12c3Rtcy5jCmluZGV4IDAzNjBlMTAuLjQyMzFiNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZzdG1zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtdnN0bXMuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZzdG1zLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXZzdG1zLmMKICAqCiAgKiAoQykgMjAwNiBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KICAqCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTQzLDExICs0MiwxMSBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvbmFuZC5oPgogCi0jaW5jbHVkZSAiczNjMjQxMC5oIgotI2luY2x1ZGUgInMzYzI0MTIuaCIKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KIAogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHZzdG1zX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItcG0uYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMKaW5kZXggMTliNjMzMi4uODk4OGRhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYwpAQCAtMSw0ICsxLDQgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLXBtLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpAQCAtMjgsMTAgKzI4LDEwIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1kc2MuaD4KIAotI2luY2x1ZGUgImNwdS5oIgotI2luY2x1ZGUgInBtLmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CiAKLSNpbmNsdWRlICJzM2MyNDEyLmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmg+CiAKIHN0YXRpYyB2b2lkIHMzYzI0MTJfY3B1X3N1c3BlbmQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKaW5kZXggMmY2NTFhOC4uYWFmZTBiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTIuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KQEAgLTM4LDExICszOCwxMSBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpb2ouaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWRzYy5oPgogCi0jaW5jbHVkZSAiczNjMjQxMi5oIgotI2luY2x1ZGUgImNwdS5oIgotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgInBtLmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgogCiAjaWZuZGVmIENPTkZJR19DUFVfUzNDMjQxMl9PTkxZCiB2b2lkIF9faW9tZW0gKnMzYzI0eHhfdmFfZ3BpbzIgPSBTM0MyNFhYX1ZBX0dQSU87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYmZkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZwpAQCAtMCwwICsxLDcxIEBACisjIGFyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCisjCisjIENvcHlyaWdodCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitjb25maWcgQ1BVX1MzQzI0NDAKKwlib29sCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwlzZWxlY3QgUzNDMjQxMF9DTE9DSworCXNlbGVjdCBTM0MyNDEwX1BNIGlmIFBNCisJc2VsZWN0IFMzQzI0MTBfR1BJTworCXNlbGVjdCBTM0MyNDQwX0RNQSBpZiBTM0MyNDEwX0RNQQorCXNlbGVjdCBDUFVfUzNDMjQ0WAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFMzQzI0NDAgU2Ftc3VuZyBNb2JpbGUgQ1BVIGJhc2VkIHN5c3RlbXMuCisKK2NvbmZpZyBTM0MyNDQwX0RNQQorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBDUFVfUzNDMjQ0MDVCCisJaGVscAorCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MCBzcGVjaWZpYyBETUEgY29kZTVBCisKKworbWVudSAiUzNDMjQ0MCBNYWNoaW5lcyIKKworY29uZmlnIE1BQ0hfQU5VQklTCisJYm9vbCAiU2ltdGVjIEVsZWN0cm9uaWNzIEFOVUJJUyIKKwlzZWxlY3QgQ1BVX1MzQzI0NDAKKwlzZWxlY3QgUE1fU0lNVEVDIGlmIFBNCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTaW10ZWMgRWxlY3Ryb25pY3MgQU5VQklTCisJICBkZXZlbG9wbWVudCBzeXN0ZW0KKworY29uZmlnIE1BQ0hfT1NJUklTCisJYm9vbCAiU2ltdGVjIElNMjQ0MEQyMCAoT1NJUklTKSBtb2R1bGUiCisJc2VsZWN0IENQVV9TM0MyNDQwCisJc2VsZWN0IFBNX1NJTVRFQyBpZiBQTQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIElNMjQ0MEQyMCBtb2R1bGUsIGFsc28KKwkgIGtub3duIGFzIHRoZSBPc2lyaXMuCisKK2NvbmZpZyBNQUNIX1JYMzcxNQorCWJvb2wgIkhQIGlQQVEgcngzNzE1IgorCXNlbGVjdCBDUFVfUzNDMjQ0MAorCXNlbGVjdCBQTV9IMTk0MCBpZiBQTQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgSFAgaVBBUSByeDM3MTUuCisKK2NvbmZpZyBBUkNIX1MzQzI0NDAKKwlib29sICJTTURLMjQ0MCIKKwlzZWxlY3QgQ1BVX1MzQzI0NDAKKwlzZWxlY3QgTUFDSF9TTURLCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTTURLMjQ0MC4KKworY29uZmlnIE1BQ0hfTkVYQ09ERVJfMjQ0MAorIAlib29sICJOZXhWaXNpb24gTkVYQ09ERVIgMjQ0MCBMaWdodCBCb2FyZCIKKyAJc2VsZWN0IENQVV9TM0MyNDQwCisJaGVscAorIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTmV4IFZpc2lvbiBORVhDT0RFUiAyNDQwIExpZ2h0IEJvYXJkCisKK2NvbmZpZyBTTURLMjQ0MF9DUFUyNDQwCisJYm9vbCAiU01ESzI0NDAgd2l0aCBTM0MyNDQwIENQVSBtb2R1bGUiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0NDAKKwlkZWZhdWx0IHkgaWYgQVJDSF9TM0MyNDQwCisJc2VsZWN0IENQVV9TM0MyNDQwCisKKworZW5kbWVudQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxZWQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9NYWtlZmlsZQpAQCAtMCwwICsxLDIzIEBACisjIGFyY2gvYXJtL21hY2gtczNjMjQ0MC9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyMKKyMgTGljZW5zZWQgdW5kZXIgR1BMdjIKKworb2JqLXkJCQkJOj0KK29iai1tCQkJCTo9CitvYmotbgkJCQk6PQorb2JqLQkJCQk6PQorCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NDApCSs9IHMzYzI0NDAubyBkc2Mubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKQkrPSBpcnEubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKQkrPSBjbG9jay5vCitvYmotJChDT05GSUdfUzNDMjQ0MF9ETUEpCSs9IGRtYS5vCisKKyMgTWFjaGluZSBzdXBwb3J0CisKK29iai0kKENPTkZJR19NQUNIX0FOVUJJUykJKz0gbWFjaC1hbnViaXMubworb2JqLSQoQ09ORklHX01BQ0hfT1NJUklTKQkrPSBtYWNoLW9zaXJpcy5vCitvYmotJChDT05GSUdfTUFDSF9SWDM3MTUpCSs9IG1hY2gtcngzNzE1Lm8KK29iai0kKENPTkZJR19BUkNIX1MzQzI0NDApCSs9IG1hY2gtc21kazI0NDAubworb2JqLSQoQ09ORklHX01BQ0hfTkVYQ09ERVJfMjQ0MCkgKz0gbWFjaC1uZXhjb2Rlci5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2Nsb2NrLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtY2xvY2suYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2Nsb2NrLmMKaW5kZXggYmExM2MxZC4uNzllMmVhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvY2xvY2suYwpAQCAtMSw0ICsxLDQgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWNsb2NrLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0MC9jbG9jay5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwpAQCAtNDEsOCArNDEsOCBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jbG9jay5oPgogCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KIAogLyogUzNDMjQ0MCBleHRlbmRlZCBjbG9jayBzdXBwb3J0ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRtYS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKaW5kZXggNDdiODYxYi4uY2QwMzVhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtZG1hLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KQEAgLTE5LDkgKzE5LDkgQEAKIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KLSNpbmNsdWRlICJkbWEuaCIKIAotI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZG1hLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CkBAIC0xNDcsOCArMTQ3LDUzIEBACiAJLm1hcF9zaXplCT0gQVJSQVlfU0laRShzM2MyNDQwX2RtYV9tYXBwaW5ncyksCiB9OwogCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyIF9faW5pdGRhdGEgczNjMjQ0MF9kbWFfb3JkZXIgPSB7CisJLmNoYW5uZWxzCT0geworCQlbRE1BQ0hfU0RJXQk9IHsKKwkJCS5saXN0CT0geworCQkJCVswXQk9IDMgfCBETUFfQ0hfVkFMSUQsCisJCQkJWzFdCT0gMiB8IERNQV9DSF9WQUxJRCwKKwkJCQlbMl0JPSAxIHwgRE1BX0NIX1ZBTElELAorCQkJCVszXQk9IDAgfCBETUFfQ0hfVkFMSUQsCisJCQl9LAorCQl9LAorCQlbRE1BQ0hfSTJTX0lOXQk9IHsKKwkJCS5saXN0CT0geworCQkJCVswXQk9IDEgfCBETUFfQ0hfVkFMSUQsCisJCQkJWzFdCT0gMiB8IERNQV9DSF9WQUxJRCwKKwkJCX0sCisJCX0sCisJCVtETUFDSF9JMlNfT1VUXQk9IHsKKwkJCS5saXN0CT0geworCQkJCVswXQk9IDIgfCBETUFfQ0hfVkFMSUQsCisJCQkJWzFdCT0gMSB8IERNQV9DSF9WQUxJRCwKKwkJCX0sCisJCX0sCisJCVtETUFDSF9QQ01fSU5dID0geworCQkJLmxpc3QJPSB7CisJCQkJWzBdCT0gMiB8IERNQV9DSF9WQUxJRCwKKwkJCQlbMV0JPSAxIHwgRE1BX0NIX1ZBTElELAorCQkJfSwKKwkJfSwKKwkJW0RNQUNIX1BDTV9PVVRdID0geworCQkJLmxpc3QJPSB7CisJCQkJWzBdCT0gMSB8IERNQV9DSF9WQUxJRCwKKwkJCQlbMV0JPSAzIHwgRE1BX0NIX1ZBTElELAorCQkJfSwKKwkJfSwKKwkJW0RNQUNIX01JQ19JTl0gPSB7CisJCQkubGlzdAk9IHsKKwkJCQlbMF0JPSAzIHwgRE1BX0NIX1ZBTElELAorCQkJCVsxXQk9IDIgfCBETUFfQ0hfVkFMSUQsCisJCQl9LAorCQl9LAorCX0sCit9OworCiBzdGF0aWMgaW50IHMzYzI0NDBfZG1hX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQogeworCXMzYzI0MTBfZG1hX2luaXQoKTsKKwlzM2MyNHh4X2RtYV9vcmRlcl9zZXQoJnMzYzI0NDBfZG1hX29yZGVyKTsKIAlyZXR1cm4gczNjMjR4eF9kbWFfaW5pdF9tYXAoJnMzYzI0NDBfZG1hX3NlbCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRzYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RzYy5jCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRzYy5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzI0NDAvZHNjLmMKaW5kZXggYzkyZWE2Ni4uMjk5NWZmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtZHNjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RzYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtZHNjLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kc2MuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwogICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1kc2MuaD4KIAotI2luY2x1ZGUgImNwdS5oIgotI2luY2x1ZGUgInMzYzI0NDAuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0MC5oPgogCiBpbnQgczNjMjQ0MF9zZXRfZHNjKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2lycS5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzI0NDAvaXJxLmMKaW5kZXggMWJhMTliMi4uMTA2OWQxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2lycS5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtaXJxLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pcnEuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwMywyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlICJjcHUuaCIKLSNpbmNsdWRlICJwbS5oIgotI2luY2x1ZGUgImlycS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvaXJxLmg+CiAKIC8qIFdEVC9BQzk3ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYW51YmlzLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jCmluZGV4IDBmYWQwYzIuLjNmMDI4OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwpAQCAtNDIsOSArNDIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KIAogI2RlZmluZSBDT1BZUklHSFQgIiwgKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbmV4Y29kZXIuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1uZXhjb2Rlci5jCmluZGV4IGQ2ZGZkYWQuLjZkNTUxZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbmV4Y29kZXIuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW5leGNvZGVyLmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgTmV4IFZpc2lvbgogICogICBHdWlsbGF1bWUgR09VUkFUIDxndWlsbGF1bWUuZ291cmF0QG5leHZpc2lvbi50dj4KQEAgLTM4LDExICszOCwxMSBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CiAKLSNpbmNsdWRlICJzM2MyNDEwLmgiCi0jaW5jbHVkZSAiczNjMjQ0MC5oIgotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiZGV2cy5oIgotI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0MC5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG5leGNvZGVyX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJLyogbm90aGluZyBoZXJlIHlldCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3NpcmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKaW5kZXggMzdiNDA4NS4uMmVkOGU1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3NpcmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwpAQCAtNDEsOSArNDEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KIAogLyogb25ib2FyZCBwZXJpaHBoZXJhbCBtYXAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcngzNzE1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngzNzE1LmMKaW5kZXggZWNiY2RmNy4uNDgwY2NkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcngzNzE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngzNzE1LmMKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngzNzE1LmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb21kLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC00NiwxMCArNDUsMTAgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9uYW5kLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZmIuaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiZGV2cy5oIgotI2luY2x1ZGUgImNwdS5oIgotI2luY2x1ZGUgInBtLmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHJ4MzcxNV9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogCS8qIGR1bXAgSVNBIHNwYWNlIHNvbWV3aGVyZSB1bnVzZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1zbWRrMjQ0MC5jCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXNtZGsyNDQwLmMKaW5kZXggMmI2MWY0ZS4uYzE3ZWI1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1zbWRrMjQ0MC5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtc21kazI0NDAuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA1IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpAQCAtMjcsMTIgKzI3LDEwIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0vLyNpbmNsdWRlIDxhc20vZGVidWctbGwuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbGNkLmg+CkBAIC00MCwxMyArMzgsMTMgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZmIuaD4KIAotI2luY2x1ZGUgInMzYzI0MTAuaCIKLSNpbmNsdWRlICJzM2MyNDQwLmgiCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJkZXZzLmgiCi0jaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CiAKLSNpbmNsdWRlICJjb21tb24tc21kay5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzbWRrMjQ0MF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogCS8qIElTQSBJTyBTcGFjZSBtYXAgKG1lbW9yeSBzcGFjZSBzZWxlY3RlZCBieSBBMjQpICovCkBAIC0xNDQsNiArMTQyLDcgQEAKICNlbmRpZgogCiAJLmxwY3NlbAkJPSAoKDB4Q0U2KSAmIH43KSB8IDE8PDQsCisJLnR5cGUJCT0gUzNDMjQxMF9MQ0RDT04xX1RGVDE2QlBQLAogCiAJLndpZHRoCQk9IDI0MCwKIAkuaGVpZ2h0CQk9IDMyMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC5jCnNpbWlsYXJpdHkgaW5kZXggODglCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMKaW5kZXggMzQ0ZWIyNy4uOTBlMWRhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaW5jbHVkZSAiczNjMjQ0MC5oIgotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgogCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjMjQ0MF9zeXNkZXYgPSB7CiAJLmNscwkJPSAmczNjMjQ0MF9zeXNjbGFzcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4ZDg3YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9LY29uZmlnCkBAIC0wLDAgKzEsMjcgQEAKKyMgYXJjaC9hcm0vbWFjaC1zM2MyNDQyL0tjb25maWcKKyMKKyMgQ29weXJpZ2h0IDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK2NvbmZpZyBDUFVfUzNDMjQ0MgorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQyMAorCXNlbGVjdCBTM0MyNDEwX0NMT0NLCisJc2VsZWN0IFMzQzI0MTBfR1BJTworCXNlbGVjdCBTM0MyNDEwX1BNIGlmIFBNCisJc2VsZWN0IENQVV9TM0MyNDRYCisJaGVscAorCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MiBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KKworCittZW51ICJTM0MyNDQyIE1hY2hpbmVzIgorCitjb25maWcgU01ESzI0NDBfQ1BVMjQ0MgorCWJvb2wgIlNNRE0yNDQwIHdpdGggUzNDMjQ0MiBDUFUgbW9kdWxlIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDQwCisJc2VsZWN0IENQVV9TM0MyNDQyCisKKworZW5kbWVudQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5MDljNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9NYWtlZmlsZQpAQCAtMCwwICsxLDE2IEBACisjIGFyY2gvYXJtL21hY2gtczNjMjQ0Mi9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyMKKyMgTGljZW5zZWQgdW5kZXIgR1BMdjIKKworb2JqLXkJCQkJOj0KK29iai1tCQkJCTo9CitvYmotbgkJCQk6PQorb2JqLQkJCQk6PQorCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NDIpCSs9IHMzYzI0NDIubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQyKQkrPSBjbG9jay5vCisKKyMgTWFjaGluZSBzdXBwb3J0CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLWNsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDIvY2xvY2suYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi1jbG9jay5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzI0NDIvY2xvY2suYwppbmRleCA0ZTI5MmNhLi41YjllODMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi1jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9jbG9jay5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDItY2xvY2suYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL2Nsb2NrLmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCkBAIC00MSw4ICs0MSw4IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CiAKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgogCiAvKiBTM0MyNDQyIGV4dGVuZGVkIGNsb2NrIHN1cHBvcnQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9zM2MyNDQyLmMKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDIuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zM2MyNDQyL3MzYzI0NDIuYwppbmRleCA0Mjg3MzJlLi5mYmY4MjY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9zM2MyNDQyLmMKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi5jCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0NDIvczNjMjQ0Mi5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KIAotI2luY2x1ZGUgInMzYzI0NDIuaCIKLSNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDIuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgogCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjMjQ0Ml9zeXNkZXYgPSB7CiAJLmNscwkJPSAmczNjMjQ0Ml9zeXNjbGFzcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0OWJiMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9LY29uZmlnCkBAIC0wLDAgKzEsMjkgQEAKKyMgYXJjaC9hcm0vbWFjaC1zM2MyNDQzL0tjb25maWcKKyMKKyMgQ29weXJpZ2h0IDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK2NvbmZpZyBDUFVfUzNDMjQ0MworCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAorCXNlbGVjdCBTM0MyNDQzX0RNQSBpZiBTM0MyNDEwX0RNQQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBTM0MyNDQzIFNvQyBmcm9tIHRoZSBTM0MyNFhYIGxpbmUKKworY29uZmlnIFMzQzI0NDNfRE1BCisJYm9vbAorCWRlcGVuZHMgb24gQ1BVX1MzQzI0NDMKKwloZWxwCisJICBJbnRlcm5hbCBjb25maWcgbm9kZSBmb3IgUzNDMjQ0MyBETUEgc3VwcG9ydAorCittZW51ICJTM0MyNDQzIE1hY2hpbmVzIgorCitjb25maWcgTUFDSF9TTURLMjQ0MworCWJvb2wgIlNNREsyNDQzIgorCXNlbGVjdCBDUFVfUzNDMjQ0MworCXNlbGVjdCBNQUNIX1NNREsKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgYW4gU01ESzI0NDMKKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxODQzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvTWFrZWZpbGUKQEAgLTAsMCArMSwyMCBAQAorIyBhcmNoL2FybS9tYWNoLXMzYzI0NDMvTWFrZWZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK29iai15CQkJCTo9CitvYmotbQkJCQk6PQorb2JqLW4JCQkJOj0KK29iai0JCQkJOj0KKworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQzKQkrPSBzM2MyNDQzLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0MykJKz0gaXJxLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0MykJKz0gY2xvY2subworCitvYmotJChDT05GSUdfUzNDMjQ0M19ETUEpCSs9IGRtYS5vCisKKyMgTWFjaGluZSBzdXBwb3J0CisKK29iai0kKENPTkZJR19NQUNIX1NNREsyNDQzKQkrPSBtYWNoLXNtZGsyNDQzLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyMjcyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9jbG9jay5jCkBAIC0wLDAgKzEsMTAwNyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQ0MyBDbG9jayBjb250cm9sIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtczNjMjQ0My1jbG9jay5oPgorCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisKKy8qIFdlIGN1cnJlbnRseSBoYXZlIHRvIGFzc3VtZSB0aGF0IHRoZSBzeXN0ZW0gaXMgcnVubmluZworICogZnJvbSB0aGUgWFRQbGwgaW5wdXQsIGFuZCB0aGF0IGFsbCAqKipSRUZDTEtzIGFyZSBiZWluZworICogZmVkIGZyb20gaXQsIGFzIHdlIGNhbm5vdCByZWFkIHRoZSBzdGF0ZSBvZiBPTVs0XSBmcm9tCisgKiBzb2Z0d2FyZS4KKyAqCisgKiBJdCB3b3VsZCBiZSBwb3NzaWJsZSBmb3IgZWFjaCBib2FyZCBpbml0aWFsaXNhdGlvbiB0bworICogc2V0IHRoZSBjb3JyZWN0IG11eGluZyBhdCBpbml0aWFsaXNhdGlvbgorKi8KKworc3RhdGljIGludCBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IGNsb2NrcyA9IGNsay0+Y3RybGJpdDsKKwl1bnNpZ25lZCBsb25nIGNsa2NvbjsKKworCWNsa2NvbiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfSENMS0NPTik7CisKKwlpZiAoZW5hYmxlKQorCQljbGtjb24gfD0gY2xvY2tzOworCWVsc2UKKwkJY2xrY29uICY9IH5jbG9ja3M7CisKKwlfX3Jhd193cml0ZWwoY2xrY29uLCBTM0MyNDQzX0hDTEtDT04pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjQ0M19jbGtjb25fZW5hYmxlX3Aoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBjbG9ja3MgPSBjbGstPmN0cmxiaXQ7CisJdW5zaWduZWQgbG9uZyBjbGtjb247CisKKwljbGtjb24gPSBfX3Jhd19yZWFkbChTM0MyNDQzX1BDTEtDT04pOworCisJaWYgKGVuYWJsZSkKKwkJY2xrY29uIHw9IGNsb2NrczsKKwllbHNlCisJCWNsa2NvbiAmPSB+Y2xvY2tzOworCisJX19yYXdfd3JpdGVsKGNsa2NvbiwgUzNDMjQ0M19IQ0xLQ09OKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9zKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgY2xvY2tzID0gY2xrLT5jdHJsYml0OworCXVuc2lnbmVkIGxvbmcgY2xrY29uOworCisJY2xrY29uID0gX19yYXdfcmVhZGwoUzNDMjQ0M19TQ0xLQ09OKTsKKworCWlmIChlbmFibGUpCisJCWNsa2NvbiB8PSBjbG9ja3M7CisJZWxzZQorCQljbGtjb24gJj0gfmNsb2NrczsKKworCV9fcmF3X3dyaXRlbChjbGtjb24sIFMzQzI0NDNfU0NMS0NPTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4KQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCWludCBkaXY7CisKKwlpZiAocmF0ZSA+IHBhcmVudF9yYXRlKQorCQlyZXR1cm4gcGFyZW50X3JhdGU7CisKKwkvKiBub3RlLCB3ZSByZW1vdmUgdGhlICsvLSAxIGNhbGN1bGF0aW9ucyBhcyB0aGV5IGNhbmNlbCBvdXQgKi8KKworCWRpdiA9IChyYXRlIC8gcGFyZW50X3JhdGUpOworCisJaWYgKGRpdiA8IDEpCisJCWRpdiA9IDE7CisJZWxzZSBpZiAoZGl2ID4gbWF4KQorCQlkaXYgPSBtYXg7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzQoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMoY2xrLCByYXRlLCA0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjMTYoc3RydWN0IGNsayAqY2xrLAorCQkJCQkJdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMoY2xrLCByYXRlLCAxNik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzI1NihzdHJ1Y3QgY2xrICpjbGssCisJCQkJCQkgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMoY2xrLCByYXRlLCAyNTYpOworfQorCisvKiBjbG9jayBzZWxlY3Rpb25zICovCisKKy8qIENQVSBFWFRDTEsgaW5wdXQgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19leHQgPSB7CisJLm5hbWUJCT0gImV4dCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX21wbGxyZWYgPSB7CisJLm5hbWUJCT0gIm1wbGxyZWYiLAorCS5wYXJlbnQJCT0gJmNsa194dGFsLAorCS5pZAkJPSAtMSwKK307CisKKyNpZiAwCitzdGF0aWMgc3RydWN0IGNsayBjbGtfbXBsbCA9IHsKKwkubmFtZQkJPSAibXBsbCIsCisJLnBhcmVudAkJPSAmY2xrX21wbGxyZWYsCisJLmlkCQk9IC0xLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfZXBsbHJlZjsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2VwbGwgPSB7CisJLm5hbWUJCT0gImVwbGwiLAorCS5wYXJlbnQJCT0gJmNsa19lcGxscmVmLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19pMnNfZXh0ID0geworCS5uYW1lCQk9ICJpMnMtZXh0IiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgaW50IHMzYzI0NDNfc2V0cGFyZW50X2VwbGxyZWYoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdW5zaWduZWQgbG9uZyBjbGtzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS1NSQyk7CisKKwljbGtzcmMgJj0gflMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfTUFTSzsKKworCWlmIChwYXJlbnQgPT0gJmNsa194dGFsKQorCQljbGtzcmMgfD0gUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9YVEFMOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2V4dCkKKwkJY2xrc3JjIHw9IFMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfRVhUQ0xLOworCWVsc2UgaWYgKHBhcmVudCAhPSAmY2xrX21wbGxyZWYpCisJCXJldHVybiAtRUlOVkFMOworCisJX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDMjQ0M19DTEtTUkMpOworCWNsay0+cGFyZW50ID0gcGFyZW50OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19lcGxscmVmID0geworCS5uYW1lCQk9ICJlcGxscmVmIiwKKwkuaWQJCT0gLTEsCisJLnNldF9wYXJlbnQJPSBzM2MyNDQzX3NldHBhcmVudF9lcGxscmVmLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19nZXRyYXRlX21kaXZjbGsoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYwKTsKKworCWRpdiAgJj0gUzNDMjQ0M19DTEtESVYwX0VYVERJVl9NQVNLOworCWRpdiA+Pj0gKFMzQzI0NDNfQ0xLRElWMF9FWFRESVZfU0hJRlQtMSk7CS8qIHgyICovCisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAoZGl2ICsgMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tZGl2Y2xrID0geworCS5uYW1lCQk9ICJtZGl2Y2xrIiwKKwkucGFyZW50CQk9ICZjbGtfbXBsbHJlZiwKKwkuaWQJCT0gLTEsCisJLmdldF9yYXRlCT0gczNjMjQ0M19nZXRyYXRlX21kaXZjbGssCit9OworCisKK3N0YXRpYyBpbnQgczNjMjQ0M19zZXRwYXJlbnRfbXN5c2NsayhzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGNsa3NyYyA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLU1JDKTsKKworCWNsa3NyYyAmPSB+KFMzQzI0NDNfQ0xLU1JDX01TWVNDTEtfTVBMTCB8CisJCSAgICBTM0MyNDQzX0NMS1NSQ19FWFRDTEtfRElWKTsKKworCWlmIChwYXJlbnQgPT0gJmNsa19tcGxsKQorCQljbGtzcmMgfD0gUzNDMjQ0M19DTEtTUkNfTVNZU0NMS19NUExMOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX21kaXZjbGspCisJCWNsa3NyYyB8PSBTM0MyNDQzX0NMS1NSQ19FWFRDTEtfRElWOworCWVsc2UgaWYgKHBhcmVudCAhPSAmY2xrX21wbGxyZWYpCisJCXJldHVybiAtRUlOVkFMOworCisJX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDMjQ0M19DTEtTUkMpOworCWNsay0+cGFyZW50ID0gcGFyZW50OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tc3lzY2xrID0geworCS5uYW1lCQk9ICJtc3lzY2xrIiwKKwkucGFyZW50CQk9ICZjbGtfeHRhbCwKKwkuaWQJCT0gLTEsCisJLnNldF9wYXJlbnQJPSBzM2MyNDQzX3NldHBhcmVudF9tc3lzY2xrLAorfTsKKworCisvKiBlc3lzY2xrCisgKgorICogdGhpcyBpcyBzb3VyY2VkIGZyb20gZWl0aGVyIHRoZSBFUExMIG9yIHRoZSBFUExMcmVmIGNsb2NrCisqLworCitzdGF0aWMgaW50IHMzYzI0NDNfc2V0cGFyZW50X2VzeXNjbGsoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdW5zaWduZWQgbG9uZyBjbGtzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS1NSQyk7CisKKwlpZiAocGFyZW50ID09ICZjbGtfZXBsbCkKKwkJY2xrc3JjIHw9IFMzQzI0NDNfQ0xLU1JDX0VTWVNDTEtfRVBMTDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19lcGxscmVmKQorCQljbGtzcmMgJj0gflMzQzI0NDNfQ0xLU1JDX0VTWVNDTEtfRVBMTDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDMjQ0M19DTEtTUkMpOworCWNsay0+cGFyZW50ID0gcGFyZW50OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19lc3lzY2xrID0geworCS5uYW1lCQk9ICJlc3lzY2xrIiwKKwkucGFyZW50CQk9ICZjbGtfZXBsbCwKKwkuaWQJCT0gLTEsCisJLnNldF9wYXJlbnQJPSBzM2MyNDQzX3NldHBhcmVudF9lc3lzY2xrLAorfTsKKworLyogdWFydGNsaworICoKKyAqIFVBUlQgYmF1ZC1yYXRlIGNsb2NrIHNvdXJjZWQgZnJvbSBlc3lzY2xrIHZpYSBhIGRpdmlzb3IKKyovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfZ2V0cmF0ZV91YXJ0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMSk7CisKKwlkaXYgJj0gUzNDMjQ0M19DTEtESVYxX1VBUlRESVZfTUFTSzsKKwlkaXYgPj49IFMzQzI0NDNfQ0xLRElWMV9VQVJURElWX1NISUZUOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiArIDEpOworfQorCisKK3N0YXRpYyBpbnQgczNjMjQ0M19zZXRyYXRlX3VhcnQoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBjbGtkaXZuID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYxKTsKKworCXJhdGUgPSBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMxNihjbGssIHJhdGUpOworCXJhdGUgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisKKwljbGtkaXZuICY9IH5TM0MyNDQzX0NMS0RJVjFfVUFSVERJVl9NQVNLOworCWNsa2Rpdm4gfD0gKHJhdGUgLSAxKSA8PCBTM0MyNDQzX0NMS0RJVjFfVUFSVERJVl9TSElGVDsKKworCV9fcmF3X3dyaXRlbChjbGtkaXZuLCBTM0MyNDQzX0NMS0RJVjEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydCA9IHsKKwkubmFtZQkJPSAidWFydGNsayIsCisJLmlkCQk9IC0xLAorCS5wYXJlbnQJCT0gJmNsa19lc3lzY2xrLAorCS5nZXRfcmF0ZQk9IHMzYzI0NDNfZ2V0cmF0ZV91YXJ0LAorCS5zZXRfcmF0ZQk9IHMzYzI0NDNfc2V0cmF0ZV91YXJ0LAorCS5yb3VuZF9yYXRlCT0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjMTYsCit9OworCisvKiBoc3NwaQorICoKKyAqIGhpZ2gtc3BlZWQgc3BpIGNsb2NrLCBzb3VyY2VkIGZyb20gZXN5c2NsaworKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19nZXRyYXRlX2hzc3BpKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMSk7CisKKwlkaXYgJj0gUzNDMjQ0M19DTEtESVYxX0hTU1BJRElWX01BU0s7CisJZGl2ID4+PSBTM0MyNDQzX0NMS0RJVjFfSFNTUElESVZfU0hJRlQ7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAoZGl2ICsgMSk7Cit9CisKKworc3RhdGljIGludCBzM2MyNDQzX3NldHJhdGVfaHNzcGkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBjbGtkaXZuID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYxKTsKKworCXJhdGUgPSBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmM0KGNsaywgcmF0ZSk7CisJcmF0ZSA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWNsa2Rpdm4gJj0gflMzQzI0NDNfQ0xLRElWMV9IU1NQSURJVl9NQVNLOworCWNsa2Rpdm4gfD0gKHJhdGUgLSAxKSA8PCBTM0MyNDQzX0NMS0RJVjFfSFNTUElESVZfU0hJRlQ7CisKKwlfX3Jhd193cml0ZWwoY2xrZGl2biwgUzNDMjQ0M19DTEtESVYxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2hzc3BpID0geworCS5uYW1lCQk9ICJoc3NwaSIsCisJLmlkCQk9IC0xLAorCS5wYXJlbnQJCT0gJmNsa19lc3lzY2xrLAorCS5jdHJsYml0CT0gUzNDMjQ0M19TQ0xLQ09OX0hTU1BJQ0xLLAorCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3MsCisJLmdldF9yYXRlCT0gczNjMjQ0M19nZXRyYXRlX2hzc3BpLAorCS5zZXRfcmF0ZQk9IHMzYzI0NDNfc2V0cmF0ZV9oc3NwaSwKKwkucm91bmRfcmF0ZQk9IHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzQsCit9OworCisvKiB1c2Job3N0CisgKgorICogdXNiIGhvc3QgYnVzLWNsb2NrLCB1c3VhbGx5IDQ4TUh6IHRvIHByb3ZpZGUgVVNCIGJ1cyBjbG9jayB0aW1pbmcKKyovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfZ2V0cmF0ZV91c2Job3N0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMSk7CisKKwlkaXYgJj0gUzNDMjQ0M19DTEtESVYxX1VTQkhPU1RESVZfTUFTSzsKKwlkaXYgPj49IFMzQzI0NDNfQ0xLRElWMV9VU0JIT1NURElWX1NISUZUOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiArIDEpOworfQorCitzdGF0aWMgaW50IHMzYzI0NDNfc2V0cmF0ZV91c2Job3N0KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgY2xrZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMSk7CisKKwlyYXRlID0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjNChjbGssIHJhdGUpOworCXJhdGUgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisKKwljbGtkaXZuICY9IH5TM0MyNDQzX0NMS0RJVjFfVVNCSE9TVERJVl9NQVNLOworCWNsa2Rpdm4gfD0gKHJhdGUgLSAxKSA8PCBTM0MyNDQzX0NMS0RJVjFfVVNCSE9TVERJVl9TSElGVDsKKworCV9fcmF3X3dyaXRlbChjbGtkaXZuLCBTM0MyNDQzX0NMS0RJVjEpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY2xrIGNsa191c2JfYnVzX2hvc3QgPSB7CisJLm5hbWUJCT0gInVzYi1idXMtaG9zdC1wYXJlbnQiLAorCS5pZAkJPSAtMSwKKwkucGFyZW50CQk9ICZjbGtfZXN5c2NsaywKKwkuY3RybGJpdAk9IFMzQzI0NDNfU0NMS0NPTl9VU0JIT1NULAorCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3MsCisJLmdldF9yYXRlCT0gczNjMjQ0M19nZXRyYXRlX3VzYmhvc3QsCisJLnNldF9yYXRlCT0gczNjMjQ0M19zZXRyYXRlX3VzYmhvc3QsCisJLnJvdW5kX3JhdGUJPSBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmM0LAorfTsKKworLyogY2xrX2hzbWNjX2RpdgorICoKKyAqIHRoaXMgY2xvY2sgaXMgc291cmNlZCBmcm9tIGVwbGwsIGFuZCBpcyBmZWQgdGhyb3VnaCBhIGRpdmlkZXIsCisgKiB0byBhIG11eCBjb250cm9sbGVkIGJ5IHNjbGtjb24gd2hlcmUgZWl0aGVyIGl0IG9yIGEgZXh0Y2xrIGNhbgorICogYmUgZmVkIHRvIHRoZSBoc21tYyBibG9jaworKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19nZXRyYXRlX2hzbW1jX2RpdihzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjEpOworCisJZGl2ICY9IFMzQzI0NDNfQ0xLRElWMV9IU01NQ0RJVl9NQVNLOworCWRpdiA+Pj0gUzNDMjQ0M19DTEtESVYxX0hTTU1DRElWX1NISUZUOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiArIDEpOworfQorCitzdGF0aWMgaW50IHMzYzI0NDNfc2V0cmF0ZV9oc21tY19kaXYoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBjbGtkaXZuID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYxKTsKKworCXJhdGUgPSBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmM0KGNsaywgcmF0ZSk7CisJcmF0ZSA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWNsa2Rpdm4gJj0gflMzQzI0NDNfQ0xLRElWMV9IU01NQ0RJVl9NQVNLOworCWNsa2Rpdm4gfD0gKHJhdGUgLSAxKSA8PCBTM0MyNDQzX0NMS0RJVjFfSFNNTUNESVZfU0hJRlQ7CisKKwlfX3Jhd193cml0ZWwoY2xrZGl2biwgUzNDMjQ0M19DTEtESVYxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2hzbW1jX2RpdiA9IHsKKwkubmFtZQkJPSAiaHNtbWMtZGl2IiwKKwkuaWQJCT0gLTEsCisJLnBhcmVudAkJPSAmY2xrX2VzeXNjbGssCisJLmdldF9yYXRlCT0gczNjMjQ0M19nZXRyYXRlX2hzbW1jX2RpdiwKKwkuc2V0X3JhdGUJPSBzM2MyNDQzX3NldHJhdGVfaHNtbWNfZGl2LAorCS5yb3VuZF9yYXRlCT0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjNCwKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0M19zZXRwYXJlbnRfaHNtbWMoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdW5zaWduZWQgbG9uZyBjbGtzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDQzX1NDTEtDT04pOworCisJY2xrc3JjICY9IH4oUzNDMjQ0M19TQ0xLQ09OX0hTTU1DQ0xLX0VYVCB8CisJCSAgICBTM0MyNDQzX1NDTEtDT05fSFNNTUNDTEtfRVBMTCk7CisKKwlpZiAocGFyZW50ID09ICZjbGtfZXBsbCkKKwkJY2xrc3JjIHw9IFMzQzI0NDNfU0NMS0NPTl9IU01NQ0NMS19FUExMOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2V4dCkKKwkJY2xrc3JjIHw9IFMzQzI0NDNfU0NMS0NPTl9IU01NQ0NMS19FWFQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbGstPnVzYWdlID4gMCkgeworCQlfX3Jhd193cml0ZWwoY2xrc3JjLCBTM0MyNDQzX1NDTEtDT04pOworCX0KKworCWNsay0+cGFyZW50ID0gcGFyZW50OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0NDNfZW5hYmxlX2hzbW1jKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczNjMjQ0M19zZXRwYXJlbnRfaHNtbWMoY2xrLCBjbGstPnBhcmVudCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oc21tYyA9IHsKKwkubmFtZQkJPSAiaHNtbWMtaWYiLAorCS5pZAkJPSAtMSwKKwkucGFyZW50CQk9ICZjbGtfaHNtbWNfZGl2LAorCS5lbmFibGUJCT0gczNjMjQ0M19lbmFibGVfaHNtbWMsCisJLnNldF9wYXJlbnQJPSBzM2MyNDQzX3NldHBhcmVudF9oc21tYywKK307CisKKy8qIGkyc19lcGxsZGl2CisgKgorICogdGhpcyBjbG9jayBpcyB0aGUgb3V0cHV0IGZyb20gdGhlIGkycyBkaXZpc29yIG9mIGVzeXNjbGsKKyovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfZ2V0cmF0ZV9pMnNfZXBsbGRpdihzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjEpOworCisJZGl2ICY9IFMzQzI0NDNfQ0xLRElWMV9JMlNESVZfTUFTSzsKKwlkaXYgPj49IFMzQzI0NDNfQ0xLRElWMV9JMlNESVZfU0hJRlQ7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAoZGl2ICsgMSk7Cit9CisKK3N0YXRpYyBpbnQgczNjMjQ0M19zZXRyYXRlX2kyc19lcGxsZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgY2xrZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMSk7CisKKwlyYXRlID0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjMTYoY2xrLCByYXRlKTsKKwlyYXRlID0gcGFyZW50X3JhdGUgLyByYXRlOworCisJY2xrZGl2biAmPSB+UzNDMjQ0M19DTEtESVYxX0kyU0RJVl9NQVNLOworCWNsa2Rpdm4gfD0gKHJhdGUgLSAxKSA8PCBTM0MyNDQzX0NMS0RJVjFfSTJTRElWX1NISUZUOworCisJX19yYXdfd3JpdGVsKGNsa2Rpdm4sIFMzQzI0NDNfQ0xLRElWMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19pMnNfZXBsbGRpdiA9IHsKKwkubmFtZQkJPSAiaTJzLWVwbGxkaXYiLAorCS5pZAkJPSAtMSwKKwkucGFyZW50CQk9ICZjbGtfZXN5c2NsaywKKwkuZ2V0X3JhdGUJPSBzM2MyNDQzX2dldHJhdGVfaTJzX2VwbGxkaXYsCisJLnNldF9yYXRlCT0gczNjMjQ0M19zZXRyYXRlX2kyc19lcGxsZGl2LAorCS5yb3VuZF9yYXRlCT0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjMTYsCit9OworCisvKiBpMnMtcmVmCisgKgorICogaTJzIGJ1cyByZWZlcmVuY2UgY2xvY2ssIHNlbGVjdGFibGUgZnJvbSBleHRlcm5hbCwgZXN5c2NsayBvciBlcGxscmVmCisqLworCitzdGF0aWMgaW50IHMzYzI0NDNfc2V0cGFyZW50X2kycyhzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGNsa3NyYyA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLU1JDKTsKKworCWNsa3NyYyAmPSB+UzNDMjQ0M19DTEtTUkNfSTJTX01BU0s7CisKKwlpZiAocGFyZW50ID09ICZjbGtfZXBsbHJlZikKKwkJY2xrc3JjIHw9IFMzQzI0NDNfQ0xLU1JDX0kyU19FUExMUkVGOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2kyc19leHQpCisJCWNsa3NyYyB8PSBTM0MyNDQzX0NMS1NSQ19JMlNfRVhUOworCWVsc2UgaWYgKHBhcmVudCAhPSAmY2xrX2kyc19lcGxsZGl2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsay0+cGFyZW50ID0gcGFyZW50OworCV9fcmF3X3dyaXRlbChjbGtzcmMsIFMzQzI0NDNfQ0xLU1JDKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfaTJzID0geworCS5uYW1lCQk9ICJpMnMtaWYiLAorCS5pZAkJPSAtMSwKKwkucGFyZW50CQk9ICZjbGtfaTJzX2VwbGxkaXYsCisJLmN0cmxiaXQJPSBTM0MyNDQzX1NDTEtDT05fSTJTQ0xLLAorCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3MsCisJLnNldF9wYXJlbnQJPSBzM2MyNDQzX3NldHBhcmVudF9pMnMsCit9OworCisvKiBjYW0taWYKKyAqCisgKiBjYW1lcmEgaW50ZXJmYWNlIGJ1cy1jbG9jaywgZGl2aWRlZCBkb3duIGZyb20gZXN5c2NsaworKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19nZXRyYXRlX2NhbShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjEpOworCisJZGl2ICAmPSBTM0MyNDQzX0NMS0RJVjFfQ0FNRElWX01BU0s7CisJZGl2ID4+PSBTM0MyNDQzX0NMS0RJVjFfQ0FNRElWX1NISUZUOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiArIDEpOworfQorCitzdGF0aWMgaW50IHMzYzI0NDNfc2V0cmF0ZV9jYW0oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBjbGtkaXYxID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYxKTsKKworCXJhdGUgPSBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMxNihjbGssIHJhdGUpOworCXJhdGUgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisKKwljbGtkaXYxICY9IH5TM0MyNDQzX0NMS0RJVjFfQ0FNRElWX01BU0s7CisJY2xrZGl2MSB8PSAocmF0ZSAtIDEpIDw8IFMzQzI0NDNfQ0xLRElWMV9DQU1ESVZfU0hJRlQ7CisKKwlfX3Jhd193cml0ZWwoY2xrZGl2MSwgUzNDMjQ0M19DTEtESVYxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2NhbSA9IHsKKwkubmFtZQkJPSAiY2FtaWYtdXBsbCIsCQkvKiBzYW1lIGFzIDI0NDAgbmFtZSAqLworCS5pZAkJPSAtMSwKKwkucGFyZW50CQk9ICZjbGtfZXN5c2NsaywKKwkuY3RybGJpdAk9IFMzQzI0NDNfU0NMS0NPTl9DQU1DTEssCisJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcywKKwkuZ2V0X3JhdGUJPSBzM2MyNDQzX2dldHJhdGVfY2FtLAorCS5zZXRfcmF0ZQk9IHMzYzI0NDNfc2V0cmF0ZV9jYW0sCisJLnJvdW5kX3JhdGUJPSBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMxNiwKK307CisKKy8qIGRpc3BsYXktaWYKKyAqCisgKiBkaXNwbGF5IGludGVyZmFjZSBjbG9jaywgZGl2aWRlZCBmcm9tIGVzeXNjbGsKKyovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfZ2V0cmF0ZV9kaXNwbGF5KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMSk7CisKKwlkaXYgJj0gUzNDMjQ0M19DTEtESVYxX0RJU1BESVZfTUFTSzsKKwlkaXYgPj49IFMzQzI0NDNfQ0xLRElWMV9ESVNQRElWX1NISUZUOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiArIDEpOworfQorCitzdGF0aWMgaW50IHMzYzI0NDNfc2V0cmF0ZV9kaXNwbGF5KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgY2xrZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMSk7CisKKwlyYXRlID0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjMjU2KGNsaywgcmF0ZSk7CisJcmF0ZSA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWNsa2Rpdm4gJj0gflMzQzI0NDNfQ0xLRElWMV9VQVJURElWX01BU0s7CisJY2xrZGl2biB8PSAocmF0ZSAtIDEpIDw8IFMzQzI0NDNfQ0xLRElWMV9VQVJURElWX1NISUZUOworCisJX19yYXdfd3JpdGVsKGNsa2Rpdm4sIFMzQzI0NDNfQ0xLRElWMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19kaXNwbGF5ID0geworCS5uYW1lCQk9ICJkaXNwbGF5LWlmIiwKKwkuaWQJCT0gLTEsCisJLnBhcmVudAkJPSAmY2xrX2VzeXNjbGssCisJLmN0cmxiaXQJPSBTM0MyNDQzX1NDTEtDT05fRElTUENMSywKKwkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9zLAorCS5nZXRfcmF0ZQk9IHMzYzI0NDNfZ2V0cmF0ZV9kaXNwbGF5LAorCS5zZXRfcmF0ZQk9IHMzYzI0NDNfc2V0cmF0ZV9kaXNwbGF5LAorCS5yb3VuZF9yYXRlCT0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjMjU2LAorfTsKKworLyogc3RhbmRhcmQgY2xvY2sgZGVmaW5pdGlvbnMgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NfZGlzYWJsZVtdID0geworCXsKKwkJLm5hbWUJCT0gIm5hbmQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCX0sIHsKKwkJLm5hbWUJCT0gInNkaSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3AsCisJCS5jdHJsYml0CT0gUzNDMjQ0M19QQ0xLQ09OX1NESSwKKwl9LCB7CisJCS5uYW1lCQk9ICJhZGMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9BREMsCisJfSwgeworCQkubmFtZQkJPSAiaTJjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcCwKKwkJLmN0cmxiaXQJPSBTM0MyNDQzX1BDTEtDT05fSUlDLAorCX0sIHsKKwkJLm5hbWUJCT0gImlpcyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3AsCisJCS5jdHJsYml0CT0gUzNDMjQ0M19QQ0xLQ09OX0lJUywKKwl9LCB7CisJCS5uYW1lCQk9ICJzcGkiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3AsCisJCS5jdHJsYml0CT0gUzNDMjQ0M19QQ0xLQ09OX1NQSTAsCisJfSwgeworCQkubmFtZQkJPSAic3BpIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9TUEkxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGluaXRfY2xvY2tzW10gPSB7CisJeworCQkubmFtZQkJPSAiZG1hIiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9oLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfSENMS0NPTl9ETUEwLAorCX0sIHsKKwkJLm5hbWUJCT0gImRtYSIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKKwkJLmN0cmxiaXQJPSBTM0MyNDQzX0hDTEtDT05fRE1BMSwKKwl9LCB7CisJCS5uYW1lCQk9ICJkbWEiLAorCQkuaWQJCT0gMiwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX2gsCisJCS5jdHJsYml0CT0gUzNDMjQ0M19IQ0xLQ09OX0RNQTIsCisJfSwgeworCQkubmFtZQkJPSAiZG1hIiwKKwkJLmlkCQk9IDMsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9oLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfSENMS0NPTl9ETUEzLAorCX0sIHsKKwkJLm5hbWUJCT0gImRtYSIsCisJCS5pZAkJPSA0LAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKKwkJLmN0cmxiaXQJPSBTM0MyNDQzX0hDTEtDT05fRE1BNCwKKwl9LCB7CisJCS5uYW1lCQk9ICJkbWEiLAorCQkuaWQJCT0gNSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX2gsCisJCS5jdHJsYml0CT0gUzNDMjQ0M19IQ0xLQ09OX0RNQTUsCisJfSwgeworCQkubmFtZQkJPSAibGNkIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKKwkJLmN0cmxiaXQJPSBTM0MyNDQzX0hDTEtDT05fTENEQywKKwl9LCB7CisJCS5uYW1lCQk9ICJncGlvIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcCwKKwkJLmN0cmxiaXQJPSBTM0MyNDQzX1BDTEtDT05fR1BJTywKKwl9LCB7CisJCS5uYW1lCQk9ICJ1c2ItaG9zdCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX2gsCisJCS5jdHJsYml0CT0gUzNDMjQ0M19IQ0xLQ09OX1VTQkgsCisJfSwgeworCQkubmFtZQkJPSAidXNiLWRldmljZSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX2gsCisJCS5jdHJsYml0CT0gUzNDMjQ0M19IQ0xLQ09OX1VTQkQsCisJfSwgeworCQkubmFtZQkJPSAidGltZXJzIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcCwKKwkJLmN0cmxiaXQJPSBTM0MyNDQzX1BDTEtDT05fUFdNVCwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9VQVJUMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9VQVJUMSwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9VQVJUMiwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDMsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9VQVJUMywKKwl9LCB7CisJCS5uYW1lCQk9ICJydGMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9SVEMsCisJfSwgeworCQkubmFtZQkJPSAid2F0Y2hkb2ciLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9XRFQsCisJfSwgeworCQkubmFtZQkJPSAidXNiLWJ1cy1ob3N0IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfdXNiX2J1c19ob3N0LAorCX0KK307CisKKy8qIGNsb2NrcyB0byBhZGQgd2hlcmUgd2UgbmVlZCB0byBjaGVjayB0aGVpciBwYXJlbnRhZ2UgKi8KKworLyogczNjMjQ0M19jbGtfaW5pdHBhcmVudHMKKyAqCisgKiBJbml0aWFsaXNlIHRoZSBwYXJlbnRzIGZvciB0aGUgY2xvY2tzIHRoYXQgd2UgZ2V0IGF0IHN0YXJ0LXRpbWUKKyovCisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19pbml0X3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgImNsb2NrICVzOiBwYXJlbnQgJXNcbiIsIGNsay0+bmFtZSwgcGFyZW50LT5uYW1lKTsKKwlyZXR1cm4gY2xrX3NldF9wYXJlbnQoY2xrLCBwYXJlbnQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgczNjMjQ0M19jbGtfaW5pdHBhcmVudHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNsa3NyYyA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLU1JDKTsKKwlzdHJ1Y3QgY2xrICpwYXJlbnQ7CisKKwlzd2l0Y2ggKGNsa3NyYyAmIFMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfTUFTSykgeworCWNhc2UgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9FWFRDTEs6CisJCXBhcmVudCA9ICZjbGtfZXh0OworCQlicmVhazsKKworCWNhc2UgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9YVEFMOgorCWRlZmF1bHQ6CisJCXBhcmVudCA9ICZjbGtfeHRhbDsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfTVBMTFJFRjoKKwljYXNlIFMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfTVBMTFJFRjI6CisJCXBhcmVudCA9ICZjbGtfbXBsbHJlZjsKKwkJYnJlYWs7CisJfQorCisJY2xrX2luaXRfc2V0X3BhcmVudCgmY2xrX2VwbGxyZWYsIHBhcmVudCk7CisKKwlzd2l0Y2ggKGNsa3NyYyAmIFMzQzI0NDNfQ0xLU1JDX0kyU19NQVNLKSB7CisJY2FzZSBTM0MyNDQzX0NMS1NSQ19JMlNfRVhUOgorCQlwYXJlbnQgPSAmY2xrX2kyc19leHQ7CisJCWJyZWFrOworCisJY2FzZSBTM0MyNDQzX0NMS1NSQ19JMlNfRVBMTERJVjoKKwlkZWZhdWx0OgorCQlwYXJlbnQgPSAmY2xrX2kyc19lcGxsZGl2OworCQlicmVhazsKKworCWNhc2UgUzNDMjQ0M19DTEtTUkNfSTJTX0VQTExSRUY6CisJY2FzZSBTM0MyNDQzX0NMS1NSQ19JMlNfRVBMTFJFRjM6CisJCXBhcmVudCA9ICZjbGtfZXBsbHJlZjsKKwl9CisKKwljbGtfaW5pdF9zZXRfcGFyZW50KCZjbGtfaTJzLCAmY2xrX2VwbGxyZWYpOworCisJLyogZXN5c2NsayBzb3VyY2UgKi8KKworCXBhcmVudCA9IChjbGtzcmMgJiBTM0MyNDQzX0NMS1NSQ19FU1lTQ0xLX0VQTEwpID8KKwkJJmNsa19lcGxsIDogJmNsa19lcGxscmVmOworCisJY2xrX2luaXRfc2V0X3BhcmVudCgmY2xrX2VzeXNjbGssIHBhcmVudCk7CisKKwkvKiBtc3lzY2xrIHNvdXJjZSAqLworCisJaWYgKGNsa3NyYyAmIFMzQzI0NDNfQ0xLU1JDX01TWVNDTEtfTVBMTCkgeworCQlwYXJlbnQgPSAmY2xrX21wbGw7CisJfSBlbHNlIHsKKwkJcGFyZW50ID0gKGNsa3NyYyAmIFMzQzI0NDNfQ0xLU1JDX0VYVENMS19ESVYpID8KKwkJCSZjbGtfbWRpdmNsayA6ICZjbGtfbXBsbHJlZjsKKwl9CisKKwljbGtfaW5pdF9zZXRfcGFyZW50KCZjbGtfbXN5c2NsaywgcGFyZW50KTsKK30KKworLyogYXJtZGl2IGRpdmlzb3IgdGFibGUgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBhcm1kaXZbMTZdID0geworCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzEgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSAxLAorCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzIgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSAyLAorCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzMgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSAzLAorCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzQgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSA0LAorCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzYgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSA2LAorCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzggPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSA4LAorCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzEyID4+IFMzQzI0NDNfQ0xLRElWMF9BUk1ESVZfU0hJRlRdCT0gMTIsCisJW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMTYgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSAxNiwKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHMzYzI0NDNfZmNsa19kaXYodW5zaWduZWQgbG9uZyBjbGtjb24wKQoreworCWNsa2NvbjAgJj0gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9NQVNLOworCisJcmV0dXJuIGFybWRpdltjbGtjb24wID4+IFMzQzI0NDNfQ0xLRElWMF9BUk1ESVZfU0hJRlRdOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19nZXRfcHJlZGl2KHVuc2lnbmVkIGxvbmcgY2xrY29uMCkKK3sKKwljbGtjb24wICY9IFMzQzI0NDNfQ0xLRElWMF9QUkVESVZfTUFTSzsKKwljbGtjb24wID4+PSBTM0MyNDQzX0NMS0RJVjBfUFJFRElWX1NISUZUOworCisJcmV0dXJuIGNsa2NvbjAgKyAxOworfQorCisvKiBjbG9ja3MgdG8gYWRkIHN0cmFpZ2h0IGF3YXkgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbXSBfX2luaXRkYXRhID0geworCSZjbGtfZXh0LAorCSZjbGtfZXBsbCwKKwkmY2xrX3VzYl9idXNfaG9zdCwKKwkmY2xrX3VzYl9idXMsCisJJmNsa19lc3lzY2xrLAorCSZjbGtfZXBsbHJlZiwKKwkmY2xrX21wbGxyZWYsCisJJmNsa19tc3lzY2xrLAorCSZjbGtfdWFydCwKKwkmY2xrX2Rpc3BsYXksCisJJmNsa19jYW0sCisJJmNsa19pMnNfZXBsbGRpdiwKKwkmY2xrX2kycywKKwkmY2xrX2hzc3BpLAorCSZjbGtfaHNtbWNfZGl2LAorCSZjbGtfaHNtbWMsCit9OworCit2b2lkIF9faW5pdCBzM2MyNDQzX2luaXRfY2xvY2tzKGludCB4dGFsKQoreworCXVuc2lnbmVkIGxvbmcgZXBsbGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfRVBMTENPTik7CisJdW5zaWduZWQgbG9uZyBtcGxsY29uID0gX19yYXdfcmVhZGwoUzNDMjQ0M19NUExMQ09OKTsKKwl1bnNpZ25lZCBsb25nIGNsa2RpdjAgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjApOworCXVuc2lnbmVkIGxvbmcgcGxsOworCXVuc2lnbmVkIGxvbmcgZmNsazsKKwl1bnNpZ25lZCBsb25nIGhjbGs7CisJdW5zaWduZWQgbG9uZyBwY2xrOworCXN0cnVjdCBjbGsgKmNsa3A7CisJaW50IHJldDsKKwlpbnQgcHRyOworCisJcGxsID0gczNjMjQ0M19nZXRfbXBsbChtcGxsY29uLCB4dGFsKTsKKworCWZjbGsgPSBwbGwgLyBzM2MyNDQzX2ZjbGtfZGl2KGNsa2RpdjApOworCWhjbGsgPSBmY2xrIC8gczNjMjQ0M19nZXRfcHJlZGl2KGNsa2RpdjApOworCWhjbGsgPSBoY2xrIC8gKChjbGtkaXYwICYgUzNDMjQ0M19DTEtESVYwX0hBTEZfSENMSykgPyAyIDogMSk7CisgCXBjbGsgPSBoY2xrIC8gKChjbGtkaXYwICYgUzNDMjQ0M19DTEtESVYwX0hBTEZfUENMSykgPyAyIDogMSk7CisKKwlzM2MyNHh4X3NldHVwX2Nsb2Nrcyh4dGFsLCBmY2xrLCBoY2xrLCBwY2xrKTsKKworCXByaW50aygiUzNDMjQ0MzogbXBsbCAlcyAlbGQuJTAzbGQgTUh6LCBjcHUgJWxkLiUwM2xkIE1IeiwgbWVtICVsZC4lMDNsZCBNSHosIHBjbGsgJWxkLiUwM2xkIE1IelxuIiwKKwkgICAgICAgKG1wbGxjb24gJiBTM0MyNDQzX1BMTENPTl9PRkYpID8gIm9mZiI6Im9uIiwKKwkgICAgICAgcHJpbnRfbWh6KHBsbCksIHByaW50X21oeihmY2xrKSwKKwkgICAgICAgcHJpbnRfbWh6KGhjbGspLCBwcmludF9taHoocGNsaykpOworCisJczNjMjQ0M19jbGtfaW5pdHBhcmVudHMoKTsKKworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShjbGtzKTsgcHRyKyspIHsKKwkJY2xrcCA9IGNsa3NbcHRyXTsKKworCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOworCQl9CisJfQorCisJY2xrX2VwbGwucmF0ZSA9IHMzYzI0NDNfZ2V0X2VwbGwoZXBsbGNvbiwgeHRhbCk7CisKKwljbGtfdXNiX2J1cy5wYXJlbnQgPSAmY2xrX3VzYl9idXNfaG9zdDsKKworCS8qIGVuc3VyZSB1c2IgYnVzIGNsb2NrIGlzIHdpdGhpbiBjb3JyZWN0IHJhdGUgb2YgNDhNSHogKi8KKworCWlmIChjbGtfZ2V0X3JhdGUoJmNsa191c2JfYnVzX2hvc3QpICE9ICg0OCAqIDEwMDAgKiAxMDAwKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJXYXJuaW5nOiBVU0IgaG9zdCBidXMgbm90IGF0IDQ4TUh6XG4iKTsKKwkJY2xrX3NldF9yYXRlKCZjbGtfdXNiX2J1c19ob3N0LCA0OCoxMDAwKjEwMDApOworCX0KKworCXByaW50aygiUzNDMjQ0MzogZXBsbCAlcyAlbGQuJTAzbGQgTUh6LCB1c2ItYnVzICVsZC4lMDNsZCBNSHpcbiIsCisJICAgICAgIChlcGxsY29uICYgUzNDMjQ0M19QTExDT05fT0ZGKSA/ICJvZmYiOiJvbiIsCisJICAgICAgIHByaW50X21oeihjbGtfZ2V0X3JhdGUoJmNsa19lcGxsKSksCisJICAgICAgIHByaW50X21oeihjbGtfZ2V0X3JhdGUoJmNsa191c2JfYnVzKSkpOworCisJLyogcmVnaXN0ZXIgY2xvY2tzIGZyb20gY2xvY2sgYXJyYXkgKi8KKworCWNsa3AgPSBpbml0X2Nsb2NrczsKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoaW5pdF9jbG9ja3MpOyBwdHIrKywgY2xrcCsrKSB7CisJCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soY2xrcCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjbG9jayAlcyAoJWQpXG4iLAorCQkJICAgICAgIGNsa3AtPm5hbWUsIHJldCk7CisJCX0KKwl9CisKKwkvKiBXZSBtdXN0IGJlIGNhcmVmdWwgZGlzYWJsaW5nIHRoZSBjbG9ja3Mgd2UgYXJlIG5vdCBpbnRlbmRpbmcgdG8KKwkgKiBiZSB1c2luZyBhdCBib290IHRpbWUsIGFzIHN1YnN5dGVtcyBzdWNoIGFzIHRoZSBMQ0Qgd2hpY2ggZG8KKwkgKiB0aGVpciBvd24gRE1BIHJlcXVlc3RzIHRvIHRoZSBidXMgY2FuIGNhdXNlIHRoZSBzeXN0ZW0gdG8gbG9ja3VwCisJICogaWYgdGhleSB3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHJlcXVlc3RpbmcgYnVzIGFjY2Vzcy4KKwkgKgorCSAqIERpc2FibGluZyB0aGUgTENEIGNsb2NrIGlmIHRoZSBMQ0QgaXMgYWN0aXZlIGlzIHZlcnkgZGFuZ2Vyb3VzLAorCSAqIGFuZCB0aGVyZWZvcmUgdGhlIGJvb3Rsb2FkZXIgc2hvdWxkIGJlIGNhcmVmdWwgdG8gbm90IGVuYWJsZQorCSAqIHRoZSBMQ0QgY2xvY2sgaWYgaXQgaXMgbm90IG5lZWRlZC4KKwkqLworCisJLyogaW5zdGFsbCAoYW5kIGRpc2FibGUpIHRoZSBjbG9ja3Mgd2UgZG8gbm90IG5lZWQgaW1tZWRpYXRlbHkgKi8KKworCWNsa3AgPSBpbml0X2Nsb2Nrc19kaXNhYmxlOworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2Nsb2Nrc19kaXNhYmxlKTsgcHRyKyssIGNsa3ArKykgeworCisJCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soY2xrcCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjbG9jayAlcyAoJWQpXG4iLAorCQkJICAgICAgIGNsa3AtPm5hbWUsIHJldCk7CisJCX0KKworCQkoY2xrcC0+ZW5hYmxlKShjbGtwLCAwKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwZThjYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwpAQCAtMCwwICsxLDE4MCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0NDMgRE1BIHNlbGVjdGlvbgorICoKKyAqIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZG1hLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1hYzk3Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1tZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWxjZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2RpLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNwaS5oPgorCisjZGVmaW5lIE1BUCh4KSB7IFwKKwkJWzBdCT0gKHgpIHwgRE1BX0NIX1ZBTElELAlcCisJCVsxXQk9ICh4KSB8IERNQV9DSF9WQUxJRCwJXAorCQlbMl0JPSAoeCkgfCBETUFfQ0hfVkFMSUQsCVwKKwkJWzNdCT0gKHgpIHwgRE1BX0NIX1ZBTElELAlcCisJCVs0XQk9ICh4KSB8IERNQV9DSF9WQUxJRCwJXAorCQlbNV0gICAgID0gKHgpIHwgRE1BX0NIX1ZBTElELAlcCisJfQorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0NDNfZG1hX21hcHBpbmdzW10gPSB7CisJW0RNQUNIX1hEMF0gPSB7CisJCS5uYW1lCQk9ICJ4ZHJlcTAiLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQ0M19ETUFSRVFTRUxfWERSRVEwKSwKKwl9LAorCVtETUFDSF9YRDFdID0geworCQkubmFtZQkJPSAieGRyZXExIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0NDNfRE1BUkVRU0VMX1hEUkVRMSksCisJfSwKKwlbRE1BQ0hfU0RJXSA9IHsKKwkJLm5hbWUJCT0gInNkaSIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDQzX0RNQVJFUVNFTF9TREkpLAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfSUlTICsgUzNDMjQxMF9JSVNGSUZPLAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9JSVMgKyBTM0MyNDEwX0lJU0ZJRk8sCisJfSwKKwlbRE1BQ0hfU1BJMF0gPSB7CisJCS5uYW1lCQk9ICJzcGkwIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0NDNfRE1BUkVRU0VMX1NQSTBUWCksCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9TUEkgKyBTM0MyNDEwX1NQVERBVCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfU1BJICsgUzNDMjQxMF9TUFJEQVQsCisJfSwKKwlbRE1BQ0hfU1BJMV0gPSB7CisJCS5uYW1lCQk9ICJzcGkxIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0NDNfRE1BUkVRU0VMX1NQSTFUWCksCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9TUEkgKyAweDIwICsgUzNDMjQxMF9TUFREQVQsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1NQSSArIDB4MjAgKyBTM0MyNDEwX1NQUkRBVCwKKwl9LAorCVtETUFDSF9VQVJUMF0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MCIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDQzX0RNQVJFUVNFTF9VQVJUMF8wKSwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQwICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMCArIFMzQzI0MTBfVVJYSCwKKwl9LAorCVtETUFDSF9VQVJUMV0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MSIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDQzX0RNQVJFUVNFTF9VQVJUMV8wKSwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQxICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMSArIFMzQzI0MTBfVVJYSCwKKwl9LAorICAgICAgCVtETUFDSF9VQVJUMl0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MiIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDQzX0RNQVJFUVNFTF9VQVJUMl8wKSwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQyICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMiArIFMzQzI0MTBfVVJYSCwKKwl9LAorICAgICAgCVtETUFDSF9VQVJUM10gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MyIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDQzX0RNQVJFUVNFTF9VQVJUM18wKSwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDQzX1BBX1VBUlQzICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQ0M19QQV9VQVJUMyArIFMzQzI0MTBfVVJYSCwKKwl9LAorCVtETUFDSF9VQVJUMF9TUkMyXSA9IHsKKwkJLm5hbWUJCT0gInVhcnQwIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0NDNfRE1BUkVRU0VMX1VBUlQwXzEpLAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfVUFSVDAgKyBTM0MyNDEwX1VUWEgsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1VBUlQwICsgUzNDMjQxMF9VUlhILAorCX0sCisJW0RNQUNIX1VBUlQxX1NSQzJdID0geworCQkubmFtZQkJPSAidWFydDEiLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQ0M19ETUFSRVFTRUxfVUFSVDFfMSksCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9VQVJUMSArIFMzQzI0MTBfVVRYSCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfVUFSVDEgKyBTM0MyNDEwX1VSWEgsCisJfSwKKyAgICAgIAlbRE1BQ0hfVUFSVDJfU1JDMl0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MiIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDQzX0RNQVJFUVNFTF9VQVJUMl8xKSwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQyICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMiArIFMzQzI0MTBfVVJYSCwKKwl9LAorICAgICAgCVtETUFDSF9VQVJUM19TUkMyXSA9IHsKKwkJLm5hbWUJCT0gInVhcnQzIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0NDNfRE1BUkVRU0VMX1VBUlQzXzEpLAorCQkuaHdfYWRkci50bwk9IFMzQzI0NDNfUEFfVUFSVDMgKyBTM0MyNDEwX1VUWEgsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDQzX1BBX1VBUlQzICsgUzNDMjQxMF9VUlhILAorCX0sCisJW0RNQUNIX1RJTUVSXSA9IHsKKwkJLm5hbWUJCT0gInRpbWVyIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0NDNfRE1BUkVRU0VMX1RJTUVSKSwKKwl9LAorCVtETUFDSF9JMlNfSU5dID0geworCQkubmFtZQkJPSAiaTJzLXNkaSIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDQzX0RNQVJFUVNFTF9JMlNSWCksCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX0lJUyArIFMzQzI0MTBfSUlTRklGTywKKwl9LAorCVtETUFDSF9JMlNfT1VUXSA9IHsKKwkJLm5hbWUJCT0gImkycy1zZG8iLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQ0M19ETUFSRVFTRUxfSTJTVFgpLAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfSUlTICsgUzNDMjQxMF9JSVNGSUZPLAorCX0sCisJW0RNQUNIX1BDTV9JTl0gPSB7CisJCS5uYW1lCQk9ICJwY20taW4iLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQ0M19ETUFSRVFTRUxfUENNSU4pLAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQ0MF9QQV9BQzk3ICsgUzNDX0FDOTdfUENNX0RBVEEsCisJfSwKKwlbRE1BQ0hfUENNX09VVF0gPSB7CisJCS5uYW1lCQk9ICJwY20tb3V0IiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0NDNfRE1BUkVRU0VMX1BDTU9VVCksCisJCS5od19hZGRyLnRvCT0gUzNDMjQ0MF9QQV9BQzk3ICsgUzNDX0FDOTdfUENNX0RBVEEsCisJfSwKKwlbRE1BQ0hfTUlDX0lOXSA9IHsKKwkJLm5hbWUJCT0gIm1pYy1pbiIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDQzX0RNQVJFUVNFTF9NSUNJTiksCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDQwX1BBX0FDOTcgKyBTM0NfQUM5N19NSUNfREFUQSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgczNjMjQ0M19kbWFfc2VsZWN0KHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAorCQkJICAgICAgIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgKm1hcCkKK3sKKwl3cml0ZWwobWFwLT5jaGFubmVsc1swXSB8IFMzQzI0NDNfRE1BUkVRU0VMX0hXLAorCSAgICAgICBjaGFuLT5yZWdzICsgUzNDMjQ0M19ETUFfRE1BUkVRU0VMKTsKK30KKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2RtYV9zZWxlY3Rpb24gX19pbml0ZGF0YSBzM2MyNDQzX2RtYV9zZWwgPSB7CisJLnNlbGVjdAkJPSBzM2MyNDQzX2RtYV9zZWxlY3QsCisJLmRjb25fbWFzawk9IDAsCisJLm1hcAkJPSBzM2MyNDQzX2RtYV9tYXBwaW5ncywKKwkubWFwX3NpemUJPSBBUlJBWV9TSVpFKHMzYzI0NDNfZG1hX21hcHBpbmdzKSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0M19kbWFfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCit7CisJczNjMjR4eF9kbWFfaW5pdCg2LCBJUlFfUzNDMjQ0M19ETUEwLCAweDEwMCk7CisJcmV0dXJuIHMzYzI0eHhfZG1hX2luaXRfbWFwKCZzM2MyNDQzX2RtYV9zZWwpOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0M19kbWFfZHJpdmVyID0geworCS5hZGQJPSBzM2MyNDQzX2RtYV9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQzX2RtYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDNfc3lzY2xhc3MsICZzM2MyNDQzX2RtYV9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzI0NDNfZG1hX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDViNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvaXJxLmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0My9pcnEuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKworI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvaXJxLmg+CisKKyNkZWZpbmUgSU5UTVNLKHN0YXJ0LCBlbmQpICgoMSA8PCAoKGVuZCkgKyAxIC0gKHN0YXJ0KSkpIC0gMSkKKworc3RhdGljIGlubGluZSB2b2lkIHMzYzI0NDNfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IHN1YnNyYywgc3VibXNrOworCXVuc2lnbmVkIGludCBlbmQ7CisJc3RydWN0IGlycV9kZXNjICpteWRlc2M7CisKKwkvKiByZWFkIHRoZSBjdXJyZW50IHBlbmRpbmcgaW50ZXJydXB0cywgYW5kIHRoZSBtYXNrCisJICogZm9yIHdoYXQgaXQgaXMgYXZhaWxhYmxlICovCisKKwlzdWJzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1NVQlNSQ1BORCk7CisJc3VibXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRTVUJNU0spOworCisJc3Vic3JjICAmPSB+c3VibXNrOworCXN1YnNyYyA+Pj0gKGlycSAtIFMzQzI0MTBfSVJRU1VCKDApKTsKKwlzdWJzcmMgICY9ICgxIDw8IGxlbiktMTsKKworCWVuZCA9IGxlbiArIGlycTsKKwlteWRlc2MgPSBpcnFfZGVzYyArIGlycTsKKworCWZvciAoOyBpcnEgPCBlbmQgJiYgc3Vic3JjOyBpcnErKykgeworCQlpZiAoc3Vic3JjICYgMSkKKwkJCWRlc2NfaGFuZGxlX2lycShpcnEsIG15ZGVzYyk7CisKKwkJbXlkZXNjKys7CisJCXN1YnNyYyA+Pj0gMTsKKwl9Cit9CisKKy8qIFdEVC9BQzk3IHN1YiBpbnRlcnJ1cHRzICovCisKK3N0YXRpYyB2b2lkIHMzYzI0NDNfaXJxX2RlbXV4X3dkdGFjOTcodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXMzYzI0NDNfaXJxX2RlbXV4KElSUV9TM0MyNDQzX1dEVCwgNCk7Cit9CisKKyNkZWZpbmUgSU5UTVNLX1dEVEFDOTcJKDFVTCA8PCAoSVJRX1dEVCAtIElSUV9FSU5UMCkpCisjZGVmaW5lIFNVQk1TS19XRFRBQzk3CUlOVE1TSyhJUlFfUzNDMjQ0M19XRFQsIElSUV9TM0MyNDQzX0FDOTcpCisKK3N0YXRpYyB2b2lkIHMzYzI0NDNfaXJxX3dkdGFjOTdfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfV0RUQUM5NywgU1VCTVNLX1dEVEFDOTcpOworfQorCitzdGF0aWMgdm9pZCBzM2MyNDQzX2lycV93ZHRhYzk3X3VubWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl91bm1hc2soaXJxbm8sIElOVE1TS19XRFRBQzk3KTsKK30KKworc3RhdGljIHZvaWQgczNjMjQ0M19pcnFfd2R0YWM5N19hY2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFza2FjayhpcnFubywgSU5UTVNLX1dEVEFDOTcsIFNVQk1TS19XRFRBQzk3KTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2MyNDQzX2lycV93ZHRhYzk3ID0geworCS5tYXNrCSAgICA9IHMzYzI0NDNfaXJxX3dkdGFjOTdfbWFzaywKKwkudW5tYXNrCSAgICA9IHMzYzI0NDNfaXJxX3dkdGFjOTdfdW5tYXNrLAorCS5hY2sJICAgID0gczNjMjQ0M19pcnFfd2R0YWM5N19hY2ssCit9OworCisKKy8qIExDRCBzdWIgaW50ZXJydXB0cyAqLworCitzdGF0aWMgdm9pZCBzM2MyNDQzX2lycV9kZW11eF9sY2QodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXMzYzI0NDNfaXJxX2RlbXV4KElSUV9TM0MyNDQzX0xDRDEsIDQpOworfQorCisjZGVmaW5lIElOVE1TS19MQ0QJKDFVTCA8PCAoSVJRX0xDRCAtIElSUV9FSU5UMCkpCisjZGVmaW5lIFNVQk1TS19MQ0QJSU5UTVNLKElSUV9TM0MyNDQzX0xDRDEsIElSUV9TM0MyNDQzX0xDRDQpCisKK3N0YXRpYyB2b2lkIHMzYzI0NDNfaXJxX2xjZF9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX21hc2soaXJxbm8sIElOVE1TS19MQ0QsIFNVQk1TS19MQ0QpOworfQorCitzdGF0aWMgdm9pZCBzM2MyNDQzX2lycV9sY2RfdW5tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX3VubWFzayhpcnFubywgSU5UTVNLX0xDRCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0NDNfaXJxX2xjZF9hY2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFza2FjayhpcnFubywgSU5UTVNLX0xDRCwgU1VCTVNLX0xDRCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjMjQ0M19pcnFfbGNkID0geworCS5tYXNrCSAgICA9IHMzYzI0NDNfaXJxX2xjZF9tYXNrLAorCS51bm1hc2sJICAgID0gczNjMjQ0M19pcnFfbGNkX3VubWFzaywKKwkuYWNrCSAgICA9IHMzYzI0NDNfaXJxX2xjZF9hY2ssCit9OworCisKKy8qIERNQSBzdWIgaW50ZXJydXB0cyAqLworCitzdGF0aWMgdm9pZCBzM2MyNDQzX2lycV9kZW11eF9kbWEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXMzYzI0NDNfaXJxX2RlbXV4KElSUV9TM0MyNDQzX0RNQTEsIDYpOworfQorCisjZGVmaW5lIElOVE1TS19ETUEJKDFVTCA8PCAoSVJRX1MzQzI0NDNfRE1BIC0gSVJRX0VJTlQwKSkKKyNkZWZpbmUgU1VCTVNLX0RNQQlJTlRNU0soSVJRX1MzQzI0NDNfRE1BMCwgSVJRX1MzQzI0NDNfRE1BNSkKKworCitzdGF0aWMgdm9pZCBzM2MyNDQzX2lycV9kbWFfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfRE1BLCBTVUJNU0tfRE1BKTsKK30KKworc3RhdGljIHZvaWQgczNjMjQ0M19pcnFfZG1hX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl91bm1hc2soaXJxbm8sIElOVE1TS19ETUEpOworfQorCitzdGF0aWMgdm9pZCBzM2MyNDQzX2lycV9kbWFfYWNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX21hc2thY2soaXJxbm8sIElOVE1TS19ETUEsIFNVQk1TS19ETUEpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHMzYzI0NDNfaXJxX2RtYSA9IHsKKwkubWFzawkgICAgPSBzM2MyNDQzX2lycV9kbWFfbWFzaywKKwkudW5tYXNrCSAgICA9IHMzYzI0NDNfaXJxX2RtYV91bm1hc2ssCisJLmFjawkgICAgPSBzM2MyNDQzX2lycV9kbWFfYWNrLAorfTsKKworCisvKiBVQVJUMyBzdWIgaW50ZXJydXB0cyAqLworCitzdGF0aWMgdm9pZCBzM2MyNDQzX2lycV9kZW11eF91YXJ0Myh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJczNjMjQ0M19pcnFfZGVtdXgoSVJRX1MzQzI0NDNfVUFSVDMsIDMpOworfQorCisjZGVmaW5lIElOVE1TS19VQVJUMwkoMVVMIDw8IChJUlFfUzNDMjQ0M19VQVJUMyAtIElSUV9FSU5UMCkpCisjZGVmaW5lIFNVQk1TS19VQVJUMwkoMHhmIDw8IChJUlFfUzNDMjQ0M19SWDMgLSBTM0MyNDEwX0lSUVNVQigwKSkpCisKKworc3RhdGljIHZvaWQgczNjMjQ0M19pcnFfdWFydDNfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfVUFSVDMsIFNVQk1TS19VQVJUMyk7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0NDNfaXJxX3VhcnQzX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl91bm1hc2soaXJxbm8sIElOVE1TS19VQVJUMyk7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0NDNfaXJxX3VhcnQzX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrYWNrKGlycW5vLCBJTlRNU0tfVUFSVDMsIFNVQk1TS19VQVJUMyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjMjQ0M19pcnFfdWFydDMgPSB7CisJLm1hc2sJICAgID0gczNjMjQ0M19pcnFfdWFydDNfbWFzaywKKwkudW5tYXNrCSAgICA9IHMzYzI0NDNfaXJxX3VhcnQzX3VubWFzaywKKwkuYWNrCSAgICA9IHMzYzI0NDNfaXJxX3VhcnQzX2FjaywKK307CisKKworLyogQ0FNIHN1YiBpbnRlcnJ1cHRzICovCisKK3N0YXRpYyB2b2lkIHMzYzI0NDNfaXJxX2RlbXV4X2NhbSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJczNjMjQ0M19pcnFfZGVtdXgoSVJRX1MzQzI0NDBfQ0FNX0MsIDQpOworfQorCisjZGVmaW5lIElOVE1TS19DQU0JKDFVTCA8PCAoSVJRX0NBTSAtIElSUV9FSU5UMCkpCisjZGVmaW5lIFNVQk1TS19DQU0JSU5UTVNLKElSUV9TM0MyNDQwX0NBTV9DLCBJUlFfUzNDMjQ0MF9DQU1fUCkKKworc3RhdGljIHZvaWQgczNjMjQ0M19pcnFfY2FtX21hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFzayhpcnFubywgSU5UTVNLX0NBTSwgU1VCTVNLX0NBTSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0NDNfaXJxX2NhbV91bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfdW5tYXNrKGlycW5vLCBJTlRNU0tfQ0FNKTsKK30KKworc3RhdGljIHZvaWQgczNjMjQ0M19pcnFfY2FtX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrYWNrKGlycW5vLCBJTlRNU0tfQ0FNLCBTVUJNU0tfQ0FNKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2MyNDQzX2lycV9jYW0gPSB7CisJLm1hc2sJICAgID0gczNjMjQ0M19pcnFfY2FtX21hc2ssCisJLnVubWFzawkgICAgPSBzM2MyNDQzX2lycV9jYW1fdW5tYXNrLAorCS5hY2sJICAgID0gczNjMjQ0M19pcnFfY2FtX2FjaywKK307CisKKy8qIElSUSBpbml0aWFsaXNhdGlvbiBjb2RlICovCisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0NDNfYWRkX3N1Yih1bnNpZ25lZCBpbnQgYmFzZSwKKwkJCQkgICB2b2lkICgqZGVtdXgpKHVuc2lnbmVkIGludCwKKwkJCQkJCSBzdHJ1Y3QgaXJxX2Rlc2MgKiksCisJCQkJICAgc3RydWN0IGlycV9jaGlwICpjaGlwLAorCQkJCSAgIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGVuZCkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxbm87CisKKwlzZXRfaXJxX2NoaXAoYmFzZSwgJnMzY19pcnFfbGV2ZWxfY2hpcCk7CisJc2V0X2lycV9oYW5kbGVyKGJhc2UsIGhhbmRsZV9sZXZlbF9pcnEpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGJhc2UsIGRlbXV4KTsKKworCWZvciAoaXJxbm8gPSBzdGFydDsgaXJxbm8gPD0gZW5kOyBpcnFubysrKSB7CisJCXNldF9pcnFfY2hpcChpcnFubywgY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnFubywgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0NDNfaXJxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXByaW50aygiUzNDMjQ0MzogSVJRIFN1cHBvcnRcbiIpOworCisJczNjMjQ0M19hZGRfc3ViKElSUV9DQU0sIHMzYzI0NDNfaXJxX2RlbXV4X2NhbSwgJnMzYzI0NDNfaXJxX2NhbSwKKwkJCUlSUV9TM0MyNDQwX0NBTV9DLCBJUlFfUzNDMjQ0MF9DQU1fUCk7CisKKwlzM2MyNDQzX2FkZF9zdWIoSVJRX0xDRCwgczNjMjQ0M19pcnFfZGVtdXhfbGNkLCAmczNjMjQ0M19pcnFfbGNkLAorCQkJSVJRX1MzQzI0NDNfTENEMSwgSVJRX1MzQzI0NDNfTENENCk7CisKKwlzM2MyNDQzX2FkZF9zdWIoSVJRX1MzQzI0NDNfRE1BLCBzM2MyNDQzX2lycV9kZW11eF9kbWEsCisJCQkmczNjMjQ0M19pcnFfZG1hLCBJUlFfUzNDMjQ0M19ETUEwLCBJUlFfUzNDMjQ0M19ETUE1KTsKKworCXMzYzI0NDNfYWRkX3N1YihJUlFfUzNDMjQ0M19VQVJUMywgczNjMjQ0M19pcnFfZGVtdXhfdWFydDMsCisJCQkmczNjMjQ0M19pcnFfdWFydDMsCisJCQlJUlFfUzNDMjQ0M19SWDMsIElSUV9TM0MyNDQzX0VSUjMpOworCisJczNjMjQ0M19hZGRfc3ViKElSUV9XRFQsIHMzYzI0NDNfaXJxX2RlbXV4X3dkdGFjOTcsCisJCQkmczNjMjQ0M19pcnFfd2R0YWM5NywKKwkJCUlSUV9TM0MyNDQzX1dEVCwgSVJRX1MzQzI0NDNfQUM5Nyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDNfaXJxX2RyaXZlciA9IHsKKwkuYWRkCQk9IHMzYzI0NDNfaXJxX2FkZCwKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0M19pcnFfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQzX3N5c2NsYXNzLCAmczNjMjQ0M19pcnFfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDQzX2lycV9pbml0KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL21hY2gtc21kazI0NDMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyYWFmZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMKQEAgLTAsMCArMSwxMzcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogaHR0cDovL3d3dy5mbHVmZi5vcmcvYmVuL3NtZGsyNDQzLworICoKKyAqIFRoYW5rcyB0byBTYW1zdW5nIGZvciB0aGUgbG9hbiBvZiBhbiBTTURLMjQ0MworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1sY2QuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2lkbGUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9mYi5oPgorCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc21kazI0NDNfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKKwkvKiBJU0EgSU8gU3BhY2UgbWFwIChtZW1vcnkgc3BhY2Ugc2VsZWN0ZWQgYnkgQTI0KSAqLworCisJeworCQkudmlydHVhbAk9ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfQ1MyKSwKKwkJLmxlbmd0aAkJPSAweDEwMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCArIDB4MTAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX0NTMiArICgxPDwyNCkpLAorCQkubGVuZ3RoCQk9IFNaXzRNLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1MzIpUzNDMjRYWF9WQV9JU0FfQllURSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfQ1MyKSwKKwkJLmxlbmd0aAkJPSAweDEwMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1MzIpUzNDMjRYWF9WQV9JU0FfQllURSArIDB4MTAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX0NTMiArICgxPDwyNCkpLAorCQkubGVuZ3RoCQk9IFNaXzRNLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfQorfTsKKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUIHwgUzNDMjQxMF9VQ09OX1VDTEsKKyNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgorI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGsyNDQzX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4M2M1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9LAorCVsxXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMSwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gMHgzYzUsCisJCS51bGNvbgkgICAgID0gMHgwMywKKwkJLnVmY29uCSAgICAgPSAweDUxLAorCX0sCisJLyogSVIgcG9ydCAqLworCVsyXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMiwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gMHgzYzUsCisJCS51bGNvbgkgICAgID0gMHg0MywKKwkJLnVmY29uCSAgICAgPSAweDUxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrMjQ0M19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX2RldmljZV93ZHQsCisJJnMzY19kZXZpY2VfaTJjLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2JvYXJkIHNtZGsyNDQzX2JvYXJkIF9faW5pdGRhdGEgPSB7CisJLmRldmljZXMgICAgICAgPSBzbWRrMjQ0M19kZXZpY2VzLAorCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShzbWRrMjQ0M19kZXZpY2VzKQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDQzX21hcF9pbyh2b2lkKQoreworCXMzYzI0eHhfaW5pdF9pbyhzbWRrMjQ0M19pb2Rlc2MsIEFSUkFZX1NJWkUoc21kazI0NDNfaW9kZXNjKSk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKHNtZGsyNDQzX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHNtZGsyNDQzX3VhcnRjZmdzKSk7CisJczNjMjR4eF9zZXRfYm9hcmQoJnNtZGsyNDQzX2JvYXJkKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNtZGsyNDQzX21hY2hpbmVfaW5pdCh2b2lkKQoreworCXNtZGtfbWFjaGluZV9pbml0KCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoU01ESzI0NDMsICJTTURLMjQ0MyIpCisJLyogTWFpbnRhaW5lcjogQmVuIERvb2tzIDxiZW5AZmx1ZmYub3JnPiAqLworCS5waHlzX2lvCT0gUzNDMjQxMF9QQV9VQVJULAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilTM0MyNFhYX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBTM0MyNDEwX1NEUkFNX1BBICsgMHgxMDAsCisKKwkuaW5pdF9pcnEJPSBzM2MyNHh4X2luaXRfaXJxLAorCS5tYXBfaW8JCT0gc21kazI0NDNfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBzbWRrMjQ0M19tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvczNjMjQ0My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjFkMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvczNjMjQ0My5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTYW1zdW5nIFMzQzI0NDMgTW9iaWxlIENQVSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zM2MyNDQzLWNsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVzZXQuaD4KKworI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0My5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgczNjMjQ0M19pb2Rlc2NbXSBfX2luaXRkYXRhID0geworCUlPREVTQ19FTlQoV0FUQ0hET0cpLAorCUlPREVTQ19FTlQoQ0xLUFdSKSwKKwlJT0RFU0NfRU5UKFRJTUVSKSwKK307CisKK3N0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0M19zeXNjbGFzcyA9IHsKKwlzZXRfa3NldF9uYW1lKCJzM2MyNDQzLWNvcmUiKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2MyNDQzX3N5c2RldiA9IHsKKwkuY2xzCQk9ICZzM2MyNDQzX3N5c2NsYXNzLAorfTsKKworc3RhdGljIHZvaWQgczNjMjQ0M19oYXJkX3Jlc2V0KHZvaWQpCit7CisJX19yYXdfd3JpdGVsKFMzQzI0NDNfU1dSU1RfUkVTRVQsIFMzQzI0NDNfU1dSU1QpOworfQorCitpbnQgX19pbml0IHMzYzI0NDNfaW5pdCh2b2lkKQoreworCXByaW50aygiUzNDMjQ0MzogSW5pdGlhbGlzaW5nIGFyY2hpdGVjdHVyZVxuIik7CisKKwlzM2MyNHh4X3Jlc2V0X2hvb2sgPSBzM2MyNDQzX2hhcmRfcmVzZXQ7CisKKwlzM2NfZGV2aWNlX25hbmQubmFtZSA9ICJzM2MyNDEyLW5hbmQiOworCisJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQ0M19zeXNkZXYpOworfQorCit2b2lkIF9faW5pdCBzM2MyNDQzX2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCit7CisJczNjMjR4eF9pbml0X3VhcnRkZXZzKCJzM2MyNDQwLXVhcnQiLCBzM2MyNDEwX3VhcnRfcmVzb3VyY2VzLCBjZmcsIG5vKTsKK30KKworLyogczNjMjQ0M19tYXBfaW8KKyAqCisgKiByZWdpc3RlciB0aGUgc3RhbmRhcmQgY3B1IElPIGFyZWFzLCBhbmQgYW55IHBhc3NlZCBpbiBmcm9tIHRoZQorICogbWFjaGluZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbi4KKyAqLworCit2b2lkIF9faW5pdCBzM2MyNDQzX21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IG1hY2hfc2l6ZSkKK3sKKwlpb3RhYmxlX2luaXQoczNjMjQ0M19pb2Rlc2MsIEFSUkFZX1NJWkUoczNjMjQ0M19pb2Rlc2MpKTsKKwlpb3RhYmxlX2luaXQobWFjaF9kZXNjLCBtYWNoX3NpemUpOworfQorCisvKiBuZWVkIHRvIHJlZ2lzdGVyIGNsYXNzIGJlZm9yZSB3ZSBhY3R1YWxseSByZWdpc3RlciB0aGUgZGV2aWNlLCBhbmQKKyAqIHdlIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgYmVlbiBpbml0aWFsaXNlZCBiZWZvcmUgYW55IG9mIHRoZQorICogZHJpdmVycyBldmVuIHRyeSB0byB1c2UgaXQgKGV2ZW4gaWYgbm90IG9uIGFuIHMzYzI0NDMgYmFzZWQgc3lzdGVtKQorICogYXMgYSBkcml2ZXIgd2hpY2ggbWF5IHN1cHBvcnQgYm90aCAyNDQzIGFuZCAyNDQwIG1heSB0cnkgYW5kIHVzZSBpdC4KKyovCisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0NDNfY29yZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmczNjMjQ0M19zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwoczNjMjQ0M19jb3JlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jCmluZGV4IGU1MTAyOTUuLjE5MmE1YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMKQEAgLTEzOCw2ICsxMzgsMzYgQEAKIAlyZXR1cm4gdjsKIH0KIAoraW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChncGlvID4gR1BJT19NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCUdQRFIgJj0gfkdQSU9fR1BJTyhncGlvKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25faW5wdXQpOworCitpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChncGlvID4gR1BJT19NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCUdQRFIgfD0gR1BJT19HUElPKGdwaW8pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9vdXRwdXQpOworCiAvKgogICogRGVmYXVsdCBwb3dlci1vZmYgZm9yIFNBMTEwMAogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwLmMKaW5kZXggNTRlY2RhYS4uNjQwNjdjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYwpAQCAtMjMxLDEyICsyMzEsNiBAQAogCSZzMWQxM3h4eGZiX2RldmljZSwKIH07CiAKLS8qIGEgc3R1YiBmb3Igbm93LCB3ZSB0aGVvcmV0aWNhbGx5IGNhbm5vdCBzdXNwZW5kIHdpdGhvdXQgYSBmbGFzaGJvYXJkICovCi1pbnQgcG1fc3VzcGVuZChzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCi17Ci0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBqb3JuYWRhNzIwX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGFhZGUyZjcuLmU2ODRlOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMTcxLDggKzE3MSw4IEBACiAjIEFSTTkyNlQKIGNvbmZpZyBDUFVfQVJNOTI2VAogCWJvb2wgIlN1cHBvcnQgQVJNOTI2VCBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgQVJDSF9WRVJTQVRJTEVfUEIgfHwgTUFDSF9WRVJTQVRJTEVfQUIgfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDE2WFggfHwgTUFDSF9SRUFMVklFV19FQiB8fCBBUkNIX1BOWDQwMDggfHwgQVJDSF9ORVRYIHx8IENQVV9TM0MyNDEyIHx8IEFSQ0hfQVQ5MVNBTTkyNjAgfHwgQVJDSF9BVDkxU0FNOTI2MQotCWRlZmF1bHQgeSBpZiBBUkNIX1ZFUlNBVElMRV9QQiB8fCBNQUNIX1ZFUlNBVElMRV9BQiB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX1BOWDQwMDggfHwgQVJDSF9ORVRYIHx8IENQVV9TM0MyNDEyIHx8IEFSQ0hfQVQ5MVNBTTkyNjAgfHwgQVJDSF9BVDkxU0FNOTI2MQorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfVkVSU0FUSUxFX1BCIHx8IE1BQ0hfVkVSU0FUSUxFX0FCIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVAxNlhYIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgQVJDSF9QTlg0MDA4IHx8IEFSQ0hfTkVUWCB8fCBDUFVfUzNDMjQxMiB8fCBBUkNIX0FUOTFTQU05MjYwIHx8IEFSQ0hfQVQ5MVNBTTkyNjEgfHwgQVJDSF9BVDkxU0FNOTI2MyB8fCBBUkNIX05TOVhYWAorCWRlZmF1bHQgeSBpZiBBUkNIX1ZFUlNBVElMRV9QQiB8fCBNQUNIX1ZFUlNBVElMRV9BQiB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX1BOWDQwMDggfHwgQVJDSF9ORVRYIHx8IENQVV9TM0MyNDEyIHx8IEFSQ0hfQVQ5MVNBTTkyNjAgfHwgQVJDSF9BVDkxU0FNOTI2MSB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfTlM5WFhYCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVRKCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCkBAIC01MjUsNyArNTI1LDcgQEAKIAkgIG9mIHlvdXIgY2hpcHNldC9ib2FyZC9wcm9jZXNzb3IuCiAKIGNvbmZpZyBDUFVfSElHSF9WRUNUT1IKLQlkZXBlbmRzICFNTVUgJiYgQ1BVX0NQMTUgJiYgIUNQVV9BUk03NDBUCisJZGVwZW5kcyBvbiAhTU1VICYmIENQVV9DUDE1ICYmICFDUFVfQVJNNzQwVAogCWJvb2wgIlNlbGVjdCB0aGUgSGlnaCBleGNlcHRpb24gdmVjdG9yIgogCWRlZmF1bHQgbgogCWhlbHAKQEAgLTYwOSwzICs2MDksMTAgQEAKIAkgIEZvcmdldCBhYm91dCBmYXN0IHVzZXIgc3BhY2UgY21weGNoZyBzdXBwb3J0LgogCSAgSXQgaXMganVzdCBub3QgcG9zc2libGUuCiAKK2NvbmZpZyBPVVRFUl9DQUNIRQorCWJvb2wKKwlkZWZhdWx0IG4KKworY29uZmlnIENBQ0hFX0wyWDAKKwlib29sCisJc2VsZWN0IE9VVEVSX0NBQ0hFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21tL01ha2VmaWxlCmluZGV4IGQyZjU2NzIuLjJmOGI5NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21tL01ha2VmaWxlCkBAIC02NiwzICs2Niw1IEBACiBvYmotJChDT05GSUdfQ1BVX1hTQ0FMRSkJKz0gcHJvYy14c2NhbGUubwogb2JqLSQoQ09ORklHX0NQVV9YU0MzKQkJKz0gcHJvYy14c2MzLm8KIG9iai0kKENPTkZJR19DUFVfVjYpCQkrPSBwcm9jLXY2Lm8KKworb2JqLSQoQ09ORklHX0NBQ0hFX0wyWDApCSs9IGNhY2hlLWwyeDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jIGIvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YTM2ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBhcmNoL2FybS9tbS9jYWNoZS1sMngwLmMgLSBMMjEwL0wyMjAgY2FjaGUgY29udHJvbGxlciBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KKworI2RlZmluZSBDQUNIRV9MSU5FX1NJWkUJCTMyCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmwyeDBfYmFzZTsKKworc3RhdGljIGlubGluZSB2b2lkIHN5bmNfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsLCB1bnNpZ25lZCBsb25nIHJlZywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvbXBsZXRlX21hc2spCit7CisJd3JpdGVsKHZhbCwgbDJ4MF9iYXNlICsgcmVnKTsKKwkvKiB3YWl0IGZvciB0aGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2hpbGUgKHJlYWRsKGwyeDBfYmFzZSArIHJlZykgJiBjb21wbGV0ZV9tYXNrKQorCQk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV9zeW5jKHZvaWQpCit7CisJc3luY193cml0ZWwoMCwgTDJYMF9DQUNIRV9TWU5DLCAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGwyeDBfaW52X2FsbCh2b2lkKQoreworCS8qIGludmFsaWRhdGUgYWxsIHdheXMgKi8KKwlzeW5jX3dyaXRlbCgweGZmLCBMMlgwX0lOVl9XQVksIDB4ZmYpOworCWNhY2hlX3N5bmMoKTsKK30KKworc3RhdGljIHZvaWQgbDJ4MF9pbnZfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJc3RhcnQgJj0gfihDQUNIRV9MSU5FX1NJWkUgLSAxKTsKKwlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBDQUNIRV9MSU5FX1NJWkUpCisJCXN5bmNfd3JpdGVsKGFkZHIsIEwyWDBfSU5WX0xJTkVfUEEsIDEpOworCWNhY2hlX3N5bmMoKTsKK30KKworc3RhdGljIHZvaWQgbDJ4MF9jbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlzdGFydCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOworCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IENBQ0hFX0xJTkVfU0laRSkKKwkJc3luY193cml0ZWwoYWRkciwgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKKwljYWNoZV9zeW5jKCk7Cit9CisKK3N0YXRpYyB2b2lkIGwyeDBfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJc3RhcnQgJj0gfihDQUNIRV9MSU5FX1NJWkUgLSAxKTsKKwlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBDQUNIRV9MSU5FX1NJWkUpCisJCXN5bmNfd3JpdGVsKGFkZHIsIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEsIDEpOworCWNhY2hlX3N5bmMoKTsKK30KKwordm9pZCBfX2luaXQgbDJ4MF9pbml0KHZvaWQgX19pb21lbSAqYmFzZSwgX191MzIgYXV4X3ZhbCwgX191MzIgYXV4X21hc2spCit7CisJX191MzIgYXV4OworCisJbDJ4MF9iYXNlID0gYmFzZTsKKworCS8qIGRpc2FibGUgTDJYMCAqLworCXdyaXRlbCgwLCBsMngwX2Jhc2UgKyBMMlgwX0NUUkwpOworCisJYXV4ID0gcmVhZGwobDJ4MF9iYXNlICsgTDJYMF9BVVhfQ1RSTCk7CisJYXV4ICY9IGF1eF9tYXNrOworCWF1eCB8PSBhdXhfdmFsOworCXdyaXRlbChhdXgsIGwyeDBfYmFzZSArIEwyWDBfQVVYX0NUUkwpOworCisJbDJ4MF9pbnZfYWxsKCk7CisKKwkvKiBlbmFibGUgTDJYMCAqLworCXdyaXRlbCgxLCBsMngwX2Jhc2UgKyBMMlgwX0NUUkwpOworCisJb3V0ZXJfY2FjaGUuaW52X3JhbmdlID0gbDJ4MF9pbnZfcmFuZ2U7CisJb3V0ZXJfY2FjaGUuY2xlYW5fcmFuZ2UgPSBsMngwX2NsZWFuX3JhbmdlOworCW91dGVyX2NhY2hlLmZsdXNoX3JhbmdlID0gbDJ4MF9mbHVzaF9yYW5nZTsKKworCXByaW50ayhLRVJOX0lORk8gIkwyWDAgY2FjaGUgY29udHJvbGxlciBlbmFibGVkXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYyBiL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYwppbmRleCA2YTljMzYyLi4xZjlmOTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb25zaXN0ZW50LmMKKysrIGIvYXJjaC9hcm0vbW0vY29uc2lzdGVudC5jCkBAIC0yMDUsOSArMjA1LDEwIEBACiAJICoga2VybmVsIGRpcmVjdC1tYXBwZWQgcmVnaW9uIGZvciBkZXZpY2UgRE1BLgogCSAqLwogCXsKLQkJdW5zaWduZWQgbG9uZyBrYWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKLQkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgMCwgc2l6ZSk7Ci0JCWRtYWNfZmx1c2hfcmFuZ2Uoa2FkZHIsIGthZGRyICsgc2l6ZSk7CisJCXZvaWQgKnB0ciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJbWVtc2V0KHB0ciwgMCwgc2l6ZSk7CisJCWRtYWNfZmx1c2hfcmFuZ2UocHRyLCBwdHIgKyBzaXplKTsKKwkJb3V0ZXJfZmx1c2hfcmFuZ2UoX19wYShwdHIpLCBfX3BhKHB0cikgKyBzaXplKTsKIAl9CiAKIAkvKgpAQCAtNDgwLDIwICs0ODEsMjQgQEAKICAqIHBsYXRmb3JtcyB3aXRoIENPTkZJR19ETUFCT1VOQ0UuCiAgKiBVc2UgdGhlIGRyaXZlciBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oIChkbWFfc3luY18qKQogICovCi12b2lkIGNvbnNpc3RlbnRfc3luYyh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit2b2lkIGNvbnNpc3RlbnRfc3luYyhjb25zdCB2b2lkICpzdGFydCwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCiB7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKXZhZGRyOwotCXVuc2lnbmVkIGxvbmcgZW5kICAgPSBzdGFydCArIHNpemU7CisJY29uc3Qgdm9pZCAqZW5kID0gc3RhcnQgKyBzaXplOworCisJQlVHX09OKCF2aXJ0X2FkZHJfdmFsaWQoc3RhcnQpIHx8ICF2aXJ0X2FkZHJfdmFsaWQoZW5kIC0gMSkpOwogCiAJc3dpdGNoIChkaXJlY3Rpb24pIHsKIAljYXNlIERNQV9GUk9NX0RFVklDRToJCS8qIGludmFsaWRhdGUgb25seSAqLwogCQlkbWFjX2ludl9yYW5nZShzdGFydCwgZW5kKTsKKwkJb3V0ZXJfaW52X3JhbmdlKF9fcGEoc3RhcnQpLCBfX3BhKGVuZCkpOwogCQlicmVhazsKIAljYXNlIERNQV9UT19ERVZJQ0U6CQkvKiB3cml0ZWJhY2sgb25seSAqLwogCQlkbWFjX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpOworCQlvdXRlcl9jbGVhbl9yYW5nZShfX3BhKHN0YXJ0KSwgX19wYShlbmQpKTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfQklESVJFQ1RJT05BTDoJCS8qIHdyaXRlYmFjayBhbmQgaW52YWxpZGF0ZSAqLwogCQlkbWFjX2ZsdXNoX3JhbmdlKHN0YXJ0LCBlbmQpOworCQlvdXRlcl9mbHVzaF9yYW5nZShfX3BhKHN0YXJ0KSwgX19wYShlbmQpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb250ZXh0LmMgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKaW5kZXggNzllODAwMi4uOWRhNDNhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29udGV4dC5jCisrKyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwpAQCAtMTksNyArMTksOCBAQAogLyoKICAqIFdlIGZvcmsoKWVkIGEgcHJvY2VzcywgYW5kIHdlIG5lZWQgYSBuZXcgY29udGV4dCBmb3IgdGhlIGNoaWxkCiAgKiB0byBydW4gaW4uICBXZSByZXNlcnZlIHZlcnNpb24gMCBmb3IgaW5pdGlhbCB0YXNrcyBzbyB3ZSB3aWxsCi0gKiBhbHdheXMgYWxsb2NhdGUgYW4gQVNJRC4KKyAqIGFsd2F5cyBhbGxvY2F0ZSBhbiBBU0lELiBUaGUgQVNJRCAwIGlzIHJlc2VydmVkIGZvciB0aGUgVFRCUgorICogcmVnaXN0ZXIgY2hhbmdpbmcgc2VxdWVuY2UuCiAgKi8KIHZvaWQgX19pbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKQEAgLTM4LDggKzM5LDE1IEBACiAJICogSWYgd2UndmUgdXNlZCB1cCBhbGwgb3VyIEFTSURzLCB3ZSBuZWVkCiAJICogdG8gc3RhcnQgYSBuZXcgdmVyc2lvbiBhbmQgZmx1c2ggdGhlIFRMQi4KIAkgKi8KLQlpZiAoKGFzaWQgJiB+QVNJRF9NQVNLKSA9PSAwKQorCWlmICgoYXNpZCAmIH5BU0lEX01BU0spID09IDApIHsKKwkJYXNpZCA9ICsrY3B1X2xhc3RfYXNpZDsKKwkJLyogc2V0IHRoZSByZXNlcnZlZCBBU0lEIGJlZm9yZSBmbHVzaGluZyB0aGUgVExCICovCisJCWFzbSgibWNyCXAxNSwgMCwgJTAsIGMxMywgYzAsIDEJQCBzZXQgcmVzZXJ2ZWQgY29udGV4dCBJRFxuIgorCQkgICAgOgorCQkgICAgOiAiciIgKDApKTsKKwkJaXNiKCk7CiAJCWZsdXNoX3RsYl9hbGwoKTsKKwl9CiAKIAltbS0+Y29udGV4dC5pZCA9IGFzaWQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKaW5kZXggY2Y5NWM1ZC4uNDQ1NThkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwpAQCAtMTE5LDggKzExOSw2IEBACiAJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwZm4pOwogfQogCi12b2lkIF9fZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBwYWdlICpwYWdlKTsKLQogLyoKICAqIFRha2UgY2FyZSBvZiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdGhpbmdzIHdoZW4gcGxhY2luZyBhIG5ldyBQVEUgaW50bwogICogYSBwYWdlIHRhYmxlLCBvciBjaGFuZ2luZyBhbiBleGlzdGluZyBQVEUuICBCYXNpY2FsbHksIHRoZXJlIGFyZSB0d28KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tdS5jIGIvYXJjaC9hcm0vbW0vbW11LmMKaW5kZXggNjU1YzgzNy4uOTRmZDRiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbW11LmMKQEAgLTQ5LDggKzQ5LDEwIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FjaGVwb2xpY3kgX19pbml0ZGF0YSA9IENQT0xJQ1lfV1JJVEVCQUNLOwogc3RhdGljIHVuc2lnbmVkIGludCBlY2NfbWFzayBfX2luaXRkYXRhID0gMDsKK3BncHJvdF90IHBncHJvdF91c2VyOwogcGdwcm90X3QgcGdwcm90X2tlcm5lbDsKIAorRVhQT1JUX1NZTUJPTChwZ3Byb3RfdXNlcik7CiBFWFBPUlRfU1lNQk9MKHBncHJvdF9rZXJuZWwpOwogCiBzdHJ1Y3QgY2FjaGVwb2xpY3kgewpAQCAtMzQ1LDYgKzM0Nyw3IEBACiAJCW1lbV90eXBlc1tNVF9NSU5JQ0xFQU5dLnByb3Rfc2VjdCAmPSB+UE1EX1NFQ1RfVEVYKDEpOwogCX0KIAorCXBncHJvdF91c2VyICAgPSBfX3BncHJvdChMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCB1c2VyX3BncHJvdCk7CiAJcGdwcm90X2tlcm5lbCA9IF9fcGdwcm90KExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8CiAJCQkJIExfUFRFX0RJUlRZIHwgTF9QVEVfV1JJVEUgfAogCQkJCSBMX1BURV9FWEVDIHwga2Vybl9wZ3Byb3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCmluZGV4IDdiMTg0M2IuLmViNDJlNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKQEAgLTE0LDEwICsxNCwxMyBAQAogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV9zY3UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS1od2RlZi5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKKyNpZmRlZiBDT05GSUdfU01QCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV9zY3UuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKIAogI2RlZmluZSBEX0NBQ0hFX0xJTkVfU0laRQkzMgpAQCAtMzAsNiArMzMsMTIgQEAKICNkZWZpbmUgVFRCX1JHTl9XVAkoMiA8PCAzKQogI2RlZmluZSBUVEJfUkdOX1dCCSgzIDw8IDMpCiAKKyNpZm5kZWYgQ09ORklHX1NNUAorI2RlZmluZSBUVEJfRkxBR1MJVFRCX1JHTl9XQldBCisjZWxzZQorI2RlZmluZSBUVEJfRkxBR1MJVFRCX1JHTl9XQldBfFRUQl9TCisjZW5kaWYKKwogRU5UUlkoY3B1X3Y2X3Byb2NfaW5pdCkKIAltb3YJcGMsIGxyCiAKQEAgLTkyLDkgKzEwMSw3IEBACiAjaWZkZWYgQ09ORklHX01NVQogCW1vdglyMiwgIzAKIAlsZHIJcjEsIFtyMSwgI01NX0NPTlRFWFRfSURdCUAgZ2V0IG1tLT5jb250ZXh0LmlkCi0jaWZkZWYgQ09ORklHX1NNUAotCW9ycglyMCwgcjAsICNUVEJfUkdOX1dCV0F8VFRCX1MJQCBtYXJrIFBUV3Mgc2hhcmVkLCBvdXRlciBjYWNoZWFibGUKLSNlbmRpZgorCW9ycglyMCwgcjAsICNUVEJfRkxBR1MKIAltY3IJcDE1LCAwLCByMiwgYzcsIGM1LCA2CQlAIGZsdXNoIEJUQUMvQlRCCiAJbWNyCXAxNSwgMCwgcjIsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCiAJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBzZXQgVFRCIDAKQEAgLTE4Myw4ICsxOTAsNyBAQAogCS8qIFNldCB1cCB0aGUgU0NVIG9uIGNvcmUgMCBvbmx5ICovCiAJbXJjCXAxNSwgMCwgcjAsIGMwLCBjMCwgNQkJQCBDUFUgY29yZSBudW1iZXIKIAlhbmRzCXIwLCByMCwgIzE1Ci0JbW92ZXEJcjAsICMweDEwMDAwMDAwIEAgU0NVX0JBU0UKLQlvcnJlcQlyMCwgcjAsICMweDAwMTAwMDAwCisJbGRyZXEJcjAsID1TQ1VfQkFTRQogCWxkcmVxCXI1LCBbcjAsICNTQ1VfQ1RSTF0KIAlvcnJlcQlyNSwgcjUsICMxCiAJc3RyZXEJcjUsIFtyMCwgI1NDVV9DVFJMXQpAQCAtMjA0LDkgKzIxMCw3IEBACiAjaWZkZWYgQ09ORklHX01NVQogCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICsgRCBUTEJzCiAJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMgkJQCBUVEIgY29udHJvbCByZWdpc3RlcgotI2lmZGVmIENPTkZJR19TTVAKLQlvcnIJcjQsIHI0LCAjVFRCX1JHTl9XQldBfFRUQl9TCUAgbWFyayBQVFdzIHNoYXJlZCwgb3V0ZXIgY2FjaGVhYmxlCi0jZW5kaWYKKwlvcnIJcjQsIHI0LCAjVFRCX0ZMQUdTCiAJbWNyCXAxNSwgMCwgcjQsIGMyLCBjMCwgMQkJQCBsb2FkIFRUQjEKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAJYWRyCXI1LCB2Nl9jcnZhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwppbmRleCA5NGE1ODQ1Li5kOTU5MjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwpAQCAtNSwyMyArNSwyMyBAQAogICogQ3VycmVudCBNYWludGFpbmVyOiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KICAqCiAgKiBDb3B5cmlnaHQgMjAwNCAoQykgSW50ZWwgQ29ycC4KLSAqIENvcHlyaWdodCAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNSAoQykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogTU1VIGZ1bmN0aW9ucyBmb3IgdGhlIEludGVsIFhTY2FsZTMgQ29yZSAoWFNDMykuICBUaGUgWFNDMyBjb3JlIGlzIGFuCi0gKiBleHRlbnNpb24gdG8gSW50ZWwncyBvcmlnaW5hbCBYU2NhbGUgY29yZSB0aGF0IGFkZHMgdGhlIGZvbGxvd2luZworICogTU1VIGZ1bmN0aW9ucyBmb3IgdGhlIEludGVsIFhTY2FsZTMgQ29yZSAoWFNDMykuICBUaGUgWFNDMyBjb3JlIGlzCisgKiBhbiBleHRlbnNpb24gdG8gSW50ZWwncyBvcmlnaW5hbCBYU2NhbGUgY29yZSB0aGF0IGFkZHMgdGhlIGZvbGxvd2luZwogICogZmVhdHVyZXM6CiAgKgogICogLSBBUk12NiBTdXBlcnNlY3Rpb25zCiAgKiAtIExvdyBMb2NhbGl0eSBSZWZlcmVuY2UgcGFnZXMgKHJlcGxhY2VzIG1pbmktY2FjaGUpCiAgKiAtIDM2LWJpdCBhZGRyZXNzaW5nCiAgKiAtIEwyIGNhY2hlCi0gKiAtIENhY2hlLWNvaGVyZW5jeSBpZiBjaGlwc2V0IHN1cHBvcnRzIGl0CisgKiAtIENhY2hlIGNvaGVyZW5jeSBpZiBjaGlwc2V0IHN1cHBvcnRzIGl0CiAgKgotICogQmFzZWQgb24gb3JpZ25hbCBYU2NhbGUgY29kZSBieSBOaWNvbGFzIFBpdHJlCisgKiBCYXNlZCBvbiBvcmlnaW5hbCBYU2NhbGUgY29kZSBieSBOaWNvbGFzIFBpdHJlLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CkBAIC00MiwxMiArNDIsMTIgQEAKICNkZWZpbmUgTUFYX0FSRUFfU0laRQkzMjc2OAogCiAvKgotICogVGhlIGNhY2hlIGxpbmUgc2l6ZSBvZiB0aGUgSSBhbmQgRCBjYWNoZS4KKyAqIFRoZSBjYWNoZSBsaW5lIHNpemUgb2YgdGhlIEwxIEksIEwxIEQgYW5kIHVuaWZpZWQgTDIgY2FjaGUuCiAgKi8KICNkZWZpbmUgQ0FDSEVMSU5FU0laRQkzMgogCiAvKgotICogVGhlIHNpemUgb2YgdGhlIGRhdGEgY2FjaGUuCisgKiBUaGUgc2l6ZSBvZiB0aGUgTDEgRCBjYWNoZS4KICAqLwogI2RlZmluZSBDQUNIRVNJWkUJMzI3NjgKIApAQCAtNTcsOSArNTcsOSBAQAogI2RlZmluZSBMMl9DQUNIRV9FTkFCTEUJMQogCiAvKgotICogVGhpcyBtYWNybyBpcyB1c2VkIHRvIHdhaXQgZm9yIGEgQ1AxNSB3cml0ZSBhbmQgaXMgbmVlZGVkCi0gKiB3aGVuIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGxhc3Qgb3BlcmF0aW9uIHRvIHRoZSBjby1wcm8KLSAqIHdhcyBjb21wbGV0ZWQgYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBvcGVyYXRpb24uCisgKiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gd2FpdCBmb3IgYSBDUDE1IHdyaXRlIGFuZCBpcyBuZWVkZWQgd2hlbiB3ZQorICogaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUgbGFzdCBvcGVyYXRpb24gdG8gdGhlIGNvcHJvY2Vzc29yIHdhcworICogY29tcGxldGVkIGJlZm9yZSBjb250aW51aW5nIHdpdGggb3BlcmF0aW9uLgogICovCiAJLm1hY3JvCWNwd2FpdF9yZXQsIGxyLCByZAogCW1yYwlwMTUsIDAsIFxyZCwgYzIsIGMwLCAwCQlAIGFyYml0cmFyeSByZWFkIG9mIGNwMTUKQEAgLTY4LDEzICs2OCwxMyBAQAogCS5lbmRtCiAKIC8qCi0gKiBUaGlzIG1hY3JvIGNsZWFucyAmIGludmFsaWRhdGVzIHRoZSBlbnRpcmUgeHNjMyBkY2FjaGUgYnkgc2V0ICYgd2F5LgorICogVGhpcyBtYWNybyBjbGVhbnMgYW5kIGludmFsaWRhdGVzIHRoZSBlbnRpcmUgTDEgRCBjYWNoZS4KICAqLwogCiAgCS5tYWNybyAgY2xlYW5fZF9jYWNoZSByZCwgcnMKIAltb3YJXHJkLCAjMHgxZjAwCiAJb3JyCVxyZCwgXHJkLCAjMHgwMGUwCi0xOgltY3IJcDE1LCAwLCBccmQsIGM3LCBjMTQsIDIJCUAgY2xlYW4vaW52IHNldC93YXkKKzE6CW1jcglwMTUsIDAsIFxyZCwgYzcsIGMxNCwgMgkJQCBjbGVhbi9pbnZhbGlkYXRlIEwxIEQgbGluZQogCWFkZHMJXHJkLCBccmQsICMweDQwMDAwMDAwCiAJYmNjCTFiCiAJc3VicwlccmQsIFxyZCwgIzB4MjAKQEAgLTExOSwxNSArMTE5LDE1IEBACiAJbW92CXIxLCAjUFNSX0ZfQklUfFBTUl9JX0JJVHxTVkNfTU9ERQogCW1zcgljcHNyX2MsIHIxCQkJQCByZXNldCBDUFNSCiAJbXJjCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCi0JYmljCXIxLCByMSwgIzB4MDA4NgkJCUAgLi4uLi4uLi5CLi4uLkNBLgogCWJpYwlyMSwgcjEsICMweDM5MDAJCQlAIC4uVklaLi5TLi4uLi4uLi4KKwliaWMJcjEsIHIxLCAjMHgwMDg2CQkJQCAuLi4uLi4uLkIuLi4uQ0EuCiAJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCi0JbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgJiBCVEIKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgTDEgY2FjaGVzIGFuZCBCVEIKIAliaWMJcjEsIHIxLCAjMHgwMDAxCQkJQCAuLi4uLi4uLi4uLi4uLi5NCiAJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCiAJQCBDQVVUSU9OOiBNTVUgdHVybmVkIG9mZiBmcm9tIHRoaXMgcG9pbnQuICBXZSBjb3VudCBvbiB0aGUgcGlwZWxpbmUKIAlAIGFscmVhZHkgY29udGFpbmluZyB0aG9zZSB0d28gbGFzdCBpbnN0cnVjdGlvbnMgdG8gc3Vydml2ZS4KLQltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSAmIEQgVExCcworCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJIGFuZCBEIFRMQnMKIAltb3YJcGMsIHIwCiAKIC8qCkBAIC0xMzksMTQgKzEzOSwxMiBAQAogICoKICAqIFhTY2FsZSBzdXBwb3J0cyBjbG9jayBzd2l0Y2hpbmcsIGJ1dCB1c2luZyBpZGxlIG1vZGUgc3VwcG9ydAogICogYWxsb3dzIGV4dGVybmFsIGhhcmR3YXJlIHRvIHJlYWN0IHRvIHN5c3RlbSBzdGF0ZSBjaGFuZ2VzLgotCi0gTU1HOiBDb21lIGJhY2sgdG8gdGhpcyBvbmUuCiAgKi8KIAkuYWxpZ24JNQogCiBFTlRSWShjcHVfeHNjM19kb19pZGxlKQogCW1vdglyMCwgIzEKLQltY3IJcDE0LCAwLCByMCwgYzcsIGMwLCAwCQlAIEdvIHRvIElETEUKKwltY3IJcDE0LCAwLCByMCwgYzcsIGMwLCAwCQlAIGdvIHRvIGlkbGUKIAltb3YJcGMsIGxyCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDQUNIRSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtMTcxLDkgKzE2OSw5IEBACiBfX2ZsdXNoX3dob2xlX2NhY2hlOgogCWNsZWFuX2RfY2FjaGUgcjAsIHIxCiAJdHN0CXIyLCAjVk1fRVhFQwotCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBJbnZhbGlkYXRlIEkgY2FjaGUgJiBCVEIKLQltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIERyYWluIFdyaXRlIEJ1ZmZlcgotCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgNAkJQCBQcmVmZXRjaCBGbHVzaAorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEwxIEkgY2FjaGUgYW5kIEJUQgorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCA0CQlAIHByZWZldGNoIGZsdXNoCiAJbW92CXBjLCBscgogCiAvKgpAQCAtMTk0LDIxICsxOTIsMjEgQEAKIAliaHMJX19mbHVzaF93aG9sZV9jYWNoZQogCiAxOgl0c3QJcjIsICNWTV9FWEVDCi0JbWNybmUJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIEludmFsaWRhdGUgSSBjYWNoZSBsaW5lCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgQ2xlYW4vaW52YWxpZGF0ZSBEIGNhY2hlIGxpbmUKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBMMSBJIGxpbmUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbi9pbnZhbGlkYXRlIEwxIEQgbGluZQogCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVTSVpFCiAJY21wCXIwLCByMQogCWJsbwkxYgogCXRzdAlyMiwgI1ZNX0VYRUMKLQltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDYJCUAgSW52YWxpZGF0ZSBCVEIKLQltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIERyYWluIFdyaXRlIEJ1ZmZlcgotCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgNAkJQCBQcmVmZXRjaCBGbHVzaAorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgNgkJQCBpbnZhbGlkYXRlIEJUQgorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGM1LCA0CQlAIHByZWZldGNoIGZsdXNoCiAJbW92CXBjLCBscgogCiAvKgogICoJY29oZXJlbnRfa2Vybl9yYW5nZShzdGFydCwgZW5kKQogICoKLSAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJIGNhY2hlIGFuZCB0aGUgRCBjYWNoZSBpbiB0aGUKICAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKICAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KICAqCkBAIC0yMjIsMzQgKzIyMCwzNCBAQAogLyogRkFMTFRIUk9VR0ggKi8KIEVOVFJZKHhzYzNfY29oZXJlbnRfdXNlcl9yYW5nZSkKIAliaWMJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRSAtIDEKLTE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEwxIEQgbGluZQogCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVTSVpFCiAJY21wCXIwLCByMQogCWJsbwkxYgogCW1vdglyMCwgIzAKLQltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCQlAIEludmFsaWRhdGUgSSBjYWNoZSAmIEJUQgotCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIERyYWluIFdyaXRlIEJ1ZmZlcgotCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDQJCUAgUHJlZmV0Y2ggRmx1c2gKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgTDEgSSBjYWNoZSBhbmQgQlRCCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAkJQCBwcmVmZXRjaCBmbHVzaAogCW1vdglwYywgbHIKIAogLyoKICAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgotICoJdGhlIEkgY2FjaGUKKyAqCXRoZSBJIGNhY2hlLgogICoKICAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCiAgKi8KIEVOVFJZKHhzYzNfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKIAlhZGQJcjEsIHIwLCAjUEFHRV9TWgotMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgQ2xlYW4vSW52YWxpZGF0ZSBEIENhY2hlIGxpbmUKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuL2ludmFsaWRhdGUgTDEgRCBsaW5lCiAJYWRkCXIwLCByMCwgI0NBQ0hFTElORVNJWkUKIAljbXAJcjAsIHIxCiAJYmxvCTFiCiAJbW92CXIwLCAjMAotCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgSW52YWxpZGF0ZSBJIGNhY2hlICYgQlRCCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgQnVmZmVyCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAkJQCBQcmVmZXRjaCBGbHVzaAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBMMSBJIGNhY2hlIGFuZCBCVEIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkYXRhIHdyaXRlIGJhcnJpZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA0CQlAIHByZWZldGNoIGZsdXNoCiAJbW92CXBjLCBscgogCiAvKgpAQCAtMjY2LDE3ICsyNjQsMTcgQEAKIEVOVFJZKHhzYzNfZG1hX2ludl9yYW5nZSkKIAl0c3QJcjAsICNDQUNIRUxJTkVTSVpFIC0gMQogCWJpYwlyMCwgcjAsICNDQUNIRUxJTkVTSVpFIC0gMQotCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gTDEgRCBlbnRyeQotCW1jcm5lCXAxNSwgMSwgcjAsIGM3LCBjMTEsIDEJCUAgY2xlYW4gTDIgRCBlbnRyeQorCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gTDEgRCBsaW5lCisJbWNybmUJcDE1LCAxLCByMCwgYzcsIGMxMSwgMQkJQCBjbGVhbiBMMiBsaW5lCiAJdHN0CXIxLCAjQ0FDSEVMSU5FU0laRSAtIDEKLQltY3JuZQlwMTUsIDAsIHIxLCBjNywgYzEwLCAxCQlAIGNsZWFuIEwxIEQgZW50cnkKLQltY3JuZQlwMTUsIDEsIHIxLCBjNywgYzExLCAxCQlAIGNsZWFuIEwyIEQgZW50cnkKLTE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBMMSBEIGVudHJ5Ci0JbWNyCXAxNSwgMSwgcjAsIGM3LCBjNywgMQkJQCBJbnZhbGlkYXRlIEwyIEQgY2FjaGUgbGluZQorCW1jcm5lCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDEJCUAgY2xlYW4gTDEgRCBsaW5lCisJbWNybmUJcDE1LCAxLCByMSwgYzcsIGMxMSwgMQkJQCBjbGVhbiBMMiBsaW5lCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgTDEgRCBsaW5lCisJbWNyCXAxNSwgMSwgcjAsIGM3LCBjNywgMQkJQCBpbnZhbGlkYXRlIEwyIGxpbmUKIAlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRQogCWNtcAlyMCwgcjEKIAlibG8JMWIKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBEcmFpbiBXcml0ZSBCdWZmZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkYXRhIHdyaXRlIGJhcnJpZXIKIAltb3YJcGMsIGxyCiAKIC8qCkBAIC0yODksMTIgKzI4NywxMiBAQAogICovCiBFTlRSWSh4c2MzX2RtYV9jbGVhbl9yYW5nZSkKIAliaWMJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRSAtIDEKLTE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEwxIEQgZW50cnkKLQltY3IJcDE1LCAxLCByMCwgYzcsIGMxMSwgMQkJQCBjbGVhbiBMMiBEIGVudHJ5CisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBMMSBEIGxpbmUKKwltY3IJcDE1LCAxLCByMCwgYzcsIGMxMSwgMQkJQCBjbGVhbiBMMiBsaW5lCiAJYWRkCXIwLCByMCwgI0NBQ0hFTElORVNJWkUKIAljbXAJcjAsIHIxCiAJYmxvCTFiCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgQnVmZmVyCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCiAJbW92CXBjLCBscgogCiAvKgpAQCAtMzA3LDEzICszMDUsMTMgQEAKICAqLwogRU5UUlkoeHNjM19kbWFfZmx1c2hfcmFuZ2UpCiAJYmljCXIwLCByMCwgI0NBQ0hFTElORVNJWkUgLSAxCi0xOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQlAIENsZWFuL2ludmFsaWRhdGUgTDEgRCBjYWNoZSBsaW5lCi0JbWNyCXAxNSwgMSwgcjAsIGM3LCBjMTEsIDEJQCBDbGVhbiBMMiBEIGNhY2hlIGxpbmUKLQltY3IJcDE1LCAxLCByMCwgYzcsIGM3LCAxCUAgSW52YWxpZGF0ZSBMMiBEIGNhY2hlIGxpbmUKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuL2ludmFsaWRhdGUgTDEgRCBsaW5lCisJbWNyCXAxNSwgMSwgcjAsIGM3LCBjMTEsIDEJCUAgY2xlYW4gTDIgbGluZQorCW1jcglwMTUsIDEsIHIwLCBjNywgYzcsIDEJCUAgaW52YWxpZGF0ZSBMMiBsaW5lCiAJYWRkCXIwLCByMCwgI0NBQ0hFTElORVNJWkUKIAljbXAJcjAsIHIxCiAJYmxvCTFiCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgQnVmZmVyCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCiAJbW92CXBjLCBscgogCiBFTlRSWSh4c2MzX2NhY2hlX2ZucykKQEAgLTMyOCw3ICszMjYsNyBAQAogCS5sb25nCXhzYzNfZG1hX2ZsdXNoX3JhbmdlCiAKIEVOVFJZKGNwdV94c2MzX2RjYWNoZV9jbGVhbl9hcmVhKQotMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gTDEgRCBsaW5lCiAJYWRkCXIwLCByMCwgI0NBQ0hFTElORVNJWkUKIAlzdWJzCXIxLCByMSwgI0NBQ0hFTElORVNJWkUKIAliaGkJMWIKQEAgLTM0NiwxNCArMzQ0LDE0IEBACiAJLmFsaWduCTUKIEVOVFJZKGNwdV94c2MzX3N3aXRjaF9tbSkKIAljbGVhbl9kX2NhY2hlIHIxLCByMgotCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgSW52YWxpZGF0ZSBJIGNhY2hlICYgQlRCCi0JbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgRHJhaW4gV3JpdGUgQnVmZmVyCi0JbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgNAkJQCBQcmVmZXRjaCBGbHVzaAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBMMSBJIGNhY2hlIGFuZCBCVEIKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkYXRhIHdyaXRlIGJhcnJpZXIKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCA0CQlAIHByZWZldGNoIGZsdXNoCiAjaWZkZWYgTDJfQ0FDSEVfRU5BQkxFCiAJb3JyCXIwLCByMCwgIzB4MTgJCQlAIGNhY2hlIHRoZSBwYWdlIHRhYmxlIGluIEwyCiAjZW5kaWYKIAltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCi0JbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSBhbmQgRCBUTEJzCiAJY3B3YWl0X3JldCBsciwgaXAKIAogLyoKQEAgLTM2NiwzNCArMzY0LDM0IEBACiBFTlRSWShjcHVfeHNjM19zZXRfcHRlX2V4dCkKIAlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCiAKLQliaWMJcjIsIHIxLCAjMHhmZjAJCQlAIEtlZXAgQywgQiBiaXRzCisJYmljCXIyLCByMSwgIzB4ZmYwCQkJQCBrZWVwIEMsIEIgYml0cwogCW9ycglyMiwgcjIsICNQVEVfVFlQRV9FWFQJCUAgZXh0ZW5kZWQgcGFnZQotCXRzdAlyMSwgI0xfUFRFX1NIQVJFRAkJQCBTaGFyZWQ/CisJdHN0CXIxLCAjTF9QVEVfU0hBUkVECQlAIHNoYXJlZD8KIAlvcnJuZQlyMiwgcjIsICMweDIwMAogCiAJZW9yCXIzLCByMSwgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkKIAotCXRzdAlyMywgI0xfUFRFX1VTRVIJCQlAIFVzZXI/CisJdHN0CXIzLCAjTF9QVEVfVVNFUgkJCUAgdXNlcj8KIAlvcnJuZQlyMiwgcjIsICNQVEVfRVhUX0FQX1VST19TUlcJQCB5ZXMgLT4gdXNlciByL28sIHN5c3RlbSByL3cKIAotCXRzdAlyMywgI0xfUFRFX1dSSVRFIHwgTF9QVEVfRElSVFkJQCBXcml0ZSBhbmQgRGlydHk/CisJdHN0CXIzLCAjTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQlAIHdyaXRlIGFuZCBkaXJ0eT8KIAlvcnJlcQlyMiwgcjIsICNQVEVfRVhUX0FQX1VOT19TUlcJQCB5ZXMgLT4gdXNlciBuL2EsIHN5c3RlbSByL3cKIAkJCQkJCUAgY29tYmluZWQgd2l0aCB1c2VyIC0+IHVzZXIgci93CiAKICNpZiBMMl9DQUNIRV9FTkFCTEUKLQlAIElmIGl0cyBjYWNoZWFibGUgaXQgbmVlZHMgdG8gYmUgaW4gTDIgYWxzby4KKwlAIElmIGl0J3MgY2FjaGVhYmxlLCBpdCBuZWVkcyB0byBiZSBpbiBMMiBhbHNvLgogCWVvcglpcCwgcjEsICNMX1BURV9DQUNIRUFCTEUKIAl0c3QJaXAsICNMX1BURV9DQUNIRUFCTEUKIAlvcnJlcQlyMiwgcjIsICNQVEVfRVhUX1RFWCgweDUpCiAjZW5kaWYKIAotCXRzdAlyMywgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORwlAIFByZXNlbnQgYW5kIFlvdW5nPworCXRzdAlyMywgI0xfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORwlAIHByZXNlbnQgYW5kIHlvdW5nPwogCW1vdm5lCXIyLCAjMAkJCQlAIG5vIC0+IGZhdWx0CiAKIAlzdHIJcjIsIFtyMF0JCQlAIGhhcmR3YXJlIHZlcnNpb24KIAltb3YJaXAsICMwCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgQ2xlYW4gRCBjYWNoZSBsaW5lIG1jcgotCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIERyYWluIFdyaXRlIEJ1ZmZlcgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEwxIEQgbGluZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRhdGEgd3JpdGUgYmFycmllcgogCW1vdglwYywgbHIKIAogCS5sdG9yZwpAQCAtNDA2LDE3ICs0MDQsMTggQEAKIF9feHNjM19zZXR1cDoKIAltb3YJcjAsICNQU1JfRl9CSVR8UFNSX0lfQklUfFNWQ19NT0RFCiAJbXNyCWNwc3JfYywgcjAKLQltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgSSwgRCBjYWNoZXMgJiBCVEIKLQltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBEcmFpbiBXcml0ZSBCdWZmZXIKLQltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCA0CQlAIFByZWZldGNoIEZsdXNoCi0JbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksIEQgVExCcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBMMSBjYWNoZXMgYW5kIEJUQgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRhdGEgd3JpdGUgYmFycmllcgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDQJCUAgcHJlZmV0Y2ggZmx1c2gKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSBhbmQgRCBUTEJzCiAjaWYgTDJfQ0FDSEVfRU5BQkxFCiAJb3JyCXI0LCByNCwgIzB4MTgJCQlAIGNhY2hlIHRoZSBwYWdlIHRhYmxlIGluIEwyCiAjZW5kaWYKIAltY3IJcDE1LCAwLCByNCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCi0JbW92CXIwLCAjMQkJCQlAIEFsbG93IGFjY2VzcyB0byBDUDAgYW5kIENQMTMKLQlvcnIJcjAsIHIwLCAjMSA8PCAxMwkJQCBJdHMgdW5kZWZpbmVkIHdoZXRoZXIgdGhpcwotCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMxLCAwCQlAIGFmZmVjdHMgVVNSIG9yIFNWQyBtb2RlcworCisJbW92CXIwLCAjMAkJCQlAIGRvbid0IGFsbG93IENQIGFjY2VzcworCW1jcglwMTUsIDAsIHIwLCBjMTUsIGMxLCAwCQlAIHdyaXRlIENQIGFjY2VzcyByZWdpc3RlcgorCiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMQkJQCBnZXQgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnCiAJYW5kCXIwLCByMCwgIzIJCQlAIHByZXNlcnZlIGJpdCBQIGJpdCBzZXR0aW5nCiAjaWYgTDJfQ0FDSEVfRU5BQkxFCkBAIC00MjcsOSArNDI2LDkgQEAKIAlhZHIJcjUsIHhzYzNfY3J2YWwKIAlsZG1pYQlyNSwge3I1LCByNn0KIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyCi0JYmljCXIwLCByMCwgcjUJCQlAIC4uLi4gLi4uLiAuLi4uIC4uQS4KLQlvcnIJcjAsIHIwLCByNgkJCUAgLi4uLiAuLi4uIC4uLi4gLkMuTQotCW9ycglyMCwgcjAsICMweDAwMDAwODAwCQlAIC4uVkkgWi4uUyAuLi4uIC4uLi4KKwliaWMJcjAsIHIwLCByNQkJCUAgLi5WLiAuLlIuIC4uLi4gLi5BLgorCW9ycglyMCwgcjAsIHI2CQkJQCAuLlZJIFouLlMgLi4uLiAuQy5NIChtbXUpCisJCQkJCQlAIC4uLkkgWi4uUyAuLi4uIC4uLi4gKHVjKQogI2lmIEwyX0NBQ0hFX0VOQUJMRQogCW9yciAJcjAsIHIwLCAjMHgwNDAwMDAwMAkJQCBMMiBlbmFibGUKICNlbmRpZgpAQCAtNDM5LDcgKzQzOCw3IEBACiAKIAkudHlwZQl4c2MzX2NydmFsLCAjb2JqZWN0CiB4c2MzX2NydmFsOgotCWNydmFsCWNsZWFyPTB4MDQwMDNiMDIsIG1tdXNldD0weDAwMDAzMTA1LCB1Y3NldD0weDAwMDAxMTAwCisJY3J2YWwJY2xlYXI9MHgwNDAwMjIwMiwgbW11c2V0PTB4MDAwMDM5MDUsIHVjc2V0PTB4MDAwMDE5MDAKIAogCV9fSU5JVERBVEEKIApAQCAtNDc0LDcgKzQ3Myw3IEBACiAKIAkudHlwZQljcHVfeHNjM19uYW1lLCAjb2JqZWN0CiBjcHVfeHNjM19uYW1lOgotCS5hc2NpegkiWFNjYWxlLUNvcmUzIgorCS5hc2NpegkiWFNjYWxlLVYzIGJhc2VkIHByb2Nlc3NvciIKIAkuc2l6ZQljcHVfeHNjM19uYW1lLCAuIC0gY3B1X3hzYzNfbmFtZQogCiAJLmFsaWduCkBAIC00OTAsNyArNDg5LDcgQEAKIAkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKIAkJUE1EX1NFQ1RfQVBfUkVBRAotCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkubG9uZwlQTURfVFlQRV9TRUNUIHwgXAogCQlQTURfU0VDVF9BUF9XUklURSB8IFwKIAkJUE1EX1NFQ1RfQVBfUkVBRAogCWIJX194c2MzX3NldHVwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS90bGItdjYuUyBiL2FyY2gvYXJtL21tL3RsYi12Ni5TCmluZGV4IGZkNmFkZGUuLjIwZjg0YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3RsYi12Ni5TCisrKyBiL2FyY2gvYXJtL21tL3RsYi12Ni5TCkBAIC01Myw2ICs1Myw4IEBACiAJYWRkCXIwLCByMCwgI1BBR0VfU1oKIAljbXAJcjAsIHIxCiAJYmxvCTFiCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgNgkJQCBmbHVzaCBCVEFDL0JUQgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRhdGEgc3luY2hyb25pemF0aW9uIGJhcnJpZXIKIAltb3YJcGMsIGxyCiAKIC8qCkBAIC04MCw3ICs4Miw5IEBACiAJYWRkCXIwLCByMCwgI1BBR0VfU1oKIAljbXAJcjAsIHIxCiAJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjIsIGM3LCBjNSwgNgkJQCBmbHVzaCBCVEFDL0JUQgogCW1jcglwMTUsIDAsIHIyLCBjNywgYzEwLCA0CQlAIGRhdGEgc3luY2hyb25pemF0aW9uIGJhcnJpZXIKKwltY3IJcDE1LCAwLCByMiwgYzcsIGM1LCA0CQlAIHByZWZldGNoIGZsdXNoCiAJbW92CXBjLCBscgogCiAJLnNlY3Rpb24gIi50ZXh0LmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL0tjb25maWcgYi9hcmNoL2FybS9vcHJvZmlsZS9LY29uZmlnCmluZGV4IDE5ZDM3NzMuLmFmZDkzYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvS2NvbmZpZwpAQCAtMTksNSArMTksMjQgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAoraWYgT1BST0ZJTEUKKworY29uZmlnIE9QUk9GSUxFX0FSTVY2CisJYm9vbAorCWRlcGVuZHMgb24gQ1BVX1Y2ICYmICFTTVAKKwlkZWZhdWx0IHkKKwlzZWxlY3QgT1BST0ZJTEVfQVJNMTFfQ09SRQorCitjb25maWcgT1BST0ZJTEVfTVBDT1JFCisJYm9vbAorCWRlcGVuZHMgb24gQ1BVX1Y2ICYmIFNNUAorCWRlZmF1bHQgeQorCXNlbGVjdCBPUFJPRklMRV9BUk0xMV9DT1JFCisKK2NvbmZpZyBPUFJPRklMRV9BUk0xMV9DT1JFCisJYm9vbAorCitlbmRpZgorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL01ha2VmaWxlIGIvYXJjaC9hcm0vb3Byb2ZpbGUvTWFrZWZpbGUKaW5kZXggNmE5NGU1NC4uZTYxZDBjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvTWFrZWZpbGUKQEAgLTgsNCArOCw2IEBACiAKIG9wcm9maWxlLXkJCQkJOj0gJChEUklWRVJfT0JKUykgY29tbW9uLm8gYmFja3RyYWNlLm8KIG9wcm9maWxlLSQoQ09ORklHX0NQVV9YU0NBTEUpCQkrPSBvcF9tb2RlbF94c2NhbGUubwotCitvcHJvZmlsZS0kKENPTkZJR19PUFJPRklMRV9BUk0xMV9DT1JFKQkrPSBvcF9tb2RlbF9hcm0xMV9jb3JlLm8KK29wcm9maWxlLSQoQ09ORklHX09QUk9GSUxFX0FSTVY2KQkrPSBvcF9tb2RlbF92Ni5vCitvcHJvZmlsZS0kKENPTkZJR19PUFJPRklMRV9NUENPUkUpCSs9IG9wX21vZGVsX21wY29yZS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYyBiL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jCmluZGV4IDZmODMzMzUuLjBhMDA3YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jCkBAIC0xMzUsNiArMTM1LDE0IEBACiAJc3BlYyA9ICZvcF94c2NhbGVfc3BlYzsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX09QUk9GSUxFX0FSTVY2CisJc3BlYyA9ICZvcF9hcm12Nl9zcGVjOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfT1BST0ZJTEVfTVBDT1JFCisJc3BlYyA9ICZvcF9tcGNvcmVfc3BlYzsKKyNlbmRpZgorCiAJaWYgKHNwZWMpIHsKIAkJcmV0ID0gc3BlYy0+aW5pdCgpOwogCQlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX2FybV9tb2RlbC5oIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfYXJtX21vZGVsLmgKaW5kZXggMzhjNmFkMS4uNDg5OWM2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfYXJtX21vZGVsLmgKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfYXJtX21vZGVsLmgKQEAgLTI0LDYgKzI0LDkgQEAKIGV4dGVybiBzdHJ1Y3Qgb3BfYXJtX21vZGVsX3NwZWMgb3BfeHNjYWxlX3NwZWM7CiAjZW5kaWYKIAorZXh0ZXJuIHN0cnVjdCBvcF9hcm1fbW9kZWxfc3BlYyBvcF9hcm12Nl9zcGVjOworZXh0ZXJuIHN0cnVjdCBvcF9hcm1fbW9kZWxfc3BlYyBvcF9tcGNvcmVfc3BlYzsKKwogZXh0ZXJuIHZvaWQgYXJtX2JhY2t0cmFjZShzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsIHVuc2lnbmVkIGludCBkZXB0aCk7CiAKIGV4dGVybiBpbnQgX19pbml0IG9wX2FybV9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMsIHN0cnVjdCBvcF9hcm1fbW9kZWxfc3BlYyAqc3BlYyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4MDc1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoqCisgKiBAZmlsZSBvcF9tb2RlbF9hcm0xMV9jb3JlLmMKKyAqIEFSTTExIEV2ZW50IE1vbml0b3IgRHJpdmVyCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IEFSTSBTTVAgRGV2ZWxvcG1lbnQgVGVhbQorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlICJvcF9jb3VudGVyLmgiCisjaW5jbHVkZSAib3BfYXJtX21vZGVsLmgiCisjaW5jbHVkZSAib3BfbW9kZWxfYXJtMTFfY29yZS5oIgorCisvKgorICogQVJNMTEgUE1VIHN1cHBvcnQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFybTExX3dyaXRlX3BtbmModTMyIHZhbCkKK3sKKwkvKiB1cHBlciA0Yml0cyBhbmQgNywgMTEgYXJlIHdyaXRlLWFzLTAgKi8KKwl2YWwgJj0gMHgwZmZmZjc3ZjsKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMCIgOiA6ICJyIiAodmFsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGFybTExX3JlYWRfcG1uYyh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDAiIDogIj1yIiAodmFsKSk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQgYXJtMTFfcmVzZXRfY291bnRlcih1bnNpZ25lZCBpbnQgY250KQoreworCXUzMiB2YWwgPSAtKHUzMiljb3VudGVyX2NvbmZpZ1tDUFVfQ09VTlRFUihzbXBfcHJvY2Vzc29yX2lkKCksIGNudCldLmNvdW50OworCXN3aXRjaCAoY250KSB7CisJY2FzZSBDQ05UOgorCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMSIgOiA6ICJyIiAodmFsKSk7CisJCWJyZWFrOworCisJY2FzZSBQTU4wOgorCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMiIgOiA6ICJyIiAodmFsKSk7CisJCWJyZWFrOworCisJY2FzZSBQTU4xOgorCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMyIgOiA6ICJyIiAodmFsKSk7CisJCWJyZWFrOworCX0KK30KKworaW50IGFybTExX3NldHVwX3BtdSh2b2lkKQoreworCXVuc2lnbmVkIGludCBjbnQ7CisJdTMyIHBtbmM7CisKKwlpZiAoYXJtMTFfcmVhZF9wbW5jKCkgJiBQTUNSX0UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogQ1BVJXUgUE1VIHN0aWxsIGVuYWJsZWQgd2hlbiBzZXR1cCBuZXcgZXZlbnQgY291bnRlci5cbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogaW5pdGlhbGl6ZSBQTU5DLCByZXNldCBvdmVyZmxvdywgRCBiaXQsIEMgYml0IGFuZCBQIGJpdC4gKi8KKwlhcm0xMV93cml0ZV9wbW5jKFBNQ1JfT0ZMX1BNTjAgfCBQTUNSX09GTF9QTU4xIHwgUE1DUl9PRkxfQ0NOVCB8CisJCQkgUE1DUl9DIHwgUE1DUl9QKTsKKworCWZvciAocG1uYyA9IDAsIGNudCA9IFBNTjA7IGNudCA8PSBDQ05UOyBjbnQrKykgeworCQl1bnNpZ25lZCBsb25nIGV2ZW50OworCisJCWlmICghY291bnRlcl9jb25maWdbQ1BVX0NPVU5URVIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjbnQpXS5lbmFibGVkKQorCQkJY29udGludWU7CisKKwkJZXZlbnQgPSBjb3VudGVyX2NvbmZpZ1tDUFVfQ09VTlRFUihzbXBfcHJvY2Vzc29yX2lkKCksIGNudCldLmV2ZW50ICYgMjU1OworCisJCS8qCisJCSAqIFNldCBldmVudCAoaWYgZGVzdGluZWQgZm9yIFBNTnggY291bnRlcnMpCisJCSAqLworCQlpZiAoY250ID09IFBNTjApIHsKKwkJCXBtbmMgfD0gZXZlbnQgPDwgMjA7CisJCX0gZWxzZSBpZiAoY250ID09IFBNTjEpIHsKKwkJCXBtbmMgfD0gZXZlbnQgPDwgMTI7CisJCX0KKworCQkvKgorCQkgKiBXZSBkb24ndCBuZWVkIHRvIHNldCB0aGUgZXZlbnQgaWYgaXQncyBhIGN5Y2xlIGNvdW50CisJCSAqIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIHRoaXMgY291bnRlcgorCQkgKi8KKwkJcG1uYyB8PSBQTUNSX0lFTl9QTU4wIDw8IGNudDsKKwkJYXJtMTFfcmVzZXRfY291bnRlcihjbnQpOworCX0KKwlhcm0xMV93cml0ZV9wbW5jKHBtbmMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBhcm0xMV9zdGFydF9wbXUodm9pZCkKK3sKKwlhcm0xMV93cml0ZV9wbW5jKGFybTExX3JlYWRfcG1uYygpIHwgUE1DUl9FKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGFybTExX3N0b3BfcG11KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNudDsKKworCWFybTExX3dyaXRlX3BtbmMoYXJtMTFfcmVhZF9wbW5jKCkgJiB+UE1DUl9FKTsKKworCWZvciAoY250ID0gUE1OMDsgY250IDw9IENDTlQ7IGNudCsrKQorCQlhcm0xMV9yZXNldF9jb3VudGVyKGNudCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENQVSBjb3VudGVycycgSVJRIGhhbmRsZXIgKG9uZSBJUlEgcGVyIENQVSkKKyAqLworc3RhdGljIGlycXJldHVybl90IGFybTExX3BtdV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7CisJdW5zaWduZWQgaW50IGNudDsKKwl1MzIgcG1uYzsKKworCXBtbmMgPSBhcm0xMV9yZWFkX3BtbmMoKTsKKworCWZvciAoY250ID0gUE1OMDsgY250IDw9IENDTlQ7IGNudCsrKSB7CisJCWlmICgocG1uYyAmIChQTUNSX09GTF9QTU4wIDw8IGNudCkpICYmIChwbW5jICYgKFBNQ1JfSUVOX1BNTjAgPDwgY250KSkpIHsKKwkJCWFybTExX3Jlc2V0X2NvdW50ZXIoY250KTsKKwkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgQ1BVX0NPVU5URVIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjbnQpKTsKKwkJfQorCX0KKwkvKiBDbGVhciBjb3VudGVyIGZsYWcocykgKi8KKwlhcm0xMV93cml0ZV9wbW5jKHBtbmMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhpbnQgKmlycXMsIGludCBucikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCWZvcihpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxc1tpXSwgYXJtMTFfcG11X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgIkNQMTUgUE1VIiwgTlVMTCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogdW5hYmxlIHRvIHJlcXVlc3QgSVJRJXUgZm9yIE1QQ09SRS1FTVxuIiwKKwkJCSAgICAgICBpcnFzW2ldKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgIT0gbnIpCisJCXdoaWxlIChpLS0gIT0gMCkKKwkJCWZyZWVfaXJxKGlycXNbaV0sIE5VTEwpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMoaW50ICppcnFzLCBpbnQgbnIpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJZnJlZV9pcnEoaXJxc1tpXSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmggYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4NTM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuaApAQCAtMCwwICsxLDQ1IEBACisvKioKKyAqIEBmaWxlIG9wX21vZGVsX2FybTExX2NvcmUuaAorICogQVJNMTEgRXZlbnQgTW9uaXRvciBEcml2ZXIKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDQgQVJNIFNNUCBEZXZlbG9wbWVudCBUZWFtCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAwLTIwMDQgRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBtdmlzdGEuY29tPgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMC0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IERhdmUgSmlhbmcgPGRhdmUuamlhbmdAaW50ZWwuY29tPgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGFybS5saW51eC5vcmcudWs+CisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IE9wcm9maWxlIEF1dGhvcnMKKyAqCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgWndhbmUgTXdhaWthbWJvCisgKi8KKyNpZm5kZWYgT1BfTU9ERUxfQVJNMTFfQ09SRV9ICisjZGVmaW5lIE9QX01PREVMX0FSTTExX0NPUkVfSAorCisvKgorICogUGVyLUNQVSBQTUNSCisgKi8KKyNkZWZpbmUgUE1DUl9FCQkoMSA8PCAwKQkvKiBFbmFibGUgKi8KKyNkZWZpbmUgUE1DUl9QCQkoMSA8PCAxKQkvKiBDb3VudCByZXNldCAqLworI2RlZmluZSBQTUNSX0MJCSgxIDw8IDIpCS8qIEN5Y2xlIGNvdW50ZXIgcmVzZXQgKi8KKyNkZWZpbmUgUE1DUl9ECQkoMSA8PCAzKQkvKiBDeWNsZSBjb3VudGVyIGNvdW50cyBldmVyeSA2NHRoIGNwdSBjeWNsZSAqLworI2RlZmluZSBQTUNSX0lFTl9QTU4wCSgxIDw8IDQpCS8qIEludGVycnVwdCBlbmFibGUgY291bnQgcmVnIDAgKi8KKyNkZWZpbmUgUE1DUl9JRU5fUE1OMQkoMSA8PCA1KQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNvdW50IHJlZyAxICovCisjZGVmaW5lIFBNQ1JfSUVOX0NDTlQJKDEgPDwgNikJLyogSW50ZXJydXB0IGVuYWJsZSBjeWNsZSBjb3VudGVyICovCisjZGVmaW5lIFBNQ1JfT0ZMX1BNTjAJKDEgPDwgOCkJLyogQ291bnQgcmVnIDAgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgUE1DUl9PRkxfUE1OMQkoMSA8PCA5KQkvKiBDb3VudCByZWcgMSBvdmVyZmxvdyAqLworI2RlZmluZSBQTUNSX09GTF9DQ05UCSgxIDw8IDEwKQkvKiBDeWNsZSBjb3VudGVyIG92ZXJmbG93ICovCisKKyNkZWZpbmUgUE1OMCAwCisjZGVmaW5lIFBNTjEgMQorI2RlZmluZSBDQ05UIDIKKworI2RlZmluZSBDUFVfQ09VTlRFUihjcHUsIGNvdW50ZXIpCSgoY3B1KSAqIDMgKyAoY291bnRlcikpCisKK2ludCBhcm0xMV9zZXR1cF9wbXUodm9pZCk7CitpbnQgYXJtMTFfc3RhcnRfcG11KHZvaWQpOworaW50IGFybTExX3N0b3BfcG11KHZvaWQpOworaW50IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhpbnQgKiwgaW50KTsKK3ZvaWQgYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKGludCAqLCBpbnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX21wY29yZS5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfbXBjb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4NTAwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX21wY29yZS5jCkBAIC0wLDAgKzEsMjk2IEBACisvKioKKyAqIEBmaWxlIG9wX21vZGVsX21wY29yZS5jCisgKiBNUENPUkUgRXZlbnQgTW9uaXRvciBEcml2ZXIKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDQgQVJNIFNNUCBEZXZlbG9wbWVudCBUZWFtCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAwLTIwMDQgRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBtdmlzdGEuY29tPgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMC0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IERhdmUgSmlhbmcgPGRhdmUuamlhbmdAaW50ZWwuY29tPgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGFybS5saW51eC5vcmcudWs+CisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IE9wcm9maWxlIEF1dGhvcnMKKyAqCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgWndhbmUgTXdhaWthbWJvCisgKgorICogIENvdW50ZXJzOgorICogICAgMDogUE1OMCBvbiBDUFUwLCBwZXItY3B1IGNvbmZpZ3VyYWJsZSBldmVudCBjb3VudGVyCisgKiAgICAxOiBQTU4xIG9uIENQVTAsIHBlci1jcHUgY29uZmlndXJhYmxlIGV2ZW50IGNvdW50ZXIKKyAqICAgIDI6IENDTlQgb24gQ1BVMAorICogICAgMzogUE1OMCBvbiBDUFUxCisgKiAgICA0OiBQTU4xIG9uIENQVTEKKyAqICAgIDU6IENDTlQgb24gQ1BVMQorICogICAgNjogUE1OMCBvbiBDUFUxCisgKiAgICA3OiBQTU4xIG9uIENQVTEKKyAqICAgIDg6IENDTlQgb24gQ1BVMQorICogICAgOTogUE1OMCBvbiBDUFUxCisgKiAgIDEwOiBQTU4xIG9uIENQVTEKKyAqICAgMTE6IENDTlQgb24gQ1BVMQorICogICAxMi0xOTogY29uZmlndXJhYmxlIFNDVSBldmVudCBjb3VudGVycworICovCisKKy8qICNkZWZpbmUgREVCVUcgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKKyNpbmNsdWRlICJvcF9hcm1fbW9kZWwuaCIKKyNpbmNsdWRlICJvcF9tb2RlbF9hcm0xMV9jb3JlLmgiCisjaW5jbHVkZSAib3BfbW9kZWxfbXBjb3JlLmgiCisKKy8qCisgKiBNUENvcmUgU0NVIGV2ZW50IG1vbml0b3Igc3VwcG9ydAorICovCisjZGVmaW5lIFNDVV9FVkVOVE1PTklUT1JTX1ZBX0JBU0UgX19pb19hZGRyZXNzKFJFQUxWSUVXX01QQ09SRV9TQ1VfQkFTRSArIDB4MTApCisKKy8qCisgKiBCaXRtYXNrIG9mIHVzZWQgU0NVIGNvdW50ZXJzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2N1X2VtX3VzZWQ7CisKKy8qCisgKiAyIGhlbHBlciBmbnMgdGFrZSBhIGNvdW50ZXIgbnVtYmVyIGZyb20gMC03IChub3QgdGhlIHVzZXJzcGFjZS12aXNpYmxlIGNvdW50ZXIgbnVtYmVyKQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2N1X3Jlc2V0X2NvdW50ZXIoc3RydWN0IGV2ZW50bW9uaXRvciBfX2lvbWVtICplbWMsIHVuc2lnbmVkIGludCBuKQoreworCXdyaXRlbCgtKHUzMiljb3VudGVyX2NvbmZpZ1tTQ1VfQ09VTlRFUihuKV0uY291bnQsICZlbWMtPk1DW25dKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNjdV9zZXRfZXZlbnQoc3RydWN0IGV2ZW50bW9uaXRvciBfX2lvbWVtICplbWMsIHVuc2lnbmVkIGludCBuLCB1MzIgZXZlbnQpCit7CisJZXZlbnQgJj0gMHhmZjsKKwl3cml0ZWIoZXZlbnQsICZlbWMtPk1DRUJbbl0pOworfQorCisvKgorICogU0NVIGNvdW50ZXJzJyBJUlEgaGFuZGxlciAob25lIElSUSBwZXIgY291bnRlciA9PiAyIElSUXMgcGVyIENQVSkKKyAqLworc3RhdGljIGlycXJldHVybl90IHNjdV9lbV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBldmVudG1vbml0b3IgX19pb21lbSAqZW1jID0gU0NVX0VWRU5UTU9OSVRPUlNfVkFfQkFTRTsKKwl1bnNpZ25lZCBpbnQgY250OworCisJY250ID0gaXJxIC0gSVJRX1BNVV9TQ1UwOworCW9wcm9maWxlX2FkZF9zYW1wbGUoZ2V0X2lycV9yZWdzKCksIFNDVV9DT1VOVEVSKGNudCkpOworCXNjdV9yZXNldF9jb3VudGVyKGVtYywgY250KTsKKworCS8qIENsZWFyIG92ZXJmbG93IGZsYWcgZm9yIHRoaXMgY291bnRlciAqLworCXdyaXRlbCgxIDw8IChjbnQgKyAxNiksICZlbWMtPlBNQ1IpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBDb25maWd1cmUganVzdCB0aGUgU0NVIGNvdW50ZXJzIHRoYXQgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCAqLworc3RhdGljIHZvaWQgc2N1X3NldHVwKHZvaWQpCit7CisJc3RydWN0IGV2ZW50bW9uaXRvciBfX2lvbWVtICplbWMgPSBTQ1VfRVZFTlRNT05JVE9SU19WQV9CQVNFOworCXVuc2lnbmVkIGludCBpOworCisJc2N1X2VtX3VzZWQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9TQ1VfQ09VTlRFUlM7IGkrKykgeworCQlpZiAoY291bnRlcl9jb25maWdbU0NVX0NPVU5URVIoaSldLmVuYWJsZWQgJiYKKwkJICAgIGNvdW50ZXJfY29uZmlnW1NDVV9DT1VOVEVSKGkpXS5ldmVudCkgeworCQkJc2N1X3NldF9ldmVudChlbWMsIGksIDApOyAvKiBkaXNhYmxlIGNvdW50ZXIgZm9yIG5vdyAqLworCQkJc2N1X2VtX3VzZWQgfD0gMSA8PCBpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHNjdV9zdGFydCh2b2lkKQoreworCXN0cnVjdCBldmVudG1vbml0b3IgX19pb21lbSAqZW1jID0gU0NVX0VWRU5UTU9OSVRPUlNfVkFfQkFTRTsKKwl1bnNpZ25lZCBpbnQgdGVtcCwgaTsKKwl1bnNpZ25lZCBsb25nIGV2ZW50OworCWludCByZXQgPSAwOworCisJLyoKKwkgKiByZXF1ZXN0IHRoZSBTQ1UgY291bnRlciBpbnRlcnJ1cHRzIHRoYXQgd2UgbmVlZAorCSAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fU0NVX0NPVU5URVJTOyBpKyspIHsKKwkJaWYgKHNjdV9lbV91c2VkICYgKDEgPDwgaSkpIHsKKwkJCXJldCA9IHJlcXVlc3RfaXJxKElSUV9QTVVfU0NVMCArIGksIHNjdV9lbV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJTQ1UgUE1VIiwgTlVMTCk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogdW5hYmxlIHRvIHJlcXVlc3QgSVJRJXUgZm9yIFNDVSBFdmVudCBNb25pdG9yXG4iLAorCQkJCSAgICAgICBJUlFfUE1VX1NDVTAgKyBpKTsKKwkJCQlnb3RvIGVycl9mcmVlX3NjdTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogY2xlYXIgb3ZlcmZsb3cgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIGFsbCB1c2VkIGNvdW50ZXJzCisJICovCisJdGVtcCA9IHJlYWRsKCZlbWMtPlBNQ1IpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fU0NVX0NPVU5URVJTOyBpKyspIHsKKwkJaWYgKHNjdV9lbV91c2VkICYgKDEgPDwgaSkpIHsKKwkJCXNjdV9yZXNldF9jb3VudGVyKGVtYywgaSk7CisJCQlldmVudCA9IGNvdW50ZXJfY29uZmlnW1NDVV9DT1VOVEVSKGkpXS5ldmVudDsKKwkJCXNjdV9zZXRfZXZlbnQoZW1jLCBpLCBldmVudCk7CisKKwkJCS8qIGNsZWFyIG92ZXJmbG93L2ludGVycnVwdCAqLworCQkJdGVtcCB8PSAxIDw8IChpICsgMTYpOworCQkJLyogZW5hYmxlIGludGVycnVwdCovCisJCQl0ZW1wIHw9IDEgPDwgKGkgKyA4KTsKKwkJfQorCX0KKworCS8qIEVuYWJsZSBhbGwgOCBjb3VudGVycyAqLworCXRlbXAgfD0gUE1DUl9FOworCXdyaXRlbCh0ZW1wLCAmZW1jLT5QTUNSKTsKKworCXJldHVybiAwOworCisgZXJyX2ZyZWVfc2N1OgorCXdoaWxlIChpLS0pCisJCWZyZWVfaXJxKElSUV9QTVVfU0NVMCArIGksIE5VTEwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNjdV9zdG9wKHZvaWQpCit7CisJc3RydWN0IGV2ZW50bW9uaXRvciBfX2lvbWVtICplbWMgPSBTQ1VfRVZFTlRNT05JVE9SU19WQV9CQVNFOworCXVuc2lnbmVkIGludCB0ZW1wLCBpOworCisJLyogRGlzYWJsZSBjb3VudGVyIGludGVycnVwdHMgKi8KKwkvKiBEb24ndCBkaXNhYmxlIGFsbCA4IGNvdW50ZXJzICh3aXRoIHRoZSBFIGJpdCkgYXMgdGhleSBtYXkgYmUgaW4gdXNlICovCisJdGVtcCA9IHJlYWRsKCZlbWMtPlBNQ1IpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fU0NVX0NPVU5URVJTOyBpKyspIHsKKwkJaWYgKHNjdV9lbV91c2VkICYgKDEgPDwgaSkpCisJCQl0ZW1wICY9IH4oMSA8PCAoaSArIDgpKTsKKwl9CisJd3JpdGVsKHRlbXAsICZlbWMtPlBNQ1IpOworCisJLyogRnJlZSBjb3VudGVyIGludGVycnVwdHMgYW5kIHJlc2V0IGNvdW50ZXJzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9TQ1VfQ09VTlRFUlM7IGkrKykgeworCQlpZiAoc2N1X2VtX3VzZWQgJiAoMSA8PCBpKSkgeworCQkJc2N1X3Jlc2V0X2NvdW50ZXIoZW1jLCBpKTsKKwkJCWZyZWVfaXJxKElSUV9QTVVfU0NVMCArIGksIE5VTEwpOworCQl9CisJfQorfQorCitzdHJ1Y3QgZW1fZnVuY3Rpb25fZGF0YSB7CisJaW50ICgqZm4pKHZvaWQpOworCWludCByZXQ7Cit9OworCitzdGF0aWMgdm9pZCBlbV9mdW5jKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGVtX2Z1bmN0aW9uX2RhdGEgKmQgPSBkYXRhOworCWludCByZXQgPSBkLT5mbigpOworCWlmIChyZXQpCisJCWQtPnJldCA9IHJldDsKK30KKworc3RhdGljIGludCBlbV9jYWxsX2Z1bmN0aW9uKGludCAoKmZuKSh2b2lkKSkKK3sKKwlzdHJ1Y3QgZW1fZnVuY3Rpb25fZGF0YSBkYXRhOworCisJZGF0YS5mbiA9IGZuOworCWRhdGEucmV0ID0gMDsKKworCXNtcF9jYWxsX2Z1bmN0aW9uKGVtX2Z1bmMsICZkYXRhLCAxLCAxKTsKKwllbV9mdW5jKCZkYXRhKTsKKworCXJldHVybiBkYXRhLnJldDsKK30KKworLyoKKyAqIEdsdWUgdG8gc3RpY2sgdGhlIGluZGl2aWR1YWwgQVJNMTEgUE1VcyBhbmQgdGhlIFNDVQorICogaW50byB0aGUgb3Byb2ZpbGUgZnJhbWV3b3JrLgorICovCitzdGF0aWMgaW50IGVtX3NldHVwX2N0cnModm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogQ29uZmlndXJlIENQVSBjb3VudGVycyBieSBjcm9zcy1jYWxsaW5nIHRvIHRoZSBvdGhlciBDUFVzICovCisJcmV0ID0gZW1fY2FsbF9mdW5jdGlvbihhcm0xMV9zZXR1cF9wbXUpOworCWlmIChyZXQgPT0gMCkKKwkJc2N1X3NldHVwKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcm0xMV9pcnFzW10gPSB7CisJWzBdCT0gSVJRX1BNVV9DUFUwLAorCVsxXQk9IElSUV9QTVVfQ1BVMSwKKwlbMl0JPSBJUlFfUE1VX0NQVTIsCisJWzNdCT0gSVJRX1BNVV9DUFUzCit9OworCitzdGF0aWMgaW50IGVtX3N0YXJ0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhhcm0xMV9pcnFzLCBBUlJBWV9TSVpFKGFybTExX2lycXMpKTsKKwlpZiAocmV0ID09IDApIHsKKwkJZW1fY2FsbF9mdW5jdGlvbihhcm0xMV9zdGFydF9wbXUpOworCisJCXJldCA9IHNjdV9zdGFydCgpOworCQlpZiAocmV0KQorCQkJYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKGFybTExX2lycXMsIEFSUkFZX1NJWkUoYXJtMTFfaXJxcykpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBlbV9zdG9wKHZvaWQpCit7CisJZW1fY2FsbF9mdW5jdGlvbihhcm0xMV9zdG9wX3BtdSk7CisJYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKGFybTExX2lycXMsIEFSUkFZX1NJWkUoYXJtMTFfaXJxcykpOworCXNjdV9zdG9wKCk7Cit9CisKKy8qCisgKiBXaHkgaXNuJ3QgdGhlcmUgYSBmdW5jdGlvbiB0byByb3V0ZSBhbiBJUlEgdG8gYSBzcGVjaWZpYyBDUFUgaW4KKyAqIGdlbmlycT8KKyAqLworc3RhdGljIHZvaWQgZW1fcm91dGVfaXJxKGludCBpcnEsIHVuc2lnbmVkIGludCBjcHUpCit7CisJaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisJaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBjcHVtYXNrX29mX2NwdShjcHUpKTsKK30KKworc3RhdGljIGludCBlbV9zZXR1cCh2b2lkKQoreworCS8qCisJICogU2VuZCBTQ1UgUE1VIGludGVycnVwdHMgdG8gdGhlICJvd25lciIgQ1BVLgorCSAqLworCWVtX3JvdXRlX2lycShJUlFfUE1VX1NDVTAsIDApOworCWVtX3JvdXRlX2lycShJUlFfUE1VX1NDVTEsIDApOworCWVtX3JvdXRlX2lycShJUlFfUE1VX1NDVTIsIDEpOworCWVtX3JvdXRlX2lycShJUlFfUE1VX1NDVTMsIDEpOworCWVtX3JvdXRlX2lycShJUlFfUE1VX1NDVTQsIDIpOworCWVtX3JvdXRlX2lycShJUlFfUE1VX1NDVTUsIDIpOworCWVtX3JvdXRlX2lycShJUlFfUE1VX1NDVTYsIDMpOworCWVtX3JvdXRlX2lycShJUlFfUE1VX1NDVTcsIDMpOworCisJLyoKKwkgKiBTZW5kIENQMTUgUE1VIGludGVycnVwdHMgdG8gdGhlIG93bmVyIENQVS4KKwkgKi8KKwllbV9yb3V0ZV9pcnEoSVJRX1BNVV9DUFUwLCAwKTsKKwllbV9yb3V0ZV9pcnEoSVJRX1BNVV9DUFUxLCAxKTsKKwllbV9yb3V0ZV9pcnEoSVJRX1BNVV9DUFUyLCAyKTsKKwllbV9yb3V0ZV9pcnEoSVJRX1BNVV9DUFUzLCAzKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgb3BfYXJtX21vZGVsX3NwZWMgb3BfbXBjb3JlX3NwZWMgPSB7CisJLmluaXQJCT0gZW1fc2V0dXAsCisJLm51bV9jb3VudGVycwk9IE1QQ09SRV9OVU1fQ09VTlRFUlMsCisJLnNldHVwX2N0cnMJPSBlbV9zZXR1cF9jdHJzLAorCS5zdGFydAkJPSBlbV9zdGFydCwKKwkuc3RvcAkJPSBlbV9zdG9wLAorCS5uYW1lCQk9ICJhcm0vbXBjb3JlIiwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuaCBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX21wY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZDgxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuaApAQCAtMCwwICsxLDYxIEBACisvKioKKyAqIEBmaWxlIG9wX21vZGVsX21wY29yZS5jCisgKiBNUENPUkUgRXZlbnQgTW9uaXRvciBEcml2ZXIKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDQgQVJNIFNNUCBEZXZlbG9wbWVudCBUZWFtCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAwLTIwMDQgRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBtdmlzdGEuY29tPgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMC0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IERhdmUgSmlhbmcgPGRhdmUuamlhbmdAaW50ZWwuY29tPgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGFybS5saW51eC5vcmcudWs+CisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IE9wcm9maWxlIEF1dGhvcnMKKyAqCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgWndhbmUgTXdhaWthbWJvCisgKi8KKyNpZm5kZWYgT1BfTU9ERUxfTVBDT1JFX0gKKyNkZWZpbmUgT1BfTU9ERUxfTVBDT1JFX0gKKworc3RydWN0IGV2ZW50bW9uaXRvciB7CisJdW5zaWduZWQgbG9uZyBQTUNSOworCXVuc2lnbmVkIGNoYXIgTUNFQls4XTsKKwl1bnNpZ25lZCBsb25nIE1DWzhdOworfTsKKworLyoKKyAqIExpc3Qgb2YgdXNlcnNwYWNlIGNvdW50ZXIgbnVtYmVyczogbm90ZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgaXMgaW1wb3J0YW50LgorICogVGhlIGNvZGUgcmVsaWVzIG9uIENQVW4ncyBjb3VudGVycyBiZWluZyBDUFUwJ3MgY291bnRlcnMgKyAzbgorICogYW5kIG9uIENQVTAncyBjb3VudGVycyBzdGFydGluZyBhdCAwCisgKi8KKworI2RlZmluZSBDT1VOVEVSX0NQVTBfUE1OMCAwCisjZGVmaW5lIENPVU5URVJfQ1BVMF9QTU4xIDEKKyNkZWZpbmUgQ09VTlRFUl9DUFUwX0NDTlQgMgorCisjZGVmaW5lIENPVU5URVJfQ1BVMV9QTU4wIDMKKyNkZWZpbmUgQ09VTlRFUl9DUFUxX1BNTjEgNAorI2RlZmluZSBDT1VOVEVSX0NQVTFfQ0NOVCA1CisKKyNkZWZpbmUgQ09VTlRFUl9DUFUyX1BNTjAgNgorI2RlZmluZSBDT1VOVEVSX0NQVTJfUE1OMSA3CisjZGVmaW5lIENPVU5URVJfQ1BVMl9DQ05UIDgKKworI2RlZmluZSBDT1VOVEVSX0NQVTNfUE1OMCA5CisjZGVmaW5lIENPVU5URVJfQ1BVM19QTU4xIDEwCisjZGVmaW5lIENPVU5URVJfQ1BVM19DQ05UIDExCisKKyNkZWZpbmUgQ09VTlRFUl9TQ1VfTU4wIDEyCisjZGVmaW5lIENPVU5URVJfU0NVX01OMSAxMworI2RlZmluZSBDT1VOVEVSX1NDVV9NTjIgMTQKKyNkZWZpbmUgQ09VTlRFUl9TQ1VfTU4zIDE1CisjZGVmaW5lIENPVU5URVJfU0NVX01ONCAxNgorI2RlZmluZSBDT1VOVEVSX1NDVV9NTjUgMTcKKyNkZWZpbmUgQ09VTlRFUl9TQ1VfTU42IDE4CisjZGVmaW5lIENPVU5URVJfU0NVX01ONyAxOQorI2RlZmluZSBOVU1fU0NVX0NPVU5URVJTIDgKKworI2RlZmluZSBTQ1VfQ09VTlRFUihudW1iZXIpCSgobnVtYmVyKSArIENPVU5URVJfU0NVX01OMCkKKworI2RlZmluZSBNUENPUkVfTlVNX0NPVU5URVJTCVNDVV9DT1VOVEVSKE5VTV9TQ1VfQ09VTlRFUlMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1ODEzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKQEAgLTAsMCArMSw2NyBAQAorLyoqCisgKiBAZmlsZSBvcF9tb2RlbF92Ni5jCisgKiBBUk0xMSBQZXJmb3JtYW5jZSBNb25pdG9yIERyaXZlcgorICoKKyAqIEJhc2VkIG9uIG9wX21vZGVsX3hzY2FsZS5jCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMC0yMDA0IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAbXZpc3RhLmNvbT4KKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDAtMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlIEluYworICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBEYXZlIEppYW5nIDxkYXZlLmppYW5nQGludGVsLmNvbT4KKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDQgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDQgWndhbmUgTXdhaWthbWJvIDx6d2FuZUBhcm0ubGludXgub3JnLnVrPgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBPUHJvZmlsZSBBdXRob3JzCisgKgorICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKi8KKworLyogI2RlZmluZSBERUJVRyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKKyNpbmNsdWRlICJvcF9hcm1fbW9kZWwuaCIKKyNpbmNsdWRlICJvcF9tb2RlbF9hcm0xMV9jb3JlLmgiCisKK3N0YXRpYyBpbnQgaXJxc1tdID0geworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCisJMywKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgYXJtdjZfcG11X3N0b3Aodm9pZCkKK3sKKwlhcm0xMV9zdG9wX3BtdSgpOworCWFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKK30KKworc3RhdGljIGludCBhcm12Nl9wbXVfc3RhcnQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYXJtMTFfcmVxdWVzdF9pbnRlcnJ1cHRzKGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gYXJtMTFfc3RhcnRfcG11KCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFybXY2X2RldGVjdF9wbXUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG9wX2FybV9tb2RlbF9zcGVjIG9wX2FybXY2X3NwZWMgPSB7CisJLmluaXQJCT0gYXJtdjZfZGV0ZWN0X3BtdSwKKwkubnVtX2NvdW50ZXJzCT0gMywKKwkuc2V0dXBfY3Rycwk9IGFybTExX3NldHVwX3BtdSwKKwkuc3RhcnQJCT0gYXJtdjZfcG11X3N0YXJ0LAorCS5zdG9wCQk9IGFybXY2X3BtdV9zdG9wLAorCS5uYW1lCQk9ICJhcm0vYXJtdjYiLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1pb3AvTWFrZWZpbGUKaW5kZXggMjNkYTAwYi4uNGQyYjFkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1pb3AvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1pb3AvTWFrZWZpbGUKQEAgLTIsNyArMiwzMCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KICMKIAotb2JqLXkJCQk6PSBncGlvLm8gaTJjLm8gcGNpLm8gc2V0dXAubyB0aW1lLm8KLW9iai1tCQkJOj0KLW9iai1uCQkJOj0KLW9iai0JCQk6PQorb2JqLXkgOj0KKworIyBJT1AzMlgKK29iai0kKENPTkZJR19BUkNIX0lPUDMyWCkgKz0gZ3Bpby5vCitvYmotJChDT05GSUdfQVJDSF9JT1AzMlgpICs9IGkyYy5vCitvYmotJChDT05GSUdfQVJDSF9JT1AzMlgpICs9IHBjaS5vCitvYmotJChDT05GSUdfQVJDSF9JT1AzMlgpICs9IHNldHVwLm8KK29iai0kKENPTkZJR19BUkNIX0lPUDMyWCkgKz0gdGltZS5vCitvYmotJChDT05GSUdfQVJDSF9JT1AzMlgpICs9IGlvLm8KK29iai0kKENPTkZJR19BUkNIX0lPUDMyWCkgKz0gY3A2Lm8KKworIyBJT1AzM1gKK29iai0kKENPTkZJR19BUkNIX0lPUDMzWCkgKz0gZ3Bpby5vCitvYmotJChDT05GSUdfQVJDSF9JT1AzM1gpICs9IGkyYy5vCitvYmotJChDT05GSUdfQVJDSF9JT1AzM1gpICs9IHBjaS5vCitvYmotJChDT05GSUdfQVJDSF9JT1AzM1gpICs9IHNldHVwLm8KK29iai0kKENPTkZJR19BUkNIX0lPUDMzWCkgKz0gdGltZS5vCitvYmotJChDT05GSUdfQVJDSF9JT1AzM1gpICs9IGlvLm8KK29iai0kKENPTkZJR19BUkNIX0lPUDMzWCkgKz0gY3A2Lm8KKworIyBJT1AxM1hYCitvYmotJChDT05GSUdfQVJDSF9JT1AxM1hYKSArPSBjcDYubworb2JqLSQoQ09ORklHX0FSQ0hfSU9QMTNYWCkgKz0gdGltZS5vCisKK29iai1tICAgICAgICAgICAgICAgICAgOj0KK29iai1uICAgICAgICAgICAgICAgICAgOj0KK29iai0gICAgICAgICAgICAgICAgICAgOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL2NwNi5jIGIvYXJjaC9hcm0vcGxhdC1pb3AvY3A2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYxMmE4NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL2NwNi5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBJT1AgQ29wcm9jZXNzb3ItNiBhY2Nlc3MgaGFuZGxlcgorICogQ29weXJpZ2h0IChjKSAyMDA2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQorICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCitzdGF0aWMgaW50IGNwNl90cmFwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zdHIpCit7CisJdTMyIHRlbXA7CisKKyAgICAgICAgLyogZW5hYmxlIGNwNiBhY2Nlc3MgKi8KKyAgICAgICAgYXNtIHZvbGF0aWxlICgKKwkJIm1yYwlwMTUsIDAsICUwLCBjMTUsIGMxLCAwXG5cdCIKKwkJIm9ycgklMCwgJTAsICMoMSA8PCA2KVxuXHQiCisJCSJtY3IJcDE1LCAwLCAlMCwgYzE1LCBjMSwgMFxuXHQiCisJCTogIj1yIih0ZW1wKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogcGVybWl0IGtlcm5lbCBzcGFjZSBjcDYgYWNjZXNzCisgKiBkZW55IHVzZXIgc3BhY2UgY3A2IGFjY2VzcworICovCitzdGF0aWMgc3RydWN0IHVuZGVmX2hvb2sgY3A2X2hvb2sgPSB7CisJLmluc3RyX21hc2sgICAgID0gMHgwZjAwMGZmMCwKKwkuaW5zdHJfdmFsICAgICAgPSAweDBlMDAwNjEwLAorCS5jcHNyX21hc2sgICAgICA9IE1PREVfTUFTSywKKwkuY3Bzcl92YWwgICAgICAgPSBTVkNfTU9ERSwKKwkuZm4gICAgICAgICAgICAgPSBjcDZfdHJhcCwKK307CisKK3ZvaWQgX19pbml0IGlvcF9pbml0X2NwNl9oYW5kbGVyKHZvaWQpCit7CisJcmVnaXN0ZXJfdW5kZWZfaG9vaygmY3A2X2hvb2spOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3AvaW8uYyBiL2FyY2gvYXJtL3BsYXQtaW9wL2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlY2NlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL2lvLmMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIGlvcDN4eCBjdXN0b20gaW9yZW1hcCBpbXBsZW1lbnRhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQorICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3ZvaWQgKiBfX2lvbWVtIF9faW9wM3h4X2lvcmVtYXAodW5zaWduZWQgbG9uZyBjb29raWUsIHNpemVfdCBzaXplLAorCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJdm9pZCBfX2lvbWVtICogcmV0dmFsOworCisJc3dpdGNoIChjb29raWUpIHsKKwljYXNlIElPUDNYWF9QQ0lfTE9XRVJfSU9fUEEgLi4uIElPUDNYWF9QQ0lfVVBQRVJfSU9fUEE6CisJCXJldHZhbCA9ICh2b2lkICopIElPUDNYWF9QQ0lfSU9fUEhZU19UT19WSVJUKGNvb2tpZSk7CisJCWJyZWFrOworCWNhc2UgSU9QM1hYX1BFUklQSEVSQUxfUEhZU19CQVNFIC4uLiBJT1AzWFhfUEVSSVBIRVJBTF9VUFBFUl9QQToKKwkJcmV0dmFsID0gKHZvaWQgKikgSU9QM1hYX1BNTVJfUEhZU19UT19WSVJUKGNvb2tpZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IF9faW9yZW1hcChjb29raWUsIHNpemUsIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTChfX2lvcDN4eF9pb3JlbWFwKTsKKwordm9pZCBfX2lvcDN4eF9pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKKworCXN3aXRjaCAoKHUzMikgYWRkcikgeworCWNhc2UgSU9QM1hYX1BDSV9MT1dFUl9JT19WQSAuLi4gSU9QM1hYX1BDSV9VUFBFUl9JT19WQToKKwljYXNlIElPUDNYWF9QRVJJUEhFUkFMX1ZJUlRfQkFTRSAuLi4gSU9QM1hYX1BFUklQSEVSQUxfVVBQRVJfVkE6CisJCWdvdG8gc2tpcDsKKwl9CisJX19pb3VubWFwKGFkZHIpOworCitza2lwOgorCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0woX19pb3AzeHhfaW91bm1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCmluZGV4IGU2NDc4MTIuLmI1ZjZlYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCkBAIC0xOTYsOCArMTk2LDggQEAKIAlpZiAoIXJlcykKIAkJcGFuaWMoIlBDSTogdW5hYmxlIHRvIGFsbG9jIHJlc291cmNlcyIpOwogCi0JcmVzWzBdLnN0YXJ0ID0gSU9QM1hYX1BDSV9MT1dFUl9JT19WQTsKLQlyZXNbMF0uZW5kICAgPSBJT1AzWFhfUENJX0xPV0VSX0lPX1ZBICsgSU9QM1hYX1BDSV9JT19XSU5ET1dfU0laRSAtIDE7CisJcmVzWzBdLnN0YXJ0ID0gSU9QM1hYX1BDSV9MT1dFUl9JT19QQTsKKwlyZXNbMF0uZW5kICAgPSBJT1AzWFhfUENJX0xPV0VSX0lPX1BBICsgSU9QM1hYX1BDSV9JT19XSU5ET1dfU0laRSAtIDE7CiAJcmVzWzBdLm5hbWUgID0gIklPUDNYWCBQQ0kgSS9PIFNwYWNlIjsKIAlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwogCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnJlc1swXSk7CkBAIC0yMDksNyArMjA5LDcgQEAKIAlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSk7CiAKIAlzeXMtPm1lbV9vZmZzZXQgPSBJT1AzWFhfUENJX0xPV0VSX01FTV9QQSAtIElPUDNYWF9QQ0lfTE9XRVJfTUVNX0JBOwotCXN5cy0+aW9fb2Zmc2V0ICA9IElPUDNYWF9QQ0lfTE9XRVJfSU9fVkEgLSBJT1AzWFhfUENJX0xPV0VSX0lPX0JBOworCXN5cy0+aW9fb2Zmc2V0ICA9IElPUDNYWF9QQ0lfTE9XRVJfSU9fUEEgLSBJT1AzWFhfUENJX0xPV0VSX0lPX0JBOwogCiAJc3lzLT5yZXNvdXJjZVswXSA9ICZyZXNbMF07CiAJc3lzLT5yZXNvdXJjZVsxXSA9ICZyZXNbMV07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMgYi9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKaW5kZXggZjUzMGFiZC4uMTYzMDBhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYwpAQCAtMjQsMzkgKzI0LDQ1IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMlgKLSNkZWZpbmUgSVJRX0lPUDNYWF9USU1FUjAJSVJRX0lPUDMyWF9USU1FUjAKLSNlbHNlCi0jaWZkZWYgQ09ORklHX0FSQ0hfSU9QMzNYCi0jZGVmaW5lIElSUV9JT1AzWFhfVElNRVIwCUlSUV9JT1AzM1hfVElNRVIwCi0jZW5kaWYKLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9hcmNoL3RpbWUuaD4KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGlja3NfcGVyX2ppZmZ5Owogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGlja3NfcGVyX3VzZWM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuZXh0X2ppZmZ5X3RpbWU7CiAKLXVuc2lnbmVkIGxvbmcgaW9wM3h4X2dldHRpbWVvZmZzZXQodm9pZCkKK3Vuc2lnbmVkIGxvbmcgaW9wX2dldHRpbWVvZmZzZXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgdGVtcDEsIHRlbXAyOwogCi0Jb2Zmc2V0ID0gbmV4dF9qaWZmeV90aW1lIC0gKklPUDNYWF9UVV9UQ1IxOworCS8qIGVuYWJsZSBjcDYsIGlmIG5lY2Vzc2FyeSwgdG8gYXZvaWQgdGFraW5nIHRoZSBvdmVyaGVhZCBvZiBhbgorCSAqIHVuZGVmaW5lZCBpbnN0cnVjdGlvbiB0cmFwCisJICovCisJYXNtIHZvbGF0aWxlICgKKwkibXJjCXAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgorCSJhbmRzCSUxLCAlMCwgIygxIDw8IDYpXG5cdCIKKwkib3JyZXEJJTAsICUwLCAjKDEgPDwgNilcblx0IgorCSJtY3JlcQlwMTUsIDAsICUwLCBjMTUsIGMxLCAwXG5cdCIKKyNpZmRlZiBDT05GSUdfWFNDQUxFCisJIm1yY2VxCXAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgorCSJtb3ZlcQklMCwgJTBcblx0IgorCSJzdWJlcQlwYywgcGMsICM0XG5cdCIKKyNlbmRpZgorCTogIj1yIih0ZW1wMSksICI9ciIodGVtcDIpIDogOiAiY2MiKTsKKworCW9mZnNldCA9IG5leHRfamlmZnlfdGltZSAtIHJlYWRfdGNyMSgpOwogCiAJcmV0dXJuIG9mZnNldCAvIHRpY2tzX3Blcl91c2VjOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QKLWlvcDN4eF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoraW9wX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAKLQlpb3AzeHhfY3A2X2VuYWJsZSgpOwotCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzYsIGMxLCAwIiA6IDogInIiICgxKSk7Ci0JaW9wM3h4X2NwNl9kaXNhYmxlKCk7CisJd3JpdGVfdGlzcigxKTsKIAotCXdoaWxlICgoc2lnbmVkIGxvbmcpKG5leHRfamlmZnlfdGltZSAtICpJT1AzWFhfVFVfVENSMSkKLQkJCQkJCQk+PSB0aWNrc19wZXJfamlmZnkpIHsKKwl3aGlsZSAoKHNpZ25lZCBsb25nKShuZXh0X2ppZmZ5X3RpbWUgLSByZWFkX3RjcjEoKSkKKwkJPj0gdGlja3NfcGVyX2ppZmZ5KSB7CiAJCXRpbWVyX3RpY2soKTsKIAkJbmV4dF9qaWZmeV90aW1lIC09IHRpY2tzX3Blcl9qaWZmeTsKIAl9CkBAIC02NiwxMyArNzIsMTMgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlvcDN4eF90aW1lcl9pcnEgPSB7Ci0JLm5hbWUJCT0gIklPUDNYWCBUaW1lciBUaWNrIiwKLQkuaGFuZGxlcgk9IGlvcDN4eF90aW1lcl9pbnRlcnJ1cHQsCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpb3BfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJJT1AgVGltZXIgVGljayIsCisJLmhhbmRsZXIJPSBpb3BfdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIH07CiAKLXZvaWQgX19pbml0IGlvcDN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyB0aWNrX3JhdGUpCit2b2lkIF9faW5pdCBpb3BfaW5pdF90aW1lKHVuc2lnbmVkIGxvbmcgdGlja19yYXRlKQogewogCXUzMiB0aW1lcl9jdGw7CiAKQEAgLTgwLDE5ICs4NiwxNyBAQAogCXRpY2tzX3Blcl91c2VjID0gdGlja19yYXRlIC8gMTAwMDAwMDsKIAluZXh0X2ppZmZ5X3RpbWUgPSAweGZmZmZmZmZmOwogCi0JdGltZXJfY3RsID0gSU9QM1hYX1RNUl9FTiB8IElPUDNYWF9UTVJfUFJJVklMRUdFRCB8Ci0JCQlJT1AzWFhfVE1SX1JFTE9BRCB8IElPUDNYWF9UTVJfUkFUSU9fMV8xOworCXRpbWVyX2N0bCA9IElPUF9UTVJfRU4gfCBJT1BfVE1SX1BSSVZJTEVHRUQgfAorCQkJSU9QX1RNUl9SRUxPQUQgfCBJT1BfVE1SX1JBVElPXzFfMTsKIAogCS8qCiAJICogV2UgdXNlIHRpbWVyIDAgZm9yIG91ciB0aW1lciBpbnRlcnJ1cHQsIGFuZCB0aW1lciAxIGFzCiAJICogbW9ub3RvbmljIGNvdW50ZXIgZm9yIHRyYWNraW5nIG1pc3NlZCBqaWZmaWVzLgogCSAqLwotCWlvcDN4eF9jcDZfZW5hYmxlKCk7Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNCwgYzEsIDAiIDogOiAiciIgKHRpY2tzX3Blcl9qaWZmeSAtIDEpKTsKLQlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMwLCBjMSwgMCIgOiA6ICJyIiAodGltZXJfY3RsKSk7Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNSwgYzEsIDAiIDogOiAiciIgKDB4ZmZmZmZmZmYpKTsKLQlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMxLCBjMSwgMCIgOiA6ICJyIiAodGltZXJfY3RsKSk7Ci0JaW9wM3h4X2NwNl9kaXNhYmxlKCk7CisJd3JpdGVfdHJyMCh0aWNrc19wZXJfamlmZnkgLSAxKTsKKwl3cml0ZV90bXIwKHRpbWVyX2N0bCk7CisJd3JpdGVfdHJyMSgweGZmZmZmZmZmKTsKKwl3cml0ZV90bXIxKHRpbWVyX2N0bCk7CiAKLQlzZXR1cF9pcnEoSVJRX0lPUDNYWF9USU1FUjAsICZpb3AzeHhfdGltZXJfaXJxKTsKKwlzZXR1cF9pcnEoSVJRX0lPUF9USU1FUjAsICZpb3BfdGltZXJfaXJxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwODY5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9LY29uZmlnCkBAIC0wLDAgKzEsMTAwIEBACisjIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9LY29uZmlnCisjCisjIENvcHlyaWdodCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitjb25maWcgUExBVF9TM0MyNFhYCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJZGVmYXVsdCB5IGlmIEFSQ0hfUzNDMjQxMAorCXNlbGVjdCBOT19JT1BPUlQKKwloZWxwCisJICBCYXNlIHBsYXRmb3JtIGNvZGUgZm9yIGFueSBTYW1zdW5nIFMzQyBkZXZpY2UKKworaWYgUExBVF9TM0MyNFhYCisKK2NvbmZpZyBDUFVfUzNDMjQ0WAorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiAoQ1BVX1MzQzI0NDAgfHwgQ1BVX1MzQzI0NDIpCisJaGVscAorCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KKworY29uZmlnIFBNX1NJTVRFQworCWJvb2wKKwloZWxwCisJICBDb21tb24gcG93ZXIgbWFuYWdlbWVudCBjb2RlIGZvciBzeXN0ZW1zIHRoYXQgYXJlCisJICBjb21wYXRpYmxlIHdpdGggdGhlIFNpbXRlYyBzdHlsZSBvZiBwb3dlciBtYW5hZ2VtZW50CisKK2NvbmZpZyBTM0MyNDEwX0JPT1RfV0FUQ0hET0cKKwlib29sICJTM0MyNDEwIEluaXRpYWxpc2F0aW9uIHdhdGNoZG9nIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIFMzQzI0MTBfV0FUQ0hET0cKKwloZWxwCisJICBTYXkgeSB0byBlbmFibGUgdGhlIHdhdGNoZG9nIGR1cmluZyB0aGUga2VybmVsIGRlY29tcHJlc3Npb24KKwkgIHN0YWdlLiBJZiB0aGUga2VybmVsIGZhaWxzIHRvIHVuY29tcHJlc3MsIHRoZW4gdGhlIHdhdGNoZG9nCisJICB3aWxsIHRyaWdnZXIgYSByZXNldCBhbmQgdGhlIHN5c3RlbSBzaG91bGQgcmVzdGFydC4KKworY29uZmlnIFMzQzI0MTBfQk9PVF9FUlJPUl9SRVNFVAorCWJvb2wgIlMzQzI0MTAgUmVib290IG9uIGRlY29tcHJlc3Npb24gZXJyb3IiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwloZWxwCisJICBTYXkgeSBoZXJlIHRvIHVzZSB0aGUgd2F0Y2hkb2cgdG8gcmVzZXQgdGhlIHN5c3RlbSBpZiB0aGUKKwkgIGtlcm5lbCBkZWNvbXByZXNzb3IgZGV0ZWN0cyBhbiBlcnJvciBkdXJpbmcgZGVjb21wcmVzc2lvbi4KKworY29uZmlnIFMzQzI0MTBfUE1fREVCVUcKKwlib29sICJTM0MyNDEwIFBNIFN1c3BlbmQgZGVidWciCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgJiYgUE0KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHZlcmJvc2UgZGVidWdnaW5nIGZyb20gdGhlIFBNIFN1c3BlbmQgYW5kCisJICBSZXN1bWUgY29kZS4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dD4KKwkgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb25maWcgUzNDMjQxMF9QTV9DSEVDSworCWJvb2wgIlMzQzI0MTAgUE0gU3VzcGVuZCBNZW1vcnkgQ1JDIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIFBNICYmIENSQzMyCisJaGVscAorIAkgIEVuYWJsZSB0aGUgUE0gY29kZSdzIG1lbW9yeSBhcmVhIGNoZWNrc3VtIG92ZXIgc2xlZXAuIFRoaXMgb3B0aW9uCisJICB3aWxsIGdlbmVyYXRlIENSQ3Mgb2YgYWxsIGJsb2NrcyBvZiBtZW1vcnksIGFuZCBzdG9yZSB0aGVtIGJlZm9yZQorCSAgZ29pbmcgdG8gc2xlZXAuIFRoZSBibG9ja3MgYXJlIHRoZW4gY2hlY2tlZCBvbiByZXN1bWUgZm9yIGFueQorCSAgZXJyb3JzLgorCitjb25maWcgUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUKKwlpbnQgIlMzQzI0MTAgUE0gU3VzcGVuZCBDUkMgQ2h1bmtzaXplIChLaUIpIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIFBNICYmIFMzQzI0MTBfUE1fQ0hFQ0sKKwlkZWZhdWx0IDY0CisJaGVscAorCSAgU2V0IHRoZSBjaHVua3NpemUgaW4gS2lsb2J5dGVzIG9mIHRoZSBDUkMgZm9yIGNoZWNraW5nIG1lbW9yeQorCSAgY29ycnVwdGlvbiBvdmVyIHN1c3BlbmQgYW5kIHJlc3VtZS4gQSBzbWFsbGVyIHZhbHVlIHdpbGwgbWVhbiB0aGF0CisJICB0aGUgQ1JDIGRhdGEgYmxvY2sgd2lsbCB0YWtlIG1vcmUgbWVtb3J5LCBidXQgd2lsIGlkZW50aWZ5IGFueQorCSAgZmF1bHRzIHdpdGggYmV0dGVyIHByZWNpc2lvbi4KKworY29uZmlnIFMzQzI0MTBfTE9XTEVWRUxfVUFSVF9QT1JUCisJaW50ICJTM0MyNDEwIFVBUlQgdG8gdXNlIGZvciBsb3ctbGV2ZWwgbWVzc2FnZXMiCisJZGVmYXVsdCAwCisJaGVscAorCSAgQ2hvaWNlIG9mIHdoaWNoIFVBUlQgcG9ydCB0byB1c2UgZm9yIHRoZSBsb3ctbGV2ZWwgbWVzc2FnZXMsCisJICBzdWNoIGFzIHRoZSBgVW5jb21wcmVzc2luZy4uLmAgYXQgc3RhcnQgdGltZS4gVGhlIHZhbHVlIG9mCisJICB0aGlzIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIGJldHdlZW4gemVybyBhbmQgdHdvLiBUaGUgcG9ydAorCSAgbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQgYnkgdGhlIGJvb3QtbG9hZGVyIGJlZm9yZSB1c2UuCisKK2NvbmZpZyBTM0MyNDEwX0RNQQorCWJvb2wgIlMzQzI0MTAgRE1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwloZWxwCisJICBTM0MyNDEwIERNQSBzdXBwb3J0LiBUaGlzIGlzIG5lZWRlZCBmb3IgZHJpdmVycyBsaWtlIHNvdW5kIHdoaWNoCisJICB1c2UgdGhlIFMzQzI0MTAncyBETUEgc3lzdGVtIHRvIG1vdmUgZGF0YSB0byBhbmQgZnJvbSB0aGUKKwkgIHBlcmlwaGVyYWwgYmxvY2tzLgorCitjb25maWcgUzNDMjQxMF9ETUFfREVCVUcKKwlib29sICJTM0MyNDEwIERNQSBzdXBwb3J0IGRlYnVnIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIFMzQzI0MTBfRE1BCisJaGVscAorCSAgRW5hYmxlIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoZSBETUEgY29kZS4gVGhpcyBvcHRpb24gc2VuZHMgaW5mbworCSAgdG8gdGhlIGtlcm5lbCBsb2csIGF0IHByaW9yaXR5IEtFUk5fREVCVUcuCisKK2NvbmZpZyBNQUNIX1NNREsKKwlib29sCisJaGVscAorCSAgQ29tbW9uIG1hY2hpbmUgY29kZSBmb3IgU01ESzI0MTAgYW5kIFNNREsyNDQwCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1Y2NhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDMwIEBACisjIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyMKKyMgTGljZW5zZWQgdW5kZXIgR1BMdjIKKworb2JqLXkJCQkJOj0KK29iai1tCQkJCTo9CitvYmotbgkJCQk6PQorb2JqLQkJCQk6PQorCisKKyMgQ29yZSBmaWxlcworCitvYmoteQkJCQkrPSBjcHUubworb2JqLXkJCQkJKz0gaXJxLm8KK29iai15CQkJCSs9IGRldnMubworb2JqLXkJCQkJKz0gZ3Bpby5vCitvYmoteQkJCQkrPSB0aW1lLm8KK29iai15CQkJCSs9IGNsb2NrLm8KKworIyBBcmNoaXRlY3R1cmUgZGVwZW5kYW50IGJ1aWxkcworCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpCSs9IHMzYzI0NHgubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDRYKQkrPSBzM2MyNDR4LWlycS5vCitvYmotJChDT05GSUdfUE1fU0lNVEVDKQkJKz0gcG0tc2ltdGVjLm8KK29iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KK29iai0kKENPTkZJR19QTSkJCSs9IHNsZWVwLm8KK29iai0kKENPTkZJR19TM0MyNDEwX0RNQSkJKz0gZG1hLm8KK29iai0kKENPTkZJR19NQUNIX1NNREspCQkrPSBjb21tb24tc21kay5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZGMwM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYwpAQCAtMCwwICsxLDQ0OSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIENvcmUgY2xvY2sgY29udHJvbCBzdXBwb3J0CisgKgorICogQmFzZWQgb24sIGFuZCBjb2RlIGZyb20gbGludXgvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY2xvY2suYworICoqCisgKiogIENvcHlyaWdodCAoQykgMjAwNCBBUk0gTGltaXRlZC4KKyAqKiAgV3JpdHRlbiBieSBEZWVwIEJsdWUgU29sdXRpb25zIExpbWl0ZWQuCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisKKy8qIGNsb2NrIGluZm9ybWF0aW9uICovCisKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKKworREVGSU5FX01VVEVYKGNsb2Nrc19tdXRleCk7CisKKy8qIGVuYWJsZSBhbmQgZGlzYWJsZSBjYWxscyBmb3IgdXNlIHdpdGggdGhlIGNsayBzdHJ1Y3QgKi8KKworc3RhdGljIGludCBjbGtfbnVsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiAwOworfQorCisvKiBDbG9jayBBUEkgY2FsbHMgKi8KKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCXN0cnVjdCBjbGsgKnA7CisJc3RydWN0IGNsayAqY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKKwlpbnQgaWRubzsKKworCWlmIChkZXYgPT0gTlVMTCB8fCBkZXYtPmJ1cyAhPSAmcGxhdGZvcm1fYnVzX3R5cGUpCisJCWlkbm8gPSAtMTsKKwllbHNlCisJCWlkbm8gPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KS0+aWQ7CisKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBsaXN0KSB7CisJCWlmIChwLT5pZCA9PSBpZG5vICYmCisJCSAgICBzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYKKwkJICAgIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgeworCQkJY2xrID0gcDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogY2hlY2sgZm9yIHRoZSBjYXNlIHdoZXJlIGEgZGV2aWNlIHdhcyBzdXBwbGllZCwgYnV0IHRoZQorCSAqIGNsb2NrIHRoYXQgd2FzIGJlaW5nIHNlYXJjaGVkIGZvciBpcyBub3QgZGV2aWNlIHNwZWNpZmljICovCisKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBsaXN0KSB7CisJCQlpZiAocC0+aWQgPT0gLTEgJiYgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmCisJCQkgICAgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7CisJCQkJY2xrID0gcDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKwlyZXR1cm4gY2xrOworfQorCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7Cit9CisKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoSVNfRVJSKGNsaykgfHwgY2xrID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrX2VuYWJsZShjbGstPnBhcmVudCk7CisKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCisJaWYgKChjbGstPnVzYWdlKyspID09IDApCisJCShjbGstPmVuYWJsZSkoY2xrLCAxKTsKKworCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKElTX0VSUihjbGspIHx8IGNsayA9PSBOVUxMKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCisJaWYgKCgtLWNsay0+dXNhZ2UpID09IDApCisJCShjbGstPmVuYWJsZSkoY2xrLCAwKTsKKworCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKwljbGtfZGlzYWJsZShjbGstPnBhcmVudCk7Cit9CisKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChJU19FUlIoY2xrKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY2xrLT5yYXRlICE9IDApCisJCXJldHVybiBjbGstPnJhdGU7CisKKwlpZiAoY2xrLT5nZXRfcmF0ZSAhPSBOVUxMKQorCQlyZXR1cm4gKGNsay0+Z2V0X3JhdGUpKGNsayk7CisKKwlpZiAoY2xrLT5wYXJlbnQgIT0gTlVMTCkKKwkJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorCitsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWlmICghSVNfRVJSKGNsaykgJiYgY2xrLT5yb3VuZF9yYXRlKQorCQlyZXR1cm4gKGNsay0+cm91bmRfcmF0ZSkoY2xrLCByYXRlKTsKKworCXJldHVybiByYXRlOworfQorCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCByZXQ7CisKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKwlyZXQgPSAoY2xrLT5zZXRfcmF0ZSkoY2xrLCByYXRlKTsKKwltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cGFyZW50OworfQorCitpbnQgY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKworCWlmIChjbGstPnNldF9wYXJlbnQpCisJCXJldCA9IChjbGstPnNldF9wYXJlbnQpKGNsaywgcGFyZW50KTsKKworCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworRVhQT1JUX1NZTUJPTChjbGtfcm91bmRfcmF0ZSk7CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcGFyZW50KTsKK0VYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOworCisvKiBiYXNlIGNsb2NrcyAqLworCitzdHJ1Y3QgY2xrIGNsa194dGFsID0geworCS5uYW1lCQk9ICJ4dGFsIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMCwKKwkucGFyZW50CQk9IE5VTEwsCisJLmN0cmxiaXQJPSAwLAorfTsKKworc3RydWN0IGNsayBjbGtfbXBsbCA9IHsKKwkubmFtZQkJPSAibXBsbCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RydWN0IGNsayBjbGtfdXBsbCA9IHsKKwkubmFtZQkJPSAidXBsbCIsCisJLmlkCQk9IC0xLAorCS5wYXJlbnQJCT0gTlVMTCwKKwkuY3RybGJpdAk9IDAsCit9OworCitzdHJ1Y3QgY2xrIGNsa19mID0geworCS5uYW1lCQk9ICJmY2xrIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMCwKKwkucGFyZW50CQk9ICZjbGtfbXBsbCwKKwkuY3RybGJpdAk9IDAsCit9OworCitzdHJ1Y3QgY2xrIGNsa19oID0geworCS5uYW1lCQk9ICJoY2xrIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMCwKKwkucGFyZW50CQk9IE5VTEwsCisJLmN0cmxiaXQJPSAwLAorfTsKKworc3RydWN0IGNsayBjbGtfcCA9IHsKKwkubmFtZQkJPSAicGNsayIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDAsCisJLnBhcmVudAkJPSBOVUxMLAorCS5jdHJsYml0CT0gMCwKK307CisKK3N0cnVjdCBjbGsgY2xrX3VzYl9idXMgPSB7CisJLm5hbWUJCT0gInVzYi1idXMiLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAwLAorCS5wYXJlbnQJCT0gJmNsa191cGxsLAorfTsKKworLyogY2xvY2tzIHRoYXQgY291bGQgYmUgcmVnaXN0ZXJlZCBieSBleHRlcm5hbCBjb2RlICovCisKK3N0YXRpYyBpbnQgczNjMjR4eF9kY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBkY2xrY29uID0gX19yYXdfcmVhZGwoUzNDMjRYWF9EQ0xLQ09OKTsKKworCWlmIChlbmFibGUpCisJCWRjbGtjb24gfD0gY2xrLT5jdHJsYml0OworCWVsc2UKKwkJZGNsa2NvbiAmPSB+Y2xrLT5jdHJsYml0OworCisJX19yYXdfd3JpdGVsKGRjbGtjb24sIFMzQzI0WFhfRENMS0NPTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNHh4X2RjbGtfc2V0cGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXVuc2lnbmVkIGxvbmcgZGNsa2NvbjsKKwl1bnNpZ25lZCBpbnQgdWNsazsKKworCWlmIChwYXJlbnQgPT0gJmNsa191cGxsKQorCQl1Y2xrID0gMTsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19wKQorCQl1Y2xrID0gMDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisKKwlkY2xrY29uID0gX19yYXdfcmVhZGwoUzNDMjRYWF9EQ0xLQ09OKTsKKworCWlmIChjbGstPmN0cmxiaXQgPT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4pIHsKKwkJaWYgKHVjbGspCisJCQlkY2xrY29uIHw9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMF9VQ0xLOworCQllbHNlCisJCQlkY2xrY29uICY9IH5TM0MyNDEwX0RDTEtDT05fRENMSzBfVUNMSzsKKwl9IGVsc2UgeworCQlpZiAodWNsaykKKwkJCWRjbGtjb24gfD0gUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX1VDTEs7CisJCWVsc2UKKwkJCWRjbGtjb24gJj0gflMzQzI0MTBfRENMS0NPTl9EQ0xLMV9VQ0xLOworCX0KKworCV9fcmF3X3dyaXRlbChkY2xrY29uLCBTM0MyNFhYX0RDTEtDT04pOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzM2MyNHh4X2Nsa291dF9zZXRwYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXVuc2lnbmVkIGxvbmcgc291cmNlOworCisJLyogY2FsY3VsYXRlIHRoZSBNSVNDQ1Igc2V0dGluZyBmb3IgdGhlIGNsb2NrICovCisKKwlpZiAocGFyZW50ID09ICZjbGtfeHRhbCkKKwkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9NUExMOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX3VwbGwpCisJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfVVBMTDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19mKQorCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX0ZDTEs7CisJZWxzZSBpZiAocGFyZW50ID09ICZjbGtfaCkKKwkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9IQ0xLOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX3ApCisJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfUENMSzsKKwllbHNlIGlmIChjbGsgPT0gJnMzYzI0eHhfY2xrb3V0MCAmJiBwYXJlbnQgPT0gJnMzYzI0eHhfZGNsazApCisJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfRENMSzA7CisJZWxzZSBpZiAoY2xrID09ICZzM2MyNHh4X2Nsa291dDEgJiYgcGFyZW50ID09ICZzM2MyNHh4X2RjbGsxKQorCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX0RDTEswOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbGstPnBhcmVudCA9IHBhcmVudDsKKworCWlmIChjbGsgPT0gJnMzYzI0eHhfZGNsazApCisJCW1hc2sgPSBTM0MyNDEwX01JU0NDUl9DTEswX01BU0s7CisJZWxzZSB7CisJCXNvdXJjZSA8PD0gNDsKKwkJbWFzayA9IFMzQzI0MTBfTUlTQ0NSX0NMSzFfTUFTSzsKKwl9CisKKwlzM2MyNDEwX21vZGlmeV9taXNjY3IobWFzaywgc291cmNlKTsKKwlyZXR1cm4gMDsKK30KKworLyogZXh0ZXJuYWwgY2xvY2sgZGVmaW5pdGlvbnMgKi8KKworc3RydWN0IGNsayBzM2MyNHh4X2RjbGswID0geworCS5uYW1lCQk9ICJkY2xrMCIsCisJLmlkCQk9IC0xLAorCS5jdHJsYml0CT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4sCisJLmVuYWJsZQkgICAgICAgID0gczNjMjR4eF9kY2xrX2VuYWJsZSwKKwkuc2V0X3BhcmVudAk9IHMzYzI0eHhfZGNsa19zZXRwYXJlbnQsCit9OworCitzdHJ1Y3QgY2xrIHMzYzI0eHhfZGNsazEgPSB7CisJLm5hbWUJCT0gImRjbGsxIiwKKwkuaWQJCT0gLTEsCisJLmN0cmxiaXQJPSBTM0MyNDEwX0RDTEtDT05fRENMSzBFTiwKKwkuZW5hYmxlCQk9IHMzYzI0eHhfZGNsa19lbmFibGUsCisJLnNldF9wYXJlbnQJPSBzM2MyNHh4X2RjbGtfc2V0cGFyZW50LAorfTsKKworc3RydWN0IGNsayBzM2MyNHh4X2Nsa291dDAgPSB7CisJLm5hbWUJCT0gImNsa291dDAiLAorCS5pZAkJPSAtMSwKKwkuc2V0X3BhcmVudAk9IHMzYzI0eHhfY2xrb3V0X3NldHBhcmVudCwKK307CisKK3N0cnVjdCBjbGsgczNjMjR4eF9jbGtvdXQxID0geworCS5uYW1lCQk9ICJjbGtvdXQxIiwKKwkuaWQJCT0gLTEsCisJLnNldF9wYXJlbnQJPSBzM2MyNHh4X2Nsa291dF9zZXRwYXJlbnQsCit9OworCitzdHJ1Y3QgY2xrIHMzYzI0eHhfdWNsayA9IHsKKwkubmFtZQkJPSAidWNsayIsCisJLmlkCQk9IC0xLAorfTsKKworLyogaW5pdGlhbGlzZSB0aGUgY2xvY2sgc3lzdGVtICovCisKK2ludCBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlpZiAoY2xrLT5lbmFibGUgPT0gTlVMTCkKKwkJY2xrLT5lbmFibGUgPSBjbGtfbnVsbF9lbmFibGU7CisKKwkvKiBhZGQgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNsb2NrcyAqLworCisJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKwlsaXN0X2FkZCgmY2xrLT5saXN0LCAmY2xvY2tzKTsKKwltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogaW5pdGFsaXNlIGFsbCB0aGUgY2xvY2tzICovCisKK2ludCBfX2luaXQgczNjMjR4eF9zZXR1cF9jbG9ja3ModW5zaWduZWQgbG9uZyB4dGFsLAorCQkJCXVuc2lnbmVkIGxvbmcgZmNsaywKKwkJCQl1bnNpZ25lZCBsb25nIGhjbGssCisJCQkJdW5zaWduZWQgbG9uZyBwY2xrKQoreworCXByaW50ayhLRVJOX0lORk8gIlMzQzI0WFggQ2xvY2tzLCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOworCisJLyogaW5pdGlhbGlzZSB0aGUgbWFpbiBzeXN0ZW0gY2xvY2tzICovCisKKwljbGtfeHRhbC5yYXRlID0geHRhbDsKKwljbGtfdXBsbC5yYXRlID0gczNjMjQxMF9nZXRfcGxsKF9fcmF3X3JlYWRsKFMzQzI0MTBfVVBMTENPTiksIHh0YWwpOworCisJY2xrX21wbGwucmF0ZSA9IGZjbGs7CisJY2xrX2gucmF0ZSA9IGhjbGs7CisJY2xrX3AucmF0ZSA9IHBjbGs7CisJY2xrX2YucmF0ZSA9IGZjbGs7CisKKwkvKiBhc3N1bWUgdWFydCBjbG9ja3MgYXJlIGNvcnJlY3RseSBzZXR1cCAqLworCisJLyogcmVnaXN0ZXIgb3VyIGNsb2NrcyAqLworCisJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa194dGFsKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIG1hc3RlciB4dGFsXG4iKTsKKworCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfbXBsbCkgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBtcGxsIGNsb2NrXG4iKTsKKworCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfdXBsbCkgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciB1cGxsIGNsb2NrXG4iKTsKKworCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfZikgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBjcHUgZmNsa1xuIik7CisKKwlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX2gpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1IGhjbGtcbiIpOworCisJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19wKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdSBwY2xrXG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuYwpyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKaW5kZXggYTQwZWFhNi4uOTA4ZWZhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuYworLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CkBAIC0zOCw5ICszOCw5IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9uYW5kLmg+CiAKLSNpbmNsdWRlICJjb21tb24tc21kay5oIgotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJwbS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CiAKIC8qIExFRCBkZXZpY2VzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwppbmRleCBhZTFmNWJiLi42YTJkMTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5jCisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCWh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCkBAIC00MCwxNSArNDAsMTYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgogCi0jaW5jbHVkZSAiY3B1LmgiCi0jaW5jbHVkZSAiZGV2cy5oIgotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiczNjMjQwMC5oIgotI2luY2x1ZGUgInMzYzI0MTAuaCIKLSNpbmNsdWRlICJzM2MyNDEyLmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDAwLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmg+CiAjaW5jbHVkZSAiczNjMjQ0eC5oIgotI2luY2x1ZGUgInMzYzI0NDAuaCIKLSNpbmNsdWRlICJzM2MyNDQyLmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQyLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmg+CiAKIHN0cnVjdCBjcHVfdGFibGUgewogCXVuc2lnbmVkIGxvbmcJaWRjb2RlOwpAQCAtNjcsNiArNjgsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDEyW10gID0gIlMzQzI0MTIiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQwW10gID0gIlMzQzI0NDAiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQyW10gID0gIlMzQzI0NDIiOworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQzW10gID0gIlMzQzI0NDMiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDEwYVtdID0gIlMzQzI0MTBBIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MGFbXSA9ICJTM0MyNDQwQSI7CiAKQEAgLTEzNSw2ICsxMzcsMTUgQEAKIAkJLm5hbWUJCT0gbmFtZV9zM2MyNDEyLAogCX0sCiAJeworCQkuaWRjb2RlCQk9IDB4MzI0NDMwMDEsCisJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKKwkJLm1hcF9pbwkJPSBzM2MyNDQzX21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczNjMjQ0M19pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzM2MyNDQzX2luaXRfdWFydHMsCisJCS5pbml0CQk9IHMzYzI0NDNfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9zM2MyNDQzLAorCX0sCisJewogCQkuaWRjb2RlCQk9IDB4MCwgICAvKiBTM0MyNDAwIGRvZXNuJ3QgaGF2ZSBhbiBpZGNvZGUgKi8KIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAogCQkubWFwX2lvCQk9IHMzYzI0MDBfbWFwX2lvLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuYwpyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYwppbmRleCBmYWNjZGUyLi4wZmU1M2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jCisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpAQCAtMjksOSArMjksMTAgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VkYy5oPgogCi0jaW5jbHVkZSAiZGV2cy5oIgotI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CiAKIC8qIFNlcmlhbCBwb3J0IHJlZ2lzdHJhdGlvbnMgKi8KIApAQCAtMjMwLDYgKzIzMSwyMCBAQAogCiBFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfdXNiZ2FkZ2V0KTsKIAordm9pZCBfX2luaXQgczNjMjR4eF91ZGNfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2MyNDEwX3VkY19tYWNoX2luZm8gKnBkKQoreworCXN0cnVjdCBzM2MyNDEwX3VkY19tYWNoX2luZm8gKm5wZDsKKworCW5wZCA9IGttYWxsb2Moc2l6ZW9mKCpucGQpLCBHRlBfS0VSTkVMKTsKKwlpZiAobnBkKSB7CisJCW1lbWNweShucGQsIHBkLCBzaXplb2YoKm5wZCkpOworCQlzM2NfZGV2aWNlX3VzYmdhZGdldC5kZXYucGxhdGZvcm1fZGF0YSA9IG5wZDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIm5vIG1lbW9yeSBmb3IgdWRjIHBsYXRmb3JtIGRhdGFcbiIpOworCX0KK30KKworCiAvKiBXYXRjaGRvZyAqLwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY193ZHRfcmVzb3VyY2VbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTQwYTgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCkBAIC0wLDAgKzEsMTQ5OSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUsMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIERNQSBjb3JlCisgKgorICogaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfRE1BX0RFQlVHCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RtYS5oPgorCisvKiBpbyBtYXAgZm9yIGRtYSAqLworc3RhdGljIHZvaWQgX19pb21lbSAqZG1hX2Jhc2U7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRtYV9rbWVtOworCitzdGF0aWMgaW50IGRtYV9jaGFubmVsczsKKworc3RydWN0IHMzYzI0eHhfZG1hX3NlbGVjdGlvbiBkbWFfc2VsOworCisvKiBkbWEgY2hhbm5lbCBzdGF0ZSBpbmZvcm1hdGlvbiAqLworc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gczNjMjQxMF9jaGFuc1tTM0MyNDEwX0RNQV9DSEFOTkVMU107CisKKy8qIGRlYnVnZ2luZyBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBCVUZfTUFHSUMgKDB4Y2FmZWJhYmUpCisKKyNkZWZpbmUgZG1hd2FybihmbXQuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCkKKworI2RlZmluZSBkbWFfcmVnYWRkcihjaGFuLCByZWcpICgoY2hhbiktPnJlZ3MgKyAocmVnKSkKKworI2lmIDEKKyNkZWZpbmUgZG1hX3dycmVnKGNoYW4sIHJlZywgdmFsKSB3cml0ZWwoKHZhbCksIChjaGFuKS0+cmVncyArIChyZWcpKQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX3dycmVnKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlwcl9kZWJ1Zygid3JpdGluZyAlMDh4IHRvIHJlZ2lzdGVyICUwOHhcbiIsKHVuc2lnbmVkIGludCl2YWwscmVnKTsKKwl3cml0ZWwodmFsLCBkbWFfcmVnYWRkcihjaGFuLCByZWcpKTsKK30KKyNlbmRpZgorCisjZGVmaW5lIGRtYV9yZHJlZyhjaGFuLCByZWcpIHJlYWRsKChjaGFuKS0+cmVncyArIChyZWcpKQorCisvKiBjYXB0dXJlZCByZWdpc3RlciBzdGF0ZSBmb3IgZGVidWcgKi8KKworc3RydWN0IHMzYzI0MTBfZG1hX3JlZ3N0YXRlIHsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgZGNzcmM7CisJdW5zaWduZWQgbG9uZyAgICAgICAgIGRpc3JjOworCXVuc2lnbmVkIGxvbmcgICAgICAgICBkc3RhdDsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgZGNvbjsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgZG1za3RyaWc7Cit9OworCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfRE1BX0RFQlVHCisKKy8qIGRtYWRiZ19zaG93cmVncworICoKKyAqIHNpbXBsZSBkZWJ1ZyByb3V0aW5lIHRvIHByaW50IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkbWEgcmVnaXN0ZXJzCisqLworCitzdGF0aWMgdm9pZAorZG1hZGJnX2NhcHR1cmUoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzM2MyNDEwX2RtYV9yZWdzdGF0ZSAqcmVncykKK3sKKwlyZWdzLT5kY3NyYyAgICA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ1NSQyk7CisJcmVncy0+ZGlzcmMgICAgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElTUkMpOworCXJlZ3MtPmRzdGF0ICAgID0gZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RTVEFUKTsKKwlyZWdzLT5kY29uICAgICA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OKTsKKwlyZWdzLT5kbXNrdHJpZyA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcpOworfQorCitzdGF0aWMgdm9pZAorZG1hZGJnX2R1bXByZWdzKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgbGluZSwgc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sCisJCSBzdHJ1Y3QgczNjMjQxMF9kbWFfcmVnc3RhdGUgKnJlZ3MpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgImRtYSVkOiAlczolZDogRENTUkM9JTA4bHgsIERJU1JDPSUwOGx4LCBEU1RBVD0lMDhseCBETVQ9JTAybHgsIERDT049JTA4bHhcbiIsCisJICAgICAgIGNoYW4tPm51bWJlciwgZm5hbWUsIGxpbmUsCisJICAgICAgIHJlZ3MtPmRjc3JjLCByZWdzLT5kaXNyYywgcmVncy0+ZHN0YXQsIHJlZ3MtPmRtc2t0cmlnLAorCSAgICAgICByZWdzLT5kY29uKTsKK30KKworc3RhdGljIHZvaWQKK2RtYWRiZ19zaG93Y2hhbihjb25zdCBjaGFyICpmbmFtZSwgaW50IGxpbmUsIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBzM2MyNDEwX2RtYV9yZWdzdGF0ZSBzdGF0ZTsKKworCWRtYWRiZ19jYXB0dXJlKGNoYW4sICZzdGF0ZSk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiZG1hJWQ6ICVzOiVkOiBscz0lZCwgY3VyPSVwLCAlcCAlcFxuIiwKKwkgICAgICAgY2hhbi0+bnVtYmVyLCBmbmFtZSwgbGluZSwgY2hhbi0+bG9hZF9zdGF0ZSwKKwkgICAgICAgY2hhbi0+Y3VyciwgY2hhbi0+bmV4dCwgY2hhbi0+ZW5kKTsKKworCWRtYWRiZ19kdW1wcmVncyhmbmFtZSwgbGluZSwgY2hhbiwgJnN0YXRlKTsKK30KKworc3RhdGljIHZvaWQKK2RtYWRiZ19zaG93cmVncyhjb25zdCBjaGFyICpmbmFtZSwgaW50IGxpbmUsIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBzM2MyNDEwX2RtYV9yZWdzdGF0ZSBzdGF0ZTsKKworCWRtYWRiZ19jYXB0dXJlKGNoYW4sICZzdGF0ZSk7CisJZG1hZGJnX2R1bXByZWdzKGZuYW1lLCBsaW5lLCBjaGFuLCAmc3RhdGUpOworfQorCisjZGVmaW5lIGRiZ19zaG93cmVncyhjaGFuKSBkbWFkYmdfc2hvd3JlZ3MoX19GVU5DVElPTl9fLCBfX0xJTkVfXywgKGNoYW4pKQorI2RlZmluZSBkYmdfc2hvd2NoYW4oY2hhbikgZG1hZGJnX3Nob3djaGFuKF9fRlVOQ1RJT05fXywgX19MSU5FX18sIChjaGFuKSkKKyNlbHNlCisjZGVmaW5lIGRiZ19zaG93cmVncyhjaGFuKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgZGJnX3Nob3djaGFuKGNoYW4pIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmIC8qIENPTkZJR19TM0MyNDEwX0RNQV9ERUJVRyAqLworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmRtYV9jaGFuX21hcFtETUFDSF9NQVhdOworCisvKiBsb29rdXBfZG1hX2NoYW5uZWwKKyAqCisgKiBjaGFuZ2UgdGhlIGRtYSBjaGFubmVsIG51bWJlciBnaXZlbiBpbnRvIGEgcmVhbCBkbWEgY2hhbm5lbCBpZAorKi8KKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpsb29rdXBfZG1hX2NoYW5uZWwodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJaWYgKGNoYW5uZWwgJiBETUFDSF9MT1dfTEVWRUwpCisJCXJldHVybiAmczNjMjQxMF9jaGFuc1tjaGFubmVsICYgfkRNQUNIX0xPV19MRVZFTF07CisJZWxzZQorCQlyZXR1cm4gZG1hX2NoYW5fbWFwW2NoYW5uZWxdOworfQorCisvKiBzM2MyNDEwX2RtYV9zdGF0c190aW1lb3V0CisgKgorICogVXBkYXRlIERNQSBzdGF0cyBmcm9tIHRpbWVvdXQgaW5mbworKi8KKworc3RhdGljIHZvaWQKK3MzYzI0MTBfZG1hX3N0YXRzX3RpbWVvdXQoc3RydWN0IHMzYzI0MTBfZG1hX3N0YXRzICpzdGF0cywgaW50IHZhbCkKK3sKKwlpZiAoc3RhdHMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKHZhbCA+IHN0YXRzLT50aW1lb3V0X2xvbmdlc3QpCisJCXN0YXRzLT50aW1lb3V0X2xvbmdlc3QgPSB2YWw7CisJaWYgKHZhbCA8IHN0YXRzLT50aW1lb3V0X3Nob3J0ZXN0KQorCQlzdGF0cy0+dGltZW91dF9zaG9ydGVzdCA9IHZhbDsKKworCXN0YXRzLT50aW1lb3V0X2F2ZyArPSB2YWw7Cit9CisKKy8qIHMzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkCisgKgorICogd2FpdCBmb3IgdGhlIERNQSBlbmdpbmUgdG8gbG9hZCBhIGJ1ZmZlciwgYW5kIHVwZGF0ZSB0aGUgc3RhdGUgYWNjb3JkaW5nbHkKKyovCisKK3N0YXRpYyBpbnQKK3MzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLCBpbnQgbGluZSkKK3sKKwlpbnQgdGltZW91dCA9IGNoYW4tPmxvYWRfdGltZW91dDsKKwlpbnQgdG9vazsKKworCWlmIChjaGFuLT5sb2FkX3N0YXRlICE9IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHMzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkKCkgY2FsbGVkIGluIGxvYWRzdGF0ZSAlZCBmcm9tIGxpbmUgJWRcbiIsIGNoYW4tPm51bWJlciwgY2hhbi0+bG9hZF9zdGF0ZSwgbGluZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChjaGFuLT5zdGF0cyAhPSBOVUxMKQorCQljaGFuLT5zdGF0cy0+bG9hZHMrKzsKKworCXdoaWxlICgtLXRpbWVvdXQgPiAwKSB7CisJCWlmICgoZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RTVEFUKSA8PCAoMzItMjApKSAhPSAwKSB7CisJCQl0b29rID0gY2hhbi0+bG9hZF90aW1lb3V0IC0gdGltZW91dDsKKworCQkJczNjMjQxMF9kbWFfc3RhdHNfdGltZW91dChjaGFuLT5zdGF0cywgdG9vayk7CisKKwkJCXN3aXRjaCAoY2hhbi0+bG9hZF9zdGF0ZSkgeworCQkJY2FzZSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRDoKKwkJCQljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHVua25vd24gbG9hZF9zdGF0ZSBpbiBzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZCgpICVkXG4iLCBjaGFuLT5udW1iZXIsIGNoYW4tPmxvYWRfc3RhdGUpOworCQkJfQorCisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWlmIChjaGFuLT5zdGF0cyAhPSBOVUxMKSB7CisJCWNoYW4tPnN0YXRzLT50aW1lb3V0X2ZhaWxlZCsrOworCX0KKworCXJldHVybiAwOworfQorCisKKworLyogczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcgorICoKKyAqIGxvYWQgYSBidWZmZXIsIGFuZCB1cGRhdGUgdGhlIGNoYW5uZWwgc3RhdGUKKyovCisKK3N0YXRpYyBpbmxpbmUgaW50CitzM2MyNDEwX2RtYV9sb2FkYnVmZmVyKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAorCQkgICAgICAgc3RydWN0IHMzYzI0MTBfZG1hX2J1ZiAqYnVmKQoreworCXVuc2lnbmVkIGxvbmcgcmVsb2FkOworCisJcHJfZGVidWcoInMzYzI0MTBfY2hhbl9sb2FkYnVmZmVyOiBsb2FkaW5nIGJ1ZmYgJXAgKDB4JTA4bHgsMHglMDZ4KVxuIiwKKwkJIGJ1ZiwgKHVuc2lnbmVkIGxvbmcpYnVmLT5kYXRhLCBidWYtPnNpemUpOworCisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWRtYXdhcm4oImJ1ZmZlciBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBjaGFubmVsIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyAqLworCisJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQpIHsKKwkJZG1hd2FybigibG9hZF9zdGF0ZSBpcyBTM0MyNDEwX0RNQUxPQURfMUxPQURFRFxuIik7CisJfQorCisJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERURfMVJVTk5JTkcpIHsKKwkJZG1hd2Fybigic3RhdGUgaXMgUzNDMjQxMF9ETUFMT0FEXzFMT0FERURfMVJVTk5JTkdcbiIpOworCX0KKworCS8qIGl0IHdvdWxkIHNlZW0gc2Vuc2libGUgaWYgd2UgYXJlIHRoZSBsYXN0IGJ1ZmZlciB0byBub3QgYm90aGVyCisJICogd2l0aCB0aGUgYXV0by1yZWxvYWQgYml0LCBzbyB0aGF0IHRoZSBETUEgZW5naW5lIHdpbGwgbm90IHRyeQorCSAqIGFuZCBsb2FkIGFub3RoZXIgdHJhbnNmZXIgYWZ0ZXIgdGhpcyBvbmUgaGFzIGZpbmlzaGVkLi4uCisJICovCisJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEX05PTkUpIHsKKwkJcHJfZGVidWcoImxvYWRfc3RhdGUgaXMgbm9uZSwgY2hlY2tpbmcgZm9yIG5vcmVsb2FkIChuZXh0PSVwKVxuIiwKKwkJCSBidWYtPm5leHQpOworCQlyZWxvYWQgPSAoYnVmLT5uZXh0ID09IE5VTEwpID8gUzNDMjQxMF9EQ09OX05PUkVMT0FEIDogMDsKKwl9IGVsc2UgeworCQkvL3ByX2RlYnVnKCJsb2FkX3N0YXRlIGlzICVkID0+IGF1dG9yZWxvYWRcbiIsIGNoYW4tPmxvYWRfc3RhdGUpOworCQlyZWxvYWQgPSBTM0MyNDEwX0RDT05fQVVUT1JFTE9BRDsKKwl9CisKKwlpZiAoKGJ1Zi0+ZGF0YSAmIDB4ZjAwMDAwMDApICE9IDB4MzAwMDAwMDApIHsKKwkJZG1hd2FybigiZG1hbG9hZDogYnVmZmVyIGlzICVwXG4iLCAodm9pZCAqKWJ1Zi0+ZGF0YSk7CisJfQorCisJd3JpdGVsKGJ1Zi0+ZGF0YSwgY2hhbi0+YWRkcl9yZWcpOworCisJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RDT04sCisJCSAgY2hhbi0+ZGNvbiB8IHJlbG9hZCB8IChidWYtPnNpemUvY2hhbi0+eGZlcl91bml0KSk7CisKKwljaGFuLT5uZXh0ID0gYnVmLT5uZXh0OworCisJLyogdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgY2hhbm5lbCAqLworCisJc3dpdGNoIChjaGFuLT5sb2FkX3N0YXRlKSB7CisJY2FzZSBTM0MyNDEwX0RNQUxPQURfTk9ORToKKwkJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEOworCQlicmVhazsKKworCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HOgorCQljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERURfMVJVTk5JTkc7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZG1hd2FybigiZG1hbG9hZDogdW5rbm93biBzdGF0ZSAlZCBpbiBsb2FkYnVmZmVyXG4iLAorCQkJY2hhbi0+bG9hZF9zdGF0ZSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKiBzM2MyNDEwX2RtYV9jYWxsX29wCisgKgorICogc21hbGwgcm91dGluZSB0byBjYWxsIHRoZSBvcCByb3V0aW5lIHdpdGggdGhlIGdpdmVuIG9wIGlmIGl0IGhhcyBiZWVuCisgKiByZWdpc3RlcmVkCisqLworCitzdGF0aWMgdm9pZAorczNjMjQxMF9kbWFfY2FsbF9vcChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwgZW51bSBzM2MyNDEwX2NoYW5fb3Agb3ApCit7CisJaWYgKGNoYW4tPm9wX2ZuICE9IE5VTEwpIHsKKwkJKGNoYW4tPm9wX2ZuKShjaGFuLCBvcCk7CisJfQorfQorCisvKiBzM2MyNDEwX2RtYV9idWZmZG9uZQorICoKKyAqIHNtYWxsIHdyYXBwZXIgdG8gY2hlY2sgaWYgY2FsbGJhY2sgcm91dGluZSBuZWVkcyB0byBiZSBjYWxsZWQsIGFuZAorICogaWYgc28sIGNhbGwgaXQKKyovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorczNjMjQxMF9kbWFfYnVmZmRvbmUoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzM2MyNDEwX2RtYV9idWYgKmJ1ZiwKKwkJICAgICBlbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzdWx0KQoreworI2lmIDAKKwlwcl9kZWJ1ZygiY2FsbGJhY2tfZm49JXAsIGJ1Zj0lcCwgaWQ9JXAsIHNpemU9JWQsIHJlc3VsdD0lZFxuIiwKKwkJIGNoYW4tPmNhbGxiYWNrX2ZuLCBidWYsIGJ1Zi0+aWQsIGJ1Zi0+c2l6ZSwgcmVzdWx0KTsKKyNlbmRpZgorCisJaWYgKGNoYW4tPmNhbGxiYWNrX2ZuICE9IE5VTEwpIHsKKwkJKGNoYW4tPmNhbGxiYWNrX2ZuKShjaGFuLCBidWYtPmlkLCBidWYtPnNpemUsIHJlc3VsdCk7CisJfQorfQorCisvKiBzM2MyNDEwX2RtYV9zdGFydAorICoKKyAqIHN0YXJ0IGEgZG1hIGNoYW5uZWwgZ29pbmcKKyovCisKK3N0YXRpYyBpbnQgczNjMjQxMF9kbWFfc3RhcnQoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCJzM2MyNDEwX3N0YXJ0X2RtYTogY2hhbm5lbD0lZFxuIiwgY2hhbi0+bnVtYmVyKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmIChjaGFuLT5zdGF0ZSA9PSBTM0MyNDEwX0RNQV9SVU5OSU5HKSB7CisJCXByX2RlYnVnKCJzM2MyNDEwX3N0YXJ0X2RtYTogYWxyZWFkeSBydW5uaW5nICglZClcbiIsIGNoYW4tPnN0YXRlKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwljaGFuLT5zdGF0ZSA9IFMzQzI0MTBfRE1BX1JVTk5JTkc7CisKKwkvKiBjaGVjayB3ZXRoZXIgdGhlcmUgaXMgYW55dGhpbmcgdG8gbG9hZCwgYW5kIGlmIG5vdCwgc2VlCisJICogaWYgd2UgY2FuIGZpbmQgYW55dGhpbmcgdG8gbG9hZAorCSAqLworCisJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEX05PTkUpIHsKKwkJaWYgKGNoYW4tPm5leHQgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogY2hhbm5lbCBoYXMgbm90aGluZyBsb2FkZWRcbiIsCisJCQkgICAgICAgY2hhbi0+bnVtYmVyKTsKKwkJCWNoYW4tPnN0YXRlID0gUzNDMjQxMF9ETUFfSURMRTsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcihjaGFuLCBjaGFuLT5uZXh0KTsKKwl9CisKKwlkYmdfc2hvd2NoYW4oY2hhbik7CisKKwkvKiBlbmFibGUgdGhlIGNoYW5uZWwgKi8KKworCWlmICghY2hhbi0+aXJxX2VuYWJsZWQpIHsKKwkJZW5hYmxlX2lycShjaGFuLT5pcnEpOworCQljaGFuLT5pcnFfZW5hYmxlZCA9IDE7CisJfQorCisJLyogc3RhcnQgdGhlIGNoYW5uZWwgZ29pbmcgKi8KKworCXRtcCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcpOworCXRtcCAmPSB+UzNDMjQxMF9ETUFTS1RSSUdfU1RPUDsKKwl0bXAgfD0gUzNDMjQxMF9ETUFTS1RSSUdfT047CisJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RNQVNLVFJJRywgdG1wKTsKKworCXByX2RlYnVnKCJkbWElZDogJTA4bHggdG8gRE1BU0tUUklHXG4iLCBjaGFuLT5udW1iZXIsIHRtcCk7CisKKyNpZiAwCisJLyogdGhlIGRtYSBidWZmZXIgbG9hZHMgc2hvdWxkIHRha2UgY2FyZSBvZiBjbGVhcmluZyB0aGUgQVVUTworCSAqIHJlbG9hZGluZyBmZWF0dXJlICovCisJdG1wID0gZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RDT04pOworCXRtcCAmPSB+UzNDMjQxMF9EQ09OX05PUkVMT0FEOworCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OLCB0bXApOworI2VuZGlmCisKKwlzM2MyNDEwX2RtYV9jYWxsX29wKGNoYW4sIFMzQzI0MTBfRE1BT1BfU1RBUlQpOworCisJZGJnX3Nob3djaGFuKGNoYW4pOworCisJLyogaWYgd2UndmUgb25seSBsb2FkZWQgb25lIGJ1ZmZlciBvbnRvIHRoZSBjaGFubmVsLCB0aGVuIGNoZWMKKwkgKiB0byBzZWUgaWYgd2UgaGF2ZSBhbm90aGVyLCBhbmQgaWYgc28sIHRyeSBhbmQgbG9hZCBpdCBzbyB3aGVuCisJICogdGhlIGZpcnN0IGJ1ZmZlciBpcyBmaW5pc2hlZCwgdGhlIG5ldyBvbmUgd2lsbCBiZSBsb2FkZWQgb250bworCSAqIHRoZSBjaGFubmVsICovCisKKwlpZiAoY2hhbi0+bmV4dCAhPSBOVUxMKSB7CisJCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEKSB7CisKKwkJCWlmIChzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZChjaGFuLCBfX0xJTkVfXykgPT0gMCkgeworCQkJCXByX2RlYnVnKCIlczogYnVmZiBub3QgeWV0IGxvYWRlZCwgbm8gbW9yZSB0b2RvXG4iLAorCQkJCQkgX19GVU5DVElPTl9fKTsKKwkJCX0gZWxzZSB7CisJCQkJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF8xUlVOTklORzsKKwkJCQlzM2MyNDEwX2RtYV9sb2FkYnVmZmVyKGNoYW4sIGNoYW4tPm5leHQpOworCQkJfQorCisJCX0gZWxzZSBpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfMVJVTk5JTkcpIHsKKwkJCXMzYzI0MTBfZG1hX2xvYWRidWZmZXIoY2hhbiwgY2hhbi0+bmV4dCk7CisJCX0KKwl9CisKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiBzM2MyNDEwX2RtYV9jYW5sb2FkCisgKgorICogd29yayBvdXQgaWYgd2UgY2FuIHF1ZXVlIGFub3RoZXIgYnVmZmVyIGludG8gdGhlIERNQSBlbmdpbmUKKyovCisKK3N0YXRpYyBpbnQKK3MzYzI0MTBfZG1hX2NhbmxvYWQoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCit7CisJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEX05PTkUgfHwKKwkgICAgY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfMVJVTk5JTkcpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHMzYzI0MTBfZG1hX2VucXVldWUKKyAqCisgKiBxdWV1ZSBhbiBnaXZlbiBidWZmZXIgZm9yIGRtYSB0cmFuc2Zlci4KKyAqCisgKiBpZCAgICAgICAgIHRoZSBkZXZpY2UgZHJpdmVyJ3MgaWQgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnVmZmVyCisgKiBkYXRhICAgICAgIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgZGF0YQorICogc2l6ZSAgICAgICB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzCisgKgorICogSWYgdGhlIGNoYW5uZWwgaXMgbm90IHJ1bm5pbmcsIHRoZW4gdGhlIGZsYWcgUzNDMjQxMF9ETUFGX0FVVE9TVEFSVAorICogaXMgY2hlY2tlZCwgYW5kIGlmIHNldCwgdGhlIGNoYW5uZWwgaXMgc3RhcnRlZC4gSWYgdGhpcyBmbGFnIGlzbid0IHNldCwKKyAqIHRoZW4gYW4gZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBJdCBpcyBwb3NzaWJsZSB0byBxdWV1ZSBtb3JlIHRoYW4gb25lIERNQSBidWZmZXIgb250byBhIGNoYW5uZWwgYXQKKyAqIG9uY2UsIGFuZCB0aGUgY29kZSB3aWxsIGRlYWwgd2l0aCB0aGUgcmUtbG9hZGluZyBvZiB0aGUgbmV4dCBidWZmZXIKKyAqIHdoZW4gbmVjZXNzYXJ5LgorKi8KKworaW50IHMzYzI0MTBfZG1hX2VucXVldWUodW5zaWduZWQgaW50IGNoYW5uZWwsIHZvaWQgKmlkLAorCQkJZG1hX2FkZHJfdCBkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmICpidWY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChjaGFuID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoIiVzOiBpZD0lcCwgZGF0YT0lMDh4LCBzaXplPSVkXG4iLAorCQkgX19GVU5DVElPTl9fLCBpZCwgKHVuc2lnbmVkIGludClkYXRhLCBzaXplKTsKKworCWJ1ZiA9IGttZW1fY2FjaGVfYWxsb2MoZG1hX2ttZW0sIEdGUF9BVE9NSUMpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlwcl9kZWJ1ZygiJXM6IG91dCBvZiBtZW1vcnkgKCVsZCBhbGxvYylcbiIsCisJCQkgX19GVU5DVElPTl9fLCAobG9uZylzaXplb2YoKmJ1ZikpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvL3ByX2RlYnVnKCIlczogbmV3IGJ1ZmZlciAlcFxuIiwgX19GVU5DVElPTl9fLCBidWYpOworCS8vZGJnX3Nob3djaGFuKGNoYW4pOworCisJYnVmLT5uZXh0ICA9IE5VTEw7CisJYnVmLT5kYXRhICA9IGJ1Zi0+cHRyID0gZGF0YTsKKwlidWYtPnNpemUgID0gc2l6ZTsKKwlidWYtPmlkICAgID0gaWQ7CisJYnVmLT5tYWdpYyA9IEJVRl9NQUdJQzsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmIChjaGFuLT5jdXJyID09IE5VTEwpIHsKKwkJLyogd2UndmUgZ290IG5vdGhpbmcgbG9hZGVkLi4uICovCisJCXByX2RlYnVnKCIlczogYnVmZmVyICVwIHF1ZXVlZCBvbnRvIGVtcHR5IGNoYW5uZWxcbiIsCisJCQkgX19GVU5DVElPTl9fLCBidWYpOworCisJCWNoYW4tPmN1cnIgPSBidWY7CisJCWNoYW4tPmVuZCAgPSBidWY7CisJCWNoYW4tPm5leHQgPSBOVUxMOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCJkbWElZDogJXM6IGJ1ZmZlciAlcCBxdWV1ZWQgb250byBub24tZW1wdHkgY2hhbm5lbFxuIiwKKwkJCSBjaGFuLT5udW1iZXIsIF9fRlVOQ1RJT05fXywgYnVmKTsKKworCQlpZiAoY2hhbi0+ZW5kID09IE5VTEwpCisJCQlwcl9kZWJ1ZygiZG1hJWQ6ICVzOiAlcCBub3QgZW1wdHksIGFuZCBjaGFuLT5lbmQ9PU5VTEw/XG4iLAorCQkJCSBjaGFuLT5udW1iZXIsIF9fRlVOQ1RJT05fXywgY2hhbik7CisKKwkJY2hhbi0+ZW5kLT5uZXh0ID0gYnVmOworCQljaGFuLT5lbmQgPSBidWY7CisJfQorCisJLyogaWYgbmVjZXNzYXJ5LCB1cGRhdGUgdGhlIG5leHQgYnVmZmVyIGZpZWxkICovCisJaWYgKGNoYW4tPm5leHQgPT0gTlVMTCkKKwkJY2hhbi0+bmV4dCA9IGJ1ZjsKKworCS8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gbG9hZCBhIGJ1ZmZlciAqLworCWlmIChjaGFuLT5zdGF0ZSA9PSBTM0MyNDEwX0RNQV9SVU5OSU5HKSB7CisJCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEICYmIDEpIHsKKwkJCWlmIChzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZChjaGFuLCBfX0xJTkVfXykgPT0gMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGxvYWRidWZmZXI6IgorCQkJCSAgICAgICAidGltZW91dCBsb2FkaW5nIGJ1ZmZlclxuIiwKKwkJCQkgICAgICAgY2hhbi0+bnVtYmVyKTsKKwkJCQlkYmdfc2hvd2NoYW4oY2hhbik7CisJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJd2hpbGUgKHMzYzI0MTBfZG1hX2NhbmxvYWQoY2hhbikgJiYgY2hhbi0+bmV4dCAhPSBOVUxMKSB7CisJCQlzM2MyNDEwX2RtYV9sb2FkYnVmZmVyKGNoYW4sIGNoYW4tPm5leHQpOworCQl9CisJfSBlbHNlIGlmIChjaGFuLT5zdGF0ZSA9PSBTM0MyNDEwX0RNQV9JRExFKSB7CisJCWlmIChjaGFuLT5mbGFncyAmIFMzQzI0MTBfRE1BRl9BVVRPU1RBUlQpIHsKKwkJCXMzYzI0MTBfZG1hX2N0cmwoY2hhbi0+bnVtYmVyLCBTM0MyNDEwX0RNQU9QX1NUQVJUKTsKKwkJfQorCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9lbnF1ZXVlKTsKKworc3RhdGljIGlubGluZSB2b2lkCitzM2MyNDEwX2RtYV9mcmVlYnVmKHN0cnVjdCBzM2MyNDEwX2RtYV9idWYgKmJ1ZikKK3sKKwlpbnQgbWFnaWNvayA9IChidWYtPm1hZ2ljID09IEJVRl9NQUdJQyk7CisKKwlidWYtPm1hZ2ljID0gLTE7CisKKwlpZiAobWFnaWNvaykgeworCQlrbWVtX2NhY2hlX2ZyZWUoZG1hX2ttZW0sIGJ1Zik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJzM2MyNDEwX2RtYV9mcmVlYnVmOiBidWZmICVwIHdpdGggYmFkIG1hZ2ljXG4iLCBidWYpOworCX0KK30KKworLyogczNjMjQxMF9kbWFfbGFzdHhmZXIKKyAqCisgKiBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIG91dCBvZiBidWZmZXJzLCB0byBlbnN1cmUgdGhhdCB0aGUgY2hhbm5lbAorICogaXMgcHJlcGFyZWQgZm9yIHNodXRkb3duLgorKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzM2MyNDEwX2RtYV9sYXN0eGZlcihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbikKK3sKKyNpZiAwCisJcHJfZGVidWcoImRtYSVkOiBzM2MyNDEwX2RtYV9sYXN0eGZlcjogbG9hZF9zdGF0ZSAlZFxuIiwKKwkJIGNoYW4tPm51bWJlciwgY2hhbi0+bG9hZF9zdGF0ZSk7CisjZW5kaWYKKworCXN3aXRjaCAoY2hhbi0+bG9hZF9zdGF0ZSkgeworCWNhc2UgUzNDMjQxMF9ETUFMT0FEX05PTkU6CisJCWJyZWFrOworCisJY2FzZSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRDoKKwkJaWYgKHMzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkKGNoYW4sIF9fTElORV9fKSA9PSAwKSB7CisJCQkJLyogZmxhZyBlcnJvcj8gKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRpbWVvdXQgd2FpdGluZyBmb3IgbG9hZCAoJXMpXG4iLAorCQkJICAgICAgIGNoYW4tPm51bWJlciwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFMT0FERURfMVJVTk5JTkc6CisJCS8qIEkgYmVsaXZlIGluIHRoaXMgY2FzZSB3ZSBkbyBub3QgaGF2ZSBhbnl0aGluZyB0byBkbworCQkgKiB1bnRpbCB0aGUgbmV4dCBidWZmZXIgY29tZXMgYWxvbmcsIGFuZCB3ZSB0dXJuIG9mZiB0aGUKKwkJICogcmVsb2FkICovCisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJkbWElZDogbGFzdHhmZXI6IHVuaGFuZGxlZCBsb2FkX3N0YXRlICVkIHdpdGggbm8gbmV4dFxuIiwKKwkJCSBjaGFuLT5udW1iZXIsIGNoYW4tPmxvYWRfc3RhdGUpOworCQlyZXR1cm47CisKKwl9CisKKwkvKiBob3BlZnVsbHkgdGhpcydsbCBzaHV0IHRoZSBkYW1uZWQgdGhpbmcgdXAgYWZ0ZXIgdGhlIHRyYW5zZmVyLi4uICovCisJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RDT04sIGNoYW4tPmRjb24gfCBTM0MyNDEwX0RDT05fTk9SRUxPQUQpOworfQorCisKKyNkZWZpbmUgZG1hZGJnMih4Li4uKQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK3MzYzI0MTBfZG1hX2lycShpbnQgaXJxLCB2b2lkICpkZXZwdykKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqKWRldnB3OworCXN0cnVjdCBzM2MyNDEwX2RtYV9idWYgICpidWY7CisKKwlidWYgPSBjaGFuLT5jdXJyOworCisJZGJnX3Nob3djaGFuKGNoYW4pOworCisJLyogbW9kaWZ5IHRoZSBjaGFubmVsIHN0YXRlICovCisKKwlzd2l0Y2ggKGNoYW4tPmxvYWRfc3RhdGUpIHsKKwljYXNlIFMzQzI0MTBfRE1BTE9BRF8xUlVOTklORzoKKwkJLyogVE9ETyAtIGlmIHdlIGFyZSBydW5uaW5nIG9ubHkgb25lIGJ1ZmZlciwgd2UgcHJvYmFibHkKKwkJICogd2FudCB0byByZWxvYWQgaGVyZSwgYW5kIHRoZW4gd29ycnkgYWJvdXQgdGhlIGJ1ZmZlcgorCQkgKiBjYWxsYmFjayAqLworCisJCWNoYW4tPmxvYWRfc3RhdGUgPSBTM0MyNDEwX0RNQUxPQURfTk9ORTsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEOgorCQkvKiBpaXJjLCB3ZSBzaG91bGQgZ28gYmFjayB0byBOT05FIGxvYWRlZCBoZXJlLCB3ZQorCQkgKiBoYWQgYSBidWZmZXIsIGFuZCBpdCB3YXMgbmV2ZXIgdmVyaWZpZWQgYXMgYmVpbmcKKwkJICogbG9hZGVkLgorCQkgKi8KKworCQljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRF8xUlVOTklORzoKKwkJLyogd2UnbGwgd29ycnkgYWJvdXQgY2hlY2tpbmcgdG8gc2VlIGlmIGFub3RoZXIgYnVmZmVyIGlzCisJCSAqIHJlYWR5IGFmdGVyIHdlJ3ZlIGNhbGxlZCBiYWNrIHRoZSBvd25lci4gVGhpcyBzaG91bGQKKwkJICogZW5zdXJlIHdlIGRvIG5vdCB3YWl0IGFyb3VuZCB0b28gbG9uZyBmb3IgdGhlIERNQQorCQkgKiBlbmdpbmUgdG8gc3RhcnQgdGhlIG5leHQgdHJhbnNmZXIKKwkJICovCisKKwkJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEOworCQlicmVhazsKKworCWNhc2UgUzNDMjQxMF9ETUFMT0FEX05PTkU6CisJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IElSUSB3aXRoIG5vIGxvYWRlZCBidWZmZXI/XG4iLAorCQkgICAgICAgY2hhbi0+bnVtYmVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBJUlEgaW4gaW52YWxpZCBsb2FkX3N0YXRlICVkXG4iLAorCQkgICAgICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5sb2FkX3N0YXRlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGJ1ZiAhPSBOVUxMKSB7CisJCS8qIHVwZGF0ZSB0aGUgY2hhaW4gdG8gbWFrZSBzdXJlIHRoYXQgaWYgd2UgbG9hZCBhbnkgbW9yZQorCQkgKiBidWZmZXJzIHdoZW4gd2UgY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHRoaW5ncyBzaG91bGQKKwkJICogd29yayBwcm9wZXJseSAqLworCisJCWNoYW4tPmN1cnIgPSBidWYtPm5leHQ7CisJCWJ1Zi0+bmV4dCAgPSBOVUxMOworCisJCWlmIChidWYtPm1hZ2ljICE9IEJVRl9NQUdJQykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogJXM6IGJ1ZiAlcCBpbmNvcnJlY3QgbWFnaWNcbiIsCisJCQkgICAgICAgY2hhbi0+bnVtYmVyLCBfX0ZVTkNUSU9OX18sIGJ1Zik7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKworCQlzM2MyNDEwX2RtYV9idWZmZG9uZShjaGFuLCBidWYsIFMzQzI0MTBfUkVTX09LKTsKKworCQkvKiBmcmVlIHJlc291Y2VzICovCisJCXMzYzI0MTBfZG1hX2ZyZWVidWYoYnVmKTsKKwl9IGVsc2UgeworCX0KKworCS8qIG9ubHkgcmVsb2FkIGlmIHRoZSBjaGFubmVsIGlzIHN0aWxsIHJ1bm5pbmcuLi4gb3VyIGJ1ZmZlciBkb25lCisJICogcm91dGluZSBtYXkgaGF2ZSBhbHRlcmVkIHRoZSBzdGF0ZSBieSByZXF1ZXN0aW5nIHRoZSBkbWEgY2hhbm5lbAorCSAqIHRvIHN0b3Agb3Igc2h1dGRvd24uLi4gKi8KKworCS8qIHRvZG86IGNoZWNrIHRoYXQgd2hlbiB0aGUgY2hhbm5lbCBpcyBzaHV0LWRvd24gZnJvbSBpbnNpZGUgdGhpcworCSAqIGZ1bmN0aW9uLCB3ZSBjb3BlIHdpdGggdW5zZXR0aW5nIHJlbG9hZCwgZXRjICovCisKKwlpZiAoY2hhbi0+bmV4dCAhPSBOVUxMICYmIGNoYW4tPnN0YXRlICE9IFMzQzI0MTBfRE1BX0lETEUpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzd2l0Y2ggKGNoYW4tPmxvYWRfc3RhdGUpIHsKKwkJY2FzZSBTM0MyNDEwX0RNQUxPQURfMVJVTk5JTkc6CisJCQkvKiBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciB0aGlzIHN0YXRlICovCisJCQlicmVhazsKKworCQljYXNlIFMzQzI0MTBfRE1BTE9BRF9OT05FOgorCQkJLyogY2FuIGxvYWQgYnVmZmVyIGltbWVkaWF0ZWx5ICovCisJCQlicmVhazsKKworCQljYXNlIFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEOgorCQkJaWYgKHMzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkKGNoYW4sIF9fTElORV9fKSA9PSAwKSB7CisJCQkJLyogZmxhZyBlcnJvcj8gKi8KKwkJCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGxvYWQgKCVzKVxuIiwKKwkJCQkgICAgICAgY2hhbi0+bnVtYmVyLCBfX0ZVTkNUSU9OX18pOworCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRF8xUlVOTklORzoKKwkJCWdvdG8gbm9fbG9hZDsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogdW5rbm93biBsb2FkX3N0YXRlIGluIGlycSwgJWRcbiIsCisJCQkgICAgICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5sb2FkX3N0YXRlKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcihjaGFuLCBjaGFuLT5uZXh0KTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0gZWxzZSB7CisJCXMzYzI0MTBfZG1hX2xhc3R4ZmVyKGNoYW4pOworCisJCS8qIHNlZSBpZiB3ZSBjYW4gc3RvcCB0aGlzIGNoYW5uZWwuLiAqLworCQlpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfTk9ORSkgeworCQkJcHJfZGVidWcoImRtYSVkOiBlbmQgb2YgdHJhbnNmZXIsIHN0b3BwaW5nIGNoYW5uZWwgKCVsZClcbiIsCisJCQkJIGNoYW4tPm51bWJlciwgamlmZmllcyk7CisJCQlzM2MyNDEwX2RtYV9jdHJsKGNoYW4tPm51bWJlciB8IERNQUNIX0xPV19MRVZFTCwKKwkJCQkJIFMzQzI0MTBfRE1BT1BfU1RPUCk7CisJCX0KKwl9CisKKyBub19sb2FkOgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpzM2MyNDEwX2RtYV9tYXBfY2hhbm5lbChpbnQgY2hhbm5lbCk7CisKKy8qIHMzYzI0MTBfcmVxdWVzdF9kbWEKKyAqCisgKiBnZXQgY29udHJvbCBvZiBhbiBkbWEgY2hhbm5lbAorKi8KKworaW50IHMzYzI0MTBfZG1hX3JlcXVlc3QodW5zaWduZWQgaW50IGNoYW5uZWwsCisJCQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICpjbGllbnQsCisJCQl2b2lkICpkZXYpCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJcHJfZGVidWcoImRtYSVkOiBzM2MyNDEwX3JlcXVlc3RfZG1hOiBjbGllbnQ9JXMsIGRldj0lcFxuIiwKKwkJIGNoYW5uZWwsIGNsaWVudC0+bmFtZSwgZGV2KTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNoYW4gPSBzM2MyNDEwX2RtYV9tYXBfY2hhbm5lbChjaGFubmVsKTsKKwlpZiAoY2hhbiA9PSBOVUxMKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlkYmdfc2hvd2NoYW4oY2hhbik7CisKKwljaGFuLT5jbGllbnQgPSBjbGllbnQ7CisJY2hhbi0+aW5fdXNlID0gMTsKKworCWlmICghY2hhbi0+aXJxX2NsYWltZWQpIHsKKwkJcHJfZGVidWcoImRtYSVkOiAlcyA6IHJlcXVlc3RpbmcgaXJxICVkXG4iLAorCQkJIGNoYW5uZWwsIF9fRlVOQ1RJT05fXywgY2hhbi0+aXJxKTsKKworCQljaGFuLT5pcnFfY2xhaW1lZCA9IDE7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQllcnIgPSByZXF1ZXN0X2lycShjaGFuLT5pcnEsIHMzYzI0MTBfZG1hX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCQkgIGNsaWVudC0+bmFtZSwgKHZvaWQgKiljaGFuKTsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJaWYgKGVycikgeworCQkJY2hhbi0+aW5fdXNlID0gMDsKKwkJCWNoYW4tPmlycV9jbGFpbWVkID0gMDsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGdldCBJUlEgJWQgZm9yIERNQSAlZFxuIiwKKwkJCSAgICAgICBjbGllbnQtPm5hbWUsIGNoYW4tPmlycSwgY2hhbi0+bnVtYmVyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQljaGFuLT5pcnFfZW5hYmxlZCA9IDE7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyogbmVlZCB0byBzZXR1cCAqLworCisJcHJfZGVidWcoIiVzOiBjaGFubmVsIGluaXRpYWxpc2VkLCAlcFxuIiwgX19GVU5DVElPTl9fLCBjaGFuKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX3JlcXVlc3QpOworCisvKiBzM2MyNDEwX2RtYV9mcmVlCisgKgorICogcmVsZWFzZSB0aGUgZ2l2ZW4gY2hhbm5lbCBiYWNrIHRvIHRoZSBzeXN0ZW0sIHdpbGwgc3RvcCBhbmQgZmx1c2gKKyAqIGFueSBvdXRzdGFuZGluZyB0cmFuc2ZlcnMsIGFuZCBlbnN1cmUgdGhlIGNoYW5uZWwgaXMgcmVhZHkgZm9yIHRoZQorICogbmV4dCBjbGFpbWFudC4KKyAqCisgKiBOb3RlLCBhbHRob3VnaCBhIHdhcm5pbmcgaXMgY3VycmVudGx5IHByaW50ZWQgaWYgdGhlIGZyZWVpbmcgY2xpZW50CisgKiBpbmZvIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgcmVnaXN0cmFudCdzIGNsaWVudCBpbmZvLCB0aGUgZnJlZSBpcyBzdGlsbAorICogYWxsb3dlZCB0byBnbyB0aHJvdWdoLgorKi8KKworaW50IHMzYzI0MTBfZG1hX2ZyZWUoZG1hY2hfdCBjaGFubmVsLCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChjaGFuID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaWYgKGNoYW4tPmNsaWVudCAhPSBjbGllbnQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZG1hJWQ6IHBvc3NpYmxlIGZyZWUgZnJvbSBkaWZmZXJlbnQgY2xpZW50IChjaGFubmVsICVwLCBwYXNzZWQgJXApXG4iLAorCQkgICAgICAgY2hhbm5lbCwgY2hhbi0+Y2xpZW50LCBjbGllbnQpOworCX0KKworCS8qIHNvcnQgb3V0IHN0b3BwaW5nIGFuZCBmcmVlaW5nIHRoZSBjaGFubmVsICovCisKKwlpZiAoY2hhbi0+c3RhdGUgIT0gUzNDMjQxMF9ETUFfSURMRSkgeworCQlwcl9kZWJ1ZygiJXM6IG5lZWQgdG8gc3RvcCBkbWEgY2hhbm5lbCAlcFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgY2hhbik7CisKKwkJLyogcG9zc2libHkgZmx1c2ggdGhlIGNoYW5uZWwgKi8KKwkJczNjMjQxMF9kbWFfY3RybChjaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUT1ApOworCX0KKworCWNoYW4tPmNsaWVudCA9IE5VTEw7CisJY2hhbi0+aW5fdXNlID0gMDsKKworCWlmIChjaGFuLT5pcnFfY2xhaW1lZCkKKwkJZnJlZV9pcnEoY2hhbi0+aXJxLCAodm9pZCAqKWNoYW4pOworCisJY2hhbi0+aXJxX2NsYWltZWQgPSAwOworCisJaWYgKCEoY2hhbm5lbCAmIERNQUNIX0xPV19MRVZFTCkpCisJCWRtYV9jaGFuX21hcFtjaGFubmVsXSA9IE5VTEw7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9mcmVlKTsKKworc3RhdGljIGludCBzM2MyNDEwX2RtYV9kb3N0b3Aoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXByX2RlYnVnKCIlczpcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlkYmdfc2hvd2NoYW4oY2hhbik7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzM2MyNDEwX2RtYV9jYWxsX29wKGNoYW4sICBTM0MyNDEwX0RNQU9QX1NUT1ApOworCisJdG1wID0gZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RNQVNLVFJJRyk7CisJdG1wIHw9IFMzQzI0MTBfRE1BU0tUUklHX1NUT1A7CisJLy90bXAgJj0gflMzQzI0MTBfRE1BU0tUUklHX09OOworCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcsIHRtcCk7CisKKyNpZiAwCisJLyogc2hvdWxkIGFsc28gY2xlYXIgaW50ZXJydXB0cywgYWNjb3JkaW5nIHRvIFdpbkNFIEJTUCAqLworCXRtcCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OKTsKKwl0bXAgfD0gUzNDMjQxMF9EQ09OX05PUkVMT0FEOworCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OLCB0bXApOworI2VuZGlmCisKKwkvKiBzaG91bGQgc3RvcCBkbyB0aGlzLCBvciBzaG91bGQgd2Ugd2FpdCBmb3IgZmx1c2g/ICovCisJY2hhbi0+c3RhdGUgICAgICA9IFMzQzI0MTBfRE1BX0lETEU7CisJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF9OT05FOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgczNjMjQxMF9kbWFfd2FpdGZvcnN0b3Aoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSAweDEwMDAwOworCisJd2hpbGUgKHRpbWVvdXQtLSA+IDApIHsKKwkJdG1wID0gZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RNQVNLVFJJRyk7CisKKwkJaWYgKCEodG1wICYgUzNDMjQxMF9ETUFTS1RSSUdfT04pKQorCQkJcmV0dXJuOworCX0KKworCXByX2RlYnVnKCJkbWElZDogZmFpbGVkIHRvIHN0b3A/XG4iLCBjaGFuLT5udW1iZXIpOworfQorCisKKy8qIHMzYzI0MTBfZG1hX2ZsdXNoCisgKgorICogc3RvcCB0aGUgY2hhbm5lbCwgYW5kIHJlbW92ZSBhbGwgY3VycmVudCBhbmQgcGVuZGluZyB0cmFuc2ZlcnMKKyovCisKK3N0YXRpYyBpbnQgczNjMjQxMF9kbWFfZmx1c2goc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2J1ZiAqYnVmLCAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJfZGVidWcoIiVzOiBjaGFuICVwICglZClcbiIsIF9fRlVOQ1RJT05fXywgY2hhbiwgY2hhbi0+bnVtYmVyKTsKKworCWRiZ19zaG93Y2hhbihjaGFuKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmIChjaGFuLT5zdGF0ZSAhPSBTM0MyNDEwX0RNQV9JRExFKSB7CisJCXByX2RlYnVnKCIlczogc3RvcHBpbmcgY2hhbm5lbC4uLlxuIiwgX19GVU5DVElPTl9fICk7CisJCXMzYzI0MTBfZG1hX2N0cmwoY2hhbi0+bnVtYmVyLCBTM0MyNDEwX0RNQU9QX1NUT1ApOworCX0KKworCWJ1ZiA9IGNoYW4tPmN1cnI7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlidWYgPSBjaGFuLT5uZXh0OworCisJY2hhbi0+Y3VyciA9IGNoYW4tPm5leHQgPSBjaGFuLT5lbmQgPSBOVUxMOworCisJaWYgKGJ1ZiAhPSBOVUxMKSB7CisJCWZvciAoIDsgYnVmICE9IE5VTEw7IGJ1ZiA9IG5leHQpIHsKKwkJCW5leHQgPSBidWYtPm5leHQ7CisKKwkJCXByX2RlYnVnKCIlczogZnJlZSBidWZmZXIgJXAsIG5leHQgJXBcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBidWYsIGJ1Zi0+bmV4dCk7CisKKwkJCXMzYzI0MTBfZG1hX2J1ZmZkb25lKGNoYW4sIGJ1ZiwgUzNDMjQxMF9SRVNfQUJPUlQpOworCQkJczNjMjQxMF9kbWFfZnJlZWJ1ZihidWYpOworCQl9CisJfQorCisJZGJnX3Nob3dyZWdzKGNoYW4pOworCisJczNjMjQxMF9kbWFfd2FpdGZvcnN0b3AoY2hhbik7CisKKyNpZiAwCisJLyogc2hvdWxkIGFsc28gY2xlYXIgaW50ZXJydXB0cywgYWNjb3JkaW5nIHRvIFdpbkNFIEJTUCAqLworCXsKKwkJdW5zaWduZWQgbG9uZyB0bXA7CisKKwkJdG1wID0gZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RDT04pOworCQl0bXAgfD0gUzNDMjQxMF9EQ09OX05PUkVMT0FEOworCQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENPTiwgdG1wKTsKKwl9CisjZW5kaWYKKworCWRiZ19zaG93cmVncyhjaGFuKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitpbnQKK3MzYzI0MTBfZG1hX3N0YXJ0ZWQoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRiZ19zaG93Y2hhbihjaGFuKTsKKworCS8qIGlmIHdlJ3ZlIG9ubHkgbG9hZGVkIG9uZSBidWZmZXIgb250byB0aGUgY2hhbm5lbCwgdGhlbiBjaGVjCisJICogdG8gc2VlIGlmIHdlIGhhdmUgYW5vdGhlciwgYW5kIGlmIHNvLCB0cnkgYW5kIGxvYWQgaXQgc28gd2hlbgorCSAqIHRoZSBmaXJzdCBidWZmZXIgaXMgZmluaXNoZWQsIHRoZSBuZXcgb25lIHdpbGwgYmUgbG9hZGVkIG9udG8KKwkgKiB0aGUgY2hhbm5lbCAqLworCisJaWYgKGNoYW4tPm5leHQgIT0gTlVMTCkgeworCQlpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRCkgeworCisJCQlpZiAoczNjMjQxMF9kbWFfd2FpdGZvcmxvYWQoY2hhbiwgX19MSU5FX18pID09IDApIHsKKwkJCQlwcl9kZWJ1ZygiJXM6IGJ1ZmYgbm90IHlldCBsb2FkZWQsIG5vIG1vcmUgdG9kb1xuIiwKKwkJCQkJIF9fRlVOQ1RJT05fXyk7CisJCQl9IGVsc2UgeworCQkJCWNoYW4tPmxvYWRfc3RhdGUgPSBTM0MyNDEwX0RNQUxPQURfMVJVTk5JTkc7CisJCQkJczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcihjaGFuLCBjaGFuLT5uZXh0KTsKKwkJCX0KKworCQl9IGVsc2UgaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HKSB7CisJCQlzM2MyNDEwX2RtYV9sb2FkYnVmZmVyKGNoYW4sIGNoYW4tPm5leHQpOworCQl9CisJfQorCisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKKworfQorCitpbnQKK3MzYzI0MTBfZG1hX2N0cmwoZG1hY2hfdCBjaGFubmVsLCBlbnVtIHMzYzI0MTBfY2hhbl9vcCBvcCkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKKworCWlmIChjaGFuID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChvcCkgeworCWNhc2UgUzNDMjQxMF9ETUFPUF9TVEFSVDoKKwkJcmV0dXJuIHMzYzI0MTBfZG1hX3N0YXJ0KGNoYW4pOworCisJY2FzZSBTM0MyNDEwX0RNQU9QX1NUT1A6CisJCXJldHVybiBzM2MyNDEwX2RtYV9kb3N0b3AoY2hhbik7CisKKwljYXNlIFMzQzI0MTBfRE1BT1BfUEFVU0U6CisJY2FzZSBTM0MyNDEwX0RNQU9QX1JFU1VNRToKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwljYXNlIFMzQzI0MTBfRE1BT1BfRkxVU0g6CisJCXJldHVybiBzM2MyNDEwX2RtYV9mbHVzaChjaGFuKTsKKworCWNhc2UgUzNDMjQxMF9ETUFPUF9TVEFSVEVEOgorCQlyZXR1cm4gczNjMjQxMF9kbWFfc3RhcnRlZChjaGFuKTsKKworCWNhc2UgUzNDMjQxMF9ETUFPUF9USU1FT1VUOgorCQlyZXR1cm4gMDsKKworCX0KKworCXJldHVybiAtRU5PRU5UOyAgICAgIC8qIHVua25vd24sIGRvbid0IGJvdGhlciAqLworfQorCitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2N0cmwpOworCisvKiBETUEgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBjaGFubmVsCisgKgorICogRElTUkNDIC0+IHNvdXJjZSBvZiB0aGUgRE1BIChBSEIsQVBCKQorICogRElTUkMgIC0+IHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBETUEKKyAqIERJRFNUQyAtPiBkZXN0aW5hdGlvbiBvZiB0aGUgRE1BIChBSEIsQVBEKQorICogRElEU1QgIC0+IGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIERNQQorKi8KKworLyogczNjMjQxMF9kbWFfY29uZmlnCisgKgorICogeGZlcnNpemU6ICAgICBzaXplIG9mIHVuaXQgaW4gYnl0ZXMgKDEsMiw0KQorICogZGNvbjogICAgICAgICBiYXNlIHZhbHVlIG9mIHRoZSBEQ09OeCByZWdpc3RlcgorKi8KKworaW50IHMzYzI0MTBfZG1hX2NvbmZpZyhkbWFjaF90IGNoYW5uZWwsCisJCSAgICAgICBpbnQgeGZlcnVuaXQsCisJCSAgICAgICBpbnQgZGNvbikKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKKworCXByX2RlYnVnKCIlczogY2hhbj0lZCwgeGZlcl91bml0PSVkLCBkY29uPSUwOHhcbiIsCisJCSBfX0ZVTkNUSU9OX18sIGNoYW5uZWwsIHhmZXJ1bml0LCBkY29uKTsKKworCWlmIChjaGFuID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoIiVzOiBJbml0aWFsIGRjb24gaXMgJTA4eFxuIiwgX19GVU5DVElPTl9fLCBkY29uKTsKKworCWRjb24gfD0gY2hhbi0+ZGNvbiAmIGRtYV9zZWwuZGNvbl9tYXNrOworCisJcHJfZGVidWcoIiVzOiBOZXcgZGNvbiBpcyAlMDh4XG4iLCBfX0ZVTkNUSU9OX18sIGRjb24pOworCisJc3dpdGNoICh4ZmVydW5pdCkgeworCWNhc2UgMToKKwkJZGNvbiB8PSBTM0MyNDEwX0RDT05fQllURTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWRjb24gfD0gUzNDMjQxMF9EQ09OX0hBTEZXT1JEOworCQlicmVhazsKKworCWNhc2UgNDoKKwkJZGNvbiB8PSBTM0MyNDEwX0RDT05fV09SRDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6IGJhZCB0cmFuc2ZlciBzaXplICVkXG4iLCBfX0ZVTkNUSU9OX18sIHhmZXJ1bml0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGNvbiB8PSBTM0MyNDEwX0RDT05fSFdUUklHOworCWRjb24gfD0gUzNDMjQxMF9EQ09OX0lOVFJFUTsKKworCXByX2RlYnVnKCIlczogZGNvbiBub3cgJTA4eFxuIiwgX19GVU5DVElPTl9fLCBkY29uKTsKKworCWNoYW4tPmRjb24gPSBkY29uOworCWNoYW4tPnhmZXJfdW5pdCA9IHhmZXJ1bml0OworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfY29uZmlnKTsKKworaW50IHMzYzI0MTBfZG1hX3NldGZsYWdzKGRtYWNoX3QgY2hhbm5lbCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOworCisJaWYgKGNoYW4gPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygiJXM6IGNoYW49JXAsIGZsYWdzPSUwOHhcbiIsIF9fRlVOQ1RJT05fXywgY2hhbiwgZmxhZ3MpOworCisJY2hhbi0+ZmxhZ3MgPSBmbGFnczsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX3NldGZsYWdzKTsKKworCisvKiBkbyB3ZSBuZWVkIHRvIHByb3RlY3QgdGhlIHNldHRpbmdzIG9mIHRoZSBmaWVsZHMgZnJvbQorICogaXJxPworKi8KKworaW50IHMzYzI0MTBfZG1hX3NldF9vcGZuKGRtYWNoX3QgY2hhbm5lbCwgczNjMjQxMF9kbWFfb3Bmbl90IHJ0bikKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKKworCWlmIChjaGFuID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoIiVzOiBjaGFuPSVwLCBvcCBydG49JXBcbiIsIF9fRlVOQ1RJT05fXywgY2hhbiwgcnRuKTsKKworCWNoYW4tPm9wX2ZuID0gcnRuOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfc2V0X29wZm4pOworCitpbnQgczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKGRtYWNoX3QgY2hhbm5lbCwgczNjMjQxMF9kbWFfY2Jmbl90IHJ0bikKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKKworCWlmIChjaGFuID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoIiVzOiBjaGFuPSVwLCBjYWxsYmFjayBydG49JXBcbiIsIF9fRlVOQ1RJT05fXywgY2hhbiwgcnRuKTsKKworCWNoYW4tPmNhbGxiYWNrX2ZuID0gcnRuOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKTsKKworLyogczNjMjQxMF9kbWFfZGV2Y29uZmlnCisgKgorICogY29uZmlndXJlIHRoZSBkbWEgc291cmNlL2Rlc3RpbmF0aW9uIGhhcmR3YXJlIHR5cGUgYW5kIGFkZHJlc3MKKyAqCisgKiBzb3VyY2U6ICAgIFMzQzI0MTBfRE1BU1JDX0hXOiBzb3VyY2UgaXMgaGFyZHdhcmUKKyAqICAgICAgICAgICAgUzNDMjQxMF9ETUFTUkNfTUVNOiBzb3VyY2UgaXMgbWVtb3J5CisgKgorICogaHdjZmc6ICAgICB0aGUgdmFsdWUgZm9yIHh4eFNUQ24gcmVnaXN0ZXIsCisgKiAgICAgICAgICAgIGJpdCAwOiAwPWluY3JlbWVudCBwb2ludGVyLCAxPWxlYXZlIHBvaW50ZXIKKyAqICAgICAgICAgICAgYml0IDE6IDA9c291Y3JlIGlzIEFIQiwgMT1zb3VjcmUgaXMgQVBCCisgKgorICogZGV2YWRkcjogICBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBzb3VyY2UKKyovCisKK2ludCBzM2MyNDEwX2RtYV9kZXZjb25maWcoaW50IGNoYW5uZWwsCisJCQkgIGVudW0gczNjMjQxMF9kbWFzcmMgc291cmNlLAorCQkJICBpbnQgaHdjZmcsCisJCQkgIHVuc2lnbmVkIGxvbmcgZGV2YWRkcikKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKKworCWlmIChjaGFuID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoIiVzOiBzb3VyY2U9JWQsIGh3Y2ZnPSUwOHgsIGRldmFkZHI9JTA4bHhcbiIsCisJCSBfX0ZVTkNUSU9OX18sIChpbnQpc291cmNlLCBod2NmZywgZGV2YWRkcik7CisKKwljaGFuLT5zb3VyY2UgPSBzb3VyY2U7CisJY2hhbi0+ZGV2X2FkZHIgPSBkZXZhZGRyOworCisJc3dpdGNoIChzb3VyY2UpIHsKKwljYXNlIFMzQzI0MTBfRE1BU1JDX0hXOgorCQkvKiBzb3VyY2UgaXMgaGFyZHdhcmUgKi8KKwkJcHJfZGVidWcoIiVzOiBodyBzb3VyY2UsIGRldmFkZHI9JTA4bHgsIGh3Y2ZnPSVkXG4iLAorCQkJIF9fRlVOQ1RJT05fXywgZGV2YWRkciwgaHdjZmcpOworCQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElTUkNDLCBod2NmZyAmIDMpOworCQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElTUkMsICBkZXZhZGRyKTsKKwkJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RJRFNUQywgKDA8PDEpIHwgKDA8PDApKTsKKworCQljaGFuLT5hZGRyX3JlZyA9IGRtYV9yZWdhZGRyKGNoYW4sIFMzQzI0MTBfRE1BX0RJRFNUKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFMzQzI0MTBfRE1BU1JDX01FTToKKwkJLyogc291cmNlIGlzIG1lbW9yeSAqLworCQlwcl9kZWJ1ZyggIiVzOiBtZW0gc291cmNlLCBkZXZhZGRyPSUwOGx4LCBod2NmZz0lZFxuIiwKKwkJCSAgX19GVU5DVElPTl9fLCBkZXZhZGRyLCBod2NmZyk7CisJCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ESVNSQ0MsICgwPDwxKSB8ICgwPDwwKSk7CisJCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ESURTVCwgIGRldmFkZHIpOworCQlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElEU1RDLCBod2NmZyAmIDMpOworCisJCWNoYW4tPmFkZHJfcmVnID0gZG1hX3JlZ2FkZHIoY2hhbiwgUzNDMjQxMF9ETUFfRElTUkMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBpbnZhbGlkIHNvdXJjZSB0eXBlICglZClcbiIsIGNoYW5uZWwsIHNvdXJjZSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfZGV2Y29uZmlnKTsKKworLyogczNjMjQxMF9kbWFfZ2V0cG9zaXRpb24KKyAqCisgKiByZXR1cm5zIHRoZSBjdXJyZW50IHRyYW5zZmVyIHBvaW50cyBmb3IgdGhlIGRtYSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisqLworCitpbnQgczNjMjQxMF9kbWFfZ2V0cG9zaXRpb24oZG1hY2hfdCBjaGFubmVsLCBkbWFfYWRkcl90ICpzcmMsIGRtYV9hZGRyX3QgKmRzdCkKK3sKKyAJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBsb29rdXBfZG1hX2NoYW5uZWwoY2hhbm5lbCk7CisKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzcmMgIT0gTlVMTCkKKyAJCSpzcmMgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENTUkMpOworCisgCWlmIChkc3QgIT0gTlVMTCkKKyAJCSpkc3QgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENEU1QpOworCisgCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKTsKKworCisvKiBzeXN0ZW0gZGV2aWNlIGNsYXNzICovCisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBzM2MyNDEwX2RtYV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY3AgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiwgZGV2KTsKKworCXByaW50ayhLRVJOX0RFQlVHICJzdXNwZW5kaW5nIGRtYSBjaGFubmVsICVkXG4iLCBjcC0+bnVtYmVyKTsKKworCWlmIChkbWFfcmRyZWcoY3AsIFMzQzI0MTBfRE1BX0RNQVNLVFJJRykgJiBTM0MyNDEwX0RNQVNLVFJJR19PTikgeworCQkvKiB0aGUgZG1hIGNoYW5uZWwgaXMgc3RpbGwgd29ya2luZywgd2hpY2ggaXMgcHJvYmFibHkKKwkJICogYSBiYWQgdGhpbmcgdG8gZG8gb3ZlciBzdXNwZW5kL3Jlc3VtZS4gV2Ugc3RvcCB0aGUKKwkJICogY2hhbm5lbCBhbmQgYXNzdW1lIHRoYXQgdGhlIGNsaWVudCBpcyBlaXRoZXIgZ29pbmcgdG8KKwkJICogcmV0cnkgYWZ0ZXIgcmVzdW1lLCBvciB0aGF0IGl0IGlzIGJyb2tlbi4KKwkJICovCisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZG1hOiBzdG9wcGluZyBjaGFubmVsICVkIGR1ZSB0byBzdXNwZW5kXG4iLAorCQkgICAgICAgY3AtPm51bWJlcik7CisKKwkJczNjMjQxMF9kbWFfZG9zdG9wKGNwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNDEwX2RtYV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUgczNjMjQxMF9kbWFfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0MTBfZG1hX3Jlc3VtZSAgTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGRtYV9zeXNjbGFzcyA9IHsKKwlzZXRfa3NldF9uYW1lKCJzM2MyNHh4LWRtYSIpLAorCS5zdXNwZW5kCT0gczNjMjQxMF9kbWFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0MTBfZG1hX3Jlc3VtZSwKK307CisKKy8qIGttZW0gY2FjaGUgaW1wbGVtZW50YXRpb24gKi8KKworc3RhdGljIHZvaWQgczNjMjQxMF9kbWFfY2FjaGVfY3Rvcih2b2lkICpwLCBzdHJ1Y3Qga21lbV9jYWNoZSAqYywgdW5zaWduZWQgbG9uZyBmKQoreworCW1lbXNldChwLCAwLCBzaXplb2Yoc3RydWN0IHMzYzI0MTBfZG1hX2J1ZikpOworfQorCisvKiBpbml0aWFsaXNhdGlvbiBjb2RlICovCisKK2ludCBfX2luaXQgczNjMjR4eF9kbWFfc3lzY2xhc3NfaW5pdCh2b2lkKQoreworCWludCByZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmRtYV9zeXNjbGFzcyk7CisKKwlpZiAocmV0ICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiZG1hIHN5c2NsYXNzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworY29yZV9pbml0Y2FsbChzM2MyNHh4X2RtYV9zeXNjbGFzc19pbml0KTsKKworaW50IF9faW5pdCBzM2MyNHh4X2RtYV9zeXNkZXZfcmVnaXN0ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY3AgPSBzM2MyNDEwX2NoYW5zOworCWludCBjaGFubmVsLCByZXQ7CisKKwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgZG1hX2NoYW5uZWxzOyBjcCsrLCBjaGFubmVsKyspIHsKKwkJY3AtPmRldi5jbHMgPSAmZG1hX3N5c2NsYXNzOworCQljcC0+ZGV2LmlkICA9IGNoYW5uZWw7CisJCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmY3AtPmRldik7CisKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciByZWdpc3RlcmluZyBkZXYgZm9yIGRtYSAlZFxuIiwKKwkJCSAgICAgICBjaGFubmVsKTsKKyAJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoczNjMjR4eF9kbWFfc3lzZGV2X3JlZ2lzdGVyKTsKKworaW50IF9faW5pdCBzM2MyNHh4X2RtYV9pbml0KHVuc2lnbmVkIGludCBjaGFubmVscywgdW5zaWduZWQgaW50IGlycSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc3RyaWRlKQoreworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjcDsKKwlpbnQgY2hhbm5lbDsKKwlpbnQgcmV0OworCisJcHJpbnRrKCJTM0MyNFhYIERNQSBEcml2ZXIsIChjKSAyMDAzLTIwMDQsMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOworCisJZG1hX2NoYW5uZWxzID0gY2hhbm5lbHM7CisKKwlkbWFfYmFzZSA9IGlvcmVtYXAoUzNDMjRYWF9QQV9ETUEsIHN0cmlkZSAqIGNoYW5uZWxzKTsKKwlpZiAoZG1hX2Jhc2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImRtYSBmYWlsZWQgdG8gcmVtYXAgcmVnaXN0ZXIgYmxvY2tcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkbWFfa21lbSA9IGttZW1fY2FjaGVfY3JlYXRlKCJkbWFfZGVzYyIsCisJCQkJICAgICBzaXplb2Yoc3RydWN0IHMzYzI0MTBfZG1hX2J1ZiksIDAsCisJCQkJICAgICBTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJICAgICBzM2MyNDEwX2RtYV9jYWNoZV9jdG9yLCBOVUxMKTsKKworCWlmIChkbWFfa21lbSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZG1hIGZhaWxlZCB0byBtYWtlIGttZW0gY2FjaGVcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgY2hhbm5lbHM7ICBjaGFubmVsKyspIHsKKwkJY3AgPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKworCQltZW1zZXQoY3AsIDAsIHNpemVvZihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbikpOworCisJCS8qIGRtYSBjaGFubmVsIGlycXMgYXJlIGluIG9yZGVyLi4gKi8KKwkJY3AtPm51bWJlciA9IGNoYW5uZWw7CisJCWNwLT5pcnEgICAgPSBjaGFubmVsICsgaXJxOworCQljcC0+cmVncyAgID0gZG1hX2Jhc2UgKyAoY2hhbm5lbCAqIHN0cmlkZSk7CisKKwkJLyogcG9pbnQgY3VycmVudCBzdGF0cyBzb21ld2hlcmUgKi8KKwkJY3AtPnN0YXRzICA9ICZjcC0+c3RhdHNfc3RvcmU7CisJCWNwLT5zdGF0c19zdG9yZS50aW1lb3V0X3Nob3J0ZXN0ID0gTE9OR19NQVg7CisKKwkJLyogYmFzaWMgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisKKwkJY3AtPmxvYWRfdGltZW91dCA9IDE8PDE4OworCisJCXByaW50aygiRE1BIGNoYW5uZWwgJWQgYXQgJXAsIGlycSAlZFxuIiwKKwkJICAgICAgIGNwLT5udW1iZXIsIGNwLT5yZWdzLCBjcC0+aXJxKTsKKwl9CisKKwlyZXR1cm4gMDsKKworIGVycjoKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZG1hX2ttZW0pOworCWlvdW5tYXAoZG1hX2Jhc2UpOworCWRtYV9iYXNlID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgczNjMjQxMF9kbWFfaW5pdCh2b2lkKQoreworCXJldHVybiBzM2MyNHh4X2RtYV9pbml0KDQsIElSUV9ETUEwLCAweDQwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF92YWxpZCh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gKGNoYW5uZWwgJiBETUFfQ0hfVkFMSUQpOworfQorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyICpkbWFfb3JkZXI7CisKKworLyogczNjMjQxMF9kbWFfbWFwX2NoYW5uZWwoKQorICoKKyAqIHR1cm4gdGhlIHZpcnR1YWwgY2hhbm5lbCBudW1iZXIgaW50byBhIHJlYWwsIGFuZCB1bi11c2VkIGhhcmR3YXJlCisgKiBjaGFubmVsLgorICoKKyAqIGZpcnN0LCB0cnkgdGhlIGRtYSBvcmRlcmluZyBnaXZlbiB0byB1cyBieSBlaXRoZXIgdGhlIHJlbGV2YW50CisgKiBkbWEgY29kZSwgb3IgdGhlIGJvYXJkLiBUaGVuIGp1c3QgZmluZCB0aGUgZmlyc3QgdXNhYmxlIGZyZWUKKyAqIGNoYW5uZWwKKyovCisKK3N0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpzM2MyNDEwX2RtYV9tYXBfY2hhbm5lbChpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgczNjMjR4eF9kbWFfb3JkZXJfY2ggKm9yZCA9IE5VTEw7CisJc3RydWN0IHMzYzI0eHhfZG1hX21hcCAqY2hfbWFwOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpkbWFjaDsKKwlpbnQgY2g7CisKKwlpZiAoZG1hX3NlbC5tYXAgPT0gTlVMTCB8fCBjaGFubmVsID4gZG1hX3NlbC5tYXBfc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwljaF9tYXAgPSBkbWFfc2VsLm1hcCArIGNoYW5uZWw7CisKKwkvKiBmaXJzdCwgdHJ5IHRoZSBib2FyZCBtYXBwaW5nICovCisKKwlpZiAoZG1hX29yZGVyKSB7CisJCW9yZCA9ICZkbWFfb3JkZXItPmNoYW5uZWxzW2NoYW5uZWxdOworCisJCWZvciAoY2ggPSAwOyBjaCA8IGRtYV9jaGFubmVsczsgY2grKykgeworCQkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKG9yZC0+bGlzdFtjaF0pKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoczNjMjQxMF9jaGFuc1tvcmQtPmxpc3RbY2hdXS5pbl91c2UgPT0gMCkgeworCQkJCWNoID0gb3JkLT5saXN0W2NoXSAmIH5ETUFfQ0hfVkFMSUQ7CisJCQkJZ290byBmb3VuZDsKKwkJCX0KKwkJfQorCisJCWlmIChvcmQtPmZsYWdzICYgRE1BX0NIX05FVkVSKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogc2Vjb25kLCBzZWFyY2ggdGhlIGNoYW5uZWwgbWFwIGZvciBmaXJzdCBmcmVlICovCisKKwlmb3IgKGNoID0gMDsgY2ggPCBkbWFfY2hhbm5lbHM7IGNoKyspIHsKKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX21hcC0+Y2hhbm5lbHNbY2hdKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzM2MyNDEwX2NoYW5zW2NoXS5pbl91c2UgPT0gMCkgeworCQkJcHJpbnRrKCJtYXBwZWQgY2hhbm5lbCAlZCB0byAlZFxuIiwgY2hhbm5lbCwgY2gpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoY2ggPj0gZG1hX2NoYW5uZWxzKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHVwZGF0ZSBvdXIgY2hhbm5lbCBtYXBwaW5nICovCisKKyBmb3VuZDoKKwlkbWFjaCA9ICZzM2MyNDEwX2NoYW5zW2NoXTsKKwlkbWFfY2hhbl9tYXBbY2hhbm5lbF0gPSBkbWFjaDsKKworCS8qIHNlbGVjdCB0aGUgY2hhbm5lbCAqLworCisJKGRtYV9zZWwuc2VsZWN0KShkbWFjaCwgY2hfbWFwKTsKKworCXJldHVybiBkbWFjaDsKK30KKworc3RhdGljIGludCBzM2MyNHh4X2RtYV9jaGVja19lbnRyeShzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICptYXAsIGludCBjaCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBzM2MyNHh4X2RtYV9pbml0X21hcChzdHJ1Y3QgczNjMjR4eF9kbWFfc2VsZWN0aW9uICpzZWwpCit7CisJc3RydWN0IHMzYzI0eHhfZG1hX21hcCAqbm1hcDsKKwlzaXplX3QgbWFwX3N6ID0gc2l6ZW9mKCpubWFwKSAqIHNlbC0+bWFwX3NpemU7CisJaW50IHB0cjsKKworCW5tYXAgPSBrbWFsbG9jKG1hcF9zeiwgR0ZQX0tFUk5FTCk7CisJaWYgKG5tYXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkobm1hcCwgc2VsLT5tYXAsIG1hcF9zeik7CisJbWVtY3B5KCZkbWFfc2VsLCBzZWwsIHNpemVvZigqc2VsKSk7CisKKwlkbWFfc2VsLm1hcCA9IG5tYXA7CisKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IHNlbC0+bWFwX3NpemU7IHB0cisrKQorCQlzM2MyNHh4X2RtYV9jaGVja19lbnRyeShubWFwK3B0ciwgcHRyKTsKKworCXJldHVybiAwOworfQorCitpbnQgX19pbml0IHMzYzI0eHhfZG1hX29yZGVyX3NldChzdHJ1Y3QgczNjMjR4eF9kbWFfb3JkZXIgKm9yZCkKK3sKKwlzdHJ1Y3QgczNjMjR4eF9kbWFfb3JkZXIgKm5vcmQgPSBkbWFfb3JkZXI7CisKKwlpZiAobm9yZCA9PSBOVUxMKQorCQlub3JkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAobm9yZCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAibm8gbWVtb3J5IHRvIHN0b3JlIGRtYSBjaGFubmVsIG9yZGVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZG1hX29yZGVyID0gbm9yZDsKKwltZW1jcHkobm9yZCwgb3JkLCBzaXplb2Yoc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzNhMDljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYwpAQCAtMCwwICsxLDE4OCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0WFggR1BJTyBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisKK3ZvaWQgczNjMjQxMF9ncGlvX2NmZ3Bpbih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gUzNDMjRYWF9HUElPX0JBU0UocGluKTsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdW5zaWduZWQgbG9uZyBjb247CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChwaW4gPCBTM0MyNDEwX0dQSU9fQkFOS0IpIHsKKwkJbWFzayA9IDEgPDwgUzNDMjQxMF9HUElPX09GRlNFVChwaW4pOworCX0gZWxzZSB7CisJCW1hc2sgPSAzIDw8IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKSoyOworCX0KKworCXN3aXRjaCAoZnVuY3Rpb24pIHsKKwljYXNlIFMzQzI0MTBfR1BJT19MRUFWRToKKwkJbWFzayA9IDA7CisJCWZ1bmN0aW9uID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzI0MTBfR1BJT19JTlBVVDoKKwljYXNlIFMzQzI0MTBfR1BJT19PVVRQVVQ6CisJY2FzZSBTM0MyNDEwX0dQSU9fU0ZOMjoKKwljYXNlIFMzQzI0MTBfR1BJT19TRk4zOgorCQlpZiAocGluIDwgUzNDMjQxMF9HUElPX0JBTktCKSB7CisJCQlmdW5jdGlvbiAtPSAxOworCQkJZnVuY3Rpb24gJj0gMTsKKwkJCWZ1bmN0aW9uIDw8PSBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbik7CisJCX0gZWxzZSB7CisJCQlmdW5jdGlvbiAmPSAzOworCQkJZnVuY3Rpb24gPDw9IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKSoyOworCQl9CisJfQorCisJLyogbW9kaWZ5IHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIgd3dpdGggSVJRcyBvZmYgKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNvbiAgPSBfX3Jhd19yZWFkbChiYXNlICsgMHgwMCk7CisJY29uICY9IH5tYXNrOworCWNvbiB8PSBmdW5jdGlvbjsKKworCV9fcmF3X3dyaXRlbChjb24sIGJhc2UgKyAweDAwKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fY2ZncGluKTsKKwordW5zaWduZWQgaW50IHMzYzI0MTBfZ3Bpb19nZXRjZmcodW5zaWduZWQgaW50IHBpbikKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBTM0MyNFhYX0dQSU9fQkFTRShwaW4pOworCXVuc2lnbmVkIGxvbmcgdmFsID0gX19yYXdfcmVhZGwoYmFzZSk7CisKKwlpZiAocGluIDwgUzNDMjQxMF9HUElPX0JBTktCKSB7CisJCXZhbCA+Pj0gUzNDMjQxMF9HUElPX09GRlNFVChwaW4pOworCQl2YWwgJj0gMTsKKwkJdmFsICs9IDE7CisJfSBlbHNlIHsKKwkJdmFsID4+PSBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikqMjsKKwkJdmFsICY9IDM7CisJfQorCisJcmV0dXJuIHZhbCB8IFMzQzI0MTBfR1BJT19JTlBVVDsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fZ2V0Y2ZnKTsKKwordm9pZCBzM2MyNDEwX2dwaW9fcHVsbHVwKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB0bykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBTM0MyNFhYX0dQSU9fQkFTRShwaW4pOworCXVuc2lnbmVkIGxvbmcgb2ZmcyA9IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdXA7CisKKwlpZiAocGluIDwgUzNDMjQxMF9HUElPX0JBTktCKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl1cCA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDA4KTsKKwl1cCAmPSB+KDFMIDw8IG9mZnMpOworCXVwIHw9IHRvIDw8IG9mZnM7CisJX19yYXdfd3JpdGVsKHVwLCBiYXNlICsgMHgwOCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9ncGlvX3B1bGx1cCk7CisKK3ZvaWQgczNjMjQxMF9ncGlvX3NldHBpbih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgdG8pCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gUzNDMjRYWF9HUElPX0JBU0UocGluKTsKKwl1bnNpZ25lZCBsb25nIG9mZnMgPSBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGRhdDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDA0KTsKKwlkYXQgJj0gfigxIDw8IG9mZnMpOworCWRhdCB8PSB0byA8PCBvZmZzOworCV9fcmF3X3dyaXRlbChkYXQsIGJhc2UgKyAweDA0KTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fc2V0cGluKTsKKwordW5zaWduZWQgaW50IHMzYzI0MTBfZ3Bpb19nZXRwaW4odW5zaWduZWQgaW50IHBpbikKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBTM0MyNFhYX0dQSU9fQkFTRShwaW4pOworCXVuc2lnbmVkIGxvbmcgb2ZmcyA9IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKTsKKworCXJldHVybiBfX3Jhd19yZWFkbChiYXNlICsgMHgwNCkgJiAoMTw8IG9mZnMpOworfQorCitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZ3Bpb19nZXRwaW4pOworCit1bnNpZ25lZCBpbnQgczNjMjQxMF9tb2RpZnlfbWlzY2NyKHVuc2lnbmVkIGludCBjbGVhciwgdW5zaWduZWQgaW50IGNoYW5nZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbWlzY2NyOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCW1pc2NjciA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfTUlTQ0NSKTsKKwltaXNjY3IgJj0gfmNsZWFyOworCW1pc2NjciBePSBjaGFuZ2U7CisJX19yYXdfd3JpdGVsKG1pc2NjciwgUzNDMjRYWF9NSVNDQ1IpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiBtaXNjY3I7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9tb2RpZnlfbWlzY2NyKTsKKworaW50IHMzYzI0MTBfZ3Bpb19nZXRpcnEodW5zaWduZWQgaW50IHBpbikKK3sKKwlpZiAocGluIDwgUzNDMjQxMF9HUEYwIHx8IHBpbiA+IFMzQzI0MTBfR1BHMTUpCisJCXJldHVybiAtMTsJLyogbm90IHZhbGlkIGludGVycnVwdHMgKi8KKworCWlmIChwaW4gPCBTM0MyNDEwX0dQRzAgJiYgcGluID4gUzNDMjQxMF9HUEY3KQorCQlyZXR1cm4gLTE7CS8qIG5vdCB2YWxpZCBwaW4gKi8KKworCWlmIChwaW4gPCBTM0MyNDEwX0dQRjQpCisJCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEYwKSArIElSUV9FSU5UMDsKKworCWlmIChwaW4gPCBTM0MyNDEwX0dQRzApCisJCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEY0KSArIElSUV9FSU5UNDsKKworCXJldHVybiAocGluIC0gUzNDMjQxMF9HUEcwKSArIElSUV9FSU5UODsKK30KKworRVhQT1JUX1NZTUJPTChzM2MyNDEwX2dwaW9fZ2V0aXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTE4NjM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCkBAIC0wLDAgKzEsODAxIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogQ2hhbmdlbG9nOgorICoKKyAqICAgMjItSnVsLTIwMDQgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgICAgICAgICAgIEZpeGVkIGNvbXBpbGUgd2FybmluZ3MKKyAqCisgKiAgIDIyLUp1bC0yMDA0ICBSb2MgV3UgPGNvb2xvbmV5QHlhaG9vLmNvbS5jbj4KKyAqICAgICAgICAgICAgICAgIEZpeGVkIHMzY19leHRpcnFfdHlwZQorICoKKyAqICAgMjEtSnVsLTIwMDQgIEFybmF1ZCBQYXRhcmQgKFJ0cCkgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+CisgKiAgICAgICAgICAgICAgICBBZGRpdGlvbiBvZiBBREMvVEMgZGVtdXgKKyAqCisgKiAgIDA0LU9jdC0yMDA0ICBLbGF1cyBGZXRzY2hlciA8ay5mZXRzY2hlckBmZXRyb24uZGU+CisgKgkJICBGaXggZm9yIHNldF9pcnFfdHlwZSgpIG9uIGxvdyBFSU5UIG51bWJlcnMKKyAqCisgKiAgIDA1LU9jdC0yMDA0ICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgkJICBUaWR5IHVwIEtGJ3MgcGF0Y2ggYW5kIHNvcnQgb3V0IG5ldyByZWxlYXNlCisgKgorICogICAwNS1PY3QtMjAwNCAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJCSAgQWRkIHN1cHBvcnQgZm9yIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbHMKKyAqCisgKiAgIDA0LU5vdi0yMDA0ICBCZW4gRG9va3MKKyAqCQkgIEZpeCBzdGFuZGFyZCBJUlEgd2FrZSBmb3IgRUlOVDAuLjQgYW5kIFJUQworICoKKyAqICAgMjItRmViLTIwMDUgIEJlbiBEb29rcworICoJCSAgRml4ZWQgZWRnZS10cmlnZ2VyaW5nIG9uIEFEQyBJUlEKKyAqCisgKiAgIDI4LUp1bi0yMDA1ICBCZW4gRG9va3MKKyAqCQkgIE1hcmsgSVJRX0xDRCB2YWxpZAorICoKKyAqICAgMjUtSnVsLTIwMDUgIEJlbiBEb29rcworICoJCSAgU3BsaXQgdGhlIFMzQzI0NDAgSVJRIGNvZGUgdG8gc2VwZXJhdGUgZmlsZQorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKworI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvaXJxLmg+CisKKy8qIHdha2V1cCBpcnEgY29udHJvbCAqLworCisjaWZkZWYgQ09ORklHX1BNCisKKy8qIHN0YXRlIGZvciBJUlFzIG92ZXIgc2xlZXAgKi8KKworLyogZGVmYXVsdCBpcyB0byBhbGxvdyBmb3IgRUlOVDAuLkVJTlQxNSwgYW5kIElSUV9SVEMgYXMgd2FrZXVwIHNvdXJjZXMKKyAqCisgKiBzZXQgYml0IHRvIDEgaW4gYWxsb3cgYml0ZmllbGQgdG8gZW5hYmxlIHRoZSB3YWtldXAgc2V0dGluZ3Mgb24gaXQKKyovCisKK3Vuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50YWxsb3cJPSAxTCA8PCAoSVJRX1JUQyAtIElSUV9FSU5UMCkgfCAweGZMOwordW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9pbnRtYXNrCT0gMHhmZmZmZmZmZkw7Cit1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRhbGxvdwk9IDB4MDAwMGZmZjBMOwordW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzawk9IDB4ZmZmZmZmZmZMOworCitpbnQKK3MzY19pcnFfd2FrZSh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGlycWJpdCA9IDEgPDwgKGlycW5vIC0gSVJRX0VJTlQwKTsKKworCWlmICghKHMzY19pcnF3YWtlX2ludGFsbG93ICYgaXJxYml0KSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJ3YWtlICVzIGZvciBpcnEgJWRcbiIsCisJICAgICAgIHN0YXRlID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwgaXJxbm8pOworCisJaWYgKCFzdGF0ZSkKKwkJczNjX2lycXdha2VfaW50bWFzayB8PSBpcnFiaXQ7CisJZWxzZQorCQlzM2NfaXJxd2FrZV9pbnRtYXNrICY9IH5pcnFiaXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorczNjX2lycWV4dF93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgYml0ID0gMUwgPDwgKGlycW5vIC0gRVhUSU5UX09GRik7CisKKwlpZiAoIShzM2NfaXJxd2FrZV9laW50YWxsb3cgJiBiaXQpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXByaW50ayhLRVJOX0lORk8gIndha2UgJXMgZm9yIGlycSAlZFxuIiwKKwkgICAgICAgc3RhdGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBpcnFubyk7CisKKwlpZiAoIXN0YXRlKQorCQlzM2NfaXJxd2FrZV9laW50bWFzayB8PSBiaXQ7CisJZWxzZQorCQlzM2NfaXJxd2FrZV9laW50bWFzayAmPSB+Yml0OworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHMzY19pcnFleHRfd2FrZSBOVUxMCisjZGVmaW5lIHMzY19pcnFfd2FrZSBOVUxMCisjZW5kaWYKKworCitzdGF0aWMgdm9pZAorczNjX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlpcnFubyAtPSBJUlFfRUlOVDA7CisKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRNU0spOworCW1hc2sgfD0gMVVMIDw8IGlycW5vOworCV9fcmF3X3dyaXRlbChtYXNrLCBTM0MyNDEwX0lOVE1TSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorczNjX2lycV9hY2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXVuc2lnbmVkIGxvbmcgYml0dmFsID0gMVVMIDw8IChpcnFubyAtIElSUV9FSU5UMCk7CisKKwlfX3Jhd193cml0ZWwoYml0dmFsLCBTM0MyNDEwX1NSQ1BORCk7CisJX19yYXdfd3JpdGVsKGJpdHZhbCwgUzNDMjQxMF9JTlRQTkQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3MzY19pcnFfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJdW5zaWduZWQgbG9uZyBiaXR2YWwgPSAxVUwgPDwgKGlycW5vIC0gSVJRX0VJTlQwKTsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRNU0spOworCV9fcmF3X3dyaXRlbChtYXNrfGJpdHZhbCwgUzNDMjQxMF9JTlRNU0spOworCisJX19yYXdfd3JpdGVsKGJpdHZhbCwgUzNDMjQxMF9TUkNQTkQpOworCV9fcmF3X3dyaXRlbChiaXR2YWwsIFMzQzI0MTBfSU5UUE5EKTsKK30KKworCitzdGF0aWMgdm9pZAorczNjX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCWlmIChpcnFubyAhPSBJUlFfVElNRVI0ICYmIGlycW5vICE9IElSUV9FSU5UOHQyMykKKwkJaXJxZGJmMigiczNjX2lycV91bm1hc2sgJWRcbiIsIGlycW5vKTsKKworCWlycW5vIC09IElSUV9FSU5UMDsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0lOVE1TSyk7CisJbWFzayAmPSB+KDFVTCA8PCBpcnFubyk7CisJX19yYXdfd3JpdGVsKG1hc2ssIFMzQzI0MTBfSU5UTVNLKTsKK30KKworc3RydWN0IGlycV9jaGlwIHMzY19pcnFfbGV2ZWxfY2hpcCA9IHsKKwkubmFtZQkJPSAiczNjLWxldmVsIiwKKwkuYWNrCQk9IHMzY19pcnFfbWFza2FjaywKKwkubWFzawkJPSBzM2NfaXJxX21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxX3VubWFzaywKKwkuc2V0X3dha2UJPSBzM2NfaXJxX3dha2UKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJzM2MiLAorCS5hY2sJCT0gczNjX2lycV9hY2ssCisJLm1hc2sJCT0gczNjX2lycV9tYXNrLAorCS51bm1hc2sJCT0gczNjX2lycV91bm1hc2ssCisJLnNldF93YWtlCT0gczNjX2lycV93YWtlCit9OworCitzdGF0aWMgdm9pZAorczNjX2lycWV4dF9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlpcnFubyAtPSBFWFRJTlRfT0ZGOworCisJbWFzayA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlOVE1BU0spOworCW1hc2sgfD0gKCAxVUwgPDwgaXJxbm8pOworCV9fcmF3X3dyaXRlbChtYXNrLCBTM0MyNFhYX0VJTlRNQVNLKTsKK30KKworc3RhdGljIHZvaWQKK3MzY19pcnFleHRfYWNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwl1bnNpZ25lZCBsb25nIHJlcTsKKwl1bnNpZ25lZCBsb25nIGJpdDsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwliaXQgPSAxVUwgPDwgKGlycW5vIC0gRVhUSU5UX09GRik7CisKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UTUFTSyk7CisKKwlfX3Jhd193cml0ZWwoYml0LCBTM0MyNFhYX0VJTlRQRU5EKTsKKworCXJlcSA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlOVFBFTkQpOworCXJlcSAmPSB+bWFzazsKKworCS8qIG5vdCBzdXJlIGlmIHdlIHNob3VsZCBiZSBhY2tpbmcgdGhlIHBhcmVudCBpcnEuLi4gKi8KKworCWlmIChpcnFubyA8PSBJUlFfRUlOVDcgKSB7CisJCWlmICgocmVxICYgMHhmMCkgPT0gMCkKKwkJCXMzY19pcnFfYWNrKElSUV9FSU5UNHQ3KTsKKwl9IGVsc2UgeworCQlpZiAoKHJlcSA+PiA4KSA9PSAwKQorCQkJczNjX2lycV9hY2soSVJRX0VJTlQ4dDIzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxZXh0X3VubWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJaXJxbm8gLT0gRVhUSU5UX09GRjsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRNQVNLKTsKKwltYXNrICY9IH4oIDFVTCA8PCBpcnFubyk7CisJX19yYXdfd3JpdGVsKG1hc2ssIFMzQzI0WFhfRUlOVE1BU0spOworfQorCitpbnQKK3MzY19pcnFleHRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwl2b2lkIF9faW9tZW0gKmV4dGludF9yZWc7CisJdm9pZCBfX2lvbWVtICpncGNvbl9yZWc7CisJdW5zaWduZWQgbG9uZyBncGNvbl9vZmZzZXQsIGV4dGludF9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBuZXd2YWx1ZSA9IDAsIHZhbHVlOworCisJaWYgKChpcnEgPj0gSVJRX0VJTlQwKSAmJiAoaXJxIDw9IElSUV9FSU5UMykpCisJeworCQlncGNvbl9yZWcgPSBTM0MyNDEwX0dQRkNPTjsKKwkJZXh0aW50X3JlZyA9IFMzQzI0WFhfRVhUSU5UMDsKKwkJZ3Bjb25fb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UMCkgKiAyOworCQlleHRpbnRfb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UMCkgKiA0OworCX0KKwllbHNlIGlmICgoaXJxID49IElSUV9FSU5UNCkgJiYgKGlycSA8PSBJUlFfRUlOVDcpKQorCXsKKwkJZ3Bjb25fcmVnID0gUzNDMjQxMF9HUEZDT047CisJCWV4dGludF9yZWcgPSBTM0MyNFhYX0VYVElOVDA7CisJCWdwY29uX29mZnNldCA9IChpcnEgLSAoRVhUSU5UX09GRikpICogMjsKKwkJZXh0aW50X29mZnNldCA9IChpcnEgLSAoRVhUSU5UX09GRikpICogNDsKKwl9CisJZWxzZSBpZiAoKGlycSA+PSBJUlFfRUlOVDgpICYmIChpcnEgPD0gSVJRX0VJTlQxNSkpCisJeworCQlncGNvbl9yZWcgPSBTM0MyNDEwX0dQR0NPTjsKKwkJZXh0aW50X3JlZyA9IFMzQzI0WFhfRVhUSU5UMTsKKwkJZ3Bjb25fb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UOCkgKiAyOworCQlleHRpbnRfb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UOCkgKiA0OworCX0KKwllbHNlIGlmICgoaXJxID49IElSUV9FSU5UMTYpICYmIChpcnEgPD0gSVJRX0VJTlQyMykpCisJeworCQlncGNvbl9yZWcgPSBTM0MyNDEwX0dQR0NPTjsKKwkJZXh0aW50X3JlZyA9IFMzQzI0WFhfRVhUSU5UMjsKKwkJZ3Bjb25fb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UOCkgKiAyOworCQlleHRpbnRfb2Zmc2V0ID0gKGlycSAtIElSUV9FSU5UMTYpICogNDsKKwl9IGVsc2UKKwkJcmV0dXJuIC0xOworCisJLyogU2V0IHRoZSBHUElPIHRvIGV4dGVybmFsIGludGVycnVwdCBtb2RlICovCisJdmFsdWUgPSBfX3Jhd19yZWFkbChncGNvbl9yZWcpOworCXZhbHVlID0gKHZhbHVlICYgfigzIDw8IGdwY29uX29mZnNldCkpIHwgKDB4MDIgPDwgZ3Bjb25fb2Zmc2V0KTsKKwlfX3Jhd193cml0ZWwodmFsdWUsIGdwY29uX3JlZyk7CisKKwkvKiBTZXQgdGhlIGV4dGVybmFsIGludGVycnVwdCB0byBwb2ludGVkIHRyaWdnZXIgdHlwZSAqLworCXN3aXRjaCAodHlwZSkKKwl7CisJCWNhc2UgSVJRVF9OT0VER0U6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBlZGdlIHNldHRpbmchXG4iKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSVJRVF9SSVNJTkc6CisJCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX1JJU0VFREdFOworCQkJYnJlYWs7CisKKwkJY2FzZSBJUlFUX0ZBTExJTkc6CisJCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX0ZBTExFREdFOworCQkJYnJlYWs7CisKKwkJY2FzZSBJUlFUX0JPVEhFREdFOgorCQkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9CT1RIRURHRTsKKwkJCWJyZWFrOworCisJCWNhc2UgSVJRVF9MT1c6CisJCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX0xPV0xFVjsKKwkJCWJyZWFrOworCisJCWNhc2UgSVJRVF9ISUdIOgorCQkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9ISUxFVjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIk5vIHN1Y2ggaXJxIHR5cGUgJWQiLCB0eXBlKTsKKwkJCXJldHVybiAtMTsKKwl9CisKKwl2YWx1ZSA9IF9fcmF3X3JlYWRsKGV4dGludF9yZWcpOworCXZhbHVlID0gKHZhbHVlICYgfig3IDw8IGV4dGludF9vZmZzZXQpKSB8IChuZXd2YWx1ZSA8PCBleHRpbnRfb2Zmc2V0KTsKKwlfX3Jhd193cml0ZWwodmFsdWUsIGV4dGludF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjX2lycWV4dF9jaGlwID0geworCS5uYW1lCQk9ICJzM2MtZXh0IiwKKwkubWFzawkJPSBzM2NfaXJxZXh0X21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxZXh0X3VubWFzaywKKwkuYWNrCQk9IHMzY19pcnFleHRfYWNrLAorCS5zZXRfdHlwZQk9IHMzY19pcnFleHRfdHlwZSwKKwkuc2V0X3dha2UJPSBzM2NfaXJxZXh0X3dha2UKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjX2lycV9laW50MHQ0ID0geworCS5uYW1lCQk9ICJzM2MtZXh0MCIsCisJLmFjawkJPSBzM2NfaXJxX2FjaywKKwkubWFzawkJPSBzM2NfaXJxX21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxX3VubWFzaywKKwkuc2V0X3dha2UJPSBzM2NfaXJxX3dha2UsCisJLnNldF90eXBlCT0gczNjX2lycWV4dF90eXBlLAorfTsKKworLyogbWFzayB2YWx1ZXMgZm9yIHRoZSBwYXJlbnQgcmVnaXN0ZXJzIGZvciBlYWNoIG9mIHRoZSBpbnRlcnJ1cHQgdHlwZXMgKi8KKworI2RlZmluZSBJTlRNU0tfVUFSVDAJICgxVUwgPDwgKElSUV9VQVJUMCAtIElSUV9FSU5UMCkpCisjZGVmaW5lIElOVE1TS19VQVJUMQkgKDFVTCA8PCAoSVJRX1VBUlQxIC0gSVJRX0VJTlQwKSkKKyNkZWZpbmUgSU5UTVNLX1VBUlQyCSAoMVVMIDw8IChJUlFfVUFSVDIgLSBJUlFfRUlOVDApKQorI2RlZmluZSBJTlRNU0tfQURDUEFSRU5UICgxVUwgPDwgKElSUV9BRENQQVJFTlQgLSBJUlFfRUlOVDApKQorCisKKy8qIFVBUlQwICovCisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3VhcnQwX21hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFzayhpcnFubywgSU5UTVNLX1VBUlQwLCA3KTsKK30KKworc3RhdGljIHZvaWQKK3MzY19pcnFfdWFydDBfdW5tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX3VubWFzayhpcnFubywgSU5UTVNLX1VBUlQwKTsKK30KKworc3RhdGljIHZvaWQKK3MzY19pcnFfdWFydDBfYWNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX21hc2thY2soaXJxbm8sIElOVE1TS19VQVJUMCwgNyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjX2lycV91YXJ0MCA9IHsKKwkubmFtZQkJPSAiczNjLXVhcnQwIiwKKwkubWFzawkJPSBzM2NfaXJxX3VhcnQwX21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxX3VhcnQwX3VubWFzaywKKwkuYWNrCQk9IHMzY19pcnFfdWFydDBfYWNrLAorfTsKKworLyogVUFSVDEgKi8KKworc3RhdGljIHZvaWQKK3MzY19pcnFfdWFydDFfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfVUFSVDEsIDcgPDwgMyk7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3VhcnQxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl91bm1hc2soaXJxbm8sIElOVE1TS19VQVJUMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3VhcnQxX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrYWNrKGlycW5vLCBJTlRNU0tfVUFSVDEsIDcgPDwgMyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjX2lycV91YXJ0MSA9IHsKKwkubmFtZQkJPSAiczNjLXVhcnQxIiwKKwkubWFzawkJPSBzM2NfaXJxX3VhcnQxX21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxX3VhcnQxX3VubWFzaywKKwkuYWNrCQk9IHMzY19pcnFfdWFydDFfYWNrLAorfTsKKworLyogVUFSVDIgKi8KKworc3RhdGljIHZvaWQKK3MzY19pcnFfdWFydDJfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfVUFSVDIsIDcgPDwgNik7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3VhcnQyX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl91bm1hc2soaXJxbm8sIElOVE1TS19VQVJUMik7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX3VhcnQyX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrYWNrKGlycW5vLCBJTlRNU0tfVUFSVDIsIDcgPDwgNik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjX2lycV91YXJ0MiA9IHsKKwkubmFtZQkJPSAiczNjLXVhcnQyIiwKKwkubWFzawkJPSBzM2NfaXJxX3VhcnQyX21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxX3VhcnQyX3VubWFzaywKKwkuYWNrCQk9IHMzY19pcnFfdWFydDJfYWNrLAorfTsKKworLyogQURDIGFuZCBUb3VjaHNjcmVlbiAqLworCitzdGF0aWMgdm9pZAorczNjX2lycV9hZGNfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfQURDUEFSRU5ULCAzIDw8IDkpOworfQorCitzdGF0aWMgdm9pZAorczNjX2lycV9hZGNfdW5tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX3VubWFzayhpcnFubywgSU5UTVNLX0FEQ1BBUkVOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX2FkY19hY2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfYWNrKGlycW5vLCBJTlRNU0tfQURDUEFSRU5ULCAzIDw8IDkpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHMzY19pcnFfYWRjID0geworCS5uYW1lCQk9ICJzM2MtYWRjIiwKKwkubWFzawkJPSBzM2NfaXJxX2FkY19tYXNrLAorCS51bm1hc2sJCT0gczNjX2lycV9hZGNfdW5tYXNrLAorCS5hY2sJCT0gczNjX2lycV9hZGNfYWNrLAorfTsKKworLyogaXJxIGRlbXV4IGZvciBhZGMgKi8KK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfYWRjKHVuc2lnbmVkIGludCBpcnEsCisJCQkgICAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IHN1YnNyYywgc3VibXNrOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSA5OworCXN0cnVjdCBpcnFfZGVzYyAqbXlkZXNjOworCisJLyogcmVhZCB0aGUgY3VycmVudCBwZW5kaW5nIGludGVycnVwdHMsIGFuZCB0aGUgbWFzaworCSAqIGZvciB3aGF0IGl0IGlzIGF2YWlsYWJsZSAqLworCisJc3Vic3JjID0gX19yYXdfcmVhZGwoUzNDMjQxMF9TVUJTUkNQTkQpOworCXN1Ym1zayA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UU1VCTVNLKTsKKworCXN1YnNyYyAmPSB+c3VibXNrOworCXN1YnNyYyA+Pj0gb2Zmc2V0OworCXN1YnNyYyAmPSAzOworCisJaWYgKHN1YnNyYyAhPSAwKSB7CisJCWlmIChzdWJzcmMgJiAxKSB7CisJCQlteWRlc2MgPSBpcnFfZGVzYyArIElSUV9UQzsKKwkJCWRlc2NfaGFuZGxlX2lycShJUlFfVEMsIG15ZGVzYyk7CisJCX0KKwkJaWYgKHN1YnNyYyAmIDIpIHsKKwkJCW15ZGVzYyA9IGlycV9kZXNjICsgSVJRX0FEQzsKKwkJCWRlc2NfaGFuZGxlX2lycShJUlFfQURDLCBteWRlc2MpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X3VhcnQodW5zaWduZWQgaW50IHN0YXJ0KQoreworCXVuc2lnbmVkIGludCBzdWJzcmMsIHN1Ym1zazsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc3RhcnQgLSBJUlFfUzNDVUFSVF9SWDA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJLyogcmVhZCB0aGUgY3VycmVudCBwZW5kaW5nIGludGVycnVwdHMsIGFuZCB0aGUgbWFzaworCSAqIGZvciB3aGF0IGl0IGlzIGF2YWlsYWJsZSAqLworCisJc3Vic3JjID0gX19yYXdfcmVhZGwoUzNDMjQxMF9TVUJTUkNQTkQpOworCXN1Ym1zayA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UU1VCTVNLKTsKKworCWlycWRiZjIoInMzY19pcnFfZGVtdXhfdWFydDogc3RhcnQ9JWQgKCVkKSwgc3Vic3JjPTB4JTA4eCwweCUwOHhcbiIsCisJCXN0YXJ0LCBvZmZzZXQsIHN1YnNyYywgc3VibXNrKTsKKworCXN1YnNyYyAmPSB+c3VibXNrOworCXN1YnNyYyA+Pj0gb2Zmc2V0OworCXN1YnNyYyAmPSA3OworCisJaWYgKHN1YnNyYyAhPSAwKSB7CisJCWRlc2MgPSBpcnFfZGVzYyArIHN0YXJ0OworCisJCWlmIChzdWJzcmMgJiAxKQorCQkJZGVzY19oYW5kbGVfaXJxKHN0YXJ0LCBkZXNjKTsKKworCQlkZXNjKys7CisKKwkJaWYgKHN1YnNyYyAmIDIpCisJCQlkZXNjX2hhbmRsZV9pcnEoc3RhcnQrMSwgZGVzYyk7CisKKwkJZGVzYysrOworCisJCWlmIChzdWJzcmMgJiA0KQorCQkJZGVzY19oYW5kbGVfaXJxKHN0YXJ0KzIsIGRlc2MpOworCX0KK30KKworLyogdWFydCBkZW11eCBlbnRyeSBwb2ludHMgKi8KKworc3RhdGljIHZvaWQKK3MzY19pcnFfZGVtdXhfdWFydDAodW5zaWduZWQgaW50IGlycSwKKwkJICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlpcnEgPSBpcnE7CisJczNjX2lycV9kZW11eF91YXJ0KElSUV9TM0NVQVJUX1JYMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX2RlbXV4X3VhcnQxKHVuc2lnbmVkIGludCBpcnEsCisJCSAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJaXJxID0gaXJxOworCXMzY19pcnFfZGVtdXhfdWFydChJUlFfUzNDVUFSVF9SWDEpOworfQorCitzdGF0aWMgdm9pZAorczNjX2lycV9kZW11eF91YXJ0Mih1bnNpZ25lZCBpbnQgaXJxLAorCQkgICAgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWlycSA9IGlycTsKKwlzM2NfaXJxX2RlbXV4X3VhcnQoSVJRX1MzQ1VBUlRfUlgyKTsKK30KKworc3RhdGljIHZvaWQKK3MzY19pcnFfZGVtdXhfZXh0aW50OCh1bnNpZ25lZCBpbnQgaXJxLAorCQkgICAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgbG9uZyBlaW50cG5kID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UUEVORCk7CisJdW5zaWduZWQgbG9uZyBlaW50bXNrID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UTUFTSyk7CisKKwllaW50cG5kICY9IH5laW50bXNrOworCWVpbnRwbmQgJj0gfjB4ZmY7CS8qIGlnbm9yZSBsb3dlciBpcnFzICovCisKKwkvKiB3ZSBtYXkgYXMgd2VsbCBoYW5kbGUgYWxsIHRoZSBwZW5kaW5nIElSUXMgaGVyZSAqLworCisJd2hpbGUgKGVpbnRwbmQpIHsKKwkJaXJxID0gX19mZnMoZWludHBuZCk7CisJCWVpbnRwbmQgJj0gfigxPDxpcnEpOworCisJCWlycSArPSAoSVJRX0VJTlQ0IC0gNCk7CisJCWRlc2NfaGFuZGxlX2lycShpcnEsIGlycV9kZXNjICsgaXJxKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQKK3MzY19pcnFfZGVtdXhfZXh0aW50NHQ3KHVuc2lnbmVkIGludCBpcnEsCisJCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgbG9uZyBlaW50cG5kID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UUEVORCk7CisJdW5zaWduZWQgbG9uZyBlaW50bXNrID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UTUFTSyk7CisKKwllaW50cG5kICY9IH5laW50bXNrOworCWVpbnRwbmQgJj0gMHhmZjsJLyogb25seSBsb3dlciBpcnFzICovCisKKwkvKiB3ZSBtYXkgYXMgd2VsbCBoYW5kbGUgYWxsIHRoZSBwZW5kaW5nIElSUXMgaGVyZSAqLworCisJd2hpbGUgKGVpbnRwbmQpIHsKKwkJaXJxID0gX19mZnMoZWludHBuZCk7CisJCWVpbnRwbmQgJj0gfigxPDxpcnEpOworCisJCWlycSArPSAoSVJRX0VJTlQ0IC0gNCk7CisKKwkJZGVzY19oYW5kbGVfaXJxKGlycSwgaXJxX2Rlc2MgKyBpcnEpOworCX0KK30KKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgaXJxX3NhdmVbXSA9IHsKKwlTQVZFX0lURU0oUzNDMjQxMF9JTlRNU0spLAorCVNBVkVfSVRFTShTM0MyNDEwX0lOVFNVQk1TSyksCit9OworCisvKiB0aGUgZXh0aW50IHZhbHVlcyBtb3ZlIGJldHdlZW4gdGhlIHMzYzI0MTAvczNjMjQ0MCBhbmQgdGhlIHMzYzI0MTIKKyAqIHNvIHdlIHVzZSBhbiBhcnJheSB0byBob2xkIHRoZW0sIGFuZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YKKyAqIHRoZSByZWdpc3RlciBhdCBydW4tdGltZQorKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9leHRpbnRbM107CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2VpbnRmbHRbNF07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2VpbnRtYXNrOworCitpbnQgczNjMjR4eF9pcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2V4dGludCk7IGkrKykKKwkJc2F2ZV9leHRpbnRbaV0gPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VYVElOVDAgKyAoaSo0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2VpbnRmbHQpOyBpKyspCisJCXNhdmVfZWludGZsdFtpXSA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlORkxUMCArIChpKjQpKTsKKworCXMzYzI0MTBfcG1fZG9fc2F2ZShpcnFfc2F2ZSwgQVJSQVlfU0laRShpcnFfc2F2ZSkpOworCXNhdmVfZWludG1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRNQVNLKTsKKworCXJldHVybiAwOworfQorCitpbnQgczNjMjR4eF9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2V4dGludCk7IGkrKykKKwkJX19yYXdfd3JpdGVsKHNhdmVfZXh0aW50W2ldLCBTM0MyNFhYX0VYVElOVDAgKyAoaSo0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2VpbnRmbHQpOyBpKyspCisJCV9fcmF3X3dyaXRlbChzYXZlX2VpbnRmbHRbaV0sIFMzQzI0WFhfRUlORkxUMCArIChpKjQpKTsKKworCXMzYzI0MTBfcG1fZG9fcmVzdG9yZShpcnFfc2F2ZSwgQVJSQVlfU0laRShpcnFfc2F2ZSkpOworCV9fcmF3X3dyaXRlbChzYXZlX2VpbnRtYXNrLCBTM0MyNFhYX0VJTlRNQVNLKTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBzM2MyNHh4X2lycV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgczNjMjR4eF9pcnFfcmVzdW1lICBOVUxMCisjZW5kaWYKKworLyogczNjMjR4eF9pbml0X2lycQorICoKKyAqIEluaXRpYWxpc2UgUzNDMjQxMCBJUlEgc3lzdGVtCisqLworCit2b2lkIF9faW5pdCBzM2MyNHh4X2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwZW5kOworCXVuc2lnbmVkIGxvbmcgbGFzdDsKKwlpbnQgaXJxbm87CisJaW50IGk7CisKKwlpcnFkYmYoInMzYzI0MTBfaW5pdF9pcnE6IGNsZWFyaW5nIGludGVycnVwdCBzdGF0dXMgZmxhZ3NcbiIpOworCisJLyogZmlyc3QsIGNsZWFyIGFsbCBpbnRlcnJ1cHRzIHBlbmRpbmcuLi4gKi8KKworCWxhc3QgPSAwOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcGVuZCA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlOVFBFTkQpOworCisJCWlmIChwZW5kID09IDAgfHwgcGVuZCA9PSBsYXN0KQorCQkJYnJlYWs7CisKKwkJX19yYXdfd3JpdGVsKHBlbmQsIFMzQzI0WFhfRUlOVFBFTkQpOworCQlwcmludGsoImlycTogY2xlYXJpbmcgcGVuZGluZyBleHQgc3RhdHVzICUwOHhcbiIsIChpbnQpcGVuZCk7CisJCWxhc3QgPSBwZW5kOworCX0KKworCWxhc3QgPSAwOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcGVuZCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UUE5EKTsKKworCQlpZiAocGVuZCA9PSAwIHx8IHBlbmQgPT0gbGFzdCkKKwkJCWJyZWFrOworCisJCV9fcmF3X3dyaXRlbChwZW5kLCBTM0MyNDEwX1NSQ1BORCk7CisJCV9fcmF3X3dyaXRlbChwZW5kLCBTM0MyNDEwX0lOVFBORCk7CisJCXByaW50aygiaXJxOiBjbGVhcmluZyBwZW5kaW5nIHN0YXR1cyAlMDh4XG4iLCAoaW50KXBlbmQpOworCQlsYXN0ID0gcGVuZDsKKwl9CisKKwlsYXN0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXBlbmQgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1NVQlNSQ1BORCk7CisKKwkJaWYgKHBlbmQgPT0gMCB8fCBwZW5kID09IGxhc3QpCisJCQlicmVhazsKKworCQlwcmludGsoImlycTogY2xlYXJpbmcgc3VicGVuZGluZyBzdGF0dXMgJTA4eFxuIiwgKGludClwZW5kKTsKKwkJX19yYXdfd3JpdGVsKHBlbmQsIFMzQzI0MTBfU1VCU1JDUE5EKTsKKwkJbGFzdCA9IHBlbmQ7CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIG1haW4gaW50ZXJydXB0cyAqLworCisJaXJxZGJmKCJzM2MyNDEwX2luaXRfaXJxOiByZWdpc3RlcmluZyBzM2MyNDEwIGludGVycnVwdCBoYW5kbGVyc1xuIik7CisKKwlmb3IgKGlycW5vID0gSVJRX0VJTlQ0dDc7IGlycW5vIDw9IElSUV9BRENQQVJFTlQ7IGlycW5vKyspIHsKKwkJLyogc2V0IGFsbCB0aGUgczNjMjQxMCBpbnRlcm5hbCBpcnFzICovCisKKwkJc3dpdGNoIChpcnFubykgeworCQkJLyogZGVhbCB3aXRoIHRoZSBzcGVjaWFsIElSUXMgKGNhc2NhZGVkKSAqLworCisJCWNhc2UgSVJRX0VJTlQ0dDc6CisJCWNhc2UgSVJRX0VJTlQ4dDIzOgorCQljYXNlIElSUV9VQVJUMDoKKwkJY2FzZSBJUlFfVUFSVDE6CisJCWNhc2UgSVJRX1VBUlQyOgorCQljYXNlIElSUV9BRENQQVJFTlQ6CisJCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZzM2NfaXJxX2xldmVsX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSVJRX1JFU0VSVkVENjoKKwkJY2FzZSBJUlFfUkVTRVJWRUQyNDoKKwkJCS8qIG5vIElSUSBoZXJlICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLy9pcnFkYmYoInJlZ2lzdGVyaW5nIGlycSAlZCAoczNjIGlycSlcbiIsIGlycW5vKTsKKwkJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGhhbmRsZV9lZGdlX2lycSk7CisJCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKKwkJfQorCX0KKworCS8qIHNldHVwIHRoZSBjYXNjYWRlIGlycSBoYW5kbGVycyAqLworCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VJTlQ0dDcsIHMzY19pcnFfZGVtdXhfZXh0aW50NHQ3KTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRUlOVDh0MjMsIHMzY19pcnFfZGVtdXhfZXh0aW50OCk7CisKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVUFSVDAsIHMzY19pcnFfZGVtdXhfdWFydDApOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9VQVJUMSwgczNjX2lycV9kZW11eF91YXJ0MSk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1VBUlQyLCBzM2NfaXJxX2RlbXV4X3VhcnQyKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfQURDUEFSRU5ULCBzM2NfaXJxX2RlbXV4X2FkYyk7CisKKwkvKiBleHRlcm5hbCBpbnRlcnJ1cHRzICovCisKKwlmb3IgKGlycW5vID0gSVJRX0VJTlQwOyBpcnFubyA8PSBJUlFfRUlOVDM7IGlycW5vKyspIHsKKwkJaXJxZGJmKCJyZWdpc3RlcmluZyBpcnEgJWQgKGV4dCBpbnQpXG4iLCBpcnFubyk7CisJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfZWludDB0NCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnFubywgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7CisJfQorCisJZm9yIChpcnFubyA9IElSUV9FSU5UNDsgaXJxbm8gPD0gSVJRX0VJTlQyMzsgaXJxbm8rKykgeworCQlpcnFkYmYoInJlZ2lzdGVyaW5nIGlycSAlZCAoZXh0ZW5kZWQgczNjIGlycSlcbiIsIGlycW5vKTsKKwkJc2V0X2lycV9jaGlwKGlycW5vLCAmczNjX2lycWV4dF9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBoYW5kbGVfZWRnZV9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKKwl9CisKKwkvKiByZWdpc3RlciB0aGUgdWFydCBpbnRlcnJ1cHRzICovCisKKwlpcnFkYmYoInMzYzI0MTA6IHJlZ2lzdGVyaW5nIGV4dGVybmFsIGludGVycnVwdHNcbiIpOworCisJZm9yIChpcnFubyA9IElSUV9TM0NVQVJUX1JYMDsgaXJxbm8gPD0gSVJRX1MzQ1VBUlRfRVJSMDsgaXJxbm8rKykgeworCQlpcnFkYmYoInJlZ2lzdGVyaW5nIGlycSAlZCAoczNjIHVhcnQwIGlycSlcbiIsIGlycW5vKTsKKwkJc2V0X2lycV9jaGlwKGlycW5vLCAmczNjX2lycV91YXJ0MCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnFubywgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOworCX0KKworCWZvciAoaXJxbm8gPSBJUlFfUzNDVUFSVF9SWDE7IGlycW5vIDw9IElSUV9TM0NVQVJUX0VSUjE7IGlycW5vKyspIHsKKwkJaXJxZGJmKCJyZWdpc3RlcmluZyBpcnEgJWQgKHMzYyB1YXJ0MSBpcnEpXG4iLCBpcnFubyk7CisJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfdWFydDEpOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlmb3IgKGlycW5vID0gSVJRX1MzQ1VBUlRfUlgyOyBpcnFubyA8PSBJUlFfUzNDVUFSVF9FUlIyOyBpcnFubysrKSB7CisJCWlycWRiZigicmVnaXN0ZXJpbmcgaXJxICVkIChzM2MgdWFydDIgaXJxKVxuIiwgaXJxbm8pOworCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZzM2NfaXJxX3VhcnQyKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7CisJfQorCisJZm9yIChpcnFubyA9IElSUV9UQzsgaXJxbm8gPD0gSVJRX0FEQzsgaXJxbm8rKykgeworCQlpcnFkYmYoInJlZ2lzdGVyaW5nIGlycSAlZCAoczNjIGFkYyBpcnEpXG4iLCBpcnFubyk7CisJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfYWRjKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBoYW5kbGVfZWRnZV9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlpcnFkYmYoInMzYzI0MTA6IHJlZ2lzdGVyZWQgaW50ZXJydXB0IGhhbmRsZXJzXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS1zaW10ZWMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0tc2ltdGVjLmMKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYwppbmRleCA2MTkxMzNlLi5iZDk2NWYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0tc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLXNpbXRlYy5jCisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0tc2ltdGVjLmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CkBAIC0zMiw3ICszMiw3IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSAicG0uaCIKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CiAKICNkZWZpbmUgQ09QWVJJR0hUICIsIChjKSAyMDA1IFNpbXRlYyBFbGVjdHJvbmljcyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2Y2OGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKQEAgLTAsMCArMSw2NTkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCBQb3dlciBNYW5hZ2VyIChTdXNwZW5kLVRvLVJBTSkgc3VwcG9ydAorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogUGFydHMgYmFzZWQgb24gYXJjaC9hcm0vbWFjaC1weGEvcG0uYworICoKKyAqIFRoYW5rcyB0byBEaW1pdHJ5IEFuZHJpYyBmb3IgZGVidWdnaW5nCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisKKy8qIGZvciBleHRlcm5hbCB1c2UgKi8KKwordW5zaWduZWQgbG9uZyBzM2NfcG1fZmxhZ3M7CisKKyNkZWZpbmUgUEZYICJzM2MyNHh4LXBtOiAiCisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBjb3JlX3NhdmVbXSA9IHsKKwlTQVZFX0lURU0oUzNDMjQxMF9MT0NLVElNRSksCisJU0FWRV9JVEVNKFMzQzI0MTBfQ0xLQ09OKSwKKworCS8qIHdlIHJlc3RvcmUgdGhlIHRpbWluZ3MgaGVyZSwgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IHRoZSBib2FyZAorCSAqIGJyaW5ncyB0aGUgc3lzdGVtIHVwIGluIGFuIHNsb3dlciwgb3IgZXF1YWwgZnJlcXVlbmN5IHNldHRpbmcKKwkgKiB0byB0aGUgb3JpZ2luYWwgc3lzdGVtLgorCSAqCisJICogaWYgd2UgY2Fubm90IGd1YXJhbnRlZSB0aGlzLCB0aGVuIHRoaW5ncyBhcmUgZ29pbmcgdG8gZ28gdmVyeQorCSAqIHdyb25nIGhlcmUsIGFzIHdlIG1vZGlmeSB0aGUgcmVmcmVzaCBhbmQgYm90aCBwbGwgc2V0dGluZ3MuCisJICovCisKKwlTQVZFX0lURU0oUzNDMjQxMF9CV1NDT04pLAorCVNBVkVfSVRFTShTM0MyNDEwX0JBTktDT04wKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9CQU5LQ09OMSksCisJU0FWRV9JVEVNKFMzQzI0MTBfQkFOS0NPTjIpLAorCVNBVkVfSVRFTShTM0MyNDEwX0JBTktDT04zKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9CQU5LQ09ONCksCisJU0FWRV9JVEVNKFMzQzI0MTBfQkFOS0NPTjUpLAorCisJU0FWRV9JVEVNKFMzQzI0MTBfQ0xLRElWTiksCisJU0FWRV9JVEVNKFMzQzI0MTBfTVBMTENPTiksCisJU0FWRV9JVEVNKFMzQzI0MTBfVVBMTENPTiksCisJU0FWRV9JVEVNKFMzQzI0MTBfQ0xLU0xPVyksCisJU0FWRV9JVEVNKFMzQzI0MTBfUkVGUkVTSCksCit9OworCitzdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgZ3Bpb19zYXZlW10gPSB7CisJU0FWRV9JVEVNKFMzQzI0MTBfR1BBQ09OKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEFEQVQpLAorCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BCQ09OKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEJEQVQpLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQQlVQKSwKKworCVNBVkVfSVRFTShTM0MyNDEwX0dQQ0NPTiksCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BDREFUKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9HUENVUCksCisKKwlTQVZFX0lURU0oUzNDMjQxMF9HUERDT04pLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQRERBVCksCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BEVVApLAorCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BFQ09OKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEVEQVQpLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQRVVQKSwKKworCVNBVkVfSVRFTShTM0MyNDEwX0dQRkNPTiksCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BGREFUKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEZVUCksCisKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEdDT04pLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQR0RBVCksCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BHVVApLAorCisJU0FWRV9JVEVNKFMzQzI0MTBfR1BIQ09OKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9HUEhEQVQpLAorCVNBVkVfSVRFTShTM0MyNDEwX0dQSFVQKSwKKworCVNBVkVfSVRFTShTM0MyNDEwX0RDTEtDT04pLAorfTsKKworI2lmZGVmIENPTkZJR19TM0MyNDEwX1BNX0RFQlVHCisKKyNkZWZpbmUgU0FWRV9VQVJUKHZhKSBcCisJU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VMQ09OKSwgXAorCVNBVkVfSVRFTSgodmEpICsgUzNDMjQxMF9VQ09OKSwgXAorCVNBVkVfSVRFTSgodmEpICsgUzNDMjQxMF9VRkNPTiksIFwKKwlTQVZFX0lURU0oKHZhKSArIFMzQzI0MTBfVU1DT04pLCBcCisJU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VCUkRJVikKKworc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIHVhcnRfc2F2ZVtdID0geworCVNBVkVfVUFSVChTM0MyNFhYX1ZBX1VBUlQwKSwKKwlTQVZFX1VBUlQoUzNDMjRYWF9WQV9VQVJUMSksCisjaWZuZGVmIENPTkZJR19DUFVfUzNDMjQwMAorCVNBVkVfVUFSVChTM0MyNFhYX1ZBX1VBUlQyKSwKKyNlbmRpZgorfTsKKworLyogZGVidWcKKyAqCisgKiB3ZSBzZW5kIHRoZSBkZWJ1ZyB0byBwcmludGFzY2lpKCkgdG8gYWxsb3cgaXQgdG8gYmUgc2VlbiBpZiB0aGUKKyAqIHN5c3RlbSBuZXZlciB3YWtlcyB1cCBmcm9tIHRoZSBzbGVlcAorKi8KKworZXh0ZXJuIHZvaWQgcHJpbnRhc2NpaShjb25zdCBjaGFyICopOworCit2b2lkIHBtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IHZhOworCWNoYXIgYnVmZlsyNTZdOworCisJdmFfc3RhcnQodmEsIGZtdCk7CisJdnNwcmludGYoYnVmZiwgZm10LCB2YSk7CisJdmFfZW5kKHZhKTsKKworCXByaW50YXNjaWkoYnVmZik7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0MTBfcG1fZGVidWdfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtDT04pOworCisJLyogcmUtc3RhcnQgdWFydCBjbG9ja3MgKi8KKwl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDA7CisJdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQxOworCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMjsKKworCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzI0MTBfQ0xLQ09OKTsKKwl1ZGVsYXkoMTApOworfQorCisjZGVmaW5lIERCRyhmbXQuLi4pIHBtX2RiZyhmbXQpCisjZWxzZQorI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQpCisKKyNkZWZpbmUgczNjMjQxMF9wbV9kZWJ1Z19pbml0KCkgZG8geyB9IHdoaWxlKDApCisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSB1YXJ0X3NhdmVbXSA9IHt9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwX1BNX0NIRUNLKSAmJiBDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgIT0gMAorCisvKiBzdXNwZW5kIGNoZWNraW5nIGNvZGUuLi4KKyAqCisgKiB0aGlzIG5leHQgYXJlYSBkb2VzIGEgc2V0IG9mIGNyYyBjaGVja3Mgb3ZlciBhbGwgdGhlIGluc3RhbGxlZAorICogbWVtb3J5LCBzbyB0aGUgc3lzdGVtIGNhbiB2ZXJpZnkgaWYgdGhlIHJlc3VtZSB3YXMgb2suCisgKgorICogQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFIGRlZmluZXMgdGhlIGJsb2NrLXNpemUgZm9yIHRoZSBDUkMsCisgKiBpbmNyZWFzaW5nIGl0IHdpbGwgbWVhbiB0aGF0IHRoZSBhcmVhIGNvcnJ1cHRlZCB3aWxsIGJlIGxlc3MgZWFzeSB0byBzcG90LAorICogYW5kIHJlZHVjaW5nIHRoZSBzaXplIHdpbGwgY2F1c2UgdGhlIENSQyBzYXZlIGFyZWEgdG8gZ3JvdworKi8KKworI2RlZmluZSBDSEVDS19DSFVOS1NJWkUgKENPTkZJR19TM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRSAqIDEwMjQpCisKK3N0YXRpYyB1MzIgY3JjX3NpemU7CS8qIHNpemUgbmVlZGVkIGZvciB0aGUgY3JjIGJsb2NrICovCitzdGF0aWMgdTMyICpjcmNzOwkvKiBhbGxvY2F0ZWQgb3ZlciBzdXNwZW5kL3Jlc3VtZSAqLworCit0eXBlZGVmIHUzMiAqKHJ1bl9mbl90KShzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgdTMyICphcmcpOworCisvKiBzM2MyNDEwX3BtX3J1bl9yZXMKKyAqCisgKiBnbyB0aG9ydWdoIHRoZSBnaXZlbiByZXNvdXJjZSBsaXN0LCBhbmQgbG9vayBmb3Igc3lzdGVtIHJhbQorKi8KKworc3RhdGljIHZvaWQgczNjMjQxMF9wbV9ydW5fcmVzKHN0cnVjdCByZXNvdXJjZSAqcHRyLCBydW5fZm5fdCBmbiwgdTMyICphcmcpCit7CisJd2hpbGUgKHB0ciAhPSBOVUxMKSB7CisJCWlmIChwdHItPmNoaWxkICE9IE5VTEwpCisJCQlzM2MyNDEwX3BtX3J1bl9yZXMocHRyLT5jaGlsZCwgZm4sIGFyZyk7CisKKwkJaWYgKChwdHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCisJCSAgICBzdHJjbXAocHRyLT5uYW1lLCAiU3lzdGVtIFJBTSIpID09IDApIHsKKwkJCURCRygiRm91bmQgc3lzdGVtIFJBTSBhdCAlMDhseC4uJTA4bHhcbiIsCisJCQkgICAgcHRyLT5zdGFydCwgcHRyLT5lbmQpOworCQkJYXJnID0gKGZuKShwdHIsIGFyZyk7CisJCX0KKworCQlwdHIgPSBwdHItPnNpYmxpbmc7CisJfQorfQorCitzdGF0aWMgdm9pZCBzM2MyNDEwX3BtX3J1bl9zeXNyYW0ocnVuX2ZuX3QgZm4sIHUzMiAqYXJnKQoreworCXMzYzI0MTBfcG1fcnVuX3JlcygmaW9tZW1fcmVzb3VyY2UsIGZuLCBhcmcpOworfQorCitzdGF0aWMgdTMyICpzM2MyNDEwX3BtX2NvdW50cmFtKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKK3sKKwl1MzIgc2l6ZSA9ICh1MzIpKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkrMTsKKworCXNpemUgKz0gQ0hFQ0tfQ0hVTktTSVpFLTE7CisJc2l6ZSAvPSBDSEVDS19DSFVOS1NJWkU7CisKKwlEQkcoIkFyZWEgJTA4bHguLiUwOGx4LCAlZCBibG9ja3NcbiIsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCBzaXplKTsKKworCSp2YWwgKz0gc2l6ZSAqIHNpemVvZih1MzIpOworCXJldHVybiB2YWw7Cit9CisKKy8qIHMzYzI0MTBfcG1fcHJlcGFyZV9jaGVjaworICoKKyAqIHByZXBhcmUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgY3JlYXRpbmcgdGhlIENSQ3MuIFRoaXMKKyAqIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIGZpbmFsIHNhdmUsIGFzIGl0IHdpbGwgcmVxdWlyZSBtZW1vcnkKKyAqIGFsbG9jYXRpbmcsIGFuZCB0aHVzIHRvdWNoaW5nIGJpdHMgb2YgdGhlIGtlcm5lbCB3ZSBkbyBub3QKKyAqIGtub3cgYWJvdXQuCisqLworCitzdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUodm9pZCkKK3sKKwljcmNfc2l6ZSA9IDA7CisKKwlzM2MyNDEwX3BtX3J1bl9zeXNyYW0oczNjMjQxMF9wbV9jb3VudHJhbSwgJmNyY19zaXplKTsKKworCURCRygiczNjMjQxMF9wbV9wcmVwYXJlX2NoZWNrOiAldSBjaGVja3MgbmVlZGVkXG4iLCBjcmNfc2l6ZSk7CisKKwljcmNzID0ga21hbGxvYyhjcmNfc2l6ZSs0LCBHRlBfS0VSTkVMKTsKKwlpZiAoY3JjcyA9PSBOVUxMKQorCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBhbGxvY2F0ZWQgQ1JDIHNhdmUgYXJlYVxuIik7Cit9CisKK3N0YXRpYyB1MzIgKnMzYzI0MTBfcG1fbWFrZWNoZWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGxlZnQ7CisKKwlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7CisJICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgeworCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOworCisJCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQorCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKKworCQkqdmFsID0gY3JjMzJfbGUofjAsIHBoeXNfdG9fdmlydChhZGRyKSwgbGVmdCk7CisJCXZhbCsrOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qIHMzYzI0MTBfcG1fY2hlY2tfc3RvcmUKKyAqCisgKiBjb21wdXRlIHRoZSBDUkMgdmFsdWVzIGZvciB0aGUgbWVtb3J5IGJsb2NrcyBiZWZvcmUgdGhlIGZpbmFsCisgKiBzbGVlcC4KKyovCisKK3N0YXRpYyB2b2lkIHMzYzI0MTBfcG1fY2hlY2tfc3RvcmUodm9pZCkKK3sKKwlpZiAoY3JjcyAhPSBOVUxMKQorCQlzM2MyNDEwX3BtX3J1bl9zeXNyYW0oczNjMjQxMF9wbV9tYWtlY2hlY2ssIGNyY3MpOworfQorCisvKiBpbl9yZWdpb24KKyAqCisgKiByZXR1cm4gVFJVRSBpZiB0aGUgYXJlYSBkZWZpbmVkIGJ5IHB0ci4ucHRyK3NpemUgY29udGF0aW5zIHRoZQorICogd2hhdC4ud2hhdCt3aGF0c3oKKyovCisKK3N0YXRpYyBpbmxpbmUgaW50IGluX3JlZ2lvbih2b2lkICpwdHIsIGludCBzaXplLCB2b2lkICp3aGF0LCBzaXplX3Qgd2hhdHN6KQoreworCWlmICgod2hhdCt3aGF0c3opIDwgcHRyKQorCQlyZXR1cm4gMDsKKworCWlmICh3aGF0ID4gKHB0citzaXplKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHUzMiAqczNjMjQxMF9wbV9ydW5jaGVjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCit7CisJdm9pZCAqc2F2ZV9hdCA9IHBoeXNfdG9fdmlydChzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cyk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgbGVmdDsKKwl2b2lkICpwdHI7CisJdTMyIGNhbGM7CisKKwlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7CisJICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgeworCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOworCisJCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQorCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKKworCQlwdHIgPSBwaHlzX3RvX3ZpcnQoYWRkcik7CisKKwkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIGNyY3MsIGNyY19zaXplKSkgeworCQkJREJHKCJza2lwcGluZyAlMDhseCwgaGFzIGNyYyBibG9jayBpblxuIiwgYWRkcik7CisJCQlnb3RvIHNraXBfY2hlY2s7CisJCX0KKworCQlpZiAoaW5fcmVnaW9uKHB0ciwgbGVmdCwgc2F2ZV9hdCwgMzIqNCApKSB7CisJCQlEQkcoInNraXBwaW5nICUwOGx4LCBoYXMgc2F2ZSBibG9jayBpblxuIiwgYWRkcik7CisJCQlnb3RvIHNraXBfY2hlY2s7CisJCX0KKworCQkvKiBjYWxjdWxhdGUgYW5kIGNoZWNrIHRoZSBjaGVja3N1bSAqLworCisJCWNhbGMgPSBjcmMzMl9sZSh+MCwgcHRyLCBsZWZ0KTsKKwkJaWYgKGNhbGMgIT0gKnZhbCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUmVzdG9yZSBDUkMgZXJyb3IgYXQgIgorCQkJICAgICAgICIlMDhseCAoJTA4eCB2cyAlMDh4KVxuIiwgYWRkciwgY2FsYywgKnZhbCk7CisKKwkJCURCRygiUmVzdG9yZSBDUkMgZXJyb3IgYXQgJTA4bHggKCUwOHggdnMgJTA4eClcbiIsCisJCQkgICAgYWRkciwgY2FsYywgKnZhbCk7CisJCX0KKworCXNraXBfY2hlY2s6CisJCXZhbCsrOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qIHMzYzI0MTBfcG1fY2hlY2tfcmVzdG9yZQorICoKKyAqIGNoZWNrIHRoZSBDUkNzIGFmdGVyIHRoZSByZXN0b3JlIGV2ZW50IGFuZCBmcmVlIHRoZSBtZW1vcnkgdXNlZAorICogdG8gaG9sZCB0aGVtCisqLworCitzdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NoZWNrX3Jlc3RvcmUodm9pZCkKK3sKKwlpZiAoY3JjcyAhPSBOVUxMKSB7CisJCXMzYzI0MTBfcG1fcnVuX3N5c3JhbShzM2MyNDEwX3BtX3J1bmNoZWNrLCBjcmNzKTsKKwkJa2ZyZWUoY3Jjcyk7CisJCWNyY3MgPSBOVUxMOworCX0KK30KKworI2Vsc2UKKworI2RlZmluZSBzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjMjQxMF9wbV9jaGVja19yZXN0b3JlKCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHMzYzI0MTBfcG1fY2hlY2tfc3RvcmUoKSAgIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKy8qIGhlbHBlciBmdW5jdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlciBzdGF0ZSAqLworCit2b2lkIHMzYzI0MTBfcG1fZG9fc2F2ZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpCit7CisJZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcHRyKyspIHsKKwkJcHRyLT52YWwgPSBfX3Jhd19yZWFkbChwdHItPnJlZyk7CisJCURCRygic2F2ZWQgJXAgdmFsdWUgJTA4bHhcbiIsIHB0ci0+cmVnLCBwdHItPnZhbCk7CisJfQorfQorCisvKiBzM2MyNDEwX3BtX2RvX3Jlc3RvcmUKKyAqCisgKiByZXN0b3JlIHRoZSBzeXN0ZW0gZnJvbSB0aGUgZ2l2ZW4gbGlzdCBvZiBzYXZlZCByZWdpc3RlcnMKKyAqCisgKiBOb3RlLCB3ZSBkbyBub3QgdXNlIERCRygpIGluIGhlcmUsIGFzIHRoZSBzeXN0ZW0gbWF5IG5vdCBoYXZlCisgKiByZXN0b3JlIHRoZSBVQVJUcyBzdGF0ZSB5ZXQKKyovCisKK3ZvaWQgczNjMjQxMF9wbV9kb19yZXN0b3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKK3sKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgeworCQlwcmludGsoS0VSTl9ERUJVRyAicmVzdG9yZSAlcCAocmVzdG9yZSAlMDhseCwgd2FzICUwOHgpXG4iLAorCQkgICAgICAgcHRyLT5yZWcsIHB0ci0+dmFsLCBfX3Jhd19yZWFkbChwdHItPnJlZykpOworCisJCV9fcmF3X3dyaXRlbChwdHItPnZhbCwgcHRyLT5yZWcpOworCX0KK30KKworLyogczNjMjQxMF9wbV9kb19yZXN0b3JlX2NvcmUKKyAqCisgKiBzaW1pbGFyIHRvIHMzYzI0MTBfcG1fZG9fcmVzdG9yZV9jb3JlCisgKgorICogV0FSTklORzogRG8gbm90IHB1dCBhbnkgZGVidWcgaW4gaGVyZSB0aGF0IG1heSBlZmZlY3QgbWVtb3J5IG9yIHVzZQorICogcGVyaXBoZXJhbHMsIGFzIHRoaW5ncyBtYXkgYmUgY2hhbmdpbmchCisqLworCitzdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2RvX3Jlc3RvcmVfY29yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpCit7CisJZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcHRyKyspIHsKKwkJX19yYXdfd3JpdGVsKHB0ci0+dmFsLCBwdHItPnJlZyk7CisJfQorfQorCisvKiBzM2MyNDEwX3BtX3Nob3dfcmVzdW1lX2lycXMKKyAqCisgKiBwcmludCBhbnkgSVJRcyBhc3NlcnRlZCBhdCByZXN1bWUgdGltZSAoaWUsIHdlIHdva2UgZnJvbSkKKyovCisKK3N0YXRpYyB2b2lkIHMzYzI0MTBfcG1fc2hvd19yZXN1bWVfaXJxcyhpbnQgc3RhcnQsIHVuc2lnbmVkIGxvbmcgd2hpY2gsCisJCQkJCXVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlpbnQgaTsKKworCXdoaWNoICY9IH5tYXNrOworCisJZm9yIChpID0gMDsgaSA8PSAzMTsgaSsrKSB7CisJCWlmICgod2hpY2gpICYgKDFMPDxpKSkgeworCQkJREJHKCJJUlEgJWQgYXNzZXJ0ZWQgYXQgcmVzdW1lXG4iLCBzdGFydCtpKTsKKwkJfQorCX0KK30KKworLyogczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluCisgKgorICogY2hlY2sgdG8gc2VlIGlmIHRoZSBwaW4gaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHNsZWVwIG1vZGUsIGFuZAorICogbWFrZSBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIGlmIGl0IGlzIG5vdAorKi8KKworc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBpcnFvZmZzKQoreworCXVuc2lnbmVkIGxvbmcgaXJxc3RhdGU7CisJdW5zaWduZWQgbG9uZyBwaW5zdGF0ZTsKKwlpbnQgaXJxID0gczNjMjQxMF9ncGlvX2dldGlycShwaW4pOworCisJaWYgKGlycW9mZnMgPCA0KQorCQlpcnFzdGF0ZSA9IHMzY19pcnF3YWtlX2ludG1hc2sgJiAoMUw8PGlycW9mZnMpOworCWVsc2UKKwkJaXJxc3RhdGUgPSBzM2NfaXJxd2FrZV9laW50bWFzayAmICgxTDw8aXJxb2Zmcyk7CisKKwlwaW5zdGF0ZSA9IHMzYzI0MTBfZ3Bpb19nZXRjZmcocGluKTsKKworCWlmICghaXJxc3RhdGUpIHsKKwkJaWYgKHBpbnN0YXRlID09IFMzQzI0MTBfR1BJT19JUlEpCisJCQlEQkcoIkxlYXZpbmcgSVJRICVkIChwaW4gJWQpIGVuYWJsZWRcbiIsIGlycSwgcGluKTsKKwl9IGVsc2UgeworCQlpZiAocGluc3RhdGUgPT0gUzNDMjQxMF9HUElPX0lSUSkgeworCQkJREJHKCJEaXNhYmxpbmcgSVJRICVkIChwaW4gJWQpXG4iLCBpcnEsIHBpbik7CisJCQlzM2MyNDEwX2dwaW9fY2ZncGluKHBpbiwgUzNDMjQxMF9HUElPX0lOUFVUKTsKKwkJfQorCX0KK30KKworLyogczNjMjQxMF9wbV9jb25maWd1cmVfZXh0aW50CisgKgorICogY29uZmlndXJlIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHQgcGlucworKi8KKworc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jb25maWd1cmVfZXh0aW50KHZvaWQpCit7CisJaW50IHBpbjsKKworCS8qIGZvciBlYWNoIG9mIHRoZSBleHRlcm5hbCBpbnRlcnJ1cHRzIChFSU5UMC4uRUlOVDE1KSB3ZQorCSAqIG5lZWQgdG8gY2hlY2sgd2V0aGVyIGl0IGlzIGFuIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2UsCisJICogYW5kIHRoZW4gY29uZmlndXJlIGl0IGFzIGFuIGlucHV0IGlmIGl0IGlzIG5vdAorCSovCisKKwlmb3IgKHBpbiA9IFMzQzI0MTBfR1BGMDsgcGluIDw9IFMzQzI0MTBfR1BGNzsgcGluKyspIHsKKwkJczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluKHBpbiwgcGluIC0gUzNDMjQxMF9HUEYwKTsKKwl9CisKKwlmb3IgKHBpbiA9IFMzQzI0MTBfR1BHMDsgcGluIDw9IFMzQzI0MTBfR1BHNzsgcGluKyspIHsKKwkJczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluKHBpbiwgKHBpbiAtIFMzQzI0MTBfR1BHMCkrOCk7CisJfQorfQorCit2b2lkICgqcG1fY3B1X3ByZXApKHZvaWQpOwordm9pZCAoKnBtX2NwdV9zbGVlcCkodm9pZCk7CisKKyNkZWZpbmUgYW55X2FsbG93ZWQobWFzaywgYWxsb3cpICgoKG1hc2spICYgKGFsbG93KSkgIT0gKGFsbG93KSkKKworLyogczNjMjQxMF9wbV9lbnRlcgorICoKKyAqIGNlbnRyYWwgY29udHJvbCBmb3Igc2xlZXAvcmVzdW1lIHByb2Nlc3MKKyovCisKK3N0YXRpYyBpbnQgczNjMjQxMF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyByZWdzX3NhdmVbMTZdOworCisJLyogZW5zdXJlIHRoZSBkZWJ1ZyBpcyBpbml0aWFsaXNlZCAoaWYgZW5hYmxlZCkgKi8KKworCXMzYzI0MTBfcG1fZGVidWdfaW5pdCgpOworCisJREJHKCJzM2MyNDEwX3BtX2VudGVyKCVkKVxuIiwgc3RhdGUpOworCisJaWYgKHBtX2NwdV9wcmVwID09IE5VTEwgfHwgcG1fY3B1X3NsZWVwID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXJyb3I6IG5vIGNwdSBzbGVlcCBmdW5jdGlvbnMgc2V0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfTUVNKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImVycm9yOiBvbmx5IFBNX1NVU1BFTkRfTUVNIHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55dGhpbmcgdG8gd2FrZS11cCB3aXRoLi4uIGJhZCB0aGluZ3Mgc2VlbQorCSAqIHRvIGhhcHBlbiBpZiB5b3Ugc3VzcGVuZCB3aXRoIG5vIHdha2V1cCAoc3lzdGVtIHdpbGwgb2Z0ZW4KKwkgKiByZXF1aXJlIGEgZnVsbCBwb3dlci1jeWNsZSkKKwkqLworCisJaWYgKCFhbnlfYWxsb3dlZChzM2NfaXJxd2FrZV9pbnRtYXNrLCBzM2NfaXJxd2FrZV9pbnRhbGxvdykgJiYKKwkgICAgIWFueV9hbGxvd2VkKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBzM2NfaXJxd2FrZV9laW50YWxsb3cpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIHNvdXJjZXMgZW5hYmxlZCBmb3Igd2FrZS11cCFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJBYm9ydGluZyBzbGVlcFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHByZXBhcmUgY2hlY2sgYXJlYSBpZiBjb25maWd1cmVkICovCisKKwlzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUoKTsKKworCS8qIHN0b3JlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciByZWNvdmVyeSBibG9jayAqLworCisJczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMgPSB2aXJ0X3RvX3BoeXMocmVnc19zYXZlKTsKKworCURCRygiczNjMjQxMF9zbGVlcF9zYXZlX3BoeXM9MHglMDhseFxuIiwgczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMpOworCisJLyogc2F2ZSBhbGwgbmVjZXNzYXJ5IGNvcmUgcmVnaXN0ZXJzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBkcml2ZXJzICovCisKKwlzM2MyNDEwX3BtX2RvX3NhdmUoZ3Bpb19zYXZlLCBBUlJBWV9TSVpFKGdwaW9fc2F2ZSkpOworCXMzYzI0MTBfcG1fZG9fc2F2ZShjb3JlX3NhdmUsIEFSUkFZX1NJWkUoY29yZV9zYXZlKSk7CisJczNjMjQxMF9wbV9kb19zYXZlKHVhcnRfc2F2ZSwgQVJSQVlfU0laRSh1YXJ0X3NhdmUpKTsKKworCS8qIHNldCB0aGUgaXJxIGNvbmZpZ3VyYXRpb24gZm9yIHdha2UgKi8KKworCXMzYzI0MTBfcG1fY29uZmlndXJlX2V4dGludCgpOworCisJREJHKCJzbGVlcDogaXJxIHdha2V1cCBtYXNrczogJTA4bHgsJTA4bHhcbiIsCisJICAgIHMzY19pcnF3YWtlX2ludG1hc2ssIHMzY19pcnF3YWtlX2VpbnRtYXNrKTsKKworCV9fcmF3X3dyaXRlbChzM2NfaXJxd2FrZV9pbnRtYXNrLCBTM0MyNDEwX0lOVE1TSyk7CisJX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBTM0MyNDEwX0VJTlRNQVNLKTsKKworCS8qIGFjayBhbnkgb3V0c3RhbmRpbmcgZXh0ZXJuYWwgaW50ZXJydXB0cyBiZWZvcmUgd2UgZ28gdG8gc2xlZXAgKi8KKworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwgUzNDMjQxMF9FSU5UUEVORCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UUE5EKSwgUzNDMjQxMF9JTlRQTkQpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksIFMzQzI0MTBfU1JDUE5EKTsKKworCS8qIGNhbGwgY3B1IHNwZWNpZmljIHByZXBlcmF0aW9uICovCisKKwlwbV9jcHVfcHJlcCgpOworCisJLyogZmx1c2ggY2FjaGUgYmFjayB0byByYW0gKi8KKworCWZsdXNoX2NhY2hlX2FsbCgpOworCisJczNjMjQxMF9wbV9jaGVja19zdG9yZSgpOworCisJLyogc2VuZCB0aGUgY3B1IHRvIHNsZWVwLi4uICovCisKKwlfX3Jhd193cml0ZWwoMHgwMCwgUzNDMjQxMF9DTEtDT04pOyAgLyogdHVybiBvZmYgY2xvY2tzIG92ZXIgc2xlZXAgKi8KKworCS8qIHMzYzI0MTBfY3B1X3NhdmUgd2lsbCBhbHNvIGFjdCBhcyBvdXIgcmV0dXJuIHBvaW50IGZyb20gd2hlbgorCSAqIHdlIHJlc3VtZSBhcyBpdCBzYXZlcyBpdHMgb3duIHJlZ2lzdGVyIHN0YXRlLCBzbyB1c2UgdGhlIHJldHVybgorCSAqIGNvZGUgdG8gZGlmZmVyZW50aWF0ZSByZXR1cm4gZnJvbSBzYXZlIGFuZCByZXR1cm4gZnJvbSBzbGVlcCAqLworCisJaWYgKHMzYzI0MTBfY3B1X3NhdmUocmVnc19zYXZlKSA9PSAwKSB7CisJCWZsdXNoX2NhY2hlX2FsbCgpOworCQlwbV9jcHVfc2xlZXAoKTsKKwl9CisKKwkvKiByZXN0b3JlIHRoZSBjcHUgc3RhdGUgKi8KKworCWNwdV9pbml0KCk7CisKKwkvKiByZXN0b3JlIHRoZSBzeXN0ZW0gc3RhdGUgKi8KKworCXMzYzI0MTBfcG1fZG9fcmVzdG9yZV9jb3JlKGNvcmVfc2F2ZSwgQVJSQVlfU0laRShjb3JlX3NhdmUpKTsKKwlzM2MyNDEwX3BtX2RvX3Jlc3RvcmUoZ3Bpb19zYXZlLCBBUlJBWV9TSVpFKGdwaW9fc2F2ZSkpOworCXMzYzI0MTBfcG1fZG9fcmVzdG9yZSh1YXJ0X3NhdmUsIEFSUkFZX1NJWkUodWFydF9zYXZlKSk7CisKKwlzM2MyNDEwX3BtX2RlYnVnX2luaXQoKTsKKworCS8qIGNoZWNrIHdoYXQgaXJxIChpZiBhbnkpIHJlc3RvcmVkIHRoZSBzeXN0ZW0gKi8KKworCURCRygicG9zdCBzbGVlcDogSVJRcyAweCUwOHgsIDB4JTA4eFxuIiwKKwkgICAgX19yYXdfcmVhZGwoUzNDMjQxMF9TUkNQTkQpLAorCSAgICBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSk7CisKKwlzM2MyNDEwX3BtX3Nob3dfcmVzdW1lX2lycXMoSVJRX0VJTlQwLCBfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksCisJCQkJICAgIHMzY19pcnF3YWtlX2ludG1hc2spOworCisJczNjMjQxMF9wbV9zaG93X3Jlc3VtZV9pcnFzKElSUV9FSU5UNC00LCBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwKKwkJCQkgICAgczNjX2lycXdha2VfZWludG1hc2spOworCisJREJHKCJwb3N0IHNsZWVwLCBwcmVwYXJpbmcgdG8gcmV0dXJuXG4iKTsKKworCXMzYzI0MTBfcG1fY2hlY2tfcmVzdG9yZSgpOworCisJLyogb2ssIGxldCdzIHJldHVybiBmcm9tIHNsZWVwICovCisKKwlEQkcoIlMzQzI0MTAgUE0gUmVzdW1lIChwb3N0LXJlc3RvcmUpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGxlZCBhZnRlciBwcm9jZXNzZXMgYXJlIGZyb3plbiwgYnV0IGJlZm9yZSB3ZSBzaHV0IGRvd24gZGV2aWNlcy4KKyAqLworc3RhdGljIGludCBzM2MyNDEwX3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXJldHVybiAwOworfQorCisvKgorICogQ2FsbGVkIGFmdGVyIGRldmljZXMgYXJlIHJlLXNldHVwLCBidXQgYmVmb3JlIHByb2Nlc3NlcyBhcmUgdGhhd2VkLgorICovCitzdGF0aWMgaW50IHMzYzI0MTBfcG1fZmluaXNoKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB0byBQTV9ESVNLX0ZJUk1XQVJFIHNvIHdlIGNhbiBxdWlja2x5IHZldG8gc3VzcGVuZC10by1kaXNrLgorICovCitzdGF0aWMgc3RydWN0IHBtX29wcyBzM2MyNDEwX3BtX29wcyA9IHsKKwkucG1fZGlza19tb2RlCT0gUE1fRElTS19GSVJNV0FSRSwKKwkucHJlcGFyZQk9IHMzYzI0MTBfcG1fcHJlcGFyZSwKKwkuZW50ZXIJCT0gczNjMjQxMF9wbV9lbnRlciwKKwkuZmluaXNoCQk9IHMzYzI0MTBfcG1fZmluaXNoLAorfTsKKworLyogczNjMjQxMF9wbV9pbml0CisgKgorICogQXR0YWNoIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCisgKiBmcm9tIHRoZSBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBpZiB0aGUgYm9hcmQgc3VwcG9ydHMKKyAqIGl0LgorKi8KKworaW50IF9faW5pdCBzM2MyNDEwX3BtX2luaXQodm9pZCkKK3sKKwlwcmludGsoIlMzQzI0MTAgUG93ZXIgTWFuYWdlbWVudCwgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iKTsKKworCXBtX3NldF9vcHMoJnMzYzI0MTBfcG1fb3BzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LWlycS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHgtaXJxLmMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHgtaXJxLmMKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWlycS5jCmluZGV4IGVkZTk0NjMuLmEwZTM5ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LWlycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWlycS5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHgtaXJxLmMKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWlycS5jCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CkBAIC0zNSw5ICszNSw5IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1pcnEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgImNwdS5oIgotI2luY2x1ZGUgInBtLmgiCi0jaW5jbHVkZSAiaXJxLmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9pcnEuaD4KIAogLyogY2FtZXJhIGlycSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYwpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCmluZGV4IDIzYzc0OTQuLjc2N2YyZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYwpAQCAtMSw5ICsxLDkgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LmMKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKICAqICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKLSAqIFNhbXN1bmcgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBNb2JpbGUgQ1BVIHN1cHBvcnQKKyAqIFNhbXN1bmcgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBNb2JpbGUgQ1BVIHN1cHBvcnQgKG5vdCBTM0MyNDQzKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMzUsMTMgKzM1LDEzIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvai5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZHNjLmg+CiAKLSNpbmNsdWRlICJzM2MyNDEwLmgiCi0jaW5jbHVkZSAiczNjMjQ0MC5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0MC5oPgogI2luY2x1ZGUgInMzYzI0NHguaCIKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImRldnMuaCIKLSNpbmNsdWRlICJjcHUuaCIKLSNpbmNsdWRlICJwbS5oIgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2MyNDR4X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJSU9ERVNDX0VOVChDTEtQV1IpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHguaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmgKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHguaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguaAppbmRleCAxNDg4YzFlLi5mOGVkMTc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmgKQEAgLTEsNCArMSw0IEBACi0vKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5oCisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNTM0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUwpAQCAtMCwwICsxLDE1NyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMCBQb3dlciBNYW5hZ2VyIChTdXNwZW5kLVRvLVJBTSkgc3VwcG9ydAorICoKKyAqIEJhc2VkIG9uIFBYQS9TQTExMDAgc2xlZXAgY29kZSBieToKKyAqCU5pY29sYXMgUGl0cmUsIChjKSAyMDAyIE1vbnRhIFZpc3RhIFNvZnR3YXJlIEluYworICoJQ2xpZmYgQnJha2UsIChjKSAyMDAxCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1tZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorCisvKiBDT05GSUdfREVCVUdfUkVTVU1FIGlzIGRhbmdlcm91cyBpZiB5b3VyIGJvb3Rsb2FkZXIgZG9lcyBub3QKKyAqIHJlc2V0IHRoZSBVQVJUIGNvbmZpZ3VyYXRpb24sIG9ubHkgZW5hYmxlIGlmIHlvdSByZWFsbHkgbmVlZCB0aGlzIQorKi8KKy8vI2RlZmluZSBDT05GSUdfREVCVUdfUkVTVU1FCisKKwkudGV4dAorCisJLyogczNjMjQxMF9jcHVfc2F2ZQorCSAqCisJICogc2F2ZSBlbm91Z2ggb2YgdGhlIENQVSBzdGF0ZSB0byBhbGxvdyB1cyB0byByZS1zdGFydAorCSAqIHBtLmMgY29kZS4gYXMgd2Ugc3RvcmUgaXRlbXMgbGlrZSB0aGUgc3AvbHIsIHdlIHdpbGwKKwkgKiBlbmQgdXAgcmV0dXJuaW5nIGZyb20gdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSBjcHUgcmVzdW1lcworCSAqIHNvIHRoZSByZXR1cm4gdmFsdWUgaXMgc2V0IHRvIG1hcmsgdGhpcy4KKwkgKgorCSAqIFRoaXMgYXJhbmdlbWVudCBtZWFucyB3ZSBhdm9pZCBoYXZpbmcgdG8gZmx1c2ggdGhlIGNhY2hlCisJICogZnJvbSB0aGlzIGNvZGUuCisJICoKKwkgKiBlbnRyeToKKwkgKglyMCA9IHBvaW50ZXIgdG8gc2F2ZSBibG9jaworCSAqCisJICogZXhpdDoKKwkgKglyMCA9IDAgPT4gd2Ugc3RvcmVkIGV2ZXJ5dGhpbmcKKwkgKgkgICAgIDEgPT4gcmVzdW1lZCBmcm9tIHNsZWVwCisJKi8KKworRU5UUlkoczNjMjQxMF9jcHVfc2F2ZSkKKwlzdG1mZAlzcCEsIHsgcjQgLSByMTIsIGxyIH0KKworCUBAIHN0b3JlIGNvLXByb2Nlc3NvciByZWdpc3RlcnMKKworCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgUElECisJbXJjCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI2LCBjMiwgYzAsIDAJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHJlc3MKKwltcmMJcDE1LCAwLCByNywgYzEsIGMwLCAwCUAgY29udHJvbCByZWdpc3RlcgorCisJc3RtaWEJcjAsIHsgcjQgLSByMTMgfQorCisJbW92CXIwLCAjMAorCWxkbWZkCXNwLCB7IHI0IC0gcjEyLCBwYyB9CisKKwlAQCByZXR1cm4gdG8gdGhlIGNhbGxlciwgYWZ0ZXIgaGF2aW5nIHRoZSBNTVUKKwlAQCB0dXJuZWQgb24sIHRoaXMgcmVzdG9yZXMgdGhlIGxhc3QgYml0cyBmcm9tIHRoZQorCUBAIHN0YWNrCityZXN1bWVfd2l0aF9tbXU6CisJbW92CXIwLCAjMQorCWxkbWZkCXNwISwgeyByNCAtIHIxMiwgcGMgfQorCisJLmx0b3JnCisKKwlAQCB0aGUgbmV4dCBiaXRzIHNpdCBpbiB0aGUgLmRhdGEgc2VnbWVudCwgZXZlbiB0aG91Z2ggdGhleQorCUBAIGhhcHBlbiB0byBiZSBjb2RlLi4uIHRoZSBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cyBuZWVkcyB0byBiZQorCUBAIGFjY2Vzc2VkIGJ5IHRoZSByZXN1bWUgY29kZSBiZWZvcmUgaXQgY2FuIHJlc3RvcmUgdGhlIE1NVS4KKwlAQCBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGhhcyB0byBiZSBjbG9zZSBlbm91Z2ggZm9yIHRoZQorCUBAIGNvZGUgdG8gcmVhZCBpdC4uLiBzaW5jZSB0aGUgLnRleHQgc2VnbWVudCBuZWVkcyB0byBiZSBSTywKKwlAQCB0aGUgZGF0YSBzZWdtZW50IGNhbiBiZSB0aGUgb25seSBwbGFjZSB0byBwdXQgdGhpcyBjb2RlLgorCisJLmRhdGEKKworCS5nbG9iYWwJczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMKK3MzYzI0MTBfc2xlZXBfc2F2ZV9waHlzOgorCS53b3JkCTAKKworCS8qIHMzYzI0MTBfY3B1X3Jlc3VtZQorCSAqCisJICogcmVzdW1lIGNvZGUgZW50cnkgZm9yIGJvb3Rsb2FkZXIgdG8gY2FsbAorCSAqCisJICogd2UgbXVzdCBwdXQgdGhpcyBjb2RlIGhlcmUgaW4gdGhlIGRhdGEgc2VnbWVudCBhcyB3ZSBoYXZlIG5vCisJICogb3RoZXIgd2F5IG9mIHJlc3RvcmluZyB0aGUgc3RhY2sgcG9pbnRlciBhZnRlciBzbGVlcCwgYW5kIHdlCisJICogbXVzdCBub3Qgd3JpdGUgdG8gdGhlIGNvZGUgc2VnbWVudCAoY29kZSBpcyByZWFkLW9ubHkpCisJKi8KKworRU5UUlkoczNjMjQxMF9jcHVfcmVzdW1lKQorCW1vdglyMCwgI1BTUl9JX0JJVCB8IFBTUl9GX0JJVCB8IFNWQ19NT0RFCisJbXNyCWNwc3JfYywgcjAKKworCUBAIGxvYWQgVUFSVCB0byBhbGxvdyB1cyB0byBwcmludCB0aGUgdHdvIGNoYXJhY3RlcnMgZm9yCisJQEAgcmVzdW1lIGRlYnVnCisKKwltb3YJcjIsICNTM0MyNFhYX1BBX1VBUlQgJiAweGZmMDAwMDAwCisJb3JyCXIyLCByMiwgI1MzQzI0WFhfUEFfVUFSVCAmIDB4ZmYwMDAKKworI2lmIDAKKwkvKiBTTURLMjQ0MCBMRUQgc2V0ICovCisJbW92CXIxNCwgI1MzQzI0WFhfUEFfR1BJTworCWxkcglyMTIsIFsgcjE0LCAjMHg1NCBdCisJYmljCXIxMiwgcjEyLCAjMzw8NAorCW9ycglyMTIsIHIxMiwgIzE8PDcKKwlzdHIJcjEyLCBbIHIxNCwgIzB4NTQgXQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfUkVTVU1FCisJbW92CXIzLCAjJ0wnCisJc3RyYglyMywgWyByMiwgI1MzQzI0MTBfVVRYSCBdCisxMDAxOgorCWxkcmIJcjE0LCBbIHIzLCAjUzNDMjQxMF9VVFJTVEFUIF0KKwl0c3QJcjE0LCAjUzNDMjQxMF9VVFJTVEFUX1RYRQorCWJlcQkxMDAxYgorI2VuZGlmIC8qIENPTkZJR19ERUJVR19SRVNVTUUgKi8KKworCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCQlAQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltY3IJcDE1LCAwLCByMSwgYzcsIGM3LCAwCQlAQCBpbnZhbGlkYXRlIEkgJiBEIGNhY2hlcworCisJbGRyCXIwLCBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cwlAIGFkZHJlc3Mgb2YgcmVzdG9yZSBibG9jaworCWxkbWlhCXIwLCB7IHI0IC0gcjEzIH0KKworCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCQlAIFBJRAorCW1jcglwMTUsIDAsIHI1LCBjMywgYzAsIDAJCUAgRG9tYWluIElECisJbWNyCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlCisKKyNpZmRlZiBDT05GSUdfREVCVUdfUkVTVU1FCisJbW92CXIzLCAjJ1InCisJc3RyYglyMywgWyByMiwgI1MzQzI0MTBfVVRYSCBdCisjZW5kaWYKKworCWxkcglyMiwgPXJlc3VtZV93aXRoX21tdQorCW1jcglwMTUsIDAsIHI3LCBjMSwgYzAsIDAJCUAgdHVybiBvbiBNTVUsIGV0YworCW5vcAkJCQkJQCBzZWNvbmQtdG8tbGFzdCBiZWZvcmUgbW11CisJbW92CXBjLCByMgkJCQlAIGdvIGJhY2sgdG8gdmlydHVhbCBhZGRyZXNzCisKKwkubHRvcmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC90aW1lLmMKaW5kZXggOTkxMGJmMC4uYzUyM2QxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3RpbWUuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3RpbWUuYworLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3RpbWUuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzLCA8YmVuQHNpbXRlYy5jby51az4KQEAgLTM3LDggKzM3LDggQEAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWlycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3N0YXJ0dmFsOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfdXNlY190aWNrczsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDIuYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDIuYwppbmRleCBkNDdlMzlmLi41OTc0NzY4IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAyLmMKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMi5jCkBAIC04LDcgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTM2LDEyICszNSwxMSBAQAogc3RhdGljIHN0cnVjdCBldGhfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGV0aF9kYXRhWzJdOwogZXh0ZXJuIHN0cnVjdCBsY2RjX3BsYXRmb3JtX2RhdGEgYXRzdGsxMDAwX2ZiMF9kYXRhOwogCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gc3BpMF9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKIAl7CisJCS8qIFFWR0EgZGlzcGxheSAqLwogCQkubW9kYWxpYXMJPSAibHR2MzUwcXYiLAotCQkuY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKilHUElPX1BJTl9QQSg0KSwKIAkJLm1heF9zcGVlZF9oegk9IDE2MDAwMDAwLAotCQkuYnVzX251bQk9IDAsCiAJCS5jaGlwX3NlbGVjdAk9IDEsCiAJfSwKIH07CkBAIC0xNDksOCArMTQ3LDcgQEAKIAogCXNldF9od19hZGRyKGF0MzJfYWRkX2RldmljZV9ldGgoMCwgJmV0aF9kYXRhWzBdKSk7CiAKLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGlfYm9hcmRfaW5mbykpOwotCWF0MzJfYWRkX2RldmljZV9zcGkoMCk7CisJYXQzMl9hZGRfZGV2aWNlX3NwaSgwLCBzcGkwX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpMF9ib2FyZF9pbmZvKSk7CiAJYXQzMl9hZGRfZGV2aWNlX2xjZGMoMCwgJmF0c3RrMTAwMF9mYjBfZGF0YSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCBkYjhmOGI1Li43YzI3OTU4IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC04LDE0ICs4LDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpZiAhZGVmaW5lZChDT05GSUdfTkZTRCkgJiYgIWRlZmluZWQoQ09ORklHX05GU0RfTU9EVUxFKQotI2RlZmluZSBzeXNfbmZzc2VydmN0bCBzeXNfbmlfc3lzY2FsbAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfU1lTVl9JUEMpCi0jIGRlZmluZSBzeXNfaXBjCXN5c19uaV9zeXNjYWxsCi0jZW5kaWYKLQogCS5zZWN0aW9uIC5yb2RhdGEsImEiLEBwcm9nYml0cwogCS50eXBlCXN5c19jYWxsX3RhYmxlLEBvYmplY3QKIAkuZ2xvYmFsCXN5c19jYWxsX3RhYmxlCkBAIC0xMjksNyArMTIxLDcgQEAKIAkubG9uZwlzeXNfZ2V0aXRpbWVyCQkvKiAxMDUgKi8KIAkubG9uZwlzeXNfc3dhcG9mZgogCS5sb25nCXN5c19zeXNpbmZvCi0JLmxvbmcJc3lzX2lwYworCS5sb25nCXN5c19uaV9zeXNjYWxsCQkvKiB3YXMgc3lzX2lwYyBicmllZmx5ICovCiAJLmxvbmcJc3lzX3NlbmRmaWxlCiAJLmxvbmcJc3lzX3NldGRvbWFpbm5hbWUJLyogMTEwICovCiAJLmxvbmcJc3lzX25ld3VuYW1lCkBAIC0yODcsNCArMjc5LDE2IEBACiAJLmxvbmcJc3lzX3RlZQogCS5sb25nCXN5c192bXNwbGljZQogCS5sb25nCV9fc3lzX2Vwb2xsX3B3YWl0CS8qIDI2NSAqLworCS5sb25nCXN5c19tc2dnZXQKKwkubG9uZwlzeXNfbXNnc25kCisJLmxvbmcJc3lzX21zZ3JjdgorCS5sb25nCXN5c19tc2djdGwKKwkubG9uZwlzeXNfc2VtZ2V0CQkvKiAyNzAgKi8KKwkubG9uZwlzeXNfc2Vtb3AKKwkubG9uZwlzeXNfc2VtY3RsCisJLmxvbmcJc3lzX3NlbXRpbWVkb3AKKwkubG9uZwlzeXNfc2htYXQKKwkubG9uZwlzeXNfc2htZ2V0CQkvKiAyNzUgKi8KKwkubG9uZwlzeXNfc2htZHQKKwkubG9uZwlzeXNfc2htY3RsCiAJLmxvbmcJc3lzX25pX3N5c2NhbGwJCS8qIHI4IGlzIHNhdHVyYXRlZCBhdCBucl9zeXNjYWxscyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvdGltZS5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvdGltZS5jCmluZGV4IGEyZjc0YWYuLmMxMDgzM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC90aW1lLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkucmVhZAkJPSByZWFkX2N5Y2xlX2NvdW50LAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAogCS5zaGlmdAkJPSAxNiwKLQkuaXNfY29udGludW91cwk9IDEsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAwMC5jIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDAwLmMKaW5kZXggYzFlNDc3ZS4uYmMyMzU1MCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDAwLmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDAwLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC0zMTAsOCArMzExLDYgQEAKIHsKIAl1MzIgY29udHJvbDsKIAotCUJVR19PTihjbGstPmluZGV4ID4gNyk7Ci0KIAljb250cm9sID0gc21fcmVhZGwoJnN5c3RlbV9tYW5hZ2VyLCBQTV9HQ0NUUkwgKyA0ICogY2xrLT5pbmRleCk7CiAJaWYgKGVuYWJsZWQpCiAJCWNvbnRyb2wgfD0gU01fQklUKENFTik7CkBAIC0zMjUsMTEgKzMyNCw2IEBACiAJdTMyIGNvbnRyb2w7CiAJdW5zaWduZWQgbG9uZyBkaXYgPSAxOwogCi0JQlVHX09OKGNsay0+aW5kZXggPiA3KTsKLQotCWlmICghY2xrLT5wYXJlbnQpCi0JCXJldHVybiAwOwotCiAJY29udHJvbCA9IHNtX3JlYWRsKCZzeXN0ZW1fbWFuYWdlciwgUE1fR0NDVFJMICsgNCAqIGNsay0+aW5kZXgpOwogCWlmIChjb250cm9sICYgU01fQklUKERJVkVOKSkKIAkJZGl2ID0gMiAqIChTTV9CRkVYVChESVYsIGNvbnRyb2wpICsgMSk7CkBAIC0zNDIsMTEgKzMzNiw2IEBACiAJdTMyIGNvbnRyb2w7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwgYWN0dWFsX3JhdGUsIGRpdjsKIAotCUJVR19PTihjbGstPmluZGV4ID4gNyk7Ci0KLQlpZiAoIWNsay0+cGFyZW50KQotCQlyZXR1cm4gMDsKLQogCXBhcmVudF9yYXRlID0gY2xrLT5wYXJlbnQtPmdldF9yYXRlKGNsay0+cGFyZW50KTsKIAljb250cm9sID0gc21fcmVhZGwoJnN5c3RlbV9tYW5hZ2VyLCBQTV9HQ0NUUkwgKyA0ICogY2xrLT5pbmRleCk7CiAKQEAgLTM3MywxMSArMzYyLDggQEAKIHsKIAl1MzIgY29udHJvbDsKIAotCUJVR19PTihjbGstPmluZGV4ID4gNyk7Ci0KIAlwcmludGsoImNsayAlczogbmV3IHBhcmVudCAlcyAod2FzICVzKVxuIiwKLQkgICAgICAgY2xrLT5uYW1lLCBwYXJlbnQtPm5hbWUsCi0JICAgICAgIGNsay0+cGFyZW50ID8gY2xrLT5wYXJlbnQtPm5hbWUgOiAiKG51bGwpIik7CisJICAgICAgIGNsay0+bmFtZSwgcGFyZW50LT5uYW1lLCBjbGstPnBhcmVudC0+bmFtZSk7CiAKIAljb250cm9sID0gc21fcmVhZGwoJnN5c3RlbV9tYW5hZ2VyLCBQTV9HQ0NUUkwgKyA0ICogY2xrLT5pbmRleCk7CiAKQEAgLTM5OSw2ICszODUsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGdlbmNsa19pbml0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGNvbnRyb2w7CisJc3RydWN0IGNsayAqcGFyZW50OworCisJQlVHX09OKGNsay0+aW5kZXggPiA3KTsKKworCWNvbnRyb2wgPSBzbV9yZWFkbCgmc3lzdGVtX21hbmFnZXIsIFBNX0dDQ1RSTCArIDQgKiBjbGstPmluZGV4KTsKKwlpZiAoY29udHJvbCAmIFNNX0JJVChPU0NTRUwpKQorCQlwYXJlbnQgPSAoY29udHJvbCAmIFNNX0JJVChQTExTRUwpKSA/ICZwbGwxIDogJm9zYzE7CisJZWxzZQorCQlwYXJlbnQgPSAoY29udHJvbCAmIFNNX0JJVChQTExTRUwpKSA/ICZwbGwwIDogJm9zYzA7CisKKwljbGstPnBhcmVudCA9IHBhcmVudDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBTeXN0ZW0gcGVyaXBoZXJhbHMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC03NTAsOCArNzUyLDQxIEBACiBERUZJTkVfREVWKGF0bWVsX3NwaSwgMSk7CiBERVZfQ0xLKHNwaV9jbGssIGF0bWVsX3NwaTEsIHBiYSwgMSk7CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBhdDMyX2FkZF9kZXZpY2Vfc3BpKHVuc2lnbmVkIGludCBpZCkKK3N0YXRpYyB2b2lkCithdDMyX3NwaV9zZXR1cF9zbGF2ZXModW5zaWduZWQgaW50IGJ1c19udW0sIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqYiwKKwkJICAgICAgdW5zaWduZWQgaW50IG4sIGNvbnN0IHU4ICpwaW5zKQogeworCXVuc2lnbmVkIGludCBwaW4sIG1vZGU7CisKKwlmb3IgKDsgbjsgbi0tLCBiKyspIHsKKwkJYi0+YnVzX251bSA9IGJ1c19udW07CisJCWlmIChiLT5jaGlwX3NlbGVjdCA+PSA0KQorCQkJY29udGludWU7CisJCXBpbiA9ICh1bnNpZ25lZCliLT5jb250cm9sbGVyX2RhdGE7CisJCWlmICghcGluKSB7CisJCQlwaW4gPSBwaW5zW2ItPmNoaXBfc2VsZWN0XTsKKwkJCWItPmNvbnRyb2xsZXJfZGF0YSA9ICh2b2lkICopcGluOworCQl9CisJCW1vZGUgPSBBVDMyX0dQSU9GX09VVFBVVDsKKwkJaWYgKCEoYi0+bW9kZSAmIFNQSV9DU19ISUdIKSkKKwkJCW1vZGUgfD0gQVQzMl9HUElPRl9ISUdIOworCQlhdDMyX3NlbGVjdF9ncGlvKHBpbiwgbW9kZSk7CisJfQorfQorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQKK2F0MzJfYWRkX2RldmljZV9zcGkodW5zaWduZWQgaW50IGlkLCBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmIsIHVuc2lnbmVkIGludCBuKQoreworCS8qCisJICogTWFuYWdlIHRoZSBjaGlwc2VsZWN0cyBhcyBHUElPcywgbm9ybWFsbHkgdXNpbmcgdGhlIHNhbWUgcGlucworCSAqIHRoZSBTUEkgY29udHJvbGxlciBleHBlY3RzOyBidXQgYm9hcmRzIGNhbiB1c2Ugb3RoZXIgcGlucy4KKwkgKi8KKwlzdGF0aWMgdTggX19pbml0ZGF0YSBzcGkwX3BpbnNbXSA9CisJCXsgR1BJT19QSU5fUEEoMyksIEdQSU9fUElOX1BBKDQpLAorCQkgIEdQSU9fUElOX1BBKDUpLCBHUElPX1BJTl9QQSgyMCksIH07CisJc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpMV9waW5zW10gPQorCQl7IEdQSU9fUElOX1BCKDIpLCBHUElPX1BJTl9QQigzKSwKKwkJICBHUElPX1BJTl9QQig0KSwgR1BJT19QSU5fUEEoMjcpLCB9OwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAKIAlzd2l0Y2ggKGlkKSB7CkBAIC03NjAsMTQgKzc5NSw3IEBACiAJCXNlbGVjdF9wZXJpcGhlcmFsKFBBKDApLCAgUEVSSVBIX0EsIDApOwkvKiBNSVNPCSAqLwogCQlzZWxlY3RfcGVyaXBoZXJhbChQQSgxKSwgIFBFUklQSF9BLCAwKTsJLyogTU9TSQkgKi8KIAkJc2VsZWN0X3BlcmlwaGVyYWwoUEEoMiksICBQRVJJUEhfQSwgMCk7CS8qIFNDSwkgKi8KLQotCQkvKiBOUENTWzI6MF0gKi8KLQkJYXQzMl9zZWxlY3RfZ3BpbyhHUElPX1BJTl9QQSgzKSwKLQkJCQkgQVQzMl9HUElPRl9PVVRQVVQgfCBBVDMyX0dQSU9GX0hJR0gpOwotCQlhdDMyX3NlbGVjdF9ncGlvKEdQSU9fUElOX1BBKDQpLAotCQkJCSBBVDMyX0dQSU9GX09VVFBVVCB8IEFUMzJfR1BJT0ZfSElHSCk7Ci0JCWF0MzJfc2VsZWN0X2dwaW8oR1BJT19QSU5fUEEoNSksCi0JCQkJIEFUMzJfR1BJT0ZfT1VUUFVUIHwgQVQzMl9HUElPRl9ISUdIKTsKKwkJYXQzMl9zcGlfc2V0dXBfc2xhdmVzKDAsIGIsIG4sIHNwaTBfcGlucyk7CiAJCWJyZWFrOwogCiAJY2FzZSAxOgpAQCAtNzc1LDIwICs4MDMsMTQgQEAKIAkJc2VsZWN0X3BlcmlwaGVyYWwoUEIoMCksICBQRVJJUEhfQiwgMCk7CS8qIE1JU08gICovCiAJCXNlbGVjdF9wZXJpcGhlcmFsKFBCKDEpLCAgUEVSSVBIX0IsIDApOwkvKiBNT1NJICAqLwogCQlzZWxlY3RfcGVyaXBoZXJhbChQQig1KSwgIFBFUklQSF9CLCAwKTsJLyogU0NLICAgKi8KLQotCQkvKiBOUENTWzI6MF0gKi8KLQkJYXQzMl9zZWxlY3RfZ3BpbyhHUElPX1BJTl9QQigyKSwKLQkJCQkgQVQzMl9HUElPRl9PVVRQVVQgfCBBVDMyX0dQSU9GX0hJR0gpOwotCQlhdDMyX3NlbGVjdF9ncGlvKEdQSU9fUElOX1BCKDMpLAotCQkJCSBBVDMyX0dQSU9GX09VVFBVVCB8IEFUMzJfR1BJT0ZfSElHSCk7Ci0JCWF0MzJfc2VsZWN0X2dwaW8oR1BJT19QSU5fUEIoNCksCi0JCQkJIEFUMzJfR1BJT0ZfT1VUUFVUIHwgQVQzMl9HUElPRl9ISUdIKTsKKwkJYXQzMl9zcGlfc2V0dXBfc2xhdmVzKDEsIGIsIG4sIHNwaTFfcGlucyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYiwgbik7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOwogCXJldHVybiBwZGV2OwogfQpAQCAtODcyLDYgKzg5NCw1MCBAQAogCXJldHVybiBwZGV2OwogfQogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEdDTEsKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgc3RydWN0IGNsayBnY2xrMCA9IHsKKwkubmFtZQkJPSAiZ2NsazAiLAorCS5tb2RlCQk9IGdlbmNsa19tb2RlLAorCS5nZXRfcmF0ZQk9IGdlbmNsa19nZXRfcmF0ZSwKKwkuc2V0X3JhdGUJPSBnZW5jbGtfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSBnZW5jbGtfc2V0X3BhcmVudCwKKwkuaW5kZXgJCT0gMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBnY2xrMSA9IHsKKwkubmFtZQkJPSAiZ2NsazEiLAorCS5tb2RlCQk9IGdlbmNsa19tb2RlLAorCS5nZXRfcmF0ZQk9IGdlbmNsa19nZXRfcmF0ZSwKKwkuc2V0X3JhdGUJPSBnZW5jbGtfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSBnZW5jbGtfc2V0X3BhcmVudCwKKwkuaW5kZXgJCT0gMSwKK307CitzdGF0aWMgc3RydWN0IGNsayBnY2xrMiA9IHsKKwkubmFtZQkJPSAiZ2NsazIiLAorCS5tb2RlCQk9IGdlbmNsa19tb2RlLAorCS5nZXRfcmF0ZQk9IGdlbmNsa19nZXRfcmF0ZSwKKwkuc2V0X3JhdGUJPSBnZW5jbGtfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSBnZW5jbGtfc2V0X3BhcmVudCwKKwkuaW5kZXgJCT0gMiwKK307CitzdGF0aWMgc3RydWN0IGNsayBnY2xrMyA9IHsKKwkubmFtZQkJPSAiZ2NsazMiLAorCS5tb2RlCQk9IGdlbmNsa19tb2RlLAorCS5nZXRfcmF0ZQk9IGdlbmNsa19nZXRfcmF0ZSwKKwkuc2V0X3JhdGUJPSBnZW5jbGtfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSBnZW5jbGtfc2V0X3BhcmVudCwKKwkuaW5kZXgJCT0gMywKK307CitzdGF0aWMgc3RydWN0IGNsayBnY2xrNCA9IHsKKwkubmFtZQkJPSAiZ2NsazQiLAorCS5tb2RlCQk9IGdlbmNsa19tb2RlLAorCS5nZXRfcmF0ZQk9IGdlbmNsa19nZXRfcmF0ZSwKKwkuc2V0X3JhdGUJPSBnZW5jbGtfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQJPSBnZW5jbGtfc2V0X3BhcmVudCwKKwkuaW5kZXgJCT0gNCwKK307CisKIHN0cnVjdCBjbGsgKmF0MzJfY2xvY2tfbGlzdFtdID0gewogCSZvc2MzMmssCiAJJm9zYzAsCkBAIC05MDgsNiArOTc0LDExIEBACiAJJmF0bWVsX3NwaTFfc3BpX2NsaywKIAkmbGNkYzBfaGNsaywKIAkmbGNkYzBfcGl4Y2xrLAorCSZnY2xrMCwKKwkmZ2NsazEsCisJJmdjbGsyLAorCSZnY2xrMywKKwkmZ2NsazQsCiB9OwogdW5zaWduZWQgaW50IGF0MzJfbnJfY2xvY2tzID0gQVJSQVlfU0laRShhdDMyX2Nsb2NrX2xpc3QpOwogCkBAIC05MzYsNiArMTAwNywxMyBAQAogCWlmIChzbV9yZWFkbChzbSwgUE1fUExMMSkgJiBTTV9CSVQoUExMT1NDKSkKIAkJcGxsMS5wYXJlbnQgPSAmb3NjMTsKIAorCWdlbmNsa19pbml0X3BhcmVudCgmZ2NsazApOworCWdlbmNsa19pbml0X3BhcmVudCgmZ2NsazEpOworCWdlbmNsa19pbml0X3BhcmVudCgmZ2NsazIpOworCWdlbmNsa19pbml0X3BhcmVudCgmZ2NsazMpOworCWdlbmNsa19pbml0X3BhcmVudCgmZ2NsazQpOworCWdlbmNsa19pbml0X3BhcmVudCgmbGNkYzBfcGl4Y2xrKTsKKwogCS8qCiAJICogVHVybiBvbiBhbGwgY2xvY2tzIHRoYXQgaGF2ZSBhdCBsZWFzdCBvbmUgdXNlciBhbHJlYWR5LCBhbmQKIAkgKiB0dXJuIG9mZiBldmVyeXRoaW5nIGVsc2UuIFdlIG9ubHkgZG8gdGhpcyBmb3IgbW9kdWxlCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2Nsb2NrLmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2Nsb2NrLmMKaW5kZXggM2QwZDEwOS4uMDBjNDM1NCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jbG9jay5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvY2xvY2suYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwgQ29ycG9yYXRpb24KICAqCi0gKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suYworICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1hdDkxL2Nsb2NrLmMKICAqICAgQ29weXJpZ2h0IChDKSAyMDA1IERhdmlkIEJyb3duZWxsCiAgKiAgIENvcHlyaWdodCAoQykgMjAwNSBJdmFuIEtva3NoYXlza3kKICAqCkBAIC02Myw3ICs2MywxMSBAQAogCiBzdGF0aWMgdm9pZCBfX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlCVUdfT04oY2xrLT51c2VycyA9PSAwKTsKKwlpZiAoY2xrLT51c2VycyA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1pc21hdGNoZWQgZGlzYWJsZVxuIiwgY2xrLT5uYW1lKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KIAogCWlmICgtLWNsay0+dXNlcnMgPT0gMCAmJiBjbGstPm1vZGUpCiAJCWNsay0+bW9kZShjbGssIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jbG9jay5oIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jbG9jay5oCmluZGV4IGY5NTNmMDQuLmJiOGUxZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvY2xvY2suaAorKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2Nsb2NrLmgKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEF0bWVsIENvcnBvcmF0aW9uCiAgKgotICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmMKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCiAgKiAgIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBCcm93bmVsbAogICogICBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5CiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jCmluZGV4IDEwNzc5NmUuLmQ0N2NmYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogewogCXBjZjg1NjNfaW5pdCgpOwogCWlmIChyZWdpc3Rlcl9jaHJkZXYoUENGODU2M19NQUpPUiwgREVWSUNFX05BTUUsICZwY2Y4NTYzX2ZvcHMpIDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5hYmxlIHRvIGdldCBtYWpvciBudW1lciAlZCBmb3IgUlRDIGRldmljZS5cbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbmFibGUgdG8gZ2V0IG1ham9yIG51bWJlciAlZCBmb3IgUlRDIGRldmljZS5cbiIsCiAJCSAgICAgICBQQ0Y4NTYzX05BTUUsIFBDRjg1NjNfTUFKT1IpOwogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCmluZGV4IDU0NGFiMDEuLjI0YjkxOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCQlnb3RvIGVycjsKIAogCWlmIChyZWdpc3Rlcl9jaHJkZXYoUENGODU2M19NQUpPUiwgREVWSUNFX05BTUUsICZwY2Y4NTYzX2ZvcHMpIDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5hYmxlIHRvIGdldCBtYWpvciBudW1lciAlZCBmb3IgUlRDIGRldmljZS5cbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbmFibGUgdG8gZ2V0IG1ham9yIG51bWJlciAlZCBmb3IgUlRDIGRldmljZS5cbiIsCiAJCSAgICAgICBQQ0Y4NTYzX05BTUUsIFBDRjg1NjNfTUFKT1IpOwogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvaW50cy5jIGIvYXJjaC9oODMwMC9rZXJuZWwvaW50cy5jCmluZGV4IDU4N2VmN2YuLjNlNGY0NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL2ludHMuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9pbnRzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaW50cy5jIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaW50cy5jCmluZGV4IDU2N2Y2ODEuLmE3MWQ2ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2ludHMuYworKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvS2NvbmZpZyBiL2FyY2gvaTM4Ni9LY29uZmlnCmluZGV4IDYzZDVlODQuLjJmNzY3MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9LY29uZmlnCisrKyBiL2FyY2gvaTM4Ni9LY29uZmlnCkBAIC0xOCw2ICsxOCwxOSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIENMT0NLU09VUkNFX1dBVENIRE9HCisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUworCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUMKKwogY29uZmlnIExPQ0tERVBfU1VQUE9SVAogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTc0LDYgKzg3LDggQEAKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCitzb3VyY2UgImtlcm5lbC90aW1lL0tjb25maWciCisKIGNvbmZpZyBTTVAKIAlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IgogCS0tLWhlbHAtLS0KQEAgLTIwMyw2ICsyMTgsMTUgQEAKIAkgIEhvd2V2ZXIsIHdoZW4gcnVuIHdpdGhvdXQgYSBoeXBlcnZpc29yIHRoZSBrZXJuZWwgaXMKIAkgIHRoZW9yZXRpY2FsbHkgc2xvd2VyLiAgSWYgaW4gZG91YnQsIHNheSBOLgogCitjb25maWcgVk1JCisJYm9vbCAiVk1JIFBhcmF2aXJ0LW9wcyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUEFSQVZJUlQgJiYgIU5PX0haCisJZGVmYXVsdCB5CisJaGVscAorCSAgVk1JIHByb3ZpZGVzIGEgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZSB0byBtdWx0aXBsZSBoeXBlcnZpc29ycworCSAgaW5jbHVkZSBWTXdhcmUgRVNYIHNlcnZlciBhbmQgWGVuIGJ5IGNvbm5lY3RpbmcgdG8gYSBST00gbW9kdWxlCisJICBwcm92aWRlZCBieSB0aGUgaHlwZXJ2aXNvci4KKwogY29uZmlnIEFDUElfU1JBVAogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTEyNjMsMyArMTI4NywxMiBAQAogY29uZmlnIEtUSU1FX1NDQUxBUgogCWJvb2wKIAlkZWZhdWx0IHkKKworY29uZmlnIE5PX0lETEVfSFoKKwlib29sCisJZGVwZW5kcyBvbiBQQVJBVklSVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFN3aXRjaGVzIHRoZSByZWd1bGFyIEhaIHRpbWVyIG9mZiB3aGVuIHRoZSBzeXN0ZW0gaXMgZ29pbmcgaWRsZS4KKwkgIFRoaXMgaGVscHMgYSBoeXBlcnZpc29yIGRldGVjdCB0aGF0IHRoZSBMaW51eCBzeXN0ZW0gaXMgaWRsZSwKKwkgIHJlZHVjaW5nIHRoZSBvdmVyaGVhZCBvZiBpZGxlIHN5c3RlbXMuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvS2NvbmZpZy5jcHUgYi9hcmNoL2kzODYvS2NvbmZpZy5jcHUKaW5kZXggMmFlY2ZiYS4uYjk5YzBlMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gvaTM4Ni9LY29uZmlnLmNwdQpAQCAtMjI2LDExICsyMjYsNiBAQAogCWRlcGVuZHMgb24gIU0zODYKIAlkZWZhdWx0IHkKIAotY29uZmlnIFg4Nl9YQURECi0JYm9vbAotCWRlcGVuZHMgb24gIU0zODYKLQlkZWZhdWx0IHkKLQogY29uZmlnIFg4Nl9MMV9DQUNIRV9TSElGVAogCWludAogCWRlZmF1bHQgIjciIGlmIE1QRU5USVVNNCB8fCBYODZfR0VORVJJQwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcuZGVidWcgYi9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZwppbmRleCBmNjhjYzZmLi40NThiYzE2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZwpAQCAtODcsNyArODcsNyBAQAogCiBjb25maWcgREVCVUdfUEFSQVZJUlQKIAlib29sICJFbmFibGUgc29tZSBwYXJhdmlydHVhbGl6YXRpb24gZGVidWdnaW5nIgotCWRlZmF1bHQgeQorCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gUEFSQVZJUlQgJiYgREVCVUdfS0VSTkVMCiAJaGVscAogCSAgQ3VycmVudGx5IGRlbGliZXJhdGVseSBjbG9iYmVycyByZWdzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIGJlCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvYm9vdC9jb21wcmVzc2VkL3JlbG9jcy5jIGIvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC9yZWxvY3MuYwppbmRleCA4ODE5NTFjLi5jZTRmZGEyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvYm9vdC9jb21wcmVzc2VkL3JlbG9jcy5jCisrKyBiL2FyY2gvaTM4Ni9ib290L2NvbXByZXNzZWQvcmVsb2NzLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxlbmRpYW4uaD4KIAogI2RlZmluZSBNQVhfU0hEUlMgMTAwCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQogc3RhdGljIEVsZjMyX0VoZHIgZWhkcjsKIHN0YXRpYyBFbGYzMl9TaGRyIHNoZHJbTUFYX1NIRFJTXTsKIHN0YXRpYyBFbGYzMl9TeW0gICpzeW10YWJbTUFYX1NIRFJTXTsKQEAgLTcxLDcgKzcyLDcgQEAKICN1bmRlZiBTWU1fVFlQRQogCX07CiAJY29uc3QgY2hhciAqbmFtZSA9ICJ1bmtub3duIHN5bSB0eXBlIG5hbWUiOwotCWlmICh0eXBlIDwgc2l6ZW9mKHR5cGVfbmFtZSkvc2l6ZW9mKHR5cGVfbmFtZVswXSkpIHsKKwlpZiAodHlwZSA8IEFSUkFZX1NJWkUodHlwZV9uYW1lKSkgewogCQluYW1lID0gdHlwZV9uYW1lW3R5cGVdOwogCX0KIAlyZXR1cm4gbmFtZTsKQEAgLTg3LDcgKzg4LDcgQEAKICN1bmRlZiBTWU1fQklORAogCX07CiAJY29uc3QgY2hhciAqbmFtZSA9ICJ1bmtub3duIHN5bSBiaW5kIG5hbWUiOwotCWlmIChiaW5kIDwgc2l6ZW9mKGJpbmRfbmFtZSkvc2l6ZW9mKGJpbmRfbmFtZVswXSkpIHsKKwlpZiAoYmluZCA8IEFSUkFZX1NJWkUoYmluZF9uYW1lKSkgewogCQluYW1lID0gYmluZF9uYW1lW2JpbmRdOwogCX0KIAlyZXR1cm4gbmFtZTsKQEAgLTEwNCw3ICsxMDUsNyBAQAogI3VuZGVmIFNZTV9WSVNJQklMSVRZCiAJfTsKIAljb25zdCBjaGFyICpuYW1lID0gInVua25vd24gc3ltIHZpc2liaWxpdHkgbmFtZSI7Ci0JaWYgKHZpc2liaWxpdHkgPCBzaXplb2YodmlzaWJpbGl0eV9uYW1lKS9zaXplb2YodmlzaWJpbGl0eV9uYW1lWzBdKSkgeworCWlmICh2aXNpYmlsaXR5IDwgQVJSQVlfU0laRSh2aXNpYmlsaXR5X25hbWUpKSB7CiAJCW5hbWUgPSB2aXNpYmlsaXR5X25hbWVbdmlzaWJpbGl0eV07CiAJfQogCXJldHVybiBuYW1lOwpAQCAtMTI4LDcgKzEyOSw3IEBACiAjdW5kZWYgUkVMX1RZUEUKIAl9OwogCWNvbnN0IGNoYXIgKm5hbWUgPSAidW5rbm93biB0eXBlIHJlbCB0eXBlIG5hbWUiOwotCWlmICh0eXBlIDwgc2l6ZW9mKHR5cGVfbmFtZSkvc2l6ZW9mKHR5cGVfbmFtZVswXSkpIHsKKwlpZiAodHlwZSA8IEFSUkFZX1NJWkUodHlwZV9uYW1lKSkgewogCQluYW1lID0gdHlwZV9uYW1lW3R5cGVdOwogCX0KIAlyZXR1cm4gbmFtZTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9kZWZjb25maWcgYi9hcmNoL2kzODYvZGVmY29uZmlnCmluZGV4IGJiMGMzNzYuLjVhZTFlMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9kZWZjb25maWcKKysrIGIvYXJjaC9pMzg2L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzMKLSMgRnJpIEphbiAgNSAxMTo1NDo0NiAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtZ2l0OAorIyBUdWUgRmViIDEzIDExOjI1OjE4IDIwMDcKICMKIENPTkZJR19YODZfMzI9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CkBAIC0xMCw2ICsxMCw3IEBACiBDT05GSUdfU0VNQVBIT1JFX1NMRUVQRVJTPXkKIENPTkZJR19YODY9eQogQ09ORklHX01NVT15CitDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CiBDT05GSUdfR0VORVJJQ19JT01BUD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQpAQCAtMTM5LDcgKzE0MCw2IEBACiAjIENPTkZJR19NVklBQzNfMiBpcyBub3Qgc2V0CiBDT05GSUdfWDg2X0dFTkVSSUM9eQogQ09ORklHX1g4Nl9DTVBYQ0hHPXkKLUNPTkZJR19YODZfWEFERD15CiBDT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUPTcKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldApAQCAtMTk4LDYgKzE5OCw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0hJR0hQVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogQ09ORklHX01UUlI9eQpAQCAtMjExLDYgKzIxMiw3IEBACiBDT05GSUdfSFo9MjUwCiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDEwMDAwMAogIyBDT05GSUdfUkVMT0NBVEFCTEUgaXMgbm90IHNldAogQ09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MTAwMDAwCiAjIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0CkBAIC0yMjksMTMgKzIzMSwxNCBAQAogIyBBQ1BJIChBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UpIFN1cHBvcnQKICMKIENPTkZJR19BQ1BJPXkKK0NPTkZJR19BQ1BJX1BST0NGUz15CiBDT05GSUdfQUNQSV9BQz15CiBDT05GSUdfQUNQSV9CQVRURVJZPXkKIENPTkZJR19BQ1BJX0JVVFRPTj15Ci0jIENPTkZJR19BQ1BJX1ZJREVPIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDUElfSE9US0VZIGlzIG5vdCBzZXQKIENPTkZJR19BQ1BJX0ZBTj15CiAjIENPTkZJR19BQ1BJX0RPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9CQVkgaXMgbm90IHNldAogQ09ORklHX0FDUElfUFJPQ0VTU09SPXkKIENPTkZJR19BQ1BJX1RIRVJNQUw9eQogIyBDT05GSUdfQUNQSV9BU1VTIGlzIG5vdCBzZXQKQEAgLTMwNiw3ICszMDksNiBAQAogQ09ORklHX1BDSV9NTUNPTkZJRz15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiBDT05GSUdfUENJX01TST15Ci0jIENPTkZJR19QQ0lfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQpAQCAtMzQ3LDYgKzM0OSw3IEBACiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtNDQ2LDYgKzQ0OSw3IEBACiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCkBAIC00NjYsOCArNDcwLDcgQEAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCi1DT05GSUdfUE5QPXkKLUNPTkZJR19QTlBBQ1BJPXkKKyMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CiAKICMKICMgQmxvY2sgZGV2aWNlcwpAQCAtNTE1LDYgKzUxOCw3IEBACiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUFDUEk9eQogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAogCiAjCkBAIC01NDcsNiArNTUxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9QSUlYPXkKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CkBAIC01NTcsNiArNTYyLDcgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiAjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKQEAgLTY1NSw2ICs2NjEsNyBAQAogIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKICMKIENPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX0FIQ0k9eQogQ09ORklHX1NBVEFfU1ZXPXkKIENPTkZJR19BVEFfUElJWD15CkBAIC02NzAsNiArNjc3LDcgQEAKICMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1ZJQT15CiAjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9JTlRFTF9DT01CSU5FRD15CiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CkBAIC02ODcsNiArNjk1LDcgQEAKICMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CkBAIC03MzksOSArNzQ4LDcgQEAKICMgU3Vic3lzdGVtIE9wdGlvbnMKICMKICMgQ09ORklHX0lFRUUxMzk0X1ZFUkJPU0VERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NF9PVUlfREIgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTRfRVhUUkFfQ09ORklHX1JPTVMgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTRfRVhQT1JUX0ZVTExfQVBJIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNzY3LDYgKzc3NCwxMSBAQAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIAogIworIyBNYWNpbnRvc2ggZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BQ19FTVVNT1VTRUJUTiBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX05FVERFVklDRVM9eQpAQCAtODMzLDYgKzg0NSw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtODU1LDExICs4NjgsMTMgQEAKIENPTkZJR19USUdPTjM9eQogQ09ORklHX0JOWDI9eQogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldApAQCAtMTA5MCw2ICsxMTA1LDcgQEAKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKIENPTkZJR19TT1VORF9QUklNRT15CitDT05GSUdfT0JTT0xFVEVfT1NTPXkKICMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0VTMTM3MSBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfSUNIPXkKQEAgLTExMDMsNiArMTExOSw3IEBACiAjIEhJRCBEZXZpY2VzCiAjCiBDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHN1cHBvcnQKQEAgLTExMTcsMTAgKzExMzQsOCBAQAogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEzMCw5ICsxMTQ1LDExIEBACiAjIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTE4Myw2ICsxMjAwLDcgQEAKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dUQ08gaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTEyODgsNiArMTMwNiwxMCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIwogIyBWaXJ0dWFsaXphdGlvbgogIwogIyBDT05GSUdfS1ZNIGlzIG5vdCBzZXQKQEAgLTE0ODAsNiArMTUwMiw3IEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKQEAgLTE0ODgsNyArMTUxMSw2IEBACiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKQEAgLTE1MzMsNyArMTU1NSw4IEBACiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfUExJU1Q9eQotQ09ORklHX0lPTUFQX0NPUFk9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMWU4OTg4ZS4uNGFlM2RjZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCkBAIC0xOCw3ICsxOCw3IEBACiBvYmotJChDT05GSUdfWDg2X0NQVUlEKQkJKz0gY3B1aWQubwogb2JqLSQoQ09ORklHX01JQ1JPQ09ERSkJCSs9IG1pY3JvY29kZS5vCiBvYmotJChDT05GSUdfQVBNKQkJKz0gYXBtLm8KLW9iai0kKENPTkZJR19YODZfU01QKQkJKz0gc21wLm8gc21wYm9vdC5vCitvYmotJChDT05GSUdfWDg2X1NNUCkJCSs9IHNtcC5vIHNtcGJvb3QubyB0c2Nfc3luYy5vCiBvYmotJChDT05GSUdfWDg2X1RSQU1QT0xJTkUpCSs9IHRyYW1wb2xpbmUubwogb2JqLSQoQ09ORklHX1g4Nl9NUFBBUlNFKQkrPSBtcHBhcnNlLm8KIG9iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpYy5vIG5taS5vCkBAIC0zMiw3ICszMiw2IEBACiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vCiBvYmoteQkJCQkrPSBzeXNlbnRlci5vIHZzeXNjYWxsLm8KIG9iai0kKENPTkZJR19BQ1BJX1NSQVQpIAkrPSBzcmF0Lm8KLW9iai0kKENPTkZJR19IUEVUX1RJTUVSKSAJKz0gdGltZV9ocGV0Lm8KIG9iai0kKENPTkZJR19FRkkpIAkJKz0gZWZpLm8gZWZpX3N0dWIubwogb2JqLSQoQ09ORklHX0RPVUJMRUZBVUxUKSAJKz0gZG91YmxlZmF1bHQubwogb2JqLSQoQ09ORklHX1ZNODYpCQkrPSB2bTg2Lm8KQEAgLTQwLDggKzM5LDkgQEAKIG9iai0kKENPTkZJR19IUEVUX1RJTUVSKSAJKz0gaHBldC5vCiBvYmotJChDT05GSUdfSzhfTkIpCQkrPSBrOC5vCiAKLSMgTWFrZSBzdXJlIHRoaXMgaXMgbGlua2VkIGFmdGVyIGFueSBvdGhlciBwYXJhdmlydF9vcHMgc3RydWN0czogc2VlIGhlYWQuUworb2JqLSQoQ09ORklHX1ZNSSkJCSs9IHZtaS5vIHZtaXRpbWUubwogb2JqLSQoQ09ORklHX1BBUkFWSVJUKQkJKz0gcGFyYXZpcnQubworb2JqLXkJCQkJKz0gcGNzcGVha2VyLm8KIAogRVhUUkFfQUZMQUdTICAgOj0gLXRyYWRpdGlvbmFsCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IGU5NGFmZjYuLmU1ZWI5N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpX3BtdG1yLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjE1LDYgKzYxNiw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfSFBFVF9USU1FUgorI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfcGFyc2VfaHBldChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewpAQCAtNjQ1LDI0ICs2NDcsMTEgQEAKIAkJaHBldF9yZXMtPmVuZCA9ICgxICogMTAyNCkgLSAxOwogCX0KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQl2eHRpbWUuaHBldF9hZGRyZXNzID0gaHBldF90YmwtPmFkZHJlc3MuYWRkcmVzczsKLQorCWhwZXRfYWRkcmVzcyA9IGhwZXRfdGJsLT5hZGRyZXNzLmFkZHJlc3M7CiAJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkhQRVQgaWQ6ICUjeCBiYXNlOiAlI2x4XG4iLAotCQlocGV0X3RibC0+aWQsIHZ4dGltZS5ocGV0X2FkZHJlc3MpOworCSAgICAgICBocGV0X3RibC0+aWQsIGhwZXRfYWRkcmVzcyk7CiAKLQlyZXNfc3RhcnQgPSB2eHRpbWUuaHBldF9hZGRyZXNzOwotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFg4NiAqLwotCXsKLQkJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHBldF9hZGRyZXNzOwotCi0JCWhwZXRfYWRkcmVzcyA9IGhwZXRfdGJsLT5hZGRyZXNzLmFkZHJlc3M7Ci0JCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJIUEVUIGlkOiAlI3ggYmFzZTogJSNseFxuIiwKLQkJCWhwZXRfdGJsLT5pZCwgaHBldF9hZGRyZXNzKTsKLQotCQlyZXNfc3RhcnQgPSBocGV0X2FkZHJlc3M7Ci0JfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFg4NiAqLworCXJlc19zdGFydCA9IGhwZXRfYWRkcmVzczsKIAogCWlmIChocGV0X3JlcykgewogCQlocGV0X3Jlcy0+c3RhcnQgPSByZXNfc3RhcnQ7CkBAIC02NzYsMTAgKzY2NSw2IEBACiAjZGVmaW5lCWFjcGlfcGFyc2VfaHBldAlOVUxMCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfUE1fVElNRVIKLWV4dGVybiB1MzIgcG10bXJfaW9wb3J0OwotI2VuZGlmCi0KIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfcGFyc2VfZmFkdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewogCkBAIC04NjUsMTAgKzg1MCw5IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgYWNwaV9wcm9jZXNzX21hZHQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlpbnQgY291bnQsIGVycm9yOworCWludCBlcnJvcjsKIAotCWNvdW50ID0gYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19NQURULCBhY3BpX3BhcnNlX21hZHQpOwotCWlmIChjb3VudCA+PSAxKSB7CisJaWYgKCFhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX01BRFQsIGFjcGlfcGFyc2VfbWFkdCkpIHsKIAogCQkvKgogCQkgKiBQYXJzZSBNQURUIExBUElDIGVudHJpZXMKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMKaW5kZXggNzc2ZDliZS4uOTY1NWMyMyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpX3BtdG1yLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC0zNiw2ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KICNpbmNsdWRlIDxhc20vaTgyNTMuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL2lkbGUuaD4KIAogI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgogI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgpAQCAtNDQsMTI4ICs0Nyw1NDkgQEAKICNpbmNsdWRlICJpb19wb3J0cy5oIgogCiAvKgotICogY3B1X21hc2sgdGhhdCBkZW5vdGVzIHRoZSBDUFVzIHRoYXQgbmVlZHMgdGltZXIgaW50ZXJydXB0IGNvbWluZyBpbiBhcwotICogSVBJcyBpbiBwbGFjZSBvZiBsb2NhbCBBUElDIHRpbWVycworICogU2FuaXR5IGNoZWNrCiAgKi8KLXN0YXRpYyBjcHVtYXNrX3QgdGltZXJfYmNhc3RfaXBpOworI2lmIChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIDB4MEYpICE9IDB4MEYKKyMgZXJyb3IgU1BVUklPVVNfQVBJQ19WRUNUT1IgZGVmaW5pdGlvbiBlcnJvcgorI2VuZGlmCiAKIC8qCiAgKiBLbm9iIHRvIGNvbnRyb2wgb3VyIHdpbGxpbmduZXNzIHRvIGVuYWJsZSB0aGUgbG9jYWwgQVBJQy4KKyAqCisgKiAtMT1mb3JjZS1kaXNhYmxlLCArMT1mb3JjZS1lbmFibGUKICAqLwotc3RhdGljIGludCBlbmFibGVfbG9jYWxfYXBpYyBfX2luaXRkYXRhID0gMDsgLyogLTE9Zm9yY2UtZGlzYWJsZSwgKzE9Zm9yY2UtZW5hYmxlICovCitzdGF0aWMgaW50IGVuYWJsZV9sb2NhbF9hcGljIF9faW5pdGRhdGEgPSAwOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbGFwaWNfZGlzYWJsZSh2b2lkKQotewotCWVuYWJsZV9sb2NhbF9hcGljID0gLTE7Ci0JY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0FQSUMsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbGFwaWNfZW5hYmxlKHZvaWQpCi17Ci0JZW5hYmxlX2xvY2FsX2FwaWMgPSAxOwotfQorLyogTG9jYWwgQVBJQyB0aW1lciB2ZXJpZmljYXRpb24gb2sgKi8KK3N0YXRpYyBpbnQgbG9jYWxfYXBpY190aW1lcl92ZXJpZnlfb2s7CiAKIC8qCi0gKiBEZWJ1ZyBsZXZlbAorICogRGVidWcgbGV2ZWwsIGV4cG9ydGVkIGZvciBpb19hcGljLmMKICAqLwogaW50IGFwaWNfdmVyYm9zaXR5OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGlicmF0aW9uX3Jlc3VsdDsKIAorc3RhdGljIGludCBsYXBpY19uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KTsKK3N0YXRpYyB2b2lkIGxhcGljX3RpbWVyX3NldHVwKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KTsKK3N0YXRpYyB2b2lkIGxhcGljX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzayk7CiBzdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpOwogCi1zdGF0aWMgaW50IG1vZGVybl9hcGljKHZvaWQpCisvKgorICogVGhlIGxvY2FsIGFwaWMgdGltZXIgY2FuIGJlIHVzZWQgZm9yIGFueSBmdW5jdGlvbiB3aGljaCBpcyBDUFUgbG9jYWwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGxhcGljX2Nsb2NrZXZlbnQgPSB7CisJLm5hbWUJCT0gImxhcGljIiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QKKwkJCXwgQ0xPQ0tfRVZUX0ZFQVRfQzNTVE9QIHwgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVksCisJLnNoaWZ0CQk9IDMyLAorCS5zZXRfbW9kZQk9IGxhcGljX3RpbWVyX3NldHVwLAorCS5zZXRfbmV4dF9ldmVudAk9IGxhcGljX25leHRfZXZlbnQsCisJLmJyb2FkY2FzdAk9IGxhcGljX3RpbWVyX2Jyb2FkY2FzdCwKKwkucmF0aW5nCQk9IDEwMCwKKwkuaXJxCQk9IC0xLAorfTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBsYXBpY19ldmVudHMpOworCisvKiBMb2NhbCBBUElDIHdhcyBkaXNhYmxlZCBieSB0aGUgQklPUyBhbmQgZW5hYmxlZCBieSB0aGUga2VybmVsICovCitzdGF0aWMgaW50IGVuYWJsZWRfdmlhX2FwaWNiYXNlOworCisvKgorICogR2V0IHRoZSBMQVBJQyB2ZXJzaW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxhcGljX2dldF92ZXJzaW9uKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGx2ciwgdmVyc2lvbjsKLQkvKiBBTUQgc3lzdGVtcyB1c2Ugb2xkIEFQSUMgdmVyc2lvbnMsIHNvIGNoZWNrIHRoZSBDUFUgKi8KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCi0JCWJvb3RfY3B1X2RhdGEueDg2ID49IDB4ZikKLQkJcmV0dXJuIDE7Ci0JbHZyID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQl2ZXJzaW9uID0gR0VUX0FQSUNfVkVSU0lPTihsdnIpOwotCXJldHVybiB2ZXJzaW9uID49IDB4MTQ7CisJcmV0dXJuIEdFVF9BUElDX1ZFUlNJT04oYXBpY19yZWFkKEFQSUNfTFZSKSk7CiB9CiAKIC8qCi0gKiAnd2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yJy4KLSAqIGVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsdmVzLgorICogQ2hlY2ssIGlmIHRoZSBBUElDIGlzIGludGVncmF0ZWQgb3IgYSBzZXBlcmF0ZSBjaGlwCiAgKi8KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyBpbmxpbmUgaW50IGxhcGljX2lzX2ludGVncmF0ZWQodm9pZCkKIHsKLQlwcmludGsoInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7Ci0JLyoKLQkgKiBDdXJyZW50bHkgdW5leHBlY3RlZCB2ZWN0b3JzIGhhcHBlbiBvbmx5IG9uIFNNUCBhbmQgQVBJQy4KLQkgKiBXZSBfbXVzdF8gYWNrIHRoZXNlIGJlY2F1c2UgZXZlcnkgbG9jYWwgQVBJQyBoYXMgb25seSBOCi0JICogaXJxIHNsb3RzIHBlciBwcmlvcml0eSBsZXZlbCwgYW5kIGEgJ2hhbmdpbmcsIHVuYWNrZWQnIElSUQotCSAqIGhvbGRzIHVwIGFuIGlycSBzbG90IC0gaW4gZXhjZXNzaXZlIGNhc2VzICh3aGVuIG11bHRpcGxlCi0JICogdW5leHBlY3RlZCB2ZWN0b3JzIG9jY3VyKSB0aGF0IG1pZ2h0IGxvY2sgdXAgdGhlIEFQSUMKLQkgKiBjb21wbGV0ZWx5LgotCSAqIEJ1dCBvbmx5IGFjayB3aGVuIHRoZSBBUElDIGlzIGVuYWJsZWQgLUFLCi0JICovCi0JaWYgKGNwdV9oYXNfYXBpYykKLQkJYWNrX0FQSUNfaXJxKCk7CisJcmV0dXJuIEFQSUNfSU5URUdSQVRFRChsYXBpY19nZXRfdmVyc2lvbigpKTsKIH0KIAotdm9pZCBfX2luaXQgYXBpY19pbnRyX2luaXQodm9pZCkKKy8qCisgKiBDaGVjaywgd2hldGhlciB0aGlzIGlzIGEgbW9kZXJuIG9yIGEgZmlyc3QgZ2VuZXJhdGlvbiBBUElDCisgKi8KK3N0YXRpYyBpbnQgbW9kZXJuX2FwaWModm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfU01QCi0Jc21wX2ludHJfaW5pdCgpOwotI2VuZGlmCi0JLyogc2VsZiBnZW5lcmF0ZWQgSVBJIGZvciBsb2NhbCBBUElDIHRpbWVyICovCi0Jc2V0X2ludHJfZ2F0ZShMT0NBTF9USU1FUl9WRUNUT1IsIGFwaWNfdGltZXJfaW50ZXJydXB0KTsKLQotCS8qIElQSSB2ZWN0b3JzIGZvciBBUElDIHNwdXJpb3VzIGFuZCBlcnJvciBpbnRlcnJ1cHRzICovCi0Jc2V0X2ludHJfZ2F0ZShTUFVSSU9VU19BUElDX1ZFQ1RPUiwgc3B1cmlvdXNfaW50ZXJydXB0KTsKLQlzZXRfaW50cl9nYXRlKEVSUk9SX0FQSUNfVkVDVE9SLCBlcnJvcl9pbnRlcnJ1cHQpOwotCi0JLyogdGhlcm1hbCBtb25pdG9yIExWVCBpbnRlcnJ1cHQgKi8KLSNpZmRlZiBDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwKLQlzZXRfaW50cl9nYXRlKFRIRVJNQUxfQVBJQ19WRUNUT1IsIHRoZXJtYWxfaW50ZXJydXB0KTsKLSNlbmRpZgorCS8qIEFNRCBzeXN0ZW1zIHVzZSBvbGQgQVBJQyB2ZXJzaW9ucywgc28gY2hlY2sgdGhlIENQVSAqLworCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKKwkgICAgYm9vdF9jcHVfZGF0YS54ODYgPj0gMHhmKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gbGFwaWNfZ2V0X3ZlcnNpb24oKSA+PSAweDE0OwogfQogCi0vKiBVc2luZyBBUElDIHRvIGdlbmVyYXRlIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQ/ICovCi1pbnQgdXNpbmdfYXBpY190aW1lciBfX3JlYWRfbW9zdGx5ID0gMDsKLQotc3RhdGljIGludCBlbmFibGVkX3ZpYV9hcGljYmFzZTsKLQorLyoqCisgKiBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCAtIGVuYWJsZSBOTUkgdGhyb3VnaCBsb2NhbCB2ZWN0b3IgdGFibGUgMAorICovCiB2b2lkIGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwICh2b2lkICogZHVtbXkpCiB7Ci0JdW5zaWduZWQgaW50IHYsIHZlcjsKKwl1bnNpZ25lZCBpbnQgdiA9IEFQSUNfRE1fTk1JOwogCi0JdmVyID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHZlcik7Ci0JdiA9IEFQSUNfRE1fTk1JOwkJCS8qIHVubWFzayBhbmQgc2V0IHRvIE5NSSAqLwotCWlmICghQVBJQ19JTlRFR1JBVEVEKHZlcikpCQkvKiA4MjQ4OURYICovCisJLyogTGV2ZWwgdHJpZ2dlcmVkIGZvciA4MjQ4OURYICovCisJaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCiAJCXYgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsKIAlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIHYpOwogfQogCisvKioKKyAqIGdldF9waHlzaWNhbF9icm9hZGNhc3QgLSBHZXQgbnVtYmVyIG9mIHBoeXNpY2FsIGJyb2FkY2FzdCBJRHMKKyAqLwogaW50IGdldF9waHlzaWNhbF9icm9hZGNhc3Qodm9pZCkKIHsKLQlpZiAobW9kZXJuX2FwaWMoKSkKLQkJcmV0dXJuIDB4ZmY7Ci0JZWxzZQotCQlyZXR1cm4gMHhmOworCXJldHVybiBtb2Rlcm5fYXBpYygpID8gMHhmZiA6IDB4ZjsKIH0KIAotaW50IGdldF9tYXhsdnQodm9pZCkKKy8qKgorICogbGFwaWNfZ2V0X21heGx2dCAtIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbG9jYWwgdmVjdG9yIHRhYmxlIGVudHJpZXMKKyAqLworaW50IGxhcGljX2dldF9tYXhsdnQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgdiwgdmVyLCBtYXhsdnQ7CisJdW5zaWduZWQgaW50IHYgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwogCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2KTsKIAkvKiA4MjQ4OURYcyBkbyBub3QgcmVwb3J0ICMgb2YgTFZUIGVudHJpZXMuICovCi0JbWF4bHZ0ID0gQVBJQ19JTlRFR1JBVEVEKHZlcikgPyBHRVRfQVBJQ19NQVhMVlQodikgOiAyOwotCXJldHVybiBtYXhsdnQ7CisJcmV0dXJuIEFQSUNfSU5URUdSQVRFRChHRVRfQVBJQ19WRVJTSU9OKHYpKSA/IEdFVF9BUElDX01BWExWVCh2KSA6IDI7CiB9CiAKKy8qCisgKiBMb2NhbCBBUElDIHRpbWVyCisgKi8KKworLyogQ2xvY2sgZGl2aXNvciBpcyBzZXQgdG8gMTYgKi8KKyNkZWZpbmUgQVBJQ19ESVZJU09SIDE2CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGxvY2FsIEFQSUMgdGltZXIsIHdpdGggYSB0aW1lb3V0IG9mCisgKiAnY2xvY2tzJyBBUElDIGJ1cyBjbG9jay4gRHVyaW5nIGNhbGlicmF0aW9uIHdlIGFjdHVhbGx5IGNhbGwKKyAqIHRoaXMgZnVuY3Rpb24gdHdpY2Ugb24gdGhlIGJvb3QgQ1BVLCBvbmNlIHdpdGggYSBib2d1cyB0aW1lb3V0CisgKiB2YWx1ZSwgc2Vjb25kIHRpbWUgZm9yIHJlYWwuIFRoZSBvdGhlciAobm9uY2FsaWJyYXRpbmcpIENQVXMKKyAqIGNhbGwgdGhpcyBmdW5jdGlvbiBvbmx5IG9uY2UsIHdpdGggdGhlIHJlYWwsIGNhbGlicmF0ZWQgdmFsdWUuCisgKgorICogV2UgZG8gcmVhZHMgYmVmb3JlIHdyaXRlcyBldmVuIGlmIHVubmVjZXNzYXJ5LCB0byBnZXQgYXJvdW5kIHRoZQorICogUDUgQVBJQyBkb3VibGUgd3JpdGUgYnVnLgorICovCitzdGF0aWMgdm9pZCBfX3NldHVwX0FQSUNfTFZUVCh1bnNpZ25lZCBpbnQgY2xvY2tzLCBpbnQgb25lc2hvdCwgaW50IGlycWVuKQoreworCXVuc2lnbmVkIGludCBsdnR0X3ZhbHVlLCB0bXBfdmFsdWU7CisKKwlsdnR0X3ZhbHVlID0gTE9DQUxfVElNRVJfVkVDVE9SOworCWlmICghb25lc2hvdCkKKwkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9USU1FUl9QRVJJT0RJQzsKKwlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKKwkJbHZ0dF92YWx1ZSB8PSBTRVRfQVBJQ19USU1FUl9CQVNFKEFQSUNfVElNRVJfQkFTRV9ESVYpOworCisJaWYgKCFpcnFlbikKKwkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9NQVNLRUQ7CisKKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVFQsIGx2dHRfdmFsdWUpOworCisJLyoKKwkgKiBEaXZpZGUgUElDTEsgYnkgMTYKKwkgKi8KKwl0bXBfdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX1REQ1IsICh0bXBfdmFsdWUKKwkJCQkmIH4oQVBJQ19URFJfRElWXzEgfCBBUElDX1REUl9ESVZfVE1CQVNFKSkKKwkJCQl8IEFQSUNfVERSX0RJVl8xNik7CisKKwlpZiAoIW9uZXNob3QpCisJCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfVE1JQ1QsIGNsb2Nrcy9BUElDX0RJVklTT1IpOworfQorCisvKgorICogUHJvZ3JhbSB0aGUgbmV4dCBldmVudCwgcmVsYXRpdmUgdG8gbm93CisgKi8KK3N0YXRpYyBpbnQgbGFwaWNfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX1RNSUNULCBkZWx0YSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgbGFwaWMgdGltZXIgaW4gcGVyaW9kaWMgb3Igb25lc2hvdCBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIGxhcGljX3RpbWVyX3NldHVwKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHY7CisKKwkvKiBMYXBpYyB1c2VkIGZvciBicm9hZGNhc3QgPyAqLworCWlmICghbG9jYWxfYXBpY190aW1lcl92ZXJpZnlfb2spCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlfX3NldHVwX0FQSUNfTFZUVChjYWxpYnJhdGlvbl9yZXN1bHQsCisJCQkJICBtb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOworCQl2IHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOworCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVFQsIHYpOworCQlicmVhazsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBMb2NhbCBBUElDIHRpbWVyIGJyb2FkY2FzdCBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZCBsYXBpY190aW1lcl9icm9hZGNhc3QoY3B1bWFza190IG1hc2spCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXNlbmRfSVBJX21hc2sobWFzaywgTE9DQUxfVElNRVJfVkVDVE9SKTsKKyNlbmRpZgorfQorCisvKgorICogU2V0dXAgdGhlIGxvY2FsIEFQSUMgdGltZXIgZm9yIHRoaXMgQ1BVLiBDb3B5IHRoZSBpbml0aWxpemVkIHZhbHVlcworICogb2YgdGhlIGJvb3QgQ1BVIGFuZCByZWdpc3RlciB0aGUgY2xvY2sgZXZlbnQgaW4gdGhlIGZyYW1ld29yay4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHNldHVwX0FQSUNfdGltZXIodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpsZXZ0ID0gJl9fZ2V0X2NwdV92YXIobGFwaWNfZXZlbnRzKTsKKworCW1lbWNweShsZXZ0LCAmbGFwaWNfY2xvY2tldmVudCwgc2l6ZW9mKCpsZXZ0KSk7CisJbGV2dC0+Y3B1bWFzayA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UobGV2dCk7Cit9CisKKy8qCisgKiBJbiB0aGlzIGZ1bmN0aW9ucyB3ZSBjYWxpYnJhdGUgQVBJQyBidXMgY2xvY2tzIHRvIHRoZSBleHRlcm5hbCB0aW1lci4KKyAqCisgKiBXZSB3YW50IHRvIGRvIHRoZSBjYWxpYnJhdGlvbiBvbmx5IG9uY2Ugc2luY2Ugd2Ugd2FudCB0byBoYXZlIGxvY2FsIHRpbWVyCisgKiBpcnFzIHN5bmNyb24uIENQVXMgY29ubmVjdGVkIGJ5IHRoZSBzYW1lIEFQSUMgYnVzIGhhdmUgdGhlIHZlcnkgc2FtZSBidXMKKyAqIGZyZXF1ZW5jeS4KKyAqCisgKiBUaGlzIHdhcyBwcmV2aW91c2x5IGRvbmUgYnkgcmVhZGluZyB0aGUgUElUL0hQRVQgYW5kIHdhaXRpbmcgZm9yIGEgd3JhcAorICogYXJvdW5kIHRvIGZpbmQgb3V0LCB0aGF0IGEgdGljayBoYXMgZWxhcHNlZC4gSSBoYXZlIGEgYm94LCB3aGVyZSB0aGUgUElUCisgKiByZWFkb3V0IGlzIGJyb2tlbiwgc28gaXQgbmV2ZXIgZ2V0cyBvdXQgb2YgdGhlIHdhaXQgbG9vcCBhZ2Fpbi4gVGhpcyB3YXMKKyAqIGFsc28gcmVwb3J0ZWQgYnkgb3RoZXJzLgorICoKKyAqIE1vbml0b3JpbmcgdGhlIGppZmZpZXMgdmFsdWUgaXMgaW5hY2N1cmF0ZSBhbmQgdGhlIGNsb2NrZXZlbnRzCisgKiBpbmZyYXN0cnVjdHVyZSBhbGxvd3MgdXMgdG8gZG8gYSBzaW1wbGUgc3Vic3RpdHV0aW9uIG9mIHRoZSBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIuCisgKgorICogVGhlIGNhbGlicmF0aW9uIHJvdXRpbmUgYWxzbyB1c2VzIHRoZSBwbV90aW1lciB3aGVuIHBvc3NpYmxlLCBhcyB0aGUgUElUCisgKiBoYXBwZW5zIHRvIHJ1biB3YXkgdG9vIHNsb3cgKGZhY3RvciAyLjMgb24gbXkgVkFJTyBDb3JlRHVvLCB3aGljaCBnb2VzCisgKiBiYWNrIHRvIG5vcm1hbCBsYXRlciBpbiB0aGUgYm9vdCBwcm9jZXNzKS4KKyAqLworCisjZGVmaW5lIExBUElDX0NBTF9MT09QUwkJKEhaLzEwKQorCitzdGF0aWMgX19pbml0ZGF0YSB2b2xhdGlsZSBpbnQgbGFwaWNfY2FsX2xvb3BzID0gLTE7CitzdGF0aWMgX19pbml0ZGF0YSBsb25nIGxhcGljX2NhbF90MSwgbGFwaWNfY2FsX3QyOworc3RhdGljIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBsb25nIGxhcGljX2NhbF90c2MxLCBsYXBpY19jYWxfdHNjMjsKK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbGFwaWNfY2FsX3BtMSwgbGFwaWNfY2FsX3BtMjsKK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbGFwaWNfY2FsX2oxLCBsYXBpY19jYWxfajI7CisKKy8qCisgKiBUZW1wb3JhcnkgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBsYXBpY19jYWxfaGFuZGxlcihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHRzYyA9IDA7CisJbG9uZyB0YXBpYyA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKKwl1bnNpZ25lZCBsb25nIHBtID0gYWNwaV9wbV9yZWFkX2Vhcmx5KCk7CisKKwlpZiAoY3B1X2hhc190c2MpCisJCXJkdHNjbGwodHNjKTsKKworCXN3aXRjaCAobGFwaWNfY2FsX2xvb3BzKyspIHsKKwljYXNlIDA6CisJCWxhcGljX2NhbF90MSA9IHRhcGljOworCQlsYXBpY19jYWxfdHNjMSA9IHRzYzsKKwkJbGFwaWNfY2FsX3BtMSA9IHBtOworCQlsYXBpY19jYWxfajEgPSBqaWZmaWVzOworCQlicmVhazsKKworCWNhc2UgTEFQSUNfQ0FMX0xPT1BTOgorCQlsYXBpY19jYWxfdDIgPSB0YXBpYzsKKwkJbGFwaWNfY2FsX3RzYzIgPSB0c2M7CisJCWlmIChwbSA8IGxhcGljX2NhbF9wbTEpCisJCQlwbSArPSBBQ1BJX1BNX09WUlJVTjsKKwkJbGFwaWNfY2FsX3BtMiA9IHBtOworCQlsYXBpY19jYWxfajIgPSBqaWZmaWVzOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgYm9vdCBBUElDCisgKgorICogQ2FsaWJyYXRlIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdC4KKyAqLwordm9pZCBfX2luaXQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7CisJY29uc3QgbG9uZyBwbV8xMDBtcyA9IFBNVE1SX1RJQ0tTX1BFUl9TRUMvMTA7CisJY29uc3QgbG9uZyBwbV90aHJlc2ggPSBwbV8xMDBtcy8xMDA7CisJdm9pZCAoKnJlYWxfaGFuZGxlcikoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKKwl1bnNpZ25lZCBsb25nIGRlbHRhajsKKwlsb25nIGRlbHRhLCBkZWx0YXBtOworCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiVXNpbmcgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHRzLlxuIgorCQkgICAgImNhbGlicmF0aW5nIEFQSUMgdGltZXIgLi4uXG4iKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBSZXBsYWNlIHRoZSBnbG9iYWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlyZWFsX2hhbmRsZXIgPSBnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXI7CisJZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyID0gbGFwaWNfY2FsX2hhbmRsZXI7CisKKwkvKgorCSAqIFNldHVwIHRoZSBBUElDIGNvdW50ZXIgdG8gMWU5LiBUaGVyZSBpcyBubyB3YXkgdGhlIGxhcGljCisJICogY2FuIHVuZGVyZmxvdyBpbiB0aGUgMTAwbXMgZGV0ZWN0aW9uIHRpbWUgZnJhbWUKKwkgKi8KKwlfX3NldHVwX0FQSUNfTFZUVCgxMDAwMDAwMDAwLCAwLCAwKTsKKworCS8qIExldCB0aGUgaW50ZXJydXB0cyBydW4gKi8KKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwl3aGlsZShsYXBpY19jYWxfbG9vcHMgPD0gTEFQSUNfQ0FMX0xPT1BTKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBSZXN0b3JlIHRoZSByZWFsIGV2ZW50IGhhbmRsZXIgKi8KKwlnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXIgPSByZWFsX2hhbmRsZXI7CisKKwkvKiBCdWlsZCBkZWx0YSB0MS10MiBhcyBhcGljIHRpbWVyIGNvdW50cyBkb3duICovCisJZGVsdGEgPSBsYXBpY19jYWxfdDEgLSBsYXBpY19jYWxfdDI7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIGxhcGljIGRlbHRhID0gJWxkXG4iLCBkZWx0YSk7CisKKwkvKiBDaGVjaywgaWYgdGhlIFBNIHRpbWVyIGlzIGF2YWlsYWJsZSAqLworCWRlbHRhcG0gPSBsYXBpY19jYWxfcG0yIC0gbGFwaWNfY2FsX3BtMTsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgZGVsdGEgPSAlbGRcbiIsIGRlbHRhcG0pOworCisJaWYgKGRlbHRhcG0pIHsKKwkJdW5zaWduZWQgbG9uZyBtdWx0OworCQl1NjQgcmVzOworCisJCW11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KFBNVE1SX1RJQ0tTX1BFUl9TRUMsIDIyKTsKKworCQlpZiAoZGVsdGFwbSA+IChwbV8xMDBtcyAtIHBtX3RocmVzaCkgJiYKKwkJICAgIGRlbHRhcG0gPCAocG1fMTAwbXMgKyBwbV90aHJlc2gpKSB7CisJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgcmVzdWx0IG9rXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXJlcyA9ICgoKHU2NCkgZGVsdGFwbSkgKiAgbXVsdCkgPj4gMjI7CisJCQlkb19kaXYocmVzLCAxMDAwMDAwKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFQSUMgY2FsaWJyYXRpb24gbm90IGNvbnNpc3RlbnQgIgorCQkJICAgICAgICJ3aXRoIFBNIFRpbWVyOiAlbGRtcyBpbnN0ZWFkIG9mIDEwMG1zXG4iLAorCQkJICAgICAgIChsb25nKXJlcyk7CisJCQkvKiBDb3JyZWN0IHRoZSBsYXBpYyBjb3VudGVyIHZhbHVlICovCisJCQlyZXMgPSAoKCh1NjQpIGRlbHRhICkgKiBwbV8xMDBtcyk7CisJCQlkb19kaXYocmVzLCBkZWx0YXBtKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIkFQSUMgZGVsdGEgYWRqdXN0ZWQgdG8gUE0tVGltZXI6ICIKKwkJCSAgICAgICAiJWx1ICglbGQpXG4iLCAodW5zaWduZWQgbG9uZykgcmVzLCBkZWx0YSk7CisJCQlkZWx0YSA9IChsb25nKSByZXM7CisJCX0KKwl9CisKKwkvKiBDYWxjdWxhdGUgdGhlIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciAqLworCWxhcGljX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhkZWx0YSwgVElDS19OU0VDICogTEFQSUNfQ0FMX0xPT1BTLCAzMik7CisJbGFwaWNfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRkZGLCAmbGFwaWNfY2xvY2tldmVudCk7CisJbGFwaWNfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4RiwgJmxhcGljX2Nsb2NrZXZlbnQpOworCisJY2FsaWJyYXRpb25fcmVzdWx0ID0gKGRlbHRhICogQVBJQ19ESVZJU09SKSAvIExBUElDX0NBTF9MT09QUzsKKworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIGRlbHRhICVsZFxuIiwgZGVsdGEpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIG11bHQ6ICVsZFxuIiwgbGFwaWNfY2xvY2tldmVudC5tdWx0KTsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBjYWxpYnJhdGlvbiByZXN1bHQ6ICV1XG4iLAorCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0KTsKKworCWlmIChjcHVfaGFzX3RzYykgeworCQlkZWx0YSA9IChsb25nKShsYXBpY19jYWxfdHNjMiAtIGxhcGljX2NhbF90c2MxKTsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gQ1BVIGNsb2NrIHNwZWVkIGlzICIKKwkJCSAgICAiJWxkLiUwNGxkIE1Iei5cbiIsCisJCQkgICAgKGRlbHRhIC8gTEFQSUNfQ0FMX0xPT1BTKSAvICgxMDAwMDAwIC8gSFopLAorCQkJICAgIChkZWx0YSAvIExBUElDX0NBTF9MT09QUykgJSAoMTAwMDAwMCAvIEhaKSk7CisJfQorCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gaG9zdCBidXMgY2xvY2sgc3BlZWQgaXMgIgorCQkgICAgIiV1LiUwNHUgTUh6LlxuIiwKKwkJICAgIGNhbGlicmF0aW9uX3Jlc3VsdCAvICgxMDAwMDAwIC8gSFopLAorCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0ICUgKDEwMDAwMDAgLyBIWikpOworCisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gdmVyaWZ5IEFQSUMgdGltZXJcbiIpOworCisJLyoKKwkgKiBTZXR1cCB0aGUgYXBpYyB0aW1lciBtYW51YWxseQorCSAqLworCWxvY2FsX2FwaWNfdGltZXJfdmVyaWZ5X29rID0gMTsKKwlsZXZ0LT5ldmVudF9oYW5kbGVyID0gbGFwaWNfY2FsX2hhbmRsZXI7CisJbGFwaWNfdGltZXJfc2V0dXAoQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMsIGxldnQpOworCWxhcGljX2NhbF9sb29wcyA9IC0xOworCisJLyogTGV0IHRoZSBpbnRlcnJ1cHRzIHJ1biAqLworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCXdoaWxlKGxhcGljX2NhbF9sb29wcyA8PSBMQVBJQ19DQUxfTE9PUFMpOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCS8qIFN0b3AgdGhlIGxhcGljIHRpbWVyICovCisJbGFwaWNfdGltZXJfc2V0dXAoQ0xPQ0tfRVZUX01PREVfU0hVVERPV04sIGxldnQpOworCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJLyogSmlmZmllcyBkZWx0YSAqLworCWRlbHRhaiA9IGxhcGljX2NhbF9qMiAtIGxhcGljX2NhbF9qMTsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gamlmZmllcyBkZWx0YSA9ICVsdVxuIiwgZGVsdGFqKTsKKworCS8qIENoZWNrLCBpZiB0aGUgUE0gdGltZXIgaXMgYXZhaWxhYmxlICovCisJZGVsdGFwbSA9IGxhcGljX2NhbF9wbTIgLSBsYXBpY19jYWxfcG0xOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBQTSB0aW1lciBkZWx0YSA9ICVsZFxuIiwgZGVsdGFwbSk7CisKKwlsb2NhbF9hcGljX3RpbWVyX3ZlcmlmeV9vayA9IDA7CisKKwlpZiAoZGVsdGFwbSkgeworCQlpZiAoZGVsdGFwbSA+IChwbV8xMDBtcyAtIHBtX3RocmVzaCkgJiYKKwkJICAgIGRlbHRhcG0gPCAocG1fMTAwbXMgKyBwbV90aHJlc2gpKSB7CisJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgcmVzdWx0IG9rXG4iKTsKKwkJCS8qIENoZWNrLCBpZiB0aGUgamlmZmllcyByZXN1bHQgaXMgY29uc2lzdGVudCAqLworCQkJaWYgKGRlbHRhaiA8IExBUElDX0NBTF9MT09QUy0yIHx8CisJCQkgICAgZGVsdGFqID4gTEFQSUNfQ0FMX0xPT1BTKzIpIHsKKwkJCQkvKgorCQkJCSAqIE5vdCBzdXJlLCB3aGF0IHdlIGNhbiBkbyBhYm91dCB0aGlzIG9uZS4KKwkJCQkgKiBXaGVuIGhpZ2ggcmVzdWx0aW9uIHRpbWVycyBhcmUgYWN0aXZlCisJCQkJICogYW5kIHRoZSBsYXBpYyB0aW1lciBkb2VzIG5vdCBzdG9wIGluIEMzCisJCQkJICogd2UgYXJlIGZpbmUuIE90aGVyd2lzZSBtb3JlIHRyb3VibGUgbWlnaHQKKwkJCQkgKiBiZSB3YWl0aW5nLiAtLSB0Z2x4CisJCQkJICovCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiR2xvYmFsIGV2ZW50IGRldmljZSAlcyAiCisJCQkJICAgICAgICJoYXMgd3JvbmcgZnJlcXVlbmN5ICIKKwkJCQkgICAgICAgIiglbHUgdGlja3MgaW5zdGVhZCBvZiAlZClcbiIsCisJCQkJICAgICAgIGdsb2JhbF9jbG9ja19ldmVudC0+bmFtZSwgZGVsdGFqLAorCQkJCSAgICAgICBMQVBJQ19DQUxfTE9PUFMpOworCQkJfQorCQkJbG9jYWxfYXBpY190aW1lcl92ZXJpZnlfb2sgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJLyogQ2hlY2ssIGlmIHRoZSBqaWZmaWVzIHJlc3VsdCBpcyBjb25zaXN0ZW50ICovCisJCWlmIChkZWx0YWogPj0gTEFQSUNfQ0FMX0xPT1BTLTIgJiYKKwkJICAgIGRlbHRhaiA8PSBMQVBJQ19DQUxfTE9PUFMrMikgeworCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIGppZmZpZXMgcmVzdWx0IG9rXG4iKTsKKwkJCWxvY2FsX2FwaWNfdGltZXJfdmVyaWZ5X29rID0gMTsKKwkJfQorCX0KKworCWlmICghbG9jYWxfYXBpY190aW1lcl92ZXJpZnlfb2spIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkFQSUMgdGltZXIgZGlzYWJsZWQgZHVlIHRvIHZlcmlmaWNhdGlvbiBmYWlsdXJlLlxuIik7CisJCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCisJCWlmIChudW1fcG9zc2libGVfY3B1cygpID09IDEpCisJCQlyZXR1cm47CisJfSBlbHNlCisJCWxhcGljX2Nsb2NrZXZlbnQuZmVhdHVyZXMgJj0gfkNMT0NLX0VWVF9GRUFUX0RVTU1ZOworCisJLyogU2V0dXAgdGhlIGxhcGljIG9yIHJlcXVlc3QgdGhlIGJyb2FkY2FzdCAqLworCXNldHVwX0FQSUNfdGltZXIoKTsKK30KKwordm9pZCBfX2RldmluaXQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sodm9pZCkKK3sKKwlzZXR1cF9BUElDX3RpbWVyKCk7Cit9CisKKy8qCisgKiBUaGUgZ3V0cyBvZiB0aGUgYXBpYyB0aW1lciBpbnRlcnJ1cHQKKyAqLworc3RhdGljIHZvaWQgbG9jYWxfYXBpY190aW1lcl9pbnRlcnJ1cHQodm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZwZXJfY3B1KGxhcGljX2V2ZW50cywgY3B1KTsKKworCS8qCisJICogTm9ybWFsbHkgd2Ugc2hvdWxkIG5vdCBiZSBoZXJlIHRpbGwgTEFQSUMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYnV0CisJICogaW4gc29tZSBjYXNlcyBsaWtlIGtkdW1wLCBpdHMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBhIHBlbmRpbmcgTEFQSUMKKwkgKiB0aW1lciBpbnRlcnJ1cHQgZnJvbSBwcmV2aW91cyBrZXJuZWwncyBjb250ZXh0IGFuZCBpcyBkZWxpdmVyZWQgaW4KKwkgKiBuZXcga2VybmVsIHRoZSBtb21lbnQgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4KKwkgKgorCSAqIEludGVycnVwdHMgYXJlIGVuYWJsZWQgZWFybHkgYW5kIExBUElDIGlzIHNldHVwIG11Y2ggbGF0ZXIsIGhlbmNlCisJICogaXRzIHBvc3NpYmxlIHRoYXQgd2hlbiB3ZSBnZXQgaGVyZSBldnQtPmV2ZW50X2hhbmRsZXIgaXMgTlVMTC4KKwkgKiBDaGVjayBmb3IgZXZlbnRfaGFuZGxlciBiZWluZyBOVUxMIGFuZCBkaXNjYXJkIHRoZSBpbnRlcnJ1cHQgYXMKKwkgKiBzcHVyaW91cy4KKwkgKi8KKwlpZiAoIWV2dC0+ZXZlbnRfaGFuZGxlcikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiU3B1cmlvdXMgTEFQSUMgdGltZXIgaW50ZXJydXB0IG9uIGNwdSAlZFxuIiwgY3B1KTsKKwkJLyogU3dpdGNoIGl0IG9mZiAqLworCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9TSFVURE9XTiwgZXZ0KTsKKwkJcmV0dXJuOworCX0KKworCXBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuYXBpY190aW1lcl9pcnFzKys7CisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKK30KKworLyoKKyAqIExvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0LiBUaGlzIGlzIHRoZSBtb3N0IG5hdHVyYWwgd2F5IGZvciBkb2luZworICogbG9jYWwgaW50ZXJydXB0cywgYnV0IGxvY2FsIHRpbWVyIGludGVycnVwdHMgY2FuIGJlIGVtdWxhdGVkIGJ5CisgKiBicm9hZGNhc3QgaW50ZXJydXB0cyB0b28uIFtpbiBjYXNlIHRoZSBodyBkb2Vzbid0IHN1cHBvcnQgQVBJQyB0aW1lcnNdCisgKgorICogWyBpZiBhIHNpbmdsZS1DUFUgc3lzdGVtIHJ1bnMgYW4gU01QIGtlcm5lbCB0aGVuIHdlIGNhbGwgdGhlIGxvY2FsCisgKiAgIGludGVycnVwdCBhcyB3ZWxsLiBUaHVzIHdlIGNhbm5vdCBpbmxpbmUgdGhlIGxvY2FsIGlycSAuLi4gXQorICovCisKK3ZvaWQgZmFzdGNhbGwgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKworCS8qCisJICogTk9URSEgV2UnZCBiZXR0ZXIgQUNLIHRoZSBpcnEgaW1tZWRpYXRlbHksCisJICogYmVjYXVzZSB0aW1lciBoYW5kbGluZyBjYW4gYmUgc2xvdy4KKwkgKi8KKwlhY2tfQVBJQ19pcnEoKTsKKwkvKgorCSAqIHVwZGF0ZV9wcm9jZXNzX3RpbWVzKCkgZXhwZWN0cyB1cyB0byBoYXZlIGRvbmUgaXJxX2VudGVyKCkuCisJICogQmVzaWRlcywgaWYgd2UgZG9uJ3QgdGltZXIgaW50ZXJydXB0cyBpZ25vcmUgdGhlIGdsb2JhbAorCSAqIGludGVycnVwdCBsb2NrLCB3aGljaCBpcyB0aGUgV3JvbmdUaGluZyAodG0pIHRvIGRvLgorCSAqLworCWV4aXRfaWRsZSgpOworCWlycV9lbnRlcigpOworCWxvY2FsX2FwaWNfdGltZXJfaW50ZXJydXB0KCk7CisJaXJxX2V4aXQoKTsKKworCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Cit9CisKK2ludCBzZXR1cF9wcm9maWxpbmdfdGltZXIodW5zaWduZWQgaW50IG11bHRpcGxpZXIpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBMb2NhbCBBUElDIHN0YXJ0IGFuZCBzaHV0ZG93bgorICovCisKKy8qKgorICogY2xlYXJfbG9jYWxfQVBJQyAtIHNodXRkb3duIHRoZSBsb2NhbCBBUElDCisgKgorICogVGhpcyBpcyBjYWxsZWQsIHdoZW4gYSBDUFUgaXMgZGlzYWJsZWQgYW5kIGJlZm9yZSByZWJvb3RpbmcsIHNvIHRoZSBzdGF0ZSBvZgorICogdGhlIGxvY2FsIEFQSUMgaGFzIG5vIGRhbmdsaW5nIGxlZnRvdmVycy4gQWxzbyB1c2VkIHRvIGNsZWFub3V0IGFueSBCSU9TCisgKiBsZWZ0b3ZlcnMgZHVyaW5nIGJvb3QuCisgKi8KIHZvaWQgY2xlYXJfbG9jYWxfQVBJQyh2b2lkKQogewotCWludCBtYXhsdnQ7CisJaW50IG1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKIAl1bnNpZ25lZCBsb25nIHY7CiAKLQltYXhsdnQgPSBnZXRfbWF4bHZ0KCk7Ci0KIAkvKgogCSAqIE1hc2tpbmcgYW4gTFZUIGVudHJ5IGNhbiB0cmlnZ2VyIGEgbG9jYWwgQVBJQyBlcnJvcgogCSAqIGlmIHRoZSB2ZWN0b3IgaXMgemVyby4gTWFzayBMVlRFUlIgZmlyc3QgdG8gcHJldmVudCB0aGlzLgpAQCAtMTg5LDcgKzYxMyw3IEBACiAJCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUUEMsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwogCX0KIAotLyogbGV0cyBub3QgdG91Y2ggdGhpcyBpZiB3ZSBkaWRuJ3QgZnJvYiBpdCAqLworCS8qIGxldHMgbm90IHRvdWNoIHRoaXMgaWYgd2UgZGlkbid0IGZyb2IgaXQgKi8KICNpZmRlZiBDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwKIAlpZiAobWF4bHZ0ID49IDUpIHsKIAkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOwpAQCAtMjExLDg1ICs2MzUsMTggQEAKIAlpZiAobWF4bHZ0ID49IDUpCiAJCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUVEhNUiwgQVBJQ19MVlRfTUFTS0VEKTsKICNlbmRpZgotCXYgPSBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpOwotCWlmIChBUElDX0lOVEVHUkFURUQodikpIHsJLyogITgyNDg5RFggKi8KLQkJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gUGVudGl1bSBlcnJhdGEgM0FQIGFuZCAxMUFQLiAqLworCS8qIEludGVncmF0ZWQgQVBJQyAoITgyNDg5RFgpID8gKi8KKwlpZiAobGFwaWNfaXNfaW50ZWdyYXRlZCgpKSB7CisJCWlmIChtYXhsdnQgPiAzKQorCQkJLyogQ2xlYXIgRVNSIGR1ZSB0byBQZW50aXVtIGVycmF0YSAzQVAgYW5kIDExQVAgKi8KIAkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwogCQlhcGljX3JlYWQoQVBJQ19FU1IpOwogCX0KIH0KIAotdm9pZCBfX2luaXQgY29ubmVjdF9ic3BfQVBJQyh2b2lkKQotewotCWlmIChwaWNfbW9kZSkgewotCQkvKgotCQkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgotCQkgKi8KLQkJY2xlYXJfbG9jYWxfQVBJQygpOwotCQkvKgotCQkgKiBQSUMgbW9kZSwgZW5hYmxlIEFQSUMgbW9kZSBpbiB0aGUgSU1DUiwgaS5lLgotCQkgKiBjb25uZWN0IEJTUCdzIGxvY2FsIEFQSUMgdG8gSU5UIGFuZCBOTUkgbGluZXMuCi0JCSAqLwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJsZWF2aW5nIFBJQyBtb2RlLCAiCi0JCQkJImVuYWJsaW5nIEFQSUMgbW9kZS5cbiIpOwotCQlvdXRiKDB4NzAsIDB4MjIpOwotCQlvdXRiKDB4MDEsIDB4MjMpOwotCX0KLQllbmFibGVfYXBpY19tb2RlKCk7Ci19Ci0KLXZvaWQgZGlzY29ubmVjdF9ic3BfQVBJQyhpbnQgdmlydF93aXJlX3NldHVwKQotewotCWlmIChwaWNfbW9kZSkgewotCQkvKgotCQkgKiBQdXQgdGhlIGJvYXJkIGJhY2sgaW50byBQSUMgbW9kZSAoaGFzIGFuIGVmZmVjdAotCQkgKiBvbmx5IG9uIGNlcnRhaW4gb2xkZXIgYm9hcmRzKS4gIE5vdGUgdGhhdCBBUElDCi0JCSAqIGludGVycnVwdHMsIGluY2x1ZGluZyBJUElzLCB3b24ndCB3b3JrIGJleW9uZAotCQkgKiB0aGlzIHBvaW50ISAgVGhlIG9ubHkgZXhjZXB0aW9uIGFyZSBJTklUIElQSXMuCi0JCSAqLwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJkaXNhYmxpbmcgQVBJQyBtb2RlLCAiCi0JCQkJImVudGVyaW5nIFBJQyBtb2RlLlxuIik7Ci0JCW91dGIoMHg3MCwgMHgyMik7Ci0JCW91dGIoMHgwMCwgMHgyMyk7Ci0JfQotCWVsc2UgewotCQkvKiBHbyBiYWNrIHRvIFZpcnR1YWwgV2lyZSBjb21wYXRpYmlsaXR5IG1vZGUgKi8KLQkJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQotCQkvKiBGb3IgdGhlIHNwdXJpb3VzIGludGVycnVwdCB1c2UgdmVjdG9yIEYsIGFuZCBlbmFibGUgaXQgKi8KLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQkJdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7Ci0JCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0JCXZhbHVlIHw9IDB4ZjsKLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLQkJaWYgKCF2aXJ0X3dpcmVfc2V0dXApIHsKLQkJCS8qIEZvciBMVlQwIG1ha2UgaXQgZWRnZSB0cmlnZ2VyZWQsIGFjdGl2ZSBoaWdoLCBleHRlcm5hbCBhbmQgZW5hYmxlZCAqLwotCQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQkJCXZhbHVlICY9IH4oQVBJQ19NT0RFX01BU0sgfCBBUElDX1NFTkRfUEVORElORyB8Ci0JCQkJQVBJQ19JTlBVVF9QT0xBUklUWSB8IEFQSUNfTFZUX1JFTU9URV9JUlIgfAotCQkJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIgfCBBUElDX0xWVF9NQVNLRUQgKTsKLQkJCXZhbHVlIHw9IEFQSUNfTFZUX1JFTU9URV9JUlIgfCBBUElDX1NFTkRfUEVORElORzsKLQkJCXZhbHVlID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSh2YWx1ZSwgQVBJQ19NT0RFX0VYVElOVCk7Ci0JCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIHZhbHVlKTsKLQkJfQotCQllbHNlIHsKLQkJCS8qIERpc2FibGUgTFZUMCAqLwotCQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQpOwotCQl9Ci0KLQkJLyogRm9yIExWVDEgbWFrZSBpdCBlZGdlIHRyaWdnZXJlZCwgYWN0aXZlIGhpZ2gsIG5taSBhbmQgZW5hYmxlZCAqLwotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCQl2YWx1ZSAmPSB+KAotCQkJQVBJQ19NT0RFX01BU0sgfCBBUElDX1NFTkRfUEVORElORyB8Ci0JCQlBUElDX0lOUFVUX1BPTEFSSVRZIHwgQVBJQ19MVlRfUkVNT1RFX0lSUiB8Ci0JCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKLQkJdmFsdWUgfD0gQVBJQ19MVlRfUkVNT1RFX0lSUiB8IEFQSUNfU0VORF9QRU5ESU5HOwotCQl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9OTUkpOwotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDEsIHZhbHVlKTsKLQl9Ci19Ci0KKy8qKgorICogZGlzYWJsZV9sb2NhbF9BUElDIC0gY2xlYXIgYW5kIGRpc2FibGUgdGhlIGxvY2FsIEFQSUMKKyAqLwogdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwpAQCAtMzA0LDggKzY2MSwxMyBAQAogCXZhbHVlICY9IH5BUElDX1NQSVZfQVBJQ19FTkFCTEVEOwogCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfU1BJViwgdmFsdWUpOwogCisJLyoKKwkgKiBXaGVuIExBUElDIHdhcyBkaXNhYmxlZCBieSB0aGUgQklPUyBhbmQgZW5hYmxlZCBieSB0aGUga2VybmVsLAorCSAqIHJlc3RvcmUgdGhlIGRpc2FibGVkIHN0YXRlLgorCSAqLwogCWlmIChlbmFibGVkX3ZpYV9hcGljYmFzZSkgewogCQl1bnNpZ25lZCBpbnQgbCwgaDsKKwogCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7CiAJCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRTsKIAkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwpAQCAtMzEzLDYgKzY3NSwyOCBAQAogfQogCiAvKgorICogSWYgTGludXggZW5hYmxlZCB0aGUgTEFQSUMgYWdhaW5zdCB0aGUgQklPUyBkZWZhdWx0IGRpc2FibGUgaXQgZG93biBiZWZvcmUKKyAqIHJlLWVudGVyaW5nIHRoZSBCSU9TIG9uIHNodXRkb3duLiAgT3RoZXJ3aXNlIHRoZSBCSU9TIG1heSBnZXQgY29uZnVzZWQgYW5kCisgKiBub3QgcG93ZXItb2ZmLiAgQWRkaXRpb25hbGx5IGNsZWFyIGFsbCBMVlQgZW50cmllcyBiZWZvcmUgZGlzYWJsZV9sb2NhbF9BUElDCisgKiBmb3IgdGhlIGNhc2Ugd2hlcmUgTGludXggZGlkbid0IGVuYWJsZSB0aGUgTEFQSUMuCisgKi8KK3ZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljbGVhcl9sb2NhbF9BUElDKCk7CisKKwlpZiAoZW5hYmxlZF92aWFfYXBpY2Jhc2UpCisJCWRpc2FibGVfbG9jYWxfQVBJQygpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgogICogVGhpcyBpcyB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBsb29raW5nIGF0IGEgcmVhbCBsb2NhbCBBUElDLgogICogQ2hlY2sgdGhlc2UgYWdhaW5zdCB5b3VyIGJvYXJkIGlmIHRoZSBDUFVzIGFyZW4ndCBnZXR0aW5nCiAgKiBzdGFydGVkIGZvciBubyBhcHBhcmVudCByZWFzb24uCkBAIC0zNDQsNyArNzI4LDcgQEAKIAlyZWcxID0gR0VUX0FQSUNfVkVSU0lPTihyZWcwKTsKIAlpZiAocmVnMSA9PSAweDAwIHx8IHJlZzEgPT0gMHhmZikKIAkJcmV0dXJuIDA7Ci0JcmVnMSA9IGdldF9tYXhsdnQoKTsKKwlyZWcxID0gbGFwaWNfZ2V0X21heGx2dCgpOwogCWlmIChyZWcxIDwgMHgwMiB8fCByZWcxID09IDB4ZmYpCiAJCXJldHVybiAwOwogCkBAIC0zNjcsMTAgKzc1MSwxNSBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIHN5bmNfQXJiX0lEcyAtIHN5bmNocm9uaXplIEFQSUMgYnVzIGFyYml0cmF0aW9uIElEcworICovCiB2b2lkIF9faW5pdCBzeW5jX0FyYl9JRHModm9pZCkKIHsKLQkvKiBVbnN1cHBvcnRlZCBvbiBQNCAtIHNlZSBJbnRlbCBEZXYuIE1hbnVhbCBWb2wuIDMsIENoLiA4LjYuMQotCSAgIEFuZCBub3QgbmVlZGVkIG9uIEFNRCAqLworCS8qCisJICogVW5zdXBwb3J0ZWQgb24gUDQgLSBzZWUgSW50ZWwgRGV2LiBNYW51YWwgVm9sLiAzLCBDaC4gOC42LjEgQW5kIG5vdAorCSAqIG5lZWRlZCBvbiBBTUQuCisJICovCiAJaWYgKG1vZGVybl9hcGljKCkpCiAJCXJldHVybjsKIAkvKgpAQCAtMzgzLDE0ICs3NzIsMTIgQEAKIAkJCQl8IEFQSUNfRE1fSU5JVCk7CiB9CiAKLWV4dGVybiB2b2lkIF9fZXJyb3JfaW5fYXBpY19jICh2b2lkKTsKLQogLyoKICAqIEFuIGluaXRpYWwgc2V0dXAgb2YgdGhlIHZpcnR1YWwgd2lyZSBtb2RlLgogICovCiB2b2lkIF9faW5pdCBpbml0X2JzcF9BUElDKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZSwgdmVyOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAKIAkvKgogCSAqIERvbid0IGRvIHRoZSBzZXR1cCBub3cgaWYgd2UgaGF2ZSBhIFNNUCBCSU9TIGFzIHRoZQpAQCAtMzk5LDkgKzc4Niw2IEBACiAJaWYgKHNtcF9mb3VuZF9jb25maWcgfHwgIWNwdV9oYXNfYXBpYykKIAkJcmV0dXJuOwogCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCXZlciA9IEdFVF9BUElDX1ZFUlNJT04odmFsdWUpOwotCiAJLyoKIAkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgogCSAqLwpAQCAtNDEzLDkgKzc5NywxMCBAQAogCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7CiAJdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7CiAJdmFsdWUgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQkKKwogCS8qIFRoaXMgYml0IGlzIHJlc2VydmVkIG9uIFA0L1hlb24gYW5kIHNob3VsZCBiZSBjbGVhcmVkICovCi0JaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDE1KSkKKwlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSAmJgorCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUpKQogCQl2YWx1ZSAmPSB+QVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwogCWVsc2UKIAkJdmFsdWUgfD0gQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwpAQCAtNDI3LDE0ICs4MTIsMTcgQEAKIAkgKi8KIAlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKIAl2YWx1ZSA9IEFQSUNfRE1fTk1JOwotCWlmICghQVBJQ19JTlRFR1JBVEVEKHZlcikpCQkvKiA4MjQ4OURYICovCisJaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCQkvKiA4MjQ4OURYICovCiAJCXZhbHVlIHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7CiAJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQxLCB2YWx1ZSk7CiB9CiAKKy8qKgorICogc2V0dXBfbG9jYWxfQVBJQyAtIHNldHVwIHRoZSBsb2NhbCBBUElDCisgKi8KIHZvaWQgX19kZXZpbml0IHNldHVwX2xvY2FsX0FQSUModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIG9sZHZhbHVlLCB2YWx1ZSwgdmVyLCBtYXhsdnQ7CisJdW5zaWduZWQgbG9uZyBvbGR2YWx1ZSwgdmFsdWUsIG1heGx2dCwgaW50ZWdyYXRlZDsKIAlpbnQgaSwgajsKIAogCS8qIFBvdW5kIHRoZSBFU1IgcmVhbGx5IGhhcmQgb3ZlciB0aGUgaGVhZCB3aXRoIGEgYmlnIGhhbW1lciAtIG1ibGlnaCAqLwpAQCAtNDQ1LDExICs4MzMsNyBAQAogCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKIAl9CiAKLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2YWx1ZSk7Ci0KLQlpZiAoKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgMHgwZikgIT0gMHgwZikKLQkJX19lcnJvcl9pbl9hcGljX2MoKTsKKwlpbnRlZ3JhdGVkID0gbGFwaWNfaXNfaW50ZWdyYXRlZCgpOwogCiAJLyoKIAkgKiBEb3VibGUtY2hlY2sgd2hldGhlciB0aGlzIEFQSUMgaXMgcmVhbGx5IHJlZ2lzdGVyZWQuCkBAIC01MjAsMTMgKzkwNCwxMCBAQAogCSAqIGxpa2UgTFJVIHRoYW4gTVJVICh0aGUgc2hvcnQtdGVybSBsb2FkIGlzIG1vcmUgZXZlbiBhY3Jvc3MgQ1BVcykuCiAJICogU2VlIGFsc28gdGhlIGNvbW1lbnQgaW4gZW5kX2xldmVsX2lvYXBpY19pcnEoKS4gIC0tbWFjcm8KIAkgKi8KLSNpZiAxCisKIAkvKiBFbmFibGUgZm9jdXMgcHJvY2Vzc29yIChiaXQ9PTApICovCiAJdmFsdWUgJj0gfkFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRDsKLSNlbHNlCi0JLyogRGlzYWJsZSBmb2N1cyBwcm9jZXNzb3IgKGJpdD09MSkgKi8KLQl2YWx1ZSB8PSBBUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7Ci0jZW5kaWYKKwogCS8qCiAJICogU2V0IHNwdXJpb3VzIElSUSB2ZWN0b3IKIAkgKi8KQEAgLTU2MiwxNyArOTQzLDE4IEBACiAJCXZhbHVlID0gQVBJQ19ETV9OTUk7CiAJZWxzZQogCQl2YWx1ZSA9IEFQSUNfRE1fTk1JIHwgQVBJQ19MVlRfTUFTS0VEOwotCWlmICghQVBJQ19JTlRFR1JBVEVEKHZlcikpCQkvKiA4MjQ4OURYICovCisJaWYgKCFpbnRlZ3JhdGVkKQkJLyogODI0ODlEWCAqLwogCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwogCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMSwgdmFsdWUpOwogCi0JaWYgKEFQSUNfSU5URUdSQVRFRCh2ZXIpICYmICFlc3JfZGlzYWJsZSkgewkJLyogITgyNDg5RFggKi8KLQkJbWF4bHZ0ID0gZ2V0X21heGx2dCgpOworCWlmIChpbnRlZ3JhdGVkICYmICFlc3JfZGlzYWJsZSkgewkJLyogITgyNDg5RFggKi8KKwkJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwogCQlpZiAobWF4bHZ0ID4gMykJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KIAkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwogCQlvbGR2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0VTUik7CiAKLQkJdmFsdWUgPSBFUlJPUl9BUElDX1ZFQ1RPUjsgICAgICAvLyBlbmFibGVzIHNlbmRpbmcgZXJyb3JzCisJCS8qIGVuYWJsZXMgc2VuZGluZyBlcnJvcnMgKi8KKwkJdmFsdWUgPSBFUlJPUl9BUElDX1ZFQ1RPUjsKIAkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRFUlIsIHZhbHVlKTsKIAkJLyoKIAkJICogc3BlYyBzYXlzIGNsZWFyIGVycm9ycyBhZnRlciBlbmFibGluZyB2ZWN0b3IuCkBAIC01ODUsNDUgKzk2Nyw0MTcgQEAKIAkJCQkidmVjdG9yOiAweCUwOGx4ICBhZnRlcjogMHglMDhseFxuIiwKIAkJCQlvbGR2YWx1ZSwgdmFsdWUpOwogCX0gZWxzZSB7Ci0JCWlmIChlc3JfZGlzYWJsZSkJCi0JCQkvKiAKLQkJCSAqIFNvbWV0aGluZyB1bnRyYWNlYmxlIGlzIGNyZWF0aW5nIGJhZCBpbnRlcnJ1cHRzIG9uIAorCQlpZiAoZXNyX2Rpc2FibGUpCisJCQkvKgorCQkJICogU29tZXRoaW5nIHVudHJhY2VibGUgaXMgY3JlYXRpbmcgYmFkIGludGVycnVwdHMgb24KIAkJCSAqIHNlY29uZGFyeSBxdWFkcyAuLi4gZm9yIHRoZSBtb21lbnQsIGp1c3QgbGVhdmUgdGhlCiAJCQkgKiBFU1IgZGlzYWJsZWQgLSB3ZSBjYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCB0aGUKIAkJCSAqIGVycm9ycyBhbnl3YXkgLSBtYmxpZ2gKIAkJCSAqLwotCQkJcHJpbnRrKCJMZWF2aW5nIEVTUiBkaXNhYmxlZC5cbiIpOwotCQllbHNlIAotCQkJcHJpbnRrKCJObyBFU1IgZm9yIDgyNDg5RFguXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIkxlYXZpbmcgRVNSIGRpc2FibGVkLlxuIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIk5vIEVTUiBmb3IgODI0ODlEWC5cbiIpOwogCX0KIAorCS8qIERpc2FibGUgdGhlIGxvY2FsIGFwaWMgdGltZXIgKi8KKwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVFQpOworCXZhbHVlIHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOworCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUVCwgdmFsdWUpOworCiAJc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2coTlVMTCk7CiAJYXBpY19wbV9hY3RpdmF0ZSgpOwogfQogCiAvKgotICogSWYgTGludXggZW5hYmxlZCB0aGUgTEFQSUMgYWdhaW5zdCB0aGUgQklPUyBkZWZhdWx0Ci0gKiBkaXNhYmxlIGl0IGRvd24gYmVmb3JlIHJlLWVudGVyaW5nIHRoZSBCSU9TIG9uIHNodXRkb3duLgotICogT3RoZXJ3aXNlIHRoZSBCSU9TIG1heSBnZXQgY29uZnVzZWQgYW5kIG5vdCBwb3dlci1vZmYuCi0gKiBBZGRpdGlvbmFsbHkgY2xlYXIgYWxsIExWVCBlbnRyaWVzIGJlZm9yZSBkaXNhYmxlX2xvY2FsX0FQSUMKLSAqIGZvciB0aGUgY2FzZSB3aGVyZSBMaW51eCBkaWRuJ3QgZW5hYmxlIHRoZSBMQVBJQy4KKyAqIERldGVjdCBhbmQgaW5pdGlhbGl6ZSBBUElDCiAgKi8KLXZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGRldGVjdF9pbml0X0FQSUMgKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaCwgbCwgZmVhdHVyZXM7CiAKLQlpZiAoIWNwdV9oYXNfYXBpYykKLQkJcmV0dXJuOworCS8qIERpc2FibGVkIGJ5IGtlcm5lbCBvcHRpb24/ICovCisJaWYgKGVuYWJsZV9sb2NhbF9hcGljIDwgMCkKKwkJcmV0dXJuIC0xOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNsZWFyX2xvY2FsX0FQSUMoKTsKKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgeworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWlmICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJiBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+IDEpIHx8CisJCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUpKQorCQkJYnJlYWs7CisJCWdvdG8gbm9fYXBpYzsKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCWlmIChib290X2NwdV9kYXRhLng4NiA9PSA2IHx8IGJvb3RfY3B1X2RhdGEueDg2ID09IDE1IHx8CisJCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNSAmJiBjcHVfaGFzX2FwaWMpKQorCQkJYnJlYWs7CisJCWdvdG8gbm9fYXBpYzsKKwlkZWZhdWx0OgorCQlnb3RvIG5vX2FwaWM7CisJfQogCi0JaWYgKGVuYWJsZWRfdmlhX2FwaWNiYXNlKQotCQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKKwlpZiAoIWNwdV9oYXNfYXBpYykgeworCQkvKgorCQkgKiBPdmVyLXJpZGUgQklPUyBhbmQgdHJ5IHRvIGVuYWJsZSB0aGUgbG9jYWwgQVBJQyBvbmx5IGlmCisJCSAqICJsYXBpYyIgc3BlY2lmaWVkLgorCQkgKi8KKwkJaWYgKGVuYWJsZV9sb2NhbF9hcGljIDw9IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkxvY2FsIEFQSUMgZGlzYWJsZWQgYnkgQklPUyAtLSAiCisJCQkgICAgICAgInlvdSBjYW4gZW5hYmxlIGl0IHdpdGggXCJsYXBpY1wiXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkvKgorCQkgKiBTb21lIEJJT1NlcyBkaXNhYmxlIHRoZSBsb2NhbCBBUElDIGluIHRoZSBBUElDX0JBU0UKKwkJICogTVNSLiBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgaW4gc29mdHdhcmUgZm9yIEludGVsIFA2IG9yIGxhdGVyCisJCSAqIGFuZCBBTUQgSzcgKE1vZGVsID4gMSkgb3IgbGF0ZXIuCisJCSAqLworCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7CisJCWlmICghKGwgJiBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIkxvY2FsIEFQSUMgZGlzYWJsZWQgYnkgQklPUyAtLSByZWVuYWJsaW5nLlxuIik7CisJCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9CQVNFOworCQkJbCB8PSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUgfCBBUElDX0RFRkFVTFRfUEhZU19CQVNFOworCQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOworCQkJZW5hYmxlZF92aWFfYXBpY2Jhc2UgPSAxOworCQl9CisJfQorCS8qCisJICogVGhlIEFQSUMgZmVhdHVyZSBiaXQgc2hvdWxkIG5vdyBiZSBlbmFibGVkCisJICogaW4gYGNwdWlkJworCSAqLworCWZlYXR1cmVzID0gY3B1aWRfZWR4KDEpOworCWlmICghKGZlYXR1cmVzICYgKDEgPDwgWDg2X0ZFQVRVUkVfQVBJQykpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNvdWxkIG5vdCBlbmFibGUgQVBJQyFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXNldF9iaXQoWDg2X0ZFQVRVUkVfQVBJQywgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSk7CisJbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJLyogVGhlIEJJT1MgbWF5IGhhdmUgc2V0IHVwIHRoZSBBUElDIGF0IHNvbWUgb3RoZXIgYWRkcmVzcyAqLworCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwlpZiAobCAmIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSkKKwkJbXBfbGFwaWNfYWRkciA9IGwgJiBNU1JfSUEzMl9BUElDQkFTRV9CQVNFOworCisJaWYgKG5taV93YXRjaGRvZyAhPSBOTUlfTk9ORSkKKwkJbm1pX3dhdGNoZG9nID0gTk1JX0xPQ0FMX0FQSUM7CisKKwlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBhbmQgZW5hYmxlZCBsb2NhbCBBUElDIVxuIik7CisKKwlhcGljX3BtX2FjdGl2YXRlKCk7CisKKwlyZXR1cm4gMDsKKworbm9fYXBpYzoKKwlwcmludGsoS0VSTl9JTkZPICJObyBsb2NhbCBBUElDIHByZXNlbnQgb3IgaGFyZHdhcmUgZGlzYWJsZWRcbiIpOworCXJldHVybiAtMTsKIH0KIAorLyoqCisgKiBpbml0X2FwaWNfbWFwcGluZ3MgLSBpbml0aWFsaXplIEFQSUMgbWFwcGluZ3MKKyAqLwordm9pZCBfX2luaXQgaW5pdF9hcGljX21hcHBpbmdzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhcGljX3BoeXM7CisKKwkvKgorCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gc2V0IHVwIGEgZmFrZSBhbGwKKwkgKiB6ZXJvZXMgcGFnZSB0byBzaW11bGF0ZSB0aGUgbG9jYWwgQVBJQyBhbmQgYW5vdGhlcgorCSAqIG9uZSBmb3IgdGhlIElPLUFQSUMuCisJICovCisJaWYgKCFzbXBfZm91bmRfY29uZmlnICYmIGRldGVjdF9pbml0X0FQSUMoKSkgeworCQlhcGljX3BoeXMgPSAodW5zaWduZWQgbG9uZykgYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOworCQlhcGljX3BoeXMgPSBfX3BhKGFwaWNfcGh5cyk7CisJfSBlbHNlCisJCWFwaWNfcGh5cyA9IG1wX2xhcGljX2FkZHI7CisKKwlzZXRfZml4bWFwX25vY2FjaGUoRklYX0FQSUNfQkFTRSwgYXBpY19waHlzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAibWFwcGVkIEFQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwgQVBJQ19CQVNFLAorCSAgICAgICBhcGljX3BoeXMpOworCisJLyoKKwkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCisJICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KKwkgKi8KKwlpZiAoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID09IC0xVSkKKwkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gR0VUX0FQSUNfSUQoYXBpY19yZWFkKEFQSUNfSUQpKTsKKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCXsKKwkJdW5zaWduZWQgbG9uZyBpb2FwaWNfcGh5cywgaWR4ID0gRklYX0lPX0FQSUNfQkFTRV8wOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CisJCQlpZiAoc21wX2ZvdW5kX2NvbmZpZykgeworCQkJCWlvYXBpY19waHlzID0gbXBfaW9hcGljc1tpXS5tcGNfYXBpY2FkZHI7CisJCQkJaWYgKCFpb2FwaWNfcGh5cykgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJXQVJOSU5HOiBib2d1cyB6ZXJvIElPLUFQSUMgIgorCQkJCQkgICAgICAgImFkZHJlc3MgZm91bmQgaW4gTVBUQUJMRSwgIgorCQkJCQkgICAgICAgImRpc2FibGluZyBJTy9BUElDIHN1cHBvcnQhXG4iKTsKKwkJCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDA7CisJCQkJCXNraXBfaW9hcGljX3NldHVwID0gMTsKKwkJCQkJZ290byBmYWtlX2lvYXBpY19wYWdlOworCQkJCX0KKwkJCX0gZWxzZSB7CitmYWtlX2lvYXBpY19wYWdlOgorCQkJCWlvYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJCSAgICAgIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKKwkJCQlpb2FwaWNfcGh5cyA9IF9fcGEoaW9hcGljX3BoeXMpOworCQkJfQorCQkJc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgaW9hcGljX3BoeXMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1hcHBlZCBJT0FQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwKKwkJCSAgICAgICBfX2ZpeF90b192aXJ0KGlkeCksIGlvYXBpY19waHlzKTsKKwkJCWlkeCsrOworCQl9CisJfQorI2VuZGlmCit9CisKKy8qCisgKiBUaGlzIGluaXRpYWxpemVzIHRoZSBJTy1BUElDIGFuZCBBUElDIGhhcmR3YXJlIGlmIHRoaXMgaXMKKyAqIGEgVVAga2VybmVsLgorICovCitpbnQgX19pbml0IEFQSUNfaW5pdF91bmlwcm9jZXNzb3IgKHZvaWQpCit7CisJaWYgKGVuYWJsZV9sb2NhbF9hcGljIDwgMCkKKwkJY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0FQSUMsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpOworCisJaWYgKCFzbXBfZm91bmRfY29uZmlnICYmICFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAtMTsKKworCS8qCisJICogQ29tcGxhaW4gaWYgdGhlIEJJT1MgcHJldGVuZHMgdGhlcmUgaXMgb25lLgorCSAqLworCWlmICghY3B1X2hhc19hcGljICYmCisJICAgIEFQSUNfSU5URUdSQVRFRChhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgbG9jYWwgQVBJQyAjJWQgbm90IGRldGVjdGVkIS4uLlxuIiwKKwkJICAgICAgIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7CisJCWNsZWFyX2JpdChYODZfRkVBVFVSRV9BUElDLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXZlcmlmeV9sb2NhbF9BUElDKCk7CisKKwljb25uZWN0X2JzcF9BUElDKCk7CisKKwkvKgorCSAqIEhhY2s6IEluIGNhc2Ugb2Yga2R1bXAsIGFmdGVyIGEgY3Jhc2gsIGtlcm5lbCBtaWdodCBiZSBib290aW5nCisJICogb24gYSBjcHUgd2l0aCBub24temVybyBsYXBpYyBpZC4gQnV0IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAorCSAqIG1pZ2h0IGJlIHplcm8gaWYgcmVhZCBmcm9tIE1QIHRhYmxlcy4gR2V0IGl0IGZyb20gTEFQSUMuCisJICovCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKwlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSBHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpOworI2VuZGlmCisJcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKKworCXNldHVwX2xvY2FsX0FQSUMoKTsKKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCWlmIChzbXBfZm91bmRfY29uZmlnKQorCQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCisJCQlzZXR1cF9JT19BUElDKCk7CisjZW5kaWYKKwlzZXR1cF9ib290X2Nsb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFQSUMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKKyAqLworc3RhdGljIGludCBfX2luaXQgcGFyc2VfbGFwaWMoY2hhciAqYXJnKQoreworCWVuYWJsZV9sb2NhbF9hcGljID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJsYXBpYyIsIHBhcnNlX2xhcGljKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9sYXBpYyhjaGFyICphcmcpCit7CisJZW5hYmxlX2xvY2FsX2FwaWMgPSAtMTsKKwljbGVhcl9iaXQoWDg2X0ZFQVRVUkVfQVBJQywgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSk7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibm9sYXBpYyIsIHBhcnNlX25vbGFwaWMpOworCitzdGF0aWMgaW50IF9faW5pdCBhcGljX3NldF92ZXJib3NpdHkoY2hhciAqc3RyKQoreworCWlmIChzdHJjbXAoImRlYnVnIiwgc3RyKSA9PSAwKQorCQlhcGljX3ZlcmJvc2l0eSA9IEFQSUNfREVCVUc7CisJZWxzZSBpZiAoc3RyY21wKCJ2ZXJib3NlIiwgc3RyKSA9PSAwKQorCQlhcGljX3ZlcmJvc2l0eSA9IEFQSUNfVkVSQk9TRTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgiYXBpYz0iLCBhcGljX3NldF92ZXJib3NpdHkpOworCisKKy8qCisgKiBMb2NhbCBBUElDIGludGVycnVwdHMKKyAqLworCisvKgorICogVGhpcyBpbnRlcnJ1cHQgc2hvdWxkIF9uZXZlcl8gaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQorICovCit2b2lkIHNtcF9zcHVyaW91c19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyB2OworCisJZXhpdF9pZGxlKCk7CisJaXJxX2VudGVyKCk7CisJLyoKKwkgKiBDaGVjayBpZiB0aGlzIHJlYWxseSBpcyBhIHNwdXJpb3VzIGludGVycnVwdCBhbmQgQUNLIGl0CisJICogaWYgaXQgaXMgYSB2ZWN0b3JlZCBvbmUuICBKdXN0IGluIGNhc2UuLi4KKwkgKiBTcHVyaW91cyBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgQUNLZWQuCisJICovCisJdiA9IGFwaWNfcmVhZChBUElDX0lTUiArICgoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiB+MHgxZikgPj4gMSkpOworCWlmICh2ICYgKDEgPDwgKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgMHgxZikpKQorCQlhY2tfQVBJQ19pcnEoKTsKKworCS8qIHNlZSBzdy1kZXYtbWFuIHZvbCAzLCBjaGFwdGVyIDcuNC4xMy41ICovCisJcHJpbnRrKEtFUk5fSU5GTyAic3B1cmlvdXMgQVBJQyBpbnRlcnJ1cHQgb24gQ1BVIyVkLCAiCisJICAgICAgICJzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpcnFfZXhpdCgpOworfQorCisvKgorICogVGhpcyBpbnRlcnJ1cHQgc2hvdWxkIG5ldmVyIGhhcHBlbiB3aXRoIG91ciBBUElDL1NNUCBhcmNoaXRlY3R1cmUKKyAqLwordm9pZCBzbXBfZXJyb3JfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgdiwgdjE7CisKKwlleGl0X2lkbGUoKTsKKwlpcnFfZW50ZXIoKTsKKwkvKiBGaXJzdCB0aWNrbGUgdGhlIGhhcmR3YXJlLCBvbmx5IHRoZW4gcmVwb3J0IHdoYXQgd2VudCBvbi4gLS0gUkVXICovCisJdiA9IGFwaWNfcmVhZChBUElDX0VTUik7CisJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJdjEgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCWFja19BUElDX2lycSgpOworCWF0b21pY19pbmMoJmlycV9lcnJfY291bnQpOworCisJLyogSGVyZSBpcyB3aGF0IHRoZSBBUElDIGVycm9yIGJpdHMgbWVhbjoKKwkgICAwOiBTZW5kIENTIGVycm9yCisJICAgMTogUmVjZWl2ZSBDUyBlcnJvcgorCSAgIDI6IFNlbmQgYWNjZXB0IGVycm9yCisJICAgMzogUmVjZWl2ZSBhY2NlcHQgZXJyb3IKKwkgICA0OiBSZXNlcnZlZAorCSAgIDU6IFNlbmQgaWxsZWdhbCB2ZWN0b3IKKwkgICA2OiBSZWNlaXZlZCBpbGxlZ2FsIHZlY3RvcgorCSAgIDc6IElsbGVnYWwgcmVnaXN0ZXIgYWRkcmVzcworCSovCisJcHJpbnRrIChLRVJOX0RFQlVHICJBUElDIGVycm9yIG9uIENQVSVkOiAlMDJseCglMDJseClcbiIsCisJCXNtcF9wcm9jZXNzb3JfaWQoKSwgdiAsIHYxKTsKKwlpcnFfZXhpdCgpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBBUElDIGludGVycnVwdHMKKyAqLwordm9pZCBfX2luaXQgYXBpY19pbnRyX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJc21wX2ludHJfaW5pdCgpOworI2VuZGlmCisJLyogc2VsZiBnZW5lcmF0ZWQgSVBJIGZvciBsb2NhbCBBUElDIHRpbWVyICovCisJc2V0X2ludHJfZ2F0ZShMT0NBTF9USU1FUl9WRUNUT1IsIGFwaWNfdGltZXJfaW50ZXJydXB0KTsKKworCS8qIElQSSB2ZWN0b3JzIGZvciBBUElDIHNwdXJpb3VzIGFuZCBlcnJvciBpbnRlcnJ1cHRzICovCisJc2V0X2ludHJfZ2F0ZShTUFVSSU9VU19BUElDX1ZFQ1RPUiwgc3B1cmlvdXNfaW50ZXJydXB0KTsKKwlzZXRfaW50cl9nYXRlKEVSUk9SX0FQSUNfVkVDVE9SLCBlcnJvcl9pbnRlcnJ1cHQpOworCisJLyogdGhlcm1hbCBtb25pdG9yIExWVCBpbnRlcnJ1cHQgKi8KKyNpZmRlZiBDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwKKwlzZXRfaW50cl9nYXRlKFRIRVJNQUxfQVBJQ19WRUNUT1IsIHRoZXJtYWxfaW50ZXJydXB0KTsKKyNlbmRpZgorfQorCisvKioKKyAqIGNvbm5lY3RfYnNwX0FQSUMgLSBhdHRhY2ggdGhlIEFQSUMgdG8gdGhlIGludGVycnVwdCBzeXN0ZW0KKyAqLwordm9pZCBfX2luaXQgY29ubmVjdF9ic3BfQVBJQyh2b2lkKQoreworCWlmIChwaWNfbW9kZSkgeworCQkvKgorCQkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgorCQkgKi8KKwkJY2xlYXJfbG9jYWxfQVBJQygpOworCQkvKgorCQkgKiBQSUMgbW9kZSwgZW5hYmxlIEFQSUMgbW9kZSBpbiB0aGUgSU1DUiwgaS5lLiAgY29ubmVjdCBCU1AncworCQkgKiBsb2NhbCBBUElDIHRvIElOVCBhbmQgTk1JIGxpbmVzLgorCQkgKi8KKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibGVhdmluZyBQSUMgbW9kZSwgIgorCQkJCSJlbmFibGluZyBBUElDIG1vZGUuXG4iKTsKKwkJb3V0YigweDcwLCAweDIyKTsKKwkJb3V0YigweDAxLCAweDIzKTsKKwl9CisJZW5hYmxlX2FwaWNfbW9kZSgpOworfQorCisvKioKKyAqIGRpc2Nvbm5lY3RfYnNwX0FQSUMgLSBkZXRhY2ggdGhlIEFQSUMgZnJvbSB0aGUgaW50ZXJydXB0IHN5c3RlbQorICogQHZpcnRfd2lyZV9zZXR1cDoJaW5kaWNhdGVzLCB3aGV0aGVyIHZpcnR1YWwgd2lyZSBtb2RlIGlzIHNlbGVjdGVkCisgKgorICogVmlydHVhbCB3aXJlIG1vZGUgaXMgbmVjZXNzYXJ5IHRvIGRlbGl2ZXIgbGVnYWN5IGludGVycnVwdHMgZXZlbiB3aGVuIHRoZQorICogQVBJQyBpcyBkaXNhYmxlZC4KKyAqLwordm9pZCBkaXNjb25uZWN0X2JzcF9BUElDKGludCB2aXJ0X3dpcmVfc2V0dXApCit7CisJaWYgKHBpY19tb2RlKSB7CisJCS8qCisJCSAqIFB1dCB0aGUgYm9hcmQgYmFjayBpbnRvIFBJQyBtb2RlIChoYXMgYW4gZWZmZWN0IG9ubHkgb24KKwkJICogY2VydGFpbiBvbGRlciBib2FyZHMpLiAgTm90ZSB0aGF0IEFQSUMgaW50ZXJydXB0cywgaW5jbHVkaW5nCisJCSAqIElQSXMsIHdvbid0IHdvcmsgYmV5b25kIHRoaXMgcG9pbnQhICBUaGUgb25seSBleGNlcHRpb24gYXJlCisJCSAqIElOSVQgSVBJcy4KKwkJICovCisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImRpc2FibGluZyBBUElDIG1vZGUsICIKKwkJCQkiZW50ZXJpbmcgUElDIG1vZGUuXG4iKTsKKwkJb3V0YigweDcwLCAweDIyKTsKKwkJb3V0YigweDAwLCAweDIzKTsKKwl9IGVsc2UgeworCQkvKiBHbyBiYWNrIHRvIFZpcnR1YWwgV2lyZSBjb21wYXRpYmlsaXR5IG1vZGUgKi8KKwkJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCQkvKiBGb3IgdGhlIHNwdXJpb3VzIGludGVycnVwdCB1c2UgdmVjdG9yIEYsIGFuZCBlbmFibGUgaXQgKi8KKwkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKKwkJdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7CisJCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7CisJCXZhbHVlIHw9IDB4ZjsKKwkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19TUElWLCB2YWx1ZSk7CisKKwkJaWYgKCF2aXJ0X3dpcmVfc2V0dXApIHsKKwkJCS8qCisJCQkgKiBGb3IgTFZUMCBtYWtlIGl0IGVkZ2UgdHJpZ2dlcmVkLCBhY3RpdmUgaGlnaCwKKwkJCSAqIGV4dGVybmFsIGFuZCBlbmFibGVkCisJCQkgKi8KKwkJCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7CisJCQl2YWx1ZSAmPSB+KEFQSUNfTU9ERV9NQVNLIHwgQVBJQ19TRU5EX1BFTkRJTkcgfAorCQkJCUFQSUNfSU5QVVRfUE9MQVJJVFkgfCBBUElDX0xWVF9SRU1PVEVfSVJSIHwKKwkJCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEICk7CisJCQl2YWx1ZSB8PSBBUElDX0xWVF9SRU1PVEVfSVJSIHwgQVBJQ19TRU5EX1BFTkRJTkc7CisJCQl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9FWFRJTlQpOworCQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQwLCB2YWx1ZSk7CisJCX0gZWxzZSB7CisJCQkvKiBEaXNhYmxlIExWVDAgKi8KKwkJCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEKTsKKwkJfQorCisJCS8qCisJCSAqIEZvciBMVlQxIG1ha2UgaXQgZWRnZSB0cmlnZ2VyZWQsIGFjdGl2ZSBoaWdoLCBubWkgYW5kCisJCSAqIGVuYWJsZWQKKwkJICovCisJCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7CisJCXZhbHVlICY9IH4oCisJCQlBUElDX01PREVfTUFTSyB8IEFQSUNfU0VORF9QRU5ESU5HIHwKKwkJCUFQSUNfSU5QVVRfUE9MQVJJVFkgfCBBUElDX0xWVF9SRU1PVEVfSVJSIHwKKwkJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIgfCBBUElDX0xWVF9NQVNLRUQpOworCQl2YWx1ZSB8PSBBUElDX0xWVF9SRU1PVEVfSVJSIHwgQVBJQ19TRU5EX1BFTkRJTkc7CisJCXZhbHVlID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSh2YWx1ZSwgQVBJQ19NT0RFX05NSSk7CisJCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMSwgdmFsdWUpOworCX0KK30KKworLyoKKyAqIFBvd2VyIG1hbmFnZW1lbnQKKyAqLwogI2lmZGVmIENPTkZJR19QTQogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTY1Miw3ICsxNDA2LDcgQEAKIAlpZiAoIWFwaWNfcG1fc3RhdGUuYWN0aXZlKQogCQlyZXR1cm4gMDsKIAotCW1heGx2dCA9IGdldF9tYXhsdnQoKTsKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CiAKIAlhcGljX3BtX3N0YXRlLmFwaWNfaWQgPSBhcGljX3JlYWQoQVBJQ19JRCk7CiAJYXBpY19wbV9zdGF0ZS5hcGljX3Rhc2twcmkgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKQEAgLTY3MSw3ICsxNDI1LDcgQEAKIAlpZiAobWF4bHZ0ID49IDUpCiAJCWFwaWNfcG1fc3RhdGUuYXBpY190aG1yID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7CiAjZW5kaWYKLQkKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC02ODcsNyArMTQ0MSw3IEBACiAJaWYgKCFhcGljX3BtX3N0YXRlLmFjdGl2ZSkKIAkJcmV0dXJuIDA7CiAKLQltYXhsdnQgPSBnZXRfbWF4bHZ0KCk7CisJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC03NjksNjQ4ICsxNTIzLDMgQEAKIHN0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCkgeyB9CiAKICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KLQotLyoKLSAqIERldGVjdCBhbmQgZW5hYmxlIGxvY2FsIEFQSUNzIG9uIG5vbi1TTVAgYm9hcmRzLgotICogT3JpZ2luYWwgY29kZSB3cml0dGVuIGJ5IEtlaXIgRnJhc2VyLgotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGFwaWNfc2V0X3ZlcmJvc2l0eShjaGFyICpzdHIpCi17Ci0JaWYgKHN0cmNtcCgiZGVidWciLCBzdHIpID09IDApCi0JCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19ERUJVRzsKLQllbHNlIGlmIChzdHJjbXAoInZlcmJvc2UiLCBzdHIpID09IDApCi0JCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19WRVJCT1NFOwotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJhcGljPSIsIGFwaWNfc2V0X3ZlcmJvc2l0eSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRldGVjdF9pbml0X0FQSUMgKHZvaWQpCi17Ci0JdTMyIGgsIGwsIGZlYXR1cmVzOwotCi0JLyogRGlzYWJsZWQgYnkga2VybmVsIG9wdGlvbj8gKi8KLQlpZiAoZW5hYmxlX2xvY2FsX2FwaWMgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCWlmICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJiBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+IDEpIHx8Ci0JCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUpKQkgICAgCi0JCQlicmVhazsKLQkJZ290byBub19hcGljOwotCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgfHwgYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUgfHwKLQkJICAgIChib290X2NwdV9kYXRhLng4NiA9PSA1ICYmIGNwdV9oYXNfYXBpYykpCi0JCQlicmVhazsKLQkJZ290byBub19hcGljOwotCWRlZmF1bHQ6Ci0JCWdvdG8gbm9fYXBpYzsKLQl9Ci0KLQlpZiAoIWNwdV9oYXNfYXBpYykgewotCQkvKgotCQkgKiBPdmVyLXJpZGUgQklPUyBhbmQgdHJ5IHRvIGVuYWJsZSB0aGUgbG9jYWwKLQkJICogQVBJQyBvbmx5IGlmICJsYXBpYyIgc3BlY2lmaWVkLgotCQkgKi8KLQkJaWYgKGVuYWJsZV9sb2NhbF9hcGljIDw9IDApIHsKLQkJCXByaW50aygiTG9jYWwgQVBJQyBkaXNhYmxlZCBieSBCSU9TIC0tICIKLQkJCSAgICAgICAieW91IGNhbiBlbmFibGUgaXQgd2l0aCBcImxhcGljXCJcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCS8qCi0JCSAqIFNvbWUgQklPU2VzIGRpc2FibGUgdGhlIGxvY2FsIEFQSUMgaW4gdGhlCi0JCSAqIEFQSUNfQkFTRSBNU1IuIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBpbgotCQkgKiBzb2Z0d2FyZSBmb3IgSW50ZWwgUDYgb3IgbGF0ZXIgYW5kIEFNRCBLNwotCQkgKiAoTW9kZWwgPiAxKSBvciBsYXRlci4KLQkJICovCi0JCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQkJaWYgKCEobCAmIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSkpIHsKLQkJCXByaW50aygiTG9jYWwgQVBJQyBkaXNhYmxlZCBieSBCSU9TIC0tIHJlZW5hYmxpbmcuXG4iKTsKLQkJCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7Ci0JCQlsIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSB8IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7Ci0JCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JCQllbmFibGVkX3ZpYV9hcGljYmFzZSA9IDE7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBUaGUgQVBJQyBmZWF0dXJlIGJpdCBzaG91bGQgbm93IGJlIGVuYWJsZWQKLQkgKiBpbiBgY3B1aWQnCi0JICovCi0JZmVhdHVyZXMgPSBjcHVpZF9lZHgoMSk7Ci0JaWYgKCEoZmVhdHVyZXMgJiAoMSA8PCBYODZfRkVBVFVSRV9BUElDKSkpIHsKLQkJcHJpbnRrKCJDb3VsZCBub3QgZW5hYmxlIEFQSUMhXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlzZXRfYml0KFg4Nl9GRUFUVVJFX0FQSUMsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpOwotCW1wX2xhcGljX2FkZHIgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwotCi0JLyogVGhlIEJJT1MgbWF5IGhhdmUgc2V0IHVwIHRoZSBBUElDIGF0IHNvbWUgb3RoZXIgYWRkcmVzcyAqLwotCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQlpZiAobCAmIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSkKLQkJbXBfbGFwaWNfYWRkciA9IGwgJiBNU1JfSUEzMl9BUElDQkFTRV9CQVNFOwotCi0JaWYgKG5taV93YXRjaGRvZyAhPSBOTUlfTk9ORSkKLQkJbm1pX3dhdGNoZG9nID0gTk1JX0xPQ0FMX0FQSUM7Ci0KLQlwcmludGsoIkZvdW5kIGFuZCBlbmFibGVkIGxvY2FsIEFQSUMhXG4iKTsKLQotCWFwaWNfcG1fYWN0aXZhdGUoKTsKLQotCXJldHVybiAwOwotCi1ub19hcGljOgotCXByaW50aygiTm8gbG9jYWwgQVBJQyBwcmVzZW50IG9yIGhhcmR3YXJlIGRpc2FibGVkXG4iKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLXZvaWQgX19pbml0IGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgYXBpY19waHlzOwotCi0JLyoKLQkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIHNldCB1cCBhIGZha2UgYWxsCi0JICogemVyb2VzIHBhZ2UgdG8gc2ltdWxhdGUgdGhlIGxvY2FsIEFQSUMgYW5kIGFub3RoZXIKLQkgKiBvbmUgZm9yIHRoZSBJTy1BUElDLgotCSAqLwotCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiBkZXRlY3RfaW5pdF9BUElDKCkpIHsKLQkJYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQkJYXBpY19waHlzID0gX19wYShhcGljX3BoeXMpOwotCX0gZWxzZQotCQlhcGljX3BoeXMgPSBtcF9sYXBpY19hZGRyOwotCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIGFwaWNfcGh5cyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIm1hcHBlZCBBUElDIHRvICUwOGx4ICglMDhseClcbiIsIEFQSUNfQkFTRSwKLQkgICAgICAgYXBpY19waHlzKTsKLQotCS8qCi0JICogRmV0Y2ggdGhlIEFQSUMgSUQgb2YgdGhlIEJTUCBpbiBjYXNlIHdlIGhhdmUgYQotCSAqIGRlZmF1bHQgY29uZmlndXJhdGlvbiAob3IgdGhlIE1QIHRhYmxlIGlzIGJyb2tlbikuCi0JICovCi0JaWYgKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9PSAtMVUpCi0JCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IEdFVF9BUElDX0lEKGFwaWNfcmVhZChBUElDX0lEKSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQl7Ci0JCXVuc2lnbmVkIGxvbmcgaW9hcGljX3BoeXMsIGlkeCA9IEZJWF9JT19BUElDX0JBU0VfMDsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewotCQkJaWYgKHNtcF9mb3VuZF9jb25maWcpIHsKLQkJCQlpb2FwaWNfcGh5cyA9IG1wX2lvYXBpY3NbaV0ubXBjX2FwaWNhZGRyOwotCQkJCWlmICghaW9hcGljX3BoeXMpIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCSAgICAgICAiV0FSTklORzogYm9ndXMgemVybyBJTy1BUElDICIKLQkJCQkJICAgICAgICJhZGRyZXNzIGZvdW5kIGluIE1QVEFCTEUsICIKLQkJCQkJICAgICAgICJkaXNhYmxpbmcgSU8vQVBJQyBzdXBwb3J0IVxuIik7Ci0JCQkJCXNtcF9mb3VuZF9jb25maWcgPSAwOwotCQkJCQlza2lwX2lvYXBpY19zZXR1cCA9IDE7Ci0JCQkJCWdvdG8gZmFrZV9pb2FwaWNfcGFnZTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotZmFrZV9pb2FwaWNfcGFnZToKLQkJCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKQotCQkJCQkgICAgICBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7Ci0JCQkJaW9hcGljX3BoeXMgPSBfX3BhKGlvYXBpY19waHlzKTsKLQkJCX0KLQkJCXNldF9maXhtYXBfbm9jYWNoZShpZHgsIGlvYXBpY19waHlzKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJtYXBwZWQgSU9BUElDIHRvICUwOGx4ICglMDhseClcbiIsCi0JCQkgICAgICAgX19maXhfdG9fdmlydChpZHgpLCBpb2FwaWNfcGh5cyk7Ci0JCQlpZHgrKzsKLQkJfQotCX0KLSNlbmRpZgotfQotCi0vKgotICogVGhpcyBwYXJ0IHNldHMgdXAgdGhlIEFQSUMgMzIgYml0IGNsb2NrIGluIExWVFQxLCB3aXRoIEhaIGludGVycnVwdHMKLSAqIHBlciBzZWNvbmQuIFdlIGFzc3VtZSB0aGF0IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgc2V0IHVwIHRoZSBsb2NhbAotICogQVBJQy4KLSAqCi0gKiBUaGUgQVBJQyB0aW1lciBpcyBub3QgZXhhY3RseSBzeW5jIHdpdGggdGhlIGV4dGVybmFsIHRpbWVyIGNoaXAsIGl0Ci0gKiBjbG9zZWx5IGZvbGxvd3MgYnVzIGNsb2Nrcy4KLSAqLwotCi0vKgotICogVGhlIHRpbWVyIGNoaXAgaXMgYWxyZWFkeSBzZXQgdXAgYXQgSFogaW50ZXJydXB0cyBwZXIgc2Vjb25kIGhlcmUsCi0gKiBidXQgd2UgZG8gbm90IGFjY2VwdCB0aW1lciBpbnRlcnJ1cHRzIHlldC4gV2Ugb25seSBhbGxvdyB0aGUgQlAKLSAqIHRvIGNhbGlicmF0ZS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXQgZ2V0XzgyNTRfdGltZXJfY291bnQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JdW5zaWduZWQgaW50IGNvdW50OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjUzX2xvY2ssIGZsYWdzKTsKLQotCW91dGJfcCgweDAwLCBQSVRfTU9ERSk7Ci0JY291bnQgPSBpbmJfcChQSVRfQ0gwKTsKLQljb3VudCB8PSBpbmJfcChQSVRfQ0gwKSA8PCA4OwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTNfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi0vKiBuZXh0IHRpY2sgaW4gODI1NCBjYW4gYmUgY2F1Z2h0IGJ5IGNhdGNoaW5nIHRpbWVyIHdyYXBhcm91bmQgKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCB3YWl0XzgyNTRfd3JhcGFyb3VuZCh2b2lkKQotewotCXVuc2lnbmVkIGludCBjdXJyX2NvdW50LCBwcmV2X2NvdW50OwotCi0JY3Vycl9jb3VudCA9IGdldF84MjU0X3RpbWVyX2NvdW50KCk7Ci0JZG8gewotCQlwcmV2X2NvdW50ID0gY3Vycl9jb3VudDsKLQkJY3Vycl9jb3VudCA9IGdldF84MjU0X3RpbWVyX2NvdW50KCk7Ci0KLQkJLyogd29ya2Fyb3VuZCBmb3IgYnJva2VuIE1lcmN1cnkvTmVwdHVuZSAqLwotCQlpZiAocHJldl9jb3VudCA+PSBjdXJyX2NvdW50ICsgMHgxMDApCi0JCQljdXJyX2NvdW50ID0gZ2V0XzgyNTRfdGltZXJfY291bnQoKTsKLQotCX0gd2hpbGUgKHByZXZfY291bnQgPj0gY3Vycl9jb3VudCk7Ci19Ci0KLS8qCi0gKiBEZWZhdWx0IGluaXRpYWxpemF0aW9uIGZvciA4MjU0IHRpbWVycy4gSWYgd2UgdXNlIG90aGVyIHRpbWVycyBsaWtlIEhQRVQsCi0gKiB3ZSBvdmVycmlkZSB0aGlzIGxhdGVyCi0gKi8KLXZvaWQgKCp3YWl0X3RpbWVyX3RpY2spKHZvaWQpIF9fZGV2aW5pdGRhdGEgPSB3YWl0XzgyNTRfd3JhcGFyb3VuZDsKLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgbG9jYWwgQVBJQyB0aW1lciwgd2l0aCBhIHRpbWVvdXQgb2YKLSAqICdjbG9ja3MnIEFQSUMgYnVzIGNsb2NrLiBEdXJpbmcgY2FsaWJyYXRpb24gd2UgYWN0dWFsbHkgY2FsbAotICogdGhpcyBmdW5jdGlvbiB0d2ljZSBvbiB0aGUgYm9vdCBDUFUsIG9uY2Ugd2l0aCBhIGJvZ3VzIHRpbWVvdXQKLSAqIHZhbHVlLCBzZWNvbmQgdGltZSBmb3IgcmVhbC4gVGhlIG90aGVyIChub25jYWxpYnJhdGluZykgQ1BVcwotICogY2FsbCB0aGlzIGZ1bmN0aW9uIG9ubHkgb25jZSwgd2l0aCB0aGUgcmVhbCwgY2FsaWJyYXRlZCB2YWx1ZS4KLSAqCi0gKiBXZSBkbyByZWFkcyBiZWZvcmUgd3JpdGVzIGV2ZW4gaWYgdW5uZWNlc3NhcnksIHRvIGdldCBhcm91bmQgdGhlCi0gKiBQNSBBUElDIGRvdWJsZSB3cml0ZSBidWcuCi0gKi8KLQotI2RlZmluZSBBUElDX0RJVklTT1IgMTYKLQotc3RhdGljIHZvaWQgX19zZXR1cF9BUElDX0xWVFQodW5zaWduZWQgaW50IGNsb2NrcykKLXsKLQl1bnNpZ25lZCBpbnQgbHZ0dF92YWx1ZSwgdG1wX3ZhbHVlLCB2ZXI7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXZlciA9IEdFVF9BUElDX1ZFUlNJT04oYXBpY19yZWFkKEFQSUNfTFZSKSk7Ci0JbHZ0dF92YWx1ZSA9IEFQSUNfTFZUX1RJTUVSX1BFUklPRElDIHwgTE9DQUxfVElNRVJfVkVDVE9SOwotCWlmICghQVBJQ19JTlRFR1JBVEVEKHZlcikpCi0JCWx2dHRfdmFsdWUgfD0gU0VUX0FQSUNfVElNRVJfQkFTRShBUElDX1RJTUVSX0JBU0VfRElWKTsKLQotCWlmIChjcHVfaXNzZXQoY3B1LCB0aW1lcl9iY2FzdF9pcGkpKQotCQlsdnR0X3ZhbHVlIHw9IEFQSUNfTFZUX01BU0tFRDsKLQotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUVCwgbHZ0dF92YWx1ZSk7Ci0KLQkvKgotCSAqIERpdmlkZSBQSUNMSyBieSAxNgotCSAqLwotCXRtcF92YWx1ZSA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfVERDUiwgKHRtcF92YWx1ZQotCQkJCSYgfihBUElDX1REUl9ESVZfMSB8IEFQSUNfVERSX0RJVl9UTUJBU0UpKQotCQkJCXwgQVBJQ19URFJfRElWXzE2KTsKLQotCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfVE1JQ1QsIGNsb2Nrcy9BUElDX0RJVklTT1IpOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc2V0dXBfQVBJQ190aW1lcih1bnNpZ25lZCBpbnQgY2xvY2tzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQkvKgotCSAqIFdhaXQgZm9yIElSUTAncyBzbGljZToKLQkgKi8KLQl3YWl0X3RpbWVyX3RpY2soKTsKLQotCV9fc2V0dXBfQVBJQ19MVlRUKGNsb2Nrcyk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBJbiB0aGlzIGZ1bmN0aW9uIHdlIGNhbGlicmF0ZSBBUElDIGJ1cyBjbG9ja3MgdG8gdGhlIGV4dGVybmFsCi0gKiB0aW1lci4gVW5mb3J0dW5hdGVseSB3ZSBjYW5ub3QgdXNlIGppZmZpZXMgYW5kIHRoZSB0aW1lciBpcnEKLSAqIHRvIGNhbGlicmF0ZSwgc2luY2Ugc29tZSBsYXRlciBib290dXAgY29kZSBkZXBlbmRzIG9uIGdldHRpbmcKLSAqIHRoZSBmaXJzdCBpcnE/IFVnaC4KLSAqCi0gKiBXZSB3YW50IHRvIGRvIHRoZSBjYWxpYnJhdGlvbiBvbmx5IG9uY2Ugc2luY2Ugd2UKLSAqIHdhbnQgdG8gaGF2ZSBsb2NhbCB0aW1lciBpcnFzIHN5bmNyb24uIENQVXMgY29ubmVjdGVkCi0gKiBieSB0aGUgc2FtZSBBUElDIGJ1cyBoYXZlIHRoZSB2ZXJ5IHNhbWUgYnVzIGZyZXF1ZW5jeS4KLSAqIEFuZCB3ZSB3YW50IHRvIGhhdmUgaXJxcyBvZmYgYW55d2F5cywgbm8gYWNjaWRlbnRhbAotICogQVBJQyBpcnEgdGhhdCB3YXkuCi0gKi8KLQotc3RhdGljIGludCBfX2luaXQgY2FsaWJyYXRlX0FQSUNfY2xvY2sodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdDEgPSAwLCB0MiA9IDA7Ci0JbG9uZyB0dDEsIHR0MjsKLQlsb25nIHJlc3VsdDsKLQlpbnQgaTsKLQljb25zdCBpbnQgTE9PUFMgPSBIWi8xMDsKLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImNhbGlicmF0aW5nIEFQSUMgdGltZXIgLi4uXG4iKTsKLQotCS8qCi0JICogUHV0IHdoYXRldmVyIGFyYml0cmFyeSAoYnV0IGxvbmcgZW5vdWdoKSB0aW1lb3V0Ci0JICogdmFsdWUgaW50byB0aGUgQVBJQyBjbG9jaywgd2UganVzdCB3YW50IHRvIGdldCB0aGUKLQkgKiBjb3VudGVyIHJ1bm5pbmcgZm9yIGNhbGlicmF0aW9uLgotCSAqLwotCV9fc2V0dXBfQVBJQ19MVlRUKDEwMDAwMDAwMDApOwotCi0JLyoKLQkgKiBUaGUgdGltZXIgY2hpcCBjb3VudHMgZG93biB0byB6ZXJvLiBMZXQncyB3YWl0Ci0JICogZm9yIGEgd3JhcGFyb3VuZCB0byBzdGFydCBleGFjdCBtZWFzdXJlbWVudDoKLQkgKiAodGhlIGN1cnJlbnQgdGljayBtaWdodCBoYXZlIGJlZW4gYWxyZWFkeSBoYWxmIGRvbmUpCi0JICovCi0KLQl3YWl0X3RpbWVyX3RpY2soKTsKLQotCS8qCi0JICogV2Ugd3JhcHBlZCBhcm91bmQganVzdCBub3cuIExldCdzIHN0YXJ0OgotCSAqLwotCWlmIChjcHVfaGFzX3RzYykKLQkJcmR0c2NsbCh0MSk7Ci0JdHQxID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOwotCi0JLyoKLQkgKiBMZXQncyB3YWl0IExPT1BTIHdyYXByb3VuZHM6Ci0JICovCi0JZm9yIChpID0gMDsgaSA8IExPT1BTOyBpKyspCi0JCXdhaXRfdGltZXJfdGljaygpOwotCi0JdHQyID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOwotCWlmIChjcHVfaGFzX3RzYykKLQkJcmR0c2NsbCh0Mik7Ci0KLQkvKgotCSAqIFRoZSBBUElDIGJ1cyBjbG9jayBjb3VudGVyIGlzIDMyIGJpdHMgb25seSwgaXQKLQkgKiBtaWdodCBoYXZlIG92ZXJmbG93biwgYnV0IG5vdGUgdGhhdCB3ZSB1c2Ugc2lnbmVkCi0JICogbG9uZ3MsIHRodXMgbm8gZXh0cmEgY2FyZSBuZWVkZWQuCi0JICoKLQkgKiB1bmRlcmZsb3duIHRvIGJlIGV4YWN0LCBhcyB0aGUgdGltZXIgY291bnRzIGRvd24gOykKLQkgKi8KLQotCXJlc3VsdCA9ICh0dDEtdHQyKSpBUElDX0RJVklTT1IvTE9PUFM7Ci0KLQlpZiAoY3B1X2hhc190c2MpCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIENQVSBjbG9jayBzcGVlZCBpcyAiCi0JCQkiJWxkLiUwNGxkIE1Iei5cbiIsCi0JCQkoKGxvbmcpKHQyLXQxKS9MT09QUykvKDEwMDAwMDAvSFopLAotCQkJKChsb25nKSh0Mi10MSkvTE9PUFMpJSgxMDAwMDAwL0haKSk7Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBob3N0IGJ1cyBjbG9jayBzcGVlZCBpcyAiCi0JCSIlbGQuJTA0bGQgTUh6LlxuIiwKLQkJcmVzdWx0LygxMDAwMDAwL0haKSwKLQkJcmVzdWx0JSgxMDAwMDAwL0haKSk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGNhbGlicmF0aW9uX3Jlc3VsdDsKLQotdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJVc2luZyBsb2NhbCBBUElDIHRpbWVyIGludGVycnVwdHMuXG4iKTsKLQl1c2luZ19hcGljX3RpbWVyID0gMTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWNhbGlicmF0aW9uX3Jlc3VsdCA9IGNhbGlicmF0ZV9BUElDX2Nsb2NrKCk7Ci0JLyoKLQkgKiBOb3cgc2V0IHVwIHRoZSB0aW1lciBmb3IgcmVhbC4KLQkgKi8KLQlzZXR1cF9BUElDX3RpbWVyKGNhbGlicmF0aW9uX3Jlc3VsdCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXZvaWQgX19kZXZpbml0IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKHZvaWQpCi17Ci0Jc2V0dXBfQVBJQ190aW1lcihjYWxpYnJhdGlvbl9yZXN1bHQpOwotfQotCi12b2lkIGRpc2FibGVfQVBJQ190aW1lcih2b2lkKQotewotCWlmICh1c2luZ19hcGljX3RpbWVyKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdjsKLQotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JCS8qCi0JCSAqIFdoZW4gYW4gaWxsZWdhbCB2ZWN0b3IgdmFsdWUgKDAtMTUpIGlzIHdyaXR0ZW4gdG8gYW4gTFZUCi0JCSAqIGVudHJ5IGFuZCBkZWxpdmVyeSBtb2RlIGlzIEZpeGVkLCB0aGUgQVBJQyBtYXkgc2lnbmFsIGFuCi0JCSAqIGlsbGVnYWwgdmVjdG9yIGVycm9yLCB3aXRoIG91dCByZWdhcmQgdG8gd2hldGhlciB0aGUgbWFzawotCQkgKiBiaXQgaXMgc2V0IG9yIHdoZXRoZXIgYW4gaW50ZXJydXB0IGlzIGFjdHVhbGx5IHNlZW4gb24gaW5wdXQuCi0JCSAqCi0JCSAqIEJvb3Qgc2VxdWVuY2UgbWlnaHQgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIExWVFQgaGFzCi0JCSAqICcwJyB2ZWN0b3IgdmFsdWUuIFNvIG1ha2Ugc3VyZSB2ZWN0b3IgZmllbGQgaXMgc2V0IHRvCi0JCSAqIHZhbGlkIHZhbHVlLgotCQkgKi8KLQkJdiB8PSAoQVBJQ19MVlRfTUFTS0VEIHwgTE9DQUxfVElNRVJfVkVDVE9SKTsKLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRULCB2KTsKLQl9Ci19Ci0KLXZvaWQgZW5hYmxlX0FQSUNfdGltZXIodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKHVzaW5nX2FwaWNfdGltZXIgJiYKLQkgICAgIWNwdV9pc3NldChjcHUsIHRpbWVyX2JjYXN0X2lwaSkpIHsKLQkJdW5zaWduZWQgbG9uZyB2OwotCi0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRULCB2ICYgfkFQSUNfTFZUX01BU0tFRCk7Ci0JfQotfQotCi12b2lkIHN3aXRjaF9BUElDX3RpbWVyX3RvX2lwaSh2b2lkICpjcHVtYXNrKQotewotCWNwdW1hc2tfdCBtYXNrID0gKihjcHVtYXNrX3QgKiljcHVtYXNrOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoY3B1X2lzc2V0KGNwdSwgbWFzaykgJiYKLQkgICAgIWNwdV9pc3NldChjcHUsIHRpbWVyX2JjYXN0X2lwaSkpIHsKLQkJZGlzYWJsZV9BUElDX3RpbWVyKCk7Ci0JCWNwdV9zZXQoY3B1LCB0aW1lcl9iY2FzdF9pcGkpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woc3dpdGNoX0FQSUNfdGltZXJfdG9faXBpKTsKLQotdm9pZCBzd2l0Y2hfaXBpX3RvX0FQSUNfdGltZXIodm9pZCAqY3B1bWFzaykKLXsKLQljcHVtYXNrX3QgbWFzayA9ICooY3B1bWFza190ICopY3B1bWFzazsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGNwdV9pc3NldChjcHUsIG1hc2spICYmCi0JICAgIGNwdV9pc3NldChjcHUsIHRpbWVyX2JjYXN0X2lwaSkpIHsKLQkJY3B1X2NsZWFyKGNwdSwgdGltZXJfYmNhc3RfaXBpKTsKLQkJZW5hYmxlX0FQSUNfdGltZXIoKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKHN3aXRjaF9pcGlfdG9fQVBJQ190aW1lcik7Ci0KLSN1bmRlZiBBUElDX0RJVklTT1IKLQotLyoKLSAqIExvY2FsIHRpbWVyIGludGVycnVwdCBoYW5kbGVyLiBJdCBkb2VzIGJvdGggcHJvZmlsaW5nIGFuZAotICogcHJvY2VzcyBzdGF0aXN0aWNzL3Jlc2NoZWR1bGluZy4KLSAqCi0gKiBXZSBkbyBwcm9maWxpbmcgaW4gZXZlcnkgbG9jYWwgdGljaywgc3RhdGlzdGljcy9yZXNjaGVkdWxpbmcKLSAqIGhhcHBlbiBvbmx5IGV2ZXJ5ICdwcm9maWxpbmcgbXVsdGlwbGllcicgdGlja3MuIFRoZSBkZWZhdWx0Ci0gKiBtdWx0aXBsaWVyIGlzIDEgYW5kIGl0IGNhbiBiZSBjaGFuZ2VkIGJ5IHdyaXRpbmcgdGhlIG5ldyBtdWx0aXBsaWVyCi0gKiB2YWx1ZSBpbnRvIC9wcm9jL3Byb2ZpbGUuCi0gKi8KLQotaW5saW5lIHZvaWQgc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCh2b2lkKQotewotCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlX3ZtKGdldF9pcnFfcmVncygpKSk7Ci0jZW5kaWYKLQotCS8qCi0JICogV2UgdGFrZSB0aGUgJ2xvbmcnIHJldHVybiBwYXRoLCBhbmQgdGhlcmUgZXZlcnkgc3Vic3lzdGVtCi0JICogZ3JhYnMgdGhlIGFwcm9wcmlhdGUgbG9ja3MgKGtlcm5lbCBsb2NrLyBpcnEgbG9jaykuCi0JICoKLQkgKiB3ZSBtaWdodCB3YW50IHRvIGRlY291cGxlIHByb2ZpbGluZyBmcm9tIHRoZSAnbG9uZyBwYXRoJywKLQkgKiBhbmQgZG8gdGhlIHByb2ZpbGluZyB0b3RhbGx5IGluIGFzc2VtYmx5LgotCSAqCi0JICogQ3VycmVudGx5IHRoaXMgaXNuJ3QgdG9vIG11Y2ggb2YgYW4gaXNzdWUgKHBlcmZvcm1hbmNlIHdpc2UpLAotCSAqIHdlIGNhbiB0YWtlIG1vcmUgdGhhbiAxMDBLIGxvY2FsIGlycXMgcGVyIHNlY29uZCBvbiBhIDEwMCBNSHogUDUuCi0JICovCi19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIHRpbWVyIGludGVycnVwdC4gVGhpcyBpcyB0aGUgbW9zdCBuYXR1cmFsIHdheSBmb3IgZG9pbmcKLSAqIGxvY2FsIGludGVycnVwdHMsIGJ1dCBsb2NhbCB0aW1lciBpbnRlcnJ1cHRzIGNhbiBiZSBlbXVsYXRlZCBieQotICogYnJvYWRjYXN0IGludGVycnVwdHMgdG9vLiBbaW4gY2FzZSB0aGUgaHcgZG9lc24ndCBzdXBwb3J0IEFQSUMgdGltZXJzXQotICoKLSAqIFsgaWYgYSBzaW5nbGUtQ1BVIHN5c3RlbSBydW5zIGFuIFNNUCBrZXJuZWwgdGhlbiB3ZSBjYWxsIHRoZSBsb2NhbAotICogICBpbnRlcnJ1cHQgYXMgd2VsbC4gVGh1cyB3ZSBjYW5ub3QgaW5saW5lIHRoZSBsb2NhbCBpcnEgLi4uIF0KLSAqLwotCi1mYXN0Y2FsbCB2b2lkIHNtcF9hcGljX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCS8qCi0JICogdGhlIE5NSSBkZWFkbG9jay1kZXRlY3RvciB1c2VzIHRoaXMuCi0JICovCi0JcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5hcGljX3RpbWVyX2lycXMrKzsKLQotCS8qCi0JICogTk9URSEgV2UnZCBiZXR0ZXIgQUNLIHRoZSBpcnEgaW1tZWRpYXRlbHksCi0JICogYmVjYXVzZSB0aW1lciBoYW5kbGluZyBjYW4gYmUgc2xvdy4KLQkgKi8KLQlhY2tfQVBJQ19pcnEoKTsKLQkvKgotCSAqIHVwZGF0ZV9wcm9jZXNzX3RpbWVzKCkgZXhwZWN0cyB1cyB0byBoYXZlIGRvbmUgaXJxX2VudGVyKCkuCi0JICogQmVzaWRlcywgaWYgd2UgZG9uJ3QgdGltZXIgaW50ZXJydXB0cyBpZ25vcmUgdGhlIGdsb2JhbAotCSAqIGludGVycnVwdCBsb2NrLCB3aGljaCBpcyB0aGUgV3JvbmdUaGluZyAodG0pIHRvIGRvLgotCSAqLwotCWlycV9lbnRlcigpOwotCXNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQoKTsKLQlpcnFfZXhpdCgpOwotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci19Ci0KLSNpZm5kZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgdXBfYXBpY190aW1lcl9pbnRlcnJ1cHRfY2FsbCh2b2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkvKgotCSAqIHRoZSBOTUkgZGVhZGxvY2stZGV0ZWN0b3IgdXNlcyB0aGlzLgotCSAqLwotCXBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuYXBpY190aW1lcl9pcnFzKys7Ci0KLQlzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBzbXBfc2VuZF90aW1lcl9icm9hZGNhc3RfaXBpKHZvaWQpCi17Ci0JY3B1bWFza190IG1hc2s7Ci0KLQljcHVzX2FuZChtYXNrLCBjcHVfb25saW5lX21hcCwgdGltZXJfYmNhc3RfaXBpKTsKLQlpZiAoIWNwdXNfZW1wdHkobWFzaykpIHsKLSNpZmRlZiBDT05GSUdfU01QCi0JCXNlbmRfSVBJX21hc2sobWFzaywgTE9DQUxfVElNRVJfVkVDVE9SKTsKLSNlbHNlCi0JCS8qCi0JCSAqIFdlIGNhbiBkaXJlY3RseSBjYWxsIHRoZSBhcGljIHRpbWVyIGludGVycnVwdCBoYW5kbGVyCi0JCSAqIGluIFVQIGNhc2UuIE1pbnVzIGFsbCBpcnEgcmVsYXRlZCBmdW5jdGlvbnMKLQkJICovCi0JCXVwX2FwaWNfdGltZXJfaW50ZXJydXB0X2NhbGwoKTsKLSNlbmRpZgotCX0KLX0KLQotaW50IHNldHVwX3Byb2ZpbGluZ190aW1lcih1bnNpZ25lZCBpbnQgbXVsdGlwbGllcikKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotLyoKLSAqIFRoaXMgaW50ZXJydXB0IHNob3VsZCBfbmV2ZXJfIGhhcHBlbiB3aXRoIG91ciBBUElDL1NNUCBhcmNoaXRlY3R1cmUKLSAqLwotZmFzdGNhbGwgdm9pZCBzbXBfc3B1cmlvdXNfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgdjsKLQotCWlycV9lbnRlcigpOwotCS8qCi0JICogQ2hlY2sgaWYgdGhpcyByZWFsbHkgaXMgYSBzcHVyaW91cyBpbnRlcnJ1cHQgYW5kIEFDSyBpdAotCSAqIGlmIGl0IGlzIGEgdmVjdG9yZWQgb25lLiAgSnVzdCBpbiBjYXNlLi4uCi0JICogU3B1cmlvdXMgaW50ZXJydXB0cyBzaG91bGQgbm90IGJlIEFDS2VkLgotCSAqLwotCXYgPSBhcGljX3JlYWQoQVBJQ19JU1IgKyAoKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgfjB4MWYpID4+IDEpKTsKLQlpZiAodiAmICgxIDw8IChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIDB4MWYpKSkKLQkJYWNrX0FQSUNfaXJxKCk7Ci0KLQkvKiBzZWUgc3ctZGV2LW1hbiB2b2wgMywgY2hhcHRlciA3LjQuMTMuNSAqLwotCXByaW50ayhLRVJOX0lORk8gInNwdXJpb3VzIEFQSUMgaW50ZXJydXB0IG9uIENQVSMlZCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIsCi0JCQlzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWlycV9leGl0KCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGludGVycnVwdCBzaG91bGQgbmV2ZXIgaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQotICovCi0KLWZhc3RjYWxsIHZvaWQgc21wX2Vycm9yX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1bnNpZ25lZCBsb25nIHYsIHYxOwotCi0JaXJxX2VudGVyKCk7Ci0JLyogRmlyc3QgdGlja2xlIHRoZSBoYXJkd2FyZSwgb25seSB0aGVuIHJlcG9ydCB3aGF0IHdlbnQgb24uIC0tIFJFVyAqLwotCXYgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCXYxID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlhY2tfQVBJQ19pcnEoKTsKLQlhdG9taWNfaW5jKCZpcnFfZXJyX2NvdW50KTsKLQotCS8qIEhlcmUgaXMgd2hhdCB0aGUgQVBJQyBlcnJvciBiaXRzIG1lYW46Ci0JICAgMDogU2VuZCBDUyBlcnJvcgotCSAgIDE6IFJlY2VpdmUgQ1MgZXJyb3IKLQkgICAyOiBTZW5kIGFjY2VwdCBlcnJvcgotCSAgIDM6IFJlY2VpdmUgYWNjZXB0IGVycm9yCi0JICAgNDogUmVzZXJ2ZWQKLQkgICA1OiBTZW5kIGlsbGVnYWwgdmVjdG9yCi0JICAgNjogUmVjZWl2ZWQgaWxsZWdhbCB2ZWN0b3IKLQkgICA3OiBJbGxlZ2FsIHJlZ2lzdGVyIGFkZHJlc3MKLQkqLwotCXByaW50ayAoS0VSTl9ERUJVRyAiQVBJQyBlcnJvciBvbiBDUFUlZDogJTAybHgoJTAybHgpXG4iLAotCSAgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCB2ICwgdjEpOwotCWlycV9leGl0KCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGluaXRpYWxpemVzIHRoZSBJTy1BUElDIGFuZCBBUElDIGhhcmR3YXJlIGlmIHRoaXMgaXMKLSAqIGEgVVAga2VybmVsLgotICovCi1pbnQgX19pbml0IEFQSUNfaW5pdF91bmlwcm9jZXNzb3IgKHZvaWQpCi17Ci0JaWYgKGVuYWJsZV9sb2NhbF9hcGljIDwgMCkKLQkJY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0FQSUMsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpOwotCi0JaWYgKCFzbXBfZm91bmRfY29uZmlnICYmICFjcHVfaGFzX2FwaWMpCi0JCXJldHVybiAtMTsKLQotCS8qCi0JICogQ29tcGxhaW4gaWYgdGhlIEJJT1MgcHJldGVuZHMgdGhlcmUgaXMgb25lLgotCSAqLwotCWlmICghY3B1X2hhc19hcGljICYmIEFQSUNfSU5URUdSQVRFRChhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgbG9jYWwgQVBJQyAjJWQgbm90IGRldGVjdGVkIS4uLlxuIiwKLQkJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Ci0JCWNsZWFyX2JpdChYODZfRkVBVFVSRV9BUElDLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXZlcmlmeV9sb2NhbF9BUElDKCk7Ci0KLQljb25uZWN0X2JzcF9BUElDKCk7Ci0KLQkvKgotCSAqIEhhY2s6IEluIGNhc2Ugb2Yga2R1bXAsIGFmdGVyIGEgY3Jhc2gsIGtlcm5lbCBtaWdodCBiZSBib290aW5nCi0JICogb24gYSBjcHUgd2l0aCBub24temVybyBsYXBpYyBpZC4gQnV0IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAotCSAqIG1pZ2h0IGJlIHplcm8gaWYgcmVhZCBmcm9tIE1QIHRhYmxlcy4gR2V0IGl0IGZyb20gTEFQSUMuCi0JICovCi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSBHRVRfQVBJQ19JRChhcGljX3JlYWQoQVBJQ19JRCkpOwotI2VuZGlmCi0JcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKLQotCXNldHVwX2xvY2FsX0FQSUMoKTsKLQotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCWlmIChzbXBfZm91bmRfY29uZmlnKQotCQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCQlzZXR1cF9JT19BUElDKCk7Ci0jZW5kaWYKLQlzZXR1cF9ib290X0FQSUNfY2xvY2soKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9sYXBpYyhjaGFyICphcmcpCi17Ci0JbGFwaWNfZW5hYmxlKCk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibGFwaWMiLCBwYXJzZV9sYXBpYyk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX25vbGFwaWMoY2hhciAqYXJnKQotewotCWxhcGljX2Rpc2FibGUoKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub2xhcGljIiwgcGFyc2Vfbm9sYXBpYyk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCmluZGV4IGRiOTlhODkuLjA2NGJiZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYwpAQCAtMjExLDYgKzIxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYXBtX2Jpb3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yMzUsNyArMjM2LDYgQEAKIAogI2luY2x1ZGUgImlvX3BvcnRzLmgiCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9jbW9zX3RpbWUodm9pZCk7CiBleHRlcm4gdm9pZCBtYWNoaW5lX3JlYWxfcmVzdGFydCh1bnNpZ25lZCBjaGFyICosIGludCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUE1fRElTUExBWV9CTEFOSykgJiYgZGVmaW5lZChDT05GSUdfVlQpCkBAIC0xMTc1LDI4ICsxMTc1LDYgQEAKIAlzcGluX3VubG9jaygmdXNlcl9saXN0X2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfdGltZSh2b2lkKQotewotCXN0cnVjdCB0aW1lc3BlYyB0czsKLQlpZiAoZ290X2Nsb2NrX2RpZmYpIHsJLyogTXVzdCBrbm93IHRpbWUgem9uZSBpbiBvcmRlciB0byBzZXQgY2xvY2sgKi8KLQkJdHMudHZfc2VjID0gZ2V0X2Ntb3NfdGltZSgpICsgY2xvY2tfY21vc19kaWZmOwotCQl0cy50dl9uc2VjID0gMDsKLQkJZG9fc2V0dGltZW9mZGF5KCZ0cyk7Ci0JfSAKLX0KLQotc3RhdGljIHZvaWQgZ2V0X3RpbWVfZGlmZih2b2lkKQotewotI2lmbmRlZiBDT05GSUdfQVBNX1JUQ19JU19HTVQKLQkvKgotCSAqIEVzdGltYXRlIHRpbWUgem9uZSBzbyB0aGF0IHNldF90aW1lIGNhbiB1cGRhdGUgdGhlIGNsb2NrCi0JICovCi0JY2xvY2tfY21vc19kaWZmID0gLWdldF9jbW9zX3RpbWUoKTsKLQljbG9ja19jbW9zX2RpZmYgKz0gZ2V0X3NlY29uZHMoKTsKLQlnb3RfY2xvY2tfZGlmZiA9IDE7Ci0jZW5kaWYKLX0KLQogc3RhdGljIHZvaWQgcmVpbml0X3RpbWVyKHZvaWQpCiB7CiAjaWZkZWYgSU5JVF9USU1FUl9BRlRFUl9TVVNQRU5ECkBAIC0xMjM2LDE5ICsxMjE0LDYgQEAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7CiAKLQkvKiBzZXJpYWxpemUgd2l0aCB0aGUgdGltZXIgaW50ZXJydXB0ICovCi0Jd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7Ci0KLQkvKiBwcm90ZWN0IGFnYWluc3QgYWNjZXNzIHRvIHRpbWVyIGNoaXAgcmVnaXN0ZXJzICovCi0Jc3Bpbl9sb2NrKCZpODI1M19sb2NrKTsKLQotCWdldF90aW1lX2RpZmYoKTsKLQkvKgotCSAqIElycSBzcGlubG9jayBtdXN0IGJlIGRyb3BwZWQgYXJvdW5kIHNldF9zeXN0ZW1fcG93ZXJfc3RhdGUuCi0JICogV2UnbGwgdW5kbyBhbnkgdGltZXIgY2hhbmdlcyBkdWUgdG8gaW50ZXJydXB0cyBiZWxvdy4KLQkgKi8KLQlzcGluX3VubG9jaygmaTgyNTNfbG9jayk7Ci0Jd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAlzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSgpOwpAQCAtMTI1Nyw3ICsxMjIyLDYgQEAKIAlyZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSgpOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlzZXRfdGltZSgpOwogCXJlaW5pdF90aW1lcigpOwogCiAJaWYgKGVyciA9PSBBUE1fTk9fRVJST1IpCkBAIC0xMjg3LDExICsxMjUxLDYgQEAKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19TVVNQRU5EKTsKLQkvKiBzZXJpYWxpemUgd2l0aCB0aGUgdGltZXIgaW50ZXJydXB0ICovCi0Jd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7Ci0JLyogSWYgbmVlZGVkLCBub3RpZnkgZHJpdmVycyBoZXJlICovCi0JZ2V0X3RpbWVfZGlmZigpOwotCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJZXJyID0gc2V0X3N5c3RlbV9wb3dlcl9zdGF0ZShBUE1fU1RBVEVfU1RBTkRCWSk7CkBAIC0xMzg1LDcgKzEzNDQsNiBAQAogCQkJaWdub3JlX2JvdW5jZSA9IDE7CiAJCQlpZiAoKGV2ZW50ICE9IEFQTV9OT1JNQUxfUkVTVU1FKQogCQkJICAgIHx8IChpZ25vcmVfbm9ybWFsX3Jlc3VtZSA9PSAwKSkgewotCQkJCXNldF90aW1lKCk7CiAJCQkJZGV2aWNlX3Jlc3VtZSgpOwogCQkJCXBtX3NlbmRfYWxsKFBNX1JFU1VNRSwgKHZvaWQgKikwKTsKIAkJCQlxdWV1ZV9ldmVudChldmVudCwgTlVMTCk7CkBAIC0xNDAxLDcgKzEzNTksNiBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBBUE1fVVBEQVRFX1RJTUU6Ci0JCQlzZXRfdGltZSgpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBUE1fQ1JJVElDQUxfU1VTUEVORDoKQEAgLTE2MzYsOSArMTU5Myw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXBtX2dldF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBmcG9zLCBpbnQgbGVuZ3RoKQorc3RhdGljIGludCBwcm9jX2FwbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQljaGFyICoJCXA7CiAJdW5zaWduZWQgc2hvcnQJYng7CiAJdW5zaWduZWQgc2hvcnQJY3g7CiAJdW5zaWduZWQgc2hvcnQJZHg7CkBAIC0xNjUwLDggKzE2MDYsNiBAQAogCWludCAgICAgICAgICAgICB0aW1lX3VuaXRzICAgICA9IC0xOwogCWNoYXIgICAgICAgICAgICAqdW5pdHMgICAgICAgICA9ICI/IjsKIAotCXAgPSBidWY7Ci0KIAlpZiAoKG51bV9vbmxpbmVfY3B1cygpID09IDEpICYmCiAJICAgICEoZXJyb3IgPSBhcG1fZ2V0X3Bvd2VyX3N0YXR1cygmYngsICZjeCwgJmR4KSkpIHsKIAkJYWNfbGluZV9zdGF0dXMgPSAoYnggPj4gOCkgJiAweGZmOwpAQCAtMTcwNSw3ICsxNjU5LDcgQEAKIAkgICAgICAtMTogVW5rbm93bgogCSAgIDgpIG1pbiA9IG1pbnV0ZXM7IHNlYyA9IHNlY29uZHMgKi8KIAotCXAgKz0gc3ByaW50ZihwLCAiJXMgJWQuJWQgMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4ICVkJSUgJWQgJXNcbiIsCisJc2VxX3ByaW50ZihtLCAiJXMgJWQuJWQgMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4ICVkJSUgJWQgJXNcbiIsCiAJCSAgICAgZHJpdmVyX3ZlcnNpb24sCiAJCSAgICAgKGFwbV9pbmZvLmJpb3MudmVyc2lvbiA+PiA4KSAmIDB4ZmYsCiAJCSAgICAgYXBtX2luZm8uYmlvcy52ZXJzaW9uICYgMHhmZiwKQEAgLTE3MTYsMTAgKzE2NzAsMjIgQEAKIAkJICAgICBwZXJjZW50YWdlLAogCQkgICAgIHRpbWVfdW5pdHMsCiAJCSAgICAgdW5pdHMpOwotCi0JcmV0dXJuIHAgLSBidWY7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcHJvY19hcG1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY19hcG1fc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFwbV9maWxlX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcHJvY19hcG1fb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGludCBhcG0odm9pZCAqdW51c2VkKQogewogCXVuc2lnbmVkIHNob3J0CWJ4OwpAQCAtMjM0MSw5ICsyMzA3LDkgQEAKIAlzZXRfYmFzZShnZHRbQVBNX0RTID4+IDNdLAogCQkgX192YSgodW5zaWduZWQgbG9uZylhcG1faW5mby5iaW9zLmRzZWcgPDwgNCkpOwogCi0JYXBtX3Byb2MgPSBjcmVhdGVfcHJvY19pbmZvX2VudHJ5KCJhcG0iLCAwLCBOVUxMLCBhcG1fZ2V0X2luZm8pOworCWFwbV9wcm9jID0gY3JlYXRlX3Byb2NfZW50cnkoImFwbSIsIDAsIE5VTEwpOwogCWlmIChhcG1fcHJvYykKLQkJYXBtX3Byb2MtPm93bmVyID0gVEhJU19NT0RVTEU7CisJCWFwbV9wcm9jLT5wcm9jX2ZvcHMgPSAmYXBtX2ZpbGVfb3BzOwogCiAJa2FwbWRfdGFzayA9IGt0aHJlYWRfY3JlYXRlKGFwbSwgTlVMTCwgImthcG1kIik7CiAJaWYgKElTX0VSUihrYXBtZF90YXNrKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDFiMmYzY2QuLmMzNzUzNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAlPRkZTRVQoUFRfRUFYLCBwdF9yZWdzLCBlYXgpOwogCU9GRlNFVChQVF9EUywgIHB0X3JlZ3MsIHhkcyk7CiAJT0ZGU0VUKFBUX0VTLCAgcHRfcmVncywgeGVzKTsKLQlPRkZTRVQoUFRfR1MsICBwdF9yZWdzLCB4Z3MpOworCU9GRlNFVChQVF9GUywgIHB0X3JlZ3MsIHhmcyk7CiAJT0ZGU0VUKFBUX09SSUdfRUFYLCBwdF9yZWdzLCBvcmlnX2VheCk7CiAJT0ZGU0VUKFBUX0VJUCwgcHRfcmVncywgZWlwKTsKIAlPRkZTRVQoUFRfQ1MsICBwdF9yZWdzLCB4Y3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCA4YThiYmRhLi5kY2JiZDBhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtNjA1LDcgKzYwNSw3IEBACiBzdHJ1Y3QgcHRfcmVncyAqIF9fZGV2aW5pdCBpZGxlX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJbWVtc2V0KHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwotCXJlZ3MtPnhncyA9IF9fS0VSTkVMX1BEQTsKKwlyZWdzLT54ZnMgPSBfX0tFUk5FTF9QREE7CiAJcmV0dXJuIHJlZ3M7CiB9CiAKQEAgLTY2MiwxMiArNjYyLDEyIEBACiAJLnBjdXJyZW50ID0gJmluaXRfdGFzaywKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfa2VybmVsX2dzKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2tlcm5lbF9mcyh2b2lkKQogewotCS8qIFNldCAlZ3MgZm9yIHRoaXMgQ1BVJ3MgUERBLiAgTWVtb3J5IGNsb2JiZXIgaXMgdG8gY3JlYXRlIGEKKwkvKiBTZXQgJWZzIGZvciB0aGlzIENQVSdzIFBEQS4gIE1lbW9yeSBjbG9iYmVyIGlzIHRvIGNyZWF0ZSBhCiAJICAgYmFycmllciB3aXRoIHJlc3BlY3QgdG8gYW55IFBEQSBvcGVyYXRpb25zLCBzbyB0aGUgY29tcGlsZXIKIAkgICBkb2Vzbid0IG1vdmUgYW55IGJlZm9yZSBoZXJlLiAqLwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVncyIgOiA6ICJyIiAoX19LRVJORUxfUERBKSA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZnMiIDogOiAiciIgKF9fS0VSTkVMX1BEQSkgOiAibWVtb3J5Iik7CiB9CiAKIC8qIEluaXRpYWxpemUgdGhlIENQVSdzIEdEVCBhbmQgUERBLiAgVGhlIGJvb3QgQ1BVIGRvZXMgdGhpcyBmb3IKQEAgLTcxOCw3ICs3MTgsNyBAQAogCSAgIHRoZSBib290IENQVSwgdGhpcyB3aWxsIHRyYW5zaXRpb24gZnJvbSB0aGUgYm9vdCBnZHQrcGRhIHRvCiAJICAgdGhlIHJlYWwgb25lcykuICovCiAJbG9hZF9nZHQoY3B1X2dkdF9kZXNjcik7Ci0Jc2V0X2tlcm5lbF9ncygpOworCXNldF9rZXJuZWxfZnMoKTsKIH0KIAogLyogQ29tbW9uIENQVSBpbml0IGZvciBib3RoIGJvb3QgYW5kIHNlY29uZGFyeSBDUFVzICovCkBAIC03NjQsOCArNzY0LDggQEAKIAlfX3NldF90c3NfZGVzYyhjcHUsIEdEVF9FTlRSWV9ET1VCTEVGQVVMVF9UU1MsICZkb3VibGVmYXVsdF90c3MpOwogI2VuZGlmCiAKLQkvKiBDbGVhciAlZnMuICovCi0JYXNtIHZvbGF0aWxlICgibW92ICUwLCAlJWZzIiA6IDogInIiICgwKSk7CisJLyogQ2xlYXIgJWdzLiAqLworCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVncyIgOiA6ICJyIiAoMCkpOwogCiAJLyogQ2xlYXIgYWxsIDYgZGVidWcgcmVnaXN0ZXJzOiAqLwogCXNldF9kZWJ1Z3JlZygwLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwppbmRleCA1Mjk5YzViLi42YzUyMTgyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnCkBAIC0yMTcsNiArMjE3LDE1IEBACiAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTi4KIAorY29uZmlnIFg4Nl9FX1BPV0VSU0FWRVIKKwl0cmlzdGF0ZSAiVklBIEM3IEVuaGFuY2VkIFBvd2VyU2F2ZXIgKEVYUEVSSU1FTlRBTCkiCisJc2VsZWN0IENQVV9GUkVRX1RBQkxFCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBUaGlzIGFkZHMgdGhlIENQVUZyZXEgZHJpdmVyIGZvciBWSUEgQzcgcHJvY2Vzc29ycy4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOLgorCiBjb21tZW50ICJzaGFyZWQgb3B0aW9ucyIKIAogY29uZmlnIFg4Nl9BQ1BJX0NQVUZSRVFfUFJPQ19JTlRGCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQppbmRleCA4ZGUzYWJlLi41NjBmNzc2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKQEAgLTIsNiArMiw3IEBACiBvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s3KQkJKz0gcG93ZXJub3ctazcubwogb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LOCkJCSs9IHBvd2Vybm93LWs4Lm8KIG9iai0kKENPTkZJR19YODZfTE9OR0hBVUwpCQkrPSBsb25naGF1bC5vCitvYmotJChDT05GSUdfWDg2X0VfUE9XRVJTQVZFUikJCSs9IGVfcG93ZXJzYXZlci5vCiBvYmotJChDT05GSUdfRUxBTl9DUFVGUkVRKQkJKz0gZWxhbmZyZXEubwogb2JqLSQoQ09ORklHX1NDNTIwX0NQVUZSRVEpCQkrPSBzYzUyMF9mcmVxLm8KIG9iai0kKENPTkZJR19YODZfTE9OR1JVTikJCSs9IGxvbmdydW4ubyAgCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDNkOThlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYwpAQCAtMCwwICsxLDMzNCBAQAorLyoKKyAqICBCYXNlZCBvbiBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIGJ5IERhdmUgSm9uZXMuIFRoYW5rcyEKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqICBCSUcgRkFUIERJU0NMQUlNRVI6IFdvcmsgaW4gcHJvZ3Jlc3MgY29kZS4gUG9zc2libHkgKmRhbmdlcm91cyoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL3RzYy5oPgorI2luY2x1ZGUgPGFzbS90aW1leC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorCisjZGVmaW5lIEVQU19CUkFORF9DN00JMAorI2RlZmluZSBFUFNfQlJBTkRfQzcJMQorI2RlZmluZSBFUFNfQlJBTkRfRURFTgkyCisjZGVmaW5lIEVQU19CUkFORF9DMwkzCisKK3N0cnVjdCBlcHNfY3B1X2RhdGEgeworCXUzMiBmc2I7CisJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIGZyZXFfdGFibGVbXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXBzX2NwdV9kYXRhICplcHNfY3B1W05SX0NQVVNdOworCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXBzX2dldCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBlcHNfY3B1X2RhdGEgKmNlbnRhdXI7CisJdTMyIGxvLCBoaTsKKworCWlmIChjcHUpCisJCXJldHVybiAwOworCWNlbnRhdXIgPSBlcHNfY3B1W2NwdV07CisJaWYgKGNlbnRhdXIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBSZXR1cm4gY3VycmVudCBmcmVxdWVuY3kgKi8KKwlyZG1zcihNU1JfSUEzMl9QRVJGX1NUQVRVUywgbG8sIGhpKTsKKwlyZXR1cm4gY2VudGF1ci0+ZnNiICogKChsbyA+PiA4KSAmIDB4ZmYpOworfQorCitzdGF0aWMgaW50IGVwc19zZXRfc3RhdGUoc3RydWN0IGVwc19jcHVfZGF0YSAqY2VudGF1ciwKKwkJCSB1bnNpZ25lZCBpbnQgY3B1LAorCQkJIHUzMiBkZXN0X3N0YXRlKQoreworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOworCXUzMiBsbywgaGk7CisJaW50IGVyciA9IDA7CisJaW50IGk7CisKKwlmcmVxcy5vbGQgPSBlcHNfZ2V0KGNwdSk7CisJZnJlcXMubmV3ID0gY2VudGF1ci0+ZnNiICogKChkZXN0X3N0YXRlID4+IDgpICYgMHhmZik7CisJZnJlcXMuY3B1ID0gY3B1OworCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CisKKwkvKiBXYWl0IHdoaWxlIENQVSBpcyBidXN5ICovCisJcmRtc3IoTVNSX0lBMzJfUEVSRl9TVEFUVVMsIGxvLCBoaSk7CisJaSA9IDA7CisJd2hpbGUgKGxvICYgKCgxIDw8IDE2KSB8ICgxIDw8IDE3KSkpIHsKKwkJdWRlbGF5KDE2KTsKKwkJcmRtc3IoTVNSX0lBMzJfUEVSRl9TVEFUVVMsIGxvLCBoaSk7CisJCWkrKzsKKwkJaWYgKHVubGlrZWx5KGkgPiA2NCkpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIHBvc3RjaGFuZ2U7CisJCX0KKwl9CisJLyogU2V0IG5ldyBtdWx0aXBsaWVyIGFuZCB2b2x0YWdlICovCisJd3Jtc3IoTVNSX0lBMzJfUEVSRl9DVEwsIGRlc3Rfc3RhdGUgJiAweGZmZmYsIDApOworCS8qIFdhaXQgdW50aWwgdHJhbnNpdGlvbiBlbmQgKi8KKwlpID0gMDsKKwlkbyB7CisJCXVkZWxheSgxNik7CisJCXJkbXNyKE1TUl9JQTMyX1BFUkZfU1RBVFVTLCBsbywgaGkpOworCQlpKys7CisJCWlmICh1bmxpa2VseShpID4gNjQpKSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBwb3N0Y2hhbmdlOworCQl9CisJfSB3aGlsZSAobG8gJiAoKDEgPDwgMTYpIHwgKDEgPDwgMTcpKSk7CisKKwkvKiBSZXR1cm4gY3VycmVudCBmcmVxdWVuY3kgKi8KK3Bvc3RjaGFuZ2U6CisJcmRtc3IoTVNSX0lBMzJfUEVSRl9TVEFUVVMsIGxvLCBoaSk7CisJZnJlcXMubmV3ID0gY2VudGF1ci0+ZnNiICogKChsbyA+PiA4KSAmIDB4ZmYpOworCisJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBlcHNfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJICAgICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCit7CisJc3RydWN0IGVwc19jcHVfZGF0YSAqY2VudGF1cjsKKwl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOworCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKKwl1bnNpZ25lZCBpbnQgZGVzdF9zdGF0ZTsKKwlpbnQgcmV0OworCisJaWYgKHVubGlrZWx5KGVwc19jcHVbY3B1XSA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2VudGF1ciA9IGVwc19jcHVbY3B1XTsKKworCWlmICh1bmxpa2VseShjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LAorCQkJJmVwc19jcHVbY3B1XS0+ZnJlcV90YWJsZVswXSwKKwkJCXRhcmdldF9mcmVxLAorCQkJcmVsYXRpb24sCisJCQkmbmV3c3RhdGUpKSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBNYWtlIGZyZXF1ZW5jeSB0cmFuc2l0aW9uICovCisJZGVzdF9zdGF0ZSA9IGNlbnRhdXItPmZyZXFfdGFibGVbbmV3c3RhdGVdLmluZGV4ICYgMHhmZmZmOworCXJldCA9IGVwc19zZXRfc3RhdGUoY2VudGF1ciwgY3B1LCBkZXN0X3N0YXRlKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgImVwczogVGltZW91dCFcbiIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXBzX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwKKwkJCSZlcHNfY3B1W3BvbGljeS0+Y3B1XS0+ZnJlcV90YWJsZVswXSk7Cit9CisKK3N0YXRpYyBpbnQgZXBzX2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQoreworCXVuc2lnbmVkIGludCBpOworCXUzMiBsbywgaGk7CisJdTY0IHZhbDsKKwl1OCBjdXJyZW50X211bHRpcGxpZXIsIGN1cnJlbnRfdm9sdGFnZTsKKwl1OCBtYXhfbXVsdGlwbGllciwgbWF4X3ZvbHRhZ2U7CisJdTggbWluX211bHRpcGxpZXIsIG1pbl92b2x0YWdlOworCXU4IGJyYW5kOworCXUzMiBmc2I7CisJc3RydWN0IGVwc19jcHVfZGF0YSAqY2VudGF1cjsKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmZfdGFibGU7CisJaW50IGssIHN0ZXAsIHZvbHRhZ2U7CisJaW50IHJldDsKKwlpbnQgc3RhdGVzOworCisJaWYgKHBvbGljeS0+Y3B1ICE9IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogQ2hlY2sgYnJhbmQgKi8KKwlwcmludGsoImVwczogRGV0ZWN0ZWQgVklBICIpOworCXJkbXNyKDB4MTE1MywgbG8sIGhpKTsKKwlicmFuZCA9ICgoKGxvID4+IDIpIF4gbG8pID4+IDE4KSAmIDM7CisJc3dpdGNoKGJyYW5kKSB7CisJY2FzZSBFUFNfQlJBTkRfQzdNOgorCQlwcmludGsoIkM3LU1cbiIpOworCQlicmVhazsKKwljYXNlIEVQU19CUkFORF9DNzoKKwkJcHJpbnRrKCJDN1xuIik7CisJCWJyZWFrOworCWNhc2UgRVBTX0JSQU5EX0VERU46CisJCXByaW50aygiRWRlblxuIik7CisJCWJyZWFrOworCWNhc2UgRVBTX0JSQU5EX0MzOgorCQlwcmludGsoIkMzXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOworCX0KKwkvKiBFbmFibGUgRW5oYW5jZWQgUG93ZXJTYXZlciAqLworCXJkbXNybChNU1JfSUEzMl9NSVNDX0VOQUJMRSwgdmFsKTsKKwlpZiAoISh2YWwgJiAxIDw8IDE2KSkgeworCQl2YWwgfD0gMSA8PCAxNjsKKwkJd3Jtc3JsKE1TUl9JQTMyX01JU0NfRU5BQkxFLCB2YWwpOworCQkvKiBDYW4gYmUgbG9ja2VkIGF0IDAgKi8KKwkJcmRtc3JsKE1TUl9JQTMyX01JU0NfRU5BQkxFLCB2YWwpOworCQlpZiAoISh2YWwgJiAxIDw8IDE2KSkgeworCQkJcHJpbnRrKCJlcHM6IENhbid0IGVuYWJsZSBFbmhhbmNlZCBQb3dlclNhdmVyXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisJLyogUHJpbnQgdm9sdGFnZSBhbmQgbXVsdGlwbGllciAqLworCXJkbXNyKE1TUl9JQTMyX1BFUkZfU1RBVFVTLCBsbywgaGkpOworCWN1cnJlbnRfdm9sdGFnZSA9IGxvICYgMHhmZjsKKwlwcmludGsoImVwczogQ3VycmVudCB2b2x0YWdlID0gJWRtVlxuIiwgY3VycmVudF92b2x0YWdlICogMTYgKyA3MDApOworCWN1cnJlbnRfbXVsdGlwbGllciA9IChsbyA+PiA4KSAmIDB4ZmY7CisJcHJpbnRrKCJlcHM6IEN1cnJlbnQgbXVsdGlwbGllciA9ICVkXG4iLCBjdXJyZW50X211bHRpcGxpZXIpOworCisJLyogUHJpbnQgbGltaXRzICovCisJbWF4X3ZvbHRhZ2UgPSBoaSAmIDB4ZmY7CisJcHJpbnRrKCJlcHM6IEhpZ2hlc3Qgdm9sdGFnZSA9ICVkbVZcbiIsIG1heF92b2x0YWdlICogMTYgKyA3MDApOworCW1heF9tdWx0aXBsaWVyID0gKGhpID4+IDgpICYgMHhmZjsKKwlwcmludGsoImVwczogSGlnaGVzdCBtdWx0aXBsaWVyID0gJWRcbiIsIG1heF9tdWx0aXBsaWVyKTsKKwltaW5fdm9sdGFnZSA9IChoaSA+PiAxNikgJiAweGZmOworCXByaW50aygiZXBzOiBMb3dlc3Qgdm9sdGFnZSA9ICVkbVZcbiIsIG1pbl92b2x0YWdlICogMTYgKyA3MDApOworCW1pbl9tdWx0aXBsaWVyID0gKGhpID4+IDI0KSAmIDB4ZmY7CisJcHJpbnRrKCJlcHM6IExvd2VzdCBtdWx0aXBsaWVyID0gJWRcbiIsIG1pbl9tdWx0aXBsaWVyKTsKKworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlpZiAoY3VycmVudF9tdWx0aXBsaWVyID09IDAgfHwgbWF4X211bHRpcGxpZXIgPT0gMAorCSAgICB8fCBtaW5fbXVsdGlwbGllciA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY3VycmVudF9tdWx0aXBsaWVyID4gbWF4X211bHRpcGxpZXIKKwkgICAgfHwgbWF4X211bHRpcGxpZXIgPD0gbWluX211bHRpcGxpZXIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjdXJyZW50X3ZvbHRhZ2UgPiAweDFjIHx8IG1heF92b2x0YWdlID4gMHgxYykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG1heF92b2x0YWdlIDwgbWluX3ZvbHRhZ2UpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2FsYyBGU0Igc3BlZWQgKi8KKwlmc2IgPSBjcHVfa2h6IC8gY3VycmVudF9tdWx0aXBsaWVyOworCS8qIENhbGMgbnVtYmVyIG9mIHAtc3RhdGVzIHN1cHBvcnRlZCAqLworCWlmIChicmFuZCA9PSBFUFNfQlJBTkRfQzdNKQorCQlzdGF0ZXMgPSBtYXhfbXVsdGlwbGllciAtIG1pbl9tdWx0aXBsaWVyICsgMTsKKwllbHNlCisJCXN0YXRlcyA9IDI7CisKKwkvKiBBbGxvY2F0ZSBwcml2YXRlIGRhdGEgYW5kIGZyZXF1ZW5jeSB0YWJsZSBmb3IgY3VycmVudCBjcHUgKi8KKwljZW50YXVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVwc19jcHVfZGF0YSkKKwkJICAgICsgKHN0YXRlcyArIDEpICogc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSksCisJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWNlbnRhdXIpCisJCXJldHVybiAtRU5PTUVNOworCWVwc19jcHVbMF0gPSBjZW50YXVyOworCisJLyogQ29weSBiYXNpYyB2YWx1ZXMgKi8KKwljZW50YXVyLT5mc2IgPSBmc2I7CisKKwkvKiBGaWxsIGZyZXF1ZW5jeSBhbmQgTVNSIHZhbHVlIHRhYmxlICovCisJZl90YWJsZSA9ICZjZW50YXVyLT5mcmVxX3RhYmxlWzBdOworCWlmIChicmFuZCAhPSBFUFNfQlJBTkRfQzdNKSB7CisJCWZfdGFibGVbMF0uZnJlcXVlbmN5ID0gZnNiICogbWluX211bHRpcGxpZXI7CisJCWZfdGFibGVbMF0uaW5kZXggPSAobWluX211bHRpcGxpZXIgPDwgOCkgfCBtaW5fdm9sdGFnZTsKKwkJZl90YWJsZVsxXS5mcmVxdWVuY3kgPSBmc2IgKiBtYXhfbXVsdGlwbGllcjsKKwkJZl90YWJsZVsxXS5pbmRleCA9IChtYXhfbXVsdGlwbGllciA8PCA4KSB8IG1heF92b2x0YWdlOworCQlmX3RhYmxlWzJdLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOworCX0gZWxzZSB7CisJCWsgPSAwOworCQlzdGVwID0gKChtYXhfdm9sdGFnZSAtIG1pbl92b2x0YWdlKSAqIDI1NikKKwkJCS8gKG1heF9tdWx0aXBsaWVyIC0gbWluX211bHRpcGxpZXIpOworCQlmb3IgKGkgPSBtaW5fbXVsdGlwbGllcjsgaSA8PSBtYXhfbXVsdGlwbGllcjsgaSsrKSB7CisJCQl2b2x0YWdlID0gKGsgKiBzdGVwKSAvIDI1NiArIG1pbl92b2x0YWdlOworCQkJZl90YWJsZVtrXS5mcmVxdWVuY3kgPSBmc2IgKiBpOworCQkJZl90YWJsZVtrXS5pbmRleCA9IChpIDw8IDgpIHwgdm9sdGFnZTsKKwkJCWsrKzsKKwkJfQorCQlmX3RhYmxlW2tdLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOworCX0KKworCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDE0MDAwMDsgLyogODQ0bVYgLT4gNzAwbVYgaW4gbnMgKi8KKwlwb2xpY3ktPmN1ciA9IGZzYiAqIGN1cnJlbnRfbXVsdGlwbGllcjsKKworCXJldCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCAmY2VudGF1ci0+ZnJlcV90YWJsZVswXSk7CisJaWYgKHJldCkgeworCQlrZnJlZShjZW50YXVyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cigmY2VudGF1ci0+ZnJlcV90YWJsZVswXSwgcG9saWN5LT5jcHUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVwc19jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7CisJc3RydWN0IGVwc19jcHVfZGF0YSAqY2VudGF1cjsKKwl1MzIgbG8sIGhpOworCisJaWYgKGVwc19jcHVbY3B1XSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwljZW50YXVyID0gZXBzX2NwdVtjcHVdOworCisJLyogR2V0IG1heCBmcmVxdWVuY3kgKi8KKwlyZG1zcihNU1JfSUEzMl9QRVJGX1NUQVRVUywgbG8sIGhpKTsKKwkvKiBTZXQgbWF4IGZyZXF1ZW5jeSAqLworCWVwc19zZXRfc3RhdGUoY2VudGF1ciwgY3B1LCBoaSAmIDB4ZmZmZik7CisJLyogQnllICovCisJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIocG9saWN5LT5jcHUpOworCWtmcmVlKGVwc19jcHVbY3B1XSk7CisJZXBzX2NwdVtjcHVdID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIGVwc19hdHRyW10gPSB7CisJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIGVwc19kcml2ZXIgPSB7CisJLnZlcmlmeQkJPSBlcHNfdmVyaWZ5LAorCS50YXJnZXQJCT0gZXBzX3RhcmdldCwKKwkuaW5pdAkJPSBlcHNfY3B1X2luaXQsCisJLmV4aXQJCT0gZXBzX2NwdV9leGl0LAorCS5nZXQJCT0gZXBzX2dldCwKKwkubmFtZQkJPSAiZV9wb3dlcnNhdmVyIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmF0dHIJCT0gZXBzX2F0dHIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlcHNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhOworCisJLyogVGhpcyBkcml2ZXIgd2lsbCB3b3JrIG9ubHkgb24gQ2VudGF1ciBDNyBwcm9jZXNzb3JzIHdpdGgKKwkgKiBFbmhhbmNlZCBTcGVlZFN0ZXAvUG93ZXJTYXZlciByZWdpc3RlcnMgKi8KKwlpZiAoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0NFTlRBVVIKKwkgICAgfHwgYy0+eDg2ICE9IDYgfHwgYy0+eDg2X21vZGVsICE9IDEwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfRVNUKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmVwc19kcml2ZXIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVwc19leGl0KHZvaWQpCit7CisJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmZXBzX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIlJhZmGzIEJpbHNraSA8cmFmYWxiaWxza2lAaW50ZXJpYS5wbD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRW5oYW5jZWQgUG93ZXJTYXZlciBkcml2ZXIgZm9yIFZJQSBDNyBDUFUncy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoZXBzX2luaXQpOworbW9kdWxlX2V4aXQoZXBzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IGEzZGI5MzMuLmI1OTg3OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTgsMTIgKzgsMTEgQEAKICAqICBWSUEgaGF2ZSBjdXJyZW50bHkgMyBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgTG9uZ2hhdWwuCiAgKiAgVmVyc2lvbiAxIChMb25naGF1bCkgdXNlcyB0aGUgQkNSMiBNU1IgYXQgMHgxMTQ3LgogICogICBJdCBpcyBwcmVzZW50IG9ubHkgaW4gU2FtdWVsIDEgKEM1QSksIFNhbXVlbCAyIChDNUIpIHN0ZXBwaW5nIDAuCi0gKiAgVmVyc2lvbiAyIG9mIGxvbmdoYXVsIGlzIHRoZSBzYW1lIGFzIHYxLCBidXQgYWRkcyB2b2x0YWdlIHNjYWxpbmcuCi0gKiAgIFByZXNlbnQgaW4gU2FtdWVsIDIgKHN0ZXBwaW5ncyAxLTcgb25seSkgKEM1QiksIGFuZCBFenJhIChDNUMpCi0gKiAgIHZvbHRhZ2Ugc2NhbGluZyBzdXBwb3J0IGhhcyBjdXJyZW50bHkgYmVlbiBkaXNhYmxlZCBpbiB0aGlzIGRyaXZlcgotICogICB1bnRpbCB3ZSBoYXZlIGNvZGUgdGhhdCBnZXRzIGl0IHJpZ2h0LgorICogIFZlcnNpb24gMiBvZiBsb25naGF1bCBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdjEsIGJ1dCBhZGRzCisgKiAgIExPTkdIQVVMIE1TUiBmb3IgcHVycG9zZSBvZiBib3RoIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSBzY2FsaW5nLgorICogICBQcmVzZW50IGluIFNhbXVlbCAyIChzdGVwcGluZ3MgMS03IG9ubHkpIChDNUIpLCBhbmQgRXpyYSAoQzVDKS4KICAqICBWZXJzaW9uIDMgb2YgbG9uZ2hhdWwgZ290IHJlbmFtZWQgdG8gUG93ZXJzYXZlciBhbmQgcmVkZXNpZ25lZAotICogICB0byB1c2UgdGhlIFBPV0VSU0FWRVIgTVNSIGF0IDB4MTEwYS4KKyAqICAgdG8gdXNlIG9ubHkgdGhlIFBPV0VSU0FWRVIgTVNSIGF0IDB4MTEwYS4KICAqICAgSXQgaXMgcHJlc2VudCBpbiBFenJhLVQgKEM1TSksIE5laGVtaWFoIChDNVgpIGFuZCBhYm92ZS4KICAqICAgSXQncyBwcmV0dHkgbXVjaCB0aGUgc2FtZSBmZWF0dXJlIHdpc2UgdG8gbG9uZ2hhdWwgdjIsIHRob3VnaAogICogICB0aGVyZSBpcyBwcm92aXNpb24gZm9yIHNjYWxpbmcgRlNCIHRvbywgYnV0IHRoaXMgZG9lc24ndCB3b3JrCkBAIC01MSwxMCArNTAsMTIgQEAKICNkZWZpbmUJQ1BVX0VaUkEJMwogI2RlZmluZQlDUFVfRVpSQV9UCTQKICNkZWZpbmUJQ1BVX05FSEVNSUFICTUKKyNkZWZpbmUJQ1BVX05FSEVNSUFIX0MJNgogCiAvKiBGbGFncyAqLwogI2RlZmluZSBVU0VfQUNQSV9DMwkJKDEgPDwgMSkKICNkZWZpbmUgVVNFX05PUlRIQlJJREdFCQkoMSA8PCAyKQorI2RlZmluZSBVU0VfVlQ4MjM1CQkoMSA8PCAzKQogCiBzdGF0aWMgaW50IGNwdV9tb2RlbDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtc2NhbGVzPTE2OwpAQCAtNjMsNyArNjQsOCBAQAogc3RhdGljIHN0cnVjdCBtVl9wb3MgKnZybV9tVl90YWJsZTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICptVl92cm1fdGFibGU7CiBzdHJ1Y3QgZl9tc3IgewotCXVuc2lnbmVkIGNoYXIgdnJtOworCXU4IHZybTsKKwl1OCBwb3M7CiB9Owogc3RhdGljIHN0cnVjdCBmX21zciBmX21zcl90YWJsZVszMl07CiAKQEAgLTczLDEwICs3NSwxMCBAQAogc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBOVUxMOwogc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3ggPSBOVUxMOwogc3RhdGljIHU4IGxvbmdoYXVsX2ZsYWdzOworc3RhdGljIHU4IGxvbmdoYXVsX3BvczsKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIHN0YXRpYyBpbnQgc2NhbGVfdm9sdGFnZTsKLXN0YXRpYyBpbnQgaWdub3JlX2xhdGVuY3k7CiAKICNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAibG9uZ2hhdWwiLCBtc2cpCiAKQEAgLTE2NCwyNiArMTY2LDQ3IEBACiBzdGF0aWMgdm9pZCBkb19wb3dlcnNhdmVyKGludCBjeF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgY2xvY2tfcmF0aW9faW5kZXgpCiB7CiAJdW5pb24gbXNyX2xvbmdoYXVsIGxvbmdoYXVsOworCXU4IGRlc3RfcG9zOwogCXUzMiB0OwogCisJZGVzdF9wb3MgPSBmX21zcl90YWJsZVtjbG9ja19yYXRpb19pbmRleF0ucG9zOworCiAJcmRtc3JsKE1TUl9WSUFfTE9OR0hBVUwsIGxvbmdoYXVsLnZhbCk7CisJLyogU2V0dXAgbmV3IGZyZXF1ZW5jeSAqLwogCWxvbmdoYXVsLmJpdHMuUmV2aXNpb25LZXkgPSBsb25naGF1bC5iaXRzLlJldmlzaW9uSUQ7CiAJbG9uZ2hhdWwuYml0cy5Tb2Z0QnVzUmF0aW8gPSBjbG9ja19yYXRpb19pbmRleCAmIDB4ZjsKIAlsb25naGF1bC5iaXRzLlNvZnRCdXNSYXRpbzQgPSAoY2xvY2tfcmF0aW9faW5kZXggJiAweDEwKSA+PiA0OwotCWxvbmdoYXVsLmJpdHMuRW5hYmxlU29mdEJ1c1JhdGlvID0gMTsKLQotCWlmIChjYW5fc2NhbGVfdm9sdGFnZSkgeworCS8qIFNldHVwIG5ldyB2b2x0YWdlICovCisJaWYgKGNhbl9zY2FsZV92b2x0YWdlKQogCQlsb25naGF1bC5iaXRzLlNvZnRWSUQgPSBmX21zcl90YWJsZVtjbG9ja19yYXRpb19pbmRleF0udnJtOwotCQlsb25naGF1bC5iaXRzLkVuYWJsZVNvZnRWSUQgPSAxOwotCX0KLQogCS8qIFN5bmMgdG8gdGltZXIgdGljayAqLwogCXNhZmVfaGFsdCgpOworCS8qIFJhaXNlIHZvbHRhZ2UgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGNhbl9zY2FsZV92b2x0YWdlICYmIGxvbmdoYXVsX3BvcyA8IGRlc3RfcG9zKSB7CisJCWxvbmdoYXVsLmJpdHMuRW5hYmxlU29mdFZJRCA9IDE7CisJCXdybXNybChNU1JfVklBX0xPTkdIQVVMLCBsb25naGF1bC52YWwpOworCQkvKiBDaGFuZ2Ugdm9sdGFnZSAqLworCQlpZiAoIWN4X2FkZHJlc3MpIHsKKwkJCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CisJCQloYWx0KCk7CisJCX0gZWxzZSB7CisJCQlBQ1BJX0ZMVVNIX0NQVV9DQUNIRSgpOworCQkJLyogSW52b2tlIEMzICovCisJCQlpbmIoY3hfYWRkcmVzcyk7CisJCQkvKiBEdW1teSBvcCAtIG11c3QgZG8gc29tZXRoaW5nIHVzZWxlc3MgYWZ0ZXIgUF9MVkwzCisJCQkgKiByZWFkICovCisJCQl0ID0gaW5sKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3MpOworCQl9CisJCWxvbmdoYXVsLmJpdHMuRW5hYmxlU29mdFZJRCA9IDA7CisJCXdybXNybChNU1JfVklBX0xPTkdIQVVMLCBsb25naGF1bC52YWwpOworCQlsb25naGF1bF9wb3MgPSBkZXN0X3BvczsKKwl9CisKIAkvKiBDaGFuZ2UgZnJlcXVlbmN5IG9uIG5leHQgaGFsdCBvciBzbGVlcCAqLworCWxvbmdoYXVsLmJpdHMuRW5hYmxlU29mdEJ1c1JhdGlvID0gMTsKIAl3cm1zcmwoTVNSX1ZJQV9MT05HSEFVTCwgbG9uZ2hhdWwudmFsKTsKIAlpZiAoIWN4X2FkZHJlc3MpIHsKIAkJQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKTsKLQkJLyogSW52b2tlIEMxICovCiAJCWhhbHQoKTsKIAl9IGVsc2UgewogCQlBQ1BJX0ZMVVNIX0NQVV9DQUNIRSgpOwpAQCAtMTkzLDEyICsyMTYsMjkgQEAKIAkJdCA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKIAl9CiAJLyogRGlzYWJsZSBidXMgcmF0aW8gYml0ICovCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlsb25naGF1bC5iaXRzLlJldmlzaW9uS2V5ID0gbG9uZ2hhdWwuYml0cy5SZXZpc2lvbklEOwogCWxvbmdoYXVsLmJpdHMuRW5hYmxlU29mdEJ1c1JhdGlvID0gMDsKLQlsb25naGF1bC5iaXRzLkVuYWJsZVNvZnRCU0VMID0gMDsKLQlsb25naGF1bC5iaXRzLkVuYWJsZVNvZnRWSUQgPSAwOwogCXdybXNybChNU1JfVklBX0xPTkdIQVVMLCBsb25naGF1bC52YWwpOworCisJLyogUmVkdWNlIHZvbHRhZ2UgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGNhbl9zY2FsZV92b2x0YWdlICYmIGxvbmdoYXVsX3BvcyA+IGRlc3RfcG9zKSB7CisJCWxvbmdoYXVsLmJpdHMuRW5hYmxlU29mdFZJRCA9IDE7CisJCXdybXNybChNU1JfVklBX0xPTkdIQVVMLCBsb25naGF1bC52YWwpOworCQkvKiBDaGFuZ2Ugdm9sdGFnZSAqLworCQlpZiAoIWN4X2FkZHJlc3MpIHsKKwkJCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CisJCQloYWx0KCk7CisJCX0gZWxzZSB7CisJCQlBQ1BJX0ZMVVNIX0NQVV9DQUNIRSgpOworCQkJLyogSW52b2tlIEMzICovCisJCQlpbmIoY3hfYWRkcmVzcyk7CisJCQkvKiBEdW1teSBvcCAtIG11c3QgZG8gc29tZXRoaW5nIHVzZWxlc3MgYWZ0ZXIgUF9MVkwzCisJCQkgKiByZWFkICovCisJCQl0ID0gaW5sKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3MpOworCQl9CisJCWxvbmdoYXVsLmJpdHMuRW5hYmxlU29mdFZJRCA9IDA7CisJCXdybXNybChNU1JfVklBX0xPTkdIQVVMLCBsb25naGF1bC52YWwpOworCQlsb25naGF1bF9wb3MgPSBkZXN0X3BvczsKKwl9CiB9CiAKIC8qKgpAQCAtMjU3LDI2ICsyOTcsMTkgQEAKIAkvKgogCSAqIExvbmdoYXVsIHYxLiAoU2FtdWVsW0M1QV0gYW5kIFNhbXVlbDIgc3RlcHBpbmcgMFtDNUJdKQogCSAqIFNvZnR3YXJlIGNvbnRyb2xsZWQgbXVsdGlwbGllcnMgb25seS4KLQkgKgotCSAqICpOQiogVW50aWwgd2UgZ2V0IHZvbHRhZ2Ugc2NhbGluZyB3b3JraW5nIHYxICYgdjIgYXJlIHRoZSBzYW1lIGNvZGUuCi0JICogTG9uZ2hhdWwgdjIgYXBwZWFycyBpbiBTYW11ZWwyIFN0ZXBwaW5ncyAxLT43IFtDNWJdIGFuZCBFenJhIFtDNUNdCiAJICovCiAJY2FzZSBUWVBFX0xPTkdIQVVMX1YxOgotCWNhc2UgVFlQRV9MT05HSEFVTF9WMjoKIAkJZG9fbG9uZ2hhdWwxKGNsb2NrX3JhdGlvX2luZGV4KTsKIAkJYnJlYWs7CiAKIAkvKgorCSAqIExvbmdoYXVsIHYyIGFwcGVhcnMgaW4gU2FtdWVsMiBTdGVwcGluZ3MgMS0+NyBbQzVCXSBhbmQgRXpyYSBbQzVDXQorCSAqCiAJICogTG9uZ2hhdWwgdjMgKGFrYSBQb3dlcnNhdmVyKS4gKEV6cmEtVCBbQzVNXSAmIE5laGVtaWFoIFtDNU5dKQotCSAqIFdlIGNhbiBzY2FsZSB2b2x0YWdlIHdpdGggdGhpcyB0b28sIGJ1dCB0aGF0J3MgY3VycmVudGx5Ci0JICogZGlzYWJsZWQgdW50aWwgd2UgY29tZSB1cCB3aXRoIGEgZGVjZW50ICdtYXRjaCBmcmVxIHRvIHZvbHRhZ2UnCi0JICogYWxnb3JpdGhtLgotCSAqIFdoZW4gd2UgYWRkIHZvbHRhZ2Ugc2NhbGluZywgd2Ugd2lsbCBhbHNvIG5lZWQgdG8gZG8gdGhlCi0JICogdm9sdGFnZS9mcmVxIHNldHRpbmcgaW4gb3JkZXIgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24KLQkgKiBvZiBzY2FsaW5nIChsaWtlIHdlIGRvIGluIHBvd2Vybm93LWs3LmMpCiAJICogTmVoZW1pYWggY2FuIGRvIEZTQiBzY2FsaW5nIHRvbywgYnV0IHRoaXMgaGFzIG5ldmVyIGJlZW4gcHJvdmVuCiAJICogdG8gd29yayBpbiBwcmFjdGljZS4KIAkgKi8KKwljYXNlIFRZUEVfTE9OR0hBVUxfVjI6CiAJY2FzZSBUWVBFX1BPV0VSU0FWRVI6CiAJCWlmIChsb25naGF1bF9mbGFncyAmIFVTRV9BQ1BJX0MzKSB7CiAJCQkvKiBEb24ndCBhbGxvdyB3YWtldXAgKi8KQEAgLTMwMSw2ICszMzQsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogCisJZnJlcXMubmV3ID0gY2FsY19zcGVlZChsb25naGF1bF9nZXRfY3B1X211bHQoKSk7CiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiB9CiAKQEAgLTMxNSwzMSArMzQ5LDE5IEBACiAKICNkZWZpbmUgUk9VTkRJTkcJMHhmCiAKLXN0YXRpYyBpbnQgX2d1ZXNzKGludCBndWVzcywgaW50IG11bHQpCi17Ci0JaW50IHRhcmdldDsKLQotCXRhcmdldCA9ICgobXVsdC8xMCkqZ3Vlc3MpOwotCWlmIChtdWx0JTEwICE9IDApCi0JCXRhcmdldCArPSAoZ3Vlc3MvMik7Ci0JdGFyZ2V0ICs9IFJPVU5ESU5HLzI7Ci0JdGFyZ2V0ICY9IH5ST1VORElORzsKLQlyZXR1cm4gdGFyZ2V0OwotfQotCi0KIHN0YXRpYyBpbnQgZ3Vlc3NfZnNiKGludCBtdWx0KQogewotCWludCBzcGVlZCA9IChjcHVfa2h6LzEwMDApOworCWludCBzcGVlZCA9IGNwdV9raHogLyAxMDAwOwogCWludCBpOwotCWludCBzcGVlZHNbXSA9IHsgNjYsIDEwMCwgMTMzLCAyMDAgfTsKKwlpbnQgc3BlZWRzW10gPSB7IDY2NiwgMTAwMCwgMTMzMywgMjAwMCB9OworCWludCBmX21heCwgZl9taW47CiAKLQlzcGVlZCArPSBST1VORElORy8yOwotCXNwZWVkICY9IH5ST1VORElORzsKLQotCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQlpZiAoX2d1ZXNzKHNwZWVkc1tpXSwgbXVsdCkgPT0gc3BlZWQpCi0JCQlyZXR1cm4gc3BlZWRzW2ldOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJZl9tYXggPSAoKHNwZWVkc1tpXSAqIG11bHQpICsgNTApIC8gMTAwOworCQlmX21heCArPSAoUk9VTkRJTkcgLyAyKTsKKwkJZl9taW4gPSBmX21heCAtIFJPVU5ESU5HOworCQlpZiAoKHNwZWVkIDw9IGZfbWF4KSAmJiAoc3BlZWQgPj0gZl9taW4pKQorCQkJcmV0dXJuIHNwZWVkc1tpXSAvIDEwOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTM0Nyw2NyArMzY5LDQwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGxvbmdoYXVsX2dldF9yYW5nZXModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGludmFsdWU7Ci0JdW5zaWduZWQgaW50IGV6cmFfdF9tdWx0aXBsaWVyc1szMl09IHsKLQkJCTkwLCAgMzAsICA0MCwgMTAwLCAgNTUsICAzNSwgIDQ1LCAgOTUsCi0JCQk1MCwgIDcwLCAgODAsICA2MCwgMTIwLCAgNzUsICA4NSwgIDY1LAotCQkJLTEsIDExMCwgMTIwLCAgLTEsIDEzNSwgMTE1LCAxMjUsIDEwNSwKLQkJCTEzMCwgMTUwLCAxNjAsIDE0MCwgIC0xLCAxNTUsICAtMSwgMTQ1IH07CiAJdW5zaWduZWQgaW50IGosIGsgPSAwOwotCXVuaW9uIG1zcl9sb25naGF1bCBsb25naGF1bDsKLQlpbnQgbXVsdCA9IDA7CisJaW50IG11bHQ7CiAKLQlzd2l0Y2ggKGxvbmdoYXVsX3ZlcnNpb24pIHsKLQljYXNlIFRZUEVfTE9OR0hBVUxfVjE6Ci0JY2FzZSBUWVBFX0xPTkdIQVVMX1YyOgotCQkvKiBVZ2gsIExvbmdoYXVsIHYxIGRpZG4ndCBoYXZlIHRoZSBtaW4vbWF4IE1TUnMuCi0JCSAgIEFzc3VtZSBtaW49My4weCAmIG1heCA9IHdoYXRldmVyIHdlIGJvb3RlZCBhdC4gKi8KLQkJbWlubXVsdCA9IDMwOwotCQltYXhtdWx0ID0gbXVsdCA9IGxvbmdoYXVsX2dldF9jcHVfbXVsdCgpOwotCQlicmVhazsKLQotCWNhc2UgVFlQRV9QT1dFUlNBVkVSOgotCQkvKiBFenJhLVQgKi8KLQkJaWYgKGNwdV9tb2RlbD09Q1BVX0VaUkFfVCkgewotCQkJbWlubXVsdCA9IDMwOwotCQkJcmRtc3JsIChNU1JfVklBX0xPTkdIQVVMLCBsb25naGF1bC52YWwpOwotCQkJaW52YWx1ZSA9IGxvbmdoYXVsLmJpdHMuTWF4TUh6QlI7Ci0JCQlpZiAobG9uZ2hhdWwuYml0cy5NYXhNSHpCUjQpCi0JCQkJaW52YWx1ZSArPSAxNjsKLQkJCW1heG11bHQgPSBtdWx0ID0gZXpyYV90X211bHRpcGxpZXJzW2ludmFsdWVdOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBOZWhlbWlhaCAqLwotCQlpZiAoY3B1X21vZGVsPT1DUFVfTkVIRU1JQUgpIHsKLQkJCXJkbXNybCAoTVNSX1ZJQV9MT05HSEFVTCwgbG9uZ2hhdWwudmFsKTsKLQotCQkJLyoKLQkJCSAqIFRPRE86IFRoaXMgY29kZSB3b3JrcywgYnV0IHJhaXNlcyBhIGxvdCBvZiBxdWVzdGlvbnMuCi0JCQkgKiAtIFNvbWUgTmVoZW1pYWgncyBzZWVtIHRvIGhhdmUgYnJva2VuIE1pbi9NYXhNSHpCUidzLgotCQkJICogICBXZSBnZXQgYXJvdW5kIHRoaXMgYnkgdXNpbmcgYSBoYXJkY29kZWQgbXVsdGlwbGllciBvZiA0LjB4Ci0JCQkgKiAgIGZvciB0aGUgbWluaW1pbXVtIHNwZWVkLCBhbmQgdGhlIHNwZWVkIHdlIGJvb3RlZCB1cCBhdCBmb3IgdGhlIG1heC4KLQkJCSAqICAgVGhpcyBpcyBkb25lIGluIGxvbmdoYXVsX2dldF9jcHVfbXVsdCgpIGJ5IHJlYWRpbmcgdGhlIEVCTENSIHJlZ2lzdGVyLgotCQkJICogLSBBY2NvcmRpbmcgdG8gc29tZSBWSUEgZG9jdW1lbnRhdGlvbiBFQkxDUiBpcyBvbmx5Ci0JCQkgKiAgIGluIHByZS1OZWhlbWlhaCBDM3MuIEhvdyB0aGlzIHN0aWxsIHdvcmtzIGlzIGEgbXlzdGVyeS4KLQkJCSAqICAgV2UncmUgcG9zc2libHkgdXNpbmcgc29tZXRoaW5nIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCi0JCQkgKiAgIEJ1dCBpdCB3b3Jrcywgc28gd2UgZG9uJ3QgZ3J1bWJsZS4KLQkJCSAqLwotCQkJbWlubXVsdD00MDsKLQkJCW1heG11bHQgPSBtdWx0ID0gbG9uZ2hhdWxfZ2V0X2NwdV9tdWx0KCk7Ci0JCQlicmVhazsKLQkJfQorCS8qIEdldCBjdXJyZW50IGZyZXF1ZW5jeSAqLworCW11bHQgPSBsb25naGF1bF9nZXRfY3B1X211bHQoKTsKKwlpZiAobXVsdCA9PSAtMSkgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSW52YWxpZCAocmVzZXJ2ZWQpIG11bHRpcGxpZXIhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWZzYiA9IGd1ZXNzX2ZzYihtdWx0KTsKKwlpZiAoZnNiID09IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkludmFsaWQgKHJlc2VydmVkKSBGU0IhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIEdldCBtYXggbXVsdGlwbGllciAtIGFzIHdlIGFsd2F5cyBkaWQuCisJICogTG9uZ2hhdWwgTVNSIGlzIHVzZWZ1bGwgb25seSB3aGVuIHZvbHRhZ2Ugc2NhbGluZyBpcyBlbmFibGVkLgorCSAqIEMzIGlzIGJvb3RpbmcgYXQgbWF4IGFueXdheS4gKi8KKwltYXhtdWx0ID0gbXVsdDsKKwkvKiBHZXQgbWluIG11bHRpcGxpZXIgKi8KKwlzd2l0Y2ggKGNwdV9tb2RlbCkgeworCWNhc2UgQ1BVX05FSEVNSUFIOgorCQltaW5tdWx0ID0gNTA7CisJCWJyZWFrOworCWNhc2UgQ1BVX05FSEVNSUFIX0M6CisJCW1pbm11bHQgPSA0MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWlubXVsdCA9IDMwOworCQlicmVhazsKKwl9CiAKIAlkcHJpbnRrICgiTWluTXVsdDolZC4lZHggTWF4TXVsdDolZC4lZHhcbiIsCiAJCSBtaW5tdWx0LzEwLCBtaW5tdWx0JTEwLCBtYXhtdWx0LzEwLCBtYXhtdWx0JTEwKTsKIAotCWlmIChmc2IgPT0gMCkgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIkludmFsaWQgKHJlc2VydmVkKSBGU0IhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaGlnaGVzdF9zcGVlZCA9IGNhbGNfc3BlZWQobWF4bXVsdCk7CiAJbG93ZXN0X3NwZWVkID0gY2FsY19zcGVlZChtaW5tdWx0KTsKIAlkcHJpbnRrICgiRlNCOiVkTUh6ICBMb3dlc3Qgc3BlZWQ6ICVzICAgSGlnaGVzdCBzcGVlZDolc1xuIiwgZnNiLApAQCAtNDU1LDYgKzQ1MCw3IEBACiAJdW5pb24gbXNyX2xvbmdoYXVsIGxvbmdoYXVsOwogCXN0cnVjdCBtVl9wb3MgbWludmlkLCBtYXh2aWQ7CiAJdW5zaWduZWQgaW50IGosIHNwZWVkLCBwb3MsIGtIel9zdGVwLCBudW12c2NhbGVzOworCWludCBtaW5fdmlkX3NwZWVkOwogCiAJcmRtc3JsKE1TUl9WSUFfTE9OR0hBVUwsIGxvbmdoYXVsLnZhbCk7CiAJaWYgKCEobG9uZ2hhdWwuYml0cy5SZXZpc2lvbklEICYgMSkpIHsKQEAgLTQ2OCwxNCArNDY0LDE0IEBACiAJCW1WX3ZybV90YWJsZSA9ICZtVl92cm04NVswXTsKIAl9IGVsc2UgewogCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIk1vYmlsZSBWUk1cbiIpOworCQlpZiAoY3B1X21vZGVsIDwgQ1BVX05FSEVNSUFIKQorCQkJcmV0dXJuOwogCQl2cm1fbVZfdGFibGUgPSAmbW9iaWxldnJtX21WWzBdOwogCQltVl92cm1fdGFibGUgPSAmbVZfbW9iaWxldnJtWzBdOwogCX0KIAogCW1pbnZpZCA9IHZybV9tVl90YWJsZVtsb25naGF1bC5iaXRzLk1pbmltdW1WSURdOwogCW1heHZpZCA9IHZybV9tVl90YWJsZVtsb25naGF1bC5iaXRzLk1heGltdW1WSURdOwotCW51bXZzY2FsZXMgPSBtYXh2aWQucG9zIC0gbWludmlkLnBvcyArIDE7Ci0Ja0h6X3N0ZXAgPSAoaGlnaGVzdF9zcGVlZCAtIGxvd2VzdF9zcGVlZCkgLyBudW12c2NhbGVzOwogCiAJaWYgKG1pbnZpZC5tViA9PSAwIHx8IG1heHZpZC5tViA9PSAwIHx8IG1pbnZpZC5tViA+IG1heHZpZC5tVikgewogCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIkJvZ3VzIHZhbHVlcyBNaW46JWQuJTAzZCBNYXg6JWQuJTAzZC4gIgpAQCAtNDkxLDIwICs0ODcsNTkgQEAKIAkJcmV0dXJuOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJNYXggVklEPSVkLiUwM2QgIE1pbiBWSUQ9JWQuJTAzZCwgJWQgcG9zc2libGUgdm9sdGFnZSBzY2FsZXNcbiIsCisJLyogSG93IG1hbnkgdm9sdGFnZSBzdGVwcyAqLworCW51bXZzY2FsZXMgPSBtYXh2aWQucG9zIC0gbWludmlkLnBvcyArIDE7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJIk1heCBWSUQ9JWQuJTAzZCAgIgorCQkiTWluIFZJRD0lZC4lMDNkLCAiCisJCSIlZCBwb3NzaWJsZSB2b2x0YWdlIHNjYWxlc1xuIiwKIAkJbWF4dmlkLm1WLzEwMDAsIG1heHZpZC5tViUxMDAwLAogCQltaW52aWQubVYvMTAwMCwgbWludmlkLm1WJTEwMDAsCiAJCW51bXZzY2FsZXMpOwogCisJLyogQ2FsY3VsYXRlIG1heCBmcmVxdWVuY3kgYXQgbWluIHZvbHRhZ2UgKi8KKwlqID0gbG9uZ2hhdWwuYml0cy5NaW5NSHpCUjsKKwlpZiAobG9uZ2hhdWwuYml0cy5NaW5NSHpCUjQpCisJCWogKz0gMTY7CisJbWluX3ZpZF9zcGVlZCA9IGVibGNyX3RhYmxlW2pdOworCWlmIChtaW5fdmlkX3NwZWVkID09IC0xKQorCQlyZXR1cm47CisJc3dpdGNoIChsb25naGF1bC5iaXRzLk1pbk1IekZTQikgeworCWNhc2UgMDoKKwkJbWluX3ZpZF9zcGVlZCAqPSAxMzMzMzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltaW5fdmlkX3NwZWVkICo9IDEwMDAwOworCQlicmVhazsKKwljYXNlIDM6CisJCW1pbl92aWRfc3BlZWQgKj0gNjY2NjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCQlicmVhazsKKwl9CisJaWYgKG1pbl92aWRfc3BlZWQgPj0gaGlnaGVzdF9zcGVlZCkKKwkJcmV0dXJuOworCS8qIENhbGN1bGF0ZSBrSHogZm9yIG9uZSB2b2x0YWdlIHN0ZXAgKi8KKwlrSHpfc3RlcCA9IChoaWdoZXN0X3NwZWVkIC0gbWluX3ZpZF9zcGVlZCkgLyBudW12c2NhbGVzOworCisKIAlqID0gMDsKIAl3aGlsZSAobG9uZ2hhdWxfdGFibGVbal0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKSB7CiAJCXNwZWVkID0gbG9uZ2hhdWxfdGFibGVbal0uZnJlcXVlbmN5OwotCQlwb3MgPSAoc3BlZWQgLSBsb3dlc3Rfc3BlZWQpIC8ga0h6X3N0ZXAgKyBtaW52aWQucG9zOworCQlpZiAoc3BlZWQgPiBtaW5fdmlkX3NwZWVkKQorCQkJcG9zID0gKHNwZWVkIC0gbWluX3ZpZF9zcGVlZCkgLyBrSHpfc3RlcCArIG1pbnZpZC5wb3M7CisJCWVsc2UKKwkJCXBvcyA9IG1pbnZpZC5wb3M7CiAJCWZfbXNyX3RhYmxlW2xvbmdoYXVsX3RhYmxlW2pdLmluZGV4XS52cm0gPSBtVl92cm1fdGFibGVbcG9zXTsKKwkJZl9tc3JfdGFibGVbbG9uZ2hhdWxfdGFibGVbal0uaW5kZXhdLnBvcyA9IHBvczsKIAkJaisrOwogCX0KIAorCWxvbmdoYXVsX3BvcyA9IG1heHZpZC5wb3M7CiAJY2FuX3NjYWxlX3ZvbHRhZ2UgPSAxOworCXByaW50ayhLRVJOX0lORk8gUEZYICJWb2x0YWdlIHNjYWxpbmcgZW5hYmxlZC4gIgorCQkiVXNlIG9mIFwiY29uc2VydmF0aXZlXCIgZ292ZXJub3IgaXMgaGlnaGx5IHJlY29tbWVuZGVkLlxuIik7CiB9CiAKIApAQCAtNTczLDIwICs2MDgsNTEgQEAKIAlpZiAoZGV2ICE9IE5VTEwpIHsKIAkJLyogRW5hYmxlIGFjY2VzcyB0byBwb3J0IDB4MjIgKi8KIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCByZWcsICZwY2lfY21kKTsKLQkJaWYgKCAhKHBjaV9jbWQgJiAxPDw3KSApIHsKKwkJaWYgKCEocGNpX2NtZCAmIDE8PDcpKSB7CiAJCQlwY2lfY21kIHw9IDE8PDc7CiAJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCByZWcsIHBjaV9jbWQpOworCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCByZWcsICZwY2lfY21kKTsKKwkJCWlmICghKHBjaV9jbWQgJiAxPDw3KSkgeworCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkJIkNhbid0IGVuYWJsZSBhY2Nlc3MgdG8gcG9ydCAweDIyLlxuIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CiAJCX0KIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGxvbmdoYXVsX3NldHVwX3Z0ODIzNSh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJdTggcGNpX2NtZDsKKworCS8qIEZpbmQgVlQ4MjM1IHNvdXRoYnJpZGdlICovCisJZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MjM1LCBOVUxMKTsKKwlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJLyogU2V0IHRyYW5zaXRpb24gdGltZSB0byBtYXggKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweGVjLCAmcGNpX2NtZCk7CisJCXBjaV9jbWQgJj0gfigxIDw8IDIpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweGVjLCBwY2lfY21kKTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweGU0LCAmcGNpX2NtZCk7CisJCXBjaV9jbWQgJj0gfigxIDw8IDcpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweGU0LCBwY2lfY21kKTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweGU1LCAmcGNpX2NtZCk7CisJCXBjaV9jbWQgfD0gMSA8PCA3OworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweGU1LCBwY2lfY21kKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBsb25naGF1bF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YTsKIAljaGFyICpjcHVuYW1lPU5VTEw7CiAJaW50IHJldDsKKwl1MzIgbG8sIGhpOworCWludCB2dDgyMzVfcHJlc2VudDsKIAogCS8qIENoZWNrIHdoYXQgd2UgaGF2ZSBvbiB0aGlzIG1vdGhlcmJvYXJkICovCiAJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKQEAgLTU5OSwxNiArNjY1LDIwIEBACiAJCWJyZWFrOwogCiAJY2FzZSA3OgotCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9MT05HSEFVTF9WMTsKIAkJc3dpdGNoIChjLT54ODZfbWFzaykgewogCQljYXNlIDA6CisJCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9MT05HSEFVTF9WMTsKIAkJCWNwdV9tb2RlbCA9IENQVV9TQU1VRUwyOwogCQkJY3B1bmFtZSA9ICJDMyAnU2FtdWVsIDInIFtDNUJdIjsKLQkJCS8qIE5vdGUsIHRoaXMgaXMgbm90IGEgdHlwbywgZWFybHkgU2FtdWVsMidzIGhhZCBTYW11ZWwxIHJhdGlvcy4gKi8KLQkJCW1lbWNweSAoY2xvY2tfcmF0aW8sIHNhbXVlbDFfY2xvY2tfcmF0aW8sIHNpemVvZihzYW11ZWwxX2Nsb2NrX3JhdGlvKSk7Ci0JCQltZW1jcHkgKGVibGNyX3RhYmxlLCBzYW11ZWwyX2VibGNyLCBzaXplb2Yoc2FtdWVsMl9lYmxjcikpOworCQkJLyogTm90ZSwgdGhpcyBpcyBub3QgYSB0eXBvLCBlYXJseSBTYW11ZWwyJ3MgaGFkCisJCQkgKiBTYW11ZWwxIHJhdGlvcy4gKi8KKwkJCW1lbWNweShjbG9ja19yYXRpbywgc2FtdWVsMV9jbG9ja19yYXRpbywKKwkJCQlzaXplb2Yoc2FtdWVsMV9jbG9ja19yYXRpbykpOworCQkJbWVtY3B5KGVibGNyX3RhYmxlLCBzYW11ZWwyX2VibGNyLAorCQkJCXNpemVvZihzYW11ZWwyX2VibGNyKSk7CiAJCQlicmVhazsKIAkJY2FzZSAxIC4uLiAxNToKKwkJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YyOwogCQkJaWYgKGMtPng4Nl9tYXNrIDwgOCkgewogCQkJCWNwdV9tb2RlbCA9IENQVV9TQU1VRUwyOwogCQkJCWNwdW5hbWUgPSAiQzMgJ1NhbXVlbCAyJyBbQzVCXSI7CkBAIC02MTYsOCArNjg2LDEwIEBACiAJCQkJY3B1X21vZGVsID0gQ1BVX0VaUkE7CiAJCQkJY3B1bmFtZSA9ICJDMyAnRXpyYScgW0M1Q10iOwogCQkJfQotCQkJbWVtY3B5IChjbG9ja19yYXRpbywgZXpyYV9jbG9ja19yYXRpbywgc2l6ZW9mKGV6cmFfY2xvY2tfcmF0aW8pKTsKLQkJCW1lbWNweSAoZWJsY3JfdGFibGUsIGV6cmFfZWJsY3IsIHNpemVvZihlenJhX2VibGNyKSk7CisJCQltZW1jcHkoY2xvY2tfcmF0aW8sIGV6cmFfY2xvY2tfcmF0aW8sCisJCQkJc2l6ZW9mKGV6cmFfY2xvY2tfcmF0aW8pKTsKKwkJCW1lbWNweShlYmxjcl90YWJsZSwgZXpyYV9lYmxjciwKKwkJCQlzaXplb2YoZXpyYV9lYmxjcikpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CkBAIC02MzIsMjQgKzcwNCwyNCBAQAogCQlicmVhazsKIAogCWNhc2UgOToKLQkJY3B1X21vZGVsID0gQ1BVX05FSEVNSUFIOwogCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9QT1dFUlNBVkVSOwotCQludW1zY2FsZXM9MzI7CisJCW51bXNjYWxlcyA9IDMyOworCQltZW1jcHkoY2xvY2tfcmF0aW8sCisJCSAgICAgICBuZWhlbWlhaF9jbG9ja19yYXRpbywKKwkJICAgICAgIHNpemVvZihuZWhlbWlhaF9jbG9ja19yYXRpbykpOworCQltZW1jcHkoZWJsY3JfdGFibGUsIG5laGVtaWFoX2VibGNyLCBzaXplb2YobmVoZW1pYWhfZWJsY3IpKTsKIAkJc3dpdGNoIChjLT54ODZfbWFzaykgewogCQljYXNlIDAgLi4uIDE6Ci0JCQljcHVuYW1lID0gIkMzICdOZWhlbWlhaCBBJyBbQzVOXSI7Ci0JCQltZW1jcHkgKGNsb2NrX3JhdGlvLCBuZWhlbWlhaF9hX2Nsb2NrX3JhdGlvLCBzaXplb2YobmVoZW1pYWhfYV9jbG9ja19yYXRpbykpOwotCQkJbWVtY3B5IChlYmxjcl90YWJsZSwgbmVoZW1pYWhfYV9lYmxjciwgc2l6ZW9mKG5laGVtaWFoX2FfZWJsY3IpKTsKKwkJCWNwdV9tb2RlbCA9IENQVV9ORUhFTUlBSDsKKwkJCWNwdW5hbWUgPSAiQzMgJ05laGVtaWFoIEEnIFtDNVhMT0VdIjsKIAkJCWJyZWFrOwogCQljYXNlIDIgLi4uIDQ6Ci0JCQljcHVuYW1lID0gIkMzICdOZWhlbWlhaCBCJyBbQzVOXSI7Ci0JCQltZW1jcHkgKGNsb2NrX3JhdGlvLCBuZWhlbWlhaF9iX2Nsb2NrX3JhdGlvLCBzaXplb2YobmVoZW1pYWhfYl9jbG9ja19yYXRpbykpOwotCQkJbWVtY3B5IChlYmxjcl90YWJsZSwgbmVoZW1pYWhfYl9lYmxjciwgc2l6ZW9mKG5laGVtaWFoX2JfZWJsY3IpKTsKKwkJCWNwdV9tb2RlbCA9IENQVV9ORUhFTUlBSDsKKwkJCWNwdW5hbWUgPSAiQzMgJ05laGVtaWFoIEInIFtDNVhMT0hdIjsKIAkJCWJyZWFrOwogCQljYXNlIDUgLi4uIDE1OgotCQkJY3B1bmFtZSA9ICJDMyAnTmVoZW1pYWggQycgW0M1Tl0iOwotCQkJbWVtY3B5IChjbG9ja19yYXRpbywgbmVoZW1pYWhfY19jbG9ja19yYXRpbywgc2l6ZW9mKG5laGVtaWFoX2NfY2xvY2tfcmF0aW8pKTsKLQkJCW1lbWNweSAoZWJsY3JfdGFibGUsIG5laGVtaWFoX2NfZWJsY3IsIHNpemVvZihuZWhlbWlhaF9jX2VibGNyKSk7CisJCQljcHVfbW9kZWwgPSBDUFVfTkVIRU1JQUhfQzsKKwkJCWNwdW5hbWUgPSAiQzMgJ05laGVtaWFoIEMnIFtDNVBdIjsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwpAQCAtNjU4LDYgKzczMCwxMyBAQAogCQljcHVuYW1lID0gIlVua25vd24iOwogCQlicmVhazsKIAl9CisJLyogQ2hlY2sgTG9uZ2hhdWwgdmVyLiAyICovCisJaWYgKGxvbmdoYXVsX3ZlcnNpb24gPT0gVFlQRV9MT05HSEFVTF9WMikgeworCQlyZG1zcihNU1JfVklBX0xPTkdIQVVMLCBsbywgaGkpOworCQlpZiAobG8gPT0gMCAmJiBoaSA9PSAwKQorCQkJLyogTG9va3MgbGlrZSBNU1IgaXNuJ3QgcHJlc2VudCAqLworCQkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjE7CisJfQogCiAJcHJpbnRrIChLRVJOX0lORk8gUEZYICJWSUEgJXMgQ1BVIGRldGVjdGVkLiAgIiwgY3B1bmFtZSk7CiAJc3dpdGNoIChsb25naGF1bF92ZXJzaW9uKSB7CkBAIC02NzAsMTUgKzc0OSwxOCBAQAogCQlicmVhazsKIAl9OwogCisJLyogRG9lc24ndCBodXJ0ICovCisJdnQ4MjM1X3ByZXNlbnQgPSBsb25naGF1bF9zZXR1cF92dDgyMzUoKTsKKwogCS8qIEZpbmQgQUNQSSBkYXRhIGZvciBwcm9jZXNzb3IgKi8KLQlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9QUk9DRVNTT1IsIEFDUElfUk9PVF9PQkpFQ1QsIEFDUElfVUlOVDMyX01BWCwKLQkJCSAgICAmbG9uZ2hhdWxfd2Fsa19jYWxsYmFjaywgTlVMTCwgKHZvaWQgKikmcHIpOworCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX1BST0NFU1NPUiwgQUNQSV9ST09UX09CSkVDVCwKKwkJCQlBQ1BJX1VJTlQzMl9NQVgsICZsb25naGF1bF93YWxrX2NhbGxiYWNrLAorCQkJCU5VTEwsICh2b2lkICopJnByKTsKIAogCS8qIENoZWNrIEFDUEkgc3VwcG9ydCBmb3IgQzMgc3RhdGUgKi8KLQlpZiAoKHByICE9IE5VTEwpICYmIChsb25naGF1bF92ZXJzaW9uID09IFRZUEVfUE9XRVJTQVZFUikpIHsKKwlpZiAocHIgIT0gTlVMTCAmJiBsb25naGF1bF92ZXJzaW9uICE9IFRZUEVfTE9OR0hBVUxfVjEpIHsKIAkJY3ggPSAmcHItPnBvd2VyLnN0YXRlc1tBQ1BJX1NUQVRFX0MzXTsKLQkJaWYgKGN4LT5hZGRyZXNzID4gMCAmJgotCQkgICAoY3gtPmxhdGVuY3kgPD0gMTAwMCB8fCBpZ25vcmVfbGF0ZW5jeSAhPSAwKSApIHsKKwkJaWYgKGN4LT5hZGRyZXNzID4gMCAmJiBjeC0+bGF0ZW5jeSA8PSAxMDAwKSB7CiAJCQlsb25naGF1bF9mbGFncyB8PSBVU0VfQUNQSV9DMzsKIAkJCWdvdG8gcHJpbnRfc3VwcG9ydF90eXBlOwogCQl9CkBAIC02ODgsOCArNzcwLDExIEBACiAJCWxvbmdoYXVsX2ZsYWdzIHw9IFVTRV9OT1JUSEJSSURHRTsKIAkJZ290byBwcmludF9zdXBwb3J0X3R5cGU7CiAJfQotCi0JLyogTm8gQUNQSSBDMyBvciB3ZSBjYW4ndCB1c2UgaXQgKi8KKwkvKiBVc2UgVlQ4MjM1IHNvdXRoYnJpZGdlIGlmIHByZXNlbnQgKi8KKwlpZiAobG9uZ2hhdWxfdmVyc2lvbiA9PSBUWVBFX1BPV0VSU0FWRVIgJiYgdnQ4MjM1X3ByZXNlbnQpIHsKKwkJbG9uZ2hhdWxfZmxhZ3MgfD0gVVNFX1ZUODIzNTsKKwkJZ290byBwcmludF9zdXBwb3J0X3R5cGU7CisJfQogCS8qIENoZWNrIEFDUEkgc3VwcG9ydCBmb3IgYnVzIG1hc3RlciBhcmJpdGVyIGRpc2FibGUgKi8KIAlpZiAoKHByID09IE5VTEwpIHx8ICEocHItPmZsYWdzLmJtX2NvbnRyb2wpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKQEAgLTY5OCwxOCArNzgzLDE4IEBACiAJfQogCiBwcmludF9zdXBwb3J0X3R5cGU6Ci0JaWYgKCEobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfTk9SVEhCUklER0UpKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVXNpbmcgQUNQSSBzdXBwb3J0LlxuIik7Ci0JfSBlbHNlIHsKKwlpZiAobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfTk9SVEhCUklER0UpCiAJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVXNpbmcgbm9ydGhicmlkZ2Ugc3VwcG9ydC5cbiIpOwotCX0KKwllbHNlIGlmIChsb25naGF1bF9mbGFncyAmIFVTRV9WVDgyMzUpCisJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVXNpbmcgVlQ4MjM1IHN1cHBvcnQuXG4iKTsKKwllbHNlCisJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVXNpbmcgQUNQSSBzdXBwb3J0LlxuIik7CiAKIAlyZXQgPSBsb25naGF1bF9nZXRfcmFuZ2VzKCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKChsb25naGF1bF92ZXJzaW9uPT1UWVBFX0xPTkdIQVVMX1YyIHx8IGxvbmdoYXVsX3ZlcnNpb249PVRZUEVfUE9XRVJTQVZFUikgJiYKLQkJIChzY2FsZV92b2x0YWdlICE9IDApKQorCWlmICgobG9uZ2hhdWxfdmVyc2lvbiAhPSBUWVBFX0xPTkdIQVVMX1YxKSAmJiAoc2NhbGVfdm9sdGFnZSAhPSAwKSkKIAkJbG9uZ2hhdWxfc2V0dXBfdm9sdGFnZXNjYWxpbmcoKTsKIAogCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CkBAIC03OTcsOCArODgyLDYgQEAKIAogbW9kdWxlX3BhcmFtIChzY2FsZV92b2x0YWdlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzY2FsZV92b2x0YWdlLCAiU2NhbGUgdm9sdGFnZSBvZiBwcm9jZXNzb3IiKTsKLW1vZHVsZV9wYXJhbShpZ25vcmVfbGF0ZW5jeSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWdub3JlX2xhdGVuY3ksICJTa2lwIEFDUEkgQzMgbGF0ZW5jeSB0ZXN0Iik7CiAKIE1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIkxvbmdoYXVsIGRyaXZlciBmb3IgVklBIEN5cml4IHByb2Nlc3NvcnMuIik7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmggYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmgKaW5kZXggYmM0NjgyYS4uYmIwYTA0YiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaApAQCAtMjM1LDQ5ICsyMzUsMTQgQEAKIC8qCiAgKiBWSUEgQzMgTmVoZW1pYWggKi8KIAotc3RhdGljIGludCBfX2luaXRkYXRhIG5laGVtaWFoX2FfY2xvY2tfcmF0aW9bMzJdID0geworc3RhdGljIGludCBfX2luaXRkYXRhICBuZWhlbWlhaF9jbG9ja19yYXRpb1szMl0gPSB7CiAJMTAwLCAvKiAwMDAwIC0+IDEwLjB4ICovCiAJMTYwLCAvKiAwMDAxIC0+IDE2LjB4ICovCi0JLTEsICAvKiAwMDEwIC0+ICBSRVNFUlZFRCAqLworCTQwLCAgLyogMDAxMCAtPiAgNC4weCAqLwogCTkwLCAgLyogMDAxMSAtPiAgOS4weCAqLwogCTk1LCAgLyogMDEwMCAtPiAgOS41eCAqLwogCS0xLCAgLyogMDEwMSAtPiAgUkVTRVJWRUQgKi8KLQktMSwgIC8qIDAxMTAgLT4gIFJFU0VSVkVEICovCi0JNTUsICAvKiAwMTExIC0+ICA1LjV4ICovCi0JNjAsICAvKiAxMDAwIC0+ICA2LjB4ICovCi0JNzAsICAvKiAxMDAxIC0+ICA3LjB4ICovCi0JODAsICAvKiAxMDEwIC0+ICA4LjB4ICovCi0JNTAsICAvKiAxMDExIC0+ICA1LjB4ICovCi0JNjUsICAvKiAxMTAwIC0+ICA2LjV4ICovCi0JNzUsICAvKiAxMTAxIC0+ICA3LjV4ICovCi0JODUsICAvKiAxMTEwIC0+ICA4LjV4ICovCi0JMTIwLCAvKiAxMTExIC0+IDEyLjB4ICovCi0JMTAwLCAvKiAwMDAwIC0+IDEwLjB4ICovCi0JLTEsICAvKiAwMDAxIC0+IFJFU0VSVkVEICovCi0JMTIwLCAvKiAwMDEwIC0+IDEyLjB4ICovCi0JOTAsICAvKiAwMDExIC0+ICA5LjB4ICovCi0JMTA1LCAvKiAwMTAwIC0+IDEwLjV4ICovCi0JMTE1LCAvKiAwMTAxIC0+IDExLjV4ICovCi0JMTI1LCAvKiAwMTEwIC0+IDEyLjV4ICovCi0JMTM1LCAvKiAwMTExIC0+IDEzLjV4ICovCi0JMTQwLCAvKiAxMDAwIC0+IDE0LjB4ICovCi0JMTUwLCAvKiAxMDAxIC0+IDE1LjB4ICovCi0JMTYwLCAvKiAxMDEwIC0+IDE2LjB4ICovCi0JMTMwLCAvKiAxMDExIC0+IDEzLjB4ICovCi0JMTQ1LCAvKiAxMTAwIC0+IDE0LjV4ICovCi0JMTU1LCAvKiAxMTAxIC0+IDE1LjV4ICovCi0JLTEsICAvKiAxMTEwIC0+IFJFU0VSVkVEICgxMy4weCkgKi8KLQkxMjAsIC8qIDExMTEgLT4gMTIuMHggKi8KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSAgbmVoZW1pYWhfYl9jbG9ja19yYXRpb1szMl0gPSB7Ci0JMTAwLCAvKiAwMDAwIC0+IDEwLjB4ICovCi0JMTYwLCAvKiAwMDAxIC0+IDE2LjB4ICovCi0JLTEsICAvKiAwMDEwIC0+ICBSRVNFUlZFRCAqLwotCTkwLCAgLyogMDAxMSAtPiAgOS4weCAqLwotCTk1LCAgLyogMDEwMCAtPiAgOS41eCAqLwotCS0xLCAgLyogMDEwMSAtPiAgUkVTRVJWRUQgKi8KLQktMSwgIC8qIDAxMTAgLT4gIFJFU0VSVkVEICovCisJNDUsICAvKiAwMTEwIC0+ICA0LjV4ICovCiAJNTUsICAvKiAwMTExIC0+ICA1LjV4ICovCiAJNjAsICAvKiAxMDAwIC0+ICA2LjB4ICovCiAJNzAsICAvKiAxMDAxIC0+ICA3LjB4ICovCkBAIC0zMDUsODQgKzI3MCwxNCBAQAogCTEyMCwgLyogMTExMSAtPiAxMi4weCAqLwogfTsKIAotc3RhdGljIGludCBfX2luaXRkYXRhICBuZWhlbWlhaF9jX2Nsb2NrX3JhdGlvWzMyXSA9IHsKLQkxMDAsIC8qIDAwMDAgLT4gMTAuMHggKi8KLQkxNjAsIC8qIDAwMDEgLT4gMTYuMHggKi8KLQk0MCwgIC8qIDAwMTAgLT4gIFJFU0VSVkVEICovCi0JOTAsICAvKiAwMDExIC0+ICA5LjB4ICovCi0JOTUsICAvKiAwMTAwIC0+ICA5LjV4ICovCi0JLTEsICAvKiAwMTAxIC0+ICBSRVNFUlZFRCAqLwotCTQ1LCAgLyogMDExMCAtPiAgUkVTRVJWRUQgKi8KLQk1NSwgIC8qIDAxMTEgLT4gIDUuNXggKi8KLQk2MCwgIC8qIDEwMDAgLT4gIDYuMHggKi8KLQk3MCwgIC8qIDEwMDEgLT4gIDcuMHggKi8KLQk4MCwgIC8qIDEwMTAgLT4gIDguMHggKi8KLQk1MCwgIC8qIDEwMTEgLT4gIDUuMHggKi8KLQk2NSwgIC8qIDExMDAgLT4gIDYuNXggKi8KLQk3NSwgIC8qIDExMDEgLT4gIDcuNXggKi8KLQk4NSwgIC8qIDExMTAgLT4gIDguNXggKi8KLQkxMjAsIC8qIDExMTEgLT4gMTIuMHggKi8KLQkxMDAsIC8qIDAwMDAgLT4gMTAuMHggKi8KLQkxMTAsIC8qIDAwMDEgLT4gMTEuMHggKi8KLQkxMjAsIC8qIDAwMTAgLT4gMTIuMHggKi8KLQk5MCwgIC8qIDAwMTEgLT4gIDkuMHggKi8KLQkxMDUsIC8qIDAxMDAgLT4gMTAuNXggKi8KLQkxMTUsIC8qIDAxMDEgLT4gMTEuNXggKi8KLQkxMjUsIC8qIDAxMTAgLT4gMTIuNXggKi8KLQkxMzUsIC8qIDAxMTEgLT4gMTMuNXggKi8KLQkxNDAsIC8qIDEwMDAgLT4gMTQuMHggKi8KLQkxNTAsIC8qIDEwMDEgLT4gMTUuMHggKi8KLQkxNjAsIC8qIDEwMTAgLT4gMTYuMHggKi8KLQkxMzAsIC8qIDEwMTEgLT4gMTMuMHggKi8KLQkxNDUsIC8qIDExMDAgLT4gMTQuNXggKi8KLQkxNTUsIC8qIDExMDEgLT4gMTUuNXggKi8KLQktMSwgIC8qIDExMTAgLT4gUkVTRVJWRUQgKDEzLjB4KSAqLwotCTEyMCwgLyogMTExMSAtPiAxMi4weCAqLwotfTsKLQotc3RhdGljIGludCBfX2luaXRkYXRhIG5laGVtaWFoX2FfZWJsY3JbMzJdID0geworc3RhdGljIGludCBfX2luaXRkYXRhIG5laGVtaWFoX2VibGNyWzMyXSA9IHsKIAk1MCwgIC8qIDAwMDAgLT4gIDUuMHggKi8KIAkxNjAsIC8qIDAwMDEgLT4gMTYuMHggKi8KLQktMSwgIC8qIDAwMTAgLT4gIFJFU0VSVkVEICovCisJNDAsICAvKiAwMDEwIC0+ICA0LjB4ICovCiAJMTAwLCAvKiAwMDExIC0+IDEwLjB4ICovCiAJNTUsICAvKiAwMTAwIC0+ICA1LjV4ICovCiAJLTEsICAvKiAwMTAxIC0+ICBSRVNFUlZFRCAqLwotCS0xLCAgLyogMDExMCAtPiAgUkVTRVJWRUQgKi8KLQk5NSwgIC8qIDAxMTEgLT4gIDkuNXggKi8KLQk5MCwgIC8qIDEwMDAgLT4gIDkuMHggKi8KLQk3MCwgIC8qIDEwMDEgLT4gIDcuMHggKi8KLQk4MCwgIC8qIDEwMTAgLT4gIDguMHggKi8KLQk2MCwgIC8qIDEwMTEgLT4gIDYuMHggKi8KLQkxMjAsIC8qIDExMDAgLT4gMTIuMHggKi8KLQk3NSwgIC8qIDExMDEgLT4gIDcuNXggKi8KLQk4NSwgIC8qIDExMTAgLT4gIDguNXggKi8KLQk2NSwgIC8qIDExMTEgLT4gIDYuNXggKi8KLQk5MCwgIC8qIDAwMDAgLT4gIDkuMHggKi8KLQktMSwgIC8qIDAwMDEgLT4gUkVTRVJWRUQgKi8KLQkxMjAsIC8qIDAwMTAgLT4gMTIuMHggKi8KLQkxMDAsIC8qIDAwMTEgLT4gMTAuMHggKi8KLQkxMzUsIC8qIDAxMDAgLT4gMTMuNXggKi8KLQkxMTUsIC8qIDAxMDEgLT4gMTEuNXggKi8KLQkxMjUsIC8qIDAxMTAgLT4gMTIuNXggKi8KLQkxMDUsIC8qIDAxMTEgLT4gMTAuNXggKi8KLQkxMzAsIC8qIDEwMDAgLT4gMTMuMHggKi8KLQkxNTAsIC8qIDEwMDEgLT4gMTUuMHggKi8KLQkxNjAsIC8qIDEwMTAgLT4gMTYuMHggKi8KLQkxNDAsIC8qIDEwMTEgLT4gMTQuMHggKi8KLQkxMjAsIC8qIDExMDAgLT4gMTIuMHggKi8KLQkxNTUsIC8qIDExMDEgLT4gMTUuNXggKi8KLQktMSwgIC8qIDExMTAgLT4gUkVTRVJWRUQgKDEzLjB4KSAqLwotCTE0NSAvKiAxMTExIC0+IDE0LjV4ICovCi0gICAvKiBlbmQgb2YgdGFibGUgICovCi19Owotc3RhdGljIGludCBfX2luaXRkYXRhIG5laGVtaWFoX2JfZWJsY3JbMzJdID0gewotCTUwLCAgLyogMDAwMCAtPiAgNS4weCAqLwotCTE2MCwgLyogMDAwMSAtPiAxNi4weCAqLwotCS0xLCAgLyogMDAxMCAtPiAgUkVTRVJWRUQgKi8KLQkxMDAsIC8qIDAwMTEgLT4gMTAuMHggKi8KLQk1NSwgIC8qIDAxMDAgLT4gIDUuNXggKi8KLQktMSwgIC8qIDAxMDEgLT4gIFJFU0VSVkVEICovCi0JLTEsICAvKiAwMTEwIC0+ICBSRVNFUlZFRCAqLworCTQ1LCAgLyogMDExMCAtPiAgNC41eCAqLwogCTk1LCAgLyogMDExMSAtPiAgOS41eCAqLwogCTkwLCAgLyogMTAwMCAtPiAgOS4weCAqLwogCTcwLCAgLyogMTAwMSAtPiAgNy4weCAqLwpAQCAtNDA4LDQyICszMDMsNiBAQAogCTE1NSwgLyogMTEwMSAtPiAxNS41eCAqLwogCS0xLCAgLyogMTExMCAtPiBSRVNFUlZFRCAoMTMuMHgpICovCiAJMTQ1IC8qIDExMTEgLT4gMTQuNXggKi8KLQkgICAvKiBlbmQgb2YgdGFibGUgICovCi19Owotc3RhdGljIGludCBfX2luaXRkYXRhIG5laGVtaWFoX2NfZWJsY3JbMzJdID0gewotCTUwLCAgLyogMDAwMCAtPiAgNS4weCAqLwotCTE2MCwgLyogMDAwMSAtPiAxNi4weCAqLwotCTQwLCAgLyogMDAxMCAtPiAgUkVTRVJWRUQgKi8KLQkxMDAsIC8qIDAwMTEgLT4gMTAuMHggKi8KLQk1NSwgIC8qIDAxMDAgLT4gIDUuNXggKi8KLQktMSwgIC8qIDAxMDEgLT4gIFJFU0VSVkVEICovCi0JNDUsICAvKiAwMTEwIC0+ICBSRVNFUlZFRCAqLwotCTk1LCAgLyogMDExMSAtPiAgOS41eCAqLwotCTkwLCAgLyogMTAwMCAtPiAgOS4weCAqLwotCTcwLCAgLyogMTAwMSAtPiAgNy4weCAqLwotCTgwLCAgLyogMTAxMCAtPiAgOC4weCAqLwotCTYwLCAgLyogMTAxMSAtPiAgNi4weCAqLwotCTEyMCwgLyogMTEwMCAtPiAxMi4weCAqLwotCTc1LCAgLyogMTEwMSAtPiAgNy41eCAqLwotCTg1LCAgLyogMTExMCAtPiAgOC41eCAqLwotCTY1LCAgLyogMTExMSAtPiAgNi41eCAqLwotCTkwLCAgLyogMDAwMCAtPiAgOS4weCAqLwotCTExMCwgLyogMDAwMSAtPiAxMS4weCAqLwotCTEyMCwgLyogMDAxMCAtPiAxMi4weCAqLwotCTEwMCwgLyogMDAxMSAtPiAxMC4weCAqLwotCTEzNSwgLyogMDEwMCAtPiAxMy41eCAqLwotCTExNSwgLyogMDEwMSAtPiAxMS41eCAqLwotCTEyNSwgLyogMDExMCAtPiAxMi41eCAqLwotCTEwNSwgLyogMDExMSAtPiAxMC41eCAqLwotCTEzMCwgLyogMTAwMCAtPiAxMy4weCAqLwotCTE1MCwgLyogMTAwMSAtPiAxNS4weCAqLwotCTE2MCwgLyogMTAxMCAtPiAxNi4weCAqLwotCTE0MCwgLyogMTAxMSAtPiAxNC4weCAqLwotCTEyMCwgLyogMTEwMCAtPiAxMi4weCAqLwotCTE1NSwgLyogMTEwMSAtPiAxNS41eCAqLwotCS0xLCAgLyogMTExMCAtPiBSRVNFUlZFRCAoMTMuMHgpICovCi0JMTQ1IC8qIDExMTEgLT4gMTQuNXggKi8KLQkgIC8qIGVuZCBvZiB0YWJsZSAgKi8KIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggMmQ2NDkxNi4uZmUzYjY3MCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtMTI4OSw3ICsxMjg5LDExIEBACiAJaWYgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKQogCQlnb3RvIG91dDsKIAotCWtoeiA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7CisJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKKwkJa2h6ID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZGRpZChkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJyZGlkKTsKKwllbHNlCisJCWtoeiA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7CisKIAogb3V0OgogCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jeXJpeC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3lyaXguYwppbmRleCBjMGMzYjU5Li5kZTI3YmQwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jeXJpeC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2N5cml4LmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9wY2ktZGlyZWN0Lmg+CiAKICNpbmNsdWRlICJjcHUuaCIKIApAQCAtMTYxLDE5ICsxNjIsMTkgQEAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBnZW9kZV9jb25maWd1cmUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU4IGNjcjMsIGNjcjQ7CisJdTggY2NyMzsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAkvKiBTdXNwZW5kIG9uIGhhbHQgcG93ZXIgc2F2aW5nIGFuZCBlbmFibGUgI1NVU1AgcGluICovCiAJc2V0Q3g4NihDWDg2X0NDUjIsIGdldEN4ODYoQ1g4Nl9DQ1IyKSB8IDB4ODgpOwogCiAJY2NyMyA9IGdldEN4ODYoQ1g4Nl9DQ1IzKTsKLQlzZXRDeDg2KENYODZfQ0NSMywgKGNjcjMgJiAweDBmKSB8IDB4MTApOwkvKiBFbmFibGUgKi8KKwlzZXRDeDg2KENYODZfQ0NSMywgKGNjcjMgJiAweDBmKSB8IDB4MTApOwkvKiBlbmFibGUgTUFQRU4gKi8KIAkKLQljY3I0ID0gZ2V0Q3g4NihDWDg2X0NDUjQpOwotCWNjcjQgfD0gMHgzODsJCS8qIEZQVSBmYXN0LCBEVEUgY2FjaGUsIE1lbSBieXBhc3MgKi8KLQkKLQlzZXRDeDg2KENYODZfQ0NSMywgY2NyMyk7CisKKwkvKiBGUFUgZmFzdCwgRFRFIGNhY2hlLCBNZW0gYnlwYXNzICovCisJc2V0Q3g4NihDWDg2X0NDUjQsIGdldEN4ODYoQ1g4Nl9DQ1I0KSB8IDB4MzgpOworCXNldEN4ODYoQ1g4Nl9DQ1IzLCBjY3IzKTsJCQkvKiBkaXNhYmxlIE1BUEVOICovCiAJCiAJc2V0X2N4ODZfbWVtd2IoKTsKIAlzZXRfY3g4Nl9yZW9yZGVyKCk7CQpAQCAtMTgzLDE0ICsxODQsNiBAQAogfQogCiAKLSNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19jcHVpbml0ZGF0YSBjeXJpeF81NXgwW10gPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTIwKSB9LAotCXsgfSwKLX07Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgX19jcHVpbml0IGluaXRfY3lyaXgoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXVuc2lnbmVkIGNoYXIgZGlyMCwgZGlyMF9tc24sIGRpcjBfbHNuLCBkaXIxID0gMDsKQEAgLTI1OCw2ICsyNTEsOCBAQAogCiAJY2FzZSA0OiAvKiBNZWRpYUdYL0dYbSBvciBHZW9kZSBHWE0vR1hMVi9HWDEgKi8KICNpZmRlZiBDT05GSUdfUENJCisJeworCQl1MzIgdmVuZG9yLCBkZXZpY2U7CiAJCS8qIEl0IGlzbid0IHJlYWxseSBhIFBDSSBxdWlyayBkaXJlY3RseSwgYnV0IHRoZSBjdXJlIGlzIHRoZQogCQkgICBzYW1lLiBUaGUgTWVkaWFHWCBoYXMgZGVlcCBtYWdpYyBTTU0gc3R1ZmYgdGhhdCBoYW5kbGVzIHRoZQogCQkgICBTQiBlbXVsYXRpb24uIEl0IHRob3dzIGF3YXkgdGhlIGZpZm8gb24gZGlzYWJsZV9kbWEoKSB3aGljaApAQCAtMjczLDIyICsyNjgsMzQgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiV29ya2luZyBhcm91bmQgQ3lyaXggTWVkaWFHWCB2aXJ0dWFsIERNQSBidWdzLlxuIik7CiAJCWlzYV9kbWFfYnJpZGdlX2J1Z2d5ID0gMjsKIAorCQkvKiBXZSBkbyB0aGlzIGJlZm9yZSB0aGUgUENJIGxheWVyIGlzIHJ1bm5pbmcuIEhvd2V2ZXIgd2UKKwkJICAgYXJlIHNhZmUgaGVyZSBhcyB3ZSBrbm93IHRoZSBicmlkZ2UgbXVzdCBiZSBhIEN5cml4CisJCSAgIGNvbXBhbmlvbiBhbmQgbXVzdCBiZSBwcmVzZW50ICovCisJCXZlbmRvciA9IHJlYWRfcGNpX2NvbmZpZ18xNigwLCAwLCAweDEyLCBQQ0lfVkVORE9SX0lEKTsKKwkJZGV2aWNlID0gcmVhZF9wY2lfY29uZmlnXzE2KDAsIDAsIDB4MTIsIFBDSV9ERVZJQ0VfSUQpOwogCiAJCS8qCiAJCSAqICBUaGUgNTUxMC81NTIwIGNvbXBhbmlvbiBjaGlwcyBoYXZlIGEgZnVua3kgUElULgogCQkgKi8gIAotCQlpZiAocGNpX2Rldl9wcmVzZW50KGN5cml4XzU1eDApKQorCQlpZiAodmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ1lSSVggJiYKKwkgKGRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MTAgfHwgZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUyMCkpCiAJCQlwaXRfbGF0Y2hfYnVnZ3kgPSAxOworCX0KICNlbmRpZgogCQljLT54ODZfY2FjaGVfc2l6ZT0xNjsJLyogWWVwIDE2SyBpbnRlZ3JhdGVkIGNhY2hlIHRoYXRzIGl0ICovCiAKIAkJLyogR1htIHN1cHBvcnRzIGV4dGVuZGVkIGNwdWlkIGxldmVscyAnYWxhJyBBTUQgKi8KIAkJaWYgKGMtPmNwdWlkX2xldmVsID09IDIpIHsKIAkJCS8qIEVuYWJsZSBjeE1NWCBleHRlbnNpb25zIChHWDEgRGF0YXNoZWV0IDU0KSAqLwotCQkJc2V0Q3g4NihDWDg2X0NDUjcsIGdldEN4ODYoQ1g4Nl9DQ1I3KXwxKTsKKwkJCXNldEN4ODYoQ1g4Nl9DQ1I3LCBnZXRDeDg2KENYODZfQ0NSNykgfCAxKTsKIAkJCQotCQkJLyogR1hsdi9HWG0vR1gxICovCi0JCQlpZigoZGlyMSA+PSAweDUwICYmIGRpcjEgPD0gMHg1NCkgfHwgZGlyMSA+PSAweDYzKQorCQkJLyoKKwkJCSAqIEdYbSA6IDB4MzAgLi4uIDB4NWYgR1htICBkYXRhc2hlZXQgNTEKKwkJCSAqIEdYbHY6IDB4NnggICAgICAgICAgR1hsdiBkYXRhc2hlZXQgNTQKKwkJCSAqICA/ICA6IDB4N3gKKwkJCSAqIEdYMSA6IDB4OHggICAgICAgICAgR1gxICBkYXRhc2hlZXQgNTYKKwkJCSAqLworCQkJaWYoKDB4MzAgPD0gZGlyMSAmJiBkaXIxIDw9IDB4NmYpIHx8ICgweDgwIDw9ZGlyMSAmJiBkaXIxIDw9IDB4OGYpKQogCQkJCWdlb2RlX2NvbmZpZ3VyZSgpOwogCQkJZ2V0X21vZGVsX25hbWUoYyk7ICAvKiBnZXQgQ1BVIG1hcmtldGluZyBuYW1lICovCiAJCQlyZXR1cm47CkBAIC00MTUsMTUgKzQyMiwxNCBAQAogCQkKICAgIAkgICAgICAgIGlmIChkaXIwID09IDUgfHwgZGlyMCA9PSAzKQogICAgCSAgICAgICAgewotCQkJdW5zaWduZWQgY2hhciBjY3IzLCBjY3I0OworCQkJdW5zaWduZWQgY2hhciBjY3IzOwogCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJCXByaW50ayhLRVJOX0lORk8gIkVuYWJsaW5nIENQVUlEIG9uIEN5cml4IHByb2Nlc3Nvci5cbiIpOwogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkJY2NyMyA9IGdldEN4ODYoQ1g4Nl9DQ1IzKTsKLQkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCAoY2NyMyAmIDB4MGYpIHwgMHgxMCk7IC8qIGVuYWJsZSBNQVBFTiAgKi8KLQkJCWNjcjQgPSBnZXRDeDg2KENYODZfQ0NSNCk7Ci0JCQlzZXRDeDg2KENYODZfQ0NSNCwgY2NyNCB8IDB4ODApOyAgICAgICAgICAvKiBlbmFibGUgY3B1aWQgICovCi0JCQlzZXRDeDg2KENYODZfQ0NSMywgY2NyMyk7ICAgICAgICAgICAgICAgICAvKiBkaXNhYmxlIE1BUEVOICovCisJCQlzZXRDeDg2KENYODZfQ0NSMywgKGNjcjMgJiAweDBmKSB8IDB4MTApOyAgICAgICAvKiBlbmFibGUgTUFQRU4gICovCisJCQlzZXRDeDg2KENYODZfQ0NSNCwgZ2V0Q3g4NihDWDg2X0NDUjQpIHwgMHg4MCk7ICAvKiBlbmFibGUgY3B1aWQgICovCisJCQlzZXRDeDg2KENYODZfQ0NSMywgY2NyMyk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXNhYmxlIE1BUEVOICovCiAJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKaW5kZXggZDU1NWJlYy4uNGYxMGM2MiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwpAQCAtMTIsNiArMTIsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21jZS5oPgogCiAjaW5jbHVkZSAibWNlLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuaCBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuaAppbmRleCA4NGZkNGNmLi44MWZiNmUyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmgKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5oCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vbWNlLmg+CiAKIHZvaWQgYW1kX21jaGVja19pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CiB2b2lkIGludGVsX3A0X21jaGVja19pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CkBAIC05LDYgKzEwLDUgQEAKIC8qIENhbGwgdGhlIGluc3RhbGxlZCBtYWNoaW5lIGNoZWNrIGhhbmRsZXIgZm9yIHRoaXMgQ1BVIHNldHVwLiAqLwogZXh0ZXJuIGZhc3RjYWxsIHZvaWQgKCptYWNoaW5lX2NoZWNrX3ZlY3Rvcikoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyBlcnJvcl9jb2RlKTsKIAotZXh0ZXJuIGludCBtY2VfZGlzYWJsZWQ7CiBleHRlcm4gaW50IG5yX21jZV9iYW5rczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3A0LmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svcDQuYwppbmRleCA1MDQ0MzRhLi44MzU5YzE5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svcDQuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svcDQuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaWRsZS5oPgogCiAjaW5jbHVkZSA8YXNtL3RoZXJtX3Rocm90Lmg+CiAKQEAgLTU5LDYgKzYwLDcgQEAKIAogZmFzdGNhbGwgdm9pZCBzbXBfdGhlcm1hbF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJZXhpdF9pZGxlKCk7CiAJaXJxX2VudGVyKCk7CiAJdmVuZG9yX3RoZXJtYWxfaW50ZXJydXB0KHJlZ3MpOwogCWlycV9leGl0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL2lmLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL2lmLmMKaW5kZXggZWU3NzFmMy4uYzdkOGYxNyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvaWYuYwpAQCAtMjExLDYgKzIxMSw5IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJY2FzZSBNVFJSSU9DX0FERF9FTlRSWToKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJY2FzZSBNVFJSSU9DMzJfQUREX0VOVFJZOgorI2VuZGlmCiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAJCWVyciA9CkBAIC0yMTgsMjEgKzIyMSwzMyBAQAogCQkJCSAgZmlsZSwgMCk7CiAJCWJyZWFrOwogCWNhc2UgTVRSUklPQ19TRVRfRU5UUlk6CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCWNhc2UgTVRSUklPQzMyX1NFVF9FTlRSWToKKyNlbmRpZgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCQllcnIgPSBtdHJyX2FkZChzZW50cnkuYmFzZSwgc2VudHJ5LnNpemUsIHNlbnRyeS50eXBlLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBNVFJSSU9DX0RFTF9FTlRSWToKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJY2FzZSBNVFJSSU9DMzJfREVMX0VOVFJZOgorI2VuZGlmCiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAJCWVyciA9IG10cnJfZmlsZV9kZWwoc2VudHJ5LmJhc2UsIHNlbnRyeS5zaXplLCBmaWxlLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBNVFJSSU9DX0tJTExfRU5UUlk6CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCWNhc2UgTVRSUklPQzMyX0tJTExfRU5UUlk6CisjZW5kaWYKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAkJZXJyID0gbXRycl9kZWwoLTEsIHNlbnRyeS5iYXNlLCBzZW50cnkuc2l6ZSk7CiAJCWJyZWFrOwogCWNhc2UgTVRSUklPQ19HRVRfRU5UUlk6CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCWNhc2UgTVRSUklPQzMyX0dFVF9FTlRSWToKKyNlbmRpZgogCQlpZiAoZ2VudHJ5LnJlZ251bSA+PSBudW1fdmFyX3JhbmdlcykKIAkJCXJldHVybiAtRUlOVkFMOwogCQltdHJyX2lmLT5nZXQoZ2VudHJ5LnJlZ251bSwgJmdlbnRyeS5iYXNlLCAmc2l6ZSwgJnR5cGUpOwpAQCAtMjQ5LDYgKzI2NCw5IEBACiAKIAkJYnJlYWs7CiAJY2FzZSBNVFJSSU9DX0FERF9QQUdFX0VOVFJZOgorI2lmZGVmIENPTkZJR19DT01QQVQKKwljYXNlIE1UUlJJT0MzMl9BRERfUEFHRV9FTlRSWToKKyNlbmRpZgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCQllcnIgPQpAQCAtMjU2LDIxICsyNzQsMzMgQEAKIAkJCQkgIGZpbGUsIDEpOwogCQlicmVhazsKIAljYXNlIE1UUlJJT0NfU0VUX1BBR0VfRU5UUlk6CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCWNhc2UgTVRSUklPQzMyX1NFVF9QQUdFX0VOVFJZOgorI2VuZGlmCiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAJCWVyciA9IG10cnJfYWRkX3BhZ2Uoc2VudHJ5LmJhc2UsIHNlbnRyeS5zaXplLCBzZW50cnkudHlwZSwgMCk7CiAJCWJyZWFrOwogCWNhc2UgTVRSUklPQ19ERUxfUEFHRV9FTlRSWToKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJY2FzZSBNVFJSSU9DMzJfREVMX1BBR0VfRU5UUlk6CisjZW5kaWYKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAkJZXJyID0gbXRycl9maWxlX2RlbChzZW50cnkuYmFzZSwgc2VudHJ5LnNpemUsIGZpbGUsIDEpOwogCQlicmVhazsKIAljYXNlIE1UUlJJT0NfS0lMTF9QQUdFX0VOVFJZOgorI2lmZGVmIENPTkZJR19DT01QQVQKKwljYXNlIE1UUlJJT0MzMl9LSUxMX1BBR0VfRU5UUlk6CisjZW5kaWYKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAkJZXJyID0gbXRycl9kZWxfcGFnZSgtMSwgc2VudHJ5LmJhc2UsIHNlbnRyeS5zaXplKTsKIAkJYnJlYWs7CiAJY2FzZSBNVFJSSU9DX0dFVF9QQUdFX0VOVFJZOgorI2lmZGVmIENPTkZJR19DT01QQVQKKwljYXNlIE1UUlJJT0MzMl9HRVRfUEFHRV9FTlRSWToKKyNlbmRpZgogCQlpZiAoZ2VudHJ5LnJlZ251bSA+PSBudW1fdmFyX3JhbmdlcykKIAkJCXJldHVybiAtRUlOVkFMOwogCQltdHJyX2lmLT5nZXQoZ2VudHJ5LnJlZ251bSwgJmdlbnRyeS5iYXNlLCAmc2l6ZSwgJnR5cGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCAxNmJiN2VhLi4wYWNmYjZhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL21haW4uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL21haW4uYwpAQCAtNTAsNyArNTAsNyBAQAogdW5zaWduZWQgaW50ICp1c2FnZV90YWJsZTsKIHN0YXRpYyBERUZJTkVfTVVURVgobXRycl9tdXRleCk7CiAKLXUzMiBzaXplX29yX21hc2ssIHNpemVfYW5kX21hc2s7Cit1NjQgc2l6ZV9vcl9tYXNrLCBzaXplX2FuZF9tYXNrOwogCiBzdGF0aWMgc3RydWN0IG10cnJfb3BzICogbXRycl9vcHNbWDg2X1ZFTkRPUl9OVU1dID0ge307CiAKQEAgLTY2Miw4ICs2NjIsOCBAQAogCQkJICAgICBib290X2NwdV9kYXRhLng4Nl9tYXNrID09IDB4NCkpCiAJCQkJcGh5c19hZGRyID0gMzY7CiAKLQkJCXNpemVfb3JfbWFzayA9IH4oKDEgPDwgKHBoeXNfYWRkciAtIFBBR0VfU0hJRlQpKSAtIDEpOwotCQkJc2l6ZV9hbmRfbWFzayA9IH5zaXplX29yX21hc2sgJiAweGZmZjAwMDAwOworCQkJc2l6ZV9vcl9tYXNrID0gfigoMVVMTCA8PCAocGh5c19hZGRyIC0gUEFHRV9TSElGVCkpIC0gMSk7CisJCQlzaXplX2FuZF9tYXNrID0gfnNpemVfb3JfbWFzayAmIDB4ZmZmZmYwMDAwMFVMTDsKIAkJfSBlbHNlIGlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9DRU5UQVVSICYmCiAJCQkgICBib290X2NwdV9kYXRhLng4NiA9PSA2KSB7CiAJCQkvKiBWSUEgQyogZmFtaWx5IGhhdmUgSW50ZWwgc3R5bGUgTVRSUnMsIGJ1dApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmggYi9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL210cnIuaAppbmRleCBkNjFlYTlkLi4yODlkZmU2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL210cnIuaAorKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL210cnIuaApAQCAtODQsNyArODQsNyBAQAogCiBleHRlcm4gdm9pZCBzZXRfbXRycl9vcHMoc3RydWN0IG10cnJfb3BzICogb3BzKTsKIAotZXh0ZXJuIHUzMiBzaXplX29yX21hc2ssIHNpemVfYW5kX21hc2s7CitleHRlcm4gdTY0IHNpemVfb3JfbWFzaywgc2l6ZV9hbmRfbWFzazsKIGV4dGVybiBzdHJ1Y3QgbXRycl9vcHMgKiBtdHJyX2lmOwogCiAjZGVmaW5lIGlzX2NwdSh2bmQpCShtdHJyX2lmICYmIG10cnJfaWYtPnZlbmRvciA9PSBYODZfVkVORE9SXyMjdm5kKQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvcHJvYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvcHJvYy5jCmluZGV4IDY2MjRkODUuLjQ3ZTNlYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3Byb2MuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9wcm9jLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgInN5c2NhbGwiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCAibXAiLCAibngiLCBOVUxMLCAibW14ZXh0IiwgTlVMTCwKLQkJTlVMTCwgImZ4c3Jfb3B0IiwgInJkdHNjcCIsIE5VTEwsIE5VTEwsICJsbSIsICIzZG5vd2V4dCIsICIzZG5vdyIsCisJCU5VTEwsICJmeHNyX29wdCIsICJwZHBlMWdiIiwgInJkdHNjcCIsIE5VTEwsICJsbSIsICIzZG5vd2V4dCIsICIzZG5vdyIsCiAKIAkJLyogVHJhbnNtZXRhLWRlZmluZWQgKi8KIAkJInJlY292ZXJ5IiwgImxvbmdydW4iLCBOVUxMLCAibHJ0aSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCkBAIC00Nyw3ICs0Nyw3IEBACiAJCS8qIEludGVsLWRlZmluZWQgKCMyKSAqLwogCQkicG5pIiwgTlVMTCwgTlVMTCwgIm1vbml0b3IiLCAiZHNfY3BsIiwgInZteCIsICJzbXgiLCAiZXN0IiwKIAkJInRtMiIsICJzc3NlMyIsICJjaWQiLCBOVUxMLCBOVUxMLCAiY3gxNiIsICJ4dHByIiwgTlVMTCwKLQkJTlVMTCwgTlVMTCwgImRjYSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsICJkY2EiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAicG9wY250IiwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAogCQkvKiBWSUEvQ3lyaXgvQ2VudGF1ci1kZWZpbmVkICovCkBAIC01Nyw4ICs1Nyw5IEBACiAJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAKIAkJLyogQU1ELWRlZmluZWQgKCMyKSAqLwotCQkibGFoZl9sbSIsICJjbXBfbGVnYWN5IiwgInN2bSIsIE5VTEwsICJjcjhsZWdhY3kiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkibGFoZl9sbSIsICJjbXBfbGVnYWN5IiwgInN2bSIsICJleHRhcGljIiwgImNyOGxlZ2FjeSIsICJhYm0iLAorCQkic3NlNGEiLCAibWlzYWxpZ25zc2UiLAorCQkiM2Rub3dwcmVmZXRjaCIsICJvc3Z3IiwgImlicyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAJfTsKQEAgLTY5LDggKzcwLDExIEBACiAJCSJ0dHAiLCAgLyogdGhlcm1hbCB0cmlwICovCiAJCSJ0bSIsCiAJCSJzdGMiLAorCQkiMTAwbWh6c3RlcHMiLAorCQkiaHdwc3RhdGUiLAogCQlOVUxMLAotCQkvKiBub3RoaW5nICovCS8qIGNvbnN0YW50X3RzYyAtIG1vdmVkIHRvIGZsYWdzICovCisJCU5VTEwsCS8qIGNvbnN0YW50X3RzYyAtIG1vdmVkIHRvIGZsYWdzICovCisJCS8qIG5vdGhpbmcgKi8KIAl9OwogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IHY7CiAJaW50IGksIG4gPSBjIC0gY3B1X2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS90cmFuc21ldGEuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCmluZGV4IDQwNTZmYjcuLjU2NzhkNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCkBAIC05LDcgKzksNyBAQAogewogCXVuc2lnbmVkIGludCBjYXBfbWFzaywgdWssIG1heCwgZHVtbXk7CiAJdW5zaWduZWQgaW50IGNtc19yZXYxLCBjbXNfcmV2MjsKLQl1bnNpZ25lZCBpbnQgY3B1X3JldiwgY3B1X2ZyZXEsIGNwdV9mbGFncywgbmV3X2NwdV9yZXY7CisJdW5zaWduZWQgaW50IGNwdV9yZXYsIGNwdV9mcmVxID0gMCwgY3B1X2ZsYWdzLCBuZXdfY3B1X3JldjsKIAljaGFyIGNwdV9pbmZvWzY1XTsKIAogCWdldF9tb2RlbF9uYW1lKGMpOwkvKiBTYW1lIGFzIEFNRC9DeXJpeCAqLwpAQCAtNzIsNiArNzIsOSBAQAogCXdybXNyKDB4ODA4NjAwMDQsIH4wLCB1ayk7CiAJYy0+eDg2X2NhcGFiaWxpdHlbMF0gPSBjcHVpZF9lZHgoMHgwMDAwMDAwMSk7CiAJd3Jtc3IoMHg4MDg2MDAwNCwgY2FwX21hc2ssIHVrKTsKKworCS8qIEFsbCBUcmFuc21ldGEgQ1BVcyBoYXZlIGEgY29uc3RhbnQgVFNDICovCisJc2V0X2JpdChYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MsIGMtPng4Nl9jYXBhYmlsaXR5KTsKIAkKIAkvKiBJZiB3ZSBjYW4gcnVuIGk2ODYgdXNlci1zcGFjZSBjb2RlLCBjYWxsIHVzIGFuIGk2ODYgKi8KICNkZWZpbmUgVVNFUjY4NiAoWDg2X0ZFQVRVUkVfVFNDfFg4Nl9GRUFUVVJFX0NYOHxYODZfRkVBVFVSRV9DTU9WKQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHVpZC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHVpZC5jCmluZGV4IDRkYTc1ZmEuLmVlYWUwZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdWlkLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpZmRlZiBDT05GSUdfU01QCiAKIHN0cnVjdCBjcHVpZF9jb21tYW5kIHsKLQlpbnQgY3B1OwogCXUzMiByZWc7CiAJdTMyICpkYXRhOwogfTsKQEAgLTU3LDggKzU2LDcgQEAKIHsKIAlzdHJ1Y3QgY3B1aWRfY29tbWFuZCAqY21kID0gKHN0cnVjdCBjcHVpZF9jb21tYW5kICopY21kX2Jsb2NrOwogCi0JaWYgKGNtZC0+Y3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKLQkJY3B1aWQoY21kLT5yZWcsICZjbWQtPmRhdGFbMF0sICZjbWQtPmRhdGFbMV0sICZjbWQtPmRhdGFbMl0sCisJY3B1aWQoY21kLT5yZWcsICZjbWQtPmRhdGFbMF0sICZjbWQtPmRhdGFbMV0sICZjbWQtPmRhdGFbMl0sCiAJCSAgICAgICZjbWQtPmRhdGFbM10pOwogfQogCkBAIC03MCwxMSArNjgsMTAgQEAKIAlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgewogCQljcHVpZChyZWcsICZkYXRhWzBdLCAmZGF0YVsxXSwgJmRhdGFbMl0sICZkYXRhWzNdKTsKIAl9IGVsc2UgewotCQljbWQuY3B1ID0gY3B1OwogCQljbWQucmVnID0gcmVnOwogCQljbWQuZGF0YSA9IGRhdGE7CiAKLQkJc21wX2NhbGxfZnVuY3Rpb24oY3B1aWRfc21wX2NwdWlkLCAmY21kLCAxLCAxKTsKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgY3B1aWRfc21wX2NwdWlkLCAmY21kLCAxLCAxKTsKIAl9CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9lODIwLmMKaW5kZXggZjM5MWFiYy4uNzBmMzk1NiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9lODIwLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAogI2lmZGVmIENPTkZJR19FRkkKIGludCBlZmlfZW5hYmxlZCA9IDA7CkBAIC0xNTYsMjEgKzE1NywyMiBAQAogCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWSB8IElPUkVTT1VSQ0VfSU8KIH0gfTsKIAotc3RhdGljIGludCByb21zaWduYXR1cmUoY29uc3QgdW5zaWduZWQgY2hhciAqeCkKKyNkZWZpbmUgUk9NU0lHTkFUVVJFIDB4YWE1NQorCitzdGF0aWMgaW50IF9faW5pdCByb21zaWduYXR1cmUoY29uc3QgdW5zaWduZWQgY2hhciAqcm9tKQogewogCXVuc2lnbmVkIHNob3J0IHNpZzsKLQlpbnQgcmV0ID0gMDsKLQlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoKGNvbnN0IHVuc2lnbmVkIHNob3J0ICopeCwgc2lnKSA9PSAwKQotCQlyZXQgPSAoc2lnID09IDB4YWE1NSk7Ci0JcmV0dXJuIHJldDsKKworCXJldHVybiBwcm9iZV9rZXJuZWxfYWRkcmVzcygoY29uc3QgdW5zaWduZWQgc2hvcnQgKilyb20sIHNpZykgPT0gMCAmJgorCSAgICAgICBzaWcgPT0gUk9NU0lHTkFUVVJFOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCByb21jaGVja3N1bSh1bnNpZ25lZCBjaGFyICpyb20sIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKQogewotCXVuc2lnbmVkIGNoYXIgKnAsIHN1bSA9IDA7CisJdW5zaWduZWQgY2hhciBzdW07CiAKLQlmb3IgKHAgPSByb207IHAgPCByb20gKyBsZW5ndGg7IHArKykKLQkJc3VtICs9ICpwOworCWZvciAoc3VtID0gMDsgbGVuZ3RoOyBsZW5ndGgtLSkKKwkJc3VtICs9ICpyb20rKzsKIAlyZXR1cm4gc3VtID09IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUwppbmRleCA1ZTQ3NjgzLi4xOGJkZGNiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9lbnRyeS5TCkBAIC0zMCw3ICszMCw3IEBACiAgKgkxOCglZXNwKSAtICVlYXgKICAqCTFDKCVlc3ApIC0gJWRzCiAgKgkyMCglZXNwKSAtICVlcwotICoJMjQoJWVzcCkgLSAlZ3MKKyAqCTI0KCVlc3ApIC0gJWZzCiAgKgkyOCglZXNwKSAtIG9yaWdfZWF4CiAgKgkyQyglZXNwKSAtICVlaXAKICAqCTMwKCVlc3ApIC0gJWNzCkBAIC05OSw5ICs5OSw5IEBACiAKICNkZWZpbmUgU0FWRV9BTEwgXAogCWNsZDsgXAotCXB1c2hsICVnczsgXAorCXB1c2hsICVmczsgXAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0O1wKLQkvKkNGSV9SRUxfT0ZGU0VUIGdzLCAwOyovXAorCS8qQ0ZJX1JFTF9PRkZTRVQgZnMsIDA7Ki9cCiAJcHVzaGwgJWVzOyBcCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQ7XAogCS8qQ0ZJX1JFTF9PRkZTRVQgZXMsIDA7Ki9cCkBAIC0xMzMsNyArMTMzLDcgQEAKIAltb3ZsICVlZHgsICVkczsgXAogCW1vdmwgJWVkeCwgJWVzOyBcCiAJbW92bCAkKF9fS0VSTkVMX1BEQSksICVlZHg7IFwKLQltb3ZsICVlZHgsICVncworCW1vdmwgJWVkeCwgJWZzCiAKICNkZWZpbmUgUkVTVE9SRV9JTlRfUkVHUyBcCiAJcG9wbCAlZWJ4OwlcCkBAIC0xNjYsOSArMTY2LDkgQEAKIDI6CXBvcGwgJWVzOwlcCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00O1wKIAkvKkNGSV9SRVNUT1JFIGVzOyovXAotMzoJcG9wbCAlZ3M7CVwKKzM6CXBvcGwgJWZzOwlcCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00O1wKLQkvKkNGSV9SRVNUT1JFIGdzOyovXAorCS8qQ0ZJX1JFU1RPUkUgZnM7Ki9cCiAucHVzaHNlY3Rpb24gLmZpeHVwLCJheCI7CVwKIDQ6CW1vdmwgJDAsKCVlc3ApOwlcCiAJam1wIDFiOwkJXApAQCAtMjI3LDYgKzIyNyw3IEBACiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CiAJam1wIHN5c2NhbGxfZXhpdAogCUNGSV9FTkRQUk9DCitFTkQocmV0X2Zyb21fZm9yaykKIAogLyoKICAqIFJldHVybiB0byB1c2VyIG1vZGUgaXMgbm90IGFzIGNvbXBsZXggYXMgYWxsIHRoaXMgbG9va3MsCkBAIC0yNTgsNiArMjU5LDcgQEAKIAkJCQkJIyBpbnQvZXhjZXB0aW9uIHJldHVybj8KIAlqbmUgd29ya19wZW5kaW5nCiAJam1wIHJlc3RvcmVfYWxsCitFTkQocmV0X2Zyb21fZXhjZXB0aW9uKQogCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIEVOVFJZKHJlc3VtZV9rZXJuZWwpCkBAIC0yNzIsNiArMjc0LDcgQEAKIAlqeiByZXN0b3JlX2FsbAogCWNhbGwgcHJlZW1wdF9zY2hlZHVsZV9pcnEKIAlqbXAgbmVlZF9yZXNjaGVkCitFTkQocmVzdW1lX2tlcm5lbCkKICNlbmRpZgogCUNGSV9FTkRQUk9DCiAKQEAgLTM0OSwxNiArMzUyLDE3IEBACiAJbW92bCBQVF9PTERFU1AoJWVzcCksICVlY3gKIAl4b3JsICVlYnAsJWVicAogCVRSQUNFX0lSUVNfT04KLTE6CW1vdiAgUFRfR1MoJWVzcCksICVncworMToJbW92ICBQVF9GUyglZXNwKSwgJWZzCiAJRU5BQkxFX0lOVEVSUlVQVFNfU1lTRVhJVAogCUNGSV9FTkRQUk9DCiAucHVzaHNlY3Rpb24gLmZpeHVwLCJheCIKLTI6CW1vdmwgJDAsUFRfR1MoJWVzcCkKKzI6CW1vdmwgJDAsUFRfRlMoJWVzcCkKIAlqbXAgMWIKIC5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJLmFsaWduIDQKIAkubG9uZyAxYiwyYgogLnBvcHNlY3Rpb24KK0VORFBST0Moc3lzZW50ZXJfZW50cnkpCiAKIAkjIHN5c3RlbSBjYWxsIGhhbmRsZXIgc3R1YgogRU5UUlkoc3lzdGVtX2NhbGwpCkBAIC00NTksNiArNDYzLDcgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTgKIAlqbXAgcmVzdG9yZV9ub2NoZWNrCiAJQ0ZJX0VORFBST0MKK0VORFBST0Moc3lzdGVtX2NhbGwpCiAKIAkjIHBlcmZvcm0gd29yayB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgaW1tZWRpYXRlbHkgYmVmb3JlIHJlc3VtcHRpb24KIAlBTElHTgpAQCAtNTA0LDYgKzUwOSw3IEBACiAJeG9ybCAlZWR4LCAlZWR4CiAJY2FsbCBkb19ub3RpZnlfcmVzdW1lCiAJam1wIHJlc3VtZV91c2Vyc3BhY2Vfc2lnCitFTkQod29ya19wZW5kaW5nKQogCiAJIyBwZXJmb3JtIHN5c2NhbGwgZXhpdCB0cmFjaW5nCiAJQUxJR04KQEAgLTUxOSw2ICs1MjUsNyBAQAogCWNtcGwgJChucl9zeXNjYWxscyksICVlYXgKIAlqbmFlIHN5c2NhbGxfY2FsbAogCWptcCBzeXNjYWxsX2V4aXQKK0VORChzeXNjYWxsX3RyYWNlX2VudHJ5KQogCiAJIyBwZXJmb3JtIHN5c2NhbGwgZXhpdCB0cmFjaW5nCiAJQUxJR04KQEAgLTUzMiw2ICs1MzksNyBAQAogCW1vdmwgJDEsICVlZHgKIAljYWxsIGRvX3N5c2NhbGxfdHJhY2UKIAlqbXAgcmVzdW1lX3VzZXJzcGFjZQorRU5EKHN5c2NhbGxfZXhpdF93b3JrKQogCUNGSV9FTkRQUk9DCiAKIAlSSU5HMF9JTlRfRlJBTUUJCQkjIGNhbid0IHVud2luZCBpbnRvIHVzZXIgc3BhY2UgYW55d2F5CkBAIC01NDIsMTUgKzU1MCwxNyBAQAogCUdFVF9USFJFQURfSU5GTyglZWJwKQogCW1vdmwgJC1FRkFVTFQsUFRfRUFYKCVlc3ApCiAJam1wIHJlc3VtZV91c2Vyc3BhY2UKK0VORChzeXNjYWxsX2ZhdWx0KQogCiBzeXNjYWxsX2JhZHN5czoKIAltb3ZsICQtRU5PU1lTLFBUX0VBWCglZXNwKQogCWptcCByZXN1bWVfdXNlcnNwYWNlCitFTkQoc3lzY2FsbF9iYWRzeXMpCiAJQ0ZJX0VORFBST0MKIAogI2RlZmluZSBGSVhVUF9FU1BGSVhfU1RBQ0sgXAogCS8qIHNpbmNlIHdlIGFyZSBvbiBhIHdyb25nIHN0YWNrLCB3ZSBjYW50IG1ha2UgaXQgYSBDIGNvZGUgOiggKi8gXAotCW1vdmwgJWdzOlBEQV9jcHUsICVlYng7IFwKKwltb3ZsICVmczpQREFfY3B1LCAlZWJ4OyBcCiAJUEVSX0NQVShjcHVfZ2R0X2Rlc2NyLCAlZWJ4KTsgXAogCW1vdmwgR0RTX2FkZHJlc3MoJWVieCksICVlYng7IFwKIAlHRVRfREVTQ19CQVNFKEdEVF9FTlRSWV9FU1BGSVhfU1MsICVlYngsICVlYXgsICVheCwgJWFsLCAlYWgpOyBcCkBAIC01ODEsOSArNTkxLDkgQEAKIEVOVFJZKGludGVycnVwdCkKIC50ZXh0CiAKLXZlY3Rvcj0wCiBFTlRSWShpcnFfZW50cmllc19zdGFydCkKIAlSSU5HMF9JTlRfRlJBTUUKK3ZlY3Rvcj0wCiAucmVwdCBOUl9JUlFTCiAJQUxJR04KICAuaWYgdmVjdG9yCkBAIC01OTIsMTEgKzYwMiwxNiBAQAogMToJcHVzaGwgJH4odmVjdG9yKQogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJam1wIGNvbW1vbl9pbnRlcnJ1cHQKLS5kYXRhCisgLnByZXZpb3VzCiAJLmxvbmcgMWIKLS50ZXh0CisgLnRleHQKIHZlY3Rvcj12ZWN0b3IrMQogLmVuZHIKK0VORChpcnFfZW50cmllc19zdGFydCkKKworLnByZXZpb3VzCitFTkQoaW50ZXJydXB0KQorLnByZXZpb3VzCiAKIC8qCiAgKiB0aGUgQ1BVIGF1dG9tYXRpY2FsbHkgZGlzYWJsZXMgaW50ZXJydXB0cyB3aGVuIGV4ZWN1dGluZyBhbiBJUlEgdmVjdG9yLApAQCAtNjA5LDYgKzYyNCw3IEBACiAJbW92bCAlZXNwLCVlYXgKIAljYWxsIGRvX0lSUQogCWptcCByZXRfZnJvbV9pbnRyCitFTkRQUk9DKGNvbW1vbl9pbnRlcnJ1cHQpCiAJQ0ZJX0VORFBST0MKIAogI2RlZmluZSBCVUlMRF9JTlRFUlJVUFQobmFtZSwgbnIpCVwKQEAgLTYyMSwxOCArNjM3LDI0IEBACiAJbW92bCAlZXNwLCVlYXg7CQkJXAogCWNhbGwgc21wXy8qKi9uYW1lOwkJXAogCWptcCByZXRfZnJvbV9pbnRyOwkJXAotCUNGSV9FTkRQUk9DCisJQ0ZJX0VORFBST0M7CQkJXAorRU5EUFJPQyhuYW1lKQogCiAvKiBUaGUgaW5jbHVkZSBpcyB3aGVyZSBhbGwgb2YgdGhlIFNNUCBldGMuIGludGVycnVwdHMgY29tZSBmcm9tICovCiAjaW5jbHVkZSAiZW50cnlfYXJjaC5oIgogCisvKiBUaGlzIGFsdGVybmF0ZSBlbnRyeSBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBoaWphY2sgdGhlIGFwaWMgTFZUVCAqLworI2lmIGRlZmluZWQoQ09ORklHX1ZNSSkgJiYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCitCVUlMRF9JTlRFUlJVUFQoYXBpY192bWlfdGltZXJfaW50ZXJydXB0LExPQ0FMX1RJTUVSX1ZFQ1RPUikKKyNlbmRpZgorCiBLUFJPQkVfRU5UUlkocGFnZV9mYXVsdCkKIAlSSU5HMF9FQ19GUkFNRQogCXB1c2hsICRkb19wYWdlX2ZhdWx0CiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAlBTElHTgogZXJyb3JfY29kZToKLQkvKiB0aGUgZnVuY3Rpb24gYWRkcmVzcyBpcyBpbiAlZ3MncyBzbG90IG9uIHRoZSBzdGFjayAqLworCS8qIHRoZSBmdW5jdGlvbiBhZGRyZXNzIGlzIGluICVmcydzIHNsb3Qgb24gdGhlIHN0YWNrICovCiAJcHVzaGwgJWVzCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAkvKkNGSV9SRUxfT0ZGU0VUIGVzLCAwKi8KQEAgLTY2MSwyMCArNjgzLDIwIEBACiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAlDRklfUkVMX09GRlNFVCBlYngsIDAKIAljbGQKLQlwdXNobCAlZ3MKKwlwdXNobCAlZnMKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAotCS8qQ0ZJX1JFTF9PRkZTRVQgZ3MsIDAqLworCS8qQ0ZJX1JFTF9PRkZTRVQgZnMsIDAqLwogCW1vdmwgJChfX0tFUk5FTF9QREEpLCAlZWN4Ci0JbW92bCAlZWN4LCAlZ3MKKwltb3ZsICVlY3gsICVmcwogCVVOV0lORF9FU1BGSVhfU1RBQ0sKIAlwb3BsICVlY3gKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKIAkvKkNGSV9SRUdJU1RFUiBlcywgZWN4Ki8KLQltb3ZsIFBUX0dTKCVlc3ApLCAlZWRpCQkjIGdldCB0aGUgZnVuY3Rpb24gYWRkcmVzcworCW1vdmwgUFRfRlMoJWVzcCksICVlZGkJCSMgZ2V0IHRoZSBmdW5jdGlvbiBhZGRyZXNzCiAJbW92bCBQVF9PUklHX0VBWCglZXNwKSwgJWVkeAkjIGdldCB0aGUgZXJyb3IgY29kZQogCW1vdmwgJC0xLCBQVF9PUklHX0VBWCglZXNwKQkjIG5vIHN5c2NhbGwgdG8gcmVzdGFydAotCW1vdiAgJWVjeCwgUFRfR1MoJWVzcCkKLQkvKkNGSV9SRUxfT0ZGU0VUIGdzLCBFUyovCisJbW92ICAlZWN4LCBQVF9GUyglZXNwKQorCS8qQ0ZJX1JFTF9PRkZTRVQgZnMsIEVTKi8KIAltb3ZsICQoX19VU0VSX0RTKSwgJWVjeAogCW1vdmwgJWVjeCwgJWRzCiAJbW92bCAlZWN4LCAlZXMKQEAgLTY5Miw2ICs3MTQsNyBAQAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJam1wIGVycm9yX2NvZGUKIAlDRklfRU5EUFJPQworRU5EKGNvcHJvY2Vzc29yX2Vycm9yKQogCiBFTlRSWShzaW1kX2NvcHJvY2Vzc29yX2Vycm9yKQogCVJJTkcwX0lOVF9GUkFNRQpAQCAtNzAxLDYgKzcyNCw3IEBACiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAlqbXAgZXJyb3JfY29kZQogCUNGSV9FTkRQUk9DCitFTkQoc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvcikKIAogRU5UUlkoZGV2aWNlX25vdF9hdmFpbGFibGUpCiAJUklORzBfSU5UX0ZSQU1FCkBAIC03MjEsNiArNzQ1LDcgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKIAlqbXAgcmV0X2Zyb21fZXhjZXB0aW9uCiAJQ0ZJX0VORFBST0MKK0VORChkZXZpY2Vfbm90X2F2YWlsYWJsZSkKIAogLyoKICAqIERlYnVnIHRyYXBzIGFuZCBOTUkgY2FuIGhhcHBlbiBhdCB0aGUgb25lIFNZU0VOVEVSIGluc3RydWN0aW9uCkBAIC04NjQsMTAgKzg4OSwxMiBAQAogCS5hbGlnbiA0CiAJLmxvbmcgMWIsaXJldF9leGMKIC5wcmV2aW91cworRU5EKG5hdGl2ZV9pcmV0KQogCiBFTlRSWShuYXRpdmVfaXJxX2VuYWJsZV9zeXNleGl0KQogCXN0aQogCXN5c2V4aXQKK0VORChuYXRpdmVfaXJxX2VuYWJsZV9zeXNleGl0KQogI2VuZGlmCiAKIEtQUk9CRV9FTlRSWShpbnQzKQpAQCAtODkwLDYgKzkxNyw3IEBACiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAlqbXAgZXJyb3JfY29kZQogCUNGSV9FTkRQUk9DCitFTkQob3ZlcmZsb3cpCiAKIEVOVFJZKGJvdW5kcykKIAlSSU5HMF9JTlRfRlJBTUUKQEAgLTg5OSw2ICs5MjcsNyBAQAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJam1wIGVycm9yX2NvZGUKIAlDRklfRU5EUFJPQworRU5EKGJvdW5kcykKIAogRU5UUlkoaW52YWxpZF9vcCkKIAlSSU5HMF9JTlRfRlJBTUUKQEAgLTkwOCw2ICs5MzcsNyBAQAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJam1wIGVycm9yX2NvZGUKIAlDRklfRU5EUFJPQworRU5EKGludmFsaWRfb3ApCiAKIEVOVFJZKGNvcHJvY2Vzc29yX3NlZ21lbnRfb3ZlcnJ1bikKIAlSSU5HMF9JTlRfRlJBTUUKQEAgLTkxNyw2ICs5NDcsNyBAQAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJam1wIGVycm9yX2NvZGUKIAlDRklfRU5EUFJPQworRU5EKGNvcHJvY2Vzc29yX3NlZ21lbnRfb3ZlcnJ1bikKIAogRU5UUlkoaW52YWxpZF9UU1MpCiAJUklORzBfRUNfRlJBTUUKQEAgLTkyNCw2ICs5NTUsNyBAQAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJam1wIGVycm9yX2NvZGUKIAlDRklfRU5EUFJPQworRU5EKGludmFsaWRfVFNTKQogCiBFTlRSWShzZWdtZW50X25vdF9wcmVzZW50KQogCVJJTkcwX0VDX0ZSQU1FCkBAIC05MzEsNiArOTYzLDcgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCWptcCBlcnJvcl9jb2RlCiAJQ0ZJX0VORFBST0MKK0VORChzZWdtZW50X25vdF9wcmVzZW50KQogCiBFTlRSWShzdGFja19zZWdtZW50KQogCVJJTkcwX0VDX0ZSQU1FCkBAIC05MzgsNiArOTcxLDcgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCWptcCBlcnJvcl9jb2RlCiAJQ0ZJX0VORFBST0MKK0VORChzdGFja19zZWdtZW50KQogCiBLUFJPQkVfRU5UUlkoZ2VuZXJhbF9wcm90ZWN0aW9uKQogCVJJTkcwX0VDX0ZSQU1FCkBAIC05NTMsNiArOTg3LDcgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCWptcCBlcnJvcl9jb2RlCiAJQ0ZJX0VORFBST0MKK0VORChhbGlnbm1lbnRfY2hlY2spCiAKIEVOVFJZKGRpdmlkZV9lcnJvcikKIAlSSU5HMF9JTlRfRlJBTUUKQEAgLTk2Miw2ICs5OTcsNyBAQAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJam1wIGVycm9yX2NvZGUKIAlDRklfRU5EUFJPQworRU5EKGRpdmlkZV9lcnJvcikKIAogI2lmZGVmIENPTkZJR19YODZfTUNFCiBFTlRSWShtYWNoaW5lX2NoZWNrKQpAQCAtOTcyLDYgKzEwMDgsNyBAQAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJam1wIGVycm9yX2NvZGUKIAlDRklfRU5EUFJPQworRU5EKG1hY2hpbmVfY2hlY2spCiAjZW5kaWYKIAogRU5UUlkoc3B1cmlvdXNfaW50ZXJydXB0X2J1ZykKQEAgLTk4Miw2ICsxMDE5LDcgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCWptcCBlcnJvcl9jb2RlCiAJQ0ZJX0VORFBST0MKK0VORChzcHVyaW91c19pbnRlcnJ1cHRfYnVnKQogCiBFTlRSWShrZXJuZWxfdGhyZWFkX2hlbHBlcikKIAlwdXNobCAkMAkJIyBmYWtlIHJldHVybiBhZGRyZXNzIGZvciB1bndpbmRlcgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9oZWFkLlMgYi9hcmNoL2kzODYva2VybmVsL2hlYWQuUwppbmRleCBjYjlhYmRmLi4zZmE3ZjkzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2kzODYva2VybmVsL2hlYWQuUwpAQCAtNTMsNiArNTMsNyBAQAogICogYW55IHBhcnRpY3VsYXIgR0RUIGxheW91dCwgYmVjYXVzZSB3ZSBsb2FkIG91ciBvd24gYXMgc29vbiBhcyB3ZQogICogY2FuLgogICovCisuc2VjdGlvbiAudGV4dC5oZWFkLCJheCIsQHByb2diaXRzCiBFTlRSWShzdGFydHVwXzMyKQogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCkBAIC0xNDEsMTYgKzE0MiwyNSBAQAogCWpiIDEwYgogCW1vdmwgJWVkaSwoaW5pdF9wZ190YWJsZXNfZW5kIC0gX19QQUdFX09GRlNFVCkKIAotI2lmZGVmIENPTkZJR19TTVAKIAl4b3JsICVlYngsJWVieAkJCQkvKiBUaGlzIGlzIHRoZSBib290IENQVSAoQlNQKSAqLwogCWptcCAzZgotCiAvKgogICogTm9uLWJvb3QgQ1BVIGVudHJ5IHBvaW50OyBlbnRlcmVkIGZyb20gdHJhbXBvbGluZS5TCiAgKiBXZSBjYW4ndCBsZ2R0IGhlcmUsIGJlY2F1c2UgbGdkdCBpdHNlbGYgdXNlcyBhIGRhdGEgc2VnbWVudCwgYnV0CiAgKiB3ZSBrbm93IHRoZSB0cmFtcG9saW5lIGhhcyBhbHJlYWR5IGxvYWRlZCB0aGUgYm9vdF9nZHRfdGFibGUgR0RUCiAgKiBmb3IgdXMuCisgKgorICogSWYgY3B1IGhvdHBsdWcgaXMgbm90IHN1cHBvcnRlZCB0aGVuIHRoaXMgY29kZSBjYW4gZ28gaW4gaW5pdCBzZWN0aW9uCisgKiB3aGljaCB3aWxsIGJlIGZyZWVkIGxhdGVyCiAgKi8KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorLnNlY3Rpb24gLnRleHQsImF4IixAcHJvZ2JpdHMKKyNlbHNlCisuc2VjdGlvbiAuaW5pdC50ZXh0LCJheCIsQHByb2diaXRzCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TTVAKIEVOVFJZKHN0YXJ0dXBfMzJfc21wKQogCWNsZAogCW1vdmwgJChfX0JPT1RfRFMpLCVlYXgKQEAgLTIwOCw4ICsyMTgsOCBAQAogCXhvcmwgJWVieCwlZWJ4CiAJaW5jbCAlZWJ4CiAKLTM6CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLworMzoKIAogLyoKICAqIEVuYWJsZSBwYWdpbmcKQEAgLTMwOSw3ICszMTksNyBAQAogCiAJY2FsbCBjaGVja194ODcKIAljYWxsIHNldHVwX3BkYQotCWxnZHQgY3B1X2dkdF9kZXNjcgorCWxnZHQgZWFybHlfZ2R0X2Rlc2NyCiAJbGlkdCBpZHRfZGVzY3IKIAlsam1wICQoX19LRVJORUxfQ1MpLCQxZgogMToJbW92bCAkKF9fS0VSTkVMX0RTKSwlZWF4CSMgcmVsb2FkIGFsbCB0aGUgc2VnbWVudCByZWdpc3RlcnMKQEAgLTMxOSwxMiArMzI5LDEyIEBACiAJbW92bCAlZWF4LCVkcwogCW1vdmwgJWVheCwlZXMKIAotCXhvcmwgJWVheCwlZWF4CQkJIyBDbGVhciBGUyBhbmQgTERUCi0JbW92bCAlZWF4LCVmcworCXhvcmwgJWVheCwlZWF4CQkJIyBDbGVhciBHUyBhbmQgTERUCisJbW92bCAlZWF4LCVncwogCWxsZHQgJWF4CiAKIAltb3ZsICQoX19LRVJORUxfUERBKSwlZWF4Ci0JbW92ICAlZWF4LCVncworCW1vdiAgJWVheCwlZnMKIAogCWNsZAkJCSMgZ2NjMiB3YW50cyB0aGUgZGlyZWN0aW9uIGZsYWcgY2xlYXJlZCBhdCBhbGwgdGltZXMKIAlwdXNobCAkMAkJIyBmYWtlIHJldHVybiBhZGRyZXNzIGZvciB1bndpbmRlcgpAQCAtMzYwLDEyICszNzAsMTIgQEAKICAqIGNwdV9nZHRfdGFibGUgYW5kIGJvb3RfcGRhOyBmb3Igc2Vjb25kYXJ5IENQVXMsIHRoZXNlIHdpbGwgYmUKICAqIHRoYXQgQ1BVJ3MgR0RUIGFuZCBQREEuCiAgKi8KLXNldHVwX3BkYToKK0VOVFJZKHNldHVwX3BkYSkKIAkvKiBnZXQgdGhlIFBEQSBwb2ludGVyICovCiAJbW92bCBzdGFydF9wZGEsICVlYXgKIAogCS8qIHNsb3QgdGhlIFBEQSBhZGRyZXNzIGludG8gdGhlIEdEVCAqLwotCW1vdiBjcHVfZ2R0X2Rlc2NyKzIsICVlY3gKKwltb3YgZWFybHlfZ2R0X2Rlc2NyKzIsICVlY3gKIAltb3YgJWF4LCAoX19LRVJORUxfUERBKzArMikoJWVjeCkJCS8qIGJhc2UgJiAweDAwMDBmZmZmICovCiAJc2hyICQxNiwgJWVheAogCW1vdiAlYWwsIChfX0tFUk5FTF9QREErNCswKSglZWN4KQkJLyogYmFzZSAmIDB4MDBmZjAwMDAgKi8KQEAgLTQ5Miw2ICs1MDIsNyBAQAogI2VuZGlmCiAJaXJldAogCisuc2VjdGlvbiAudGV4dAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogc3RhcnR1cF9wYXJhdmlydDoKIAljbGQKQEAgLTUwMiwxMCArNTEzLDExIEBACiAJcHVzaGwJJWVjeAogCXB1c2hsCSVlYXgKIAotCS8qIHBhcmF2aXJ0Lm8gaXMgbGFzdCBpbiBsaW5rLCBhbmQgdGhhdCBwcm9iZSBmbiBuZXZlciByZXR1cm5zICovCiAJcHVzaGwJJF9fc3RhcnRfcGFyYXZpcnRwcm9iZQogMToKIAltb3ZsCTAoJWVzcCksICVlYXgKKwljbXBsCSRfX3N0b3BfcGFyYXZpcnRwcm9iZSwgJWVheAorCWplCXVuaGFuZGxlZF9wYXJhdmlydAogCXB1c2hsCSglZWF4KQogCW1vdmwJOCglZXNwKSwgJWVheAogCWNhbGwJKiglZXNwKQpAQCAtNTE3LDYgKzUyOSwxMCBAQAogCiAJYWRkbAkkNCwgKCVlc3ApCiAJam1wCTFiCisKK3VuaGFuZGxlZF9wYXJhdmlydDoKKwkvKiBOb3RoaW5nIHdhbnRlZCB1czogd2UncmUgc2NyZXdlZC4gKi8KKwl1ZDIKICNlbmRpZgogCiAvKgpAQCAtNTgxLDcgKzU5Nyw3IEBACiAKICMgYm9vdCBHRFQgZGVzY3JpcHRvciAobGF0ZXIgb24gdXNlZCBieSBDUFUjMCk6CiAJLndvcmQgMAkJCQkjIDMyIGJpdCBhbGlnbiBnZHRfZGVzYy5hZGRyZXNzCi1FTlRSWShjcHVfZ2R0X2Rlc2NyKQorRU5UUlkoZWFybHlfZ2R0X2Rlc2NyKQogCS53b3JkIEdEVF9FTlRSSUVTKjgtMQogCS5sb25nIGNwdV9nZHRfdGFibGUKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9ocGV0LmMgYi9hcmNoL2kzODYva2VybmVsL2hwZXQuYwppbmRleCAwYjI5ZDQxLi5lMTAwNmI3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL2kzODYva2VybmVsL2hwZXQuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2hwZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC02LDE3ICs3LDI3OCBAQAogI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKK2V4dGVybiBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpnbG9iYWxfY2xvY2tfZXZlbnQ7CisKICNkZWZpbmUgSFBFVF9NQVNLCUNMT0NLU09VUkNFX01BU0soMzIpCiAjZGVmaW5lIEhQRVRfU0hJRlQJMjIKIAogLyogRlNFQyA9IDEwXi0xNSBOU0VDID0gMTBeLTkgKi8KICNkZWZpbmUgRlNFQ19QRVJfTlNFQwkxMDAwMDAwCiAKLXN0YXRpYyB2b2lkIF9faW9tZW0gKmhwZXRfcHRyOworLyoKKyAqIEhQRVQgYWRkcmVzcyBpcyBzZXQgaW4gYWNwaS9ib290LmMsIHdoZW4gYW4gQUNQSSBlbnRyeSBleGlzdHMKKyAqLwordW5zaWduZWQgbG9uZyBocGV0X2FkZHJlc3M7CitzdGF0aWMgdm9pZCBfX2lvbWVtICogaHBldF92aXJ0X2FkZHJlc3M7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBocGV0X3JlYWRsKHVuc2lnbmVkIGxvbmcgYSkKK3sKKwlyZXR1cm4gcmVhZGwoaHBldF92aXJ0X2FkZHJlc3MgKyBhKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhwZXRfd3JpdGVsKHVuc2lnbmVkIGxvbmcgZCwgdW5zaWduZWQgbG9uZyBhKQoreworCXdyaXRlbChkLCBocGV0X3ZpcnRfYWRkcmVzcyArIGEpOworfQorCisvKgorICogSFBFVCBjb21tYW5kIGxpbmUgZW5hYmxlIC8gZGlzYWJsZQorICovCitzdGF0aWMgaW50IGJvb3RfaHBldF9kaXNhYmxlOworCitzdGF0aWMgaW50IF9faW5pdCBocGV0X3NldHVwKGNoYXIqIHN0cikKK3sKKwlpZiAoc3RyKSB7CisJCWlmICghc3RybmNtcCgiZGlzYWJsZSIsIHN0ciwgNykpCisJCQlib290X2hwZXRfZGlzYWJsZSA9IDE7CisJfQorCXJldHVybiAxOworfQorX19zZXR1cCgiaHBldD0iLCBocGV0X3NldHVwKTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfaHBldF9jYXBhYmxlKHZvaWQpCit7CisJcmV0dXJuICghYm9vdF9ocGV0X2Rpc2FibGUgJiYgaHBldF9hZGRyZXNzKTsKK30KKworLyoKKyAqIEhQRVQgdGltZXIgaW50ZXJydXB0IGVuYWJsZSAvIGRpc2FibGUKKyAqLworc3RhdGljIGludCBocGV0X2xlZ2FjeV9pbnRfZW5hYmxlZDsKKworLyoqCisgKiBpc19ocGV0X2VuYWJsZWQgLSBjaGVjayB3aGV0aGVyIHRoZSBocGV0IHRpbWVyIGludGVycnVwdCBpcyBlbmFibGVkCisgKi8KK2ludCBpc19ocGV0X2VuYWJsZWQodm9pZCkKK3sKKwlyZXR1cm4gaXNfaHBldF9jYXBhYmxlKCkgJiYgaHBldF9sZWdhY3lfaW50X2VuYWJsZWQ7Cit9CisKKy8qCisgKiBXaGVuIHRoZSBocGV0IGRyaXZlciAoL2Rldi9ocGV0KSBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIHJlc2VydmUKKyAqIHRpbWVyIDAgYW5kIHRpbWVyIDEgaW4gY2FzZSBvZiBSVEMgZW11bGF0aW9uLgorICovCisjaWZkZWYgQ09ORklHX0hQRVQKK3N0YXRpYyB2b2lkIGhwZXRfcmVzZXJ2ZV9wbGF0Zm9ybV90aW1lcnModW5zaWduZWQgbG9uZyBpZCkKK3sKKwlzdHJ1Y3QgaHBldCBfX2lvbWVtICpocGV0ID0gaHBldF92aXJ0X2FkZHJlc3M7CisJc3RydWN0IGhwZXRfdGltZXIgX19pb21lbSAqdGltZXIgPSAmaHBldC0+aHBldF90aW1lcnNbMl07CisJdW5zaWduZWQgaW50IG5ydGltZXJzLCBpOworCXN0cnVjdCBocGV0X2RhdGEgaGQ7CisKKwlucnRpbWVycyA9ICgoaWQgJiBIUEVUX0lEX05VTUJFUikgPj4gSFBFVF9JRF9OVU1CRVJfU0hJRlQpICsgMTsKKworCW1lbXNldCgmaGQsIDAsIHNpemVvZiAoaGQpKTsKKwloZC5oZF9waHlzX2FkZHJlc3MgPSBocGV0X2FkZHJlc3M7CisJaGQuaGRfYWRkcmVzcyA9IGhwZXRfdmlydF9hZGRyZXNzOworCWhkLmhkX25pcnFzID0gbnJ0aW1lcnM7CisJaGQuaGRfZmxhZ3MgPSBIUEVUX0RBVEFfUExBVEZPUk07CisJaHBldF9yZXNlcnZlX3RpbWVyKCZoZCwgMCk7CisKKyNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQworCWhwZXRfcmVzZXJ2ZV90aW1lcigmaGQsIDEpOworI2VuZGlmCisKKwloZC5oZF9pcnFbMF0gPSBIUEVUX0xFR0FDWV84MjU0OworCWhkLmhkX2lycVsxXSA9IEhQRVRfTEVHQUNZX1JUQzsKKworCWZvciAoaSA9IDI7IGkgPCBucnRpbWVyczsgdGltZXIrKywgaSsrKQorCQloZC5oZF9pcnFbaV0gPSAodGltZXItPmhwZXRfY29uZmlnICYgVG5fSU5UX1JPVVRFX0NORl9NQVNLKSA+PgorCQkJVG5fSU5UX1JPVVRFX0NORl9TSElGVDsKKworCWhwZXRfYWxsb2MoJmhkKTsKKworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGhwZXRfcmVzZXJ2ZV9wbGF0Zm9ybV90aW1lcnModW5zaWduZWQgbG9uZyBpZCkgeyB9CisjZW5kaWYKKworLyoKKyAqIENvbW1vbiBocGV0IGluZm8KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBldF9wZXJpb2Q7CisKK3N0YXRpYyB2b2lkIGhwZXRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7CitzdGF0aWMgaW50IGhwZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KTsKKworLyoKKyAqIFRoZSBocGV0IGNsb2NrIGV2ZW50IGRldmljZQorICovCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBocGV0X2Nsb2NrZXZlbnQgPSB7CisJLm5hbWUJCT0gImhwZXQiLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuc2V0X21vZGUJPSBocGV0X3NldF9tb2RlLAorCS5zZXRfbmV4dF9ldmVudCA9IGhwZXRfbmV4dF9ldmVudCwKKwkuc2hpZnQJCT0gMzIsCisJLmlycQkJPSAwLAorfTsKKworc3RhdGljIHZvaWQgaHBldF9zdGFydF9jb3VudGVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjZmcgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKKworCWNmZyAmPSB+SFBFVF9DRkdfRU5BQkxFOworCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9DRkcpOworCWhwZXRfd3JpdGVsKDAsIEhQRVRfQ09VTlRFUik7CisJaHBldF93cml0ZWwoMCwgSFBFVF9DT1VOVEVSICsgNCk7CisJY2ZnIHw9IEhQRVRfQ0ZHX0VOQUJMRTsKKwlocGV0X3dyaXRlbChjZmcsIEhQRVRfQ0ZHKTsKK30KKworc3RhdGljIHZvaWQgaHBldF9lbmFibGVfaW50KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjZmcgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKKworCWNmZyB8PSBIUEVUX0NGR19MRUdBQ1k7CisJaHBldF93cml0ZWwoY2ZnLCBIUEVUX0NGRyk7CisJaHBldF9sZWdhY3lfaW50X2VuYWJsZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBocGV0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdW5zaWduZWQgbG9uZyBjZmcsIGNtcCwgbm93OworCXVpbnQ2NF90IGRlbHRhOworCisJc3dpdGNoKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlkZWx0YSA9ICgodWludDY0X3QpKE5TRUNfUEVSX1NFQy9IWikpICogaHBldF9jbG9ja2V2ZW50Lm11bHQ7CisJCWRlbHRhID4+PSBocGV0X2Nsb2NrZXZlbnQuc2hpZnQ7CisJCW5vdyA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKKwkJY21wID0gbm93ICsgKHVuc2lnbmVkIGxvbmcpIGRlbHRhOworCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVDBfQ0ZHKTsKKwkJY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl9QRVJJT0RJQyB8CisJCSAgICAgICBIUEVUX1ROX1NFVFZBTCB8IEhQRVRfVE5fMzJCSVQ7CisJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMF9DRkcpOworCQkvKgorCQkgKiBUaGUgZmlyc3Qgd3JpdGUgYWZ0ZXIgd3JpdGluZyBUTl9TRVRWQUwgdG8gdGhlCisJCSAqIGNvbmZpZyByZWdpc3RlciBzZXRzIHRoZSBjb3VudGVyIHZhbHVlLCB0aGUgc2Vjb25kCisJCSAqIHdyaXRlIHNldHMgdGhlIHBlcmlvZC4KKwkJICovCisJCWhwZXRfd3JpdGVsKGNtcCwgSFBFVF9UMF9DTVApOworCQl1ZGVsYXkoMSk7CisJCWhwZXRfd3JpdGVsKCh1bnNpZ25lZCBsb25nKSBkZWx0YSwgSFBFVF9UMF9DTVApOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1QwX0NGRyk7CisJCWNmZyAmPSB+SFBFVF9UTl9QRVJJT0RJQzsKKwkJY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl8zMkJJVDsKKwkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1QwX0NGRyk7CisJCWJyZWFrOworCisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1QwX0NGRyk7CisJCWNmZyAmPSB+SFBFVF9UTl9FTkFCTEU7CisJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMF9DRkcpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaHBldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQkgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdW5zaWduZWQgbG9uZyBjbnQ7CisKKwljbnQgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7CisJY250ICs9IGRlbHRhOworCWhwZXRfd3JpdGVsKGNudCwgSFBFVF9UMF9DTVApOworCisJcmV0dXJuICgobG9uZykoaHBldF9yZWFkbChIUEVUX0NPVU5URVIpIC0gY250ICkgPiAwKTsKK30KKworLyoKKyAqIFRyeSB0byBzZXR1cCB0aGUgSFBFVCB0aW1lcgorICovCitpbnQgX19pbml0IGhwZXRfZW5hYmxlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBpZDsKKwl1aW50NjRfdCBocGV0X2ZyZXE7CisKKwlpZiAoIWlzX2hwZXRfY2FwYWJsZSgpKQorCQlyZXR1cm4gMDsKKworCWhwZXRfdmlydF9hZGRyZXNzID0gaW9yZW1hcF9ub2NhY2hlKGhwZXRfYWRkcmVzcywgSFBFVF9NTUFQX1NJWkUpOworCisJLyoKKwkgKiBSZWFkIHRoZSBwZXJpb2QgYW5kIGNoZWNrIGZvciBhIHNhbmUgdmFsdWU6CisJICovCisJaHBldF9wZXJpb2QgPSBocGV0X3JlYWRsKEhQRVRfUEVSSU9EKTsKKwlpZiAoaHBldF9wZXJpb2QgPCBIUEVUX01JTl9QRVJJT0QgfHwgaHBldF9wZXJpb2QgPiBIUEVUX01BWF9QRVJJT0QpCisJCWdvdG8gb3V0X25vaHBldDsKKworCS8qCisJICogVGhlIHBlcmlvZCBpcyBhIGZlbXRvIHNlY29uZHMgdmFsdWUuIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZQorCSAqIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgbmFub3NlY29uZCB0byBocGV0IHRpY2sKKwkgKiBjb252ZXJzaW9uLgorCSAqLworCWhwZXRfZnJlcSA9IDEwMDAwMDAwMDAwMDAwMDBVTEw7CisJZG9fZGl2KGhwZXRfZnJlcSwgaHBldF9wZXJpb2QpOworCWhwZXRfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKCh1bnNpZ25lZCBsb25nKSBocGV0X2ZyZXEsCisJCQkJICAgICAgTlNFQ19QRVJfU0VDLCAzMik7CisJLyogQ2FsY3VsYXRlIHRoZSBtaW4gLyBtYXggZGVsdGEgKi8KKwlocGV0X2Nsb2NrZXZlbnQubWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDdGRkZGRkZGLAorCQkJCQkJCSAgICZocGV0X2Nsb2NrZXZlbnQpOworCWhwZXRfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4MzAsCisJCQkJCQkJICAgJmhwZXRfY2xvY2tldmVudCk7CisKKwkvKgorCSAqIFJlYWQgdGhlIEhQRVQgSUQgcmVnaXN0ZXIgdG8gcmV0cmlldmUgdGhlIElSUSByb3V0aW5nCisJICogaW5mb3JtYXRpb24gYW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKKwkgKi8KKwlpZCA9IGhwZXRfcmVhZGwoSFBFVF9JRCk7CisKKyNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQworCS8qCisJICogVGhlIGxlZ2FjeSByb3V0aW5nIG1vZGUgbmVlZHMgYXQgbGVhc3QgdHdvIGNoYW5uZWxzLCB0aWNrIHRpbWVyCisJICogYW5kIHRoZSBydGMgZW11bGF0aW9uIGNoYW5uZWwuCisJICovCisJaWYgKCEoaWQgJiBIUEVUX0lEX05VTUJFUikpCisJCWdvdG8gb3V0X25vaHBldDsKKyNlbmRpZgorCisJLyogU3RhcnQgdGhlIGNvdW50ZXIgKi8KKwlocGV0X3N0YXJ0X2NvdW50ZXIoKTsKKworCWlmIChpZCAmIEhQRVRfSURfTEVHU1VQKSB7CisJCWhwZXRfZW5hYmxlX2ludCgpOworCQlocGV0X3Jlc2VydmVfcGxhdGZvcm1fdGltZXJzKGlkKTsKKwkJLyoKKwkJICogU3RhcnQgaHBldCB3aXRoIHRoZSBib290IGNwdSBtYXNrIGFuZCBtYWtlIGl0CisJCSAqIGdsb2JhbCBhZnRlciB0aGUgSU9fQVBJQyBoYXMgYmVlbiBpbml0aWFsaXplZC4KKwkJICovCisJCWhwZXRfY2xvY2tldmVudC5jcHVtYXNrID1jcHVtYXNrX29mX2NwdSgwKTsKKwkJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZocGV0X2Nsb2NrZXZlbnQpOworCQlnbG9iYWxfY2xvY2tfZXZlbnQgPSAmaHBldF9jbG9ja2V2ZW50OworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CisKK291dF9ub2hwZXQ6CisJaW91bm1hcChocGV0X3ZpcnRfYWRkcmVzcyk7CisJaHBldF92aXJ0X2FkZHJlc3MgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKgorICogQ2xvY2sgc291cmNlIHJlbGF0ZWQgY29kZQorICovCiBzdGF0aWMgY3ljbGVfdCByZWFkX2hwZXQodm9pZCkKIHsKLQlyZXR1cm4gKGN5Y2xlX3QpcmVhZGwoaHBldF9wdHIpOworCXJldHVybiAoY3ljbGVfdClocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfaHBldCA9IHsKQEAgLTI0LDI4ICsyODYsMTcgQEAKIAkucmF0aW5nCQk9IDI1MCwKIAkucmVhZAkJPSByZWFkX2hwZXQsCiAJLm1hc2sJCT0gSFBFVF9NQVNLLAotCS5tdWx0CQk9IDAsIC8qIHNldCBiZWxvdyAqLwogCS5zaGlmdAkJPSBIUEVUX1NISUZULAotCS5pc19jb250aW51b3VzCT0gMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2hwZXRfY2xvY2tzb3VyY2Uodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGhwZXRfcGVyaW9kOwotCXZvaWQgX19pb21lbSogaHBldF9iYXNlOwogCXU2NCB0bXA7Ci0JaW50IGVycjsKIAotCWlmICghaXNfaHBldF9lbmFibGVkKCkpCisJaWYgKCFocGV0X3ZpcnRfYWRkcmVzcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBjYWxjdWxhdGUgdGhlIGhwZXQgYWRkcmVzczogKi8KLQlocGV0X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoaHBldF9hZGRyZXNzLCBIUEVUX01NQVBfU0laRSk7Ci0JaHBldF9wdHIgPSBocGV0X2Jhc2UgKyBIUEVUX0NPVU5URVI7Ci0KLQkvKiBjYWxjdWxhdGUgdGhlIGZyZXF1ZW5jeTogKi8KLQlocGV0X3BlcmlvZCA9IHJlYWRsKGhwZXRfYmFzZSArIEhQRVRfUEVSSU9EKTsKLQogCS8qCiAJICogaHBldCBwZXJpb2QgaXMgaW4gZmVtdG8gc2Vjb25kcyBwZXIgY3ljbGUKIAkgKiBzbyB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhpcyB0byBucy9jeWMgdW5pdHMKQEAgLTYxLDExICszMTIsMjE4IEBACiAJZG9fZGl2KHRtcCwgRlNFQ19QRVJfTlNFQyk7CiAJY2xvY2tzb3VyY2VfaHBldC5tdWx0ID0gKHUzMil0bXA7CiAKLQllcnIgPSBjbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfaHBldCk7Ci0JaWYgKGVycikKLQkJaW91bm1hcChocGV0X2Jhc2UpOwotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2hwZXQpOwogfQogCiBtb2R1bGVfaW5pdChpbml0X2hwZXRfY2xvY2tzb3VyY2UpOworCisjaWZkZWYgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKKworLyogSFBFVCBpbiBMZWdhY3lSZXBsYWNlbWVudCBNb2RlIGVhdHMgdXAgUlRDIGludGVycnVwdCBsaW5lLiBXaGVuLCBIUEVUCisgKiBpcyBlbmFibGVkLCB3ZSBzdXBwb3J0IFJUQyBpbnRlcnJ1cHQgZnVuY3Rpb25hbGl0eSBpbiBzb2Z0d2FyZS4KKyAqIFJUQyBoYXMgMyBraW5kcyBvZiBpbnRlcnJ1cHRzOgorICogMSkgVXBkYXRlIEludGVycnVwdCAtIGdlbmVyYXRlIGFuIGludGVycnVwdCwgZXZlcnkgc2VjLCB3aGVuIFJUQyBjbG9jaworICogICAgaXMgdXBkYXRlZAorICogMikgQWxhcm0gSW50ZXJydXB0IC0gZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGF0IGEgc3BlY2lmaWMgdGltZSBvZiBkYXkKKyAqIDMpIFBlcmlvZGljIEludGVycnVwdCAtIGdlbmVyYXRlIHBlcmlvZGljIGludGVycnVwdCwgd2l0aCBmcmVxdWVuY2llcworICogICAgMkh6LTgxOTJIeiAoMkh6LTY0SHogZm9yIG5vbi1yb290IHVzZXIpIChhbGwgZnJlcXMgaW4gcG93ZXJzIG9mIDIpCisgKiAoMSkgYW5kICgyKSBhYm92ZSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgcG9sbGluZyBhdCBhIGZyZXF1ZW5jeSBvZgorICogNjQgSHouIFRoZSBleGFjdCBmcmVxdWVuY3kgaXMgYSB0cmFkZW9mZiBiZXR3ZWVuIGFjY3VyYWN5IGFuZCBpbnRlcnJ1cHQKKyAqIG92ZXJoZWFkLiAoREVGQVVMVF9SVENfSU5UX0ZSRVEpCisgKiBGb3IgKDMpLCB3ZSB1c2UgaW50ZXJydXB0cyBhdCA2NEh6IG9yIHVzZXIgc3BlY2lmaWVkIHBlcmlvZGljCisgKiBmcmVxdWVuY3ksIHdoaWNoZXZlciBpcyBoaWdoZXIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorCisjZGVmaW5lIERFRkFVTFRfUlRDX0lOVF9GUkVRCTY0CisjZGVmaW5lIERFRkFVTFRfUlRDX1NISUZUCTYKKyNkZWZpbmUgUlRDX05VTV9JTlRTCQkxCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwZXRfcnRjX2ZsYWdzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBldF9wcmV2X3VwZGF0ZV9zZWM7CitzdGF0aWMgc3RydWN0IHJ0Y190aW1lIGhwZXRfYWxhcm1fdGltZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwZXRfcGllX2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBldF90MV9jbXA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBocGV0X2RlZmF1bHRfZGVsdGE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBocGV0X3BpZV9kZWx0YTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwZXRfcGllX2xpbWl0OworCisvKgorICogVGltZXIgMSBmb3IgUlRDIGVtdWxhdGlvbi4gV2UgdXNlIG9uZSBzaG90IG1vZGUsIGFzIHBlcmlvZGljIG1vZGUKKyAqIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIEhQRVQgaW1wbGVtZW50YXRpb25zIGZvciB0aW1lciAxLgorICoKKyAqIGhwZXRfcnRjX3RpbWVyX2luaXQoKSBpcyBjYWxsZWQgd2hlbiB0aGUgcnRjIGlzIGluaXRpYWxpemVkLgorICovCitpbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY2ZnLCBjbnQsIGRlbHRhLCBmbGFnczsKKworCWlmICghaXNfaHBldF9lbmFibGVkKCkpCisJCXJldHVybiAwOworCisJaWYgKCFocGV0X2RlZmF1bHRfZGVsdGEpIHsKKwkJdWludDY0X3QgY2xjOworCisJCWNsYyA9ICh1aW50NjRfdCkgaHBldF9jbG9ja2V2ZW50Lm11bHQgKiBOU0VDX1BFUl9TRUM7CisJCWNsYyA+Pj0gaHBldF9jbG9ja2V2ZW50LnNoaWZ0ICsgREVGQVVMVF9SVENfU0hJRlQ7CisJCWhwZXRfZGVmYXVsdF9kZWx0YSA9ICh1bnNpZ25lZCBsb25nKSBjbGM7CisJfQorCisJaWYgKCEoaHBldF9ydGNfZmxhZ3MgJiBSVENfUElFKSB8fCBocGV0X3BpZV9saW1pdCkKKwkJZGVsdGEgPSBocGV0X2RlZmF1bHRfZGVsdGE7CisJZWxzZQorCQlkZWx0YSA9IGhwZXRfcGllX2RlbHRhOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJY250ID0gZGVsdGEgKyBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7CisJaHBldF93cml0ZWwoY250LCBIUEVUX1QxX0NNUCk7CisJaHBldF90MV9jbXAgPSBjbnQ7CisKKwljZmcgPSBocGV0X3JlYWRsKEhQRVRfVDFfQ0ZHKTsKKwljZmcgJj0gfkhQRVRfVE5fUEVSSU9ESUM7CisJY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl8zMkJJVDsKKwlocGV0X3dyaXRlbChjZmcsIEhQRVRfVDFfQ0ZHKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAxOworfQorCisvKgorICogVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgY2FsbGVkIGZyb20gcnRjIGRyaXZlci4KKyAqIFJldHVybiAwIGlmIEhQRVQgaXMgbm90IGJlaW5nIHVzZWQuCisgKiBPdGhlcndpc2UgZG8gdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzIGFuZCByZXR1cm4gMS4KKyAqLworaW50IGhwZXRfbWFza19ydGNfaXJxX2JpdCh1bnNpZ25lZCBsb25nIGJpdF9tYXNrKQoreworCWlmICghaXNfaHBldF9lbmFibGVkKCkpCisJCXJldHVybiAwOworCisJaHBldF9ydGNfZmxhZ3MgJj0gfmJpdF9tYXNrOworCXJldHVybiAxOworfQorCitpbnQgaHBldF9zZXRfcnRjX2lycV9iaXQodW5zaWduZWQgbG9uZyBiaXRfbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIG9sZGJpdHMgPSBocGV0X3J0Y19mbGFnczsKKworCWlmICghaXNfaHBldF9lbmFibGVkKCkpCisJCXJldHVybiAwOworCisJaHBldF9ydGNfZmxhZ3MgfD0gYml0X21hc2s7CisKKwlpZiAoIW9sZGJpdHMpCisJCWhwZXRfcnRjX3RpbWVyX2luaXQoKTsKKworCXJldHVybiAxOworfQorCitpbnQgaHBldF9zZXRfYWxhcm1fdGltZSh1bnNpZ25lZCBjaGFyIGhycywgdW5zaWduZWQgY2hhciBtaW4sCisJCQl1bnNpZ25lZCBjaGFyIHNlYykKK3sKKwlpZiAoIWlzX2hwZXRfZW5hYmxlZCgpKQorCQlyZXR1cm4gMDsKKworCWhwZXRfYWxhcm1fdGltZS50bV9ob3VyID0gaHJzOworCWhwZXRfYWxhcm1fdGltZS50bV9taW4gPSBtaW47CisJaHBldF9hbGFybV90aW1lLnRtX3NlYyA9IHNlYzsKKworCXJldHVybiAxOworfQorCitpbnQgaHBldF9zZXRfcGVyaW9kaWNfZnJlcSh1bnNpZ25lZCBsb25nIGZyZXEpCit7CisJdWludDY0X3QgY2xjOworCisJaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnJlcSA8PSBERUZBVUxUX1JUQ19JTlRfRlJFUSkKKwkJaHBldF9waWVfbGltaXQgPSBERUZBVUxUX1JUQ19JTlRfRlJFUSAvIGZyZXE7CisJZWxzZSB7CisJCWNsYyA9ICh1aW50NjRfdCkgaHBldF9jbG9ja2V2ZW50Lm11bHQgKiBOU0VDX1BFUl9TRUM7CisJCWRvX2RpdihjbGMsIGZyZXEpOworCQljbGMgPj49IGhwZXRfY2xvY2tldmVudC5zaGlmdDsKKwkJaHBldF9waWVfZGVsdGEgPSAodW5zaWduZWQgbG9uZykgY2xjOworCX0KKwlyZXR1cm4gMTsKK30KKworaW50IGhwZXRfcnRjX2Ryb3BwZWRfaXJxKHZvaWQpCit7CisJcmV0dXJuIGlzX2hwZXRfZW5hYmxlZCgpOworfQorCitzdGF0aWMgdm9pZCBocGV0X3J0Y190aW1lcl9yZWluaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNmZywgZGVsdGE7CisJaW50IGxvc3RfaW50cyA9IC0xOworCisJaWYgKHVubGlrZWx5KCFocGV0X3J0Y19mbGFncykpIHsKKwkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1QxX0NGRyk7CisJCWNmZyAmPSB+SFBFVF9UTl9FTkFCTEU7CisJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMV9DRkcpOworCQlyZXR1cm47CisJfQorCisJaWYgKCEoaHBldF9ydGNfZmxhZ3MgJiBSVENfUElFKSB8fCBocGV0X3BpZV9saW1pdCkKKwkJZGVsdGEgPSBocGV0X2RlZmF1bHRfZGVsdGE7CisJZWxzZQorCQlkZWx0YSA9IGhwZXRfcGllX2RlbHRhOworCisJLyoKKwkgKiBJbmNyZW1lbnQgdGhlIGNvbXBhcmF0b3IgdmFsdWUgdW50aWwgd2UgYXJlIGFoZWFkIG9mIHRoZQorCSAqIGN1cnJlbnQgY291bnQuCisJICovCisJZG8geworCQlocGV0X3QxX2NtcCArPSBkZWx0YTsKKwkJaHBldF93cml0ZWwoaHBldF90MV9jbXAsIEhQRVRfVDFfQ01QKTsKKwkJbG9zdF9pbnRzKys7CisJfSB3aGlsZSAoKGxvbmcpKGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKSAtIGhwZXRfdDFfY21wKSA+IDApOworCisJaWYgKGxvc3RfaW50cykgeworCQlpZiAoaHBldF9ydGNfZmxhZ3MgJiBSVENfUElFKQorCQkJaHBldF9waWVfY291bnQgKz0gbG9zdF9pbnRzOworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicnRjOiBsb3N0ICVkIGludGVycnVwdHNcbiIsCisJCQkJbG9zdF9pbnRzKTsKKwl9Cit9CisKK2lycXJldHVybl90IGhwZXRfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHJ0Y190aW1lIGN1cnJfdGltZTsKKwl1bnNpZ25lZCBsb25nIHJ0Y19pbnRfZmxhZyA9IDA7CisKKwlocGV0X3J0Y190aW1lcl9yZWluaXQoKTsKKworCWlmIChocGV0X3J0Y19mbGFncyAmIChSVENfVUlFIHwgUlRDX0FJRSkpCisJCXJ0Y19nZXRfcnRjX3RpbWUoJmN1cnJfdGltZSk7CisKKwlpZiAoaHBldF9ydGNfZmxhZ3MgJiBSVENfVUlFICYmCisJICAgIGN1cnJfdGltZS50bV9zZWMgIT0gaHBldF9wcmV2X3VwZGF0ZV9zZWMpIHsKKwkJcnRjX2ludF9mbGFnID0gUlRDX1VGOworCQlocGV0X3ByZXZfdXBkYXRlX3NlYyA9IGN1cnJfdGltZS50bV9zZWM7CisJfQorCisJaWYgKGhwZXRfcnRjX2ZsYWdzICYgUlRDX1BJRSAmJgorCSAgICArK2hwZXRfcGllX2NvdW50ID49IGhwZXRfcGllX2xpbWl0KSB7CisJCXJ0Y19pbnRfZmxhZyB8PSBSVENfUEY7CisJCWhwZXRfcGllX2NvdW50ID0gMDsKKwl9CisKKwlpZiAoaHBldF9ydGNfZmxhZ3MgJiBSVENfUElFICYmCisJICAgIChjdXJyX3RpbWUudG1fc2VjID09IGhwZXRfYWxhcm1fdGltZS50bV9zZWMpICYmCisJICAgIChjdXJyX3RpbWUudG1fbWluID09IGhwZXRfYWxhcm1fdGltZS50bV9taW4pICYmCisJICAgIChjdXJyX3RpbWUudG1faG91ciA9PSBocGV0X2FsYXJtX3RpbWUudG1faG91cikpCisJCQlydGNfaW50X2ZsYWcgfD0gUlRDX0FGOworCisJaWYgKHJ0Y19pbnRfZmxhZykgeworCQlydGNfaW50X2ZsYWcgfD0gKFJUQ19JUlFGIHwgKFJUQ19OVU1fSU5UUyA8PCA4KSk7CisJCXJ0Y19pbnRlcnJ1cHQocnRjX2ludF9mbGFnLCBkZXZfaWQpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvaTgyNTMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaTgyNTMuYwppbmRleCA5YTAwNjBiLi5hNmJjN2JiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2k4MjUzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9pODI1My5jCkBAIC0yLDcgKzIsNyBAQAogICogaTgyNTMuYyAgODI1My9QSVQgZnVuY3Rpb25zCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CkBAIC0xOSwyMCArMTksMTAwIEBACiBERUZJTkVfU1BJTkxPQ0soaTgyNTNfbG9jayk7CiBFWFBPUlRfU1lNQk9MKGk4MjUzX2xvY2spOwogCi12b2lkIHNldHVwX3BpdF90aW1lcih2b2lkKQorLyoKKyAqIEhQRVQgcmVwbGFjZXMgdGhlIFBJVCwgd2hlbiBlbmFibGVkLiBTbyB3ZSBuZWVkIHRvIGtub3csIHdoaWNoIG9mCisgKiB0aGUgdHdvIHRpbWVycyBpcyB1c2VkCisgKi8KK3N0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmdsb2JhbF9jbG9ja19ldmVudDsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIFBJVCB0aW1lci4KKyAqCisgKiBUaGlzIGlzIGFsc28gY2FsbGVkIGFmdGVyIHJlc3VtZSB0byBicmluZyB0aGUgUElUIGludG8gb3BlcmF0aW9uIGFnYWluLgorICovCitzdGF0aWMgdm9pZCBpbml0X3BpdF90aW1lcihlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjUzX2xvY2ssIGZsYWdzKTsKLQlvdXRiX3AoMHgzNCxQSVRfTU9ERSk7CQkvKiBiaW5hcnksIG1vZGUgMiwgTFNCL01TQiwgY2ggMCAqLwotCXVkZWxheSgxMCk7Ci0Jb3V0Yl9wKExBVENIICYgMHhmZiAsIFBJVF9DSDApOwkvKiBMU0IgKi8KLQl1ZGVsYXkoMTApOwotCW91dGIoTEFUQ0ggPj4gOCAsIFBJVF9DSDApOwkvKiBNU0IgKi8KKworCXN3aXRjaChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJLyogYmluYXJ5LCBtb2RlIDIsIExTQi9NU0IsIGNoIDAgKi8KKwkJb3V0Yl9wKDB4MzQsIFBJVF9NT0RFKTsKKwkJdWRlbGF5KDEwKTsKKwkJb3V0Yl9wKExBVENIICYgMHhmZiAsIFBJVF9DSDApOwkvKiBMU0IgKi8KKwkJdWRlbGF5KDEwKTsKKwkJb3V0YihMQVRDSCA+PiA4ICwgUElUX0NIMCk7CS8qIE1TQiAqLworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCQkvKiBPbmUgc2hvdCBzZXR1cCAqLworCQlvdXRiX3AoMHgzOCwgUElUX01PREUpOworCQl1ZGVsYXkoMTApOworCQlicmVhazsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTNfbG9jaywgZmxhZ3MpOwogfQogCiAvKgorICogUHJvZ3JhbSB0aGUgbmV4dCBldmVudCBpbiBvbmVzaG90IG1vZGUKKyAqCisgKiBEZWx0YSBpcyBnaXZlbiBpbiBQSVQgdGlja3MKKyAqLworc3RhdGljIGludCBwaXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1M19sb2NrLCBmbGFncyk7CisJb3V0Yl9wKGRlbHRhICYgMHhmZiAsIFBJVF9DSDApOwkvKiBMU0IgKi8KKwlvdXRiKGRlbHRhID4+IDggLCBQSVRfQ0gwKTsJLyogTVNCICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBPbiBVUCB0aGUgUElUIGNhbiBzZXJ2ZSBhbGwgb2YgdGhlIHBvc3NpYmxlIHRpbWVyIGZ1bmN0aW9ucy4gT24gU01QIHN5c3RlbXMKKyAqIGl0IGNhbiBiZSBzb2xlbHkgdXNlZCBmb3IgdGhlIGdsb2JhbCB0aWNrLgorICoKKyAqIFRoZSBwcm9maWxpbmcgYW5kIHVwZGF0ZSBjYXBhYmlsaXRlcyBhcmUgc3dpdGNoZWQgb2ZmIG9uY2UgdGhlIGxvY2FsIGFwaWMgaXMKKyAqIHJlZ2lzdGVyZWQuIFRoaXMgbWVjaGFuaXNtIHJlcGxhY2VzIHRoZSBwcmV2aW91cyAjaWZkZWYgTE9DQUxfQVBJQyAtCisgKiAhdXNpbmdfYXBpY190aW1lciBkZWNpc2lvbnMgaW4gZG9fdGltZXJfaW50ZXJydXB0X2hvb2soKQorICovCitzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHBpdF9jbG9ja2V2ZW50ID0geworCS5uYW1lCQk9ICJwaXQiLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuc2V0X21vZGUJPSBpbml0X3BpdF90aW1lciwKKwkuc2V0X25leHRfZXZlbnQgPSBwaXRfbmV4dF9ldmVudCwKKwkuc2hpZnQJCT0gMzIsCisJLmlycQkJPSAwLAorfTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGNvbnZlcnNpb24gZmFjdG9yIGFuZCB0aGUgbWluL21heCBkZWx0YXMgb2YgdGhlIGNsb2NrIGV2ZW50CisgKiBzdHJ1Y3R1cmUgYW5kIHJlZ2lzdGVyIHRoZSBjbG9jayBldmVudCBzb3VyY2Ugd2l0aCB0aGUgZnJhbWV3b3JrLgorICovCit2b2lkIF9faW5pdCBzZXR1cF9waXRfdGltZXIodm9pZCkKK3sKKwkvKgorCSAqIFN0YXJ0IHBpdCB3aXRoIHRoZSBib290IGNwdSBtYXNrIGFuZCBtYWtlIGl0IGdsb2JhbCBhZnRlciB0aGUKKwkgKiBJT19BUElDIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCSAqLworCXBpdF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mX2NwdSgwKTsKKwlwaXRfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKENMT0NLX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLCAzMik7CisJcGl0X2Nsb2NrZXZlbnQubWF4X2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygweDdGRkYsICZwaXRfY2xvY2tldmVudCk7CisJcGl0X2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygweEYsICZwaXRfY2xvY2tldmVudCk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZwaXRfY2xvY2tldmVudCk7CisJZ2xvYmFsX2Nsb2NrX2V2ZW50ID0gJnBpdF9jbG9ja2V2ZW50OworfQorCisvKgogICogU2luY2UgdGhlIFBJVCBvdmVyZmxvd3MgZXZlcnkgdGljaywgaXRzIG5vdCB2ZXJ5IHVzZWZ1bAogICogdG8ganVzdCByZWFkIGJ5IGl0c2VsZi4gU28gdXNlIGppZmZpZXMgdG8gZW11bGF0ZSBhIGZyZWUKICAqIHJ1bm5pbmcgY291bnRlcjoKQEAgLTQ2LDcgKzEyNiw3IEBACiAJc3RhdGljIHUzMiBvbGRfamlmczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1M19sb2NrLCBmbGFncyk7Ci0gICAgICAgIC8qCisJLyoKIAkgKiBBbHRob3VnaCBvdXIgY2FsbGVyIG1heSBoYXZlIHRoZSByZWFkIHNpZGUgb2YgeHRpbWVfbG9jaywKIAkgKiB0aGlzIGlzIG5vdyBhIHNlcWxvY2ssIGFuZCB3ZSBhcmUgY2hlYXRpbmcgaW4gdGhpcyByb3V0aW5lCiAJICogYnkgaGF2aW5nIHNpZGUgZWZmZWN0cyBvbiBzdGF0ZSB0aGF0IHdlIGNhbm5vdCB1bmRvIGlmCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2k4MjU5LmMgYi9hcmNoL2kzODYva2VybmVsL2k4MjU5LmMKaW5kZXggYzhkNDU4Mi4uMDNhYmZkYiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9pODI1OS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaTgyNTkuYwpAQCAtNDEsNiArNDEsNyBAQAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpODI1OUFfY2hpcCA9IHsKIAkubmFtZQkJPSAiWFQtUElDIiwKIAkubWFzawkJPSBkaXNhYmxlXzgyNTlBX2lycSwKKwkuZGlzYWJsZQk9IGRpc2FibGVfODI1OUFfaXJxLAogCS51bm1hc2sJCT0gZW5hYmxlXzgyNTlBX2lycSwKIAkubWFza19hY2sJPSBtYXNrX2FuZF9hY2tfODI1OUEsCiB9OwpAQCAtNDEwLDEyICs0MTEsNiBAQAogCWludHJfaW5pdF9ob29rKCk7CiAKIAkvKgotCSAqIFNldCB0aGUgY2xvY2sgdG8gSFogSHosIHdlIGFscmVhZHkgaGF2ZSBhIHZhbGlkCi0JICogdmVjdG9yIG5vdzoKLQkgKi8KLQlzZXR1cF9waXRfdGltZXIoKTsKLQotCS8qCiAJICogRXh0ZXJuYWwgRlBVPyBTZXQgdXAgaXJxMTMgaWYgc28sIGZvcgogCSAqIG9yaWdpbmFsIGJyYWluZGFtYWdlZCBJQk0gRkVSUiBjb3VwbGluZy4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMKaW5kZXggYmE4ZDMwMi4uNGNjZWJkNCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMKQEAgLTQ4Miw4ICs0ODIsOCBAQAogCQlwYWNrYWdlX2luZGV4ID0gQ1BVX1RPX1BBQ0tBR0VJTkRFWChpKTsKIAkJZm9yIChqID0gMDsgaiA8IE5SX0lSUVM7IGorKykgewogCQkJdW5zaWduZWQgbG9uZyB2YWx1ZV9ub3csIGRlbHRhOwotCQkJLyogSXMgdGhpcyBhbiBhY3RpdmUgSVJRPyAqLwotCQkJaWYgKCFpcnFfZGVzY1tqXS5hY3Rpb24pCisJCQkvKiBJcyB0aGlzIGFuIGFjdGl2ZSBJUlEgb3IgYmFsYW5jaW5nIGRpc2FibGVkID8gKi8KKwkJCWlmICghaXJxX2Rlc2Nbal0uYWN0aW9uIHx8IGlycV9iYWxhbmNpbmdfZGlzYWJsZWQoaikpCiAJCQkJY29udGludWU7CiAJCQlpZiAoIHBhY2thZ2VfaW5kZXggPT0gaSApCiAJCQkJSVJRX0RFTFRBKHBhY2thZ2VfaW5kZXgsaikgPSAwOwpAQCAtMTI4MSwxMSArMTI4MSw5IEBACiAJCQl0cmlnZ2VyID09IElPQVBJQ19MRVZFTCkKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCiAJCQkJCSBoYW5kbGVfZmFzdGVvaV9pcnEsICJmYXN0ZW9pIik7Ci0JZWxzZSB7Ci0JCWlycV9kZXNjW2lycV0uc3RhdHVzIHw9IElSUV9ERUxBWUVEX0RJU0FCTEU7CisJZWxzZQogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKIAkJCQkJIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQl9CiAJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFtpcnFdKTsKIH0KIApAQCAtMTU4OCw3ICsxNTg2LDcgQEAKIAl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKIAlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBWRVJTSU9OOiAlMDh4XG4iLCB2KTsKIAl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHYpOwotCW1heGx2dCA9IGdldF9tYXhsdnQoKTsKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CiAKIAl2ID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRBU0tQUkk6ICUwOHggKCUwMngpXG4iLCB2LCB2ICYgQVBJQ19UUFJJX01BU0spOwpAQCAtMTkyMCw3ICsxOTE4LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfaWRzX2Zyb21fbXBjKHZvaWQpIHsgfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbm9fdGltZXJfY2hlY2sgX19pbml0ZGF0YTsKK2ludCBub190aW1lcl9jaGVjayBfX2luaXRkYXRhOwogCiBzdGF0aWMgaW50IF9faW5pdCBub3RpbWVyY2hlY2soY2hhciAqcykKIHsKQEAgLTIzMTAsNyArMjMwOCw3IEBACiAKIAlkaXNhYmxlXzgyNTlBX2lycSgwKTsKIAlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZSgwLCAmbGFwaWNfY2hpcCwgaGFuZGxlX2Zhc3Rlb2lfaXJxLAotCQkJCSAgICAgICJmYXN0ZWlvIik7CisJCQkJICAgICAgImZhc3Rlb2kiKTsKIAlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIEFQSUNfRE1fRklYRUQgfCB2ZWN0b3IpOwkvKiBGaXhlZCBtb2RlICovCiAJZW5hYmxlXzgyNTlBX2lycSgwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pcnEuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaXJxLmMKaW5kZXggMzIwMWQ0Mi4uMGYyY2E1OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9pcnEuYwpAQCAtMTAsNyArMTAsNiBAQAogICogaW9fYXBpYy5jLikKICAqLwogCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMTksMTkgKzE4LDM2IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAorI2luY2x1ZGUgPGFzbS9pZGxlLmg+CisKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKIERFRklORV9QRVJfQ1BVKGlycV9jcHVzdGF0X3QsIGlycV9zdGF0KSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGlycV9zdGF0KTsKIAotI2lmbmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIC8qCiAgKiAnd2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yJy4KICAqIGVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsdmVzLgogICovCiB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJpbnRrKCJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOwotfQorCXByaW50ayhLRVJOX0VSUiAidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAyeFxuIiwgaXJxKTsKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCS8qCisJICogQ3VycmVudGx5IHVuZXhwZWN0ZWQgdmVjdG9ycyBoYXBwZW4gb25seSBvbiBTTVAgYW5kIEFQSUMuCisJICogV2UgX211c3RfIGFjayB0aGVzZSBiZWNhdXNlIGV2ZXJ5IGxvY2FsIEFQSUMgaGFzIG9ubHkgTgorCSAqIGlycSBzbG90cyBwZXIgcHJpb3JpdHkgbGV2ZWwsIGFuZCBhICdoYW5naW5nLCB1bmFja2VkJyBJUlEKKwkgKiBob2xkcyB1cCBhbiBpcnEgc2xvdCAtIGluIGV4Y2Vzc2l2ZSBjYXNlcyAod2hlbiBtdWx0aXBsZQorCSAqIHVuZXhwZWN0ZWQgdmVjdG9ycyBvY2N1cikgdGhhdCBtaWdodCBsb2NrIHVwIHRoZSBBUElDCisJICogY29tcGxldGVseS4KKwkgKiBCdXQgb25seSBhY2sgd2hlbiB0aGUgQVBJQyBpcyBlbmFibGVkIC1BSworCSAqLworCWlmIChjcHVfaGFzX2FwaWMpCisJCWFja19BUElDX2lycSgpOwogI2VuZGlmCit9CiAKICNpZmRlZiBDT05GSUdfNEtTVEFDS1MKIC8qCkBAIC02MSw2ICs3Nyw3IEBACiAJdW5pb24gaXJxX2N0eCAqY3VyY3R4LCAqaXJxY3R4OwogCXUzMiAqaXNwOwogI2VuZGlmCisJZXhpdF9pZGxlKCk7CiAKIAlpZiAodW5saWtlbHkoKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFTKSkgewogCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IGNhbm5vdCBoYW5kbGUgSVJRICVkXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYwppbmRleCBhZjFkNTMzLi5iNTQ1YmM3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJCQkiCXB1c2hmXG4iCiAJCQkvKiBza2lwIGNzLCBlaXAsIG9yaWdfZWF4ICovCiAJCQkiCXN1YmwgJDEyLCAlZXNwXG4iCi0JCQkiCXB1c2hsICVnc1xuIgorCQkJIglwdXNobCAlZnNcbiIKIAkJCSIJcHVzaGwgJWRzXG4iCiAJCQkiCXB1c2hsICVlc1xuIgogCQkJIglwdXNobCAlZWF4XG4iCkBAIC0zODcsNyArMzg3LDcgQEAKIAkJCSIJcG9wbCAlZWRpXG4iCiAJCQkiCXBvcGwgJWVicFxuIgogCQkJIglwb3BsICVlYXhcbiIKLQkJCS8qIHNraXAgZWlwLCBvcmlnX2VheCwgZXMsIGRzLCBncyAqLworCQkJLyogc2tpcCBlaXAsIG9yaWdfZWF4LCBlcywgZHMsIGZzICovCiAJCQkiCWFkZGwgJDIwLCAlZXNwXG4iCiAJCQkiCXBvcGZcbiIKIAkJCSIJcmV0XG4iKTsKQEAgLTQwOCw3ICs0MDgsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZrcmV0cHJvYmVfbG9jaywgZmxhZ3MpOwogCWhlYWQgPSBrcmV0cHJvYmVfaW5zdF90YWJsZV9oZWFkKGN1cnJlbnQpOwogCS8qIGZpeHVwIHJlZ2lzdGVycyAqLwotCXJlZ3MtPnhjcyA9IF9fS0VSTkVMX0NTOworCXJlZ3MtPnhjcyA9IF9fS0VSTkVMX0NTIHwgZ2V0X2tlcm5lbF9ycGwoKTsKIAlyZWdzLT5laXAgPSB0cmFtcG9saW5lX2FkZHJlc3M7CiAJcmVncy0+b3JpZ19lYXggPSAweGZmZmZmZmZmOwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9taWNyb2NvZGUuYwppbmRleCAzODEyNTJiLi5iOGYxNjYzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbWljcm9jb2RlLmMKQEAgLTM4NCw3ICszODQsNyBAQAogewogCWxvbmcgY3Vyc29yID0gMDsKIAlpbnQgZXJyb3IgPSAwOwotCXZvaWQgKm5ld19tYzsKKwl2b2lkICpuZXdfbWMgPSBOVUxMOwogCWludCBjcHU7CiAJY3B1bWFza190IG9sZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXNyLmMKaW5kZXggNGUxNDI2NC4uYmNhYTZlOSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYworKysgYi9hcmNoL2kzODYva2VybmVsL21zci5jCkBAIC02OCw3ICs2OCw2IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCiBzdHJ1Y3QgbXNyX2NvbW1hbmQgewotCWludCBjcHU7CiAJaW50IGVycjsKIAl1MzIgcmVnOwogCXUzMiBkYXRhWzJdOwpAQCAtNzgsMTYgKzc3LDE0IEBACiB7CiAJc3RydWN0IG1zcl9jb21tYW5kICpjbWQgPSAoc3RydWN0IG1zcl9jb21tYW5kICopY21kX2Jsb2NrOwogCi0JaWYgKGNtZC0+Y3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKLQkJY21kLT5lcnIgPSB3cm1zcl9laW8oY21kLT5yZWcsIGNtZC0+ZGF0YVswXSwgY21kLT5kYXRhWzFdKTsKKwljbWQtPmVyciA9IHdybXNyX2VpbyhjbWQtPnJlZywgY21kLT5kYXRhWzBdLCBjbWQtPmRhdGFbMV0pOwogfQogCiBzdGF0aWMgdm9pZCBtc3Jfc21wX3JkbXNyKHZvaWQgKmNtZF9ibG9jaykKIHsKIAlzdHJ1Y3QgbXNyX2NvbW1hbmQgKmNtZCA9IChzdHJ1Y3QgbXNyX2NvbW1hbmQgKiljbWRfYmxvY2s7CiAKLQlpZiAoY21kLT5jcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQljbWQtPmVyciA9IHJkbXNyX2VpbyhjbWQtPnJlZywgJmNtZC0+ZGF0YVswXSwgJmNtZC0+ZGF0YVsxXSk7CisJY21kLT5lcnIgPSByZG1zcl9laW8oY21kLT5yZWcsICZjbWQtPmRhdGFbMF0sICZjbWQtPmRhdGFbMV0pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkb193cm1zcihpbnQgY3B1LCB1MzIgcmVnLCB1MzIgZWF4LCB1MzIgZWR4KQpAQCAtOTksMTIgKzk2LDExIEBACiAJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsKIAkJcmV0ID0gd3Jtc3JfZWlvKHJlZywgZWF4LCBlZHgpOwogCX0gZWxzZSB7Ci0JCWNtZC5jcHUgPSBjcHU7CiAJCWNtZC5yZWcgPSByZWc7CiAJCWNtZC5kYXRhWzBdID0gZWF4OwogCQljbWQuZGF0YVsxXSA9IGVkeDsKIAotCQlzbXBfY2FsbF9mdW5jdGlvbihtc3Jfc21wX3dybXNyLCAmY21kLCAxLCAxKTsKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgbXNyX3NtcF93cm1zciwgJmNtZCwgMSwgMSk7CiAJCXJldCA9IGNtZC5lcnI7CiAJfQogCXByZWVtcHRfZW5hYmxlKCk7CkBAIC0xMjAsMTAgKzExNiw5IEBACiAJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsKIAkJcmV0ID0gcmRtc3JfZWlvKHJlZywgZWF4LCBlZHgpOwogCX0gZWxzZSB7Ci0JCWNtZC5jcHUgPSBjcHU7CiAJCWNtZC5yZWcgPSByZWc7CiAKLQkJc21wX2NhbGxfZnVuY3Rpb24obXNyX3NtcF9yZG1zciwgJmNtZCwgMSwgMSk7CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIG1zcl9zbXBfcmRtc3IsICZjbWQsIDEsIDEpOwogCiAJCSplYXggPSBjbWQuZGF0YVswXTsKIAkJKmVkeCA9IGNtZC5kYXRhWzFdOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKaW5kZXggMWE2ZjhiYi4uODIxZGYzNCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYworKysgYi9hcmNoL2kzODYva2VybmVsL25taS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogCiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KQEAgLTE4NSw3ICsxODYsOCBAQAogewogCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CiAJY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJcmV0dXJuICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUpIHx8IChib290X2NwdV9kYXRhLng4NiA9PSA2KSk7CisJCXJldHVybiAoKGJvb3RfY3B1X2RhdGEueDg2ID09IDE1KSB8fCAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNikKKwkJCXx8IChib290X2NwdV9kYXRhLng4NiA9PSAxNikpOwogCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKIAkJaWYgKGNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTikpCiAJCQlyZXR1cm4gMTsKQEAgLTIxNiw2ICsyMTgsMjggQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdW5zaWduZWQgaW50IGFkanVzdF9mb3JfMzJiaXRfY3RyKHVuc2lnbmVkIGludCBoeikKK3sKKwl1NjQgY291bnRlcl92YWw7CisJdW5zaWduZWQgaW50IHJldHZhbCA9IGh6OworCisJLyoKKwkgKiBPbiBJbnRlbCBDUFVzIHdpdGggUDYvQVJDSF9QRVJGTU9OIG9ubHkgMzIgYml0cyBpbiB0aGUgY291bnRlcgorCSAqIGFyZSB3cml0YWJsZSwgd2l0aCBoaWdoZXIgYml0cyBzaWduIGV4dGVuZGluZyBmcm9tIGJpdCAzMS4KKwkgKiBTbywgd2UgY2FuIG9ubHkgcHJvZ3JhbSB0aGUgY291bnRlciB3aXRoIDMxIGJpdCB2YWx1ZXMgYW5kCisJICogMzJuZCBiaXQgc2hvdWxkIGJlIDEsIGZvciAzMy4uIHRvIGJlIDEuCisJICogRmluZCB0aGUgYXBwcm9wcmlhdGUgbm1pX2h6CisJICovCisJY291bnRlcl92YWwgPSAodTY0KWNwdV9raHogKiAxMDAwOworCWRvX2Rpdihjb3VudGVyX3ZhbCwgcmV0dmFsKTsKKyAJaWYgKGNvdW50ZXJfdmFsID4gMHg3ZmZmZmZmZlVMTCkgeworCQl1NjQgY291bnQgPSAodTY0KWNwdV9raHogKiAxMDAwOworCQlkb19kaXYoY291bnQsIDB4N2ZmZmZmZmZVTCk7CisJCXJldHZhbCA9IGNvdW50ICsgMTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKwogc3RhdGljIGludCBfX2luaXQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50ICpwcmV2X25taV9jb3VudDsKQEAgLTI4MSwxOCArMzA1LDEwIEBACiAJCXN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCA9ICZfX2dldF9jcHVfdmFyKG5taV93YXRjaGRvZ19jdGxibGspOwogCiAJCW5taV9oeiA9IDE7Ci0JCS8qCi0JCSAqIE9uIEludGVsIENQVXMgd2l0aCBBUkNIX1BFUkZNT04gb25seSAzMiBiaXRzIGluIHRoZSBjb3VudGVyCi0JCSAqIGFyZSB3cml0YWJsZSwgd2l0aCBoaWdoZXIgYml0cyBzaWduIGV4dGVuZGluZyBmcm9tIGJpdCAzMS4KLQkJICogU28sIHdlIGNhbiBvbmx5IHByb2dyYW0gdGhlIGNvdW50ZXIgd2l0aCAzMSBiaXQgdmFsdWVzIGFuZAotCQkgKiAzMm5kIGJpdCBzaG91bGQgYmUgMSwgZm9yIDMzLi4gdG8gYmUgMS4KLQkJICogRmluZCB0aGUgYXBwcm9wcmlhdGUgbm1pX2h6Ci0JCSAqLwotCSAJaWYgKHdkLT5wZXJmY3RyX21zciA9PSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwICYmCi0JCQkoKHU2NCljcHVfa2h6ICogMTAwMCkgPiAweDdmZmZmZmZmVUxMKSB7Ci0JCQl1NjQgY291bnQgPSAodTY0KWNwdV9raHogKiAxMDAwOwotCQkJZG9fZGl2KGNvdW50LCAweDdmZmZmZmZmVUwpOwotCQkJbm1pX2h6ID0gY291bnQgKyAxOworCisJCWlmICh3ZC0+cGVyZmN0cl9tc3IgPT0gTVNSX1A2X1BFUkZDVFIwIHx8CisJCSAgICB3ZC0+cGVyZmN0cl9tc3IgPT0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCkgeworCQkJbm1pX2h6ID0gYWRqdXN0X2Zvcl8zMmJpdF9jdHIobm1pX2h6KTsKIAkJfQogCX0KIApAQCAtMzY5LDYgKzM4NSwzNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19hY3BpX25taV9kaXNhYmxlKHZvaWQgKl9fdW51c2VkKQoreworCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMCwgQVBJQ19ETV9OTUkgfCBBUElDX0xWVF9NQVNLRUQpOworfQorCisvKgorICogRGlzYWJsZSB0aW1lciBiYXNlZCBOTUlzIG9uIGFsbCBDUFVzOgorICovCit2b2lkIGFjcGlfbm1pX2Rpc2FibGUodm9pZCkKK3sKKwlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICYmIG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykKKwkJb25fZWFjaF9jcHUoX19hY3BpX25taV9kaXNhYmxlLCBOVUxMLCAwLCAxKTsKK30KKworc3RhdGljIHZvaWQgX19hY3BpX25taV9lbmFibGUodm9pZCAqX191bnVzZWQpCit7CisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQwLCBBUElDX0RNX05NSSk7Cit9CisKKy8qCisgKiBFbmFibGUgdGltZXIgYmFzZWQgTk1JcyBvbiBhbGwgQ1BVczoKKyAqLwordm9pZCBhY3BpX25taV9lbmFibGUodm9pZCkKK3sKKwlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICYmIG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykKKwkJb25fZWFjaF9jcHUoX19hY3BpX25taV9lbmFibGUsIE5VTEwsIDAsIDEpOworfQorCiAjaWZkZWYgQ09ORklHX1BNCiAKIHN0YXRpYyBpbnQgbm1pX3BtX2FjdGl2ZTsgLyogbm1pX2FjdGl2ZSBiZWZvcmUgc3VzcGVuZCAqLwpAQCAtNDQyLDYgKzQ4NiwxNyBAQAogCXdybXNybChwZXJmY3RyX21zciwgMCAtIGNvdW50KTsKIH0KIAorc3RhdGljIHZvaWQgd3JpdGVfd2F0Y2hkb2dfY291bnRlcjMyKHVuc2lnbmVkIGludCBwZXJmY3RyX21zciwKKwkJY29uc3QgY2hhciAqZGVzY3IpCit7CisJdTY0IGNvdW50ID0gKHU2NCljcHVfa2h6ICogMTAwMDsKKworCWRvX2Rpdihjb3VudCwgbm1pX2h6KTsKKwlpZihkZXNjcikKKwkJRHByaW50aygic2V0dGluZyAlcyB0byAtMHglMDhMeFxuIiwgZGVzY3IsIGNvdW50KTsKKwl3cm1zcihwZXJmY3RyX21zciwgKHUzMikoLWNvdW50KSwgMCk7Cit9CisKIC8qIE5vdGUgdGhhdCB0aGVzZSBldmVudHMgZG9uJ3QgdGljayB3aGVuIHRoZSBDUFUgaWRsZXMuIFRoaXMgbWVhbnMKICAgIHRoZSBmcmVxdWVuY3kgdmFyaWVzIHdpdGggQ1BVIGxvYWQuICovCiAKQEAgLTUzMSw3ICs1ODYsOCBAQAogCiAJLyogc2V0dXAgdGhlIHRpbWVyICovCiAJd3Jtc3IoZXZudHNlbF9tc3IsIGV2bnRzZWwsIDApOwotCXdyaXRlX3dhdGNoZG9nX2NvdW50ZXIocGVyZmN0cl9tc3IsICJQNl9QRVJGQ1RSMCIpOworCW5taV9oeiA9IGFkanVzdF9mb3JfMzJiaXRfY3RyKG5taV9oeik7CisJd3JpdGVfd2F0Y2hkb2dfY291bnRlcjMyKHBlcmZjdHJfbXNyLCAiUDZfUEVSRkNUUjAiKTsKIAlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKIAlldm50c2VsIHw9IFA2X0VWTlRTRUwwX0VOQUJMRTsKIAl3cm1zcihldm50c2VsX21zciwgZXZudHNlbCwgMCk7CkBAIC03MDQsNyArNzYwLDggQEAKIAogCS8qIHNldHVwIHRoZSB0aW1lciAqLwogCXdybXNyKGV2bnRzZWxfbXNyLCBldm50c2VsLCAwKTsKLQl3cml0ZV93YXRjaGRvZ19jb3VudGVyKHBlcmZjdHJfbXNyLCAiSU5URUxfQVJDSF9QRVJGQ1RSMCIpOworCW5taV9oeiA9IGFkanVzdF9mb3JfMzJiaXRfY3RyKG5taV9oeik7CisJd3JpdGVfd2F0Y2hkb2dfY291bnRlcjMyKHBlcmZjdHJfbXNyLCAiSU5URUxfQVJDSF9QRVJGQ1RSMCIpOwogCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOwogCWV2bnRzZWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7CiAJd3Jtc3IoZXZudHNlbF9tc3IsIGV2bnRzZWwsIDApOwpAQCAtNzYyLDcgKzgxOSw4IEBACiAJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfTE9DQUxfQVBJQykgewogCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewogCQljYXNlIFg4Nl9WRU5ET1JfQU1EOgotCQkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDYgJiYgYm9vdF9jcHVfZGF0YS54ODYgIT0gMTUpCisJCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgIT0gNiAmJiBib290X2NwdV9kYXRhLng4NiAhPSAxNSAmJgorCQkJCWJvb3RfY3B1X2RhdGEueDg2ICE9IDE2KQogCQkJCXJldHVybjsKIAkJCWlmICghc2V0dXBfazdfd2F0Y2hkb2coKSkKIAkJCQlyZXR1cm47CkBAIC05MTYsOSArOTc0LDEzIEBACiAJCWNwdV9jbGVhcihjcHUsIGJhY2t0cmFjZV9tYXNrKTsKIAl9CiAKLQlzdW0gPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmFwaWNfdGltZXJfaXJxczsKKwkvKgorCSAqIFRha2UgdGhlIGxvY2FsIGFwaWMgdGltZXIgYW5kIFBJVC9IUEVUIGludG8gYWNjb3VudC4gV2UgZG9uJ3QKKwkgKiBrbm93IHdoaWNoIG9uZSBpcyBhY3RpdmUsIHdoZW4gd2UgaGF2ZSBoaWdocmVzL2R5bnRpY2sgb24KKwkgKi8KKwlzdW0gPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmFwaWNfdGltZXJfaXJxcyArIGtzdGF0X2lycXMoMCk7CiAKLQkvKiBpZiB0aGUgYXBpYyB0aW1lciBpc24ndCBmaXJpbmcsIHRoaXMgY3B1IGlzbid0IGRvaW5nIG11Y2ggKi8KKwkvKiBpZiB0aGUgbm9uZSBvZiB0aGUgdGltZXJzIGlzbid0IGZpcmluZywgdGhpcyBjcHUgaXNuJ3QgZG9pbmcgbXVjaCAqLwogCWlmICghdG91Y2hlZCAmJiBsYXN0X2lycV9zdW1zW2NwdV0gPT0gc3VtKSB7CiAJCS8qCiAJCSAqIEF5aWVlLCBsb29rcyBsaWtlIHRoaXMgQ1BVIGlzIHN0dWNrIC4uLgpAQCAtOTU2LDYgKzEwMTgsOCBAQAogCQkJCWR1bW15ICY9IH5QNF9DQ0NSX09WRjsKIAkgCQkJd3Jtc3JsKHdkLT5jY2NyX21zciwgZHVtbXkpOwogCSAJCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKKwkJCQkvKiBzdGFydCB0aGUgY3ljbGUgb3ZlciBhZ2FpbiAqLworCQkJCXdyaXRlX3dhdGNoZG9nX2NvdW50ZXIod2QtPnBlcmZjdHJfbXNyLCBOVUxMKTsKIAkgCQl9CiAJCQllbHNlIGlmICh3ZC0+cGVyZmN0cl9tc3IgPT0gTVNSX1A2X1BFUkZDVFIwIHx8CiAJCQkJIHdkLT5wZXJmY3RyX21zciA9PSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwKSB7CkBAIC05NjQsOSArMTAyOCwxMiBAQAogCQkJCSAqIG90aGVyIFA2IHZhcmlhbnQuCiAJCQkJICogQXJjaFBlcmZvbS9Db3JlIER1byBhbHNvIG5lZWRzIHRoaXMgKi8KIAkJCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKKwkJCQkvKiBQNi9BUkNIX1BFUkZNT04gaGFzIDMyIGJpdCBjb3VudGVyIHdyaXRlICovCisJCQkJd3JpdGVfd2F0Y2hkb2dfY291bnRlcjMyKHdkLT5wZXJmY3RyX21zciwgTlVMTCk7CisJCQl9IGVsc2UgeworCQkJCS8qIHN0YXJ0IHRoZSBjeWNsZSBvdmVyIGFnYWluICovCisJCQkJd3JpdGVfd2F0Y2hkb2dfY291bnRlcih3ZC0+cGVyZmN0cl9tc3IsIE5VTEwpOwogCQkJfQotCQkJLyogc3RhcnQgdGhlIGN5Y2xlIG92ZXIgYWdhaW4gKi8KLQkJCXdyaXRlX3dhdGNoZG9nX2NvdW50ZXIod2QtPnBlcmZjdHJfbXNyLCBOVUxMKTsKIAkJCXJjID0gMTsKIAkJfSBlbHNlIGlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKIAkJCS8qIGRvbid0IGtub3cgaG93IHRvIGFjY3VyYXRlbHkgY2hlY2sgZm9yIHRoaXMuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3BhcmF2aXJ0LmMgYi9hcmNoL2kzODYva2VybmVsL3BhcmF2aXJ0LmMKaW5kZXggZTU1ZmQwNS4uYzE1NmVjZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wYXJhdmlydC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcGFyYXZpcnQuYwpAQCAtOTIsNyArOTIsNyBAQAogCXJldHVybiBpbnNuX2xlbjsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2dldF9kZWJ1Z3JlZyhpbnQgcmVnbm8pCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfZ2V0X2RlYnVncmVnKGludCByZWdubykKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IDA7IAkvKiBEYW1uIHlvdSwgZ2NjISAqLwogCkBAIC0xMTUsNyArMTE1LDcgQEAKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfc2V0X2RlYnVncmVnKGludCByZWdubywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3N0YXRpYyB2b2lkIG5hdGl2ZV9zZXRfZGVidWdyZWcoaW50IHJlZ25vLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCXN3aXRjaCAocmVnbm8pIHsKIAljYXNlIDA6CkBAIC0xNDYsNTUgKzE0Niw1NSBAQAogCXBhcmF2aXJ0X29wcy5pbml0X0lSUSgpOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfY2x0cyh2b2lkKQorc3RhdGljIHZvaWQgbmF0aXZlX2NsdHModm9pZCkKIHsKIAlhc20gdm9sYXRpbGUgKCJjbHRzIik7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB1bnNpZ25lZCBsb25nIG5hdGl2ZV9yZWFkX2NyMCh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbmF0aXZlX3JlYWRfY3IwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJYXNtIHZvbGF0aWxlKCJtb3ZsICUlY3IwLCUwXG5cdCIgOiI9ciIgKHZhbCkpOwogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV93cml0ZV9jcjAodW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgdm9pZCBuYXRpdmVfd3JpdGVfY3IwKHVuc2lnbmVkIGxvbmcgdmFsKQogewogCWFzbSB2b2xhdGlsZSgibW92bCAlMCwlJWNyMCI6IDoiciIgKHZhbCkpOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdW5zaWduZWQgbG9uZyBuYXRpdmVfcmVhZF9jcjIodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9yZWFkX2NyMih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWFzbSB2b2xhdGlsZSgibW92bCAlJWNyMiwlMFxuXHQiIDoiPXIiICh2YWwpKTsKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfd3JpdGVfY3IyKHVuc2lnbmVkIGxvbmcgdmFsKQorc3RhdGljIHZvaWQgbmF0aXZlX3dyaXRlX2NyMih1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAlhc20gdm9sYXRpbGUoIm1vdmwgJTAsJSVjcjIiOiA6InIiICh2YWwpKTsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHVuc2lnbmVkIGxvbmcgbmF0aXZlX3JlYWRfY3IzKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfcmVhZF9jcjModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlhc20gdm9sYXRpbGUoIm1vdmwgJSVjcjMsJTBcblx0IiA6Ij1yIiAodmFsKSk7CiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3dyaXRlX2NyMyh1bnNpZ25lZCBsb25nIHZhbCkKK3N0YXRpYyB2b2lkIG5hdGl2ZV93cml0ZV9jcjModW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJYXNtIHZvbGF0aWxlKCJtb3ZsICUwLCUlY3IzIjogOiJyIiAodmFsKSk7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB1bnNpZ25lZCBsb25nIG5hdGl2ZV9yZWFkX2NyNCh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbmF0aXZlX3JlYWRfY3I0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJYXNtIHZvbGF0aWxlKCJtb3ZsICUlY3I0LCUwXG5cdCIgOiI9ciIgKHZhbCkpOwogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB1bnNpZ25lZCBsb25nIG5hdGl2ZV9yZWFkX2NyNF9zYWZlKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfcmVhZF9jcjRfc2FmZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCS8qIFRoaXMgY291bGQgZmF1bHQgaWYgJWNyNCBkb2VzIG5vdCBleGlzdCAqLwpAQCAtMjA3LDUxICsyMDcsNTEgQEAKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfd3JpdGVfY3I0KHVuc2lnbmVkIGxvbmcgdmFsKQorc3RhdGljIHZvaWQgbmF0aXZlX3dyaXRlX2NyNCh1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAlhc20gdm9sYXRpbGUoIm1vdmwgJTAsJSVjcjQiOiA6InIiICh2YWwpKTsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHVuc2lnbmVkIGxvbmcgbmF0aXZlX3NhdmVfZmwodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9zYXZlX2ZsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmOwogCWFzbSB2b2xhdGlsZSgicHVzaGZsIDsgcG9wbCAlMCI6Ij1nIiAoZik6IC8qIG5vIGlucHV0ICovKTsKIAlyZXR1cm4gZjsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3Jlc3RvcmVfZmwodW5zaWduZWQgbG9uZyBmKQorc3RhdGljIHZvaWQgbmF0aXZlX3Jlc3RvcmVfZmwodW5zaWduZWQgbG9uZyBmKQogewogCWFzbSB2b2xhdGlsZSgicHVzaGwgJTAgOyBwb3BmbCI6IC8qIG5vIG91dHB1dCAqLwogCQkJICAgICA6ImciIChmKQogCQkJICAgICA6Im1lbW9yeSIsICJjYyIpOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfaXJxX2Rpc2FibGUodm9pZCkKK3N0YXRpYyB2b2lkIG5hdGl2ZV9pcnFfZGlzYWJsZSh2b2lkKQogewogCWFzbSB2b2xhdGlsZSgiY2xpIjogOiA6Im1lbW9yeSIpOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfaXJxX2VuYWJsZSh2b2lkKQorc3RhdGljIHZvaWQgbmF0aXZlX2lycV9lbmFibGUodm9pZCkKIHsKIAlhc20gdm9sYXRpbGUoInN0aSI6IDogOiJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3NhZmVfaGFsdCh2b2lkKQorc3RhdGljIHZvaWQgbmF0aXZlX3NhZmVfaGFsdCh2b2lkKQogewogCWFzbSB2b2xhdGlsZSgic3RpOyBobHQiOiA6IDoibWVtb3J5Iik7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9oYWx0KHZvaWQpCitzdGF0aWMgdm9pZCBuYXRpdmVfaGFsdCh2b2lkKQogewogCWFzbSB2b2xhdGlsZSgiaGx0IjogOiA6Im1lbW9yeSIpOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfd2JpbnZkKHZvaWQpCitzdGF0aWMgdm9pZCBuYXRpdmVfd2JpbnZkKHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlKCJ3YmludmQiOiA6IDoibWVtb3J5Iik7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlX3JlYWRfbXNyKHVuc2lnbmVkIGludCBtc3IsIGludCAqZXJyKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfcmVhZF9tc3IodW5zaWduZWQgaW50IG1zciwgaW50ICplcnIpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKIApAQCAtMjcwLDcgKzI3MCw3IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIGZhc3RjYWxsIGludCBuYXRpdmVfd3JpdGVfbXNyKHVuc2lnbmVkIGludCBtc3IsIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCitzdGF0aWMgaW50IG5hdGl2ZV93cml0ZV9tc3IodW5zaWduZWQgaW50IG1zciwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKIHsKIAlpbnQgZXJyOwogCWFzbSB2b2xhdGlsZSgiMjogd3Jtc3IgOyB4b3JsICUwLCUwXG4iCkBAIC0yODgsNTMgKzI4OCw1MyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlX3JlYWRfdHNjKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9yZWFkX3RzYyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CiAJYXNtIHZvbGF0aWxlKCJyZHRzYyIgOiAiPUEiICh2YWwpKTsKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9yZWFkX3BtYyh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfcmVhZF9wbWModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwogCWFzbSB2b2xhdGlsZSgicmRwbWMiIDogIj1BIiAodmFsKSk7CiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX2xvYWRfdHJfZGVzYyh2b2lkKQorc3RhdGljIHZvaWQgbmF0aXZlX2xvYWRfdHJfZGVzYyh2b2lkKQogewogCWFzbSB2b2xhdGlsZSgibHRyICV3MCI6OiJxIiAoR0RUX0VOVFJZX1RTUyo4KSk7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9sb2FkX2dkdChjb25zdCBzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0ICpkdHIpCitzdGF0aWMgdm9pZCBuYXRpdmVfbG9hZF9nZHQoY29uc3Qgc3RydWN0IFhndF9kZXNjX3N0cnVjdCAqZHRyKQogewogCWFzbSB2b2xhdGlsZSgibGdkdCAlMCI6OiJtIiAoKmR0cikpOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfbG9hZF9pZHQoY29uc3Qgc3RydWN0IFhndF9kZXNjX3N0cnVjdCAqZHRyKQorc3RhdGljIHZvaWQgbmF0aXZlX2xvYWRfaWR0KGNvbnN0IHN0cnVjdCBYZ3RfZGVzY19zdHJ1Y3QgKmR0cikKIHsKIAlhc20gdm9sYXRpbGUoImxpZHQgJTAiOjoibSIgKCpkdHIpKTsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3N0b3JlX2dkdChzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0ICpkdHIpCitzdGF0aWMgdm9pZCBuYXRpdmVfc3RvcmVfZ2R0KHN0cnVjdCBYZ3RfZGVzY19zdHJ1Y3QgKmR0cikKIHsKIAlhc20gKCJzZ2R0ICUwIjoiPW0iICgqZHRyKSk7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9zdG9yZV9pZHQoc3RydWN0IFhndF9kZXNjX3N0cnVjdCAqZHRyKQorc3RhdGljIHZvaWQgbmF0aXZlX3N0b3JlX2lkdChzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0ICpkdHIpCiB7CiAJYXNtICgic2lkdCAlMCI6Ij1tIiAoKmR0cikpOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdW5zaWduZWQgbG9uZyBuYXRpdmVfc3RvcmVfdHIodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9zdG9yZV90cih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdHI7CiAJYXNtICgic3RyICUwIjoiPXIiICh0cikpOwogCXJldHVybiB0cjsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX2xvYWRfdGxzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIHZvaWQgbmF0aXZlX2xvYWRfdGxzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1bnNpZ25lZCBpbnQgY3B1KQogewogI2RlZmluZSBDKGkpIGdldF9jcHVfZ2R0X3RhYmxlKGNwdSlbR0RUX0VOVFJZX1RMU19NSU4gKyBpXSA9IHQtPnRsc19hcnJheVtpXQogCUMoMCk7IEMoMSk7IEMoMik7CkBAIC0zNDgsMjIgKzM0OCwyMiBAQAogCWxwWzFdID0gZW50cnlfaGlnaDsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3dyaXRlX2xkdF9lbnRyeSh2b2lkICpkdCwgaW50IGVudHJ5bnVtLCB1MzIgbG93LCB1MzIgaGlnaCkKK3N0YXRpYyB2b2lkIG5hdGl2ZV93cml0ZV9sZHRfZW50cnkodm9pZCAqZHQsIGludCBlbnRyeW51bSwgdTMyIGxvdywgdTMyIGhpZ2gpCiB7CiAJbmF0aXZlX3dyaXRlX2R0X2VudHJ5KGR0LCBlbnRyeW51bSwgbG93LCBoaWdoKTsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3dyaXRlX2dkdF9lbnRyeSh2b2lkICpkdCwgaW50IGVudHJ5bnVtLCB1MzIgbG93LCB1MzIgaGlnaCkKK3N0YXRpYyB2b2lkIG5hdGl2ZV93cml0ZV9nZHRfZW50cnkodm9pZCAqZHQsIGludCBlbnRyeW51bSwgdTMyIGxvdywgdTMyIGhpZ2gpCiB7CiAJbmF0aXZlX3dyaXRlX2R0X2VudHJ5KGR0LCBlbnRyeW51bSwgbG93LCBoaWdoKTsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3dyaXRlX2lkdF9lbnRyeSh2b2lkICpkdCwgaW50IGVudHJ5bnVtLCB1MzIgbG93LCB1MzIgaGlnaCkKK3N0YXRpYyB2b2lkIG5hdGl2ZV93cml0ZV9pZHRfZW50cnkodm9pZCAqZHQsIGludCBlbnRyeW51bSwgdTMyIGxvdywgdTMyIGhpZ2gpCiB7CiAJbmF0aXZlX3dyaXRlX2R0X2VudHJ5KGR0LCBlbnRyeW51bSwgbG93LCBoaWdoKTsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX2xvYWRfZXNwMChzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzLAorc3RhdGljIHZvaWQgbmF0aXZlX2xvYWRfZXNwMChzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzLAogCQkJCSAgICAgIHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCiB7CiAJdHNzLT5lc3AwID0gdGhyZWFkLT5lc3AwOwpAQCAtMzc1LDEyICszNzUsMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKQorc3RhdGljIHZvaWQgbmF0aXZlX2lvX2RlbGF5KHZvaWQpCiB7CiAJYXNtIHZvbGF0aWxlKCJvdXRiICVhbCwkMHg4MCIpOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfZmx1c2hfdGxiKHZvaWQpCitzdGF0aWMgdm9pZCBuYXRpdmVfZmx1c2hfdGxiKHZvaWQpCiB7CiAJX19uYXRpdmVfZmx1c2hfdGxiKCk7CiB9CkBAIC0zODksNDkgKzM4OSw0OSBAQAogICogR2xvYmFsIHBhZ2VzIGhhdmUgdG8gYmUgZmx1c2hlZCBhIGJpdCBkaWZmZXJlbnRseS4gTm90IGEgcmVhbAogICogcGVyZm9ybWFuY2UgcHJvYmxlbSBiZWNhdXNlIHRoaXMgZG9lcyBub3QgaGFwcGVuIG9mdGVuLgogICovCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfZmx1c2hfdGxiX2dsb2JhbCh2b2lkKQorc3RhdGljIHZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9nbG9iYWwodm9pZCkKIHsKIAlfX25hdGl2ZV9mbHVzaF90bGJfZ2xvYmFsKCk7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9mbHVzaF90bGJfc2luZ2xlKHUzMiBhZGRyKQorc3RhdGljIHZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9zaW5nbGUodTMyIGFkZHIpCiB7CiAJX19uYXRpdmVfZmx1c2hfdGxiX3NpbmdsZShhZGRyKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfWDg2X1BBRQotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCkKK3N0YXRpYyB2b2lkIG5hdGl2ZV9zZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpCiB7CiAJKnB0ZXAgPSBwdGV2YWw7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9zZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCkKK3N0YXRpYyB2b2lkIG5hdGl2ZV9zZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCkKIHsKIAkqcHRlcCA9IHB0ZXZhbDsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3NldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZHZhbCkKK3N0YXRpYyB2b2lkIG5hdGl2ZV9zZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWR2YWwpCiB7CiAJKnBtZHAgPSBwbWR2YWw7CiB9CiAKICNlbHNlIC8qIENPTkZJR19YODZfUEFFICovCiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9zZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCitzdGF0aWMgdm9pZCBuYXRpdmVfc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQogewogCXB0ZXAtPnB0ZV9oaWdoID0gcHRlLnB0ZV9oaWdoOwogCXNtcF93bWIoKTsKIAlwdGVwLT5wdGVfbG93ID0gcHRlLnB0ZV9sb3c7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9zZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3N0YXRpYyB2b2lkIG5hdGl2ZV9zZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlwdGVwLT5wdGVfaGlnaCA9IHB0ZS5wdGVfaGlnaDsKIAlzbXBfd21iKCk7CiAJcHRlcC0+cHRlX2xvdyA9IHB0ZS5wdGVfbG93OwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCitzdGF0aWMgdm9pZCBuYXRpdmVfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiB7CiAJcHRlcC0+cHRlX2xvdyA9IDA7CiAJc21wX3dtYigpOwpAQCAtNDQwLDI5ICs0NDAsMjkgQEAKIAlwdGVwLT5wdGVfbG93ID0gcHRlLnB0ZV9sb3c7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9zZXRfcHRlX2F0b21pYyhwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKQorc3RhdGljIHZvaWQgbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpCiB7CiAJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKilwdGVwLHB0ZV92YWwocHRldmFsKSk7CiB9CiAKLXN0YXRpYyBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9zZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWR2YWwpCitzdGF0aWMgdm9pZCBuYXRpdmVfc2V0X3BtZChwbWRfdCAqcG1kcCwgcG1kX3QgcG1kdmFsKQogewogCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopcG1kcCxwbWRfdmFsKHBtZHZhbCkpOwogfQogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBuYXRpdmVfc2V0X3B1ZChwdWRfdCAqcHVkcCwgcHVkX3QgcHVkdmFsKQorc3RhdGljIHZvaWQgbmF0aXZlX3NldF9wdWQocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZHZhbCkKIHsKIAkqcHVkcCA9IHB1ZHZhbDsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3N0YXRpYyB2b2lkIG5hdGl2ZV9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CiAJcHRlcC0+cHRlX2xvdyA9IDA7CiAJc21wX3dtYigpOwogCXB0ZXAtPnB0ZV9oaWdoID0gMDsKIH0KIAotc3RhdGljIGZhc3RjYWxsIHZvaWQgbmF0aXZlX3BtZF9jbGVhcihwbWRfdCAqcG1kKQorc3RhdGljIHZvaWQgbmF0aXZlX3BtZF9jbGVhcihwbWRfdCAqcG1kKQogewogCXUzMiAqdG1wID0gKHUzMiAqKXBtZDsKIAkqdG1wID0gMDsKQEAgLTQ3Miw4ICs0NzIsOCBAQAogI2VuZGlmIC8qIENPTkZJR19YODZfUEFFICovCiAKIC8qIFRoZXNlIGFyZSBpbiBlbnRyeS5TICovCi1leHRlcm4gZmFzdGNhbGwgdm9pZCBuYXRpdmVfaXJldCh2b2lkKTsKLWV4dGVybiBmYXN0Y2FsbCB2b2lkIG5hdGl2ZV9pcnFfZW5hYmxlX3N5c2V4aXQodm9pZCk7CitleHRlcm4gdm9pZCBuYXRpdmVfaXJldCh2b2lkKTsKK2V4dGVybiB2b2lkIG5hdGl2ZV9pcnFfZW5hYmxlX3N5c2V4aXQodm9pZCk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHByaW50X2Jhbm5lcih2b2lkKQogewpAQCAtNDgyLDkgKzQ4Miw2IEBACiB9CiBjb3JlX2luaXRjYWxsKHByaW50X2Jhbm5lcik7CiAKLS8qIFdlIHNpbXBseSBkZWNsYXJlIHN0YXJ0X2tlcm5lbCB0byBiZSB0aGUgcGFyYXZpcnQgcHJvYmUgb2YgbGFzdCByZXNvcnQuICovCi1wYXJhdmlydF9wcm9iZShzdGFydF9rZXJuZWwpOwotCiBzdHJ1Y3QgcGFyYXZpcnRfb3BzIHBhcmF2aXJ0X29wcyA9IHsKIAkubmFtZSA9ICJiYXJlIGhhcmR3YXJlIiwKIAkucGFyYXZpcnRfZW5hYmxlZCA9IDAsCkBAIC01NDQsMTIgKzU0MSwyMSBAQAogCS5hcGljX3dyaXRlID0gbmF0aXZlX2FwaWNfd3JpdGUsCiAJLmFwaWNfd3JpdGVfYXRvbWljID0gbmF0aXZlX2FwaWNfd3JpdGVfYXRvbWljLAogCS5hcGljX3JlYWQgPSBuYXRpdmVfYXBpY19yZWFkLAorCS5zZXR1cF9ib290X2Nsb2NrID0gc2V0dXBfYm9vdF9BUElDX2Nsb2NrLAorCS5zZXR1cF9zZWNvbmRhcnlfY2xvY2sgPSBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jaywKICNlbmRpZgorCS5zZXRfbGF6eV9tb2RlID0gKHZvaWQgKiluYXRpdmVfbm9wLAogCiAJLmZsdXNoX3RsYl91c2VyID0gbmF0aXZlX2ZsdXNoX3RsYiwKIAkuZmx1c2hfdGxiX2tlcm5lbCA9IG5hdGl2ZV9mbHVzaF90bGJfZ2xvYmFsLAogCS5mbHVzaF90bGJfc2luZ2xlID0gbmF0aXZlX2ZsdXNoX3RsYl9zaW5nbGUsCiAKKwkuYWxsb2NfcHQgPSAodm9pZCAqKW5hdGl2ZV9ub3AsCisJLmFsbG9jX3BkID0gKHZvaWQgKiluYXRpdmVfbm9wLAorCS5hbGxvY19wZF9jbG9uZSA9ICh2b2lkICopbmF0aXZlX25vcCwKKwkucmVsZWFzZV9wdCA9ICh2b2lkICopbmF0aXZlX25vcCwKKwkucmVsZWFzZV9wZCA9ICh2b2lkICopbmF0aXZlX25vcCwKKwogCS5zZXRfcHRlID0gbmF0aXZlX3NldF9wdGUsCiAJLnNldF9wdGVfYXQgPSBuYXRpdmVfc2V0X3B0ZV9hdCwKIAkuc2V0X3BtZCA9IG5hdGl2ZV9zZXRfcG1kLApAQCAtNTY1LDYgKzU3MSw4IEBACiAKIAkuaXJxX2VuYWJsZV9zeXNleGl0ID0gbmF0aXZlX2lycV9lbmFibGVfc3lzZXhpdCwKIAkuaXJldCA9IG5hdGl2ZV9pcmV0LAorCisJLnN0YXJ0dXBfaXBpX2hvb2sgPSAodm9pZCAqKW5hdGl2ZV9ub3AsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9wY3NwZWFrZXIuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcGNzcGVha2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMxZjJkMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcGNzcGVha2VyLmMKQEAgLTAsMCArMSwyMCBAQAorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCitzdGF0aWMgX19pbml0IGludCBhZGRfcGNzcGtyKHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJaW50IHJldDsKKworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwY3Nwa3IiLCAtMSk7CisJaWYgKCFwZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKKworCXJldHVybiByZXQ7Cit9CitkZXZpY2VfaW5pdGNhbGwoYWRkX3Bjc3Brcik7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGM2NDEwNTYuLmJlYTMwNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC90aWNrLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC00OCw2ICs0OSw3IEBACiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS92bTg2Lmg+CisjaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpZmRlZiBDT05GSUdfTUFUSF9FTVVMQVRJT04KICNpbmNsdWRlIDxhc20vbWF0aF9lbXUuaD4KICNlbmRpZgpAQCAtODAsNiArODIsNDIgQEAKIEVYUE9SVF9TWU1CT0wocG1faWRsZSk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBjcHVfaWRsZV9zdGF0ZSk7CiAKK3N0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRChpZGxlX25vdGlmaWVyKTsKKwordm9pZCBpZGxlX25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKK3sKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmlkbGVfbm90aWZpZXIsIG4pOworfQorCit2b2lkIGlkbGVfbm90aWZpZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pCit7CisJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmlkbGVfbm90aWZpZXIsIG4pOworfQorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodm9sYXRpbGUgdW5zaWduZWQgbG9uZywgaWRsZV9zdGF0ZSk7CisKK3ZvaWQgZW50ZXJfaWRsZSh2b2lkKQoreworCS8qIG5lZWRzIHRvIGJlIGF0b21pYyB3LnIudC4gaW50ZXJydXB0cywgbm90IGFnYWluc3Qgb3RoZXIgQ1BVcyAqLworCV9fc2V0X2JpdCgwLCAmX19nZXRfY3B1X3ZhcihpZGxlX3N0YXRlKSk7CisJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmlkbGVfbm90aWZpZXIsIElETEVfU1RBUlQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXRfaWRsZSh2b2lkKQoreworCS8qIG5lZWRzIHRvIGJlIGF0b21pYyB3LnIudC4gaW50ZXJydXB0cywgbm90IGFnYWluc3Qgb3RoZXIgQ1BVcyAqLworCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdCgwLCAmX19nZXRfY3B1X3ZhcihpZGxlX3N0YXRlKSkgPT0gMCkKKwkJcmV0dXJuOworCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpZGxlX25vdGlmaWVyLCBJRExFX0VORCwgTlVMTCk7Cit9CisKK3ZvaWQgZXhpdF9pZGxlKHZvaWQpCit7CisJaWYgKGN1cnJlbnQtPnBpZCkKKwkJcmV0dXJuOworCV9fZXhpdF9pZGxlKCk7Cit9CisKIHZvaWQgZGlzYWJsZV9obHQodm9pZCkKIHsKIAlobHRfY291bnRlcisrOwpAQCAtMTMwLDYgKzE2OCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBvbGxfaWRsZSAodm9pZCkKIHsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJY3B1X3JlbGF4KCk7CiB9CiAKQEAgLTE3Myw2ICsyMTIsNyBAQAogCiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgeworCQl0aWNrX25vaHpfc3RvcF9zY2hlZF90aWNrKCk7CiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKIAkJCXZvaWQgKCppZGxlKSh2b2lkKTsKIApAQCAtMTg5LDggKzIyOSwxOCBAQAogCQkJCXBsYXlfZGVhZCgpOwogCiAJCQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5pZGxlX3RpbWVzdGFtcCA9IGppZmZpZXM7CisKKwkJCS8qCisJCQkgKiBJZGxlIHJvdXRpbmVzIHNob3VsZCBrZWVwIGludGVycnVwdHMgZGlzYWJsZWQKKwkJCSAqIGZyb20gaGVyZSBvbiwgdW50aWwgdGhleSBnbyB0byBpZGxlLgorCQkJICogT3RoZXJ3aXNlLCBpZGxlIGNhbGxiYWNrcyBjYW4gbWlzZmlyZS4KKwkJCSAqLworCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCWVudGVyX2lkbGUoKTsKIAkJCWlkbGUoKTsKKwkJCV9fZXhpdF9pZGxlKCk7CiAJCX0KKwkJdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljaygpOwogCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwpAQCAtMjQzLDcgKzI5MywxMSBAQAogCQlfX21vbml0b3IoKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncywgMCwgMCk7CiAJCXNtcF9tYigpOwogCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQotCQkJX19td2FpdChlYXgsIGVjeCk7CisJCQlfX3N0aV9td2FpdChlYXgsIGVjeCk7CisJCWVsc2UKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwl9IGVsc2UgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJfQogfQogCkBAIC0zMDgsOCArMzYyLDggQEAKIAkJcmVncy0+ZWF4LHJlZ3MtPmVieCxyZWdzLT5lY3gscmVncy0+ZWR4KTsKIAlwcmludGsoIkVTSTogJTA4bHggRURJOiAlMDhseCBFQlA6ICUwOGx4IiwKIAkJcmVncy0+ZXNpLCByZWdzLT5lZGksIHJlZ3MtPmVicCk7Ci0JcHJpbnRrKCIgRFM6ICUwNHggRVM6ICUwNHggR1M6ICUwNHhcbiIsCi0JICAgICAgIDB4ZmZmZiAmIHJlZ3MtPnhkcywweGZmZmYgJiByZWdzLT54ZXMsIDB4ZmZmZiAmIHJlZ3MtPnhncyk7CisJcHJpbnRrKCIgRFM6ICUwNHggRVM6ICUwNHggRlM6ICUwNHhcbiIsCisJICAgICAgIDB4ZmZmZiAmIHJlZ3MtPnhkcywweGZmZmYgJiByZWdzLT54ZXMsIDB4ZmZmZiAmIHJlZ3MtPnhmcyk7CiAKIAljcjAgPSByZWFkX2NyMCgpOwogCWNyMiA9IHJlYWRfY3IyKCk7CkBAIC0zNDAsNyArMzk0LDcgQEAKIAogCXJlZ3MueGRzID0gX19VU0VSX0RTOwogCXJlZ3MueGVzID0gX19VU0VSX0RTOwotCXJlZ3MueGdzID0gX19LRVJORUxfUERBOworCXJlZ3MueGZzID0gX19LRVJORUxfUERBOwogCXJlZ3Mub3JpZ19lYXggPSAtMTsKIAlyZWdzLmVpcCA9ICh1bnNpZ25lZCBsb25nKSBrZXJuZWxfdGhyZWFkX2hlbHBlcjsKIAlyZWdzLnhjcyA9IF9fS0VSTkVMX0NTIHwgZ2V0X2tlcm5lbF9ycGwoKTsKQEAgLTQyNSw3ICs0NzksNyBAQAogCiAJcC0+dGhyZWFkLmVpcCA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9mb3JrOwogCi0Jc2F2ZXNlZ21lbnQoZnMscC0+dGhyZWFkLmZzKTsKKwlzYXZlc2VnbWVudChncyxwLT50aHJlYWQuZ3MpOwogCiAJdHNrID0gY3VycmVudDsKIAlpZiAodW5saWtlbHkodGVzdF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfSU9fQklUTUFQKSkpIHsKQEAgLTUwMSw4ICs1NTUsOCBAQAogCWR1bXAtPnJlZ3MuZWF4ID0gcmVncy0+ZWF4OwogCWR1bXAtPnJlZ3MuZHMgPSByZWdzLT54ZHM7CiAJZHVtcC0+cmVncy5lcyA9IHJlZ3MtPnhlczsKLQlzYXZlc2VnbWVudChmcyxkdW1wLT5yZWdzLmZzKTsKLQlkdW1wLT5yZWdzLmdzID0gcmVncy0+eGdzOworCWR1bXAtPnJlZ3MuZnMgPSByZWdzLT54ZnM7CisJc2F2ZXNlZ21lbnQoZ3MsZHVtcC0+cmVncy5ncyk7CiAJZHVtcC0+cmVncy5vcmlnX2VheCA9IHJlZ3MtPm9yaWdfZWF4OwogCWR1bXAtPnJlZ3MuZWlwID0gcmVncy0+ZWlwOwogCWR1bXAtPnJlZ3MuY3MgPSByZWdzLT54Y3M7CkBAIC02NTMsNyArNzA3LDcgQEAKIAlsb2FkX2VzcDAodHNzLCBuZXh0KTsKIAogCS8qCi0JICogU2F2ZSBhd2F5ICVmcy4gTm8gbmVlZCB0byBzYXZlICVncywgYXMgaXQgd2FzIHNhdmVkIG9uIHRoZQorCSAqIFNhdmUgYXdheSAlZ3MuIE5vIG5lZWQgdG8gc2F2ZSAlZnMsIGFzIGl0IHdhcyBzYXZlZCBvbiB0aGUKIAkgKiBzdGFjayBvbiBlbnRyeS4gIE5vIG5lZWQgdG8gc2F2ZSAlZXMgYW5kICVkcywgYXMgdGhvc2UgYXJlCiAJICogYWx3YXlzIGtlcm5lbCBzZWdtZW50cyB3aGlsZSBpbnNpZGUgdGhlIGtlcm5lbC4gIERvaW5nIHRoaXMKIAkgKiBiZWZvcmUgc2V0dGluZyB0aGUgbmV3IFRMUyBkZXNjcmlwdG9ycyBhdm9pZHMgdGhlIHNpdHVhdGlvbgpAQCAtNjYyLDcgKzcxNiw3IEBACiAJICogdXNlZCAlZnMgb3IgJWdzIChpdCBkb2VzIG5vdCB0b2RheSksIG9yIGlmIHRoZSBrZXJuZWwgaXMKIAkgKiBydW5uaW5nIGluc2lkZSBvZiBhIGh5cGVydmlzb3IgbGF5ZXIuCiAJICovCi0Jc2F2ZXNlZ21lbnQoZnMsIHByZXYtPmZzKTsKKwlzYXZlc2VnbWVudChncywgcHJldi0+Z3MpOwogCiAJLyoKIAkgKiBMb2FkIHRoZSBwZXItdGhyZWFkIFRocmVhZC1Mb2NhbCBTdG9yYWdlIGRlc2NyaXB0b3IuCkBAIC02NzAsMTQgKzcyNCwxMyBAQAogCWxvYWRfVExTKG5leHQsIGNwdSk7CiAKIAkvKgotCSAqIFJlc3RvcmUgJWZzIGlmIG5lZWRlZC4KLQkgKgotCSAqIEdsaWJjIG5vcm1hbGx5IG1ha2VzICVmcyBiZSB6ZXJvLgorCSAqIFJlc3RvcmUgSU9QTCBpZiBuZWVkZWQuICBJbiBub3JtYWwgdXNlLCB0aGUgZmxhZ3MgcmVzdG9yZQorCSAqIGluIHRoZSBzd2l0Y2ggYXNzZW1ibHkgd2lsbCBoYW5kbGUgdGhpcy4gIEJ1dCBpZiB0aGUga2VybmVsCisJICogaXMgcnVubmluZyB2aXJ0dWFsaXplZCBhdCBhIG5vbi16ZXJvIENQTCwgdGhlIHBvcGYgd2lsbAorCSAqIG5vdCByZXN0b3JlIGZsYWdzLCBzbyBpdCBtdXN0IGJlIGRvbmUgaW4gYSBzZXBhcmF0ZSBzdGVwLgogCSAqLwotCWlmICh1bmxpa2VseShwcmV2LT5mcyB8IG5leHQtPmZzKSkKLQkJbG9hZHNlZ21lbnQoZnMsIG5leHQtPmZzKTsKLQotCXdyaXRlX3BkYShwY3VycmVudCwgbmV4dF9wKTsKKwlpZiAoZ2V0X2tlcm5lbF9ycGwoKSAmJiB1bmxpa2VseShwcmV2LT5pb3BsICE9IG5leHQtPmlvcGwpKQorCQlzZXRfaW9wbF9tYXNrKG5leHQtPmlvcGwpOwogCiAJLyoKIAkgKiBOb3cgbWF5YmUgaGFuZGxlIGRlYnVnIHJlZ2lzdGVycyBhbmQvb3IgSU8gYml0bWFwcwpAQCAtNjg4LDYgKzc0MSwxNSBAQAogCiAJZGlzYWJsZV90c2MocHJldl9wLCBuZXh0X3ApOwogCisJLyoKKwkgKiBMZWF2ZSBsYXp5IG1vZGUsIGZsdXNoaW5nIGFueSBoeXBlcmNhbGxzIG1hZGUgaGVyZS4KKwkgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcmVzdG9yaW5nIFRMUyBzZWdtZW50cyBzbworCSAqIHRoZSBHRFQgYW5kIExEVCBhcmUgcHJvcGVybHkgdXBkYXRlZCwgYW5kIG11c3QgYmUKKwkgKiBkb25lIGJlZm9yZSBtYXRoX3N0YXRlX3Jlc3RvcmUsIHNvIHRoZSBUUyBiaXQgaXMgdXAKKwkgKiB0byBkYXRlLgorCSAqLworCWFyY2hfbGVhdmVfbGF6eV9jcHVfbW9kZSgpOworCiAJLyogSWYgdGhlIHRhc2sgaGFzIHVzZWQgZnB1IHRoZSBsYXN0IDUgdGltZXNsaWNlcywganVzdCBkbyBhIGZ1bGwKIAkgKiByZXN0b3JlIG9mIHRoZSBtYXRoIHN0YXRlIGltbWVkaWF0ZWx5IHRvIGF2b2lkIHRoZSB0cmFwOyB0aGUKIAkgKiBjaGFuY2VzIG9mIG5lZWRpbmcgRlBVIHNvb24gYXJlIG9idmlvdXNseSBoaWdoIG5vdwpAQCAtNjk1LDYgKzc1NywxNCBAQAogCWlmIChuZXh0X3AtPmZwdV9jb3VudGVyID4gNSkKIAkJbWF0aF9zdGF0ZV9yZXN0b3JlKCk7CiAKKwkvKgorCSAqIFJlc3RvcmUgJWdzIGlmIG5lZWRlZCAod2hpY2ggaXMgY29tbW9uKQorCSAqLworCWlmIChwcmV2LT5ncyB8IG5leHQtPmdzKQorCQlsb2Fkc2VnbWVudChncywgbmV4dC0+Z3MpOworCisJd3JpdGVfcGRhKHBjdXJyZW50LCBuZXh0X3ApOworCiAJcmV0dXJuIHByZXZfcDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYWY4YWFiZS4uNGE4ZjhhMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jCkBAIC04OSwxNCArODksMTQgQEAKIAl1bnNpZ25lZCBsb25nIHJlZ25vLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCXN3aXRjaCAocmVnbm8gPj4gMikgewotCQljYXNlIEZTOgorCQljYXNlIEdTOgogCQkJaWYgKHZhbHVlICYmICh2YWx1ZSAmIDMpICE9IDMpCiAJCQkJcmV0dXJuIC1FSU87Ci0JCQljaGlsZC0+dGhyZWFkLmZzID0gdmFsdWU7CisJCQljaGlsZC0+dGhyZWFkLmdzID0gdmFsdWU7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBEUzoKIAkJY2FzZSBFUzoKLQkJY2FzZSBHUzoKKwkJY2FzZSBGUzoKIAkJCWlmICh2YWx1ZSAmJiAodmFsdWUgJiAzKSAhPSAzKQogCQkJCXJldHVybiAtRUlPOwogCQkJdmFsdWUgJj0gMHhmZmZmOwpAQCAtMTEyLDcgKzExMiw3IEBACiAJCQl2YWx1ZSB8PSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwgRUZMX09GRlNFVCkgJiB+RkxBR19NQVNLOwogCQkJYnJlYWs7CiAJfQotCWlmIChyZWdubyA+IEVTKjQpCisJaWYgKHJlZ25vID4gRlMqNCkKIAkJcmVnbm8gLT0gMSo0OwogCXB1dF9zdGFja19sb25nKGNoaWxkLCByZWdubywgdmFsdWUpOwogCXJldHVybiAwOwpAQCAtMTI0LDE4ICsxMjQsMTggQEAKIAl1bnNpZ25lZCBsb25nIHJldHZhbCA9IH4wVUw7CiAKIAlzd2l0Y2ggKHJlZ25vID4+IDIpIHsKLQkJY2FzZSBGUzoKLQkJCXJldHZhbCA9IGNoaWxkLT50aHJlYWQuZnM7CisJCWNhc2UgR1M6CisJCQlyZXR2YWwgPSBjaGlsZC0+dGhyZWFkLmdzOwogCQkJYnJlYWs7CiAJCWNhc2UgRFM6CiAJCWNhc2UgRVM6Ci0JCWNhc2UgR1M6CisJCWNhc2UgRlM6CiAJCWNhc2UgU1M6CiAJCWNhc2UgQ1M6CiAJCQlyZXR2YWwgPSAweGZmZmY7CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJZGVmYXVsdDoKLQkJCWlmIChyZWdubyA+IEVTKjQpCisJCQlpZiAocmVnbm8gPiBGUyo0KQogCQkJCXJlZ25vIC09IDEqNDsKIAkJCXJldHZhbCAmPSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwgcmVnbm8pOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCA0Njk0YWM5Li4xMjI2MjNkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L21jYS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CkBAIC02MCw2ICs1OSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3ZtaS5oPgogI2luY2x1ZGUgPHNldHVwX2FyY2guaD4KICNpbmNsdWRlIDxiaW9zX2ViZGEuaD4KIApAQCAtNTgxLDYgKzU4MSwxNCBAQAogCiAJbWF4X2xvd19wZm4gPSBzZXR1cF9tZW1vcnkoKTsKIAorI2lmZGVmIENPTkZJR19WTUkKKwkvKgorCSAqIE11c3QgYmUgYWZ0ZXIgbWF4X2xvd19wZm4gaXMgZGV0ZXJtaW5lZCwgYW5kIGJlZm9yZSBrZXJuZWwKKwkgKiBwYWdldGFibGVzIGFyZSBzZXR1cC4KKwkgKi8KKwl2bWlfaW5pdCgpOworI2VuZGlmCisKIAkvKgogCSAqIE5PVEU6IGJlZm9yZSB0aGlzIHBvaW50IF9ub2JvZHlfIGlzIGFsbG93ZWQgdG8gYWxsb2NhdGUKIAkgKiBhbnkgbWVtb3J5IHVzaW5nIHRoZSBib290bWVtIGFsbG9jYXRvci4gIEFsdGhvdWdoIHRoZQpAQCAtNjUxLDI4ICs2NTksMyBAQAogI2VuZGlmCiAJdHNjX2luaXQoKTsKIH0KLQotc3RhdGljIF9faW5pdCBpbnQgYWRkX3Bjc3Brcih2b2lkKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOwotCWludCByZXQ7Ci0KLQlwZCA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicGNzcGtyIiwgLTEpOwotCWlmICghcGQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZCk7Ci0JaWYgKHJldCkKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotZGV2aWNlX2luaXRjYWxsKGFkZF9wY3Nwa3IpOwotCi0vKgotICogTG9jYWwgVmFyaWFibGVzOgotICogbW9kZTpjCi0gKiBjLWZpbGUtc3R5bGU6ImsmciIKLSAqIGMtYmFzaWMtb2Zmc2V0OjgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNjVkNzYyMC4uNGY5OWU4NyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NpZ25hbC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3Vjb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTEyOCw4ICsxMjksOCBAQAogCQkJIFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1NGIHwgWDg2X0VGTEFHU19aRiB8IFwKIAkJCSBYODZfRUZMQUdTX0FGIHwgWDg2X0VGTEFHU19QRiB8IFg4Nl9FRkxBR1NfQ0YpCiAKLQlDT1BZX1NFRyhncyk7Ci0JR0VUX1NFRyhmcyk7CisJR0VUX1NFRyhncyk7CisJQ09QWV9TRUcoZnMpOwogCUNPUFlfU0VHKGVzKTsKIAlDT1BZX1NFRyhkcyk7CiAJQ09QWShlZGkpOwpAQCAtMjQ0LDkgKzI0NSw5IEBACiB7CiAJaW50IHRtcCwgZXJyID0gMDsKIAotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnhncywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmdzKTsKLQlzYXZlc2VnbWVudChmcywgdG1wKTsKLQllcnIgfD0gX19wdXRfdXNlcih0bXAsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5mcyk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+eGZzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZnMpOworCXNhdmVzZWdtZW50KGdzLCB0bXApOworCWVyciB8PSBfX3B1dF91c2VyKHRtcCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmdzKTsKIAogCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnhlcywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmVzKTsKIAllcnIgfD0gX19wdXRfdXNlcihyZWdzLT54ZHMsICh1bnNpZ25lZCBpbnQgX191c2VyICopJnNjLT5kcyk7CkBAIC0zNDksNyArMzUwLDEwIEBACiAJCQlnb3RvIGdpdmVfc2lnc2VndjsKIAl9CiAKLQlyZXN0b3JlciA9ICh2b2lkICopVkRTT19TWU0oJl9fa2VybmVsX3NpZ3JldHVybik7CisJaWYgKGN1cnJlbnQtPmJpbmZtdC0+aGFzdmRzbykKKwkJcmVzdG9yZXIgPSAodm9pZCAqKVZEU09fU1lNKCZfX2tlcm5lbF9zaWdyZXR1cm4pOworCWVsc2UKKwkJcmVzdG9yZXIgPSAodm9pZCAqKSZmcmFtZS0+cmV0Y29kZTsKIAlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpCiAJCXJlc3RvcmVyID0ga2EtPnNhLnNhX3Jlc3RvcmVyOwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXAuYwppbmRleCA1Mjg1YWZmLi45YmQ5NjM3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wLmMKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KIAogLyoKQEAgLTM3NCw4ICszNzUsNyBAQAogCS8qCiAJICogaSdtIG5vdCBoYXBweSBhYm91dCB0aGlzIGdsb2JhbCBzaGFyZWQgc3BpbmxvY2sgaW4gdGhlCiAJICogTU0gaG90IHBhdGgsIGJ1dCB3ZSdsbCBzZWUgaG93IGNvbnRlbmRlZCBpdCBpcy4KLQkgKiBUZW1wb3JhcmlseSB0aGlzIHR1cm5zIElSUXMgb2ZmLCBzbyB0aGF0IGxvY2t1cHMgYXJlCi0JICogZGV0ZWN0ZWQgYnkgdGhlIE5NSSB3YXRjaGRvZy4KKwkgKiBBSzogeDg2LTY0IGhhcyBhIGZhc3RlciBtZXRob2QgdGhhdCBjb3VsZCBiZSBwb3J0ZWQuCiAJICovCiAJc3Bpbl9sb2NrKCZ0bGJzdGF0ZV9sb2NrKTsKIAkKQEAgLTQwMCw3ICs0MDAsNyBAQAogCiAJd2hpbGUgKCFjcHVzX2VtcHR5KGZsdXNoX2NwdW1hc2spKQogCQkvKiBub3RoaW5nLiBsb2NrdXAgZGV0ZWN0aW9uIGRvZXMgbm90IGJlbG9uZyBoZXJlICovCi0JCW1iKCk7CisJCWNwdV9yZWxheCgpOwogCiAJZmx1c2hfbW0gPSBOVUxMOwogCWZsdXNoX3ZhID0gMDsKQEAgLTYyNCw2ICs2MjQsNyBAQAogCS8qCiAJICogQXQgdGhpcyBwb2ludCB0aGUgaW5mbyBzdHJ1Y3R1cmUgbWF5IGJlIG91dCBvZiBzY29wZSB1bmxlc3Mgd2FpdD09MQogCSAqLworCWV4aXRfaWRsZSgpOwogCWlycV9lbnRlcigpOwogCSgqZnVuYykoaW5mbyk7CiAJaXJxX2V4aXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggOGM2YzhjNS4uNDhiZmNhYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSA8bWFjaF9hcGljLmg+CiAjaW5jbHVkZSA8bWFjaF93YWtlY3B1Lmg+CiAjaW5jbHVkZSA8c21wYm9vdF9ob29rcy5oPgorI2luY2x1ZGUgPGFzbS92bWkuaD4KIAogLyogU2V0IGlmIHdlIGZpbmQgYSBCIHN0ZXBwaW5nIENQVSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHNtcF9iX3N0ZXBwaW5nOwpAQCAtOTMsMTIgKzk0LDYgQEAKIEVYUE9SVF9TWU1CT0woY3B1X3Bvc3NpYmxlX21hcCk7CiBzdGF0aWMgY3B1bWFza190IHNtcF9jb21tZW5jZWRfbWFzazsKIAotLyogVFNDJ3MgdXBwZXIgMzIgYml0cyBjYW4ndCBiZSB3cml0dGVuIGluIGVhcmlsZXIgQ1BVIChiZWZvcmUgcHJlc2NvdHQpLCB0aGVyZQotICogaXMgbm8gd2F5IHRvIHJlc3luYyBvbmUgQVAgYWdhaW5zdCBCUC4gVEJEOiBmb3IgcHJlc2NvdHQgYW5kIGFib3ZlLCB3ZQotICogc2hvdWxkIHVzZSBJQTY0J3MgYWxnb3JpdGhtCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSB0c2Nfc3luY19kaXNhYmxlZDsKLQogLyogUGVyIENQVSBib2dvbWlwcyBhbmQgb3RoZXIgcGFyYW1ldGVycyAqLwogc3RydWN0IGNwdWluZm9feDg2IGNwdV9kYXRhW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiBFWFBPUlRfU1lNQk9MKGNwdV9kYXRhKTsKQEAgLTIxNSwxNTEgKzIxMCw2IEBACiAJOwogfQogCi0vKgotICogVFNDIHN5bmNocm9uaXphdGlvbi4KLSAqCi0gKiBXZSBmaXJzdCBjaGVjayB3aGV0aGVyIGFsbCBDUFVzIGhhdmUgdGhlaXIgVFNDJ3Mgc3luY2hyb25pemVkLAotICogdGhlbiB3ZSBwcmludCBhIHdhcm5pbmcgaWYgbm90LCBhbmQgYWx3YXlzIHJlc3luYy4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHsKLQlhdG9taWNfdCBzdGFydF9mbGFnOwotCWF0b21pY190IGNvdW50X3N0YXJ0OwotCWF0b21pY190IGNvdW50X3N0b3A7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlc1tOUl9DUFVTXTsKLX0gdHNjIF9fY3B1aW5pdGRhdGEgPSB7Ci0JLnN0YXJ0X2ZsYWcgPSBBVE9NSUNfSU5JVCgwKSwKLQkuY291bnRfc3RhcnQgPSBBVE9NSUNfSU5JVCgwKSwKLQkuY291bnRfc3RvcCA9IEFUT01JQ19JTklUKDApLAotfTsKLQotI2RlZmluZSBOUl9MT09QUyA1Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzeW5jaHJvbml6ZV90c2NfYnAodm9pZCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdDA7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHN1bSwgYXZnOwotCWxvbmcgbG9uZyBkZWx0YTsKLQl1bnNpZ25lZCBpbnQgb25lX3VzZWM7Ci0JaW50IGJ1Z2d5ID0gMDsKLQotCXByaW50ayhLRVJOX0lORk8gImNoZWNraW5nIFRTQyBzeW5jaHJvbml6YXRpb24gYWNyb3NzICV1IENQVXM6ICIsIG51bV9ib290aW5nX2NwdXMoKSk7Ci0KLQkvKiBjb252ZXJ0IGZyb20ga2N5Yy9zZWMgdG8gY3ljL3VzZWMgKi8KLQlvbmVfdXNlYyA9IGNwdV9raHogLyAxMDAwOwotCi0JYXRvbWljX3NldCgmdHNjLnN0YXJ0X2ZsYWcsIDEpOwotCXdtYigpOwotCi0JLyoKLQkgKiBXZSBsb29wIGEgZmV3IHRpbWVzIHRvIGdldCBhIHByaW1lZCBpbnN0cnVjdGlvbiBjYWNoZSwKLQkgKiB0aGVuIHRoZSBsYXN0IHBhc3MgaXMgbW9yZSBvciBsZXNzIHN5bmNocm9uaXplZCBhbmQKLQkgKiB0aGUgQlAgYW5kIEFQcyBzZXQgdGhlaXIgY3ljbGUgY291bnRlcnMgdG8gemVybyBhbGwgYXQKLQkgKiBvbmNlLiBUaGlzIHJlZHVjZXMgdGhlIGNoYW5jZSBvZiBoYXZpbmcgcmFuZG9tIG9mZnNldHMKLQkgKiBiZXR3ZWVuIHRoZSBwcm9jZXNzb3JzLCBhbmQgZ3VhcmFudGVlcyB0aGF0IHRoZSBtYXhpbXVtCi0JICogZGVsYXkgYmV0d2VlbiB0aGUgY3ljbGUgY291bnRlcnMgaXMgbmV2ZXIgYmlnZ2VyIHRoYW4KLQkgKiB0aGUgbGF0ZW5jeSBvZiBpbmZvcm1hdGlvbi1wYXNzaW5nIChjYWNoZWxpbmVzKSBiZXR3ZWVuCi0JICogdHdvIENQVXMuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IE5SX0xPT1BTOyBpKyspIHsKLQkJLyoKLQkJICogYWxsIEFQcyBzeW5jaHJvbml6ZSBidXQgdGhleSBsb29wIG9uICc9PSBudW1fY3B1cycKLQkJICovCi0JCXdoaWxlIChhdG9taWNfcmVhZCgmdHNjLmNvdW50X3N0YXJ0KSAhPSBudW1fYm9vdGluZ19jcHVzKCktMSkKLQkJCWNwdV9yZWxheCgpOwotCQlhdG9taWNfc2V0KCZ0c2MuY291bnRfc3RvcCwgMCk7Ci0JCXdtYigpOwotCQkvKgotCQkgKiB0aGlzIGxldHMgdGhlIEFQcyBzYXZlIHRoZWlyIGN1cnJlbnQgVFNDOgotCQkgKi8KLQkJYXRvbWljX2luYygmdHNjLmNvdW50X3N0YXJ0KTsKLQotCQlyZHRzY2xsKHRzYy52YWx1ZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7Ci0JCS8qCi0JCSAqIFdlIGNsZWFyIHRoZSBUU0MgaW4gdGhlIGxhc3QgbG9vcDoKLQkJICovCi0JCWlmIChpID09IE5SX0xPT1BTLTEpCi0JCQl3cml0ZV90c2MoMCwgMCk7Ci0KLQkJLyoKLQkJICogV2FpdCBmb3IgYWxsIEFQcyB0byBsZWF2ZSB0aGUgc3luY2hyb25pemF0aW9uIHBvaW50OgotCQkgKi8KLQkJd2hpbGUgKGF0b21pY19yZWFkKCZ0c2MuY291bnRfc3RvcCkgIT0gbnVtX2Jvb3RpbmdfY3B1cygpLTEpCi0JCQljcHVfcmVsYXgoKTsKLQkJYXRvbWljX3NldCgmdHNjLmNvdW50X3N0YXJ0LCAwKTsKLQkJd21iKCk7Ci0JCWF0b21pY19pbmMoJnRzYy5jb3VudF9zdG9wKTsKLQl9Ci0KLQlzdW0gPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJaWYgKGNwdV9pc3NldChpLCBjcHVfY2FsbG91dF9tYXApKSB7Ci0JCQl0MCA9IHRzYy52YWx1ZXNbaV07Ci0JCQlzdW0gKz0gdDA7Ci0JCX0KLQl9Ci0JYXZnID0gc3VtOwotCWRvX2RpdihhdmcsIG51bV9ib290aW5nX2NwdXMoKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWlmICghY3B1X2lzc2V0KGksIGNwdV9jYWxsb3V0X21hcCkpCi0JCQljb250aW51ZTsKLQkJZGVsdGEgPSB0c2MudmFsdWVzW2ldIC0gYXZnOwotCQlpZiAoZGVsdGEgPCAwKQotCQkJZGVsdGEgPSAtZGVsdGE7Ci0JCS8qCi0JCSAqIFdlIHJlcG9ydCBiaWdnZXIgdGhhbiAyIG1pY3Jvc2Vjb25kcyBjbG9jayBkaWZmZXJlbmNlcy4KLQkJICovCi0JCWlmIChkZWx0YSA+IDIqb25lX3VzZWMpIHsKLQkJCWxvbmcgbG9uZyByZWFsZGVsdGE7Ci0KLQkJCWlmICghYnVnZ3kpIHsKLQkJCQlidWdneSA9IDE7Ci0JCQkJcHJpbnRrKCJcbiIpOwotCQkJfQotCQkJcmVhbGRlbHRhID0gZGVsdGE7Ci0JCQlkb19kaXYocmVhbGRlbHRhLCBvbmVfdXNlYyk7Ci0JCQlpZiAodHNjLnZhbHVlc1tpXSA8IGF2ZykKLQkJCQlyZWFsZGVsdGEgPSAtcmVhbGRlbHRhOwotCi0JCQlpZiAocmVhbGRlbHRhKQotCQkJCXByaW50ayhLRVJOX0lORk8gIkNQVSMlZCBoYWQgJUxkIHVzZWNzIFRTQyAiCi0JCQkJCSJza2V3LCBmaXhlZCBpdCB1cC5cbiIsIGksIHJlYWxkZWx0YSk7Ci0JCX0KLQl9Ci0JaWYgKCFidWdneSkKLQkJcHJpbnRrKCJwYXNzZWQuXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgX19jcHVpbml0IHN5bmNocm9uaXplX3RzY19hcCh2b2lkKQotewotCWludCBpOwotCi0JLyoKLQkgKiBOb3QgZXZlcnkgY3B1IGlzIG9ubGluZSBhdCB0aGUgdGltZQotCSAqIHRoaXMgZ2V0cyBjYWxsZWQsIHNvIHdlIGZpcnN0IHdhaXQgZm9yIHRoZSBCUCB0bwotCSAqIGZpbmlzaCBTTVAgaW5pdGlhbGl6YXRpb246Ci0JICovCi0Jd2hpbGUgKCFhdG9taWNfcmVhZCgmdHNjLnN0YXJ0X2ZsYWcpKQotCQljcHVfcmVsYXgoKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOUl9MT09QUzsgaSsrKSB7Ci0JCWF0b21pY19pbmMoJnRzYy5jb3VudF9zdGFydCk7Ci0JCXdoaWxlIChhdG9taWNfcmVhZCgmdHNjLmNvdW50X3N0YXJ0KSAhPSBudW1fYm9vdGluZ19jcHVzKCkpCi0JCQljcHVfcmVsYXgoKTsKLQotCQlyZHRzY2xsKHRzYy52YWx1ZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7Ci0JCWlmIChpID09IE5SX0xPT1BTLTEpCi0JCQl3cml0ZV90c2MoMCwgMCk7Ci0KLQkJYXRvbWljX2luYygmdHNjLmNvdW50X3N0b3ApOwotCQl3aGlsZSAoYXRvbWljX3JlYWQoJnRzYy5jb3VudF9zdG9wKSAhPSBudW1fYm9vdGluZ19jcHVzKCkpCi0JCQljcHVfcmVsYXgoKTsKLQl9Ci19Ci0jdW5kZWYgTlJfTE9PUFMKLQogZXh0ZXJuIHZvaWQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpOwogCiBzdGF0aWMgYXRvbWljX3QgaW5pdF9kZWFzc2VydGVkOwpAQCAtNDM3LDIwICsyODcsMTIgQEAKIAkvKgogCSAqIFNhdmUgb3VyIHByb2Nlc3NvciBwYXJhbWV0ZXJzCiAJICovCi0gCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHVpZCk7Ci0KLQlkaXNhYmxlX0FQSUNfdGltZXIoKTsKKwlzbXBfc3RvcmVfY3B1X2luZm8oY3B1aWQpOwogCiAJLyoKIAkgKiBBbGxvdyB0aGUgbWFzdGVyIHRvIGNvbnRpbnVlLgogCSAqLwogCWNwdV9zZXQoY3B1aWQsIGNwdV9jYWxsaW5fbWFwKTsKLQotCS8qCi0JICogICAgICBTeW5jaHJvbml6ZSB0aGUgVFNDIHdpdGggdGhlIEJQCi0JICovCi0JaWYgKGNwdV9oYXNfdHNjICYmIGNwdV9raHogJiYgIXRzY19zeW5jX2Rpc2FibGVkKQotCQlzeW5jaHJvbml6ZV90c2NfYXAoKTsKIH0KIAogc3RhdGljIGludCBjcHVjb3VudDsKQEAgLTU0NSwxOCArMzg3LDI1IEBACiAJICogYm9vdGluZyBpcyB0b28gZnJhZ2lsZSB0aGF0IHdlIHdhbnQgdG8gbGltaXQgdGhlCiAJICogdGhpbmdzIGRvbmUgaGVyZSB0byB0aGUgbW9zdCBuZWNlc3NhcnkgdGhpbmdzLgogCSAqLworI2lmZGVmIENPTkZJR19WTUkKKwl2bWlfYnJpbmd1cCgpOworI2VuZGlmCiAJc2Vjb25kYXJ5X2NwdV9pbml0KCk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJc21wX2NhbGxpbigpOwogCXdoaWxlICghY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgc21wX2NvbW1lbmNlZF9tYXNrKSkKIAkJcmVwX25vcCgpOwotCXNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKCk7CisJLyoKKwkgKiBDaGVjayBUU0Mgc3luY2hyb25pemF0aW9uIHdpdGggdGhlIEJQOgorCSAqLworCWNoZWNrX3RzY19zeW5jX3RhcmdldCgpOworCisJc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKCk7CiAJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewogCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKIAkJZW5hYmxlX05NSV90aHJvdWdoX0xWVDAoTlVMTCk7CiAJCWVuYWJsZV84MjU5QV9pcnEoMCk7CiAJfQotCWVuYWJsZV9BUElDX3RpbWVyKCk7CiAJLyoKIAkgKiBsb3ctbWVtb3J5IG1hcHBpbmdzIGhhdmUgYmVlbiBjbGVhcmVkLCBmbHVzaCB0aGVtIGZyb20KIAkgKiB0aGUgbG9jYWwgVExCcyB0b28uCkBAIC02MTksNyArNDY4LDYgQEAKIAl1bnNpZ25lZCBzaG9ydCBzczsKIH0gc3RhY2tfc3RhcnQ7CiBleHRlcm4gc3RydWN0IGkzODZfcGRhICpzdGFydF9wZGE7Ci1leHRlcm4gc3RydWN0IFhndF9kZXNjX3N0cnVjdCBjcHVfZ2R0X2Rlc2NyOwogCiAjaWZkZWYgQ09ORklHX05VTUEKIApAQCAtNzQ5LDcgKzU5Nyw3IEBACiAJLyoKIAkgKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuCiAJICovCi0JbWF4bHZ0ID0gZ2V0X21heGx2dCgpOworCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKIAlpZiAobWF4bHZ0ID4gMykgewogCQlhcGljX3JlYWRfYXJvdW5kKEFQSUNfU1BJVik7CiAJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwpAQCAtODM1LDExICs2ODMsMTggQEAKIAkJbnVtX3N0YXJ0cyA9IDA7CiAKIAkvKgorCSAqIFBhcmF2aXJ0IC8gVk1JIHdhbnRzIGEgc3RhcnR1cCBJUEkgaG9vayBoZXJlIHRvIHNldCB1cCB0aGUKKwkgKiB0YXJnZXQgcHJvY2Vzc29yIHN0YXRlLgorCSAqLworCXN0YXJ0dXBfaXBpX2hvb2socGh5c19hcGljaWQsICh1bnNpZ25lZCBsb25nKSBzdGFydF9zZWNvbmRhcnksCisJCSAgICAgICAgICh1bnNpZ25lZCBsb25nKSBzdGFja19zdGFydC5lc3ApOworCisJLyoKIAkgKiBSdW4gU1RBUlRVUCBJUEkgbG9vcC4KIAkgKi8KIAlEcHJpbnRrKCIjc3RhcnR1cCBsb29wczogJWQuXG4iLCBudW1fc3RhcnRzKTsKIAotCW1heGx2dCA9IGdldF9tYXhsdnQoKTsKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CiAKIAlmb3IgKGogPSAxOyBqIDw9IG51bV9zdGFydHM7IGorKykgewogCQlEcHJpbnRrKCJTZW5kaW5nIFNUQVJUVVAgIyVkLlxuIixqKTsKQEAgLTExMTUsOCArOTcwLDYgQEAKIAlpbmZvLmNwdSA9IGNwdTsKIAlJTklUX1dPUksoJmluZm8udGFzaywgZG9fd2FybV9ib290X2NwdSk7CiAKLQl0c2Nfc3luY19kaXNhYmxlZCA9IDE7Ci0KIAkvKiBpbml0IGxvdyBtZW0gbWFwcGluZyAqLwogCWNsb25lX3BnZF9yYW5nZShzd2FwcGVyX3BnX2Rpciwgc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BHRF9QVFJTLAogCQkJbWluX3QodW5zaWduZWQgbG9uZywgS0VSTkVMX1BHRF9QVFJTLCBVU0VSX1BHRF9QVFJTKSk7CkBAIC0xMTI0LDcgKzk3Nyw2IEBACiAJc2NoZWR1bGVfd29yaygmaW5mby50YXNrKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKIAotCXRzY19zeW5jX2Rpc2FibGVkID0gMDsKIAl6YXBfbG93X21hcHBpbmdzKCk7CiAJcmV0ID0gMDsKIGV4aXQ6CkBAIC0xMzIwLDEzICsxMTcyLDcgQEAKIAogCXNtcGJvb3Rfc2V0dXBfaW9fYXBpYygpOwogCi0Jc2V0dXBfYm9vdF9BUElDX2Nsb2NrKCk7Ci0KLQkvKgotCSAqIFN5bmNocm9uaXplIHRoZSBUU0Mgd2l0aCB0aGUgQVAKLQkgKi8KLQlpZiAoY3B1X2hhc190c2MgJiYgY3B1Y291bnQgJiYgY3B1X2toeikKLQkJc3luY2hyb25pemVfdHNjX2JwKCk7CisJc2V0dXBfYm9vdF9jbG9jaygpOwogfQogCiAvKiBUaGVzZSBhcmUgd3JhcHBlcnMgdG8gaW50ZXJmYWNlIHRvIHRoZSBuZXcgYm9vdCBwcm9jZXNzLiAgU29tZW9uZQpAQCAtMTQ2MSw5ICsxMzA3LDE2IEBACiAJfQogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOworCiAJcGVyX2NwdShjcHVfc3RhdGUsIGNwdSkgPSBDUFVfVVBfUFJFUEFSRTsKIAkvKiBVbmxlYXNoIHRoZSBDUFUhICovCiAJY3B1X3NldChjcHUsIHNtcF9jb21tZW5jZWRfbWFzayk7CisKKwkvKgorCSAqIENoZWNrIFRTQyBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgQVA6CisJICovCisJY2hlY2tfdHNjX3N5bmNfc291cmNlKGNwdSk7CisKIAl3aGlsZSAoIWNwdV9pc3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKSkKIAkJY3B1X3JlbGF4KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc3lzZW50ZXIuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzZW50ZXIuYwppbmRleCBiYzg4MmEyLi4xM2NhNTRhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3N5c2VudGVyLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zeXNlbnRlci5jCkBAIC03OCw3ICs3OCw3IEBACiAJc3lzY2FsbF9wYWdlc1swXSA9IHZpcnRfdG9fcGFnZShzeXNjYWxsX3BhZ2UpOwogCiAjaWZkZWYgQ09ORklHX0NPTVBBVF9WRFNPCi0JX19zZXRfZml4bWFwKEZJWF9WRFNPLCBfX3BhKHN5c2NhbGxfcGFnZSksIFBBR0VfUkVBRE9OTFkpOworCV9fc2V0X2ZpeG1hcChGSVhfVkRTTywgX19wYShzeXNjYWxsX3BhZ2UpLCBQQUdFX1JFQURPTkxZX0VYRUMpOwogCXByaW50aygiQ29tcGF0IHZEU08gbWFwcGVkIHRvICUwOGx4LlxuIiwgX19maXhfdG9fdmlydChGSVhfVkRTTykpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lLmMKaW5kZXggYzUwNWIxNi4uYTUzNTAwNSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lLmMKQEAgLTEzMSwxNSArMTMxLDEzIEBACiAJdW5zaWduZWQgbG9uZyBwYyA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKCF1c2VyX21vZGVfdm0ocmVncykgJiYgaW5fbG9ja19mdW5jdGlvbnMocGMpKSB7CisJaWYgKCF2ODA4Nl9tb2RlKHJlZ3MpICYmIFNFR01FTlRfSVNfS0VSTkVMX0NPREUocmVncy0+eGNzKSAmJgorCSAgICBpbl9sb2NrX2Z1bmN0aW9ucyhwYykpIHsKICNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgogCQlyZXR1cm4gKih1bnNpZ25lZCBsb25nICopKHJlZ3MtPmVicCArIDQpOwogI2Vsc2UKLQkJdW5zaWduZWQgbG9uZyAqc3A7Ci0JCWlmICgocmVncy0+eGNzICYgMykgPT0gMCkKLQkJCXNwID0gKHVuc2lnbmVkIGxvbmcgKikmcmVncy0+ZXNwOwotCQllbHNlCi0JCQlzcCA9ICh1bnNpZ25lZCBsb25nICopcmVncy0+ZXNwOworCQl1bnNpZ25lZCBsb25nICpzcCA9ICh1bnNpZ25lZCBsb25nICopJnJlZ3MtPmVzcDsKKwogCQkvKiBSZXR1cm4gYWRkcmVzcyBpcyBlaXRoZXIgZGlyZWN0bHkgYXQgc3RhY2sgcG9pbnRlcgogCQkgICBvciBhYm92ZSBhIHNhdmVkIGVmbGFncy4gRWZsYWdzIGhhcyBiaXRzIDIyLTMxIHplcm8sCiAJCSAgIGtlcm5lbCBhZGRyZXNzZXMgZG9uJ3QuICovCkBAIC0xNjEsMTUgKzE1OSw2IEBACiAgKi8KIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JLyoKLQkgKiBIZXJlIHdlIGFyZSBpbiB0aGUgdGltZXIgaXJxIGhhbmRsZXIuIFdlIGp1c3QgaGF2ZSBpcnFzIGxvY2FsbHkKLQkgKiBkaXNhYmxlZCBidXQgd2UgZG9uJ3Qga25vdyBpZiB0aGUgdGltZXJfYmggaXMgcnVubmluZyBvbiB0aGUgb3RoZXIKLQkgKiBDUFUuIFdlIG5lZWQgdG8gYXZvaWQgdG8gU01QIHJhY2Ugd2l0aCBpdC4gTk9URTogd2UgZG9uJyB0IG5lZWQKLQkgKiB0aGUgaXJxIHZlcnNpb24gb2Ygd3JpdGVfbG9jayBiZWNhdXNlIGFzIGp1c3Qgc2FpZCB3ZSBoYXZlIGlycQotCSAqIGxvY2FsbHkgZGlzYWJsZWQuIC1hcmNhCi0JICovCi0Jd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7Ci0KICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAlpZiAodGltZXJfYWNrKSB7CiAJCS8qCkBAIC0xODgsNyArMTc3LDYgQEAKIAogCWRvX3RpbWVyX2ludGVycnVwdF9ob29rKCk7CiAKLQogCWlmIChNQ0FfYnVzKSB7CiAJCS8qIFRoZSBQUy8yIHVzZXMgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMuICBZb3UgY2FuJ3QKIAkJdHVybiB0aGVtIG9mZiwgbm9yIHdvdWxkIHlvdSB3YW50IHRvIChhbnkgYXR0ZW1wdCB0bwpAQCAtMjAzLDE4ICsxOTEsMTEgQEAKIAkJb3V0Yl9wKCBpcnFfdnwweDgwLCAweDYxICk7CS8qIHJlc2V0IHRoZSBJUlEgKi8KIAl9CiAKLQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JaWYgKHVzaW5nX2FwaWNfdGltZXIpCi0JCXNtcF9zZW5kX3RpbWVyX2Jyb2FkY2FzdF9pcGkoKTsKLSNlbmRpZgotCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiAvKiBub3Qgc3RhdGljOiBuZWVkZWQgYnkgQVBNICovCi11bnNpZ25lZCBsb25nIGdldF9jbW9zX3RpbWUodm9pZCkKK3Vuc2lnbmVkIGxvbmcgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyByZXR2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIyNywxMSArMjA4LDExIEBACiAKIAlyZXR1cm4gcmV0dmFsOwogfQotRVhQT1JUX1NZTUJPTChnZXRfY21vc190aW1lKTsKIAogc3RhdGljIHZvaWQgc3luY19jbW9zX2Nsb2NrKHVuc2lnbmVkIGxvbmcgZHVtbXkpOwogCiBzdGF0aWMgREVGSU5FX1RJTUVSKHN5bmNfY21vc190aW1lciwgc3luY19jbW9zX2Nsb2NrLCAwLCAwKTsKK2ludCBub19zeW5jX2Ntb3NfY2xvY2s7CiAKIHN0YXRpYyB2b2lkIHN5bmNfY21vc19jbG9jayh1bnNpZ25lZCBsb25nIGR1bW15KQogewpAQCAtMjc1LDExNyArMjU2LDIwIEBACiAKIHZvaWQgbm90aWZ5X2FyY2hfY21vc190aW1lcih2b2lkKQogewotCW1vZF90aW1lcigmc3luY19jbW9zX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJaWYgKCFub19zeW5jX2Ntb3NfY2xvY2spCisJCW1vZF90aW1lcigmc3luY19jbW9zX3RpbWVyLCBqaWZmaWVzICsgMSk7CiB9CiAKLXN0YXRpYyBsb25nIGNsb2NrX2Ntb3NfZGlmZjsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNsZWVwX3N0YXJ0OwotCi1zdGF0aWMgaW50IHRpbWVyX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCS8qCi0JICogRXN0aW1hdGUgdGltZSB6b25lIHNvIHRoYXQgc2V0X3RpbWUgY2FuIHVwZGF0ZSB0aGUgY2xvY2sKLQkgKi8KLQl1bnNpZ25lZCBsb25nIGN0aW1lID0gIGdldF9jbW9zX3RpbWUoKTsKLQotCWNsb2NrX2Ntb3NfZGlmZiA9IC1jdGltZTsKLQljbG9ja19jbW9zX2RpZmYgKz0gZ2V0X3NlY29uZHMoKTsKLQlzbGVlcF9zdGFydCA9IGN0aW1lOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRpbWVyX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBzZWM7Ci0JdW5zaWduZWQgbG9uZyBjdGltZSA9IGdldF9jbW9zX3RpbWUoKTsKLQlsb25nIHNsZWVwX2xlbmd0aCA9IChjdGltZSAtIHNsZWVwX3N0YXJ0KSAqIEhaOwotCXN0cnVjdCB0aW1lc3BlYyB0czsKLQotCWlmIChzbGVlcF9sZW5ndGggPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNNT1MgY2xvY2sgc2tldyBkZXRlY3RlZCBpbiB0aW1lciByZXN1bWUhXG4iKTsKLQkJLyogVGhlIHRpbWUgYWZ0ZXIgdGhlIHJlc3VtZSBtdXN0IG5vdCBiZSBlYXJsaWVyIHRoYW4gdGhlIHRpbWUKLQkJICogYmVmb3JlIHRoZSBzdXNwZW5kIG9yIHNvbWUgbmFzdHkgdGhpbmdzIHdpbGwgaGFwcGVuCi0JCSAqLwotCQlzbGVlcF9sZW5ndGggPSAwOwotCQljdGltZSA9IHNsZWVwX3N0YXJ0OwotCX0KLSNpZmRlZiBDT05GSUdfSFBFVF9USU1FUgotCWlmIChpc19ocGV0X2VuYWJsZWQoKSkKLQkJaHBldF9yZWVuYWJsZSgpOwotI2VuZGlmCi0Jc2V0dXBfcGl0X3RpbWVyKCk7Ci0KLQlzZWMgPSBjdGltZSArIGNsb2NrX2Ntb3NfZGlmZjsKLQl0cy50dl9zZWMgPSBzZWM7Ci0JdHMudHZfbnNlYyA9IDA7Ci0JZG9fc2V0dGltZW9mZGF5KCZ0cyk7Ci0Jd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0JamlmZmllc182NCArPSBzbGVlcF9sZW5ndGg7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHRpbWVyX3N5c2NsYXNzID0gewotCS5yZXN1bWUgPSB0aW1lcl9yZXN1bWUsCi0JLnN1c3BlbmQgPSB0aW1lcl9zdXNwZW5kLAotCXNldF9rc2V0X25hbWUoInRpbWVyIiksCi19OwotCi0KLS8qIFhYWCB0aGlzIGRyaXZlcmZzIHN0dWZmIHNob3VsZCBwcm9iYWJseSBnbyBlbHNld2hlcmUgbGF0ZXIgLWpvaG4gKi8KLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfdGltZXIgPSB7Ci0JLmlkCT0gMCwKLQkuY2xzCT0gJnRpbWVyX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIGludCB0aW1lX2luaXRfZGV2aWNlKHZvaWQpCi17Ci0JaW50IGVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ0aW1lcl9zeXNjbGFzcyk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmRldmljZV90aW1lcik7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1kZXZpY2VfaW5pdGNhbGwodGltZV9pbml0X2RldmljZSk7Ci0KLSNpZmRlZiBDT05GSUdfSFBFVF9USU1FUgogZXh0ZXJuIHZvaWQgKCpsYXRlX3RpbWVfaW5pdCkodm9pZCk7CiAvKiBEdXBsaWNhdGUgb2YgdGltZV9pbml0KCkgYmVsb3csIHdpdGggaHBldF9lbmFibGUgcGFydCBhZGRlZCAqLwogc3RhdGljIHZvaWQgX19pbml0IGhwZXRfdGltZV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHRpbWVzcGVjIHRzOwotCXRzLnR2X3NlYyA9IGdldF9jbW9zX3RpbWUoKTsKLQl0cy50dl9uc2VjID0gKElOSVRJQUxfSklGRklFUyAlIEhaKSAqIChOU0VDX1BFUl9TRUMgLyBIWik7Ci0KLQlkb19zZXR0aW1lb2ZkYXkoJnRzKTsKLQotCWlmICgoaHBldF9lbmFibGUoKSA+PSAwKSAmJiBocGV0X3VzZV90aW1lcikgewotCQlwcmludGsoIlVzaW5nIEhQRVQgZm9yIGJhc2UtdGltZXJcbiIpOwotCX0KLQorCWlmICghaHBldF9lbmFibGUoKSkKKwkJc2V0dXBfcGl0X3RpbWVyKCk7CiAJZG9fdGltZV9pbml0KCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHRpbWVzcGVjIHRzOwotI2lmZGVmIENPTkZJR19IUEVUX1RJTUVSCi0JaWYgKGlzX2hwZXRfY2FwYWJsZSgpKSB7Ci0JCS8qCi0JCSAqIEhQRVQgaW5pdGlhbGl6YXRpb24gbmVlZHMgdG8gZG8gbWVtb3J5LW1hcHBlZCBpby4gU28sIGxldAotCQkgKiB1cyBkbyBhIGxhdGUgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgbWVtX2luaXQoKS4KLQkJICovCi0JCWxhdGVfdGltZV9pbml0ID0gaHBldF90aW1lX2luaXQ7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQl0cy50dl9zZWMgPSBnZXRfY21vc190aW1lKCk7Ci0JdHMudHZfbnNlYyA9IChJTklUSUFMX0pJRkZJRVMgJSBIWikgKiAoTlNFQ19QRVJfU0VDIC8gSFopOwotCi0JZG9fc2V0dGltZW9mZGF5KCZ0cyk7Ci0KLQlkb190aW1lX2luaXQoKTsKKwlsYXRlX3RpbWVfaW5pdCA9IGhwZXRfdGltZV9pbml0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lX2hwZXQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZV9ocGV0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNDcwMmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lX2hwZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5NyArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvdGltZV9ocGV0LmMKLSAqICBUaGlzIGNvZGUgbGFyZ2VseSBjb3BpZWQgZnJvbSBhcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCi0gKiAgU2VlIHRoYXQgZmlsZSBmb3IgY3JlZGl0cy4KLSAqCi0gKiAgMjAwMy0wNi0zMCAgICBWZW5rYXRlc2ggUGFsbGlwYWRpIC0gQWRkaXRpb25hbCBjaGFuZ2VzIGZvciBIUEVUIHN1cHBvcnQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLQotI2luY2x1ZGUgPGFzbS90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLSNpbmNsdWRlIDxhc20vYXBpYy5oPgotCi0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLQotI2luY2x1ZGUgPGFzbS9ocGV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaHBldC5oPgotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBocGV0X3BlcmlvZDsJLyogZnNlY3MgLyBIUEVUIGNsb2NrICovCi11bnNpZ25lZCBsb25nIGhwZXRfdGljazsJCS8qIGhwZXQgY2xrcyBjb3VudCBwZXIgdGljayAqLwotdW5zaWduZWQgbG9uZyBocGV0X2FkZHJlc3M7CQkvKiBocGV0IG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqLwotaW50IGhwZXRfdXNlX3RpbWVyOwotCi1zdGF0aWMgaW50IHVzZV9ocGV0OyAJCS8qIGNhbiBiZSB1c2VkIGZvciBydW50aW1lIGNoZWNrIG9mIGhwZXQgKi8KLXN0YXRpYyBpbnQgYm9vdF9ocGV0X2Rpc2FibGU7IAkvKiBib290dGltZSBvdmVycmlkZSBmb3IgSFBFVCB0aW1lciAqLwotc3RhdGljIHZvaWQgX19pb21lbSAqIGhwZXRfdmlydF9hZGRyZXNzOwkvKiBocGV0IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKi8KLQotI2RlZmluZSBGU0VDX1RPX1VTRUMgKDEwMDAwMDAwMDBVTCkKLQotaW50IGhwZXRfcmVhZGwodW5zaWduZWQgbG9uZyBhKQotewotCXJldHVybiByZWFkbChocGV0X3ZpcnRfYWRkcmVzcyArIGEpOwotfQotCi1zdGF0aWMgdm9pZCBocGV0X3dyaXRlbCh1bnNpZ25lZCBsb25nIGQsIHVuc2lnbmVkIGxvbmcgYSkKLXsKLQl3cml0ZWwoZCwgaHBldF92aXJ0X2FkZHJlc3MgKyBhKTsKLX0KLQotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotLyoKLSAqIEhQRVQgY291bnRlcnMgZG9udCB3cmFwIGFyb3VuZCBvbiBldmVyeSB0aWNrLiBUaGV5IGp1c3QgY2hhbmdlIHRoZQotICogY29tcGFyYXRvciB2YWx1ZSBhbmQgY29udGludWUuIE5leHQgdGljayBjYW4gYmUgY2F1Z2h0IGJ5IGNoZWNraW5nCi0gKiBmb3IgYSBjaGFuZ2UgaW4gdGhlIGNvbXBhcmF0b3IgdmFsdWUuIFVzZWQgaW4gYXBpYy5jLgotICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgd2FpdF9ocGV0X3RpY2sodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgc3RhcnRfY21wX3ZhbCwgZW5kX2NtcF92YWw7Ci0KLQlzdGFydF9jbXBfdmFsID0gaHBldF9yZWFkbChIUEVUX1QwX0NNUCk7Ci0JZG8gewotCQllbmRfY21wX3ZhbCA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DTVApOwotCX0gd2hpbGUgKHN0YXJ0X2NtcF92YWwgPT0gZW5kX2NtcF92YWwpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgaHBldF90aW1lcl9zdG9wX3NldF9nbyh1bnNpZ25lZCBsb25nIHRpY2spCi17Ci0JdW5zaWduZWQgaW50IGNmZzsKLQotCS8qCi0JICogU3RvcCB0aGUgdGltZXJzIGFuZCByZXNldCB0aGUgbWFpbiBjb3VudGVyLgotCSAqLwotCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9DRkcpOwotCWNmZyAmPSB+SFBFVF9DRkdfRU5BQkxFOwotCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9DRkcpOwotCWhwZXRfd3JpdGVsKDAsIEhQRVRfQ09VTlRFUik7Ci0JaHBldF93cml0ZWwoMCwgSFBFVF9DT1VOVEVSICsgNCk7Ci0KLQlpZiAoaHBldF91c2VfdGltZXIpIHsKLQkJLyoKLQkJICogU2V0IHVwIHRpbWVyIDAsIGFzIHBlcmlvZGljIHdpdGggZmlyc3QgaW50ZXJydXB0IHRvIGhhcHBlbiBhdAotCQkgKiBocGV0X3RpY2ssIGFuZCBwZXJpb2QgYWxzbyBocGV0X3RpY2suCi0JCSAqLwotCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVDBfQ0ZHKTsKLQkJY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl9QRVJJT0RJQyB8Ci0JCSAgICAgICBIUEVUX1ROX1NFVFZBTCB8IEhQRVRfVE5fMzJCSVQ7Ci0JCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMF9DRkcpOwotCi0JCS8qCi0JCSAqIFRoZSBmaXJzdCB3cml0ZSBhZnRlciB3cml0aW5nIFROX1NFVFZBTCB0byB0aGUgY29uZmlnIHJlZ2lzdGVyIHNldHMKLQkJICogdGhlIGNvdW50ZXIgdmFsdWUsIHRoZSBzZWNvbmQgd3JpdGUgc2V0cyB0aGUgdGhyZXNob2xkLgotCQkgKi8KLQkJaHBldF93cml0ZWwodGljaywgSFBFVF9UMF9DTVApOwotCQlocGV0X3dyaXRlbCh0aWNrLCBIUEVUX1QwX0NNUCk7Ci0JfQotCS8qCi0gCSAqIEdvIQotIAkgKi8KLQljZmcgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKLQlpZiAoaHBldF91c2VfdGltZXIpCi0JCWNmZyB8PSBIUEVUX0NGR19MRUdBQ1k7Ci0JY2ZnIHw9IEhQRVRfQ0ZHX0VOQUJMRTsKLQlocGV0X3dyaXRlbChjZmcsIEhQRVRfQ0ZHKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogQ2hlY2sgd2hldGhlciBIUEVUIHdhcyBmb3VuZCBieSBBQ1BJIGJvb3QgcGFyc2UuIElmIHllcyBzZXR1cCBIUEVUCi0gKiBjb3VudGVyIDAgZm9yIGtlcm5lbCBiYXNlIHRpbWVyLgotICovCi1pbnQgX19pbml0IGhwZXRfZW5hYmxlKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGlkOwotCXVuc2lnbmVkIGxvbmcgdGlja19mc2VjX2xvdywgdGlja19mc2VjX2hpZ2g7IC8qIHRpY2sgaW4gZmVtdG8gc2VjICovCi0JdW5zaWduZWQgbG9uZyBocGV0X3RpY2tfcmVtOwotCi0JaWYgKGJvb3RfaHBldF9kaXNhYmxlKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoIWhwZXRfYWRkcmVzcykgewotCQlyZXR1cm4gLTE7Ci0JfQotCWhwZXRfdmlydF9hZGRyZXNzID0gaW9yZW1hcF9ub2NhY2hlKGhwZXRfYWRkcmVzcywgSFBFVF9NTUFQX1NJWkUpOwotCS8qCi0JICogUmVhZCB0aGUgcGVyaW9kLCBjb21wdXRlIHRpY2sgYW5kIHF1b3RpZW50LgotCSAqLwotCWlkID0gaHBldF9yZWFkbChIUEVUX0lEKTsKLQotCS8qCi0JICogV2UgYXJlIGNoZWNraW5nIGZvciB2YWx1ZSAnMScgb3IgbW9yZSBpbiBudW1iZXIgZmllbGQgaWYKLQkgKiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQyBpcyBzZXQgYmVjYXVzZSB3ZSB3aWxsIG5lZWQgYW4KLQkgKiBhZGRpdGlvbmFsIHRpbWVyIGZvciBSVEMgZW11bGF0aW9uLgotCSAqIEhvd2V2ZXIsIHdlIGNhbiBkbyB3aXRoIG9uZSB0aW1lciBvdGhlcndpc2UgdXNpbmcgdGhlCi0JICogdGhlIHNpbmdsZSBIUEVUIHRpbWVyIGZvciBzeXN0ZW0gdGltZS4KLQkgKi8KLSNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQwotCWlmICghKGlkICYgSFBFVF9JRF9OVU1CRVIpKSB7Ci0JCWlvdW5tYXAoaHBldF92aXJ0X2FkZHJlc3MpOwotCQlocGV0X3ZpcnRfYWRkcmVzcyA9IE5VTEw7Ci0JCXJldHVybiAtMTsKLQl9Ci0jZW5kaWYKLQotCi0JaHBldF9wZXJpb2QgPSBocGV0X3JlYWRsKEhQRVRfUEVSSU9EKTsKLQlpZiAoKGhwZXRfcGVyaW9kIDwgSFBFVF9NSU5fUEVSSU9EKSB8fCAoaHBldF9wZXJpb2QgPiBIUEVUX01BWF9QRVJJT0QpKSB7Ci0JCWlvdW5tYXAoaHBldF92aXJ0X2FkZHJlc3MpOwotCQlocGV0X3ZpcnRfYWRkcmVzcyA9IE5VTEw7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKgotCSAqIDY0IGJpdCBtYXRoCi0JICogRmlyc3QgY2hhbmdpbmcgdGljayBpbnRvIGZzZWMKLQkgKiBUaGVuIDY0IGJpdCBkaXYgdG8gZmluZCBudW1iZXIgb2YgaHBldCBjbGsgcGVyIHRpY2sKLQkgKi8KLQlBU01fTVVMNjRfUkVHKHRpY2tfZnNlY19sb3csIHRpY2tfZnNlY19oaWdoLAotCQkJS0VSTkVMX1RJQ0tfVVNFQywgRlNFQ19UT19VU0VDKTsKLQlBU01fRElWNjRfUkVHKGhwZXRfdGljaywgaHBldF90aWNrX3JlbSwKLQkJCWhwZXRfcGVyaW9kLCB0aWNrX2ZzZWNfbG93LCB0aWNrX2ZzZWNfaGlnaCk7Ci0KLQlpZiAoaHBldF90aWNrX3JlbSA+IChocGV0X3BlcmlvZCA+PiAxKSkKLQkJaHBldF90aWNrKys7IC8qIHJvdW5kaW5nIHRoZSByZXN1bHQgKi8KLQotCWhwZXRfdXNlX3RpbWVyID0gaWQgJiBIUEVUX0lEX0xFR1NVUDsKLQotCWlmIChocGV0X3RpbWVyX3N0b3Bfc2V0X2dvKGhwZXRfdGljaykpIHsKLQkJaW91bm1hcChocGV0X3ZpcnRfYWRkcmVzcyk7Ci0JCWhwZXRfdmlydF9hZGRyZXNzID0gTlVMTDsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXVzZV9ocGV0ID0gMTsKLQotI2lmZGVmCUNPTkZJR19IUEVUCi0JewotCQlzdHJ1Y3QgaHBldF9kYXRhCWhkOwotCQl1bnNpZ25lZCBpbnQgCQludGltZXI7Ci0KLQkJbWVtc2V0KCZoZCwgMCwgc2l6ZW9mIChoZCkpOwotCi0JCW50aW1lciA9IGhwZXRfcmVhZGwoSFBFVF9JRCk7Ci0JCW50aW1lciA9IChudGltZXIgJiBIUEVUX0lEX05VTUJFUikgPj4gSFBFVF9JRF9OVU1CRVJfU0hJRlQ7Ci0JCW50aW1lcisrOwotCi0JCS8qCi0JCSAqIFJlZ2lzdGVyIHdpdGggZHJpdmVyLgotCQkgKiBUaW1lcjAgYW5kIFRpbWVyMSBpcyB1c2VkIGJ5IHBsYXRmb3JtLgotCQkgKi8KLQkJaGQuaGRfcGh5c19hZGRyZXNzID0gaHBldF9hZGRyZXNzOwotCQloZC5oZF9hZGRyZXNzID0gaHBldF92aXJ0X2FkZHJlc3M7Ci0JCWhkLmhkX25pcnFzID0gbnRpbWVyOwotCQloZC5oZF9mbGFncyA9IEhQRVRfREFUQV9QTEFURk9STTsKLQkJaHBldF9yZXNlcnZlX3RpbWVyKCZoZCwgMCk7Ci0jaWZkZWYJQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKLQkJaHBldF9yZXNlcnZlX3RpbWVyKCZoZCwgMSk7Ci0jZW5kaWYKLQkJaGQuaGRfaXJxWzBdID0gSFBFVF9MRUdBQ1lfODI1NDsKLQkJaGQuaGRfaXJxWzFdID0gSFBFVF9MRUdBQ1lfUlRDOwotCQlpZiAobnRpbWVyID4gMikgewotCQkJc3RydWN0IGhwZXQgX19pb21lbQkqaHBldDsKLQkJCXN0cnVjdCBocGV0X3RpbWVyIF9faW9tZW0gKnRpbWVyOwotCQkJaW50CQkJaTsKLQotCQkJaHBldCA9IGhwZXRfdmlydF9hZGRyZXNzOwotCi0JCQlmb3IgKGkgPSAyLCB0aW1lciA9ICZocGV0LT5ocGV0X3RpbWVyc1syXTsgaSA8IG50aW1lcjsKLQkJCQl0aW1lcisrLCBpKyspCi0JCQkJaGQuaGRfaXJxW2ldID0gKHRpbWVyLT5ocGV0X2NvbmZpZyAmCi0JCQkJCVRuX0lOVF9ST1VURV9DTkZfTUFTSykgPj4KLQkJCQkJVG5fSU5UX1JPVVRFX0NORl9TSElGVDsKLQotCQl9Ci0KLQkJaHBldF9hbGxvYygmaGQpOwotCX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JaWYgKGhwZXRfdXNlX3RpbWVyKQotCQl3YWl0X3RpbWVyX3RpY2sgPSB3YWl0X2hwZXRfdGljazsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1pbnQgaHBldF9yZWVuYWJsZSh2b2lkKQotewotCXJldHVybiBocGV0X3RpbWVyX3N0b3Bfc2V0X2dvKGhwZXRfdGljayk7Ci19Ci0KLWludCBpc19ocGV0X2VuYWJsZWQodm9pZCkKLXsKLQlyZXR1cm4gdXNlX2hwZXQ7Ci19Ci0KLWludCBpc19ocGV0X2NhcGFibGUodm9pZCkKLXsKLQlpZiAoIWJvb3RfaHBldF9kaXNhYmxlICYmIGhwZXRfYWRkcmVzcykKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhwZXRfc2V0dXAoY2hhciogc3RyKQotewotCWlmIChzdHIpIHsKLQkJaWYgKCFzdHJuY21wKCJkaXNhYmxlIiwgc3RyLCA3KSkKLQkJCWJvb3RfaHBldF9kaXNhYmxlID0gMTsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoImhwZXQ9IiwgaHBldF9zZXR1cCk7Ci0KLSNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQwotLyogSFBFVCBpbiBMZWdhY3lSZXBsYWNlbWVudCBNb2RlIGVhdHMgdXAgUlRDIGludGVycnVwdCBsaW5lLiBXaGVuLCBIUEVUCi0gKiBpcyBlbmFibGVkLCB3ZSBzdXBwb3J0IFJUQyBpbnRlcnJ1cHQgZnVuY3Rpb25hbGl0eSBpbiBzb2Z0d2FyZS4KLSAqIFJUQyBoYXMgMyBraW5kcyBvZiBpbnRlcnJ1cHRzOgotICogMSkgVXBkYXRlIEludGVycnVwdCAtIGdlbmVyYXRlIGFuIGludGVycnVwdCwgZXZlcnkgc2VjLCB3aGVuIFJUQyBjbG9jawotICogICAgaXMgdXBkYXRlZAotICogMikgQWxhcm0gSW50ZXJydXB0IC0gZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGF0IGEgc3BlY2lmaWMgdGltZSBvZiBkYXkKLSAqIDMpIFBlcmlvZGljIEludGVycnVwdCAtIGdlbmVyYXRlIHBlcmlvZGljIGludGVycnVwdCwgd2l0aCBmcmVxdWVuY2llcwotICogICAgMkh6LTgxOTJIeiAoMkh6LTY0SHogZm9yIG5vbi1yb290IHVzZXIpIChhbGwgZnJlcXMgaW4gcG93ZXJzIG9mIDIpCi0gKiAoMSkgYW5kICgyKSBhYm92ZSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgcG9sbGluZyBhdCBhIGZyZXF1ZW5jeSBvZgotICogNjQgSHouIFRoZSBleGFjdCBmcmVxdWVuY3kgaXMgYSB0cmFkZW9mZiBiZXR3ZWVuIGFjY3VyYWN5IGFuZCBpbnRlcnJ1cHQKLSAqIG92ZXJoZWFkLiAoREVGQVVMVF9SVENfSU5UX0ZSRVEpCi0gKiBGb3IgKDMpLCB3ZSB1c2UgaW50ZXJydXB0cyBhdCA2NEh6IG9yIHVzZXIgc3BlY2lmaWVkIHBlcmlvZGljCi0gKiBmcmVxdWVuY3ksIHdoaWNoZXZlciBpcyBoaWdoZXIuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgotCi0jZGVmaW5lIERFRkFVTFRfUlRDX0lOVF9GUkVRIAk2NAotI2RlZmluZSBSVENfTlVNX0lOVFMgCQkxCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIFVJRV9vbjsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHByZXZfdXBkYXRlX3NlYzsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgQUlFX29uOwotc3RhdGljIHN0cnVjdCBydGNfdGltZSBhbGFybV90aW1lOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBQSUVfb247Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBQSUVfZnJlcSA9IERFRkFVTFRfUlRDX0lOVF9GUkVROwotc3RhdGljIHVuc2lnbmVkIGxvbmcgUElFX2NvdW50OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBocGV0X3J0Y19pbnRfZnJlcTsgLyogUlRDIGludGVycnVwdCBmcmVxdWVuY3kgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaHBldF90MV9jbXA7IC8qIGNhY2hlZCBjb21wYXJhdG9yIHJlZ2lzdGVyICovCi0KLS8qCi0gKiBUaW1lciAxIGZvciBSVEMsIHdlIGRvIG5vdCB1c2UgcGVyaW9kaWMgaW50ZXJydXB0IGZlYXR1cmUsCi0gKiBldmVuIGlmIEhQRVQgc3VwcG9ydHMgcGVyaW9kaWMgaW50ZXJydXB0cyBvbiBUaW1lciAxLgotICogVGhlIHJlYXNvbiBiZWluZywgdG8gc2V0IHVwIGEgcGVyaW9kaWMgaW50ZXJydXB0IGluIEhQRVQsIHdlIG5lZWQgdG8KLSAqIHN0b3AgdGhlIG1haW4gY291bnRlci4gQW5kIGlmIHdlIGRvIHRoYXQgZXZlcnl0aW1lIHNvbWVvbmUgZGlhYmxlcy9lbmFibGVzCi0gKiBSVEMsIHdlIHdpbGwgaGF2ZSBhZHZlcnNlIGVmZmVjdCBvbiBtYWluIGtlcm5lbCB0aW1lciBydW5uaW5nIG9uIFRpbWVyIDAuCi0gKiBTbywgZm9yIHRoZSB0aW1lIGJlaW5nLCBzaW11bGF0ZSB0aGUgcGVyaW9kaWMgaW50ZXJydXB0IGluIHNvZnR3YXJlLgotICoKLSAqIGhwZXRfcnRjX3RpbWVyX2luaXQoKSBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGFuZCBkdXJpbmcgc3Vic2VxdWVudAotICogaW50ZXJ1cHB0cyByZWluaXQgaGFwcGVucyB0aHJvdWdoIGhwZXRfcnRjX3RpbWVyX3JlaW5pdCgpLgotICovCi1pbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGludCBjZmcsIGNudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKLQkJcmV0dXJuIDA7Ci0JLyoKLQkgKiBTZXQgdGhlIGNvdW50ZXIgMSBhbmQgZW5hYmxlIHRoZSBpbnRlcnJ1cHRzLgotCSAqLwotCWlmIChQSUVfb24gJiYgKFBJRV9mcmVxID4gREVGQVVMVF9SVENfSU5UX0ZSRVEpKQotCQlocGV0X3J0Y19pbnRfZnJlcSA9IFBJRV9mcmVxOwotCWVsc2UKLQkJaHBldF9ydGNfaW50X2ZyZXEgPSBERUZBVUxUX1JUQ19JTlRfRlJFUTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWNudCA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKLQljbnQgKz0gKChocGV0X3RpY2sqSFopL2hwZXRfcnRjX2ludF9mcmVxKTsKLQlocGV0X3dyaXRlbChjbnQsIEhQRVRfVDFfQ01QKTsKLQlocGV0X3QxX2NtcCA9IGNudDsKLQotCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9UMV9DRkcpOwotCWNmZyAmPSB+SFBFVF9UTl9QRVJJT0RJQzsKLQljZmcgfD0gSFBFVF9UTl9FTkFCTEUgfCBIUEVUX1ROXzMyQklUOwotCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMV9DRkcpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGhwZXRfcnRjX3RpbWVyX3JlaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGludCBjZmcsIGNudCwgdGlja3NfcGVyX2ludCwgbG9zdF9pbnRzOwotCi0JaWYgKHVubGlrZWx5KCEoUElFX29uIHwgQUlFX29uIHwgVUlFX29uKSkpIHsKLQkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1QxX0NGRyk7Ci0JCWNmZyAmPSB+SFBFVF9UTl9FTkFCTEU7Ci0JCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMV9DRkcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKFBJRV9vbiAmJiAoUElFX2ZyZXEgPiBERUZBVUxUX1JUQ19JTlRfRlJFUSkpCi0JCWhwZXRfcnRjX2ludF9mcmVxID0gUElFX2ZyZXE7Ci0JZWxzZQotCQlocGV0X3J0Y19pbnRfZnJlcSA9IERFRkFVTFRfUlRDX0lOVF9GUkVROwotCi0JLyogSXQgaXMgbW9yZSBhY2N1cmF0ZSB0byB1c2UgdGhlIGNvbXBhcmF0b3IgdmFsdWUgdGhhbiBjdXJyZW50IGNvdW50LiovCi0JdGlja3NfcGVyX2ludCA9IGhwZXRfdGljayAqIEhaIC8gaHBldF9ydGNfaW50X2ZyZXE7Ci0JaHBldF90MV9jbXAgKz0gdGlja3NfcGVyX2ludDsKLQlocGV0X3dyaXRlbChocGV0X3QxX2NtcCwgSFBFVF9UMV9DTVApOwotCi0JLyoKLQkgKiBJZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRlbGF5ZWQgdG9vIGxvbmcsIHRoZSB3cml0ZSBhYm92ZSB0cmllcwotCSAqIHRvIHNjaGVkdWxlIHRoZSBuZXh0IGludGVycnVwdCBpbiB0aGUgcGFzdCBhbmQgdGhlIGhhcmR3YXJlIHdvdWxkCi0JICogbm90IGludGVycnVwdCB1bnRpbCB0aGUgY291bnRlciBoYWQgd3JhcHBlZCBhcm91bmQuCi0JICogU28gd2UgaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBjb21wYXJhdG9yIHdhc24ndCBzZXQgdG8gYSBwYXN0IHRpbWUuCi0JICovCi0JY250ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwotCWlmICh1bmxpa2VseSgoaW50KShjbnQgLSBocGV0X3QxX2NtcCkgPiAwKSkgewotCQlsb3N0X2ludHMgPSAoY250IC0gaHBldF90MV9jbXApIC8gdGlja3NfcGVyX2ludCArIDE7Ci0JCS8qIE1ha2Ugc3VyZSB0aGF0LCBldmVuIHdpdGggdGhlIHRpbWUgbmVlZGVkIHRvIGV4ZWN1dGUKLQkJICogdGhpcyBjb2RlLCB0aGUgbmV4dCBzY2hlZHVsZWQgaW50ZXJydXB0IGhhcyBiZWVuIG1vdmVkCi0JCSAqIGJhY2sgdG8gdGhlIGZ1dHVyZTogKi8KLQkJbG9zdF9pbnRzKys7Ci0KLQkJaHBldF90MV9jbXAgKz0gbG9zdF9pbnRzICogdGlja3NfcGVyX2ludDsKLQkJaHBldF93cml0ZWwoaHBldF90MV9jbXAsIEhQRVRfVDFfQ01QKTsKLQotCQlpZiAoUElFX29uKQotCQkJUElFX2NvdW50ICs9IGxvc3RfaW50czsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJydGM6IGxvc3Qgc29tZSBpbnRlcnJ1cHRzIGF0ICVsZEh6LlxuIiwKLQkJICAgICAgIGhwZXRfcnRjX2ludF9mcmVxKTsKLQl9Ci19Ci0KLS8qCi0gKiBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBjYWxsZWQgZnJvbSBydGMgZHJpdmVyLgotICogUmV0dXJuIDAgaWYgSFBFVCBpcyBub3QgYmVpbmcgdXNlZC4KLSAqIE90aGVyd2lzZSBkbyB0aGUgbmVjZXNzYXJ5IGNoYW5nZXMgYW5kIHJldHVybiAxLgotICovCi1pbnQgaHBldF9tYXNrX3J0Y19pcnFfYml0KHVuc2lnbmVkIGxvbmcgYml0X21hc2spCi17Ci0JaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoYml0X21hc2sgJiBSVENfVUlFKQotCQlVSUVfb24gPSAwOwotCWlmIChiaXRfbWFzayAmIFJUQ19QSUUpCi0JCVBJRV9vbiA9IDA7Ci0JaWYgKGJpdF9tYXNrICYgUlRDX0FJRSkKLQkJQUlFX29uID0gMDsKLQotCXJldHVybiAxOwotfQotCi1pbnQgaHBldF9zZXRfcnRjX2lycV9iaXQodW5zaWduZWQgbG9uZyBiaXRfbWFzaykKLXsKLQlpbnQgdGltZXJfaW5pdF9yZXFkID0gMDsKLQotCWlmICghaXNfaHBldF9lbmFibGVkKCkpCi0JCXJldHVybiAwOwotCi0JaWYgKCEoUElFX29uIHwgQUlFX29uIHwgVUlFX29uKSkKLQkJdGltZXJfaW5pdF9yZXFkID0gMTsKLQotCWlmIChiaXRfbWFzayAmIFJUQ19VSUUpIHsKLQkJVUlFX29uID0gMTsKLQl9Ci0JaWYgKGJpdF9tYXNrICYgUlRDX1BJRSkgewotCQlQSUVfb24gPSAxOwotCQlQSUVfY291bnQgPSAwOwotCX0KLQlpZiAoYml0X21hc2sgJiBSVENfQUlFKSB7Ci0JCUFJRV9vbiA9IDE7Ci0JfQotCi0JaWYgKHRpbWVyX2luaXRfcmVxZCkKLQkJaHBldF9ydGNfdGltZXJfaW5pdCgpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBocGV0X3NldF9hbGFybV90aW1lKHVuc2lnbmVkIGNoYXIgaHJzLCB1bnNpZ25lZCBjaGFyIG1pbiwgdW5zaWduZWQgY2hhciBzZWMpCi17Ci0JaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlhbGFybV90aW1lLnRtX2hvdXIgPSBocnM7Ci0JYWxhcm1fdGltZS50bV9taW4gPSBtaW47Ci0JYWxhcm1fdGltZS50bV9zZWMgPSBzZWM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotaW50IGhwZXRfc2V0X3BlcmlvZGljX2ZyZXEodW5zaWduZWQgbG9uZyBmcmVxKQotewotCWlmICghaXNfaHBldF9lbmFibGVkKCkpCi0JCXJldHVybiAwOwotCi0JUElFX2ZyZXEgPSBmcmVxOwotCVBJRV9jb3VudCA9IDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotaW50IGhwZXRfcnRjX2Ryb3BwZWRfaXJxKHZvaWQpCi17Ci0JaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotaXJxcmV0dXJuX3QgaHBldF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgcnRjX3RpbWUgY3Vycl90aW1lOwotCXVuc2lnbmVkIGxvbmcgcnRjX2ludF9mbGFnID0gMDsKLQlpbnQgY2FsbF9ydGNfaW50ZXJydXB0ID0gMDsKLQotCWhwZXRfcnRjX3RpbWVyX3JlaW5pdCgpOwotCi0JaWYgKFVJRV9vbiB8IEFJRV9vbikgewotCQlydGNfZ2V0X3J0Y190aW1lKCZjdXJyX3RpbWUpOwotCX0KLQlpZiAoVUlFX29uKSB7Ci0JCWlmIChjdXJyX3RpbWUudG1fc2VjICE9IHByZXZfdXBkYXRlX3NlYykgewotCQkJLyogU2V0IHVwZGF0ZSBpbnQgaW5mbywgY2FsbCByZWFsIHJ0YyBpbnQgcm91dGluZSAqLwotCQkJY2FsbF9ydGNfaW50ZXJydXB0ID0gMTsKLQkJCXJ0Y19pbnRfZmxhZyA9IFJUQ19VRjsKLQkJCXByZXZfdXBkYXRlX3NlYyA9IGN1cnJfdGltZS50bV9zZWM7Ci0JCX0KLQl9Ci0JaWYgKFBJRV9vbikgewotCQlQSUVfY291bnQrKzsKLQkJaWYgKFBJRV9jb3VudCA+PSBocGV0X3J0Y19pbnRfZnJlcS9QSUVfZnJlcSkgewotCQkJLyogU2V0IHBlcmlvZGljIGludCBpbmZvLCBjYWxsIHJlYWwgcnRjIGludCByb3V0aW5lICovCi0JCQljYWxsX3J0Y19pbnRlcnJ1cHQgPSAxOwotCQkJcnRjX2ludF9mbGFnIHw9IFJUQ19QRjsKLQkJCVBJRV9jb3VudCA9IDA7Ci0JCX0KLQl9Ci0JaWYgKEFJRV9vbikgewotCQlpZiAoKGN1cnJfdGltZS50bV9zZWMgPT0gYWxhcm1fdGltZS50bV9zZWMpICYmCi0JCSAgICAoY3Vycl90aW1lLnRtX21pbiA9PSBhbGFybV90aW1lLnRtX21pbikgJiYKLQkJICAgIChjdXJyX3RpbWUudG1faG91ciA9PSBhbGFybV90aW1lLnRtX2hvdXIpKSB7Ci0JCQkvKiBTZXQgYWxhcm0gaW50IGluZm8sIGNhbGwgcmVhbCBydGMgaW50IHJvdXRpbmUgKi8KLQkJCWNhbGxfcnRjX2ludGVycnVwdCA9IDE7Ci0JCQlydGNfaW50X2ZsYWcgfD0gUlRDX0FGOwotCQl9Ci0JfQotCWlmIChjYWxsX3J0Y19pbnRlcnJ1cHQpIHsKLQkJcnRjX2ludF9mbGFnIHw9IChSVENfSVJRRiB8IChSVENfTlVNX0lOVFMgPDwgOCkpOwotCQlydGNfaW50ZXJydXB0KHJ0Y19pbnRfZmxhZywgZGV2X2lkKTsKLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCA3OWNmNjA4Li40NTc4MjM1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90b3BvbG9neS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFyY2gvaTM4Ni9rZXJuZWwvdG9wb2xvZ3kuYyAtIFBvcHVsYXRlIGRyaXZlcmZzIHdpdGggdG9wb2xvZ3kgaW5mb3JtYXRpb24KKyAqIGFyY2gvaTM4Ni9rZXJuZWwvdG9wb2xvZ3kuYyAtIFBvcHVsYXRlIHN5c2ZzIHdpdGggdG9wb2xvZ3kgaW5mb3JtYXRpb24KICAqCiAgKiBXcml0dGVuIGJ5OiBNYXR0aGV3IERvYnNvbiwgSUJNIENvcnBvcmF0aW9uCiAgKiBPcmlnaW5hbCBDb2RlOiBQYXVsIERvcndpbiwgSUJNIENvcnBvcmF0aW9uLCBQYXRyaWNrIE1vY2hlbCwgT1NETApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCmluZGV4IDBlZmFkOGEuLmFmMGQzZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKQEAgLTk0LDYgKzk0LDcgQEAKIGFzbWxpbmthZ2Ugdm9pZCBtYWNoaW5lX2NoZWNrKHZvaWQpOwogCiBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMjQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvZGVfYnl0ZXMgPSA2NDsKIEFUT01JQ19OT1RJRklFUl9IRUFEKGkzODZkaWVfY2hhaW4pOwogCiBpbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCkBAIC0yOTEsMTAgKzI5MiwxMSBAQAogCWludCBpOwogCWludCBpbl9rZXJuZWwgPSAxOwogCXVuc2lnbmVkIGxvbmcgZXNwOwotCXVuc2lnbmVkIHNob3J0IHNzOworCXVuc2lnbmVkIHNob3J0IHNzLCBnczsKIAogCWVzcCA9ICh1bnNpZ25lZCBsb25nKSAoJnJlZ3MtPmVzcCk7CiAJc2F2ZXNlZ21lbnQoc3MsIHNzKTsKKwlzYXZlc2VnbWVudChncywgZ3MpOwogCWlmICh1c2VyX21vZGVfdm0ocmVncykpIHsKIAkJaW5fa2VybmVsID0gMDsKIAkJZXNwID0gcmVncy0+ZXNwOwpAQCAtMzEzLDggKzMxNSw4IEBACiAJCXJlZ3MtPmVheCwgcmVncy0+ZWJ4LCByZWdzLT5lY3gsIHJlZ3MtPmVkeCk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgImVzaTogJTA4bHggICBlZGk6ICUwOGx4ICAgZWJwOiAlMDhseCAgIGVzcDogJTA4bHhcbiIsCiAJCXJlZ3MtPmVzaSwgcmVncy0+ZWRpLCByZWdzLT5lYnAsIGVzcCk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgImRzOiAlMDR4ICAgZXM6ICUwNHggICBzczogJTA0eFxuIiwKLQkJcmVncy0+eGRzICYgMHhmZmZmLCByZWdzLT54ZXMgJiAweGZmZmYsIHNzKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiZHM6ICUwNHggICBlczogJTA0eCAgIGZzOiAlMDR4ICBnczogJTA0eCAgc3M6ICUwNHhcbiIsCisJICAgICAgIHJlZ3MtPnhkcyAmIDB4ZmZmZiwgcmVncy0+eGVzICYgMHhmZmZmLCByZWdzLT54ZnMgJiAweGZmZmYsIGdzLCBzcyk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlByb2Nlc3MgJS4qcyAocGlkOiAlZCwgdGk9JXAgdGFzaz0lcCB0YXNrLnRpPSVwKSIsCiAJCVRBU0tfQ09NTV9MRU4sIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKIAkJY3VycmVudF90aHJlYWRfaW5mbygpLCBjdXJyZW50LCBjdXJyZW50LT50aHJlYWRfaW5mbyk7CkBAIC0zMjQsNyArMzI2LDggQEAKIAkgKi8KIAlpZiAoaW5fa2VybmVsKSB7CiAJCXU4ICplaXA7Ci0JCWludCBjb2RlX2J5dGVzID0gNjQ7CisJCXVuc2lnbmVkIGludCBjb2RlX3Byb2xvZ3VlID0gY29kZV9ieXRlcyAqIDQzIC8gNjQ7CisJCXVuc2lnbmVkIGludCBjb2RlX2xlbiA9IGNvZGVfYnl0ZXM7CiAJCXVuc2lnbmVkIGNoYXIgYzsKIAogCQlwcmludGsoIlxuIiBLRVJOX0VNRVJHICJTdGFjazogIik7CkBAIC0zMzIsMTQgKzMzNSwxNCBAQAogCiAJCXByaW50ayhLRVJOX0VNRVJHICJDb2RlOiAiKTsKIAotCQllaXAgPSAodTggKilyZWdzLT5laXAgLSA0MzsKKwkJZWlwID0gKHU4ICopcmVncy0+ZWlwIC0gY29kZV9wcm9sb2d1ZTsKIAkJaWYgKGVpcCA8ICh1OCAqKVBBR0VfT0ZGU0VUIHx8CiAJCQlwcm9iZV9rZXJuZWxfYWRkcmVzcyhlaXAsIGMpKSB7CiAJCQkvKiB0cnkgc3RhcnRpbmcgYXQgRUlQICovCiAJCQllaXAgPSAodTggKilyZWdzLT5laXA7Ci0JCQljb2RlX2J5dGVzID0gMzI7CisJCQljb2RlX2xlbiA9IGNvZGVfbGVuIC0gY29kZV9wcm9sb2d1ZSArIDE7CiAJCX0KLQkJZm9yIChpID0gMDsgaSA8IGNvZGVfYnl0ZXM7IGkrKywgZWlwKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGNvZGVfbGVuOyBpKyssIGVpcCsrKSB7CiAJCQlpZiAoZWlwIDwgKHU4ICopUEFHRV9PRkZTRVQgfHwKIAkJCQlwcm9iZV9rZXJuZWxfYWRkcmVzcyhlaXAsIGMpKSB7CiAJCQkJcHJpbnRrKCIgQmFkIEVJUCB2YWx1ZS4iKTsKQEAgLTExOTEsMyArMTE5NCwxMyBAQAogCXJldHVybiAxOwogfQogX19zZXR1cCgia3N0YWNrPSIsIGtzdGFja19zZXR1cCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNvZGVfYnl0ZXNfc2V0dXAoY2hhciAqcykKK3sKKwljb2RlX2J5dGVzID0gc2ltcGxlX3N0cnRvdWwocywgTlVMTCwgMCk7CisJaWYgKGNvZGVfYnl0ZXMgPiA4MTkyKQorCQljb2RlX2J5dGVzID0gODE5MjsKKworCXJldHVybiAxOworfQorX19zZXR1cCgiY29kZV9ieXRlcz0iLCBjb2RlX2J5dGVzX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL2kzODYva2VybmVsL3RzYy5jCmluZGV4IDJjZmM3YjAuLjMwODJhNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdHNjLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90c2MuYwpAQCAtMjMsNiArMjMsNyBAQAogICogYW4gZXh0cmEgdmFsdWUgdG8gc3RvcmUgdGhlIFRTQyBmcmVxCiAgKi8KIHVuc2lnbmVkIGludCB0c2Nfa2h6OwordW5zaWduZWQgbG9uZyBsb25nICgqY3VzdG9tX3NjaGVkX2Nsb2NrKSh2b2lkKTsKIAogaW50IHRzY19kaXNhYmxlOwogCkBAIC01OSwxMiArNjAsNiBAQAogCXJldHVybiB0c2NfdW5zdGFibGU7CiB9CiAKLXZvaWQgbWFya190c2NfdW5zdGFibGUodm9pZCkKLXsKLQl0c2NfdW5zdGFibGUgPSAxOwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWFya190c2NfdW5zdGFibGUpOwotCiAvKiBBY2NlbGxlcmF0b3JzIGZvciBzY2hlZF9jbG9jaygpCiAgKiBjb252ZXJ0IGZyb20gY3ljbGVzKDY0Yml0cykgPT4gbmFub3NlY29uZHMgKDY0Yml0cykKICAqICBiYXNpYyBlcXVhdGlvbjoKQEAgLTEwNywxNCArMTAyLDE0IEBACiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRoaXNfb2Zmc2V0OwogCisJaWYgKHVubGlrZWx5KGN1c3RvbV9zY2hlZF9jbG9jaykpCisJCXJldHVybiAoKmN1c3RvbV9zY2hlZF9jbG9jaykoKTsKKwogCS8qCi0JICogaW4gdGhlIE5VTUEgY2FzZSB3ZSBkb250IHVzZSB0aGUgVFNDIGFzIHRoZXkgYXJlIG5vdAotCSAqIHN5bmNocm9uaXplZCBhY3Jvc3MgYWxsIENQVXMuCisJICogRmFsbCBiYWNrIHRvIGppZmZpZXMgaWYgdGhlcmUncyBubyBUU0MgYXZhaWxhYmxlOgogCSAqLwotI2lmbmRlZiBDT05GSUdfTlVNQQotCWlmICghY3B1X2toeiB8fCBjaGVja190c2NfdW5zdGFibGUoKSkKLSNlbmRpZgotCQkvKiBubyBsb2NraW5nIGJ1dCBhIHJhcmUgd3JvbmcgdmFsdWUgaXMgbm90IGEgYmlnIGRlYWwgKi8KKwlpZiAodW5saWtlbHkodHNjX2Rpc2FibGUpKQorCQkvKiBObyBsb2NraW5nIGJ1dCBhIHJhcmUgd3JvbmcgdmFsdWUgaXMgbm90IGEgYmlnIGRlYWw6ICovCiAJCXJldHVybiAoamlmZmllc182NCAtIElOSVRJQUxfSklGRklFUykgKiAoMTAwMDAwMDAwMCAvIEhaKTsKIAogCS8qIHJlYWQgdGhlIFRpbWUgU3RhbXAgQ291bnRlcjogKi8KQEAgLTE5NCwxMyArMTg5LDEzIEBACiB2b2lkIF9faW5pdCB0c2NfaW5pdCh2b2lkKQogewogCWlmICghY3B1X2hhc190c2MgfHwgdHNjX2Rpc2FibGUpCi0JCXJldHVybjsKKwkJZ290byBvdXRfbm9fdHNjOwogCiAJY3B1X2toeiA9IGNhbGN1bGF0ZV9jcHVfa2h6KCk7CiAJdHNjX2toeiA9IGNwdV9raHo7CiAKIAlpZiAoIWNwdV9raHopCi0JCXJldHVybjsKKwkJZ290byBvdXRfbm9fdHNjOwogCiAJcHJpbnRrKCJEZXRlY3RlZCAlbHUuJTAzbHUgTUh6IHByb2Nlc3Nvci5cbiIsCiAJCQkJKHVuc2lnbmVkIGxvbmcpY3B1X2toeiAvIDEwMDAsCkBAIC0yMDgsMzggKzIwMywxOSBAQAogCiAJc2V0X2N5YzJuc19zY2FsZShjcHVfa2h6KTsKIAl1c2VfdHNjX2RlbGF5KCk7CisJcmV0dXJuOworCitvdXRfbm9fdHNjOgorCS8qCisJICogU2V0IHRoZSB0c2NfZGlzYWJsZSBmbGFnIGlmIHRoZXJlJ3Mgbm8gVFNDIHN1cHBvcnQsIHRoaXMKKwkgKiBtYWtlcyBpdCBhIGZhc3QgZmxhZyBmb3IgdGhlIGtlcm5lbCB0byBzZWUgd2hldGhlciBpdAorCSAqIHNob3VsZCBiZSB1c2luZyB0aGUgVFNDLgorCSAqLworCXRzY19kaXNhYmxlID0gMTsKIH0KIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGNwdWZyZXFfZGVsYXllZF9pc3NjaGVkID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9pbml0ID0gMDsKLXN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3B1ZnJlcV9kZWxheWVkX2dldF93b3JrOwotCi1zdGF0aWMgdm9pZCBoYW5kbGVfY3B1ZnJlcV9kZWxheWVkX2dldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JdW5zaWduZWQgaW50IGNwdTsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQljcHVmcmVxX2dldChjcHUpOwotCi0JY3B1ZnJlcV9kZWxheWVkX2lzc2NoZWQgPSAwOwotfQotCi0vKgotICogaWYgd2Ugbm90aWNlIGNwdWZyZXEgb2RkbmVzcywgc2NoZWR1bGUgYSBjYWxsIHRvIGNwdWZyZXFfZ2V0KCkgYXMgaXQgdHJpZXMKLSAqIHRvIHZlcmlmeSB0aGUgQ1BVIGZyZXF1ZW5jeSB0aGUgdGltaW5nIGNvcmUgdGhpbmtzIHRoZSBDUFUgaXMgcnVubmluZwotICogYXQgaXMgc3RpbGwgY29ycmVjdC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGNwdWZyZXFfZGVsYXllZF9nZXQodm9pZCkKLXsKLQlpZiAoY3B1ZnJlcV9pbml0ICYmICFjcHVmcmVxX2RlbGF5ZWRfaXNzY2hlZCkgewotCQljcHVmcmVxX2RlbGF5ZWRfaXNzY2hlZCA9IDE7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJDaGVja2luZyBpZiBDUFUgZnJlcXVlbmN5IGNoYW5nZWQuXG4iKTsKLQkJc2NoZWR1bGVfd29yaygmY3B1ZnJlcV9kZWxheWVkX2dldF93b3JrKTsKLQl9Ci19Ci0KIC8qCiAgKiBpZiB0aGUgQ1BVIGZyZXF1ZW5jeSBpcyBzY2FsZWQsIFRTQy1iYXNlZCBkZWxheXMgd2lsbCBuZWVkIGEgZGlmZmVyZW50CiAgKiBsb29wc19wZXJfamlmZnkgdmFsdWUgdG8gZnVuY3Rpb24gcHJvcGVybHkuCkBAIC0zMDMsMTcgKzI3OSw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfdHNjKHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCUlOSVRfV09SSygmY3B1ZnJlcV9kZWxheWVkX2dldF93b3JrLCBoYW5kbGVfY3B1ZnJlcV9kZWxheWVkX2dldCk7Ci0JcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmdGltZV9jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAotCQkJCQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOwotCWlmICghcmV0KQotCQljcHVmcmVxX2luaXQgPSAxOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmdGltZV9jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAorCQkJCQkgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKIH0KLQogY29yZV9pbml0Y2FsbChjcHVmcmVxX3RzYyk7CiAKICNlbmRpZgpAQCAtMzIxLDcgKzI4OSw2IEBACiAvKiBjbG9jayBzb3VyY2UgY29kZSAqLwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RzY19raHogPSAwOwotc3RhdGljIGludCB0c2NfdXBkYXRlX2NhbGxiYWNrKHZvaWQpOwogCiBzdGF0aWMgY3ljbGVfdCByZWFkX3RzYyh2b2lkKQogewpAQCAtMzM5LDM3ICszMDYsMjggQEAKIAkubWFzawkJCT0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCksCiAJLm11bHQJCQk9IDAsIC8qIHRvIGJlIHNldCAqLwogCS5zaGlmdAkJCT0gMjIsCi0JLnVwZGF0ZV9jYWxsYmFjawk9IHRzY191cGRhdGVfY2FsbGJhY2ssCi0JLmlzX2NvbnRpbnVvdXMJCT0gMSwKKwkuZmxhZ3MJCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTIHwKKwkJCQkgIENMT0NLX1NPVVJDRV9NVVNUX1ZFUklGWSwKIH07CiAKLXN0YXRpYyBpbnQgdHNjX3VwZGF0ZV9jYWxsYmFjayh2b2lkKQordm9pZCBtYXJrX3RzY191bnN0YWJsZSh2b2lkKQogewotCWludCBjaGFuZ2UgPSAwOwotCi0JLyogY2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBzd2l0Y2ggdG8gdGhlIHNhZmUgY2xvY2tzb3VyY2U6ICovCi0JaWYgKGNsb2Nrc291cmNlX3RzYy5yYXRpbmcgIT0gMCAmJiBjaGVja190c2NfdW5zdGFibGUoKSkgewotCQljbG9ja3NvdXJjZV90c2MucmF0aW5nID0gMDsKLQkJY2xvY2tzb3VyY2VfcmVzZWxlY3QoKTsKLQkJY2hhbmdlID0gMTsKKwlpZiAoIXRzY191bnN0YWJsZSkgeworCQl0c2NfdW5zdGFibGUgPSAxOworCQkvKiBDYW4gYmUgY2FsbGVkIGJlZm9yZSByZWdpc3RyYXRpb24gKi8KKwkJaWYgKGNsb2Nrc291cmNlX3RzYy5tdWx0KQorCQkJY2xvY2tzb3VyY2VfY2hhbmdlX3JhdGluZygmY2xvY2tzb3VyY2VfdHNjLCAwKTsKKwkJZWxzZQorCQkJY2xvY2tzb3VyY2VfdHNjLnJhdGluZyA9IDA7CiAJfQotCi0JLyogb25seSB1cGRhdGUgaWYgdHNjX2toeiBoYXMgY2hhbmdlZDogKi8KLQlpZiAoY3VycmVudF90c2Nfa2h6ICE9IHRzY19raHopIHsKLQkJY3VycmVudF90c2Nfa2h6ID0gdHNjX2toejsKLQkJY2xvY2tzb3VyY2VfdHNjLm11bHQgPSBjbG9ja3NvdXJjZV9raHoybXVsdChjdXJyZW50X3RzY19raHosCi0JCQkJCQkJY2xvY2tzb3VyY2VfdHNjLnNoaWZ0KTsKLQkJY2hhbmdlID0gMTsKLQl9Ci0KLQlyZXR1cm4gY2hhbmdlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobWFya190c2NfdW5zdGFibGUpOwogCiBzdGF0aWMgaW50IF9faW5pdCBkbWlfbWFya190c2NfdW5zdGFibGUoc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCiB7CiAJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBkZXRlY3RlZDogbWFya2luZyBUU0MgdW5zdGFibGUuXG4iLAogCQkgICAgICAgZC0+aWRlbnQpOwotCW1hcmtfdHNjX3Vuc3RhYmxlKCk7CisJdHNjX3Vuc3RhYmxlID0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzg2LDY2ICszNDQsNDUgQEAKIAkge30KIH07CiAKLSNkZWZpbmUgVFNDX0ZSRVFfQ0hFQ0tfSU5URVJWQUwgKDEwKk1TRUNfUEVSX1NFQykgLyogMTBzZWMgaW4gTVMgKi8KLXN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCB2ZXJpZnlfdHNjX2ZyZXFfdGltZXI7Ci0KLS8qIFhYWCAtIFByb2JhYmx5IHNob3VsZCBhZGQgbG9ja2luZyAqLwotc3RhdGljIHZvaWQgdmVyaWZ5X3RzY19mcmVxKHVuc2lnbmVkIGxvbmcgdW51c2VkKQotewotCXN0YXRpYyB1NjQgbGFzdF90c2M7Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9qaWZmaWVzOwotCi0JdTY0IG5vd190c2MsIGludGVydmFsX3RzYzsKLQl1bnNpZ25lZCBsb25nIG5vd19qaWZmaWVzLCBpbnRlcnZhbF9qaWZmaWVzOwotCi0KLQlpZiAoY2hlY2tfdHNjX3Vuc3RhYmxlKCkpCi0JCXJldHVybjsKLQotCXJkdHNjbGwobm93X3RzYyk7Ci0Jbm93X2ppZmZpZXMgPSBqaWZmaWVzOwotCi0JaWYgKCFsYXN0X2ppZmZpZXMpIHsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaW50ZXJ2YWxfamlmZmllcyA9IG5vd19qaWZmaWVzIC0gbGFzdF9qaWZmaWVzOwotCWludGVydmFsX3RzYyA9IG5vd190c2MgLSBsYXN0X3RzYzsKLQlpbnRlcnZhbF90c2MgKj0gSFo7Ci0JZG9fZGl2KGludGVydmFsX3RzYywgY3B1X2toeioxMDAwKTsKLQotCWlmIChpbnRlcnZhbF90c2MgPCAoaW50ZXJ2YWxfamlmZmllcyAqIDMgLyA0KSkgewotCQlwcmludGsoIlRTQyBhcHBlYXJzIHRvIGJlIHJ1bm5pbmcgc2xvd2x5LiAiCi0JCQkiTWFya2luZyBpdCBhcyB1bnN0YWJsZVxuIik7Ci0JCW1hcmtfdHNjX3Vuc3RhYmxlKCk7Ci0JCXJldHVybjsKLQl9Ci0KLW91dDoKLQlsYXN0X3RzYyA9IG5vd190c2M7Ci0JbGFzdF9qaWZmaWVzID0gbm93X2ppZmZpZXM7Ci0JLyogc2V0IHVzIHVwIHRvIGdvIG9mZiBvbiB0aGUgbmV4dCBpbnRlcnZhbDogKi8KLQltb2RfdGltZXIoJnZlcmlmeV90c2NfZnJlcV90aW1lciwKLQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVFNDX0ZSRVFfQ0hFQ0tfSU5URVJWQUwpKTsKLX0KLQogLyoKICAqIE1ha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MgaWYgdGhlIFRTQyBpcyB0cnVzdHdvcnRoeSBhbmQgc3luY2hyb25pemVkCiAgKiBvdmVyIGFsbCBDUFVzLgogICovCi1zdGF0aWMgX19pbml0IGludCB1bnN5bmNocm9uaXplZF90c2Modm9pZCkKK19fY3B1aW5pdCBpbnQgdW5zeW5jaHJvbml6ZWRfdHNjKHZvaWQpCiB7CisJaWYgKCFjcHVfaGFzX3RzYyB8fCB0c2NfdW5zdGFibGUpCisJCXJldHVybiAxOwogCS8qCiAJICogSW50ZWwgc3lzdGVtcyBhcmUgbm9ybWFsbHkgYWxsIHN5bmNocm9uaXplZC4KIAkgKiBFeGNlcHRpb25zIG11c3QgbWFyayBUU0MgYXMgdW5zdGFibGU6CiAJICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQotIAkJcmV0dXJuIDA7Ci0KLQkvKiBhc3N1bWUgbXVsdGkgc29ja2V0IHN5c3RlbXMgYXJlIG5vdCBzeW5jaHJvbml6ZWQ6ICovCi0gCXJldHVybiBudW1fcG9zc2libGVfY3B1cygpID4gMTsKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpIHsKKwkJLyogYXNzdW1lIG11bHRpIHNvY2tldCBzeXN0ZW1zIGFyZSBub3Qgc3luY2hyb25pemVkOiAqLworCQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpCisJCQl0c2NfdW5zdGFibGUgPSAxOworCX0KKwlyZXR1cm4gdHNjX3Vuc3RhYmxlOwogfQogCisvKgorICogR2VvZGVfTFggLSB0aGUgT0xQQyBDUFUgaGFzIGEgcG9zc2libHkgYSB2ZXJ5IHJlbGlhYmxlIFRTQworICovCisjaWZkZWYgQ09ORklHX01HRU9ERV9MWAorLyogUlRTQyBjb3VudHMgZHVyaW5nIHN1c3BlbmQgKi8KKyNkZWZpbmUgUlRTQ19TVVNQIDB4MTAwCisKK3N0YXRpYyB2b2lkIF9faW5pdCBjaGVja19nZW9kZV90c2NfcmVsaWFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXJkbXNybChNU1JfR0VPREVfQlVTQ09OVF9DT05GMCwgdmFsKTsKKwlpZiAoKHZhbCAmIFJUU0NfU1VTUCkpCisJCWNsb2Nrc291cmNlX3RzYy5mbGFncyAmPSB+Q0xPQ0tfU09VUkNFX01VU1RfVkVSSUZZOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19nZW9kZV90c2NfcmVsaWFibGUodm9pZCkgeyB9CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgaW5pdF90c2NfY2xvY2tzb3VyY2Uodm9pZCkKIHsKIApAQCAtNDUzLDIwICszOTAsMTYgQEAKIAkJLyogY2hlY2sgYmxhY2tsaXN0ICovCiAJCWRtaV9jaGVja19zeXN0ZW0oYmFkX3RzY19kbWlfdGFibGUpOwogCi0JCWlmICh1bnN5bmNocm9uaXplZF90c2MoKSkgLyogbWFyayB1bnN0YWJsZSBpZiB1bnN5bmNlZCAqLwotCQkJbWFya190c2NfdW5zdGFibGUoKTsKKwkJdW5zeW5jaHJvbml6ZWRfdHNjKCk7CisJCWNoZWNrX2dlb2RlX3RzY19yZWxpYWJsZSgpOwogCQljdXJyZW50X3RzY19raHogPSB0c2Nfa2h6OwogCQljbG9ja3NvdXJjZV90c2MubXVsdCA9IGNsb2Nrc291cmNlX2toejJtdWx0KGN1cnJlbnRfdHNjX2toeiwKIAkJCQkJCQljbG9ja3NvdXJjZV90c2Muc2hpZnQpOwogCQkvKiBsb3dlciB0aGUgcmF0aW5nIGlmIHdlIGFscmVhZHkga25vdyBpdHMgdW5zdGFibGU6ICovCi0JCWlmIChjaGVja190c2NfdW5zdGFibGUoKSkKKwkJaWYgKGNoZWNrX3RzY191bnN0YWJsZSgpKSB7CiAJCQljbG9ja3NvdXJjZV90c2MucmF0aW5nID0gMDsKLQotCQlpbml0X3RpbWVyKCZ2ZXJpZnlfdHNjX2ZyZXFfdGltZXIpOwotCQl2ZXJpZnlfdHNjX2ZyZXFfdGltZXIuZnVuY3Rpb24gPSB2ZXJpZnlfdHNjX2ZyZXE7Ci0JCXZlcmlmeV90c2NfZnJlcV90aW1lci5leHBpcmVzID0KLQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRTQ19GUkVRX0NIRUNLX0lOVEVSVkFMKTsKLQkJYWRkX3RpbWVyKCZ2ZXJpZnlfdHNjX2ZyZXFfdGltZXIpOworCQkJY2xvY2tzb3VyY2VfdHNjLmZsYWdzICY9IH5DTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUzsKKwkJfQogCiAJCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfdHNjKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RzY19zeW5jLmMgYi9hcmNoL2kzODYva2VybmVsL3RzY19zeW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0MjQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHNjX3N5bmMuYwpAQCAtMCwwICsxIEBACisjaW5jbHVkZSAiLi4vLi4veDg2XzY0L2tlcm5lbC90c2Nfc3luYy5jIgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMgYi9hcmNoL2kzODYva2VybmVsL3ZtODYuYwppbmRleCBiZTJmOTZlLi5kMWI4ZjJiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3ZtODYuYworKysgYi9hcmNoL2kzODYva2VybmVsL3ZtODYuYwpAQCAtOTYsMTIgKzk2LDEyIEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQkvKiBrZXJuZWxfdm04Nl9yZWdzIGlzIG1pc3NpbmcgeGZzLCBzbyBjb3B5IGV2ZXJ5dGhpbmcgdXAgdG8KLQkgICAoYnV0IG5vdCBpbmNsdWRpbmcpIHhncywgYW5kIHRoZW4gcmVzdCBhZnRlciB4Z3MuICovCi0JcmV0ICs9IGNvcHlfdG9fdXNlcih1c2VyLCByZWdzLCBvZmZzZXRvZihzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncywgcHQueGdzKSk7Ci0JcmV0ICs9IGNvcHlfdG9fdXNlcigmdXNlci0+X19udWxsX2dzLCAmcmVncy0+cHQueGdzLAorCS8qIGtlcm5lbF92bTg2X3JlZ3MgaXMgbWlzc2luZyB4Z3MsIHNvIGNvcHkgZXZlcnl0aGluZyB1cCB0bworCSAgIChidXQgbm90IGluY2x1ZGluZykgb3JpZ19lYXgsIGFuZCB0aGVuIHJlc3QgaW5jbHVkaW5nIG9yaWdfZWF4LiAqLworCXJldCArPSBjb3B5X3RvX3VzZXIodXNlciwgcmVncywgb2Zmc2V0b2Yoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MsIHB0Lm9yaWdfZWF4KSk7CisJcmV0ICs9IGNvcHlfdG9fdXNlcigmdXNlci0+b3JpZ19lYXgsICZyZWdzLT5wdC5vcmlnX2VheCwKIAkJCSAgICBzaXplb2Yoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MpIC0KLQkJCSAgICBvZmZzZXRvZihzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncywgcHQueGdzKSk7CisJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MsIHB0Lm9yaWdfZWF4KSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTEzLDEyICsxMTMsMTMgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCXJldCArPSBjb3B5X2Zyb21fdXNlcihyZWdzLCB1c2VyLCBvZmZzZXRvZihzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncywgcHQueGdzKSk7Ci0JcmV0ICs9IGNvcHlfZnJvbV91c2VyKCZyZWdzLT5wdC54Z3MsICZ1c2VyLT5fX251bGxfZ3MsCisJLyogY29weSBlYXgteGZzIGluY2x1c2l2ZSAqLworCXJldCArPSBjb3B5X2Zyb21fdXNlcihyZWdzLCB1c2VyLCBvZmZzZXRvZihzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncywgcHQub3JpZ19lYXgpKTsKKwkvKiBjb3B5IG9yaWdfZWF4LV9fZ3NoK2V4dHJhICovCisJcmV0ICs9IGNvcHlfZnJvbV91c2VyKCZyZWdzLT5wdC5vcmlnX2VheCwgJnVzZXItPm9yaWdfZWF4LAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzKSAtCi0JCQkgICAgICBvZmZzZXRvZihzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncywgcHQueGdzKSArCisJCQkgICAgICBvZmZzZXRvZihzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncywgcHQub3JpZ19lYXgpICsKIAkJCSAgICAgIGV4dHJhKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1Nyw4ICsxNTgsOCBAQAogCiAJcmV0ID0gS1ZNODYtPnJlZ3MzMjsKIAotCWxvYWRzZWdtZW50KGZzLCBjdXJyZW50LT50aHJlYWQuc2F2ZWRfZnMpOwotCXJldC0+eGdzID0gY3VycmVudC0+dGhyZWFkLnNhdmVkX2dzOworCXJldC0+eGZzID0gY3VycmVudC0+dGhyZWFkLnNhdmVkX2ZzOworCWxvYWRzZWdtZW50KGdzLCBjdXJyZW50LT50aHJlYWQuc2F2ZWRfZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI4NSw5ICsyODYsOSBAQAogICovCiAJaW5mby0+cmVncy5wdC54ZHMgPSAwOwogCWluZm8tPnJlZ3MucHQueGVzID0gMDsKLQlpbmZvLT5yZWdzLnB0LnhncyA9IDA7CisJaW5mby0+cmVncy5wdC54ZnMgPSAwOwogCi0vKiB3ZSBhcmUgY2xlYXJpbmcgZnMgbGF0ZXIganVzdCBiZWZvcmUgImptcCByZXN1bWVfdXNlcnNwYWNlIiwKKy8qIHdlIGFyZSBjbGVhcmluZyBncyBsYXRlciBqdXN0IGJlZm9yZSAiam1wIHJlc3VtZV91c2Vyc3BhY2UiLAogICogYmVjYXVzZSBpdCBpcyBub3Qgc2F2ZWQvcmVzdG9yZWQuCiAgKi8KIApAQCAtMzIxLDggKzMyMiw4IEBACiAgKi8KIAlpbmZvLT5yZWdzMzItPmVheCA9IDA7CiAJdHNrLT50aHJlYWQuc2F2ZWRfZXNwMCA9IHRzay0+dGhyZWFkLmVzcDA7Ci0Jc2F2ZXNlZ21lbnQoZnMsIHRzay0+dGhyZWFkLnNhdmVkX2ZzKTsKLQl0c2stPnRocmVhZC5zYXZlZF9ncyA9IGluZm8tPnJlZ3MzMi0+eGdzOworCXRzay0+dGhyZWFkLnNhdmVkX2ZzID0gaW5mby0+cmVnczMyLT54ZnM7CisJc2F2ZXNlZ21lbnQoZ3MsIHRzay0+dGhyZWFkLnNhdmVkX2dzKTsKIAogCXRzcyA9ICZwZXJfY3B1KGluaXRfdHNzLCBnZXRfY3B1KCkpOwogCXRzay0+dGhyZWFkLmVzcDAgPSAodW5zaWduZWQgbG9uZykgJmluZm8tPlZNODZfVFNTX0VTUDA7CkBAIC0zNDIsNyArMzQzLDcgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIm1vdmwgJTAsJSVlc3Bcblx0IgogCQkibW92bCAlMSwlJWVicFxuXHQiCi0JCSJtb3YgICUyLCAlJWZzXG5cdCIKKwkJIm1vdiAgJTIsICUlZ3Ncblx0IgogCQkiam1wIHJlc3VtZV91c2Vyc3BhY2UiCiAJCTogLyogbm8gb3V0cHV0cyAqLwogCQk6InIiICgmaW5mby0+cmVncyksICJyIiAodGFza190aHJlYWRfaW5mbyh0c2spKSwgInIiICgwKSk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3ZtaS5jIGIvYXJjaC9pMzg2L2tlcm5lbC92bWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjVhN2FiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92bWkuYwpAQCAtMCwwICsxLDk0OSBAQAorLyoKKyAqIFZNSSBzcGVjaWZpYyBwYXJhdmlydC1vcHMgaW1wbGVtZW50YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIFZNd2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIFNlbmQgZmVlZGJhY2sgdG8gemFjaEB2bXdhcmUuY29tCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saWNlbnNlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL3ZtaS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS92bWlfdGltZS5oPgorCisvKiBDb252ZW5pZW50IGZvciBjYWxsaW5nIFZNSSBmdW5jdGlvbnMgaW5kaXJlY3RseSBpbiB0aGUgUk9NICovCit0eXBlZGVmIHUzMiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDEpKSkgKFZST01GVU5DKSh2b2lkKTsKK3R5cGVkZWYgdTY0IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMikpKSAoVlJPTUxPTkdGVU5DKShpbnQpOworCisjZGVmaW5lIGNhbGxfdnJvbV9mdW5jKHJvbSxmdW5jKSBcCisgICAoKChWUk9NRlVOQyAqKShyb20tPmZ1bmMpKSgpKQorCisjZGVmaW5lIGNhbGxfdnJvbV9sb25nX2Z1bmMocm9tLGZ1bmMsYXJnKSBcCisgICAoKChWUk9NTE9OR0ZVTkMgKikocm9tLT5mdW5jKSkgKGFyZykpCisKK3N0YXRpYyBzdHJ1Y3QgdnJvbV9oZWFkZXIgKnZtaV9yb207CitzdGF0aWMgaW50IGxpY2Vuc2VfZ3Bsb2s7CitzdGF0aWMgaW50IGRpc2FibGVfbm9kZWxheTsKK3N0YXRpYyBpbnQgZGlzYWJsZV9wZ2U7CitzdGF0aWMgaW50IGRpc2FibGVfcHNlOworc3RhdGljIGludCBkaXNhYmxlX3NlcDsKK3N0YXRpYyBpbnQgZGlzYWJsZV90c2M7CitzdGF0aWMgaW50IGRpc2FibGVfbXRycjsKKworLyogQ2FjaGVkIFZNSSBvcGVyYXRpb25zICovCitzdHJ1Y3QgeworCXZvaWQgKCpjcHVpZCkodm9pZCAvKiBub24tYyAqLyk7CisJdm9pZCAoKl9zZXRfbGR0KSh1MzIgc2VsZWN0b3IpOworCXZvaWQgKCpzZXRfdHIpKHUzMiBzZWxlY3Rvcik7CisJdm9pZCAoKnNldF9rZXJuZWxfc3RhY2spKHUzMiBzZWxlY3RvciwgdTMyIGVzcDApOworCXZvaWQgKCphbGxvY2F0ZV9wYWdlKSh1MzIsIHUzMiwgdTMyLCB1MzIsIHUzMik7CisJdm9pZCAoKnJlbGVhc2VfcGFnZSkodTMyLCB1MzIpOworCXZvaWQgKCpzZXRfcHRlKShwdGVfdCwgcHRlX3QgKiwgdW5zaWduZWQpOworCXZvaWQgKCp1cGRhdGVfcHRlKShwdGVfdCAqLCB1bnNpZ25lZCk7CisJdm9pZCAoKnNldF9saW5lYXJfbWFwcGluZykoaW50LCB1MzIsIHUzMiwgdTMyKTsKKwl2b2lkICgqZmx1c2hfdGxiKShpbnQpOworCXZvaWQgKCpzZXRfaW5pdGlhbF9hcF9zdGF0ZSkoaW50LCBpbnQpOworCXZvaWQgKCpoYWx0KSh2b2lkKTsKK30gdm1pX29wczsKKworLyogWFhYIG1vdmUgdGhpcyB0byBhbHRlcm5hdGl2ZS5oICovCitleHRlcm4gc3RydWN0IHBhcmF2aXJ0X3BhdGNoIF9fc3RhcnRfcGFyYWluc3RydWN0aW9uc1tdLAorCV9fc3RvcF9wYXJhaW5zdHJ1Y3Rpb25zW107CisKKy8qCisgKiBWTUkgcGF0Y2hpbmcgcm91dGluZXMuCisgKi8KKyNkZWZpbmUgTU5FTV9DQUxMIDB4ZTgKKyNkZWZpbmUgTU5FTV9KTVAgIDB4ZTkKKyNkZWZpbmUgTU5FTV9SRVQgIDB4YzMKKworc3RhdGljIGNoYXIgaXJxX3NhdmVfZGlzYWJsZV9jYWxsb3V0W10gPSB7CisJTU5FTV9DQUxMLCAwLCAwLCAwLCAwLAorCU1ORU1fQ0FMTCwgMCwgMCwgMCwgMCwKKwlNTkVNX1JFVAorfTsKKyNkZWZpbmUgSVJRX1BBVENIX0lOVF9NQVNLIDAKKyNkZWZpbmUgSVJRX1BBVENIX0RJU0FCTEUgIDUKKworc3RhdGljIGlubGluZSB2b2lkIHBhdGNoX29mZnNldCh1bnNpZ25lZCBjaGFyICplaXAsIHVuc2lnbmVkIGNoYXIgKmRlc3QpCit7CisgICAgICAgICoodW5zaWduZWQgbG9uZyAqKShlaXArMSkgPSBkZXN0LWVpcC01OworfQorCitzdGF0aWMgdW5zaWduZWQgcGF0Y2hfaW50ZXJuYWwoaW50IGNhbGwsIHVuc2lnbmVkIGxlbiwgdm9pZCAqaW5zbnMpCit7CisJdTY0IHJlbG9jOworCXN0cnVjdCB2bWlfcmVsb2NhdGlvbl9pbmZvICpjb25zdCByZWwgPSAoc3RydWN0IHZtaV9yZWxvY2F0aW9uX2luZm8gKikmcmVsb2M7CisJcmVsb2MgPSBjYWxsX3Zyb21fbG9uZ19mdW5jKHZtaV9yb20sIGdldF9yZWxvYywJY2FsbCk7CisJc3dpdGNoKHJlbC0+dHlwZSkgeworCQljYXNlIFZNSV9SRUxPQ0FUSU9OX0NBTExfUkVMOgorCQkJQlVHX09OKGxlbiA8IDUpOworCQkJKihjaGFyICopaW5zbnMgPSBNTkVNX0NBTEw7CisJCQlwYXRjaF9vZmZzZXQoaW5zbnMsIHJlbC0+ZWlwKTsKKwkJCXJldHVybiA1OworCisJCWNhc2UgVk1JX1JFTE9DQVRJT05fSlVNUF9SRUw6CisJCQlCVUdfT04obGVuIDwgNSk7CisJCQkqKGNoYXIgKilpbnNucyA9IE1ORU1fSk1QOworCQkJcGF0Y2hfb2Zmc2V0KGluc25zLCByZWwtPmVpcCk7CisJCQlyZXR1cm4gNTsKKworCQljYXNlIFZNSV9SRUxPQ0FUSU9OX05PUDoKKwkJCS8qIG9ibGl0ZXJhdGUgdGhlIHdob2xlIHRoaW5nICovCisJCQlyZXR1cm4gMDsKKworCQljYXNlIFZNSV9SRUxPQ0FUSU9OX05PTkU6CisJCQkvKiBsZWF2ZSBuYXRpdmUgY29kZSBpbiBwbGFjZSAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCX0KKwlyZXR1cm4gbGVuOworfQorCisvKgorICogQXBwbHkgcGF0Y2ggaWYgYXBwcm9wcmlhdGUsIHJldHVybiBsZW5ndGggb2YgbmV3IGluc3RydWN0aW9uCisgKiBzZXF1ZW5jZS4gIFRoZSBjYWxsZWUgZG9lcyBub3AgcGFkZGluZyBmb3IgdXMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCB2bWlfcGF0Y2godTggdHlwZSwgdTE2IGNsb2JiZXJzLCB2b2lkICppbnNucywgdW5zaWduZWQgbGVuKQoreworCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFBBUkFWSVJUX0lSUV9ESVNBQkxFOgorCQkJcmV0dXJuIHBhdGNoX2ludGVybmFsKFZNSV9DQUxMX0Rpc2FibGVJbnRlcnJ1cHRzLCBsZW4sIGluc25zKTsKKwkJY2FzZSBQQVJBVklSVF9JUlFfRU5BQkxFOgorCQkJcmV0dXJuIHBhdGNoX2ludGVybmFsKFZNSV9DQUxMX0VuYWJsZUludGVycnVwdHMsIGxlbiwgaW5zbnMpOworCQljYXNlIFBBUkFWSVJUX1JFU1RPUkVfRkxBR1M6CisJCQlyZXR1cm4gcGF0Y2hfaW50ZXJuYWwoVk1JX0NBTExfU2V0SW50ZXJydXB0TWFzaywgbGVuLCBpbnNucyk7CisJCWNhc2UgUEFSQVZJUlRfU0FWRV9GTEFHUzoKKwkJCXJldHVybiBwYXRjaF9pbnRlcm5hbChWTUlfQ0FMTF9HZXRJbnRlcnJ1cHRNYXNrLCBsZW4sIGluc25zKTsKKyAgICAgICAgCWNhc2UgUEFSQVZJUlRfU0FWRV9GTEFHU19JUlFfRElTQUJMRToKKwkJCWlmIChsZW4gPj0gMTApIHsKKwkJCQlwYXRjaF9pbnRlcm5hbChWTUlfQ0FMTF9HZXRJbnRlcnJ1cHRNYXNrLCBsZW4sIGluc25zKTsKKwkJCQlwYXRjaF9pbnRlcm5hbChWTUlfQ0FMTF9EaXNhYmxlSW50ZXJydXB0cywgbGVuLTUsIGluc25zKzUpOworCQkJCXJldHVybiAxMDsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBZb3UgYmFzdGFyZHMgZGlkbid0IGxlYXZlIGVub3VnaCByb29tIHRvCisJCQkJICogcGF0Y2ggc2F2ZV9mbGFnc19pcnFfZGlzYWJsZSBpbmxpbmUuICBQYXRjaAorCQkJCSAqIHRvIGEgaGVscGVyCisJCQkJICovCisJCQkJQlVHX09OKGxlbiA8IDUpOworCQkJCSooY2hhciAqKWluc25zID0gTU5FTV9DQUxMOworCQkJCXBhdGNoX29mZnNldChpbnNucywgaXJxX3NhdmVfZGlzYWJsZV9jYWxsb3V0KTsKKwkJCQlyZXR1cm4gNTsKKwkJCX0KKwkJY2FzZSBQQVJBVklSVF9JTlRFUlJVUFRfUkVUVVJOOgorCQkJcmV0dXJuIHBhdGNoX2ludGVybmFsKFZNSV9DQUxMX0lSRVQsIGxlbiwgaW5zbnMpOworCQljYXNlIFBBUkFWSVJUX1NUSV9TWVNFWElUOgorCQkJcmV0dXJuIHBhdGNoX2ludGVybmFsKFZNSV9DQUxMX1NZU0VYSVQsIGxlbiwgaW5zbnMpOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCXJldHVybiBsZW47Cit9CisKKy8qIENQVUlEIGhhcyBub24tQyBzZW1hbnRpY3MsIGFuZCBwYXJhdmlydC1vcHMgQVBJIGRvZXNuJ3QgbWF0Y2ggaGFyZHdhcmUgSVNBICovCitzdGF0aWMgdm9pZCB2bWlfY3B1aWQodW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZWN4LCB1bnNpZ25lZCBpbnQgKmVkeCkKK3sKKwlpbnQgb3ZlcnJpZGUgPSAwOworCWlmICgqZWF4ID09IDEpCisJCW92ZXJyaWRlID0gMTsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgiY2FsbCAqJTYiCisgICAgICAgICAgICAgICAgICAgICAgOiAiPWEiICgqZWF4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICI9YiIgKCplYngpLAorICAgICAgICAgICAgICAgICAgICAgICAgIj1jIiAoKmVjeCksCisgICAgICAgICAgICAgICAgICAgICAgICAiPWQiICgqZWR4KQorICAgICAgICAgICAgICAgICAgICAgIDogIjAiICgqZWF4KSwgIjIiICgqZWN4KSwgInIiICh2bWlfb3BzLmNwdWlkKSk7CisJaWYgKG92ZXJyaWRlKSB7CisJCWlmIChkaXNhYmxlX3BzZSkKKwkJCSplZHggJj0gflg4Nl9GRUFUVVJFX1BTRTsKKwkJaWYgKGRpc2FibGVfcGdlKQorCQkJKmVkeCAmPSB+WDg2X0ZFQVRVUkVfUEdFOworCQlpZiAoZGlzYWJsZV9zZXApCisJCQkqZWR4ICY9IH5YODZfRkVBVFVSRV9TRVA7CisJCWlmIChkaXNhYmxlX3RzYykKKwkJCSplZHggJj0gflg4Nl9GRUFUVVJFX1RTQzsKKwkJaWYgKGRpc2FibGVfbXRycikKKwkJCSplZHggJj0gflg4Nl9GRUFUVVJFX01UUlI7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdm1pX21heWJlX2xvYWRfdGxzKHN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0LCBpbnQgbnIsIHN0cnVjdCBkZXNjX3N0cnVjdCAqbmV3KQoreworCWlmIChnZHRbbnJdLmEgIT0gbmV3LT5hIHx8IGdkdFtucl0uYiAhPSBuZXctPmIpCisJCXdyaXRlX2dkdF9lbnRyeShnZHQsIG5yLCBuZXctPmEsIG5ldy0+Yik7Cit9CisKK3N0YXRpYyB2b2lkIHZtaV9sb2FkX3RscyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdCA9IGdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7CisJdm1pX21heWJlX2xvYWRfdGxzKGdkdCwgR0RUX0VOVFJZX1RMU19NSU4gKyAwLCAmdC0+dGxzX2FycmF5WzBdKTsKKwl2bWlfbWF5YmVfbG9hZF90bHMoZ2R0LCBHRFRfRU5UUllfVExTX01JTiArIDEsICZ0LT50bHNfYXJyYXlbMV0pOworCXZtaV9tYXliZV9sb2FkX3RscyhnZHQsIEdEVF9FTlRSWV9UTFNfTUlOICsgMiwgJnQtPnRsc19hcnJheVsyXSk7Cit9CisKK3N0YXRpYyB2b2lkIHZtaV9zZXRfbGR0KGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGVudHJpZXMpCit7CisJdW5zaWduZWQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXUzMiBsb3csIGhpZ2g7CisKKwlwYWNrX2Rlc2NyaXB0b3IoJmxvdywgJmhpZ2gsICh1bnNpZ25lZCBsb25nKWFkZHIsCisJCQllbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBkZXNjX3N0cnVjdCkgLSAxLAorCQkJREVTQ1RZUEVfTERULCAwKTsKKwl3cml0ZV9nZHRfZW50cnkoZ2V0X2NwdV9nZHRfdGFibGUoY3B1KSwgR0RUX0VOVFJZX0xEVCwgbG93LCBoaWdoKTsKKwl2bWlfb3BzLl9zZXRfbGR0KGVudHJpZXMgPyBHRFRfRU5UUllfTERUKnNpemVvZihzdHJ1Y3QgZGVzY19zdHJ1Y3QpIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIHZtaV9zZXRfdHIodm9pZCkKK3sKKwl2bWlfb3BzLnNldF90cihHRFRfRU5UUllfVFNTKnNpemVvZihzdHJ1Y3QgZGVzY19zdHJ1Y3QpKTsKK30KKworc3RhdGljIHZvaWQgdm1pX2xvYWRfZXNwMChzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzLAorCQkJCSAgIHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCit7CisJdHNzLT5lc3AwID0gdGhyZWFkLT5lc3AwOworCisJLyogVGhpcyBjYW4gb25seSBoYXBwZW4gd2hlbiBTRVAgaXMgZW5hYmxlZCwgbm8gbmVlZCB0byB0ZXN0ICJTRVAiYXJhdGVseSAqLworCWlmICh1bmxpa2VseSh0c3MtPnNzMSAhPSB0aHJlYWQtPnN5c2VudGVyX2NzKSkgeworCQl0c3MtPnNzMSA9IHRocmVhZC0+c3lzZW50ZXJfY3M7CisJCXdybXNyKE1TUl9JQTMyX1NZU0VOVEVSX0NTLCB0aHJlYWQtPnN5c2VudGVyX2NzLCAwKTsKKwl9CisJdm1pX29wcy5zZXRfa2VybmVsX3N0YWNrKF9fS0VSTkVMX0RTLCB0c3MtPmVzcDApOworfQorCitzdGF0aWMgdm9pZCB2bWlfZmx1c2hfdGxiX3VzZXIodm9pZCkKK3sKKwl2bWlfb3BzLmZsdXNoX3RsYihWTUlfRkxVU0hfVExCKTsKK30KKworc3RhdGljIHZvaWQgdm1pX2ZsdXNoX3RsYl9rZXJuZWwodm9pZCkKK3sKKwl2bWlfb3BzLmZsdXNoX3RsYihWTUlfRkxVU0hfVExCIHwgVk1JX0ZMVVNIX0dMT0JBTCk7Cit9CisKKy8qIFN0dWIgdG8gZG8gbm90aGluZyBhdCBhbGw7IHVzZWQgZm9yIGRlbGF5cyBhbmQgdW5pbXBsZW1lbnRlZCBjYWxscyAqLworc3RhdGljIHZvaWQgdm1pX25vcCh2b2lkKQoreworfQorCisvKiBGb3IgTk9fSURMRV9IWiwgd2Ugc3RvcCB0aGUgY2xvY2sgd2hlbiBoYWx0aW5nIHRoZSBrZXJuZWwgKi8KKyNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgorc3RhdGljIGZhc3RjYWxsIHZvaWQgdm1pX3NhZmVfaGFsdCh2b2lkKQoreworCWludCBpZGxlID0gdm1pX3N0b3BfaHpfdGltZXIoKTsKKwl2bWlfb3BzLmhhbHQoKTsKKwlpZiAoaWRsZSkgeworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQl2bWlfYWNjb3VudF90aW1lX3Jlc3RhcnRfaHpfdGltZXIoKTsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCX0KK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VfVFlQRQorCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKyNkZWZpbmUgTUFYX0JPT1RfUFRTICgyMDQ4KzQrMSkKKyNlbHNlCisjZGVmaW5lIE1BWF9CT09UX1BUUyAoMTAyNCsxKQorI2VuZGlmCisKKy8qCisgKiBEdXJpbmcgYm9vdCwgbWVtX21hcCBpcyBub3QgeWV0IGF2YWlsYWJsZSBpbiBwYWdpbmdfaW5pdCwgc28gc3Rhc2gKKyAqIGFsbCB0aGUgYm9vdCBwYWdlIGFsbG9jYXRpb25zIGhlcmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiBwZm47CisJaW50IHR5cGU7Cit9IGJvb3RfcGFnZV9hbGxvY2F0aW9uc1tNQVhfQk9PVF9QVFNdOworc3RhdGljIGludCBudW1fYm9vdF9wYWdlX2FsbG9jYXRpb25zOworc3RhdGljIGludCBib290X2FsbG9jYXRpb25zX2FwcGxpZWQ7CisKK3ZvaWQgdm1pX2FwcGx5X2Jvb3RfcGFnZV9hbGxvY2F0aW9ucyh2b2lkKQoreworCWludCBpOworCUJVR19PTighbWVtX21hcCk7CisJZm9yIChpID0gMDsgaSA8IG51bV9ib290X3BhZ2VfYWxsb2NhdGlvbnM7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKGJvb3RfcGFnZV9hbGxvY2F0aW9uc1tpXS5wZm4pOworCQlwYWdlLT50eXBlID0gYm9vdF9wYWdlX2FsbG9jYXRpb25zW2ldLnR5cGU7CisJCXBhZ2UtPnR5cGUgPSBib290X3BhZ2VfYWxsb2NhdGlvbnNbaV0udHlwZSAmCisJCQkJfihWTUlfUEFHRV9aRVJPRUQgfCBWTUlfUEFHRV9DTE9ORSk7CisJfQorCWJvb3RfYWxsb2NhdGlvbnNfYXBwbGllZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHJlY29yZF9wYWdlX3R5cGUodTMyIHBmbiwgaW50IHR5cGUpCit7CisJQlVHX09OKG51bV9ib290X3BhZ2VfYWxsb2NhdGlvbnMgPj0gTUFYX0JPT1RfUFRTKTsKKwlib290X3BhZ2VfYWxsb2NhdGlvbnNbbnVtX2Jvb3RfcGFnZV9hbGxvY2F0aW9uc10ucGZuID0gcGZuOworCWJvb3RfcGFnZV9hbGxvY2F0aW9uc1tudW1fYm9vdF9wYWdlX2FsbG9jYXRpb25zXS50eXBlID0gdHlwZTsKKwludW1fYm9vdF9wYWdlX2FsbG9jYXRpb25zKys7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3plcm9lZF9wYWdlKHUzMiBwZm4sIGludCB0eXBlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1MzIgKnB0cjsKKwlpbnQgaTsKKwlpbnQgbGltaXQgPSBQQUdFX1NJWkUgLyBzaXplb2YoaW50KTsKKworCWlmIChwYWdlX2FkZHJlc3MocGFnZSkpCisJCXB0ciA9ICh1MzIgKilwYWdlX2FkZHJlc3MocGFnZSk7CisJZWxzZQorCQlwdHIgPSAodTMyICopX192YShwZm4gPDwgUEFHRV9TSElGVCk7CisJLyoKKwkgKiBXaGVuIGNsb25pbmcgdGhlIHJvb3QgaW4gbm9uLVBBRSBtb2RlLCBvbmx5IHRoZSB1c2Vyc3BhY2UKKwkgKiBwZGVzIG5lZWQgdG8gYmUgemVyb2VkLgorCSAqLworCWlmICh0eXBlICYgVk1JX1BBR0VfQ0xPTkUpCisJCWxpbWl0ID0gVVNFUl9QVFJTX1BFUl9QR0Q7CisJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspCisJCUJVR19PTihwdHJbaV0pOworfQorCisvKgorICogV2Ugc3Rhc2ggdGhlIHBhZ2UgdHlwZSBpbnRvIHN0cnVjdCBwYWdlIHNvIHdlIGNhbiB2ZXJpZnkgdGhlIHBhZ2UKKyAqIHR5cGVzIGFyZSB1c2VkIHByb3Blcmx5LgorICovCitzdGF0aWMgdm9pZCB2bWlfc2V0X3BhZ2VfdHlwZSh1MzIgcGZuLCBpbnQgdHlwZSkKK3sKKwkvKiBQQUUgY2FuIGhhdmUgbXVsdGlwbGUgcm9vdHMgcGVyIHBhZ2UgLSBkb24ndCB0cmFjayAqLworCWlmIChQVFJTX1BFUl9QTUQgPiAxICYmICh0eXBlICYgVk1JX1BBR0VfUERQKSkKKwkJcmV0dXJuOworCisJaWYgKGJvb3RfYWxsb2NhdGlvbnNfYXBwbGllZCkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisJCWlmICh0eXBlICE9IFZNSV9QQUdFX05PUk1BTCkKKwkJCUJVR19PTihwYWdlLT50eXBlKTsKKwkJZWxzZQorCQkJQlVHX09OKHBhZ2UtPnR5cGUgPT0gVk1JX1BBR0VfTk9STUFMKTsKKwkJcGFnZS0+dHlwZSA9IHR5cGUgJiB+KFZNSV9QQUdFX1pFUk9FRCB8IFZNSV9QQUdFX0NMT05FKTsKKwkJaWYgKHR5cGUgJiBWTUlfUEFHRV9aRVJPRUQpCisJCQljaGVja196ZXJvZWRfcGFnZShwZm4sIHR5cGUsIHBhZ2UpOworCX0gZWxzZSB7CisJCXJlY29yZF9wYWdlX3R5cGUocGZuLCB0eXBlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZtaV9jaGVja19wYWdlX3R5cGUodTMyIHBmbiwgaW50IHR5cGUpCit7CisJLyogUEFFIGNhbiBoYXZlIG11bHRpcGxlIHJvb3RzIHBlciBwYWdlIC0gc2tpcCBjaGVja3MgKi8KKwlpZiAoUFRSU19QRVJfUE1EID4gMSAmJiAodHlwZSAmIFZNSV9QQUdFX1BEUCkpCisJCXJldHVybjsKKworCXR5cGUgJj0gfihWTUlfUEFHRV9aRVJPRUQgfCBWTUlfUEFHRV9DTE9ORSk7CisJaWYgKGJvb3RfYWxsb2NhdGlvbnNfYXBwbGllZCkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisJCUJVR19PTigocGFnZS0+dHlwZSBeIHR5cGUpICYgVk1JX1BBR0VfUEFFKTsKKwkJQlVHX09OKHR5cGUgPT0gVk1JX1BBR0VfTk9STUFMICYmIHBhZ2UtPnR5cGUpOworCQlCVUdfT04oKHR5cGUgJiBwYWdlLT50eXBlKSA9PSAwKTsKKwl9Cit9CisjZWxzZQorI2RlZmluZSB2bWlfc2V0X3BhZ2VfdHlwZShwLHQpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdm1pX2NoZWNrX3BhZ2VfdHlwZShwLHQpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB2bWlfYWxsb2NhdGVfcHQodTMyIHBmbikKK3sKKwl2bWlfc2V0X3BhZ2VfdHlwZShwZm4sIFZNSV9QQUdFX0wxKTsKKwl2bWlfb3BzLmFsbG9jYXRlX3BhZ2UocGZuLCBWTUlfUEFHRV9MMSwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHZtaV9hbGxvY2F0ZV9wZCh1MzIgcGZuKQoreworIAkvKgorCSAqIFRoaXMgY2FsbCBjb21lcyBpbiB2ZXJ5IGVhcmx5LCBiZWZvcmUgbWVtX21hcCBpcyBzZXR1cC4KKwkgKiBJdCBpcyBjYWxsZWQgb25seSBmb3Igc3dhcHBlcl9wZ19kaXIsIHdoaWNoIGFscmVhZHkgaGFzCisJICogZGF0YSBvbiBpdC4KKwkgKi8KKyAJdm1pX3NldF9wYWdlX3R5cGUocGZuLCBWTUlfUEFHRV9MMik7CisJdm1pX29wcy5hbGxvY2F0ZV9wYWdlKHBmbiwgVk1JX1BBR0VfTDIsIDAsIDAsIDApOworfQorCitzdGF0aWMgdm9pZCB2bWlfYWxsb2NhdGVfcGRfY2xvbmUodTMyIHBmbiwgdTMyIGNsb25lcGZuLCB1MzIgc3RhcnQsIHUzMiBjb3VudCkKK3sKKyAJdm1pX3NldF9wYWdlX3R5cGUocGZuLCBWTUlfUEFHRV9MMiB8IFZNSV9QQUdFX0NMT05FKTsKKwl2bWlfY2hlY2tfcGFnZV90eXBlKGNsb25lcGZuLCBWTUlfUEFHRV9MMik7CisJdm1pX29wcy5hbGxvY2F0ZV9wYWdlKHBmbiwgVk1JX1BBR0VfTDIgfCBWTUlfUEFHRV9DTE9ORSwgY2xvbmVwZm4sIHN0YXJ0LCBjb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHZtaV9yZWxlYXNlX3B0KHUzMiBwZm4pCit7CisJdm1pX29wcy5yZWxlYXNlX3BhZ2UocGZuLCBWTUlfUEFHRV9MMSk7CisJdm1pX3NldF9wYWdlX3R5cGUocGZuLCBWTUlfUEFHRV9OT1JNQUwpOworfQorCitzdGF0aWMgdm9pZCB2bWlfcmVsZWFzZV9wZCh1MzIgcGZuKQoreworCXZtaV9vcHMucmVsZWFzZV9wYWdlKHBmbiwgVk1JX1BBR0VfTDIpOworCXZtaV9zZXRfcGFnZV90eXBlKHBmbiwgVk1JX1BBR0VfTk9STUFMKTsKK30KKworLyoKKyAqIEhlbHBlciBtYWNyb3MgZm9yIE1NVSB1cGRhdGUgZmxhZ3MuICBXZSBjYW4gZGVmZXIgdXBkYXRlcyB1bnRpbCBhIGZsdXNoCisgKiBvciBwYWdlIGludmFsaWRhdGlvbiBvbmx5IGlmIHRoZSB1cGRhdGUgaXMgdG8gdGhlIGN1cnJlbnQgYWRkcmVzcyBzcGFjZQorICogKG90aGVyd2lzZSwgdGhlcmUgaXMgbm8gZmx1c2gpLiAgV2UgbXVzdCBjaGVjayBhZ2FpbnN0IGluaXRfbW0sIHNpbmNlCisgKiB0aGlzIGNvdWxkIGJlIGEga2VybmVsIHVwZGF0ZSwgd2hpY2ggdXN1YWxseSBwYXNzZXMgaW5pdF9tbSwgYWx0aG91Z2gKKyAqIHNvbWV0aW1lcyB0aGlzIGNoZWNrIGNhbiBiZSBza2lwcGVkIGlmIHdlIGtub3cgdGhlIHBhcnRpY3VsYXIgZnVuY3Rpb24KKyAqIGlzIG9ubHkgY2FsbGVkIG9uIHVzZXIgbW9kZSBQVEVzLiAgV2UgY291bGQgY2hhbmdlIHRoZSBrZXJuZWwgdG8gcGFzcworICogY3VycmVudC0+YWN0aXZlX21tIGhlcmUsIGJ1dCBpbiBwYXJ0aWN1bGFyLCBJIHdhcyB1bnN1cmUgaWYgY2hhbmdpbmcKKyAqIG1tL2hpZ2htZW0uYyB0byBkbyB0aGlzIHdvdWxkIHN0aWxsIGJlIGNvcnJlY3Qgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcy4KKyAqLworI2RlZmluZSBpc19jdXJyZW50X2FzKG1tLCBtdXN0YmV1c2VyKSAoKG1tKSA9PSBjdXJyZW50LT5hY3RpdmVfbW0gfHwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFtdXN0YmV1c2VyICYmIChtbSkgPT0gJmluaXRfbW0pKQorI2RlZmluZSB2bWlfZmxhZ3NfYWRkcihtbSwgYWRkciwgbGV2ZWwsIHVzZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKGxldmVsKSB8IChpc19jdXJyZW50X2FzKG1tLCB1c2VyKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChWTUlfUEFHRV9DVVJSRU5UX0FTIHwgKChhZGRyKSAmIFZNSV9QQUdFX1ZBX01BU0spKSA6IDApKQorI2RlZmluZSB2bWlfZmxhZ3NfYWRkcl9kZWZlcihtbSwgYWRkciwgbGV2ZWwsIHVzZXIpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKGxldmVsKSB8IChpc19jdXJyZW50X2FzKG1tLCB1c2VyKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChWTUlfUEFHRV9ERUZFUiB8IFZNSV9QQUdFX0NVUlJFTlRfQVMgfCAoKGFkZHIpICYgVk1JX1BBR0VfVkFfTUFTSykpIDogMCkpCisKK3N0YXRpYyB2b2lkIHZtaV91cGRhdGVfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJdm1pX2NoZWNrX3BhZ2VfdHlwZShfX3BhKHB0ZXApID4+IFBBR0VfU0hJRlQsIFZNSV9QQUdFX1BURSk7CisJdm1pX29wcy51cGRhdGVfcHRlKHB0ZXAsIHZtaV9mbGFnc19hZGRyKG1tLCBhZGRyLCBWTUlfUEFHRV9QVCwgMCkpOworfQorCitzdGF0aWMgdm9pZCB2bWlfdXBkYXRlX3B0ZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTMyIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCXZtaV9jaGVja19wYWdlX3R5cGUoX19wYShwdGVwKSA+PiBQQUdFX1NISUZULCBWTUlfUEFHRV9QVEUpOworCXZtaV9vcHMudXBkYXRlX3B0ZShwdGVwLCB2bWlfZmxhZ3NfYWRkcl9kZWZlcihtbSwgYWRkciwgVk1JX1BBR0VfUFQsIDApKTsKK30KKworc3RhdGljIHZvaWQgdm1pX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwkvKiBYWFggYmVjYXVzZSBvZiBzZXRfcG1kX3B0ZSwgdGhpcyBjYW4gYmUgY2FsbGVkIG9uIFBUIG9yIFBEIGxheWVycyAqLworCXZtaV9jaGVja19wYWdlX3R5cGUoX19wYShwdGVwKSA+PiBQQUdFX1NISUZULCBWTUlfUEFHRV9QVEUgfCBWTUlfUEFHRV9QRCk7CisJdm1pX29wcy5zZXRfcHRlKHB0ZSwgcHRlcCwgVk1JX1BBR0VfUFQpOworfQorCitzdGF0aWMgdm9pZCB2bWlfc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTMyIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisJdm1pX2NoZWNrX3BhZ2VfdHlwZShfX3BhKHB0ZXApID4+IFBBR0VfU0hJRlQsIFZNSV9QQUdFX1BURSk7CisJdm1pX29wcy5zZXRfcHRlKHB0ZSwgcHRlcCwgdm1pX2ZsYWdzX2FkZHIobW0sIGFkZHIsIFZNSV9QQUdFX1BULCAwKSk7Cit9CisKK3N0YXRpYyB2b2lkIHZtaV9zZXRfcG1kKHBtZF90ICpwbWRwLCBwbWRfdCBwbWR2YWwpCit7CisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKwljb25zdCBwdGVfdCBwdGUgPSB7IHBtZHZhbC5wbWQsIHBtZHZhbC5wbWQgPj4gMzIgfTsKKwl2bWlfY2hlY2tfcGFnZV90eXBlKF9fcGEocG1kcCkgPj4gUEFHRV9TSElGVCwgVk1JX1BBR0VfUE1EKTsKKyNlbHNlCisJY29uc3QgcHRlX3QgcHRlID0geyBwbWR2YWwucHVkLnBnZC5wZ2QgfTsKKwl2bWlfY2hlY2tfcGFnZV90eXBlKF9fcGEocG1kcCkgPj4gUEFHRV9TSElGVCwgVk1JX1BBR0VfUEdEKTsKKyNlbmRpZgorCXZtaV9vcHMuc2V0X3B0ZShwdGUsIChwdGVfdCAqKXBtZHAsIFZNSV9QQUdFX1BEKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfUEFFCisKK3N0YXRpYyB2b2lkIHZtaV9zZXRfcHRlX2F0b21pYyhwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKQoreworCS8qCisJICogWFhYIFRoaXMgaXMgY2FsbGVkIGZyb20gc2V0X3BtZF9wdGUsIGJ1dCBhdCBib3RoIFBUCisJICogYW5kIFBEIGxheWVycyBzbyB0aGUgVk1JX1BBR0VfUFQgZmxhZyBpcyB3cm9uZy4gIEJ1dAorCSAqIGl0IGlzIG9ubHkgY2FsbGVkIGZvciBsYXJnZSBwYWdlIG1hcHBpbmcgY2hhbmdlcywKKwkgKiB0aGUgWGVuIGJhY2tlbmQsIGRvZXNuJ3Qgc3VwcG9ydCBsYXJnZSBwYWdlcywgYW5kIHRoZQorCSAqIEVTWCBiYWNrZW5kIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBmbGFnLgorCSAqLworCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopcHRlcCxwdGVfdmFsKHB0ZXZhbCkpOworCXZtaV9vcHMudXBkYXRlX3B0ZShwdGVwLCBWTUlfUEFHRV9QVCk7Cit9CisKK3N0YXRpYyB2b2lkIHZtaV9zZXRfcHRlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwl2bWlfY2hlY2tfcGFnZV90eXBlKF9fcGEocHRlcCkgPj4gUEFHRV9TSElGVCwgVk1JX1BBR0VfUFRFKTsKKwl2bWlfb3BzLnNldF9wdGUocHRlLCBwdGVwLCB2bWlfZmxhZ3NfYWRkcl9kZWZlcihtbSwgYWRkciwgVk1JX1BBR0VfUFQsIDEpKTsKK30KKworc3RhdGljIHZvaWQgdm1pX3NldF9wdWQocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZHZhbCkKK3sKKwkvKiBVbSwgZXd3ICovCisJY29uc3QgcHRlX3QgcHRlID0geyBwdWR2YWwucGdkLnBnZCwgcHVkdmFsLnBnZC5wZ2QgPj4gMzIgfTsKKwl2bWlfY2hlY2tfcGFnZV90eXBlKF9fcGEocHVkcCkgPj4gUEFHRV9TSElGVCwgVk1JX1BBR0VfUEdEKTsKKwl2bWlfb3BzLnNldF9wdGUocHRlLCAocHRlX3QgKilwdWRwLCBWTUlfUEFHRV9QRFApOworfQorCitzdGF0aWMgdm9pZCB2bWlfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCWNvbnN0IHB0ZV90IHB0ZSA9IHsgMCB9OworCXZtaV9jaGVja19wYWdlX3R5cGUoX19wYShwdGVwKSA+PiBQQUdFX1NISUZULCBWTUlfUEFHRV9QVEUpOworCXZtaV9vcHMuc2V0X3B0ZShwdGUsIHB0ZXAsIHZtaV9mbGFnc19hZGRyKG1tLCBhZGRyLCBWTUlfUEFHRV9QVCwgMCkpOworfQorCit2b2lkIHZtaV9wbWRfY2xlYXIocG1kX3QgKnBtZCkKK3sKKwljb25zdCBwdGVfdCBwdGUgPSB7IDAgfTsKKwl2bWlfY2hlY2tfcGFnZV90eXBlKF9fcGEocG1kKSA+PiBQQUdFX1NISUZULCBWTUlfUEFHRV9QTUQpOworCXZtaV9vcHMuc2V0X3B0ZShwdGUsIChwdGVfdCAqKXBtZCwgVk1JX1BBR0VfUEQpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01QCitzdHJ1Y3Qgdm1pX2FwX3N0YXRlIGFwOworZXh0ZXJuIHZvaWQgc2V0dXBfcGRhKHZvaWQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgLyogWFhYIGNwdSBob3RwbHVnICovCit2bWlfc3RhcnR1cF9pcGlfaG9vayhpbnQgcGh5c19hcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfZXNwKQoreworCS8qIERlZmF1bHQgZXZlcnl0aGluZyB0byB6ZXJvLiAgVGhpcyBpcyBmaW5lIGZvciBtb3N0IEdQUnMuICovCisJbWVtc2V0KCZhcCwgMCwgc2l6ZW9mKHN0cnVjdCB2bWlfYXBfc3RhdGUpKTsKKworCWFwLmdkdHJfbGltaXQgPSBHRFRfU0laRSAtIDE7CisJYXAuZ2R0cl9iYXNlID0gKHVuc2lnbmVkIGxvbmcpIGdldF9jcHVfZ2R0X3RhYmxlKHBoeXNfYXBpY2lkKTsKKworCWFwLmlkdHJfbGltaXQgPSBJRFRfRU5UUklFUyAqIDggLSAxOworCWFwLmlkdHJfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpZHRfdGFibGU7CisKKwlhcC5sZHRyID0gMDsKKworCWFwLmNzID0gX19LRVJORUxfQ1M7CisJYXAuZWlwID0gKHVuc2lnbmVkIGxvbmcpIHN0YXJ0X2VpcDsKKwlhcC5zcyA9IF9fS0VSTkVMX0RTOworCWFwLmVzcCA9ICh1bnNpZ25lZCBsb25nKSBzdGFydF9lc3A7CisKKwlhcC5kcyA9IF9fVVNFUl9EUzsKKwlhcC5lcyA9IF9fVVNFUl9EUzsKKwlhcC5mcyA9IF9fS0VSTkVMX1BEQTsKKwlhcC5ncyA9IDA7CisKKwlhcC5lZmxhZ3MgPSAwOworCisJc2V0dXBfcGRhKCk7CisKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorCS8qIGVmZXIgc2hvdWxkIG1hdGNoIEJTUCBlZmVyLiAqLworCWlmIChjcHVfaGFzX254KSB7CisJCXVuc2lnbmVkIGwsIGg7CisJCXJkbXNyKE1TUl9FRkVSLCBsLCBoKTsKKwkJYXAuZWZlciA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIGggPDwgMzIgfCBsOworCX0KKyNlbmRpZgorCisJYXAuY3IzID0gX19wYShzd2FwcGVyX3BnX2Rpcik7CisJLyogUHJvdGVjdGVkIG1vZGUsIHBhZ2luZywgQU0sIFdQLCBORSwgTVAuICovCisJYXAuY3IwID0gMHg4MDA1MDAyMzsKKwlhcC5jcjQgPSBtbXVfY3I0X2ZlYXR1cmVzOworCXZtaV9vcHMuc2V0X2luaXRpYWxfYXBfc3RhdGUoX19wYSgmYXApLCBwaHlzX2FwaWNpZCk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgX19pbml0IGNoZWNrX3ZtaV9yb20oc3RydWN0IHZyb21faGVhZGVyICpyb20pCit7CisJc3RydWN0IHBjaV9oZWFkZXIgKnBjaTsKKwlzdHJ1Y3QgcG5wX2hlYWRlciAqcG5wOworCWNvbnN0IGNoYXIgKm1hbnVmYWN0dXJlciA9ICJVTktOT1dOIjsKKwljb25zdCBjaGFyICpwcm9kdWN0ID0gIlVOS05PV04iOworCWNvbnN0IGNoYXIgKmxpY2Vuc2UgPSAidW5zcGVjaWZpZWQiOworCisJaWYgKHJvbS0+cm9tX3NpZ25hdHVyZSAhPSAweGFhNTUpCisJCXJldHVybiAwOworCWlmIChyb20tPnZyb21fc2lnbmF0dXJlICE9IFZNSV9TSUdOQVRVUkUpCisJCXJldHVybiAwOworCWlmIChyb20tPmFwaV92ZXJzaW9uX21haiAhPSBWTUlfQVBJX1JFVl9NQUpPUiB8fAorCSAgICByb20tPmFwaV92ZXJzaW9uX21pbisxIDwgVk1JX0FQSV9SRVZfTUlOT1IrMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJWTUk6IEZvdW5kIG1pc21hdGNoZWQgcm9tIHZlcnNpb24gJWQuJWRcbiIsCisJCQkJcm9tLT5hcGlfdmVyc2lvbl9tYWosCisJCQkJcm9tLT5hcGlfdmVyc2lvbl9taW4pOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFJlbHlpbmcgb24gdGhlIFZNSV9TSUdOQVRVUkUgZmllbGQgaXMgbm90IDEwMCUgc2FmZSwgc28gY2hlY2sKKwkgKiB0aGUgUENJIGhlYWRlciBhbmQgZGV2aWNlIHR5cGUgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcmVhbGx5IGEKKwkgKiBWTUkgZGV2aWNlLgorCSAqLworCWlmICghcm9tLT5wY2lfaGVhZGVyX29mZnMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVk1JOiBST00gZG9lcyBub3QgY29udGFpbiBQQ0kgaGVhZGVyLlxuIik7CisJCXJldHVybiAwOworCX0KKworCXBjaSA9IChzdHJ1Y3QgcGNpX2hlYWRlciAqKSgoY2hhciAqKXJvbStyb20tPnBjaV9oZWFkZXJfb2Zmcyk7CisJaWYgKHBjaS0+dmVuZG9ySUQgIT0gUENJX1ZFTkRPUl9JRF9WTVdBUkUgfHwKKwkgICAgcGNpLT5kZXZpY2VJRCAhPSBQQ0lfREVWSUNFX0lEX1ZNV0FSRV9WTUkpIHsKKwkJLyogQWxsb3cgaXQgdG8gcnVuLi4uIGFueXdheXMsIGJ1dCB3YXJuICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZNSTogUk9NIGZyb20gdW5rbm93biBtYW51ZmFjdHVyZXJcbiIpOworCX0KKworCWlmIChyb20tPnBucF9oZWFkZXJfb2ZmcykgeworCQlwbnAgPSAoc3RydWN0IHBucF9oZWFkZXIgKikoKGNoYXIgKilyb20rcm9tLT5wbnBfaGVhZGVyX29mZnMpOworCQlpZiAocG5wLT5tYW51ZmFjdHVyZXJfb2Zmc2V0KQorCQkJbWFudWZhY3R1cmVyID0gKGNvbnN0IGNoYXIgKilyb20rcG5wLT5tYW51ZmFjdHVyZXJfb2Zmc2V0OworCQlpZiAocG5wLT5wcm9kdWN0X29mZnNldCkKKwkJCXByb2R1Y3QgPSAoY29uc3QgY2hhciAqKXJvbStwbnAtPnByb2R1Y3Rfb2Zmc2V0OworCX0KKworCWlmIChyb20tPmxpY2Vuc2Vfb2ZmcykKKwkJbGljZW5zZSA9IChjaGFyICopcm9tK3JvbS0+bGljZW5zZV9vZmZzOworCisJcHJpbnRrKEtFUk5fSU5GTyAiVk1JOiBGb3VuZCAlcyAlcywgQVBJIHZlcnNpb24gJWQuJWQsIFJPTSB2ZXJzaW9uICVkLiVkXG4iLAorCQltYW51ZmFjdHVyZXIsIHByb2R1Y3QsCisJCXJvbS0+YXBpX3ZlcnNpb25fbWFqLCByb20tPmFwaV92ZXJzaW9uX21pbiwKKwkJcGNpLT5yb21fdmVyc2lvbl9tYWosIHBjaS0+cm9tX3ZlcnNpb25fbWluKTsKKworICAgICAgICBsaWNlbnNlX2dwbG9rID0gbGljZW5zZV9pc19ncGxfY29tcGF0aWJsZShsaWNlbnNlKTsKKyAgICAgICAgaWYgKCFsaWNlbnNlX2dwbG9rKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiVk1JOiBST00gbGljZW5zZSAnJXMnIHRhaW50cyBrZXJuZWwuLi4gIgorCQkgICAgICAgImlubGluaW5nIGRpc2FibGVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlKTsKKyAgICAgICAgICAgICAgICBhZGRfdGFpbnQoVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKTsKKyAgICAgICAgfQorCXJldHVybiAxOworfQorCisvKgorICogUHJvYmUgZm9yIHRoZSBWTUkgb3B0aW9uIFJPTQorICovCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgcHJvYmVfdm1pX3JvbSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKworCS8qIFZNSSBST00gaXMgaW4gb3B0aW9uIFJPTSBhcmVhLCBjaGVjayBzaWduYXR1cmUgKi8KKwlmb3IgKGJhc2UgPSAweEMwMDAwOyBiYXNlIDwgMHhFMDAwMDsgYmFzZSArPSAyMDQ4KSB7CisJCXN0cnVjdCB2cm9tX2hlYWRlciAqcm9tc3RhcnQ7CisJCXJvbXN0YXJ0ID0gKHN0cnVjdCB2cm9tX2hlYWRlciAqKWlzYV9idXNfdG9fdmlydChiYXNlKTsKKwkJaWYgKGNoZWNrX3ZtaV9yb20ocm9tc3RhcnQpKSB7CisJCQl2bWlfcm9tID0gcm9tc3RhcnQ7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFZNSSBzZXR1cCBjb21tb24gdG8gYWxsIHByb2Nlc3NvcnMKKyAqLwordm9pZCB2bWlfYnJpbmd1cCh2b2lkKQoreworIAkvKiBXZSBtdXN0IGVzdGFibGlzaCB0aGUgbG93bWVtIG1hcHBpbmcgZm9yIE1NVSBvcHMgdG8gd29yayAqLworCWlmICh2bWlfcm9tKQorCQl2bWlfb3BzLnNldF9saW5lYXJfbWFwcGluZygwLCBfX1BBR0VfT0ZGU0VULCBtYXhfbG93X3BmbiwgMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBWTUkgZnVuY3Rpb24gb3IgYSBOT1Agc3R1YgorICovCitzdGF0aWMgdm9pZCAqdm1pX2dldF9mdW5jdGlvbihpbnQgdm1pY2FsbCkKK3sKKwl1NjQgcmVsb2M7CisJY29uc3Qgc3RydWN0IHZtaV9yZWxvY2F0aW9uX2luZm8gKnJlbCA9IChzdHJ1Y3Qgdm1pX3JlbG9jYXRpb25faW5mbyAqKSZyZWxvYzsKKwlyZWxvYyA9IGNhbGxfdnJvbV9sb25nX2Z1bmModm1pX3JvbSwgZ2V0X3JlbG9jLAl2bWljYWxsKTsKKwlCVUdfT04ocmVsLT50eXBlID09IFZNSV9SRUxPQ0FUSU9OX0pVTVBfUkVMKTsKKwlpZiAocmVsLT50eXBlID09IFZNSV9SRUxPQ0FUSU9OX0NBTExfUkVMKQorCQlyZXR1cm4gKHZvaWQgKilyZWwtPmVpcDsKKwllbHNlCisJCXJldHVybiAodm9pZCAqKXZtaV9ub3A7Cit9CisKKy8qCisgKiBIZWxwZXIgbWFjcm8gZm9yIG1ha2luZyB0aGUgVk1JIHBhcmF2aXJ0LW9wcyBmaWxsIGNvZGUgcmVhZGFibGUuCisgKiBGb3IgdW5pbXBsZW1lbnRlZCBvcGVyYXRpb25zLCBmYWxsIGJhY2sgdG8gZGVmYXVsdC4KKyAqLworI2RlZmluZSBwYXJhX2ZpbGwob3BuYW1lLCB2bWljYWxsKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJcmVsb2MgPSBjYWxsX3Zyb21fbG9uZ19mdW5jKHZtaV9yb20sIGdldF9yZWxvYywJCVwKKwkJCQkgICAgVk1JX0NBTExfIyN2bWljYWxsKTsJXAorCWlmIChyZWwtPnR5cGUgIT0gVk1JX1JFTE9DQVRJT05fTk9ORSkgewkJCVwKKwkJQlVHX09OKHJlbC0+dHlwZSAhPSBWTUlfUkVMT0NBVElPTl9DQUxMX1JFTCk7CVwKKwkJcGFyYXZpcnRfb3BzLm9wbmFtZSA9ICh2b2lkICopcmVsLT5laXA7CQlcCisJfQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogQWN0aXZhdGUgdGhlIFZNSSBpbnRlcmZhY2UgYW5kIHN3aXRjaCBpbnRvIHBhcmF2aXJ0dWFsaXplZCBtb2RlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBhY3RpdmF0ZV92bWkodm9pZCkKK3sKKwlzaG9ydCBrZXJuZWxfY3M7CisJdTY0IHJlbG9jOworCWNvbnN0IHN0cnVjdCB2bWlfcmVsb2NhdGlvbl9pbmZvICpyZWwgPSAoc3RydWN0IHZtaV9yZWxvY2F0aW9uX2luZm8gKikmcmVsb2M7CisKKwlpZiAoY2FsbF92cm9tX2Z1bmModm1pX3JvbSwgdm1pX2luaXQpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJWTUkgUk9NIGZhaWxlZCB0byBpbml0aWFsaXplISIpOworCQlyZXR1cm4gMDsKKwl9CisJc2F2ZXNlZ21lbnQoY3MsIGtlcm5lbF9jcyk7CisKKwlwYXJhdmlydF9vcHMucGFyYXZpcnRfZW5hYmxlZCA9IDE7CisJcGFyYXZpcnRfb3BzLmtlcm5lbF9ycGwgPSBrZXJuZWxfY3MgJiBTRUdNRU5UX1JQTF9NQVNLOworCisJcGFyYXZpcnRfb3BzLnBhdGNoID0gdm1pX3BhdGNoOworCXBhcmF2aXJ0X29wcy5uYW1lID0gInZtaSI7CisKKwkvKgorCSAqIE1hbnkgb2YgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgQUJJIGNvbXBhdGlibGUgd2l0aCBWTUkuCisJICogVGhpcyBtZWFucyB3ZSBjYW4gZmlsbCBpbiB0aGUgcGFyYXZpcnQtb3BzIHdpdGggZGlyZWN0CisJICogcG9pbnRlcnMgaW50byB0aGUgVk1JIFJPTS4gIElmIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yCisJICogdGhlc2Ugb3BlcmF0aW9ucyBjaGFuZ2VzLCB0aGlzIGNvZGUgbmVlZHMgdG8gYmUgdXBkYXRlZC4KKwkgKgorCSAqIEV4Y2VwdGlvbnMKKwkgKiAgQ1BVSUQgcGFyYXZpcnQtb3AgdXNlcyBwb2ludGVycywgbm90IHRoZSBuYXRpdmUgSVNBCisJICogIGhhbHQgaGFzIG5vIFZNSSBlcXVpdmFsZW50OyBhbGwgVk1JIGhhbHRzIGFyZSAic2FmZSIKKwkgKiAgbm8gTVNSIHN1cHBvcnQgeWV0IC0ganVzdCB0cmFwIGFuZCBlbXVsYXRlLiAgVk1JIHVzZXMgdGhlCisJICogICAgc2FtZSBBQkkgYXMgdGhlIG5hdGl2ZSBJU0EsIGJ1dCBMaW51eCB3YW50cyBleGNlcHRpb25zCisJICogICAgZnJvbSBib2d1cyBNU1IgcmVhZCAvIHdyaXRlIGhhbmRsZWQKKwkgKiAgcmRwbWMgaXMgbm90IHlldCB1c2VkIGluIExpbnV4CisJICovCisKKwkvKiBDUFVJRCBpcyBzcGVjaWFsLCBzbyB2ZXJ5IHNwZWNpYWwgKi8KKwlyZWxvYyA9IGNhbGxfdnJvbV9sb25nX2Z1bmModm1pX3JvbSwgZ2V0X3JlbG9jLAlWTUlfQ0FMTF9DUFVJRCk7CisJaWYgKHJlbC0+dHlwZSAhPSBWTUlfUkVMT0NBVElPTl9OT05FKSB7CisJCUJVR19PTihyZWwtPnR5cGUgIT0gVk1JX1JFTE9DQVRJT05fQ0FMTF9SRUwpOworCQl2bWlfb3BzLmNwdWlkID0gKHZvaWQgKilyZWwtPmVpcDsKKwkJcGFyYXZpcnRfb3BzLmNwdWlkID0gdm1pX2NwdWlkOworCX0KKworCXBhcmFfZmlsbChjbHRzLCBDTFRTKTsKKwlwYXJhX2ZpbGwoZ2V0X2RlYnVncmVnLCBHZXREUik7CisJcGFyYV9maWxsKHNldF9kZWJ1Z3JlZywgU2V0RFIpOworCXBhcmFfZmlsbChyZWFkX2NyMCwgR2V0Q1IwKTsKKwlwYXJhX2ZpbGwocmVhZF9jcjIsIEdldENSMik7CisJcGFyYV9maWxsKHJlYWRfY3IzLCBHZXRDUjMpOworCXBhcmFfZmlsbChyZWFkX2NyNCwgR2V0Q1I0KTsKKwlwYXJhX2ZpbGwod3JpdGVfY3IwLCBTZXRDUjApOworCXBhcmFfZmlsbCh3cml0ZV9jcjIsIFNldENSMik7CisJcGFyYV9maWxsKHdyaXRlX2NyMywgU2V0Q1IzKTsKKwlwYXJhX2ZpbGwod3JpdGVfY3I0LCBTZXRDUjQpOworCXBhcmFfZmlsbChzYXZlX2ZsLCBHZXRJbnRlcnJ1cHRNYXNrKTsKKwlwYXJhX2ZpbGwocmVzdG9yZV9mbCwgU2V0SW50ZXJydXB0TWFzayk7CisJcGFyYV9maWxsKGlycV9kaXNhYmxlLCBEaXNhYmxlSW50ZXJydXB0cyk7CisJcGFyYV9maWxsKGlycV9lbmFibGUsIEVuYWJsZUludGVycnVwdHMpOworCS8qIGlycV9zYXZlX2Rpc2FibGUgISEhIHNoZWVyIHBhaW4gKi8KKwlwYXRjaF9vZmZzZXQoJmlycV9zYXZlX2Rpc2FibGVfY2FsbG91dFtJUlFfUEFUQ0hfSU5UX01BU0tdLAorCQkgICAgIChjaGFyICopcGFyYXZpcnRfb3BzLnNhdmVfZmwpOworCXBhdGNoX29mZnNldCgmaXJxX3NhdmVfZGlzYWJsZV9jYWxsb3V0W0lSUV9QQVRDSF9ESVNBQkxFXSwKKwkJICAgICAoY2hhciAqKXBhcmF2aXJ0X29wcy5pcnFfZGlzYWJsZSk7CisjaWZuZGVmIENPTkZJR19OT19JRExFX0haCisJcGFyYV9maWxsKHNhZmVfaGFsdCwgSGFsdCk7CisjZWxzZQorCXZtaV9vcHMuaGFsdCA9IHZtaV9nZXRfZnVuY3Rpb24oVk1JX0NBTExfSGFsdCk7CisJcGFyYXZpcnRfb3BzLnNhZmVfaGFsdCA9IHZtaV9zYWZlX2hhbHQ7CisjZW5kaWYKKwlwYXJhX2ZpbGwod2JpbnZkLCBXQklOVkQpOworCS8qIHBhcmF2aXJ0X29wcy5yZWFkX21zciA9IHZtaV9yZG1zciAqLworCS8qIHBhcmF2aXJ0X29wcy53cml0ZV9tc3IgPSB2bWlfd3Jtc3IgKi8KKwlwYXJhX2ZpbGwocmVhZF90c2MsIFJEVFNDKTsKKwkvKiBwYXJhdmlydF9vcHMucmRwbWMgPSB2bWlfcmRwbWMgKi8KKworCS8qIFRSIGludGVyZmFjZSBkb2Vzbid0IHBhc3MgVFIgdmFsdWUgKi8KKwlyZWxvYyA9IGNhbGxfdnJvbV9sb25nX2Z1bmModm1pX3JvbSwgZ2V0X3JlbG9jLAlWTUlfQ0FMTF9TZXRUUik7CisJaWYgKHJlbC0+dHlwZSAhPSBWTUlfUkVMT0NBVElPTl9OT05FKSB7CisJCUJVR19PTihyZWwtPnR5cGUgIT0gVk1JX1JFTE9DQVRJT05fQ0FMTF9SRUwpOworCQl2bWlfb3BzLnNldF90ciA9ICh2b2lkICopcmVsLT5laXA7CisJCXBhcmF2aXJ0X29wcy5sb2FkX3RyX2Rlc2MgPSB2bWlfc2V0X3RyOworCX0KKworCS8qIExEVCBpcyBzcGVjaWFsLCB0b28gKi8KKwlyZWxvYyA9IGNhbGxfdnJvbV9sb25nX2Z1bmModm1pX3JvbSwgZ2V0X3JlbG9jLAlWTUlfQ0FMTF9TZXRMRFQpOworCWlmIChyZWwtPnR5cGUgIT0gVk1JX1JFTE9DQVRJT05fTk9ORSkgeworCQlCVUdfT04ocmVsLT50eXBlICE9IFZNSV9SRUxPQ0FUSU9OX0NBTExfUkVMKTsKKwkJdm1pX29wcy5fc2V0X2xkdCA9ICh2b2lkICopcmVsLT5laXA7CisJCXBhcmF2aXJ0X29wcy5zZXRfbGR0ID0gdm1pX3NldF9sZHQ7CisJfQorCisJcGFyYV9maWxsKGxvYWRfZ2R0LCBTZXRHRFQpOworCXBhcmFfZmlsbChsb2FkX2lkdCwgU2V0SURUKTsKKwlwYXJhX2ZpbGwoc3RvcmVfZ2R0LCBHZXRHRFQpOworCXBhcmFfZmlsbChzdG9yZV9pZHQsIEdldElEVCk7CisJcGFyYV9maWxsKHN0b3JlX3RyLCBHZXRUUik7CisJcGFyYXZpcnRfb3BzLmxvYWRfdGxzID0gdm1pX2xvYWRfdGxzOworCXBhcmFfZmlsbCh3cml0ZV9sZHRfZW50cnksIFdyaXRlTERURW50cnkpOworCXBhcmFfZmlsbCh3cml0ZV9nZHRfZW50cnksIFdyaXRlR0RURW50cnkpOworCXBhcmFfZmlsbCh3cml0ZV9pZHRfZW50cnksIFdyaXRlSURURW50cnkpOworCXJlbG9jID0gY2FsbF92cm9tX2xvbmdfZnVuYyh2bWlfcm9tLCBnZXRfcmVsb2MsCisJCQkJICAgIFZNSV9DQUxMX1VwZGF0ZUtlcm5lbFN0YWNrKTsKKwlpZiAocmVsLT50eXBlICE9IFZNSV9SRUxPQ0FUSU9OX05PTkUpIHsKKwkJQlVHX09OKHJlbC0+dHlwZSAhPSBWTUlfUkVMT0NBVElPTl9DQUxMX1JFTCk7CisJCXZtaV9vcHMuc2V0X2tlcm5lbF9zdGFjayA9ICh2b2lkICopcmVsLT5laXA7CisJCXBhcmF2aXJ0X29wcy5sb2FkX2VzcDAgPSB2bWlfbG9hZF9lc3AwOworCX0KKworCXBhcmFfZmlsbChzZXRfaW9wbF9tYXNrLCBTZXRJT1BMTWFzayk7CisJcGFyYXZpcnRfb3BzLmlvX2RlbGF5ID0gKHZvaWQgKil2bWlfbm9wOworCWlmICghZGlzYWJsZV9ub2RlbGF5KSB7CisJCXBhcmF2aXJ0X29wcy5jb25zdF91ZGVsYXkgPSAodm9pZCAqKXZtaV9ub3A7CisJfQorCisJcGFyYV9maWxsKHNldF9sYXp5X21vZGUsIFNldExhenlNb2RlKTsKKworCXJlbG9jID0gY2FsbF92cm9tX2xvbmdfZnVuYyh2bWlfcm9tLCBnZXRfcmVsb2MsIFZNSV9DQUxMX0ZsdXNoVExCKTsKKwlpZiAocmVsLT50eXBlICE9IFZNSV9SRUxPQ0FUSU9OX05PTkUpIHsKKwkJdm1pX29wcy5mbHVzaF90bGIgPSAodm9pZCAqKXJlbC0+ZWlwOworCQlwYXJhdmlydF9vcHMuZmx1c2hfdGxiX3VzZXIgPSB2bWlfZmx1c2hfdGxiX3VzZXI7CisJCXBhcmF2aXJ0X29wcy5mbHVzaF90bGJfa2VybmVsID0gdm1pX2ZsdXNoX3RsYl9rZXJuZWw7CisJfQorCXBhcmFfZmlsbChmbHVzaF90bGJfc2luZ2xlLCBJbnZhbFBhZ2UpOworCisJLyoKKwkgKiBVbnRpbCBhIHN0YW5kYXJkIGZsYWcgZm9ybWF0IGNhbiBiZSBhZ3JlZWQgb24sIHdlIG5lZWQgdG8KKwkgKiBpbXBsZW1lbnQgdGhlc2UgYXMgd3JhcHBlcnMgaW4gTGludXguICBHZXQgdGhlIFZNSSBST00KKwkgKiBmdW5jdGlvbiBwb2ludGVycyBmb3IgdGhlIHR3byBiYWNrZW5kIGNhbGxzLgorCSAqLworI2lmZGVmIENPTkZJR19YODZfUEFFCisJdm1pX29wcy5zZXRfcHRlID0gdm1pX2dldF9mdW5jdGlvbihWTUlfQ0FMTF9TZXRQeEVMb25nKTsKKwl2bWlfb3BzLnVwZGF0ZV9wdGUgPSB2bWlfZ2V0X2Z1bmN0aW9uKFZNSV9DQUxMX1VwZGF0ZVB4RUxvbmcpOworI2Vsc2UKKwl2bWlfb3BzLnNldF9wdGUgPSB2bWlfZ2V0X2Z1bmN0aW9uKFZNSV9DQUxMX1NldFB4RSk7CisJdm1pX29wcy51cGRhdGVfcHRlID0gdm1pX2dldF9mdW5jdGlvbihWTUlfQ0FMTF9VcGRhdGVQeEUpOworI2VuZGlmCisJdm1pX29wcy5zZXRfbGluZWFyX21hcHBpbmcgPSB2bWlfZ2V0X2Z1bmN0aW9uKFZNSV9DQUxMX1NldExpbmVhck1hcHBpbmcpOworCXZtaV9vcHMuYWxsb2NhdGVfcGFnZSA9IHZtaV9nZXRfZnVuY3Rpb24oVk1JX0NBTExfQWxsb2NhdGVQYWdlKTsKKwl2bWlfb3BzLnJlbGVhc2VfcGFnZSA9IHZtaV9nZXRfZnVuY3Rpb24oVk1JX0NBTExfUmVsZWFzZVBhZ2UpOworCisJcGFyYXZpcnRfb3BzLmFsbG9jX3B0ID0gdm1pX2FsbG9jYXRlX3B0OworCXBhcmF2aXJ0X29wcy5hbGxvY19wZCA9IHZtaV9hbGxvY2F0ZV9wZDsKKwlwYXJhdmlydF9vcHMuYWxsb2NfcGRfY2xvbmUgPSB2bWlfYWxsb2NhdGVfcGRfY2xvbmU7CisJcGFyYXZpcnRfb3BzLnJlbGVhc2VfcHQgPSB2bWlfcmVsZWFzZV9wdDsKKwlwYXJhdmlydF9vcHMucmVsZWFzZV9wZCA9IHZtaV9yZWxlYXNlX3BkOworCXBhcmF2aXJ0X29wcy5zZXRfcHRlID0gdm1pX3NldF9wdGU7CisJcGFyYXZpcnRfb3BzLnNldF9wdGVfYXQgPSB2bWlfc2V0X3B0ZV9hdDsKKwlwYXJhdmlydF9vcHMuc2V0X3BtZCA9IHZtaV9zZXRfcG1kOworCXBhcmF2aXJ0X29wcy5wdGVfdXBkYXRlID0gdm1pX3VwZGF0ZV9wdGU7CisJcGFyYXZpcnRfb3BzLnB0ZV91cGRhdGVfZGVmZXIgPSB2bWlfdXBkYXRlX3B0ZV9kZWZlcjsKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorCXBhcmF2aXJ0X29wcy5zZXRfcHRlX2F0b21pYyA9IHZtaV9zZXRfcHRlX2F0b21pYzsKKwlwYXJhdmlydF9vcHMuc2V0X3B0ZV9wcmVzZW50ID0gdm1pX3NldF9wdGVfcHJlc2VudDsKKwlwYXJhdmlydF9vcHMuc2V0X3B1ZCA9IHZtaV9zZXRfcHVkOworCXBhcmF2aXJ0X29wcy5wdGVfY2xlYXIgPSB2bWlfcHRlX2NsZWFyOworCXBhcmF2aXJ0X29wcy5wbWRfY2xlYXIgPSB2bWlfcG1kX2NsZWFyOworI2VuZGlmCisJLyoKKwkgKiBUaGVzZSBNVVNUIGFsd2F5cyBiZSBwYXRjaGVkLiAgRG9uJ3Qgc3VwcG9ydCBpbmRpcmVjdCBqdW1wcworCSAqIHRocm91Z2ggdGhlc2Ugb3BlcmF0aW9ucywgYXMgdGhlIFZNSSBpbnRlcmZhY2UgbWF5IHVzZSBlaXRoZXIKKwkgKiBhIGp1bXAgb3IgYSBjYWxsIHRvIGdldCB0byB0aGVzZSBvcGVyYXRpb25zLCBkZXBlbmRpbmcgb24KKwkgKiB0aGUgYmFja2VuZC4gIFRoZXkgYXJlIHBlcmZvcm1hbmNlIGNyaXRpY2FsIGFueXdheSwgc28gcmVxdWlyaW5nCisJICogYSBwYXRjaCBpcyBub3QgYSBiaWcgcHJvYmxlbS4KKwkgKi8KKwlwYXJhdmlydF9vcHMuaXJxX2VuYWJsZV9zeXNleGl0ID0gKHZvaWQgKikweGZlZWRiYWIwOworCXBhcmF2aXJ0X29wcy5pcmV0ID0gKHZvaWQgKikweGJhZGJhYjA7CisKKyNpZmRlZiBDT05GSUdfU01QCisJcGFyYXZpcnRfb3BzLnN0YXJ0dXBfaXBpX2hvb2sgPSB2bWlfc3RhcnR1cF9pcGlfaG9vazsKKwl2bWlfb3BzLnNldF9pbml0aWFsX2FwX3N0YXRlID0gdm1pX2dldF9mdW5jdGlvbihWTUlfQ0FMTF9TZXRJbml0aWFsQVBTdGF0ZSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCXBhcmF2aXJ0X29wcy5hcGljX3JlYWQgPSB2bWlfZ2V0X2Z1bmN0aW9uKFZNSV9DQUxMX0FQSUNSZWFkKTsKKwlwYXJhdmlydF9vcHMuYXBpY193cml0ZSA9IHZtaV9nZXRfZnVuY3Rpb24oVk1JX0NBTExfQVBJQ1dyaXRlKTsKKwlwYXJhdmlydF9vcHMuYXBpY193cml0ZV9hdG9taWMgPSB2bWlfZ2V0X2Z1bmN0aW9uKFZNSV9DQUxMX0FQSUNXcml0ZSk7CisjZW5kaWYKKworCS8qCisJICogQ2hlY2sgZm9yIFZNSSB0aW1lciBmdW5jdGlvbmFsaXR5IGJ5IHByb2JpbmcgZm9yIGEgY3ljbGUgZnJlcXVlbmN5IG1ldGhvZAorCSAqLworCXJlbG9jID0gY2FsbF92cm9tX2xvbmdfZnVuYyh2bWlfcm9tLCBnZXRfcmVsb2MsIFZNSV9DQUxMX0dldEN5Y2xlRnJlcXVlbmN5KTsKKwlpZiAocmVsLT50eXBlICE9IFZNSV9SRUxPQ0FUSU9OX05PTkUpIHsKKwkJdm1pX3RpbWVyX29wcy5nZXRfY3ljbGVfZnJlcXVlbmN5ID0gKHZvaWQgKilyZWwtPmVpcDsKKwkJdm1pX3RpbWVyX29wcy5nZXRfY3ljbGVfY291bnRlciA9CisJCQl2bWlfZ2V0X2Z1bmN0aW9uKFZNSV9DQUxMX0dldEN5Y2xlQ291bnRlcik7CisJCXZtaV90aW1lcl9vcHMuZ2V0X3dhbGxjbG9jayA9CisJCQl2bWlfZ2V0X2Z1bmN0aW9uKFZNSV9DQUxMX0dldFdhbGxjbG9ja1RpbWUpOworCQl2bWlfdGltZXJfb3BzLndhbGxjbG9ja191cGRhdGVkID0KKwkJCXZtaV9nZXRfZnVuY3Rpb24oVk1JX0NBTExfV2FsbGNsb2NrVXBkYXRlZCk7CisJCXZtaV90aW1lcl9vcHMuc2V0X2FsYXJtID0gdm1pX2dldF9mdW5jdGlvbihWTUlfQ0FMTF9TZXRBbGFybSk7CisJCXZtaV90aW1lcl9vcHMuY2FuY2VsX2FsYXJtID0KKwkJCSB2bWlfZ2V0X2Z1bmN0aW9uKFZNSV9DQUxMX0NhbmNlbEFsYXJtKTsKKwkJcGFyYXZpcnRfb3BzLnRpbWVfaW5pdCA9IHZtaV90aW1lX2luaXQ7CisJCXBhcmF2aXJ0X29wcy5nZXRfd2FsbGNsb2NrID0gdm1pX2dldF93YWxsY2xvY2s7CisJCXBhcmF2aXJ0X29wcy5zZXRfd2FsbGNsb2NrID0gdm1pX3NldF93YWxsY2xvY2s7CisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJCXBhcmF2aXJ0X29wcy5zZXR1cF9ib290X2Nsb2NrID0gdm1pX3RpbWVyX3NldHVwX2Jvb3RfYWxhcm07CisJCXBhcmF2aXJ0X29wcy5zZXR1cF9zZWNvbmRhcnlfY2xvY2sgPSB2bWlfdGltZXJfc2V0dXBfc2Vjb25kYXJ5X2FsYXJtOworI2VuZGlmCisJCWN1c3RvbV9zY2hlZF9jbG9jayA9IHZtaV9zY2hlZF9jbG9jazsKKwl9CisKKwkvKgorCSAqIEFsdGVybmF0aXZlIGluc3RydWN0aW9uIHJld3JpdGluZyBkb2Vzbid0IGhhcHBlbiBzb29uIGVub3VnaAorCSAqIHRvIGNvbnZlcnQgVk1JX0lSRVQgdG8gYSBjYWxsIGluc3RlYWQgb2YgYSBqdW1wOyBzbyB3ZSBoYXZlCisJICogdG8gZG8gdGhpcyBiZWZvcmUgSVJRcyBnZXQgcmVlbmFibGVkLiAgRm9ydHVuYXRlbHksIGl0IGlzCisJICogaWRlbXBvdGVudC4KKwkgKi8KKwlhcHBseV9wYXJhdmlydChfX3N0YXJ0X3BhcmFpbnN0cnVjdGlvbnMsIF9fc3RvcF9wYXJhaW5zdHJ1Y3Rpb25zKTsKKworCXZtaV9icmluZ3VwKCk7CisKKwlyZXR1cm4gMTsKK30KKworI3VuZGVmIHBhcmFfZmlsbAorCit2b2lkIF9faW5pdCB2bWlfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXZtaV9yb20pCisJCXByb2JlX3ZtaV9yb20oKTsKKwllbHNlCisJCWNoZWNrX3ZtaV9yb20odm1pX3JvbSk7CisKKwkvKiBJbiBjYXNlIHByb2JpbmcgZm9yIG9yIHZhbGlkYXRpbmcgdGhlIFJPTSBmYWlsZWQsIGJhc2lsICovCisJaWYgKCF2bWlfcm9tKQorCQlyZXR1cm47CisKKwlyZXNlcnZlX3RvcF9hZGRyZXNzKC12bWlfcm9tLT52aXJ0dWFsX3RvcCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJYWN0aXZhdGVfdm1pKCk7CisjaWZkZWYgQ09ORklHX1NNUAorCW5vX3RpbWVyX2NoZWNrID0gMTsKKyNlbmRpZgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzICYgWDg2X0VGTEFHU19JRik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX3ZtaShjaGFyICphcmcpCit7CisJaWYgKCFhcmcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzdHJjbXAoYXJnLCAiZGlzYWJsZV9ub2RlbGF5IikpCisJCWRpc2FibGVfbm9kZWxheSA9IDE7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkaXNhYmxlX3BnZSIpKSB7CisJCWNsZWFyX2JpdChYODZfRkVBVFVSRV9QR0UsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpOworCQlkaXNhYmxlX3BnZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgImRpc2FibGVfcHNlIikpIHsKKwkJY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1BTRSwgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSk7CisJCWRpc2FibGVfcHNlID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGlzYWJsZV9zZXAiKSkgeworCQljbGVhcl9iaXQoWDg2X0ZFQVRVUkVfU0VQLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KTsKKwkJZGlzYWJsZV9zZXAgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkaXNhYmxlX3RzYyIpKSB7CisJCWNsZWFyX2JpdChYODZfRkVBVFVSRV9UU0MsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpOworCQlkaXNhYmxlX3RzYyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgImRpc2FibGVfbXRyciIpKSB7CisJCWNsZWFyX2JpdChYODZfRkVBVFVSRV9NVFJSLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KTsKKwkJZGlzYWJsZV9tdHJyID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2Vhcmx5X3BhcmFtKCJ2bWkiLCBwYXJzZV92bWkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC92bWl0aW1lLmMgYi9hcmNoL2kzODYva2VybmVsL3ZtaXRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQyYWRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92bWl0aW1lLmMKQEAgLTAsMCArMSw0OTkgQEAKKy8qCisgKiBWTUkgcGFyYXZpcnR1YWwgdGltZXIgc3VwcG9ydCByb3V0aW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIFZNd2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIFNlbmQgZmVlZGJhY2sgdG8gZGhlY2h0QHZtd2FyZS5jb20KKyAqCisgKi8KKworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgY29kZSBmcm9tIGFyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jLgorICogUG9ydGlvbnMgb2YgdGhlIENPTkZJR19OT19JRExFX0haIGNvZGUgZnJvbSBhcmNoL3MzOTAva2VybmVsL3RpbWUuYy4KKyAqIFNlZSBjb21tZW50cyB0aGVyZSBmb3IgcHJvcGVyIGNyZWRpdHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorCisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorCisjaW5jbHVkZSA8YXNtL3ZtaS5oPgorI2luY2x1ZGUgPGFzbS92bWlfdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaF90aW1lci5oPgorI2luY2x1ZGUgPGlvX3BvcnRzLmg+CisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKyNkZWZpbmUgVk1JX0FMQVJNX1dJUklORyBWTUlfQUxBUk1fV0lSRURfTFZUVAorI2Vsc2UKKyNkZWZpbmUgVk1JX0FMQVJNX1dJUklORyBWTUlfQUxBUk1fV0lSRURfSVJRMAorI2VuZGlmCisKKy8qIENhY2hlZCBWTUkgb3BlcmF0aW9ucyAqLworc3RydWN0IHZtaV90aW1lcl9vcHMgdm1pX3RpbWVyX29wczsKKworI2lmZGVmIENPTkZJR19OT19JRExFX0haCisKKy8qIC9wcm9jL3N5cy9rZXJuZWwvaHpfdGltZXIgc3RhdGUuICovCitpbnQgc3lzY3RsX2h6X3RpbWVyOworCisvKiBTb21lIHN0YXRzICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdm1pX2lkbGVfbm9faHpfaXJxcyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdm1pX2lkbGVfbm9faHpfamlmZmllcyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgaWRsZV9zdGFydF9qaWZmaWVzKTsKKworI2VuZGlmIC8qIENPTkZJR19OT19JRExFX0haICovCisKKy8qIE51bWJlciBvZiBhbGFybXMgcGVyIHNlY29uZC4gQnkgZGVmYXVsdCB0aGlzIGlzIENPTkZJR19WTUlfQUxBUk1fSFouICovCitzdGF0aWMgaW50IGFsYXJtX2h6ID0gQ09ORklHX1ZNSV9BTEFSTV9IWjsKKworLyogQ2FjaGUgb2YgdGhlIHZhbHVlIGdldF9jeWNsZV9mcmVxdWVuY3kgLyBIWi4gKi8KK3N0YXRpYyBzaWduZWQgbG9uZyBsb25nIGN5Y2xlc19wZXJfamlmZnk7CisKKy8qIENhY2hlIG9mIHRoZSB2YWx1ZSBnZXRfY3ljbGVfZnJlcXVlbmN5IC8gYWxhcm1faHouICovCitzdGF0aWMgc2lnbmVkIGxvbmcgbG9uZyBjeWNsZXNfcGVyX2FsYXJtOworCisvKiBUaGUgbnVtYmVyIG9mIGN5Y2xlcyBhY2NvdW50ZWQgZm9yIGJ5IHRoZSAnamlmZmllcycvJ3h0aW1lJyBjb3VudC4KKyAqIFByb3RlY3RlZCBieSB4dGltZV9sb2NrLiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByZWFsX2N5Y2xlc19hY2NvdW50ZWRfc3lzdGVtOworCisvKiBUaGUgbnVtYmVyIG9mIGN5Y2xlcyBhY2NvdW50ZWQgZm9yIGJ5IHVwZGF0ZV9wcm9jZXNzX3RpbWVzKCksIHBlciBjcHUuICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZyBsb25nLCBwcm9jZXNzX3RpbWVzX2N5Y2xlc19hY2NvdW50ZWRfY3B1KTsKKworLyogVGhlIG51bWJlciBvZiBzdG9sZW4gY3ljbGVzIGFjY291bnRlZCwgcGVyIGNwdS4gKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nIGxvbmcsIHN0b2xlbl9jeWNsZXNfYWNjb3VudGVkX2NwdSk7CisKKy8qIENsb2NrIHNvdXJjZS4gKi8KK3N0YXRpYyBjeWNsZV90IHJlYWRfcmVhbF9jeWNsZXModm9pZCkKK3sKKwlyZXR1cm4gdm1pX3RpbWVyX29wcy5nZXRfY3ljbGVfY291bnRlcihWTUlfQ1lDTEVTX1JFQUwpOworfQorCitzdGF0aWMgY3ljbGVfdCByZWFkX2F2YWlsYWJsZV9jeWNsZXModm9pZCkKK3sKKwlyZXR1cm4gdm1pX3RpbWVyX29wcy5nZXRfY3ljbGVfY291bnRlcihWTUlfQ1lDTEVTX0FWQUlMQUJMRSk7Cit9CisKKyNpZiAwCitzdGF0aWMgY3ljbGVfdCByZWFkX3N0b2xlbl9jeWNsZXModm9pZCkKK3sKKwlyZXR1cm4gdm1pX3RpbWVyX29wcy5nZXRfY3ljbGVfY291bnRlcihWTUlfQ1lDTEVTX1NUT0xFTik7Cit9CisjZW5kaWYgIC8qICAwICAqLworCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3ZtaSA9IHsKKwkubmFtZQkJCT0gInZtaS10aW1lciIsCisJLnJhdGluZwkJCT0gNDUwLAorCS5yZWFkCQkJPSByZWFkX3JlYWxfY3ljbGVzLAorCS5tYXNrCQkJPSBDTE9DS1NPVVJDRV9NQVNLKDY0KSwKKwkubXVsdAkJCT0gMCwgLyogdG8gYmUgc2V0ICovCisJLnNoaWZ0CQkJPSAyMiwKKwkuZmxhZ3MJCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworCisvKiBUaW1lciBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB2bWlfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHZtaV90aW1lcl9pcnEgID0geworCXZtaV90aW1lcl9pbnRlcnJ1cHQsCisJU0FfSU5URVJSVVBULAorCUNQVV9NQVNLX05PTkUsCisJIlZNSS1hbGFybSIsCisJTlVMTCwKKwlOVUxMCit9OworCisvKiBBbGFybSByYXRlICovCitzdGF0aWMgaW50IF9faW5pdCB2bWlfdGltZXJfYWxhcm1fcmF0ZV9zZXR1cChjaGFyKiBzdHIpCit7CisJaW50IGFsYXJtX3JhdGU7CisJaWYgKGdldF9vcHRpb24oJnN0ciwgJmFsYXJtX3JhdGUpID09IDEgJiYgYWxhcm1fcmF0ZSA+IDApIHsKKwkJYWxhcm1faHogPSBhbGFybV9yYXRlOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJWTUkgdGltZXIgYWxhcm0gSFogc2V0IHRvICVkXG4iLCBhbGFybV9oeik7CisJfQorCXJldHVybiAxOworfQorX19zZXR1cCgidm1pX3RpbWVyX2FsYXJtX2h6PSIsIHZtaV90aW1lcl9hbGFybV9yYXRlX3NldHVwKTsKKworCisvKiBJbml0aWFsaXphdGlvbiAqLworc3RhdGljIHZvaWQgdm1pX2dldF93YWxsY2xvY2tfdHMoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgd2FsbGNsb2NrOworCXdhbGxjbG9jayA9IHZtaV90aW1lcl9vcHMuZ2V0X3dhbGxjbG9jaygpOyAvLyBuc2VjIHVuaXRzCisJdHMtPnR2X25zZWMgPSBkb19kaXYod2FsbGNsb2NrLCAxMDAwMDAwMDAwKTsKKwl0cy0+dHZfc2VjID0gd2FsbGNsb2NrOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfeHRpbWVfZnJvbV93YWxsY2xvY2sodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJdm1pX2dldF93YWxsY2xvY2tfdHMoJnRzKTsKKwlkb19zZXR0aW1lb2ZkYXkoJnRzKTsKK30KKwordW5zaWduZWQgbG9uZyB2bWlfZ2V0X3dhbGxjbG9jayh2b2lkKQoreworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwl2bWlfZ2V0X3dhbGxjbG9ja190cygmdHMpOworCXJldHVybiB0cy50dl9zZWM7Cit9CisKK2ludCB2bWlfc2V0X3dhbGxjbG9jayh1bnNpZ25lZCBsb25nIG5vdykKK3sKKwlyZXR1cm4gLTE7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyB2bWlfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gcmVhZF9hdmFpbGFibGVfY3ljbGVzKCk7Cit9CisKK3ZvaWQgX19pbml0IHZtaV90aW1lX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Blcl9zZWMsIGN5Y2xlc19wZXJfbXNlYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXNldHVwX2lycSgwLCAmdm1pX3RpbWVyX2lycSk7CisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJc2V0X2ludHJfZ2F0ZShMT0NBTF9USU1FUl9WRUNUT1IsIGFwaWNfdm1pX3RpbWVyX2ludGVycnVwdCk7CisjZW5kaWYKKworCW5vX3N5bmNfY21vc19jbG9jayA9IDE7CisKKwl2bWlfZ2V0X3dhbGxjbG9ja190cygmeHRpbWUpOworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKKwkJLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOworCisJcmVhbF9jeWNsZXNfYWNjb3VudGVkX3N5c3RlbSA9IHJlYWRfcmVhbF9jeWNsZXMoKTsKKwl1cGRhdGVfeHRpbWVfZnJvbV93YWxsY2xvY2soKTsKKwlwZXJfY3B1KHByb2Nlc3NfdGltZXNfY3ljbGVzX2FjY291bnRlZF9jcHUsIDApID0gcmVhZF9hdmFpbGFibGVfY3ljbGVzKCk7CisKKwljeWNsZXNfcGVyX3NlYyA9IHZtaV90aW1lcl9vcHMuZ2V0X2N5Y2xlX2ZyZXF1ZW5jeSgpOworCisJY3ljbGVzX3Blcl9qaWZmeSA9IGN5Y2xlc19wZXJfc2VjOworCSh2b2lkKWRvX2RpdihjeWNsZXNfcGVyX2ppZmZ5LCBIWik7CisJY3ljbGVzX3Blcl9hbGFybSA9IGN5Y2xlc19wZXJfc2VjOworCSh2b2lkKWRvX2RpdihjeWNsZXNfcGVyX2FsYXJtLCBhbGFybV9oeik7CisJY3ljbGVzX3Blcl9tc2VjID0gY3ljbGVzX3Blcl9zZWM7CisJKHZvaWQpZG9fZGl2KGN5Y2xlc19wZXJfbXNlYywgMTAwMCk7CisJY3B1X2toeiA9IGN5Y2xlc19wZXJfbXNlYzsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIlZNSSB0aW1lciBjeWNsZXMvc2VjID0gJWxsdSA7IGN5Y2xlcy9qaWZmeSA9ICVsbHUgOyIKKwkgICAgICAgImN5Y2xlcy9hbGFybSA9ICVsbHVcbiIsIGN5Y2xlc19wZXJfc2VjLCBjeWNsZXNfcGVyX2ppZmZ5LAorCSAgICAgICBjeWNsZXNfcGVyX2FsYXJtKTsKKworCWNsb2Nrc291cmNlX3ZtaS5tdWx0ID0gY2xvY2tzb3VyY2Vfa2h6Mm11bHQoY3ljbGVzX3Blcl9tc2VjLAorCQkJCQkJICAgIGNsb2Nrc291cmNlX3ZtaS5zaGlmdCk7CisJaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV92bWkpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJFcnJvciByZWdpc3RlcmluZyBWTUlUSU1FIGNsb2Nrc291cmNlLiIpOworCisJLyogRGlzYWJsZSBQSVQuICovCisJb3V0Yl9wKDB4M2EsIFBJVF9NT0RFKTsgLyogYmluYXJ5LCBtb2RlIDUsIExTQi9NU0IsIGNoIDAgKi8KKworCS8qIHNjaGVkdWxlIHRoZSBhbGFybS4gZG8gdGhpcyBpbiBwaGFzZSB3aXRoIHByb2Nlc3NfdGltZXNfY3ljbGVzX2FjY291bnRlZF9jcHUKKwkgKiByZWR1Y2UgdGhlIGxhdGVuY3kgY2FsbGluZyB1cGRhdGVfcHJvY2Vzc190aW1lcy4gKi8KKwl2bWlfdGltZXJfb3BzLnNldF9hbGFybSgKKwkJICAgICAgVk1JX0FMQVJNX1dJUkVEX0lSUTAgfCBWTUlfQUxBUk1fSVNfUEVSSU9ESUMgfCBWTUlfQ1lDTEVTX0FWQUlMQUJMRSwKKwkJICAgICAgcGVyX2NwdShwcm9jZXNzX3RpbWVzX2N5Y2xlc19hY2NvdW50ZWRfY3B1LCAwKSArIGN5Y2xlc19wZXJfYWxhcm0sCisJCSAgICAgIGN5Y2xlc19wZXJfYWxhcm0pOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisKK3ZvaWQgX19pbml0IHZtaV90aW1lcl9zZXR1cF9ib290X2FsYXJtKHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCS8qIFJvdXRlIHRoZSBpbnRlcnJ1cHQgdG8gdGhlIGNvcnJlY3QgdmVjdG9yLiAqLworCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUVCwgTE9DQUxfVElNRVJfVkVDVE9SKTsKKworCS8qIENhbmNlbCB0aGUgSVJRMCB3aXJlZCBhbGFybSwgYW5kIHNldHVwIHRoZSBMVlRUIGFsYXJtLiAqLworCXZtaV90aW1lcl9vcHMuY2FuY2VsX2FsYXJtKFZNSV9DWUNMRVNfQVZBSUxBQkxFKTsKKwl2bWlfdGltZXJfb3BzLnNldF9hbGFybSgKKwkJICAgICAgVk1JX0FMQVJNX1dJUkVEX0xWVFQgfCBWTUlfQUxBUk1fSVNfUEVSSU9ESUMgfCBWTUlfQ1lDTEVTX0FWQUlMQUJMRSwKKwkJICAgICAgcGVyX2NwdShwcm9jZXNzX3RpbWVzX2N5Y2xlc19hY2NvdW50ZWRfY3B1LCAwKSArIGN5Y2xlc19wZXJfYWxhcm0sCisJCSAgICAgIGN5Y2xlc19wZXJfYWxhcm0pOworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgdGltZSBhY2NvdW50aW5nIHZhcmlhYmxlcyBmb3IgYW4gQVAgb24gYW4gU01QIHN5c3RlbS4KKyAqIEFsc28sIHNldCB0aGUgbG9jYWwgYWxhcm0gZm9yIHRoZSBBUC4gKi8KK3ZvaWQgX19pbml0IHZtaV90aW1lcl9zZXR1cF9zZWNvbmRhcnlfYWxhcm0odm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyogUm91dGUgdGhlIGludGVycnVwdCB0byB0aGUgY29ycmVjdCB2ZWN0b3IuICovCisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRULCBMT0NBTF9USU1FUl9WRUNUT1IpOworCisJcGVyX2NwdShwcm9jZXNzX3RpbWVzX2N5Y2xlc19hY2NvdW50ZWRfY3B1LCBjcHUpID0gcmVhZF9hdmFpbGFibGVfY3ljbGVzKCk7CisKKwl2bWlfdGltZXJfb3BzLnNldF9hbGFybSgKKwkJICAgICAgVk1JX0FMQVJNX1dJUkVEX0xWVFQgfCBWTUlfQUxBUk1fSVNfUEVSSU9ESUMgfCBWTUlfQ1lDTEVTX0FWQUlMQUJMRSwKKwkJICAgICAgcGVyX2NwdShwcm9jZXNzX3RpbWVzX2N5Y2xlc19hY2NvdW50ZWRfY3B1LCBjcHUpICsgY3ljbGVzX3Blcl9hbGFybSwKKwkJICAgICAgY3ljbGVzX3Blcl9hbGFybSk7Cit9CisKKyNlbmRpZgorCisvKiBVcGRhdGUgc3lzdGVtIHdpZGUgKHJlYWwpIHRpbWUgYWNjb3VudGluZyAoZS5nLiBqaWZmaWVzLCB4dGltZSkuICovCitzdGF0aWMgdm9pZCB2bWlfYWNjb3VudF9yZWFsX2N5Y2xlcyh1bnNpZ25lZCBsb25nIGxvbmcgY3VyX3JlYWxfY3ljbGVzKQoreworCWxvbmcgbG9uZyBjeWNsZXNfbm90X2FjY291bnRlZDsKKworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCisJY3ljbGVzX25vdF9hY2NvdW50ZWQgPSBjdXJfcmVhbF9jeWNsZXMgLSByZWFsX2N5Y2xlc19hY2NvdW50ZWRfc3lzdGVtOworCXdoaWxlIChjeWNsZXNfbm90X2FjY291bnRlZCA+PSBjeWNsZXNfcGVyX2ppZmZ5KSB7CisJCS8qIHN5c3RlbXMgd2lkZSBqaWZmaWVzIGFuZCB3YWxsY2xvY2suICovCisJCWRvX3RpbWVyKDEpOworCisJCWN5Y2xlc19ub3RfYWNjb3VudGVkIC09IGN5Y2xlc19wZXJfamlmZnk7CisJCXJlYWxfY3ljbGVzX2FjY291bnRlZF9zeXN0ZW0gKz0gY3ljbGVzX3Blcl9qaWZmeTsKKwl9CisKKwlpZiAodm1pX3RpbWVyX29wcy53YWxsY2xvY2tfdXBkYXRlZCgpKQorCQl1cGRhdGVfeHRpbWVfZnJvbV93YWxsY2xvY2soKTsKKworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7Cit9CisKKy8qIFVwZGF0ZSBwZXItY3B1IHByb2Nlc3MgdGltZXMuICovCitzdGF0aWMgdm9pZCB2bWlfYWNjb3VudF9wcm9jZXNzX3RpbWVzX2N5Y2xlcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNwdSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY3VyX3Byb2Nlc3NfdGltZXNfY3ljbGVzKQoreworCWxvbmcgbG9uZyBjeWNsZXNfbm90X2FjY291bnRlZDsKKwljeWNsZXNfbm90X2FjY291bnRlZCA9IGN1cl9wcm9jZXNzX3RpbWVzX2N5Y2xlcyAtCisJCXBlcl9jcHUocHJvY2Vzc190aW1lc19jeWNsZXNfYWNjb3VudGVkX2NwdSwgY3B1KTsKKworCXdoaWxlIChjeWNsZXNfbm90X2FjY291bnRlZCA+PSBjeWNsZXNfcGVyX2ppZmZ5KSB7CisJCS8qIEFjY291bnQgdGltZSB0byB0aGUgY3VycmVudCBwcm9jZXNzLiAgVGhpcyBpbmNsdWRlcworCQkgKiBjYWxsaW5nIGludG8gdGhlIHNjaGVkdWxlciB0byBkZWNyZW1lbnQgdGhlIHRpbWVzbGljZQorCQkgKiBhbmQgcG9zc2libHkgcmVzY2hlZHVsZS4qLworCQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOworCQkvKiBYWFggaGFuZGxlIC9wcm9jL3Byb2ZpbGUgbXVsdGlwbGllci4gICovCisJCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKKworCQljeWNsZXNfbm90X2FjY291bnRlZCAtPSBjeWNsZXNfcGVyX2ppZmZ5OworCQlwZXJfY3B1KHByb2Nlc3NfdGltZXNfY3ljbGVzX2FjY291bnRlZF9jcHUsIGNwdSkgKz0gY3ljbGVzX3Blcl9qaWZmeTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgorLyogVXBkYXRlIHBlci1jcHUgaWRsZSB0aW1lcy4gIFVzZWQgd2hlbiBhIG5vLWh6IGhhbHQgaXMgZW5kZWQuICovCitzdGF0aWMgdm9pZCB2bWlfYWNjb3VudF9ub19oel9pZGxlX2N5Y2xlcyhpbnQgY3B1LAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJfcHJvY2Vzc190aW1lc19jeWNsZXMpCit7CisJbG9uZyBsb25nIGN5Y2xlc19ub3RfYWNjb3VudGVkOworCXVuc2lnbmVkIGxvbmcgbm9faWRsZV9oel9qaWZmaWVzID0gMDsKKworCWN5Y2xlc19ub3RfYWNjb3VudGVkID0gY3VyX3Byb2Nlc3NfdGltZXNfY3ljbGVzIC0KKwkJcGVyX2NwdShwcm9jZXNzX3RpbWVzX2N5Y2xlc19hY2NvdW50ZWRfY3B1LCBjcHUpOworCisJd2hpbGUgKGN5Y2xlc19ub3RfYWNjb3VudGVkID49IGN5Y2xlc19wZXJfamlmZnkpIHsKKwkJbm9faWRsZV9oel9qaWZmaWVzKys7CisJCWN5Y2xlc19ub3RfYWNjb3VudGVkIC09IGN5Y2xlc19wZXJfamlmZnk7CisJCXBlcl9jcHUocHJvY2Vzc190aW1lc19jeWNsZXNfYWNjb3VudGVkX2NwdSwgY3B1KSArPSBjeWNsZXNfcGVyX2ppZmZ5OworCX0KKwkvKiBBY2NvdW50IHRpbWUgdG8gdGhlIGlkbGUgcHJvY2Vzcy4gKi8KKwlhY2NvdW50X3N0ZWFsX3RpbWUoaWRsZV90YXNrKGNwdSksIGppZmZpZXNfdG9fY3B1dGltZShub19pZGxlX2h6X2ppZmZpZXMpKTsKK30KKyNlbmRpZgorCisvKiBVcGRhdGUgcGVyLWNwdSBzdG9sZW4gdGltZS4gKi8KK3N0YXRpYyB2b2lkIHZtaV9hY2NvdW50X3N0b2xlbl9jeWNsZXMoaW50IGNwdSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY3VyX3JlYWxfY3ljbGVzLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJfYXZhaWxfY3ljbGVzKQoreworCWxvbmcgbG9uZyBzdG9sZW5fY3ljbGVzX25vdF9hY2NvdW50ZWQ7CisJdW5zaWduZWQgbG9uZyBzdG9sZW5famlmZmllcyA9IDA7CisKKwlpZiAoY3VyX3JlYWxfY3ljbGVzIDwgY3VyX2F2YWlsX2N5Y2xlcykKKwkJcmV0dXJuOworCisJc3RvbGVuX2N5Y2xlc19ub3RfYWNjb3VudGVkID0gY3VyX3JlYWxfY3ljbGVzIC0gY3VyX2F2YWlsX2N5Y2xlcyAtCisJCXBlcl9jcHUoc3RvbGVuX2N5Y2xlc19hY2NvdW50ZWRfY3B1LCBjcHUpOworCisJd2hpbGUgKHN0b2xlbl9jeWNsZXNfbm90X2FjY291bnRlZCA+PSBjeWNsZXNfcGVyX2ppZmZ5KSB7CisJCXN0b2xlbl9qaWZmaWVzKys7CisJCXN0b2xlbl9jeWNsZXNfbm90X2FjY291bnRlZCAtPSBjeWNsZXNfcGVyX2ppZmZ5OworCQlwZXJfY3B1KHN0b2xlbl9jeWNsZXNfYWNjb3VudGVkX2NwdSwgY3B1KSArPSBjeWNsZXNfcGVyX2ppZmZ5OworCX0KKwkvKiBIQUNLOiBwYXNzIE5VTEwgdG8gZm9yY2UgdGltZSBvbnRvIGNwdXN0YXQtPnN0ZWFsLiAqLworCWFjY291bnRfc3RlYWxfdGltZShOVUxMLCBqaWZmaWVzX3RvX2NwdXRpbWUoc3RvbGVuX2ppZmZpZXMpKTsKK30KKworLyogQm9keSBvZiBlaXRoZXIgSVJRMCBpbnRlcnJ1cHQgaGFuZGxlciAoVVAgbm8gbG9jYWwtQVBJQykgb3IKKyAqIGxvY2FsLUFQSUMgTFZUVCBpbnRlcnJ1cHQgaGFuZGxlciAoVVAgJiBsb2NhbC1BUElDIG9yIFNNUCkuICovCitzdGF0aWMgdm9pZCB2bWlfbG9jYWxfdGltZXJfaW50ZXJydXB0KGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGN1cl9yZWFsX2N5Y2xlcywgY3VyX3Byb2Nlc3NfdGltZXNfY3ljbGVzOworCisJY3VyX3JlYWxfY3ljbGVzID0gcmVhZF9yZWFsX2N5Y2xlcygpOworCWN1cl9wcm9jZXNzX3RpbWVzX2N5Y2xlcyA9IHJlYWRfYXZhaWxhYmxlX2N5Y2xlcygpOworCS8qIFVwZGF0ZSBzeXN0ZW0gd2lkZSAocmVhbCkgdGltZSBzdGF0ZSAoeHRpbWUsIGppZmZpZXMpLiAqLworCXZtaV9hY2NvdW50X3JlYWxfY3ljbGVzKGN1cl9yZWFsX2N5Y2xlcyk7CisJLyogVXBkYXRlIHBlci1jcHUgcHJvY2VzcyB0aW1lcy4gKi8KKwl2bWlfYWNjb3VudF9wcm9jZXNzX3RpbWVzX2N5Y2xlcyhnZXRfaXJxX3JlZ3MoKSwgY3B1LCBjdXJfcHJvY2Vzc190aW1lc19jeWNsZXMpOworICAgICAgICAvKiBVcGRhdGUgdGltZSBzdG9sZW4gZnJvbSB0aGlzIGNwdSBieSB0aGUgaHlwZXJ2aXNvci4gKi8KKwl2bWlfYWNjb3VudF9zdG9sZW5fY3ljbGVzKGNwdSwgY3VyX3JlYWxfY3ljbGVzLCBjdXJfcHJvY2Vzc190aW1lc19jeWNsZXMpOworfQorCisjaWZkZWYgQ09ORklHX05PX0lETEVfSFoKKworLyogTXVzdCBiZSBjYWxsZWQgb25seSBmcm9tIGlkbGUgbG9vcCwgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAqLworaW50IHZtaV9zdG9wX2h6X3RpbWVyKHZvaWQpCit7CisJLyogTm90ZSB0aGF0IGNwdV9zZXQsIGNwdV9jbGVhciBhcmUgKFNNUCBzYWZlKSBhdG9taWMgb24geDg2LiAqLworCisJdW5zaWduZWQgbG9uZyBzZXEsIG5leHQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHJlYWxfY3ljbGVzX2V4cGlyeTsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBpZGxlOworCisJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCWlmIChzeXNjdGxfaHpfdGltZXIgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwljcHVfc2V0KGNwdSwgbm9oel9jcHVfbWFzayk7CisJc21wX21iKCk7CisJaWYgKHJjdV9uZWVkc19jcHUoY3B1KSB8fCBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSB8fAorCSAgICAobmV4dCA9IG5leHRfdGltZXJfaW50ZXJydXB0KCksIHRpbWVfYmVmb3JlX2VxKG5leHQsIGppZmZpZXMpKSkgeworCQljcHVfY2xlYXIoY3B1LCBub2h6X2NwdV9tYXNrKTsKKwkJbmV4dCA9IGppZmZpZXM7CisJCWlkbGUgPSAwOworCX0gZWxzZQorCQlpZGxlID0gMTsKKworCS8qIENvbnZlcnQgamlmZmllcyB0byB0aGUgcmVhbCBjeWNsZSBjb3VudGVyLiAqLworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CisJCXJlYWxfY3ljbGVzX2V4cGlyeSA9IHJlYWxfY3ljbGVzX2FjY291bnRlZF9zeXN0ZW0gKworCQkJKGxvbmcpKG5leHQgLSBqaWZmaWVzKSAqIGN5Y2xlc19wZXJfamlmZnk7CisJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CisKKwkvKiBUaGlzIGNwdSBpcyBnb2luZyBpZGxlLiBEaXNhYmxlIHRoZSBwZXJpb2RpYyBhbGFybS4gKi8KKwlpZiAoaWRsZSkgeworCQl2bWlfdGltZXJfb3BzLmNhbmNlbF9hbGFybShWTUlfQ1lDTEVTX0FWQUlMQUJMRSk7CisJCXBlcl9jcHUoaWRsZV9zdGFydF9qaWZmaWVzLCBjcHUpID0gamlmZmllczsKKwl9CisKKwkvKiBTZXQgdGhlIHJlYWwgdGltZSBhbGFybSB0byBleHBpcmUgYXQgdGhlIG5leHQgZXZlbnQuICovCisJdm1pX3RpbWVyX29wcy5zZXRfYWxhcm0oCisJCSAgICAgIFZNSV9BTEFSTV9XSVJJTkcgfCBWTUlfQUxBUk1fSVNfT05FU0hPVCB8IFZNSV9DWUNMRVNfUkVBTCwKKwkJICAgICAgcmVhbF9jeWNsZXNfZXhwaXJ5LCAwKTsKKworCXJldHVybiBpZGxlOworfQorCitzdGF0aWMgdm9pZCB2bWlfcmVlbmFibGVfaHpfdGltZXIoaW50IGNwdSkKK3sKKwkvKiBGb3IgL3Byb2Mvdm1pL2luZm8gaWRsZV9oeiBzdGF0LiAqLworCXBlcl9jcHUodm1pX2lkbGVfbm9faHpfamlmZmllcywgY3B1KSArPSBqaWZmaWVzIC0gcGVyX2NwdShpZGxlX3N0YXJ0X2ppZmZpZXMsIGNwdSk7CisJcGVyX2NwdSh2bWlfaWRsZV9ub19oel9pcnFzLCBjcHUpKys7CisKKwkvKiBEb24ndCBib3RoZXIgZXhwbGljaXRseSBjYW5jZWxsaW5nIHRoZSBvbmUtc2hvdCBhbGFybSAtLSBhdAorCSAqIHdvcnNlIHdlIHdpbGwgcmVjZWl2ZSBhIHNwdXJpb3VzIHRpbWVyIGludGVycnVwdC4gKi8KKwl2bWlfdGltZXJfb3BzLnNldF9hbGFybSgKKwkJICAgICAgVk1JX0FMQVJNX1dJUklORyB8IFZNSV9BTEFSTV9JU19QRVJJT0RJQyB8IFZNSV9DWUNMRVNfQVZBSUxBQkxFLAorCQkgICAgICBwZXJfY3B1KHByb2Nlc3NfdGltZXNfY3ljbGVzX2FjY291bnRlZF9jcHUsIGNwdSkgKyBjeWNsZXNfcGVyX2FsYXJtLAorCQkgICAgICBjeWNsZXNfcGVyX2FsYXJtKTsKKwkvKiBJbmRpY2F0ZSB0aGlzIGNwdSBpcyBubyBsb25nZXIgbm9oeiBpZGxlLiAqLworCWNwdV9jbGVhcihjcHUsIG5vaHpfY3B1X21hc2spOworfQorCisvKiBDYWxsZWQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlcnMgd2hlbiAobG9jYWwpIEhaIHRpbWVyIGlzIGRpc2FibGVkLiAqLwordm9pZCB2bWlfYWNjb3VudF90aW1lX3Jlc3RhcnRfaHpfdGltZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgY3VyX3JlYWxfY3ljbGVzLCBjdXJfcHJvY2Vzc190aW1lc19jeWNsZXM7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKwkvKiBBY2NvdW50IHRoZSB0aW1lIGR1cmluZyB3aGljaCB0aGUgSFogdGltZXIgd2FzIGRpc2FibGVkLiAqLworCWN1cl9yZWFsX2N5Y2xlcyA9IHJlYWRfcmVhbF9jeWNsZXMoKTsKKwljdXJfcHJvY2Vzc190aW1lc19jeWNsZXMgPSByZWFkX2F2YWlsYWJsZV9jeWNsZXMoKTsKKwkvKiBVcGRhdGUgc3lzdGVtIHdpZGUgKHJlYWwpIHRpbWUgc3RhdGUgKHh0aW1lLCBqaWZmaWVzKS4gKi8KKwl2bWlfYWNjb3VudF9yZWFsX2N5Y2xlcyhjdXJfcmVhbF9jeWNsZXMpOworCS8qIFVwZGF0ZSBwZXItY3B1IGlkbGUgdGltZXMuICovCisJdm1pX2FjY291bnRfbm9faHpfaWRsZV9jeWNsZXMoY3B1LCBjdXJfcHJvY2Vzc190aW1lc19jeWNsZXMpOworICAgICAgICAvKiBVcGRhdGUgdGltZSBzdG9sZW4gZnJvbSB0aGlzIGNwdSBieSB0aGUgaHlwZXJ2aXNvci4gKi8KKwl2bWlfYWNjb3VudF9zdG9sZW5fY3ljbGVzKGNwdSwgY3VyX3JlYWxfY3ljbGVzLCBjdXJfcHJvY2Vzc190aW1lc19jeWNsZXMpOworCS8qIFJlZW5hYmxlIHRoZSBoeiB0aW1lci4gKi8KKwl2bWlfcmVlbmFibGVfaHpfdGltZXIoY3B1KTsKK30KKworI2VuZGlmIC8qIENPTkZJR19OT19JRExFX0haICovCisKKy8qIFVQIChhbmQgbm8gbG9jYWwtQVBJQykgVk1JLXRpbWVyIGFsYXJtIGludGVycnVwdCBoYW5kbGVyLgorICogSGFuZGxlciBmb3IgSVJRMC4gTm90IHVzZWQgd2hlbiBTTVAgb3IgWDg2X0xPQ0FMX0FQSUMgYWZ0ZXIKKyAqIEFQSUMgc2V0dXAgYW5kIHNldHVwX2Jvb3Rfdm1pX2FsYXJtKCkgaXMgY2FsbGVkLiAgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB2bWlfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl2bWlfbG9jYWxfdGltZXJfaW50ZXJydXB0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisKKy8qIFNNUCBWTUktdGltZXIgYWxhcm0gaW50ZXJydXB0IGhhbmRsZXIuIEhhbmRsZXIgZm9yIExWVFQgdmVjdG9yLgorICogQWxzbyB1c2VkIGluIFVQIHdoZW4gQ09ORklHX1g4Nl9MT0NBTF9BUElDLgorICogVGhlIHdyYXBwZXIgY29kZSBpcyBmcm9tIGFyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jI3NtcF9hcGljX3RpbWVyX2ludGVycnVwdC4gKi8KK3ZvaWQgc21wX2FwaWNfdm1pX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogdGhlIE5NSSBkZWFkbG9jay1kZXRlY3RvciB1c2VzIHRoaXMuCisJICovCisgICAgICAgIHBlcl9jcHUoaXJxX3N0YXQsY3B1KS5hcGljX3RpbWVyX2lycXMrKzsKKworCS8qCisJICogTk9URSEgV2UnZCBiZXR0ZXIgQUNLIHRoZSBpcnEgaW1tZWRpYXRlbHksCisJICogYmVjYXVzZSB0aW1lciBoYW5kbGluZyBjYW4gYmUgc2xvdy4KKwkgKi8KKwlhY2tfQVBJQ19pcnEoKTsKKworCS8qCisJICogdXBkYXRlX3Byb2Nlc3NfdGltZXMoKSBleHBlY3RzIHVzIHRvIGhhdmUgZG9uZSBpcnFfZW50ZXIoKS4KKwkgKiBCZXNpZGVzLCBpZiB3ZSBkb24ndCB0aW1lciBpbnRlcnJ1cHRzIGlnbm9yZSB0aGUgZ2xvYmFsCisJICogaW50ZXJydXB0IGxvY2ssIHdoaWNoIGlzIHRoZSBXcm9uZ1RoaW5nICh0bSkgdG8gZG8uCisJICovCisJaXJxX2VudGVyKCk7CisJdm1pX2xvY2FsX3RpbWVyX2ludGVycnVwdChjcHUpOworCWlycV9leGl0KCk7CisJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKK30KKworI2VuZGlmICAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA1MDM4YTczLi5jYTUxNjEwOSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMzcsOSArMzcsMTQgQEAKIHsKICAgLiA9IExPQURfT0ZGU0VUICsgTE9BRF9QSFlTSUNBTF9BRERSOwogICBwaHlzX3N0YXJ0dXBfMzIgPSBzdGFydHVwXzMyIC0gTE9BRF9PRkZTRVQ7CisKKyAgLnRleHQuaGVhZCA6IEFUKEFERFIoLnRleHQuaGVhZCkgLSBMT0FEX09GRlNFVCkgeworICAJX3RleHQgPSAuOwkJCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCisJKigudGV4dC5oZWFkKQorICB9IDp0ZXh0ID0gMHg5MDkwCisKICAgLyogcmVhZC1vbmx5ICovCiAgIC50ZXh0IDogQVQoQUREUigudGV4dCkgLSBMT0FEX09GRlNFVCkgewotICAJX3RleHQgPSAuOwkJCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCiAJKigudGV4dCkKIAlTQ0hFRF9URVhUCiAJTE9DS19URVhUCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC1kZWZhdWx0L3NldHVwLmMgYi9hcmNoL2kzODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKaW5kZXggY2MyZjUxOS4uYzc4ODE2MiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtZGVmYXVsdC9zZXR1cC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvc2V0dXAuYwpAQCAtNzksNyArNzksMTIgQEAKIHsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7IHRpbWVyX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgQ1BVX01BU0tfTk9ORSwgInRpbWVyIiwgTlVMTCwgTlVMTH07CitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKKwkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORywKKwkubWFzayA9IENQVV9NQVNLX05PTkUsCisJLm5hbWUgPSAidGltZXIiCit9OwogCiAvKioKICAqIHRpbWVfaW5pdF9ob29rIC0gZG8gYW55IHNwZWNpZmljIGluaXRpYWxpc2F0aW9ucyBmb3IgdGhlIHN5c3RlbSB0aW1lci4KQEAgLTkwLDYgKzk1LDcgQEAKICAqKi8KIHZvaWQgX19pbml0IHRpbWVfaW5pdF9ob29rKHZvaWQpCiB7CisJaXJxMC5tYXNrID0gY3B1bWFza19vZl9jcHUoMCk7CiAJc2V0dXBfaXJxKDAsICZpcnEwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hdGgtZW11L2dldF9hZGRyZXNzLmMgYi9hcmNoL2kzODYvbWF0aC1lbXUvZ2V0X2FkZHJlc3MuYwppbmRleCA5ODE5YjcwLi4yZTJjNTFhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWF0aC1lbXUvZ2V0X2FkZHJlc3MuYworKysgYi9hcmNoL2kzODYvbWF0aC1lbXUvZ2V0X2FkZHJlc3MuYwpAQCAtNTYsMTUgKzU2LDE0IEBACiAjZGVmaW5lIFZNODZfUkVHXyh4KSAoKih1bnNpZ25lZCBzaG9ydCAqKSBcCiAJCSAgICAgIChyZWdfb2Zmc2V0X3ZtODZbKCh1bnNpZ25lZCl4KV0rKHVfY2hhciAqKSBGUFVfaW5mbykpCiAKLS8qIFRoZXNlIGFyZSBkdW1teSwgZnMgYW5kIGdzIGFyZSBub3Qgc2F2ZWQgb24gdGhlIHN0YWNrLiAqLwotI2RlZmluZSBfX19GUyBfX19kcworLyogVGhpcyBkdW1teSwgZ3MgaXMgbm90IHNhdmVkIG9uIHRoZSBzdGFjay4gKi8KICNkZWZpbmUgX19fR1MgX19fZHMKIAogc3RhdGljIGludCByZWdfb2Zmc2V0X3BtW10gPSB7CiAJb2Zmc2V0b2Yoc3RydWN0IGluZm8sX19fY3MpLAogCW9mZnNldG9mKHN0cnVjdCBpbmZvLF9fX2RzKSwKIAlvZmZzZXRvZihzdHJ1Y3QgaW5mbyxfX19lcyksCi0Jb2Zmc2V0b2Yoc3RydWN0IGluZm8sX19fRlMpLAorCW9mZnNldG9mKHN0cnVjdCBpbmZvLF9fX2ZzKSwKIAlvZmZzZXRvZihzdHJ1Y3QgaW5mbyxfX19HUyksCiAJb2Zmc2V0b2Yoc3RydWN0IGluZm8sX19fc3MpLAogCW9mZnNldG9mKHN0cnVjdCBpbmZvLF9fX2RzKQpAQCAtMTY5LDEzICsxNjgsMTAgQEAKIAogICBzd2l0Y2ggKCBzZWdtZW50ICkKICAgICB7Ci0gICAgICAvKiBmcyBhbmQgZ3MgYXJlbid0IHVzZWQgYnkgdGhlIGtlcm5lbCwgc28gdGhleSBzdGlsbCBoYXZlIHRoZWlyCi0JIHVzZXItc3BhY2UgdmFsdWVzLiAqLwotICAgIGNhc2UgUFJFRklYX0ZTXy0xOgotICAgICAgLyogTi5CLiAtIG1vdmwgJXNlZywgbWVtIGlzIGEgMiBieXRlIHdyaXRlIHJlZ2FyZGxlc3Mgb2YgcHJlZml4ICovCi0gICAgICBzYXZlc2VnbWVudChmcywgYWRkci0+c2VsZWN0b3IpOwotICAgICAgYnJlYWs7CisgICAgICAvKiBncyBpc24ndCB1c2VkIGJ5IHRoZSBrZXJuZWwsIHNvIGl0IHN0aWxsIGhhcyBpdHMKKwkgdXNlci1zcGFjZSB2YWx1ZS4gKi8KICAgICBjYXNlIFBSRUZJWF9HU18tMToKKyAgICAgIC8qIE4uQi4gLSBtb3ZsICVzZWcsIG1lbSBpcyBhIDIgYnl0ZSB3cml0ZSByZWdhcmRsZXNzIG9mIHByZWZpeCAqLwogICAgICAgc2F2ZXNlZ21lbnQoZ3MsIGFkZHItPnNlbGVjdG9yKTsKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWF0aC1lbXUvc3RhdHVzX3cuaCBiL2FyY2gvaTM4Ni9tYXRoLWVtdS9zdGF0dXNfdy5oCmluZGV4IDc4ZDdiNzYuLjU5ZTczMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYXRoLWVtdS9zdGF0dXNfdy5oCisrKyBiL2FyY2gvaTM4Ni9tYXRoLWVtdS9zdGF0dXNfdy5oCkBAIC00OCw5ICs0OCwxMSBAQAogCiAjZGVmaW5lIHN0YXR1c193b3JkKCkgXAogICAoKHBhcnRpYWxfc3RhdHVzICYgflNXX1RvcCAmIDB4ZmZmZikgfCAoKHRvcCA8PCBTV19Ub3BfU2hpZnQpICYgU1dfVG9wKSkKLSNkZWZpbmUgc2V0Y2MoY2MpICh7IFwKLSAgcGFydGlhbF9zdGF0dXMgJj0gfihTV19DMHxTV19DMXxTV19DMnxTV19DMyk7IFwKLSAgcGFydGlhbF9zdGF0dXMgfD0gKGNjKSAmIChTV19DMHxTV19DMXxTV19DMnxTV19DMyk7IH0pCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0Y2MoaW50IGNjKQoreworCXBhcnRpYWxfc3RhdHVzICY9IH4oU1dfQzB8U1dfQzF8U1dfQzJ8U1dfQzMpOworCXBhcnRpYWxfc3RhdHVzIHw9IChjYykgJiAoU1dfQzB8U1dfQzF8U1dfQzJ8U1dfQzMpOworfQogCiAjaWZkZWYgUEVDVUxJQVJfNDg2CiAgICAvKiBEZWZhdWx0LCB0aGlzIGNvbnZleXMgbm8gaW5mb3JtYXRpb24sIGJ1dCBhbiA4MDQ4NiBkb2VzIGl0LiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9pMzg2L21tL2Rpc2NvbnRpZy5jCmluZGV4IGUwYzM5MGQuLmFhNTg3MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL2kzODYvbW0vZGlzY29udGlnLmMKQEAgLTEwMSw3ICsxMDEsNiBAQAogZXh0ZXJuIHZvaWQgYWRkX29uZV9oaWdocGFnZV9pbml0KHN0cnVjdCBwYWdlICosIGludCwgaW50KTsKIAogZXh0ZXJuIHN0cnVjdCBlODIwbWFwIGU4MjA7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X3BnX3RhYmxlc19lbmQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBoaWdoZW5kX3BmbiwgaGlnaHN0YXJ0X3BmbjsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyYW1fcGFnZXM7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vZmF1bHQuYyBiL2FyY2gvaTM4Ni9tbS9mYXVsdC5jCmluZGV4IGNiYTliMzguLmI4YzRlMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9mYXVsdC5jCisrKyBiL2FyY2gvaTM4Ni9tbS9mYXVsdC5jCkBAIC00NiwxNyArNDYsMTcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcik7CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKLQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCitzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpCiB7CiAJc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7CiAJCS5yZWdzID0gcmVncywKLQkJLnN0ciA9IHN0ciwKKwkJLnN0ciA9ICJwYWdlIGZhdWx0IiwKIAkJLmVyciA9IGVyciwKLQkJLnRyYXBuciA9IHRyYXAsCi0JCS5zaWduciA9IHNpZworCQkudHJhcG5yID0gMTQsCisJCS5zaWduciA9IFNJR1NFR1YKIAl9OwotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmbm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4sIHZhbCwgJmFyZ3MpOworCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmbm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJRV9QQUdFX0ZBVUxULCAmYXJncyk7CiB9CiAKIC8qCkBAIC0zMjcsOCArMzI3LDcgQEAKIAlpZiAodW5saWtlbHkoYWRkcmVzcyA+PSBUQVNLX1NJWkUpKSB7CiAJCWlmICghKGVycm9yX2NvZGUgJiAweDAwMDAwMDBkKSAmJiB2bWFsbG9jX2ZhdWx0KGFkZHJlc3MpID49IDApCiAJCQlyZXR1cm47Ci0JCWlmIChub3RpZnlfcGFnZV9mYXVsdChESUVfUEFHRV9GQVVMVCwgInBhZ2UgZmF1bHQiLCByZWdzLCBlcnJvcl9jb2RlLCAxNCwKLQkJCQkJCVNJR1NFR1YpID09IE5PVElGWV9TVE9QKQorCQlpZiAobm90aWZ5X3BhZ2VfZmF1bHQocmVncywgZXJyb3JfY29kZSkgPT0gTk9USUZZX1NUT1ApCiAJCQlyZXR1cm47CiAJCS8qCiAJCSAqIERvbid0IHRha2UgdGhlIG1tIHNlbWFwaG9yZSBoZXJlLiBJZiB3ZSBmaXh1cCBhIHByZWZldGNoCkBAIC0zMzcsOCArMzM2LDcgQEAKIAkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKIAl9CiAKLQlpZiAobm90aWZ5X3BhZ2VfZmF1bHQoRElFX1BBR0VfRkFVTFQsICJwYWdlIGZhdWx0IiwgcmVncywgZXJyb3JfY29kZSwgMTQsCi0JCQkJCVNJR1NFR1YpID09IE5PVElGWV9TVE9QKQorCWlmIChub3RpZnlfcGFnZV9mYXVsdChyZWdzLCBlcnJvcl9jb2RlKSA9PSBOT1RJRllfU1RPUCkKIAkJcmV0dXJuOwogCiAJLyogSXQncyBzYWZlIHRvIGFsbG93IGlycSdzIGFmdGVyIGNyMiBoYXMgYmVlbiBzYXZlZCBhbmQgdGhlIHZtYWxsb2MKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9pbml0LmMgYi9hcmNoL2kzODYvbW0vaW5pdC5jCmluZGV4IGM1YzVlYTcuLmFlNDM2ODggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC9pMzg2L21tL2luaXQuYwpAQCAtNjIsNiArNjIsNyBAQAogCQkKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCXBtZF90YWJsZSA9IChwbWRfdCAqKSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOworCXBhcmF2aXJ0X2FsbG9jX3BkKF9fcGEocG1kX3RhYmxlKSA+PiBQQUdFX1NISUZUKTsKIAlzZXRfcGdkKHBnZCwgX19wZ2QoX19wYShwbWRfdGFibGUpIHwgX1BBR0VfUFJFU0VOVCkpOwogCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCAwKTsKIAlpZiAocG1kX3RhYmxlICE9IHBtZF9vZmZzZXQocHVkLCAwKSkgCkBAIC04Miw2ICs4Myw3IEBACiB7CiAJaWYgKHBtZF9ub25lKCpwbWQpKSB7CiAJCXB0ZV90ICpwYWdlX3RhYmxlID0gKHB0ZV90ICopIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisJCXBhcmF2aXJ0X2FsbG9jX3B0KF9fcGEocGFnZV90YWJsZSkgPj4gUEFHRV9TSElGVCk7CiAJCXNldF9wbWQocG1kLCBfX3BtZChfX3BhKHBhZ2VfdGFibGUpIHwgX1BBR0VfVEFCTEUpKTsKIAkJaWYgKHBhZ2VfdGFibGUgIT0gcHRlX29mZnNldF9rZXJuZWwocG1kLCAwKSkKIAkJCUJVRygpOwkKQEAgLTM0NSw2ICszNDcsOCBAQAogCS8qIEluaXQgZW50cmllcyBvZiB0aGUgZmlyc3QtbGV2ZWwgcGFnZSB0YWJsZSB0byB0aGUgemVybyBwYWdlICovCiAJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BHRDsgaSsrKQogCQlzZXRfcGdkKHBnZF9iYXNlICsgaSwgX19wZ2QoX19wYShlbXB0eV96ZXJvX3BhZ2UpIHwgX1BBR0VfUFJFU0VOVCkpOworI2Vsc2UKKwlwYXJhdmlydF9hbGxvY19wZChfX3BhKHN3YXBwZXJfcGdfZGlyKSA+PiBQQUdFX1NISUZUKTsKICNlbmRpZgogCiAJLyogRW5hYmxlIFBTRSBpZiBhdmFpbGFibGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jIGIvYXJjaC9pMzg2L21tL3BhZ2VhdHRyLmMKaW5kZXggZTIyM2IxZC4uNDEyZWJiZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC9pMzg2L21tL3BhZ2VhdHRyLmMKQEAgLTYwLDYgKzYwLDcgQEAKIAlhZGRyZXNzID0gX19wYShhZGRyZXNzKTsKIAlhZGRyID0gYWRkcmVzcyAmIExBUkdFX1BBR0VfTUFTSzsgCiAJcGJhc2UgPSAocHRlX3QgKilwYWdlX2FkZHJlc3MoYmFzZSk7CisJcGFyYXZpcnRfYWxsb2NfcHQocGFnZV90b19wZm4oYmFzZSkpOwogCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVEU7IGkrKywgYWRkciArPSBQQUdFX1NJWkUpIHsKICAgICAgICAgICAgICAgIHNldF9wdGUoJnBiYXNlW2ldLCBwZm5fcHRlKGFkZHIgPj4gUEFHRV9TSElGVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgPT0gYWRkcmVzcyA/IHByb3QgOiByZWZfcHJvdCkpOwpAQCAtMTcyLDYgKzE3Myw3IEBACiAJaWYgKCFQYWdlUmVzZXJ2ZWQoa3B0ZV9wYWdlKSkgewogCQlpZiAoY3B1X2hhc19wc2UgJiYgKHBhZ2VfcHJpdmF0ZShrcHRlX3BhZ2UpID09IDApKSB7CiAJCQlDbGVhclBhZ2VQcml2YXRlKGtwdGVfcGFnZSk7CisJCQlwYXJhdmlydF9yZWxlYXNlX3B0KHBhZ2VfdG9fcGZuKGtwdGVfcGFnZSkpOwogCQkJbGlzdF9hZGQoJmtwdGVfcGFnZS0+bHJ1LCAmZGZfbGlzdCk7CiAJCQlyZXZlcnRfcGFnZShrcHRlX3BhZ2UsIGFkZHJlc3MpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vcGd0YWJsZS5jIGIvYXJjaC9pMzg2L21tL3BndGFibGUuYwppbmRleCBmMzQ5ZWFmLi5mYTBjZmJkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvaTM4Ni9tbS9wZ3RhYmxlLmMKQEAgLTE3MSw2ICsxNzEsOCBAQAogdm9pZCByZXNlcnZlX3RvcF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZSkKIHsKIAlCVUdfT04oZml4bWFwcyA+IDApOworCXByaW50ayhLRVJOX0lORk8gIlJlc2VydmluZyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgYWJvdmUgMHglMDh4XG4iLAorCSAgICAgICAoaW50KS1yZXNlcnZlKTsKICNpZmRlZiBDT05GSUdfQ09NUEFUX1ZEU08KIAlCVUdfT04ocmVzZXJ2ZSAhPSAwKTsKICNlbHNlCkBAIC0yNDgsOSArMjUwLDE1IEBACiAJY2xvbmVfcGdkX3JhbmdlKChwZ2RfdCAqKXBnZCArIFVTRVJfUFRSU19QRVJfUEdELAogCQkJc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BUUlNfUEVSX1BHRCwKIAkJCUtFUk5FTF9QR0RfUFRSUyk7CisKIAlpZiAoUFRSU19QRVJfUE1EID4gMSkKIAkJcmV0dXJuOwogCisJLyogbXVzdCBoYXBwZW4gdW5kZXIgbG9jayAqLworCXBhcmF2aXJ0X2FsbG9jX3BkX2Nsb25lKF9fcGEocGdkKSA+PiBQQUdFX1NISUZULAorCQkJX19wYShzd2FwcGVyX3BnX2RpcikgPj4gUEFHRV9TSElGVCwKKwkJCVVTRVJfUFRSU19QRVJfUEdELCBQVFJTX1BFUl9QR0QgLSBVU0VSX1BUUlNfUEVSX1BHRCk7CisKIAlwZ2RfbGlzdF9hZGQocGdkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOwogfQpAQCAtMjYwLDYgKzI2OCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsgLyogY2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCiAKKwlwYXJhdmlydF9yZWxlYXNlX3BkKF9fcGEocGdkKSA+PiBQQUdFX1NISUZUKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGdkX2xvY2ssIGZsYWdzKTsKIAlwZ2RfbGlzdF9kZWwocGdkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOwpAQCAtMjc3LDEzICsyODYsMTggQEAKIAkJcG1kX3QgKnBtZCA9IGttZW1fY2FjaGVfYWxsb2MocG1kX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwbWQpCiAJCQlnb3RvIG91dF9vb207CisJCXBhcmF2aXJ0X2FsbG9jX3BkKF9fcGEocG1kKSA+PiBQQUdFX1NISUZUKTsKIAkJc2V0X3BnZCgmcGdkW2ldLCBfX3BnZCgxICsgX19wYShwbWQpKSk7CiAJfQogCXJldHVybiBwZ2Q7CiAKIG91dF9vb206Ci0JZm9yIChpLS07IGkgPj0gMDsgaS0tKQotCQlrbWVtX2NhY2hlX2ZyZWUocG1kX2NhY2hlLCAodm9pZCAqKV9fdmEocGdkX3ZhbChwZ2RbaV0pLTEpKTsKKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pIHsKKwkJcGdkX3QgcGdkZW50ID0gcGdkW2ldOworCQl2b2lkKiBwbWQgPSAodm9pZCAqKV9fdmEocGdkX3ZhbChwZ2RlbnQpLTEpOworCQlwYXJhdmlydF9yZWxlYXNlX3BkKF9fcGEocG1kKSA+PiBQQUdFX1NISUZUKTsKKwkJa21lbV9jYWNoZV9mcmVlKHBtZF9jYWNoZSwgcG1kKTsKKwl9CiAJa21lbV9jYWNoZV9mcmVlKHBnZF9jYWNoZSwgcGdkKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTI5NCw4ICszMDgsMTIgQEAKIAogCS8qIGluIHRoZSBQQUUgY2FzZSB1c2VyIHBnZCBlbnRyaWVzIGFyZSBvdmVyd3JpdHRlbiBiZWZvcmUgdXNhZ2UgKi8KIAlpZiAoUFRSU19QRVJfUE1EID4gMSkKLQkJZm9yIChpID0gMDsgaSA8IFVTRVJfUFRSU19QRVJfUEdEOyArK2kpCi0JCQlrbWVtX2NhY2hlX2ZyZWUocG1kX2NhY2hlLCAodm9pZCAqKV9fdmEocGdkX3ZhbChwZ2RbaV0pLTEpKTsKKwkJZm9yIChpID0gMDsgaSA8IFVTRVJfUFRSU19QRVJfUEdEOyArK2kpIHsKKwkJCXBnZF90IHBnZGVudCA9IHBnZFtpXTsKKwkJCXZvaWQqIHBtZCA9ICh2b2lkICopX192YShwZ2RfdmFsKHBnZGVudCktMSk7CisJCQlwYXJhdmlydF9yZWxlYXNlX3BkKF9fcGEocG1kKSA+PiBQQUdFX1NISUZUKTsKKwkJCWttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGUsIHBtZCk7CisJCX0KIAkvKiBpbiB0aGUgbm9uLVBBRSBjYXNlLCBmcmVlX3BndGFibGVzKCkgY2xlYXJzIHVzZXIgcGdkIGVudHJpZXMgKi8KIAlrbWVtX2NhY2hlX2ZyZWUocGdkX2NhY2hlLCBwZ2QpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L29wcm9maWxlL25taV9pbnQuYyBiL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfaW50LmMKaW5kZXggMzcwMGVlZi4uOGZkYTdiZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L29wcm9maWxlL25taV9pbnQuYworKysgYi9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX2ludC5jCkBAIC02Myw3ICs2Myw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfZHJpdmVyZnModm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfc3lzZnModm9pZCkKIHsKIAlpbnQgZXJyb3I7CiAJaWYgKCEoZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJm9wcm9maWxlX3N5c2NsYXNzKSkpCkBAIC03MiwxNSArNzIsMTUgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBleGl0X2RyaXZlcmZzKHZvaWQpCitzdGF0aWMgdm9pZCBleGl0X3N5c2ZzKHZvaWQpCiB7CiAJc3lzZGV2X3VucmVnaXN0ZXIoJmRldmljZV9vcHJvZmlsZSk7CiAJc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoJm9wcm9maWxlX3N5c2NsYXNzKTsKIH0KIAogI2Vsc2UKLSNkZWZpbmUgaW5pdF9kcml2ZXJmcygpIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZXhpdF9kcml2ZXJmcygpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaW5pdF9zeXNmcygpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZXhpdF9zeXNmcygpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogc3RhdGljIGludCBwcm9maWxlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKQEAgLTM4NSw3ICszODUsNyBAQAogCXJldHVybiAxOwogfQogCi0vKiBpbiBvcmRlciB0byBnZXQgZHJpdmVyZnMgcmlnaHQgKi8KKy8qIGluIG9yZGVyIHRvIGdldCBzeXNmcyByaWdodCAqLwogc3RhdGljIGludCB1c2luZ19ubWk7CiAKIGludCBfX2luaXQgb3Bfbm1pX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5pdF9kcml2ZXJmcygpOworCWluaXRfc3lzZnMoKTsKIAl1c2luZ19ubWkgPSAxOwogCW9wcy0+Y3JlYXRlX2ZpbGVzID0gbm1pX2NyZWF0ZV9maWxlczsKIAlvcHMtPnNldHVwID0gbm1pX3NldHVwOwpAQCAtNDU2LDUgKzQ1Niw1IEBACiB2b2lkIG9wX25taV9leGl0KHZvaWQpCiB7CiAJaWYgKHVzaW5nX25taSkKLQkJZXhpdF9kcml2ZXJmcygpOworCQlleGl0X3N5c2ZzKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jIGIvYXJjaC9pMzg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwppbmRleCBjYTI0NDdlLi5jNTU0ZjUyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCisrKyBiL2FyY2gvaTM4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKQEAgLTI0LDcgKzI0LDggQEAKIAogI2RlZmluZSBDVFJfSVNfUkVTRVJWRUQobXNycyxjKSAobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyID8gMSA6IDApCiAjZGVmaW5lIENUUl9SRUFEKGwsaCxtc3JzLGMpIGRvIHtyZG1zcihtc3JzLT5jb3VudGVyc1soYyldLmFkZHIsIChsKSwgKGgpKTt9IHdoaWxlICgwKQotI2RlZmluZSBDVFJfV1JJVEUobCxtc3JzLGMpIGRvIHt3cm1zcihtc3JzLT5jb3VudGVyc1soYyldLmFkZHIsIC0odTMyKShsKSwgLTEpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl8zMkJJVF9XUklURShsLG1zcnMsYykJXAorCWRvIHt3cm1zcihtc3JzLT5jb3VudGVyc1soYyldLmFkZHIsIC0odTMyKShsKSwgMCk7fSB3aGlsZSAoMCkKICNkZWZpbmUgQ1RSX09WRVJGTE9XRUQobikgKCEoKG4pICYgKDFVPDwzMSkpKQogCiAjZGVmaW5lIENUUkxfSVNfUkVTRVJWRUQobXNycyxjKSAobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyID8gMSA6IDApCkBAIC03OSw3ICs4MCw3IEBACiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CiAJCWlmICh1bmxpa2VseSghQ1RSX0lTX1JFU0VSVkVEKG1zcnMsaSkpKQogCQkJY29udGludWU7Ci0JCUNUUl9XUklURSgxLCBtc3JzLCBpKTsKKwkJQ1RSXzMyQklUX1dSSVRFKDEsIG1zcnMsIGkpOwogCX0KIAogCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KQEAgLTg3LDcgKzg4LDcgQEAKIAkJaWYgKChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSAmJiAoQ1RSX0lTX1JFU0VSVkVEKG1zcnMsaSkpKSB7CiAJCQlyZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OwogCi0JCQlDVFJfV1JJVEUoY291bnRlcl9jb25maWdbaV0uY291bnQsIG1zcnMsIGkpOworCQkJQ1RSXzMyQklUX1dSSVRFKGNvdW50ZXJfY29uZmlnW2ldLmNvdW50LCBtc3JzLCBpKTsKIAogCQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7CiAJCQlDVFJMX0NMRUFSKGxvdyk7CkBAIC0xMTYsNyArMTE3LDcgQEAKIAkJQ1RSX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKIAkJaWYgKENUUl9PVkVSRkxPV0VEKGxvdykpIHsKIAkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgaSk7Ci0JCQlDVFJfV1JJVEUocmVzZXRfdmFsdWVbaV0sIG1zcnMsIGkpOworCQkJQ1RSXzMyQklUX1dSSVRFKHJlc2V0X3ZhbHVlW2ldLCBtc3JzLCBpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9NYWtlZmlsZSBiL2FyY2gvaTM4Ni9wY2kvTWFrZWZpbGUKaW5kZXggMTU5NGQyZi4uNDQ2NTBlMCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL2kzODYvcGNpL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogb2JqLXkJCQkJOj0gaTM4Ni5vIGluaXQubwogCiBvYmotJChDT05GSUdfUENJX0JJT1MpCQkrPSBwY2Jpb3Mubwotb2JqLSQoQ09ORklHX1BDSV9NTUNPTkZJRykJKz0gbW1jb25maWcubyBkaXJlY3Qubworb2JqLSQoQ09ORklHX1BDSV9NTUNPTkZJRykJKz0gbW1jb25maWcubyBkaXJlY3QubyBtbWNvbmZpZy1zaGFyZWQubwogb2JqLSQoQ09ORklHX1BDSV9ESVJFQ1QpCSs9IGRpcmVjdC5vCiAKIHBjaS15CQkJCTo9IGZpeHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvY29tbW9uLmMgYi9hcmNoL2kzODYvcGNpL2NvbW1vbi5jCmluZGV4IDUzY2E2ZTguLjFiYjA2OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvY29tbW9uLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9jb21tb24uYwpAQCAtMTkxLDYgKzE5MSw5NCBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQb3dlckVkZ2UgMjk1MCIpLAogCQl9LAogCX0sCisJeworCQkuY2FsbGJhY2sgPSBzZXRfYmZfc29ydCwKKwkJLmlkZW50ID0gIkhQIFByb0xpYW50IEJMMjBwIEczIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIUCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcm9MaWFudCBCTDIwcCBHMyIpLAorCQl9LAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBzZXRfYmZfc29ydCwKKwkJLmlkZW50ID0gIkhQIFByb0xpYW50IEJMMjBwIEc0IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIUCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcm9MaWFudCBCTDIwcCBHNCIpLAorCQl9LAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBzZXRfYmZfc29ydCwKKwkJLmlkZW50ID0gIkhQIFByb0xpYW50IEJMMzBwIEcxIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIUCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcm9MaWFudCBCTDMwcCBHMSIpLAorCQl9LAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBzZXRfYmZfc29ydCwKKwkJLmlkZW50ID0gIkhQIFByb0xpYW50IEJMMjVwIEcxIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIUCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcm9MaWFudCBCTDI1cCBHMSIpLAorCQl9LAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBzZXRfYmZfc29ydCwKKwkJLmlkZW50ID0gIkhQIFByb0xpYW50IEJMMzVwIEcxIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIUCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcm9MaWFudCBCTDM1cCBHMSIpLAorCQl9LAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBzZXRfYmZfc29ydCwKKwkJLmlkZW50ID0gIkhQIFByb0xpYW50IEJMNDVwIEcxIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIUCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcm9MaWFudCBCTDQ1cCBHMSIpLAorCQl9LAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBzZXRfYmZfc29ydCwKKwkJLmlkZW50ID0gIkhQIFByb0xpYW50IEJMNDVwIEcyIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIUCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcm9MaWFudCBCTDQ1cCBHMiIpLAorCQl9LAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBzZXRfYmZfc29ydCwKKwkJLmlkZW50ID0gIkhQIFByb0xpYW50IEJMNDYwYyBHMSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSFAiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUHJvTGlhbnQgQkw0NjBjIEcxIiksCisJCX0sCisJfSwKKwl7CisJCS5jYWxsYmFjayA9IHNldF9iZl9zb3J0LAorCQkuaWRlbnQgPSAiSFAgUHJvTGlhbnQgQkw0NjVjIEcxIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIUCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcm9MaWFudCBCTDQ2NWMgRzEiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrID0gc2V0X2JmX3NvcnQsCisJCS5pZGVudCA9ICJIUCBQcm9MaWFudCBCTDQ4MGMgRzEiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhQIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlByb0xpYW50IEJMNDgwYyBHMSIpLAorCQl9LAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBzZXRfYmZfc29ydCwKKwkJLmlkZW50ID0gIkhQIFByb0xpYW50IEJMNjg1YyBHMSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSFAiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUHJvTGlhbnQgQkw2ODVjIEcxIiksCisJCX0sCisJfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYyBiL2FyY2gvaTM4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3ZDhjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaTM4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBtbWNvbmZpZy1zaGFyZWQuYyAtIExvdy1sZXZlbCBkaXJlY3QgUENJIGNvbmZpZyBzcGFjZSBhY2Nlc3MgdmlhCisgKiAgICAgICAgICAgICAgICAgICAgIE1NQ09ORklHIC0gY29tbW9uIGNvZGUgYmV0d2VlbiBpMzg2IGFuZCB4ODYtNjQuCisgKgorICogVGhpcyBjb2RlIGRvZXM6CisgKiAtIGtub3duIGNoaXBzZXQgaGFuZGxpbmcKKyAqIC0gQUNQSSBkZWNvZGluZyBhbmQgdmFsaWRhdGlvbgorICoKKyAqIFBlci1hcmNoaXRlY3R1cmUgY29kZSB0YWtlcyBjYXJlIG9mIHRoZSBtYXBwaW5ncyBhbmQgYWNjZXNzZXMKKyAqIHRoZW1zZWx2ZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KKworI2luY2x1ZGUgInBjaS5oIgorCisvKiBhcGVydHVyZSBpcyB1cCB0byAyNTZNQiBidXQgQklPUyBtYXkgcmVzZXJ2ZSBsZXNzICovCisjZGVmaW5lIE1NQ09ORklHX0FQRVJfTUlOCSgyICogMTAyNCoxMDI0KQorI2RlZmluZSBNTUNPTkZJR19BUEVSX01BWAkoMjU2ICogMTAyNCoxMDI0KQorCitERUNMQVJFX0JJVE1BUChwY2lfbW1jZmdfZmFsbGJhY2tfc2xvdHMsIDMyKlBDSV9NTUNGR19NQVhfQ0hFQ0tfQlVTKTsKKworLyogSzggc3lzdGVtcyBoYXZlIHNvbWUgZGV2aWNlcyAodHlwaWNhbGx5IGluIHRoZSBidWlsdGluIG5vcnRoYnJpZGdlKQorICAgdGhhdCBhcmUgb25seSBhY2Nlc3NpYmxlIHVzaW5nIHR5cGUxCisgICBOb3JtYWxseSB0aGlzIGNhbiBiZSBleHByZXNzZWQgaW4gdGhlIE1DRkcgYnkgbm90IGxpc3RpbmcgdGhlbQorICAgYW5kIGFzc2lnbmluZyBzdWl0YWJsZSBfU0VHcywgYnV0IHRoaXMgaXNuJ3QgaW1wbGVtZW50ZWQgaW4gc29tZSBCSU9TLgorICAgSW5zdGVhZCB0cnkgdG8gZGlzY292ZXIgYWxsIGRldmljZXMgb24gYnVzIDAgdGhhdCBhcmUgdW5yZWFjaGFibGUgdXNpbmcgTU0KKyAgIGFuZCBmYWxsYmFjayBmb3IgdGhlbS4gKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB1bnJlYWNoYWJsZV9kZXZpY2VzKHZvaWQpCit7CisJaW50IGksIGJ1czsKKwkvKiBVc2UgdGhlIG1heCBidXMgbnVtYmVyIGZyb20gQUNQSSBoZXJlPyAqLworCWZvciAoYnVzID0gMDsgYnVzIDwgUENJX01NQ0ZHX01BWF9DSEVDS19CVVM7IGJ1cysrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgZGV2Zm4gPSBQQ0lfREVWRk4oaSwgMCk7CisJCQl1MzIgdmFsMSwgdmFsMjsKKworCQkJcGNpX2NvbmYxX3JlYWQoMCwgYnVzLCBkZXZmbiwgMCwgNCwgJnZhbDEpOworCQkJaWYgKHZhbDEgPT0gMHhmZmZmZmZmZikKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHBjaV9tbWNmZ19hcmNoX3JlYWNoYWJsZSgwLCBidXMsIGRldmZuKSkgeworCQkJCXJhd19wY2lfb3BzLT5yZWFkKDAsIGJ1cywgZGV2Zm4sIDAsIDQsICZ2YWwyKTsKKwkJCQlpZiAodmFsMSA9PSB2YWwyKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJCXNldF9iaXQoaSArIDMyICogYnVzLCBwY2lfbW1jZmdfZmFsbGJhY2tfc2xvdHMpOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IE5vIG1tY29uZmlnIHBvc3NpYmxlIG9uIGRldmljZSIKKwkJCSAgICAgICAiICUwMng6JTAyeFxuIiwgYnVzLCBpKTsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgX19pbml0ICpwY2lfbW1jZmdfZTc1MjAodm9pZCkKK3sKKwl1MzIgd2luOworCXBjaV9jb25mMV9yZWFkKDAsIDAsIFBDSV9ERVZGTigwLDApLCAweGNlLCAyLCAmd2luKTsKKworCXBjaV9tbWNmZ19jb25maWdfbnVtID0gMTsKKwlwY2lfbW1jZmdfY29uZmlnID0ga3phbGxvYyhzaXplb2YocGNpX21tY2ZnX2NvbmZpZ1swXSksIEdGUF9LRVJORUwpOworCWlmICghcGNpX21tY2ZnX2NvbmZpZykKKwkJcmV0dXJuIE5VTEw7CisJcGNpX21tY2ZnX2NvbmZpZ1swXS5hZGRyZXNzID0gKHdpbiAmIDB4ZjAwMCkgPDwgMTY7CisJcGNpX21tY2ZnX2NvbmZpZ1swXS5wY2lfc2VnbWVudCA9IDA7CisJcGNpX21tY2ZnX2NvbmZpZ1swXS5zdGFydF9idXNfbnVtYmVyID0gMDsKKwlwY2lfbW1jZmdfY29uZmlnWzBdLmVuZF9idXNfbnVtYmVyID0gMjU1OworCisJcmV0dXJuICJJbnRlbCBDb3Jwb3JhdGlvbiBFNzUyMCBNZW1vcnkgQ29udHJvbGxlciBIdWIiOworfQorCitzdGF0aWMgY29uc3QgY2hhciBfX2luaXQgKnBjaV9tbWNmZ19pbnRlbF85NDUodm9pZCkKK3sKKwl1MzIgcGNpZXhiYXIsIG1hc2sgPSAwLCBsZW4gPSAwOworCisJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAxOworCisJcGNpX2NvbmYxX3JlYWQoMCwgMCwgUENJX0RFVkZOKDAsMCksIDB4NDgsIDQsICZwY2lleGJhcik7CisKKwkvKiBFbmFibGUgYml0ICovCisJaWYgKCEocGNpZXhiYXIgJiAxKSkKKwkJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAwOworCisJLyogU2l6ZSBiaXRzICovCisJc3dpdGNoICgocGNpZXhiYXIgPj4gMSkgJiAzKSB7CisJY2FzZSAwOgorCQltYXNrID0gMHhmMDAwMDAwMFU7CisJCWxlbiAgPSAweDEwMDAwMDAwVTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltYXNrID0gMHhmODAwMDAwMFU7CisJCWxlbiAgPSAweDA4MDAwMDAwVTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQltYXNrID0gMHhmYzAwMDAwMFU7CisJCWxlbiAgPSAweDA0MDAwMDAwVTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAwOworCX0KKworCS8qIEVycmF0YSAjMiwgdGhpbmdzIGJyZWFrIHdoZW4gbm90IGFsaWduZWQgb24gYSAyNTZNYiBib3VuZGFyeSAqLworCS8qIENhbiBvbmx5IGhhcHBlbiBpbiA2NE0vMTI4TSBtb2RlICovCisKKwlpZiAoKHBjaWV4YmFyICYgbWFzaykgJiAweDBmZmZmZmZmVSkKKwkJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAwOworCisJaWYgKHBjaV9tbWNmZ19jb25maWdfbnVtKSB7CisJCXBjaV9tbWNmZ19jb25maWcgPSBremFsbG9jKHNpemVvZihwY2lfbW1jZmdfY29uZmlnWzBdKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGNpX21tY2ZnX2NvbmZpZykKKwkJCXJldHVybiBOVUxMOworCQlwY2lfbW1jZmdfY29uZmlnWzBdLmFkZHJlc3MgPSBwY2lleGJhciAmIG1hc2s7CisJCXBjaV9tbWNmZ19jb25maWdbMF0ucGNpX3NlZ21lbnQgPSAwOworCQlwY2lfbW1jZmdfY29uZmlnWzBdLnN0YXJ0X2J1c19udW1iZXIgPSAwOworCQlwY2lfbW1jZmdfY29uZmlnWzBdLmVuZF9idXNfbnVtYmVyID0gKGxlbiA+PiAyMCkgLSAxOworCX0KKworCXJldHVybiAiSW50ZWwgQ29ycG9yYXRpb24gOTQ1Ry9HWi9QL1BMIEV4cHJlc3MgTWVtb3J5IENvbnRyb2xsZXIgSHViIjsKK30KKworc3RydWN0IHBjaV9tbWNmZ19ob3N0YnJpZGdlX3Byb2JlIHsKKwl1MzIgdmVuZG9yOworCXUzMiBkZXZpY2U7CisJY29uc3QgY2hhciAqKCpwcm9iZSkodm9pZCk7Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9tbWNmZ19ob3N0YnJpZGdlX3Byb2JlIHBjaV9tbWNmZ19wcm9iZXNbXSBfX2luaXRkYXRhID0geworCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9FNzUyMF9NQ0gsIHBjaV9tbWNmZ19lNzUyMCB9LAorCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdfSEIsIHBjaV9tbWNmZ19pbnRlbF85NDUgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBjaV9tbWNmZ19jaGVja19ob3N0YnJpZGdlKHZvaWQpCit7CisJdTMyIGw7CisJdTE2IHZlbmRvciwgZGV2aWNlOworCWludCBpOworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlwY2lfY29uZjFfcmVhZCgwLCAwLCBQQ0lfREVWRk4oMCwwKSwgMCwgNCwgJmwpOworCXZlbmRvciA9IGwgJiAweGZmZmY7CisJZGV2aWNlID0gKGwgPj4gMTYpICYgMHhmZmZmOworCisJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAwOworCXBjaV9tbWNmZ19jb25maWcgPSBOVUxMOworCW5hbWUgPSBOVUxMOworCisJZm9yIChpID0gMDsgIW5hbWUgJiYgaSA8IEFSUkFZX1NJWkUocGNpX21tY2ZnX3Byb2Jlcyk7IGkrKykgeworCQlpZiAocGNpX21tY2ZnX3Byb2Jlc1tpXS52ZW5kb3IgPT0gdmVuZG9yICYmCisJCSAgICBwY2lfbW1jZmdfcHJvYmVzW2ldLmRldmljZSA9PSBkZXZpY2UpCisJCQluYW1lID0gcGNpX21tY2ZnX3Byb2Jlc1tpXS5wcm9iZSgpOworCX0KKworCWlmIChuYW1lKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlBDSTogRm91bmQgJXMgJXMgTU1DT05GSUcgc3VwcG9ydC5cbiIsCisJCSAgICAgICBuYW1lLCBwY2lfbW1jZmdfY29uZmlnX251bSA/ICJ3aXRoIiA6ICJ3aXRob3V0Iik7CisJfQorCisJcmV0dXJuIG5hbWUgIT0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBjaV9tbWNmZ19pbnNlcnRfcmVzb3VyY2VzKHZvaWQpCit7CisjZGVmaW5lIFBDSV9NTUNGR19SRVNPVVJDRV9OQU1FX0xFTiAxOQorCWludCBpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWNoYXIgKm5hbWVzOworCXVuc2lnbmVkIG51bV9idXNlczsKKworCXJlcyA9IGtjYWxsb2MoUENJX01NQ0ZHX1JFU09VUkNFX05BTUVfTEVOICsgc2l6ZW9mKCpyZXMpLAorCQkJcGNpX21tY2ZnX2NvbmZpZ19udW0sIEdGUF9LRVJORUwpOworCWlmICghcmVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBVbmFibGUgdG8gYWxsb2NhdGUgTU1DT05GSUcgcmVzb3VyY2VzXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW5hbWVzID0gKHZvaWQgKikmcmVzW3BjaV9tbWNmZ19jb25maWdfbnVtXTsKKwlmb3IgKGkgPSAwOyBpIDwgcGNpX21tY2ZnX2NvbmZpZ19udW07IGkrKywgcmVzKyspIHsKKwkJc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uICpjZmcgPSAmcGNpX21tY2ZnX2NvbmZpZ1tpXTsKKwkJbnVtX2J1c2VzID0gY2ZnLT5lbmRfYnVzX251bWJlciAtIGNmZy0+c3RhcnRfYnVzX251bWJlciArIDE7CisJCXJlcy0+bmFtZSA9IG5hbWVzOworCQlzbnByaW50ZihuYW1lcywgUENJX01NQ0ZHX1JFU09VUkNFX05BTUVfTEVOLCAiUENJIE1NQ09ORklHICV1IiwKKwkJCSBjZmctPnBjaV9zZWdtZW50KTsKKwkJcmVzLT5zdGFydCA9IGNmZy0+YWRkcmVzczsKKwkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgKG51bV9idXNlcyA8PCAyMCkgLSAxOworCQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0JVU1k7CisJCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcyk7CisJCW5hbWVzICs9IFBDSV9NTUNGR19SRVNPVVJDRV9OQU1FX0xFTjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwY2lfbW1jZmdfcmVqZWN0X2Jyb2tlbihpbnQgdHlwZSkKK3sKKwl0eXBlb2YocGNpX21tY2ZnX2NvbmZpZ1swXSkgKmNmZzsKKworCWlmICgocGNpX21tY2ZnX2NvbmZpZ19udW0gPT0gMCkgfHwKKwkgICAgKHBjaV9tbWNmZ19jb25maWcgPT0gTlVMTCkgfHwKKwkgICAgKHBjaV9tbWNmZ19jb25maWdbMF0uYWRkcmVzcyA9PSAwKSkKKwkJcmV0dXJuOworCisJY2ZnID0gJnBjaV9tbWNmZ19jb25maWdbMF07CisKKwkvKgorCSAqIEhhbmRsZSBtb3JlIGJyb2tlbiBNQ0ZHIHRhYmxlcyBvbiBBc3VzIGV0Yy4KKwkgKiBUaGV5IG9ubHkgY29udGFpbiBhIHNpbmdsZSBlbnRyeSBmb3IgYnVzIDAtMC4KKwkgKi8KKwlpZiAocGNpX21tY2ZnX2NvbmZpZ19udW0gPT0gMSAmJgorCSAgICBjZmctPnBjaV9zZWdtZW50ID09IDAgJiYKKwkgICAgKGNmZy0+c3RhcnRfYnVzX251bWJlciB8IGNmZy0+ZW5kX2J1c19udW1iZXIpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IHN0YXJ0IGFuZCBlbmQgb2YgYnVzIG51bWJlciBpcyAwLiAiCisJCSAgICAgICAiUmVqZWN0ZWQgYXMgYnJva2VuIE1DRkcuXG4iKTsKKwkJZ290byByZWplY3Q7CisJfQorCisJLyoKKwkgKiBPbmx5IGRvIHRoaXMgY2hlY2sgd2hlbiB0eXBlIDEgd29ya3MuIElmIGl0IGRvZXNuJ3Qgd29yaworCSAqIGFzc3VtZSB3ZSBydW4gb24gYSBNYWMgYW5kIGFsd2F5cyB1c2UgTUNGRworCSAqLworCWlmICh0eXBlID09IDEgJiYgIWU4MjBfYWxsX21hcHBlZChjZmctPmFkZHJlc3MsCisJCQkJCSAgY2ZnLT5hZGRyZXNzICsgTU1DT05GSUdfQVBFUl9NSU4sCisJCQkJCSAgRTgyMF9SRVNFUlZFRCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEJJT1MgQnVnOiBNQ0ZHIGFyZWEgYXQgJUx4IGlzIG5vdCIKKwkJICAgICAgICIgRTgyMC1yZXNlcnZlZFxuIiwgY2ZnLT5hZGRyZXNzKTsKKwkJZ290byByZWplY3Q7CisJfQorCXJldHVybjsKKworcmVqZWN0OgorCXByaW50ayhLRVJOX0VSUiAiUENJOiBOb3QgdXNpbmcgTU1DT05GSUcuXG4iKTsKKwlrZnJlZShwY2lfbW1jZmdfY29uZmlnKTsKKwlwY2lfbW1jZmdfY29uZmlnID0gTlVMTDsKKwlwY2lfbW1jZmdfY29uZmlnX251bSA9IDA7Cit9CisKK3ZvaWQgX19pbml0IHBjaV9tbWNmZ19pbml0KGludCB0eXBlKQoreworCWludCBrbm93bl9icmlkZ2UgPSAwOworCisJaWYgKChwY2lfcHJvYmUgJiBQQ0lfUFJPQkVfTU1DT05GKSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAodHlwZSA9PSAxICYmIHBjaV9tbWNmZ19jaGVja19ob3N0YnJpZGdlKCkpCisJCWtub3duX2JyaWRnZSA9IDE7CisKKwlpZiAoIWtub3duX2JyaWRnZSkgeworCQlhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX01DRkcsIGFjcGlfcGFyc2VfbWNmZyk7CisJCXBjaV9tbWNmZ19yZWplY3RfYnJva2VuKHR5cGUpOworCX0KKworCWlmICgocGNpX21tY2ZnX2NvbmZpZ19udW0gPT0gMCkgfHwKKwkgICAgKHBjaV9tbWNmZ19jb25maWcgPT0gTlVMTCkgfHwKKwkgICAgKHBjaV9tbWNmZ19jb25maWdbMF0uYWRkcmVzcyA9PSAwKSkKKwkJcmV0dXJuOworCisJaWYgKHBjaV9tbWNmZ19hcmNoX2luaXQoKSkgeworCQlpZiAodHlwZSA9PSAxKQorCQkJdW5yZWFjaGFibGVfZGV2aWNlcygpOworCQlpZiAoa25vd25fYnJpZGdlKQorCQkJcGNpX21tY2ZnX2luc2VydF9yZXNvdXJjZXMoKTsKKwkJcGNpX3Byb2JlID0gKHBjaV9wcm9iZSAmIH5QQ0lfUFJPQkVfTUFTSykgfCBQQ0lfUFJPQkVfTU1DT05GOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYyBiL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYwppbmRleCA1NzAwMjIwLi5iYjFhZmQ5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jCkBAIC0xNSw1NSArMTUsMzMgQEAKICNpbmNsdWRlIDxhc20vZTgyMC5oPgogI2luY2x1ZGUgInBjaS5oIgogCi0vKiBhcGVydHVyZSBpcyB1cCB0byAyNTZNQiBidXQgQklPUyBtYXkgcmVzZXJ2ZSBsZXNzICovCi0jZGVmaW5lIE1NQ09ORklHX0FQRVJfTUlOCSgyICogMTAyNCoxMDI0KQotI2RlZmluZSBNTUNPTkZJR19BUEVSX01BWAkoMjU2ICogMTAyNCoxMDI0KQotCiAvKiBBc3N1bWUgc3lzdGVtcyB3aXRoIG1vcmUgYnVzc2VzIGhhdmUgY29ycmVjdCBNQ0ZHICovCi0jZGVmaW5lIE1BWF9DSEVDS19CVVMgMTYKLQogI2RlZmluZSBtbWNmZ192aXJ0X2FkZHIgKCh2b2lkIF9faW9tZW0gKikgZml4X3RvX3ZpcnQoRklYX1BDSUVfTUNGRykpCiAKIC8qIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGxhc3QgTU1DT05GSUcgZGV2aWNlIGFjY2Vzc2VkICovCiBzdGF0aWMgdTMyIG1tY2ZnX2xhc3RfYWNjZXNzZWRfZGV2aWNlOwogc3RhdGljIGludCBtbWNmZ19sYXN0X2FjY2Vzc2VkX2NwdTsKIAotc3RhdGljIERFQ0xBUkVfQklUTUFQKGZhbGxiYWNrX3Nsb3RzLCBNQVhfQ0hFQ0tfQlVTKjMyKTsKLQogLyoKICAqIEZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIHdpdGggTU1DT05GSUcgYWNjZXNzZXMKICAqLwogc3RhdGljIHUzMiBnZXRfYmFzZV9hZGRyKHVuc2lnbmVkIGludCBzZWcsIGludCBidXMsIHVuc2lnbmVkIGRldmZuKQogewotCWludCBjZmdfbnVtID0gLTE7CiAJc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uICpjZmc7CisJaW50IGNmZ19udW07CiAKLQlpZiAoc2VnID09IDAgJiYgYnVzIDwgTUFYX0NIRUNLX0JVUyAmJgotCSAgICB0ZXN0X2JpdChQQ0lfU0xPVChkZXZmbikgKyAzMipidXMsIGZhbGxiYWNrX3Nsb3RzKSkKKwlpZiAoc2VnID09IDAgJiYgYnVzIDwgUENJX01NQ0ZHX01BWF9DSEVDS19CVVMgJiYKKwkgICAgdGVzdF9iaXQoUENJX1NMT1QoZGV2Zm4pICsgMzIqYnVzLCBwY2lfbW1jZmdfZmFsbGJhY2tfc2xvdHMpKQogCQlyZXR1cm4gMDsKIAotCXdoaWxlICgxKSB7Ci0JCSsrY2ZnX251bTsKLQkJaWYgKGNmZ19udW0gPj0gcGNpX21tY2ZnX2NvbmZpZ19udW0pIHsKLQkJCWJyZWFrOwotCQl9CisJZm9yIChjZmdfbnVtID0gMDsgY2ZnX251bSA8IHBjaV9tbWNmZ19jb25maWdfbnVtOyBjZmdfbnVtKyspIHsKIAkJY2ZnID0gJnBjaV9tbWNmZ19jb25maWdbY2ZnX251bV07Ci0JCWlmIChjZmctPnBjaV9zZWdtZW50ICE9IHNlZykKLQkJCWNvbnRpbnVlOwotCQlpZiAoKGNmZy0+c3RhcnRfYnVzX251bWJlciA8PSBidXMpICYmCisJCWlmIChjZmctPnBjaV9zZWdtZW50ID09IHNlZyAmJgorCQkgICAgKGNmZy0+c3RhcnRfYnVzX251bWJlciA8PSBidXMpICYmCiAJCSAgICAoY2ZnLT5lbmRfYnVzX251bWJlciA+PSBidXMpKQogCQkJcmV0dXJuIGNmZy0+YWRkcmVzczsKIAl9CiAKLQkvKiBIYW5kbGUgbW9yZSBicm9rZW4gTUNGRyB0YWJsZXMgb24gQXN1cyBldGMuCi0JICAgVGhleSBvbmx5IGNvbnRhaW4gYSBzaW5nbGUgZW50cnkgZm9yIGJ1cyAwLTAuIEFzc3VtZQotIAkgICB0aGlzIGFwcGxpZXMgdG8gYWxsIGJ1c3Nlcy4gKi8KLQljZmcgPSAmcGNpX21tY2ZnX2NvbmZpZ1swXTsKLQlpZiAocGNpX21tY2ZnX2NvbmZpZ19udW0gPT0gMSAmJgotCQljZmctPnBjaV9zZWdtZW50ID09IDAgJiYKLQkJKGNmZy0+c3RhcnRfYnVzX251bWJlciB8IGNmZy0+ZW5kX2J1c19udW1iZXIpID09IDApCi0JCXJldHVybiBjZmctPmFkZHJlc3M7Ci0KIAkvKiBGYWxsIGJhY2sgdG8gdHlwZSAwICovCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTgsNjcgKzEzNiwxNSBAQAogCS53cml0ZSA9CXBjaV9tbWNmZ193cml0ZSwKIH07CiAKLS8qIEs4IHN5c3RlbXMgaGF2ZSBzb21lIGRldmljZXMgKHR5cGljYWxseSBpbiB0aGUgYnVpbHRpbiBub3J0aGJyaWRnZSkKLSAgIHRoYXQgYXJlIG9ubHkgYWNjZXNzaWJsZSB1c2luZyB0eXBlMQotICAgTm9ybWFsbHkgdGhpcyBjYW4gYmUgZXhwcmVzc2VkIGluIHRoZSBNQ0ZHIGJ5IG5vdCBsaXN0aW5nIHRoZW0KLSAgIGFuZCBhc3NpZ25pbmcgc3VpdGFibGUgX1NFR3MsIGJ1dCB0aGlzIGlzbid0IGltcGxlbWVudGVkIGluIHNvbWUgQklPUy4KLSAgIEluc3RlYWQgdHJ5IHRvIGRpc2NvdmVyIGFsbCBkZXZpY2VzIG9uIGJ1cyAwIHRoYXQgYXJlIHVucmVhY2hhYmxlIHVzaW5nIE1NCi0gICBhbmQgZmFsbGJhY2sgZm9yIHRoZW0uICovCi1zdGF0aWMgX19pbml0IHZvaWQgdW5yZWFjaGFibGVfZGV2aWNlcyh2b2lkKQoraW50IF9faW5pdCBwY2lfbW1jZmdfYXJjaF9yZWFjaGFibGUodW5zaWduZWQgaW50IHNlZywgdW5zaWduZWQgaW50IGJ1cywKKwkJCQkgICAgdW5zaWduZWQgaW50IGRldmZuKQogewotCWludCBpLCBrOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgTUFYX0NIRUNLX0JVUzsgaysrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCQl1MzIgdmFsMTsKLQkJCXUzMiBhZGRyOwotCi0JCQlwY2lfY29uZjFfcmVhZCgwLCBrLCBQQ0lfREVWRk4oaSwgMCksIDAsIDQsICZ2YWwxKTsKLQkJCWlmICh2YWwxID09IDB4ZmZmZmZmZmYpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIExvY2tpbmcgcHJvYmFibHkgbm90IG5lZWRlZCwgYnV0IHNhZmVyICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNpX2NvbmZpZ19sb2NrLCBmbGFncyk7Ci0JCQlhZGRyID0gZ2V0X2Jhc2VfYWRkcigwLCBrLCBQQ0lfREVWRk4oaSwgMCkpOwotCQkJaWYgKGFkZHIgIT0gMCkKLQkJCQlwY2lfZXhwX3NldF9kZXZfYmFzZShhZGRyLCBrLCBQQ0lfREVWRk4oaSwgMCkpOwotCQkJaWYgKGFkZHIgPT0gMCB8fAotCQkJICAgIHJlYWRsKCh1MzIgX19pb21lbSAqKW1tY2ZnX3ZpcnRfYWRkcikgIT0gdmFsMSkgewotCQkJCXNldF9iaXQoaSArIDMyKmssIGZhbGxiYWNrX3Nsb3RzKTsKLQkJCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCSJQQ0k6IE5vIG1tY29uZmlnIHBvc3NpYmxlIG9uICV4OiV4XG4iLCBrLCBpKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOwotCQl9Ci0JfQorCXJldHVybiBnZXRfYmFzZV9hZGRyKHNlZywgYnVzLCBkZXZmbikgIT0gMDsKIH0KIAotdm9pZCBfX2luaXQgcGNpX21tY2ZnX2luaXQoaW50IHR5cGUpCitpbnQgX19pbml0IHBjaV9tbWNmZ19hcmNoX2luaXQodm9pZCkKIHsKLQlpZiAoKHBjaV9wcm9iZSAmIFBDSV9QUk9CRV9NTUNPTkYpID09IDApCi0JCXJldHVybjsKLQotCWFjcGlfdGFibGVfcGFyc2UoQUNQSV9TSUdfTUNGRywgYWNwaV9wYXJzZV9tY2ZnKTsKLQlpZiAoKHBjaV9tbWNmZ19jb25maWdfbnVtID09IDApIHx8Ci0JICAgIChwY2lfbW1jZmdfY29uZmlnID09IE5VTEwpIHx8Ci0JICAgIChwY2lfbW1jZmdfY29uZmlnWzBdLmFkZHJlc3MgPT0gMCkpCi0JCXJldHVybjsKLQotCS8qIE9ubHkgZG8gdGhpcyBjaGVjayB3aGVuIHR5cGUgMSB3b3Jrcy4gSWYgaXQgZG9lc24ndCB3b3JrCi0JICAgYXNzdW1lIHdlIHJ1biBvbiBhIE1hYyBhbmQgYWx3YXlzIHVzZSBNQ0ZHICovCi0JaWYgKHR5cGUgPT0gMSAmJiAhZTgyMF9hbGxfbWFwcGVkKHBjaV9tbWNmZ19jb25maWdbMF0uYWRkcmVzcywKLQkJCXBjaV9tbWNmZ19jb25maWdbMF0uYWRkcmVzcyArIE1NQ09ORklHX0FQRVJfTUlOLAotCQkJRTgyMF9SRVNFUlZFRCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEJJT1MgQnVnOiBNQ0ZHIGFyZWEgYXQgJWx4IGlzIG5vdCBFODIwLXJlc2VydmVkXG4iLAotCQkJCSh1bnNpZ25lZCBsb25nKXBjaV9tbWNmZ19jb25maWdbMF0uYWRkcmVzcyk7Ci0JCXByaW50ayhLRVJOX0VSUiAiUENJOiBOb3QgdXNpbmcgTU1DT05GSUcuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQogCXByaW50ayhLRVJOX0lORk8gIlBDSTogVXNpbmcgTU1DT05GSUdcbiIpOwogCXJhd19wY2lfb3BzID0gJnBjaV9tbWNmZzsKLQlwY2lfcHJvYmUgPSAocGNpX3Byb2JlICYgflBDSV9QUk9CRV9NQVNLKSB8IFBDSV9QUk9CRV9NTUNPTkY7Ci0KLQl1bnJlYWNoYWJsZV9kZXZpY2VzKCk7CisJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL3BjaS5oIGIvYXJjaC9pMzg2L3BjaS9wY2kuaAppbmRleCBhMGEyNTE4Li5lNThiYWUyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL3BjaS5oCisrKyBiL2FyY2gvaTM4Ni9wY2kvcGNpLmgKQEAgLTk0LDMgKzk0LDEzIEBACiBleHRlcm4gdm9pZCBwY2lfbW1jZmdfaW5pdChpbnQgdHlwZSk7CiBleHRlcm4gdm9pZCBwY2liaW9zX3NvcnQodm9pZCk7CiAKKy8qIHBjaS1tbWNvbmZpZy5jICovCisKKy8qIFZlcmlmeSB0aGUgZmlyc3QgMTYgYnVzc2VzLiBXZSBhc3N1bWUgdGhhdCBzeXN0ZW1zIHdpdGggbW9yZSBidXNzZXMKKyAgIGdldCBNQ0ZHIHJpZ2h0LiAqLworI2RlZmluZSBQQ0lfTU1DRkdfTUFYX0NIRUNLX0JVUyAxNgorZXh0ZXJuIERFQ0xBUkVfQklUTUFQKHBjaV9tbWNmZ19mYWxsYmFja19zbG90cywgMzIqUENJX01NQ0ZHX01BWF9DSEVDS19CVVMpOworCitleHRlcm4gaW50IF9faW5pdCBwY2lfbW1jZmdfYXJjaF9yZWFjaGFibGUodW5zaWduZWQgaW50IHNlZywgdW5zaWduZWQgaW50IGJ1cywKKwkJCQkJICAgdW5zaWduZWQgaW50IGRldmZuKTsKK2V4dGVybiBpbnQgX19pbml0IHBjaV9tbWNmZ19hcmNoX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IGRiMTg1ZjMuLmQ1MWYwZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC0yMiw2ICsyMiw3IEBACiAKIGNvbmZpZyA2NEJJVAogCWJvb2wKKwlzZWxlY3QgQVRBX05PTlNUQU5EQVJEIGlmIEFUQQogCWRlZmF1bHQgeQogCiBjb25maWcgWk9ORV9ETUEKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKaW5kZXggOTE5N2Q3Yi4uMzU0OWM5NCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKQEAgLTY1MSw3ICs2NTEsNyBAQAogCSAqIGluZm9ybWF0aW9uIC0tIHRoZSBzdWNjZXNzb3IgdG8gTVBTIHRhYmxlcy4KIAkgKi8KIAotCWlmIChhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX01BRFQsIGFjcGlfcGFyc2VfbWFkdCkgPCAxKSB7CisJaWYgKGFjcGlfdGFibGVfcGFyc2UoQUNQSV9TSUdfTUFEVCwgYWNwaV9wYXJzZV9tYWR0KSkgewogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDYW4ndCBmaW5kIE1BRFRcbiIpOwogCQlnb3RvIHNraXBfbWFkdDsKIAl9CkBAIC03MDIsNyArNzAyLDcgQEAKIAkgKiBnZXRzIGludGVycnVwdHMgc3VjaCBhcyBwb3dlciBhbmQgc2xlZXAgYnV0dG9ucy4gIElmIGl0J3Mgbm90CiAJICogb24gYSBMZWdhY3kgaW50ZXJydXB0LCBpdCBuZWVkcyB0byBiZSBzZXR1cC4KIAkgKi8KLQlpZiAoYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19GQURULCBhY3BpX3BhcnNlX2ZhZHQpIDwgMSkKKwlpZiAoYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19GQURULCBhY3BpX3BhcnNlX2ZhZHQpKQogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJDYW4ndCBmaW5kIEZBRFRcbiIpOwogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwppbmRleCAyZWNiMjBiLi45ZGRmODk2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgKiBpbiBVUDoKICAqIAktIHdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IFBNVSBvdmVyZmxvdyBpbnRlcnJ1cHRzIChsb2NhbF9pcnFfZGlzYWJsZSkKICAqCi0gKiBzcGluX2xvY2tfaXJxc2F2ZSgpL3NwaW5fbG9ja19pcnFyZXN0b3JlKCk6CisgKiBzcGluX2xvY2tfaXJxc2F2ZSgpL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoKToKICAqIAlpbiBTTVA6IGxvY2FsX2lycV9kaXNhYmxlICsgc3Bpbl9sb2NrCiAgKiAJaW4gVVAgOiBsb2NhbF9pcnFfZGlzYWJsZQogICoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9saWIvdXNlcmNvcHkuYyBiL2FyY2gvbTMyci9saWIvdXNlcmNvcHkuYwppbmRleCA4OTZjZWYxLi44MmFiZDE1IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbGliL3VzZXJjb3B5LmMKKysrIGIvYXJjaC9tMzJyL2xpYi91c2VyY29weS5jCkBAIC0yOTMsNyArMjkzLDcgQEAKIAkJOiAiMCIgKG4pLCAiMSIgKHMpLCAiciIgKG4gJiAzKSwgInIiIChtYXNrKSwgInIiKDB4MDEwMTAxMDEpCiAJCTogInIwIiwgInIxIiwgImNiaXQiKTsKIAotCS8qIE5PVEU6IHN0cm5sZW5fdXNlcigpIGFsZ29yaXNtOgorCS8qIE5PVEU6IHN0cm5sZW5fdXNlcigpIGFsZ29yaXRobToKIAkgKiB7CiAJICogICBjaGFyICpwOwogCSAqICAgZm9yIChwID0gczsgbi0tICYmICpwICE9ICdcMCc7ICsrcCkKQEAgLTM2OSw3ICszNjksNyBAQAogCQk6ICIwIiAobiksICIxIiAocyksICJyIiAobiAmIDMpLCAiciIgKG1hc2spLCAiciIoMHgwMTAxMDEwMSkKIAkJOiAicjAiLCAicjEiLCAicjIiLCAicjMiLCAiY2JpdCIpOwogCi0JLyogTk9URTogc3Rybmxlbl91c2VyKCkgYWxnb3Jpc206CisJLyogTk9URTogc3Rybmxlbl91c2VyKCkgYWxnb3JpdGhtOgogCSAqIHsKIAkgKiAgIGNoYXIgKnA7CiAJICogICBmb3IgKHAgPSBzOyBuLS0gJiYgKnAgIT0gJ1wwJzsgKytwKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9pbnRzLmMgYi9hcmNoL202OGsva2VybmVsL2ludHMuYwppbmRleCA4NGFjZWNhLi5iNjZjOTdjIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL2ludHMuYworKysgYi9hcmNoL202OGsva2VybmVsL2ludHMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9pbnRzLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2ludHMuYwppbmRleCBhNTcyMzllLi4yMGYxMmExIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2ludHMuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2ludHMuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L3RpbWVycy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy90aW1lcnMuYwppbmRleCA4N2IxMTJiLi45MmU1ODA3IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L3RpbWVycy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvdGltZXJzLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiAvKgogICoJQ2hvb3NlIGEgcmVhc29uYWJseSBmYXN0IHByb2ZpbGUgdGltZXIuIE1ha2UgaXQgYW4gb2RkIHZhbHVlIHRvCi0gKgl0cnkgYW5kIGdldCBnb29kIGNvdmVyYWdlIG9mIGtlcm5hbCBvcGVyYXRpb25zLgorICoJdHJ5IGFuZCBnZXQgZ29vZCBjb3ZlcmFnZSBvZiBrZXJuZWwgb3BlcmF0aW9ucy4KICAqLwogI2RlZmluZQlQUk9GSUxFSFoJMTAxMwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGE5MmNlNmIuLmM2Zjc0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0xNDQsNiArMTQ0LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCisJc2VsZWN0IFNZU19TVVBQT1JUU19LR0RCCiAJaGVscAogCSAgVGhlIGVYY2l0ZSBpcyBhIHNtYXJ0IGNhbWVyYSBwbGF0Zm9ybSBtYW51ZmFjdHVyZWQgYnkKIAkgIEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCkBAIC0yMTAsNiArMjExLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCisJc2VsZWN0IFNZU19TVVBQT1JUU19LR0RCCiAJaGVscAogCSAgVGhpcyBpcyBhbiBldmFsdWF0aW9uIGJvYXJkIGJhc2VkIG9uIHRoZSBHYWxpbGVvIEdULTY0MTIwCiAJICBzaW5nbGUtY2hpcCBzeXN0ZW0gY29udHJvbGxlciB0aGF0IGNvbnRhaW5zIGEgTUlQUyBSNTAwMCBjb21wYXRpYmxlCkBAIC0zNzQsNiArMzc2LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCisJc2VsZWN0IFNZU19TVVBQT1JUU19LR0RCCiAJaGVscAogCSAgVGhlIEphZ3VhciBBVFggaXMgYSBNSVBTLWJhc2VkIFNpbmdsZSBCb2FyZCBDb21wdXRlciAoU0JDKSBtYWRlIGJ5CiAJICBNb21lbnR1bSBDb21wdXRlciA8aHR0cDovL3d3dy5tb21lbmNvLmNvbS8+LgpAQCAtMzkxLDYgKzM5NCw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfS0dEQgogCWhlbHAKIAkgIFRoZSBPY2Vsb3QgaXMgYSBNSVBTLWJhc2VkIFNpbmdsZSBCb2FyZCBDb21wdXRlciAoU0JDKSBtYWRlIGJ5CiAJICBNb21lbnR1bSBDb21wdXRlciA8aHR0cDovL3d3dy5tb21lbmNvLmNvbS8+LgpAQCAtNDgwLDYgKzQ4NCw4IEBACiAJc2VsZWN0IFNZU19IQVNfQ1BVX1I1NDMyCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTCBpZiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0tHREIKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0tHREIKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFI1NDMyLWJhc2VkIE5FQyBEREIgVnJjLTU0NzcsCkBAIC01MDgsNiArNTE0LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfSElHSE1FTQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfS0dEQgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfU01QCiAJaGVscAogCSAgWW9zZW1pdGUgaXMgYW4gZXZhbHVhdGlvbiBib2FyZCBmb3IgdGhlIFJNOTAwMHgyIHByb2Nlc3NvcgpAQCAtNTg0LDYgKzU5MSw3IEBACiAJc2VsZWN0IFNZU19IQVNfQ1BVX1IxMDAwMAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCisJc2VsZWN0IFNZU19TVVBQT1JUU19LR0RCCiAJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCiAJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKIAlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCkBAIC02MzMsNiArNjQxLDcgQEAKIAlzZWxlY3QgU1lTX0hBU19DUFVfU0IxCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCisJc2VsZWN0IFNZU19TVVBQT1JUU19LR0RCCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBTSUJZVEVfU0VOVE9TQQpAQCAtNzI2LDE1ICs3MzUsMTYgQEAKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgR0VORVJJQ19JU0FfRE1BCi0Jc2VsZWN0IEhBVkVfU1REX1BDX1NFUklBTF9QT1JUCiAJc2VsZWN0IEhXX0hBU19FSVNBCiAJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBJODI1MwogCXNlbGVjdCBJODI1OQogCXNlbGVjdCBJU0EKIAlzZWxlY3QgU1dBUF9JT19TUEFDRSBpZiBDUFVfQklHX0VORElBTgogCXNlbGVjdCBTWVNfSEFTX0NQVV9SNFgwMAogCXNlbGVjdCBTWVNfSEFTX0NQVV9SNTAwMAorCXNlbGVjdCBTWVNfSEFTX0NQVV9SMTAwMDAKIAlzZWxlY3QgUjUwMDBfQ1BVX1NDQUNIRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCkBAIC03NzIsNiArNzgyLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfS0dEQgogCXNlbGVjdCBUT1NISUJBX0JPQVJEUwogCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAloZWxwCkBAIC03OTIsNiArODAzLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfS0dEQgogCXNlbGVjdCBUT1NISUJBX0JPQVJEUwogCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAloZWxwCkBAIC05NTgsNiArOTcwLDcgQEAKIAogY29uZmlnIEREQjVYWFhfQ09NTU9OCiAJYm9vbAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfS0dEQgogCiBjb25maWcgTUlQU19CT0FSRFNfR0VOCiAJYm9vbApAQCAtMTAwNiw2ICsxMDE5LDcgQEAKIAlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT04KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0tHREIKIAogY29uZmlnIFBOWDg1NTAKIAlib29sCkBAIC0xMDE4LDYgKzEwMzIsNyBAQAogCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0tHREIKIAogY29uZmlnIFNXQVBfSU9fU1BBQ0UKIAlib29sCkBAIC0xMDY2LDcgKzEwODEsNyBAQAogCiBjb25maWcgTUlQU19MMV9DQUNIRV9TSElGVAogCWludAotCWRlZmF1bHQgIjQiIGlmIE1BQ0hfREVDU1RBVElPTgorCWRlZmF1bHQgIjQiIGlmIE1BQ0hfREVDU1RBVElPTiB8fCBTTklfUk0KIAlkZWZhdWx0ICI3IiBpZiBTR0lfSVAyNwogCWRlZmF1bHQgIjUiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKaW5kZXggOTM1MWYxYy4uZDVlNjBhMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKQEAgLTM5LDcgKzM5LDcgQEAKIAogY29uZmlnIEtHREIKIAlib29sICJSZW1vdGUgR0RCIGtlcm5lbCBkZWJ1Z2dpbmciCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBTWVNfU1VQUE9SVFNfS0dEQgogCXNlbGVjdCBERUJVR19JTkZPCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUsIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcmVtb3RlbHkgZGVidWcgdGhlIE1JUFMKQEAgLTQ4LDYgKzQ4LDkgQEAKIAkgIGJldHRlciAzMiBNQiBSQU0gdG8gYXZvaWQgZXhjZXNzaXZlIGxpbmtpbmcgdGltZS4gVGhpcyBpcyBvbmx5CiAJICB1c2VmdWwgZm9yIGtlcm5lbCBoYWNrZXJzLiBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgU1lTX1NVUFBPUlRTX0tHREIKKwlib29sCisKIGNvbmZpZyBHREJfQ09OU09MRQogCWJvb2wgIkNvbnNvbGUgb3V0cHV0IHRvIEdEQiIKIAlkZXBlbmRzIG9uIEtHREIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUgYi9hcmNoL21pcHMvY29iYWx0L01ha2VmaWxlCmluZGV4IDIyNWFjOGYuLjEyNTg5YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9NYWtlZmlsZQpAQCAtNSw1ICs1LDYgQEAKIG9iai15CSA6PSBpcnEubyByZXNldC5vIHNldHVwLm8KIAogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gY29uc29sZS5vCitvYmotJChDT05GSUdfTVREX1BIWVNNQVApCSs9IG10ZC5vCiAKIEVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvbXRkLmMgYi9hcmNoL21pcHMvY29iYWx0L210ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZDhlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29iYWx0L210ZC5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiAgUmVnaXN0cmF0aW9uIG9mIENvYmFsdCBNVEQgZGV2aWNlLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFlvaWNoaSBZdWFzYSA8eW9pY2hpX3l1YXNhQHRyaXBlYWtzLmNvLmpwPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY29iYWx0X210ZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQk9ICJDb2xvIiwKKwkJLm9mZnNldAk9IDB4MCwKKwkJLnNpemUJPSAweDgwMDAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBjb2JhbHRfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMSwKKwkubnJfcGFydHMJPSAxLAorCS5wYXJ0cwkJPSBjb2JhbHRfbXRkX3BhcnRpdGlvbnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvYmFsdF9tdGRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gMHgxZmMwMDAwMCwKKwkuZW5kCT0gMHgxZmM3ZmZmZiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvYmFsdF9tdGQgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjb2JhbHRfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmY29iYWx0X210ZF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNvYmFsdF9tdGRfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY29iYWx0X210ZCk7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoY29iYWx0X210ZF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYyBiL2FyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYwppbmRleCBhNGI2OWI1Li40MTVmZjg3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAogCXNldF9pb19wb3J0X2Jhc2UoQ0tTRUcxQUREUihHVF9ERUZfUENJMF9JT19CQVNFKSk7CiAKLQkvKiBJL08gcG9ydCByZXNvdXJjZSBtdXN0IGluY2x1ZGUgVUFSVCBhbmQgTENEL2J1dHRvbnMgKi8KKwkvKiBJL08gcG9ydCByZXNvdXJjZSBtdXN0IGluY2x1ZGUgTENEL2J1dHRvbnMgKi8KIAlpb3BvcnRfcmVzb3VyY2UuZW5kID0gMHgwZmZmZmZmZjsKIAogCS8qIHJlcXVlc3QgSS9PIHNwYWNlIGZvciBkZXZpY2VzIHVzZWQgb24gYWxsIGlbMzQ1XTg2IFBDcyAqLwpAQCAtMTQ5LDI0ICsxNDksMjQgQEAKIAlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmY29iYWx0X3BjaV9jb250cm9sbGVyKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCiAJaWYgKGNvYmFsdF9ib2FyZF9pZCA+IENPQkFMVF9CUkRfSURfUkFRMSkgewotCiAjaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USwogCQljb2JhbHRfZWFybHlfY29uc29sZSgpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTAKIAkJdWFydC5saW5lCT0gMDsKIAkJdWFydC50eXBlCT0gUE9SVF9VTktOT1dOOwogCQl1YXJ0LnVhcnRjbGsJPSAxODQzMjAwMDsKIAkJdWFydC5pcnEJPSBDT0JBTFRfU0VSSUFMX0lSUTsKLQkJdWFydC5mbGFncwk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVDsKLQkJdWFydC5pb2Jhc2UJPSAweGM4MDAwMDA7Ci0JCXVhcnQuaW90eXBlCT0gVVBJT19QT1JUOworCQl1YXJ0LmZsYWdzCT0gVVBGX0lPUkVNQVAgfCBVUEZfQk9PVF9BVVRPQ09ORiB8CisJCQkJICBVUEZfU0tJUF9URVNUOworCQl1YXJ0LmlvdHlwZQk9IFVQSU9fTUVNOworCQl1YXJ0Lm1hcGJhc2UJPSAweDFjODAwMDAwOwogCiAJCWVhcmx5X3NlcmlhbF9zZXR1cCgmdWFydCk7Ci0JfQogI2VuZGlmCisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnCmluZGV4IGFjMTg5MTYuLjQ1ODc0ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2F0bGFzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9hdGxhc19kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVGh1IEp1bCAgNiAwOTo1OTozOSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyNzozNSAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC0yNSw4ICsyNiw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAogQ09ORklHX01JUFNfQVRMQVM9eQpAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjQsMTAgKzY0LDE0IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogQ09ORklHX01JUFNfQk9OSVRPNjQ9eQpAQCAtMTI5LDggKzEzMyw4IEBACiBDT05GSUdfUk03MDAwX0NQVV9TQ0FDSEU9eQogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19NVUxUSVRIUkVBRElORz15CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldApAQCAtMTQ5LDYgKzE1Myw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTYxLDYgKzE2Niw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNzksMTUgKzE4NSwyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE5NSwxMiArMjA2LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjE4LDYgKzIyOSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTI2MCw2ICsyNzIsMTQgQEAKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKworIwogIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKQEAgLTI3Myw3ICsyOTMsMTAgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQpAQCAtMjgxLDcgKzMwNCw2IEBACiAjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15Ci1DT05GSUdfSVBfUk9VVEVfRldNQVJLPXkKIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQogIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CkBAIC0zMDQsMTAgKzMyNiwxMyBAQAogQ09ORklHX0lORVRfVFVOTkVMPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKIAogIwogIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzQ5LDExICszNzQsMTcgQEAKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lQVjZfTUlQNj15CiBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCitDT05GSUdfSVBWNl9TSVQ9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBWNl9TVUJUUkVFUz15CiBDT05GSUdfTkVUV09SS19TRUNNQVJLPXkKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTM2NSwxOSArMzk2LDQzIEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCkBAIC0zOTUsNjAgKzQ1MCw0NSBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfQ1RfQUNDVD15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX0lQX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSz1tCi1DT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfVEZUUD1tCi1DT05GSUdfSVBfTkZfQU1BTkRBPW0KLUNPTkZJR19JUF9ORl9QUFRQPW0KLUNPTkZJR19JUF9ORl9IMzIzPW0KLUNPTkZJR19JUF9ORl9TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi0jIENPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTkFUX0lSQz1tCi1DT05GSUdfSVBfTkZfTkFUX0ZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX1RGVFA9bQotQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQotQ09ORklHX0lQX05GX05BVF9QUFRQPW0KLUNPTkZJR19JUF9ORl9OQVRfSDMyMz1tCi1DT05GSUdfSVBfTkZfTkFUX1NJUD1tCitDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQorQ09ORklHX05GX05BVF9GVFA9bQorQ09ORklHX05GX05BVF9JUkM9bQorQ09ORklHX05GX05BVF9URlRQPW0KK0NPTkZJR19ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfUFBUUD1tCitDT05GSUdfTkZfTkFUX0gzMjM9bQorQ09ORklHX05GX05BVF9TSVA9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQogIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUkFXPW0KQEAgLTQ1OSw2ICs0OTksNyBAQAogIwogIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KQEAgLTQ2OCw2ICs1MDksNyBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVA2X05GX01BVENIX01IPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KQEAgLTUyNywxMyArNTY5LDEyIEBACiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBTEs9bQotQ09ORklHX0RFVl9BUFBMRVRBTEs9eQorQ09ORklHX0RFVl9BUFBMRVRBTEs9bQogQ09ORklHX0lQRERQPW0KIENPTkZJR19JUEREUF9FTkNBUD15CiBDT05GSUdfSVBERFBfREVDQVA9eQogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotQ09ORklHX05FVF9ESVZFUlQ9eQogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC01NDEsNiArNTgyLDcgQEAKICMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCiAjCiBDT05GSUdfTkVUX1NDSEVEPXkKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQogQ09ORklHX05FVF9TQ0hfQ0xLX0pJRkZJRVM9eQogIyBDT05GSUdfTkVUX1NDSF9DTEtfR0VUVElNRU9GREFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfQ0xLX0NQVSBpcyBub3Qgc2V0CkBAIC01OTUsNiArNjM3LDcgQEAKIENPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCiAjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19GSUJfUlVMRVM9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC02NDIsNiArNjg1LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CkBAIC02NDksOSArNjkzLDE2IEBACiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND1tCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwpAQCAtNjgxLDYgKzczMiw4IEBACiAjCiBDT05GSUdfUkFJRF9BVFRSUz1tCiBDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9UR1Q9bQorQ09ORklHX1NDU0lfTkVUTElOSz15CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwpAQCAtNzAwLDE0ICs3NTMsMTcgQEAKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKIAogIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjIFNDU0kgVHJhbnNwb3J0cwogIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKIENPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KIENPTkZJR19TQ1NJX1NBU19BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KK0NPTkZJR19TQ1NJX1NBU19MSUJTQVNfREVCVUc9eQogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTcyMCwzMCArNzc2LDM5IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorQ09ORklHX1NDU0lfQUlDOTRYWD1tCisjIENPTkZJR19BSUM5NFhYX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCiBDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC03NTksNiArODI0LDcgQEAKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT1tCisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRE1fQ1JZUFQ9bQogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9NSVJST1I9bQpAQCAtODEzLDYgKzg3OSw4IEBACiBDT05GSUdfQ0lDQURBX1BIWT1tCiBDT05GSUdfVklURVNTRV9QSFk9bQogQ09ORklHX1NNU0NfUEhZPW0KKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtODMyLDYgKzkwMCw3IEBACiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiBDT05GSUdfUENORVQzMj15CisjIENPTkZJR19QQ05FVDMyX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldApAQCAtODUwLDYgKzkxOSw3IEBACiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiBDT05GSUdfTEFOX1NBQTk3MzA9eQorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTg2OCwxNCArOTM4LDE4IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX1FMQTNYWFg9bQorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzPW0KICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUWEVOX05JQz1tCiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC05MTUsNiArOTg5LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC05OTUsMTAgKzEwNzAsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKQEAgLTEwMDYsNyArMTA3Nyw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtMTAzMSwxNCArMTEwMSw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC0xMDU2LDYgKzExMjEsNyBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtMTA2Myw2ICsxMTI5LDEyIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtMTEyNSw2ICsxMTk3LDE0IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xMTM0LDYgKzEyMTQsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTExNTQsNiArMTIzNSw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz1tCiBDT05GSUdfUk9NRlNfRlM9bQpAQCAtMTE2Nyw2ICsxMjQ5LDcgQEAKIENPTkZJR19BVVRPRlNfRlM9eQogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTExNzQsNyArMTI1Nyw2IEBACiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQotQ09ORklHX1pJU09GU19GUz1tCiBDT05GSUdfVURGX0ZTPW0KIENPTkZJR19VREZfTkxTPXkKIApAQCAtMTE5MywxMSArMTI3NSwxMyBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTI0Miw3ICsxMzI2LDYgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEyOTksNiArMTM4MiwxNCBAQAogQ09ORklHX05MU19VVEY4PW0KIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTEzMDgsMTEgKzEzOTksMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCkBAIC0xMzI2LDE4ICsxNDE5LDMwIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtMTM0OSw2ICsxNDU0LDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMzU4LDYgKzE0NjQsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkMzMj15CkBAIC0xMzY5LDkgKzE0NzYsNSBAQAogQ09ORklHX1RFWFRTRUFSQ0hfQk09bQogQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KIENPTkZJR19QTElTVD15Ci1DT05GSUdfUklPPW4KLUNPTkZJR19JMkNfT0NPUkVTPW4KLUNPTkZJR19ERUJVR19SVF9NVVRFWEVTPW4KLUNPTkZJR19SVF9NVVRFWF9URVNURVI9bgotQ09ORklHX0RFQlVHX1JXU0VNUz1uCi1DT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTPW4KK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKaW5kZXggOTU1NDI1Ny4uYjRjZGQzZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTktcmMxCi0jIFdlZCBPY3QgMTEgMDE6NDE6NDEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6MzUgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtNDAsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNzgsMTEgKzgwLDE0IEBACiAjIENPTkZJR19TSUJZVEVfU0IxMjUwX1BST0YgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX1RCUFJPRiBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19DUFVfQklHX0VORElBTj15CiAjIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CkBAIC0xMTUsNiArMTIwLDcgQEAKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogQ09ORklHX0NQVV9TQjE9eQogQ09ORklHX1NZU19IQVNfQ1BVX1NCMT15CitDT05GSUdfV0VBS19PUkRFUklORz15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CkBAIC0xNTAsOCArMTU2LDEwIEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19TTVA9eQogQ09ORklHX1NZU19TVVBQT1JUU19TTVA9eQorQ09ORklHX05SX0NQVVNfREVGQVVMVF80PXkKIENPTkZJR19OUl9DUFVTPTQKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CkBAIC0xNjYsNiArMTc0LDcgQEAKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9CS0wgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xODUsNiArMTk0LDcgQEAKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKQEAgLTE5Myw2ICsyMDMsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTI1Myw3ICsyNjQsNiBAQAogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQotIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfREVCVUc9eQogQ09ORklHX01NVT15CiAKQEAgLTI3MywxMSArMjgzLDIwIEBACiAjIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKK0NPTkZJR19TWVNWSVBDX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CiBDT05GSUdfTUlQUzMyX04zMj15CiBDT05GSUdfQklORk1UX0VMRjMyPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yOTIsNyArMzExLDkgQEAKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMxOCw2ICszMzksNyBAQAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTM3NCw2ICszOTYsNyBAQAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTQxMyw2ICs0MzYsMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9bQorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiBDT05GSUdfSURFPXkKQEAgLTQ1NSw2ICs0ODQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JVDgyMTM9bQogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKQEAgLTQ2NCw2ICs0OTQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9UQzg2QzAwMT1tCiAjIENPTkZJR19CTEtfREVWX0lERV9TV0FSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CkBAIC01NjMsOSArNTk0LDExIEBACiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz1tCiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9bQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNjI3LDYgKzY2MCw3IEBACiAjIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CitDT05GSUdfTU9YQV9TTUFSVElPX05FVz1tCiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOS19HVCBpcyBub3Qgc2V0CkBAIC02NjcsMTAgKzcwMSw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNjc4LDcgKzcwOCw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNzA3LDYgKzczNiw3IEBACiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVNFTUkgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NJQllURT15CkBAIC03NDMsNiArNzczLDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNzUxLDExICs3ODIsNiBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODQwLDYgKzg2NiwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODQ4LDYgKzg4Miw3IEBACiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg4OSw3ICs5MjQsNyBAQAogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC05NDYsNiArOTgxLDEwIEBACiAjCiAjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgogIworQ09ORklHX0RMTT1tCitDT05GSUdfRExNX1RDUD15CisjIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFByb2ZpbGluZyBzdXBwb3J0CkBAIC05NjAsMjMgKzk5OSwyNSBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CkBAIC0xMDAyLDggKzEwNDMsOSBAQAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQogQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX05VTEw9eQogQ09ORklHX0NSWVBUT19NRDQ9eQogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtMTAxMiw5ICsxMDU0LDEzIEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15CiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9eQogQ09ORklHX0NSWVBUT19UV09GSVNIPXkKIENPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049eQpAQCAtMTAyOSw2ICsxMDc1LDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzgsNiArMTA4NSw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQpAQCAtMTA0NSwzICsxMDkzLDUgQEAKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKaW5kZXggNDk1OTBkNC4uYjA1NDY5ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjAzOjI0IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI3OjM2IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVlI0MVhYPXkKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC03MCwxMiArNzAsMTUgQEAKICMgQ09ORklHX1ZJQ1RPUl9NUEMzMFggaXMgbm90IHNldAogQ09ORklHX1pBT19DQVBDRUxMQT15CiBDT05GSUdfUENJX1ZSNDFYWD15Ci0jIENPTkZJR19WUkM0MTczIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTEwOCw2ICsxMTEsNyBAQAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIApAQCAtMTIxLDggKzEyNSw4IEBACiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKQEAgLTEzNyw2ICsxNDEsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTQ5LDYgKzE1NCw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjcsMTUgKzE3MywyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMTgzLDEyICsxOTQsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0yMDYsNiArMjE3LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjQ4LDYgKzI2MCwxNCBAQAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQpAQCAtMjYxLDcgKzI4MSwxMCBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CiBDT05GSUdfTkVUX0tFWT15CitDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI4MiwxMCArMzA1LDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zMTUsNyArMzQxLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zNzgsMTQgKzQwMywyMiBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9bQorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiBDT05GSUdfSURFPXkKK0NPTkZJR19JREVfTUFYX0hXSUZTPTQKIENPTkZJR19CTEtfREVWX0lERT15CiAKICMKQEAgLTQxNCw2ICs0NDcsMTIgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNDY0LDYgKzUwMyw4IEBACiBDT05GSUdfQ0lDQURBX1BIWT1tCiBDT05GSUdfVklURVNTRV9QSFk9bQogQ09ORklHX1NNU0NfUEhZPW0KKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNTA0LDcgKzU0NSw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQU5fU0FBOTczMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNTIzLDE0ICs1NjQsMTggQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfUUxBM1hYWD1tCisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTU2OSw2ICs2MTQsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTYzNSwxMCArNjgxLDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1ZSNDFYWD15CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTY0Nyw3ICs2ODksNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTY3MiwxNCArNzEzLDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTY5Nyw2ICs3MzMsNyBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzA0LDYgKzc0MSwxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCisjIENPTkZJR19ISUQgaXMgbm90IHNldAorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC03NTQsNiArNzk2LDcgQEAKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKIENPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFJUQyBpbnRlcmZhY2VzCkBAIC03ODcsMTYgKzgzMCwyNiBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgwNyw2ICs4NjAsNyBAQAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtODI2LDExICs4ODAsMTMgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTg2OCw3ICs5MjQsNiBAQAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtODg2LDYgKzk0MSwxNCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTg5NSwxMSArOTU4LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlWUjAsMzg0MDAiCiAKQEAgLTkxMiw3ICs5NzcsNDQgQEAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwpAQCAtOTIxLDggKzEwMjMsMTMgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT1tCitDT05GSUdfWkxJQl9ERUZMQVRFPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCmluZGV4IDA2MDdmYzIuLmY4OGM0MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjAzOjI1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBNb24gRmViIDE5IDE0OjUxOjU4IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKIENPTkZJR19NSVBTX0NPQkFMVD15CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CkBAIC00Miw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02NSwxMCArNjUsMTQgQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CiBDT05GSUdfSTgyNTk9eQpAQCAtMTE3LDggKzEyMSw4IEBACiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQpAQCAtMTM0LDYgKzEzOCw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDYsNiArMTUxLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE2NCwxNSArMTcwLDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMTgwLDEyICsxOTEsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xOTgsNiArMjA5LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjQwLDYgKzI1MiwxNCBAQAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQpAQCAtMjUzLDcgKzI3MywxMCBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CiBDT05GSUdfTkVUX0tFWT15CitDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjcwLDEwICsyOTMsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTMwMyw3ICszMjksNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM0OCw3ICszNzMsODggQEAKICMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQogIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CisjIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisKKyMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCiAjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydApAQCAtMzc5LDkgKzQ4NSwxNiBAQAogQ09ORklHX0FUQV9PVkVSX0VUSD15CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9eQorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiBDT05GSUdfSURFPXkKK0NPTkZJR19JREVfTUFYX0hXSUZTPTQKIENPTkZJR19CTEtfREVWX0lERT15CiAKICMKQEAgLTQxNyw4ICs1MzAsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSVQ4MjEzPXkKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CkBAIC00MjgsNiArNTQzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKK0NPTkZJR19CTEtfREVWX1RDODZDMDAxPXkKICMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKICMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldApAQCAtNDM5LDYgKzU1NSwxMiBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9eQogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNDg5LDYgKzYxMSw4IEBACiBDT05GSUdfQ0lDQURBX1BIWT15CiBDT05GSUdfVklURVNTRV9QSFk9eQogQ09ORklHX1NNU0NfUEhZPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNTMzLDE0ICs2NTcsMTcgQEAKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX1FMQTNYWFg9eQogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz15CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9eQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNTc5LDYgKzcwNiw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjU2LDEwICs3ODQsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKQEAgLTY2Nyw3ICs3OTEsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTY5MiwxNCArODE1LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTcxNyw2ICs4MzUsNyBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzI0LDYgKzg0MywxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCisjIENPTkZJR19ISUQgaXMgbm90IHNldAorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC03ODYsNiArOTEwLDE0IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC03OTQsMTEgKzkyNiwxMyBAQAogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgwOSw2ICs5NDMsNyBAQAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9eQorQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC04MjgsMjIgKzk2MywyNiBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz15CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwogIwogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CkBAIC04NjYsNyArMTAwNSw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC04ODQsNiArMTAyMiwxNCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09eQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTg5MywxMiArMTAzOSwxMyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKQEAgLTkxMyw3ICsxMDYwLDEyIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9eQogQ09ORklHX0NSWVBUT19OVUxMPXkKIENPTkZJR19DUllQVE9fTUQ0PXkKIENPTkZJR19DUllQVE9fTUQ1PXkKQEAgLTkyMiw5ICsxMDc0LDE2IEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15CiBDT05GSUdfQ1JZUFRPX1dQNTEyPXkKIENPTkZJR19DUllQVE9fVEdSMTkyPXkKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9eQorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPXkKK0NPTkZJR19DUllQVE9fTFJXPXkKIENPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPXkKIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9eQogQ09ORklHX0NSWVBUT19UV09GSVNIPXkKK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049eQogQ09ORklHX0NSWVBUT19TRVJQRU5UPXkKIENPTkZJR19DUllQVE9fQUVTPXkKIENPTkZJR19DUllQVE9fQ0FTVDU9eQpAQCAtOTM2LDYgKzEwOTUsNyBAQAogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorQ09ORklHX0NSWVBUT19DQU1FTExJQT15CiAKICMKICMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKQEAgLTk0NCw2ICsxMTA0LDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKIENPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDMzI9eQpAQCAtOTUxLDMgKzExMTIsNSBAQAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCmluZGV4IDFhNTdiMzMuLjFkYjE5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjAzOjMzIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI3OjM5IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY0LDE0ICs2NCwxOSBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NPQ19BVTEwMDA9eQogQ09ORklHX1NPQ19BVTFYMDA9eQpAQCAtMTE2LDggKzEyMSw4IEBACiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKIENPTkZJR19DUFVfSEFTX0xMU0M9eQpAQCAtMTM1LDYgKzE0MCw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDcsNiArMTUzLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE2NSwxNSArMTcyLDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMTgxLDEyICsxOTMsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0yMDQsNiArMjE2LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjUyLDYgKzI2NSwxMCBAQAogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAKICMKQEAgLTI2OCw3ICsyODUsMTAgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0yODksMTAgKzMwOSwxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX1RDUF9NRDVTSUc9eQogCiAjCiAjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCkBAIC0zMTEsMTUgKzMzNCw0MiBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCkBAIC0zMzAsMTQgKzM4MCwxNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiAjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldApAQCAtMzY1LDcgKzQxOCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtNDIxLDExICs0NzMsMTMgQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNTEwLDYgKzU2NCwxMCBAQAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTUxOSw2ICs1NzcsMTIgQEAKICMKIENPTkZJR19SQUlEX0FUVFJTPW0KICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTU2Miw2ICs2MjYsOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTYxNiw2ICs2ODIsNyBAQAogQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldApAQCAtNjM1LDYgKzcwMiw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzE0LDEwICs3ODIsNiBAQAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotCi0jCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1NZTkNMSU5LX0NTPW0KQEAgLTcyOSw3ICs3OTMsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTc1NCwxNCArODE3LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTc3OSw2ICs4MzcsNyBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzg2LDYgKzg0NSwxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCisjIENPTkZJR19ISUQgaXMgbm90IHNldAorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC04NDcsNiArOTExLDE0IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC04NTgsNiArOTMwLDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTg3MCw2ICs5NDMsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtODgwLDYgKzk1NCw3IEBACiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtODk5LDIzICs5NzQsMjUgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz1tCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk0NCw3ICsxMDIxLDYgQEAKIENPTkZJR19TTUJfRlM9bQogIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMDEsNiArMTA3NywxNCBAQAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworQ09ORklHX0RMTT1tCitDT05GSUdfRExNX1RDUD15CisjIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAorCisjCiAjIFByb2ZpbGluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldApAQCAtMTAxMCwxMSArMTA5NCwxMyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKQEAgLTEwMjksMTggKzExMTUsMzAgQEAKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQorQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19MUlc9bQogQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCkBAIC0xMDUyLDYgKzExNTAsNyBAQAogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjEsNiArMTE2MCw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkMzMj15CkBAIC0xMDcyLDMgKzExNzIsNSBAQAogQ09ORklHX1RFWFRTRUFSQ0hfQk09bQogQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCmluZGV4IDAwNTVlYzQuLjUyOWU2ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjAzOjM0IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI3OjM5IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY0LDE0ICs2NCwxOSBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NPQ19BVTExMDA9eQogQ09ORklHX1NPQ19BVTFYMDA9eQpAQCAtMTE2LDggKzEyMSw4IEBACiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKIENPTkZJR19DUFVfSEFTX0xMU0M9eQpAQCAtMTM1LDYgKzE0MCw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDcsNiArMTUzLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE2NSwxNSArMTcyLDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMTgxLDEyICsxOTMsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0yMDQsNiArMjE2LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjQxLDYgKzI1NCwxMCBAQAogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAKICMKQEAgLTI1Nyw3ICsyNzQsMTAgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0yNzgsMTAgKzI5OCwxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX1RDUF9NRDVTSUc9eQogCiAjCiAjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCkBAIC0zMDAsMTUgKzMyMyw0MiBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCkBAIC0zMTksMTQgKzM2OSwxNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiAjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldApAQCAtMzU0LDcgKzQwNyw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtNDEwLDExICs0NjIsMTMgQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk5LDYgKzU1MywxMCBAQAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTUwOCw2ICs1NjYsMTIgQEAKICMKIENPTkZJR19SQUlEX0FUVFJTPW0KICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTU1MSw2ICs2MTUsOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTU5Miw2ICs2NTgsNyBAQAogQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldApAQCAtNjExLDYgKzY3OCw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjg3LDE3ICs3NTUsMTIgQEAKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTcyMiwxNCArNzg1LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTc0NCw2ICs4MDIsNyBAQAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CkBAIC03ODYsNiArODQ1LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTg0Nyw2ICs5MTEsMTQgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTg1OCw2ICs5MzAsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtODcwLDYgKzk0Myw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC04ODAsNiArOTU0LDcgQEAKIENPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC04OTksMjMgKzk3NCwyNSBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwogIwogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPW0KICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApAQCAtOTQ0LDcgKzEwMjEsNiBAQAogQ09ORklHX1NNQl9GUz1tCiAjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtMTAwMSw2ICsxMDc3LDE0IEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMDEwLDExICsxMDk0LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApAQCAtMTAyOSwxOCArMTExNSwzMCBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiBDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTEwNTIsNiArMTE1MCw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA2MSw2ICsxMTYwLDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiBDT05GSUdfQ1JDMTY9bQogQ09ORklHX0NSQzMyPXkKQEAgLTEwNzIsMyArMTE3Miw1IEBACiBDT05GSUdfVEVYVFNFQVJDSF9CTT1tCiBDT05GSUdfVEVYVFNFQVJDSF9GU009bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKaW5kZXggYzQxODIzYi4uOWU4NmRjZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDM6NDMgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6NDAgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjQsMTQgKzY0LDE5IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAogQ09ORklHX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CiBDT05GSUdfU09DX0FVMTIwMD15CiBDT05GSUdfU09DX0FVMVgwMD15CkBAIC0xMTYsOCArMTIxLDggQEAKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQogQ09ORklHX0NQVV9IQVNfTExTQz15CkBAIC0xMzUsNiArMTQwLDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE0Nyw2ICsxNTMsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTY1LDE2ICsxNzIsMjEgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0xODIsMTIgKzE5NCwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIwNSw2ICsyMTcsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yNTEsNiArMjY0LDEwIEBACiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIAogIwpAQCAtMjY3LDcgKzI4NCwxMCBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CiBDT05GSUdfTkVUX0tFWT15CitDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI4NSwxMCArMzA1LDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTMwNSwxNSArMzI4LDQxIEBACiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCkBAIC0zMjQsMTQgKzM3MywxNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiAjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldApAQCAtMzU5LDcgKzQxMSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtNDA5LDExICs0NjAsMTMgQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk5LDE0ICs1NTIsMjAgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwpAQCAtNTQwLDYgKzU5OSw4IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKQEAgLTU1OSwyMCArNjIwLDIxIEBACiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCiAjCiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC01ODUsNiArNjQ3LDExIEBACiAjIENPTkZJR19QQ01DSUFfU1lNNTNDNTAwIGlzIG5vdCBzZXQKIAogIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisKKyMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKICMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKQEAgLTY3Miw2ICs3MzksNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTc1MSwxMCArODE5LDYgQEAKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLQotIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKQEAgLTc2Niw3ICs4MzAsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTc4Miw2ICs4NDUsNyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC03OTAsMTQgKzg1NCw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC04MTIsNiArODcxLDcgQEAKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldApAQCAtODQzLDYgKzkwMywxMiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTkxNiw2ICs5ODIsMTQgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTkyNyw2ICsxMDAxLDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTkzOCw2ICsxMDEzLDcgQEAKICMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtOTQ4LDYgKzEwMjQsNyBAQAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTk1NSw3ICsxMDMyLDYgQEAKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15Ci1DT05GSUdfWklTT0ZTX0ZTPW0KIENPTkZJR19VREZfRlM9bQogQ09ORklHX1VERl9OTFM9eQogCkBAIC05NzQsMjMgKzEwNTAsMjUgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQpAQCAtMTAyNSw3ICsxMTAzLDYgQEAKIENPTkZJR19TTUJfRlM9eQogIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwODIsNiArMTE1OSwxNCBAQAogQ09ORklHX05MU19VVEY4PW0KIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTEwOTEsMTEgKzExNzYsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0ibWVtPTQ4TSIKIApAQCAtMTEwOSw3ICsxMTk2LDQ0IEBACiAjCiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX0hNQUM9bQorQ09ORklHX0NSWVBUT19YQ0JDPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC0xMTE4LDYgKzEyNDIsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPXkKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CkBAIC0xMTI5LDMgKzEyNTQsNSBAQAogQ09ORklHX1RFWFRTRUFSQ0hfQk09bQogQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCmluZGV4IDdkNmQ5MjEuLjljOTQ0NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjAzOjU2IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI3OjQxIDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY0LDE1ICs2NCwyMCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TT0NfQVUxNTAwPXkKQEAgLTExOCw4ICsxMjMsOCBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKQEAgLTEzNiw3ICsxNDEsOCBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTQ5LDYgKzE1NSw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjcsMTUgKzE3NCwyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE4MywxMiArMTk1LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjA2LDYgKzIxOCw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTI1OSw2ICsyNzIsMTAgQEAKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAogCiAjCkBAIC0yNzUsNyArMjkyLDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjk2LDEwICszMTYsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKIAogIwogIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzE4LDE1ICszNDEsNDIgQEAKIENPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQpAQCAtMzM3LDE0ICszODcsMTcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTM3Miw3ICs0MjUsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTQyOCwxMSArNDgwLDEzIEBACiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ4OCw2ICs1NDIsNyBAQAogIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKIAogIwogIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCkBAIC01MjQsOSArNTc5LDE2IEBACiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND1tCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwpAQCAtNTM2LDYgKzU5OCw3IEBACiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKICMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDUz1tCisjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CkBAIC01NTYsNiArNjE5LDEyIEBACiAjCiBDT05GSUdfUkFJRF9BVFRSUz1tCiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC02MDYsNiArNjc1LDggQEAKIENPTkZJR19DSUNBREFfUEhZPW0KIENPTkZJR19WSVRFU1NFX1BIWT1tCiBDT05GSUdfU01TQ19QSFk9bQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC02NDMsMTQgKzcxNCwxNyBAQAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfUUxBM1hYWD1tCiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzPW0KICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUWEVOX05JQz1tCiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02ODMsNiArNzU3LDcgQEAKIENPTkZJR19QUFBfTVBQRT1tCiBDT05GSUdfUFBQT0U9bQogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKQEAgLTcwMiw2ICs3NzcsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTc4MCwxMCArODU2LDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIAogIwpAQCAtNzk4LDcgKzg3MCw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtODIzLDE0ICs4OTQsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtODQzLDYgKzkwOSw3IEBACiAjCiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTg3Myw3ICs5NDAsNiBAQAogIyBHZW5lcmljIGRldmljZXMKICMKIENPTkZJR19TTkRfQUM5N19DT0RFQz1tCi1DT05GSUdfU05EX0FDOTdfQlVTPW0KICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1ZJUk1JREk9bQogQ09ORklHX1NORF9NVFBBVj1tCkBAIC05MzgsNiArMTAwNCw3IEBACiAjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKIAogIwogIyBBTFNBIE1JUFMgZGV2aWNlcwpAQCAtOTU2LDE4ICsxMDIzLDI4IEBACiAjIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKIAogIworIyBTb0MgYXVkaW8gc3VwcG9ydAorIworIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisKKyMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKIENPTkZJR19TT1VORF9QUklNRT15CisjIENPTkZJR19PQlNPTEVURV9PU1MgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfQlQ4NzggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9GVVNJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRVMxMzcxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0lDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfVklBODJDWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz1tCisKKyMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBVU0Igc3VwcG9ydApAQCAtOTgyLDcgKzEwNTksNiBAQAogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiAjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKQEAgLTk5Miw3ICsxMDY4LDggQEAKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTAxMCwxNCArMTA4NywxMiBAQAogIwogIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCi0jIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci1DT05GSUdfVVNCX0hJRElOUFVUPXkKICMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldApAQCAtMTAzMyw2ICsxMTA4LDcgQEAKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dUQ08gaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTEwNDYsNiArMTEyMiw3IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogCkBAIC0xMDYzLDE4ICsxMTQwLDIwIEBACiAjCiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTEQ9bQorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKQEAgLTExMzEsNiArMTIxMCwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTE0Miw2ICsxMjI5LDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTExNTQsNiArMTI0Miw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMTY0LDYgKzEyNTMsNyBAQAogQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTExODMsMjMgKzEyNzMsMjUgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz1tCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEyMjgsNyArMTMyMCw2IEBACiBDT05GSUdfU01CX0ZTPW0KICMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC0xMjg1LDYgKzEzNzYsMTQgQEAKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTEyOTQsMTEgKzEzOTMsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCkBAIC0xMzEzLDE4ICsxNDE0LDMwIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtMTMzNiw2ICsxNDQ5LDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMzQ1LDYgKzE0NTksNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPW0KIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTM1NiwzICsxNDcxLDUgQEAKIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwppbmRleCBjNjgxYzkxLi41YjE4ZDVkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVGh1IEp1bCAgNiAxMDowMzo1OSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyNzo0MiAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC0yNSw4ICsyNiw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CkBAIC00Miw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02NCwxNSArNjQsMjAgQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKIENPTkZJR19NSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TT0NfQVUxNTUwPXkKIENPTkZJR19TT0NfQVUxWDAwPXkKQEAgLTExNyw4ICsxMjIsOCBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKQEAgLTEzNSw3ICsxNDAsOCBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTQ4LDYgKzE1NCw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjYsMTUgKzE3MywyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE4MiwxMiArMTk0LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjA1LDYgKzIxNyw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTI1OCw2ICsyNzEsMTAgQEAKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAogCiAjCkBAIC0yNzQsNyArMjkxLDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjk1LDEwICszMTUsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKIAogIwogIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzE3LDE1ICszNDAsNDIgQEAKIENPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQpAQCAtMzM2LDE0ICszODYsMTcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTM3MSw3ICs0MjQsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTQyNywxMSArNDc5LDEzIEBACiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5Miw2ICs1NDYsNyBAQAogQ09ORklHX01URF9OQU5EX0lEUz1tCiBDT05GSUdfTVREX05BTkRfQVUxNTUwPW0KICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTI4LDkgKzU4MywxNiBAQAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9bQorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiBDT05GSUdfSURFPXkKK0NPTkZJR19JREVfTUFYX0hXSUZTPTQKIENPTkZJR19CTEtfREVWX0lERT15CiAKICMKQEAgLTU0MCw2ICs2MDIsNyBAQAogQ09ORklHX0JMS19ERVZfSURFRElTSz15CiAjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ1M9bQorIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldApAQCAtNTY3LDggKzYzMCwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JVDgyMTM9bQogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKQEAgLTU3OCw2ICs2NDMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9UQzg2QzAwMT1tCiAjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiAjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKQEAgLTU4OSw2ICs2NTUsMTIgQEAKICMKIENPTkZJR19SQUlEX0FUVFJTPW0KICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTYzOSw2ICs3MTEsOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTY3NiwxNCArNzUwLDE3IEBACiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPW0KIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTcyNCw2ICs4MDEsNyBAQAogQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldApAQCAtNzQzLDYgKzgyMSw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtODIxLDEwICs5MDAsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCkBAIC04MzksNyArOTE0LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC04NjQsMTQgKzkzOCw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC04ODMsNiArOTUyLDcgQEAKICMKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtODkwLDYgKzk2MCwxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCisjIENPTkZJR19ISUQgaXMgbm90IHNldAorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC05NTIsNiArMTAyNywxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtOTYzLDYgKzEwNDYsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtOTc1LDYgKzEwNTksNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtOTg1LDYgKzEwNzAsNyBAQAogQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTEwMDQsMjMgKzEwOTAsMjUgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz1tCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwNDksNyArMTEzNyw2IEBACiBDT05GSUdfU01CX0ZTPW0KICMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTA2LDYgKzExOTMsMTQgQEAKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTExMTUsMTEgKzEyMTAsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCkBAIC0xMTM0LDE4ICsxMjMxLDMwIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtMTE1Nyw2ICsxMjY2LDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMTY2LDYgKzEyNzYsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPW0KIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTE3NywzICsxMjg4LDUgQEAKIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kZGI1NDc3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnCmluZGV4IGRkNGJiMDAuLjEyMTAxODggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MDAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6NDMgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogQ09ORklHX0REQjU0Nzc9eQogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY1LDEwICs2NSwxNCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfRERCNTQ3N19CVVNfRlJFUVVFTkNZPTAKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogQ09ORklHX0k4MjU5PXkKQEAgLTExNyw4ICsxMjEsOCBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKQEAgLTEzNCw2ICsxMzgsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTQ2LDYgKzE1MSw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjQsMTUgKzE3MCwyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE4MCwxMiArMTkxLDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTk4LDYgKzIwOSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTI0MCw2ICsyNTIsMTQgQEAKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKworIwogIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKQEAgLTI1Myw3ICsyNzMsMTAgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI3MywxMCArMjk2LDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zMDYsNyArMzMyLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zODEsNiArNDA2LDEyIEBACiBDT05GSUdfQVRBX09WRVJfRVRIPXkKIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND15CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zOTAsNiArNDIxLDEyIEBACiAjCiBDT05GSUdfUkFJRF9BVFRSUz15CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC00NDAsNiArNDc3LDggQEAKIENPTkZJR19DSUNBREFfUEhZPXkKIENPTkZJR19WSVRFU1NFX1BIWT15CiBDT05GSUdfU01TQ19QSFk9eQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC00NTksNiArNDk4LDcgQEAKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKIENPTkZJR19QQ05FVDMyPXkKKyMgQ09ORklHX1BDTkVUMzJfTkFQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CkBAIC00NzYsNyArNTE2LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTl9TQUE5NzMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC00OTUsMTQgKzUzNSwxOCBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPXkKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz15CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9eQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNTQxLDYgKzU4NSw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjE4LDEwICs2NjMsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKQEAgLTYyOSw3ICs2NzAsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTY1NCwxNCArNjk0LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTY3OSw2ICs3MTQsNyBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNjg2LDYgKzcyMiwxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCisjIENPTkZJR19ISUQgaXMgbm90IHNldAorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC03NDgsMTYgKzc4OSwyNiBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC03ODcsMTcgKzgzOCwxOSBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz15CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwogIwogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgyOSw3ICs4ODIsNiBAQAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtODQ3LDYgKzg5OSwxNCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09eQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTg1NiwxMiArOTE2LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9ImlwPWFueSIKIApAQCAtODc2LDcgKzkzNywxMiBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPXkKIENPTkZJR19DUllQVE9fTlVMTD15CiBDT05GSUdfQ1JZUFRPX01END15CiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC04ODUsOSArOTUxLDE2IEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15CiBDT05GSUdfQ1JZUFRPX1dQNTEyPXkKIENPTkZJR19DUllQVE9fVEdSMTkyPXkKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9eQorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPXkKK0NPTkZJR19DUllQVE9fTFJXPXkKIENPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPXkKIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9eQogQ09ORklHX0NSWVBUT19UV09GSVNIPXkKK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049eQogQ09ORklHX0NSWVBUT19TRVJQRU5UPXkKIENPTkZJR19DUllQVE9fQUVTPXkKIENPTkZJR19DUllQVE9fQ0FTVDU9eQpAQCAtODk5LDYgKzk3Miw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CiBDT05GSUdfQ1JZUFRPX0NSQzMyQz15CitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPXkKIAogIwogIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwpAQCAtOTA3LDYgKzk4MSw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQzMyPXkKQEAgLTkxNCwzICs5ODksNSBAQAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKaW5kZXggOGEzMWNlNC4uMmQ3MTc0NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOAotIyBUdWUgT2N0ICAzIDExOjU3OjUzIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI3OjQ0IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX0RFQ1NUQVRJT049eQogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CkBAIC00Miw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02NSwxMCArNjUsMTQgQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTExNiw4ICsxMjAsOCBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfV0I9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTMzLDYgKzEzNyw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8xMjg9eQpAQCAtMTQ3LDYgKzE1Miw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjUsMTMgKzE3MSwxNiBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMjQ2LDYgKzI1NSwxNCBAQAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQpAQCAtMjYwLDcgKzI3Nyw5IEBACiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9bQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0yODEsMTEgKzMwMCwxMyBAQAogQ09ORklHX0lORVRfVFVOTkVMPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiBDT05GSUdfSVBWNj1tCiBDT05GSUdfSVBWNl9QUklWQUNZPXkKIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKQEAgLTI5OCwxMCArMzE5LDEyIEBACiBDT05GSUdfSU5FVDZfVFVOTkVMPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TVUJUUkVFUz15CiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQVjZfU1VCVFJFRVM9eQogQ09ORklHX05FVFdPUktfU0VDTUFSSz15CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCkBAIC0zODksNiArNDEyLDEwIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDI1LDcgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfVEdUPW0KICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtNDE4LDYgKzQ0Niw3IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNTAyLDYgKzUzMSw5IEBACiAjIFdhbiBpbnRlcmZhY2VzCiAjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX0ZEREk9eQorQ09ORklHX0RFRlhYPW0KK0NPTkZJR19ERUZYWF9NTUlPPXkKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CkBAIC01NjUsMTcgKzU5NywxMiBAQAogQ09ORklHX1JUQz15CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNjAwLDE0ICs2MjcsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjIyLDYgKzY0NCw3IEBACiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKQEAgLTcwOSw2ICs3MzIsMTQgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTcyMCw2ICs3NTEsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtNzI3LDYgKzc1OSw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC03MzcsNiArNzcwLDcgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtODA2LDcgKzg0MCw2IEBACiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtODM1LDYgKzg2OCwxNCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTg0Nyw5ICs4ODgsMTAgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApAQCAtODY2LDE5ICs5MDgsMjQgQEAKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KIENPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQpAQCAtODkzLDYgKzk0MCw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTAyLDYgKzk1MCw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQpAQCAtOTA5LDMgKzk1OCw1IEBACiBDT05GSUdfWkxJQl9JTkZMQVRFPW0KIENPTkZJR19aTElCX0RFRkxBVEU9bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKaW5kZXggNmZhNGY5MS4uMGVlMmZiYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMyCi0jIFR1ZSBKdWwgMjUgMjM6MTU6MDMgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6NDQgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9WUjQxWFg9eQogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTcwLDEwICs3MCwxNCBAQAogIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldApAQCAtMTA2LDYgKzExMCw3IEBACiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfSEFTX0NQVV9WUjQxWFg9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQogCkBAIC0xMTksOCArMTI0LDggQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTM1LDYgKzE0MCw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDcsNiArMTUzLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE2NSwxMyArMTcyLDE3IEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CkBAIC0xNzksMTIgKzE5MCwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIwMiw2ICsyMTMsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yNDEsNiArMjUzLDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKQEAgLTI4OCw5ICszMDgsMTQgQEAKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwpAQCAtMzE5LDYgKzM0NCwxMiBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE9sZCBDRC1ST00gZHJpdmVycyAobm90IFNDU0ksIG5vdCBJREUpCkBAIC0zNTYsNiArMzg3LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC00MzYsMTAgKzQ2OCw2IEBACiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogQ09ORklHX0dQSU9fVlI0MVhYPXkKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCkBAIC00NDcsNyArNDc1LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC00NjMsNiArNDkwLDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNDcxLDE0ICs0OTksOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNDk2LDYgKzUxOSw3IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC01MDMsNiArNTI3LDEyIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CkBAIC01NjMsMTYgKzU5MywyNiBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTU4Miw2ICs2MjIsNyBAQAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNjAxLDggKzY0MiwxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTY0NSwxMSArNjg4LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5VlIwLDE5MjAwIGlkZTA9MHgxZjAsMHgzZjYsNDAgbWVtPThNIgogCkBAIC02NjUsMTAgKzcxMCw2IEBACiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKQEAgLTY3NiwzICs3MTcsNSBAQAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2VtbWEycmhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZW1tYTJyaF9kZWZjb25maWcKaW5kZXggNGM5ZDA0MC4uMjE4ZmU2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZW1tYTJyaF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZW1tYTJyaF9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVGh1IEp1bCAgNiAxMDowNDowNSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyNzo0NiAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC0yNSw4ICsyNiw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CkBAIC00Miw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02NCwxMCArNjQsMTQgQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKIENPTkZJR19DUFVfQklHX0VORElBTj15CkBAIC0xMTYsOCArMTIwLDggQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKQEAgLTEzNCw2ICsxMzgsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTQ3LDYgKzE1Miw3IEBACiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfUFJFRU1QVF9CS0w9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjYsMTcgKzE3MiwyMiBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0xODQsMTIgKzE5NSwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIwNyw2ICsyMTgsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKIENPTkZJR19MQkQ9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjQ5LDYgKzI2MSwxNCBAQAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQpAQCAtMjYyLDcgKzI4MiwxMCBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKQEAgLTI3MCw3ICsyOTMsNiBAQAogIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQotIyBDT05GSUdfSVBfUk9VVEVfRldNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQogIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CkBAIC0yODcsMTMgKzMwOSwxNiBAQAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX1RDUF9NRDVTSUc9eQogCiAjCiAjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCkBAIC0zMDUsMTEgKzMzMCwxNyBAQAogIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9NSVA2PXkKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCitDT05GSUdfSVBWNl9TSVQ9bQogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUFY2X1NVQlRSRUVTPXkKIENPTkZJR19ORVRXT1JLX1NFQ01BUks9eQogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldApAQCAtMzE4LDE5ICszNDksMTI1IEBACiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIAogIwogIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KICMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfSEw9bQorQ09ORklHX0lQNl9ORl9SQVc9bQogCiAjCiAjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQpAQCAtMzYwLDcgKzQ5Nyw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtMzY4LDYgKzUwNCw3IEBACiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTM3Nyw2ICs1MTQsNyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM4Nyw3ICs1MjUsNyBAQAogIwogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9bQogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCkBAIC00MDksMTEgKzU0NywxMyBAQAogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwogIwogQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00NzEsNiArNjExLDcgQEAKICMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwogIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CiAKICMKICMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwpAQCAtNTA0LDYgKzY0NSwxMiBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND1tCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC01MTMsNiArNjYwLDggQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfVEdUPW0KKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAogCiAjCkBAIC01MzEsMTQgKzY4MCwxNyBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0FTX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NBU19MSUJTQVM9bQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCkBAIC01NTEsMjYgKzcwMywzNSBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0FJQzk0WFg9bQorIyBDT05GSUdfQUlDOTRYWF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNjQ5LDcgKzgxMCw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQU5fU0FBOTczMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNjY4LDE0ICs4MjksMTggQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfUUxBM1hYWD1tCisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTcwMyw2ICs4NjgsNyBAQAogIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldApAQCAtNzIzLDYgKzg4OSw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzkwLDEwICs5NTcsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKQEAgLTgwMSw3ICs5NjQsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTgzMCw2ICs5OTIsNyBAQAogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldApAQCAtODY1LDYgKzEwMjgsNyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC04OTgsMjkgKzEwNjIsMjcgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC05MzIsNiArMTA5NCw3IEBACiAjCiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTkzOSw2ICsxMTAyLDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTEwMDEsNiArMTE2OSwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTAxMiw2ICsxMTg4LDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPW0KICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC0xMDIzLDYgKzEyMDAsNyBAQAogIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTAzMyw2ICsxMjExLDcgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtMTA1NywxMSArMTIzNiwxMyBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTA3Myw3ICsxMjU0LDYgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKQEAgLTExMTgsNyArMTI5OCw2IEBACiBDT05GSUdfU01CX0ZTPW0KICMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTc1LDYgKzEzNTQsMTQgQEAKIENPTkZJR19OTFNfVVRGOD1tCiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMTg0LDExICsxMzcxLDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIG1lbT0xOTJtIGlwPWJvb3RwIHJvb3Q9L2Rldi9uZnMgcnciCiAKQEAgLTEyMDIsNyArMTM5MSwxMiBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtMTIxMSw3ICsxNDA1LDEzIEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CkBAIC0xMjI1LDYgKzE0MjUsNyBAQAogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMzQsMTAgKzE0MzUsMTcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXY2NDEyMF9kZWZjb25maWcKaW5kZXggZDViNDk3My4uNWFkNDg3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZXY2NDEyMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXY2NDEyMF9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVGh1IEp1bCAgNiAxMDowNDowNSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyNzo0NiAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC0yNSw4ICsyNiw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogQ09ORklHX01JUFNfRVY2NDEyMD15Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjUsMTAgKzY1LDE0IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKICMgQ09ORklHX0VWQl9QQ0kxIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKQEAgLTExOCw4ICsxMjIsOCBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQpAQCAtMTM2LDYgKzE0MCw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDgsNiArMTUzLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE2NiwxNSArMTcyLDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMTgyLDEyICsxOTMsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0yMDUsNiArMjE2LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjQ3LDYgKzI1OSwxNCBAQAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQpAQCAtMjU5LDcgKzI3OSwxMCBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CiBDT05GSUdfTkVUX0tFWT15CitDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjc5LDEwICszMDIsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTMxMiw3ICszMzgsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM4Niw2ICs0MTEsMTIgQEAKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCiAjCisjIE1pc2MgZGV2aWNlcworIworQ09ORklHX1NHSV9JT0M0PW0KKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTM5NSw2ICs0MjYsMTIgQEAKICMKIENPTkZJR19SQUlEX0FUVFJTPW0KICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTQ0NSw2ICs0ODIsOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTQ4MCwxNCArNTE5LDE3IEBACiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPW0KIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTUxNSw2ICs1NTcsNyBAQAogQ09ORklHX1BQUF9NUFBFPW0KICMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9eQogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CkBAIC01MzQsNiArNTc3LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02MTEsMTAgKzY1NSw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNjIyLDcgKzY2Miw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNjQ3LDE0ICs2ODYsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjcyLDYgKzcwNiw3IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC02NzksNiArNzE0LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTc0MSwxNiArNzgxLDI2IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc4MCwxNyArODMwLDE5IEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldApAQCAtODE5LDcgKzg3MSw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC04MzcsNiArODg4LDE0IEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworQ09ORklHX0RMTT1tCitDT05GSUdfRExNX1RDUD15CisjIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAorCisjCiAjIFByb2ZpbGluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldApAQCAtODQ2LDExICs5MDUsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PTE5Mi4xNjguMS4xOi9tbnQvZGlzazIvZnMuZ2FsIGlwPTE5Mi4xNjguMS4yMTE6MTkyLjE2OC4xLjE6OjpndDo6IgogCkBAIC04NjUsMTggKzkyNiwzMCBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiBDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTg4OCw2ICs5NjEsNyBAQAogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTg5Nyw2ICs5NzEsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT1tCiBDT05GSUdfQ1JDX0NDSVRUPXkKIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9bQpAQCAtOTA0LDMgKzk3OSw1IEBACiBDT05GSUdfWkxJQl9JTkZMQVRFPW0KIENPTkZJR19aTElCX0RFRkxBVEU9bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZXhjaXRlX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2V4Y2l0ZV9kZWZjb25maWcKaW5kZXggNjk3MTQwYy4uNWUxNzlmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZXhjaXRlX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9leGNpdGVfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MDkgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6NDcgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjYsOCArMjcsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDMsNiArNDIsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjUsMTAgKzY1LDE0IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAogQ09ORklHX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQogIyBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldApAQCAtNzYsNiArODAsMTAgQEAKIENPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19JUlFfQ1BVX1JNN0s9eQogQ09ORklHX0lSUV9DUFVfUk05Sz15CitDT05GSUdfTUlQU19STTkxMjI9eQorQ09ORklHX1NFUklBTF9STTkwMDA9eQorQ09ORklHX0dQSV9STTkwMDA9eQorQ09ORklHX1dEVF9STTkwMDA9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCkBAIC0xMDEsNiArMTA5LDcgQEAKIENPTkZJR19DUFVfUk05MDAwPXkKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAogQ09ORklHX1NZU19IQVNfQ1BVX1JNOTAwMD15CitDT05GSUdfV0VBS19PUkRFUklORz15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CkBAIC0xMTcsOCArMTI2LDggQEAKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKQEAgLTEzNiw2ICsxNDUsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTQ5LDYgKzE1OSw3IEBACiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfUFJFRU1QVF9CS0w9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjgsMTUgKzE3OSwyMCBAQAogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE4NCwxMiArMjAwLDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjA3LDYgKzIyMyw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTI0OSw2ICsyNjYsMTQgQEAKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKworIwogIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKQEAgLTI2Miw2ICsyODcsOCBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTI4MiwxMCArMzA5LDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zMTUsNyArMzQ1LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zNDIsNyArMzcxLDcgQEAKICMKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPW0KICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwpAQCAtMzY0LDExICszOTMsMTMgQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDIwLDYgKzQ1MSw3IEBACiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9JRFM9eQogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAogCiAjCkBAIC00NTUsNiArNDg3LDEyIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworQ09ORklHX1NHSV9JT0M0PW0KKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTQ2NCw2ICs1MDIsOCBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9UR1Q9bQorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTQ4MiwxNCArNTIyLDE3IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CiAKICMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIyBTQ1NJIFRyYW5zcG9ydHMKICMKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVNfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTUwMiwyNiArNTQ1LDM1IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorQ09ORklHX1NDU0lfQUlDOTRYWD1tCisjIENPTkZJR19BSUM5NFhYX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC01ODUsMTQgKzYzNywxNyBAQAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfUUxBM1hYWD1tCiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzPW0KICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUWEVOX05JQz1tCiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02MzIsNiArNjg3LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03MDcsNiArNzYzLDcgQEAKICMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1dEVF9STTlLX0dQST1tCiAKICMKICMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCkBAIC03MjQsMTAgKzc4MSw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNzM1LDcgKzc4OCw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNzUxLDYgKzgwMyw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTc1OSwxNCArODEyLDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTc4Miw2ICs4MzAsNyBAQAogIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CkBAIC03OTgsNiArODQ3LDcgQEAKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldApAQCAtODMxLDYgKzg4MSwxMiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTg0Myw4ICs4OTksOCBAQAogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCkBAIC04NTQsOSArOTEwLDExIEBACiAjIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC04ODQsMTQgKzk0MiwxMyBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD1tCi1DT05GSUdfVVNCX0hJRElOUFVUPXkKICMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldApAQCAtOTEzLDYgKzk3MCw3IEBACiAjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HVENPIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC05MjcsNiArOTg1LDcgQEAKICMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIApAQCAtOTQ0LDE5ICsxMDAzLDIxIEBACiAjCiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMTQsMTYgKzEwNzUsMjYgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMDM0LDYgKzExMDUsNyBAQAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTEwNTYsMTEgKzExMjgsMTMgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEwNzIsNyArMTE0Niw2IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CkBAIC0xMTA3LDcgKzExODAsNiBAQAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtMTE3OSw2ICsxMjUxLDE0IEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMTg4LDExICsxMjY4LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApAQCAtMTIwNiwxNiArMTI4OCwyNyBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiAjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CkBAIC0xMjI5LDYgKzEzMjIsNyBAQAogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMzgsNiArMTMzMiw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQpAQCAtMTI0NSwzICsxMzQwLDUgQEAKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCmluZGV4IGY5ODEyZDEuLjg2NGRlMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MTAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6NDggMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjQsMTMgKzY0LDE4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAogQ09ORklHX0FSQz15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUFfU1VQUE9SVF9CUk9LRU49eQogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKICMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CkBAIC0xMjMsOCArMTI4LDggQEAKIENPTkZJR19CT0FSRF9TQ0FDSEU9eQogQ09ORklHX0lQMjJfQ1BVX1NDQUNIRT15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CkBAIC0xNDEsNiArMTQ2LDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE1Myw2ICsxNTksNyBAQAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTcxLDE2ICsxNzgsMjEgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CkBAIC0xODgsMTIgKzIwMCwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIxMSw2ICsyMjMsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yMzgsNyArMjUxLDYgQEAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAogIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CkBAIC0yNTIsNiArMjY0LDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNjUsNyArMjg1LDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjg2LDEwICszMDksMTMgQEAKIENPTkZJR19JTkVUX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTMzMSwxMSArMzU3LDE3IEBACiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JUFY2X01JUDY9eQogQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT049bQorQ09ORklHX0lQVjZfU0lUPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQVjZfU1VCVFJFRVM9eQogQ09ORklHX05FVFdPUktfU0VDTUFSSz15CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CkBAIC0zNDYsMTkgKzM3OCw0MyBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQpAQCAtMzc1LDYwICs0MzEsNDUgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX0NUX0FDQ1Q9eQotQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTks9bQotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfVEZUUD1tCi1DT05GSUdfSVBfTkZfQU1BTkRBPW0KLUNPTkZJR19JUF9ORl9QUFRQPW0KLUNPTkZJR19JUF9ORl9IMzIzPW0KLUNPTkZJR19JUF9ORl9TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KLUNPTkZJR19JUF9ORl9OQVRfUFBUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0gzMjM9bQotQ09ORklHX0lQX05GX05BVF9TSVA9bQorQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCitDT05GSUdfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1BQVFA9bQorQ09ORklHX05GX05BVF9IMzIzPW0KK0NPTkZJR19ORl9OQVRfU0lQPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9SQVc9bQpAQCAtNDM5LDYgKzQ4MCw3IEBACiAjCiAjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQpAQCAtNDQ4LDYgKzQ5MCw3IEBACiBDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCiBDT05GSUdfSVA2X05GX01BVENIX0FIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCiBDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQpAQCAtNDg0LDcgKzUyNyw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTQ5Miw2ICs1MzQsNyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKIENPTkZJR19ORVRfU0NIRUQ9eQorQ09ORklHX05FVF9TQ0hfRklGTz15CiAjIENPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVk9eQogIyBDT05GSUdfTkVUX1NDSF9DTEtfQ1BVIGlzIG5vdCBzZXQKQEAgLTU0Niw2ICs1ODksNyBAQAogQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KICMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0ZJQl9SVUxFUz15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTU1Niw3ICs2MDAsNiBAQAogIwogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwpAQCAtNTkyLDYgKzYzNSwxMCBAQAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTYwMSw2ICs2NDgsOCBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9bQogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfVEdUPW0KKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwpAQCAtNjIwLDI0ICs2NjksMzAgQEAKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CiAKICMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIyBTQ1NJIFRyYW5zcG9ydHMKICMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KIENPTkZJR19TQ1NJX1NBU19BVFRSUz1tCisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKICMKIENPTkZJR19JU0NTSV9UQ1A9bQogQ09ORklHX1NHSVdEOTNfU0NTST15Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCiAjCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CkBAIC02NzksNiArNzM0LDggQEAKIENPTkZJR19DSUNBREFfUEhZPW0KICMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNzMwLDYgKzc4Nyw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzUyLDYgKzgxMCw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9bQogQ09ORklHX01PVVNFX1NFUklBTD1tCkBAIC04MTUsMTAgKzg3NCw2IEBACiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogQ09ORklHX1JBV19EUklWRVI9bQogQ09ORklHX01BWF9SQVdfREVWUz0yNTYKIApAQCAtODI2LDcgKzg4MSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtODUxLDE0ICs5MDUsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtODg3LDYgKzkzNiw3IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyNCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19TR0lfQ0xVVDIyND15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC04OTQsNiArOTQ0LDEyIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CkBAIC05NTQsNiArMTAxMCwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9bQpAQCAtOTYzLDYgKzEwMjcsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtOTc0LDYgKzEwMzksNyBAQAogQ09ORklHX1hGU19TRUNVUklUWT15CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz1tCiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC05ODcsNiArMTA1Myw3IEBACiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTk0LDcgKzEwNjEsNiBAQAogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLUNPTkZJR19aSVNPRlNfRlM9bQogQ09ORklHX1VERl9GUz1tCiBDT05GSUdfVURGX05MUz15CiAKQEAgLTEwMTMsMTcgKzEwNzksMjAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTQyLDYgKzEyMTEsMTQgQEAKIENPTkZJR19OTFNfVVRGOD1tCiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMTUxLDExICsxMjI4LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApAQCAtMTE3MCwxOCArMTI0OSwzMCBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiBDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTExOTMsNiArMTI4NCw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIwMiw2ICsxMjk0LDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9bQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9bQpAQCAtMTIxMywzICsxMzA2LDUgQEAKIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCmluZGV4IGYyMTE4NmMuLjdiMmY1ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MTAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6NDkgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNzAsMTAgKzcwLDE0IEBACiAjIENPTkZJR19SRVBMSUNBVEVfRVhIQU5ETEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfQVJDPXkKIENPTkZJR19ETUFfSVAyNz15CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQpAQCAtMTIxLDggKzEyNSw4IEBACiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQpAQCAtMTQ1LDggKzE0OSwxMCBAQAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfU01QPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKK0NPTkZJR19OUl9DUFVTX0RFRkFVTFRfNjQ9eQogQ09ORklHX05SX0NQVVM9NjQKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CkBAIC0xNjIsNiArMTY4LDcgQEAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfQktMPXkKICMgQ09ORklHX01JUFNfSU5TQU5FX0xBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTgwLDE3ICsxODcsMjIgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19DUFVTRVRTPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE5OCwxMiArMjEwLDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjIyLDYgKzIzNCw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKQEAgLTI2MywxMSArMjc2LDIwIEBACiAjIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKK0NPTkZJR19TWVNWSVBDX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CiBDT05GSUdfTUlQUzMyX04zMj15CiBDT05GSUdfQklORk1UX0VMRjMyPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yODEsNyArMzAzLDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMzAyLDEwICszMjcsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTMzNSw3ICszNjMsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM0Myw2ICszNzAsNyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKIENPTkZJR19ORVRfU0NIRUQ9eQorQ09ORklHX05FVF9TQ0hfRklGTz15CiAjIENPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVk9eQogIyBDT05GSUdfTkVUX1NDSF9DTEtfQ1BVIGlzIG5vdCBzZXQKQEAgLTM3NCw2ICs0MDIsNyBAQAogQ09ORklHX05FVF9DTFNfRlc9bQogQ09ORklHX05FVF9DTFNfVTMyPW0KICMgQ09ORklHX0NMU19VMzJfUEVSRiBpcyBub3Qgc2V0CitDT05GSUdfQ0xTX1UzMl9NQVJLPXkKIENPTkZJR19ORVRfQ0xTX1JTVlA9bQogQ09ORklHX05FVF9DTFNfUlNWUDY9bQogIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CkBAIC00NDgsNiArNDc3LDEyIEBACiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND1tCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC00NTcsNiArNDkyLDggQEAKICMKIENPTkZJR19SQUlEX0FUVFJTPW0KIENPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1RHVD1tCitDT05GSUdfU0NTSV9ORVRMSU5LPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC00NzYsMTQgKzUxMywxNyBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQorQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CiAKICMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIyBTQ1NJIFRyYW5zcG9ydHMKICMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiBDT05GSUdfU0NTSV9GQ19BVFRSUz15CiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiBDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQorQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVNfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTQ5NiwyNCArNTM2LDMzIEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorQ09ORklHX1NDU0lfQUlDOTRYWD1tCisjIENPTkZJR19BSUM5NFhYX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNTI5LDYgKzU3OCw3IEBACiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQogQ09ORklHX0JMS19ERVZfRE09bQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RNX0NSWVBUPW0KIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fTUlSUk9SPW0KQEAgLTU4Myw2ICs2MzMsOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTYxOSwxNCArNjcxLDE3IEBACiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPW0KIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTcyNCwxMCArNzc5LDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCkBAIC03MzUsNyArNzg2LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC03NjAsMTQgKzgxMCw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC03NzksNiArODI0LDcgQEAKICMKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtODQ4LDYgKzg5NCwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODU5LDYgKzkxMyw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKIENPTkZJR19KQkRfREVCVUc9eQogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtODcwLDYgKzkyNSw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg4MSw2ICs5MzcsNyBAQAogQ09ORklHX0FVVE9GU19GUz1tCiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTAwLDE3ICs5NTcsMjAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CkBAIC05NDIsNyArMTAwMiw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC05NzUsNiArMTAzNCwxNCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTk4NCwxMSArMTA1MSwxMyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKQEAgLTEwMDMsNyArMTA3MiwxMiBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC0xMDEyLDkgKzEwODYsMTYgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19MUlc9bQogQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCkBAIC0xMDI2LDYgKzExMDcsNyBAQAogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzUsNiArMTExNyw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMTY9bQogQ09ORklHX0NSQzMyPXkKQEAgLTEwNDIsMyArMTEyNSw1IEBACiBDT05GSUdfWkxJQl9JTkZMQVRFPW0KIENPTkZJR19aTElCX0RFRkxBVEU9bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwppbmRleCA2MWUwNjlhLi4xNDM5OGU4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjExIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI3OjUwIDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY0LDE1ICs2NCwxNyBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19BUkM9eQotQ09ORklHX0RNQV9JUDMyPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQotQ09ORklHX09XTl9ETUE9eQogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKICMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CkBAIC0xMjQsOCArMTI2LDggQEAKIENPTkZJR19SNTAwMF9DUFVfU0NBQ0hFPXkKIENPTkZJR19STTcwMDBfQ1BVX1NDQUNIRT15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQpAQCAtMTQxLDYgKzE0Myw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTUzLDYgKzE1Niw3IEBACiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNzEsMTYgKzE3NSwyMSBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE4OCwxMiArMTk3LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjA2LDYgKzIxNSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKQEAgLTI0NiwxMSArMjU2LDIwIEBACiAjIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKK0NPTkZJR19TWVNWSVBDX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CiAjIENPTkZJR19NSVBTMzJfTjMyIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGMzI9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKworIwogIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKQEAgLTI2NCw3ICsyODMsMTAgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI4NCwxMCArMzA2LDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zMTcsNyArMzQyLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zOTMsNiArNDE3LDEyIEBACiBDT05GSUdfQVRBX09WRVJfRVRIPXkKIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND15CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC00MDIsNiArNDMyLDggQEAKICMKIENPTkZJR19SQUlEX0FUVFJTPXkKIENPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1RHVD15CitDT05GSUdfU0NTSV9ORVRMSU5LPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC00MjEsMTQgKzQ1MywxNyBAQAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TQVNfQVRUUlM9eQorQ09ORklHX1NDU0lfU0FTX0xJQlNBUz15CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVNfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTQ0NiwyNCArNDgxLDMzIEBACiBDT05GSUdfQUlDN1hYWF9SRUdfUFJFVFRZX1BSSU5UPXkKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0FJQzk0WFg9eQorIyBDT05GSUdfQUlDOTRYWF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNTE3LDYgKzU2MSw4IEBACiBDT05GSUdfQ0lDQURBX1BIWT15CiBDT05GSUdfVklURVNTRV9QSFk9eQogQ09ORklHX1NNU0NfUEhZPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNTUzLDE0ICs1OTksMTcgQEAKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX1FMQTNYWFg9eQogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz15CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9eQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNjAwLDYgKzY0OSw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjc4LDEwICs3MjgsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKQEAgLTY4OSw3ICs3MzUsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTcxNCwxNCArNzU5LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTczOSw2ICs3NzksNyBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzQ2LDYgKzc4NywxMiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTgwOCwxNiArODU1LDI2IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtODI4LDYgKzg4NSw3IEBACiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz15CitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTg0NywxNyArOTA1LDIwIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldApAQCAtODg4LDcgKzk0OSw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC05MTcsNiArOTc3LDE0IEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworQ09ORklHX0RMTT15CitDT05GSUdfRExNX1RDUD15CisjIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAorCisjCiAjIFByb2ZpbGluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldApAQCAtOTI2LDEyICs5OTQsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCkBAIC05NDYsNyArMTAxNSwxMiBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPXkKIENPTkZJR19DUllQVE9fTlVMTD15CiBDT05GSUdfQ1JZUFRPX01END15CiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC05NTUsOSArMTAyOSwxNiBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9eQogQ09ORklHX0NSWVBUT19XUDUxMj15CiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz15CitDT05GSUdfQ1JZUFRPX0xSVz15CiBDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0ZDUllQVD15CiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKIENPTkZJR19DUllQVE9fVFdPRklTSD15CitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPXkKIENPTkZJR19DUllQVE9fU0VSUEVOVD15CiBDT05GSUdfQ1JZUFRPX0FFUz15CiBDT05GSUdfQ1JZUFRPX0NBU1Q1PXkKQEAgLTk2OSw2ICsxMDUwLDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9eQogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC05NzcsNiArMTA1OSw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQzMyPXkKQEAgLTk4NCwzICsxMDY3LDUgQEAKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qYWd1YXItYXR4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCmluZGV4IDg4OTY2NjYuLmIzODk3ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MTIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6NTEgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjUsMTAgKzY1LDE0IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19KQUdVQVJfRE1BTE9XPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogQ09ORklHX0xJTUlURURfRE1BPXkKQEAgLTEwNiw2ICsxMTAsNyBAQAogQ09ORklHX0NQVV9STTkwMDA9eQogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX0hBU19DUFVfUk05MDAwPXkKK0NPTkZJR19XRUFLX09SREVSSU5HPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKQEAgLTEyNCw4ICsxMjksOCBAQAogQ09ORklHX1JNNzAwMF9DUFVfU0NBQ0hFPXkKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKQEAgLTE0MSw2ICsxNDYsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTcxLDE0ICsxNzcsMTkgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0xODYsMTIgKzE5NywxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIwOCw2ICsyMTksNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yNDksNiArMjYxLDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNzcsMTMgKzI5NywxNSBAQAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CiBDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CkBAIC0yOTQsNiArMzE2LDggQEAKIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQogQ09ORklHX05FVFdPUktfU0VDTUFSSz15CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldApAQCAtMzY5LDYgKzM5MywxMSBAQAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9bQorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zNzgsNiArNDA3LDEyIEBACiAjCiBDT05GSUdfUkFJRF9BVFRSUz1tCiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC00MjgsNiArNDYzLDggQEAKIENPTkZJR19DSUNBREFfUEhZPW0KIENPTkZJR19WSVRFU1NFX1BIWT1tCiBDT05GSUdfU01TQ19QSFk9bQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC00NzUsNiArNTEyLDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKQEAgLTQ4MywxNCArNTIxLDE3IEBACiBDT05GSUdfTVY2NDNYWF9FVEhfMD15CiBDT05GSUdfTVY2NDNYWF9FVEhfMT15CiBDT05GSUdfTVY2NDNYWF9FVEhfMj15CitDT05GSUdfUUxBM1hYWD1tCiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzPW0KICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUWEVOX05JQz1tCiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC01NzQsMTAgKzYxNSw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNjA4LDE0ICs2NDUsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjI3LDYgKzY1OSw3IEBACiAjCiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTY5NSwxNCArNzI4LDIzIEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC03MTIsNiArNzU0LDcgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNzMxLDggKzc3NCwxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIApAQCAtNzUyLDYgKzc5Nyw3IEBACiAjCiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKQEAgLTc1OSw3ICs4MDUsNiBAQAogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAKQEAgLTc3OSwxMSArODI0LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApAQCAtNzk4LDYgKzg0NSwxMCBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KQEAgLTgwNyw5ICs4NTgsMTQgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtODIxLDYgKzg3Nyw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtODMwLDYgKzg4Nyw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPW0KICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMTY9bQogQ09ORklHX0NSQzMyPW0KQEAgLTgzNywzICs4OTUsNSBAQAogQ09ORklHX1pMSUJfSU5GTEFURT1tCiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2phenpfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvamF6el9kZWZjb25maWcKaW5kZXggODM1NzY0ZDguLmRhY2YwYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2phenpfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2phenpfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTktcmMxCi0jIFN1biBPY3QgIDggMTk6MDM6MDcgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6NTIgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtNDAsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjUsMTEgKzY3LDE0IEBACiAjIENPTkZJR19NSVBTX01BR05VTV80MDAwIGlzIG5vdCBzZXQKIENPTkZJR19PTElWRVRUSV9NNzAwPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfQVJDPXkKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKQEAgLTE0MCw2ICsxNDUsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKIENPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE1Miw2ICsxNTgsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTcxLDYgKzE3OCw3IEBACiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CkBAIC0xNzksOCArMTg3LDggQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKQEAgLTI1Nyw2ICsyNjUsMTQgQEAKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKworIwogIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKQEAgLTI3MSw3ICsyODcsOSBAQAogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPW0KK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjk4LDYgKzMxNiw3IEBACiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX1RDUF9NRDVTSUc9eQogCiAjCiAjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCkBAIC0zMTcsOCArMzM2LDggQEAKIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCi0jIENPTkZJR19JUFY2X1NVQlRSRUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX1NFQ01BUks9eQogQ09ORklHX05FVEZJTFRFUj15CkBAIC0zMzEsMTYgKzM1MCwzOSBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQpAQCAtMzYyLDI1ICs0MDQsMTMgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX0lQX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSz1tCi1DT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfVEZUUD1tCi1DT05GSUdfSVBfTkZfQU1BTkRBPW0KLUNPTkZJR19JUF9ORl9QUFRQPW0KLUNPTkZJR19JUF9ORl9IMzIzPW0KLUNPTkZJR19JUF9ORl9TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCkBAIC0zOTEsMjYgKzQyMSwyNSBAQAogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KLUNPTkZJR19JUF9ORl9OQVRfUFBUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0gzMjM9bQotQ09ORklHX0lQX05GX05BVF9TSVA9bQorQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCitDT05GSUdfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1BQVFA9bQorQ09ORklHX05GX05BVF9IMzIzPW0KK0NPTkZJR19ORl9OQVRfU0lQPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQpAQCAtNDI0LDYgKzQ1Myw3IEBACiAjCiAjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQpAQCAtNDMzLDYgKzQ2Myw3IEBACiBDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCiBDT05GSUdfSVA2X05GX01BVENIX0FIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCiBDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQpAQCAtNTAyLDYgKzUzMyw3IEBACiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwogQ09ORklHX05FVF9TQ0hFRD15CitDT05GSUdfTkVUX1NDSF9GSUZPPXkKIENPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTPXkKICMgQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIX0NMS19DUFUgaXMgbm90IHNldApAQCAtNjIwLDcgKzY1Miw2IEBACiAjCiBDT05GSUdfQkxLX0RFVl9GRD1tCiBDT05GSUdfUEFSSURFPW0KLUNPTkZJR19QQVJJREVfUEFSUE9SVD1tCiAKICMKICMgUGFyYWxsZWwgSURFIGhpZ2gtbGV2ZWwgZHJpdmVycwpAQCAtNjY1LDYgKzY5NiwxMCBAQAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTY3NCw2ICs3MDksNyBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9bQogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfVEdUPW0KIENPTkZJR19TQ1NJX05FVExJTks9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTY5NCw2ICs3MzAsNyBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKIAogIwogIyBTQ1NJIFRyYW5zcG9ydHMKQEAgLTgwMiw2ICs4MzksNyBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwpAQCAtODMyLDcgKzg3MCw2IEBACiAjIENPTkZJR19BQzMyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVBSSUNPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAotIyBDT05GSUdfTEFOX1NBQTk3MzAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CiAKICMKQEAgLTk3MiwxNyArMTAwOSwxMiBAQAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtMTAxOSwxMSArMTA1MSw2IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC0xMDU0LDYgKzEwODEsMTIgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKQEAgLTExMTQsNiArMTE0NywxNSBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKyMgQ09ORklHX0tTMDEwOCBpcyBub3Qgc2V0CisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPW0KQEAgLTExMjMsNiArMTE2NSw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtMTE1OCw3ICsxMjAxLDYgQEAKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15Ci1DT05GSUdfWklTT0ZTX0ZTPW0KIENPTkZJR19VREZfRlM9bQogQ09ORklHX1VERl9OTFM9eQogCkBAIC0xMTg1LDcgKzEyMjcsNyBAQAogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMzIxLDYgKzEzNjMsMTAgQEAKICMKICMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCiAjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgUHJvZmlsaW5nIHN1cHBvcnQKQEAgLTEzMzUsOSArMTM4MSwxMCBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKQEAgLTEzNTUsMTkgKzE0MDIsMjQgQEAKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KIENPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQpAQCAtMTM4Miw2ICsxNDM0LDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMzkxLDYgKzE0NDQsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPW0KIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTQwMiwzICsxNDU2LDUgQEAKIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCmluZGV4IDUwZmQ5NTUuLjI5ZWQ3NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MTIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6NTMgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjQsMTUgKzY0LDIwIEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQogIyBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19CSUdfRU5ESUFOPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CiBDT05GSUdfTUlQU19UWDM5Mjc9eQogQ09ORklHX1NXQVBfSU9fU1BBQ0U9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQpAQCAtMTE0LDggKzExOSw4IEBACiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKQEAgLTEzMCw2ICsxMzUsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTQzLDYgKzE0OSw3IEBACiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFMxNzQyPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTYxLDE1ICsxNjgsMjAgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0xNzcsMTIgKzE4OSwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTE5NSw2ICsyMDcsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yMzcsNiArMjUwLDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNTAsNyArMjcxLDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0yNzAsMTAgKzI5NCwxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX1RDUF9NRDVTSUc9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldApAQCAtMzAzLDcgKzMzMCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtMzc4LDYgKzQwNCwxMiBAQAogQ09ORklHX0FUQV9PVkVSX0VUSD15CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9eQorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtMzg3LDYgKzQxOSwxMiBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9eQogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNDM3LDYgKzQ3NSw4IEBACiBDT05GSUdfQ0lDQURBX1BIWT15CiBDT05GSUdfVklURVNTRV9QSFk9eQogQ09ORklHX1NNU0NfUEhZPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNDcyLDE0ICs1MTIsMTcgQEAKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX1FMQTNYWFg9eQogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz15CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9eQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNTE4LDYgKzU2MSw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNTY1LDYgKzYwOSw3IEBACiAjIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CitDT05GSUdfTU9YQV9TTUFSVElPX05FVz15CiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOS19HVCBpcyBub3Qgc2V0CkBAIC01ODYsNiArNjMxLDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX1RYWDk9eQogQ09ORklHX0hBU19UWFg5X1NFUklBTD15CitDT05GSUdfU0VSSUFMX1RYWDlfTlJfVUFSVFM9NgogIyBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfVFhYOV9TVERTRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CkBAIC02MDgsMTAgKzY1NCw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNjE5LDcgKzY2MSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNjQ0LDE0ICs2ODUsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjY2LDYgKzcwMiw3IEBACiAjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKQEAgLTY4Miw2ICs3MTksNyBAQAogIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CkBAIC03MTEsNiArNzQ5LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTc3MywxNCArODE2LDI0IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgxMCwxNyArODYzLDE5IEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldApAQCAtODQ5LDcgKzkwNCw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC04NjcsNiArOTIxLDE0IEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworQ09ORklHX0RMTT15CitDT05GSUdfRExNX1RDUD15CisjIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAorCisjCiAjIFByb2ZpbGluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldApAQCAtODc2LDEyICs5MzgsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCkBAIC04OTYsNyArOTU5LDEyIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9eQogQ09ORklHX0NSWVBUT19OVUxMPXkKIENPTkZJR19DUllQVE9fTUQ0PXkKIENPTkZJR19DUllQVE9fTUQ1PXkKQEAgLTkwNSw5ICs5NzMsMTYgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPXkKIENPTkZJR19DUllQVE9fV1A1MTI9eQogQ09ORklHX0NSWVBUT19UR1IxOTI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD15CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorQ09ORklHX0NSWVBUT19MUlc9eQogQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9eQogQ09ORklHX0NSWVBUT19CTE9XRklTSD15CiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9eQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj15CiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9eQogQ09ORklHX0NSWVBUT19BRVM9eQogQ09ORklHX0NSWVBUT19DQVNUNT15CkBAIC05MTksNiArOTk0LDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9eQogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC05MjcsNiArMTAwMyw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQzMyPXkKQEAgLTkzNCwzICsxMDExLDUgQEAKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcKaW5kZXggMDVmNTM5Zi4uYTE0MzdiMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0MjAwX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjEyIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI3OjU0IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiBDT05GSUdfTEFTQVQ9eQogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CkBAIC00Miw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02OCwxMCArNjgsMTQgQEAKIENPTkZJR19EUzE2MDM9eQogQ09ORklHX0xBU0FUX1NZU0NUTD15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CiBDT05GSUdfTUlQU19OSUxFND15CkBAIC0xMjEsOCArMTI1LDggQEAKIENPTkZJR19CT0FSRF9TQ0FDSEU9eQogQ09ORklHX1I1MDAwX0NQVV9TQ0FDSEU9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQpAQCAtMTM5LDYgKzE0Myw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNTEsNiArMTU2LDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE2OSwxNSArMTc1LDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMTg1LDEyICsxOTYsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0yMDgsNiArMjE5LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjUwLDYgKzI2MiwxNCBAQAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQpAQCAtMjYyLDcgKzI4MiwxMCBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CiBDT05GSUdfTkVUX0tFWT15CitDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjc5LDEwICszMDIsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTMxMiw3ICszMzgsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM2NywxMSArMzkyLDEzIEBACiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQyNyw2ICs0NTQsNyBAQAogIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKIAogIwogIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCkBAIC00NjEsOSArNDg5LDE2IEBACiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND1tCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwpAQCAtNTAwLDggKzUzNSwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JVDgyMTM9bQogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKQEAgLTUxMSw2ICs1NDgsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9UQzg2QzAwMT1tCiAjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiAjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKQEAgLTUyMiw2ICs1NjAsMTIgQEAKICMKIENPTkZJR19SQUlEX0FUVFJTPW0KICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTU3Miw2ICs2MTYsOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTYwNywxNCArNjUzLDE3IEBACiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPW0KIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTY1Myw2ICs3MDIsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTczMCwxMCArNzgwLDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCkBAIC03NDEsNyArNzg3LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC03NjYsMTQgKzgxMSw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC03OTEsNiArODMxLDcgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTc5OCw2ICs4MzksMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtODYwLDYgKzkwNiwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODY5LDEzICs5MjMsMTUgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg4Niw2ICs5NDIsNyBAQAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC05MDUsMjMgKzk2MiwyNSBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwogIwogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC05NDcsNyArMTAwNiw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC05NjUsNiArMTAyMywxNCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTk3NCwxMSArMTA0MCwxMyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKQEAgLTk5MywxOCArMTA2MSwzMCBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiBDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTEwMTYsNiArMTA5Niw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAyNSw2ICsxMTA2LDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTAzMiwzICsxMTE0LDUgQEAKIENPTkZJR19aTElCX0lORkxBVEU9bQogQ09ORklHX1pMSUJfREVGTEFURT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKaW5kZXggOTZlOTQxMC4uOGQyMWJiOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzEKLSMgRnJpIE9jdCAgNiAxNzozNDo1NSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyNzo1NSAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC00MCw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02MiwxMSArNjQsMTQgQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CkBAIC0xMzIsOCArMTM3LDggQEAKIENPTkZJR19NSVBTX0NQVV9TQ0FDSEU9eQogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogIyBDT05GSUdfTUlQU19NVF9ESVNBQkxFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogQ09ORklHX01JUFNfTVRfU01QPXkKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01JUFNfTVQ9eQogQ09ORklHX1NZU19TVVBQT1JUU19NVUxUSVRIUkVBRElORz15CkBAIC0xNTcsNiArMTYyLDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfU01QPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKQEAgLTE3Myw2ICsxNzksNyBAQAogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9CS0w9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xOTIsNiArMTk5LDcgQEAKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKQEAgLTE5OSw4ICsyMDcsOCBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKQEAgLTI1OSw3ICsyNjcsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogQ09ORklHX01NVT15CiAKICMKQEAgLTI4MCw2ICsyODcsMTQgQEAKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKworIwogIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKQEAgLTI5NCw3ICszMDksOSBAQAogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CiBDT05GSUdfTkVUX0tFWT15CitDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CkBAIC0zMDIsNyArMzE5LDYgQEAKICMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKLUNPTkZJR19JUF9ST1VURV9GV01BUks9eQogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CiAjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKQEAgLTMzMSw2ICszNDcsNyBAQAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKIAogIwogIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzc5LDggKzM5Niw4IEBACiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQotIyBDT05GSUdfSVBWNl9TVUJUUkVFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19TRUNNQVJLPXkKIENPTkZJR19ORVRGSUxURVI9eQpAQCAtMzkzLDE1ICs0MTAsMzcgQEAKIENPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQpAQCAtNDI1LDI1ICs0NjQsMTMgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX0NUX0FDQ1Q9eQotQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTks9bQotQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLSMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi1DT05GSUdfSVBfTkZfUFBUUD1tCi1DT05GSUdfSVBfTkZfSDMyMz1tCi1DT05GSUdfSVBfTkZfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQpAQCAtNDU0LDI2ICs0ODEsMjUgQEAKIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9OQVQ9bQotQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQotQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KLUNPTkZJR19JUF9ORl9OQVRfSVJDPW0KLUNPTkZJR19JUF9ORl9OQVRfRlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfVEZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCi1DT05GSUdfSVBfTkZfTkFUX1BQVFA9bQotQ09ORklHX0lQX05GX05BVF9IMzIzPW0KLUNPTkZJR19JUF9ORl9OQVRfU0lQPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KQEAgLTQ4Nyw2ICs1MTMsNyBAQAogIwogIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KQEAgLTQ5Niw2ICs1MjMsNyBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVA2X05GX01BVENIX01IPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KQEAgLTU2OCw2ICs1OTYsNyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKIENPTkZJR19ORVRfU0NIRUQ9eQorQ09ORklHX05FVF9TQ0hfRklGTz15CiBDT05GSUdfTkVUX1NDSF9DTEtfSklGRklFUz15CiAjIENPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSF9DTEtfQ1BVIGlzIG5vdCBzZXQKQEAgLTY1NSw2ICs2ODQsNyBAQAogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwogIwogQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKQEAgLTcxOCw2ICs3NDgsNyBAQAogIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKIAogIwogIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCkBAIC03NTcsNiArNzg4LDEyIEBACiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND1tCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQpAQCAtODAxLDYgKzgzOCw3IEBACiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUElJWD15CitDT05GSUdfQkxLX0RFVl9JVDgyMTM9bQogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKQEAgLTgxMCw2ICs4NDgsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9UQzg2QzAwMT1tCiAjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiAjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKQEAgLTgyMSw2ICs4NjAsNyBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9bQogQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfVEdUPW0KIENPTkZJR19TQ1NJX05FVExJTks9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTg0MSw2ICs4ODEsNyBAQAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtODg5LDYgKzkzMCw3IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwpAQCAtOTY0LDYgKzEwMDYsNyBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwMiw3ICsxMDQ1LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTl9TQUE5NzMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC0xMDIyLDE0ICsxMDY1LDE3IEBACiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz1tCiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9bQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtMTE0NiwxMCArMTE5Miw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtMTE1Nyw3ICsxMTk5LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC0xMTgyLDExICsxMjIzLDYgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTEyMTUsNiArMTI1MSwxMiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPW0KKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTEyNzcsNiArMTMxOSwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTI4Niw2ICsxMzM2LDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC0xMzI3LDcgKzEzNzgsNiBAQAogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLUNPTkZJR19aSVNPRlNfRlM9bQogQ09ORklHX1VERl9GUz1tCiBDT05GSUdfVURGX05MUz15CiAKQEAgLTEzNjUsNiArMTQxNSwyMCBAQAogIyBDT05GSUdfQkVGU19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQkZTX0ZTPW0KIENPTkZJR19FRlNfRlM9bQorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1ZYRlNfRlM9bQogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CkBAIC0xNDcwLDkgKzE1MzQsMTAgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCkBAIC0xNDg5LDE5ICsxNTU0LDI0IEBACiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCiBDT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiBDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KQEAgLTE1MTYsNiArMTU4Niw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUyNSw2ICsxNTk2LDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTUzNiwzICsxNjA4LDUgQEAKIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnCmluZGV4IDAzZWZjZmQuLjJhY2I5OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MTMgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6NTYgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjQsMTAgKzY0LDE0IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CkBAIC0xMTcsOCArMTIxLDggQEAKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKQEAgLTEzNiw2ICsxNDAsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTQ4LDYgKzE1Myw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjYsMTUgKzE3MiwyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTE4MywxMiArMTk0LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjA2LDYgKzIxNyw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKQEAgLTI0NCw2ICsyNTYsMTMgQEAKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNTcsNyArMjc2LDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQpAQCAtMjg2LDEwICszMDgsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTMyNCw3ICszNDksNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotQ09ORklHX05FVF9ESVZFUlQ9eQogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zMzIsNiArMzU2LDcgQEAKICMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCiAjCiBDT05GSUdfTkVUX1NDSEVEPXkKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQogQ09ORklHX05FVF9TQ0hfQ0xLX0pJRkZJRVM9eQogIyBDT05GSUdfTkVUX1NDSF9DTEtfR0VUVElNRU9GREFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfQ0xLX0NQVSBpcyBub3Qgc2V0CkBAIC0zNzcsNiArNDAyLDcgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zODksNiArNDE1LDcgQEAKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCkBAIC00MjMsNiArNDUwLDEwIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC00MzIsNiArNDYzLDEyIEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTQ2OCw3ICs1MDUsNiBAQAogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKICMKICMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1NJTV9ORVQgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC01MTIsNiArNTQ4LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01NzksMTcgKzYxNiwxMiBAQAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNjA1LDYgKzYzNyw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTYxMywxNCArNjQ2LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTYzOSw2ICs2NjcsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CkBAIC02OTksMTYgKzczMiwyNiBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9eQogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CkBAIC03MzYsNiArNzc5LDcgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKICMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKICMgQ09ORklHX1NZU0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CkBAIC03NzYsNyArODIwLDYgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc5NCw2ICs4MzcsMTAgQEAKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC04MDMsMjMgKzg1MCwyOSBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CkBAIC04MzgsNyArODkxLDEyIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC04NDcsNyArOTA1LDEzIEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KICMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKQEAgLTg2MSw2ICs5MjUsNyBAQAogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTg3MCw4ICs5MzUsMTEgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKIENPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCmluZGV4IGU0MjIxYWEuLmQ1MmE1YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMgotIyBUdWUgSnVsIDI1IDIzOjE2OjQ2IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI3OjU2IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVlI0MVhYPXkKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC03MSwxMCArNzEsMTQgQEAKICMgQ09ORklHX1pBT19DQVBDRUxMQSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX1ZSNDFYWD15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CkBAIC0xMDcsNiArMTExLDcgQEAKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAogQ09ORklHX1NZU19IQVNfQ1BVX1ZSNDFYWD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiAKQEAgLTEyMCw4ICsxMjUsOCBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xMzYsNiArMTQxLDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE0OCw2ICsxNTQsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTY2LDE2ICsxNzMsMjAgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0xODMsMTIgKzE5NCwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIwNiw2ICsyMTcsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yNjEsNiArMjczLDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNzQsNyArMjk0LDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjkyLDEwICszMTUsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTMyNSw3ICszNTEsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM5OSw5ICs0MjQsMTYgQEAKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCiAjCisjIE1pc2MgZGV2aWNlcworIworQ09ORklHX1NHSV9JT0M0PW0KKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCkBAIC00MzEsNiArNDYzLDEyIEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTQ5MiwxNCArNTMwLDE3IEBACiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPW0KIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTU5NCw2ICs2MzUsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY2NSwxMCArNzA3LDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIAogIwpAQCAtNjg0LDcgKzcyMiw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNzA5LDE0ICs3NDYsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNzM1LDYgKzc2Nyw3IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC03NDIsNiArNzc1LDEyIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtNzU0LDggKzc5Myw4IEBACiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKICMKQEAgLTc2NCw3ICs4MDMsOCBAQAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC03ODIsNyArODIyLDYgQEAKICMKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwotIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtODA3LDYgKzg0Niw3IEBACiAjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HVENPIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC04MjAsNiArODYwLDcgQEAKICMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAogQ09ORklHX1VTQl9QRUdBU1VTPW0KICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CiAKQEAgLTgzNyw2ICs4NzgsNyBAQAogIwogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKQEAgLTg0NCwxMSArODg2LDEyIEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTA2LDE2ICs5NDksMjYgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtOTQ1LDE3ICs5OTgsMTkgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDAwLDYgKzEwNTUsMTQgQEAKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMDA5LDExICsxMDcyLDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlWUjAsMTkyMDAgaWRlMD0weDE3MCwweDM3Niw3MyIKIApAQCAtMTAyOCwxOCArMTA5MywzMCBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiBDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTEwNTEsNiArMTEyOCw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA2MCw2ICsxMTM4LDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTA2NywzICsxMTQ2LDUgQEAKIENPTkZJR19aTElCX0lORkxBVEU9bQogQ09ORklHX1pMSUJfREVGTEFURT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcKaW5kZXggMzJiMWFmZC4uNzQ2MTA2YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjE1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI3OjU4IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY0LDEwICs2NCwxNCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKQEAgLTEwNCw2ICsxMDgsNyBAQAogQ09ORklHX0NQVV9STTkwMDA9eQogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX0hBU19DUFVfUk05MDAwPXkKK0NPTkZJR19XRUFLX09SREVSSU5HPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKQEAgLTEyMiw4ICsxMjcsOCBAQAogQ09ORklHX1JNNzAwMF9DUFVfU0NBQ0hFPXkKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKQEAgLTE0MSw2ICsxNDYsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTUzLDYgKzE1OSw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNzEsMTYgKzE3OCwyMSBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0xODgsMTIgKzIwMCwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIxMSw2ICsyMjMsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yNTMsNiArMjY2LDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNjYsNyArMjg3LDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI4MywxMyArMzA3LDE2IEBACiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTMwMiwxMSArMzI5LDE3IEBACiAjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X01JUDY9eQogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQVjZfU1VCVFJFRVM9eQogQ09ORklHX05FVFdPUktfU0VDTUFSSz15CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CkBAIC0zMTcsMTUgKzM1MCw0MiBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCkBAIC0zMzYsMTQgKzM5NiwxNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiAjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldApAQCAtMzUxLDYgKzQxNCw3IEBACiAjCiAjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAKQEAgLTM3Nyw3ICs0NDEsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTQwMSw2ICs0NjQsNyBAQAogQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KICMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0ZJQl9SVUxFUz15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ1MSw2ICs1MTUsMTIgQEAKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCiAjCisjIE1pc2MgZGV2aWNlcworIworQ09ORklHX1NHSV9JT0M0PW0KKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTQ2MCw2ICs1MzAsOCBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9bQogQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfVEdUPW0KK0NPTkZJR19TQ1NJX05FVExJTks9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKQEAgLTQ3OCwxNCArNTUwLDE3IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CiAKICMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIyBTQ1NJIFRyYW5zcG9ydHMKICMKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0ZDX0FUVFJTPW0KIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KIENPTkZJR19TQ1NJX1NBU19BVFRSUz1tCitDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBU19ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwpAQCAtNDk4LDI2ICs1NzMsMzUgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9BSUM5NFhYPW0KKyMgQ09ORklHX0FJQzk0WFhfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTU3MSw2ICs2NTUsOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTYwNyw3ICs2OTMsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfTEFOX1NBQTk3MzAgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTYzMCwxNCArNzE2LDE4IEBACiBDT05GSUdfTVY2NDNYWF9FVEhfMD15CiBDT05GSUdfTVY2NDNYWF9FVEhfMT15CiBDT05GSUdfTVY2NDNYWF9FVEhfMj15CitDT05GSUdfUUxBM1hYWD1tCisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTY2NSw2ICs3NTUsNyBAQAogQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CkBAIC02ODUsNiArNzc2LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NTgsMTAgKzg1MCw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNzY5LDcgKzg1Nyw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNzk0LDE0ICs4ODEsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtODE2LDYgKzg5OCw3IEBACiAjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CkBAIC04MzIsNiArOTE1LDcgQEAKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldApAQCAtODY4LDYgKzk1MiwxMiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTkzMCw2ICsxMDIwLDE0IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC05MzksNiArMTAzNyw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD1tCiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtOTQ3LDEyICsxMDQ2LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19YRlNfRlM9bQogIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk2Myw2ICsxMDYzLDcgQEAKIENPTkZJR19BVVRPRlNfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC05ODIsMTEgKzEwODMsMTMgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEwMjksNyArMTEzMiw2IEBACiBDT05GSUdfU01CX0ZTPW0KICMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDg2LDYgKzExODgsMTQgQEAKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTEwOTUsMTEgKzEyMDUsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iaXA9YW55IHJvb3Q9bmZzIgogCkBAIC0xMTEzLDE4ICsxMjI1LDMwIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtMTEzNiw2ICsxMjYwLDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMTQ1LDYgKzEyNzAsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPW0KIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTE1NiwzICsxMjgyLDUgQEAKIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcKaW5kZXggZWJlNzVjMS4uNGIzMmIyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2NfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjE2IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI3OjU4IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY0LDEwICs2NCwxNCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKIENPTkZJR19DUFVfQklHX0VORElBTj15CkBAIC0xMjAsOCArMTI0LDggQEAKIENPTkZJR19STTcwMDBfQ1BVX1NDQUNIRT15CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQpAQCAtMTM4LDYgKzE0Miw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTUwLDYgKzE1NSw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjgsMTUgKzE3NCwyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE4NCwxMiArMTk1LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjAyLDYgKzIxMyw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAKICMKQEAgLTI0MiwxMSArMjU0LDIwIEBACiAjIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKK0NPTkZJR19TWVNWSVBDX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CiBDT05GSUdfTUlQUzMyX04zMj15CiBDT05GSUdfQklORk1UX0VMRjMyPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNTksNyArMjgwLDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0yNzksMTAgKzMwMywxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX1RDUF9NRDVTSUc9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldApAQCAtMzEyLDcgKzMzOSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtMzg3LDYgKzQxMywxMiBAQAogQ09ORklHX0FUQV9PVkVSX0VUSD15CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9eQorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtMzk2LDYgKzQyOCwxMiBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9eQogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNDQ2LDYgKzQ4NCw4IEBACiBDT05GSUdfQ0lDQURBX1BIWT15CiBDT05GSUdfVklURVNTRV9QSFk9eQogQ09ORklHX1NNU0NfUEhZPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNDgyLDE0ICs1MjIsMTcgQEAKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPXkKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9eQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPXkKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTUyOCw2ICs1NzEsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTYwNSwxMCArNjQ5LDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCkBAIC02MTYsNyArNjU2LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC02NDEsMTQgKzY4MCw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC02NjYsNiArNzAwLDcgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTY3Myw2ICs3MDgsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtNzM1LDE2ICs3NzUsMjYgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC03NTUsNiArODA1LDcgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPXkKK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNzc0LDE3ICs4MjUsMjAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9eQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CkBAIC04MTYsNyArODcwLDYgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgzNCw2ICs4ODcsMTQgQEAKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPXkKK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC04NDMsMTIgKzkwNCwxMyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKQEAgLTg2Myw3ICs5MjUsMTIgQEAKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz15CiBDT05GSUdfQ1JZUFRPX05VTEw9eQogQ09ORklHX0NSWVBUT19NRDQ9eQogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtODcyLDkgKzkzOSwxNiBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9eQogQ09ORklHX0NSWVBUT19XUDUxMj15CiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz15CitDT05GSUdfQ1JZUFRPX0xSVz15CiBDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0ZDUllQVD15CiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKIENPTkZJR19DUllQVE9fVFdPRklTSD15CitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPXkKIENPTkZJR19DUllQVE9fU0VSUEVOVD15CiBDT05GSUdfQ1JZUFRPX0FFUz15CiBDT05GSUdfQ1JZUFRPX0NBU1Q1PXkKQEAgLTg4Niw2ICs5NjAsNyBAQAogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorQ09ORklHX0NSWVBUT19DQU1FTExJQT15CiAKICMKICMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKQEAgLTg5NCw2ICs5NjksNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkMzMj15CkBAIC05MDEsMyArOTc3LDUgQEAKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2RlZmNvbmZpZwppbmRleCA1YTk2MDNjLi42NzQ2MzFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVGh1IEp1bCAgNiAxMDowNDoxNiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyNzo1OSAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC0yNSw4ICsyNiw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CkBAIC00Miw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02NCwxMCArNjQsMTQgQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKIENPTkZJR19DUFVfQklHX0VORElBTj15CkBAIC0xMjMsOCArMTI3LDggQEAKIENPTkZJR19STTcwMDBfQ1BVX1NDQUNIRT15CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CkBAIC0xNDIsNiArMTQ2LDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE1NCw2ICsxNTksNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTcyLDE1ICsxNzgsMjAgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKQEAgLTE4OCwxMiArMTk5LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjA2LDYgKzIxNyw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTIzMyw3ICsyNDUsNiBAQAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CiAjCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCiAjIFBDSSBIb3RwbHVnIFN1cHBvcnQKQEAgLTI0Nyw2ICsyNTgsMTQgQEAKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKworIwogIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKQEAgLTI1OSw3ICsyNzgsMTAgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI3OSwxMCArMzAxLDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zMTIsNyArMzM3LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zNDUsNyArMzY5LDYgQEAKICMKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTM4Miw2ICs0MDUsMTAgQEAKIENPTkZJR19BVEFfT1ZFUl9FVEg9eQogCiAjCisjIE1pc2MgZGV2aWNlcworIworCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zOTEsNiArNDE4LDEyIEBACiAjCiBDT05GSUdfUkFJRF9BVFRSUz15CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC00MzQsNiArNDY3LDggQEAKIENPTkZJR19DSUNBREFfUEhZPXkKIENPTkZJR19WSVRFU1NFX1BIWT15CiBDT05GSUdfU01TQ19QSFk9eQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC00ODQsNiArNTE5LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01NTcsMTcgKzU5MywxMiBAQAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNTkyLDE0ICs2MjMsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjE3LDYgKzY0Myw3IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC02MjQsNiArNjUxLDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldApAQCAtNjg0LDE2ICs3MTYsMjYgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC03MDQsNiArNzQ2LDcgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPXkKK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNzIzLDE3ICs3NjYsMjAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9eQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CkBAIC03NjUsNyArODExLDYgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc4Myw2ICs4MjgsMTQgQEAKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPXkKK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC03OTIsMTIgKzg0NSwxMyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKQEAgLTgxMiw3ICs4NjYsMTIgQEAKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz15CiBDT05GSUdfQ1JZUFRPX05VTEw9eQogQ09ORklHX0NSWVBUT19NRDQ9eQogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtODIxLDkgKzg4MCwxNiBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9eQogQ09ORklHX0NSWVBUT19XUDUxMj15CiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz15CitDT05GSUdfQ1JZUFRPX0xSVz15CiBDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0ZDUllQVD15CiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKIENPTkZJR19DUllQVE9fVFdPRklTSD15CitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPXkKIENPTkZJR19DUllQVE9fU0VSUEVOVD15CiBDT05GSUdfQ1JZUFRPX0FFUz15CiBDT05GSUdfQ1JZUFRPX0NBU1Q1PXkKQEAgLTgzNSw2ICs5MDEsNyBAQAogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorQ09ORklHX0NSWVBUT19DQU1FTExJQT15CiAKICMKICMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKQEAgLTg0Myw2ICs5MTAsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkMzMj15CkBAIC04NTAsMyArOTE4LDUgQEAKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcKaW5kZXggNDZhOTQyYy4uMjYwMDI2MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2dfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjE2IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI4OjAwIDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY0LDEwICs2NCwxNCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKQEAgLTEwNiwxNSArMTEwLDE0IEBACiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfSEFTX0NQVV9STTcwMDA9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQogCiAjCiAjIEtlcm5lbCB0eXBlCiAjCi0jIENPTkZJR18zMkJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfNjRCSVQ9eQorQ09ORklHXzMyQklUPXkKKyMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldApAQCAtMTIzLDkgKzEyNiwxMCBAQAogQ09ORklHX1JNNzAwMF9DUFVfU0NBQ0hFPXkKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTQxLDYgKzE0NSw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTUzLDYgKzE1OCw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNzEsMTUgKzE3NywyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE4NywxMiArMTk4LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjA1LDcgKzIxNiwxMCBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MU0Y9eQogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTI0MiwxMiArMjU2LDE1IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQUzMyX0NPTVBBVD15Ci1DT05GSUdfQ09NUEFUPXkKLUNPTkZJR19NSVBTMzJfTzMyPXkKLUNPTkZJR19NSVBTMzJfTjMyPXkKLUNPTkZJR19CSU5GTVRfRUxGMzI9eQorQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTI2Miw3ICsyNzksMTAgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI4MiwxMCArMzAyLDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zMTUsNyArMzM4LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zOTAsNiArNDEyLDEyIEBACiBDT05GSUdfQVRBX09WRVJfRVRIPXkKIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND15CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zOTksNiArNDI3LDEyIEBACiAjCiBDT05GSUdfUkFJRF9BVFRSUz15CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC00NDksNiArNDgzLDggQEAKIENPTkZJR19DSUNBREFfUEhZPXkKIENPTkZJR19WSVRFU1NFX1BIWT15CiBDT05GSUdfU01TQ19QSFk9eQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC00ODUsMTQgKzUyMSwxNyBAQAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfUUxBM1hYWD15CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzPXkKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUWEVOX05JQz15CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC01MzEsNiArNTcwLDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02MDgsMTAgKzY0OCw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNjE5LDcgKzY1NSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNjQ0LDE0ICs2NzksOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjY5LDYgKzY5OSw3IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC02NzYsNiArNzA3LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTczOCwxNiArNzc0LDI2IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtNzU4LDYgKzgwNCw3IEBACiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz15CitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTc3NywxNyArODI0LDIwIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldApAQCAtODE5LDcgKzg2OSw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC04MzcsNiArODg2LDE0IEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworQ09ORklHX0RMTT15CitDT05GSUdfRExNX1RDUD15CisjIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAorCisjCiAjIFByb2ZpbGluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldApAQCAtODQ2LDEyICs5MDMsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCkBAIC04NjYsNyArOTI0LDEyIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9eQogQ09ORklHX0NSWVBUT19OVUxMPXkKIENPTkZJR19DUllQVE9fTUQ0PXkKIENPTkZJR19DUllQVE9fTUQ1PXkKQEAgLTg3NSw5ICs5MzgsMTYgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPXkKIENPTkZJR19DUllQVE9fV1A1MTI9eQogQ09ORklHX0NSWVBUT19UR1IxOTI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD15CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorQ09ORklHX0NSWVBUT19MUlc9eQogQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9eQogQ09ORklHX0NSWVBUT19CTE9XRklTSD15CiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9eQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj15CiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9eQogQ09ORklHX0NSWVBUT19BRVM9eQogQ09ORklHX0NSWVBUT19DQVNUNT15CkBAIC04ODksNiArOTU5LDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9eQogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC04OTcsNiArOTY4LDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKIENPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDMzI9eQpAQCAtOTA0LDMgKzk3Niw1IEBACiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKaW5kZXggN2QzYzY4OC4uMDVhMzNhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MTcgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjg6MDEgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjQsMTQgKzY0LDE5IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CiBDT05GSUdfU09DX0FVMTEwMD15CiBDT05GSUdfU09DX0FVMVgwMD15CkBAIC0xMTcsOCArMTIyLDggQEAKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQogQ09ORklHX0NQVV9IQVNfTExTQz15CkBAIC0xMzYsNiArMTQxLDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE0OCw2ICsxNTQsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTY2LDE1ICsxNzMsMjAgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0xODIsMTIgKzE5NCwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIwNSw2ICsyMTcsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yNTMsNiArMjY2LDEwIEBACiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIAogIwpAQCAtMjY5LDcgKzI4NiwxMCBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CiBDT05GSUdfTkVUX0tFWT15CitDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI5MCwxMCArMzEwLDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTMxMiwxNSArMzM1LDQyIEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KQEAgLTMzMSwxNCArMzgxLDE3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CkBAIC0zNjYsNyArNDE5LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC00MjIsMTEgKzQ3NCwxMyBAQAogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwogIwogQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC01MTEsNiArNTY1LDEwIEBACiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIAogIworIyBNaXNjIGRldmljZXMKKyMKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNTIwLDYgKzU3OCwxMiBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9bQogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNTYzLDYgKzYyNyw4IEBACiBDT05GSUdfQ0lDQURBX1BIWT1tCiBDT05GSUdfVklURVNTRV9QSFk9bQogQ09ORklHX1NNU0NfUEhZPW0KKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNjA5LDYgKzY3NSw3IEBACiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CkBAIC02MjgsNiArNjk1LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03MDcsMTAgKzc3NSw2IEBACiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0KLSMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfU1lOQ0xJTktfQ1M9bQpAQCAtNzIyLDcgKzc4Niw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNzQ3LDE0ICs4MTAsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNzcyLDYgKzgzMCw3IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC03NzksNiArODM4LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTg0MCw2ICs5MDQsMTQgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTg1MSw2ICs5MjMsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtODYzLDYgKzkzNiw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC04NzMsNiArOTQ3LDcgQEAKIENPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC04OTIsMjMgKzk2NywyNSBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwogIwogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPW0KICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApAQCAtOTM3LDcgKzEwMTQsNiBAQAogQ09ORklHX1NNQl9GUz1tCiAjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtOTk0LDYgKzEwNzAsMTQgQEAKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTEwMDMsMTEgKzEwODcsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCkBAIC0xMDIyLDE4ICsxMTA4LDMwIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtMTA0NSw2ICsxMTQzLDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMDU0LDYgKzExNTMsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPW0KIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTA2NSwzICsxMTY1LDUgQEAKIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwppbmRleCBhNzc4MDVhLi4zNGE2YmVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVGh1IEp1bCAgNiAxMDowNDoxNyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyODowMiAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC0yNSw4ICsyNiw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CkBAIC00Miw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02NCwxNCArNjQsMTkgQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TT0NfQVUxNTAwPXkKIENPTkZJR19TT0NfQVUxWDAwPXkKQEAgLTExNiw4ICsxMjEsOCBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKQEAgLTEzNCw3ICsxMzksOCBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTQ3LDYgKzE1Myw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjUsMTUgKzE3MiwyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE4MSwxMiArMTkzLDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjA0LDYgKzIxNiw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTI1OCw2ICsyNzEsMTAgQEAKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAogCiAjCkBAIC0yNzQsNyArMjkxLDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjk1LDEwICszMTUsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKIAogIwogIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzE3LDE1ICszNDAsNDIgQEAKIENPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQpAQCAtMzM2LDE0ICszODYsMTcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTM3MSw3ICs0MjQsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTQyNywxMSArNDc5LDEzIEBACiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ4Nyw2ICs1NDEsNyBAQAogIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKIAogIwogIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCkBAIC01MjIsOSArNTc3LDE2IEBACiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND1tCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwpAQCAtNTM0LDYgKzU5Niw3IEBACiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKICMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDUz1tCisjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CkBAIC01NjEsOCArNjI0LDEwIEBACiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9IUFQzNjY9eQorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JVDgyMTM9bQogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKQEAgLTU3Miw2ICs2MzcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9UQzg2QzAwMT1tCiAjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiAjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKQEAgLTU4Myw2ICs2NDksMTIgQEAKICMKIENPTkZJR19SQUlEX0FUVFJTPW0KICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTYzMyw2ICs3MDUsOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTY3MCwxNCArNzQ0LDE3IEBACiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPW0KIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTcxOCw2ICs3OTUsNyBAQAogQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldApAQCAtNzM3LDYgKzgxNSw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtODE1LDEwICs4OTQsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCkBAIC04MzMsNyArOTA4LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC04NTgsMTQgKzkzMiw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC04NzcsNiArOTQ2LDcgQEAKICMKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtODg0LDYgKzk1NCwxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCisjIENPTkZJR19ISUQgaXMgbm90IHNldAorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC05NDYsNiArMTAyMSwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtOTU3LDYgKzEwNDAsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtOTY5LDYgKzEwNTMsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtOTc5LDYgKzEwNjQsNyBAQAogQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTk5OCwyMyArMTA4NCwyNSBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwogIwogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPW0KICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApAQCAtMTA0Myw3ICsxMTMxLDYgQEAKIENPTkZJR19TTUJfRlM9bQogIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExMDAsNiArMTE4NywxNCBAQAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworQ09ORklHX0RMTT1tCitDT05GSUdfRExNX1RDUD15CisjIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAorCisjCiAjIFByb2ZpbGluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldApAQCAtMTEwOSwxMSArMTIwNCwxMyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKQEAgLTExMjgsMTggKzEyMjUsMzAgQEAKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQorQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19MUlc9bQogQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCkBAIC0xMTUxLDYgKzEyNjAsNyBAQAogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTExNjAsNiArMTI3MCw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkMzMj15CkBAIC0xMTcxLDMgKzEyODIsNSBAQAogQ09ORklHX1RFWFRTRUFSQ0hfQk09bQogQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCmluZGV4IDgzMThkNzQuLmUzYmZmNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjE3IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI4OjAzIDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY0LDE1ICs2NCwyMCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NPQ19BVTE1NTA9eQogQ09ORklHX1NPQ19BVTFYMDA9eQpAQCAtMTE3LDggKzEyMiw4IEBACiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKIENPTkZJR19DUFVfSEFTX0xMU0M9eQpAQCAtMTM1LDcgKzE0MCw4IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDgsNiArMTU0LDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE2NiwxNSArMTczLDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMTgyLDEyICsxOTQsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0yMDUsNiArMjE3LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjU5LDYgKzI3MiwxMCBAQAogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAKICMKQEAgLTI3NSw3ICsyOTIsMTAgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9eQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0yOTYsMTAgKzMxNiwxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX1RDUF9NRDVTSUc9eQogCiAjCiAjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCkBAIC0zMTgsMTUgKzM0MSw0MiBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCkBAIC0zMzcsMTQgKzM4NywxNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiAjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldApAQCAtMzcyLDcgKzQyNSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtNDI4LDExICs0ODAsMTMgQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDg4LDYgKzU0Miw3IEBACiAjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAogCiAjCiAjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKQEAgLTUyMyw5ICs1NzgsMTYgQEAKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCiAjCisjIE1pc2MgZGV2aWNlcworIworQ09ORklHX1NHSV9JT0M0PW0KKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCkBAIC01MzUsNiArNTk3LDcgQEAKIENPTkZJR19CTEtfREVWX0lERURJU0s9eQogIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNTPW0KKyMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKQEAgLTU2Miw4ICs2MjUsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0hQVDM2Nj15CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lUODIxMz1tCiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNTczLDYgKzYzOCw3IEBACiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1RDODZDMDAxPW0KICMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKICMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldApAQCAtNTg0LDYgKzY1MCwxMiBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9bQogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNjM0LDYgKzcwNiw4IEBACiBDT05GSUdfQ0lDQURBX1BIWT1tCiBDT05GSUdfVklURVNTRV9QSFk9bQogQ09ORklHX1NNU0NfUEhZPW0KKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNjcxLDE0ICs3NDUsMTcgQEAKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX1FMQTNYWFg9bQogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz1tCiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9bQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNzExLDYgKzc4OCw3IEBACiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CkBAIC03MzAsNiArODA4LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC04MDgsMTAgKzg4Nyw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAKICMKQEAgLTgyNiw3ICs5MDEsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTg1MSwxNCArOTI1LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTg3MCw2ICs5MzksNyBAQAogIwogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC04NzcsNiArOTQ3LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTkzOSw2ICsxMDE0LDE0IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC05NTAsNiArMTAzMyw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC05NjIsNiArMTA0Niw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC05NzIsNiArMTA1Nyw3IEBACiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTkxLDIzICsxMDc3LDI1IEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDM2LDcgKzExMjQsNiBAQAogQ09ORklHX1NNQl9GUz1tCiAjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtMTA5Myw2ICsxMTgwLDE0IEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMTAyLDExICsxMTk3LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApAQCAtMTEyMSwxOCArMTIxOCwzMCBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiBDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTExNDQsNiArMTI1Myw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE1Myw2ICsxMjYzLDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiBDT05GSUdfQ1JDMTY9bQogQ09ORklHX0NSQzMyPXkKQEAgLTExNjQsMyArMTI3NSw1IEBACiBDT05GSUdfVEVYVFNFQVJDSF9CTT1tCiBDT05GSUdfVEVYVFNFQVJDSF9GU009bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCmluZGV4IGZjYjhmZWEuLjAwOWIzZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzIKLSMgU2F0IE9jdCAxNCAyMzowMToxNiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyODowNCAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC00MCw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiBDT05GSUdfUE5YODU1MF9KQlM9eQorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjIsMTEgKzY0LDE0IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldApAQCAtMTM0LDYgKzEzOSw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDYsNiArMTUyLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE2NSw2ICsxNzIsNyBAQAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldApAQCAtMTcyLDYgKzE4MCw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTIzMSw3ICsyNDAsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogCkBAIC0yNTMsNiArMjYxLDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNjcsNiArMjgzLDcgQEAKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0yOTMsNiArMzEwLDcgQEAKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zNTAsNiArMzY4LDcgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTM5Myw2ICs0MTIsMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9bQorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiBDT05GSUdfSURFPXkKQEAgLTQzNiw2ICs0NjEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JVDgyMTM9bQogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKQEAgLTQ0NSw2ICs0NzEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9UQzg2QzAwMT1tCiAjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiAjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKQEAgLTQ1Niw2ICs0ODMsNyBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9UR1Q9bQogQ09ORklHX1NDU0lfTkVUTElOSz15CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtNDc1LDYgKzUwMyw3IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNTE4LDYgKzU0Nyw3IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwpAQCAtNjA1LDcgKzYzNSw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQU5fU0FBOTczMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNjI1LDE0ICs2NTUsMTcgQEAKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzPW0KICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUWEVOX05JQz1tCiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC03MjAsNyArNzUzLDEwIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKLSMgQ09ORklHX1NFUklBTF9JUDMxMDYgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9QTlg4WFhYPXkKK0NPTkZJR19TRVJJQUxfUE5YOFhYWF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtNzQxLDEwICs3NzcsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKQEAgLTc1Miw3ICs3ODQsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTc2OCw2ICs3OTksNyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC03NzYsMTUgKzgwOCwxMSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTgxNCw2ICs4NDIsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtODI2LDggKzg1OSw4IEBACiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKICMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIAogIwpAQCAtODM2LDcgKzg2OSw4IEBACiAjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTg5MCw3ICs5MjQsNyBAQAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dUQ08gaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTkwNSw2ICs5MzksNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIApAQCAtOTM1LDYgKzk3MCw3IEBACiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CkBAIC05OTEsNiArMTAyNywxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTA0MSw3ICsxMDg1LDcgQEAKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTEzNyw2ICsxMTgxLDE0IEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMTQ5LDI4ICsxMjAxLDI5IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NMQUI9eQogIyBDT05GSUdfREVCVUdfU0xBQl9MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzEsMzg0MDBuOCBrZ2RiPXR0eVMwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAiCkBAIC0xMTg5LDIxICsxMjQyLDI3IEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fWENCQz1tCiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiAjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CkBAIC0xMjE3LDYgKzEyNzYsNyBAQAogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMjI2LDggKzEyODYsMTEgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXN0YjgxMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXN0YjgxMF9kZWZjb25maWcKaW5kZXggZjM4YTJjMS4uNWJkMzc3YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1zdGI4MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtc3RiODEwX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5Ci0jIFRodSBEZWMgIDcgMTY6MzU6MTIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjg6MDQgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtNTgsMTcgKzU5LDE5IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTEzNiw2ICsxMzksNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTQ4LDYgKzE1Miw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjcsNiArMTcyLDcgQEAKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKQEAgLTIzNCw3ICsyNDAsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogCkBAIC0yNTQsNiArMjU5LDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNjgsNiArMjgxLDcgQEAKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0zNTEsNiArMzY1LDcgQEAKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCkBAIC00NDMsNiArNDU4LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSVQ4MjEzPW0KICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CkBAIC00NTIsNiArNDY4LDcgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVEM4NkMwMDE9bQogIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQogIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0CkBAIC00NjMsNiArNDgwLDcgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfVEdUPW0KICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtNDgyLDYgKzUwMCw3IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNTI1LDYgKzU0NCw3IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwpAQCAtNjA4LDYgKzYyOCw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNjI3LDExICs2NDgsMTMgQEAKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzPW0KICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CkBAIC03NzUsNiArNzk4LDcgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCkBAIC04MDgsNiArODMyLDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTgyMCw5ICs4NDksOCBAQAogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiAjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCkBAIC04MzEsNyArODU5LDggQEAKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtODg1LDYgKzkxNCw3IEBACiAjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HVENPIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC05ODcsNiArMTAxNywxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTAzNyw3ICsxMDc1LDcgQEAKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTEzMyw2ICsxMTcxLDE0IEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMTQ1LDI4ICsxMTkxLDI5IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IRUFERVJTX0NIRUNLPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TTEFCPXkKICMgQ09ORklHX0RFQlVHX1NMQUJfTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotQ09ORklHX0hFQURFUlNfQ0hFQ0s9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMxLDM4NDAwbjgga2dkYj10dHlTMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgpAQCAtMTE4Nyw4ICsxMjM0LDEwIEBACiBDT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPW0KIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19YQ0JDPW0KICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9bQpAQCAtMTE5Nyw5ICsxMjQ2LDEzIEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KICMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKQEAgLTEyMTMsNiArMTI2Niw3IEBACiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMjIsOCArMTI3NiwxMSBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPW0KICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcKaW5kZXggNWJjMzI0OC4uY2M2OTQ3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzIKLSMgU2F0IE9jdCAxNCAyMzoxMjoxNSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyODowNiAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC00MCw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogQ09ORklHX1BOWDg1NTBfVjJQQ0k9eQogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjIsMTEgKzY0LDE0IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldApAQCAtMTM0LDYgKzEzOSw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDYsNiArMTUyLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE2NSw2ICsxNzIsNyBAQAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldApAQCAtMTcyLDYgKzE4MCw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKQEAgLTIzMCw3ICsyMzksNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogQ09ORklHX01NVT15CiAKICMKQEAgLTI1MSw2ICsyNTksMTQgQEAKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKworIwogIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKQEAgLTI2NSw2ICsyODEsNyBAQAogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTI4Miw3ICsyOTksNyBAQAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKQEAgLTI5MSw2ICszMDgsNyBAQAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKIAogIwogIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzEyLDcgKzMzMCw2IEBACiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPW0KICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfU1VCVFJFRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQpAQCAtMzIyLDE1ICszMzksMzggQEAKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQpAQCAtMzQxLDE0ICszODEsMTcgQEAKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CkBAIC0zNTYsNiArMzk5LDcgQEAKICMKICMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCiAjIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKIApAQCAtNDUzLDYgKzQ5NywxMiBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND1tCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQpAQCAtNDk3LDYgKzU0Nyw3IEBACiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lUODIxMz1tCiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNTA2LDYgKzU1Nyw3IEBACiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1RDODZDMDAxPW0KICMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKICMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldApAQCAtNTE3LDYgKzU2OSw3IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1RHVD1tCiBDT05GSUdfU0NTSV9ORVRMSU5LPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCkBAIC01MzYsNiArNTg5LDcgQEAKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKIAogIwogIyBTQ1NJIFRyYW5zcG9ydHMKQEAgLTU4NCw2ICs2MzgsNyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKQEAgLTY3MSw3ICs3MjYsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfTEFOX1NBQTk3MzAgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTY5MSwxNCArNzQ2LDE3IEBACiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz1tCiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9bQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtODA0LDYgKzg2Miw3IEBACiAjIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CitDT05GSUdfTU9YQV9TTUFSVElPX05FVz1tCiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOS19HVCBpcyBub3Qgc2V0CkBAIC04MjIsNyArODgxLDEwIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKLSMgQ09ORklHX1NFUklBTF9JUDMxMDYgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9QTlg4WFhYPXkKK0NPTkZJR19TRVJJQUxfUE5YOFhYWF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtODQzLDEwICs5MDUsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKQEAgLTg1NCw3ICs5MTIsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTg4Myw2ICs5NDAsNyBAQAogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldApAQCAtOTE4LDYgKzk3Niw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTk1MSw2ICsxMDEwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldApAQCAtOTYxLDE3ICsxMDIxLDEzIEBACiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC05OTEsNiArMTA0Nyw3IEBACiAjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKQEAgLTEwMDcsNiArMTA2NCw3IEBACiAjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKQEAgLTEwMzYsNiArMTA5NCwxMiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTEwNDgsOCArMTExMiw4IEBACiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwODUsNyArMTE0OSw2IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKQEAgLTEwOTMsNyArMTE1Niw2IEBACiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci1DT05GSUdfVVNCX0hJRElOUFVUPXkKICMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKQEAgLTExMDksNyArMTE3MSw3IEBACiAjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwpAQCAtMTEyNCw2ICsxMTg2LDcgQEAKICMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiAKQEAgLTExNTQsNiArMTIxNyw3IEBACiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMTEsNiArMTI3NSwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTI3MSw3ICsxMzQzLDcgQEAKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTM2OCw2ICsxNDQwLDE0IEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMzgwLDEwICsxNDYwLDEwIEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCkBAIC0xMzk3LDIxICsxNDc3LDI3IEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fWENCQz1tCiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiAjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCiBDT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19MUlc9bQogIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldApAQCAtMTQyNSw2ICsxNTExLDcgQEAKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQzNCw2ICsxNTIxLDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQpAQCAtMTQ0NSwzICsxNTMzLDUgQEAKIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9xZW11X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnCmluZGV4IGFhNjFmMGYuLmMxOGM1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MTggMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjg6MDYgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjQsMTYgKzY0LDIxIEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CiBDT05GSUdfSTgyNTk9eQogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKICMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CitDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NXQVBfSU9fU1BBQ0U9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogQ09ORklHX0hBVkVfU1REX1BDX1NFUklBTF9QT1JUPXkKQEAgLTExNyw4ICsxMjIsOCBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQpAQCAtMTMwLDkgKzEzNSwxMCBAQAogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKIENPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE2NCwxMiArMTcwLDE1IEBACiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CkBAIC0xOTQsNiArMjAzLDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjIxLDcgKzIzMSw2IEBACiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKICMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgUENJIEhvdHBsdWcgU3VwcG9ydApAQCAtMjM1LDYgKzI0NCwxNCBAQAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQpAQCAtMjY4LDEwICsyODUsMTIgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTMwNyw3ICszMjYsNiBAQAogIwogQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCkBAIC0zNDMsNiArMzYxLDEwIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zNTIsNiArMzc0LDEyIEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgT2xkIENELVJPTSBkcml2ZXJzIChub3QgU0NTSSwgbm90IElERSkKQEAgLTQ1OSw2ICs0ODcsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTUyNSwxMCArNTU0LDYgQEAKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNTU4LDE0ICs1ODMsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNTg1LDYgKzYwNSw3IEBACiAjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTU5Miw2ICs2MTMsMTIgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKQEAgLTY1MSwxNCArNjc4LDIzIEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC02NjgsNiArNzA0LDcgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPXkKK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNjg3LDggKzcyNCwxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIApAQCAtNzA5LDYgKzc0OCw3IEBACiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX0RJUkVDVElPPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CkBAIC03MTcsNyArNzU3LDYgQEAKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogCkBAIC03MzcsMTIgKzc3NiwxMyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKQEAgLTc1OCwxMyArNzk4LDEyIEBACiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZwppbmRleCBmOWU4ZjQxLi42NzhmMjMyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVGh1IEp1bCAgNiAxMDowNDoxOSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyODowNyAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC0yNSw4ICsyNiw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CkBAIC00Miw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC03MSwxMCArNzEsMTQgQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzhfTVBMRVhfTkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4X01QTEVYX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKQEAgLTEyNiw4ICsxMzAsOCBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKQEAgLTE0Myw2ICsxNDcsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTU1LDYgKzE2MCw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNzMsMTYgKzE3OSwyMiBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0yMTEsNiArMjIzLDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjU0LDYgKzI2NywxNCBAQAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQpAQCAtMjY3LDYgKzI4OCw4IEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTI4NSwxMyArMzA4LDE2IEBACiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTMwNCwxMSArMzMwLDE3IEBACiAjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X01JUDY9eQogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KK0NPTkZJR19JUFY2X1NJVD1tCiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQVjZfU1VCVFJFRVM9eQogQ09ORklHX05FVFdPUktfU0VDTUFSSz15CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CkBAIC0zMTksMTUgKzM1MSw0MiBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCkBAIC0zMzgsMTQgKzM5NywxNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiAjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldApAQCAtMzUzLDYgKzQxNSw3IEBACiAjCiAjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAKQEAgLTM3OSw3ICs0NDIsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTQwNCw2ICs0NjYsNyBAQAogQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KICMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0ZJQl9SVUxFUz15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQzNiwxMSArNDk5LDEzIEBACiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5NSw2ICs1NjAsNyBAQAogIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKIAogIwogIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCkBAIC01MjcsMTQgKzU5MywyMiBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworQ09ORklHX1NHSV9JT0M0PW0KKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCkBAIC01NzAsOCArNjQ0LDEwIEBACiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lUODIxMz1tCiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNTgxLDYgKzY1Nyw3IEBACiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1RDODZDMDAxPW0KICMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CkBAIC01OTMsNiArNjcwLDEyIEBACiAjCiBDT05GSUdfUkFJRF9BVFRSUz1tCiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE9sZCBDRC1ST00gZHJpdmVycyAobm90IFNDU0ksIG5vdCBJREUpCkBAIC02NDgsNiArNzMxLDggQEAKIENPTkZJR19DSUNBREFfUEhZPW0KIENPTkZJR19WSVRFU1NFX1BIWT1tCiBDT05GSUdfU01TQ19QSFk9bQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC03MDIsNyArNzg3LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTl9TQUE5NzMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC03MjEsMTQgKzgwNiwxOCBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPW0KKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz1tCiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9bQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNzg1LDYgKzg3NCw3IEBACiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CkBAIC04MDQsNiArODk0LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC04MjYsNiArOTE3LDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldApAQCAtODY4LDYgKzk2MCw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9UWFg5PXkKIENPTkZJR19IQVNfVFhYOV9TRVJJQUw9eQorQ09ORklHX1NFUklBTF9UWFg5X05SX1VBUlRTPTYKICMgQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX1RYWDlfU1REU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldApAQCAtODkwLDEwICs5ODMsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKQEAgLTkwMSw3ICs5OTAsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTkyNiwxNyArMTAxNCwxNCBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTk1Miw2ICsxMDM3LDcgQEAKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldApAQCAtOTcxLDYgKzEwNTcsNyBAQAogQ09ORklHX0ZCX0FUWV9DVD15CiAjIENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZX0dYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldApAQCAtMTAwMiw2ICsxMDg5LDEyIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtMTAxNCw4ICsxMTA3LDggQEAKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwogIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCkBAIC0xMDQwLDE0ICsxMTMzLDEyIEBACiAjCiAjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKLSMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKLUNPTkZJR19VU0JfSElESU5QVVQ9eQogIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9ISURERVY9eQpAQCAtMTA2Myw2ICsxMTU0LDcgQEAKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dUQ08gaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTEwNzYsNiArMTE2OCw3IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogCkBAIC0xMDkzLDE4ICsxMTg2LDIwIEBACiAjCiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydApAQCAtMTE2MSw2ICsxMjU2LDE0IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xMTcwLDYgKzEyNzMsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9bQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTExNzgsMTIgKzEyODIsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19GUz1tCiAjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTE5NCw2ICsxMjk5LDcgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTEyMTgsMTEgKzEzMjQsMTMgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKICMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTIzNCw3ICsxMzQyLDYgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKQEAgLTEyNzMsNyArMTM4MCw2IEBACiBDT05GSUdfU01CX0ZTPW0KICMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC0xMzMwLDYgKzE0MzYsMTQgQEAKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTEzMzksMTEgKzE0NTMsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgogCkBAIC0xMzU3LDE4ICsxNDczLDMwIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtMTM4MCw2ICsxNTA4LDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMzg5LDYgKzE1MTgsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPW0KIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTM5OSwzICsxNTI5LDUgQEAKIENPTkZJR19URVhUU0VBUkNIX0tNUD1tCiBDT05GSUdfVEVYVFNFQVJDSF9CTT1tCiBDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKaW5kZXggNDk2YWE2Ny4uMDQxN2U4NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjE5IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI4OjA5IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY0LDEwICs2NCwxNCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19BUkM9eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQpAQCAtNzgsMTAgKzgyLDEwIEBACiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19CSUdfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfQVJDMzI9eQogQ09ORklHX0JPT1RfRUxGMzI9eQotQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0hBVkVfU1REX1BDX1NFUklBTF9QT1JUPXkKK0NPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTQKIENPTkZJR19BUkNfQ09OU09MRT15CiBDT05GSUdfQVJDX01FTU9SWT15CiBDT05GSUdfQVJDX1BST01MSUI9eQpAQCAtMTEwLDYgKzExNCw3IEBACiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfSEFTX0NQVV9SNFgwMD15CiBDT05GSUdfU1lTX0hBU19DUFVfUjUwMDA9eQorQ09ORklHX1NZU19IQVNfQ1BVX1IxMDAwMD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CkBAIC0xMjcsOCArMTMyLDggQEAKIENPTkZJR19CT0FSRF9TQ0FDSEU9eQogQ09ORklHX1I1MDAwX0NQVV9TQ0FDSEU9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQpAQCAtMTQ2LDYgKzE1MSw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNTgsNiArMTY0LDcgQEAKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE3NiwxNyArMTgzLDIyIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0xOTQsMTIgKzIwNiwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIxNyw2ICsyMjksNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yNjMsNiArMjc2LDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNzYsNyArMjk3LDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogQ09ORklHX05FVF9LRVk9bQorQ09ORklHX05FVF9LRVlfTUlHUkFURT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0yOTcsMTAgKzMyMSwxMyBAQAogQ09ORklHX0lORVRfVFVOTkVMPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKIAogIwogIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzEzLDExICszNDAsMTcgQEAKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lQVjZfTUlQNj15CiBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCitDT05GSUdfSVBWNl9TSVQ9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBWNl9TVUJUUkVFUz15CiBDT05GSUdfTkVUV09SS19TRUNNQVJLPXkKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTMyOSwxOCArMzYyLDQzIEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KQEAgLTM1OCw2MCArNDE2LDQ1IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLSMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTks9bQotQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLSMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi1DT05GSUdfSVBfTkZfUFBUUD1tCi1DT05GSUdfSVBfTkZfSDMyMz1tCi1DT05GSUdfSVBfTkZfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9OQVQ9bQotQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQotQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KLUNPTkZJR19JUF9ORl9OQVRfSVJDPW0KLUNPTkZJR19JUF9ORl9OQVRfRlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfVEZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCi1DT05GSUdfSVBfTkZfTkFUX1BQVFA9bQotQ09ORklHX0lQX05GX05BVF9IMzIzPW0KLUNPTkZJR19JUF9ORl9OQVRfU0lQPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCiBDT05GSUdfSVBfTkZfUkFXPW0KQEAgLTQyMiw2ICs0NjUsNyBAQAogIwogIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KQEAgLTQzMSw2ICs0NzUsNyBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVA2X05GX01BVENIX01IPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KQEAgLTQ5Myw3ICs1MzgsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTUwMSw2ICs1NDUsNyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKIENPTkZJR19ORVRfU0NIRUQ9eQorQ09ORklHX05FVF9TQ0hfRklGTz15CiBDT05GSUdfTkVUX1NDSF9DTEtfSklGRklFUz15CiAjIENPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSF9DTEtfQ1BVIGlzIG5vdCBzZXQKQEAgLTU3NSw2ICs2MjAsNyBAQAogQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KICMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0ZJQl9SVUxFUz15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTYwNiwxMCArNjUyLDEwIEBACiBDT05GSUdfUEFSUE9SVF9TRVJJQUw9bQogIyBDT05GSUdfUEFSUE9SVF9QQ19GSUZPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFSUE9SVF9OT1RfUEM9eQogIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVF9BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19QQVJQT1JUXzEyODQ9eQorQ09ORklHX1BBUlBPUlRfTk9UX1BDPXkKIAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKQEAgLTYyMSw3ICs2NjcsNiBAQAogIwogQ09ORklHX0JMS19ERVZfRkQ9bQogQ09ORklHX1BBUklERT1tCi1DT05GSUdfUEFSSURFX1BBUlBPUlQ9bQogCiAjCiAjIFBhcmFsbGVsIElERSBoaWdoLWxldmVsIGRyaXZlcnMKQEAgLTY2NCw2ICs3MDksNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPW0KIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKQEAgLTY3MSw2ICs3MTcsMTIgQEAKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCiAjCisjIE1pc2MgZGV2aWNlcworIworQ09ORklHX1NHSV9JT0M0PW0KKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTY4MCw2ICs3MzIsOCBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9bQogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfVEdUPW0KK0NPTkZJR19TQ1NJX05FVExJTks9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKQEAgLTY5OSwxNCArNzUzLDE3IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQogQ09ORklHX1NDU0lfU0FTX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NBU19MSUJTQVM9bQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCkBAIC03MjAsMTQgKzc3NywxNiBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0FJQzk0WFg9bQorIyBDT05GSUdfQUlDOTRYWF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogQ09ORklHX01FR0FSQUlEX05FV0dFTj15CiBDT05GSUdfTUVHQVJBSURfTU09bQogQ09ORklHX01FR0FSQUlEX01BSUxCT1g9bQogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldApAQCAtNzQyLDE3ICs4MDEsMTkgQEAKICMgQ09ORklHX1NDU0lfSVpJUF9FUFAxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0laSVBfU0xPV19DVFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU05JXzUzQzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MQogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgogQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFNJMjQwSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldApAQCAtNzYwLDYgKzgyMSwxMiBAQAogIyBDT05GSUdfU0NTSV9UMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE9sZCBDRC1ST00gZHJpdmVycyAobm90IFNDU0ksIG5vdCBJREUpCkBAIC03ODAsNiArODQ3LDcgQEAKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT1tCisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETV9DUllQVCBpcyBub3Qgc2V0CiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX01JUlJPUj1tCkBAIC04MzQsNiArOTAyLDggQEAKIENPTkZJR19DSUNBREFfUEhZPW0KIENPTkZJR19WSVRFU1NFX1BIWT1tCiBDT05GSUdfU01TQ19QSFk9bQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC04NjgsNiArOTM4LDcgQEAKICMgQ09ORklHX1NFRVE4MDA1IGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKIENPTkZJR19QQ05FVDMyPXkKKyMgQ09ORklHX1BDTkVUMzJfTkFQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDMzIwMCBpcyBub3Qgc2V0CkBAIC04ODgsNyArOTU5LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTl9TQUE5NzMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CiAKICMKQEAgLTkwOCwxNCArOTc5LDE4IEBACiBDT05GSUdfVklBX1ZFTE9DSVRZPW0KICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPW0KKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz1tCiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9bQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtOTU2LDYgKzEwMzEsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC05NzgsNiArMTA1NCw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9eQogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTEwNTEsMTAgKzExMjgsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKQEAgLTEwNjIsNyArMTEzNSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtMTEwMSwxNCArMTE3Myw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC0xMTI5LDYgKzExOTYsNyBAQAogIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC0xMTM2LDYgKzEyMDQsMTIgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC0xMTQ4LDggKzEyMjIsOCBAQAogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCkBAIC0xMTU5LDkgKzEyMzMsMTEgQEAKICMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19VU0JfVUhDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMTg5LDE4ICsxMjY1LDIwIEBACiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9bQotQ09ORklHX1VTQl9ISURJTlBVVD15CiAjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRkY9eQogQ09ORklHX0hJRF9QSUQ9eQogQ09ORklHX0xPR0lURUNIX0ZGPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19USFJVU1RNQVNURVJfRkY9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9ISURERVY9eQogCiAjCkBAIC0xMjIwLDYgKzEyOTgsNyBAQAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwpAQCAtMTIzNCwxMiArMTMxMywxNCBAQAogQ09ORklHX1VTQl9LQVdFVEg9bQogQ09ORklHX1VTQl9QRUdBU1VTPW0KIENPTkZJR19VU0JfUlRMODE1MD1tCitDT05GSUdfVVNCX1VTQk5FVF9NSUk9bQogQ09ORklHX1VTQl9VU0JORVQ9bQogQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCiBDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCiAjIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KICMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9NQ1M3ODMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KQEAgLTEyNTUsOCArMTMzNiw4IEBACiAjCiBDT05GSUdfVVNCX1NFUklBTD1tCiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKKyMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUU9bQotQ09ORklHX1VTQl9TRVJJQUxfQU5ZREFUQT1tCiAjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVD1tCkBAIC0xMjkwLDE2ICsxMzcxLDIwIEBACiBDT05GSUdfVVNCX1NFUklBTF9LTFNJPW0KIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVD1tCiBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1tCisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCiBDT05GSUdfVVNCX1NFUklBTF9IUDRYPW0KIENPTkZJR19VU0JfU0VSSUFMX1NBRkU9bQogQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQ9eQorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSz1tCiBDT05GSUdfVVNCX1NFUklBTF9YSVJDT009bQogIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCisjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVpVU0I9eQogCiAjCkBAIC0xMzA3LDIwICsxMzkyLDIyIEBACiAjCiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAogQ09ORklHX1VTQl9BVUVSU1dBTEQ9bQogQ09ORklHX1VTQl9SSU81MDA9bQogQ09ORklHX1VTQl9MRUdPVE9XRVI9bQogQ09ORklHX1VTQl9MQ0Q9bQogQ09ORklHX1VTQl9MRUQ9bQotIyBDT05GSUdfVVNCX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogQ09ORklHX1VTQl9DWVRIRVJNPW0KLUNPTkZJR19VU0JfUEhJREdFVEtJVD1tCi1DT05GSUdfVVNCX1BISURHRVRTRVJWTz1tCisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogQ09ORklHX1VTQl9TSVNVU0JWR0E9bQogIyBDT05GSUdfVVNCX1NJU1VTQlZHQV9DT04gaXMgbm90IHNldAogQ09ORklHX1VTQl9MRD1tCisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogQ09ORklHX1VTQl9URVNUPW0KIAogIwpAQCAtMTM3OCw2ICsxNDY1LDE1IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworIyBDT05GSUdfS1MwMTA4IGlzIG5vdCBzZXQKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9bQpAQCAtMTM4Nyw2ICsxNDgzLDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC0xNDAzLDYgKzE1MDAsNyBAQAogQ09ORklHX1hGU19TRUNVUklUWT15CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz1tCiBDT05GSUdfUk9NRlNfRlM9bQpAQCAtMTQxNCw2ICsxNTEyLDcgQEAKIENPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xNDIxLDcgKzE1MjAsNiBAQAogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLUNPTkZJR19aSVNPRlNfRlM9bQogQ09ORklHX1VERl9GUz1tCiBDT05GSUdfVURGX05MUz15CiAKQEAgLTE0NDIsMTEgKzE1NDAsMTMgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTE0NTQsNiArMTU1NCw3IEBACiBDT05GSUdfQURGU19GUz1tCiAjIENPTkZJR19BREZTX0ZTX1JXIGlzIG5vdCBzZXQKIENPTkZJR19BRkZTX0ZTPW0KKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSEZTX0ZTPW0KICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogQ09ORklHX0JFRlNfRlM9bQpAQCAtMTU3OSw2ICsxNjgwLDE0IEBACiBDT05GSUdfTkxTX1VURjg9bQogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworQ09ORklHX0RMTT1tCitDT05GSUdfRExNX1RDUD15CisjIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAorCisjCiAjIFByb2ZpbGluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldApAQCAtMTU4OCwxMSArMTY5NywxMyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCiAKQEAgLTE2MDcsMTggKzE3MTgsMzAgQEAKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQorQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19MUlc9bQogQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCkBAIC0xNjMwLDYgKzE3NTMsNyBAQAogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE2MzksNiArMTc2Myw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkMzMj15CkBAIC0xNjUwLDMgKzE3NzUsNSBAQAogQ09ORklHX1RFWFRTRUFSQ0hfQk09bQogQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCmluZGV4IGUzM2MxNzIuLjUzM2RmNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjE5IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI4OjA5IDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTgxLDEwICs4MSwxNCBAQAogIyBDT05GSUdfU0lCWVRFX1NCMTI1MF9QUk9GIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9UQlBST0YgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAogQ09ORklHX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQogIyBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldApAQCAtMTE3LDYgKzEyMSw3IEBACiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU0IxPXkKIENPTkZJR19TWVNfSEFTX0NQVV9TQjE9eQorQ09ORklHX1dFQUtfT1JERVJJTkc9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQpAQCAtMTM0LDggKzEzOSw4IEBACiAjIENPTkZJR19TSUJZVEVfRE1BX1BBR0VPUFMgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHX1NCMV9QQVNTXzFfV09SS0FST1VORFM9eQogQ09ORklHX0NQVV9IQVNfTExTQz15CkBAIC0xNTUsOCArMTYwLDEwIEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19TTVA9eQogQ09ORklHX1NZU19TVVBQT1JUU19TTVA9eQorQ09ORklHX05SX0NQVVNfREVGQVVMVF8yPXkKIENPTkZJR19OUl9DUFVTPTIKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CkBAIC0xNzEsNiArMTc4LDcgQEAKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfQktMPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTg5LDE2ICsxOTcsMjIgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0yMDYsMTIgKzIyMCwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIzMCw2ICsyNDQsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCkBAIC0yNzAsMTEgKzI4NSwyMCBAQAogIyBDT05GSUdfQlVJTERfRUxGNjQgaXMgbm90IHNldAogQ09ORklHX01JUFMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15CitDT05GSUdfU1lTVklQQ19DT01QQVQ9eQogQ09ORklHX01JUFMzMl9PMzI9eQogIyBDT05GSUdfTUlQUzMyX04zMiBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRjMyPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yODgsNyArMzEyLDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDgsMTAgKzMzNSwxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX1RDUF9NRDVTSUc9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldApAQCAtMzQxLDcgKzM3MSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtNDEwLDYgKzQzOSw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT05MjIwCitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCiBDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKQEAgLTQxNyw5ICs0NDcsMTYgQEAKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQogCiAjCisjIE1pc2MgZGV2aWNlcworIworQ09ORklHX1NHSV9JT0M0PW0KKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCkBAIC00NDksNiArNDg2LDEyIEBACiAjCiBDT05GSUdfUkFJRF9BVFRSUz1tCiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC00OTksNiArNTQyLDggQEAKIENPTkZJR19DSUNBREFfUEhZPW0KIENPTkZJR19WSVRFU1NFX1BIWT1tCiBDT05GSUdfU01TQ19QSFk9bQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC01MzUsMTQgKzU4MCwxNyBAQAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfUUxBM1hYWD1tCiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzPW0KICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUWEVOX05JQz1tCiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02MDQsNiArNjUyLDcgQEAKICMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAogIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKK0NPTkZJR19NT1hBX1NNQVJUSU9fTkVXPW0KICMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKQEAgLTY0MywxMCArNjkyLDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCkBAIC02NTQsNyArNjk5LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC02NzksMTQgKzcyMyw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC02OTgsNiArNzM3LDcgQEAKICMKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzY3LDYgKzgwNywxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzc1LDExICs4MjMsMTMgQEAKIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC04MDksMTcgKzg1OSwxOSBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwogIwogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg1MCw3ICs5MDIsNiBAQAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtODY4LDYgKzkxOSwxNCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTg3NywxMSArOTM2LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKICMgQ09ORklHX1NCMVhYWF9DT1JFTElTIGlzIG5vdCBzZXQKQEAgLTg5NywxOCArOTU4LDMwIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpAQCAtOTIwLDYgKzk5Myw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTI5LDYgKzEwMDMsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkMzMj15CkBAIC05MzYsMyArMTAxMSw1IEBACiBDT05GSUdfWkxJQl9JTkZMQVRFPW0KIENPTkZJR19aTElCX0RFRkxBVEU9bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2VhZF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZwppbmRleCA4M2ZiOTMyLi4zODgxNmZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjIwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBTdW4gRmViIDE4IDIxOjI4OjEwIDIwMDcKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIworQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKQEAgLTI1LDggKzI2LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKQEAgLTQyLDYgKzQxLDcgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTY0LDEwICs2NCwxNCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldApAQCAtMTIwLDggKzEyNCw4IEBACiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CkBAIC0xMzksNiArMTQzLDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE1MSw2ICsxNTYsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTY5LDEzICsxNzUsMTggQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKQEAgLTE4MywxMiArMTk0LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjAxLDYgKzIxMiw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTIyNiw3ICsyMzgsNiBAQAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CiAjCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCiAjIFBDSSBIb3RwbHVnIFN1cHBvcnQKQEAgLTI0MCw2ICsyNTEsMTQgQEAKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKworIwogIyBOZXR3b3JraW5nCiAjCiAjIENPTkZJR19ORVQgaXMgbm90IHNldApAQCAtMjUzLDcgKzI3Miw2IEBACiAjCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCkBAIC0yODMsMTAgKzMwMSwxNSBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTg0MzIKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0yOTYsNiArMzE5LDEyIEBACiAjCiBDT05GSUdfUkFJRF9BVFRSUz15CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC0zNzMsMTcgKzQwMiwxMiBAQAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtMzk5LDYgKzQyMyw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTQwNywxNCArNDMyLDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTQyNSw2ICs0NDUsNyBAQAogIwogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC00OTIsMTYgKzUxMywyNiBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC01MzAsNiArNTYxLDcgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKQEAgLTU4NSwxMiArNjE3LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApAQCAtNjA2LDEwICs2MzksNiBAQAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CkBAIC02MTcsMyArNjQ2LDUgQEAKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZwppbmRleCBlOWQ0ZWFlLi5jMmY3YzhjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVGh1IEp1bCAgNiAxMDowNDoyMCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyODoxMSAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC0yNSw4ICsyNiw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CkBAIC00Miw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1ZSNDFYWD15CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNzIsMTIgKzcyLDE1IEBACiAjIENPTkZJR19WSUNUT1JfTVBDMzBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1pBT19DQVBDRUxMQSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX1ZSNDFYWD15Ci0jIENPTkZJR19WUkM0MTczIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTExMCw2ICsxMTMsNyBAQAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIApAQCAtMTIzLDggKzEyNyw4IEBACiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKQEAgLTEzOSw2ICsxNDMsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTUxLDYgKzE1Niw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNjksMTUgKzE3NSwyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMTg1LDEyICsxOTYsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0yMDgsNiArMjE5LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMjUwLDYgKzI2MiwxNCBAQAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQpAQCAtMjYzLDYgKzI4Myw4IEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTI5MCwxMCArMzEyLDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zMjMsNyArMzQ4LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zNDAsNiArMzY0LDcgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zODgsMTEgKzQxMywxOCBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9bQorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNDAyLDYgKzQzNCw4IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKQEAgLTQyMCwxNCArNDU0LDE3IEBACiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0FTX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NBU19MSUJTQVM9bQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCkBAIC00NDAsMjYgKzQ3NywzNSBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0FJQzk0WFg9bQorIyBDT05GSUdfQUlDOTRYWF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNTEzLDYgKzU1OSw4IEBACiBDT05GSUdfQ0lDQURBX1BIWT1tCiBDT05GSUdfVklURVNTRV9QSFk9bQogQ09ORklHX1NNU0NfUEhZPW0KKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNTQ5LDcgKzU5Nyw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQU5fU0FBOTczMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNTY4LDE0ICs2MTYsMTggQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfUUxBM1hYWD1tCisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTYxNSw2ICs2NjcsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY4MiwxMCArNzM1LDYgQEAKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBTkJBQ19UQjAyMTkgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1ZSNDFYWD15CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTY5NCw3ICs3NDMsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTcxOSwxNCArNzY3LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTc0NSw2ICs3ODgsNyBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzUyLDYgKzc5NiwxMiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTc2NCw4ICs4MTQsOCBAQAogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCkBAIC03NzUsOSArODI1LDExIEBACiAjIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC04MDUsNiArODU3LDcgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtODI5LDYgKzg4Miw3IEBACiAjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HVENPIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC04NDMsNiArODk3LDcgQEAKICMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIApAQCAtODYwLDE5ICs5MTUsMjEgQEAKICMKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTE4LDYgKzk3NSw3IEBACiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CiBDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBSVEMgaW50ZXJmYWNlcwpAQCAtOTUxLDE2ICsxMDA5LDI2IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0ZTPW0KQEAgLTk3MSw2ICsxMDM5LDcgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz15CiBDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTk5MCwxMSArMTA1OSwxMyBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTAzNiw3ICsxMTA3LDYgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwNTQsNiArMTEyNCwxNCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTEwNjMsMTEgKzExNDEsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVZSMCwxMTUyMDAiCiAKQEAgLTEwODAsNyArMTE2MCw0NCBAQAogIwogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19ITUFDPW0KK0NPTkZJR19DUllQVE9fWENCQz1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19MUlc9bQorQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwpAQCAtMTA5Miw2ICsxMjA5LDkgQEAKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcKaW5kZXggYzE5NTk3Zi4uMzNiNzg4MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MjAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjg6MTIgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9WUjQxWFg9eQogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTcyLDEyICs3MiwxNSBAQAogIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAogQ09ORklHX1BDSV9WUjQxWFg9eQotIyBDT05GSUdfVlJDNDE3MyBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CkBAIC0xMTAsNiArMTEzLDcgQEAKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAogQ09ORklHX1NZU19IQVNfQ1BVX1ZSNDFYWD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiAKQEAgLTEyMyw4ICsxMjcsOCBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkBAIC0xMzksNiArMTQzLDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE1MSw2ICsxNTYsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTY5LDE1ICsxNzUsMjAgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKQEAgLTE4NSwxMiArMTk2LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjA4LDYgKzIxOSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTI1MCw2ICsyNjIsMTQgQEAKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKworIwogIyBOZXR3b3JraW5nCiAjCiBDT05GSUdfTkVUPXkKQEAgLTI2Myw2ICsyODMsOCBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0yOTEsMTAgKzMxMywxMyBAQAogQ09ORklHX0lORVRfVFVOTkVMPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTMyNCw3ICszNDksNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM0MSw2ICszNjUsNyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM4OSwxMSArNDE0LDE4IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND1tCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC00MDMsNiArNDM1LDEyIEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTQ1Myw2ICs0OTEsOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTQ4OSwxNCArNTI5LDE3IEBACiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19RTEEzWFhYPW0KIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTUzNSw2ICs1NzgsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTYwMiwxMCArNjQ2LDYgQEAKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKIENPTkZJR19UQU5CQUNfVEIwMjE5PXkKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19WUjQxWFg9eQogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC02MTQsNyArNjU0LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC02MzAsNiArNjY5LDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNjM4LDE0ICs2NzgsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjY0LDYgKzY5OSw3IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC02NzEsNiArNzA3LDEyIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtNjgzLDggKzcyNSw4IEBACiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKICMKQEAgLTY5NCw5ICs3MzYsMTEgQEAKICMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTcxNCw3ICs3NTgsNiBAQAogIwogIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCi0jIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCkBAIC03MzksNiArNzgyLDcgQEAKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dUQ08gaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTc1Miw2ICs3OTYsNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIApAQCAtNzY5LDE5ICs4MTQsMjEgQEAKICMKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtODI3LDYgKzg3NCw3IEBACiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CiBDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBSVEMgaW50ZXJmYWNlcwpAQCAtODYwLDE2ICs5MDgsMjYgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9bQpAQCAtODgwLDYgKzkzOCw3IEBACiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC04OTksMTEgKzk1OCwxMyBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtOTQ1LDcgKzEwMDYsNiBAQAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtOTYzLDYgKzEwMjMsMTQgQEAKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC05NzIsMTEgKzEwNDAsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVZSMCwxMTUyMDAgaXA9YW55IHJvb3Q9L2Rldi9uZnMiCiAKQEAgLTk4OSw3ICsxMDU5LDQ0IEBACiAjCiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX0hNQUM9bQorQ09ORklHX0NSWVBUT19YQ0JDPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC05OTgsOSArMTEwNSwxMyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZwppbmRleCA5N2Q5NGY5Li5kMTgwNTg2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzIKLSMgV2VkIE9jdCAxOCAxMjo1NzoxMSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyODoxMyAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC00MCw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1ZSNDFYWD15CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNzEsMTEgKzczLDE0IEBACiAjIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAogQ09ORklHX1BDSV9WUjQxWFg9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldApAQCAtMTA4LDYgKzExMyw3IEBACiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfSEFTX0NQVV9WUjQxWFg9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQogCkBAIC0xMzcsNiArMTQzLDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE0OSw2ICsxNTYsNyBAQAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTY4LDE0ICsxNzYsMTUgQEAKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMjMzLDcgKzI0Miw2IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjUyLDYgKzI2MCwxNCBAQAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQpAQCAtMjY2LDYgKzI4Miw3IEBACiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX01JR1JBVEU9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTMxNSw2ICszMzIsNyBAQAogIyBDT05GSUdfREVGQVVMVF9XRVNUV09PRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX1JFTk8gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTQxNCw2ICs0MzIsMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9bQorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNDIzLDYgKzQ0Nyw3IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1RHVD1tCiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTQ0Miw2ICs0NjcsNyBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNDg2LDExICs1MTIsMTMgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCiAjCiBDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldApAQCAtNTA2LDYgKzUzNCw3IEBACiAjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKQEAgLTUyMSw4ICs1NTAsMTAgQEAKICMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldApAQCAtNTM5LDYgKzU3MCw3IEBACiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTU2MiwxMCArNTk0LDggQEAKICMgU3Vic3lzdGVtIE9wdGlvbnMKICMKICMgQ09ORklHX0lFRUUxMzk0X1ZFUkJPU0VERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NF9PVUlfREIgaXMgbm90IHNldAogQ09ORklHX0lFRUUxMzk0X0VYVFJBX0NPTkZJR19ST01TPXkKIENPTkZJR19JRUVFMTM5NF9DT05GSUdfUk9NX0lQMTM5ND15Ci0jIENPTkZJR19JRUVFMTM5NF9FWFBPUlRfRlVMTF9BUEkgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC02NTAsOSArNjgwLDExIEBACiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMz1tCiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorQ09ORklHX05FVFhFTl9OSUM9bQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNzYwLDEwICs3OTIsNiBAQAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfVEFOQkFDX1RCMDIxOSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogQ09ORklHX0dQSU9fVlI0MVhYPXkKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNzg3LDYgKzgxNSw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTc5NSwxMSArODI0LDYgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTgxOCw2ICs4NDIsNyBAQAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CkBAIC04MzQsNiArODU5LDcgQEAKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldApAQCAtODYzLDYgKzg4OSwxMiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTg3NSw4ICs5MDcsOCBAQAogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiAjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKICMKQEAgLTg4Niw5ICs5MTgsMTEgQEAKICMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTkyMyw3ICs5NTcsNiBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9bQotQ09ORklHX1VTQl9ISURJTlBVVD15CiAjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKQEAgLTk0NSw3ICs5NzgsNyBAQAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dUQ08gaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTk2MCw2ICs5OTMsNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIApAQCAtOTkxLDYgKzEwMjUsNyBAQAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydApAQCAtMTA0Nyw2ICsxMDgyLDE0IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xMTA1LDcgKzExNDgsNyBAQAogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMTU5LDYgKzEyMDIsMTQgQEAKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMTcxLDEwICsxMjIyLDEwIEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVZSMCwxMTUyMDAgaXA9YW55IHJvb3Q9L2Rldi9uZnMiCiAKQEAgLTExODcsMTQgKzEyMzgsNTkgQEAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCmluZGV4IDU1MzczNGEuLjU3MGYwYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMyCi0jIFR1ZSBKdWwgMjUgMjM6MTM6MDQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjg6MTMgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9WUjQxWFg9eQogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTcwLDEwICs3MCwxNCBAQAogIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldApAQCAtMTA2LDYgKzExMCw3IEBACiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfSEFTX0NQVV9WUjQxWFg9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQogCkBAIC0xMTksOCArMTI0LDggQEAKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTM1LDYgKzE0MCw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CkBAIC0xNDcsNiArMTUzLDcgQEAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTE2NSwxNiArMTcyLDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC0xODIsMTIgKzE5MywxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIwNSw2ICsyMTYsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yNTcsNiArMjY5LDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNzAsNyArMjkwLDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjg4LDEwICszMTEsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTMyMSw3ICszNDcsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM4Nyw5ICs0MTIsMTQgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCkBAIC00MTksNiArNDQ5LDEyIEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgT2xkIENELVJPTSBkcml2ZXJzIChub3QgU0NTSSwgbm90IElERSkKQEAgLTQ3Miw2ICs1MDgsOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTU3NSw2ICs2MTMsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY0MSwxMCArNjgwLDYgQEAKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLQotIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKQEAgLTY1Nyw3ICs2OTIsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTY4MiwxNCArNzE2LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTcwOCw2ICs3MzcsNyBAQAogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzE1LDYgKzc0NSwxMiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldApAQCAtNzc1LDYgKzgxMSwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzgzLDExICs4MjcsMTMgQEAKIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC03OTgsNiArODQ0LDcgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz15CiBDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTgxNywxMSArODY0LDEzIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC04NzUsNiArOTI0LDE0IEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworQ09ORklHX0RMTT1tCitDT05GSUdfRExNX1RDUD15CisjIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAorCisjCiAjIFByb2ZpbGluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldApAQCAtODg0LDExICs5NDEsMTMgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlWUjAsMTkyMDAgaWRlMD0weDE3MCwweDM3Niw0OSBtZW09MTZNIgogCkBAIC05MDEsNyArOTYwLDQ0IEBACiAjCiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX0hNQUM9bQorQ09ORklHX0NSWVBUT19YQ0JDPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC05MTAsOCArMTAwNiwxMyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy93cnBwbWNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZwppbmRleCBkM2RmYjcwLi4wOGYzMTkwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy93cnBwbWNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3dycHBtY19kZWZjb25maWcKQEAgLTEsMTMgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVGh1IEp1bCAgNiAxMDowNDoyMSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU3VuIEZlYiAxOCAyMToyODoxNCAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKK0NPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC0yNSw4ICsyNiw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAogIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CkBAIC00Miw2ICs0MSw3IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02NCwxMCArNjQsMTQgQEAKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKIENPTkZJR19DUFVfQklHX0VORElBTj15CkBAIC0xMjQsOCArMTI4LDggQEAKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKQEAgLTE0Myw2ICsxNDcsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldApAQCAtMTU1LDYgKzE2MCw3IEBACiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0xNzMsMTYgKzE3OSwyMiBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX0hPVFBMVUc9eQpAQCAtMTkwLDEyICsyMDIsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIxMyw2ICsyMjUsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yNTgsNiArMjcxLDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNzEsNiArMjkyLDggQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorQ09ORklHX1hGUk1fTUlHUkFURT15CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMjk0LDEwICszMTcsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19UQ1BfTUQ1U0lHPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTMyNyw3ICszNTMsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM5MCwxMSArNDE1LDE4IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCitDT05GSUdfU0dJX0lPQzQ9bQorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNDA0LDYgKzQzNiwxMiBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC00NTQsNiArNDkyLDggQEAKICMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTQ5MCw3ICs1MzAsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfTEFOX1NBQTk3MzAgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTUwOSwxNCArNTQ5LDE4IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX1FMQTNYWFg9bQorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzPW0KICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUWEVOX05JQz1tCiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02MDIsMTAgKzY0Niw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNjEzLDcgKzY1Myw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNjI5LDYgKzY2OCw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTYzNywxNyArNjc3LDE0IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjU5LDYgKzY5Niw3IEBACiAjCiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTcyOCwxNCArNzY2LDI0IEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtNzQ2LDYgKzc5NCw3IEBACiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNzY1LDExICs4MTQsMTMgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTgwNiw3ICs4NTcsNiBAQAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtODI0LDYgKzg3NCwxNCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKK0NPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTgzMywxMSArODkxLDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiCiAKQEAgLTg1MCw3ICs5MTAsNDQgQEAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKQEAgLTg1OSw4ICs5NTYsMTMgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD15CiBDT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQzMyPXkKIENPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT1tCitDT05GSUdfWkxJQl9ERUZMQVRFPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZwppbmRleCBiOWY3NGQ2Li5hYTY5ZmVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MjEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjg6MTUgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiBDT05GSUdfUE1DX1lPU0VNSVRFPXkKQEAgLTY1LDEwICs2NSwxNCBAQAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWVBFUlRSQU5TUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19DUFVfQklHX0VORElBTj15CiAjIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CkBAIC0xMDIsNiArMTA2LDcgQEAKIENPTkZJR19DUFVfUk05MDAwPXkKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAogQ09ORklHX1NZU19IQVNfQ1BVX1JNOTAwMD15CitDT05GSUdfV0VBS19PUkRFUklORz15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CkBAIC0xMTgsOCArMTIzLDggQEAKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKQEAgLTEzNiw2ICsxNDEsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19TTVA9eQogQ09ORklHX1NZU19TVVBQT1JUU19TTVA9eQogQ09ORklHX05SX0NQVVM9MgpAQCAtMTcwLDE1ICsxNzYsMjAgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC0xODcsMTIgKzE5OCwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIxMCw2ICsyMjEsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yNTIsNiArMjY0LDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yODEsMTMgKzMwMSwxNSBAQAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CiBDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CkBAIC0yOTgsNiArMzIwLDggQEAKIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JUFY2X1NJVD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQogQ09ORklHX05FVFdPUktfU0VDTUFSSz15CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldApAQCAtMzM2LDYgKzM2MCw3IEBACiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCkBAIC0zNzQsNiArMzk5LDExIEBACiBDT05GSUdfQVRBX09WRVJfRVRIPW0KIAogIworIyBNaXNjIGRldmljZXMKKyMKK0NPTkZJR19TR0lfSU9DND1tCisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTM4Myw2ICs0MTMsMTIgQEAKICMKIENPTkZJR19SQUlEX0FUVFJTPW0KICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTQzMyw2ICs0NjksOCBAQAogQ09ORklHX0NJQ0FEQV9QSFk9bQogQ09ORklHX1ZJVEVTU0VfUEhZPW0KIENPTkZJR19TTVNDX1BIWT1tCisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTQ2MywxOCArNTAxLDIyIEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogQ09ORklHX1RJVEFOX0dFPXkKK0NPTkZJR19RTEEzWFhYPW0KIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDM9bQogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRYRU5fTklDPW0KIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTU1OSwxMCArNjAxLDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCkBAIC01OTMsMTQgKzYzMSw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC02MTIsNiArNjQ1LDcgQEAKICMKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNjgwLDE0ICs3MTQsMjMgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTY5Nyw2ICs3NDAsNyBAQAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC03MTYsOCArNzYwLDEwIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogCkBAIC03MzcsNiArNzgzLDcgQEAKICMKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQpAQCAtNzQ0LDcgKzc5MSw2IEBACiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKIApAQCAtNzY0LDI1ICs4MTAsMzEgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CkBAIC04MDIsNiArODU0LDEwIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQpAQCAtODExLDkgKzg2NywxNCBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQogQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCkBAIC04MjUsNiArODg2LDcgQEAKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC04MzQsNiArODk2LDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9bQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9bQpAQCAtODQxLDMgKzkwNCw1IEBACiBDT05GSUdfWkxJQl9JTkZMQVRFPW0KIENPTkZJR19aTElCX0RFRkxBVEU9bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9kZWZjb25maWcKaW5kZXggZjk4MTJkMS4uNmMyYTIzMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MTAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIFN1biBGZWIgMTggMjE6Mjc6MzQgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldApAQCAtMjUsOCArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldApAQCAtNDIsNiArNDEsNyBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjQsMTMgKzY0LDE4IEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAogQ09ORklHX0FSQz15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUFfU1VQUE9SVF9CUk9LRU49eQogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKICMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CkBAIC0xMjMsOCArMTI4LDggQEAKIENPTkZJR19CT0FSRF9TQ0FDSEU9eQogQ09ORklHX0lQMjJfQ1BVX1NDQUNIRT15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfTExTQz15CkBAIC0xNDEsNiArMTQ2LDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKQEAgLTE1Myw2ICsxNTksNyBAQAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMTcxLDE2ICsxNzgsMjEgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CkBAIC0xODgsMTIgKzIwMCwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTIxMSw2ICsyMjMsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0yMzgsNyArMjUxLDYgQEAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAogIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CkBAIC0yNTIsNiArMjY0LDE0IEBACiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisKKyMKICMgTmV0d29ya2luZwogIwogQ09ORklHX05FVD15CkBAIC0yNjUsNyArMjg1LDEwIEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9NSUdSQVRFPXkKIENPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19ORVRfS0VZX01JR1JBVEU9eQogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldApAQCAtMjg2LDEwICszMDksMTMgQEAKIENPTkZJR19JTkVUX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCitDT05GSUdfVENQX01ENVNJRz15CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTMzMSwxMSArMzU3LDE3IEBACiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JUFY2X01JUDY9eQogQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT049bQorQ09ORklHX0lQVjZfU0lUPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQVjZfU1VCVFJFRVM9eQogQ09ORklHX05FVFdPUktfU0VDTUFSSz15CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CkBAIC0zNDYsMTkgKzM3OCw0MyBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQpAQCAtMzc1LDYwICs0MzEsNDUgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX0NUX0FDQ1Q9eQotQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTks9bQotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfVEZUUD1tCi1DT05GSUdfSVBfTkZfQU1BTkRBPW0KLUNPTkZJR19JUF9ORl9QUFRQPW0KLUNPTkZJR19JUF9ORl9IMzIzPW0KLUNPTkZJR19JUF9ORl9TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KLUNPTkZJR19JUF9ORl9OQVRfUFBUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0gzMjM9bQotQ09ORklHX0lQX05GX05BVF9TSVA9bQorQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCitDT05GSUdfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1BQVFA9bQorQ09ORklHX05GX05BVF9IMzIzPW0KK0NPTkZJR19ORl9OQVRfU0lQPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9SQVc9bQpAQCAtNDM5LDYgKzQ4MCw3IEBACiAjCiAjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQpAQCAtNDQ4LDYgKzQ5MCw3IEBACiBDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCiBDT05GSUdfSVA2X05GX01BVENIX0FIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCiBDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQpAQCAtNDg0LDcgKzUyNyw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTQ5Miw2ICs1MzQsNyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKIENPTkZJR19ORVRfU0NIRUQ9eQorQ09ORklHX05FVF9TQ0hfRklGTz15CiAjIENPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVk9eQogIyBDT05GSUdfTkVUX1NDSF9DTEtfQ1BVIGlzIG5vdCBzZXQKQEAgLTU0Niw2ICs1ODksNyBAQAogQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KICMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0ZJQl9SVUxFUz15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTU1Niw3ICs2MDAsNiBAQAogIwogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwpAQCAtNTkyLDYgKzYzNSwxMCBAQAogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTYwMSw2ICs2NDgsOCBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9bQogQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfVEdUPW0KKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwpAQCAtNjIwLDI0ICs2NjksMzAgQEAKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CiAKICMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIyBTQ1NJIFRyYW5zcG9ydHMKICMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KIENPTkZJR19TQ1NJX1NBU19BVFRSUz1tCisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKICMKIENPTkZJR19JU0NTSV9UQ1A9bQogQ09ORklHX1NHSVdEOTNfU0NTST15Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCiAjCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CkBAIC02NzksNiArNzM0LDggQEAKIENPTkZJR19DSUNBREFfUEhZPW0KICMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNzMwLDYgKzc4Nyw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzUyLDYgKzgxMCw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9bQogQ09ORklHX01PVVNFX1NFUklBTD1tCkBAIC04MTUsMTAgKzg3NCw2IEBACiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogQ09ORklHX1JBV19EUklWRVI9bQogQ09ORklHX01BWF9SQVdfREVWUz0yNTYKIApAQCAtODI2LDcgKzg4MSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtODUxLDE0ICs5MDUsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtODg3LDYgKzkzNiw3IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyNCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19TR0lfQ0xVVDIyND15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC04OTQsNiArOTQ0LDEyIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CkBAIC05NTQsNiArMTAxMCwxNCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9bQpAQCAtOTYzLDYgKzEwMjcsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtOTc0LDYgKzEwMzksNyBAQAogQ09ORklHX1hGU19TRUNVUklUWT15CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz1tCiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC05ODcsNiArMTA1Myw3IEBACiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTk0LDcgKzEwNjEsNiBAQAogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLUNPTkZJR19aSVNPRlNfRlM9bQogQ09ORklHX1VERl9GUz1tCiBDT05GSUdfVURGX05MUz15CiAKQEAgLTEwMTMsMTcgKzEwNzksMjAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTQyLDYgKzEyMTEsMTQgQEAKIENPTkZJR19OTFNfVVRGOD1tCiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCitDT05GSUdfRExNPW0KK0NPTkZJR19ETE1fVENQPXkKKyMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMTUxLDExICsxMjI4LDEzIEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQogQ09ORklHX0NNRExJTkU9IiIKIApAQCAtMTE3MCwxOCArMTI0OSwzMCBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiBDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTExOTMsNiArMTI4NCw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIwMiw2ICsxMjk0LDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9bQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKIENPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDMzI9bQpAQCAtMTIxMywzICsxMzA2LDUgQEAKIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxLmMKaW5kZXggYzE5MWIzZS4uZDk1NjA0NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnEuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vaTgyNTkuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9pcnEuYyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycS5jCmluZGV4IDMyOTliNmQuLmUyNjYzMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycS5jCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycS5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMWJmMmM4NC4uOGZhZjFiNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCkBAIC01Myw5ICs1Myw5IEBACiBvYmotJChDT05GSUdfMzJCSVQpCQkrPSBzY2FsbDMyLW8zMi5vCiBvYmotJChDT05GSUdfNjRCSVQpCQkrPSBzY2FsbDY0LTY0Lm8KIG9iai0kKENPTkZJR19CSU5GTVRfSVJJWCkJKz0gYmluZm10X2lyaXgubwotb2JqLSQoQ09ORklHX01JUFMzMl9DT01QQVQpCSs9IGxpbnV4MzIubyBzaWduYWwzMi5vCitvYmotJChDT05GSUdfTUlQUzMyX0NPTVBBVCkJKz0gbGludXgzMi5vIHB0cmFjZTMyLm8gc2lnbmFsMzIubwogb2JqLSQoQ09ORklHX01JUFMzMl9OMzIpCSs9IGJpbmZtdF9lbGZuMzIubyBzY2FsbDY0LW4zMi5vIHNpZ25hbF9uMzIubwotb2JqLSQoQ09ORklHX01JUFMzMl9PMzIpCSs9IGJpbmZtdF9lbGZvMzIubyBzY2FsbDY0LW8zMi5vIHB0cmFjZTMyLm8KK29iai0kKENPTkZJR19NSVBTMzJfTzMyKQkrPSBiaW5mbXRfZWxmbzMyLm8gc2NhbGw2NC1vMzIubwogCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGdkYi1sb3cubyBnZGItc3R1Yi5vCiBvYmotJChDT05GSUdfUFJPQ19GUykJCSs9IHByb2MubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggZjU5ZWYyNy4uYWI3NTVlYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAKKyNpbmNsdWRlIDxhc20vYnVncy5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CkBAIC05Nyw3ICs5OCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBub3dhaXQgPSAwOwogCi1pbnQgX19pbml0IHdhaXRfZGlzYWJsZShjaGFyICpzKQorc3RhdGljIGludCBfX2luaXQgd2FpdF9kaXNhYmxlKGNoYXIgKnMpCiB7CiAJbm93YWl0ID0gMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCmluZGV4IGIzM2JhNmMuLjljNzk3MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKQEAgLTI4LDcgKzI4LDcgQEAKICAqIG1vdmVzIHRvIGFyY2ggaW5kZXBlbmRlbnQgbGFuZAogICovCiAKLXN0YXRpYyBpbnQgaTgyNTlBX2F1dG9fZW9pOworc3RhdGljIGludCBpODI1OUFfYXV0b19lb2kgPSAtMTsKIERFRklORV9TUElOTE9DSyhpODI1OUFfbG9jayk7CiAvKiBzb21lIHBsYXRmb3JtcyBjYWxsIHRoaXMuLi4gKi8KIHZvaWQgbWFza19hbmRfYWNrXzgyNTlBKHVuc2lnbmVkIGludCk7CkBAIC0yMTYsNyArMjE2LDggQEAKIAogc3RhdGljIGludCBpODI1OUFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7Ci0JaW5pdF84MjU5QShpODI1OUFfYXV0b19lb2kpOworCWlmIChpODI1OUFfYXV0b19lb2kgPj0gMCkKKwkJaW5pdF84MjU5QShpODI1OUFfYXV0b19lb2kpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjYsOCArMjI3LDEwIEBACiAJICogdGhlIGtlcm5lbCBpbml0aWFsaXphdGlvbiBjb2RlIGNhbiBnZXQgaXQKIAkgKiBvdXQgb2YuCiAJICovCi0Jb3V0YigweGZmLCBQSUNfTUFTVEVSX0lNUik7CS8qIG1hc2sgYWxsIG9mIDgyNTlBLTEgKi8KLQlvdXRiKDB4ZmYsIFBJQ19TTEFWRV9JTVIpOwkvKiBtYXNrIGFsbCBvZiA4MjU5QS0xICovCisJaWYgKGk4MjU5QV9hdXRvX2VvaSA+PSAwKSB7CisJCW91dGIoMHhmZiwgUElDX01BU1RFUl9JTVIpOwkvKiBtYXNrIGFsbCBvZiA4MjU5QS0xICovCisJCW91dGIoMHhmZiwgUElDX1NMQVZFX0lNUik7CS8qIG1hc2sgYWxsIG9mIDgyNTlBLTEgKi8KKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1Miw3ICsyNTUsNyBAQAogCiBkZXZpY2VfaW5pdGNhbGwoaTgyNTlBX2luaXRfc3lzZnMpOwogCi12b2lkIF9faW5pdCBpbml0XzgyNTlBKGludCBhdXRvX2VvaSkKK3ZvaWQgaW5pdF84MjU5QShpbnQgYXV0b19lb2kpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL21pcHMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCBlMGFkNzU0Li44ZjQyZmE4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL21pcHMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMTMsOCArMTMsOCBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotY29uc3QgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcmVsb2NhdGVfbmV3X2tlcm5lbFtdOwotY29uc3QgZXh0ZXJuIHVuc2lnbmVkIGludCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU7CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciByZWxvY2F0ZV9uZXdfa2VybmVsW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2V4ZWNfc3RhcnRfYWRkcmVzczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGtleGVjX2luZGlyZWN0aW9uX3BhZ2U7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDA0ZTViMzguLmE2NjkwODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAKLSNpbmNsdWRlIDxhc20vYWJpLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9kc3AuaD4KQEAgLTY2LDM4ICs2NSw2IEBACiAJfQogfQogCi0vKgotICogTmF0aXZlIG8zMiBhbmQgTjY0IEFCSSB3aXRob3V0IERTUCBBU0UKLSAqLwotc3RydWN0IG1pcHNfYWJpIG1pcHNfYWJpID0gewotCS5kb19zaWduYWwJPSBkb19zaWduYWwsCi0jaWZkZWYgQ09ORklHX1RSQURfU0lHTkFMUwotCS5zZXR1cF9mcmFtZQk9IHNldHVwX2ZyYW1lLAotI2VuZGlmCi0JLnNldHVwX3J0X2ZyYW1lCT0gc2V0dXBfcnRfZnJhbWUKLX07Ci0KLSNpZmRlZiBDT05GSUdfTUlQUzMyX08zMgotLyoKLSAqIG8zMiBjb21wYXRpYmlsaXR5IG9uIDY0LWJpdCBrZXJuZWxzLCB3aXRob3V0IERTUCBBU0UKLSAqLwotc3RydWN0IG1pcHNfYWJpIG1pcHNfYWJpXzMyID0gewotCS5kb19zaWduYWwJPSBkb19zaWduYWwzMiwKLQkuc2V0dXBfZnJhbWUJPSBzZXR1cF9mcmFtZV8zMiwKLQkuc2V0dXBfcnRfZnJhbWUJPSBzZXR1cF9ydF9mcmFtZV8zMgotfTsKLSNlbmRpZiAvKiBDT05GSUdfTUlQUzMyX08zMiAqLwotCi0jaWZkZWYgQ09ORklHX01JUFMzMl9OMzIKLS8qCi0gKiBOMzIgb24gNjQtYml0IGtlcm5lbHMsIHdpdGhvdXQgRFNQIEFTRQotICovCi1zdHJ1Y3QgbWlwc19hYmkgbWlwc19hYmlfbjMyID0gewotCS5kb19zaWduYWwJPSBkb19zaWduYWwsCi0JLnNldHVwX3J0X2ZyYW1lCT0gc2V0dXBfcnRfZnJhbWVfbjMyCi19OwotI2VuZGlmIC8qIENPTkZJR19NSVBTMzJfTjMyICovCi0KIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpOwogCiB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgc3ApCkBAIC0yNDYsNyArMjEzLDcgQEAKIC8qCiAgKiBDcmVhdGUgYSBrZXJuZWwgdGhyZWFkCiAgKi8KLUFUVFJJQl9OT1JFVCB2b2lkIGtlcm5lbF90aHJlYWRfaGVscGVyKHZvaWQgKmFyZywgaW50ICgqZm4pKHZvaWQgKikpCitzdGF0aWMgQVRUUklCX05PUkVUIHZvaWQga2VybmVsX3RocmVhZF9oZWxwZXIodm9pZCAqYXJnLCBpbnQgKCpmbikodm9pZCAqKSkKIHsKIAlkb19leGl0KGZuKGFyZykpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCmluZGV4IDM5NDU0MGYuLjExYWIyMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKQEAgLTU0Myw3ICs1NDMsNyBAQAogI2VuZGlmCiB9CiAKLWludCBfX2luaXQgZnB1X2Rpc2FibGUoY2hhciAqcykKK3N0YXRpYyBpbnQgX19pbml0IGZwdV9kaXNhYmxlKGNoYXIgKnMpCiB7CiAJaW50IGk7CiAKQEAgLTU1NSw3ICs1NTUsNyBAQAogCiBfX3NldHVwKCJub2ZwdSIsIGZwdV9kaXNhYmxlKTsKIAotaW50IF9faW5pdCBkc3BfZGlzYWJsZShjaGFyICpzKQorc3RhdGljIGludCBfX2luaXQgZHNwX2Rpc2FibGUoY2hhciAqcykKIHsKIAljcHVfZGF0YVswXS5hc2VzICY9IH5NSVBTX0FTRV9EU1A7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jCmluZGV4IGIyZTlhYjEuLmFkYmZiOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYwpAQCAtMzk4LDcgKzM5OCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfVFJBRF9TSUdOQUxTCi1pbnQgc2V0dXBfZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorc3RhdGljIGludCBzZXR1cF9mcmFtZShzdHJ1Y3Qga19zaWdhY3Rpb24gKiBrYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJaW50IHNpZ25yLCBzaWdzZXRfdCAqc2V0KQogewogCXN0cnVjdCBzaWdmcmFtZSBfX3VzZXIgKmZyYW1lOwpAQCAtNDQzLDcgKzQ0Myw3IEBACiB9CiAjZW5kaWYKIAotaW50IHNldHVwX3J0X2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqIGthLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKK3N0YXRpYyBpbnQgc2V0dXBfcnRfZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCWludCBzaWduciwgc2lnc2V0X3QgKnNldCwgc2lnaW5mb190ICppbmZvKQogewogCXN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKmZyYW1lOwpAQCAtNTAxLDYgKzUwMSwxNCBAQAogCXJldHVybiAtRUZBVUxUOwogfQogCitzdHJ1Y3QgbWlwc19hYmkgbWlwc19hYmkgPSB7CisjaWZkZWYgQ09ORklHX1RSQURfU0lHTkFMUworCS5zZXR1cF9mcmFtZQk9IHNldHVwX2ZyYW1lLAorI2VuZGlmCisJLnNldHVwX3J0X2ZyYW1lCT0gc2V0dXBfcnRfZnJhbWUsCisJLnJlc3RhcnQJPSBfX05SX3Jlc3RhcnRfc3lzY2FsbAorfTsKKwogc3RhdGljIGludCBoYW5kbGVfc2lnbmFsKHVuc2lnbmVkIGxvbmcgc2lnLCBzaWdpbmZvX3QgKmluZm8sCiAJc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC01MzksNyArNTQ3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIGRvX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIGRvX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qga19zaWdhY3Rpb24ga2E7CiAJc2lnc2V0X3QgKm9sZHNldDsKQEAgLTU4OSw3ICs1OTcsNyBAQAogCQkJcmVncy0+Y3AwX2VwYyAtPSA4OwogCQl9CiAJCWlmIChyZWdzLT5yZWdzWzJdID09IEVSRVNUQVJUX1JFU1RBUlRCTE9DSykgewotCQkJcmVncy0+cmVnc1syXSA9IF9fTlJfcmVzdGFydF9zeXNjYWxsOworCQkJcmVncy0+cmVnc1syXSA9IGN1cnJlbnQtPnRocmVhZC5hYmktPnJlc3RhcnQ7CiAJCQlyZWdzLT5yZWdzWzddID0gcmVncy0+cmVnc1syNl07CiAJCQlyZWdzLT5jcDBfZXBjIC09IDQ7CiAJCX0KQEAgLTYxNSw1ICs2MjMsNSBAQAogewogCS8qIGRlYWwgd2l0aCBwZW5kaW5nIHNpZ25hbCBkZWxpdmVyeSAqLwogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIChfVElGX1NJR1BFTkRJTkcgfCBfVElGX1JFU1RPUkVfU0lHTUFTSykpCi0JCWN1cnJlbnQtPnRocmVhZC5hYmktPmRvX3NpZ25hbChyZWdzKTsKKwkJZG9fc2lnbmFsKHJlZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwzMi5jCmluZGV4IGMyOGNiMjEuLjE5YmJlZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsMzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbDMyLmMKQEAgLTEwNCwxNyArMTA0LDEwIEBACiAgKi8KICNkZWZpbmUgX19OUl9PMzJfc2lncmV0dXJuCQk0MTE5CiAjZGVmaW5lIF9fTlJfTzMyX3J0X3NpZ3JldHVybgkJNDE5MwotI2RlZmluZSBfX05SX08zMl9yZXN0YXJ0X3N5c2NhbGwJNDI1MworI2RlZmluZSBfX05SX08zMl9yZXN0YXJ0X3N5c2NhbGwgICAgICAgIDQyNTMKIAogLyogMzItYml0IGNvbXBhdGliaWxpdHkgdHlwZXMgKi8KIAotI2RlZmluZSBfTlNJR19CUFczMgkzMgotI2RlZmluZSBfTlNJR19XT1JEUzMyCShfTlNJRyAvIF9OU0lHX0JQVzMyKQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IHNpZ1tfTlNJR19XT1JEUzMyXTsKLX0gc2lnc2V0X3QzMjsKLQogdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zaWdoYW5kbGVyMzJfdDsKIHR5cGVkZWYgdm9pZCAoKnZmcHRyX3QpKHZvaWQpOwogCkBAIC0xMzYsNyArMTI5LDcgQEAKIAlzMzIgICAgICAgICAgICAgICAgIHVjX2xpbms7CiAJc3RhY2szMl90ICAgICAgICAgICB1Y19zdGFjazsKIAlzdHJ1Y3Qgc2lnY29udGV4dDMyIHVjX21jb250ZXh0OwotCXNpZ3NldF90MzIgICAgICAgICAgdWNfc2lnbWFzazsgICAvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KKwljb21wYXRfc2lnc2V0X3QgICAgIHVjX3NpZ21hc2s7ICAgLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCiB9OwogCiAvKgpAQCAtMTUwLDcgKzE0Myw3IEBACiAJdTMyIHNmX2Fzc1s0XTsJCS8qIGFyZ3VtZW50IHNhdmUgc3BhY2UgZm9yIG8zMiAqLwogCXUzMiBzZl9jb2RlWzJdOwkJLyogc2lnbmFsIHRyYW1wb2xpbmUgKi8KIAlzdHJ1Y3Qgc2lnY29udGV4dDMyIHNmX3NjOwotCXNpZ3NldF90IHNmX21hc2s7CisJY29tcGF0X3NpZ3NldF90IHNmX21hc2s7CiB9OwogCiBzdHJ1Y3QgcnRfc2lnZnJhbWUzMiB7CkBAIC0xNjYsNyArMTU5LDcgQEAKIAl1MzIgc2ZfYXNzWzRdOwkJCS8qIGFyZ3VtZW50IHNhdmUgc3BhY2UgZm9yIG8zMiAqLwogCXUzMiBzZl9wYWRbMl07CiAJc3RydWN0IHNpZ2NvbnRleHQzMiBzZl9zYzsJLyogaHcgY29udGV4dCAqLwotCXNpZ3NldF90IHNmX21hc2s7CisJY29tcGF0X3NpZ3NldF90IHNmX21hc2s7CiAJdTMyIHNmX2NvZGVbOF0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwkvKiBzaWduYWwgdHJhbXBvbGluZSAqLwogfTsKIApAQCAtNTk4LDcgKzU5MSw3IEBACiAJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOwogfQogCi1pbnQgc2V0dXBfZnJhbWVfMzIoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorc3RhdGljIGludCBzZXR1cF9mcmFtZV8zMihzdHJ1Y3Qga19zaWdhY3Rpb24gKiBrYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJaW50IHNpZ25yLCBzaWdzZXRfdCAqc2V0KQogewogCXN0cnVjdCBzaWdmcmFtZTMyIF9fdXNlciAqZnJhbWU7CkBAIC02NDQsNyArNjM3LDcgQEAKIAlyZXR1cm4gLUVGQVVMVDsKIH0KIAotaW50IHNldHVwX3J0X2ZyYW1lXzMyKHN0cnVjdCBrX3NpZ2FjdGlvbiAqIGthLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKK3N0YXRpYyBpbnQgc2V0dXBfcnRfZnJhbWVfMzIoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCWludCBzaWduciwgc2lnc2V0X3QgKnNldCwgc2lnaW5mb190ICppbmZvKQogewogCXN0cnVjdCBydF9zaWdmcmFtZTMyIF9fdXNlciAqZnJhbWU7CkBAIC03MDQsMTEwICs2OTcsMTQgQEAKIAlyZXR1cm4gLUVGQVVMVDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc2lnaW5mb190ICppbmZvLAotCXN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICogcmVncykKLXsKLQlpbnQgcmV0OwotCi0Jc3dpdGNoIChyZWdzLT5yZWdzWzBdKSB7Ci0JY2FzZSBFUkVTVEFSVF9SRVNUQVJUQkxPQ0s6Ci0JY2FzZSBFUkVTVEFSVE5PSEFORDoKLQkJcmVncy0+cmVnc1syXSA9IEVJTlRSOwotCQlicmVhazsKLQljYXNlIEVSRVNUQVJUU1lTOgotCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkgewotCQkJcmVncy0+cmVnc1syXSA9IEVJTlRSOwotCQkJYnJlYWs7Ci0JCX0KLQkvKiBmYWxsdGhyb3VnaCAqLwotCWNhc2UgRVJFU1RBUlROT0lOVFI6CQkvKiBVc2VybGFuZCB3aWxsIHJlbG9hZCAkdjAuICAqLwotCQlyZWdzLT5yZWdzWzddID0gcmVncy0+cmVnc1syNl07Ci0JCXJlZ3MtPmNwMF9lcGMgLT0gODsKLQl9Ci0KLQlyZWdzLT5yZWdzWzBdID0gMDsJCS8qIERvbid0IGRlYWwgd2l0aCB0aGlzIGFnYWluLiAgKi8KLQotCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQotCQlyZXQgPSBjdXJyZW50LT50aHJlYWQuYWJpLT5zZXR1cF9ydF9mcmFtZShrYSwgcmVncywgc2lnLCBvbGRzZXQsIGluZm8pOwotCWVsc2UKLQkJcmV0ID0gY3VycmVudC0+dGhyZWFkLmFiaS0+c2V0dXBfZnJhbWUoa2EsIHJlZ3MsIHNpZywgb2xkc2V0KTsKLQotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwmY3VycmVudC0+YmxvY2tlZCwma2EtPnNhLnNhX21hc2spOwotCWlmICghKGthLT5zYS5zYV9mbGFncyAmIFNBX05PREVGRVIpKQotCQlzaWdhZGRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsc2lnKTsKLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGRvX3NpZ25hbDMyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBrX3NpZ2FjdGlvbiBrYTsKLQlzaWdzZXRfdCAqb2xkc2V0OwotCXNpZ2luZm9fdCBpbmZvOwotCWludCBzaWducjsKLQotCS8qCi0JICogV2Ugd2FudCB0aGUgY29tbW9uIGNhc2UgdG8gZ28gZmFzdCwgd2hpY2ggaXMgd2h5IHdlIG1heSBpbiBjZXJ0YWluCi0JICogY2FzZXMgZ2V0IGhlcmUgZnJvbSBrZXJuZWwgbW9kZS4gSnVzdCByZXR1cm4gd2l0aG91dCBkb2luZyBhbnl0aGluZwotCSAqIGlmIHNvLgotCSAqLwotCWlmICghdXNlcl9tb2RlKHJlZ3MpKQotCQlyZXR1cm47Ci0KLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKSkKLQkJb2xkc2V0ID0gJmN1cnJlbnQtPnNhdmVkX3NpZ21hc2s7Ci0JZWxzZQotCQlvbGRzZXQgPSAmY3VycmVudC0+YmxvY2tlZDsKLQotCXNpZ25yID0gZ2V0X3NpZ25hbF90b19kZWxpdmVyKCZpbmZvLCAma2EsIHJlZ3MsIE5VTEwpOwotCWlmIChzaWduciA+IDApIHsKLQkJLyogV2hlZSEgQWN0dWFsbHkgZGVsaXZlciB0aGUgc2lnbmFsLiAqLwotCQlpZiAoaGFuZGxlX3NpZ25hbChzaWduciwgJmluZm8sICZrYSwgb2xkc2V0LCByZWdzKSA9PSAwKSB7Ci0JCQkvKgotCQkJKiBBIHNpZ25hbCB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZDsgdGhlIHNhdmVkCi0JCQkqIHNpZ21hc2sgd2lsbCBoYXZlIGJlZW4gc3RvcmVkIGluIHRoZSBzaWduYWwgZnJhbWUsCi0JCQkqIGFuZCB3aWxsIGJlIHJlc3RvcmVkIGJ5IHNpZ3JldHVybiwgc28gd2UgY2FuIHNpbXBseQotCQkJKiBjbGVhciB0aGUgVElGX1JFU1RPUkVfU0lHTUFTSyBmbGFnLgotCQkJKi8KLQkJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQotCQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOwotCQl9Ci0KLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogV2hvJ3MgY29kZSBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIHJlc3RhcnRhYmxlIHN5c2NhbGwgY29udmVudGlvbgotCSAqIGRpZXMgaGVyZSEhISAgVGhlIGxpIGluc3RydWN0aW9uLCBhIHNpbmdsZSBtYWNoaW5lIGluc3RydWN0aW9uLAotCSAqIG11c3QgZGlyZWN0bHkgYmUgZm9sbG93ZWQgYnkgdGhlIHN5c2NhbGwgaW5zdHJ1Y3Rpb24uCi0JICovCi0JaWYgKHJlZ3MtPnJlZ3NbMF0pIHsKLQkJaWYgKHJlZ3MtPnJlZ3NbMl0gPT0gRVJFU1RBUlROT0hBTkQgfHwKLQkJICAgIHJlZ3MtPnJlZ3NbMl0gPT0gRVJFU1RBUlRTWVMgfHwKLQkJICAgIHJlZ3MtPnJlZ3NbMl0gPT0gRVJFU1RBUlROT0lOVFIpIHsKLQkJCXJlZ3MtPnJlZ3NbN10gPSByZWdzLT5yZWdzWzI2XTsKLQkJCXJlZ3MtPmNwMF9lcGMgLT0gODsKLQkJfQotCQlpZiAocmVncy0+cmVnc1syXSA9PSBFUkVTVEFSVF9SRVNUQVJUQkxPQ0spIHsKLQkJCXJlZ3MtPnJlZ3NbMl0gPSBfX05SX08zMl9yZXN0YXJ0X3N5c2NhbGw7Ci0JCQlyZWdzLT5yZWdzWzddID0gcmVncy0+cmVnc1syNl07Ci0JCQlyZWdzLT5jcDBfZXBjIC09IDQ7Ci0JCX0KLQkJcmVncy0+cmVnc1swXSA9IDA7CS8qIERvbid0IGRlYWwgd2l0aCB0aGlzIGFnYWluLiAgKi8KLQl9Ci0KLQkvKgotCSogSWYgdGhlcmUncyBubyBzaWduYWwgdG8gZGVsaXZlciwgd2UganVzdCBwdXQgdGhlIHNhdmVkIHNpZ21hc2sKLQkqIGJhY2sKLQkqLwotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKSB7Ci0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOwotCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmN1cnJlbnQtPnNhdmVkX3NpZ21hc2ssIE5VTEwpOwotCX0KLX0KKy8qCisgKiBvMzIgY29tcGF0aWJpbGl0eSBvbiA2NC1iaXQga2VybmVscywgd2l0aG91dCBEU1AgQVNFCisgKi8KK3N0cnVjdCBtaXBzX2FiaSBtaXBzX2FiaV8zMiA9IHsKKwkuc2V0dXBfZnJhbWUJPSBzZXR1cF9mcmFtZV8zMiwKKwkuc2V0dXBfcnRfZnJhbWUJPSBzZXR1cF9ydF9mcmFtZV8zMiwKKwkucmVzdGFydAk9IF9fTlJfTzMyX3Jlc3RhcnRfc3lzY2FsbAorfTsKIAogYXNtbGlua2FnZSBpbnQgc3lzMzJfcnRfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKmFjdCwKIAkJCQkgIHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKm9hY3QsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbF9uMzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsX24zMi5jCmluZGV4IDdjYTJhMDcuLmVjZjFmN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsX24zMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsX24zMi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKKyNpbmNsdWRlIDxhc20vYWJpLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBhdC1zaWduYWwuaD4KQEAgLTE2OSw3ICsxNzAsNyBAQAogCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKIH0KIAotaW50IHNldHVwX3J0X2ZyYW1lX24zMihzdHJ1Y3Qga19zaWdhY3Rpb24gKiBrYSwKK3N0YXRpYyBpbnQgc2V0dXBfcnRfZnJhbWVfbjMyKHN0cnVjdCBrX3NpZ2FjdGlvbiAqIGthLAogCXN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2lnbnIsIHNpZ3NldF90ICpzZXQsIHNpZ2luZm9fdCAqaW5mbykKIHsKIAlzdHJ1Y3QgcnRfc2lnZnJhbWVfbjMyIF9fdXNlciAqZnJhbWU7CkBAIC0yMjgsMyArMjI5LDggQEAKIAlmb3JjZV9zaWdzZWd2KHNpZ25yLCBjdXJyZW50KTsKIAlyZXR1cm4gLUVGQVVMVDsKIH0KKworc3RydWN0IG1pcHNfYWJpIG1pcHNfYWJpX24zMiA9IHsKKwkuc2V0dXBfcnRfZnJhbWUJPSBzZXR1cF9ydF9mcmFtZV9uMzIsCisJLnJlc3RhcnQJPSBfX05SX04zMl9yZXN0YXJ0X3N5c2NhbGwKK307CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RpbWUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCmluZGV4IDU0NWZjYmMuLmU1ZTU2YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCkBAIC0zMDcsNyArMzA3LDcgQEAKIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9taXBzID0gewogCS5uYW1lCQk9ICJNSVBTIiwKIAkubWFzawkJPSAweGZmZmZmZmZmLAotCS5pc19jb250aW51b3VzCT0gMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9taXBzX2Nsb2Nrc291cmNlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggMmE5MzJjYWQuLjJhYTIwOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKQEAgLTM0MCwxMyArMzQwLDkgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5IF9fc3RhcnRfX19kYmVfdGFibGVbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5IF9fc3RvcF9fX2RiZV90YWJsZVtdOwogCi12b2lkIF9fZGVjbGFyZV9kYmVfdGFibGUodm9pZCkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiLnNlY3Rpb25cdF9fZGJlX3RhYmxlLFwiYVwiXG5cdCIKLQkiLnByZXZpb3VzIgotCSk7Ci19CitfX2FzbV9fKAorIgkuc2VjdGlvbglfX2RiZV90YWJsZSwgXCJhXCJcbiIKKyIJLnByZXZpb3VzCQkJXG4iKTsKIAogLyogR2l2ZW4gYW4gYWRkcmVzcywgbG9vayBmb3IgaXQgaW4gdGhlIGV4Y2VwdGlvbiB0YWJsZXMuICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqc2VhcmNoX2RiZV90YWJsZXModW5zaWduZWQgbG9uZyBhZGRyKQpAQCAtNzA4LDYgKzcwNCw3IEBACiAJCWRpZV9pZl9rZXJuZWwoIkJyZWFrIGluc3RydWN0aW9uIGluIGtlcm5lbCBjb2RlIiwgcmVncyk7CiAJCWZvcmNlX3NpZyhTSUdUUkFQLCBjdXJyZW50KTsKIAl9CisJcmV0dXJuOwogCiBvdXRfc2lnc2VndjoKIAlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CkBAIC03NTEsNiArNzQ4LDcgQEAKIAkJZGllX2lmX2tlcm5lbCgiVHJhcCBpbnN0cnVjdGlvbiBpbiBrZXJuZWwgY29kZSIsIHJlZ3MpOwogCQlmb3JjZV9zaWcoU0lHVFJBUCwgY3VycmVudCk7CiAJfQorCXJldHVybjsKIAogb3V0X3NpZ3NlZ3Y6CiAJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUKaW5kZXggNWFkNTAxYi4uMjQ1M2VhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbGliL01ha2VmaWxlCkBAIC0yLDEwICsyLDExIEBACiAjIE1ha2VmaWxlIGZvciBNSVBTLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgogIwogCi1saWIteQkrPSBjc3VtX3BhcnRpYWwubyBtZW1jcHkubyBtZW1zZXQubyBwcm9tbGliLm8gXAorbGliLXkJKz0gY3N1bV9wYXJ0aWFsLm8gbWVtY3B5Lm8gbWVtY3B5LWluYXRvbWljLm8gbWVtc2V0Lm8gcHJvbWxpYi5vIFwKIAkgICBzdHJsZW5fdXNlci5vIHN0cm5jcHlfdXNlci5vIHN0cm5sZW5fdXNlci5vIHVuY2FjaGVkLm8KIAotb2JqLXkJKz0gaW9tYXAubworb2JqLXkJCQkrPSBpb21hcC5vCitvYmotJChDT05GSUdfUENJKQkrPSBpb21hcC1wY2kubwogCiAjIGxpYmdjYy1zdHlsZSBzdHVmZiBuZWVkZWQgaW4gdGhlIGtlcm5lbAogbGliLXkgKz0gYXNobGRpMy5vIGFzaHJkaTMubyBsc2hyZGkzLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvaW9tYXAtcGNpLmMgYi9hcmNoL21pcHMvbGliL2lvbWFwLXBjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWIyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGliL2lvbWFwLXBjaS5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBJbXBsZW1lbnQgdGhlIGRlZmF1bHQgaW9tYXAgaW50ZXJmYWNlcworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNCBMaW51cyBUb3J2YWxkcworICogKEMpIENvcHlyaWdodCAyMDA2IFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KKyAqIChDKSBDb3B5cmlnaHQgMjAwNyBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICogICAgIHdyaXR0ZW4gYnkgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorICovCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmlvcG9ydF9tYXBfcGNpKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgbnIpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpjdHJsID0gZGV2LT5idXMtPnN5c2RhdGE7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gY3RybC0+aW9fbWFwX2Jhc2U7CisKKwkvKiBUaGlzIHdpbGwgZXZlbnR1YWxseSBiZWNvbWUgYSBCVUdfT04gYnV0IGZvciBub3cgYmUgZ2VudGxlICovCisJaWYgKHVubGlrZWx5KCFjdHJsLT5pb19tYXBfYmFzZSkpIHsKKwkJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOworCQljaGFyIG5hbWVbOF07CisKKwkJd2hpbGUgKGJ1cy0+cGFyZW50KQorCQkJYnVzID0gYnVzLT5wYXJlbnQ7CisKKwkJY3RybC0+aW9fbWFwX2Jhc2UgPSBiYXNlID0gbWlwc19pb19wb3J0X2Jhc2U7CisKKwkJc3ByaW50ZihuYW1lLCAiJTA0eDolMDJ4IiwgcGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlcik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlvX21hcF9iYXNlIG9mIHJvb3QgUENJIGJ1cyAlcyB1bnNldC4gICIKKwkJICAgICAgICJUcnlpbmcgdG8gY29udGludWUgYnV0IHlvdSBiZXR0ZXJcbmZpeCB0aGlzIGlzc3VlIG9yICIKKwkJICAgICAgICJyZXBvcnQgaXQgdG8gbGludXgtbWlwc0BsaW51eC1taXBzLm9yZyBvciB5b3VyICIKKwkJICAgICAgICJ2ZW5kb3IuXG4iLCBuYW1lKTsKKyNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKKwkJcGFuaWMoIlRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbiBpb19tYXBfYmFzZSBNVVNUIGJlIHNldCB3aXRoICIKKwkJICAgICAgIm11bHRpcGxlIFBDSSBkb21haW5zLiIpOworI2VuZGlmCisJfQorCisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgKGN0cmwtPmlvX21hcF9iYXNlICsgcG9ydCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhIFBDSSBCQVIgKG1lbW9yeSBvciBJTykKKyAqLwordm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXhsZW4pCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcik7CisJdW5zaWduZWQgbG9uZyBsZW4gPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgYmFyKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzKGRldiwgYmFyKTsKKworCWlmICghbGVuIHx8ICFzdGFydCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKG1heGxlbiAmJiBsZW4gPiBtYXhsZW4pCisJCWxlbiA9IG1heGxlbjsKKwlpZiAoZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQlyZXR1cm4gaW9wb3J0X21hcF9wY2koZGV2LCBzdGFydCwgbGVuKTsKKwlpZiAoZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgeworCQlpZiAoZmxhZ3MgJiBJT1JFU09VUkNFX0NBQ0hFQUJMRSkKKwkJCXJldHVybiBpb3JlbWFwKHN0YXJ0LCBsZW4pOworCQlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKHN0YXJ0LCBsZW4pOworCX0KKwkvKiBXaGF0PyAqLworCXJldHVybiBOVUxMOworfQorCitFWFBPUlRfU1lNQk9MKHBjaV9pb21hcCk7CisKK3ZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICogYWRkcikKK3sKKwlpb3VubWFwKGFkZHIpOworfQorCitFWFBPUlRfU1lNQk9MKHBjaV9pb3VubWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvaW9tYXAuYyBiL2FyY2gvbWlwcy9saWIvaW9tYXAuYwppbmRleCBmNGFjNWJiLi5kNTFkNWNiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGliL2lvbWFwLmMKKysrIGIvYXJjaC9taXBzL2xpYi9pb21hcC5jCkBAIC0xLDc4ICsxLDIyNyBAQAogLyoKLSAqICBpb21hcC5jLCBNZW1vcnkgTWFwcGVkIEkvTyByb3V0aW5lcyBmb3IgTUlQUyBhcmNoaXRlY3R1cmUuCisgKiBJbXBsZW1lbnQgdGhlIGRlZmF1bHQgaW9tYXAgaW50ZXJmYWNlcwogICoKLSAqICBUaGlzIGNvZGUgaXMgYmFzZWQgb24gbGliL2lvbWFwLmMsIGJ5IExpbnVzIFRvcnZhbGRzLgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgTGludXMgVG9ydmFsZHMKKyAqIChDKSBDb3B5cmlnaHQgMjAwNiBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisgKiAoQykgQ29weXJpZ2h0IDIwMDcgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KKyAqICAgICB3cml0dGVuIGJ5IFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKKy8qCisgKiBSZWFkL3dyaXRlIGZyb20vdG8gYW4gKG9mZnNldHRhYmxlKSBpb21lbSBjb29raWUuIEl0IG1pZ2h0IGJlIGEgUElPCisgKiBhY2Nlc3Mgb3IgYSBNTUlPIGFjY2VzcywgdGhlc2UgZnVuY3Rpb25zIGRvbid0IGNhcmUuIFRoZSBpbmZvIGlzCisgKiBlbmNvZGVkIGluIHRoZSBoYXJkd2FyZSBtYXBwaW5nIHNldCB1cCBieSB0aGUgbWFwcGluZyBmdW5jdGlvbnMKKyAqIChvciB0aGUgY29va2llIGl0c2VsZiwgZGVwZW5kaW5nIG9uIGltcGxlbWVudGF0aW9uIGFuZCBodykuCisgKgorICogVGhlIGdlbmVyaWMgcm91dGluZXMgZG9uJ3QgYXNzdW1lIGFueSBoYXJkd2FyZSBtYXBwaW5ncywgYW5kIGp1c3QKKyAqIGVuY29kZSB0aGUgUElPL01NSU8gYXMgcGFydCBvZiB0aGUgY29va2llLiBUaGV5IGNvbGRseSBhc3N1bWUgdGhhdAorICogdGhlIE1NSU8gSU8gbWFwcGluZ3MgYXJlIG5vdCBpbiB0aGUgbG93IGFkZHJlc3MgcmFuZ2UuCisgKgorICogQXJjaGl0ZWN0dXJlcyBmb3Igd2hpY2ggdGhpcyBpcyBub3QgdHJ1ZSBjYW4ndCB1c2UgdGhpcyBnZW5lcmljCisgKiBpbXBsZW1lbnRhdGlvbiBhbmQgc2hvdWxkIGRvIHRoZWlyIG93biBjb3B5LgorICovCisKKyNkZWZpbmUgUElPX01BU0sJMHgwZmZmZlVMCisKK3Vuc2lnbmVkIGludCBpb3JlYWQ4KHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZGIoYWRkcik7Cit9CisKK0VYUE9SVF9TWU1CT0woaW9yZWFkOCk7CisKK3Vuc2lnbmVkIGludCBpb3JlYWQxNih2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIHJlYWR3KGFkZHIpOworfQorCitFWFBPUlRfU1lNQk9MKGlvcmVhZDE2KTsKKwordW5zaWduZWQgaW50IGlvcmVhZDE2YmUodm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBiZTE2X3RvX2NwdShfX3Jhd19yZWFkdyhhZGRyKSk7Cit9CisKK0VYUE9SVF9TWU1CT0woaW9yZWFkMTZiZSk7CisKK3Vuc2lnbmVkIGludCBpb3JlYWQzMih2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIHJlYWRsKGFkZHIpOworfQorCitFWFBPUlRfU1lNQk9MKGlvcmVhZDMyKTsKKwordW5zaWduZWQgaW50IGlvcmVhZDMyYmUodm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBiZTMyX3RvX2NwdShfX3Jhd19yZWFkbChhZGRyKSk7Cit9CisKK0VYUE9SVF9TWU1CT0woaW9yZWFkMzJiZSk7CisKK3ZvaWQgaW93cml0ZTgodTggdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGViKHZhbCwgYWRkcik7Cit9CisKK0VYUE9SVF9TWU1CT0woaW93cml0ZTgpOworCit2b2lkIGlvd3JpdGUxNih1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGV3KHZhbCwgYWRkcik7Cit9CisKK0VYUE9SVF9TWU1CT0woaW93cml0ZTE2KTsKKwordm9pZCBpb3dyaXRlMTZiZSh1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KHZhbCksIGFkZHIpOworfQorCitFWFBPUlRfU1lNQk9MKGlvd3JpdGUxNmJlKTsKKwordm9pZCBpb3dyaXRlMzIodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXdyaXRlbCh2YWwsIGFkZHIpOworfQorCitFWFBPUlRfU1lNQk9MKGlvd3JpdGUzMik7CisKK3ZvaWQgaW93cml0ZTMyYmUodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMih2YWwpLCBhZGRyKTsKK30KKworRVhQT1JUX1NZTUJPTChpb3dyaXRlMzJiZSk7CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlICJyZXBlYXQgTU1JTyByZWFkL3dyaXRlIiBmdW5jdGlvbnMuCisgKiBOb3RlIHRoZSAiX19yYXciIGFjY2Vzc2VzLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvCisgKiBjb252ZXJ0IHRvIENQVSBieXRlIG9yZGVyLiBXZSB3cml0ZSBpbiAiSU8gYnl0ZQorICogb3JkZXIiICh3ZSBhbHNvIGRvbid0IGhhdmUgSU8gYmFycmllcnMpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbW1pb19pbnNiKHZvaWQgX19pb21lbSAqYWRkciwgdTggKmRzdCwgaW50IGNvdW50KQoreworCXdoaWxlICgtLWNvdW50ID49IDApIHsKKwkJdTggZGF0YSA9IF9fcmF3X3JlYWRiKGFkZHIpOworCQkqZHN0ID0gZGF0YTsKKwkJZHN0Kys7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbW1pb19pbnN3KHZvaWQgX19pb21lbSAqYWRkciwgdTE2ICpkc3QsIGludCBjb3VudCkKK3sKKwl3aGlsZSAoLS1jb3VudCA+PSAwKSB7CisJCXUxNiBkYXRhID0gX19yYXdfcmVhZHcoYWRkcik7CisJCSpkc3QgPSBkYXRhOworCQlkc3QrKzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWlvX2luc2wodm9pZCBfX2lvbWVtICphZGRyLCB1MzIgKmRzdCwgaW50IGNvdW50KQoreworCXdoaWxlICgtLWNvdW50ID49IDApIHsKKwkJdTMyIGRhdGEgPSBfX3Jhd19yZWFkbChhZGRyKTsKKwkJKmRzdCA9IGRhdGE7CisJCWRzdCsrOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG1taW9fb3V0c2Iodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB1OCAqc3JjLCBpbnQgY291bnQpCit7CisJd2hpbGUgKC0tY291bnQgPj0gMCkgeworCQlfX3Jhd193cml0ZWIoKnNyYywgYWRkcik7CisJCXNyYysrOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG1taW9fb3V0c3codm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB1MTYgKnNyYywgaW50IGNvdW50KQoreworCXdoaWxlICgtLWNvdW50ID49IDApIHsKKwkJX19yYXdfd3JpdGV3KCpzcmMsIGFkZHIpOworCQlzcmMrKzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWlvX291dHNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3QgdTMyICpzcmMsIGludCBjb3VudCkKK3sKKwl3aGlsZSAoLS1jb3VudCA+PSAwKSB7CisJCV9fcmF3X3dyaXRlbCgqc3JjLCBhZGRyKTsKKwkJc3JjKys7CisJfQorfQorCit2b2lkIGlvcmVhZDhfcmVwKHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCW1taW9faW5zYihhZGRyLCBkc3QsIGNvdW50KTsKK30KKworRVhQT1JUX1NZTUJPTChpb3JlYWQ4X3JlcCk7CisKK3ZvaWQgaW9yZWFkMTZfcmVwKHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCW1taW9faW5zdyhhZGRyLCBkc3QsIGNvdW50KTsKK30KKworRVhQT1JUX1NZTUJPTChpb3JlYWQxNl9yZXApOworCit2b2lkIGlvcmVhZDMyX3JlcCh2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwltbWlvX2luc2woYWRkciwgZHN0LCBjb3VudCk7Cit9CisKK0VYUE9SVF9TWU1CT0woaW9yZWFkMzJfcmVwKTsKKwordm9pZCBpb3dyaXRlOF9yZXAodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJbW1pb19vdXRzYihhZGRyLCBzcmMsIGNvdW50KTsKK30KKworRVhQT1JUX1NZTUJPTChpb3dyaXRlOF9yZXApOworCit2b2lkIGlvd3JpdGUxNl9yZXAodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJbW1pb19vdXRzdyhhZGRyLCBzcmMsIGNvdW50KTsKK30KKworRVhQT1JUX1NZTUJPTChpb3dyaXRlMTZfcmVwKTsKKwordm9pZCBpb3dyaXRlMzJfcmVwKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCW1taW9fb3V0c2woYWRkciwgc3JjLCBjb3VudCk7Cit9CisKK0VYUE9SVF9TWU1CT0woaW93cml0ZTMyX3JlcCk7CisKKy8qCisgKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhbiBJTyBwb3J0IHJhbmdlCisgKgorICogVGhpcyB1c2VzIHRoZSBzYW1lIG1hcHBpbmcgYXJlIGFzIHRoZSBpbi9vdXQgZmFtaWx5IHdoaWNoIGhhcyB0byBiZSBzZXR1cAorICogYnkgdGhlIHBsYXRmb3JtIGluaXRpYWxpemF0aW9uIGNvZGUuCisgKgorICogSnVzdCB0byBtYWtlIG1hdHRlcnMgc29tZXdoYXQgbW9yZSBpbnRlcmVzdGluZyBvbiBNSVBTIHN5c3RlbXMgd2l0aAorICogbXVsdGlwbGUgaG9zdCBicmlkZ2UgZWFjaCB3aWxsIGhhdmUgaXQncyBvd24gaW9wb3J0IGFkZHJlc3Mgc3BhY2UuCisgKi8KK3N0YXRpYyB2b2lkIF9faW9tZW0gKmlvcG9ydF9tYXBfbGVnYWN5KHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKQoreworCXJldHVybiAodm9pZCBfX2lvbWVtICopIChtaXBzX2lvX3BvcnRfYmFzZSArIHBvcnQpOworfQorCiB2b2lkIF9faW9tZW0gKmlvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgbnIpCiB7Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0KLQllbmQgPSBwb3J0ICsgbnIgLSAxVUw7Ci0JaWYgKGlvcG9ydF9yZXNvdXJjZS5zdGFydCA+IHBvcnQgfHwKLQkgICAgaW9wb3J0X3Jlc291cmNlLmVuZCA8IGVuZCB8fCBwb3J0ID4gZW5kKQorCWlmIChwb3J0ID4gUElPX01BU0spCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuICh2b2lkIF9faW9tZW0gKikobWlwc19pb19wb3J0X2Jhc2UgKyBwb3J0KTsKKwlyZXR1cm4gaW9wb3J0X21hcF9sZWdhY3kocG9ydCwgbnIpOwogfQogCitFWFBPUlRfU1lNQk9MKGlvcG9ydF9tYXApOworCiB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCiB7CisJLyogTm90aGluZyB0byBkbyAqLwogfQotRVhQT1JUX1NZTUJPTChpb3BvcnRfbWFwKTsKKwogRVhQT1JUX1NZTUJPTChpb3BvcnRfdW5tYXApOwotCi12b2lkIF9faW9tZW0gKnBjaV9pb21hcChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgYmFyLCB1bnNpZ25lZCBsb25nIG1heGxlbikKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBsZW4sIGZsYWdzOwotCi0JaWYgKGRldiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgYmFyKTsKLQlsZW4gPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgYmFyKTsKLQlpZiAoIXN0YXJ0IHx8ICFsZW4pCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKG1heGxlbiAhPSAwICYmIGxlbiA+IG1heGxlbikKLQkJbGVuID0gbWF4bGVuOwotCi0JZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBiYXIpOwotCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCXJldHVybiBpb3BvcnRfbWFwKHN0YXJ0LCBsZW4pOwotCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7Ci0JCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfQ0FDSEVBQkxFKQotCQkJcmV0dXJuIGlvcmVtYXBfY2FjaGFibGUoc3RhcnQsIGxlbik7Ci0JCXJldHVybiBpb3JlbWFwX25vY2FjaGUoc3RhcnQsIGxlbik7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWlvdW5tYXAoYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjaV9pb21hcCk7Ci1FWFBPUlRfU1lNQk9MKHBjaV9pb3VubWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvbWVtY3B5LWluYXRvbWljLlMgYi9hcmNoL21pcHMvbGliL21lbWNweS1pbmF0b21pYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNTM0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGliL21lbWNweS1pbmF0b21pYy5TCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVW5pZmllZCBpbXBsZW1lbnRhdGlvbiBvZiBtZW1jcHksIG1lbW1vdmUgYW5kIHRoZSBfX2NvcHlfdXNlciBiYWNrZW5kLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgOTksIDIwMDAsIDAxLCAyMDAyIFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAwMSwgMjAwMiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgQnJvYWRjb20sIEluYy4KKyAqICAgbWVtY3B5L2NvcHlfdXNlciBhdXRob3I6IE1hcmsgVmFuZGV2b29yZGUKKyAqCisgKiBNbmVtb25pYyBuYW1lcyBmb3IgYXJndW1lbnRzIHRvIG1lbWNweS9fX2NvcHlfdXNlcgorICovCisKKy8qCisgKiBIYWNrIHRvIHJlc29sdmUgbG9uZ3N0YW5kaW5nIHByZWZldGNoIGlzc3VlCisgKgorICogUHJlZmV0Y2hpbmcgbWF5IGJlIGZhdGFsIG9uIHNvbWUgc3lzdGVtcyBpZiB3ZSdyZSBwcmVmZXRjaGluZyBiZXlvbmQgdGhlCisgKiBlbmQgb2YgbWVtb3J5IG9uIHNvbWUgc3lzdGVtcy4gIEl0J3MgYWxzbyBhIHNlcmlvdXNseSBiYWQgaWRlYSBvbiBub24KKyAqIGRtYS1jb2hlcmVudCBzeXN0ZW1zLgorICovCisjaWYgIWRlZmluZWQoQ09ORklHX0RNQV9DT0hFUkVOVCkgfHwgIWRlZmluZWQoQ09ORklHX0RNQV9JUDI3KQorI3VuZGVmIENPTkZJR19DUFVfSEFTX1BSRUZFVENICisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQU19NQUxUQQorI3VuZGVmIENPTkZJR19DUFVfSEFTX1BSRUZFVENICisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CisKKyNkZWZpbmUgZHN0IGEwCisjZGVmaW5lIHNyYyBhMQorI2RlZmluZSBsZW4gYTIKKworLyoKKyAqIFNwZWMKKyAqCisgKiBtZW1jcHkgY29waWVzIGxlbiBieXRlcyBmcm9tIHNyYyB0byBkc3QgYW5kIHNldHMgdjAgdG8gZHN0LgorICogSXQgYXNzdW1lcyB0aGF0CisgKiAgIC0gc3JjIGFuZCBkc3QgZG9uJ3Qgb3ZlcmxhcAorICogICAtIHNyYyBpcyByZWFkYWJsZQorICogICAtIGRzdCBpcyB3cml0YWJsZQorICogbWVtY3B5IHVzZXMgdGhlIHN0YW5kYXJkIGNhbGxpbmcgY29udmVudGlvbgorICoKKyAqIF9fY29weV91c2VyIGNvcGllcyB1cCB0byBsZW4gYnl0ZXMgZnJvbSBzcmMgdG8gZHN0IGFuZCBzZXRzIGEyIChsZW4pIHRvCisgKiB0aGUgbnVtYmVyIG9mIHVuY29waWVkIGJ5dGVzIGR1ZSB0byBhbiBleGNlcHRpb24gY2F1c2VkIGJ5IGEgcmVhZCBvciB3cml0ZS4KKyAqIF9fY29weV91c2VyIGFzc3VtZXMgdGhhdCBzcmMgYW5kIGRzdCBkb24ndCBvdmVybGFwLCBhbmQgdGhhdCB0aGUgY2FsbCBpcworICogaW1wbGVtZW50aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICogICBjb3B5X3RvX3VzZXIKKyAqICAgICAtIHNyYyBpcyByZWFkYWJsZSAgKG5vIGV4Y2VwdGlvbnMgd2hlbiByZWFkaW5nIHNyYykKKyAqICAgY29weV9mcm9tX3VzZXIKKyAqICAgICAtIGRzdCBpcyB3cml0YWJsZSAgKG5vIGV4Y2VwdGlvbnMgd2hlbiB3cml0aW5nIGRzdCkKKyAqIF9fY29weV91c2VyIHVzZXMgYSBub24tc3RhbmRhcmQgY2FsbGluZyBjb252ZW50aW9uOyBzZWUKKyAqIGluY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oCisgKgorICogV2hlbiBhbiBleGNlcHRpb24gaGFwcGVucyBvbiBhIGxvYWQsIHRoZSBoYW5kbGVyIG11c3QKKyAjIGVuc3VyZSB0aGF0IGFsbCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIG92ZXJ3cml0dGVuIHRvIHByZXZlbnQKKyAqIGxlYWtpbmcgaW5mb3JtYXRpb24gdG8gdXNlciBtb2RlIHByb2dyYW1zLgorICovCisKKy8qCisgKiBJbXBsZW1lbnRhdGlvbgorICovCisKKy8qCisgKiBUaGUgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIGxvYWRzIHJlcXVpcmVzIHRoYXQ6CisgKiAgMS0gQVQgY29udGFpbiB0aGUgYWRkcmVzcyBvZiB0aGUgYnl0ZSBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgc291cmNlCisgKiAgICAgb2YgdGhlIGNvcHksCisgKiAgMi0gc3JjX2VudHJ5IDw9IHNyYyA8IEFULCBhbmQKKyAqICAzLSAoZHN0IC0gc3JjKSA9PSAoZHN0X2VudHJ5IC0gc3JjX2VudHJ5KSwKKyAqIFRoZSBfZW50cnkgc3VmZml4IGRlbm90ZXMgdmFsdWVzIHdoZW4gX19jb3B5X3VzZXIgd2FzIGNhbGxlZC4KKyAqCisgKiAoMSkgaXMgc2V0IHVwIHVwIGJ5IHVhY2Nlc3MuaCBhbmQgbWFpbnRhaW5lZCBieSBub3Qgd3JpdGluZyBBVCBpbiBjb3B5X3VzZXIKKyAqICgyKSBpcyBtZXQgYnkgaW5jcmVtZW50aW5nIHNyYyBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZAorICogKDMpIGlzIG1ldCBieSBub3QgZG9pbmcgbG9hZHMgYmV0d2VlbiBhIHBhaXIgb2YgaW5jcmVtZW50cyBvZiBkc3QgYW5kIHNyYworICoKKyAqIFRoZSBleGNlcHRpb24gaGFuZGxlcnMgZm9yIHN0b3JlcyBhZGp1c3QgbGVuIChpZiBuZWNlc3NhcnkpIGFuZCByZXR1cm4uCisgKiBUaGVzZSBoYW5kbGVycyBkbyBub3QgbmVlZCB0byBvdmVyd3JpdGUgYW55IGRhdGEuCisgKgorICogRm9yIF9fcm1lbWNweSBhbmQgbWVtbW92ZSBhbiBleGNlcHRpb24gaXMgYWx3YXlzIGEga2VybmVsIGJ1ZywgdGhlcmVmb3JlCisgKiB0aGV5J3JlIG5vdCBwcm90ZWN0ZWQuCisgKi8KKworI2RlZmluZSBFWEMoaW5zdF9yZWcsYWRkcixoYW5kbGVyKQkJXAorOToJaW5zdF9yZWcsIGFkZHI7CQkJCVwKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIjsJCVwKKwlQVFIJOWIsIGhhbmRsZXI7CQkJXAorCS5wcmV2aW91cworCisvKgorICogT25seSBvbiB0aGUgNjQtYml0IGtlcm5lbCB3ZSBjYW4gbWFkZSB1c2Ugb2YgNjQtYml0IHJlZ2lzdGVycy4KKyAqLworI2lmZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBVU0VfRE9VQkxFCisjZW5kaWYKKworI2lmZGVmIFVTRV9ET1VCTEUKKworI2RlZmluZSBMT0FEICAgbGQKKyNkZWZpbmUgTE9BREwgIGxkbAorI2RlZmluZSBMT0FEUiAgbGRyCisjZGVmaW5lIFNUT1JFTCBzZGwKKyNkZWZpbmUgU1RPUkVSIHNkcgorI2RlZmluZSBTVE9SRSAgc2QKKyNkZWZpbmUgQUREICAgIGRhZGR1CisjZGVmaW5lIFNVQiAgICBkc3VidQorI2RlZmluZSBTUkwgICAgZHNybAorI2RlZmluZSBTUkEgICAgZHNyYQorI2RlZmluZSBTTEwgICAgZHNsbAorI2RlZmluZSBTTExWICAgZHNsbHYKKyNkZWZpbmUgU1JMViAgIGRzcmx2CisjZGVmaW5lIE5CWVRFUyA4CisjZGVmaW5lIExPR19OQllURVMgMworCisvKgorICogQXMgd2UgYXJlIHNoYXJpbmcgY29kZSBiYXNlIHdpdGggdGhlIG1pcHMzMiB0cmVlICh3aGljaCB1c2UgdGhlIG8zMiBBQkkKKyAqIHJlZ2lzdGVyIGRlZmluaXRpb25zKS4gV2UgbmVlZCB0byByZWRlZmluZSB0aGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZnJvbQorICogdGhlIG42NCBBQkkgcmVnaXN0ZXIgbmFtaW5nIHRvIHRoZSBvMzIgQUJJIHJlZ2lzdGVyIG5hbWluZy4KKyAqLworI3VuZGVmIHQwCisjdW5kZWYgdDEKKyN1bmRlZiB0MgorI3VuZGVmIHQzCisjZGVmaW5lIHQwCSQ4CisjZGVmaW5lIHQxCSQ5CisjZGVmaW5lIHQyCSQxMAorI2RlZmluZSB0MwkkMTEKKyNkZWZpbmUgdDQJJDEyCisjZGVmaW5lIHQ1CSQxMworI2RlZmluZSB0NgkkMTQKKyNkZWZpbmUgdDcJJDE1CisKKyNlbHNlCisKKyNkZWZpbmUgTE9BRCAgIGx3CisjZGVmaW5lIExPQURMICBsd2wKKyNkZWZpbmUgTE9BRFIgIGx3cgorI2RlZmluZSBTVE9SRUwgc3dsCisjZGVmaW5lIFNUT1JFUiBzd3IKKyNkZWZpbmUgU1RPUkUgIHN3CisjZGVmaW5lIEFERCAgICBhZGR1CisjZGVmaW5lIFNVQiAgICBzdWJ1CisjZGVmaW5lIFNSTCAgICBzcmwKKyNkZWZpbmUgU0xMICAgIHNsbAorI2RlZmluZSBTUkEgICAgc3JhCisjZGVmaW5lIFNMTFYgICBzbGx2CisjZGVmaW5lIFNSTFYgICBzcmx2CisjZGVmaW5lIE5CWVRFUyA0CisjZGVmaW5lIExPR19OQllURVMgMgorCisjZW5kaWYgLyogVVNFX0RPVUJMRSAqLworCisjaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIExERklSU1QgTE9BRFIKKyNkZWZpbmUgTERSRVNUICBMT0FETAorI2RlZmluZSBTVEZJUlNUIFNUT1JFUgorI2RlZmluZSBTVFJFU1QgIFNUT1JFTAorI2RlZmluZSBTSElGVF9ESVNDQVJEIFNMTFYKKyNlbHNlCisjZGVmaW5lIExERklSU1QgTE9BREwKKyNkZWZpbmUgTERSRVNUICBMT0FEUgorI2RlZmluZSBTVEZJUlNUIFNUT1JFTAorI2RlZmluZSBTVFJFU1QgIFNUT1JFUgorI2RlZmluZSBTSElGVF9ESVNDQVJEIFNSTFYKKyNlbmRpZgorCisjZGVmaW5lIEZJUlNUKHVuaXQpICgodW5pdCkqTkJZVEVTKQorI2RlZmluZSBSRVNUKHVuaXQpICAoRklSU1QodW5pdCkrTkJZVEVTLTEpCisjZGVmaW5lIFVOSVQodW5pdCkgIEZJUlNUKHVuaXQpCisKKyNkZWZpbmUgQUREUk1BU0sgKE5CWVRFUy0xKQorCisJLnRleHQKKwkuc2V0CW5vcmVvcmRlcgorCS5zZXQJbm9hdAorCisvKgorICogQSBjb21iaW5lZCBtZW1jcHkvX19jb3B5X3VzZXIKKyAqIF9fY29weV91c2VyIHNldHMgbGVuIHRvIDAgZm9yIHN1Y2Nlc3M7IGVsc2UgdG8gYW4gdXBwZXIgYm91bmQgb2YKKyAqIHRoZSBudW1iZXIgb2YgdW5jb3BpZWQgYnl0ZXMuCisgKiBtZW1jcHkgc2V0cyB2MCB0byBkc3QuCisgKi8KKwkuYWxpZ24JNQorTEVBRihfX2NvcHlfdXNlcl9pbmF0b21pYykKKwkvKgorCSAqIE5vdGU6IGRzdCAmIHNyYyBtYXkgYmUgdW5hbGlnbmVkLCBsZW4gbWF5IGJlIDAKKwkgKiBUZW1wcworCSAqLworI2RlZmluZSByZW0gdDgKKworCS8qCisJICogVGhlICJpc3N1ZSBicmVhayJzIGJlbG93IGFyZSB2ZXJ5IGFwcHJveGltYXRlLgorCSAqIElzc3VlIGRlbGF5cyBmb3IgZGNhY2hlIGZpbGxzIHdpbGwgcGVydHVyYiB0aGUgc2NoZWR1bGUsIGFzIHdpbGwKKwkgKiBsb2FkIHF1ZXVlIGZ1bGwgcmVwbGF5IHRyYXBzLCBldGMuCisJICoKKwkgKiBJZiBsZW4gPCBOQllURVMgdXNlIGJ5dGUgb3BlcmF0aW9ucy4KKwkgKi8KKwlQUkVGKAkwLCAwKHNyYykgKQorCVBSRUYoCTEsIDAoZHN0KSApCisJc2x0dQl0MiwgbGVuLCBOQllURVMKKwlhbmQJdDEsIGRzdCwgQUREUk1BU0sKKwlQUkVGKAkwLCAxKjMyKHNyYykgKQorCVBSRUYoCTEsIDEqMzIoZHN0KSApCisJYm5legl0MiwgY29weV9ieXRlc19jaGVja2xlbgorCSBhbmQJdDAsIHNyYywgQUREUk1BU0sKKwlQUkVGKAkwLCAyKjMyKHNyYykgKQorCVBSRUYoCTEsIDIqMzIoZHN0KSApCisJYm5legl0MSwgZHN0X3VuYWxpZ25lZAorCSBub3AKKwlibmV6CXQwLCBzcmNfdW5hbGlnbmVkX2RzdF9hbGlnbmVkCisJLyoKKwkgKiB1c2UgZGVsYXkgc2xvdCBmb3IgZmFsbC10aHJvdWdoCisJICogc3JjIGFuZCBkc3QgYXJlIGFsaWduZWQ7IG5lZWQgdG8gY29tcHV0ZSByZW0KKwkgKi8KK2JvdGhfYWxpZ25lZDoKKwkgU1JMCXQwLCBsZW4sIExPR19OQllURVMrMyAgICAjICszIGZvciA4IHVuaXRzL2l0ZXIKKwliZXF6CXQwLCBjbGVhbnVwX2JvdGhfYWxpZ25lZCAjIGxlbiA8IDgqTkJZVEVTCisJIGFuZAlyZW0sIGxlbiwgKDgqTkJZVEVTLTEpCSAjIHJlbSA9IGxlbiAlICg4Kk5CWVRFUykKKwlQUkVGKAkwLCAzKjMyKHNyYykgKQorCVBSRUYoCTEsIDMqMzIoZHN0KSApCisJLmFsaWduCTQKKzE6CitFWEMoCUxPQUQJdDAsIFVOSVQoMCkoc3JjKSwJbF9leGMpCitFWEMoCUxPQUQJdDEsIFVOSVQoMSkoc3JjKSwJbF9leGNfY29weSkKK0VYQygJTE9BRAl0MiwgVU5JVCgyKShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMT0FECXQzLCBVTklUKDMpKHNyYyksCWxfZXhjX2NvcHkpCisJU1VCCWxlbiwgbGVuLCA4Kk5CWVRFUworRVhDKAlMT0FECXQ0LCBVTklUKDQpKHNyYyksCWxfZXhjX2NvcHkpCitFWEMoCUxPQUQJdDcsIFVOSVQoNSkoc3JjKSwJbF9leGNfY29weSkKKwlTVE9SRQl0MCwgVU5JVCgwKShkc3QpCisJU1RPUkUJdDEsIFVOSVQoMSkoZHN0KQorRVhDKAlMT0FECXQwLCBVTklUKDYpKHNyYyksCWxfZXhjX2NvcHkpCitFWEMoCUxPQUQJdDEsIFVOSVQoNykoc3JjKSwJbF9leGNfY29weSkKKwlBREQJc3JjLCBzcmMsIDgqTkJZVEVTCisJQURECWRzdCwgZHN0LCA4Kk5CWVRFUworCVNUT1JFCXQyLCBVTklUKC02KShkc3QpCisJU1RPUkUJdDMsIFVOSVQoLTUpKGRzdCkKKwlTVE9SRQl0NCwgVU5JVCgtNCkoZHN0KQorCVNUT1JFCXQ3LCBVTklUKC0zKShkc3QpCisJU1RPUkUJdDAsIFVOSVQoLTIpKGRzdCkKKwlTVE9SRQl0MSwgVU5JVCgtMSkoZHN0KQorCVBSRUYoCTAsIDgqMzIoc3JjKSApCisJUFJFRigJMSwgOCozMihkc3QpICkKKwlibmUJbGVuLCByZW0sIDFiCisJIG5vcAorCisJLyoKKwkgKiBsZW4gPT0gcmVtID09IHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byBjb3B5IDwgOCpOQllURVMKKwkgKi8KK2NsZWFudXBfYm90aF9hbGlnbmVkOgorCWJlcXoJbGVuLCBkb25lCisJIHNsdHUJdDAsIGxlbiwgNCpOQllURVMKKwlibmV6CXQwLCBsZXNzX3RoYW5fNHVuaXRzCisJIGFuZAlyZW0sIGxlbiwgKE5CWVRFUy0xKQkjIHJlbSA9IGxlbiAlIE5CWVRFUworCS8qCisJICogbGVuID49IDQqTkJZVEVTCisJICovCitFWEMoCUxPQUQJdDAsIFVOSVQoMCkoc3JjKSwJbF9leGMpCitFWEMoCUxPQUQJdDEsIFVOSVQoMSkoc3JjKSwJbF9leGNfY29weSkKK0VYQygJTE9BRAl0MiwgVU5JVCgyKShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMT0FECXQzLCBVTklUKDMpKHNyYyksCWxfZXhjX2NvcHkpCisJU1VCCWxlbiwgbGVuLCA0Kk5CWVRFUworCUFERAlzcmMsIHNyYywgNCpOQllURVMKKwlTVE9SRQl0MCwgVU5JVCgwKShkc3QpCisJU1RPUkUJdDEsIFVOSVQoMSkoZHN0KQorCVNUT1JFCXQyLCBVTklUKDIpKGRzdCkKKwlTVE9SRQl0MywgVU5JVCgzKShkc3QpCisJYmVxeglsZW4sIGRvbmUKKwkgQURECWRzdCwgZHN0LCA0Kk5CWVRFUworbGVzc190aGFuXzR1bml0czoKKwkvKgorCSAqIHJlbSA9IGxlbiAlIE5CWVRFUworCSAqLworCWJlcQlyZW0sIGxlbiwgY29weV9ieXRlcworCSBub3AKKzE6CitFWEMoCUxPQUQJdDAsIDAoc3JjKSwJCWxfZXhjKQorCUFERAlzcmMsIHNyYywgTkJZVEVTCisJU1VCCWxlbiwgbGVuLCBOQllURVMKKwlTVE9SRQl0MCwgMChkc3QpCisJYm5lCXJlbSwgbGVuLCAxYgorCSBBREQJZHN0LCBkc3QsIE5CWVRFUworCisJLyoKKwkgKiBzcmMgYW5kIGRzdCBhcmUgYWxpZ25lZCwgbmVlZCB0byBjb3B5IHJlbSBieXRlcyAocmVtIDwgTkJZVEVTKQorCSAqIEEgbG9vcCB3b3VsZCBkbyBvbmx5IGEgYnl0ZSBhdCBhIHRpbWUgd2l0aCBwb3NzaWJsZSBicmFuY2gKKwkgKiBtaXNwcmVkaWN0cy4gIENhbid0IGRvIGFuIGV4cGxpY2l0IExPQUQgZHN0LG1hc2ssb3IsU1RPUkUKKwkgKiBiZWNhdXNlIGNhbid0IGFzc3VtZSByZWFkLWFjY2VzcyB0byBkc3QuICBJbnN0ZWFkLCB1c2UKKwkgKiBTVFJFU1QgZHN0LCB3aGljaCBkb2Vzbid0IHJlcXVpcmUgcmVhZCBhY2Nlc3MgdG8gZHN0LgorCSAqCisJICogVGhpcyBjb2RlIHNob3VsZCBwZXJmb3JtIGJldHRlciB0aGFuIGEgc2ltcGxlIGxvb3Agb24gbW9kZXJuLAorCSAqIHdpZGUtaXNzdWUgbWlwcyBwcm9jZXNzb3JzIGJlY2F1c2UgdGhlIGNvZGUgaGFzIGZld2VyIGJyYW5jaGVzIGFuZAorCSAqIG1vcmUgaW5zdHJ1Y3Rpb24tbGV2ZWwgcGFyYWxsZWxpc20uCisJICovCisjZGVmaW5lIGJpdHMgdDIKKwliZXF6CWxlbiwgZG9uZQorCSBBREQJdDEsIGRzdCwgbGVuCSMgdDEgaXMganVzdCBwYXN0IGxhc3QgYnl0ZSBvZiBkc3QKKwlsaQliaXRzLCA4Kk5CWVRFUworCVNMTAlyZW0sIGxlbiwgMwkjIHJlbSA9IG51bWJlciBvZiBiaXRzIHRvIGtlZXAKK0VYQygJTE9BRAl0MCwgMChzcmMpLAkJbF9leGMpCisJU1VCCWJpdHMsIGJpdHMsIHJlbQkjIGJpdHMgPSBudW1iZXIgb2YgYml0cyB0byBkaXNjYXJkCisJU0hJRlRfRElTQ0FSRCB0MCwgdDAsIGJpdHMKKwlTVFJFU1QJdDAsIC0xKHQxKQorCWpyCXJhCisJIG1vdmUJbGVuLCB6ZXJvCitkc3RfdW5hbGlnbmVkOgorCS8qCisJICogZHN0IGlzIHVuYWxpZ25lZAorCSAqIHQwID0gc3JjICYgQUREUk1BU0sKKwkgKiB0MSA9IGRzdCAmIEFERFJNQVNLOyBUMSA+IDAKKwkgKiBsZW4gPj0gTkJZVEVTCisJICoKKwkgKiBDb3B5IGVub3VnaCBieXRlcyB0byBhbGlnbiBkc3QKKwkgKiBTZXQgbWF0Y2ggPSAoc3JjIGFuZCBkc3QgaGF2ZSBzYW1lIGFsaWdubWVudCkKKwkgKi8KKyNkZWZpbmUgbWF0Y2ggcmVtCitFWEMoCUxERklSU1QJdDMsIEZJUlNUKDApKHNyYyksCWxfZXhjKQorCUFERAl0MiwgemVybywgTkJZVEVTCitFWEMoCUxEUkVTVAl0MywgUkVTVCgwKShzcmMpLAlsX2V4Y19jb3B5KQorCVNVQgl0MiwgdDIsIHQxCSMgdDIgPSBudW1iZXIgb2YgYnl0ZXMgY29waWVkCisJeG9yCW1hdGNoLCB0MCwgdDEKKwlTVEZJUlNUIHQzLCBGSVJTVCgwKShkc3QpCisJYmVxCWxlbiwgdDIsIGRvbmUKKwkgU1VCCWxlbiwgbGVuLCB0MgorCUFERAlkc3QsIGRzdCwgdDIKKwliZXF6CW1hdGNoLCBib3RoX2FsaWduZWQKKwkgQURECXNyYywgc3JjLCB0MgorCitzcmNfdW5hbGlnbmVkX2RzdF9hbGlnbmVkOgorCVNSTAl0MCwgbGVuLCBMT0dfTkJZVEVTKzIgICAgIyArMiBmb3IgNCB1bml0cy9pdGVyCisJUFJFRigJMCwgMyozMihzcmMpICkKKwliZXF6CXQwLCBjbGVhbnVwX3NyY191bmFsaWduZWQKKwkgYW5kCXJlbSwgbGVuLCAoNCpOQllURVMtMSkgICAjIHJlbSA9IGxlbiAlIDQqTkJZVEVTCisJUFJFRigJMSwgMyozMihkc3QpICkKKzE6CisvKgorICogQXZvaWQgY29uc2VjdXRpdmUgTEQqJ3MgdG8gdGhlIHNhbWUgcmVnaXN0ZXIgc2luY2Ugc29tZSBtaXBzCisgKiBpbXBsZW1lbnRhdGlvbnMgY2FuJ3QgaXNzdWUgdGhlbSBpbiB0aGUgc2FtZSBjeWNsZS4KKyAqIEl0J3MgT0sgdG8gbG9hZCBGSVJTVChOKzEpIGJlZm9yZSBSRVNUKE4pIGJlY2F1c2UgdGhlIHR3byBhZGRyZXNzZXMKKyAqIGFyZSB0byB0aGUgc2FtZSB1bml0ICh1bmxlc3Mgc3JjIGlzIGFsaWduZWQsIGJ1dCBpdCdzIG5vdCkuCisgKi8KK0VYQygJTERGSVJTVAl0MCwgRklSU1QoMCkoc3JjKSwJbF9leGMpCitFWEMoCUxERklSU1QJdDEsIEZJUlNUKDEpKHNyYyksCWxfZXhjX2NvcHkpCisJU1VCICAgICBsZW4sIGxlbiwgNCpOQllURVMKK0VYQygJTERSRVNUCXQwLCBSRVNUKDApKHNyYyksCWxfZXhjX2NvcHkpCitFWEMoCUxEUkVTVAl0MSwgUkVTVCgxKShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMREZJUlNUCXQyLCBGSVJTVCgyKShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMREZJUlNUCXQzLCBGSVJTVCgzKShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMRFJFU1QJdDIsIFJFU1QoMikoc3JjKSwJbF9leGNfY29weSkKK0VYQygJTERSRVNUCXQzLCBSRVNUKDMpKHNyYyksCWxfZXhjX2NvcHkpCisJUFJFRigJMCwgOSozMihzcmMpICkJCSMgMCBpcyBQUkVGX0xPQUQgIChub3Qgc3RyZWFtZWQpCisJQURECXNyYywgc3JjLCA0Kk5CWVRFUworI2lmZGVmIENPTkZJR19DUFVfU0IxCisJbm9wCQkJCSMgaW1wcm92ZXMgc2xvdHRpbmcKKyNlbmRpZgorCVNUT1JFCXQwLCBVTklUKDApKGRzdCkKKwlTVE9SRQl0MSwgVU5JVCgxKShkc3QpCisJU1RPUkUJdDIsIFVOSVQoMikoZHN0KQorCVNUT1JFCXQzLCBVTklUKDMpKGRzdCkKKwlQUkVGKAkxLCA5KjMyKGRzdCkgKSAgICAgCSMgMSBpcyBQUkVGX1NUT1JFIChub3Qgc3RyZWFtZWQpCisJYm5lCWxlbiwgcmVtLCAxYgorCSBBREQJZHN0LCBkc3QsIDQqTkJZVEVTCisKK2NsZWFudXBfc3JjX3VuYWxpZ25lZDoKKwliZXF6CWxlbiwgZG9uZQorCSBhbmQJcmVtLCBsZW4sIE5CWVRFUy0xICAjIHJlbSA9IGxlbiAlIE5CWVRFUworCWJlcQlyZW0sIGxlbiwgY29weV9ieXRlcworCSBub3AKKzE6CitFWEMoCUxERklSU1QgdDAsIEZJUlNUKDApKHNyYyksCWxfZXhjKQorRVhDKAlMRFJFU1QJdDAsIFJFU1QoMCkoc3JjKSwJbF9leGNfY29weSkKKwlBREQJc3JjLCBzcmMsIE5CWVRFUworCVNVQglsZW4sIGxlbiwgTkJZVEVTCisJU1RPUkUJdDAsIDAoZHN0KQorCWJuZQlsZW4sIHJlbSwgMWIKKwkgQURECWRzdCwgZHN0LCBOQllURVMKKworY29weV9ieXRlc19jaGVja2xlbjoKKwliZXF6CWxlbiwgZG9uZQorCSBub3AKK2NvcHlfYnl0ZXM6CisJLyogMCA8IGxlbiA8IE5CWVRFUyAgKi8KKyNkZWZpbmUgQ09QWV9CWVRFKE4pCQkJXAorRVhDKAlsYgl0MCwgTihzcmMpLCBsX2V4Yyk7CVwKKwlTVUIJbGVuLCBsZW4sIDE7CQlcCisJYmVxeglsZW4sIGRvbmU7CQlcCisJIHNiCXQwLCBOKGRzdCkKKworCUNPUFlfQllURSgwKQorCUNPUFlfQllURSgxKQorI2lmZGVmIFVTRV9ET1VCTEUKKwlDT1BZX0JZVEUoMikKKwlDT1BZX0JZVEUoMykKKwlDT1BZX0JZVEUoNCkKKwlDT1BZX0JZVEUoNSkKKyNlbmRpZgorRVhDKAlsYgl0MCwgTkJZVEVTLTIoc3JjKSwgbF9leGMpCisJU1VCCWxlbiwgbGVuLCAxCisJanIJcmEKKwkgc2IJdDAsIE5CWVRFUy0yKGRzdCkKK2RvbmU6CisJanIJcmEKKwkgbm9wCisJRU5EKF9fY29weV91c2VyX2luYXRvbWljKQorCitsX2V4Y19jb3B5OgorCS8qCisJICogQ29weSBieXRlcyBmcm9tIHNyYyB1bnRpbCBmYXVsdGluZyBsb2FkIGFkZHJlc3MgKG9yIHVudGlsIGEKKwkgKiBsYiBmYXVsdHMpCisJICoKKwkgKiBXaGVuIHJlYWNoZWQgYnkgYSBmYXVsdGluZyBMREZJUlNUL0xEUkVTVCwgVEhSRUFEX0JVQUREUigkMjgpCisJICogbWF5IGJlIG1vcmUgdGhhbiBhIGJ5dGUgYmV5b25kIHRoZSBsYXN0IGFkZHJlc3MuCisJICogSGVuY2UsIHRoZSBsYiBiZWxvdyBtYXkgZ2V0IGFuIGV4Y2VwdGlvbi4KKwkgKgorCSAqIEFzc3VtZXMgc3JjIDwgVEhSRUFEX0JVQUREUigkMjgpCisJICovCisJTE9BRAl0MCwgVElfVEFTSygkMjgpCisJIG5vcAorCUxPQUQJdDAsIFRIUkVBRF9CVUFERFIodDApCisxOgorRVhDKAlsYgl0MSwgMChzcmMpLAlsX2V4YykKKwlBREQJc3JjLCBzcmMsIDEKKwlzYgl0MSwgMChkc3QpCSMgY2FuJ3QgZmF1bHQgLS0gd2UncmUgY29weV9mcm9tX3VzZXIKKwlibmUJc3JjLCB0MCwgMWIKKwkgQURECWRzdCwgZHN0LCAxCitsX2V4YzoKKwlMT0FECXQwLCBUSV9UQVNLKCQyOCkKKwkgbm9wCisJTE9BRAl0MCwgVEhSRUFEX0JVQUREUih0MCkJIyB0MCBpcyBqdXN0IHBhc3QgbGFzdCBnb29kIGFkZHJlc3MKKwkgbm9wCisJU1VCCWxlbiwgQVQsIHQwCQkjIGxlbiBudW1iZXIgb2YgdW5jb3BpZWQgYnl0ZXMKKwlqcglyYQorCSBub3AKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pbml0LmMgYi9hcmNoL21pcHMvbW0vaW5pdC5jCmluZGV4IDEyNWE0YTguLmYwOGFlNzFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTYxLDggKzYxLDYgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAotdW5zaWduZWQgbG9uZyBoaWdoc3RhcnRfcGZuLCBoaWdoZW5kX3BmbjsKLQogLyoKICAqIFdlIGhhdmUgdXAgdG8gOCBlbXB0eSB6ZXJvZWQgcGFnZXMgc28gd2UgY2FuIG1hcCBvbmUgb2YgdGhlIHJpZ2h0IGNvbG91cgogICogd2hlbiBuZWVkZWQuICBUaGlzIGlzIG5lY2Vzc2FyeSBvbmx5IG9uIFI0MDAwIC8gUjQ0MDAgU0MgYW5kIE1DIHZlcnNpb25zCkBAIC0yNjEsNiArMjU5LDggQEAKIAogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KK3Vuc2lnbmVkIGxvbmcgaGlnaHN0YXJ0X3BmbiwgaGlnaGVuZF9wZm47CisKIHB0ZV90ICprbWFwX3B0ZTsKIHBncHJvdF90IGttYXBfcHJvdDsKIApAQCAtMzE0LDggKzMxNCw2IEBACiB9CiAKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKLWV4dGVybiB2b2lkIHBhZ2V0YWJsZV9pbml0KHZvaWQpOwotCiBzdGF0aWMgaW50IF9faW5pdCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2VucikKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTMyLmMgYi9hcmNoL21pcHMvbW0vcGd0YWJsZS0zMi5jCmluZGV4IDRhNjFlNjIuLjU3NWU0MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTMyLmMKKysrIGIvYXJjaC9taXBzL21tL3BndGFibGUtMzIuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogCiB2b2lkIHBnZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMgYi9hcmNoL21pcHMvbW0vcGd0YWJsZS02NC5jCmluZGV4IGM0NmViNjUuLmU0YjU2NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMKKysrIGIvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KIAogdm9pZCBwZ2RfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvcGxhdGZvcm0uYwppbmRleCA4MTAzNzcwLi5jNzhiYTMwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3BsYXRmb3JtLmMKQEAgLTM4LDggKzM4LDYgQEAKICNkZWZpbmUgTVY2NHg2MF9JUlFfRVRIXzEgNDkKICNkZWZpbmUgTVY2NHg2MF9JUlFfRVRIXzIgNTAKIAotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8wCi0KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXY2NHg2MF9ldGgwX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLm5hbWUJPSAiZXRoMCBpcnEiLApAQCAtNzIsOSArNzAsNiBAQAogCQkucGxhdGZvcm1fZGF0YSA9ICZldGgwX3BkLAogCX0sCiB9OwotI2VuZGlmIC8qIENPTkZJR19NVjY0M1hYX0VUSF8wICovCi0KLSNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG12NjR4NjBfZXRoMV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC0xMDgsOSArMTAzLDYgQEAKIAkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMV9wZCwKIAl9LAogfTsKLSNlbmRpZiAvKiBDT05GSUdfTVY2NDNYWF9FVEhfMSAqLwotCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzIKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0eDYwX2V0aDJfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewpAQCAtMTM2LDE5ICsxMjgsMTIgQEAKIAkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMl9wZCwKIAl9LAogfTsKLSNlbmRpZiAvKiBDT05GSUdfTVY2NDNYWF9FVEhfMiAqLwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXY2NDN4eF9ldGhfcGRfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzAKIAkmZXRoMF9kZXZpY2UsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMQogCSZldGgxX2RldmljZSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8yCiAJJmV0aDJfZGV2aWNlLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgdTggX19pbml0IGV4Y2hhbmdlX2JpdCh1OCB2YWwsIHU4IGNzKQpAQCAtMjE1LDE1ICsyMDAsOSBAQAogCWludCByZXQ7CiAKIAlnZXRfbWFjKG1hYyk7Ci0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzAKIAlldGhfbWFjX2FkZChldGgxX21hY19hZGRyLCBtYWMsIDApOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzEKIAlldGhfbWFjX2FkZChldGgxX21hY19hZGRyLCBtYWMsIDEpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzIKIAlldGhfbWFjX2FkZChldGgyX21hY19hZGRyLCBtYWMsIDIpOwotI2VuZGlmCiAJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMobXY2NDN4eF9ldGhfcGRfZGV2cywKIAkJCUFSUkFZX1NJWkUobXY2NDN4eF9ldGhfcGRfZGV2cykpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9wbGF0Zm9ybS5jCmluZGV4IDU3Y2ZlNWMuLjBhYjhkMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9wbGF0Zm9ybS5jCkBAIC0zOCw4ICszOCw2IEBACiAjZGVmaW5lIE1WNjR4NjBfSVJRX0VUSF8xIDQ5CiAjZGVmaW5lIE1WNjR4NjBfSVJRX0VUSF8yIDUwCiAKLSNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMAotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG12NjR4NjBfZXRoMF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5uYW1lCT0gImV0aDAgaXJxIiwKQEAgLTcyLDkgKzcwLDYgQEAKIAkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMF9wZCwKIAl9LAogfTsKLSNlbmRpZiAvKiBDT05GSUdfTVY2NDNYWF9FVEhfMCAqLwotCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzEKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0eDYwX2V0aDFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewpAQCAtMTA4LDkgKzEwMyw2IEBACiAJCS5wbGF0Zm9ybV9kYXRhID0gJmV0aDFfcGQsCiAJfSwKIH07Ci0jZW5kaWYgLyogQ09ORklHX01WNjQzWFhfRVRIXzEgKi8KLQotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8yCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXY2NHg2MF9ldGgyX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTEzNiwxOSArMTI4LDEyIEBACiAJCS5wbGF0Zm9ybV9kYXRhID0gJmV0aDJfcGQsCiAJfSwKIH07Ci0jZW5kaWYgLyogQ09ORklHX01WNjQzWFhfRVRIXzIgKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm12NjQzeHhfZXRoX3BkX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZtdjY0M3h4X2V0aF9zaGFyZWRfZGV2aWNlLAotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8wCiAJJmV0aDBfZGV2aWNlLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzEKIAkmZXRoMV9kZXZpY2UsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMgogCSZldGgyX2RldmljZSwKLSNlbmRpZgogfTsKIAogc3RhdGljIHU4IF9faW5pdCBleGNoYW5nZV9iaXQodTggdmFsLCB1OCBjcykKQEAgLTIxNSwxNSArMjAwLDkgQEAKIAlpbnQgcmV0OwogCiAJZ2V0X21hYyhtYWMpOwotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8wCiAJZXRoX21hY19hZGQoZXRoMV9tYWNfYWRkciwgbWFjLCAwKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8xCiAJZXRoX21hY19hZGQoZXRoMV9tYWNfYWRkciwgbWFjLCAxKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8yCiAJZXRoX21hY19hZGQoZXRoMl9tYWNfYWRkciwgbWFjLCAyKTsKLSNlbmRpZgogCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKG12NjQzeHhfZXRoX3BkX2RldnMsCiAJCQlBUlJBWV9TSVpFKG12NjQzeHhfZXRoX3BkX2RldnMpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcGxhdGZvcm0uYwppbmRleCA2YzQ5NWIyLi44ZTM4MWQ0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcGxhdGZvcm0uYwpAQCAtMzcsOCArMzcsNiBAQAogI2RlZmluZSBNVjY0eDYwX0lSUV9FVEhfMCA0OAogI2RlZmluZSBNVjY0eDYwX0lSUV9FVEhfMSA0OQogCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzAKLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0eDYwX2V0aDBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkubmFtZQk9ICJldGgwIGlycSIsCkBAIC03MSw5ICs2OSw2IEBACiAJCS5wbGF0Zm9ybV9kYXRhID0gJmV0aDBfcGQsCiAJfSwKIH07Ci0jZW5kaWYgLyogQ09ORklHX01WNjQzWFhfRVRIXzAgKi8KLQotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8xCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXY2NHg2MF9ldGgxX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTEwNywxNiArMTAyLDExIEBACiAJCS5wbGF0Zm9ybV9kYXRhID0gJmV0aDFfcGQsCiAJfSwKIH07Ci0jZW5kaWYgLyogQ09ORklHX01WNjQzWFhfRVRIXzEgKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm12NjQzeHhfZXRoX3BkX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZtdjY0M3h4X2V0aF9zaGFyZWRfZGV2aWNlLAotI2lmZGVmIENPTkZJR19NVjY0M1hYX0VUSF8wCiAJJmV0aDBfZGV2aWNlLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01WNjQzWFhfRVRIXzEKIAkmZXRoMV9kZXZpY2UsCi0jZW5kaWYKIAkvKiBUaGUgdGhpcmQgcG9ydCBpcyBub3Qgd2lyZWQgdXAgb24gdGhlIE9jZWxvdCBDICovCiB9OwogCkBAIC0xODQsMTIgKzE3NCw4IEBACiAJaW50IHJldDsKIAogCWdldF9tYWMobWFjKTsKLSNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMAogCWV0aF9tYWNfYWRkKGV0aDFfbWFjX2FkZHIsIG1hYywgMCk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTVY2NDNYWF9FVEhfMQogCWV0aF9tYWNfYWRkKGV0aDFfbWFjX2FkZHIsIG1hYywgMSk7Ci0jZW5kaWYKIAlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtdjY0M3h4X2V0aF9wZF9kZXZzLAogCQkJQVJSQVlfU0laRShtdjY0M3h4X2V0aF9wZF9kZXZzKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9LY29uZmlnIGIvYXJjaC9taXBzL29wcm9maWxlL0tjb25maWcKaW5kZXggY2EzOTVlZi4uZmI2ZjIzNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL0tjb25maWcKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL0tjb25maWcKQEAgLTExLDcgKzExLDcgQEAKIAogY29uZmlnIE9QUk9GSUxFCiAJdHJpc3RhdGUgIk9Qcm9maWxlIHN5c3RlbSBwcm9maWxpbmcgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQUk9GSUxJTkcgJiYgISFNSVBTX01UX1NNVEMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBQUk9GSUxJTkcgJiYgIU1JUFNfTVRfU01UQyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBPUHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gY2FwYWJsZSBvZiBwcm9maWxpbmcgdGhlCiAJICB3aG9sZSBzeXN0ZW0sIGluY2x1ZGUgdGhlIGtlcm5lbCwga2VybmVsIG1vZHVsZXMsIGxpYnJhcmllcywKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtc25pLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLXNuaS5jCmluZGV4IGExNzZmMmMuLjBjOWE0NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtc25pLmMKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC1zbmkuYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGFzbS9zbmkuaD4KIAogLyoKLSAqIFNob3J0Y3V0cyAuLi4KKyAqIFBDSU1UIFNob3J0Y3V0cyAuLi4KICAqLwogI2RlZmluZSBTQ1NJCVBDSU1UX0lSUV9TQ1NJCiAjZGVmaW5lIEVUSAlQQ0lNVF9JUlFfRVRIRVJORVQKQEAgLTY3LDYgKzY3LDUwIEBACiAJeyAgICAgMCwgSU5URCwgSU5UQSwgSU5UQiwgSU5UQyB9LAkvKiBTbG90IDQgKi8KIH07CiAKK3N0YXRpYyBjaGFyIGlycV90YWJfcm0zMDBlWzVdWzVdIF9faW5pdGRhdGEgPSB7CisJLyogICAgICAgSU5UQSAgSU5UQiAgSU5UQyAgSU5URCAqLworCXsgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAgfSwJLyogSE9TVCBicmlkZ2UgKi8KKwl7ICBTQ1NJLCBTQ1NJLCBTQ1NJLCBTQ1NJLCBTQ1NJIH0sCS8qIFNDU0kgKi8KKwl7ICAgICAwLCBJTlRDLCBJTlRELCBJTlRBLCBJTlRCIH0sCS8qIEJyaWRnZS9pOTYwICovCisJeyAgICAgMCwgSU5URCwgSU5UQSwgSU5UQiwgSU5UQyB9LAkvKiBTbG90IDEgKi8KKwl7ICAgICAwLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIH0sCS8qIFNsb3QgMiAqLworfTsKKyN1bmRlZiBTQ1NJCisjdW5kZWYgRVRICisjdW5kZWYgSU5UQQorI3VuZGVmIElOVEIKKyN1bmRlZiBJTlRDCisjdW5kZWYgSU5URAorCisKKy8qCisgKiBQQ0lUIFNob3J0Y3V0cyAuLi4KKyAqLworI2RlZmluZSBTQ1NJMAlQQ0lUX0lSUV9TQ1NJMAorI2RlZmluZSBTQ1NJMQlQQ0lUX0lSUV9TQ1NJMQorI2RlZmluZSBFVEgJUENJVF9JUlFfRVRIRVJORVQKKyNkZWZpbmUgSU5UQQlQQ0lUX0lSUV9JTlRBCisjZGVmaW5lIElOVEIJUENJVF9JUlFfSU5UQgorI2RlZmluZSBJTlRDCVBDSVRfSVJRX0lOVEMKKyNkZWZpbmUgSU5URAlQQ0lUX0lSUV9JTlRECisKK3N0YXRpYyBjaGFyIGlycV90YWJfcGNpdFsxM11bNV0gX19pbml0ZGF0YSA9IHsKKwkvKiAgICAgICBJTlRBICBJTlRCICBJTlRDICBJTlREICovCisJeyAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAgfSwJLyogSE9TVCBicmlkZ2UgKi8KKwl7IFNDU0kwLCBTQ1NJMCwgU0NTSTAsIFNDU0kwLCBTQ1NJMCB9LAkvKiBTQ1NJICovCisJeyBTQ1NJMSwgU0NTSTEsIFNDU0kxLCBTQ1NJMSwgU0NTSTEgfSwJLyogU0NTSSAqLworCXsgICBFVEgsICAgRVRILCAgIEVUSCwgICBFVEgsICAgRVRIIH0sCS8qIEV0aGVybmV0ICovCisJeyAgICAgMCwgIElOVEEsICBJTlRCLCAgSU5UQywgIElOVEQgfSwJLyogUENJLVBDSSBicmlkZ2UgKi8KKwl7ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCB9LAkvKiBVbnVzZWQgKi8KKwl7ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCB9LAkvKiBVbnVzZWQgKi8KKwl7ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCB9LAkvKiBVbnVzZWQgKi8KKwl7ICAgICAwLCAgSU5UQSwgIElOVEIsICBJTlRDLCAgSU5URCB9LAkvKiBTbG90IDEgKi8KKwl7ICAgICAwLCAgSU5UQiwgIElOVEMsICBJTlRELCAgSU5UQSB9LAkvKiBTbG90IDIgKi8KKwl7ICAgICAwLCAgSU5UQywgIElOVEQsICBJTlRBLCAgSU5UQiB9LAkvKiBTbG90IDMgKi8KKwl7ICAgICAwLCAgSU5URCwgIElOVEEsICBJTlRCLCAgSU5UQyB9LAkvKiBTbG90IDQgKi8KKwl7ICAgICAwLCAgSU5UQSwgIElOVEIsICBJTlRDLCAgSU5URCB9LAkvKiBTbG90IDUgKi8KK307CisKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3JtMzAwX3JldmQodm9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIGNzbXNyID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUENJTVRfQ1NNU1I7CkBAIC03NiwxMCArMTIwLDI0IEBACiAKIGludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKLQlpZiAoaXNfcm0zMDBfcmV2ZCgpKQotCQlyZXR1cm4gaXJxX3RhYl9ybTMwMGRbc2xvdF1bcGluXTsKKwlzd2l0Y2ggKHNuaV9icmRfdHlwZSkgeworCWNhc2UgU05JX0JSRF9QQ0lfVE9XRVI6CisJY2FzZSBTTklfQlJEX1BDSV9UT1dFUl9DUExVUzoKKwkgICAgICAgIHJldHVybiBpcnFfdGFiX3BjaXRbc2xvdF1bcGluXTsKIAotCXJldHVybiBpcnFfdGFiX3JtMjAwW3Nsb3RdW3Bpbl07CisJY2FzZSBTTklfQlJEX1BDSV9NVE9XRVI6CisJICAgICAgICBpZiAoaXNfcm0zMDBfcmV2ZCgpKQorCQkgICAgICAgIHJldHVybiBpcnFfdGFiX3JtMzAwZFtzbG90XVtwaW5dOworCSAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIFNOSV9CUkRfUENJX0RFU0tUT1A6CisJICAgICAgICByZXR1cm4gaXJxX3RhYl9ybTIwMFtzbG90XVtwaW5dOworCisJY2FzZSBTTklfQlJEX1BDSV9NVE9XRVJfQ1BMVVM6CisJICAgICAgICByZXR1cm4gaXJxX3RhYl9ybTMwMGVbc2xvdF1bcGluXTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyogRG8gcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXRpYWxpemF0aW9uIGF0IHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtc25pLmMgYi9hcmNoL21pcHMvcGNpL29wcy1zbmkuYwppbmRleCAyYjBjY2Q2Li5mYTJkMmM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1zbmkuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy1zbmkuYwpAQCAtODMsNyArODMsODIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHBjaV9vcHMgc25pX3BjaV9vcHMgPSB7CitzdHJ1Y3QgcGNpX29wcyBzbmlfcGNpbXRfb3BzID0gewogCS5yZWFkID0gcGNpbXRfcmVhZCwKIAkud3JpdGUgPSBwY2ltdF93cml0ZSwKIH07CisKK3N0YXRpYyBpbnQgcGNpdF9zZXRfY29uZmlnX2FkZHJlc3ModW5zaWduZWQgaW50IGJ1c25vLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCByZWcpCit7CisJaWYgKChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkgfHwgKGJ1c25vID4gMjU1KSkKKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKworCW91dGwgKCgxIDw8IDMxKSB8ICgoYnVzbm8gJiAweGZmKSA8PCAxNikgfCAoKGRldmZuICYgMHhmZikgPDwgOCkgfCAocmVnICYgMHhmYyksIDB4Y2Y4KTsKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHBjaXRfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCByZWcsCisJCSAgICAgIGludCBzaXplLCB1MzIgKiB2YWwpCit7CisJaW50IHJlczsKKworCS8qCisJICogb24gYnVzIDAgd2UgbmVlZCB0byBjaGVjaywgd2hldGhlciB0aGVyZSBpcyBhIGRldmljZSBhbnN3ZXJpbmcKKwkgKiBmb3IgdGhlIGRldmZuIGJ5IGRvaW5nIGEgY29uZmlnIHdyaXRlIGFuZCBjaGVja2luZyB0aGUgcmVzdWx0LiBJZgorCSAqIHdlIGRvbid0IGRvIGl0LCB3ZSB3aWxsIGdldCBhIGRhdGEgYnVzIGVycm9yCisJICovCisJaWYgKGJ1cy0+bnVtYmVyID09IDApIHsKKwkJcGNpdF9zZXRfY29uZmlnX2FkZHJlc3MgKDAsIDAsIDB4NjgpOworCQlvdXRsIChpbmwgKDB4Y2ZjKSB8IDB4YzAwMDAwMDAsIDB4Y2ZjKTsKKwkJaWYgKChyZXMgPSBwY2l0X3NldF9jb25maWdfYWRkcmVzcygwLCBkZXZmbiwgMCkpKQorCQkJcmV0dXJuIHJlczsKKwkJb3V0bCAoMHhmZmZmZmZmZiwgMHhjZmMpOworCQlwY2l0X3NldF9jb25maWdfYWRkcmVzcyAoMCwgMCwgMHg2OCk7CisJCWlmIChpbmwoMHhjZmMpICYgMHgxMDAwMDApCisJCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCX0KKwlpZiAoKHJlcyA9IHBjaXRfc2V0X2NvbmZpZ19hZGRyZXNzKGJ1cy0+bnVtYmVyLCBkZXZmbiwgcmVnKSkpCisJCXJldHVybiByZXM7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCSp2YWwgPSBpbmIoUENJTVRfQ09ORklHX0RBVEEgKyAocmVnICYgMykpOworCQlicmVhazsKKwljYXNlIDI6CisJCSp2YWwgPSBpbncoUENJTVRfQ09ORklHX0RBVEEgKyAocmVnICYgMikpOworCQlicmVhazsKKwljYXNlIDQ6CisJCSp2YWwgPSBpbmwoUENJTVRfQ09ORklHX0RBVEEpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpdF93cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCByZWcsCisJCSAgICAgICBpbnQgc2l6ZSwgdTMyIHZhbCkKK3sKKwlpbnQgcmVzOworCisJaWYgKChyZXMgPSBwY2l0X3NldF9jb25maWdfYWRkcmVzcyhidXMtPm51bWJlciwgZGV2Zm4sIHJlZykpKQorCQlyZXR1cm4gcmVzOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlvdXRiICh2YWwsIFBDSU1UX0NPTkZJR19EQVRBICsgKHJlZyAmIDMpKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlvdXR3ICh2YWwsIFBDSU1UX0NPTkZJR19EQVRBICsgKHJlZyAmIDIpKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlvdXRsICh2YWwsIFBDSU1UX0NPTkZJR19EQVRBKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RydWN0IHBjaV9vcHMgc25pX3BjaXRfb3BzID0geworCS5yZWFkID0gcGNpdF9yZWFkLAorCS53cml0ZSA9IHBjaXRfd3JpdGUsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2kuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLmMKaW5kZXggNWFjZTM2ODYuLjY5N2E3ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2kuYwpAQCAtNzksNiArNzksMTQgQEAKIHsKIAkqaG9zZV90YWlsID0gaG9zZTsKIAlob3NlX3RhaWwgPSAmaG9zZS0+bmV4dDsKKworCS8qCisJICogRG8gbm90IHBhbmljIGhlcmUgYnV0IGxhdGVyIC0gdGhpcyBtaWdodCBoYXBlbiBiZWZvcmUgY29uc29sZSBpbml0LgorCSAqLworCWlmICghaG9zZS0+aW9fbWFwX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgInJlZ2lzdGVyaW5nIFBDSSBjb250cm9sbGVyIHdpdGggaW9fbWFwX2Jhc2UgdW5zZXRcbiIpOworCX0KIH0KIAogLyogTW9zdCBNSVBTIHN5c3RlbXMgaGF2ZSBzdHJhaWdodC1mb3J3YXJkIHN3aXp6bGluZyBuZWVkcy4gICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1tZW1vcnkuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW1lbW9yeS5jCmluZGV4IDBlM2Q1MzUuLmZlOGExMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW1lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW1lbW9yeS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAogI2luY2x1ZGUgPGFzbS9zbi9hcmNoLmg+CkBAIC01MDMsNyArNTA0LDYgQEAKIAkvKiBXZSBnb3Qgbm90aGluZyB0byBmcmVlIGhlcmUgLi4uICAqLwogfQogCi1leHRlcm4gdm9pZCBwYWdldGFibGVfaW5pdCh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNldHVwX3plcm9fcGFnZXModm9pZCk7CiAKIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwppbmRleCA5Y2U1MTM2Li44YzNjNzhjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcnRfaXJxYWN0aW9uID0gewotCS5oYW5kbGVyCT0gaXAyN19ydF90aW1lcl9pbnRlcnJ1cHQsCisJLmhhbmRsZXIJPSAoaXJxX2hhbmRsZXJfdCkgaXAyN19ydF90aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCiAJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZQkJPSAidGltZXIiCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL01ha2VmaWxlIGIvYXJjaC9taXBzL3NuaS9NYWtlZmlsZQppbmRleCBhNWViMGFkLi5lMzA4MDlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zbmkvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgU05JIHNwZWNpZmljIHBhcnQgb2YgdGhlIGtlcm5lbAogIwogCi1vYmoteQkgCSs9IGlycS5vIHBjaW10X3NjYWNoZS5vIHJlc2V0Lm8gc2V0dXAubworb2JqLXkgKz0gaXJxLm8gcmVzZXQubyBzZXR1cC5vIGRzMTIxNi5vIGEyMHIubyBybTIwMC5vIHBjaW10Lm8gcGNpdC5vIHRpbWUubwogb2JqLSQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSArPSBzbmlwcm9tLm8KIAogRVhUUkFfQUZMQUdTIDo9ICQoQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9hMjByLmMgYi9hcmNoL21pcHMvc25pL2EyMHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWFiODBmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3NuaS9hMjByLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBBMjBSIHNwZWNpZmljIGNvZGUKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhvbWFzIEJvZ2VuZG9lcmZlciAodHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZSkKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisKKyNpbmNsdWRlIDxhc20vc25pLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vZHMxMjE2Lmg+CisKKyNkZWZpbmUgUE9SVChfYmFzZSxfaXJxKQkJCQlcCisJewkJCQkJCVwKKwkJLmlvYmFzZQkJPSBfYmFzZSwJCVwKKwkJLmlycQkJPSBfaXJxLAkJCVwKKwkJLnVhcnRjbGsJPSAxODQzMjAwLAkJXAorCQkuaW90eXBlCQk9IFVQSU9fUE9SVCwJCVwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAlcCisJfQorCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGEyMHJfZGF0YVtdID0geworCVBPUlQoMHgzZjgsIDQpLAorCVBPUlQoMHgyZjgsIDMpLAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGEyMHJfc2VyaWFsODI1MF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gYTIwcl9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNuaXJtXzgyNTk2X3JzcmNbXSA9IHsKKwl7CisJCS5zdGFydCA9IDB4YjgwMDAwMDAsCisJCS5lbmQgICA9IDB4YjgwMDAwMDQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCisJfSwKKwl7CisJCS5zdGFydCA9IDB4YjgwMTAwMDAsCisJCS5lbmQgICA9IDB4YjgwMTAwMDQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCisJfSwKKwl7CisJCS5zdGFydCA9IDB4YmZmMDAwMDAsCisJCS5lbmQgICA9IDB4YmZmMDAwMjAsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCisJfSwKKwl7CisJCS5zdGFydCA9IDIyLAorCQkuZW5kICAgPSAyMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEKKwl9LAorCXsKKwkJLmZsYWdzID0gMHgwMSAgICAgICAgICAgICAgICAvKiAxNmJpdCBtcHUgcG9ydCBhY2Nlc3MgKi8KKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbmlybV84MjU5Nl9wZGV2ID0geworCS5uYW1lICAgICAgICAgICA9ICJzbmlybV84MjU5NiIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzbmlybV84MjU5Nl9yc3JjKSwKKwkucmVzb3VyY2UgICAgICAgPSBzbmlybV84MjU5Nl9yc3JjCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNuaXJtXzUzYzcxMF9yc3JjW10gPSB7CisJeworCQkuc3RhcnQgPSAweGI5MDAwMDAwLAorCQkuZW5kICAgPSAweGI5MGZmZmZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorCX0sCisJeworCQkuc3RhcnQgPSAxOSwKKwkJLmVuZCAgID0gMTksCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc25pcm1fNTNjNzEwX3BkZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNuaXJtXzUzYzcxMCIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzbmlybV81M2M3MTBfcnNyYyksCisJLnJlc291cmNlICAgICAgID0gc25pcm1fNTNjNzEwX3JzcmMKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2MyNnh4X3JzcmNbXSA9IHsKKwl7CisJCS5zdGFydCA9IDB4YmMwNzAwMDAsCisJCS5lbmQgICA9IDB4YmMwNzAwZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCisJfSwKKwl7CisJCS5zdGFydCA9IDIwLAorCQkuZW5kICAgPSAyMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYzI2eHhfcGRldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiU0MyNnh4IiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNjMjZ4eF9yc3JjKSwKKwkucmVzb3VyY2UgICAgICAgPSBzYzI2eHhfcnNyYworfTsKKworc3RhdGljIHUzMiBhMjByX2Fja19od2ludCh2b2lkKQoreworCXUzMiBzdGF0dXMgPSByZWFkX2MwX3N0YXR1cygpOworCisJd3JpdGVfYzBfc3RhdHVzIChzdGF0dXMgfCAweDAwMDEwMDAwKTsKKwlhc20gdm9sYXRpbGUoCisJIgkuc2V0CXB1c2gJCQlcbiIKKwkiCS5zZXQJbm9hdAkJCVxuIgorCSIJLnNldAlub3Jlb3JkZXIJCVxuIgorCSIJbHcJJDEsIDAoJTApCQlcbiIKKwkiCXNiCSQwLCAwKCUxKQkJXG4iCisJIglzeW5jCQkJCVxuIgorCSIJbGIJJTEsIDAoJTEpCQlcbiIKKwkiCWIJMWYJCQlcbiIKKwkiCW9yaQklMSwgJDEsIDIJCVxuIgorCSIJLmFsaWduCTgJCQlcbiIKKwkiMToJCQkJCVxuIgorCSIJbm9wCQkJCVxuIgorCSIJc3cJJTEsIDAoJTApCQlcbiIKKwkiCXN5bmMJCQkJXG4iCisJIglsaQklMSwgMHgyMAkJXG4iCisJIjI6CQkJCQlcbiIKKwkiCW5vcAkJCQlcbiIKKwkiCWJuZXoJJTEsMmIJCQlcbiIKKwkiCWFkZGl1CSUxLCAtMQkJCVxuIgorCSIJc3cJJDEsIDAoJTApCQlcbiIKKwkiCXN5bmMJCQkJXG4iCisJCSIuc2V0ICAgcG9wCQkJXG4iCisJOgorCTogIkpyIiAoUENJTVRfVUNPTkYpLCAiSnIiICgweGJjMDAwMDAwKSk7CisJd3JpdGVfYzBfc3RhdHVzKHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXNrX2EyMHJfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJc2V0X2MwX3N0YXR1cygweDEwMCA8PCAoaXJxIC0gU05JX0EyMFJfSVJRX0JBU0UpKTsKKwlpcnFfZW5hYmxlX2hhemFyZCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFza19hMjByX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWNsZWFyX2MwX3N0YXR1cygweDEwMCA8PCAoaXJxIC0gU05JX0EyMFJfSVJRX0JBU0UpKTsKKwlpcnFfZGlzYWJsZV9oYXphcmQoKTsKK30KKworc3RhdGljIHZvaWQgZW5kX2EyMHJfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkgeworCQlhMjByX2Fja19od2ludCgpOworCQl1bm1hc2tfYTIwcl9pcnEoaXJxKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYTIwcl9pcnFfdHlwZSA9IHsKKwkudHlwZW5hbWUJPSAiQTIwUiIsCisJLmFjawkJPSBtYXNrX2EyMHJfaXJxLAorCS5tYXNrCQk9IG1hc2tfYTIwcl9pcnEsCisJLm1hc2tfYWNrCT0gbWFza19hMjByX2lycSwKKwkudW5tYXNrCQk9IHVubWFza19hMjByX2lycSwKKwkuZW5kCQk9IGVuZF9hMjByX2lycSwKK307CisKKy8qCisgKiBod2ludCAwIHJlY2VpdmUgYWxsIGludGVycnVwdHMKKyAqLworc3RhdGljIHZvaWQgYTIwcl9od2ludCh2b2lkKQoreworCXUzMiBjYXVzZSwgc3RhdHVzOworCWludCBpcnE7CisKKwljbGVhcl9jMF9zdGF0dXMgKElFX0lSUTApOworCXN0YXR1cyA9IGEyMHJfYWNrX2h3aW50KCk7CisJY2F1c2UgPSByZWFkX2MwX2NhdXNlKCk7CisKKwlpcnEgPSBmZnMoKChjYXVzZSAmIHN0YXR1cykgPj4gOCkgJiAweGY4KTsKKwlpZiAobGlrZWx5KGlycSA+IDApKQorCQlkb19JUlEoU05JX0EyMFJfSVJRX0JBU0UgKyBpcnEgLSAxKTsKKwlzZXRfYzBfc3RhdHVzKElFX0lSUTApOworfQorCit2b2lkIF9faW5pdCBzbmlfYTIwcl9pcnFfaW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gU05JX0EyMFJfSVJRX0JBU0UgKyAyIDsgaSA8IFNOSV9BMjBSX0lSUV9CQVNFICsgODsgaSsrKQorCQlzZXRfaXJxX2NoaXAoaSwgJmEyMHJfaXJxX3R5cGUpOworCXNuaV9od2ludCA9IGEyMHJfaHdpbnQ7CisJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTApOworCXNldHVwX2lycSAoU05JX0EyMFJfSVJRX0JBU0UgKyAzLCAmc25pX2lzYV9pcnEpOworfQorCit2b2lkIHNuaV9hMjByX2luaXQodm9pZCkKK3sKKwlkczEyMTZfYmFzZSA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIFNOSV9EUzEyMTZfQTIwUl9CQVNFOworCXJ0Y19taXBzX2dldF90aW1lID0gZHMxMjE2X2dldF9jbW9zX3RpbWU7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNuaXJtX2EyMHJfc2V0dXBfZGV2aW5pdCh2b2lkKQoreworCXN3aXRjaCAoc25pX2JyZF90eXBlKSB7CisJY2FzZSBTTklfQlJEX1RPV0VSX09BU0lDOgorCWNhc2UgU05JX0JSRF9NSU5JVE9XRVI6CisJICAgICAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNuaXJtXzgyNTk2X3BkZXYpOworCSAgICAgICAgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbmlybV81M2M3MTBfcGRldik7CisJICAgICAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjMjZ4eF9wZGV2KTsKKwkgICAgICAgIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYTIwcl9zZXJpYWw4MjUwX2RldmljZSk7CisJICAgICAgICBicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKHNuaXJtX2EyMHJfc2V0dXBfZGV2aW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL2RzMTIxNi5jIGIvYXJjaC9taXBzL3NuaS9kczEyMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDkyNzMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3NuaS9kczEyMTYuYwpAQCAtMCwwICsxLDgxIEBACisKKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vZHMxMjE2Lmg+CisKK3ZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmRzMTIxNl9iYXNlOworCisvKgorICogUmVhZCB0aGUgNjQgYml0IHdlJ2QgbGlrZSB0byBoYXZlIC0gSXQgYSBzZXJpZXMKKyAqIG9mIDY0IGJpdHMgc2hvd2luZyB1cCBpbiB0aGUgTFNCIG9mIHRoZSBiYXNlIHJlZ2lzdGVyLgorICoKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmRzMTIxNl9yZWFkKHZvaWQpCit7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIJcmRidWZbOF07CisJdW5zaWduZWQgY2hhcgkJYzsKKwlpbnQJCQlpLCBqOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQljID0gMHgwOworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQljIHw9ICgqZHMxMjE2X2Jhc2UgJiAweDEpIDw8IGo7CisJCX0KKwkJcmRidWZbaV0gPSBjOworCX0KKworCXJldHVybiByZGJ1ZjsKK30KKworc3RhdGljIHZvaWQgZHMxMjE2X3N3aXRjaF9kc190b19jbG9jayh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgbWFnaWNbXSA9IHsKKwkJMHhjNSwgMHgzYSwgMHhhMywgMHg1YywgMHhjNSwgMHgzYSwgMHhhMywgMHg1YworCX07CisJaW50IGksaixjOworCisJLyogUmVzZXQgbWFnaWMgcG9pbnRlciAqLworCWMgPSAqZHMxMjE2X2Jhc2U7CisKKwkvKiBXcml0ZSA2NCBiaXQgbWFnaWMgdG8gRFMxMjE2ICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQljID0gbWFnaWNbaV07CisJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCSpkczEyMTZfYmFzZSA9IGM7CisJCQljID0gYyA+PiAxOworCQl9CisJfQorfQorCit1bnNpZ25lZCBsb25nIGRzMTIxNl9nZXRfY21vc190aW1lKHZvaWQpCit7CisJdW5zaWduZWQgY2hhcgkqcmRidWY7CisJdW5zaWduZWQgaW50CXllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW4sIHNlYzsKKworCWRzMTIxNl9zd2l0Y2hfZHNfdG9fY2xvY2soKTsKKwlyZGJ1ZiA9IGRzMTIxNl9yZWFkKCk7CisKKwlzZWMgPSBCQ0QyQklOKERTMTIxNl9TRUMocmRidWYpKTsKKwltaW4gPSBCQ0QyQklOKERTMTIxNl9NSU4ocmRidWYpKTsKKwlob3VyID0gQkNEMkJJTihEUzEyMTZfSE9VUihyZGJ1ZikpOworCWRhdGUgPSBCQ0QyQklOKERTMTIxNl9EQVRFKHJkYnVmKSk7CisJbW9udGggPSBCQ0QyQklOKERTMTIxNl9NT05USChyZGJ1ZikpOworCXllYXIgPSBCQ0QyQklOKERTMTIxNl9ZRUFSKHJkYnVmKSk7CisKKwlpZiAoRFMxMjE2XzEyMjQocmRidWYpICYmIERTMTIxNl9BTVBNKHJkYnVmKSkKKwkJaG91cis9MTI7CisKKwlpZiAoeWVhciA8IDcwKQorCQl5ZWFyICs9IDIwMDA7CisJZWxzZQorCQl5ZWFyICs9IDE5MDA7CisKKwlyZXR1cm4gbWt0aW1lKHllYXIsIG1vbnRoLCBkYXRlLCBob3VyLCBtaW4sIHNlYyk7Cit9CisKK2ludCBkczEyMTZfc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKK3sKKwlwcmludGsoImRzMTIxNl9zZXRfcnRjX21tc3MgY2FsbGVkIGJ1dCBub3QgaW1wbGVtZW50ZWRcbiIpOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvaXJxLmMgYi9hcmNoL21pcHMvc25pL2lycS5jCmluZGV4IDAzOWU4ZTUuLmFkNWZjNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NuaS9pcnEuYwpAQCAtNSw2ICs1LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTIgTGludXMgVG9ydmFsZHMKICAqIENvcHlyaWdodCAoQykgMTk5NCAtIDIwMDAgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhvbWFzIEJvZ2VuZG9lcmZlcgogICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xNSwxNTMgKzE2LDM1IEBACiAjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NuaS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgogCi1zdGF0aWMgdm9pZCBlbmFibGVfcGNpYXNpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDEgPDwgKGlycSAtIFBDSU1UX0lSUV9JTlQyKTsKLQotCSoodm9sYXRpbGUgdTggKikgUENJTVRfSVJRU0VMIHw9IG1hc2s7Ci19Ci0KLXZvaWQgZGlzYWJsZV9wY2lhc2ljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGludCBtYXNrID0gfigxIDw8IChpcnEgLSBQQ0lNVF9JUlFfSU5UMikpOwotCi0JKih2b2xhdGlsZSB1OCAqKSBQQ0lNVF9JUlFTRUwgJj0gbWFzazsKLX0KLQotc3RhdGljIHZvaWQgZW5kX3BjaWFzaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEfElSUV9JTlBST0dSRVNTKSkpCi0JCWVuYWJsZV9wY2lhc2ljX2lycShpcnEpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHBjaWFzaWNfaXJxX3R5cGUgPSB7Ci0JLm5hbWUgPSAiQVNJQy1QQ0kiLAotCS5hY2sgPSBkaXNhYmxlX3BjaWFzaWNfaXJxLAotCS5tYXNrID0gZGlzYWJsZV9wY2lhc2ljX2lycSwKLQkubWFza19hY2sgPSBkaXNhYmxlX3BjaWFzaWNfaXJxLAotCS51bm1hc2sgPSBlbmFibGVfcGNpYXNpY19pcnEsCi0JLmVuZCA9IGVuZF9wY2lhc2ljX2lycSwKLX07Ci0KLS8qCi0gKiBod2ludDAgc2hvdWxkIGRlYWwgd2l0aCBNUCBhZ2VudCwgQVNJQyBQQ0ksIEVJU0EgTk1JIGFuZCBkZWJ1ZwotICogYnV0dG9uIGludGVycnVwdHMuICBMYXRlciAuLi4KLSAqLwotc3RhdGljIHZvaWQgcGNpYXNpY19od2ludDAodm9pZCkKLXsKLQlwYW5pYygiUmVjZWl2ZWQgaW50MCBidXQgbm8gaGFuZGxlciB5ZXQgLi4uIik7Ci19Ci0KLS8qIFRoaXMgaW50ZXJydXB0IHdhcyB1c2VkIGZvciB0aGUgY29tMSBjb25zb2xlIG9uIHRoZSBmaXJzdCBwcm90b3R5cGVzLiAgKi8KLXN0YXRpYyB2b2lkIHBjaWFzaWNfaHdpbnQyKHZvaWQpCi17Ci0JLyogSSB0aGluayB0aGlzIHNob3VsZG4ndCBoYXBwZW4gb24gcHJvZHVjdGlvbiBtYWNoaW5lcy4gICovCi0JcGFuaWMoImh3aW50MiBhbmQgbm8gaGFuZGxlciB5ZXQiKTsKLX0KLQotLyogaHdpbnQ1IGlzIHRoZSByNGsgY291bnQgLyBjb21wYXJlIGludGVycnVwdCAgKi8KLXN0YXRpYyB2b2lkIHBjaWFzaWNfaHdpbnQ1KHZvaWQpCi17Ci0JcGFuaWMoImh3aW50NSBhbmQgbm8gaGFuZGxlciB5ZXQiKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBsczFiaXQ4KHVuc2lnbmVkIGludCB4KQotewotCWludCBiID0gNywgczsKLQotCXMgPSA0OyBpZiAoKHggJiAweDBmKSA9PSAwKSBzID0gMDsgYiAtPSBzOyB4IDw8PSBzOwotCXMgPSAyOyBpZiAoKHggJiAweDMwKSA9PSAwKSBzID0gMDsgYiAtPSBzOyB4IDw8PSBzOwotCXMgPSAxOyBpZiAoKHggJiAweDQwKSA9PSAwKSBzID0gMDsgYiAtPSBzOwotCi0JcmV0dXJuIGI7Ci19Ci0KLS8qCi0gKiBod2ludCAxIGRlYWxzIHdpdGggRUlTQSBhbmQgU0NTSSBpbnRlcnJ1cHRzLAotICoKLSAqIFRoZSBFSVNBX0lOVCBiaXQgaW4gQ1NJVFBFTkQgaXMgaGlnaCBhY3RpdmUsIGFsbCBvdGhlcnMgYXJlIGxvdyBhY3RpdmUuCi0gKi8KLXN0YXRpYyB2b2lkIHBjaWFzaWNfaHdpbnQxKHZvaWQpCi17Ci0JdTggcGVuZCA9ICoodm9sYXRpbGUgY2hhciAqKVBDSU1UX0NTSVRQRU5EOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocGVuZCAmIElUX0VJU0EpIHsKLQkJaW50IGlycTsKLQkJLyoKLQkJICogTm90ZTogQVNJQyBQQ0kncyBidWlsdGluIGludGVycnVwdCBhY2hrbm93bGVkZ2UgZmVhdHVyZSBpcwotCQkgKiBicm9rZW4uICBVc2luZyBpdCBtYXkgcmVzdWx0IGluIGxvc3Mgb2Ygc29tZSBvciBhbGwgaTgyNTkKLQkJICogaW50ZXJ1cHRzLCBzbyBkb24ndCB1c2UgUENJTVRfSU5UX0FDS05PV0xFREdFIC4uLgotCQkgKi8KLQkJaXJxID0gaTgyNTlfaXJxKCk7Ci0JCWlmICh1bmxpa2VseShpcnEgPCAwKSkKLQkJCXJldHVybjsKLQotCQlkb19JUlEoaXJxKTsKLQl9Ci0KLQlpZiAoIShwZW5kICYgSVRfU0NTSSkpIHsKLQkJZmxhZ3MgPSByZWFkX2MwX3N0YXR1cygpOwotCQljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKLQkJZG9fSVJRKFBDSU1UX0lSUV9TQ1NJKTsKLQkJd3JpdGVfYzBfc3RhdHVzKGZsYWdzKTsKLQl9Ci19Ci0KLS8qCi0gKiBod2ludCAzIHNob3VsZCBkZWFsIHdpdGggdGhlIFBDSSBBIC0gRCBpbnRlcnJ1cHRzLAotICovCi1zdGF0aWMgdm9pZCBwY2lhc2ljX2h3aW50Myh2b2lkKQotewotCXU4IHBlbmQgPSAqKHZvbGF0aWxlIGNoYXIgKilQQ0lNVF9DU0lUUEVORDsKLQlpbnQgaXJxOwotCi0JcGVuZCAmPSAoSVRfSU5UQSB8IElUX0lOVEIgfCBJVF9JTlRDIHwgSVRfSU5URCk7Ci0JY2xlYXJfYzBfc3RhdHVzKElFX0lSUTMpOwotCWlycSA9IFBDSU1UX0lSUV9JTlQyICsgbHMxYml0OChwZW5kKTsKLQlkb19JUlEoaXJxKTsKLQlzZXRfYzBfc3RhdHVzKElFX0lSUTMpOwotfQotCi0vKgotICogaHdpbnQgNCBpcyB1c2VkIGZvciBvbmx5IHRoZSBvbmJvYXJkIFBDbmV0IDMyLgotICovCi1zdGF0aWMgdm9pZCBwY2lhc2ljX2h3aW50NCh2b2lkKQotewotCWNsZWFyX2MwX3N0YXR1cyhJRV9JUlE0KTsKLQlkb19JUlEoUENJTVRfSVJRX0VUSEVSTkVUKTsKLQlzZXRfYzBfc3RhdHVzKElFX0lSUTQpOwotfQordm9pZCAoKnNuaV9od2ludCkodm9pZCk7CiAKIGFzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaCh2b2lkKQogewotCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKTsKLQlzdGF0aWMgdW5zaWduZWQgY2hhciBsZWRfY2FjaGU7Ci0KLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgUENJTVRfQ1NMRUQgPSArK2xlZF9jYWNoZTsKLQotCWlmIChwZW5kaW5nICYgMHgwODAwKQotCQlwY2lhc2ljX2h3aW50MSgpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiAweDQwMDApCi0JCXBjaWFzaWNfaHdpbnQ0KCk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIDB4MjAwMCkKLQkJcGNpYXNpY19od2ludDMoKTsKLQllbHNlIGlmIChwZW5kaW5nICYgMHgxMDAwKQotCQlwY2lhc2ljX2h3aW50MigpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiAweDgwMDApCi0JCXBjaWFzaWNfaHdpbnQ1KCk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIDB4MDQwMCkKLQkJcGNpYXNpY19od2ludDAoKTsKKwlzbmlfaHdpbnQoKTsKIH0KIAotdm9pZCBfX2luaXQgaW5pdF9wY2lhc2ljKHZvaWQpCisvKiBJU0EgaXJxIGhhbmRsZXIgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzbmlfaXNhX2lycV9oYW5kbGVyKGludCBkdW1teSwgdm9pZCAqcCkKIHsKLQkqICh2b2xhdGlsZSB1OCAqKSBQQ0lNVF9JUlFTRUwgPQotCQlJVF9FSVNBIHwgSVRfSU5UQSB8IElUX0lOVEIgfCBJVF9JTlRDIHwgSVRfSU5URDsKKwlpbnQgaXJxOworCisJaXJxID0gaTgyNTlfaXJxKCk7CisJaWYgKHVubGlrZWx5KGlycSA8IDApKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlkb19JUlEoaXJxKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0cnVjdCBpcnFhY3Rpb24gc25pX2lzYV9pcnEgPSB7CisJLmhhbmRsZXIgPSBzbmlfaXNhX2lycV9oYW5kbGVyLAorCS5uYW1lID0gIklTQSIsCisJLmZsYWdzID0gU0FfU0hJUlEKK307CisKIC8qCiAgKiBPbiBzeXN0ZW1zIHdpdGggaTgyNTktc3R5bGUgaW50ZXJydXB0IGNvbnRyb2xsZXJzIHdlIGFzc3VtZSBmb3IKICAqIGRyaXZlciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgaW50ZXJydXB0cyAwIC0gMTUgdG8gYmUgdGhlIGk4Mjk1CkBAIC0xNjksMTQgKzUyLDMxIEBACiAgKi8KIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKLQlpbnQgaTsKLQogCWluaXRfaTgyNTlfaXJxcygpOwkJCS8qIEludGVncmF0ZWQgaTgyNTkgICovCi0JaW5pdF9wY2lhc2ljKCk7CisJc3dpdGNoIChzbmlfYnJkX3R5cGUpIHsKKwljYXNlIFNOSV9CUkRfMTA6CisJY2FzZSBTTklfQlJEXzEwTkVXOgorCWNhc2UgU05JX0JSRF9UT1dFUl9PQVNJQzoKKwljYXNlIFNOSV9CUkRfTUlOSVRPV0VSOgorCSAgICAgICAgc25pX2EyMHJfaXJxX2luaXQoKTsKKwkgICAgICAgIGJyZWFrOwogCi0JLyogQWN0dWFsbHkgd2UndmUgZ290IG1vcmUgaW50ZXJydXB0cyB0byBoYW5kbGUgLi4uICAqLwotCWZvciAoaSA9IFBDSU1UX0lSUV9JTlQyOyBpIDw9IFBDSU1UX0lSUV9FVEhFUk5FVDsgaSsrKQotCQlzZXRfaXJxX2NoaXAoaSwgJnBjaWFzaWNfaXJxX3R5cGUpOworCWNhc2UgU05JX0JSRF9QQ0lfVE9XRVI6CisJICAgICAgICBzbmlfcGNpdF9pcnFfaW5pdCgpOworCSAgICAgICAgYnJlYWs7CiAKLQljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMXxJRV9JUlEyfElFX0lSUTN8SUVfSVJRNCk7CisJY2FzZSBTTklfQlJEX1BDSV9UT1dFUl9DUExVUzoKKwkgICAgICAgIHNuaV9wY2l0X2NwbHVzX2lycV9pbml0KCk7CisJICAgICAgICBicmVhazsKKworCWNhc2UgU05JX0JSRF9STTIwMDoKKwkgICAgICAgIHNuaV9ybTIwMF9pcnFfaW5pdCgpOworCSAgICAgICAgYnJlYWs7CisKKwljYXNlIFNOSV9CUkRfUENJX01UT1dFUjoKKwljYXNlIFNOSV9CUkRfUENJX0RFU0tUT1A6CisJY2FzZSBTTklfQlJEX1BDSV9NVE9XRVJfQ1BMVVM6CisJICAgICAgICBzbmlfcGNpbXRfaXJxX2luaXQoKTsKKwkgICAgICAgIGJyZWFrOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvcGNpbXQuYyBiL2FyY2gvbWlwcy9zbmkvcGNpbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzBkYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3NuaS9wY2ltdC5jCkBAIC0wLDAgKzEsMzkwIEBACisvKgorICogUENJTVQgc3BlY2lmaWMgY29kZQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgOTcsIDk4LCAyMDAwLCAwMywgMDQsIDA2IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUaG9tYXMgQm9nZW5kb2VyZmVyICh0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlKQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKworI2luY2x1ZGUgPGFzbS9tYzE0NjgxOC10aW1lLmg+CisjaW5jbHVkZSA8YXNtL3NuaS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CisjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KKworI2RlZmluZSBjYWNoZWNvbmYgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopUENJTVRfQ0FDSEVDT05GKQorI2RlZmluZSBpbnZzcGFjZSAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilQQ0lNVF9JTlZTUEFDRSkKKworc3RhdGljIHZvaWQgX19pbml0IHNuaV9wY2ltdF9zY19pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHNjc2l6LCBzY19zaXplOworCisJc2NzaXogPSBjYWNoZWNvbmYgJiA3OworCWlmIChzY3NpeiA9PSAwKSB7CisJCXByaW50aygiU2Vjb25kIGxldmVsIGNhY2hlIGlzIGRlYWN0aXZlZC5cbiIpOworCQlyZXR1cm47CisJfQorCWlmIChzY3NpeiA+PSA2KSB7CisJCXByaW50aygiSW52YWxpZCBzZWNvbmQgbGV2ZWwgY2FjaGUgc2l6ZSBjb25maWd1cmVkLCAiCisJCSAgICAgICAiZGVhY3RpdmF0aW5nIHNlY29uZCBsZXZlbCBjYWNoZS5cbiIpOworCQljYWNoZWNvbmYgPSAwOworCQlyZXR1cm47CisJfQorCisJc2Nfc2l6ZSA9IDEyOCA8PCBzY3NpejsKKwlwcmludGsoIiVka2Igc2Vjb25kIGxldmVsIGNhY2hlIGRldGVjdGVkLCBkZWFjdGl2YXRpbmcuXG4iLCBzY19zaXplKTsKKwljYWNoZWNvbmYgPSAwOworfQorCisKKy8qCisgKiBBIGJpdCBtb3JlIGdvc3NpcCBhYm91dCB0aGUgaXJvbiB3ZSdyZSBydW5uaW5nIG9uIC4uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc25pX3BjaW10X2RldGVjdCh2b2lkKQoreworCWNoYXIgYm9hcmR0eXBlWzgwXTsKKwl1bnNpZ25lZCBjaGFyIGNzbXNyOworCWNoYXIgKnAgPSBib2FyZHR5cGU7CisJdW5zaWduZWQgaW50IGFzaWM7CisKKwljc21zciA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBDSU1UX0NTTVNSOworCisJcCArPSBzcHJpbnRmKHAsICIlcyBQQ0kiLCAoY3Ntc3IgJiAweDgwKSA/ICJSTTIwMCIgOiAiUk0zMDAiKTsKKwlpZiAoKGNzbXNyICYgMHg4MCkgPT0gMCkKKwkJcCArPSBzcHJpbnRmKHAsICIsIGJvYXJkIHJldmlzaW9uICVzIiwKKwkJICAgICAgICAgICAgIChjc21zciAmIDB4MjApID8gIkQiIDogIkMiKTsKKwlhc2ljID0gY3Ntc3IgJiAweDgwOworCWFzaWMgPSAoY3Ntc3IgJiAweDA4KSA/IGFzaWMgOiAhYXNpYzsKKwlwICs9IHNwcmludGYocCwgIiwgQVNJQyBQQ0kgUmV2ICVzIiwgYXNpYyA/ICIxLjAiIDogIjEuMSIpOworCXByaW50aygiJXMuXG4iLCBib2FyZHR5cGUpOworfQorCisjZGVmaW5lIFBPUlQoX2Jhc2UsX2lycSkJCQkJXAorCXsJCQkJCQlcCisJCS5pb2Jhc2UJCT0gX2Jhc2UsCQlcCisJCS5pcnEJCT0gX2lycSwJCQlcCisJCS51YXJ0Y2xrCT0gMTg0MzIwMCwJCVwKKwkJLmlvdHlwZQkJPSBVUElPX1BPUlQsCQlcCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwJXAorCX0KKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBwY2ltdF9kYXRhW10gPSB7CisJUE9SVCgweDNmOCwgNCksCisJUE9SVCgweDJmOCwgMyksCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNpbXRfc2VyaWFsODI1MF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gcGNpbXRfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbmlfaW9fcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gMHgwMDAwMTAwMFVMLAorCS5lbmQJPSAweDAzYmZmZmZmVUwsCisJLm5hbWUJPSAiUENJTVQgSU8gTUVNIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2ltdF9pb19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4MDAsCisJCS5lbmQJPSAweDFmLAorCQkubmFtZQk9ICJkbWExIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHg0MCwKKwkJLmVuZAk9IDB4NWYsCisJCS5uYW1lCT0gInRpbWVyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHg2MCwKKwkJLmVuZAk9IDB4NmYsCisJCS5uYW1lCT0gImtleWJvYXJkIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHg4MCwKKwkJLmVuZAk9IDB4OGYsCisJCS5uYW1lCT0gImRtYSBwYWdlIHJlZyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gIDB4YzAsCisJCS5lbmQJPSAweGRmLAorCQkubmFtZQk9ICJkbWEyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHhjZmMsCisJCS5lbmQJPSAweGNmZiwKKwkJLm5hbWUJPSAiUENJIGNvbmZpZyBkYXRhIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbmlfbWVtX3Jlc291cmNlID0geworCS5zdGFydAk9IDB4MTAwMDAwMDBVTCwKKwkuZW5kCT0gMHhmZmZmZmZmZlVMLAorCS5uYW1lCT0gIlBDSU1UIFBDSSBNRU0iLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCit9OworCisvKgorICogVGhlIFJNMjAwL1JNMzAwIGhhcyBhIGZldyBob2xlcyBpbiBpdCdzIFBDSS9FSVNBIG1lbW9yeSBhZGRyZXNzIHNwYWNlIHVzZWQKKyAqIGZvciBvdGhlciBwdXJwb3Nlcy4gIEJlIHBhcmFub2lkIGFuZCBhbGxvY2F0ZSBhbGwgb2YgdGhlIGJlZm9yZSB0aGUgUENJCisgKiBjb2RlIGdldHMgYSBjaGFuY2UgdG8gdG8gbWFwIGFueXRoaW5nIGVsc2UgdGhlcmUgLi4uCisgKgorICogVGhpcyBsZWF2ZXMgdGhlIGZvbGxvd2luZyBhcmVhcyBhdmFpbGFibGU6CisgKgorICogMHgxMDAwMDAwMCAtIDB4MTAwOWZmZmYgKDY0MGtCKSBQQ0kvRUlTQS9JU0EgQnVzIE1lbW9yeQorICogMHgxMDEwMDAwMCAtIDB4MTNmZmZmZmYgKCAxNU1CKSBQQ0kvRUlTQS9JU0EgQnVzIE1lbW9yeQorICogMHgxODAwMDAwMCAtIDB4MWZiZmZmZmYgKDEyNE1CKSBQQ0kvRUlTQSBCdXMgTWVtb3J5CisgKiAweDFmZjA4MDAwIC0gMHgxZmZlZmZmZiAoODE2a0IpIFBDSS9FSVNBIEJ1cyBNZW1vcnkKKyAqIDB4YTAwMDAwMDAgLSAweGZmZmZmZmZmICgxLjVHQikgUENJL0VJU0EgQnVzIE1lbW9yeQorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaW10X21lbV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4MTAwYTAwMDAsCisJCS5lbmQJPSAweDEwMGJmZmZmLAorCQkubmFtZQk9ICJWaWRlbyBSQU0gYXJlYSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxMDBjMDAwMCwKKwkJLmVuZAk9IDB4MTAwZmZmZmYsCisJCS5uYW1lCT0gIklTQSBSZXNlcnZlZCIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxNDAwMDAwMCwKKwkJLmVuZAk9IDB4MTdiZmZmZmYsCisJCS5uYW1lCT0gIlBDSSBJTyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxN2MwMDAwMCwKKwkJLmVuZAk9IDB4MTdmZmZmZmYsCisJCS5uYW1lCT0gIkNhY2hlIFJlcGxhY2VtZW50IEFyZWEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MWEwMDAwMDAsCisJCS5lbmQJPSAweDFhMDAwMDAzLAorCQkubmFtZQk9ICJQQ0kgSU5UIEFja25vd2xlZGdlIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDFmYzAwMDAwLAorCQkuZW5kCT0gMHgxZmM3ZmZmZiwKKwkJLm5hbWUJPSAiQm9vdCBQUk9NIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDFmYzgwMDAwLAorCQkuZW5kCT0gMHgxZmNmZmZmZiwKKwkJLm5hbWUJPSAiRGlhZyBQUk9NIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDFmZDAwMDAwLAorCQkuZW5kCT0gMHgxZmRmZmZmZiwKKwkJLm5hbWUJPSAiWC1CdXMiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MWZlMDAwMDAsCisJCS5lbmQJPSAweDFmZWZmZmZmLAorCQkubmFtZQk9ICJCSU9TIG1hcCIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmYwMDAwMCwKKwkJLmVuZAk9IDB4MWZmN2ZmZmYsCisJCS5uYW1lCT0gIk5WUkFNIC8gRUVQUk9NIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDFmZmYwMDAwLAorCQkuZW5kCT0gMHgxZmZmZWZmZiwKKwkJLm5hbWUJPSAiQVNJQyBQQ0kiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MWZmZmYwMDAsCisJCS5lbmQJPSAweDFmZmZmZmZmLAorCQkubmFtZQk9ICJNUCBBZ2VudCIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgyMDAwMDAwMCwKKwkJLmVuZAk9IDB4OWZmZmZmZmYsCisJCS5uYW1lCT0gIk1haW4gTWVtb3J5IiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHNuaV9wY2ltdF9yZXNvdXJjZV9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwkvKiByZXF1ZXN0IEkvTyBzcGFjZSBmb3IgZGV2aWNlcyB1c2VkIG9uIGFsbCBpWzM0NV04NiBQQ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwY2ltdF9pb19yZXNvdXJjZXMpOyBpKyspCisJCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgcGNpbXRfaW9fcmVzb3VyY2VzICsgaSk7CisKKwkvKiByZXF1ZXN0IG1lbSBzcGFjZSBmb3IgcGNpbXQtc3BlY2lmaWMgZGV2aWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaW10X21lbV9yZXNvdXJjZXMpOyBpKyspCisJCXJlcXVlc3RfcmVzb3VyY2UoJnNuaV9tZW1fcmVzb3VyY2UsIHBjaW10X21lbV9yZXNvdXJjZXMgKyBpKTsKKworCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSBzbmlfaW9fcmVzb3VyY2UuZW5kOworfQorCitleHRlcm4gc3RydWN0IHBjaV9vcHMgc25pX3BjaW10X29wczsKKworc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBzbmlfY29udHJvbGxlciA9IHsKKwkucGNpX29wcwk9ICZzbmlfcGNpbXRfb3BzLAorCS5tZW1fcmVzb3VyY2UJPSAmc25pX21lbV9yZXNvdXJjZSwKKwkubWVtX29mZnNldAk9IDB4MTAwMDAwMDBVTCwKKwkuaW9fcmVzb3VyY2UJPSAmc25pX2lvX3Jlc291cmNlLAorCS5pb19vZmZzZXQJPSAweDAwMDAwMDAwVUwKK307CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9wY2ltdF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDEgPDwgKGlycSAtIFBDSU1UX0lSUV9JTlQyKTsKKworCSoodm9sYXRpbGUgdTggKikgUENJTVRfSVJRU0VMIHw9IG1hc2s7Cit9CisKK3ZvaWQgZGlzYWJsZV9wY2ltdF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IH4oMSA8PCAoaXJxIC0gUENJTVRfSVJRX0lOVDIpKTsKKworCSoodm9sYXRpbGUgdTggKikgUENJTVRfSVJRU0VMICY9IG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIGVuZF9wY2ltdF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKKwkJZW5hYmxlX3BjaW10X2lycShpcnEpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBjaW10X2lycV90eXBlID0geworCS50eXBlbmFtZSA9ICJQQ0lNVCIsCisJLmFjayA9IGRpc2FibGVfcGNpbXRfaXJxLAorCS5tYXNrID0gZGlzYWJsZV9wY2ltdF9pcnEsCisJLm1hc2tfYWNrID0gZGlzYWJsZV9wY2ltdF9pcnEsCisJLnVubWFzayA9IGVuYWJsZV9wY2ltdF9pcnEsCisJLmVuZCA9IGVuZF9wY2ltdF9pcnEsCit9OworCisvKgorICogaHdpbnQwIHNob3VsZCBkZWFsIHdpdGggTVAgYWdlbnQsIEFTSUMgUENJLCBFSVNBIE5NSSBhbmQgZGVidWcKKyAqIGJ1dHRvbiBpbnRlcnJ1cHRzLiAgTGF0ZXIgLi4uCisgKi8KK3N0YXRpYyB2b2lkIHBjaW10X2h3aW50MCh2b2lkKQoreworCXBhbmljKCJSZWNlaXZlZCBpbnQwIGJ1dCBubyBoYW5kbGVyIHlldCAuLi4iKTsKK30KKworLyoKKyAqIGh3aW50IDEgZGVhbHMgd2l0aCBFSVNBIGFuZCBTQ1NJIGludGVycnVwdHMsCisgKgorICogVGhlIEVJU0FfSU5UIGJpdCBpbiBDU0lUUEVORCBpcyBoaWdoIGFjdGl2ZSwgYWxsIG90aGVycyBhcmUgbG93IGFjdGl2ZS4KKyAqLworc3RhdGljIHZvaWQgcGNpbXRfaHdpbnQxKHZvaWQpCit7CisJdTggcGVuZCA9ICoodm9sYXRpbGUgY2hhciAqKVBDSU1UX0NTSVRQRU5EOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocGVuZCAmIElUX0VJU0EpIHsKKwkJaW50IGlycTsKKwkJLyoKKwkJICogTm90ZTogQVNJQyBQQ0kncyBidWlsdGluIGludGVycnVwdCBhY2hrbm93bGVkZ2UgZmVhdHVyZSBpcworCQkgKiBicm9rZW4uICBVc2luZyBpdCBtYXkgcmVzdWx0IGluIGxvc3Mgb2Ygc29tZSBvciBhbGwgaTgyNTkKKwkJICogaW50ZXJ1cHRzLCBzbyBkb24ndCB1c2UgUENJTVRfSU5UX0FDS05PV0xFREdFIC4uLgorCQkgKi8KKwkJaXJxID0gaTgyNTlfaXJxKCk7CisJCWlmICh1bmxpa2VseShpcnEgPCAwKSkKKwkJCXJldHVybjsKKworCQlkb19JUlEoaXJxKTsKKwl9CisKKwlpZiAoIShwZW5kICYgSVRfU0NTSSkpIHsKKwkJZmxhZ3MgPSByZWFkX2MwX3N0YXR1cygpOworCQljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKKwkJZG9fSVJRKFBDSU1UX0lSUV9TQ1NJKTsKKwkJd3JpdGVfYzBfc3RhdHVzKGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBod2ludCAzIHNob3VsZCBkZWFsIHdpdGggdGhlIFBDSSBBIC0gRCBpbnRlcnJ1cHRzLAorICovCitzdGF0aWMgdm9pZCBwY2ltdF9od2ludDModm9pZCkKK3sKKwl1OCBwZW5kID0gKih2b2xhdGlsZSBjaGFyICopUENJTVRfQ1NJVFBFTkQ7CisJaW50IGlycTsKKworCXBlbmQgJj0gKElUX0lOVEEgfCBJVF9JTlRCIHwgSVRfSU5UQyB8IElUX0lOVEQpOworCXBlbmQgXj0gKElUX0lOVEEgfCBJVF9JTlRCIHwgSVRfSU5UQyB8IElUX0lOVEQpOworCWNsZWFyX2MwX3N0YXR1cyhJRV9JUlEzKTsKKwlpcnEgPSBQQ0lNVF9JUlFfSU5UMiArIGZmcyhwZW5kKSAtIDE7CisJZG9fSVJRKGlycSk7CisJc2V0X2MwX3N0YXR1cyhJRV9JUlEzKTsKK30KKworc3RhdGljIHZvaWQgc25pX3BjaW10X2h3aW50KHZvaWQpCit7CisJdTMyIHBlbmRpbmcgPSAocmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKSk7CisKKwlpZiAocGVuZGluZyAmIENfSVJRNSkKKwkJZG9fSVJRIChTTklfTUlQU19JUlFfQ1BVX0JBU0UgKyA3KTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ19JUlE0KQorCQlkb19JUlEgKFNOSV9NSVBTX0lSUV9DUFVfQkFTRSArIDYpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDX0lSUTMpCisJCXBjaW10X2h3aW50MygpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDX0lSUTEpCisJCXBjaW10X2h3aW50MSgpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDX0lSUTApIHsKKwkJcGNpbXRfaHdpbnQwKCk7CisJfQorfQorCit2b2lkIF9faW5pdCBzbmlfcGNpbXRfaXJxX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCSoodm9sYXRpbGUgdTggKikgUENJTVRfSVJRU0VMID0gSVRfRVRIIHwgSVRfRUlTQTsKKwltaXBzX2NwdV9pcnFfaW5pdCgpOworCS8qIEFjdHVhbGx5IHdlJ3ZlIGdvdCBtb3JlIGludGVycnVwdHMgdG8gaGFuZGxlIC4uLiAgKi8KKwlmb3IgKGkgPSBQQ0lNVF9JUlFfSU5UMjsgaSA8PSBQQ0lNVF9JUlFfU0NTSTsgaSsrKQorCQlzZXRfaXJxX2NoaXAoaSwgJnBjaW10X2lycV90eXBlKTsKKwlzbmlfaHdpbnQgPSBzbmlfcGNpbXRfaHdpbnQ7CisJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTF8SUVfSVJRMyk7Cit9CisKK3ZvaWQgc25pX3BjaW10X2luaXQodm9pZCkKK3sKKwlzbmlfcGNpbXRfcmVzb3VyY2VfaW5pdCgpOworCXNuaV9wY2ltdF9kZXRlY3QoKTsKKwlzbmlfcGNpbXRfc2NfaW5pdCgpOworCXJ0Y19taXBzX2dldF90aW1lID0gbWMxNDY4MThfZ2V0X2Ntb3NfdGltZTsKKwlydGNfbWlwc19zZXRfdGltZSA9IG1jMTQ2ODE4X3NldF9ydGNfbW1zczsKKwlib2FyZF90aW1lX2luaXQgPSBzbmlfY3B1X3RpbWVfaW5pdDsKKyNpZmRlZiBDT05GSUdfUENJCisJcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJnNuaV9jb250cm9sbGVyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IF9faW5pdCBzbmlybV9wY2ltdF9zZXR1cF9kZXZpbml0KHZvaWQpCit7CisJc3dpdGNoIChzbmlfYnJkX3R5cGUpIHsKKwljYXNlIFNOSV9CUkRfUENJX01UT1dFUjoKKwljYXNlIFNOSV9CUkRfUENJX0RFU0tUT1A6CisJY2FzZSBTTklfQlJEX1BDSV9NVE9XRVJfQ1BMVVM6CisJICAgICAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjaW10X3NlcmlhbDgyNTBfZGV2aWNlKTsKKwkgICAgICAgIGJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitkZXZpY2VfaW5pdGNhbGwoc25pcm1fcGNpbXRfc2V0dXBfZGV2aW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3BjaXQuYyBiL2FyY2gvbWlwcy9zbmkvcGNpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MjEwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvc25pL3BjaXQuYwpAQCAtMCwwICsxLDM1MSBAQAorLyoKKyAqIFBDSSBUb3dlciBzcGVjaWZpYyBjb2RlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBCb2dlbmRvZXJmZXIgKHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGUpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisjaW5jbHVkZSA8YXNtL21jMTQ2ODE4LXRpbWUuaD4KKyNpbmNsdWRlIDxhc20vc25pLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgorCisKKyNkZWZpbmUgUE9SVChfYmFzZSxfaXJxKQkJCQlcCisJewkJCQkJCVwKKwkJLmlvYmFzZQkJPSBfYmFzZSwJCVwKKwkJLmlycQkJPSBfaXJxLAkJCVwKKwkJLnVhcnRjbGsJPSAxODQzMjAwLAkJXAorCQkuaW90eXBlCQk9IFVQSU9fUE9SVCwJCVwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAlcCisJfQorCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHBjaXRfZGF0YVtdID0geworCVBPUlQoMHgzZjgsIDApLAorCVBPUlQoMHgyZjgsIDMpLAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjaXRfc2VyaWFsODI1MF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gcGNpdF9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHBjaXRfY3BsdXNfZGF0YVtdID0geworCVBPUlQoMHgzZjgsIDQpLAorCVBPUlQoMHgyZjgsIDMpLAorCVBPUlQoMHgzZTgsIDQpLAorCVBPUlQoMHgyZTgsIDMpLAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjaXRfY3BsdXNfc2VyaWFsODI1MF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gcGNpdF9jcGx1c19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNuaV9pb19yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSAweDAwMDAxMDAwVUwsCisJLmVuZAk9IDB4MDNiZmZmZmZVTCwKKwkubmFtZQk9ICJQQ0lUIElPIE1FTSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpdF9pb19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4MDAsCisJCS5lbmQJPSAweDFmLAorCQkubmFtZQk9ICJkbWExIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHg0MCwKKwkJLmVuZAk9IDB4NWYsCisJCS5uYW1lCT0gInRpbWVyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHg2MCwKKwkJLmVuZAk9IDB4NmYsCisJCS5uYW1lCT0gImtleWJvYXJkIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHg4MCwKKwkJLmVuZAk9IDB4OGYsCisJCS5uYW1lCT0gImRtYSBwYWdlIHJlZyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gIDB4YzAsCisJCS5lbmQJPSAweGRmLAorCQkubmFtZQk9ICJkbWEyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHhjZmMsCisJCS5lbmQJPSAweGNmZiwKKwkJLm5hbWUJPSAiUENJIGNvbmZpZyBkYXRhIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbmlfbWVtX3Jlc291cmNlID0geworCS5zdGFydAk9IDB4MTAwMDAwMDBVTCwKKwkuZW5kCT0gMHhmZmZmZmZmZlVMLAorCS5uYW1lCT0gIlBDSVQgUENJIE1FTSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KK307CisKKy8qCisgKiBUaGUgUk0yMDAvUk0zMDAgaGFzIGEgZmV3IGhvbGVzIGluIGl0J3MgUENJL0VJU0EgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgdXNlZAorICogZm9yIG90aGVyIHB1cnBvc2VzLiAgQmUgcGFyYW5vaWQgYW5kIGFsbG9jYXRlIGFsbCBvZiB0aGUgYmVmb3JlIHRoZSBQQ0kKKyAqIGNvZGUgZ2V0cyBhIGNoYW5jZSB0byB0byBtYXAgYW55dGhpbmcgZWxzZSB0aGVyZSAuLi4KKyAqCisgKiBUaGlzIGxlYXZlcyB0aGUgZm9sbG93aW5nIGFyZWFzIGF2YWlsYWJsZToKKyAqCisgKiAweDEwMDAwMDAwIC0gMHgxMDA5ZmZmZiAoNjQwa0IpIFBDSS9FSVNBL0lTQSBCdXMgTWVtb3J5CisgKiAweDEwMTAwMDAwIC0gMHgxM2ZmZmZmZiAoIDE1TUIpIFBDSS9FSVNBL0lTQSBCdXMgTWVtb3J5CisgKiAweDE4MDAwMDAwIC0gMHgxZmJmZmZmZiAoMTI0TUIpIFBDSS9FSVNBIEJ1cyBNZW1vcnkKKyAqIDB4MWZmMDgwMDAgLSAweDFmZmVmZmZmICg4MTZrQikgUENJL0VJU0EgQnVzIE1lbW9yeQorICogMHhhMDAwMDAwMCAtIDB4ZmZmZmZmZmYgKDEuNUdCKSBQQ0kvRUlTQSBCdXMgTWVtb3J5CisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpdF9tZW1fcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDE0MDAwMDAwLAorCQkuZW5kCT0gMHgxN2JmZmZmZiwKKwkJLm5hbWUJPSAiUENJIElPIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDE3YzAwMDAwLAorCQkuZW5kCT0gMHgxN2ZmZmZmZiwKKwkJLm5hbWUJPSAiQ2FjaGUgUmVwbGFjZW1lbnQgQXJlYSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxODBhMDAwMCwKKwkJLmVuZAk9IDB4MTgwYmZmZmYsCisJCS5uYW1lCT0gIlZpZGVvIFJBTSBhcmVhIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDE4MGMwMDAwLAorCQkuZW5kCT0gMHgxODBmZmZmZiwKKwkJLm5hbWUJPSAiSVNBIFJlc2VydmVkIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDE5MDAwMDAwLAorCQkuZW5kCT0gMHgxZmJmZmZmZiwKKwkJLm5hbWUJPSAiUENJIE1FTSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmMwMDAwMCwKKwkJLmVuZAk9IDB4MWZjN2ZmZmYsCisJCS5uYW1lCT0gIkJvb3QgUFJPTSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmM4MDAwMCwKKwkJLmVuZAk9IDB4MWZjZmZmZmYsCisJCS5uYW1lCT0gIkRpYWcgUFJPTSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmQwMDAwMCwKKwkJLmVuZAk9IDB4MWZkZmZmZmYsCisJCS5uYW1lCT0gIlgtQnVzIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDFmZTAwMDAwLAorCQkuZW5kCT0gMHgxZmVmZmZmZiwKKwkJLm5hbWUJPSAiQklPUyBtYXAiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MWZmMDAwMDAsCisJCS5lbmQJPSAweDFmZjdmZmZmLAorCQkubmFtZQk9ICJOVlJBTSAvIEVFUFJPTSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmZmMDAwMCwKKwkJLmVuZAk9IDB4MWZmZmVmZmYsCisJCS5uYW1lCT0gIk1BVUkgQVNJQyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmZmZjAwMCwKKwkJLmVuZAk9IDB4MWZmZmZmZmYsCisJCS5uYW1lCT0gIk1QIEFnZW50IiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDIwMDAwMDAwLAorCQkuZW5kCT0gMHg5ZmZmZmZmZiwKKwkJLm5hbWUJPSAiTWFpbiBNZW1vcnkiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc25pX3BjaXRfcmVzb3VyY2VfaW5pdCh2b2lkKQoreworCWludCBpOworCisJLyogcmVxdWVzdCBJL08gc3BhY2UgZm9yIGRldmljZXMgdXNlZCBvbiBhbGwgaVszNDVdODYgUENzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGNpdF9pb19yZXNvdXJjZXMpOyBpKyspCisJCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgcGNpdF9pb19yZXNvdXJjZXMgKyBpKTsKKworCS8qIHJlcXVlc3QgbWVtIHNwYWNlIGZvciBwY2ltdC1zcGVjaWZpYyBkZXZpY2VzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGNpdF9tZW1fcmVzb3VyY2VzKTsgaSsrKQorCQlyZXF1ZXN0X3Jlc291cmNlKCZzbmlfbWVtX3Jlc291cmNlLCBwY2l0X21lbV9yZXNvdXJjZXMgKyBpKTsKKworCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSBzbmlfaW9fcmVzb3VyY2UuZW5kOworfQorCisKK2V4dGVybiBzdHJ1Y3QgcGNpX29wcyBzbmlfcGNpdF9vcHM7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgc25pX3BjaXRfY29udHJvbGxlciA9IHsKKwkucGNpX29wcwk9ICZzbmlfcGNpdF9vcHMsCisJLm1lbV9yZXNvdXJjZQk9ICZzbmlfbWVtX3Jlc291cmNlLAorCS5tZW1fb2Zmc2V0CT0gMHgxMDAwMDAwMFVMLAorCS5pb19yZXNvdXJjZQk9ICZzbmlfaW9fcmVzb3VyY2UsCisJLmlvX29mZnNldAk9IDB4MDAwMDAwMDBVTAorfTsKKworc3RhdGljIHZvaWQgZW5hYmxlX3BjaXRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIG1hc2sgPSAxIDw8IChpcnEgLSBTTklfUENJVF9JTlRfU1RBUlQgKyAyNCk7CisKKwkqKHZvbGF0aWxlIHUzMiAqKVNOSV9QQ0lUX0lOVF9SRUcgfD0gbWFzazsKK30KKwordm9pZCBkaXNhYmxlX3BjaXRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIG1hc2sgPSAxIDw8IChpcnEgLSBTTklfUENJVF9JTlRfU1RBUlQgKyAyNCk7CisKKwkqKHZvbGF0aWxlIHUzMiAqKVNOSV9QQ0lUX0lOVF9SRUcgJj0gfm1hc2s7Cit9CisKK3ZvaWQgZW5kX3BjaXRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEfElSUV9JTlBST0dSRVNTKSkpCisJCWVuYWJsZV9wY2l0X2lycShpcnEpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBjaXRfaXJxX3R5cGUgPSB7CisJLnR5cGVuYW1lID0gIlBDSVQiLAorCS5hY2sgPSBkaXNhYmxlX3BjaXRfaXJxLAorCS5tYXNrID0gZGlzYWJsZV9wY2l0X2lycSwKKwkubWFza19hY2sgPSBkaXNhYmxlX3BjaXRfaXJxLAorCS51bm1hc2sgPSBlbmFibGVfcGNpdF9pcnEsCisJLmVuZCA9IGVuZF9wY2l0X2lycSwKK307CisKK3N0YXRpYyB2b2lkIHBjaXRfaHdpbnQxKHZvaWQpCit7CisJdTMyIHBlbmRpbmcgPSAqKHZvbGF0aWxlIHUzMiAqKVNOSV9QQ0lUX0lOVF9SRUc7CisJaW50IGlycTsKKworCWNsZWFyX2MwX3N0YXR1cyhJRV9JUlExKTsKKwlpcnEgPSBmZnMoKHBlbmRpbmcgPj4gMTYpICYgMHg3Zik7CisKKwlpZiAobGlrZWx5KGlycSA+IDApKQorCQlkb19JUlEgKGlycSArIFNOSV9QQ0lUX0lOVF9TVEFSVCAtIDEpOworCXNldF9jMF9zdGF0dXMgKElFX0lSUTEpOworfQorCitzdGF0aWMgdm9pZCBwY2l0X2h3aW50MCh2b2lkKQoreworCXUzMiBwZW5kaW5nID0gKih2b2xhdGlsZSB1MzIgKilTTklfUENJVF9JTlRfUkVHOworCWludCBpcnE7CisKKwljbGVhcl9jMF9zdGF0dXMoSUVfSVJRMCk7CisJaXJxID0gZmZzKChwZW5kaW5nID4+IDE2KSAmIDB4N2YpOworCisJaWYgKGxpa2VseShpcnEgPiAwKSkKKwkJZG9fSVJRIChpcnEgKyBTTklfUENJVF9JTlRfU1RBUlQgLSAxKTsKKwlzZXRfYzBfc3RhdHVzIChJRV9JUlEwKTsKK30KKworc3RhdGljIHZvaWQgc25pX3BjaXRfaHdpbnQodm9pZCkKK3sKKwl1MzIgcGVuZGluZyA9IChyZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpKTsKKworCWlmIChwZW5kaW5nICYgQ19JUlExKQorCQlwY2l0X2h3aW50MSgpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDX0lSUTIpCisJCWRvX0lSUSAoU05JX01JUFNfSVJRX0NQVV9CQVNFICsgNCk7CisJZWxzZSBpZiAocGVuZGluZyAmIENfSVJRMykKKwkJZG9fSVJRIChTTklfTUlQU19JUlFfQ1BVX0JBU0UgKyA1KTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ19JUlE1KQorCQlkb19JUlEgKFNOSV9NSVBTX0lSUV9DUFVfQkFTRSArIDcpOworfQorCitzdGF0aWMgdm9pZCBzbmlfcGNpdF9od2ludF9jcGx1cyh2b2lkKQoreworCXUzMiBwZW5kaW5nID0gKHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCkpOworCisJaWYgKHBlbmRpbmcgJiBDX0lSUTApCisJCXBjaXRfaHdpbnQwKCk7CisJZWxzZSBpZiAocGVuZGluZyAmIENfSVJRMikKKwkJZG9fSVJRIChTTklfTUlQU19JUlFfQ1BVX0JBU0UgKyA0KTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ19JUlEzKQorCQlkb19JUlEgKFNOSV9NSVBTX0lSUV9DUFVfQkFTRSArIDUpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDX0lSUTUpCisJCWRvX0lSUSAoU05JX01JUFNfSVJRX0NQVV9CQVNFICsgNyk7Cit9CisKK3ZvaWQgX19pbml0IHNuaV9wY2l0X2lycV9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwltaXBzX2NwdV9pcnFfaW5pdCgpOworCWZvciAoaSA9IFNOSV9QQ0lUX0lOVF9TVEFSVDsgaSA8PSBTTklfUENJVF9JTlRfRU5EOyBpKyspCisJCXNldF9pcnFfY2hpcChpLCAmcGNpdF9pcnFfdHlwZSk7CisJKih2b2xhdGlsZSB1MzIgKilTTklfUENJVF9JTlRfUkVHID0gMDsKKwlzbmlfaHdpbnQgPSBzbmlfcGNpdF9od2ludDsKKwljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMSk7CisJc2V0dXBfaXJxIChTTklfUENJVF9JTlRfU1RBUlQgKyA2LCAmc25pX2lzYV9pcnEpOworfQorCit2b2lkIF9faW5pdCBzbmlfcGNpdF9jcGx1c19pcnFfaW5pdCh2b2lkKQoreworCWludCBpOworCisJbWlwc19jcHVfaXJxX2luaXQoKTsKKwlmb3IgKGkgPSBTTklfUENJVF9JTlRfU1RBUlQ7IGkgPD0gU05JX1BDSVRfSU5UX0VORDsgaSsrKQorCQlzZXRfaXJxX2NoaXAoaSwgJnBjaXRfaXJxX3R5cGUpOworCSoodm9sYXRpbGUgdTMyICopU05JX1BDSVRfSU5UX1JFRyA9IDA7CisJc25pX2h3aW50ID0gc25pX3BjaXRfaHdpbnRfY3BsdXM7CisJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTApOworCXNldHVwX2lycSAoU05JX1BDSVRfSU5UX1NUQVJUICsgNiwgJnNuaV9pc2FfaXJxKTsKK30KKwordm9pZCBzbmlfcGNpdF9pbml0KHZvaWQpCit7CisJc25pX3BjaXRfcmVzb3VyY2VfaW5pdCgpOworCXJ0Y19taXBzX2dldF90aW1lID0gbWMxNDY4MThfZ2V0X2Ntb3NfdGltZTsKKwlydGNfbWlwc19zZXRfdGltZSA9IG1jMTQ2ODE4X3NldF9ydGNfbW1zczsKKwlib2FyZF90aW1lX2luaXQgPSBzbmlfY3B1X3RpbWVfaW5pdDsKKyNpZmRlZiBDT05GSUdfUENJCisJcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJnNuaV9wY2l0X2NvbnRyb2xsZXIpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNuaXJtX3BjaXRfc2V0dXBfZGV2aW5pdCh2b2lkKQoreworCXN3aXRjaCAoc25pX2JyZF90eXBlKSB7CisJY2FzZSBTTklfQlJEX1BDSV9UT1dFUjoKKwkgICAgICAgIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNpdF9zZXJpYWw4MjUwX2RldmljZSk7CisJICAgICAgICBicmVhazsKKworCWNhc2UgU05JX0JSRF9QQ0lfVE9XRVJfQ1BMVVM6CisJICAgICAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjaXRfY3BsdXNfc2VyaWFsODI1MF9kZXZpY2UpOworCSAgICAgICAgYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitkZXZpY2VfaW5pdGNhbGwoc25pcm1fcGNpdF9zZXR1cF9kZXZpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvcmVzZXQuYyBiL2FyY2gvbWlwcy9zbmkvcmVzZXQuYwppbmRleCBiZTg1YmVjLi4yZWFkYThhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3Jlc2V0LmMKKysrIGIvYXJjaC9taXBzL3NuaS9yZXNldC5jCkBAIC0xMywxMiArMTMsMTEgQEAKICAqIGNvbnRyb2xsZXIgdG8gcHVsc2UgdGhlIHJlc2V0LWxpbmUgbG93LiBXZSB0cnkgdGhhdCBmb3IgYSB3aGlsZSwKICAqIGFuZCBpZiBpdCBkb2Vzbid0IHdvcmssIHdlIGRvIHNvbWUgb3RoZXIgc3R1cGlkIHRoaW5ncy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCi1rYl93YWl0KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQga2Jfd2FpdCh2b2lkKQogewogCWludCBpOwogCi0JZm9yIChpPTA7IGk8MHgxMDAwMDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCAweDEwMDAwOyBpKyspCiAJCWlmICgoaW5iX3AoMHg2NCkgJiAweDAyKSA9PSAwKQogCQkJYnJlYWs7CiB9CkBAIC0zMiw5ICszMSw5IEBACiAJICAgV2UgY2FuIGRvIHRoYXQgZWFzaWVyIC4uLiAgKi8KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWZvciAoOzspIHsKLQkJZm9yIChpPTA7IGk8MTAwOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CiAJCQlrYl93YWl0KCk7Ci0JCQlmb3IoaiA9IDA7IGogPCAxMDAwMDAgOyBqKyspCisJCQlmb3IgKGogPSAwOyBqIDwgMTAwMDAwIDsgaisrKQogCQkJCS8qIG5vdGhpbmcgKi87CiAJCQlvdXRiX3AoMHhmZSwweDY0KTsJIC8qIHB1bHNlIHJlc2V0IGxvdyAqLwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3JtMjAwLmMgYi9hcmNoL21pcHMvc25pL3JtMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE3ZGM2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9zbmkvcm0yMDAuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIFJNMjAwIHNwZWNpZmljIGNvZGUKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhvbWFzIEJvZ2VuZG9lcmZlciAodHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZSkKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisKKyNpbmNsdWRlIDxhc20vc25pLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vZHMxMjE2Lmg+CisjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KKworI2RlZmluZSBQT1JUKF9iYXNlLF9pcnEpCQkJCVwKKwl7CQkJCQkJXAorCQkuaW9iYXNlCQk9IF9iYXNlLAkJXAorCQkuaXJxCQk9IF9pcnEsCQkJXAorCQkudWFydGNsawk9IDE4NDMyMDAsCQlcCisJCS5pb3R5cGUJCT0gVVBJT19QT1JULAkJXAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgcm0yMDBfZGF0YVtdID0geworCVBPUlQoMHgzZjgsIDQpLAorCVBPUlQoMHgyZjgsIDMpLAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJtMjAwX3NlcmlhbDgyNTBfZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHJtMjAwX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc25pcm1fODI1OTZfcm0yMDBfcnNyY1tdID0geworCXsKKwkJLnN0YXJ0ID0gMHhiODAwMDAwMCwKKwkJLmVuZCAgID0gMHhiODBmZmZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KKwl9LAorCXsKKwkJLnN0YXJ0ID0gMHhiYjAwMDAwMCwKKwkJLmVuZCAgID0gMHhiYjAwMDAwNCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KKwl9LAorCXsKKwkJLnN0YXJ0ID0gMHhiZmYwMDAwMCwKKwkJLmVuZCAgID0gMHhiZmYwMDAyMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KKwl9LAorCXsKKwkJLnN0YXJ0ID0gMjcsCisJCS5lbmQgICA9IDI3LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQorCX0sCisJeworCQkuZmxhZ3MgPSAweDAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc25pcm1fODI1OTZfcm0yMDBfcGRldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic25pcm1fODI1OTYiLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc25pcm1fODI1OTZfcm0yMDBfcnNyYyksCisJLnJlc291cmNlICAgICAgID0gc25pcm1fODI1OTZfcm0yMDBfcnNyYworfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbmlybV81M2M3MTBfcm0yMDBfcnNyY1tdID0geworCXsKKwkJLnN0YXJ0ID0gMHhiOTAwMDAwMCwKKwkJLmVuZCAgID0gMHhiOTBmZmZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KKwl9LAorCXsKKwkJLnN0YXJ0ID0gMjYsCisJCS5lbmQgICA9IDI2LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNuaXJtXzUzYzcxMF9ybTIwMF9wZGV2ID0geworCS5uYW1lICAgICAgICAgICA9ICJzbmlybV81M2M3MTAiLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc25pcm1fNTNjNzEwX3JtMjAwX3JzcmMpLAorCS5yZXNvdXJjZSAgICAgICA9IHNuaXJtXzUzYzcxMF9ybTIwMF9yc3JjCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbmlybV9zZXR1cF9kZXZpbml0KHZvaWQpCit7CisJaWYgKHNuaV9icmRfdHlwZSA9PSBTTklfQlJEX1JNMjAwKSB7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmcm0yMDBfc2VyaWFsODI1MF9kZXZpY2UpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNuaXJtXzgyNTk2X3JtMjAwX3BkZXYpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNuaXJtXzUzYzcxMF9ybTIwMF9wZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2RldmljZV9pbml0Y2FsbChzbmlybV9zZXR1cF9kZXZpbml0KTsKKworCisjZGVmaW5lIFNOSV9STTIwMF9JTlRfU1RBVF9SRUcgIDB4YmMwMDAwMDAKKyNkZWZpbmUgU05JX1JNMjAwX0lOVF9FTkFfUkVHICAgMHhiYzA4MDAwMAorCisjZGVmaW5lIFNOSV9STTIwMF9JTlRfU1RBUlQgIDI0CisjZGVmaW5lIFNOSV9STTIwMF9JTlRfRU5EICAgIDI4CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9ybTIwMF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDEgPDwgKGlycSAtIFNOSV9STTIwMF9JTlRfU1RBUlQpOworCisJKih2b2xhdGlsZSB1OCAqKVNOSV9STTIwMF9JTlRfRU5BX1JFRyAmPSB+bWFzazsKK30KKwordm9pZCBkaXNhYmxlX3JtMjAwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCAoaXJxIC0gU05JX1JNMjAwX0lOVF9TVEFSVCk7CisKKwkqKHZvbGF0aWxlIHU4ICopU05JX1JNMjAwX0lOVF9FTkFfUkVHIHw9IG1hc2s7Cit9CisKK3ZvaWQgZW5kX3JtMjAwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpKQorCQllbmFibGVfcm0yMDBfaXJxKGlycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcm0yMDBfaXJxX3R5cGUgPSB7CisJLnR5cGVuYW1lID0gIlJNMjAwIiwKKwkuYWNrID0gZGlzYWJsZV9ybTIwMF9pcnEsCisJLm1hc2sgPSBkaXNhYmxlX3JtMjAwX2lycSwKKwkubWFza19hY2sgPSBkaXNhYmxlX3JtMjAwX2lycSwKKwkudW5tYXNrID0gZW5hYmxlX3JtMjAwX2lycSwKKwkuZW5kID0gZW5kX3JtMjAwX2lycSwKK307CisKK3N0YXRpYyB2b2lkIHNuaV9ybTIwMF9od2ludCh2b2lkKQoreworCXUzMiBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKKwl1OCBtYXNrOworCXU4IHN0YXQ7CisJaW50IGlycTsKKworCWlmIChwZW5kaW5nICYgQ19JUlE1KQorCQlkb19JUlEgKFNOSV9NSVBTX0lSUV9DUFVfQkFTRSArIDcpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBDX0lSUTApIHsKKwkJY2xlYXJfYzBfc3RhdHVzIChJRV9JUlEwKTsKKwkJbWFzayA9ICoodm9sYXRpbGUgdTggKilTTklfUk0yMDBfSU5UX0VOQV9SRUcgXiAweDFmOworCQlzdGF0ID0gKih2b2xhdGlsZSB1OCAqKVNOSV9STTIwMF9JTlRfU1RBVF9SRUcgXiAweDE0OworCQlpcnEgPSBmZnMoc3RhdCAmIG1hc2sgJiAweDFmKTsKKworCQlpZiAobGlrZWx5KGlycSA+IDApKQorCQkJZG9fSVJRIChpcnEgKyBTTklfUk0yMDBfSU5UX1NUQVJUIC0gMSk7CisJCXNldF9jMF9zdGF0dXMgKElFX0lSUTApOworCX0KK30KKwordm9pZCBfX2luaXQgc25pX3JtMjAwX2lycV9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwkqICh2b2xhdGlsZSB1OCAqKVNOSV9STTIwMF9JTlRfRU5BX1JFRyA9IDB4MWY7CisKKwltaXBzX2NwdV9pcnFfaW5pdCgpOworCS8qIEFjdHVhbGx5IHdlJ3ZlIGdvdCBtb3JlIGludGVycnVwdHMgdG8gaGFuZGxlIC4uLiAgKi8KKwlmb3IgKGkgPSBTTklfUk0yMDBfSU5UX1NUQVJUOyBpIDw9IFNOSV9STTIwMF9JTlRfRU5EOyBpKyspCisJCXNldF9pcnFfY2hpcChpLCAmcm0yMDBfaXJxX3R5cGUpOworCXNuaV9od2ludCA9IHNuaV9ybTIwMF9od2ludDsKKwljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMCk7CisJc2V0dXBfaXJxIChTTklfUk0yMDBfSU5UX1NUQVJUICsgMCwgJnNuaV9pc2FfaXJxKTsKK30KKwordm9pZCBzbmlfcm0yMDBfaW5pdCh2b2lkKQoreworCXNldF9pb19wb3J0X2Jhc2UoU05JX1BPUlRfQkFTRSArIDB4MDIwMDAwMDApOworCWlvcG9ydF9yZXNvdXJjZS5lbmQgKz0gMHgwMjAwMDAwMDsKKwlkczEyMTZfYmFzZSA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIFNOSV9EUzEyMTZfUk0yMDBfQkFTRTsKKwlydGNfbWlwc19nZXRfdGltZSA9IGRzMTIxNl9nZXRfY21vc190aW1lOworCWJvYXJkX3RpbWVfaW5pdCA9IHNuaV9jcHVfdGltZV9pbml0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9zZXR1cC5jIGIvYXJjaC9taXBzL3NuaS9zZXR1cC5jCmluZGV4IGFmZWI3ZjEuLjY4ZDdjZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvc2V0dXAuYworKysgYi9hcmNoL21pcHMvc25pL3NldHVwLmMKQEAgLTYsMTYgKzYsMTAgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk2LCA5NywgOTgsIDIwMDAsIDAzLCAwNCwgMDYgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBCb2dlbmRvZXJmZXIgKHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGUpCiAgKi8KICNpbmNsdWRlIDxsaW51eC9laXNhLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KQEAgLTI1LDUyICsxOSwxNiBAQAogI2luY2x1ZGUgPGFzbS9zZ2lhbGliLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGFzbS9iY2FjaGUuaD4KLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21jMTQ2ODE4LXRpbWUuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9zbmkuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCit1bnNpZ25lZCBpbnQgc25pX2JyZF90eXBlOwogCiBleHRlcm4gdm9pZCBzbmlfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpOwogZXh0ZXJuIHZvaWQgc25pX21hY2hpbmVfaGFsdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNuaV9tYWNoaW5lX3Bvd2VyX29mZih2b2lkKTsKIAotdm9pZCBfX2luaXQgcGxhdF90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCi17Ci0JLyogc2V0IHRoZSBjbG9jayB0byAxMDAgSHogKi8KLQlvdXRiX3AoMHgzNCwweDQzKTsJCS8qIGJpbmFyeSwgbW9kZSAyLCBMU0IvTVNCLCBjaCAwICovCi0Jb3V0Yl9wKExBVENIICYgMHhmZiAsIDB4NDApOwkvKiBMU0IgKi8KLQlvdXRiKExBVENIID4+IDggLCAweDQwKTsJLyogTVNCICovCi0Jc2V0dXBfaXJxKDAsIGlycSk7Ci19Ci0KLS8qCi0gKiBBIGJpdCBtb3JlIGdvc3NpcCBhYm91dCB0aGUgaXJvbiB3ZSdyZSBydW5uaW5nIG9uIC4uLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc25pX3BjaW10X2RldGVjdCh2b2lkKQotewotCWNoYXIgYm9hcmR0eXBlWzgwXTsKLQl1bnNpZ25lZCBjaGFyIGNzbXNyOwotCWNoYXIgKnAgPSBib2FyZHR5cGU7Ci0JdW5zaWduZWQgaW50IGFzaWM7Ci0KLQljc21zciA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBDSU1UX0NTTVNSOwotCi0JcCArPSBzcHJpbnRmKHAsICIlcyBQQ0kiLCAoY3Ntc3IgJiAweDgwKSA/ICJSTTIwMCIgOiAiUk0zMDAiKTsKLQlpZiAoKGNzbXNyICYgMHg4MCkgPT0gMCkKLQkJcCArPSBzcHJpbnRmKHAsICIsIGJvYXJkIHJldmlzaW9uICVzIiwKLQkJICAgICAgICAgICAgIChjc21zciAmIDB4MjApID8gIkQiIDogIkMiKTsKLQlhc2ljID0gY3Ntc3IgJiAweDgwOwotCWFzaWMgPSAoY3Ntc3IgJiAweDA4KSA/IGFzaWMgOiAhYXNpYzsKLQlwICs9IHNwcmludGYocCwgIiwgQVNJQyBQQ0kgUmV2ICVzIiwgYXNpYyA/ICIxLjAiIDogIjEuMSIpOwotCXByaW50aygiJXMuXG4iLCBib2FyZHR5cGUpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgc25pX2Rpc3BsYXlfc2V0dXAodm9pZCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19WVCkgJiYgZGVmaW5lZChDT05GSUdfVkdBX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX0FSQykKQEAgLTkwLDE3NSArNDgsMTEgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNuaV9pb19yZXNvdXJjZSA9IHsKLQkuc3RhcnQJPSAweDAwMDAxMDAwVUwsCi0JLmVuZAk9IDB4MDNiZmZmZmZVTCwKLQkubmFtZQk9ICJQQ0lNVCBJTyBNRU0iLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaW10X2lvX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gMHgwMCwKLQkJLmVuZAk9IDB4MWYsCi0JCS5uYW1lCT0gImRtYTEiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKLQl9LCB7Ci0JCS5zdGFydAk9ICAweDQwLAotCQkuZW5kCT0gMHg1ZiwKLQkJLm5hbWUJPSAidGltZXIiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKLQl9LCB7Ci0JCS5zdGFydAk9ICAweDYwLAotCQkuZW5kCT0gMHg2ZiwKLQkJLm5hbWUJPSAia2V5Ym9hcmQiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKLQl9LCB7Ci0JCS5zdGFydAk9ICAweDgwLAotCQkuZW5kCT0gMHg4ZiwKLQkJLm5hbWUJPSAiZG1hIHBhZ2UgcmVnIiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCi0JfSwgewotCQkuc3RhcnQJPSAgMHhjMCwKLQkJLmVuZAk9IDB4ZGYsCi0JCS5uYW1lCT0gImRtYTIiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKLQl9LCB7Ci0JCS5zdGFydAk9ICAweGNmYywKLQkJLmVuZAk9IDB4Y2ZmLAotCQkubmFtZQk9ICJQQ0kgY29uZmlnIGRhdGEiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNuaV9tZW1fcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gMHgxMDAwMDAwMFVMLAotCS5lbmQJPSAweGZmZmZmZmZmVUwsCi0JLm5hbWUJPSAiUENJTVQgUENJIE1FTSIsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLX07Ci0KLS8qCi0gKiBUaGUgUk0yMDAvUk0zMDAgaGFzIGEgZmV3IGhvbGVzIGluIGl0J3MgUENJL0VJU0EgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgdXNlZAotICogZm9yIG90aGVyIHB1cnBvc2VzLiAgQmUgcGFyYW5vaWQgYW5kIGFsbG9jYXRlIGFsbCBvZiB0aGUgYmVmb3JlIHRoZSBQQ0kKLSAqIGNvZGUgZ2V0cyBhIGNoYW5jZSB0byB0byBtYXAgYW55dGhpbmcgZWxzZSB0aGVyZSAuLi4KLSAqCi0gKiBUaGlzIGxlYXZlcyB0aGUgZm9sbG93aW5nIGFyZWFzIGF2YWlsYWJsZToKLSAqCi0gKiAweDEwMDAwMDAwIC0gMHgxMDA5ZmZmZiAoNjQwa0IpIFBDSS9FSVNBL0lTQSBCdXMgTWVtb3J5Ci0gKiAweDEwMTAwMDAwIC0gMHgxM2ZmZmZmZiAoIDE1TUIpIFBDSS9FSVNBL0lTQSBCdXMgTWVtb3J5Ci0gKiAweDE4MDAwMDAwIC0gMHgxZmJmZmZmZiAoMTI0TUIpIFBDSS9FSVNBIEJ1cyBNZW1vcnkKLSAqIDB4MWZmMDgwMDAgLSAweDFmZmVmZmZmICg4MTZrQikgUENJL0VJU0EgQnVzIE1lbW9yeQotICogMHhhMDAwMDAwMCAtIDB4ZmZmZmZmZmYgKDEuNUdCKSBQQ0kvRUlTQSBCdXMgTWVtb3J5Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpbXRfbWVtX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gMHgxMDBhMDAwMCwKLQkJLmVuZAk9IDB4MTAwYmZmZmYsCi0JCS5uYW1lCT0gIlZpZGVvIFJBTSBhcmVhIiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCi0JfSwgewotCQkuc3RhcnQJPSAweDEwMGMwMDAwLAotCQkuZW5kCT0gMHgxMDBmZmZmZiwKLQkJLm5hbWUJPSAiSVNBIFJlc2VydmVkIiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCi0JfSwgewotCQkuc3RhcnQJPSAweDE0MDAwMDAwLAotCQkuZW5kCT0gMHgxN2JmZmZmZiwKLQkJLm5hbWUJPSAiUENJIElPIiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCi0JfSwgewotCQkuc3RhcnQJPSAweDE3YzAwMDAwLAotCQkuZW5kCT0gMHgxN2ZmZmZmZiwKLQkJLm5hbWUJPSAiQ2FjaGUgUmVwbGFjZW1lbnQgQXJlYSIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQotCX0sIHsKLQkJLnN0YXJ0CT0gMHgxYTAwMDAwMCwKLQkJLmVuZAk9IDB4MWEwMDAwMDMsCi0JCS5uYW1lCT0gIlBDSSBJTlQgQWNrbm93bGVkZ2UiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKLQl9LCB7Ci0JCS5zdGFydAk9IDB4MWZjMDAwMDAsCi0JCS5lbmQJPSAweDFmYzdmZmZmLAotCQkubmFtZQk9ICJCb290IFBST00iLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKLQl9LCB7Ci0JCS5zdGFydAk9IDB4MWZjODAwMDAsCi0JCS5lbmQJPSAweDFmY2ZmZmZmLAotCQkubmFtZQk9ICJEaWFnIFBST00iLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKLQl9LCB7Ci0JCS5zdGFydAk9IDB4MWZkMDAwMDAsCi0JCS5lbmQJPSAweDFmZGZmZmZmLAotCQkubmFtZQk9ICJYLUJ1cyIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQotCX0sIHsKLQkJLnN0YXJ0CT0gMHgxZmUwMDAwMCwKLQkJLmVuZAk9IDB4MWZlZmZmZmYsCi0JCS5uYW1lCT0gIkJJT1MgbWFwIiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCi0JfSwgewotCQkuc3RhcnQJPSAweDFmZjAwMDAwLAotCQkuZW5kCT0gMHgxZmY3ZmZmZiwKLQkJLm5hbWUJPSAiTlZSQU0gLyBFRVBST00iLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKLQl9LCB7Ci0JCS5zdGFydAk9IDB4MWZmZjAwMDAsCi0JCS5lbmQJPSAweDFmZmZlZmZmLAotCQkubmFtZQk9ICJBU0lDIFBDSSIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQotCX0sIHsKLQkJLnN0YXJ0CT0gMHgxZmZmZjAwMCwKLQkJLmVuZAk9IDB4MWZmZmZmZmYsCi0JCS5uYW1lCT0gIk1QIEFnZW50IiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCi0JfSwgewotCQkuc3RhcnQJPSAweDIwMDAwMDAwLAotCQkuZW5kCT0gMHg5ZmZmZmZmZiwKLQkJLm5hbWUJPSAiTWFpbiBNZW1vcnkiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKLQl9Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgc25pX3Jlc291cmNlX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIHJlcXVlc3QgSS9PIHNwYWNlIGZvciBkZXZpY2VzIHVzZWQgb24gYWxsIGlbMzQ1XTg2IFBDcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaW10X2lvX3Jlc291cmNlcyk7IGkrKykKLQkJcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCBwY2ltdF9pb19yZXNvdXJjZXMgKyBpKTsKLQotCS8qIHJlcXVlc3QgbWVtIHNwYWNlIGZvciBwY2ltdC1zcGVjaWZpYyBkZXZpY2VzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGNpbXRfbWVtX3Jlc291cmNlcyk7IGkrKykKLQkJcmVxdWVzdF9yZXNvdXJjZSgmc25pX21lbV9yZXNvdXJjZSwgcGNpbXRfbWVtX3Jlc291cmNlcyArIGkpOwotCi0JaW9wb3J0X3Jlc291cmNlLmVuZCA9IHNuaV9pb19yZXNvdXJjZS5lbmQ7Ci19Ci0KLWV4dGVybiBzdHJ1Y3QgcGNpX29wcyBzbmlfcGNpX29wczsKLQotc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBzbmlfY29udHJvbGxlciA9IHsKLQkucGNpX29wcwk9ICZzbmlfcGNpX29wcywKLQkubWVtX3Jlc291cmNlCT0gJnNuaV9tZW1fcmVzb3VyY2UsCi0JLm1lbV9vZmZzZXQJPSAweDEwMDAwMDAwVUwsCi0JLmlvX3Jlc291cmNlCT0gJnNuaV9pb19yZXNvdXJjZSwKLQkuaW9fb2Zmc2V0CT0gMHgwMDAwMDAwMFVMCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc25pX3BjaW10X3RpbWVfaW5pdCh2b2lkKQotewotCXJ0Y19taXBzX2dldF90aW1lID0gbWMxNDY4MThfZ2V0X2Ntb3NfdGltZTsKLQlydGNfbWlwc19zZXRfdGltZSA9IG1jMTQ2ODE4X3NldF9ydGNfbW1zczsKLX0KIAogdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKLQlzbmlfcGNpbXRfZGV0ZWN0KCk7Ci0Jc25pX3BjaW10X3NjX2luaXQoKTsKLQlzbmlfcGNpbXRfdGltZV9pbml0KCk7Ci0KIAlzZXRfaW9fcG9ydF9iYXNlKFNOSV9QT1JUX0JBU0UpOwotCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSBzbmlfaW9fcmVzb3VyY2UuZW5kOworLy8JaW9wb3J0X3Jlc291cmNlLmVuZCA9IHNuaV9pb19yZXNvdXJjZS5lbmQ7CiAKIAkvKgogCSAqIFNldHVwIChFKUlTQSBJL08gbWVtb3J5IGFjY2VzcyBzdHVmZgpAQCAtMjY4LDE1ICs2MiwzMyBAQAogCUVJU0FfYnVzID0gMTsKICNlbmRpZgogCi0Jc25pX3Jlc291cmNlX2luaXQoKTsKKwlzd2l0Y2ggKHNuaV9icmRfdHlwZSkgeworCWNhc2UgU05JX0JSRF8xMDoKKwljYXNlIFNOSV9CUkRfMTBORVc6CisJY2FzZSBTTklfQlJEX1RPV0VSX09BU0lDOgorCWNhc2UgU05JX0JSRF9NSU5JVE9XRVI6CisJICAgICAgICBzbmlfYTIwcl9pbml0KCk7CisJICAgICAgICBicmVhazsKKworCWNhc2UgU05JX0JSRF9QQ0lfVE9XRVI6CisJY2FzZSBTTklfQlJEX1BDSV9UT1dFUl9DUExVUzoKKwkgICAgICAgIHNuaV9wY2l0X2luaXQoKTsKKwkJYnJlYWs7CisKKwljYXNlIFNOSV9CUkRfUk0yMDA6CisJICAgICAgICBzbmlfcm0yMDBfaW5pdCgpOworCSAgICAgICAgYnJlYWs7CisKKwljYXNlIFNOSV9CUkRfUENJX01UT1dFUjoKKwljYXNlIFNOSV9CUkRfUENJX0RFU0tUT1A6CisJY2FzZSBTTklfQlJEX1BDSV9NVE9XRVJfQ1BMVVM6CisJICAgICAgICBzbmlfcGNpbXRfaW5pdCgpOworCSAgICAgICAgYnJlYWs7CisJfQogCiAJX21hY2hpbmVfcmVzdGFydCA9IHNuaV9tYWNoaW5lX3Jlc3RhcnQ7CiAJX21hY2hpbmVfaGFsdCA9IHNuaV9tYWNoaW5lX2hhbHQ7CiAJcG1fcG93ZXJfb2ZmID0gc25pX21hY2hpbmVfcG93ZXJfb2ZmOwogCiAJc25pX2Rpc3BsYXlfc2V0dXAoKTsKLQotI2lmZGVmIENPTkZJR19QQ0kKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmc25pX2NvbnRyb2xsZXIpOwotI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3NuaXByb20uYyBiL2FyY2gvbWlwcy9zbmkvc25pcHJvbS5jCmluZGV4IDEyMTNkMTYuLjZhNDRiYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvc25pcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9zbmkvc25pcHJvbS5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vc25pLmg+CkBAIC0zMSw3ICszMiw3IEBACiAjZGVmaW5lIFBST01fRU5UUlkoeCkJCShQUk9NX1ZFQyArICh4KSkKIAogCi0jdW5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcKICNpZmRlZiBERUJVRwogI2RlZmluZSBEQkdfUFJJTlRGKHguLi4pICAgICBwcm9tX3ByaW50Zih4KQogI2Vsc2UKQEAgLTkzLDE0ICs5NCwxNCBAQAogewogCWludAlpOwogCi0JcHJvbV9wcmludGYoIlNOSSBJRFByb20gZHVtcCAoZmlyc3QgMTI4Ynl0ZSk6XG4iKTsKLQlmb3IoaT0wO2k8MTI4O2krKykgeworCXByb21fcHJpbnRmKCJTTkkgSURQcm9tIGR1bXA6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJaWYgKGklMTYgPT0gMCkKIAkJCXByb21fcHJpbnRmKCIlMDR4ICIsIGkpOwogCi0JCXByb21fcHJpbnRmKCIlMDJ4ICIsICoodW5zaWduZWQgY2hhciAqKSAoU05JX0lEUFJPTV9CQVNFK2kpKTsKKwkJcHJvbV9wcmludGYoIiUwMnggIiwgKih1bnNpZ25lZCBjaGFyICopIChTTklfSURQUk9NX0JBU0UgKyBpKSk7CiAKLQkJaWYgKGklMTYgPT0gMTUpCisJCWlmIChpICUgMTYgPT0gMTUpCiAJCQlwcm9tX3ByaW50ZigiXG4iKTsKIAl9CiB9CkBAIC0xMTgsNyArMTE5LDcgQEAKIAl9IG1lbWNvbmZbOF07CiAKIAkvKiBNZW1TSVpFIGZyb20gcHJvbSBpbiAxNk1CeXRlIGNodW5rcyAqLwotCW1lbXNpemU9KigodW5zaWduZWQgY2hhciAqKSBTTklfSURQUk9NX01FTVNJWkUpICogMTY7CisJbWVtc2l6ZSA9ICooKHVuc2lnbmVkIGNoYXIgKikgU05JX0lEUFJPTV9NRU1TSVpFKSAqIDE2OwogCiAJREJHX1BSSU5URigiSURQcm9tIG1lbXNpemU6ICVsdSBNQnl0ZVxuIiwgbWVtc2l6ZSk7CiAKQEAgLTEyNiwyNiArMTI3LDEzNCBAQAogCV9fcHJvbV9nZXRfbWVtY29uZigmbWVtY29uZik7CiAKIAlEQkdfUFJJTlRGKCJwcm9tX2dldF9tZW1fY29uZiBtZW1vcnkgY29uZmlndXJhdGlvbjpcbiIpOwotCWZvcihpPTA7aTw4ICYmIG1lbWNvbmZbaV0uc2l6ZTtpKyspIHsKLQkJcHJvbV9wcmludGYoIkJhbmslZDogJTA4eCBAICUwOHhcbiIsIGksCisJZm9yIChpID0gMDtpIDwgOCAmJiBtZW1jb25mW2ldLnNpemU7IGkrKykgeworCQlpZiAoc25pX2JyZF90eXBlID09IFNOSV9CUkRfUENJX1RPV0VSIHx8CisJCSAgICBzbmlfYnJkX3R5cGUgPT0gU05JX0JSRF9QQ0lfVE9XRVJfQ1BMVVMpIHsKKwkJCWlmIChtZW1jb25mW2ldLmJhc2UgPj0gMHgyMDAwMDAwMCAmJgorCQkJICAgIG1lbWNvbmZbaV0uYmFzZSA8ICAweDMwMDAwMDAwKSB7CisJCQkJbWVtY29uZltpXS5iYXNlIC09IDB4MjAwMDAwMDA7CisJCQl9CisJfQorCQlEQkdfUFJJTlRGKCJCYW5rJWQ6ICUwOHggQCAlMDh4XG4iLCBpLAogCQkJbWVtY29uZltpXS5zaXplLCBtZW1jb25mW2ldLmJhc2UpOwogCQlhZGRfbWVtb3J5X3JlZ2lvbihtZW1jb25mW2ldLmJhc2UsIG1lbWNvbmZbaV0uc2l6ZSwgQk9PVF9NRU1fUkFNKTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBzbmlfY29uc29sZV9zZXR1cCh2b2lkKQoreworCWNoYXIgKmN0eXBlOworCWNoYXIgKmNkZXY7CisJY2hhciAqYmF1ZDsKKwlpbnQgcG9ydDsKKwlzdGF0aWMgY2hhciBvcHRpb25zWzhdOworCisJY2RldiA9IHByb21fZ2V0ZW52ICgiY29uc29sZV9kZXYiKTsKKwlpZiAoc3RybmNtcCAoY2RldiwgInR0eSIsIDMpID09IDApIHsKKwkJY3R5cGUgPSBwcm9tX2dldGVudiAoImNvbnNvbGUiKTsKKwkJc3dpdGNoICgqY3R5cGUpIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSAnbCc6CisJICAgICAgICAgICAgICAgIHBvcnQgPSAwOworCSAgICAgICAgICAgICAgICBiYXVkID0gcHJvbV9nZXRlbnYoImxiYXVkIik7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCQljYXNlICdyJzoKKwkgICAgICAgICAgICAgICAgcG9ydCA9IDE7CisJICAgICAgICAgICAgICAgIGJhdWQgPSBwcm9tX2dldGVudigicmJhdWQiKTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJCX0KKwkJaWYgKGJhdWQpCisJCQlzdHJjcHkob3B0aW9ucywgYmF1ZCk7CisJCWFkZF9wcmVmZXJyZWRfY29uc29sZSgidHR5UyIsIHBvcnQsIGJhdWQgPyBvcHRpb25zIDogTlVMTCk7CisJfQorfQorCiB2b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZCkKIHsKIAlpbnQgYXJnYyA9IGZ3X2FyZzA7CiAJY2hhciAqKmFyZ3YgPSAodm9pZCAqKWZ3X2FyZzE7Ci0JdW5zaWduZWQgaW50IHNuaV9icmRfdHlwZSA9ICoodW5zaWduZWQgY2hhciAqKSBTTklfSURQUk9NX0JSRFRZUEU7CiAJaW50IGk7CisJaW50IGNwdXR5cGU7CiAKLQlEQkdfUFJJTlRGKCJGb3VuZCBTTkkgYnJkdHlwZSAlMDJ4XG4iLCBzbmlfYnJkX3R5cGUpOworCXNuaV9icmRfdHlwZSA9ICoodW5zaWduZWQgY2hhciAqKVNOSV9JRFBST01fQlJEVFlQRTsKKwljcHV0eXBlID0gKih1bnNpZ25lZCBjaGFyICopU05JX0lEUFJPTV9DUFVUWVBFOworCXN3aXRjaCAoc25pX2JyZF90eXBlKSB7CisJY2FzZSBTTklfQlJEX1RPV0VSX09BU0lDOgorCSAgICAgICAgc3dpdGNoIChjcHV0eXBlKSB7CisJCWNhc2UgU05JX0NQVV9NODAzMDoKKwkJICAgICAgICBzeXN0eXBlID0gIlJNNDAwLTMzMCI7CisJCSAgICAgICAgYnJlYWs7CisJCWNhc2UgU05JX0NQVV9NODAzMToKKwkJICAgICAgICBzeXN0eXBlID0gIlJNNDAwLTQzMCI7CisJCSAgICAgICAgYnJlYWs7CisJCWNhc2UgU05JX0NQVV9NODAzNzoKKwkJICAgICAgICBzeXN0eXBlID0gIlJNNDAwLTUzMCI7CisJCSAgICAgICAgYnJlYWs7CisJCWNhc2UgU05JX0NQVV9NODAzNDoKKwkJICAgICAgICBzeXN0eXBlID0gIlJNNDAwLTczMCI7CisJCSAgICAgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzeXN0eXBlID0gIlJNNDAwLXh4eCI7CisJCQlicmVhazsKKwkJfQorCSAgICAgICAgYnJlYWs7CisJY2FzZSBTTklfQlJEX01JTklUT1dFUjoKKwkgICAgICAgIHN3aXRjaCAoY3B1dHlwZSkgeworCQljYXNlIFNOSV9DUFVfTTgwMjE6CisJCWNhc2UgU05JX0NQVV9NODA0MzoKKwkJICAgICAgICBzeXN0eXBlID0gIlJNNDAwLTEyMCI7CisJCSAgICAgICAgYnJlYWs7CisJCWNhc2UgU05JX0NQVV9NODA0MDoKKwkJICAgICAgICBzeXN0eXBlID0gIlJNNDAwLTIyMCI7CisJCSAgICAgICAgYnJlYWs7CisJCWNhc2UgU05JX0NQVV9NODA1MzoKKwkJICAgICAgICBzeXN0eXBlID0gIlJNNDAwLTIyNSI7CisJCSAgICAgICAgYnJlYWs7CisJCWNhc2UgU05JX0NQVV9NODA1MDoKKwkJICAgICAgICBzeXN0eXBlID0gIlJNNDAwLTQyMCI7CisJCSAgICAgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzeXN0eXBlID0gIlJNNDAwLXh4eCI7CisJCQlicmVhazsKKwkJfQorCSAgICAgICAgYnJlYWs7CisJY2FzZSBTTklfQlJEX1BDSV9UT1dFUjoKKwkgICAgICAgIHN5c3R5cGUgPSAiUk00MDAtQ3h4IjsKKwkgICAgICAgIGJyZWFrOworCWNhc2UgU05JX0JSRF9STTIwMDoKKwkgICAgICAgIHN5c3R5cGUgPSAiUk0yMDAteHh4IjsKKwkgICAgICAgIGJyZWFrOworCWNhc2UgU05JX0JSRF9QQ0lfTVRPV0VSOgorCSAgICAgICAgc3lzdHlwZSA9ICJSTTMwMC1DeHgiOworCSAgICAgICAgYnJlYWs7CisJY2FzZSBTTklfQlJEX1BDSV9ERVNLVE9QOgorCSAgICAgICAgc3dpdGNoIChyZWFkX2MwX3ByaWQoKSAmIDB4ZmYwMCkgeworCQljYXNlIFBSSURfSU1QX1I0NjAwOgorCQljYXNlIFBSSURfSU1QX1I0NzAwOgorCQkgICAgICAgIHN5c3R5cGUgPSAiUk0yMDAtQzIwIjsKKwkJICAgICAgICBicmVhazsKKwkJY2FzZSBQUklEX0lNUF9SNTAwMDoKKwkJICAgICAgICBzeXN0eXBlID0gIlJNMjAwLUM0MCI7CisJCSAgICAgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICAgICAgc3lzdHlwZSA9ICJSTTIwMC1DeHgiOworCQkgICAgICAgIGJyZWFrOworCQl9CisJICAgICAgICBicmVhazsKKwljYXNlIFNOSV9CUkRfUENJX1RPV0VSX0NQTFVTOgorCSAgICAgICAgc3lzdHlwZSA9ICJSTTQwMC1FeHgiOworCSAgICAgICAgYnJlYWs7CisJY2FzZSBTTklfQlJEX1BDSV9NVE9XRVJfQ1BMVVM6CisJICAgICAgICBzeXN0eXBlID0gIlJNMzAwLUV4eCI7CisJICAgICAgICBicmVhazsKKwl9CisJREJHX1BSSU5URigiRm91bmQgU05JIGJyZHR5cGUgJTAyeCBuYW1lICVzXG4iLCBzbmlfYnJkX3R5cGUsc3lzdHlwZSk7CiAKICNpZmRlZiBERUJVRwogCXNuaV9pZHByb21fZHVtcCgpOwogI2VuZGlmCiAJc25pX21lbV9pbml0KCk7CisJc25pX2NvbnNvbGVfc2V0dXAoKTsKIAogCS8qIGNvcHkgcHJvbSBjbWRsaW5lIHBhcmFtZXRlcnMgdG8ga2VybmVsIGNtZGxpbmUgKi8KIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3RpbWUuYyBiL2FyY2gvbWlwcy9zbmkvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMDI4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvc25pL3RpbWUuYwpAQCAtMCwwICsxLDE0OCBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCisjaW5jbHVkZSA8YXNtL3NuaS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisKKyNkZWZpbmUgU05JX0NMT0NLX1RJQ0tfUkFURSAgICAgMzY4NjQwMAorI2RlZmluZSBTTklfQ09VTlRFUjJfRElWICAgICAgICA2NAorI2RlZmluZSBTTklfQ09VTlRFUjBfRElWICAgICAgICAoKFNOSV9DTE9DS19USUNLX1JBVEUgLyBTTklfQ09VTlRFUjJfRElWKSAvIEhaKQorCitzdGF0aWMgdm9pZCBzbmlfYTIwcl90aW1lcl9hY2sodm9pZCkKK3sKKyAgICAgICAgKih2b2xhdGlsZSB1OCAqKUEyMFJfUFRfVElNMF9BQ0sgPSAweDA7IHdtYigpOworfQorCisvKgorICogYTIwciBwbGF0Zm9ybSB1c2VzIDIgY291bnRlcnMgdG8gZGl2aWRlIHRoZSBpbnB1dCBmcmVxdWVuY3kuCisgKiBDb3VudGVyIDIgb3V0cHV0IGlzIGNvbm5lY3RlZCB0byBDb3VudGVyIDAgJiAxIGlucHV0LgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgc25pX2EyMHJfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQoreworICAgICAgICAqKHZvbGF0aWxlIHU4ICopKEEyMFJfUFRfQ0xPQ0tfQkFTRSArIDEyKSA9IDB4MzQ7IHdtYigpOworICAgICAgICAqKHZvbGF0aWxlIHU4ICopKEEyMFJfUFRfQ0xPQ0tfQkFTRSArICAwKSA9IChTTklfQ09VTlRFUjBfRElWKSAmIDB4ZmY7IHdtYigpOworICAgICAgICAqKHZvbGF0aWxlIHU4ICopKEEyMFJfUFRfQ0xPQ0tfQkFTRSArICAwKSA9IChTTklfQ09VTlRFUjBfRElWID4+IDgpICYgMHhmZjsgd21iKCk7CisKKyAgICAgICAgKih2b2xhdGlsZSB1OCAqKShBMjBSX1BUX0NMT0NLX0JBU0UgKyAxMikgPSAweGI0OyB3bWIoKTsKKyAgICAgICAgKih2b2xhdGlsZSB1OCAqKShBMjBSX1BUX0NMT0NLX0JBU0UgKyAgOCkgPSAoU05JX0NPVU5URVIyX0RJVikgJiAweGZmOyB3bWIoKTsKKyAgICAgICAgKih2b2xhdGlsZSB1OCAqKShBMjBSX1BUX0NMT0NLX0JBU0UgKyAgOCkgPSAoU05JX0NPVU5URVIyX0RJViA+PiA4KSAmIDB4ZmY7IHdtYigpOworCisgICAgICAgIHNldHVwX2lycShTTklfQTIwUl9JUlFfVElNRVIsIGlycSk7CisgICAgICAgIG1pcHNfdGltZXJfYWNrID0gc25pX2EyMHJfdGltZXJfYWNrOworfQorCisjZGVmaW5lIFNOSV84MjU0X1RJQ0tfUkFURSAgICAgICAgMTE5MzE4MlVMCisKKyNkZWZpbmUgU05JXzgyNTRfVENTQU1QX0NPVU5URVIgICAoKFNOSV84MjU0X1RJQ0tfUkFURSAvIEhaKSArIDI1NSkKKworc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIGRvc2FtcGxlKHZvaWQpCit7CisJdTMyIGN0MCwgY3QxOworCXZvbGF0aWxlIHU4IG1zYiwgbHNiOworCisJLyogU3RhcnQgdGhlIGNvdW50ZXIuICovCisJb3V0Yl9wICgweDM0LCAweDQzKTsKKwlvdXRiX3AoU05JXzgyNTRfVENTQU1QX0NPVU5URVIgJiAweGZmLCAweDQwKTsKKwlvdXRiIChTTklfODI1NF9UQ1NBTVBfQ09VTlRFUiA+PiA4LCAweDQwKTsKKworCS8qIEdldCBpbml0aWFsIGNvdW50ZXIgaW52YXJpYW50ICovCisJY3QwID0gcmVhZF9jMF9jb3VudCgpOworCisJLyogTGF0Y2ggYW5kIHNwaW4gdW50aWwgdG9wIGJ5dGUgb2YgY291bnRlcjAgaXMgemVybyAqLworCWRvIHsKKwkJb3V0YiAoMHgwMCwgMHg0Myk7CisJCWxzYiA9IGluYiAoMHg0MCk7CisJCW1zYiA9IGluYiAoMHg0MCk7CisJCWN0MSA9IHJlYWRfYzBfY291bnQoKTsKKwl9IHdoaWxlIChtc2IpOworCisJLyogU3RvcCB0aGUgY291bnRlci4gKi8KKwlvdXRiICgweDM4LCAweDQzKTsKKwkvKgorCSAqIFJldHVybiB0aGUgZGlmZmVyZW5jZSwgdGhpcyBpcyBob3cgZmFyIHRoZSByNGsgY291bnRlciBpbmNyZW1lbnRzCisJICogZm9yIGV2ZXJ5IDEvSFogc2Vjb25kcy4gV2Ugcm91bmQgb2ZmIHRoZSBuZWFyZXN0IDEgTUh6IG9mIG1hc3RlcgorCSAqIGNsb2NrICg9IDEwMDAwMDAgLyBIWiAvIDIpLgorCSAqLworCS8qcmV0dXJuIChjdDEgLSBjdDAgKyAoNTAwMDAwL0haLzIpKSAvICg1MDAwMDAvSFopICogKDUwMDAwMC9IWik7Ki8KKwlyZXR1cm4gKGN0MSAtIGN0MCkgLyAoNTAwMDAwL0haKSAqICg1MDAwMDAvSFopOworfQorCisvKgorICogSGVyZSB3ZSBuZWVkIHRvIGNhbGlicmF0ZSB0aGUgY3ljbGUgY291bnRlciB0byBhdCBsZWFzdCBiZSBjbG9zZS4KKyAqLworX19pbml0IHZvaWQgc25pX2NwdV90aW1lX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHI0a190aWNrc1szXTsKKwl1bnNpZ25lZCBsb25nIHI0a190aWNrOworCisJLyoKKwkgKiBGaWd1cmUgb3V0IHRoZSByNGsgb2Zmc2V0LCB0aGUgYWxnb3JpdGhtIGlzIHZlcnkgc2ltcGxlIGFuZCB3b3JrcyBpbgorCSAqIF9hbGxfIGNhc2VzIGFzIGxvbmcgYXMgdGhlIDgyNTQgY291bnRlciByZWdpc3RlciBpdHNlbGYgd29ya3Mgb2sgKGFzCisJICogYW4gaW50ZXJydXB0IGRyaXZpbmcgdGltZXIgaXQgZG9lcyBub3QgYmVjYXVzZSBvZiBidWcsIHRoaXMgaXMgd2h5CisJICogd2UgYXJlIHVzaW5nIHRoZSBvbmNoaXAgcjRrIGNvdW50ZXIvY29tcGFyZSByZWdpc3RlciB0byBzZXJ2ZSB0aGlzCisJICogcHVycG9zZSwgYnV0IGZvciByNGtfb2Zmc2V0IGNhbGN1bGF0aW9uIGl0IHdpbGwgd29yayBvayBmb3IgdXMpLgorCSAqIFRoZXJlIGFyZSBvdGhlciB2ZXJ5IGNvbXBsaWNhdGVkIHdheXMgb2YgcGVyZm9ybWluZyB0aGlzIGNhbGN1bGF0aW9uCisJICogYnV0IHRoaXMgb25lIHdvcmtzIGp1c3QgZmluZSBzbyBJIGFtIG5vdCBnb2luZyB0byBmdXR6IGFyb3VuZC4gOy0pCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2FsaWJyYXRpbmcgc3lzdGVtIHRpbWVyLi4uICIpOworCWRvc2FtcGxlKCk7CS8qIFByaW1lIGNhY2hlLiAqLworCWRvc2FtcGxlKCk7CS8qIFByaW1lIGNhY2hlLiAqLworCS8qIFplcm8gaXMgTk9UIGFuIG9wdGlvbi4gKi8KKwlkbyB7CisJCXI0a190aWNrc1swXSA9IGRvc2FtcGxlKCk7CisJfSB3aGlsZSAoIXI0a190aWNrc1swXSk7CisJZG8geworCQlyNGtfdGlja3NbMV0gPSBkb3NhbXBsZSgpOworCX0gd2hpbGUgKCFyNGtfdGlja3NbMV0pOworCisJaWYgKHI0a190aWNrc1swXSAhPSByNGtfdGlja3NbMV0pIHsKKwkJcHJpbnRrKCJ3YXJuaW5nOiB0aW1lciBjb3VudHMgZGlmZmVyLCByZXRyeWluZy4uLiAiKTsKKwkJcjRrX3RpY2tzWzJdID0gZG9zYW1wbGUoKTsKKwkJaWYgKHI0a190aWNrc1syXSA9PSByNGtfdGlja3NbMF0KKwkJICAgIHx8IHI0a190aWNrc1syXSA9PSByNGtfdGlja3NbMV0pCisJCQlyNGtfdGljayA9IHI0a190aWNrc1syXTsKKwkJZWxzZSB7CisJCQlwcmludGsoImRpc2FncmVlbWVudCwgdXNpbmcgYXZlcmFnZS4uLiAiKTsKKwkJCXI0a190aWNrID0gKHI0a190aWNrc1swXSArIHI0a190aWNrc1sxXQorCQkJCSAgICsgcjRrX3RpY2tzWzJdKSAvIDM7CisJCX0KKwl9IGVsc2UKKwkJcjRrX3RpY2sgPSByNGtfdGlja3NbMF07CisKKwlwcmludGsoIiVkIFslZC4lMDRkIE1IeiBDUFVdXG4iLCAoaW50KSByNGtfdGljaywKKwkJKGludCkgKHI0a190aWNrIC8gKDUwMDAwMCAvIEhaKSksCisJCShpbnQpIChyNGtfdGljayAlICg1MDAwMDAgLyBIWikpKTsKKworCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IHI0a190aWNrICogSFo7Cit9CisKKy8qCisgKiBSNGsgY291bnRlciBiYXNlZCB0aW1lciBpbnRlcnJ1cHQuIFdvcmtzIG9uIFJNMjAwLTIyNSBhbmQgcG9zc2libHkKKyAqIG90aGVycyBidXQgbm90IG9uIFJNNDAwCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzbmlfY3B1X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKK3sKKyAgICAgICAgc2V0dXBfaXJxKFNOSV9NSVBTX0lSUV9DUFVfVElNRVIsIGlycSk7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQoreworCXN3aXRjaCAoc25pX2JyZF90eXBlKSB7CisJY2FzZSBTTklfQlJEXzEwOgorCWNhc2UgU05JX0JSRF8xME5FVzoKKwljYXNlIFNOSV9CUkRfVE9XRVJfT0FTSUM6CisJY2FzZSBTTklfQlJEX01JTklUT1dFUjoKKwkgICAgICAgIHNuaV9hMjByX3RpbWVyX3NldHVwIChpcnEpOworCSAgICAgICAgYnJlYWs7CisKKwljYXNlIFNOSV9CUkRfUENJX1RPV0VSOgorCWNhc2UgU05JX0JSRF9STTIwMDoKKwljYXNlIFNOSV9CUkRfUENJX01UT1dFUjoKKwljYXNlIFNOSV9CUkRfUENJX0RFU0tUT1A6CisJY2FzZSBTTklfQlJEX1BDSV9UT1dFUl9DUExVUzoKKwljYXNlIFNOSV9CUkRfUENJX01UT1dFUl9DUExVUzoKKwkgICAgICAgIHNuaV9jcHVfdGltZXJfc2V0dXAgKGlycSk7CisJICAgICAgICBicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90b3BvbG9neS5jCmluZGV4IDA2OGIyMGQuLmQ3MWNiMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90b3BvbG9neS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFyY2gvcGFyaXNjL2tlcm5lbC90b3BvbG9neS5jIC0gUG9wdWxhdGUgZHJpdmVyZnMgd2l0aCB0b3BvbG9neSBpbmZvcm1hdGlvbgorICogYXJjaC9wYXJpc2Mva2VybmVsL3RvcG9sb2d5LmMgLSBQb3B1bGF0ZSBzeXNmcyB3aXRoIHRvcG9sb2d5IGluZm9ybWF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDM0MGQ5YmUuLjZkZmJkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC02MjAsNiArNjIwLDE1IEBACiAJdHJpc3RhdGUgIkZpcm13YXJlIGZsYXNoIGludGVyZmFjZSIKIAlkZXBlbmRzIG9uIFBQQzY0ICYmIFJUQVNfUFJPQwogCitjb25maWcgUFBDX1BNSQorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBQTUkiCisJZGVwZW5kcyBQUENfSUJNX0NFTExfQkxBREUKKwloZWxwCisJICBQTUkgKFBsYXRmb3JtIE1hbmFnZW1lbnQgSW50ZXJydXB0KSBpcyBhIHdheSB0bworCSAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQk1DIChCYXNlYm9hcmQgTWFuZ2VtZW50IENvbnRyb2xsZXIpLgorCSAgSXQgaXMgdXNlZCBpbiBzb21lIElCTSBDZWxsIGJsYWRlcy4KKwlkZWZhdWx0IG0KKwogY29uZmlnIE1NSU9fTlZSQU0KIAlib29sCiAJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3Vyb2JveEhELmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rdXJvYm94SEQuZHRzCmluZGV4IDA5NmU5NGEuLmI4OTc5MTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rdXJvYm94SEQuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rdXJvYm94SEQuZHRzCkBAIC0zNSw3ICszNSw2IEBACiAKIAkJUG93ZXJQQyw2MDNlIHsgLyogUmVhbGx5IDgyNDEgKi8KIAkJCWxpbnV4LHBoYW5kbGUgPSA8MjEwMD47Ci0JCQlsaW51eCxib290LWNwdTsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQlyZWcgPSA8MD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8YmViYzIwMD47CS8qIEZpeGVkIGJ5IGJvb3R3cmFwcGVyICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3Vyb2JveEhHLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rdXJvYm94SEcuZHRzCmluZGV4IGQwNmIwYjAuLjc1MzEwMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rdXJvYm94SEcuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rdXJvYm94SEcuZHRzCkBAIC0zNSw3ICszNSw2IEBACiAKIAkJUG93ZXJQQyw2MDNlIHsgLyogUmVhbGx5IDgyNDEgKi8KIAkJCWxpbnV4LHBoYW5kbGUgPSA8MjEwMD47Ci0JCQlsaW51eCxib290LWNwdTsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CiAJCQlyZWcgPSA8MD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8ZmRhZDY4MD47CS8qIEZpeGVkIGJ5IGJvb3R3cmFwcGVyICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNzQ0OGhwYzIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzc0NDhocGMyLmR0cwppbmRleCBjNGQ5NTYyLi40MWQwNzIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNzQ0OGhwYzIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM3NDQ4aHBjMi5kdHMKQEAgLTM2LDcgKzM2LDYgQEAKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIFUtQm9vdAogCQkJMzItYml0OwogCQkJbGludXgscGhhbmRsZSA9IDwyMDE+OwotCQkJbGludXgsYm9vdC1jcHU7CiAJCX07CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgyNzJhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgyNzJhZHMuZHRzCmluZGV4IDI2YjQ0ZjcuLjI2MGIyZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MjcyYWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODI3MmFkcy5kdHMKQEAgLTM0LDcgKzM0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogICAgICAgICAgICAgICAgICAgICAgICAzMi1iaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4LHBoYW5kbGUgPSA8MjAxPjsKLSAgICAgICAgICAgICAgICAgICAgICAgbGludXgsYm9vdC1jcHU7CiAgICAgICAgICAgICAgICB9OwogICAgICAgIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzCmluZGV4IDNkMmY1YTAuLjZkNzIxOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cwpAQCAtMTEsNyArMTEsNyBAQAogCiAvIHsKIAltb2RlbCA9ICJNUEM4MzEzRVJEQiI7Ci0JY29tcGF0aWJsZSA9ICJNUEM4M3h4IjsKKwljb21wYXRpYmxlID0gIk1QQzgzMTNFUkRCIiwgIk1QQzgzMXhSREIiLCAiTVBDODN4eFJEQiI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CiAKQEAgLTU5LDcgKzU5LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MzAwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDxlIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC02OCw3ICs2OCw3IEBACiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwogCQkJcmVnID0gPDMxMDAgMTAwPjsKIAkJCWludGVycnVwdHMgPSA8ZiA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCQlkZnNycjsKIAkJfTsKIApAQCAtNzcsNyArNzcsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJtcGM4M3h4X3NwaSI7CiAJCQlyZWcgPSA8NzAwMCAxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8MTAgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJbW9kZSA9IDwwPjsKIAkJfTsKIApAQCAtODgsOCArODgsOCBAQAogCQkJcmVnID0gPDIzMDAwIDEwMDA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKLQkJCWludGVycnVwdHMgPSA8MjYgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJaW50ZXJydXB0cyA9IDwyNiA4PjsKIAkJCXBoeV90eXBlID0gInV0bWlfd2lkZSI7CiAJCX07CiAKQEAgLTk5LDE4ICs5OSwxNSBAQAogCQkJcmVnID0gPDI0NTIwIDIwPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwPjsKLQkJCWV0aGVybmV0LXBoeUAxIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDE+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEzIDI+OworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQkJaW50ZXJydXB0cyA9IDwxMyA4PjsKIAkJCQlyZWcgPSA8MT47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07Ci0JCQlldGhlcm5ldC1waHlANCB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDA0PjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNCAyPjsKKwkJCXBoeTQ6IGV0aGVybmV0LXBoeUA0IHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJCWludGVycnVwdHMgPSA8MTQgOD47CiAJCQkJcmVnID0gPDQ+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwpAQCAtMTIzLDggKzEyMCw4IEBACiAJCQlyZWcgPSA8MjQwMDAgMTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjUgOCAyNCA4IDIzIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwotCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQlwaHktaGFuZGxlID0gPCAmcGh5MSA+OwogCQl9OwogCiAJCWV0aGVybmV0QDI1MDAwIHsKQEAgLTEzNCw4ICsxMzEsOCBAQAogCQkJcmVnID0gPDI1MDAwIDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIyIDggMjEgOCAyMCA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKLQkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwND47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTQgPjsKIAkJfTsKIAogCQlzZXJpYWxANDUwMCB7CkBAIC0xNDQsNyArMTQxLDcgQEAKIAkJCXJlZyA9IDw0NTAwIDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCiAJCXNlcmlhbEA0NjAwIHsKQEAgLTE1Myw3ICsxNTAsNyBAQAogCQkJcmVnID0gPDQ2MDAgMTAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWludGVycnVwdHMgPSA8YSA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCX07CiAKIAkJcGNpQDg1MDAgewpAQCAtMTYxLDE3ICsxNTgsMTcgQEAKIAkJCWludGVycnVwdC1tYXAgPSA8CiAKIAkJCQkJLyogSURTRUwgMHgwRSAtbWluaSBQQ0kgKi8KLQkJCQkJIDcwMDAgMCAwIDEgNzAwIDEyIDgKLQkJCQkJIDcwMDAgMCAwIDIgNzAwIDEyIDgKLQkJCQkJIDcwMDAgMCAwIDMgNzAwIDEyIDgKLQkJCQkJIDcwMDAgMCAwIDQgNzAwIDEyIDgKKwkJCQkJIDcwMDAgMCAwIDEgJmlwaWMgMTIgOAorCQkJCQkgNzAwMCAwIDAgMiAmaXBpYyAxMiA4CisJCQkJCSA3MDAwIDAgMCAzICZpcGljIDEyIDgKKwkJCQkJIDcwMDAgMCAwIDQgJmlwaWMgMTIgOAogCiAJCQkJCS8qIElEU0VMIDB4MEYgLSBQQ0kgc2xvdCAqLwotCQkJCQkgNzgwMCAwIDAgMSA3MDAgMTEgOAotCQkJCQkgNzgwMCAwIDAgMiA3MDAgMTIgOAotCQkJCQkgNzgwMCAwIDAgMyA3MDAgMTEgOAotCQkJCQkgNzgwMCAwIDAgNCA3MDAgMTIgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQkJCSA3ODAwIDAgMCAxICZpcGljIDExIDgKKwkJCQkJIDc4MDAgMCAwIDIgJmlwaWMgMTIgOAorCQkJCQkgNzgwMCAwIDAgMyAmaXBpYyAxMSA4CisJCQkJCSA3ODAwIDAgMCA0ICZpcGljIDEyIDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCWludGVycnVwdHMgPSA8NDIgOD47CiAJCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDkwMDAwMDAwIDkwMDAwMDAwIDAgMTAwMDAwMDAKQEAgLTE5Miw3ICsxODksNyBAQAogCQkJY29tcGF0aWJsZSA9ICJ0YWxpdG9zIjsKIAkJCXJlZyA9IDwzMDAwMCA3MDAwPjsKIAkJCWludGVycnVwdHMgPSA8YiA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCQkvKiBSZXYuIDIuMiAqLwogCQkJbnVtLWNoYW5uZWxzID0gPDE+OwogCQkJY2hhbm5lbC1maWZvLWxlbiA9IDwxOD47CkBAIC0yMDYsOCArMjAzLDcgQEAKIAkJICogc2Vuc2UgPT0gODogTGV2ZWwsIGxvdyBhc3NlcnRpb24KIAkJICogc2Vuc2UgPT0gMjogRWRnZSwgaGlnaC10by1sb3cgY2hhbmdlCiAJCSAqLwotCQlwaWNANzAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NzAwPjsKKwkJaXBpYzogcGljQDcwMCB7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzIzZW1kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzCnNpbWlsYXJpdHkgaW5kZXggNzclCnJlbmFtZSBmcm9tIGFyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzIzZW1kcy5kdHMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X21kcy5kdHMKaW5kZXggZmE3ZWYyNC4uMDZiMzEwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMjNlbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzCkBAIC0xMSwxNiArMTEsMTQgQEAKIAogLyB7CiAJbW9kZWwgPSAiTVBDODMyM0VNRFMiOwotCWNvbXBhdGlibGUgPSAiTVBDODN4eCI7CisJY29tcGF0aWJsZSA9ICJNUEM4MzIzRU1EUyIsICJNUEM4MzJ4TURTIiwgIk1QQzgzeHhNRFMiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OwotCWxpbnV4LHBoYW5kbGUgPSA8MTAwPjsKIAogCWNwdXMgewogCQkjY3B1cyA9IDwxPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQlsaW51eCxwaGFuZGxlID0gPDIwMD47CiAKIAkJUG93ZXJQQyw4MzIzQDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKQEAgLTMzLDE0ICszMSwxMSBAQAogCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCTMyLWJpdDsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8MjAxPjsKLQkJCWxpbnV4LGJvb3QtY3B1OwogCQl9OwogCX07CiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlsaW51eCxwaGFuZGxlID0gPDMwMD47CiAJCXJlZyA9IDwwMDAwMDAwMCAwODAwMDAwMD47CiAJfTsKIApAQCAtNjksNyArNjQsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKIAkJCXJlZyA9IDwzMDAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPGUgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJZGZzcnI7CiAJCX07CiAKQEAgLTc5LDcgKzc0LDcgQEAKIAkJCXJlZyA9IDw0NTAwIDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCiAJCXNlcmlhbEA0NjAwIHsKQEAgLTg4LDcgKzgzLDcgQEAKIAkJCXJlZyA9IDw0NjAwIDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPGEgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCiAJCWNyeXB0b0AzMDAwMCB7CkBAIC05Nyw3ICs5Miw3IEBACiAJCQljb21wYXRpYmxlID0gInRhbGl0b3MiOwogCQkJcmVnID0gPDMwMDAwIDcwMDA+OwogCQkJaW50ZXJydXB0cyA9IDxiIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCS8qIFJldi4gMi4yICovCiAJCQludW0tY2hhbm5lbHMgPSA8MT47CiAJCQljaGFubmVsLWZpZm8tbGVuID0gPDE4PjsKQEAgLTEwNiw1MSArMTAxLDUwIEBACiAJCX07CiAKIAkJcGNpQDg1MDAgewotCQkJbGludXgscGhhbmRsZSA9IDw4NTAwPjsKIAkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKIAkJCWludGVycnVwdC1tYXAgPSA8CiAJCQkJCS8qIElEU0VMIDB4MTEgQUQxNyAqLwotCQkJCQkgODgwMCAwIDAgMSA3MDAgMTQgOAotCQkJCQkgODgwMCAwIDAgMiA3MDAgMTUgOAotCQkJCQkgODgwMCAwIDAgMyA3MDAgMTYgOAotCQkJCQkgODgwMCAwIDAgNCA3MDAgMTcgOAorCQkJCQkgODgwMCAwIDAgMSAmaXBpYyAxNCA4CisJCQkJCSA4ODAwIDAgMCAyICZpcGljIDE1IDgKKwkJCQkJIDg4MDAgMCAwIDMgJmlwaWMgMTYgOAorCQkJCQkgODgwMCAwIDAgNCAmaXBpYyAxNyA4CiAKIAkJCQkJLyogSURTRUwgMHgxMiBBRDE4ICovCi0JCQkJCSA5MDAwIDAgMCAxIDcwMCAxNiA4Ci0JCQkJCSA5MDAwIDAgMCAyIDcwMCAxNyA4Ci0JCQkJCSA5MDAwIDAgMCAzIDcwMCAxNCA4Ci0JCQkJCSA5MDAwIDAgMCA0IDcwMCAxNSA4CisJCQkJCSA5MDAwIDAgMCAxICZpcGljIDE2IDgKKwkJCQkJIDkwMDAgMCAwIDIgJmlwaWMgMTcgOAorCQkJCQkgOTAwMCAwIDAgMyAmaXBpYyAxNCA4CisJCQkJCSA5MDAwIDAgMCA0ICZpcGljIDE1IDgKIAogCQkJCQkvKiBJRFNFTCAweDEzIEFEMTkgKi8KLQkJCQkJIDk4MDAgMCAwIDEgNzAwIDE3IDgKLQkJCQkJIDk4MDAgMCAwIDIgNzAwIDE0IDgKLQkJCQkJIDk4MDAgMCAwIDMgNzAwIDE1IDgKLQkJCQkJIDk4MDAgMCAwIDQgNzAwIDE2IDgKKwkJCQkJIDk4MDAgMCAwIDEgJmlwaWMgMTcgOAorCQkJCQkgOTgwMCAwIDAgMiAmaXBpYyAxNCA4CisJCQkJCSA5ODAwIDAgMCAzICZpcGljIDE1IDgKKwkJCQkJIDk4MDAgMCAwIDQgJmlwaWMgMTYgOAogCiAJCQkJCS8qIElEU0VMIDB4MTUgQUQyMSovCi0JCQkJCSBhODAwIDAgMCAxIDcwMCAxNCA4Ci0JCQkJCSBhODAwIDAgMCAyIDcwMCAxNSA4Ci0JCQkJCSBhODAwIDAgMCAzIDcwMCAxNiA4Ci0JCQkJCSBhODAwIDAgMCA0IDcwMCAxNyA4CisJCQkJCSBhODAwIDAgMCAxICZpcGljIDE0IDgKKwkJCQkJIGE4MDAgMCAwIDIgJmlwaWMgMTUgOAorCQkJCQkgYTgwMCAwIDAgMyAmaXBpYyAxNiA4CisJCQkJCSBhODAwIDAgMCA0ICZpcGljIDE3IDgKIAogCQkJCQkvKiBJRFNFTCAweDE2IEFEMjIqLwotCQkJCQkgYjAwMCAwIDAgMSA3MDAgMTcgOAotCQkJCQkgYjAwMCAwIDAgMiA3MDAgMTQgOAotCQkJCQkgYjAwMCAwIDAgMyA3MDAgMTUgOAotCQkJCQkgYjAwMCAwIDAgNCA3MDAgMTYgOAorCQkJCQkgYjAwMCAwIDAgMSAmaXBpYyAxNyA4CisJCQkJCSBiMDAwIDAgMCAyICZpcGljIDE0IDgKKwkJCQkJIGIwMDAgMCAwIDMgJmlwaWMgMTUgOAorCQkJCQkgYjAwMCAwIDAgNCAmaXBpYyAxNiA4CiAKIAkJCQkJLyogSURTRUwgMHgxNyBBRDIzKi8KLQkJCQkJIGI4MDAgMCAwIDEgNzAwIDE2IDgKLQkJCQkJIGI4MDAgMCAwIDIgNzAwIDE3IDgKLQkJCQkJIGI4MDAgMCAwIDMgNzAwIDE0IDgKLQkJCQkJIGI4MDAgMCAwIDQgNzAwIDE1IDgKKwkJCQkJIGI4MDAgMCAwIDEgJmlwaWMgMTYgOAorCQkJCQkgYjgwMCAwIDAgMiAmaXBpYyAxNyA4CisJCQkJCSBiODAwIDAgMCAzICZpcGljIDE0IDgKKwkJCQkJIGI4MDAgMCAwIDQgJmlwaWMgMTUgOAogCiAJCQkJCS8qIElEU0VMIDB4MTggQUQyNCovCi0JCQkJCSBjMDAwIDAgMCAxIDcwMCAxNSA4Ci0JCQkJCSBjMDAwIDAgMCAyIDcwMCAxNiA4Ci0JCQkJCSBjMDAwIDAgMCAzIDcwMCAxNyA4Ci0JCQkJCSBjMDAwIDAgMCA0IDcwMCAxNCA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCQkJIGMwMDAgMCAwIDEgJmlwaWMgMTUgOAorCQkJCQkgYzAwMCAwIDAgMiAmaXBpYyAxNiA4CisJCQkJCSBjMDAwIDAgMCAzICZpcGljIDE3IDgKKwkJCQkJIGMwMDAgMCAwIDQgJmlwaWMgMTQgOD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJaW50ZXJydXB0cyA9IDw0MiA4PjsKIAkJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYTAwMDAwMDAgOTAwMDAwMDAgMCAxMDAwMDAwMApAQCAtMTY1LDggKzE1OSw3IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQl9OwogCi0JCXBpY0A3MDAgewotCQkJbGludXgscGhhbmRsZSA9IDw3MDA+OworCQlpcGljOiBwaWNANzAwIHsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwpAQCAtMTgwLDggKzE3Myw3IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJwYXJfaW8iOwogCQkJbnVtLXBvcnRzID0gPDc+OwogCi0JCQl1Y2NfcGluQDAzIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDE0MDAwMz47CisJCQlwaW8zOiB1Y2NfcGluQDAzIHsKIAkJCQlwaW8tbWFwID0gPAogCQkJLyogcG9ydCAgcGluICBkaXIgIG9wZW5fZHJhaW4gIGFzc2lnbm1lbnQgIGhhc19pcnEgKi8KIAkJCQkJMyAgNCAgMyAgMCAgMiAgMCAgLyogTURJTyAqLwpAQCAtMjA0LDggKzE5Niw3IEBACiAJCQkJCTEgIGMgIDEgIDAgIDEgIDAgCS8qIFRYX0VOICovCiAJCQkJCTEgIGQgIDIgIDAgIDEgIDA+Oy8qIENSUyAqLwogCQkJfTsKLQkJCXVjY19waW5AMDQgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MTQwMDA0PjsKKwkJCXBpbzQ6IHVjY19waW5AMDQgewogCQkJCXBpby1tYXAgPSA8CiAJCQkvKiBwb3J0ICBwaW4gIGRpciAgb3Blbl9kcmFpbiAgYXNzaWdubWVudCAgaGFzX2lycSAqLwogCQkJCQkzIDFmICAyICAwICAxICAwIAkvKiBSWF9DTEsgKENMSzcpICovCkBAIC0yNTIsNyArMjQzLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsX3NwaSI7CiAJCQlyZWcgPSA8NGMwIDQwPjsKIAkJCWludGVycnVwdHMgPSA8Mj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDgwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZxZWljID47CiAJCQltb2RlID0gImNwdSI7CiAJCX07CiAKQEAgLTI2MSw3ICsyNTIsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2xfc3BpIjsKIAkJCXJlZyA9IDw1MDAgNDA+OwogCQkJaW50ZXJydXB0cyA9IDwxPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8ODA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJnFlaWMgPjsKIAkJCW1vZGUgPSAiY3B1IjsKIAkJfTsKIApAQCAtMjcwLDcgKzI2MSw3IEBACiAJCQljb21wYXRpYmxlID0gInFlX3VkYyI7CiAJCQlyZWcgPSA8NmMwIDQwIDhCMDAgMTAwPjsKIAkJCWludGVycnVwdHMgPSA8Yj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDgwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZxZWljID47CiAJCQltb2RlID0gInNsYXZlIjsKIAkJfTsKIApAQCAtMjgxLDEyICsyNzIsMTIgQEAKIAkJCWRldmljZS1pZCA9IDwzPjsKIAkJCXJlZyA9IDwyMjAwIDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8ODA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJnFlaWMgPjsKIAkJCW1hYy1hZGRyZXNzID0gWyAwMCAwNCA5ZiAwMCAyMyAyMyBdOwogCQkJcngtY2xvY2sgPSA8MTk+OwogCQkJdHgtY2xvY2sgPSA8MWE+OwotCQkJcGh5LWhhbmRsZSA9IDwyMTIwMDM+OwotCQkJcGlvLWhhbmRsZSA9IDwxNDAwMDM+OworCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTMgPjsKKwkJCXBpby1oYW5kbGUgPSA8ICZwaW8zID47CiAJCX07CiAKIAkJdWNjQDMyMDAgewpAQCAtMjk2LDEyICsyODcsMTIgQEAKIAkJCWRldmljZS1pZCA9IDw0PjsKIAkJCXJlZyA9IDwzMDAwIDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIzPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8ODA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJnFlaWMgPjsKIAkJCW1hYy1hZGRyZXNzID0gWyAwMCAxMSAyMiAzMyA0NCA1NSBdOwogCQkJcngtY2xvY2sgPSA8MTc+OwogCQkJdHgtY2xvY2sgPSA8MTg+OwotCQkJcGh5LWhhbmRsZSA9IDwyMTIwMDQ+OwotCQkJcGlvLWhhbmRsZSA9IDwxNDAwMDQ+OworCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTQgPjsKKwkJCXBpby1oYW5kbGUgPSA8ICZwaW80ID47CiAJCX07CiAKIAkJbWRpb0AyMzIwIHsKQEAgLTMxMSwyNiArMzAyLDIzIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKIAkJCWNvbXBhdGlibGUgPSAidWNjX2dldGhfcGh5IjsKIAotCQkJZXRoZXJuZXQtcGh5QDAzIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDIxMjAwMz47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwotCQkJCWludGVycnVwdHMgPSA8MTEgMj47CisJCQlwaHkzOiBldGhlcm5ldC1waHlAMDMgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQkJaW50ZXJydXB0cyA9IDwxMSA4PjsKIAkJCQlyZWcgPSA8Mz47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlpbnRlcmZhY2UgPSA8Mz47IC8vRU5FVF8xMDBfTUlJCiAJCQl9OwotCQkJZXRoZXJuZXQtcGh5QDA0IHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDIxMjAwND47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwotCQkJCWludGVycnVwdHMgPSA8MTIgMj47CisJCQlwaHk0OiBldGhlcm5ldC1waHlAMDQgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQkJaW50ZXJydXB0cyA9IDwxMiA4PjsKIAkJCQlyZWcgPSA8ND47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlpbnRlcmZhY2UgPSA8Mz47CiAJCQl9OwogCQl9OwogCi0JCXFlaWNAODAgewotCQkJbGludXgscGhhbmRsZSA9IDw4MD47CisJCXFlaWM6IHFlaWNAODAgewogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQlkZXZpY2VfdHlwZSA9ICJxZWljIjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwpAQCAtMzM5LDcgKzMyNyw3IEBACiAJCQlidWlsdC1pbjsKIAkJCWJpZy1lbmRpYW47CiAJCQlpbnRlcnJ1cHRzID0gPDIwIDggMjEgOD47IC8vaGlnaDozMiBsb3c6MzMKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCmluZGV4IDI3ODA3ZmMuLjYxYjU1MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KIC8gewogCW1vZGVsID0gIk1QQzgzNDlFTUlUWCI7Ci0JY29tcGF0aWJsZSA9ICJNUEM4MzR4TUlUWCI7CisJY29tcGF0aWJsZSA9ICJNUEM4MzQ5RU1JVFgiLCAiTVBDODM0eE1JVFgiLCAiTVBDODN4eE1JVFgiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OwogCkBAIC01OCw3ICs1OCw3IEBACiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwogCQkJcmVnID0gPDMwMDAgMTAwPjsKIAkJCWludGVycnVwdHMgPSA8ZSA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCQlkZnNycjsKIAkJfTsKIApAQCAtNjcsNyArNjcsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKIAkJCXJlZyA9IDwzMTAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPGYgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJZGZzcnI7CiAJCX07CiAKQEAgLTc2LDcgKzc2LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAibXBjODN4eF9zcGkiOwogCQkJcmVnID0gPDcwMDAgMTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEwIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCW1vZGUgPSA8MD47CiAJCX07CiAKQEAgLTg2LDggKzg2LDggQEAKIAkJCXJlZyA9IDwyMjAwMCAxMDAwPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDI3IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwkJCWludGVycnVwdHMgPSA8MjcgOD47CiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJCXBvcnQxOwogCQl9OwpAQCAtOTgsOCArOTgsOCBAQAogCQkJcmVnID0gPDIzMDAwIDEwMDA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKLQkJCWludGVycnVwdHMgPSA8MjYgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJaW50ZXJydXB0cyA9IDwyNiA4PjsKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCkBAIC0xMDksMjIgKzEwOSwxOSBAQAogCQkJcmVnID0gPDI0NTIwIDIwPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwPjsKIAogCQkJLyogVml0ZXNzZSA4MjAxICovCi0JCQlldGhlcm5ldC1waHlAMWMgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAxYz47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwotCQkJCWludGVycnVwdHMgPSA8MTIgMj47CisJCQlwaHkxYzogZXRoZXJuZXQtcGh5QDFjIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJCWludGVycnVwdHMgPSA8MTIgOD47CiAJCQkJcmVnID0gPDFjPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAogCQkJLyogVml0ZXNzZSA3Mzg1ICovCi0JCQlldGhlcm5ldC1waHlAMWYgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAxZj47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwotCQkJCWludGVycnVwdHMgPSA8MTIgMj47CisJCQlwaHkxZjogZXRoZXJuZXQtcGh5QDFmIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJCWludGVycnVwdHMgPSA8MTIgOD47CiAJCQkJcmVnID0gPDFmPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKQEAgLTEzOCw4ICsxMzUsOCBAQAogCQkJYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyMCA4IDIxIDggMjIgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMWM+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwkJCXBoeS1oYW5kbGUgPSA8ICZwaHkxYyA+OwogCQl9OwogCiAJCWV0aGVybmV0QDI1MDAwIHsKQEAgLTE1Miw4ICsxNDksOCBAQAogCQkJYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyMyA4IDI0IDggMjUgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMWY+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwkJCXBoeS1oYW5kbGUgPSA8ICZwaHkxZiA+OwogCQl9OwogCiAJCXNlcmlhbEA0NTAwIHsKQEAgLTE2Miw3ICsxNTksNyBAQAogCQkJcmVnID0gPDQ1MDAgMTAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgogCQkJaW50ZXJydXB0cyA9IDw5IDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJfTsKIAogCQlzZXJpYWxANDYwMCB7CkBAIC0xNzEsMTYgKzE2OCwxNiBAQAogCQkJcmVnID0gPDQ2MDAgMTAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgogCQkJaW50ZXJydXB0cyA9IDxhIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJfTsKIAogCQlwY2lAODUwMCB7CiAJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CiAJCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJCQkvKiBJRFNFTCAweDEwIC0gU0FUQSAqLwotCQkJCQk4MDAwIDAgMCAxIDcwMCAxNiA4IC8qIFNBVEFfSU5UQSAqLworCQkJCQk4MDAwIDAgMCAxICZpcGljIDE2IDggLyogU0FUQV9JTlRBICovCiAJCQkJCT47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJaW50ZXJydXB0cyA9IDw0MiA4PjsKIAkJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQkJcmFuZ2VzID0gPDQyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAxMDAwMDAwMApAQCAtMTk5LDEzICsxOTYsMTMgQEAKIAkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKIAkJCWludGVycnVwdC1tYXAgPSA8CiAJCQkJCS8qIElEU0VMIDB4MEUgLSBNaW5pUENJIFNsb3QgKi8KLQkJCQkJNzAwMCAwIDAgMSA3MDAgMTUgOCAvKiBQQ0lfSU5UQSAqLworCQkJCQk3MDAwIDAgMCAxICZpcGljIDE1IDggLyogUENJX0lOVEEgKi8KIAogCQkJCQkvKiBJRFNFTCAweDBGIC0gUENJIFNsb3QgKi8KLQkJCQkJNzgwMCAwIDAgMSA3MDAgMTQgOCAvKiBQQ0lfSU5UQSAqLwotCQkJCQk3ODAwIDAgMCAyIDcwMCAxNSA4IC8qIFBDSV9JTlRCICovCisJCQkJCTc4MDAgMCAwIDEgJmlwaWMgMTQgOCAvKiBQQ0lfSU5UQSAqLworCQkJCQk3ODAwIDAgMCAyICZpcGljIDE1IDggLyogUENJX0lOVEIgKi8KIAkJCQkJID47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJaW50ZXJydXB0cyA9IDw0MyA4PjsKIAkJCWJ1cy1yYW5nZSA9IDwxIDE+OwogCQkJcmFuZ2VzID0gPDQyMDAwMDAwIDAgYTAwMDAwMDAgYTAwMDAwMDAgMCAxMDAwMDAwMApAQCAtMjI2LDE1ICsyMjMsMTQgQEAKIAkJCWNvbXBhdGlibGUgPSAidGFsaXRvcyI7CiAJCQlyZWcgPSA8MzAwMDAgMTAwMDA+OwogCQkJaW50ZXJydXB0cyA9IDxiIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCW51bS1jaGFubmVscyA9IDw0PjsKIAkJCWNoYW5uZWwtZmlmby1sZW4gPSA8MTg+OwogCQkJZXhlYy11bml0cy1tYXNrID0gPDAwMDAwMDdlPjsKIAkJCWRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwwMTAxMGViZj47CiAJCX07CiAKLQkJcGljQDcwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDcwMD47CisJCWlwaWM6IHBpY0A3MDAgewogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eGdwLmR0cwppbmRleCAzMTkwNzc0Li5iMmUxYTVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMKQEAgLTEwLDcgKzEwLDcgQEAKICAqLwogLyB7CiAJbW9kZWwgPSAiTVBDODM0OUVNSVRYR1AiOwotCWNvbXBhdGlibGUgPSAiTVBDODM0eE1JVFhHUCI7CisJY29tcGF0aWJsZSA9ICJNUEM4MzQ5RU1JVFhHUCIsICJNUEM4MzR4TUlUWCIsICJNUEM4M3h4TUlUWCI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CiAKQEAgLTU4LDcgKzU4LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MzAwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDxlIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC02Nyw3ICs2Nyw3IEBACiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwogCQkJcmVnID0gPDMxMDAgMTAwPjsKIAkJCWludGVycnVwdHMgPSA8ZiA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCQlkZnNycjsKIAkJfTsKIApAQCAtNzYsNyArNzYsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJtcGM4M3h4X3NwaSI7CiAJCQlyZWcgPSA8NzAwMCAxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8MTAgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJbW9kZSA9IDwwPjsKIAkJfTsKIApAQCAtODYsOCArODYsOCBAQAogCQkJcmVnID0gPDIzMDAwIDEwMDA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKLQkJCWludGVycnVwdHMgPSA8MjYgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJaW50ZXJydXB0cyA9IDwyNiA4PjsKIAkJCWRyX21vZGUgPSAib3RnIjsKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwpAQCAtOTgsMTMgKzk4LDExIEBACiAJCQlyZWcgPSA8MjQ1MjAgMjA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjA+OwogCiAJCQkvKiBWaXRlc3NlIDgyMDEgKi8KLQkJCWV0aGVybmV0LXBoeUAxYyB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDFjPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMiAyPjsKKwkJCXBoeTFjOiBldGhlcm5ldC1waHlAMWMgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQkJaW50ZXJydXB0cyA9IDwxMiA4PjsKIAkJCQlyZWcgPSA8MWM+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwpAQCAtMTE3LDggKzExNSw4IEBACiAJCQlyZWcgPSA8MjQwMDAgMTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjAgOCAyMSA4IDIyIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwotCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDFjPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQlwaHktaGFuZGxlID0gPCAmcGh5MWMgPjsKIAkJfTsKIAogCQlzZXJpYWxANDUwMCB7CkBAIC0xMjcsNyArMTI1LDcgQEAKIAkJCXJlZyA9IDw0NTAwIDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKIAkJCWludGVycnVwdHMgPSA8OSA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCX07CiAKIAkJc2VyaWFsQDQ2MDAgewpAQCAtMTM2LDE3ICsxMzQsMTcgQEAKIAkJCXJlZyA9IDw0NjAwIDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKIAkJCWludGVycnVwdHMgPSA8YSA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCX07CiAKIAkJcGNpQDg2MDAgewogCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OwogCQkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCQkJLyogSURTRUwgMHgwRiAtIFBDSSBTbG90ICovCi0JCQkJCTc4MDAgMCAwIDEgNzAwIDE0IDggLyogUENJX0lOVEEgKi8KLQkJCQkJNzgwMCAwIDAgMiA3MDAgMTUgOCAvKiBQQ0lfSU5UQiAqLworCQkJCQk3ODAwIDAgMCAxICZpcGljIDE0IDggLyogUENJX0lOVEEgKi8KKwkJCQkJNzgwMCAwIDAgMiAmaXBpYyAxNSA4IC8qIFBDSV9JTlRCICovCiAJCQkJCSA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCWludGVycnVwdHMgPSA8NDMgOD47CiAJCQlidXMtcmFuZ2UgPSA8MSAxPjsKIAkJCXJhbmdlcyA9IDw0MjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMTAwMDAwMDAKQEAgLTE2NywxNSArMTY1LDE0IEBACiAJCQljb21wYXRpYmxlID0gInRhbGl0b3MiOwogCQkJcmVnID0gPDMwMDAwIDEwMDAwPjsKIAkJCWludGVycnVwdHMgPSA8YiA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCQludW0tY2hhbm5lbHMgPSA8ND47CiAJCQljaGFubmVsLWZpZm8tbGVuID0gPDE4PjsKIAkJCWV4ZWMtdW5pdHMtbWFzayA9IDwwMDAwMDA3ZT47CiAJCQlkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MDEwMTBlYmY+OwogCQl9OwogCi0JCXBpY0A3MDAgewotCQkJbGludXgscGhhbmRsZSA9IDw3MDA+OworCQlpcGljOiBwaWNANzAwIHsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMKaW5kZXggZGMxMjFiMy4uZTRiNDNjMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzCkBAIC0xMSw3ICsxMSw3IEBACiAKIC8gewogCW1vZGVsID0gIk1QQzgzNDlFTURTIjsKLQljb21wYXRpYmxlID0gIk1QQzgzNHhNRFMiOworCWNvbXBhdGlibGUgPSAiTVBDODM0OUVNRFMiLCAiTVBDODM0eE1EUyIsICJNUEM4M3h4TURTIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKIApAQCAtNjQsNyArNjQsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKIAkJCXJlZyA9IDwzMDAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPGUgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJZGZzcnI7CiAJCX07CiAKQEAgLTczLDcgKzczLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MzEwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDxmIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC04Miw3ICs4Miw3IEBACiAJCQljb21wYXRpYmxlID0gIm1wYzgzeHhfc3BpIjsKIAkJCXJlZyA9IDw3MDAwIDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDwxMCA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCQltb2RlID0gPDA+OwogCQl9OwogCkBAIC05NCw4ICs5NCw4IEBACiAJCQlyZWcgPSA8MjIwMDAgMTAwMD47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwotCQkJaW50ZXJydXB0cyA9IDwyNyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQlpbnRlcnJ1cHRzID0gPDI3IDg+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCQlwb3J0MTsKIAkJfTsKQEAgLTEwNiw4ICsxMDYsOCBAQAogCQkJcmVnID0gPDIzMDAwIDEwMDA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKLQkJCWludGVycnVwdHMgPSA8MjYgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJaW50ZXJydXB0cyA9IDwyNiA4PjsKIAkJCWRyX21vZGUgPSAib3RnIjsKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwpAQCAtMTE4LDE4ICsxMTgsMTUgQEAKIAkJCXJlZyA9IDwyNDUyMCAyMD47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMD47Ci0JCQlldGhlcm5ldC1waHlAMCB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDAwPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMSAyPjsKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJCWludGVycnVwdHMgPSA8MTEgOD47CiAJCQkJcmVnID0gPDA+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwotCQkJZXRoZXJuZXQtcGh5QDEgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwotCQkJCWludGVycnVwdHMgPSA8MTIgMj47CisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEyIDg+OwogCQkJCXJlZyA9IDwxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKQEAgLTE0Myw4ICsxNDAsOCBAQAogCQkJYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyMCA4IDIxIDggMjIgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwkJCXBoeS1oYW5kbGUgPSA8ICZwaHkwID47CiAJCX07CiAKIAkJZXRoZXJuZXRAMjUwMDAgewpAQCAtMTU3LDggKzE1NCw4IEBACiAJCQlhZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIzIDggMjQgOCAyNSA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKLQkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTEgPjsKIAkJfTsKIAogCQlzZXJpYWxANDUwMCB7CkBAIC0xNjcsNyArMTY0LDcgQEAKIAkJCXJlZyA9IDw0NTAwIDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCiAJCXNlcmlhbEA0NjAwIHsKQEAgLTE3Niw3ICsxNzMsNyBAQAogCQkJcmVnID0gPDQ2MDAgMTAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWludGVycnVwdHMgPSA8YSA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCX07CiAKIAkJcGNpQDg1MDAgewpAQCAtMTg0LDQ3ICsxODEsNDcgQEAKIAkJCWludGVycnVwdC1tYXAgPSA8CiAKIAkJCQkJLyogSURTRUwgMHgxMSAqLwotCQkJCQkgODgwMCAwIDAgMSA3MDAgMTQgOAotCQkJCQkgODgwMCAwIDAgMiA3MDAgMTUgOAotCQkJCQkgODgwMCAwIDAgMyA3MDAgMTYgOAotCQkJCQkgODgwMCAwIDAgNCA3MDAgMTcgOAorCQkJCQkgODgwMCAwIDAgMSAmaXBpYyAxNCA4CisJCQkJCSA4ODAwIDAgMCAyICZpcGljIDE1IDgKKwkJCQkJIDg4MDAgMCAwIDMgJmlwaWMgMTYgOAorCQkJCQkgODgwMCAwIDAgNCAmaXBpYyAxNyA4CiAKIAkJCQkJLyogSURTRUwgMHgxMiAqLwotCQkJCQkgOTAwMCAwIDAgMSA3MDAgMTYgOAotCQkJCQkgOTAwMCAwIDAgMiA3MDAgMTcgOAotCQkJCQkgOTAwMCAwIDAgMyA3MDAgMTQgOAotCQkJCQkgOTAwMCAwIDAgNCA3MDAgMTUgOAorCQkJCQkgOTAwMCAwIDAgMSAmaXBpYyAxNiA4CisJCQkJCSA5MDAwIDAgMCAyICZpcGljIDE3IDgKKwkJCQkJIDkwMDAgMCAwIDMgJmlwaWMgMTQgOAorCQkJCQkgOTAwMCAwIDAgNCAmaXBpYyAxNSA4CiAKIAkJCQkJLyogSURTRUwgMHgxMyAqLwotCQkJCQkgOTgwMCAwIDAgMSA3MDAgMTcgOAotCQkJCQkgOTgwMCAwIDAgMiA3MDAgMTQgOAotCQkJCQkgOTgwMCAwIDAgMyA3MDAgMTUgOAotCQkJCQkgOTgwMCAwIDAgNCA3MDAgMTYgOAorCQkJCQkgOTgwMCAwIDAgMSAmaXBpYyAxNyA4CisJCQkJCSA5ODAwIDAgMCAyICZpcGljIDE0IDgKKwkJCQkJIDk4MDAgMCAwIDMgJmlwaWMgMTUgOAorCQkJCQkgOTgwMCAwIDAgNCAmaXBpYyAxNiA4CiAKIAkJCQkJLyogSURTRUwgMHgxNSAqLwotCQkJCQkgYTgwMCAwIDAgMSA3MDAgMTQgOAotCQkJCQkgYTgwMCAwIDAgMiA3MDAgMTUgOAotCQkJCQkgYTgwMCAwIDAgMyA3MDAgMTYgOAotCQkJCQkgYTgwMCAwIDAgNCA3MDAgMTcgOAorCQkJCQkgYTgwMCAwIDAgMSAmaXBpYyAxNCA4CisJCQkJCSBhODAwIDAgMCAyICZpcGljIDE1IDgKKwkJCQkJIGE4MDAgMCAwIDMgJmlwaWMgMTYgOAorCQkJCQkgYTgwMCAwIDAgNCAmaXBpYyAxNyA4CiAKIAkJCQkJLyogSURTRUwgMHgxNiAqLwotCQkJCQkgYjAwMCAwIDAgMSA3MDAgMTcgOAotCQkJCQkgYjAwMCAwIDAgMiA3MDAgMTQgOAotCQkJCQkgYjAwMCAwIDAgMyA3MDAgMTUgOAotCQkJCQkgYjAwMCAwIDAgNCA3MDAgMTYgOAorCQkJCQkgYjAwMCAwIDAgMSAmaXBpYyAxNyA4CisJCQkJCSBiMDAwIDAgMCAyICZpcGljIDE0IDgKKwkJCQkJIGIwMDAgMCAwIDMgJmlwaWMgMTUgOAorCQkJCQkgYjAwMCAwIDAgNCAmaXBpYyAxNiA4CiAKIAkJCQkJLyogSURTRUwgMHgxNyAqLwotCQkJCQkgYjgwMCAwIDAgMSA3MDAgMTYgOAotCQkJCQkgYjgwMCAwIDAgMiA3MDAgMTcgOAotCQkJCQkgYjgwMCAwIDAgMyA3MDAgMTQgOAotCQkJCQkgYjgwMCAwIDAgNCA3MDAgMTUgOAorCQkJCQkgYjgwMCAwIDAgMSAmaXBpYyAxNiA4CisJCQkJCSBiODAwIDAgMCAyICZpcGljIDE3IDgKKwkJCQkJIGI4MDAgMCAwIDMgJmlwaWMgMTQgOAorCQkJCQkgYjgwMCAwIDAgNCAmaXBpYyAxNSA4CiAKIAkJCQkJLyogSURTRUwgMHgxOCAqLwotCQkJCQkgYzAwMCAwIDAgMSA3MDAgMTUgOAotCQkJCQkgYzAwMCAwIDAgMiA3MDAgMTYgOAotCQkJCQkgYzAwMCAwIDAgMyA3MDAgMTcgOAotCQkJCQkgYzAwMCAwIDAgNCA3MDAgMTQgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQkJCSBjMDAwIDAgMCAxICZpcGljIDE1IDgKKwkJCQkJIGMwMDAgMCAwIDIgJmlwaWMgMTYgOAorCQkJCQkgYzAwMCAwIDAgMyAmaXBpYyAxNyA4CisJCQkJCSBjMDAwIDAgMCA0ICZpcGljIDE0IDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCWludGVycnVwdHMgPSA8NDIgOD47CiAJCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMTAwMDAwMDAKQEAgLTI0NCw0NyArMjQxLDQ3IEBACiAJCQlpbnRlcnJ1cHQtbWFwID0gPAogCiAJCQkJCS8qIElEU0VMIDB4MTEgKi8KLQkJCQkJIDg4MDAgMCAwIDEgNzAwIDE0IDgKLQkJCQkJIDg4MDAgMCAwIDIgNzAwIDE1IDgKLQkJCQkJIDg4MDAgMCAwIDMgNzAwIDE2IDgKLQkJCQkJIDg4MDAgMCAwIDQgNzAwIDE3IDgKKwkJCQkJIDg4MDAgMCAwIDEgJmlwaWMgMTQgOAorCQkJCQkgODgwMCAwIDAgMiAmaXBpYyAxNSA4CisJCQkJCSA4ODAwIDAgMCAzICZpcGljIDE2IDgKKwkJCQkJIDg4MDAgMCAwIDQgJmlwaWMgMTcgOAogCiAJCQkJCS8qIElEU0VMIDB4MTIgKi8KLQkJCQkJIDkwMDAgMCAwIDEgNzAwIDE2IDgKLQkJCQkJIDkwMDAgMCAwIDIgNzAwIDE3IDgKLQkJCQkJIDkwMDAgMCAwIDMgNzAwIDE0IDgKLQkJCQkJIDkwMDAgMCAwIDQgNzAwIDE1IDgKKwkJCQkJIDkwMDAgMCAwIDEgJmlwaWMgMTYgOAorCQkJCQkgOTAwMCAwIDAgMiAmaXBpYyAxNyA4CisJCQkJCSA5MDAwIDAgMCAzICZpcGljIDE0IDgKKwkJCQkJIDkwMDAgMCAwIDQgJmlwaWMgMTUgOAogCiAJCQkJCS8qIElEU0VMIDB4MTMgKi8KLQkJCQkJIDk4MDAgMCAwIDEgNzAwIDE3IDgKLQkJCQkJIDk4MDAgMCAwIDIgNzAwIDE0IDgKLQkJCQkJIDk4MDAgMCAwIDMgNzAwIDE1IDgKLQkJCQkJIDk4MDAgMCAwIDQgNzAwIDE2IDgKKwkJCQkJIDk4MDAgMCAwIDEgJmlwaWMgMTcgOAorCQkJCQkgOTgwMCAwIDAgMiAmaXBpYyAxNCA4CisJCQkJCSA5ODAwIDAgMCAzICZpcGljIDE1IDgKKwkJCQkJIDk4MDAgMCAwIDQgJmlwaWMgMTYgOAogCiAJCQkJCS8qIElEU0VMIDB4MTUgKi8KLQkJCQkJIGE4MDAgMCAwIDEgNzAwIDE0IDgKLQkJCQkJIGE4MDAgMCAwIDIgNzAwIDE1IDgKLQkJCQkJIGE4MDAgMCAwIDMgNzAwIDE2IDgKLQkJCQkJIGE4MDAgMCAwIDQgNzAwIDE3IDgKKwkJCQkJIGE4MDAgMCAwIDEgJmlwaWMgMTQgOAorCQkJCQkgYTgwMCAwIDAgMiAmaXBpYyAxNSA4CisJCQkJCSBhODAwIDAgMCAzICZpcGljIDE2IDgKKwkJCQkJIGE4MDAgMCAwIDQgJmlwaWMgMTcgOAogCiAJCQkJCS8qIElEU0VMIDB4MTYgKi8KLQkJCQkJIGIwMDAgMCAwIDEgNzAwIDE3IDgKLQkJCQkJIGIwMDAgMCAwIDIgNzAwIDE0IDgKLQkJCQkJIGIwMDAgMCAwIDMgNzAwIDE1IDgKLQkJCQkJIGIwMDAgMCAwIDQgNzAwIDE2IDgKKwkJCQkJIGIwMDAgMCAwIDEgJmlwaWMgMTcgOAorCQkJCQkgYjAwMCAwIDAgMiAmaXBpYyAxNCA4CisJCQkJCSBiMDAwIDAgMCAzICZpcGljIDE1IDgKKwkJCQkJIGIwMDAgMCAwIDQgJmlwaWMgMTYgOAogCiAJCQkJCS8qIElEU0VMIDB4MTcgKi8KLQkJCQkJIGI4MDAgMCAwIDEgNzAwIDE2IDgKLQkJCQkJIGI4MDAgMCAwIDIgNzAwIDE3IDgKLQkJCQkJIGI4MDAgMCAwIDMgNzAwIDE0IDgKLQkJCQkJIGI4MDAgMCAwIDQgNzAwIDE1IDgKKwkJCQkJIGI4MDAgMCAwIDEgJmlwaWMgMTYgOAorCQkJCQkgYjgwMCAwIDAgMiAmaXBpYyAxNyA4CisJCQkJCSBiODAwIDAgMCAzICZpcGljIDE0IDgKKwkJCQkJIGI4MDAgMCAwIDQgJmlwaWMgMTUgOAogCiAJCQkJCS8qIElEU0VMIDB4MTggKi8KLQkJCQkJIGMwMDAgMCAwIDEgNzAwIDE1IDgKLQkJCQkJIGMwMDAgMCAwIDIgNzAwIDE2IDgKLQkJCQkJIGMwMDAgMCAwIDMgNzAwIDE3IDgKLQkJCQkJIGMwMDAgMCAwIDQgNzAwIDE0IDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJCQkgYzAwMCAwIDAgMSAmaXBpYyAxNSA4CisJCQkJCSBjMDAwIDAgMCAyICZpcGljIDE2IDgKKwkJCQkJIGMwMDAgMCAwIDMgJmlwaWMgMTcgOAorCQkJCQkgYzAwMCAwIDAgNCAmaXBpYyAxNCA4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCQlpbnRlcnJ1cHRzID0gPDQyIDg+OwogCQkJYnVzLXJhbmdlID0gPDAgMD47CiAJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCBiMDAwMDAwMCBiMDAwMDAwMCAwIDEwMDAwMDAwCkBAIC0zMDYsNyArMzAzLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAidGFsaXRvcyI7CiAJCQlyZWcgPSA8MzAwMDAgMTAwMDA+OwogCQkJaW50ZXJydXB0cyA9IDxiIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCW51bS1jaGFubmVscyA9IDw0PjsKIAkJCWNoYW5uZWwtZmlmby1sZW4gPSA8MTg+OwogCQkJZXhlYy11bml0cy1tYXNrID0gPDAwMDAwMDdlPjsKQEAgLTMyMSw4ICszMTgsNyBAQAogCQkgKiBzZW5zZSA9PSA4OiBMZXZlbCwgbG93IGFzc2VydGlvbgogCQkgKiBzZW5zZSA9PSAyOiBFZGdlLCBoaWdoLXRvLWxvdyBjaGFuZ2UKIAkJICovCi0JCXBpY0A3MDAgewotCQkJbGludXgscGhhbmRsZSA9IDw3MDA+OworCQlpcGljOiBwaWNANzAwIHsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNjBlbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNjBlbWRzLmR0cwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cwppbmRleCA5MDIyMTkyLi40ZmU0NWMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2MGVtZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMKQEAgLTE1LDE3ICsxNSwxNSBAQAogKi8KIAogLyB7Ci0JbW9kZWwgPSAiTVBDODM2MEVQQiI7Ci0JY29tcGF0aWJsZSA9ICJNUEM4M3h4IjsKKwltb2RlbCA9ICJNUEM4MzYwTURTIjsKKwljb21wYXRpYmxlID0gIk1QQzgzNjBFTURTIiwgIk1QQzgzNnhNRFMiLCAiTVBDODN4eE1EUyI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47Ci0JbGludXgscGhhbmRsZSA9IDwxMDA+OwogCiAJY3B1cyB7CiAJCSNjcHVzID0gPDE+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWxpbnV4LHBoYW5kbGUgPSA8MjAwPjsKIAogCQlQb3dlclBDLDgzNjBAMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwpAQCAtMzgsMTQgKzM2LDExIEBACiAJCQlidXMtZnJlcXVlbmN5ID0gPEZCQzUyMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDFGNzhBNDAwPjsKIAkJCTMyLWJpdDsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8MjAxPjsKLQkJCWxpbnV4LGJvb3QtY3B1OwogCQl9OwogCX07CiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlsaW51eCxwaGFuZGxlID0gPDMwMD47CiAJCXJlZyA9IDwwMDAwMDAwMCAxMDAwMDAwMD47CiAJfTsKIApAQCAtNzQsNyArNjksNyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKIAkJCXJlZyA9IDwzMDAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPGUgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJZGZzcnI7CiAJCX07CiAKQEAgLTgzLDcgKzc4LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MzEwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDxmIDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC05Myw3ICs4OCw3IEBACiAJCQlyZWcgPSA8NDUwMCAxMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPEZCQzUyMDA+OwogCQkJaW50ZXJydXB0cyA9IDw5IDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJfTsKIAogCQlzZXJpYWxANDYwMCB7CkBAIC0xMDIsNyArOTcsNyBAQAogCQkJcmVnID0gPDQ2MDAgMTAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDxGQkM1MjAwPjsKIAkJCWludGVycnVwdHMgPSA8YSA4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCX07CiAKIAkJY3J5cHRvQDMwMDAwIHsKQEAgLTExMSw3ICsxMDYsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJ0YWxpdG9zIjsKIAkJCXJlZyA9IDwzMDAwMCAxMDAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPGIgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJbnVtLWNoYW5uZWxzID0gPDQ+OwogCQkJY2hhbm5lbC1maWZvLWxlbiA9IDwxOD47CiAJCQlleGVjLXVuaXRzLW1hc2sgPSA8MDAwMDAwN2U+OwpAQCAtMTIwLDUyICsxMTUsNTEgQEAKIAkJfTsKIAogCQlwY2lAODUwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDg1MDA+OwogCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OwogCQkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJCQkvKiBJRFNFTCAweDExIEFEMTcgKi8KLQkJCQkJIDg4MDAgMCAwIDEgNzAwIDE0IDgKLQkJCQkJIDg4MDAgMCAwIDIgNzAwIDE1IDgKLQkJCQkJIDg4MDAgMCAwIDMgNzAwIDE2IDgKLQkJCQkJIDg4MDAgMCAwIDQgNzAwIDE3IDgKKwkJCQkJIDg4MDAgMCAwIDEgJmlwaWMgMTQgOAorCQkJCQkgODgwMCAwIDAgMiAmaXBpYyAxNSA4CisJCQkJCSA4ODAwIDAgMCAzICZpcGljIDE2IDgKKwkJCQkJIDg4MDAgMCAwIDQgJmlwaWMgMTcgOAogCiAJCQkJCS8qIElEU0VMIDB4MTIgQUQxOCAqLwotCQkJCQkgOTAwMCAwIDAgMSA3MDAgMTYgOAotCQkJCQkgOTAwMCAwIDAgMiA3MDAgMTcgOAotCQkJCQkgOTAwMCAwIDAgMyA3MDAgMTQgOAotCQkJCQkgOTAwMCAwIDAgNCA3MDAgMTUgOAorCQkJCQkgOTAwMCAwIDAgMSAmaXBpYyAxNiA4CisJCQkJCSA5MDAwIDAgMCAyICZpcGljIDE3IDgKKwkJCQkJIDkwMDAgMCAwIDMgJmlwaWMgMTQgOAorCQkJCQkgOTAwMCAwIDAgNCAmaXBpYyAxNSA4CiAKIAkJCQkJLyogSURTRUwgMHgxMyBBRDE5ICovCi0JCQkJCSA5ODAwIDAgMCAxIDcwMCAxNyA4Ci0JCQkJCSA5ODAwIDAgMCAyIDcwMCAxNCA4Ci0JCQkJCSA5ODAwIDAgMCAzIDcwMCAxNSA4Ci0JCQkJCSA5ODAwIDAgMCA0IDcwMCAxNiA4CisJCQkJCSA5ODAwIDAgMCAxICZpcGljIDE3IDgKKwkJCQkJIDk4MDAgMCAwIDIgJmlwaWMgMTQgOAorCQkJCQkgOTgwMCAwIDAgMyAmaXBpYyAxNSA4CisJCQkJCSA5ODAwIDAgMCA0ICZpcGljIDE2IDgKIAogCQkJCQkvKiBJRFNFTCAweDE1IEFEMjEqLwotCQkJCQkgYTgwMCAwIDAgMSA3MDAgMTQgOAotCQkJCQkgYTgwMCAwIDAgMiA3MDAgMTUgOAotCQkJCQkgYTgwMCAwIDAgMyA3MDAgMTYgOAotCQkJCQkgYTgwMCAwIDAgNCA3MDAgMTcgOAorCQkJCQkgYTgwMCAwIDAgMSAmaXBpYyAxNCA4CisJCQkJCSBhODAwIDAgMCAyICZpcGljIDE1IDgKKwkJCQkJIGE4MDAgMCAwIDMgJmlwaWMgMTYgOAorCQkJCQkgYTgwMCAwIDAgNCAmaXBpYyAxNyA4CiAKIAkJCQkJLyogSURTRUwgMHgxNiBBRDIyKi8KLQkJCQkJIGIwMDAgMCAwIDEgNzAwIDE3IDgKLQkJCQkJIGIwMDAgMCAwIDIgNzAwIDE0IDgKLQkJCQkJIGIwMDAgMCAwIDMgNzAwIDE1IDgKLQkJCQkJIGIwMDAgMCAwIDQgNzAwIDE2IDgKKwkJCQkJIGIwMDAgMCAwIDEgJmlwaWMgMTcgOAorCQkJCQkgYjAwMCAwIDAgMiAmaXBpYyAxNCA4CisJCQkJCSBiMDAwIDAgMCAzICZpcGljIDE1IDgKKwkJCQkJIGIwMDAgMCAwIDQgJmlwaWMgMTYgOAogCiAJCQkJCS8qIElEU0VMIDB4MTcgQUQyMyovCi0JCQkJCSBiODAwIDAgMCAxIDcwMCAxNiA4Ci0JCQkJCSBiODAwIDAgMCAyIDcwMCAxNyA4Ci0JCQkJCSBiODAwIDAgMCAzIDcwMCAxNCA4Ci0JCQkJCSBiODAwIDAgMCA0IDcwMCAxNSA4CisJCQkJCSBiODAwIDAgMCAxICZpcGljIDE2IDgKKwkJCQkJIGI4MDAgMCAwIDIgJmlwaWMgMTcgOAorCQkJCQkgYjgwMCAwIDAgMyAmaXBpYyAxNCA4CisJCQkJCSBiODAwIDAgMCA0ICZpcGljIDE1IDgKIAogCQkJCQkvKiBJRFNFTCAweDE4IEFEMjQqLwotCQkJCQkgYzAwMCAwIDAgMSA3MDAgMTUgOAotCQkJCQkgYzAwMCAwIDAgMiA3MDAgMTYgOAotCQkJCQkgYzAwMCAwIDAgMyA3MDAgMTcgOAotCQkJCQkgYzAwMCAwIDAgNCA3MDAgMTQgOD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CisJCQkJCSBjMDAwIDAgMCAxICZpcGljIDE1IDgKKwkJCQkJIGMwMDAgMCAwIDIgJmlwaWMgMTYgOAorCQkJCQkgYzAwMCAwIDAgMyAmaXBpYyAxNyA4CisJCQkJCSBjMDAwIDAgMCA0ICZpcGljIDE0IDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCWludGVycnVwdHMgPSA8NDIgOD47CiAJCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMTAwMDAwMDAKQEAgLTE4MCw4ICsxNzQsNyBAQAogCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAkJfTsKIAotCQlwaWNANzAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NzAwPjsKKwkJaXBpYzogcGljQDcwMCB7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKQEAgLTE5NSw4ICsxODgsNyBAQAogCQkJZGV2aWNlX3R5cGUgPSAicGFyX2lvIjsKIAkJCW51bS1wb3J0cyA9IDw3PjsKIAotCQkJdWNjX3BpbkAwMSB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDwxNDAwMDE+OworCQkJcGlvMTogdWNjX3BpbkAwMSB7CiAJCQkJcGlvLW1hcCA9IDwKIAkJCS8qIHBvcnQgIHBpbiAgZGlyICBvcGVuX2RyYWluICBhc3NpZ25tZW50ICBoYXNfaXJxICovCiAJCQkJCTAgIDMgIDEgIDAgIDEgIDAgCS8qIFR4RDAgKi8KQEAgLTIyMyw4ICsyMTUsNyBAQAogCQkJCQkyICA5ICAxICAwICAzICAwIAkvKiBHVFhfQ0xLIC0gQ0xLMTAgKi8KIAkJCQkJMiAgOCAgMiAgMCAgMSAgMD47CS8qIEdUWDEyNSAtIENMSzkgKi8KIAkJCX07Ci0JCQl1Y2NfcGluQDAyIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDE0MDAwMj47CisJCQlwaW8yOiB1Y2NfcGluQDAyIHsKIAkJCQlwaW8tbWFwID0gPAogCQkJLyogcG9ydCAgcGluICBkaXIgIG9wZW5fZHJhaW4gIGFzc2lnbm1lbnQgIGhhc19pcnEgKi8KIAkJCQkJMCAgMTEgMSAgMCAgMSAgMCAgIC8qIFR4RDAgKi8KQEAgLTI4MSw3ICsyNzIsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2xfc3BpIjsKIAkJCXJlZyA9IDw0YzAgNDA+OwogCQkJaW50ZXJydXB0cyA9IDwyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8ODA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJnFlaWMgPjsKIAkJCW1vZGUgPSAiY3B1IjsKIAkJfTsKIApAQCAtMjkwLDcgKzI4MSw3IEBACiAJCQljb21wYXRpYmxlID0gImZzbF9zcGkiOwogCQkJcmVnID0gPDUwMCA0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDE+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw4MD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmcWVpYyA+OwogCQkJbW9kZSA9ICJjcHUiOwogCQl9OwogCkBAIC0yOTksNyArMjkwLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAicWVfdWRjIjsKIAkJCXJlZyA9IDw2YzAgNDAgOEIwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDxiPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8ODA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJnFlaWMgPjsKIAkJCW1vZGUgPSAic2xhdmUiOwogCQl9OwogCkBAIC0zMTAsMTIgKzMwMSwxMiBAQAogCQkJZGV2aWNlLWlkID0gPDE+OwogCQkJcmVnID0gPDIwMDAgMjAwPjsKIAkJCWludGVycnVwdHMgPSA8MjA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw4MD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmcWVpYyA+OwogCQkJbWFjLWFkZHJlc3MgPSBbIDAwIDA0IDlmIDAwIDIzIDIzIF07CiAJCQlyeC1jbG9jayA9IDwwPjsKIAkJCXR4LWNsb2NrID0gPDE5PjsKLQkJCXBoeS1oYW5kbGUgPSA8MjEyMDAwPjsKLQkJCXBpby1oYW5kbGUgPSA8MTQwMDAxPjsKKwkJCXBoeS1oYW5kbGUgPSA8ICZwaHkwID47CisJCQlwaW8taGFuZGxlID0gPCAmcGlvMSA+OwogCQl9OwogCiAJCXVjY0AzMDAwIHsKQEAgLTMyNSwxMiArMzE2LDEyIEBACiAJCQlkZXZpY2UtaWQgPSA8Mj47CiAJCQlyZWcgPSA8MzAwMCAyMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyMT47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDgwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZxZWljID47CiAJCQltYWMtYWRkcmVzcyA9IFsgMDAgMTEgMjIgMzMgNDQgNTUgXTsKIAkJCXJ4LWNsb2NrID0gPDA+OwogCQkJdHgtY2xvY2sgPSA8MTQ+OwotCQkJcGh5LWhhbmRsZSA9IDwyMTIwMDE+OwotCQkJcGlvLWhhbmRsZSA9IDwxNDAwMDI+OworCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTEgPjsKKwkJCXBpby1oYW5kbGUgPSA8ICZwaW8yID47CiAJCX07CiAKIAkJbWRpb0AyMTIwIHsKQEAgLTM0MCwyNiArMzMxLDIzIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKIAkJCWNvbXBhdGlibGUgPSAidWNjX2dldGhfcGh5IjsKIAotCQkJZXRoZXJuZXQtcGh5QDAwIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDIxMjAwMD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OwotCQkJCWludGVycnVwdHMgPSA8MTEgMj47CisJCQlwaHkwOiBldGhlcm5ldC1waHlAMDAgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQkJaW50ZXJydXB0cyA9IDwxMSA4PjsKIAkJCQlyZWcgPSA8MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlpbnRlcmZhY2UgPSA8Nj47IC8vRU5FVF8xMDAwX0dNSUkKIAkJCX07Ci0JCQlldGhlcm5ldC1waHlAMDEgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjEyMDAxPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMiAyPjsKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAwMSB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEyIDg+OwogCQkJCXJlZyA9IDwxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJCWludGVyZmFjZSA9IDw2PjsKIAkJCX07CiAJCX07CiAKLQkJcWVpY0A4MCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDgwPjsKKwkJcWVpYzogcWVpY0A4MCB7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCWRldmljZV90eXBlID0gInFlaWMiOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CkBAIC0zNjgsNyArMzU2LDcgQEAKIAkJCWJ1aWx0LWluOwogCQkJYmlnLWVuZGlhbjsKIAkJCWludGVycnVwdHMgPSA8MjAgOCAyMSA4PjsgLy9oaWdoOjMyIGxvdzozMwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJfTsKIAogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMKaW5kZXggNWY0MWMxZi4uM2MwOTE3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cwpAQCAtMTIsMTYgKzEyLDE0IEBACiAKIC8gewogCW1vZGVsID0gIk1QQzg1NDBBRFMiOwotCWNvbXBhdGlibGUgPSAiTVBDODV4eEFEUyI7CisJY29tcGF0aWJsZSA9ICJNUEM4NTQwQURTIiwgIk1QQzg1eHhBRFMiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OwotCWxpbnV4LHBoYW5kbGUgPSA8MTAwPjsKIAogCWNwdXMgewogCQkjY3B1cyA9IDwxPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQlsaW51eCxwaGFuZGxlID0gPDIwMD47CiAKIAkJUG93ZXJQQyw4NTQwQDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKQEAgLTM0LDEzICszMiwxMSBAQAogCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJLy8gMTY2IE1IegogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkvLyA4MjUgTUh6LCBmcm9tIHVib290CiAJCQkzMi1iaXQ7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDIwMT47CiAJCX07CiAJfTsKIAogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7Ci0JCWxpbnV4LHBoYW5kbGUgPSA8MzAwPjsKIAkJcmVnID0gPDAwMDAwMDAwIDA4MDAwMDAwPjsJLy8gMTI4TSBhdCAweDAKIAl9OwogCkBAIC01OCw3ICs1NCw3IEBACiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwogCQkJcmVnID0gPDMwMDAgMTAwPjsKIAkJCWludGVycnVwdHMgPSA8MWIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAJCX07CiAKQEAgLTY4LDI0ICs2NCwyMCBAQAogCQkJZGV2aWNlX3R5cGUgPSAibWRpbyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDI0NTIwIDIwPjsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjA+OwotCQkJZXRoZXJuZXQtcGh5QDAgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwzNSAxPjsKIAkJCQlyZWcgPSA8MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07Ci0JCQlldGhlcm5ldC1waHlAMSB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDAxPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDM1IDE+OwogCQkJCXJlZyA9IDwxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKLQkJCWV0aGVybmV0LXBoeUAzIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDM+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MzcgMT47CiAJCQkJcmVnID0gPDM+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CkBAIC0xMDIsOCArOTQsOCBAQAogCQkJYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDAgXTsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDxkIDIgZSAyIDEyIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJfTsKIAogCQlldGhlcm5ldEAyNTAwMCB7CkBAIC0xMTYsOCArMTA4LDggQEAKIAkJCWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAxIF07CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDEgXTsKIAkJCWludGVycnVwdHMgPSA8MTMgMiAxNCAyIDE4IDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJfTsKIAogCQlldGhlcm5ldEAyNjAwMCB7CkBAIC0xMzAsOCArMTIyLDggQEAKIAkJCWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAyIF07CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDIgXTsKIAkJCWludGVycnVwdHMgPSA8MTkgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKLQkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMz47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OwogCQl9OwogCiAJCXNlcmlhbEA0NTAwIHsKQEAgLTE0MCw3ICsxMzIsNyBAQAogCQkJcmVnID0gPDQ1MDAgMTAwPjsgCS8vIHJlZyBiYXNlLCBzaXplCiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IAkvLyBzaG91bGQgd2UgZmlsbCBpbiBpbiB1Ym9vdD8KIAkJCWludGVycnVwdHMgPSA8MWEgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCiAJCXNlcmlhbEA0NjAwIHsKQEAgLTE0OSw4NSArMTQxLDg0IEBACiAJCQlyZWcgPSA8NDYwMCAxMDA+OwkvLyByZWcgYmFzZSwgc2l6ZQogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAJLy8gc2hvdWxkIHdlIGZpbGwgaW4gaW4gdWJvb3Q/CiAJCQlpbnRlcnJ1cHRzID0gPDFhIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAkJcGNpQDgwMDAgewotCQkJbGludXgscGhhbmRsZSA9IDw4MDAwPjsKIAkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKIAkJCWludGVycnVwdC1tYXAgPSA8CiAKIAkJCQkvKiBJRFNFTCAweDAyICovCi0JCQkJMTAwMCAwIDAgMSA0MDAwMCAzMSAxCi0JCQkJMTAwMCAwIDAgMiA0MDAwMCAzMiAxCi0JCQkJMTAwMCAwIDAgMyA0MDAwMCAzMyAxCi0JCQkJMTAwMCAwIDAgNCA0MDAwMCAzNCAxCisJCQkJMTAwMCAwIDAgMSAmbXBpYyAzMSAxCisJCQkJMTAwMCAwIDAgMiAmbXBpYyAzMiAxCisJCQkJMTAwMCAwIDAgMyAmbXBpYyAzMyAxCisJCQkJMTAwMCAwIDAgNCAmbXBpYyAzNCAxCiAKIAkJCQkvKiBJRFNFTCAweDAzICovCi0JCQkJMTgwMCAwIDAgMSA0MDAwMCAzNCAxCi0JCQkJMTgwMCAwIDAgMiA0MDAwMCAzMSAxCi0JCQkJMTgwMCAwIDAgMyA0MDAwMCAzMiAxCi0JCQkJMTgwMCAwIDAgNCA0MDAwMCAzMyAxCisJCQkJMTgwMCAwIDAgMSAmbXBpYyAzNCAxCisJCQkJMTgwMCAwIDAgMiAmbXBpYyAzMSAxCisJCQkJMTgwMCAwIDAgMyAmbXBpYyAzMiAxCisJCQkJMTgwMCAwIDAgNCAmbXBpYyAzMyAxCiAKIAkJCQkvKiBJRFNFTCAweDA0ICovCi0JCQkJMjAwMCAwIDAgMSA0MDAwMCAzMyAxCi0JCQkJMjAwMCAwIDAgMiA0MDAwMCAzNCAxCi0JCQkJMjAwMCAwIDAgMyA0MDAwMCAzMSAxCi0JCQkJMjAwMCAwIDAgNCA0MDAwMCAzMiAxCisJCQkJMjAwMCAwIDAgMSAmbXBpYyAzMyAxCisJCQkJMjAwMCAwIDAgMiAmbXBpYyAzNCAxCisJCQkJMjAwMCAwIDAgMyAmbXBpYyAzMSAxCisJCQkJMjAwMCAwIDAgNCAmbXBpYyAzMiAxCiAKIAkJCQkvKiBJRFNFTCAweDA1ICovCi0JCQkJMjgwMCAwIDAgMSA0MDAwMCAzMiAxCi0JCQkJMjgwMCAwIDAgMiA0MDAwMCAzMyAxCi0JCQkJMjgwMCAwIDAgMyA0MDAwMCAzNCAxCi0JCQkJMjgwMCAwIDAgNCA0MDAwMCAzMSAxCisJCQkJMjgwMCAwIDAgMSAmbXBpYyAzMiAxCisJCQkJMjgwMCAwIDAgMiAmbXBpYyAzMyAxCisJCQkJMjgwMCAwIDAgMyAmbXBpYyAzNCAxCisJCQkJMjgwMCAwIDAgNCAmbXBpYyAzMSAxCiAKIAkJCQkvKiBJRFNFTCAweDBjICovCi0JCQkJNjAwMCAwIDAgMSA0MDAwMCAzMSAxCi0JCQkJNjAwMCAwIDAgMiA0MDAwMCAzMiAxCi0JCQkJNjAwMCAwIDAgMyA0MDAwMCAzMyAxCi0JCQkJNjAwMCAwIDAgNCA0MDAwMCAzNCAxCisJCQkJNjAwMCAwIDAgMSAmbXBpYyAzMSAxCisJCQkJNjAwMCAwIDAgMiAmbXBpYyAzMiAxCisJCQkJNjAwMCAwIDAgMyAmbXBpYyAzMyAxCisJCQkJNjAwMCAwIDAgNCAmbXBpYyAzNCAxCiAKIAkJCQkvKiBJRFNFTCAweDBkICovCi0JCQkJNjgwMCAwIDAgMSA0MDAwMCAzNCAxCi0JCQkJNjgwMCAwIDAgMiA0MDAwMCAzMSAxCi0JCQkJNjgwMCAwIDAgMyA0MDAwMCAzMiAxCi0JCQkJNjgwMCAwIDAgNCA0MDAwMCAzMyAxCisJCQkJNjgwMCAwIDAgMSAmbXBpYyAzNCAxCisJCQkJNjgwMCAwIDAgMiAmbXBpYyAzMSAxCisJCQkJNjgwMCAwIDAgMyAmbXBpYyAzMiAxCisJCQkJNjgwMCAwIDAgNCAmbXBpYyAzMyAxCiAKIAkJCQkvKiBJRFNFTCAweDBlICovCi0JCQkJNzAwMCAwIDAgMSA0MDAwMCAzMyAxCi0JCQkJNzAwMCAwIDAgMiA0MDAwMCAzNCAxCi0JCQkJNzAwMCAwIDAgMyA0MDAwMCAzMSAxCi0JCQkJNzAwMCAwIDAgNCA0MDAwMCAzMiAxCisJCQkJNzAwMCAwIDAgMSAmbXBpYyAzMyAxCisJCQkJNzAwMCAwIDAgMiAmbXBpYyAzNCAxCisJCQkJNzAwMCAwIDAgMyAmbXBpYyAzMSAxCisJCQkJNzAwMCAwIDAgNCAmbXBpYyAzMiAxCiAKIAkJCQkvKiBJRFNFTCAweDBmICovCi0JCQkJNzgwMCAwIDAgMSA0MDAwMCAzMiAxCi0JCQkJNzgwMCAwIDAgMiA0MDAwMCAzMyAxCi0JCQkJNzgwMCAwIDAgMyA0MDAwMCAzNCAxCi0JCQkJNzgwMCAwIDAgNCA0MDAwMCAzMSAxCisJCQkJNzgwMCAwIDAgMSAmbXBpYyAzMiAxCisJCQkJNzgwMCAwIDAgMiAmbXBpYyAzMyAxCisJCQkJNzgwMCAwIDAgMyAmbXBpYyAzNCAxCisJCQkJNzgwMCAwIDAgNCAmbXBpYyAzMSAxCiAKIAkJCQkvKiBJRFNFTCAweDEyICovCi0JCQkJOTAwMCAwIDAgMSA0MDAwMCAzMSAxCi0JCQkJOTAwMCAwIDAgMiA0MDAwMCAzMiAxCi0JCQkJOTAwMCAwIDAgMyA0MDAwMCAzMyAxCi0JCQkJOTAwMCAwIDAgNCA0MDAwMCAzNCAxCisJCQkJOTAwMCAwIDAgMSAmbXBpYyAzMSAxCisJCQkJOTAwMCAwIDAgMiAmbXBpYyAzMiAxCisJCQkJOTAwMCAwIDAgMyAmbXBpYyAzMyAxCisJCQkJOTAwMCAwIDAgNCAmbXBpYyAzNCAxCiAKIAkJCQkvKiBJRFNFTCAweDEzICovCi0JCQkJOTgwMCAwIDAgMSA0MDAwMCAzNCAxCi0JCQkJOTgwMCAwIDAgMiA0MDAwMCAzMSAxCi0JCQkJOTgwMCAwIDAgMyA0MDAwMCAzMiAxCi0JCQkJOTgwMCAwIDAgNCA0MDAwMCAzMyAxCisJCQkJOTgwMCAwIDAgMSAmbXBpYyAzNCAxCisJCQkJOTgwMCAwIDAgMiAmbXBpYyAzMSAxCisJCQkJOTgwMCAwIDAgMyAmbXBpYyAzMiAxCisJCQkJOTgwMCAwIDAgNCAmbXBpYyAzMyAxCiAKIAkJCQkvKiBJRFNFTCAweDE0ICovCi0JCQkJYTAwMCAwIDAgMSA0MDAwMCAzMyAxCi0JCQkJYTAwMCAwIDAgMiA0MDAwMCAzNCAxCi0JCQkJYTAwMCAwIDAgMyA0MDAwMCAzMSAxCi0JCQkJYTAwMCAwIDAgNCA0MDAwMCAzMiAxCisJCQkJYTAwMCAwIDAgMSAmbXBpYyAzMyAxCisJCQkJYTAwMCAwIDAgMiAmbXBpYyAzNCAxCisJCQkJYTAwMCAwIDAgMyAmbXBpYyAzMSAxCisJCQkJYTAwMCAwIDAgNCAmbXBpYyAzMiAxCiAKIAkJCQkvKiBJRFNFTCAweDE1ICovCi0JCQkJYTgwMCAwIDAgMSA0MDAwMCAzMiAxCi0JCQkJYTgwMCAwIDAgMiA0MDAwMCAzMyAxCi0JCQkJYTgwMCAwIDAgMyA0MDAwMCAzNCAxCi0JCQkJYTgwMCAwIDAgNCA0MDAwMCAzMSAxPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJCWE4MDAgMCAwIDEgJm1waWMgMzIgMQorCQkJCWE4MDAgMCAwIDIgJm1waWMgMzMgMQorCQkJCWE4MDAgMCAwIDMgJm1waWMgMzQgMQorCQkJCWE4MDAgMCAwIDQgJm1waWMgMzEgMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8MDggMj47CiAJCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDgwMDAwMDAwIDgwMDAwMDAwIDAgMjAwMDAwMDAKQEAgLTI0MSw4ICsyMzIsNyBAQAogCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAkJfTsKIAotCQlwaWNANDAwMDAgewotCQkJbGludXgscGhhbmRsZSA9IDw0MDAwMD47CisJCW1waWM6IHBpY0A0MDAwMCB7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzCmluZGV4IDdiZTBiYzYuLjJhMWFlNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQxY2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMKQEAgLTEyLDE2ICsxMiwxNCBAQAogCiAvIHsKIAltb2RlbCA9ICJNUEM4NTQxQ0RTIjsKLQljb21wYXRpYmxlID0gIk1QQzg1eHhDRFMiOworCWNvbXBhdGlibGUgPSAiTVBDODU0MUNEUyIsICJNUEM4NXh4Q0RTIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKLQlsaW51eCxwaGFuZGxlID0gPDEwMD47CiAKIAljcHVzIHsKIAkJI2NwdXMgPSA8MT47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJbGludXgscGhhbmRsZSA9IDwyMDA+OwogCiAJCVBvd2VyUEMsODU0MUAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CkBAIC0zNCwxMyArMzIsMTEgQEAKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CS8vIDE2NiBNSHoKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJLy8gODI1IE1IeiwgZnJvbSB1Ym9vdAogCQkJMzItYml0OwotCQkJbGludXgscGhhbmRsZSA9IDwyMDE+OwogCQl9OwogCX07CiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlsaW51eCxwaGFuZGxlID0gPDMwMD47CiAJCXJlZyA9IDwwMDAwMDAwMCAwODAwMDAwMD47CS8vIDEyOE0gYXQgMHgwCiAJfTsKIApAQCAtNTgsNyArNTQsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKIAkJCXJlZyA9IDwzMDAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDFiIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC02OCwxNyArNjQsMTQgQEAKIAkJCWRldmljZV90eXBlID0gIm1kaW8iOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwyNDUyMCAyMD47Ci0JCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwPjsKLQkJCWV0aGVybmV0LXBoeUAwIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MzUgMD47CiAJCQkJcmVnID0gPDA+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwotCQkJZXRoZXJuZXQtcGh5QDEgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwzNSAwPjsKIAkJCQlyZWcgPSA8MT47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKQEAgLTk0LDggKzg3LDggQEAKIAkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDxkIDIgZSAyIDEyIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJfTsKIAogCQlldGhlcm5ldEAyNTAwMCB7CkBAIC0xMDcsOCArMTAwLDggQEAKIAkJCXJlZyA9IDwyNTAwMCAxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMSBdOwogCQkJaW50ZXJydXB0cyA9IDwxMyAyIDE0IDIgMTggMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKLQkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQl9OwogCiAJCXNlcmlhbEA0NTAwIHsKQEAgLTExNyw3ICsxMTAsNyBAQAogCQkJcmVnID0gPDQ1MDAgMTAwPjsgCS8vIHJlZyBiYXNlLCBzaXplCiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IAkvLyBzaG91bGQgd2UgZmlsbCBpbiBpbiB1Ym9vdD8KIAkJCWludGVycnVwdHMgPSA8MWEgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCiAJCXNlcmlhbEA0NjAwIHsKQEAgLTEyNiw1NyArMTE5LDU2IEBACiAJCQlyZWcgPSA8NDYwMCAxMDA+OwkvLyByZWcgYmFzZSwgc2l6ZQogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAJLy8gc2hvdWxkIHdlIGZpbGwgaW4gaW4gdWJvb3Q/CiAJCQlpbnRlcnJ1cHRzID0gPDFhIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAotCQlwY2lAODAwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDgwMDA+OworCQlwY2kxOiBwY2lAODAwMCB7CiAJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MWY4MDAgMCAwIDc+OwogCQkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJCS8qIElEU0VMIDB4MTAgKi8KLQkJCQkwODAwMCAwIDAgMSA0MDAwMCAzMCAxCi0JCQkJMDgwMDAgMCAwIDIgNDAwMDAgMzEgMQotCQkJCTA4MDAwIDAgMCAzIDQwMDAwIDMyIDEKLQkJCQkwODAwMCAwIDAgNCA0MDAwMCAzMyAxCisJCQkJMDgwMDAgMCAwIDEgJm1waWMgMzAgMQorCQkJCTA4MDAwIDAgMCAyICZtcGljIDMxIDEKKwkJCQkwODAwMCAwIDAgMyAmbXBpYyAzMiAxCisJCQkJMDgwMDAgMCAwIDQgJm1waWMgMzMgMQogCiAJCQkJLyogSURTRUwgMHgxMSAqLwotCQkJCTA4ODAwIDAgMCAxIDQwMDAwIDMwIDEKLQkJCQkwODgwMCAwIDAgMiA0MDAwMCAzMSAxCi0JCQkJMDg4MDAgMCAwIDMgNDAwMDAgMzIgMQotCQkJCTA4ODAwIDAgMCA0IDQwMDAwIDMzIDEKKwkJCQkwODgwMCAwIDAgMSAmbXBpYyAzMCAxCisJCQkJMDg4MDAgMCAwIDIgJm1waWMgMzEgMQorCQkJCTA4ODAwIDAgMCAzICZtcGljIDMyIDEKKwkJCQkwODgwMCAwIDAgNCAmbXBpYyAzMyAxCiAKIAkJCQkvKiBJRFNFTCAweDEyIChTbG90IDEpICovCi0JCQkJMDkwMDAgMCAwIDEgNDAwMDAgMzAgMQotCQkJCTA5MDAwIDAgMCAyIDQwMDAwIDMxIDEKLQkJCQkwOTAwMCAwIDAgMyA0MDAwMCAzMiAxCi0JCQkJMDkwMDAgMCAwIDQgNDAwMDAgMzMgMQorCQkJCTA5MDAwIDAgMCAxICZtcGljIDMwIDEKKwkJCQkwOTAwMCAwIDAgMiAmbXBpYyAzMSAxCisJCQkJMDkwMDAgMCAwIDMgJm1waWMgMzIgMQorCQkJCTA5MDAwIDAgMCA0ICZtcGljIDMzIDEKIAogCQkJCS8qIElEU0VMIDB4MTMgKFNsb3QgMikgKi8KLQkJCQkwOTgwMCAwIDAgMSA0MDAwMCAzMSAxCi0JCQkJMDk4MDAgMCAwIDIgNDAwMDAgMzIgMQotCQkJCTA5ODAwIDAgMCAzIDQwMDAwIDMzIDEKLQkJCQkwOTgwMCAwIDAgNCA0MDAwMCAzMCAxCisJCQkJMDk4MDAgMCAwIDEgJm1waWMgMzEgMQorCQkJCTA5ODAwIDAgMCAyICZtcGljIDMyIDEKKwkJCQkwOTgwMCAwIDAgMyAmbXBpYyAzMyAxCisJCQkJMDk4MDAgMCAwIDQgJm1waWMgMzAgMQogCiAJCQkJLyogSURTRUwgMHgxNCAoU2xvdCAzKSAqLwotCQkJCTBhMDAwIDAgMCAxIDQwMDAwIDMyIDEKLQkJCQkwYTAwMCAwIDAgMiA0MDAwMCAzMyAxCi0JCQkJMGEwMDAgMCAwIDMgNDAwMDAgMzAgMQotCQkJCTBhMDAwIDAgMCA0IDQwMDAwIDMxIDEKKwkJCQkwYTAwMCAwIDAgMSAmbXBpYyAzMiAxCisJCQkJMGEwMDAgMCAwIDIgJm1waWMgMzMgMQorCQkJCTBhMDAwIDAgMCAzICZtcGljIDMwIDEKKwkJCQkwYTAwMCAwIDAgNCAmbXBpYyAzMSAxCiAKIAkJCQkvKiBJRFNFTCAweDE1IChTbG90IDQpICovCi0JCQkJMGE4MDAgMCAwIDEgNDAwMDAgMzMgMQotCQkJCTBhODAwIDAgMCAyIDQwMDAwIDMwIDEKLQkJCQkwYTgwMCAwIDAgMyA0MDAwMCAzMSAxCi0JCQkJMGE4MDAgMCAwIDQgNDAwMDAgMzIgMQorCQkJCTBhODAwIDAgMCAxICZtcGljIDMzIDEKKwkJCQkwYTgwMCAwIDAgMiAmbXBpYyAzMCAxCisJCQkJMGE4MDAgMCAwIDMgJm1waWMgMzEgMQorCQkJCTBhODAwIDAgMCA0ICZtcGljIDMyIDEKIAogCQkJCS8qIEJ1cyAxIChUdW5kcmEgQnJpZGdlKSAqLwogCQkJCS8qIElEU0VMIDB4MTIgKElTQSBicmlkZ2UpICovCi0JCQkJMTkwMDAgMCAwIDEgNDAwMDAgMzAgMQotCQkJCTE5MDAwIDAgMCAyIDQwMDAwIDMxIDEKLQkJCQkxOTAwMCAwIDAgMyA0MDAwMCAzMiAxCi0JCQkJMTkwMDAgMCAwIDQgNDAwMDAgMzMgMT47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCQkxOTAwMCAwIDAgMSAmbXBpYyAzMCAxCisJCQkJMTkwMDAgMCAwIDIgJm1waWMgMzEgMQorCQkJCTE5MDAwIDAgMCAzICZtcGljIDMyIDEKKwkJCQkxOTAwMCAwIDAgNCAmbXBpYyAzMyAxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJaW50ZXJydXB0cyA9IDwwOCAyPjsKIAkJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAyMDAwMDAwMApAQCAtMjAwLDIxICsxOTIsMjAgQEAKIAkJCQljb21wYXRpYmxlID0gImNocnAsaWljIjsKIAkJCQliaWctZW5kaWFuOwogCQkJCWludGVycnVwdHMgPSA8MT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw4MDAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZwY2kxPjsKIAkJCX07CiAJCX07CiAKIAkJcGNpQDkwMDAgewotCQkJbGludXgscGhhbmRsZSA9IDw5MDAwPjsKIAkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKIAkJCWludGVycnVwdC1tYXAgPSA8CiAKIAkJCQkvKiBJRFNFTCAweDE1ICovCi0JCQkJYTgwMCAwIDAgMSA0MDAwMCAzYiAxCi0JCQkJYTgwMCAwIDAgMiA0MDAwMCAzYiAxCi0JCQkJYTgwMCAwIDAgMyA0MDAwMCAzYiAxCi0JCQkJYTgwMCAwIDAgNCA0MDAwMCAzYiAxPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJCWE4MDAgMCAwIDEgJm1waWMgM2IgMQorCQkJCWE4MDAgMCAwIDIgJm1waWMgM2IgMQorCQkJCWE4MDAgMCAwIDMgJm1waWMgM2IgMQorCQkJCWE4MDAgMCAwIDQgJm1waWMgM2IgMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8MDkgMj47CiAJCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMjAwMDAwMDAKQEAgLTIyOCw4ICsyMTksNyBAQAogCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAkJfTsKIAotCQlwaWNANDAwMDAgewotCQkJbGludXgscGhhbmRsZSA9IDw0MDAwMD47CisJCW1waWM6IHBpY0A0MDAwMCB7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzCmluZGV4IDg5M2Q3OTUuLjdlYjVkODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMKQEAgLTEyLDE2ICsxMiwxNCBAQAogCiAvIHsKIAltb2RlbCA9ICJNUEM4NTQ4Q0RTIjsKLQljb21wYXRpYmxlID0gIk1QQzg1eHhDRFMiOworCWNvbXBhdGlibGUgPSAiTVBDODU0OENEUyIsICJNUEM4NXh4Q0RTIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKLQlsaW51eCxwaGFuZGxlID0gPDEwMD47CiAKIAljcHVzIHsKIAkJI2NwdXMgPSA8MT47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJbGludXgscGhhbmRsZSA9IDwyMDA+OwogCiAJCVBvd2VyUEMsODU0OEAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CkBAIC0zNCwxMyArMzIsMTEgQEAKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CS8vIDE2NiBNSHoKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJLy8gODI1IE1IeiwgZnJvbSB1Ym9vdAogCQkJMzItYml0OwotCQkJbGludXgscGhhbmRsZSA9IDwyMDE+OwogCQl9OwogCX07CiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlsaW51eCxwaGFuZGxlID0gPDMwMD47CiAJCXJlZyA9IDwwMDAwMDAwMCAwODAwMDAwMD47CS8vIDEyOE0gYXQgMHgwCiAJfTsKIApAQCAtNTgsNyArNTQsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKIAkJCXJlZyA9IDwzMDAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDFiIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC02OCwzMiArNjQsMjYgQEAKIAkJCWRldmljZV90eXBlID0gIm1kaW8iOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwyNDUyMCAyMD47Ci0JCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwPjsKLQkJCWV0aGVybmV0LXBoeUAwIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MzUgMD47CiAJCQkJcmVnID0gPDA+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwotCQkJZXRoZXJuZXQtcGh5QDEgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwzNSAwPjsKIAkJCQlyZWcgPSA8MT47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07Ci0KLQkJCWV0aGVybmV0LXBoeUAyIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDI+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MzUgMD47CiAJCQkJcmVnID0gPDI+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwotCQkJZXRoZXJuZXQtcGh5QDMgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMz47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwzNSAwPjsKIAkJCQlyZWcgPSA8Mz47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKQEAgLTEwOSw4ICs5OSw4IEBACiAJCQlyZWcgPSA8MjQwMDAgMTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8ZCAyIGUgMiAxMiAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OwotCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CiAKIAkJZXRoZXJuZXRAMjUwMDAgewpAQCAtMTIyLDEwICsxMTIsMTEgQEAKIAkJCXJlZyA9IDwyNTAwMCAxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMSBdOwogCQkJaW50ZXJydXB0cyA9IDwxMyAyIDE0IDIgMTggMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKLQkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQl9OwogCisvKiBlVFNFQyAzLzQgYXJlIGN1cnJlbnRseSBicm9rZW4KIAkJZXRoZXJuZXRAMjYwMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTEzNSwxMSArMTI2LDEwIEBACiAJCQlyZWcgPSA8MjYwMDAgMTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDIgXTsKIAkJCWludGVycnVwdHMgPSA8ZiAyIDEwIDIgMTEgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKLQkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OwogCQl9OwogCi0vKiBlVFNFQyA0IGlzIGN1cnJlbnRseSBicm9rZW4KIAkJZXRoZXJuZXRAMjcwMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTE0OSw4ICsxMzksOCBAQAogCQkJcmVnID0gPDI3MDAwIDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAzIF07CiAJCQlpbnRlcnJ1cHRzID0gPDE1IDIgMTYgMiAxNyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OwotCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CiAJCX07CiAgKi8KIApAQCAtMTYwLDcgKzE1MCw3IEBACiAJCQlyZWcgPSA8NDUwMCAxMDA+OyAJLy8gcmVnIGJhc2UsIHNpemUKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgCS8vIHNob3VsZCB3ZSBmaWxsIGluIGluIHVib290PwogCQkJaW50ZXJydXB0cyA9IDwxYSAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJc2VyaWFsQDQ2MDAgewpAQCAtMTY5LDU3ICsxNTksNTYgQEAKIAkJCXJlZyA9IDw0NjAwIDEwMD47CS8vIHJlZyBiYXNlLCBzaXplCiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IAkvLyBzaG91bGQgd2UgZmlsbCBpbiBpbiB1Ym9vdD8KIAkJCWludGVycnVwdHMgPSA8MWEgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCi0JCXBjaUA4MDAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8ODAwMD47CisJCXBjaTE6IHBjaUA4MDAwIHsKIAkJCWludGVycnVwdC1tYXAtbWFzayA9IDwxZjgwMCAwIDAgNz47CiAJCQlpbnRlcnJ1cHQtbWFwID0gPAogCiAJCQkJLyogSURTRUwgMHgxMCAqLwotCQkJCTA4MDAwIDAgMCAxIDQwMDAwIDMwIDEKLQkJCQkwODAwMCAwIDAgMiA0MDAwMCAzMSAxCi0JCQkJMDgwMDAgMCAwIDMgNDAwMDAgMzIgMQotCQkJCTA4MDAwIDAgMCA0IDQwMDAwIDMzIDEKKwkJCQkwODAwMCAwIDAgMSAmbXBpYyAzMCAxCisJCQkJMDgwMDAgMCAwIDIgJm1waWMgMzEgMQorCQkJCTA4MDAwIDAgMCAzICZtcGljIDMyIDEKKwkJCQkwODAwMCAwIDAgNCAmbXBpYyAzMyAxCiAKIAkJCQkvKiBJRFNFTCAweDExICovCi0JCQkJMDg4MDAgMCAwIDEgNDAwMDAgMzAgMQotCQkJCTA4ODAwIDAgMCAyIDQwMDAwIDMxIDEKLQkJCQkwODgwMCAwIDAgMyA0MDAwMCAzMiAxCi0JCQkJMDg4MDAgMCAwIDQgNDAwMDAgMzMgMQorCQkJCTA4ODAwIDAgMCAxICZtcGljIDMwIDEKKwkJCQkwODgwMCAwIDAgMiAmbXBpYyAzMSAxCisJCQkJMDg4MDAgMCAwIDMgJm1waWMgMzIgMQorCQkJCTA4ODAwIDAgMCA0ICZtcGljIDMzIDEKIAogCQkJCS8qIElEU0VMIDB4MTIgKFNsb3QgMSkgKi8KLQkJCQkwOTAwMCAwIDAgMSA0MDAwMCAzMCAxCi0JCQkJMDkwMDAgMCAwIDIgNDAwMDAgMzEgMQotCQkJCTA5MDAwIDAgMCAzIDQwMDAwIDMyIDEKLQkJCQkwOTAwMCAwIDAgNCA0MDAwMCAzMyAxCisJCQkJMDkwMDAgMCAwIDEgJm1waWMgMzAgMQorCQkJCTA5MDAwIDAgMCAyICZtcGljIDMxIDEKKwkJCQkwOTAwMCAwIDAgMyAmbXBpYyAzMiAxCisJCQkJMDkwMDAgMCAwIDQgJm1waWMgMzMgMQogCiAJCQkJLyogSURTRUwgMHgxMyAoU2xvdCAyKSAqLwotCQkJCTA5ODAwIDAgMCAxIDQwMDAwIDMxIDEKLQkJCQkwOTgwMCAwIDAgMiA0MDAwMCAzMiAxCi0JCQkJMDk4MDAgMCAwIDMgNDAwMDAgMzMgMQotCQkJCTA5ODAwIDAgMCA0IDQwMDAwIDMwIDEKKwkJCQkwOTgwMCAwIDAgMSAmbXBpYyAzMSAxCisJCQkJMDk4MDAgMCAwIDIgJm1waWMgMzIgMQorCQkJCTA5ODAwIDAgMCAzICZtcGljIDMzIDEKKwkJCQkwOTgwMCAwIDAgNCAmbXBpYyAzMCAxCiAKIAkJCQkvKiBJRFNFTCAweDE0IChTbG90IDMpICovCi0JCQkJMGEwMDAgMCAwIDEgNDAwMDAgMzIgMQotCQkJCTBhMDAwIDAgMCAyIDQwMDAwIDMzIDEKLQkJCQkwYTAwMCAwIDAgMyA0MDAwMCAzMCAxCi0JCQkJMGEwMDAgMCAwIDQgNDAwMDAgMzEgMQorCQkJCTBhMDAwIDAgMCAxICZtcGljIDMyIDEKKwkJCQkwYTAwMCAwIDAgMiAmbXBpYyAzMyAxCisJCQkJMGEwMDAgMCAwIDMgJm1waWMgMzAgMQorCQkJCTBhMDAwIDAgMCA0ICZtcGljIDMxIDEKIAogCQkJCS8qIElEU0VMIDB4MTUgKFNsb3QgNCkgKi8KLQkJCQkwYTgwMCAwIDAgMSA0MDAwMCAzMyAxCi0JCQkJMGE4MDAgMCAwIDIgNDAwMDAgMzAgMQotCQkJCTBhODAwIDAgMCAzIDQwMDAwIDMxIDEKLQkJCQkwYTgwMCAwIDAgNCA0MDAwMCAzMiAxCisJCQkJMGE4MDAgMCAwIDEgJm1waWMgMzMgMQorCQkJCTBhODAwIDAgMCAyICZtcGljIDMwIDEKKwkJCQkwYTgwMCAwIDAgMyAmbXBpYyAzMSAxCisJCQkJMGE4MDAgMCAwIDQgJm1waWMgMzIgMQogCiAJCQkJLyogQnVzIDEgKFR1bmRyYSBCcmlkZ2UpICovCiAJCQkJLyogSURTRUwgMHgxMiAoSVNBIGJyaWRnZSkgKi8KLQkJCQkxOTAwMCAwIDAgMSA0MDAwMCAzMCAxCi0JCQkJMTkwMDAgMCAwIDIgNDAwMDAgMzEgMQotCQkJCTE5MDAwIDAgMCAzIDQwMDAwIDMyIDEKLQkJCQkxOTAwMCAwIDAgNCA0MDAwMCAzMyAxPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJCTE5MDAwIDAgMCAxICZtcGljIDMwIDEKKwkJCQkxOTAwMCAwIDAgMiAmbXBpYyAzMSAxCisJCQkJMTkwMDAgMCAwIDMgJm1waWMgMzIgMQorCQkJCTE5MDAwIDAgMCA0ICZtcGljIDMzIDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlpbnRlcnJ1cHRzID0gPDA4IDI+OwogCQkJYnVzLXJhbmdlID0gPDAgMD47CiAJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDIwMDAwMDAwCkBAIC0yNDMsMjEgKzIzMiwyMCBAQAogCQkJCWNvbXBhdGlibGUgPSAiY2hycCxpaWMiOwogCQkJCWJpZy1lbmRpYW47CiAJCQkJaW50ZXJydXB0cyA9IDwxPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDgwMDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JnBjaTE+OwogCQkJfTsKIAkJfTsKIAogCQlwY2lAOTAwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDkwMDA+OwogCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OwogCQkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJCS8qIElEU0VMIDB4MTUgKi8KLQkJCQlhODAwIDAgMCAxIDQwMDAwIDNiIDEKLQkJCQlhODAwIDAgMCAyIDQwMDAwIDNiIDEKLQkJCQlhODAwIDAgMCAzIDQwMDAwIDNiIDEKLQkJCQlhODAwIDAgMCA0IDQwMDAwIDNiIDE+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQkJYTgwMCAwIDAgMSAmbXBpYyAzYiAxCisJCQkJYTgwMCAwIDAgMiAmbXBpYyAzYiAxCisJCQkJYTgwMCAwIDAgMyAmbXBpYyAzYiAxCisJCQkJYTgwMCAwIDAgNCAmbXBpYyAzYiAxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJaW50ZXJydXB0cyA9IDwwOSAyPjsKIAkJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYTAwMDAwMDAgYTAwMDAwMDAgMCAyMDAwMDAwMApAQCAtMjcxLDggKzI1OSw3IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQl9OwogCi0JCXBpY0A0MDAwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDQwMDAwPjsKKwkJbXBpYzogcGljQDQwMDAwIHsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMKaW5kZXggMTE4ZjVhOC4uNWY5YzEwMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTU1Y2RzLmR0cwpAQCAtMTIsMTYgKzEyLDE0IEBACiAKIC8gewogCW1vZGVsID0gIk1QQzg1NTVDRFMiOwotCWNvbXBhdGlibGUgPSAiTVBDODV4eENEUyI7CisJY29tcGF0aWJsZSA9ICJNUEM4NTU1Q0RTIiwgIk1QQzg1eHhDRFMiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OwotCWxpbnV4LHBoYW5kbGUgPSA8MTAwPjsKIAogCWNwdXMgewogCQkjY3B1cyA9IDwxPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQlsaW51eCxwaGFuZGxlID0gPDIwMD47CiAKIAkJUG93ZXJQQyw4NTU1QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKQEAgLTM0LDEzICszMiwxMSBAQAogCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJLy8gMTY2IE1IegogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkvLyA4MjUgTUh6LCBmcm9tIHVib290CiAJCQkzMi1iaXQ7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDIwMT47CiAJCX07CiAJfTsKIAogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7Ci0JCWxpbnV4LHBoYW5kbGUgPSA8MzAwPjsKIAkJcmVnID0gPDAwMDAwMDAwIDA4MDAwMDAwPjsJLy8gMTI4TSBhdCAweDAKIAl9OwogCkBAIC01OCw3ICs1NCw3IEBACiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwogCQkJcmVnID0gPDMwMDAgMTAwPjsKIAkJCWludGVycnVwdHMgPSA8MWIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAJCX07CiAKQEAgLTY4LDE3ICs2NCwxNCBAQAogCQkJZGV2aWNlX3R5cGUgPSAibWRpbyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDI0NTIwIDIwPjsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjA+OwotCQkJZXRoZXJuZXQtcGh5QDAgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwzNSAwPjsKIAkJCQlyZWcgPSA8MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07Ci0JCQlldGhlcm5ldC1waHlAMSB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDAxPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDM1IDA+OwogCQkJCXJlZyA9IDwxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwpAQCAtOTQsOCArODcsOCBAQAogCQkJcmVnID0gPDI0MDAwIDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDBkIDIgMGUgMiAxMiAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OwotCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CiAKIAkJZXRoZXJuZXRAMjUwMDAgewpAQCAtMTA3LDggKzEwMCw4IEBACiAJCQlyZWcgPSA8MjUwMDAgMTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDEgXTsKIAkJCWludGVycnVwdHMgPSA8MTMgMiAxNCAyIDE4IDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJfTsKIAogCQlzZXJpYWxANDUwMCB7CkBAIC0xMTcsNyArMTEwLDcgQEAKIAkJCXJlZyA9IDw0NTAwIDEwMD47IAkvLyByZWcgYmFzZSwgc2l6ZQogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAJLy8gc2hvdWxkIHdlIGZpbGwgaW4gaW4gdWJvb3Q/CiAJCQlpbnRlcnJ1cHRzID0gPDFhIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAogCQlzZXJpYWxANDYwMCB7CkBAIC0xMjYsNTcgKzExOSw1NiBAQAogCQkJcmVnID0gPDQ2MDAgMTAwPjsJLy8gcmVnIGJhc2UsIHNpemUKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgCS8vIHNob3VsZCB3ZSBmaWxsIGluIGluIHVib290PwogCQkJaW50ZXJydXB0cyA9IDwxYSAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKLQkJcGNpQDgwMDAgewotCQkJbGludXgscGhhbmRsZSA9IDw4MDAwPjsKKwkJcGNpMTogcGNpQDgwMDAgewogCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDFmODAwIDAgMCA3PjsKIAkJCWludGVycnVwdC1tYXAgPSA8CiAKIAkJCQkvKiBJRFNFTCAweDEwICovCi0JCQkJMDgwMDAgMCAwIDEgNDAwMDAgMzAgMQotCQkJCTA4MDAwIDAgMCAyIDQwMDAwIDMxIDEKLQkJCQkwODAwMCAwIDAgMyA0MDAwMCAzMiAxCi0JCQkJMDgwMDAgMCAwIDQgNDAwMDAgMzMgMQorCQkJCTA4MDAwIDAgMCAxICZtcGljIDMwIDEKKwkJCQkwODAwMCAwIDAgMiAmbXBpYyAzMSAxCisJCQkJMDgwMDAgMCAwIDMgJm1waWMgMzIgMQorCQkJCTA4MDAwIDAgMCA0ICZtcGljIDMzIDEKIAogCQkJCS8qIElEU0VMIDB4MTEgKi8KLQkJCQkwODgwMCAwIDAgMSA0MDAwMCAzMCAxCi0JCQkJMDg4MDAgMCAwIDIgNDAwMDAgMzEgMQotCQkJCTA4ODAwIDAgMCAzIDQwMDAwIDMyIDEKLQkJCQkwODgwMCAwIDAgNCA0MDAwMCAzMyAxCisJCQkJMDg4MDAgMCAwIDEgJm1waWMgMzAgMQorCQkJCTA4ODAwIDAgMCAyICZtcGljIDMxIDEKKwkJCQkwODgwMCAwIDAgMyAmbXBpYyAzMiAxCisJCQkJMDg4MDAgMCAwIDQgJm1waWMgMzMgMQogCiAJCQkJLyogSURTRUwgMHgxMiAoU2xvdCAxKSAqLwotCQkJCTA5MDAwIDAgMCAxIDQwMDAwIDMwIDEKLQkJCQkwOTAwMCAwIDAgMiA0MDAwMCAzMSAxCi0JCQkJMDkwMDAgMCAwIDMgNDAwMDAgMzIgMQotCQkJCTA5MDAwIDAgMCA0IDQwMDAwIDMzIDEKKwkJCQkwOTAwMCAwIDAgMSAmbXBpYyAzMCAxCisJCQkJMDkwMDAgMCAwIDIgJm1waWMgMzEgMQorCQkJCTA5MDAwIDAgMCAzICZtcGljIDMyIDEKKwkJCQkwOTAwMCAwIDAgNCAmbXBpYyAzMyAxCiAKIAkJCQkvKiBJRFNFTCAweDEzIChTbG90IDIpICovCi0JCQkJMDk4MDAgMCAwIDEgNDAwMDAgMzEgMQotCQkJCTA5ODAwIDAgMCAyIDQwMDAwIDMyIDEKLQkJCQkwOTgwMCAwIDAgMyA0MDAwMCAzMyAxCi0JCQkJMDk4MDAgMCAwIDQgNDAwMDAgMzAgMQorCQkJCTA5ODAwIDAgMCAxICZtcGljIDMxIDEKKwkJCQkwOTgwMCAwIDAgMiAmbXBpYyAzMiAxCisJCQkJMDk4MDAgMCAwIDMgJm1waWMgMzMgMQorCQkJCTA5ODAwIDAgMCA0ICZtcGljIDMwIDEKIAogCQkJCS8qIElEU0VMIDB4MTQgKFNsb3QgMykgKi8KLQkJCQkwYTAwMCAwIDAgMSA0MDAwMCAzMiAxCi0JCQkJMGEwMDAgMCAwIDIgNDAwMDAgMzMgMQotCQkJCTBhMDAwIDAgMCAzIDQwMDAwIDMwIDEKLQkJCQkwYTAwMCAwIDAgNCA0MDAwMCAzMSAxCisJCQkJMGEwMDAgMCAwIDEgJm1waWMgMzIgMQorCQkJCTBhMDAwIDAgMCAyICZtcGljIDMzIDEKKwkJCQkwYTAwMCAwIDAgMyAmbXBpYyAzMCAxCisJCQkJMGEwMDAgMCAwIDQgJm1waWMgMzEgMQogCiAJCQkJLyogSURTRUwgMHgxNSAoU2xvdCA0KSAqLwotCQkJCTBhODAwIDAgMCAxIDQwMDAwIDMzIDEKLQkJCQkwYTgwMCAwIDAgMiA0MDAwMCAzMCAxCi0JCQkJMGE4MDAgMCAwIDMgNDAwMDAgMzEgMQotCQkJCTBhODAwIDAgMCA0IDQwMDAwIDMyIDEKKwkJCQkwYTgwMCAwIDAgMSAmbXBpYyAzMyAxCisJCQkJMGE4MDAgMCAwIDIgJm1waWMgMzAgMQorCQkJCTBhODAwIDAgMCAzICZtcGljIDMxIDEKKwkJCQkwYTgwMCAwIDAgNCAmbXBpYyAzMiAxCiAKIAkJCQkvKiBCdXMgMSAoVHVuZHJhIEJyaWRnZSkgKi8KIAkJCQkvKiBJRFNFTCAweDEyIChJU0EgYnJpZGdlKSAqLwotCQkJCTE5MDAwIDAgMCAxIDQwMDAwIDMwIDEKLQkJCQkxOTAwMCAwIDAgMiA0MDAwMCAzMSAxCi0JCQkJMTkwMDAgMCAwIDMgNDAwMDAgMzIgMQotCQkJCTE5MDAwIDAgMCA0IDQwMDAwIDMzIDE+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQkJMTkwMDAgMCAwIDEgJm1waWMgMzAgMQorCQkJCTE5MDAwIDAgMCAyICZtcGljIDMxIDEKKwkJCQkxOTAwMCAwIDAgMyAmbXBpYyAzMiAxCisJCQkJMTkwMDAgMCAwIDQgJm1waWMgMzMgMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8MDggMj47CiAJCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDgwMDAwMDAwIDgwMDAwMDAwIDAgMjAwMDAwMDAKQEAgLTIwMCwyMSArMTkyLDIwIEBACiAJCQkJY29tcGF0aWJsZSA9ICJjaHJwLGlpYyI7CiAJCQkJYmlnLWVuZGlhbjsKIAkJCQlpbnRlcnJ1cHRzID0gPDE+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8ODAwMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmcGNpMT47CiAJCQl9OwogCQl9OwogCiAJCXBjaUA5MDAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8OTAwMD47CiAJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CiAJCQlpbnRlcnJ1cHQtbWFwID0gPAogCiAJCQkJLyogSURTRUwgMHgxNSAqLwotCQkJCWE4MDAgMCAwIDEgNDAwMDAgM2IgMQotCQkJCWE4MDAgMCAwIDIgNDAwMDAgM2IgMQotCQkJCWE4MDAgMCAwIDMgNDAwMDAgM2IgMQotCQkJCWE4MDAgMCAwIDQgNDAwMDAgM2IgMT47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCQlhODAwIDAgMCAxICZtcGljIDNiIDEKKwkJCQlhODAwIDAgMCAyICZtcGljIDNiIDEKKwkJCQlhODAwIDAgMCAzICZtcGljIDNiIDEKKwkJCQlhODAwIDAgMCA0ICZtcGljIDNiIDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlpbnRlcnJ1cHRzID0gPDA5IDI+OwogCQkJYnVzLXJhbmdlID0gPDAgMD47CiAJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCBhMDAwMDAwMCBhMDAwMDAwMCAwIDIwMDAwMDAwCkBAIC0yMjgsOCArMjE5LDcgQEAKIAkJCWRldmljZV90eXBlID0gInBjaSI7CiAJCX07CiAKLQkJcGljQDQwMDAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NDAwMDA+OworCQltcGljOiBwaWNANDAwMDAgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cwppbmRleCAxMTliZDVkLi4xMDUwMjYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2MGFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjBhZHMuZHRzCkBAIC0xMiwxNiArMTIsMTQgQEAKIAogLyB7CiAJbW9kZWwgPSAiTVBDODU2MEFEUyI7Ci0JY29tcGF0aWJsZSA9ICJNUEM4NXh4QURTIjsKKwljb21wYXRpYmxlID0gIk1QQzg1NjBBRFMiLCAiTVBDODV4eEFEUyI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47Ci0JbGludXgscGhhbmRsZSA9IDwxMDA+OwogCiAJY3B1cyB7CiAJCSNjcHVzID0gPDE+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWxpbnV4LHBoYW5kbGUgPSA8MjAwPjsKIAogCQlQb3dlclBDLDg1NjBAMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwpAQCAtMzQsMTQgKzMyLDExIEBACiAJCQlidXMtZnJlcXVlbmN5ID0gPDEzYWI2NjgwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMTJjODA0MD47CiAJCQkzMi1iaXQ7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDIwMT47Ci0JCQlsaW51eCxib290LWNwdTsKIAkJfTsKIAl9OwogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJbGludXgscGhhbmRsZSA9IDwzMDA+OwogCQlyZWcgPSA8MDAwMDAwMDAgMTAwMDAwMDA+OwogCX07CiAKQEAgLTU4LDMzICs1MywyOCBAQAogCQkJZGV2aWNlX3R5cGUgPSAibWRpbyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDI0NTIwIDIwPjsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWV0aGVybmV0LXBoeUAwIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MzUgMT47CiAJCQkJcmVnID0gPDA+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwotCQkJZXRoZXJuZXQtcGh5QDEgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwzNSAxPjsKIAkJCQlyZWcgPSA8MT47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07Ci0JCQlldGhlcm5ldC1waHlAMiB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDAyPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDM3IDE+OwogCQkJCXJlZyA9IDwyPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKLQkJCWV0aGVybmV0LXBoeUAzIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDM+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MzcgMT47CiAJCQkJcmVnID0gPDM+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CkBAIC05OCw4ICs4OCw4IEBACiAJCQlyZWcgPSA8MjQwMDAgMTAwMD47CiAJCQlhZGRyZXNzID0gWyAwMCAwMCAwQyAwMCAwMCBGRCBdOwogCQkJaW50ZXJydXB0cyA9IDxkIDIgZSAyIDEyIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJfTsKIAogCQlldGhlcm5ldEAyNTAwMCB7CkBAIC0xMTEsMTIgKzEwMSwxMSBAQAogCQkJcmVnID0gPDI1MDAwIDEwMDA+OwogCQkJYWRkcmVzcyA9IFsgMDAgMDAgMEMgMDAgMDEgRkQgXTsKIAkJCWludGVycnVwdHMgPSA8MTMgMiAxNCAyIDE4IDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJfTsKIAogCQlwY2lAODAwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDgwMDA+OwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDI+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CkBAIC0xMjgsOTYgKzExNyw5NCBAQAogCQkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJCQkvKiBJRFNFTCAweDIgKi8KLQkJCQkJIDEwMDAgMCAwIDEgNDAwMDAgMzEgMQotCQkJCQkgMTAwMCAwIDAgMiA0MDAwMCAzMiAxCi0JCQkJCSAxMDAwIDAgMCAzIDQwMDAwIDMzIDEKLQkJCQkJIDEwMDAgMCAwIDQgNDAwMDAgMzQgMQorCQkJCQkgMTAwMCAwIDAgMSAmbXBpYyAzMSAxCisJCQkJCSAxMDAwIDAgMCAyICZtcGljIDMyIDEKKwkJCQkJIDEwMDAgMCAwIDMgJm1waWMgMzMgMQorCQkJCQkgMTAwMCAwIDAgNCAmbXBpYyAzNCAxCiAKIAkJCQkJLyogSURTRUwgMHgzICovCi0JCQkJCSAxODAwIDAgMCAxIDQwMDAwIDM0IDEKLQkJCQkJIDE4MDAgMCAwIDIgNDAwMDAgMzEgMQotCQkJCQkgMTgwMCAwIDAgMyA0MDAwMCAzMiAxCi0JCQkJCSAxODAwIDAgMCA0IDQwMDAwIDMzIDEKKwkJCQkJIDE4MDAgMCAwIDEgJm1waWMgMzQgMQorCQkJCQkgMTgwMCAwIDAgMiAmbXBpYyAzMSAxCisJCQkJCSAxODAwIDAgMCAzICZtcGljIDMyIDEKKwkJCQkJIDE4MDAgMCAwIDQgJm1waWMgMzMgMQogCiAJCQkJCS8qIElEU0VMIDB4NCAqLwotCQkJCQkgMjAwMCAwIDAgMSA0MDAwMCAzMyAxCi0JCQkJCSAyMDAwIDAgMCAyIDQwMDAwIDM0IDEKLQkJCQkJIDIwMDAgMCAwIDMgNDAwMDAgMzEgMQotCQkJCQkgMjAwMCAwIDAgNCA0MDAwMCAzMiAxCisJCQkJCSAyMDAwIDAgMCAxICZtcGljIDMzIDEKKwkJCQkJIDIwMDAgMCAwIDIgJm1waWMgMzQgMQorCQkJCQkgMjAwMCAwIDAgMyAmbXBpYyAzMSAxCisJCQkJCSAyMDAwIDAgMCA0ICZtcGljIDMyIDEKIAogCQkJCQkvKiBJRFNFTCAweDUgICovCi0JCQkJCSAyODAwIDAgMCAxIDQwMDAwIDMyIDEKLQkJCQkJIDI4MDAgMCAwIDIgNDAwMDAgMzMgMQotCQkJCQkgMjgwMCAwIDAgMyA0MDAwMCAzNCAxCi0JCQkJCSAyODAwIDAgMCA0IDQwMDAwIDMxIDEKKwkJCQkJIDI4MDAgMCAwIDEgJm1waWMgMzIgMQorCQkJCQkgMjgwMCAwIDAgMiAmbXBpYyAzMyAxCisJCQkJCSAyODAwIDAgMCAzICZtcGljIDM0IDEKKwkJCQkJIDI4MDAgMCAwIDQgJm1waWMgMzEgMQogCiAJCQkJCS8qIElEU0VMIDEyICovCi0JCQkJCSA2MDAwIDAgMCAxIDQwMDAwIDMxIDEKLQkJCQkJIDYwMDAgMCAwIDIgNDAwMDAgMzIgMQotCQkJCQkgNjAwMCAwIDAgMyA0MDAwMCAzMyAxCi0JCQkJCSA2MDAwIDAgMCA0IDQwMDAwIDM0IDEKKwkJCQkJIDYwMDAgMCAwIDEgJm1waWMgMzEgMQorCQkJCQkgNjAwMCAwIDAgMiAmbXBpYyAzMiAxCisJCQkJCSA2MDAwIDAgMCAzICZtcGljIDMzIDEKKwkJCQkJIDYwMDAgMCAwIDQgJm1waWMgMzQgMQogCiAJCQkJCS8qIElEU0VMIDEzICovCi0JCQkJCSA2ODAwIDAgMCAxIDQwMDAwIDM0IDEKLQkJCQkJIDY4MDAgMCAwIDIgNDAwMDAgMzEgMQotCQkJCQkgNjgwMCAwIDAgMyA0MDAwMCAzMiAxCi0JCQkJCSA2ODAwIDAgMCA0IDQwMDAwIDMzIDEKKwkJCQkJIDY4MDAgMCAwIDEgJm1waWMgMzQgMQorCQkJCQkgNjgwMCAwIDAgMiAmbXBpYyAzMSAxCisJCQkJCSA2ODAwIDAgMCAzICZtcGljIDMyIDEKKwkJCQkJIDY4MDAgMCAwIDQgJm1waWMgMzMgMQogCiAJCQkJCS8qIElEU0VMIDE0Ki8KLQkJCQkJIDcwMDAgMCAwIDEgNDAwMDAgMzMgMQotCQkJCQkgNzAwMCAwIDAgMiA0MDAwMCAzNCAxCi0JCQkJCSA3MDAwIDAgMCAzIDQwMDAwIDMxIDEKLQkJCQkJIDcwMDAgMCAwIDQgNDAwMDAgMzIgMQorCQkJCQkgNzAwMCAwIDAgMSAmbXBpYyAzMyAxCisJCQkJCSA3MDAwIDAgMCAyICZtcGljIDM0IDEKKwkJCQkJIDcwMDAgMCAwIDMgJm1waWMgMzEgMQorCQkJCQkgNzAwMCAwIDAgNCAmbXBpYyAzMiAxCiAKIAkJCQkJLyogSURTRUwgMTUgKi8KLQkJCQkJIDc4MDAgMCAwIDEgNDAwMDAgMzIgMQotCQkJCQkgNzgwMCAwIDAgMiA0MDAwMCAzMyAxCi0JCQkJCSA3ODAwIDAgMCAzIDQwMDAwIDM0IDEKLQkJCQkJIDc4MDAgMCAwIDQgNDAwMDAgMzEgMQorCQkJCQkgNzgwMCAwIDAgMSAmbXBpYyAzMiAxCisJCQkJCSA3ODAwIDAgMCAyICZtcGljIDMzIDEKKwkJCQkJIDc4MDAgMCAwIDMgJm1waWMgMzQgMQorCQkJCQkgNzgwMCAwIDAgNCAmbXBpYyAzMSAxCiAKIAkJCQkJLyogSURTRUwgMTggKi8KLQkJCQkJIDkwMDAgMCAwIDEgNDAwMDAgMzEgMQotCQkJCQkgOTAwMCAwIDAgMiA0MDAwMCAzMiAxCi0JCQkJCSA5MDAwIDAgMCAzIDQwMDAwIDMzIDEKLQkJCQkJIDkwMDAgMCAwIDQgNDAwMDAgMzQgMQorCQkJCQkgOTAwMCAwIDAgMSAmbXBpYyAzMSAxCisJCQkJCSA5MDAwIDAgMCAyICZtcGljIDMyIDEKKwkJCQkJIDkwMDAgMCAwIDMgJm1waWMgMzMgMQorCQkJCQkgOTAwMCAwIDAgNCAmbXBpYyAzNCAxCiAKIAkJCQkJLyogSURTRUwgMTkgKi8KLQkJCQkJIDk4MDAgMCAwIDEgNDAwMDAgMzQgMQotCQkJCQkgOTgwMCAwIDAgMiA0MDAwMCAzMSAxCi0JCQkJCSA5ODAwIDAgMCAzIDQwMDAwIDMyIDEKLQkJCQkJIDk4MDAgMCAwIDQgNDAwMDAgMzMgMQorCQkJCQkgOTgwMCAwIDAgMSAmbXBpYyAzNCAxCisJCQkJCSA5ODAwIDAgMCAyICZtcGljIDMxIDEKKwkJCQkJIDk4MDAgMCAwIDMgJm1waWMgMzIgMQorCQkJCQkgOTgwMCAwIDAgNCAmbXBpYyAzMyAxCiAKIAkJCQkJLyogSURTRUwgMjAgKi8KLQkJCQkJIGEwMDAgMCAwIDEgNDAwMDAgMzMgMQotCQkJCQkgYTAwMCAwIDAgMiA0MDAwMCAzNCAxCi0JCQkJCSBhMDAwIDAgMCAzIDQwMDAwIDMxIDEKLQkJCQkJIGEwMDAgMCAwIDQgNDAwMDAgMzIgMQorCQkJCQkgYTAwMCAwIDAgMSAmbXBpYyAzMyAxCisJCQkJCSBhMDAwIDAgMCAyICZtcGljIDM0IDEKKwkJCQkJIGEwMDAgMCAwIDMgJm1waWMgMzEgMQorCQkJCQkgYTAwMCAwIDAgNCAmbXBpYyAzMiAxCiAKIAkJCQkJLyogSURTRUwgMjEgKi8KLQkJCQkJIGE4MDAgMCAwIDEgNDAwMDAgMzIgMQotCQkJCQkgYTgwMCAwIDAgMiA0MDAwMCAzMyAxCi0JCQkJCSBhODAwIDAgMCAzIDQwMDAwIDM0IDEKLQkJCQkJIGE4MDAgMCAwIDQgNDAwMDAgMzEgMT47CisJCQkJCSBhODAwIDAgMCAxICZtcGljIDMyIDEKKwkJCQkJIGE4MDAgMCAwIDIgJm1waWMgMzMgMQorCQkJCQkgYTgwMCAwIDAgMyAmbXBpYyAzNCAxCisJCQkJCSBhODAwIDAgMCA0ICZtcGljIDMxIDE+OwogCi0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJaW50ZXJydXB0cyA9IDw4IDA+OwogCQkJYnVzLXJhbmdlID0gPDAgMD47CiAJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDIwMDAwMDAwCiAJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGUyMDAwMDAwIDAgMDEwMDAwMDA+OwogCQl9OwogCi0JCXBpY0A0MDAwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDQwMDAwPjsKKwkJbXBpYzogcGljQDQwMDAwIHsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDQwMDAwIDIwMTAwPjsKKwkJCXJlZyA9IDw0MDAwMCA0MDAwMD47CiAJCQlidWlsdC1pbjsKIAkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKIAkJfTsKIAogCQljcG1AZTAwMDAwMDAgewotCQkJbGludXgscGhhbmRsZSA9IDxlMDAwMDAwMD47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKQEAgLTIyOCwxMyArMjE1LDEyIEBACiAJCQljb21tYW5kLXByb2MgPSA8OTE5YzA+OwogCQkJYnJnLWZyZXF1ZW5jeSA9IDw5ZDViMzQwPjsKIAotCQkJcGljQDkwYzAwIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDkwYzAwPjsKKwkJCWNwbXBpYzogcGljQDkwYzAwIHsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJCWludGVycnVwdHMgPSA8MWUgMD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJcmVnID0gPDkwYzAwIDgwPjsKIAkJCQlidWlsdC1pbjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJjcG0tcGljIjsKQEAgLTI1MSw3ICsyMzcsNyBAQAogCQkJCXR4LWNsb2NrID0gPDE+OwogCQkJCWN1cnJlbnQtc3BlZWQgPSA8MWMyMDA+OwogCQkJCWludGVycnVwdHMgPSA8MjggOD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw5MGMwMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmY3BtcGljPjsKIAkJCX07CiAKIAkJCXNjY0A5MWEyMCB7CkBAIC0yNjUsNyArMjUxLDcgQEAKIAkJCQl0eC1jbG9jayA9IDwyPjsKIAkJCQljdXJyZW50LXNwZWVkID0gPDFjMjAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDI5IDg+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8OTBjMDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmNwbXBpYz47CiAJCQl9OwogCiAJCQlmY2NAOTEzMjAgewpAQCAtMjc5LDggKzI2NSw4IEBACiAJCQkJcngtY2xvY2sgPSA8MTU+OwogCQkJCXR4LWNsb2NrID0gPDE2PjsKIAkJCQlpbnRlcnJ1cHRzID0gPDIxIDg+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8OTBjMDA+OwotCQkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmY3BtcGljPjsKKwkJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKIAkJCX07CiAKIAkJCWZjY0A5MTM0MCB7CkBAIC0yOTQsOCArMjgwLDggQEAKIAkJCQlyeC1jbG9jayA9IDwxNz47CiAJCQkJdHgtY2xvY2sgPSA8MTg+OwogCQkJCWludGVycnVwdHMgPSA8MjIgOD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw5MGMwMD47Ci0JCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZjcG1waWM+OworCQkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OwogCQkJfTsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCmluZGV4IDA2ZDI0NjUuLmJmNDlkOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKQEAgLTE2LDE2ICsxNiwxNCBAQAogCiAvIHsKIAltb2RlbCA9ICJNUEM4NTY4RU1EUyI7Ci0JY29tcGF0aWJsZSA9ICJNUEM4NXh4TURTIjsKKwljb21wYXRpYmxlID0gIk1QQzg1NjhFTURTIiwgIk1QQzg1eHhNRFMiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OwotCWxpbnV4LHBoYW5kbGUgPSA8MTAwPjsKIAogCWNwdXMgewogCQkjY3B1cyA9IDwxPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQlsaW51eCxwaGFuZGxlID0gPDIwMD47CiAKIAkJUG93ZXJQQyw4NTY4QDAgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKQEAgLTM4LDEzICszNiwxMSBAQAogCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCTMyLWJpdDsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8MjAxPjsKIAkJfTsKIAl9OwogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJbGludXgscGhhbmRsZSA9IDwzMDA+OwogCQlyZWcgPSA8MDAwMDAwMDAgMTAwMDAwMDA+OwogCX07CiAKQEAgLTY3LDcgKzYzLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MzAwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwxYiAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAkJfTsKIApAQCAtNzYsNyArNzIsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKIAkJCXJlZyA9IDwzMTAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDFiIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC04NiwzMiArODIsMjYgQEAKIAkJCWRldmljZV90eXBlID0gIm1kaW8iOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwyNDUyMCAyMD47Ci0JCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwPjsKLQkJCWV0aGVybmV0LXBoeUAwIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MzEgMT47CiAJCQkJcmVnID0gPDA+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwotCQkJZXRoZXJuZXQtcGh5QDEgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwzMiAxPjsKIAkJCQlyZWcgPSA8MT47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07Ci0KLQkJCWV0aGVybmV0LXBoeUAyIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDI+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MzEgMT47CiAJCQkJcmVnID0gPDI+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwotCQkJZXRoZXJuZXQtcGh5QDMgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMz47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwzMiAxPjsKIAkJCQlyZWcgPSA8Mz47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKQEAgLTEyNyw4ICsxMTcsOCBAQAogCQkJcmVnID0gPDI0MDAwIDEwMDA+OwogCQkJbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPGQgMiBlIDIgMTIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKLQkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OwogCQl9OwogCiAJCWV0aGVybmV0QDI1MDAwIHsKQEAgLTE0MCw4ICsxMzAsOCBAQAogCQkJcmVnID0gPDI1MDAwIDEwMDA+OwogCQkJbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwXTsKIAkJCWludGVycnVwdHMgPSA8MTMgMiAxNCAyIDE4IDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47Ci0JCQlwaHktaGFuZGxlID0gPDI0NTIwMDM+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKIAkJfTsKIAogCQlzZXJpYWxANDUwMCB7CkBAIC0xNTAsNyArMTQwLDcgQEAKIAkJCXJlZyA9IDw0NTAwIDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDFhIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAogCQlzZXJpYWxANDYwMCB7CkBAIC0xNTksNyArMTQ5LDcgQEAKIAkJCXJlZyA9IDw0NjAwIDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDFhIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAogCQljcnlwdG9AMzAwMDAgewpAQCAtMTY4LDE1ICsxNTgsMTQgQEAKIAkJCWNvbXBhdGlibGUgPSAidGFsaXRvcyI7CiAJCQlyZWcgPSA8MzAwMDAgZjAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDFkIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCW51bS1jaGFubmVscyA9IDw0PjsKIAkJCWNoYW5uZWwtZmlmby1sZW4gPSA8MTg+OwogCQkJZXhlYy11bml0cy1tYXNrID0gPDAwMDAwMGZlPjsKIAkJCWRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwwMTJiMGViZj47CiAJCX07CiAKLQkJcGljQDQwMDAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NDAwMDA+OworCQltcGljOiBwaWNANDAwMDAgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKQEAgLTE5Miw4ICsxODEsNyBAQAogCQkJZGV2aWNlX3R5cGUgPSAicGFyX2lvIjsKIAkJCW51bS1wb3J0cyA9IDw3PjsKIAotCQkJdWNjX3BpbkAwMSB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDxlMDEwMDAxPjsKKwkJCXBpbzE6IHVjY19waW5AMDEgewogCQkJCXBpby1tYXAgPSA8CiAJCQkvKiBwb3J0ICBwaW4gIGRpciAgb3Blbl9kcmFpbiAgYXNzaWdubWVudCAgaGFzX2lycSAqLwogCQkJCQk0ICAwYSAgMSAgMCAgMiAgMCAJLyogVHhEMCAqLwpAQCAtMjIwLDggKzIwOCw3IEBACiAJCQkJCTQgIDEzICAxICAwICAyICAwIAkvKiBHVFhfQ0xLICovCiAJCQkJCTEgIDFmICAyICAwICAzICAwPjsJLyogR1RYMTI1ICovCiAJCQl9OwotCQkJdWNjX3BpbkAwMiB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDxlMDEwMDAyPjsKKwkJCXBpbzI6IHVjY19waW5AMDIgewogCQkJCXBpby1tYXAgPSA8CiAJCQkvKiBwb3J0ICBwaW4gIGRpciAgb3Blbl9kcmFpbiAgYXNzaWdubWVudCAgaGFzX2lycSAqLwogCQkJCQk1ICAwYSAxICAwICAyICAwICAgLyogVHhEMCAqLwpAQCAtMjc3LDcgKzI2NCw3IEBACiAJCQljb21wYXRpYmxlID0gImZzbF9zcGkiOwogCQkJcmVnID0gPDRjMCA0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw4MD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZxZWljPjsKIAkJCW1vZGUgPSAiY3B1IjsKIAkJfTsKIApAQCAtMjg2LDcgKzI3Myw3IEBACiAJCQljb21wYXRpYmxlID0gImZzbF9zcGkiOwogCQkJcmVnID0gPDUwMCA0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDE+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw4MD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZxZWljPjsKIAkJCW1vZGUgPSAiY3B1IjsKIAkJfTsKIApAQCAtMjk3LDEyICsyODQsMTIgQEAKIAkJCWRldmljZS1pZCA9IDwxPjsKIAkJCXJlZyA9IDwyMDAwIDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8ODA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmcWVpYz47CiAJCQltYWMtYWRkcmVzcyA9IFsgMDAgMDQgOWYgMDAgMjMgMjMgXTsKIAkJCXJ4LWNsb2NrID0gPDA+OwogCQkJdHgtY2xvY2sgPSA8MTk+OwotCQkJcGh5LWhhbmRsZSA9IDwyMTIwMDA+OwotCQkJcGlvLWhhbmRsZSA9IDxlMDEwMDAxPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnFlX3BoeTA+OworCQkJcGlvLWhhbmRsZSA9IDwmcGlvMT47CiAJCX07CiAKIAkJdWNjQDMwMDAgewpAQCAtMzEyLDEyICsyOTksMTIgQEAKIAkJCWRldmljZS1pZCA9IDwyPjsKIAkJCXJlZyA9IDwzMDAwIDIwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIxPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8ODA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmcWVpYz47CiAJCQltYWMtYWRkcmVzcyA9IFsgMDAgMTEgMjIgMzMgNDQgNTUgXTsKIAkJCXJ4LWNsb2NrID0gPDA+OwogCQkJdHgtY2xvY2sgPSA8MTQ+OwotCQkJcGh5LWhhbmRsZSA9IDwyMTIwMDE+OwotCQkJcGlvLWhhbmRsZSA9IDxlMDEwMDAyPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnFlX3BoeTE+OworCQkJcGlvLWhhbmRsZSA9IDwmcGlvMj47CiAJCX07CiAKIAkJbWRpb0AyMTIwIHsKQEAgLTMyOSwzMyArMzE2LDI5IEBACiAKIAkJCS8qIFRoZXNlIGFyZSB0aGUgc2FtZSBQSFlzIGFzIG9uCiAJCQkgKiBnaWFuZmFyJ3MgTURJTyBidXMgKi8KLQkJCWV0aGVybmV0LXBoeUAwMCB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDwyMTIwMDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcWVfcGh5MDogZXRoZXJuZXQtcGh5QDAwIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDMxIDE+OwogCQkJCXJlZyA9IDwwPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJCWludGVyZmFjZSA9IDw2PjsgLy9FTkVUXzEwMDBfR01JSQogCQkJfTsKLQkJCWV0aGVybmV0LXBoeUAwMSB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDwyMTIwMDE+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcWVfcGh5MTogZXRoZXJuZXQtcGh5QDAxIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDMyIDE+OwogCQkJCXJlZyA9IDwxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJCWludGVyZmFjZSA9IDw2PjsKIAkJCX07Ci0JCQlldGhlcm5ldC1waHlAMDIgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjEyMDAyPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXFlX3BoeTI6IGV0aGVybmV0LXBoeUAwMiB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwzMSAxPjsKIAkJCQlyZWcgPSA8Mj47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlpbnRlcmZhY2UgPSA8Nj47IC8vRU5FVF8xMDAwX0dNSUkKIAkJCX07Ci0JCQlldGhlcm5ldC1waHlAMDMgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjEyMDAzPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXFlX3BoeTM6IGV0aGVybmV0LXBoeUAwMyB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwzMiAxPjsKIAkJCQlyZWcgPSA8Mz47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKQEAgLTM2Myw4ICszNDYsNyBAQAogCQkJfTsKIAkJfTsKIAotCQlxZWljQDgwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8ODA+OworCQlxZWljOiBxZWljQDgwIHsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJZGV2aWNlX3R5cGUgPSAicWVpYyI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKQEAgLTM3Myw3ICszNTUsNyBAQAogCQkJYnVpbHQtaW47CiAJCQliaWctZW5kaWFuOwogCQkJaW50ZXJydXB0cyA9IDwxZSAyIDFlIDI+OyAvL2hpZ2g6MzAgbG93OjMwCi0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjQxX2hwY24uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMKaW5kZXggZjBjNzczMS4uOGE0OTk1YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMKQEAgLTMyLDcgKzMyLDYgQEAKIAkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CiAJCQkzMi1iaXQ7Ci0JCQlsaW51eCxib290LWNwdTsKIAkJfTsKIAkJUG93ZXJQQyw4NjQxQDEgewogCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKQEAgLTY3LDcgKzY2LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MzAwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyYiAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAkJfTsKIApAQCAtNzYsNyArNzUsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKIAkJCXJlZyA9IDwzMTAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDJiIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC04NiwzMSArODUsMjYgQEAKIAkJCWRldmljZV90eXBlID0gIm1kaW8iOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwyNDUyMCAyMD47Ci0JCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwPjsKLQkJCWV0aGVybmV0LXBoeUAwIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8NGEgMT47CiAJCQkJcmVnID0gPDA+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQl9OwotCQkJZXRoZXJuZXQtcGh5QDEgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw0YSAxPjsKIAkJCQlyZWcgPSA8MT47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07Ci0JCQlldGhlcm5ldC1waHlAMiB7Ci0JCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDAyPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDRhIDE+OwogCQkJCXJlZyA9IDwyPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKLQkJCWV0aGVybmV0LXBoeUAzIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDM+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8NGEgMT47CiAJCQkJcmVnID0gPDM+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CkBAIC0xMjYsOCArMTIwLDggQEAKIAkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKIAkJCW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwxZCAyIDFlIDIgMjIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKLQkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCiAJCWV0aGVybmV0QDI1MDAwIHsKQEAgLTEzOSw4ICsxMzMsOCBAQAogCQkJcmVnID0gPDI1MDAwIDEwMDA+OwogCQkJbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAxIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIzIDIgMjQgMiAyOCAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OwotCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCX07CiAJCQogCQlldGhlcm5ldEAyNjAwMCB7CkBAIC0xNTIsOCArMTQ2LDggQEAKIAkJCXJlZyA9IDwyNjAwMCAxMDAwPjsKIAkJCW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCAwMiBGRCBdOwogCQkJaW50ZXJydXB0cyA9IDwxRiAyIDIwIDIgMjEgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKLQkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OwogCQl9OwogCiAJCWV0aGVybmV0QDI3MDAwIHsKQEAgLTE2NSw4ICsxNTksOCBAQAogCQkJcmVnID0gPDI3MDAwIDEwMDA+OwogCQkJbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDAzIEZEIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI1IDIgMjYgMiAyNyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OwotCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAzPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CiAJCX07CiAJCXNlcmlhbEA0NTAwIHsKIAkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CkBAIC0xNzQsNyArMTY4LDcgQEAKIAkJCXJlZyA9IDw0NTAwIDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDJhIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAogCQlzZXJpYWxANDYwMCB7CkBAIC0xODMsNyArMTc3LDcgQEAKIAkJCXJlZyA9IDw0NjAwIDEwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDFjIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAogCQlwY2lAODAwMCB7CkBAIC0xOTcsMTAzICsxOTEsMTAyIEBACiAJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDIwMDAwMDAwCiAJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGUyMDAwMDAwIDAgMDAxMDAwMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDFmY2EwNTU+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8MTggMj47CiAJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CiAJCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJCS8qIElEU0VMIDB4MTEgKi8KLQkJCQk4ODAwIDAgMCAxIDRkMCAzIDIKLQkJCQk4ODAwIDAgMCAyIDRkMCA0IDIKLQkJCQk4ODAwIDAgMCAzIDRkMCA1IDIKLQkJCQk4ODAwIDAgMCA0IDRkMCA2IDIKKwkJCQk4ODAwIDAgMCAxICZpODI1OSAzIDIKKwkJCQk4ODAwIDAgMCAyICZpODI1OSA0IDIKKwkJCQk4ODAwIDAgMCAzICZpODI1OSA1IDIKKwkJCQk4ODAwIDAgMCA0ICZpODI1OSA2IDIKIAogCQkJCS8qIElEU0VMIDB4MTIgKi8KLQkJCQk5MDAwIDAgMCAxIDRkMCA0IDIKLQkJCQk5MDAwIDAgMCAyIDRkMCA1IDIKLQkJCQk5MDAwIDAgMCAzIDRkMCA2IDIKLQkJCQk5MDAwIDAgMCA0IDRkMCAzIDIKKwkJCQk5MDAwIDAgMCAxICZpODI1OSA0IDIKKwkJCQk5MDAwIDAgMCAyICZpODI1OSA1IDIKKwkJCQk5MDAwIDAgMCAzICZpODI1OSA2IDIKKwkJCQk5MDAwIDAgMCA0ICZpODI1OSAzIDIKIAogCQkJCS8qIElEU0VMIDB4MTMgKi8KLQkJCQk5ODAwIDAgMCAxIDRkMCAwIDAKLQkJCQk5ODAwIDAgMCAyIDRkMCAwIDAKLQkJCQk5ODAwIDAgMCAzIDRkMCAwIDAKLQkJCQk5ODAwIDAgMCA0IDRkMCAwIDAKKwkJCQk5ODAwIDAgMCAxICZpODI1OSAwIDAKKwkJCQk5ODAwIDAgMCAyICZpODI1OSAwIDAKKwkJCQk5ODAwIDAgMCAzICZpODI1OSAwIDAKKwkJCQk5ODAwIDAgMCA0ICZpODI1OSAwIDAKIAogCQkJCS8qIElEU0VMIDB4MTQgKi8KLQkJCQlhMDAwIDAgMCAxIDRkMCAwIDAKLQkJCQlhMDAwIDAgMCAyIDRkMCAwIDAKLQkJCQlhMDAwIDAgMCAzIDRkMCAwIDAKLQkJCQlhMDAwIDAgMCA0IDRkMCAwIDAKKwkJCQlhMDAwIDAgMCAxICZpODI1OSAwIDAKKwkJCQlhMDAwIDAgMCAyICZpODI1OSAwIDAKKwkJCQlhMDAwIDAgMCAzICZpODI1OSAwIDAKKwkJCQlhMDAwIDAgMCA0ICZpODI1OSAwIDAKIAogCQkJCS8qIElEU0VMIDB4MTUgKi8KLQkJCQlhODAwIDAgMCAxIDRkMCAwIDAKLQkJCQlhODAwIDAgMCAyIDRkMCAwIDAKLQkJCQlhODAwIDAgMCAzIDRkMCAwIDAKLQkJCQlhODAwIDAgMCA0IDRkMCAwIDAKKwkJCQlhODAwIDAgMCAxICZpODI1OSAwIDAKKwkJCQlhODAwIDAgMCAyICZpODI1OSAwIDAKKwkJCQlhODAwIDAgMCAzICZpODI1OSAwIDAKKwkJCQlhODAwIDAgMCA0ICZpODI1OSAwIDAKIAogCQkJCS8qIElEU0VMIDB4MTYgKi8KLQkJCQliMDAwIDAgMCAxIDRkMCAwIDAKLQkJCQliMDAwIDAgMCAyIDRkMCAwIDAKLQkJCQliMDAwIDAgMCAzIDRkMCAwIDAKLQkJCQliMDAwIDAgMCA0IDRkMCAwIDAKKwkJCQliMDAwIDAgMCAxICZpODI1OSAwIDAKKwkJCQliMDAwIDAgMCAyICZpODI1OSAwIDAKKwkJCQliMDAwIDAgMCAzICZpODI1OSAwIDAKKwkJCQliMDAwIDAgMCA0ICZpODI1OSAwIDAKIAogCQkJCS8qIElEU0VMIDB4MTcgKi8KLQkJCQliODAwIDAgMCAxIDRkMCAwIDAKLQkJCQliODAwIDAgMCAyIDRkMCAwIDAKLQkJCQliODAwIDAgMCAzIDRkMCAwIDAKLQkJCQliODAwIDAgMCA0IDRkMCAwIDAKKwkJCQliODAwIDAgMCAxICZpODI1OSAwIDAKKwkJCQliODAwIDAgMCAyICZpODI1OSAwIDAKKwkJCQliODAwIDAgMCAzICZpODI1OSAwIDAKKwkJCQliODAwIDAgMCA0ICZpODI1OSAwIDAKIAogCQkJCS8qIElEU0VMIDB4MTggKi8KLQkJCQljMDAwIDAgMCAxIDRkMCAwIDAKLQkJCQljMDAwIDAgMCAyIDRkMCAwIDAKLQkJCQljMDAwIDAgMCAzIDRkMCAwIDAKLQkJCQljMDAwIDAgMCA0IDRkMCAwIDAKKwkJCQljMDAwIDAgMCAxICZpODI1OSAwIDAKKwkJCQljMDAwIDAgMCAyICZpODI1OSAwIDAKKwkJCQljMDAwIDAgMCAzICZpODI1OSAwIDAKKwkJCQljMDAwIDAgMCA0ICZpODI1OSAwIDAKIAogCQkJCS8qIElEU0VMIDB4MTkgKi8KLQkJCQljODAwIDAgMCAxIDRkMCAwIDAKLQkJCQljODAwIDAgMCAyIDRkMCAwIDAKLQkJCQljODAwIDAgMCAzIDRkMCAwIDAKLQkJCQljODAwIDAgMCA0IDRkMCAwIDAKKwkJCQljODAwIDAgMCAxICZpODI1OSAwIDAKKwkJCQljODAwIDAgMCAyICZpODI1OSAwIDAKKwkJCQljODAwIDAgMCAzICZpODI1OSAwIDAKKwkJCQljODAwIDAgMCA0ICZpODI1OSAwIDAKIAogCQkJCS8qIElEU0VMIDB4MWEgKi8KLQkJCQlkMDAwIDAgMCAxIDRkMCA2IDIKLQkJCQlkMDAwIDAgMCAyIDRkMCAzIDIKLQkJCQlkMDAwIDAgMCAzIDRkMCA0IDIKLQkJCQlkMDAwIDAgMCA0IDRkMCA1IDIKKwkJCQlkMDAwIDAgMCAxICZpODI1OSA2IDIKKwkJCQlkMDAwIDAgMCAyICZpODI1OSAzIDIKKwkJCQlkMDAwIDAgMCAzICZpODI1OSA0IDIKKwkJCQlkMDAwIDAgMCA0ICZpODI1OSA1IDIKIAogCiAJCQkJLyogSURTRUwgMHgxYiAqLwotCQkJCWQ4MDAgMCAwIDEgNGQwIDUgMgotCQkJCWQ4MDAgMCAwIDIgNGQwIDAgMAotCQkJCWQ4MDAgMCAwIDMgNGQwIDAgMAotCQkJCWQ4MDAgMCAwIDQgNGQwIDAgMAorCQkJCWQ4MDAgMCAwIDEgJmk4MjU5IDUgMgorCQkJCWQ4MDAgMCAwIDIgJmk4MjU5IDAgMAorCQkJCWQ4MDAgMCAwIDMgJmk4MjU5IDAgMAorCQkJCWQ4MDAgMCAwIDQgJmk4MjU5IDAgMAogCiAJCQkJLyogSURTRUwgMHgxYyAqLwotCQkJCWUwMDAgMCAwIDEgNGQwIDkgMgotCQkJCWUwMDAgMCAwIDIgNGQwIGEgMgotCQkJCWUwMDAgMCAwIDMgNGQwIGMgMgotCQkJCWUwMDAgMCAwIDQgNGQwIDcgMgorCQkJCWUwMDAgMCAwIDEgJmk4MjU5IDkgMgorCQkJCWUwMDAgMCAwIDIgJmk4MjU5IGEgMgorCQkJCWUwMDAgMCAwIDMgJmk4MjU5IGMgMgorCQkJCWUwMDAgMCAwIDQgJmk4MjU5IDcgMgogCiAJCQkJLyogSURTRUwgMHgxZCAqLwotCQkJCWU4MDAgMCAwIDEgNGQwIDkgMgotCQkJCWU4MDAgMCAwIDIgNGQwIGEgMgotCQkJCWU4MDAgMCAwIDMgNGQwIGIgMgotCQkJCWU4MDAgMCAwIDQgNGQwIDAgMAorCQkJCWU4MDAgMCAwIDEgJmk4MjU5IDkgMgorCQkJCWU4MDAgMCAwIDIgJmk4MjU5IGEgMgorCQkJCWU4MDAgMCAwIDMgJmk4MjU5IGIgMgorCQkJCWU4MDAgMCAwIDQgJmk4MjU5IDAgMAogCiAJCQkJLyogSURTRUwgMHgxZSAqLwotCQkJCWYwMDAgMCAwIDEgNGQwIGMgMgotCQkJCWYwMDAgMCAwIDIgNGQwIDAgMAotCQkJCWYwMDAgMCAwIDMgNGQwIDAgMAotCQkJCWYwMDAgMCAwIDQgNGQwIDAgMAorCQkJCWYwMDAgMCAwIDEgJmk4MjU5IGMgMgorCQkJCWYwMDAgMCAwIDIgJmk4MjU5IDAgMAorCQkJCWYwMDAgMCAwIDMgJmk4MjU5IDAgMAorCQkJCWYwMDAgMCAwIDQgJmk4MjU5IDAgMAogCiAJCQkJLyogSURTRUwgMHgxZiAqLwotCQkJCWY4MDAgMCAwIDEgNGQwIDYgMgotCQkJCWY4MDAgMCAwIDIgNGQwIDAgMAotCQkJCWY4MDAgMCAwIDMgNGQwIDAgMAotCQkJCWY4MDAgMCAwIDQgNGQwIDAgMAorCQkJCWY4MDAgMCAwIDEgJmk4MjU5IDYgMgorCQkJCWY4MDAgMCAwIDIgJmk4MjU5IDAgMAorCQkJCWY4MDAgMCAwIDMgJmk4MjU5IDAgMAorCQkJCWY4MDAgMCAwIDQgJmk4MjU5IDAgMAogCQkJCT47Ci0JCQlpODI1OUA0ZDAgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8NGQwPjsKKwkJCWk4MjU5OiBpODI1OUA0ZDAgewogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CkBAIC0zMDMsMTIgKzI5NiwxMSBAQAogCQkJCWNvbXBhdGlibGUgPSAiY2hycCxpaWMiOwogICAgICAgICAgICAgICAgIAkgICAgICAgIGJpZy1lbmRpYW47CiAJCQkJaW50ZXJydXB0cyA9IDw0OSAyPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCX07CiAKIAkJfTsKLQkJcGljQDQwMDAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NDAwMDA+OworCQltcGljOiBwaWNANDAwMDAgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKQEAgLTMxNywyMyArMzA5LDcgQEAKIAkJCWJ1aWx0LWluOwogCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKIAkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpZy1lbmRpYW47Ci0JCQlpbnRlcnJ1cHRzID0gPAotCQkJCTEwIDIgMTEgMiAxMiAyIDEzIDIKLQkJCQkxNCAyIDE1IDIgMTYgMiAxNyAyCi0JCQkJMTggMiAxOSAyIDFhIDIgMWIgMgotCQkJCTFjIDIgMWQgMiAxZSAyIDFmIDIKLQkJCQkyMCAyIDIxIDIgMjIgMiAyMyAyCi0JCQkJMjQgMiAyNSAyIDI2IDIgMjcgMgotCQkJCTI4IDIgMjkgMiAyYSAyIDJiIDIKLQkJCQkyYyAyIDJkIDIgMmUgMiAyZiAyCi0JCQkJMzAgMiAzMSAyIDMyIDIgMzMgMgotCQkJCTM0IDIgMzUgMiAzNiAyIDM3IDIKLQkJCQkzOCAyIDM5IDIgMmEgMiAzYiAyCi0JCQkJM2MgMiAzZCAyIDNlIDIgM2YgMgotCQkJCTQ4IDEgNDkgMiA0YSAxCi0JCQkJPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJYmlnLWVuZGlhbjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjZhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NmFkcy5kdHMKaW5kZXggNWQ0MDA1Mi4uMmI1NmI1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NmFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NmFkcy5kdHMKQEAgLTM3LDcgKzM3LDYgQEAKIAkJCWludGVycnVwdHMgPSA8ZiAyPjsJLy8gZGVjcmVtZW50ZXIgaW50ZXJydXB0CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPGZmMDAwMDAwPjsKIAkJCWxpbnV4LHBoYW5kbGUgPSA8MjAxPjsKLQkJCWxpbnV4LGJvb3QtY3B1OwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4ODVhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg4NWFkcy5kdHMKaW5kZXggY2YxYTE5Zi4uZmFlY2QwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg4NWFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg4NWFkcy5kdHMKQEAgLTM3LDcgKzM3LDYgQEAKIAkJCWludGVycnVwdHMgPSA8ZiAyPjsJLy8gZGVjcmVtZW50ZXIgaW50ZXJydXB0CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPGZmMDAwMDAwPjsKIAkJCWxpbnV4LHBoYW5kbGUgPSA8MjAxPjsKLQkJCWxpbnV4LGJvb3QtY3B1OwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcKaW5kZXggZTk1NjU0OC4uMjQzNjczMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcKQEAgLTE0Nyw2ICsxNDcsNyBAQAogIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKIENPTkZJR19SVEFTX1BST0M9eQogQ09ORklHX1JUQVNfRkxBU0g9eQorQ09ORklHX1BQQ19QTUk9bQogQ09ORklHX01NSU9fTlZSQU09eQogIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzJ4ZW1kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzJ4X21kc19kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzMnhlbWRzX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODMyeF9tZHNfZGVmY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzYwZW1kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzZ4X21kc19kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM2MGVtZHNfZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzZ4X21kc19kZWZjb25maWcKaW5kZXggYmJlMzhjYy4uOGViNDc1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM2MGVtZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNnhfbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzUKLSMgRnJpIEphbiAyNiAwMDoxOTo0NSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU2F0IEZlYiAxNyAxMDowOToyNiAyMDA3CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQpAQCAtMzQsOSArMzQsOSBAQAogQ09ORklHX1BQQ184M3h4PXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfNnh4PXkKIENPTkZJR184M3h4PXkKQEAgLTYzLDYgKzYzLDcgQEAKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKQEAgLTEyOSwxMCArMTMwLDExIEBACiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKICMKKyMgQ09ORklHX01QQzgzMTNfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4MzYwRV9QQj15CitDT05GSUdfTVBDODM2eF9NRFM9eQogQ09ORklHX1BQQ19NUEM4MzZ4PXkKICMgQ09ORklHX01QSUMgaXMgbm90IHNldAogCkBAIC0xNjIsNiArMTY0LDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CkBAIC0xNzEsNiArMTc0LDcgQEAKICMKICMgQnVzIG9wdGlvbnMKICMKK0NPTkZJR19aT05FX0RNQT15CiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKQEAgLTIxOSw2ICsyMjMsNyBAQAogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTUyOCw2ICs1MzMsNyBAQAogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldApAQCAtNjIwLDYgKzYyNiw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTY5MCw2ICs2OTcsNyBAQAogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldApAQCAtODA0LDYgKzgxMiw3IEBACiAjIEhJRCBEZXZpY2VzCiAjCiBDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHN1cHBvcnQKQEAgLTg2OCw2ICs4NzcsMTAgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKICMgVmlydHVhbGl6YXRpb24KICMKIApAQCAtMTAxMSw3ICsxMDI0LDggQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1BMSVNUPXkKLUNPTkZJR19JT01BUF9DT1BZPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC0xMDYwLDggKzEwNzQsMTAgQEAKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CkBAIC0xMDc1LDYgKzEwOTEsNyBAQAogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU2OG1kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NTY4bWRzX2RlZmNvbmZpZwppbmRleCAwNThlMDZkLi43YjM4MDA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NTY4bWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NTY4bWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzUKLSMgV2VkIEZlYiAgNyAyMzo1NDoyNSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKKyMgU2F0IEZlYiAxNyAxNjoyNjo1MyAyMDA3CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQpAQCAtMzQsOSArMzQsOSBAQAogIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogQ09ORklHX1BQQ184NXh4PXkKICMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfODV4eD15CiBDT05GSUdfRTUwMD15CkBAIC02Myw2ICs2Myw3IEBACiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CkBAIC0xMzAsNyArMTMxLDcgQEAKICMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4NTY4X01EUz15CitDT05GSUdfTVBDODV4eF9NRFM9eQogQ09ORklHX01QQzg1eHg9eQogQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0lfQkU9eQogQ09ORklHX01QSUM9eQpAQCAtMTYyLDYgKzE2Myw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldApAQCAtMTcxLDYgKzE3Myw3IEBACiAjCiAjIEJ1cyBvcHRpb25zCiAjCitDT05GSUdfWk9ORV9ETUE9eQogIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAogQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQpAQCAtMjE2LDYgKzIxOSw3IEBACiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMzAxLDYgKzMwNSw3IEBACiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTM0MSw3ICszNDYsNiBAQAogIwogIyBNaXNjIGRldmljZXMKICMKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAKICMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydApAQCAtNTQzLDYgKzU0Nyw3IEBACiAjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjk4LDYgKzcwMyw3IEBACiAjIEhJRCBEZXZpY2VzCiAjCiBDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHN1cHBvcnQKQEAgLTc2MCw2ICs3NjYsMTAgQEAKICMKIAogIworIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjCisKKyMKICMgVmlydHVhbGl6YXRpb24KICMKIApAQCAtODk2LDcgKzkwNiw4IEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19QTElTVD15Ci1DT05GSUdfSU9NQVBfQ09QWT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtOTE0LDYgKzkyNSw3IEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKQEAgLTkyMiw3ICs5MzQsNiBAQAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTkzMiw2ICs5NDMsOCBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdHRVI9eQogIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKQEAgLTk0Myw2ICs5NTYsOCBAQAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1BBU19SRUFMTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfQkVBVCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtOTcwLDggKzk4NSwxMCBAQAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKQEAgLTk4NSw2ICsxMDAyLDcgQEAKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwppbmRleCBkZWJhYzY2Li5hOGRhMGFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCkBAIC01MDAsNyArNTAwLDcgQEAKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NMODJDMTA1PXkKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CkBAIC02NDYsNyArNjQ2LDcgQEAKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CitDT05GSUdfUEFUQV9XSU5CT05EPXkKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCAxYzc5NGZlLi42ZTk2ZTUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TTDgyQzEwNT15CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldApAQCAtNjI4LDcgKzYyOCw3IEBACiAjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorQ09ORklHX1BBVEFfV0lOQk9ORD15CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKaW5kZXggM2U4NmU2ZS4uOGQ1MmIyMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKQEAgLTE1OTksNiArMTU5OSw3IEBACiAKIAlyZXR1cm4gcHA7CiB9CitFWFBPUlRfU1lNQk9MKG9mX2ZpbmRfcHJvcGVydHkpOwogCiAvKgogICogRmluZCBhIHByb3BlcnR5IHdpdGggYSBnaXZlbiBuYW1lIGZvciBhIGdpdmVuIG5vZGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9wYXJzZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMKaW5kZXggMTJjNTFlNC4uZWE2ZmQ1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpX3JlZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KIApAQCAtMTAwMywzICsxMDA0LDQyIEBACiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9mX2lycV9tYXBfb25lKTsKKworLyoqCisgKiBTZWFyY2ggdGhlIGRldmljZSB0cmVlIGZvciB0aGUgYmVzdCBNQUMgYWRkcmVzcyB0byB1c2UuICAnbWFjLWFkZHJlc3MnIGlzCisgKiBjaGVja2VkIGZpcnN0LCBiZWNhdXNlIHRoYXQgaXMgc3VwcG9zZWQgdG8gY29udGFpbiB0byAibW9zdCByZWNlbnQiIE1BQworICogYWRkcmVzcy4gSWYgdGhhdCBpc24ndCBzZXQsIHRoZW4gJ2xvY2FsLW1hYy1hZGRyZXNzJyBpcyBjaGVja2VkIG5leHQsCisgKiBiZWNhdXNlIHRoYXQgaXMgdGhlIGRlZmF1bHQgYWRkcmVzcy4gIElmIHRoYXQgaXNuJ3Qgc2V0LCB0aGVuIHRoZSBvYnNvbGV0ZQorICogJ2FkZHJlc3MnIGlzIGNoZWNrZWQsIGp1c3QgaW4gY2FzZSB3ZSdyZSB1c2luZyBhbiBvbGQgZGV2aWNlIHRyZWUuCisgKgorICogTm90ZSB0aGF0IHRoZSAnYWRkcmVzcycgcHJvcGVydHkgaXMgc3VwcG9zZWQgdG8gY29udGFpbiBhIHZpcnR1YWwgYWRkcmVzcyBvZgorICogdGhlIHJlZ2lzdGVyIHNldCwgYnV0IHNvbWUgRFRTIGZpbGVzIGhhdmUgcmVkZWZpbmVkIHRoYXQgcHJvcGVydHkgdG8gYmUgdGhlCisgKiBNQUMgYWRkcmVzcy4KKyAqCisgKiBBbGwtemVybyBNQUMgYWRkcmVzc2VzIGFyZSByZWplY3RlZCwgYmVjYXVzZSB0aG9zZSBjb3VsZCBiZSBwcm9wZXJ0aWVzIHRoYXQKKyAqIGV4aXN0IGluIHRoZSBkZXZpY2UgdHJlZSwgYnV0IHdlcmUgbm90IHNldCBieSBVLUJvb3QuICBGb3IgZXhhbXBsZSwgdGhlCisgKiBEVFMgY291bGQgZGVmaW5lICdtYWMtYWRkcmVzcycgYW5kICdsb2NhbC1tYWMtYWRkcmVzcycsIHdpdGggemVybyBNQUMKKyAqIGFkZHJlc3Nlcy4gIFNvbWUgb2xkZXIgVS1Cb290cyBvbmx5IGluaXRpYWxpemVkICdsb2NhbC1tYWMtYWRkcmVzcycuICBJbgorICogdGhpcyBjYXNlLCB0aGUgcmVhbCBNQUMgaXMgaW4gJ2xvY2FsLW1hYy1hZGRyZXNzJywgYW5kICdtYWMtYWRkcmVzcycgZXhpc3RzCisgKiBidXQgaXMgYWxsIHplcm9zLgorKi8KK2NvbnN0IHZvaWQgKm9mX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHA7CisKKwlwcCA9IG9mX2ZpbmRfcHJvcGVydHkobnAsICJtYWMtYWRkcmVzcyIsIE5VTEwpOworCWlmIChwcCAmJiAocHAtPmxlbmd0aCA9PSA2KSAmJiBpc192YWxpZF9ldGhlcl9hZGRyKHBwLT52YWx1ZSkpCisJCXJldHVybiBwcC0+dmFsdWU7CisKKwlwcCA9IG9mX2ZpbmRfcHJvcGVydHkobnAsICJsb2NhbC1tYWMtYWRkcmVzcyIsIE5VTEwpOworCWlmIChwcCAmJiAocHAtPmxlbmd0aCA9PSA2KSAmJiBpc192YWxpZF9ldGhlcl9hZGRyKHBwLT52YWx1ZSkpCisJCXJldHVybiBwcC0+dmFsdWU7CisKKwlwcCA9IG9mX2ZpbmRfcHJvcGVydHkobnAsICJhZGRyZXNzIiwgTlVMTCk7CisJaWYgKHBwICYmIChwcC0+bGVuZ3RoID09IDYpICYmIGlzX3ZhbGlkX2V0aGVyX2FkZHIocHAtPnZhbHVlKSkKKwkJcmV0dXJuIHBwLT52YWx1ZTsKKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChvZl9nZXRfbWFjX2FkZHJlc3MpOworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCmluZGV4IDc2YjVkN2UuLjlkMDczNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAljaGFyICpvczsKIAlzdGF0aWMgaW50IGRpc3BsYXlfY2hhcmFjdGVyLCBzZXRfaW5kaWNhdG9yOwogCXN0YXRpYyBpbnQgZGlzcGxheV93aWR0aCwgZGlzcGxheV9saW5lcywgZm9ybV9mZWVkOwotCWNvbnN0IHN0YXRpYyBpbnQgKnJvd193aWR0aDsKKwlzdGF0aWMgY29uc3QgaW50ICpyb3dfd2lkdGg7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhwcm9ncmVzc19sb2NrKTsKIAlzdGF0aWMgaW50IGN1cnJlbnRfbGluZTsKIAlzdGF0aWMgaW50IHBlbmRpbmdfbmV3bGluZSA9IDA7ICAvKiBkaWQgbGFzdCB3cml0ZSBlbmQgd2l0aCB1bnByaW50ZWQgbmV3bGluZT8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwppbmRleCBkY2M2ZjE1Li4xNzcyNGZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCkBAIC0xMDcsMTIgKzEwNywxMCBAQAogCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSAmJiBwbWFjX2JhY2tsaWdodCkgewogCQlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgKnByb3BzOwogCi0JCWRvd24oJnBtYWNfYmFja2xpZ2h0LT5zZW0pOwotCQlwcm9wcyA9IHBtYWNfYmFja2xpZ2h0LT5wcm9wczsKKwkJcHJvcHMgPSAmcG1hY19iYWNrbGlnaHQtPnByb3BzOwogCQlwcm9wcy0+YnJpZ2h0bmVzcyA9IHByb3BzLT5tYXhfYnJpZ2h0bmVzczsKIAkJcHJvcHMtPnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKLQkJcHJvcHMtPnVwZGF0ZV9zdGF0dXMocG1hY19iYWNrbGlnaHQpOwotCQl1cCgmcG1hY19iYWNrbGlnaHQtPnNlbSk7CisJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKHBtYWNfYmFja2xpZ2h0KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IDI2Mjc5MDkuLmU4NmMzN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgKiBjaGFyYWN0ZXJpc3RpY3MgcmVsYXRpdmUgdG8gaXRzIG11bHRpcGxlIGNvbm5lY3Rpb25zLiAgV2UgaWdub3JlCiAgKiB0aGlzIGZvciBub3cuICBXZSBhbHNvIGFzc3VtZSB0aGF0IGFsbCBjcHUgYW5kIG1lbW9yeSBzZXRzIGhhdmUKICAqIHRoZWlyIGRpc3RhbmNlcyByZXByZXNlbnRlZCBhdCBhIGNvbW1vbiBsZXZlbC4gIFRoaXMgd29uJ3QgYmUKLSAqIHRydWUgZm9yIGhlaXJhcmNoaWNhbCBOVU1BLgorICogdHJ1ZSBmb3IgaGllcmFyY2hpY2FsIE5VTUEuCiAgKgogICogSW4gYW55IGNhc2UgdGhlIGlibSxhc3NvY2lhdGl2aXR5LXJlZmVyZW5jZS1wb2ludHMgc2hvdWxkIGdpdmUKICAqIHRoZSBjb3JyZWN0IGRlcHRoIGZvciBhIG5vcm1hbCBOVU1BIHN5c3RlbS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCmluZGV4IDE2ZTRlZTEuLjFkNDQzNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJCSAqCiAJCSAqLwogCQlpZiAoaHRhYl9ib2x0X21hcHBpbmcoZWEsIGVhICsgUEFHRV9TSVpFLCBwYSwgZmxhZ3MsCi0JCQkJICAgICAgbW11X3ZpcnR1YWxfcHNpemUpKSB7CisJCQkJICAgICAgbW11X2lvX3BzaXplKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZG8gYm9sdGVkIG1hcHBpbmcgSU8gIgogCQkJICAgICAgICJtZW1vcnkgYXQgJTAxNmx4ICFcbiIsIHBhKTsKIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZwppbmRleCAxYWVhMWU2Li43MTNiMzFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZwpAQCAtMzgsMTIgKzM4LDEyIEBACiAJICBCZSBhd2FyZSB0aGF0IFBDSSBpbml0aWFsaXphdGlvbiBpcyB0aGUgYm9vdGxvYWRlcidzCiAJICByZXNwb25zaWJpbGl0eS4KIAotY29uZmlnIE1QQzgzNjBFX1BCCi0JYm9vbCAiRnJlZXNjYWxlIE1QQzgzNjBFIFBCIgorY29uZmlnIE1QQzgzNnhfTURTCisJYm9vbCAiRnJlZXNjYWxlIE1QQzgzNnggTURTIgogCXNlbGVjdCBERUZBVUxUX1VJTUFHRQogCXNlbGVjdCBRVUlDQ19FTkdJTkUKIAloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4MzZ4IEVNRFMgUHJvY2Vzc29yIEJvYXJkLgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODM2eCBNRFMgUHJvY2Vzc29yIEJvYXJkLgogCiBlbmRjaG9pY2UKIApAQCAtNjksNiArNjksNiBAQAogCWJvb2wKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQotCWRlZmF1bHQgeSBpZiBNUEM4MzYwRV9QQgorCWRlZmF1bHQgeSBpZiBNUEM4MzZ4X01EUwogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvTWFrZWZpbGUKaW5kZXggNmM4MTk5Yy4uZGZjOTcwZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9NYWtlZmlsZQpAQCAtNiw1ICs2LDUgQEAKIG9iai0kKENPTkZJR19NUEM4MzEzX1JEQikJKz0gbXBjODMxM19yZGIubwogb2JqLSQoQ09ORklHX01QQzgzNHhfTURTKQkrPSBtcGM4MzR4X21kcy5vCiBvYmotJChDT05GSUdfTVBDODM0eF9JVFgpCSs9IG1wYzgzNHhfaXR4Lm8KLW9iai0kKENPTkZJR19NUEM4MzYwRV9QQikJKz0gbXBjODM2MGVfcGIubworb2JqLSQoQ09ORklHX01QQzgzNnhfTURTKQkrPSBtcGM4MzZ4X21kcy5vCiBvYmotJChDT05GSUdfTVBDODMyeF9NRFMpCSs9IG1wYzgzMnhfbWRzLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzEzX3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMTNfcmRiLmMKaW5kZXggYzNiOThjMy4uMzJlOWU5NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMTNfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMTNfcmRiLmMKQEAgLTc0LDE2ICs3NCw5IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG1wYzgzMTNfcmRiX3Byb2JlKHZvaWQpCiB7Ci0JY2hhciAqbW9kZWwgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG9mX2dldF9mbGF0X2R0X3Jvb3QoKSwKLQkJCQkJICAibW9kZWwiLCBOVUxMKTsKLQlpZiAobW9kZWwgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHN0cmNtcChtb2RlbCwgIk1QQzgzMTNFUkRCIikpCi0JCXJldHVybiAwOworICAgICAgICB1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CiAKLQlEQkcoIk1QQzgzMTMgUkRCIGZvdW5kXG4iKTsKLQotCXJldHVybiAxOworICAgICAgICByZXR1cm4gb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJNUEM4MzEzRVJEQiIpOwogfQogCiBkZWZpbmVfbWFjaGluZShtcGM4MzEzX3JkYikgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9tZHMuYwppbmRleCAzZWNiNTVmLi4xN2UzYTNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9tZHMuYwpAQCAtNTcsMTEgKzU3LDYgQEAKIAogc3RhdGljIHU4ICpiY3NyX3JlZ3MgPSBOVUxMOwogCi11OCAqZ2V0X2Jjc3Iodm9pZCkKLXsKLQlyZXR1cm4gYmNzcl9yZWdzOwotfQotCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTZXR1cCB0aGUgYXJjaGl0ZWN0dXJlCkBAIC03NCwxNyArNjksNiBAQAogCWlmIChwcGNfbWQucHJvZ3Jlc3MpCiAJCXBwY19tZC5wcm9ncmVzcygibXBjODMyeF9zeXNfc2V0dXBfYXJjaCgpIiwgMCk7CiAKLQlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJjcHUiKTsKLQlpZiAobnAgIT0gMCkgewotCQl1bnNpZ25lZCBpbnQgKmZwID0KLQkJICAgIChpbnQgKilnZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKLQkJaWYgKGZwICE9IDApCi0JCQlsb29wc19wZXJfamlmZnkgPSAqZnAgLyBIWjsKLQkJZWxzZQotCQkJbG9vcHNfcGVyX2ppZmZ5ID0gNTAwMDAwMDAgLyBIWjsKLQkJb2Zfbm9kZV9wdXQobnApOwotCX0KLQogCS8qIE1hcCBCQ1NSIGFyZWEgKi8KIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJiY3NyIik7CiAJaWYgKG5wICE9IDApIHsKQEAgLTEyMSwzNCArMTA1LDIzIEBACiAJCWlvdW5tYXAoYmNzcl9yZWdzKTsKIAkJb2Zfbm9kZV9wdXQobnApOwogCX0KLQogI2VuZGlmCQkJCS8qIENPTkZJR19RVUlDQ19FTkdJTkUgKi8KLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCWlmIChpbml0cmRfc3RhcnQpCi0JCVJPT1RfREVWID0gUm9vdF9SQU0wOwotCWVsc2UKLSNlbmRpZgotI2lmZGVmICBDT05GSUdfUk9PVF9ORlMKLQkJUk9PVF9ERVYgPSBSb290X05GUzsKLSNlbHNlCi0JCVJPT1RfREVWID0gUm9vdF9IREExOwotI2VuZGlmCiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzgzMnhfaWRzW10gPSB7CisJeyAudHlwZSA9ICJzb2MiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKKwl7IC50eXBlID0gInFlIiwgfSwKKwl7fSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IG1wYzgzMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpZiAoIW1hY2hpbmVfaXMobXBjODMyeF9tZHMpKQorCQlyZXR1cm4gMDsKIAotCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucCwgIm5ldHdvcmsiLAotCQkJCQkidWNjX2dldGgiKSkgIT0gTlVMTDspIHsKLQkJaW50IHVjY19udW07Ci0JCWNoYXIgYnVzX2lkW0JVU19JRF9TSVpFXTsKLQotCQl1Y2NfbnVtID0gKigodWludCAqKSBnZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKSkgLSAxOwotCQlzbnByaW50ZihidXNfaWQsIEJVU19JRF9TSVpFLCAidWNjX2dldGguJXUiLCB1Y2NfbnVtKTsKLQkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgYnVzX2lkLCBOVUxMKTsKLQl9CisJLyogUHVibGlzaCB0aGUgUUUgZGV2aWNlcyAqLworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBtcGM4MzJ4X2lkcywgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1Niw3ICsxMjksNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXBjODMyeF9zeXNfaW5pdF9JUlEodm9pZCkKIHsKLQogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJpcGljIik7CkBAIC0xODksNiArMTYxLDkgQEAKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHY7CiAKKwlpZiAoIW1hY2hpbmVfaXMobXBjODMyeF9tZHMpKQorCQlyZXR1cm4gMDsKKwogCXBwY19tZC5nZXRfcnRjX3RpbWUgPSBkczEzNzRfZ2V0X3J0Y190aW1lOwogCXBwY19tZC5zZXRfcnRjX3RpbWUgPSBkczEzNzRfc2V0X3J0Y190aW1lOwogCkBAIC0yMDcsMTcgKzE4Miw5IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG1wYzgzMnhfc3lzX3Byb2JlKHZvaWQpCiB7Ci0JY2hhciAqbW9kZWwgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG9mX2dldF9mbGF0X2R0X3Jvb3QoKSwKLQkJCQkJICAibW9kZWwiLCBOVUxMKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwogCi0JaWYgKG1vZGVsID09IE5VTEwpCi0JCXJldHVybiAwOwotCWlmIChzdHJjbXAobW9kZWwsICJNUEM4MzIzRU1EUyIpKQotCQlyZXR1cm4gMDsKLQotCURCRygiJXMgZm91bmRcbiIsIG1vZGVsKTsKLQotCXJldHVybiAxOworICAgICAgICByZXR1cm4gb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJNUEM4MzJ4TURTIik7CiB9CiAKIGRlZmluZV9tYWNoaW5lKG1wYzgzMnhfbWRzKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCmluZGV4IDQ0M2EzMTcuLjNjMDA5ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCkBAIC01NSwyOCArNTUsMTIgQEAKIAlpZiAocHBjX21kLnByb2dyZXNzKQogCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzgzNHhfaXR4X3NldHVwX2FyY2goKSIsIDApOwogCi0JbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7Ci0JaWYgKG5wICE9IDApIHsKLQkJY29uc3QgdW5zaWduZWQgaW50ICpmcCA9Ci0JCQlnZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKLQkJaWYgKGZwICE9IDApCi0JCQlsb29wc19wZXJfamlmZnkgPSAqZnAgLyBIWjsKLQkJZWxzZQotCQkJbG9vcHNfcGVyX2ppZmZ5ID0gNTAwMDAwMDAgLyBIWjsKLQkJb2Zfbm9kZV9wdXQobnApOwotCX0KICNpZmRlZiBDT05GSUdfUENJCiAJZm9yIChucCA9IE5VTEw7IChucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG5wLCAicGNpIikpICE9IE5VTEw7KQogCQlhZGRfYnJpZGdlKG5wKTsKIAogCXBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UgPSBtcGM4M3h4X2V4Y2x1ZGVfZGV2aWNlOwogI2VuZGlmCi0KLSNpZmRlZiAgQ09ORklHX1JPT1RfTkZTCi0JUk9PVF9ERVYgPSBSb290X05GUzsKLSNlbHNlCi0JUk9PVF9ERVYgPSBSb290X0hEQTE7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG1wYzgzNHhfaXR4X2luaXRfSVJRKHZvaWQpCkBAIC0xMDAsMTAgKzg0LDkgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgbXBjODM0eF9pdHhfcHJvYmUodm9pZCkKIHsKLQkvKiBXZSBhbHdheXMgbWF0Y2ggZm9yIG5vdywgZXZlbnR1YWxseSB3ZSBzaG91bGQgbG9vayBhdCB0aGUgZmxhdAotCSAgIGRldiB0cmVlIHRvIGVuc3VyZSB0aGlzIGlzIHRoZSBib2FyZCB3ZSBhcmUgc3VwcG9zZSB0byBydW4gb24KLQkqLwotCXJldHVybiAxOworICAgICAgICB1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKyAgICAgICAgcmV0dXJuIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiTVBDODM0eE1JVFgiKTsKIH0KIAogZGVmaW5lX21hY2hpbmUobXBjODM0eF9pdHgpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKaW5kZXggZDI3MzZkYS4uZTVkODE5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKQEAgLTEyNSwxNyArMTI1LDYgQEAKIAlpZiAocHBjX21kLnByb2dyZXNzKQogCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzgzNHhfbWRzX3NldHVwX2FyY2goKSIsIDApOwogCi0JbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7Ci0JaWYgKG5wICE9IDApIHsKLQkJY29uc3QgdW5zaWduZWQgaW50ICpmcCA9Ci0JCQlnZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKLQkJaWYgKGZwICE9IDApCi0JCQlsb29wc19wZXJfamlmZnkgPSAqZnAgLyBIWjsKLQkJZWxzZQotCQkJbG9vcHNfcGVyX2ppZmZ5ID0gNTAwMDAwMDAgLyBIWjsKLQkJb2Zfbm9kZV9wdXQobnApOwotCX0KLQogI2lmZGVmIENPTkZJR19QQ0kKIAlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobnAsICJwY2kiKSkgIT0gTlVMTDspCiAJCWFkZF9icmlkZ2UobnApOwpAQCAtMTQ0LDEyICsxMzMsNiBAQAogI2VuZGlmCiAKIAltcGM4MzR4X3VzYl9jZmcoKTsKLQotI2lmZGVmICBDT05GSUdfUk9PVF9ORlMKLQlST09UX0RFViA9IFJvb3RfTkZTOwotI2Vsc2UKLQlST09UX0RFViA9IFJvb3RfSERBMTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXBjODM0eF9tZHNfaW5pdF9JUlEodm9pZCkKQEAgLTE3Niw2ICsxNTksOSBAQAogewogCXN0cnVjdCB0aW1lc3BlYyB0djsKIAorCWlmICghbWFjaGluZV9pcyhtcGM4MzR4X21kcykpCisJCXJldHVybiAwOworCiAJcHBjX21kLmdldF9ydGNfdGltZSA9IGRzMTM3NF9nZXRfcnRjX3RpbWU7CiAJcHBjX21kLnNldF9ydGNfdGltZSA9IGRzMTM3NF9zZXRfcnRjX3RpbWU7CiAKQEAgLTE5NCwxMCArMTgwLDkgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgbXBjODM0eF9tZHNfcHJvYmUodm9pZCkKIHsKLQkvKiBXZSBhbHdheXMgbWF0Y2ggZm9yIG5vdywgZXZlbnR1YWxseSB3ZSBzaG91bGQgbG9vayBhdCB0aGUgZmxhdAotCSAgIGRldiB0cmVlIHRvIGVuc3VyZSB0aGlzIGlzIHRoZSBib2FyZCB3ZSBhcmUgc3VwcG9zZSB0byBydW4gb24KLQkqLwotCXJldHVybiAxOworICAgICAgICB1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKyAgICAgICAgcmV0dXJuIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiTVBDODM0eE1EUyIpOwogfQogCiBkZWZpbmVfbWFjaGluZShtcGM4MzR4X21kcykgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNjBlX3BiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2eF9tZHMuYwpzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2MGVfcGIuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNnhfbWRzLmMKaW5kZXggY2NjZTJmOS4uNTI2ZWQwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNjBlX3BiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNnhfbWRzLmMKQEAgLTUsMTIgKzUsMTIgQEAKICAqCSAgIFlpbiBPbGl2aWEgPEhvbmctaHVhLllpbkBmcmVlc2NhbGUuY29tPgogICoKICAqIERlc2NyaXB0aW9uOgotICogTVBDODM2MEUgTURTIFBCIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzLgorICogTVBDODM2MEUgTURTIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzLgogICoKICAqIENoYW5nZWxvZzoKICAqIEp1biAyMSwgMjAwNglJbml0aWFsIHZlcnNpb24KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KQEAgLTYyLDMzICs2MiwxNyBAQAogCiBzdGF0aWMgdTggKmJjc3JfcmVncyA9IE5VTEw7CiAKLXU4ICpnZXRfYmNzcih2b2lkKQotewotCXJldHVybiBiY3NyX3JlZ3M7Ci19Ci0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKICAqCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBtcGM4MzYwX3N5c19zZXR1cF9hcmNoKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjODM2eF9tZHNfc2V0dXBfYXJjaCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKIAlpZiAocHBjX21kLnByb2dyZXNzKQotCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzgzNjBfc3lzX3NldHVwX2FyY2goKSIsIDApOwotCi0JbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7Ci0JaWYgKG5wICE9IDApIHsKLQkJY29uc3QgdW5zaWduZWQgaW50ICpmcCA9Ci0JCSAgICBnZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKLQkJaWYgKGZwICE9IDApCi0JCQlsb29wc19wZXJfamlmZnkgPSAqZnAgLyBIWjsKLQkJZWxzZQotCQkJbG9vcHNfcGVyX2ppZmZ5ID0gNTAwMDAwMDAgLyBIWjsKLQkJb2Zfbm9kZV9wdXQobnApOwotCX0KKwkJcHBjX21kLnByb2dyZXNzKCJtcGM4MzZ4X21kc19zZXR1cF9hcmNoKCkiLCAwKTsKIAogCS8qIE1hcCBCQ1NSIGFyZWEgKi8KIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJiY3NyIik7CkBAIC0xMjgsNDAgKzExMiwyOSBAQAogCX0KIAogI2VuZGlmCQkJCS8qIENPTkZJR19RVUlDQ19FTkdJTkUgKi8KLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCWlmIChpbml0cmRfc3RhcnQpCi0JCVJPT1RfREVWID0gUm9vdF9SQU0wOwotCWVsc2UKLSNlbmRpZgotI2lmZGVmICBDT05GSUdfUk9PVF9ORlMKLQkJUk9PVF9ERVYgPSBSb290X05GUzsKLSNlbHNlCi0JCVJPT1RfREVWID0gUm9vdF9IREExOwotI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG1wYzgzNjBfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM4MzZ4X2lkc1tdID0geworCXsgLnR5cGUgPSAic29jIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCisJeyAudHlwZSA9ICJxZSIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtcGM4MzZ4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaWYgKCFtYWNoaW5lX2lzKG1wYzgzNnhfbWRzKSkKKwkJcmV0dXJuIDA7CiAKLQlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsICJuZXR3b3JrIiwKLQkJCQkJInVjY19nZXRoIikpICE9IE5VTEw7KSB7Ci0JCWludCB1Y2NfbnVtOwotCQljaGFyIGJ1c19pZFtCVVNfSURfU0laRV07Ci0KLQkJdWNjX251bSA9ICooKHVpbnQgKikgZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlLWlkIiwgTlVMTCkpIC0gMTsKLQkJc25wcmludGYoYnVzX2lkLCBCVVNfSURfU0laRSwgInVjY19nZXRoLiV1IiwgdWNjX251bSk7Ci0JCW9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsIGJ1c19pZCwgTlVMTCk7Ci0JfQorCS8qIFB1Ymxpc2ggdGhlIFFFIGRldmljZXMgKi8KKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgbXBjODM2eF9pZHMsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9Ci1kZXZpY2VfaW5pdGNhbGwobXBjODM2MF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworZGV2aWNlX2luaXRjYWxsKG1wYzgzNnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKIAotc3RhdGljIHZvaWQgX19pbml0IG1wYzgzNjBfc3lzX2luaXRfSVJRKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjODM2eF9tZHNfaW5pdF9JUlEodm9pZCkKIHsKLQogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJpcGljIik7CkBAIC0xOTQsNiArMTY3LDkgQEAKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHY7CiAKKwlpZiAoIW1hY2hpbmVfaXMobXBjODM2eF9tZHMpKQorCQlyZXR1cm4gMDsKKwogCXBwY19tZC5nZXRfcnRjX3RpbWUgPSBkczEzNzRfZ2V0X3J0Y190aW1lOwogCXBwY19tZC5zZXRfcnRjX3RpbWUgPSBkczEzNzRfc2V0X3J0Y190aW1lOwogCkBAIC0yMTAsMjggKzE4NiwyMSBAQAogLyoKICAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBNTVUgaXMgb2ZmLCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAogICovCi1zdGF0aWMgaW50IF9faW5pdCBtcGM4MzYwX3N5c19wcm9iZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbXBjODM2eF9tZHNfcHJvYmUodm9pZCkKIHsKLQljaGFyICptb2RlbCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aob2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpLAotCQkJCQkgICJtb2RlbCIsIE5VTEwpOwotCWlmIChtb2RlbCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQlpZiAoc3RyY21wKG1vZGVsLCAiTVBDODM2MEVQQiIpKQotCQlyZXR1cm4gMDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwogCi0JREJHKCJNUEM4MzYwRU1EUy1QQiBmb3VuZFxuIik7Ci0KLQlyZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiTVBDODM2eE1EUyIpOwogfQogCi1kZWZpbmVfbWFjaGluZShtcGM4MzYwX3N5cykgewotCS5uYW1lIAkJPSAiTVBDODM2MEUgUEIiLAotCS5wcm9iZSAJCT0gbXBjODM2MF9zeXNfcHJvYmUsCi0JLnNldHVwX2FyY2ggCT0gbXBjODM2MF9zeXNfc2V0dXBfYXJjaCwKLQkuaW5pdF9JUlEgCT0gbXBjODM2MF9zeXNfaW5pdF9JUlEsCi0JLmdldF9pcnEgCT0gaXBpY19nZXRfaXJxLAotCS5yZXN0YXJ0IAk9IG1wYzgzeHhfcmVzdGFydCwKLQkudGltZV9pbml0IAk9IG1wYzgzeHhfdGltZV9pbml0LAorZGVmaW5lX21hY2hpbmUobXBjODM2eF9tZHMpIHsKKwkubmFtZQkJPSAiTVBDODM2eCBNRFMiLAorCS5wcm9iZQkJPSBtcGM4MzZ4X21kc19wcm9iZSwKKwkuc2V0dXBfYXJjaAk9IG1wYzgzNnhfbWRzX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCT0gbXBjODM2eF9tZHNfaW5pdF9JUlEsCisJLmdldF9pcnEJPSBpcGljX2dldF9pcnEsCisJLnJlc3RhcnQJPSBtcGM4M3h4X3Jlc3RhcnQsCisJLnRpbWVfaW5pdAk9IG1wYzgzeHhfdGltZV9pbml0LAogCS5jYWxpYnJhdGVfZGVjcgk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCi0JLnByb2dyZXNzIAk9IHVkYmdfcHJvZ3Jlc3MsCisJLnByb2dyZXNzCT0gdWRiZ19wcm9ncmVzcywKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCmluZGV4IDBlZmRkMmYuLmViNjYxY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCkBAIC0yMywxMiArMjMsMTIgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NXh4IENEUyBib2FyZAogCi1jb25maWcgTVBDODU2OF9NRFMKLQlib29sICJGcmVlc2NhbGUgTVBDODU2OCBNRFMiCitjb25maWcgTVBDODV4eF9NRFMKKwlib29sICJGcmVlc2NhbGUgTVBDODV4eCBNRFMiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCiAjCXNlbGVjdCBRVUlDQ19FTkdJTkUKIAloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NTY4IE1EUyBib2FyZAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODV4eCBNRFMgYm9hcmQKIAogZW5kY2hvaWNlCiAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlib29sCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IFBQQ19JTkRJUkVDVF9QQ0kKLQlkZWZhdWx0IHkgaWYgTVBDODU0MF9BRFMgfHwgTVBDODV4eF9DRFMgfHwgTVBDODU2MF9BRFMgfHwgTVBDODU2OF9NRFMKKwlkZWZhdWx0IHkgaWYgTVBDODU0MF9BRFMgfHwgTVBDODV4eF9DRFMgfHwgTVBDODU2MF9BRFMgfHwgTVBDODV4eF9NRFMKIAogY29uZmlnIFBQQ19JTkRJUkVDVF9QQ0lfQkUKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKaW5kZXggZTQwZTUyMS4uNGU2MzkxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQpAQCAtNSw0ICs1LDQgQEAKIG9iai0kKENPTkZJR19NUEM4NTQwX0FEUykgKz0gbXBjODV4eF9hZHMubwogb2JqLSQoQ09ORklHX01QQzg1NjBfQURTKSArPSBtcGM4NXh4X2Fkcy5vCiBvYmotJChDT05GSUdfTVBDODV4eF9DRFMpICs9IG1wYzg1eHhfY2RzLm8KLW9iai0kKENPTkZJR19NUEM4NTY4X01EUykgKz0gbXBjODU2OF9tZHMubworb2JqLSQoQ09ORklHX01QQzg1eHhfTURTKSArPSBtcGM4NXh4X21kcy5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCmluZGV4IGM1NmZjZTUuLjhlZDAzNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KQEAgLTI0NSwxMiArMjQ0LDYgQEAKIAkJYWRkX2JyaWRnZShucCk7CiAJcHBjX21kLnBjaV9leGNsdWRlX2RldmljZSA9IG1wYzg1eHhfZXhjbHVkZV9kZXZpY2U7CiAjZW5kaWYKLQotI2lmZGVmICBDT05GSUdfUk9PVF9ORlMKLQlST09UX0RFViA9IFJvb3RfTkZTOwotI2Vsc2UKLQlST09UX0RFViA9IFJvb3RfSERBMTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBtcGM4NXh4X2Fkc19zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQpAQCAtMjc5LDEwICsyNzIsOSBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBtcGM4NXh4X2Fkc19wcm9iZSh2b2lkKQogewotCS8qIFdlIGFsd2F5cyBtYXRjaCBmb3Igbm93LCBldmVudHVhbGx5IHdlIHNob3VsZCBsb29rIGF0IHRoZSBmbGF0Ci0JICAgZGV2IHRyZWUgdG8gZW5zdXJlIHRoaXMgaXMgdGhlIGJvYXJkIHdlIGFyZSBzdXBwb3NlIHRvIHJ1biBvbgotCSovCi0JcmV0dXJuIDE7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKworICAgICAgICByZXR1cm4gb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJNUEM4NXh4QURTIik7CiB9CiAKIGRlZmluZV9tYWNoaW5lKG1wYzg1eHhfYWRzKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jCmluZGV4IGFiYzBhY2EuLjQyMzI2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CkBAIC0yNjMsMTIgKzI2Miw2IEBACiAJcHBjX21kLnBjaWJpb3NfZml4dXAgPSBtcGM4NXh4X2Nkc19wY2liaW9zX2ZpeHVwOwogCXBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UgPSBtcGM4NXh4X2V4Y2x1ZGVfZGV2aWNlOwogI2VuZGlmCi0KLSNpZmRlZiAgQ09ORklHX1JPT1RfTkZTCi0JUk9PVF9ERVYgPSBSb290X05GUzsKLSNlbHNlCi0JUk9PVF9ERVYgPSBSb290X0hEQTE7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgbXBjODV4eF9jZHNfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKQEAgLTI5OCwxMSArMjkxLDkgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgbXBjODV4eF9jZHNfcHJvYmUodm9pZCkKIHsKLQkvKiBXZSBhbHdheXMgbWF0Y2ggZm9yIG5vdywgZXZlbnR1YWxseSB3ZSBzaG91bGQgbG9vayBhdAotCSAqIHRoZSBmbGF0IGRldiB0cmVlIHRvIGVuc3VyZSB0aGlzIGlzIHRoZSBib2FyZCB3ZSBhcmUKLQkgKiBzdXBwb3NlZCB0byBydW4gb24KLQkgKi8KLQlyZXR1cm4gMTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisgICAgICAgIHJldHVybiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIk1QQzg1eHhDRFMiKTsKIH0KIAogZGVmaW5lX21hY2hpbmUobXBjODV4eF9jZHMpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTY4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKc2ltaWxhcml0eSBpbmRleCA4NCUKcmVuYW1lIGZyb20gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjhfbWRzLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCmluZGV4IDA4NjFkMTEuLjgxMTQ0ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTY4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCkBAIC04LDcgKzgsNyBAQAogICoJICAgWWluIE9saXZpYSA8SG9uZy1odWEuWWluQGZyZWVzY2FsZS5jb20+CiAgKgogICogRGVzY3JpcHRpb246Ci0gKiBNUEM4NTY4RSBNRFMgUEIgYm9hcmQgc3BlY2lmaWMgcm91dGluZXMuCisgKiBNUEM4NXh4IE1EUyBib2FyZCBzcGVjaWZpYyByb3V0aW5lcy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgpAQCAtNzAsMTQgKzY5LDEzIEBACiAgKiBTZXR1cCB0aGUgYXJjaGl0ZWN0dXJlCiAgKgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbXBjODU2OF9tZHNfc2V0dXBfYXJjaCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG1wYzg1eHhfbWRzX3NldHVwX2FyY2godm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXN0YXRpYyB1OCAqYmNzcl9yZWdzID0gTlVMTDsKIAotCiAJaWYgKHBwY19tZC5wcm9ncmVzcykKLQkJcHBjX21kLnByb2dyZXNzKCJtcGM4NTY4X21kc19zZXR1cF9hcmNoKCkiLCAwKTsKKwkJcHBjX21kLnByb2dyZXNzKCJtcGM4NXh4X21kc19zZXR1cF9hcmNoKCkiLCAwKTsKIAogCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOwogCWlmIChucCAhPSBOVUxMKSB7CkBAIC0xNDUsMjYgKzE0MywyNiBAQAogI2VuZGlmCS8qIENPTkZJR19RVUlDQ19FTkdJTkUgKi8KIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjODU2OF9pZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzg1eHhfaWRzW10gPSB7CiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC50eXBlID0gInFlIiwgfSwKIAl7fSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG1wYzg1NjhfcHVibGlzaF9kZXZpY2VzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtcGM4NXh4X3B1Ymxpc2hfZGV2aWNlcyh2b2lkKQogewotCWlmICghbWFjaGluZV9pcyhtcGM4NTY4X21kcykpCisJaWYgKCFtYWNoaW5lX2lzKG1wYzg1eHhfbWRzKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBQdWJsaXNoIHRoZSBRRSBkZXZpY2VzICovCi0Jb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsbXBjODU2OF9pZHMsTlVMTCk7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsbXBjODV4eF9pZHMsTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KLWRldmljZV9pbml0Y2FsbChtcGM4NTY4X3B1Ymxpc2hfZGV2aWNlcyk7CitkZXZpY2VfaW5pdGNhbGwobXBjODV4eF9wdWJsaXNoX2RldmljZXMpOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbXBjODU2OF9tZHNfcGljX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4NXh4X21kc19waWNfaW5pdCh2b2lkKQogewogCXN0cnVjdCBtcGljICptcGljOwogCXN0cnVjdCByZXNvdXJjZSByOwpAQCAtMjA3LDcgKzIwNSw2IEBACiAKIAltcGljX2luaXQobXBpYyk7CiAKLQogI2lmZGVmIENPTkZJR19RVUlDQ19FTkdJTkUKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJxZWljIik7CiAJaWYgKCFucCkKQEAgLTIxOCwyNyArMjE1LDE4IEBACiAjZW5kaWYJCQkJLyogQ09ORklHX1FVSUNDX0VOR0lORSAqLwogfQogCi0KLXN0YXRpYyBpbnQgX19pbml0IG1wYzg1NjhfbWRzX3Byb2JlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtcGM4NXh4X21kc19wcm9iZSh2b2lkKQogewotCWNoYXIgKm1vZGVsID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChvZl9nZXRfZmxhdF9kdF9yb290KCksCi0JCQkJCSAgIm1vZGVsIiwgTlVMTCk7Ci0JaWYgKG1vZGVsID09IE5VTEwpCi0JCXJldHVybiAwOwotCWlmIChzdHJjbXAobW9kZWwsICJNUEM4NTY4RU1EUyIpKQotCQlyZXR1cm4gMDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwogCi0JREJHKCJNUEM4NTY4RU1EUyBmb3VuZFxuIik7Ci0KLQlyZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiTVBDODV4eE1EUyIpOwogfQogCi0KLWRlZmluZV9tYWNoaW5lKG1wYzg1NjhfbWRzKSB7Ci0JLm5hbWUJCT0gIk1QQzg1NjhFIE1EUyIsCi0JLnByb2JlCQk9IG1wYzg1NjhfbWRzX3Byb2JlLAotCS5zZXR1cF9hcmNoCT0gbXBjODU2OF9tZHNfc2V0dXBfYXJjaCwKLQkuaW5pdF9JUlEJPSBtcGM4NTY4X21kc19waWNfaW5pdCwKK2RlZmluZV9tYWNoaW5lKG1wYzg1eHhfbWRzKSB7CisJLm5hbWUJCT0gIk1QQzg1eHggTURTIiwKKwkucHJvYmUJCT0gbXBjODV4eF9tZHNfcHJvYmUsCisJLnNldHVwX2FyY2gJPSBtcGM4NXh4X21kc19zZXR1cF9hcmNoLAorCS5pbml0X0lSUQk9IG1wYzg1eHhfbWRzX3BpY19pbml0LAogCS5nZXRfaXJxCT0gbXBpY19nZXRfaXJxLAogCS5yZXN0YXJ0CT0gbXBjODV4eF9yZXN0YXJ0LAogCS5jYWxpYnJhdGVfZGVjcgk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKaW5kZXggZjRkZDVmMi4uZjQyZjgwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CkBAIC0xMjAsNiArMTE5LDggQEAKIAlEQkcoIm1wYzg2eHhocGNuOiBjYXNjYWRlIG1hcHBlZCB0byBpcnEgJWRcbiIsIGNhc2NhZGVfaXJxKTsKIAogCWk4MjU5X2luaXQoY2FzY2FkZV9ub2RlLCAwKTsKKwlvZl9ub2RlX3B1dChjYXNjYWRlX25vZGUpOworCiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoY2FzY2FkZV9pcnEsIG1wYzg2eHhfODI1OV9jYXNjYWRlKTsKICNlbmRpZgogfQpAQCAtMzY1LDEyICszNjYsNiBAQAogCiAJcHJpbnRrKCJNUEM4Nnh4IEhQQ04gYm9hcmQgZnJvbSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvclxuIik7CiAKLSNpZmRlZiAgQ09ORklHX1JPT1RfTkZTCi0JUk9PVF9ERVYgPSBSb290X05GUzsKLSNlbHNlCi0JUk9PVF9ERVYgPSBSb290X0hEQTE7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19TTVAKIAltcGM4Nnh4X3NtcF9pbml0KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvTWFrZWZpbGUKaW5kZXggM2JhZjY1OC4uZjRmODI1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvTWFrZWZpbGUKQEAgLTEsOSArMSw4IEBACiBvYmoteQkJCQkrPSBpbnRlcnJ1cHQubyBpb21tdS5vIHNldHVwLm8gXAogCQkJCSAgIGh0YWIubyBiZWF0Lm8gcGNpLm8gXAotCQkJCSAgIHNjY19lcGNpLm8gaHZDYWxsLm8KKwkJCQkgICBzY2NfZXBjaS5vIHNjY191aGMubyBodkNhbGwubwogCiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8KIG9iai0kKENPTkZJR19QUENfVURCR19CRUFUKQkrPSB1ZGJnX2JlYXQubwotb2JqLSQoQ09ORklHX1VTQikJCSs9IHNjY191aGMubwogb2JqLSQoQ09ORklHX0hBU19UWFg5X1NFUklBTCkJKz0gc2NjX3Npby5vCiBvYmotJChDT05GSUdfU1BVX0JBU0UpCQkrPSBzcHVfcHJpdjEubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL3NldHVwLmMKaW5kZXggMWRlNjNhYy4uNWY0ZDBkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zZXR1cC5jCkBAIC0xMzcsMTAgKzEzNywxMiBAQAogCXJldHVybiAtRU5PREVWOwogfQogCisjaWZkZWYgQ09ORklHX0tFWEVDCiBzdGF0aWMgdm9pZCBjZWxsZWJfa2V4ZWNfY3B1X2Rvd24oaW50IGNyYXNoLCBpbnQgc2Vjb25kYXJ5KQogewogCWJlYXRpY19kZWluaXRfSVJRKCk7CiB9CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgY2VsbGViX2J1c19pZHNbXSA9IHsKIAl7IC50eXBlID0gInNjYyIsIH0sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2JhY2tsaWdodC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9iYWNrbGlnaHQuYwppbmRleCBjM2E4OTQxLi5kZTc0NDBlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2JhY2tsaWdodC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYmFja2xpZ2h0LmMKQEAgLTM3LDIxICszNywyMCBAQAogICovCiBzdGF0aWMgYXRvbWljX3Qga2VybmVsX2JhY2tsaWdodF9kaXNhYmxlZCA9IEFUT01JQ19JTklUKDApOwogCi0vKiBQcm90ZWN0IHRoZSBwbWFjX2JhY2tsaWdodCB2YXJpYWJsZSAqLworLyogUHJvdGVjdCB0aGUgcG1hY19iYWNrbGlnaHQgdmFyaWFibGUgYmVsb3cuCisgICBZb3Ugc2hvdWxkIGhvbGQgdGhpcyBsb2NrIHdoZW4gdXNpbmcgdGhlIHBtYWNfYmFja2xpZ2h0IHBvaW50ZXIgdG8KKyAgIHByZXZlbnQgaXRzIHBvdGVudGlhbCByZW1vdmFsLiAqLwogREVGSU5FX01VVEVYKHBtYWNfYmFja2xpZ2h0X211dGV4KTsKIAogLyogTWFpbiBiYWNrbGlnaHQgc3RvcmFnZQogICoKLSAqIEJhY2tsaWdodCBkcml2ZXJzIGluIHRoaXMgdmFyaWFibGUgYXJlIHJlcXVpcmVkIHRvIGhhdmUgdGhlICJwcm9wcyIKKyAqIEJhY2tsaWdodCBkcml2ZXJzIGluIHRoaXMgdmFyaWFibGUgYXJlIHJlcXVpcmVkIHRvIGhhdmUgdGhlICJvcHMiCiAgKiBhdHRyaWJ1dGUgc2V0IGFuZCB0byBoYXZlIGFuIHVwZGF0ZV9zdGF0dXMgZnVuY3Rpb24uCiAgKgogICogV2UgY2FuIG9ubHkgc3RvcmUgb25lIGJhY2tsaWdodCBoZXJlLCBidXQgc2luY2UgQXBwbGUgbGFwdG9wcyBoYXZlIG9ubHkgb25lCiAgKiBpbnRlcm5hbCBkaXNwbGF5LCBpdCBkb2Vzbid0IG1hdHRlci4gT3RoZXIgYmFja2xpZ2h0IGRyaXZlcnMgY2FuIGJlIHVzZWQKICAqIGluZGVwZW5kZW50bHkuCiAgKgotICogTG9jayBvcmRlcmluZzoKLSAqIHBtYWNfYmFja2xpZ2h0X211dGV4IChnbG9iYWwsIG1haW4gYmFja2xpZ2h0KQotICogICBwbWFjX2JhY2tsaWdodC0+c2VtIChiYWNrbGlnaHQgY2xhc3MpCiAgKi8KIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpwbWFjX2JhY2tsaWdodDsKIApAQCAtMTA0LDggKzEwMyw3IEBACiAJCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyAqcHJvcHM7CiAJCWludCBicmlnaHRuZXNzOwogCi0JCWRvd24oJnBtYWNfYmFja2xpZ2h0LT5zZW0pOwotCQlwcm9wcyA9IHBtYWNfYmFja2xpZ2h0LT5wcm9wczsKKwkJcHJvcHMgPSAmcG1hY19iYWNrbGlnaHQtPnByb3BzOwogCiAJCWJyaWdodG5lc3MgPSBwcm9wcy0+YnJpZ2h0bmVzcyArCiAJCQkoKHBtYWNfYmFja2xpZ2h0X2tleV9xdWV1ZWQ/LTE6MSkgKgpAQCAtMTE3LDkgKzExNSw3IEBACiAJCQlicmlnaHRuZXNzID0gcHJvcHMtPm1heF9icmlnaHRuZXNzOwogCiAJCXByb3BzLT5icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKLQkJcHJvcHMtPnVwZGF0ZV9zdGF0dXMocG1hY19iYWNrbGlnaHQpOwotCi0JCXVwKCZwbWFjX2JhY2tsaWdodC0+c2VtKTsKKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMocG1hY19iYWNrbGlnaHQpOwogCX0KIAltdXRleF91bmxvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKIH0KQEAgLTE0NSw4ICsxNDEsNyBAQAogCWlmIChwbWFjX2JhY2tsaWdodCkgewogCQlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgKnByb3BzOwogCi0JCWRvd24oJnBtYWNfYmFja2xpZ2h0LT5zZW0pOwotCQlwcm9wcyA9IHBtYWNfYmFja2xpZ2h0LT5wcm9wczsKKwkJcHJvcHMgPSAmcG1hY19iYWNrbGlnaHQtPnByb3BzOwogCQlwcm9wcy0+YnJpZ2h0bmVzcyA9IGJyaWdodG5lc3MgKgogCQkJKHByb3BzLT5tYXhfYnJpZ2h0bmVzcyArIDEpIC8KIAkJCShPTERfQkFDS0xJR0hUX01BWCArIDEpOwpAQCAtMTU2LDggKzE1MSw3IEBACiAJCWVsc2UgaWYgKHByb3BzLT5icmlnaHRuZXNzIDwgMCkKIAkJCXByb3BzLT5icmlnaHRuZXNzID0gMDsKIAotCQlwcm9wcy0+dXBkYXRlX3N0YXR1cyhwbWFjX2JhY2tsaWdodCk7Ci0JCXVwKCZwbWFjX2JhY2tsaWdodC0+c2VtKTsKKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMocG1hY19iYWNrbGlnaHQpOwogCiAJCWVycm9yID0gMDsKIAl9CkBAIC0xOTYsMTQgKzE5MCwxMSBAQAogCWlmIChwbWFjX2JhY2tsaWdodCkgewogCQlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgKnByb3BzOwogCi0JCWRvd24oJnBtYWNfYmFja2xpZ2h0LT5zZW0pOwotCQlwcm9wcyA9IHBtYWNfYmFja2xpZ2h0LT5wcm9wczsKKwkJcHJvcHMgPSAmcG1hY19iYWNrbGlnaHQtPnByb3BzOwogCiAJCXJlc3VsdCA9IHByb3BzLT5icmlnaHRuZXNzICoKIAkJCShPTERfQkFDS0xJR0hUX01BWCArIDEpIC8KIAkJCShwcm9wcy0+bWF4X2JyaWdodG5lc3MgKyAxKTsKLQotCQl1cCgmcG1hY19iYWNrbGlnaHQtPnNlbSk7CiAJfQogCW11dGV4X3VubG9jaygmcG1hY19iYWNrbGlnaHRfbXV0ZXgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwppbmRleCAzOWRiMTI4Li41ZTVjMGU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKQEAgLTMwNSw4ICszMDUsNiBAQAogCWxldmVsID0gISEobGV2ZWxfbWFza1todyA+PiA1XSAmICgxVUwgPDwgKGh3ICYgMHgxZikpKTsKIAlpZiAobGV2ZWwpCiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0JZWxzZQotCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0RFTEFZRURfRElTQUJMRTsKIAlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJnBtYWNfcGljLCBsZXZlbCA/CiAJCQkJIGhhbmRsZV9sZXZlbF9pcnEgOiBoYW5kbGVfZWRnZV9pcnEpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcKaW5kZXggNGJlMzk0My4uZDI3MGExZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnCkBAIC02Miw0ICs2MiwxNCBAQAogCSAgVGhpcyBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciBncmFwaGljcyBhbmQgc291bmQuIEluCiAJICBnZW5lcmFsLCBhbGwgdXNlcnMgd2lsbCBzYXkgWSBvciBNLgogCitjb25maWcgUFMzX1NZU19NQU5BR0VSCisJYm9vbCAiUFMzIFN5c3RlbSBNYW5hZ2VyIGRyaXZlciIKKwlzZWxlY3QgUFMzX1ZVQVJUCisJZGVmYXVsdCB5CisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUFMzIFN5c3RlbSBNYW5hZ2VyLgorCisJICBUaGlzIHN1cHBvcnQgaXMgcmVxdWlyZWQgZm9yIHN5c3RlbSBjb250cm9sLiAgSW4KKwkgIGdlbmVyYWwsIGFsbCB1c2VycyB3aWxsIHNheSBZLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYwppbmRleCAxM2Q2NjlhLi5hYzVkZjk2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmMKQEAgLTQyLDYgKzQyLDEwIEBACiAjZGVmaW5lIERCRyhmbXQuLi4pIGRve2lmKDApcHJpbnRrKGZtdCk7fXdoaWxlKDApCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKENPTkZJR19TTVApCitzdGF0aWMgdm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQpIHt9CisjZW5kaWYKKwogaW50IHBzM19nZXRfZmlybXdhcmVfdmVyc2lvbih1bmlvbiBwczNfZmlybXdhcmVfdmVyc2lvbiAqdikKIHsKIAlpbnQgcmVzdWx0ID0gbHYxX2dldF92ZXJzaW9uX2luZm8oJnYtPnJhdyk7CkBAIC02NiwyMiArNzAsMzUgQEAKIAlsdjFfcGF1c2UoMCk7CiB9CiAKK3N0YXRpYyB2b2lkIHBzM19yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlEQkcoIiVzOiVkIGNtZCAnJXMnXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGNtZCk7CisKKwlzbXBfc2VuZF9zdG9wKCk7CisJcHMzX3N5c19tYW5hZ2VyX3Jlc3RhcnQoKTsgLyogbmV2ZXIgcmV0dXJucyAqLworfQorCitzdGF0aWMgdm9pZCBwczNfcG93ZXJfb2ZmKHZvaWQpCit7CisJREJHKCIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXNtcF9zZW5kX3N0b3AoKTsKKwlwczNfc3lzX21hbmFnZXJfcG93ZXJfb2ZmKCk7IC8qIG5ldmVyIHJldHVybnMgKi8KK30KKwogc3RhdGljIHZvaWQgcHMzX3BhbmljKGNoYXIgKnN0cikKIHsKIAlEQkcoIiVzOiVkICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIHN0cik7CiAKLSNpZmRlZiBDT05GSUdfU01QCiAJc21wX3NlbmRfc3RvcCgpOwotI2VuZGlmCiAJcHJpbnRrKCJcbiIpOwogCXByaW50aygiICAgU3lzdGVtIGRvZXMgbm90IHJlYm9vdCBhdXRvbWF0aWNhbGx5LlxuIik7CiAJcHJpbnRrKCIgICBQbGVhc2UgcHJlc3MgUE9XRVIgYnV0dG9uLlxuIik7CiAJcHJpbnRrKCJcbiIpOwogCi0JZm9yICg7OykgOworCXdoaWxlKDEpOwogfQogCi0KIHN0YXRpYyB2b2lkIHByZWFsbG9jKHN0cnVjdCBwczNfcHJlYWxsb2MgKnApCiB7CiAJaWYgKCFwLT5zaXplKQpAQCAtMjE5LDYgKzIzNiw4IEBACiAJLmdldF9ydGNfdGltZQkJCT0gcHMzX2dldF9ydGNfdGltZSwKIAkuY2FsaWJyYXRlX2RlY3IJCQk9IHBzM19jYWxpYnJhdGVfZGVjciwKIAkucHJvZ3Jlc3MJCQk9IHBzM19wcm9ncmVzcywKKwkucmVzdGFydAkJCT0gcHMzX3Jlc3RhcnQsCisJLnBvd2VyX29mZgkJCT0gcHMzX3Bvd2VyX29mZiwKICNpZiBkZWZpbmVkKENPTkZJR19LRVhFQykKIAkua2V4ZWNfY3B1X2Rvd24JCQk9IHBzM19rZXhlY19jcHVfZG93biwKIAkubWFjaGluZV9rZXhlYwkJCT0gcHMzX21hY2hpbmVfa2V4ZWMsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKaW5kZXggZGMwNTgzYi4uMmRmZDA1MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogb2JqLXkJCQk6PSBwY2kubyBscGFyLm8gaHZDYWxsLm8gbnZyYW0ubyByZWNvbmZpZy5vIFwKIAkJCSAgIHNldHVwLm8gaW9tbXUubyByYXMubyBydGFzZC5vIHBjaV9kbHBhci5vIFwKLQkJCSAgIGZpcm13YXJlLm8KKwkJCSAgIGZpcm13YXJlLm8gcG93ZXIubwogb2JqLSQoQ09ORklHX1NNUCkJKz0gc21wLm8KIG9iai0kKENPTkZJR19YSUNTKQkrPSB4aWNzLm8KIG9iai0kKENPTkZJR19TQ0FOTE9HKQkrPSBzY2FubG9nLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wb3dlci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Bvd2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYyNGI3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wb3dlci5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiAgSW50ZXJmYWNlIGZvciBwb3dlci1tYW5hZ2VtZW50IGZvciBwcGM2NCBjb21wbGlhbnQgcGxhdGZvcm0KKyAqCisgKiAgTWFuaXNoIEFodWphIDxtYWh1amFAdXMuaWJtLmNvbT4KKyAqCisgKiAgRmViIDIwMDcKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCit1bnNpZ25lZCBsb25nIHJ0YXNfcG93ZXJvbl9hdXRvOyAvKiBkZWZhdWx0IGFuZCBub3JtYWwgc3RhdGUgaXMgMCAqLworCitzdGF0aWMgc3NpemVfdCBhdXRvX3Bvd2Vyb25fc2hvdyhzdHJ1Y3Qgc3Vic3lzdGVtICpzdWJzeXMsIGNoYXIgKmJ1ZikKK3sKKyAgICAgICAgcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBydGFzX3Bvd2Vyb25fYXV0byk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CithdXRvX3Bvd2Vyb25fc3RvcmUoc3RydWN0IHN1YnN5c3RlbSAqc3Vic3lzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyB1cHNfcmVzdGFydDsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJWx1IiwgJnVwc19yZXN0YXJ0KTsKKworCWlmICgocmV0ID09IDEpICYmICgodXBzX3Jlc3RhcnQgPT0gMSkgfHwgKHVwc19yZXN0YXJ0ID09IDApKSl7CisJCXJ0YXNfcG93ZXJvbl9hdXRvID0gdXBzX3Jlc3RhcnQ7CisJCXJldHVybiBuOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlIGF1dG9fcG93ZXJvbl9hdHRyID0geworICAgICAgICAuYXR0ciAgID0geworICAgICAgICAgICAgICAgIC5uYW1lID0gX19zdHJpbmdpZnkoYXV0b19wb3dlcm9uKSwKKyAgICAgICAgICAgICAgICAubW9kZSA9IDA2NDQsCisgICAgICAgIH0sCisgICAgICAgIC5zaG93ICAgPSBhdXRvX3Bvd2Vyb25fc2hvdywKKyAgICAgICAgLnN0b3JlICA9IGF1dG9fcG93ZXJvbl9zdG9yZSwKK307CisKKyNpZm5kZWYgQ09ORklHX1BNCitkZWNsX3N1YnN5cyhwb3dlcixOVUxMLE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZ1tdID0geworICAgICAgICAmYXV0b19wb3dlcm9uX2F0dHIuYXR0ciwKKyAgICAgICAgTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGF0dHJfZ3JvdXAgPSB7CisgICAgICAgIC5hdHRycyA9IGcsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbV9pbml0KHZvaWQpCit7CisgICAgICAgIGludCBlcnJvciA9IHN1YnN5c3RlbV9yZWdpc3RlcigmcG93ZXJfc3Vic3lzKTsKKyAgICAgICAgaWYgKCFlcnJvcikKKyAgICAgICAgICAgICAgICBlcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcG93ZXJfc3Vic3lzLmtzZXQua29iaiwmYXR0cl9ncm91cCk7CisgICAgICAgIHJldHVybiBlcnJvcjsKK30KK2NvcmVfaW5pdGNhbGwocG1faW5pdCk7CisjZWxzZQorZXh0ZXJuIHN0cnVjdCBzdWJzeXN0ZW0gcG93ZXJfc3Vic3lzOworCitzdGF0aWMgaW50IF9faW5pdCBhcG9fcG1faW5pdCh2b2lkKQoreworCXJldHVybiAoc3Vic3lzX2NyZWF0ZV9maWxlKCZwb3dlcl9zdWJzeXMsICZhdXRvX3Bvd2Vyb25fYXR0cikpOworfQorX19pbml0Y2FsbChhcG9fcG1faW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wc2VyaWVzLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcHNlcmllcy5oCmluZGV4IGI0M2YxMzkuLjIyYmMwMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wc2VyaWVzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BzZXJpZXMuaApAQCAtMjksOCArMjksMTEgQEAKIGV4dGVybiB2b2lkIHNldHVwX2tleGVjX2NwdV9kb3duX3hpY3Modm9pZCk7CiBleHRlcm4gdm9pZCBzZXR1cF9rZXhlY19jcHVfZG93bl9tcGljKHZvaWQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc2V0dXBfa2V4ZWNfY3B1X2Rvd25feGljcyh2b2lkKSB7IH07Ci1zdGF0aWMgaW5saW5lIHNldHVwX2tleGVjX2NwdV9kb3duX21waWModm9pZCkgeyB9Oworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2tleGVjX2NwdV9kb3duX3hpY3Modm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfa2V4ZWNfY3B1X2Rvd25fbXBpYyh2b2lkKSB7IH0KICNlbmRpZgogCisvKiBQb3dlcm9uIGZsYWcgdXNlZCBmb3IgZW5hYmxpbmcgYXV0byB1cHMgcmVzdGFydCAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcnRhc19wb3dlcm9uX2F1dG87CisKICNlbmRpZiAvKiBfUFNFUklFU19QU0VSSUVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggNDM1YTA0NS4uMzRhZmY0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTQ4Niw2ICs0ODYsMzQgQEAKIAlyZXR1cm4gUENJX1BST0JFX05PUk1BTDsKIH0KIAorLyoqCisgKiBwU2VyaWVzX3Bvd2VyX29mZiAtIHRlbGwgZmlybXdhcmUgYWJvdXQgaG93IHRvIHBvd2VyIG9mZiB0aGUgc3lzdGVtLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgZWl0aGVyIHRoZSBwb3dlci1vZmYgcnRhcyB0b2tlbiBpbiBub3JtYWwgY2FzZXMKKyAqIG9yIHRoZSBpYm0scG93ZXItb2ZmLXVwcyB0b2tlbiAoaWYgcHJlc2VudCAmIHJlcXVlc3RlZCkgaW4gY2FzZSBvZgorICogYSBwb3dlciBmYWlsdXJlLiBJZiBwb3dlci1vZmYgdG9rZW4gaXMgdXNlZCwgcG93ZXIgb24gd2lsbCBvbmx5IGJlCisgKiBwb3NzaWJsZSB3aXRoIHBvd2VyIGJ1dHRvbiBwcmVzcy4gSWYgaWJtLHBvd2VyLW9mZi11cHMgdG9rZW4gaXMgdXNlZAorICogaXQgd2lsbCBhbGxvdyBhdXRvIHBvd2Vyb24gYWZ0ZXIgcG93ZXIgaXMgcmVzdG9yZWQuCisgKi8KK3ZvaWQgcFNlcmllc19wb3dlcl9vZmYodm9pZCkKK3sKKwlpbnQgcmM7CisJaW50IHJ0YXNfcG93ZXJvZmZfdXBzX3Rva2VuID0gcnRhc190b2tlbigiaWJtLHBvd2VyLW9mZi11cHMiKTsKKworCWlmIChydGFzX2ZsYXNoX3Rlcm1faG9vaykKKwkJcnRhc19mbGFzaF90ZXJtX2hvb2soU1lTX1BPV0VSX09GRik7CisKKwlpZiAocnRhc19wb3dlcm9uX2F1dG8gPT0gMCB8fAorCQlydGFzX3Bvd2Vyb2ZmX3Vwc190b2tlbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkgeworCQlyYyA9IHJ0YXNfY2FsbChydGFzX3Rva2VuKCJwb3dlci1vZmYiKSwgMiwgMSwgTlVMTCwgLTEsIC0xKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUlRBUyBwb3dlci1vZmYgcmV0dXJuZWQgJWRcbiIsIHJjKTsKKwl9IGVsc2UgeworCQlyYyA9IHJ0YXNfY2FsbChydGFzX3Bvd2Vyb2ZmX3Vwc190b2tlbiwgMCwgMSwgTlVMTCk7CisJCXByaW50ayhLRVJOX0lORk8gIlJUQVMgaWJtLHBvd2VyLW9mZi11cHMgcmV0dXJuZWQgJWRcbiIsIHJjKTsKKwl9CisJZm9yICg7Oyk7Cit9CisKIGRlZmluZV9tYWNoaW5lKHBzZXJpZXMpIHsKIAkubmFtZQkJCT0gInBTZXJpZXMiLAogCS5wcm9iZQkJCT0gcFNlcmllc19wcm9iZSwKQEAgLTQ5Niw3ICs1MjQsNyBAQAogCS5wY2liaW9zX2ZpeHVwCQk9IHBTZXJpZXNfZmluYWxfZml4dXAsCiAJLnBjaV9wcm9iZV9tb2RlCQk9IHBTZXJpZXNfcGNpX3Byb2JlX21vZGUsCiAJLnJlc3RhcnQJCT0gcnRhc19yZXN0YXJ0LAotCS5wb3dlcl9vZmYJCT0gcnRhc19wb3dlcl9vZmYsCisJLnBvd2VyX29mZgkJPSBwU2VyaWVzX3Bvd2VyX29mZiwKIAkuaGFsdAkJCT0gcnRhc19oYWx0LAogCS5wYW5pYwkJCT0gcnRhc19vc190ZXJtLAogCS5nZXRfYm9vdF90aW1lCQk9IHJ0YXNfZ2V0X2Jvb3RfdGltZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCmluZGV4IDg1ZGNkZjEuLjI2Y2EzZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIG9iai0kKENPTkZJR19QUENfTVBDMTA2KQkrPSBncmFja2xlLm8KIG9iai0kKENPTkZJR19QUENfRENSKQkJKz0gZGNyLm8KIG9iai0kKENPTkZJR19QUENfRENSX05BVElWRSkJKz0gZGNyLWxvdy5vCitvYmotJChDT05GSUdfUFBDX1BNSSkJCSs9IHBtaS5vCiBvYmotJChDT05GSUdfVTNfREFSVCkJCSs9IGRhcnRfaW9tbXUubwogb2JqLSQoQ09ORklHX01NSU9fTlZSQU0pCSs9IG1taW9fbnZyYW0ubwogb2JqLSQoQ09ORklHX0ZTTF9TT0MpCQkrPSBmc2xfc29jLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMKaW5kZXggMzQxNjFiYy4uZDIwZjAyOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCkBAIC0yMzMsMTQgKzIzMyw3IEBACiAJCQlnb3RvIGVycjsKIAkJfQogCi0JCW1hY19hZGRyID0gZ2V0X3Byb3BlcnR5KG5wLCAibG9jYWwtbWFjLWFkZHJlc3MiLCBOVUxMKTsKLQkJaWYgKG1hY19hZGRyID09IE5VTEwpCi0JCQltYWNfYWRkciA9IGdldF9wcm9wZXJ0eShucCwgIm1hYy1hZGRyZXNzIiwgTlVMTCk7Ci0JCWlmIChtYWNfYWRkciA9PSBOVUxMKSB7Ci0JCQkvKiBPYnNvbGV0ZSAqLwotCQkJbWFjX2FkZHIgPSBnZXRfcHJvcGVydHkobnAsICJhZGRyZXNzIiwgTlVMTCk7Ci0JCX0KLQorCQltYWNfYWRkciA9IG9mX2dldF9tYWNfYWRkcmVzcyhucCk7CiAJCWlmIChtYWNfYWRkcikKIAkJCW1lbWNweShnZmFyX2RhdGEubWFjX2FkZHIsIG1hY19hZGRyLCA2KTsKIApAQCAtNjQ2LDggKzYzOSw5IEBACiAJCQlnb3RvIHVucmVnOwogCQl9CiAKLQkJbWFjX2FkZHIgPSBnZXRfcHJvcGVydHkobnAsICJtYWMtYWRkcmVzcyIsIE5VTEwpOwotCQltZW1jcHkoZnNfZW5ldF9kYXRhLm1hY2FkZHIsIG1hY19hZGRyLCA2KTsKKwkJbWFjX2FkZHIgPSBvZl9nZXRfbWFjX2FkZHJlc3MobnApOworCQlpZiAobWFjX2FkZHIpCisJCQltZW1jcHkoZnNfZW5ldF9kYXRhLm1hY2FkZHIsIG1hY19hZGRyLCA2KTsKIAogCQlwaCA9IGdldF9wcm9wZXJ0eShucCwgInBoeS1oYW5kbGUiLCBOVUxMKTsKIAkJcGh5ID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnBoKTsKQEAgLTkzMSw4ICs5MjUsOSBAQAogCQkJZ290byBlcnI7CiAJCXJbMF0ubmFtZSA9IGVuZXRfcmVnczsKIAotCQltYWNfYWRkciA9ICh2b2lkICopZ2V0X3Byb3BlcnR5KG5wLCAibWFjLWFkZHJlc3MiLCBOVUxMKTsKLQkJbWVtY3B5KGZzX2VuZXRfZGF0YS5tYWNhZGRyLCBtYWNfYWRkciwgNik7CisJCW1hY19hZGRyID0gb2ZfZ2V0X21hY19hZGRyZXNzKG5wKTsKKwkJaWYgKG1hY19hZGRyKQorCQkJbWVtY3B5KGZzX2VuZXRfZGF0YS5tYWNhZGRyLCBtYWNfYWRkciwgNik7CiAKIAkJcGggPSAocGhhbmRsZSAqKSBnZXRfcHJvcGVydHkobnAsICJwaHktaGFuZGxlIiwgTlVMTCk7CiAJCWlmIChwaCAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwppbmRleCA0ZTU0YTA5Li5iY2ZiOTAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwpAQCAtMTM3MCw3ICsxMzcwLDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBJUEkgJWRcbiIsIGkpOwogCQkJYnJlYWs7CiAJCX0KLQkJcmVxdWVzdF9pcnEodmlwaSwgbXBpY19pcGlfYWN0aW9uLCBJUlFGX0RJU0FCTEVELAorCQlyZXF1ZXN0X2lycSh2aXBpLCBtcGljX2lwaV9hY3Rpb24sIElSUUZfRElTQUJMRUR8SVJRRl9QRVJDUFUsCiAJCQkgICAgaXBpX25hbWVzW2ldLCBtcGljKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BtaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTI4MjAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wbWkuYwpAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIHBtaSBkcml2ZXIKKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJIIDIwMDUKKyAqCisgKiBQTUkgKFBsYXRmb3JtIE1hbmFnZW1lbnQgSW50ZXJydXB0KSBpcyBhIHdheSB0byBjb21tdW5pY2F0ZQorICogd2l0aCB0aGUgQk1DIChCYXNlYm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyKSB2aWEgaW50ZXJydXB0cy4KKyAqIFVubGlrZSBJUE1JIGl0IGlzIGJpZGlyZWN0aW9uYWwgYW5kIGhhcyBhIGxvdyBsYXRlbmN5LgorICoKKyAqIEF1dGhvcjogQ2hyaXN0aWFuIEtyYWZmdCA8a3JhZmZ0QGRlLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wbWkuaD4KKworCitzdHJ1Y3QgcG1pX2RhdGEgeworCXN0cnVjdCBsaXN0X2hlYWQJaGFuZGxlcjsKKwlzcGlubG9ja190CQloYW5kbGVyX3NwaW5sb2NrOworCXNwaW5sb2NrX3QJCXBtaV9zcGlubG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCW1zZ19tdXRleDsKKwlwbWlfbWVzc2FnZV90CQltc2c7CisJc3RydWN0IGNvbXBsZXRpb24JKmNvbXBsZXRpb247CisJc3RydWN0IG9mX2RldmljZQkqZGV2OworCWludAkJCWlycTsKKwl1OCBfX2lvbWVtCQkqcG1pX3JlZzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKK307CisKKworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpvZl9pb21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCByZXNvdXJjZSByZXM7CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcykpCisJCXJldHVybiBOVUxMOworCisJcHJfZGVidWcoIlJlc291cmNlIHN0YXJ0OiAweCVseFxuIiwgcmVzLnN0YXJ0KTsKKwlwcl9kZWJ1ZygiUmVzb3VyY2UgZW5kOiAweCVseFxuIiwgcmVzLmVuZCk7CisKKwlyZXR1cm4gaW9yZW1hcChyZXMuc3RhcnQsIDEgKyByZXMuZW5kIC0gcmVzLnN0YXJ0KTsKK30KKworCitzdGF0aWMgaW50IHBtaV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBtaV9kYXRhICpkYXRhOworCXU4IHR5cGU7CisJaW50IHJjOworCisJZGF0YSA9IGRldl9pZDsKKworCXNwaW5fbG9jaygmZGF0YS0+cG1pX3NwaW5sb2NrKTsKKworCXR5cGUgPSBpb3JlYWQ4KGRhdGEtPnBtaV9yZWcgKyBQTUlfUkVBRF9UWVBFKTsKKwlwcl9kZWJ1ZygicG1pOiBnb3QgbWVzc2FnZSBvZiB0eXBlICVkXG4iLCB0eXBlKTsKKworCWlmICh0eXBlICYgUE1JX0FDSyAmJiAhZGF0YS0+Y29tcGxldGlvbikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbWk6IGdvdCB1bmV4cGVjdGVkIEFDSyBtZXNzYWdlLlxuIik7CisJCXJjID0gLUVJTzsKKwkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKGRhdGEtPmNvbXBsZXRpb24gJiYgISh0eXBlICYgUE1JX0FDSykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAicG1pOiBleHBlY3RlZCBBQ0ssIGJ1dCBnb3QgJWRcbiIsIHR5cGUpOworCQlyYyA9IC1FSU87CisJCWdvdG8gdW5sb2NrOworCX0KKworCWRhdGEtPm1zZy50eXBlID0gdHlwZTsKKwlkYXRhLT5tc2cuZGF0YTAgPSBpb3JlYWQ4KGRhdGEtPnBtaV9yZWcgKyBQTUlfUkVBRF9EQVRBMCk7CisJZGF0YS0+bXNnLmRhdGExID0gaW9yZWFkOChkYXRhLT5wbWlfcmVnICsgUE1JX1JFQURfREFUQTEpOworCWRhdGEtPm1zZy5kYXRhMiA9IGlvcmVhZDgoZGF0YS0+cG1pX3JlZyArIFBNSV9SRUFEX0RBVEEyKTsKKwlyYyA9IDA7Cit1bmxvY2s6CisJc3Bpbl91bmxvY2soJmRhdGEtPnBtaV9zcGlubG9jayk7CisKKwlpZiAocmMgPT0gLUVJTykgeworCQlyYyA9IElSUV9IQU5ETEVEOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGF0YS0+bXNnLnR5cGUgJiBQTUlfQUNLKSB7CisJCWNvbXBsZXRlKGRhdGEtPmNvbXBsZXRpb24pOworCQlyYyA9IElSUV9IQU5ETEVEOworCQlnb3RvIG91dDsKKwl9CisKKwlzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrKTsKKworCXJjID0gSVJRX0hBTkRMRUQ7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBtaV9tYXRjaFtdID0geworCXsgLnR5cGUgPSAiaWJtLHBtaSIsIC5uYW1lID0gImlibSxwbWkiIH0sCisJe30sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwbWlfbWF0Y2gpOworCitzdGF0aWMgdm9pZCBwbWlfbm90aWZ5X2hhbmRsZXJzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcG1pX2RhdGEgKmRhdGE7CisJc3RydWN0IHBtaV9oYW5kbGVyICpoYW5kbGVyOworCisJZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcG1pX2RhdGEsIHdvcmspOworCisJc3Bpbl9sb2NrKCZkYXRhLT5oYW5kbGVyX3NwaW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZkYXRhLT5oYW5kbGVyLCBub2RlKSB7CisJCXByX2RlYnVnKEtFUk5fSU5GTyAicG1pOiBub3RpZnlpbmcgaGFuZGxlciAlcFxuIiwgaGFuZGxlcik7CisJCWlmIChoYW5kbGVyLT50eXBlID09IGRhdGEtPm1zZy50eXBlKQorCQkJaGFuZGxlci0+aGFuZGxlX3BtaV9tZXNzYWdlKGRhdGEtPmRldiwgZGF0YS0+bXNnKTsKKwl9CisJc3Bpbl91bmxvY2soJmRhdGEtPmhhbmRsZXJfc3BpbmxvY2spOworfQorCitzdGF0aWMgaW50IHBtaV9vZl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsCisJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5ub2RlOworCXN0cnVjdCBwbWlfZGF0YSAqZGF0YTsKKwlpbnQgcmM7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBtaV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCXByaW50ayhLRVJOX0VSUiAicG1pOiBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5LlxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZGF0YS0+cG1pX3JlZyA9IG9mX2lvbWFwKG5wKTsKKwlpZiAoIWRhdGEtPnBtaV9yZWcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwbWk6IGludmFsaWQgcmVnaXN0ZXIgYWRkcmVzcy5cbiIpOworCQlyYyA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyb3JfY2xlYW51cF9kYXRhOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZkYXRhLT5oYW5kbGVyKTsKKworCW11dGV4X2luaXQoJmRhdGEtPm1zZ19tdXRleCk7CisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPnBtaV9zcGlubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmhhbmRsZXJfc3BpbmxvY2spOworCisJSU5JVF9XT1JLKCZkYXRhLT53b3JrLCBwbWlfbm90aWZ5X2hhbmRsZXJzKTsKKworCWRldi0+ZGV2LmRyaXZlcl9kYXRhID0gZGF0YTsKKwlkYXRhLT5kZXYgPSBkZXY7CisKKwlkYXRhLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJaWYgKGRhdGEtPmlycSA9PSBOT19JUlEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwbWk6IGludmFsaWQgaW50ZXJydXB0LlxuIik7CisJCXJjID0gLUVGQVVMVDsKKwkJZ290byBlcnJvcl9jbGVhbnVwX2lvbWFwOworCX0KKworCXJjID0gcmVxdWVzdF9pcnEoZGF0YS0+aXJxLCBwbWlfaXJxX2hhbmRsZXIsIDAsICJwbWkiLCBkYXRhKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwbWk6IGNhbid0IHJlcXVlc3QgSVJRICVkOiByZXR1cm5lZCAlZFxuIiwKKwkJCQlkYXRhLT5pcnEsIHJjKTsKKwkJZ290byBlcnJvcl9jbGVhbnVwX2lvbWFwOworCX0KKworCXByaW50ayhLRVJOX0lORk8gInBtaTogZm91bmQgcG1pIGRldmljZSBhdCBhZGRyICVwLlxuIiwgZGF0YS0+cG1pX3JlZyk7CisKKwlnb3RvIG91dDsKKworZXJyb3JfY2xlYW51cF9pb21hcDoKKwlpb3VubWFwKGRhdGEtPnBtaV9yZWcpOworCitlcnJvcl9jbGVhbnVwX2RhdGE6CisJa2ZyZWUoZGF0YSk7CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcG1pX29mX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBtaV9kYXRhICpkYXRhOworCXN0cnVjdCBwbWlfaGFuZGxlciAqaGFuZGxlciwgKnRtcDsKKworCWRhdGEgPSBkZXYtPmRldi5kcml2ZXJfZGF0YTsKKworCWZyZWVfaXJxKGRhdGEtPmlycSwgZGF0YSk7CisJaW91bm1hcChkYXRhLT5wbWlfcmVnKTsKKworCXNwaW5fbG9jaygmZGF0YS0+aGFuZGxlcl9zcGlubG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaGFuZGxlciwgdG1wLCAmZGF0YS0+aGFuZGxlciwgbm9kZSkKKwkJbGlzdF9kZWwoJmhhbmRsZXItPm5vZGUpOworCisJc3Bpbl91bmxvY2soJmRhdGEtPmhhbmRsZXJfc3BpbmxvY2spOworCisJa2ZyZWUoZGV2LT5kZXYuZHJpdmVyX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHBtaV9vZl9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInBtaSIsCisJLm1hdGNoX3RhYmxlCT0gcG1pX21hdGNoLAorCS5wcm9iZQkJPSBwbWlfb2ZfcHJvYmUsCisJLnJlbW92ZQkJPSBwbWlfb2ZfcmVtb3ZlCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbWlfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZwbWlfb2ZfcGxhdGZvcm1fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHBtaV9tb2R1bGVfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbWlfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmcG1pX29mX3BsYXRmb3JtX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChwbWlfbW9kdWxlX2V4aXQpOworCit2b2lkIHBtaV9zZW5kX21lc3NhZ2Uoc3RydWN0IG9mX2RldmljZSAqZGV2aWNlLCBwbWlfbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3QgcG1pX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wbGV0aW9uKTsKKworCWRhdGEgPSBkZXZpY2UtPmRldi5kcml2ZXJfZGF0YTsKKworCW11dGV4X2xvY2soJmRhdGEtPm1zZ19tdXRleCk7CisKKwlkYXRhLT5tc2cgPSBtc2c7CisJcHJfZGVidWcoInBtaV9zZW5kX21lc3NhZ2U6IG1zZyBpcyAlMDh4XG4iLCAqKHUzMiopJm1zZyk7CisKKwlkYXRhLT5jb21wbGV0aW9uID0gJmNvbXBsZXRpb247CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+cG1pX3NwaW5sb2NrLCBmbGFncyk7CisJaW93cml0ZTgobXNnLmRhdGEwLCBkYXRhLT5wbWlfcmVnICsgUE1JX1dSSVRFX0RBVEEwKTsKKwlpb3dyaXRlOChtc2cuZGF0YTEsIGRhdGEtPnBtaV9yZWcgKyBQTUlfV1JJVEVfREFUQTEpOworCWlvd3JpdGU4KG1zZy5kYXRhMiwgZGF0YS0+cG1pX3JlZyArIFBNSV9XUklURV9EQVRBMik7CisJaW93cml0ZTgobXNnLnR5cGUsIGRhdGEtPnBtaV9yZWcgKyBQTUlfV1JJVEVfVFlQRSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+cG1pX3NwaW5sb2NrLCBmbGFncyk7CisKKwlwcl9kZWJ1ZygicG1pX3NlbmRfbWVzc2FnZTogd2FpdCBmb3IgY29tcGxldGlvblxuIik7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChkYXRhLT5jb21wbGV0aW9uLAorCQkJCQkJICBQTUlfVElNRU9VVCk7CisKKwlkYXRhLT5jb21wbGV0aW9uID0gTlVMTDsKKworCW11dGV4X3VubG9jaygmZGF0YS0+bXNnX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtaV9zZW5kX21lc3NhZ2UpOworCit2b2lkIHBtaV9yZWdpc3Rlcl9oYW5kbGVyKHN0cnVjdCBvZl9kZXZpY2UgKmRldmljZSwKKwkJCSAgc3RydWN0IHBtaV9oYW5kbGVyICpoYW5kbGVyKQoreworCXN0cnVjdCBwbWlfZGF0YSAqZGF0YTsKKwlkYXRhID0gZGV2aWNlLT5kZXYuZHJpdmVyX2RhdGE7CisKKwlzcGluX2xvY2soJmRhdGEtPmhhbmRsZXJfc3BpbmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmhhbmRsZXItPm5vZGUsICZkYXRhLT5oYW5kbGVyKTsKKwlzcGluX3VubG9jaygmZGF0YS0+aGFuZGxlcl9zcGlubG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbWlfcmVnaXN0ZXJfaGFuZGxlcik7CisKK3ZvaWQgcG1pX3VucmVnaXN0ZXJfaGFuZGxlcihzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXZpY2UsCisJCQkgICAgc3RydWN0IHBtaV9oYW5kbGVyICpoYW5kbGVyKQoreworCXN0cnVjdCBwbWlfZGF0YSAqZGF0YTsKKworCXByX2RlYnVnKCJwbWk6IHVucmVnaXN0ZXJpbmcgaGFuZGxlciAlcFxuIiwgaGFuZGxlcik7CisKKwlkYXRhID0gZGV2aWNlLT5kZXYuZHJpdmVyX2RhdGE7CisKKwlzcGluX2xvY2soJmRhdGEtPmhhbmRsZXJfc3BpbmxvY2spOworCWxpc3RfZGVsKCZoYW5kbGVyLT5ub2RlKTsKKwlzcGluX3VubG9jaygmZGF0YS0+aGFuZGxlcl9zcGlubG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbWlfdW5yZWdpc3Rlcl9oYW5kbGVyKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXN0aWFuIEtyYWZmdCA8a3JhZmZ0QGRlLmlibS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklCTSBQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVycnVwdCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19mYXN0LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2NfZmFzdC5jCmluZGV4IGU2NTc1NTkuLmE0NTdhYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19mYXN0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX2Zhc3QuYwpAQCAtMSwxMyArMSwxMiBAQAogLyoKLSAqIGFyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19mYXN0LmMKLSAqCi0gKiBRRSBVQ0MgRmFzdCBBUEkgU2V0IC0gVUNDIEZhc3Qgc3BlY2lmaWMgcm91dGluZXMgaW1wbGVtZW50YXRpb25zLgotICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1dG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQXV0aG9yczogCVNobG9taSBHcmlkaXNoIDxncmlkaXNoQGZyZWVzY2FsZS5jb20+CiAgKiAJCUxpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CiAgKgorICogRGVzY3JpcHRpb246CisgKiBRRSBVQ0MgRmFzdCBBUEkgU2V0IC0gVUNDIEZhc3Qgc3BlY2lmaWMgcm91dGluZXMgaW1wbGVtZW50YXRpb25zLgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKQEAgLTI3LDc5ICsyNiw2MSBAQAogI2luY2x1ZGUgPGFzbS91Y2MuaD4KICNpbmNsdWRlIDxhc20vdWNjX2Zhc3QuaD4KIAotI2RlZmluZSB1Y2NmX3ByaW50ayhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKLQlwcmludGsobGV2ZWwgZm9ybWF0ICJcbiIsICMjIGFyZykKLQotI2RlZmluZSB1Y2NmX2RiZyhmb3JtYXQsIGFyZy4uLikgXAotCXVjY2ZfcHJpbnRrKEtFUk5fREVCVUcgLCBmb3JtYXQgLCAjIyBhcmcpCi0jZGVmaW5lIHVjY2ZfZXJyKGZvcm1hdCwgYXJnLi4uKSBcCi0JdWNjZl9wcmludGsoS0VSTl9FUlIgLCBmb3JtYXQgLCAjIyBhcmcpCi0jZGVmaW5lIHVjY2ZfaW5mbyhmb3JtYXQsIGFyZy4uLikgXAotCXVjY2ZfcHJpbnRrKEtFUk5fSU5GTyAsIGZvcm1hdCAsICMjIGFyZykKLSNkZWZpbmUgdWNjZl93YXJuKGZvcm1hdCwgYXJnLi4uKSBcCi0JdWNjZl9wcmludGsoS0VSTl9XQVJOSU5HICwgZm9ybWF0ICwgIyMgYXJnKQotCi0jaWZkZWYgVUNDRl9WRVJCT1NFX0RFQlVHCi0jZGVmaW5lIHVjY2ZfdmRiZyB1Y2NmX2RiZwotI2Vsc2UKLSNkZWZpbmUgdWNjZl92ZGJnKGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCQkJCS8qIFVDQ0ZfVkVSQk9TRV9ERUJVRyAqLwotCiB2b2lkIHVjY19mYXN0X2R1bXBfcmVncyhzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqIHVjY2YpCiB7Ci0JdWNjZl9pbmZvKCJVQ0MlZCBGYXN0IHJlZ2lzdGVyczoiLCB1Y2NmLT51Zl9pbmZvLT51Y2NfbnVtKTsKLQl1Y2NmX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwgKHUzMikgdWNjZi0+dWZfcmVncyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVUNDJWQgRmFzdCByZWdpc3RlcnM6IiwgdWNjZi0+dWZfaW5mby0+dWNjX251bSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQmFzZSBhZGRyZXNzOiAweCUwOHgiLCAodTMyKSB1Y2NmLT51Zl9yZWdzKTsKIAotCXVjY2ZfaW5mbygiZ3VtciAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCXByaW50ayhLRVJOX0lORk8gImd1bXIgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKIAkJICAodTMyKSAmIHVjY2YtPnVmX3JlZ3MtPmd1bXIsIGluX2JlMzIoJnVjY2YtPnVmX3JlZ3MtPmd1bXIpKTsKLQl1Y2NmX2luZm8oInVwc21yIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwlwcmludGsoS0VSTl9JTkZPICJ1cHNtciA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCiAJCSAgKHUzMikgJiB1Y2NmLT51Zl9yZWdzLT51cHNtciwgaW5fYmUzMigmdWNjZi0+dWZfcmVncy0+dXBzbXIpKTsKLQl1Y2NmX2luZm8oInV0b2RyIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKKwlwcmludGsoS0VSTl9JTkZPICJ1dG9kciA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA0eCIsCiAJCSAgKHUzMikgJiB1Y2NmLT51Zl9yZWdzLT51dG9kciwgaW5fYmUxNigmdWNjZi0+dWZfcmVncy0+dXRvZHIpKTsKLQl1Y2NmX2luZm8oInVkc3IgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKKwlwcmludGsoS0VSTl9JTkZPICJ1ZHNyICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA0eCIsCiAJCSAgKHUzMikgJiB1Y2NmLT51Zl9yZWdzLT51ZHNyLCBpbl9iZTE2KCZ1Y2NmLT51Zl9yZWdzLT51ZHNyKSk7Ci0JdWNjZl9pbmZvKCJ1Y2NlICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJcHJpbnRrKEtFUk5fSU5GTyAidWNjZSAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAogCQkgICh1MzIpICYgdWNjZi0+dWZfcmVncy0+dWNjZSwgaW5fYmUzMigmdWNjZi0+dWZfcmVncy0+dWNjZSkpOwotCXVjY2ZfaW5mbygidWNjbSAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCXByaW50ayhLRVJOX0lORk8gInVjY20gIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKIAkJICAodTMyKSAmIHVjY2YtPnVmX3JlZ3MtPnVjY20sIGluX2JlMzIoJnVjY2YtPnVmX3JlZ3MtPnVjY20pKTsKLQl1Y2NmX2luZm8oInVjY3MgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDJ4IiwKKwlwcmludGsoS0VSTl9JTkZPICJ1Y2NzICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTAyeCIsCiAJCSAgKHUzMikgJiB1Y2NmLT51Zl9yZWdzLT51Y2NzLCB1Y2NmLT51Zl9yZWdzLT51Y2NzKTsKLQl1Y2NmX2luZm8oInVyZmIgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwlwcmludGsoS0VSTl9JTkZPICJ1cmZiICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCiAJCSAgKHUzMikgJiB1Y2NmLT51Zl9yZWdzLT51cmZiLCBpbl9iZTMyKCZ1Y2NmLT51Zl9yZWdzLT51cmZiKSk7Ci0JdWNjZl9pbmZvKCJ1cmZzICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA0eCIsCisJcHJpbnRrKEtFUk5fSU5GTyAidXJmcyAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAogCQkgICh1MzIpICYgdWNjZi0+dWZfcmVncy0+dXJmcywgaW5fYmUxNigmdWNjZi0+dWZfcmVncy0+dXJmcykpOwotCXVjY2ZfaW5mbygidXJmZXQgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAorCXByaW50ayhLRVJOX0lORk8gInVyZmV0IDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKIAkJICAodTMyKSAmIHVjY2YtPnVmX3JlZ3MtPnVyZmV0LCBpbl9iZTE2KCZ1Y2NmLT51Zl9yZWdzLT51cmZldCkpOwotCXVjY2ZfaW5mbygidXJmc2V0OiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAorCXByaW50ayhLRVJOX0lORk8gInVyZnNldDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKIAkJICAodTMyKSAmIHVjY2YtPnVmX3JlZ3MtPnVyZnNldCwKIAkJICBpbl9iZTE2KCZ1Y2NmLT51Zl9yZWdzLT51cmZzZXQpKTsKLQl1Y2NmX2luZm8oInV0ZmIgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwlwcmludGsoS0VSTl9JTkZPICJ1dGZiICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCiAJCSAgKHUzMikgJiB1Y2NmLT51Zl9yZWdzLT51dGZiLCBpbl9iZTMyKCZ1Y2NmLT51Zl9yZWdzLT51dGZiKSk7Ci0JdWNjZl9pbmZvKCJ1dGZzICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA0eCIsCisJcHJpbnRrKEtFUk5fSU5GTyAidXRmcyAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAogCQkgICh1MzIpICYgdWNjZi0+dWZfcmVncy0+dXRmcywgaW5fYmUxNigmdWNjZi0+dWZfcmVncy0+dXRmcykpOwotCXVjY2ZfaW5mbygidXRmZXQgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAorCXByaW50ayhLRVJOX0lORk8gInV0ZmV0IDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKIAkJICAodTMyKSAmIHVjY2YtPnVmX3JlZ3MtPnV0ZmV0LCBpbl9iZTE2KCZ1Y2NmLT51Zl9yZWdzLT51dGZldCkpOwotCXVjY2ZfaW5mbygidXRmdHQgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAorCXByaW50ayhLRVJOX0lORk8gInV0ZnR0IDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKIAkJICAodTMyKSAmIHVjY2YtPnVmX3JlZ3MtPnV0ZnR0LCBpbl9iZTE2KCZ1Y2NmLT51Zl9yZWdzLT51dGZ0dCkpOwotCXVjY2ZfaW5mbygidXRwdCAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAorCXByaW50ayhLRVJOX0lORk8gInV0cHQgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKIAkJICAodTMyKSAmIHVjY2YtPnVmX3JlZ3MtPnV0cHQsIGluX2JlMTYoJnVjY2YtPnVmX3JlZ3MtPnV0cHQpKTsKLQl1Y2NmX2luZm8oInVydHJ5IDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwlwcmludGsoS0VSTl9JTkZPICJ1cnRyeSA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCiAJCSAgKHUzMikgJiB1Y2NmLT51Zl9yZWdzLT51cnRyeSwgaW5fYmUzMigmdWNjZi0+dWZfcmVncy0+dXJ0cnkpKTsKLQl1Y2NmX2luZm8oImd1ZW1yIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDJ4IiwKKwlwcmludGsoS0VSTl9JTkZPICJndWVtciA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTAyeCIsCiAJCSAgKHUzMikgJiB1Y2NmLT51Zl9yZWdzLT5ndWVtciwgdWNjZi0+dWZfcmVncy0+Z3VlbXIpOwogfQogCiB1MzIgdWNjX2Zhc3RfZ2V0X3FlX2NyX3N1YmJsb2NrKGludCB1Y2NmX251bSkKIHsKIAlzd2l0Y2ggKHVjY2ZfbnVtKSB7Ci0JY2FzZSAwOglyZXR1cm4gUUVfQ1JfU1VCQkxPQ0tfVUNDRkFTVDE7CisJY2FzZSAwOiByZXR1cm4gUUVfQ1JfU1VCQkxPQ0tfVUNDRkFTVDE7CiAJY2FzZSAxOiByZXR1cm4gUUVfQ1JfU1VCQkxPQ0tfVUNDRkFTVDI7CiAJY2FzZSAyOiByZXR1cm4gUUVfQ1JfU1VCQkxPQ0tfVUNDRkFTVDM7CiAJY2FzZSAzOiByZXR1cm4gUUVfQ1JfU1VCQkxPQ0tfVUNDRkFTVDQ7CiAJY2FzZSA0OiByZXR1cm4gUUVfQ1JfU1VCQkxPQ0tfVUNDRkFTVDU7CiAJY2FzZSA1OiByZXR1cm4gUUVfQ1JfU1VCQkxPQ0tfVUNDRkFTVDY7CiAJY2FzZSA2OiByZXR1cm4gUUVfQ1JfU1VCQkxPQ0tfVUNDRkFTVDc7Ci0JY2FzZSA3OglyZXR1cm4gUUVfQ1JfU1VCQkxPQ0tfVUNDRkFTVDg7CisJY2FzZSA3OiByZXR1cm4gUUVfQ1JfU1VCQkxPQ0tfVUNDRkFTVDg7CiAJZGVmYXVsdDogcmV0dXJuIFFFX0NSX1NVQkJMT0NLX0lOVkFMSUQ7CiAJfQogfQpAQCAtMTUzLDg0ICsxMzQsNzIgQEAKIHsKIAlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKIAlzdHJ1Y3QgdWNjX2Zhc3QgKnVmX3JlZ3M7Ci0JdTMyIGd1bXIgPSAwOworCXUzMiBndW1yOwogCWludCByZXQ7CiAKLQl1Y2NmX3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7Ci0KIAlpZiAoIXVmX2luZm8pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogY2hlY2sgaWYgdGhlIFVDQyBwb3J0IG51bWJlciBpcyBpbiByYW5nZS4gKi8KIAlpZiAoKHVmX2luZm8tPnVjY19udW0gPCAwKSB8fCAodWZfaW5mby0+dWNjX251bSA+IFVDQ19NQVhfTlVNIC0gMSkpIHsKLQkJdWNjZl9lcnIoInVjY19mYXN0X2luaXQ6IElsbGVnYWwgVUNDIG51bWJlciEiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWxsZWdhbCBVQ0MgbnVtYmVyIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogQ2hlY2sgdGhhdCAnbWF4X3J4X2J1Zl9sZW5ndGgnIGlzIHByb3Blcmx5IGFsaWduZWQgKDQpLiAqLwogCWlmICh1Zl9pbmZvLT5tYXhfcnhfYnVmX2xlbmd0aCAmIChVQ0NfRkFTVF9NUkJMUl9BTElHTk1FTlQgLSAxKSkgewotCQl1Y2NmX2VycigidWNjX2Zhc3RfaW5pdDogbWF4X3J4X2J1Zl9sZW5ndGggbm90IGFsaWduZWQuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1heF9yeF9idWZfbGVuZ3RoIG5vdCBhbGlnbmVkIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogVmFsaWRhdGUgVmlydHVhbCBGaWZvIHJlZ2lzdGVyIHZhbHVlcyAqLwogCWlmICh1Zl9pbmZvLT51cmZzIDwgVUNDX0ZBU1RfVVJGU19NSU5fVkFMKSB7Ci0JCXVjY2ZfZXJyCi0JCSAgICAoInVjY19mYXN0X2luaXQ6IFZpcnR1YWwgRmlmbyByZWdpc3RlciB1cmZzIHRvbyBzbWFsbC4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdXJmcyBpcyB0b28gc21hbGwiLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAodWZfaW5mby0+dXJmcyAmIChVQ0NfRkFTVF9WSVJUX0ZJRk9fUkVHU19BTElHTk1FTlQgLSAxKSkgewotCQl1Y2NmX2VycgotCQkgICAgKCJ1Y2NfZmFzdF9pbml0OiBWaXJ0dWFsIEZpZm8gcmVnaXN0ZXIgdXJmcyBub3QgYWxpZ25lZC4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdXJmcyBpcyBub3QgYWxpZ25lZCIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh1Zl9pbmZvLT51cmZldCAmIChVQ0NfRkFTVF9WSVJUX0ZJRk9fUkVHU19BTElHTk1FTlQgLSAxKSkgewotCQl1Y2NmX2VycgotCQkgICAgKCJ1Y2NfZmFzdF9pbml0OiBWaXJ0dWFsIEZpZm8gcmVnaXN0ZXIgdXJmZXQgbm90IGFsaWduZWQuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVyZmV0IGlzIG5vdCBhbGlnbmVkLiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh1Zl9pbmZvLT51cmZzZXQgJiAoVUNDX0ZBU1RfVklSVF9GSUZPX1JFR1NfQUxJR05NRU5UIC0gMSkpIHsKLQkJdWNjZl9lcnIKLQkJICAgKCJ1Y2NfZmFzdF9pbml0OiBWaXJ0dWFsIEZpZm8gcmVnaXN0ZXIgdXJmc2V0IG5vdCBhbGlnbmVkLiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1cmZzZXQgaXMgbm90IGFsaWduZWQiLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAodWZfaW5mby0+dXRmcyAmIChVQ0NfRkFTVF9WSVJUX0ZJRk9fUkVHU19BTElHTk1FTlQgLSAxKSkgewotCQl1Y2NmX2VycgotCQkgICAgKCJ1Y2NfZmFzdF9pbml0OiBWaXJ0dWFsIEZpZm8gcmVnaXN0ZXIgdXRmcyBub3QgYWxpZ25lZC4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdXRmcyBpcyBub3QgYWxpZ25lZCIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh1Zl9pbmZvLT51dGZldCAmIChVQ0NfRkFTVF9WSVJUX0ZJRk9fUkVHU19BTElHTk1FTlQgLSAxKSkgewotCQl1Y2NmX2VycgotCQkgICAgKCJ1Y2NfZmFzdF9pbml0OiBWaXJ0dWFsIEZpZm8gcmVnaXN0ZXIgdXRmZXQgbm90IGFsaWduZWQuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHV0ZmV0IGlzIG5vdCBhbGlnbmVkIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHVmX2luZm8tPnV0ZnR0ICYgKFVDQ19GQVNUX1ZJUlRfRklGT19SRUdTX0FMSUdOTUVOVCAtIDEpKSB7Ci0JCXVjY2ZfZXJyCi0JCSAgICAoInVjY19mYXN0X2luaXQ6IFZpcnR1YWwgRmlmbyByZWdpc3RlciB1dGZ0dCBub3QgYWxpZ25lZC4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdXRmdHQgaXMgbm90IGFsaWduZWQiLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAl1Y2NmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVjY19mYXN0X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVjY2YpIHsKLQkJdWNjZl9lcnIKLQkJICAgICgidWNjX2Zhc3RfaW5pdDogTm8gbWVtb3J5IGZvciBVQ0Mgc2xvdyBkYXRhIHN0cnVjdHVyZSEiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIHByaXZhdGUgZGF0YSIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCS8qIEZpbGwgZmFzdCBVQ0Mgc3RydWN0dXJlICovCiAJdWNjZi0+dWZfaW5mbyA9IHVmX2luZm87CiAJLyogU2V0IHRoZSBQSFkgYmFzZSBhZGRyZXNzICovCi0JdWNjZi0+dWZfcmVncyA9Ci0JICAgIChzdHJ1Y3QgdWNjX2Zhc3QgKikgaW9yZW1hcCh1Zl9pbmZvLT5yZWdzLCBzaXplb2Yoc3RydWN0IHVjY19mYXN0KSk7CisJdWNjZi0+dWZfcmVncyA9IGlvcmVtYXAodWZfaW5mby0+cmVncywgc2l6ZW9mKHN0cnVjdCB1Y2NfZmFzdCkpOwogCWlmICh1Y2NmLT51Zl9yZWdzID09IE5VTEwpIHsKLQkJdWNjZl9lcnIKLQkJICAgICgidWNjX2Zhc3RfaW5pdDogTm8gbWVtb3J5IG1hcCBmb3IgVUNDIHNsb3cgY29udHJvbGxlciEiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBVQ0MgcmVnaXN0ZXJzIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yNDksNyArMjE4LDcgQEAKIAogCS8qIEluaXQgR3VlbXIgcmVnaXN0ZXIgKi8KIAlpZiAoKHJldCA9IHVjY19pbml0X2d1ZW1yKChzdHJ1Y3QgdWNjX2NvbW1vbiAqKSAodWZfcmVncykpKSkgewotCQl1Y2NmX2VycigidWNjX2Zhc3RfaW5pdDogQ291bGQgbm90IGluaXQgdGhlIGd1ZW1yIHJlZ2lzdGVyLiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgaW5pdCBHVUVNUiIsIF9fRlVOQ1RJT05fXyk7CiAJCXVjY19mYXN0X2ZyZWUodWNjZik7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMjU4LDcgKzIyNyw3IEBACiAJaWYgKChyZXQgPSB1Y2Nfc2V0X3R5cGUodWZfaW5mby0+dWNjX251bSwKIAkJCQkoc3RydWN0IHVjY19jb21tb24gKikgKHVmX3JlZ3MpLAogCQkJCVVDQ19TUEVFRF9UWVBFX0ZBU1QpKSkgewotCQl1Y2NmX2VycigidWNjX2Zhc3RfaW5pdDogQ291bGQgbm90IHNldCB0eXBlIHRvIGZhc3QuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBzZXQgVUNDIHR5cGUiLCBfX0ZVTkNUSU9OX18pOwogCQl1Y2NfZmFzdF9mcmVlKHVjY2YpOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTI2NywxMCArMjM2LDkgQEAKIAogCS8qIFNldCBHVU1SICovCiAJLyogRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGhhcmR3YXJlIHNwZWMuICovCi0JLyogZ3VtciBzdGFydHMgYXMgemVyby4gKi8KKwlndW1yID0gdWZfaW5mby0+dHR4X3RyeDsKIAlpZiAodWZfaW5mby0+dGNpKQogCQlndW1yIHw9IFVDQ19GQVNUX0dVTVJfVENJOwotCWd1bXIgfD0gdWZfaW5mby0+dHR4X3RyeDsKIAlpZiAodWZfaW5mby0+Y2RwKQogCQlndW1yIHw9IFVDQ19GQVNUX0dVTVJfQ0RQOwogCWlmICh1Zl9pbmZvLT5jdHNwKQpAQCAtMjk4LDkgKzI2Niw3IEBACiAJdWNjZi0+dWNjX2Zhc3RfdHhfdmlydHVhbF9maWZvX2Jhc2Vfb2Zmc2V0ID0KIAkgICAgcWVfbXVyYW1fYWxsb2ModWZfaW5mby0+dXRmcywgVUNDX0ZBU1RfVklSVF9GSUZPX1JFR1NfQUxJR05NRU5UKTsKIAlpZiAoSVNfTVVSQU1fRVJSKHVjY2YtPnVjY19mYXN0X3R4X3ZpcnR1YWxfZmlmb19iYXNlX29mZnNldCkpIHsKLQkJdWNjZl9lcnIKLQkJICAgICgidWNjX2Zhc3RfaW5pdDogQ2FuIG5vdCBhbGxvY2F0ZSBNVVJBTSBtZW1vcnkgZm9yICIKLQkJCSJzdHJ1Y3QgdWNjX2Zhc3R4X3ZpcnR1YWxfZmlmb19iYXNlX29mZnNldC4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIE1VUkFNIGZvciBUWCBGSUZPIiwgX19GVU5DVElPTl9fKTsKIAkJdWNjZi0+dWNjX2Zhc3RfdHhfdmlydHVhbF9maWZvX2Jhc2Vfb2Zmc2V0ID0gMDsKIAkJdWNjX2Zhc3RfZnJlZSh1Y2NmKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMDgsMTQgKzI3NCwxMSBAQAogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBSeCBWaXJ0dWFsIEZpZm8gKi8KIAl1Y2NmLT51Y2NfZmFzdF9yeF92aXJ0dWFsX2ZpZm9fYmFzZV9vZmZzZXQgPQotCSAgICBxZV9tdXJhbV9hbGxvYyh1Zl9pbmZvLT51cmZzICsKLQkJCSAgICh1MzIpCisJCXFlX211cmFtX2FsbG9jKHVmX2luZm8tPnVyZnMgKwogCQkJICAgVUNDX0ZBU1RfUkVDRUlWRV9WSVJUVUFMX0ZJRk9fU0laRV9GVURHRV9GQUNUT1IsCiAJCQkgICBVQ0NfRkFTVF9WSVJUX0ZJRk9fUkVHU19BTElHTk1FTlQpOwogCWlmIChJU19NVVJBTV9FUlIodWNjZi0+dWNjX2Zhc3RfcnhfdmlydHVhbF9maWZvX2Jhc2Vfb2Zmc2V0KSkgewotCQl1Y2NmX2VycgotCQkgICAgKCJ1Y2NfZmFzdF9pbml0OiBDYW4gbm90IGFsbG9jYXRlIE1VUkFNIG1lbW9yeSBmb3IgIgotCQkJInVjY19mYXN0X3J4X3ZpcnR1YWxfZmlmb19iYXNlX29mZnNldC4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIE1VUkFNIGZvciBSWCBGSUZPIiwgX19GVU5DVElPTl9fKTsKIAkJdWNjZi0+dWNjX2Zhc3RfcnhfdmlydHVhbF9maWZvX2Jhc2Vfb2Zmc2V0ID0gMDsKIAkJdWNjX2Zhc3RfZnJlZSh1Y2NmKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zNDIsMjYgKzMwNSwyMiBAQAogCS8qIElmIE5NU0kgKG5vdCBUc2EpLCBzZXQgVHggYW5kIFJ4IGNsb2NrLiAqLwogCWlmICghdWZfaW5mby0+dHNhKSB7CiAJCS8qIFJ4IGNsb2NrIHJvdXRpbmcgKi8KLQkJaWYgKHVmX2luZm8tPnJ4X2Nsb2NrICE9IFFFX0NMS19OT05FKSB7Ci0JCQlpZiAodWNjX3NldF9xZV9tdXhfcnh0eAotCQkJICAgICh1Zl9pbmZvLT51Y2NfbnVtLCB1Zl9pbmZvLT5yeF9jbG9jaywKLQkJCSAgICAgQ09NTV9ESVJfUlgpKSB7Ci0JCQkJdWNjZl9lcnIKLQkJKCJ1Y2NfZmFzdF9pbml0OiBJbGxlZ2FsIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ1J4Q2xvY2snLiIpOwotCQkJCXVjY19mYXN0X2ZyZWUodWNjZik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9CisJCWlmICgodWZfaW5mby0+cnhfY2xvY2sgIT0gUUVfQ0xLX05PTkUpICYmCisJCSAgICB1Y2Nfc2V0X3FlX211eF9yeHR4KHVmX2luZm8tPnVjY19udW0sIHVmX2luZm8tPnJ4X2Nsb2NrLAorCQkJCQlDT01NX0RJUl9SWCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlsbGVnYWwgdmFsdWUgZm9yIFJYIGNsb2NrIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJdWNjX2Zhc3RfZnJlZSh1Y2NmKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCS8qIFR4IGNsb2NrIHJvdXRpbmcgKi8KLQkJaWYgKHVmX2luZm8tPnR4X2Nsb2NrICE9IFFFX0NMS19OT05FKSB7Ci0JCQlpZiAodWNjX3NldF9xZV9tdXhfcnh0eAotCQkJICAgICh1Zl9pbmZvLT51Y2NfbnVtLCB1Zl9pbmZvLT50eF9jbG9jaywKLQkJCSAgICAgQ09NTV9ESVJfVFgpKSB7Ci0JCQkJdWNjZl9lcnIKLQkJKCJ1Y2NfZmFzdF9pbml0OiBJbGxlZ2FsIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ1R4Q2xvY2snLiIpOwotCQkJCXVjY19mYXN0X2ZyZWUodWNjZik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9CisJCWlmICgodWZfaW5mby0+dHhfY2xvY2sgIT0gUUVfQ0xLX05PTkUpICYmCisJCSAgICB1Y2Nfc2V0X3FlX211eF9yeHR4KHVmX2luZm8tPnVjY19udW0sIHVmX2luZm8tPnR4X2Nsb2NrLAorCQkJCQlDT01NX0RJUl9UWCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlsbGVnYWwgdmFsdWUgZm9yIFRYIGNsb2NrIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQkJdWNjX2Zhc3RfZnJlZSh1Y2NmKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCkBAIC0zNzAsOSArMzI5LDkgQEAKIAogCS8qIEZpcnN0LCBjbGVhciBhbnl0aGluZyBwZW5kaW5nIGF0IFVDQyBsZXZlbCwKIAkgKiBvdGhlcndpc2UsIG9sZCBnYXJiYWdlIG1heSBjb21lIHRocm91Z2gKLQkgKiBhcyBzb29uIGFzIHRoZSBkYW0gaXMgb3BlbmVkCi0JICogV3JpdGluZyAnMScgY2xlYXJzCi0JICovCisJICogYXMgc29vbiBhcyB0aGUgZGFtIGlzIG9wZW5lZC4gKi8KKworCS8qIFdyaXRpbmcgJzEnIGNsZWFycyAqLwogCW91dF9iZTMyKCZ1Zl9yZWdzLT51Y2NlLCAweGZmZmZmZmZmKTsKIAogCSp1Y2NmX3JldCA9IHVjY2Y7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2Nfc2xvdy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX3Nsb3cuYwppbmRleCAwZTk3ZTVjLi44MTdkZjczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2Nfc2xvdy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19zbG93LmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaW1tYXBfcWUuaD4KICNpbmNsdWRlIDxhc20vcWUuaD4KQEAgLTI3LDI0ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL3VjYy5oPgogI2luY2x1ZGUgPGFzbS91Y2Nfc2xvdy5oPgogCi0jZGVmaW5lIHVjY3NfcHJpbnRrKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgXAotICAgICAgICBwcmludGsobGV2ZWwgZm9ybWF0ICJcbiIsICMjIGFyZykKLQotI2RlZmluZSB1Y2NzX2RiZyhmb3JtYXQsIGFyZy4uLikgXAotCXVjY3NfcHJpbnRrKEtFUk5fREVCVUcgLCBmb3JtYXQgLCAjIyBhcmcpCi0jZGVmaW5lIHVjY3NfZXJyKGZvcm1hdCwgYXJnLi4uKSBcCi0JdWNjc19wcmludGsoS0VSTl9FUlIgLCBmb3JtYXQgLCAjIyBhcmcpCi0jZGVmaW5lIHVjY3NfaW5mbyhmb3JtYXQsIGFyZy4uLikgXAotCXVjY3NfcHJpbnRrKEtFUk5fSU5GTyAsIGZvcm1hdCAsICMjIGFyZykKLSNkZWZpbmUgdWNjc193YXJuKGZvcm1hdCwgYXJnLi4uKSBcCi0JdWNjc19wcmludGsoS0VSTl9XQVJOSU5HICwgZm9ybWF0ICwgIyMgYXJnKQotCi0jaWZkZWYgVUNDU19WRVJCT1NFX0RFQlVHCi0jZGVmaW5lIHVjY3NfdmRiZyB1Y2NzX2RiZwotI2Vsc2UKLSNkZWZpbmUgdWNjc192ZGJnKGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCQkJCS8qIFVDQ1NfVkVSQk9TRV9ERUJVRyAqLwotCiB1MzIgdWNjX3Nsb3dfZ2V0X3FlX2NyX3N1YmJsb2NrKGludCB1Y2NzX251bSkKIHsKIAlzd2l0Y2ggKHVjY3NfbnVtKSB7CkBAIC0xMzUsNTEgKzExNiw1MyBAQAogCiBpbnQgdWNjX3Nsb3dfaW5pdChzdHJ1Y3QgdWNjX3Nsb3dfaW5mbyAqIHVzX2luZm8sIHN0cnVjdCB1Y2Nfc2xvd19wcml2YXRlICoqIHVjY3NfcmV0KQogeworCXN0cnVjdCB1Y2Nfc2xvd19wcml2YXRlICp1Y2NzOwogCXUzMiBpOwogCXN0cnVjdCB1Y2Nfc2xvdyAqdXNfcmVnczsKIAl1MzIgZ3VtcjsKLQl1OCBmdW5jdGlvbl9jb2RlID0gMDsKLQl1OCAqYmQ7Ci0Jc3RydWN0IHVjY19zbG93X3ByaXZhdGUgKnVjY3M7CisJc3RydWN0IHFlX2JkICpiZDsKIAl1MzIgaWQ7CiAJdTMyIGNvbW1hbmQ7Ci0JaW50IHJldDsKLQotCXVjY3NfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICghdXNfaW5mbykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBjaGVjayBpZiB0aGUgVUNDIHBvcnQgbnVtYmVyIGlzIGluIHJhbmdlLiAqLwogCWlmICgodXNfaW5mby0+dWNjX251bSA8IDApIHx8ICh1c19pbmZvLT51Y2NfbnVtID4gVUNDX01BWF9OVU0gLSAxKSkgewotCQl1Y2NzX2VycigidWNjX3Nsb3dfaW5pdDogSWxsZWdhbCBVQ0MgbnVtYmVyISIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbGxlZ2FsIFVDQyBudW1iZXIiLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKgogCSAqIFNldCBtcmJscgogCSAqIENoZWNrIHRoYXQgJ21heF9yeF9idWZfbGVuZ3RoJyBpcyBwcm9wZXJseSBhbGlnbmVkICg0KSwgdW5sZXNzCi0gCSAqIHJmdyBpcyAxLCBtZWFuaW5nIHRoYXQgUUUgYWNjZXB0cyBvbmUgYnl0ZSBhdCBhIHRpbWUsIHVubGlrZSBub3JtYWwKKwkgKiByZncgaXMgMSwgbWVhbmluZyB0aGF0IFFFIGFjY2VwdHMgb25lIGJ5dGUgYXQgYSB0aW1lLCB1bmxpa2Ugbm9ybWFsCiAJICogY2FzZSB3aGVuIFFFIGFjY2VwdHMgMzIgYml0cyBhdCBhIHRpbWUuCiAJICovCiAJaWYgKCghdXNfaW5mby0+cmZ3KSAmJgogCQkodXNfaW5mby0+bWF4X3J4X2J1Zl9sZW5ndGggJiAoVUNDX1NMT1dfTVJCTFJfQUxJR05NRU5UIC0gMSkpKSB7Ci0JCXVjY3NfZXJyKCJtYXhfcnhfYnVmX2xlbmd0aCBub3QgYWxpZ25lZC4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJtYXhfcnhfYnVmX2xlbmd0aCBub3QgYWxpZ25lZC4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJdWNjcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1Y2Nfc2xvd19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1Y2NzKSB7Ci0JCXVjY3NfZXJyCi0JCSAgICAoInVjY19zbG93X2luaXQ6IE5vIG1lbW9yeSBmb3IgVUNDIHNsb3cgZGF0YSBzdHJ1Y3R1cmUhIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBwcml2YXRlIGRhdGEiLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBGaWxsIHNsb3cgVUNDIHN0cnVjdHVyZSAqLwogCXVjY3MtPnVzX2luZm8gPSB1c19pbmZvOworCS8qIFNldCB0aGUgUEhZIGJhc2UgYWRkcmVzcyAqLworCXVjY3MtPnVzX3JlZ3MgPSBpb3JlbWFwKHVzX2luZm8tPnJlZ3MsIHNpemVvZihzdHJ1Y3QgdWNjX3Nsb3cpKTsKKwlpZiAodWNjcy0+dXNfcmVncyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgVUNDIHJlZ2lzdGVycyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCXVjY3MtPnNhdmVkX3VjY20gPSAwOwogCXVjY3MtPnBfcnhfZnJhbWUgPSAwOwotCXVjY3MtPnVzX3JlZ3MgPSB1c19pbmZvLT5yZWdzOwogCXVzX3JlZ3MgPSB1Y2NzLT51c19yZWdzOwogCXVjY3MtPnBfdWNjZSA9ICh1MTYgKikgJiAodXNfcmVncy0+dWNjZSk7CiAJdWNjcy0+cF91Y2NtID0gKHUxNiAqKSAmICh1c19yZWdzLT51Y2NtKTsKQEAgLTE5MCwyNCArMTczLDIyIEBACiAjZW5kaWYJCQkJLyogU1RBVElTVElDUyAqLwogCiAJLyogR2V0IFBSQU0gYmFzZSAqLwotCXVjY3MtPnVzX3ByYW1fb2Zmc2V0ID0gcWVfbXVyYW1fYWxsb2MoVUNDX1NMT1dfUFJBTV9TSVpFLAotCQkJCQkJIEFMSUdOTUVOVF9PRl9VQ0NfU0xPV19QUkFNKTsKKwl1Y2NzLT51c19wcmFtX29mZnNldCA9CisJCXFlX211cmFtX2FsbG9jKFVDQ19TTE9XX1BSQU1fU0laRSwgQUxJR05NRU5UX09GX1VDQ19TTE9XX1BSQU0pOwogCWlmIChJU19NVVJBTV9FUlIodWNjcy0+dXNfcHJhbV9vZmZzZXQpKSB7Ci0JCXVjY3NfZXJyCi0JCSAgICAoInVjY19zbG93X2luaXQ6IENhbiBub3QgYWxsb2NhdGUgTVVSQU0gbWVtb3J5ICIKLQkJCSJmb3IgU2xvdyBVQ0MuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBhbGxvY2F0ZSBNVVJBTSBmb3IgUFJBTSIsIF9fRlVOQ1RJT05fXyk7CiAJCXVjY19zbG93X2ZyZWUodWNjcyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlpZCA9IHVjY19zbG93X2dldF9xZV9jcl9zdWJibG9jayh1c19pbmZvLT51Y2NfbnVtKTsKIAlxZV9pc3N1ZV9jbWQoUUVfQVNTSUdOX1BBR0VfVE9fREVWSUNFLCBpZCwgUUVfQ1JfUFJPVE9DT0xfVU5TUEVDSUZJRUQsCi0JCQkodTMyKSB1Y2NzLT51c19wcmFtX29mZnNldCk7CisJCSAgICAgdWNjcy0+dXNfcHJhbV9vZmZzZXQpOwogCiAJdWNjcy0+dXNfcHJhbSA9IHFlX211cmFtX2FkZHIodWNjcy0+dXNfcHJhbV9vZmZzZXQpOwogCiAJLyogSW5pdCBHdWVtciByZWdpc3RlciAqLwogCWlmICgocmV0ID0gdWNjX2luaXRfZ3VlbXIoKHN0cnVjdCB1Y2NfY29tbW9uICopICh1c19pbmZvLT5yZWdzKSkpKSB7Ci0JCXVjY3NfZXJyKCJ1Y2Nfc2xvd19pbml0OiBDb3VsZCBub3QgaW5pdCB0aGUgZ3VlbXIgcmVnaXN0ZXIuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBpbml0IEdVRU1SIiwgX19GVU5DVElPTl9fKTsKIAkJdWNjX3Nsb3dfZnJlZSh1Y2NzKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0yMTYsNyArMTk3LDcgQEAKIAlpZiAoKHJldCA9IHVjY19zZXRfdHlwZSh1c19pbmZvLT51Y2NfbnVtLAogCQkJCShzdHJ1Y3QgdWNjX2NvbW1vbiAqKSAodXNfaW5mby0+cmVncyksCiAJCQkJVUNDX1NQRUVEX1RZUEVfU0xPVykpKSB7Ci0JCXVjY3NfZXJyKCJ1Y2Nfc2xvd19pbml0OiBDb3VsZCBub3QgaW5pdCB0aGUgZ3VlbXIgcmVnaXN0ZXIuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBzZXQgVUNDIHR5cGUiLCBfX0ZVTkNUSU9OX18pOwogCQl1Y2Nfc2xvd19mcmVlKHVjY3MpOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTIzMCw3ICsyMTEsNyBAQAogCQlxZV9tdXJhbV9hbGxvYyh1c19pbmZvLT5yeF9iZF9yaW5nX2xlbiAqIHNpemVvZihzdHJ1Y3QgcWVfYmQpLAogCQkJCVFFX0FMSUdOTUVOVF9PRl9CRCk7CiAJaWYgKElTX01VUkFNX0VSUih1Y2NzLT5yeF9iYXNlX29mZnNldCkpIHsKLQkJdWNjc19lcnIoInVjY19zbG93X2luaXQ6IE5vIG1lbW9yeSBmb3IgUnggQkQncy4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIFJYIEJEcyIsIF9fRlVOQ1RJT05fXyk7CiAJCXVjY3MtPnJ4X2Jhc2Vfb2Zmc2V0ID0gMDsKIAkJdWNjX3Nsb3dfZnJlZSh1Y2NzKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNDAsNyArMjIxLDcgQEAKIAkJcWVfbXVyYW1fYWxsb2ModXNfaW5mby0+dHhfYmRfcmluZ19sZW4gKiBzaXplb2Yoc3RydWN0IHFlX2JkKSwKIAkJCVFFX0FMSUdOTUVOVF9PRl9CRCk7CiAJaWYgKElTX01VUkFNX0VSUih1Y2NzLT50eF9iYXNlX29mZnNldCkpIHsKLQkJdWNjc19lcnIoInVjY19zbG93X2luaXQ6IE5vIG1lbW9yeSBmb3IgVHggQkQncy4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIFRYIEJEcyIsIF9fRlVOQ1RJT05fXyk7CiAJCXVjY3MtPnR4X2Jhc2Vfb2Zmc2V0ID0gMDsKIAkJdWNjX3Nsb3dfZnJlZSh1Y2NzKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNDgsMzQgKzIyOSwzMyBAQAogCiAJLyogSW5pdCBUeCBiZHMgKi8KIAliZCA9IHVjY3MtPmNvbmZCZCA9IHVjY3MtPnR4X2JkID0gcWVfbXVyYW1fYWRkcih1Y2NzLT50eF9iYXNlX29mZnNldCk7Ci0JZm9yIChpID0gMDsgaSA8IHVzX2luZm8tPnR4X2JkX3JpbmdfbGVuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgdXNfaW5mby0+dHhfYmRfcmluZ19sZW4gLSAxOyBpKyspIHsKIAkJLyogY2xlYXIgYmQgYnVmZmVyICovCi0JCW91dF9iZTMyKCYoKChzdHJ1Y3QgcWVfYmQgKiliZCktPmJ1ZiksIDApOworCQlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CiAJCS8qIHNldCBiZCBzdGF0dXMgYW5kIGxlbmd0aCAqLwotCQlvdXRfYmUzMigodTMyKiliZCwgMCk7Ci0JCWJkICs9IHNpemVvZihzdHJ1Y3QgcWVfYmQpOworCQlvdXRfYmUzMigodTMyICopIGJkLCAwKTsKKwkJYmQrKzsKIAl9Ci0JYmQgLT0gc2l6ZW9mKHN0cnVjdCBxZV9iZCk7Ci0JLyogc2V0IGJkIHN0YXR1cyBhbmQgbGVuZ3RoICovCi0Jb3V0X2JlMzIoKHUzMiopYmQsIFRfVyk7CS8qIGZvciBsYXN0IEJEIHNldCBXcmFwIGJpdCAqLworCS8qIGZvciBsYXN0IEJEIHNldCBXcmFwIGJpdCAqLworCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwlvdXRfYmUzMigodTMyICopIGJkLCBjcHVfdG9fYmUzMihUX1cpKTsKIAogCS8qIEluaXQgUnggYmRzICovCiAJYmQgPSB1Y2NzLT5yeF9iZCA9IHFlX211cmFtX2FkZHIodWNjcy0+cnhfYmFzZV9vZmZzZXQpOwotCWZvciAoaSA9IDA7IGkgPCB1c19pbmZvLT5yeF9iZF9yaW5nX2xlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHVzX2luZm8tPnJ4X2JkX3JpbmdfbGVuIC0gMTsgaSsrKSB7CiAJCS8qIHNldCBiZCBzdGF0dXMgYW5kIGxlbmd0aCAqLwogCQlvdXRfYmUzMigodTMyKiliZCwgMCk7CiAJCS8qIGNsZWFyIGJkIGJ1ZmZlciAqLwotCQlvdXRfYmUzMigmKCgoc3RydWN0IHFlX2JkICopYmQpLT5idWYpLCAwKTsKLQkJYmQgKz0gc2l6ZW9mKHN0cnVjdCBxZV9iZCk7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJYmQrKzsKIAl9Ci0JYmQgLT0gc2l6ZW9mKHN0cnVjdCBxZV9iZCk7Ci0JLyogc2V0IGJkIHN0YXR1cyBhbmQgbGVuZ3RoICovCi0Jb3V0X2JlMzIoKHUzMiopYmQsIFJfVyk7CS8qIGZvciBsYXN0IEJEIHNldCBXcmFwIGJpdCAqLworCS8qIGZvciBsYXN0IEJEIHNldCBXcmFwIGJpdCAqLworCW91dF9iZTMyKCh1MzIqKWJkLCBjcHVfdG9fYmUzMihSX1cpKTsKKwlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CiAKIAkvKiBTZXQgR1VNUiAoRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGhhcmR3YXJlIHNwZWMuKS4gKi8KIAkvKiBndW1yX2ggKi8KLQlndW1yID0gMDsKLQlndW1yIHw9IHVzX2luZm8tPnRjcmM7CisJZ3VtciA9IHVzX2luZm8tPnRjcmM7CiAJaWYgKHVzX2luZm8tPmNkcCkKIAkJZ3VtciB8PSBVQ0NfU0xPV19HVU1SX0hfQ0RQOwogCWlmICh1c19pbmZvLT5jdHNwKQpAQCAtMjk1LDcgKzI3NSw4IEBACiAJb3V0X2JlMzIoJnVzX3JlZ3MtPmd1bXJfaCwgZ3Vtcik7CiAKIAkvKiBndW1yX2wgKi8KLQlndW1yID0gMDsKKwlndW1yID0gdXNfaW5mby0+dGRjciB8IHVzX2luZm8tPnJkY3IgfCB1c19pbmZvLT50ZW5jIHwgdXNfaW5mby0+cmVuYyB8CisJCXVzX2luZm8tPmRpYWcgfCB1c19pbmZvLT5tb2RlOwogCWlmICh1c19pbmZvLT50Y2kpCiAJCWd1bXIgfD0gVUNDX1NMT1dfR1VNUl9MX1RDSTsKIAlpZiAodXNfaW5mby0+cmludikKQEAgLTMwNCwyMyArMjg1LDE0IEBACiAJCWd1bXIgfD0gVUNDX1NMT1dfR1VNUl9MX1RJTlY7CiAJaWYgKHVzX2luZm8tPnRlbmQpCiAJCWd1bXIgfD0gVUNDX1NMT1dfR1VNUl9MX1RFTkQ7Ci0JZ3VtciB8PSB1c19pbmZvLT50ZGNyOwotCWd1bXIgfD0gdXNfaW5mby0+cmRjcjsKLQlndW1yIHw9IHVzX2luZm8tPnRlbmM7Ci0JZ3VtciB8PSB1c19pbmZvLT5yZW5jOwotCWd1bXIgfD0gdXNfaW5mby0+ZGlhZzsKLQlndW1yIHw9IHVzX2luZm8tPm1vZGU7CiAJb3V0X2JlMzIoJnVzX3JlZ3MtPmd1bXJfbCwgZ3Vtcik7CiAKIAkvKiBGdW5jdGlvbiBjb2RlIHJlZ2lzdGVycyAqLwotCS8qIGZ1bmN0aW9uX2NvZGUgaGFzIGluaXRpYWwgdmFsdWUgMCAqLwogCiAJLyogaWYgdGhlIGRhdGEgaXMgaW4gY2FjaGFibGUgbWVtb3J5LCB0aGUgJ2dsb2JhbCcgKi8KIAkvKiBpbiB0aGUgZnVuY3Rpb24gY29kZSBzaG91bGQgYmUgc2V0LiAqLwotCWZ1bmN0aW9uX2NvZGUgfD0gdXNfaW5mby0+ZGF0YV9tZW1fcGFydDsKLQlmdW5jdGlvbl9jb2RlIHw9IFFFX0JNUl9CWVRFX09SREVSX0JPX01PVDsJLyogUmVxdWlyZWQgZm9yIFFFICovCi0JdWNjcy0+dXNfcHJhbS0+dGZjciA9IGZ1bmN0aW9uX2NvZGU7Ci0JdWNjcy0+dXNfcHJhbS0+cmZjciA9IGZ1bmN0aW9uX2NvZGU7CisJdWNjcy0+dXNfcHJhbS0+dGZjciA9IHVjY3MtPnVzX3ByYW0tPnJmY3IgPQorCQl1c19pbmZvLT5kYXRhX21lbV9wYXJ0IHwgUUVfQk1SX0JZVEVfT1JERVJfQk9fTU9UOwogCiAJLyogcmJhc2UsIHRiYXNlIGFyZSBvZmZzZXRzIGZyb20gTVVSQU0gYmFzZSAqLwogCW91dF9iZTE2KCZ1Y2NzLT51c19wcmFtLT5yYmFzZSwgdWNjcy0+dXNfcHJhbV9vZmZzZXQpOwpAQCAtMzM2LDM0ICszMDgsMjkgQEAKIAkvKiBJZiBOTVNJIChub3QgVHNhKSwgc2V0IFR4IGFuZCBSeCBjbG9jay4gKi8KIAlpZiAoIXVzX2luZm8tPnRzYSkgewogCQkvKiBSeCBjbG9jayByb3V0aW5nICovCi0JCWlmICh1Y2Nfc2V0X3FlX211eF9yeHR4Ci0JCSAgICAodXNfaW5mby0+dWNjX251bSwgdXNfaW5mby0+cnhfY2xvY2ssIENPTU1fRElSX1JYKSkgewotCQkJdWNjc19lcnIKLQkJCSAgICAoInVjY19zbG93X2luaXQ6IElsbGVnYWwgdmFsdWUgZm9yIHBhcmFtZXRlciIKLQkJCQkiICdSeENsb2NrJy4iKTsKKwkJaWYgKHVjY19zZXRfcWVfbXV4X3J4dHgodXNfaW5mby0+dWNjX251bSwgdXNfaW5mby0+cnhfY2xvY2ssCisJCQkJCUNPTU1fRElSX1JYKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWxsZWdhbCB2YWx1ZSBmb3IgUlggY2xvY2siLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CiAJCQl1Y2Nfc2xvd19mcmVlKHVjY3MpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyogVHggY2xvY2sgcm91dGluZyAqLwotCQlpZiAodWNjX3NldF9xZV9tdXhfcnh0eCh1c19pbmZvLT51Y2NfbnVtLAotCQkJCSB1c19pbmZvLT50eF9jbG9jaywgQ09NTV9ESVJfVFgpKSB7Ci0JCQl1Y2NzX2VycgotCQkJICAgICgidWNjX3Nsb3dfaW5pdDogSWxsZWdhbCB2YWx1ZSBmb3IgcGFyYW1ldGVyICIKLQkJCQkiJ1R4Q2xvY2snLiIpOworCQlpZiAodWNjX3NldF9xZV9tdXhfcnh0eCh1c19pbmZvLT51Y2NfbnVtLCB1c19pbmZvLT50eF9jbG9jaywKKwkJCQkJQ09NTV9ESVJfVFgpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbGxlZ2FsIHZhbHVlIGZvciBUWCBjbG9jayIsCisJCQkgICAgICAgX19GVU5DVElPTl9fKTsKIAkJCXVjY19zbG93X2ZyZWUodWNjcyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotCS8qCi0JICogSU5URVJSVVBUUwotCSAqLwogCS8qIFNldCBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciBhdCBVQ0MgbGV2ZWwuICovCiAJb3V0X2JlMTYoJnVzX3JlZ3MtPnVjY20sIHVzX2luZm8tPnVjY21fbWFzayk7CiAKLQkvKiBGaXJzdCwgY2xlYXIgYW55dGhpbmcgcGVuZGluZyBhdCBVQ0MgbGV2ZWwsICovCi0JLyogb3RoZXJ3aXNlLCBvbGQgZ2FyYmFnZSBtYXkgY29tZSB0aHJvdWdoICovCi0JLyogYXMgc29vbiBhcyB0aGUgZGFtIGlzIG9wZW5lZC4gKi8KKwkvKiBGaXJzdCwgY2xlYXIgYW55dGhpbmcgcGVuZGluZyBhdCBVQ0MgbGV2ZWwsCisJICogb3RoZXJ3aXNlLCBvbGQgZ2FyYmFnZSBtYXkgY29tZSB0aHJvdWdoCisJICogYXMgc29vbiBhcyB0aGUgZGFtIGlzIG9wZW5lZC4gKi8KIAogCS8qIFdyaXRpbmcgJzEnIGNsZWFycyAqLwogCW91dF9iZTE2KCZ1c19yZWdzLT51Y2NlLCAweGZmZmYpOwpAQCAtNDAwLDMgKzM2Nyw1IEBACiAKIAlrZnJlZSh1Y2NzKTsKIH0KKworCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9LY29uZmlnIGIvYXJjaC9wcGMvS2NvbmZpZwppbmRleCAwZGY5YzMzLi5jY2NlMmE0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9LY29uZmlnCisrKyBiL2FyY2gvcHBjL0tjb25maWcKQEAgLTg0NSw2ICs4NDUsMjEgQEAKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQogCWRlZmF1bHQgeQogCitjb25maWcgTVY2NDNYWF9FVEhfMAorCWJvb2wKKwlkZXBlbmRzIG9uIE1WNjQzWFhfRVRIICYmIChLQVRBTkEgfHwgUkFEU1RPTkVfUFBDN0QgfHwgRVY2NDM2MCB8fCBIRFBVKQorCWRlZmF1bHQgeQorCitjb25maWcgTVY2NDNYWF9FVEhfMQorCWJvb2wKKwlkZXBlbmRzIG9uIE1WNjQzWFhfRVRIICYmIChLQVRBTkEgfHwgUkFEU1RPTkVfUFBDN0QgfHwgRVY2NDM2MCkKKwlkZWZhdWx0IHkKKworY29uZmlnIE1WNjQzWFhfRVRIXzIKKwlib29sCisJZGVwZW5kcyBvbiBNVjY0M1hYX0VUSCAmJiAoS0FUQU5BIHx8IFJBRFNUT05FX1BQQzdEIHx8IEVWNjQzNjApCisJZGVmYXVsdCB5CisKIG1lbnUgIlNldCBicmlkZ2Ugb3B0aW9ucyIKIAlkZXBlbmRzIG9uIE1WNjRYNjAKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCBlYWFhYzM3Li5kOTQyNWY1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtOCw4ICs4LDggQEAKIAlkZWZhdWx0IHkKIAogY29uZmlnIFpPTkVfRE1BCi0JYm9vbAotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIDY0QklUCiAKIGNvbmZpZyBMT0NLREVQX1NVUFBPUlQKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvTWFrZWZpbGUgYi9hcmNoL3MzOTAvTWFrZWZpbGUKaW5kZXggNjU5OGU1Mi4uYjFlNTU4NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9NYWtlZmlsZQpAQCAtODIsMTggKzgyLDE4IEBACiBPQkpDT1BZRkxBR1MJOj0gLU8gYmluYXJ5CiBMREZMQUdTX3ZtbGludXggOj0gLWUgc3RhcnQKIAotaGVhZC15CQk6PSBhcmNoLyQoQVJDSCkva2VybmVsL2hlYWQubyBhcmNoLyQoQVJDSCkva2VybmVsL2luaXRfdGFzay5vCitoZWFkLXkJCTo9IGFyY2gvczM5MC9rZXJuZWwvaGVhZC5vIGFyY2gvczM5MC9rZXJuZWwvaW5pdF90YXNrLm8KIAotY29yZS15CQkrPSBhcmNoLyQoQVJDSCkvbW0vIGFyY2gvJChBUkNIKS9rZXJuZWwvIGFyY2gvJChBUkNIKS9jcnlwdG8vIFwKLQkJICAgYXJjaC8kKEFSQ0gpL2FwcGxkYXRhLyBhcmNoLyQoQVJDSCkvaHlwZnMvCi1saWJzLXkJCSs9IGFyY2gvJChBUkNIKS9saWIvCitjb3JlLXkJCSs9IGFyY2gvczM5MC9tbS8gYXJjaC9zMzkwL2tlcm5lbC8gYXJjaC9zMzkwL2NyeXB0by8gXAorCQkgICBhcmNoL3MzOTAvYXBwbGRhdGEvIGFyY2gvczM5MC9oeXBmcy8KK2xpYnMteQkJKz0gYXJjaC9zMzkwL2xpYi8KIGRyaXZlcnMteQkrPSBkcml2ZXJzL3MzOTAvCi1kcml2ZXJzLSQoQ09ORklHX01BVEhFTVUpICs9IGFyY2gvJChBUkNIKS9tYXRoLWVtdS8KK2RyaXZlcnMtJChDT05GSUdfTUFUSEVNVSkgKz0gYXJjaC9zMzkwL21hdGgtZW11LwogCiAjIG11c3QgYmUgbGlua2VkIGFmdGVyIGtlcm5lbAogZHJpdmVycy0kKENPTkZJR19PUFJPRklMRSkJKz0gYXJjaC9zMzkwL29wcm9maWxlLwogCi1ib290CQk6PSBhcmNoLyQoQVJDSCkvYm9vdAorYm9vdAkJOj0gYXJjaC9zMzkwL2Jvb3QKIAogYWxsOiBpbWFnZQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvZGVmY29uZmlnIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwppbmRleCAxNDA2NDAwLi43NDFkMmJiYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0xLDkgKzEsMTAgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzEKLSMgRnJpIERlYyAxNSAxNjo1MjoyOCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjEtcmMxCisjIFdlZCBGZWIgMjEgMTA6NDQ6MzAgMjAwNwogIwogQ09ORklHX01NVT15CitDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CkBAIC0xMSw2ICsxMiw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19OT19JT01FTT15CiBDT05GSUdfUzM5MD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCkBAIC0yOSw2ICszMSw3IEBACiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldApAQCAtMTMzLDYgKzEzNiw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19IT0xFU19JTl9aT05FPXkKIAogIwpAQCAtMTc4LDcgKzE4Miw5IEBACiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lVQ1Y9bQogQ09ORklHX0FGSVVDVj1tCiBDT05GSUdfSU5FVD15CkBAIC0xOTUsNyArMjAxLDcgQEAKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CkBAIC0zMTMsNiArMzE5LDcgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNfSFlQRVJWSVNPUj15CiAKICMKQEAgLTY4NiwxMyArNjkzLDEzIEBACiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKQEAgLTcwMiwxMCArNzA5LDEwIEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNzMzLDggKzc0MCwxMCBAQAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKQEAgLTc0OCw2ICs3NTcsNyBAQAogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc2OCw0ICs3NzgsMyBAQAogQ09ORklHX0NSQzMyPW0KICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfUExJU1Q9eQotQ09ORklHX0lPTUFQX0NPUFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IGU1MThkZDUuLmFmY2ExYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lwbC5oPgogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgpAQCAtMTA5LDcgKzExMCw3IEBACiAgKi8KIHN0YXRpYyBub2lubGluZSBfX2luaXQgdm9pZCBjbGVhcl9ic3Nfc2VjdGlvbih2b2lkKQogewotCW1lbXNldChfX2Jzc19zdGFydCwgMCwgX2VuZCAtIF9fYnNzX3N0YXJ0KTsKKwltZW1zZXQoX19ic3Nfc3RhcnQsIDAsIF9fYnNzX3N0b3AgLSBfX2Jzc19zdGFydCk7CiB9CiAKIC8qCkBAIC0xMjksNyArMTMwLDcgQEAKIHsKIAlzdHJ1Y3QgY3B1aW5mb19TMzkwICpjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKIAotCWFzbSB2b2xhdGlsZSgic3RpZHAgJTAiIDogIj1tIiAoUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9pZCkpOworCWdldF9jcHVfaWQoJlMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfaWQpOwogCiAJLyogUnVubmluZyB1bmRlciB6L1ZNID8gKi8KIAlpZiAoY3B1aW5mby0+Y3B1X2lkLnZlcnNpb24gPT0gMHhmZikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCmluZGV4IDQ1M2ZkM2IuLmRhN2M4YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwpAQCAtMTQ4LDIwICsxNDgsOSBAQAogLkxzdGFydHVwX2luaXQ6CiAJICAgIC5sb25nIHN0YXJ0dXBfaW5pdAogCi0JLmdsb2JsIGlwbF9zY2hpYgotaXBsX3NjaGliOgotCS5yZXB0IDEzCi0JLmxvbmcgMAotCS5lbmRyCi0KLQkuZ2xvYmwgaXBsX2ZsYWdzCi1pcGxfZmxhZ3M6Ci0JLmxvbmcgMAotCS5nbG9ibCBpcGxfZGV2bm8KLWlwbF9kZXZubzoKLQkud29yZCAwCi0KIAkub3JnCTB4MTIwMDAKKwkuZ2xvYmwJX2VoZWFkCitfZWhlYWQ6CiAjaWZkZWYgQ09ORklHX1NIQVJFRF9LRVJORUwKIAkub3JnCTB4MTAwMDAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCmluZGV4IGI4ZmVjNGUuLmFmMDllMTggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwpAQCAtMTU0LDIxICsxNTQsOSBAQAogLkxwYXJtYWRkcjoKIAkucXVhZAlQQVJNQVJFQQogCi0JLmdsb2JsCWlwbF9zY2hpYgotaXBsX3NjaGliOgotCS5yZXB0IDEzCi0JLmxvbmcgMAotCS5lbmRyCi0KLQkuZ2xvYmwJaXBsX2ZsYWdzCi1pcGxfZmxhZ3M6Ci0JLmxvbmcJMAotCS5nbG9ibAlpcGxfZGV2bm8KLWlwbF9kZXZubzoKLQkud29yZCAwCi0KIAkub3JnCTB4MTIwMDAKLQorCS5nbG9ibAlfZWhlYWQKK19laGVhZDoKICNpZmRlZiBDT05GSUdfU0hBUkVEX0tFUk5FTAogCS5vcmcJMHgxMDAwMDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggMDUyMjU5NS4uNWE4NjNhMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGFzbS9pcGwuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2NwY21kLmg+CkBAIC00Miw2ICs0MywxMyBAQAogI2RlZmluZSBJUExfRkNQX1NUUgkgImZjcCIKICNkZWZpbmUgSVBMX05TU19TVFIJICJuc3MiCiAKKy8qCisgKiBNdXN0IGJlIGluIGRhdGEgc2VjdGlvbiBzaW5jZSB0aGUgYnNzIHNlY3Rpb24KKyAqIGlzIG5vdCBjbGVhcmVkIHdoZW4gdGhlc2UgYXJlIGFjY2Vzc2VkLgorICovCit1MTYgaXBsX2Rldm5vIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YSIpKSkgPSAwOwordTMyIGlwbF9mbGFncyBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEiKSkpID0gMDsKKwogc3RhdGljIGNoYXIgKmlwbF90eXBlX3N0cihlbnVtIGlwbF90eXBlIHR5cGUpCiB7CiAJc3dpdGNoICh0eXBlKSB7CkBAIC05MCwzMSArOTgsMTAgQEAKIAljYXNlIFNIVVRET1dOX1NUT1A6CiAJCXJldHVybiBTSFVURE9XTl9TVE9QX1NUUjsKIAlkZWZhdWx0OgotCQlCVUcoKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogfQogCi1lbnVtIGRpYWczMDhfc3ViY29kZSAgewotCURJQUczMDhfSVBMICAgPSAzLAotCURJQUczMDhfRFVNUCAgPSA0LAotCURJQUczMDhfU0VUICAgPSA1LAotCURJQUczMDhfU1RPUkUgPSA2LAotfTsKLQotZW51bSBkaWFnMzA4X2lwbF90eXBlIHsKLQlESUFHMzA4X0lQTF9UWVBFX0ZDUCA9IDAsCi0JRElBRzMwOF9JUExfVFlQRV9DQ1cgPSAyLAotfTsKLQotZW51bSBkaWFnMzA4X29wdCB7Ci0JRElBRzMwOF9JUExfT1BUX0lQTCAgPSAweDEwLAotCURJQUczMDhfSVBMX09QVF9EVU1QID0gMHgyMCwKLX07Ci0KLWVudW0gZGlhZzMwOF9yYyB7Ci0JRElBRzMwOF9SQ19PSyA9IDEsCi19OwotCiBzdGF0aWMgaW50IGRpYWczMDhfc2V0X3dvcmtzID0gMDsKIAogc3RhdGljIGludCByZWlwbF9jYXBhYmlsaXRpZXMgPSBJUExfVFlQRV9VTktOT1dOOwpAQCAtMTM0LDcgKzEyMSw3IEBACiAKIHN0YXRpYyBlbnVtIHNodXRkb3duX2FjdGlvbiBvbl9wYW5pY19hY3Rpb24gPSBTSFVURE9XTl9TVE9QOwogCi1zdGF0aWMgaW50IGRpYWczMDgodW5zaWduZWQgbG9uZyBzdWJjb2RlLCB2b2lkICphZGRyKQoraW50IGRpYWczMDgodW5zaWduZWQgbG9uZyBzdWJjb2RlLCB2b2lkICphZGRyKQogewogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX2FkZHIgYXNtKCIwIikgPSAodW5zaWduZWQgbG9uZykgYWRkcjsKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9yYyBhc20oIjEiKSA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggNTBjNTIxMC4uODYzYzhkMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAKKyNpbmNsdWRlIDxhc20vaXBsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgpAQCAtMTA2LDcgKzEwNyw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFN0b3JlIHByb2Nlc3NvciBpZCBpbiBsb3djb3JlICh1c2VkIGUuZy4gaW4gdGltZXJfaW50ZXJydXB0KQogICAgICAgICAgKi8KLQlhc20gdm9sYXRpbGUoInN0aWRwICUwIjogIj1tIiAoUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9pZCkpOworCWdldF9jcHVfaWQoJlMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfaWQpOwogICAgICAgICBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHIgPSBhZGRyOwogCiAgICAgICAgIC8qCkBAIC02ODksOSArNjkwLDE0IEBACiAJcHN3X3NldF9rZXkoUEFHRV9ERUZBVUxUX0tFWSk7CiAKIAlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucygwLCBtYXhfcGZuKTsKLQlyZXNlcnZlX2Jvb3RtZW0oMCwgUEZOX1BIWVMoc3RhcnRfcGZuKSk7CiAKIAkvKgorCSAqIFJlc2VydmUgbWVtb3J5IHVzZWQgZm9yIGxvd2NvcmUvY29tbWFuZCBsaW5lL2tlcm5lbCBpbWFnZS4KKwkgKi8KKwlyZXNlcnZlX2Jvb3RtZW0oMCwgKHVuc2lnbmVkIGxvbmcpX2VoZWFkKTsKKwlyZXNlcnZlX2Jvb3RtZW0oKHVuc2lnbmVkIGxvbmcpX3N0ZXh0LAorCQkJUEZOX1BIWVMoc3RhcnRfcGZuKSAtICh1bnNpZ25lZCBsb25nKV9zdGV4dCk7CisJLyoKIAkgKiBSZXNlcnZlIHRoZSBib290bWVtIGJpdG1hcCBpdHNlbGYgYXMgd2VsbC4gV2UgZG8gdGhpcyBpbiB0d28KIAkgKiBzdGVwcyAoZmlyc3Qgc3RlcCB3YXMgaW5pdF9ib290bWVtKCkpIGJlY2F1c2UgdGhpcyBjYXRjaGVzCiAJICogdGhlICh2ZXJ5IHVubGlrZWx5KSBjYXNlIG9mIHVzIGFjY2lkZW50YWxseSBpbml0aWFsaXppbmcgdGhlCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCA4M2E0ZWE2Li5lY2FhNDMyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGFzbS9pcGwuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2lncC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CkBAIC01NCwxOSArNTUsMTggQEAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfc2V0W05SX0NQVVNdOwogCiBzdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGwoaW50LCBlY19iaXRfc2lnKTsKLXN0YXRpYyB2b2lkIHNtcF9leHRfYml0Y2FsbF9vdGhlcnMoZWNfYml0X3NpZyk7CiAKIC8qCi0gKiBTdHJ1Y3R1cmUgYW5kIGRhdGEgZm9yIHNtcF9jYWxsX2Z1bmN0aW9uKCkuIFRoaXMgaXMgZGVzaWduZWQgdG8gbWluaW1pc2UKLSAqIHN0YXRpYyBtZW1vcnkgcmVxdWlyZW1lbnRzLiBJdCBhbHNvIGxvb2tzIGNsZWFuZXIuCisgKiBTdHJ1Y3R1cmUgYW5kIGRhdGEgZm9yIF9fc21wX2NhbGxfZnVuY3Rpb25fbWFwKCkuIFRoaXMgaXMgZGVzaWduZWQgdG8KKyAqIG1pbmltaXNlIHN0YXRpYyBtZW1vcnkgcmVxdWlyZW1lbnRzLiBJdCBhbHNvIGxvb2tzIGNsZWFuZXIuCiAgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2FsbF9sb2NrKTsKIAogc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgewogCXZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyk7CiAJdm9pZCAqaW5mbzsKLQlhdG9taWNfdCBzdGFydGVkOwotCWF0b21pY190IGZpbmlzaGVkOworCWNwdW1hc2tfdCBzdGFydGVkOworCWNwdW1hc2tfdCBmaW5pc2hlZDsKIAlpbnQgd2FpdDsKIH07CiAKQEAgLTgxLDExOCArODEsMTEzIEBACiAJdm9pZCAqaW5mbyA9IGNhbGxfZGF0YS0+aW5mbzsKIAlpbnQgd2FpdCA9IGNhbGxfZGF0YS0+d2FpdDsKIAotCWF0b21pY19pbmMoJmNhbGxfZGF0YS0+c3RhcnRlZCk7CisJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNhbGxfZGF0YS0+c3RhcnRlZCk7CiAJKCpmdW5jKShpbmZvKTsKIAlpZiAod2FpdCkKLQkJYXRvbWljX2luYygmY2FsbF9kYXRhLT5maW5pc2hlZCk7CisJCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjYWxsX2RhdGEtPmZpbmlzaGVkKTs7CiB9CiAKLS8qCi0gKiB0aGlzIGZ1bmN0aW9uIHNlbmRzIGEgJ2dlbmVyaWMgY2FsbCBmdW5jdGlvbicgSVBJIHRvIGFsbCBvdGhlciBDUFVzCi0gKiBpbiB0aGUgc3lzdGVtLgotICovCi0KLWludCBzbXBfY2FsbF9mdW5jdGlvbiAodm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IG5vbmF0b21pYywKLQkJCWludCB3YWl0KQotLyoKLSAqIFtTVU1NQVJZXSBSdW4gYSBmdW5jdGlvbiBvbiBhbGwgb3RoZXIgQ1BVcy4KLSAqIDxmdW5jPiBUaGUgZnVuY3Rpb24gdG8gcnVuLiBUaGlzIG11c3QgYmUgZmFzdCBhbmQgbm9uLWJsb2NraW5nLgotICogPGluZm8+IEFuIGFyYml0cmFyeSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLgotICogPG5vbmF0b21pYz4gY3VycmVudGx5IHVudXNlZC4KLSAqIDx3YWl0PiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCi0gKiBbUkVUVVJOU10gMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuIERvZXMgbm90IHJldHVybiB1bnRpbAotICogcmVtb3RlIENQVXMgYXJlIG5lYXJseSByZWFkeSB0byBleGVjdXRlIDw8ZnVuYz4+IG9yIGFyZSBvciBoYXZlIGV4ZWN1dGVkLgotICoKLSAqIFlvdSBtdXN0IG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzIG9yIGZyb20gYQotICogaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRsZXIuCi0gKi8KK3N0YXRpYyB2b2lkIF9fc21wX2NhbGxfZnVuY3Rpb25fbWFwKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisJCQkJICAgIGludCBub25hdG9taWMsIGludCB3YWl0LCBjcHVtYXNrX3QgbWFwKQogewogCXN0cnVjdCBjYWxsX2RhdGFfc3RydWN0IGRhdGE7Ci0JaW50IGNwdXMgPSBudW1fb25saW5lX2NwdXMoKS0xOworCWludCBjcHUsIGxvY2FsID0gMDsKIAotCWlmIChjcHVzIDw9IDApCi0JCXJldHVybiAwOworCS8qCisJICogQ2FuIGRlYWRsb2NrIHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgb3IgaWYgaW4gd3JvbmcgY29udGV4dCwKKwkgKiBjYWxsZXIgbXVzdCBkaXNhYmxlIHByZWVtcHRpb24KKwkgKi8KKwlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSB8fCBpbl9pcnEoKSB8fCBwcmVlbXB0aWJsZSgpKTsKIAotCS8qIENhbiBkZWFkbG9jayB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkIG9yIGlmIGluIHdyb25nIGNvbnRleHQgKi8KLQlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSB8fCBpbl9pcnEoKSk7Ci0KLQlkYXRhLmZ1bmMgPSBmdW5jOwotCWRhdGEuaW5mbyA9IGluZm87Ci0JYXRvbWljX3NldCgmZGF0YS5zdGFydGVkLCAwKTsKLQlkYXRhLndhaXQgPSB3YWl0OwotCWlmICh3YWl0KQotCQlhdG9taWNfc2V0KCZkYXRhLmZpbmlzaGVkLCAwKTsKLQotCXNwaW5fbG9ja19iaCgmY2FsbF9sb2NrKTsKLQljYWxsX2RhdGEgPSAmZGF0YTsKLQkvKiBTZW5kIGEgbWVzc2FnZSB0byBhbGwgb3RoZXIgQ1BVcyBhbmQgd2FpdCBmb3IgdGhlbSB0byByZXNwb25kICovCi0gICAgICAgIHNtcF9leHRfYml0Y2FsbF9vdGhlcnMoZWNfY2FsbF9mdW5jdGlvbik7Ci0KLQkvKiBXYWl0IGZvciByZXNwb25zZSAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5zdGFydGVkKSAhPSBjcHVzKQotCQljcHVfcmVsYXgoKTsKLQotCWlmICh3YWl0KQotCQl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuZmluaXNoZWQpICE9IGNwdXMpCi0JCQljcHVfcmVsYXgoKTsKLQlzcGluX3VubG9ja19iaCgmY2FsbF9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogQ2FsbCBhIGZ1bmN0aW9uIG9uIG9uZSBDUFUKLSAqIGNwdSA6IHRoZSBDUFUgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBleGVjdXRlZCBvbgotICoKLSAqIFlvdSBtdXN0IG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzIG9yIGZyb20gYQotICogaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRsZXIuIFlvdSBtYXkgY2FsbCBpdCBmcm9tIGEgYm90dG9tIGhhbGYuCi0gKgotICogSXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZSBjYWxsZWQgZnVuY3Rpb24gcnVucyBvbiB0aGUgc3BlY2lmaWVkIENQVSwKLSAqIHByZWVtcHRpb24gaXMgZGlzYWJsZWQuCi0gKi8KLWludCBzbXBfY2FsbF9mdW5jdGlvbl9vbih2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAotCQkJIGludCBub25hdG9taWMsIGludCB3YWl0LCBpbnQgY3B1KQotewotCXN0cnVjdCBjYWxsX2RhdGFfc3RydWN0IGRhdGE7Ci0JaW50IGN1cnJfY3B1OwotCi0JaWYgKCFjcHVfb25saW5lKGNwdSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogQ2FuIGRlYWRsb2NrIHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgb3IgaWYgaW4gd3JvbmcgY29udGV4dCAqLwotCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpIHx8IGluX2lycSgpKTsKLQotCS8qIGRpc2FibGUgcHJlZW1wdGlvbiBmb3IgbG9jYWwgZnVuY3Rpb24gY2FsbCAqLwotCWN1cnJfY3B1ID0gZ2V0X2NwdSgpOwotCi0JaWYgKGN1cnJfY3B1ID09IGNwdSkgewotCQkvKiBkaXJlY3QgY2FsbCB0byBmdW5jdGlvbiAqLwotCQlmdW5jKGluZm8pOwotCQlwdXRfY3B1KCk7Ci0JCXJldHVybiAwOworCS8qCisJICogQ2hlY2sgZm9yIGxvY2FsIGZ1bmN0aW9uIGNhbGwuIFdlIGhhdmUgdG8gaGF2ZSB0aGUgc2FtZSBjYWxsIG9yZGVyCisJICogYXMgaW4gb25fZWFjaF9jcHUoKSBiZWNhdXNlIG9mIG1hY2hpbmVfcmVzdGFydF9zbXAoKS4KKwkgKi8KKwlpZiAoY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFwKSkgeworCQlsb2NhbCA9IDE7CisJCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hcCk7CiAJfQogCisJY3B1c19hbmQobWFwLCBtYXAsIGNwdV9vbmxpbmVfbWFwKTsKKwlpZiAoY3B1c19lbXB0eShtYXApKQorCQlnb3RvIG91dDsKKwogCWRhdGEuZnVuYyA9IGZ1bmM7CiAJZGF0YS5pbmZvID0gaW5mbzsKLQlhdG9taWNfc2V0KCZkYXRhLnN0YXJ0ZWQsIDApOworCWRhdGEuc3RhcnRlZCA9IENQVV9NQVNLX05PTkU7CiAJZGF0YS53YWl0ID0gd2FpdDsKIAlpZiAod2FpdCkKLQkJYXRvbWljX3NldCgmZGF0YS5maW5pc2hlZCwgMCk7CisJCWRhdGEuZmluaXNoZWQgPSBDUFVfTUFTS19OT05FOwogCiAJc3Bpbl9sb2NrX2JoKCZjYWxsX2xvY2spOwogCWNhbGxfZGF0YSA9ICZkYXRhOwotCXNtcF9leHRfYml0Y2FsbChjcHUsIGVjX2NhbGxfZnVuY3Rpb24pOworCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXApCisJCXNtcF9leHRfYml0Y2FsbChjcHUsIGVjX2NhbGxfZnVuY3Rpb24pOwogCiAJLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KLQl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuc3RhcnRlZCkgIT0gMSkKKwl3aGlsZSAoIWNwdXNfZXF1YWwobWFwLCBkYXRhLnN0YXJ0ZWQpKQogCQljcHVfcmVsYXgoKTsKIAogCWlmICh3YWl0KQotCQl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuZmluaXNoZWQpICE9IDEpCisJCXdoaWxlICghY3B1c19lcXVhbChtYXAsIGRhdGEuZmluaXNoZWQpKQogCQkJY3B1X3JlbGF4KCk7CiAKIAlzcGluX3VubG9ja19iaCgmY2FsbF9sb2NrKTsKLQlwdXRfY3B1KCk7CisKK291dDoKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmIChsb2NhbCkKKwkJZnVuYyhpbmZvKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKKy8qCisgKiBzbXBfY2FsbF9mdW5jdGlvbjoKKyAqIEBmdW5jOiB0aGUgZnVuY3Rpb24gdG8gcnVuOyB0aGlzIG11c3QgYmUgZmFzdCBhbmQgbm9uLWJsb2NraW5nCisgKiBAaW5mbzogYW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24KKyAqIEBub25hdG9taWM6IHVudXNlZAorICogQHdhaXQ6IGlmIHRydWUsIHdhaXQgKGF0b21pY2FsbHkpIHVudGlsIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQgb24gb3RoZXIgQ1BVcworICoKKyAqIFJ1biBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBDUFVzLgorICoKKyAqIFlvdSBtdXN0IG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzIG9yIGZyb20gYQorICogaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRsZXIuIE11c3QgYmUgY2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4KKyAqIFlvdSBtYXkgY2FsbCBpdCBmcm9tIGEgYm90dG9tIGhhbGYuCisgKi8KK2ludCBzbXBfY2FsbF9mdW5jdGlvbih2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgbm9uYXRvbWljLAorCQkgICAgICBpbnQgd2FpdCkKK3sKKwljcHVtYXNrX3QgbWFwOworCisJbWFwID0gY3B1X29ubGluZV9tYXA7CisJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFwKTsKKwlfX3NtcF9jYWxsX2Z1bmN0aW9uX21hcChmdW5jLCBpbmZvLCBub25hdG9taWMsIHdhaXQsIG1hcCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uKTsKKworLyoKKyAqIHNtcF9jYWxsX2Z1bmN0aW9uX29uOgorICogQGZ1bmM6IHRoZSBmdW5jdGlvbiB0byBydW47IHRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcKKyAqIEBpbmZvOiBhbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbgorICogQG5vbmF0b21pYzogdW51c2VkCisgKiBAd2FpdDogaWYgdHJ1ZSwgd2FpdCAoYXRvbWljYWxseSkgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCBvbiBvdGhlciBDUFVzCisgKiBAY3B1OiB0aGUgQ1BVIHdoZXJlIGZ1bmMgc2hvdWxkIHJ1bgorICoKKyAqIFJ1biBhIGZ1bmN0aW9uIG9uIG9uZSBwcm9jZXNzb3IuCisgKgorICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCisgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4gTXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLgorICogWW91IG1heSBjYWxsIGl0IGZyb20gYSBib3R0b20gaGFsZi4KKyAqLworaW50IHNtcF9jYWxsX2Z1bmN0aW9uX29uKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCBub25hdG9taWMsCisJCQkgIGludCB3YWl0LCBpbnQgY3B1KQoreworCWNwdW1hc2tfdCBtYXAgPSBDUFVfTUFTS19OT05FOworCisJY3B1X3NldChjcHUsIG1hcCk7CisJX19zbXBfY2FsbF9mdW5jdGlvbl9tYXAoZnVuYywgaW5mbywgbm9uYXRvbWljLCB3YWl0LCBtYXApOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbl9vbik7CkBAIC0zMjUsMjYgKzMyMCw2IEBACiAJCXVkZWxheSgxMCk7CiB9CiAKLS8qCi0gKiBTZW5kIGFuIGV4dGVybmFsIGNhbGwgc2lncCB0byBldmVyeSBvdGhlciBjcHUgaW4gdGhlIHN5c3RlbSBhbmQKLSAqIHJldHVybiB3aXRob3V0IHdhaXRpbmcgZm9yIGl0cyBjb21wbGV0aW9uLgotICovCi1zdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGxfb3RoZXJzKGVjX2JpdF9zaWcgc2lnKQotewotICAgICAgICBpbnQgY3B1OwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIFNldCBzaWduYWxpbmcgYml0IGluIGxvd2NvcmUgb2YgdGFyZ2V0IGNwdSBhbmQga2ljayBpdAotICAgICAgICAgICAgICAgICAqLwotCQlzZXRfYml0KHNpZywgKHVuc2lnbmVkIGxvbmcgKikgJmxvd2NvcmVfcHRyW2NwdV0tPmV4dF9jYWxsX2Zhc3QpOwotCQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfZW1lcmdlbmN5X3NpZ25hbCkgPT0gc2lncF9idXN5KQotCQkJdWRlbGF5KDEwKTsKLSAgICAgICAgfQotfQotCiAjaWZuZGVmIENPTkZJR182NEJJVAogLyoKICAqIHRoaXMgZnVuY3Rpb24gc2VuZHMgYSAncHVyZ2UgdGxiJyBzaWduYWwgdG8gYW5vdGhlciBDUFUuCkBAIC04MDcsNiArNzgyLDUgQEAKIEVYUE9SVF9TWU1CT0wobG93Y29yZV9wdHIpOwogRVhQT1JUX1NZTUJPTChzbXBfY3RsX3NldF9iaXQpOwogRVhQT1JUX1NZTUJPTChzbXBfY3RsX2NsZWFyX2JpdCk7Ci1FWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uKTsKIEVYUE9SVF9TWU1CT0woc21wX2dldF9jcHUpOwogRVhQT1JUX1NZTUJPTChzbXBfcHV0X2NwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IDNiOTFmMjcuLmUxYWQ0NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAkubWFzawkJPSAtMVVMTCwKIAkubXVsdAkJPSAxMDAwLAogCS5zaGlmdAkJPSAxMiwKLQkuaXNfY29udGludW91cwk9IDEsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAogCkBAIC03NDcsNiArNzQ3LDcgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgdm9pZCBldHJfc3luY19jcHVfc3RhcnQodm9pZCAqZHVtbXkpCiB7CiAJaW50ICppbl9zeW5jID0gZHVtbXk7CkBAIC03NTgsOCArNzU5LDE0IEBACiAJICogX191ZGVsYXkgd2lsbCBzdG9wIHRoZSBjcHUgb24gYW4gZW5hYmxlZCB3YWl0IHBzdyB1bnRpbCB0aGUKIAkgKiBUT0QgaXMgcnVubmluZyBhZ2Fpbi4KIAkgKi8KLQl3aGlsZSAoKmluX3N5bmMgPT0gMCkKKwl3aGlsZSAoKmluX3N5bmMgPT0gMCkgewogCQlfX3VkZWxheSgxKTsKKwkJLyoKKwkJICogQSBkaWZmZXJlbnQgY3B1IGNoYW5nZXMgKmluX3N5bmMuIFRoZXJlZm9yZSB1c2UKKwkJICogYmFycmllcigpIHRvIGZvcmNlIG1lbW9yeSBhY2Nlc3MuCisJCSAqLworCQliYXJyaWVyKCk7CisJfQogCWlmICgqaW5fc3luYyAhPSAxKQogCQkvKiBEaWRuJ3Qgd29yay4gQ2xlYXIgcGVyLWNwdSBpbiBzeW5jIGJpdCBhZ2Fpbi4gKi8KIAkJZXRyX2Rpc2FibGVfc3luY19jbG9jayhOVUxMKTsKQEAgLTc3Myw2ICs3ODAsNyBAQAogc3RhdGljIHZvaWQgZXRyX3N5bmNfY3B1X2VuZCh2b2lkICpkdW1teSkKIHsKIH0KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCiAgKiBTeW5jIHRoZSBUT0QgY2xvY2sgdXNpbmcgdGhlIHBvcnQgcmVmZXJlZCB0byBieSBhaWJwLiBUaGlzIHBvcnQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvZGVsYXkuYyBiL2FyY2gvczM5MC9saWIvZGVsYXkuYwppbmRleCAwMjg1NDQ0Li43MGYyYTg2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9zMzkwL2xpYi9kZWxheS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQogewpAQCAtMzUsNyArMzYsMTEgQEAKIHsKIAl1NjQgZW5kLCB0aW1lLCBqaWZmeV90aW1lciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgY3IwLCBtYXNrLCBkdW1teTsKKwlpbnQgaXJxX2NvbnRleHQ7CiAKKwlpcnFfY29udGV4dCA9IGluX2ludGVycnVwdCgpOworCWlmICghaXJxX2NvbnRleHQpCisJCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJaWYgKHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSkgewogCQlqaWZmeV90aW1lciA9IFMzOTBfbG93Y29yZS5qaWZmeV90aW1lcjsKQEAgLTYyLDYgKzY3LDggQEAKIAkJX19jdGxfbG9hZChjcjAsIDAsIDApOwogCQlTMzkwX2xvd2NvcmUuamlmZnlfdGltZXIgPSBqaWZmeV90aW1lcjsKIAl9CisJaWYgKCFpcnFfY29udGV4dCkKKwkJX2xvY2FsX2JoX2VuYWJsZSgpOwogCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5qaWZmeV90aW1lcik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggYjNlN2M0NS4uOTE2YjcyYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC0xNDEsNyArMTQxLDkgQEAKIAlfX3Jhd19sb2NhbF9pcnFfc3NtKHNzbV9tYXNrKTsKIAogCW1lbXNldChtYXhfem9uZV9wZm5zLCAwLCBzaXplb2YobWF4X3pvbmVfcGZucykpOworI2lmZGVmIENPTkZJR19aT05FX0RNQQogCW1heF96b25lX3BmbnNbWk9ORV9ETUFdID0gUEZOX0RPV04oTUFYX0RNQV9BRERSRVNTKTsKKyNlbmRpZgogCW1heF96b25lX3BmbnNbWk9ORV9OT1JNQUxdID0gbWF4X2xvd19wZm47CiAJZnJlZV9hcmVhX2luaXRfbm9kZXMobWF4X3pvbmVfcGZucyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggNGYzODkxMi4uNGQxNmQ4OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTM1LDEyICsxMzUsNiBAQAogCSAgTW9yZSBpbmZvcm1hdGlvbiAoaGFyZHdhcmUgb25seSkgYXQKIAkgIDxodHRwOi8vd3d3LmhwLmNvbS9qb3JuYWRhLz4uCiAKLWNvbmZpZyBTSF9FQzMxMDQKLQlib29sICJFQzMxMDQiCi0JaGVscAotCSAgU2VsZWN0IEVDMzEwNCBpZiBjb25maWd1cmluZyBmb3IgYSBzeXN0ZW0gd2l0aCBhbiBFY2xpcHNlCi0JICBJbnRlcm5hdGlvbmFsIEVDMzEwNCBjaGlwLCBlLmcuIHRoZSBIYXJyaXMgQUQyMDAwLgotCiBjb25maWcgU0hfU0FUVVJOCiAJYm9vbCAiU2F0dXJuIgogCXNlbGVjdCBDUFVfU1VCVFlQRV9TSDc2MDQKQEAgLTE1Niw5ICsxNTAsNiBAQAogCSAgPGh0dHA6Ly93d3cubTE3bi5vcmcvbGludXgtc2gvZHJlYW1jYXN0Lz4uICBUaGVyZSBpcyBhCiAJICBEcmVhbWNhc3QgcHJvamVjdCBpcyBhdCA8aHR0cDovL2xpbnV4ZGMuc291cmNlZm9yZ2UubmV0Lz4uCiAKLWNvbmZpZyBTSF9CSUdTVVIKLQlib29sICJCaWdTdXIiCi0KIGNvbmZpZyBTSF9NUEMxMjExCiAJYm9vbCAiSW50ZXJmYWNlIE1QQzEyMTEiCiAJaGVscApAQCAtNDgxLDYgKzQ3Miw3IEBACiAKIGNvbmZpZyBTSF9DTEtfTUQKIAlpbnQgIkNQVSBNb2RlIFBpbiBTZXR0aW5nIgorCWRlZmF1bHQgMAogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NjE5IHx8IENQVV9TVUJUWVBFX1NINzIwNgogCWhlbHAKIAkgIE1EMiAtIE1EMCBwaW4gc2V0dGluZy4KQEAgLTUxMCw4ICs1MDIsOSBAQAogY29uZmlnIEhFQVJUQkVBVAogCWJvb2wgIkhlYXJ0YmVhdCBMRUQiCiAJZGVwZW5kcyBvbiBTSF9NUEMxMjExIHx8IFNIX1NIMDMgfHwgXAotCQkgICBTSF9CSUdTVVIgfHwgU09MVVRJT05fRU5HSU5FIHx8IFwKLQkJICAgU0hfUlRTNzc1MVIyRCB8fCBTSF9TSDQyMDJfTUlDUk9ERVYgfHwgU0hfTEFORElTSworCQkgICBTT0xVVElPTl9FTkdJTkUgfHwgXAorCQkgICBTSF9SVFM3NzUxUjJEIHx8IFNIX1NINDIwMl9NSUNST0RFViB8fCBTSF9MQU5ESVNLIHx8IFwKKwkJICAgU0hfUjc3ODBSUAogCWhlbHAKIAkgIFVzZSB0aGUgcG93ZXItb24gTEVEIG9uIHlvdXIgbWFjaGluZSBhcyBhIGxvYWQgbWV0ZXIuICBUaGUgZXhhY3QKIAkgIGJlaGF2aW9yIGlzIHBsYXRmb3JtLWRlcGVuZGVudCwgYnV0IG5vcm1hbGx5IHRoZSBmbGFzaCBmcmVxdWVuY3kgaXMKQEAgLTU5Niw2ICs1ODksOCBAQAogY29uZmlnIFpFUk9fUEFHRV9PRkZTRVQKIAloZXggIlplcm8gcGFnZSBvZmZzZXQiCiAJZGVmYXVsdCAiMHgwMDAwNDAwMCIgaWYgU0hfTVBDMTIxMSB8fCBTSF9TSDAzCisJZGVmYXVsdCAiMHgwMDAxMDAwMCIgaWYgUEFHRV9TSVpFXzY0S0IKKwlkZWZhdWx0ICIweDAwMDAyMDAwIiBpZiBQQUdFX1NJWkVfOEtCCiAJZGVmYXVsdCAiMHgwMDAwMTAwMCIKIAloZWxwCiAJICBUaGlzIHNldHMgdGhlIGRlZmF1bHQgb2Zmc2V0IG9mIHplcm8gcGFnZS4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IGMxZGJlZjIuLmJkOWIxNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMzUsNiArMzUsNyBAQAogZW5kaWYKIAogY2ZsYWdzLSQoQ09ORklHX0NQVV9TSDIpCQk6PSAtbTIKK2NmbGFncy0kKENPTkZJR19DUFVfU0gyQSkJCTo9IC1tMmEgJChjYWxsIGNjLW9wdGlvbiwtbTJhLW5vZnB1LCkKIGNmbGFncy0kKENPTkZJR19DUFVfU0gzKQkJOj0gLW0zCiBjZmxhZ3MtJChDT05GSUdfQ1BVX1NINCkJCTo9IC1tNCBcCiAJJChjYWxsIGNjLW9wdGlvbiwtbW5vLWltcGxpY2l0LWZwLC1tNC1ub2ZwdSkKQEAgLTkzLDEwICs5NCw4IEBACiBtYWNoZGlyLSQoQ09ORklHX1NIXzczNDNfU09MVVRJT05fRU5HSU5FKQk6PSBzZS83MzQzCiBtYWNoZGlyLSQoQ09ORklHX1NIXzczMTgwX1NPTFVUSU9OX0VOR0lORSkJOj0gc2UvNzMxODAKIG1hY2hkaXItJChDT05GSUdfU0hfSFA2WFgpCQkJOj0gaHA2eHgKLW1hY2hkaXItJChDT05GSUdfU0hfRUMzMTA0KQkJCTo9IGVjMzEwNAogbWFjaGRpci0kKENPTkZJR19TSF9TQVRVUk4pCQkJOj0gc2F0dXJuCiBtYWNoZGlyLSQoQ09ORklHX1NIX0RSRUFNQ0FTVCkJCQk6PSBkcmVhbWNhc3QKLW1hY2hkaXItJChDT05GSUdfU0hfQklHU1VSKQkJCTo9IGJpZ3N1cgogbWFjaGRpci0kKENPTkZJR19TSF9NUEMxMjExKQkJCTo9IG1wYzEyMTEKIG1hY2hkaXItJChDT05GSUdfU0hfU0gwMykJCQk6PSBzaDAzCiBtYWNoZGlyLSQoQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwKQkJOj0gc25hcGdlYXIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZmOTQ5Ny4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBCaWdTdXIgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAotIwotCi1vYmoteQkgOj0gc2V0dXAubyBpby5vIGlycS5vIGxlZC5vCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9pby5jIGIvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL2lvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMDcxZjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL2lvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqIGFyY2gvc2gvYm9hcmRzL2JpZ3N1ci9pby5jCi0gKgotICogQnkgRHVzdGluIE1jSW50aXJlIChkdXN0aW5Ac2Vuc29yaWEuY29tKSAoYykyMDAxCi0gKiBEZXJpdmVkIGZyb20gaW9faGQ2NDQ2NS5oLCB3aGljaCBib3JlIHRoZSBtZXNzYWdlOgotICogQnkgR3JlZyBCYW5rcyA8Z2JhbmtzQHBvY2tldHBlbmd1aW5zLmNvbT4KLSAqIChjKSAyMDAwIFBvY2tldFBlbmd1aW5zIEluYy4gCi0gKiBhbmQgZnJvbSBpb19oZDY0NDYxLmgsIHdoaWNoIGJvcmUgdGhlIG1lc3NhZ2U6Ci0gKiBDb3B5cmlnaHQgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogSU8gZnVuY3Rpb25zIGZvciBhIEhpdGFjaGkgQmlnIFN1ciBFdmFsdWF0aW9uIEJvYXJkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9iaWdzdXIvYmlnc3VyLmg+Ci0KLS8qIExvdyBpb21hcCBtYXBzIHBvcnQgMC0xSyB0byBhZGRyZXNzZXMgaW4gOGJ5dGUgY2h1bmtzICovCi0jZGVmaW5lIEJJR1NVUl9JT01BUF9MT19USFJFU0ggMHg0MDAKLSNkZWZpbmUgQklHU1VSX0lPTUFQX0xPX1NISUZUCTMKLSNkZWZpbmUgQklHU1VSX0lPTUFQX0xPX01BU0sJKCgxPDxCSUdTVVJfSU9NQVBfTE9fU0hJRlQpLTEpCi0jZGVmaW5lIEJJR1NVUl9JT01BUF9MT19OTUFQCShCSUdTVVJfSU9NQVBfTE9fVEhSRVNIPj5CSUdTVVJfSU9NQVBfTE9fU0hJRlQpCi1zdGF0aWMgdTMyIGJpZ3N1cl9pb21hcF9sb1tCSUdTVVJfSU9NQVBfTE9fTk1BUF07Ci1zdGF0aWMgdTggYmlnc3VyX2lvbWFwX2xvX3NoaWZ0W0JJR1NVUl9JT01BUF9MT19OTUFQXTsKLQotLyogSGlnaCBpb21hcCBtYXBzIHBvcnQgMUstNjRLIHRvIGFkZHJlc3NlcyBpbiAxSyBjaHVua3MgKi8KLSNkZWZpbmUgQklHU1VSX0lPTUFQX0hJX1RIUkVTSCAweDEwMDAwCi0jZGVmaW5lIEJJR1NVUl9JT01BUF9ISV9TSElGVAkxMAotI2RlZmluZSBCSUdTVVJfSU9NQVBfSElfTUFTSwkoKDE8PEJJR1NVUl9JT01BUF9ISV9TSElGVCktMSkKLSNkZWZpbmUgQklHU1VSX0lPTUFQX0hJX05NQVAJKEJJR1NVUl9JT01BUF9ISV9USFJFU0g+PkJJR1NVUl9JT01BUF9ISV9TSElGVCkKLXN0YXRpYyB1MzIgYmlnc3VyX2lvbWFwX2hpW0JJR1NVUl9JT01BUF9ISV9OTUFQXTsKLXN0YXRpYyB1OCBiaWdzdXJfaW9tYXBfaGlfc2hpZnRbQklHU1VSX0lPTUFQX0hJX05NQVBdOwotCi12b2lkIGJpZ3N1cl9wb3J0X21hcCh1MzIgYmFzZXBvcnQsIHUzMiBucG9ydHMsIHUzMiBhZGRyLCB1OCBzaGlmdCkKLXsKLQl1MzIgcG9ydCwgZW5kcG9ydCA9IGJhc2Vwb3J0ICsgbnBvcnRzOwotCi0JcHJfZGVidWcoImJpZ3N1cl9wb3J0X21hcChiYXNlPTB4JTB4LCBuPTB4JTB4LCBhZGRyPTB4JTA4eClcbiIsCi0JCSBiYXNlcG9ydCwgbnBvcnRzLCBhZGRyKTsKLQkgICAgCi0JZm9yIChwb3J0ID0gYmFzZXBvcnQgOwotCSAgICAgcG9ydCA8IGVuZHBvcnQgJiYgcG9ydCA8IEJJR1NVUl9JT01BUF9MT19USFJFU0ggOwotCSAgICAgcG9ydCArPSAoMTw8QklHU1VSX0lPTUFQX0xPX1NISUZUKSkgewotCSAgICAJcHJfZGVidWcoIiAgICBtYXBsb1sweCV4XSA9IDB4JTA4eFxuIiwgcG9ydCwgYWRkcik7Ci0gICAgCSAgICBiaWdzdXJfaW9tYXBfbG9bcG9ydD4+QklHU1VSX0lPTUFQX0xPX1NISUZUXSA9IGFkZHI7Ci0gICAgCSAgICBiaWdzdXJfaW9tYXBfbG9fc2hpZnRbcG9ydD4+QklHU1VSX0lPTUFQX0xPX1NISUZUXSA9IHNoaWZ0OwotCSAgICAJYWRkciArPSAoMTw8KEJJR1NVUl9JT01BUF9MT19TSElGVCkpOwotCX0KLQotCWZvciAocG9ydCA9IG1heF90KHUzMiwgYmFzZXBvcnQsIEJJR1NVUl9JT01BUF9MT19USFJFU0gpOwotCSAgICAgcG9ydCA8IGVuZHBvcnQgJiYgcG9ydCA8IEJJR1NVUl9JT01BUF9ISV9USFJFU0ggOwotCSAgICAgcG9ydCArPSAoMTw8QklHU1VSX0lPTUFQX0hJX1NISUZUKSkgewotCSAgICAJcHJfZGVidWcoIiAgICBtYXBoaVsweCV4XSA9IDB4JTA4eFxuIiwgcG9ydCwgYWRkcik7Ci0gICAgCSAgICBiaWdzdXJfaW9tYXBfaGlbcG9ydD4+QklHU1VSX0lPTUFQX0hJX1NISUZUXSA9IGFkZHI7Ci0gICAgCSAgICBiaWdzdXJfaW9tYXBfaGlfc2hpZnRbcG9ydD4+QklHU1VSX0lPTUFQX0hJX1NISUZUXSA9IHNoaWZ0OwotCSAgICAJYWRkciArPSAoMTw8KEJJR1NVUl9JT01BUF9ISV9TSElGVCkpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woYmlnc3VyX3BvcnRfbWFwKTsKLQotdm9pZCBiaWdzdXJfcG9ydF91bm1hcCh1MzIgYmFzZXBvcnQsIHUzMiBucG9ydHMpCi17Ci0JdTMyIHBvcnQsIGVuZHBvcnQgPSBiYXNlcG9ydCArIG5wb3J0czsKLQkKLQlwcl9kZWJ1ZygiYmlnc3VyX3BvcnRfdW5tYXAoYmFzZT0weCUweCwgbj0weCUweClcbiIsIGJhc2Vwb3J0LCBucG9ydHMpOwotCi0JZm9yIChwb3J0ID0gYmFzZXBvcnQgOwotCSAgICAgcG9ydCA8IGVuZHBvcnQgJiYgcG9ydCA8IEJJR1NVUl9JT01BUF9MT19USFJFU0ggOwotCSAgICAgcG9ydCArPSAoMTw8QklHU1VSX0lPTUFQX0xPX1NISUZUKSkgewotCQliaWdzdXJfaW9tYXBfbG9bcG9ydD4+QklHU1VSX0lPTUFQX0xPX1NISUZUXSA9IDA7Ci0JfQotCi0JZm9yIChwb3J0ID0gbWF4X3QodTMyLCBiYXNlcG9ydCwgQklHU1VSX0lPTUFQX0xPX1RIUkVTSCk7Ci0JICAgICBwb3J0IDwgZW5kcG9ydCAmJiBwb3J0IDwgQklHU1VSX0lPTUFQX0hJX1RIUkVTSCA7Ci0JICAgICBwb3J0ICs9ICgxPDxCSUdTVVJfSU9NQVBfSElfU0hJRlQpKSB7Ci0JCWJpZ3N1cl9pb21hcF9oaVtwb3J0Pj5CSUdTVVJfSU9NQVBfSElfU0hJRlRdID0gMDsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKGJpZ3N1cl9wb3J0X3VubWFwKTsKLQotdW5zaWduZWQgbG9uZyBiaWdzdXJfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKLQl1bnNpZ25lZCBjaGFyIHNoaWZ0OwotCi0JLyogUGh5c2ljYWwgYWRkcmVzcyBub3QgaW4gUDAsIGRvIG5vdGhpbmcgKi8KLQlpZiAoUFhTRUcocG9ydCkpIHsKLQkJYWRkciA9IHBvcnQ7Ci0JLyogcGh5c2ljYWwgYWRkcmVzcyBpbiBQMCwgbWFwIHRvIFAyICovCi0JfSBlbHNlIGlmIChwb3J0ID49IDB4MzAwMDApIHsKLQkJYWRkciA9IFAyU0VHQUREUihwb3J0KTsKLQkvKiBCaWcgU3VyIEkvTyArIEhENjQ0NjUgcmVnaXN0ZXJzIDB4MTAwMDAtMHgzMDAwMCAqLwotCX0gZWxzZSBpZiAocG9ydCA+PSBCSUdTVVJfSU9NQVBfSElfVEhSRVNIKSB7Ci0JCWFkZHIgPSBCSUdTVVJfSU5URVJOQUxfQkFTRSArIChwb3J0IC0gQklHU1VSX0lPTUFQX0hJX1RIUkVTSCk7Ci0JLyogSGFuZGxlIHJlbWFwcGluZyBvZiBoaWdoIElPL1BDSSBJTyBwb3J0cyAqLwotCX0gZWxzZSBpZiAocG9ydCA+PSBCSUdTVVJfSU9NQVBfTE9fVEhSRVNIKSB7Ci0JCWFkZHIgPSBiaWdzdXJfaW9tYXBfaGlbcG9ydCA+PiBCSUdTVVJfSU9NQVBfSElfU0hJRlRdOwotCQlzaGlmdCA9IGJpZ3N1cl9pb21hcF9oaV9zaGlmdFtwb3J0ID4+IEJJR1NVUl9JT01BUF9ISV9TSElGVF07Ci0KLQkJaWYgKGFkZHIgIT0gMCkKLQkJCWFkZHIgKz0gKHBvcnQgJiBCSUdTVVJfSU9NQVBfSElfTUFTSykgPDwgc2hpZnQ7Ci0JfSBlbHNlIHsKLQkJLyogSGFuZGxlIHJlbWFwcGluZyBvZiBsb3cgSU8gcG9ydHMgKi8KLQkJYWRkciA9IGJpZ3N1cl9pb21hcF9sb1twb3J0ID4+IEJJR1NVUl9JT01BUF9MT19TSElGVF07Ci0JCXNoaWZ0ID0gYmlnc3VyX2lvbWFwX2xvX3NoaWZ0W3BvcnQgPj4gQklHU1VSX0lPTUFQX0xPX1NISUZUXTsKLQotCQlpZiAoYWRkciAhPSAwKQotCQkJYWRkciArPSAocG9ydCAmIEJJR1NVUl9JT01BUF9MT19NQVNLKSA8PCBzaGlmdDsKLQl9Ci0KLQlwcl9kZWJ1ZygiJXMoMHglMDhseCkgPSAweCUwOGx4XG4iLCBfX0ZVTkNUSU9OX18sIHBvcnQsIGFkZHIpOwotCi0JcmV0dXJuIGFkZHI7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFiMDRkYS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQgKzAsMCBAQAotLyoKLSAqCi0gKiBCeSBEdXN0aW4gTWNJbnRpcmUgKGR1c3RpbkBzZW5zb3JpYS5jb20pIChjKTIwMDEKLSAqCi0gKiBTZXR1cCBhbmQgSVJRIGhhbmRsaW5nIGNvZGUgZm9yIHRoZSBIRDY0NDY1IGNvbXBhbmlvbiBjaGlwLgotICogYnkgR3JlZyBCYW5rcyA8Z2JhbmtzQHBvY2tldHBlbmd1aW5zLmNvbT4KLSAqIENvcHlyaWdodCAoYykgMjAwMCBQb2NrZXRQZW5ndWlucyBJbmMKLSAqCi0gKiBEZXJpdmVkIGZyb20gc2V0dXBfaGQ2NDQ2NS5jIHdoaWNoIGJvcmUgdGhlIG1lc3NhZ2U6Ci0gKiBHcmVnIEJhbmtzIDxnYmFua3NAcG9ja2V0cGVuZ3VpbnMuY29tPgotICogQ29weXJpZ2h0IChjKSAyMDAwIFBvY2tldFBlbmd1aW5zIEluYyBhbmQKLSAqIENvcHlyaWdodCAoQykgMjAwMCBZQUVHQVNISSBUYWtlc2hpCi0gKiBhbmQgc2V0dXBfY3FyZWVrLmMgd2hpY2ggYm9yZSBtZXNzYWdlOgotICogQ29weXJpZ2h0IChDKSAyMDAwICBOaWliZSBZdXRha2EKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogSVJRIGZ1bmN0aW9ucyBmb3IgYSBIaXRhY2hpIEJpZyBTdXIgRXZhbHVhdGlvbiBCb2FyZC4KLSAqCi0gKi8KLSN1bmRlZiBERUJVRwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9iaWdzdXIvaW8uaD4KLSNpbmNsdWRlIDxhc20vaGQ2NDQ2NS9oZDY0NDY1Lmg+Ci0jaW5jbHVkZSA8YXNtL2JpZ3N1ci9iaWdzdXIuaD4KLQotLy8jZGVmaW5lIEJJR1NVUl9ERUJVRyAzCi0jdW5kZWYgQklHU1VSX0RFQlVHCi0KLSNpZmRlZiBCSUdTVVJfREVCVUcKLSNkZWZpbmUgRElQUklOVEsobiwgYXJncy4uLikgICAgaWYgKEJJR1NVUl9ERUJVRz4obikpIHByaW50ayhhcmdzKQotI2Vsc2UKLSNkZWZpbmUgRElQUklOVEsobiwgYXJncy4uLikKLSNlbmRpZiAvKiBCSUdTVVJfREVCVUcgKi8KLQotI2lmZGVmIENPTkZJR19IRDY0NDY1Ci1leHRlcm4gaW50IGhkNjQ0NjVfaXJxX2RlbXV4KGludCBpcnEpOwotI2VuZGlmIC8qIENPTkZJR19IRDY0NDY1ICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vLyAgICAgICAgICAgICAgQmlnIFN1ciBDUExEIElSUSBSb3V0aW5lcwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qIExldmVsIDEgSVJRIHJvdXRpbmVzICovCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2JpZ3N1cl9sMWlycSh1bnNpZ25lZCBpbnQgaXJxKQotewotICAgICAgICB1bnNpZ25lZCBjaGFyIG1hc2s7Ci0gICAgICAgIHVuc2lnbmVkIGludCBtYXNrX3BvcnQgPSAoKGlycSAtIEJJR1NVUl9JUlFfTE9XKS84KSA/IEJJR1NVUl9JUkxNUjEgOiBCSUdTVVJfSVJMTVIwOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGJpdCA9ICAoMSA8PCAoKGlycSAtIE1HQVRFX0lSUV9MT1cpJTgpICk7Ci0KLSAgICAgICAgaWYoaXJxID49IEJJR1NVUl9JUlFfTE9XICYmIGlycSA8IEJJR1NVUl9JUlFfSElHSCkgewotICAgICAgICAgICAgICAgIHByX2RlYnVnKCJEaXNhYmxlIEwxIElSUSAlZFxuIiwgaXJxKTsKLSAgICAgICAgICAgICAgICBESVBSSU5USygyLCJkaXNhYmxlX2JpZ3N1cl9sMWlycTogSU1SPTB4JTA4eCBtYXNrPTB4JXhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXNrX3BvcnQsIGJpdCk7Ci0KLSAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIElSUSAtIHNldCBtYXNrIGJpdCAqLwotICAgICAgICAgICAgICAgIG1hc2sgPSBpbmIobWFza19wb3J0KSB8IGJpdDsKLSAgICAgICAgICAgICAgICBvdXRiKG1hc2ssIG1hc2tfcG9ydCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHByX2RlYnVnKCJkaXNhYmxlX2JpZ3N1cl9sMWlycTogSW52YWxpZCBJUlEgJWRcbiIsIGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9iaWdzdXJfbDFpcnEodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgdW5zaWduZWQgY2hhciBtYXNrOwotICAgICAgICB1bnNpZ25lZCBpbnQgbWFza19wb3J0ID0gKChpcnEgLSBCSUdTVVJfSVJRX0xPVykvOCkgPyBCSUdTVVJfSVJMTVIxIDogQklHU1VSX0lSTE1SMDsKLSAgICAgICAgdW5zaWduZWQgY2hhciBiaXQgPSAgKDEgPDwgKChpcnEgLSBNR0FURV9JUlFfTE9XKSU4KSApOwotCi0gICAgICAgIGlmKGlycSA+PSBCSUdTVVJfSVJRX0xPVyAmJiBpcnEgPCBCSUdTVVJfSVJRX0hJR0gpIHsKLSAgICAgICAgICAgICAgICBwcl9kZWJ1ZygiRW5hYmxlIEwxIElSUSAlZFxuIiwgaXJxKTsKLSAgICAgICAgICAgICAgICBESVBSSU5USygyLCJlbmFibGVfYmlnc3VyX2wxaXJxOiBJTVI9MHglMDh4IG1hc2s9MHgleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfcG9ydCwgYml0KTsKLSAgICAgICAgICAgICAgICAvKiBFbmFibGUgTDEgSVJRIC0gY2xlYXIgbWFzayBiaXQgKi8KLSAgICAgICAgICAgICAgICBtYXNrID0gaW5iKG1hc2tfcG9ydCkgJiB+Yml0OwotICAgICAgICAgICAgICAgIG91dGIobWFzaywgbWFza19wb3J0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcHJfZGVidWcoImVuYWJsZV9iaWdzdXJfbDFpcnE6IEludmFsaWQgSVJRICVkXG4iLCBpcnEpOwotfQotCi0KLS8qIExldmVsIDIgaXJxIG1hc2tzIGFuZCByZWdpc3RlcnMgZm9yIEwyIGRlY29kaW5nICovCi0vKiBMZXZlbDIgYml0bWFza3MgZm9yIGVhY2ggbGV2ZWwgMSBJUlEgKi8KLWNvbnN0IHUzMiBiaWdzdXJfbDJpcnFfbWFza1tdID0KLSAgICB7MHg0MCwweDgwLDB4MDgsMHgwMSwweDAxLDB4M0MsMHgzRSwweEZGLDB4NDAsMHg4MCwweDA2LDB4MDN9OwotLyogTGV2ZWwyIHRvIElTUltuXSBtYXAgZm9yIGVhY2ggbGV2ZWwgMSBJUlEgKi8KLWNvbnN0IHUzMiBiaWdzdXJfbDJpcnFfcmVnW10gID0KLSAgICB7ICAgMiwgICAyLCAgIDMsICAgMywgICAxLCAgIDIsICAgMSwgICAwLCAgIDEsICAgMSwgICAzLCAgIDJ9OwotLyogTGV2ZWwyIHRvIExldmVsIDEgSVJRIG1hcCAqLwotY29uc3QgdTMyIGJpZ3N1cl9sMl9sMV9tYXBbXSAgPQotICAgIHs3LDcsNyw3LDcsNyw3LDcsIDQsNiw2LDYsNiw2LDgsOSwgMTEsMTEsNSw1LDUsNSwwLDEsIDMsMTAsMTAsMiwtMSwtMSwtMSwtMX07Ci0vKiBJUlEgaW5hY3RpdmUgbGV2ZWwgKGhpZ2ggb3IgbG93KSAqLwotY29uc3QgdTMyIGJpZ3N1cl9sMl9pbmFjdHZfc3RhdGVbXSAgPSAgIHsweDAwLCAweEJFLCAweEZDLCAweEY3fTsKLQotLyogQ1BMRCBleHRlcm5hbCBzdGF0dXMgYW5kIG1hc2sgcmVnaXN0ZXJzIGJhc2UgYW5kIG9mZnNldHMgKi8KLXN0YXRpYyBjb25zdCB1MzIgaXNyX2Jhc2UgPSBCSUdTVVJfSVJRMDsKLXN0YXRpYyBjb25zdCB1MzIgaXNyX29mZnNldCA9IEJJR1NVUl9JUlEwIC0gQklHU1VSX0lSUTE7Ci1zdGF0aWMgY29uc3QgdTMyIGltcl9iYXNlID0gQklHU1VSX0lNUjA7Ci1zdGF0aWMgY29uc3QgdTMyIGltcl9vZmZzZXQgPSBCSUdTVVJfSU1SMCAtIEJJR1NVUl9JTVIxOwotCi0jZGVmaW5lIFJFR19OVU0oaXJxKSAgKChpcnEtQklHU1VSXzJORExWTF9JUlFfTE9XKS84ICkKLQotLyogTGV2ZWwgMiBJUlEgcm91dGluZXMgKi8KLXN0YXRpYyB2b2lkIGRpc2FibGVfYmlnc3VyX2wyaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgbWFzazsKLSAgICAgICAgdW5zaWduZWQgY2hhciBiaXQgPSAxIDw8ICgoaXJxLUJJR1NVUl8yTkRMVkxfSVJRX0xPVyklOCk7Ci0gICAgICAgIHVuc2lnbmVkIGludCBtYXNrX3BvcnQgPSBpbXJfYmFzZSAtIFJFR19OVU0oaXJxKSppbXJfb2Zmc2V0OwotCi0JaWYoaXJxID49IEJJR1NVUl8yTkRMVkxfSVJRX0xPVyAmJiBpcnEgPCBCSUdTVVJfMk5ETFZMX0lSUV9ISUdIKSB7Ci0gICAgICAgICAgICAgICAgcHJfZGVidWcoIkRpc2FibGUgTDIgSVJRICVkXG4iLCBpcnEpOwotICAgICAgICAgICAgICAgIERJUFJJTlRLKDIsImRpc2FibGVfYmlnc3VyX2wyaXJxOiBJTVI9MHglMDh4IG1hc2s9MHgleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfcG9ydCwgYml0KTsKLQotICAgICAgICAgICAgICAgIC8qIERpc2FibGUgTDIgSVJRIC0gc2V0IG1hc2sgYml0ICovCi0gICAgICAgICAgICAgICAgbWFzayA9IGluYihtYXNrX3BvcnQpIHwgYml0OwotICAgICAgICAgICAgICAgIG91dGIobWFzaywgbWFza19wb3J0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcHJfZGVidWcoImRpc2FibGVfYmlnc3VyX2wyaXJxOiBJbnZhbGlkIElSUSAlZFxuIiwgaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgZW5hYmxlX2JpZ3N1cl9sMmlycSh1bnNpZ25lZCBpbnQgaXJxKQotewotICAgICAgICB1bnNpZ25lZCBjaGFyIG1hc2s7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYml0ID0gMSA8PCAoKGlycS1CSUdTVVJfMk5ETFZMX0lSUV9MT1cpJTgpOwotICAgICAgICB1bnNpZ25lZCBpbnQgbWFza19wb3J0ID0gaW1yX2Jhc2UgLSBSRUdfTlVNKGlycSkqaW1yX29mZnNldDsKLQotCWlmKGlycSA+PSBCSUdTVVJfMk5ETFZMX0lSUV9MT1cgJiYgaXJxIDwgQklHU1VSXzJORExWTF9JUlFfSElHSCkgewotICAgICAgICAgICAgICAgIHByX2RlYnVnKCJFbmFibGUgTDIgSVJRICVkXG4iLCBpcnEpOwotICAgICAgICAgICAgICAgIERJUFJJTlRLKDIsImVuYWJsZV9iaWdzdXJfbDJpcnE6IElNUj0weCUwOHggbWFzaz0weCV4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbWFza19wb3J0LCBiaXQpOwotCi0gICAgICAgICAgICAgICAgLyogRW5hYmxlIEwyIElSUSAtIGNsZWFyIG1hc2sgYml0ICovCi0gICAgICAgICAgICAgICAgbWFzayA9IGluYihtYXNrX3BvcnQpICYgfmJpdDsKLSAgICAgICAgICAgICAgICBvdXRiKG1hc2ssIG1hc2tfcG9ydCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHByX2RlYnVnKCJlbmFibGVfYmlnc3VyX2wyaXJxOiBJbnZhbGlkIElSUSAlZFxuIiwgaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX2JpZ3N1cih1bnNpZ25lZCBpbnQgaXJxKQotewotICAgICAgICBwcl9kZWJ1ZygibWFza19hbmRfYWNrX2JpZ3N1ciBJUlEgJWRcbiIsIGlycSk7Ci0gICAgICAgIGlmKGlycSA+PSBCSUdTVVJfSVJRX0xPVyAmJiBpcnEgPCBCSUdTVVJfSVJRX0hJR0gpCi0gICAgICAgICAgICAgICAgZGlzYWJsZV9iaWdzdXJfbDFpcnEoaXJxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRpc2FibGVfYmlnc3VyX2wyaXJxKGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZF9iaWdzdXJfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0gICAgICAgIHByX2RlYnVnKCJlbmRfYmlnc3VyX2lycSBJUlEgJWRcbiIsIGlycSk7Ci0gICAgICAgIGlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpKSB7Ci0gICAgICAgICAgICAgICAgaWYoaXJxID49IEJJR1NVUl9JUlFfTE9XICYmIGlycSA8IEJJR1NVUl9JUlFfSElHSCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9iaWdzdXJfbDFpcnEoaXJxKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfYmlnc3VyX2wyaXJxKGlycSk7Ci0gICAgICAgIH0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2JpZ3N1cl9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgdTggbWFzazsKLSAgICAgICAgdTMyIHJlZzsKLQotICAgICAgICBwcl9kZWJ1Zygic3RhcnR1cF9iaWdzdXJfaXJxIElSUSAlZFxuIiwgaXJxKTsKLQotICAgICAgICBpZihpcnEgPj0gQklHU1VSX0lSUV9MT1cgJiYgaXJxIDwgQklHU1VSX0lSUV9ISUdIKSB7Ci0gICAgICAgICAgICAgICAgLyogRW5hYmxlIHRoZSBMMSBJUlEgKi8KLSAgICAgICAgICAgICAgICBlbmFibGVfYmlnc3VyX2wxaXJxKGlycSk7Ci0gICAgICAgICAgICAgICAgLyogRW5hYmxlIGFsbCBMMiBJUlFzIGluIHRoaXMgTDEgSVJRICovCi0gICAgICAgICAgICAgICAgbWFzayA9IH4oYmlnc3VyX2wyaXJxX21hc2tbaXJxLUJJR1NVUl9JUlFfTE9XXSk7Ci0gICAgICAgICAgICAgICAgcmVnID0gaW1yX2Jhc2UgLSBiaWdzdXJfbDJpcnFfcmVnW2lycS1CSUdTVVJfSVJRX0xPV10gKiBpbXJfb2Zmc2V0OwotICAgICAgICAgICAgICAgIG1hc2sgJj0gaW5iKHJlZyk7Ci0gICAgICAgICAgICAgICAgb3V0YihtYXNrLHJlZyk7Ci0gICAgICAgICAgICAgICAgRElQUklOVEsoMiwic3RhcnR1cF9iaWdzdXJfaXJxOiBJTVI9MHglMDh4IG1hc2s9MHgleFxuIixyZWcsaW5iKHJlZykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIEVuYWJsZSB0aGUgTDIgSVJRIC0gY2xlYXIgbWFzayBiaXQgKi8KLSAgICAgICAgICAgICAgICBlbmFibGVfYmlnc3VyX2wyaXJxKGlycSk7Ci0gICAgICAgICAgICAgICAgLyogRW5hYmxlIHRoZSBMMSBiaXQgbWFza2luZyB0aGlzIEwyIElSUSAqLwotICAgICAgICAgICAgICAgIGVuYWJsZV9iaWdzdXJfbDFpcnEoYmlnc3VyX2wyX2wxX21hcFtpcnEtQklHU1VSXzJORExWTF9JUlFfTE9XXSk7Ci0gICAgICAgICAgICAgICAgRElQUklOVEsoMiwic3RhcnR1cF9iaWdzdXJfaXJxOiBMMT0lZCBMMj0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpZ3N1cl9sMl9sMV9tYXBbaXJxLUJJR1NVUl8yTkRMVkxfSVJRX0xPV10saXJxKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2h1dGRvd25fYmlnc3VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotICAgICAgICBwcl9kZWJ1Zygic2h1dGRvd25fYmlnc3VyX2lycSBJUlEgJWRcbiIsIGlycSk7Ci0gICAgICAgIGlmKGlycSA+PSBCSUdTVVJfSVJRX0xPVyAmJiBpcnEgPCBCSUdTVVJfSVJRX0hJR0gpCi0gICAgICAgICAgICAgICAgZGlzYWJsZV9iaWdzdXJfbDFpcnEoaXJxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRpc2FibGVfYmlnc3VyX2wyaXJxKGlycSk7Ci19Ci0KLS8qIERlZmluZSB0aGUgSVJRIHN0cnVjdHVyZXMgZm9yIHRoZSBMMSBhbmQgTDIgSVJRIHR5cGVzICovCi1zdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGJpZ3N1cl9sMWlycV90eXBlID0gewotCS50eXBlbmFtZSAgPSAiQmlnU3VyLUNQTEQtTGV2ZWwxLUlSUSIsCi0JLnN0YXJ0dXAgPSBzdGFydHVwX2JpZ3N1cl9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25fYmlnc3VyX2lycSwKLQkuZW5hYmxlID0gZW5hYmxlX2JpZ3N1cl9sMWlycSwKLQkuZGlzYWJsZSA9IGRpc2FibGVfYmlnc3VyX2wxaXJxLAotCS5hY2sgPSBtYXNrX2FuZF9hY2tfYmlnc3VyLAotCS5lbmQgPSBlbmRfYmlnc3VyX2lycQotfTsKLQotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBiaWdzdXJfbDJpcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUgID0gIkJpZ1N1ci1DUExELUxldmVsMi1JUlEiLAotCS5zdGFydHVwID0gc3RhcnR1cF9iaWdzdXJfaXJxLAotCS5zaHV0ZG93biAgPXNodXRkb3duX2JpZ3N1cl9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9iaWdzdXJfbDJpcnEsCi0JLmRpc2FibGUgPSBkaXNhYmxlX2JpZ3N1cl9sMmlycSwKLQkuYWNrID0gbWFza19hbmRfYWNrX2JpZ3N1ciwKLQkuZW5kID0gZW5kX2JpZ3N1cl9pcnEKLX07Ci0KLQotc3RhdGljIHZvaWQgbWFrZV9iaWdzdXJfbDFpc3IodW5zaWduZWQgaW50IGlycSkgewotCi0gICAgICAgIC8qIHNhbml0eSBjaGVjayBmaXJzdCAqLwotICAgICAgICBpZihpcnEgPj0gQklHU1VSX0lSUV9MT1cgJiYgaXJxIDwgQklHU1VSX0lSUV9ISUdIKSB7Ci0gICAgICAgICAgICAgICAgLyogc2F2ZSB0aGUgaGFuZGxlciBpbiB0aGUgbWFpbiBkZXNjcmlwdGlvbiB0YWJsZSAqLwotICAgICAgICAgICAgICAgIGlycV9kZXNjW2lycV0uY2hpcCA9ICZiaWdzdXJfbDFpcnFfdHlwZTsKLSAgICAgICAgICAgICAgICBpcnFfZGVzY1tpcnFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLSAgICAgICAgICAgICAgICBpcnFfZGVzY1tpcnFdLmFjdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAgaXJxX2Rlc2NbaXJxXS5kZXB0aCA9IDE7Ci0KLSAgICAgICAgICAgICAgICBkaXNhYmxlX2JpZ3N1cl9sMWlycShpcnEpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBwcl9kZWJ1ZygibWFrZV9iaWdzdXJfbDFpc3I6IGJhZCBpcnEsICVkXG4iLCBpcnEpOwotICAgICAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIG1ha2VfYmlnc3VyX2wyaXNyKHVuc2lnbmVkIGludCBpcnEpIHsKLQotICAgICAgICAvKiBzYW5pdHkgY2hlY2sgZmlyc3QgKi8KLSAgICAgICAgaWYoaXJxID49IEJJR1NVUl8yTkRMVkxfSVJRX0xPVyAmJiBpcnEgPCBCSUdTVVJfMk5ETFZMX0lSUV9ISUdIKSB7Ci0gICAgICAgICAgICAgICAgLyogc2F2ZSB0aGUgaGFuZGxlciBpbiB0aGUgbWFpbiBkZXNjcmlwdGlvbiB0YWJsZSAqLwotICAgICAgICAgICAgICAgIGlycV9kZXNjW2lycV0uY2hpcCA9ICZiaWdzdXJfbDJpcnFfdHlwZTsKLSAgICAgICAgICAgICAgICBpcnFfZGVzY1tpcnFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKLSAgICAgICAgICAgICAgICBpcnFfZGVzY1tpcnFdLmFjdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAgaXJxX2Rlc2NbaXJxXS5kZXB0aCA9IDE7Ci0KLSAgICAgICAgICAgICAgICBkaXNhYmxlX2JpZ3N1cl9sMmlycShpcnEpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBwcl9kZWJ1ZygibWFrZV9iaWdzdXJfbDJpc3I6IGJhZCBpcnEsICVkXG4iLCBpcnEpOwotICAgICAgICByZXR1cm47Ci19Ci0KLS8qIFRoZSBJUlEncyB3aWxsIGJlIGRlY29kZWQgYXMgZm9sbG93czoKLSAqIElmIGEgbGV2ZWwgMiBoYW5kbGVyIGV4aXN0cyBhbmQgdGhlcmUgaXMgYW4gdW5tYXNrZWQgYWN0aXZlCi0gKiBJUlEsIHRoZSAybmQgbGV2ZWwgaGFuZGxlciB3aWxsIGJlIGNhbGxlZC4KLSAqIElmIGEgbGV2ZWwgMiBoYW5kbGVyIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgYWN0aXZlIElSUQotICogdGhlIDFzdCBsZXZlbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkLgotICovCi0KLWludCBiaWdzdXJfaXJxX2RlbXV4KGludCBpcnEpCi17Ci0gICAgICAgIGludCBkbXV4X2lycSA9IGlycTsKLSAgICAgICAgdTggbWFzaywgYWN0dl9pcnFzOwotICAgICAgICB1MzIgcmVnX251bTsKLQotICAgICAgICBESVBSSU5USygzLCJiaWdzdXJfaXJxX2RlbXV4LCBpcnE9JWRcbiIsIGlycSk7Ci0gICAgICAgIC8qIGRlY29kZSB0aGUgMXN0IGxldmVsIElSUSAqLwotICAgICAgICBpZihpcnEgPj0gQklHU1VSX0lSUV9MT1cgJiYgaXJxIDwgQklHU1VSX0lSUV9ISUdIKSB7Ci0gICAgICAgICAgICAgICAgLyogR2V0IGNvcnJlc3BvbmRpbmcgTDIgSVNSIGJpdG1hc2sgYW5kIElTUiBudW1iZXIgKi8KLSAgICAgICAgICAgICAgICBtYXNrID0gYmlnc3VyX2wyaXJxX21hc2tbaXJxLUJJR1NVUl9JUlFfTE9XXTsKLSAgICAgICAgICAgICAgICByZWdfbnVtID0gYmlnc3VyX2wyaXJxX3JlZ1tpcnEtQklHU1VSX0lSUV9MT1ddOwotICAgICAgICAgICAgICAgIC8qIGZpbmQgdGhlIGFjdGl2ZSBJUlEncyAoWE9SIHdpdGggaW5hY3RpdmUgbGV2ZWwpKi8KLSAgICAgICAgICAgICAgICBhY3R2X2lycXMgPSBpbmIoaXNyX2Jhc2UtcmVnX251bSppc3Jfb2Zmc2V0KSBeCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlnc3VyX2wyX2luYWN0dl9zdGF0ZVtyZWdfbnVtXTsKLSAgICAgICAgICAgICAgICAvKiBkZWNvZGUgYWN0aXZlIElSUSdzICovCi0gICAgICAgICAgICAgICAgYWN0dl9pcnFzID0gYWN0dl9pcnFzICYgbWFzayAmIH4oaW5iKGltcl9iYXNlLXJlZ19udW0qaW1yX29mZnNldCkpOwotICAgICAgICAgICAgICAgIC8qIGlmIE5FWiB0aGVuIHdlIGhhdmUgYW4gYWN0aXZlIEwyIElSUSAqLwotICAgICAgICAgICAgICAgIGlmKGFjdHZfaXJxcykgZG11eF9pcnEgPSBmZnoofmFjdHZfaXJxcykgKyByZWdfbnVtKjgrQklHU1VSXzJORExWTF9JUlFfTE9XOwotICAgICAgICAgICAgICAgIC8qIGlmIG5vIDJuZCBsZXZlbCBJUlEgYWN0aW9uLCBidXQgaGFzIDFzdCBsZXZlbCwgdXNlIDFzdCBsZXZlbCBoYW5kbGVyICovCi0gICAgICAgICAgICAgICAgaWYoIWlycV9kZXNjW2RtdXhfaXJxXS5hY3Rpb24gJiYgaXJxX2Rlc2NbaXJxXS5hY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBkbXV4X2lycSA9IGlycTsKLSAgICAgICAgICAgICAgICBESVBSSU5USygxLCJiaWdzdXJfaXJxX2RlbXV4OiBpcnE9JWQgZG11eF9pcnE9JWQgbWFzaz0weCUwNHggcmVnPSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgaXJxLCBkbXV4X2lycSwgbWFzaywgcmVnX251bSk7Ci0gICAgICAgIH0KLSNpZmRlZiBDT05GSUdfSEQ2NDQ2NQotICAgICAgICBkbXV4X2lycSA9IGhkNjQ0NjVfaXJxX2RlbXV4KGRtdXhfaXJxKTsKLSNlbmRpZiAvKiBDT05GSUdfSEQ2NDQ2NSAqLwotICAgICAgICBESVBSSU5USygzLCJiaWdzdXJfaXJxX2RlbXV4LCBkZW11eF9pcnE9JWRcbiIsIGRtdXhfaXJxKTsKLQotICAgICAgICByZXR1cm4gZG11eF9pcnE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLy8gICAgICAgICAgICAgIEJpZyBTdXIgSW5pdCBSb3V0aW5lcwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi12b2lkIF9faW5pdCBpbml0X2JpZ3N1cl9JUlEodm9pZCkKLXsKLSAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgaWYgKCFNQUNIX0JJR1NVUikgcmV0dXJuOwotCi0gICAgICAgIC8qIENyZWF0ZSBJU1IncyBmb3IgQmlnIFN1ciBDUExEIElSUSdzICovCi0gICAgICAgIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotICAgICAgICBmb3IoaT1CSUdTVVJfSVJRX0xPVztpPEJJR1NVUl9JUlFfSElHSDtpKyspCi0gICAgICAgICAgICAgICAgbWFrZV9iaWdzdXJfbDFpc3IoaSk7Ci0KLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiQmlnIFN1ciBDUExEIEwxIGludGVycnVwdHMgJWQgdG8gJWQuXG4iLAotICAgICAgICAgICAgICAgIEJJR1NVUl9JUlFfTE9XLEJJR1NVUl9JUlFfSElHSCk7Ci0KLSAgICAgICAgZm9yKGk9QklHU1VSXzJORExWTF9JUlFfTE9XO2k8QklHU1VSXzJORExWTF9JUlFfSElHSDtpKyspCi0gICAgICAgICAgICAgICAgbWFrZV9iaWdzdXJfbDJpc3IoaSk7Ci0KLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiQmlnIFN1ciBDUExEIEwyIGludGVycnVwdHMgJWQgdG8gJWQuXG4iLAotICAgICAgICAgICAgICAgIEJJR1NVUl8yTkRMVkxfSVJRX0xPVyxCSUdTVVJfMk5ETFZMX0lSUV9ISUdIKTsKLQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL2xlZC5jIGIvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL2xlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjIxNDM5Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9sZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvbGVkLmMKLSAqCi0gKiBCeSBEdXN0aW4gTWNJbnRpcmUgKGR1c3RpbkBzZW5zb3JpYS5jb20pIChjKTIwMDEKLSAqIERlcml2ZWQgZnJvbSBsZWRfc2UuYyBhbmQgbGVkLmMsIHdoaWNoIGJvcmUgdGhlIG1lc3NhZ2U6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgU3R1YXJ0IE1lbmVmeSA8c3R1YXJ0Lm1lbmVmeUBzdC5jb20+Ci0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBCaWcgU3VyIHNwZWNpZmljIExFRCBjb2RlLgotICovCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYmlnc3VyL2JpZ3N1ci5oPgotCi1zdGF0aWMgdm9pZCBtYWNoX2xlZChpbnQgcG9zaXRpb24sIGludCB2YWx1ZSkKLXsKLQlpbnQgd29yZDsKLQkKLQl3b3JkID0gYmlnc3VyX2lubChCSUdTVVJfQ1NMUik7Ci0JaWYgKHZhbHVlKSB7Ci0JCWJpZ3N1cl9vdXRsKHdvcmQgJiB+QklHU1VSX0xFRCwgQklHU1VSX0NTTFIpOwotCX0gZWxzZSB7Ci0JCWJpZ3N1cl9vdXRsKHdvcmQgfCBCSUdTVVJfTEVELCBCSUdTVVJfQ1NMUik7Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQotLyogQ3ljbGUgdGhlIExFRCBvbi9vZmYgKi8KLXZvaWQgaGVhcnRiZWF0X2JpZ3N1cih2b2lkKQotewotCXN0YXRpYyB1bnNpZ25lZCBjbnQgPSAwLCBwZXJpb2QgPSAwLCBkaXN0ID0gMDsKLQotCWlmIChjbnQgPT0gMCB8fCBjbnQgPT0gZGlzdCkKLQkJbWFjaF9sZWQoIC0xLCAxKTsKLQllbHNlIGlmIChjbnQgPT0gNyB8fCBjbnQgPT0gZGlzdCs3KQotCQltYWNoX2xlZCggLTEsIDApOwotCi0JaWYgKCsrY250ID4gcGVyaW9kKSB7Ci0JCWNudCA9IDA7Ci0JCS8qIFRoZSBoeXBlcmJvbGljIGZ1bmN0aW9uIGJlbG93IG1vZGlmaWVzIHRoZSBoZWFydGJlYXQgcGVyaW9kCi0JCSAqIGxlbmd0aCBpbiBkZXBlbmRlbmN5IG9mIHRoZSBjdXJyZW50ICg1bWluKSBsb2FkLiBJdCBnb2VzCi0JCSAqIHRocm91Z2ggdGhlIHBvaW50cyBmKDApPTEyNiwgZigxKT04NiwgZig1KT01MSwKLQkJICogZihpbmYpLT4zMC4gKi8KLQkJcGVyaW9kID0gKCg2NzI8PEZTSElGVCkvKDUqYXZlbnJ1blswXSsoNzw8RlNISUZUKSkpICsgMzA7Ci0JCWRpc3QgPSBwZXJpb2QgLyA0OwotCX0KLX0KLSNlbmRpZiAvKiBDT05GSUdfSEVBUlRCRUFUICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL3NldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MTFjMjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL3NldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICoKLSAqIEJ5IER1c3RpbiBNY0ludGlyZSAoZHVzdGluQHNlbnNvcmlhLmNvbSkgKGMpMjAwMQotICogCi0gKiBTZXR1cCBhbmQgSVJRIGhhbmRsaW5nIGNvZGUgZm9yIHRoZSBIRDY0NDY1IGNvbXBhbmlvbiBjaGlwLgotICogYnkgR3JlZyBCYW5rcyA8Z2JhbmtzQHBvY2tldHBlbmd1aW5zLmNvbT4KLSAqIENvcHlyaWdodCAoYykgMjAwMCBQb2NrZXRQZW5ndWlucyBJbmMKLSAqCi0gKiBEZXJpdmVkIGZyb20gc2V0dXBfaGQ2NDQ2NS5jIHdoaWNoIGJvcmUgdGhlIG1lc3NhZ2U6Ci0gKiBHcmVnIEJhbmtzIDxnYmFua3NAcG9ja2V0cGVuZ3VpbnMuY29tPgotICogQ29weXJpZ2h0IChjKSAyMDAwIFBvY2tldFBlbmd1aW5zIEluYyBhbmQKLSAqIENvcHlyaWdodCAoQykgMjAwMCBZQUVHQVNISSBUYWtlc2hpCi0gKiBhbmQgc2V0dXBfY3FyZWVrLmMgd2hpY2ggYm9yZSBtZXNzYWdlOgotICogQ29weXJpZ2h0IChDKSAyMDAwICBOaWliZSBZdXRha2EKLSAqIAotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIFNldHVwIGZ1bmN0aW9ucyBmb3IgYSBIaXRhY2hpIEJpZyBTdXIgRXZhbHVhdGlvbiBCb2FyZC4KLSAqIAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL2JpZ3N1ci9pby5oPgotI2luY2x1ZGUgPGFzbS9oZDY0NDY1L2hkNjQ0NjUuaD4KLSNpbmNsdWRlIDxhc20vYmlnc3VyL2JpZ3N1ci5oPgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8vCQlCaWcgU3VyIEluaXQgUm91dGluZXMJCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgX19pbml0IGJpZ3N1cl9zZXR1cChjaGFyICoqY21kbGluZV9wKQotewotCS8qIE1hc2sgYWxsIDJuZCBsZXZlbCBJUlEncyAqLwotCW91dGIoLTEsQklHU1VSX0lNUjApOwotCW91dGIoLTEsQklHU1VSX0lNUjEpOwotCW91dGIoLTEsQklHU1VSX0lNUjIpOwotCW91dGIoLTEsQklHU1VSX0lNUjMpOwotCi0JLyogTWFzayAxc3QgbGV2ZWwgaW50ZXJydXB0cyAqLwotCW91dGIoLTEsQklHU1VSX0lSTE1SMCk7Ci0Jb3V0YigtMSxCSUdTVVJfSVJMTVIxKTsKLQotI2lmIGRlZmluZWQgKENPTkZJR19IRDY0NDY1KSAmJiBkZWZpbmVkIChDT05GSUdfU0VSSUFMKSAKLQkvKiByZW1hcCBJTyBwb3J0cyBmb3IgZmlyc3QgSVNBIHNlcmlhbCBwb3J0IHRvIEhENjQ0NjUgVUFSVCAqLwotCWJpZ3N1cl9wb3J0X21hcCgweDNmOCwgOCwgQ09ORklHX0hENjQ0NjVfSU9CQVNFICsgMHg4MDAwLCAxKTsKLSNlbmRpZiAvKiBDT05GSUdfSEQ2NDQ2NSAmJiBDT05GSUdfU0VSSUFMICovCi0JLyogVE9ETzogc2V0dXAgSURFIHJlZ2lzdGVycyAqLwotCWJpZ3N1cl9wb3J0X21hcChCSUdTVVJfSURFQ1RMX0lPUE9SVCwgMiwgQklHU1VSX0lDVEwsIDgpOwotCS8qIFNldHVwIHRoZSBFdGhlcm5ldCBwb3J0IHRvIEJJR1NVUl9FVEhFUl9JT1BPUlQgKi8KLQliaWdzdXJfcG9ydF9tYXAoQklHU1VSX0VUSEVSX0lPUE9SVCwgMTYsIEJJR1NVUl9FVEhSK0JJR1NVUl9FVEhFUl9JT1BPUlQsIDApOwotCS8qIHNldCBwYWdlIHRvIDEgKi8KLQlvdXR3KDEsIEJJR1NVUl9FVEhSKzB4ZSk7Ci0JLyogc2V0IHRoZSBJTyBwb3J0IHRvIEJJR1NVUl9FVEhFUl9JT1BPUlQgKi8KLQlvdXR3KEJJR1NVUl9FVEhFUl9JT1BPUlQ8PDMsIEJJR1NVUl9FVEhSKzB4Mik7Ci19Ci0KLS8qCi0gKiBUaGUgTWFjaGluZSBWZWN0b3IKLSAqLwotZXh0ZXJuIHZvaWQgaGVhcnRiZWF0X2JpZ3N1cih2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfYmlnc3VyX0lSUSh2b2lkKTsKLQotc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2JpZ3N1ciBfX2luaXRtdiA9IHsKLQkubXZfbmFtZQkJPSAiQmlnIFN1ciIsCi0JLm12X3NldHVwCQk9IGJpZ3N1cl9zZXR1cCwKLQotCS5tdl9pc2FfcG9ydDJhZGRyCT0gYmlnc3VyX2lzYV9wb3J0MmFkZHIsCi0JLm12X2lycV9kZW11eCAgICAgICAJPSBiaWdzdXJfaXJxX2RlbXV4LAotCi0JLm12X2luaXRfaXJxCQk9IGluaXRfYmlnc3VyX0lSUSwKLSNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCi0JLm12X2hlYXJ0YmVhdAkJPSBoZWFydGJlYXRfYmlnc3VyLAotI2VuZGlmCi19OwotQUxJQVNfTVYoYmlnc3VyKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvZWMzMTA0L01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvZWMzMTA0L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzg4OTE1Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIEVDMzEwNCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCi0jCi0KLW9iai15CSA6PSBzZXR1cC5vIGlvLm8gaXJxLm8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvZWMzMTA0L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9lYzMxMDQvaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY4NjM5NC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9lYzMxMDQvaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9lYzMxMDQvaW8uYwotICogIEVDMzEwNCBjb21wYW5pb24gY2hpcCBzdXBwb3J0Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFBoaWxpcHAgUnVtcGYgPHBydW1wZkB0dXgub3JnPgotICoKLSAqLwotLyogRUMzMTA0IG5vdGU6Ci0gKiBUaGlzIGNvZGUgd2FzIHdyaXR0ZW4gd2l0aG91dCBhbnkgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgRUMzMTA0IGNoaXAuICBXaGlsZQotICogSSBob3BlIEkgZ290IG1vc3Qgb2YgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgcmlnaHQsIHRoZSByZWdpc3RlciBuYW1lcyBJIHVzZQotICogYXJlIG1vc3QgbGlrZWx5IGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20gdGhvc2UgaW4gdGhlIGNoaXAgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiBJZiB5b3UgaGF2ZSBhbnkgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgRUMzMTA0LCBwbGVhc2UgdGVsbCBtZQotICogKHBydW1wZkB0dXgub3JnKS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9lYzMxMDQvZWMzMTA0Lmg+Ci0KLS8qCi0gKiBFQzMxMDQgaGFzIGEgcmVhbCBJU0EgYnVzIHdoaWNoIHdlIHJlZGlyZWN0IGxvdyBwb3J0IGFjY2Vzc2VzIHRvICh0aGUKLSAqIGFjdHVhbCBkZXZpY2Ugb24gbWluZSBpcyBhIEVTUyAxODY4LCBhbmQgSSBkb24ndCB3YW50IHRvIGhhY2sgdGhlIGRyaXZlcgotICogbW9yZSB0aGFuIHN0cmljdGx5IG5lY2Vzc2FyeSkuICBJIGFtIG5vdCBnb2luZyB0byBkdXBsaWNhdGUgdGhlCi0gKiBoYXJkIGNvZGluZyBvZiBQQyBhZGRyZXNzZXMgKGZvciB0aGUgMTY1NTBzIGFzbykgaGVyZSB0aG91Z2g7ICBpdCdzIGp1c3QKLSAqIHRvbyB1Z2x5LgotICovCi0KLSNkZWZpbmUgbG93X3BvcnQocG9ydCkgKChwb3J0KSA8IDB4MTAwMDApCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwb3J0MmFkZHIodW5zaWduZWQgbG9uZyBwb3J0KQotewotCXN3aXRjaChwb3J0ID4+IDE2KSB7Ci0JY2FzZSAwOgotCQlyZXR1cm4gRUMzMTA0X0lTQV9CQVNFICsgcG9ydCAqIDI7Ci0KLQkJLyogWFhYIGhhY2suIGl0J3MgdW5jbGVhciB3aGF0IHRvIGRvIGFib3V0IHRoZSBzZXJpYWwgcG9ydHMgKi8KLQljYXNlIDE6Ci0JCXJldHVybiBFQzMxMDRfQkFTRSArIChwb3J0JjB4ZmZmZikgKiA0OwotCi0JZGVmYXVsdDoKLQkJLyogWFhYIFBDTUNJQSAqLwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXVuc2lnbmVkIGNoYXIgZWMzMTA0X2luYih1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JdTggcmV0OwotCi0JcmV0ID0gKih2b2xhdGlsZSB1OCAqKXBvcnQyYWRkcihwb3J0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IGVjMzEwNF9pbncodW5zaWduZWQgbG9uZyBwb3J0KQotewotCUJVRygpOwotfQotCi11bnNpZ25lZCBsb25nIGVjMzEwNF9pbmwodW5zaWduZWQgbG9uZyBwb3J0KQotewotCUJVRygpOwotfQotCi12b2lkIGVjMzEwNF9vdXRiKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCSoodm9sYXRpbGUgdTggKilwb3J0MmFkZHIocG9ydCkgPSBkYXRhOwotfQotCi12b2lkIGVjMzEwNF9vdXR3KHVuc2lnbmVkIHNob3J0IGRhdGEsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlCVUcoKTsKLX0KLQotdm9pZCBlYzMxMDRfb3V0bCh1bnNpZ25lZCBsb25nIGRhdGEsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlCVUcoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhNGZmMS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9lYzMxMDQvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9pcnEuYwotICogRUMzMTA0IGNvbXBhbmlvbiBjaGlwIHN1cHBvcnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGhpbGlwcCBSdW1wZiA8cHJ1bXBmQHR1eC5vcmc+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2VjMzEwNC9lYzMxMDQuaD4KLQotLyogVGhpcyBpcyBmb3IgZGVidWdnaW5nIG1vc3RseTsgIGhlcmUncyB0aGUgdGFibGUgdGhhdCBJIGludGVuZCB0byBrZWVwCi0gKiBpbiBoZXJlOgotICoKLSAqICAgaW5kZXggICAgICBmdW5jdGlvbiAgICAgICAgYmFzZSBhZGRyICAgICAgIHBvd2VyICAgICAgICAgICBpbnRlcnJ1cHQgYml0Ci0gKiAgICAgICAwICAgICAgcG93ZXIgICAgICAgICAgIGIwZWMwMDAwICAgICAgICAtLS0gICAgICAgICAgICAgMDAwMDAwMDEgKHVudXNlZCkKLSAqICAgICAgIDEgICAgICBpcnFzICAgICAgICAgICAgYjBlYzEwMDAgICAgICAgIC0tLSAgICAgICAgICAgICAwMDAwMDAwMiAodW51c2VkKQotICogICAgICAgMiAgICAgID8/ICAgICAgICAgICAgICBiMGVjMjAwMCAgICAgICAgYjBlYzAwMDggICAgICAgIDAwMDAwMDA0Ci0gKiAgICAgICAzICAgICAgUFMyICgxKSAgICAgICAgIGIwZWMzMDAwICAgICAgICBiMGVjMDAwYyAgICAgICAgMDAwMDAwMDgKLSAqICAgICAgIDQgICAgICBQUzIgKDIpICAgICAgICAgYjBlYzQwMDAgICAgICAgIGIwZWMwMDEwICAgICAgICAwMDAwMDAxMAotICogICAgICAgNSAgICAgID8/ICAgICAgICAgICAgICBiMGVjNTAwMCAgICAgICAgYjBlYzAwMTQgICAgICAgIDAwMDAwMDIwCi0gKiAgICAgICA2ICAgICAgSTJDICAgICAgICAgICAgIGIwZWM2MDAwICAgICAgICBiMGVjMDAxOCAgICAgICAgMDAwMDAwNDAKLSAqICAgICAgIDcgICAgICBzZXJpYWwgKDEpICAgICAgYjBlYzcwMDAgICAgICAgIGIwZWMwMDFjICAgICAgICAwMDAwMDA4MAotICogICAgICAgOCAgICAgIHNlcmlhbCAoMikgICAgICBiMGVjODAwMCAgICAgICAgYjBlYzAwMjAgICAgICAgIDAwMDAwMTAwCi0gKiAgICAgICA5ICAgICAgc2VyaWFsICgzKSAgICAgIGIwZWM5MDAwICAgICAgICBiMGVjMDAyNCAgICAgICAgMDAwMDAyMDAKLSAqICAgICAgMTAgICAgICBzZXJpYWwgKDQpICAgICAgYjBlY2EwMDAgICAgICAgIGIwZWMwMDI4ICAgICAgICAwMDAwMDQwMAotICogICAgICAxMiAgICAgIEdQSU8gKDEpICAgICAgICBiMGVjYzAwMCAgICAgICAgYjBlYzAwMzAKLSAqICAgICAgMTMgICAgICBHUElPICgyKSAgICAgICAgYjBlY2MwMDAgICAgICAgIGIwZWMwMDMwCi0gKiAgICAgIDE2ICAgICAgcGNtY2lhICgxKSAgICAgIGIwZWQwMDAwICAgICAgICBiMGVjMDA0MCAgICAgICAgMDAwMTAwMDAKLSAqICAgICAgMTcgICAgICBwY21jaWEgKDIpICAgICAgYjBlZDEwMDAgICAgICAgIGIwZWMwMDQ0ICAgICAgICAwMDAyMDAwMAotICovCi0KLS8qIEkgdXNlZCB0aGUgcmVnaXN0ZXIgbmFtZXMgZnJvbSBhbm90aGVyIGludGVycnVwdCBjb250cm9sbGVyIEkgd29ya2VkIHdpdGgsCi0gKiBzaW5jZSBpdCBzZWVtcyB0byBiZSBpZGVudGljYWwgdG8gdGhlIGVjMzEwNCBleGNlcHQgdGhhdCBhbGwgYml0cyBhcmUKLSAqIGludmVydGVkOgotICoKLSAqIElSUjogSW50ZXJydXB0IFJlcXVlc3QgUmVnaXN0ZXIgKHBlbmRpbmcgYW5kIGVuYWJsZWQgaW50ZXJydXB0cykKLSAqIElNUjogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKHdoaWNoIGludGVycnVwdHMgYXJlIGVuYWJsZWQpCi0gKiBJUFI6IEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyIChwZW5kaW5nIGludGVycnVwdHMsIGV2ZW4gZGlzYWJsZWQgb25lcykKLSAqCi0gKiAwIGJpdHMgbWVhbiBwZW5kaW5nIG9yIGVuYWJsZWQsIDEgYml0cyBtZWFuIG5vdCBwZW5kaW5nIG9yIGRpc2FibGVkLiAgYWxsCi0gKiBJUlFzIHNlZW0gdG8gYmUgbGV2ZWwtdHJpZ2dlcmVkLgotICovCi0KLSNkZWZpbmUgRUMzMTA0X0lSUiAoRUMzMTA0X0JBU0UgKyAweDEwMDApCi0jZGVmaW5lIEVDMzEwNF9JTVIgKEVDMzEwNF9CQVNFICsgMHgxMDA0KQotI2RlZmluZSBFQzMxMDRfSVBSIChFQzMxMDRfQkFTRSArIDB4MTAwOCkKLQotI2RlZmluZSBjdHJsX3JlYWRsKGFkZHIpICgqKHZvbGF0aWxlIHUzMiAqKShhZGRyKSkKLSNkZWZpbmUgY3RybF93cml0ZWwoZGF0YSxhZGRyKSAoKih2b2xhdGlsZSB1MzIgKikoYWRkcikgPSAoZGF0YSkpCi0jZGVmaW5lIGN0cmxfcmVhZGIoYWRkcikgKCoodm9sYXRpbGUgdTggKikoYWRkcikpCi0KLXN0YXRpYyBjaGFyICplYzMxMDRfbmFtZSh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICAgICAgc3dpdGNoKGluZGV4KSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gInBvd2VyIG1hbmFnZW1lbnQiOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJpbnRlcnJ1cHRzIjsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHJldHVybiAiUFMyICgxKSI7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlBTMiAoMikiOwotICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJJMkMgKDEpIjsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgIHJldHVybiAiSTJDICgyKSI7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgICAgICByZXR1cm4gInNlcmlhbCAoMSkiOwotICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJzZXJpYWwgKDIpIjsKLSAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgIHJldHVybiAic2VyaWFsICgzKSI7Ci0gICAgICAgIGNhc2UgMTA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJzZXJpYWwgKDQpIjsKLSAgICAgICAgY2FzZSAxNjoKLSAgICAgICAgICAgICAgICByZXR1cm4gInBjbWNpYSAoMSkiOwotICAgICAgICBjYXNlIDE3OgotICAgICAgICAgICAgICAgIHJldHVybiAicGNtY2lhICgyKSI7Ci0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBidWZbMzJdOwotCi0gICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJ1bmtub3duICglZCkiLCBpbmRleCk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotfQotCi1pbnQgZ2V0X3BlbmRpbmdfaW50ZXJydXB0cyhjaGFyICpidWYpCi17Ci0gICAgICAgIHUzMiBpcHI7Ci0gICAgICAgIHUzMiBiaXQ7Ci0gICAgICAgIGNoYXIgKnAgPSBidWY7Ci0KLSAgICAgICAgcCArPSBzcHJpbnRmKHAsICJwZW5kaW5nOiAoIik7Ci0KLSAgICAgICAgaXByID0gY3RybF9pbmwoRUMzMTA0X0lQUik7Ci0KLSAgICAgICAgZm9yIChiaXQgPSAxOyBiaXQgPCAzMjsgYml0KyspCi0gICAgICAgICAgICAgICAgaWYgKCEoaXByICYgKDE8PGJpdCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBzcHJpbnRmKHAsICIlcyAiLCBlYzMxMDRfbmFtZShiaXQpKTsKLQotICAgICAgICBwICs9IHNwcmludGYocCwgIilcbiIpOwotCi0gICAgICAgIHJldHVybiBwIC0gYnVmOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBlYzMxMDRfaXJxMm1hc2sodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgcmV0dXJuICgxIDw8IChpcnEgLSBFQzMxMDRfSVJRQkFTRSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFza19lYzMxMDRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0gICAgICAgIHUzMiBtYXNrOwotCi0gICAgICAgIG1hc2sgPSBjdHJsX3JlYWRsKEVDMzEwNF9JTVIpOwotCi0gICAgICAgIG1hc2sgfD0gZWMzMTA0X2lycTJtYXNrKGlycSk7Ci0KLSAgICAgICAgY3RybF93cml0ZWwobWFzaywgRUMzMTA0X0lNUik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bm1hc2tfZWMzMTA0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotICAgICAgICB1MzIgbWFzazsKLQotICAgICAgICBtYXNrID0gY3RybF9yZWFkbChFQzMxMDRfSU1SKTsKLQotICAgICAgICBtYXNrICY9IH5lYzMxMDRfaXJxMm1hc2soaXJxKTsKLQotICAgICAgICBjdHJsX3dyaXRlbChtYXNrLCBFQzMxMDRfSU1SKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzYWJsZV9lYzMxMDRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0gICAgICAgIG1hc2tfZWMzMTA0X2lycShpcnEpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfZWMzMTA0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotICAgICAgICB1bm1hc2tfZWMzMTA0X2lycShpcnEpOwotfQotCi1zdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfZWMzMTA0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotICAgICAgICBtYXNrX2VjMzEwNF9pcnEoaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgZW5kX2VjMzEwNF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEfElSUV9JTlBST0dSRVNTKSkpCi0gICAgICAgICAgICAgICAgdW5tYXNrX2VjMzEwNF9pcnEoaXJxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2VjMzEwNF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgdW5tYXNrX2VjMzEwNF9pcnEoaXJxKTsKLQotICAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2h1dGRvd25fZWMzMTA0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotICAgICAgICBtYXNrX2VjMzEwNF9pcnEoaXJxKTsKLQotfQotCi1zdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGVjMzEwNF9pbnQgPSB7Ci0gICAgICAgIC50eXBlbmFtZSAgICAgICA9ICJFQzMxMDQiLAotICAgICAgICAuZW5hYmxlICAgICAgICAgPSBlbmFibGVfZWMzMTA0X2lycSwKLSAgICAgICAgLmRpc2FibGUgICAgICAgID0gZGlzYWJsZV9lYzMxMDRfaXJxLAotICAgICAgICAuYWNrICAgICAgICAgICAgPSBtYXNrX2FuZF9hY2tfZWMzMTA0X2lycSwKLSAgICAgICAgLmVuZCAgICAgICAgICAgID0gZW5kX2VjMzEwNF9pcnEsCi0gICAgICAgIC5zdGFydHVwICAgICAgICA9IHN0YXJ0dXBfZWMzMTA0X2lycSwKLSAgICAgICAgLnNodXRkb3duICAgICAgID0gc2h1dGRvd25fZWMzMTA0X2lycSwKLX07Ci0KLS8qIFl1Y2suICB0aGUgX2RlbXV4IEFQSSBpcyB1Z2x5ICovCi1pbnQgZWMzMTA0X2lycV9kZW11eChpbnQgaXJxKQotewotICAgICAgICBpZiAoaXJxID09IEVDMzEwNF9JUlEpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFzazsKLQotICAgICAgICAgICAgICAgIG1hc2sgPSBjdHJsX3JlYWRsKEVDMzEwNF9JUlIpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1hc2sgPT0gMHhmZmZmZmZmZikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFQzMxMDRfSVJROwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFQzMxMDRfSVJRQkFTRSArIGZmeihtYXNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpcnE7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9lYzMxMDQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDJiYzk3Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9zZXR1cC5jCi0gKiAgRUMzMTA0IGNvbXBhbmlvbiBjaGlwIHN1cHBvcnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGhpbGlwcCBSdW1wZiA8cHJ1bXBmQHR1eC5vcmc+Ci0gKgotICovCi0vKiBFQzMxMDQgbm90ZToKLSAqIFRoaXMgY29kZSB3YXMgd3JpdHRlbiB3aXRob3V0IGFueSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBFQzMxMDQgY2hpcC4gIFdoaWxlCi0gKiBJIGhvcGUgSSBnb3QgbW9zdCBvZiB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSByaWdodCwgdGhlIHJlZ2lzdGVyIG5hbWVzIEkgdXNlCi0gKiBhcmUgbW9zdCBsaWtlbHkgY29tcGxldGVseSBkaWZmZXJlbnQgZnJvbSB0aG9zZSBpbiB0aGUgY2hpcCBkb2N1bWVudGF0aW9uLgotICoKLSAqIElmIHlvdSBoYXZlIGFueSBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBFQzMxMDQsIHBsZWFzZSB0ZWxsIG1lCi0gKiAocHJ1bXBmQHR1eC5vcmcpLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvZWMzMTA0Lmg+Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBlYzMxMDRfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKLXsKLQljaGFyIHN0cls4XTsKLQlpbnQgaTsKLQotCWZvciAoaT0wOyBpPDg7IGkrKykKLQkJc3RyW2ldID0gY3RybF9yZWFkYihFQzMxMDRfQkFTRSArIGkpOwotCi0JZm9yIChpID0gRUMzMTA0X0lSUUJBU0U7IGkgPCBFQzMxMDRfSVJRQkFTRSArIDMyOyBpKyspCi0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmZWMzMTA0X2ludDsKLQotCXByaW50aygiaW5pdGlhbGl6aW5nIEVDMzEwNCBcIiUuOHNcIiBhdCAlMDh4LCBJUlEgJWQsIElSUSBiYXNlICVkXG4iLAotCSAgICAgICBzdHIsIEVDMzEwNF9CQVNFLCBFQzMxMDRfSVJRLCBFQzMxMDRfSVJRQkFTRSk7Ci0KLQkvKiBtYXNrIGFsbCBpbnRlcnJ1cHRzLiAgdGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRvbmUgYnkgdGhlIGJvb3QKLQkgKiBsb2FkZXIgZm9yIHVzIGJ1dCB3ZSB3YW50IHRvIGJlIHN1cmUgLi4uICovCi0JY3RybF93cml0ZWwoMHhmZmZmZmZmZiwgRUMzMTA0X0lNUik7Ci19Ci0KLS8qCi0gKiBUaGUgTWFjaGluZSBWZWN0b3IKLSAqLwotc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2VjMzEwNCBfX2luaXRtdiA9IHsKLQkubXZfbmFtZQk9ICJFQzMxMDQiLAotCS5tdl9zZXR1cAk9IGVjMzEwNF9zZXR1cCwKLQkubXZfbnJfaXJxcwk9IDk2LAotCi0JLm12X2luYgkJPSBlYzMxMDRfaW5iLAotCS5tdl9pbncJCT0gZWMzMTA0X2ludywKLQkubXZfaW5sCQk9IGVjMzEwNF9pbmwsCi0JLm12X291dGIJPSBlYzMxMDRfb3V0YiwKLQkubXZfb3V0dwk9IGVjMzEwNF9vdXR3LAotCS5tdl9vdXRsCT0gZWMzMTA0X291dGwsCi0KLQkubXZfaXJxX2RlbXV4CT0gZWMzMTA0X2lycV9kZW11eCwKLX07Ci1BTElBU19NVihlYzMxMDQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvbXBjMTIxMS9NYWtlZmlsZQppbmRleCAxNjQ0ZWJlLi44Y2QzMWI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgSW50ZXJmYWNlIChDVFAvUENJL01QQy1TSDAyKSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCiAjCiAKLW9iai15CSA6PSBzZXR1cC5vIHJ0Yy5vIGxlZC5vCitvYmoteQkgOj0gc2V0dXAubyBydGMubwogCiBvYmotJChDT05GSUdfUENJKSArPSBwY2kubwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL2xlZC5jIGIvYXJjaC9zaC9ib2FyZHMvbXBjMTIxMS9sZWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmMTU5MS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL2xlZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvbGVkLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgIFNhaXRvLksgJiBKZWFubmUKLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgSW50ZXJmYWNlIE1QQy0xMjExIHNwZWNpZmljIExFRCBjb2RlLgotICovCi0KLQotc3RhdGljIHZvaWQgbWFjaF9sZWQoaW50IHBvc2l0aW9uLCBpbnQgdmFsdWUpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciogcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikweGEyMDAwMDAwOwotCi0JaWYgKHZhbHVlKSB7Ci0JCSpwIHw9IDE7Ci0JfSBlbHNlIHsKLQkJKnAgJj0gfjE7Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQotLyogQ3ljbGUgdGhlIExFRCdzIGluIHRoZSBjbGFzaWMgS25pZ2h0cmlkZXIvU3VuIHBhdHRlcm4gKi8KLXZvaWQgaGVhcnRiZWF0X21wYzEyMTEodm9pZCkKLXsKLQlzdGF0aWMgdW5zaWduZWQgaW50IGNudCA9IDAsIHBlcmlvZCA9IDA7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciogcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikweGEyMDAwMDAwOwotCXN0YXRpYyB1bnNpZ25lZCBiaXQgPSAwLCB1cCA9IDE7Ci0KLQljbnQgKz0gMTsKLQlpZiAoY250IDwgcGVyaW9kKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQljbnQgPSAwOwotCi0JLyogR28gdGhyb3VnaCB0aGUgcG9pbnRzIChyb3VnaGx5ISk6Ci0JICogZigwKT0xMCwgZigxKT0xNiwgZigyKT0yMCwgZig1KT0zNSxmKGluZiktPjExMAotCSAqLwotCXBlcmlvZCA9IDExMCAtICggKDMwMDw8RlNISUZUKS8KLQkJCSAoKGF2ZW5ydW5bMF0vNSkgKyAoMzw8RlNISUZUKSkgKTsKLQotCWlmICh1cCkgewotCQlpZiAoYml0ID09IDcpIHsKLQkJCWJpdC0tOwotCQkJdXA9MDsKLQkJfSBlbHNlIHsKLQkJCWJpdCArKzsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChiaXQgPT0gMCkgewotCQkJYml0Kys7Ci0JCQl1cD0xOwotCQl9IGVsc2UgewotCQkJYml0LS07Ci0JCX0KLQl9Ci0JKnAgPSAxPDxiaXQ7Ci0KLX0KLSNlbmRpZiAvKiBDT05GSUdfSEVBUlRCRUFUICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL3NldHVwLmMKaW5kZXggN2MzZDFkMy4uMWEwNjA0YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbXBjMTIxMS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvc2V0dXAuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vbXBjMTIxMS9tcGMxMjExLmg+CkBAIC0yODEsNiArMjgyLDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhhMjAwMDAwMCwKKwkJLmVuZAk9IDB4YTIwMDAwMDAgKyA4IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1wYzEyMTFfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmhlYXJ0YmVhdF9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtcGMxMjExX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMobXBjMTIxMV9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKG1wYzEyMTFfZGV2aWNlcykpOworfQorX19pbml0Y2FsbChtcGMxMjExX2RldmljZXNfc2V0dXApOworCiAvKiBhcmNoL3NoL2JvYXJkcy9tcGMxMjExL3J0Yy5jICovCiB2b2lkIG1wYzEyMTFfdGltZV9pbml0KHZvaWQpOwogCkBAIC0zMTcsOSArMzQ0LDUgQEAKIAkubXZfbnJfaXJxcwkJPSA0OCwKIAkubXZfaXJxX2RlbXV4CQk9IG1wYzEyMTFfaXJxX2RlbXV4LAogCS5tdl9pbml0X2lycQkJPSBpbml0X21wYzEyMTFfSVJRLAotCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotCS5tdl9oZWFydGJlYXQJCT0gaGVhcnRiZWF0X21wYzEyMTEsCi0jZW5kaWYKIH07CiBBTElBU19NVihtcGMxMjExKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL01ha2VmaWxlCmluZGV4IDU3NGIwMzEuLjNjOTMwMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvTWFrZWZpbGUKQEAgLTQsNSArNCw0IEBACiAKIG9iai15CSA6PSBzZXR1cC5vIGlvLm8gaXJxLm8KIAotb2JqLSQoQ09ORklHX0hFQVJUQkVBVCkJCSs9IGxlZC5vCiBvYmotJChDT05GSUdfUFVTSF9TV0lUQ0gpCSs9IHBzdy5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9pby5jCmluZGV4IDMxMWNjY2MuLmY3NGQyZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9pby5jCkBAIC0xMSwyMiArMTEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBvcnQyYWRyKHVuc2lnbmVkIGludCBwb3J0KQotewotCWlmICgoMHgxZjAgPD0gcG9ydCAmJiBwb3J0IDwgMHgxZjgpIHx8IHBvcnQgPT0gMHgzZjYpCi0JCWlmIChwb3J0ID09IDB4M2Y2KQotCQkJcmV0dXJuIChQQV9BUkVBNV9JTyArIDB4ODBjKTsKLQkJZWxzZQotCQkJcmV0dXJuIChQQV9BUkVBNV9JTyArIDB4MTAwMCArICgocG9ydC0weDFmMCkgPDwgMSkpOwotCWVsc2UKLQkJbWF5YmViYWRpbygodW5zaWduZWQgbG9uZylwb3J0KTsKLQotCXJldHVybiBwb3J0OwotfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG9ydDg4Nzk2bCh1bnNpZ25lZCBpbnQgcG9ydCwgaW50IGZsYWcpCiB7CkBAIC00MCwxOCArMjcsNiBAQAogCXJldHVybiBhZGRyOwogfQogCi0vKiBUaGUgNzc4MCBSNzc4MFJQLTEgc2VlbXMgdG8gaGF2ZSBldmVyeXRoaW5nIGhvb2tlZCAqLwotLyogdXAgcHJldHR5IG5vcm1hbGx5IChub3RoaW5nIG9uIGhpZ2gtYnl0ZXMgb25seS4uLikgc28gdGhpcyAqLwotLyogc2hvdWxkbid0IGJlIG5lZWRlZCAqLwotc3RhdGljIGlubGluZSBpbnQgc2hpZnRlZF9wb3J0KHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQkvKiBGb3IgSURFIHJlZ2lzdGVycywgdmFsdWUgaXMgbm90IHNoaWZ0ZWQgKi8KLQlpZiAoKDB4MWYwIDw9IHBvcnQgJiYgcG9ydCA8IDB4MWY4KSB8fCBwb3J0ID09IDB4M2Y2KQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiAxOwotfQotCiAjaWYgZGVmaW5lZChDT05GSUdfTkUyMDAwKSB8fCBkZWZpbmVkKENPTkZJR19ORTIwMDBfTU9EVUxFKQogI2RlZmluZSBDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpIFwKICAgKChwb3J0ID49IEFYODg3OTZMX0lPX0JBU0UpICYmIChwb3J0IDwgKEFYODg3OTZMX0lPX0JBU0UrMHgyMCkpKQpAQCAtNzAsMTIgKzQ1LDEwIEBACiB7CiAJaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCiAJCXJldHVybiBjdHJsX2ludyhwb3J0ODg3OTZsKHBvcnQsIDApKSAmIDB4ZmY7Ci0JZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCXJldHVybiBjdHJsX2luYihwb3J0KTsKLQllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQogCQlyZXR1cm4gY3RybF9pbmIocGNpX2lvYWRkcihwb3J0KSk7CiAKLQlyZXR1cm4gY3RybF9pbncocG9ydDJhZHIocG9ydCkpICYgMHhmZjsKKwlyZXR1cm4gY3RybF9pbncocG9ydCkgJiAweGZmOwogfQogCiB1OCByNzc4MHJwX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKQEAgLTg0LDEyICs1NywxMCBAQAogCiAJaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCiAJCXYgPSBjdHJsX2ludyhwb3J0ODg3OTZsKHBvcnQsIDApKSAmIDB4ZmY7Ci0JZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCXYgPSBjdHJsX2luYihwb3J0KTsKLQllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQogCQl2ID0gY3RybF9pbmIocGNpX2lvYWRkcihwb3J0KSk7CiAJZWxzZQotCQl2ID0gY3RybF9pbncocG9ydDJhZHIocG9ydCkpICYgMHhmZjsKKwkJdiA9IGN0cmxfaW53KHBvcnQpICYgMHhmZjsKIAogCWN0cmxfZGVsYXkoKTsKIApAQCAtOTgsODAgKzY5LDU2IEBACiAKIHUxNiByNzc4MHJwX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCi0JCW1heWJlYmFkaW8ocG9ydCk7Ci0JZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCXJldHVybiBjdHJsX2ludyhwb3J0KTsKLQllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwlpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKIAkJcmV0dXJuIGN0cmxfaW53KHBjaV9pb2FkZHIocG9ydCkpOwotCWVsc2UKLQkJbWF5YmViYWRpbyhwb3J0KTsKIAotCXJldHVybiAwOworCXJldHVybiBjdHJsX2ludyhwb3J0KTsKIH0KIAogdTMyIHI3NzgwcnBfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJbWF5YmViYWRpbyhwb3J0KTsKLQllbHNlIGlmIChQWFNFRyhwb3J0KSkKLQkJcmV0dXJuIGN0cmxfaW5sKHBvcnQpOwotCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCWlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQogCQlyZXR1cm4gY3RybF9pbmwocGNpX2lvYWRkcihwb3J0KSk7Ci0JZWxzZQotCQltYXliZWJhZGlvKHBvcnQpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGN0cmxfaW5sKHBvcnQpOwogfQogCiB2b2lkIHI3NzgwcnBfb3V0Yih1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQogCQljdHJsX291dHcodmFsdWUsIHBvcnQ4ODc5NmwocG9ydCwgMCkpOwotCWVsc2UgaWYgKFBYU0VHKHBvcnQpKQotCQljdHJsX291dGIodmFsdWUsIHBvcnQpOwotCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCiAJCWN0cmxfb3V0Yih2YWx1ZSwgcGNpX2lvYWRkcihwb3J0KSk7CiAJZWxzZQotCQljdHJsX291dHcodmFsdWUsIHBvcnQyYWRyKHBvcnQpKTsKKwkJY3RybF9vdXRiKHZhbHVlLCBwb3J0KTsKIH0KIAogdm9pZCByNzc4MHJwX291dGJfcCh1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQogCQljdHJsX291dHcodmFsdWUsIHBvcnQ4ODc5NmwocG9ydCwgMCkpOwotCWVsc2UgaWYgKFBYU0VHKHBvcnQpKQotCQljdHJsX291dGIodmFsdWUsIHBvcnQpOwotCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCiAJCWN0cmxfb3V0Yih2YWx1ZSwgcGNpX2lvYWRkcihwb3J0KSk7CiAJZWxzZQotCQljdHJsX291dHcodmFsdWUsIHBvcnQyYWRyKHBvcnQpKTsKKwkJY3RybF9vdXRiKHZhbHVlLCBwb3J0KTsKIAogCWN0cmxfZGVsYXkoKTsKIH0KIAogdm9pZCByNzc4MHJwX291dHcodTE2IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCi0JCW1heWJlYmFkaW8ocG9ydCk7Ci0JZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCWN0cmxfb3V0dyh2YWx1ZSwgcG9ydCk7Ci0JZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCiAJCWN0cmxfb3V0dyh2YWx1ZSwgcGNpX2lvYWRkcihwb3J0KSk7CiAJZWxzZQotCQltYXliZWJhZGlvKHBvcnQpOworCQljdHJsX291dHcodmFsdWUsIHBvcnQpOwogfQogCiB2b2lkIHI3NzgwcnBfb3V0bCh1MzIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJbWF5YmViYWRpbyhwb3J0KTsKLQllbHNlIGlmIChQWFNFRyhwb3J0KSkKLQkJY3RybF9vdXRsKHZhbHVlLCBwb3J0KTsKLQllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwlpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKIAkJY3RybF9vdXRsKHZhbHVlLCBwY2lfaW9hZGRyKHBvcnQpKTsKIAllbHNlCi0JCW1heWJlYmFkaW8ocG9ydCk7CisJCWN0cmxfb3V0bCh2YWx1ZSwgcG9ydCk7CiB9CiAKIHZvaWQgcjc3ODBycF9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQpAQCAtMTgzLDE2ICsxMzAsMTMgQEAKIAkJcCA9ICh2b2xhdGlsZSB1MTYgKilwb3J0ODg3OTZsKHBvcnQsIDApOwogCQl3aGlsZSAoY291bnQtLSkKIAkJCSpidWYrKyA9ICpwICYgMHhmZjsKLQl9IGVsc2UgaWYgKFBYU0VHKHBvcnQpKSB7Ci0JCXdoaWxlIChjb3VudC0tKQotCQkJKmJ1ZisrID0gKih2b2xhdGlsZSB1OCAqKXBvcnQ7Ci0JfSBlbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgeworCX0gZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkgewogCQl2b2xhdGlsZSB1OCAqYnAgPSAodm9sYXRpbGUgdTggKilwY2lfaW9hZGRyKHBvcnQpOwogCiAJCXdoaWxlIChjb3VudC0tKQogCQkJKmJ1ZisrID0gKmJwOwogCX0gZWxzZSB7Ci0JCXAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDJhZHIocG9ydCk7CisJCXAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDsKIAkJd2hpbGUgKGNvdW50LS0pCiAJCQkqYnVmKysgPSAqcCAmIDB4ZmY7CiAJfQpAQCAtMjA1LDMwICsxNDksMjYgQEAKIAogCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQogCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQ4ODc5NmwocG9ydCwgMSk7Ci0JZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCXAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDsKLQllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQogCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZQotCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQyYWRyKHBvcnQpOworCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQ7CiAKIAl3aGlsZSAoY291bnQtLSkKIAkJKmJ1ZisrID0gKnA7CisKKwlmbHVzaF9kY2FjaGVfYWxsKCk7CiB9CiAKIHZvaWQgcjc3ODBycF9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCXUzMiAqYnVmID0gZHN0OwotCi0JaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCi0JCW1heWJlYmFkaW8ocG9ydCk7Ci0JZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpIHsKKwlpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkgewogCQl2b2xhdGlsZSB1MzIgKnAgPSAodm9sYXRpbGUgdTMyICopcGNpX2lvYWRkcihwb3J0KTsKKwkJdTMyICpidWYgPSBkc3Q7CiAKIAkJd2hpbGUgKGNvdW50LS0pCiAJCQkqYnVmKysgPSAqcDsKLQl9IGVsc2UKLQkJbWF5YmViYWRpbyhwb3J0KTsKKwl9CiB9CiAKIHZvaWQgcjc3ODBycF9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKQEAgLTI0MCwxOSArMTgwLDE0IEBACiAJCXAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDg4Nzk2bChwb3J0LCAwKTsKIAkJd2hpbGUgKGNvdW50LS0pCiAJCQkqcCA9ICpidWYrKzsKLQl9IGVsc2UgaWYgKFBYU0VHKHBvcnQpKQotCQl3aGlsZSAoY291bnQtLSkKLQkJCWN0cmxfb3V0YigqYnVmKyssIHBvcnQpOwotCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7CisJfSBlbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKSB7CiAJCXZvbGF0aWxlIHU4ICpicCA9ICh2b2xhdGlsZSB1OCAqKXBjaV9pb2FkZHIocG9ydCk7CiAKIAkJd2hpbGUgKGNvdW50LS0pCiAJCQkqYnAgPSAqYnVmKys7Ci0JfSBlbHNlIHsKLQkJcCA9ICh2b2xhdGlsZSB1MTYgKilwb3J0MmFkcihwb3J0KTsKKwl9IGVsc2UKIAkJd2hpbGUgKGNvdW50LS0pCi0JCQkqcCA9ICpidWYrKzsKLQl9CisJCQljdHJsX291dGIoKmJ1ZisrLCBwb3J0KTsKIH0KIAogdm9pZCByNzc4MHJwX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KQpAQCAtMjYyLDQwICsxOTcsMzcgQEAKIAogCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQogCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQ4ODc5NmwocG9ydCwgMSk7Ci0JZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCXAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDsKLQllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQogCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZQotCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQyYWRyKHBvcnQpOworCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQ7CiAKIAl3aGlsZSAoY291bnQtLSkKIAkJKnAgPSAqYnVmKys7CisKKwlmbHVzaF9kY2FjaGVfYWxsKCk7CiB9CiAKIHZvaWQgcjc3ODBycF9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAljb25zdCB1MzIgKmJ1ZiA9IHNyYzsKKwl1MzIgKnA7CiAKLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJbWF5YmViYWRpbyhwb3J0KTsKLQllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgewotCQl2b2xhdGlsZSB1MzIgKnAgPSAodm9sYXRpbGUgdTMyICopcGNpX2lvYWRkcihwb3J0KTsKKwlpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJcCA9ICh1MzIgKilwY2lfaW9hZGRyKHBvcnQpOworCWVsc2UKKwkJcCA9ICh1MzIgKilwb3J0OwogCi0JCXdoaWxlIChjb3VudC0tKQotCQkJKnAgPSAqYnVmKys7Ci0JfSBlbHNlCi0JCW1heWJlYmFkaW8ocG9ydCk7CisJd2hpbGUgKGNvdW50LS0pCisJCWN0cmxfb3V0bCgqYnVmKyssICh1bnNpZ25lZCBsb25nKXApOwogfQogCiB2b2lkIF9faW9tZW0gKnI3NzgwcnBfaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBzaXplKQogewogCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQ4ODc5NmwocG9ydCwgc2l6ZSA+IDEpOwotCWVsc2UgaWYgKFBYU0VHKHBvcnQpKQotCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQ7Ci0JZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKIAkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilwY2lfaW9hZGRyKHBvcnQpOwogCi0JcmV0dXJuICh2b2lkIF9faW9tZW0gKilwb3J0MmFkcihwb3J0KTsKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvbGVkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMDBhMjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL2xlZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIFJlbmVzYXMgU29sdXRpb25zIEhJR0hMQU5ERVIgUjc3ODBSUC0xIHNwZWNpZmljIExFRCBjb2RlLgotICovCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC9yNzc4MHJwLmg+Ci0KLS8qIEN5Y2xlIHRoZSBMRUQncyBpbiB0aGUgY2xhc2ljIEtuaWdodHJpZ2VyL1N1biBwYXR0ZXJuICovCi12b2lkIGhlYXJ0YmVhdF9yNzc4MHJwKHZvaWQpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBjbnQgPSAwLCBwZXJpb2QgPSAwOwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUEFfT0JMRUQ7Ci0Jc3RhdGljIHVuc2lnbmVkIGJpdCA9IDAsIHVwID0gMTsKLQl1bnNpZ25lZCBiaXRfcG9zW10gPSB7MiwgMSwgMCwgMywgNiwgNSwgNCwgN307Ci0KLQljbnQgKz0gMTsKLQlpZiAoY250IDwgcGVyaW9kKQotCQlyZXR1cm47Ci0KLQljbnQgPSAwOwotCi0JLyogR28gdGhyb3VnaCB0aGUgcG9pbnRzIChyb3VnaGx5ISk6Ci0JICogZigwKT0xMCwgZigxKT0xNiwgZigyKT0yMCwgZig1KT0zNSwgZihpbnQpLT4xMTAKLQkgKi8KLQlwZXJpb2QgPSAxMTAgLSAoKDMwMCA8PCBGU0hJRlQpLygoYXZlbnJ1blswXS81KSArICgzPDxGU0hJRlQpKSk7Ci0KLQkqcCA9IDEgPDwgYml0X3Bvc1tiaXRdOwotCWlmICh1cCkKLQkJaWYgKGJpdCA9PSA3KSB7Ci0JCQliaXQtLTsKLQkJCXVwID0gMDsKLQkJfSBlbHNlCi0JCQliaXQrKzsKLQllbHNlIGlmIChiaXQgPT0gMCkKLQkJdXAgPSAxOwotCWVsc2UKLQkJYml0LS07Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jCmluZGV4IDlmODljOGQuLjBkNzRkYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jCkBAIC0yLDcgKzIsNyBAQAogICogYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL3NldHVwLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwNyBQYXVsIE11bmR0CiAgKgogICogUmVuZXNhcyBTb2x1dGlvbnMgSGlnaGxhbmRlciBSNzc4MFJQLTEgU3VwcG9ydC4KICAqCkBAIC0xMiwxMiArMTIsMTIgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1leHRlcm4gdm9pZCBoZWFydGJlYXRfcjc3ODBycCh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfcjc3ODBycF9JUlEodm9pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTY2NTk2X3VzYl9ob3N0X3Jlc291cmNlc1tdID0gewpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2ZfaWRlX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHgxZjAsCi0JCS5lbmQJPSAweDFmMCArIDgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJCS5zdGFydAk9IFBBX0FSRUE1X0lPICsgMHgxMDAwLAorCQkuZW5kCT0gUEFfQVJFQTVfSU8gKyAweDEwMDAgKyAweDA4IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IDB4MWYwICsgMHgyMDYsCi0JCS5lbmQJPSAweDFmMCArIDggKyAweDIwNiArIDgsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJCS5zdGFydAk9IFBBX0FSRUE1X0lPICsgMHg4MGMsCisJCS5lbmQJPSBQQV9BUkVBNV9JTyArIDB4ODBjICsgMHgxNiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzJdID0gewogI2lmZGVmIENPTkZJR19TSF9SNzc4ME1QCkBAIC02NSwxNiArNjUsNDQgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwYXRhX3BsYXRmb3JtX2luZm8gcGF0YV9pbmZvID0geworCS5pb3BvcnRfc2hpZnQJPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2ZfaWRlX2RldmljZSAgPSB7CiAJLm5hbWUJCT0gInBhdGFfcGxhdGZvcm0iLAogCS5pZAkJPSAtMSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2ZfaWRlX3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gY2ZfaWRlX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwYXRhX2luZm8sCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYXJ0YmVhdF9iaXRfcG9zW10gPSB7IDIsIDEsIDAsIDMsIDYsIDUsIDQsIDcgfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBQQV9PQkxFRCwKKwkJLmVuZAk9IFBBX09CTEVEICsgQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcykgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiaGVhcnRiZWF0IiwKKwkuaWQJCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBoZWFydGJlYXRfYml0X3BvcywKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnI3NzgwcnBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm02NjU5Nl91c2JfaG9zdF9kZXZpY2UsCiAJJmNmX2lkZV9kZXZpY2UsCisJJmhlYXJ0YmVhdF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCByNzc4MHJwX2RldmljZXNfc2V0dXAodm9pZCkKQEAgLTE0OCw3ICsxNzYsNyBAQAogI2lmbmRlZiBDT05GSUdfU0hfUjc3ODBNUAogCWN0cmxfb3V0dygweDAwMDEsIFBBX1NEUE9XKTsJLyogU0QgUG93ZXIgT04gKi8KICNlbmRpZgotCWN0cmxfb3V0dyhjdHJsX2ludyhQQV9JVkRSQ1RMKSB8IDB4MDEwMCwgUEFfSVZEUkNUTCk7CS8qIFNpMTMxMTIgKi8KKwljdHJsX291dHcoY3RybF9pbncoUEFfSVZEUkNUTCkgfCAweDAxLCBQQV9JVkRSQ1RMKTsJLyogU2kxMzExMiAqLwogCiAJcG1fcG93ZXJfb2ZmID0gcjc3ODBycF9wb3dlcl9vZmY7CiB9CkBAIC0xODUsOCArMjEzLDUgQEAKIAogCS5tdl9pb3BvcnRfbWFwCQk9IHI3NzgwcnBfaW9wb3J0X21hcCwKIAkubXZfaW5pdF9pcnEJCT0gaW5pdF9yNzc4MHJwX0lSUSwKLSNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCi0JLm12X2hlYXJ0YmVhdAkJPSBoZWFydGJlYXRfcjc3ODBycCwKLSNlbmRpZgogfTsKIEFMSUFTX01WKHI3NzgwcnApCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvTWFrZWZpbGUKaW5kZXggNjg2ZmM5ZS4uMGQ0Yzc1YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9NYWtlZmlsZQpAQCAtMiw1ICsyLDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBSVFM3NzUxUjJEIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwKICMKIAotb2JqLXkJIDo9IHNldHVwLm8gaW8ubyBpcnEubwotb2JqLSQoQ09ORklHX0hFQVJUQkVBVCkgKz0gbGVkLm8KK29iai15CSA6PSBzZXR1cC5vIGlycS5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjUwN2E4Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9pby5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgIElhbiBkYSBTaWx2YSwgSmVyZW15IFNpZWdlbAotICogQmFzZWQgbGFyZ2VseSBvbiBpb19zZS5jLgotICoKLSAqIEkvTyByb3V0aW5lIGZvciBSZW5lc2FzIFRlY2hub2xvZ3kgc2FsZXMgUlRTNzc1MVIyRC4KLSAqCi0gKiBJbml0aWFsIHZlcnNpb24gb25seSB0byBzdXBwb3J0IExBTiBhY2Nlc3M7IHNvbWUKLSAqIHBsYWNlaG9sZGVyIGNvZGUgZnJvbSBpb19ydHM3NzUxcjJkLmMgbGVmdCBpbiB3aXRoIHRoZQotICogZXhwZWN0YXRpb24gb2YgbGF0ZXIgU3VwZXJJTyBhbmQgUENNQ0lBIGFjY2Vzcy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLQotLyoKLSAqIFRoZSA3NzUxUiBSVFM3NzUxUjJEIHVzZXMgdGhlIGJ1aWx0LWluIFBDSSBjb250cm9sbGVyIChQQ0lDKQotICogb2YgdGhlIDc3NTFSIHByb2Nlc3NvciwgYW5kIGhhcyBhIFN1cGVySU8gYWNjZXNzaWJsZSB2aWEgdGhlIFBDSS4KLSAqIFRoZSBib2FyZCBhbHNvIGluY2x1ZGVzIGEgUENNQ0lBIGNvbnRyb2xsZXIgb24gaXRzIG1lbW9yeSBidXMsCi0gKiBsaWtlIHRoZSBvdGhlciBTb2x1dGlvbiBFbmdpbmUgYm9hcmRzLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwb3J0MmFkcih1bnNpZ25lZCBpbnQgcG9ydCkKLXsKLQlpZiAoKDB4MWYwIDw9IHBvcnQgJiYgcG9ydCA8IDB4MWY4KSB8fCBwb3J0ID09IDB4M2Y2KQotCQlpZiAocG9ydCA9PSAweDNmNikKLQkJCXJldHVybiAoUEFfQVJFQTVfSU8gKyAweDgwYyk7Ci0JCWVsc2UKLQkJCXJldHVybiAoUEFfQVJFQTVfSU8gKyAweDEwMDAgKyAoKHBvcnQtMHgxZjApIDw8IDEpKTsKLQllbHNlCi0JCW1heWJlYmFkaW8oKHVuc2lnbmVkIGxvbmcpcG9ydCk7Ci0KLQlyZXR1cm4gcG9ydDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBvcnQ4ODc5NmwodW5zaWduZWQgaW50IHBvcnQsIGludCBmbGFnKQotewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCWlmIChmbGFnKQotCQlhZGRyID0gUEFfQVg4ODc5NkwgKyAoKHBvcnQgLSBBWDg4Nzk2TF9JT19CQVNFKSA8PCAxKTsKLQllbHNlCi0JCWFkZHIgPSBQQV9BWDg4Nzk2TCArICgocG9ydCAtIEFYODg3OTZMX0lPX0JBU0UpIDw8IDEpICsgMHgxMDAwOwotCi0JcmV0dXJuIGFkZHI7Ci19Ci0KLS8qIFRoZSA3NzUxUiBSVFM3NzUxUjJEIHNlZW1zIHRvIGhhdmUgZXZlcnl0aGluZyBob29rZWQgKi8KLS8qIHVwIHByZXR0eSBub3JtYWxseSAobm90aGluZyBvbiBoaWdoLWJ5dGVzIG9ubHkuLi4pIHNvIHRoaXMgKi8KLS8qIHNob3VsZG4ndCBiZSBuZWVkZWQgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHNoaWZ0ZWRfcG9ydCh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JLyogRm9yIElERSByZWdpc3RlcnMsIHZhbHVlIGlzIG5vdCBzaGlmdGVkICovCi0JaWYgKCgweDFmMCA8PSBwb3J0ICYmIHBvcnQgPCAweDFmOCkgfHwgcG9ydCA9PSAweDNmNikKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gMTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX05FMjAwMCkgfHwgZGVmaW5lZChDT05GSUdfTkUyMDAwX01PRFVMRSkKLSNkZWZpbmUgQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSBcCi0gICgocG9ydCA+PSBBWDg4Nzk2TF9JT19CQVNFKSAmJiAocG9ydCA8IChBWDg4Nzk2TF9JT19CQVNFKzB4MjApKSkKLSNlbHNlCi0jZGVmaW5lIENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkgKDApCi0jZW5kaWYKLQotLyoKLSAqIEdlbmVyYWwgb3V0bGluZTogcmVtYXAgcmVhbGx5IGxvdyBzdHVmZiBbZXZlbnR1YWxseV0gdG8gU3VwZXJJTywKLSAqIHN0dWZmIGluIFBDSSBJTyBzcGFjZSAoYXQgb3IgYWJvdmUgd2luZG93IGF0IHBjaS5oOlBDSUJJT1NfTUlOX0lPKQotICogaXMgbWFwcGVkIHRocm91Z2ggdGhlIFBDSSBJTyB3aW5kb3cuICBTdHVmZiB3aXRoIGhpZ2ggYml0cyAoUFhTRUcpCi0gKiBzaG91bGQgYmUgd2F5IGJleW9uZCB0aGUgd2luZG93LCBhbmQgaXMgdXNlZCAgdy9vIHRyYW5zbGF0aW9uIGZvcgotICogY29tcGF0aWJpbGl0eS4KLSAqLwotdW5zaWduZWQgY2hhciBydHM3NzUxcjJkX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCi0JCXJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ4ODc5NmwocG9ydCwgMCkpICYgMHhmZjsKLQllbHNlIGlmIChQWFNFRyhwb3J0KSkKLQkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnQ7Ci0JZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwY2lfaW9hZGRyKHBvcnQpOwotCWVsc2UKLQkJcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDJhZHIocG9ydCkgJiAweGZmKTsKLX0KLQotdW5zaWduZWQgY2hhciBydHM3NzUxcjJkX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQl1bnNpZ25lZCBjaGFyIHY7Ci0KLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJdiA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDg4Nzk2bChwb3J0LCAwKSkgJiAweGZmOwotICAgICAgICBlbHNlIGlmIChQWFNFRyhwb3J0KSkKLQkJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnQ7Ci0JZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCXYgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwY2lfaW9hZGRyKHBvcnQpOwotCWVsc2UKLQkJdiA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDJhZHIocG9ydCkgJiAweGZmKTsKLQotCWN0cmxfZGVsYXkoKTsKLQotCXJldHVybiB2OwotfQotCi11bnNpZ25lZCBzaG9ydCBydHM3NzUxcjJkX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCi0JCW1heWJlYmFkaW8ocG9ydCk7Ci0gICAgICAgIGVsc2UgaWYgKFBYU0VHKHBvcnQpKQotCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ7Ci0JZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcGNpX2lvYWRkcihwb3J0KTsKLQllbHNlCi0JCW1heWJlYmFkaW8ocG9ydCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IHJ0czc3NTFyMmRfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJbWF5YmViYWRpbyhwb3J0KTsKLSAgICAgICAgZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilwb3J0OwotCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQotCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcGNpX2lvYWRkcihwb3J0KTsKLQllbHNlCi0JCW1heWJlYmFkaW8ocG9ydCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBydHM3NzUxcjJkX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQotCQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ4ODc5NmwocG9ydCwgMCkpID0gdmFsdWU7Ci0gICAgICAgIGVsc2UgaWYgKFBYU0VHKHBvcnQpKQotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0ID0gdmFsdWU7Ci0JZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBjaV9pb2FkZHIocG9ydCkgPSB2YWx1ZTsKLQllbHNlCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0MmFkcihwb3J0KSA9IHZhbHVlOwotfQotCi12b2lkIHJ0czc3NTFyMmRfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0ODg3OTZsKHBvcnQsIDApKSA9IHZhbHVlOwotICAgICAgICBlbHNlIGlmIChQWFNFRyhwb3J0KSkKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcG9ydCA9IHZhbHVlOwotCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwY2lfaW9hZGRyKHBvcnQpID0gdmFsdWU7Ci0JZWxzZQotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDJhZHIocG9ydCkgPSB2YWx1ZTsKLQotCWN0cmxfZGVsYXkoKTsKLX0KLQotdm9pZCBydHM3NzUxcjJkX291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJbWF5YmViYWRpbyhwb3J0KTsKLSAgICAgICAgZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0ID0gdmFsdWU7Ci0JZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwY2lfaW9hZGRyKHBvcnQpID0gdmFsdWU7Ci0JZWxzZQotCQltYXliZWJhZGlvKHBvcnQpOwotfQotCi12b2lkIHJ0czc3NTFyMmRfb3V0bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJbWF5YmViYWRpbyhwb3J0KTsKLSAgICAgICAgZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXBvcnQgPSB2YWx1ZTsKLQllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcGNpX2lvYWRkcihwb3J0KSA9IHZhbHVlOwotCWVsc2UKLQkJbWF5YmViYWRpbyhwb3J0KTsKLX0KLQotdm9pZCBydHM3NzUxcjJkX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotCXVuc2lnbmVkIGxvbmcgYSA9ICh1bnNpZ25lZCBsb25nKWFkZHI7Ci0Jdm9sYXRpbGUgX191OCAqYnA7Ci0Jdm9sYXRpbGUgX191MTYgKnA7Ci0KLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkgewotCQlwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDg4Nzk2bChwb3J0LCAwKTsKLQkJd2hpbGUgKGNvdW50LS0pCi0JCQljdHJsX291dGIoKnAgJiAweGZmLCBhKyspOwotCX0gZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCXdoaWxlIChjb3VudC0tKQotCQkJY3RybF9vdXRiKGN0cmxfaW5iKHBvcnQpLCBhKyspOwotCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7Ci0JCWJwID0gKF9fdTggKilwY2lfaW9hZGRyKHBvcnQpOwotCQl3aGlsZSAoY291bnQtLSkKLQkJCWN0cmxfb3V0YigqYnAsIGErKyk7Ci0JfSBlbHNlIHsKLQkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQyYWRyKHBvcnQpOwotCQl3aGlsZSAoY291bnQtLSkKLQkJCWN0cmxfb3V0YigqcCAmIDB4ZmYsIGErKyk7Ci0JfQotfQotCi12b2lkIHJ0czc3NTFyMmRfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyBhID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKLQl2b2xhdGlsZSBfX3UxNiAqcDsKLQotCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQotCQlwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDg4Nzk2bChwb3J0LCAxKTsKLQllbHNlIGlmIChQWFNFRyhwb3J0KSkKLQkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ7Ci0JZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwY2lfaW9hZGRyKHBvcnQpOwotCWVsc2UKLQkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQyYWRyKHBvcnQpOwotCXdoaWxlIChjb3VudC0tKQotCQljdHJsX291dHcoKnAsIGErKyk7Ci19Ci0KLXZvaWQgcnRzNzc1MXIyZF9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJbWF5YmViYWRpbyhwb3J0KTsKLQllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgewotCQl1bnNpZ25lZCBsb25nIGEgPSAodW5zaWduZWQgbG9uZylhZGRyOwotCi0JCXdoaWxlIChjb3VudC0tKSB7Ci0JCQljdHJsX291dGwoY3RybF9pbmwocGNpX2lvYWRkcihwb3J0KSksIGEpOwotCQkJYSArPSA0OwotCQl9Ci0JfSBlbHNlCi0JCW1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXZvaWQgcnRzNzc1MXIyZF9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyBhID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKLQl2b2xhdGlsZSBfX3U4ICpicDsKLQl2b2xhdGlsZSBfX3UxNiAqcDsKLQotCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKSB7Ci0JCXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0ODg3OTZsKHBvcnQsIDApOwotCQl3aGlsZSAoY291bnQtLSkKLQkJCSpwID0gY3RybF9pbmIoYSsrKTsKLQl9IGVsc2UgaWYgKFBYU0VHKHBvcnQpKQotCQl3aGlsZSAoY291bnQtLSkKLQkJCWN0cmxfb3V0YihhKyssIHBvcnQpOwotCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7Ci0JCWJwID0gKF9fdTggKilwY2lfaW9hZGRyKHBvcnQpOwotCQl3aGlsZSAoY291bnQtLSkKLQkJCSpicCA9IGN0cmxfaW5iKGErKyk7Ci0JfSBlbHNlIHsKLQkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQyYWRyKHBvcnQpOwotCQl3aGlsZSAoY291bnQtLSkKLQkJCSpwID0gY3RybF9pbmIoYSsrKTsKLQl9Ci19Ci0KLXZvaWQgcnRzNzc1MXIyZF9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyBhID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKLQl2b2xhdGlsZSBfX3UxNiAqcDsKLQotCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQotCQlwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDg4Nzk2bChwb3J0LCAxKTsKLQllbHNlIGlmIChQWFNFRyhwb3J0KSkKLQkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ7Ci0JZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwY2lfaW9hZGRyKHBvcnQpOwotCWVsc2UKLQkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQyYWRyKHBvcnQpOwotCi0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJY3RybF9vdXR3KCpwLCBhKTsKLQkJYSArPSAyOwotCX0KLX0KLQotdm9pZCBydHM3NzUxcjJkX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJbWF5YmViYWRpbyhwb3J0KTsKLQllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgewotCQl1bnNpZ25lZCBsb25nIGEgPSAodW5zaWduZWQgbG9uZylhZGRyOwotCi0JCXdoaWxlIChjb3VudC0tKSB7Ci0JCQljdHJsX291dGwoY3RybF9pbmwoYSksIHBjaV9pb2FkZHIocG9ydCkpOwotCQkJYSArPSA0OwotCQl9Ci0JfSBlbHNlCi0JCW1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgcnRzNzc1MXIyZF9pc2FfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXJldHVybiBwb3J0MmFkcihvZmZzZXQpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lycS5jCmluZGV4IGNiMGViMjAuLjBiYWU5MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvaXJxLmMKQEAgLTksNyArOSw5IEBACiAgKiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4gMjAwMi4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkLmg+CiAKQEAgLTIyLDc5ICsyNCwzMSBAQAogZXh0ZXJuIGludCB2b3lhZ2VyZ3hfaXJxX2RlbXV4KGludCBpcnEpOwogZXh0ZXJuIHZvaWQgc2V0dXBfdm95YWdlcmd4X2lycSh2b2lkKTsKIAotc3RhdGljIHZvaWQgZW5hYmxlX3J0czc3NTFyMmRfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHZvaWQgZGlzYWJsZV9ydHM3NzUxcjJkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLQotLyogc2h1dGRvd24gaXMgc2FtZSBhcyAiZGlzYWJsZSIgKi8KLSNkZWZpbmUgc2h1dGRvd25fcnRzNzc1MXIyZF9pcnEgZGlzYWJsZV9ydHM3NzUxcjJkX2lycQotCi1zdGF0aWMgdm9pZCBhY2tfcnRzNzc1MXIyZF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCBlbmRfcnRzNzc1MXIyZF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9ydHM3NzUxcjJkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgZW5hYmxlX3J0czc3NTFyMmRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JZW5hYmxlX3J0czc3NTFyMmRfaXJxKGlycSk7Ci0JcmV0dXJuIDA7IC8qIG5ldmVyIGFueXRoaW5nIHBlbmRpbmcgKi8KKwkvKiBTZXQgcHJpb3JpdHkgaW4gSVBSIGJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgKi8KKwljdHJsX291dHcoY3RybF9pbncoSVJMQ05UUjEpIHwgKDEgPDwgbWFza19wb3NbaXJxXSksIElSTENOVFIxKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzYWJsZV9ydHM3NzUxcjJkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIHNob3J0IHZhbDsKLQl1bnNpZ25lZCBzaG9ydCBtYXNrID0gMHhmZmZmIF4gKDB4MDAwMSA8PCBtYXNrX3Bvc1tpcnFdKTsKLQogCS8qIFNldCB0aGUgcHJpb3JpdHkgaW4gSVBSIHRvIDAgKi8KLQl2YWwgPSBjdHJsX2ludyhJUkxDTlRSMSk7Ci0JdmFsICY9IG1hc2s7Ci0JY3RybF9vdXR3KHZhbCwgSVJMQ05UUjEpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfcnRzNzc1MXIyZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBzaG9ydCB2YWw7Ci0JdW5zaWduZWQgc2hvcnQgdmFsdWUgPSAoMHgwMDAxIDw8IG1hc2tfcG9zW2lycV0pOwotCi0JLyogU2V0IHByaW9yaXR5IGluIElQUiBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlICovCi0JdmFsID0gY3RybF9pbncoSVJMQ05UUjEpOwotCXZhbCB8PSB2YWx1ZTsKLQljdHJsX291dHcodmFsLCBJUkxDTlRSMSk7CisJY3RybF9vdXR3KGN0cmxfaW53KElSTENOVFIxKSAmICgweGZmZmYgXiAoMSA8PCBtYXNrX3Bvc1tpcnFdKSksCisJCSAgSVJMQ05UUjEpOwogfQogCiBpbnQgcnRzNzc1MXIyZF9pcnFfZGVtdXgoaW50IGlycSkKIHsKLQlpbnQgZGVtdXhfaXJxOwotCi0JZGVtdXhfaXJxID0gdm95YWdlcmd4X2lycV9kZW11eChpcnEpOwotCXJldHVybiBkZW11eF9pcnE7CisJcmV0dXJuIHZveWFnZXJneF9pcnFfZGVtdXgoaXJxKTsKIH0KIAotc3RhdGljIHZvaWQgYWNrX3J0czc3NTFyMmRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZGlzYWJsZV9ydHM3NzUxcjJkX2lycShpcnEpOwotfQotCi1zdGF0aWMgdm9pZCBlbmRfcnRzNzc1MXIyZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKLQkJZW5hYmxlX3J0czc3NTFyMmRfaXJxKGlycSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgcnRzNzc1MXIyZF9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUgPSAiUlRTNzc1MVIyRCBJUlEiLAotCS5zdGFydHVwID0gc3RhcnR1cF9ydHM3NzUxcjJkX2lycSwKLQkuc2h1dGRvd24gPSBzaHV0ZG93bl9ydHM3NzUxcjJkX2lycSwKLQkuZW5hYmxlID0gZW5hYmxlX3J0czc3NTFyMmRfaXJxLAotCS5kaXNhYmxlID0gZGlzYWJsZV9ydHM3NzUxcjJkX2lycSwKLQkuYWNrID0gYWNrX3J0czc3NTFyMmRfaXJxLAotCS5lbmQgPSBlbmRfcnRzNzc1MXIyZF9pcnEsCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHJ0czc3NTFyMmRfaXJxX2NoaXAgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAicnRzNzc1MXIyZCIsCisJLm1hc2sJCT0gZGlzYWJsZV9ydHM3NzUxcjJkX2lycSwKKwkudW5tYXNrCQk9IGVuYWJsZV9ydHM3NzUxcjJkX2lycSwKKwkubWFza19hY2sJPSBkaXNhYmxlX3J0czc3NTFyMmRfaXJxLAogfTsKIAotc3RhdGljIHZvaWQgbWFrZV9ydHM3NzUxcjJkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwotCWlycV9kZXNjW2lycV0uY2hpcCA9ICZydHM3NzUxcjJkX2lycV90eXBlOwotCWRpc2FibGVfcnRzNzc1MXIyZF9pcnEoaXJxKTsKLX0KLQogLyoKICAqIEluaXRpYWxpemUgSVJRIHNldHRpbmcKICAqLwpAQCAtMTE5LDggKzczLDEyIEBACiAJICogSVJMMTQ9RXh0ZW50aW9uICMzCiAJICovCiAKLQlmb3IgKGk9MDsgaTwxNTsgaSsrKQotCQltYWtlX3J0czc3NTFyMmRfaXJxKGkpOworCWZvciAoaT0wOyBpPDE1OyBpKyspIHsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKGkpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpLCAmcnRzNzc1MXIyZF9pcnFfY2hpcCwKKwkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CisJCWVuYWJsZV9ydHM3NzUxcjJkX2lycShpKTsKKwl9CiAKIAlzZXR1cF92b3lhZ2VyZ3hfaXJxKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvbGVkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwOWY1NDguLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2xlZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9sZWQuYwotICoKLSAqIENvcHlyaWdodCAoQykgQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIFJlbmVzYXMgVGVjaG5vbG9neSBTYWxlcyBSVFM3NzUxUjJEIHNwZWNpZmljIExFRCBjb2RlLgotICovCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkLmg+Ci0KLS8qIEN5Y2xlIHRoZSBMRUQncyBpbiB0aGUgY2xhc2ljIEtuaWdodHJpZ2VyL1N1biBwYXR0ZXJuICovCi12b2lkIGhlYXJ0YmVhdF9ydHM3NzUxcjJkKHZvaWQpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBjbnQgPSAwLCBwZXJpb2QgPSAwOwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUEFfT1VUUE9SVDsKLQlzdGF0aWMgdW5zaWduZWQgYml0ID0gMCwgdXAgPSAxOwotCi0JY250ICs9IDE7Ci0JaWYgKGNudCA8IHBlcmlvZCkKLQkJcmV0dXJuOwotCi0JY250ID0gMDsKLQotCS8qIEdvIHRocm91Z2ggdGhlIHBvaW50cyAocm91Z2hseSEpOgotCSAqIGYoMCk9MTAsIGYoMSk9MTYsIGYoMik9MjAsIGYoNSk9MzUsIGYoaW50KS0+MTEwCi0JICovCi0JcGVyaW9kID0gMTEwIC0gKCgzMDAgPDwgRlNISUZUKS8oKGF2ZW5ydW5bMF0vNSkgKyAoMzw8RlNISUZUKSkpOwotCi0JKnAgPSAxIDw8IGJpdDsKLQlpZiAodXApCi0JCWlmIChiaXQgPT0gNykgewotCQkJYml0LS07Ci0JCQl1cCA9IDA7Ci0JCX0gZWxzZQotCQkJYml0Kys7Ci0JZWxzZSBpZiAoYml0ID09IDApCi0JCXVwID0gMTsKLQllbHNlCi0JCWJpdC0tOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvc2V0dXAuYwppbmRleCA1YzA0MmQzLi40NGI0MjA4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvc2V0dXAuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBSZW5lc2FzIFRlY2hub2xvZ3kgU2FsZXMgUlRTNzc1MVIyRCBTdXBwb3J0LgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDYgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xMCwzMyArMTAsMTMgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvcnRzNzc1MXIyZC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkLmg+CiAjaW5jbHVkZSA8YXNtL3ZveWFnZXJneC5oPgotCi1leHRlcm4gdm9pZCBoZWFydGJlYXRfcnRzNzc1MXIyZCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfcnRzNzc1MXIyZF9JUlEodm9pZCk7Ci1leHRlcm4gaW50IHJ0czc3NTFyMmRfaXJxX2RlbXV4KGludCBpcnEpOwotCi1leHRlcm4gdm9pZCAqdm95YWdlcmd4X2NvbnNpc3RlbnRfYWxsb2Moc3RydWN0IGRldmljZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKiwgZ2ZwX3QpOwotZXh0ZXJuIGludCB2b3lhZ2VyZ3hfY29uc2lzdGVudF9mcmVlKHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHVhcnRfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1lbWJhc2UJPSAodm9pZCAqKVZPWUFHRVJfVUFSVF9CQVNFLAotCQkubWFwYmFzZQk9IFZPWUFHRVJfVUFSVF9CQVNFLAotCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkuaXJxCQk9IFZPWUFHRVJfVUFSVDBfSVJRLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCS5yZWdzaGlmdAk9IDIsCi0JCS51YXJ0Y2xrCT0gKDk2MDAgKiAxNiksCi0JfSwgewotCQkuZmxhZ3MJCT0gMCwKLQl9LAotfTsKKyNpbmNsdWRlIDxhc20vaW8uaD4KIAogc3RhdGljIHZvaWQgX19pbml0IHZveWFnZXJneF9zZXJpYWxfaW5pdCh2b2lkKQogewpAQCAtNDUsMzIgKzI1LDk2IEBACiAJLyoKIAkgKiBHUElPIENvbnRyb2wKIAkgKi8KLQl2YWwgPSBpbmwoR1BJT19NVVhfSElHSCk7CisJdmFsID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKUdQSU9fTVVYX0hJR0gpOwogCXZhbCB8PSAweDAwMDAxZmUwOwotCW91dGwodmFsLCBHUElPX01VWF9ISUdIKTsKKwl3cml0ZWwodmFsLCAodm9pZCBfX2lvbWVtICopR1BJT19NVVhfSElHSCk7CiAKIAkvKgogCSAqIFBvd2VyIE1vZGUgR2F0ZQogCSAqLwotCXZhbCA9IGlubChQT1dFUl9NT0RFMF9HQVRFKTsKKwl2YWwgPSByZWFkbCgodm9pZCBfX2lvbWVtICopUE9XRVJfTU9ERTBfR0FURSk7CiAJdmFsIHw9IChQT1dFUl9NT0RFMF9HQVRFX1UwIHwgUE9XRVJfTU9ERTBfR0FURV9VMSk7Ci0Jb3V0bCh2YWwsIFBPV0VSX01PREUwX0dBVEUpOworCXdyaXRlbCh2YWwsICh2b2lkIF9faW9tZW0gKilQT1dFUl9NT0RFMF9HQVRFKTsKIAotCXZhbCA9IGlubChQT1dFUl9NT0RFMV9HQVRFKTsKKwl2YWwgPSByZWFkbCgodm9pZCBfX2lvbWVtICopUE9XRVJfTU9ERTFfR0FURSk7CiAJdmFsIHw9IChQT1dFUl9NT0RFMV9HQVRFX1UwIHwgUE9XRVJfTU9ERTFfR0FURV9VMSk7Ci0Jb3V0bCh2YWwsIFBPV0VSX01PREUxX0dBVEUpOworCXdyaXRlbCh2YWwsICh2b2lkIF9faW9tZW0gKilQT1dFUl9NT0RFMV9HQVRFKTsKIH0KIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZl9pZGVfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBQQV9BUkVBNV9JTyArIDB4MTAwMCwKKwkJLmVuZAk9IFBBX0FSRUE1X0lPICsgMHgxMDAwICsgMHgwOCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBQQV9BUkVBNV9JTyArIDB4ODBjLAorCQkuZW5kCT0gUEFfQVJFQTVfSU8gKyAweDgwYyArIDB4MTYgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsyXSA9IHsKKyNpZmRlZiBDT05GSUdfUlRTNzc1MVIyRF9SRVYxMQorCQkuc3RhcnQJPSAxLAorI2Vsc2UKKwkJLnN0YXJ0CT0gMiwKKyNlbmRpZgorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwYXRhX3BsYXRmb3JtX2luZm8gcGF0YV9pbmZvID0geworCS5pb3BvcnRfc2hpZnQJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY2ZfaWRlX2RldmljZSAgPSB7CisJLm5hbWUJCT0gInBhdGFfcGxhdGZvcm0iLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2ZfaWRlX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gY2ZfaWRlX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwYXRhX2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgdWFydF9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWVtYmFzZQk9ICh2b2lkIF9faW9tZW0gKilWT1lBR0VSX1VBUlRfQkFTRSwKKwkJLm1hcGJhc2UJPSBWT1lBR0VSX1VBUlRfQkFTRSwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLmlycQkJPSBWT1lBR0VSX1VBUlQwX0lSUSwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSAoOTYwMCAqIDE2KSwKKwl9Cit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1YXJ0X2RldmljZSA9IHsKIAkubmFtZQkJPSAic2VyaWFsODI1MCIsCi0JLmlkCQk9IC0xLAorCS5pZAkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gdWFydF9wbGF0Zm9ybV9kYXRhLAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFBBX09VVFBPUlQsCisJCS5lbmQJPSBQQV9PVVRQT1JUICsgOCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpydHM3NzUxcjJkX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZ1YXJ0X2RldmljZSwKKwkmaGVhcnRiZWF0X2RldmljZSwKKwkmY2ZfaWRlX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJ0czc3NTFyMmRfZGV2aWNlc19zZXR1cCh2b2lkKQpAQCAtNzgsNiArMTIyLDcgQEAKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocnRzNzc1MXIyZF9kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKHJ0czc3NTFyMmRfZGV2aWNlcykpOwogfQorX19pbml0Y2FsbChydHM3NzUxcjJkX2RldmljZXNfc2V0dXApOwogCiBzdGF0aWMgdm9pZCBydHM3NzUxcjJkX3Bvd2VyX29mZih2b2lkKQogewpAQCAtODksMTQgKzEzNCwxNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcnRzNzc1MXIyZF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCWRldmljZV9pbml0Y2FsbChydHM3NzUxcjJkX2RldmljZXNfc2V0dXApOworCXUxNiB2ZXIgPSBjdHJsX2ludyhQQV9WRVJSRUcpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUmVuZXNhcyBUZWNobm9sb2d5IFNhbGVzIFJUUzc3NTFSMkQgc3VwcG9ydC5cbiIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRlBHQSB2ZXJzaW9uOiVkIChyZXZpc2lvbjolZClcbiIsCisJCQkJCSh2ZXIgPj4gNCkgJiAweGYsIHZlciAmIDB4Zik7CiAKIAljdHJsX291dHcoMHgwMDAwLCBQQV9PVVRQT1JUKTsKIAlwbV9wb3dlcl9vZmYgPSBydHM3NzUxcjJkX3Bvd2VyX29mZjsKIAogCXZveWFnZXJneF9zZXJpYWxfaW5pdCgpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiUmVuZXNhcyBUZWNobm9sb2d5IFNhbGVzIFJUUzc3NTFSMkQgc3VwcG9ydC5cbiIpOwogfQogCiAvKgpAQCAtMTA3LDMxICsxNTUsNyBAQAogCS5tdl9zZXR1cAkJPSBydHM3NzUxcjJkX3NldHVwLAogCS5tdl9ucl9pcnFzCQk9IDcyLAogCi0JLm12X2luYgkJCT0gcnRzNzc1MXIyZF9pbmIsCi0JLm12X2ludwkJCT0gcnRzNzc1MXIyZF9pbncsCi0JLm12X2lubAkJCT0gcnRzNzc1MXIyZF9pbmwsCi0JLm12X291dGIJCT0gcnRzNzc1MXIyZF9vdXRiLAotCS5tdl9vdXR3CQk9IHJ0czc3NTFyMmRfb3V0dywKLQkubXZfb3V0bAkJPSBydHM3NzUxcjJkX291dGwsCi0KLQkubXZfaW5iX3AJCT0gcnRzNzc1MXIyZF9pbmJfcCwKLQkubXZfaW53X3AJCT0gcnRzNzc1MXIyZF9pbncsCi0JLm12X2lubF9wCQk9IHJ0czc3NTFyMmRfaW5sLAotCS5tdl9vdXRiX3AJCT0gcnRzNzc1MXIyZF9vdXRiX3AsCi0JLm12X291dHdfcAkJPSBydHM3NzUxcjJkX291dHcsCi0JLm12X291dGxfcAkJPSBydHM3NzUxcjJkX291dGwsCi0KLQkubXZfaW5zYgkJPSBydHM3NzUxcjJkX2luc2IsCi0JLm12X2luc3cJCT0gcnRzNzc1MXIyZF9pbnN3LAotCS5tdl9pbnNsCQk9IHJ0czc3NTFyMmRfaW5zbCwKLQkubXZfb3V0c2IJCT0gcnRzNzc1MXIyZF9vdXRzYiwKLQkubXZfb3V0c3cJCT0gcnRzNzc1MXIyZF9vdXRzdywKLQkubXZfb3V0c2wJCT0gcnRzNzc1MXIyZF9vdXRzbCwKLQogCS5tdl9pbml0X2lycQkJPSBpbml0X3J0czc3NTFyMmRfSVJRLAotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF9ydHM3NzUxcjJkLAotI2VuZGlmCiAJLm12X2lycV9kZW11eAkJPSBydHM3NzUxcjJkX2lycV9kZW11eCwKIAogI2lmZGVmIENPTkZJR19VU0JfU001MDEKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzcyMDYvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9zZS83MjA2L01ha2VmaWxlCmluZGV4IDYzOTUwZjRmLi42M2U3ZWQ2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MjA2L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzcyMDYvTWFrZWZpbGUKQEAgLTMsNSArMywzIEBACiAjCiAKIG9iai15CSA6PSBzZXR1cC5vIGlvLm8gaXJxLm8KLW9iai0kKENPTkZJR19IRUFSVEJFQVQpICs9IGxlZC5vCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzcyMDYvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83MjA2L2xlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjc5NDYwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzcyMDYvbGVkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9zaC9rZXJuZWwvbGVkX3NlLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgU3R1YXJ0IE1lbmVmeSA8c3R1YXJ0Lm1lbmVmeUBzdC5jb20+Ci0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBTb2x1dGlvbiBFbmdpbmUgc3BlY2lmaWMgTEVEIGNvZGUuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9zZTcyMDYuaD4KLQotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLS8qIEN5Y2xlIHRoZSBMRUQncyBpbiB0aGUgY2xhc2ljIEtuaWdodHJpZGVyL1N1biBwYXR0ZXJuICovCi12b2lkIGhlYXJ0YmVhdF9zZSh2b2lkKQotewotCXN0YXRpYyB1bnNpZ25lZCBpbnQgY250ID0gMCwgcGVyaW9kID0gMDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCogcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopUEFfTEVEOwotCXN0YXRpYyB1bnNpZ25lZCBiaXQgPSAwLCB1cCA9IDE7Ci0KLQljbnQgKz0gMTsKLQlpZiAoY250IDwgcGVyaW9kKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQljbnQgPSAwOwotCi0JLyogR28gdGhyb3VnaCB0aGUgcG9pbnRzIChyb3VnaGx5ISk6Ci0JICogZigwKT0xMCwgZigxKT0xNiwgZigyKT0yMCwgZig1KT0zNSxmKGluZiktPjExMAotCSAqLwotCXBlcmlvZCA9IDExMCAtICggKDMwMDw8RlNISUZUKS8KLQkJCSAoKGF2ZW5ydW5bMF0vNSkgKyAoMzw8RlNISUZUKSkgKTsKLQotCWlmICh1cCkgewotCQlpZiAoYml0ID09IDcpIHsKLQkJCWJpdC0tOwotCQkJdXA9MDsKLQkJfSBlbHNlIHsKLQkJCWJpdCArKzsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChiaXQgPT0gMCkgewotCQkJYml0Kys7Ci0JCQl1cD0xOwotCQl9IGVsc2UgewotCQkJYml0LS07Ci0JCX0KLQl9Ci0JKnAgPSAxPDwoYml0KzgpOwotCi19Ci0jZW5kaWYgLyogQ09ORklHX0hFQVJUQkVBVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzIwNi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzIwNi9zZXR1cC5jCmluZGV4IDBmNDJlOTEuLmNhNzE0ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzcyMDYvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MjA2L3NldHVwLmMKQEAgLTMsNiArMyw3IEBACiAgKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9zZS83MjA2L3NldHVwLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIFlvc2hpbm9yaSBTYXRvCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKICAqCiAgKiBIaXRhY2hpIDcyMDYgU29sdXRpb25FbmdpbmUgU3VwcG9ydC4KICAqCkBAIC0zNCwxNSArMzUsMzcgQEAKIAkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgaGVhcnRiZWF0X2JpdF9wb3NbXSA9IHsgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSB9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFBBX0xFRCwKKwkJLmVuZAk9IFBBX0xFRCArIEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCisJLmlkCQk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gaGVhcnRiZWF0X2JpdF9wb3MsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzZTcyMDZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNtYzkxeF9kZXZpY2UsCisJJmhlYXJ0YmVhdF9kZXZpY2UsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzZTcyMDZfZGV2aWNlc19zZXR1cCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNtYzkxeF9kZXZpY2UpOworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzZTcyMDZfZGV2aWNlcywgQVJSQVlfU0laRShzZTcyMDZfZGV2aWNlcykpOwogfQotCiBfX2luaXRjYWxsKHNlNzIwNl9kZXZpY2VzX3NldHVwKTsKIAotdm9pZCBoZWFydGJlYXRfc2Uodm9pZCk7Ci0KIC8qCiAgKiBUaGUgTWFjaGluZSBWZWN0b3IKICAqLwpAQCAtNzIsOCArOTUsNSBAQAogCS5tdl9vdXRzbAkJPSBzZTcyMDZfb3V0c2wsCiAKIAkubXZfaW5pdF9pcnEJCT0gaW5pdF9zZTcyMDZfSVJRLAotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF9zZSwKLSNlbmRpZgogfTsKIEFMSUFTX01WKHNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvTWFrZWZpbGUKaW5kZXggMGZiZDRmNC4uNDYyNDczNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL01ha2VmaWxlCkBAIC0zLDUgKzMsMyBAQAogIwogCiBvYmoteQkgOj0gc2V0dXAubyBpby5vIGlycS5vCi0KLW9iai0kKENPTkZJR19IRUFSVEJFQVQpICs9IGxlZC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2xlZC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9sZWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQwM2JiNy4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2xlZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvbGVkLmMKLSAqCi0gKiBEZXJpdmVkIGZyb20gbGludXgvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9sZWQuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTdHVhcnQgTWVuZWZ5IDxzdHVhcnQubWVuZWZ5QHN0LmNvbT4KLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIFNvbHV0aW9uIEVuZ2luZSBzcGVjaWZpYyBMRUQgY29kZS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxhc20vc2U3MzAwLmg+Ci0KLS8qIEN5Y2xlIHRoZSBMRUQncyBpbiB0aGUgY2xhc2ljIEtuaWdodHJpZGVyL1N1biBwYXR0ZXJuICovCi12b2lkIGhlYXJ0YmVhdF83MzAwc2Uodm9pZCkKLXsKLQlzdGF0aWMgdW5zaWduZWQgaW50IGNudCA9IDAsIHBlcmlvZCA9IDA7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgUEFfTEVEOwotCXN0YXRpYyB1bnNpZ25lZCBiaXQgPSAwLCB1cCA9IDE7Ci0KLQljbnQgKz0gMTsKLQlpZiAoY250IDwgcGVyaW9kKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQljbnQgPSAwOwotCi0JLyogR28gdGhyb3VnaCB0aGUgcG9pbnRzIChyb3VnaGx5ISk6Ci0JICogZigwKT0xMCwgZigxKT0xNiwgZigyKT0yMCwgZig1KT0zNSxmKGluZiktPjExMAotCSAqLwotCXBlcmlvZCA9IDExMCAtICgoMzAwIDw8IEZTSElGVCkgLyAoKGF2ZW5ydW5bMF0gLyA1KSArICgzIDw8IEZTSElGVCkpKTsKLQotCWlmICh1cCkgewotCQlpZiAoYml0ID09IDcpIHsKLQkJCWJpdC0tOwotCQkJdXAgPSAwOwotCQl9IGVsc2UgewotCQkJYml0Kys7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoYml0ID09IDApIHsKLQkJCWJpdCsrOwotCQkJdXAgPSAxOwotCQl9IGVsc2UgewotCQkJYml0LS07Ci0JCX0KLQl9Ci0JKnAgPSAxIDw8IChiaXQgKyA4KTsKLQotfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL3NldHVwLmMKaW5kZXggNmYwODJhNzIuLmYxOTYwOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL3NldHVwLmMKQEAgLTYsMTQgKzYsNDMgQEAKICAqIFNILU1vYmlsZSBTb2x1dGlvbkVuZ2luZSA3MzAwIFN1cHBvcnQuCiAgKgogICovCi0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vc2U3MzAwLmg+CiAKLXZvaWQgaGVhcnRiZWF0XzczMDBzZSh2b2lkKTsKIHZvaWQgaW5pdF83MzAwc2VfSVJRKHZvaWQpOwogCitzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFydGJlYXRfYml0X3Bvc1tdID0geyA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1IH07CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUEFfTEVELAorCQkuZW5kCT0gUEFfTEVEICsgQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcykgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiaGVhcnRiZWF0IiwKKwkuaWQJCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBoZWFydGJlYXRfYml0X3BvcywKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNlNzMwMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaGVhcnRiZWF0X2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNlNzMwMF9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNlNzMwMF9kZXZpY2VzLCBBUlJBWV9TSVpFKHNlNzMwMF9kZXZpY2VzKSk7Cit9CitfX2luaXRjYWxsKHNlNzMwMF9kZXZpY2VzX3NldHVwKTsKKwogLyoKICAqIFRoZSBNYWNoaW5lIFZlY3RvcgogICovCkBAIC00Miw4ICs3MSw1IEBACiAJLm12X291dHNsID0gc2g3MzAwc2Vfb3V0c2wsCiAKIAkubXZfaW5pdF9pcnEgPSBpbml0XzczMDBzZV9JUlEsCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotCS5tdl9oZWFydGJlYXQgPSBoZWFydGJlYXRfNzMwMHNlLAotI2VuZGlmCiB9OwogQUxJQVNfTVYoNzMwMHNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9NYWtlZmlsZQppbmRleCA4ZjYzODg2Li5lN2MwOTk2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9NYWtlZmlsZQpAQCAtMyw1ICszLDMgQEAKICMKIAogb2JqLXkJIDo9IHNldHVwLm8gaW8ubyBpcnEubwotCi1vYmotJChDT05GSUdfSEVBUlRCRUFUKSArPSBsZWQubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9sZWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3MmU5YS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9sZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9sZWQuYwotICoKLSAqIERlcml2ZWQgZnJvbSBhcmNoL3NoL2JvYXJkcy9zZS83NzB4L2xlZC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFN0dWFydCBNZW5lZnkgPHN0dWFydC5tZW5lZnlAc3QuY29tPgotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgU29sdXRpb24gRW5naW5lIHNwZWNpZmljIExFRCBjb2RlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3NlNzMxODAuaD4KLQotLyogQ3ljbGUgdGhlIExFRCdzIGluIHRoZSBjbGFzaWMgS25pZ2h0cmlkZXIvU3VuIHBhdHRlcm4gKi8KLXZvaWQgaGVhcnRiZWF0XzczMTgwc2Uodm9pZCkKLXsKLQlzdGF0aWMgdW5zaWduZWQgaW50IGNudCA9IDAsIHBlcmlvZCA9IDA7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgUEFfTEVEOwotCXN0YXRpYyB1bnNpZ25lZCBiaXQgPSAwLCB1cCA9IDE7Ci0KLQljbnQgKz0gMTsKLQlpZiAoY250IDwgcGVyaW9kKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQljbnQgPSAwOwotCi0JLyogR28gdGhyb3VnaCB0aGUgcG9pbnRzIChyb3VnaGx5ISk6Ci0JICogZigwKT0xMCwgZigxKT0xNiwgZigyKT0yMCwgZig1KT0zNSxmKGluZiktPjExMAotCSAqLwotCXBlcmlvZCA9IDExMCAtICgoMzAwIDw8IEZTSElGVCkgLyAoKGF2ZW5ydW5bMF0gLyA1KSArICgzIDw8IEZTSElGVCkpKTsKLQotCWlmICh1cCkgewotCQlpZiAoYml0ID09IDcpIHsKLQkJCWJpdC0tOwotCQkJdXAgPSAwOwotCQl9IGVsc2UgewotCQkJYml0Kys7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoYml0ID09IDApIHsKLQkJCWJpdCsrOwotCQkJdXAgPSAxOwotCQl9IGVsc2UgewotCQkJYml0LS07Ci0JCX0KLQl9Ci0JKnAgPSAxIDw8IChiaXQgKyBMRURfU0hJRlQpOwotCi19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvc2V0dXAuYwppbmRleCBiMzhlZjUwLi45MTFjZTFjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL3NldHVwLmMKQEAgLTEwLDEzICsxMCwzOSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vc2U3MzE4MC5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotdm9pZCBoZWFydGJlYXRfNzMxODBzZSh2b2lkKTsKIHZvaWQgaW5pdF83MzE4MHNlX0lSUSh2b2lkKTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBQQV9MRUQsCisJCS5lbmQJPSBQQV9MRUQgKyA4IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNlNzMxODBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmhlYXJ0YmVhdF9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZTczMTgwX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3MzQzc2VfcGxhdGZvcm1fZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShzaDczNDNzZV9wbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CitfX2luaXRjYWxsKHNlNzMxODBfZGV2aWNlc19zZXR1cCk7CisKIC8qCiAgKiBUaGUgTWFjaGluZSBWZWN0b3IKICAqLwpAQCAtNDYsOCArNzIsNSBAQAogCiAJLm12X2luaXRfaXJxID0gaW5pdF83MzE4MHNlX0lSUSwKIAkubXZfaXJxX2RlbXV4ID0gc2htc2VfaXJxX2RlbXV4LAotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQkubXZfaGVhcnRiZWF0ID0gaGVhcnRiZWF0XzczMTgwc2UsCi0jZW5kaWYKIH07CiBBTElBU19NVig3MzE4MHNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvTWFrZWZpbGUKaW5kZXggNDI5MTA2OS4uMzAyNDc5NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzQzL01ha2VmaWxlCkBAIC0zLDUgKzMsMyBAQAogIwogCiBvYmoteQkgOj0gc2V0dXAubyBpby5vIGlycS5vCi0KLW9iai0kKENPTkZJR19IRUFSVEJFQVQpICs9IGxlZC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzQzL2xlZC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9sZWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIzOWUxOS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzQzL2xlZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIGFyY2gvc2gvYm9hcmRzL3NlLzczNDMvbGVkLmMKLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3NlNzM0My5oPgotCi0vKiBDeWNsZSB0aGUgTEVEJ3MgaW4gdGhlIGNsYXNpYyBLbmlnaHRyaWRlci9TdW4gcGF0dGVybiAqLwotdm9pZCBoZWFydGJlYXRfNzM0M3NlKHZvaWQpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBjbnQgPSAwLCBwZXJpb2QgPSAwOwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIFBBX0xFRDsKLQlzdGF0aWMgdW5zaWduZWQgYml0ID0gMCwgdXAgPSAxOwotCi0JY250ICs9IDE7Ci0JaWYgKGNudCA8IHBlcmlvZCkgewotCQlyZXR1cm47Ci0JfQotCi0JY250ID0gMDsKLQotCS8qIEdvIHRocm91Z2ggdGhlIHBvaW50cyAocm91Z2hseSEpOgotCSAqIGYoMCk9MTAsIGYoMSk9MTYsIGYoMik9MjAsIGYoNSk9MzUsZihpbmYpLT4xMTAKLQkgKi8KLQlwZXJpb2QgPSAxMTAgLSAoKDMwMCA8PCBGU0hJRlQpIC8gKChhdmVucnVuWzBdIC8gNSkgKyAoMyA8PCBGU0hJRlQpKSk7Ci0KLQlpZiAodXApIHsKLQkJaWYgKGJpdCA9PSA3KSB7Ci0JCQliaXQtLTsKLQkJCXVwID0gMDsKLQkJfSBlbHNlIHsKLQkJCWJpdCsrOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGJpdCA9PSAwKSB7Ci0JCQliaXQrKzsKLQkJCXVwID0gMTsKLQkJfSBlbHNlIHsKLQkJCWJpdC0tOwotCQl9Ci0JfQotCSpwID0gMSA8PCAoYml0ICsgTEVEX1NISUZUKTsKLQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9zZXR1cC5jCmluZGV4IGM3ZDE3ZmUuLjNmZGIxNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzQzL3NldHVwLmMKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvc2U3MzQzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi12b2lkIGhlYXJ0YmVhdF83MzQzc2Uodm9pZCk7CiB2b2lkIGluaXRfNzM0M3NlX0lSUSh2b2lkKTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CkBAIC0zMSwxNCArMzAsMzAgQEAKIAkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtYzkxeF9wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUEFfTEVELAorCQkuZW5kCT0gUEFfTEVEICsgOCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDczNDNzZV9wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc21jOTF4X2RldmljZSwKKwkmaGVhcnRiZWF0X2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzM0M3NlX2RldmljZXNfc2V0dXAodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc21jOTF4X3BsYXRmb3JtX2RldmljZXMsCi0JCQkJICAgIEFSUkFZX1NJWkUoc21jOTF4X3BsYXRmb3JtX2RldmljZXMpKTsKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3MzQzc2VfcGxhdGZvcm1fZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShzaDczNDNzZV9wbGF0Zm9ybV9kZXZpY2VzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzaDczNDNzZV9zZXR1cChjaGFyICoqY21kbGluZV9wKQpAQCAtNzYsOCArOTEsNSBAQAogCiAJLm12X2luaXRfaXJxID0gaW5pdF83MzQzc2VfSVJRLAogCS5tdl9pcnFfZGVtdXggPSBzaG1zZV9pcnFfZGVtdXgsCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotCS5tdl9oZWFydGJlYXQgPSBoZWFydGJlYXRfNzM0M3NlLAotI2VuZGlmCiB9OwogQUxJQVNfTVYoNzM0M3NlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvTWFrZWZpbGUKaW5kZXggOWE1MDM1Zi4uOGU2MjRiMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L01ha2VmaWxlCkBAIC0zLDQgKzMsMyBAQAogIwogCiBvYmoteQkgOj0gc2V0dXAubyBpby5vIGlycS5vCi1vYmotJChDT05GSUdfSEVBUlRCRUFUKSArPSBsZWQubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvaXJxLmMKaW5kZXggZmNkN2NkNy4uMzA3Y2E1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2lycS5jCkBAIC0yLDU2ICsyLDk2IEBACiAgKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2lycS5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAwICBLYXp1bW90byBLb2ppbWEKKyAqIENvcHlyaWdodCAoQykgMjAwNiAgTm9idWhpcm8gSXdhbWF0c3UKICAqCiAgKiBIaXRhY2hpIFNvbHV0aW9uRW5naW5lIFN1cHBvcnQuCiAgKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zZS5oPgogCisvKiAKKyAqIElmIHRoZSBwcm9ibGVtIG9mIG1ha2VfaXByX2lycSBpcyBzb2x2ZWQsIAorICogdGhpcyBjb2RlIHdpbGwgYmVjb21lIHVubmVjZXNzYXJ5LiA6LSkgCisgKi8KK3N0YXRpYyB2b2lkIHNlNzcweF9kaXNhYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXByX2RhdGEgKnAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCisJY3RybF9vdXR3KGN0cmxfaW53KHAtPmFkZHIpICYgKDB4ZmZmZiBeICgweGYgPDwgcC0+c2hpZnQpKSwgcC0+YWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHNlNzcweF9lbmFibGVfaXByX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcHJfZGF0YSAqcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisKKwljdHJsX291dHcoY3RybF9pbncocC0+YWRkcikgfCAocC0+cHJpb3JpdHkgPDwgcC0+c2hpZnQpLCBwLT5hZGRyKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzZTc3MHhfaXJxX2NoaXAgPSB7CisJLm5hbWUgICAgICAgICAgID0gIk1TNzcweFNFLUZQR0EiLAorCS5tYXNrICAgICAgICAgICA9IHNlNzcweF9kaXNhYmxlX2lwcl9pcnEsCisJLnVubWFzayAgICAgICAgID0gc2U3NzB4X2VuYWJsZV9pcHJfaXJxLAorCS5tYXNrX2FjayAgICAgICA9IHNlNzcweF9kaXNhYmxlX2lwcl9pcnEsCit9OworCit2b2lkIG1ha2Vfc2U3NzB4X2lycShzdHJ1Y3QgaXByX2RhdGEgKnRhYmxlLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlycSA9IHRhYmxlW2ldLmlycTsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnNlNzcweF9pcnFfY2hpcCwKKwkJCWhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOworCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsICZ0YWJsZVtpXSk7CisJCXNlNzcweF9lbmFibGVfaXByX2lycShpcnEpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBzZTc3MHhfaXByX21hcFtdID0gewogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKIAkvKiBUaGlzIGlzIGRlZmF1bHQgdmFsdWUgKi8KLQl7IDB4Zi0weDIsIEJDUl9JTENSQSwgMiwgMHgyIH0sCi0JeyAweGYtMHhhLCBCQ1JfSUxDUkEsIDEsIDB4YSB9LAotCXsgMHhmLTB4NSwgQkNSX0lMQ1JCLCAwLCAweDUgfSwKLQl7IDB4Zi0weDgsIEJDUl9JTENSQywgMSwgMHg4IH0sCi0JeyAweGYtMHhjLCBCQ1JfSUxDUkMsIDAsIDB4YyB9LAotCXsgMHhmLTB4ZSwgQkNSX0lMQ1JELCAzLCAweGUgfSwKLQl7IDB4Zi0weDMsIEJDUl9JTENSRCwgMSwgMHgzIH0sIC8qIExBTiAqLwotCXsgMHhmLTB4ZCwgQkNSX0lMQ1JFLCAyLCAweGQgfSwKLQl7IDB4Zi0weDksIEJDUl9JTENSRSwgMSwgMHg5IH0sCi0JeyAweGYtMHgxLCBCQ1JfSUxDUkUsIDAsIDB4MSB9LAotCXsgMHhmLTB4ZiwgQkNSX0lMQ1JGLCAzLCAweGYgfSwKLQl7IDB4Zi0weGIsIEJDUl9JTENSRiwgMSwgMHhiIH0sCi0JeyAweGYtMHg3LCBCQ1JfSUxDUkcsIDMsIDB4NyB9LAotCXsgMHhmLTB4NiwgQkNSX0lMQ1JHLCAyLCAweDYgfSwKLQl7IDB4Zi0weDQsIEJDUl9JTENSRywgMSwgMHg0IH0sCisJeyAweGYtMHgyLCAwLCA4LCAgMHgyICwgQkNSX0lMQ1JBfSwKKwl7IDB4Zi0weGEsIDAsIDQsICAweGEgLCBCQ1JfSUxDUkF9LAorCXsgMHhmLTB4NSwgMCwgMCwgIDB4NSAsIEJDUl9JTENSQn0sCisJeyAweGYtMHg4LCAwLCA0LCAgMHg4ICwgQkNSX0lMQ1JDfSwKKwl7IDB4Zi0weGMsIDAsIDAsICAweGMgLCBCQ1JfSUxDUkN9LAorCXsgMHhmLTB4ZSwgMCwgMTIsIDB4ZSAsIEJDUl9JTENSRH0sCisJeyAweGYtMHgzLCAwLCA0LCAgMHgzICwgQkNSX0lMQ1JEfSwgLyogTEFOICovCisJeyAweGYtMHhkLCAwLCA4LCAgMHhkICwgQkNSX0lMQ1JFfSwKKwl7IDB4Zi0weDksIDAsIDQsICAweDkgLCBCQ1JfSUxDUkV9LAorCXsgMHhmLTB4MSwgMCwgMCwgIDB4MSAsIEJDUl9JTENSRX0sCisJeyAweGYtMHhmLCAwLCAxMiwgMHhmICwgQkNSX0lMQ1JGfSwKKwl7IDB4Zi0weGIsIDAsIDQsICAweGIgLCBCQ1JfSUxDUkZ9LAorCXsgMHhmLTB4NywgMCwgMTIsIDB4NyAsIEJDUl9JTENSR30sCisJeyAweGYtMHg2LCAwLCA4LCAgMHg2ICwgQkNSX0lMQ1JHfSwKKwl7IDB4Zi0weDQsIDAsIDQsICAweDQgLCBCQ1JfSUxDUkd9LAogI2Vsc2UKLQl7IDE0LCBCQ1JfSUxDUkEsIDIsIDB4MGYtMTQgfSwKLQl7IDEyLCBCQ1JfSUxDUkEsIDEsIDB4MGYtMTIgfSwKLQl7ICA4LCBCQ1JfSUxDUkIsIDEsIDB4MGYtIDggfSwKLQl7ICA2LCBCQ1JfSUxDUkMsIDMsIDB4MGYtIDYgfSwKLQl7ICA1LCBCQ1JfSUxDUkMsIDIsIDB4MGYtIDUgfSwKLQl7ICA0LCBCQ1JfSUxDUkMsIDEsIDB4MGYtIDQgfSwKLQl7ICAzLCBCQ1JfSUxDUkMsIDAsIDB4MGYtIDMgfSwKLQl7ICAxLCBCQ1JfSUxDUkQsIDMsIDB4MGYtIDEgfSwKLQotCXsgMTAsIEJDUl9JTENSRCwgMSwgMHgwZi0xMCB9LCAvKiBMQU4gKi8KLQotCXsgIDAsIEJDUl9JTENSRSwgMywgMHgwZi0gMCB9LCAvKiBQQ0lSUTMgKi8KLQl7IDExLCBCQ1JfSUxDUkUsIDIsIDB4MGYtMTEgfSwgLyogUENJUlEyICovCi0JeyAgOSwgQkNSX0lMQ1JFLCAxLCAweDBmLSA5IH0sIC8qIFBDSVJRMSAqLwotCXsgIDcsIEJDUl9JTENSRSwgMCwgMHgwZi0gNyB9LCAvKiBQQ0lSUTAgKi8KLQorCXsgMTQsIDAsICA4LCAweDBmLTE0ICxCQ1JfSUxDUkF9LAorCXsgMTIsIDAsICA0LCAweDBmLTEyICxCQ1JfSUxDUkF9LAorCXsgIDgsIDAsICA0LCAweDBmLSA4ICxCQ1JfSUxDUkJ9LAorCXsgIDYsIDAsIDEyLCAweDBmLSA2ICxCQ1JfSUxDUkN9LAorCXsgIDUsIDAsICA4LCAweDBmLSA1ICxCQ1JfSUxDUkN9LAorCXsgIDQsIDAsICA0LCAweDBmLSA0ICxCQ1JfSUxDUkN9LAorCXsgIDMsIDAsICAwLCAweDBmLSAzICxCQ1JfSUxDUkN9LAorCXsgIDEsIDAsIDEyLCAweDBmLSAxICxCQ1JfSUxDUkR9LAorCS8qIFNUIE5JQyAqLworCXsgMTAsIDAsICA0LCAweDBmLTEwICxCQ1JfSUxDUkR9LCAJLyogTEFOICovCisJLyogTVJTSFBDIElSUXMgc2V0dGluZyAqLworCXsgIDAsIDAsIDEyLCAweDBmLSAwICxCQ1JfSUxDUkV9LAkvKiBQQ0lSUTMgKi8KKwl7IDExLCAwLCAgOCwgMHgwZi0xMSAsQkNSX0lMQ1JFfSwgCS8qIFBDSVJRMiAqLworCXsgIDksIDAsICA0LCAweDBmLSA5ICxCQ1JfSUxDUkV9LCAJLyogUENJUlExICovCisJeyAgNywgMCwgIDAsIDB4MGYtIDcgLEJDUl9JTENSRX0sIAkvKiBQQ0lSUTAgKi8KIAkvKiAjMiwgIzEzIGFyZSBhbGxvY2F0ZWQgZm9yIFNMT1QgSVJRICMxIGFuZCAjMiAoZm9yIG5vdykgKi8KIAkvKiBOT1RFOiAjMiBhbmQgIzEzIGFyZSBub3QgdXNlZCBvbiBQQyAqLwotCXsgMTMsIEJDUl9JTENSRywgMSwgMHgwZi0xMyB9LCAvKiBTTE9USVJRMiAqLwotCXsgIDIsIEJDUl9JTENSRywgMCwgMHgwZi0gMiB9LCAvKiBTTE9USVJRMSAqLworCXsgMTMsIDAsICA0LCAweDBmLTEzICxCQ1JfSUxDUkd9LCAJLyogU0xPVElSUTIgKi8KKwl7ICAyLCAwLCAgMCwgMHgwZi0gMiAsQkNSX0lMQ1JHfSwgCS8qIFNMT1RJUlExICovCiAjZW5kaWYKIH07CiAKQEAgLTgxLDUgKzEyMSw1IEBACiAJY3RybF9vdXR3KDAsIEJDUl9JTENSRik7CiAJY3RybF9vdXR3KDAsIEJDUl9JTENSRyk7CiAjZW5kaWYKLQltYWtlX2lwcl9pcnEoc2U3NzB4X2lwcl9tYXAsIEFSUkFZX1NJWkUoc2U3NzB4X2lwcl9tYXApKTsKKwltYWtlX3NlNzcweF9pcnEoc2U3NzB4X2lwcl9tYXAsIEFSUkFZX1NJWkUoc2U3NzB4X2lwcl9tYXApKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2xlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTNkZDgzLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvbGVkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9sZWQuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTdHVhcnQgTWVuZWZ5IDxzdHVhcnQubWVuZWZ5QHN0LmNvbT4KLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIFNvbHV0aW9uIEVuZ2luZSBzcGVjaWZpYyBMRUQgY29kZS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxhc20vc2UuaD4KLQotLyogQ3ljbGUgdGhlIExFRCdzIGluIHRoZSBjbGFzaWMgS25pZ2h0cmlkZXIvU3VuIHBhdHRlcm4gKi8KLXZvaWQgaGVhcnRiZWF0X3NlKHZvaWQpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBjbnQgPSAwLCBwZXJpb2QgPSAwOwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KiBwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilQQV9MRUQ7Ci0Jc3RhdGljIHVuc2lnbmVkIGJpdCA9IDAsIHVwID0gMTsKLQotCWNudCArPSAxOwotCWlmIChjbnQgPCBwZXJpb2QpIHsKLQkJcmV0dXJuOwotCX0KLQotCWNudCA9IDA7Ci0KLQkvKiBHbyB0aHJvdWdoIHRoZSBwb2ludHMgKHJvdWdobHkhKToKLQkgKiBmKDApPTEwLCBmKDEpPTE2LCBmKDIpPTIwLCBmKDUpPTM1LGYoaW5mKS0+MTEwCi0JICovCi0JcGVyaW9kID0gMTEwIC0gKCAoMzAwPDxGU0hJRlQpLwotCQkJICgoYXZlbnJ1blswXS81KSArICgzPDxGU0hJRlQpKSApOwotCi0JaWYgKHVwKSB7Ci0JCWlmIChiaXQgPT0gNykgewotCQkJYml0LS07Ci0JCQl1cD0wOwotCQl9IGVsc2UgewotCQkJYml0ICsrOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGJpdCA9PSAwKSB7Ci0JCQliaXQrKzsKLQkJCXVwPTE7Ci0JCX0gZWxzZSB7Ci0JCQliaXQtLTsKLQkJfQotCX0KLQkqcCA9IDE8PChiaXQrOCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvc2V0dXAuYwppbmRleCBhMWQ1MWQ1Li40NWNiYzM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9zZXR1cC5jCkBAIC0xLDUgKzEsNCBAQAotLyogJElkOiBzZXR1cC5jLHYgMS4xLjIuNCAyMDAyLzAzLzAyIDIxOjU3OjA3IGxldGhhbCBFeHAgJAotICoKKy8qCiAgKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L3NldHVwLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEthenVtb3RvIEtvamltYQpAQCAtOCwxMiArNywxMiBAQAogICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9zZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zbWMzN2M5M3guaD4KIAotdm9pZCBoZWFydGJlYXRfc2Uodm9pZCk7CiB2b2lkIGluaXRfc2VfSVJRKHZvaWQpOwogCiAvKgpAQCAtMzYsMTEgKzM1LDYgQEAKIAlzbXNjX2NvbmZpZyhBQ1RJVkFURV9JTkRFWCwgMHgwMSk7CiAJc21zY19jb25maWcoSVJRX1NFTEVDVF9JTkRFWCwgNik7IC8qIElSUTYgKi8KIAotCS8qIElERTEgKi8KLQlzbXNjX2NvbmZpZyhDVVJSRU5UX0xETl9JTkRFWCwgTEROX0lERTEpOwotCXNtc2NfY29uZmlnKEFDVElWQVRFX0lOREVYLCAweDAxKTsKLQlzbXNjX2NvbmZpZyhJUlFfU0VMRUNUX0lOREVYLCAxNCk7IC8qIElSUTE0ICovCi0KIAkvKiBBVVhJTyAoR1BJTyk6IHRvIHVzZSBJREUxICovCiAJc21zY19jb25maWcoQ1VSUkVOVF9MRE5fSU5ERVgsIExETl9BVVhJTyk7CiAJc21zY19jb25maWcoR1BJTzQ2X0lOREVYLCAweDAwKTsgLyogbklPUk9QICovCkBAIC02OSw2ICs2MywzNiBAQAogCW91dGJfcChDT05GSUdfRVhJVCwgQ09ORklHX1BPUlQpOwogfQogCitzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFydGJlYXRfYml0X3Bvc1tdID0geyA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1IH07CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUEFfTEVELAorCQkuZW5kCT0gUEFfTEVEICsgQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcykgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiaGVhcnRiZWF0IiwKKwkuaWQJCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBoZWFydGJlYXRfYml0X3BvcywKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNlX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZoZWFydGJlYXRfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2VfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzZV9kZXZpY2VzLCBBUlJBWV9TSVpFKHNlX2RldmljZXMpKTsKK30KK19faW5pdGNhbGwoc2VfZGV2aWNlc19zZXR1cCk7CisKIC8qCiAgKiBUaGUgTWFjaGluZSBWZWN0b3IKICAqLwpAQCAtMTA3LDggKzEzMSw1IEBACiAJLm12X291dHNsCQk9IHNlX291dHNsLAogCiAJLm12X2luaXRfaXJxCQk9IGluaXRfc2VfSVJRLAotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF9zZSwKLSNlbmRpZgogfTsKIEFMSUFTX01WKHNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvTWFrZWZpbGUKaW5kZXggMTg4OTAwYy4uZGJjMjlmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL01ha2VmaWxlCkBAIC01LDQgKzUsMyBAQAogb2JqLXkJIDo9IHNldHVwLm8gaW8ubyBpcnEubwogCiBvYmotJChDT05GSUdfUENJKSArPSBwY2kubwotb2JqLSQoQ09ORklHX0hFQVJUQkVBVCkgKz0gbGVkLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL2xlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTQxOTRkLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvbGVkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9sZWQuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTdHVhcnQgTWVuZWZ5IDxzdHVhcnQubWVuZWZ5QHN0LmNvbT4KLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIFNvbHV0aW9uIEVuZ2luZSBzcGVjaWZpYyBMRUQgY29kZS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtL3NlNzc1MS5oPgotCi0vKiBDeWNsZSB0aGUgTEVEJ3MgaW4gdGhlIGNsYXNpYyBLbmlnaHRyaWRlci9TdW4gcGF0dGVybiAqLwotdm9pZCBoZWFydGJlYXRfNzc1MXNlKHZvaWQpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBjbnQgPSAwLCBwZXJpb2QgPSAwOwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KiBwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilQQV9MRUQ7Ci0Jc3RhdGljIHVuc2lnbmVkIGJpdCA9IDAsIHVwID0gMTsKLQotCWNudCArPSAxOwotCWlmIChjbnQgPCBwZXJpb2QpIHsKLQkJcmV0dXJuOwotCX0KLQotCWNudCA9IDA7Ci0KLQkvKiBHbyB0aHJvdWdoIHRoZSBwb2ludHMgKHJvdWdobHkhKToKLQkgKiBmKDApPTEwLCBmKDEpPTE2LCBmKDIpPTIwLCBmKDUpPTM1LGYoaW5mKS0+MTEwCi0JICovCi0JcGVyaW9kID0gMTEwIC0gKCAoMzAwPDxGU0hJRlQpLwotCQkJICgoYXZlbnJ1blswXS81KSArICgzPDxGU0hJRlQpKSApOwotCi0JaWYgKHVwKSB7Ci0JCWlmIChiaXQgPT0gNykgewotCQkJYml0LS07Ci0JCQl1cD0wOwotCQl9IGVsc2UgewotCQkJYml0ICsrOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGJpdCA9PSAwKSB7Ci0JCQliaXQrKzsKLQkJCXVwPTE7Ci0JCX0gZWxzZSB7Ci0JCQliaXQtLTsKLQkJfQotCX0KLQkqcCA9IDE8PChiaXQrOCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvc2V0dXAuYwppbmRleCBmN2UxZGQzLi5lM2ZlYWU2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9zZXR1cC5jCkBAIC05LDExICs5LDExIEBACiAgKiBJYW4gZGEgU2lsdmEgYW5kIEplcmVteSBTaWVnZWwsIDIwMDEuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vc2U3NzUxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXZvaWQgaGVhcnRiZWF0Xzc3NTFzZSh2b2lkKTsKIHZvaWQgaW5pdF83NzUxc2VfSVJRKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1NIX0tHREIKQEAgLTE2MSwxMSArMTYxLDQwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NIX0tHREIgKi8KIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgaGVhcnRiZWF0X2JpdF9wb3NbXSA9IHsgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSB9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFBBX0xFRCwKKwkJLmVuZAk9IFBBX0xFRCArIEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCisJLmlkCQk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gaGVhcnRiZWF0X2JpdF9wb3MsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzZTc3NTFfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNtYzkxeF9kZXZpY2UsCisJJmhlYXJ0YmVhdF9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZTc3NTFfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzZTc3NTFfZGV2aWNlcywgQVJSQVlfU0laRShzZTc3NTFfZGV2aWNlcykpOworfQorX19pbml0Y2FsbChzZTc3NTFfZGV2aWNlc19zZXR1cCk7CiAKIC8qCiAgKiBUaGUgTWFjaGluZSBWZWN0b3IKICAqLwotCiBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfNzc1MXNlIF9faW5pdG12ID0gewogCS5tdl9uYW1lCQk9ICI3NzUxIFNvbHV0aW9uRW5naW5lIiwKIAkubXZfc2V0dXAJCT0gc2g3NzUxc2Vfc2V0dXAsCkBAIC0xODksOCArMjE4LDUgQEAKIAkubXZfb3V0c2wJCT0gc2g3NzUxc2Vfb3V0c2wsCiAKIAkubXZfaW5pdF9pcnEJCT0gaW5pdF83NzUxc2VfSVJRLAotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF83NzUxc2UsCi0jZW5kaWYKIH07CiBBTElBU19NVig3NzUxc2UpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zaDAzL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvc2gwMy9NYWtlZmlsZQppbmRleCAzMjFiZTUwLi40MDAzMDZhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zaDAzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NoMDMvTWFrZWZpbGUKQEAgLTMsNCArMywzIEBACiAjCiAKIG9iai15CSA6PSBzZXR1cC5vIHJ0Yy5vCi1vYmotJChDT05GSUdfSEVBUlRCRUFUKSArPSBsZWQubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2gwMy9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL3NoMDMvbGVkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzODU2MmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2gwMy9sZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9zaDAzL2xlZC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0ICBTYWl0by5LIEludGVyZmFjZSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgSW50ZXJmYWNlIENUUC9QQ0ktU0gwMyBzcGVjaWZpYyBMRUQgY29kZS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQotLyogQ3ljbGUgdGhlIExFRCdzIGluIHRoZSBjbGFzaWMgS25pZ2h0cmlkZXIvU3VuIHBhdHRlcm4gKi8KLXZvaWQgaGVhcnRiZWF0X3NoMDModm9pZCkKLXsKLQlzdGF0aWMgdW5zaWduZWQgaW50IGNudCA9IDAsIHBlcmlvZCA9IDA7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciogcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikweGEwODAwMDAwOwotCXN0YXRpYyB1bnNpZ25lZCBiaXQgPSAwLCB1cCA9IDE7Ci0KLQljbnQgKz0gMTsKLQlpZiAoY250IDwgcGVyaW9kKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQljbnQgPSAwOwotCi0JLyogR28gdGhyb3VnaCB0aGUgcG9pbnRzIChyb3VnaGx5ISk6Ci0JICogZigwKT0xMCwgZigxKT0xNiwgZigyKT0yMCwgZig1KT0zNSxmKGluZiktPjExMAotCSAqLwotCXBlcmlvZCA9IDExMCAtICggKDMwMDw8RlNISUZUKS8KLQkJCSAoKGF2ZW5ydW5bMF0vNSkgKyAoMzw8RlNISUZUKSkgKTsKLQotCWlmICh1cCkgewotCQlpZiAoYml0ID09IDcpIHsKLQkJCWJpdC0tOwotCQkJdXA9MDsKLQkJfSBlbHNlIHsKLQkJCWJpdCArKzsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChiaXQgPT0gMCkgewotCQkJYml0Kys7Ci0JCQl1cD0xOwotCQl9IGVsc2UgewotCQkJYml0LS07Ci0JCX0KLQl9Ci0JKnAgPSAxPDxiaXQ7Ci0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NoMDMvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NoMDMvc2V0dXAuYwppbmRleCA1YWQxZTE5Li5jMDY5YzQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zaDAzL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2gwMy9zZXR1cC5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+CiAjaW5jbHVkZSA8YXNtL3NoMDMvaW8uaD4KQEAgLTQ4LDE1ICs0OSwzNiBAQAogCWJvYXJkX3RpbWVfaW5pdCA9IHNoMDNfdGltZV9pbml0OwogfQogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4YTA4MDAwMDAsCisJCS5lbmQJPSAweGEwODAwMDAwICsgOCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDAzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZoZWFydGJlYXRfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2gwM19kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoMDNfZGV2aWNlcywgQVJSQVlfU0laRShzaDAzX2RldmljZXMpKTsKK30KK19faW5pdGNhbGwoc2gwM19kZXZpY2VzX3NldHVwKTsKKwogc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3NoMDMgX19pbml0bXYgPSB7CiAJLm12X25hbWUJCT0gIkludGVyZmFjZSAoQ1RQL1BDSS1TSDAzKSIsCiAJLm12X3NldHVwCQk9IHNoMDNfc2V0dXAsCiAJLm12X25yX2lycXMJCT0gNDgsCiAJLm12X2lvcG9ydF9tYXAJCT0gc2gwM19pb3BvcnRfbWFwLAogCS5tdl9pbml0X2lycQkJPSBpbml0X3NoMDNfSVJRLAotCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotCS5tdl9oZWFydGJlYXQJCT0gaGVhcnRiZWF0X3NoMDMsCi0jZW5kaWYKIH07CiBBTElBU19NVihzaDAzKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2htaW4vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NobWluL3NldHVwLmMKaW5kZXggYTMxYTFkMS4uNGE5ZGY0YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2htaW4vc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zaG1pbi9zZXR1cC5jCkBAIC0xMiwxMiArMTIsMjIgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNkZWZpbmUgUEZDX1BIQ1IJMHhhNDAwMDEwZQorI2RlZmluZSBQRkNfUEhDUgkweGE0MDAwMTBlVUwKKyNkZWZpbmUgSU5UQ19JQ1IxCTB4YTQwMDAwMTBVTAorI2RlZmluZSBJTlRDX0lQUkMJMHhhNDAwMDAxNlVMCisKK3N0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgc2htaW5faXByX21hcFtdID0geworCXsgLmlycT0zMiwgLmFkZHI9SU5UQ19JUFJDLCAuc2hpZnQ9IDAsIC5wcmlvcml0eT0wIH0sCisJeyAuaXJxPTMzLCAuYWRkcj1JTlRDX0lQUkMsIC5zaGlmdD0gNCwgLnByaW9yaXR5PTAgfSwKKwl7IC5pcnE9MzQsIC5hZGRyPUlOVENfSVBSQywgLnNoaWZ0PSA4LCAucHJpb3JpdHk9OCB9LAorCXsgLmlycT0zNSwgLmFkZHI9SU5UQ19JUFJDLCAuc2hpZnQ9MTIsIC5wcmlvcml0eT0wIH0sCit9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9zaG1pbl9pcnEodm9pZCkKIHsKIAljdHJsX291dHcoMHgyYTAwLCBQRkNfUEhDUik7CS8vIElSUTAtMz1JUlEKIAljdHJsX291dHcoMHgwYWFhLCBJTlRDX0lDUjEpOwkvLyBJUlEwLTM9SVJRLW1vZGUsTG93LWFjdGl2ZS4KKwltYWtlX2lwcl9pcnEoc2htaW5faXByX21hcCwgQVJSQVlfU0laRShzaG1pbl9pcHJfbWFwKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnNobWluX2lvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL3ZveWFnZXJneC9pcnEuYyBiL2FyY2gvc2gvY2NoaXBzL3ZveWFnZXJneC9pcnEuYwppbmRleCBmN2VhNzAwLi43MGYxMjkwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NjaGlwcy92b3lhZ2VyZ3gvaXJxLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvdm95YWdlcmd4L2lycS5jCkBAIC0yOCwyMSArMjgsMjEgQEAKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChpcnEgLSBWT1lBR0VSX0lSUV9CQVNFKTsKIAotICAgIAlwcl9kZWJ1ZygiZGlzYWJsZV92b3lhZ2VyZ3hfaXJxKCVkKTogbWFzaz0lbHhcbiIsIGlycSwgbWFzayk7Ci0gICAgICAgIHZhbCA9IGlubChWT1lBR0VSX0lOVF9NQVNLKTsKLSAgICAgICAgdmFsICY9IH5tYXNrOwotICAgICAgICBvdXRsKHZhbCwgVk9ZQUdFUl9JTlRfTUFTSyk7CisJcHJfZGVidWcoImRpc2FibGVfdm95YWdlcmd4X2lycSglZCk6IG1hc2s9JXhcbiIsIGlycSwgbWFzayk7CisJdmFsID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKVZPWUFHRVJfSU5UX01BU0spOworCXZhbCAmPSB+bWFzazsKKwl3cml0ZWwodmFsLCAodm9pZCBfX2lvbWVtICopVk9ZQUdFUl9JTlRfTUFTSyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV92b3lhZ2VyZ3hfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsOwotICAgICAgICB1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChpcnEgLSBWT1lBR0VSX0lSUV9CQVNFKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChpcnEgLSBWT1lBR0VSX0lSUV9CQVNFKTsKIAotICAgICAgICBwcl9kZWJ1ZygiZGlzYWJsZV92b3lhZ2VyZ3hfaXJxKCVkKTogbWFzaz0lbHhcbiIsIGlycSwgbWFzayk7Ci0gICAgICAgIHZhbCA9IGlubChWT1lBR0VSX0lOVF9NQVNLKTsKLSAgICAgICAgdmFsIHw9IG1hc2s7Ci0gICAgICAgIG91dGwodmFsLCBWT1lBR0VSX0lOVF9NQVNLKTsKKwlwcl9kZWJ1ZygiZGlzYWJsZV92b3lhZ2VyZ3hfaXJxKCVkKTogbWFzaz0leFxuIiwgaXJxLCBtYXNrKTsKKwl2YWwgPSByZWFkbCgodm9pZCBfX2lvbWVtICopVk9ZQUdFUl9JTlRfTUFTSyk7CisJdmFsIHw9IG1hc2s7CisJd3JpdGVsKHZhbCwgKHZvaWQgX19pb21lbSAqKVZPWUFHRVJfSU5UX01BU0spOwogfQogCiBzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfdm95YWdlcmd4KHVuc2lnbmVkIGludCBpcnEpCkBAIC02OCwyMCArNjgsMjAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSB2b3lhZ2VyZ3hfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIlZPWUFHRVJHWC1JUlEiLAotCS5zdGFydHVwID0gc3RhcnR1cF92b3lhZ2VyZ3hfaXJxLAotCS5zaHV0ZG93biA9IHNodXRkb3duX3ZveWFnZXJneF9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV92b3lhZ2VyZ3hfaXJxLAotCS5kaXNhYmxlID0gZGlzYWJsZV92b3lhZ2VyZ3hfaXJxLAotCS5hY2sgPSBtYXNrX2FuZF9hY2tfdm95YWdlcmd4LAotCS5lbmQgPSBlbmRfdm95YWdlcmd4X2lycSwKKwkudHlwZW5hbWUJPSAiVk9ZQUdFUkdYLUlSUSIsCisJLnN0YXJ0dXAJPSBzdGFydHVwX3ZveWFnZXJneF9pcnEsCisJLnNodXRkb3duCT0gc2h1dGRvd25fdm95YWdlcmd4X2lycSwKKwkuZW5hYmxlCQk9IGVuYWJsZV92b3lhZ2VyZ3hfaXJxLAorCS5kaXNhYmxlCT0gZGlzYWJsZV92b3lhZ2VyZ3hfaXJxLAorCS5hY2sJCT0gbWFza19hbmRfYWNrX3ZveWFnZXJneCwKKwkuZW5kCQk9IGVuZF92b3lhZ2VyZ3hfaXJxLAogfTsKIAogc3RhdGljIGlycXJldHVybl90IHZveWFnZXJneF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXByaW50ayhLRVJOX0lORk8KIAkgICAgICAgIlZveWFnZXJHWDogc3B1cmlvdXMgaW50ZXJydXB0LCBzdGF0dXM6IDB4JXhcbiIsCi0JICAgICAgIAkJaW5sKElOVF9TVEFUVVMpKTsKKwkJCSh1bnNpZ25lZCBpbnQpcmVhZGwoKHZvaWQgX19pb21lbSAqKUlOVF9TVEFUVVMpKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTkzLDEzICs5MywxMyBAQAogdm9pZCB2b3lhZ2VyZ3hfcmVnaXN0ZXJfaXJxX2RlbXV4KGludCBpcnEsCiAJCWludCAoKmRlbXV4KShpbnQgaXJxLCB2b2lkICpkZXYpLCB2b2lkICpkZXYpCiB7Ci0gICAgCXZveWFnZXJneF9kZW11eFtpcnEgLSBWT1lBR0VSX0lSUV9CQVNFXS5mdW5jID0gZGVtdXg7Ci0gICAgCXZveWFnZXJneF9kZW11eFtpcnEgLSBWT1lBR0VSX0lSUV9CQVNFXS5kZXYgPSBkZXY7CisJdm95YWdlcmd4X2RlbXV4W2lycSAtIFZPWUFHRVJfSVJRX0JBU0VdLmZ1bmMgPSBkZW11eDsKKwl2b3lhZ2VyZ3hfZGVtdXhbaXJxIC0gVk9ZQUdFUl9JUlFfQkFTRV0uZGV2ID0gZGV2OwogfQogCiB2b2lkIHZveWFnZXJneF91bnJlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxKQogewotICAgIAl2b3lhZ2VyZ3hfZGVtdXhbaXJxIC0gVk9ZQUdFUl9JUlFfQkFTRV0uZnVuYyA9IDA7CisJdm95YWdlcmd4X2RlbXV4W2lycSAtIFZPWUFHRVJfSVJRX0JBU0VdLmZ1bmMgPSAwOwogfQogCiBpbnQgdm95YWdlcmd4X2lycV9kZW11eChpbnQgaXJxKQpAQCAtMTA3LDMxICsxMDcsMjUgQEAKIAogCWlmIChpcnEgPT0gSVJRX1ZPWUFHRVIgKSB7CiAJCXVuc2lnbmVkIGxvbmcgaSA9IDAsIGJpdCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Ci0JCXVuc2lnbmVkIGxvbmcgdmFsICA9IGlubChJTlRfU1RBVFVTKTsKLSNpZiAxCi0JCWlmICggdmFsICYgKCAxIDw8IDEgKSl7CisJCXVuc2lnbmVkIGxvbmcgdmFsICA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKilJTlRfU1RBVFVTKTsKKworCQlpZiAodmFsICYgKDEgPDwgMSkpCiAJCQlpID0gMTsKLQkJfSBlbHNlIGlmICggdmFsICYgKCAxIDw8IDIgKSl7CisJCWVsc2UgaWYgKHZhbCAmICgxIDw8IDIpKQogCQkJaSA9IDI7Ci0JCX0gZWxzZSBpZiAoIHZhbCAmICggMSA8PCA2ICkpeworCQllbHNlIGlmICh2YWwgJiAoMSA8PCA2KSkKIAkJCWkgPSA2OwotCQl9IGVsc2UgaWYoIHZhbCAmICggMSA8PCAxMCApKXsKKwkJZWxzZSBpZiAodmFsICYgKDEgPDwgMTApKQogCQkJaSA9IDEwOwotCQl9IGVsc2UgaWYoIHZhbCAmICggMSA8PCAxMSApKXsKKwkJZWxzZSBpZiAodmFsICYgKDEgPDwgMTEpKQogCQkJaSA9IDExOwotCQl9IGVsc2UgaWYoIHZhbCAmICggMSA8PCAxMiApKXsKKwkJZWxzZSBpZiAodmFsICYgKDEgPDwgMTIpKQogCQkJaSA9IDEyOwotCQl9IGVsc2UgaWYoIHZhbCAmICggMSA8PCAxNyApKXsKKwkJZWxzZSBpZiAodmFsICYgKDEgPDwgMTcpKQogCQkJaSA9IDE3OwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlwcmludGsoIlVuZXhwZWN0ZWQgSVJRIGlycSA9ICVkIHN0YXR1cyA9IDB4JTA4bHhcbiIsIGlycSwgdmFsKTsKLQkJfQotCQlwcl9kZWJ1Zygidm95YWdlcmd4X2lycV9kZW11eCAlbGRcbiIsIGkpOwotI2Vsc2UKLQkJZm9yIChiaXQgPSAxLCBpID0gMCA7IGkgPCBWT1lBR0VSX0lSUV9OVU0gOyBiaXQgPDw9IDEsIGkrKykKLQkJCWlmICh2YWwgJiBiaXQpCi0JCQkJYnJlYWs7Ci0jZW5kaWYKKwkJcHJfZGVidWcoInZveWFnZXJneF9pcnFfZGVtdXggJWQgXG4iLCBpKTsKICAgICAJICAgIAlpZiAoaSA8IFZPWUFHRVJfSVJRX05VTSkgewogCQkJaXJxID0gVk9ZQUdFUl9JUlFfQkFTRSArIGk7CiAgICAgCSAgICAJCWlmICh2b3lhZ2VyZ3hfZGVtdXhbaV0uZnVuYyAhPSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jY2hpcHMvdm95YWdlcmd4L3NldHVwLmMgYi9hcmNoL3NoL2NjaGlwcy92b3lhZ2VyZ3gvc2V0dXAuYwppbmRleCA2NmIyZmVkLi4zM2YwMzAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NjaGlwcy92b3lhZ2VyZ3gvc2V0dXAuYworKysgYi9hcmNoL3NoL2NjaGlwcy92b3lhZ2VyZ3gvc2V0dXAuYwpAQCAtMTksNyArMTksNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCi0JdmFsID0gaW5sKERSQU1fQ1RSTCk7CisJdmFsID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKURSQU1fQ1RSTCk7CiAJdmFsIHw9IChEUkFNX0NUUkxfQ1BVX0NPTFVNTl9TSVpFXzI1Ngl8CiAJCURSQU1fQ1RSTF9DUFVfQUNUSVZFX1BSRUNIQVJHRQl8CiAJCURSQU1fQ1RSTF9DUFVfUkVTRVQJCXwKQEAgLTI5LDcgKzI5LDcgQEAKIAkJRFJBTV9DVFJMX0FDVElWRV9QUkVDSEFSR0UJfAogCQlEUkFNX0NUUkxfUkVTRVQJCQl8CiAJCURSQU1fQ1RSTF9SRU1BSU5fQUNUSVZFKTsKLQlvdXRsKHZhbCwgRFJBTV9DVFJMKTsKKwl3cml0ZWwodmFsLCAodm9pZCBfX2lvbWVtICopRFJBTV9DVFJMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRfZGVmY29uZmlnCmluZGV4IDA5OWU5OGYuLmRiNmEwMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZF9kZWZjb25maWcKQEAgLTEsMTUgKzEsMjEgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOAotIyBUdWUgT2N0ICAzIDExOjM4OjM2IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAorIyBUaHUgRmViIDE1IDE3OjE3OjI5IDIwMDcKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMzMsOCArMzksOCBAQAogIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CkBAIC05NywxMCArMTAzLDggQEAKICMgQ09ORklHX1NIXzczMTgwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF83NzUxX1NZU1RFTUggaXMgbm90IHNldAogIyBDT05GSUdfU0hfSFA2WFggaXMgbm90IHNldAotIyBDT05GSUdfU0hfRUMzMTA0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NBVFVSTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9EUkVBTUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfU0hfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX01QQzEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU0gwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMCBpcyBub3Qgc2V0CkBAIC0xMTMsNiArMTE3LDkgQEAKICMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldAogIyBDT05GSUdfU0hfU0hNSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzYxOV9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfQVNEQVAzMTAgaXMgbm90IHNldAogIyBDT05GSUdfU0hfVU5LTk9XTiBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNCw2ICsxMzEsMTIgQEAKICMgU0gtMiBQcm9jZXNzb3IgU3VwcG9ydAogIwogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisKKyMKKyMgU0gtMkEgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CiAKICMKICMgU0gtMyBQcm9jZXNzb3IgU3VwcG9ydApAQCAtMTU5LDEyICsxNzIsMTQgQEAKICMKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKIAogIwogIyBTSDRBTC1EU1AgUHJvY2Vzc29yIFN1cHBvcnQKICMKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CiAKICMKICMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucwpAQCAtMTc0LDYgKzE4OSw5IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCiBDT05GSUdfVlNZU0NBTEw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0xODMsNiArMjAxLDcgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtMTk1LDExICsyMTQsMTQgQEAKICMgUHJvY2Vzc29yIGZlYXR1cmVzCiAjCiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX1NIX0ZQVT15CiAjIENPTkZJR19TSF9EU1AgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RPUkVfUVVFVUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19JUFJfSVJRPXkKIENPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUE9eQogCiAjCiAjIFRpbWVyIHN1cHBvcnQKQEAgLTIxMCw2ICsyMzIsOCBAQAogIyBSVFM3NzUxUjJEIG9wdGlvbnMKICMKIENPTkZJR19SVFM3NzUxUjJEX1JFVjExPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKKyMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAogQ09ORklHX1NIX1BDTEtfRlJFUT02MDAwMDAwMAogCiAjCkBAIC0yMzIsMTAgKzI1NiwxNiBAQAogQ09ORklHX0hFQVJUQkVBVD15CiAKICMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIwogIyBLZXJuZWwgZmVhdHVyZXMKICMKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKQEAgLTI1MSw3ICsyODEsNyBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9CT09MPXkKLUNPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvaGRhMSIKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTI2MCw3ICsyOTAsNiBAQAogQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfUENJX0FVVE89eQogQ09ORklHX1BDSV9BVVRPX1VQREFURV9SRVNPVVJDRVM9eQotIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CkBAIC0zMDIsNiArMzMxLDcgQEAKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTMxOSwxMSArMzQ5LDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zODAsNyArNDEyLDcgQEAKICMKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPW0KICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwpAQCAtNDIyLDQ0ICs0NTQsMTQ1IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCi1DT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9JREVQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKICMKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX1BMQVRGT1JNPXkKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNDcwLDYgKzYwMyw5IEBACiAjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CkBAIC01NDAsNiArNjc2LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC01NTksMTQgKzY5NiwxNyBAQAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02MTEsNiArNzUxLDcgQEAKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKQEAgLTY0NiwxNCArNzg3LDIzIEBACiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTA9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwotIyBDT05GSUdfU0VSSUFMX1NIX1NDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz0xCitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVg5OF9QVFlTIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAKQEAgLTY3MSwxMCArODIxLDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCkBAIC02ODIsNyArODI4LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC02OTgsNiArODQzLDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNzA2LDE4ICs4NTIsMTQgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC03NTksNyArOTAxLDYgQEAKIENPTkZJR19TTkRfTVBVNDAxX1VBUlQ9bQogQ09ORklHX1NORF9PUEwzX0xJQj1tCiBDT05GSUdfU05EX0FDOTdfQ09ERUM9bQotQ09ORklHX1NORF9BQzk3X0JVUz1tCiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKQEAgLTc4Miw2ICs5MjMsMTggQEAKICMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CkBAIC04MDEsNiArOTU0LDcgQEAKICMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKQEAgLTgxMywxNyArOTY3LDIyIEBACiAjIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKIAogIworIyBTb0MgYXVkaW8gc3VwcG9ydAorIworIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisKKyMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKIENPTkZJR19TT1VORF9QUklNRT1tCi0jIENPTkZJR19PU1NfT0JTT0xFVEVfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX09CU09MRVRFX09TUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9CVDg3OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9FUzEzNzEgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfSUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9WSUE4MkNYWFggaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPW0KIAogIwogIyBVU0Igc3VwcG9ydApAQCAtODcyLDcgKzEwMzEsMjkgQEAKICMKICMgUmVhbCBUaW1lIENsb2NrCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1NIPXkKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwogIyBETUEgRW5naW5lIHN1cHBvcnQKQEAgLTg4OCwxNiArMTA2OSwyNiBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlOSVhfRlM9eQogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtOTMyLDcgKzExMjMsOCBAQAogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKQEAgLTEwMTgsNiArMTIxMCwxMSBAQAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogQ09ORklHX1BST0ZJTElORz15CkBAIC0xMDI2LDE2ICsxMjIzLDIwIEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CitDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmU4MDAwMAorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA1Miw4ICsxMjUzLDExIEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcKaW5kZXggNWQzNTdkNi4uNGU2ZTc3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgKLSMgVHVlIE9jdCAgMyAxMTo0OTowMSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmMyCisjIFRodSBEZWMgMjggMjM6MTU6NDkgMjAwNgogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CkBAIC0xMCw2ICsxMCwxMSBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMzUsNiArNDAsNyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC0xMTYsNiArMTIyLDggQEAKICMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldAogIyBDT05GSUdfU0hfU0hNSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzYxOV9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0hfVU5LTk9XTiBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNyw2ICsxMzUsMTIgQEAKICMgU0gtMiBQcm9jZXNzb3IgU3VwcG9ydAogIwogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisKKyMKKyMgU0gtMkEgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CiAKICMKICMgU0gtMyBQcm9jZXNzb3IgU3VwcG9ydApAQCAtMTYyLDEyICsxNzYsMTQgQEAKICMKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKIAogIwogIyBTSDRBTC1EU1AgUHJvY2Vzc29yIFN1cHBvcnQKICMKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CiAKICMKICMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucwpAQCAtMTc3LDYgKzE5Myw5IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDAyMDAwMDAwCiBDT05GSUdfVlNZU0NBTEw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0yMDIsMTcgKzIyMSwyMiBAQAogIyBQcm9jZXNzb3IgZmVhdHVyZXMKICMKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfU0hfRlBVPXkKICMgQ09ORklHX1NIX0RTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVE9SRV9RVUVVRVMgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX0lQUl9JUlE9eQogQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfUFRFQT15CiAKICMKICMgVGltZXIgc3VwcG9ydAogIwogQ09ORklHX1NIX1RNVT15Ci1DT05GSUdfU0hfUENMS19GUkVRPTUwMDAwMDAwCitDT05GSUdfU0hfVElNRVJfSVJRPTE2CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKIAogIwogIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKQEAgLTIzMSwxMCArMjU1LDE2IEBACiBDT05GSUdfSEVBUlRCRUFUPXkKIAogIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCiAjIEtlcm5lbCBmZWF0dXJlcwogIwogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldApAQCAtMjQ5LDggKzI3OSw3IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDM4NDAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMTMsMTEgKzM0MiwxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldApAQCAtNDgwLDE2ICs1MTEsNzkgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0CitDT05GSUdfSURFPXkKK0NPTkZJR19JREVfTUFYX0hXSUZTPTQKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCisjIENPTkZJR19CTEtfREVWX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKQEAgLTYzMywxNyArNzI3LDEyIEBACiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC02NTksNiArNzQ4LDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNjY3LDE4ICs3NTcsMTQgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC03NTgsMTQgKzg0NCwyMCBAQAogIwogCiAjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgxNCw3ICs5MDYsNiBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQpAQCAtODc1LDYgKzk2NiwxMSBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC04ODIsMTQgKzk3OCwxNiBAQAogIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtOTA4LDYgKzEwMDYsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKQEAgLTkxNSwzICsxMDE0LDQgQEAKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0lPTUFQX0NPUFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL01ha2VmaWxlIGIvYXJjaC9zaC9kcml2ZXJzL01ha2VmaWxlCmluZGV4IGJmMThkYmYuLjZjYjkyNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTYsMyArNiw0IEBACiBvYmotJChDT05GSUdfU0hfRE1BKQkJKz0gZG1hLwogb2JqLSQoQ09ORklHX1NVUEVSSFlXQVkpCSs9IHN1cGVyaHl3YXkvCiBvYmotJChDT05GSUdfUFVTSF9TV0lUQ0gpCSs9IHB1c2gtc3dpdGNoLm8KK29iai0kKENPTkZJR19IRUFSVEJFQVQpCQkrPSBoZWFydGJlYXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKaW5kZXggZjYzNzIxZS4uMDZlZDA2MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCkBAIC0xOSwzNCArMTksMjYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJkbWEtc2guaCIKIAotCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1NINAotc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBkbWFlX2lwcl9tYXBbXSA9IHsKLQl7IERNQUVfSVJRLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkgfSwKLX07CitzdGF0aWMgaW50IGRtdGVfaXJxX21hcFtdID0geworCURNVEUwX0lSUSwKKwlETVRFMV9JUlEsCisJRE1URTJfSVJRLAorCURNVEUzX0lSUSwKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKSB8fAlcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSAgfHwJXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKKwlETVRFNF9JUlEsCisJRE1URTVfSVJRLAorCURNVEU2X0lSUSwKKwlETVRFN19JUlEsICAgIAogI2VuZGlmCi1zdGF0aWMgc3RydWN0IGlwcl9kYXRhIGRtdGVfaXByX21hcFtdID0gewotCS8qCi0JICogTm9ybWFsbHkgd2UgY291bGQganVzdCBkbyBETVRFMF9JUlEgKyBjaGFuIG91dHJpZ2h0LCB0aG91Z2ggaW4gdGhlCi0JICogY2FzZSBvZiB0aGUgNzc1MVIsIHRoZSBETVRFIElSUXMgZm9yIGNoYW5uZWxzID4gNCBzdGFydCByaWdodCBhYm92ZQotCSAqIHRoZSBTQ0lGCi0JICovCi0JeyBETVRFMF9JUlEgKyAwLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkgfSwKLQl7IERNVEUwX0lSUSArIDEsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSB9LAotCXsgRE1URTBfSVJRICsgMiwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZIH0sCi0JeyBETVRFMF9JUlEgKyAzLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkgfSwKLQl7IERNVEU0X0lSUSArIDAsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSB9LAotCXsgRE1URTRfSVJRICsgMSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZIH0sCi0JeyBETVRFNF9JUlEgKyAyLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkgfSwKLQl7IERNVEU0X0lSUSArIDMsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSB9LAogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2RtdGVfaXJxKHVuc2lnbmVkIGludCBjaGFuKQogewogCXVuc2lnbmVkIGludCBpcnEgPSAwOwotCWlmIChjaGFuIDwgQVJSQVlfU0laRShkbXRlX2lwcl9tYXApKQotCQlpcnEgPSBkbXRlX2lwcl9tYXBbY2hhbl0uaXJxOworCWlmIChjaGFuIDwgQVJSQVlfU0laRShkbXRlX2lycV9tYXApKQorCQlpcnEgPSBkbXRlX2lycV9tYXBbY2hhbl07CiAJcmV0dXJuIGlycTsKIH0KIApAQCAtMTAzLDcgKzk1LDcgQEAKIAlmcmVlX2lycShnZXRfZG10ZV9pcnEoY2hhbi0+Y2hhbiksIGNoYW4pOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogc2hfZG1hY19jb25maWd1cmVfY2hhbm5lbChzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGxvbmcgY2hjcikKIHsKIAlpZiAoIWNoY3IpCkBAIC0xMTksNiArMTExLDcgQEAKIAljdHJsX291dGwoY2hjciwgQ0hDUltjaGFuLT5jaGFuXSk7CiAKIAljaGFuLT5mbGFncyB8PSBETUFfQ09ORklHVVJFRDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2hfZG1hY19lbmFibGVfZG1hKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKQEAgLTI2MiwxNyArMjU1LDExIEBACiAJaW50IGk7CiAKICNpZmRlZiBDT05GSUdfQ1BVX1NINAotCW1ha2VfaXByX2lycShkbWFlX2lwcl9tYXAsIEFSUkFZX1NJWkUoZG1hZV9pcHJfbWFwKSk7CiAJaSA9IHJlcXVlc3RfaXJxKERNQUVfSVJRLCBkbWFfZXJyLCBJUlFGX0RJU0FCTEVELCAiRE1BQyBBZGRyZXNzIEVycm9yIiwgMCk7CiAJaWYgKHVubGlrZWx5KGkgPCAwKSkKIAkJcmV0dXJuIGk7CiAjZW5kaWYKIAotCWkgPSBpbmZvLT5ucl9jaGFubmVsczsKLQlpZiAoaSA+IEFSUkFZX1NJWkUoZG10ZV9pcHJfbWFwKSkKLQkJaSA9IEFSUkFZX1NJWkUoZG10ZV9pcHJfbWFwKTsKLQltYWtlX2lwcl9pcnEoZG10ZV9pcHJfbWFwLCBpKTsKLQogCS8qCiAJICogSW5pdGlhbGl6ZSBETUFPUiwgYW5kIGNsZWFuIHVwIGFueSBlcnJvciBmbGFncyB0aGF0IG1heSBoYXZlCiAJICogYmVlbiBzZXQuCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvaGVhcnRiZWF0LmMgYi9hcmNoL3NoL2RyaXZlcnMvaGVhcnRiZWF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1OWNiNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvZHJpdmVycy9oZWFydGJlYXQuYwpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIEdlbmVyaWMgaGVhcnRiZWF0IGRyaXZlciBmb3IgcmVndWxhciBMRUQgYmFua3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqCisgKiBNb3N0IFNIIHJlZmVyZW5jZSBib2FyZHMgaW5jbHVkZSBhIG51bWJlciBvZiBpbmRpdmlkdWFsIExFRHMgdGhhdCBjYW4KKyAqIGJlIGluZGVwZW5kZW50bHkgY29udHJvbGxlZCAoZWl0aGVyIHZpYSBhIHByZS1kZWZpbmVkIGhhcmR3YXJlCisgKiBmdW5jdGlvbiBvciB2aWEgdGhlIExFRCBjbGFzcywgaWYgZGVzaXJlZCAtLSB0aGUgaGFyZHdhcmUgdGVuZHMgdG8KKyAqIGVuY2Fwc3VsYXRlIHNvbWUgb2YgdGhlIHNhbWUgInRyaWdnZXJzIiB0aGF0IHRoZSBMRUQgY2xhc3Mgc3VwcG9ydHMsCisgKiBzbyB0aGVyZSdzIG5vdCB0b28gbXVjaCB2YWx1ZSBpbiBpdCkuCisgKgorICogQWRkaXRpb25hbGx5LCBtb3N0IG9mIHRoZXNlIGJvYXJkcyBhbHNvIGhhdmUgYSBMRUQgYmFuayB0aGF0IHdlJ3ZlCisgKiB0cmFkaXRpb25hbGx5IHVzZWQgZm9yIHN0cm9iaW5nIHRoZSBsb2FkIGF2ZXJhZ2UuIFRoaXMgdXNlIGNhc2UgaXMKKyAqIGhhbmRsZWQgYnkgdGhpcyBkcml2ZXIsIHJhdGhlciB0aGFuIGdpdmluZyBlYWNoIExFRCBiaXQgcG9zaXRpb24gaXRzCisgKiBvd24gc3RydWN0IGRldmljZS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2RlZmluZSBEUlZfTkFNRSAiaGVhcnRiZWF0IgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4xLjAiCisKK3N0cnVjdCBoZWFydGJlYXRfZGF0YSB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXVuc2lnbmVkIGNoYXIgYml0X3Bvc1s4XTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKK3N0YXRpYyB2b2lkIGhlYXJ0YmVhdF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGhlYXJ0YmVhdF9kYXRhICpoZCA9IChzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgKilkYXRhOworCXN0YXRpYyB1bnNpZ25lZCBiaXQgPSAwLCB1cCA9IDE7CisKKwljdHJsX291dHcoMSA8PCBoZC0+Yml0X3Bvc1tiaXRdLCAodW5zaWduZWQgbG9uZyloZC0+YmFzZSk7CisJaWYgKHVwKQorCQlpZiAoYml0ID09IChBUlJBWV9TSVpFKGhkLT5iaXRfcG9zKSAtIDEpKSB7CisJCQliaXQtLTsKKwkJCXVwID0gMDsKKwkJfSBlbHNlCisJCQliaXQrKzsKKwllbHNlIGlmIChiaXQgPT0gMCkKKwkJdXAgPSAxOworCWVsc2UKKwkJYml0LS07CisKKwltb2RfdGltZXIoJmhkLT50aW1lciwgamlmZmllcyArICgxMTAgLSAoKDMwMCA8PCBGU0hJRlQpIC8KKwkJCSgoYXZlbnJ1blswXSAvIDUpICsgKDMgPDwgRlNISUZUKSkpKSk7Cit9CisKK3N0YXRpYyBpbnQgaGVhcnRiZWF0X2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBoZWFydGJlYXRfZGF0YSAqaGQ7CisKKwlpZiAodW5saWtlbHkocGRldi0+bnVtX3Jlc291cmNlcyAhPSAxKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIG51bWJlciBvZiByZXNvdXJjZXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICh1bmxpa2VseShyZXMgPT0gTlVMTCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWhkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhlYXJ0YmVhdF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFoZCkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCW1lbWNweShoZC0+Yml0X3BvcywgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsCisJCSAgICAgICBBUlJBWV9TSVpFKGhkLT5iaXRfcG9zKSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGQtPmJpdF9wb3MpOyBpKyspCisJCQloZC0+Yml0X3Bvc1tpXSA9IGk7CisJfQorCisJaGQtPmJhc2UgPSAodm9pZCBfX2lvbWVtICopcmVzLT5zdGFydDsKKworCXNldHVwX3RpbWVyKCZoZC0+dGltZXIsIGhlYXJ0YmVhdF90aW1lciwgKHVuc2lnbmVkIGxvbmcpaGQpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhkKTsKKworCXJldHVybiBtb2RfdGltZXIoJmhkLT50aW1lciwgamlmZmllcyArIDEpOworfQorCitzdGF0aWMgaW50IGhlYXJ0YmVhdF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGhlYXJ0YmVhdF9kYXRhICpoZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZGVsX3RpbWVyX3N5bmMoJmhkLT50aW1lcik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWtmcmVlKGhkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoZWFydGJlYXRfZHJpdmVyID0geworCS5wcm9iZQkJPSBoZWFydGJlYXRfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gaGVhcnRiZWF0X2Rydl9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJWX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGhlYXJ0YmVhdF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFIERSVl9OQU1FICI6IHZlcnNpb24gJXMgbG9hZGVkXG4iLCBEUlZfVkVSU0lPTik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaGVhcnRiZWF0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBoZWFydGJlYXRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZoZWFydGJlYXRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGhlYXJ0YmVhdF9pbml0KTsKK21vZHVsZV9leGl0KGhlYXJ0YmVhdF9leGl0KTsKKworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0FVVEhPUigiUGF1bCBNdW5kdCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCA5ZTAwY2I4Li5jYzhkMGQwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDYgQEAKIG9iai0kKENPTkZJR19TSF9EUkVBTUNBU1QpCQkrPSBvcHMtZHJlYW1jYXN0Lm8gZml4dXBzLWRyZWFtY2FzdC5vIFwKIAkJCQkJICAgZG1hLWRyZWFtY2FzdC5vCiBvYmotJChDT05GSUdfU0hfU0VDVVJFRURHRTU0MTApCQkrPSBvcHMtc25hcGdlYXIubwotb2JqLSQoQ09ORklHX1NIX0JJR1NVUikJCQkrPSBvcHMtYmlnc3VyLm8KIG9iai0kKENPTkZJR19TSF9SVFM3NzUxUjJEKQkJKz0gb3BzLXJ0czc3NTFyMmQubyBmaXh1cHMtcnRzNzc1MXIyZC5vCiBvYmotJChDT05GSUdfU0hfU0gwMykJCQkrPSBvcHMtc2gwMy5vIGZpeHVwcy1zaDAzLm8KIG9iai0kKENPTkZJR19TSF9SNzc4MFJQKQkJKz0gb3BzLXI3NzgwcnAubyBmaXh1cHMtcjc3ODBycC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1iaWdzdXIuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWJpZ3N1ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjMxYmU3Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWJpZ3N1ci5jCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWJpZ3N1ci5jCi0gKgotICogQnkgRHVzdGluIE1jSW50aXJlIChkdXN0aW5Ac2Vuc29yaWEuY29tKSAoYykyMDAxCi0gKgotICogUG9ydGVkIHRvIG5ldyBBUEkgYnkgUGF1bCBNdW5kdCA8bGV0aGFsQGxpbnV4LXNoLm9yZz4uCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIFBDSSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIEhpdGFjaGkgQmlnIFN1ciBFdmFsdWF0aW9uIEJvYXJkCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlICJwY2ktc2g0LmgiCi0jaW5jbHVkZSA8YXNtL2JpZ3N1ci9iaWdzdXIuaD4KLQotI2RlZmluZSBCSUdTVVJfUENJX0lPCTB4NDAwMAotI2RlZmluZSBCSUdTVVJfUENJX01FTQkweGZkMDAwMDAwCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzUxX2lvX3Jlc291cmNlID0gewotCS5uYW1lCQk9ICJTSDc3NTEgSU8iLAotCS5zdGFydAkJPSBCSUdTVVJfUENJX0lPLAotCS5lbmQJCT0gQklHU1VSX1BDSV9JTyArICg2NCoxMDI0KSAtIDEsCi0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfSU8sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc1MV9tZW1fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJCT0gIlNINzc1MSBtZW0iLAotCS5zdGFydAkJPSBCSUdTVVJfUENJX01FTSwKLQkuZW5kCQk9IEJJR1NVUl9QQ0lfTUVNICsgKDY0KjEwMjQqMTAyNCkgLSAxLAotCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgcGNpX29wcyBzaDc3NTFfcGNpX29wczsKLQotc3RydWN0IHBjaV9jaGFubmVsIGJvYXJkX3BjaV9jaGFubmVsc1tdID0gewotCXsgJnNoNF9wY2lfb3BzLCAmc2g3NzUxX2lvX3Jlc291cmNlLCAmc2g3NzUxX21lbV9yZXNvdXJjZSwgMCwgMHhmZiB9LAotCXsgMCwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBzaDRfcGNpX2FkZHJlc3NfbWFwIHNoNzc1MV9wY2lfbWFwID0gewotCS53aW5kb3cwCT0gewotCQkuYmFzZQk9IFNINzc1MV9DUzNfQkFTRV9BRERSLAotCQkuc2l6ZQk9IEJJR1NVUl9MU1IwX1NJWkUsCi0JfSwKLQotCS53aW5kb3cxCT0gewotCQkuYmFzZQk9IFNINzc1MV9DUzNfQkFTRV9BRERSLAotCQkuc2l6ZQk9IEJJR1NVUl9MU1IxX1NJWkUsCi0JfSwKLX07Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBCaWcgU3VyIFBDSSBpbnRlcmZhY2UKLSAqIFNldHVwIGhhcmR3YXJlIHRvIGJlIENlbnRyYWwgRnVudGlvbgotICogQ29weSB0aGUgQlNSIHJlZ3MgdG8gdGhlIFBDSSBpbnRlcmZhY2UKLSAqIFNldHVwIFBDSSB3aW5kb3dzIGludG8gbG9jYWwgUkFNCi0gKi8KLWludCBfX2luaXQgcGNpYmlvc19pbml0X3BsYXRmb3JtKHZvaWQpCi17Ci0JcmV0dXJuIHNoNzc1MV9wY2ljX2luaXQoJnNoNzc1MV9wY2lfbWFwKTsKLX0KLQotaW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IHNsb3QsIHU4IHBpbikKLXsKLQkvKgotCSAqIFRoZSBCaWcgU3VyIGNhbiBiZSB1c2VkIGluIGEgQ1BDSSBjaGFzc2lzLCBidXQgdGhlIFNINzc1MSBQQ0kKLQkgKiBpbnRlcmZhY2UgaXMgb24gdGhlIHdyb25nIGVuZCBvZiB0aGUgYm9hcmQgc28gdGhhdCBpdCBjYW4gYWxzbwotCSAqIHN1cHBvcnQgYSBWMzIwIENQSSBpbnRlcmZhY2UgY2hpcC4uLiAgVGhlcmVmb3IgdGhlIElSUSBtYXBwaW5nIGlzCi0JICogc29tZXdoYXQgdXNlIGRlcGVuZGVudC4uLiBJJ2wgYXNzdW1lIGEgbGluZWFyIG1hcCBmb3Igbm93LCBpLmUuCi0JICogSU5UQT1zbG90MCxwaW4wLi4uIElOVEQ9c2xvdDMscGluMC4uLgotCSAqLwotCWludCBpcnEgPSAoc2xvdCArIHBpbi0xKSAlIDQgKyBCSUdTVVJfU0g3NzUxX1BDSV9JUlFfQkFTRTsKLQotCVBDSURCRygyLCAiUENJOiBNYXBwaW5nIEJpZyBTdXIgSVJRIGZvciBzbG90ICVkLCBwaW4gJWMgdG8gaXJxICVkXG4iLAotCSAgICAgICBzbG90LCBwaW4tMSsnQScsIGlycSk7Ci0KLQlyZXR1cm4gaXJxOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuYwppbmRleCA4NWUxZWUyLi45ZGRmZjc2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuYwpAQCAtMTU3LDE1ICsxNTcsNiBAQAogCQkgUENJQklPU19NSU5fSU8sICg2NCA8PCAxMCksCiAJCSBTSDc3NTFfUENJX0lPX0JBU0UgKyBQQ0lCSU9TX01JTl9JTyk7CiAKLQkvKgotCSAqIFhYWDogRm9yIG5vdywgbGVhdmUgdGhpcyBib2FyZC1zcGVjaWZpYy4gSW4gdGhlIGV2ZW50IHdlIGhhdmUgb3RoZXIKLQkgKiBib2FyZHMgdGhhdCBuZWVkIHRvIGRvIHNpbWlsYXIgd29yaywgdGhpcyBjYW4gYmUgd3JhcHBlZC4KLQkgKi8KLSNpZmRlZiBDT05GSUdfU0hfQklHU1VSCi0JYmlnc3VyX3BvcnRfbWFwKFBDSUJJT1NfTUlOX0lPLCAoNjQgPDwgMTApLAotCQkJU0g3NzUxX1BDSV9JT19CQVNFICsgUENJQklPU19NSU5fSU8sIDApOwotI2VuZGlmCi0KIAkvKiBNYWtlIHN1cmUgdGhlIE1TQidzIG9mIElPIHdpbmRvdyBhcmUgc2V0IHRvIGFjY2VzcyBQQ0kgc3BhY2UKIAkgKiBjb3JyZWN0bHkgKi8KIAl3b3JkID0gUENJQklPU19NSU5fSU8gJiBTSDRfUENJSU9CUl9NQVNLOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQppbmRleCAyZjZkMmJjLi5mZjMwZDdmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZQpAQCAtNiw3ICs2LDggQEAKIAogb2JqLXkJOj0gcHJvY2Vzcy5vIHNpZ25hbC5vIHRyYXBzLm8gaXJxLm8gXAogCXB0cmFjZS5vIHNldHVwLm8gdGltZS5vIHN5c19zaC5vIHNlbWFwaG9yZS5vIFwKLQlpby5vIGlvX2dlbmVyaWMubyBzaF9rc3ltcy5vIHN5c2NhbGxzLm8KKwlpby5vIGlvX2dlbmVyaWMubyBzaF9rc3ltcy5vIHN5c2NhbGxzLm8gXAorCWRlYnVndHJhcHMubwogCiBvYmoteQkJCQkrPSBjcHUvIHRpbWVycy8KIG9iai0kKENPTkZJR19WU1lTQ0FMTCkJCSs9IHZzeXNjYWxsLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMKaW5kZXggNDgxMjE3Ni4uNGIzMzlhNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENQVSBpbml0IGNvZGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDYgIFBhdWwgTXVuZHQKICAqIENvcHlyaWdodCAoQykgMjAwMyAgUmljaGFyZCBDdXJub3cKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpAQCAtMTIsNiArMTIsOCBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTQ2LDcgKzQ4LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGNjciwgZmxhZ3M7CiAKLQlpZiAoY3B1X2RhdGEtPnR5cGUgPT0gQ1BVX1NIX05PTkUpCisJaWYgKGN1cnJlbnRfY3B1X2RhdGEudHlwZSA9PSBDUFVfU0hfTk9ORSkKIAkJcGFuaWMoIlVua25vd24gQ1BVIik7CiAKIAlqdW1wX3RvX1AyKCk7CkBAIC02Niw3ICs2OCw3IEBACiAJaWYgKGNjciAmIENDUl9DQUNIRV9FTkFCTEUpIHsKIAkJdW5zaWduZWQgbG9uZyB3YXlzLCB3YXlzaXplLCBhZGRyc3RhcnQ7CiAKLQkJd2F5c2l6ZSA9IGNwdV9kYXRhLT5kY2FjaGUuc2V0czsKKwkJd2F5c2l6ZSA9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLnNldHM7CiAKICNpZmRlZiBDQ1JfQ0FDSEVfT1JBCiAJCS8qCkBAIC03Nyw3ICs3OSw3IEBACiAJCQl3YXlzaXplID4+PSAxOwogI2VuZGlmCiAKLQkJd2F5c2l6ZSA8PD0gY3B1X2RhdGEtPmRjYWNoZS5lbnRyeV9zaGlmdDsKKwkJd2F5c2l6ZSA8PD0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuZW50cnlfc2hpZnQ7CiAKICNpZmRlZiBDQ1JfQ0FDSEVfRU1PREUKIAkJLyogSWYgRU1PREUgaXMgbm90IHNldCwgd2Ugb25seSBoYXZlIDEgd2F5IHRvIGZsdXNoLiAqLwpAQCAtODUsNyArODcsNyBAQAogCQkJd2F5cyA9IDE7CiAJCWVsc2UKICNlbmRpZgotCQkJd2F5cyA9IGNwdV9kYXRhLT5kY2FjaGUud2F5czsKKwkJCXdheXMgPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzOwogCiAJCWFkZHJzdGFydCA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVk7CiAJCWRvIHsKQEAgLTkzLDEwICs5NSwxMCBAQAogCiAJCQlmb3IgKGFkZHIgPSBhZGRyc3RhcnQ7CiAJCQkgICAgIGFkZHIgPCBhZGRyc3RhcnQgKyB3YXlzaXplOwotCQkJICAgICBhZGRyICs9IGNwdV9kYXRhLT5kY2FjaGUubGluZXN6KQorCQkJICAgICBhZGRyICs9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmxpbmVzeikKIAkJCQljdHJsX291dGwoMCwgYWRkcik7CiAKLQkJCWFkZHJzdGFydCArPSBjcHVfZGF0YS0+ZGNhY2hlLndheV9pbmNyOworCQkJYWRkcnN0YXJ0ICs9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyOwogCQl9IHdoaWxlICgtLXdheXMpOwogCX0KIApAQCAtMTA4LDcgKzExMCw3IEBACiAKICNpZmRlZiBDQ1JfQ0FDSEVfRU1PREUKIAkvKiBGb3JjZSBFTU9ERSBpZiBwb3NzaWJsZSAqLwotCWlmIChjcHVfZGF0YS0+ZGNhY2hlLndheXMgPiAxKQorCWlmIChjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzID4gMSkKIAkJZmxhZ3MgfD0gQ0NSX0NBQ0hFX0VNT0RFOwogCWVsc2UKIAkJZmxhZ3MgJj0gfkNDUl9DQUNIRV9FTU9ERTsKQEAgLTEyNSwxMCArMTI3LDEwIEBACiAjaWZkZWYgQ09ORklHX1NIX09DUkFNCiAJLyogVHVybiBvbiBPQ1JBTSAtLSBoYWx2ZSB0aGUgT0MgKi8KIAlmbGFncyB8PSBDQ1JfQ0FDSEVfT1JBOwotCWNwdV9kYXRhLT5kY2FjaGUuc2V0cyA+Pj0gMTsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5zZXRzID4+PSAxOwogCi0JY3B1X2RhdGEtPmRjYWNoZS53YXlfc2l6ZSA9IGNwdV9kYXRhLT5kY2FjaGUuc2V0cyAqCi0JCQkJICAgIGNwdV9kYXRhLT5kY2FjaGUubGluZXN6OworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9zaXplID0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuc2V0cyAqCisJCQkJICAgIGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmxpbmVzejsKICNlbmRpZgogCiAJY3RybF9vdXRsKGZsYWdzLCBDQ1IpOwpAQCAtMTcwLDcgKzE3Miw3IEBACiAKIAkvKiBJZiB0aGUgRFNQIGJpdCBpcyBzdGlsbCBzZXQsIHRoaXMgQ1BVIGhhcyBhIERTUCAqLwogCWlmIChzciAmIFNSX0RTUCkKLQkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfRFNQOworCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRFNQOwogCiAJLyogTm93IHRoYXQgd2UndmUgZGV0ZXJtaW5lZCB0aGUgRFNQIHN0YXR1cywgY2xlYXIgdGhlIERTUCBiaXQuICovCiAJcmVsZWFzZV9kc3AoKTsKQEAgLTIwMiwyMiArMjA0LDI4IEBACiAJY2FjaGVfaW5pdCgpOwogCiAJc2htX2FsaWduX21hc2sgPSBtYXhfdCh1bnNpZ25lZCBsb25nLAotCQkJICAgICAgIGNwdV9kYXRhLT5kY2FjaGUud2F5X3NpemUgLSAxLAorCQkJICAgICAgIGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9zaXplIC0gMSwKIAkJCSAgICAgICBQQUdFX1NJWkUgLSAxKTsKIAogCS8qIERpc2FibGUgdGhlIEZQVSAqLwogCWlmIChmcHVfZGlzYWJsZWQpIHsKIAkJcHJpbnRrKCJGUFUgRGlzYWJsZWRcbiIpOwotCQljcHVfZGF0YS0+ZmxhZ3MgJj0gfkNQVV9IQVNfRlBVOworCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0ZQVTsKIAkJZGlzYWJsZV9mcHUoKTsKIAl9CiAKIAkvKiBGUFUgaW5pdGlhbGl6YXRpb24gKi8KLQlpZiAoKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfRlBVKSkgeworCWlmICgoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkgewogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfVVNFREZQVSk7CiAJCWNsZWFyX3VzZWRfbWF0aCgpOwogCX0KIAorCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgcGVyLUNQVSBBU0lEIGNhY2hlIHZlcnkgZWFybHksIHNpbmNlIHRoZQorCSAqIFRMQiBmbHVzaGluZyByb3V0aW5lcyBkZXBlbmQgb24gdGhpcyBiZWluZyBzZXR1cC4KKwkgKi8KKwljdXJyZW50X2NwdV9kYXRhLmFzaWRfY2FjaGUgPSBOT19DT05URVhUOworCiAjaWZkZWYgQ09ORklHX1NIX0RTUAogCS8qIFByb2JlIGZvciBEU1AgKi8KIAlkc3BfaW5pdCgpOwpAQCAtMjI1LDcgKzIzMyw3IEBACiAJLyogRGlzYWJsZSB0aGUgRFNQICovCiAJaWYgKGRzcF9kaXNhYmxlZCkgewogCQlwcmludGsoIkRTUCBEaXNhYmxlZFxuIik7Ci0JCWNwdV9kYXRhLT5mbGFncyAmPSB+Q1BVX0hBU19EU1A7CisJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJj0gfkNQVV9IQVNfRFNQOwogCQlyZWxlYXNlX2RzcCgpOwogCX0KICNlbmRpZgpAQCAtMjQwLDQgKzI0OCwzIEBACiAJdWJjX3dha2V1cCgpOwogI2VuZGlmCiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCmluZGV4IDM1ZWI1NzUuLjIxMDI4MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYwpAQCAtNDMsMTYgKzQzLDI5IEBACiAJLm1hc2tfYWNrCT0gZGlzYWJsZV9pcHJfaXJxLAogfTsKIAordW5zaWduZWQgaW50IG1hcF9pcHJpZHhfdG9fYWRkcihpbnQgaWR4KSBfX2F0dHJpYnV0ZV9fICgod2VhaykpOwordW5zaWduZWQgaW50IG1hcF9pcHJpZHhfdG9fYWRkcihpbnQgaWR4KQoreworCXJldHVybiAwOworfQorCiB2b2lkIG1ha2VfaXByX2lycShzdHJ1Y3QgaXByX2RhdGEgKnRhYmxlLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGlycSA9IHRhYmxlW2ldLmlycTsKLQkJdGFibGVbaV0uYWRkciA9IG1hcF9pcHJpZHhfdG9fYWRkcih0YWJsZVtpXS5pcHJfaWR4KTsKKworCQlpZiAoIWlycSkKKwkJCWlycSA9IHRhYmxlW2ldLmlycSA9IGk7CisKIAkJLyogY291bGQgdGhlIElQUiBpbmRleCBiZSBtYXBwZWQsIGlmIG5vdCB3ZSBpZ25vcmUgdGhpcyAqLwotCQlpZiAodGFibGVbaV0uYWRkciA9PSAwKQotCQkJY29udGludWU7CisJCWlmICghdGFibGVbaV0uYWRkcikgeworCQkJdGFibGVbaV0uYWRkciA9IG1hcF9pcHJpZHhfdG9fYWRkcih0YWJsZVtpXS5pcHJfaWR4KTsKKwkJCWlmICghdGFibGVbaV0uYWRkcikKKwkJCQljb250aW51ZTsKKwkJfQorCiAJCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpcHJfaXJxX2NoaXAsCiAJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2Nsb2NrLXNoNzYxOS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9jbG9jay1zaDc2MTkuYwppbmRleCBkMDQ0MGIyLi5kMmMxNTc5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2Nsb2NrLXNoNzYxOS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvY2xvY2stc2g3NjE5LmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlIDxhc20vZnJlcS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1jb25zdCBzdGF0aWMgaW50IHBsbDFyYXRlW109ezEsMn07Ci1jb25zdCBzdGF0aWMgaW50IHBmY19kaXZpc29yc1tdPXsxLDIsMCw0fTsKK3N0YXRpYyBjb25zdCBpbnQgcGxsMXJhdGVbXSA9IHsxLDJ9Oworc3RhdGljIGNvbnN0IGludCBwZmNfZGl2aXNvcnNbXSA9IHsxLDIsMCw0fTsKIAogI2lmIChDT05GSUdfU0hfQ0xLX01EID09IDEpIHx8IChDT05GSUdfU0hfQ0xLX01EID09IDIpCiAjZGVmaW5lIFBMTDIgKDQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2VudHJ5LlMKaW5kZXggZDUxZmE1ZTkuLjdmN2QyOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2VudHJ5LlMKQEAgLTE3OCwxMiArMTc4LDEwIEBACiA4OgkubG9uZwlkb19leGNlcHRpb25fZXJyb3IKIAkKIHRyYXBfZW50cnk6Ci0JLyogdmVyYm9zZSBCVUcgdHJhcGEgZW50cnkgY2hlY2sgKi8KLQltb3YJIzB4M2UscjgKLQljbXAvZ2UJcjgscjkKLQliZi9zCTFmCi0JIGFkZAkjLTB4MTAscjkKLQlhZGQJIzB4MTAscjkKKwltb3YJIzB4MzAscjgKKwljbXAvZ2UJcjgscjkJCSEgdmVjdG9yIDB4MjAtMHgyZiBpcyBzeXN0ZW1jYWxsCisJYnQJMWYKKwlhZGQJIy0weDEwLHI5CSEgY29udmVydCBTSDIgdG8gU0gzLzQgQUJJCiAxOgkKIAlzaGxsMglyOQkJCSEgVFJBCiAJbW92CSNPRkZfVFJBLHI4CkBAIC0yMDYsNyArMjA0LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCiAJLyogVW53aW5kIHRoZSBzdGFjayBhbmQgam1wIHRvIHRoZSBkZWJ1ZyBlbnRyeSAqLwotZGVidWdfa2VybmVsX2Z3OgorRU5UUlkoc2hfYmlvc19oYW5kbGVyKQogCW1vdglyMTUscjAKIAlhZGQJIygyMi00KSo0LTQscjAKIAlsZGMubAlAcjArLGdicgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9wcm9iZS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9wcm9iZS5jCmluZGV4IGJhNTI3ZDkuLjEwOGU4MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvcHJvYmUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3Byb2JlLmMKQEAgLTE4LDI3ICsxOCwyNyBAQAogaW50IF9faW5pdCBkZXRlY3RfY3B1X2FuZF9jYWNoZV9zeXN0ZW0odm9pZCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MDQpCi0JY3B1X2RhdGEtPnR5cGUJCQk9IENQVV9TSDc2MDQ7Ci0JY3B1X2RhdGEtPmRjYWNoZS53YXlzCQk9IDQ7Ci0JY3B1X2RhdGEtPmRjYWNoZS53YXlfaW5jcgk9ICgxPDwxMCk7Ci0JY3B1X2RhdGEtPmRjYWNoZS5zZXRzCQk9IDY0OwotCWNwdV9kYXRhLT5kY2FjaGUuZW50cnlfc2hpZnQJPSA0OwotCWNwdV9kYXRhLT5kY2FjaGUubGluZXN6CQk9IEwxX0NBQ0hFX0JZVEVTOwotCWNwdV9kYXRhLT5kY2FjaGUuZmxhZ3MJCT0gMDsKKwljdXJyZW50X2NwdV9kYXRhLnR5cGUJCQk9IENQVV9TSDc2MDQ7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5cwkJPSA0OworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyCT0gKDE8PDEwKTsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5zZXRzCQk9IDY0OworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X3NoaWZ0CT0gNDsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5saW5lc3oJCT0gTDFfQ0FDSEVfQllURVM7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuZmxhZ3MJCT0gMDsKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSkKLQljcHVfZGF0YS0+dHlwZQkJCT0gQ1BVX1NINzYxOTsKLQljcHVfZGF0YS0+ZGNhY2hlLndheXMJCT0gNDsKLQljcHVfZGF0YS0+ZGNhY2hlLndheV9pbmNyCT0gKDE8PDEyKTsKLQljcHVfZGF0YS0+ZGNhY2hlLnNldHMJCT0gMjU2OwotCWNwdV9kYXRhLT5kY2FjaGUuZW50cnlfc2hpZnQJPSA0OwotCWNwdV9kYXRhLT5kY2FjaGUubGluZXN6CQk9IEwxX0NBQ0hFX0JZVEVTOwotCWNwdV9kYXRhLT5kY2FjaGUuZmxhZ3MJCT0gMDsKKwljdXJyZW50X2NwdV9kYXRhLnR5cGUJCQk9IENQVV9TSDc2MTk7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5cwkJPSA0OworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyCT0gKDE8PDEyKTsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5zZXRzCQk9IDI1NjsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5lbnRyeV9zaGlmdAk9IDQ7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUubGluZXN6CQk9IEwxX0NBQ0hFX0JZVEVTOworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmZsYWdzCQk9IDA7CiAjZW5kaWYKIAkvKgogCSAqIFNILTIgZG9lc24ndCBoYXZlIHNlcGFyYXRlIGNhY2hlcwogCSAqLwotCWNwdV9kYXRhLT5kY2FjaGUuZmxhZ3MgfD0gU0hfQ0FDSEVfQ09NQklORUQ7Ci0JY3B1X2RhdGEtPmljYWNoZSA9IGNwdV9kYXRhLT5kY2FjaGU7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuZmxhZ3MgfD0gU0hfQ0FDSEVfQ09NQklORUQ7CisJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUgPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKaW5kZXggNzkyODNlNi4uZjgzZmY4YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCkBAIC01Miw0MiArNTIsMzggQEAKIH0KIF9faW5pdGNhbGwoc2g3NjE5X2RldmljZXNfc2V0dXApOwogCi0jZGVmaW5lIElOVENfSVBSQyAgICAgIDB4ZjgwODAwMDBVTAotI2RlZmluZSBJTlRDX0lQUkQgICAgICAweGY4MDgwMDAyVUwKLQotI2RlZmluZSBDTUkwX0lSUSAgICAgICA4NgotCi0jZGVmaW5lIFNDSUYwX0VSSV9JUlEgIDg4Ci0jZGVmaW5lIFNDSUYwX1JYSV9JUlEgIDg5Ci0jZGVmaW5lIFNDSUYwX0JSSV9JUlEgIDkwCi0jZGVmaW5lIFNDSUYwX1RYSV9JUlEgIDkxCi0KLSNkZWZpbmUgU0NJRjFfRVJJX0lSUSAgOTIKLSNkZWZpbmUgU0NJRjFfUlhJX0lSUSAgOTMKLSNkZWZpbmUgU0NJRjFfQlJJX0lSUSAgOTQKLSNkZWZpbmUgU0NJRjFfVFhJX0lSUSAgOTUKLQotI2RlZmluZSBTQ0lGMl9CUklfSVJRICA5NgotI2RlZmluZSBTQ0lGMl9FUklfSVJRICA5NwotI2RlZmluZSBTQ0lGMl9SWElfSVJRICA5OAotI2RlZmluZSBTQ0lGMl9UWElfSVJRICA5OQotCiBzdGF0aWMgc3RydWN0IGlwcl9kYXRhIHNoNzYxOV9pcHJfbWFwW10gPSB7Ci0JeyBDTUkwX0lSUSwgICAgICBJTlRDX0lQUkMsIDEsIDIgfSwKLQl7IFNDSUYwX0VSSV9JUlEsIElOVENfSVBSRCwgMywgMyB9LAotCXsgU0NJRjBfUlhJX0lSUSwgSU5UQ19JUFJELCAzLCAzIH0sCi0JeyBTQ0lGMF9CUklfSVJRLCBJTlRDX0lQUkQsIDMsIDMgfSwKLQl7IFNDSUYwX1RYSV9JUlEsIElOVENfSVBSRCwgMywgMyB9LAotCXsgU0NJRjFfRVJJX0lSUSwgSU5UQ19JUFJELCAyLCAzIH0sCi0JeyBTQ0lGMV9SWElfSVJRLCBJTlRDX0lQUkQsIDIsIDMgfSwKLQl7IFNDSUYxX0JSSV9JUlEsIElOVENfSVBSRCwgMiwgMyB9LAotCXsgU0NJRjFfVFhJX0lSUSwgSU5UQ19JUFJELCAyLCAzIH0sCi0JeyBTQ0lGMl9FUklfSVJRLCBJTlRDX0lQUkQsIDEsIDMgfSwKLQl7IFNDSUYyX1JYSV9JUlEsIElOVENfSVBSRCwgMSwgMyB9LAotCXsgU0NJRjJfQlJJX0lSUSwgSU5UQ19JUFJELCAxLCAzIH0sCi0JeyBTQ0lGMl9UWElfSVJRLCBJTlRDX0lQUkQsIDEsIDMgfSwKKwl7IDg2LCAwLCAgNCwgMiB9LAkvKiBDTUkwICovCisJeyA4OCwgMSwgMTIsIDMgfSwJLyogU0NJRjBfRVJJICovCisJeyA4OSwgMSwgMTIsIDMgfSwJLyogU0NJRjBfUlhJICovCisJeyA5MCwgMSwgMTIsIDMgfSwJLyogU0NJRjBfQlJJICovCisJeyA5MSwgMSwgMTIsIDMgfSwJLyogU0NJRjBfVFhJICovCisJeyA5MiwgMSwgIDgsIDMgfSwJLyogU0NJRjFfRVJJICovCisJeyA5MywgMSwgIDgsIDMgfSwJLyogU0NJRjFfUlhJICovCisJeyA5NCwgMSwgIDgsIDMgfSwJLyogU0NJRjFfQlJJICovCisJeyA5NSwgMSwgIDgsIDMgfSwJLyogU0NJRjFfVFhJICovCisJeyA5NiwgMSwgIDQsIDMgfSwJLyogU0NJRjJfRVJJICovCisJeyA5NywgMSwgIDQsIDMgfSwJLyogU0NJRjJfUlhJICovCisJeyA5OCwgMSwgIDQsIDMgfSwJLyogU0NJRjJfQlJJICovCisJeyA5OSwgMSwgIDQsIDMgfSwJLyogU0NJRjJfVFhJICovCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGlwcl9vZmZzZXRzW10gPSB7CisJMHhmODA4MDAwMCwJLyogSVBSQyAqLworCTB4ZjgwODAwMDIsCS8qIElQUkQgKi8KKwkweGY4MDgwMDA0LAkvKiBJUFJFICovCisJMHhmODA4MDAwNiwJLyogSVBSRiAqLworCTB4ZjgwODAwMDgsCS8qIElQUkcgKi8KK307CisKKy8qIGdpdmVuIHRoZSBJUFIgaW5kZXggcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBJUFIgcmVnaXN0ZXIgKi8KK3Vuc2lnbmVkIGludCBtYXBfaXByaWR4X3RvX2FkZHIoaW50IGlkeCkKK3sKKwlpZiAodW5saWtlbHkoaWR4ID49IEFSUkFZX1NJWkUoaXByX29mZnNldHMpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGlwcl9vZmZzZXRzW2lkeF07Cit9CisKIHZvaWQgX19pbml0IGluaXRfSVJRX2lwcih2b2lkKQogewogCW1ha2VfaXByX2lycShzaDc2MTlfaXByX21hcCwgQVJSQVlfU0laRShzaDc2MTlfaXByX21hcCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYwppbmRleCBhOWFkMzA5Li44MmQ3Zjk5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYwpAQCAtMTgsOCArMTgsOCBAQAogI2luY2x1ZGUgPGFzbS9mcmVxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLWNvbnN0IHN0YXRpYyBpbnQgcGxsMXJhdGVbXT17MSwyLDMsNCw2LDh9OwotY29uc3Qgc3RhdGljIGludCBwZmNfZGl2aXNvcnNbXT17MSwyLDMsNCw2LDgsMTJ9Oworc3RhdGljIGNvbnN0IGludCBwbGwxcmF0ZVtdPXsxLDIsMyw0LDYsOH07CitzdGF0aWMgY29uc3QgaW50IHBmY19kaXZpc29yc1tdPXsxLDIsMyw0LDYsOCwxMn07CiAjZGVmaW5lIGlmY19kaXZpc29ycyBwZmNfZGl2aXNvcnMKIAogI2lmIChDT05GSUdfU0hfQ0xLX01EID09IDIpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9wcm9iZS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvcHJvYmUuYwppbmRleCA4N2M2YzA1NC4uNDI2ZjZkYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvcHJvYmUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9wcm9iZS5jCkBAIC0xNywxNCArMTcsMTQgQEAKIGludCBfX2luaXQgZGV0ZWN0X2NwdV9hbmRfY2FjaGVfc3lzdGVtKHZvaWQpCiB7CiAJLyogSnVzdCBTSDcyMDYgZm9yIG5vdyAuLiAqLwotCWNwdV9kYXRhLT50eXBlCQkJPSBDUFVfU0g3MjA2OworCWN1cnJlbnRfY3B1X2RhdGEudHlwZQkJCT0gQ1BVX1NINzIwNjsKIAotCWNwdV9kYXRhLT5kY2FjaGUud2F5cwkJPSA0OwotCWNwdV9kYXRhLT5kY2FjaGUud2F5X2luY3IJPSAoMSA8PCAxMSk7Ci0JY3B1X2RhdGEtPmRjYWNoZS5zZXRzCQk9IDEyODsKLQljcHVfZGF0YS0+ZGNhY2hlLmVudHJ5X3NoaWZ0CT0gNDsKLQljcHVfZGF0YS0+ZGNhY2hlLmxpbmVzegkJPSBMMV9DQUNIRV9CWVRFUzsKLQljcHVfZGF0YS0+ZGNhY2hlLmZsYWdzCQk9IDA7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5cwkJPSA0OworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyCT0gKDEgPDwgMTEpOworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLnNldHMJCT0gMTI4OworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X3NoaWZ0CT0gNDsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5saW5lc3oJCT0gTDFfQ0FDSEVfQllURVM7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuZmxhZ3MJCT0gMDsKIAogCS8qCiAJICogVGhlIGljYWNoZSBpcyB0aGUgc2FtZSBhcyB0aGUgZGNhY2hlIGFzIGZhciBhcyB0aGlzIHNldHVwIGlzCkBAIC0zMiw3ICszMiw3IEBACiAJICogbGFja3MgdGhlIFUgYml0IHRoYXQgdGhlIGRjYWNoZSBoYXMsIG5vbmUgb2YgdGhpcyBoYXMgYW55IGJlYXJpbmcKIAkgKiBvbiB0aGUgY2FjaGUgaW5mby4KIAkgKi8KLQljcHVfZGF0YS0+aWNhY2hlCQk9IGNwdV9kYXRhLT5kY2FjaGU7CisJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUJCT0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGU7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKaW5kZXggNGI2MGZjYy4uNGVkOTExMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMKQEAgLTU3LDU1ICs1Nyw1MiBAQAogfQogX19pbml0Y2FsbChzaDcyMDZfZGV2aWNlc19zZXR1cCk7CiAKLSNkZWZpbmUgSU5UQ19JUFIwOCAgICAgMHhmZmZlMGMwNFVMCi0jZGVmaW5lIElOVENfSVBSMDkgICAgIDB4ZmZmZTBjMDZVTAotI2RlZmluZSBJTlRDX0lQUjE0ICAgICAweGZmZmUwYzEwVUwKLQotI2RlZmluZSBDTUkwX0lSUSAgICAgICAxNDAKLQotI2RlZmluZSBNVFUxX1RHSTFBICAgICAxNjQKLQotI2RlZmluZSBTQ0lGMF9CUklfSVJRICAyNDAKLSNkZWZpbmUgU0NJRjBfRVJJX0lSUSAgMjQxCi0jZGVmaW5lIFNDSUYwX1JYSV9JUlEgIDI0MgotI2RlZmluZSBTQ0lGMF9UWElfSVJRICAyNDMKLQotI2RlZmluZSBTQ0lGMV9CUklfSVJRICAyNDQKLSNkZWZpbmUgU0NJRjFfRVJJX0lSUSAgMjQ1Ci0jZGVmaW5lIFNDSUYxX1JYSV9JUlEgIDI0NgotI2RlZmluZSBTQ0lGMV9UWElfSVJRICAyNDcKLQotI2RlZmluZSBTQ0lGMl9CUklfSVJRICAyNDgKLSNkZWZpbmUgU0NJRjJfRVJJX0lSUSAgMjQ5Ci0jZGVmaW5lIFNDSUYyX1JYSV9JUlEgIDI1MAotI2RlZmluZSBTQ0lGMl9UWElfSVJRICAyNTEKLQotI2RlZmluZSBTQ0lGM19CUklfSVJRICAyNTIKLSNkZWZpbmUgU0NJRjNfRVJJX0lSUSAgMjUzCi0jZGVmaW5lIFNDSUYzX1JYSV9JUlEgIDI1NAotI2RlZmluZSBTQ0lGM19UWElfSVJRICAyNTUKLQogc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBzaDcyMDZfaXByX21hcFtdID0gewotCXsgQ01JMF9JUlEsICAgICAgSU5UQ19JUFIwOCwgMywgMiB9LAotCXsgTVRVMl9UR0kxQSwgICAgSU5UQ19JUFIwOSwgMSwgMiB9LAotCXsgU0NJRjBfRVJJX0lSUSwgSU5UQ19JUFIxNCwgMywgMyB9LAotCXsgU0NJRjBfUlhJX0lSUSwgSU5UQ19JUFIxNCwgMywgMyB9LAotCXsgU0NJRjBfQlJJX0lSUSwgSU5UQ19JUFIxNCwgMywgMyB9LAotCXsgU0NJRjBfVFhJX0lSUSwgSU5UQ19JUFIxNCwgMywgMyB9LAotCXsgU0NJRjFfRVJJX0lSUSwgSU5UQ19JUFIxNCwgMiwgMyB9LAotCXsgU0NJRjFfUlhJX0lSUSwgSU5UQ19JUFIxNCwgMiwgMyB9LAotCXsgU0NJRjFfQlJJX0lSUSwgSU5UQ19JUFIxNCwgMiwgMyB9LAotCXsgU0NJRjFfVFhJX0lSUSwgSU5UQ19JUFIxNCwgMiwgMyB9LAotCXsgU0NJRjJfRVJJX0lSUSwgSU5UQ19JUFIxNCwgMSwgMyB9LAotCXsgU0NJRjJfUlhJX0lSUSwgSU5UQ19JUFIxNCwgMSwgMyB9LAotCXsgU0NJRjJfQlJJX0lSUSwgSU5UQ19JUFIxNCwgMSwgMyB9LAotCXsgU0NJRjJfVFhJX0lSUSwgSU5UQ19JUFIxNCwgMSwgMyB9LAotCXsgU0NJRjNfRVJJX0lSUSwgSU5UQ19JUFIxNCwgMCwgMyB9LAotCXsgU0NJRjNfUlhJX0lSUSwgSU5UQ19JUFIxNCwgMCwgMyB9LAotCXsgU0NJRjNfQlJJX0lSUSwgSU5UQ19JUFIxNCwgMCwgMyB9LAotCXsgU0NJRjNfVFhJX0lSUSwgSU5UQ19JUFIxNCwgMCwgMyB9LAorCXsgMTQwLCAgNywgMTIsIDIgfSwJLyogQ01JMCAqLworCXsgMTY0LCAgOCwgIDQsIDIgfSwJLyogTVRVMl9UR0kxQSAqLworCXsgMjQwLCAxMywgMTIsIDMgfSwJLyogU0NJRjBfQlJJICovCisJeyAyNDEsIDEzLCAxMiwgMyB9LAkvKiBTQ0lGMF9FUkkgKi8KKwl7IDI0MiwgMTMsIDEyLCAzIH0sCS8qIFNDSUYwX1JYSSAqLworCXsgMjQzLCAxMywgMTIsIDMgfSwJLyogU0NJRjBfVFhJICovCisJeyAyNDQsIDEzLCAgOCwgMyB9LAkvKiBTQ0lGMV9CUkkgKi8KKwl7IDI0NSwgMTMsICA4LCAzIH0sCS8qIFNDSUYxX0VSSSAqLworCXsgMjQ2LCAxMywgIDgsIDMgfSwJLyogU0NJRjFfUlhJICovCisJeyAyNDcsIDEzLCAgOCwgMyB9LAkvKiBTQ0lGMV9UWEkgKi8KKwl7IDI0OCwgMTMsICA0LCAzIH0sCS8qIFNDSUYyX0JSSSAqLworCXsgMjQ5LCAxMywgIDQsIDMgfSwJLyogU0NJRjJfRVJJICovCisJeyAyNTAsIDEzLCAgNCwgMyB9LAkvKiBTQ0lGMl9SWEkgKi8KKwl7IDI1MSwgMTMsICA0LCAzIH0sCS8qIFNDSUYyX1RYSSAqLworCXsgMjUyLCAxMywgIDAsIDMgfSwJLyogU0NJRjNfQlJJICovCisJeyAyNTMsIDEzLCAgMCwgMyB9LAkvKiBTQ0lGM19FUkkgKi8KKwl7IDI1NCwgMTMsICAwLCAzIH0sCS8qIFNDSUYzX1JYSSAqLworCXsgMjU1LCAxMywgIDAsIDMgfSwJLyogU0NJRjNfVFhJICovCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGlwcl9vZmZzZXRzW10gPSB7CisJMHhmZmZlMDgxOCwJLyogSVBSMDEgKi8KKwkweGZmZmUwODFhLAkvKiBJUFIwMiAqLworCTAsCQkvKiB1bnVzZWQgKi8KKwkwLAkJLyogdW51c2VkICovCisJMHhmZmZlMDgyMCwJLyogSVBSMDUgKi8KKwkweGZmZmUwYzAwLAkvKiBJUFIwNiAqLworCTB4ZmZmZTBjMDIsCS8qIElQUjA3ICovCisJMHhmZmZlMGMwNCwJLyogSVBSMDggKi8KKwkweGZmZmUwYzA2LAkvKiBJUFIwOSAqLworCTB4ZmZmZTBjMDgsCS8qIElQUjEwICovCisJMHhmZmZlMGMwYSwJLyogSVBSMTEgKi8KKwkweGZmZmUwYzBjLAkvKiBJUFIxMiAqLworCTB4ZmZmZTBjMGUsCS8qIElQUjEzICovCisJMHhmZmZlMGMxMCwJLyogSVBSMTQgKi8KK307CisKKy8qIGdpdmVuIHRoZSBJUFIgaW5kZXggcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBJUFIgcmVnaXN0ZXIgKi8KK3Vuc2lnbmVkIGludCBtYXBfaXByaWR4X3RvX2FkZHIoaW50IGlkeCkKK3sKKwlpZiAodW5saWtlbHkoaWR4ID49IEFSUkFZX1NJWkUoaXByX29mZnNldHMpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGlwcl9vZmZzZXRzW2lkeF07Cit9CisKIHZvaWQgX19pbml0IGluaXRfSVJRX2lwcih2b2lkKQogewogCW1ha2VfaXByX2lycShzaDcyMDZfaXByX21hcCwgQVJSQVlfU0laRShzaDcyMDZfaXByX21hcCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCmluZGV4IDhjMGRjMjcuLmMxOTIwNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKQEAgLTEzLDEwICsxMyw4IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxhc20vY3B1L21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAogISBOT1RFOgogISBHTlUgYXMgKGFzIG9mIDIuOS4xKSBjaGFuZ2VzIGJmL3MgaW50byBidC9zIGFuZCBicmEsIHdoZW4gdGhlIGFkZHJlc3MKQEAgLTEzOCwxNCArMTM2LDI5IEBACiAKIGNhbGxfZHBmOgogCW1vdi5sCTFmLCByMAotIAltb3YubAlAcjAsIHI2CQkhIGFkZHJlc3MKKwltb3YJcjUsIHI4CisJbW92LmwJQHIwLCByNgorCW1vdglyNiwgcjkKKwltb3YubAkyZiwgcjAKKwlzdHMJcHIsIHIxMAorCWpzcglAcjAKKwkgbW92CXIxNSwgcjQKKwkhCisJdHN0CXIwLCByMAorCWJmL3MJMGYKKwkgbGRzCXIxMCwgcHIKKwlydHMKKwkgbm9wCiswOglzdGkKIAltb3YubAkzZiwgcjAKLQorCW1vdglyOSwgcjYKKwltb3YJcjgsIHI1CiAJam1wCUByMAotIAkgbW92CXIxNSwgcjQJCSEgcmVncworCSBtb3YJcjE1LCByNAogCiAJLmFsaWduIDIKIDE6CS5sb25nCU1NVV9URUEKKzI6CS5sb25nCV9fZG9fcGFnZV9mYXVsdAogMzoJLmxvbmcJZG9fcGFnZV9mYXVsdAogCiAJLmFsaWduCTIKQEAgLTE3Myw3ICsxODYsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKIAkvKiBVbndpbmQgdGhlIHN0YWNrIGFuZCBqbXAgdG8gdGhlIGRlYnVnIGVudHJ5ICovCi1kZWJ1Z19rZXJuZWxfZnc6CitFTlRSWShzaF9iaW9zX2hhbmRsZXIpCiAJbW92LmwJQHIxNSssIHIwCiAJbW92LmwJQHIxNSssIHIxCiAJbW92LmwJQHIxNSssIHIyCkBAIC0zMzIsMTc1ICszNDUsOSBAQAogIQogIQogCi0vKiBUaGlzIGNvZGUgbWFrZXMgc29tZSBhc3N1bXB0aW9ucyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgotICogTWFrZSBzdXJlIHRoZXkgYXJlIHN0aWwgdHJ1ZS4gKi8KLSNpZiBQVFJTX1BFUl9QR0QgIT0gUFRSU19QRVJfUFRFCi0jZXJyb3IgUEdEIGFuZCBQVEUgc2l6ZXMgZG9uJ3QgbWF0Y2gKLSNlbmRpZgotCi0vKiBnYXMgZG9lc24ndCBmbGFnIGltcG9zc2libGUgdmFsdWVzIGZvciBtb3YgI2ltbWVkaWF0ZSBhcyBhbiBlcnJvciAqLwotI2lmIChfUEFHRV9QUkVTRU5UID4+IDIpID4gMHg3ZgotI2Vycm9yIGNhbm5vdCBsb2FkIFBBR0VfUFJFU0VOVCBhcyBhbiBpbW1lZGlhdGUKLSNlbmRpZgotI2lmIF9QQUdFX0RJUlRZID4gMHg3ZgotI2Vycm9yIGNhbm5vdCBsb2FkIFBBR0VfRElSVFkgYXMgYW4gaW1tZWRpYXRlCi0jZW5kaWYKLSNpZiAoX1BBR0VfUFJFU0VOVCA8PCAyKSAhPSBfUEFHRV9BQ0NFU1NFRAotI2Vycm9yIGNhbm5vdCBkZXJpdmUgUEFHRV9BQ0NFU1NFRCBmcm9tIFBBR0VfUFJFU0VOVAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQotI2RlZmluZSBsZG1tdXB0ZWgocikJbW92LmwJOGYsIHIKLSNlbHNlCi0jZGVmaW5lIGxkbW11cHRlaChyKQltb3YJI01NVV9QVEVILCByCi0jZW5kaWYKLQogCS5iYWxpZ24gCTEwMjQsMCwxMDI0CiB0bGJfbWlzczoKLSNpZmRlZiBDT1VOVF9FWENFUFRJT05TCi0JISBJbmNyZW1lbnQgdGhlIGNvdW50cwotCW1vdi5sCTlmLCBrMQotCW1vdi5sCUBrMSwgazIKLQlhZGQJIzEsIGsyCi0JbW92LmwJazIsIEBrMQotI2VuZGlmCi0KLQkhIGswIHNjcmF0Y2gKLQkhIGsxIHBnZCBhbmQgcHRlIHBvaW50ZXJzCi0JISBrMiBmYXVsdGluZyBhZGRyZXNzCi0JISBrMyBwZ2QgYW5kIHB0ZSBpbmRleCBtYXNrcwotCSEgazQgc2hpZnQKLQotCSEgTG9hZCB1cCB0aGUgcGdkIGVudHJ5IChrMSkKLQotCWxkbW11cHRlaChrMCkJCQkhICA5IExTIChsYXRlbmN5PTIpCU1NVV9QVEVICi0KLQltb3Yudwk0ZiwgazMJCQkhICA4IExTIChsYXRlbmN5PTIpCShQVFJTX1BFUl9QR0QtMSkgPDwgMgotCW1vdgkjLShQR0RJUl9TSElGVC0yKSwgazQJISAgNiBFWAotCi0JbW92LmwJQChNTVVfVEVBLU1NVV9QVEVILGswKSwgazIJISAxOCBMUyAobGF0ZW5jeT0yKQotCi0JbW92LmwJQChNTVVfVFRCLU1NVV9QVEVILGswKSwgazEJISAxOCBMUyAobGF0ZW5jeT0yKQotCi0JbW92CWsyLCBrMAkJCSEgICA1IE1UIChsYXRlbmN5PTApCi0Jc2hsZAlrNCwgazAJCQkhICA5OSBFWAotCi0JYW5kCWszLCBrMAkJCSEgIDc4IEVYCi0KLQltb3YubAlAKGswLCBrMSksIGsxCQkhICAyMSBMUyAobGF0ZW5jeT0yKQotCW1vdgkjLShQQUdFX1NISUZULTIpLCBrNAkhICAgNiBFWAotCi0JISBMb2FkIHVwIHRoZSBwdGUgZW50cnkgKGsyKQotCi0JbW92CWsyLCBrMAkJCSEgICA1IE1UIChsYXRlbmN5PTApCi0Jc2hsZAlrNCwgazAJCQkhICA5OSBFWAotCi0JdHN0CWsxLCBrMQkJCSEgIDg2IE1UCi0KLQlidAkyMGYJCQkhIDExMCBCUgotCi0JYW5kCWszLCBrMAkJCSEgIDc4IEVYCi0JbW92LncJNWYsIGs0CQkJISAgIDggTFMgKGxhdGVuY3k9MikJX1BBR0VfUFJFU0VOVAotCi0JbW92LmwJQChrMCwgazEpLCBrMgkJISAgMjEgTFMgKGxhdGVuY3k9MikKLQlhZGQJazAsIGsxCQkJISAgNDkgRVgKLQotI2lmZGVmIENPTkZJR19DUFVfSEFTX1BURUEKLQkhIFRlc3QgdGhlIGVudHJ5IGZvciBwcmVzZW50IGFuZCBfUEFHRV9BQ0NFU1NFRAotCi0JbW92CSMtMjgsIGszCQkhICAgNiBFWAotCW1vdglrMiwgazAJCQkhICAgNSBNVCAobGF0ZW5jeT0wKQotCi0JdHN0CWs0LCBrMgkJCSEgIDY4IE1UCi0Jc2hsZAlrMywgazAJCQkhICA5OSBFWAotCi0JYnQJMjBmCQkJISAxMTAgQlIKLQotCSEgU2V0IFBURUEgcmVnaXN0ZXIKLQkhIE1NVV9QVEVBID0gKChwdGV2YWwgPj4gMjgpICYgMHhlKSB8IChwdGV2YWwgJiAweDEpCi0JIQotCSEgazA9cHRlPj4yOCwgazE9cHRlKiwgazI9cHRlLCBrMz08dW51c2VkPiwgazQ9X1BBR0VfUFJFU0VOVAotCi0JYW5kCSMweGUsIGswCQkhICA3OSBFWAotCi0JbW92CWswLCBrMwkJCSEgICA1IE1UIChsYXRlbmN5PTApCi0JbW92CWsyLCBrMAkJCSEgICA1IE1UIChsYXRlbmN5PTApCi0KLQlhbmQJIzEsIGswCQkJISAgNzkgRVgKLQotCW9yCWswLCBrMwkJCSEgIDgyIEVYCi0KLQlsZG1tdXB0ZWgoazApCQkJISAgIDkgTFMgKGxhdGVuY3k9MikKLQlzaGxsMglrNAkJCSEgMTAxIEVYCQlfUEFHRV9BQ0NFU1NFRAotCi0JdHN0CWs0LCBrMgkJCSEgIDY4IE1UCi0KLQltb3YubAlrMywgQChNTVVfUFRFQS1NTVVfUFRFSCxrMCkJISAyNyBMUwotCi0JbW92LmwJN2YsIGszCQkJISAgIDkgTFMgKGxhdGVuY3k9MikJX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwotCi0JISBrMD1NTVVfUFRFSCwgazE9cHRlKiwgazI9cHRlLCBrMz1fUEFHRV9GTEFHU19IQVJEV0FSRSwgazQ9X1BBR0VfQUNDRVNTRUQKLSNlbHNlCi0KLQkhIFRlc3QgdGhlIGVudHJ5IGZvciBwcmVzZW50IGFuZCBfUEFHRV9BQ0NFU1NFRAotCi0JbW92LmwJN2YsIGszCQkJISAgIDkgTFMgKGxhdGVuY3k9MikJX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwotCXRzdAlrNCwgazIJCQkhICA2OCBNVAotCi0Jc2hsbDIJazQJCQkhIDEwMSBFWAkJX1BBR0VfQUNDRVNTRUQKLQlsZG1tdXB0ZWgoazApCQkJISAgIDkgTFMgKGxhdGVuY3k9MikKLQotCWJ0CTIwZgkJCSEgMTEwIEJSCi0JdHN0CWs0LCBrMgkJCSEgIDY4IE1UCi0KLQkhIGswPU1NVV9QVEVILCBrMT1wdGUqLCBrMj1wdGUsIGszPV9QQUdFX0ZMQUdTX0hBUkRXQVJFLCBrND1fUEFHRV9BQ0NFU1NFRAotCi0jZW5kaWYKLQotCSEgU2V0IHVwIHRoZSBlbnRyeQotCi0JYW5kCWsyLCBrMwkJCSEgIDc4IEVYCi0JYnQvcwkxMGYJCQkhIDEwOCBCUgotCi0JIG1vdi5sCWszLCBAKE1NVV9QVEVMLU1NVV9QVEVILGswKQkhIDI3IExTCi0KLQlsZHRsYgkJCQkhIDEyOCBDTwotCi0JISBBdCBsZWFzdCBvbmUgaW5zdHJ1Y3Rpb24gYmV0d2VlbiBsZHRsYiBhbmQgcnRlCi0Jbm9wCQkJCSEgMTE5IE5PUAotCi0JcnRlCQkJCSEgMTI2IENPCi0KLQkgbm9wCQkJCSEgMTE5IE5PUAotCi0KLTEwOglvcglrNCwgazIJCQkhICA4MiBFWAotCi0JbGR0bGIJCQkJISAxMjggQ08KLQotCSEgQXQgbGVhc3Qgb25lIGluc3RydWN0aW9uIGJldHdlZW4gbGR0bGIgYW5kIHJ0ZQotCW1vdi5sCWsyLCBAazEJCQkhICAyNyBMUwotCi0JcnRlCQkJCSEgMTI2IENPCi0KLQkhIE5vdGUgd2UgY2Fubm90IGV4ZWN1dGUgbW92IGhlcmUsIGJlY2F1c2UgaXQgaXMgZXhlY3V0ZWQgYWZ0ZXIKLQkhIHJlc3RvcmluZyBTU1IsIHNvIHdvdWxkIGJlIGV4ZWN1dGVkIGluIHVzZXIgc3BhY2UuCi0JIG5vcAkJCQkhIDExOSBOT1AKLQotCi0JLmFsaWduIDUKLQkhIE9uY2UgY2FjaGUgbGluZSBpZiBwb3NzaWJsZS4uLgotMToJLmxvbmcJc3dhcHBlcl9wZ19kaXIKLTQ6CS5zaG9ydAkoUFRSU19QRVJfUEdELTEpIDw8IDIKLTU6CS5zaG9ydAlfUEFHRV9QUkVTRU5UCi03OgkubG9uZwlfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLCi04OgkubG9uZwlNTVVfUFRFSAotI2lmZGVmIENPVU5UX0VYQ0VQVElPTlMKLTk6CS5sb25nCWV4Y2VwdGlvbl9jb3VudF9taXNzCi0jZW5kaWYKLQotCSEgRWl0aGVyIHBnZCBvciBwdGUgbm90IHByZXNlbnQKLTIwOgltb3YubAkxZiwgazIKKwltb3YubAkxZiwgazIKIAltb3YubAk0ZiwgazMKIAlicmEJaGFuZGxlX2V4Y2VwdGlvbgogCSBtb3YubAlAazIsIGsyCkBAIC02NTEsMTUgKzQ5OCw2IEBACiAJYmYJaW50ZXJydXB0X2V4Y2VwdGlvbgogCXNobHIyCXI4CiAJc2hscglyOAotCi0jaWZkZWYgQ09VTlRfRVhDRVBUSU9OUwotCW1vdi5sCTVmLCByOQotCWFkZAlyOCwgcjkKLQltb3YubAlAcjksIHIxMAotCWFkZAkjMSwgcjEwCi0JbW92LmwJcjEwLCBAcjkKLSNlbmRpZgotCiAJbW92LmwJNGYsIHI5CiAJYWRkCXI4LCByOQogCW1vdi5sCUByOSwgcjkKQEAgLTY3Myw5ICs1MTEsNiBAQAogMjoJLmxvbmcJMHgwMDAwODBmMAkhIEZEPTEsIElNQVNLPTE1CiAzOgkubG9uZwkweGNmZmZmZmZmCSEgUkI9MCwgQkw9MAogNDoJLmxvbmcJZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlCi0jaWZkZWYgQ09VTlRfRVhDRVBUSU9OUwotNToJLmxvbmcJZXhjZXB0aW9uX2NvdW50X3RhYmxlCi0jZW5kaWYKIAogaW50ZXJydXB0X2V4Y2VwdGlvbjoKIAltb3YubAkxZiwgcjkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYwppbmRleCBlNjcwOTg4Li44MjFiMGFiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9wcm9iZS5jCkBAIC01MCw0MSArNTAsNDEgQEAKIAogCWJhY2tfdG9fUDEoKTsKIAotCWNwdV9kYXRhLT5kY2FjaGUud2F5cwkJPSA0OwotCWNwdV9kYXRhLT5kY2FjaGUuZW50cnlfc2hpZnQJPSA0OwotCWNwdV9kYXRhLT5kY2FjaGUubGluZXN6CQk9IEwxX0NBQ0hFX0JZVEVTOwotCWNwdV9kYXRhLT5kY2FjaGUuZmxhZ3MJCT0gMDsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzCQk9IDQ7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuZW50cnlfc2hpZnQJPSA0OworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmxpbmVzegkJPSBMMV9DQUNIRV9CWVRFUzsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5mbGFncwkJPSAwOwogCiAJLyoKIAkgKiA3NzA5QS83NzI5IGhhcyAxNksgY2FjaGUgKDI1Ni1lbnRyeSksIHdoaWxlIDc3MDIgaGFzIG9ubHkKIAkgKiAySyhkaXJlY3QpIDc3MDIgaXMgbm90IHN1cHBvcnRlZCAoeWV0KQogCSAqLwogCWlmIChkYXRhMCA9PSBkYXRhMSAmJiBkYXRhMiA9PSBkYXRhMykgewkvKiBTaGFkb3cgKi8KLQkJY3B1X2RhdGEtPmRjYWNoZS53YXlfaW5jcgk9ICgxIDw8IDExKTsKLQkJY3B1X2RhdGEtPmRjYWNoZS5lbnRyeV9tYXNrCT0gMHg3ZjA7Ci0JCWNwdV9kYXRhLT5kY2FjaGUuc2V0cwkJPSAxMjg7Ci0JCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzcwODsKKwkJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5X2luY3IJPSAoMSA8PCAxMSk7CisJCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X21hc2sJPSAweDdmMDsKKwkJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuc2V0cwkJPSAxMjg7CisJCWN1cnJlbnRfY3B1X2RhdGEudHlwZSA9IENQVV9TSDc3MDg7CiAKLQkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfTU1VX1BBR0VfQVNTT0M7CisJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19NTVVfUEFHRV9BU1NPQzsKIAl9IGVsc2UgewkJCQkvKiA3NzA5QSBvciA3NzI5ICAqLwotCQljcHVfZGF0YS0+ZGNhY2hlLndheV9pbmNyCT0gKDEgPDwgMTIpOwotCQljcHVfZGF0YS0+ZGNhY2hlLmVudHJ5X21hc2sJPSAweGZmMDsKLQkJY3B1X2RhdGEtPmRjYWNoZS5zZXRzCQk9IDI1NjsKLQkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3NzI5OworCQljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlfaW5jcgk9ICgxIDw8IDEyKTsKKwkJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuZW50cnlfbWFzawk9IDB4ZmYwOworCQljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5zZXRzCQk9IDI1NjsKKwkJY3VycmVudF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzcyOTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikKLQkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3NzA2OworCQljdXJyZW50X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3NzA2OwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKQotCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3MTA7CisJCWN1cnJlbnRfY3B1X2RhdGEudHlwZSA9IENQVV9TSDc3MTA7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCi0JCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzcwNTsKKwkJY3VycmVudF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzcwNTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKQotCQljcHVfZGF0YS0+ZGNhY2hlLndheV9pbmNyCT0gKDEgPDwgMTMpOwotCQljcHVfZGF0YS0+ZGNhY2hlLmVudHJ5X21hc2sJPSAweDFmZjA7Ci0JCWNwdV9kYXRhLT5kY2FjaGUuc2V0cwkJPSA1MTI7CisJCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyCT0gKDEgPDwgMTMpOworCQljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5lbnRyeV9tYXNrCT0gMHgxZmYwOworCQljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5zZXRzCQk9IDUxMjsKIAkJY3RybF9vdXRsKENDUl9DQUNIRV8zMktCLCBDQ1IzKTsKICNlbHNlCiAJCWN0cmxfb3V0bChDQ1JfQ0FDSEVfMTZLQiwgQ0NSMyk7CkBAIC05NSw4ICs5NSw4IEBACiAJLyoKIAkgKiBTSC0zIGRvZXNuJ3QgaGF2ZSBzZXBhcmF0ZSBjYWNoZXMKIAkgKi8KLQljcHVfZGF0YS0+ZGNhY2hlLmZsYWdzIHw9IFNIX0NBQ0hFX0NPTUJJTkVEOwotCWNwdV9kYXRhLT5pY2FjaGUgPSBjcHVfZGF0YS0+ZGNhY2hlOworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmZsYWdzIHw9IFNIX0NBQ0hFX0NPTUJJTkVEOworCWN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlID0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGU7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwOS5jCmluZGV4IGZmNDNlZjIuLmRjOWIyMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDkuYwpAQCAtNTEsMyArNTEsMjQgQEAKIAkJCQkgICAgQVJSQVlfU0laRShzaDc3MDlfZGV2aWNlcykpOwogfQogX19pbml0Y2FsbChzaDc3MDlfZGV2aWNlc19zZXR1cCk7CisKKyNkZWZpbmUgSVBSeChBLE4pIC5hZGRyPUEsIC5zaGlmdD0wKk4qLTEKKyNkZWZpbmUgSVBSQShOKQlJUFJ4KDB4ZmZmZmZlZTJVTCxOKQorI2RlZmluZSBJUFJCKE4pCUlQUngoMHhmZmZmZmVlNFVMLE4pCisjZGVmaW5lIElQUkUoTikJSVBSeCgweGE0MDAwMDFhVUwsTikKKworc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBzaDc3MDlfaXByX21hcFtdID0geworCVsxNl0JCT0geyBJUFJBKDE1LTEyKSwgMiB9LCAvKiBUTVUgVFVOSTAgKi8KKwlbMTddCQk9IHsgSVBSQSgxMS04KSwgIDQgfSwgLyogVE1VIFRVTkkxICovCisJWzIyXQkJPSB7IElQUkEoMy0wKSwgICAyIH0sIC8qIFJUQyBDVUkgKi8KKwlbMjMgLi4uIDI2XQk9IHsgSVBSQig3LTQpLCAgIDMgfSwgLyogU0NJICovCisJWzI3XQkJPSB7IElQUkIoMTUtMTIpLCAyIH0sIC8qIFdEVCBJVEkgKi8KKwlbNDggLi4uIDUxXQk9IHsgSVBSRSgxNS0xMiksIDcgfSwgLyogRE1BICovCisJWzUyIC4uLiA1NV0JPSB7IElQUkUoMTEtOCksICAzIH0sIC8qIElSREEgKi8KKwlbNTYgLi4uIDU5XQk9IHsgSVBSRSg3LTQpLCAgIDMgfSwgLyogU0NJRiAqLworfTsKKwordm9pZCBfX2luaXQgaW5pdF9JUlFfaXByKCkKK3sKKwltYWtlX2lwcl9pcnEoc2g3NzA5X2lwcl9tYXAsIEFSUkFZX1NJWkUoc2g3NzA5X2lwcl9tYXApKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwppbmRleCA5MDMxYTIyLi45ZDI4Yzg4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCkBAIC0xMCwxMSArMTAsMTAgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KLQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KIAogaW50IF9faW5pdCBkZXRlY3RfY3B1X2FuZF9jYWNoZV9zeXN0ZW0odm9pZCkKIHsKQEAgLTM2LDIwICszNSwyMCBAQAogCS8qCiAJICogU2V0dXAgc29tZSBzYW5lIFNILTQgZGVmYXVsdHMgZm9yIHRoZSBpY2FjaGUKIAkgKi8KLQljcHVfZGF0YS0+aWNhY2hlLndheV9pbmNyCT0gKDEgPDwgMTMpOwotCWNwdV9kYXRhLT5pY2FjaGUuZW50cnlfc2hpZnQJPSA1OwotCWNwdV9kYXRhLT5pY2FjaGUuc2V0cwkJPSAyNTY7Ci0JY3B1X2RhdGEtPmljYWNoZS53YXlzCQk9IDE7Ci0JY3B1X2RhdGEtPmljYWNoZS5saW5lc3oJCT0gTDFfQ0FDSEVfQllURVM7CisJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5X2luY3IJPSAoMSA8PCAxMyk7CisJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUuZW50cnlfc2hpZnQJPSA1OworCWN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLnNldHMJCT0gMjU2OworCWN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheXMJCT0gMTsKKwljdXJyZW50X2NwdV9kYXRhLmljYWNoZS5saW5lc3oJCT0gTDFfQ0FDSEVfQllURVM7CiAKIAkvKgogCSAqIEFuZCBhZ2FpbiBmb3IgdGhlIGRjYWNoZSAuLgogCSAqLwotCWNwdV9kYXRhLT5kY2FjaGUud2F5X2luY3IJPSAoMSA8PCAxNCk7Ci0JY3B1X2RhdGEtPmRjYWNoZS5lbnRyeV9zaGlmdAk9IDU7Ci0JY3B1X2RhdGEtPmRjYWNoZS5zZXRzCQk9IDUxMjsKLQljcHVfZGF0YS0+ZGNhY2hlLndheXMJCT0gMTsKLQljcHVfZGF0YS0+ZGNhY2hlLmxpbmVzegkJPSBMMV9DQUNIRV9CWVRFUzsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlfaW5jcgk9ICgxIDw8IDE0KTsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5lbnRyeV9zaGlmdAk9IDU7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuc2V0cwkJPSA1MTI7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5cwkJPSAxOworCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmxpbmVzegkJPSBMMV9DQUNIRV9CWVRFUzsKIAogCS8qCiAJICogU2V0dXAgc29tZSBnZW5lcmljIGZsYWdzIHdlIGNhbiBwcm9iZQpAQCAtNTcsMTYgKzU2LDE2IEBACiAJICovCiAJaWYgKCgocHZyID4+IDE2KSAmIDB4ZmYpID09IDB4MTApIHsKIAkJaWYgKChjdnIgJiAweDAyMDAwMDAwKSA9PSAwKQotCQkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfTDJfQ0FDSEU7CisJCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfTDJfQ0FDSEU7CiAJCWlmICgoY3ZyICYgMHgxMDAwMDAwMCkgPT0gMCkKLQkJCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0RTUDsKKwkJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19EU1A7CiAKLQkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfTExTQzsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0xMU0M7CiAJfQogCiAJLyogRlBVIGRldGVjdGlvbiB3b3JrcyBmb3IgZXZlcnlvbmUgKi8KIAlpZiAoKGN2ciAmIDB4MjAwMDAwMDApID09IDEpCi0JCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKIAogCS8qIE1hc2sgb2ZmIHRoZSB1cHBlciBjaGlwIElEICovCiAJcHZyICY9IDB4ZmZmZjsKQEAgLTc3LDE1MSArNzYsMTUxIEBACiAJICovCiAJc3dpdGNoIChwdnIpIHsKIAljYXNlIDB4MjA1OgotCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3NTA7Ci0JCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX1AyX0ZMVVNIX0JVRyB8IENQVV9IQVNfRlBVIHwKKwkJY3VycmVudF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzc1MDsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX1AyX0ZMVVNIX0JVRyB8IENQVV9IQVNfRlBVIHwKIAkJCQkgICBDUFVfSEFTX1BFUkZfQ09VTlRFUjsKIAkJYnJlYWs7CiAJY2FzZSAweDIwNjoKLQkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3NzUwUzsKLQkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfUDJfRkxVU0hfQlVHIHwgQ1BVX0hBU19GUFUgfAorCQljdXJyZW50X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3NzUwUzsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX1AyX0ZMVVNIX0JVRyB8IENQVV9IQVNfRlBVIHwKIAkJCQkgICBDUFVfSEFTX1BFUkZfQ09VTlRFUjsKIAkJYnJlYWs7CiAJY2FzZSAweDExMDA6Ci0JCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzc1MTsKLQkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfRlBVOworCQljdXJyZW50X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3NzUxOworCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRlBVOwogCQlicmVhazsKIAljYXNlIDB4MjAwMDoKLQkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3MzE4MDsKLQkJY3B1X2RhdGEtPmljYWNoZS53YXlzID0gNDsKLQkJY3B1X2RhdGEtPmRjYWNoZS53YXlzID0gNDsKLQkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfTExTQzsKKwkJY3VycmVudF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzMxODA7CisJCWN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheXMgPSA0OworCQljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzID0gNDsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0xMU0M7CiAJCWJyZWFrOwogCWNhc2UgMHgyMDAxOgogCWNhc2UgMHgyMDA0OgotCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3NzA7Ci0JCWNwdV9kYXRhLT5pY2FjaGUud2F5cyA9IDQ7Ci0JCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDQ7CisJCWN1cnJlbnRfY3B1X2RhdGEudHlwZSA9IENQVV9TSDc3NzA7CisJCWN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheXMgPSA0OworCQljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzID0gNDsKIAotCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX0xMU0M7CisJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX0xMU0M7CiAJCWJyZWFrOwogCWNhc2UgMHgyMDA2OgogCWNhc2UgMHgyMDBBOgogCQlpZiAocHJyID09IDB4NjEpCi0JCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3ODE7CisJCQljdXJyZW50X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3NzgxOwogCQllbHNlCi0JCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3ODA7CisJCQljdXJyZW50X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3NzgwOwogCi0JCWNwdV9kYXRhLT5pY2FjaGUud2F5cyA9IDQ7Ci0JCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDQ7CisJCWN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheXMgPSA0OworCQljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzID0gNDsKIAotCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX1BFUkZfQ09VTlRFUiB8CisJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX1BFUkZfQ09VTlRFUiB8CiAJCQkJICAgQ1BVX0hBU19MTFNDOwogCQlicmVhazsKIAljYXNlIDB4MzAwMDoKIAljYXNlIDB4MzAwMzoKIAljYXNlIDB4MzAwOToKLQkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3MzQzOwotCQljcHVfZGF0YS0+aWNhY2hlLndheXMgPSA0OwotCQljcHVfZGF0YS0+ZGNhY2hlLndheXMgPSA0OwotCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19MTFNDOworCQljdXJyZW50X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3MzQzOworCQljdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXlzID0gNDsKKwkJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDQ7CisJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19MTFNDOwogCQlicmVhazsKIAljYXNlIDB4MzAwODoKIAkJaWYgKHByciA9PSAweGEwKSB7Ci0JCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3MjI7Ci0JCQljcHVfZGF0YS0+aWNhY2hlLndheXMgPSA0OwotCQkJY3B1X2RhdGEtPmRjYWNoZS53YXlzID0gNDsKLQkJCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0xMU0M7CisJCQljdXJyZW50X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3NzIyOworCQkJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDQ7CisJCQljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzID0gNDsKKwkJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19MTFNDOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMHg4MDAwOgotCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TVDQwUkE7Ci0JCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKKwkJY3VycmVudF9jcHVfZGF0YS50eXBlID0gQ1BVX1NUNDBSQTsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKIAkJYnJlYWs7CiAJY2FzZSAweDgxMDA6Ci0JCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NUNDBHWDE7Ci0JCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKKwkJY3VycmVudF9jcHVfZGF0YS50eXBlID0gQ1BVX1NUNDBHWDE7CisJCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19GUFU7CiAJCWJyZWFrOwogCWNhc2UgMHg3MDA6Ci0JCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINF81MDE7Ci0JCWNwdV9kYXRhLT5pY2FjaGUud2F5cyA9IDI7Ci0JCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDI7CisJCWN1cnJlbnRfY3B1X2RhdGEudHlwZSA9IENQVV9TSDRfNTAxOworCQljdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXlzID0gMjsKKwkJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDI7CiAJCWJyZWFrOwogCWNhc2UgMHg2MDA6Ci0JCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINF8yMDI7Ci0JCWNwdV9kYXRhLT5pY2FjaGUud2F5cyA9IDI7Ci0JCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDI7Ci0JCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKKwkJY3VycmVudF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINF8yMDI7CisJCWN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheXMgPSAyOworCQljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzID0gMjsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKIAkJYnJlYWs7CiAJY2FzZSAweDUwMCAuLi4gMHg1MDE6CiAJCXN3aXRjaCAocHJyKSB7CiAJCWNhc2UgMHgxMDoKLQkJCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzc1MFI7CisJCQljdXJyZW50X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3NzUwUjsKIAkJCWJyZWFrOwogCQljYXNlIDB4MTE6Ci0JCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3NTFSOworCQkJY3VycmVudF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzc1MVI7CiAJCQlicmVhazsKIAkJY2FzZSAweDUwIC4uLiAweDVmOgotCQkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3NzYwOworCQkJY3VycmVudF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzc2MDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJY3B1X2RhdGEtPmljYWNoZS53YXlzID0gMjsKLQkJY3B1X2RhdGEtPmRjYWNoZS53YXlzID0gMjsKKwkJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDI7CisJCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheXMgPSAyOwogCi0JCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKKwkJY3VycmVudF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKIAogCQlicmVhazsKIAlkZWZhdWx0OgotCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSF9OT05FOworCQljdXJyZW50X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0hfTk9ORTsKIAkJYnJlYWs7CiAJfQogCiAjaWZkZWYgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQKLQljcHVfZGF0YS0+aWNhY2hlLndheXMgPSAxOwotCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDE7CisJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDE7CisJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDE7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19DUFVfSEFTX1BURUEKLQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19QVEVBOworCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19QVEVBOwogI2VuZGlmCiAKIAkvKgogCSAqIE9uIGFueXRoaW5nIHRoYXQncyBub3QgYSBkaXJlY3QtbWFwcGVkIGNhY2hlLCBsb29rIHRvIHRoZSBDVlIKIAkgKiBmb3IgSS9ELWNhY2hlIHNwZWNpZmljcy4KIAkgKi8KLQlpZiAoY3B1X2RhdGEtPmljYWNoZS53YXlzID4gMSkgeworCWlmIChjdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXlzID4gMSkgewogCQlzaXplID0gc2l6ZXNbKGN2ciA+PiAyMCkgJiAweGZdOwotCQljcHVfZGF0YS0+aWNhY2hlLndheV9pbmNyCT0gKHNpemUgPj4gMSk7Ci0JCWNwdV9kYXRhLT5pY2FjaGUuc2V0cwkJPSAoc2l6ZSA+PiA2KTsKKwkJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5X2luY3IJPSAoc2l6ZSA+PiAxKTsKKwkJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUuc2V0cwkJPSAoc2l6ZSA+PiA2KTsKIAogCX0KIAogCS8qIFNldHVwIHRoZSByZXN0IG9mIHRoZSBJLWNhY2hlIGluZm8gKi8KLQljcHVfZGF0YS0+aWNhY2hlLmVudHJ5X21hc2sgPSBjcHVfZGF0YS0+aWNhY2hlLndheV9pbmNyIC0KLQkJCQkgICAgICBjcHVfZGF0YS0+aWNhY2hlLmxpbmVzejsKKwljdXJyZW50X2NwdV9kYXRhLmljYWNoZS5lbnRyeV9tYXNrID0gY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5X2luY3IgLQorCQkJCSAgICAgIGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLmxpbmVzejsKIAotCWNwdV9kYXRhLT5pY2FjaGUud2F5X3NpemUgPSBjcHVfZGF0YS0+aWNhY2hlLnNldHMgKgotCQkJCSAgICBjcHVfZGF0YS0+aWNhY2hlLmxpbmVzejsKKwljdXJyZW50X2NwdV9kYXRhLmljYWNoZS53YXlfc2l6ZSA9IGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLnNldHMgKgorCQkJCSAgICBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS5saW5lc3o7CiAKIAkvKiBBbmQgdGhlIHJlc3Qgb2YgdGhlIEQtY2FjaGUgKi8KLQlpZiAoY3B1X2RhdGEtPmRjYWNoZS53YXlzID4gMSkgeworCWlmIChjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzID4gMSkgewogCQlzaXplID0gc2l6ZXNbKGN2ciA+PiAxNikgJiAweGZdOwotCQljcHVfZGF0YS0+ZGNhY2hlLndheV9pbmNyCT0gKHNpemUgPj4gMSk7Ci0JCWNwdV9kYXRhLT5kY2FjaGUuc2V0cwkJPSAoc2l6ZSA+PiA2KTsKKwkJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5X2luY3IJPSAoc2l6ZSA+PiAxKTsKKwkJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuc2V0cwkJPSAoc2l6ZSA+PiA2KTsKIAl9CiAKLQljcHVfZGF0YS0+ZGNhY2hlLmVudHJ5X21hc2sgPSBjcHVfZGF0YS0+ZGNhY2hlLndheV9pbmNyIC0KLQkJCQkgICAgICBjcHVfZGF0YS0+ZGNhY2hlLmxpbmVzejsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5lbnRyeV9tYXNrID0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5X2luY3IgLQorCQkJCSAgICAgIGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmxpbmVzejsKIAotCWNwdV9kYXRhLT5kY2FjaGUud2F5X3NpemUgPSBjcHVfZGF0YS0+ZGNhY2hlLnNldHMgKgotCQkJCSAgICBjcHVfZGF0YS0+ZGNhY2hlLmxpbmVzejsKKwljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlfc2l6ZSA9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLnNldHMgKgorCQkJCSAgICBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5saW5lc3o7CiAKIAkvKgogCSAqIFNldHVwIHRoZSBMMiBjYWNoZSBkZXNjCiAJICoKIAkgKiBTSC00QSdzIGhhdmUgYW4gb3B0aW9uYWwgUElQVCBMMi4KIAkgKi8KLQlpZiAoY3B1X2RhdGEtPmZsYWdzICYgQ1BVX0hBU19MMl9DQUNIRSkgeworCWlmIChjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19MMl9DQUNIRSkgewogCQkvKgogCQkgKiBTaXplIGNhbGN1bGF0aW9uIGlzIG11Y2ggbW9yZSBzZW5zaWJsZQogCQkgKiB0aGFuIGl0IGlzIGZvciB0aGUgTDEuCkBAIC0yMzIsMTYgKzIzMSwyMiBAQAogCiAJCUJVR19PTighc2l6ZSk7CiAKLQkJY3B1X2RhdGEtPnNjYWNoZS53YXlfaW5jcgk9ICgxIDw8IDE2KTsKLQkJY3B1X2RhdGEtPnNjYWNoZS5lbnRyeV9zaGlmdAk9IDU7Ci0JCWNwdV9kYXRhLT5zY2FjaGUud2F5cwkJPSA0OwotCQljcHVfZGF0YS0+c2NhY2hlLmxpbmVzegkJPSBMMV9DQUNIRV9CWVRFUzsKLQkJY3B1X2RhdGEtPnNjYWNoZS5lbnRyeV9tYXNrCT0KLQkJCShjcHVfZGF0YS0+c2NhY2hlLndheV9pbmNyIC0gY3B1X2RhdGEtPnNjYWNoZS5saW5lc3opOwotCQljcHVfZGF0YS0+c2NhY2hlLnNldHMJCT0gc2l6ZSAvCi0JCQkoY3B1X2RhdGEtPnNjYWNoZS5saW5lc3ogKiBjcHVfZGF0YS0+c2NhY2hlLndheXMpOwotCQljcHVfZGF0YS0+c2NhY2hlLndheV9zaXplCT0KLQkJCShjcHVfZGF0YS0+c2NhY2hlLnNldHMgKiBjcHVfZGF0YS0+c2NhY2hlLmxpbmVzeik7CisJCWN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheV9pbmNyCT0gKDEgPDwgMTYpOworCQljdXJyZW50X2NwdV9kYXRhLnNjYWNoZS5lbnRyeV9zaGlmdAk9IDU7CisJCWN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheXMJCT0gNDsKKwkJY3VycmVudF9jcHVfZGF0YS5zY2FjaGUubGluZXN6CQk9IEwxX0NBQ0hFX0JZVEVTOworCisJCWN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLmVudHJ5X21hc2sJPQorCQkJKGN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLndheV9pbmNyIC0KKwkJCSBjdXJyZW50X2NwdV9kYXRhLnNjYWNoZS5saW5lc3opOworCisJCWN1cnJlbnRfY3B1X2RhdGEuc2NhY2hlLnNldHMJCT0gc2l6ZSAvCisJCQkoY3VycmVudF9jcHVfZGF0YS5zY2FjaGUubGluZXN6ICoKKwkJCSBjdXJyZW50X2NwdV9kYXRhLnNjYWNoZS53YXlzKTsKKworCQljdXJyZW50X2NwdV9kYXRhLnNjYWNoZS53YXlfc2l6ZQk9CisJCQkoY3VycmVudF9jcHVfZGF0YS5zY2FjaGUuc2V0cyAqCisJCQkgY3VycmVudF9jcHVfZGF0YS5zY2FjaGUubGluZXN6KTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCmluZGV4IGNiYWMyNzYuLjZmOGY0NTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwpAQCAtNDYsMTEgKzQ2LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKKyNpZm5kZWYgQ09ORklHX1NIX1JUUzc3NTFSMkQKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJLAogCQkuaXJxcwkJPSB7IDIzLCAyNCwgMjUsIDAgfSwKIAl9LCB7CisjZW5kaWYKIAkJLm1hcGJhc2UJPSAweGZmZTgwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKQEAgLTEwMSw3ICsxMDMsNyBAQAogCXsgMzUsIDIsICA4LCA3IH0sIC8qIERNQUMgRE1URTEgKi8KIAl7IDM2LCAyLCAgOCwgNyB9LCAvKiBETUFDIERNVEUyICovCiAJeyAzNywgMiwgIDgsIDcgfSwgLyogRE1BQyBETVRFMyAqLwotCXsgMjgsIDIsICA4LCA3IH0sIC8qIERNQUMgRE1BRSAqLworCXsgMzgsIDIsICA4LCA3IH0sIC8qIERNQUMgRE1BRSAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBzaDc3NTFfaXByX21hcFtdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKaW5kZXggMDdlNTM3Ny4uYjdjNzAyOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCkBAIC01MiwxNyArNTIsMTEgQEAKIH0KIF9faW5pdGNhbGwoc2g3NzYwX2RldmljZXNfc2V0dXApOwogCi0vKgotICogU0g3NzYwIElOVEMyLVN0eWxlIGludGVycnVwdHMsIHZlY3RvcnMgSVJRNDgtMTExIElOVEVWVCAweDgwMC0weEZFMAotICovCiBzdGF0aWMgc3RydWN0IGludGMyX2RhdGEgaW50YzJfaXJxX3RhYmxlW10gPSB7Ci0JLyogSU5UUFJJTzAgfCBJTlRNU0swICovCiAJezQ4LCAgMCwgMjgsIDAsIDMxLCAgM30sCS8qIElSUSA0ICovCiAJezQ5LCAgMCwgMjQsIDAsIDMwLCAgM30sCS8qIElSUSAzICovCiAJezUwLCAgMCwgMjAsIDAsIDI5LCAgM30sCS8qIElSUSAyICovCiAJezUxLCAgMCwgMTYsIDAsIDI4LCAgM30sCS8qIElSUSAxICovCi0JLyogNTItNTUgKElOVEVWVCAweDg4MC0weDhFMCkgdW51c2VkL3Jlc2VydmVkICovCi0JLyogSU5UUFJJTzQgfCBJTlRNU0swICovCiAJezU2LCAgNCwgMjgsIDAsIDI1LCAgM30sCS8qIEhDQU4yX0NIQU4wICovCiAJezU3LCAgNCwgMjQsIDAsIDI0LCAgM30sCS8qIEhDQU4yX0NIQU4xICovCiAJezU4LCAgNCwgMjAsIDAsIDIzLCAgM30sCS8qIEkyU19DSEFOMCAgICovCkBAIC03MSwxOCArNjUsMTUgQEAKIAl7NjEsICA0LCAgOCwgMCwgMjAsICAzfSwJLyogQUM5N19DSEFOMSAgKi8KIAl7NjIsICA0LCAgNCwgMCwgMTksICAzfSwJLyogSTJDX0NIQU4wICAgKi8KIAl7NjMsICA0LCAgMCwgMCwgMTgsICAzfSwJLyogSTJDX0NIQU4xICAgKi8KLQkvKiBJTlRQUklPOCB8IElOVE1TSzAgKi8KIAl7NTIsICA4LCAxNiwgMCwgMTEsICAzfSwJLyogU0NJRjBfRVJJX0lSUSAqLwogCXs1MywgIDgsIDE2LCAwLCAxMCwgIDN9LAkvKiBTQ0lGMF9SWElfSVJRICovCiAJezU0LCAgOCwgMTYsIDAsICA5LCAgM30sCS8qIFNDSUYwX0JSSV9JUlEgKi8KIAl7NTUsICA4LCAxNiwgMCwgIDgsICAzfSwJLyogU0NJRjBfVFhJX0lSUSAqLwogCXs2NCwgIDgsIDI4LCAwLCAxNywgIDN9LAkvKiBVU0JISV9JUlEgKi8KIAl7NjUsICA4LCAyNCwgMCwgMTYsICAzfSwJLyogTENEQyAgICAgICovCi0JLyogNjYsIDY3IHVudXNlZCAqLwogCXs2OCwgIDgsIDIwLCAwLCAxNCwgMTN9LAkvKiBETUFCUkdJMF9JUlEgKi8KIAl7NjksICA4LCAyMCwgMCwgMTMsIDEzfSwJLyogRE1BQlJHSTFfSVJRICovCiAJezcwLCAgOCwgMjAsIDAsIDEyLCAxM30sCS8qIERNQUJSR0kyX0lSUSAqLwotCS8qIDcxIHVudXNlZCAqLwogCXs3MiwgIDgsIDEyLCAwLCAgNywgIDN9LAkvKiBTQ0lGMV9FUklfSVJRICovCiAJezczLCAgOCwgMTIsIDAsICA2LCAgM30sCS8qIFNDSUYxX1JYSV9JUlEgKi8KIAl7NzQsICA4LCAxMiwgMCwgIDUsICAzfSwJLyogU0NJRjFfQlJJX0lSUSAqLwpAQCAtOTEsMjYgKzgyLDcxIEBACiAJezc3LCAgOCwgIDgsIDAsICAyLCAgM30sCS8qIFNDSUYyX1JYSV9JUlEgKi8KIAl7NzgsICA4LCAgOCwgMCwgIDEsICAzfSwJLyogU0NJRjJfQlJJX0lSUSAqLwogCXs3OSwgIDgsICA4LCAwLCAgMCwgIDN9LAkvKiBTQ0lGMl9UWElfSVJRICovCi0JLyogICAgICAgICAgfCBJTlRNU0s0ICovCiAJezgwLCAgOCwgIDQsIDQsIDIzLCAgM30sCS8qIFNJTV9FUkkgKi8KIAl7ODEsICA4LCAgNCwgNCwgMjIsICAzfSwJLyogU0lNX1JYSSAqLwogCXs4MiwgIDgsICA0LCA0LCAyMSwgIDN9LAkvKiBTSU1fVFhJICovCiAJezgzLCAgOCwgIDQsIDQsIDIwLCAgM30sCS8qIFNJTV9URUkgKi8KIAl7ODQsICA4LCAgMCwgNCwgMTksICAzfSwJLyogSFNQSUkgKi8KLQkvKiBJTlRQUklPQyB8IElOVE1TSzQgKi8KLQkvKiA4NS04NyB1bnVzZWQvcmVzZXJ2ZWQgKi8KIAl7ODgsIDEyLCAyMCwgNCwgMTgsICAzfSwJLyogTU1DSTAgKi8KIAl7ODksIDEyLCAyMCwgNCwgMTcsICAzfSwJLyogTU1DSTEgKi8KIAl7OTAsIDEyLCAyMCwgNCwgMTYsICAzfSwJLyogTU1DSTIgKi8KIAl7OTEsIDEyLCAyMCwgNCwgMTUsICAzfSwJLyogTU1DSTMgKi8KLQl7OTIsIDEyLCAxMiwgNCwgIDYsICAzfSwJLyogTUZJICh1bnN1cmUsIGJ1Zz8gaW4gbXkgNzc2MCBtYW51YWwqLwotCS8qIDkzLTEwNyByZXNlcnZlZC91bmRvY3VtZW50ZWQgKi8KKwl7OTIsIDEyLCAxMiwgNCwgIDYsICAzfSwJLyogTUZJICovCiAJezEwOCwxMiwgIDQsIDQsICAxLCAgM30sCS8qIEFEQyAgKi8KIAl7MTA5LDEyLCAgMCwgNCwgIDAsICAzfSwJLyogQ01USSAqLwotCS8qIDExMC0xMTEgcmVzZXJ2ZWQvdW51c2VkICovCiB9OwogCitzdGF0aWMgc3RydWN0IGlwcl9kYXRhIHNoNzc2MF9pcHJfbWFwW10gPSB7CisJLyogSVJRLCBJUFItaWR4LCBzaGlmdCwgcHJpb3JpdHkgKi8KKwl7IDE2LCAwLCAxMiwgMiB9LCAvKiBUTVUwIFRVTkkqLworCXsgMTcsIDAsICA4LCAyIH0sIC8qIFRNVTEgVFVOSSAqLworCXsgMTgsIDAsICA0LCAyIH0sIC8qIFRNVTIgVFVOSSAqLworCXsgMTksIDAsICA0LCAyIH0sIC8qIFRNVTIgVElQQ0kgKi8KKwl7IDI3LCAxLCAxMiwgMiB9LCAvKiBXRFQgSVRJICovCisJeyAyOCwgMSwgIDgsIDIgfSwgLyogUkVGIFJDTUkgKi8KKwl7IDI5LCAxLCAgOCwgMiB9LCAvKiBSRUYgUk9WSSAqLworCXsgMzIsIDIsICAwLCA3IH0sIC8qIEhVREkgKi8KKwl7IDMzLCAyLCAxMiwgNyB9LCAvKiBHUElPSSAqLworCXsgMzQsIDIsICA4LCA3IH0sIC8qIERNQUMgRE1URTAgKi8KKwl7IDM1LCAyLCAgOCwgNyB9LCAvKiBETUFDIERNVEUxICovCisJeyAzNiwgMiwgIDgsIDcgfSwgLyogRE1BQyBETVRFMiAqLworCXsgMzcsIDIsICA4LCA3IH0sIC8qIERNQUMgRE1URTMgKi8KKwl7IDM4LCAyLCAgOCwgNyB9LCAvKiBETUFDIERNQUUgKi8KKwl7IDQ0LCAyLCAgOCwgNyB9LCAvKiBETUFDIERNVEU0ICovCisJeyA0NSwgMiwgIDgsIDcgfSwgLyogRE1BQyBETVRFNSAqLworCXsgNDYsIDIsICA4LCA3IH0sIC8qIERNQUMgRE1URTYgKi8KKwl7IDQ3LCAyLCAgOCwgNyB9LCAvKiBETUFDIERNVEU3ICovCisvKiB0aGVzZSBoZXJlIGFyZSBvbmx5IHZhbGlkIGlmIElOVENfSUNSIGJpdCA3IGlzIHNldCB0byAxIQorICogWFhYOiBtYXliZSBDT05GSUdfU0hfSVJMTU9ERSBzeW1ib2w/IFNINzc1MSBjb3VsZCB1c2UgaXQgdG9vICovCisjaWYgMAorCXsgIDIsIDMsIDEyLCAzIH0sIC8qIElSTDAgKi8KKwl7ICA1LCAzLCAgOCwgMyB9LCAvKiBJUkwxICovCisJeyAgOCwgMywgIDQsIDMgfSwgLyogSVJMMiAqLworCXsgMTEsIDMsICAwLCAzIH0sIC8qIElSTDMgKi8KKyNlbmRpZgorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaXByX29mZnNldHNbXSA9IHsKKwkweGZmZDAwMDA0VUwsCS8qIDA6IElQUkEgKi8KKwkweGZmZDAwMDA4VUwsCS8qIDE6IElQUkIgKi8KKwkweGZmZDAwMDBjVUwsCS8qIDI6IElQUkMgKi8KKwkweGZmZDAwMDEwVUwsCS8qIDM6IElQUkQgKi8KK307CisKKy8qIGdpdmVuIHRoZSBJUFIgaW5kZXggcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBJUFIgcmVnaXN0ZXIgKi8KK3Vuc2lnbmVkIGludCBtYXBfaXByaWR4X3RvX2FkZHIoaW50IGlkeCkKK3sKKwlpZiAoaWR4ID49IEFSUkFZX1NJWkUoaXByX29mZnNldHMpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gaXByX29mZnNldHNbaWR4XTsKK30KKwogdm9pZCBfX2luaXQgaW5pdF9JUlFfaW50YzIodm9pZCkKIHsKIAltYWtlX2ludGMyX2lycShpbnRjMl9pcnFfdGFibGUsIEFSUkFZX1NJWkUoaW50YzJfaXJxX3RhYmxlKSk7CiB9CisKK3ZvaWQgX19pbml0ICBpbml0X0lSUV9pcHIodm9pZCkKK3sKKwltYWtlX2lwcl9pcnEoc2g3NzYwX2lwcl9tYXAsIEFSUkFZX1NJWkUoc2g3NzYwX2lwcl9tYXApKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2RlYnVndHJhcHMuUyBiL2FyY2gvc2gva2VybmVsL2RlYnVndHJhcHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2I2Njc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvZGVidWd0cmFwcy5TCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9kZWJ1Z3RyYXBzLlMKKyAqCisgKiBEZWJ1ZyB0cmFwIGp1bXAgdGFibGVzIGZvciBTdXBlckgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zeXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKyNpZiAhZGVmaW5lZChDT05GSUdfU0hfS0dEQikKKyNkZWZpbmUga2dkYl9oYW5kbGVfZXhjZXB0aW9uCWRlYnVnX3RyYXBfaGFuZGxlcgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKKyNkZWZpbmUgc2hfYmlvc19oYW5kbGVyCQlkZWJ1Z190cmFwX2hhbmRsZXIKKyNlbmRpZgorCisJLmRhdGEKKworRU5UUlkoZGVidWdfdHJhcF90YWJsZSkKKwkubG9uZyBkZWJ1Z190cmFwX2hhbmRsZXIJLyogMHgzMCAqLworCS5sb25nIGRlYnVnX3RyYXBfaGFuZGxlcgkvKiAweDMxICovCisJLmxvbmcgZGVidWdfdHJhcF9oYW5kbGVyCS8qIDB4MzIgKi8KKwkubG9uZyBkZWJ1Z190cmFwX2hhbmRsZXIJLyogMHgzMyAqLworCS5sb25nIGRlYnVnX3RyYXBfaGFuZGxlcgkvKiAweDM0ICovCisJLmxvbmcgZGVidWdfdHJhcF9oYW5kbGVyCS8qIDB4MzUgKi8KKwkubG9uZyBkZWJ1Z190cmFwX2hhbmRsZXIJLyogMHgzNiAqLworCS5sb25nIGRlYnVnX3RyYXBfaGFuZGxlcgkvKiAweDM3ICovCisJLmxvbmcgZGVidWdfdHJhcF9oYW5kbGVyCS8qIDB4MzggKi8KKwkubG9uZyBkZWJ1Z190cmFwX2hhbmRsZXIJLyogMHgzOSAqLworCS5sb25nIGRlYnVnX3RyYXBfaGFuZGxlcgkvKiAweDNhICovCisJLmxvbmcgZGVidWdfdHJhcF9oYW5kbGVyCS8qIDB4M2IgKi8KKwkubG9uZyBrZ2RiX2hhbmRsZV9leGNlcHRpb24JLyogMHgzYyAqLworCS5sb25nIGRlYnVnX3RyYXBfaGFuZGxlcgkvKiAweDNkICovCisJLmxvbmcgYnVnX3RyYXBfaGFuZGxlcgkJLyogMHgzZSAqLworCS5sb25nIHNoX2Jpb3NfaGFuZGxlcgkJLyogMHgzZiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCA1NjBiOTFjLi45MDQ4YzAzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMTA2LDEyICsxMDYsMzIgQEAKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSAmJiAhZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKKyNkZWZpbmUgREVGQVVMVF9CQVVEIDExNTIwMAogLyoKICAqIFNpbXBsZSBTQ0lGIGluaXQsIHByaW1hcmlseSBhaW1lZCBhdCBTSDc3NTAgYW5kIG90aGVyIHNpbWlsYXIgU0gtNAogICogZGV2aWNlcyB0aGF0IGFyZW4ndCB1c2luZyBzaC1pcGwrZy4KICAqLwotc3RhdGljIHZvaWQgc2NpZl9zZXJjb25faW5pdChpbnQgYmF1ZCkKK3N0YXRpYyB2b2lkIHNjaWZfc2VyY29uX2luaXQoY2hhciAqcykKIHsKKwl1bnNpZ25lZCBiYXVkID0gREVGQVVMVF9CQVVEOworCWNoYXIgKmU7CisKKwlpZiAoKnMgPT0gJywnKQorCQkrK3M7CisKKwlpZiAoKnMpIHsKKwkJLyogaWdub3JlIGlvcG9ydC9kZXZpY2UgbmFtZSAqLworCQlzICs9IHN0cmNzcG4ocywgIiwiKTsKKwkJaWYgKCpzID09ICcsJykKKwkJCXMrKzsKKwl9CisKKwlpZiAoKnMpIHsKKwkJYmF1ZCA9IHNpbXBsZV9zdHJ0b3VsKHMsICZlLCAwKTsKKwkJaWYgKGJhdWQgPT0gMCB8fCBzID09IGUpCisJCQliYXVkID0gREVGQVVMVF9CQVVEOworCX0KKwogCWN0cmxfb3V0dygwLCBzY2lmX3BvcnQubWFwYmFzZSArIDgpOwogCWN0cmxfb3V0dygwLCBzY2lmX3BvcnQubWFwYmFzZSk7CiAKQEAgLTE2Nyw3ICsxODcsNyBAQAogCQllYXJseV9jb25zb2xlID0gJnNjaWZfY29uc29sZTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpICYmICFkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQotCQlzY2lmX3NlcmNvbl9pbml0KDExNTIwMCk7CisJCXNjaWZfc2VyY29uX2luaXQoYnVmICsgNik7CiAjZW5kaWYKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggZmMyNzlhZS4uYWI0ZWJiOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTU0LDc5ICs1NCwyNCBAQAogIyAgZGVmaW5lIHJlc3VtZV9rZXJuZWwJCV9fcmVzdG9yZV9hbGwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykgfHwgZGVmaW5lZChDT05GSUdfU0hfS0dEQikKLSEgSGFuZGxlIGtlcm5lbCBkZWJ1ZyBpZiBlaXRoZXIga2dkYiAoU1cpIG9yIGdkYi1zdHViIChGVykgaXMgcHJlc2VudC4KLSEgSWYgYm90aCBhcmUgY29uZmlndXJlZCwgaGFuZGxlIHRoZSBkZWJ1ZyB0cmFwcyAoYnJlYWtwb2ludHMpIGluIFNXLAotISBidXQgc3RpbGwgYWxsb3cgQklPUyB0cmFwcyB0byBGVy4KLQotCS5hbGlnbgkyCi1kZWJ1Z19rZXJuZWw6Ci0jaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykgJiYgZGVmaW5lZChDT05GSUdfU0hfS0dEQikKLQkvKiBGb3JjZSBCSU9TIGNhbGwgdG8gRlcgKGRlYnVnX3RyYXAgcHV0IFRSQSBpbiByOCkgKi8KLQltb3YJcjgscjAKLQlzaGxyMglyMAotCWNtcC9lcQkjMHgzZixyMAotCWJ0CWRlYnVnX2tlcm5lbF9mdwotI2VuZGlmIC8qIENPTkZJR19TSF9TVEFOREFSRF9CSU9TICYmIENPTkZJR19TSF9LR0RCICovCi0KLWRlYnVnX2VudGVyOgkJCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfS0dEQikKLQkvKiBKdW1wIHRvIGtnZGIsIHBhc3Mgc3RhY2tlZCByZWdzIGFzIGFyZyAqLwotZGVidWdfa2VybmVsX3N3OgotCW1vdi5sCTNmLCByMAotCWptcAlAcjAKLQkgbW92CXIxNSwgcjQKLQkuYWxpZ24JMgotMzoJLmxvbmcJa2dkYl9oYW5kbGVfZXhjZXB0aW9uCi0jZW5kaWYgLyogQ09ORklHX1NIX0tHREIgKi8KLSNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwotCWJyYQlkZWJ1Z19rZXJuZWxfZncKLQkgbm9wCi0jZW5kaWYKLSNlbmRpZiAvKiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyB8fCBDT05GSUdfU0hfS0dEQiAqLwotCi0JLmFsaWduCTIKLWRlYnVnX3RyYXA6CQotI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpIHx8IGRlZmluZWQoQ09ORklHX1NIX0tHREIpCi0JbW92CXI4LCByMAotCXNobHIyCXIwCi0JY21wL2VxCSMweDNmLCByMAkJISBzaF9iaW9zKCkgdHJhcAotCWJmCTFmCi0jaWZkZWYgQ09ORklHX1NIX0tHREIKLQljbXAvZXEJIzB4ZmYsIHIwCQkhIFhYWDogS0dEQiB0cmFwLCBmaXggZm9yIFNILTIuCi0JYmYJMWYKLSNlbmRpZgotCW1vdgkjT0ZGX1NSLCByMAotCW1vdi5sCUAocjAscjE1KSwgcjAJCSEgZ2V0IHN0YXR1cyByZWdpc3RlcgotCXNobGwJcjAKLQlzaGxsCXIwCQkJISBrZXJuZWwgc3BhY2U/Ci0JYnQvcwlkZWJ1Z19rZXJuZWwKLTE6Ci0jZW5kaWYKLQkgbW92LmwJQHIxNSwgcjAJCSEgUmVzdG9yZSBSMCB2YWx1ZQotCW1vdi5sCTFmLCByOAotCWptcAlAcjgKLQkgbm9wCiAKIAkuYWxpZ24JMgogRU5UUlkoZXhjZXB0aW9uX2Vycm9yKQogCSEKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQltb3YubAkzZiwgcjAKKwltb3YubAkyZiwgcjAKIAlqc3IJQHIwCiAJIG5vcAogI2VuZGlmCiAJc3RpCi0JbW92LmwJMmYsIHIwCisJbW92LmwJMWYsIHIwCiAJam1wCUByMAogCSBub3AKIAotIQogCS5hbGlnbgkyCi0xOgkubG9uZwlicmVha19wb2ludF90cmFwX3NvZnR3YXJlCi0yOgkubG9uZwlkb19leGNlcHRpb25fZXJyb3IKKzE6CS5sb25nCWRvX2V4Y2VwdGlvbl9lcnJvcgogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotMzoJLmxvbmcJdHJhY2VfaGFyZGlycXNfb24KKzI6CS5sb25nCXRyYWNlX2hhcmRpcnFzX29uCiAjZW5kaWYKIAogCS5hbGlnbgkyCkBAIC0zMzEsMTYgKzI3NiwzMSBAQAogMToJLmxvbmcJcmVzdG9yZV9hbGwKIAogCS5hbGlnbgkyCi1ub3Rfc3lzY2FsbF90cmE6CQotCWJyYQlkZWJ1Z190cmFwCi0JIG5vcAotCi0JLmFsaWduCTIKIHN5c2NhbGxfYmFkc3lzOgkJCSEgQmFkIHN5c2NhbGwgbnVtYmVyCiAJbW92CSMtRU5PU1lTLCByMAogCWJyYQlyZXN1bWVfdXNlcnNwYWNlCiAJIG1vdi5sCXIwLCBAKE9GRl9SMCxyMTUpCSEgUmV0dXJuIHZhbHVlCi0JCisKKy8qCisgKiBUaGUgbWFpbiBkZWJ1ZyB0cmFwIGhhbmRsZXIuCisgKgorICogcjg9VFJBIChub3QgdGhlIHRyYXAgbnVtYmVyISkKKyAqCisgKiBOb3RlOiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdHJhcGEgdmFsdWUgaXMgbGVmdCBpbiBpdHMgb3JpZ2luYWwKKyAqIGZvcm0gKHdpdGhvdXQgdGhlIHNobHIyIHNoaWZ0KSBzbyB0aGUgY2FsY3VsYXRpb24gZm9yIHRoZSBqdW1wCisgKiBjYWxsIHRhYmxlIG9mZnNldCByZW1haW5zIGEgc2ltcGxlIGluIHBsYWNlIG1hc2suCisgKi8KK2RlYnVnX3RyYXA6CisJbW92CXI4LCByMAorCWFuZAkjKDB4ZiA8PCAyKSwgcjAKKwltb3YubAkxZiwgcjgKKwlhZGQJcjAsIHI4CisJbW92LmwJQHI4LCByOAorCWptcAlAcjgKKwkgbm9wCisKKwkuYWxpZ24JMgorMToJLmxvbmcJZGVidWdfdHJhcF90YWJsZQogCiAvKgogICogU3lzY2FsbCBpbnRlcmZhY2U6CkBAIC0zNDgsMTcgKzMwOCwxOSBAQAogICoJU3lzY2FsbCAjOiBSMwogICoJQXJndW1lbnRzICMwIHRvICMzOiBSNC0tUjcKICAqCUFyZ3VtZW50cyAjNCB0byAjNjogUjAsIFIxLCBSMgotICoJVFJBOiAobnVtYmVyIG9mIGFyZ3VtZW50cyArIDB4MTApIHggNAorICoJVFJBOiAobnVtYmVyIG9mIGFyZ3VtZW50cyArIEFCSSByZXZpc2lvbikgeCA0CiAgKgogICogVGhpcyBjb2RlIGFsc28gaGFuZGxlcyBkZWxlZ2F0aW5nIG90aGVyIHRyYXBzIHRvIHRoZSBCSU9TL2dkYiBzdHViCiAgKiBhY2NvcmRpbmcgdG86CiAgKgogICogVHJhcCBudW1iZXIKLSAqIChUUkE+PjIpIAkgICAgUHVycG9zZQotICogLS0tLS0tLS0gCSAgICAtLS0tLS0tCi0gKiAweDAtMHhmICAJICAgIG9sZCBzeXNjYWxsIEFCSQotICogMHgxMC0weDFmICAJICAgIG5ldyBzeXNjYWxsIEFCSQotICogMHgyMC0weGZmICAJICAgIGRlbGVnYXRlZCB0aHJvdWdoIGRlYnVnX3RyYXAgdG8gQklPUy9nZGIgc3R1Yi4KKyAqIChUUkE+PjIpCVB1cnBvc2UKKyAqIC0tLS0tLS0tCS0tLS0tLS0KKyAqIDB4MDAtMHgwZglvcmlnaW5hbCBTSC0zLzQgc3lzY2FsbCBBQkkgKG5vdCBpbiBnZW5lcmFsIHVzZSkuCisgKiAweDEwLTB4MWYJZ2VuZXJhbCBTSC0zLzQgc3lzY2FsbCBBQkkuCisgKiAweDIwLTB4MmYJc3lzY2FsbCBBQkkgZm9yIFNILTIgcGFydHMuCisgKiAweDMwLTB4M2YJZGVidWcgdHJhcHMgdXNlZCBieSB0aGUga2VybmVsLgorICogMHg0MC0weGZmCU5vdCBzdXBwb3J0ZWQgYnkgYWxsIHBhcnRzLCBzbyBsZWZ0IHVuaGFuZGxlZC4KICAqCiAgKiBOb3RlOiBXaGVuIHdlJ3JlIGZpcnN0IGNhbGxlZCwgdGhlIFRSQSB2YWx1ZSBtdXN0IGJlIHNoaWZ0ZWQKICAqIHJpZ2h0IDIgYml0cyBpbiBvcmRlciB0byBnZXQgdGhlIHZhbHVlIHRoYXQgd2FzIHVzZWQgYXMgdGhlICJ0cmFwYSIKQEAgLTM3NSwxNyArMzM3LDIyIEBACiAJIG5vcAogCS5hbGlnbgkyCiAxOgkubG9uZwlzY2hlZHVsZV90YWlsCi0JIQorCisvKgorICogVGhlIHBvb3JseSBuYW1lZCBtYWluIHRyYXBhIGRlY29kZSBhbmQgZGlzcGF0Y2ggcm91dGluZSwgZm9yCisgKiBzeXN0ZW0gY2FsbHMgYW5kIGRlYnVnIHRyYXBzIHRocm91Z2ggdGhlaXIgcmVzcGVjdGl2ZSBqdW1wIHRhYmxlcy4KKyAqLwogRU5UUlkoc3lzdGVtX2NhbGwpCiAjaWYgIWRlZmluZWQoQ09ORklHX0NQVV9TSDIpCiAJbW92LmwJMWYsIHI5CiAJbW92LmwJQHI5LCByOAkJISBSZWFkIGZyb20gVFJBIChUcmFwIEFkZHJlc3MpIFJlZ2lzdGVyCiAjZW5kaWYKLQkhCi0JISBJcyB0aGUgdHJhcCBhcmd1bWVudCA+PSAweDIwPyAoVFJBIHdpbGwgYmUgPj0gMHg4MCkKLQltb3YJIzB4N2YsIHI5CisJLyoKKwkgKiBDaGVjayB0aGUgdHJhcCB0eXBlCisJICovCisJbW92CSMoKDB4MjAgPDwgMikgLSAxKSwgcjkKIAljbXAvaGkJcjksIHI4Ci0JYnQvcwlub3Rfc3lzY2FsbF90cmEKKwlidC9zCWRlYnVnX3RyYXAJCSEgaXQncyBhIGRlYnVnIHRyYXAuLgogCSBtb3YJI09GRl9UUkEsIHI5CiAJYWRkCXIxNSwgcjkKIAltb3YubAlyOCwgQHI5CQkJISBzZXQgVFJBIHZhbHVlIHRvIHRyYQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCmluZGV4IDI4ZWM3NDguLjY2NjI2YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKQEAgLTEsOSArMSw4IEBACi0vKiAkSWQ6IGlvX2dlbmVyaWMuYyx2IDEuMiAyMDAzLzA1LzA0IDE5OjI5OjUzIGxldGhhbCBFeHAgJAotICoKLSAqIGxpbnV4L2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYworLyoKKyAqIGFyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMCAgTmlpYmUgWXV0YWthCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDcgUGF1bCBNdW5kdAogICoKICAqIEdlbmVyaWMgSS9PIHJvdXRpbmUuIFRoZXNlIGNhbiBiZSB1c2VkIHdoZXJlIGEgbWFjaGluZSBzcGVjaWZpYyB2ZXJzaW9uCiAgKiBpcyBub3QgcmVxdWlyZWQuCkBAIC0xMyw4ICsxMiw5IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKICNpZmRlZiBDT05GSUdfQ1BVX1NIMwogLyogU0gzIGhhcyBhIFBDTUNJQSBidWcgdGhhdCBuZWVkcyBhIGR1bW15IHJlYWQgZnJvbSBhcmVhIDYgZm9yIGEKQEAgLTk2LDYgKzk2LDcgQEAKIAl3aGlsZSAoY291bnQtLSkKIAkJKmJ1ZisrID0gKnBvcnRfYWRkcjsKIAorCWZsdXNoX2RjYWNoZV9hbGwoKTsKIAlkdW1teV9yZWFkKCk7CiB9CiAKQEAgLTE3MCw2ICsxNzEsNyBAQAogCXdoaWxlIChjb3VudC0tKQogCQkqcG9ydF9hZGRyID0gKmJ1ZisrOwogCisJZmx1c2hfZGNhY2hlX2FsbCgpOwogCWR1bW15X3JlYWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwva2dkYl9zdHViLmMgYi9hcmNoL3NoL2tlcm5lbC9rZ2RiX3N0dWIuYwppbmRleCA5YzYzMTVmLi5kODkyN2Q4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9rZ2RiX3N0dWIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9rZ2RiX3N0dWIuYwpAQCAtMTMyMyw4ICsxMzIzLDExIEBACiB9CiAKIC8qIFRoZXJlIGhhcyBiZWVuIGFuIGV4Y2VwdGlvbiwgbW9zdCBsaWtlbHkgYSBicmVha3BvaW50LiAqLwotdm9pZCBrZ2RiX2hhbmRsZV9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQga2dkYl9oYW5kbGVfZXhjZXB0aW9uKHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpCiB7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBSRUxPQ19ISURFKCZfX3JlZ3MsIDApOwogCWludCBleGNlcF9jb2RlLCB2YnJfdmFsOwogCWludCBjb3VudDsKIAlpbnQgdHJhcGFfdmFsdWUgPSBjdHJsX2lubChUUkEpOwpAQCAtMTM2OCw4ICsxMzcxLDYgQEAKIAogCXZicl92YWwgPSB0cmFwX3JlZ2lzdGVycy52YnI7CiAJYXNtKCJsZGMgJTAsIHZiciI6IDoiciIodmJyX3ZhbCkpOwotCi0JcmV0dXJuOwogfQogCiAvKiBUcmlnZ2VyIGEgYnJlYWtwb2ludCBieSBmdW5jdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDQ4NmMwNmUuLjlkNmE0MzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEsNDIgKzEsMzAgQEAKLS8qICRJZDogcHJvY2Vzcy5jLHYgMS4yOCAyMDA0LzA1LzA1IDE2OjU0OjIzIGxldGhhbCBFeHAgJAorLyoKKyAqIGFyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwogICoKLSAqICBsaW51eC9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKKyAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuLgogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTUgIExpbnVzIFRvcnZhbGRzCiAgKgogICogIFN1cGVySCB2ZXJzaW9uOiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBOaWliZSBZdXRha2EgJiBLYXogS29qaW1hCiAgKgkJICAgICBDb3B5cmlnaHQgKEMpIDIwMDYgTGluZW8gU29sdXRpb25zIEluYy4gc3VwcG9ydCBTSDRBIFVCQworICoJCSAgICAgQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNiAgUGF1bCBNdW5kdAogICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLi4KLSAqLwotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9lbGYuaD4KICNpbmNsdWRlIDxhc20vdWJjLmg+CiAKLXN0YXRpYyBpbnQgaGx0X2NvdW50ZXI9MDsKLQorc3RhdGljIGludCBobHRfY291bnRlcjsKIGludCB1YmNfdXNlcmNudCA9IDA7CiAKICNkZWZpbmUgSEFSRF9JRExFX1RJTUVPVVQgKEhaIC8gMykKIAogdm9pZCAoKnBtX2lkbGUpKHZvaWQpOwotCiB2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKTsKIEVYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKIApAQCAtNDQsMTQgKzMyLDEyIEBACiB7CiAJaGx0X2NvdW50ZXIrKzsKIH0KLQogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2hsdCk7CiAKIHZvaWQgZW5hYmxlX2hsdCh2b2lkKQogewogCWhsdF9jb3VudGVyLS07CiB9Ci0KIEVYUE9SVF9TWU1CT0woZW5hYmxlX2hsdCk7CiAKIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCkBAIC0xNTIsMTkgKzEzOCwyMSBAQAogCSIuYWxpZ24gMlxuXHQiCiAJIjE6LmxvbmcgZG9fZXhpdCIpOwogCisvKiBEb24ndCB1c2UgdGhpcyBpbiBCTD0xKGNsaSkuICBPciBlbHNlLCBDUFUgcmVzZXRzISAqLwogaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17CS8qIERvbid0IHVzZSB0aGlzIGluIEJMPTEoY2xpKS4gIE9yIGVsc2UsIENQVSByZXNldHMhICovCit7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKLQlyZWdzLnJlZ3NbNF0gPSAodW5zaWduZWQgbG9uZykgYXJnOwotCXJlZ3MucmVnc1s1XSA9ICh1bnNpZ25lZCBsb25nKSBmbjsKKwlyZWdzLnJlZ3NbNF0gPSAodW5zaWduZWQgbG9uZylhcmc7CisJcmVncy5yZWdzWzVdID0gKHVuc2lnbmVkIGxvbmcpZm47CiAKLQlyZWdzLnBjID0gKHVuc2lnbmVkIGxvbmcpIGtlcm5lbF90aHJlYWRfaGVscGVyOworCXJlZ3MucGMgPSAodW5zaWduZWQgbG9uZylrZXJuZWxfdGhyZWFkX2hlbHBlcjsKIAlyZWdzLnNyID0gKDEgPDwgMzApOwogCiAJLyogT2ssIGNyZWF0ZSB0aGUgbmV3IHByb2Nlc3MuLiAqLwotCXJldHVybiBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwgMCwgJnJlZ3MsIDAsIE5VTEwsIE5VTEwpOworCXJldHVybiBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwgMCwKKwkJICAgICAgICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KIAogLyoKQEAgLTIxMSwyMSArMTk5LDIwIEBACiAJcmV0dXJuIGZwdmFsaWQ7CiB9CiAKLS8qIAorLyoKICAqIENhcHR1cmUgdGhlIHVzZXIgc3BhY2UgcmVnaXN0ZXJzIGlmIHRoZSB0YXNrIGlzIG5vdCBydW5uaW5nIChpbiB1c2VyIHNwYWNlKQogICovCiBpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGVsZl9ncmVnc2V0X3QgKnJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgcHRyZWdzOwotCQorCiAJcHRyZWdzID0gKnRhc2tfcHRfcmVncyh0c2spOwogCWVsZl9jb3JlX2NvcHlfcmVncyhyZWdzLCAmcHRyZWdzKTsKIAogCXJldHVybiAxOwogfQogCi1pbnQKLWR1bXBfdGFza19mcHUgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBlbGZfZnByZWdzZXRfdCAqZnB1KQoraW50IGR1bXBfdGFza19mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGVsZl9mcHJlZ3NldF90ICpmcHUpCiB7CiAJaW50IGZwdmFsaWQgPSAwOwogCkBAIC0yNjMsMTIgKzI1MCwxNCBAQAogCQljaGlsZHJlZ3MtPnJlZ3NbMTVdID0gdXNwOwogCQl0aS0+YWRkcl9saW1pdCA9IFVTRVJfRFM7CiAJfSBlbHNlIHsKLQkJY2hpbGRyZWdzLT5yZWdzWzE1XSA9ICh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZShwKSArIFRIUkVBRF9TSVpFOworCQljaGlsZHJlZ3MtPnJlZ3NbMTVdID0gKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHApICsKKwkJCQkJCQlUSFJFQURfU0laRTsKIAkJdGktPmFkZHJfbGltaXQgPSBLRVJORUxfRFM7CiAJfQotICAgICAgICBpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpIHsKKworICAgICAgICBpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9TRVRUTFMpCiAJCWNoaWxkcmVncy0+Z2JyID0gY2hpbGRyZWdzLT5yZWdzWzBdOwotCX0KKwogCWNoaWxkcmVncy0+cmVnc1swXSA9IDA7IC8qIFNldCByZXR1cm4gdmFsdWUgZm9yIGNoaWxkICovCiAKIAlwLT50aHJlYWQuc3AgPSAodW5zaWduZWQgbG9uZykgY2hpbGRyZWdzOwpAQCAtMjgwLDggKzI2OSw3IEBACiB9CiAKIC8qIFRyYWNpbmcgYnkgdXNlciBicmVhayBjb250cm9sbGVyLiAgKi8KLXN0YXRpYyB2b2lkCi11YmNfc2V0X3RyYWNpbmcoaW50IGFzaWQsIHVuc2lnbmVkIGxvbmcgcGMpCitzdGF0aWMgdm9pZCB1YmNfc2V0X3RyYWNpbmcoaW50IGFzaWQsIHVuc2lnbmVkIGxvbmcgcGMpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCiAJdW5zaWduZWQgbG9uZyB2YWw7CkBAIC0yOTcsNyArMjg1LDcgQEAKIAl2YWwgPSAoVUJDX0NSUl9SRVMgfCBVQkNfQ1JSX1BDQiB8IFVCQ19DUlJfQklFKTsKIAljdHJsX291dGwodmFsLCBVQkNfQ1JSMCk7CiAKLQkvKiBSZWFkIFVCQyByZWdpc3RlciB0aGF0IHdlIHdyaXRlZCBsYXN0LiBGb3IgY2hla2tpbmcgVUJDIFJlZ2lzdGVyIGNoYW5nZWQgKi8KKwkvKiBSZWFkIFVCQyByZWdpc3RlciB0aGF0IHdlIHdyb3RlIGxhc3QsIGZvciBjaGVja2luZyB1cGRhdGUgKi8KIAl2YWwgPSBjdHJsX2lubChVQkNfQ1JSMCk7CiAKICNlbHNlCS8qIENPTkZJR19DUFVfU0g0QSAqLwpAQCAtMzA1LDEzICsyOTMsMTQgQEAKIAogI2lmZGVmIENPTkZJR19NTVUKIAkvKiBXZSBkb24ndCBoYXZlIGFueSBBU0lEIHNldHRpbmdzIGZvciB0aGUgU0gtMiEgKi8KLQlpZiAoY3B1X2RhdGEtPnR5cGUgIT0gQ1BVX1NINzYwNCkKKwlpZiAoY3VycmVudF9jcHVfZGF0YS50eXBlICE9IENQVV9TSDc2MDQpCiAJCWN0cmxfb3V0Yihhc2lkLCBVQkNfQkFTUkEpOwogI2VuZGlmCiAKIAljdHJsX291dGwoMCwgVUJDX0JBTVJBKTsKIAotCWlmIChjcHVfZGF0YS0+dHlwZSA9PSBDUFVfU0g3NzI5IHx8IGNwdV9kYXRhLT50eXBlID09IENQVV9TSDc3MTApIHsKKwlpZiAoY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDc3MjkgfHwKKwkgICAgY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDc3MTApIHsKIAkJY3RybF9vdXR3KEJCUl9JTlNUIHwgQkJSX1JFQUQgfCBCQlJfQ1BVLCBVQkNfQkJSQSk7CiAJCWN0cmxfb3V0bChCUkNSX1BDQkEgfCBCUkNSX1BDVEUsIFVCQ19CUkNSKTsKIAl9IGVsc2UgewpAQCAtMzI1LDcgKzMxNCw4IEBACiAgKglzd2l0Y2hfdG8oeCx5KSBzaG91bGQgc3dpdGNoIHRhc2tzIGZyb20geCB0byB5LgogICoKICAqLwotc3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKK3N0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19TSF9GUFUpCiAJdW5sYXp5X2ZwdShwcmV2LCB0YXNrX3B0X3JlZ3MocHJldikpOwpAQCAtMzU0LDcgKzM0NCw3IEBACiAjaWZkZWYgQ09ORklHX01NVQogCS8qCiAJICogUmVzdG9yZSB0aGUga2VybmVsIG1vZGUgcmVnaXN0ZXIKLQkgKiAgIAlrNyAocjdfYmFuazEpCisJICoJazcgKHI3X2JhbmsxKQogCSAqLwogCWFzbSB2b2xhdGlsZSgibGRjCSUwLCByN19iYW5rIgogCQkgICAgIDogLyogbm8gb3V0cHV0ICovCkBAIC0zNjcsNyArMzU3LDcgQEAKIAllbHNlIGlmIChuZXh0LT50aHJlYWQudWJjX3BjICYmIG5leHQtPm1tKSB7CiAJCWludCBhc2lkID0gMDsKICNpZmRlZiBDT05GSUdfTU1VCi0JCWFzaWQgfD0gbmV4dC0+bW0tPmNvbnRleHQuaWQgJiBNTVVfQ09OVEVYVF9BU0lEX01BU0s7CisJCWFzaWQgfD0gY3B1X2FzaWQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXh0LT5tbSk7CiAjZW5kaWYKIAkJdWJjX3NldF90cmFjaW5nKGFzaWQsIG5leHQtPnRocmVhZC51YmNfcGMpOwogCX0gZWxzZSB7CkBAIC00MDUsNyArMzk1LDggQEAKIAlpZiAoIW5ld3NwKQogCQluZXdzcCA9IHJlZ3MtPnJlZ3NbMTVdOwogCXJldHVybiBkb19mb3JrKGNsb25lX2ZsYWdzLCBuZXdzcCwgcmVncywgMCwKLQkJCShpbnQgX191c2VyICopcGFyZW50X3RpZHB0ciwgKGludCBfX3VzZXIgKiljaGlsZF90aWRwdHIpOworCQkJKGludCBfX3VzZXIgKilwYXJlbnRfdGlkcHRyLAorCQkJKGludCBfX3VzZXIgKiljaGlsZF90aWRwdHIpOwogfQogCiAvKgpAQCAtNDkzLDkgKzQ4NCwyNyBAQAogCWZvcmNlX3NpZyhTSUdUUkFQLCBjdXJyZW50KTsKIH0KIAotYXNtbGlua2FnZSB2b2lkIGJyZWFrX3BvaW50X3RyYXBfc29mdHdhcmUodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKLQkJCQkJICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAotCQkJCQkgIHN0cnVjdCBwdF9yZWdzIF9fcmVncykKKy8qCisgKiBHZW5lcmljIHRyYXAgaGFuZGxlci4KKyAqLworYXNtbGlua2FnZSB2b2lkIGRlYnVnX3RyYXBfaGFuZGxlcih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJICAgc3RydWN0IHB0X3JlZ3MgX19yZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gUkVMT0NfSElERSgmX19yZWdzLCAwKTsKKworCS8qIFJld2luZCAqLworCXJlZ3MtPnBjIC09IDI7CisKKwlmb3JjZV9zaWcoU0lHVFJBUCwgY3VycmVudCk7Cit9CisKKy8qCisgKiBTcGVjaWFsIGhhbmRsZXIgZm9yIEJVRygpIHRyYXBzLgorICovCithc21saW5rYWdlIHZvaWQgYnVnX3RyYXBfaGFuZGxlcih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCSB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCSBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBSRUxPQ19ISURFKCZfX3JlZ3MsIDApOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwppbmRleCBkNmI4MTdhLi45ODgwMmFiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKQEAgLTEsMTQgKzEsMTEgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworICogYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworICoKKyAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnRzIG9mIGluaXRpYWxpemF0aW9uCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OSAgTmlpYmUgWXV0YWthCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNiBQYXVsIE11bmR0CiAgKi8KLQotLyoKLSAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IHBhcnRzIG9mIGluaXRpYWxpemF0aW9uCi0gKi8KLQogI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMzk1LDkgKzM5Miw5IEBACiAJW0NQVV9TSF9OT05FXQk9ICJVbmtub3duIgogfTsKIAotY29uc3QgY2hhciAqZ2V0X2NwdV9zdWJ0eXBlKHZvaWQpCitjb25zdCBjaGFyICpnZXRfY3B1X3N1YnR5cGUoc3RydWN0IHNoX2NwdWluZm8gKmMpCiB7Ci0JcmV0dXJuIGNwdV9uYW1lW2Jvb3RfY3B1X2RhdGEudHlwZV07CisJcmV0dXJuIGNwdV9uYW1lW2MtPnR5cGVdOwogfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTQwNywxOSArNDA0LDE5IEBACiAJInB0ZWEiLCAibGxzYyIsICJsMiIsIE5VTEwKIH07CiAKLXN0YXRpYyB2b2lkIHNob3dfY3B1ZmxhZ3Moc3RydWN0IHNlcV9maWxlICptKQorc3RhdGljIHZvaWQgc2hvd19jcHVmbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBzaF9jcHVpbmZvICpjKQogewogCXVuc2lnbmVkIGxvbmcgaTsKIAogCXNlcV9wcmludGYobSwgImNwdSBmbGFnc1x0OiIpOwogCi0JaWYgKCFjcHVfZGF0YS0+ZmxhZ3MpIHsKKwlpZiAoIWMtPmZsYWdzKSB7CiAJCXNlcV9wcmludGYobSwgIiAlc1xuIiwgY3B1X2ZsYWdzWzBdKTsKIAkJcmV0dXJuOwogCX0KIAogCWZvciAoaSA9IDA7IGNwdV9mbGFnc1tpXTsgaSsrKQotCQlpZiAoKGNwdV9kYXRhLT5mbGFncyAmICgxIDw8IGkpKSkKKwkJaWYgKChjLT5mbGFncyAmICgxIDw8IGkpKSkKIAkJCXNlcV9wcmludGYobSwgIiAlcyIsIGNwdV9mbGFnc1tpKzFdKTsKIAogCXNlcV9wcmludGYobSwgIlxuIik7CkBAIC00NDEsMTYgKzQzOCwyMCBAQAogICovCiBzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3Qgc2hfY3B1aW5mbyAqYyA9IHY7CisJdW5zaWduZWQgaW50IGNwdSA9IGMgLSBjcHVfZGF0YTsKIAotCWlmICghY3B1ICYmIGNwdV9vbmxpbmUoY3B1KSkKKwlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3B1ID09IDApCiAJCXNlcV9wcmludGYobSwgIm1hY2hpbmVcdFx0OiAlc1xuIiwgZ2V0X3N5c3RlbV90eXBlKCkpOwogCiAJc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yXHQ6ICVkXG4iLCBjcHUpOwogCXNlcV9wcmludGYobSwgImNwdSBmYW1pbHlcdDogJXNcbiIsIGluaXRfdXRzbmFtZSgpLT5tYWNoaW5lKTsKLQlzZXFfcHJpbnRmKG0sICJjcHUgdHlwZVx0OiAlc1xuIiwgZ2V0X2NwdV9zdWJ0eXBlKCkpOworCXNlcV9wcmludGYobSwgImNwdSB0eXBlXHQ6ICVzXG4iLCBnZXRfY3B1X3N1YnR5cGUoYykpOwogCi0Jc2hvd19jcHVmbGFncyhtKTsKKwlzaG93X2NwdWZsYWdzKG0sIGMpOwogCiAJc2VxX3ByaW50ZihtLCAiY2FjaGUgdHlwZVx0OiAiKTsKIApAQCAtNDU5LDIyICs0NjAsMjIgQEAKIAkgKiB1bmlmaWVkIGNhY2hlIG9uIHRoZSBTSC0yIGFuZCBTSC0zLCBhcyB3ZWxsIGFzIHRoZSBoYXJ2YXJkCiAJICogc3R5bGUgY2FjaGUgb24gdGhlIFNILTQuCiAJICovCi0JaWYgKGJvb3RfY3B1X2RhdGEuaWNhY2hlLmZsYWdzICYgU0hfQ0FDSEVfQ09NQklORUQpIHsKKwlpZiAoYy0+aWNhY2hlLmZsYWdzICYgU0hfQ0FDSEVfQ09NQklORUQpIHsKIAkJc2VxX3ByaW50ZihtLCAidW5pZmllZFxuIik7Ci0JCXNob3dfY2FjaGVpbmZvKG0sICJjYWNoZSIsIGJvb3RfY3B1X2RhdGEuaWNhY2hlKTsKKwkJc2hvd19jYWNoZWluZm8obSwgImNhY2hlIiwgYy0+aWNhY2hlKTsKIAl9IGVsc2UgewogCQlzZXFfcHJpbnRmKG0sICJzcGxpdCAoaGFydmFyZClcbiIpOwotCQlzaG93X2NhY2hlaW5mbyhtLCAiaWNhY2hlIiwgYm9vdF9jcHVfZGF0YS5pY2FjaGUpOwotCQlzaG93X2NhY2hlaW5mbyhtLCAiZGNhY2hlIiwgYm9vdF9jcHVfZGF0YS5kY2FjaGUpOworCQlzaG93X2NhY2hlaW5mbyhtLCAiaWNhY2hlIiwgYy0+aWNhY2hlKTsKKwkJc2hvd19jYWNoZWluZm8obSwgImRjYWNoZSIsIGMtPmRjYWNoZSk7CiAJfQogCiAJLyogT3B0aW9uYWwgc2Vjb25kYXJ5IGNhY2hlICovCi0JaWYgKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0wyX0NBQ0hFKQotCQlzaG93X2NhY2hlaW5mbyhtLCAic2NhY2hlIiwgYm9vdF9jcHVfZGF0YS5zY2FjaGUpOworCWlmIChjLT5mbGFncyAmIENQVV9IQVNfTDJfQ0FDSEUpCisJCXNob3dfY2FjaGVpbmZvKG0sICJzY2FjaGUiLCBjLT5zY2FjaGUpOwogCiAJc2VxX3ByaW50ZihtLCAiYm9nb21pcHNcdDogJWx1LiUwMmx1XG4iLAotCQkgICAgIGJvb3RfY3B1X2RhdGEubG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAotCQkgICAgIChib290X2NwdV9kYXRhLmxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpICUgMTAwKTsKKwkJICAgICBjLT5sb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksCisJCSAgICAgKGMtPmxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpICUgMTAwKTsKIAogCXJldHVybiBzaG93X2Nsb2NrcyhtKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jCmluZGV4IGU2MTA2MjMuLmZlMWIyNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYwpAQCAtMTA1LDcgKzEwNSw2IEBACiBFWFBPUlRfU1lNQk9MKGNsZWFyX3VzZXJfcGFnZSk7CiAjZW5kaWYKIAotRVhQT1JUX1NZTUJPTChmbHVzaF90bGJfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKF9fZG93bl90cnlsb2NrKTsKIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMzc5Yzg4Yi4uMzJmMTBhMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCWlmICghKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfRlBVKSkKKwlpZiAoIShjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQogCQlyZXR1cm4gMDsKIAogCXNldF91c2VkX21hdGgoKTsKQEAgLTE0MCw3ICsxNDAsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCWlmICghKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfRlBVKSkKKwlpZiAoIShjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQogCQlyZXR1cm4gMDsKIAogCWlmICghdXNlZF9tYXRoKCkpIHsKQEAgLTE4MSw3ICsxODEsNyBAQAogI3VuZGVmIENPUFkKIAogI2lmZGVmIENPTkZJR19TSF9GUFUKLQlpZiAoY3B1X2RhdGEtPmZsYWdzICYgQ1BVX0hBU19GUFUpIHsKKwlpZiAoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSB7CiAJCWludCBvd25lZF9mcDsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCBjYTgxOTc2Li4zOGZjOGNkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy5TCisrKyBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzLlMKQEAgLTMxOSwxNSArMzE5LDE1IEBACiAJLmxvbmcgc3lzX21xX2dldHNldGF0dHIKIAkubG9uZyBzeXNfa2V4ZWNfbG9hZAogCS5sb25nIHN5c193YWl0aWQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogMjg1ICovCi0JLmxvbmcgc3lzX2FkZF9rZXkKKwkubG9uZyBzeXNfYWRkX2tleQkJLyogMjg1ICovCiAJLmxvbmcgc3lzX3JlcXVlc3Rfa2V5CiAJLmxvbmcgc3lzX2tleWN0bAogCS5sb25nIHN5c19pb3ByaW9fc2V0Ci0JLmxvbmcgc3lzX2lvcHJpb19nZXQJCS8qIDI5MCAqLwotCS5sb25nIHN5c19pbm90aWZ5X2luaXQKKwkubG9uZyBzeXNfaW9wcmlvX2dldAorCS5sb25nIHN5c19pbm90aWZ5X2luaXQJCS8qIDI5MCAqLwogCS5sb25nIHN5c19pbm90aWZ5X2FkZF93YXRjaAogCS5sb25nIHN5c19pbm90aWZ5X3JtX3dhdGNoCisJLmxvbmcgc3lzX25pX3N5c2NhbGwKIAkubG9uZyBzeXNfbWlncmF0ZV9wYWdlcwogCS5sb25nIHN5c19vcGVuYXQJCS8qIDI5NSAqLwogCS5sb25nIHN5c19ta2RpcmF0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYwppbmRleCBlYzExMDE1Li5lOWYxNjhmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKQEAgLTE1NiwxMyArMTU2LDEzIEBACiB7CiB9CiAjZW5kaWYgLyogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgKi8KLSNlbmRpZiAvKiBDT05GSUdfQlVHICovCiAKIHZvaWQgaGFuZGxlX0JVRyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlkb19idWdfdmVyYm9zZShyZWdzKTsKIAlkaWUoIktlcm5lbCBCVUciLCByZWdzLCBUUkFQQV9CVUdfT1BDT0RFICYgMHhmZik7CiB9CisjZW5kaWYgLyogQ09ORklHX0JVRyAqLwogCiAvKgogICogaGFuZGxlIGFuIGluc3RydWN0aW9uIHRoYXQgZG9lcyBhbiB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBieSBlbXVsYXRpbmcgdGhlCkBAIC02NDEsNyArNjQxLDcgQEAKIAkgKiBTYWZlIGd1YXJkIGlmIERTUCBtb2RlIGlzIGFscmVhZHkgZW5hYmxlZCBvciB3ZSdyZSBsYWNraW5nCiAJICogdGhlIERTUCBhbHRvZ2V0aGVyLgogCSAqLwotCWlmICghKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfRFNQKSB8fCAocmVncy0+c3IgJiBTUl9EU1ApKQorCWlmICghKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0RTUCkgfHwgKHJlZ3MtPnNyICYgU1JfRFNQKSkKIAkJcmV0dXJuIDA7CiAKIAlnZXRfdXNlcihpbnN0LCAoKHVuc2lnbmVkIHNob3J0ICopIHJlZ3MtPnBjKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL0tjb25maWcgYi9hcmNoL3NoL21tL0tjb25maWcKaW5kZXggMjlmNGVlMy4uNmIwZDI4YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9LY29uZmlnCisrKyBiL2FyY2gvc2gvbW0vS2NvbmZpZwpAQCAtMjAsNyArMjAsNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVX0hBU19JTlRFVlQKIAlzZWxlY3QgQ1BVX0hBU19TUl9SQgotCXNlbGVjdCBDUFVfSEFTX1BURUEgaWYgIUNQVV9TVUJUWVBFX1NUNDAKKwlzZWxlY3QgQ1BVX0hBU19QVEVBIGlmICghQ1BVX1NVQlRZUEVfU1Q0MCAmJiAhQ1BVX1NINEEpIHx8IENQVV9TSFgyCiAKIGNvbmZpZyBDUFVfU0g0QQogCWJvb2wKQEAgLTcyLDYgKzcyLDcgQEAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDc3MDYKIAlib29sICJTdXBwb3J0IFNINzcwNiBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDMKKwlzZWxlY3QgQ1BVX0hBU19JUFJfSVJRCiAJaGVscAogCSAgU2VsZWN0IFNINzcwNiBpZiB5b3UgaGF2ZSBhIDEzMyBNaHogU0gtMyBIRDY0MTc3MDYgQ1BVLgogCkBAIC05Miw2ICs5Myw3IEBACiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzA5CiAJYm9vbCAiU3VwcG9ydCBTSDc3MDkgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gzCisJc2VsZWN0IENQVV9IQVNfSVBSX0lSUQogCXNlbGVjdCBDUFVfSEFTX1BJTlRfSVJRCiAJaGVscAogCSAgU2VsZWN0IFNINzcwOSBpZiB5b3UgaGF2ZSBhICA4MCBNaHogU0gtMyBIRDY0MTc3MDkgQ1BVLgpAQCAtMTQ5LDYgKzE1MSw3IEBACiAJYm9vbCAiU3VwcG9ydCBTSDc3NjAgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0CiAJc2VsZWN0IENQVV9IQVNfSU5UQzJfSVJRCisJc2VsZWN0IENQVV9IQVNfSVBSX0lSUQogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g0XzIwMgogCWJvb2wgIlN1cHBvcnQgU0g0LTIwMiBwcm9jZXNzb3IiCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYyBiL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jCmluZGV4IDkwOWRjZmEuLmRlNmQyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jCkBAIC00NiwxMCArNDYsMTAgQEAKIAogCWlmIChjYWNoZV90eXBlID09IENBQ0hFX1RZUEVfRENBQ0hFKSB7CiAJCWJhc2UgPSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZOwotCQljYWNoZSA9ICZjcHVfZGF0YS0+ZGNhY2hlOworCQljYWNoZSA9ICZjdXJyZW50X2NwdV9kYXRhLmRjYWNoZTsKIAl9IGVsc2UgewogCQliYXNlID0gQ0FDSEVfSUNfQUREUkVTU19BUlJBWTsKLQkJY2FjaGUgPSAmY3B1X2RhdGEtPmljYWNoZTsKKwkJY2FjaGUgPSAmY3VycmVudF9jcHVfZGF0YS5pY2FjaGU7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2gzLmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoMy5jCmluZGV4IDgzODczMWYuLjZkMWRiZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2gzLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDMuYwpAQCAtNDQsMTEgKzQ0LDExIEBACiAKIAlmb3IgKHYgPSBiZWdpbjsgdiA8IGVuZDsgdis9TDFfQ0FDSEVfQllURVMpIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyc3RhcnQgPSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZOwotCQlmb3IgKGogPSAwOyBqIDwgY3B1X2RhdGEtPmRjYWNoZS53YXlzOyBqKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheXM7IGorKykgewogCQkJdW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBwOwogCiAJCQlwID0gX19wYSh2KTsKLQkJCWFkZHIgPSBhZGRyc3RhcnQgfCAodiAmIGNwdV9kYXRhLT5kY2FjaGUuZW50cnlfbWFzayk7CisJCQlhZGRyID0gYWRkcnN0YXJ0IHwgKHYgJiBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5lbnRyeV9tYXNrKTsKIAkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJCWRhdGEgPSBjdHJsX2lubChhZGRyKTsKIApAQCAtNjAsNyArNjAsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkJYWRkcnN0YXJ0ICs9IGNwdV9kYXRhLT5kY2FjaGUud2F5X2luY3I7CisJCQlhZGRyc3RhcnQgKz0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5X2luY3I7CiAJCX0KIAl9CiB9CkBAIC04NSw3ICs4NSw3IEBACiAKIAkJZGF0YSA9ICh2ICYgMHhmZmZmZmMwMCk7IC8qIF9WaXJ0dWFsXyBhZGRyZXNzLCB+VSwgflYgKi8KIAkJYWRkciA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfAotCQkJKHYgJiBjcHVfZGF0YS0+ZGNhY2hlLmVudHJ5X21hc2spIHwgU0hfQ0FDSEVfQVNTT0M7CisJCQkodiAmIGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X21hc2spIHwgU0hfQ0FDSEVfQVNTT0M7CiAJCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwppbmRleCBjNjk1NTE1Li5lMGNkNGI3IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKQEAgLTU0LDIxICs1NCwyMSBAQAogCQljdHJsX2lubChDQ05fQ1ZSKSwKIAkJY3RybF9pbmwoQ0NOX1BSUikpOwogCXByaW50aygiSS1jYWNoZSA6IG5fd2F5cz0lZCBuX3NldHM9JWQgd2F5X2luY3I9JWRcbiIsCi0JCWNwdV9kYXRhLT5pY2FjaGUud2F5cywKLQkJY3B1X2RhdGEtPmljYWNoZS5zZXRzLAotCQljcHVfZGF0YS0+aWNhY2hlLndheV9pbmNyKTsKKwkJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5cywKKwkJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUuc2V0cywKKwkJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUud2F5X2luY3IpOwogCXByaW50aygiSS1jYWNoZSA6IGVudHJ5X21hc2s9MHglMDh4IGFsaWFzX21hc2s9MHglMDh4IG5fYWxpYXNlcz0lZFxuIiwKLQkJY3B1X2RhdGEtPmljYWNoZS5lbnRyeV9tYXNrLAotCQljcHVfZGF0YS0+aWNhY2hlLmFsaWFzX21hc2ssCi0JCWNwdV9kYXRhLT5pY2FjaGUubl9hbGlhc2VzKTsKKwkJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUuZW50cnlfbWFzaywKKwkJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUuYWxpYXNfbWFzaywKKwkJY3VycmVudF9jcHVfZGF0YS5pY2FjaGUubl9hbGlhc2VzKTsKIAlwcmludGsoIkQtY2FjaGUgOiBuX3dheXM9JWQgbl9zZXRzPSVkIHdheV9pbmNyPSVkXG4iLAotCQljcHVfZGF0YS0+ZGNhY2hlLndheXMsCi0JCWNwdV9kYXRhLT5kY2FjaGUuc2V0cywKLQkJY3B1X2RhdGEtPmRjYWNoZS53YXlfaW5jcik7CisJCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheXMsCisJCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLnNldHMsCisJCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyKTsKIAlwcmludGsoIkQtY2FjaGUgOiBlbnRyeV9tYXNrPTB4JTA4eCBhbGlhc19tYXNrPTB4JTA4eCBuX2FsaWFzZXM9JWRcbiIsCi0JCWNwdV9kYXRhLT5kY2FjaGUuZW50cnlfbWFzaywKLQkJY3B1X2RhdGEtPmRjYWNoZS5hbGlhc19tYXNrLAotCQljcHVfZGF0YS0+ZGNhY2hlLm5fYWxpYXNlcyk7CisJCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X21hc2ssCisJCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmFsaWFzX21hc2ssCisJCWN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLm5fYWxpYXNlcyk7CiAKIAlpZiAoIV9fZmx1c2hfZGNhY2hlX3NlZ21lbnRfZm4pCiAJCXBhbmljKCJ1bmtub3duIG51bWJlciBvZiBjYWNoZSB3YXlzXG4iKTsKQEAgLTg3LDEwICs4NywxMCBAQAogewogCWludCBpOwogCi0JY29tcHV0ZV9hbGlhcygmY3B1X2RhdGEtPmljYWNoZSk7Ci0JY29tcHV0ZV9hbGlhcygmY3B1X2RhdGEtPmRjYWNoZSk7CisJY29tcHV0ZV9hbGlhcygmY3VycmVudF9jcHVfZGF0YS5pY2FjaGUpOworCWNvbXB1dGVfYWxpYXMoJmN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlKTsKIAotCXN3aXRjaCAoY3B1X2RhdGEtPmRjYWNoZS53YXlzKSB7CisJc3dpdGNoIChjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzKSB7CiAJY2FzZSAxOgogCQlfX2ZsdXNoX2RjYWNoZV9zZWdtZW50X2ZuID0gX19mbHVzaF9kY2FjaGVfc2VnbWVudF8xd2F5OwogCQlicmVhazsKQEAgLTExMCw3ICsxMTAsNyBAQAogCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UoUDNTRUcsIFAzU0VHICsgKFBBR0VfU0laRSAqIDQpLCAwLCBQQUdFX0tFUk5FTCkpCiAJCXBhbmljKCIlcyBmYWlsZWQuIiwgX19GVU5DVElPTl9fKTsKIAotCWZvciAoaSA9IDA7IGkgPCBjcHVfZGF0YS0+ZGNhY2hlLm5fYWxpYXNlczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXM7IGkrKykKIAkJbXV0ZXhfaW5pdCgmcDNtYXBfbXV0ZXhbaV0pOwogfQogCkBAIC0yMDAsMTMgKzIwMCwxNCBAQAogCQkgICAgIDogLyogbm8gb3V0cHV0ICovCiAJCSAgICAgOiAibSIgKF9fbSh2KSkpOwogCi0JaW5kZXggPSBDQUNIRV9JQ19BRERSRVNTX0FSUkFZIHwgKHYgJiBjcHVfZGF0YS0+aWNhY2hlLmVudHJ5X21hc2spOworCWluZGV4ID0gQ0FDSEVfSUNfQUREUkVTU19BUlJBWSB8CisJCQkodiAmIGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLmVudHJ5X21hc2spOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWp1bXBfdG9fUDIoKTsKIAotCWZvciAoaSA9IDA7IGkgPCBjcHVfZGF0YS0+aWNhY2hlLndheXM7Ci0JICAgICBpKyssIGluZGV4ICs9IGNwdV9kYXRhLT5pY2FjaGUud2F5X2luY3IpCisJZm9yIChpID0gMDsgaSA8IGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheXM7CisJICAgICBpKyssIGluZGV4ICs9IGN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlLndheV9pbmNyKQogCQljdHJsX291dGwoMCwgaW5kZXgpOwkvKiBDbGVhciBvdXQgVmFsaWQtYml0ICovCiAKIAliYWNrX3RvX1AxKCk7CkBAIC0yMjMsNyArMjI0LDcgQEAKIAkgKiBBbGwgdHlwZXMgb2YgU0gtNCByZXF1aXJlIFBDIHRvIGJlIGluIFAyIHRvIG9wZXJhdGUgb24gdGhlIEktY2FjaGUuCiAJICogU29tZSB0eXBlcyBvZiBTSC00IHJlcXVpcmUgUEMgdG8gYmUgaW4gUDIgdG8gb3BlcmF0ZSBvbiB0aGUgRC1jYWNoZS4KIAkgKi8KLQlpZiAoKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfUDJfRkxVU0hfQlVHKSB8fAorCWlmICgoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfUDJfRkxVU0hfQlVHKSB8fAogCSAgICAoc3RhcnQgPCBDQUNIRV9PQ19BRERSRVNTX0FSUkFZKSkKIAkJZXhlY19vZmZzZXQgPSAweDIwMDAwMDAwOwogCkBAIC0yMzYsMTYgKzIzNywyNiBAQAogLyoKICAqIFdyaXRlIGJhY2sgJiBpbnZhbGlkYXRlIHRoZSBELWNhY2hlIG9mIHRoZSBwYWdlLgogICogKFRvIGF2b2lkICJhbGlhcyIgaXNzdWVzKQorICoKKyAqIFRoaXMgdXNlcyBhIGxhenkgd3JpdGUtYmFjayBvbiBVUCwgd2hpY2ggaXMgZXhwbGljaXRseQorICogZGlzYWJsZWQgb24gU01QLgogICovCiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmICh0ZXN0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncykpIHsKKyNpZm5kZWYgQ09ORklHX1NNUAorCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOworCisJaWYgKG1hcHBpbmcgJiYgIW1hcHBpbmdfbWFwcGVkKG1hcHBpbmcpKQorCQlzZXRfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKKwllbHNlCisjZW5kaWYKKwl7CiAJCXVuc2lnbmVkIGxvbmcgcGh5cyA9IFBIWVNBRERSKHBhZ2VfYWRkcmVzcyhwYWdlKSk7CiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVk7CiAJCWludCBpLCBuOwogCiAJCS8qIExvb3AgYWxsIHRoZSBELWNhY2hlICovCi0JCW4gPSBjcHVfZGF0YS0+ZGNhY2hlLm5fYWxpYXNlczsKKwkJbiA9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLm5fYWxpYXNlczsKIAkJZm9yIChpID0gMDsgaSA8IG47IGkrKywgYWRkciArPSA0MDk2KQogCQkJZmx1c2hfY2FjaGVfNDA5NihhZGRyLCBwaHlzKTsKIAl9CkBAIC0yNzcsNyArMjg4LDcgQEAKIAogdm9pZCBmbHVzaF9kY2FjaGVfYWxsKHZvaWQpCiB7Ci0JKCpfX2ZsdXNoX2RjYWNoZV9zZWdtZW50X2ZuKSgwVUwsIGNwdV9kYXRhLT5kY2FjaGUud2F5X3NpemUpOworCSgqX19mbHVzaF9kY2FjaGVfc2VnbWVudF9mbikoMFVMLCBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlfc2l6ZSk7CiAJd21iKCk7CiB9CiAKQEAgLTI5MSw4ICszMDIsOCBAQAogCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl1bnNpZ25lZCBsb25nIGQgPSAwLCBwID0gc3RhcnQgJiBQQUdFX01BU0s7Ci0JdW5zaWduZWQgbG9uZyBhbGlhc19tYXNrID0gY3B1X2RhdGEtPmRjYWNoZS5hbGlhc19tYXNrOwotCXVuc2lnbmVkIGxvbmcgbl9hbGlhc2VzID0gY3B1X2RhdGEtPmRjYWNoZS5uX2FsaWFzZXM7CisJdW5zaWduZWQgbG9uZyBhbGlhc19tYXNrID0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuYWxpYXNfbWFzazsKKwl1bnNpZ25lZCBsb25nIG5fYWxpYXNlcyA9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLm5fYWxpYXNlczsKIAl1bnNpZ25lZCBsb25nIHNlbGVjdF9iaXQ7CiAJdW5zaWduZWQgbG9uZyBhbGxfYWxpYXNlc19tYXNrOwogCXVuc2lnbmVkIGxvbmcgYWRkcl9vZmZzZXQ7CkBAIC0zNzksNyArMzkwLDcgQEAKIAkgKiBJZiBjYWNoZSBpcyBvbmx5IDRrLXBlci13YXksIHRoZXJlIGFyZSBuZXZlciBhbnkgJ2FsaWFzZXMnLiAgU2luY2UKIAkgKiB0aGUgY2FjaGUgaXMgcGh5c2ljYWxseSB0YWdnZWQsIHRoZSBkYXRhIGNhbiBqdXN0IGJlIGxlZnQgaW4gdGhlcmUuCiAJICovCi0JaWYgKGNwdV9kYXRhLT5kY2FjaGUubl9hbGlhc2VzID09IDApCisJaWYgKGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLm5fYWxpYXNlcyA9PSAwKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtNDE2LDcgKzQyNyw3IEBACiAJdW5zaWduZWQgbG9uZyBwaHlzID0gcGZuIDw8IFBBR0VfU0hJRlQ7CiAJdW5zaWduZWQgaW50IGFsaWFzX21hc2s7CiAKLQlhbGlhc19tYXNrID0gY3B1X2RhdGEtPmRjYWNoZS5hbGlhc19tYXNrOworCWFsaWFzX21hc2sgPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5hbGlhc19tYXNrOwogCiAJLyogV2Ugb25seSBuZWVkIHRvIGZsdXNoIEQtY2FjaGUgd2hlbiB3ZSBoYXZlIGFsaWFzICovCiAJaWYgKChhZGRyZXNzXnBoeXMpICYgYWxpYXNfbWFzaykgewpAQCAtNDMwLDcgKzQ0MSw3IEBACiAJCQlwaHlzKTsKIAl9CiAKLQlhbGlhc19tYXNrID0gY3B1X2RhdGEtPmljYWNoZS5hbGlhc19tYXNrOworCWFsaWFzX21hc2sgPSBjdXJyZW50X2NwdV9kYXRhLmljYWNoZS5hbGlhc19tYXNrOwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykgewogCQkvKgogCQkgKiBFdmljdCBlbnRyaWVzIGZyb20gdGhlIHBvcnRpb24gb2YgdGhlIGNhY2hlIGZyb20gd2hpY2ggY29kZQpAQCAtNDYyLDcgKzQ3Myw3IEBACiAJICogSWYgY2FjaGUgaXMgb25seSA0ay1wZXItd2F5LCB0aGVyZSBhcmUgbmV2ZXIgYW55ICdhbGlhc2VzJy4gIFNpbmNlCiAJICogdGhlIGNhY2hlIGlzIHBoeXNpY2FsbHkgdGFnZ2VkLCB0aGUgZGF0YSBjYW4ganVzdCBiZSBsZWZ0IGluIHRoZXJlLgogCSAqLwotCWlmIChjcHVfZGF0YS0+ZGNhY2hlLm5fYWxpYXNlcyA9PSAwKQorCWlmIChjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXMgPT0gMCkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTUyMyw3ICs1MzQsNyBAQAogCXVuc2lnbmVkIGxvbmcgYSwgZWEsIHA7CiAJdW5zaWduZWQgbG9uZyB0ZW1wX3BjOwogCi0JZGNhY2hlID0gJmNwdV9kYXRhLT5kY2FjaGU7CisJZGNhY2hlID0gJmN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlOwogCS8qIFdyaXRlIHRoaXMgd2F5IGZvciBiZXR0ZXIgYXNzZW1ibHkuICovCiAJd2F5X2NvdW50ID0gZGNhY2hlLT53YXlzOwogCXdheV9pbmNyID0gZGNhY2hlLT53YXlfaW5jcjsKQEAgLTU5OCw3ICs2MDksNyBAQAogCWJhc2VfYWRkciA9ICgoYmFzZV9hZGRyID4+IDE2KSA8PCAxNik7CiAJYmFzZV9hZGRyIHw9IHN0YXJ0OwogCi0JZGNhY2hlID0gJmNwdV9kYXRhLT5kY2FjaGU7CisJZGNhY2hlID0gJmN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlOwogCWxpbmVzeiA9IGRjYWNoZS0+bGluZXN6OwogCXdheV9pbmNyID0gZGNhY2hlLT53YXlfaW5jcjsKIAl3YXlfc2l6ZSA9IGRjYWNoZS0+d2F5X3NpemU7CkBAIC02NDAsNyArNjUxLDcgQEAKIAliYXNlX2FkZHIgPSAoKGJhc2VfYWRkciA+PiAxNikgPDwgMTYpOwogCWJhc2VfYWRkciB8PSBzdGFydDsKIAotCWRjYWNoZSA9ICZjcHVfZGF0YS0+ZGNhY2hlOworCWRjYWNoZSA9ICZjdXJyZW50X2NwdV9kYXRhLmRjYWNoZTsKIAlsaW5lc3ogPSBkY2FjaGUtPmxpbmVzejsKIAl3YXlfaW5jciA9IGRjYWNoZS0+d2F5X2luY3I7CiAJd2F5X3NpemUgPSBkY2FjaGUtPndheV9zaXplOwpAQCAtNjk5LDcgKzcxMCw3IEBACiAJYmFzZV9hZGRyID0gKChiYXNlX2FkZHIgPj4gMTYpIDw8IDE2KTsKIAliYXNlX2FkZHIgfD0gc3RhcnQ7CiAKLQlkY2FjaGUgPSAmY3B1X2RhdGEtPmRjYWNoZTsKKwlkY2FjaGUgPSAmY3VycmVudF9jcHVfZGF0YS5kY2FjaGU7CiAJbGluZXN6ID0gZGNhY2hlLT5saW5lc3o7CiAJd2F5X2luY3IgPSBkY2FjaGUtPndheV9pbmNyOwogCXdheV9zaXplID0gZGNhY2hlLT53YXlfc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCmluZGV4IDA0NWFiZGYuLjMxZjhkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYwpAQCAtMywxMSArMywxMSBAQAogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgTmlpYmUgWXV0YWthCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgIEFsZXggU29uZworICogQ29weXJpZ2h0IChDKSAyMDA2ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KQEAgLTMyLDkgKzMyLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHdheXMsIHdheXNpemUsIGFkZHJzdGFydDsKIAotCXdheXMgPSBjcHVfZGF0YS0+ZGNhY2hlLndheXM7Ci0Jd2F5c2l6ZSA9IGNwdV9kYXRhLT5kY2FjaGUuc2V0czsKLQl3YXlzaXplIDw8PSBjcHVfZGF0YS0+ZGNhY2hlLmVudHJ5X3NoaWZ0OworCXdheXMgPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzOworCXdheXNpemUgPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5zZXRzOworCXdheXNpemUgPDw9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X3NoaWZ0OwogCiAJYWRkcnN0YXJ0ID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWTsKIApAQCAtNDMsNyArNDMsNyBAQAogCiAJCWZvciAoYWRkciA9IGFkZHJzdGFydDsKIAkJICAgICBhZGRyIDwgYWRkcnN0YXJ0ICsgd2F5c2l6ZTsKLQkJICAgICBhZGRyICs9IGNwdV9kYXRhLT5kY2FjaGUubGluZXN6KSB7CisJCSAgICAgYWRkciArPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5saW5lc3opIHsKIAkJCXVuc2lnbmVkIGxvbmcgZGF0YTsKIAkJCWludCB2ID0gU0hfQ0FDSEVfVVBEQVRFRCB8IFNIX0NBQ0hFX1ZBTElEOwogCkBAIC01MSwxMCArNTEsOSBAQAogCiAJCQlpZiAoKGRhdGEgJiB2KSA9PSB2KQogCQkJCWN0cmxfb3V0bChkYXRhICYgfnYsIGFkZHIpOwotCiAJCX0KIAotCQlhZGRyc3RhcnQgKz0gY3B1X2RhdGEtPmRjYWNoZS53YXlfaW5jcjsKKwkJYWRkcnN0YXJ0ICs9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyOwogCX0gd2hpbGUgKC0td2F5cyk7CiB9CiAKQEAgLTk0LDkgKzkzLDkgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJanVtcF90b19QMigpOwogCi0Jd2F5cyA9IGNwdV9kYXRhLT5kY2FjaGUud2F5czsKLQl3YXlzaXplID0gY3B1X2RhdGEtPmRjYWNoZS5zZXRzOwotCXdheXNpemUgPDw9IGNwdV9kYXRhLT5kY2FjaGUuZW50cnlfc2hpZnQ7CisJd2F5cyA9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheXM7CisJd2F5c2l6ZSA9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLnNldHM7CisJd2F5c2l6ZSA8PD0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUuZW50cnlfc2hpZnQ7CiAKIAlhZGRyc3RhcnQgPSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZOwogCkBAIC0xMDUsNyArMTA0LDcgQEAKIAogCQlmb3IgKGFkZHIgPSBhZGRyc3RhcnQ7CiAJCSAgICAgYWRkciA8IGFkZHJzdGFydCArIHdheXNpemU7Ci0JCSAgICAgYWRkciArPSBjcHVfZGF0YS0+ZGNhY2hlLmxpbmVzeikgeworCQkgICAgIGFkZHIgKz0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUubGluZXN6KSB7CiAJCQl1bnNpZ25lZCBsb25nIGRhdGE7CiAKIAkJCWRhdGEgPSBjdHJsX2lubChhZGRyKSAmICgweDFmZmZmQzAwIHwgU0hfQ0FDSEVfVkFMSUQpOwpAQCAtMTE1LDcgKzExNCw3IEBACiAJCQl9CiAJCX0KIAotCQlhZGRyc3RhcnQgKz0gY3B1X2RhdGEtPmRjYWNoZS53YXlfaW5jcjsKKwkJYWRkcnN0YXJ0ICs9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyOwogCX0gd2hpbGUgKC0td2F5cyk7CiAKIAliYWNrX3RvX1AxKCk7CkBAIC0xMjgsNyArMTI3LDExIEBACiAgKi8KIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JaWYgKHRlc3RfYml0KFBHX21hcHBlZCwgJnBhZ2UtPmZsYWdzKSkKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKKworCWlmIChtYXBwaW5nICYmICFtYXBwaW5nX21hcHBlZChtYXBwaW5nKSkKKwkJc2V0X2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7CisJZWxzZQogCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKFBIWVNBRERSKHBhZ2VfYWRkcmVzcyhwYWdlKSkpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2ZhdWx0LmMgYi9hcmNoL3NoL21tL2ZhdWx0LmMKaW5kZXggNzE2ZWJmNS4uZmE1ZDdmMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc2gvbW0vZmF1bHQuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2tnZGIuaD4KIAogZXh0ZXJuIHZvaWQgZGllKGNvbnN0IGNoYXIgKixzdHJ1Y3QgcHRfcmVncyAqLGxvbmcpOwpAQCAtMjI0LDMgKzIyNSw4OSBAQAogCWlmICghdXNlcl9tb2RlKHJlZ3MpKQogCQlnb3RvIG5vX2NvbnRleHQ7CiB9CisKKyNpZmRlZiBDT05GSUdfU0hfU1RPUkVfUVVFVUVTCisvKgorICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgdGhlIFNILTQgc3RvcmUgcXVldWVzLCBhcyBwYWdlcyBmb3IgdGhpcworICogc3BhY2Ugc3RpbGwgbmVlZCB0byBiZSBmYXVsdGVkIGluIGJlZm9yZSBpdCdzIHBvc3NpYmxlIHRvIGZsdXNoIHRoZQorICogc3RvcmUgcXVldWUgY2FjaGUgZm9yIHdyaXRlb3V0IHRvIHRoZSByZW1hcHBlZCByZWdpb24uCisgKi8KKyNkZWZpbmUgUDNfQUREUl9NQVgJCShQNFNFR19TVE9SRV9RVUUgKyAweDA0MDAwMDAwKQorI2Vsc2UKKyNkZWZpbmUgUDNfQUREUl9NQVgJCVA0U0VHCisjZW5kaWYKKworLyoKKyAqIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KK2FzbWxpbmthZ2UgaW50IF9fa3Byb2JlcyBfX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBsb25nIHdyaXRlYWNjZXNzLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGU7CisJcHRlX3QgZW50cnk7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzcGlubG9ja190ICpwdGw7CisJaW50IHJldCA9IDE7CisKKyNpZmRlZiBDT05GSUdfU0hfS0dEQgorCWlmIChrZ2RiX25vZmF1bHQgJiYga2dkYl9idXNfZXJyX2hvb2spCisJCWtnZGJfYnVzX2Vycl9ob29rKCk7CisjZW5kaWYKKworCS8qCisJICogV2UgZG9uJ3QgdGFrZSBwYWdlIGZhdWx0cyBmb3IgUDEsIFAyLCBhbmQgcGFydHMgb2YgUDQsIHRoZXNlCisJICogYXJlIGFsd2F5cyBtYXBwZWQsIHdoZXRoZXIgaXQgYmUgZHVlIHRvIGxlZ2FjeSBiZWhhdmlvdXIgaW4KKwkgKiAyOS1iaXQgbW9kZSwgb3IgZHVlIHRvIFBNQiBjb25maWd1cmF0aW9uIGluIDMyLWJpdCBtb2RlLgorCSAqLworCWlmIChhZGRyZXNzID49IFAzU0VHICYmIGFkZHJlc3MgPCBQM19BRERSX01BWCkgeworCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcyk7CisJCW1tID0gTlVMTDsKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoYWRkcmVzcyA+PSBUQVNLX1NJWkUgfHwgIW1tKSkKKwkJCXJldHVybiAxOworCisJCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOworCX0KKworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwlpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpCisJCXJldHVybiAxOworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKKwlpZiAocG1kX25vbmVfb3JfY2xlYXJfYmFkKHBtZCkpCisJCXJldHVybiAxOworCisJaWYgKG1tKQorCQlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHJlc3MsICZwdGwpOworCWVsc2UKKwkJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTsKKworCWVudHJ5ID0gKnB0ZTsKKwlpZiAodW5saWtlbHkocHRlX25vbmUoZW50cnkpIHx8IHB0ZV9ub3RfcHJlc2VudChlbnRyeSkpKQorCQlnb3RvIHVubG9jazsKKwlpZiAodW5saWtlbHkod3JpdGVhY2Nlc3MgJiYgIXB0ZV93cml0ZShlbnRyeSkpKQorCQlnb3RvIHVubG9jazsKKworCWlmICh3cml0ZWFjY2VzcykKKwkJZW50cnkgPSBwdGVfbWtkaXJ0eShlbnRyeSk7CisJZW50cnkgPSBwdGVfbWt5b3VuZyhlbnRyeSk7CisKKyNpZmRlZiBDT05GSUdfQ1BVX1NINAorCS8qCisJICogSVRMQiBpcyBub3QgYWZmZWN0ZWQgYnkgImxkdGxiIiBpbnN0cnVjdGlvbi4KKwkgKiBTbywgd2UgbmVlZCB0byBmbHVzaCB0aGUgZW50cnkgYnkgb3Vyc2VsdmVzLgorCSAqLworCWxvY2FsX2ZsdXNoX3RsYl9vbmUoZ2V0X2FzaWQoKSwgYWRkcmVzcyAmIFBBR0VfTUFTSyk7CisjZW5kaWYKKworCXNldF9wdGUocHRlLCBlbnRyeSk7CisJdXBkYXRlX21tdV9jYWNoZShOVUxMLCBhZGRyZXNzLCBlbnRyeSk7CisJcmV0ID0gMDsKK3VubG9jazoKKwlpZiAobW0pCisJCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2luaXQuYyBiL2FyY2gvc2gvbW0vaW5pdC5jCmluZGV4IGJmMGMyNjMuLmFlOTU3YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW5pdC5jCisrKyBiL2FyY2gvc2gvbW0vaW5pdC5jCkBAIC0zOSwxMSArMzksNiBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07CiAKLS8qCi0gKiBDYWNoZSBvZiBNTVUgY29udGV4dCBsYXN0IHVzZWQuCi0gKi8KLXVuc2lnbmVkIGxvbmcgbW11X2NvbnRleHRfY2FjaGUgPSBOT19DT05URVhUOwotCiAjaWZkZWYgQ09ORklHX01NVQogLyogSXQnZCBiZSBnb29kIGlmIHRoZXNlIGxpbmVzIHdlcmUgaW4gdGhlIHN0YW5kYXJkIGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBTVEFSVF9QRk4JKE5PREVfREFUQSgwKS0+YmRhdGEtPm5vZGVfYm9vdF9zdGFydCA+PiBQQUdFX1NISUZUKQpAQCAtMTExLDcgKzEwNiw3IEBACiAKIAlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwaHlzID4+IFBBR0VfU0hJRlQsIHByb3QpKTsKIAotCV9fZmx1c2hfdGxiX3BhZ2UoZ2V0X2FzaWQoKSwgYWRkcik7CisJZmx1c2hfdGxiX29uZShnZXRfYXNpZCgpLCBhZGRyKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW9yZW1hcC5jIGIvYXJjaC9zaC9tbS9pb3JlbWFwLmMKaW5kZXggOTBiNDk0YS4uYmUwM2Q3NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9zaC9tbS9pb3JlbWFwLmMKQEAgLTQ1LDEyICs0NSw2IEBACiAJCXJldHVybiBOVUxMOwogCiAJLyoKLQkgKiBEb24ndCByZW1hcCB0aGUgbG93IFBDSS9JU0EgYXJlYSwgaXQncyBhbHdheXMgbWFwcGVkLi4KLQkgKi8KLQlpZiAocGh5c19hZGRyID49IDB4QTAwMDAgJiYgbGFzdF9hZGRyIDwgMHgxMDAwMDApCi0JCXJldHVybiAodm9pZCBfX2lvbWVtICopcGh5c190b192aXJ0KHBoeXNfYWRkcik7Ci0KLQkvKgogCSAqIElmIHdlJ3JlIG9uIGFuIFNINzc1MSBvciBTSDc3ODAgUENJIGNvbnRyb2xsZXIsIFBDSSBtZW1vcnkgaXMKIAkgKiBtYXBwZWQgYXQgdGhlIGVuZCBvZiB0aGUgYWRkcmVzcyBzcGFjZSAodHlwaWNhbGx5IDB4ZmQwMDAwMDApCiAJICogaW4gYSBub24tdHJhbnNsYXRhYmxlIGFyZWEsIHNvIG1hcHBpbmcgdGhyb3VnaCBwYWdlIHRhYmxlcyBmb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcGctc2g0LmMgYi9hcmNoL3NoL21tL3BnLXNoNC5jCmluZGV4IDNmOThkMmEuLjk2OWVmZWNlIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BnLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vcGctc2g0LmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBtdXRleCBwM21hcF9tdXRleFtdOwogCi0jZGVmaW5lIENBQ0hFX0FMSUFTIChjcHVfZGF0YS0+ZGNhY2hlLmFsaWFzX21hc2spCisjZGVmaW5lIENBQ0hFX0FMSUFTIChjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5hbGlhc19tYXNrKQogCiAvKgogICogY2xlYXJfdXNlcl9wYWdlCkBAIC0yMyw3ICsyMyw2IEBACiAgKi8KIHZvaWQgY2xlYXJfdXNlcl9wYWdlKHZvaWQgKnRvLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBwYWdlICpwYWdlKQogewotCV9fc2V0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncyk7CiAJaWYgKCgoYWRkcmVzcyBeICh1bnNpZ25lZCBsb25nKXRvKSAmIENBQ0hFX0FMSUFTKSA9PSAwKQogCQljbGVhcl9wYWdlKHRvKTsKIAllbHNlIHsKQEAgLTQwLDcgKzM5LDcgQEAKIAkJbXV0ZXhfbG9jaygmcDNtYXBfbXV0ZXhbKGFkZHJlc3MgJiBDQUNIRV9BTElBUyk+PjEyXSk7CiAJCXNldF9wdGUocHRlLCBlbnRyeSk7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJX19mbHVzaF90bGJfcGFnZShnZXRfYXNpZCgpLCBwM19hZGRyKTsKKwkJZmx1c2hfdGxiX29uZShnZXRfYXNpZCgpLCBwM19hZGRyKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQl1cGRhdGVfbW11X2NhY2hlKE5VTEwsIHAzX2FkZHIsIGVudHJ5KTsKIAkJX19jbGVhcl91c2VyX3BhZ2UoKHZvaWQgKilwM19hZGRyLCB0byk7CkBAIC01OSw3ICs1OCw2IEBACiB2b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlfX3NldF9iaXQoUEdfbWFwcGVkLCAmcGFnZS0+ZmxhZ3MpOwogCWlmICgoKGFkZHJlc3MgXiAodW5zaWduZWQgbG9uZyl0bykgJiBDQUNIRV9BTElBUykgPT0gMCkKIAkJY29weV9wYWdlKHRvLCBmcm9tKTsKIAllbHNlIHsKQEAgLTc2LDcgKzc0LDcgQEAKIAkJbXV0ZXhfbG9jaygmcDNtYXBfbXV0ZXhbKGFkZHJlc3MgJiBDQUNIRV9BTElBUyk+PjEyXSk7CiAJCXNldF9wdGUocHRlLCBlbnRyeSk7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJX19mbHVzaF90bGJfcGFnZShnZXRfYXNpZCgpLCBwM19hZGRyKTsKKwkJZmx1c2hfdGxiX29uZShnZXRfYXNpZCgpLCBwM19hZGRyKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQl1cGRhdGVfbW11X2NhY2hlKE5VTEwsIHAzX2FkZHIsIGVudHJ5KTsKIAkJX19jb3B5X3VzZXJfcGFnZSgodm9pZCAqKXAzX2FkZHIsIGZyb20sIHRvKTsKQEAgLTg0LDIzICs4MiwzIEBACiAJCW11dGV4X3VubG9jaygmcDNtYXBfbXV0ZXhbKGFkZHJlc3MgJiBDQUNIRV9BTElBUyk+PjEyXSk7CiAJfQogfQotCi0vKgotICogRm9yIFNILTQsIHdlIGhhdmUgb3VyIG93biBpbXBsZW1lbnRhdGlvbiBmb3IgcHRlcF9nZXRfYW5kX2NsZWFyCi0gKi8KLWlubGluZSBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCi17Ci0JcHRlX3QgcHRlID0gKnB0ZXA7Ci0KLQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwotCWlmICghcHRlX25vdF9wcmVzZW50KHB0ZSkpIHsKLQkJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKHB0ZSk7Ci0JCWlmIChwZm5fdmFsaWQocGZuKSkgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7Ci0JCQlpZiAoIW1hcHBpbmcgfHwgIW1hcHBpbmdfd3JpdGFibHlfbWFwcGVkKG1hcHBpbmcpKQotCQkJCV9fY2xlYXJfYml0KFBHX21hcHBlZCwgJnBhZ2UtPmZsYWdzKTsKLQkJfQotCX0KLQlyZXR1cm4gcHRlOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wZy1zaDc3MDUuYyBiL2FyY2gvc2gvbW0vcGctc2g3NzA1LmMKaW5kZXggZmY5ZWNlOS4uODg3YWI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wZy1zaDc3MDUuYworKysgYi9hcmNoL3NoL21tL3BnLXNoNzcwNS5jCkBAIC03LDkgKzcsNyBAQAogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgogICovCi0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC00NSwxMyArNDMsMTMgQEAKIAogCQlwID0gX19wYShwMV9iZWdpbik7CiAKLQkgICAgICAgIHdheXMgPSBjcHVfZGF0YS0+ZGNhY2hlLndheXM7CisJICAgICAgICB3YXlzID0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5czsKIAkJYWRkciA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVk7CiAKIAkJZG8gewogCQkJdW5zaWduZWQgbG9uZyBkYXRhOwogCi0JCQlhZGRyIHw9ICh2ICYgY3B1X2RhdGEtPmRjYWNoZS5lbnRyeV9tYXNrKTsKKwkJCWFkZHIgfD0gKHYgJiBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5lbnRyeV9tYXNrKTsKIAogCQkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOwogCQkJaWYgKChkYXRhICYgQ0FDSEVfUEhZU0FERFJfTUFTSykgPT0KQEAgLTYwLDcgKzU4LDcgQEAKIAkJCQljdHJsX291dGwoZGF0YSwgYWRkcik7CiAJCQl9CiAKLQkJCWFkZHIgKz0gY3B1X2RhdGEtPmRjYWNoZS53YXlfaW5jcjsKKwkJCWFkZHIgKz0gY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5X2luY3I7CiAJCX0gd2hpbGUgKC0td2F5cyk7CiAKIAkJcDFfYmVnaW4gKz0gTDFfQ0FDSEVfQllURVM7CkBAIC03Niw3ICs3NCw2IEBACiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UodG8pOwogCi0JX19zZXRfYml0KFBHX21hcHBlZCwgJnBhZ2UtPmZsYWdzKTsKIAlpZiAoKChhZGRyZXNzIF4gKHVuc2lnbmVkIGxvbmcpdG8pICYgQ0FDSEVfQUxJQVMpID09IDApIHsKIAkJY2xlYXJfcGFnZSh0byk7CiAJCV9fZmx1c2hfd2JhY2tfcmVnaW9uKHRvLCBQQUdFX1NJWkUpOwpAQCAtOTUsMTIgKzkyLDExIEBACiAgKiBAZnJvbTogUDEgYWRkcmVzcwogICogQGFkZHJlc3M6IFUwIGFkZHJlc3MgdG8gYmUgbWFwcGVkCiAgKi8KLXZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IHBhZ2UgKnBnKQordm9pZCBjb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkgICAgc3RydWN0IHBhZ2UgKnBnKQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKHRvKTsKIAotCi0JX19zZXRfYml0KFBHX21hcHBlZCwgJnBhZ2UtPmZsYWdzKTsKIAlpZiAoKChhZGRyZXNzIF4gKHVuc2lnbmVkIGxvbmcpdG8pICYgQ0FDSEVfQUxJQVMpID09IDApIHsKIAkJY29weV9wYWdlKHRvLCBmcm9tKTsKIAkJX19mbHVzaF93YmFja19yZWdpb24odG8sIFBBR0VfU0laRSk7CkBAIC0xMTIsMjYgKzEwOCwzIEBACiAJCV9fZmx1c2hfd2JhY2tfcmVnaW9uKHRvLCBQQUdFX1NJWkUpOwogCX0KIH0KLQotLyoKLSAqIEZvciBTSDc3MDUsIHdlIGhhdmUgb3VyIG93biBpbXBsZW1lbnRhdGlvbiBmb3IgcHRlcF9nZXRfYW5kX2NsZWFyCi0gKiBDb3BpZWQgZnJvbSBwZy1zaDQuYwotICovCi1pbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQotewotCXB0ZV90IHB0ZSA9ICpwdGVwOwotCi0JcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTsKLQlpZiAoIXB0ZV9ub3RfcHJlc2VudChwdGUpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOwotCQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLQkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwotCQkJaWYgKCFtYXBwaW5nIHx8ICFtYXBwaW5nX3dyaXRhYmx5X21hcHBlZChtYXBwaW5nKSkKLQkJCQlfX2NsZWFyX2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcHRlOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1mbHVzaC5jIGIvYXJjaC9zaC9tbS90bGItZmx1c2guYwppbmRleCA3M2VjN2Y2Li5kMmY3YjRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYi1mbHVzaC5jCisrKyBiL2FyY2gvc2gvbW0vdGxiLWZsdXNoLmMKQEAgLTIsMjQgKzIsMjggQEAKICAqIFRMQiBmbHVzaGluZyBvcGVyYXRpb25zIGZvciBTSCB3aXRoIGFuIE1NVS4KICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAotdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBwYWdlKQordm9pZCBsb2NhbF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBwYWdlKQogewotCWlmICh2bWEtPnZtX21tICYmIHZtYS0+dm1fbW0tPmNvbnRleHQuaWQgIT0gTk9fQ09OVEVYVCkgeworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAodm1hLT52bV9tbSAmJiBjcHVfY29udGV4dChjcHUsIHZtYS0+dm1fbW0pICE9IE5PX0NPTlRFWFQpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdW5zaWduZWQgbG9uZyBhc2lkOwogCQl1bnNpZ25lZCBsb25nIHNhdmVkX2FzaWQgPSBNTVVfTk9fQVNJRDsKIAotCQlhc2lkID0gdm1hLT52bV9tbS0+Y29udGV4dC5pZCAmIE1NVV9DT05URVhUX0FTSURfTUFTSzsKKwkJYXNpZCA9IGNwdV9hc2lkKGNwdSwgdm1hLT52bV9tbSk7CiAJCXBhZ2UgJj0gUEFHRV9NQVNLOwogCiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTI3LDMzICszMSwzNCBAQAogCQkJc2F2ZWRfYXNpZCA9IGdldF9hc2lkKCk7CiAJCQlzZXRfYXNpZChhc2lkKTsKIAkJfQotCQlfX2ZsdXNoX3RsYl9wYWdlKGFzaWQsIHBhZ2UpOworCQlsb2NhbF9mbHVzaF90bGJfb25lKGFzaWQsIHBhZ2UpOwogCQlpZiAoc2F2ZWRfYXNpZCAhPSBNTVVfTk9fQVNJRCkKIAkJCXNldF9hc2lkKHNhdmVkX2FzaWQpOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogfQogCi12b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCkKK3ZvaWQgbG9jYWxfZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlpZiAobW0tPmNvbnRleHQuaWQgIT0gTk9fQ09OVEVYVCkgeworCWlmIChjcHVfY29udGV4dChjcHUsIG1tKSAhPSBOT19DT05URVhUKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCWludCBzaXplOwogCiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJc2l6ZSA9IChlbmQgLSBzdGFydCArIChQQUdFX1NJWkUgLSAxKSkgPj4gUEFHRV9TSElGVDsKIAkJaWYgKHNpemUgPiAoTU1VX05UTEJfRU5UUklFUy80KSkgeyAvKiBUb28gbWFueSBUTEIgdG8gZmx1c2ggKi8KLQkJCW1tLT5jb250ZXh0LmlkID0gTk9fQ09OVEVYVDsKKwkJCWNwdV9jb250ZXh0KGNwdSwgbW0pID0gTk9fQ09OVEVYVDsKIAkJCWlmIChtbSA9PSBjdXJyZW50LT5tbSkKLQkJCQlhY3RpdmF0ZV9jb250ZXh0KG1tKTsKKwkJCQlhY3RpdmF0ZV9jb250ZXh0KG1tLCBjcHUpOwogCQl9IGVsc2UgewogCQkJdW5zaWduZWQgbG9uZyBhc2lkOwogCQkJdW5zaWduZWQgbG9uZyBzYXZlZF9hc2lkID0gTU1VX05PX0FTSUQ7CiAKLQkJCWFzaWQgPSBtbS0+Y29udGV4dC5pZCAmIE1NVV9DT05URVhUX0FTSURfTUFTSzsKKwkJCWFzaWQgPSBjcHVfYXNpZChjcHUsIG1tKTsKIAkJCXN0YXJ0ICY9IFBBR0VfTUFTSzsKIAkJCWVuZCArPSAoUEFHRV9TSVpFIC0gMSk7CiAJCQllbmQgJj0gUEFHRV9NQVNLOwpAQCAtNjIsNyArNjcsNyBAQAogCQkJCXNldF9hc2lkKGFzaWQpOwogCQkJfQogCQkJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0JCQkJX19mbHVzaF90bGJfcGFnZShhc2lkLCBzdGFydCk7CisJCQkJbG9jYWxfZmx1c2hfdGxiX29uZShhc2lkLCBzdGFydCk7CiAJCQkJc3RhcnQgKz0gUEFHRV9TSVpFOwogCQkJfQogCQkJaWYgKHNhdmVkX2FzaWQgIT0gTU1VX05PX0FTSUQpCkBAIC03MiwyNiArNzcsMjcgQEAKIAl9CiB9CiAKLXZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3ZvaWQgbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHNpemU7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJc2l6ZSA9IChlbmQgLSBzdGFydCArIChQQUdFX1NJWkUgLSAxKSkgPj4gUEFHRV9TSElGVDsKIAlpZiAoc2l6ZSA+IChNTVVfTlRMQl9FTlRSSUVTLzQpKSB7IC8qIFRvbyBtYW55IFRMQiB0byBmbHVzaCAqLwotCQlmbHVzaF90bGJfYWxsKCk7CisJCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBsb25nIGFzaWQ7CiAJCXVuc2lnbmVkIGxvbmcgc2F2ZWRfYXNpZCA9IGdldF9hc2lkKCk7CiAKLQkJYXNpZCA9IGluaXRfbW0uY29udGV4dC5pZCAmIE1NVV9DT05URVhUX0FTSURfTUFTSzsKKwkJYXNpZCA9IGNwdV9hc2lkKGNwdSwgJmluaXRfbW0pOwogCQlzdGFydCAmPSBQQUdFX01BU0s7CiAJCWVuZCArPSAoUEFHRV9TSVpFIC0gMSk7CiAJCWVuZCAmPSBQQUdFX01BU0s7CiAJCXNldF9hc2lkKGFzaWQpOwogCQl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLQkJCV9fZmx1c2hfdGxiX3BhZ2UoYXNpZCwgc3RhcnQpOworCQkJbG9jYWxfZmx1c2hfdGxiX29uZShhc2lkLCBzdGFydCk7CiAJCQlzdGFydCArPSBQQUdFX1NJWkU7CiAJCX0KIAkJc2V0X2FzaWQoc2F2ZWRfYXNpZCk7CkBAIC05OSwyMiArMTA1LDI0IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi12b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3ZvaWQgbG9jYWxfZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogeworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKIAkvKiBJbnZhbGlkYXRlIGFsbCBUTEIgb2YgdGhpcyBwcm9jZXNzLiAqLwogCS8qIEluc3RlYWQgb2YgaW52YWxpZGF0aW5nIGVhY2ggVExCLCB3ZSBnZXQgbmV3IE1NVSBjb250ZXh0LiAqLwotCWlmIChtbS0+Y29udGV4dC5pZCAhPSBOT19DT05URVhUKSB7CisJaWYgKGNwdV9jb250ZXh0KGNwdSwgbW0pICE9IE5PX0NPTlRFWFQpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCW1tLT5jb250ZXh0LmlkID0gTk9fQ09OVEVYVDsKKwkJY3B1X2NvbnRleHQoY3B1LCBtbSkgPSBOT19DT05URVhUOwogCQlpZiAobW0gPT0gY3VycmVudC0+bW0pCi0JCQlhY3RpdmF0ZV9jb250ZXh0KG1tKTsKKwkJCWFjdGl2YXRlX2NvbnRleHQobW0sIGNwdSk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiB9CiAKLXZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQordm9pZCBsb2NhbF9mbHVzaF90bGJfYWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgc3RhdHVzOwogCkBAIC0xMzIsMyArMTQwLDU0IEBACiAJY3RybF9iYXJyaWVyKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQorCit2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBwdGV2YWw7CisJdW5zaWduZWQgbG9uZyB2cG47CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKHB0ZSk7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisKKwlpZiAoIXBmbl92YWxpZChwZm4pKQorCQlyZXR1cm47CisKKwlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKwltYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOworCWlmIChtYXBwaW5nKSB7CisJCXVuc2lnbmVkIGxvbmcgcGh5cyA9IHB0ZV92YWwocHRlKSAmIFBURV9QSFlTX01BU0s7CisJCWludCBkaXJ0eSA9IHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7CisKKwkJaWYgKGRpcnR5KQorCQkJX19mbHVzaF93YmFja19yZWdpb24oKHZvaWQgKilQMVNFR0FERFIocGh5cyksCisJCQkJCSAgICAgUEFHRV9TSVpFKTsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBTZXQgUFRFSCByZWdpc3RlciAqLworCXZwbiA9IChhZGRyZXNzICYgTU1VX1ZQTl9NQVNLKSB8IGdldF9hc2lkKCk7CisJY3RybF9vdXRsKHZwbiwgTU1VX1BURUgpOworCisJcHRldmFsID0gcHRlX3ZhbChwdGUpOworCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfUFRFQQorCS8qIFNldCBQVEVBIHJlZ2lzdGVyICovCisJLyogVE9ETzogbWFrZSB0aGlzIGxvb2sgbGVzcyBoYWNreSAqLworCWN0cmxfb3V0bCgoKHB0ZXZhbCA+PiAyOCkgJiAweGUpIHwgKHB0ZXZhbCAmIDB4MSksIE1NVV9QVEVBKTsKKyNlbmRpZgorCisJLyogU2V0IFBURUwgcmVnaXN0ZXIgKi8KKwlwdGV2YWwgJj0gX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSzsgLyogZHJvcCBzb2Z0d2FyZSBmbGFncyAqLworI2lmIGRlZmluZWQoQ09ORklHX1NIX1dSSVRFVEhST1VHSCkgJiYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKwlwdGV2YWwgfD0gX1BBR0VfV1Q7CisjZW5kaWYKKwkvKiBjb252ZW5pZW50bHksIHdlIHdhbnQgYWxsIHRoZSBzb2Z0d2FyZSBmbGFncyB0byBiZSAwIGFueXdheSAqLworCWN0cmxfb3V0bChwdGV2YWwsIE1NVV9QVEVMKTsKKworCS8qIExvYWQgdGhlIFRMQiAqLworCWFzbSB2b2xhdGlsZSgibGR0bGIiOiAvKiBubyBvdXRwdXQgKi8gOiAvKiBubyBpbnB1dCAqLyA6ICJtZW1vcnkiKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1ub21tdS5jIGIvYXJjaC9zaC9tbS90bGItbm9tbXUuYwppbmRleCBlNTVjZmVhLi4xY2NjYTdjIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYi1ub21tdS5jCisrKyBiL2FyY2gvc2gvbW0vdGxiLW5vbW11LmMKQEAgLTEzLDM5ICsxMywzMyBAQAogLyoKICAqIE5vdGhpbmcgdG9vIHRlcnJpYmx5IGV4Y2l0aW5nIGhlcmUgLi4KICAqLwotCi12b2lkIGZsdXNoX3RsYih2b2lkKQordm9pZCBsb2NhbF9mbHVzaF90bGJfYWxsKHZvaWQpCiB7CiAJQlVHKCk7CiB9CiAKLXZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQordm9pZCBsb2NhbF9mbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJQlVHKCk7CiB9CiAKLXZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCUJVRygpOwotfQotCi12b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKK3ZvaWQgbG9jYWxfZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCUJVRygpOwogfQogCi12b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpCit2b2lkIGxvY2FsX2ZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpCiB7CiAJQlVHKCk7CiB9CiAKLXZvaWQgX19mbHVzaF90bGJfcGFnZSh1bnNpZ25lZCBsb25nIGFzaWQsIHVuc2lnbmVkIGxvbmcgcGFnZSkKK3ZvaWQgbG9jYWxfZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFzaWQsIHVuc2lnbmVkIGxvbmcgcGFnZSkKIHsKIAlCVUcoKTsKIH0KIAotdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQordm9pZCBsb2NhbF9mbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCUJVRygpOwogfQpAQCAtNTUsNCArNDksMyBAQAogewogCUJVRygpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1zaDMuYyBiL2FyY2gvc2gvbW0vdGxiLXNoMy5jCmluZGV4IDQ2YjA5ZTIuLmU1ZTc2ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiLXNoMy5jCisrKyBiL2FyY2gvc2gvbW0vdGxiLXNoMy5jCkBAIC04LDcxICs4LDExIEBACiAgKgogICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWFuLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLXZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBwdGV2YWw7Ci0JdW5zaWduZWQgbG9uZyB2cG47Ci0KLQkvKiBQdHJhY2UgbWF5IGNhbGwgdGhpcyByb3V0aW5lLiAqLwotCWlmICh2bWEgJiYgY3VycmVudC0+YWN0aXZlX21tICE9IHZtYS0+dm1fbW0pCi0JCXJldHVybjsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKQotCXsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZShwdGUpOwotCQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKLQotCQlpZiAocGZuX3ZhbGlkKHBmbikgJiYgIXRlc3RfYml0KFBHX21hcHBlZCwgJnBhZ2UtPmZsYWdzKSkgewotCQkJdW5zaWduZWQgbG9uZyBwaHlzID0gcHRlX3ZhbChwdGUpICYgUFRFX1BIWVNfTUFTSzsKLQotCQkJX19mbHVzaF93YmFja19yZWdpb24oKHZvaWQgKilQMVNFR0FERFIocGh5cyksCi0JCQkJCSAgICAgUEFHRV9TSVpFKTsKLQkJCV9fc2V0X2JpdChQR19tYXBwZWQsICZwYWdlLT5mbGFncyk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCS8qIFNldCBQVEVIIHJlZ2lzdGVyICovCi0JdnBuID0gKGFkZHJlc3MgJiBNTVVfVlBOX01BU0spIHwgZ2V0X2FzaWQoKTsKLQljdHJsX291dGwodnBuLCBNTVVfUFRFSCk7Ci0KLQlwdGV2YWwgPSBwdGVfdmFsKHB0ZSk7Ci0KLQkvKiBTZXQgUFRFTCByZWdpc3RlciAqLwotCXB0ZXZhbCAmPSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLOyAvKiBkcm9wIHNvZnR3YXJlIGZsYWdzICovCi0JLyogY29udmVuaWVudGx5LCB3ZSB3YW50IGFsbCB0aGUgc29mdHdhcmUgZmxhZ3MgdG8gYmUgMCBhbnl3YXkgKi8KLQljdHJsX291dGwocHRldmFsLCBNTVVfUFRFTCk7Ci0KLQkvKiBMb2FkIHRoZSBUTEIgKi8KLQlhc20gdm9sYXRpbGUoImxkdGxiIjogLyogbm8gb3V0cHV0ICovIDogLyogbm8gaW5wdXQgKi8gOiAibWVtb3J5Iik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi12b2lkIF9fZmx1c2hfdGxiX3BhZ2UodW5zaWduZWQgbG9uZyBhc2lkLCB1bnNpZ25lZCBsb25nIHBhZ2UpCit2b2lkIGxvY2FsX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhc2lkLCB1bnNpZ25lZCBsb25nIHBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyLCBkYXRhOwogCWludCBpLCB3YXlzID0gTU1VX05UTEJfV0FZUzsKQEAgLTg2LDcgKzI2LDcgQEAKIAlhZGRyID0gTU1VX1RMQl9BRERSRVNTX0FSUkFZIHwgKHBhZ2UgJiAweDFGMDAwKTsKIAlkYXRhID0gKHBhZ2UgJiAweGZmZmUwMDAwKSB8IGFzaWQ7IC8qIFZBTElEIGJpdCBpcyBvZmYgKi8KIAotCWlmICgoY3B1X2RhdGEtPmZsYWdzICYgQ1BVX0hBU19NTVVfUEFHRV9BU1NPQykpIHsKKwlpZiAoKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX01NVV9QQUdFX0FTU09DKSkgewogCQlhZGRyIHw9IE1NVV9QQUdFX0FTU09DX0JJVDsKIAkJd2F5cyA9IDE7CS8qIHdlIGFscmVhZHkga25vdyB0aGUgd2F5IC4uICovCiAJfQpAQCAtOTQsNCArMzQsMyBAQAogCWZvciAoaSA9IDA7IGkgPCB3YXlzOyBpKyspCiAJCWN0cmxfb3V0bChkYXRhLCBhZGRyICsgKGkgPDwgOCkpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1zaDQuYyBiL2FyY2gvc2gvbW0vdGxiLXNoNC5jCmluZGV4IDgxMmIyZDUuLjIyMWU3MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vdGxiLXNoNC5jCkBAIC04LDc2ICs4LDExIEBACiAgKgogICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWFuLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLXZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBwdGV2YWw7Ci0JdW5zaWduZWQgbG9uZyB2cG47Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0KLQkvKiBQdHJhY2UgbWF5IGNhbGwgdGhpcyByb3V0aW5lLiAqLwotCWlmICh2bWEgJiYgY3VycmVudC0+YWN0aXZlX21tICE9IHZtYS0+dm1fbW0pCi0JCXJldHVybjsKLQotCXBmbiA9IHB0ZV9wZm4ocHRlKTsKLQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKLQkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCWlmICghdGVzdF9iaXQoUEdfbWFwcGVkLCAmcGFnZS0+ZmxhZ3MpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHBoeXMgPSBwdGVfdmFsKHB0ZSkgJiBQVEVfUEhZU19NQVNLOwotCQkJX19mbHVzaF93YmFja19yZWdpb24oKHZvaWQgKilQMVNFR0FERFIocGh5cyksIFBBR0VfU0laRSk7Ci0JCQlfX3NldF9iaXQoUEdfbWFwcGVkLCAmcGFnZS0+ZmxhZ3MpOwotCQl9Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JLyogU2V0IFBURUggcmVnaXN0ZXIgKi8KLQl2cG4gPSAoYWRkcmVzcyAmIE1NVV9WUE5fTUFTSykgfCBnZXRfYXNpZCgpOwotCWN0cmxfb3V0bCh2cG4sIE1NVV9QVEVIKTsKLQotCXB0ZXZhbCA9IHB0ZV92YWwocHRlKTsKLQotCS8qIFNldCBQVEVBIHJlZ2lzdGVyICovCi0JaWYgKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfUFRFQSkKLQkJLyogVE9ETzogbWFrZSB0aGlzIGxvb2sgbGVzcyBoYWNreSAqLwotCQljdHJsX291dGwoKChwdGV2YWwgPj4gMjgpICYgMHhlKSB8IChwdGV2YWwgJiAweDEpLCBNTVVfUFRFQSk7Ci0KLQkvKiBTZXQgUFRFTCByZWdpc3RlciAqLwotCXB0ZXZhbCAmPSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLOyAvKiBkcm9wIHNvZnR3YXJlIGZsYWdzICovCi0jaWZkZWYgQ09ORklHX1NIX1dSSVRFVEhST1VHSAotCXB0ZXZhbCB8PSBfUEFHRV9XVDsKLSNlbmRpZgotCS8qIGNvbnZlbmllbnRseSwgd2Ugd2FudCBhbGwgdGhlIHNvZnR3YXJlIGZsYWdzIHRvIGJlIDAgYW55d2F5ICovCi0JY3RybF9vdXRsKHB0ZXZhbCwgTU1VX1BURUwpOwotCi0JLyogTG9hZCB0aGUgVExCICovCi0JYXNtIHZvbGF0aWxlKCJsZHRsYiI6IC8qIG5vIG91dHB1dCAqLyA6IC8qIG5vIGlucHV0ICovIDogIm1lbW9yeSIpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotdm9pZCBfX2ZsdXNoX3RsYl9wYWdlKHVuc2lnbmVkIGxvbmcgYXNpZCwgdW5zaWduZWQgbG9uZyBwYWdlKQordm9pZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwgdW5zaWduZWQgbG9uZyBwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciwgZGF0YTsKIApAQCAtOTMsNCArMjgsMyBAQAogCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKIAliYWNrX3RvX1AxKCk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvb3Byb2ZpbGUvb3BfbW9kZWxfc2g3NzUwLmMgYi9hcmNoL3NoL29wcm9maWxlL29wX21vZGVsX3NoNzc1MC5jCmluZGV4IDAxMDRlNDQuLmViZWU3ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvb3Byb2ZpbGUvb3BfbW9kZWxfc2g3NzUwLmMKKysrIGIvYXJjaC9zaC9vcHJvZmlsZS9vcF9tb2RlbF9zaDc3NTAuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiAKIGludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICoqb3BzKQogewotCWlmICghKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfUEVSRl9DT1VOVEVSKSkKKwlpZiAoIShjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19QRVJGX0NPVU5URVIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXNoNzc1MF9wZXJmX2NvdW50ZXJfb3BzLmNwdV90eXBlID0gKGNoYXIgKilnZXRfY3B1X3N1YnR5cGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwppbmRleCAwNTcxNzU1Li40ZmUwZjk0IDEwMDY0NAotLS0gYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCkBAIC0xNiw3ICsxNiw2IEBACiBIRDY0NDY1CQkJSEQ2NDQ2NQogU0FUVVJOCQkJU0hfU0FUVVJOCiBEUkVBTUNBU1QJCVNIX0RSRUFNQ0FTVAotQklHU1VSCQkJU0hfQklHU1VSCiBNUEMxMjExCQkJU0hfTVBDMTIxMQogU05BUEdFQVIJCVNIX1NFQ1VSRUVER0U1NDEwCiBIUzc3NTFSVk9JUAkJU0hfSFM3NzUxUlZPSVAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc2lnaW8uYyBiL2FyY2gvdW0vb3MtTGludXgvc2lnaW8uYwppbmRleCA5MjVhNjUyLi5iMmUxZmQ4IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3NpZ2lvLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zaWdpby5jCkBAIC05NywyMCArOTcsMjIgQEAKIAogc3RhdGljIGludCBuZWVkX3BvbGwoc3RydWN0IHBvbGxmZHMgKnBvbGxzLCBpbnQgbikKIHsKLQlpZihuIDw9IHBvbGxzLT5zaXplKXsKLQkJcG9sbHMtPnVzZWQgPSBuOworCXN0cnVjdCBwb2xsZmQgKm5ldzsKKworCWlmKG4gPD0gcG9sbHMtPnNpemUpCiAJCXJldHVybiAwOwotCX0KLQlrZnJlZShwb2xscy0+cG9sbCk7Ci0JcG9sbHMtPnBvbGwgPSB1bV9rbWFsbG9jX2F0b21pYyhuICogc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKTsKLQlpZihwb2xscy0+cG9sbCA9PSBOVUxMKXsKKworCW5ldyA9IHVtX2ttYWxsb2NfYXRvbWljKG4gKiBzaXplb2Yoc3RydWN0IHBvbGxmZCkpOworCWlmKG5ldyA9PSBOVUxMKXsKIAkJcHJpbnRrKCJuZWVkX3BvbGwgOiBmYWlsZWQgdG8gYWxsb2NhdGUgbmV3IHBvbGxmZHNcbiIpOwotCQlwb2xscy0+c2l6ZSA9IDA7Ci0JCXBvbGxzLT51c2VkID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCisJbWVtY3B5KG5ldywgcG9sbHMtPnBvbGwsIHBvbGxzLT51c2VkICogc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKTsKKwlrZnJlZShwb2xscy0+cG9sbCk7CisKKwlwb2xscy0+cG9sbCA9IG5ldzsKIAlwb2xscy0+c2l6ZSA9IG47Ci0JcG9sbHMtPnVzZWQgPSBuOwogCXJldHVybiAwOwogfQogCkBAIC0xNzEsMTUgKzE3MywxNSBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JbiA9IGN1cnJlbnRfcG9sbC51c2VkICsgMTsKLQllcnIgPSBuZWVkX3BvbGwoJm5leHRfcG9sbCwgbik7CisJbiA9IGN1cnJlbnRfcG9sbC51c2VkOworCWVyciA9IG5lZWRfcG9sbCgmbmV4dF9wb2xsLCBuICsgMSk7CiAJaWYoZXJyKQogCQlnb3RvIG91dDsKIAotCWZvcihpID0gMDsgaSA8IGN1cnJlbnRfcG9sbC51c2VkOyBpKyspCi0JCW5leHRfcG9sbC5wb2xsW2ldID0gY3VycmVudF9wb2xsLnBvbGxbaV07Ci0KLQluZXh0X3BvbGwucG9sbFtuIC0gMV0gPSAqcDsKKwltZW1jcHkobmV4dF9wb2xsLnBvbGwsIGN1cnJlbnRfcG9sbC5wb2xsLAorCSAgICAgICBjdXJyZW50X3BvbGwudXNlZCAqIHNpemVvZihzdHJ1Y3QgcG9sbGZkKSk7CisJbmV4dF9wb2xsLnBvbGxbbl0gPSAqcDsKKwluZXh0X3BvbGwudXNlZCA9IG4gKyAxOwogCXVwZGF0ZV90aHJlYWQoKTsKICBvdXQ6CiAJc2lnaW9fdW5sb2NrKCk7CkBAIC0yMTQsNiArMjE2LDcgQEAKIAkJaWYocC0+ZmQgIT0gZmQpCiAJCQluZXh0X3BvbGwucG9sbFtuKytdID0gKnA7CiAJfQorCW5leHRfcG9sbC51c2VkID0gY3VycmVudF9wb2xsLnVzZWQgLSAxOwogCiAJdXBkYXRlX3RocmVhZCgpOwogIG91dDoKQEAgLTMzMSwxMCArMzM0LDkgQEAKIAogCXNpZ2lvX2xvY2soKTsKIAllcnIgPSBuZWVkX3BvbGwoJmFsbF9zaWdpb19mZHMsIGFsbF9zaWdpb19mZHMudXNlZCArIDEpOwotCWlmKGVycil7Ci0JCXByaW50aygibWF5YmVfc2lnaW9fYnJva2VuIC0gZmFpbGVkIHRvIGFkZCBwb2xsZmRcbiIpOworCWlmKGVycikKIAkJZ290byBvdXQ7Ci0JfQorCiAJYWxsX3NpZ2lvX2Zkcy5wb2xsW2FsbF9zaWdpb19mZHMudXNlZCsrXSA9CiAJCSgoc3RydWN0IHBvbGxmZCkgeyAuZmQgIAk9IGZkLAogCQkJCSAgIC5ldmVudHMgCT0gcmVhZCA/IFBPTExJTiA6IFBPTExPVVQsCmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAvS2NvbmZpZyBiL2FyY2gvdjg1MC9LY29uZmlnCmluZGV4IGRiZmFiOGYuLjUwY2NjN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9LY29uZmlnCisrKyBiL2FyY2gvdjg1MC9LY29uZmlnCkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICMgU29tZSBwbGF0Zm9ybXMgcHJlLXplcm8gbWVtb3J5LCBpbiB3aGljaCBjYXNlIHRoZSBrZXJuZWwgZG9lc24ndCBuZWVkIHRvCiAgICBjb25maWcgWkVST19CU1MKICAgIAkgIGJvb2wKLQkgIGRlcGVuZHMgIVY4NTBFMl9TSU04NUUyQworCSAgZGVwZW5kcyBvbiAhVjg1MEUyX1NJTTg1RTJDCiAJICBkZWZhdWx0IHkKIAogICAgIyBUaGUgY3JhcHB5LWFzcyB6b25lIGFsbG9jYXRvciByZXF1aXJlcyB0aGF0IHRoZSBzdGFydCBvZiBhbGxvY2F0YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvS2NvbmZpZyBiL2FyY2gveDg2XzY0L0tjb25maWcKaW5kZXggMDJkZDM5NC4uNTZlYjE0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvS2NvbmZpZworKysgYi9hcmNoL3g4Nl82NC9LY29uZmlnCkBAIC0yNCw2ICsyNCwxNCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfVElNRQorCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIEdFTkVSSUNfVElNRV9WU1lTQ0FMTAorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIFpPTkVfRE1BMzIKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0xNTIsMTggKzE2MCwxOCBAQAogCSAgT3B0aW1pemUgZm9yIEludGVsIFBlbnRpdW0gNCBhbmQgb2xkZXIgTm9jb25hL0RlbXBzZXkgWGVvbiBDUFVzCiAJICB3aXRoIEludGVsIEV4dGVuZGVkIE1lbW9yeSA2NCBUZWNobm9sb2d5KEVNNjRUKS4gRm9yIGRldGFpbHMgc2VlCiAJICA8aHR0cDovL3d3dy5pbnRlbC5jb20vdGVjaG5vbG9neS82NGJpdGV4dGVuc2lvbnMvPi4KLQkgIE5vdGUgdGhlIHRoZSBsYXRlc3QgWGVvbnMgKFhlb24gNTF4eCBhbmQgNTN4eCkgYXJlIG5vdCBiYXNlZCBvbiB0aGUKLSAgICAgICAgICBOZXRidXJzdCBjb3JlIGFuZCBzaG91bGRuJ3QgdXNlIHRoaXMgb3B0aW9uLiBZb3UgY2FuIGRpc3Rpbmd1c2ggdGhlbQorCSAgTm90ZSB0aGF0IHRoZSBsYXRlc3QgWGVvbnMgKFhlb24gNTF4eCBhbmQgNTN4eCkgYXJlIG5vdCBiYXNlZCBvbiB0aGUKKyAgICAgICAgICBOZXRidXJzdCBjb3JlIGFuZCBzaG91bGRuJ3QgdXNlIHRoaXMgb3B0aW9uLiBZb3UgY2FuIGRpc3Rpbmd1aXNoIHRoZW0KIAkgIHVzaW5nIHRoZSBjcHUgZmFtaWx5IGZpZWxkCi0JICBpbiAvcHJvYy9jcHVpbmZvLiBGYW1pbHkgMTUgaXMgYSBvbGRlciBYZW9uLCBGYW1pbHkgNiBhIG5ld2VyIG9uZQotCSAgKHRoaXMgcnVsZSBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtIHRoYXQgc3VwcG9ydCBFTTY0VCkKKwkgIGluIC9wcm9jL2NwdWluZm8uIEZhbWlseSAxNSBpcyBhbiBvbGRlciBYZW9uLCBGYW1pbHkgNiBhIG5ld2VyIG9uZQorCSAgKHRoaXMgcnVsZSBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyB0aGF0IHN1cHBvcnQgRU02NFQpCiAKIGNvbmZpZyBNQ09SRTIKIAlib29sICJJbnRlbCBDb3JlMiAvIG5ld2VyIFhlb24iCiAJaGVscAogCSAgT3B0aW1pemUgZm9yIEludGVsIENvcmUyIGFuZCBuZXdlciBYZW9ucyAoNTF4eCkKLQkgIFlvdSBjYW4gZGlzdGluZ3VzaCB0aGUgbmV3ZXIgWGVvbnMgZnJvbSB0aGUgb2xkZXIgb25lcyB1c2luZwotCSAgdGhlIGNwdSBmYW1pbHkgZmllbGQgaW4gL3Byb2MvY3B1aW5mby4gMTUgaXMgYSBvbGRlciBYZW9uCisJICBZb3UgY2FuIGRpc3Rpbmd1aXNoIHRoZSBuZXdlciBYZW9ucyBmcm9tIHRoZSBvbGRlciBvbmVzIHVzaW5nCisJICB0aGUgY3B1IGZhbWlseSBmaWVsZCBpbiAvcHJvYy9jcHVpbmZvLiAxNSBpcyBhbiBvbGRlciBYZW9uCiAJICAodXNlIENPTkZJR19NUFNDIHRoZW4pLCA2IGlzIGEgbmV3ZXIgb25lLiBUaGlzIHJ1bGUgb25seQogCSAgYXBwbGllcyB0byBDUFVzIHRoYXQgc3VwcG9ydCBFTTY0VC4KIApAQCAtNDU4LDggKzQ2Niw4IEBACiAJICBvbiBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDNHQi4gVGhpcyBpcyB1c3VhbGx5IG5lZWRlZCBmb3IgVVNCLAogCSAgc291bmQsIG1hbnkgSURFL1NBVEEgY2hpcHNldHMgYW5kIHNvbWUgb3RoZXIgZGV2aWNlcy4KIAkgIFByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgQU1EIEF0aGxvbjY0L09wdGVyb24vVHVyaW9uL1NlbXByb24gR0FSVAotCSAgYmFzZWQgSU9NTVUgYW5kIGEgc29mdHdhcmUgYm91bmNlIGJ1ZmZlciBiYXNlZCBJT01NVSB1c2VkIG9uIEludGVsCi0JICBzeXN0ZW1zIGFuZCBhcyBmYWxsYmFjay4KKwkgIGJhc2VkIGhhcmR3YXJlIElPTU1VIGFuZCBhIHNvZnR3YXJlIGJvdW5jZSBidWZmZXIgYmFzZWQgSU9NTVUgdXNlZAorCSAgb24gSW50ZWwgc3lzdGVtcyBhbmQgYXMgZmFsbGJhY2suCiAJICBUaGUgY29kZSBpcyBvbmx5IGFjdGl2ZSB3aGVuIG5lZWRlZCAoZW5vdWdoIG1lbW9yeSBhbmQgbGltaXRlZAogCSAgZGV2aWNlKSB1bmxlc3MgQ09ORklHX0lPTU1VX0RFQlVHIG9yIGlvbW11PWZvcmNlIGlzIHNwZWNpZmllZAogCSAgdG9vLgpAQCAtNDk2LDYgKzUwNCwxMiBAQAogIyBuZWVkIHRoaXMgYWx3YXlzIHNlbGVjdGVkIGJ5IElPTU1VIGZvciB0aGUgVklBIHdvcmthcm91bmQKIGNvbmZpZyBTV0lPVExCCiAJYm9vbAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHNvZnR3YXJlIGJvdW5jZSBidWZmZXJzIHVzZWQgb24geDg2LTY0IHN5c3RlbXMKKwkgIHdoaWNoIGRvbid0IGhhdmUgYSBoYXJkd2FyZSBJT01NVSAoZS5nLiB0aGUgY3VycmVudCBnZW5lcmF0aW9uCisJICBvZiBJbnRlbCdzIHg4Ni02NCBDUFVzKS4gVXNpbmcgdGhpcyBQQ0kgZGV2aWNlcyB3aGljaCBjYW4gb25seQorCSAgYWNjZXNzIDMyLWJpdHMgb2YgbWVtb3J5IGNhbiBiZSB1c2VkIG9uIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4KKwkgIDMgR0Igb2YgbWVtb3J5LiBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgWDg2X01DRQogCWJvb2wgIk1hY2hpbmUgY2hlY2sgc3VwcG9ydCIgaWYgRU1CRURERUQKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2RlZmNvbmZpZyBiL2FyY2gveDg2XzY0L2RlZmNvbmZpZwppbmRleCA2OTU4NGMyLi4yOTNhNGE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9kZWZjb25maWcKKysrIGIvYXJjaC94ODZfNjQvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjMwotIyBGcmkgSmFuICA1IDExOjU0OjQxIDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1naXQ4CisjIFR1ZSBGZWIgMTMgMTE6MjU6MTYgMjAwNwogIwogQ09ORklHX1g4Nl82ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtMTEsNiArMTEsNyBAQAogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfU0VNQVBIT1JFX1NMRUVQRVJTPXkKIENPTkZJR19NTVU9eQorQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKQEAgLTE1Myw2ICsxNTQsNyBAQAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQ9eQogQ09ORklHX09VVF9PRl9MSU5FX1BGTl9UT19QQUdFPXkKIENPTkZJR19OUl9DUFVTPTMyCkBAIC0yMDEsMTMgKzIwMywxNCBAQAogQ09ORklHX0FDUElfU0xFRVA9eQogQ09ORklHX0FDUElfU0xFRVBfUFJPQ19GUz15CiBDT05GSUdfQUNQSV9TTEVFUF9QUk9DX1NMRUVQPXkKK0NPTkZJR19BQ1BJX1BST0NGUz15CiBDT05GSUdfQUNQSV9BQz15CiBDT05GSUdfQUNQSV9CQVRURVJZPXkKIENPTkZJR19BQ1BJX0JVVFRPTj15Ci0jIENPTkZJR19BQ1BJX1ZJREVPIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDUElfSE9US0VZIGlzIG5vdCBzZXQKIENPTkZJR19BQ1BJX0ZBTj15CiAjIENPTkZJR19BQ1BJX0RPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9CQVkgaXMgbm90IHNldAogQ09ORklHX0FDUElfUFJPQ0VTU09SPXkKIENPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVPXkKIENPTkZJR19BQ1BJX1RIRVJNQUw9eQpAQCAtMjYzLDcgKzI2Niw2IEBACiBDT05GSUdfUENJRVBPUlRCVVM9eQogQ09ORklHX1BDSUVBRVI9eQogQ09ORklHX1BDSV9NU0k9eQotIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVF9JUlEgaXMgbm90IHNldAogCkBAIC0zOTgsNiArNDAwLDcgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2Niw2ICs0NjksNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVBQ1BJPXkKICMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKIAogIwpAQCAtNDk3LDYgKzUwMSw3IEBACiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUElJWD15CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNTA3LDYgKzUxMiw3IEBACiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQogIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0CkBAIC01OTksNiArNjA1LDcgQEAKICMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCiAjCiBDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9BSENJPXkKIENPTkZJR19TQVRBX1NWVz15CiBDT05GSUdfQVRBX1BJSVg9eQpAQCAtNjE0LDYgKzYyMSw3IEBACiAjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9WSUE9eQogIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAogQ09ORklHX1NBVEFfSU5URUxfQ09NQklORUQ9eQogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldApAQCAtNjMwLDYgKzYzOCw3IEBACiAjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldApAQCAtNjgyLDkgKzY5MSw3IEBACiAjIFN1YnN5c3RlbSBPcHRpb25zCiAjCiAjIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTRfT1VJX0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0X0VYVFJBX0NPTkZJR19ST01TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0X0VYUE9SVF9GVUxMX0FQSSBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTcwNyw2ICs3MTQsMTEgQEAKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAKICMKKyMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAorCisjCiAjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19ORVRERVZJQ0VTPXkKQEAgLTc3NCw2ICs3ODYsNyBAQAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTc5NSwxMSArODA4LDEzIEBACiBDT05GSUdfVElHT04zPXkKIENPTkZJR19CTlgyPXkKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiBDT05GSUdfUzJJTz1tCiAjIENPTkZJR19TMklPX05BUEkgaXMgbm90IHNldApAQCAtMTExNSw2ICsxMTMwLDcgQEAKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKIENPTkZJR19TT1VORF9QUklNRT15CitDT05GSUdfT0JTT0xFVEVfT1NTPXkKICMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0VTMTM3MSBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfSUNIPXkKQEAgLTExMjgsNiArMTE0NCw3IEBACiAjIEhJRCBEZXZpY2VzCiAjCiBDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHN1cHBvcnQKQEAgLTExNDIsMTAgKzExNTksOCBAQAogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE1NSw5ICsxMTcwLDExIEBACiAjIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTIwOCw2ICsxMjI1LDcgQEAKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dUQ08gaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTEzMTMsNiArMTMzMSwxMCBAQAogIwogCiAjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIwogIyBWaXJ0dWFsaXphdGlvbgogIwogIyBDT05GSUdfS1ZNIGlzIG5vdCBzZXQKQEAgLTE1MTIsNiArMTUzNCw3IEBACiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE4CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CkBAIC0xNTIwLDcgKzE1NDMsNiBAQAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CkBAIC0xNTYwLDQgKzE1ODIsNSBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1BMSVNUPXkKLUNPTkZJR19JT01BUF9DT1BZPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyX3NpZ25hbC5jIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX3NpZ25hbC5jCmluZGV4IGZmNDk5ZWYuLjM1OWVhY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9zaWduYWwuYworKysgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfc2lnbmFsLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KICNpbmNsdWRlIDxhc20vdWNvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CkBAIC00NDksNyArNDUwLDExIEBACiAKIAkvKiBSZXR1cm4gc3R1YiBpcyBpbiAzMmJpdCB2c3lzY2FsbCBwYWdlICovCiAJeyAKLQkJdm9pZCBfX3VzZXIgKnJlc3RvcmVyID0gVlNZU0NBTEwzMl9TSUdSRVRVUk47IAorCQl2b2lkIF9fdXNlciAqcmVzdG9yZXI7CisJCWlmIChjdXJyZW50LT5iaW5mbXQtPmhhc3Zkc28pCisJCQlyZXN0b3JlciA9IFZTWVNDQUxMMzJfU0lHUkVUVVJOOworCQllbHNlCisJCQlyZXN0b3JlciA9ICh2b2lkICopJmZyYW1lLT5yZXRjb2RlOwogCQlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpCiAJCQlyZXN0b3JlciA9IGthLT5zYS5zYV9yZXN0b3JlcjsgICAgICAgCiAJCWVyciB8PSBfX3B1dF91c2VyKHB0cl90b19jb21wYXQocmVzdG9yZXIpLCAmZnJhbWUtPnByZXRjb2RlKTsKQEAgLTQ5NSw3ICs1MDAsNyBAQAogCQlwdHJhY2Vfbm90aWZ5KFNJR1RSQVApOwogCiAjaWYgREVCVUdfU0lHCi0JcHJpbnRrKCJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lcCByYT0lcFxuIiwKKwlwcmludGsoIlNJRyBkZWxpdmVyICglczolZCk6IHNwPSVwIHBjPSVseCByYT0ldVxuIiwKIAkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBmcmFtZSwgcmVncy0+cmlwLCBmcmFtZS0+cHJldGNvZGUpOwogI2VuZGlmCiAKQEAgLTYwMSw3ICs2MDYsNyBAQAogCQlwdHJhY2Vfbm90aWZ5KFNJR1RSQVApOwogCiAjaWYgREVCVUdfU0lHCi0JcHJpbnRrKCJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lcCByYT0lcFxuIiwKKwlwcmludGsoIlNJRyBkZWxpdmVyICglczolZCk6IHNwPSVwIHBjPSVseCByYT0ldVxuIiwKIAkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBmcmFtZSwgcmVncy0+cmlwLCBmcmFtZS0+cHJldGNvZGUpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IDVmMzJjZjQuLmVkYTdhMGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyZW50cnkuUwpAQCAtNzE4LDQgKzcxOCw1IEBACiAJLnF1YWQgY29tcGF0X3N5c192bXNwbGljZQogCS5xdWFkIGNvbXBhdF9zeXNfbW92ZV9wYWdlcwogCS5xdWFkIHN5c19nZXRjcHUKKwkucXVhZCBzeXNfZXBvbGxfcHdhaXQKIGlhMzJfc3lzY2FsbF9lbmQ6CQkKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCAzYzdjYmZmLi5iYjQ3ZTg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogCQlwdHJhY2UubyB0aW1lLm8gaW9wb3J0Lm8gbGR0Lm8gc2V0dXAubyBpODI1OS5vIHN5c194ODZfNjQubyBcCiAJCXg4NjY0X2tzeW1zLm8gaTM4Ny5vIHN5c2NhbGwubyB2c3lzY2FsbC5vIFwKIAkJc2V0dXA2NC5vIGJvb3RmbGFnLm8gZTgyMC5vIHJlYm9vdC5vIHF1aXJrcy5vIGk4MjM3Lm8gXAotCQlwY2ktZG1hLm8gcGNpLW5vbW11Lm8gYWx0ZXJuYXRpdmUubworCQlwY2ktZG1hLm8gcGNpLW5vbW11Lm8gYWx0ZXJuYXRpdmUubyBocGV0Lm8gdHNjLm8KIAogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwogb2JqLSQoQ09ORklHX1g4Nl9NQ0UpCQkrPSBtY2UubyB0aGVybV90aHJvdC5vCkBAIC0xOSw3ICsxOSw3IEBACiBvYmotJChDT05GSUdfWDg2X01TUikJCSs9IG1zci5vCiBvYmotJChDT05GSUdfTUlDUk9DT0RFKQkJKz0gbWljcm9jb2RlLm8KIG9iai0kKENPTkZJR19YODZfQ1BVSUQpCQkrPSBjcHVpZC5vCi1vYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8gc21wYm9vdC5vIHRyYW1wb2xpbmUubworb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vIHNtcGJvb3QubyB0cmFtcG9saW5lLm8gdHNjX3N5bmMubwogb2JqLXkJCQkJKz0gYXBpYy5vICBubWkubwogb2JqLXkJCQkJKz0gaW9fYXBpYy5vIG1wcGFyc2UubyBcCiAJCWdlbmFwaWMubyBnZW5hcGljX2NsdXN0ZXIubyBnZW5hcGljX2ZsYXQubwpAQCAtNDMsNiArNDMsNyBAQAogCiBvYmoteQkJCQkrPSB0b3BvbG9neS5vCiBvYmoteQkJCQkrPSBpbnRlbF9jYWNoZWluZm8ubworb2JqLXkJCQkJKz0gcGNzcGVha2VyLm8KIAogQ0ZMQUdTX3ZzeXNjYWxsLm8JCTo9ICQoUFJPRklMSU5HKSAtZzAKIApAQCAtNTYsMyArNTcsNCBAQAogaTgyMzcteQkJCQkrPSAuLi8uLi9pMzg2L2tlcm5lbC9pODIzNy5vCiBtc3ItJChzdWJzdCBtLHksJChDT05GSUdfWDg2X01TUikpICArPSAuLi8uLi9pMzg2L2tlcm5lbC9tc3IubwogYWx0ZXJuYXRpdmUteQkJCSs9IC4uLy4uL2kzODYva2VybmVsL2FsdGVybmF0aXZlLm8KK3Bjc3BlYWtlci15CQkJKz0gLi4vLi4vaTM4Ni9rZXJuZWwvcGNzcGVha2VyLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9hY3BpL3NsZWVwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYWNwaS9zbGVlcC5jCmluZGV4IDVlYmY2MmMuLjIzMTc4Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9hY3BpL3NsZWVwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2FjcGkvc2xlZXAuYwpAQCAtNTgsNyArNTgsNyBAQAogdW5zaWduZWQgbG9uZyBhY3BpX3ZpZGVvX2ZsYWdzOwogZXh0ZXJuIGNoYXIgd2FrZXVwX3N0YXJ0LCB3YWtldXBfZW5kOwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBGQVNUQ0FMTChhY3BpX2NvcHlfd2FrZXVwX3JvdXRpbmUodW5zaWduZWQgbG9uZykpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYWNwaV9jb3B5X3dha2V1cF9yb3V0aW5lKHVuc2lnbmVkIGxvbmcpOwogCiBzdGF0aWMgcGdkX3QgbG93X3B0cjsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2FwaWMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGljLmMKaW5kZXggMTI0YjJkMi4uNzIzNDE3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2FwaWMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYXBpYy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vdGltZXguaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAKIGludCBhcGljX21hcHBlZDsKQEAgLTc2Myw3ICs3NjQsNyBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCS8qIHdhaXQgZm9yIGlycSBzbGljZSAqLwotIAlpZiAodnh0aW1lLmhwZXRfYWRkcmVzcyAmJiBocGV0X3VzZV90aW1lcikgeworIAlpZiAoaHBldF9hZGRyZXNzICYmIGhwZXRfdXNlX3RpbWVyKSB7CiAgCQlpbnQgdHJpZ2dlciA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DTVApOwogIAkJd2hpbGUgKGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKSA+PSB0cmlnZ2VyKQogIAkJCS8qIGRvIG5vdGhpbmcgKi8gOwpAQCAtNzg1LDcgKzc4Niw3IEBACiAJLyogVHVybiBvZmYgUElUIGludGVycnVwdCBpZiB3ZSB1c2UgQVBJQyB0aW1lciBhcyBtYWluIHRpbWVyLgogCSAgIE9ubHkgd29ya3Mgd2l0aCB0aGUgUE0gdGltZXIgcmlnaHQgbm93CiAJICAgVEJEIGZpeCBpdCBmb3IgSFBFVCB0b28uICovCi0JaWYgKHZ4dGltZS5tb2RlID09IFZYVElNRV9QTVRNUiAmJgorCWlmICgocG10bXJfaW9wb3J0ICE9IDApICYmCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSA9PSBib290X2NwdV9pZCAmJgogCQlhcGljX3J1bnNfbWFpbl90aW1lciA9PSAxICYmCiAJCSFjcHVfaXNzZXQoYm9vdF9jcHVfaWQsIHRpbWVyX2ludGVycnVwdF9icm9hZGNhc3RfaXBpX21hc2spKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwppbmRleCA2ZmUxOTFjLi40NjUxZmQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKQEAgLTgzLDYgKzgzLDEzIEBACiAJCXJldHVybiAxOwogCX0KIAorI2lmZGVmIENPTkZJR19OVU1BCisJLyogTlVNQSBtZW1vcnkgdG8gbm9kZSBtYXAgKi8KKwlpZiAobGFzdCA+PSBub2RlbWFwX2FkZHIgJiYgYWRkciA8IG5vZGVtYXBfYWRkciArIG5vZGVtYXBfc2l6ZSkgeworCQkqYWRkcnAgPSBub2RlbWFwX2FkZHIgKyBub2RlbWFwX3NpemU7CisJCXJldHVybiAxOworCX0KKyNlbmRpZgogCS8qIFhYWCByYW1kaXNrIGltYWdlIGhlcmU/ICovIAogCXJldHVybiAwOwogfSAKQEAgLTE4NCw2ICsxOTEsMzcgQEAKIH0KIAogLyoKKyAqIEZpbmQgdGhlIGhvbGUgc2l6ZSBpbiB0aGUgcmFuZ2UuCisgKi8KK3Vuc2lnbmVkIGxvbmcgX19pbml0IGU4MjBfaG9sZV9zaXplKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgcmFtID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CisJCXN0cnVjdCBlODIwZW50cnkgKmVpID0gJmU4MjAubWFwW2ldOworCQl1bnNpZ25lZCBsb25nIGxhc3QsIGFkZHI7CisKKwkJaWYgKGVpLT50eXBlICE9IEU4MjBfUkFNIHx8CisJCSAgICBlaS0+YWRkcitlaS0+c2l6ZSA8PSBzdGFydCB8fAorCQkgICAgZWktPmFkZHIgPj0gZW5kKQorCQkJY29udGludWU7CisKKwkJYWRkciA9IHJvdW5kX3VwKGVpLT5hZGRyLCBQQUdFX1NJWkUpOworCQlpZiAoYWRkciA8IHN0YXJ0KQorCQkJYWRkciA9IHN0YXJ0OworCisJCWxhc3QgPSByb3VuZF9kb3duKGVpLT5hZGRyICsgZWktPnNpemUsIFBBR0VfU0laRSk7CisJCWlmIChsYXN0ID49IGVuZCkKKwkJCWxhc3QgPSBlbmQ7CisKKwkJaWYgKGxhc3QgPiBhZGRyKQorCQkJcmFtICs9IGxhc3QgLSBhZGRyOworCX0KKwlyZXR1cm4gKChlbmQgLSBzdGFydCkgLSByYW0pOworfQorCisvKgogICogTWFyayBlODIwIHJlc2VydmVkIGFyZWFzIGFzIGJ1c3kgZm9yIHRoZSByZXNvdXJjZSBtYW5hZ2VyLgogICovCiB2b2lkIF9faW5pdCBlODIwX3Jlc2VydmVfcmVzb3VyY2VzKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHktcXVpcmtzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHktcXVpcmtzLmMKaW5kZXggYmQzMGQxMy4uODA0N2VhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5LXF1aXJrcy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseS1xdWlya3MuYwpAQCAtNTMsNyArNTMsOSBAQAogCQlyZXR1cm47CiAKIAludmlkaWFfaHBldF9kZXRlY3RlZCA9IDA7Ci0JYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19IUEVULCBudmlkaWFfaHBldF9jaGVjayk7CisJaWYgKGFjcGlfdGFibGVfcGFyc2UoQUNQSV9TSUdfSFBFVCwgbnZpZGlhX2hwZXRfY2hlY2spKQorCQlyZXR1cm47CisKIAlpZiAobnZpZGlhX2hwZXRfZGV0ZWN0ZWQgPT0gMCkgewogCQlhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUgPSAxOwogCQlwcmludGsoS0VSTl9JTkZPICJOdmlkaWEgYm9hcmQgIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2hlYWQuUyBiL2FyY2gveDg2XzY0L2tlcm5lbC9oZWFkLlMKaW5kZXggMWU2ZjgwOC4uNTk4YTRkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZC5TCkBAIC0xNjMsNiArMTYzLDIwIEBACiAJICovCiAJbGdkdAljcHVfZ2R0X2Rlc2NyCiAKKwkvKiBzZXQgdXAgZGF0YSBzZWdtZW50cy4gYWN0dWFsbHkgMCB3b3VsZCBkbyB0b28gKi8KKwltb3ZsICRfX0tFUk5FTF9EUywlZWF4CisJbW92bCAlZWF4LCVkcworCW1vdmwgJWVheCwlc3MKKwltb3ZsICVlYXgsJWVzCisKKwkvKgorCSAqIFdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGxvYWQgJWZzIG9yICVncywgYnV0IGxvYWQgdGhlbSBhbnl3YXkKKwkgKiB0byBraWxsIGFueSBzdGFsZSByZWFsbW9kZSBzZWxlY3RvcnMuICBUaGlzIGFsbG93cyBleGVjdXRpb24KKwkgKiB1bmRlciBWVCBoYXJkd2FyZS4KKwkgKi8KKwltb3ZsICVlYXgsJWZzCisJbW92bCAlZWF4LCVncworCiAJLyogCiAJICogU2V0dXAgdXAgYSBkdW1teSBQREEuIHRoaXMgaXMganVzdCBmb3Igc29tZSBlYXJseSBib290dXAgY29kZQogCSAqIHRoYXQgZG9lcyBpbl9pbnRlcnJ1cHQoKSAKQEAgLTE3MywxMiArMTg3LDYgQEAKIAlzaHJxCSQzMiwlcmR4CiAJd3Jtc3IJCiAKLQkvKiBzZXQgdXAgZGF0YSBzZWdtZW50cy4gYWN0dWFsbHkgMCB3b3VsZCBkbyB0b28gKi8KLQltb3ZsICRfX0tFUk5FTF9EUywlZWF4Ci0JbW92bCAlZWF4LCVkcwkKLQltb3ZsICVlYXgsJXNzCi0JbW92bCAlZWF4LCVlcwotCQkJCiAJLyogZXNpIGlzIHBvaW50ZXIgdG8gcmVhbCBtb2RlIHN0cnVjdHVyZSB3aXRoIGludGVyZXN0aW5nIGluZm8uCiAJICAgcGFzcyBpdCB0byBDICovCiAJbW92bAklZXNpLCAlZWRpCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaHBldC5jIGIvYXJjaC94ODZfNjQva2VybmVsL2hwZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWEwZWRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2hwZXQuYwpAQCAtMCwwICsxLDUxMSBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2hwZXQuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgorI2luY2x1ZGUgPGFzbS90aW1leC5oPgorI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CisKK2ludCBub2hwZXQgX19pbml0ZGF0YTsKKwordW5zaWduZWQgbG9uZyBocGV0X2FkZHJlc3M7Cit1bnNpZ25lZCBsb25nIGhwZXRfcGVyaW9kOwkvKiBmc2VjcyAvIEhQRVQgY2xvY2sgKi8KK3Vuc2lnbmVkIGxvbmcgaHBldF90aWNrOwkvKiBIUEVUIGNsb2NrcyAvIGludGVycnVwdCAqLworCitpbnQgaHBldF91c2VfdGltZXI7CQkvKiBVc2UgY291bnRlciBvZiBocGV0IGZvciB0aW1lIGtlZXBpbmcsCisJCQkJICogb3RoZXJ3aXNlIFBJVAorCQkJCSAqLworCisjaWZkZWYJQ09ORklHX0hQRVQKK3N0YXRpYyBfX2luaXQgaW50IGxhdGVfaHBldF9pbml0KHZvaWQpCit7CisJc3RydWN0IGhwZXRfZGF0YQloZDsKKwl1bnNpZ25lZCBpbnQgCQludGltZXI7CisKKwlpZiAoIWhwZXRfYWRkcmVzcykKKyAgICAgICAgCXJldHVybiAwOworCisJbWVtc2V0KCZoZCwgMCwgc2l6ZW9mKGhkKSk7CisKKwludGltZXIgPSBocGV0X3JlYWRsKEhQRVRfSUQpOworCW50aW1lciA9IChudGltZXIgJiBIUEVUX0lEX05VTUJFUikgPj4gSFBFVF9JRF9OVU1CRVJfU0hJRlQ7CisJbnRpbWVyKys7CisKKwkvKgorCSAqIFJlZ2lzdGVyIHdpdGggZHJpdmVyLgorCSAqIFRpbWVyMCBhbmQgVGltZXIxIGlzIHVzZWQgYnkgcGxhdGZvcm0uCisJICovCisJaGQuaGRfcGh5c19hZGRyZXNzID0gaHBldF9hZGRyZXNzOworCWhkLmhkX2FkZHJlc3MgPSAodm9pZCBfX2lvbWVtICopZml4X3RvX3ZpcnQoRklYX0hQRVRfQkFTRSk7CisJaGQuaGRfbmlycXMgPSBudGltZXI7CisJaGQuaGRfZmxhZ3MgPSBIUEVUX0RBVEFfUExBVEZPUk07CisJaHBldF9yZXNlcnZlX3RpbWVyKCZoZCwgMCk7CisjaWZkZWYJQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKKwlocGV0X3Jlc2VydmVfdGltZXIoJmhkLCAxKTsKKyNlbmRpZgorCWhkLmhkX2lycVswXSA9IEhQRVRfTEVHQUNZXzgyNTQ7CisJaGQuaGRfaXJxWzFdID0gSFBFVF9MRUdBQ1lfUlRDOworCWlmIChudGltZXIgPiAyKSB7CisJCXN0cnVjdCBocGV0CQkqaHBldDsKKwkJc3RydWN0IGhwZXRfdGltZXIJKnRpbWVyOworCQlpbnQJCQlpOworCisJCWhwZXQgPSAoc3RydWN0IGhwZXQgKikgZml4X3RvX3ZpcnQoRklYX0hQRVRfQkFTRSk7CisJCXRpbWVyID0gJmhwZXQtPmhwZXRfdGltZXJzWzJdOworCQlmb3IgKGkgPSAyOyBpIDwgbnRpbWVyOyB0aW1lcisrLCBpKyspCisJCQloZC5oZF9pcnFbaV0gPSAodGltZXItPmhwZXRfY29uZmlnICYKKwkJCQkJVG5fSU5UX1JPVVRFX0NORl9NQVNLKSA+PgorCQkJCVRuX0lOVF9ST1VURV9DTkZfU0hJRlQ7CisKKwl9CisKKwlocGV0X2FsbG9jKCZoZCk7CisJcmV0dXJuIDA7Cit9Citmc19pbml0Y2FsbChsYXRlX2hwZXRfaW5pdCk7CisjZW5kaWYKKworaW50IGhwZXRfdGltZXJfc3RvcF9zZXRfZ28odW5zaWduZWQgbG9uZyB0aWNrKQoreworCXVuc2lnbmVkIGludCBjZmc7CisKKy8qCisgKiBTdG9wIHRoZSB0aW1lcnMgYW5kIHJlc2V0IHRoZSBtYWluIGNvdW50ZXIuCisgKi8KKworCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9DRkcpOworCWNmZyAmPSB+KEhQRVRfQ0ZHX0VOQUJMRSB8IEhQRVRfQ0ZHX0xFR0FDWSk7CisJaHBldF93cml0ZWwoY2ZnLCBIUEVUX0NGRyk7CisJaHBldF93cml0ZWwoMCwgSFBFVF9DT1VOVEVSKTsKKwlocGV0X3dyaXRlbCgwLCBIUEVUX0NPVU5URVIgKyA0KTsKKworLyoKKyAqIFNldCB1cCB0aW1lciAwLCBhcyBwZXJpb2RpYyB3aXRoIGZpcnN0IGludGVycnVwdCB0byBoYXBwZW4gYXQgaHBldF90aWNrLAorICogYW5kIHBlcmlvZCBhbHNvIGhwZXRfdGljay4KKyAqLworCWlmIChocGV0X3VzZV90aW1lcikgeworCQlocGV0X3dyaXRlbChIUEVUX1ROX0VOQUJMRSB8IEhQRVRfVE5fUEVSSU9ESUMgfCBIUEVUX1ROX1NFVFZBTCB8CisJCSAgICBIUEVUX1ROXzMyQklULCBIUEVUX1QwX0NGRyk7CisJCWhwZXRfd3JpdGVsKGhwZXRfdGljaywgSFBFVF9UMF9DTVApOyAvKiBuZXh0IGludGVycnVwdCAqLworCQlocGV0X3dyaXRlbChocGV0X3RpY2ssIEhQRVRfVDBfQ01QKTsgLyogcGVyaW9kICovCisJCWNmZyB8PSBIUEVUX0NGR19MRUdBQ1k7CisJfQorLyoKKyAqIEdvIQorICovCisKKwljZmcgfD0gSFBFVF9DRkdfRU5BQkxFOworCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9DRkcpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBocGV0X2FyY2hfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpZDsKKworCWlmICghaHBldF9hZGRyZXNzKQorCQlyZXR1cm4gLTE7CisJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9IUEVUX0JBU0UsIGhwZXRfYWRkcmVzcyk7CisJX19zZXRfZml4bWFwKFZTWVNDQUxMX0hQRVQsIGhwZXRfYWRkcmVzcywgUEFHRV9LRVJORUxfVlNZU0NBTExfTk9DQUNIRSk7CisKKy8qCisgKiBSZWFkIHRoZSBwZXJpb2QsIGNvbXB1dGUgdGljayBhbmQgcXVvdGllbnQuCisgKi8KKworCWlkID0gaHBldF9yZWFkbChIUEVUX0lEKTsKKworCWlmICghKGlkICYgSFBFVF9JRF9WRU5ET1IpIHx8ICEoaWQgJiBIUEVUX0lEX05VTUJFUikpCisJCXJldHVybiAtMTsKKworCWhwZXRfcGVyaW9kID0gaHBldF9yZWFkbChIUEVUX1BFUklPRCk7CisJaWYgKGhwZXRfcGVyaW9kIDwgMTAwMDAwIHx8IGhwZXRfcGVyaW9kID4gMTAwMDAwMDAwKQorCQlyZXR1cm4gLTE7CisKKwlocGV0X3RpY2sgPSAoRlNFQ19QRVJfVElDSyArIGhwZXRfcGVyaW9kIC8gMikgLyBocGV0X3BlcmlvZDsKKworCWhwZXRfdXNlX3RpbWVyID0gKGlkICYgSFBFVF9JRF9MRUdTVVApOworCisJcmV0dXJuIGhwZXRfdGltZXJfc3RvcF9zZXRfZ28oaHBldF90aWNrKTsKK30KKworaW50IGhwZXRfcmVlbmFibGUodm9pZCkKK3sKKwlyZXR1cm4gaHBldF90aW1lcl9zdG9wX3NldF9nbyhocGV0X3RpY2spOworfQorCisvKgorICogY2FsaWJyYXRlX3RzYygpIGNhbGlicmF0ZXMgdGhlIHByb2Nlc3NvciBUU0MgaW4gYSB2ZXJ5IHNpbXBsZSB3YXksIGNvbXBhcmluZworICogaXQgdG8gdGhlIEhQRVQgdGltZXIgb2Yga25vd24gZnJlcXVlbmN5LgorICovCisKKyNkZWZpbmUgVElDS19DT1VOVCAxMDAwMDAwMDAKKyNkZWZpbmUgVElDS19NSU4gICA1MDAwCisKKy8qCisgKiBTb21lIHBsYXRmb3JtcyB0YWtlIHBlcmlvZGljIFNNSSBpbnRlcnJ1cHRzIHdpdGggNW1zIGR1cmF0aW9uLiBNYWtlIHN1cmUgbm9uZQorICogb2NjdXJzIGJldHdlZW4gdGhlIHJlYWRzIG9mIHRoZSBocGV0ICYgVFNDLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcmVhZF9ocGV0X3RzYyhpbnQgKmhwZXQsIGludCAqdHNjKQoreworCWludCB0c2MxLCB0c2MyLCBocGV0MTsKKworCWRvIHsKKwkJdHNjMSA9IGdldF9jeWNsZXNfc3luYygpOworCQlocGV0MSA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKKwkJdHNjMiA9IGdldF9jeWNsZXNfc3luYygpOworCX0gd2hpbGUgKHRzYzIgLSB0c2MxID4gVElDS19NSU4pOworCSpocGV0ID0gaHBldDE7CisJKnRzYyA9IHRzYzI7Cit9CisKK3Vuc2lnbmVkIGludCBfX2luaXQgaHBldF9jYWxpYnJhdGVfdHNjKHZvaWQpCit7CisJaW50IHRzY19zdGFydCwgaHBldF9zdGFydDsKKwlpbnQgdHNjX25vdywgaHBldF9ub3c7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXJlYWRfaHBldF90c2MoJmhwZXRfc3RhcnQsICZ0c2Nfc3RhcnQpOworCisJZG8geworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlyZWFkX2hwZXRfdHNjKCZocGV0X25vdywgJnRzY19ub3cpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfSB3aGlsZSAoKHRzY19ub3cgLSB0c2Nfc3RhcnQpIDwgVElDS19DT1VOVCAmJgorCQkoaHBldF9ub3cgLSBocGV0X3N0YXJ0KSA8IFRJQ0tfQ09VTlQpOworCisJcmV0dXJuICh0c2Nfbm93IC0gdHNjX3N0YXJ0KSAqIDEwMDAwMDAwMDBMCisJCS8gKChocGV0X25vdyAtIGhwZXRfc3RhcnQpICogaHBldF9wZXJpb2QgLyAxMDAwKTsKK30KKworI2lmZGVmIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDCisvKiBIUEVUIGluIExlZ2FjeVJlcGxhY2VtZW50IE1vZGUgZWF0cyB1cCBSVEMgaW50ZXJydXB0IGxpbmUuIFdoZW4sIEhQRVQKKyAqIGlzIGVuYWJsZWQsIHdlIHN1cHBvcnQgUlRDIGludGVycnVwdCBmdW5jdGlvbmFsaXR5IGluIHNvZnR3YXJlLgorICogUlRDIGhhcyAzIGtpbmRzIG9mIGludGVycnVwdHM6CisgKiAxKSBVcGRhdGUgSW50ZXJydXB0IC0gZ2VuZXJhdGUgYW4gaW50ZXJydXB0LCBldmVyeSBzZWMsIHdoZW4gUlRDIGNsb2NrCisgKiAgICBpcyB1cGRhdGVkCisgKiAyKSBBbGFybSBJbnRlcnJ1cHQgLSBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgYXQgYSBzcGVjaWZpYyB0aW1lIG9mIGRheQorICogMykgUGVyaW9kaWMgSW50ZXJydXB0IC0gZ2VuZXJhdGUgcGVyaW9kaWMgaW50ZXJydXB0LCB3aXRoIGZyZXF1ZW5jaWVzCisgKiAgICAySHotODE5Mkh6ICgySHotNjRIeiBmb3Igbm9uLXJvb3QgdXNlcikgKGFsbCBmcmVxcyBpbiBwb3dlcnMgb2YgMikKKyAqICgxKSBhbmQgKDIpIGFib3ZlIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBwb2xsaW5nIGF0IGEgZnJlcXVlbmN5IG9mCisgKiA2NCBIei4gVGhlIGV4YWN0IGZyZXF1ZW5jeSBpcyBhIHRyYWRlb2ZmIGJldHdlZW4gYWNjdXJhY3kgYW5kIGludGVycnVwdAorICogb3ZlcmhlYWQuIChERUZBVUxUX1JUQ19JTlRfRlJFUSkKKyAqIEZvciAoMyksIHdlIHVzZSBpbnRlcnJ1cHRzIGF0IDY0SHogb3IgdXNlciBzcGVjaWZpZWQgcGVyaW9kaWMKKyAqIGZyZXF1ZW5jeSwgd2hpY2hldmVyIGlzIGhpZ2hlci4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorCisjZGVmaW5lIERFRkFVTFRfUlRDX0lOVF9GUkVRIAk2NAorI2RlZmluZSBSVENfTlVNX0lOVFMgCQkxCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIFVJRV9vbjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHByZXZfdXBkYXRlX3NlYzsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgQUlFX29uOworc3RhdGljIHN0cnVjdCBydGNfdGltZSBhbGFybV90aW1lOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBQSUVfb247CitzdGF0aWMgdW5zaWduZWQgbG9uZyBQSUVfZnJlcSA9IERFRkFVTFRfUlRDX0lOVF9GUkVROworc3RhdGljIHVuc2lnbmVkIGxvbmcgUElFX2NvdW50OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBocGV0X3J0Y19pbnRfZnJlcTsgLyogUlRDIGludGVycnVwdCBmcmVxdWVuY3kgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaHBldF90MV9jbXA7IC8qIGNhY2hlZCBjb21wYXJhdG9yIHJlZ2lzdGVyICovCisKK2ludCBpc19ocGV0X2VuYWJsZWQodm9pZCkKK3sKKwlyZXR1cm4gaHBldF9hZGRyZXNzICE9IDA7Cit9CisKKy8qCisgKiBUaW1lciAxIGZvciBSVEMsIHdlIGRvIG5vdCB1c2UgcGVyaW9kaWMgaW50ZXJydXB0IGZlYXR1cmUsCisgKiBldmVuIGlmIEhQRVQgc3VwcG9ydHMgcGVyaW9kaWMgaW50ZXJydXB0cyBvbiBUaW1lciAxLgorICogVGhlIHJlYXNvbiBiZWluZywgdG8gc2V0IHVwIGEgcGVyaW9kaWMgaW50ZXJydXB0IGluIEhQRVQsIHdlIG5lZWQgdG8KKyAqIHN0b3AgdGhlIG1haW4gY291bnRlci4gQW5kIGlmIHdlIGRvIHRoYXQgZXZlcnl0aW1lIHNvbWVvbmUgZGlhYmxlcy9lbmFibGVzCisgKiBSVEMsIHdlIHdpbGwgaGF2ZSBhZHZlcnNlIGVmZmVjdCBvbiBtYWluIGtlcm5lbCB0aW1lciBydW5uaW5nIG9uIFRpbWVyIDAuCisgKiBTbywgZm9yIHRoZSB0aW1lIGJlaW5nLCBzaW11bGF0ZSB0aGUgcGVyaW9kaWMgaW50ZXJydXB0IGluIHNvZnR3YXJlLgorICoKKyAqIGhwZXRfcnRjX3RpbWVyX2luaXQoKSBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGFuZCBkdXJpbmcgc3Vic2VxdWVudAorICogaW50ZXJ1cHB0cyByZWluaXQgaGFwcGVucyB0aHJvdWdoIGhwZXRfcnRjX3RpbWVyX3JlaW5pdCgpLgorICovCitpbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBjZmcsIGNudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBTZXQgdGhlIGNvdW50ZXIgMSBhbmQgZW5hYmxlIHRoZSBpbnRlcnJ1cHRzLgorCSAqLworCWlmIChQSUVfb24gJiYgKFBJRV9mcmVxID4gREVGQVVMVF9SVENfSU5UX0ZSRVEpKQorCQlocGV0X3J0Y19pbnRfZnJlcSA9IFBJRV9mcmVxOworCWVsc2UKKwkJaHBldF9ydGNfaW50X2ZyZXEgPSBERUZBVUxUX1JUQ19JTlRfRlJFUTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNudCA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKKwljbnQgKz0gKChocGV0X3RpY2sqSFopL2hwZXRfcnRjX2ludF9mcmVxKTsKKwlocGV0X3dyaXRlbChjbnQsIEhQRVRfVDFfQ01QKTsKKwlocGV0X3QxX2NtcCA9IGNudDsKKworCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9UMV9DRkcpOworCWNmZyAmPSB+SFBFVF9UTl9QRVJJT0RJQzsKKwljZmcgfD0gSFBFVF9UTl9FTkFCTEUgfCBIUEVUX1ROXzMyQklUOworCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMV9DRkcpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGhwZXRfcnRjX3RpbWVyX3JlaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBjZmcsIGNudCwgdGlja3NfcGVyX2ludCwgbG9zdF9pbnRzOworCisJaWYgKHVubGlrZWx5KCEoUElFX29uIHwgQUlFX29uIHwgVUlFX29uKSkpIHsKKwkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1QxX0NGRyk7CisJCWNmZyAmPSB+SFBFVF9UTl9FTkFCTEU7CisJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMV9DRkcpOworCQlyZXR1cm47CisJfQorCisJaWYgKFBJRV9vbiAmJiAoUElFX2ZyZXEgPiBERUZBVUxUX1JUQ19JTlRfRlJFUSkpCisJCWhwZXRfcnRjX2ludF9mcmVxID0gUElFX2ZyZXE7CisJZWxzZQorCQlocGV0X3J0Y19pbnRfZnJlcSA9IERFRkFVTFRfUlRDX0lOVF9GUkVROworCisJLyogSXQgaXMgbW9yZSBhY2N1cmF0ZSB0byB1c2UgdGhlIGNvbXBhcmF0b3IgdmFsdWUgdGhhbiBjdXJyZW50IGNvdW50LiovCisJdGlja3NfcGVyX2ludCA9IGhwZXRfdGljayAqIEhaIC8gaHBldF9ydGNfaW50X2ZyZXE7CisJaHBldF90MV9jbXAgKz0gdGlja3NfcGVyX2ludDsKKwlocGV0X3dyaXRlbChocGV0X3QxX2NtcCwgSFBFVF9UMV9DTVApOworCisJLyoKKwkgKiBJZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRlbGF5ZWQgdG9vIGxvbmcsIHRoZSB3cml0ZSBhYm92ZSB0cmllcworCSAqIHRvIHNjaGVkdWxlIHRoZSBuZXh0IGludGVycnVwdCBpbiB0aGUgcGFzdCBhbmQgdGhlIGhhcmR3YXJlIHdvdWxkCisJICogbm90IGludGVycnVwdCB1bnRpbCB0aGUgY291bnRlciBoYWQgd3JhcHBlZCBhcm91bmQuCisJICogU28gd2UgaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBjb21wYXJhdG9yIHdhc24ndCBzZXQgdG8gYSBwYXN0IHRpbWUuCisJICovCisJY250ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOworCWlmICh1bmxpa2VseSgoaW50KShjbnQgLSBocGV0X3QxX2NtcCkgPiAwKSkgeworCQlsb3N0X2ludHMgPSAoY250IC0gaHBldF90MV9jbXApIC8gdGlja3NfcGVyX2ludCArIDE7CisJCS8qIE1ha2Ugc3VyZSB0aGF0LCBldmVuIHdpdGggdGhlIHRpbWUgbmVlZGVkIHRvIGV4ZWN1dGUKKwkJICogdGhpcyBjb2RlLCB0aGUgbmV4dCBzY2hlZHVsZWQgaW50ZXJydXB0IGhhcyBiZWVuIG1vdmVkCisJCSAqIGJhY2sgdG8gdGhlIGZ1dHVyZTogKi8KKwkJbG9zdF9pbnRzKys7CisKKwkJaHBldF90MV9jbXAgKz0gbG9zdF9pbnRzICogdGlja3NfcGVyX2ludDsKKwkJaHBldF93cml0ZWwoaHBldF90MV9jbXAsIEhQRVRfVDFfQ01QKTsKKworCQlpZiAoUElFX29uKQorCQkJUElFX2NvdW50ICs9IGxvc3RfaW50czsKKworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicnRjOiBsb3N0IHNvbWUgaW50ZXJydXB0cyBhdCAlbGRIei5cbiIsCisJCQkgICAgICAgaHBldF9ydGNfaW50X2ZyZXEpOworCX0KK30KKworLyoKKyAqIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGNhbGxlZCBmcm9tIHJ0YyBkcml2ZXIuCisgKiBSZXR1cm4gMCBpZiBIUEVUIGlzIG5vdCBiZWluZyB1c2VkLgorICogT3RoZXJ3aXNlIGRvIHRoZSBuZWNlc3NhcnkgY2hhbmdlcyBhbmQgcmV0dXJuIDEuCisgKi8KK2ludCBocGV0X21hc2tfcnRjX2lycV9iaXQodW5zaWduZWQgbG9uZyBiaXRfbWFzaykKK3sKKwlpZiAoIWlzX2hwZXRfZW5hYmxlZCgpKQorCQlyZXR1cm4gMDsKKworCWlmIChiaXRfbWFzayAmIFJUQ19VSUUpCisJCVVJRV9vbiA9IDA7CisJaWYgKGJpdF9tYXNrICYgUlRDX1BJRSkKKwkJUElFX29uID0gMDsKKwlpZiAoYml0X21hc2sgJiBSVENfQUlFKQorCQlBSUVfb24gPSAwOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBocGV0X3NldF9ydGNfaXJxX2JpdCh1bnNpZ25lZCBsb25nIGJpdF9tYXNrKQoreworCWludCB0aW1lcl9pbml0X3JlcWQgPSAwOworCisJaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShQSUVfb24gfCBBSUVfb24gfCBVSUVfb24pKQorCQl0aW1lcl9pbml0X3JlcWQgPSAxOworCisJaWYgKGJpdF9tYXNrICYgUlRDX1VJRSkgeworCQlVSUVfb24gPSAxOworCX0KKwlpZiAoYml0X21hc2sgJiBSVENfUElFKSB7CisJCVBJRV9vbiA9IDE7CisJCVBJRV9jb3VudCA9IDA7CisJfQorCWlmIChiaXRfbWFzayAmIFJUQ19BSUUpIHsKKwkJQUlFX29uID0gMTsKKwl9CisKKwlpZiAodGltZXJfaW5pdF9yZXFkKQorCQlocGV0X3J0Y190aW1lcl9pbml0KCk7CisKKwlyZXR1cm4gMTsKK30KKworaW50IGhwZXRfc2V0X2FsYXJtX3RpbWUodW5zaWduZWQgY2hhciBocnMsIHVuc2lnbmVkIGNoYXIgbWluLCB1bnNpZ25lZCBjaGFyIHNlYykKK3sKKwlpZiAoIWlzX2hwZXRfZW5hYmxlZCgpKQorCQlyZXR1cm4gMDsKKworCWFsYXJtX3RpbWUudG1faG91ciA9IGhyczsKKwlhbGFybV90aW1lLnRtX21pbiA9IG1pbjsKKwlhbGFybV90aW1lLnRtX3NlYyA9IHNlYzsKKworCXJldHVybiAxOworfQorCitpbnQgaHBldF9zZXRfcGVyaW9kaWNfZnJlcSh1bnNpZ25lZCBsb25nIGZyZXEpCit7CisJaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKKwkJcmV0dXJuIDA7CisKKwlQSUVfZnJlcSA9IGZyZXE7CisJUElFX2NvdW50ID0gMDsKKworCXJldHVybiAxOworfQorCitpbnQgaHBldF9ydGNfZHJvcHBlZF9pcnEodm9pZCkKK3sKKwlpZiAoIWlzX2hwZXRfZW5hYmxlZCgpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitpcnFyZXR1cm5fdCBocGV0X3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcnRjX3RpbWUgY3Vycl90aW1lOworCXVuc2lnbmVkIGxvbmcgcnRjX2ludF9mbGFnID0gMDsKKwlpbnQgY2FsbF9ydGNfaW50ZXJydXB0ID0gMDsKKworCWhwZXRfcnRjX3RpbWVyX3JlaW5pdCgpOworCisJaWYgKFVJRV9vbiB8IEFJRV9vbikgeworCQlydGNfZ2V0X3J0Y190aW1lKCZjdXJyX3RpbWUpOworCX0KKwlpZiAoVUlFX29uKSB7CisJCWlmIChjdXJyX3RpbWUudG1fc2VjICE9IHByZXZfdXBkYXRlX3NlYykgeworCQkJLyogU2V0IHVwZGF0ZSBpbnQgaW5mbywgY2FsbCByZWFsIHJ0YyBpbnQgcm91dGluZSAqLworCQkJY2FsbF9ydGNfaW50ZXJydXB0ID0gMTsKKwkJCXJ0Y19pbnRfZmxhZyA9IFJUQ19VRjsKKwkJCXByZXZfdXBkYXRlX3NlYyA9IGN1cnJfdGltZS50bV9zZWM7CisJCX0KKwl9CisJaWYgKFBJRV9vbikgeworCQlQSUVfY291bnQrKzsKKwkJaWYgKFBJRV9jb3VudCA+PSBocGV0X3J0Y19pbnRfZnJlcS9QSUVfZnJlcSkgeworCQkJLyogU2V0IHBlcmlvZGljIGludCBpbmZvLCBjYWxsIHJlYWwgcnRjIGludCByb3V0aW5lICovCisJCQljYWxsX3J0Y19pbnRlcnJ1cHQgPSAxOworCQkJcnRjX2ludF9mbGFnIHw9IFJUQ19QRjsKKwkJCVBJRV9jb3VudCA9IDA7CisJCX0KKwl9CisJaWYgKEFJRV9vbikgeworCQlpZiAoKGN1cnJfdGltZS50bV9zZWMgPT0gYWxhcm1fdGltZS50bV9zZWMpICYmCisJCSAgICAoY3Vycl90aW1lLnRtX21pbiA9PSBhbGFybV90aW1lLnRtX21pbikgJiYKKwkJICAgIChjdXJyX3RpbWUudG1faG91ciA9PSBhbGFybV90aW1lLnRtX2hvdXIpKSB7CisJCQkvKiBTZXQgYWxhcm0gaW50IGluZm8sIGNhbGwgcmVhbCBydGMgaW50IHJvdXRpbmUgKi8KKwkJCWNhbGxfcnRjX2ludGVycnVwdCA9IDE7CisJCQlydGNfaW50X2ZsYWcgfD0gUlRDX0FGOworCQl9CisJfQorCWlmIChjYWxsX3J0Y19pbnRlcnJ1cHQpIHsKKwkJcnRjX2ludF9mbGFnIHw9IChSVENfSVJRRiB8IChSVENfTlVNX0lOVFMgPDwgOCkpOworCQlydGNfaW50ZXJydXB0KHJ0Y19pbnRfZmxhZywgZGV2X2lkKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IG5vaHBldF9zZXR1cChjaGFyICpzKQoreworCW5vaHBldCA9IDE7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoIm5vaHBldCIsIG5vaHBldF9zZXR1cCk7CisKKyNkZWZpbmUgSFBFVF9NQVNLCTB4RkZGRkZGRkYKKyNkZWZpbmUgSFBFVF9TSElGVAkyMgorCisvKiBGU0VDID0gMTBeLTE1IE5TRUMgPSAxMF4tOSAqLworI2RlZmluZSBGU0VDX1BFUl9OU0VDCTEwMDAwMDAKKworc3RhdGljIHZvaWQgKmhwZXRfcHRyOworCitzdGF0aWMgY3ljbGVfdCByZWFkX2hwZXQodm9pZCkKK3sKKwlyZXR1cm4gKGN5Y2xlX3QpcmVhZGwoaHBldF9wdHIpOworfQorCitzdGF0aWMgY3ljbGVfdCBfX3ZzeXNjYWxsX2ZuIHZyZWFkX2hwZXQodm9pZCkKK3sKKwlyZXR1cm4gcmVhZGwoKHZvaWQgX19pb21lbSAqKWZpeF90b192aXJ0KFZTWVNDQUxMX0hQRVQpICsgMHhmMCk7Cit9CisKK3N0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9ocGV0ID0geworCS5uYW1lCQk9ICJocGV0IiwKKwkucmF0aW5nCQk9IDI1MCwKKwkucmVhZAkJPSByZWFkX2hwZXQsCisJLm1hc2sJCT0gKGN5Y2xlX3QpSFBFVF9NQVNLLAorCS5tdWx0CQk9IDAsIC8qIHNldCBiZWxvdyAqLworCS5zaGlmdAkJPSBIUEVUX1NISUZULAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKKwkudnJlYWQJCT0gdnJlYWRfaHBldCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfaHBldF9jbG9ja3NvdXJjZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaHBldF9wZXJpb2Q7CisJdm9pZCBfX2lvbWVtICpocGV0X2Jhc2U7CisJdTY0IHRtcDsKKworCWlmICghaHBldF9hZGRyZXNzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGNhbGN1bGF0ZSB0aGUgaHBldCBhZGRyZXNzOiAqLworCWhwZXRfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShocGV0X2FkZHJlc3MsIEhQRVRfTU1BUF9TSVpFKTsKKwlocGV0X3B0ciA9IGhwZXRfYmFzZSArIEhQRVRfQ09VTlRFUjsKKworCS8qIGNhbGN1bGF0ZSB0aGUgZnJlcXVlbmN5OiAqLworCWhwZXRfcGVyaW9kID0gcmVhZGwoaHBldF9iYXNlICsgSFBFVF9QRVJJT0QpOworCisJLyoKKwkgKiBocGV0IHBlcmlvZCBpcyBpbiBmZW10byBzZWNvbmRzIHBlciBjeWNsZQorCSAqIHNvIHdlIG5lZWQgdG8gY29udmVydCB0aGlzIHRvIG5zL2N5YyB1bml0cworCSAqIGFwcm94aW1hdGVkIGJ5IG11bHQvMl5zaGlmdAorCSAqCisJICogIGZzZWMvY3ljICogMW5zZWMvMTAwMDAwMGZzZWMgPSBuc2VjL2N5YyA9IG11bHQvMl5zaGlmdAorCSAqICBmc2VjL2N5YyAqIDFucy8xMDAwMDAwZnNlYyAqIDJec2hpZnQgPSBtdWx0CisJICogIGZzZWMvY3ljICogMl5zaGlmdCAqIDFuc2VjLzEwMDAwMDBmc2VjID0gbXVsdAorCSAqICAoZnNlYy9jeWMgPDwgc2hpZnQpLzEwMDAwMDAgPSBtdWx0CisJICogIChocGV0X3BlcmlvZCA8PCBzaGlmdCkvRlNFQ19QRVJfTlNFQyA9IG11bHQKKwkgKi8KKwl0bXAgPSAodTY0KWhwZXRfcGVyaW9kIDw8IEhQRVRfU0hJRlQ7CisJZG9fZGl2KHRtcCwgRlNFQ19QRVJfTlNFQyk7CisJY2xvY2tzb3VyY2VfaHBldC5tdWx0ID0gKHUzMil0bXA7CisKKwlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2hwZXQpOworfQorCittb2R1bGVfaW5pdChpbml0X2hwZXRfY2xvY2tzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2k4MjU5LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaTgyNTkuYwppbmRleCBkNzNjNzllLi4wMWUyY2YwIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaTgyNTkuYwpAQCAtMTAzLDYgKzEwMyw3IEBACiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGk4MjU5QV9jaGlwID0gewogCS5uYW1lCQk9ICJYVC1QSUMiLAogCS5tYXNrCQk9IGRpc2FibGVfODI1OUFfaXJxLAorCS5kaXNhYmxlCT0gZGlzYWJsZV84MjU5QV9pcnEsCiAJLnVubWFzawkJPSBlbmFibGVfODI1OUFfaXJxLAogCS5tYXNrX2Fjawk9IG1hc2tfYW5kX2Fja184MjU5QSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jIGIvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYwppbmRleCA2YmU2NzMwLi45NTA2ODJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKQEAgLTgxMCwxMSArODEwLDkgQEAKIAkJCXRyaWdnZXIgPT0gSU9BUElDX0xFVkVMKQogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLCAiZmFzdGVvaSIpOwotCWVsc2UgewotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyB8PSBJUlFfREVMQVlFRF9ESVNBQkxFOworCWVsc2UKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCiAJCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQl9CiB9CiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQ19pcnEoaW50IGFwaWMsIGludCBwaW4sIGludCBpZHgsIGludCBpcnEpCiB7CkBAIC04MzEsNyArODI5LDcgQEAKIAllbnRyeS5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7CiAJZW50cnkuZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKIAllbnRyeS5tYXNrID0gMDsJCQkJLyogZW5hYmxlIElSUSAqLwotCWVudHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOworCWVudHJ5LmRlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwogCiAJZW50cnkudHJpZ2dlciA9IGlycV90cmlnZ2VyKGlkeCk7CiAJZW50cnkucG9sYXJpdHkgPSBpcnFfcG9sYXJpdHkoaWR4KTsKQEAgLTgzOSw3ICs4MzcsNyBAQAogCWlmIChpcnFfdHJpZ2dlcihpZHgpKSB7CiAJCWVudHJ5LnRyaWdnZXIgPSAxOwogCQllbnRyeS5tYXNrID0gMTsKLQkJZW50cnkuZGVzdC5sb2dpY2FsLmxvZ2ljYWxfZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7CisJCWVudHJ5LmRlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwogCX0KIAogCWlmICghYXBpYyAmJiAhSU9fQVBJQ19JUlEoaXJxKSkKQEAgLTg1MSw3ICs4NDksNyBAQAogCQlpZiAodmVjdG9yIDwgMCkKIAkJCXJldHVybjsKIAotCQllbnRyeS5kZXN0LmxvZ2ljYWwubG9naWNhbF9kZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKG1hc2spOworCQllbnRyeS5kZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKG1hc2spOwogCQllbnRyeS52ZWN0b3IgPSB2ZWN0b3I7CiAKIAkJaW9hcGljX3JlZ2lzdGVyX2ludHIoaXJxLCB2ZWN0b3IsIElPQVBJQ19BVVRPKTsKQEAgLTkyMCw3ICs5MTgsNyBAQAogCSAqLwogCWVudHJ5LmRlc3RfbW9kZSA9IElOVF9ERVNUX01PREU7CiAJZW50cnkubWFzayA9IDA7CQkJCQkvKiB1bm1hc2sgSVJRIG5vdyAqLwotCWVudHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOworCWVudHJ5LmRlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwogCWVudHJ5LmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKIAllbnRyeS5wb2xhcml0eSA9IDA7CiAJZW50cnkudHJpZ2dlciA9IDA7CkBAIC0xMDIwLDE4ICsxMDE4LDE3IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiBJUlEgcmVkaXJlY3Rpb24gdGFibGU6XG4iKTsKIAotCXByaW50ayhLRVJOX0RFQlVHICIgTlIgTG9nIFBoeSBNYXNrIFRyaWcgSVJSIFBvbCIKLQkJCSAgIiBTdGF0IERlc3QgRGVsaSBWZWN0OiAgIFxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiBOUiBEc3QgTWFzayBUcmlnIElSUiBQb2wiCisJCQkgICIgU3RhdCBEbW9kIERlbGkgVmVjdDogICBcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8PSByZWdfMDEuYml0cy5lbnRyaWVzOyBpKyspIHsKIAkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CiAKIAkJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBpKTsKIAotCQlwcmludGsoS0VSTl9ERUJVRyAiICUwMnggJTAzWCAlMDJYICAiLAorCQlwcmludGsoS0VSTl9ERUJVRyAiICUwMnggJTAzWCAiLAogCQkJaSwKLQkJCWVudHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QsCi0JCQllbnRyeS5kZXN0LnBoeXNpY2FsLnBoeXNpY2FsX2Rlc3QKKwkJCWVudHJ5LmRlc3QKIAkJKTsKIAogCQlwcmludGsoIiUxZCAgICAlMWQgICAgJTFkICAgJTFkICAgJTFkICAgICUxZCAgICAlMWQgICAgJTAyWFxuIiwKQEAgLTEyOTMsOCArMTI5MCw3IEBACiAJCWVudHJ5LmRlc3RfbW9kZSAgICAgICA9IDA7IC8qIFBoeXNpY2FsICovCiAJCWVudHJ5LmRlbGl2ZXJ5X21vZGUgICA9IGRlc3RfRXh0SU5UOyAvKiBFeHRJbnQgKi8KIAkJZW50cnkudmVjdG9yICAgICAgICAgID0gMDsKLQkJZW50cnkuZGVzdC5waHlzaWNhbC5waHlzaWNhbF9kZXN0ID0KLQkJCQkJR0VUX0FQSUNfSUQoYXBpY19yZWFkKEFQSUNfSUQpKTsKKwkJZW50cnkuZGVzdCAgICAgICAgICA9IEdFVF9BUElDX0lEKGFwaWNfcmVhZChBUElDX0lEKSk7CiAKIAkJLyoKIAkJICogQWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgpAQCAtMTU1Niw3ICsxNTUyLDcgQEAKIAogCWVudHJ5MS5kZXN0X21vZGUgPSAwOwkJCS8qIHBoeXNpY2FsIGRlbGl2ZXJ5ICovCiAJZW50cnkxLm1hc2sgPSAwOwkJCS8qIHVubWFzayBJUlEgbm93ICovCi0JZW50cnkxLmRlc3QucGh5c2ljYWwucGh5c2ljYWxfZGVzdCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWVudHJ5MS5kZXN0ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CiAJZW50cnkxLmRlbGl2ZXJ5X21vZGUgPSBkZXN0X0V4dElOVDsKIAllbnRyeTEucG9sYXJpdHkgPSBlbnRyeTAucG9sYXJpdHk7CiAJZW50cnkxLnRyaWdnZXIgPSAwOwpAQCAtMjEzMSw3ICsyMTI3LDcgQEAKIAogCWVudHJ5LmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKIAllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCWVudHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QgPSBjcHVfbWFza190b19hcGljaWQobWFzayk7CisJZW50cnkuZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChtYXNrKTsKIAllbnRyeS50cmlnZ2VyID0gdHJpZ2dlcmluZzsKIAllbnRyeS5wb2xhcml0eSA9IHBvbGFyaXR5OwogCWVudHJ5Lm1hc2sgPSAxOwkJCQkJIC8qIERpc2FibGVkIChtYXNrZWQpICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaW9wb3J0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW9wb3J0LmMKaW5kZXggZmUwNjNkMy4uNzQ1YjFmMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2lvcG9ydC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pb3BvcnQuYwpAQCAtMTE0LDYgKzExNCw2IEBACiAJCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKIAkJCXJldHVybiAtRVBFUk07CiAJfQotCXJlZ3MtPmVmbGFncyA9IChyZWdzLT5lZmxhZ3MgJn4gMHgzMDAwVUwpIHwgKGxldmVsIDw8IDEyKTsKKwlyZWdzLT5lZmxhZ3MgPSAocmVncy0+ZWZsYWdzICZ+IFg4Nl9FRkxBR1NfSU9QTCkgfCAobGV2ZWwgPDwgMTIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2lycS5jIGIvYXJjaC94ODZfNjQva2VybmVsL2lycS5jCmluZGV4IDBjMDZhZjYuLjNiYzMwZDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaXJxLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKIGF0b21pY190IGlycV9lcnJfY291bnQ7CiAKQEAgLTEyMCw5ICsxMjEsMTQgQEAKIAogCWlmIChsaWtlbHkoaXJxIDwgTlJfSVJRUykpCiAJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwotCWVsc2UgaWYgKHByaW50a19yYXRlbGltaXQoKSkKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiAlZC4lZCBObyBpcnEgaGFuZGxlciBmb3IgdmVjdG9yXG4iLAotCQkJX19mdW5jX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgdmVjdG9yKTsKKwllbHNlIHsKKwkJaWYgKCFkaXNhYmxlX2FwaWMpCisJCQlhY2tfQVBJQ19pcnEoKTsKKworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiAlZC4lZCBObyBpcnEgaGFuZGxlciBmb3IgdmVjdG9yXG4iLAorCQkJCV9fZnVuY19fLCBzbXBfcHJvY2Vzc29yX2lkKCksIHZlY3Rvcik7CisJfQogCiAJaXJxX2V4aXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL21jZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL21jZS5jCmluZGV4IGJkYjU0YTIuLjgwMTFhOGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+IAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+CkBAIC00Miw2ICs0MywxMCBAQAogc3RhdGljIGludCBub3RpZnlfdXNlcjsKIHN0YXRpYyBpbnQgcmlwX21zcjsKIHN0YXRpYyBpbnQgbWNlX2Jvb3Rsb2cgPSAxOworc3RhdGljIGF0b21pY190IG1jZV9ldmVudHM7CisKK3N0YXRpYyBjaGFyIHRyaWdnZXJbMTI4XTsKK3N0YXRpYyBjaGFyICp0cmlnZ2VyX2FyZ3ZbMl0gPSB7IHRyaWdnZXIsIE5VTEwgfTsKIAogLyoKICAqIExvY2tsZXNzIE1DRSBsb2dnaW5nIGluZnJhc3RydWN0dXJlLgpAQCAtNTcsNiArNjIsNyBAQAogdm9pZCBtY2VfbG9nKHN0cnVjdCBtY2UgKm1jZSkKIHsKIAl1bnNpZ25lZCBuZXh0LCBlbnRyeTsKKwlhdG9taWNfaW5jKCZtY2VfZXZlbnRzKTsKIAltY2UtPmZpbmlzaGVkID0gMDsKIAl3bWIoKTsKIAlmb3IgKDs7KSB7CkBAIC0xNjEsNiArMTY3LDE3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBkb19tY2VfdHJpZ2dlcih2b2lkKQoreworCXN0YXRpYyBhdG9taWNfdCBtY2VfbG9nZ2VkOworCWludCBldmVudHMgPSBhdG9taWNfcmVhZCgmbWNlX2V2ZW50cyk7CisJaWYgKGV2ZW50cyAhPSBhdG9taWNfcmVhZCgmbWNlX2xvZ2dlZCkgJiYgdHJpZ2dlclswXSkgeworCQkvKiBTbWFsbCByYWNlIHdpbmRvdywgYnV0IHNob3VsZCBiZSBoYXJtbGVzcy4gICovCisJCWF0b21pY19zZXQoJm1jZV9sb2dnZWQsIGV2ZW50cyk7CisJCWNhbGxfdXNlcm1vZGVoZWxwZXIodHJpZ2dlciwgdHJpZ2dlcl9hcmd2LCBOVUxMLCAtMSk7CisJfQorfQorCiAvKiAKICAqIFRoZSBhY3R1YWwgbWFjaGluZSBjaGVjayBoYW5kbGVyCiAgKi8KQEAgLTIzNCw4ICsyNTEsMTIgQEAKIAl9CiAKIAkvKiBOZXZlciBkbyBhbnl0aGluZyBmaW5hbCBpbiB0aGUgcG9sbGluZyB0aW1lciAqLwotCWlmICghcmVncykKKwlpZiAoIXJlZ3MpIHsKKwkJLyogTm9ybWFsIGludGVycnVwdCBjb250ZXh0IGhlcmUuIENhbGwgdHJpZ2dlciBmb3IgYW55IG5ldworCQkgICBldmVudHMuICovCisJCWRvX21jZV90cmlnZ2VyKCk7CiAJCWdvdG8gb3V0OworCX0KIAogCS8qIElmIHdlIGRpZG4ndCBmaW5kIGFuIHVuY29ycmVjdGFibGUgZXJyb3IsIHBpY2sKIAkgICB0aGUgbGFzdCBvbmUgKHNob3VsZG4ndCBoYXBwZW4sIGp1c3QgYmVpbmcgc2FmZSkuICovCkBAIC02MDYsMTcgKzYyNyw0MiBAQAogCX0JCQkJCQkJCQkgICBcCiAJc3RhdGljIFNZU0RFVl9BVFRSKG5hbWUsIDA2NDQsIHNob3dfICMjIG5hbWUsIHNldF8gIyMgbmFtZSk7CiAKKy8qIFRCRCBzaG91bGQgZ2VuZXJhdGUgdGhlc2UgZHluYW1pY2FsbHkgYmFzZWQgb24gbnVtYmVyIG9mIGF2YWlsYWJsZSBiYW5rcyAqLwogQUNDRVNTT1IoYmFuazBjdGwsYmFua1swXSxtY2VfcmVzdGFydCgpKQogQUNDRVNTT1IoYmFuazFjdGwsYmFua1sxXSxtY2VfcmVzdGFydCgpKQogQUNDRVNTT1IoYmFuazJjdGwsYmFua1syXSxtY2VfcmVzdGFydCgpKQogQUNDRVNTT1IoYmFuazNjdGwsYmFua1szXSxtY2VfcmVzdGFydCgpKQogQUNDRVNTT1IoYmFuazRjdGwsYmFua1s0XSxtY2VfcmVzdGFydCgpKQogQUNDRVNTT1IoYmFuazVjdGwsYmFua1s1XSxtY2VfcmVzdGFydCgpKQotc3RhdGljIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogYmFua19hdHRyaWJ1dGVzW05SX0JBTktTXSA9IHsKLQkmYXR0cl9iYW5rMGN0bCwgJmF0dHJfYmFuazFjdGwsICZhdHRyX2JhbmsyY3RsLAotCSZhdHRyX2JhbmszY3RsLCAmYXR0cl9iYW5rNGN0bCwgJmF0dHJfYmFuazVjdGx9OworCitzdGF0aWMgc3NpemVfdCBzaG93X3RyaWdnZXIoc3RydWN0IHN5c19kZXZpY2UgKnMsIGNoYXIgKmJ1ZikKK3sKKwlzdHJjcHkoYnVmLCB0cmlnZ2VyKTsKKwlzdHJjYXQoYnVmLCAiXG4iKTsKKwlyZXR1cm4gc3RybGVuKHRyaWdnZXIpICsgMTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3RyaWdnZXIoc3RydWN0IHN5c19kZXZpY2UgKnMsY29uc3QgY2hhciAqYnVmLHNpemVfdCBzaXopCit7CisJY2hhciAqcDsKKwlpbnQgbGVuOworCXN0cm5jcHkodHJpZ2dlciwgYnVmLCBzaXplb2YodHJpZ2dlcikpOworCXRyaWdnZXJbc2l6ZW9mKHRyaWdnZXIpLTFdID0gMDsKKwlsZW4gPSBzdHJsZW4odHJpZ2dlcik7CisJcCA9IHN0cmNocih0cmlnZ2VyLCAnXG4nKTsKKwlpZiAoKnApICpwID0gMDsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgU1lTREVWX0FUVFIodHJpZ2dlciwgMDY0NCwgc2hvd190cmlnZ2VyLCBzZXRfdHJpZ2dlcik7CiBBQ0NFU1NPUih0b2xlcmFudCx0b2xlcmFudCwpCiBBQ0NFU1NPUihjaGVja19pbnRlcnZhbCxjaGVja19pbnRlcnZhbCxtY2VfcmVzdGFydCgpKQorc3RhdGljIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICptY2VfYXR0cmlidXRlc1tdID0geworCSZhdHRyX2JhbmswY3RsLCAmYXR0cl9iYW5rMWN0bCwgJmF0dHJfYmFuazJjdGwsCisJJmF0dHJfYmFuazNjdGwsICZhdHRyX2Jhbms0Y3RsLCAmYXR0cl9iYW5rNWN0bCwKKwkmYXR0cl90b2xlcmFudCwgJmF0dHJfY2hlY2tfaW50ZXJ2YWwsICZhdHRyX3RyaWdnZXIsCisJTlVMTAorfTsKIAogLyogUGVyIGNwdSBzeXNkZXYgaW5pdC4gIEFsbCBvZiB0aGUgY3B1cyBzdGlsbCBzaGFyZSB0aGUgc2FtZSBjdGwgYmFuayAqLwogc3RhdGljIF9fY3B1aW5pdCBpbnQgbWNlX2NyZWF0ZV9kZXZpY2UodW5zaWduZWQgaW50IGNwdSkKQEAgLTYzMiwxMSArNjc4LDkgQEAKIAllcnIgPSBzeXNkZXZfcmVnaXN0ZXIoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpKTsKIAogCWlmICghZXJyKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKQorCQlmb3IgKGkgPSAwOyBtY2VfYXR0cmlidXRlc1tpXTsgaSsrKQogCQkJc3lzZGV2X2NyZWF0ZV9maWxlKCZwZXJfY3B1KGRldmljZV9tY2UsY3B1KSwKLQkJCQliYW5rX2F0dHJpYnV0ZXNbaV0pOwotCQlzeXNkZXZfY3JlYXRlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpLCAmYXR0cl90b2xlcmFudCk7Ci0JCXN5c2Rldl9jcmVhdGVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSksICZhdHRyX2NoZWNrX2ludGVydmFsKTsKKwkJCQltY2VfYXR0cmlidXRlc1tpXSk7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC02NDUsMTEgKzY4OSw5IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykKKwlmb3IgKGkgPSAwOyBtY2VfYXR0cmlidXRlc1tpXTsgaSsrKQogCQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpLAotCQkJYmFua19hdHRyaWJ1dGVzW2ldKTsKLQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpLCAmYXR0cl90b2xlcmFudCk7Ci0Jc3lzZGV2X3JlbW92ZV9maWxlKCZwZXJfY3B1KGRldmljZV9tY2UsY3B1KSwgJmF0dHJfY2hlY2tfaW50ZXJ2YWwpOworCQkJbWNlX2F0dHJpYnV0ZXNbaV0pOwogCXN5c2Rldl91bnJlZ2lzdGVyKCZwZXJfY3B1KGRldmljZV9tY2UsY3B1KSk7CiAJbWVtc2V0KCZwZXJfY3B1KGRldmljZV9tY2UsIGNwdSkua29iaiwgMCwgc2l6ZW9mKHN0cnVjdCBrb2JqZWN0KSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlX2FtZC5jIGIvYXJjaC94ODZfNjQva2VybmVsL21jZV9hbWQuYwppbmRleCA5M2M3MDcyLi5kMGJkNWQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlX2FtZC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tY2VfYW1kLmMKQEAgLTM3LDYgKzM3LDggQEAKICNkZWZpbmUgVEhSRVNIT0xEX01BWCAgICAgMHhGRkYKICNkZWZpbmUgSU5UX1RZUEVfQVBJQyAgICAgMHgwMDAyMDAwMAogI2RlZmluZSBNQVNLX1ZBTElEX0hJICAgICAweDgwMDAwMDAwCisjZGVmaW5lIE1BU0tfQ05UUF9ISSAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgTUFTS19MT0NLRURfSEkgICAgMHgyMDAwMDAwMAogI2RlZmluZSBNQVNLX0xWVE9GRl9ISSAgICAweDAwRjAwMDAwCiAjZGVmaW5lIE1BU0tfQ09VTlRfRU5fSEkgIDB4MDAwODAwMDAKICNkZWZpbmUgTUFTS19JTlRfVFlQRV9ISSAgMHgwMDA2MDAwMApAQCAtMTIyLDE0ICsxMjQsMTcgQEAKIAkJZm9yIChibG9jayA9IDA7IGJsb2NrIDwgTlJfQkxPQ0tTOyArK2Jsb2NrKSB7CiAJCQlpZiAoYmxvY2sgPT0gMCkKIAkJCQlhZGRyZXNzID0gTVNSX0lBMzJfTUMwX01JU0MgKyBiYW5rICogNDsKLQkJCWVsc2UgaWYgKGJsb2NrID09IDEpCi0JCQkJYWRkcmVzcyA9IE1DR19YQkxLX0FERFIKLQkJCQkJKyAoKGxvdyAmIE1BU0tfQkxLUFRSX0xPKSA+PiAyMSk7CisJCQllbHNlIGlmIChibG9jayA9PSAxKSB7CisJCQkJYWRkcmVzcyA9IChsb3cgJiBNQVNLX0JMS1BUUl9MTykgPj4gMjE7CisJCQkJaWYgKCFhZGRyZXNzKQorCQkJCQlicmVhazsKKwkJCQlhZGRyZXNzICs9IE1DR19YQkxLX0FERFI7CisJCQl9CiAJCQllbHNlCiAJCQkJKythZGRyZXNzOwogCiAJCQlpZiAocmRtc3Jfc2FmZShhZGRyZXNzLCAmbG93LCAmaGlnaCkpCi0JCQkJY29udGludWU7CisJCQkJYnJlYWs7CiAKIAkJCWlmICghKGhpZ2ggJiBNQVNLX1ZBTElEX0hJKSkgewogCQkJCWlmIChibG9jaykKQEAgLTEzOCw4ICsxNDMsOCBAQAogCQkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKCEoaGlnaCAmIE1BU0tfVkFMSURfSEkgPj4gMSkgIHx8Ci0JCQkgICAgIChoaWdoICYgTUFTS19WQUxJRF9ISSA+PiAyKSkKKwkJCWlmICghKGhpZ2ggJiBNQVNLX0NOVFBfSEkpICB8fAorCQkJICAgICAoaGlnaCAmIE1BU0tfTE9DS0VEX0hJKSkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKCFibG9jaykKQEAgLTE4NywxNyArMTkyLDIyIEBACiAKIAkvKiBhc3N1bWUgZmlyc3QgYmFuayBjYXVzZWQgaXQgKi8KIAlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgTlJfQkFOS1M7ICsrYmFuaykgeworCQlpZiAoIShwZXJfY3B1KGJhbmtfbWFwLCBtLmNwdSkgJiAoMSA8PCBiYW5rKSkpCisJCQljb250aW51ZTsKIAkJZm9yIChibG9jayA9IDA7IGJsb2NrIDwgTlJfQkxPQ0tTOyArK2Jsb2NrKSB7CiAJCQlpZiAoYmxvY2sgPT0gMCkKIAkJCQlhZGRyZXNzID0gTVNSX0lBMzJfTUMwX01JU0MgKyBiYW5rICogNDsKLQkJCWVsc2UgaWYgKGJsb2NrID09IDEpCi0JCQkJYWRkcmVzcyA9IE1DR19YQkxLX0FERFIKLQkJCQkJKyAoKGxvdyAmIE1BU0tfQkxLUFRSX0xPKSA+PiAyMSk7CisJCQllbHNlIGlmIChibG9jayA9PSAxKSB7CisJCQkJYWRkcmVzcyA9IChsb3cgJiBNQVNLX0JMS1BUUl9MTykgPj4gMjE7CisJCQkJaWYgKCFhZGRyZXNzKQorCQkJCQlicmVhazsKKwkJCQlhZGRyZXNzICs9IE1DR19YQkxLX0FERFI7CisJCQl9CiAJCQllbHNlCiAJCQkJKythZGRyZXNzOwogCiAJCQlpZiAocmRtc3Jfc2FmZShhZGRyZXNzLCAmbG93LCAmaGlnaCkpCi0JCQkJY29udGludWU7CisJCQkJYnJlYWs7CiAKIAkJCWlmICghKGhpZ2ggJiBNQVNLX1ZBTElEX0hJKSkgewogCQkJCWlmIChibG9jaykKQEAgLTIwNiwxMCArMjE2LDE0IEBACiAJCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoIShoaWdoICYgTUFTS19WQUxJRF9ISSA+PiAxKSAgfHwKLQkJCSAgICAgKGhpZ2ggJiBNQVNLX1ZBTElEX0hJID4+IDIpKQorCQkJaWYgKCEoaGlnaCAmIE1BU0tfQ05UUF9ISSkgIHx8CisJCQkgICAgIChoaWdoICYgTUFTS19MT0NLRURfSEkpKQogCQkJCWNvbnRpbnVlOwogCisJCQkvKiBMb2cgdGhlIG1hY2hpbmUgY2hlY2sgdGhhdCBjYXVzZWQgdGhlIHRocmVzaG9sZAorCQkJICAgZXZlbnQuICovCisJCQlkb19tYWNoaW5lX2NoZWNrKE5VTEwsIDApOworCiAJCQlpZiAoaGlnaCAmIE1BU0tfT1ZFUkZMT1dfSEkpIHsKIAkJCQlyZG1zcmwoYWRkcmVzcywgbS5taXNjKTsKIAkJCQlyZG1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUyArIGJhbmsgKiA0LApAQCAtMzg1LDcgKzM5OSw3IEBACiAJCXJldHVybiAwOwogCiAJaWYgKHJkbXNyX3NhZmUoYWRkcmVzcywgJmxvdywgJmhpZ2gpKQotCQlnb3RvIHJlY3Vyc2U7CisJCXJldHVybiAwOwogCiAJaWYgKCEoaGlnaCAmIE1BU0tfVkFMSURfSEkpKSB7CiAJCWlmIChibG9jaykKQEAgLTM5NCw4ICs0MDgsOCBAQAogCQkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCEoaGlnaCAmIE1BU0tfVkFMSURfSEkgPj4gMSkgIHx8Ci0JICAgICAoaGlnaCAmIE1BU0tfVkFMSURfSEkgPj4gMikpCisJaWYgKCEoaGlnaCAmIE1BU0tfQ05UUF9ISSkgIHx8CisJICAgICAoaGlnaCAmIE1BU0tfTE9DS0VEX0hJKSkKIAkJZ290byByZWN1cnNlOwogCiAJYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aHJlc2hvbGRfYmxvY2spLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYwppbmRleCA5Y2I0MmVjLi40ODZmNGM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL25taS5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIHsKIAlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewogCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCXJldHVybiBib290X2NwdV9kYXRhLng4NiA9PSAxNTsKKwkJcmV0dXJuIGJvb3RfY3B1X2RhdGEueDg2ID09IDE1IHx8IGJvb3RfY3B1X2RhdGEueDg2ID09IDE2OwogCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKIAkJaWYgKGNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTikpCiAJCQlyZXR1cm4gMTsKQEAgLTIxNCw2ICsyMTQsMjMgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdW5zaWduZWQgaW50IGFkanVzdF9mb3JfMzJiaXRfY3RyKHVuc2lnbmVkIGludCBoeikKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsID0gaHo7CisKKwkvKgorCSAqIE9uIEludGVsIENQVXMgd2l0aCBBUkNIX1BFUkZNT04gb25seSAzMiBiaXRzIGluIHRoZSBjb3VudGVyCisJICogYXJlIHdyaXRhYmxlLCB3aXRoIGhpZ2hlciBiaXRzIHNpZ24gZXh0ZW5kaW5nIGZyb20gYml0IDMxLgorCSAqIFNvLCB3ZSBjYW4gb25seSBwcm9ncmFtIHRoZSBjb3VudGVyIHdpdGggMzEgYml0IHZhbHVlcyBhbmQKKwkgKiAzMm5kIGJpdCBzaG91bGQgYmUgMSwgZm9yIDMzLi4gdG8gYmUgMS4KKwkgKiBGaW5kIHRoZSBhcHByb3ByaWF0ZSBubWlfaHoKKwkgKi8KKyAJaWYgKCgoKHU2NCljcHVfa2h6ICogMTAwMCkgLyByZXR2YWwpID4gMHg3ZmZmZmZmZlVMTCkgeworCQlyZXR2YWwgPSAoKHU2NCljcHVfa2h6ICogMTAwMCkgLyAweDdmZmZmZmZmVUwgKyAxOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCiBpbnQgX19pbml0IGNoZWNrX25taV93YXRjaGRvZyAodm9pZCkKIHsKIAlpbnQgKmNvdW50czsKQEAgLTI2OCwxNyArMjg1LDggQEAKIAkJc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkID0gJl9fZ2V0X2NwdV92YXIobm1pX3dhdGNoZG9nX2N0bGJsayk7CiAKIAkJbm1pX2h6ID0gMTsKLQkJLyoKLQkJICogT24gSW50ZWwgQ1BVcyB3aXRoIEFSQ0hfUEVSRk1PTiBvbmx5IDMyIGJpdHMgaW4gdGhlIGNvdW50ZXIKLQkJICogYXJlIHdyaXRhYmxlLCB3aXRoIGhpZ2hlciBiaXRzIHNpZ24gZXh0ZW5kaW5nIGZyb20gYml0IDMxLgotCQkgKiBTbywgd2UgY2FuIG9ubHkgcHJvZ3JhbSB0aGUgY291bnRlciB3aXRoIDMxIGJpdCB2YWx1ZXMgYW5kCi0JCSAqIDMybmQgYml0IHNob3VsZCBiZSAxLCBmb3IgMzMuLiB0byBiZSAxLgotCQkgKiBGaW5kIHRoZSBhcHByb3ByaWF0ZSBubWlfaHoKLQkJICovCi0JIAlpZiAod2QtPnBlcmZjdHJfbXNyID09IE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgJiYKLQkJCSgodTY0KWNwdV9raHogKiAxMDAwKSA+IDB4N2ZmZmZmZmZVTEwpIHsKLQkJCW5taV9oeiA9ICgodTY0KWNwdV9raHogKiAxMDAwKSAvIDB4N2ZmZmZmZmZVTCArIDE7Ci0JCX0KKwkgCWlmICh3ZC0+cGVyZmN0cl9tc3IgPT0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCkKKwkJCW5taV9oeiA9IGFkanVzdF9mb3JfMzJiaXRfY3RyKG5taV9oeik7CiAJfQogCiAJa2ZyZWUoY291bnRzKTsKQEAgLTM2MCw2ICszNjgsMzMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9fYWNwaV9ubWlfZGlzYWJsZSh2b2lkICpfX3VudXNlZCkKK3sKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9OTUkgfCBBUElDX0xWVF9NQVNLRUQpOworfQorCisvKgorICogRGlzYWJsZSB0aW1lciBiYXNlZCBOTUlzIG9uIGFsbCBDUFVzOgorICovCit2b2lkIGFjcGlfbm1pX2Rpc2FibGUodm9pZCkKK3sKKwlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICYmIG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykKKwkJb25fZWFjaF9jcHUoX19hY3BpX25taV9kaXNhYmxlLCBOVUxMLCAwLCAxKTsKK30KKworc3RhdGljIHZvaWQgX19hY3BpX25taV9lbmFibGUodm9pZCAqX191bnVzZWQpCit7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fTk1JKTsKK30KKworLyoKKyAqIEVuYWJsZSB0aW1lciBiYXNlZCBOTUlzIG9uIGFsbCBDUFVzOgorICovCit2b2lkIGFjcGlfbm1pX2VuYWJsZSh2b2lkKQoreworCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgJiYgbm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKQorCQlvbl9lYWNoX2NwdShfX2FjcGlfbm1pX2VuYWJsZSwgTlVMTCwgMCwgMSk7Cit9CiAjaWZkZWYgQ09ORklHX1BNCiAKIHN0YXRpYyBpbnQgbm1pX3BtX2FjdGl2ZTsgLyogbm1pX2FjdGl2ZSBiZWZvcmUgc3VzcGVuZCAqLwpAQCAtNjM0LDcgKzY2OSw5IEBACiAKIAkvKiBzZXR1cCB0aGUgdGltZXIgKi8KIAl3cm1zcihldm50c2VsX21zciwgZXZudHNlbCwgMCk7Ci0Jd3Jtc3JsKHBlcmZjdHJfbXNyLCAtKCh1NjQpY3B1X2toeiAqIDEwMDAgLyBubWlfaHopKTsKKworCW5taV9oeiA9IGFkanVzdF9mb3JfMzJiaXRfY3RyKG5taV9oeik7CisJd3Jtc3IocGVyZmN0cl9tc3IsICh1MzIpKC0oKHU2NCljcHVfa2h6ICogMTAwMCAvIG5taV9oeikpLCAwKTsKIAogCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOwogCWV2bnRzZWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7CkBAIC04NTUsMTUgKzg5MiwyMyBAQAogCQkJCWR1bW15ICY9IH5QNF9DQ0NSX09WRjsKIAkgCQkJd3Jtc3JsKHdkLT5jY2NyX21zciwgZHVtbXkpOwogCSAJCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKKwkJCQkvKiBzdGFydCB0aGUgY3ljbGUgb3ZlciBhZ2FpbiAqLworCQkJCXdybXNybCh3ZC0+cGVyZmN0cl9tc3IsCisJCQkJICAgICAgIC0oKHU2NCljcHVfa2h6ICogMTAwMCAvIG5taV9oeikpOwogCSAJCX0gZWxzZSBpZiAod2QtPnBlcmZjdHJfbXNyID09IE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjApIHsKIAkJCQkvKgogCQkJCSAqIEFyY2hQZXJmb20vQ29yZSBEdW8gbmVlZHMgdG8gcmUtdW5tYXNrCiAJCQkJICogdGhlIGFwaWMgdmVjdG9yCiAJCQkJICovCiAJCQkJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7CisJCQkJLyogQVJDSF9QRVJGTU9OIGhhcyAzMiBiaXQgY291bnRlciB3cml0ZXMgKi8KKwkJCQl3cm1zcih3ZC0+cGVyZmN0cl9tc3IsCisJCQkJICAgICAodTMyKSgtKCh1NjQpY3B1X2toeiAqIDEwMDAgLyBubWlfaHopKSwgMCk7CisJCQl9IGVsc2UgeworCQkJCS8qIHN0YXJ0IHRoZSBjeWNsZSBvdmVyIGFnYWluICovCisJCQkJd3Jtc3JsKHdkLT5wZXJmY3RyX21zciwKKwkJCQkgICAgICAgLSgodTY0KWNwdV9raHogKiAxMDAwIC8gbm1pX2h6KSk7CiAJCQl9Ci0JCQkvKiBzdGFydCB0aGUgY3ljbGUgb3ZlciBhZ2FpbiAqLwotCQkJd3Jtc3JsKHdkLT5wZXJmY3RyX21zciwgLSgodTY0KWNwdV9raHogKiAxMDAwIC8gbm1pX2h6KSk7CiAJCQlyYyA9IDE7CiAJCX0gZWxzZSAJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewogCQkJLyogZG9uJ3Qga25vdyBob3cgdG8gYWNjdXJhdGVseSBjaGVjayBmb3IgdGhpcy4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktY2FsZ2FyeS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1jYWxnYXJ5LmMKaW5kZXggM2Q2NWIxZC4uMDQ0ODBjMyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1jYWxnYXJ5LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1jYWxnYXJ5LmMKQEAgLTEzOCw2ICsxMzgsOCBAQAogCiAjZGVmaW5lIFBIQl9ERUJVR19TVFVGRl9PRkZTRVQJMHgwMDIwCiAKKyNkZWZpbmUgRU1FUkdFTkNZX1BBR0VTIDMyIC8qID0gMTI4S0IgKi8KKwogdW5zaWduZWQgaW50IHNwZWNpZmllZF90YWJsZV9zaXplID0gVENFX1RBQkxFX1NJWkVfVU5TUEVDSUZJRUQ7CiBzdGF0aWMgaW50IHRyYW5zbGF0ZV9lbXB0eV9zbG90cyBfX3JlYWRfbW9zdGx5ID0gMDsKIHN0YXRpYyBpbnQgY2FsZ2FyeV9kZXRlY3RlZCBfX3JlYWRfbW9zdGx5ID0gMDsKQEAgLTI5Niw2ICsyOTgsMTYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGVudHJ5OwogCXVuc2lnbmVkIGxvbmcgYmFkYml0OworCXVuc2lnbmVkIGxvbmcgYmFkZW5kOworCisJLyogd2VyZSB3ZSBjYWxsZWQgd2l0aCBiYWRfZG1hX2FkZHJlc3M/ICovCisJYmFkZW5kID0gYmFkX2RtYV9hZGRyZXNzICsgKEVNRVJHRU5DWV9QQUdFUyAqIFBBR0VfU0laRSk7CisJaWYgKHVubGlrZWx5KChkbWFfYWRkciA+PSBiYWRfZG1hX2FkZHJlc3MpICYmIChkbWFfYWRkciA8IGJhZGVuZCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FsZ2FyeTogZHJpdmVyIHRyaWVkIHVubWFwcGluZyBiYWQgRE1BICIKKwkJICAgICAgICJhZGRyZXNzIDB4JUx4XG4iLCBkbWFfYWRkcik7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CiAKIAllbnRyeSA9IGRtYV9hZGRyID4+IFBBR0VfU0hJRlQ7CiAKQEAgLTY1Niw4ICs2NjgsOCBAQAogCXU2NCBzdGFydDsKIAlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IGRldi0+c3lzZGF0YTsKIAotCS8qIHJlc2VydmUgYmFkX2RtYV9hZGRyZXNzIGluIGNhc2UgaXQncyBhIGxlZ2FsIGFkZHJlc3MgKi8KLQlpb21tdV9yYW5nZV9yZXNlcnZlKHRibCwgYmFkX2RtYV9hZGRyZXNzLCAxKTsKKwkvKiByZXNlcnZlIEVNRVJHRU5DWV9QQUdFUyBmcm9tIGJhZF9kbWFfYWRkcmVzcyBhbmQgdXAgKi8KKwlpb21tdV9yYW5nZV9yZXNlcnZlKHRibCwgYmFkX2RtYV9hZGRyZXNzLCBFTUVSR0VOQ1lfUEFHRVMpOwogCiAJLyogYXZvaWQgdGhlIEJJT1MvVkdBIGZpcnN0IDY0MEtCLTFNQiByZWdpb24gKi8KIAlzdGFydCA9ICg2NDAgKiAxMDI0KTsKQEAgLTExNzYsNiArMTE4OCw3IEBACiAJfQogCiAJZm9yY2VfaW9tbXUgPSAxOworCWJhZF9kbWFfYWRkcmVzcyA9IDB4MDsKIAlkbWFfb3BzID0gJmNhbGdhcnlfZG1hX29wczsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZG1hLmMKaW5kZXggNjgzYjdhNS4uNjUxY2NmYiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWRtYS5jCkBAIC0yMjMsMzAgKzIyMywxMCBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFfc2V0X21hc2spOwogCi0vKiBpb21tdT1bc2l6ZV1bLG5vYWdwXVssb2ZmXVssZm9yY2VdWyxub2ZvcmNlXVssbGVha11bLG1lbWFwZXJbPW9yZGVyXV1bLG1lcmdlXQotICAgICAgICAgWyxmb3JjZXNhY11bLGZ1bGxmbHVzaF1bLG5vbWVyZ2VdWyxiaW9tZXJnZV0KLSAgIHNpemUgIHNldCBzaXplIG9mIGlvbW11IChpbiBieXRlcykKLSAgIG5vYWdwIGRvbid0IGluaXRpYWxpemUgdGhlIEFHUCBkcml2ZXIgYW5kIHVzZSBmdWxsIGFwZXJ0dXJlLgotICAgb2ZmICAgZG9uJ3QgdXNlIHRoZSBJT01NVQotICAgbGVhayAgdHVybiBvbiBzaW1wbGUgaW9tbXUgbGVhayB0cmFjaW5nIChvbmx5IHdoZW4gQ09ORklHX0lPTU1VX0xFQUsgaXMgb24pCi0gICBtZW1hcGVyWz1vcmRlcl0gYWxsb2NhdGUgYW4gb3duIGFwZXJ0dXJlIG92ZXIgUkFNIHdpdGggc2l6ZSAzMk1CXm9yZGVyLgotICAgbm9mb3JjZSBkb24ndCBmb3JjZSBJT01NVSB1c2FnZS4gRGVmYXVsdC4KLSAgIGZvcmNlICBGb3JjZSBJT01NVS4KLSAgIG1lcmdlICBEbyBsYXp5IG1lcmdpbmcuIFRoaXMgbWF5IGltcHJvdmUgcGVyZm9ybWFuY2Ugb24gc29tZSBibG9jayBkZXZpY2VzLgotICAgICAgICAgIEltcGxpZXMgZm9yY2UgKGV4cGVyaW1lbnRhbCkKLSAgIGJpb21lcmdlIERvIG1lcmdpbmcgYXQgdGhlIEJJTyBsYXllci4gVGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIG1lcmdlLAotICAgICAgICAgICAgYnV0IHNob3VsZCBiZSBvbmx5IGRvbmUgd2l0aCB2ZXJ5IGJpZyBJT01NVXMuIEltcGxpZXMgbWVyZ2UsZm9yY2UuCi0gICBub21lcmdlIERvbid0IGRvIFNHIG1lcmdpbmcuCi0gICBmb3JjZXNhYyBGb3IgU0FDIG1vZGUgZm9yIG1hc2tzIDw0MGJpdHMgIChleHBlcmltZW50YWwpCi0gICBmdWxsZmx1c2ggRmx1c2ggSU9NTVUgb24gZWFjaCBhbGxvY2F0aW9uIChkZWZhdWx0KQotICAgbm9mdWxsZmx1c2ggRG9uJ3QgdXNlIElPTU1VIGZ1bGxmbHVzaAotICAgYWxsb3dlZCAgb3ZlcndyaXRlIGlvbW11IG9mZiB3b3JrYXJvdW5kcyBmb3Igc3BlY2lmaWMgY2hpcHNldHMuCi0gICBzb2Z0CSBVc2Ugc29mdHdhcmUgYm91bmNlIGJ1ZmZlcmluZyAoZGVmYXVsdCBmb3IgSW50ZWwgbWFjaGluZXMpCi0gICBub2FwZXJ0dXJlIERvbid0IHRvdWNoIHRoZSBhcGVydHVyZSBmb3IgQUdQLgotICAgYWxsb3dkYWMgQWxsb3cgRE1BID40R0IKLSAgIG5vZGFjICAgIEZvcmJpZCBETUEgPjRHQgotICAgcGFuaWMgICAgRm9yY2UgcGFuaWMgd2hlbiBJT01NVSBvdmVyZmxvd3MKLSovCisvKgorICogU2VlIDxEb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0PiBmb3IgdGhlIGlvbW11IGtlcm5lbCBwYXJhbWV0ZXIKKyAqIGRvY3VtZW50YXRpb24uCisgKi8KIF9faW5pdCBpbnQgaW9tbXVfc2V0dXAoY2hhciAqcCkKIHsKIAlpb21tdV9tZXJnZSA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWdhcnQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZ2FydC5jCmluZGV4IGZjMTk2MGYuLjAzMGViMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZ2FydC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZ2FydC5jCkBAIC0xODUsNyArMTg1LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IG5lZWRfaW9tbXUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplKQogeyAKIAl1NjQgbWFzayA9ICpkZXYtPmRtYV9tYXNrOwotCWludCBoaWdoID0gYWRkciArIHNpemUgPj0gbWFzazsKKwlpbnQgaGlnaCA9IGFkZHIgKyBzaXplID4gbWFzazsKIAlpbnQgbW11ID0gaGlnaDsKIAlpZiAoZm9yY2VfaW9tbXUpIAogCQltbXUgPSAxOyAKQEAgLTE5NSw3ICsxOTUsNyBAQAogc3RhdGljIGlubGluZSBpbnQgbm9uZm9yY2VkX2lvbW11KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qgc2l6ZSkKIHsgCiAJdTY0IG1hc2sgPSAqZGV2LT5kbWFfbWFzazsKLQlpbnQgaGlnaCA9IGFkZHIgKyBzaXplID49IG1hc2s7CisJaW50IGhpZ2ggPSBhZGRyICsgc2l6ZSA+IG1hc2s7CiAJaW50IG1tdSA9IGhpZ2g7CiAJcmV0dXJuIG1tdTsgCiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcG10aW1lci5jIGIvYXJjaC94ODZfNjQva2VybmVsL3BtdGltZXIuYwppbmRleCA3NTU0NDU4Li5hZThmOTEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcG10aW1lci5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wbXRpbWVyLmMKQEAgLTI0LDE1ICsyNCw2IEBACiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS92c3lzY2FsbC5oPgogCi0vKiBUaGUgSS9PIHBvcnQgdGhlIFBNVE1SIHJlc2lkZXMgYXQuCi0gKiBUaGUgbG9jYXRpb24gaXMgZGV0ZWN0ZWQgZHVyaW5nIHNldHVwX2FyY2goKSwKLSAqIGluIGFyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMgKi8KLXUzMiBwbXRtcl9pb3BvcnQgX19yZWFkX21vc3RseTsKLQotLyogdmFsdWUgb2YgdGhlIFBvd2VyIHRpbWVyIGF0IGxhc3QgdGltZXIgaW50ZXJydXB0ICovCi1zdGF0aWMgdTMyIG9mZnNldF9kZWxheTsKLXN0YXRpYyB1MzIgbGFzdF9wbXRtcl90aWNrOwotCiAjZGVmaW5lIEFDUElfUE1fTUFTSyAweEZGRkZGRiAvKiBsaW1pdCBpdCB0byAyNCBiaXRzICovCiAKIHN0YXRpYyBpbmxpbmUgdTMyIGN5YzJ1cyh1MzIgY3ljbGVzKQpAQCAtNDgsMzggKzM5LDYgQEAKIAlyZXR1cm4gKGN5Y2xlcyA+PiAxMCk7CiB9CiAKLWludCBwbXRpbWVyX21hcmtfb2Zmc2V0KHZvaWQpCi17Ci0Jc3RhdGljIGludCBmaXJzdF9ydW4gPSAxOwotCXVuc2lnbmVkIGxvbmcgdHNjOwotCXUzMiBsb3N0OwotCi0JdTMyIHRpY2sgPSBpbmwocG10bXJfaW9wb3J0KTsKLQl1MzIgZGVsdGE7Ci0KLQlkZWx0YSA9IGN5YzJ1cygodGljayAtIGxhc3RfcG10bXJfdGljaykgJiBBQ1BJX1BNX01BU0spOwotCi0JbGFzdF9wbXRtcl90aWNrID0gdGljazsKLQltb25vdG9uaWNfYmFzZSArPSBkZWx0YSAqIE5TRUNfUEVSX1VTRUM7Ci0KLQlkZWx0YSArPSBvZmZzZXRfZGVsYXk7Ci0KLQlsb3N0ID0gZGVsdGEgLyAoVVNFQ19QRVJfU0VDIC8gSFopOwotCW9mZnNldF9kZWxheSA9IGRlbHRhICUgKFVTRUNfUEVSX1NFQyAvIEhaKTsKLQotCXJkdHNjbGwodHNjKTsKLQl2eHRpbWUubGFzdF90c2MgPSB0c2MgLSBvZmZzZXRfZGVsYXkgKiAodTY0KWNwdV9raHogLyAxMDAwOwotCi0JLyogZG9uJ3QgY2FsY3VsYXRlIGRlbGF5IGZvciBmaXJzdCBydW4sCi0JICAgb3IgaWYgd2UndmUgZ290IGxlc3MgdGhlbiBhIHRpY2sgKi8KLQlpZiAoZmlyc3RfcnVuIHx8IChsb3N0IDwgMSkpIHsKLQkJZmlyc3RfcnVuID0gMDsKLQkJb2Zmc2V0X2RlbGF5ID0gMDsKLQl9Ci0KLQlyZXR1cm4gbG9zdCAtIDE7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBwbXRpbWVyX3dhaXRfdGljayh2b2lkKQogewogCXUzMiBhLCBiOwpAQCAtMTAxLDIzICs2MCw2IEBACiAJfSB3aGlsZSAoY3ljMnVzKGIgLSBhKSA8IHVzKTsKIH0KIAotdm9pZCBwbXRpbWVyX3Jlc3VtZSh2b2lkKQotewotCWxhc3RfcG10bXJfdGljayA9IGlubChwbXRtcl9pb3BvcnQpOwotfQotCi11bnNpZ25lZCBpbnQgZG9fZ2V0dGltZW9mZnNldF9wbSh2b2lkKQotewotCXUzMiBub3csIG9mZnNldCwgZGVsdGEgPSAwOwotCi0Jb2Zmc2V0ID0gbGFzdF9wbXRtcl90aWNrOwotCW5vdyA9IGlubChwbXRtcl9pb3BvcnQpOwotCWRlbHRhID0gKG5vdyAtIG9mZnNldCkgJiBBQ1BJX1BNX01BU0s7Ci0KLQlyZXR1cm4gb2Zmc2V0X2RlbGF5ICsgY3ljMnVzKGRlbHRhKTsKLX0KLQotCiBzdGF0aWMgaW50IF9faW5pdCBub3BtdGltZXJfc2V0dXAoY2hhciAqcykKIHsKIAlwbXRtcl9pb3BvcnQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IGFkZGMxNGEuLjQzMjZhNjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMKQEAgLTUzNiw4ICs1MzYsMTIgQEAKIAkJfQogCQlyZXQgPSAwOwogCQlmb3IgKHVpID0gMDsgdWkgPCBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpOyB1aSArPSBzaXplb2YobG9uZykpIHsKLQkJCXJldCB8PSBfX2dldF91c2VyKHRtcCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGRhdGEpOwotCQkJcHV0cmVnKGNoaWxkLCB1aSwgdG1wKTsKKwkJCXJldCA9IF9fZ2V0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgZGF0YSk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQkJcmV0ID0gcHV0cmVnKGNoaWxkLCB1aSwgdG1wKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CiAJCQlkYXRhICs9IHNpemVvZihsb25nKTsKIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKaW5kZXggNjA0NzcyNC4uM2Q5OGI2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKQEAgLTEzOCwxMjggKzEzOCw2IEBACiAJLmZsYWdzID0gSU9SRVNPVVJDRV9SQU0sCiB9OwogCi0jZGVmaW5lIElPUkVTT1VSQ0VfUk9NIChJT1JFU09VUkNFX0JVU1kgfCBJT1JFU09VUkNFX1JFQURPTkxZIHwgSU9SRVNPVVJDRV9NRU0pCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3lzdGVtX3JvbV9yZXNvdXJjZSA9IHsKLQkubmFtZSA9ICJTeXN0ZW0gUk9NIiwKLQkuc3RhcnQgPSAweGYwMDAwLAotCS5lbmQgPSAweGZmZmZmLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfUk9NLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleHRlbnNpb25fcm9tX3Jlc291cmNlID0gewotCS5uYW1lID0gIkV4dGVuc2lvbiBST00iLAotCS5zdGFydCA9IDB4ZTAwMDAsCi0JLmVuZCA9IDB4ZWZmZmYsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9ST00sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGFkYXB0ZXJfcm9tX3Jlc291cmNlc1tdID0gewotCXsgLm5hbWUgPSAiQWRhcHRlciBST00iLCAuc3RhcnQgPSAweGM4MDAwLCAuZW5kID0gMCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9ST00gfSwKLQl7IC5uYW1lID0gIkFkYXB0ZXIgUk9NIiwgLnN0YXJ0ID0gMCwgLmVuZCA9IDAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfUk9NIH0sCi0JeyAubmFtZSA9ICJBZGFwdGVyIFJPTSIsIC5zdGFydCA9IDAsIC5lbmQgPSAwLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX1JPTSB9LAotCXsgLm5hbWUgPSAiQWRhcHRlciBST00iLCAuc3RhcnQgPSAwLCAuZW5kID0gMCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9ST00gfSwKLQl7IC5uYW1lID0gIkFkYXB0ZXIgUk9NIiwgLnN0YXJ0ID0gMCwgLmVuZCA9IDAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfUk9NIH0sCi0JeyAubmFtZSA9ICJBZGFwdGVyIFJPTSIsIC5zdGFydCA9IDAsIC5lbmQgPSAwLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX1JPTSB9Ci19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHZpZGVvX3JvbV9yZXNvdXJjZSA9IHsKLQkubmFtZSA9ICJWaWRlbyBST00iLAotCS5zdGFydCA9IDB4YzAwMDAsCi0JLmVuZCA9IDB4YzdmZmYsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9ST00sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHZpZGVvX3JhbV9yZXNvdXJjZSA9IHsKLQkubmFtZSA9ICJWaWRlbyBSQU0gYXJlYSIsCi0JLnN0YXJ0ID0gMHhhMDAwMCwKLQkuZW5kID0gMHhiZmZmZiwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX1JBTSwKLX07Ci0KLSNkZWZpbmUgcm9tc2lnbmF0dXJlKHgpICgqKHVuc2lnbmVkIHNob3J0ICopKHgpID09IDB4YWE1NSkKLQotc3RhdGljIGludCBfX2luaXQgcm9tY2hlY2tzdW0odW5zaWduZWQgY2hhciAqcm9tLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKLXsKLQl1bnNpZ25lZCBjaGFyICpwLCBzdW0gPSAwOwotCi0JZm9yIChwID0gcm9tOyBwIDwgcm9tICsgbGVuZ3RoOyBwKyspCi0JCXN1bSArPSAqcDsKLQlyZXR1cm4gc3VtID09IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBwcm9iZV9yb21zKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydCwgbGVuZ3RoLCB1cHBlcjsKLQl1bnNpZ25lZCBjaGFyICpyb207Ci0JaW50CSAgICAgIGk7Ci0KLQkvKiB2aWRlbyByb20gKi8KLQl1cHBlciA9IGFkYXB0ZXJfcm9tX3Jlc291cmNlc1swXS5zdGFydDsKLQlmb3IgKHN0YXJ0ID0gdmlkZW9fcm9tX3Jlc291cmNlLnN0YXJ0OyBzdGFydCA8IHVwcGVyOyBzdGFydCArPSAyMDQ4KSB7Ci0JCXJvbSA9IGlzYV9idXNfdG9fdmlydChzdGFydCk7Ci0JCWlmICghcm9tc2lnbmF0dXJlKHJvbSkpCi0JCQljb250aW51ZTsKLQotCQl2aWRlb19yb21fcmVzb3VyY2Uuc3RhcnQgPSBzdGFydDsKLQotCQkvKiAwIDwgbGVuZ3RoIDw9IDB4N2YgKiA1MTIsIGhpc3RvcmljYWxseSAqLwotCQlsZW5ndGggPSByb21bMl0gKiA1MTI7Ci0KLQkJLyogaWYgY2hlY2tzdW0gb2theSwgdHJ1c3QgbGVuZ3RoIGJ5dGUgKi8KLQkJaWYgKGxlbmd0aCAmJiByb21jaGVja3N1bShyb20sIGxlbmd0aCkpCi0JCQl2aWRlb19yb21fcmVzb3VyY2UuZW5kID0gc3RhcnQgKyBsZW5ndGggLSAxOwotCi0JCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmdmlkZW9fcm9tX3Jlc291cmNlKTsKLQkJYnJlYWs7Ci0JCQl9Ci0KLQlzdGFydCA9ICh2aWRlb19yb21fcmVzb3VyY2UuZW5kICsgMSArIDIwNDcpICYgfjIwNDdVTDsKLQlpZiAoc3RhcnQgPCB1cHBlcikKLQkJc3RhcnQgPSB1cHBlcjsKLQotCS8qIHN5c3RlbSByb20gKi8KLQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnN5c3RlbV9yb21fcmVzb3VyY2UpOwotCXVwcGVyID0gc3lzdGVtX3JvbV9yZXNvdXJjZS5zdGFydDsKLQotCS8qIGNoZWNrIGZvciBleHRlbnNpb24gcm9tIChpZ25vcmUgbGVuZ3RoIGJ5dGUhKSAqLwotCXJvbSA9IGlzYV9idXNfdG9fdmlydChleHRlbnNpb25fcm9tX3Jlc291cmNlLnN0YXJ0KTsKLQlpZiAocm9tc2lnbmF0dXJlKHJvbSkpIHsKLQkJbGVuZ3RoID0gZXh0ZW5zaW9uX3JvbV9yZXNvdXJjZS5lbmQgLSBleHRlbnNpb25fcm9tX3Jlc291cmNlLnN0YXJ0ICsgMTsKLQkJaWYgKHJvbWNoZWNrc3VtKHJvbSwgbGVuZ3RoKSkgewotCQkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZleHRlbnNpb25fcm9tX3Jlc291cmNlKTsKLQkJCXVwcGVyID0gZXh0ZW5zaW9uX3JvbV9yZXNvdXJjZS5zdGFydDsKLQkJfQotCX0KLQotCS8qIGNoZWNrIGZvciBhZGFwdGVyIHJvbXMgb24gMmsgYm91bmRhcmllcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0ZXJfcm9tX3Jlc291cmNlcykgJiYgc3RhcnQgPCB1cHBlcjsKLQkgICAgIHN0YXJ0ICs9IDIwNDgpIHsKLQkJcm9tID0gaXNhX2J1c190b192aXJ0KHN0YXJ0KTsKLQkJaWYgKCFyb21zaWduYXR1cmUocm9tKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIDAgPCBsZW5ndGggPD0gMHg3ZiAqIDUxMiwgaGlzdG9yaWNhbGx5ICovCi0JCWxlbmd0aCA9IHJvbVsyXSAqIDUxMjsKLQotCQkvKiBidXQgYWNjZXB0IGFueSBsZW5ndGggdGhhdCBmaXRzIGlmIGNoZWNrc3VtIG9rYXkgKi8KLQkJaWYgKCFsZW5ndGggfHwgc3RhcnQgKyBsZW5ndGggPiB1cHBlciB8fCAhcm9tY2hlY2tzdW0ocm9tLCBsZW5ndGgpKQotCQkJY29udGludWU7Ci0KLQkJYWRhcHRlcl9yb21fcmVzb3VyY2VzW2ldLnN0YXJ0ID0gc3RhcnQ7Ci0JCWFkYXB0ZXJfcm9tX3Jlc291cmNlc1tpXS5lbmQgPSBzdGFydCArIGxlbmd0aCAtIDE7Ci0JCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmYWRhcHRlcl9yb21fcmVzb3VyY2VzW2ldKTsKLQotCQlzdGFydCA9IGFkYXB0ZXJfcm9tX3Jlc291cmNlc1tpKytdLmVuZCAmIH4yMDQ3VUw7Ci0JfQotfQotCiAjaWZkZWYgQ09ORklHX1BST0NfVk1DT1JFCiAvKiBlbGZjb3JlaGRyPSBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIGVsZiBjb3JlIGhlYWRlcgogICogc3RvcmVkIGJ5IHRoZSBjcmFzaGVkIGtlcm5lbC4gVGhpcyBvcHRpb24gd2lsbCBiZSBwYXNzZWQKQEAgLTQ0NCw2ICszMjIsMTEgQEAKIAkvKiByZXNlcnZlIGViZGEgcmVnaW9uICovCiAJaWYgKGViZGFfYWRkcikKIAkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMoZWJkYV9hZGRyLCBlYmRhX3NpemUpOworI2lmZGVmIENPTkZJR19OVU1BCisJLyogcmVzZXJ2ZSBub2RlbWFwIHJlZ2lvbiAqLworCWlmIChub2RlbWFwX2FkZHIpCisJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKG5vZGVtYXBfYWRkciwgbm9kZW1hcF9zaXplKTsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qCkBAIC01MTksMTUgKzQwMiwxMSBAQAogCWluaXRfYXBpY19tYXBwaW5ncygpOwogCiAJLyoKLQkgKiBSZXF1ZXN0IGFkZHJlc3Mgc3BhY2UgZm9yIGFsbCBzdGFuZGFyZCBSQU0gYW5kIFJPTSByZXNvdXJjZXMKLQkgKiBhbmQgYWxzbyBmb3IgcmVnaW9ucyByZXBvcnRlZCBhcyByZXNlcnZlZCBieSB0aGUgZTgyMC4KLQkgKi8KLQlwcm9iZV9yb21zKCk7CisJICogV2UgdHJ1c3QgZTgyMCBjb21wbGV0ZWx5LiBObyBleHBsaWNpdCBST00gcHJvYmluZyBpbiBtZW1vcnkuCisgCSAqLwogCWU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXMoKTsgCiAJZTgyMF9tYXJrX25vc2F2ZV9yZWdpb25zKCk7CiAKLQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnZpZGVvX3JhbV9yZXNvdXJjZSk7Ci0KIAl7CiAJdW5zaWduZWQgaTsKIAkvKiByZXF1ZXN0IEkvTyBzcGFjZSBmb3IgZGV2aWNlcyB1c2VkIG9uIGFsbCBpWzM0NV04NiBQQ3MgKi8KQEAgLTEwNjMsNyArOTQyLDggQEAKIAkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgInN5c2NhbGwiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAibngiLCBOVUxMLCAibW14ZXh0IiwgTlVMTCwKLQkJTlVMTCwgImZ4c3Jfb3B0IiwgTlVMTCwgInJkdHNjcCIsIE5VTEwsICJsbSIsICIzZG5vd2V4dCIsICIzZG5vdyIsCisJCU5VTEwsICJmeHNyX29wdCIsICJwZHBlMWdiIiwgInJkdHNjcCIsIE5VTEwsICJsbSIsCisJCSIzZG5vd2V4dCIsICIzZG5vdyIsCiAKIAkJLyogVHJhbnNtZXRhLWRlZmluZWQgKi8KIAkJInJlY292ZXJ5IiwgImxvbmdydW4iLCBOVUxMLCAibHJ0aSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCkBAIC0xMDgxLDcgKzk2MSw3IEBACiAJCS8qIEludGVsLWRlZmluZWQgKCMyKSAqLwogCQkicG5pIiwgTlVMTCwgTlVMTCwgIm1vbml0b3IiLCAiZHNfY3BsIiwgInZteCIsICJzbXgiLCAiZXN0IiwKIAkJInRtMiIsICJzc3NlMyIsICJjaWQiLCBOVUxMLCBOVUxMLCAiY3gxNiIsICJ4dHByIiwgTlVMTCwKLQkJTlVMTCwgTlVMTCwgImRjYSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsICJkY2EiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAicG9wY250IiwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIAogCQkvKiBWSUEvQ3lyaXgvQ2VudGF1ci1kZWZpbmVkICovCkBAIC0xMDkxLDggKzk3MSwxMCBAQAogCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCiAJCS8qIEFNRC1kZWZpbmVkICgjMikgKi8KLQkJImxhaGZfbG0iLCAiY21wX2xlZ2FjeSIsICJzdm0iLCBOVUxMLCAiY3I4X2xlZ2FjeSIsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJsYWhmX2xtIiwgImNtcF9sZWdhY3kiLCAic3ZtIiwgImV4dGFwaWMiLCAiY3I4X2xlZ2FjeSIsCisJCSJhbHRtb3ZjcjgiLCAiYWJtIiwgInNzZTRhIiwKKwkJIm1pc2FsaWduc3NlIiwgIjNkbm93cHJlZmV0Y2giLAorCQkib3N2dyIsICJpYnMiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCX07CkBAIC0xMTAzLDYgKzk4NSw5IEBACiAJCSJ0dHAiLCAgLyogdGhlcm1hbCB0cmlwICovCiAJCSJ0bSIsCiAJCSJzdGMiLAorCQkiMTAwbWh6c3RlcHMiLAorCQkiaHdwc3RhdGUiLAorCQlOVUxMLAkvKiB0c2MgaW52YXJpYW50IG1hcHBlZCB0byBjb25zdGFudF90c2MgKi8KIAkJTlVMTCwKIAkJLyogbm90aGluZyAqLwkvKiBjb25zdGFudF90c2MgLSBtb3ZlZCB0byBmbGFncyAqLwogCX07CkBAIC0xMjE5LDIzICsxMTA0LDMgQEAKIAkuc3RvcCA9CWNfc3RvcCwKIAkuc2hvdyA9CXNob3dfY3B1aW5mbywKIH07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9QQ1NQS1IpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX1BDU1BLUl9NT0RVTEUpCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci1zdGF0aWMgX19pbml0IGludCBhZGRfcGNzcGtyKHZvaWQpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7Ci0JaW50IHJldDsKLQotCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwY3Nwa3IiLCAtMSk7Ci0JaWYgKCFwZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKLQlpZiAocmV0KQotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKLQotCXJldHVybiByZXQ7Ci19Ci1kZXZpY2VfaW5pdGNhbGwoYWRkX3Bjc3Brcik7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXA2NC5jCmluZGV4IDhjNGI4MGYuLjZhNzBiNTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYwpAQCAtMzcsNyArMzcsNiBAQAogY2hhciBib290X2NwdV9zdGFja1tJUlFTVEFDS1NJWkVdIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5ic3MucGFnZV9hbGlnbmVkIikpKTsKIAogdW5zaWduZWQgbG9uZyBfX3N1cHBvcnRlZF9wdGVfbWFzayBfX3JlYWRfbW9zdGx5ID0gfjBVTDsKLUVYUE9SVF9TWU1CT0woX19zdXBwb3J0ZWRfcHRlX21hc2spOwogc3RhdGljIGludCBkb19ub3RfbnggX19jcHVpbml0ZGF0YSA9IDA7CiAKIC8qIG5vZXhlYz1vbnxvZmYKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGRhZjE5MzMuLjM1NDQzNzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtMTQ4LDIxNyArMTQ4LDYgQEAKIAlwcmludF9jcHVfaW5mbyhjKTsKIH0KIAotLyoKLSAqIE5ldyBGdW5reSBUU0Mgc3luYyBhbGdvcml0aG0gYm9ycm93ZWQgZnJvbSBJQTY0LgotICogTWFpbiBhZHZhbnRhZ2UgaXMgdGhhdCBpdCBkb2Vzbid0IHJlc2V0IHRoZSBUU0NzIGZ1bGx5IGFuZAotICogaW4gZ2VuZXJhbCBsb29rcyBtb3JlIHJvYnVzdCBhbmQgaXQgd29ya3MgYmV0dGVyIHRoYW4gbXkgZWFybGllcgotICogYXR0ZW1wdHMuIEkgYmVsaWV2ZSBpdCB3YXMgd3JpdHRlbiBieSBEYXZpZCBNb3NiZXJnZXIuIFNvbWUgbWlub3IKLSAqIGFkanVzdG1lbnRzIGZvciB4ODYtNjQgYnkgbWUgLUFLCi0gKgotICogT3JpZ2luYWwgY29tbWVudCByZXByb2R1Y2VkIGJlbG93LgotICoKLSAqIFN5bmNocm9uaXplIFRTQyBvZiB0aGUgY3VycmVudCAoc2xhdmUpIENQVSB3aXRoIHRoZSBUU0Mgb2YgdGhlCi0gKiBNQVNURVIgQ1BVIChub3JtYWxseSB0aGUgdGltZS1rZWVwZXIgQ1BVKS4gIFdlIHVzZSBhIGNsb3NlZCBsb29wIHRvCi0gKiBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IG9mIHVuYWNjb3VudGVkLWZvciBlcnJvcnMgKHN1Y2ggYXMKLSAqIGdldHRpbmcgYSBtYWNoaW5lIGNoZWNrIGluIHRoZSBtaWRkbGUgb2YgYSBjYWxpYnJhdGlvbiBzdGVwKS4gIFRoZQotICogYmFzaWMgaWRlYSBpcyBmb3IgdGhlIHNsYXZlIHRvIGFzayB0aGUgbWFzdGVyIHdoYXQgaXRjIHZhbHVlIGl0IGhhcwotICogYW5kIHRvIHJlYWQgaXRzIG93biBpdGMgYmVmb3JlIGFuZCBhZnRlciB0aGUgbWFzdGVyIHJlc3BvbmRzLiAgRWFjaAotICogaXRlcmF0aW9uIGdpdmVzIHVzIHRocmVlIHRpbWVzdGFtcHM6Ci0gKgotICoJc2xhdmUJCW1hc3RlcgotICoKLSAqCXQwIC0tLVwKLSAqICAgICAgICAgICAgIC0tLVwKLSAqCQkgICAtLS0+Ci0gKgkJCXRtCi0gKgkJICAgLy0tLQotICoJICAgICAgIC8tLS0KLSAqCXQxIDwtLS0KLSAqCi0gKgotICogVGhlIGdvYWwgaXMgdG8gYWRqdXN0IHRoZSBzbGF2ZSdzIFRTQyBzdWNoIHRoYXQgdG0gZmFsbHMgZXhhY3RseQotICogaGFsZi13YXkgYmV0d2VlbiB0MCBhbmQgdDEuICBJZiB3ZSBhY2hpZXZlIHRoaXMsIHRoZSBjbG9ja3MgYXJlCi0gKiBzeW5jaHJvbml6ZWQgcHJvdmlkZWQgdGhlIGludGVyY29ubmVjdCBiZXR3ZWVuIHRoZSBzbGF2ZSBhbmQgdGhlCi0gKiBtYXN0ZXIgaXMgc3ltbWV0cmljLiAgRXZlbiBpZiB0aGUgaW50ZXJjb25uZWN0IHdlcmUgYXN5bW1ldHJpYywgd2UKLSAqIHdvdWxkIHN0aWxsIGtub3cgdGhhdCB0aGUgc3luY2hyb25pemF0aW9uIGVycm9yIGlzIHNtYWxsZXIgdGhhbiB0aGUKLSAqIHJvdW5kdHJpcCBsYXRlbmN5ICh0MCAtIHQxKS4KLSAqCi0gKiBXaGVuIHRoZSBpbnRlcmNvbm5lY3QgaXMgcXVpZXQgYW5kIHN5bW1ldHJpYywgdGhpcyBsZXRzIHVzCi0gKiBzeW5jaHJvbml6ZSB0aGUgVFNDIHRvIHdpdGhpbiBvbmUgb3IgdHdvIGN5Y2xlcy4gIEhvd2V2ZXIsIHdlIGNhbgotICogb25seSAqZ3VhcmFudGVlKiB0aGF0IHRoZSBzeW5jaHJvbml6YXRpb24gaXMgYWNjdXJhdGUgdG8gd2l0aGluIGEKLSAqIHJvdW5kLXRyaXAgdGltZSwgd2hpY2ggaXMgdHlwaWNhbGx5IGluIHRoZSByYW5nZSBvZiBzZXZlcmFsIGh1bmRyZWQKLSAqIGN5Y2xlcyAoZS5nLiwgfjUwMCBjeWNsZXMpLiAgSW4gcHJhY3RpY2UsIHRoaXMgbWVhbnMgdGhhdCB0aGUgVFNDcwotICogYXJlIHVzdWFsbHkgYWxtb3N0IHBlcmZlY3RseSBzeW5jaHJvbml6ZWQsIGJ1dCB3ZSBzaG91bGRuJ3QgYXNzdW1lCi0gKiB0aGF0IHRoZSBhY2N1cmFjeSBpcyBtdWNoIGJldHRlciB0aGFuIGhhbGYgYSBtaWNybyBzZWNvbmQgb3Igc28uCi0gKgotICogW3RoZXJlIGFyZSBvdGhlciBlcnJvcnMgbGlrZSB0aGUgbGF0ZW5jeSBvZiBSRFRTQyBhbmQgb2YgdGhlCi0gKiBXUk1TUi4gVGhlc2UgY2FuIGFsc28gYWNjb3VudCB0byBodW5kcmVkcyBvZiBjeWNsZXMuIFNvIGl0J3MKLSAqIHByb2JhYmx5IHdvcnNlLiBJdCBjbGFpbXMgMTUzIGN5Y2xlcyBlcnJvciBvbiBhIGR1YWwgT3B0ZXJvbiwKLSAqIGJ1dCBJIHN1c3BlY3QgdGhlIG51bWJlcnMgYXJlIGFjdHVhbGx5IHNvbWV3aGF0IHdvcnNlIC1BS10KLSAqLwotCi0jZGVmaW5lIE1BU1RFUgkwCi0jZGVmaW5lIFNMQVZFCShTTVBfQ0FDSEVfQllURVMvOCkKLQotLyogSW50ZW50aW9uYWxseSBkb24ndCB1c2UgY3B1X3JlbGF4KCkgd2hpbGUgVFNDIHN5bmNocm9uaXphdGlvbgotICAgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGdvIGludG8gZnVua3kgcG93ZXIgc2F2ZSBtb2RpIG9yIGNhdXNlCi0gICBoeXBlcnZpc29ycyB0byBzY2hlZHVsZSB1cyBhd2F5LiAgR29pbmcgdG8gc2xlZXAgd291bGQgbGlrZWx5IGFmZmVjdAotICAgbGF0ZW5jeSBhbmQgbG93IGxhdGVuY3kgaXMgdGhlIHByaW1hcnkgb2JqZWN0aXZlIGhlcmUuIC1BSyAqLwotI2RlZmluZSBub19jcHVfcmVsYXgoKSBiYXJyaWVyKCkKLQotc3RhdGljIF9fY3B1aW5pdGRhdGEgREVGSU5FX1NQSU5MT0NLKHRzY19zeW5jX2xvY2spOwotc3RhdGljIHZvbGF0aWxlIF9fY3B1aW5pdGRhdGEgdW5zaWduZWQgbG9uZyBnb1tTTEFWRSArIDFdOwotc3RhdGljIGludCBub3RzY3N5bmMgX19jcHVpbml0ZGF0YTsKLQotI3VuZGVmIERFQlVHX1RTQ19TWU5DCi0KLSNkZWZpbmUgTlVNX1JPVU5EUwk2NAkvKiBtYWdpYyB2YWx1ZSAqLwotI2RlZmluZSBOVU1fSVRFUlMJNQkvKiBsaWtld2lzZSAqLwotCi0vKiBDYWxsYmFjayBvbiBib290IENQVSAqLwotc3RhdGljIF9fY3B1aW5pdCB2b2lkIHN5bmNfbWFzdGVyKHZvaWQgKmFyZykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpOwotCi0JZ29bTUFTVEVSXSA9IDA7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JewotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JPVU5EUypOVU1fSVRFUlM7ICsraSkgewotCQkJd2hpbGUgKCFnb1tNQVNURVJdKQotCQkJCW5vX2NwdV9yZWxheCgpOwotCQkJZ29bTUFTVEVSXSA9IDA7Ci0JCQlyZHRzY2xsKGdvW1NMQVZFXSk7Ci0JCX0KLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY3ljbGVzIGJ5IHdoaWNoIG91ciB0c2MgZGlmZmVycyBmcm9tIHRoZSB0c2MKLSAqIG9uIHRoZSBtYXN0ZXIgKHRpbWUta2VlcGVyKSBDUFUuICBBIHBvc2l0aXZlIG51bWJlciBpbmRpY2F0ZXMgb3VyCi0gKiB0c2MgaXMgYWhlYWQgb2YgdGhlIG1hc3RlciwgbmVnYXRpdmUgdGhhdCBpdCBpcyBiZWhpbmQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgbG9uZwotZ2V0X2RlbHRhKGxvbmcgKnJ0LCBsb25nICptYXN0ZXIpCi17Ci0JdW5zaWduZWQgbG9uZyBiZXN0X3QwID0gMCwgYmVzdF90MSA9IH4wVUwsIGJlc3RfdG0gPSAwOwotCXVuc2lnbmVkIGxvbmcgdGNlbnRlciwgdDAsIHQxLCB0bTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fSVRFUlM7ICsraSkgewotCQlyZHRzY2xsKHQwKTsKLQkJZ29bTUFTVEVSXSA9IDE7Ci0JCXdoaWxlICghKHRtID0gZ29bU0xBVkVdKSkKLQkJCW5vX2NwdV9yZWxheCgpOwotCQlnb1tTTEFWRV0gPSAwOwotCQlyZHRzY2xsKHQxKTsKLQotCQlpZiAodDEgLSB0MCA8IGJlc3RfdDEgLSBiZXN0X3QwKQotCQkJYmVzdF90MCA9IHQwLCBiZXN0X3QxID0gdDEsIGJlc3RfdG0gPSB0bTsKLQl9Ci0KLQkqcnQgPSBiZXN0X3QxIC0gYmVzdF90MDsKLQkqbWFzdGVyID0gYmVzdF90bSAtIGJlc3RfdDA7Ci0KLQkvKiBhdmVyYWdlIGJlc3RfdDAgYW5kIGJlc3RfdDEgd2l0aG91dCBvdmVyZmxvdzogKi8KLQl0Y2VudGVyID0gKGJlc3RfdDAvMiArIGJlc3RfdDEvMik7Ci0JaWYgKGJlc3RfdDAgJSAyICsgYmVzdF90MSAlIDIgPT0gMikKLQkJKyt0Y2VudGVyOwotCXJldHVybiB0Y2VudGVyIC0gYmVzdF90bTsKLX0KLQotc3RhdGljIF9fY3B1aW5pdCB2b2lkIHN5bmNfdHNjKHVuc2lnbmVkIGludCBtYXN0ZXIpCi17Ci0JaW50IGksIGRvbmUgPSAwOwotCWxvbmcgZGVsdGEsIGFkaiwgYWRqdXN0X2xhdGVuY3kgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJ0LCBtYXN0ZXJfdGltZV9zdGFtcCwgYm91bmQ7Ci0jaWZkZWYgREVCVUdfVFNDX1NZTkMKLQlzdGF0aWMgc3RydWN0IHN5bmNkZWJ1ZyB7Ci0JCWxvbmcgcnQ7CS8qIHJvdW5kdHJpcCB0aW1lICovCi0JCWxvbmcgbWFzdGVyOwkvKiBtYXN0ZXIncyB0aW1lc3RhbXAgKi8KLQkJbG9uZyBkaWZmOwkvKiBkaWZmZXJlbmNlIGJldHdlZW4gbWlkcG9pbnQgYW5kIG1hc3RlcidzIHRpbWVzdGFtcCAqLwotCQlsb25nIGxhdDsJLyogZXN0aW1hdGUgb2YgdHNjIGFkanVzdG1lbnQgbGF0ZW5jeSAqLwotCX0gdFtOVU1fUk9VTkRTXSBfX2NwdWluaXRkYXRhOwotI2VuZGlmCi0KLQlwcmludGsoS0VSTl9JTkZPICJDUFUgJWQ6IFN5bmNpbmcgVFNDIHRvIENQVSAldS5cbiIsCi0JCXNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzdGVyKTsKLQotCWdvW01BU1RFUl0gPSAxOwotCi0JLyogSXQgaXMgZGFuZ2Vyb3VzIHRvIGJyb2FkY2FzdCBJUEkgYXMgY3B1cyBhcmUgY29taW5nIHVwLAotCSAqIGFzIHRoZXkgbWF5IG5vdCBiZSByZWFkeSB0byBhY2NlcHQgdGhlbS4gIFNvIHNpbmNlCi0JICogd2Ugb25seSBuZWVkIHRvIHNlbmQgdGhlIGlwaSB0byB0aGUgYm9vdCBjcHUgZGlyZWN0Ci0JICogdGhlIG1lc3NhZ2UsIGFuZCBhdm9pZCB0aGUgcmFjZS4KLQkgKi8KLQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUobWFzdGVyLCBzeW5jX21hc3RlciwgTlVMTCwgMSwgMCk7Ci0KLQl3aGlsZSAoZ29bTUFTVEVSXSkJLyogd2FpdCBmb3IgbWFzdGVyIHRvIGJlIHJlYWR5ICovCi0JCW5vX2NwdV9yZWxheCgpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzY19zeW5jX2xvY2ssIGZsYWdzKTsKLQl7Ci0JCWZvciAoaSA9IDA7IGkgPCBOVU1fUk9VTkRTOyArK2kpIHsKLQkJCWRlbHRhID0gZ2V0X2RlbHRhKCZydCwgJm1hc3Rlcl90aW1lX3N0YW1wKTsKLQkJCWlmIChkZWx0YSA9PSAwKSB7Ci0JCQkJZG9uZSA9IDE7CS8qIGxldCdzIGxvY2sgb24gdG8gdGhpcy4uLiAqLwotCQkJCWJvdW5kID0gcnQ7Ci0JCQl9Ci0KLQkJCWlmICghZG9uZSkgewotCQkJCXVuc2lnbmVkIGxvbmcgdDsKLQkJCQlpZiAoaSA+IDApIHsKLQkJCQkJYWRqdXN0X2xhdGVuY3kgKz0gLWRlbHRhOwotCQkJCQlhZGogPSAtZGVsdGEgKyBhZGp1c3RfbGF0ZW5jeS80OwotCQkJCX0gZWxzZQotCQkJCQlhZGogPSAtZGVsdGE7Ci0KLQkJCQlyZHRzY2xsKHQpOwotCQkJCXdybXNybChNU1JfSUEzMl9UU0MsIHQgKyBhZGopOwotCQkJfQotI2lmZGVmIERFQlVHX1RTQ19TWU5DCi0JCQl0W2ldLnJ0ID0gcnQ7Ci0JCQl0W2ldLm1hc3RlciA9IG1hc3Rlcl90aW1lX3N0YW1wOwotCQkJdFtpXS5kaWZmID0gZGVsdGE7Ci0JCQl0W2ldLmxhdCA9IGFkanVzdF9sYXRlbmN5LzQ7Ci0jZW5kaWYKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0c2Nfc3luY19sb2NrLCBmbGFncyk7Ci0KLSNpZmRlZiBERUJVR19UU0NfU1lOQwotCWZvciAoaSA9IDA7IGkgPCBOVU1fUk9VTkRTOyArK2kpCi0JCXByaW50aygicnQ9JTVsZCBtYXN0ZXI9JTVsZCBkaWZmPSU1bGQgYWRqbGF0PSU1bGRcbiIsCi0JCSAgICAgICB0W2ldLnJ0LCB0W2ldLm1hc3RlciwgdFtpXS5kaWZmLCB0W2ldLmxhdCk7Ci0jZW5kaWYKLQotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIkNQVSAlZDogc3luY2hyb25pemVkIFRTQyB3aXRoIENQVSAldSAobGFzdCBkaWZmICVsZCBjeWNsZXMsICIKLQkgICAgICAgIm1heGVyciAlbHUgY3ljbGVzKVxuIiwKLQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBtYXN0ZXIsIGRlbHRhLCBydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCB0c2Nfc3luY193YWl0KHZvaWQpCi17Ci0JLyoKLQkgKiBXaGVuIHRoZSBDUFUgaGFzIHN5bmNocm9uaXplZCBUU0NzIGFzc3VtZSB0aGUgQklPUwotICAJICogb3IgdGhlIGhhcmR3YXJlIGFscmVhZHkgc3luY2VkLiAgT3RoZXJ3aXNlIHdlIGNvdWxkCi0JICogbWVzcyB1cCBhIHBvc3NpYmxlIHBlcmZlY3Qgc3luY2hyb25pemF0aW9uIHdpdGggYQotCSAqIG5vdC1xdWl0ZS1wZXJmZWN0IGFsZ29yaXRobS4KLQkgKi8KLQlpZiAobm90c2NzeW5jIHx8ICFjcHVfaGFzX3RzYyB8fCAhdW5zeW5jaHJvbml6ZWRfdHNjKCkpCi0JCXJldHVybjsKLQlzeW5jX3RzYygwKTsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgbm90c2NzeW5jX3NldHVwKGNoYXIgKnMpCi17Ci0Jbm90c2NzeW5jID0gMTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoIm5vdHNjc3luYyIsIG5vdHNjc3luY19zZXR1cCk7Ci0KIHN0YXRpYyBhdG9taWNfdCBpbml0X2RlYXNzZXJ0ZWQgX19jcHVpbml0ZGF0YTsKIAogLyoKQEAgLTU0Niw2ICszMzUsMTEgQEAKIAkvKiBvdGhlcndpc2UgZ2NjIHdpbGwgbW92ZSB1cCB0aGUgc21wX3Byb2Nlc3Nvcl9pZCBiZWZvcmUgdGhlIGNwdV9pbml0ICovCiAJYmFycmllcigpOwogCisJLyoKKyAgCSAqIENoZWNrIFRTQyBzeW5jIGZpcnN0OgorIAkgKi8KKwljaGVja190c2Nfc3luY190YXJnZXQoKTsKKwogCURwcmludGsoImNwdSAlZDogc2V0dGluZyB1cCBhcGljIGNsb2NrXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOyAJCiAJc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2soKTsKIApAQCAtNTY1LDE0ICszNTksNiBAQAogCSAqLwogCXNldF9jcHVfc2libGluZ19tYXAoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCS8qIAotICAJICogV2FpdCBmb3IgVFNDIHN5bmMgdG8gbm90IHNjaGVkdWxlIHRoaW5ncyBiZWZvcmUuCi0JICogV2Ugc3RpbGwgcHJvY2VzcyBpbnRlcnJ1cHRzLCB3aGljaCBjb3VsZCBzZWUgYW4gaW5jb25zaXN0ZW50Ci0JICogdGltZSBpbiB0aGF0IHdpbmRvdyB1bmZvcnR1bmF0ZWx5LiAKLQkgKiBEbyB0aGlzIGhlcmUgYmVjYXVzZSBUU0Mgc3luYyBoYXMgZ2xvYmFsIHVucHJvdGVjdGVkIHN0YXRlLgotIAkgKi8KLQl0c2Nfc3luY193YWl0KCk7Ci0KIAkvKgogCSAqIFdlIG5lZWQgdG8gaG9sZCBjYWxsX2xvY2ssIHNvIHRoZXJlIGlzIG5vIGluY29uc2lzdGVuY3kKIAkgKiBiZXR3ZWVuIHRoZSB0aW1lIHNtcF9jYWxsX2Z1bmN0aW9uKCkgZGV0ZXJtaW5lcyBudW1iZXIgb2YKQEAgLTU5Miw2ICszNzgsNyBAQAogCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7CiAJcGVyX2NwdShjcHVfc3RhdGUsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBDUFVfT05MSU5FOwogCXNwaW5fdW5sb2NrKCZ2ZWN0b3JfbG9jayk7CisKIAl1bmxvY2tfaXBpX2NhbGxfbG9jaygpOwogCiAJY3B1X2lkbGUoKTsKQEAgLTExNjgsNiArOTU1LDExIEBACiAJLyogVW5sZWFzaCB0aGUgQ1BVISAqLwogCURwcmludGsoIndhaXRpbmcgZm9yIGNwdSAlZFxuIiwgY3B1KTsKIAorCS8qCisgIAkgKiBNYWtlIHN1cmUgYW5kIGNoZWNrIFRTQyBzeW5jOgorIAkgKi8KKwljaGVja190c2Nfc3luY19zb3VyY2UoY3B1KTsKKwogCXdoaWxlICghY3B1X2lzc2V0KGNwdSwgY3B1X29ubGluZV9tYXApKQogCQljcHVfcmVsYXgoKTsKIApAQCAtMTE5MCw3ICs5ODIsNiBAQAogCXNtcF9jbGVhbnVwX2Jvb3QoKTsKIAlzZXR1cF9pb2FwaWNfZGVzdCgpOwogCWNoZWNrX25taV93YXRjaGRvZygpOwotCXRpbWVfaW5pdF9ndG9kKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IDYwMjZiMzEuLjY1YWMyYzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMzIsNyArMzIsNyBAQAogCQl0cmFjZS0+c2tpcC0tOwogCQlyZXR1cm47CiAJfQotCWlmICh0cmFjZS0+bnJfZW50cmllcyA8IHRyYWNlLT5tYXhfZW50cmllcyAtIDEpCisJaWYgKHRyYWNlLT5ucl9lbnRyaWVzIDwgdHJhY2UtPm1heF9lbnRyaWVzKQogCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IGFkZHI7CiB9CiAKQEAgLTQ5LDcgKzQ5LDggQEAKIHZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJZHVtcF90cmFjZSh0YXNrLCBOVUxMLCBOVUxMLCAmc2F2ZV9zdGFja19vcHMsIHRyYWNlKTsKLQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IFVMT05HX01BWDsKKwlpZiAodHJhY2UtPm5yX2VudHJpZXMgPCB0cmFjZS0+bWF4X2VudHJpZXMpCisJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gVUxPTkdfTUFYOwogfQogRVhQT1JUX1NZTUJPTChzYXZlX3N0YWNrX3RyYWNlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKaW5kZXggMzM1Y2M5MS4uYzlhZGRjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCkBAIC00MiwxMCArNDIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9ocGV0Lmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgogCi0jaWZkZWYgQ09ORklHX0NQVV9GUkVRCi1zdGF0aWMgdm9pZCBjcHVmcmVxX2RlbGF5ZWRfZ2V0KHZvaWQpOwotI2VuZGlmCiBleHRlcm4gdm9pZCBpODI1NF90aW1lcl9yZXN1bWUodm9pZCk7CiBleHRlcm4gaW50IHVzaW5nX2FwaWNfdGltZXI7CiAKQEAgLTU1LDEyOCArNTMsNyBAQAogRVhQT1JUX1NZTUJPTChydGNfbG9jayk7CiBERUZJTkVfU1BJTkxPQ0soaTgyNTNfbG9jayk7CiAKLWludCBub2hwZXQgX19pbml0ZGF0YSA9IDA7Ci1zdGF0aWMgaW50IG5vdHNjIF9faW5pdGRhdGEgPSAwOwotCi0jZGVmaW5lIFVTRUNfUEVSX1RJQ0sgKFVTRUNfUEVSX1NFQyAvIEhaKQotI2RlZmluZSBOU0VDX1BFUl9USUNLIChOU0VDX1BFUl9TRUMgLyBIWikKLSNkZWZpbmUgRlNFQ19QRVJfVElDSyAoRlNFQ19QRVJfU0VDIC8gSFopCi0KLSNkZWZpbmUgTlNfU0NBTEUJMTAgLyogMl4xMCwgY2FyZWZ1bGx5IGNob3NlbiAqLwotI2RlZmluZSBVU19TQ0FMRQkzMiAvKiAyXjMyLCBhcmJpdHJhbHJpbHkgY2hvc2VuICovCi0KLXVuc2lnbmVkIGludCBjcHVfa2h6OwkJCQkJLyogVFNDIGNsb2NrcyAvIHVzZWMsIG5vdCB1c2VkIGhlcmUgKi8KLUVYUE9SVF9TWU1CT0woY3B1X2toeik7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBocGV0X3BlcmlvZDsJCQkvKiBmc2VjcyAvIEhQRVQgY2xvY2sgKi8KLXVuc2lnbmVkIGxvbmcgaHBldF90aWNrOwkJCQkvKiBIUEVUIGNsb2NrcyAvIGludGVycnVwdCAqLwotaW50IGhwZXRfdXNlX3RpbWVyOwkJCQkvKiBVc2UgY291bnRlciBvZiBocGV0IGZvciB0aW1lIGtlZXBpbmcsIG90aGVyd2lzZSBQSVQgKi8KLXVuc2lnbmVkIGxvbmcgdnh0aW1lX2h6ID0gUElUX1RJQ0tfUkFURTsKLWludCByZXBvcnRfbG9zdF90aWNrczsJCQkJLyogY29tbWFuZCBsaW5lIG9wdGlvbiAqLwotdW5zaWduZWQgbG9uZyBsb25nIG1vbm90b25pY19iYXNlOwotCi1zdHJ1Y3Qgdnh0aW1lX2RhdGEgX192eHRpbWUgX19zZWN0aW9uX3Z4dGltZTsJLyogZm9yIHZzeXNjYWxscyAqLwotCiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9famlmZmllcyBfX3NlY3Rpb25famlmZmllcyA9IElOSVRJQUxfSklGRklFUzsKLXN0cnVjdCB0aW1lc3BlYyBfX3h0aW1lIF9fc2VjdGlvbl94dGltZTsKLXN0cnVjdCB0aW1lem9uZSBfX3N5c190eiBfX3NlY3Rpb25fc3lzX3R6OwotCi0vKgotICogZG9fZ2V0dGltZW9mZnNldCgpIHJldHVybnMgbWljcm9zZWNvbmRzIHNpbmNlIGxhc3QgdGltZXIgaW50ZXJydXB0IHdhcwotICogdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlLiBBIG1lbW9yeSByZWFkIG9mIEhQRVQgaXMgc2xvd2VyIHRoYW4gYSByZWdpc3RlciByZWFkCi0gKiBvZiBUU0MsIGJ1dCBtdWNoIG1vcmUgcmVsaWFibGUuIEl0J3MgYWxzbyBzeW5jaHJvbml6ZWQgdG8gdGhlIHRpbWVyCi0gKiBpbnRlcnJ1cHQuIE5vdGUgdGhhdCBkb19nZXR0aW1lb2Zmc2V0KCkgbWF5IHJldHVybiBtb3JlIHRoYW4gaHBldF90aWNrLCBpZiBhCi0gKiB0aW1lciBpbnRlcnJ1cHQgaGFzIGhhcHBlbmVkIGFscmVhZHksIGJ1dCB2eHRpbWUudHJpZ2dlciB3YXNuJ3QgdXBkYXRlZCB5ZXQuCi0gKiBUaGlzIGlzIG5vdCBhIHByb2JsZW0sIGJlY2F1c2UgamlmZmllcyBoYXNuJ3QgdXBkYXRlZCBlaXRoZXIuIFRoZXkgYXJlIGJvdW5kCi0gKiB0b2dldGhlciBieSB4dGltZV9sb2NrLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRvX2dldHRpbWVvZmZzZXRfdHNjKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0OwotCXVuc2lnbmVkIGxvbmcgeDsKLQl0ID0gZ2V0X2N5Y2xlc19zeW5jKCk7Ci0JaWYgKHQgPCB2eHRpbWUubGFzdF90c2MpIAotCQl0ID0gdnh0aW1lLmxhc3RfdHNjOyAvKiBoYWNrICovCi0JeCA9ICgodCAtIHZ4dGltZS5sYXN0X3RzYykgKiB2eHRpbWUudHNjX3F1b3QpID4+IFVTX1NDQUxFOwotCXJldHVybiB4OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkb19nZXR0aW1lb2Zmc2V0X2hwZXQodm9pZCkKLXsKLQkvKiBjYXAgY291bnRlciByZWFkIHRvIG9uZSB0aWNrIHRvIGF2b2lkIGluY29uc2lzdGVuY2llcyAqLwotCXVuc2lnbmVkIGxvbmcgY291bnRlciA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKSAtIHZ4dGltZS5sYXN0OwotCXJldHVybiAobWluKGNvdW50ZXIsaHBldF90aWNrKSAqIHZ4dGltZS5xdW90KSA+PiBVU19TQ0FMRTsKLX0KLQotdW5zaWduZWQgaW50ICgqZG9fZ2V0dGltZW9mZnNldCkodm9pZCkgPSBkb19nZXR0aW1lb2Zmc2V0X3RzYzsKLQotLyoKLSAqIFRoaXMgdmVyc2lvbiBvZiBnZXR0aW1lb2ZkYXkoKSBoYXMgbWljcm9zZWNvbmQgcmVzb2x1dGlvbiBhbmQgYmV0dGVyIHRoYW4KLSAqIG1pY3Jvc2Vjb25kIHByZWNpc2lvbiwgYXMgd2UncmUgdXNpbmcgYXQgbGVhc3QgYSAxMCBNSHogKHVzdWFsbHkgMTQuMzE4MTgKLSAqIE1IeikgSFBFVCB0aW1lci4KLSAqLwotCi12b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCi17Ci0JdW5zaWduZWQgbG9uZyBzZXE7Ci0gCXVuc2lnbmVkIGludCBzZWMsIHVzZWM7Ci0KLQlkbyB7Ci0JCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwotCi0JCXNlYyA9IHh0aW1lLnR2X3NlYzsKLQkJdXNlYyA9IHh0aW1lLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDOwotCi0JCS8qIGkzODYgZG9lcyBzb21lIGNvcnJlY3Rpb24gaGVyZSB0byBrZWVwIHRoZSBjbG9jayAKLQkJICAgbW9ub3Rvbm91cyBldmVuIHdoZW4gbnRwZCBpcyBmaXhpbmcgZHJpZnQuCi0JCSAgIEJ1dCB0aGV5IGRpZG4ndCB3b3JrIGZvciBtZSwgdGhlcmUgaXMgYSBub24gbW9ub3RvbmljCi0JCSAgIGNsb2NrIGFueXdheXMgd2l0aCBudHAuCi0JCSAgIEkgZHJvcHBlZCBhbGwgY29ycmVjdGlvbnMgbm93IHVudGlsIGEgcmVhbCBzb2x1dGlvbiBjYW4KLQkJICAgYmUgZm91bmQuIE5vdGUgd2hlbiB5b3UgZml4IGl0IGhlcmUgeW91IG5lZWQgdG8gZG8gdGhlIHNhbWUKLQkJICAgaW4gYXJjaC94ODZfNjQva2VybmVsL3ZzeXNjYWxsLmMgYW5kIGV4cG9ydCBhbGwgbmVlZGVkCi0JCSAgIHZhcmlhYmxlcyBpbiB2bWxpbnV4Lmxkcy4gLUFLICovIAotCQl1c2VjICs9IGRvX2dldHRpbWVvZmZzZXQoKTsKLQotCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwotCi0JdHYtPnR2X3NlYyA9IHNlYyArIHVzZWMgLyBVU0VDX1BFUl9TRUM7Ci0JdHYtPnR2X3VzZWMgPSB1c2VjICUgVVNFQ19QRVJfU0VDOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7Ci0KLS8qCi0gKiBzZXR0aW1lb2ZkYXkoKSBmaXJzdCB1bmRvZXMgdGhlIGNvcnJlY3Rpb24gdGhhdCBnZXR0aW1lb2ZkYXkgd291bGQgZG8KLSAqIG9uIHRoZSB0aW1lLCBhbmQgdGhlbiBzYXZlcyBpdC4gVGhpcyBpcyB1Z2x5LCBidXQgaGFzIGJlZW4gbGlrZSB0aGlzIGZvcgotICogYWdlcyBhbHJlYWR5LgotICovCi0KLWludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKLXsKLQl0aW1lX3Qgd3RtX3NlYywgc2VjID0gdHYtPnR2X3NlYzsKLQlsb25nIHd0bV9uc2VjLCBuc2VjID0gdHYtPnR2X25zZWM7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQotCW5zZWMgLT0gZG9fZ2V0dGltZW9mZnNldCgpICogTlNFQ19QRVJfVVNFQzsKLQotCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7Ci0Jd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKLQotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKLQotCW50cF9jbGVhcigpOwotCi0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JY2xvY2tfd2FzX3NldCgpOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7CiAKIHVuc2lnbmVkIGxvbmcgcHJvZmlsZV9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTI2Nyw4NCArMTQ0LDkgQEAKIH0KIAogCi0vKiBtb25vdG9uaWNfY2xvY2soKTogcmV0dXJucyAjIG9mIG5hbm9zZWNvbmRzIHBhc3NlZCBzaW5jZSB0aW1lX2luaXQoKQotICoJCU5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gcmV0dXJuIGFjY3VyYXRlCi0gKgkJdGltZSBldmVuIGluIHRoZSBhYnNlbmNlIG9mIG11bHRpcGxlIHRpbWVyIHRpY2tzLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBjeWNsZXNfMl9ucyh1bnNpZ25lZCBsb25nIGxvbmcgY3ljKTsKLXVuc2lnbmVkIGxvbmcgbG9uZyBtb25vdG9uaWNfY2xvY2sodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHNlcTsKLSAJdTMyIGxhc3Rfb2Zmc2V0LCB0aGlzX29mZnNldCwgb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBiYXNlOwotCi0JaWYgKHZ4dGltZS5tb2RlID09IFZYVElNRV9IUEVUKSB7Ci0JCWRvIHsKLQkJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwotCi0JCQlsYXN0X29mZnNldCA9IHZ4dGltZS5sYXN0OwotCQkJYmFzZSA9IG1vbm90b25pY19iYXNlOwotCQkJdGhpc19vZmZzZXQgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7Ci0JCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwotCQlvZmZzZXQgPSAodGhpc19vZmZzZXQgLSBsYXN0X29mZnNldCk7Ci0JCW9mZnNldCAqPSBOU0VDX1BFUl9USUNLIC8gaHBldF90aWNrOwotCX0gZWxzZSB7Ci0JCWRvIHsKLQkJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwotCi0JCQlsYXN0X29mZnNldCA9IHZ4dGltZS5sYXN0X3RzYzsKLQkJCWJhc2UgPSBtb25vdG9uaWNfYmFzZTsKLQkJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7Ci0JCXRoaXNfb2Zmc2V0ID0gZ2V0X2N5Y2xlc19zeW5jKCk7Ci0JCW9mZnNldCA9IGN5Y2xlc18yX25zKHRoaXNfb2Zmc2V0IC0gbGFzdF9vZmZzZXQpOwotCX0KLQlyZXR1cm4gYmFzZSArIG9mZnNldDsKLX0KLUVYUE9SVF9TWU1CT0wobW9ub3RvbmljX2Nsb2NrKTsKLQotc3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX2xvc3RfdGlja3MoaW50IGxvc3QpCi17Ci0Jc3RhdGljIGxvbmcgbG9zdF9jb3VudDsKLQlzdGF0aWMgaW50IHdhcm5lZDsKLQlpZiAocmVwb3J0X2xvc3RfdGlja3MpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidGltZS5jOiBMb3N0ICVkIHRpbWVyIHRpY2socykhICIsIGxvc3QpOwotCQlwcmludF9zeW1ib2woInJpcCAlcylcbiIsIGdldF9pcnFfcmVncygpLT5yaXApOwotCX0KLQotCWlmIChsb3N0X2NvdW50ID09IDEwMDAgJiYgIXdhcm5lZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ3YXJuaW5nOiBtYW55IGxvc3QgdGlja3MuXG4iCi0JCSAgICAgICBLRVJOX1dBUk5JTkcgIllvdXIgdGltZSBzb3VyY2Ugc2VlbXMgdG8gYmUgaW5zdGFibGUgb3IgIgotCQkgICAJCSJzb21lIGRyaXZlciBpcyBob2dnaW5nIGludGVydXB0c1xuIik7Ci0JCXByaW50X3N5bWJvbCgicmlwICVzXG4iLCBnZXRfaXJxX3JlZ3MoKS0+cmlwKTsKLQkJaWYgKHZ4dGltZS5tb2RlID09IFZYVElNRV9UU0MgJiYgdnh0aW1lLmhwZXRfYWRkcmVzcykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFsbGluZyBiYWNrIHRvIEhQRVRcbiIpOwotCQkJaWYgKGhwZXRfdXNlX3RpbWVyKQotCQkJCXZ4dGltZS5sYXN0ID0gaHBldF9yZWFkbChIUEVUX1QwX0NNUCkgLSAKLQkJCQkJCQlocGV0X3RpY2s7Ci0JCQllbHNlCi0JCQkJdnh0aW1lLmxhc3QgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7Ci0JCQl2eHRpbWUubW9kZSA9IFZYVElNRV9IUEVUOwotCQkJZG9fZ2V0dGltZW9mZnNldCA9IGRvX2dldHRpbWVvZmZzZXRfaHBldDsKLQkJfQotCQkvKiBlbHNlIHNob3VsZCBmYWxsIGJhY2sgdG8gUElULCBidXQgY29kZSBtaXNzaW5nLiAqLwotCQl3YXJuZWQgPSAxOwotCX0gZWxzZQotCQlsb3N0X2NvdW50Kys7Ci0KLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKLQkvKiBJbiBzb21lIGNhc2VzIHRoZSBDUFUgY2FuIGNoYW5nZSBmcmVxdWVuY3kgd2l0aG91dCB1cyBub3RpY2luZwotCSAgIEdpdmUgY3B1ZnJlcSBhIGNoYW5nZSB0byBjYXRjaCB1cC4gKi8KLQlpZiAoKGxvc3RfY291bnQrMSkgJSAyNSA9PSAwKQotCQljcHVmcmVxX2RlbGF5ZWRfZ2V0KCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBtYWluX3RpbWVyX2hhbmRsZXIodm9pZCkKIHsKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBydGNfdXBkYXRlID0gMDsKLQl1bnNpZ25lZCBsb25nIHRzYzsKLQlpbnQgZGVsYXkgPSAwLCBvZmZzZXQgPSAwLCBsb3N0ID0gMDsKLQogLyoKICAqIEhlcmUgd2UgYXJlIGluIHRoZSB0aW1lciBpcnEgaGFuZGxlci4gV2UgaGF2ZSBpcnFzIGxvY2FsbHkgZGlzYWJsZWQgKHNvIHdlCiAgKiBkb24ndCBuZWVkIHNwaW5fbG9ja19pcnFzYXZlKCkpIGJ1dCB3ZSBkb24ndCBrbm93IGlmIHRoZSB0aW1lcl9iaCBpcyBydW5uaW5nCkBAIC0zNTQsNzIgKzE1NiwxMSBAQAogCiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAKLQlpZiAodnh0aW1lLmhwZXRfYWRkcmVzcykKLQkJb2Zmc2V0ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwotCi0JaWYgKGhwZXRfdXNlX3RpbWVyKSB7Ci0JCS8qIGlmIHdlJ3JlIHVzaW5nIHRoZSBocGV0IHRpbWVyIGZ1bmN0aW9uYWxpdHksCi0JCSAqIHdlIGNhbiBtb3JlIGFjY3VyYXRlbHkga25vdyB0aGUgY291bnRlciB2YWx1ZQotCQkgKiB3aGVuIHRoZSB0aW1lciBpbnRlcnJ1cHQgb2NjdXJlZC4KLQkJICovCi0JCW9mZnNldCA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DTVApIC0gaHBldF90aWNrOwotCQlkZWxheSA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKSAtIG9mZnNldDsKLQl9IGVsc2UgaWYgKCFwbXRtcl9pb3BvcnQpIHsKLQkJc3Bpbl9sb2NrKCZpODI1M19sb2NrKTsKLQkJb3V0Yl9wKDB4MDAsIDB4NDMpOwotCQlkZWxheSA9IGluYl9wKDB4NDApOwotCQlkZWxheSB8PSBpbmIoMHg0MCkgPDwgODsKLQkJc3Bpbl91bmxvY2soJmk4MjUzX2xvY2spOwotCQlkZWxheSA9IExBVENIIC0gMSAtIGRlbGF5OwotCX0KLQotCXRzYyA9IGdldF9jeWNsZXNfc3luYygpOwotCi0JaWYgKHZ4dGltZS5tb2RlID09IFZYVElNRV9IUEVUKSB7Ci0JCWlmIChvZmZzZXQgLSB2eHRpbWUubGFzdCA+IGhwZXRfdGljaykgewotCQkJbG9zdCA9IChvZmZzZXQgLSB2eHRpbWUubGFzdCkgLyBocGV0X3RpY2sgLSAxOwotCQl9Ci0KLQkJbW9ub3RvbmljX2Jhc2UgKz0gCi0JCQkob2Zmc2V0IC0gdnh0aW1lLmxhc3QpICogTlNFQ19QRVJfVElDSyAvIGhwZXRfdGljazsKLQotCQl2eHRpbWUubGFzdCA9IG9mZnNldDsKLSNpZmRlZiBDT05GSUdfWDg2X1BNX1RJTUVSCi0JfSBlbHNlIGlmICh2eHRpbWUubW9kZSA9PSBWWFRJTUVfUE1UTVIpIHsKLQkJbG9zdCA9IHBtdGltZXJfbWFya19vZmZzZXQoKTsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCW9mZnNldCA9ICgoKHRzYyAtIHZ4dGltZS5sYXN0X3RzYykgKgotCQkJICAgdnh0aW1lLnRzY19xdW90KSA+PiBVU19TQ0FMRSkgLSBVU0VDX1BFUl9USUNLOwotCi0JCWlmIChvZmZzZXQgPCAwKQotCQkJb2Zmc2V0ID0gMDsKLQotCQlpZiAob2Zmc2V0ID4gVVNFQ19QRVJfVElDSykgewotCQkJbG9zdCA9IG9mZnNldCAvIFVTRUNfUEVSX1RJQ0s7Ci0JCQlvZmZzZXQgJT0gVVNFQ19QRVJfVElDSzsKLQkJfQotCi0JCW1vbm90b25pY19iYXNlICs9IGN5Y2xlc18yX25zKHRzYyAtIHZ4dGltZS5sYXN0X3RzYyk7Ci0KLQkJdnh0aW1lLmxhc3RfdHNjID0gdHNjIC0gdnh0aW1lLnF1b3QgKiBkZWxheSAvIHZ4dGltZS50c2NfcXVvdDsKLQotCQlpZiAoKCgodHNjIC0gdnh0aW1lLmxhc3RfdHNjKSAqCi0JCSAgICAgIHZ4dGltZS50c2NfcXVvdCkgPj4gVVNfU0NBTEUpIDwgb2Zmc2V0KQotCQkJdnh0aW1lLmxhc3RfdHNjID0gdHNjIC0KLQkJCQkoKChsb25nKSBvZmZzZXQgPDwgVVNfU0NBTEUpIC8gdnh0aW1lLnRzY19xdW90KSAtIDE7Ci0JfQotCi0JaWYgKGxvc3QgPiAwKQotCQloYW5kbGVfbG9zdF90aWNrcyhsb3N0KTsKLQllbHNlCi0JCWxvc3QgPSAwOwotCiAvKgogICogRG8gdGhlIHRpbWVyIHN0dWZmLgogICovCiAKLQlkb190aW1lcihsb3N0ICsgMSk7CisJZG9fdGltZXIoMSk7CiAjaWZuZGVmIENPTkZJR19TTVAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKICNlbmRpZgpAQCAtNDYwLDQwICsyMDEsNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBjeWMybnNfc2NhbGUgX19yZWFkX21vc3RseTsKLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9jeWMybnNfc2NhbGUodW5zaWduZWQgbG9uZyBjcHVfa2h6KQotewotCWN5YzJuc19zY2FsZSA9IChOU0VDX1BFUl9NU0VDIDw8IE5TX1NDQUxFKSAvIGNwdV9raHo7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGN5Y2xlc18yX25zKHVuc2lnbmVkIGxvbmcgbG9uZyBjeWMpCi17Ci0JcmV0dXJuIChjeWMgKiBjeWMybnNfc2NhbGUpID4+IE5TX1NDQUxFOwotfQotCi11bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGEgPSAwOwotCi0jaWYgMAotCS8qIERvbid0IGRvIGEgSFBFVCByZWFkIGhlcmUuIFVzaW5nIFRTQyBhbHdheXMgaXMgbXVjaCBmYXN0ZXIKLQkgICBhbmQgSFBFVCBtYXkgbm90IGJlIG1hcHBlZCB5ZXQgd2hlbiB0aGUgc2NoZWR1bGVyIGZpcnN0IHJ1bnMuCi0gICAgICAgICAgIERpc2FkdmFudGFnZSBpcyBhIHNtYWxsIGRyaWZ0IGJldHdlZW4gQ1BVcyBpbiBzb21lIGNvbmZpZ3VyYXRpb25zLAotCSAgIGJ1dCB0aGF0IHNob3VsZCBiZSB0b2xlcmFibGUuICovCi0JaWYgKF9fdnh0aW1lLm1vZGUgPT0gVlhUSU1FX0hQRVQpCi0JCXJldHVybiAoaHBldF9yZWFkbChIUEVUX0NPVU5URVIpICogdnh0aW1lLnF1b3QpID4+IFVTX1NDQUxFOwotI2VuZGlmCi0KLQkvKiBDb3VsZCBkbyBDUFUgY29yZSBzeW5jIGhlcmUuIE9wdGVyb24gY2FuIGV4ZWN1dGUgcmR0c2Mgc3BlY3VsYXRpdmVseSwKLQkgICB3aGljaCBtZWFucyBpdCBpcyBub3QgY29tcGxldGVseSBleGFjdCBhbmQgbWF5IG5vdCBiZSBtb25vdG9ub3VzIGJldHdlZW4KLQkgICBDUFVzLiBCdXQgdGhlIGVycm9ycyBzaG91bGQgYmUgdG9vIHNtYWxsIHRvIG1hdHRlciBmb3Igc2NoZWR1bGluZwotCSAgIHB1cnBvc2VzLiAqLwotCi0JcmR0c2NsbChhKTsKLQlyZXR1cm4gY3ljbGVzXzJfbnMoYSk7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9jbW9zX3RpbWUodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjOwpAQCAtNTQ1LDE1OSArMjUyLDYgQEAKIAlyZXR1cm4gbWt0aW1lKHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKLQotLyogRnJlcXVlbmN5IHNjYWxpbmcgc3VwcG9ydC4gQWRqdXN0IHRoZSBUU0MgYmFzZWQgdGltZXIgd2hlbiB0aGUgY3B1IGZyZXF1ZW5jeQotICAgY2hhbmdlcy4KLSAgIAotICAgUkVELVBFTjogT24gU01QIHdlIGFzc3VtZSBhbGwgQ1BVcyBydW4gd2l0aCB0aGUgc2FtZSBmcmVxdWVuY3kuICBJdCdzCi0gICBub3QgdGhhdCBpbXBvcnRhbnQgYmVjYXVzZSBjdXJyZW50IE9wdGVyb24gc2V0dXBzIGRvIG5vdCBzdXBwb3J0Ci0gICBzY2FsaW5nIG9uIFNNUCBhbnlyb2Fkcy4KLQotICAgU2hvdWxkIGZpeCB1cCBsYXN0X3RzYyB0b28uIEN1cnJlbnRseSBnZXR0aW1lb2ZkYXkgaW4gdGhlCi0gICBmaXJzdCB0aWNrIGFmdGVyIHRoZSBjaGFuZ2Ugd2lsbCBiZSBzbGlnaHRseSB3cm9uZy4gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi1zdGF0aWMgdW5zaWduZWQgaW50IGNwdWZyZXFfZGVsYXllZF9pc3NjaGVkID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9pbml0ID0gMDsKLXN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3B1ZnJlcV9kZWxheWVkX2dldF93b3JrOwotCi1zdGF0aWMgdm9pZCBoYW5kbGVfY3B1ZnJlcV9kZWxheWVkX2dldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnYpCi17Ci0JdW5zaWduZWQgaW50IGNwdTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQljcHVmcmVxX2dldChjcHUpOwotCX0KLQljcHVmcmVxX2RlbGF5ZWRfaXNzY2hlZCA9IDA7Ci19Ci0KLS8qIGlmIHdlIG5vdGljZSBsb3N0IHRpY2tzLCBzY2hlZHVsZSBhIGNhbGwgdG8gY3B1ZnJlcV9nZXQoKSBhcyBpdCB0cmllcwotICogdG8gdmVyaWZ5IHRoZSBDUFUgZnJlcXVlbmN5IHRoZSB0aW1pbmcgY29yZSB0aGlua3MgdGhlIENQVSBpcyBydW5uaW5nCi0gKiBhdCBpcyBzdGlsbCBjb3JyZWN0LgotICovCi1zdGF0aWMgdm9pZCBjcHVmcmVxX2RlbGF5ZWRfZ2V0KHZvaWQpCi17Ci0Jc3RhdGljIGludCB3YXJuZWQ7Ci0JaWYgKGNwdWZyZXFfaW5pdCAmJiAhY3B1ZnJlcV9kZWxheWVkX2lzc2NoZWQpIHsKLQkJY3B1ZnJlcV9kZWxheWVkX2lzc2NoZWQgPSAxOwotCQlpZiAoIXdhcm5lZCkgewotCQkJd2FybmVkID0gMTsKLQkJCXByaW50ayhLRVJOX0RFQlVHIAotCSJMb3Npbmcgc29tZSB0aWNrcy4uLiBjaGVja2luZyBpZiBDUFUgZnJlcXVlbmN5IGNoYW5nZWQuXG4iKTsKLQkJfQotCQlzY2hlZHVsZV93b3JrKCZjcHVmcmVxX2RlbGF5ZWRfZ2V0X3dvcmspOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCAgcmVmX2ZyZXEgPSAwOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5X3JlZiA9IDA7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9raHpfcmVmID0gMDsKLQotc3RhdGljIGludCB0aW1lX2NwdWZyZXFfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCQkJIHZvaWQgKmRhdGEpCi17Ci0gICAgICAgIHN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKLQl1bnNpZ25lZCBsb25nICpscGosIGR1bW15OwotCi0JaWYgKGNwdV9oYXMoJmNwdV9kYXRhW2ZyZXEtPmNwdV0sIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpCi0JCXJldHVybiAwOwotCi0JbHBqID0gJmR1bW15OwotCWlmICghKGZyZXEtPmZsYWdzICYgQ1BVRlJFUV9DT05TVF9MT09QUykpCi0jaWZkZWYgQ09ORklHX1NNUAotCQlscGogPSAmY3B1X2RhdGFbZnJlcS0+Y3B1XS5sb29wc19wZXJfamlmZnk7Ci0jZWxzZQotCQlscGogPSAmYm9vdF9jcHVfZGF0YS5sb29wc19wZXJfamlmZnk7Ci0jZW5kaWYKLQotCWlmICghcmVmX2ZyZXEpIHsKLQkJcmVmX2ZyZXEgPSBmcmVxLT5vbGQ7Ci0JCWxvb3BzX3Blcl9qaWZmeV9yZWYgPSAqbHBqOwotCQljcHVfa2h6X3JlZiA9IGNwdV9raHo7Ci0JfQotICAgICAgICBpZiAoKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSAgJiYgZnJlcS0+b2xkIDwgZnJlcS0+bmV3KSB8fAotICAgICAgICAgICAgKHZhbCA9PSBDUFVGUkVRX1BPU1RDSEFOR0UgJiYgZnJlcS0+b2xkID4gZnJlcS0+bmV3KSB8fAotCSAgICAodmFsID09IENQVUZSRVFfUkVTVU1FQ0hBTkdFKSkgewotICAgICAgICAgICAgICAgICpscGogPQotCQljcHVmcmVxX3NjYWxlKGxvb3BzX3Blcl9qaWZmeV9yZWYsIHJlZl9mcmVxLCBmcmVxLT5uZXcpOwotCi0JCWNwdV9raHogPSBjcHVmcmVxX3NjYWxlKGNwdV9raHpfcmVmLCByZWZfZnJlcSwgZnJlcS0+bmV3KTsKLQkJaWYgKCEoZnJlcS0+ZmxhZ3MgJiBDUFVGUkVRX0NPTlNUX0xPT1BTKSkKLQkJCXZ4dGltZS50c2NfcXVvdCA9IChVU0VDX1BFUl9NU0VDIDw8IFVTX1NDQUxFKSAvIGNwdV9raHo7Ci0JfQotCQotCXNldF9jeWMybnNfc2NhbGUoY3B1X2toel9yZWYpOwotCi0JcmV0dXJuIDA7Ci19Ci0gCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRpbWVfY3B1ZnJlcV9ub3RpZmllcl9ibG9jayA9IHsKLSAgICAgICAgIC5ub3RpZmllcl9jYWxsICA9IHRpbWVfY3B1ZnJlcV9ub3RpZmllcgotfTsKLQotc3RhdGljIGludCBfX2luaXQgY3B1ZnJlcV90c2Modm9pZCkKLXsKLQlJTklUX1dPUksoJmNwdWZyZXFfZGVsYXllZF9nZXRfd29yaywgaGFuZGxlX2NwdWZyZXFfZGVsYXllZF9nZXQpOwotCWlmICghY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmdGltZV9jcHVmcmVxX25vdGlmaWVyX2Jsb2NrLAotCQkJCSAgICAgICBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpKQotCQljcHVmcmVxX2luaXQgPSAxOwotCXJldHVybiAwOwotfQotCi1jb3JlX2luaXRjYWxsKGNwdWZyZXFfdHNjKTsKLQotI2VuZGlmCi0KLS8qCi0gKiBjYWxpYnJhdGVfdHNjKCkgY2FsaWJyYXRlcyB0aGUgcHJvY2Vzc29yIFRTQyBpbiBhIHZlcnkgc2ltcGxlIHdheSwgY29tcGFyaW5nCi0gKiBpdCB0byB0aGUgSFBFVCB0aW1lciBvZiBrbm93biBmcmVxdWVuY3kuCi0gKi8KLQotI2RlZmluZSBUSUNLX0NPVU5UIDEwMDAwMDAwMAotI2RlZmluZSBUSUNLX01JTiAgIDUwMDAKLQotLyoKLSAqIFNvbWUgcGxhdGZvcm1zIHRha2UgcGVyaW9kaWMgU01JIGludGVycnVwdHMgd2l0aCA1bXMgZHVyYXRpb24uIE1ha2Ugc3VyZSBub25lCi0gKiBvY2N1cnMgYmV0d2VlbiB0aGUgcmVhZHMgb2YgdGhlIGhwZXQgJiBUU0MuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCByZWFkX2hwZXRfdHNjKGludCAqaHBldCwgaW50ICp0c2MpCi17Ci0JaW50IHRzYzEsIHRzYzIsIGhwZXQxOwotCi0JZG8gewotCQl0c2MxID0gZ2V0X2N5Y2xlc19zeW5jKCk7Ci0JCWhwZXQxID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwotCQl0c2MyID0gZ2V0X2N5Y2xlc19zeW5jKCk7Ci0JfSB3aGlsZSAodHNjMiAtIHRzYzEgPiBUSUNLX01JTik7Ci0JKmhwZXQgPSBocGV0MTsKLQkqdHNjID0gdHNjMjsKLX0KLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBocGV0X2NhbGlicmF0ZV90c2Modm9pZCkKLXsKLQlpbnQgdHNjX3N0YXJ0LCBocGV0X3N0YXJ0OwotCWludCB0c2Nfbm93LCBocGV0X25vdzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQlyZWFkX2hwZXRfdHNjKCZocGV0X3N0YXJ0LCAmdHNjX3N0YXJ0KTsKLQotCWRvIHsKLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJcmVhZF9ocGV0X3RzYygmaHBldF9ub3csICZ0c2Nfbm93KTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0gd2hpbGUgKCh0c2Nfbm93IC0gdHNjX3N0YXJ0KSA8IFRJQ0tfQ09VTlQgJiYKLQkJIChocGV0X25vdyAtIGhwZXRfc3RhcnQpIDwgVElDS19DT1VOVCk7Ci0KLQlyZXR1cm4gKHRzY19ub3cgLSB0c2Nfc3RhcnQpICogMTAwMDAwMDAwMEwKLQkJLyAoKGhwZXRfbm93IC0gaHBldF9zdGFydCkgKiBocGV0X3BlcmlvZCAvIDEwMDApOwotfQotCiAKIC8qCiAgKiBwaXRfY2FsaWJyYXRlX3RzYygpIHVzZXMgdGhlIHNwZWFrZXIgb3V0cHV0IChjaGFubmVsIDIpIG9mCkBAIC03MjgsMTI0ICsyODIsNiBAQAogCXJldHVybiAoZW5kIC0gc3RhcnQpIC8gNTA7CiB9CiAKLSNpZmRlZglDT05GSUdfSFBFVAotc3RhdGljIF9faW5pdCBpbnQgbGF0ZV9ocGV0X2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgaHBldF9kYXRhCWhkOwotCXVuc2lnbmVkIGludCAJCW50aW1lcjsKLQotCWlmICghdnh0aW1lLmhwZXRfYWRkcmVzcykKLSAgICAgICAgCXJldHVybiAwOwotCi0JbWVtc2V0KCZoZCwgMCwgc2l6ZW9mIChoZCkpOwotCi0JbnRpbWVyID0gaHBldF9yZWFkbChIUEVUX0lEKTsKLQludGltZXIgPSAobnRpbWVyICYgSFBFVF9JRF9OVU1CRVIpID4+IEhQRVRfSURfTlVNQkVSX1NISUZUOwotCW50aW1lcisrOwotCi0JLyoKLQkgKiBSZWdpc3RlciB3aXRoIGRyaXZlci4KLQkgKiBUaW1lcjAgYW5kIFRpbWVyMSBpcyB1c2VkIGJ5IHBsYXRmb3JtLgotCSAqLwotCWhkLmhkX3BoeXNfYWRkcmVzcyA9IHZ4dGltZS5ocGV0X2FkZHJlc3M7Ci0JaGQuaGRfYWRkcmVzcyA9ICh2b2lkIF9faW9tZW0gKilmaXhfdG9fdmlydChGSVhfSFBFVF9CQVNFKTsKLQloZC5oZF9uaXJxcyA9IG50aW1lcjsKLQloZC5oZF9mbGFncyA9IEhQRVRfREFUQV9QTEFURk9STTsKLQlocGV0X3Jlc2VydmVfdGltZXIoJmhkLCAwKTsKLSNpZmRlZglDT05GSUdfSFBFVF9FTVVMQVRFX1JUQwotCWhwZXRfcmVzZXJ2ZV90aW1lcigmaGQsIDEpOwotI2VuZGlmCi0JaGQuaGRfaXJxWzBdID0gSFBFVF9MRUdBQ1lfODI1NDsKLQloZC5oZF9pcnFbMV0gPSBIUEVUX0xFR0FDWV9SVEM7Ci0JaWYgKG50aW1lciA+IDIpIHsKLQkJc3RydWN0IGhwZXQJCSpocGV0OwotCQlzdHJ1Y3QgaHBldF90aW1lcgkqdGltZXI7Ci0JCWludAkJCWk7Ci0KLQkJaHBldCA9IChzdHJ1Y3QgaHBldCAqKSBmaXhfdG9fdmlydChGSVhfSFBFVF9CQVNFKTsKLQkJdGltZXIgPSAmaHBldC0+aHBldF90aW1lcnNbMl07Ci0JCWZvciAoaSA9IDI7IGkgPCBudGltZXI7IHRpbWVyKyssIGkrKykKLQkJCWhkLmhkX2lycVtpXSA9ICh0aW1lci0+aHBldF9jb25maWcgJgotCQkJCQlUbl9JTlRfUk9VVEVfQ05GX01BU0spID4+Ci0JCQkJVG5fSU5UX1JPVVRFX0NORl9TSElGVDsKLQotCX0KLQotCWhwZXRfYWxsb2MoJmhkKTsKLQlyZXR1cm4gMDsKLX0KLWZzX2luaXRjYWxsKGxhdGVfaHBldF9pbml0KTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IGhwZXRfdGltZXJfc3RvcF9zZXRfZ28odW5zaWduZWQgbG9uZyB0aWNrKQotewotCXVuc2lnbmVkIGludCBjZmc7Ci0KLS8qCi0gKiBTdG9wIHRoZSB0aW1lcnMgYW5kIHJlc2V0IHRoZSBtYWluIGNvdW50ZXIuCi0gKi8KLQotCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9DRkcpOwotCWNmZyAmPSB+KEhQRVRfQ0ZHX0VOQUJMRSB8IEhQRVRfQ0ZHX0xFR0FDWSk7Ci0JaHBldF93cml0ZWwoY2ZnLCBIUEVUX0NGRyk7Ci0JaHBldF93cml0ZWwoMCwgSFBFVF9DT1VOVEVSKTsKLQlocGV0X3dyaXRlbCgwLCBIUEVUX0NPVU5URVIgKyA0KTsKLQotLyoKLSAqIFNldCB1cCB0aW1lciAwLCBhcyBwZXJpb2RpYyB3aXRoIGZpcnN0IGludGVycnVwdCB0byBoYXBwZW4gYXQgaHBldF90aWNrLAotICogYW5kIHBlcmlvZCBhbHNvIGhwZXRfdGljay4KLSAqLwotCWlmIChocGV0X3VzZV90aW1lcikgewotCQlocGV0X3dyaXRlbChIUEVUX1ROX0VOQUJMRSB8IEhQRVRfVE5fUEVSSU9ESUMgfCBIUEVUX1ROX1NFVFZBTCB8Ci0JCSAgICBIUEVUX1ROXzMyQklULCBIUEVUX1QwX0NGRyk7Ci0JCWhwZXRfd3JpdGVsKGhwZXRfdGljaywgSFBFVF9UMF9DTVApOyAvKiBuZXh0IGludGVycnVwdCAqLwotCQlocGV0X3dyaXRlbChocGV0X3RpY2ssIEhQRVRfVDBfQ01QKTsgLyogcGVyaW9kICovCi0JCWNmZyB8PSBIUEVUX0NGR19MRUdBQ1k7Ci0JfQotLyoKLSAqIEdvIQotICovCi0KLQljZmcgfD0gSFBFVF9DRkdfRU5BQkxFOwotCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9DRkcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaHBldF9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGlkOwotCi0JaWYgKCF2eHRpbWUuaHBldF9hZGRyZXNzKQotCQlyZXR1cm4gLTE7Ci0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9IUEVUX0JBU0UsIHZ4dGltZS5ocGV0X2FkZHJlc3MpOwotCV9fc2V0X2ZpeG1hcChWU1lTQ0FMTF9IUEVULCB2eHRpbWUuaHBldF9hZGRyZXNzLCBQQUdFX0tFUk5FTF9WU1lTQ0FMTF9OT0NBQ0hFKTsKLQotLyoKLSAqIFJlYWQgdGhlIHBlcmlvZCwgY29tcHV0ZSB0aWNrIGFuZCBxdW90aWVudC4KLSAqLwotCi0JaWQgPSBocGV0X3JlYWRsKEhQRVRfSUQpOwotCi0JaWYgKCEoaWQgJiBIUEVUX0lEX1ZFTkRPUikgfHwgIShpZCAmIEhQRVRfSURfTlVNQkVSKSkKLQkJcmV0dXJuIC0xOwotCi0JaHBldF9wZXJpb2QgPSBocGV0X3JlYWRsKEhQRVRfUEVSSU9EKTsKLQlpZiAoaHBldF9wZXJpb2QgPCAxMDAwMDAgfHwgaHBldF9wZXJpb2QgPiAxMDAwMDAwMDApCi0JCXJldHVybiAtMTsKLQotCWhwZXRfdGljayA9IChGU0VDX1BFUl9USUNLICsgaHBldF9wZXJpb2QgLyAyKSAvIGhwZXRfcGVyaW9kOwotCi0JaHBldF91c2VfdGltZXIgPSAoaWQgJiBIUEVUX0lEX0xFR1NVUCk7Ci0KLQlyZXR1cm4gaHBldF90aW1lcl9zdG9wX3NldF9nbyhocGV0X3RpY2spOwotfQotCi1zdGF0aWMgaW50IGhwZXRfcmVlbmFibGUodm9pZCkKLXsKLQlyZXR1cm4gaHBldF90aW1lcl9zdG9wX3NldF9nbyhocGV0X3RpY2spOwotfQotCiAjZGVmaW5lIFBJVF9NT0RFIDB4NDMKICNkZWZpbmUgUElUX0NIMCAgMHg0MAogCkBAIC04NzMsNyArMzA5LDcgQEAKIHZvaWQgX19pbml0IHN0b3BfdGltZXJfaW50ZXJydXB0KHZvaWQpCiB7CiAJY2hhciAqbmFtZTsKLQlpZiAodnh0aW1lLmhwZXRfYWRkcmVzcykgeworCWlmIChocGV0X2FkZHJlc3MpIHsKIAkJbmFtZSA9ICJIUEVUIjsKIAkJaHBldF90aW1lcl9zdG9wX3NldF9nbygwKTsKIAl9IGVsc2UgewpAQCAtODgzLDEyICszMTksNiBAQAogCXByaW50ayhLRVJOX0lORk8gInRpbWVyOiAlcyBpbnRlcnJ1cHQgc3RvcHBlZC5cbiIsIG5hbWUpOwogfQogCi1pbnQgX19pbml0IHRpbWVfc2V0dXAoY2hhciAqc3RyKQotewotCXJlcG9ydF9sb3N0X3RpY2tzID0gMTsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCA9IHsKIAl0aW1lcl9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIENQVV9NQVNLX05PTkUsICJ0aW1lciIsIE5VTEwsIE5VTEwKIH07CkBAIC04OTYsMTI0ICszMjYsNDEgQEAKIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKQogewogCWlmIChub2hwZXQpCi0JCXZ4dGltZS5ocGV0X2FkZHJlc3MgPSAwOwotCisJCWhwZXRfYWRkcmVzcyA9IDA7CiAJeHRpbWUudHZfc2VjID0gZ2V0X2Ntb3NfdGltZSgpOwogCXh0aW1lLnR2X25zZWMgPSAwOwogCiAJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAogCSAgICAgICAgICAgICAgICAgICAgICAgIC14dGltZS50dl9zZWMsIC14dGltZS50dl9uc2VjKTsKIAotCWlmICghaHBldF9pbml0KCkpCi0gICAgICAgICAgICAgICAgdnh0aW1lX2h6ID0gKEZTRUNfUEVSX1NFQyArIGhwZXRfcGVyaW9kIC8gMikgLyBocGV0X3BlcmlvZDsKLQllbHNlCi0JCXZ4dGltZS5ocGV0X2FkZHJlc3MgPSAwOworCWlmIChocGV0X2FyY2hfaW5pdCgpKQorCQlocGV0X2FkZHJlc3MgPSAwOwogCiAJaWYgKGhwZXRfdXNlX3RpbWVyKSB7CiAJCS8qIHNldCB0aWNrX25zZWMgdG8gdXNlIHRoZSBwcm9wZXIgcmF0ZSBmb3IgSFBFVCAqLwogCSAgCXRpY2tfbnNlYyA9IFRJQ0tfTlNFQ19IUEVUOwogCQljcHVfa2h6ID0gaHBldF9jYWxpYnJhdGVfdHNjKCk7CiAJCXRpbWVuYW1lID0gIkhQRVQiOwotI2lmZGVmIENPTkZJR19YODZfUE1fVElNRVIKLQl9IGVsc2UgaWYgKHBtdG1yX2lvcG9ydCAmJiAhdnh0aW1lLmhwZXRfYWRkcmVzcykgewotCQl2eHRpbWVfaHogPSBQTV9USU1FUl9GUkVRVUVOQ1k7Ci0JCXRpbWVuYW1lID0gIlBNIjsKLQkJcGl0X2luaXQoKTsKLQkJY3B1X2toeiA9IHBpdF9jYWxpYnJhdGVfdHNjKCk7Ci0jZW5kaWYKIAl9IGVsc2UgewogCQlwaXRfaW5pdCgpOwogCQljcHVfa2h6ID0gcGl0X2NhbGlicmF0ZV90c2MoKTsKIAkJdGltZW5hbWUgPSAiUElUIjsKIAl9CiAKLQl2eHRpbWUubW9kZSA9IFZYVElNRV9UU0M7Ci0Jdnh0aW1lLnF1b3QgPSAoVVNFQ19QRVJfU0VDIDw8IFVTX1NDQUxFKSAvIHZ4dGltZV9oejsKLQl2eHRpbWUudHNjX3F1b3QgPSAoVVNFQ19QRVJfTVNFQyA8PCBVU19TQ0FMRSkgLyBjcHVfa2h6OwotCXZ4dGltZS5sYXN0X3RzYyA9IGdldF9jeWNsZXNfc3luYygpOwotCXNldF9jeWMybnNfc2NhbGUoY3B1X2toeik7Ci0Jc2V0dXBfaXJxKDAsICZpcnEwKTsKLQotI2lmbmRlZiBDT05GSUdfU01QCi0JdGltZV9pbml0X2d0b2QoKTsKLSNlbmRpZgotfQotCi0vKgotICogTWFrZSBhbiBlZHVjYXRlZCBndWVzcyBpZiB0aGUgVFNDIGlzIHRydXN0d29ydGh5IGFuZCBzeW5jaHJvbml6ZWQKLSAqIG92ZXIgYWxsIENQVXMuCi0gKi8KLV9fY3B1aW5pdCBpbnQgdW5zeW5jaHJvbml6ZWRfdHNjKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCWlmIChhcGljX2lzX2NsdXN0ZXJlZF9ib3goKSkKLQkJcmV0dXJuIDE7Ci0jZW5kaWYKLQkvKiBNb3N0IGludGVsIHN5c3RlbXMgaGF2ZSBzeW5jaHJvbml6ZWQgVFNDcyBleGNlcHQgZm9yCi0JICAgbXVsdGkgbm9kZSBzeXN0ZW1zICovCi0gCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgewotI2lmZGVmIENPTkZJR19BQ1BJCi0JCS8qIEJ1dCBUU0MgZG9lc24ndCB0aWNrIGluIEMzIHNvIGRvbid0IHVzZSBpdCB0aGVyZSAqLwotCQlpZiAoYWNwaV9nYmxfRkFEVC5oZWFkZXIubGVuZ3RoID4gMCAmJiBhY3BpX2dibF9GQURULkMzbGF0ZW5jeSA8IDEwMDApCi0JCQlyZXR1cm4gMTsKLSNlbmRpZgotIAkJcmV0dXJuIDA7Ci0JfQotCi0gCS8qIEFzc3VtZSBtdWx0aSBzb2NrZXQgc3lzdGVtcyBhcmUgbm90IHN5bmNocm9uaXplZCAqLwotIAlyZXR1cm4gbnVtX3ByZXNlbnRfY3B1cygpID4gMTsKLX0KLQotLyoKLSAqIERlY2lkZSB3aGF0IG1vZGUgZ2V0dGltZW9mZGF5IHNob3VsZCB1c2UuCi0gKi8KLXZvaWQgdGltZV9pbml0X2d0b2Qodm9pZCkKLXsKLQljaGFyICp0aW1ldHlwZTsKLQogCWlmICh1bnN5bmNocm9uaXplZF90c2MoKSkKLQkJbm90c2MgPSAxOworCQltYXJrX3RzY191bnN0YWJsZSgpOwogCi0gCWlmIChjcHVfaGFzKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9SRFRTQ1ApKQorCWlmIChjcHVfaGFzKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9SRFRTQ1ApKQogCQl2Z2V0Y3B1X21vZGUgPSBWR0VUQ1BVX1JEVFNDUDsKIAllbHNlCiAJCXZnZXRjcHVfbW9kZSA9IFZHRVRDUFVfTFNMOwogCi0JaWYgKHZ4dGltZS5ocGV0X2FkZHJlc3MgJiYgbm90c2MpIHsKLQkJdGltZXR5cGUgPSBocGV0X3VzZV90aW1lciA/ICJIUEVUIiA6ICJQSVQvSFBFVCI7Ci0JCWlmIChocGV0X3VzZV90aW1lcikKLQkJCXZ4dGltZS5sYXN0ID0gaHBldF9yZWFkbChIUEVUX1QwX0NNUCkgLSBocGV0X3RpY2s7Ci0JCWVsc2UKLQkJCXZ4dGltZS5sYXN0ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwotCQl2eHRpbWUubW9kZSA9IFZYVElNRV9IUEVUOwotCQlkb19nZXR0aW1lb2Zmc2V0ID0gZG9fZ2V0dGltZW9mZnNldF9ocGV0OwotI2lmZGVmIENPTkZJR19YODZfUE1fVElNRVIKLQkvKiBVc2luZyBQTSBmb3IgZ2V0dGltZW9mZGF5IGlzIHF1aXRlIHNsb3csIGJ1dCB3ZSBoYXZlIG5vIG90aGVyCi0JICAgY2hvaWNlIGJlY2F1c2UgdGhlIFRTQyBpcyB0b28gdW5yZWxpYWJsZSBvbiBzb21lIHN5c3RlbXMuICovCi0JfSBlbHNlIGlmIChwbXRtcl9pb3BvcnQgJiYgIXZ4dGltZS5ocGV0X2FkZHJlc3MgJiYgbm90c2MpIHsKLQkJdGltZXR5cGUgPSAiUE0iOwotCQlkb19nZXR0aW1lb2Zmc2V0ID0gZG9fZ2V0dGltZW9mZnNldF9wbTsKLQkJdnh0aW1lLm1vZGUgPSBWWFRJTUVfUE1UTVI7Ci0JCXN5c2N0bF92c3lzY2FsbCA9IDA7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyB2c3lzY2FsbCBkdWUgdG8gdXNlIG9mIFBNIHRpbWVyXG4iKTsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCXRpbWV0eXBlID0gaHBldF91c2VfdGltZXIgPyAiSFBFVC9UU0MiIDogIlBJVC9UU0MiOwotCQl2eHRpbWUubW9kZSA9IFZYVElNRV9UU0M7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAidGltZS5jOiBVc2luZyAlbGQuJTA2bGQgTUh6IFdBTEwgJXMgR1RPRCAlcyB0aW1lci5cbiIsCi0JICAgICAgIHZ4dGltZV9oeiAvIDEwMDAwMDAsIHZ4dGltZV9oeiAlIDEwMDAwMDAsIHRpbWVuYW1lLCB0aW1ldHlwZSk7CisJc2V0X2N5YzJuc19zY2FsZShjcHVfa2h6KTsKIAlwcmludGsoS0VSTl9JTkZPICJ0aW1lLmM6IERldGVjdGVkICVkLiUwM2QgTUh6IHByb2Nlc3Nvci5cbiIsCiAJCWNwdV9raHogLyAxMDAwLCBjcHVfa2h6ICUgMTAwMCk7Ci0Jdnh0aW1lLnF1b3QgPSAoVVNFQ19QRVJfU0VDIDw8IFVTX1NDQUxFKSAvIHZ4dGltZV9oejsKLQl2eHRpbWUudHNjX3F1b3QgPSAoVVNFQ19QRVJfTVNFQyA8PCBVU19TQ0FMRSkgLyBjcHVfa2h6OwotCXZ4dGltZS5sYXN0X3RzYyA9IGdldF9jeWNsZXNfc3luYygpOwotCi0Jc2V0X2N5YzJuc19zY2FsZShjcHVfa2h6KTsKKwlzZXR1cF9pcnEoMCwgJmlycTApOwogfQogCi1fX3NldHVwKCJyZXBvcnRfbG9zdF90aWNrcyIsIHRpbWVfc2V0dXApOwogCiBzdGF0aWMgbG9uZyBjbG9ja19jbW9zX2RpZmY7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzbGVlcF9zdGFydDsKQEAgLTEwNTAsNyArMzk3LDcgQEAKIAkJc2xlZXBfbGVuZ3RoID0gMDsKIAkJY3RpbWUgPSBzbGVlcF9zdGFydDsKIAl9Ci0JaWYgKHZ4dGltZS5ocGV0X2FkZHJlc3MpCisJaWYgKGhwZXRfYWRkcmVzcykKIAkJaHBldF9yZWVuYWJsZSgpOwogCWVsc2UKIAkJaTgyNTRfdGltZXJfcmVzdW1lKCk7CkBAIC0xMDU5LDIwICs0MDYsOCBAQAogCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmeHRpbWVfbG9jayxmbGFncyk7CiAJeHRpbWUudHZfc2VjID0gc2VjOwogCXh0aW1lLnR2X25zZWMgPSAwOwotCWlmICh2eHRpbWUubW9kZSA9PSBWWFRJTUVfSFBFVCkgewotCQlpZiAoaHBldF91c2VfdGltZXIpCi0JCQl2eHRpbWUubGFzdCA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DTVApIC0gaHBldF90aWNrOwotCQllbHNlCi0JCQl2eHRpbWUubGFzdCA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKLSNpZmRlZiBDT05GSUdfWDg2X1BNX1RJTUVSCi0JfSBlbHNlIGlmICh2eHRpbWUubW9kZSA9PSBWWFRJTUVfUE1UTVIpIHsKLQkJcG10aW1lcl9yZXN1bWUoKTsKLSNlbmRpZgotCX0gZWxzZQotCQl2eHRpbWUubGFzdF90c2MgPSBnZXRfY3ljbGVzX3N5bmMoKTsKLQl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jayxmbGFncyk7CiAJamlmZmllcyArPSBzbGVlcF9sZW5ndGg7Ci0JbW9ub3RvbmljX2Jhc2UgKz0gc2xlZXBfbGVuZ3RoICogKE5TRUNfUEVSX1NFQy9IWik7CisJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssZmxhZ3MpOwogCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwODMsNyArNDE4LDcgQEAKIAlzZXRfa3NldF9uYW1lKCJ0aW1lciIpLAogfTsKIAotLyogWFhYIHRoaXMgZHJpdmVyZnMgc3R1ZmYgc2hvdWxkIHByb2JhYmx5IGdvIGVsc2V3aGVyZSBsYXRlciAtam9obiAqLworLyogWFhYIHRoaXMgc3lzZnMgc3R1ZmYgc2hvdWxkIHByb2JhYmx5IGdvIGVsc2V3aGVyZSBsYXRlciAtam9obiAqLwogc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV90aW1lciA9IHsKIAkuaWQJPSAwLAogCS5jbHMJPSAmdGltZXJfc3lzY2xhc3MsCkBAIC0xMDk4LDI2OSArNDMzLDMgQEAKIH0KIAogZGV2aWNlX2luaXRjYWxsKHRpbWVfaW5pdF9kZXZpY2UpOwotCi0jaWZkZWYgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKLS8qIEhQRVQgaW4gTGVnYWN5UmVwbGFjZW1lbnQgTW9kZSBlYXRzIHVwIFJUQyBpbnRlcnJ1cHQgbGluZS4gV2hlbiwgSFBFVAotICogaXMgZW5hYmxlZCwgd2Ugc3VwcG9ydCBSVEMgaW50ZXJydXB0IGZ1bmN0aW9uYWxpdHkgaW4gc29mdHdhcmUuCi0gKiBSVEMgaGFzIDMga2luZHMgb2YgaW50ZXJydXB0czoKLSAqIDEpIFVwZGF0ZSBJbnRlcnJ1cHQgLSBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQsIGV2ZXJ5IHNlYywgd2hlbiBSVEMgY2xvY2sKLSAqICAgIGlzIHVwZGF0ZWQKLSAqIDIpIEFsYXJtIEludGVycnVwdCAtIGdlbmVyYXRlIGFuIGludGVycnVwdCBhdCBhIHNwZWNpZmljIHRpbWUgb2YgZGF5Ci0gKiAzKSBQZXJpb2RpYyBJbnRlcnJ1cHQgLSBnZW5lcmF0ZSBwZXJpb2RpYyBpbnRlcnJ1cHQsIHdpdGggZnJlcXVlbmNpZXMKLSAqICAgIDJIei04MTkySHogKDJIei02NEh6IGZvciBub24tcm9vdCB1c2VyKSAoYWxsIGZyZXFzIGluIHBvd2VycyBvZiAyKQotICogKDEpIGFuZCAoMikgYWJvdmUgYXJlIGltcGxlbWVudGVkIHVzaW5nIHBvbGxpbmcgYXQgYSBmcmVxdWVuY3kgb2YKLSAqIDY0IEh6LiBUaGUgZXhhY3QgZnJlcXVlbmN5IGlzIGEgdHJhZGVvZmYgYmV0d2VlbiBhY2N1cmFjeSBhbmQgaW50ZXJydXB0Ci0gKiBvdmVyaGVhZC4gKERFRkFVTFRfUlRDX0lOVF9GUkVRKQotICogRm9yICgzKSwgd2UgdXNlIGludGVycnVwdHMgYXQgNjRIeiBvciB1c2VyIHNwZWNpZmllZCBwZXJpb2RpYwotICogZnJlcXVlbmN5LCB3aGljaGV2ZXIgaXMgaGlnaGVyLgotICovCi0jaW5jbHVkZSA8bGludXgvcnRjLmg+Ci0KLSNkZWZpbmUgREVGQVVMVF9SVENfSU5UX0ZSRVEgCTY0Ci0jZGVmaW5lIFJUQ19OVU1fSU5UUyAJCTEKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgVUlFX29uOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJldl91cGRhdGVfc2VjOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBBSUVfb247Ci1zdGF0aWMgc3RydWN0IHJ0Y190aW1lIGFsYXJtX3RpbWU7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIFBJRV9vbjsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIFBJRV9mcmVxID0gREVGQVVMVF9SVENfSU5UX0ZSRVE7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBQSUVfY291bnQ7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhwZXRfcnRjX2ludF9mcmVxOyAvKiBSVEMgaW50ZXJydXB0IGZyZXF1ZW5jeSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBocGV0X3QxX2NtcDsgLyogY2FjaGVkIGNvbXBhcmF0b3IgcmVnaXN0ZXIgKi8KLQotaW50IGlzX2hwZXRfZW5hYmxlZCh2b2lkKQotewotCXJldHVybiB2eHRpbWUuaHBldF9hZGRyZXNzICE9IDA7Ci19Ci0KLS8qCi0gKiBUaW1lciAxIGZvciBSVEMsIHdlIGRvIG5vdCB1c2UgcGVyaW9kaWMgaW50ZXJydXB0IGZlYXR1cmUsCi0gKiBldmVuIGlmIEhQRVQgc3VwcG9ydHMgcGVyaW9kaWMgaW50ZXJydXB0cyBvbiBUaW1lciAxLgotICogVGhlIHJlYXNvbiBiZWluZywgdG8gc2V0IHVwIGEgcGVyaW9kaWMgaW50ZXJydXB0IGluIEhQRVQsIHdlIG5lZWQgdG8KLSAqIHN0b3AgdGhlIG1haW4gY291bnRlci4gQW5kIGlmIHdlIGRvIHRoYXQgZXZlcnl0aW1lIHNvbWVvbmUgZGlhYmxlcy9lbmFibGVzCi0gKiBSVEMsIHdlIHdpbGwgaGF2ZSBhZHZlcnNlIGVmZmVjdCBvbiBtYWluIGtlcm5lbCB0aW1lciBydW5uaW5nIG9uIFRpbWVyIDAuCi0gKiBTbywgZm9yIHRoZSB0aW1lIGJlaW5nLCBzaW11bGF0ZSB0aGUgcGVyaW9kaWMgaW50ZXJydXB0IGluIHNvZnR3YXJlLgotICoKLSAqIGhwZXRfcnRjX3RpbWVyX2luaXQoKSBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGFuZCBkdXJpbmcgc3Vic2VxdWVudAotICogaW50ZXJ1cHB0cyByZWluaXQgaGFwcGVucyB0aHJvdWdoIGhwZXRfcnRjX3RpbWVyX3JlaW5pdCgpLgotICovCi1pbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGludCBjZmcsIGNudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKLQkJcmV0dXJuIDA7Ci0JLyoKLQkgKiBTZXQgdGhlIGNvdW50ZXIgMSBhbmQgZW5hYmxlIHRoZSBpbnRlcnJ1cHRzLgotCSAqLwotCWlmIChQSUVfb24gJiYgKFBJRV9mcmVxID4gREVGQVVMVF9SVENfSU5UX0ZSRVEpKQotCQlocGV0X3J0Y19pbnRfZnJlcSA9IFBJRV9mcmVxOwotCWVsc2UKLQkJaHBldF9ydGNfaW50X2ZyZXEgPSBERUZBVUxUX1JUQ19JTlRfRlJFUTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWNudCA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKLQljbnQgKz0gKChocGV0X3RpY2sqSFopL2hwZXRfcnRjX2ludF9mcmVxKTsKLQlocGV0X3dyaXRlbChjbnQsIEhQRVRfVDFfQ01QKTsKLQlocGV0X3QxX2NtcCA9IGNudDsKLQotCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9UMV9DRkcpOwotCWNmZyAmPSB+SFBFVF9UTl9QRVJJT0RJQzsKLQljZmcgfD0gSFBFVF9UTl9FTkFCTEUgfCBIUEVUX1ROXzMyQklUOwotCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMV9DRkcpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGhwZXRfcnRjX3RpbWVyX3JlaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGludCBjZmcsIGNudCwgdGlja3NfcGVyX2ludCwgbG9zdF9pbnRzOwotCi0JaWYgKHVubGlrZWx5KCEoUElFX29uIHwgQUlFX29uIHwgVUlFX29uKSkpIHsKLQkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1QxX0NGRyk7Ci0JCWNmZyAmPSB+SFBFVF9UTl9FTkFCTEU7Ci0JCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMV9DRkcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKFBJRV9vbiAmJiAoUElFX2ZyZXEgPiBERUZBVUxUX1JUQ19JTlRfRlJFUSkpCi0JCWhwZXRfcnRjX2ludF9mcmVxID0gUElFX2ZyZXE7Ci0JZWxzZQotCQlocGV0X3J0Y19pbnRfZnJlcSA9IERFRkFVTFRfUlRDX0lOVF9GUkVROwotCi0JLyogSXQgaXMgbW9yZSBhY2N1cmF0ZSB0byB1c2UgdGhlIGNvbXBhcmF0b3IgdmFsdWUgdGhhbiBjdXJyZW50IGNvdW50LiovCi0JdGlja3NfcGVyX2ludCA9IGhwZXRfdGljayAqIEhaIC8gaHBldF9ydGNfaW50X2ZyZXE7Ci0JaHBldF90MV9jbXAgKz0gdGlja3NfcGVyX2ludDsKLQlocGV0X3dyaXRlbChocGV0X3QxX2NtcCwgSFBFVF9UMV9DTVApOwotCi0JLyoKLQkgKiBJZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2FzIGRlbGF5ZWQgdG9vIGxvbmcsIHRoZSB3cml0ZSBhYm92ZSB0cmllcwotCSAqIHRvIHNjaGVkdWxlIHRoZSBuZXh0IGludGVycnVwdCBpbiB0aGUgcGFzdCBhbmQgdGhlIGhhcmR3YXJlIHdvdWxkCi0JICogbm90IGludGVycnVwdCB1bnRpbCB0aGUgY291bnRlciBoYWQgd3JhcHBlZCBhcm91bmQuCi0JICogU28gd2UgaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBjb21wYXJhdG9yIHdhc24ndCBzZXQgdG8gYSBwYXN0IHRpbWUuCi0JICovCi0JY250ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwotCWlmICh1bmxpa2VseSgoaW50KShjbnQgLSBocGV0X3QxX2NtcCkgPiAwKSkgewotCQlsb3N0X2ludHMgPSAoY250IC0gaHBldF90MV9jbXApIC8gdGlja3NfcGVyX2ludCArIDE7Ci0JCS8qIE1ha2Ugc3VyZSB0aGF0LCBldmVuIHdpdGggdGhlIHRpbWUgbmVlZGVkIHRvIGV4ZWN1dGUKLQkJICogdGhpcyBjb2RlLCB0aGUgbmV4dCBzY2hlZHVsZWQgaW50ZXJydXB0IGhhcyBiZWVuIG1vdmVkCi0JCSAqIGJhY2sgdG8gdGhlIGZ1dHVyZTogKi8KLQkJbG9zdF9pbnRzKys7Ci0KLQkJaHBldF90MV9jbXAgKz0gbG9zdF9pbnRzICogdGlja3NfcGVyX2ludDsKLQkJaHBldF93cml0ZWwoaHBldF90MV9jbXAsIEhQRVRfVDFfQ01QKTsKLQotCQlpZiAoUElFX29uKQotCQkJUElFX2NvdW50ICs9IGxvc3RfaW50czsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJydGM6IGxvc3Qgc29tZSBpbnRlcnJ1cHRzIGF0ICVsZEh6LlxuIiwKLQkJICAgICAgIGhwZXRfcnRjX2ludF9mcmVxKTsKLQl9Ci19Ci0KLS8qCi0gKiBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBjYWxsZWQgZnJvbSBydGMgZHJpdmVyLgotICogUmV0dXJuIDAgaWYgSFBFVCBpcyBub3QgYmVpbmcgdXNlZC4KLSAqIE90aGVyd2lzZSBkbyB0aGUgbmVjZXNzYXJ5IGNoYW5nZXMgYW5kIHJldHVybiAxLgotICovCi1pbnQgaHBldF9tYXNrX3J0Y19pcnFfYml0KHVuc2lnbmVkIGxvbmcgYml0X21hc2spCi17Ci0JaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoYml0X21hc2sgJiBSVENfVUlFKQotCQlVSUVfb24gPSAwOwotCWlmIChiaXRfbWFzayAmIFJUQ19QSUUpCi0JCVBJRV9vbiA9IDA7Ci0JaWYgKGJpdF9tYXNrICYgUlRDX0FJRSkKLQkJQUlFX29uID0gMDsKLQotCXJldHVybiAxOwotfQotCi1pbnQgaHBldF9zZXRfcnRjX2lycV9iaXQodW5zaWduZWQgbG9uZyBiaXRfbWFzaykKLXsKLQlpbnQgdGltZXJfaW5pdF9yZXFkID0gMDsKLQotCWlmICghaXNfaHBldF9lbmFibGVkKCkpCi0JCXJldHVybiAwOwotCi0JaWYgKCEoUElFX29uIHwgQUlFX29uIHwgVUlFX29uKSkKLQkJdGltZXJfaW5pdF9yZXFkID0gMTsKLQotCWlmIChiaXRfbWFzayAmIFJUQ19VSUUpIHsKLQkJVUlFX29uID0gMTsKLQl9Ci0JaWYgKGJpdF9tYXNrICYgUlRDX1BJRSkgewotCQlQSUVfb24gPSAxOwotCQlQSUVfY291bnQgPSAwOwotCX0KLQlpZiAoYml0X21hc2sgJiBSVENfQUlFKSB7Ci0JCUFJRV9vbiA9IDE7Ci0JfQotCi0JaWYgKHRpbWVyX2luaXRfcmVxZCkKLQkJaHBldF9ydGNfdGltZXJfaW5pdCgpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBocGV0X3NldF9hbGFybV90aW1lKHVuc2lnbmVkIGNoYXIgaHJzLCB1bnNpZ25lZCBjaGFyIG1pbiwgdW5zaWduZWQgY2hhciBzZWMpCi17Ci0JaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlhbGFybV90aW1lLnRtX2hvdXIgPSBocnM7Ci0JYWxhcm1fdGltZS50bV9taW4gPSBtaW47Ci0JYWxhcm1fdGltZS50bV9zZWMgPSBzZWM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotaW50IGhwZXRfc2V0X3BlcmlvZGljX2ZyZXEodW5zaWduZWQgbG9uZyBmcmVxKQotewotCWlmICghaXNfaHBldF9lbmFibGVkKCkpCi0JCXJldHVybiAwOwotCi0JUElFX2ZyZXEgPSBmcmVxOwotCVBJRV9jb3VudCA9IDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotaW50IGhwZXRfcnRjX2Ryb3BwZWRfaXJxKHZvaWQpCi17Ci0JaWYgKCFpc19ocGV0X2VuYWJsZWQoKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotaXJxcmV0dXJuX3QgaHBldF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHJ0Y190aW1lIGN1cnJfdGltZTsKLQl1bnNpZ25lZCBsb25nIHJ0Y19pbnRfZmxhZyA9IDA7Ci0JaW50IGNhbGxfcnRjX2ludGVycnVwdCA9IDA7Ci0KLQlocGV0X3J0Y190aW1lcl9yZWluaXQoKTsKLQotCWlmIChVSUVfb24gfCBBSUVfb24pIHsKLQkJcnRjX2dldF9ydGNfdGltZSgmY3Vycl90aW1lKTsKLQl9Ci0JaWYgKFVJRV9vbikgewotCQlpZiAoY3Vycl90aW1lLnRtX3NlYyAhPSBwcmV2X3VwZGF0ZV9zZWMpIHsKLQkJCS8qIFNldCB1cGRhdGUgaW50IGluZm8sIGNhbGwgcmVhbCBydGMgaW50IHJvdXRpbmUgKi8KLQkJCWNhbGxfcnRjX2ludGVycnVwdCA9IDE7Ci0JCQlydGNfaW50X2ZsYWcgPSBSVENfVUY7Ci0JCQlwcmV2X3VwZGF0ZV9zZWMgPSBjdXJyX3RpbWUudG1fc2VjOwotCQl9Ci0JfQotCWlmIChQSUVfb24pIHsKLQkJUElFX2NvdW50Kys7Ci0JCWlmIChQSUVfY291bnQgPj0gaHBldF9ydGNfaW50X2ZyZXEvUElFX2ZyZXEpIHsKLQkJCS8qIFNldCBwZXJpb2RpYyBpbnQgaW5mbywgY2FsbCByZWFsIHJ0YyBpbnQgcm91dGluZSAqLwotCQkJY2FsbF9ydGNfaW50ZXJydXB0ID0gMTsKLQkJCXJ0Y19pbnRfZmxhZyB8PSBSVENfUEY7Ci0JCQlQSUVfY291bnQgPSAwOwotCQl9Ci0JfQotCWlmIChBSUVfb24pIHsKLQkJaWYgKChjdXJyX3RpbWUudG1fc2VjID09IGFsYXJtX3RpbWUudG1fc2VjKSAmJgotCQkgICAgKGN1cnJfdGltZS50bV9taW4gPT0gYWxhcm1fdGltZS50bV9taW4pICYmCi0JCSAgICAoY3Vycl90aW1lLnRtX2hvdXIgPT0gYWxhcm1fdGltZS50bV9ob3VyKSkgewotCQkJLyogU2V0IGFsYXJtIGludCBpbmZvLCBjYWxsIHJlYWwgcnRjIGludCByb3V0aW5lICovCi0JCQljYWxsX3J0Y19pbnRlcnJ1cHQgPSAxOwotCQkJcnRjX2ludF9mbGFnIHw9IFJUQ19BRjsKLQkJfQotCX0KLQlpZiAoY2FsbF9ydGNfaW50ZXJydXB0KSB7Ci0JCXJ0Y19pbnRfZmxhZyB8PSAoUlRDX0lSUUYgfCAoUlRDX05VTV9JTlRTIDw8IDgpKTsKLQkJcnRjX2ludGVycnVwdChydGNfaW50X2ZsYWcsIGRldl9pZCk7Ci0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IF9faW5pdCBub2hwZXRfc2V0dXAoY2hhciAqcykgCi17IAotCW5vaHBldCA9IDE7Ci0JcmV0dXJuIDE7Ci19IAotCi1fX3NldHVwKCJub2hwZXQiLCBub2hwZXRfc2V0dXApOwotCi1pbnQgX19pbml0IG5vdHNjX3NldHVwKGNoYXIgKnMpCi17Ci0Jbm90c2MgPSAxOwotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJub3RzYyIsIG5vdHNjX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC90c2MuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC90c2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTU4MzE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RzYy5jCkBAIC0wLDAgKzEsMjI2IEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKworI2luY2x1ZGUgPGFzbS90aW1leC5oPgorCitzdGF0aWMgaW50IG5vdHNjIF9faW5pdGRhdGEgPSAwOworCit1bnNpZ25lZCBpbnQgY3B1X2toejsJCS8qIFRTQyBjbG9ja3MgLyB1c2VjLCBub3QgdXNlZCBoZXJlICovCitFWFBPUlRfU1lNQk9MKGNwdV9raHopOworCitzdGF0aWMgdW5zaWduZWQgaW50IGN5YzJuc19zY2FsZSBfX3JlYWRfbW9zdGx5OworCit2b2lkIHNldF9jeWMybnNfc2NhbGUodW5zaWduZWQgbG9uZyBraHopCit7CisJY3ljMm5zX3NjYWxlID0gKE5TRUNfUEVSX01TRUMgPDwgTlNfU0NBTEUpIC8ga2h6OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGN5Y2xlc18yX25zKHVuc2lnbmVkIGxvbmcgbG9uZyBjeWMpCit7CisJcmV0dXJuIChjeWMgKiBjeWMybnNfc2NhbGUpID4+IE5TX1NDQUxFOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGEgPSAwOworCisJLyogQ291bGQgZG8gQ1BVIGNvcmUgc3luYyBoZXJlLiBPcHRlcm9uIGNhbiBleGVjdXRlIHJkdHNjIHNwZWN1bGF0aXZlbHksCisJICogd2hpY2ggbWVhbnMgaXQgaXMgbm90IGNvbXBsZXRlbHkgZXhhY3QgYW5kIG1heSBub3QgYmUgbW9ub3Rvbm91cworCSAqIGJldHdlZW4gQ1BVcy4gQnV0IHRoZSBlcnJvcnMgc2hvdWxkIGJlIHRvbyBzbWFsbCB0byBtYXR0ZXIgZm9yCisJICogc2NoZWR1bGluZyBwdXJwb3Nlcy4KKwkgKi8KKworCXJkdHNjbGwoYSk7CisJcmV0dXJuIGN5Y2xlc18yX25zKGEpOworfQorCitzdGF0aWMgaW50IHRzY191bnN0YWJsZTsKKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfdHNjX3Vuc3RhYmxlKHZvaWQpCit7CisJcmV0dXJuIHRzY191bnN0YWJsZTsKK30KKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKworLyogRnJlcXVlbmN5IHNjYWxpbmcgc3VwcG9ydC4gQWRqdXN0IHRoZSBUU0MgYmFzZWQgdGltZXIgd2hlbiB0aGUgY3B1IGZyZXF1ZW5jeQorICogY2hhbmdlcy4KKyAqCisgKiBSRUQtUEVOOiBPbiBTTVAgd2UgYXNzdW1lIGFsbCBDUFVzIHJ1biB3aXRoIHRoZSBzYW1lIGZyZXF1ZW5jeS4gIEl0J3MKKyAqIG5vdCB0aGF0IGltcG9ydGFudCBiZWNhdXNlIGN1cnJlbnQgT3B0ZXJvbiBzZXR1cHMgZG8gbm90IHN1cHBvcnQKKyAqIHNjYWxpbmcgb24gU01QIGFueXJvYWRzLgorICoKKyAqIFNob3VsZCBmaXggdXAgbGFzdF90c2MgdG9vLiBDdXJyZW50bHkgZ2V0dGltZW9mZGF5IGluIHRoZQorICogZmlyc3QgdGljayBhZnRlciB0aGUgY2hhbmdlIHdpbGwgYmUgc2xpZ2h0bHkgd3JvbmcuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCitzdGF0aWMgdW5zaWduZWQgaW50IGNwdWZyZXFfZGVsYXllZF9pc3NjaGVkID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9pbml0ID0gMDsKK3N0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3B1ZnJlcV9kZWxheWVkX2dldF93b3JrOworCitzdGF0aWMgdm9pZCBoYW5kbGVfY3B1ZnJlcV9kZWxheWVkX2dldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnYpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQljcHVmcmVxX2dldChjcHUpOworCX0KKwljcHVmcmVxX2RlbGF5ZWRfaXNzY2hlZCA9IDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgIHJlZl9mcmVxID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeV9yZWYgPSAwOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfa2h6X3JlZiA9IDA7CisKK3N0YXRpYyBpbnQgdGltZV9jcHVmcmVxX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAorCQkJCSB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nICpscGosIGR1bW15OworCisJaWYgKGNwdV9oYXMoJmNwdV9kYXRhW2ZyZXEtPmNwdV0sIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpCisJCXJldHVybiAwOworCisJbHBqID0gJmR1bW15OworCWlmICghKGZyZXEtPmZsYWdzICYgQ1BVRlJFUV9DT05TVF9MT09QUykpCisjaWZkZWYgQ09ORklHX1NNUAorCQlscGogPSAmY3B1X2RhdGFbZnJlcS0+Y3B1XS5sb29wc19wZXJfamlmZnk7CisjZWxzZQorCQlscGogPSAmYm9vdF9jcHVfZGF0YS5sb29wc19wZXJfamlmZnk7CisjZW5kaWYKKworCWlmICghcmVmX2ZyZXEpIHsKKwkJcmVmX2ZyZXEgPSBmcmVxLT5vbGQ7CisJCWxvb3BzX3Blcl9qaWZmeV9yZWYgPSAqbHBqOworCQljcHVfa2h6X3JlZiA9IGNwdV9raHo7CisJfQorCWlmICgodmFsID09IENQVUZSRVFfUFJFQ0hBTkdFICAmJiBmcmVxLT5vbGQgPCBmcmVxLT5uZXcpIHx8CisJCSh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIGZyZXEtPm9sZCA+IGZyZXEtPm5ldykgfHwKKwkJKHZhbCA9PSBDUFVGUkVRX1JFU1VNRUNIQU5HRSkpIHsKKwkJKmxwaiA9CisJCWNwdWZyZXFfc2NhbGUobG9vcHNfcGVyX2ppZmZ5X3JlZiwgcmVmX2ZyZXEsIGZyZXEtPm5ldyk7CisKKwkJY3B1X2toeiA9IGNwdWZyZXFfc2NhbGUoY3B1X2toel9yZWYsIHJlZl9mcmVxLCBmcmVxLT5uZXcpOworCQlpZiAoIShmcmVxLT5mbGFncyAmIENQVUZSRVFfQ09OU1RfTE9PUFMpKQorCQkJbWFya190c2NfdW5zdGFibGUoKTsKKwl9CisKKwlzZXRfY3ljMm5zX3NjYWxlKGNwdV9raHpfcmVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRpbWVfY3B1ZnJlcV9ub3RpZmllcl9ibG9jayA9IHsKKwkubm90aWZpZXJfY2FsbCAgPSB0aW1lX2NwdWZyZXFfbm90aWZpZXIKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfdHNjKHZvaWQpCit7CisJSU5JVF9XT1JLKCZjcHVmcmVxX2RlbGF5ZWRfZ2V0X3dvcmssIGhhbmRsZV9jcHVmcmVxX2RlbGF5ZWRfZ2V0KTsKKwlpZiAoIWNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJnRpbWVfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKKwkJCQkgICAgICAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKSkKKwkJY3B1ZnJlcV9pbml0ID0gMTsKKwlyZXR1cm4gMDsKK30KKworY29yZV9pbml0Y2FsbChjcHVmcmVxX3RzYyk7CisKKyNlbmRpZgorCitzdGF0aWMgaW50IHRzY191bnN0YWJsZSA9IDA7CisKKy8qCisgKiBNYWtlIGFuIGVkdWNhdGVkIGd1ZXNzIGlmIHRoZSBUU0MgaXMgdHJ1c3R3b3J0aHkgYW5kIHN5bmNocm9uaXplZAorICogb3ZlciBhbGwgQ1BVcy4KKyAqLworX19jcHVpbml0IGludCB1bnN5bmNocm9uaXplZF90c2Modm9pZCkKK3sKKwlpZiAodHNjX3Vuc3RhYmxlKQorCQlyZXR1cm4gMTsKKworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAoYXBpY19pc19jbHVzdGVyZWRfYm94KCkpCisJCXJldHVybiAxOworI2VuZGlmCisJLyogTW9zdCBpbnRlbCBzeXN0ZW1zIGhhdmUgc3luY2hyb25pemVkIFRTQ3MgZXhjZXB0IGZvcgorCSAgIG11bHRpIG5vZGUgc3lzdGVtcyAqLworIAlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpIHsKKyNpZmRlZiBDT05GSUdfQUNQSQorCQkvKiBCdXQgVFNDIGRvZXNuJ3QgdGljayBpbiBDMyBzbyBkb24ndCB1c2UgaXQgdGhlcmUgKi8KKwkJaWYgKGFjcGlfZ2JsX0ZBRFQuaGVhZGVyLmxlbmd0aCA+IDAgJiYgYWNwaV9nYmxfRkFEVC5DM2xhdGVuY3kgPCAxMDAwKQorCQkJcmV0dXJuIDE7CisjZW5kaWYKKyAJCXJldHVybiAwOworCX0KKworIAkvKiBBc3N1bWUgbXVsdGkgc29ja2V0IHN5c3RlbXMgYXJlIG5vdCBzeW5jaHJvbml6ZWQgKi8KKyAJcmV0dXJuIG51bV9wcmVzZW50X2NwdXMoKSA+IDE7Cit9CisKK2ludCBfX2luaXQgbm90c2Nfc2V0dXAoY2hhciAqcykKK3sKKwlub3RzYyA9IDE7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoIm5vdHNjIiwgbm90c2Nfc2V0dXApOworCisKKy8qIGNsb2NrIHNvdXJjZSBjb2RlOiAqLworc3RhdGljIGN5Y2xlX3QgcmVhZF90c2Modm9pZCkKK3sKKwljeWNsZV90IHJldCA9IChjeWNsZV90KWdldF9jeWNsZXNfc3luYygpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjeWNsZV90IF9fdnN5c2NhbGxfZm4gdnJlYWRfdHNjKHZvaWQpCit7CisJY3ljbGVfdCByZXQgPSAoY3ljbGVfdClnZXRfY3ljbGVzX3N5bmMoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3RzYyA9IHsKKwkubmFtZQkJCT0gInRzYyIsCisJLnJhdGluZwkJCT0gMzAwLAorCS5yZWFkCQkJPSByZWFkX3RzYywKKwkubWFzawkJCT0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCksCisJLnNoaWZ0CQkJPSAyMiwKKwkuZmxhZ3MJCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTIHwKKwkJCQkgIENMT0NLX1NPVVJDRV9NVVNUX1ZFUklGWSwKKwkudnJlYWQJCQk9IHZyZWFkX3RzYywKK307CisKK3ZvaWQgbWFya190c2NfdW5zdGFibGUodm9pZCkKK3sKKwlpZiAoIXRzY191bnN0YWJsZSkgeworCQl0c2NfdW5zdGFibGUgPSAxOworCQkvKiBDaGFuZ2Ugb25seSB0aGUgcmF0aW5nLCB3aGVuIG5vdCByZWdpc3RlcmVkICovCisJCWlmIChjbG9ja3NvdXJjZV90c2MubXVsdCkKKwkJCWNsb2Nrc291cmNlX2NoYW5nZV9yYXRpbmcoJmNsb2Nrc291cmNlX3RzYywgMCk7CisJCWVsc2UKKwkJCWNsb2Nrc291cmNlX3RzYy5yYXRpbmcgPSAwOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1hcmtfdHNjX3Vuc3RhYmxlKTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF90c2NfY2xvY2tzb3VyY2Uodm9pZCkKK3sKKwlpZiAoIW5vdHNjKSB7CisJCWNsb2Nrc291cmNlX3RzYy5tdWx0ID0gY2xvY2tzb3VyY2Vfa2h6Mm11bHQoY3B1X2toeiwKKwkJCQkJCQljbG9ja3NvdXJjZV90c2Muc2hpZnQpOworCQlpZiAoY2hlY2tfdHNjX3Vuc3RhYmxlKCkpCisJCQljbG9ja3NvdXJjZV90c2MucmF0aW5nID0gMDsKKworCQlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3RzYyk7CisJfQorCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChpbml0X3RzY19jbG9ja3NvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdHNjX3N5bmMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC90c2Nfc3luYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNGYwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdHNjX3N5bmMuYwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIGFyY2gveDg2XzY0L2tlcm5lbC90c2Nfc3luYy5jOiBjaGVjayBUU0Mgc3luY2hyb25pemF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqCisgKiBXZSBjaGVjayB3aGV0aGVyIGFsbCBib290IENQVXMgaGF2ZSB0aGVpciBUU0MncyBzeW5jaHJvbml6ZWQsCisgKiBwcmludCBhIHdhcm5pbmcgaWYgbm90IGFuZCB0dXJuIG9mZiB0aGUgVFNDIGNsb2NrLXNvdXJjZS4KKyAqCisgKiBUaGUgd2FycC1jaGVjayBpcyBwb2ludC10by1wb2ludCBiZXR3ZWVuIHR3byBDUFVzLCB0aGUgQ1BVCisgKiBpbml0aWF0aW5nIHRoZSBib290dXAgaXMgdGhlICdzb3VyY2UgQ1BVJywgdGhlIGZyZXNobHkgYm9vdGluZworICogQ1BVIGlzIHRoZSAndGFyZ2V0IENQVScuCisgKgorICogT25seSB0d28gQ1BVcyBtYXkgcGFydGljaXBhdGUgLSB0aGV5IGNhbiBlbnRlciBpbiBhbnkgb3JkZXIuCisgKiAoIFRoZSBzZXJpYWwgbmF0dXJlIG9mIHRoZSBib290IGxvZ2ljIGFuZCB0aGUgQ1BVIGhvdHBsdWcgbG9jaworICogICBwcm90ZWN0cyBhZ2FpbnN0IG1vcmUgdGhhbiAyIENQVXMgZW50ZXJpbmcgdGhpcyBjb2RlLiApCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxhc20vdHNjLmg+CisKKy8qCisgKiBFbnRyeS9leGl0IGNvdW50ZXJzIHRoYXQgbWFrZSBzdXJlIHRoYXQgYm90aCBDUFVzCisgKiBydW4gdGhlIG1lYXN1cmVtZW50IGNvZGUgYXQgb25jZToKKyAqLworc3RhdGljIF9fY3B1aW5pdGRhdGEgYXRvbWljX3Qgc3RhcnRfY291bnQ7CitzdGF0aWMgX19jcHVpbml0ZGF0YSBhdG9taWNfdCBzdG9wX2NvdW50OworCisvKgorICogV2UgdXNlIGEgcmF3IHNwaW5sb2NrIGluIHRoaXMgZXhjZXB0aW9uYWwgY2FzZSwgYmVjYXVzZQorICogd2Ugd2FudCB0byBoYXZlIHRoZSBmYXN0ZXN0LCBpbmxpbmVkLCBub24tZGVidWcgdmVyc2lvbgorICogb2YgYSBjcml0aWNhbCBzZWN0aW9uLCB0byBiZSBhYmxlIHRvIHByb3ZlIFRTQyB0aW1lLXdhcnBzOgorICovCitzdGF0aWMgX19jcHVpbml0ZGF0YSByYXdfc3BpbmxvY2tfdCBzeW5jX2xvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CitzdGF0aWMgX19jcHVpbml0ZGF0YSBjeWNsZXNfdCBsYXN0X3RzYzsKK3N0YXRpYyBfX2NwdWluaXRkYXRhIGN5Y2xlc190IG1heF93YXJwOworc3RhdGljIF9fY3B1aW5pdGRhdGEgaW50IG5yX3dhcnBzOworCisvKgorICogVFNDLXdhcnAgbWVhc3VyZW1lbnQgbG9vcCBydW5uaW5nIG9uIGJvdGggQ1BVczoKKyAqLworc3RhdGljIF9fY3B1aW5pdCB2b2lkIGNoZWNrX3RzY193YXJwKHZvaWQpCit7CisJY3ljbGVzX3Qgc3RhcnQsIG5vdywgcHJldiwgZW5kOworCWludCBpOworCisJc3RhcnQgPSBnZXRfY3ljbGVzX3N5bmMoKTsKKwkvKgorCSAqIFRoZSBtZWFzdXJlbWVudCBydW5zIGZvciAyMCBtc2VjczoKKwkgKi8KKwllbmQgPSBzdGFydCArIGNwdV9raHogKiAyMFVMTDsKKwlub3cgPSBzdGFydDsKKworCWZvciAoaSA9IDA7IDsgaSsrKSB7CisJCS8qCisJCSAqIFdlIHRha2UgdGhlIGdsb2JhbCBsb2NrLCBtZWFzdXJlIFRTQywgc2F2ZSB0aGUKKwkJICogcHJldmlvdXMgVFNDIHRoYXQgd2FzIG1lYXN1cmVkIChwb3NzaWJseSBvbgorCQkgKiBhbm90aGVyIENQVSkgYW5kIHVwZGF0ZSB0aGUgcHJldmlvdXMgVFNDIHRpbWVzdGFtcC4KKwkJICovCisJCV9fcmF3X3NwaW5fbG9jaygmc3luY19sb2NrKTsKKwkJcHJldiA9IGxhc3RfdHNjOworCQlub3cgPSBnZXRfY3ljbGVzX3N5bmMoKTsKKwkJbGFzdF90c2MgPSBub3c7CisJCV9fcmF3X3NwaW5fdW5sb2NrKCZzeW5jX2xvY2spOworCisJCS8qCisJCSAqIEJlIG5pY2UgZXZlcnkgbm93IGFuZCB0aGVuIChhbmQgYWxzbyBjaGVjayB3aGV0aGVyCisJCSAqIG1lYXN1cmVtZW50IGlzIGRvbmUgW3dlIGFsc28gaW5zZXJ0IGEgMTAwIG1pbGxpb24KKwkJICogbG9vcHMgc2FmZXR5IGV4aXQsIHNvIHdlIGRvbnQgbG9jayB1cCBpbiBjYXNlIHRoZQorCQkgKiBUU0MgcmVhZG91dCBpcyB0b3RhbGx5IGJyb2tlbl0pOgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KCEoaSAmIDcpKSkgeworCQkJaWYgKG5vdyA+IGVuZCB8fCBpID4gMTAwMDAwMDAwKQorCQkJCWJyZWFrOworCQkJY3B1X3JlbGF4KCk7CisJCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKKwkJfQorCQkvKgorCQkgKiBPdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uIHdlIGNhbiBub3cgc2VlIHdoZXRoZXIKKwkJICogd2Ugc2F3IGEgdGltZS13YXJwIG9mIHRoZSBUU0MgZ29pbmcgYmFja3dhcmRzOgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHByZXYgPiBub3cpKSB7CisJCQlfX3Jhd19zcGluX2xvY2soJnN5bmNfbG9jayk7CisJCQltYXhfd2FycCA9IG1heChtYXhfd2FycCwgcHJldiAtIG5vdyk7CisJCQlucl93YXJwcysrOworCQkJX19yYXdfc3Bpbl91bmxvY2soJnN5bmNfbG9jayk7CisJCX0KKworCX0KK30KKworLyoKKyAqIFNvdXJjZSBDUFUgY2FsbHMgaW50byB0aGlzIC0gaXQgd2FpdHMgZm9yIHRoZSBmcmVzaGx5IGJvb3RlZAorICogdGFyZ2V0IENQVSB0byBhcnJpdmUgYW5kIHRoZW4gc3RhcnRzIHRoZSBtZWFzdXJlbWVudDoKKyAqLwordm9pZCBfX2NwdWluaXQgY2hlY2tfdHNjX3N5bmNfc291cmNlKGludCBjcHUpCit7CisJaW50IGNwdXMgPSAyOworCisJLyoKKwkgKiBObyBuZWVkIHRvIGNoZWNrIGlmIHdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBUU0MgaXMgbm90CisJICogc3luY2hyb25pemVkOgorCSAqLworCWlmICh1bnN5bmNocm9uaXplZF90c2MoKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiY2hlY2tpbmcgVFNDIHN5bmNocm9uaXphdGlvbiBbQ1BVIyVkIC0+IENQVSMlZF06IiwKKwkJCSAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHUpOworCisJLyoKKwkgKiBSZXNldCBpdCAtIGluIGNhc2UgdGhpcyBpcyBhIHNlY29uZCBib290dXA6CisJICovCisJYXRvbWljX3NldCgmc3RvcF9jb3VudCwgMCk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHRoZSB0YXJnZXQgdG8gYXJyaXZlOgorCSAqLworCXdoaWxlIChhdG9taWNfcmVhZCgmc3RhcnRfY291bnQpICE9IGNwdXMtMSkKKwkJY3B1X3JlbGF4KCk7CisJLyoKKwkgKiBUcmlnZ2VyIHRoZSB0YXJnZXQgdG8gY29udGludWUgaW50byB0aGUgbWVhc3VyZW1lbnQgdG9vOgorCSAqLworCWF0b21pY19pbmMoJnN0YXJ0X2NvdW50KTsKKworCWNoZWNrX3RzY193YXJwKCk7CisKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnN0b3BfY291bnQpICE9IGNwdXMtMSkKKwkJY3B1X3JlbGF4KCk7CisKKwkvKgorCSAqIFJlc2V0IGl0IC0ganVzdCBpbiBjYXNlIHdlIGJvb3QgYW5vdGhlciBDUFUgbGF0ZXI6CisJICovCisJYXRvbWljX3NldCgmc3RhcnRfY291bnQsIDApOworCisJaWYgKG5yX3dhcnBzKSB7CisJCXByaW50aygiXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTWVhc3VyZWQgJUxkIGN5Y2xlcyBUU0Mgd2FycCBiZXR3ZWVuIENQVXMsIgorCQkJCSAgICAiIHR1cm5pbmcgb2ZmIFRTQyBjbG9jay5cbiIsIG1heF93YXJwKTsKKwkJbWFya190c2NfdW5zdGFibGUoKTsKKwkJbnJfd2FycHMgPSAwOworCQltYXhfd2FycCA9IDA7CisJCWxhc3RfdHNjID0gMDsKKwl9IGVsc2UgeworCQlwcmludGsoIiBwYXNzZWQuXG4iKTsKKwl9CisKKwkvKgorCSAqIExldCB0aGUgdGFyZ2V0IGNvbnRpbnVlIHdpdGggdGhlIGJvb3R1cDoKKwkgKi8KKwlhdG9taWNfaW5jKCZzdG9wX2NvdW50KTsKK30KKworLyoKKyAqIEZyZXNobHkgYm9vdGVkIENQVXMgY2FsbCBpbnRvIHRoaXM6CisgKi8KK3ZvaWQgX19jcHVpbml0IGNoZWNrX3RzY19zeW5jX3RhcmdldCh2b2lkKQoreworCWludCBjcHVzID0gMjsKKworCWlmICh1bnN5bmNocm9uaXplZF90c2MoKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBSZWdpc3RlciB0aGlzIENQVSdzIHBhcnRpY2lwYXRpb24gYW5kIHdhaXQgZm9yIHRoZQorCSAqIHNvdXJjZSBDUFUgdG8gc3RhcnQgdGhlIG1lYXN1cmVtZW50OgorCSAqLworCWF0b21pY19pbmMoJnN0YXJ0X2NvdW50KTsKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnN0YXJ0X2NvdW50KSAhPSBjcHVzKQorCQljcHVfcmVsYXgoKTsKKworCWNoZWNrX3RzY193YXJwKCk7CisKKwkvKgorCSAqIE9rLCB3ZSBhcmUgZG9uZToKKwkgKi8KKwlhdG9taWNfaW5jKCZzdG9wX2NvdW50KTsKKworCS8qCisJICogV2FpdCBmb3IgdGhlIHNvdXJjZSBDUFUgdG8gcHJpbnQgc3R1ZmY6CisJICovCisJd2hpbGUgKGF0b21pY19yZWFkKCZzdG9wX2NvdW50KSAhPSBjcHVzKQorCQljcHVfcmVsYXgoKTsKK30KKyN1bmRlZiBOUl9MT09QUworCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGMzNjBjNDIuLmI3MzIxMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC04OCwzMSArODgsMjUgQEAKICAgX192c3lzY2FsbF8wID0gVlNZU0NBTExfVklSVF9BRERSOwogCiAgIC4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKLSAgLnh0aW1lX2xvY2sgOiBBVChWTE9BRCgueHRpbWVfbG9jaykpIHsgKigueHRpbWVfbG9jaykgfQotICB4dGltZV9sb2NrID0gVlZJUlQoLnh0aW1lX2xvY2spOwotCi0gIC52eHRpbWUgOiBBVChWTE9BRCgudnh0aW1lKSkgeyAqKC52eHRpbWUpIH0KLSAgdnh0aW1lID0gVlZJUlQoLnZ4dGltZSk7CisgIC52c3lzY2FsbF9mbiA6IEFUKFZMT0FEKC52c3lzY2FsbF9mbikpIHsgKigudnN5c2NhbGxfZm4pIH0KKyAgLiA9IEFMSUdOKENPTkZJR19YODZfTDFfQ0FDSEVfQllURVMpOworICAudnN5c2NhbGxfZ3RvZF9kYXRhIDogQVQoVkxPQUQoLnZzeXNjYWxsX2d0b2RfZGF0YSkpCisJCXsgKigudnN5c2NhbGxfZ3RvZF9kYXRhKSB9CisgIHZzeXNjYWxsX2d0b2RfZGF0YSA9IFZWSVJUKC52c3lzY2FsbF9ndG9kX2RhdGEpOwogCiAgIC52Z2V0Y3B1X21vZGUgOiBBVChWTE9BRCgudmdldGNwdV9tb2RlKSkgeyAqKC52Z2V0Y3B1X21vZGUpIH0KICAgdmdldGNwdV9tb2RlID0gVlZJUlQoLnZnZXRjcHVfbW9kZSk7CiAKLSAgLnN5c190eiA6IEFUKFZMT0FEKC5zeXNfdHopKSB7ICooLnN5c190eikgfQotICBzeXNfdHogPSBWVklSVCguc3lzX3R6KTsKLQotICAuc3lzY3RsX3ZzeXNjYWxsIDogQVQoVkxPQUQoLnN5c2N0bF92c3lzY2FsbCkpIHsgKiguc3lzY3RsX3ZzeXNjYWxsKSB9Ci0gIHN5c2N0bF92c3lzY2FsbCA9IFZWSVJUKC5zeXNjdGxfdnN5c2NhbGwpOwotCi0gIC54dGltZSA6IEFUKFZMT0FEKC54dGltZSkpIHsgKigueHRpbWUpIH0KLSAgeHRpbWUgPSBWVklSVCgueHRpbWUpOwotCiAgIC4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKICAgLmppZmZpZXMgOiBBVChWTE9BRCguamlmZmllcykpIHsgKiguamlmZmllcykgfQogICBqaWZmaWVzID0gVlZJUlQoLmppZmZpZXMpOwogCi0gIC52c3lzY2FsbF8xIEFERFIoLnZzeXNjYWxsXzApICsgMTAyNDogQVQoVkxPQUQoLnZzeXNjYWxsXzEpKSB7ICooLnZzeXNjYWxsXzEpIH0KLSAgLnZzeXNjYWxsXzIgQUREUigudnN5c2NhbGxfMCkgKyAyMDQ4OiBBVChWTE9BRCgudnN5c2NhbGxfMikpIHsgKigudnN5c2NhbGxfMikgfQotICAudnN5c2NhbGxfMyBBRERSKC52c3lzY2FsbF8wKSArIDMwNzI6IEFUKFZMT0FEKC52c3lzY2FsbF8zKSkgeyAqKC52c3lzY2FsbF8zKSB9CisgIC52c3lzY2FsbF8xIEFERFIoLnZzeXNjYWxsXzApICsgMTAyNDogQVQoVkxPQUQoLnZzeXNjYWxsXzEpKQorCQl7ICooLnZzeXNjYWxsXzEpIH0KKyAgLnZzeXNjYWxsXzIgQUREUigudnN5c2NhbGxfMCkgKyAyMDQ4OiBBVChWTE9BRCgudnN5c2NhbGxfMikpCisJCXsgKigudnN5c2NhbGxfMikgfQorICAudnN5c2NhbGxfMyBBRERSKC52c3lzY2FsbF8wKSArIDMwNzI6IEFUKFZMT0FEKC52c3lzY2FsbF8zKSkKKwkJeyAqKC52c3lzY2FsbF8zKSB9CiAKICAgLiA9IFZTWVNDQUxMX1ZJUlRfQUREUiArIDQwOTY7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC92c3lzY2FsbC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3ZzeXNjYWxsLmMKaW5kZXggMzEzZGM2YS4uMTgwZmY5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3ZzeXNjYWxsLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3ZzeXNjYWxsLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ2V0Y3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CkBAIC0zNCw2ICszNSw3IEBACiAjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC00NCw1NiArNDYsNDEgQEAKICNkZWZpbmUgX192c3lzY2FsbChucikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCxfX3NlY3Rpb25fXygiLnZzeXNjYWxsXyIgI25yKSkpCiAjZGVmaW5lIF9fc3lzY2FsbF9jbG9iYmVyICJyMTEiLCJyY3giLCJtZW1vcnkiCiAKLWludCBfX3N5c2N0bF92c3lzY2FsbCBfX3NlY3Rpb25fc3lzY3RsX3ZzeXNjYWxsID0gMTsKLXNlcWxvY2tfdCBfX3h0aW1lX2xvY2sgX19zZWN0aW9uX3h0aW1lX2xvY2sgPSBTRVFMT0NLX1VOTE9DS0VEOworc3RydWN0IHZzeXNjYWxsX2d0b2RfZGF0YV90IHsKKwlzZXFsb2NrX3QgbG9jazsKKwlpbnQgc3lzY3RsX2VuYWJsZWQ7CisJc3RydWN0IHRpbWV2YWwgd2FsbF90aW1lX3R2OworCXN0cnVjdCB0aW1lem9uZSBzeXNfdHo7CisJY3ljbGVfdCBvZmZzZXRfYmFzZTsKKwlzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2s7Cit9OwogaW50IF9fdmdldGNwdV9tb2RlIF9fc2VjdGlvbl92Z2V0Y3B1X21vZGU7CiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB0aW1ldmFsX25vcm1hbGl6ZShzdHJ1Y3QgdGltZXZhbCAqIHR2KQorc3RydWN0IHZzeXNjYWxsX2d0b2RfZGF0YV90IF9fdnN5c2NhbGxfZ3RvZF9kYXRhIF9fc2VjdGlvbl92c3lzY2FsbF9ndG9kX2RhdGEgPQogewotCXRpbWVfdCBfX3NlYzsKKwkubG9jayA9IFNFUUxPQ0tfVU5MT0NLRUQsCisJLnN5c2N0bF9lbmFibGVkID0gMSwKK307CiAKLQlfX3NlYyA9IHR2LT50dl91c2VjIC8gMTAwMDAwMDsKLQlpZiAoX19zZWMpIHsKLQkJdHYtPnR2X3VzZWMgJT0gMTAwMDAwMDsKLQkJdHYtPnR2X3NlYyArPSBfX3NlYzsKLQl9Cit2b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKndhbGxfdGltZSwgc3RydWN0IGNsb2Nrc291cmNlICpjbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ2c3lzY2FsbF9ndG9kX2RhdGEubG9jaywgZmxhZ3MpOworCS8qIGNvcHkgdnN5c2NhbGwgZGF0YSAqLworCXZzeXNjYWxsX2d0b2RfZGF0YS5jbG9jayA9ICpjbG9jazsKKwl2c3lzY2FsbF9ndG9kX2RhdGEud2FsbF90aW1lX3R2LnR2X3NlYyA9IHdhbGxfdGltZS0+dHZfc2VjOworCXZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RpbWVfdHYudHZfdXNlYyA9IHdhbGxfdGltZS0+dHZfbnNlYy8xMDAwOworCXZzeXNjYWxsX2d0b2RfZGF0YS5zeXNfdHogPSBzeXNfdHo7CisJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnZzeXNjYWxsX2d0b2RfZGF0YS5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBkb192Z2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICogdHYpCi17Ci0JbG9uZyBzZXF1ZW5jZSwgdDsKLQl1bnNpZ25lZCBsb25nIHNlYywgdXNlYzsKLQotCWRvIHsKLQkJc2VxdWVuY2UgPSByZWFkX3NlcWJlZ2luKCZfX3h0aW1lX2xvY2spOwotCQkKLQkJc2VjID0gX194dGltZS50dl9zZWM7Ci0JCXVzZWMgPSBfX3h0aW1lLnR2X25zZWMgLyAxMDAwOwotCi0JCWlmIChfX3Z4dGltZS5tb2RlICE9IFZYVElNRV9IUEVUKSB7Ci0JCQl0ID0gZ2V0X2N5Y2xlc19zeW5jKCk7Ci0JCQlpZiAodCA8IF9fdnh0aW1lLmxhc3RfdHNjKQotCQkJCXQgPSBfX3Z4dGltZS5sYXN0X3RzYzsKLQkJCXVzZWMgKz0gKCh0IC0gX192eHRpbWUubGFzdF90c2MpICoKLQkJCQkgX192eHRpbWUudHNjX3F1b3QpID4+IDMyOwotCQkJLyogU2VlIGNvbW1lbnQgaW4geDg2XzY0IGRvX2dldHRpbWVvZmRheS4gKi8KLQkJfSBlbHNlIHsKLQkJCXVzZWMgKz0gKChyZWFkbCgodm9pZCBfX2lvbWVtICopCi0JCQkJICAgZml4X3RvX3ZpcnQoVlNZU0NBTExfSFBFVCkgKyAweGYwKSAtCi0JCQkJICBfX3Z4dGltZS5sYXN0KSAqIF9fdnh0aW1lLnF1b3QpID4+IDMyOwotCQl9Ci0JfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmX194dGltZV9sb2NrLCBzZXF1ZW5jZSkpOwotCi0JdHYtPnR2X3NlYyA9IHNlYyArIHVzZWMgLyAxMDAwMDAwOwotCXR2LT50dl91c2VjID0gdXNlYyAlIDEwMDAwMDA7Ci19Ci0KLS8qIFJFRC1QRU4gbWF5IHdhbnQgdG8gcmVhZGQgc2VxIGxvY2tpbmcsIGJ1dCB0aGVuIHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgd3JpdGUtb25jZS4gKi8KKy8qIFJFRC1QRU4gbWF5IHdhbnQgdG8gcmVhZGQgc2VxIGxvY2tpbmcsIGJ1dCB0aGVuIHRoZSB2YXJpYWJsZSBzaG91bGQgYmUKKyAqIHdyaXRlLW9uY2UuCisgKi8KIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBkb19nZXRfdHooc3RydWN0IHRpbWV6b25lICogdHopCiB7Ci0JKnR6ID0gX19zeXNfdHo7CisJKnR6ID0gX192c3lzY2FsbF9ndG9kX2RhdGEuc3lzX3R6OwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KQpAQCAtMTAxLDcgKzg4LDggQEAKIAlpbnQgcmV0OwogCWFzbSB2b2xhdGlsZSgidnN5c2MyOiBzeXNjYWxsIgogCQk6ICI9YSIgKHJldCkKLQkJOiAiMCIgKF9fTlJfZ2V0dGltZW9mZGF5KSwiRCIgKHR2KSwiUyIgKHR6KSA6IF9fc3lzY2FsbF9jbG9iYmVyICk7CisJCTogIjAiIChfX05SX2dldHRpbWVvZmRheSksIkQiICh0diksIlMiICh0eikKKwkJOiBfX3N5c2NhbGxfY2xvYmJlciApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExNCwxMCArMTAyLDQ0IEBACiAJcmV0dXJuIHNlY3M7CiB9CiAKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBkb192Z2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICogdHYpCit7CisJY3ljbGVfdCBub3csIGJhc2UsIG1hc2ssIGN5Y2xlX2RlbHRhOworCXVuc2lnbmVkIGxvbmcgc2VxLCBtdWx0LCBzaGlmdCwgbnNlY19kZWx0YTsKKwljeWNsZV90ICgqdnJlYWQpKHZvaWQpOworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmX192c3lzY2FsbF9ndG9kX2RhdGEubG9jayk7CisKKwkJdnJlYWQgPSBfX3ZzeXNjYWxsX2d0b2RfZGF0YS5jbG9jay52cmVhZDsKKwkJaWYgKHVubGlrZWx5KCFfX3ZzeXNjYWxsX2d0b2RfZGF0YS5zeXNjdGxfZW5hYmxlZCB8fCAhdnJlYWQpKSB7CisJCQlnZXR0aW1lb2ZkYXkodHYsMCk7CisJCQlyZXR1cm47CisJCX0KKwkJbm93ID0gdnJlYWQoKTsKKwkJYmFzZSA9IF9fdnN5c2NhbGxfZ3RvZF9kYXRhLmNsb2NrLmN5Y2xlX2xhc3Q7CisJCW1hc2sgPSBfX3ZzeXNjYWxsX2d0b2RfZGF0YS5jbG9jay5tYXNrOworCQltdWx0ID0gX192c3lzY2FsbF9ndG9kX2RhdGEuY2xvY2subXVsdDsKKwkJc2hpZnQgPSBfX3ZzeXNjYWxsX2d0b2RfZGF0YS5jbG9jay5zaGlmdDsKKworCQkqdHYgPSBfX3ZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RpbWVfdHY7CisKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZfX3ZzeXNjYWxsX2d0b2RfZGF0YS5sb2NrLCBzZXEpKTsKKworCS8qIGNhbGN1bGF0ZSBpbnRlcnZhbDogKi8KKwljeWNsZV9kZWx0YSA9IChub3cgLSBiYXNlKSAmIG1hc2s7CisJLyogY29udmVydCB0byBuc2VjczogKi8KKwluc2VjX2RlbHRhID0gKGN5Y2xlX2RlbHRhICogbXVsdCkgPj4gc2hpZnQ7CisKKwkvKiBjb252ZXJ0IHRvIHVzZWNzIGFuZCBhZGQgdG8gdGltZXNwZWM6ICovCisJdHYtPnR2X3VzZWMgKz0gbnNlY19kZWx0YSAvIE5TRUNfUEVSX1VTRUM7CisJd2hpbGUgKHR2LT50dl91c2VjID4gVVNFQ19QRVJfU0VDKSB7CisJCXR2LT50dl9zZWMgKz0gMTsKKwkJdHYtPnR2X3VzZWMgLT0gVVNFQ19QRVJfU0VDOworCX0KK30KKwogaW50IF9fdnN5c2NhbGwoMCkgdmdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqIHR2LCBzdHJ1Y3QgdGltZXpvbmUgKiB0eikKIHsKLQlpZiAoIV9fc3lzY3RsX3ZzeXNjYWxsKQotCQlyZXR1cm4gZ2V0dGltZW9mZGF5KHR2LHR6KTsKIAlpZiAodHYpCiAJCWRvX3ZnZXR0aW1lb2ZkYXkodHYpOwogCWlmICh0eikKQEAgLTEyOSwxMSArMTUxLDExIEBACiAgKiB1bmxpa2VseSAqLwogdGltZV90IF9fdnN5c2NhbGwoMSkgdnRpbWUodGltZV90ICp0KQogewotCWlmICghX19zeXNjdGxfdnN5c2NhbGwpCisJaWYgKHVubGlrZWx5KCFfX3ZzeXNjYWxsX2d0b2RfZGF0YS5zeXNjdGxfZW5hYmxlZCkpCiAJCXJldHVybiB0aW1lX3N5c2NhbGwodCk7CiAJZWxzZSBpZiAodCkKLQkJKnQgPSBfX3h0aW1lLnR2X3NlYzsJCQotCXJldHVybiBfX3h0aW1lLnR2X3NlYzsKKwkJKnQgPSBfX3ZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RpbWVfdHYudHZfc2VjOworCXJldHVybiBfX3ZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RpbWVfdHYudHZfc2VjOwogfQogCiAvKiBGYXN0IHdheSB0byBnZXQgY3VycmVudCBDUFUgYW5kIG5vZGUuCkBAIC0yMTAsNyArMjMyLDcgQEAKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCWlmICghc3lzY3RsX3ZzeXNjYWxsKSB7CisJaWYgKCF2c3lzY2FsbF9ndG9kX2RhdGEuc3lzY3RsX2VuYWJsZWQpIHsKIAkJd3JpdGV3KFNZU0NBTEwsIG1hcDEpOwogCQl3cml0ZXcoU1lTQ0FMTCwgbWFwMik7CiAJfSBlbHNlIHsKQEAgLTIzMiw3ICsyNTQsOCBAQAogCiBzdGF0aWMgY3RsX3RhYmxlIGtlcm5lbF90YWJsZTJbXSA9IHsKIAl7IC5jdGxfbmFtZSA9IDk5LCAucHJvY25hbWUgPSAidnN5c2NhbGw2NCIsCi0JICAuZGF0YSA9ICZzeXNjdGxfdnN5c2NhbGwsIC5tYXhsZW4gPSBzaXplb2YoaW50KSwgLm1vZGUgPSAwNjQ0LAorCSAgLmRhdGEgPSAmdnN5c2NhbGxfZ3RvZF9kYXRhLnN5c2N0bF9lbmFibGVkLCAubWF4bGVuID0gc2l6ZW9mKGludCksCisJICAubW9kZSA9IDA2NDQsCiAJICAuc3RyYXRlZ3kgPSB2c3lzY2FsbF9zeXNjdGxfbm9zdHJhdCwKIAkgIC5wcm9jX2hhbmRsZXIgPSB2c3lzY2FsbF9zeXNjdGxfY2hhbmdlIH0sCiAJe30KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC94ODY2NF9rc3ltcy5jIGIvYXJjaC94ODZfNjQva2VybmVsL3g4NjY0X2tzeW1zLmMKaW5kZXggNmQ3N2U0Ny4uMGRmZmFlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3g4NjY0X2tzeW1zLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3g4NjY0X2tzeW1zLmMKQEAgLTI2LDYgKzI2LDcgQEAKIEVYUE9SVF9TWU1CT0woX19wdXRfdXNlcl84KTsKIAogRVhQT1JUX1NZTUJPTChjb3B5X3VzZXJfZ2VuZXJpYyk7CitFWFBPUlRfU1lNQk9MKF9fY29weV91c2VyX25vY2FjaGUpOwogRVhQT1JUX1NZTUJPTChjb3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKGNvcHlfdG9fdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMpOwpAQCAtMzQsOCArMzUsOCBAQAogRVhQT1JUX1NZTUJPTChjbGVhcl9wYWdlKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiB2b2lkIEZBU1RDQUxMKCBfX3dyaXRlX2xvY2tfZmFpbGVkKHJ3bG9ja190ICpydykpOwotZXh0ZXJuIHZvaWQgRkFTVENBTEwoIF9fcmVhZF9sb2NrX2ZhaWxlZChyd2xvY2tfdCAqcncpKTsKK2V4dGVybiB2b2lkICBfX3dyaXRlX2xvY2tfZmFpbGVkKHJ3bG9ja190ICpydyk7CitleHRlcm4gdm9pZCAgX19yZWFkX2xvY2tfZmFpbGVkKHJ3bG9ja190ICpydyk7CiBFWFBPUlRfU1lNQk9MKF9fd3JpdGVfbG9ja19mYWlsZWQpOwogRVhQT1JUX1NZTUJPTChfX3JlYWRfbG9ja19mYWlsZWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9saWIvTWFrZWZpbGUgYi9hcmNoL3g4Nl82NC9saWIvTWFrZWZpbGUKaW5kZXggYjc4ZDQxNy4uOGQ1ZjgzNWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Nl82NC9saWIvTWFrZWZpbGUKQEAgLTksNCArOSw0IEBACiBsaWIteSA6PSBjc3VtLXBhcnRpYWwubyBjc3VtLWNvcHkubyBjc3VtLXdyYXBwZXJzLm8gZGVsYXkubyBcCiAJdXNlcmNvcHkubyBnZXR1c2VyLm8gcHV0dXNlci5vICBcCiAJdGh1bmsubyBjbGVhcl9wYWdlLm8gY29weV9wYWdlLm8gYml0c3RyLm8gYml0b3BzLm8KLWxpYi15ICs9IG1lbWNweS5vIG1lbW1vdmUubyBtZW1zZXQubyBjb3B5X3VzZXIubyByd2xvY2subworbGliLXkgKz0gbWVtY3B5Lm8gbWVtbW92ZS5vIG1lbXNldC5vIGNvcHlfdXNlci5vIHJ3bG9jay5vIGNvcHlfdXNlcl9ub2NhY2hlLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2xpYi9jb3B5X3VzZXJfbm9jYWNoZS5TIGIvYXJjaC94ODZfNjQvbGliL2NvcHlfdXNlcl9ub2NhY2hlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyMGVmYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2XzY0L2xpYi9jb3B5X3VzZXJfbm9jYWNoZS5TCkBAIC0wLDAgKzEsMjE3IEBACisvKiBDb3B5cmlnaHQgMjAwMiBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCisgKiBTdWJqZWN0IHRvIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdjIuCisgKgorICogRnVuY3Rpb25zIHRvIGNvcHkgZnJvbSBhbmQgdG8gdXNlciBzcGFjZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworI2RlZmluZSBGSVhfQUxJR05NRU5UIDEKKworI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKworLyoKKyAqIGNvcHlfdXNlcl9ub2NhY2hlIC0gVW5jYWNoZWQgbWVtb3J5IGNvcHkgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcKKyAqIFRoaXMgd2lsbCBmb3JjZSBkZXN0aW5hdGlvbi9zb3VyY2Ugb3V0IG9mIGNhY2hlIGZvciBtb3JlIHBlcmZvcm1hbmNlLgorICoKKyAqIElucHV0OgorICogcmRpIGRlc3RpbmF0aW9uCisgKiByc2kgc291cmNlCisgKiByZHggY291bnQKKyAqIHJjeCB6ZXJvIGZsYWcJd2hlbiAxIHplcm8gb24gZXhjZXB0aW9uCisgKgorICogT3V0cHV0OgorICogZWF4IHVuY29waWVkIGJ5dGVzIG9yIDAgaWYgc3VjY2Vzc2Z1bC4KKyAqLworRU5UUlkoX19jb3B5X3VzZXJfbm9jYWNoZSkKKwlDRklfU1RBUlRQUk9DCisJcHVzaHEgJXJieAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4CisJQ0ZJX1JFTF9PRkZTRVQgcmJ4LCAwCisJcHVzaHEgJXJjeAkJLyogc2F2ZSB6ZXJvIGZsYWcgKi8KKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAorCUNGSV9SRUxfT0ZGU0VUIHJjeCwgMAorCisJeG9ybCAlZWF4LCVlYXgJCS8qIHplcm8gZm9yIHRoZSBleGNlcHRpb24gaGFuZGxlciAqLworCisjaWZkZWYgRklYX0FMSUdOTUVOVAorCS8qIGNoZWNrIGZvciBiYWQgYWxpZ25tZW50IG9mIGRlc3RpbmF0aW9uICovCisJbW92bCAlZWRpLCVlY3gKKwlhbmRsICQ3LCVlY3gKKwlqbnogIC5MYmFkX2FsaWdubWVudAorLkxhZnRlcl9iYWRfYWxpZ25tZW50OgorI2VuZGlmCisKKwltb3ZxICVyZHgsJXJjeAorCisJbW92bCAkNjQsJWVieAorCXNocnEgJDYsJXJkeAorCWRlY3EgJXJkeAorCWpzICAgLkxoYW5kbGVfdGFpbAorCisJLnAyYWxpZ24gNAorLkxsb29wOgorLkxzMToJbW92cSAoJXJzaSksJXIxMQorLkxzMjoJbW92cSAxKjgoJXJzaSksJXI4CisuTHMzOgltb3ZxIDIqOCglcnNpKSwlcjkKKy5MczQ6CW1vdnEgMyo4KCVyc2kpLCVyMTAKKy5MZDE6CW1vdm50aSAlcjExLCglcmRpKQorLkxkMjoJbW92bnRpICVyOCwxKjgoJXJkaSkKKy5MZDM6CW1vdm50aSAlcjksMio4KCVyZGkpCisuTGQ0Ogltb3ZudGkgJXIxMCwzKjgoJXJkaSkKKworLkxzNToJbW92cSA0KjgoJXJzaSksJXIxMQorLkxzNjoJbW92cSA1KjgoJXJzaSksJXI4CisuTHM3Ogltb3ZxIDYqOCglcnNpKSwlcjkKKy5Mczg6CW1vdnEgNyo4KCVyc2kpLCVyMTAKKy5MZDU6CW1vdm50aSAlcjExLDQqOCglcmRpKQorLkxkNjoJbW92bnRpICVyOCw1KjgoJXJkaSkKKy5MZDc6CW1vdm50aSAlcjksNio4KCVyZGkpCisuTGQ4Ogltb3ZudGkgJXIxMCw3KjgoJXJkaSkKKworCWRlYyAgJXJkeAorCisJbGVhcSA2NCglcnNpKSwlcnNpCisJbGVhcSA2NCglcmRpKSwlcmRpCisKKwlqbnMgIC5MbG9vcAorCisJLnAyYWxpZ24gNAorLkxoYW5kbGVfdGFpbDoKKwltb3ZsICVlY3gsJWVkeAorCWFuZGwgJDYzLCVlY3gKKwlzaHJsICQzLCVlY3gKKwlqeiAgIC5MaGFuZGxlXzcKKwltb3ZsICQ4LCVlYngKKwkucDJhbGlnbiA0CisuTGxvb3BfODoKKy5Mczk6CW1vdnEgKCVyc2kpLCVyOAorLkxkOToJbW92bnRpICVyOCwoJXJkaSkKKwlkZWNsICVlY3gKKwlsZWFxIDgoJXJkaSksJXJkaQorCWxlYXEgOCglcnNpKSwlcnNpCisJam56IC5MbG9vcF84CisKKy5MaGFuZGxlXzc6CisJbW92bCAlZWR4LCVlY3gKKwlhbmRsICQ3LCVlY3gKKwlqeiAgIC5MZW5kZQorCS5wMmFsaWduIDQKKy5MbG9vcF8xOgorLkxzMTA6CW1vdmIgKCVyc2kpLCVibAorLkxkMTA6CW1vdmIgJWJsLCglcmRpKQorCWluY3EgJXJkaQorCWluY3EgJXJzaQorCWRlY2wgJWVjeAorCWpueiAuTGxvb3BfMQorCisJQ0ZJX1JFTUVNQkVSX1NUQVRFCisuTGVuZGU6CisJcG9wcSAlcmN4CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04CisJQ0ZJX1JFU1RPUkUgJXJjeAorCXBvcHEgJXJieAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtOAorCUNGSV9SRVNUT1JFIHJieAorCXJldAorCUNGSV9SRVNUT1JFX1NUQVRFCisKKyNpZmRlZiBGSVhfQUxJR05NRU5UCisJLyogYWxpZ24gZGVzdGluYXRpb24gKi8KKwkucDJhbGlnbiA0CisuTGJhZF9hbGlnbm1lbnQ6CisJbW92bCAkOCwlcjlkCisJc3VibCAlZWN4LCVyOWQKKwltb3ZsICVyOWQsJWVjeAorCWNtcHEgJXI5LCVyZHgKKwlqeiAgIC5MaGFuZGxlXzcKKwlqcyAgIC5MaGFuZGxlXzcKKy5MYWxpZ25fMToKKy5MczExOgltb3ZiICglcnNpKSwlYmwKKy5MZDExOgltb3ZiICVibCwoJXJkaSkKKwlpbmNxICVyc2kKKwlpbmNxICVyZGkKKwlkZWNsICVlY3gKKwlqbnogLkxhbGlnbl8xCisJc3VicSAlcjksJXJkeAorCWptcCAuTGFmdGVyX2JhZF9hbGlnbm1lbnQKKyNlbmRpZgorCisJLyogdGFibGUgc29ydGVkIGJ5IGV4Y2VwdGlvbiBhZGRyZXNzICovCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKKwkuYWxpZ24gOAorCS5xdWFkIC5MczEsLkxzMWUKKwkucXVhZCAuTHMyLC5MczJlCisJLnF1YWQgLkxzMywuTHMzZQorCS5xdWFkIC5MczQsLkxzNGUKKwkucXVhZCAuTGQxLC5MczFlCisJLnF1YWQgLkxkMiwuTHMyZQorCS5xdWFkIC5MZDMsLkxzM2UKKwkucXVhZCAuTGQ0LC5MczRlCisJLnF1YWQgLkxzNSwuTHM1ZQorCS5xdWFkIC5MczYsLkxzNmUKKwkucXVhZCAuTHM3LC5MczdlCisJLnF1YWQgLkxzOCwuTHM4ZQorCS5xdWFkIC5MZDUsLkxzNWUKKwkucXVhZCAuTGQ2LC5MczZlCisJLnF1YWQgLkxkNywuTHM3ZQorCS5xdWFkIC5MZDgsLkxzOGUKKwkucXVhZCAuTHM5LC5MZV9xdWFkCisJLnF1YWQgLkxkOSwuTGVfcXVhZAorCS5xdWFkIC5MczEwLC5MZV9ieXRlCisJLnF1YWQgLkxkMTAsLkxlX2J5dGUKKyNpZmRlZiBGSVhfQUxJR05NRU5UCisJLnF1YWQgLkxzMTEsLkx6ZXJvX3Jlc3QKKwkucXVhZCAuTGQxMSwuTHplcm9fcmVzdAorI2VuZGlmCisJLnF1YWQgLkxlNSwuTGVfemVybworCS5wcmV2aW91cworCisJLyogY29tcHV0ZSA2NC1vZmZzZXQgZm9yIG1haW4gbG9vcC4gOCBieXRlcyBhY2N1cmFjeSB3aXRoIGVycm9yIG9uIHRoZQorCSAgIHBlc3NpbWlzdGljIHNpZGUuIHRoaXMgaXMgZ3Jvc3MuIGl0IHdvdWxkIGJlIGJldHRlciB0byBmaXggdGhlCisJICAgaW50ZXJmYWNlLiAqLworCS8qIGVheDogemVybywgZWJ4OiA2NCAqLworLkxzMWU6IAlhZGRsICQ4LCVlYXgKKy5MczJlOiAJYWRkbCAkOCwlZWF4CisuTHMzZTogCWFkZGwgJDgsJWVheAorLkxzNGU6IAlhZGRsICQ4LCVlYXgKKy5MczVlOiAJYWRkbCAkOCwlZWF4CisuTHM2ZTogCWFkZGwgJDgsJWVheAorLkxzN2U6IAlhZGRsICQ4LCVlYXgKKy5MczhlOiAJYWRkbCAkOCwlZWF4CisJYWRkcSAlcmJ4LCVyZGkJLyogKzY0ICovCisJc3VicSAlcmF4LCVyZGkgIC8qIGNvcnJlY3QgZGVzdGluYXRpb24gd2l0aCBjb21wdXRlZCBvZmZzZXQgKi8KKworCXNobHEgJDYsJXJkeAkvKiBsb29wIGNvdW50ZXIgKiA2NCAoc3RyaWRlIGxlbmd0aCkgKi8KKwlhZGRxICVyYXgsJXJkeAkvKiBhZGQgb2Zmc2V0IHRvIGxvb3BjbnQgKi8KKwlhbmRsICQ2MywlZWN4CS8qIHJlbWFpbmluZyBieXRlcyAqLworCWFkZHEgJXJjeCwlcmR4CS8qIGFkZCB0aGVtICovCisJam1wIC5MemVyb19yZXN0CisKKwkvKiBleGNlcHRpb24gb24gcXVhZCB3b3JkIGxvb3AgaW4gdGFpbCBoYW5kbGluZyAqLworCS8qIGVjeDoJbG9vcGNudC84LCAlZWR4OiBsZW5ndGgsIHJkaTogY29ycmVjdCAqLworLkxlX3F1YWQ6CisJc2hsbCAkMywlZWN4CisJYW5kbCAkNywlZWR4CisJYWRkbCAlZWN4LCVlZHgKKwkvKiBlZHg6IGJ5dGVzIHRvIHplcm8sIHJkaTogZGVzdCwgZWF4Onplcm8gKi8KKy5MemVyb19yZXN0OgorCWNtcGwgJDAsKCVyc3ApCS8qIHplcm8gZmxhZyBzZXQ/ICovCisJanogICAuTGVfemVybworCW1vdnEgJXJkeCwlcmN4CisuTGVfYnl0ZToKKwl4b3JsICVlYXgsJWVheAorLkxlNToJcmVwCisJc3Rvc2IKKwkvKiB3aGVuIHRoZXJlIGlzIGFub3RoZXIgZXhjZXB0aW9uIHdoaWxlIHplcm9pbmcgdGhlIHJlc3QganVzdCByZXR1cm4gKi8KKy5MZV96ZXJvOgorCW1vdnEgJXJkeCwlcmF4CisJam1wIC5MZW5kZQorCUNGSV9FTkRQUk9DCitFTkRQUk9DKF9fY29weV91c2VyX25vY2FjaGUpCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vZmF1bHQuYyBiL2FyY2gveDg2XzY0L21tL2ZhdWx0LmMKaW5kZXggNDllOGNmMi4uNmFkYTcyMyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL3g4Nl82NC9tbS9mYXVsdC5jCkBAIC01NiwxNyArNTYsMTcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcik7CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKLQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCitzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpCiB7CiAJc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7CiAJCS5yZWdzID0gcmVncywKLQkJLnN0ciA9IHN0ciwKKwkJLnN0ciA9ICJwYWdlIGZhdWx0IiwKIAkJLmVyciA9IGVyciwKLQkJLnRyYXBuciA9IHRyYXAsCi0JCS5zaWduciA9IHNpZworCQkudHJhcG5yID0gMTQsCisJCS5zaWduciA9IFNJR1NFR1YKIAl9OwotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmbm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4sIHZhbCwgJmFyZ3MpOworCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmbm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJRV9QQUdFX0ZBVUxULCAmYXJncyk7CiB9CiAKIC8qIFNvbWV0aW1lcyB0aGUgQ1BVIHJlcG9ydHMgaW52YWxpZCBleGNlcHRpb25zIG9uIHByZWZldGNoLgpAQCAtMzU1LDggKzM1NSw3IEBACiAJCQlpZiAodm1hbGxvY19mYXVsdChhZGRyZXNzKSA+PSAwKQogCQkJCXJldHVybjsKIAkJfQotCQlpZiAobm90aWZ5X3BhZ2VfZmF1bHQoRElFX1BBR0VfRkFVTFQsICJwYWdlIGZhdWx0IiwgcmVncywgZXJyb3JfY29kZSwgMTQsCi0JCQkJCQlTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJaWYgKG5vdGlmeV9wYWdlX2ZhdWx0KHJlZ3MsIGVycm9yX2NvZGUpID09IE5PVElGWV9TVE9QKQogCQkJcmV0dXJuOwogCQkvKgogCQkgKiBEb24ndCB0YWtlIHRoZSBtbSBzZW1hcGhvcmUgaGVyZS4gSWYgd2UgZml4dXAgYSBwcmVmZXRjaApAQCAtMzY1LDggKzM2NCw3IEBACiAJCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7CiAJfQogCi0JaWYgKG5vdGlmeV9wYWdlX2ZhdWx0KERJRV9QQUdFX0ZBVUxULCAicGFnZSBmYXVsdCIsIHJlZ3MsIGVycm9yX2NvZGUsIDE0LAotCQkJCQlTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwlpZiAobm90aWZ5X3BhZ2VfZmF1bHQocmVncywgZXJyb3JfY29kZSkgPT0gTk9USUZZX1NUT1ApCiAJCXJldHVybjsKIAogCWlmIChsaWtlbHkocmVncy0+ZWZsYWdzICYgWDg2X0VGTEFHU19JRikpCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9udW1hLmMgYi9hcmNoL3g4Nl82NC9tbS9udW1hLmMKaW5kZXggMmVlMmUwMC4uNDFiOGZiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vbnVtYS5jCisrKyBiL2FyY2gveDg2XzY0L21tL251bWEuYwpAQCAtMzYsNiArMzYsOCBAQAogY3B1bWFza190IG5vZGVfdG9fY3B1bWFza1tNQVhfTlVNTk9ERVNdIF9fcmVhZF9tb3N0bHk7CiAKIGludCBudW1hX29mZiBfX2luaXRkYXRhOwordW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG5vZGVtYXBfYWRkcjsKK3Vuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBub2RlbWFwX3NpemU7CiAKIAogLyoKQEAgLTUyLDM0ICs1NCw4OCBAQAogCWludCByZXMgPSAtMTsKIAl1bnNpZ25lZCBsb25nIGFkZHIsIGVuZDsKIAotCWlmIChzaGlmdCA+PSA2NCkKLQkJcmV0dXJuIC0xOwotCW1lbXNldChtZW1ub2RlbWFwLCAweGZmLCBzaXplb2YobWVtbm9kZW1hcCkpOworCW1lbXNldChtZW1ub2RlbWFwLCAweGZmLCBtZW1ub2RlbWFwc2l6ZSk7CiAJZm9yIChpID0gMDsgaSA8IG51bW5vZGVzOyBpKyspIHsKIAkJYWRkciA9IG5vZGVzW2ldLnN0YXJ0OwogCQllbmQgPSBub2Rlc1tpXS5lbmQ7CiAJCWlmIChhZGRyID49IGVuZCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKGVuZCA+PiBzaGlmdCkgPj0gTk9ERU1BUFNJWkUpCisJCWlmICgoZW5kID4+IHNoaWZ0KSA+PSBtZW1ub2RlbWFwc2l6ZSkKIAkJCXJldHVybiAwOwogCQlkbyB7CiAJCQlpZiAobWVtbm9kZW1hcFthZGRyID4+IHNoaWZ0XSAhPSAweGZmKQogCQkJCXJldHVybiAtMTsKIAkJCW1lbW5vZGVtYXBbYWRkciA+PiBzaGlmdF0gPSBpOwotICAgICAgICAgICAgICAgICAgICAgICBhZGRyICs9ICgxVUwgPDwgc2hpZnQpOworCQkJYWRkciArPSAoMVVMIDw8IHNoaWZ0KTsKIAkJfSB3aGlsZSAoYWRkciA8IGVuZCk7CiAJCXJlcyA9IDE7CiAJfSAKIAlyZXR1cm4gcmVzOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBhbGxvY2F0ZV9jYWNoZWFsaWduZWRfbWVtbm9kZW1hcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcGFkLCBwYWRfYWRkcjsKKworCW1lbW5vZGVtYXAgPSBtZW1ub2RlLmVtYmVkZGVkX21hcDsKKwlpZiAobWVtbm9kZW1hcHNpemUgPD0gNDgpCisJCXJldHVybiAwOworCisJcGFkID0gTDFfQ0FDSEVfQllURVMgLSAxOworCXBhZF9hZGRyID0gMHg4MDAwOworCW5vZGVtYXBfc2l6ZSA9IHBhZCArIG1lbW5vZGVtYXBzaXplOworCW5vZGVtYXBfYWRkciA9IGZpbmRfZTgyMF9hcmVhKHBhZF9hZGRyLCBlbmRfcGZuPDxQQUdFX1NISUZULAorCQkJCSAgICAgIG5vZGVtYXBfc2l6ZSk7CisJaWYgKG5vZGVtYXBfYWRkciA9PSAtMVVMKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk5VTUE6IFVuYWJsZSB0byBhbGxvY2F0ZSBNZW1vcnkgdG8gTm9kZSBoYXNoIG1hcFxuIik7CisJCW5vZGVtYXBfYWRkciA9IG5vZGVtYXBfc2l6ZSA9IDA7CisJCXJldHVybiAtMTsKKwl9CisJcGFkX2FkZHIgPSAobm9kZW1hcF9hZGRyICsgcGFkKSAmIH5wYWQ7CisJbWVtbm9kZW1hcCA9IHBoeXNfdG9fdmlydChwYWRfYWRkcik7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiTlVNQTogQWxsb2NhdGVkIG1lbW5vZGVtYXAgZnJvbSAlbHggLSAlbHhcbiIsCisJICAgICAgIG5vZGVtYXBfYWRkciwgbm9kZW1hcF9hZGRyICsgbm9kZW1hcF9zaXplKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBMU0Igb2YgYWxsIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGluIHRoZSBub2RlIG1hcCBpcyB0aGUgdmFsdWUgb2YgdGhlCisgKiBtYXhpbXVtIHBvc3NpYmxlIHNoaWZ0LgorICovCitzdGF0aWMgaW50IF9faW5pdAorZXh0cmFjdF9sc2JfZnJvbV9ub2RlcyAoY29uc3Qgc3RydWN0IGJvb3Rub2RlICpub2RlcywgaW50IG51bW5vZGVzKQoreworCWludCBpLCBub2Rlc191c2VkID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJdW5zaWduZWQgbG9uZyBiaXRmaWVsZCA9IDAsIG1lbXRvcCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtbm9kZXM7IGkrKykgeworCQlzdGFydCA9IG5vZGVzW2ldLnN0YXJ0OworCQllbmQgPSBub2Rlc1tpXS5lbmQ7CisJCWlmIChzdGFydCA+PSBlbmQpCisJCQljb250aW51ZTsKKwkJYml0ZmllbGQgfD0gc3RhcnQ7CisJCW5vZGVzX3VzZWQrKzsKKwkJaWYgKGVuZCA+IG1lbXRvcCkKKwkJCW1lbXRvcCA9IGVuZDsKKwl9CisJaWYgKG5vZGVzX3VzZWQgPD0gMSkKKwkJaSA9IDYzOworCWVsc2UKKwkJaSA9IGZpbmRfZmlyc3RfYml0KCZiaXRmaWVsZCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKjgpOworCW1lbW5vZGVtYXBzaXplID0gKG1lbXRvcCA+PiBpKSsxOworCXJldHVybiBpOworfQorCiBpbnQgX19pbml0IGNvbXB1dGVfaGFzaF9zaGlmdChzdHJ1Y3QgYm9vdG5vZGUgKm5vZGVzLCBpbnQgbnVtbm9kZXMpCiB7Ci0JaW50IHNoaWZ0ID0gMjA7CisJaW50IHNoaWZ0OwogCi0Jd2hpbGUgKHBvcHVsYXRlX21lbW5vZGVtYXAobm9kZXMsIG51bW5vZGVzLCBzaGlmdCArIDEpID49IDApCi0JCXNoaWZ0Kys7Ci0KKwlzaGlmdCA9IGV4dHJhY3RfbHNiX2Zyb21fbm9kZXMobm9kZXMsIG51bW5vZGVzKTsKKwlpZiAoYWxsb2NhdGVfY2FjaGVhbGlnbmVkX21lbW5vZGVtYXAoKSkKKwkJcmV0dXJuIC0xOwogCXByaW50ayhLRVJOX0RFQlVHICJOVU1BOiBVc2luZyAlZCBmb3IgdGhlIGhhc2ggc2hpZnQuXG4iLAogCQlzaGlmdCk7CiAKQEAgLTIxNiwzMSArMjcyLDExMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX05VTUFfRU1VCisvKiBOdW1hIGVtdWxhdGlvbiAqLwogaW50IG51bWFfZmFrZSBfX2luaXRkYXRhID0gMDsKIAotLyogTnVtYSBlbXVsYXRpb24gKi8KKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZmluZCBvdXQgaWYgdGhlIHN0YXJ0IGFuZCBlbmQgY29ycmVzcG9uZCB0bworICogZGlmZmVyZW50IHpvbmVzLgorICovCitpbnQgem9uZV9jcm9zc19vdmVyKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmICgoc3RhcnQgPCAoTUFYX0RNQTMyX1BGTiA8PCBQQUdFX1NISUZUKSkgJiYKKwkJCShlbmQgPj0gKE1BWF9ETUEzMl9QRk4gPDwgUEFHRV9TSElGVCkpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgbnVtYV9lbXVsYXRpb24odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKLSAJaW50IGk7CisgCWludCBpLCBiaWc7CiAgCXN0cnVjdCBib290bm9kZSBub2Rlc1tNQVhfTlVNTk9ERVNdOwotIAl1bnNpZ25lZCBsb25nIHN6ID0gKChlbmRfcGZuIC0gc3RhcnRfcGZuKTw8UEFHRV9TSElGVCkgLyBudW1hX2Zha2U7CisgCXVuc2lnbmVkIGxvbmcgc3osIG9sZF9zejsKKwl1bnNpZ25lZCBsb25nIGhvbGVfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJdW5zaWduZWQgbG9uZyBtYXhfYWRkciA9IChlbmRfcGZuIDw8IFBBR0VfU0hJRlQpOworCisJc3RhcnQgPSAoc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQpOworCWhvbGVfc2l6ZSA9IGU4MjBfaG9sZV9zaXplKHN0YXJ0LCBtYXhfYWRkcik7CisJc3ogPSAobWF4X2FkZHIgLSBzdGFydCAtIGhvbGVfc2l6ZSkgLyBudW1hX2Zha2U7CiAKICAJLyogS2x1ZGdlIG5lZWRlZCBmb3IgdGhlIGhhc2ggZnVuY3Rpb24gKi8KLSAJaWYgKGh3ZWlnaHQ2NChzeikgPiAxKSB7Ci0gCQl1bnNpZ25lZCBsb25nIHggPSAxOwotIAkJd2hpbGUgKCh4IDw8IDEpIDwgc3opCi0gCQkJeCA8PD0gMTsKLSAJCWlmICh4IDwgc3ovMikKLSAJCQlwcmludGsoS0VSTl9FUlIgIk51bWEgZW11bGF0aW9uIHVuYmFsYW5jZWQuIENvbXBsYWluIHRvIG1haW50YWluZXJcbiIpOwotIAkJc3ogPSB4OwotIAl9CiAKKwlvbGRfc3ogPSBzejsKKwkvKgorCSAqIFJvdW5kIGRvd24gdG8gdGhlIG5lYXJlc3QgRkFLRV9OT0RFX01JTl9TSVpFLgorCSAqLworCXN6ICY9IEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLOworCisJLyoKKwkgKiBXZSBlbnN1cmUgdGhhdCBlYWNoIG5vZGUgaXMgYXQgbGVhc3QgNjRNQiBiaWcuICBTbWFsbGVyIHRoYW4gdGhpcworCSAqIHNpemUgY2FuIGNhdXNlIFZNIGhpY2N1cHMuCisJICovCisJaWYgKHN6ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTm90IGVub3VnaCBtZW1vcnkgZm9yICVkIG5vZGVzLiAgUmVkdWNpbmcgIgorCQkJCSJ0aGUgbnVtYmVyIG9mIG5vZGVzXG4iLCBudW1hX2Zha2UpOworCQludW1hX2Zha2UgPSAobWF4X2FkZHIgLSBzdGFydCAtIGhvbGVfc2l6ZSkgLyBGQUtFX05PREVfTUlOX1NJWkU7CisJCXByaW50ayhLRVJOX0lORk8gIk51bWJlciBvZiBmYWtlIG5vZGVzIHdpbGwgYmUgPSAlZFxuIiwKKwkJCQludW1hX2Zha2UpOworCQlzeiA9IEZBS0VfTk9ERV9NSU5fU0laRTsKKwl9CisJLyoKKwkgKiBGaW5kIG91dCBob3cgbWFueSBub2RlcyBjYW4gZ2V0IGFuIGV4dHJhIE5PREVfTUlOX1NJWkUgZ3JhbnVsZS4KKwkgKiBUaGlzIGxvZ2ljIGVuc3VyZXMgdGhlIGV4dHJhIG1lbW9yeSBnZXRzIGRpc3RyaWJ1dGVkIGFtb25nIGFzIG1hbnkKKwkgKiBub2RlcyBhcyBwb3NzaWJsZSAoYXMgY29tcGFyZWQgdG8gb25lIHNpbmdsZSBub2RlIGdldHRpbmcgYWxsIHRoYXQKKwkgKiBleHRyYSBtZW1vcnkuCisJICovCisJYmlnID0gKChvbGRfc3ogLSBzeikgKiBudW1hX2Zha2UpIC8gRkFLRV9OT0RFX01JTl9TSVpFOworCXByaW50ayhLRVJOX0lORk8gIkZha2Ugbm9kZSBTaXplOiAlbHVNQiBob2xlX3NpemU6ICVsdU1CIGJpZyBub2RlczogIgorCQkJIiVkXG4iLAorCQkJKHN6ID4+IDIwKSwgKGhvbGVfc2l6ZSA+PiAyMCksIGJpZyk7CiAgCW1lbXNldCgmbm9kZXMsMCxzaXplb2Yobm9kZXMpKTsKKwllbmQgPSBzdGFydDsKICAJZm9yIChpID0gMDsgaSA8IG51bWFfZmFrZTsgaSsrKSB7Ci0gCQlub2Rlc1tpXS5zdGFydCA9IChzdGFydF9wZm48PFBBR0VfU0hJRlQpICsgaSpzejsKKwkJLyoKKwkJICogSW4gY2FzZSB3ZSBhcmUgbm90IGFibGUgdG8gYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgYWxsCisJCSAqIHRoZSBub2Rlcywgd2UgcmVkdWNlIHRoZSBudW1iZXIgb2YgZmFrZSBub2Rlcy4KKwkJICovCisJCWlmIChlbmQgPj0gbWF4X2FkZHIpIHsKKwkJCW51bWFfZmFrZSA9IGkgLSAxOworCQkJYnJlYWs7CisJCX0KKyAJCXN0YXJ0ID0gbm9kZXNbaV0uc3RhcnQgPSBlbmQ7CisJCS8qCisJCSAqIEZpbmFsIG5vZGUgY2FuIGhhdmUgYWxsIHRoZSByZW1haW5pbmcgbWVtb3J5LgorCQkgKi8KICAJCWlmIChpID09IG51bWFfZmFrZS0xKQotIAkJCXN6ID0gKGVuZF9wZm48PFBBR0VfU0hJRlQpIC0gbm9kZXNbaV0uc3RhcnQ7Ci0gCQlub2Rlc1tpXS5lbmQgPSBub2Rlc1tpXS5zdGFydCArIHN6OworIAkJCXN6ID0gbWF4X2FkZHIgLSBzdGFydDsKKyAJCWVuZCA9IG5vZGVzW2ldLnN0YXJ0ICsgc3o7CisJCS8qCisJCSAqIEZpciAiYmlnIiBudW1iZXIgb2Ygbm9kZXMgZ2V0IGV4dHJhIGdyYW51bGUuCisJCSAqLworCQlpZiAoaSA8IGJpZykKKwkJCWVuZCArPSBGQUtFX05PREVfTUlOX1NJWkU7CisJCS8qCisJCSAqIEl0ZXJhdGUgb3ZlciB0aGUgcmFuZ2UgdG8gZW5zdXJlIHRoYXQgdGhpcyBub2RlIGdldHMgYXQKKwkJICogbGVhc3Qgc3ogYW1vdW50IG9mIFJBTSAoZXhjbHVkaW5nIGhvbGVzKQorCQkgKi8KKwkJd2hpbGUgKChlbmQgLSBzdGFydCAtIGU4MjBfaG9sZV9zaXplKHN0YXJ0LCBlbmQpKSA8IHN6KSB7CisJCQllbmQgKz0gRkFLRV9OT0RFX01JTl9TSVpFOworCQkJaWYgKGVuZCA+PSBtYXhfYWRkcikKKwkJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBMb29rIGF0IHRoZSBuZXh0IG5vZGUgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIHNvbWUgcmVhbCBtZW1vcnkKKwkJICogdG8gbWFwLiAgQmFkIHRoaW5ncyBoYXBwZW4gd2hlbiB0aGUgb25seSBtZW1vcnkgcHJlc2VudAorCQkgKiBpbiBhIHpvbmUgb24gYSBmYWtlIG5vZGUgaXMgSU8gaG9sZS4KKwkJICovCisJCXdoaWxlIChlODIwX2hvbGVfc2l6ZShlbmQsIGVuZCArIEZBS0VfTk9ERV9NSU5fU0laRSkgPiAwKSB7CisJCQlpZiAoem9uZV9jcm9zc19vdmVyKHN0YXJ0LCBlbmQgKyBzeikpIHsKKwkJCQllbmQgPSAoTUFYX0RNQTMyX1BGTiA8PCBQQUdFX1NISUZUKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChlbmQgPj0gbWF4X2FkZHIpCisJCQkJYnJlYWs7CisJCQllbmQgKz0gRkFLRV9OT0RFX01JTl9TSVpFOworCQl9CisJCWlmIChlbmQgPiBtYXhfYWRkcikKKwkJCWVuZCA9IG1heF9hZGRyOworCQlub2Rlc1tpXS5lbmQgPSBlbmQ7CiAgCQlwcmludGsoS0VSTl9JTkZPICJGYWtpbmcgbm9kZSAlZCBhdCAlMDE2THgtJTAxNkx4ICglTHVNQilcbiIsCiAgCQkgICAgICAgaSwKICAJCSAgICAgICBub2Rlc1tpXS5zdGFydCwgbm9kZXNbaV0uZW5kLApAQCAtMjkwLDYgKzQyOCw3IEBACiAJICAgICAgIGVuZF9wZm4gPDwgUEFHRV9TSElGVCk7IAogCQkvKiBzZXR1cCBkdW1teSBub2RlIGNvdmVyaW5nIGFsbCBtZW1vcnkgKi8gCiAJbWVtbm9kZV9zaGlmdCA9IDYzOyAKKwltZW1ub2RlbWFwID0gbWVtbm9kZS5lbWJlZGRlZF9tYXA7CiAJbWVtbm9kZW1hcFswXSA9IDA7CiAJbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKIAlub2RlX3NldF9vbmxpbmUoMCk7CkBAIC0zMjEsMjAgKzQ2MCw2IEBACiAJcmV0dXJuIHBhZ2VzOwogfSAKIAotI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KLXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX3NwYXJzZV9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKQotCQltZW1vcnlfcHJlc2VudChpLCBub2RlX3N0YXJ0X3BmbihpKSwgbm9kZV9lbmRfcGZuKGkpKTsKLQotCXNwYXJzZV9pbml0KCk7Ci19Ci0jZWxzZQotI2RlZmluZSBhcmNoX3NwYXJzZV9pbml0KCkgZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKLQogdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKIHsgCiAJaW50IGk7CkBAIC0zNDQsNyArNDY5LDggQEAKIAltYXhfem9uZV9wZm5zW1pPTkVfRE1BMzJdID0gTUFYX0RNQTMyX1BGTjsKIAltYXhfem9uZV9wZm5zW1pPTkVfTk9STUFMXSA9IGVuZF9wZm47CiAKLQlhcmNoX3NwYXJzZV9pbml0KCk7CisJc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMoTUFYX05VTU5PREVTKTsKKwlzcGFyc2VfaW5pdCgpOwogCiAJZm9yX2VhY2hfb25saW5lX25vZGUoaSkgewogCQlzZXR1cF9ub2RlX3pvbmVzKGkpOyAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Nl82NC9tbS9wYWdlYXR0ci5jCmluZGV4IGNjYjkxZGQuLjY1YzVlYWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODZfNjQvbW0vcGFnZWF0dHIuYwpAQCAtMTA3LDYgKzEwNyw3IEBACiAJcHVkX3QgKnB1ZDsKIAlwbWRfdCAqcG1kOwogCXB0ZV90IGxhcmdlX3B0ZTsKKwl1bnNpZ25lZCBsb25nIHBmbjsKIAogCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKIAlCVUdfT04ocGdkX25vbmUoKnBnZCkpOwpAQCAtMTE0LDcgKzExNSw4IEBACiAJQlVHX09OKHB1ZF9ub25lKCpwdWQpKTsKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CiAJQlVHX09OKHBtZF92YWwoKnBtZCkgJiBfUEFHRV9QU0UpOwotCWxhcmdlX3B0ZSA9IG1rX3B0ZV9waHlzKF9fcGEoYWRkcmVzcykgJiBMQVJHRV9QQUdFX01BU0ssIHJlZl9wcm90KTsKKwlwZm4gPSAoX19wYShhZGRyZXNzKSAmIExBUkdFX1BBR0VfTUFTSykgPj4gUEFHRV9TSElGVDsKKwlsYXJnZV9wdGUgPSBwZm5fcHRlKHBmbiwgcmVmX3Byb3QpOwogCWxhcmdlX3B0ZSA9IHB0ZV9ta2h1Z2UobGFyZ2VfcHRlKTsKIAlzZXRfcHRlKChwdGVfdCAqKXBtZCwgbGFyZ2VfcHRlKTsKIH0gICAgICAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L3BjaS9NYWtlZmlsZSBiL2FyY2gveDg2XzY0L3BjaS9NYWtlZmlsZQppbmRleCAxNDlhYmEwLi5jOWVkZGM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9wY2kvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQvcGNpL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw3IEBACiBvYmotJChDT05GSUdfQUNQSSkJKz0gYWNwaS5vCiBvYmoteQkJCSs9IGxlZ2FjeS5vIGlycS5vIGNvbW1vbi5vIGVhcmx5Lm8KICMgbW1jb25maWcgaGFzIGEgNjRiaXQgc3BlY2lhbAotb2JqLSQoQ09ORklHX1BDSV9NTUNPTkZJRykgKz0gbW1jb25maWcubyBkaXJlY3Qubworb2JqLSQoQ09ORklHX1BDSV9NTUNPTkZJRykgKz0gbW1jb25maWcubyBkaXJlY3QubyBtbWNvbmZpZy1zaGFyZWQubwogCiBvYmotJChDT05GSUdfTlVNQSkJKz0gazgtYnVzLm8KIApAQCAtMjQsMyArMjQsNCBAQAogaTM4Ni15ICArPSAuLi8uLi9pMzg2L3BjaS9pMzg2Lm8KIGluaXQteSArPSAuLi8uLi9pMzg2L3BjaS9pbml0Lm8KIGVhcmx5LXkgKz0gLi4vLi4vaTM4Ni9wY2kvZWFybHkubworbW1jb25maWctc2hhcmVkLXkgKz0gLi4vLi4vaTM4Ni9wY2kvbW1jb25maWctc2hhcmVkLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L3BjaS9tbWNvbmZpZy5jIGIvYXJjaC94ODZfNjQvcGNpL21tY29uZmlnLmMKaW5kZXggZmFhYmI2ZS4uNjVkODI3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvcGNpL21tY29uZmlnLmMKKysrIGIvYXJjaC94ODZfNjQvcGNpL21tY29uZmlnLmMKQEAgLTEzLDE2ICsxMyw2IEBACiAKICNpbmNsdWRlICJwY2kuaCIKIAotLyogYXBlcnR1cmUgaXMgdXAgdG8gMjU2TUIgYnV0IEJJT1MgbWF5IHJlc2VydmUgbGVzcyAqLwotI2RlZmluZSBNTUNPTkZJR19BUEVSX01JTgkoMiAqIDEwMjQqMTAyNCkKLSNkZWZpbmUgTU1DT05GSUdfQVBFUl9NQVgJKDI1NiAqIDEwMjQqMTAyNCkKLQotLyogVmVyaWZ5IHRoZSBmaXJzdCAxNiBidXNzZXMuIFdlIGFzc3VtZSB0aGF0IHN5c3RlbXMgd2l0aCBtb3JlIGJ1c3NlcwotICAgZ2V0IE1DRkcgcmlnaHQuICovCi0jZGVmaW5lIE1BWF9DSEVDS19CVVMgMTYKLQotc3RhdGljIERFQ0xBUkVfQklUTUFQKGZhbGxiYWNrX3Nsb3RzLCAzMipNQVhfQ0hFQ0tfQlVTKTsKLQogLyogU3RhdGljIHZpcnR1YWwgbWFwcGluZyBvZiB0aGUgTU1DT05GSUcgYXBlcnR1cmUgKi8KIHN0cnVjdCBtbWNmZ192aXJ0IHsKIAlzdHJ1Y3QgYWNwaV9tY2ZnX2FsbG9jYXRpb24gKmNmZzsKQEAgLTMyLDMwICsyMiwxNyBAQAogCiBzdGF0aWMgY2hhciBfX2lvbWVtICpnZXRfdmlydCh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBidXMpCiB7Ci0JaW50IGNmZ19udW0gPSAtMTsKIAlzdHJ1Y3QgYWNwaV9tY2ZnX2FsbG9jYXRpb24gKmNmZzsKKwlpbnQgY2ZnX251bTsKIAotCXdoaWxlICgxKSB7Ci0JCSsrY2ZnX251bTsKLQkJaWYgKGNmZ19udW0gPj0gcGNpX21tY2ZnX2NvbmZpZ19udW0pCi0JCQlicmVhazsKKwlmb3IgKGNmZ19udW0gPSAwOyBjZmdfbnVtIDwgcGNpX21tY2ZnX2NvbmZpZ19udW07IGNmZ19udW0rKykgewogCQljZmcgPSBwY2lfbW1jZmdfdmlydFtjZmdfbnVtXS5jZmc7Ci0JCWlmIChjZmctPnBjaV9zZWdtZW50ICE9IHNlZykKLQkJCWNvbnRpbnVlOwotCQlpZiAoKGNmZy0+c3RhcnRfYnVzX251bWJlciA8PSBidXMpICYmCisJCWlmIChjZmctPnBjaV9zZWdtZW50ID09IHNlZyAmJgorCQkgICAgKGNmZy0+c3RhcnRfYnVzX251bWJlciA8PSBidXMpICYmCiAJCSAgICAoY2ZnLT5lbmRfYnVzX251bWJlciA+PSBidXMpKQogCQkJcmV0dXJuIHBjaV9tbWNmZ192aXJ0W2NmZ19udW1dLnZpcnQ7CiAJfQogCi0JLyogSGFuZGxlIG1vcmUgYnJva2VuIE1DRkcgdGFibGVzIG9uIEFzdXMgZXRjLgotCSAgIFRoZXkgb25seSBjb250YWluIGEgc2luZ2xlIGVudHJ5IGZvciBidXMgMC0wLiBBc3N1bWUKLSAJICAgdGhpcyBhcHBsaWVzIHRvIGFsbCBidXNzZXMuICovCi0JY2ZnID0gJnBjaV9tbWNmZ19jb25maWdbMF07Ci0JaWYgKHBjaV9tbWNmZ19jb25maWdfbnVtID09IDEgJiYKLQkJY2ZnLT5wY2lfc2VnbWVudCA9PSAwICYmCi0JCShjZmctPnN0YXJ0X2J1c19udW1iZXIgfCBjZmctPmVuZF9idXNfbnVtYmVyKSA9PSAwKQotCQlyZXR1cm4gcGNpX21tY2ZnX3ZpcnRbMF0udmlydDsKLQogCS8qIEZhbGwgYmFjayB0byB0eXBlIDAgKi8KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTYzLDggKzQwLDggQEAKIHN0YXRpYyBjaGFyIF9faW9tZW0gKnBjaV9kZXZfYmFzZSh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pCiB7CiAJY2hhciBfX2lvbWVtICphZGRyOwotCWlmIChzZWcgPT0gMCAmJiBidXMgPCBNQVhfQ0hFQ0tfQlVTICYmCi0JCXRlc3RfYml0KDMyKmJ1cyArIFBDSV9TTE9UKGRldmZuKSwgZmFsbGJhY2tfc2xvdHMpKQorCWlmIChzZWcgPT0gMCAmJiBidXMgPCBQQ0lfTU1DRkdfTUFYX0NIRUNLX0JVUyAmJgorCQl0ZXN0X2JpdCgzMipidXMgKyBQQ0lfU0xPVChkZXZmbiksIHBjaV9tbWNmZ19mYWxsYmFja19zbG90cykpCiAJCXJldHVybiBOVUxMOwogCWFkZHIgPSBnZXRfdmlydChzZWcsIGJ1cyk7CiAJaWYgKCFhZGRyKQpAQCAtMTM1LDc5ICsxMTIsNDYgQEAKIAkud3JpdGUgPQlwY2lfbW1jZmdfd3JpdGUsCiB9OwogCi0vKiBLOCBzeXN0ZW1zIGhhdmUgc29tZSBkZXZpY2VzICh0eXBpY2FsbHkgaW4gdGhlIGJ1aWx0aW4gbm9ydGhicmlkZ2UpCi0gICB0aGF0IGFyZSBvbmx5IGFjY2Vzc2libGUgdXNpbmcgdHlwZTEKLSAgIE5vcm1hbGx5IHRoaXMgY2FuIGJlIGV4cHJlc3NlZCBpbiB0aGUgTUNGRyBieSBub3QgbGlzdGluZyB0aGVtCi0gICBhbmQgYXNzaWduaW5nIHN1aXRhYmxlIF9TRUdzLCBidXQgdGhpcyBpc24ndCBpbXBsZW1lbnRlZCBpbiBzb21lIEJJT1MuCi0gICBJbnN0ZWFkIHRyeSB0byBkaXNjb3ZlciBhbGwgZGV2aWNlcyBvbiBidXMgMCB0aGF0IGFyZSB1bnJlYWNoYWJsZSB1c2luZyBNTQotICAgYW5kIGZhbGxiYWNrIGZvciB0aGVtLiAqLwotc3RhdGljIF9faW5pdCB2b2lkIHVucmVhY2hhYmxlX2RldmljZXModm9pZCkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBfX2luaXQgbWNmZ19pb3JlbWFwKHN0cnVjdCBhY3BpX21jZmdfYWxsb2NhdGlvbiAqY2ZnKQogewotCWludCBpLCBrOwotCS8qIFVzZSB0aGUgbWF4IGJ1cyBudW1iZXIgZnJvbSBBQ1BJIGhlcmU/ICovCi0JZm9yIChrID0gMDsgayA8IE1BWF9DSEVDS19CVVM7IGsrKykgewotCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQkJdTMyIHZhbDE7Ci0JCQljaGFyIF9faW9tZW0gKmFkZHI7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXUzMiBzaXplOwogCi0JCQlwY2lfY29uZjFfcmVhZCgwLCBrLCBQQ0lfREVWRk4oaSwwKSwgMCwgNCwgJnZhbDEpOwotCQkJaWYgKHZhbDEgPT0gMHhmZmZmZmZmZikKLQkJCQljb250aW51ZTsKLQkJCWFkZHIgPSBwY2lfZGV2X2Jhc2UoMCwgaywgUENJX0RFVkZOKGksIDApKTsKLQkJCWlmIChhZGRyID09IE5VTEx8fCByZWFkbChhZGRyKSAhPSB2YWwxKSB7Ci0JCQkJc2V0X2JpdChpICsgMzIqaywgZmFsbGJhY2tfc2xvdHMpOwotCQkJCXByaW50ayhLRVJOX05PVElDRSAiUENJOiBObyBtbWNvbmZpZyBwb3NzaWJsZSIKLQkJCQkgICAgICAgIiBvbiBkZXZpY2UgJTAyeDolMDJ4XG4iLCBrLCBpKTsKLQkJCX0KLQkJfQorCXNpemUgPSAoY2ZnLT5lbmRfYnVzX251bWJlciArIDEpIDw8IDIwOworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUoY2ZnLT5hZGRyZXNzLCBzaXplKTsKKwlpZiAoYWRkcikgeworCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFVzaW5nIE1NQ09ORklHIGF0ICVMeCAtICVMeFxuIiwKKwkJICAgICAgIGNmZy0+YWRkcmVzcywgY2ZnLT5hZGRyZXNzICsgc2l6ZSAtIDEpOwogCX0KKwlyZXR1cm4gYWRkcjsKIH0KIAotdm9pZCBfX2luaXQgcGNpX21tY2ZnX2luaXQoaW50IHR5cGUpCitpbnQgX19pbml0IHBjaV9tbWNmZ19hcmNoX3JlYWNoYWJsZSh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZGV2Zm4pCit7CisJcmV0dXJuIHBjaV9kZXZfYmFzZShzZWcsIGJ1cywgZGV2Zm4pICE9IE5VTEw7Cit9CisKK2ludCBfX2luaXQgcGNpX21tY2ZnX2FyY2hfaW5pdCh2b2lkKQogewogCWludCBpOwotCi0JaWYgKChwY2lfcHJvYmUgJiBQQ0lfUFJPQkVfTU1DT05GKSA9PSAwKQotCQlyZXR1cm47Ci0KLQlhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX01DRkcsIGFjcGlfcGFyc2VfbWNmZyk7Ci0JaWYgKChwY2lfbW1jZmdfY29uZmlnX251bSA9PSAwKSB8fAotCSAgICAocGNpX21tY2ZnX2NvbmZpZyA9PSBOVUxMKSB8fAotCSAgICAocGNpX21tY2ZnX2NvbmZpZ1swXS5hZGRyZXNzID09IDApKQotCQlyZXR1cm47Ci0KLQkvKiBPbmx5IGRvIHRoaXMgY2hlY2sgd2hlbiB0eXBlIDEgd29ya3MuIElmIGl0IGRvZXNuJ3Qgd29yawotICAgICAgICAgICBhc3N1bWUgd2UgcnVuIG9uIGEgTWFjIGFuZCBhbHdheXMgdXNlIE1DRkcgKi8KLQlpZiAodHlwZSA9PSAxICYmICFlODIwX2FsbF9tYXBwZWQocGNpX21tY2ZnX2NvbmZpZ1swXS5hZGRyZXNzLAotCQkJcGNpX21tY2ZnX2NvbmZpZ1swXS5hZGRyZXNzICsgTU1DT05GSUdfQVBFUl9NSU4sCi0JCQlFODIwX1JFU0VSVkVEKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQklPUyBCdWc6IE1DRkcgYXJlYSBhdCAlbHggaXMgbm90IEU4MjAtcmVzZXJ2ZWRcbiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcpcGNpX21tY2ZnX2NvbmZpZ1swXS5hZGRyZXNzKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IE5vdCB1c2luZyBNTUNPTkZJRy5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcGNpX21tY2ZnX3ZpcnQgPSBrbWFsbG9jKHNpemVvZigqcGNpX21tY2ZnX3ZpcnQpICogcGNpX21tY2ZnX2NvbmZpZ19udW0sIEdGUF9LRVJORUwpOworCXBjaV9tbWNmZ192aXJ0ID0ga21hbGxvYyhzaXplb2YoKnBjaV9tbWNmZ192aXJ0KSAqCisJCQkJIHBjaV9tbWNmZ19jb25maWdfbnVtLCBHRlBfS0VSTkVMKTsKIAlpZiAocGNpX21tY2ZnX3ZpcnQgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQ2FuIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1tY29uZmlnIHN0cnVjdHVyZXNcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KKwogCWZvciAoaSA9IDA7IGkgPCBwY2lfbW1jZmdfY29uZmlnX251bTsgKytpKSB7CiAJCXBjaV9tbWNmZ192aXJ0W2ldLmNmZyA9ICZwY2lfbW1jZmdfY29uZmlnW2ldOwotCQlwY2lfbW1jZmdfdmlydFtpXS52aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9tbWNmZ19jb25maWdbaV0uYWRkcmVzcywKLQkJCQkJCQkgTU1DT05GSUdfQVBFUl9NQVgpOworCQlwY2lfbW1jZmdfdmlydFtpXS52aXJ0ID0gbWNmZ19pb3JlbWFwKCZwY2lfbW1jZmdfY29uZmlnW2ldKTsKIAkJaWYgKCFwY2lfbW1jZmdfdmlydFtpXS52aXJ0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQ2Fubm90IG1hcCBtbWNvbmZpZyBhcGVydHVyZSBmb3IgIgogCQkJCQkic2VnbWVudCAlZFxuIiwKIAkJCQlwY2lfbW1jZmdfY29uZmlnW2ldLnBjaV9zZWdtZW50KTsKLQkJCXJldHVybjsKKwkJCXJldHVybiAwOwogCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIlBDSTogVXNpbmcgTU1DT05GSUcgYXQgJWx4XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcpcGNpX21tY2ZnX2NvbmZpZ1tpXS5hZGRyZXNzKTsKIAl9Ci0KLQl1bnJlYWNoYWJsZV9kZXZpY2VzKCk7Ci0KIAlyYXdfcGNpX29wcyA9ICZwY2lfbW1jZmc7Ci0JcGNpX3Byb2JlID0gKHBjaV9wcm9iZSAmIH5QQ0lfUFJPQkVfTUFTSykgfCBQQ0lfUFJPQkVfTU1DT05GOworCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svS2NvbmZpZy5pb3NjaGVkIGIvYmxvY2svS2NvbmZpZy5pb3NjaGVkCmluZGV4IDkwM2YwZDMuLjdlODAzZmM4IDEwMDY0NAotLS0gYS9ibG9jay9LY29uZmlnLmlvc2NoZWQKKysrIGIvYmxvY2svS2NvbmZpZy5pb3NjaGVkCkBAIC0xNiwxMCArMTYsMTAgQEAKIAl0cmlzdGF0ZSAiQW50aWNpcGF0b3J5IEkvTyBzY2hlZHVsZXIiCiAJZGVmYXVsdCB5CiAJLS0taGVscC0tLQotCSAgVGhlIGFudGljaXBhdG9yeSBJL08gc2NoZWR1bGVyIGlzIHRoZSBkZWZhdWx0IGRpc2sgc2NoZWR1bGVyLiBJdCBpcwotCSAgZ2VuZXJhbGx5IGEgZ29vZCBjaG9pY2UgZm9yIG1vc3QgZW52aXJvbm1lbnRzLCBidXQgaXMgcXVpdGUgbGFyZ2UgYW5kCi0JICBjb21wbGV4IHdoZW4gY29tcGFyZWQgdG8gdGhlIGRlYWRsaW5lIEkvTyBzY2hlZHVsZXIsIGl0IGNhbiBhbHNvIGJlCi0JICBzbG93ZXIgaW4gc29tZSBjYXNlcyBlc3BlY2lhbGx5IHNvbWUgZGF0YWJhc2UgbG9hZHMuCisJICBUaGUgYW50aWNpcGF0b3J5IEkvTyBzY2hlZHVsZXIgaXMgZ2VuZXJhbGx5IGEgZ29vZCBjaG9pY2UgZm9yIG1vc3QKKwkgIGVudmlyb25tZW50cywgYnV0IGlzIHF1aXRlIGxhcmdlIGFuZCBjb21wbGV4IHdoZW4gY29tcGFyZWQgdG8gdGhlCisJICBkZWFkbGluZSBJL08gc2NoZWR1bGVyLCBpdCBjYW4gYWxzbyBiZSBzbG93ZXIgaW4gc29tZSBjYXNlcworCSAgZXNwZWNpYWxseSBzb21lIGRhdGFiYXNlIGxvYWRzLgogCiBjb25maWcgSU9TQ0hFRF9ERUFETElORQogCXRyaXN0YXRlICJEZWFkbGluZSBJL08gc2NoZWR1bGVyIgpAQCAtMzgsNiArMzgsNyBAQAogCSAgVGhlIENGUSBJL08gc2NoZWR1bGVyIHRyaWVzIHRvIGRpc3RyaWJ1dGUgYmFuZHdpZHRoIGVxdWFsbHkKIAkgIGFtb25nIGFsbCBwcm9jZXNzZXMgaW4gdGhlIHN5c3RlbS4gSXQgc2hvdWxkIHByb3ZpZGUgYSBmYWlyCiAJICB3b3JraW5nIGVudmlyb25tZW50LCBzdWl0YWJsZSBmb3IgZGVza3RvcCBzeXN0ZW1zLgorCSAgVGhpcyBpcyB0aGUgZGVmYXVsdCBJL08gc2NoZWR1bGVyLgogCiBjaG9pY2UKIAlwcm9tcHQgIkRlZmF1bHQgSS9PIHNjaGVkdWxlciIKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDM2YmQzZTEuLjA1MGExZjAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKKysrIGIvYmxvY2svZ2VuaGQuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNjEsMTMgKzYyLDcgQEAKIAkvKiB0ZW1wb3JhcnkgKi8KIAlpZiAobWFqb3IgPT0gMCkgewogCQlmb3IgKGluZGV4ID0gQVJSQVlfU0laRShtYWpvcl9uYW1lcyktMTsgaW5kZXggPiAwOyBpbmRleC0tKSB7Ci0JCQkvKgotCQkJICogRGlzYWxsb3cgdGhlIExBTkFOQS1hc3NpZ25lZCBMT0NBTC9FWFBFUklNRU5UQUwKLQkJCSAqIG1ham9ycwotCQkJICovCi0JCQlpZiAoKDYwIDw9IGluZGV4ICYmIGluZGV4IDw9IDYzKSB8fAotCQkJCQkoMTIwIDw9IGluZGV4ICYmIGluZGV4IDw9IDEyNykgfHwKLQkJCQkJKDI0MCA8PSBpbmRleCAmJiBpbmRleCA8PSAyNTQpKQorCQkJaWYgKGlzX2xhbmFuYV9tYWpvcihpbmRleCkpCiAJCQkJY29udGludWU7CiAJCQlpZiAobWFqb3JfbmFtZXNbaW5kZXhdID09IE5VTEwpCiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9ibG9jay9pb2N0bC5jIGIvYmxvY2svaW9jdGwuYwppbmRleCBlM2Y1ZWI5Li5lMDZkYmU5IDEwMDY0NAotLS0gYS9ibG9jay9pb2N0bC5jCisrKyBiL2Jsb2NrL2lvY3RsLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAkJCWZzeW5jX2JkZXYoYmRldnApOwogCQkJaW52YWxpZGF0ZV9iZGV2KGJkZXZwLCAwKTsKIAotCQkJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOworCQkJbXV0ZXhfbG9ja19uZXN0ZWQoJmJkZXYtPmJkX211dGV4LCAxKTsKIAkJCWRlbGV0ZV9wYXJ0aXRpb24oZGlzaywgcGFydCk7CiAJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKIAkJCW11dGV4X3VubG9jaygmYmRldnAtPmJkX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggMjBlYWNjMi4uZTk0MmZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTEzLDYgKzEzLDcgQEAKIAlkZXBlbmRzIG9uIElBNjQgfHwgWDg2CiAJZGVwZW5kcyBvbiBQQ0kKIAlkZXBlbmRzIG9uIFBNCisJc2VsZWN0IFBOUAogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSAoQUNQSSkgc3VwcG9ydCBmb3IgCkBAIC0xMzIsMTUgKzEzMyw2IEBACiAJICBOb3RlIHRoYXQgdGhpcyBpcyBhbiByZWYuIGltcGxlbWVudGF0aW9uIG9ubHkuICBJdCBtYXkgb3IgbWF5IG5vdCB3b3JrCiAJICBmb3IgeW91ciBpbnRlZ3JhdGVkIHZpZGVvIGRldmljZS4KIAotY29uZmlnIEFDUElfSE9US0VZCi0JdHJpc3RhdGUgIkdlbmVyaWMgSG90a2V5IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JZGVwZW5kcyBvbiBYODYKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBFeHBlcmltZW50YWwgY29uc29saWRhdGVkIGhvdGtleSBkcml2ZXIuCi0JICBJZiB5b3UgYXJlIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBBQ1BJX0ZBTgogCXRyaXN0YXRlICJGYW4iCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKaW5kZXggODU2YzMyYi4uNTk1NmU5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQpAQCAtNDYsNyArNDYsNiBAQAogb2JqLSQoQ09ORklHX0FDUElfRE9DSykJCSs9IGRvY2subwogb2JqLSQoQ09ORklHX0FDUElfQkFZKQkJKz0gYmF5Lm8KIG9iai0kKENPTkZJR19BQ1BJX1ZJREVPKQkrPSB2aWRlby5vCi1vYmotJChDT05GSUdfQUNQSV9IT1RLRVkpCSs9IGhvdGtleS5vCiBvYmoteQkJCQkrPSBwY2lfcm9vdC5vIHBjaV9saW5rLm8gcGNpX2lycS5vIHBjaV9iaW5kLm8KIG9iai0kKENPTkZJR19BQ1BJX1BPV0VSKQkrPSBwb3dlci5vCiBvYmotJChDT05GSUdfQUNQSV9QUk9DRVNTT1IpCSs9IHByb2Nlc3Nvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWMuYyBiL2RyaXZlcnMvYWNwaS9hYy5jCmluZGV4IDZkYWVhY2UuLjM3YzdkYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hYy5jCkBAIC0zNSw3ICszNSw2IEBACiAjZGVmaW5lIEFDUElfQUNfQ09NUE9ORU5UCQkweDAwMDIwMDAwCiAjZGVmaW5lIEFDUElfQUNfQ0xBU1MJCQkiYWNfYWRhcHRlciIKICNkZWZpbmUgQUNQSV9BQ19ISUQgCQkJIkFDUEkwMDAzIgotI2RlZmluZSBBQ1BJX0FDX0RSSVZFUl9OQU1FCQkiQUNQSSBBQyBBZGFwdGVyIERyaXZlciIKICNkZWZpbmUgQUNQSV9BQ19ERVZJQ0VfTkFNRQkJIkFDIEFkYXB0ZXIiCiAjZGVmaW5lIEFDUElfQUNfRklMRV9TVEFURQkJInN0YXRlIgogI2RlZmluZSBBQ1BJX0FDX05PVElGWV9TVEFUVVMJCTB4ODAKQEAgLTQ0LDEwICs0MywxMCBAQAogI2RlZmluZSBBQ1BJX0FDX1NUQVRVU19VTktOT1dOCQkweEZGCiAKICNkZWZpbmUgX0NPTVBPTkVOVAkJQUNQSV9BQ19DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfYWMiKQorQUNQSV9NT0RVTEVfTkFNRSgiYWMiKTsKIAotICAgIE1PRFVMRV9BVVRIT1IoIlBhdWwgRGllZmVuYmF1Z2giKTsKLU1PRFVMRV9ERVNDUklQVElPTihBQ1BJX0FDX0RSSVZFUl9OQU1FKTsKK01PRFVMRV9BVVRIT1IoIlBhdWwgRGllZmVuYmF1Z2giKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUNQSSBBQyBBZGFwdGVyIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICphY3BpX2xvY2tfYWNfZGlyKHZvaWQpOwpAQCAtNTgsNyArNTcsNyBAQAogc3RhdGljIGludCBhY3BpX2FjX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfYWNfZHJpdmVyID0gewotCS5uYW1lID0gQUNQSV9BQ19EUklWRVJfTkFNRSwKKwkubmFtZSA9ICJhYyIsCiAJLmNsYXNzID0gQUNQSV9BQ19DTEFTUywKIAkuaWRzID0gQUNQSV9BQ19ISUQsCiAJLm9wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYwppbmRleCBjZDk0NmVkLi5jMjYxNzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCkBAIC0zNSwxNCArMzUsMTMgQEAKICNkZWZpbmUgQUNQSV9NRU1PUllfREVWSUNFX0NPTVBPTkVOVAkJMHgwODAwMDAwMFVMCiAjZGVmaW5lIEFDUElfTUVNT1JZX0RFVklDRV9DTEFTUwkJIm1lbW9yeSIKICNkZWZpbmUgQUNQSV9NRU1PUllfREVWSUNFX0hJRAkJCSJQTlAwQzgwIgotI2RlZmluZSBBQ1BJX01FTU9SWV9ERVZJQ0VfRFJJVkVSX05BTUUJCSJIb3RwbHVnIE1lbSBEcml2ZXIiCiAjZGVmaW5lIEFDUElfTUVNT1JZX0RFVklDRV9OQU1FCQkJIkhvdHBsdWcgTWVtIERldmljZSIKIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX01FTU9SWV9ERVZJQ0VfQ09NUE9ORU5UCiAKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfbWVtb3J5IikKLSAgICBNT0RVTEVfQVVUSE9SKCJOYXZlZW4gQiBTIDxuYXZlZW4uYi5zQGludGVsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTihBQ1BJX01FTU9SWV9ERVZJQ0VfRFJJVkVSX05BTUUpOworQUNQSV9NT0RVTEVfTkFNRSgiYWNwaV9tZW1ob3RwbHVnIik7CitNT0RVTEVfQVVUSE9SKCJOYXZlZW4gQiBTIDxuYXZlZW4uYi5zQGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSG90cGx1ZyBNZW0gRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIEFDUEkgX1NUQSBtZXRob2QgdmFsdWVzICovCkBAIC02MCw3ICs1OSw3IEBACiBzdGF0aWMgaW50IGFjcGlfbWVtb3J5X2RldmljZV9zdGFydChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9tZW1vcnlfZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZSA9IEFDUElfTUVNT1JZX0RFVklDRV9EUklWRVJfTkFNRSwKKwkubmFtZSA9ICJhY3BpX21lbWhvdHBsdWciLAogCS5jbGFzcyA9IEFDUElfTUVNT1JZX0RFVklDRV9DTEFTUywKIAkuaWRzID0gQUNQSV9NRU1PUllfREVWSUNFX0hJRCwKIAkub3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jIGIvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jCmluZGV4IDMxYWQ3MGEuLmI3NzBkZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYworKysgYi9kcml2ZXJzL2FjcGkvYXN1c19hY3BpLmMKQEAgLTE0MSw2ICsxNDEsNyBAQAogCQlXNUEsCQkvL1c1QQogCQlXM1YsICAgICAgICAgICAgLy9XMzAzMFYKIAkJeHhOLAkJLy9NMjQwME4sIE0zNzAwTiwgTTUyMDBOLCBNNjgwME4sIFMxMzAwTiwgUzUyMDBOCisJCUE0UywgICAgICAgICAgICAvL1o4MXNwCiAJCS8vKENlbnRyaW5vKQogCQlFTkRfTU9ERUwKIAl9IG1vZGVsOwkJLy9Nb2RlbHMgY3VycmVudGx5IHN1cHBvcnRlZApAQCAtMzk3LDcgKzM5OCwxNiBAQAogCSAuYnJpZ2h0bmVzc19zZXQgPSAiU1BMViIsCiAJIC5icmlnaHRuZXNzX2dldCA9ICJHUExWIiwKIAkgLmRpc3BsYXlfc2V0ID0gIlNEU1AiLAotCSAuZGlzcGxheV9nZXQgPSAiXFxBRFZHIn0KKwkuZGlzcGxheV9nZXQgPSAiXFxBRFZHIn0sCisKKwl7CisJCS5uYW1lICAgICAgICAgICAgICA9ICJBNFMiLAorCQkuYnJpZ2h0bmVzc19zZXQgICAgPSAiU1BMViIsCisJCS5icmlnaHRuZXNzX2dldCAgICA9ICJHUExWIiwKKwkJLm10X2J0X3N3aXRjaCAgICAgID0gIkJMRUQiLAorCQkubXRfd2xlZCAgICAgICAgICAgPSAiV0xFRCIKKwl9CisKIH07CiAKIC8qIHByb2NkaXIgd2UgdXNlICovCkBAIC00MjEsNyArNDMxLDcgQEAKIHN0YXRpYyBpbnQgYXN1c19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IGFzdXNfaG90a19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYXN1c19ob3RrX2RyaXZlciA9IHsKLQkubmFtZSA9IEFDUElfSE9US19OQU1FLAorCS5uYW1lID0gImFzdXNfYWNwaSIsCiAJLmNsYXNzID0gQUNQSV9IT1RLX0NMQVNTLAogCS5pZHMgPSBBQ1BJX0hPVEtfSElELAogCS5vcHMgPSB7CkBAIC04MzgsNyArODQ4LDcgQEAKIAogc3RhdGljIGludCBzZXRfYnJpZ2h0bmVzc19zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXJldHVybiBzZXRfYnJpZ2h0bmVzcyhiZC0+cHJvcHMtPmJyaWdodG5lc3MpOworCXJldHVybiBzZXRfYnJpZ2h0bmVzcyhiZC0+cHJvcHMuYnJpZ2h0bmVzcyk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTExMTcsNiArMTEyNyw4IEBACiAJCXJldHVybiBXM1Y7CiAJZWxzZSBpZiAoc3RybmNtcChtb2RlbCwgIlc1QSIsIDMpID09IDApCiAJCXJldHVybiBXNUE7CisJZWxzZSBpZiAoc3RybmNtcChtb2RlbCwgIkE0UyIsIDMpID09IDApCisJCXJldHVybiBBNFM7CiAJZWxzZQogCQlyZXR1cm4gRU5EX01PREVMOwogfQpAQCAtMTM0MCwxMSArMTM1Miw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgYXN1c19iYWNrbGlnaHRfZGF0YSA9IHsKLSAgICAgICAgLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYXN1c19iYWNrbGlnaHRfZGF0YSA9IHsKICAgICAgICAgLmdldF9icmlnaHRuZXNzID0gcmVhZF9icmlnaHRuZXNzLAogICAgICAgICAudXBkYXRlX3N0YXR1cyAgPSBzZXRfYnJpZ2h0bmVzc19zdGF0dXMsCi0gICAgICAgIC5tYXhfYnJpZ2h0bmVzcyA9IDE1LAogfTsKIAogc3RhdGljIHZvaWQgX19leGl0IGFzdXNfYWNwaV9leGl0KHZvaWQpCkBAIC0xMzY1LDEwICsxMzc1LDYgQEAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWFjcGlfc3BlY2lmaWNfaG90a2V5X2VuYWJsZWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVc2luZyBnZW5lcmljIGhvdGtleSBkcml2ZXJcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJYXN1c19wcm9jX2RpciA9IHByb2NfbWtkaXIoUFJPQ19BU1VTLCBhY3BpX3Jvb3RfZGlyKTsKIAlpZiAoIWFzdXNfcHJvY19kaXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJBc3VzIEFDUEk6IFVuYWJsZSB0byBjcmVhdGUgL3Byb2MgZW50cnlcbiIpOwpAQCAtMTQwMiw2ICsxNDA4LDcgQEAKIAkJYXN1c19iYWNrbGlnaHRfZGV2aWNlID0gTlVMTDsKIAkJYXN1c19hY3BpX2V4aXQoKTsKIAl9CisgICAgICAgIGFzdXNfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSAxNTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggMmY0NTIxYS4uZTY0Yzc2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC00Miw3ICs0Miw2IEBACiAjZGVmaW5lIEFDUElfQkFUVEVSWV9DT01QT05FTlQJCTB4MDAwNDAwMDAKICNkZWZpbmUgQUNQSV9CQVRURVJZX0NMQVNTCQkiYmF0dGVyeSIKICNkZWZpbmUgQUNQSV9CQVRURVJZX0hJRAkJIlBOUDBDMEEiCi0jZGVmaW5lIEFDUElfQkFUVEVSWV9EUklWRVJfTkFNRQkiQUNQSSBCYXR0ZXJ5IERyaXZlciIKICNkZWZpbmUgQUNQSV9CQVRURVJZX0RFVklDRV9OQU1FCSJCYXR0ZXJ5IgogI2RlZmluZSBBQ1BJX0JBVFRFUllfRklMRV9JTkZPCQkiaW5mbyIKICNkZWZpbmUgQUNQSV9CQVRURVJZX0ZJTEVfU1RBVFVTCSJzdGF0ZSIKQEAgLTUzLDEwICs1MiwxMCBAQAogI2RlZmluZSBBQ1BJX0JBVFRFUllfVU5JVFNfQU1QUwkJIm1BIgogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfQkFUVEVSWV9DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfYmF0dGVyeSIpCitBQ1BJX01PRFVMRV9OQU1FKCJiYXR0ZXJ5Iik7CiAKLSAgICBNT0RVTEVfQVVUSE9SKCJQYXVsIERpZWZlbmJhdWdoIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oQUNQSV9CQVRURVJZX0RSSVZFUl9OQU1FKTsKK01PRFVMRV9BVVRIT1IoIlBhdWwgRGllZmVuYmF1Z2giKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUNQSSBCYXR0ZXJ5IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICphY3BpX2xvY2tfYmF0dGVyeV9kaXIodm9pZCk7CkBAIC02Nyw3ICs2Niw3IEBACiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9yZXN1bWUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfYmF0dGVyeV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBBQ1BJX0JBVFRFUllfRFJJVkVSX05BTUUsCisJLm5hbWUgPSAiYmF0dGVyeSIsCiAJLmNsYXNzID0gQUNQSV9CQVRURVJZX0NMQVNTLAogCS5pZHMgPSBBQ1BJX0JBVFRFUllfSElELAogCS5vcHMgPSB7CkBAIC0zMjQsNiArMzIzLDEzIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHZvaWQgYWNwaV9iYXR0ZXJ5X2NoZWNrX3ByZXNlbnQoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKK3sKKwlpZiAoIWJhdHRlcnktPmZsYWdzLnByZXNlbnQpIHsKKwkJYWNwaV9iYXR0ZXJ5X2NoZWNrKGJhdHRlcnkpOworCX0KK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTIEludGVyZmFjZSAoL3Byb2MpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMzQwLDYgKzM0Niw4IEBACiAJaWYgKCFiYXR0ZXJ5KQogCQlnb3RvIGVuZDsKIAorCWFjcGlfYmF0dGVyeV9jaGVja19wcmVzZW50KGJhdHRlcnkpOworCiAJaWYgKGJhdHRlcnktPmZsYWdzLnByZXNlbnQpCiAJCXNlcV9wcmludGYoc2VxLCAicHJlc2VudDogICAgICAgICAgICAgICAgIHllc1xuIik7CiAJZWxzZSB7CkBAIC00MjQsNiArNDMyLDggQEAKIAlpZiAoIWJhdHRlcnkpCiAJCWdvdG8gZW5kOwogCisJYWNwaV9iYXR0ZXJ5X2NoZWNrX3ByZXNlbnQoYmF0dGVyeSk7CisKIAlpZiAoYmF0dGVyeS0+ZmxhZ3MucHJlc2VudCkKIAkJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50OiAgICAgICAgICAgICAgICAgeWVzXG4iKTsKIAllbHNlIHsKQEAgLTQ5OSw2ICs1MDksOCBAQAogCWlmICghYmF0dGVyeSkKIAkJZ290byBlbmQ7CiAKKwlhY3BpX2JhdHRlcnlfY2hlY2tfcHJlc2VudChiYXR0ZXJ5KTsKKwogCWlmICghYmF0dGVyeS0+ZmxhZ3MucHJlc2VudCkgewogCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQ6ICAgICAgICAgICAgICAgICBub1xuIik7CiAJCWdvdG8gZW5kOwpAQCAtNTM2LDYgKzU0OCw4IEBACiAJaWYgKCFiYXR0ZXJ5IHx8IChjb3VudCA+IHNpemVvZihhbGFybV9zdHJpbmcpIC0gMSkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJYWNwaV9iYXR0ZXJ5X2NoZWNrX3ByZXNlbnQoYmF0dGVyeSk7CisKIAlpZiAoIWJhdHRlcnktPmZsYWdzLnByZXNlbnQpCiAJCXJldHVybiAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYmF5LmMgYi9kcml2ZXJzL2FjcGkvYmF5LmMKaW5kZXggOTEwODJjZS4uZmIzZjMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JheS5jCisrKyBiL2RyaXZlcnMvYWNwaS9iYXkuYwpAQCAtMzIsMTEgKzMyLDkgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jZGVmaW5lIEFDUElfQkFZX0RSSVZFUl9OQU1FICJBQ1BJIFJlbW92YWJsZSBEcml2ZSBCYXkgRHJpdmVyIgotCi1BQ1BJX01PRFVMRV9OQU1FKCJiYXkiKQorQUNQSV9NT0RVTEVfTkFNRSgiYmF5Iik7CiBNT0RVTEVfQVVUSE9SKCJLcmlzdGVuIENhcmxzb24gQWNjYXJkaSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKEFDUElfQkFZX0RSSVZFUl9OQU1FKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUNQSSBSZW1vdmFibGUgRHJpdmUgQmF5IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogI2RlZmluZSBBQ1BJX0JBWV9DTEFTUyAiYmF5IgogI2RlZmluZSBBQ1BJX0JBWV9DT01QT05FTlQJMHgxMDAwMDAwMApAQCAtNDcsMTggKzQ1LDYgQEAKIAlhY3BpX2dldF9uYW1lKGgsIEFDUElfRlVMTF9QQVRITkFNRSwgJmJ1ZmZlcik7XAogCXByaW50ayhLRVJOX0RFQlVHIFBSRUZJWCAiJXM6ICVzXG4iLCBwcmVmaXgsIHMpOyB9CiBzdGF0aWMgdm9pZCBiYXlfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgYWNwaV9iYXlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyBpbnQgYWNwaV9iYXlfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9iYXlfZHJpdmVyID0gewotCS5uYW1lID0gQUNQSV9CQVlfRFJJVkVSX05BTUUsCi0JLmNsYXNzID0gQUNQSV9CQVlfQ0xBU1MsCi0JLmlkcyA9IEFDUElfQkFZX0hJRCwKLQkub3BzID0gewotCQkuYWRkID0gYWNwaV9iYXlfYWRkLAotCQkucmVtb3ZlID0gYWNwaV9iYXlfcmVtb3ZlLAotCQl9LAotfTsKIAogc3RydWN0IGJheSB7CiAJYWNwaV9oYW5kbGUgaGFuZGxlOwpAQCAtMjM0LDE0ICsyMjAsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZWplY3RfcmVtb3ZhYmxlX2RyaXZlKTsKIAotc3RhdGljIGludCBhY3BpX2JheV9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCi17Ci0JYmF5X2RwcmludGsoZGV2aWNlLT5oYW5kbGUsICJhZGRpbmcgYmF5IGRldmljZSIpOwotCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksICJEb2NrYWJsZSBCYXkiKTsKLQlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgImJheSIpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGFjcGlfYmF5X2FkZF9mcyhzdHJ1Y3QgYmF5ICpiYXkpCiB7CiAJaW50IHJldDsKQEAgLTMwMyw3ICsyODEsNyBAQAogCiAJLyogaW5pdGlhbGl6ZSBwbGF0Zm9ybSBkZXZpY2Ugc3R1ZmYgKi8KIAlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShBQ1BJX0JBWV9DTEFTUywgaWQsIE5VTEwsIDApOwotCWlmIChwZGV2ID09IE5VTEwpIHsKKwlpZiAoSVNfRVJSKHBkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkVycm9yIHJlZ2lzdGVyaW5nIGJheSBkZXZpY2VcbiIpOwogCQlnb3RvIGJheV9hZGRfZXJyOwogCX0KQEAgLTMzOSw1MiArMzE3LDYgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBhY3BpX2JheV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQotewotCS8qKiogRklYTUU6IGRvIHNvbWV0aGluZyBoZXJlICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogYmF5X2NyZWF0ZV9hY3BpX2RldmljZSAtIGFkZCBuZXcgZGV2aWNlcyB0byBhY3BpCi0gKiBAaGFuZGxlIC0gaGFuZGxlIG9mIHRoZSBkZXZpY2UgdG8gYWRkCi0gKgotICogIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSBuZXcgYWNwaV9kZXZpY2UgZm9yIHRoZSBnaXZlbgotICogIGhhbmRsZSBpZiBvbmUgZG9lcyBub3QgZXhpc3QgYWxyZWFkeS4gIFRoaXMgc2hvdWxkIGNhdXNlCi0gKiAgYWNwaSB0byBzY2FuIGZvciBkcml2ZXJzIGZvciB0aGUgZ2l2ZW4gZGV2aWNlcywgYW5kIGNhbGwKLSAqICBtYXRjaGluZyBkcml2ZXIncyBhZGQgcm91dGluZS4KLSAqCi0gKiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFjcGlfZGV2aWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGhhbmRsZS4KLSAqLwotc3RhdGljIHN0cnVjdCBhY3BpX2RldmljZSAqIGJheV9jcmVhdGVfYWNwaV9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKQotewotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudF9kZXZpY2U7Ci0JYWNwaV9oYW5kbGUgcGFyZW50OwotCWludCByZXQ7Ci0KLQliYXlfZHByaW50ayhoYW5kbGUsICJUcnlpbmcgdG8gZ2V0IGRldmljZSIpOwotCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSkpIHsKLQkJLyoKLQkJICogbm8gZGV2aWNlIGNyZWF0ZWQgZm9yIHRoaXMgb2JqZWN0LAotCQkgKiBzbyB3ZSBzaG91bGQgY3JlYXRlIG9uZS4KLQkJICovCi0JCWJheV9kcHJpbnRrKGhhbmRsZSwgIk5vIGRldmljZSBmb3IgaGFuZGxlIik7Ci0JCWFjcGlfZ2V0X3BhcmVudChoYW5kbGUsICZwYXJlbnQpOwotCQlpZiAoYWNwaV9idXNfZ2V0X2RldmljZShwYXJlbnQsICZwYXJlbnRfZGV2aWNlKSkKLQkJCXBhcmVudF9kZXZpY2UgPSBOVUxMOwotCi0JCXJldCA9IGFjcGlfYnVzX2FkZCgmZGV2aWNlLCBwYXJlbnRfZGV2aWNlLCBoYW5kbGUsCi0JCQlBQ1BJX0JVU19UWVBFX0RFVklDRSk7Ci0JCWlmIChyZXQpIHsKLQkJCXByX2RlYnVnKCJlcnJvciBhZGRpbmcgYnVzLCAleFxuIiwKLQkJCQktcmV0KTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JfQotCXJldHVybiBkZXZpY2U7Ci19Ci0KIC8qKgogICogYmF5X25vdGlmeSAtIGFjdCB1cG9uIGFuIGFjcGkgYmF5IG5vdGlmaWNhdGlvbgogICogQGhhbmRsZTogdGhlIGJheSBoYW5kbGUKQEAgLTM5NCwzOCArMzI2LDE5IEBACiAgKi8KIHN0YXRpYyB2b2lkIGJheV9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXY7CisJc3RydWN0IGJheSAqYmF5X2RldiA9IChzdHJ1Y3QgYmF5ICopZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYmF5X2Rldi0+cGRldi0+ZGV2OwogCiAJYmF5X2RwcmludGsoaGFuZGxlLCAiQmF5IGV2ZW50Iik7CiAKIAlzd2l0Y2goZXZlbnQpIHsKIAljYXNlIEFDUElfTk9USUZZX0JVU19DSEVDSzoKLQkJcHJpbnRrKCJCdXMgQ2hlY2tcbiIpOwogCWNhc2UgQUNQSV9OT1RJRllfREVWSUNFX0NIRUNLOgotCQlwcmludGsoIkRldmljZSBDaGVja1xuIik7Ci0JCWRldiA9IGJheV9jcmVhdGVfYWNwaV9kZXZpY2UoaGFuZGxlKTsKLQkJaWYgKGRldikKLQkJCWFjcGlfYnVzX2dlbmVyYXRlX2V2ZW50KGRldiwgZXZlbnQsIDApOwotCQllbHNlCi0JCQlwcmludGsoIk5vIGRldmljZSBmb3IgZ2VuZXJhdGluZyBldmVudFxuIik7Ci0JCS8qIHdvdWxkbid0IGl0IGJlIGEgZ29vZCBpZGVhIHRvIGp1c3QgcmVzY2FuIFNBVEEKLQkJICogcmlnaHQgaGVyZT8KLQkJICovCi0JCWJyZWFrOwogCWNhc2UgQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVDoKLQkJcHJpbnRrKCJFamVjdCByZXF1ZXN0XG4iKTsKLQkJZGV2ID0gYmF5X2NyZWF0ZV9hY3BpX2RldmljZShoYW5kbGUpOwotCQlpZiAoZGV2KQotCQkJYWNwaV9idXNfZ2VuZXJhdGVfZXZlbnQoZGV2LCBldmVudCwgMCk7Ci0JCWVsc2UKLQkJCXByaW50aygiTm8gZGV2aWNlIGZvciBnZW5lcmF0aW5nIGV2ZW50biIpOwotCi0JCS8qIHdvdWxkbid0IGl0IGJlIGEgZ29vZCBpZGVhIHRvIGp1c3QgY2FsbCB0aGUKLQkJICogZWplY3RfZGV2aWNlIGhlcmUgaWYgd2Ugd2VyZSBhIFNBVEEgZGV2aWNlPwotCQkgKi8KKwkJa29iamVjdF91ZXZlbnQoJmRldi0+a29iaiwgS09CSl9DSEFOR0UpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoInVua25vd24gZXZlbnQgJWRcbiIsIGV2ZW50KTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiQmF5OiB1bmtub3duIGV2ZW50ICVkXG4iLCBldmVudCk7CiAJfQogfQogCkBAIC00NTcsMTAgKzM3MCw2IEBACiAJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBBQ1BJX1JPT1RfT0JKRUNULAogCQlBQ1BJX1VJTlQzMl9NQVgsIGZpbmRfYmF5LCAmYmF5cywgTlVMTCk7CiAKLQlpZiAoYmF5cykKLQkJaWYgKChhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfYmF5X2RyaXZlcikgPCAwKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIGJheSBkcml2ZXJcbiIpOwotCiAJaWYgKCFiYXlzKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNDgxLDggKzM5MCw2IEBACiAJCWtmcmVlKGJheS0+bmFtZSk7CiAJCWtmcmVlKGJheSk7CiAJfQotCi0JYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfYmF5X2RyaXZlcik7CiB9CiAKIHBvc3Rjb3JlX2luaXRjYWxsKGJheV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCBjMjY0NjhkLi5kZDQ5ZWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX0JVU19DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfYnVzIikKK0FDUElfTU9EVUxFX05BTUUoImJ1cyIpOwogI2lmZGVmCUNPTkZJR19YODYKIGV4dGVybiB2b2lkIF9faW5pdCBhY3BpX3BpY19zY2lfc2V0X3RyaWdnZXIodW5zaWduZWQgaW50IGlycSwgdTE2IHRyaWdnZXIpOwogI2VuZGlmCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAkJCSpzdGF0ZSA9IEFDUElfU1RBVEVfRDA7CiAJfSBlbHNlIHsKIAkJLyoKLQkJICogR2V0IHRoZSBkZXZpY2UncyBwb3dlciBzdGF0ZSBlaXRoZXIgZGlyZWN0bHkgKHZpYSBfUFNDKSBvciAKKwkJICogR2V0IHRoZSBkZXZpY2UncyBwb3dlciBzdGF0ZSBlaXRoZXIgZGlyZWN0bHkgKHZpYSBfUFNDKSBvcgogCQkgKiBpbmRpcmVjdGx5ICh2aWEgcG93ZXIgcmVzb3VyY2VzKS4KIAkJICovCiAJCWlmIChkZXZpY2UtPnBvd2VyLmZsYWdzLmV4cGxpY2l0X2dldCkgewpAQCAtMTk5LDE1ICsxOTksMTQgQEAKIAkgKiBHZXQgZGV2aWNlJ3MgY3VycmVudCBwb3dlciBzdGF0ZSBpZiBpdCdzIHVua25vd24KIAkgKiBUaGlzIG1lYW5zIGRldmljZSBwb3dlciBzdGF0ZSBpc24ndCBpbml0aWFsaXplZCBvciBwcmV2aW91cyBzZXR0aW5nIGZhaWxlZAogCSAqLwotCWlmICghZGV2aWNlLT5mbGFncy5mb3JjZV9wb3dlcl9zdGF0ZSkgewotCQlpZiAoZGV2aWNlLT5wb3dlci5zdGF0ZSA9PSBBQ1BJX1NUQVRFX1VOS05PV04pCi0JCQlhY3BpX2J1c19nZXRfcG93ZXIoZGV2aWNlLT5oYW5kbGUsICZkZXZpY2UtPnBvd2VyLnN0YXRlKTsKLQkJaWYgKHN0YXRlID09IGRldmljZS0+cG93ZXIuc3RhdGUpIHsKLQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkRldmljZSBpcyBhbHJlYWR5IGF0IEQlZFxuIiwKLQkJCQkJICBzdGF0ZSkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlpZiAoKGRldmljZS0+cG93ZXIuc3RhdGUgPT0gQUNQSV9TVEFURV9VTktOT1dOKSB8fCBkZXZpY2UtPmZsYWdzLmZvcmNlX3Bvd2VyX3N0YXRlKQorCQlhY3BpX2J1c19nZXRfcG93ZXIoZGV2aWNlLT5oYW5kbGUsICZkZXZpY2UtPnBvd2VyLnN0YXRlKTsKKwlpZiAoKHN0YXRlID09IGRldmljZS0+cG93ZXIuc3RhdGUpICYmICFkZXZpY2UtPmZsYWdzLmZvcmNlX3Bvd2VyX3N0YXRlKSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkRldmljZSBpcyBhbHJlYWR5IGF0IEQlZFxuIiwKKwkJCQkgIHN0YXRlKSk7CisJCXJldHVybiAwOwogCX0KKwogCWlmICghZGV2aWNlLT5wb3dlci5zdGF0ZXNbc3RhdGVdLmZsYWdzLnZhbGlkKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJEZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBEJWRcbiIsIHN0YXRlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00NjIsNyArNDYxLDcgQEAKIAkJCQkgICJSZWNlaXZlZCBCVVMgQ0hFQ0sgbm90aWZpY2F0aW9uIGZvciBkZXZpY2UgWyVzXVxuIiwKIAkJCQkgIGRldmljZS0+cG5wLmJ1c19pZCkpOwogCQlyZXN1bHQgPSBhY3BpX2J1c19jaGVja19zY29wZShkZXZpY2UpOwotCQkvKiAKKwkJLyoKIAkJICogVEJEOiBXZSdsbCBuZWVkIHRvIG91dHNvdXJjZSBjZXJ0YWluIGV2ZW50cyB0byBub24tQUNQSQogCQkgKiAgICAgIGRyaXZlcnMgdmlhIHRoZSBkZXZpY2UgbWFuYWdlciAoZGV2aWNlLmMpLgogCQkgKi8KQEAgLTQ3Myw3ICs0NzIsNyBAQAogCQkJCSAgIlJlY2VpdmVkIERFVklDRSBDSEVDSyBub3RpZmljYXRpb24gZm9yIGRldmljZSBbJXNdXG4iLAogCQkJCSAgZGV2aWNlLT5wbnAuYnVzX2lkKSk7CiAJCXJlc3VsdCA9IGFjcGlfYnVzX2NoZWNrX2RldmljZShkZXZpY2UsIE5VTEwpOwotCQkvKiAKKwkJLyoKIAkJICogVEJEOiBXZSdsbCBuZWVkIHRvIG91dHNvdXJjZSBjZXJ0YWluIGV2ZW50cyB0byBub24tQUNQSQogCQkgKiAgICAgIGRyaXZlcnMgdmlhIHRoZSBkZXZpY2UgbWFuYWdlciAoZGV2aWNlLmMpLgogCQkgKi8KQEAgLTU0Myw3ICs1NDIsNyBAQAogCWNoYXIgKm1lc3NhZ2UgPSBOVUxMOwogCiAKLQkvKiAKKwkvKgogCSAqIExldCB0aGUgc3lzdGVtIGtub3cgd2hhdCBpbnRlcnJ1cHQgbW9kZWwgd2UgYXJlIHVzaW5nIGJ5CiAJICogZXZhbHVhdGluZyB0aGUgXF9QSUMgb2JqZWN0LCBpZiBleGlzdHMuCiAJICovCkBAIC02ODQsNyArNjgzLDcgQEAKIAkgKiB0aGUgRUMgZGV2aWNlIGlzIGZvdW5kIGluIHRoZSBuYW1lc3BhY2UgKGkuZS4gYmVmb3JlIGFjcGlfaW5pdGlhbGl6ZV9vYmplY3RzKCkKIAkgKiBpcyBjYWxsZWQpLgogCSAqCi0JICogVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgbG9va2luZyBmb3IgdGhlIEVDRFQgdGFibGUsIGFuZCBnZXR0aW5nIAorCSAqIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGxvb2tpbmcgZm9yIHRoZSBFQ0RUIHRhYmxlLCBhbmQgZ2V0dGluZwogCSAqIHRoZSBFQyBwYXJhbWV0ZXJzIG91dCBvZiB0aGF0LgogCSAqLwogCXN0YXR1cyA9IGFjcGlfZWNfZWNkdF9wcm9iZSgpOwpAQCAtNjk5LDYgKzY5OCw5IEBACiAKIAlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiSW50ZXJwcmV0ZXIgZW5hYmxlZFxuIik7CiAKKwkvKiBJbml0aWFsaXplIHNsZWVwIHN0cnVjdHVyZXMgKi8KKwlhY3BpX3NsZWVwX2luaXQoKTsKKwogCS8qCiAJICogR2V0IHRoZSBzeXN0ZW0gaW50ZXJydXB0IG1vZGVsIGFuZCBldmFsdWF0ZSBcX1BJQy4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXR0b24uYyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwppbmRleCBjNzI2NjEyLi5jYjQxMTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAogI2RlZmluZSBBQ1BJX0JVVFRPTl9DT01QT05FTlQJCTB4MDAwODAwMDAKLSNkZWZpbmUgQUNQSV9CVVRUT05fRFJJVkVSX05BTUUJCSJBQ1BJIEJ1dHRvbiBEcml2ZXIiCiAjZGVmaW5lIEFDUElfQlVUVE9OX0NMQVNTCQkiYnV0dG9uIgogI2RlZmluZSBBQ1BJX0JVVFRPTl9GSUxFX0lORk8JCSJpbmZvIgogI2RlZmluZSBBQ1BJX0JVVFRPTl9GSUxFX1NUQVRFCQkic3RhdGUiCkBAIC02MSwxMCArNjAsMTAgQEAKICNkZWZpbmUgQUNQSV9CVVRUT05fVFlQRV9MSUQJCTB4MDUKIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX0JVVFRPTl9DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfYnV0dG9uIikKK0FDUElfTU9EVUxFX05BTUUoImJ1dHRvbiIpOwogCiBNT0RVTEVfQVVUSE9SKCJQYXVsIERpZWZlbmJhdWdoIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oQUNQSV9CVVRUT05fRFJJVkVSX05BTUUpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIEJ1dHRvbiBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIGludCBhY3BpX2J1dHRvbl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwpAQCAtNzMsNyArNzIsNyBAQAogc3RhdGljIGludCBhY3BpX2J1dHRvbl9zdGF0ZV9vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX2J1dHRvbl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBBQ1BJX0JVVFRPTl9EUklWRVJfTkFNRSwKKwkubmFtZSA9ICJidXR0b24iLAogCS5jbGFzcyA9IEFDUElfQlVUVE9OX0NMQVNTLAogCS5pZHMgPSAiYnV0dG9uX3Bvd2VyLGJ1dHRvbl9zbGVlcCxQTlAwQzBELFBOUDBDMEMsUE5QMEMwRSIsCiAJLm9wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9jbV9zYnMuYyBiL2RyaXZlcnMvYWNwaS9jbV9zYnMuYwppbmRleCA0YTliN2JmLi5mOWRiNGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvY21fc2JzLmMKKysrIGIvZHJpdmVycy9hY3BpL2NtX3Nicy5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8YWNwaS9hY3R5cGVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3V0aWxzLmg+CiAKLUFDUElfTU9EVUxFX05BTUUoImNtX3NicyIpCitBQ1BJX01PRFVMRV9OQU1FKCJjbV9zYnMiKTsKICNkZWZpbmUgQUNQSV9BQ19DTEFTUwkJImFjX2FkYXB0ZXIiCiAjZGVmaW5lIEFDUElfQkFUVEVSWV9DTEFTUwkiYmF0dGVyeSIKICNkZWZpbmUgQUNQSV9TQlNfQ09NUE9ORU5UCTB4MDAwODAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9jb250YWluZXIuYyBiL2RyaXZlcnMvYWNwaS9jb250YWluZXIuYwppbmRleCA2OWE2OGZkLi4wOTMwZDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvY29udGFpbmVyLmMKKysrIGIvZHJpdmVycy9hY3BpL2NvbnRhaW5lci5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL2NvbnRhaW5lci5oPgogCi0jZGVmaW5lIEFDUElfQ09OVEFJTkVSX0RSSVZFUl9OQU1FCSJBQ1BJIGNvbnRhaW5lciBkcml2ZXIiCiAjZGVmaW5lIEFDUElfQ09OVEFJTkVSX0RFVklDRV9OQU1FCSJBQ1BJIGNvbnRhaW5lciBkZXZpY2UiCiAjZGVmaW5lIEFDUElfQ09OVEFJTkVSX0NMQVNTCQkiY29udGFpbmVyIgogCkBAIC00NCwxMCArNDMsMTAgQEAKIAogI2RlZmluZSBBQ1BJX0NPTlRBSU5FUl9DT01QT05FTlQJMHgwMTAwMDAwMAogI2RlZmluZSBfQ09NUE9ORU5UCQkJQUNQSV9DT05UQUlORVJfQ09NUE9ORU5UCi1BQ1BJX01PRFVMRV9OQU1FKCJhY3BpX2NvbnRhaW5lciIpCitBQ1BJX01PRFVMRV9OQU1FKCJjb250YWluZXIiKTsKIAotICAgIE1PRFVMRV9BVVRIT1IoIkFuaWwgUyBLZXNoYXZhbXVydGh5Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oQUNQSV9DT05UQUlORVJfRFJJVkVSX05BTUUpOworTU9EVUxFX0FVVEhPUigiQW5pbCBTIEtlc2hhdmFtdXJ0aHkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUNQSSBjb250YWluZXIgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNkZWZpbmUgQUNQSV9TVEFfUFJFU0VOVAkJKDB4MDAwMDAwMDEpCkBAIC01Niw3ICs1NSw3IEBACiBzdGF0aWMgaW50IGFjcGlfY29udGFpbmVyX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfY29udGFpbmVyX2RyaXZlciA9IHsKLQkubmFtZSA9IEFDUElfQ09OVEFJTkVSX0RSSVZFUl9OQU1FLAorCS5uYW1lID0gImNvbnRhaW5lciIsCiAJLmNsYXNzID0gQUNQSV9DT05UQUlORVJfQ0xBU1MsCiAJLmlkcyA9ICJBQ1BJMDAwNCxQTlAwQTA1LFBOUDBBMDYiLAogCS5vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGVidWcuYyBiL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCmluZGV4IGQ0OGY2NWEuLmJmNTEzZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8YWNwaS9hY2dsb2JhbC5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfU1lTVEVNX0NPTVBPTkVOVAotQUNQSV9NT0RVTEVfTkFNRSgiZGVidWciKQorQUNQSV9NT0RVTEVfTkFNRSgiZGVidWciKTsKIAogI2lmZGVmIE1PRFVMRV9QQVJBTV9QUkVGSVgKICN1bmRlZiBNT0RVTEVfUEFSQU1fUFJFRklYCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc21ldGhvZC5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtZXRob2QuYwppbmRleCAxY2JlNjE5Li4xNjgzZTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc21ldGhvZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbWV0aG9kLmMKQEAgLTIzMSwxMCArMjMxLDggQEAKIAkJICogT2J0YWluIHRoZSBtZXRob2QgbXV0ZXggaWYgbmVjZXNzYXJ5LiBEbyBub3QgYWNxdWlyZSBtdXRleCBmb3IgYQogCQkgKiByZWN1cnNpdmUgY2FsbC4KIAkJICovCi0JCWlmICghd2Fsa19zdGF0ZSB8fAotCQkgICAgIW9ial9kZXNjLT5tZXRob2QubXV0ZXgtPm11dGV4Lm93bmVyX3RocmVhZCB8fAotCQkgICAgKHdhbGtfc3RhdGUtPnRocmVhZCAhPQotCQkgICAgIG9ial9kZXNjLT5tZXRob2QubXV0ZXgtPm11dGV4Lm93bmVyX3RocmVhZCkpIHsKKwkJaWYgKGFjcGlfb3NfZ2V0X3RocmVhZF9pZCgpICE9CisJCSAgICBvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5vd25lcl90aHJlYWRfaWQpIHsKIAkJCS8qCiAJCQkgKiBBY3F1aXJlIHRoZSBtZXRob2QgbXV0ZXguIFRoaXMgcmVsZWFzZXMgdGhlIGludGVycHJldGVyIGlmIHdlCiAJCQkgKiBibG9jayAoYW5kIHJlYWNxdWlyZXMgaXQgYmVmb3JlIGl0IHJldHVybnMpCkBAIC0yNDgsMTQgKzI0NiwxNCBAQAogCQkJfQogCiAJCQkvKiBVcGRhdGUgdGhlIG11dGV4IGFuZCB3YWxrIGluZm8gYW5kIHNhdmUgdGhlIG9yaWdpbmFsIHN5bmNfbGV2ZWwgKi8KKwkJCW9ial9kZXNjLT5tZXRob2QubXV0ZXgtPm11dGV4Lm93bmVyX3RocmVhZF9pZCA9CisJCQkJYWNwaV9vc19nZXRfdGhyZWFkX2lkKCk7CiAKIAkJCWlmICh3YWxrX3N0YXRlKSB7CiAJCQkJb2JqX2Rlc2MtPm1ldGhvZC5tdXRleC0+bXV0ZXguCiAJCQkJICAgIG9yaWdpbmFsX3N5bmNfbGV2ZWwgPQogCQkJCSAgICB3YWxrX3N0YXRlLT50aHJlYWQtPmN1cnJlbnRfc3luY19sZXZlbDsKIAotCQkJCW9ial9kZXNjLT5tZXRob2QubXV0ZXgtPm11dGV4Lm93bmVyX3RocmVhZCA9Ci0JCQkJICAgIHdhbGtfc3RhdGUtPnRocmVhZDsKIAkJCQl3YWxrX3N0YXRlLT50aHJlYWQtPmN1cnJlbnRfc3luY19sZXZlbCA9CiAJCQkJICAgIG9ial9kZXNjLT5tZXRob2Quc3luY19sZXZlbDsKIAkJCX0gZWxzZSB7CkBAIC01NjksNyArNTY3LDcgQEAKIAogCQkJYWNwaV9vc19yZWxlYXNlX211dGV4KG1ldGhvZF9kZXNjLT5tZXRob2QubXV0ZXgtPm11dGV4LgogCQkJCQkgICAgICBvc19tdXRleCk7Ci0JCQltZXRob2RfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5vd25lcl90aHJlYWQgPSBOVUxMOworCQkJbWV0aG9kX2Rlc2MtPm1ldGhvZC5tdXRleC0+bXV0ZXgub3duZXJfdGhyZWFkX2lkID0gQUNQSV9NVVRFWF9OT1RfQUNRVUlSRUQ7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kb2NrLmMgYi9kcml2ZXJzL2FjcGkvZG9jay5jCmluZGV4IDY4OGU4M2EuLjU0YTY5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kb2NrLmMKKysrIGIvZHJpdmVycy9hY3BpL2RvY2suYwpAQCAtMzIsMTEgKzMyLDExIEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKLSNkZWZpbmUgQUNQSV9ET0NLX0RSSVZFUl9OQU1FICJBQ1BJIERvY2sgU3RhdGlvbiBEcml2ZXIiCisjZGVmaW5lIEFDUElfRE9DS19EUklWRVJfREVTQ1JJUFRJT04gIkFDUEkgRG9jayBTdGF0aW9uIERyaXZlciIKIAotQUNQSV9NT0RVTEVfTkFNRSgiZG9jayIpCitBQ1BJX01PRFVMRV9OQU1FKCJkb2NrIik7CiBNT0RVTEVfQVVUSE9SKCJLcmlzdGVuIENhcmxzb24gQWNjYXJkaSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKEFDUElfRE9DS19EUklWRVJfTkFNRSk7CitNT0RVTEVfREVTQ1JJUFRJT04oQUNQSV9ET0NLX0RSSVZFUl9ERVNDUklQVElPTik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgZG9ja19ub3RpZmllcl9saXN0OwpAQCAtNzQxLDcgKzc0MSw3IEBACiAJCWdvdG8gZG9ja19hZGRfZXJyOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICIlcyBcbiIsIEFDUElfRE9DS19EUklWRVJfTkFNRSk7CisJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzIFxuIiwgQUNQSV9ET0NLX0RSSVZFUl9ERVNDUklQVElPTik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCA3NDNjZTI3Li5hYjY4ODgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtMzgsMTEgKzM4LDEwIEBACiAjaW5jbHVkZSA8YWNwaS9hY3R5cGVzLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVAkJQUNQSV9FQ19DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfZWMiKQorQUNQSV9NT0RVTEVfTkFNRSgiZWMiKTsKICNkZWZpbmUgQUNQSV9FQ19DT01QT05FTlQJCTB4MDAxMDAwMDAKICNkZWZpbmUgQUNQSV9FQ19DTEFTUwkJCSJlbWJlZGRlZF9jb250cm9sbGVyIgogI2RlZmluZSBBQ1BJX0VDX0hJRAkJCSJQTlAwQzA5IgotI2RlZmluZSBBQ1BJX0VDX0RSSVZFUl9OQU1FCQkiQUNQSSBFbWJlZGRlZCBDb250cm9sbGVyIERyaXZlciIKICNkZWZpbmUgQUNQSV9FQ19ERVZJQ0VfTkFNRQkJIkVtYmVkZGVkIENvbnRyb2xsZXIiCiAjZGVmaW5lIEFDUElfRUNfRklMRV9JTkZPCQkiaW5mbyIKICN1bmRlZiBQUkVGSVgKQEAgLTgwLDcgKzc5LDcgQEAKIHN0YXRpYyBpbnQgYWNwaV9lY19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfZWNfZHJpdmVyID0gewotCS5uYW1lID0gQUNQSV9FQ19EUklWRVJfTkFNRSwKKwkubmFtZSA9ICJlYyIsCiAJLmNsYXNzID0gQUNQSV9FQ19DTEFTUywKIAkuaWRzID0gQUNQSV9FQ19ISUQsCiAJLm9wcyA9IHsKQEAgLTI4MCw4ICsyNzksMTAgQEAKIAltdXRleF9sb2NrKCZlYy0+bG9jayk7CiAJaWYgKGVjLT5nbG9iYWxfbG9jaykgewogCQlzdGF0dXMgPSBhY3BpX2FjcXVpcmVfZ2xvYmFsX2xvY2soQUNQSV9FQ19VREVMQVlfR0xLLCAmZ2xrKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCW11dGV4X3VubG9jaygmZWMtPmxvY2spOwogCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KIAl9CiAKIAkvKiBNYWtlIHN1cmUgR1BFIGlzIGVuYWJsZWQgYmVmb3JlIGRvaW5nIHRyYW5zYWN0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCmluZGV4IDk1OWE4OTMuLjNiMjM1NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1NZU1RFTV9DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImV2ZW50IikKK0FDUElfTU9EVUxFX05BTUUoImV2ZW50Iik7CiAKIC8qIEdsb2JhbCB2YXJzIGZvciBoYW5kbGluZyBldmVudCBwcm9jIGVudHJ5ICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFjcGlfc3lzdGVtX2V2ZW50X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZS5jIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZS5jCmluZGV4IGRmYWMzZWMuLjYzNWJhNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZncGUuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlLmMKQEAgLTYzNiwxNyArNjM2LDYgQEAKIAkJfQogCX0KIAotCWlmICghYWNwaV9nYmxfc3lzdGVtX2F3YWtlX2FuZF9ydW5uaW5nKSB7Ci0JCS8qCi0JCSAqIFdlIGp1c3Qgd29rZSB1cCBiZWNhdXNlIG9mIGEgd2FrZSBHUEUuIERpc2FibGUgYW55IGZ1cnRoZXIgR1BFcwotCQkgKiB1bnRpbCB3ZSBhcmUgZnVsbHkgdXAgYW5kIHJ1bm5pbmcgKE9ubHkgd2FrZSBHUEVzIHNob3VsZCBiZSBlbmFibGVkCi0JCSAqIGF0IHRoaXMgdGltZSwgYnV0IHdlIGp1c3QgYnJ1dGUtZm9yY2UgZGlzYWJsZSB0aGVtIGFsbC4pCi0JCSAqIDEpIFdlIG11c3QgZGlzYWJsZSB0aGlzIHBhcnRpY3VsYXIgd2FrZSBHUEUgc28gaXQgd29uJ3QgZmlyZSBhZ2FpbgotCQkgKiAyKSBXZSB3YW50IHRvIGRpc2FibGUgYWxsIHdha2UgR1BFcywgc2luY2Ugd2UgYXJlIG5vdyBhd2FrZQotCQkgKi8KLQkJKHZvaWQpYWNwaV9od19kaXNhYmxlX2FsbF9ncGVzKCk7Ci0JfQotCiAJLyoKIAkgKiBEaXNwYXRjaCB0aGUgR1BFIHRvIGVpdGhlciBhbiBpbnN0YWxsZWQgaGFuZGxlciwgb3IgdGhlIGNvbnRyb2wgbWV0aG9kCiAJICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgR1BFIChfTHh4IG9yIF9FeHgpLiBJZiBhIGhhbmRsZXIgZXhpc3RzLCB3ZSBpbnZva2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZtaXNjLmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2bWlzYy5jCmluZGV4IDFiNzg0ZmZlLi5kNTcyNzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2bWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZtaXNjLmMKQEAgLTE5NiwxMiArMTk2LDExIEBACiAJCW5vdGlmeV9pbmZvLT5ub3RpZnkudmFsdWUgPSAodTE2KSBub3RpZnlfdmFsdWU7CiAJCW5vdGlmeV9pbmZvLT5ub3RpZnkuaGFuZGxlcl9vYmogPSBoYW5kbGVyX29iajsKIAotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9vc19leGVjdXRlKE9TTF9OT1RJRllfSEFORExFUiwgYWNwaV9ldl9ub3RpZnlfZGlzcGF0Y2gsCi0JCQkJICAgIG5vdGlmeV9pbmZvKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlhY3BpX3V0X2RlbGV0ZV9nZW5lcmljX3N0YXRlKG5vdGlmeV9pbmZvKTsKLQkJfQorCQlhY3BpX2V4X3JlbGlucXVpc2hfaW50ZXJwcmV0ZXIoKTsKKworCQlhY3BpX2V2X25vdGlmeV9kaXNwYXRjaChub3RpZnlfaW5mbyk7CisKKwkJYWNwaV9leF9yZWFjcXVpcmVfaW50ZXJwcmV0ZXIoKTsKIAl9CiAKIAlpZiAoIWhhbmRsZXJfb2JqKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhkdW1wLmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhkdW1wLmMKaW5kZXggNjhkMjgzZi4uMWE3M2MxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGR1bXAuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiBzdGF0aWMgc3RydWN0IGFjcGlfZXhkdW1wX2luZm8gYWNwaV9leF9kdW1wX211dGV4WzVdID0gewogCXtBQ1BJX0VYRF9JTklULCBBQ1BJX0VYRF9UQUJMRV9TSVpFKGFjcGlfZXhfZHVtcF9tdXRleCksIE5VTEx9LAogCXtBQ1BJX0VYRF9VSU5UOCwgQUNQSV9FWERfT0ZGU0VUKG11dGV4LnN5bmNfbGV2ZWwpLCAiU3luYyBMZXZlbCJ9LAotCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9PRkZTRVQobXV0ZXgub3duZXJfdGhyZWFkKSwgIk93bmVyIFRocmVhZCJ9LAorCXtBQ1BJX0VYRF9QT0lOVEVSLCBBQ1BJX0VYRF9PRkZTRVQobXV0ZXgub3duZXJfdGhyZWFkX2lkKSwgIk93bmVyIFRocmVhZCJ9LAogCXtBQ1BJX0VYRF9VSU5UMTYsIEFDUElfRVhEX09GRlNFVChtdXRleC5hY3F1aXNpdGlvbl9kZXB0aCksCiAJICJBY3F1aXJlIERlcHRoIn0sCiAJe0FDUElfRVhEX1BPSU5URVIsIEFDUElfRVhEX09GRlNFVChtdXRleC5vc19tdXRleCksICJPc011dGV4In0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG11dGV4LmMgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtdXRleC5jCmluZGV4IDUxMDFiYWQuLjRlYjg4M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG11dGV4LmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bXV0ZXguYwpAQCAtNjYsMTAgKzY2LDkgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIGFjcGlfZXhfdW5saW5rX211dGV4KHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKQordm9pZCBhY3BpX2V4X3VubGlua19tdXRleCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKKwkJCSAgc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICp0aHJlYWQpCiB7Ci0Jc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICp0aHJlYWQgPSBvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkOwotCiAJaWYgKCF0aHJlYWQpIHsKIAkJcmV0dXJuOwogCX0KQEAgLTE3NCwxNiArMTczLDEzIEBACiAKIAkvKiBTdXBwb3J0IGZvciBtdWx0aXBsZSBhY3F1aXJlcyBieSB0aGUgb3duaW5nIHRocmVhZCAqLwogCi0JaWYgKG9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWQpIHsKLQkJaWYgKG9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWQtPnRocmVhZF9pZCA9PQotCQkgICAgd2Fsa19zdGF0ZS0+dGhyZWFkLT50aHJlYWRfaWQpIHsKLQkJCS8qCi0JCQkgKiBUaGUgbXV0ZXggaXMgYWxyZWFkeSBvd25lZCBieSB0aGlzIHRocmVhZCwganVzdCBpbmNyZW1lbnQgdGhlCi0JCQkgKiBhY3F1aXNpdGlvbiBkZXB0aAotCQkJICovCi0JCQlvYmpfZGVzYy0+bXV0ZXguYWNxdWlzaXRpb25fZGVwdGgrKzsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Ci0JCX0KKwlpZiAob2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZF9pZCA9PSBhY3BpX29zX2dldF90aHJlYWRfaWQoKSkgeworCQkvKgorCQkgKiBUaGUgbXV0ZXggaXMgYWxyZWFkeSBvd25lZCBieSB0aGlzIHRocmVhZCwganVzdCBpbmNyZW1lbnQgdGhlCisJCSAqIGFjcXVpc2l0aW9uIGRlcHRoCisJCSAqLworCQlvYmpfZGVzYy0+bXV0ZXguYWNxdWlzaXRpb25fZGVwdGgrKzsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAl9CiAKIAkvKiBBY3F1aXJlIHRoZSBtdXRleCwgd2FpdCBpZiBuZWNlc3NhcnkuIFNwZWNpYWwgY2FzZSBmb3IgR2xvYmFsIExvY2sgKi8KQEAgLTIwNiw3ICsyMDIsNyBAQAogCiAJLyogSGF2ZSB0aGUgbXV0ZXg6IHVwZGF0ZSBtdXRleCBhbmQgd2FsayBpbmZvIGFuZCBzYXZlIHRoZSBzeW5jX2xldmVsICovCiAKLQlvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkID0gd2Fsa19zdGF0ZS0+dGhyZWFkOworCW9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWRfaWQgPSBhY3BpX29zX2dldF90aHJlYWRfaWQoKTsKIAlvYmpfZGVzYy0+bXV0ZXguYWNxdWlzaXRpb25fZGVwdGggPSAxOwogCW9ial9kZXNjLT5tdXRleC5vcmlnaW5hbF9zeW5jX2xldmVsID0KIAkgICAgd2Fsa19zdGF0ZS0+dGhyZWFkLT5jdXJyZW50X3N5bmNfbGV2ZWw7CkBAIC0yNDYsNyArMjQyLDcgQEAKIAogCS8qIFRoZSBtdXRleCBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGFjcXVpcmVkIGluIG9yZGVyIHRvIHJlbGVhc2UgaXQgKi8KIAotCWlmICghb2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZCkgeworCWlmICghb2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZF9pZCkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJICAgICJDYW5ub3QgcmVsZWFzZSBNdXRleCBbJTQuNHNdLCBub3QgYWNxdWlyZWQiLAogCQkJICAgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShvYmpfZGVzYy0+bXV0ZXgubm9kZSkpKTsKQEAgLTI2NiwxNCArMjYyLDE0IEBACiAJICogVGhlIE11dGV4IGlzIG93bmVkLCBidXQgdGhpcyB0aHJlYWQgbXVzdCBiZSB0aGUgb3duZXIuCiAJICogU3BlY2lhbCBjYXNlIGZvciBHbG9iYWwgTG9jaywgYW55IHRocmVhZCBjYW4gcmVsZWFzZQogCSAqLwotCWlmICgob2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZC0+dGhyZWFkX2lkICE9CisJaWYgKChvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkX2lkICE9CiAJICAgICB3YWxrX3N0YXRlLT50aHJlYWQtPnRocmVhZF9pZCkKIAkgICAgJiYgKG9ial9kZXNjLT5tdXRleC5vc19tdXRleCAhPSBhY3BpX2dibF9nbG9iYWxfbG9ja19tdXRleCkpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiVGhyZWFkICVsWCBjYW5ub3QgcmVsZWFzZSBNdXRleCBbJTQuNHNdIGFjcXVpcmVkIGJ5IHRocmVhZCAlbFgiLAogCQkJICAgICh1bnNpZ25lZCBsb25nKXdhbGtfc3RhdGUtPnRocmVhZC0+dGhyZWFkX2lkLAogCQkJICAgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShvYmpfZGVzYy0+bXV0ZXgubm9kZSksCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpb2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZC0+dGhyZWFkX2lkKSk7CisJCQkgICAgKHVuc2lnbmVkIGxvbmcpb2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZF9pZCkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX05PVF9PV05FUik7CiAJfQogCkBAIC0zMDAsNyArMjk2LDcgQEAKIAogCS8qIFVubGluayB0aGUgbXV0ZXggZnJvbSB0aGUgb3duZXIncyBsaXN0ICovCiAKLQlhY3BpX2V4X3VubGlua19tdXRleChvYmpfZGVzYyk7CisJYWNwaV9leF91bmxpbmtfbXV0ZXgob2JqX2Rlc2MsIHdhbGtfc3RhdGUtPnRocmVhZCk7CiAKIAkvKiBSZWxlYXNlIHRoZSBtdXRleCwgc3BlY2lhbCBjYXNlIGZvciBHbG9iYWwgTG9jayAqLwogCkBAIC0zMTIsNyArMzA4LDcgQEAKIAogCS8qIFVwZGF0ZSB0aGUgbXV0ZXggYW5kIHJlc3RvcmUgc3luY19sZXZlbCAqLwogCi0Jb2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZCA9IE5VTEw7CisJb2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZF9pZCA9IEFDUElfTVVURVhfTk9UX0FDUVVJUkVEOwogCXdhbGtfc3RhdGUtPnRocmVhZC0+Y3VycmVudF9zeW5jX2xldmVsID0KIAkgICAgb2JqX2Rlc2MtPm11dGV4Lm9yaWdpbmFsX3N5bmNfbGV2ZWw7CiAKQEAgLTM2Nyw3ICszNjMsNyBAQAogCiAJCS8qIE1hcmsgbXV0ZXggdW5vd25lZCAqLwogCi0JCW9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWQgPSBOVUxMOworCQlvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkX2lkID0gQUNQSV9NVVRFWF9OT1RfQUNRVUlSRUQ7CiAKIAkJLyogVXBkYXRlIFRocmVhZCBzeW5jX2xldmVsIChMYXN0IG11dGV4IGlzIHRoZSBpbXBvcnRhbnQgb25lKSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZmFuLmMgYi9kcml2ZXJzL2FjcGkvZmFuLmMKaW5kZXggYWYyMmZkZi4uZWM2NTVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Zhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9mYW4uYwpAQCAtMzYsMTQgKzM2LDEzIEBACiAKICNkZWZpbmUgQUNQSV9GQU5fQ09NUE9ORU5UCQkweDAwMjAwMDAwCiAjZGVmaW5lIEFDUElfRkFOX0NMQVNTCQkJImZhbiIKLSNkZWZpbmUgQUNQSV9GQU5fRFJJVkVSX05BTUUJCSJBQ1BJIEZhbiBEcml2ZXIiCiAjZGVmaW5lIEFDUElfRkFOX0ZJTEVfU1RBVEUJCSJzdGF0ZSIKIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX0ZBTl9DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfZmFuIikKK0FDUElfTU9EVUxFX05BTUUoImZhbiIpOwogCi0gICAgTU9EVUxFX0FVVEhPUigiUGF1bCBEaWVmZW5iYXVnaCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKEFDUElfRkFOX0RSSVZFUl9OQU1FKTsKK01PRFVMRV9BVVRIT1IoIlBhdWwgRGllZmVuYmF1Z2giKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUNQSSBGYW4gRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBpbnQgYWNwaV9mYW5fYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKQEAgLTUyLDcgKzUxLDcgQEAKIHN0YXRpYyBpbnQgYWNwaV9mYW5fcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX2Zhbl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBBQ1BJX0ZBTl9EUklWRVJfTkFNRSwKKwkubmFtZSA9ICJmYW4iLAogCS5jbGFzcyA9IEFDUElfRkFOX0NMQVNTLAogCS5pZHMgPSAiUE5QMEMwQiIsCiAJLm9wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9nbHVlLmMgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCmluZGV4IDdiNmM5ZmYuLjQzMzRjMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9nbHVlLmMKKysrIGIvZHJpdmVycy9hY3BpL2dsdWUuYwpAQCAtMjQxLDMgKzI0MSw2NSBAQAogfQogCiBhcmNoX2luaXRjYWxsKGluaXRfYWNwaV9kZXZpY2Vfbm90aWZ5KTsKKworCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9DTU9TKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1NfTU9EVUxFKQorCisvKiBFdmVyeSBBQ1BJIHBsYXRmb3JtIGhhcyBhIG1jMTQ2ODE4IGNvbXBhdGlibGUgImNtb3MgcnRjIi4gIEhlcmUgd2UgZmluZAorICogaXRzIGRldmljZSBub2RlIGFuZCBwYXNzIGV4dHJhIGNvbmZpZyBkYXRhLiAgVGhpcyBoZWxwcyBpdHMgZHJpdmVyIHVzZQorICogY2FwYWJpbGl0aWVzIHRoYXQgdGhlIG5vdy1vYnNvbGV0ZSBtYzE0NjgxOCBkaWRuJ3QgaGF2ZSwgYW5kIGluZm9ybXMgaXQKKyAqIHRoYXQgdGhpcyBib2FyZCdzIFJUQyBpcyB3YWtldXAtY2FwYWJsZSAocGVyIEFDUEkgc3BlYykuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorCitzdGF0aWMgc3RydWN0IGNtb3NfcnRjX2JvYXJkX2luZm8gcnRjX2luZm87CisKKworLyogUE5QIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQgaW4gYSBzdWJzeXNfaW5pdGNhbGwoKTsKKyAqIEFDUEkgc3BlY2lmaWVzIHRoZSBQTlAgSURzIHRvIHVzZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BucC5oPgorCitzdGF0aWMgaW50IF9faW5pdCBwbnBfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0YXRpYyBjb25zdCBjaGFyICppZHNbXSA9IHsgIlBOUDBiMDAiLCAiUE5QMGIwMSIsICJQTlAwYjAyIiwgfTsKKwlzdHJ1Y3QgcG5wX2RldiAqcG5wID0gdG9fcG5wX2RldihkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWRzKTsgaSsrKSB7CisJCWlmIChjb21wYXJlX3BucF9pZChwbnAtPmlkLCBpZHNbaV0pICE9IDApCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICpfX2luaXQgZ2V0X3J0Y19kZXYodm9pZCkKK3sKKwlyZXR1cm4gYnVzX2ZpbmRfZGV2aWNlKCZwbnBfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIHBucF9tYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfcnRjX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBnZXRfcnRjX2RldigpOworCisJaWYgKGRldikgeworCQlydGNfaW5mby5ydGNfZGF5X2FsYXJtID0gYWNwaV9nYmxfRkFEVC5kYXlfYWxhcm07CisJCXJ0Y19pbmZvLnJ0Y19tb25fYWxhcm0gPSBhY3BpX2dibF9GQURULm1vbnRoX2FsYXJtOworCQlydGNfaW5mby5ydGNfY2VudHVyeSA9IGFjcGlfZ2JsX0ZBRFQuY2VudHVyeTsKKworCQkvKiBOT1RFOiAgYWNwaV9nYmxfRkFEVC0+cnRjczQgaXMgTk9UIGN1cnJlbnRseSB1c2VmdWwgKi8KKworCQlkZXYtPnBsYXRmb3JtX2RhdGEgPSAmcnRjX2luZm87CisKKwkJLyogUlRDIGFsd2F5cyB3YWtlcyBmcm9tIFMxL1MyL1MzLCBhbmQgb2Z0ZW4gUzQvU1REICovCisJCWRldmljZV9pbml0X3dha2V1cChkZXYsIDEpOworCisJCXB1dF9kZXZpY2UoZGV2KTsKKwl9IGVsc2UKKwkJcHJfZGVidWcoIkFDUEk6IFJUQyB1bmF2YWlsYWJsZT9cbiIpOworCXJldHVybiAwOworfQorLyogZG8gdGhpcyBiZXR3ZWVuIFJUQyBzdWJzeXNfaW5pdGNhbGwoKSBhbmQgcnRjX2Ntb3MgZHJpdmVyX2luaXRjYWxsKCkgKi8KK2ZzX2luaXRjYWxsKGFjcGlfcnRjX2luaXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdzbGVlcC5jCmluZGV4IDU3OTAxY2EuLjhmYTkzMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3NsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3c2xlZXAuYwpAQCAtMjM1LDYgKzIzNSwxNCBAQAogCQkJCSJXaGlsZSBleGVjdXRpbmcgbWV0aG9kIF9TU1QiKSk7CiAJfQogCisJLyoKKwkgKiAxKSBEaXNhYmxlL0NsZWFyIGFsbCBHUEVzCisJICovCisJc3RhdHVzID0gYWNwaV9od19kaXNhYmxlX2FsbF9ncGVzKCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKwogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKQEAgLTI5MCwxMyArMjk4LDggQEAKIAl9CiAKIAkvKgotCSAqIDEpIERpc2FibGUvQ2xlYXIgYWxsIEdQRXMKIAkgKiAyKSBFbmFibGUgYWxsIHdha2V1cCBHUEVzCiAJICovCi0Jc3RhdHVzID0gYWNwaV9od19kaXNhYmxlX2FsbF9ncGVzKCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KIAlhY3BpX2dibF9zeXN0ZW1fYXdha2VfYW5kX3J1bm5pbmcgPSBGQUxTRTsKIAogCXN0YXR1cyA9IGFjcGlfaHdfZW5hYmxlX2FsbF93YWtldXBfZ3BlcygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2hvdGtleS5jIGIvZHJpdmVycy9hY3BpL2hvdGtleS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWRmYjkyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvYWNwaS9ob3RrZXkuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNDIgKzAsMCBAQAotLyoKLSAqICBob3RrZXkuYyAtIEFDUEkgSG90a2V5IERyaXZlciAoJFJldmlzaW9uOiAwLjIgJCkKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IEx1bWluZyBZdSA8bHVtaW5nLnl1QGludGVsLmNvbT4KLSAqCi0gKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCi0gKgotICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+Ci0jaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNkZWZpbmUgSE9US0VZX0FDUElfVkVSU0lPTiAiMC4xIgotCi0jZGVmaW5lIEhPVEtFWV9QUk9DICJob3RrZXkiCi0jZGVmaW5lIEhPVEtFWV9FVl9DT05GSUcgICAgImV2ZW50X2NvbmZpZyIKLSNkZWZpbmUgSE9US0VZX1BMX0NPTkZJRyAgICAicG9sbF9jb25maWciCi0jZGVmaW5lIEhPVEtFWV9BQ1RJT04gICAiYWN0aW9uIgotI2RlZmluZSBIT1RLRVlfSU5GTyAiaW5mbyIKLQotI2RlZmluZSBBQ1BJX0hPVEtfTkFNRSAgICAgICAgICAiR2VuZXJpYyBIb3RrZXkgRHJpdmVyIgotI2RlZmluZSBBQ1BJX0hPVEtfQ0xBU1MgICAgICAgICAiSG90a2V5IgotI2RlZmluZSBBQ1BJX0hPVEtfREVWSUNFX05BTUUgICAiSG90a2V5IgotI2RlZmluZSBBQ1BJX0hPVEtfSElEICAgICAgICAgICAiVW5rbm93bj8iCi0jZGVmaW5lIEFDUElfSE9US0VZX0NPTVBPTkVOVCAgIDB4MjAwMDAwMDAKLQotI2RlZmluZSBBQ1BJX0hPVEtFWV9FVkVOVCAgIDB4MQotI2RlZmluZSBBQ1BJX0hPVEtFWV9QT0xMSU5HIDB4MgotI2RlZmluZSBBQ1BJX1VOREVGSU5FRF9FVkVOVCAgICAweGYKLQotI2RlZmluZSBSRVNVTFRfU1RSX0xFTgkgICAgODAKLQotI2RlZmluZSBBQ1RJT05fTUVUSE9ECTAKLSNkZWZpbmUgUE9MTF9NRVRIT0QJMQotCi0jZGVmaW5lIElTX0VWRU5UKGUpICAgICAgIAkoKGUpIDw9IDEwMDAwICYmIChlKSA+MCkKLSNkZWZpbmUgSVNfUE9MTChlKSAgICAgIAkoKGUpID4gMTAwMDApCi0jZGVmaW5lIElTX09USEVSUyhlKQkJKChlKTw9MCB8fCAoZSk+PTIwMDAwKQotI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgICAgICBBQ1BJX0hPVEtFWV9DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfaG90a2V5IikKLQotICAgIE1PRFVMRV9BVVRIT1IoImx1bWluZy55dUBpbnRlbC5jb20iKTsKLU1PRFVMRV9ERVNDUklQVElPTihBQ1BJX0hPVEtfTkFNRSk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qICBzdGFuZGFyZGl6ZWQgaW50ZXJuYWwgaG90a2V5IG51bWJlci9ldmVudCAgKi8KLWVudW0gewotCS8qIFZpZGVvIEV4dGVuc2lvbiBldmVudCAqLwotCUhLX0VWRU5UX0NZQ0xFX09VVFBVVF9ERVZJQ0UgPSAweDgwLAotCUhLX0VWRU5UX09VVFBVVF9ERVZJQ0VfU1RBVFVTX0NIQU5HRSwKLQlIS19FVkVOVF9DWUNMRV9ESVNQTEFZX09VVFBVVCwKLQlIS19FVkVOVF9ORVhUX0RJU1BMQVlfT1VUUFVULAotCUhLX0VWRU5UX1BSRVZJT1VTX0RJU1BMQVlfT1VUUFVULAotCUhLX0VWRU5UX0NZQ0xFX0JSSUdIVE5FU1MsCi0JSEtfRVZFTlRfSU5DUkVBU0VfQlJJR0hUTkVTUywKLQlIS19FVkVOVF9ERUNSRUFTRV9CUklHSFRORVNTLAotCUhLX0VWRU5UX1pFUk9fQlJJR0hUTkVTUywKLQlIS19FVkVOVF9ESVNQTEFZX0RFVklDRV9PRkYsCi0KLQkvKiBTbmQgQ2FyZCBldmVudCAqLwotCUhLX0VWRU5UX1ZPTFVNRV9NVVRFLAotCUhLX0VWRU5UX1ZPTFVNRV9JTkNMUkVBU0UsCi0JSEtfRVZFTlRfVk9MVU1FX0RFQ1JFQVNFLAotCi0JLyogcnVubmluZyBzdGF0ZSBjb250cm9sICovCi0JSEtfRVZFTlRfRU5URVJSSU5HX1MzLAotCUhLX0VWRU5UX0VOVEVSUklOR19TNCwKLQlIS19FVkVOVF9FTlRFUlJJTkdfUzUsCi19OwotCi1lbnVtIGNvbmZfZW50cnlfZW51bSB7Ci0JYnVzX2hhbmRsZSA9IDAsCi0JYnVzX21ldGhvZCA9IDEsCi0JYWN0aW9uX2hhbmRsZSA9IDIsCi0JbWV0aG9kID0gMywKLQlMQVNUX0NPTkZfRU5UUlkKLX07Ci0KLS8qICBwcm9jZGlyIHdlIHVzZSAqLwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaG90a2V5X3Byb2NfZGlyOwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaG90a2V5X2NvbmZpZzsKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmhvdGtleV9wb2xsX2NvbmZpZzsKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmhvdGtleV9hY3Rpb247Ci1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpob3RrZXlfaW5mbzsKLQotLyogbGlua2FnZSBmb3IgYWxsIHR5cGUgb2YgaG90a2V5ICovCi1zdHJ1Y3QgYWNwaV9ob3RrZXlfbGluayB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOwotCWludCBob3RrZXlfdHlwZTsJLyogZXZlbnQgb3IgcG9sbGluZyBiYXNlZCBob3RrZXkgICovCi0JaW50IGhvdGtleV9zdGFuZGFyZF9udW07CS8qIHN0YW5kYXJkaXplZCBob3RrZXkoZXZlbnQpIG51bWJlciAqLwotfTsKLQotLyogZXZlbnQgYmFzZWQgaG90a2V5ICovCi1zdHJ1Y3QgYWNwaV9ldmVudF9ob3RrZXkgewotCXN0cnVjdCBhY3BpX2hvdGtleV9saW5rIGhvdGtleV9saW5rOwotCWludCBmbGFnOwotCWFjcGlfaGFuZGxlIGJ1c19oYW5kbGU7CS8qIGJ1cyB0byBpbnN0YWxsIG5vdGlmeSBoYW5kbGVyICovCi0JaW50IGV4dGVybmFsX2hvdGtleV9udW07CS8qIGV4dGVybmFsIGhvdGtleS9ldmVudCBudW1iZXIgKi8KLQlhY3BpX2hhbmRsZSBhY3Rpb25faGFuZGxlOwkvKiBhY3BpIGhhbmRsZSBhdHRhY2hlZCBhbWwgYWN0aW9uIG1ldGhvZCAqLwotCWNoYXIgKmFjdGlvbl9tZXRob2Q7CS8qIGFjdGlvbiBtZXRob2QgKi8KLX07Ci0KLS8qCi0gKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gcG9sbCBzdGF0dXMKLSAqIDEuIGRpcmVjdHkgY2FsbCByZWFkX3h4eCBtZXRob2QsIHdpdGhvdXQgYW55IGFyZ3VtZW50cyBwYXNzZWQgaW4KLSAqIDIuIGNhbGwgd3JpdGVfeHh4IG1ldGhvZCwgd2l0aCBhcmd1bWVudHMgcGFzc2VkIGluLCB5b3UgbmVlZAotICogdGhlIHJlc3VsdCBpcyBzYXZlZCBpbiBhY3BpX3BvbGxpbmdfaG90a2V5LnBvbGxfcmVzdWx0LgotICogYW50aG9lciByZWFkIGNvbW1hbmQgdGhyb3VnaCBwb2xsaW5nIGludGVyZmFjZS4KLSAqCi0gKi8KLQotLyogcG9sbGluZyBiYXNlZCBob3RrZXkgKi8KLXN0cnVjdCBhY3BpX3BvbGxpbmdfaG90a2V5IHsKLQlzdHJ1Y3QgYWNwaV9ob3RrZXlfbGluayBob3RrZXlfbGluazsKLQlpbnQgZmxhZzsKLQlhY3BpX2hhbmRsZSBwb2xsX2hhbmRsZTsJLyogYWNwaSBoYW5kbGUgYXR0YWNoZWQgcG9sbGluZyBtZXRob2QgKi8KLQljaGFyICpwb2xsX21ldGhvZDsJLyogcG9sbCBtZXRob2QgKi8KLQlhY3BpX2hhbmRsZSBhY3Rpb25faGFuZGxlOwkvKiBhY3BpIGhhbmRsZSBhdHRhY2hlZCBhY3Rpb24gbWV0aG9kICovCi0JY2hhciAqYWN0aW9uX21ldGhvZDsJLyogYWN0aW9uIG1ldGhvZCAqLwotCXVuaW9uIGFjcGlfb2JqZWN0ICpwb2xsX3Jlc3VsdDsJLyogcG9sbGluZ19yZXN1bHQgKi8KLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7Ci19OwotCi0vKiBob3RrZXkgb2JqZWN0IHVuaW9uICovCi11bmlvbiBhY3BpX2hvdGtleSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOwotCXN0cnVjdCBhY3BpX2hvdGtleV9saW5rIGxpbms7Ci0Jc3RydWN0IGFjcGlfZXZlbnRfaG90a2V5IGV2ZW50X2hvdGtleTsKLQlzdHJ1Y3QgYWNwaV9wb2xsaW5nX2hvdGtleSBwb2xsX2hvdGtleTsKLX07Ci0KLS8qIGhvdGtleSBvYmplY3QgbGlzdCAqLwotc3RydWN0IGFjcGlfaG90a2V5X2xpc3QgewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXM7Ci0JaW50IGNvdW50OwotfTsKLQotc3RhdGljIGludCBhdXRvX2hvdGtleV9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCBhdXRvX2hvdGtleV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKLQotc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBob3RrZXlfZHJpdmVyID0gewotCS5uYW1lID0gQUNQSV9IT1RLX05BTUUsCi0JLmNsYXNzID0gQUNQSV9IT1RLX0NMQVNTLAotCS5pZHMgPSBBQ1BJX0hPVEtfSElELAotCS5vcHMgPSB7Ci0JCS5hZGQgPSBhdXRvX2hvdGtleV9hZGQsCi0JCS5yZW1vdmUgPSBhdXRvX2hvdGtleV9yZW1vdmUsCi0JCX0sCi19OwotCi1zdGF0aWMgdm9pZCBmcmVlX2hvdGtleV9kZXZpY2UodW5pb24gYWNwaV9ob3RrZXkgKmtleSk7Ci1zdGF0aWMgdm9pZCBmcmVlX2hvdGtleV9idWZmZXIodW5pb24gYWNwaV9ob3RrZXkgKmtleSk7Ci1zdGF0aWMgdm9pZCBmcmVlX3BvbGxfaG90a2V5X2J1ZmZlcih1bmlvbiBhY3BpX2hvdGtleSAqa2V5KTsKLXN0YXRpYyBpbnQgaG90a2V5X29wZW5fY29uZmlnKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBpbnQgaG90a2V5X3BvbGxfb3Blbl9jb25maWcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHNzaXplX3QgaG90a2V5X3dyaXRlX2NvbmZpZyhzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgICBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqIGRhdGEpOwotc3RhdGljIGludCBob3RrZXlfaW5mb19vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBpbnQgaG90a2V5X2FjdGlvbl9vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzc2l6ZV90IGhvdGtleV9leGVjdXRlX2FtbF9tZXRob2Qoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCSBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKLQkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICogZGF0YSk7Ci1zdGF0aWMgaW50IGhvdGtleV9jb25maWdfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7Ci1zdGF0aWMgaW50IGhvdGtleV9wb2xsX2NvbmZpZ19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KTsKLXN0YXRpYyBpbnQgaG90a2V5X3BvbGxpbmdfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgdW5pb24gYWNwaV9ob3RrZXkgKmdldF9ob3RrZXlfYnlfZXZlbnQoc3RydWN0Ci0JCQkJCSAgICAgIGFjcGlfaG90a2V5X2xpc3QKLQkJCQkJICAgICAgKmhvdGtleV9saXN0LCBpbnQgZXZlbnQpOwotCi0vKiBldmVudCBiYXNlZCBjb25maWcgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhvdGtleV9jb25maWdfZm9wcyA9IHsKLQkub3BlbiA9IGhvdGtleV9vcGVuX2NvbmZpZywKLQkucmVhZCA9IHNlcV9yZWFkLAotCS53cml0ZSA9IGhvdGtleV93cml0ZV9jb25maWcsCi0JLmxsc2VlayA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotLyogcG9sbGluZyBiYXNlZCBjb25maWcgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhvdGtleV9wb2xsX2NvbmZpZ19mb3BzID0gewotCS5vcGVuID0gaG90a2V5X3BvbGxfb3Blbl9jb25maWcsCi0JLnJlYWQgPSBzZXFfcmVhZCwKLQkud3JpdGUgPSBob3RrZXlfd3JpdGVfY29uZmlnLAotCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLS8qIGhvdGtleSBkcml2ZXIgaW5mbyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaG90a2V5X2luZm9fZm9wcyA9IHsKLQkub3BlbiA9IGhvdGtleV9pbmZvX29wZW5fZnMsCi0JLnJlYWQgPSBzZXFfcmVhZCwKLQkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi0vKiBhY3Rpb24gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhvdGtleV9hY3Rpb25fZm9wcyA9IHsKLQkub3BlbiA9IGhvdGtleV9hY3Rpb25fb3Blbl9mcywKLQkucmVhZCA9IHNlcV9yZWFkLAotCS53cml0ZSA9IGhvdGtleV9leGVjdXRlX2FtbF9tZXRob2QsCi0JLmxsc2VlayA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotLyogcG9sbGluZyByZXN1bHRzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBob3RrZXlfcG9sbGluZ19mb3BzID0gewotCS5vcGVuID0gaG90a2V5X3BvbGxpbmdfb3Blbl9mcywKLQkucmVhZCA9IHNlcV9yZWFkLAotCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXN0cnVjdCBhY3BpX2hvdGtleV9saXN0IGdsb2JhbF9ob3RrZXlfbGlzdDsJLyogbGluayBhbGwgZXYgb3IgcGwgaG90a2V5ICAqLwotc3RydWN0IGxpc3RfaGVhZCBob3RrZXlfZW50cmllczsJLyogaGVhZCBvZiB0aGUgbGlzdCBvZiBob3RrZXlfbGlzdCAqLwotCi1zdGF0aWMgaW50IGhvdGtleV9pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCi17Ci0KLQlzZXFfcHJpbnRmKHNlcSwgIkhvdGtleSBnZW5lcmljIGRyaXZlciB2ZXI6ICVzXG4iLCBIT1RLRVlfQUNQSV9WRVJTSU9OKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhvdGtleV9pbmZvX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGhvdGtleV9pbmZvX3NlcV9zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKLX0KLQotc3RhdGljIGNoYXIgKmZvcm1hdF9yZXN1bHQodW5pb24gYWNwaV9vYmplY3QgKm9iamVjdCkKLXsKLQljaGFyICpidWY7Ci0KLQlidWYgPSBremFsbG9jKFJFU1VMVF9TVFJfTEVOLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIE5VTEw7Ci0JLyogTm93LCBqdXN0IHN1cHBvcnQgaW50ZWdlciB0eXBlICovCi0JaWYgKG9iamVjdC0+dHlwZSA9PSBBQ1BJX1RZUEVfSU5URUdFUikKLQkJc3ByaW50ZihidWYsICIlZFxuIiwgKHUzMikgb2JqZWN0LT5pbnRlZ2VyLnZhbHVlKTsKLQlyZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgaW50IGhvdGtleV9wb2xsaW5nX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCi17Ci0Jc3RydWN0IGFjcGlfcG9sbGluZ19ob3RrZXkgKnBvbGxfaG90a2V5ID0gc2VxLT5wcml2YXRlOwotCWNoYXIgKmJ1ZjsKLQotCi0JaWYgKHBvbGxfaG90a2V5LT5wb2xsX3Jlc3VsdCkgewotCQlidWYgPSBmb3JtYXRfcmVzdWx0KHBvbGxfaG90a2V5LT5wb2xsX3Jlc3VsdCk7Ci0JCWlmIChidWYpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiVzIiwgYnVmKTsKLQkJa2ZyZWUoYnVmKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaG90a2V5X3BvbGxpbmdfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaG90a2V5X3BvbGxpbmdfc2VxX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwotfQotCi1zdGF0aWMgaW50IGhvdGtleV9hY3Rpb25fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaG90a2V5X2luZm9fc2VxX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwotfQotCi0vKiBNYXBwaW5nIGV4dGVybmFsIGhvdGtleSBudW1iZXIgdG8gc3RhbmRhcmRpemVkIGhvdGtleSBldmVudCBudW0gKi8KLXN0YXRpYyBpbnQgaG90a2V5X2dldF9pbnRlcm5hbF9ldmVudChpbnQgZXZlbnQsIHN0cnVjdCBhY3BpX2hvdGtleV9saXN0ICpsaXN0KQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXM7Ci0JaW50IHZhbCA9IC0xOwotCi0KLQlsaXN0X2Zvcl9lYWNoKGVudHJpZXMsIGxpc3QtPmVudHJpZXMpIHsKLQkJdW5pb24gYWNwaV9ob3RrZXkgKmtleSA9Ci0JCSAgICBjb250YWluZXJfb2YoZW50cmllcywgdW5pb24gYWNwaV9ob3RrZXksIGVudHJpZXMpOwotCQlpZiAoa2V5LT5saW5rLmhvdGtleV90eXBlID09IEFDUElfSE9US0VZX0VWRU5UCi0JCSAgICAmJiBrZXktPmV2ZW50X2hvdGtleS5leHRlcm5hbF9ob3RrZXlfbnVtID09IGV2ZW50KSB7Ci0JCQl2YWwgPSBrZXktPmxpbmsuaG90a2V5X3N0YW5kYXJkX251bTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIHZvaWQKLWFjcGlfaG90a2V5X25vdGlmeV9oYW5kbGVyKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKLQl1MzIgaW50ZXJuYWxfZXZlbnQ7Ci0KLQotCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJmRldmljZSkpCi0JCXJldHVybjsKLQotCWludGVybmFsX2V2ZW50ID0gaG90a2V5X2dldF9pbnRlcm5hbF9ldmVudChldmVudCwgJmdsb2JhbF9ob3RrZXlfbGlzdCk7Ci0JYWNwaV9idXNfZ2VuZXJhdGVfZXZlbnQoZGV2aWNlLCBpbnRlcm5hbF9ldmVudCwgMCk7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qIE5lZWQgdG8gaW52ZW50IGF1dG9tYXRpY2FsbHkgaG90a2V5IGFkZCBtZXRob2QgKi8KLXN0YXRpYyBpbnQgYXV0b19ob3RrZXlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQotewotCS8qIEltcGxlbWVudCBtZSAqLwotCXJldHVybiAwOwotfQotCi0vKiBOZWVkIHRvIGludmVudCBhdXRvbWF0aWNhbGx5IGhvdGtleSByZW1vdmUgbWV0aG9kICovCi1zdGF0aWMgaW50IGF1dG9faG90a2V5X3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCi17Ci0JLyogSW1wbGVtZW50IG1lICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIENyZWF0ZSBhIHByb2MgZmlsZSBmb3IgZWFjaCBwb2xsaW5nIG1ldGhvZCAqLwotc3RhdGljIGludCBjcmVhdGVfcG9sbGluZ19wcm9jKHVuaW9uIGFjcGlfaG90a2V5ICpkZXZpY2UpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwotCWNoYXIgcHJvY19uYW1lWzgwXTsKLQltb2RlX3QgbW9kZTsKLQotCW1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVR087Ci0KLQlzcHJpbnRmKHByb2NfbmFtZSwgIiVkIiwgZGV2aWNlLT5saW5rLmhvdGtleV9zdGFuZGFyZF9udW0pOwotCS8qCi0JICAgc3RyY2F0KHByb2NfbmFtZSwgZGV2aWNlLT5wb2xsX2hvdGtleS5wb2xsX21ldGhvZCk7Ci0JICovCi0JcHJvYyA9IGNyZWF0ZV9wcm9jX2VudHJ5KHByb2NfbmFtZSwgbW9kZSwgaG90a2V5X3Byb2NfZGlyKTsKLQotCWlmICghcHJvYykgewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9IGVsc2UgewotCQlwcm9jLT5wcm9jX2ZvcHMgPSAmaG90a2V5X3BvbGxpbmdfZm9wczsKLQkJcHJvYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJcHJvYy0+ZGF0YSA9IGRldmljZTsKLQkJcHJvYy0+dWlkID0gMDsKLQkJcHJvYy0+Z2lkID0gMDsKLQkJZGV2aWNlLT5wb2xsX2hvdGtleS5wcm9jID0gcHJvYzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaG90a2V5X2FkZCh1bmlvbiBhY3BpX2hvdGtleSAqZGV2aWNlKQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2ID0gTlVMTDsKLQotCi0JaWYgKGRldmljZS0+bGluay5ob3RrZXlfdHlwZSA9PSBBQ1BJX0hPVEtFWV9FVkVOVCkgewotCQlhY3BpX2J1c19nZXRfZGV2aWNlKGRldmljZS0+ZXZlbnRfaG90a2V5LmJ1c19oYW5kbGUsICZkZXYpOwotCQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoZGV2LT5oYW5kbGUsCi0JCQkJCQkgICAgIEFDUElfREVWSUNFX05PVElGWSwKLQkJCQkJCSAgICAgYWNwaV9ob3RrZXlfbm90aWZ5X2hhbmRsZXIsCi0JCQkJCQkgICAgIGRldik7Ci0JfSBlbHNlCQkJLyogQWRkIHBvbGxpbmcgaG90a2V5ICovCi0JCWNyZWF0ZV9wb2xsaW5nX3Byb2MoZGV2aWNlKTsKLQotCWdsb2JhbF9ob3RrZXlfbGlzdC5jb3VudCsrOwotCi0JbGlzdF9hZGRfdGFpbCgmZGV2aWNlLT5saW5rLmVudHJpZXMsIGdsb2JhbF9ob3RrZXlfbGlzdC5lbnRyaWVzKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgaG90a2V5X3JlbW92ZSh1bmlvbiBhY3BpX2hvdGtleSAqZGV2aWNlKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXMsICpuZXh0OwotCi0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cmllcywgbmV4dCwgZ2xvYmFsX2hvdGtleV9saXN0LmVudHJpZXMpIHsKLQkJdW5pb24gYWNwaV9ob3RrZXkgKmtleSA9Ci0JCSAgICBjb250YWluZXJfb2YoZW50cmllcywgdW5pb24gYWNwaV9ob3RrZXksIGVudHJpZXMpOwotCQlpZiAoa2V5LT5saW5rLmhvdGtleV9zdGFuZGFyZF9udW0gPT0KLQkJICAgIGRldmljZS0+bGluay5ob3RrZXlfc3RhbmRhcmRfbnVtKSB7Ci0JCQlsaXN0X2RlbCgma2V5LT5saW5rLmVudHJpZXMpOwotCQkJZnJlZV9ob3RrZXlfZGV2aWNlKGtleSk7Ci0JCQlnbG9iYWxfaG90a2V5X2xpc3QuY291bnQtLTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWtmcmVlKGRldmljZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaG90a2V5X3VwZGF0ZSh1bmlvbiBhY3BpX2hvdGtleSAqa2V5KQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXM7Ci0KLQotCWxpc3RfZm9yX2VhY2goZW50cmllcywgZ2xvYmFsX2hvdGtleV9saXN0LmVudHJpZXMpIHsKLQkJdW5pb24gYWNwaV9ob3RrZXkgKnRtcCA9Ci0JCSAgICBjb250YWluZXJfb2YoZW50cmllcywgdW5pb24gYWNwaV9ob3RrZXksIGVudHJpZXMpOwotCQlpZiAodG1wLT5saW5rLmhvdGtleV9zdGFuZGFyZF9udW0gPT0KLQkJICAgIGtleS0+bGluay5ob3RrZXlfc3RhbmRhcmRfbnVtKSB7Ci0JCQlpZiAoa2V5LT5saW5rLmhvdGtleV90eXBlID09IEFDUElfSE9US0VZX0VWRU5UKSB7Ci0JCQkJZnJlZV9ob3RrZXlfYnVmZmVyKHRtcCk7Ci0JCQkJdG1wLT5ldmVudF9ob3RrZXkuYnVzX2hhbmRsZSA9Ci0JCQkJICAgIGtleS0+ZXZlbnRfaG90a2V5LmJ1c19oYW5kbGU7Ci0JCQkJdG1wLT5ldmVudF9ob3RrZXkuZXh0ZXJuYWxfaG90a2V5X251bSA9Ci0JCQkJICAgIGtleS0+ZXZlbnRfaG90a2V5LmV4dGVybmFsX2hvdGtleV9udW07Ci0JCQkJdG1wLT5ldmVudF9ob3RrZXkuYWN0aW9uX2hhbmRsZSA9Ci0JCQkJICAgIGtleS0+ZXZlbnRfaG90a2V5LmFjdGlvbl9oYW5kbGU7Ci0JCQkJdG1wLT5ldmVudF9ob3RrZXkuYWN0aW9uX21ldGhvZCA9Ci0JCQkJICAgIGtleS0+ZXZlbnRfaG90a2V5LmFjdGlvbl9tZXRob2Q7Ci0JCQkJa2ZyZWUoa2V5KTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgICBjaGFyICBwcm9jX25hbWVbODBdOwotCi0JCQkJICAgc3ByaW50Zihwcm9jX25hbWUsICIlZCIsIHRtcC0+bGluay5ob3RrZXlfc3RhbmRhcmRfbnVtKTsKLQkJCQkgICBzdHJjYXQocHJvY19uYW1lLCB0bXAtPnBvbGxfaG90a2V5LnBvbGxfbWV0aG9kKTsKLQkJCQkgICByZW1vdmVfcHJvY19lbnRyeShwcm9jX25hbWUsaG90a2V5X3Byb2NfZGlyKTsKLQkJCQkgKi8KLQkJCQlmcmVlX3BvbGxfaG90a2V5X2J1ZmZlcih0bXApOwotCQkJCXRtcC0+cG9sbF9ob3RrZXkucG9sbF9oYW5kbGUgPQotCQkJCSAgICBrZXktPnBvbGxfaG90a2V5LnBvbGxfaGFuZGxlOwotCQkJCXRtcC0+cG9sbF9ob3RrZXkucG9sbF9tZXRob2QgPQotCQkJCSAgICBrZXktPnBvbGxfaG90a2V5LnBvbGxfbWV0aG9kOwotCQkJCXRtcC0+cG9sbF9ob3RrZXkuYWN0aW9uX2hhbmRsZSA9Ci0JCQkJICAgIGtleS0+cG9sbF9ob3RrZXkuYWN0aW9uX2hhbmRsZTsKLQkJCQl0bXAtPnBvbGxfaG90a2V5LmFjdGlvbl9tZXRob2QgPQotCQkJCSAgICBrZXktPnBvbGxfaG90a2V5LmFjdGlvbl9tZXRob2Q7Ci0JCQkJdG1wLT5wb2xsX2hvdGtleS5wb2xsX3Jlc3VsdCA9Ci0JCQkJICAgIGtleS0+cG9sbF9ob3RrZXkucG9sbF9yZXN1bHQ7Ci0JCQkJLyoKLQkJCQkgICBjcmVhdGVfcG9sbGluZ19wcm9jKHRtcCk7Ci0JCQkJICovCi0JCQkJa2ZyZWUoa2V5KTsKLQkJCX0KLQkJCXJldHVybiAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9ob3RrZXlfZGV2aWNlKHVuaW9uIGFjcGlfaG90a2V5ICprZXkpCi17Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXY7Ci0KLQotCWlmIChrZXktPmxpbmsuaG90a2V5X3R5cGUgPT0gQUNQSV9IT1RLRVlfRVZFTlQpIHsKLQkJYWNwaV9idXNfZ2V0X2RldmljZShrZXktPmV2ZW50X2hvdGtleS5idXNfaGFuZGxlLCAmZGV2KTsKLQkJaWYgKGRldi0+aGFuZGxlKQotCQkJYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoZGV2LT5oYW5kbGUsCi0JCQkJCQkgICBBQ1BJX0RFVklDRV9OT1RJRlksCi0JCQkJCQkgICBhY3BpX2hvdGtleV9ub3RpZnlfaGFuZGxlcik7Ci0JCWZyZWVfaG90a2V5X2J1ZmZlcihrZXkpOwotCX0gZWxzZSB7Ci0JCWNoYXIgcHJvY19uYW1lWzgwXTsKLQotCQlzcHJpbnRmKHByb2NfbmFtZSwgIiVkIiwga2V5LT5saW5rLmhvdGtleV9zdGFuZGFyZF9udW0pOwotCQkvKgotCQkgICBzdHJjYXQocHJvY19uYW1lLCBrZXktPnBvbGxfaG90a2V5LnBvbGxfbWV0aG9kKTsKLQkJICovCi0JCXJlbW92ZV9wcm9jX2VudHJ5KHByb2NfbmFtZSwgaG90a2V5X3Byb2NfZGlyKTsKLQkJZnJlZV9wb2xsX2hvdGtleV9idWZmZXIoa2V5KTsKLQl9Ci0Ja2ZyZWUoa2V5KTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfaG90a2V5X2J1ZmZlcih1bmlvbiBhY3BpX2hvdGtleSAqa2V5KQotewotCS8qIGtleSB3b3VsZCBuZXZlciBiZSBudWxsLCBhY3Rpb24gbWV0aG9kIGNvdWxkIGJlICovCi0Ja2ZyZWUoa2V5LT5ldmVudF9ob3RrZXkuYWN0aW9uX21ldGhvZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfcG9sbF9ob3RrZXlfYnVmZmVyKHVuaW9uIGFjcGlfaG90a2V5ICprZXkpCi17Ci0JLyoga2V5IHdvdWxkIG5ldmVyIGJlIG51bGwsIG90aGVycyBjb3VsZCBiZSovCi0Ja2ZyZWUoa2V5LT5wb2xsX2hvdGtleS5hY3Rpb25fbWV0aG9kKTsKLQlrZnJlZShrZXktPnBvbGxfaG90a2V5LnBvbGxfbWV0aG9kKTsKLQlrZnJlZShrZXktPnBvbGxfaG90a2V5LnBvbGxfcmVzdWx0KTsKLX0KLXN0YXRpYyBpbnQKLWluaXRfaG90a2V5X2RldmljZSh1bmlvbiBhY3BpX2hvdGtleSAqa2V5LCBjaGFyICoqY29uZmlnX2VudHJ5LAotCQkgICBpbnQgc3RkX251bSwgaW50IGV4dGVybmFsX251bSkKLXsKLQlhY3BpX2hhbmRsZSB0bXBfaGFuZGxlOwotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCi0JaWYgKHN0ZF9udW0gPCAwIHx8IElTX1BPTEwoc3RkX251bSkgfHwgIWtleSkKLQkJZ290byBkb19mYWlsOwotCi0JaWYgKCFjb25maWdfZW50cnlbYnVzX2hhbmRsZV0gfHwgIWNvbmZpZ19lbnRyeVthY3Rpb25faGFuZGxlXQotCQkJfHwgIWNvbmZpZ19lbnRyeVttZXRob2RdKQotCQlnb3RvIGRvX2ZhaWw7Ci0KLQlrZXktPmxpbmsuaG90a2V5X3R5cGUgPSBBQ1BJX0hPVEtFWV9FVkVOVDsKLQlrZXktPmxpbmsuaG90a2V5X3N0YW5kYXJkX251bSA9IHN0ZF9udW07Ci0Ja2V5LT5ldmVudF9ob3RrZXkuZmxhZyA9IDA7Ci0Ja2V5LT5ldmVudF9ob3RrZXkuYWN0aW9uX21ldGhvZCA9IGNvbmZpZ19lbnRyeVttZXRob2RdOwotCi0Jc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKE5VTEwsIGNvbmZpZ19lbnRyeVtidXNfaGFuZGxlXSwKLQkJCSAgICYoa2V5LT5ldmVudF9ob3RrZXkuYnVzX2hhbmRsZSkpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJZ290byBkb19mYWlsX3plcm87Ci0Ja2V5LT5ldmVudF9ob3RrZXkuZXh0ZXJuYWxfaG90a2V5X251bSA9IGV4dGVybmFsX251bTsKLQlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgY29uZmlnX2VudHJ5W2FjdGlvbl9oYW5kbGVdLAotCQkJICAgICYoa2V5LT5ldmVudF9ob3RrZXkuYWN0aW9uX2hhbmRsZSkpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJZ290byBkb19mYWlsX3plcm87Ci0Jc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGtleS0+ZXZlbnRfaG90a2V5LmFjdGlvbl9oYW5kbGUsCi0JCQkJIGNvbmZpZ19lbnRyeVttZXRob2RdLCAmdG1wX2hhbmRsZSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlnb3RvIGRvX2ZhaWxfemVybzsKLQlyZXR1cm4gQUVfT0s7Ci1kb19mYWlsX3plcm86Ci0Ja2V5LT5ldmVudF9ob3RrZXkuYWN0aW9uX21ldGhvZCA9IE5VTEw7Ci1kb19mYWlsOgotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgaW50Ci1pbml0X3BvbGxfaG90a2V5X2RldmljZSh1bmlvbiBhY3BpX2hvdGtleSAqa2V5LCBjaGFyICoqY29uZmlnX2VudHJ5LAotCQkJaW50IHN0ZF9udW0pCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JYWNwaV9oYW5kbGUgdG1wX2hhbmRsZTsKLQotCWlmIChzdGRfbnVtIDwgMCB8fCBJU19FVkVOVChzdGRfbnVtKSB8fCAha2V5KQotCQlnb3RvIGRvX2ZhaWw7Ci0JaWYgKCFjb25maWdfZW50cnlbYnVzX2hhbmRsZV0gfHwhY29uZmlnX2VudHJ5W2J1c19tZXRob2RdIHx8Ci0JCSFjb25maWdfZW50cnlbYWN0aW9uX2hhbmRsZV0gfHwgIWNvbmZpZ19lbnRyeVttZXRob2RdKQotCQlnb3RvIGRvX2ZhaWw7Ci0KLQlrZXktPmxpbmsuaG90a2V5X3R5cGUgPSBBQ1BJX0hPVEtFWV9QT0xMSU5HOwotCWtleS0+bGluay5ob3RrZXlfc3RhbmRhcmRfbnVtID0gc3RkX251bTsKLQlrZXktPnBvbGxfaG90a2V5LmZsYWcgPSAwOwotCWtleS0+cG9sbF9ob3RrZXkucG9sbF9tZXRob2QgPSBjb25maWdfZW50cnlbYnVzX21ldGhvZF07Ci0Ja2V5LT5wb2xsX2hvdGtleS5hY3Rpb25fbWV0aG9kID0gY29uZmlnX2VudHJ5W21ldGhvZF07Ci0KLQlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgY29uZmlnX2VudHJ5W2J1c19oYW5kbGVdLAotCQkgICAgICAmKGtleS0+cG9sbF9ob3RrZXkucG9sbF9oYW5kbGUpKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCWdvdG8gZG9fZmFpbF96ZXJvOwotCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShrZXktPnBvbGxfaG90a2V5LnBvbGxfaGFuZGxlLAotCQkJCSBjb25maWdfZW50cnlbYnVzX21ldGhvZF0sICZ0bXBfaGFuZGxlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCWdvdG8gZG9fZmFpbF96ZXJvOwotCXN0YXR1cyA9Ci0JICAgIGFjcGlfZ2V0X2hhbmRsZShOVUxMLCBjb25maWdfZW50cnlbYWN0aW9uX2hhbmRsZV0sCi0JCQkgICAgJihrZXktPnBvbGxfaG90a2V5LmFjdGlvbl9oYW5kbGUpKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCWdvdG8gZG9fZmFpbF96ZXJvOwotCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShrZXktPnBvbGxfaG90a2V5LmFjdGlvbl9oYW5kbGUsCi0JCQkJIGNvbmZpZ19lbnRyeVttZXRob2RdLCAmdG1wX2hhbmRsZSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlnb3RvIGRvX2ZhaWxfemVybzsKLQlrZXktPnBvbGxfaG90a2V5LnBvbGxfcmVzdWx0ID0KLQkgICAga21hbGxvYyhzaXplb2YodW5pb24gYWNwaV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtleS0+cG9sbF9ob3RrZXkucG9sbF9yZXN1bHQpCi0JCWdvdG8gZG9fZmFpbF96ZXJvOwotCXJldHVybiBBRV9PSzsKLQotZG9fZmFpbF96ZXJvOgotCWtleS0+cG9sbF9ob3RrZXkucG9sbF9tZXRob2QgPSBOVUxMOwotCWtleS0+cG9sbF9ob3RrZXkuYWN0aW9uX21ldGhvZCA9IE5VTEw7Ci1kb19mYWlsOgotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgaW50IGhvdGtleV9vcGVuX2NvbmZpZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gKHNpbmdsZV9vcGVuCi0JCSAgICAgKGZpbGUsIGhvdGtleV9jb25maWdfc2VxX3Nob3csIFBERShpbm9kZSktPmRhdGEpKTsKLX0KLQotc3RhdGljIGludCBob3RrZXlfcG9sbF9vcGVuX2NvbmZpZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gKHNpbmdsZV9vcGVuCi0JCSAgICAgKGZpbGUsIGhvdGtleV9wb2xsX2NvbmZpZ19zZXFfc2hvdywgUERFKGlub2RlKS0+ZGF0YSkpOwotfQotCi1zdGF0aWMgaW50IGhvdGtleV9jb25maWdfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKLXsKLQlzdHJ1Y3QgYWNwaV9ob3RrZXlfbGlzdCAqaG90a2V5X2xpc3QgPSAmZ2xvYmFsX2hvdGtleV9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXM7Ci0JY2hhciBidXNfbmFtZVtBQ1BJX1BBVEhOQU1FX01BWF0gPSB7IDAgfTsKLQljaGFyIGFjdGlvbl9uYW1lW0FDUElfUEFUSE5BTUVfTUFYXSA9IHsgMCB9OwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidXMgPSB7IEFDUElfUEFUSE5BTUVfTUFYLCBidXNfbmFtZSB9OwotCXN0cnVjdCBhY3BpX2J1ZmZlciBhY3QgPSB7IEFDUElfUEFUSE5BTUVfTUFYLCBhY3Rpb25fbmFtZSB9OwotCi0KLQlsaXN0X2Zvcl9lYWNoKGVudHJpZXMsIGhvdGtleV9saXN0LT5lbnRyaWVzKSB7Ci0JCXVuaW9uIGFjcGlfaG90a2V5ICprZXkgPQotCQkgICAgY29udGFpbmVyX29mKGVudHJpZXMsIHVuaW9uIGFjcGlfaG90a2V5LCBlbnRyaWVzKTsKLQkJaWYgKGtleS0+bGluay5ob3RrZXlfdHlwZSA9PSBBQ1BJX0hPVEtFWV9FVkVOVCkgewotCQkJYWNwaV9nZXRfbmFtZShrZXktPmV2ZW50X2hvdGtleS5idXNfaGFuZGxlLAotCQkJCSAgICAgIEFDUElfTkFNRV9UWVBFX01BWCwgJmJ1cyk7Ci0JCQlhY3BpX2dldF9uYW1lKGtleS0+ZXZlbnRfaG90a2V5LmFjdGlvbl9oYW5kbGUsCi0JCQkJICAgICAgQUNQSV9OQU1FX1RZUEVfTUFYLCAmYWN0KTsKLQkJCXNlcV9wcmludGYoc2VxLCAiJXM6JXM6JXM6JWQ6JWRcbiIsIGJ1c19uYW1lLAotCQkJCSAgIGFjdGlvbl9uYW1lLAotCQkJCSAgIGtleS0+ZXZlbnRfaG90a2V5LmFjdGlvbl9tZXRob2QsCi0JCQkJICAga2V5LT5saW5rLmhvdGtleV9zdGFuZGFyZF9udW0sCi0JCQkJICAga2V5LT5ldmVudF9ob3RrZXkuZXh0ZXJuYWxfaG90a2V5X251bSk7Ci0JCX0KLQl9Ci0Jc2VxX3B1dHMoc2VxLCAiXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBob3RrZXlfcG9sbF9jb25maWdfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKLXsKLQlzdHJ1Y3QgYWNwaV9ob3RrZXlfbGlzdCAqaG90a2V5X2xpc3QgPSAmZ2xvYmFsX2hvdGtleV9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXM7Ci0JY2hhciBidXNfbmFtZVtBQ1BJX1BBVEhOQU1FX01BWF0gPSB7IDAgfTsKLQljaGFyIGFjdGlvbl9uYW1lW0FDUElfUEFUSE5BTUVfTUFYXSA9IHsgMCB9OwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidXMgPSB7IEFDUElfUEFUSE5BTUVfTUFYLCBidXNfbmFtZSB9OwotCXN0cnVjdCBhY3BpX2J1ZmZlciBhY3QgPSB7IEFDUElfUEFUSE5BTUVfTUFYLCBhY3Rpb25fbmFtZSB9OwotCi0KLQlsaXN0X2Zvcl9lYWNoKGVudHJpZXMsIGhvdGtleV9saXN0LT5lbnRyaWVzKSB7Ci0JCXVuaW9uIGFjcGlfaG90a2V5ICprZXkgPQotCQkgICAgY29udGFpbmVyX29mKGVudHJpZXMsIHVuaW9uIGFjcGlfaG90a2V5LCBlbnRyaWVzKTsKLQkJaWYgKGtleS0+bGluay5ob3RrZXlfdHlwZSA9PSBBQ1BJX0hPVEtFWV9QT0xMSU5HKSB7Ci0JCQlhY3BpX2dldF9uYW1lKGtleS0+cG9sbF9ob3RrZXkucG9sbF9oYW5kbGUsCi0JCQkJICAgICAgQUNQSV9OQU1FX1RZUEVfTUFYLCAmYnVzKTsKLQkJCWFjcGlfZ2V0X25hbWUoa2V5LT5wb2xsX2hvdGtleS5hY3Rpb25faGFuZGxlLAotCQkJCSAgICAgIEFDUElfTkFNRV9UWVBFX01BWCwgJmFjdCk7Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIiVzOiVzOiVzOiVzOiVkXG4iLCBidXNfbmFtZSwKLQkJCQkgICBrZXktPnBvbGxfaG90a2V5LnBvbGxfbWV0aG9kLAotCQkJCSAgIGFjdGlvbl9uYW1lLAotCQkJCSAgIGtleS0+cG9sbF9ob3RrZXkuYWN0aW9uX21ldGhvZCwKLQkJCQkgICBrZXktPmxpbmsuaG90a2V5X3N0YW5kYXJkX251bSk7Ci0JCX0KLQl9Ci0Jc2VxX3B1dHMoc2VxLCAiXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotZ2V0X3Bhcm1zKGNoYXIgKmNvbmZpZ19yZWNvcmQsIGludCAqY21kLCBjaGFyICoqY29uZmlnX2VudHJ5LAotCSAgICAgICBpbnQgKmludGVybmFsX2V2ZW50X251bSwgaW50ICpleHRlcm5hbF9ldmVudF9udW0pCi17Ci0vKiB0aGUgZm9ybWF0IG9mICpjb25maWdfcmVjb3JkID0KLSAqICIxOlxkKzoqIiA6ICJjbWQ6aW50ZXJuYWxfZXZlbnRfbnVtIgotICogIlxkKzpcdys6XHcrOlx3Kzpcdys6XGQrOlxkKyIgOgotICogImNtZDpidXNfaGFuZGxlOmJ1c19tZXRob2Q6YWN0aW9uX2hhbmRsZTptZXRob2Q6aW50ZXJuYWxfZXZlbnRfbnVtOmV4dGVybmFsX2V2ZW50X251bSIKLSAqLwotCWNoYXIgKnRtcCwgKnRtcDEsIGNvdW50OwotCWludCBpOwotCi0Jc3NjYW5mKGNvbmZpZ19yZWNvcmQsICIlZCIsIGNtZCk7Ci0JaWYgKCpjbWQgPT0gMSkgewotCQlpZiAoc3NjYW5mKGNvbmZpZ19yZWNvcmQsICIlZDolZCIsIGNtZCwgaW50ZXJuYWxfZXZlbnRfbnVtKSAhPQotCQkgICAgMikKLQkJCWdvdG8gZG9fZmFpbDsKLQkJZWxzZQotCQkJcmV0dXJuICg2KTsKLQl9Ci0JdG1wID0gc3RyY2hyKGNvbmZpZ19yZWNvcmQsICc6Jyk7Ci0JaWYgKCF0bXApCi0JCWdvdG8gZG9fZmFpbDsKLQl0bXArKzsKLQlmb3IgKGkgPSAwOyBpIDwgTEFTVF9DT05GX0VOVFJZOyBpKyspIHsKLQkJdG1wMSA9IHN0cmNocih0bXAsICc6Jyk7Ci0JCWlmICghdG1wMSkgewotCQkJZ290byBkb19mYWlsOwotCQl9Ci0JCWNvdW50ID0gdG1wMSAtIHRtcDsKLQkJY29uZmlnX2VudHJ5W2ldID0ga3phbGxvYyhjb3VudCArIDEsIEdGUF9LRVJORUwpOwotCQlpZiAoIWNvbmZpZ19lbnRyeVtpXSkKLQkJCWdvdG8gaGFuZGxlX2ZhaWx1cmU7Ci0JCXN0cm5jcHkoY29uZmlnX2VudHJ5W2ldLCB0bXAsIGNvdW50KTsKLQkJdG1wID0gdG1wMSArIDE7Ci0JfQotCWlmIChzc2NhbmYodG1wLCAiJWQ6JWQiLCBpbnRlcm5hbF9ldmVudF9udW0sIGV4dGVybmFsX2V2ZW50X251bSkgPD0gMCkKLQkJZ290byBoYW5kbGVfZmFpbHVyZTsKLQlpZiAoIUlTX09USEVSUygqaW50ZXJuYWxfZXZlbnRfbnVtKSkgewotCQlyZXR1cm4gNjsKLQl9Ci1oYW5kbGVfZmFpbHVyZToKLQl3aGlsZSAoaS0tID4gMCkKLQkJa2ZyZWUoY29uZmlnX2VudHJ5W2ldKTsKLWRvX2ZhaWw6Ci0JcmV0dXJuIC0xOwotfQotCi0vKiAgY291bnQgaXMgbGVuZ3RoIGZvciBvbmUgaW5wdXQgcmVjb3JkICovCi1zdGF0aWMgc3NpemVfdCBob3RrZXlfd3JpdGVfY29uZmlnKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAotCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICogZGF0YSkKLXsKLQljaGFyICpjb25maWdfcmVjb3JkID0gTlVMTDsKLQljaGFyICpjb25maWdfZW50cnlbTEFTVF9DT05GX0VOVFJZXTsKLQlpbnQgY21kLCBpbnRlcm5hbF9ldmVudF9udW0sIGV4dGVybmFsX2V2ZW50X251bTsKLQlpbnQgcmV0ID0gMDsKLQl1bmlvbiBhY3BpX2hvdGtleSAqa2V5ID0ga3phbGxvYyhzaXplb2YodW5pb24gYWNwaV9ob3RrZXkpLCBHRlBfS0VSTkVMKTsKLQotCWlmICgha2V5KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNvbmZpZ19yZWNvcmQgPSBremFsbG9jKGNvdW50ICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb25maWdfcmVjb3JkKSB7Ci0JCWtmcmVlKGtleSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWlmIChjb3B5X2Zyb21fdXNlcihjb25maWdfcmVjb3JkLCBidWZmZXIsIGNvdW50KSkgewotCQlrZnJlZShjb25maWdfcmVjb3JkKTsKLQkJa2ZyZWUoa2V5KTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldCA9IGdldF9wYXJtcyhjb25maWdfcmVjb3JkLCAmY21kLCBjb25maWdfZW50cnksCi0JCSAgICAgICAmaW50ZXJuYWxfZXZlbnRfbnVtLCAmZXh0ZXJuYWxfZXZlbnRfbnVtKTsKLQlrZnJlZShjb25maWdfcmVjb3JkKTsKLQlpZiAocmV0ICE9IDYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBkYXRhIGZvcm1hdCByZXQ9JWRcbiIsIHJldCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChjbWQgPT0gMSkgewotCQl1bmlvbiBhY3BpX2hvdGtleSAqdG1wID0gTlVMTDsKLQkJdG1wID0gZ2V0X2hvdGtleV9ieV9ldmVudCgmZ2xvYmFsX2hvdGtleV9saXN0LAotCQkJCQkgIGludGVybmFsX2V2ZW50X251bSk7Ci0JCWlmICghdG1wKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBrZXlcbiIpOwotCQllbHNlCi0JCQltZW1jcHkoa2V5LCB0bXAsIHNpemVvZih1bmlvbiBhY3BpX2hvdGtleSkpOwotCQlnb3RvIGNvbnRfY21kOwotCX0KLQlpZiAoSVNfRVZFTlQoaW50ZXJuYWxfZXZlbnRfbnVtKSkgewotCQlpZiAoaW5pdF9ob3RrZXlfZGV2aWNlKGtleSwgY29uZmlnX2VudHJ5LAotCQkJaW50ZXJuYWxfZXZlbnRfbnVtLCBleHRlcm5hbF9ldmVudF9udW0pKQotCQkJZ290byBpbml0X2hvdGtleV9mYWlsOwotCX0gZWxzZSB7Ci0JCWlmIChpbml0X3BvbGxfaG90a2V5X2RldmljZShrZXksIGNvbmZpZ19lbnRyeSwKLQkJCSAgICAgICBpbnRlcm5hbF9ldmVudF9udW0pKQotCQkJZ290byBpbml0X3BvbGxfaG90a2V5X2ZhaWw7Ci0JfQotY29udF9jbWQ6Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JCWlmIChnZXRfaG90a2V5X2J5X2V2ZW50KCZnbG9iYWxfaG90a2V5X2xpc3QsCi0JCQkJa2V5LT5saW5rLmhvdGtleV9zdGFuZGFyZF9udW0pKQotCQkJZ290byBmYWlsX291dDsKLQkJZWxzZQotCQkJaG90a2V5X2FkZChrZXkpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWhvdGtleV9yZW1vdmUoa2V5KTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkvKiBrZXkgaXMga2ZyZWUoKWVkIGlmIG1hdGNoZWQqLwotCQlpZiAoaG90a2V5X3VwZGF0ZShrZXkpKQotCQkJZ290byBmYWlsX291dDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZ290byBmYWlsX291dDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBjb3VudDsKLQotaW5pdF9wb2xsX2hvdGtleV9mYWlsOgkJLyogZmFpbGVkIGluaXRfcG9sbF9ob3RrZXlfZGV2aWNlICovCi0Ja2ZyZWUoY29uZmlnX2VudHJ5W2J1c19tZXRob2RdKTsKLQljb25maWdfZW50cnlbYnVzX21ldGhvZF0gPSBOVUxMOwotaW5pdF9ob3RrZXlfZmFpbDoJCS8qIGZhaWxlZCBpbml0X2hvdGtleV9kZXZpY2UgKi8KLQlrZnJlZShjb25maWdfZW50cnlbbWV0aG9kXSk7Ci1mYWlsX291dDoKLQlrZnJlZShjb25maWdfZW50cnlbYnVzX2hhbmRsZV0pOwotCWtmcmVlKGNvbmZpZ19lbnRyeVthY3Rpb25faGFuZGxlXSk7Ci0JLyogTm8gZG91YmxlIGZyZWUgc2luY2UgZWxlbWVudHMgPU5VTEwgZm9yIGVycm9yIGNhc2VzICovCi0JaWYgKElTX0VWRU5UKGludGVybmFsX2V2ZW50X251bSkpIHsKLQkJaWYgKGNvbmZpZ19lbnRyeVtidXNfbWV0aG9kXSkKLQkJCWtmcmVlKGNvbmZpZ19lbnRyeVtidXNfbWV0aG9kXSk7Ci0JCWZyZWVfaG90a2V5X2J1ZmZlcihrZXkpOwkvKiBmcmVlcyBbbWV0aG9kXSAqLwotCX0gZWxzZQotCQlmcmVlX3BvbGxfaG90a2V5X2J1ZmZlcihrZXkpOyAgLyogZnJlZXMgW2J1c19tZXRob2RdK1ttZXRob2RdICovCi0Ja2ZyZWUoa2V5KTsKLQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJpbnZhbGlkIGtleVxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyBhbiBBQ1BJIG1ldGhvZCwgZ2l2ZW4gYW4gaW50IGFzIHBhcmFtZXRlciwgdGhlCi0gKiBtZXRob2QgaXMgc2VhcmNoZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgaGFuZGxlLCBjYW4gYmUgTlVMTC4gVGhlIG91dHB1dAotICogb2YgdGhlIG1ldGhvZCBpcyB3cml0dGVuIGlzIG91dHB1dCwgd2hpY2ggY2FuIGFsc28gYmUgTlVMTAotICoKLSAqIHJldHVybnMgMSBpZiB3cml0ZSBpcyBzdWNjZXNzZnVsLCAwIGVsc2UuCi0gKi8KLXN0YXRpYyBpbnQgd3JpdGVfYWNwaV9pbnQoYWNwaV9oYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyICptZXRob2QsIGludCB2YWwsCi0JCQkgIHN0cnVjdCBhY3BpX2J1ZmZlciAqb3V0cHV0KQotewotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsJLyogbGlzdCBvZiBpbnB1dCBwYXJhbWV0ZXJzIChhbiBpbnQgaGVyZSkgKi8KLQl1bmlvbiBhY3BpX29iamVjdCBpbl9vYmo7CS8qIHRoZSBvbmx5IHBhcmFtIHdlIHVzZSAqLwotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCXBhcmFtcy5jb3VudCA9IDE7Ci0JcGFyYW1zLnBvaW50ZXIgPSAmaW5fb2JqOwotCWluX29iai50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7Ci0JaW5fb2JqLmludGVnZXIudmFsdWUgPSB2YWw7Ci0KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIChjaGFyICopbWV0aG9kLCAmcGFyYW1zLCBvdXRwdXQpOwotCi0JcmV0dXJuIChzdGF0dXMgPT0gQUVfT0spOwotfQotCi1zdGF0aWMgaW50IHJlYWRfYWNwaV9pbnQoYWNwaV9oYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyICptZXRob2QsCi0JCQkgdW5pb24gYWNwaV9vYmplY3QgKnZhbCkKLXsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0cHV0OwotCXVuaW9uIGFjcGlfb2JqZWN0IG91dF9vYmo7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0Jb3V0cHV0Lmxlbmd0aCA9IHNpemVvZihvdXRfb2JqKTsKLQlvdXRwdXQucG9pbnRlciA9ICZvdXRfb2JqOwotCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAoY2hhciAqKW1ldGhvZCwgTlVMTCwgJm91dHB1dCk7Ci0JaWYgKHZhbCkgewotCQl2YWwtPmludGVnZXIudmFsdWUgPSBvdXRfb2JqLmludGVnZXIudmFsdWU7Ci0JCXZhbC0+dHlwZSA9IG91dF9vYmoudHlwZTsKLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAibnVsbCB2YWwgcG9pbnRlclxuIik7Ci0JcmV0dXJuICgoc3RhdHVzID09IEFFX09LKQotCQkgICAgICYmIChvdXRfb2JqLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpKTsKLX0KLQotc3RhdGljIHVuaW9uIGFjcGlfaG90a2V5ICpnZXRfaG90a2V5X2J5X2V2ZW50KHN0cnVjdAotCQkJCQkgICAgICBhY3BpX2hvdGtleV9saXN0Ci0JCQkJCSAgICAgICpob3RrZXlfbGlzdCwgaW50IGV2ZW50KQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXM7Ci0KLQlsaXN0X2Zvcl9lYWNoKGVudHJpZXMsIGhvdGtleV9saXN0LT5lbnRyaWVzKSB7Ci0JCXVuaW9uIGFjcGlfaG90a2V5ICprZXkgPQotCQkgICAgY29udGFpbmVyX29mKGVudHJpZXMsIHVuaW9uIGFjcGlfaG90a2V5LCBlbnRyaWVzKTsKLQkJaWYgKGtleS0+bGluay5ob3RrZXlfc3RhbmRhcmRfbnVtID09IGV2ZW50KSB7Ci0JCQlyZXR1cm4gKGtleSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotLyoKLSAqIHVzZXIgY2FsbCBBTUwgbWV0aG9kIGludGVyZmFjZToKLSAqIENhbGwgY29udmVudGlvbjoKLSAqIGVjaG8gImV2ZW50X251bTogYXJnIHR5cGUgOiB2YWx1ZSIKLSAqIGV4YW1wbGU6IGVjaG8gIjE6MTozMCIgPiAvcHJvYy9hY3BpL2FjdGlvbgotICogSnVzdCBzdXBwb3J0IDEgaW50ZWdlciBhcmcgcGFzc2luZyB0byBBTUwgbWV0aG9kCi0gKi8KLQotc3RhdGljIHNzaXplX3QgaG90a2V5X2V4ZWN1dGVfYW1sX21ldGhvZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAotCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBkYXRhKQotewotCXN0cnVjdCBhY3BpX2hvdGtleV9saXN0ICpob3RrZXlfbGlzdCA9ICZnbG9iYWxfaG90a2V5X2xpc3Q7Ci0JY2hhciAqYXJnOwotCWludCBldmVudCwgbWV0aG9kX3R5cGUsIHR5cGUsIHZhbHVlOwotCXVuaW9uIGFjcGlfaG90a2V5ICprZXk7Ci0KLQotCWFyZyA9IGt6YWxsb2MoY291bnQgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFyZykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoYXJnLCBidWZmZXIsIGNvdW50KSkgewotCQlrZnJlZShhcmcpOwotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIGFyZ3VtZW50IDJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoc3NjYW5mKGFyZywgIiVkOiVkOiVkOiVkIiwgJmV2ZW50LCAmbWV0aG9kX3R5cGUsICZ0eXBlLCAmdmFsdWUpICE9Ci0JICAgIDQpIHsKLQkJa2ZyZWUoYXJnKTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBhcmd1bWVudCAzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWtmcmVlKGFyZyk7Ci0JaWYgKHR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKLQkJa2V5ID0gZ2V0X2hvdGtleV9ieV9ldmVudChob3RrZXlfbGlzdCwgZXZlbnQpOwotCQlpZiAoIWtleSkKLQkJCWdvdG8gZG9fZmFpbDsKLQkJaWYgKElTX0VWRU5UKGV2ZW50KSkKLQkJCXdyaXRlX2FjcGlfaW50KGtleS0+ZXZlbnRfaG90a2V5LmFjdGlvbl9oYW5kbGUsCi0JCQkJICAgICAgIGtleS0+ZXZlbnRfaG90a2V5LmFjdGlvbl9tZXRob2QsIHZhbHVlLAotCQkJCSAgICAgICBOVUxMKTsKLQkJZWxzZSBpZiAoSVNfUE9MTChldmVudCkpIHsKLQkJCWlmIChtZXRob2RfdHlwZSA9PSBQT0xMX01FVEhPRCkKLQkJCQlyZWFkX2FjcGlfaW50KGtleS0+cG9sbF9ob3RrZXkucG9sbF9oYW5kbGUsCi0JCQkJCSAgICAgIGtleS0+cG9sbF9ob3RrZXkucG9sbF9tZXRob2QsCi0JCQkJCSAgICAgIGtleS0+cG9sbF9ob3RrZXkucG9sbF9yZXN1bHQpOwotCQkJZWxzZSBpZiAobWV0aG9kX3R5cGUgPT0gQUNUSU9OX01FVEhPRCkKLQkJCQl3cml0ZV9hY3BpX2ludChrZXktPnBvbGxfaG90a2V5LmFjdGlvbl9oYW5kbGUsCi0JCQkJCSAgICAgICBrZXktPnBvbGxfaG90a2V5LmFjdGlvbl9tZXRob2QsCi0JCQkJCSAgICAgICB2YWx1ZSwgTlVMTCk7Ci0JCQllbHNlCi0JCQkJZ290byBkb19mYWlsOwotCi0JCX0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJOb3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiBjb3VudDsKLSAgICAgIGRvX2ZhaWw6Ci0JcmV0dXJuIC1FSU5WQUw7Ci0KLX0KLQotc3RhdGljIGludCBfX2luaXQgaG90a2V5X2luaXQodm9pZCkKLXsKLQlpbnQgcmVzdWx0OwotCW1vZGVfdCBtb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVUdPOwotCi0KLQlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoYWNwaV9zcGVjaWZpY19ob3RrZXlfZW5hYmxlZCkgewotCQlwcmludGsoIlVzaW5nIHNwZWNpZmljIGhvdGtleSBkcml2ZXJcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlob3RrZXlfcHJvY19kaXIgPSBwcm9jX21rZGlyKEhPVEtFWV9QUk9DLCBhY3BpX3Jvb3RfZGlyKTsKLQlpZiAoIWhvdGtleV9wcm9jX2RpcikgewotCQlyZXR1cm4gKC1FTk9ERVYpOwotCX0KLQlob3RrZXlfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlob3RrZXlfY29uZmlnID0KLQkgICAgY3JlYXRlX3Byb2NfZW50cnkoSE9US0VZX0VWX0NPTkZJRywgbW9kZSwgaG90a2V5X3Byb2NfZGlyKTsKLQlpZiAoIWhvdGtleV9jb25maWcpIHsKLQkJZ290byBkb19mYWlsMTsKLQl9IGVsc2UgewotCQlob3RrZXlfY29uZmlnLT5wcm9jX2ZvcHMgPSAmaG90a2V5X2NvbmZpZ19mb3BzOwotCQlob3RrZXlfY29uZmlnLT5kYXRhID0gJmdsb2JhbF9ob3RrZXlfbGlzdDsKLQkJaG90a2V5X2NvbmZpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJaG90a2V5X2NvbmZpZy0+dWlkID0gMDsKLQkJaG90a2V5X2NvbmZpZy0+Z2lkID0gMDsKLQl9Ci0KLQlob3RrZXlfcG9sbF9jb25maWcgPQotCSAgICBjcmVhdGVfcHJvY19lbnRyeShIT1RLRVlfUExfQ09ORklHLCBtb2RlLCBob3RrZXlfcHJvY19kaXIpOwotCWlmICghaG90a2V5X3BvbGxfY29uZmlnKSB7Ci0JCWdvdG8gZG9fZmFpbDI7Ci0JfSBlbHNlIHsKLQkJaG90a2V5X3BvbGxfY29uZmlnLT5wcm9jX2ZvcHMgPSAmaG90a2V5X3BvbGxfY29uZmlnX2ZvcHM7Ci0JCWhvdGtleV9wb2xsX2NvbmZpZy0+ZGF0YSA9ICZnbG9iYWxfaG90a2V5X2xpc3Q7Ci0JCWhvdGtleV9wb2xsX2NvbmZpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJaG90a2V5X3BvbGxfY29uZmlnLT51aWQgPSAwOwotCQlob3RrZXlfcG9sbF9jb25maWctPmdpZCA9IDA7Ci0JfQotCi0JaG90a2V5X2FjdGlvbiA9IGNyZWF0ZV9wcm9jX2VudHJ5KEhPVEtFWV9BQ1RJT04sIG1vZGUsIGhvdGtleV9wcm9jX2Rpcik7Ci0JaWYgKCFob3RrZXlfYWN0aW9uKSB7Ci0JCWdvdG8gZG9fZmFpbDM7Ci0JfSBlbHNlIHsKLQkJaG90a2V5X2FjdGlvbi0+cHJvY19mb3BzID0gJmhvdGtleV9hY3Rpb25fZm9wczsKLQkJaG90a2V5X2FjdGlvbi0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJaG90a2V5X2FjdGlvbi0+dWlkID0gMDsKLQkJaG90a2V5X2FjdGlvbi0+Z2lkID0gMDsKLQl9Ci0KLQlob3RrZXlfaW5mbyA9IGNyZWF0ZV9wcm9jX2VudHJ5KEhPVEtFWV9JTkZPLCBtb2RlLCBob3RrZXlfcHJvY19kaXIpOwotCWlmICghaG90a2V5X2luZm8pIHsKLQkJZ290byBkb19mYWlsNDsKLQl9IGVsc2UgewotCQlob3RrZXlfaW5mby0+cHJvY19mb3BzID0gJmhvdGtleV9pbmZvX2ZvcHM7Ci0JCWhvdGtleV9pbmZvLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlob3RrZXlfaW5mby0+dWlkID0gMDsKLQkJaG90a2V5X2luZm8tPmdpZCA9IDA7Ci0JfQotCi0JcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZob3RrZXlfZHJpdmVyKTsKLQlpZiAocmVzdWx0IDwgMCkKLQkJZ290byBkb19mYWlsNTsKLQlnbG9iYWxfaG90a2V5X2xpc3QuY291bnQgPSAwOwotCWdsb2JhbF9ob3RrZXlfbGlzdC5lbnRyaWVzID0gJmhvdGtleV9lbnRyaWVzOwotCi0JSU5JVF9MSVNUX0hFQUQoJmhvdGtleV9lbnRyaWVzKTsKLQotCXJldHVybiAoMCk7Ci0KLSAgICAgIGRvX2ZhaWw1OgotCXJlbW92ZV9wcm9jX2VudHJ5KEhPVEtFWV9JTkZPLCBob3RrZXlfcHJvY19kaXIpOwotICAgICAgZG9fZmFpbDQ6Ci0JcmVtb3ZlX3Byb2NfZW50cnkoSE9US0VZX0FDVElPTiwgaG90a2V5X3Byb2NfZGlyKTsKLSAgICAgIGRvX2ZhaWwzOgotCXJlbW92ZV9wcm9jX2VudHJ5KEhPVEtFWV9QTF9DT05GSUcsIGhvdGtleV9wcm9jX2Rpcik7Ci0gICAgICBkb19mYWlsMjoKLQlyZW1vdmVfcHJvY19lbnRyeShIT1RLRVlfRVZfQ09ORklHLCBob3RrZXlfcHJvY19kaXIpOwotICAgICAgZG9fZmFpbDE6Ci0JcmVtb3ZlX3Byb2NfZW50cnkoSE9US0VZX1BST0MsIGFjcGlfcm9vdF9kaXIpOwotCXJldHVybiAoLUVOT0RFVik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBob3RrZXlfZXhpdCh2b2lkKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXMsICpuZXh0OwotCi0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cmllcywgbmV4dCwgZ2xvYmFsX2hvdGtleV9saXN0LmVudHJpZXMpIHsKLQkJdW5pb24gYWNwaV9ob3RrZXkgKmtleSA9Ci0JCSAgICBjb250YWluZXJfb2YoZW50cmllcywgdW5pb24gYWNwaV9ob3RrZXksIGVudHJpZXMpOwotCi0JCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7Ci0JCWxpc3RfZGVsKCZrZXktPmxpbmsuZW50cmllcyk7Ci0JCWdsb2JhbF9ob3RrZXlfbGlzdC5jb3VudC0tOwotCQlmcmVlX2hvdGtleV9kZXZpY2Uoa2V5KTsKLQl9Ci0JYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmhvdGtleV9kcml2ZXIpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEhPVEtFWV9FVl9DT05GSUcsIGhvdGtleV9wcm9jX2Rpcik7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoSE9US0VZX1BMX0NPTkZJRywgaG90a2V5X3Byb2NfZGlyKTsKLQlyZW1vdmVfcHJvY19lbnRyeShIT1RLRVlfQUNUSU9OLCBob3RrZXlfcHJvY19kaXIpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEhPVEtFWV9JTkZPLCBob3RrZXlfcHJvY19kaXIpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEhPVEtFWV9QUk9DLCBhY3BpX3Jvb3RfZGlyKTsKLQlyZXR1cm47Ci19Ci0KLW1vZHVsZV9pbml0KGhvdGtleV9pbml0KTsKLW1vZHVsZV9leGl0KGhvdGtleV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9pMmNfZWMuYyBiL2RyaXZlcnMvYWNwaS9pMmNfZWMuYwppbmRleCA3NmVjOGI2Li5hY2FiNGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaTJjX2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2kyY19lYy5jCkBAIC0yNywxOCArMjcsMTcgQEAKICNkZWZpbmUgQUNQSV9FQ19IQ19DT01QT05FTlQJMHgwMDA4MDAwMAogI2RlZmluZSBBQ1BJX0VDX0hDX0NMQVNTCSJlY19oY19zbWJ1cyIKICNkZWZpbmUgQUNQSV9FQ19IQ19ISUQJCSJBQ1BJMDAwMSIKLSNkZWZpbmUgQUNQSV9FQ19IQ19EUklWRVJfTkFNRQkiQUNQSSBFQyBIQyBzbWJ1cyBkcml2ZXIiCiAjZGVmaW5lIEFDUElfRUNfSENfREVWSUNFX05BTUUJIkVDIEhDIHNtYnVzIgogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfRUNfSENfQ09NUE9ORU5UCiAKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfc21idXMiKQorQUNQSV9NT0RVTEVfTkFNRSgiaTJjX2VjIik7CiAKIHN0YXRpYyBpbnQgYWNwaV9lY19oY19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCBhY3BpX2VjX2hjX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfZWNfaGNfZHJpdmVyID0gewotCS5uYW1lID0gQUNQSV9FQ19IQ19EUklWRVJfTkFNRSwKKwkubmFtZSA9ICJpMmNfZWMiLAogCS5jbGFzcyA9IEFDUElfRUNfSENfQ0xBU1MsCiAJLmlkcyA9IEFDUElfRUNfSENfSElELAogCS5vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaWJtX2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9pYm1fYWNwaS5jCmluZGV4IGM2MTQ0Y2EuLjRjYzUzNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9pYm1fYWNwaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9pYm1fYWNwaS5jCkBAIC00OTYsNiArNDk2LDEwIEBACiAJcHJpbnRrKElCTV9JTkZPICIlcyB2JXNcbiIsIElCTV9ERVNDLCBJQk1fVkVSU0lPTik7CiAJcHJpbnRrKElCTV9JTkZPICIlc1xuIiwgSUJNX1VSTCk7CiAKKwlpZiAoaWJtX3RoaW5rcGFkX2VjX2ZvdW5kKQorCQlwcmludGsoSUJNX0lORk8gIlRoaW5rUGFkIEVDIGZpcm13YXJlICVzXG4iLAorCQkgICAgICAgaWJtX3RoaW5rcGFkX2VjX2ZvdW5kKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNjk3LDE0ICsxNzAxLDEyIEBACiAKIHN0YXRpYyBpbnQgYnJpZ2h0bmVzc191cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKLQlyZXR1cm4gYnJpZ2h0bmVzc19zZXQoYmQtPnByb3BzLT5icmlnaHRuZXNzKTsKKwlyZXR1cm4gYnJpZ2h0bmVzc19zZXQoYmQtPnByb3BzLmJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIGlibV9iYWNrbGlnaHRfZGF0YSA9IHsKLSAgICAgICAgLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgaWJtX2JhY2tsaWdodF9kYXRhID0gewogICAgICAgICAuZ2V0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzX2dldCwKICAgICAgICAgLnVwZGF0ZV9zdGF0dXMgID0gYnJpZ2h0bmVzc191cGRhdGVfc3RhdHVzLAotICAgICAgICAubWF4X2JyaWdodG5lc3MgPSA3LAogfTsKIAogc3RhdGljIGludCBicmlnaHRuZXNzX2luaXQodm9pZCkKQEAgLTE3MTYsNiArMTcxOCw4IEBACiAJCXJldHVybiBQVFJfRVJSKGlibV9iYWNrbGlnaHRfZGV2aWNlKTsKIAl9CiAKKyAgICAgICAgaWJtX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gNzsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNjE3LDcgKzI2MjEsNyBAQAogCWlibV9oYW5kbGVfaW5pdCgjb2JqZWN0LCAmb2JqZWN0IyNfaGFuZGxlLCAqb2JqZWN0IyNfcGFyZW50LAlcCiAJCW9iamVjdCMjX3BhdGhzLCBBUlJBWV9TSVpFKG9iamVjdCMjX3BhdGhzKSwgJm9iamVjdCMjX3BhdGgpCiAKLXN0YXRpYyBpbnQgc2V0X2libV9wYXJhbShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQorc3RhdGljIGludCBfX2luaXQgc2V0X2libV9wYXJhbShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCXVuc2lnbmVkIGludCBpOwogCkBAIC0yNjU5LDcgKzI2NjMsOCBAQAogCWZvciAoaSA9IEFSUkFZX1NJWkUoaWJtcykgLSAxOyBpID49IDA7IGktLSkKIAkJaWJtX2V4aXQoJmlibXNbaV0pOwogCi0JcmVtb3ZlX3Byb2NfZW50cnkoSUJNX0RJUiwgYWNwaV9yb290X2Rpcik7CisJaWYgKHByb2NfZGlyKQorCQlyZW1vdmVfcHJvY19lbnRyeShJQk1fRElSLCBhY3BpX3Jvb3RfZGlyKTsKIAogCWlmIChpYm1fdGhpbmtwYWRfZWNfZm91bmQpCiAJCWtmcmVlKGlibV90aGlua3BhZF9lY19mb3VuZCk7CkBAIC0yNjk2LDExICsyNzAxLDYgQEAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWFjcGlfc3BlY2lmaWNfaG90a2V5X2VuYWJsZWQpIHsKLQkJcHJpbnRrKElCTV9FUlIgInVzaW5nIGdlbmVyaWMgaG90a2V5IGRyaXZlclxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCS8qIGVjIGlzIHJlcXVpcmVkIGJlY2F1c2UgbWFueSBvdGhlciBoYW5kbGVzIGFyZSByZWxhdGl2ZSB0byBpdCAqLwogCUlCTV9IQU5ETEVfSU5JVChlYyk7CiAJaWYgKCFlY19oYW5kbGUpIHsKQEAgLTI3MTAsOSArMjcxMCw2IEBACiAKIAkvKiBNb2RlbHMgd2l0aCBuZXdlciBmaXJtd2FyZSByZXBvcnQgdGhlIEVDIGluIERNSSAqLwogCWlibV90aGlua3BhZF9lY19mb3VuZCA9IGNoZWNrX2RtaV9mb3JfZWMoKTsKLQlpZiAoaWJtX3RoaW5rcGFkX2VjX2ZvdW5kKQotCQlwcmludGsoSUJNX0lORk8gIlRoaW5rUGFkIEVDIGZpcm13YXJlICVzXG4iLAotCQkgICAgICAgaWJtX3RoaW5rcGFkX2VjX2ZvdW5kKTsKIAogCS8qIHRoZXNlIGhhbmRsZXMgYXJlIG5vdCByZXF1aXJlZCAqLwogCUlCTV9IQU5ETEVfSU5JVCh2aWQpOwpAQCAtMjc0Miw2ICsyNzM5LDcgQEAKIAlwcm9jX2RpciA9IHByb2NfbWtkaXIoSUJNX0RJUiwgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFwcm9jX2RpcikgewogCQlwcmludGsoSUJNX0VSUiAidW5hYmxlIHRvIGNyZWF0ZSBwcm9jIGRpciAlcyIsIElCTV9ESVIpOworCQlhY3BpX2libV9leGl0KCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlwcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNpbml0LmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zaW5pdC5jCmluZGV4IDMyNmFmOGYuLjMzZGIyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2luaXQuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGFjcGkvYWNuYW1lc3AuaD4KICNpbmNsdWRlIDxhY3BpL2FjZGlzcGF0Lmg+CiAjaW5jbHVkZSA8YWNwaS9hY2ludGVycC5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9OQU1FU1BBQ0UKIEFDUElfTU9EVUxFX05BTUUoIm5zaW5pdCIpCkBAIC01MzQsNyArNTM1LDE1IEBACiAJaW5mby0+cGFyYW1ldGVyX3R5cGUgPSBBQ1BJX1BBUkFNX0FSR1M7CiAJaW5mby0+ZmxhZ3MgPSBBQ1BJX0lHTk9SRV9SRVRVUk5fVkFMVUU7CiAKKwkvKgorCSAqIFNvbWUgaGFyZHdhcmUgcmVsaWVzIG9uIHRoaXMgYmVpbmcgZXhlY3V0ZWQgYXMgYXRvbWljYWxseQorCSAqIGFzIHBvc3NpYmxlICh3aXRob3V0IGFuIE5NSSBiZWluZyByZWNlaXZlZCBpbiB0aGUgbWlkZGxlIG9mCisJICogdGhpcykgLSBzbyBkaXNhYmxlIE5NSXMgYW5kIGluaXRpYWxpemUgdGhlIGRldmljZToKKwkgKi8KKwlhY3BpX25taV9kaXNhYmxlKCk7CiAJc3RhdHVzID0gYWNwaV9uc19ldmFsdWF0ZShpbmZvKTsKKwlhY3BpX25taV9lbmFibGUoKTsKKwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCQl3YWxrX2luZm8tPm51bV9JTkkrKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL251bWEuYyBiL2RyaXZlcnMvYWNwaS9udW1hLmMKaW5kZXggNGE5ZmFmZi4uOGZjZDZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL251bWEuYworKysgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCkBAIC0zMyw3ICszMyw3IEBACiAKICNkZWZpbmUgQUNQSV9OVU1BCTB4ODAwMDAwMDAKICNkZWZpbmUgX0NPTVBPTkVOVAlBQ1BJX05VTUEKLUFDUElfTU9EVUxFX05BTUUoIm51bWEiKQorQUNQSV9NT0RVTEVfTkFNRSgibnVtYSIpOwogCiBzdGF0aWMgbm9kZW1hc2tfdCBub2Rlc19mb3VuZF9tYXAgPSBOT0RFX01BU0tfTk9ORTsKICNkZWZpbmUgUFhNX0lOVkFMCS0xCkBAIC00NSwxMiArNDUsNiBAQAogaW50IF9fY3B1aW5pdGRhdGEgbm9kZV90b19weG1fbWFwW01BWF9OVU1OT0RFU10KIAkJCQk9IHsgWzAgLi4uIE1BWF9OVU1OT0RFUyAtIDFdID0gUFhNX0lOVkFMIH07CiAKLWV4dGVybiBpbnQgX19pbml0IGFjcGlfdGFibGVfcGFyc2VfbWFkdF9mYW1pbHkoY2hhciAqaWQsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG1hZHRfc2l6ZSwKLQkJCQkJICAgICAgIGludCBlbnRyeV9pZCwKLQkJCQkJICAgICAgIGFjcGlfbWFkdF9lbnRyeV9oYW5kbGVyIGhhbmRsZXIsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF4X2VudHJpZXMpOwotCiBpbnQgX19jcHVpbml0IHB4bV90b19ub2RlKGludCBweG0pCiB7CiAJaWYgKHB4bSA8IDApCkBAIC0yMDgsOSArMjAyLDkgQEAKIAogaW50IF9faW5pdAogYWNwaV90YWJsZV9wYXJzZV9zcmF0KGVudW0gYWNwaV9zcmF0X3R5cGUgaWQsCi0JCSAgICAgIGFjcGlfbWFkdF9lbnRyeV9oYW5kbGVyIGhhbmRsZXIsIHVuc2lnbmVkIGludCBtYXhfZW50cmllcykKKwkJICAgICAgYWNwaV90YWJsZV9lbnRyeV9oYW5kbGVyIGhhbmRsZXIsIHVuc2lnbmVkIGludCBtYXhfZW50cmllcykKIHsKLQlyZXR1cm4gYWNwaV90YWJsZV9wYXJzZV9tYWR0X2ZhbWlseShBQ1BJX1NJR19TUkFULAorCXJldHVybiBhY3BpX3RhYmxlX3BhcnNlX2VudHJpZXMoQUNQSV9TSUdfU1JBVCwKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9zcmF0KSwgaWQsCiAJCQkJCSAgICBoYW5kbGVyLCBtYXhfZW50cmllcyk7CiB9CkBAIC0yMjAsOSArMjE0LDcgQEAKIAlpbnQgcmVzdWx0OwogCiAJLyogU1JBVDogU3RhdGljIFJlc291cmNlIEFmZmluaXR5IFRhYmxlICovCi0JcmVzdWx0ID0gYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19TUkFULCBhY3BpX3BhcnNlX3NyYXQpOwotCi0JaWYgKHJlc3VsdCA+IDApIHsKKwlpZiAoIWFjcGlfdGFibGVfcGFyc2UoQUNQSV9TSUdfU1JBVCwgYWNwaV9wYXJzZV9zcmF0KSkgewogCQlyZXN1bHQgPSBhY3BpX3RhYmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX1RZUEVfQ1BVX0FGRklOSVRZLAogCQkJCQkgICAgICAgYWNwaV9wYXJzZV9wcm9jZXNzb3JfYWZmaW5pdHksCiAJCQkJCSAgICAgICBOUl9DUFVTKTsKQEAgLTIzMCw3ICsyMjIsNyBAQAogCX0KIAogCS8qIFNMSVQ6IFN5c3RlbSBMb2NhbGl0eSBJbmZvcm1hdGlvbiBUYWJsZSAqLwotCXJlc3VsdCA9IGFjcGlfdGFibGVfcGFyc2UoQUNQSV9TSUdfU0xJVCwgYWNwaV9wYXJzZV9zbGl0KTsKKwlhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX1NMSVQsIGFjcGlfcGFyc2Vfc2xpdCk7CiAKIAlhY3BpX251bWFfYXJjaF9maXh1cCgpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IDBmNmYzYmMuLjk3MWVjYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX09TX1NFUlZJQ0VTCi1BQ1BJX01PRFVMRV9OQU1FKCJvc2wiKQorQUNQSV9NT0RVTEVfTkFNRSgib3NsIik7CiAjZGVmaW5lIFBSRUZJWAkJIkFDUEk6ICIKIHN0cnVjdCBhY3BpX29zX2RwYyB7CiAJYWNwaV9vc2RfZXhlY19jYWxsYmFjayBmdW5jdGlvbjsKQEAgLTY4LDkgKzY4LDYgQEAKIGV4dGVybiBjaGFyIGxpbmVfYnVmWzgwXTsKICNlbmRpZgkJCQkvKkVOQUJMRV9ERUJVR0dFUiAqLwogCi1pbnQgYWNwaV9zcGVjaWZpY19ob3RrZXlfZW5hYmxlZCA9IFRSVUU7Ci1FWFBPUlRfU1lNQk9MKGFjcGlfc3BlY2lmaWNfaG90a2V5X2VuYWJsZWQpOwotCiBzdGF0aWMgdW5zaWduZWQgaW50IGFjcGlfaXJxX2lycTsKIHN0YXRpYyBhY3BpX29zZF9oYW5kbGVyIGFjcGlfaXJxX2hhbmRsZXI7CiBzdGF0aWMgdm9pZCAqYWNwaV9pcnFfY29udGV4dDsKQEAgLTIwNSw3ICsyMDIsNyBAQAogewogCWlmIChwaHlzID4gVUxPTkdfTUFYKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkNhbm5vdCBtYXAgbWVtb3J5IHRoYXQgaGlnaFxuIik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAl9CiAJaWYgKGFjcGlfZ2JsX3Blcm1hbmVudF9tbWFwKQogCQkvKgpAQCAtODkwLDI2ICs4ODcsNiBAQAogfQogI2VuZGlmCQkJCS8qICBBQ1BJX0ZVVFVSRV9VU0FHRSAgKi8KIAotLyogQXNzdW1lcyBubyB1bnJlYWRhYmxlIGhvbGVzIGluYmV0d2VlbiAqLwotdTggYWNwaV9vc19yZWFkYWJsZSh2b2lkICpwdHIsIGFjcGlfc2l6ZSBsZW4pCi17Ci0jaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQotCWNoYXIgdG1wOwotCXJldHVybiAhX19nZXRfdXNlcih0bXAsIChjaGFyIF9fdXNlciAqKXB0cikKLQkgICAgJiYgIV9fZ2V0X3VzZXIodG1wLCAoY2hhciBfX3VzZXIgKilwdHIgKyBsZW4gLSAxKTsKLSNlbmRpZgotCXJldHVybiAxOwotfQotCi0jaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKLXU4IGFjcGlfb3Nfd3JpdGFibGUodm9pZCAqcHRyLCBhY3BpX3NpemUgbGVuKQotewotCS8qIGNvdWxkIGRvIGR1bW15IHdyaXRlIChyYWN5KSBvciBhIGtlcm5lbCBwYWdlIHRhYmxlIGxvb2t1cC4KLQkgICBUaGUgbGF0ZXIgbWF5IGJlIGRpZmZpY3VsdCBhdCBlYXJseSBib290IHdoZW4ga21hcCBkb2Vzbid0IHdvcmsgeWV0LiAqLwotCXJldHVybiAxOwotfQotI2VuZGlmCi0KIGFjcGlfc3RhdHVzIGFjcGlfb3Nfc2lnbmFsKHUzMiBmdW5jdGlvbiwgdm9pZCAqaW5mbykKIHsKIAlzd2l0Y2ggKGZ1bmN0aW9uKSB7CkBAIC0xMDEyLDE0ICs5ODksNiBAQAogCiBfX3NldHVwKCJhY3BpX3dha2VfZ3Blc19hbHdheXNfb24iLCBhY3BpX3dha2VfZ3Blc19hbHdheXNfb25fc2V0dXApOwogCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX2hvdGtleV9zZXR1cChjaGFyICpzdHIpCi17Ci0JYWNwaV9zcGVjaWZpY19ob3RrZXlfZW5hYmxlZCA9IEZBTFNFOwotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJhY3BpX2dlbmVyaWNfaG90a2V5IiwgYWNwaV9ob3RrZXlfc2V0dXApOwotCiAvKgogICogbWF4X2NzdGF0ZSBpcyBkZWZpbmVkIGluIHRoZSBiYXNlIGtlcm5lbCBzbyBtb2R1bGVzIGNhbgogICogY2hhbmdlIGl0IHcvbyBkZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9iaW5kLmMgYi9kcml2ZXJzL2FjcGkvcGNpX2JpbmQuYwppbmRleCA1NWY1N2E2Li4wMjg5NjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX2JpbmQuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX2JpbmQuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVAkJQUNQSV9QQ0lfQ09NUE9ORU5UCi1BQ1BJX01PRFVMRV9OQU1FKCJwY2lfYmluZCIpCitBQ1BJX01PRFVMRV9OQU1FKCJwY2lfYmluZCIpOwogCiBzdHJ1Y3QgYWNwaV9wY2lfZGF0YSB7CiAJc3RydWN0IGFjcGlfcGNpX2lkIGlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9pcnEuYyBiL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKaW5kZXggZmU3ZDAwNy4uZGQzMTg2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9pcnEuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1BDSV9DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoInBjaV9pcnEiKQorQUNQSV9NT0RVTEVfTkFNRSgicGNpX2lycSIpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfcHJ0X2xpc3QgYWNwaV9wcnQ7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFjcGlfcHJ0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMgYi9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYwppbmRleCAwZjY4M2M4Li5hY2M1OTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYwpAQCAtNDQsMTAgKzQ0LDkgQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUENJX0NPTVBPTkVOVAotQUNQSV9NT0RVTEVfTkFNRSgicGNpX2xpbmsiKQorQUNQSV9NT0RVTEVfTkFNRSgicGNpX2xpbmsiKTsKICNkZWZpbmUgQUNQSV9QQ0lfTElOS19DTEFTUwkJInBjaV9pcnFfcm91dGluZyIKICNkZWZpbmUgQUNQSV9QQ0lfTElOS19ISUQJCSJQTlAwQzBGIgotI2RlZmluZSBBQ1BJX1BDSV9MSU5LX0RSSVZFUl9OQU1FCSJBQ1BJIFBDSSBJbnRlcnJ1cHQgTGluayBEcml2ZXIiCiAjZGVmaW5lIEFDUElfUENJX0xJTktfREVWSUNFX05BTUUJIlBDSSBJbnRlcnJ1cHQgTGluayIKICNkZWZpbmUgQUNQSV9QQ0lfTElOS19GSUxFX0lORk8JCSJpbmZvIgogI2RlZmluZSBBQ1BJX1BDSV9MSU5LX0ZJTEVfU1RBVFVTCSJzdGF0ZSIKQEAgLTU2LDcgKzU1LDcgQEAKIHN0YXRpYyBpbnQgYWNwaV9wY2lfbGlua19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX3BjaV9saW5rX2RyaXZlciA9IHsKLQkubmFtZSA9IEFDUElfUENJX0xJTktfRFJJVkVSX05BTUUsCisJLm5hbWUgPSAicGNpX2xpbmsiLAogCS5jbGFzcyA9IEFDUElfUENJX0xJTktfQ0xBU1MsCiAJLmlkcyA9IEFDUElfUENJX0xJTktfSElELAogCS5vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCmluZGV4IDRlY2Y3MDEuLmFkNDE0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCkBAIC0zNiwxNyArMzYsMTYgQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUENJX0NPTVBPTkVOVAotQUNQSV9NT0RVTEVfTkFNRSgicGNpX3Jvb3QiKQorQUNQSV9NT0RVTEVfTkFNRSgicGNpX3Jvb3QiKTsKICNkZWZpbmUgQUNQSV9QQ0lfUk9PVF9DTEFTUwkJInBjaV9icmlkZ2UiCiAjZGVmaW5lIEFDUElfUENJX1JPT1RfSElECQkiUE5QMEEwMyIKLSNkZWZpbmUgQUNQSV9QQ0lfUk9PVF9EUklWRVJfTkFNRQkiQUNQSSBQQ0kgUm9vdCBCcmlkZ2UgRHJpdmVyIgogI2RlZmluZSBBQ1BJX1BDSV9ST09UX0RFVklDRV9OQU1FCSJQQ0kgUm9vdCBCcmlkZ2UiCiBzdGF0aWMgaW50IGFjcGlfcGNpX3Jvb3RfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyBpbnQgYWNwaV9wY2lfcm9vdF9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKIHN0YXRpYyBpbnQgYWNwaV9wY2lfcm9vdF9zdGFydChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9wY2lfcm9vdF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBBQ1BJX1BDSV9ST09UX0RSSVZFUl9OQU1FLAorCS5uYW1lID0gInBjaV9yb290IiwKIAkuY2xhc3MgPSBBQ1BJX1BDSV9ST09UX0NMQVNTLAogCS5pZHMgPSBBQ1BJX1BDSV9ST09UX0hJRCwKIAkub3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwppbmRleCAwYmE3ZGZiLi4xZWYzMzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcG93ZXIuYworKysgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwpAQCAtNDUsMTAgKzQ1LDkgQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUE9XRVJfQ09NUE9ORU5UCi1BQ1BJX01PRFVMRV9OQU1FKCJhY3BpX3Bvd2VyIikKK0FDUElfTU9EVUxFX05BTUUoInBvd2VyIik7CiAjZGVmaW5lIEFDUElfUE9XRVJfQ09NUE9ORU5UCQkweDAwODAwMDAwCiAjZGVmaW5lIEFDUElfUE9XRVJfQ0xBU1MJCSJwb3dlcl9yZXNvdXJjZSIKLSNkZWZpbmUgQUNQSV9QT1dFUl9EUklWRVJfTkFNRQkJIkFDUEkgUG93ZXIgUmVzb3VyY2UgRHJpdmVyIgogI2RlZmluZSBBQ1BJX1BPV0VSX0RFVklDRV9OQU1FCQkiUG93ZXIgUmVzb3VyY2UiCiAjZGVmaW5lIEFDUElfUE9XRVJfRklMRV9JTkZPCQkiaW5mbyIKICNkZWZpbmUgQUNQSV9QT1dFUl9GSUxFX1NUQVRVUwkJInN0YXRlIgpAQCAtNTcsMjUgKzU2LDMzIEBACiAjZGVmaW5lIEFDUElfUE9XRVJfUkVTT1VSQ0VfU1RBVEVfVU5LTk9XTiAweEZGCiBzdGF0aWMgaW50IGFjcGlfcG93ZXJfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyBpbnQgYWNwaV9wb3dlcl9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKK3N0YXRpYyBpbnQgYWNwaV9wb3dlcl9yZXN1bWUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCBhY3BpX3Bvd2VyX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfcG93ZXJfZHJpdmVyID0gewotCS5uYW1lID0gQUNQSV9QT1dFUl9EUklWRVJfTkFNRSwKKwkubmFtZSA9ICJwb3dlciIsCiAJLmNsYXNzID0gQUNQSV9QT1dFUl9DTEFTUywKIAkuaWRzID0gQUNQSV9QT1dFUl9ISUQsCiAJLm9wcyA9IHsKIAkJLmFkZCA9IGFjcGlfcG93ZXJfYWRkLAogCQkucmVtb3ZlID0gYWNwaV9wb3dlcl9yZW1vdmUsCisJCS5yZXN1bWUgPSBhY3BpX3Bvd2VyX3Jlc3VtZSwKIAkJfSwKIH07CiAKK3N0cnVjdCBhY3BpX3Bvd2VyX3JlZmVyZW5jZSB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOworfTsKKwogc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgewogCXN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZTsKIAlhY3BpX2J1c19pZCBuYW1lOwogCXUzMiBzeXN0ZW1fbGV2ZWw7CiAJdTMyIG9yZGVyOwogCWludCBzdGF0ZTsKLQlpbnQgcmVmZXJlbmNlczsKKwlzdHJ1Y3QgbXV0ZXggcmVzb3VyY2VfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlZmVyZW5jZTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGFjcGlfcG93ZXJfcmVzb3VyY2VfbGlzdDsKQEAgLTE3MSwyMiArMTc4LDQ3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBhY3BpX3Bvd2VyX29uKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3N0YXRpYyBpbnQgYWNwaV9wb3dlcl9vbihhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KQogewogCWludCByZXN1bHQgPSAwOworCWludCBmb3VuZCA9IDA7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCXN0cnVjdCBhY3BpX3Bvd2VyX3Jlc291cmNlICpyZXNvdXJjZSA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CisJc3RydWN0IGFjcGlfcG93ZXJfcmVmZXJlbmNlICpyZWY7CiAKIAogCXJlc3VsdCA9IGFjcGlfcG93ZXJfZ2V0X2NvbnRleHQoaGFuZGxlLCAmcmVzb3VyY2UpOwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKLQlyZXNvdXJjZS0+cmVmZXJlbmNlcysrOworCW11dGV4X2xvY2soJnJlc291cmNlLT5yZXNvdXJjZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJnJlc291cmNlLT5yZWZlcmVuY2UpIHsKKwkJcmVmID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBhY3BpX3Bvd2VyX3JlZmVyZW5jZSwgbm9kZSk7CisJCWlmIChkZXYtPmhhbmRsZSA9PSByZWYtPmRldmljZS0+aGFuZGxlKSB7CisJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJEZXZpY2UgWyVzXSBhbHJlYWR5IHJlZmVyZW5jZWQgYnkgcmVzb3VyY2UgWyVzXVxuIiwKKwkJCQkgIGRldi0+cG5wLmJ1c19pZCwgcmVzb3VyY2UtPm5hbWUpKTsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQogCi0JaWYgKChyZXNvdXJjZS0+cmVmZXJlbmNlcyA+IDEpCi0JICAgIHx8IChyZXNvdXJjZS0+c3RhdGUgPT0gQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PTikpIHsKKwlpZiAoIWZvdW5kKSB7CisJCXJlZiA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgYWNwaV9wb3dlcl9yZWZlcmVuY2UpLAorCQkgICAgaXJxc19kaXNhYmxlZCgpID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpOworCQlpZiAoIXJlZikgeworCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAia21hbGxvYygpIGZhaWxlZFxuIikpOworCQkJbXV0ZXhfdW5sb2NrKCZyZXNvdXJjZS0+cmVzb3VyY2VfbG9jayk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlsaXN0X2FkZF90YWlsKCZyZWYtPm5vZGUsICZyZXNvdXJjZS0+cmVmZXJlbmNlKTsKKwkJcmVmLT5kZXZpY2UgPSBkZXY7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkRldmljZSBbJXNdIGFkZGVkIHRvIHJlc291cmNlIFslc10gcmVmZXJlbmNlc1xuIiwKKwkJCSAgZGV2LT5wbnAuYnVzX2lkLCByZXNvdXJjZS0+bmFtZSkpOworCX0KKwltdXRleF91bmxvY2soJnJlc291cmNlLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChyZXNvdXJjZS0+c3RhdGUgPT0gQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PTikgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJSZXNvdXJjZSBbJXNdIGFscmVhZHkgb25cbiIsCiAJCQkJICByZXNvdXJjZS0+bmFtZSkpOwogCQlyZXR1cm4gMDsKQEAgLTIwMywzOCArMjM1LDQ5IEBACiAJCXJldHVybiAtRU5PRVhFQzsKIAogCS8qIFVwZGF0ZSB0aGUgcG93ZXIgcmVzb3VyY2UncyBfZGV2aWNlXyBwb3dlciBzdGF0ZSAqLwotCWRldmljZSA9IHJlc291cmNlLT5kZXZpY2U7CiAJcmVzb3VyY2UtPmRldmljZS0+cG93ZXIuc3RhdGUgPSBBQ1BJX1NUQVRFX0QwOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiUmVzb3VyY2UgWyVzXSB0dXJuZWQgb25cbiIsCiAJCQkgIHJlc291cmNlLT5uYW1lKSk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhY3BpX3Bvd2VyX29mZl9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKQorc3RhdGljIGludCBhY3BpX3Bvd2VyX29mZl9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9wb3dlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OworCXN0cnVjdCBhY3BpX3Bvd2VyX3JlZmVyZW5jZSAqcmVmOworCiAKIAlyZXN1bHQgPSBhY3BpX3Bvd2VyX2dldF9jb250ZXh0KGhhbmRsZSwgJnJlc291cmNlKTsKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwogCi0JaWYgKHJlc291cmNlLT5yZWZlcmVuY2VzKQotCQlyZXNvdXJjZS0+cmVmZXJlbmNlcy0tOworCW11dGV4X2xvY2soJnJlc291cmNlLT5yZXNvdXJjZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJnJlc291cmNlLT5yZWZlcmVuY2UpIHsKKwkJcmVmID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBhY3BpX3Bvd2VyX3JlZmVyZW5jZSwgbm9kZSk7CisJCWlmIChkZXYtPmhhbmRsZSA9PSByZWYtPmRldmljZS0+aGFuZGxlKSB7CisJCQlsaXN0X2RlbCgmcmVmLT5ub2RlKTsKKwkJCWtmcmVlKHJlZik7CisJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJEZXZpY2UgWyVzXSByZW1vdmVkIGZyb20gcmVzb3VyY2UgWyVzXSByZWZlcmVuY2VzXG4iLAorCQkJICAgIGRldi0+cG5wLmJ1c19pZCwgcmVzb3VyY2UtPm5hbWUpKTsKKwkJCWJyZWFrOworCQl9CisJfQogCi0JaWYgKHJlc291cmNlLT5yZWZlcmVuY2VzKSB7Ci0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCQkgICJSZXNvdXJjZSBbJXNdIGlzIHN0aWxsIGluIHVzZSwgZGVyZWZlcmVuY2luZ1xuIiwKLQkJCQkgIHJlc291cmNlLT5kZXZpY2UtPnBucC5idXNfaWQpKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJlc291cmNlLT5yZWZlcmVuY2UpKSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkNhbm5vdCB0dXJuIHJlc291cmNlIFslc10gb2ZmIC0gcmVzb3VyY2UgaXMgaW4gdXNlXG4iLAorCQkgICAgcmVzb3VyY2UtPm5hbWUpKTsKKwkJbXV0ZXhfdW5sb2NrKCZyZXNvdXJjZS0+cmVzb3VyY2VfbG9jayk7CiAJCXJldHVybiAwOwogCX0KKwltdXRleF91bmxvY2soJnJlc291cmNlLT5yZXNvdXJjZV9sb2NrKTsKIAogCWlmIChyZXNvdXJjZS0+c3RhdGUgPT0gQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PRkYpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiUmVzb3VyY2UgWyVzXSBhbHJlYWR5IG9mZlxuIiwKLQkJCQkgIHJlc291cmNlLT5kZXZpY2UtPnBucC5idXNfaWQpKTsKKwkJCQkgIHJlc291cmNlLT5uYW1lKSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjc2LDcgKzMxOSw3IEBACiAJYXJnLmludGVnZXIudmFsdWUgPSAxOwogCS8qIE9wZW4gcG93ZXIgcmVzb3VyY2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT53YWtldXAucmVzb3VyY2VzLmNvdW50OyBpKyspIHsKLQkJcmV0ID0gYWNwaV9wb3dlcl9vbihkZXYtPndha2V1cC5yZXNvdXJjZXMuaGFuZGxlc1tpXSk7CisJCXJldCA9IGFjcGlfcG93ZXJfb24oZGV2LT53YWtldXAucmVzb3VyY2VzLmhhbmRsZXNbaV0sIGRldik7CiAJCWlmIChyZXQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlRyYW5zaXRpb24gcG93ZXIgc3RhdGVcbiIpOwogCQkJZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgPSAwOwpAQCAtMzIzLDcgKzM2Niw3IEBACiAKIAkvKiBDbG9zZSBwb3dlciByZXNvdXJjZSAqLwogCWZvciAoaSA9IDA7IGkgPCBkZXYtPndha2V1cC5yZXNvdXJjZXMuY291bnQ7IGkrKykgewotCQlyZXQgPSBhY3BpX3Bvd2VyX29mZl9kZXZpY2UoZGV2LT53YWtldXAucmVzb3VyY2VzLmhhbmRsZXNbaV0pOworCQlyZXQgPSBhY3BpX3Bvd2VyX29mZl9kZXZpY2UoZGV2LT53YWtldXAucmVzb3VyY2VzLmhhbmRsZXNbaV0sIGRldik7CiAJCWlmIChyZXQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlRyYW5zaXRpb24gcG93ZXIgc3RhdGVcbiIpOwogCQkJZGV2LT53YWtldXAuZmxhZ3MudmFsaWQgPSAwOwpAQCAtNDA3LDE2ICs0NTAsMjAgQEAKIAkgKiAoZS5nLiBzbyB0aGUgZGV2aWNlIGRvZXNuJ3QgbG9zZSBwb3dlciB3aGlsZSB0cmFuc2l0aW9uaW5nKS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdGwtPmNvdW50OyBpKyspIHsKLQkJcmVzdWx0ID0gYWNwaV9wb3dlcl9vbih0bC0+aGFuZGxlc1tpXSk7CisJCXJlc3VsdCA9IGFjcGlfcG93ZXJfb24odGwtPmhhbmRsZXNbaV0sIGRldmljZSk7CiAJCWlmIChyZXN1bHQpCiAJCQlnb3RvIGVuZDsKIAl9CiAKKwlpZiAoZGV2aWNlLT5wb3dlci5zdGF0ZSA9PSBzdGF0ZSkgeworCQlnb3RvIGVuZDsKKwl9CisKIAkvKgogCSAqIFRoZW4gd2UgZGVyZWZlcmVuY2UgYWxsIHBvd2VyIHJlc291cmNlcyB1c2VkIGluIHRoZSBjdXJyZW50IGxpc3QuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGNsLT5jb3VudDsgaSsrKSB7Ci0JCXJlc3VsdCA9IGFjcGlfcG93ZXJfb2ZmX2RldmljZShjbC0+aGFuZGxlc1tpXSk7CisJCXJlc3VsdCA9IGFjcGlfcG93ZXJfb2ZmX2RldmljZShjbC0+aGFuZGxlc1tpXSwgZGV2aWNlKTsKIAkJaWYgKHJlc3VsdCkKIAkJCWdvdG8gZW5kOwogCX0KQEAgLTQzOSw3ICs0ODYsMTEgQEAKIAogc3RhdGljIGludCBhY3BpX3Bvd2VyX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CisJaW50IGNvdW50ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV9wb3dlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OworCXN0cnVjdCBhY3BpX3Bvd2VyX3JlZmVyZW5jZSAqcmVmOwogCiAKIAlyZXNvdXJjZSA9IHNlcS0+cHJpdmF0ZTsKQEAgLTQ0Nyw2ICs0OTgsMTAgQEAKIAlpZiAoIXJlc291cmNlKQogCQlnb3RvIGVuZDsKIAorCXJlc3VsdCA9IGFjcGlfcG93ZXJfZ2V0X3N0YXRlKHJlc291cmNlKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGVuZDsKKwogCXNlcV9wdXRzKHNlcSwgInN0YXRlOiAgICAgICAgICAgICAgICAgICAiKTsKIAlzd2l0Y2ggKHJlc291cmNlLT5zdGF0ZSkgewogCWNhc2UgQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PTjoKQEAgLTQ2MCwxMSArNTE1LDE4IEBACiAJCWJyZWFrOwogCX0KIAorCW11dGV4X2xvY2soJnJlc291cmNlLT5yZXNvdXJjZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJnJlc291cmNlLT5yZWZlcmVuY2UpIHsKKwkJcmVmID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBhY3BpX3Bvd2VyX3JlZmVyZW5jZSwgbm9kZSk7CisJCWNvdW50Kys7CisJfQorCW11dGV4X3VubG9jaygmcmVzb3VyY2UtPnJlc291cmNlX2xvY2spOworCiAJc2VxX3ByaW50ZihzZXEsICJzeXN0ZW0gbGV2ZWw6ICAgICAgICAgICAgUyVkXG4iCiAJCSAgICJvcmRlcjogICAgICAgICAgICAgICAgICAgJWRcbiIKIAkJICAgInJlZmVyZW5jZSBjb3VudDogICAgICAgICAlZFxuIiwKIAkJICAgcmVzb3VyY2UtPnN5c3RlbV9sZXZlbCwKLQkJICAgcmVzb3VyY2UtPm9yZGVyLCByZXNvdXJjZS0+cmVmZXJlbmNlcyk7CisJCSAgIHJlc291cmNlLT5vcmRlciwgY291bnQpOwogCiAgICAgICBlbmQ6CiAJcmV0dXJuIDA7CkBAIC01MzcsNiArNTk5LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXNvdXJjZS0+ZGV2aWNlID0gZGV2aWNlOworCW11dGV4X2luaXQoJnJlc291cmNlLT5yZXNvdXJjZV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcmVzb3VyY2UtPnJlZmVyZW5jZSk7CiAJc3RyY3B5KHJlc291cmNlLT5uYW1lLCBkZXZpY2UtPnBucC5idXNfaWQpOwogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfUE9XRVJfREVWSUNFX05BTUUpOwogCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1BPV0VSX0NMQVNTKTsKQEAgLTU4NCw2ICs2NDgsNyBAQAogc3RhdGljIGludCBhY3BpX3Bvd2VyX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAogCiAJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKQEAgLTU5MywxMSArNjU4LDU0IEBACiAKIAlhY3BpX3Bvd2VyX3JlbW92ZV9mcyhkZXZpY2UpOwogCisJbXV0ZXhfbG9jaygmcmVzb3VyY2UtPnJlc291cmNlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmcmVzb3VyY2UtPnJlZmVyZW5jZSkgeworCQlzdHJ1Y3QgYWNwaV9wb3dlcl9yZWZlcmVuY2UgKnJlZiA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYWNwaV9wb3dlcl9yZWZlcmVuY2UsIG5vZGUpOworCQlsaXN0X2RlbCgmcmVmLT5ub2RlKTsKKwkJa2ZyZWUocmVmKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZyZXNvdXJjZS0+cmVzb3VyY2VfbG9jayk7CisKIAlrZnJlZShyZXNvdXJjZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhY3BpX3Bvd2VyX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgYWNwaV9wb3dlcl9yZXNvdXJjZSAqcmVzb3VyY2UgPSBOVUxMOworCXN0cnVjdCBhY3BpX3Bvd2VyX3JlZmVyZW5jZSAqcmVmOworCisJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXNvdXJjZSA9IChzdHJ1Y3QgYWNwaV9wb3dlcl9yZXNvdXJjZSAqKWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKKworCXJlc3VsdCA9IGFjcGlfcG93ZXJfZ2V0X3N0YXRlKHJlc291cmNlKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJbXV0ZXhfbG9jaygmcmVzb3VyY2UtPnJlc291cmNlX2xvY2spOworCWlmICgocmVzb3VyY2UtPnN0YXRlID09IEFDUElfUE9XRVJfUkVTT1VSQ0VfU1RBVEVfT04pICYmCisJICAgIGxpc3RfZW1wdHkoJnJlc291cmNlLT5yZWZlcmVuY2UpKSB7CisJCW11dGV4X3VubG9jaygmcmVzb3VyY2UtPnJlc291cmNlX2xvY2spOworCQlyZXN1bHQgPSBhY3BpX3Bvd2VyX29mZl9kZXZpY2UoZGV2aWNlLT5oYW5kbGUsIE5VTEwpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWlmICgocmVzb3VyY2UtPnN0YXRlID09IEFDUElfUE9XRVJfUkVTT1VSQ0VfU1RBVEVfT0ZGKSAmJgorCSAgICAhbGlzdF9lbXB0eSgmcmVzb3VyY2UtPnJlZmVyZW5jZSkpIHsKKwkJcmVmID0gY29udGFpbmVyX29mKHJlc291cmNlLT5yZWZlcmVuY2UubmV4dCwgc3RydWN0IGFjcGlfcG93ZXJfcmVmZXJlbmNlLCBub2RlKTsKKwkJbXV0ZXhfdW5sb2NrKCZyZXNvdXJjZS0+cmVzb3VyY2VfbG9jayk7CisJCXJlc3VsdCA9IGFjcGlfcG93ZXJfb24oZGV2aWNlLT5oYW5kbGUsIHJlZi0+ZGV2aWNlKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwltdXRleF91bmxvY2soJnJlc291cmNlLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgYWNwaV9wb3dlcl9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IDAwNzliYzUuLjk5ZDE1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC02MCw3ICs2MCw2IEBACiAKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQ09NUE9ORU5UCTB4MDEwMDAwMDAKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQ0xBU1MJCSJwcm9jZXNzb3IiCi0jZGVmaW5lIEFDUElfUFJPQ0VTU09SX0RSSVZFUl9OQU1FCSJBQ1BJIFByb2Nlc3NvciBEcml2ZXIiCiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0RFVklDRV9OQU1FCSJQcm9jZXNzb3IiCiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0ZJTEVfSU5GTwkiaW5mbyIKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfRklMRV9USFJPVFRMSU5HCSJ0aHJvdHRsaW5nIgpAQCAtNzQsMTAgKzczLDEwIEBACiAjZGVmaW5lIEFDUElfU1RBX1BSRVNFTlQgMHgwMDAwMDAwMQogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUFJPQ0VTU09SX0NPTVBPTkVOVAotQUNQSV9NT0RVTEVfTkFNRSgiYWNwaV9wcm9jZXNzb3IiKQorQUNQSV9NT0RVTEVfTkFNRSgicHJvY2Vzc29yX2NvcmUiKTsKIAotICAgIE1PRFVMRV9BVVRIT1IoIlBhdWwgRGllZmVuYmF1Z2giKTsKLU1PRFVMRV9ERVNDUklQVElPTihBQ1BJX1BST0NFU1NPUl9EUklWRVJfTkFNRSk7CitNT0RVTEVfQVVUSE9SKCJQYXVsIERpZWZlbmJhdWdoIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFDUEkgUHJvY2Vzc29yIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CkBAIC04OSw3ICs4OCw3IEBACiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2hhbmRsZV9lamVjdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKTsKIAogc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX3Byb2Nlc3Nvcl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBBQ1BJX1BST0NFU1NPUl9EUklWRVJfTkFNRSwKKwkubmFtZSA9ICJwcm9jZXNzb3IiLAogCS5jbGFzcyA9IEFDUElfUFJPQ0VTU09SX0NMQVNTLAogCS5pZHMgPSBBQ1BJX1BST0NFU1NPUl9ISUQsCiAJLm9wcyA9IHsKQEAgLTQwNCw3ICs0MDMsNyBAQAogCWlmIChsc2FwaWMtPmxhcGljX2ZsYWdzICYgQUNQSV9NQURUX0VOQUJMRUQpIHsKIAkJLyogRmlyc3QgY2hlY2sgYWdhaW5zdCBpZCAqLwogCQlpZiAobHNhcGljLT5wcm9jZXNzb3JfaWQgPT0gYWNwaV9pZCkgewotCQkJKmFwaWNfaWQgPSBsc2FwaWMtPmlkOworCQkJKmFwaWNfaWQgPSAobHNhcGljLT5pZCA8PCA4KSB8IGxzYXBpYy0+ZWlkOwogCQkJcmV0dXJuIDE7CiAJCS8qIENoZWNrIGFnYWluc3Qgb3B0aW9uYWwgdWlkICovCiAJCX0gZWxzZSBpZiAoZW50cnktPmxlbmd0aCA+PSAxNiAmJgpAQCAtMTAwNSw3ICsxMDA0LDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKEFDUElfRkFJTFVSRShhY3BpX2dldF90YWJsZShBQ1BJX1NJR19NQURULCAwLAogCQkJCShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJm1hZHQpKSkKLQkJbWFkdCA9IDA7CisJCW1hZHQgPSBOVUxMOwogI2VuZGlmCiAKIAlhY3BpX3Byb2Nlc3Nvcl9kaXIgPSBwcm9jX21rZGlyKEFDUElfUFJPQ0VTU09SX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggNmM2NzUxYi4uNjA3NzMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTM5LDYgKzM5LDI1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBuZWVkX3Jlc2NoZWQoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3kuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisKKy8qCisgKiBJbmNsdWRlIHRoZSBhcGljIGRlZmluaXRpb25zIGZvciB4ODYgdG8gaGF2ZSB0aGUgQVBJQyB0aW1lciByZWxhdGVkIGRlZmluZXMKKyAqIGF2YWlsYWJsZSBhbHNvIGZvciBVUCAob24gU01QIGl0IGdldHMgbWFnaWNhbGx5IGluY2x1ZGVkIHZpYSBsaW51eC9zbXAuaCkuCisgKiBhc20vYWNwaS5oIGlzIG5vdCBhbiBvcHRpb24sIGFzIGl0IHdvdWxkIHJlcXVpcmUgbW9yZSBpbmNsdWRlIG1hZ2ljLiBBbHNvCisgKiBjcmVhdGluZyBhbiBlbXB0eSBhc20taWE2NC9hcGljLmggd291bGQganVzdCB0cmFkZSBwZXN0IHZzLiBjaG9sZXJhLgorICovCisjaWZkZWYgQ09ORklHX1g4NgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjZW5kaWYKKworLyoKKyAqIEluY2x1ZGUgdGhlIGFwaWMgZGVmaW5pdGlvbnMgZm9yIHg4NiB0byBoYXZlIHRoZSBBUElDIHRpbWVyIHJlbGF0ZWQgZGVmaW5lcworICogYXZhaWxhYmxlIGFsc28gZm9yIFVQIChvbiBTTVAgaXQgZ2V0cyBtYWdpY2FsbHkgaW5jbHVkZWQgdmlhIGxpbnV4L3NtcC5oKS4KKyAqLworI2lmZGVmIENPTkZJR19YODYKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNDgsOSArNjcsOCBAQAogCiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0NPTVBPTkVOVCAgICAgICAgMHgwMTAwMDAwMAogI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9DTEFTUyAgICAgICAgICAgICJwcm9jZXNzb3IiCi0jZGVmaW5lIEFDUElfUFJPQ0VTU09SX0RSSVZFUl9OQU1FICAgICAgIkFDUEkgUHJvY2Vzc29yIERyaXZlciIKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICAgICAgQUNQSV9QUk9DRVNTT1JfQ09NUE9ORU5UCi1BQ1BJX01PRFVMRV9OQU1FKCJhY3BpX3Byb2Nlc3NvciIpCitBQ1BJX01PRFVMRV9OQU1FKCJwcm9jZXNzb3JfaWRsZSIpOwogI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9GSUxFX1BPV0VSCSJwb3dlciIKICNkZWZpbmUgVVNfVE9fUE1fVElNRVJfVElDS1ModCkJCSgodCAqIChQTV9USU1FUl9GUkVRVUVOQ1kvMTAwMCkpIC8gMTAwMCkKICNkZWZpbmUgQzJfT1ZFUkhFQUQJCQk0CS8qIDF1cyAoMy41NzkgdGlja3MgcGVyIHVzKSAqLwpAQCAtMjM4LDYgKzI1Niw4MSBAQAogCX0KIH0KIAorI2lmZGVmIEFSQ0hfQVBJQ1RJTUVSX1NUT1BTX09OX0MzCisKKy8qCisgKiBTb21lIEJJT1MgaW1wbGVtZW50YXRpb25zIHN3aXRjaCB0byBDMyBpbiB0aGUgcHVibGlzaGVkIEMyIHN0YXRlLgorICogVGhpcyBzZWVtcyB0byBiZSBhIGNvbW1vbiBwcm9ibGVtIG9uIEFNRCBib3hlbiwgYnV0IG90aGVyIHZlbmRvcnMKKyAqIGFyZSBhZmZlY3RlZCB0b28uIFdlIHBpY2sgdGhlIG1vc3QgY29uc2VydmF0aXZlIGFwcHJvYWNoOiB3ZSBhc3N1bWUKKyAqIHRoYXQgdGhlIGxvY2FsIEFQSUMgc3RvcHMgaW4gYm90aCBDMiBhbmQgQzMuCisgKi8KK3N0YXRpYyB2b2lkIGFjcGlfdGltZXJfY2hlY2tfc3RhdGUoaW50IHN0YXRlLCBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAorCQkJCSAgIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3gpCit7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3Bvd2VyICpwd3IgPSAmcHItPnBvd2VyOworCisJLyoKKwkgKiBDaGVjaywgaWYgb25lIG9mIHRoZSBwcmV2aW91cyBzdGF0ZXMgYWxyZWFkeSBtYXJrZWQgdGhlIGxhcGljCisJICogdW5zdGFibGUKKwkgKi8KKwlpZiAocHdyLT50aW1lcl9icm9hZGNhc3Rfb25fc3RhdGUgPCBzdGF0ZSkKKwkJcmV0dXJuOworCisJaWYgKGN4LT50eXBlID49IEFDUElfU1RBVEVfQzIpCisJCXByLT5wb3dlci50aW1lcl9icm9hZGNhc3Rfb25fc3RhdGUgPSBzdGF0ZTsKK30KKworc3RhdGljIHZvaWQgYWNwaV9wcm9wYWdhdGVfdGltZXJfYnJvYWRjYXN0KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCit7CisjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMKKwl1bnNpZ25lZCBsb25nIHJlYXNvbjsKKworCXJlYXNvbiA9IHByLT5wb3dlci50aW1lcl9icm9hZGNhc3Rfb25fc3RhdGUgPCBJTlRfTUFYID8KKwkJQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfT04gOiBDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9PRkY7CisKKwljbG9ja2V2ZW50c19ub3RpZnkocmVhc29uLCAmcHItPmlkKTsKKyNlbHNlCisJY3B1bWFza190IG1hc2sgPSBjcHVtYXNrX29mX2NwdShwci0+aWQpOworCisJaWYgKHByLT5wb3dlci50aW1lcl9icm9hZGNhc3Rfb25fc3RhdGUgPCBJTlRfTUFYKQorCQlvbl9lYWNoX2NwdShzd2l0Y2hfQVBJQ190aW1lcl90b19pcGksICZtYXNrLCAxLCAxKTsKKwllbHNlCisJCW9uX2VhY2hfY3B1KHN3aXRjaF9pcGlfdG9fQVBJQ190aW1lciwgJm1hc2ssIDEsIDEpOworI2VuZGlmCit9CisKKy8qIFBvd2VyKEMpIFN0YXRlIHRpbWVyIGJyb2FkY2FzdCBjb250cm9sICovCitzdGF0aWMgdm9pZCBhY3BpX3N0YXRlX3RpbWVyX2Jyb2FkY2FzdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAorCQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4LAorCQkJCSAgICAgICBpbnQgYnJvYWRjYXN0KQoreworI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCisKKwlpbnQgc3RhdGUgPSBjeCAtIHByLT5wb3dlci5zdGF0ZXM7CisKKwlpZiAoc3RhdGUgPj0gcHItPnBvd2VyLnRpbWVyX2Jyb2FkY2FzdF9vbl9zdGF0ZSkgeworCQl1bnNpZ25lZCBsb25nIHJlYXNvbjsKKworCQlyZWFzb24gPSBicm9hZGNhc3QgPyAgQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRU5URVIgOgorCQkJQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRVhJVDsKKwkJY2xvY2tldmVudHNfbm90aWZ5KHJlYXNvbiwgJnByLT5pZCk7CisJfQorI2VuZGlmCit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIGFjcGlfdGltZXJfY2hlY2tfc3RhdGUoaW50IHN0YXRlLCBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAorCQkJCSAgIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3N0YXRlKSB7IH0KK3N0YXRpYyB2b2lkIGFjcGlfcHJvcGFnYXRlX3RpbWVyX2Jyb2FkY2FzdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKSB7IH0KK3N0YXRpYyB2b2lkIGFjcGlfc3RhdGVfdGltZXJfYnJvYWRjYXN0KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCisJCQkJICAgICAgIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3gsCisJCQkJICAgICAgIGludCBicm9hZGNhc3QpCit7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBhY3BpX3Byb2Nlc3Nvcl9pZGxlKHZvaWQpCiB7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IE5VTEw7CkBAIC0zODIsNiArNDc1LDcgQEAKIAkJLyogR2V0IHN0YXJ0IHRpbWUgKHRpY2tzKSAqLwogCQl0MSA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKIAkJLyogSW52b2tlIEMyICovCisJCWFjcGlfc3RhdGVfdGltZXJfYnJvYWRjYXN0KHByLCBjeCwgMSk7CiAJCWFjcGlfY3N0YXRlX2VudGVyKGN4KTsKIAkJLyogR2V0IGVuZCB0aW1lICh0aWNrcykgKi8KIAkJdDIgPSBpbmwoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suYWRkcmVzcyk7CkBAIC0zOTYsNiArNDkwLDcgQEAKIAkJLyogQ29tcHV0ZSB0aW1lICh0aWNrcykgdGhhdCB3ZSB3ZXJlIGFjdHVhbGx5IGFzbGVlcCAqLwogCQlzbGVlcF90aWNrcyA9CiAJCSAgICB0aWNrc19lbGFwc2VkKHQxLCB0MikgLSBjeC0+bGF0ZW5jeV90aWNrcyAtIEMyX09WRVJIRUFEOworCQlhY3BpX3N0YXRlX3RpbWVyX2Jyb2FkY2FzdChwciwgY3gsIDApOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9TVEFURV9DMzoKQEAgLTQxNyw2ICs1MTIsNyBAQAogCQkvKiBHZXQgc3RhcnQgdGltZSAodGlja3MpICovCiAJCXQxID0gaW5sKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3MpOwogCQkvKiBJbnZva2UgQzMgKi8KKwkJYWNwaV9zdGF0ZV90aW1lcl9icm9hZGNhc3QocHIsIGN4LCAxKTsKIAkJYWNwaV9jc3RhdGVfZW50ZXIoY3gpOwogCQkvKiBHZXQgZW5kIHRpbWUgKHRpY2tzKSAqLwogCQl0MiA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKQEAgLTQzNiw2ICs1MzIsNyBAQAogCQkvKiBDb21wdXRlIHRpbWUgKHRpY2tzKSB0aGF0IHdlIHdlcmUgYWN0dWFsbHkgYXNsZWVwICovCiAJCXNsZWVwX3RpY2tzID0KIAkJICAgIHRpY2tzX2VsYXBzZWQodDEsIHQyKSAtIGN4LT5sYXRlbmN5X3RpY2tzIC0gQzNfT1ZFUkhFQUQ7CisJCWFjcGlfc3RhdGVfdGltZXJfYnJvYWRjYXN0KHByLCBjeCwgMCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTkwNCwxMSArMTAwMSw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IHdvcmtpbmcgPSAwOwogCi0jaWZkZWYgQVJDSF9BUElDVElNRVJfU1RPUFNfT05fQzMKLQlpbnQgdGltZXJfYnJvYWRjYXN0ID0gMDsKLQljcHVtYXNrX3QgbWFzayA9IGNwdW1hc2tfb2ZfY3B1KHByLT5pZCk7Ci0Jb25fZWFjaF9jcHUoc3dpdGNoX2lwaV90b19BUElDX3RpbWVyLCAmbWFzaywgMSwgMSk7Ci0jZW5kaWYKKwlwci0+cG93ZXIudGltZXJfYnJvYWRjYXN0X29uX3N0YXRlID0gSU5UX01BWDsKIAogCWZvciAoaSA9IDE7IGkgPCBBQ1BJX1BST0NFU1NPUl9NQVhfUE9XRVI7IGkrKykgewogCQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4ID0gJnByLT5wb3dlci5zdGF0ZXNbaV07CkBAIC05MjAsMjEgKzEwMTMsMTQgQEAKIAogCQljYXNlIEFDUElfU1RBVEVfQzI6CiAJCQlhY3BpX3Byb2Nlc3Nvcl9wb3dlcl92ZXJpZnlfYzIoY3gpOwotI2lmZGVmIEFSQ0hfQVBJQ1RJTUVSX1NUT1BTX09OX0MzCi0JCQkvKiBTb21lIEFNRCBzeXN0ZW1zIGZha2UgQzMgYXMgQzIsIGJ1dCBzdGlsbAotCQkJICAgaGF2ZSB0aW1lciB0cm91YmxlcyAqLwotCQkJaWYgKGN4LT52YWxpZCAmJiAKLQkJCQlib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpCi0JCQkJdGltZXJfYnJvYWRjYXN0Kys7Ci0jZW5kaWYKKwkJCWlmIChjeC0+dmFsaWQpCisJCQkJYWNwaV90aW1lcl9jaGVja19zdGF0ZShpLCBwciwgY3gpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBQ1BJX1NUQVRFX0MzOgogCQkJYWNwaV9wcm9jZXNzb3JfcG93ZXJfdmVyaWZ5X2MzKHByLCBjeCk7Ci0jaWZkZWYgQVJDSF9BUElDVElNRVJfU1RPUFNfT05fQzMKIAkJCWlmIChjeC0+dmFsaWQpCi0JCQkJdGltZXJfYnJvYWRjYXN0Kys7Ci0jZW5kaWYKKwkJCQlhY3BpX3RpbWVyX2NoZWNrX3N0YXRlKGksIHByLCBjeCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC05NDIsMTAgKzEwMjgsNyBAQAogCQkJd29ya2luZysrOwogCX0KIAotI2lmZGVmIEFSQ0hfQVBJQ1RJTUVSX1NUT1BTX09OX0MzCi0JaWYgKHRpbWVyX2Jyb2FkY2FzdCkKLQkJb25fZWFjaF9jcHUoc3dpdGNoX0FQSUNfdGltZXJfdG9faXBpLCAmbWFzaywgMSwgMSk7Ci0jZW5kaWYKKwlhY3BpX3Byb3BhZ2F0ZV90aW1lcl9icm9hZGNhc3QocHIpOwogCiAJcmV0dXJuICh3b3JraW5nKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKaW5kZXggMDU4ZjEzYy4uMmYyZTc5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKQEAgLTQ0LDEwICs0NCw5IEBACiAKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQ09NUE9ORU5UCTB4MDEwMDAwMDAKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQ0xBU1MJCSJwcm9jZXNzb3IiCi0jZGVmaW5lIEFDUElfUFJPQ0VTU09SX0RSSVZFUl9OQU1FCSJBQ1BJIFByb2Nlc3NvciBEcml2ZXIiCiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0ZJTEVfUEVSRk9STUFOQ0UJInBlcmZvcm1hbmNlIgogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1BST0NFU1NPUl9DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfcHJvY2Vzc29yIikKK0FDUElfTU9EVUxFX05BTUUoInByb2Nlc3Nvcl9wZXJmbGliIik7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgocGVyZm9ybWFuY2VfbXV0ZXgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhlcm1hbC5jCmluZGV4IDQwZmVjZDYuLjA2ZTZmM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhlcm1hbC5jCkBAIC00MSw5ICs0MSw4IEBACiAKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQ09NUE9ORU5UICAgICAgICAweDAxMDAwMDAwCiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0NMQVNTICAgICAgICAgICAgInByb2Nlc3NvciIKLSNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfRFJJVkVSX05BTUUgICAgICAiQUNQSSBQcm9jZXNzb3IgRHJpdmVyIgogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgICAgICBBQ1BJX1BST0NFU1NPUl9DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfcHJvY2Vzc29yIikKK0FDUElfTU9EVUxFX05BTUUoInByb2Nlc3Nvcl90aGVybWFsIik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW1pdCBJbnRlcmZhY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKaW5kZXggODlkZmYzNi4uYjMzNDg2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKQEAgLTQxLDkgKzQxLDggQEAKIAogI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9DT01QT05FTlQgICAgICAgIDB4MDEwMDAwMDAKICNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQ0xBU1MgICAgICAgICAgICAicHJvY2Vzc29yIgotI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9EUklWRVJfTkFNRSAgICAgICJBQ1BJIFByb2Nlc3NvciBEcml2ZXIiCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgICAgIEFDUElfUFJPQ0VTU09SX0NPTVBPTkVOVAotQUNQSV9NT0RVTEVfTkFNRSgiYWNwaV9wcm9jZXNzb3IiKQorQUNQSV9NT0RVTEVfTkFNRSgicHJvY2Vzc29yX3Rocm90dGxpbmciKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocm90dGxpbmcgQ29udHJvbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nicy5jIGIvZHJpdmVycy9hY3BpL3Nicy5jCmluZGV4IGY1OGZjNzQuLjU5NjQwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zYnMuYworKysgYi9kcml2ZXJzL2FjcGkvc2JzLmMKQEAgLTU5LDcgKzU5LDYgQEAKICNkZWZpbmUgQUNQSV9BQ19DTEFTUwkJCSJhY19hZGFwdGVyIgogI2RlZmluZSBBQ1BJX0JBVFRFUllfQ0xBU1MJCSJiYXR0ZXJ5IgogI2RlZmluZSBBQ1BJX1NCU19ISUQJCQkiQUNQSTAwMDIiCi0jZGVmaW5lIEFDUElfU0JTX0RSSVZFUl9OQU1FCQkiQUNQSSBTbWFydCBCYXR0ZXJ5IFN5c3RlbSBEcml2ZXIiCiAjZGVmaW5lIEFDUElfU0JTX0RFVklDRV9OQU1FCQkiU21hcnQgQmF0dGVyeSBTeXN0ZW0iCiAjZGVmaW5lIEFDUElfU0JTX0ZJTEVfSU5GTwkJImluZm8iCiAjZGVmaW5lIEFDUElfU0JTX0ZJTEVfU1RBVEUJCSJzdGF0ZSIKQEAgLTc4LDcgKzc3LDcgQEAKICNkZWZpbmUJTUFYX1NCU19CQVQJCQk0CiAjZGVmaW5lCU1BWF9TTUJVU19FUlIJCQkxCiAKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfc2JzIik7CitBQ1BJX01PRFVMRV9OQU1FKCJzYnMiKTsKIAogTU9EVUxFX0FVVEhPUigiUmljaCBUb3duc2VuZCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTbWFydCBCYXR0ZXJ5IFN5c3RlbSBBQ1BJIGludGVyZmFjZSBkcml2ZXIiKTsKQEAgLTExMCw3ICsxMDksNyBAQAogc3RhdGljIHZvaWQgYWNwaV9zYnNfdXBkYXRlX3F1ZXVlKHZvaWQgKmRhdGEpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfc2JzX2RyaXZlciA9IHsKLQkubmFtZSA9IEFDUElfU0JTX0RSSVZFUl9OQU1FLAorCS5uYW1lID0gInNicyIsCiAJLmNsYXNzID0gQUNQSV9TQlNfQ0xBU1MsCiAJLmlkcyA9IEFDUElfU0JTX0hJRCwKIAkub3BzID0gewpAQCAtMTAzNCwyMSArMTAzMywxOSBAQAogCX0gZWxzZSB7CiAJCXNlcV9wcmludGYoc2VxLCAiY2FwYWNpdHkgc3RhdGU6ICAgICAgICAgIG9rXG4iKTsKIAl9CisKKwlmb28gPSAoczE2KSBiYXR0ZXJ5LT5zdGF0ZS5hbXBlcmFnZSAqIGJhdHRlcnktPmluZm8uaXBzY2FsZTsKKwlpZiAoYmF0dGVyeS0+aW5mby5jYXBhY2l0eV9tb2RlKSB7CisJCWZvbyA9IGZvbyAqIGJhdHRlcnktPmluZm8uZGVzaWduX3ZvbHRhZ2UgLyAxMDAwOworCX0KIAlpZiAoYmF0dGVyeS0+c3RhdGUuYW1wZXJhZ2UgPCAwKSB7CiAJCXNlcV9wcmludGYoc2VxLCAiY2hhcmdpbmcgc3RhdGU6ICAgICAgICAgIGRpc2NoYXJnaW5nXG4iKTsKLQkJZm9vID0gYmF0dGVyeS0+c3RhdGUucmVtYWluaW5nX2NhcGFjaXR5ICogY3NjYWxlICogNjAgLwotCQkgICAgKGJhdHRlcnktPnN0YXRlLmF2ZXJhZ2VfdGltZV90b19lbXB0eSA9PSAwID8gMSA6Ci0JCSAgICAgYmF0dGVyeS0+c3RhdGUuYXZlcmFnZV90aW1lX3RvX2VtcHR5KTsKLQkJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50IHJhdGU6ICAgICAgICAgICAgJWklc1xuIiwKLQkJCSAgIGZvbywgYmF0dGVyeS0+aW5mby5jYXBhY2l0eV9tb2RlID8gIjAgbVciIDogIiBtQSIpOworCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgcmF0ZTogICAgICAgICAgICAlZCAlc1xuIiwKKwkJCSAgIC1mb28sIGJhdHRlcnktPmluZm8uY2FwYWNpdHlfbW9kZSA/ICJtVyIgOiAibUEiKTsKIAl9IGVsc2UgaWYgKGJhdHRlcnktPnN0YXRlLmFtcGVyYWdlID4gMCkgewogCQlzZXFfcHJpbnRmKHNlcSwgImNoYXJnaW5nIHN0YXRlOiAgICAgICAgICBjaGFyZ2luZ1xuIik7Ci0JCWZvbyA9IChiYXR0ZXJ5LT5pbmZvLmZ1bGxfY2hhcmdlX2NhcGFjaXR5IC0KLQkJICAgICAgIGJhdHRlcnktPnN0YXRlLnJlbWFpbmluZ19jYXBhY2l0eSkgKiBjc2NhbGUgKiA2MCAvCi0JCSAgICAoYmF0dGVyeS0+c3RhdGUuYXZlcmFnZV90aW1lX3RvX2Z1bGwgPT0gMCA/IDEgOgotCQkgICAgIGJhdHRlcnktPnN0YXRlLmF2ZXJhZ2VfdGltZV90b19mdWxsKTsKLQkJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50IHJhdGU6ICAgICAgICAgICAgJWklc1xuIiwKLQkJCSAgIGZvbywgYmF0dGVyeS0+aW5mby5jYXBhY2l0eV9tb2RlID8gIjAgbVciIDogIiBtQSIpOworCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgcmF0ZTogICAgICAgICAgICAlZCAlc1xuIiwKKwkJCSAgIGZvbywgYmF0dGVyeS0+aW5mby5jYXBhY2l0eV9tb2RlID8gIm1XIiA6ICJtQSIpOwogCX0gZWxzZSB7CiAJCXNlcV9wcmludGYoc2VxLCAiY2hhcmdpbmcgc3RhdGU6ICAgICAgICAgIGNoYXJnZWRcbiIpOwogCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgcmF0ZTogICAgICAgICAgICAwICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggNjRmMjZkYi4uYmIwZTBkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC0xMSwxMyArMTEsMTIgQEAKICNpbmNsdWRlIDxhY3BpL2FjaW50ZXJwLmg+CS8qIGZvciBhY3BpX2V4X2Vpc2FfaWRfdG9fc3RyaW5nKCkgKi8KIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX0JVU19DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoInNjYW4iKQorQUNQSV9NT0RVTEVfTkFNRSgic2NhbiIpOwogI2RlZmluZSBTVFJVQ1RfVE9fSU5UKHMpCSgqKChpbnQqKSZzKSkKIGV4dGVybiBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfcm9vdDsKIAogI2RlZmluZSBBQ1BJX0JVU19DTEFTUwkJCSJzeXN0ZW1fYnVzIgogI2RlZmluZSBBQ1BJX0JVU19ISUQJCQkiQUNQSV9CVVMiCi0jZGVmaW5lIEFDUElfQlVTX0RSSVZFUl9OQU1FCQkiQUNQSSBCdXMgRHJpdmVyIgogI2RlZmluZSBBQ1BJX0JVU19ERVZJQ0VfTkFNRQkJIlN5c3RlbSBCdXMiCiAKIHN0YXRpYyBMSVNUX0hFQUQoYWNwaV9kZXZpY2VfbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAvbWFpbi5jIGIvZHJpdmVycy9hY3BpL3NsZWVwL21haW4uYwppbmRleCA2MmNlODdkLi4zN2EwOTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAvbWFpbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC9tYWluLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCXt9LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgYWNwaV9zbGVlcF9pbml0KHZvaWQpCitpbnQgX19pbml0IGFjcGlfc2xlZXBfaW5pdCh2b2lkKQogewogCWludCBpID0gMDsKIApAQCAtMjI5LDQgKzIyOSwzIEBACiAJcmV0dXJuIDA7CiB9CiAKLWxhdGVfaW5pdGNhbGwoYWNwaV9zbGVlcF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwppbmRleCA3MTQ3YjBiLi44M2E4ZDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKKysrIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCkBAIC0zMSwxNCArMzEsMTMgQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfU1lTVEVNX0NPTVBPTkVOVAotQUNQSV9NT0RVTEVfTkFNRSgiYWNwaV9zeXN0ZW0iKQorQUNQSV9NT0RVTEVfTkFNRSgic3lzdGVtIik7CiAjaWZkZWYgTU9EVUxFX1BBUkFNX1BSRUZJWAogI3VuZGVmIE1PRFVMRV9QQVJBTV9QUkVGSVgKICNlbmRpZgogI2RlZmluZSBNT0RVTEVfUEFSQU1fUFJFRklYICJhY3BpLiIKIAogI2RlZmluZSBBQ1BJX1NZU1RFTV9DTEFTUwkJInN5c3RlbSIKLSNkZWZpbmUgQUNQSV9TWVNURU1fRFJJVkVSX05BTUUJCSJBQ1BJIFN5c3RlbSBEcml2ZXIiCiAjZGVmaW5lIEFDUElfU1lTVEVNX0RFVklDRV9OQU1FCQkiU3lzdGVtIgogI2RlZmluZSBBQ1BJX1NZU1RFTV9GSUxFX0lORk8JCSJpbmZvIgogI2RlZmluZSBBQ1BJX1NZU1RFTV9GSUxFX0VWRU5UCQkiZXZlbnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzLmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKaW5kZXggNDViZDE3My4uODQ5ZTJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwpAQCAtMTY5LDQwICsxNjksNDAgQEAKIAogCiBpbnQgX19pbml0Ci1hY3BpX3RhYmxlX3BhcnNlX21hZHRfZmFtaWx5KGNoYXIgKmlkLAotCQkJICAgICB1bnNpZ25lZCBsb25nIG1hZHRfc2l6ZSwKK2FjcGlfdGFibGVfcGFyc2VfZW50cmllcyhjaGFyICppZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplLAogCQkJICAgICBpbnQgZW50cnlfaWQsCi0JCQkgICAgIGFjcGlfbWFkdF9lbnRyeV9oYW5kbGVyIGhhbmRsZXIsCisJCQkgICAgIGFjcGlfdGFibGVfZW50cnlfaGFuZGxlciBoYW5kbGVyLAogCQkJICAgICB1bnNpZ25lZCBpbnQgbWF4X2VudHJpZXMpCiB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICptYWR0ID0gTlVMTDsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlX2hlYWRlciA9IE5VTEw7CiAJc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICplbnRyeTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwotCXVuc2lnbmVkIGxvbmcgbWFkdF9lbmQ7CisJdW5zaWduZWQgbG9uZyB0YWJsZV9lbmQ7CiAKIAlpZiAoIWhhbmRsZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogTG9jYXRlIHRoZSBNQURUIChpZiBleGlzdHMpLiBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUuICovCi0JYWNwaV9nZXRfdGFibGUoaWQsIDAsICZtYWR0KTsKKwkvKiBMb2NhdGUgdGhlIHRhYmxlIChpZiBleGlzdHMpLiBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUuICovCisJYWNwaV9nZXRfdGFibGUoaWQsIDAsICZ0YWJsZV9oZWFkZXIpOwogCi0JaWYgKCFtYWR0KSB7CisJaWYgKCF0YWJsZV9oZWFkZXIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIiU0LjRzIG5vdCBwcmVzZW50XG4iLCBpZCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCW1hZHRfZW5kID0gKHVuc2lnbmVkIGxvbmcpbWFkdCArIG1hZHQtPmxlbmd0aDsKKwl0YWJsZV9lbmQgPSAodW5zaWduZWQgbG9uZyl0YWJsZV9oZWFkZXIgKyB0YWJsZV9oZWFkZXItPmxlbmd0aDsKIAogCS8qIFBhcnNlIGFsbCBlbnRyaWVzIGxvb2tpbmcgZm9yIGEgbWF0Y2guICovCiAKIAllbnRyeSA9IChzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKikKLQkgICAgKCh1bnNpZ25lZCBsb25nKW1hZHQgKyBtYWR0X3NpemUpOworCSAgICAoKHVuc2lnbmVkIGxvbmcpdGFibGVfaGVhZGVyICsgdGFibGVfc2l6ZSk7CiAKIAl3aGlsZSAoKCh1bnNpZ25lZCBsb25nKWVudHJ5KSArIHNpemVvZihzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIpIDwKLQkgICAgICAgbWFkdF9lbmQpIHsKKwkgICAgICAgdGFibGVfZW5kKSB7CiAJCWlmIChlbnRyeS0+dHlwZSA9PSBlbnRyeV9pZAogCQkgICAgJiYgKCFtYXhfZW50cmllcyB8fCBjb3VudCsrIDwgbWF4X2VudHJpZXMpKQotCQkJaWYgKGhhbmRsZXIoZW50cnksIG1hZHRfZW5kKSkKKwkJCWlmIChoYW5kbGVyKGVudHJ5LCB0YWJsZV9lbmQpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCiAJCWVudHJ5ID0gKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqKQpAQCAtMjE4LDEzICsyMTgsMjIgQEAKIAogaW50IF9faW5pdAogYWNwaV90YWJsZV9wYXJzZV9tYWR0KGVudW0gYWNwaV9tYWR0X3R5cGUgaWQsCi0JCSAgICAgIGFjcGlfbWFkdF9lbnRyeV9oYW5kbGVyIGhhbmRsZXIsIHVuc2lnbmVkIGludCBtYXhfZW50cmllcykKKwkJICAgICAgYWNwaV90YWJsZV9lbnRyeV9oYW5kbGVyIGhhbmRsZXIsIHVuc2lnbmVkIGludCBtYXhfZW50cmllcykKIHsKLQlyZXR1cm4gYWNwaV90YWJsZV9wYXJzZV9tYWR0X2ZhbWlseShBQ1BJX1NJR19NQURULAorCXJldHVybiBhY3BpX3RhYmxlX3BhcnNlX2VudHJpZXMoQUNQSV9TSUdfTUFEVCwKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0KSwgaWQsCiAJCQkJCSAgICBoYW5kbGVyLCBtYXhfZW50cmllcyk7CiB9CiAKKy8qKgorICogYWNwaV90YWJsZV9wYXJzZSAtIGZpbmQgdGFibGUgd2l0aCBAaWQsIHJ1biBAaGFuZGxlciBvbiBpdAorICoKKyAqIEBpZDogdGFibGUgaWQgdG8gZmluZAorICogQGhhbmRsZXI6IGhhbmRsZXIgdG8gcnVuCisgKgorICogU2NhbiB0aGUgQUNQSSBTeXN0ZW0gRGVzY3JpcHRvciBUYWJsZSAoU1REKSBmb3IgYSB0YWJsZSBtYXRjaGluZyBAaWQsCisgKiBydW4gQGhhbmRsZXIgb24gaXQuICBSZXR1cm4gMCBpZiB0YWJsZSBmb3VuZCwgcmV0dXJuIG9uIGlmIG5vdC4KKyAqLwogaW50IF9faW5pdCBhY3BpX3RhYmxlX3BhcnNlKGNoYXIgKmlkLCBhY3BpX3RhYmxlX2hhbmRsZXIgaGFuZGxlcikKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlID0gTlVMTDsKQEAgLTIzNCw5ICsyNDMsOSBAQAogCWFjcGlfZ2V0X3RhYmxlKGlkLCAwLCAmdGFibGUpOwogCWlmICh0YWJsZSkgewogCQloYW5kbGVyKHRhYmxlKTsKLQkJcmV0dXJuIDE7Ci0JfSBlbHNlCiAJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90YnhmYWNlLmMKaW5kZXggODA3OTc4ZC4uNDE3ZWY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YnhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90YnhmYWNlLmMKQEAgLTMzOCw5ICszMzgsOSBAQAogCWludCBpOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX05PVF9FWElTVDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV91bmxvYWRfdGFibGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV91bmxvYWRfdGFibGVfaWQpOwogCi0JLyogRmluZCB0YWJsZSBmcm9tIHRoZSByZXF1ZXN0ZWQgdHlwZSBsaXN0ICovCisJLyogRmluZCB0YWJsZSBpbiB0aGUgZ2xvYmFsIHRhYmxlIGxpc3QgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNvdW50OyArK2kpIHsKIAkJaWYgKGlkICE9IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0ub3duZXJfaWQpIHsKIAkJCWNvbnRpbnVlOwpAQCAtMzUyLDggKzM1Miw5IEBACiAJCSogc2ltcGx5IGEgcG9zaXRpb24gd2l0aGluIHRoZSBoaWVyYXJjaHkKIAkJKi8KIAkJYWNwaV90Yl9kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKGkpOwotCQlhY3BpX3RiX3JlbGVhc2Vfb3duZXJfaWQoaSk7CisJCXN0YXR1cyA9IGFjcGlfdGJfcmVsZWFzZV9vd25lcl9pZChpKTsKIAkJYWNwaV90Yl9zZXRfdGFibGVfbG9hZGVkX2ZsYWcoaSwgRkFMU0UpOworCQlicmVhazsKIAl9CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CkBAIC00MDgsNyArNDA5LDcgQEAKIAkJfQogCiAJCWlmICghYWNwaV9nYmxfcGVybWFuZW50X21tYXApIHsKLQkJCWFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0ucG9pbnRlciA9IDA7CisJCQlhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLnBvaW50ZXIgPSBOVUxMOwogCQl9CiAKIAkJcmV0dXJuIChzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKaW5kZXggOTg2YWZkNC4uMGFlOGI5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCkBAIC00Nyw3ICs0Nyw2IEBACiAKICNkZWZpbmUgQUNQSV9USEVSTUFMX0NPTVBPTkVOVAkJMHgwNDAwMDAwMAogI2RlZmluZSBBQ1BJX1RIRVJNQUxfQ0xBU1MJCSJ0aGVybWFsX3pvbmUiCi0jZGVmaW5lIEFDUElfVEhFUk1BTF9EUklWRVJfTkFNRQkiQUNQSSBUaGVybWFsIFpvbmUgRHJpdmVyIgogI2RlZmluZSBBQ1BJX1RIRVJNQUxfREVWSUNFX05BTUUJIlRoZXJtYWwgWm9uZSIKICNkZWZpbmUgQUNQSV9USEVSTUFMX0ZJTEVfU1RBVEUJCSJzdGF0ZSIKICNkZWZpbmUgQUNQSV9USEVSTUFMX0ZJTEVfVEVNUEVSQVRVUkUJInRlbXBlcmF0dXJlIgpAQCAtNzEsMTAgKzcwLDEwIEBACiAjZGVmaW5lIENFTFNJVVNfVE9fS0VMVklOKHQpCSgodCsyNzMpKjEwKQogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfVEhFUk1BTF9DT01QT05FTlQKLUFDUElfTU9EVUxFX05BTUUoImFjcGlfdGhlcm1hbCIpCitBQ1BJX01PRFVMRV9OQU1FKCJ0aGVybWFsIik7CiAKIE1PRFVMRV9BVVRIT1IoIlBhdWwgRGllZmVuYmF1Z2giKTsKLU1PRFVMRV9ERVNDUklQVElPTihBQ1BJX1RIRVJNQUxfRFJJVkVSX05BTUUpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIFRoZXJtYWwgWm9uZSBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIGludCB0enA7CkBAIC05OSw3ICs5OCw3IEBACiAJCQkJCSAgc2l6ZV90LCBsb2ZmX3QgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV90aGVybWFsX2RyaXZlciA9IHsKLQkubmFtZSA9IEFDUElfVEhFUk1BTF9EUklWRVJfTkFNRSwKKwkubmFtZSA9ICJ0aGVybWFsIiwKIAkuY2xhc3MgPSBBQ1BJX1RIRVJNQUxfQ0xBU1MsCiAJLmlkcyA9IEFDUElfVEhFUk1BTF9ISUQsCiAJLm9wcyA9IHsKQEAgLTI3MCw3ICsyNjksNyBAQAogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJICAiUG9sbGluZyBmcmVxdWVuY3kgc2V0IHRvICVsdSBzZWNvbmRzXG4iLAotCQkJICB0ei0+cG9sbGluZ19mcmVxdWVuY3kpKTsKKwkJCSAgdHotPnBvbGxpbmdfZnJlcXVlbmN5LzEwKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNTcsMjggKzEzNTYsMzIgQEAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IE5VTEw7Ci0JaW50IGk7CisJaW50IGksIGosIHBvd2VyX3N0YXRlLCByZXN1bHQ7CisKIAogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdHogPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKLQlhY3BpX3RoZXJtYWxfZ2V0X3RlbXBlcmF0dXJlKHR6KTsKLQogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX1RIRVJNQUxfTUFYX0FDVElWRTsgaSsrKSB7Ci0JCWlmICh0ei0+dHJpcHMuYWN0aXZlW2ldLmZsYWdzLnZhbGlkKSB7Ci0gCQkJdHotPnRlbXBlcmF0dXJlID0gdHotPnRyaXBzLmFjdGl2ZVtpXS50ZW1wZXJhdHVyZTsKLQkJCXR6LT50cmlwcy5hY3RpdmVbaV0uZmxhZ3MuZW5hYmxlZCA9IDA7Ci0KLQkJCWFjcGlfdGhlcm1hbF9hY3RpdmUodHopOwotCi0JCQl0ei0+c3RhdGUuYWN0aXZlIHw9IHR6LT50cmlwcy5hY3RpdmVbaV0uZmxhZ3MuZW5hYmxlZDsKLQkJCXR6LT5zdGF0ZS5hY3RpdmVfaW5kZXggPSBpOworCQlpZiAoISgmdHotPnRyaXBzLmFjdGl2ZVtpXSkpCisJCQlicmVhazsKKwkJaWYgKCF0ei0+dHJpcHMuYWN0aXZlW2ldLmZsYWdzLnZhbGlkKQorCQkJYnJlYWs7CisJCXR6LT50cmlwcy5hY3RpdmVbaV0uZmxhZ3MuZW5hYmxlZCA9IDE7CisJCWZvciAoaiA9IDA7IGogPCB0ei0+dHJpcHMuYWN0aXZlW2ldLmRldmljZXMuY291bnQ7IGorKykgeworCQkJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3Bvd2VyKHR6LT50cmlwcy5hY3RpdmVbaV0uZGV2aWNlcy4KKwkJCSAgICBoYW5kbGVzW2pdLCAmcG93ZXJfc3RhdGUpOworCQkJaWYgKHJlc3VsdCB8fCAocG93ZXJfc3RhdGUgIT0gQUNQSV9TVEFURV9EMCkpIHsKKwkJCQl0ei0+dHJpcHMuYWN0aXZlW2ldLmZsYWdzLmVuYWJsZWQgPSAwOworCQkJCWJyZWFrOworCQkJfQogCQl9CisJCXR6LT5zdGF0ZS5hY3RpdmUgfD0gdHotPnRyaXBzLmFjdGl2ZVtpXS5mbGFncy5lbmFibGVkOwogCX0KIAotIAlhY3BpX3RoZXJtYWxfY2hlY2sodHopOworCWFjcGlfdGhlcm1hbF9jaGVjayh0eik7CiAKIAlyZXR1cm4gQUVfT0s7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdG9zaGliYV9hY3BpLmMgYi9kcml2ZXJzL2FjcGkvdG9zaGliYV9hY3BpLmMKaW5kZXggZDliNjUxZi4uMzkwNmQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Rvc2hpYmFfYWNwaS5jCisrKyBiL2RyaXZlcnMvYWNwaS90b3NoaWJhX2FjcGkuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJdW5pb24gYWNwaV9vYmplY3QgaW5fb2Jqc1sxXTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQlwYXJhbXMuY291bnQgPSBzaXplb2YoaW5fb2JqcykgLyBzaXplb2YoaW5fb2Jqc1swXSk7CisJcGFyYW1zLmNvdW50ID0gQVJSQVlfU0laRShpbl9vYmpzKTsKIAlwYXJhbXMucG9pbnRlciA9IGluX29ianM7CiAJaW5fb2Jqc1swXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CiAJaW5fb2Jqc1swXS5pbnRlZ2VyLnZhbHVlID0gdmFsOwpAQCAtMzE1LDcgKzMxNSw3IEBACiAKIHN0YXRpYyBpbnQgc2V0X2xjZF9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXJldHVybiBzZXRfbGNkKGJkLT5wcm9wcy0+YnJpZ2h0bmVzcyk7CisJcmV0dXJuIHNldF9sY2QoYmQtPnByb3BzLmJyaWdodG5lc3MpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV9sY2QoY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50KQpAQCAtNTMzLDExICs1MzMsOSBAQAogCXJldHVybiBBRV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyB0b3NoaWJhX2JhY2tsaWdodF9kYXRhID0gewotICAgICAgICAub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB0b3NoaWJhX2JhY2tsaWdodF9kYXRhID0gewogICAgICAgICAuZ2V0X2JyaWdodG5lc3MgPSBnZXRfbGNkLAogICAgICAgICAudXBkYXRlX3N0YXR1cyAgPSBzZXRfbGNkX3N0YXR1cywKLSAgICAgICAgLm1heF9icmlnaHRuZXNzID0gSENJX0xDRF9CUklHSFRORVNTX0xFVkVMUyAtIDEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdG9zaGliYV9hY3BpX2V4aXQodm9pZCkKQEAgLTU2MSwxMCArNTU5LDYgQEAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWFjcGlfc3BlY2lmaWNfaG90a2V5X2VuYWJsZWQpIHsKLQkJcHJpbnRrKE1ZX0lORk8gIlVzaW5nIGdlbmVyaWMgaG90a2V5IGRyaXZlclxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KIAkvKiBzaW1wbGUgZGV2aWNlIGRldGVjdGlvbjogbG9vayBmb3IgSENJIG1ldGhvZCAqLwogCWlmIChpc192YWxpZF9hY3BpX3BhdGgoTUVUSE9EX0hDSV8xKSkKIAkJbWV0aG9kX2hjaSA9IE1FVEhPRF9IQ0lfMTsKQEAgLTYwMSw2ICs1OTUsNyBAQAogCQl0b3NoaWJhX2JhY2tsaWdodF9kZXZpY2UgPSBOVUxMOwogCQl0b3NoaWJhX2FjcGlfZXhpdCgpOwogCX0KKyAgICAgICAgdG9zaGliYV9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEhDSV9MQ0RfQlJJR0hUTkVTU19MRVZFTFMgLSAxOwogCiAJcmV0dXJuIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgPyAwIDogLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWxldGUuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWxldGUuYwppbmRleCBmNzc3Y2ViLi42NzNhMGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVsZXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlbGV0ZS5jCkBAIC0xNzAsNyArMTcwLDYgQEAKIAkJCWFjcGlfb3NfZGVsZXRlX211dGV4KG9iamVjdC0+bXV0ZXgub3NfbXV0ZXgpOwogCQkJYWNwaV9nYmxfZ2xvYmFsX2xvY2tfbXV0ZXggPSBOVUxMOwogCQl9IGVsc2UgewotCQkJYWNwaV9leF91bmxpbmtfbXV0ZXgob2JqZWN0KTsKIAkJCWFjcGlfb3NfZGVsZXRlX211dGV4KG9iamVjdC0+bXV0ZXgub3NfbXV0ZXgpOwogCQl9CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvdXRpbHMuYwppbmRleCA2OGE4MDlmLi4zNGYxNTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbHMuYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKICNkZWZpbmUgX0NPTVBPTkVOVAkJQUNQSV9CVVNfQ09NUE9ORU5UCi1BQ1BJX01PRFVMRV9OQU1FKCJhY3BpX3V0aWxzIikKK0FDUElfTU9EVUxFX05BTUUoInV0aWxzIik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IEV2YWx1YXRpb24gSGVscGVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCBlMGI5N2FkLi4wNzcxYjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtNDAsNyArNDAsNiBAQAogCiAjZGVmaW5lIEFDUElfVklERU9fQ09NUE9ORU5UCQkweDA4MDAwMDAwCiAjZGVmaW5lIEFDUElfVklERU9fQ0xBU1MJCSJ2aWRlbyIKLSNkZWZpbmUgQUNQSV9WSURFT19EUklWRVJfTkFNRQkJIkFDUEkgVmlkZW8gRHJpdmVyIgogI2RlZmluZSBBQ1BJX1ZJREVPX0JVU19OQU1FCQkiVmlkZW8gQnVzIgogI2RlZmluZSBBQ1BJX1ZJREVPX0RFVklDRV9OQU1FCQkiVmlkZW8gRGV2aWNlIgogI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9TV0lUQ0gJMHg4MApAQCAtNjUsMTcgKzY0LDE3IEBACiAjZGVmaW5lIEFDUElfVklERU9fRElTUExBWV9MQ0QJNAogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfVklERU9fQ09NUE9ORU5UCi1BQ1BJX01PRFVMRV9OQU1FKCJhY3BpX3ZpZGVvIikKK0FDUElfTU9EVUxFX05BTUUoInZpZGVvIik7CiAKLSAgICBNT0RVTEVfQVVUSE9SKCJCcnVubyBEdWNyb3QiKTsKLU1PRFVMRV9ERVNDUklQVElPTihBQ1BJX1ZJREVPX0RSSVZFUl9OQU1FKTsKK01PRFVMRV9BVVRIT1IoIkJydW5vIER1Y3JvdCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIFZpZGVvIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfdmlkZW9fYnVzID0gewotCS5uYW1lID0gQUNQSV9WSURFT19EUklWRVJfTkFNRSwKKwkubmFtZSA9ICJ2aWRlbyIsCiAJLmNsYXNzID0gQUNQSV9WSURFT19DTEFTUywKIAkuaWRzID0gQUNQSV9WSURFT19ISUQsCiAJLm9wcyA9IHsKQEAgLTE3MCw3ICsxNjksNiBAQAogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2OwogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzICpicmlnaHRuZXNzOwogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7Ci0Jc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzICpkYXRhOwogfTsKIAogLyogYnVzICovCkBAIC0yODcsMTMgKzI4NSwxOCBAQAogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fc2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCWludCByZXF1ZXN0X2xldmVsID0gYmQtPnByb3BzLT5icmlnaHRuZXNzOworCWludCByZXF1ZXN0X2xldmVsID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CiAJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICp2ZCA9CiAJCShzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKiljbGFzc19nZXRfZGV2ZGF0YSgmYmQtPmNsYXNzX2Rldik7CiAJYWNwaV92aWRlb19kZXZpY2VfbGNkX3NldF9sZXZlbCh2ZCwgcmVxdWVzdF9sZXZlbCk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhY3BpX2JhY2tsaWdodF9vcHMgPSB7CisJLmdldF9icmlnaHRuZXNzID0gYWNwaV92aWRlb19nZXRfYnJpZ2h0bmVzcywKKwkudXBkYXRlX3N0YXR1cyAgPSBhY3BpX3ZpZGVvX3NldF9icmlnaHRuZXNzLAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlbyBNYW5hZ2VtZW50CiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjA5LDMxICs2MTIsMTggQEAKIAkJdW5zaWduZWQgbG9uZyB0bXA7CiAJCXN0YXRpYyBpbnQgY291bnQgPSAwOwogCQljaGFyICpuYW1lOwotCQlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgKmFjcGlfdmlkZW9fZGF0YTsKLQogCQluYW1lID0ga3phbGxvYyhNQVhfTkFNRV9MRU4sIEdGUF9LRVJORUwpOwogCQlpZiAoIW5hbWUpCiAJCQlyZXR1cm47CiAKLQkJYWNwaV92aWRlb19kYXRhID0ga3phbGxvYygKLQkJCXNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpLAotCQkJR0ZQX0tFUk5FTCk7Ci0JCWlmICghYWNwaV92aWRlb19kYXRhKXsKLQkJCWtmcmVlKG5hbWUpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWFjcGlfdmlkZW9fZGF0YS0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJYWNwaV92aWRlb19kYXRhLT5nZXRfYnJpZ2h0bmVzcyA9Ci0JCQlhY3BpX3ZpZGVvX2dldF9icmlnaHRuZXNzOwotCQlhY3BpX3ZpZGVvX2RhdGEtPnVwZGF0ZV9zdGF0dXMgPQotCQkJYWNwaV92aWRlb19zZXRfYnJpZ2h0bmVzczsKIAkJc3ByaW50ZihuYW1lLCAiYWNwaV92aWRlbyVkIiwgY291bnQrKyk7Ci0JCWRldmljZS0+ZGF0YSA9IGFjcGlfdmlkZW9fZGF0YTsKLQkJYWNwaV92aWRlb19kYXRhLT5tYXhfYnJpZ2h0bmVzcyA9IG1heF9sZXZlbDsKIAkJYWNwaV92aWRlb19kZXZpY2VfbGNkX2dldF9sZXZlbF9jdXJyZW50KGRldmljZSwgJnRtcCk7Ci0JCWFjcGlfdmlkZW9fZGF0YS0+YnJpZ2h0bmVzcyA9IChpbnQpdG1wOwogCQlkZXZpY2UtPmJhY2tsaWdodCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwKLQkJCU5VTEwsIGRldmljZSwgYWNwaV92aWRlb19kYXRhKTsKKwkJCU5VTEwsIGRldmljZSwgJmFjcGlfYmFja2xpZ2h0X29wcyk7CisJCWRldmljZS0+YmFja2xpZ2h0LT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heF9sZXZlbDsKKwkJZGV2aWNlLT5iYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MgPSAoaW50KXRtcDsKKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoZGV2aWNlLT5iYWNrbGlnaHQpOworCiAJCWtmcmVlKG5hbWUpOwogCX0KIAlyZXR1cm47CkBAIC0xNjc4LDEwICsxNjY4LDcgQEAKIAlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihkZXZpY2UtPmRldi0+aGFuZGxlLAogCQkJCQkgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgYWNwaV92aWRlb19kZXZpY2Vfbm90aWZ5KTsKLQlpZiAoZGV2aWNlLT5iYWNrbGlnaHQpewotCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlLT5iYWNrbGlnaHQpOwotCQlrZnJlZShkZXZpY2UtPmRhdGEpOwotCX0KKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlLT5iYWNrbGlnaHQpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9LY29uZmlnIGIvZHJpdmVycy9hdGEvS2NvbmZpZwppbmRleCAzNzQ3NDU3ZmUuLjRhZjBhNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL0tjb25maWcKKysrIGIvZHJpdmVycy9hdGEvS2NvbmZpZwpAQCAtMTYxLDYgKzE2MSwxOSBAQAogCWRlcGVuZHMgb24gSURFPXkgJiYgIUJMS19ERVZfSURFX1NBVEEgJiYgKFNBVEFfQUhDSSB8fCBBVEFfUElJWCkKIAlkZWZhdWx0IHkKIAorY29uZmlnIFNBVEFfQUNQSQorCWJvb2wKKwlkZXBlbmRzIG9uIEFDUEkgJiYgUENJCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBTQVRBLXJlbGF0ZWQgQUNQSSBvYmplY3RzLgorCSAgVGhlc2UgQUNQSSBvYmplY3RzIGFkZCB0aGUgYWJpbGl0eSB0byByZXRyaWV2ZSB0YXNrZmlsZXMKKwkgIGZyb20gdGhlIEFDUEkgQklPUyBhbmQgd3JpdGUgdGhlbSB0byB0aGUgZGlzayBjb250cm9sbGVyLgorCSAgVGhlc2Ugb2JqZWN0cyBtYXkgYmUgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSwgc2VjdXJpdHksCisJICBwb3dlciBtYW5hZ2VtZW50LCBvciBvdGhlciBhcmVhcy4KKwkgIFlvdSBjYW4gZGlzYWJsZSB0aGlzIGF0IGtlcm5lbCBib290IHRpbWUgYnkgdXNpbmcgdGhlCisJICBvcHRpb24gbGliYXRhLm5vYWNwaT0xCisKIGNvbmZpZyBQQVRBX0FMSQogCXRyaXN0YXRlICJBTGkgUEFUQSBzdXBwb3J0IChFeHBlcmltZW50YWwpIgogCWRlcGVuZHMgb24gUENJICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvTWFrZWZpbGUgYi9kcml2ZXJzL2F0YS9NYWtlZmlsZQppbmRleCBjZDA5NmYwLi43NDI5OGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2F0YS9NYWtlZmlsZQpAQCAtNjYsNCArNjYsNCBAQAogb2JqLSQoQ09ORklHX1BBVEFfTEVHQUNZKQkrPSBwYXRhX2xlZ2FjeS5vCiAKIGxpYmF0YS1vYmpzCTo9IGxpYmF0YS1jb3JlLm8gbGliYXRhLXNjc2kubyBsaWJhdGEtc2ZmLm8gbGliYXRhLWVoLm8KLQorbGliYXRhLSQoQ09ORklHX1NBVEFfQUNQSSkgKz0gbGliYXRhLWFjcGkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlOGJlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKQEAgLTAsMCArMSw2OTggQEAKKy8qCisgKiBsaWJhdGEtYWNwaS5jCisgKiBQcm92aWRlcyBBQ1BJIHN1cHBvcnQgZm9yIFBBVEEvU0FUQS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBSYW5keSBEdW5sYXAKKyAqLworCisjaW5jbHVkZSA8bGludXgvYXRhLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICJsaWJhdGEuaCIKKworI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjbmFtZXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjbmFtZXNwLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BhcnNlci5oPgorI2luY2x1ZGUgPGFjcGkvYWNleGNlcC5oPgorI2luY2x1ZGUgPGFjcGkvYWNtYWNyb3MuaD4KKyNpbmNsdWRlIDxhY3BpL2FjdHlwZXMuaD4KKworI2RlZmluZSBTQVRBX1JPT1RfUE9SVCh4KQkoKCh4KSA+PiAxNikgJiAweGZmZmYpCisjZGVmaW5lIFNBVEFfUE9SVF9OVU1CRVIoeCkJKCh4KSAmIDB4ZmZmZikJLyogb3IgTk9fUE9SVF9NVUxUICovCisjZGVmaW5lIE5PX1BPUlRfTVVMVAkJMHhmZmZmCisjZGVmaW5lIFNBVEFfQURSX1JTVkQJCTB4ZmZmZmZmZmYKKworI2RlZmluZSBSRUdTX1BFUl9HVEYJCTcKK3N0cnVjdCB0YXNrZmlsZV9hcnJheSB7CisJdTgJdGZhW1JFR1NfUEVSX0dURl07CS8qIHJlZ3MuIDB4MWYxIC0gMHgxZjcgKi8KK307CisKKworLyoqCisgKiBzYXRhX2dldF9kZXZfaGFuZGxlIC0gZmluZHMgYWNwaV9oYW5kbGUgYW5kIFBDSSBkZXZpY2UuZnVuY3Rpb24KKyAqIEBkZXY6IGRldmljZSB0byBsb2NhdGUKKyAqIEBoYW5kbGU6IHJldHVybmVkIGFjcGlfaGFuZGxlIGZvciBAZGV2CisgKiBAcGNpZGV2Zm46IHJldHVybiBQQ0kgZGV2aWNlLmZ1bmMgZm9yIEBkZXYKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV3aGF0IFNBVEEtc3BlY2lmaWMuICBPciBhdCBsZWFzdCB0aGUKKyAqIFBBVEEgJiBTQVRBIHZlcnNpb25zIG9mIHRoaXMgZnVuY3Rpb24gYXJlIGRpZmZlcmVudCwKKyAqIHNvIGl0J3Mgbm90IGVudGlyZWx5IGdlbmVyaWMgY29kZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgc2F0YV9nZXRfZGV2X2hhbmRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGFjcGlfaGFuZGxlICpoYW5kbGUsCisJCQkJCWFjcGlfaW50ZWdlciAqcGNpZGV2Zm4pCit7CisJc3RydWN0IHBjaV9kZXYJKnBjaV9kZXY7CisJYWNwaV9pbnRlZ2VyCWFkZHI7CisKKwlwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwkvKiBOT1RFOiBQQ0ktc3BlY2lmaWMgKi8KKwkvKiBQbGVhc2UgcmVmZXIgdG8gdGhlIEFDUEkgc3BlYyBmb3IgdGhlIHN5bnRheCBvZiBfQURSLiAqLworCWFkZHIgPSAoUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pIDw8IDE2KSB8IFBDSV9GVU5DKHBjaV9kZXYtPmRldmZuKTsKKwkqcGNpZGV2Zm4gPSBhZGRyOworCSpoYW5kbGUgPSBhY3BpX2dldF9jaGlsZChERVZJQ0VfQUNQSV9IQU5ETEUoZGV2LT5wYXJlbnQpLCBhZGRyKTsKKwlpZiAoISpoYW5kbGUpCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiAwOworfQorCisvKioKKyAqIHBhdGFfZ2V0X2Rldl9oYW5kbGUgLSBmaW5kcyBhY3BpX2hhbmRsZSBhbmQgUENJIGRldmljZS5mdW5jdGlvbgorICogQGRldjogZGV2aWNlIHRvIGxvY2F0ZQorICogQGhhbmRsZTogcmV0dXJuZWQgYWNwaV9oYW5kbGUgZm9yIEBkZXYKKyAqIEBwY2lkZXZmbjogcmV0dXJuIFBDSSBkZXZpY2UuZnVuYyBmb3IgQGRldgorICoKKyAqIFRoZSBQQVRBIGFuZCBTQVRBIHZlcnNpb25zIG9mIHRoaXMgZnVuY3Rpb24gYXJlIGRpZmZlcmVudC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgcGF0YV9nZXRfZGV2X2hhbmRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGFjcGlfaGFuZGxlICpoYW5kbGUsCisJCQkJYWNwaV9pbnRlZ2VyICpwY2lkZXZmbikKK3sKKwl1bnNpZ25lZCBpbnQgYnVzLCBkZXZudW0sIGZ1bmM7CisJYWNwaV9pbnRlZ2VyIGFkZHI7CisJYWNwaV9oYW5kbGUgZGV2X2hhbmRsZSwgcGFyZW50X2hhbmRsZTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0gey5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwKKwkJCQkJLnBvaW50ZXIgPSBOVUxMfTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8JKmRpbmZvID0gTlVMTDsKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKworCWJ1cyA9IHBkZXYtPmJ1cy0+bnVtYmVyOworCWRldm51bSA9IFBDSV9TTE9UKHBkZXYtPmRldmZuKTsKKwlmdW5jID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOworCisJZGV2X2hhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRShkZXYpOworCXBhcmVudF9oYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoZGV2LT5wYXJlbnQpOworCisJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8ocGFyZW50X2hhbmRsZSwgJmJ1ZmZlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlnb3RvIGVycjsKKworCWRpbmZvID0gYnVmZmVyLnBvaW50ZXI7CisJaWYgKGRpbmZvICYmIChkaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0FEUikgJiYKKwkgICAgZGluZm8tPmFkZHJlc3MgPT0gYnVzKSB7CisJCS8qIEFDUEkgc3BlYyBmb3IgX0FEUiBmb3IgUENJIGJ1czogKi8KKwkJYWRkciA9IChhY3BpX2ludGVnZXIpKGRldm51bSA8PCAxNiB8IGZ1bmMpOworCQkqcGNpZGV2Zm4gPSBhZGRyOworCQkqaGFuZGxlID0gZGV2X2hhbmRsZTsKKwl9IGVsc2UgeworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoISpoYW5kbGUpCisJCWdvdG8gZXJyOworCXJldCA9IDA7CitlcnI6CisJa2ZyZWUoZGluZm8pOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCB3YWxrX2luZm8gewkJLyogY2FuIGJlIHRyaW1tZWQgc29tZSAqLworCXN0cnVjdCBkZXZpY2UJKmRldjsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXY7CisJYWNwaV9oYW5kbGUJaGFuZGxlOworCWFjcGlfaW50ZWdlcglwY2lkZXZmbjsKKwl1bnNpZ25lZCBpbnQJZHJpdmVudW07CisJYWNwaV9oYW5kbGUJb2JqX2hhbmRsZTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmF0YXBvcnQ7CisJc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldjsKKwl1MzIJCXNhdGFfYWRyOworCWludAkJc3RhdHVzOworCWNoYXIJCWJhc2VwYXRoW0FDUElfUEFUSE5BTUVfTUFYXTsKKwlpbnQJCWJhc2VwYXRoX2xlbjsKK307CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBnZXRfZGV2aWNlcyhhY3BpX2hhbmRsZSBoYW5kbGUsCisJCQkJdTMyIGxldmVsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dXJuX3ZhbHVlKQoreworCWFjcGlfc3RhdHVzCQlzdGF0dXM7CisJc3RydWN0IHdhbGtfaW5mbwkqd2luZm8gPSBjb250ZXh0OworCXN0cnVjdCBhY3BpX2J1ZmZlcgluYW1lYnVmID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwljaGFyCQkJKnBhdGhuYW1lOworCXN0cnVjdCBhY3BpX2J1ZmZlcglidWZmZXI7CisJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8JKmRpbmZvOworCisJc3RhdHVzID0gYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJm5hbWVidWYpOworCWlmIChzdGF0dXMpCisJCWdvdG8gcmV0OworCXBhdGhuYW1lID0gbmFtZWJ1Zi5wb2ludGVyOworCisJYnVmZmVyLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfQlVGRkVSOworCWJ1ZmZlci5wb2ludGVyID0gTlVMTDsKKwlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJZ290byBvdXQyOworCisJZGluZm8gPSBidWZmZXIucG9pbnRlcjsKKworCS8qIGZpbmQgZnVsbCBkZXZpY2UgcGF0aCBuYW1lIGZvciBwY2lkZXZmbiAqLworCWlmIChkaW5mbyAmJiAoZGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9BRFIpICYmCisJICAgIGRpbmZvLT5hZGRyZXNzID09IHdpbmZvLT5wY2lkZXZmbikgeworCQlpZiAoYXRhX21zZ19wcm9iZSh3aW5mby0+YXRhcG9ydCkpCisJCQlhdGFfZGV2X3ByaW50ayh3aW5mby0+YXRhZGV2LCBLRVJOX0RFQlVHLAorCQkJCSI6JXM6IG1hdGNoZXMgcGNpZGV2Zm4gKDB4JWxseClcbiIsCisJCQkJcGF0aG5hbWUsIHdpbmZvLT5wY2lkZXZmbik7CisJCXN0cmxjcHkod2luZm8tPmJhc2VwYXRoLCBwYXRobmFtZSwKKwkJCXNpemVvZih3aW5mby0+YmFzZXBhdGgpKTsKKwkJd2luZm8tPmJhc2VwYXRoX2xlbiA9IHN0cmxlbihwYXRobmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGlmIGJhc2VwYXRoIGlzIG5vdCB5ZXQga25vd24sIGlnbm9yZSB0aGlzIG9iamVjdCAqLworCWlmICghd2luZm8tPmJhc2VwYXRoX2xlbikKKwkJZ290byBvdXQ7CisKKwkvKiBpZiB0aGlzIG9iamVjdCBpcyBpbiBzY29wZSBvZiBiYXNlcGF0aCwgbWF5YmUgdXNlIGl0ICovCisJaWYgKHN0cm5jbXAocGF0aG5hbWUsIHdpbmZvLT5iYXNlcGF0aCwKKwkgICAgd2luZm8tPmJhc2VwYXRoX2xlbikgPT0gMCkgeworCQlpZiAoIShkaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0FEUikpCisJCQlnb3RvIG91dDsKKwkJaWYgKGF0YV9tc2dfcHJvYmUod2luZm8tPmF0YXBvcnQpKQorCQkJYXRhX2Rldl9wcmludGsod2luZm8tPmF0YWRldiwgS0VSTl9ERUJVRywKKwkJCQkiR09UIE9ORTogKCVzKSByb290X3BvcnQgPSAweCVsbHgsIgorCQkJCSIgcG9ydF9udW0gPSAweCVsbHhcbiIsIHBhdGhuYW1lLAorCQkJCVNBVEFfUk9PVF9QT1JUKGRpbmZvLT5hZGRyZXNzKSwKKwkJCQlTQVRBX1BPUlRfTlVNQkVSKGRpbmZvLT5hZGRyZXNzKSk7CisJCS8qIGhldXJpc3RpY3M6ICovCisJCWlmIChTQVRBX1BPUlRfTlVNQkVSKGRpbmZvLT5hZGRyZXNzKSAhPSBOT19QT1JUX01VTFQpCisJCQlpZiAoYXRhX21zZ19wcm9iZSh3aW5mby0+YXRhcG9ydCkpCisJCQkJYXRhX2Rldl9wcmludGsod2luZm8tPmF0YWRldiwKKwkJCQkJS0VSTl9ERUJVRywgIndhcm5pbmc6IGRvbid0IgorCQkJCQkiIGtub3cgaG93IHRvIGhhbmRsZSBTQVRBIHBvcnQiCisJCQkJCSIgbXVsdGlwbGllclxuIik7CisJCWlmIChTQVRBX1JPT1RfUE9SVChkaW5mby0+YWRkcmVzcykgPT0KKwkJCXdpbmZvLT5hdGFwb3J0LT5wb3J0X25vICYmCisJCSAgICBTQVRBX1BPUlRfTlVNQkVSKGRpbmZvLT5hZGRyZXNzKSA9PSBOT19QT1JUX01VTFQpIHsKKwkJCWlmIChhdGFfbXNnX3Byb2JlKHdpbmZvLT5hdGFwb3J0KSkKKwkJCQlhdGFfZGV2X3ByaW50ayh3aW5mby0+YXRhZGV2LAorCQkJCQlLRVJOX0RFQlVHLAorCQkJCQkiVEhJUyBeXl5eXiBpcyB0aGUgcmVxdWVzdGVkIgorCQkJCQkiIFNBVEEgZHJpdmUgKGhhbmRsZSA9IDB4JXApXG4iLAorCQkJCQloYW5kbGUpOworCQkJd2luZm8tPnNhdGFfYWRyID0gZGluZm8tPmFkZHJlc3M7CisJCQl3aW5mby0+b2JqX2hhbmRsZSA9IGhhbmRsZTsKKwkJfQorCX0KK291dDoKKwlrZnJlZShkaW5mbyk7CitvdXQyOgorCWtmcmVlKHBhdGhuYW1lKTsKKworcmV0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEdldCB0aGUgU0FUQSBkcml2ZSBfQURSIG9iamVjdC4gKi8KK3N0YXRpYyBpbnQgZ2V0X3NhdGFfYWRyKHN0cnVjdCBkZXZpY2UgKmRldiwgYWNwaV9oYW5kbGUgaGFuZGxlLAorCQkJYWNwaV9pbnRlZ2VyIHBjaWRldmZuLCB1bnNpZ25lZCBpbnQgZHJpdmUsCisJCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiwgdTMyICpkZXZfYWRyKQoreworCWFjcGlfc3RhdHVzCXN0YXR1czsKKwlzdHJ1Y3Qgd2Fsa19pbmZvICp3aW5mbzsKKwlpbnQJCWVyciA9IC1FTk9NRU07CisKKwl3aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3YWxrX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdpbmZvKQorCQlnb3RvIG91dDsKKworCXdpbmZvLT5kZXYgPSBkZXY7CisJd2luZm8tPmF0YWRldiA9IGF0YWRldjsKKwl3aW5mby0+YXRhcG9ydCA9IGFwOworCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKGhhbmRsZSwgJndpbmZvLT5hZGV2KSA8IDApCisJCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKKwkJCWF0YV9kZXZfcHJpbnRrKHdpbmZvLT5hdGFkZXYsIEtFUk5fREVCVUcsCisJCQkJImFjcGlfYnVzX2dldF9kZXZpY2UgZmFpbGVkXG4iKTsKKwl3aW5mby0+aGFuZGxlID0gaGFuZGxlOworCXdpbmZvLT5wY2lkZXZmbiA9IHBjaWRldmZuOworCXdpbmZvLT5kcml2ZW51bSA9IGRyaXZlOworCisJc3RhdHVzID0gYWNwaV9nZXRfZGV2aWNlcyhOVUxMLCBnZXRfZGV2aWNlcywgd2luZm8sIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCisJCQlhdGFfZGV2X3ByaW50ayh3aW5mby0+YXRhZGV2LCBLRVJOX0RFQlVHLAorCQkJCSIlczogYWNwaV9nZXRfZGV2aWNlcyBmYWlsZWRcbiIsCisJCQkJX19GVU5DVElPTl9fKTsKKwkJZXJyID0gLUVOT0RFVjsKKwl9IGVsc2UgeworCQkqZGV2X2FkciA9IHdpbmZvLT5zYXRhX2FkcjsKKwkJYXRhZGV2LT5vYmpfaGFuZGxlID0gd2luZm8tPm9ial9oYW5kbGU7CisJCWVyciA9IDA7CisJfQorCWtmcmVlKHdpbmZvKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGRvX2RyaXZlX2dldF9HVEYgLSBnZXQgdGhlIGRyaXZlIGJvb3R1cCBkZWZhdWx0IHRhc2tmaWxlIHNldHRpbmdzCisgKiBAYXA6IHRoZSBhdGFfcG9ydCBmb3IgdGhlIGRyaXZlCisgKiBAaXg6IHRhcmdldCBhdGFfZGV2aWNlIChkcml2ZSkgaW5kZXgKKyAqIEBndGZfbGVuZ3RoOiBudW1iZXIgb2YgYnl0ZXMgb2YgX0dURiBkYXRhIHJldHVybmVkIGF0IEBndGZfYWRkcmVzcworICogQGd0Zl9hZGRyZXNzOiBidWZmZXIgY29udGFpbmluZyBfR1RGIHRhc2tmaWxlIGFycmF5cworICoKKyAqIFRoaXMgYXBwbGllcyB0byBib3RoIFBBVEEgYW5kIFNBVEEgZHJpdmVzLgorICoKKyAqIFRoZSBfR1RGIG1ldGhvZCBoYXMgbm8gaW5wdXQgcGFyYW1ldGVycy4KKyAqIEl0IHJldHVybnMgYSB2YXJpYWJsZSBudW1iZXIgb2YgcmVnaXN0ZXIgc2V0IHZhbHVlcyAocmVnaXN0ZXJzCisgKiBoZXggMUYxLi4xRjcsIHRhc2tmaWxlcykuCisgKiBUaGUgPHZhcmlhYmxlIG51bWJlcj4gaXMgbm90IGtub3duIGluIGFkdmFuY2UsIHNvIGhhdmUgQUNQSS1DQQorICogYWxsb2NhdGUgdGhlIGJ1ZmZlciBhcyBuZWVkZWQgYW5kIHJldHVybiBpdCwgdGhlbiBmcmVlIGl0IGxhdGVyLgorICoKKyAqIFRoZSByZXR1cm5lZCBAZ3RmX2xlbmd0aCBhbmQgQGd0Zl9hZGRyZXNzIGFyZSBvbmx5IHZhbGlkIGlmIHRoZQorICogZnVuY3Rpb24gcmV0dXJuIHZhbHVlIGlzIDAuCisgKi8KK3N0YXRpYyBpbnQgZG9fZHJpdmVfZ2V0X0dURihzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgaXgsCisJCQl1bnNpZ25lZCBpbnQgKmd0Zl9sZW5ndGgsIHVuc2lnbmVkIGxvbmcgKmd0Zl9hZGRyZXNzLAorCQkJdW5zaWduZWQgbG9uZyAqb2JqX2xvYykKK3sKKwlhY3BpX3N0YXR1cwkJCXN0YXR1czsKKwlhY3BpX2hhbmRsZQkJCWRldl9oYW5kbGUgPSBOVUxMOworCWFjcGlfaGFuZGxlCQkJY2hhbl9oYW5kbGUsIGRyaXZlX2hhbmRsZTsKKwlhY3BpX2ludGVnZXIJCQlwY2lkZXZmbiA9IDA7CisJdTMyCQkJCWRldl9hZHI7CisJc3RydWN0IGFjcGlfYnVmZmVyCQlvdXRwdXQ7CisJdW5pb24gYWNwaV9vYmplY3QgCQkqb3V0X29iajsKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldiA9IGFwLT5ob3N0LT5kZXY7CisJc3RydWN0IGF0YV9kZXZpY2UJCSphdGFkZXYgPSAmYXAtPmRldmljZVtpeF07CisJaW50CQkJCWVyciA9IC1FTk9ERVY7CisKKwkqZ3RmX2xlbmd0aCA9IDA7CisJKmd0Zl9hZGRyZXNzID0gMFVMOworCSpvYmpfbG9jID0gMFVMOworCisJaWYgKG5vYWNwaSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYXRhX21zZ19wcm9iZShhcCkpCisJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywKKwkJCSIlczogRU5URVI6IGFwLT5pZDogJWQsIHBvcnQjOiAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgYXAtPmlkLCBhcC0+cG9ydF9ubyk7CisKKwlpZiAoIWF0YV9kZXZfZW5hYmxlZChhdGFkZXYpIHx8IChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkpIHsKKwkJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQorCQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0RFQlVHLCAiJXM6IEVSUjogIgorCQkJCSJhdGFfZGV2X3ByZXNlbnQ6ICVkLCBQT1JUX0RJU0FCTEVEOiAlbHVcbiIsCisJCQkJX19GVU5DVElPTl9fLCBhdGFfZGV2X2VuYWJsZWQoYXRhZGV2KSwKKwkJCQlhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIERvbid0IGNvbnRpbnVlIGlmIGRldmljZSBoYXMgbm8gX0FEUiBtZXRob2QuCisJICogX0dURiBpcyBpbnRlbmRlZCBmb3Iga25vd24gbW90aGVyYm9hcmQgZGV2aWNlcy4gKi8KKwlpZiAoIShhcC0+Y2JsID09IEFUQV9DQkxfU0FUQSkpIHsKKwkJZXJyID0gcGF0YV9nZXRfZGV2X2hhbmRsZShkZXYsICZkZXZfaGFuZGxlLCAmcGNpZGV2Zm4pOworCQlpZiAoZXJyIDwgMCkgeworCQkJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQorCQkJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywKKwkJCQkJIiVzOiBwYXRhX2dldF9kZXZfaGFuZGxlIGZhaWxlZCAoJWQpXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIGVycik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCWVyciA9IHNhdGFfZ2V0X2Rldl9oYW5kbGUoZGV2LCAmZGV2X2hhbmRsZSwgJnBjaWRldmZuKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKKwkJCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsCisJCQkJCSIlczogc2F0YV9nZXRfZGV2X2hhbmRsZSBmYWlsZWQgKCVkXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIGVycik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIEdldCB0aGlzIGRyaXZlJ3MgX0FEUiBpbmZvLiBpZiBub3QgYWxyZWFkeSBrbm93bi4gKi8KKwlpZiAoIWF0YWRldi0+b2JqX2hhbmRsZSkgeworCQlpZiAoIShhcC0+Y2JsID09IEFUQV9DQkxfU0FUQSkpIHsKKwkJCS8qIGdldCBjaGlsZCBvYmplY3RzIG9mIGRldl9oYW5kbGUgPT0gY2hhbm5lbCBvYmplY3RzLAorCSAJCSAqICsgX3RoZWlyXyBjaGlsZHJlbiA9PSBkcml2ZSBvYmplY3RzICovCisJCQkvKiBjaGFubmVsIGlzIGFwLT5wb3J0X25vICovCisJCQljaGFuX2hhbmRsZSA9IGFjcGlfZ2V0X2NoaWxkKGRldl9oYW5kbGUsCisJCQkJCQlhcC0+cG9ydF9ubyk7CisJCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCisJCQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0RFQlVHLAorCQkJCQkiJXM6IGNoYW4gYWRyPSVkOiBjaGFuX2hhbmRsZT0weCVwXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIGFwLT5wb3J0X25vLAorCQkJCQljaGFuX2hhbmRsZSk7CisJCQlpZiAoIWNoYW5faGFuZGxlKSB7CisJCQkJZXJyID0gLUVOT0RFVjsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCS8qIFRCRDogY291bGQgYWxzbyBjaGVjayBBQ1BJIG9iamVjdCBWQUxJRCBiaXRzICovCisJCQlkcml2ZV9oYW5kbGUgPSBhY3BpX2dldF9jaGlsZChjaGFuX2hhbmRsZSwgaXgpOworCQkJaWYgKCFkcml2ZV9oYW5kbGUpIHsKKwkJCQllcnIgPSAtRU5PREVWOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJZGV2X2FkciA9IGl4OworCQkJYXRhZGV2LT5vYmpfaGFuZGxlID0gZHJpdmVfaGFuZGxlOworCQl9IGVsc2UgewkvKiBmb3IgU0FUQSBtb2RlICovCisJCQlkZXZfYWRyID0gU0FUQV9BRFJfUlNWRDsKKwkJCWVyciA9IGdldF9zYXRhX2FkcihkZXYsIGRldl9oYW5kbGUsIHBjaWRldmZuLCAwLAorCQkJCQlhcCwgYXRhZGV2LCAmZGV2X2Fkcik7CisJCX0KKwkJaWYgKGVyciA8IDAgfHwgZGV2X2FkciA9PSBTQVRBX0FEUl9SU1ZEIHx8CisJCSAgICAhYXRhZGV2LT5vYmpfaGFuZGxlKSB7CisJCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCisJCQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0RFQlVHLAorCQkJCQkiJXM6IGdldF9zYXRhL3BhdGFfYWRyIGZhaWxlZDogIgorCQkJCQkiZXJyPSVkLCBkZXZfYWRyPSV1LCBvYmpfaGFuZGxlPTB4JXBcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgZXJyLCBkZXZfYWRyLAorCQkJCQlhdGFkZXYtPm9ial9oYW5kbGUpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBTZXR0aW5nIHVwIG91dHB1dCBidWZmZXIgKi8KKwlvdXRwdXQubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CisJb3V0cHV0LnBvaW50ZXIgPSBOVUxMOwkvKiBBQ1BJLUNBIHNldHMgdGhpczsgc2F2ZS9mcmVlIGl0IGxhdGVyICovCisKKwkvKiBfR1RGIGhhcyBubyBpbnB1dCBwYXJhbWV0ZXJzICovCisJZXJyID0gLUVJTzsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChhdGFkZXYtPm9ial9oYW5kbGUsICJfR1RGIiwKKwkJCQkJTlVMTCwgJm91dHB1dCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKKwkJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywKKwkJCQkiJXM6IFJ1biBfR1RGIGVycm9yOiBzdGF0dXMgPSAweCV4XG4iLAorCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFvdXRwdXQubGVuZ3RoIHx8ICFvdXRwdXQucG9pbnRlcikgeworCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCisJCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsICIlczogUnVuIF9HVEY6ICIKKwkJCQkibGVuZ3RoIG9yIHB0ciBpcyBOVUxMICgweCVsbHgsIDB4JXApXG4iLAorCQkJCV9fRlVOQ1RJT05fXywKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKW91dHB1dC5sZW5ndGgsCisJCQkJb3V0cHV0LnBvaW50ZXIpOworCQlrZnJlZShvdXRwdXQucG9pbnRlcik7CisJCWdvdG8gb3V0OworCX0KKworCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKKwlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKKwkJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQorCQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0RFQlVHLCAiJXM6IFJ1biBfR1RGOiAiCisJCQkJImVycm9yOiBleHBlY3RlZCBvYmplY3QgdHlwZSBvZiAiCisJCQkJIiBBQ1BJX1RZUEVfQlVGRkVSLCBnb3QgMHgleFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIG91dF9vYmotPnR5cGUpOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW91dF9vYmotPmJ1ZmZlci5sZW5ndGggfHwgIW91dF9vYmotPmJ1ZmZlci5wb2ludGVyIHx8CisJICAgIG91dF9vYmotPmJ1ZmZlci5sZW5ndGggJSBSRUdTX1BFUl9HVEYpIHsKKwkJaWYgKGF0YV9tc2dfZHJ2KGFwKSkKKwkJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9FUlIsCisJCQkJIiVzOiB1bmV4cGVjdGVkIEdURiBsZW5ndGggKCVkKSBvciBhZGRyICgweCVwKVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIG91dF9vYmotPmJ1ZmZlci5sZW5ndGgsCisJCQkJb3V0X29iai0+YnVmZmVyLnBvaW50ZXIpOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwkqZ3RmX2xlbmd0aCA9IG91dF9vYmotPmJ1ZmZlci5sZW5ndGg7CisJKmd0Zl9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpb3V0X29iai0+YnVmZmVyLnBvaW50ZXI7CisJKm9ial9sb2MgPSAodW5zaWduZWQgbG9uZylvdXRfb2JqOworCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKKwkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0RFQlVHLCAiJXM6IHJldHVybmluZyAiCisJCQkiZ3RmX2xlbmd0aD0lZCwgZ3RmX2FkZHJlc3M9MHglbHgsIG9ial9sb2M9MHglbHhcbiIsCisJCQlfX0ZVTkNUSU9OX18sICpndGZfbGVuZ3RoLCAqZ3RmX2FkZHJlc3MsICpvYmpfbG9jKTsKKwllcnIgPSAwOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogdGFza2ZpbGVfbG9hZF9yYXcgLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVycyB0byBob3N0IGNvbnRyb2xsZXIKKyAqIEBhcDogUG9ydCB0byB3aGljaCBvdXRwdXQgaXMgc2VudAorICogQGd0ZjogcmF3IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQgKDB4MWYxIC0gMHgxZjcpCisgKgorICogT3V0cHV0cyBBVEEgdGFza2ZpbGUgdG8gc3RhbmRhcmQgQVRBIGhvc3QgY29udHJvbGxlciB1c2luZyBNTUlPCisgKiBvciBQSU8gYXMgaW5kaWNhdGVkIGJ5IHRoZSBBVEFfRkxBR19NTUlPIGZsYWcuCisgKiBXcml0ZXMgdGhlIGNvbnRyb2wsIGZlYXR1cmUsIG5zZWN0LCBsYmFsLCBsYmFtLCBhbmQgbGJhaCByZWdpc3RlcnMuCisgKiBPcHRpb25hbGx5IChBVEFfVEZMQUdfTEJBNDgpIHdyaXRlcyBob2JfZmVhdHVyZSwgaG9iX25zZWN0LAorICogaG9iX2xiYWwsIGhvYl9sYmFtLCBhbmQgaG9iX2xiYWguCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWl0cyBmb3IgaWRsZSAoIUJVU1kgYW5kICFEUlEpIGFmdGVyIHdyaXRpbmcKKyAqIHJlZ2lzdGVycy4gIElmIHRoZSBjb250cm9sIHJlZ2lzdGVyIGhhcyBhIG5ldyB2YWx1ZSwgdGhpcworICogZnVuY3Rpb24gYWxzbyB3YWl0cyBmb3IgaWRsZSBhZnRlciB3cml0aW5nIGNvbnRyb2wgYW5kIGJlZm9yZQorICogd3JpdGluZyB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycy4KKyAqCisgKiBMT0NLSU5HOiBUQkQ6CisgKiBJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3N0YXRpYyB2b2lkIHRhc2tmaWxlX2xvYWRfcmF3KHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiwKKwkJCQljb25zdCBzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkgKmd0ZikKK3sKKwlpZiAoYXRhX21zZ19wcm9iZShhcCkpCisJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywgIiVzOiAoMHgxZjEtMWY3KTogaGV4OiAiCisJCQkiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCV9fRlVOQ1RJT05fXywKKwkJCWd0Zi0+dGZhWzBdLCBndGYtPnRmYVsxXSwgZ3RmLT50ZmFbMl0sCisJCQlndGYtPnRmYVszXSwgZ3RmLT50ZmFbNF0sIGd0Zi0+dGZhWzVdLCBndGYtPnRmYVs2XSk7CisKKwlpZiAoKGd0Zi0+dGZhWzBdID09IDApICYmIChndGYtPnRmYVsxXSA9PSAwKSAmJiAoZ3RmLT50ZmFbMl0gPT0gMCkKKwkgICAgJiYgKGd0Zi0+dGZhWzNdID09IDApICYmIChndGYtPnRmYVs0XSA9PSAwKSAmJiAoZ3RmLT50ZmFbNV0gPT0gMCkKKwkgICAgJiYgKGd0Zi0+dGZhWzZdID09IDApKQorCQlyZXR1cm47CisKKwlpZiAoYXAtPm9wcy0+cWNfaXNzdWUpIHsKKwkJc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsKKwkJdW5zaWduZWQgaW50IGVycjsKKworCQlhdGFfdGZfaW5pdChhdGFkZXYsICZ0Zik7CisKKwkJLyogY29udmVydCBndGYgdG8gdGYgKi8KKwkJdGYuZmxhZ3MgfD0gQVRBX1RGTEFHX0lTQUREUiB8IEFUQV9URkxBR19ERVZJQ0U7IC8qIFRCRCAqLworCQl0Zi5wcm90b2NvbCA9IGF0YWRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEFQSSA/CisJCQlBVEFfUFJPVF9BVEFQSV9OT0RBVEEgOiBBVEFfUFJPVF9OT0RBVEE7CisJCXRmLmZlYXR1cmUgPSBndGYtPnRmYVswXTsJLyogMHgxZjEgKi8KKwkJdGYubnNlY3QgICA9IGd0Zi0+dGZhWzFdOwkvKiAweDFmMiAqLworCQl0Zi5sYmFsICAgID0gZ3RmLT50ZmFbMl07CS8qIDB4MWYzICovCisJCXRmLmxiYW0gICAgPSBndGYtPnRmYVszXTsJLyogMHgxZjQgKi8KKwkJdGYubGJhaCAgICA9IGd0Zi0+dGZhWzRdOwkvKiAweDFmNSAqLworCQl0Zi5kZXZpY2UgID0gZ3RmLT50ZmFbNV07CS8qIDB4MWY2ICovCisJCXRmLmNvbW1hbmQgPSBndGYtPnRmYVs2XTsJLyogMHgxZjcgKi8KKworCQllcnIgPSBhdGFfZXhlY19pbnRlcm5hbChhdGFkZXYsICZ0ZiwgTlVMTCwgRE1BX05PTkUsIE5VTEwsIDApOworCQlpZiAoZXJyICYmIGF0YV9tc2dfcHJvYmUoYXApKQorCQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0VSUiwKKwkJCQkiJXM6IGF0YV9leGVjX2ludGVybmFsIGZhaWxlZDogJXVcbiIsCisJCQkJX19GVU5DVElPTl9fLCBlcnIpOworCX0gZWxzZQorCQlpZiAoYXRhX21zZ193YXJuKGFwKSkKKwkJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9XQVJOSU5HLAorCQkJCSIlczogU0FUQSBkcml2ZXIgaXMgbWlzc2luZyBxY19pc3N1ZSBmdW5jdGlvbiIKKwkJCQkiIGVudHJ5IHBvaW50c1xuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworfQorCisvKioKKyAqIGRvX2RyaXZlX3NldF90YXNrZmlsZXMgLSB3cml0ZSB0aGUgZHJpdmUgdGFza2ZpbGUgc2V0dGluZ3MgZnJvbSBfR1RGCisgKiBAYXA6IHRoZSBhdGFfcG9ydCBmb3IgdGhlIGRyaXZlCisgKiBAYXRhZGV2OiB0YXJnZXQgYXRhX2RldmljZQorICogQGd0Zl9sZW5ndGg6IHRvdGFsIG51bWJlciBvZiBieXRlcyBvZiBfR1RGIHRhc2tmaWxlcworICogQGd0Zl9hZGRyZXNzOiBsb2NhdGlvbiBvZiBfR1RGIHRhc2tmaWxlIGFycmF5cworICoKKyAqIFRoaXMgYXBwbGllcyB0byBib3RoIFBBVEEgYW5kIFNBVEEgZHJpdmVzLgorICoKKyAqIFdyaXRlIHtndGZfYWRkcmVzcywgbGVuZ3RoIGd0Zl9sZW5ndGh9IGluIGdyb3VwcyBvZgorICogUkVHU19QRVJfR1RGIGJ5dGVzLgorICovCitzdGF0aWMgaW50IGRvX2RyaXZlX3NldF90YXNrZmlsZXMoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiwgdW5zaWduZWQgaW50IGd0Zl9sZW5ndGgsCisJCXVuc2lnbmVkIGxvbmcgZ3RmX2FkZHJlc3MpCit7CisJaW50CQkJZXJyID0gLUVOT0RFVjsKKwlpbnQJCQlndGZfY291bnQgPSBndGZfbGVuZ3RoIC8gUkVHU19QRVJfR1RGOworCWludAkJCWl4OworCXN0cnVjdCB0YXNrZmlsZV9hcnJheQkqZ3RmOworCisJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQorCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsCisJCQkiJXM6IEVOVEVSOiBhcC0+aWQ6ICVkLCBwb3J0IzogJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGFwLT5pZCwgYXAtPnBvcnRfbm8pOworCisJaWYgKG5vYWNwaSB8fCAhKGFwLT5jYmwgPT0gQVRBX0NCTF9TQVRBKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWF0YV9kZXZfZW5hYmxlZChhdGFkZXYpIHx8IChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkpCisJCWdvdG8gb3V0OworCWlmICghZ3RmX2NvdW50KQkJLyogc2hvdWxkbid0IGJlIGhlcmUgKi8KKwkJZ290byBvdXQ7CisKKwlpZiAoZ3RmX2xlbmd0aCAlIFJFR1NfUEVSX0dURikgeworCQlpZiAoYXRhX21zZ19kcnYoYXApKQorCQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0VSUiwKKwkJCQkiJXM6IHVuZXhwZWN0ZWQgR1RGIGxlbmd0aCAoJWQpXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgZ3RmX2xlbmd0aCk7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaXggPSAwOyBpeCA8IGd0Zl9jb3VudDsgaXgrKykgeworCQlndGYgPSAoc3RydWN0IHRhc2tmaWxlX2FycmF5ICopCisJCQkoZ3RmX2FkZHJlc3MgKyBpeCAqIFJFR1NfUEVSX0dURik7CisKKwkJLyogc2VuZCBhbGwgVGFza0ZpbGUgcmVnaXN0ZXJzICgweDFmMS0weDFmNykgKmluKnRoYXQqb3JkZXIqICovCisJCXRhc2tmaWxlX2xvYWRfcmF3KGFwLCBhdGFkZXYsIGd0Zik7CisJfQorCisJZXJyID0gMDsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGF0YV9hY3BpX2V4ZWNfdGZzIC0gZ2V0IHRoZW4gd3JpdGUgZHJpdmUgdGFza2ZpbGUgc2V0dGluZ3MKKyAqIEBhcDogdGhlIGF0YV9wb3J0IGZvciB0aGUgZHJpdmUKKyAqCisgKiBUaGlzIGFwcGxpZXMgdG8gYm90aCBQQVRBIGFuZCBTQVRBIGRyaXZlcy4KKyAqLworaW50IGF0YV9hY3BpX2V4ZWNfdGZzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJaW50CQlpeDsKKwlpbnQJCXJldCA9MDsKKwl1bnNpZ25lZCBpbnQJZ3RmX2xlbmd0aDsKKwl1bnNpZ25lZCBsb25nCWd0Zl9hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcJb2JqX2xvYzsKKworCWlmIChub2FjcGkpCisJCXJldHVybiAwOworCisJZm9yIChpeCA9IDA7IGl4IDwgQVRBX01BWF9ERVZJQ0VTOyBpeCsrKSB7CisJCWlmICghYXRhX2Rldl9lbmFibGVkKCZhcC0+ZGV2aWNlW2l4XSkpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBkb19kcml2ZV9nZXRfR1RGKGFwLCBpeCwKKwkJCQkmZ3RmX2xlbmd0aCwgJmd0Zl9hZGRyZXNzLCAmb2JqX2xvYyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCisJCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0RFQlVHLAorCQkJCQkiJXM6IGdldF9HVEYgZXJyb3IgKCVkKVxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCByZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBkb19kcml2ZV9zZXRfdGFza2ZpbGVzKGFwLCAmYXAtPmRldmljZVtpeF0sCisJCQkJZ3RmX2xlbmd0aCwgZ3RmX2FkZHJlc3MpOworCQlrZnJlZSgodm9pZCAqKW9ial9sb2MpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQorCQkJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9ERUJVRywKKwkJCQkJIiVzOiBzZXRfdGFza2ZpbGVzIGVycm9yICglZClcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgcmV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBhdGFfYWNwaV9wdXNoX2lkIC0gc2VuZCBJZGVudGlmeSBkYXRhIHRvIGRyaXZlCisgKiBAYXA6IHRoZSBhdGFfcG9ydCBmb3IgdGhlIGRyaXZlCisgKiBAaXg6IGRyaXZlIGluZGV4CisgKgorICogX1NERCBBQ1BJIG9iamVjdDogZm9yIFNBVEEgbW9kZSBvbmx5CisgKiBNdXN0IGJlIGFmdGVyIElkZW50aWZ5IChQYWNrZXQpIERldmljZSAtLSB1c2VzIGl0cyBkYXRhCisgKiBBVE0gdGhpcyBmdW5jdGlvbiBuZXZlciByZXR1cm5zIGEgZmFpbHVyZS4gIEl0IGlzIGFuIG9wdGlvbmFsCisgKiBtZXRob2QgYW5kIGlmIGl0IGZhaWxzIGZvciB3aGF0ZXZlciByZWFzb24sIHdlIHNob3VsZCBzdGlsbAorICoganVzdCBrZWVwIGdvaW5nLgorICovCitpbnQgYXRhX2FjcGlfcHVzaF9pZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgaXgpCit7CisJYWNwaV9oYW5kbGUgICAgICAgICAgICAgICAgICAgICBoYW5kbGU7CisJYWNwaV9pbnRlZ2VyICAgICAgICAgICAgICAgICAgICBwY2lkZXZmbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycjsKKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAgICAgICAgICpkZXYgPSBhcC0+aG9zdC0+ZGV2OworCXN0cnVjdCBhdGFfZGV2aWNlICAgICAgICAgICAgICAgKmF0YWRldiA9ICZhcC0+ZGV2aWNlW2l4XTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9hZHI7CisJYWNwaV9zdGF0dXMgICAgICAgICAgICAgICAgICAgICBzdGF0dXM7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgICAgICAgICBpbnB1dDsKKwl1bmlvbiBhY3BpX29iamVjdCAgICAgICAgICAgICAgIGluX3BhcmFtc1sxXTsKKworCWlmIChub2FjcGkpCisJCXJldHVybiAwOworCisJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQorCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsCisJCQkiJXM6IGFwLT5pZDogJWQsIGl4ID0gJWQsIHBvcnQjOiAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgYXAtPmlkLCBpeCwgYXAtPnBvcnRfbm8pOworCisJLyogRG9uJ3QgY29udGludWUgaWYgbm90IGEgU0FUQSBkZXZpY2UuICovCisJaWYgKCEoYXAtPmNibCA9PSBBVEFfQ0JMX1NBVEEpKSB7CisJCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKKwkJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywKKwkJCQkiJXM6IE5vdCBhIFNBVEEgZGV2aWNlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBEb24ndCBjb250aW51ZSBpZiBkZXZpY2UgaGFzIG5vIF9BRFIgbWV0aG9kLgorCSAqIF9TREQgaXMgaW50ZW5kZWQgZm9yIGtub3duIG1vdGhlcmJvYXJkIGRldmljZXMuICovCisJZXJyID0gc2F0YV9nZXRfZGV2X2hhbmRsZShkZXYsICZoYW5kbGUsICZwY2lkZXZmbik7CisJaWYgKGVyciA8IDApIHsKKwkJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQorCQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0RFQlVHLAorCQkJCSIlczogc2F0YV9nZXRfZGV2X2hhbmRsZSBmYWlsZWQgKCVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IHRoaXMgZHJpdmUncyBfQURSIGluZm8sIGlmIG5vdCBhbHJlYWR5IGtub3duICovCisJaWYgKCFhdGFkZXYtPm9ial9oYW5kbGUpIHsKKwkJZGV2X2FkciA9IFNBVEFfQURSX1JTVkQ7CisJCWVyciA9IGdldF9zYXRhX2FkcihkZXYsIGhhbmRsZSwgcGNpZGV2Zm4sIGl4LCBhcCwgYXRhZGV2LAorCQkJCQkmZGV2X2Fkcik7CisJCWlmIChlcnIgPCAwIHx8IGRldl9hZHIgPT0gU0FUQV9BRFJfUlNWRCB8fAorCQkJIWF0YWRldi0+b2JqX2hhbmRsZSkgeworCQkJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQorCQkJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywKKwkJCQkJIiVzOiBnZXRfc2F0YV9hZHIgZmFpbGVkOiAiCisJCQkJCSJlcnI9JWQsIGRldl9hZHI9JXUsIG9ial9oYW5kbGU9MHglcFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCBlcnIsIGRldl9hZHIsCisJCQkJCWF0YWRldi0+b2JqX2hhbmRsZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIEdpdmUgdGhlIGRyaXZlIElkZW50aWZ5IGRhdGEgdG8gdGhlIGRyaXZlIHZpYSB0aGUgX1NERCBtZXRob2QgKi8KKwkvKiBfU0REOiBzZXQgdXAgaW5wdXQgcGFyYW1ldGVycyAqLworCWlucHV0LmNvdW50ID0gMTsKKwlpbnB1dC5wb2ludGVyID0gaW5fcGFyYW1zOworCWluX3BhcmFtc1swXS50eXBlID0gQUNQSV9UWVBFX0JVRkZFUjsKKwlpbl9wYXJhbXNbMF0uYnVmZmVyLmxlbmd0aCA9IHNpemVvZihhdGFkZXYtPmlkWzBdKSAqIEFUQV9JRF9XT1JEUzsKKwlpbl9wYXJhbXNbMF0uYnVmZmVyLnBvaW50ZXIgPSAodTggKilhdGFkZXYtPmlkOworCS8qIE91dHB1dCBidWZmZXI6IF9TREQgaGFzIG5vIG91dHB1dCAqLworCisJLyogSXQncyBPSyBmb3IgX1NERCB0byBiZSBtaXNzaW5nIHRvby4gKi8KKwlzd2FwX2J1Zl9sZTE2KGF0YWRldi0+aWQsIEFUQV9JRF9XT1JEUyk7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoYXRhZGV2LT5vYmpfaGFuZGxlLCAiX1NERCIsICZpbnB1dCwgTlVMTCk7CisJc3dhcF9idWZfbGUxNihhdGFkZXYtPmlkLCBBVEFfSURfV09SRFMpOworCisJZXJyID0gQUNQSV9GQUlMVVJFKHN0YXR1cykgPyAtRUlPIDogMDsKKwlpZiAoZXJyIDwgMCkgeworCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCisJCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsCisJCQkJImF0YSV1KCV1KTogJXMgX1NERCBlcnJvcjogc3RhdHVzID0gMHgleFxuIiwKKwkJCQlhcC0+aWQsIGFwLT5kZXZpY2UtPmRldm5vLAorCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9CisKKwkvKiBhbHdheXMgcmV0dXJuIHN1Y2Nlc3MgKi8KK291dDoKKwlyZXR1cm4gMDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCAyNWQ4ZDNmLi5lOTAwYzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTkzLDYgKzkzLDEwIEBACiBtb2R1bGVfcGFyYW0oYXRhX3Byb2JlX3RpbWVvdXQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGF0YV9wcm9iZV90aW1lb3V0LCAiU2V0IEFUQSBwcm9iaW5nIHRpbWVvdXQgKHNlY29uZHMpIik7CiAKK2ludCBub2FjcGk7Cittb2R1bGVfcGFyYW0obm9hY3BpLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhub2FjcGksICJEaXNhYmxlcyB0aGUgdXNlIG9mIEFDUEkgaW4gc3VzcGVuZC9yZXN1bWUgd2hlbiBzZXQiKTsKKwogTU9EVUxFX0FVVEhPUigiSmVmZiBHYXJ6aWsiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTGlicmFyeSBtb2R1bGUgZm9yIEFUQSBkZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0xNDEwLDcgKzE0MTQsMTYgQEAKIAl9CiAKIAl0Zi5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKLQl0Zi5mbGFncyB8PSBBVEFfVEZMQUdfUE9MTElORzsgLyogZm9yIHBvbGxpbmcgcHJlc2VuY2UgZGV0ZWN0aW9uICovCisKKwkvKiBTb21lIGRldmljZXMgY2hva2UgaWYgVEYgcmVnaXN0ZXJzIGNvbnRhaW4gZ2FyYmFnZS4gIE1ha2UKKwkgKiBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4KKwkgKi8KKwl0Zi5mbGFncyB8PSBBVEFfVEZMQUdfSVNBRERSIHwgQVRBX1RGTEFHX0RFVklDRTsKKworCS8qIERldmljZSBwcmVzZW5jZSBkZXRlY3Rpb24gaXMgdW5yZWxpYWJsZSBvbiBzb21lCisJICogY29udHJvbGxlcnMuICBBbHdheXMgcG9sbCBJREVOVElGWSBpZiBhdmFpbGFibGUuCisJICovCisJdGYuZmxhZ3MgfD0gQVRBX1RGTEFHX1BPTExJTkc7CiAKIAllcnJfbWFzayA9IGF0YV9leGVjX2ludGVybmFsKGRldiwgJnRmLCBOVUxMLCBETUFfRlJPTV9ERVZJQ0UsCiAJCQkJICAgICBpZCwgc2l6ZW9mKGlkWzBdKSAqIEFUQV9JRF9XT1JEUyk7CkBAIC0xNTU1LDYgKzE1NjgsMTYgQEAKIAkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAiJXM6IEVOVEVSLCBob3N0ICV1LCBkZXYgJXVcbiIsCiAJCQkgICAgICAgX19GVU5DVElPTl9fLCBhcC0+aWQsIGRldi0+ZGV2bm8pOwogCisJLyogc2V0IF9TREQgKi8KKwlyYyA9IGF0YV9hY3BpX3B1c2hfaWQoYXAsIGRldi0+ZGV2bm8pOworCWlmIChyYykgeworCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fV0FSTklORywgImZhaWxlZCB0byBzZXQgX1NERCglZClcbiIsCisJCQlyYyk7CisJfQorCisJLyogcmV0cmlldmUgYW5kIGV4ZWN1dGUgdGhlIEFUQSB0YXNrIGZpbGUgb2YgX0dURiAqLworCWF0YV9hY3BpX2V4ZWNfdGZzKGFwKTsKKwogCS8qIHByaW50IGRldmljZSBjYXBhYmlsaXRpZXMgKi8KIAlpZiAoYXRhX21zZ19wcm9iZShhcCkpCiAJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKaW5kZXggMDZjY2YyMy4uMGFkNzc4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLmgKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIGV4dGVybiBpbnQgYXRhcGlfZW5hYmxlZDsKIGV4dGVybiBpbnQgYXRhcGlfZG1hZGlyOwogZXh0ZXJuIGludCBsaWJhdGFfZnVhOworZXh0ZXJuIGludCBub2FjcGk7CiBleHRlcm4gc3RydWN0IGF0YV9xdWV1ZWRfY21kICphdGFfcWNfbmV3X2luaXQoc3RydWN0IGF0YV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGF0YV9idWlsZF9yd190ZihzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Ziwgc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKIAkJCSAgIHU2NCBibG9jaywgdTMyIG5fYmxvY2ssIHVuc2lnbmVkIGludCB0Zl9mbGFncywKQEAgLTg3LDYgKzg4LDIwIEBACiBleHRlcm4gc3RydWN0IGF0YV9wcm9iZV9lbnQgKmF0YV9wcm9iZV9lbnRfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkJIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0KTsKIAorLyogbGliYXRhLWFjcGkuYyAqLworI2lmZGVmIENPTkZJR19TQVRBX0FDUEkKK2V4dGVybiBpbnQgYXRhX2FjcGlfZXhlY190ZnMoc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gaW50IGF0YV9hY3BpX3B1c2hfaWQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGl4KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhdGFfYWNwaV9leGVjX3RmcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgYXRhX2FjcGlfcHVzaF9pZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgaXgpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogLyogbGliYXRhLXNjc2kuYyAqLwogZXh0ZXJuIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSBhdGFfc2NzaV90cmFuc3BvcnRfdGVtcGxhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jIGIvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYwppbmRleCA0MjIzZTEwLi45OGMxZmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKQEAgLTg5LDkgKzg5LDEwIEBACiBzdGF0aWMgaW50IGh0NjU2MGE7CQkJLyogSFQgNjU2MEEgb24gcHJpbWFyeSAxLCBzZWNvbmRhcnkgMiwgYm90aCAzICovCiBzdGF0aWMgaW50IGh0NjU2MGI7CQkJLyogSFQgNjU2MEEgb24gcHJpbWFyeSAxLCBzZWNvbmRhcnkgMiwgYm90aCAzICovCiBzdGF0aWMgaW50IG9wdGk4MmM2MTFhOwkJCS8qIE9wdGk4MmM2MTFBIG9uIHByaW1hcnkgMSwgc2Vjb25kYXJ5IDIsIGJvdGggMyAqLwotc3RhdGljIGludCBvcHRpODJjNDZ4OwkJLyogT3B0aSA4MmM0NjVNViBwcmVzZW50IChwcmkvc2VjIGF1dG9kZXRlY3QpICovCitzdGF0aWMgaW50IG9wdGk4MmM0Nng7CQkJLyogT3B0aSA4MmM0NjVNViBwcmVzZW50IChwcmkvc2VjIGF1dG9kZXRlY3QpICovCiBzdGF0aWMgaW50IGF1dG9zcGVlZDsJCQkvKiBDaGlwIHByZXNlbnQgd2hpY2ggc25vb3BzIHNwZWVkIGNoYW5nZXMgKi8KIHN0YXRpYyBpbnQgcGlvX21hc2sgPSAweDFGOwkJLyogUElPIHJhbmdlIGZvciBhdXRvc3BlZWQgZGV2aWNlcyAqLworc3RhdGljIGludCBpb3JkeV9tYXNrID0gMHhGRkZGRkZGRjsJLyogVXNlIGlvcmR5IGlmIGF2YWlsYWJsZSAqLwogCiAvKioKICAqCWxlZ2FjeV9zZXRfbW9kZQkJLQltb2RlIHNldHRpbmcKQEAgLTExMyw2ICsxMTQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykgewogCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gJmFwLT5kZXZpY2VbaV07CiAJCWlmIChhdGFfZGV2X2VuYWJsZWQoZGV2KSkgeworCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0lORk8sICJjb25maWd1cmVkIGZvciBQSU9cbiIpOwogCQkJZGV2LT5waW9fbW9kZSA9IFhGRVJfUElPXzA7CiAJCQlkZXYtPnhmZXJfbW9kZSA9IFhGRVJfUElPXzA7CiAJCQlkZXYtPnhmZXJfc2hpZnQgPSBBVEFfU0hJRlRfUElPOwpAQCAtNjk1LDYgKzY5Nyw3IEBACiAJdm9pZCBfX2lvbWVtICppb19hZGRyLCAqY3RybF9hZGRyOwogCWludCBwaW9fbW9kZXMgPSBwaW9fbWFzazsKIAl1MzIgbWFzayA9ICgxIDw8IHBvcnQpOworCXUzMiBpb3JkeSA9IChpb3JkeV9tYXNrICYgbWFzaykgPyAwOiBBVEFfRkxBR19OT19JT1JEWTsKIAlpbnQgcmV0OwogCiAJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJWX05BTUUsIG5yX2xlZ2FjeV9ob3N0LCBOVUxMLCAwKTsKQEAgLTcxNSw2ICs3MTgsNyBAQAogCWlmIChodDY1NjBhICYgbWFzaykgewogCQlvcHMgPSAmaHQ2NTYwYV9wb3J0X29wczsKIAkJcGlvX21vZGVzID0gMHgwNzsKKwkJaW9yZHkgPSBBVEFfRkxBR19OT19JT1JEWTsKIAl9CiAJaWYgKGh0NjU2MGIgJiBtYXNrKSB7CiAJCW9wcyA9ICZodDY1NjBiX3BvcnRfb3BzOwpAQCAtNzUwLDYgKzc1NCw3IEBACiAJCQlwcmludGsoS0VSTl9JTkZPICJQREMyMDIzMC1DLzIwNjMwIFZMQiBBVEEgY29udHJvbGxlciBkZXRlY3RlZC5cbiIpOwogCQkJCXBpb19tb2RlcyA9IDB4MDc7CiAJCQlvcHMgPSAmcGRjMjAyMzBfcG9ydF9vcHM7CisJCQlpb3JkeSA9IEFUQV9GTEFHX05PX0lPUkRZOwogCQkJdWRlbGF5KDEwMCk7CiAJCQlpbmIoMHgxRjUpOwogCQl9IGVsc2UgewpAQCAtNzY3LDYgKzc3Miw3IEBACiAJLyogQ2hpcCBkb2VzIG1vZGUgc2V0dGluZyBieSBjb21tYW5kIHNub29waW5nICovCiAJaWYgKG9wcyA9PSAmbGVnYWN5X3BvcnRfb3BzICYmIChhdXRvc3BlZWQgJiBtYXNrKSkKIAkJb3BzID0gJnNpbXBsZV9wb3J0X29wczsKKwogCW1lbXNldCgmYWUsIDAsIHNpemVvZihzdHJ1Y3QgYXRhX3Byb2JlX2VudCkpOwogCUlOSVRfTElTVF9IRUFEKCZhZS5ub2RlKTsKIAlhZS5kZXYgPSAmcGRldi0+ZGV2OwpAQCAtNzc2LDcgKzc4Miw3IEBACiAJYWUucGlvX21hc2sgPSBwaW9fbW9kZXM7CiAJYWUuaXJxID0gaXJxOwogCWFlLmlycV9mbGFncyA9IDA7Ci0JYWUucG9ydF9mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1N8QVRBX0ZMQUdfU1JTVDsKKwlhZS5wb3J0X2ZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TU3xBVEFfRkxBR19TUlNUfGlvcmR5OwogCWFlLnBvcnRbMF0uY21kX2FkZHIgPSBpb19hZGRyOwogCWFlLnBvcnRbMF0uYWx0c3RhdHVzX2FkZHIgPSBjdHJsX2FkZHI7CiAJYWUucG9ydFswXS5jdGxfYWRkciA9IGN0cmxfYWRkcjsKQEAgLTk0NSw2ICs5NTEsNyBAQAogbW9kdWxlX3BhcmFtKG9wdGk4MmM2MTFhLCBpbnQsIDApOwogbW9kdWxlX3BhcmFtKG9wdGk4MmM0NngsIGludCwgMCk7CiBtb2R1bGVfcGFyYW0ocGlvX21hc2ssIGludCwgMCk7Cittb2R1bGVfcGFyYW0oaW9yZHlfbWFzaywgaW50LCAwKTsKIAogbW9kdWxlX2luaXQobGVnYWN5X2luaXQpOwogbW9kdWxlX2V4aXQobGVnYWN5X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9xZGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKaW5kZXggMWIzYjRlZC4uNDM2MjE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9xZGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCkBAIC0yNjQsMTYgKzI2NCwxOCBAQAogCWlmICh0eXBlID09IDY1ODApIHsKIAkJYWUucG9ydF9vcHMgPSAmcWRpNjU4MF9wb3J0X29wczsKIAkJYWUucGlvX21hc2sgPSAweDFGOworCQlhZS5wb3J0X2ZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1Q7CiAJfSBlbHNlIHsKIAkJYWUucG9ydF9vcHMgPSAmcWRpNjUwMF9wb3J0X29wczsKIAkJYWUucGlvX21hc2sgPSAweDA3OwkvKiBBY3R1YWxseSBQSU8zICFJT1JEWSBpcyBwb3NzaWJsZSAqLworCQlhZS5wb3J0X2ZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QgfAorCQkJCUFUQV9GTEFHX05PX0lPUkRZOwogCX0KIAogCWFlLnNodCA9ICZxZGlfc2h0OwogCWFlLm5fcG9ydHMgPSAxOwogCWFlLmlycSA9IGlycTsKIAlhZS5pcnFfZmxhZ3MgPSAwOwotCWFlLnBvcnRfZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVDsKIAlhZS5wb3J0WzBdLmNtZF9hZGRyID0gaW9fYWRkcjsKIAlhZS5wb3J0WzBdLmFsdHN0YXR1c19hZGRyID0gY3RsX2FkZHI7CiAJYWUucG9ydFswXS5jdGxfYWRkciA9IGN0bF9hZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCmluZGV4IGYyZmExNTguLjk2ZTg5MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKQEAgLTE4Nyw3ICsxODcsOSBAQAogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAKKwl1ZGVsYXkoMTAwKTsKIAlzbDgyYzEwNV9yZXNldF9lbmdpbmUoYXApOworCXVkZWxheSgxMDApOwogCiAJLyogU2V0IHRoZSBjbG9ja3MgZm9yIERNQSAqLwogCXNsODJjMTA1X2NvbmZpZ3VyZV9kbWFtb2RlKGFwLCBxYy0+ZGV2KTsKQEAgLTIxNiw2ICsyMTgsNyBAQAogCiAJYXRhX2JtZG1hX3N0b3AocWMpOwogCXNsODJjMTA1X3Jlc2V0X2VuZ2luZShhcCk7CisJdWRlbGF5KDEwMCk7CiAKIAkvKiBUaGlzIHdpbGwgcmVkbyB0aGUgaW5pdGlhbCBzZXR1cCBvZiB0aGUgRE1BIGRldmljZSB0byBtYXRjaGluZwogCSAgIFBJTyB0aW1pbmdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX252LmMgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKaW5kZXggMDk1ZWYxYi4uYWI5MmYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwpAQCAtODI3LDcgKzgyNyw4IEBACiAJCQkvKiBmcmVlemUgaWYgaG90cGx1Z2dlZCBvciBjb250cm9sbGVyIGVycm9yICovCiAJCQlpZiAodW5saWtlbHkoc3RhdHVzICYgKE5WX0FETUFfU1RBVF9IT1RQTFVHIHwKIAkJCQkJICAgICAgIE5WX0FETUFfU1RBVF9IT1RVTlBMVUcgfAotCQkJCQkgICAgICAgTlZfQURNQV9TVEFUX1RJTUVPVVQpKSkgeworCQkJCQkgICAgICAgTlZfQURNQV9TVEFUX1RJTUVPVVQgfAorCQkJCQkgICAgICAgTlZfQURNQV9TVEFUX1NFUlJPUikpKSB7CiAJCQkJc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmYXAtPmVoX2luZm87CiAKIAkJCQlhdGFfZWhpX2NsZWFyX2Rlc2MoZWhpKTsKQEAgLTg0MSw2ICs4NDIsOSBAQAogCQkJCX0gZWxzZSBpZiAoc3RhdHVzICYgTlZfQURNQV9TVEFUX0hPVFVOUExVRykgewogCQkJCQlhdGFfZWhpX2hvdHBsdWdnZWQoZWhpKTsKIAkJCQkJYXRhX2VoaV9wdXNoX2Rlc2MoZWhpLCAiOiBob3QgdW5wbHVnIik7CisJCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBOVl9BRE1BX1NUQVRfU0VSUk9SKSB7CisJCQkJCS8qIGxldCBsaWJhdGEgYW5hbHl6ZSBTRXJyb3IgYW5kIGZpZ3VyZSBvdXQgdGhlIGNhdXNlICovCisJCQkJCWF0YV9laGlfcHVzaF9kZXNjKGVoaSwgIjogU0Vycm9yIik7CiAJCQkJfQogCQkJCWF0YV9wb3J0X2ZyZWV6ZShhcCk7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYyBiL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jCmluZGV4IGIyZTJlNjkuLmNmOWVkOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jCkBAIC0xMTksOSArMTE5LDcgQEAKIHN0YXRpYyB2b2lkIHBkY19zYXRhX3Njcl93cml0ZSAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyIHZhbCk7CiBzdGF0aWMgaW50IHBkY19hdGFfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBwZGNfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwotc3RhdGljIHZvaWQgcGRjX2VuZ190aW1lb3V0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIGludCBwZGNfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyB2b2lkIHBkY19wYXRhX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIHBkY19xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHZvaWQgcGRjX3RmX2xvYWRfbW1pbyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CiBzdGF0aWMgdm9pZCBwZGNfZXhlY19jb21tYW5kX21taW8oc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOwpAQCAtMjE1LDEyICsyMTMsMTIgQEAKIAkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCiAJLmNoZWNrX2F0YXBpX2RtYQk9IHBkY19jaGVja19hdGFwaV9kbWEsCiAKLQkucGh5X3Jlc2V0CQk9IHBkY19wYXRhX3BoeV9yZXNldCwKLQogCS5xY19wcmVwCQk9IHBkY19xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBwZGNfcWNfaXNzdWVfcHJvdCwKKwkuZnJlZXplCQkJPSBwZGNfZnJlZXplLAorCS50aGF3CQkJPSBwZGNfdGhhdywKKwkuZXJyb3JfaGFuZGxlcgkJPSBwZGNfZXJyb3JfaGFuZGxlciwKIAkuZGF0YV94ZmVyCQk9IGF0YV9kYXRhX3hmZXIsCi0JLmVuZ190aW1lb3V0CQk9IHBkY19lbmdfdGltZW91dCwKIAkuaXJxX2hhbmRsZXIJCT0gcGRjX2ludGVycnVwdCwKIAkuaXJxX2NsZWFyCQk9IHBkY19pcnFfY2xlYXIsCiAJLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKQEAgLTI1Myw3ICsyNTEsNyBAQAogCS8qIGJvYXJkXzIwNjE5ICovCiAJewogCQkuc2h0CQk9ICZwZGNfYXRhX3NodCwKLQkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TUlNUIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUywKKwkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLwogCQkudWRtYV9tYXNrCT0gMHg3ZiwgLyogdWRtYTAtNiA7IEZJWE1FICovCkBAIC0zODksMTQgKzM4Nyw2IEBACiAJCWFwLT5jYmwgPSBBVEFfQ0JMX1BBVEE4MDsKIH0KIAotc3RhdGljIHZvaWQgcGRjX3BhdGFfcGh5X3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JcGRjX3BhdGFfY2JsX2RldGVjdChhcCk7Ci0JcGRjX3Jlc2V0X3BvcnQoYXApOwotCWF0YV9wb3J0X3Byb2JlKGFwKTsKLQlhdGFfYnVzX3Jlc2V0KGFwKTsKLX0KLQogc3RhdGljIHUzMiBwZGNfc2F0YV9zY3JfcmVhZCAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZykKIHsKIAlpZiAoc2NfcmVnID4gU0NSX0NPTlRST0wgfHwgYXAtPmNibCAhPSBBVEFfQ0JMX1NBVEEpCkBAIC01NjQsNiArNTU0LDEzIEBACiAJcmVhZGwobW1pbyArIFBEQ19DVExTVEFUKTsgLyogZmx1c2ggKi8KIH0KIAorc3RhdGljIGludCBwZGNfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJaWYgKCFzYXRhX3Njcl92YWxpZChhcCkpCisJCXBkY19wYXRhX2NibF9kZXRlY3QoYXApOworCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKK30KKwogc3RhdGljIHZvaWQgcGRjX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlhdGFfcmVzZXRfZm5fdCBoYXJkcmVzZXQ7CkBAIC01NzYsNyArNTczLDcgQEAKIAkJaGFyZHJlc2V0ID0gc2F0YV9zdGRfaGFyZHJlc2V0OwogCiAJLyogcGVyZm9ybSByZWNvdmVyeSAqLwotCWF0YV9kb19laChhcCwgYXRhX3N0ZF9wcmVyZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIGhhcmRyZXNldCwKKwlhdGFfZG9fZWgoYXAsIHBkY19wcmVfcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LCBoYXJkcmVzZXQsCiAJCSAgYXRhX3N0ZF9wb3N0cmVzZXQpOwogfQogCkBAIC01OTIsNDMgKzU4OSw2IEBACiAJCXBkY19yZXNldF9wb3J0KGFwKTsKIH0KIAotc3RhdGljIHZvaWQgcGRjX2VuZ190aW1lb3V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0Jc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gYXAtPmhvc3Q7Ci0JdTggZHJ2X3N0YXQ7Ci0Jc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JRFBSSU5USygiRU5URVJcbiIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQotCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+YWN0aXZlX3RhZyk7Ci0KLQlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgewotCWNhc2UgQVRBX1BST1RfRE1BOgotCWNhc2UgQVRBX1BST1RfTk9EQVRBOgotCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLCAiY29tbWFuZCB0aW1lb3V0XG4iKTsKLQkJZHJ2X3N0YXQgPSBhdGFfd2FpdF9pZGxlKGFwKTsKLQkJcWMtPmVycl9tYXNrIHw9IF9fYWNfZXJyX21hc2soZHJ2X3N0YXQpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRydl9zdGF0ID0gYXRhX2J1c3lfd2FpdChhcCwgQVRBX0JVU1kgfCBBVEFfRFJRLCAxMDAwKTsKLQotCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLAotCQkJCSJ1bmtub3duIHRpbWVvdXQsIGNtZCAweCV4IHN0YXQgMHgleFxuIiwKLQkJCQlxYy0+dGYuY29tbWFuZCwgZHJ2X3N0YXQpOwotCi0JCXFjLT5lcnJfbWFzayB8PSBhY19lcnJfbWFzayhkcnZfc3RhdCk7Ci0JCWJyZWFrOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQlhdGFfZWhfcWNfY29tcGxldGUocWMpOwotCURQUklOVEsoIkVYSVRcbiIpOwotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwZGNfaG9zdF9pbnRyKCBzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCmluZGV4IDNkOWRhZjIuLjJmZDAzN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV92c2MuYwpAQCAtMzQ2LDYgKzM0Niw3IEBACiAJc3RydWN0IGF0YV9wcm9iZV9lbnQgKnByb2JlX2VudDsKIAl2b2lkIF9faW9tZW0gKm1taW9fYmFzZTsKIAlpbnQgcmM7CisJdTggY2xzOwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwpAQCAtMzgzLDkgKzM4NCwxMiBAQAogCUlOSVRfTElTVF9IRUFEKCZwcm9iZV9lbnQtPm5vZGUpOwogCiAJLyoKLQkgKiBEdWUgdG8gYSBidWcgaW4gdGhlIGNoaXAsIHRoZSBkZWZhdWx0IGNhY2hlIGxpbmUgc2l6ZSBjYW4ndCBiZSB1c2VkCisJICogRHVlIHRvIGEgYnVnIGluIHRoZSBjaGlwLCB0aGUgZGVmYXVsdCBjYWNoZSBsaW5lIHNpemUgY2FuJ3QgYmUKKwkgKiB1c2VkICh1bmxlc3MgdGhlIGRlZmF1bHQgaXMgbm9uLXplcm8pLgogCSAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAweDgwKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmY2xzKTsKKwlpZiAoY2xzID09IDB4MDApCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAweDgwKTsKIAogCWlmIChwY2lfZW5hYmxlX21zaShwZGV2KSA9PSAwKQogCQlwY2lfaW50eChwZGV2LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2hlLmMgYi9kcml2ZXJzL2F0bS9oZS5jCmluZGV4IGRiMzNmNmYuLjg1MTAwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hlLmMKKysrIGIvZHJpdmVycy9hdG0vaGUuYwpAQCAtMzAxNyw3ICszMDE3LDcgQEAKIAloZV93cml0ZWwoaGVfZGV2LCB2YWwsIEhPU1RfQ05UTCk7CiAgICAgICAgCiAJLyogU2VuZCBSRUFEIGluc3RydWN0aW9uICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihyZWFkdGFiKS9zaXplb2YocmVhZHRhYlswXSk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlYWR0YWIpOyBpKyspIHsKIAkJaGVfd3JpdGVsKGhlX2RldiwgdmFsIHwgcmVhZHRhYltpXSwgSE9TVF9DTlRMKTsKIAkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKaW5kZXggZjQwNzg2MS4uYjRiODAxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYworKysgYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCkBAIC0zODgsNyArMzg4LDcgQEAKIAogCWdwID0gaWR0NzcyNTJfcmVhZF9ncChjYXJkKSAmIH4oU0FSX0dQX0VFU0NMS3xTQVJfR1BfRUVDU3xTQVJfR1BfRUVETyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJkc3J0YWIpL3NpemVvZihyZHNydGFiWzBdKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmRzcnRhYik7IGkrKykgewogCQlpZHQ3NzI1Ml93cml0ZV9ncChjYXJkLCBncCB8IHJkc3J0YWJbaV0pOwogCQl1ZGVsYXkoNSk7CiAJfQpAQCAtNDIyLDcgKzQyMiw3IEBACiAKIAlncCA9IGlkdDc3MjUyX3JlYWRfZ3AoY2FyZCkgJiB+KFNBUl9HUF9FRVNDTEt8U0FSX0dQX0VFQ1N8U0FSX0dQX0VFRE8pOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihyZHRhYikvc2l6ZW9mKHJkdGFiWzBdKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmR0YWIpOyBpKyspIHsKIAkJaWR0NzcyNTJfd3JpdGVfZ3AoY2FyZCwgZ3AgfCByZHRhYltpXSk7CiAJCXVkZWxheSg1KTsKIAl9CkBAIC00NjksMTQgKzQ2OSwxNCBAQAogCiAJZ3AgPSBpZHQ3NzI1Ml9yZWFkX2dwKGNhcmQpICYgfihTQVJfR1BfRUVTQ0xLfFNBUl9HUF9FRUNTfFNBUl9HUF9FRURPKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yod3JlbnRhYikvc2l6ZW9mKHdyZW50YWJbMF0pOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3cmVudGFiKTsgaSsrKSB7CiAJCWlkdDc3MjUyX3dyaXRlX2dwKGNhcmQsIGdwIHwgd3JlbnRhYltpXSk7CiAJCXVkZWxheSg1KTsKIAl9CiAJaWR0NzcyNTJfd3JpdGVfZ3AoY2FyZCwgZ3AgfCBTQVJfR1BfRUVDUyk7CiAJdWRlbGF5KDUpOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZih3cnRhYikvc2l6ZW9mKHdydGFiWzBdKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod3J0YWIpOyBpKyspIHsKIAkJaWR0NzcyNTJfd3JpdGVfZ3AoY2FyZCwgZ3AgfCB3cnRhYltpXSk7CiAJCXVkZWxheSg1KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9uaWNzdGFybWFjLmMgYi9kcml2ZXJzL2F0bS9uaWNzdGFybWFjLmMKaW5kZXggMmM1ZTNhZS4uNDgwOTQ3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vbmljc3Rhcm1hYy5jCisrKyBiL2RyaXZlcnMvYXRtL25pY3N0YXJtYWMuYwpAQCAtNyw2ICs3LDggQEAKICAqIFJlYWQgdGhpcyBGb3JlUnVubmVyJ3MgTUFDIGFkZHJlc3MgZnJvbSBlcHJvbS9lZXByb20KICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKIHR5cGVkZWYgdm9pZCBfX2lvbWVtICp2aXJ0X2FkZHJfdDsKIAogI2RlZmluZSBDWUNMRV9ERUxBWSA1CkBAIC0xNzYsNyArMTc4LDcgQEAKICAgIHZhbCA9IE5JQ1NUQVJfUkVHX1JFQUQoIGJhc2UsIE5JQ1NUQVJfUkVHX0dFTkVSQUxfUFVSUE9TRSApICYgMHhGRkZGRkZGMDsKIAogICAgLyogU2VuZCBSRUFEIGluc3RydWN0aW9uICovCi0gICBmb3IgKGk9MDsgaTxzaXplb2YgcmVhZHRhYi9zaXplb2YgcmVhZHRhYlswXTsgaSsrKQorICAgZm9yIChpPTA7IGk8QVJSQVlfU0laRShyZWFkdGFiKTsgaSsrKQogICAgewogCU5JQ1NUQVJfUkVHX1dSSVRFKCBiYXNlLCBOSUNTVEFSX1JFR19HRU5FUkFMX1BVUlBPU0UsCiAJCSh2YWwgfCByZWFkdGFiW2ldKSApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdXhkaXNwbGF5L2NmYWcxMjg2NGIuYyBiL2RyaXZlcnMvYXV4ZGlzcGxheS9jZmFnMTI4NjRiLmMKaW5kZXggODg5NTgzZC4uY2I0NGNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdXhkaXNwbGF5L2NmYWcxMjg2NGIuYworKysgYi9kcml2ZXJzL2F1eGRpc3BsYXkvY2ZhZzEyODY0Yi5jCkBAIC0zMTIsNiArMzEyLDE3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChjZmFnMTI4NjRiX2lzZW5hYmxlZCk7CiAKIC8qCisgKiBJcyB0aGUgbW9kdWxlIGluaXRlZD8KKyAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciBjZmFnMTI4NjRiX2luaXRlZDsKK3Vuc2lnbmVkIGNoYXIgY2ZhZzEyODY0Yl9pc2luaXRlZCh2b2lkKQoreworCXJldHVybiBjZmFnMTI4NjRiX2luaXRlZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmYWcxMjg2NGJfaXNpbml0ZWQpOworCisvKgogICogTW9kdWxlIEluaXQgJiBFeGl0CiAgKi8KIApAQCAtMzE5LDYgKzMzMCwxMyBAQAogewogCWludCByZXQgPSAtRUlOVkFMOwogCisJLyoga3MwMTA4X2luaXQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCAqLworCWlmICgha3MwMTA4X2lzaW5pdGVkKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIENGQUcxMjg2NEJfTkFNRSAiOiBFUlJPUjogIgorCQkJImtzMDEwOCBpcyBub3QgaW5pdGlhbGl6ZWRcbiIpOworCQlnb3RvIG5vbmU7CisJfQorCiAJaWYgKFBBR0VfU0laRSA8IENGQUcxMjg2NEJfU0laRSkgewogCQlwcmludGsoS0VSTl9FUlIgQ0ZBRzEyODY0Ql9OQU1FICI6IEVSUk9SOiAiCiAJCQkicGFnZSBzaXplICglaSkgPCBjZmFnMTI4NjRiIHNpemUgKCVpKVxuIiwKQEAgLTM1NCw2ICszNzIsNyBAQAogCWNmYWcxMjg2NGJfY2xlYXIoKTsKIAljZmFnMTI4NjRiX29uKCk7CiAKKwljZmFnMTI4NjRiX2luaXRlZCA9IDE7CiAJcmV0dXJuIDA7CiAKIGNhY2hlYWxsb2NlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXV4ZGlzcGxheS9jZmFnMTI4NjRiZmIuYyBiL2RyaXZlcnMvYXV4ZGlzcGxheS9jZmFnMTI4NjRiZmIuYwppbmRleCA5NDc2NWU3Li42NmZhZmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F1eGRpc3BsYXkvY2ZhZzEyODY0YmZiLmMKKysrIGIvZHJpdmVycy9hdXhkaXNwbGF5L2NmYWcxMjg2NGJmYi5jCkBAIC0xMzcsNyArMTM3LDE0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNmYWcxMjg2NGJmYl9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCS8qIGNmYWcxMjg2NGJfaW5pdCgpIG11c3QgYmUgY2FsbGVkIGZpcnN0ICovCisJaWYgKCFjZmFnMTI4NjRiX2lzaW5pdGVkKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIENGQUcxMjg2NEJGQl9OQU1FICI6IEVSUk9SOiAiCisJCQkiY2ZhZzEyODY0YiBpcyBub3QgaW5pdGlhbGl6ZWRcbiIpOworCQlnb3RvIG5vbmU7CisJfQogCiAJaWYgKGNmYWcxMjg2NGJfZW5hYmxlKCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIENGQUcxMjg2NEJGQl9OQU1FICI6IEVSUk9SOiAiCkBAIC0xNjIsNiArMTY5LDcgQEAKIAkJfQogCX0KIAorbm9uZToKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F1eGRpc3BsYXkva3MwMTA4LmMgYi9kcml2ZXJzL2F1eGRpc3BsYXkva3MwMTA4LmMKaW5kZXggYTYzNzU3NS4uZTZjMzY0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdXhkaXNwbGF5L2tzMDEwOC5jCisrKyBiL2RyaXZlcnMvYXV4ZGlzcGxheS9rczAxMDguYwpAQCAtMTExLDYgKzExMSwxNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoa3MwMTA4X3BhZ2UpOwogCiAvKgorICogSXMgdGhlIG1vZHVsZSBpbml0ZWQ/CisgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIga3MwMTA4X2luaXRlZDsKK3Vuc2lnbmVkIGNoYXIga3MwMTA4X2lzaW5pdGVkKHZvaWQpCit7CisJcmV0dXJuIGtzMDEwOF9pbml0ZWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrczAxMDhfaXNpbml0ZWQpOworCisvKgogICogTW9kdWxlIEluaXQgJiBFeGl0CiAgKi8KIApAQCAtMTQyLDYgKzE1Myw3IEBACiAJCWdvdG8gcmVnaXN0ZXJlZDsKIAl9CiAKKwlrczAxMDhfaW5pdGVkID0gMTsKIAlyZXR1cm4gMDsKIAogcmVnaXN0ZXJlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCA0NzI4MTBmLi4yNTM4NjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC0zMjQsMjcgKzMyNCwyNSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBkZXZpY2VfYWRkX2F0dHJzKHN0cnVjdCBidXNfdHlwZSAqIGJ1cywgc3RydWN0IGRldmljZSAqIGRldikKK3N0YXRpYyBpbnQgZGV2aWNlX2FkZF9hdHRycyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCBlcnJvciA9IDA7CiAJaW50IGk7CiAKLQlpZiAoYnVzLT5kZXZfYXR0cnMpIHsKLQkJZm9yIChpID0gMDsgYXR0cl9uYW1lKGJ1cy0+ZGV2X2F0dHJzW2ldKTsgaSsrKSB7Ci0JCQllcnJvciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsJmJ1cy0+ZGV2X2F0dHJzW2ldKTsKLQkJCWlmIChlcnJvcikKLQkJCQlnb3RvIEVycjsKKwlpZiAoIWJ1cy0+ZGV2X2F0dHJzKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGF0dHJfbmFtZShidXMtPmRldl9hdHRyc1tpXSk7IGkrKykgeworCQllcnJvciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsJmJ1cy0+ZGV2X2F0dHJzW2ldKTsKKwkJaWYgKGVycm9yKSB7CisJCQl3aGlsZSAoLS1pID49IDApCisJCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmJ1cy0+ZGV2X2F0dHJzW2ldKTsKKwkJCWJyZWFrOwogCQl9CiAJfQotIERvbmU6CiAJcmV0dXJuIGVycm9yOwotIEVycjoKLQl3aGlsZSAoLS1pID49IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShkZXYsJmJ1cy0+ZGV2X2F0dHJzW2ldKTsKLQlnb3RvIERvbmU7CiB9CiAKLQogc3RhdGljIHZvaWQgZGV2aWNlX3JlbW92ZV9hdHRycyhzdHJ1Y3QgYnVzX3R5cGUgKiBidXMsIHN0cnVjdCBkZXZpY2UgKiBkZXYpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCmluZGV4IDk2ZGVmMWQuLjE0MTdlNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCkBAIC0xNjMsOCArMTYzLDcgQEAKIHZvaWQgY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3QgY2xhc3MgKiBjbHMpCiB7CiAJcHJfZGVidWcoImRldmljZSBjbGFzcyAnJXMnOiB1bnJlZ2lzdGVyaW5nXG4iLCBjbHMtPm5hbWUpOwotCWlmIChjbHMtPnZpcnR1YWxfZGlyKQotCQlrb2JqZWN0X3VucmVnaXN0ZXIoY2xzLT52aXJ0dWFsX2Rpcik7CisJa29iamVjdF91bnJlZ2lzdGVyKGNscy0+dmlydHVhbF9kaXIpOwogCXJlbW92ZV9jbGFzc19hdHRycyhjbHMpOwogCXN1YnN5c3RlbV91bnJlZ2lzdGVyKCZjbHMtPnN1YnN5cyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCBhOGFjMzRiLi5kMDRmZDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTI4LDYgKzI4LDIwIEBACiBpbnQgKCpwbGF0Zm9ybV9ub3RpZnlfcmVtb3ZlKShzdHJ1Y3QgZGV2aWNlICogZGV2KSA9IE5VTEw7CiAKIC8qCisgKiBEZXRlY3QgdGhlIExBTkFOQS1hc3NpZ25lZCBMT0NBTC9FWFBFUklNRU5UQUwgbWFqb3JzCisgKi8KK2Jvb2wgaXNfbGFuYW5hX21ham9yKHVuc2lnbmVkIGludCBtYWpvcikKK3sKKwlpZiAobWFqb3IgPj0gNjAgJiYgbWFqb3IgPD0gNjMpCisJCXJldHVybiAxOworCWlmIChtYWpvciA+PSAxMjAgJiYgbWFqb3IgPD0gMTI3KQorCQlyZXR1cm4gMTsKKwlpZiAobWFqb3IgPj0gMjQwICYmIG1ham9yIDw9IDI1NCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBzeXNmcyBiaW5kaW5ncyBmb3IgZGV2aWNlcy4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY3B1LmMgYi9kcml2ZXJzL2Jhc2UvY3B1LmMKaW5kZXggN2ZkMDk1ZS4uZmU3ZWYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NwdS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jcHUuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAjZW5kaWYKIAogLyoKLSAqIHJlZ2lzdGVyX2NwdSAtIFNldHVwIGEgZHJpdmVyZnMgZGV2aWNlIGZvciBhIENQVS4KKyAqIHJlZ2lzdGVyX2NwdSAtIFNldHVwIGEgc3lzZnMgZGV2aWNlIGZvciBhIENQVS4KICAqIEBjcHUgLSBjcHUtPmhvdHBsdWdnYWJsZSBmaWVsZCBzZXQgdG8gMSB3aWxsIGdlbmVyYXRlIGEgY29udHJvbCBmaWxlIGluCiAgKgkgIHN5c2ZzIGZvciB0aGlzIENQVS4KICAqIEBudW0gLSBDUFUgbnVtYmVyIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHRoZSBkZXZpY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCA0NzVlMzNmLi5jYWUzNDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiAKIC8qCi0gKiByZWdpc3Rlcl9ub2RlIC0gU2V0dXAgYSBkcml2ZXJmcyBkZXZpY2UgZm9yIGEgbm9kZS4KKyAqIHJlZ2lzdGVyX25vZGUgLSBTZXR1cCBhIHN5c2ZzIGRldmljZSBmb3IgYSBub2RlLgogICogQG51bSAtIE5vZGUgbnVtYmVyIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHRoZSBkZXZpY2UuCiAgKgogICogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgdGhlIG5vZGUgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggM2YxYjM4Mi4uNTIzMWVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0yOTcsMTcgKzI5NywxNyBAQAogI2RlZmluZSBEUlMgKCZkcml2ZV9zdGF0ZVtjdXJyZW50X2RyaXZlXSkKICNkZWZpbmUgRFJXRSAoJndyaXRlX2Vycm9yc1tjdXJyZW50X2RyaXZlXSkKICNkZWZpbmUgRkRDUyAoJmZkY19zdGF0ZVtmZGNdKQotI2RlZmluZSBDTEVBUkYoeCkgKGNsZWFyX2JpdCh4IyNfQklULCAmRFJTLT5mbGFncykpCi0jZGVmaW5lIFNFVEYoeCkgKHNldF9iaXQoeCMjX0JJVCwgJkRSUy0+ZmxhZ3MpKQotI2RlZmluZSBURVNURih4KSAodGVzdF9iaXQoeCMjX0JJVCwgJkRSUy0+ZmxhZ3MpKQorI2RlZmluZSBDTEVBUkYoeCkgY2xlYXJfYml0KHgjI19CSVQsICZEUlMtPmZsYWdzKQorI2RlZmluZSBTRVRGKHgpIHNldF9iaXQoeCMjX0JJVCwgJkRSUy0+ZmxhZ3MpCisjZGVmaW5lIFRFU1RGKHgpIHRlc3RfYml0KHgjI19CSVQsICZEUlMtPmZsYWdzKQogCiAjZGVmaW5lIFVEUCAoJmRyaXZlX3BhcmFtc1tkcml2ZV0pCiAjZGVmaW5lIFVEUlMgKCZkcml2ZV9zdGF0ZVtkcml2ZV0pCiAjZGVmaW5lIFVEUldFICgmd3JpdGVfZXJyb3JzW2RyaXZlXSkKICNkZWZpbmUgVUZEQ1MgKCZmZGNfc3RhdGVbRkRDKGRyaXZlKV0pCi0jZGVmaW5lIFVDTEVBUkYoeCkgKGNsZWFyX2JpdCh4IyNfQklULCAmVURSUy0+ZmxhZ3MpKQotI2RlZmluZSBVU0VURih4KSAoc2V0X2JpdCh4IyNfQklULCAmVURSUy0+ZmxhZ3MpKQotI2RlZmluZSBVVEVTVEYoeCkgKHRlc3RfYml0KHgjI19CSVQsICZVRFJTLT5mbGFncykpCisjZGVmaW5lIFVDTEVBUkYoeCkgY2xlYXJfYml0KHgjI19CSVQsICZVRFJTLT5mbGFncykKKyNkZWZpbmUgVVNFVEYoeCkgc2V0X2JpdCh4IyNfQklULCAmVURSUy0+ZmxhZ3MpCisjZGVmaW5lIFVURVNURih4KSB0ZXN0X2JpdCh4IyNfQklULCAmVURSUy0+ZmxhZ3MpCiAKICNkZWZpbmUgRFBSSU5UKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKERFVklDRV9OQU1FICIlZDogIiBmb3JtYXQsIGN1cnJlbnRfZHJpdmUgLCAjIyBhcmdzKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCmluZGV4IDkzZmI2ZWQuLmE0ZmI3MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCkBAIC03NjUsNyArNzY1LDcgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCXJxLT5jbWRfbGVuID0gQ09NTUFORF9TSVpFKHJxLT5jbWRbMF0pOworCXJxLT5jbWRfbGVuID0gQ09NTUFORF9TSVpFKGNnYy0+Y21kWzBdKTsKIAltZW1jcHkocnEtPmNtZCwgY2djLT5jbWQsIENEUk9NX1BBQ0tFVF9TSVpFKTsKIAlpZiAoc2l6ZW9mKHJxLT5jbWQpID4gQ0RST01fUEFDS0VUX1NJWkUpCiAJCW1lbXNldChycS0+Y21kICsgQ0RST01fUEFDS0VUX1NJWkUsIDAsIHNpemVvZihycS0+Y21kKSAtIENEUk9NX1BBQ0tFVF9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvYWdwL01ha2VmaWxlCmluZGV4IDNlNTgxNjAuLmEwZDA0YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL2FncC9NYWtlZmlsZQpAQCAtMSw2ICsxLDcgQEAKIGFncGdhcnQteSA6PSBiYWNrZW5kLm8gZnJvbnRlbmQubyBnZW5lcmljLm8gaXNvY2gubwogCiBvYmotJChDT05GSUdfQUdQKQkJKz0gYWdwZ2FydC5vCitvYmotJChDT05GSUdfQ09NUEFUKQkJKz0gY29tcGF0X2lvY3RsLm8KIG9iai0kKENPTkZJR19BR1BfQUxJKQkJKz0gYWxpLWFncC5vCiBvYmotJChDT05GSUdfQUdQX0FUSSkJCSs9IGF0aS1hZ3Aubwogb2JqLSQoQ09ORklHX0FHUF9BTUQpCQkrPSBhbWQtazctYWdwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmggYi9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCmluZGV4IDFkNTllMmEuLjliZDY4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hZ3AuaApAQCAtMTE0LDYgKzExNCw3IEBACiAJdm9pZCAoKmZyZWVfYnlfdHlwZSkoc3RydWN0IGFncF9tZW1vcnkgKik7CiAJdm9pZCAqKCphZ3BfYWxsb2NfcGFnZSkoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqKTsKIAl2b2lkICgqYWdwX2Rlc3Ryb3lfcGFnZSkodm9pZCAqKTsKKyAgICAgICAgaW50ICgqYWdwX3R5cGVfdG9fbWFza190eXBlKSAoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqLCBpbnQpOwogfTsKIAogc3RydWN0IGFncF9icmlkZ2VfZGF0YSB7CkBAIC0yMTgsNiArMjE5LDcgQEAKICNkZWZpbmUgSTgxMF9QVEVfTUFJTl9VTkNBQ0hFRAkweDAwMDAwMDAwCiAjZGVmaW5lIEk4MTBfUFRFX0xPQ0FMCQkweDAwMDAwMDAyCiAjZGVmaW5lIEk4MTBfUFRFX1ZBTElECQkweDAwMDAwMDAxCisjZGVmaW5lIEk4MzBfUFRFX1NZU1RFTV9DQUNIRUQgIDB4MDAwMDAwMDYKICNkZWZpbmUgSTgxMF9TTVJBTV9NSVNDQwkweDcwCiAjZGVmaW5lIEk4MTBfR0ZYX01FTV9XSU5fU0laRQkweDAwMDEwMDAwCiAjZGVmaW5lIEk4MTBfR0ZYX01FTV9XSU5fMzJNCTB4MDAwMTAwMDAKQEAgLTI3MCw4ICsyNzIsMTYgQEAKIHZvaWQgZ2V0X2FncF92ZXJzaW9uKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSk7CiB1bnNpZ25lZCBsb25nIGFncF9nZW5lcmljX21hc2tfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwKIAl1bnNpZ25lZCBsb25nIGFkZHIsIGludCB0eXBlKTsKK2ludCBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsCisJCQkJICBpbnQgdHlwZSk7CiBzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICphZ3BfZ2VuZXJpY19maW5kX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAKKy8qIGdlbmVyaWMgZnVuY3Rpb25zIGZvciB1c2VyLXBvcHVsYXRlZCBBR1AgbWVtb3J5IHR5cGVzICovCitzdHJ1Y3QgYWdwX21lbW9yeSAqYWdwX2dlbmVyaWNfYWxsb2NfdXNlcihzaXplX3QgcGFnZV9jb3VudCwgaW50IHR5cGUpOwordm9pZCBhZ3BfYWxsb2NfcGFnZV9hcnJheShzaXplX3Qgc2l6ZSwgc3RydWN0IGFncF9tZW1vcnkgKm1lbSk7Cit2b2lkIGFncF9mcmVlX3BhZ2VfYXJyYXkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSk7CisKKwogLyogZ2VuZXJpYyByb3V0aW5lcyBmb3IgYWdwPj0zICovCiBpbnQgYWdwM19nZW5lcmljX2ZldGNoX3NpemUodm9pZCk7CiB2b2lkIGFncDNfZ2VuZXJpY190bGJmbHVzaChzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtKTsKQEAgLTI4OCw2ICsyOTgsOCBAQAogZXh0ZXJuIGludCBhZ3Bfb2ZmOwogZXh0ZXJuIGludCBhZ3BfdHJ5X3Vuc3VwcG9ydGVkX2Jvb3Q7CiAKK2xvbmcgY29tcGF0X2FncF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCiAvKiBDaGlwc2V0IGluZGVwZW5kYW50IHJlZ2lzdGVycyAoZnJvbSBBR1AgU3BlYykgKi8KICNkZWZpbmUgQUdQX0FQQkFTRQkweDEwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKaW5kZXggNWEzMWVjNy4uOTgxNzdhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKQEAgLTIxNCw2ICsyMTQsNyBAQAogCS5mcmVlX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLAogCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWxpX2Rlc3Ryb3lfcGFnZSwKKwkuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlLAogfTsKIAogc3RhdGljIHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbGlfbTE1NDFfYnJpZGdlID0gewpAQCAtMjM3LDYgKzIzOCw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IG0xNTQxX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBtMTU0MV9kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMKaW5kZXggYjRlMDBhMy4uYjBhY2Y0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jCkBAIC05MSw2ICs5MSw5IEBACiAJaW50IG51bV9lbnRyaWVzLCBzdGF0dXM7CiAJdm9pZCAqdGVtcDsKIAorCWlmICh0eXBlID49IEFHUF9VU0VSX1RZUEVTIHx8IG1lbS0+dHlwZSA+PSBBR1BfVVNFUl9UWVBFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAl0ZW1wID0gYWdwX2JyaWRnZS0+Y3VycmVudF9zaXplOwogCW51bV9lbnRyaWVzID0gQV9TSVpFX0ZJWCh0ZW1wKS0+bnVtX2VudHJpZXM7CiAJaWYgKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPiBudW1fZW50cmllcykKQEAgLTE0Miw2ICsxNDUsNyBAQAogCS5mcmVlX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLAogCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLAorCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsCiB9OwogCiBzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICphbHBoYV9icmlkZ2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCmluZGV4IGM4NWM4Y2EuLjNkOGQ0NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCkBAIC0zODEsNiArMzgxLDcgQEAKIAkuZnJlZV9ieV90eXBlCQk9IGFncF9nZW5lcmljX2ZyZWVfYnlfdHlwZSwKIAkuYWdwX2FsbG9jX3BhZ2UJCT0gYWdwX2dlbmVyaWNfYWxsb2NfcGFnZSwKIAkuYWdwX2Rlc3Ryb3lfcGFnZQk9IGFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZSwKKwkuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlLAogfTsKIAogc3RhdGljIHN0cnVjdCBhZ3BfZGV2aWNlX2lkcyBhbWRfYWdwX2RldmljZV9pZHNbXSBfX2RldmluaXRkYXRhID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCmluZGV4IDkzZDIyMDkuLjYzNmQ5ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwpAQCAtNjIsMTIgKzYyLDE4IEBACiB7CiAJaW50IGksIGosIG51bV9lbnRyaWVzOwogCWxvbmcgbG9uZyB0bXA7CisJaW50IG1hc2tfdHlwZTsKKwlzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UgPSBtZW0tPmJyaWRnZTsKIAl1MzIgcHRlOwogCiAJbnVtX2VudHJpZXMgPSBhZ3BfbnVtX2VudHJpZXMoKTsKIAotCWlmICh0eXBlICE9IDAgfHwgbWVtLT50eXBlICE9IDApCisJaWYgKHR5cGUgIT0gbWVtLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKKwltYXNrX3R5cGUgPSBicmlkZ2UtPmRyaXZlci0+YWdwX3R5cGVfdG9fbWFza190eXBlKGJyaWRnZSwgdHlwZSk7CisJaWYgKG1hc2tfdHlwZSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCiAJLyogTWFrZSBzdXJlIHdlIGNhbiBmaXQgdGhlIHJhbmdlIGluIHRoZSBnYXR0IHRhYmxlLiAqLwogCS8qIEZJWE1FOiBjb3VsZCB3cmFwICovCkBAIC05MCw3ICs5Niw3IEBACiAKIAlmb3IgKGkgPSAwLCBqID0gcGdfc3RhcnQ7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgaisrKSB7CiAJCXRtcCA9IGFncF9icmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkoYWdwX2JyaWRnZSwKLQkJCW1lbS0+bWVtb3J5W2ldLCBtZW0tPnR5cGUpOworCQkJbWVtLT5tZW1vcnlbaV0sIG1hc2tfdHlwZSk7CiAKIAkJQlVHX09OKHRtcCAmIDB4ZmZmZmZmMDAwMDAwMGZmY1VMTCk7CiAJCXB0ZSA9ICh0bXAgJiAweDAwMDAwMGZmMDAwMDAwMDBVTEwpID4+IDI4OwpAQCAtMjQ3LDYgKzI1Myw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIC8qIFNvbWUgYmFzaWMgc2FuaXR5IGNoZWNrcyBmb3IgdGhlIGFwZXJ0dXJlLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwppbmRleCA5OTg3ZGMyLi43N2M5YWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwpAQCAtNDMxLDYgKzQzMSw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYwppbmRleCBkNTllMDM3Li5lYmRkNmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYwpAQCAtNDMsNyArNDMsNyBAQAogICogZml4IHNvbWUgcmVhbCBzdHVwaWRpdHkuIEl0J3Mgb25seSBieSBjaGFuY2Ugd2UgY2FuIGJ1bXAKICAqIHBhc3QgMC45OSBhdCBhbGwgZHVlIHRvIHNvbWUgYm9vbGVhbiBsb2dpYyBlcnJvci4gKi8KICNkZWZpbmUgQUdQR0FSVF9WRVJTSU9OX01BSk9SIDAKLSNkZWZpbmUgQUdQR0FSVF9WRVJTSU9OX01JTk9SIDEwMQorI2RlZmluZSBBR1BHQVJUX1ZFUlNJT05fTUlOT1IgMTAyCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFncF92ZXJzaW9uIGFncF9jdXJyZW50X3ZlcnNpb24gPQogewogCS5tYWpvciA9IEFHUEdBUlRfVkVSU0lPTl9NQUpPUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvY29tcGF0X2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2NvbXBhdF9pb2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYjRiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvYWdwL2NvbXBhdF9pb2N0bC5jCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogQUdQR0FSVCBkcml2ZXIgZnJvbnRlbmQgY29tcGF0aWJpbGl0eSBpb2N0bHMKKyAqIENvcHlyaWdodCAoQykgMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBEYXZlIEpvbmVzCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgSmVmZiBIYXJ0bWFubgorICogQ29weXJpZ2h0IChDKSAxOTk5IFByZWNpc2lvbiBJbnNpZ2h0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgWGkgR3JhcGhpY3MsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIEpFRkYgSEFSVE1BTk4sIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRQorICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9hZ3BnYXJ0Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJhZ3AuaCIKKyNpbmNsdWRlICJjb21wYXRfaW9jdGwuaCIKKworc3RhdGljIGludCBjb21wYXRfYWdwaW9jX2luZm9fd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdiwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgYWdwX2luZm8zMiB1c2VyaW5mbzsKKwlzdHJ1Y3QgYWdwX2tlcm5faW5mbyBrZXJuaW5mbzsKKworCWFncF9jb3B5X2luZm8oYWdwX2JyaWRnZSwgJmtlcm5pbmZvKTsKKworCXVzZXJpbmZvLnZlcnNpb24ubWFqb3IgPSBrZXJuaW5mby52ZXJzaW9uLm1ham9yOworCXVzZXJpbmZvLnZlcnNpb24ubWlub3IgPSBrZXJuaW5mby52ZXJzaW9uLm1pbm9yOworCXVzZXJpbmZvLmJyaWRnZV9pZCA9IGtlcm5pbmZvLmRldmljZS0+dmVuZG9yIHwKKwkgICAgKGtlcm5pbmZvLmRldmljZS0+ZGV2aWNlIDw8IDE2KTsKKwl1c2VyaW5mby5hZ3BfbW9kZSA9IGtlcm5pbmZvLm1vZGU7CisJdXNlcmluZm8uYXBlcl9iYXNlID0gKGNvbXBhdF9sb25nX3Qpa2VybmluZm8uYXBlcl9iYXNlOworCXVzZXJpbmZvLmFwZXJfc2l6ZSA9IGtlcm5pbmZvLmFwZXJfc2l6ZTsKKwl1c2VyaW5mby5wZ190b3RhbCA9IHVzZXJpbmZvLnBnX3N5c3RlbSA9IGtlcm5pbmZvLm1heF9tZW1vcnk7CisJdXNlcmluZm8ucGdfdXNlZCA9IGtlcm5pbmZvLmN1cnJlbnRfbWVtb3J5OworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ1c2VyaW5mbywgc2l6ZW9mKHVzZXJpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X2FncGlvY19yZXNlcnZlX3dyYXAoc3RydWN0IGFncF9maWxlX3ByaXZhdGUgKnByaXYsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGFncF9yZWdpb24zMiB1cmVzZXJ2ZTsKKwlzdHJ1Y3QgYWdwX3JlZ2lvbiBrcmVzZXJ2ZTsKKwlzdHJ1Y3QgYWdwX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICpjbGllbnRfcHJpdjsKKworCURCRygiIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1cmVzZXJ2ZSwgYXJnLCBzaXplb2YodXJlc2VydmUpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoKHVuc2lnbmVkKSB1cmVzZXJ2ZS5zZWdfY291bnQgPj0gfjBVL3NpemVvZihzdHJ1Y3QgYWdwX3NlZ21lbnQzMikpCisJCXJldHVybiAtRUZBVUxUOworCisJa3Jlc2VydmUucGlkID0gdXJlc2VydmUucGlkOworCWtyZXNlcnZlLnNlZ19jb3VudCA9IHVyZXNlcnZlLnNlZ19jb3VudDsKKworCWNsaWVudCA9IGFncF9maW5kX2NsaWVudF9ieV9waWQoa3Jlc2VydmUucGlkKTsKKworCWlmIChrcmVzZXJ2ZS5zZWdfY291bnQgPT0gMCkgeworCQkvKiByZW1vdmUgYSBjbGllbnQgKi8KKwkJY2xpZW50X3ByaXYgPSBhZ3BfZmluZF9wcml2YXRlKGtyZXNlcnZlLnBpZCk7CisKKwkJaWYgKGNsaWVudF9wcml2ICE9IE5VTEwpIHsKKwkJCXNldF9iaXQoQUdQX0ZGX0lTX0NMSUVOVCwgJmNsaWVudF9wcml2LT5hY2Nlc3NfZmxhZ3MpOworCQkJc2V0X2JpdChBR1BfRkZfSVNfVkFMSUQsICZjbGllbnRfcHJpdi0+YWNjZXNzX2ZsYWdzKTsKKwkJfQorCQlpZiAoY2xpZW50ID09IE5VTEwpIHsKKwkJCS8qIGNsaWVudCBpcyBhbHJlYWR5IHJlbW92ZWQgKi8KKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiBhZ3BfcmVtb3ZlX2NsaWVudChrcmVzZXJ2ZS5waWQpOworCX0gZWxzZSB7CisJCXN0cnVjdCBhZ3Bfc2VnbWVudDMyICp1c2VnbWVudDsKKwkJc3RydWN0IGFncF9zZWdtZW50ICprc2VnbWVudDsKKwkJaW50IHNlZzsKKworCQlpZiAodXJlc2VydmUuc2VnX2NvdW50ID49IDE2Mzg0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJdXNlZ21lbnQgPSBrbWFsbG9jKHNpemVvZigqdXNlZ21lbnQpICogdXJlc2VydmUuc2VnX2NvdW50LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1c2VnbWVudCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWtzZWdtZW50ID0ga21hbGxvYyhzaXplb2YoKmtzZWdtZW50KSAqIGtyZXNlcnZlLnNlZ19jb3VudCwgR0ZQX0tFUk5FTCk7CisJCWlmICgha3NlZ21lbnQpIHsKKwkJCWtmcmVlKHVzZWdtZW50KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHVzZWdtZW50LCAodm9pZCBfX3VzZXIgKikgdXJlc2VydmUuc2VnX2xpc3QsCisJCQkJICAgc2l6ZW9mKCp1c2VnbWVudCkgKiB1cmVzZXJ2ZS5zZWdfY291bnQpKSB7CisJCQlrZnJlZSh1c2VnbWVudCk7CisJCQlrZnJlZShrc2VnbWVudCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCWZvciAoc2VnID0gMDsgc2VnIDwgdXJlc2VydmUuc2VnX2NvdW50OyBzZWcrKykgeworCQkJa3NlZ21lbnRbc2VnXS5wZ19zdGFydCA9IHVzZWdtZW50W3NlZ10ucGdfc3RhcnQ7CisJCQlrc2VnbWVudFtzZWddLnBnX2NvdW50ID0gdXNlZ21lbnRbc2VnXS5wZ19jb3VudDsKKwkJCWtzZWdtZW50W3NlZ10ucHJvdCA9IHVzZWdtZW50W3NlZ10ucHJvdDsKKwkJfQorCisJCWtmcmVlKHVzZWdtZW50KTsKKwkJa3Jlc2VydmUuc2VnX2xpc3QgPSBrc2VnbWVudDsKKworCQlpZiAoY2xpZW50ID09IE5VTEwpIHsKKwkJCS8qIENyZWF0ZSB0aGUgY2xpZW50IGFuZCBhZGQgdGhlIHNlZ21lbnQgKi8KKwkJCWNsaWVudCA9IGFncF9jcmVhdGVfY2xpZW50KGtyZXNlcnZlLnBpZCk7CisKKwkJCWlmIChjbGllbnQgPT0gTlVMTCkgeworCQkJCWtmcmVlKGtzZWdtZW50KTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWNsaWVudF9wcml2ID0gYWdwX2ZpbmRfcHJpdmF0ZShrcmVzZXJ2ZS5waWQpOworCisJCQlpZiAoY2xpZW50X3ByaXYgIT0gTlVMTCkgeworCQkJCXNldF9iaXQoQUdQX0ZGX0lTX0NMSUVOVCwgJmNsaWVudF9wcml2LT5hY2Nlc3NfZmxhZ3MpOworCQkJCXNldF9iaXQoQUdQX0ZGX0lTX1ZBTElELCAmY2xpZW50X3ByaXYtPmFjY2Vzc19mbGFncyk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFncF9jcmVhdGVfc2VnbWVudChjbGllbnQsICZrcmVzZXJ2ZSk7CisJfQorCS8qIFdpbGwgbmV2ZXIgcmVhbGx5IGhhcHBlbiAqLworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9hZ3Bpb2NfYWxsb2NhdGVfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdiwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtb3J5OworCXN0cnVjdCBhZ3BfYWxsb2NhdGUzMiBhbGxvYzsKKworCURCRygiIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZhbGxvYywgYXJnLCBzaXplb2YoYWxsb2MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1vcnkgPSBhZ3BfYWxsb2NhdGVfbWVtb3J5X3dyYXAoYWxsb2MucGdfY291bnQsIGFsbG9jLnR5cGUpOworCisJaWYgKG1lbW9yeSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFsbG9jLmtleSA9IG1lbW9yeS0+a2V5OworCWFsbG9jLnBoeXNpY2FsID0gbWVtb3J5LT5waHlzaWNhbDsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYWxsb2MsIHNpemVvZihhbGxvYykpKSB7CisJCWFncF9mcmVlX21lbW9yeV93cmFwKG1lbW9yeSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXRfYWdwaW9jX2JpbmRfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdiwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgYWdwX2JpbmQzMiBiaW5kX2luZm87CisJc3RydWN0IGFncF9tZW1vcnkgKm1lbW9yeTsKKworCURCRygiIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZiaW5kX2luZm8sIGFyZywgc2l6ZW9mKGJpbmRfaW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW1lbW9yeSA9IGFncF9maW5kX21lbV9ieV9rZXkoYmluZF9pbmZvLmtleSk7CisKKwlpZiAobWVtb3J5ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGFncF9iaW5kX21lbW9yeShtZW1vcnksIGJpbmRfaW5mby5wZ19zdGFydCk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X2FncGlvY191bmJpbmRfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdiwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtb3J5OworCXN0cnVjdCBhZ3BfdW5iaW5kMzIgdW5iaW5kOworCisJREJHKCIiKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoJnVuYmluZCwgYXJnLCBzaXplb2YodW5iaW5kKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJbWVtb3J5ID0gYWdwX2ZpbmRfbWVtX2J5X2tleSh1bmJpbmQua2V5KTsKKworCWlmIChtZW1vcnkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gYWdwX3VuYmluZF9tZW1vcnkobWVtb3J5KTsKK30KKworbG9uZyBjb21wYXRfYWdwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqY3Vycl9wcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXRfdmFsID0gLUVOT1RUWTsKKworCW11dGV4X2xvY2soJihhZ3BfZmUuYWdwX211dGV4KSk7CisKKwlpZiAoKGFncF9mZS5jdXJyZW50X2NvbnRyb2xsZXIgPT0gTlVMTCkgJiYKKwkgICAgKGNtZCAhPSBBR1BJT0NfQUNRVUlSRTMyKSkgeworCQlyZXRfdmFsID0gLUVJTlZBTDsKKwkJZ290byBpb2N0bF9vdXQ7CisJfQorCWlmICgoYWdwX2ZlLmJhY2tlbmRfYWNxdWlyZWQgIT0gVFJVRSkgJiYKKwkgICAgKGNtZCAhPSBBR1BJT0NfQUNRVUlSRTMyKSkgeworCQlyZXRfdmFsID0gLUVCVVNZOworCQlnb3RvIGlvY3RsX291dDsKKwl9CisJaWYgKGNtZCAhPSBBR1BJT0NfQUNRVUlSRTMyKSB7CisJCWlmICghKHRlc3RfYml0KEFHUF9GRl9JU19DT05UUk9MTEVSLCAmY3Vycl9wcml2LT5hY2Nlc3NfZmxhZ3MpKSkgeworCQkJcmV0X3ZhbCA9IC1FUEVSTTsKKwkJCWdvdG8gaW9jdGxfb3V0OworCQl9CisJCS8qIFVzZSB0aGUgb3JpZ2luYWwgcGlkIG9mIHRoZSBjb250cm9sbGVyLAorCQkgKiBpbiBjYXNlIGl0J3MgdGhyZWFkZWQgKi8KKworCQlpZiAoYWdwX2ZlLmN1cnJlbnRfY29udHJvbGxlci0+cGlkICE9IGN1cnJfcHJpdi0+bXlfcGlkKSB7CisJCQlyZXRfdmFsID0gLUVCVVNZOworCQkJZ290byBpb2N0bF9vdXQ7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQUdQSU9DX0lORk8zMjoKKwkJcmV0X3ZhbCA9IGNvbXBhdF9hZ3Bpb2NfaW5mb193cmFwKGN1cnJfcHJpdiwgKHZvaWQgX191c2VyICopIGFyZyk7CisJCWJyZWFrOworCisJY2FzZSBBR1BJT0NfQUNRVUlSRTMyOgorCQlyZXRfdmFsID0gYWdwaW9jX2FjcXVpcmVfd3JhcChjdXJyX3ByaXYpOworCQlicmVhazsKKworCWNhc2UgQUdQSU9DX1JFTEVBU0UzMjoKKwkJcmV0X3ZhbCA9IGFncGlvY19yZWxlYXNlX3dyYXAoY3Vycl9wcml2KTsKKwkJYnJlYWs7CisKKwljYXNlIEFHUElPQ19TRVRVUDMyOgorCQlyZXRfdmFsID0gYWdwaW9jX3NldHVwX3dyYXAoY3Vycl9wcml2LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIEFHUElPQ19SRVNFUlZFMzI6CisJCXJldF92YWwgPSBjb21wYXRfYWdwaW9jX3Jlc2VydmVfd3JhcChjdXJyX3ByaXYsICh2b2lkIF9fdXNlciAqKSBhcmcpOworCQlicmVhazsKKworCWNhc2UgQUdQSU9DX1BST1RFQ1QzMjoKKwkJcmV0X3ZhbCA9IGFncGlvY19wcm90ZWN0X3dyYXAoY3Vycl9wcml2KTsKKwkJYnJlYWs7CisKKwljYXNlIEFHUElPQ19BTExPQ0FURTMyOgorCQlyZXRfdmFsID0gY29tcGF0X2FncGlvY19hbGxvY2F0ZV93cmFwKGN1cnJfcHJpdiwgKHZvaWQgX191c2VyICopIGFyZyk7CisJCWJyZWFrOworCisJY2FzZSBBR1BJT0NfREVBTExPQ0FURTMyOgorCQlyZXRfdmFsID0gYWdwaW9jX2RlYWxsb2NhdGVfd3JhcChjdXJyX3ByaXYsIChpbnQpIGFyZyk7CisJCWJyZWFrOworCisJY2FzZSBBR1BJT0NfQklORDMyOgorCQlyZXRfdmFsID0gY29tcGF0X2FncGlvY19iaW5kX3dyYXAoY3Vycl9wcml2LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIEFHUElPQ19VTkJJTkQzMjoKKwkJcmV0X3ZhbCA9IGNvbXBhdF9hZ3Bpb2NfdW5iaW5kX3dyYXAoY3Vycl9wcml2LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKKwkJYnJlYWs7CisJfQorCitpb2N0bF9vdXQ6CisJREJHKCJpb2N0bCByZXR1cm5zICVkXG4iLCByZXRfdmFsKTsKKwltdXRleF91bmxvY2soJihhZ3BfZmUuYWdwX211dGV4KSk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvY29tcGF0X2lvY3RsLmggYi9kcml2ZXJzL2NoYXIvYWdwL2NvbXBhdF9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOTM5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvYWdwL2NvbXBhdF9pb2N0bC5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEplZmYgSGFydG1hbm4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBQcmVjaXNpb24gSW5zaWdodCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk5IFhpIEdyYXBoaWNzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBKRUZGIEhBUlRNQU5OLCBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUKKyAqIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9BR1BfQ09NUEFUX0lPQ1RMX0gKKyNkZWZpbmUgX0FHUF9DT01QQVRfSU9DVExfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvYWdwZ2FydC5oPgorCisjZGVmaW5lIEFHUElPQ19JTkZPMzIgICAgICAgX0lPUiAoQUdQSU9DX0JBU0UsIDAsIGNvbXBhdF91cHRyX3QpCisjZGVmaW5lIEFHUElPQ19BQ1FVSVJFMzIgICAgX0lPICAoQUdQSU9DX0JBU0UsIDEpCisjZGVmaW5lIEFHUElPQ19SRUxFQVNFMzIgICAgX0lPICAoQUdQSU9DX0JBU0UsIDIpCisjZGVmaW5lIEFHUElPQ19TRVRVUDMyICAgICAgX0lPVyAoQUdQSU9DX0JBU0UsIDMsIGNvbXBhdF91cHRyX3QpCisjZGVmaW5lIEFHUElPQ19SRVNFUlZFMzIgICAgX0lPVyAoQUdQSU9DX0JBU0UsIDQsIGNvbXBhdF91cHRyX3QpCisjZGVmaW5lIEFHUElPQ19QUk9URUNUMzIgICAgX0lPVyAoQUdQSU9DX0JBU0UsIDUsIGNvbXBhdF91cHRyX3QpCisjZGVmaW5lIEFHUElPQ19BTExPQ0FURTMyICAgX0lPV1IoQUdQSU9DX0JBU0UsIDYsIGNvbXBhdF91cHRyX3QpCisjZGVmaW5lIEFHUElPQ19ERUFMTE9DQVRFMzIgX0lPVyAoQUdQSU9DX0JBU0UsIDcsIGNvbXBhdF9pbnRfdCkKKyNkZWZpbmUgQUdQSU9DX0JJTkQzMiAgICAgICBfSU9XIChBR1BJT0NfQkFTRSwgOCwgY29tcGF0X3VwdHJfdCkKKyNkZWZpbmUgQUdQSU9DX1VOQklORDMyICAgICBfSU9XIChBR1BJT0NfQkFTRSwgOSwgY29tcGF0X3VwdHJfdCkKKworc3RydWN0IGFncF9pbmZvMzIgeworCXN0cnVjdCBhZ3BfdmVyc2lvbiB2ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgICAgICAgICovCisJdTMyIGJyaWRnZV9pZDsJCS8qIGJyaWRnZSB2ZW5kb3IvZGV2aWNlICAgICAgICAgKi8KKwl1MzIgYWdwX21vZGU7CQkvKiBtb2RlIGluZm8gb2YgYnJpZGdlICAgICAgICAgICovCisJY29tcGF0X2xvbmdfdCBhcGVyX2Jhc2U7CS8qIGJhc2Ugb2YgYXBlcnR1cmUgICAgICAgICAgICAgKi8KKwljb21wYXRfc2l6ZV90IGFwZXJfc2l6ZTsJLyogc2l6ZSBvZiBhcGVydHVyZSAgICAgICAgICAgICAqLworCWNvbXBhdF9zaXplX3QgcGdfdG90YWw7CS8qIG1heCBwYWdlcyAoc3dhcCArIHN5c3RlbSkgICAgKi8KKwljb21wYXRfc2l6ZV90IHBnX3N5c3RlbTsJLyogbWF4IHBhZ2VzIChzeXN0ZW0pICAgICAgICAgICAqLworCWNvbXBhdF9zaXplX3QgcGdfdXNlZDsJCS8qIGN1cnJlbnQgcGFnZXMgdXNlZCAgICAgICAgICAgKi8KK307CisKKy8qCisgKiBUaGUgInByb3QiIGRvd24gYmVsb3cgbmVlZHMgc3RpbGwgYSAic2xlZXAiIGZsYWcgc29tZWhvdyAuLi4KKyAqLworc3RydWN0IGFncF9zZWdtZW50MzIgeworCWNvbXBhdF9vZmZfdCBwZ19zdGFydDsJCS8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KKwljb21wYXRfc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCisJY29tcGF0X2ludF90IHByb3Q7CQkvKiBwcm90IGZsYWdzIGZvciBtbWFwICAgICAgICAgICovCit9OworCitzdHJ1Y3QgYWdwX3JlZ2lvbjMyIHsKKwljb21wYXRfcGlkX3QgcGlkOwkJLyogcGlkIG9mIHByb2Nlc3MgICAgICAgICAgICAgICAqLworCWNvbXBhdF9zaXplX3Qgc2VnX2NvdW50OwkvKiBudW1iZXIgb2Ygc2VnbWVudHMgICAgICAgICAgICovCisJc3RydWN0IGFncF9zZWdtZW50MzIgKnNlZ19saXN0OworfTsKKworc3RydWN0IGFncF9hbGxvY2F0ZTMyIHsKKwljb21wYXRfaW50X3Qga2V5OwkJLyogdGFnIG9mIGFsbG9jYXRpb24gICAgICAgICAgICAqLworCWNvbXBhdF9zaXplX3QgcGdfY291bnQ7CS8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAgKi8KKwl1MzIgdHlwZTsJCS8qIDAgPT0gbm9ybWFsLCBvdGhlciBkZXZzcGVjICAgKi8KKwl1MzIgcGh5c2ljYWw7ICAgICAgICAgICAvKiBkZXZpY2Ugc3BlY2lmaWMgKHNvbWUgZGV2aWNlcworCQkJCSAqIG5lZWQgYSBwaHlzIGFkZHJlc3Mgb2YgdGhlCisJCQkJICogYWN0dWFsIHBhZ2UgYmVoaW5kIHRoZSBnYXR0CisJCQkJICogdGFibGUpICAgICAgICAgICAgICAgICAgICAgICAgKi8KK307CisKK3N0cnVjdCBhZ3BfYmluZDMyIHsKKwljb21wYXRfaW50X3Qga2V5OwkJLyogdGFnIG9mIGFsbG9jYXRpb24gICAgICAgICAgICAqLworCWNvbXBhdF9vZmZfdCBwZ19zdGFydDsJCS8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KK307CisKK3N0cnVjdCBhZ3BfdW5iaW5kMzIgeworCWNvbXBhdF9pbnRfdCBrZXk7CQkvKiB0YWcgb2YgYWxsb2NhdGlvbiAgICAgICAgICAgICovCisJdTMyIHByaW9yaXR5OwkJLyogcHJpb3JpdHkgZm9yIHBhZ2luZyBvdXQgICAgICAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBhZ3BfZnJvbnRfZGF0YSBhZ3BfZmU7CisKK2ludCBhZ3Bpb2NfYWNxdWlyZV93cmFwKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICpwcml2KTsKK2ludCBhZ3Bpb2NfcmVsZWFzZV93cmFwKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICpwcml2KTsKK2ludCBhZ3Bpb2NfcHJvdGVjdF93cmFwKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICpwcml2KTsKK2ludCBhZ3Bpb2Nfc2V0dXBfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdiwgdm9pZCBfX3VzZXIgKmFyZyk7CitpbnQgYWdwaW9jX2RlYWxsb2NhdGVfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdiwgaW50IGFyZyk7CitzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqYWdwX2ZpbmRfcHJpdmF0ZShwaWRfdCBwaWQpOworc3RydWN0IGFncF9jbGllbnQgKmFncF9jcmVhdGVfY2xpZW50KHBpZF90IGlkKTsKK2ludCBhZ3BfcmVtb3ZlX2NsaWVudChwaWRfdCBpZCk7CitpbnQgYWdwX2NyZWF0ZV9zZWdtZW50KHN0cnVjdCBhZ3BfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBhZ3BfcmVnaW9uICpyZWdpb24pOwordm9pZCBhZ3BfZnJlZV9tZW1vcnlfd3JhcChzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtb3J5KTsKK3N0cnVjdCBhZ3BfbWVtb3J5ICphZ3BfYWxsb2NhdGVfbWVtb3J5X3dyYXAoc2l6ZV90IHBnX2NvdW50LCB1MzIgdHlwZSk7CitzdHJ1Y3QgYWdwX21lbW9yeSAqYWdwX2ZpbmRfbWVtX2J5X2tleShpbnQga2V5KTsKK3N0cnVjdCBhZ3BfY2xpZW50ICphZ3BfZmluZF9jbGllbnRfYnlfcGlkKHBpZF90IGlkKTsKKworI2VuZGlmIC8qIF9BR1BfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCmluZGV4IDMwZjczMGYuLjY1OGNiMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwpAQCAtMzM1LDYgKzMzNSw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFncF9lZmZpY2Vvbl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZnJvbnRlbmQuYyBiL2RyaXZlcnMvY2hhci9hZ3AvZnJvbnRlbmQuYwppbmRleCAwZjJlZDJhLi42NzlkN2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9mcm9udGVuZC5jCkBAIC00MSw5ICs0MSw5IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlICJhZ3AuaCIKIAotc3RhdGljIHN0cnVjdCBhZ3BfZnJvbnRfZGF0YSBhZ3BfZmU7CitzdHJ1Y3QgYWdwX2Zyb250X2RhdGEgYWdwX2ZlOwogCi1zdGF0aWMgc3RydWN0IGFncF9tZW1vcnkgKmFncF9maW5kX21lbV9ieV9rZXkoaW50IGtleSkKK3N0cnVjdCBhZ3BfbWVtb3J5ICphZ3BfZmluZF9tZW1fYnlfa2V5KGludCBrZXkpCiB7CiAJc3RydWN0IGFncF9tZW1vcnkgKmN1cnI7CiAKQEAgLTE1OSw3ICsxNTksNyBAQAogCXJldHVybiB2bV9nZXRfcGFnZV9wcm90KHByb3RfYml0cyk7CiB9CiAKLXN0YXRpYyBpbnQgYWdwX2NyZWF0ZV9zZWdtZW50KHN0cnVjdCBhZ3BfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBhZ3BfcmVnaW9uICpyZWdpb24pCitpbnQgYWdwX2NyZWF0ZV9zZWdtZW50KHN0cnVjdCBhZ3BfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBhZ3BfcmVnaW9uICpyZWdpb24pCiB7CiAJc3RydWN0IGFncF9zZWdtZW50X3ByaXYgKipyZXRfc2VnOwogCXN0cnVjdCBhZ3Bfc2VnbWVudF9wcml2ICpzZWc7CkBAIC0yMTEsNyArMjExLDcgQEAKIAogLyogRmlsZSBwcml2YXRlIGxpc3Qgcm91dGluZXMgKi8KIAotc3RhdGljIHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICphZ3BfZmluZF9wcml2YXRlKHBpZF90IHBpZCkKK3N0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICphZ3BfZmluZF9wcml2YXRlKHBpZF90IHBpZCkKIHsKIAlzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqY3VycjsKIApAQCAtMjY2LDEzICsyNjYsMTMgQEAKICAqIFdyYXBwZXJzIGZvciBhZ3BfZnJlZV9tZW1vcnkgJiBhZ3BfYWxsb2NhdGVfbWVtb3J5CiAgKiBUaGVzZSBtYWtlIHN1cmUgdGhhdCBpbnRlcm5hbCBsaXN0cyBhcmUga2VwdCB1cGRhdGVkLgogICovCi1zdGF0aWMgdm9pZCBhZ3BfZnJlZV9tZW1vcnlfd3JhcChzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtb3J5KQordm9pZCBhZ3BfZnJlZV9tZW1vcnlfd3JhcChzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtb3J5KQogewogCWFncF9yZW1vdmVfZnJvbV9wb29sKG1lbW9yeSk7CiAJYWdwX2ZyZWVfbWVtb3J5KG1lbW9yeSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYWdwX21lbW9yeSAqYWdwX2FsbG9jYXRlX21lbW9yeV93cmFwKHNpemVfdCBwZ19jb3VudCwgdTMyIHR5cGUpCitzdHJ1Y3QgYWdwX21lbW9yeSAqYWdwX2FsbG9jYXRlX21lbW9yeV93cmFwKHNpemVfdCBwZ19jb3VudCwgdTMyIHR5cGUpCiB7CiAJc3RydWN0IGFncF9tZW1vcnkgKm1lbW9yeTsKIApAQCAtNDg0LDcgKzQ4NCw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYWdwX2NsaWVudCAqYWdwX2ZpbmRfY2xpZW50X2J5X3BpZChwaWRfdCBpZCkKK3N0cnVjdCBhZ3BfY2xpZW50ICphZ3BfZmluZF9jbGllbnRfYnlfcGlkKHBpZF90IGlkKQogewogCXN0cnVjdCBhZ3BfY2xpZW50ICp0ZW1wOwogCkBAIC01MDksNyArNTA5LDcgQEAKIAlhZ3BfZmUuY3VycmVudF9jb250cm9sbGVyLT5udW1fY2xpZW50cysrOwogfQogCi1zdGF0aWMgc3RydWN0IGFncF9jbGllbnQgKmFncF9jcmVhdGVfY2xpZW50KHBpZF90IGlkKQorc3RydWN0IGFncF9jbGllbnQgKmFncF9jcmVhdGVfY2xpZW50KHBpZF90IGlkKQogewogCXN0cnVjdCBhZ3BfY2xpZW50ICpuZXdfY2xpZW50OwogCkBAIC01MjIsNyArNTIyLDcgQEAKIAlyZXR1cm4gbmV3X2NsaWVudDsKIH0KIAotc3RhdGljIGludCBhZ3BfcmVtb3ZlX2NsaWVudChwaWRfdCBpZCkKK2ludCBhZ3BfcmVtb3ZlX2NsaWVudChwaWRfdCBpZCkKIHsKIAlzdHJ1Y3QgYWdwX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBhZ3BfY2xpZW50ICpwcmV2X2NsaWVudDsKQEAgLTc0Niw3ICs3NDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFncGlvY19hY3F1aXJlX3dyYXAoc3RydWN0IGFncF9maWxlX3ByaXZhdGUgKnByaXYpCitpbnQgYWdwaW9jX2FjcXVpcmVfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdikKIHsKIAlzdHJ1Y3QgYWdwX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CiAKQEAgLTc4OSwxNCArNzg5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWdwaW9jX3JlbGVhc2Vfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdikKK2ludCBhZ3Bpb2NfcmVsZWFzZV93cmFwKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICpwcml2KQogewogCURCRygiIik7CiAJYWdwX2NvbnRyb2xsZXJfcmVsZWFzZV9jdXJyZW50KGFncF9mZS5jdXJyZW50X2NvbnRyb2xsZXIsIHByaXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFncGlvY19zZXR1cF93cmFwKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICpwcml2LCB2b2lkIF9fdXNlciAqYXJnKQoraW50IGFncGlvY19zZXR1cF93cmFwKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICpwcml2LCB2b2lkIF9fdXNlciAqYXJnKQogewogCXN0cnVjdCBhZ3Bfc2V0dXAgbW9kZTsKIApAQCAtODc2LDcgKzg3Niw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgYWdwaW9jX3Byb3RlY3Rfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdikKK2ludCBhZ3Bpb2NfcHJvdGVjdF93cmFwKHN0cnVjdCBhZ3BfZmlsZV9wcml2YXRlICpwcml2KQogewogCURCRygiIik7CiAJLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkICovCkBAIC04OTIsNiArODkyLDkgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmFsbG9jLCBhcmcsIHNpemVvZihzdHJ1Y3QgYWdwX2FsbG9jYXRlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJaWYgKGFsbG9jLnR5cGUgPj0gQUdQX1VTRVJfVFlQRVMpCisJCXJldHVybiAtRUlOVkFMOworCiAJbWVtb3J5ID0gYWdwX2FsbG9jYXRlX21lbW9yeV93cmFwKGFsbG9jLnBnX2NvdW50LCBhbGxvYy50eXBlKTsKIAogCWlmIChtZW1vcnkgPT0gTlVMTCkKQEAgLTkwNyw3ICs5MTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFncGlvY19kZWFsbG9jYXRlX3dyYXAoc3RydWN0IGFncF9maWxlX3ByaXZhdGUgKnByaXYsIGludCBhcmcpCitpbnQgYWdwaW9jX2RlYWxsb2NhdGVfd3JhcChzdHJ1Y3QgYWdwX2ZpbGVfcHJpdmF0ZSAqcHJpdiwgaW50IGFyZykKIHsKIAlzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtb3J5OwogCkBAIC0xMDQzLDYgKzEwNDYsOSBAQAogCS5yZWFkCQk9IGFncF9yZWFkLAogCS53cml0ZQkJPSBhZ3Bfd3JpdGUsCiAJLmlvY3RsCQk9IGFncF9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bAk9IGNvbXBhdF9hZ3BfaW9jdGwsCisjZW5kaWYKIAkubW1hcAkJPSBhZ3BfbW1hcCwKIAkub3BlbgkJPSBhZ3Bfb3BlbiwKIAkucmVsZWFzZQk9IGFncF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYwppbmRleCAzNDkxZDZmLi43OTIzMzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYwpAQCAtMTAxLDYgKzEwMSw2MyBAQAogCXJldHVybiAtMTsKIH0KIAorLyoKKyAqIFVzZSBrbWFsbG9jIGlmIHBvc3NpYmxlIGZvciB0aGUgcGFnZSBsaXN0LiBPdGhlcndpc2UgZmFsbCBiYWNrIHRvCisgKiB2bWFsbG9jLiBUaGlzIHNwZWVkcyB0aGluZ3MgdXAgYW5kIGFsc28gc2F2ZXMgbWVtb3J5IGZvciBzbWFsbCBBR1AKKyAqIHJlZ2lvbnMuCisgKi8KKwordm9pZCBhZ3BfYWxsb2NfcGFnZV9hcnJheShzaXplX3Qgc2l6ZSwgc3RydWN0IGFncF9tZW1vcnkgKm1lbSkKK3sKKwltZW0tPm1lbW9yeSA9IE5VTEw7CisJbWVtLT52bWFsbG9jX2ZsYWcgPSAwOworCisJaWYgKHNpemUgPD0gMipQQUdFX1NJWkUpCisJCW1lbS0+bWVtb3J5ID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSk7CisJaWYgKG1lbS0+bWVtb3J5ID09IE5VTEwpIHsKKwkJbWVtLT5tZW1vcnkgPSB2bWFsbG9jKHNpemUpOworCQltZW0tPnZtYWxsb2NfZmxhZyA9IDE7CisJfQorfQorRVhQT1JUX1NZTUJPTChhZ3BfYWxsb2NfcGFnZV9hcnJheSk7CisKK3ZvaWQgYWdwX2ZyZWVfcGFnZV9hcnJheShzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtKQoreworCWlmIChtZW0tPnZtYWxsb2NfZmxhZykgeworCQl2ZnJlZShtZW0tPm1lbW9yeSk7CisJfSBlbHNlIHsKKwkJa2ZyZWUobWVtLT5tZW1vcnkpOworCX0KK30KK0VYUE9SVF9TWU1CT0woYWdwX2ZyZWVfcGFnZV9hcnJheSk7CisKKworc3RhdGljIHN0cnVjdCBhZ3BfbWVtb3J5ICphZ3BfY3JlYXRlX3VzZXJfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnVtX2FncF9wYWdlcykKK3sKKwlzdHJ1Y3QgYWdwX21lbW9yeSAqbmV3OworCXVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZSA9IG51bV9hZ3BfcGFnZXMqc2l6ZW9mKHN0cnVjdCBwYWdlICopOworCisJbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFncF9tZW1vcnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV3ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbmV3LT5rZXkgPSBhZ3BfZ2V0X2tleSgpOworCisJaWYgKG5ldy0+a2V5IDwgMCkgeworCQlrZnJlZShuZXcpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlhZ3BfYWxsb2NfcGFnZV9hcnJheShhbGxvY19zaXplLCBuZXcpOworCisJaWYgKG5ldy0+bWVtb3J5ID09IE5VTEwpIHsKKwkJYWdwX2ZyZWVfa2V5KG5ldy0+a2V5KTsKKwkJa2ZyZWUobmV3KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW5ldy0+bnVtX3NjcmF0Y2hfcGFnZXMgPSAwOworCXJldHVybiBuZXc7Cit9CiAKIHN0cnVjdCBhZ3BfbWVtb3J5ICphZ3BfY3JlYXRlX21lbW9yeShpbnQgc2NyYXRjaF9wYWdlcykKIHsKQEAgLTExNiw3ICsxNzMsOCBAQAogCQlrZnJlZShuZXcpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbmV3LT5tZW1vcnkgPSB2bWFsbG9jKFBBR0VfU0laRSAqIHNjcmF0Y2hfcGFnZXMpOworCisJYWdwX2FsbG9jX3BhZ2VfYXJyYXkoUEFHRV9TSVpFICogc2NyYXRjaF9wYWdlcywgbmV3KTsKIAogCWlmIChuZXctPm1lbW9yeSA9PSBOVUxMKSB7CiAJCWFncF9mcmVlX2tleShuZXctPmtleSk7CkBAIC0xMjQsNiArMTgyLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW5ldy0+bnVtX3NjcmF0Y2hfcGFnZXMgPSBzY3JhdGNoX3BhZ2VzOworCW5ldy0+dHlwZSA9IEFHUF9OT1JNQUxfTUVNT1JZOwogCXJldHVybiBuZXc7CiB9CiBFWFBPUlRfU1lNQk9MKGFncF9jcmVhdGVfbWVtb3J5KTsKQEAgLTE0Niw2ICsyMDUsMTEgQEAKIAlpZiAoY3Vyci0+aXNfYm91bmQgPT0gVFJVRSkKIAkJYWdwX3VuYmluZF9tZW1vcnkoY3Vycik7CiAKKwlpZiAoY3Vyci0+dHlwZSA+PSBBR1BfVVNFUl9UWVBFUykgeworCQlhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUoY3Vycik7CisJCXJldHVybjsKKwl9CisKIAlpZiAoY3Vyci0+dHlwZSAhPSAwKSB7CiAJCWN1cnItPmJyaWRnZS0+ZHJpdmVyLT5mcmVlX2J5X3R5cGUoY3Vycik7CiAJCXJldHVybjsKQEAgLTE1Nyw3ICsyMjEsNyBAQAogCQlmbHVzaF9hZ3BfbWFwcGluZ3MoKTsKIAl9CiAJYWdwX2ZyZWVfa2V5KGN1cnItPmtleSk7Ci0JdmZyZWUoY3Vyci0+bWVtb3J5KTsKKwlhZ3BfZnJlZV9wYWdlX2FycmF5KGN1cnIpOwogCWtmcmVlKGN1cnIpOwogfQogRVhQT1JUX1NZTUJPTChhZ3BfZnJlZV9tZW1vcnkpOwpAQCAtMTg4LDYgKzI1MiwxMyBAQAogCWlmICgoYXRvbWljX3JlYWQoJmJyaWRnZS0+Y3VycmVudF9tZW1vcnlfYWdwKSArIHBhZ2VfY291bnQpID4gYnJpZGdlLT5tYXhfbWVtb3J5X2FncCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlpZiAodHlwZSA+PSBBR1BfVVNFUl9UWVBFUykgeworCQluZXcgPSBhZ3BfZ2VuZXJpY19hbGxvY191c2VyKHBhZ2VfY291bnQsIHR5cGUpOworCQlpZiAobmV3KQorCQkJbmV3LT5icmlkZ2UgPSBicmlkZ2U7CisJCXJldHVybiBuZXc7CisJfQorCiAJaWYgKHR5cGUgIT0gMCkgewogCQluZXcgPSBicmlkZ2UtPmRyaXZlci0+YWxsb2NfYnlfdHlwZShwYWdlX2NvdW50LCB0eXBlKTsKIAkJaWYgKG5ldykKQEAgLTk2MCw2ICsxMDMxLDcgQEAKIAlvZmZfdCBqOwogCXZvaWQgKnRlbXA7CiAJc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlOworCWludCBtYXNrX3R5cGU7CiAKIAlicmlkZ2UgPSBtZW0tPmJyaWRnZTsKIAlpZiAoIWJyaWRnZSkKQEAgLTk5NSw3ICsxMDY3LDExIEBACiAJbnVtX2VudHJpZXMgLT0gYWdwX21lbW9yeV9yZXNlcnZlZC9QQUdFX1NJWkU7CiAJaWYgKG51bV9lbnRyaWVzIDwgMCkgbnVtX2VudHJpZXMgPSAwOwogCi0JaWYgKHR5cGUgIT0gMCB8fCBtZW0tPnR5cGUgIT0gMCkgeworCWlmICh0eXBlICE9IG1lbS0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYXNrX3R5cGUgPSBicmlkZ2UtPmRyaXZlci0+YWdwX3R5cGVfdG9fbWFza190eXBlKGJyaWRnZSwgdHlwZSk7CisJaWYgKG1hc2tfdHlwZSAhPSAwKSB7CiAJCS8qIFRoZSBnZW5lcmljIHJvdXRpbmVzIGtub3cgbm90aGluZyBvZiBtZW1vcnkgdHlwZXMgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTAxOCw3ICsxMDk0LDggQEAKIAl9CiAKIAlmb3IgKGkgPSAwLCBqID0gcGdfc3RhcnQ7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgaisrKSB7Ci0JCXdyaXRlbChicmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkoYnJpZGdlLCBtZW0tPm1lbW9yeVtpXSwgbWVtLT50eXBlKSwgYnJpZGdlLT5nYXR0X3RhYmxlK2opOworCQl3cml0ZWwoYnJpZGdlLT5kcml2ZXItPm1hc2tfbWVtb3J5KGJyaWRnZSwgbWVtLT5tZW1vcnlbaV0sIG1hc2tfdHlwZSksCisJCSAgICAgICBicmlkZ2UtPmdhdHRfdGFibGUraik7CiAJfQogCXJlYWRsKGJyaWRnZS0+Z2F0dF90YWJsZStqLTEpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIApAQCAtMTAzMiw2ICsxMTA5LDcgQEAKIHsKIAlzaXplX3QgaTsKIAlzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7CisJaW50IG1hc2tfdHlwZTsKIAogCWJyaWRnZSA9IG1lbS0+YnJpZGdlOwogCWlmICghYnJpZGdlKQpAQCAtMTA0MCw3ICsxMTE4LDExIEBACiAJaWYgKG1lbS0+cGFnZV9jb3VudCA9PSAwKQogCQlyZXR1cm4gMDsKIAotCWlmICh0eXBlICE9IDAgfHwgbWVtLT50eXBlICE9IDApIHsKKwlpZiAodHlwZSAhPSBtZW0tPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJbWFza190eXBlID0gYnJpZGdlLT5kcml2ZXItPmFncF90eXBlX3RvX21hc2tfdHlwZShicmlkZ2UsIHR5cGUpOworCWlmIChtYXNrX3R5cGUgIT0gMCkgewogCQkvKiBUaGUgZ2VuZXJpYyByb3V0aW5lcyBrbm93IG5vdGhpbmcgb2YgbWVtb3J5IHR5cGVzICovCiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTEwNTYsMjIgKzExMzgsNDAgQEAKIH0KIEVYUE9SVF9TWU1CT0woYWdwX2dlbmVyaWNfcmVtb3ZlX21lbW9yeSk7CiAKLQogc3RydWN0IGFncF9tZW1vcnkgKmFncF9nZW5lcmljX2FsbG9jX2J5X3R5cGUoc2l6ZV90IHBhZ2VfY291bnQsIGludCB0eXBlKQogewogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChhZ3BfZ2VuZXJpY19hbGxvY19ieV90eXBlKTsKIAotCiB2b2lkIGFncF9nZW5lcmljX2ZyZWVfYnlfdHlwZShzdHJ1Y3QgYWdwX21lbW9yeSAqY3VycikKIHsKLQl2ZnJlZShjdXJyLT5tZW1vcnkpOworCWFncF9mcmVlX3BhZ2VfYXJyYXkoY3Vycik7CiAJYWdwX2ZyZWVfa2V5KGN1cnItPmtleSk7CiAJa2ZyZWUoY3Vycik7CiB9CiBFWFBPUlRfU1lNQk9MKGFncF9nZW5lcmljX2ZyZWVfYnlfdHlwZSk7CiAKK3N0cnVjdCBhZ3BfbWVtb3J5ICphZ3BfZ2VuZXJpY19hbGxvY191c2VyKHNpemVfdCBwYWdlX2NvdW50LCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgYWdwX21lbW9yeSAqbmV3OworCWludCBpOworCWludCBwYWdlczsKKworCXBhZ2VzID0gKHBhZ2VfY291bnQgKyBFTlRSSUVTX1BFUl9QQUdFIC0gMSkgLyBFTlRSSUVTX1BFUl9QQUdFOworCW5ldyA9IGFncF9jcmVhdGVfdXNlcl9tZW1vcnkocGFnZV9jb3VudCk7CisJaWYgKG5ldyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspCisJCW5ldy0+bWVtb3J5W2ldID0gMDsKKwluZXctPnBhZ2VfY291bnQgPSAwOworCW5ldy0+dHlwZSA9IHR5cGU7CisJbmV3LT5udW1fc2NyYXRjaF9wYWdlcyA9IHBhZ2VzOworCisJcmV0dXJuIG5ldzsKK30KK0VYUE9SVF9TWU1CT0woYWdwX2dlbmVyaWNfYWxsb2NfdXNlcik7CiAKIC8qCiAgKiBCYXNpYyBQYWdlIEFsbG9jYXRpb24gUm91dGluZXMgLQpAQCAtMTE2NSw2ICsxMjY1LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MKGFncF9nZW5lcmljX21hc2tfbWVtb3J5KTsKIAoraW50IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwKKwkJCQkgIGludCB0eXBlKQoreworCWlmICh0eXBlID49IEFHUF9VU0VSX1RZUEVTKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdHlwZTsKK30KK0VYUE9SVF9TWU1CT0woYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUpOworCiAvKgogICogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhlIEFHUHYzIHNwZWMsCiAgKiB3aGljaCBjb3ZlcnMgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IGhhZCBwcmV2aW91c2x5IGJlZW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2hwLWFncC5jCmluZGV4IDkwN2ZiNjYuLjg0N2RlYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYwpAQCAtNDM4LDYgKzQzOCw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIAkuY2FudF91c2VfYXBlcnR1cmUJPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pNDYwLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pNDYwLWFncC5jCmluZGV4IDkxNzY5NDQuLjNlNzYxODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaTQ2MC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2k0NjAtYWdwLmMKQEAgLTI5Myw2ICsyOTMsOSBAQAogCXByX2RlYnVnKCJpNDYwX2luc2VydF9tZW1vcnlfc21hbGxfaW9fcGFnZShtZW09JXAsIHBnX3N0YXJ0PSVsZCwgdHlwZT0lZCwgcGFkZHIwPTB4JWx4KVxuIiwKIAkJIG1lbSwgcGdfc3RhcnQsIHR5cGUsIG1lbS0+bWVtb3J5WzBdKTsKIAorCWlmICh0eXBlID49IEFHUF9VU0VSX1RZUEVTIHx8IG1lbS0+dHlwZSA+PSBBR1BfVVNFUl9UWVBFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpb19wZ19zdGFydCA9IEk0NjBfSU9QQUdFU19QRVJfS1BBR0UgKiBwZ19zdGFydDsKIAogCXRlbXAgPSBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemU7CkBAIC0zOTYsNiArMzk5LDkgQEAKIAlzdHJ1Y3QgbHBfZGVzYyAqc3RhcnQsICplbmQsICpscDsKIAl2b2lkICp0ZW1wOwogCisJaWYgKHR5cGUgPj0gQUdQX1VTRVJfVFlQRVMgfHwgbWVtLT50eXBlID49IEFHUF9VU0VSX1RZUEVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXRlbXAgPSBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemU7CiAJbnVtX2VudHJpZXMgPSBBX1NJWkVfOCh0ZW1wKS0+bnVtX2VudHJpZXM7CiAKQEAgLTU3Miw2ICs1NzgsNyBAQAogI2VuZGlmCiAJLmFsbG9jX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfYWxsb2NfYnlfdHlwZSwKIAkuZnJlZV9ieV90eXBlCQk9IGFncF9nZW5lcmljX2ZyZWVfYnlfdHlwZSwKKwkuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlLAogCS5jYW50X3VzZV9hcGVydHVyZQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCBhMzAxMWRlLi4wNmIwYmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgogI2luY2x1ZGUgImFncC5oIgpAQCAtMjQsNiArMjUsOSBAQAogICAgICAgICAgICAgICAgICBhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTY1R19IQikKIAogCitleHRlcm4gaW50IGFncF9tZW1vcnlfcmVzZXJ2ZWQ7CisKKwogLyogSW50ZWwgODE1IHJlZ2lzdGVyICovCiAjZGVmaW5lIElOVEVMXzgxNV9BUENPTlQJMHg1MQogI2RlZmluZSBJTlRFTF84MTVfQVRUQkFTRV9NQVNLCX4weDFGRkZGRkZGCkBAIC02OCwxMiArNzIsMTUgQEAKIAogI2RlZmluZSBBR1BfRENBQ0hFX01FTU9SWQkxCiAjZGVmaW5lIEFHUF9QSFlTX01FTU9SWQkJMgorI2RlZmluZSBJTlRFTF9BR1BfQ0FDSEVEX01FTU9SWSAzCiAKIHN0YXRpYyBzdHJ1Y3QgZ2F0dF9tYXNrIGludGVsX2k4MTBfbWFza3NbXSA9CiB7CiAJey5tYXNrID0gSTgxMF9QVEVfVkFMSUQsIC50eXBlID0gMH0sCiAJey5tYXNrID0gKEk4MTBfUFRFX1ZBTElEIHwgSTgxMF9QVEVfTE9DQUwpLCAudHlwZSA9IEFHUF9EQ0FDSEVfTUVNT1JZfSwKLQl7Lm1hc2sgPSBJODEwX1BURV9WQUxJRCwgLnR5cGUgPSAwfQorCXsubWFzayA9IEk4MTBfUFRFX1ZBTElELCAudHlwZSA9IDB9LAorCXsubWFzayA9IEk4MTBfUFRFX1ZBTElEIHwgSTgzMF9QVEVfU1lTVEVNX0NBQ0hFRCwKKwkgLnR5cGUgPSBJTlRFTF9BR1BfQ0FDSEVEX01FTU9SWX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgX2ludGVsX2k4MTBfcHJpdmF0ZSB7CkBAIC0xMTcsMTMgKzEyNCwxNSBAQAogCiAJY3VycmVudF9zaXplID0gQV9TSVpFX0ZJWChhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemUpOwogCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGludGVsX2k4MTBfcHJpdmF0ZS5pODEwX2RldiwgSTgxMF9NTUFERFIsICZ0ZW1wKTsKLQl0ZW1wICY9IDB4ZmZmODAwMDA7Ci0KLQlpbnRlbF9pODEwX3ByaXZhdGUucmVnaXN0ZXJzID0gaW9yZW1hcCh0ZW1wLCAxMjggKiA0MDk2KTsKIAlpZiAoIWludGVsX2k4MTBfcHJpdmF0ZS5yZWdpc3RlcnMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5hYmxlIHRvIHJlbWFwIG1lbW9yeS5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGludGVsX2k4MTBfcHJpdmF0ZS5pODEwX2RldiwgSTgxMF9NTUFERFIsICZ0ZW1wKTsKKwkJdGVtcCAmPSAweGZmZjgwMDAwOworCisJCWludGVsX2k4MTBfcHJpdmF0ZS5yZWdpc3RlcnMgPSBpb3JlbWFwKHRlbXAsIDEyOCAqIDQwOTYpOworCQlpZiAoIWludGVsX2k4MTBfcHJpdmF0ZS5yZWdpc3RlcnMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byByZW1hcCBtZW1vcnkuXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAJfQogCiAJaWYgKChyZWFkbChpbnRlbF9pODEwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfRFJBTV9DVEwpCkBAIC0yMDEsNjIgKzIxMCw3OSBAQAogCWF0b21pY19kZWMoJmFncF9icmlkZ2UtPmN1cnJlbnRfbWVtb3J5X2FncCk7CiB9CiAKK3N0YXRpYyBpbnQgaW50ZWxfaTgzMF90eXBlX3RvX21hc2tfdHlwZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsCisJCQkJCWludCB0eXBlKQoreworCWlmICh0eXBlIDwgQUdQX1VTRVJfVFlQRVMpCisJCXJldHVybiB0eXBlOworCWVsc2UgaWYgKHR5cGUgPT0gQUdQX1VTRVJfQ0FDSEVEX01FTU9SWSkKKwkJcmV0dXJuIElOVEVMX0FHUF9DQUNIRURfTUVNT1JZOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaW50ZWxfaTgxMF9pbnNlcnRfZW50cmllcyhzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtLCBvZmZfdCBwZ19zdGFydCwKIAkJCQlpbnQgdHlwZSkKIHsKIAlpbnQgaSwgaiwgbnVtX2VudHJpZXM7CiAJdm9pZCAqdGVtcDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgbWFza190eXBlOwogCiAJaWYgKG1lbS0+cGFnZV9jb3VudCA9PSAwKQotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAKIAl0ZW1wID0gYWdwX2JyaWRnZS0+Y3VycmVudF9zaXplOwogCW51bV9lbnRyaWVzID0gQV9TSVpFX0ZJWCh0ZW1wKS0+bnVtX2VudHJpZXM7CiAKIAlpZiAoKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KSA+IG51bV9lbnRyaWVzKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXRfZXJyOworCiAKIAlmb3IgKGogPSBwZ19zdGFydDsgaiA8IChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCk7IGorKykgewotCQlpZiAoIVBHRV9FTVBUWShhZ3BfYnJpZGdlLCByZWFkbChhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlK2opKSkKLQkJCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JaWYgKHR5cGUgIT0gMCB8fCBtZW0tPnR5cGUgIT0gMCkgewotCQlpZiAoKHR5cGUgPT0gQUdQX0RDQUNIRV9NRU1PUlkpICYmIChtZW0tPnR5cGUgPT0gQUdQX0RDQUNIRV9NRU1PUlkpKSB7Ci0JCQkvKiBzcGVjaWFsIGluc2VydCAqLwotCQkJaWYgKCFtZW0tPmlzX2ZsdXNoZWQpIHsKLQkJCQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKLQkJCQltZW0tPmlzX2ZsdXNoZWQgPSBUUlVFOwotCQkJfQotCi0JCQlmb3IgKGkgPSBwZ19zdGFydDsgaSA8IChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCk7IGkrKykgewotCQkJCXdyaXRlbCgoaSo0MDk2KXxJODEwX1BURV9MT0NBTHxJODEwX1BURV9WQUxJRCwgaW50ZWxfaTgxMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsKLQkJCX0KLQkJCXJlYWRsKGludGVsX2k4MTBfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoKGktMSkqNCkpOwkvKiBQQ0kgUG9zdGluZy4gKi8KLQotCQkJYWdwX2JyaWRnZS0+ZHJpdmVyLT50bGJfZmx1c2gobWVtKTsKLQkJCXJldHVybiAwOworCQlpZiAoIVBHRV9FTVBUWShhZ3BfYnJpZGdlLCByZWFkbChhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlK2opKSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBvdXRfZXJyOwogCQl9Ci0JCWlmICgodHlwZSA9PSBBR1BfUEhZU19NRU1PUlkpICYmIChtZW0tPnR5cGUgPT0gQUdQX1BIWVNfTUVNT1JZKSkKLQkJCWdvdG8gaW5zZXJ0OwotCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLWluc2VydDoKLQlpZiAoIW1lbS0+aXNfZmx1c2hlZCkgewotCQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKLQkJbWVtLT5pc19mbHVzaGVkID0gVFJVRTsKLQl9CisJaWYgKHR5cGUgIT0gbWVtLT50eXBlKQorCQlnb3RvIG91dF9lcnI7CiAKLQlmb3IgKGkgPSAwLCBqID0gcGdfc3RhcnQ7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgaisrKSB7Ci0JCXdyaXRlbChhZ3BfYnJpZGdlLT5kcml2ZXItPm1hc2tfbWVtb3J5KGFncF9icmlkZ2UsCi0JCQltZW0tPm1lbW9yeVtpXSwgbWVtLT50eXBlKSwKLQkJCWludGVsX2k4MTBfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoaio0KSk7CisJbWFza190eXBlID0gYWdwX2JyaWRnZS0+ZHJpdmVyLT5hZ3BfdHlwZV90b19tYXNrX3R5cGUoYWdwX2JyaWRnZSwgdHlwZSk7CisKKwlzd2l0Y2ggKG1hc2tfdHlwZSkgeworCWNhc2UgQUdQX0RDQUNIRV9NRU1PUlk6CisJCWlmICghbWVtLT5pc19mbHVzaGVkKQorCQkJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CisJCWZvciAoaSA9IHBnX3N0YXJ0OyBpIDwgKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KTsgaSsrKSB7CisJCQl3cml0ZWwoKGkqNDA5Nil8STgxMF9QVEVfTE9DQUx8STgxMF9QVEVfVkFMSUQsCisJCQkgICAgICAgaW50ZWxfaTgxMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsKKwkJfQorCQlyZWFkbChpbnRlbF9pODEwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKChpLTEpKjQpKTsKKwkJYnJlYWs7CisJY2FzZSBBR1BfUEhZU19NRU1PUlk6CisJY2FzZSBBR1BfTk9STUFMX01FTU9SWToKKwkJaWYgKCFtZW0tPmlzX2ZsdXNoZWQpCisJCQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKKwkJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgeworCQkJd3JpdGVsKGFncF9icmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkoYWdwX2JyaWRnZSwKKwkJCQkJCQkgICAgICAgbWVtLT5tZW1vcnlbaV0sCisJCQkJCQkJICAgICAgIG1hc2tfdHlwZSksCisJCQkgICAgICAgaW50ZWxfaTgxMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhqKjQpKTsKKwkJfQorCQlyZWFkbChpbnRlbF9pODEwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKChqLTEpKjQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBvdXRfZXJyOwogCX0KLQlyZWFkbChpbnRlbF9pODEwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKChqLTEpKjQpKTsJLyogUENJIFBvc3RpbmcuICovCiAKIAlhZ3BfYnJpZGdlLT5kcml2ZXItPnRsYl9mbHVzaChtZW0pOwotCXJldHVybiAwOworb3V0OgorCXJldCA9IDA7CitvdXRfZXJyOgorCW1lbS0+aXNfZmx1c2hlZCA9IDE7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpbnRlbF9pODEwX3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBhZ3BfbWVtb3J5ICptZW0sIG9mZl90IHBnX3N0YXJ0LApAQCAtMzM3LDEyICszNjMsMTEgQEAKIAkJbmV3LT50eXBlID0gQUdQX0RDQUNIRV9NRU1PUlk7CiAJCW5ldy0+cGFnZV9jb3VudCA9IHBnX2NvdW50OwogCQluZXctPm51bV9zY3JhdGNoX3BhZ2VzID0gMDsKLQkJdmZyZWUobmV3LT5tZW1vcnkpOworCQlhZ3BfZnJlZV9wYWdlX2FycmF5KG5ldyk7CiAJCXJldHVybiBuZXc7CiAJfQogCWlmICh0eXBlID09IEFHUF9QSFlTX01FTU9SWSkKIAkJcmV0dXJuIGFsbG9jX2FncHBoeXNtZW1faTh4eChwZ19jb3VudCwgdHlwZSk7Ci0KIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMzU3LDcgKzM4Miw3IEBACiAJCQkJIGdhcnRfdG9fdmlydChjdXJyLT5tZW1vcnlbMF0pKTsKIAkJCWdsb2JhbF9mbHVzaF90bGIoKTsKIAkJfQotCQl2ZnJlZShjdXJyLT5tZW1vcnkpOworCQlhZ3BfZnJlZV9wYWdlX2FycmF5KGN1cnIpOwogCX0KIAlrZnJlZShjdXJyKTsKIH0KQEAgLTYxOSw5ICs2NDQsMTEgQEAKIHsKIAlpbnQgaSxqLG51bV9lbnRyaWVzOwogCXZvaWQgKnRlbXA7CisJaW50IHJldCA9IC1FSU5WQUw7CisJaW50IG1hc2tfdHlwZTsKIAogCWlmIChtZW0tPnBhZ2VfY291bnQgPT0gMCkKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCiAJdGVtcCA9IGFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZTsKIAludW1fZW50cmllcyA9IEFfU0laRV9GSVgodGVtcCktPm51bV9lbnRyaWVzOwpAQCAtNjMxLDM0ICs2NTgsNDEgQEAKIAkJCQlwZ19zdGFydCxpbnRlbF9pODMwX3ByaXZhdGUuZ3R0X2VudHJpZXMpOwogCiAJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVHJ5aW5nIHRvIGluc2VydCBpbnRvIGxvY2FsL3N0b2xlbiBtZW1vcnlcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXRfZXJyOwogCX0KIAogCWlmICgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpID4gbnVtX2VudHJpZXMpCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dF9lcnI7CiAKIAkvKiBUaGUgaTgzMCBjYW4ndCBjaGVjayB0aGUgR1RUIGZvciBlbnRyaWVzIHNpbmNlIGl0cyByZWFkIG9ubHksCiAJICogZGVwZW5kIG9uIHRoZSBjYWxsZXIgdG8gbWFrZSB0aGUgY29ycmVjdCBvZmZzZXQgZGVjaXNpb25zLgogCSAqLwogCi0JaWYgKCh0eXBlICE9IDAgJiYgdHlwZSAhPSBBR1BfUEhZU19NRU1PUlkpIHx8Ci0JCShtZW0tPnR5cGUgIT0gMCAmJiBtZW0tPnR5cGUgIT0gQUdQX1BIWVNfTUVNT1JZKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHR5cGUgIT0gbWVtLT50eXBlKQorCQlnb3RvIG91dF9lcnI7CiAKLQlpZiAoIW1lbS0+aXNfZmx1c2hlZCkgeworCW1hc2tfdHlwZSA9IGFncF9icmlkZ2UtPmRyaXZlci0+YWdwX3R5cGVfdG9fbWFza190eXBlKGFncF9icmlkZ2UsIHR5cGUpOworCisJaWYgKG1hc2tfdHlwZSAhPSAwICYmIG1hc2tfdHlwZSAhPSBBR1BfUEhZU19NRU1PUlkgJiYKKwkgICAgbWFza190eXBlICE9IElOVEVMX0FHUF9DQUNIRURfTUVNT1JZKQorCQlnb3RvIG91dF9lcnI7CisKKwlpZiAoIW1lbS0+aXNfZmx1c2hlZCkKIAkJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0JCW1lbS0+aXNfZmx1c2hlZCA9IFRSVUU7Ci0JfQogCiAJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAotCQkJbWVtLT5tZW1vcnlbaV0sIG1lbS0+dHlwZSksCi0JCQlpbnRlbF9pODMwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGoqNCkpOworCQkJCQkJICAgICAgIG1lbS0+bWVtb3J5W2ldLCBtYXNrX3R5cGUpLAorCQkgICAgICAgaW50ZWxfaTgzMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhqKjQpKTsKIAl9CiAJcmVhZGwoaW50ZWxfaTgzMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoai0xKSo0KSk7Ci0KIAlhZ3BfYnJpZGdlLT5kcml2ZXItPnRsYl9mbHVzaChtZW0pOwotCXJldHVybiAwOworCitvdXQ6CisJcmV0ID0gMDsKK291dF9lcnI6CisJbWVtLT5pc19mbHVzaGVkID0gMTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGludGVsX2k4MzBfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGFncF9tZW1vcnkgKm1lbSxvZmZfdCBwZ19zdGFydCwKQEAgLTY4Nyw3ICs3MjEsNiBAQAogewogCWlmICh0eXBlID09IEFHUF9QSFlTX01FTU9SWSkKIAkJcmV0dXJuIGFsbG9jX2FncHBoeXNtZW1faTh4eChwZ19jb3VudCwgdHlwZSk7Ci0KIAkvKiBhbHdheXMgcmV0dXJuIE5VTEwgZm9yIG90aGVyIGFsbG9jYXRpb24gdHlwZXMgZm9yIG5vdyAqLwogCXJldHVybiBOVUxMOwogfQpAQCAtNzM0LDkgKzc2NywxMSBAQAogewogCWludCBpLGosbnVtX2VudHJpZXM7CiAJdm9pZCAqdGVtcDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgbWFza190eXBlOwogCiAJaWYgKG1lbS0+cGFnZV9jb3VudCA9PSAwKQotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAKIAl0ZW1wID0gYWdwX2JyaWRnZS0+Y3VycmVudF9zaXplOwogCW51bV9lbnRyaWVzID0gQV9TSVpFX0ZJWCh0ZW1wKS0+bnVtX2VudHJpZXM7CkBAIC03NDYsMzMgKzc4MSw0MSBAQAogCQkJCXBnX3N0YXJ0LGludGVsX2k4MzBfcHJpdmF0ZS5ndHRfZW50cmllcyk7CiAKIAkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJUcnlpbmcgdG8gaW5zZXJ0IGludG8gbG9jYWwvc3RvbGVuIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dF9lcnI7CiAJfQogCiAJaWYgKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPiBudW1fZW50cmllcykKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0X2VycjsKIAotCS8qIFRoZSBpODMwIGNhbid0IGNoZWNrIHRoZSBHVFQgZm9yIGVudHJpZXMgc2luY2UgaXRzIHJlYWQgb25seSwKKwkvKiBUaGUgaTkxNSBjYW4ndCBjaGVjayB0aGUgR1RUIGZvciBlbnRyaWVzIHNpbmNlIGl0cyByZWFkIG9ubHksCiAJICogZGVwZW5kIG9uIHRoZSBjYWxsZXIgdG8gbWFrZSB0aGUgY29ycmVjdCBvZmZzZXQgZGVjaXNpb25zLgogCSAqLwogCi0JaWYgKCh0eXBlICE9IDAgJiYgdHlwZSAhPSBBR1BfUEhZU19NRU1PUlkpIHx8Ci0JCShtZW0tPnR5cGUgIT0gMCAmJiBtZW0tPnR5cGUgIT0gQUdQX1BIWVNfTUVNT1JZKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHR5cGUgIT0gbWVtLT50eXBlKQorCQlnb3RvIG91dF9lcnI7CiAKLQlpZiAoIW1lbS0+aXNfZmx1c2hlZCkgeworCW1hc2tfdHlwZSA9IGFncF9icmlkZ2UtPmRyaXZlci0+YWdwX3R5cGVfdG9fbWFza190eXBlKGFncF9icmlkZ2UsIHR5cGUpOworCisJaWYgKG1hc2tfdHlwZSAhPSAwICYmIG1hc2tfdHlwZSAhPSBBR1BfUEhZU19NRU1PUlkgJiYKKwkgICAgbWFza190eXBlICE9IElOVEVMX0FHUF9DQUNIRURfTUVNT1JZKQorCQlnb3RvIG91dF9lcnI7CisKKwlpZiAoIW1lbS0+aXNfZmx1c2hlZCkKIAkJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0JCW1lbS0+aXNfZmx1c2hlZCA9IFRSVUU7Ci0JfQogCiAJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAotCQkJbWVtLT5tZW1vcnlbaV0sIG1lbS0+dHlwZSksIGludGVsX2k4MzBfcHJpdmF0ZS5ndHQraik7CisJCQltZW0tPm1lbW9yeVtpXSwgbWFza190eXBlKSwgaW50ZWxfaTgzMF9wcml2YXRlLmd0dCtqKTsKIAl9Ci0JcmVhZGwoaW50ZWxfaTgzMF9wcml2YXRlLmd0dCtqLTEpOwogCisJcmVhZGwoaW50ZWxfaTgzMF9wcml2YXRlLmd0dCtqLTEpOwogCWFncF9icmlkZ2UtPmRyaXZlci0+dGxiX2ZsdXNoKG1lbSk7Ci0JcmV0dXJuIDA7CisKKyBvdXQ6CisJcmV0ID0gMDsKKyBvdXRfZXJyOgorCW1lbS0+aXNfZmx1c2hlZCA9IDE7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpbnRlbF9pOTE1X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBhZ3BfbWVtb3J5ICptZW0sb2ZmX3QgcGdfc3RhcnQsCkBAIC04MDMsNyArODQ2LDcgQEAKICAqLwogc3RhdGljIGludCBpbnRlbF9pOXh4X2ZldGNoX3NpemUodm9pZCkKIHsKLQlpbnQgbnVtX3NpemVzID0gc2l6ZW9mKGludGVsX2k4MzBfc2l6ZXMpIC8gc2l6ZW9mKCppbnRlbF9pODMwX3NpemVzKTsKKwlpbnQgbnVtX3NpemVzID0gQVJSQVlfU0laRShpbnRlbF9pODMwX3NpemVzKTsKIAlpbnQgYXBlcl9zaXplOyAvKiBzaXplIGluIG1lZ2FieXRlcyAqLwogCWludCBpOwogCkBAIC0xMzg0LDYgKzE0MjcsNyBAQAogCS5mcmVlX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLAogCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLAorCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGludGVsXzgxMF9kcml2ZXIgPSB7CkBAIC0xNDA4LDYgKzE0NTIsNyBAQAogCS5mcmVlX2J5X3R5cGUJCT0gaW50ZWxfaTgxMF9mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgaW50ZWxfODE1X2RyaXZlciA9IHsKQEAgLTE0MzEsNiArMTQ3Niw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgaW50ZWxfODMwX2RyaXZlciA9IHsKQEAgLTE0NTUsNiArMTUwMSw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBpbnRlbF9pODEwX2ZyZWVfYnlfdHlwZSwKIAkuYWdwX2FsbG9jX3BhZ2UJCT0gYWdwX2dlbmVyaWNfYWxsb2NfcGFnZSwKIAkuYWdwX2Rlc3Ryb3lfcGFnZQk9IGFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZSwKKwkuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGludGVsX2k4MzBfdHlwZV90b19tYXNrX3R5cGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGludGVsXzgyMF9kcml2ZXIgPSB7CkBAIC0xNDc4LDYgKzE1MjUsNyBAQAogCS5mcmVlX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLAogCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLAorCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGludGVsXzgzMG1wX2RyaXZlciA9IHsKQEAgLTE1MDEsNiArMTU0OSw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgaW50ZWxfODQwX2RyaXZlciA9IHsKQEAgLTE1MjQsNiArMTU3Myw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgaW50ZWxfODQ1X2RyaXZlciA9IHsKQEAgLTE1NDcsNiArMTU5Nyw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgaW50ZWxfODUwX2RyaXZlciA9IHsKQEAgLTE1NzAsNiArMTYyMSw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgaW50ZWxfODYwX2RyaXZlciA9IHsKQEAgLTE1OTMsNiArMTY0NSw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgaW50ZWxfOTE1X2RyaXZlciA9IHsKQEAgLTE2MTcsNiArMTY3MCw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBpbnRlbF9pODEwX2ZyZWVfYnlfdHlwZSwKIAkuYWdwX2FsbG9jX3BhZ2UJCT0gYWdwX2dlbmVyaWNfYWxsb2NfcGFnZSwKIAkuYWdwX2Rlc3Ryb3lfcGFnZQk9IGFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZSwKKwkuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGludGVsX2k4MzBfdHlwZV90b19tYXNrX3R5cGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGludGVsX2k5NjVfZHJpdmVyID0gewpAQCAtMTY0MSw2ICsxNjk1LDcgQEAKICAgICAgICAuZnJlZV9ieV90eXBlICAgICAgICAgICA9IGludGVsX2k4MTBfZnJlZV9ieV90eXBlLAogICAgICAgIC5hZ3BfYWxsb2NfcGFnZSAgICAgICAgID0gYWdwX2dlbmVyaWNfYWxsb2NfcGFnZSwKICAgICAgICAuYWdwX2Rlc3Ryb3lfcGFnZSAgICAgICA9IGFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZSwKKyAgICAgICAuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGludGVsX2k4MzBfdHlwZV90b19tYXNrX3R5cGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGludGVsXzc1MDVfZHJpdmVyID0gewpAQCAtMTY2NCw2ICsxNzE5LDcgQEAKIAkuZnJlZV9ieV90eXBlCQk9IGFncF9nZW5lcmljX2ZyZWVfYnlfdHlwZSwKIAkuYWdwX2FsbG9jX3BhZ2UJCT0gYWdwX2dlbmVyaWNfYWxsb2NfcGFnZSwKIAkuYWdwX2Rlc3Ryb3lfcGFnZQk9IGFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZSwKKwkuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlLAogfTsKIAogc3RhdGljIGludCBmaW5kX2k4MTAodTE2IGRldmljZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKaW5kZXggZGY3ZjM3Yi4uMjU2MzI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKQEAgLTMxMCw2ICszMTAsNyBAQAogCS5mcmVlX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLAogCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLAorCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZ3BfbnZpZGlhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYwppbmRleCAxN2M1MGIwLi5iN2I0NTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYwpAQCAtMjI4LDYgKzIyOCw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIAkuY2FudF91c2VfYXBlcnR1cmUJPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9zZ2ktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3NnaS1hZ3AuYwppbmRleCA5MDI2NDhkLi45MmQxZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3NnaS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3NnaS1hZ3AuYwpAQCAtMjY1LDYgKzI2NSw3IEBACiAJLmZyZWVfYnlfdHlwZSA9IGFncF9nZW5lcmljX2ZyZWVfYnlfdHlwZSwKIAkuYWdwX2FsbG9jX3BhZ2UgPSBzZ2lfdGlvY2FfYWxsb2NfcGFnZSwKIAkuYWdwX2Rlc3Ryb3lfcGFnZSA9IGFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZSwKKwkuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlLAogCS5jYW50X3VzZV9hcGVydHVyZSA9IDEsCiAJLm5lZWRzX3NjcmF0Y2hfcGFnZSA9IDAsCiAJLm51bV9hcGVydHVyZV9zaXplcyA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3Npcy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCmluZGV4IGEwMGZkNDguLjYwMzQyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jCkBAIC0xNDAsNiArMTQwLDcgQEAKIAkuZnJlZV9ieV90eXBlCQk9IGFncF9nZW5lcmljX2ZyZWVfYnlfdHlwZSwKIAkuYWdwX2FsbG9jX3BhZ2UJCT0gYWdwX2dlbmVyaWNfYWxsb2NfcGFnZSwKIAkuYWdwX2Rlc3Ryb3lfcGFnZQk9IGFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZSwKKwkuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlLAogfTsKIAogc3RhdGljIHN0cnVjdCBhZ3BfZGV2aWNlX2lkcyBzaXNfYWdwX2RldmljZV9pZHNbXSBfX2RldmluaXRkYXRhID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3Avc3dvcmtzLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKaW5kZXggNGYyZDdkOS4uOWY1YWU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKQEAgLTQ0NCw2ICs0NDQsNyBAQAogCS5mcmVlX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLAogCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLAorCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZ3Bfc2VydmVyd29ya3NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYwppbmRleCBkZmZjMTkzLi42YzQ1NzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKQEAgLTUxMCw2ICs1MTAsNyBAQAogCS5mcmVlX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLAogCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLAorCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsCiAJLmNhbnRfdXNlX2FwZXJ0dXJlCT0gMSwKIH07CiAKQEAgLTUzNCw2ICs1MzUsNyBAQAogCS5mcmVlX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLAogCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLAorCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsCiAJLmNhbnRfdXNlX2FwZXJ0dXJlCT0gMSwKIAkubmVlZHNfc2NyYXRjaF9wYWdlCT0gMSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCmluZGV4IDJkZWQ3YTI4Li4yZTdjMDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwpAQCAtMTkxLDYgKzE5MSw3IEBACiAJLmZyZWVfYnlfdHlwZQkJPSBhZ3BfZ2VuZXJpY19mcmVlX2J5X3R5cGUsCiAJLmFncF9hbGxvY19wYWdlCQk9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UsCiAJLmFncF9kZXN0cm95X3BhZ2UJPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2UsCisJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgdmlhX2RyaXZlciA9IHsKQEAgLTIxNCw2ICsyMTUsNyBAQAogCS5mcmVlX2J5X3R5cGUJCT0gYWdwX2dlbmVyaWNfZnJlZV9ieV90eXBlLAogCS5hZ3BfYWxsb2NfcGFnZQkJPSBhZ3BfZ2VuZXJpY19hbGxvY19wYWdlLAogCS5hZ3BfZGVzdHJveV9wYWdlCT0gYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlLAorCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFncF9kZXZpY2VfaWRzIHZpYV9hZ3BfZGV2aWNlX2lkc1tdIF9fZGV2aW5pdGRhdGEgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2hhbmdjaGVjay10aW1lci5jIGIvZHJpdmVycy9jaGFyL2hhbmdjaGVjay10aW1lci5jCmluZGV4IDFhYTkzYTcuLmFlNzZhOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9oYW5nY2hlY2stdGltZXIuYworKysgYi9kcml2ZXJzL2NoYXIvaGFuZ2NoZWNrLXRpbWVyLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogX19zZXR1cCgiaGNoZWNrX2R1bXBfdGFza3MiLCBoYW5nY2hlY2tfcGFyc2VfZHVtcF90YXNrcyk7CiAjZW5kaWYgLyogbm90IE1PRFVMRSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19TMzkwKQorI2lmIGRlZmluZWQoQ09ORklHX1MzOTApCiAjIGRlZmluZSBIQVZFX01PTk9UT05JQwogIyBkZWZpbmUgVElNRVJfRlJFUSAxMDAwMDAwMDAwVUxMCiAjZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi9pMmxpYi5jIGIvZHJpdmVycy9jaGFyL2lwMi9pMmxpYi5jCmluZGV4IGY4NmZhMGMuLmU0NjEyMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDIvaTJsaWIuYworKysgYi9kcml2ZXJzL2NoYXIvaXAyL2kybGliLmMKQEAgLTgwLDcgKzgwLDcgQEAKIC8vIE5vdCBhIGRvY3VtZW50ZWQgcGFydCBvZiB0aGUgbGlicmFyeSByb3V0aW5lcyAoY2FyZWZ1bC4uLikgYnV0IHRoZSBEaWFnbm9zdGljCiAvLyBpMmRpYWcuYyBmaW5kcyB0aGVtIHVzZWZ1bCB0byBoZWxwIHRoZSB0aHJvdWdocHV0IGluIGNlcnRhaW4gbGltaXRlZAogLy8gc2luZ2xlLXRocmVhZGVkIG9wZXJhdGlvbnMuCi1zdGF0aWMgaW5saW5lIHZvaWQgaWlTZW5kUGVuZGluZ01haWwoaTJlQm9yZFN0clB0cik7CitzdGF0aWMgdm9pZCBpaVNlbmRQZW5kaW5nTWFpbChpMmVCb3JkU3RyUHRyKTsKIHN0YXRpYyB2b2lkIHNlcnZpY2VPdXRnb2luZ0ZpZm8oaTJlQm9yZFN0clB0cik7CiAKIC8vIEZ1bmN0aW9ucyBkZWZpbmVkIGluIGlwMi5jIGFzIHBhcnQgb2YgaW50ZXJydXB0IGhhbmRsaW5nCkBAIC0xNjYsNyArMTY2LDcgQEAKIC8vIElmIGFueSBvdXRnb2luZyBtYWlsIGJpdHMgYXJlIHNldCBhbmQgdGhlcmUgaXMgb3V0Z29pbmcgbWFpbGJveCBpcyBlbXB0eSwKIC8vIHNlbmQgdGhlIG1haWwgYW5kIGNsZWFyIHRoZSBiaXRzLgogLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIGlpU2VuZFBlbmRpbmdNYWlsKGkyZUJvcmRTdHJQdHIgcEIpCiB7CiAJaWYgKHBCLT5pMmVPdXRNYWlsV2FpdGluZyAmJiAoIXBCLT5pMmVXYWl0aW5nRm9yRW1wdHlGaWZvKSApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbGNkLmMgYi9kcml2ZXJzL2NoYXIvbGNkLmMKaW5kZXggZDY0OWFiYi4uNWY0ZmRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2xjZC5jCisrKyBiL2RyaXZlcnMvY2hhci9sY2QuYwpAQCAtNDA5LDEzOCArNDA5LDYgQEAKIAkJCWJyZWFrOwogCQl9CiAKLS8vICBFcmFzZSB0aGUgZmxhc2gKLQotCWNhc2UgRkxBU0hfRXJhc2U6ewotCi0JCQlpbnQgY3RyID0gMDsKLQotCQkJaWYgKCAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSApIHJldHVybiAtRVBFUk07Ci0KLQkJCXByX2luZm8oTENEICJFcmFzaW5nIEZsYXNoXG4iKTsKLQotCQkJLy8gQ2hpcCBFcmFzZSBTZXF1ZW5jZQotCQkJV1JJVEVfRkxBU0goa0ZsYXNoX0FkZHIxLCBrRmxhc2hfRGF0YTEpOwotCQkJV1JJVEVfRkxBU0goa0ZsYXNoX0FkZHIyLCBrRmxhc2hfRGF0YTIpOwotCQkJV1JJVEVfRkxBU0goa0ZsYXNoX0FkZHIxLCBrRmxhc2hfRXJhc2UzKTsKLQkJCVdSSVRFX0ZMQVNIKGtGbGFzaF9BZGRyMSwga0ZsYXNoX0RhdGExKTsKLQkJCVdSSVRFX0ZMQVNIKGtGbGFzaF9BZGRyMiwga0ZsYXNoX0RhdGEyKTsKLQkJCVdSSVRFX0ZMQVNIKGtGbGFzaF9BZGRyMSwga0ZsYXNoX0VyYXNlNik7Ci0KLQkJCXdoaWxlICgoIWRxcG9sbCgweDAwMDAwMDAwLCAweEZGKSkKLQkJCSAgICAgICAmJiAoIXRpbWVvdXQoMHgwMDAwMDAwMCkpKSB7Ci0JCQkJY3RyKys7Ci0JCQl9Ci0KLQkJCWlmIChSRUFEX0ZMQVNIKDB4MDdGRkYwKSA9PSAweEZGKSB7Ci0JCQkJcHJfaW5mbyhMQ0QgIkVyYXNlIFN1Y2Nlc3NmdWxcbiIpOwotCQkJfSBlbHNlIGlmICh0aW1lb3V0KSB7Ci0JCQkJcHJfaW5mbyhMQ0QgIkVyYXNlIFRpbWVkIE91dFxuIik7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQl9Ci0KLS8vIGJ1cm4gdGhlIGZsYXNoCi0KLQljYXNlIEZMQVNIX0J1cm46ewotCi0JCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGJ1cm5fYWRkcjsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCQl1bnNpZ25lZCBpbnQgaSwgaW5kZXg7Ci0JCQl1bnNpZ25lZCBjaGFyICpyb207Ci0KLQotCQkJc3RydWN0IGxjZF9kaXNwbGF5IGRpc3BsYXk7Ci0KLQkJCWlmICggIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgKSByZXR1cm4gLUVQRVJNOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJCSAgICAoJmRpc3BsYXksIChzdHJ1Y3QgbGNkX2Rpc3BsYXkgKikgYXJnLAotCQkJICAgICBzaXplb2Yoc3RydWN0IGxjZF9kaXNwbGF5KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyb20gPSBrbWFsbG9jKCgxMjgpLCBHRlBfQVRPTUlDKTsKLQkJCWlmIChyb20gPT0gTlVMTCkgewotCQkJCXByaW50ayhLRVJOX0VSUiBMQ0QgImttYWxsb2MoKSBmYWlsZWQgaW4gJXNcbiIsCi0JCQkJCQlfX0ZVTkNUSU9OX18pOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCi0JCQlwcl9pbmZvKExDRCAiU3RhcnRpbmcgRmxhc2ggYnVyblxuIik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgRkxBU0hfU0laRTsgaSA9IGkgKyAxMjgpIHsKLQotCQkJCWlmIChjb3B5X2Zyb21fdXNlcgotCQkJCSAgICAocm9tLCBkaXNwbGF5LlJvbUltYWdlICsgaSwgMTI4KSkgewotCQkJCQlrZnJlZShyb20pOwotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQl9Ci0JCQkJYnVybl9hZGRyID0ga0ZsYXNoQmFzZSArIGk7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmxjZF9sb2NrLCBmbGFncyk7Ci0JCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgKDEyOCk7IGluZGV4KyspIHsKLQotCQkJCQlXUklURV9GTEFTSChrRmxhc2hfQWRkcjEsCi0JCQkJCQkgICAga0ZsYXNoX0RhdGExKTsKLQkJCQkJV1JJVEVfRkxBU0goa0ZsYXNoX0FkZHIyLAotCQkJCQkJICAgIGtGbGFzaF9EYXRhMik7Ci0JCQkJCVdSSVRFX0ZMQVNIKGtGbGFzaF9BZGRyMSwKLQkJCQkJCSAgICBrRmxhc2hfUHJvZyk7Ci0JCQkJCSooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilidXJuX2FkZHIpID0KLQkJCQkJICAodm9sYXRpbGUgdW5zaWduZWQgY2hhcikgcm9tW2luZGV4XTsKLQotCQkJCQl3aGlsZSAoKCFkcXBvbGwgKGJ1cm5fYWRkciwKLQkJCQkJCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKQotCQkJCQkJcm9tW2luZGV4XSkpICYmCi0JCQkJCQkoIXRpbWVvdXQoYnVybl9hZGRyKSkpIHsgfQotCQkJCQlidXJuX2FkZHIrKzsKLQkJCQl9Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGNkX2xvY2ssIGZsYWdzKTsKLQkJCQlpZiAoKiAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikKLQkJCQkJKGJ1cm5fYWRkciAtIDEpKSA9PQotCQkJCQkodm9sYXRpbGUgdW5zaWduZWQgY2hhcikKLQkJCQkJcm9tW2luZGV4IC0gMV0pIHsKLQkJCQl9IGVsc2UgaWYgKHRpbWVvdXQpIHsKLQkJCQkJcHJfaW5mbyhMQ0QgIkZsYXNoIGJ1cm4gdGltZWQgb3V0XG4iKTsKLQkJCQl9Ci0KLQotCQkJfQotCQkJa2ZyZWUocm9tKTsKLQotCQkJcHJfaW5mbyhMQ0QgIkZsYXNoIHN1Y2Nlc3NmdWxseSBidXJuZWRcbiIpOwotCi0JCQlicmVhazsKLQkJfQotCi0vLyAgcmVhZCB0aGUgZmxhc2ggYWxsIGF0IG9uY2UKLQotCWNhc2UgRkxBU0hfUmVhZDp7Ci0KLQkJCXVuc2lnbmVkIGNoYXIgKnVzZXJfYnl0ZXM7Ci0JCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHJlYWRfYWRkcjsKLQkJCXVuc2lnbmVkIGludCBpOwotCi0JCQl1c2VyX2J5dGVzID0KLQkJCSAgICAmKCgoc3RydWN0IGxjZF9kaXNwbGF5ICopIGFyZyktPlJvbUltYWdlWzBdKTsKLQotCQkJaWYgKCFhY2Nlc3Nfb2sKLQkJCSAgICAoVkVSSUZZX1dSSVRFLCB1c2VyX2J5dGVzLCBGTEFTSF9TSVpFKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJcHJfaW5mbyhMQ0QgIlJlYWRpbmcgRmxhc2giKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBGTEFTSF9TSVpFOyBpKyspIHsKLQkJCQl1bnNpZ25lZCBjaGFyIHRtcF9ieXRlOwotCQkJCXJlYWRfYWRkciA9IGtGbGFzaEJhc2UgKyBpOwotCQkJCXRtcF9ieXRlID0KLQkJCQkgICAgKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKQotCQkJCSAgICAgIHJlYWRfYWRkcik7Ci0JCQkJaWYgKF9fcHV0X3VzZXIodG1wX2J5dGUsICZ1c2VyX2J5dGVzW2ldKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0KLQotCQkJYnJlYWs7Ci0JCX0KLQogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC02NDQsNDIgKzUxMiw2IEBACiAJbWlzY19kZXJlZ2lzdGVyKCZsY2RfZGV2KTsKIH0KIAotLy8KLS8vIEZ1bmN0aW9uOiBkcXBvbGwKLS8vCi0vLyBEZXNjcmlwdGlvbjogIFBvbGxzIHRoZSBkYXRhIGxpbmVzIHRvIHNlZSBpZiB0aGUgZmxhc2ggaXMgYnVzeQotLy8KLS8vIEluOiBhZGRyZXNzLCBieXRlIGRhdGEKLS8vCi0vLyBPdXQ6IDAgPSBidXN5LCAxID0gd3JpdGUgb3IgZXJhc2UgY29tcGxldGUKLS8vCi0vLwotCi1zdGF0aWMgaW50IGRxcG9sbCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZGF0YSkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGRxNzsKLQotCWRxNyA9IGRhdGEgJiAweDgwOwotCi0JcmV0dXJuICgoUkVBRF9GTEFTSChhZGRyZXNzKSAmIDB4ODApID09IGRxNyk7Ci19Ci0KLS8vCi0vLyBGdW5jdGlvbjogdGltZW91dAotLy8KLS8vIERlc2NyaXB0aW9uOiBDaGVja3MgdG8gc2VlIGlmIGVyYXNlIG9yIHdyaXRlIGhhcyB0aW1lZCBvdXQKLS8vICAgICAgICAgICAgICBCeSBwb2xsaW5nIGRxNQotLy8KLS8vIEluOiBhZGRyZXNzCi0vLwotLy8KLS8vIE91dDogMCA9IG5vdCB0aW1lZCBvdXQsIDEgPSB0aW1lZCBvdXQKLQotc3RhdGljIGludCB0aW1lb3V0KHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlyZXR1cm4gKFJFQURfRkxBU0goYWRkcmVzcykgJiAweDIwKSA9PSAweDIwOwotfQotCiBtb2R1bGVfaW5pdChsY2RfaW5pdCk7CiBtb2R1bGVfZXhpdChsY2RfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9sY2QuaCBiL2RyaXZlcnMvY2hhci9sY2QuaAppbmRleCBhOGQ0YWU3Li4yOTBiM2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbGNkLmgKKysrIGIvZHJpdmVycy9jaGFyL2xjZC5oCkBAIC0xNCwxMSArMTQsNyBAQAogCiAvLyBmdW5jdGlvbiBoZWFkZXJzCiAKLXN0YXRpYyBpbnQgZHFwb2xsKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcsIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKTsKLXN0YXRpYyBpbnQgdGltZW91dCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nKTsKLQogI2RlZmluZSBMQ0RfQ0hBUlNfUEVSX0xJTkUgNDAKLSNkZWZpbmUgRkxBU0hfU0laRSA1MjQyODgKICNkZWZpbmUgTUFYX0lETEVfVElNRSAxMjAKIAogc3RydWN0IGxjZF9kaXNwbGF5IHsKQEAgLTU0LDI2ICs1MCw2IEBACiAjZGVmaW5lIExDRFRpbWVvdXRWYWx1ZQkweGZmZgogCiAKLS8vIEZsYXNoIGRlZmluaXRpb25zIEFNRCAyOUYwNDAKLSNkZWZpbmUga0ZsYXNoQmFzZQkweDBGQzAwMDAwCi0KLSNkZWZpbmUga0ZsYXNoX0FkZHIxICAgIDB4NTU1NQotI2RlZmluZSBrRmxhc2hfQWRkcjIgICAgMHgyQUFBCi0jZGVmaW5lIGtGbGFzaF9EYXRhMSAgICAweEFBCi0jZGVmaW5lIGtGbGFzaF9EYXRhMiAgICAweDU1Ci0jZGVmaW5lIGtGbGFzaF9Qcm9nICAgICAweEEwCi0jZGVmaW5lIGtGbGFzaF9FcmFzZTMgICAweDgwCi0jZGVmaW5lIGtGbGFzaF9FcmFzZTYgICAweDEwCi0jZGVmaW5lIGtGbGFzaF9SZWFkICAgICAweEYwCi0KLSNkZWZpbmUga0ZsYXNoX0lEICAgICAgIDB4OTAKLSNkZWZpbmUga0ZsYXNoX1ZlbkFkZHIgIDB4MDAKLSNkZWZpbmUga0ZsYXNoX0RldkFkZHIgIDB4MDEKLSNkZWZpbmUga0ZsYXNoX1ZlbklEICAgIDB4MDEKLSNkZWZpbmUga0ZsYXNoX0RldklEICAgIDB4QTQgICAgLy8gMjlGMDQwCi0vLyNkZWZpbmUga0ZsYXNoX0RldklEICAweEFEICAgIC8vIDI5RjAxNgotCi0KIC8vIE1hY3JvcwogCiAjZGVmaW5lIExDRFdyaXRlRGF0YSh4KQlvdXRsKCh4IDw8IDI0KSwga0xDRF9EUikKQEAgLTg5LDkgKzY1LDYgQEAKICNkZWZpbmUgV1JJVEVfR0FMKHgseSkJb3V0bCh5LCAweDA0MDAwMDAwIHwgKHgpKQogI2RlZmluZSBCdXN5Q2hlY2soKQl3aGlsZSAoKExDRFJlYWRJbnN0ICYgMHg4MCkgPT0gMHg4MCkKIAotI2RlZmluZSBXUklURV9GTEFTSCh4LHkpIG91dGIoKGNoYXIpeSwga0ZsYXNoQmFzZSB8ICh4KSkKLSNkZWZpbmUgUkVBRF9GTEFTSCh4KQkoaW5iKGtGbGFzaEJhc2UgfCAoeCkpKQotCiAKIAogLyoKQEAgLTEyNCwxMSArOTcsNiBAQAogLy8gIEJ1dHRvbiBkZWZzCiAjZGVmaW5lIEJVVFRPTl9SZWFkICAgICAgICAgICAgIDUwCiAKLS8vICBGbGFzaCBjb21tYW5kIGNvZGVzCi0jZGVmaW5lIEZMQVNIX0VyYXNlCQk2MAotI2RlZmluZSBGTEFTSF9CdXJuCQk2MQotI2RlZmluZSBGTEFTSF9SZWFkCQk2MgotCiAKIC8vIEV0aGVybmV0IExJTksgY2hlY2sgaGFja2Fyb28KICNkZWZpbmUgTElOS19DaGVjayAgICAgICAgICAgICAgOTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9td2F2ZS8zNzgwaS5jIGIvZHJpdmVycy9jaGFyL213YXZlLzM3ODBpLmMKaW5kZXggNGU0ODY1ZS4uNDkyZGJmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL213YXZlLzM3ODBpLmMKKysrIGIvZHJpdmVycy9jaGFyL213YXZlLzM3ODBpLmMKQEAgLTYzLDggKzYzLDYgQEAKICNpbmNsdWRlICIzNzgwaS5oIgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRzcF9sb2NrKTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAKIHN0YXRpYyB2b2lkIFBhY2VNc2FBY2Nlc3ModW5zaWduZWQgc2hvcnQgdXNEc3BCYXNlSU8pCiB7CkBAIC03Niw2ICs3NCw3IEBACiB1bnNpZ25lZCBzaG9ydCBkc3AzNzgwSV9SZWFkTXNhQ2ZnKHVuc2lnbmVkIHNob3J0IHVzRHNwQmFzZUlPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHVsTXNhQWRkcikKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIHNob3J0IHZhbDsKIAogCVBSSU5US18zKFRSQUNFXzM3ODBJLApAQCAtOTYsNiArOTUsNyBAQAogdm9pZCBkc3AzNzgwSV9Xcml0ZU1zYUNmZyh1bnNpZ25lZCBzaG9ydCB1c0RzcEJhc2VJTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB1bE1zYUFkZHIsIHVuc2lnbmVkIHNob3J0IHVzVmFsdWUpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCVBSSU5US180KFRSQUNFXzM3ODBJLAogCQkiMzc4MGk6OmRzcDM3ODBpX1dyaXRlTXNhQ2ZnIGVudHJ5IHVzRHNwQmFzZUlPICV4IHVsTXNhQWRkciAlbHggdXNWYWx1ZSAleFxuIiwKQEAgLTE3NSw2ICsxNzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqcElycU1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKnBEbWFNYXApCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCB1c0RzcEJhc2VJTyA9IHBTZXR0aW5ncy0+dXNEc3BCYXNlSU87CiAJaW50IGk7CiAJRFNQX1VBUlRfQ0ZHXzEgclVhcnRDZmcxOwpAQCAtMzU0LDYgKzM1NSw3IEBACiAKIGludCBkc3AzNzgwSV9EaXNhYmxlRFNQKERTUF8zNzgwSV9DT05GSUdfU0VUVElOR1MgKiBwU2V0dGluZ3MpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCB1c0RzcEJhc2VJTyA9IHBTZXR0aW5ncy0+dXNEc3BCYXNlSU87CiAJRFNQX0lTQV9TTEFWRV9DT05UUk9MIHJTbGF2ZUNvbnRyb2w7CiAKQEAgLTM4Myw2ICszODUsNyBAQAogCiBpbnQgZHNwMzc4MElfUmVzZXQoRFNQXzM3ODBJX0NPTkZJR19TRVRUSU5HUyAqIHBTZXR0aW5ncykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIHNob3J0IHVzRHNwQmFzZUlPID0gcFNldHRpbmdzLT51c0RzcEJhc2VJTzsKIAlEU1BfQk9PVF9ET01BSU4gckJvb3REb21haW47CiAJRFNQX0hCUklER0VfQ09OVFJPTCBySEJyaWRnZUNvbnRyb2w7CkBAIC00MjcsNiArNDMwLDcgQEAKIAogaW50IGRzcDM3ODBJX1J1bihEU1BfMzc4MElfQ09ORklHX1NFVFRJTkdTICogcFNldHRpbmdzKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgc2hvcnQgdXNEc3BCYXNlSU8gPSBwU2V0dGluZ3MtPnVzRHNwQmFzZUlPOwogCURTUF9CT09UX0RPTUFJTiByQm9vdERvbWFpbjsKIAlEU1BfSEJSSURHRV9DT05UUk9MIHJIQnJpZGdlQ29udHJvbDsKQEAgLTQ3Myw2ICs0NzcsNyBAQAogaW50IGRzcDM3ODBJX1JlYWREU3RvcmUodW5zaWduZWQgc2hvcnQgdXNEc3BCYXNlSU8sIHZvaWQgX191c2VyICpwdkJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVDb3VudCwgdW5zaWduZWQgbG9uZyB1bERTUEFkZHIpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCBfX3VzZXIgKnB1c0J1ZmZlciA9IHB2QnVmZmVyOwogCXVuc2lnbmVkIHNob3J0IHZhbDsKIApAQCAtNTE0LDYgKzUxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgX191c2VyICpwdkJ1ZmZlciwgdW5zaWduZWQgdUNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHVsRFNQQWRkcikKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIHNob3J0IF9fdXNlciAqcHVzQnVmZmVyID0gcHZCdWZmZXI7CiAJdW5zaWduZWQgc2hvcnQgdmFsOwogCkBAIC01NTUsNiArNTYxLDcgQEAKIGludCBkc3AzNzgwSV9Xcml0ZURTdG9yZSh1bnNpZ25lZCBzaG9ydCB1c0RzcEJhc2VJTywgdm9pZCBfX3VzZXIgKnB2QnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVDb3VudCwgdW5zaWduZWQgbG9uZyB1bERTUEFkZHIpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCBfX3VzZXIgKnB1c0J1ZmZlciA9IHB2QnVmZmVyOwogCiAKQEAgLTU5Niw2ICs2MDMsNyBAQAogaW50IGRzcDM3ODBJX1JlYWRJU3RvcmUodW5zaWduZWQgc2hvcnQgdXNEc3BCYXNlSU8sIHZvaWQgX191c2VyICpwdkJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVDb3VudCwgdW5zaWduZWQgbG9uZyB1bERTUEFkZHIpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCBfX3VzZXIgKnB1c0J1ZmZlciA9IHB2QnVmZmVyOwogCiAJUFJJTlRLXzUoVFJBQ0VfMzc4MEksCkBAIC02NDMsNiArNjUxLDcgQEAKIGludCBkc3AzNzgwSV9Xcml0ZUlTdG9yZSh1bnNpZ25lZCBzaG9ydCB1c0RzcEJhc2VJTywgdm9pZCBfX3VzZXIgKnB2QnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVDb3VudCwgdW5zaWduZWQgbG9uZyB1bERTUEFkZHIpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCBfX3VzZXIgKnB1c0J1ZmZlciA9IHB2QnVmZmVyOwogCiAJUFJJTlRLXzUoVFJBQ0VfMzc4MEksCkBAIC02OTEsNiArNzAwLDcgQEAKIGludCBkc3AzNzgwSV9HZXRJUENTb3VyY2UodW5zaWduZWQgc2hvcnQgdXNEc3BCYXNlSU8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpwdXNJUENTb3VyY2UpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlEU1BfSEJSSURHRV9DT05UUk9MIHJIQnJpZGdlQ29udHJvbDsKIAl1bnNpZ25lZCBzaG9ydCB0ZW1wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYwppbmRleCA4NWMxNjE4Li4yOTRlOWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMKQEAgLTExNDYsNyArMTE0Niw3IEBACiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOSVQsICJFbmFibGluZyBpbnRlcnJ1cHRzIG9uIHJpbyBjYXJkLlxuIik7CiAJCQkJaHAtPk1vZGUgfD0gUklPX1BDSV9JTlRfRU5BQkxFOwogCQkJfSBlbHNlCi0JCQkJaHAtPk1vZGUgJj0gIVJJT19QQ0lfSU5UX0VOQUJMRTsKKwkJCQlocC0+TW9kZSAmPSB+UklPX1BDSV9JTlRfRU5BQkxFOwogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOSVQsICJOZXcgTW9kZTogJXhcbiIsIGhwLT5Nb2RlKTsKIAkJCXJpb19zdGFydF9jYXJkX3J1bm5pbmcoaHApOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IGJlNzNjODAuLjFkOGM0YWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3lzcnEuYworKysgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgpAQCAtMTU4LDYgKzE1OSwxNyBAQAogCS5lbmFibGVfbWFzawk9IFNZU1JRX0VOQUJMRV9TWU5DLAogfTsKIAorc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX3Nob3dfdGltZXJzKGludCBrZXksIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3lzcnFfdGltZXJfbGlzdF9zaG93KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX3Nob3dfdGltZXJzX29wID0geworCS5oYW5kbGVyCT0gc3lzcnFfaGFuZGxlX3Nob3dfdGltZXJzLAorCS5oZWxwX21zZwk9ICJzaG93LWFsbC10aW1lcnMoUSkiLAorCS5hY3Rpb25fbXNnCT0gIlNob3cgUGVuZGluZyBUaW1lcnMiLAorfTsKKwogc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX21vdW50cm8oaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAllbWVyZ2VuY3lfcmVtb3VudCgpOwpAQCAtMzM1LDcgKzM0Nyw3IEBACiAJLyogbzogVGhpcyB3aWxsIG9mdGVuIGJlIHJlZ2lzdGVyZWQgYXMgJ09mZicgYXQgaW5pdCB0aW1lICovCiAJTlVMTCwJCQkJLyogbyAqLwogCSZzeXNycV9zaG93cmVnc19vcCwJCS8qIHAgKi8KLQlOVUxMLAkJCQkvKiBxICovCisJJnN5c3JxX3Nob3dfdGltZXJzX29wLAkJLyogcSAqLwogCSZzeXNycV91bnJhd19vcCwJCS8qIHIgKi8KIAkmc3lzcnFfc3luY19vcCwJCQkvKiBzICovCiAJJnN5c3JxX3Nob3dzdGF0ZV9vcCwJCS8qIHQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCA1Mjg5MjU0Li5mMjRjMjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0xNTMzLDcgKzE1MzMsNyBAQAogCiAJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJdHR5X3BncnAgPSBjdXJyZW50LT5zaWduYWwtPnR0eV9vbGRfcGdycDsKLQljdXJyZW50LT5zaWduYWwtPnR0eV9vbGRfcGdycCA9IDA7CisJY3VycmVudC0+c2lnbmFsLT50dHlfb2xkX3BncnAgPSBOVUxMOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJcHV0X3BpZCh0dHlfcGdycCk7CiAKQEAgLTM3MTMsMTUgKzM3MTMsMTQgQEAKIAogCWlmICghZHJpdmVyLT5tYWpvcikgewogCQllcnJvciA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRldiwgZHJpdmVyLT5taW5vcl9zdGFydCwgZHJpdmVyLT5udW0sCi0JCQkJCQkoY2hhciopZHJpdmVyLT5uYW1lKTsKKwkJCQkJCWRyaXZlci0+bmFtZSk7CiAJCWlmICghZXJyb3IpIHsKIAkJCWRyaXZlci0+bWFqb3IgPSBNQUpPUihkZXYpOwogCQkJZHJpdmVyLT5taW5vcl9zdGFydCA9IE1JTk9SKGRldik7CiAJCX0KIAl9IGVsc2UgewogCQlkZXYgPSBNS0RFVihkcml2ZXItPm1ham9yLCBkcml2ZXItPm1pbm9yX3N0YXJ0KTsKLQkJZXJyb3IgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgZHJpdmVyLT5udW0sCi0JCQkJCQkoY2hhciopZHJpdmVyLT5uYW1lKTsKKwkJZXJyb3IgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgZHJpdmVyLT5udW0sIGRyaXZlci0+bmFtZSk7CiAJfQogCWlmIChlcnJvciA8IDApIHsKIAkJa2ZyZWUocCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbWFjaHp3ZC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21hY2h6d2QuYwppbmRleCA4MWZiM2RlLi40YTMyOGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbWFjaHp3ZC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tYWNoendkLmMKQEAgLTMyNCw3ICszMjQsNyBAQAogCQkJcmV0dXJuIHB1dF91c2VyKDAsIHApOwogCiAJCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgotCQkJemZfcGluZyhOVUxMKTsKKwkJCXpmX3BpbmcoMCk7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwppbmRleCBiNmJjZGJiLi5jY2FhNmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwpAQCAtMTYsMTUgKzE2LDEzIEBACiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Mi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYWNwaV9wbXRtci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLS8qIE51bWJlciBvZiBQTVRNUiB0aWNrcyBleHBlY3RlZCBkdXJpbmcgY2FsaWJyYXRpb24gcnVuICovCi0jZGVmaW5lIFBNVE1SX1RJQ0tTX1BFUl9TRUMgMzU3OTU0NQotCiAvKgogICogVGhlIEkvTyBwb3J0IHRoZSBQTVRNUiByZXNpZGVzIGF0LgogICogVGhlIGxvY2F0aW9uIGlzIGRldGVjdGVkIGR1cmluZyBzZXR1cF9hcmNoKCksCkBAIC0zMiwxNSArMzAsMTMgQEAKICAqLwogdTMyIHBtdG1yX2lvcG9ydCBfX3JlYWRfbW9zdGx5OwogCi0jZGVmaW5lIEFDUElfUE1fTUFTSyBDTE9DS1NPVVJDRV9NQVNLKDI0KSAvKiBsaW1pdCBpdCB0byAyNCBiaXRzICovCi0KIHN0YXRpYyBpbmxpbmUgdTMyIHJlYWRfcG10bXIodm9pZCkKIHsKIAkvKiBtYXNrIHRoZSBvdXRwdXQgdG8gMjQgYml0cyAqLwogCXJldHVybiBpbmwocG10bXJfaW9wb3J0KSAmIEFDUElfUE1fTUFTSzsKIH0KIAotc3RhdGljIGN5Y2xlX3QgYWNwaV9wbV9yZWFkX3ZlcmlmaWVkKHZvaWQpCit1MzIgYWNwaV9wbV9yZWFkX3ZlcmlmaWVkKHZvaWQpCiB7CiAJdTMyIHYxID0gMCwgdjIgPSAwLCB2MyA9IDA7CiAKQEAgLTU3LDcgKzUzLDEyIEBACiAJfSB3aGlsZSAodW5saWtlbHkoKHYxID4gdjIgJiYgdjEgPCB2MykgfHwgKHYyID4gdjMgJiYgdjIgPCB2MSkKIAkJCSAgfHwgKHYzID4gdjEgJiYgdjMgPCB2MikpKTsKIAotCXJldHVybiAoY3ljbGVfdCl2MjsKKwlyZXR1cm4gdjI7Cit9CisKK3N0YXRpYyBjeWNsZV90IGFjcGlfcG1fcmVhZF9zbG93KHZvaWQpCit7CisJcmV0dXJuIChjeWNsZV90KWFjcGlfcG1fcmVhZF92ZXJpZmllZCgpOwogfQogCiBzdGF0aWMgY3ljbGVfdCBhY3BpX3BtX3JlYWQodm9pZCkKQEAgLTcyLDcgKzczLDggQEAKIAkubWFzawkJPSAoY3ljbGVfdClBQ1BJX1BNX01BU0ssCiAJLm11bHQJCT0gMCwgLyp0byBiZSBjYWx1Y2xhdGVkKi8KIAkuc2hpZnQJCT0gMjIsCi0JLmlzX2NvbnRpbnVvdXMJPSAxLAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKKwogfTsKIAogCkBAIC04Nyw3ICs4OSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3BtX25lZWRfd29ya2Fyb3VuZCh2b2lkKQogewotCWNsb2Nrc291cmNlX2FjcGlfcG0ucmVhZCA9IGFjcGlfcG1fcmVhZF92ZXJpZmllZDsKKwljbG9ja3NvdXJjZV9hY3BpX3BtLnJlYWQgPSBhY3BpX3BtX3JlYWRfc2xvdzsKIAljbG9ja3NvdXJjZV9hY3BpX3BtLnJhdGluZyA9IDExMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9jeWNsb25lLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYwppbmRleCBiZjRkM2Q1Li40ZjM5MjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYwpAQCAtMzEsNyArMzEsNyBAQAogCS5tYXNrCQk9IENZQ0xPTkVfVElNRVJfTUFTSywKIAkubXVsdAkJPSAxMCwKIAkuc2hpZnQJCT0gMCwKLQkuaXNfY29udGludW91cwk9IDEsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9jeWNsb25lX2Nsb2Nrc291cmNlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NjeDIwMF9ocnQuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2N4MjAwX2hydC5jCmluZGV4IDIyOTE1Y2MuLmI5MmRhNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2N4MjAwX2hydC5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2N4MjAwX2hydC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJLnJhdGluZwkJPSAyNTAsCiAJLnJlYWQJCT0gcmVhZF9ocnQsCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLmlzX2NvbnRpbnVvdXMJPSAxLAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIAkvKiBtdWx0LCBzaGlmdCBhcmUgc2V0IGJhc2VkIG9uIG1oejI3IGZsYWcgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnIGIvZHJpdmVycy9jcHVmcmVxL0tjb25maWcKaW5kZXggNDkxNzc5YS4uZDE1NWU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL0tjb25maWcKKysrIGIvZHJpdmVycy9jcHVmcmVxL0tjb25maWcKQEAgLTE2LDcgKzE2LDcgQEAKIGlmIENQVV9GUkVRCiAKIGNvbmZpZyBDUFVfRlJFUV9UQUJMRQotICAgICAgIGRlZl90cmlzdGF0ZSBtCisgICAgICAgdHJpc3RhdGUKIAogY29uZmlnIENQVV9GUkVRX0RFQlVHCiAJYm9vbCAiRW5hYmxlIENQVWZyZXEgZGVidWdnaW5nIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggYTQ1Y2M4OS4uZjUyZmFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC00MSw4ICs0MSw2NyBAQAogc3RhdGljIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1ZnJlcV9jcHVfZGF0YVtOUl9DUFVTXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3B1ZnJlcV9kcml2ZXJfbG9jayk7CiAKKy8qCisgKiBjcHVfcG9saWN5X3J3c2VtIGlzIGEgcGVyIENQVSByZWFkZXItd3JpdGVyIHNlbWFwaG9yZSBkZXNpZ25lZCB0byBjdXJlCisgKiBhbGwgY3B1ZnJlcS9ob3RwbHVnL3dvcmtxdWV1ZS9ldGMgcmVsYXRlZCBsb2NrIGlzc3Vlcy4KKyAqCisgKiBUaGUgcnVsZXMgZm9yIHRoaXMgc2VtYXBob3JlOgorICogLSBBbnkgcm91dGluZSB0aGF0IHdhbnRzIHRvIHJlYWQgZnJvbSB0aGUgcG9saWN5IHN0cnVjdHVyZSB3aWxsCisgKiAgIGRvIGEgZG93bl9yZWFkIG9uIHRoaXMgc2VtYXBob3JlLgorICogLSBBbnkgcm91dGluZSB0aGF0IHdpbGwgd3JpdGUgdG8gdGhlIHBvbGljeSBzdHJ1Y3R1cmUgYW5kL29yIG1heSB0YWtlIGF3YXkKKyAqICAgdGhlIHBvbGljeSBhbHRvZ2V0aGVyIChlZy4gQ1BVIGhvdHBsdWcpLCB3aWxsIGhvbGQgdGhpcyBsb2NrIGluIHdyaXRlCisgKiAgIG1vZGUgYmVmb3JlIGRvaW5nIHNvLgorICoKKyAqIEFkZGl0aW9uYWwgcnVsZXM6CisgKiAtIEFsbCBob2xkZXJzIG9mIHRoZSBsb2NrIHNob3VsZCBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgQ1BVIHRoZXkKKyAqICAgYXJlIGNvbmNlcm5lZCB3aXRoIGFyZSBvbmxpbmUgYWZ0ZXIgdGhleSBnZXQgdGhlIGxvY2suCisgKiAtIEdvdmVybm9yIHJvdXRpbmVzIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBjcHVmcmVxIGhvdHBsdWcgcGF0aCBzaG91bGQgbm90CisgKiAgIHRha2UgdGhpcyBzZW0gYXMgdG9wIGxldmVsIGhvdHBsdWcgbm90aWZpZXIgaGFuZGxlciB0YWtlcyB0aGlzLgorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBwb2xpY3lfY3B1KTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgcndfc2VtYXBob3JlLCBjcHVfcG9saWN5X3J3c2VtKTsKKworI2RlZmluZSBsb2NrX3BvbGljeV9yd3NlbShtb2RlLCBjcHUpCQkJCQlcCitpbnQgbG9ja19wb2xpY3lfcndzZW1fIyNtb2RlCQkJCQkJXAorKGludCBjcHUpCQkJCQkJCQlcCit7CQkJCQkJCQkJXAorCWludCBwb2xpY3lfY3B1ID0gcGVyX2NwdShwb2xpY3lfY3B1LCBjcHUpOwkJCVwKKwlCVUdfT04ocG9saWN5X2NwdSA9PSAtMSk7CQkJCQlcCisJZG93bl8jI21vZGUoJnBlcl9jcHUoY3B1X3BvbGljeV9yd3NlbSwgcG9saWN5X2NwdSkpOwkJXAorCWlmICh1bmxpa2VseSghY3B1X29ubGluZShjcHUpKSkgewkJCQlcCisJCXVwXyMjbW9kZSgmcGVyX2NwdShjcHVfcG9saWN5X3J3c2VtLCBwb2xpY3lfY3B1KSk7CVwKKwkJcmV0dXJuIC0xOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIDA7CQkJCQkJCVwKK30KKworbG9ja19wb2xpY3lfcndzZW0ocmVhZCwgY3B1KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfcG9saWN5X3J3c2VtX3JlYWQpOworCitsb2NrX3BvbGljeV9yd3NlbSh3cml0ZSwgY3B1KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKTsKKwordm9pZCB1bmxvY2tfcG9saWN5X3J3c2VtX3JlYWQoaW50IGNwdSkKK3sKKwlpbnQgcG9saWN5X2NwdSA9IHBlcl9jcHUocG9saWN5X2NwdSwgY3B1KTsKKwlCVUdfT04ocG9saWN5X2NwdSA9PSAtMSk7CisJdXBfcmVhZCgmcGVyX2NwdShjcHVfcG9saWN5X3J3c2VtLCBwb2xpY3lfY3B1KSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bmxvY2tfcG9saWN5X3J3c2VtX3JlYWQpOworCit2b2lkIHVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoaW50IGNwdSkKK3sKKwlpbnQgcG9saWN5X2NwdSA9IHBlcl9jcHUocG9saWN5X2NwdSwgY3B1KTsKKwlCVUdfT04ocG9saWN5X2NwdSA9PSAtMSk7CisJdXBfd3JpdGUoJnBlcl9jcHUoY3B1X3BvbGljeV9yd3NlbSwgcG9saWN5X2NwdSkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZSk7CisKKwogLyogaW50ZXJuYWwgcHJvdG90eXBlcyAqLwogc3RhdGljIGludCBfX2NwdWZyZXFfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHVuc2lnbmVkIGludCBldmVudCk7CitzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSk7CiBzdGF0aWMgdm9pZCBoYW5kbGVfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIC8qKgpAQCAtNDE1LDEyICs0NzQsOCBAQAogCWlmIChyZXQgIT0gMSkJCQkJCQkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJCQkJCQkJCQlcCi0JbG9ja19jcHVfaG90cGx1ZygpOwkJCQkJCVwKLQltdXRleF9sb2NrKCZwb2xpY3ktPmxvY2spOwkJCQkJXAogCXJldCA9IF9fY3B1ZnJlcV9zZXRfcG9saWN5KHBvbGljeSwgJm5ld19wb2xpY3kpOwkJXAogCXBvbGljeS0+dXNlcl9wb2xpY3kub2JqZWN0ID0gcG9saWN5LT5vYmplY3Q7CQkJXAotCW11dGV4X3VubG9jaygmcG9saWN5LT5sb2NrKTsJCQkJCVwKLQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsJCQkJCQlcCiAJCQkJCQkJCQlcCiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwkJCQkJXAogfQpAQCAtNDM0LDcgKzQ4OSw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2NwdWluZm9fY3VyX2ZyZXEgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqIHBvbGljeSwKIAkJCQkJCQljaGFyICpidWYpCiB7Ci0JdW5zaWduZWQgaW50IGN1cl9mcmVxID0gY3B1ZnJlcV9nZXQocG9saWN5LT5jcHUpOworCXVuc2lnbmVkIGludCBjdXJfZnJlcSA9IF9fY3B1ZnJlcV9nZXQocG9saWN5LT5jcHUpOwogCWlmICghY3VyX2ZyZXEpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjx1bmtub3duPiIpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBjdXJfZnJlcSk7CkBAIC00NzksMTggKzUzNCwxMiBAQAogCQkJCQkJJm5ld19wb2xpY3kuZ292ZXJub3IpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWxvY2tfY3B1X2hvdHBsdWcoKTsKLQogCS8qIERvIG5vdCB1c2UgY3B1ZnJlcV9zZXRfcG9saWN5IGhlcmUgb3IgdGhlIHVzZXJfcG9saWN5Lm1heAogCSAgIHdpbGwgYmUgd3JvbmdseSBvdmVycmlkZGVuICovCi0JbXV0ZXhfbG9jaygmcG9saWN5LT5sb2NrKTsKIAlyZXQgPSBfX2NwdWZyZXFfc2V0X3BvbGljeShwb2xpY3ksICZuZXdfcG9saWN5KTsKIAogCXBvbGljeS0+dXNlcl9wb2xpY3kucG9saWN5ID0gcG9saWN5LT5wb2xpY3k7CiAJcG9saWN5LT51c2VyX3BvbGljeS5nb3Zlcm5vciA9IHBvbGljeS0+Z292ZXJub3I7Ci0JbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOwotCi0JdW5sb2NrX2NwdV9ob3RwbHVnKCk7CiAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtNTk1LDExICs2NDQsMTcgQEAKIAlwb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQocG9saWN5LT5jcHUpOwogCWlmICghcG9saWN5KQogCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChsb2NrX3BvbGljeV9yd3NlbV9yZWFkKHBvbGljeS0+Y3B1KSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGZhdHRyLT5zaG93KQogCQlyZXQgPSBmYXR0ci0+c2hvdyhwb2xpY3ksIGJ1Zik7CiAJZWxzZQogCQlyZXQgPSAtRUlPOwogCisJdW5sb2NrX3BvbGljeV9yd3NlbV9yZWFkKHBvbGljeS0+Y3B1KTsKKwogCWNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOwogCXJldHVybiByZXQ7CiB9CkBAIC02MTMsMTEgKzY2OCwxNyBAQAogCXBvbGljeSA9IGNwdWZyZXFfY3B1X2dldChwb2xpY3ktPmNwdSk7CiAJaWYgKCFwb2xpY3kpCiAJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKHBvbGljeS0+Y3B1KSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGZhdHRyLT5zdG9yZSkKIAkJcmV0ID0gZmF0dHItPnN0b3JlKHBvbGljeSwgYnVmLCBjb3VudCk7CiAJZWxzZQogCQlyZXQgPSAtRUlPOwogCisJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShwb2xpY3ktPmNwdSk7CisKIAljcHVmcmVxX2NwdV9wdXQocG9saWN5KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjkxLDggKzc1MiwxMCBAQAogCXBvbGljeS0+Y3B1ID0gY3B1OwogCXBvbGljeS0+Y3B1cyA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAKLQltdXRleF9pbml0KCZwb2xpY3ktPmxvY2spOwotCW11dGV4X2xvY2soJnBvbGljeS0+bG9jayk7CisJLyogSW5pdGlhbGx5IHNldCBDUFUgaXRzZWxmIGFzIHRoZSBwb2xpY3lfY3B1ICovCisJcGVyX2NwdShwb2xpY3lfY3B1LCBjcHUpID0gY3B1OworCWxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CisKIAlpbml0X2NvbXBsZXRpb24oJnBvbGljeS0+a29ial91bnJlZ2lzdGVyKTsKIAlJTklUX1dPUksoJnBvbGljeS0+dXBkYXRlLCBoYW5kbGVfdXBkYXRlKTsKIApAQCAtNzAyLDcgKzc2NSw3IEBACiAJcmV0ID0gY3B1ZnJlcV9kcml2ZXItPmluaXQocG9saWN5KTsKIAlpZiAocmV0KSB7CiAJCWRwcmludGsoImluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7Ci0JCW11dGV4X3VubG9jaygmcG9saWN5LT5sb2NrKTsKKwkJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC03MTYsNiArNzc5LDE0IEBACiAJCSAqLwogCQltYW5hZ2VkX3BvbGljeSA9IGNwdWZyZXFfY3B1X2dldChqKTsKIAkJaWYgKHVubGlrZWx5KG1hbmFnZWRfcG9saWN5KSkgeworCisJCQkvKiBTZXQgcHJvcGVyIHBvbGljeV9jcHUgKi8KKwkJCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKKwkJCXBlcl9jcHUocG9saWN5X2NwdSwgY3B1KSA9IG1hbmFnZWRfcG9saWN5LT5jcHU7CisKKwkJCWlmIChsb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpIDwgMCkKKwkJCQlnb3RvIGVycl9vdXRfZHJpdmVyX2V4aXQ7CisKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAJCQltYW5hZ2VkX3BvbGljeS0+Y3B1cyA9IHBvbGljeS0+Y3B1czsKIAkJCWNwdWZyZXFfY3B1X2RhdGFbY3B1XSA9IG1hbmFnZWRfcG9saWN5OwpAQCAtNzI2LDEzICs3OTcsMTMgQEAKIAkJCQkJCSZtYW5hZ2VkX3BvbGljeS0+a29iaiwKIAkJCQkJCSJjcHVmcmVxIik7CiAJCQlpZiAocmV0KSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOworCQkJCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKIAkJCQlnb3RvIGVycl9vdXRfZHJpdmVyX2V4aXQ7CiAJCQl9CiAKIAkJCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOwotCQkJbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOwogCQkJcmV0ID0gMDsKKwkJCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKIAkJCWdvdG8gZXJyX291dF9kcml2ZXJfZXhpdDsgLyogY2FsbCBkcml2ZXItPmV4aXQoKSAqLwogCQl9CiAJfQpAQCAtNzQ2LDcgKzgxNyw3IEBACiAKIAlyZXQgPSBrb2JqZWN0X3JlZ2lzdGVyKCZwb2xpY3ktPmtvYmopOwogCWlmIChyZXQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOworCQl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CiAJCWdvdG8gZXJyX291dF9kcml2ZXJfZXhpdDsKIAl9CiAJLyogc2V0IHVwIGZpbGVzIGZvciB0aGlzIGNwdSBkZXZpY2UgKi8KQEAgLTc2MSw4ICs4MzIsMTAgQEAKIAkJc3lzZnNfY3JlYXRlX2ZpbGUoJnBvbGljeS0+a29iaiwgJnNjYWxpbmdfY3VyX2ZyZXEuYXR0cik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwotCWZvcl9lYWNoX2NwdV9tYXNrKGosIHBvbGljeS0+Y3B1cykKKwlmb3JfZWFjaF9jcHVfbWFzayhqLCBwb2xpY3ktPmNwdXMpIHsKIAkJY3B1ZnJlcV9jcHVfZGF0YVtqXSA9IHBvbGljeTsKKwkJcGVyX2NwdShwb2xpY3lfY3B1LCBqKSA9IHBvbGljeS0+Y3B1OworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAKIAkvKiBzeW1saW5rIGFmZmVjdGVkIENQVXMgKi8KQEAgLTc3OCwxNCArODUxLDE0IEBACiAJCXJldCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZjcHVfc3lzX2Rldi0+a29iaiwgJnBvbGljeS0+a29iaiwKIAkJCQkJImNwdWZyZXEiKTsKIAkJaWYgKHJldCkgewotCQkJbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOworCQkJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwogCQkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXI7CiAJCX0KIAl9CiAKIAlwb2xpY3ktPmdvdmVybm9yID0gTlVMTDsgLyogdG8gYXNzdXJlIHRoYXQgdGhlIHN0YXJ0aW5nIHNlcXVlbmNlIGlzCiAJCQkJICAqIHJ1biBpbiBjcHVmcmVxX3NldF9wb2xpY3kgKi8KLQltdXRleF91bmxvY2soJnBvbGljeS0+bG9jayk7CisJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwogCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5ICovCiAJcmV0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KCZuZXdfcG9saWN5KTsKQEAgLTgyNiwxMSArODk5LDEzIEBACiAKIAogLyoqCi0gKiBjcHVmcmVxX3JlbW92ZV9kZXYgLSByZW1vdmUgYSBDUFUgZGV2aWNlCisgKiBfX2NwdWZyZXFfcmVtb3ZlX2RldiAtIHJlbW92ZSBhIENQVSBkZXZpY2UKICAqCiAgKiBSZW1vdmVzIHRoZSBjcHVmcmVxIGludGVyZmFjZSBmb3IgYSBDUFUgZGV2aWNlLgorICogQ2FsbGVyIHNob3VsZCBhbHJlYWR5IGhhdmUgcG9saWN5X3J3c2VtIGluIHdyaXRlIG1vZGUgZm9yIHRoaXMgQ1BVLgorICogVGhpcyByb3V0aW5lIGZyZWVzIHRoZSByd3NlbSBiZWZvcmUgcmV0dXJuaW5nLgogICovCi1zdGF0aWMgaW50IGNwdWZyZXFfcmVtb3ZlX2RldiAoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNfZGV2KQorc3RhdGljIGludCBfX2NwdWZyZXFfcmVtb3ZlX2RldiAoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNfZGV2KQogewogCXVuc2lnbmVkIGludCBjcHUgPSBzeXNfZGV2LT5pZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODQ5LDYgKzkyNCw3IEBACiAJaWYgKCFkYXRhKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CisJCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWNwdWZyZXFfY3B1X2RhdGFbY3B1XSA9IE5VTEw7CkBAIC04NjUsNiArOTQxLDcgQEAKIAkJc3lzZnNfcmVtb3ZlX2xpbmsoJnN5c19kZXYtPmtvYmosICJjcHVmcmVxIik7CiAJCWNwdWZyZXFfY3B1X3B1dChkYXRhKTsKIAkJY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CisJCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKIAkJcmV0dXJuIDA7CiAJfQogI2VuZGlmCkBAIC04NzMsNiArOTUwLDcgQEAKIAlpZiAoIWtvYmplY3RfZ2V0KCZkYXRhLT5rb2JqKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAJCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOworCQl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtOTA2LDEwICs5ODQsMTAgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAjZW5kaWYKIAotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCWlmIChjcHVmcmVxX2RyaXZlci0+dGFyZ2V0KQogCQlfX2NwdWZyZXFfZ292ZXJub3IoZGF0YSwgQ1BVRlJFUV9HT1ZfU1RPUCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKworCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKIAogCWtvYmplY3RfdW5yZWdpc3RlcigmZGF0YS0+a29iaik7CiAKQEAgLTkzMyw2ICsxMDExLDE4IEBACiB9CiAKIAorc3RhdGljIGludCBjcHVmcmVxX3JlbW92ZV9kZXYgKHN0cnVjdCBzeXNfZGV2aWNlICogc3lzX2RldikKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc3lzX2Rldi0+aWQ7CisJaW50IHJldHZhbDsKKwlpZiAodW5saWtlbHkobG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KSkpCisJCUJVRygpOworCisJcmV0dmFsID0gX19jcHVmcmVxX3JlbW92ZV9kZXYoc3lzX2Rldik7CisJcmV0dXJuIHJldHZhbDsKK30KKworCiBzdGF0aWMgdm9pZCBoYW5kbGVfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9CkBAIC05ODAsOSArMTA3MCwxMiBAQAogCXVuc2lnbmVkIGludCByZXRfZnJlcSA9IDA7CiAKIAlpZiAocG9saWN5KSB7Ci0JCW11dGV4X2xvY2soJnBvbGljeS0+bG9jayk7CisJCWlmICh1bmxpa2VseShsb2NrX3BvbGljeV9yd3NlbV9yZWFkKGNwdSkpKQorCQkJcmV0dXJuIHJldF9mcmVxOworCiAJCXJldF9mcmVxID0gcG9saWN5LT5jdXI7Ci0JCW11dGV4X3VubG9jaygmcG9saWN5LT5sb2NrKTsKKworCQl1bmxvY2tfcG9saWN5X3J3c2VtX3JlYWQoY3B1KTsKIAkJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7CiAJfQogCkBAIC05OTEsMjQgKzEwODQsMTMgQEAKIEVYUE9SVF9TWU1CT0woY3B1ZnJlcV9xdWlja19nZXQpOwogCiAKLS8qKgotICogY3B1ZnJlcV9nZXQgLSBnZXQgdGhlIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSAoaW4ga0h6KQotICogQGNwdTogQ1BVIG51bWJlcgotICoKLSAqIEdldCB0aGUgQ1BVIGN1cnJlbnQgKHN0YXRpYykgQ1BVIGZyZXF1ZW5jeQotICovCi11bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVmcmVxX2dldCh1bnNpZ25lZCBpbnQgY3B1KQogewotCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSBjcHVmcmVxX2NwdV9kYXRhW2NwdV07CiAJdW5zaWduZWQgaW50IHJldF9mcmVxID0gMDsKIAotCWlmICghcG9saWN5KQotCQlyZXR1cm4gMDsKLQogCWlmICghY3B1ZnJlcV9kcml2ZXItPmdldCkKLQkJZ290byBvdXQ7Ci0KLQltdXRleF9sb2NrKCZwb2xpY3ktPmxvY2spOworCQlyZXR1cm4gKHJldF9mcmVxKTsKIAogCXJldF9mcmVxID0gY3B1ZnJlcV9kcml2ZXItPmdldChjcHUpOwogCkBAIC0xMDIyLDExICsxMTA0LDMzIEBACiAJCX0KIAl9CiAKLQltdXRleF91bmxvY2soJnBvbGljeS0+bG9jayk7CisJcmV0dXJuIChyZXRfZnJlcSk7Cit9CiAKLW91dDoKKy8qKgorICogY3B1ZnJlcV9nZXQgLSBnZXQgdGhlIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSAoaW4ga0h6KQorICogQGNwdTogQ1BVIG51bWJlcgorICoKKyAqIEdldCB0aGUgQ1BVIGN1cnJlbnQgKHN0YXRpYykgQ1BVIGZyZXF1ZW5jeQorICovCit1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0X2ZyZXEgPSAwOworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7CisKKwlpZiAoIXBvbGljeSkKKwkJZ290byBvdXQ7CisKKwlpZiAodW5saWtlbHkobG9ja19wb2xpY3lfcndzZW1fcmVhZChjcHUpKSkKKwkJZ290byBvdXRfcG9saWN5OworCisJcmV0X2ZyZXEgPSBfX2NwdWZyZXFfZ2V0KGNwdSk7CisKKwl1bmxvY2tfcG9saWN5X3J3c2VtX3JlYWQoY3B1KTsKKworb3V0X3BvbGljeToKIAljcHVmcmVxX2NwdV9wdXQocG9saWN5KTsKLQorb3V0OgogCXJldHVybiAocmV0X2ZyZXEpOwogfQogRVhQT1JUX1NZTUJPTChjcHVmcmVxX2dldCk7CkBAIC0xMjc4LDcgKzEzODIsNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2tfY3B1X2hvdHBsdWcgaGVsZCAqLwogaW50IF9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCkBAIC0xMzA0LDIwICsxNDA3LDE5IEBACiAJaWYgKCFwb2xpY3kpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbG9ja19jcHVfaG90cGx1ZygpOwotCW11dGV4X2xvY2soJnBvbGljeS0+bG9jayk7CisJaWYgKHVubGlrZWx5KGxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKHBvbGljeS0+Y3B1KSkpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LCB0YXJnZXRfZnJlcSwgcmVsYXRpb24pOwogCi0JbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOwotCXVubG9ja19jcHVfaG90cGx1ZygpOworCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUocG9saWN5LT5jcHUpOwogCiAJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfZHJpdmVyX3RhcmdldCk7CiAKLWludCBjcHVmcmVxX2RyaXZlcl9nZXRhdmcoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitpbnQgX19jcHVmcmVxX2RyaXZlcl9nZXRhdmcoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTEzMjUsMjAgKzE0MjcsMTUgQEAKIAlpZiAoIXBvbGljeSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZwb2xpY3ktPmxvY2spOwotCiAJaWYgKGNwdV9vbmxpbmUocG9saWN5LT5jcHUpICYmIGNwdWZyZXFfZHJpdmVyLT5nZXRhdmcpCiAJCXJldCA9IGNwdWZyZXFfZHJpdmVyLT5nZXRhdmcocG9saWN5LT5jcHUpOwogCi0JbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOwotCiAJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfZHJpdmVyX2dldGF2Zyk7CitFWFBPUlRfU1lNQk9MX0dQTChfX2NwdWZyZXFfZHJpdmVyX2dldGF2Zyk7CiAKIC8qCi0gKiBMb2NraW5nOiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBsb2NrX2NwdV9ob3RwbHVnKCkgbG9jayBoZWxkCiAgKiB3aGVuICJldmVudCIgaXMgQ1BVRlJFUV9HT1ZfTElNSVRTCiAgKi8KIApAQCAtMTQyMCw5ICsxNTE3LDcgQEAKIAlpZiAoIWNwdV9wb2xpY3kpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmY3B1X3BvbGljeS0+bG9jayk7CiAJbWVtY3B5KHBvbGljeSwgY3B1X3BvbGljeSwgc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3BvbGljeSkpOwotCW11dGV4X3VubG9jaygmY3B1X3BvbGljeS0+bG9jayk7CiAKIAljcHVmcmVxX2NwdV9wdXQoY3B1X3BvbGljeSk7CiAJcmV0dXJuIDA7CkBAIC0xNDMzLDcgKzE1MjgsNiBAQAogLyoKICAqIGRhdGEgICA6IGN1cnJlbnQgcG9saWN5LgogICogcG9saWN5IDogcG9saWN5IHRvIGJlIHNldC4KLSAqIExvY2tpbmc6IE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGxvY2tfY3B1X2hvdHBsdWcoKSBsb2NrIGhlbGQKICAqLwogc3RhdGljIGludCBfX2NwdWZyZXFfc2V0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmRhdGEsCiAJCQkJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCkBAIC0xNTM5LDEwICsxNjMzLDkgQEAKIAlpZiAoIWRhdGEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbG9ja19jcHVfaG90cGx1ZygpOworCWlmICh1bmxpa2VseShsb2NrX3BvbGljeV9yd3NlbV93cml0ZShwb2xpY3ktPmNwdSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIGxvY2sgdGhpcyBDUFUgKi8KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAogCXJldCA9IF9fY3B1ZnJlcV9zZXRfcG9saWN5KGRhdGEsIHBvbGljeSk7CiAJZGF0YS0+dXNlcl9wb2xpY3kubWluID0gZGF0YS0+bWluOwpAQCAtMTU1MCw5ICsxNjQzLDggQEAKIAlkYXRhLT51c2VyX3BvbGljeS5wb2xpY3kgPSBkYXRhLT5wb2xpY3k7CiAJZGF0YS0+dXNlcl9wb2xpY3kuZ292ZXJub3IgPSBkYXRhLT5nb3Zlcm5vcjsKIAotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShwb2xpY3ktPmNwdSk7CiAKLQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKIAljcHVmcmVxX2NwdV9wdXQoZGF0YSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTU3Niw4ICsxNjY4LDggQEAKIAlpZiAoIWRhdGEpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbG9ja19jcHVfaG90cGx1ZygpOwotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWlmICh1bmxpa2VseShsb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkcHJpbnRrKCJ1cGRhdGluZyBwb2xpY3kgZm9yIENQVSAldVxuIiwgY3B1KTsKIAltZW1jcHkoJnBvbGljeSwgZGF0YSwgc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3BvbGljeSkpOwpAQCAtMTYwMiw4ICsxNjk0LDggQEAKIAogCXJldCA9IF9fY3B1ZnJlcV9zZXRfcG9saWN5KGRhdGEsICZwb2xpY3kpOwogCi0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKwl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CisKIAljcHVmcmVxX2NwdV9wdXQoZGF0YSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2MTMsMzEgKzE3MDUsMjggQEAKIAkJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7Ci0Jc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CiAJc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXY7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CiAKIAlzeXNfZGV2ID0gZ2V0X2NwdV9zeXNkZXYoY3B1KTsKLQogCWlmIChzeXNfZGV2KSB7CiAJCXN3aXRjaCAoYWN0aW9uKSB7CiAJCWNhc2UgQ1BVX09OTElORToKIAkJCWNwdWZyZXFfYWRkX2RldihzeXNfZGV2KTsKIAkJCWJyZWFrOwogCQljYXNlIENQVV9ET1dOX1BSRVBBUkU6Ci0JCQkvKgotCQkJICogV2UgYXR0ZW1wdCB0byBwdXQgdGhpcyBjcHUgaW4gbG93ZXN0IGZyZXF1ZW5jeQotCQkJICogcG9zc2libGUgYmVmb3JlIGdvaW5nIGRvd24uIFRoaXMgd2lsbCBwZXJtaXQKLQkJCSAqIGhhcmR3YXJlLW1hbmFnZWQgUC1TdGF0ZSB0byBzd2l0Y2ggb3RoZXIgcmVsYXRlZAotCQkJICogdGhyZWFkcyB0byBtaW4gb3IgaGlnaGVyIHNwZWVkcyBpZiBwb3NzaWJsZS4KLQkJCSAqLworCQkJaWYgKHVubGlrZWx5KGxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSkpKQorCQkJCUJVRygpOworCiAJCQlwb2xpY3kgPSBjcHVmcmVxX2NwdV9kYXRhW2NwdV07CiAJCQlpZiAocG9saWN5KSB7Ci0JCQkJY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgcG9saWN5LT5taW4sCisJCQkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LCBwb2xpY3ktPm1pbiwKIAkJCQkJCUNQVUZSRVFfUkVMQVRJT05fSCk7CiAJCQl9CisJCQlfX2NwdWZyZXFfcmVtb3ZlX2RldihzeXNfZGV2KTsKIAkJCWJyZWFrOwotCQljYXNlIENQVV9ERUFEOgotCQkJY3B1ZnJlcV9yZW1vdmVfZGV2KHN5c19kZXYpOworCQljYXNlIENQVV9ET1dOX0ZBSUxFRDoKKwkJCWNwdWZyZXFfYWRkX2RldihzeXNfZGV2KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTc1MSwzICsxODQwLDE2IEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKTsKKworc3RhdGljIGludCBfX2luaXQgY3B1ZnJlcV9jb3JlX2luaXQodm9pZCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlwZXJfY3B1KHBvbGljeV9jcHUsIGNwdSkgPSAtMTsKKwkJaW5pdF9yd3NlbSgmcGVyX2NwdShjcHVfcG9saWN5X3J3c2VtLCBjcHUpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2NvcmVfaW5pdGNhbGwoY3B1ZnJlcV9jb3JlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwppbmRleCAwNWQ2YzIyLi4yNmY0NDBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwpAQCAtNDI5LDE0ICs0MjksMTIgQEAKIHN0YXRpYyB2b2lkIGRvX2Ric190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7IAogCWludCBpOwotCWxvY2tfY3B1X2hvdHBsdWcoKTsKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKIAkJZGJzX2NoZWNrX2NwdShpKTsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRic193b3JrLCAKIAkJCXVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSkpOwogCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKLQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKIH0gCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKaW5kZXggZjY5NzQ0OS4uZDYwYmNiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCkBAIC01MiwxOSArNTIsMjAgQEAKIHN0YXRpYyB2b2lkIGRvX2Ric190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiAvKiBTYW1wbGluZyB0eXBlcyAqLwotZW51bSBkYnNfc2FtcGxlIHtEQlNfTk9STUFMX1NBTVBMRSwgREJTX1NVQl9TQU1QTEV9OworZW51bSB7REJTX05PUk1BTF9TQU1QTEUsIERCU19TVUJfU0FNUExFfTsKIAogc3RydWN0IGNwdV9kYnNfaW5mb19zIHsKIAljcHV0aW1lNjRfdCBwcmV2X2NwdV9pZGxlOwogCWNwdXRpbWU2NF90IHByZXZfY3B1X3dhbGw7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjdXJfcG9saWN5OwogIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7Ci0JZW51bSBkYnNfc2FtcGxlIHNhbXBsZV90eXBlOwotCXVuc2lnbmVkIGludCBlbmFibGU7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlOwogCXVuc2lnbmVkIGludCBmcmVxX2xvOwogCXVuc2lnbmVkIGludCBmcmVxX2xvX2ppZmZpZXM7CiAJdW5zaWduZWQgaW50IGZyZXFfaGlfamlmZmllczsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGludCBlbmFibGU6MSwKKwkgICAgICAgICAgICAgc2FtcGxlX3R5cGU6MTsKIH07CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9kYnNfaW5mb19zLCBjcHVfZGJzX2luZm8pOwogCkBAIC00MDIsNyArNDAzLDcgQEAKIAlpZiAobG9hZCA8IChkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQgLSAxMCkpIHsKIAkJdW5zaWduZWQgaW50IGZyZXFfbmV4dCwgZnJlcV9jdXI7CiAKLQkJZnJlcV9jdXIgPSBjcHVmcmVxX2RyaXZlcl9nZXRhdmcocG9saWN5KTsKKwkJZnJlcV9jdXIgPSBfX2NwdWZyZXFfZHJpdmVyX2dldGF2Zyhwb2xpY3kpOwogCQlpZiAoIWZyZXFfY3VyKQogCQkJZnJlcV9jdXIgPSBwb2xpY3ktPmN1cjsKIApAQCAtNDIzLDkgKzQyNCwxMSBAQAogCiBzdGF0aWMgdm9pZCBkb19kYnNfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgY3B1KTsKLQllbnVtIGRic19zYW1wbGUgc2FtcGxlX3R5cGUgPSBkYnNfaW5mby0+c2FtcGxlX3R5cGU7CisJc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbyA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3B1X2Ric19pbmZvX3MsIHdvcmsud29yayk7CisJdW5zaWduZWQgaW50IGNwdSA9IGRic19pbmZvLT5jcHU7CisJaW50IHNhbXBsZV90eXBlID0gZGJzX2luZm8tPnNhbXBsZV90eXBlOworCiAJLyogV2Ugd2FudCBhbGwgQ1BVcyB0byBkbyBzYW1wbGluZyBuZWFybHkgb24gc2FtZSBqaWZmeSAqLwogCWludCBkZWxheSA9IHVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSk7CiAKQEAgLTQzNCwxNSArNDM3LDE5IEBACiAKIAlkZWxheSAtPSBqaWZmaWVzICUgZGVsYXk7CiAKLQlpZiAoIWRic19pbmZvLT5lbmFibGUpCisJaWYgKGxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSkgPCAwKQogCQlyZXR1cm47CisKKwlpZiAoIWRic19pbmZvLT5lbmFibGUpIHsKKwkJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOworCQlyZXR1cm47CisJfQorCiAJLyogQ29tbW9uIE5PUk1BTF9TQU1QTEUgc2V0dXAgKi8KIAlkYnNfaW5mby0+c2FtcGxlX3R5cGUgPSBEQlNfTk9STUFMX1NBTVBMRTsKIAlpZiAoIWRic190dW5lcnNfaW5zLnBvd2Vyc2F2ZV9iaWFzIHx8CiAJICAgIHNhbXBsZV90eXBlID09IERCU19OT1JNQUxfU0FNUExFKSB7Ci0JCWxvY2tfY3B1X2hvdHBsdWcoKTsKIAkJZGJzX2NoZWNrX2NwdShkYnNfaW5mbyk7Ci0JCXVubG9ja19jcHVfaG90cGx1ZygpOwogCQlpZiAoZGJzX2luZm8tPmZyZXFfbG8pIHsKIAkJCS8qIFNldHVwIHRpbWVyIGZvciBTVUJfU0FNUExFICovCiAJCQlkYnNfaW5mby0+c2FtcGxlX3R5cGUgPSBEQlNfU1VCX1NBTVBMRTsKQEAgLTQ1NCwyNiArNDYxLDI3IEBACiAJICAgICAgICAgICAgICAgICAgICAgICAgCUNQVUZSRVFfUkVMQVRJT05fSCk7CiAJfQogCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihjcHUsIGtvbmRlbWFuZF93cSwgJmRic19pbmZvLT53b3JrLCBkZWxheSk7CisJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2luaXQodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfaW5pdChzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvKQogewotCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGNwdSk7CiAJLyogV2Ugd2FudCBhbGwgQ1BVcyB0byBkbyBzYW1wbGluZyBuZWFybHkgb24gc2FtZSBqaWZmeSAqLwogCWludCBkZWxheSA9IHVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSk7CiAJZGVsYXkgLT0gamlmZmllcyAlIGRlbGF5OwogCisJZGJzX2luZm8tPmVuYWJsZSA9IDE7CiAJb25kZW1hbmRfcG93ZXJzYXZlX2JpYXNfaW5pdCgpOwotCUlOSVRfREVMQVlFRF9XT1JLX05BUigmZGJzX2luZm8tPndvcmssIGRvX2Ric190aW1lcik7CiAJZGJzX2luZm8tPnNhbXBsZV90eXBlID0gREJTX05PUk1BTF9TQU1QTEU7Ci0JcXVldWVfZGVsYXllZF93b3JrX29uKGNwdSwga29uZGVtYW5kX3dxLCAmZGJzX2luZm8tPndvcmssIGRlbGF5KTsKKwlJTklUX0RFTEFZRURfV09SS19OQVIoJmRic19pbmZvLT53b3JrLCBkb19kYnNfdGltZXIpOworCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihkYnNfaW5mby0+Y3B1LCBrb25kZW1hbmRfd3EsICZkYnNfaW5mby0+d29yaywKKwkgICAgICAgICAgICAgICAgICAgICAgZGVsYXkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2V4aXQoc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbykKIHsKIAlkYnNfaW5mby0+ZW5hYmxlID0gMDsKIAljYW5jZWxfZGVsYXllZF93b3JrKCZkYnNfaW5mby0+d29yayk7Ci0JZmx1c2hfd29ya3F1ZXVlKGtvbmRlbWFuZF93cSk7CiB9CiAKIHN0YXRpYyBpbnQgY3B1ZnJlcV9nb3Zlcm5vcl9kYnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCkBAIC01MDIsMjEgKzUxMCw5IEBACiAKIAkJbXV0ZXhfbG9jaygmZGJzX211dGV4KTsKIAkJZGJzX2VuYWJsZSsrOwotCQlpZiAoZGJzX2VuYWJsZSA9PSAxKSB7Ci0JCQlrb25kZW1hbmRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJrb25kZW1hbmQiKTsKLQkJCWlmICgha29uZGVtYW5kX3dxKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCSAiQ3JlYXRpb24gb2Yga29uZGVtYW5kIGZhaWxlZFxuIik7Ci0JCQkJZGJzX2VuYWJsZS0tOwotCQkJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKLQkJCQlyZXR1cm4gLUVOT1NQQzsKLQkJCX0KLQkJfQogCiAJCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwb2xpY3ktPmtvYmosICZkYnNfYXR0cl9ncm91cCk7CiAJCWlmIChyYykgewotCQkJaWYgKGRic19lbmFibGUgPT0gMSkKLQkJCQlkZXN0cm95X3dvcmtxdWV1ZShrb25kZW1hbmRfd3EpOwogCQkJZGJzX2VuYWJsZS0tOwogCQkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQkJcmV0dXJuIHJjOwpAQCAtNTMwLDcgKzUyNiw3IEBACiAJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlID0gZ2V0X2NwdV9pZGxlX3RpbWUoaik7CiAJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV93YWxsID0gZ2V0X2ppZmZpZXNfNjQoKTsKIAkJfQotCQl0aGlzX2Ric19pbmZvLT5lbmFibGUgPSAxOworCQl0aGlzX2Ric19pbmZvLT5jcHUgPSBjcHU7CiAJCS8qCiAJCSAqIFN0YXJ0IHRoZSB0aW1lcnNjaGVkdWxlIHdvcmssIHdoZW4gdGhpcyBnb3Zlcm5vcgogCQkgKiBpcyB1c2VkIGZvciBmaXJzdCB0aW1lCkBAIC01NTAsNyArNTQ2LDcgQEAKIAogCQkJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IGRlZl9zYW1wbGluZ19yYXRlOwogCQl9Ci0JCWRic190aW1lcl9pbml0KHBvbGljeS0+Y3B1KTsKKwkJZGJzX3RpbWVyX2luaXQodGhpc19kYnNfaW5mbyk7CiAKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlicmVhazsKQEAgLTU2MCw5ICs1NTYsNiBAQAogCQlkYnNfdGltZXJfZXhpdCh0aGlzX2Ric19pbmZvKTsKIAkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwb2xpY3ktPmtvYmosICZkYnNfYXR0cl9ncm91cCk7CiAJCWRic19lbmFibGUtLTsKLQkJaWYgKGRic19lbmFibGUgPT0gMCkKLQkJCWRlc3Ryb3lfd29ya3F1ZXVlKGtvbmRlbWFuZF93cSk7Ci0KIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCiAJCWJyZWFrOwpAQCAtNTkxLDEyICs1ODQsMTggQEAKIAogc3RhdGljIGludCBfX2luaXQgY3B1ZnJlcV9nb3ZfZGJzX2luaXQodm9pZCkKIHsKKwlrb25kZW1hbmRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJrb25kZW1hbmQiKTsKKwlpZiAoIWtvbmRlbWFuZF93cSkgeworCQlwcmludGsoS0VSTl9FUlIgIkNyZWF0aW9uIG9mIGtvbmRlbWFuZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CiAJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3IoJmNwdWZyZXFfZ292X2Ricyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcHVmcmVxX2dvdl9kYnNfZXhpdCh2b2lkKQogewogCWNwdWZyZXFfdW5yZWdpc3Rlcl9nb3Zlcm5vcigmY3B1ZnJlcV9nb3ZfZGJzKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShrb25kZW1hbmRfd3EpOwogfQogCiAKQEAgLTYwOCwzICs2MDcsNCBAQAogCiBtb2R1bGVfaW5pdChjcHVmcmVxX2dvdl9kYnNfaW5pdCk7CiBtb2R1bGVfZXhpdChjcHVmcmVxX2dvdl9kYnNfZXhpdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCmluZGV4IDkxYWQzNDIuLmQxYzdjYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwpAQCAtMzcwLDEyICszNzAsMTAgQEAKIAljcHVmcmVxX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3RyYW5zX2Jsb2NrLAogCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKIAl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmY3B1ZnJlcV9zdGF0X2NwdV9ub3RpZmllcik7Ci0JbG9ja19jcHVfaG90cGx1ZygpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWNwdWZyZXFfc3RhdF9jcHVfY2FsbGJhY2soJmNwdWZyZXFfc3RhdF9jcHVfbm90aWZpZXIsCiAJCQkJCQlDUFVfREVBRCwgKHZvaWQgKikobG9uZyljcHUpOwogCX0KLQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKIH0KIAogTU9EVUxFX0FVVEhPUiAoIlpvdSBOYW4gaGFpIDxuYW5oYWkuem91QGludGVsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKaW5kZXggMmE0ZWIwYi4uODYwMzQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKQEAgLTcxLDcgKzcxLDYgQEAKIAogCWRwcmludGsoImNwdWZyZXFfc2V0IGZvciBjcHUgJXUsIGZyZXEgJXUga0h6XG4iLCBwb2xpY3ktPmNwdSwgZnJlcSk7CiAKLQlsb2NrX2NwdV9ob3RwbHVnKCk7CiAJbXV0ZXhfbG9jaygmdXNlcnNwYWNlX211dGV4KTsKIAlpZiAoIWNwdV9pc19tYW5hZ2VkW3BvbGljeS0+Y3B1XSkKIAkJZ290byBlcnI7CkBAIC05NCw3ICs5Myw2IEBACiAKICBlcnI6CiAJbXV0ZXhfdW5sb2NrKCZ1c2Vyc3BhY2VfbXV0ZXgpOwotCXVubG9ja19jcHVfaG90cGx1ZygpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCA4OTFlZjZkLi5jM2Q0ODU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC03Myw2ICs3MywxNyBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWRtMTAyNi4KIAorY29uZmlnIFNFTlNPUlNfQURNMTAyOQorCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRE0xMDI5IgorCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBBRE0xMDI5CisJICBzZW5zb3IgY2hpcC4KKwkgIFZlcnkgcmFyZSBjaGlwLCBwbGVhc2UgbGV0IHVzIGtub3cgeW91IHVzZSBpdC4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgYWRtMTAyOS4KKwogY29uZmlnIFNFTlNPUlNfQURNMTAzMQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRE0xMDMxIGFuZCBjb21wYXRpYmxlcyIKIAlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IDMxNjYxMTIuLjQxNjVjMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtMTcsNiArMTcsNyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURNMTAyMSkJKz0gYWRtMTAyMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRE0xMDI1KQkrPSBhZG0xMDI1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FETTEwMjYpCSs9IGFkbTEwMjYubworb2JqLSQoQ09ORklHX1NFTlNPUlNfQURNMTAyOSkJKz0gYWRtMTAyOS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRE0xMDMxKQkrPSBhZG0xMDMxLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FETTkyNDApCSs9IGFkbTkyNDAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQU1TKQkrPSBhbXMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUuYwppbmRleCBiMWRjNjNlLi5iZWRlNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1LmMKQEAgLTEyNjcsMzAgKzEyNjcsNDIgQEAKIAlwcmludGsoS0VSTl9JTkZPIEFCSVRfVUdVUlVfTkFNRSAiOiBmb3VuZCBBYml0IHVHdXJ1XG4iKTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOwotCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewotCQlyZXMgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7Ci0JCWdvdG8gYWJpdHVndXJ1X3Byb2JlX2Vycm9yOwotCX0KIAlmb3IgKGkgPSAwOyBpIDwgc3lzZnNfYXR0cl9pOyBpKyspCi0JCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGF0YS0+c3lzZnNfYXR0cltpXS5kZXZfYXR0cik7CisJCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCQkmZGF0YS0+c3lzZnNfYXR0cltpXS5kZXZfYXR0cikpCisJCQlnb3RvIGFiaXR1Z3VydV9wcm9iZV9lcnJvcjsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhYml0dWd1cnVfc3lzZnNfYXR0cik7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCi0JCQkmYWJpdHVndXJ1X3N5c2ZzX2F0dHJbaV0uZGV2X2F0dHIpOworCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkJJmFiaXR1Z3VydV9zeXNmc19hdHRyW2ldLmRldl9hdHRyKSkKKwkJCWdvdG8gYWJpdHVndXJ1X3Byb2JlX2Vycm9yOwogCi0JcmV0dXJuIDA7CisJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOworCWlmICghSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpCisJCXJldHVybiAwOyAvKiBzdWNjZXNzICovCiAKKwlyZXMgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CiBhYml0dWd1cnVfcHJvYmVfZXJyb3I6CisJZm9yIChpID0gMDsgZGF0YS0+c3lzZnNfYXR0cltpXS5kZXZfYXR0ci5hdHRyLm5hbWU7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkYXRhLT5zeXNmc19hdHRyW2ldLmRldl9hdHRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhYml0dWd1cnVfc3lzZnNfYXR0cik7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkmYWJpdHVndXJ1X3N5c2ZzX2F0dHJbaV0uZGV2X2F0dHIpOwogCWtmcmVlKGRhdGEpOwogCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGFiaXR1Z3VydV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlpbnQgaTsKIAlzdHJ1Y3QgYWJpdHVndXJ1X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJZm9yIChpID0gMDsgZGF0YS0+c3lzZnNfYXR0cltpXS5kZXZfYXR0ci5hdHRyLm5hbWU7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkYXRhLT5zeXNmc19hdHRyW2ldLmRldl9hdHRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhYml0dWd1cnVfc3lzZnNfYXR0cik7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkmYWJpdHVndXJ1X3N5c2ZzX2F0dHJbaV0uZGV2X2F0dHIpOwogCWtmcmVlKGRhdGEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCmluZGV4IGI0NjE4YjIuLmJhODBjZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCkBAIC0yNjEsNyArMjYxLDYgQEAKIHN0cnVjdCBhZG0xMDI2X2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IG11dGV4IGxvY2s7CiAJZW51bSBjaGlwcyB0eXBlOwogCiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI5LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2NlMzFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMDI5LmMKQEAgLTAsMCArMSw1MDggQEAKKy8qCisgKiBhZG0xMDI5LmMgLSBQYXJ0IG9mIGxtX3NlbnNvcnMsIExpbnV4IGtlcm5lbCBtb2R1bGVzIGZvciBoYXJkd2FyZSBtb25pdG9yaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IENvcmVudGluIExBQkJFIDxjb3JlbnRpbi5sYWJiZUBnZW9tYXR5cy5mcj4KKyAqCisgKiBCYXNlZCBvbiBMTTgzIERyaXZlciBieSBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAqCisgKiBHaXZlIG9ubHkgcHJvY2Vzc29yLCBtb3RoZXJib2FyZCB0ZW1wZXJhdHVyZXMgYW5kIGZhbiB0YWNocworICogVmVyeSByYXJlIGNoaXAgcGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSB1c2UgaXQKKyAqCisgKiBodHRwOi8vd3d3LmFuYWxvZy5jb20vVXBsb2FkZWRGaWxlcy9EYXRhX1NoZWV0cy9BRE0xMDI5LnBkZgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworLyoKKyAqIEFkZHJlc3NlcyB0byBzY2FuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKKwkweDI4LCAweDI5LCAweDJhLAorCTB4MmIsIDB4MmMsIDB4MmQsCisJMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQKK307CisKKy8qCisgKiBJbnNtb2QgcGFyYW1ldGVycworICovCisKK0kyQ19DTElFTlRfSU5TTU9EXzEoYWRtMTAyOSk7CisKKy8qCisgKiBUaGUgQURNMTAyOSByZWdpc3RlcnMKKyAqIE1hbnVmYWN0dXJlciBJRCBpcyAweDQxIGZvciBBbmFsb2cgRGV2aWNlcworICovCisKKyNkZWZpbmUgQURNMTAyOV9SRUdfTUFOX0lECQkJMHgwRAorI2RlZmluZSBBRE0xMDI5X1JFR19DSElQX0lECQkJMHgwRQorI2RlZmluZSBBRE0xMDI5X1JFR19DT05GSUcJCQkweDAxCisjZGVmaW5lIEFETTEwMjlfUkVHX05CX0ZBTl9TVVBQT1JUCQkweDAyCisKKyNkZWZpbmUgQURNMTAyOV9SRUdfVEVNUF9ERVZJQ0VTX0lOU1RBTExFRAkweDA2CisKKyNkZWZpbmUgQURNMTAyOV9SRUdfTE9DQUxfVEVNUAkJCTB4QTAKKyNkZWZpbmUgQURNMTAyOV9SRUdfUkVNT1RFMV9URU1QCQkweEExCisjZGVmaW5lIEFETTEwMjlfUkVHX1JFTU9URTJfVEVNUAkJMHhBMgorCisjZGVmaW5lIEFETTEwMjlfUkVHX0xPQ0FMX1RFTVBfSElHSAkJMHg5MAorI2RlZmluZSBBRE0xMDI5X1JFR19SRU1PVEUxX1RFTVBfSElHSAkJMHg5MQorI2RlZmluZSBBRE0xMDI5X1JFR19SRU1PVEUyX1RFTVBfSElHSAkJMHg5MgorCisjZGVmaW5lIEFETTEwMjlfUkVHX0xPQ0FMX1RFTVBfTE9XCQkweDk4CisjZGVmaW5lIEFETTEwMjlfUkVHX1JFTU9URTFfVEVNUF9MT1cJCTB4OTkKKyNkZWZpbmUgQURNMTAyOV9SRUdfUkVNT1RFMl9URU1QX0xPVwkJMHg5QQorCisjZGVmaW5lIEFETTEwMjlfUkVHX0ZBTjEJCQkweDcwCisjZGVmaW5lIEFETTEwMjlfUkVHX0ZBTjIJCQkweDcxCisKKyNkZWZpbmUgQURNMTAyOV9SRUdfRkFOMV9NSU4JCQkweDc4CisjZGVmaW5lIEFETTEwMjlfUkVHX0ZBTjJfTUlOCQkJMHg3OQorCisjZGVmaW5lIEFETTEwMjlfUkVHX0ZBTjFfQ09ORklHCQkJMHg2OAorI2RlZmluZSBBRE0xMDI5X1JFR19GQU4yX0NPTkZJRwkJCTB4NjkKKworI2RlZmluZSBURU1QX0ZST01fUkVHKHZhbCkJKCh2YWwpICogMTAwMCkKKworI2RlZmluZSBESVZfRlJPTV9SRUcodmFsKQkoIDEgPDwgKCgodmFsKSA+PiA2KSAtIDEpKQorCisvKiBSZWdpc3RlcnMgdG8gYmUgY2hlY2tlZCBieSBhZG0xMDI5X3VwZGF0ZV9kZXZpY2UoKSAqLworc3RhdGljIGNvbnN0IHU4IEFETTEwMjlfUkVHX1RFTVBbXSA9IHsKKwlBRE0xMDI5X1JFR19MT0NBTF9URU1QLAorCUFETTEwMjlfUkVHX1JFTU9URTFfVEVNUCwKKwlBRE0xMDI5X1JFR19SRU1PVEUyX1RFTVAsCisJQURNMTAyOV9SRUdfTE9DQUxfVEVNUF9ISUdILAorCUFETTEwMjlfUkVHX1JFTU9URTFfVEVNUF9ISUdILAorCUFETTEwMjlfUkVHX1JFTU9URTJfVEVNUF9ISUdILAorCUFETTEwMjlfUkVHX0xPQ0FMX1RFTVBfTE9XLAorCUFETTEwMjlfUkVHX1JFTU9URTFfVEVNUF9MT1csCisJQURNMTAyOV9SRUdfUkVNT1RFMl9URU1QX0xPVywKK307CisKK3N0YXRpYyBjb25zdCB1OCBBRE0xMDI5X1JFR19GQU5bXSA9IHsKKwlBRE0xMDI5X1JFR19GQU4xLAorCUFETTEwMjlfUkVHX0ZBTjIsCisJQURNMTAyOV9SRUdfRkFOMV9NSU4sCisJQURNMTAyOV9SRUdfRkFOMl9NSU4sCit9OworCitzdGF0aWMgY29uc3QgdTggQURNMTAyOV9SRUdfRkFOX0RJVltdID0geworCUFETTEwMjlfUkVHX0ZBTjFfQ09ORklHLAorCUFETTEwMjlfUkVHX0ZBTjJfQ09ORklHLAorfTsKKworLyoKKyAqIEZ1bmN0aW9ucyBkZWNsYXJhdGlvbgorICovCisKK3N0YXRpYyBpbnQgYWRtMTAyOV9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBhZG0xMDI5X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCk7CitzdGF0aWMgaW50IGFkbTEwMjlfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBzdHJ1Y3QgYWRtMTAyOV9kYXRhICphZG0xMDI5X3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgYWRtMTAyOV9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKKworLyoKKyAqIERyaXZlciBkYXRhIChjb21tb24gdG8gYWxsIGNsaWVudHMpCisgKi8KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkbTEwMjlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImFkbTEwMjkiLAorCX0sCisJLmF0dGFjaF9hZGFwdGVyID0gYWRtMTAyOV9hdHRhY2hfYWRhcHRlciwKKwkuZGV0YWNoX2NsaWVudCA9IGFkbTEwMjlfZGV0YWNoX2NsaWVudCwKK307CisKKy8qCisgKiBDbGllbnQgZGF0YSAoZWFjaCBjbGllbnQgZ2V0cyBpdHMgb3duKQorICovCisKK3N0cnVjdCBhZG0xMDI5X2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCWNoYXIgdmFsaWQ7CQkvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCisJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIGluIGppZmZpZXMgKi8KKworCS8qIHJlZ2lzdGVycyB2YWx1ZXMsIHNpZ25lZCBmb3IgdGVtcGVyYXR1cmUsIHVuc2lnbmVkIGZvciBvdGhlciBzdHVmZiAqLworCXM4IHRlbXBbQVJSQVlfU0laRShBRE0xMDI5X1JFR19URU1QKV07CisJdTggZmFuW0FSUkFZX1NJWkUoQURNMTAyOV9SRUdfRkFOKV07CisJdTggZmFuX2RpdltBUlJBWV9TSVpFKEFETTEwMjlfUkVHX0ZBTl9ESVYpXTsKK307CisKKy8qCisgKiBTeXNmcyBzdHVmZgorICovCisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgYWRtMTAyOV9kYXRhICpkYXRhID0gYWRtMTAyOV91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVBfRlJPTV9SRUcoZGF0YS0+dGVtcFthdHRyLT5pbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3QKK3Nob3dfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGFkbTEwMjlfZGF0YSAqZGF0YSA9IGFkbTEwMjlfdXBkYXRlX2RldmljZShkZXYpOworCXUxNiB2YWw7CisJaWYgKGRhdGEtPmZhblthdHRyLT5pbmRleF0gPT0gMCB8fCBkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSA9PSAwCisJICAgIHx8IGRhdGEtPmZhblthdHRyLT5pbmRleF0gPT0gMjU1KSB7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOworCX0KKworCXZhbCA9IDE4ODAgKiAxMjAgLyBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0pCisJICAgIC8gZGF0YS0+ZmFuW2F0dHItPmluZGV4XTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QKK3Nob3dfZmFuX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBhZG0xMDI5X2RhdGEgKmRhdGEgPSBhZG0xMDI5X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpZiAoZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gPT0gMCkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSkpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfZmFuX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBhZG0xMDI5X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCXU4IHJlZzsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCS8qUmVhZCBhY3R1YWwgY29uZmlnICovCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkgICAgICAgQURNMTAyOV9SRUdfRkFOX0RJVlthdHRyLT5pbmRleF0pOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDE6CisJCXZhbCA9IDE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdmFsID0gMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl2YWwgPSAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYW5fZGl2IHZhbHVlICVsZCBub3QgIgorCQkJInN1cHBvcnRlZC4gQ2hvb3NlIG9uZSBvZiAxLCAyIG9yIDQhXG4iLCB2YWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogVXBkYXRlIHRoZSB2YWx1ZSAqLworCXJlZyA9IChyZWcgJiAweDNGKSB8ICh2YWwgPDwgNik7CisKKwkvKiBXcml0ZSB2YWx1ZSAqLworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCSAgQURNMTAyOV9SRUdfRkFOX0RJVlthdHRyLT5pbmRleF0sIHJlZyk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCitBY2Nlc3MgcmlnaHRzIG9uIHN5c2ZzLCBTX0lSVUdPIHN0YW5kIGZvciBJcyBSZWFkYWJsZSBieSBVc2VyLCBHcm91cCBhbmQgT3RoZXJzCisJCQlTX0lXVVNSIHN0YW5kIGZvciBJcyBXcml0YWJsZSBieSBVc2VyCisqLworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDIpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWF4LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19tYXgsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgNSk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWluLCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9taW4sIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgNyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX21pbiwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCA4KTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAxKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX21pbiwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX21pbiwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDMpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfZGl2LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19mYW5fZGl2LCBzZXRfZmFuX2RpdiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfZGl2LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19mYW5fZGl2LCBzZXRfZmFuX2RpdiwgMSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZG0xMDI5X2F0dHJpYnV0ZXNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9kaXYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRtMTAyOV9ncm91cCA9IHsKKwkuYXR0cnMgPSBhZG0xMDI5X2F0dHJpYnV0ZXMsCit9OworCisvKgorICogUmVhbCBjb2RlCisgKi8KKworc3RhdGljIGludCBhZG0xMDI5X2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoIShhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19IV01PTikpCisJCXJldHVybiAwOworCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgYWRtMTAyOV9kZXRlY3QpOworfQorCisvKgorICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBkb2VzIG1vcmUgdGhhbiBqdXN0IGRldGVjdGlvbi4gSWYgZGV0ZWN0aW9uCisgKiBzdWNjZWVkcywgaXQgYWxzbyByZWdpc3RlcnMgdGhlIG5ldyBjaGlwLgorICovCisKK3N0YXRpYyBpbnQgYWRtMTAyOV9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgYWRtMTAyOV9kYXRhICpkYXRhOworCWludCBlcnIgPSAwOworCWNvbnN0IGNoYXIgKm5hbWUgPSAiIjsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCWdvdG8gZXhpdDsKKworCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWRtMTAyOV9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwljbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmRyaXZlciA9ICZhZG0xMDI5X2RyaXZlcjsKKworCS8qIE5vdyB3ZSBkbyB0aGUgZGV0ZWN0aW9uIGFuZCBpZGVudGlmaWNhdGlvbi4gQSBuZWdhdGl2ZSBraW5kCisJICogbWVhbnMgdGhhdCB0aGUgZHJpdmVyIHdhcyBsb2FkZWQgd2l0aCBubyBmb3JjZSBwYXJhbWV0ZXIKKwkgKiAoZGVmYXVsdCksIHNvIHdlIG11c3QgYm90aCBkZXRlY3QgYW5kIGlkZW50aWZ5IHRoZSBjaGlwCisJICogKGFjdHVhbGx5IHRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIGtpbmQgb2YgY2hpcCBmb3Igbm93LCBhZG0xMDI5KS4KKwkgKiBBIHplcm8ga2luZCBtZWFucyB0aGF0IHRoZSBkcml2ZXIgd2FzIGxvYWRlZCB3aXRoIHRoZSBmb3JjZQorCSAqIHBhcmFtZXRlciwgdGhlIGRldGVjdGlvbiBzdGVwIHNoYWxsIGJlIHNraXBwZWQuIEEgcG9zaXRpdmUga2luZAorCSAqIG1lYW5zIHRoYXQgdGhlIGRyaXZlciB3YXMgbG9hZGVkIHdpdGggdGhlIGZvcmNlIHBhcmFtZXRlciBhbmQgYQorCSAqIGdpdmVuIGtpbmQgb2YgY2hpcCBpcyByZXF1ZXN0ZWQsIHNvIGJvdGggdGhlIGRldGVjdGlvbiBhbmQgdGhlCisJICogaWRlbnRpZmljYXRpb24gc3RlcHMgYXJlIHNraXBwZWQuICovCisKKwkvKiBEZWZhdWx0IHRvIGFuIGFkbTEwMjkgaWYgZm9yY2VkICovCisJaWYgKGtpbmQgPT0gMCkKKwkJa2luZCA9IGFkbTEwMjk7CisKKwkvKiBBRE0xMDI5IGRvZXNuJ3QgaGF2ZSBDSElQIElELCBjaGVjayBqdXN0IE1BTiBJRAorCSAqIEZvciBiZXR0ZXIgZGV0ZWN0aW9uIHdlIGNoZWNrIGFsc28gQURNMTAyOV9URU1QX0RFVklDRVNfSU5TVEFMTEVELAorCSAqIEFETTEwMjlfUkVHX05CX0ZBTl9TVVBQT1JUIGFuZCBjb21wYXJlIGl0IHdpdGggcG9zc2libGUgdmFsdWVzCisJICogZG9jdW1lbnRlZAorCSAqLworCisJaWYgKGtpbmQgPD0gMCkgewkvKiBpZGVudGlmaWNhdGlvbiAqLworCQl1OCBtYW5faWQsIGNoaXBfaWQsIHRlbXBfZGV2aWNlc19pbnN0YWxsZWQsIG5iX2Zhbl9zdXBwb3J0OworCisJCW1hbl9pZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFETTEwMjlfUkVHX01BTl9JRCk7CisJCWNoaXBfaWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRE0xMDI5X1JFR19DSElQX0lEKTsKKwkJdGVtcF9kZXZpY2VzX2luc3RhbGxlZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCUFETTEwMjlfUkVHX1RFTVBfREVWSUNFU19JTlNUQUxMRUQpOworCQluYl9mYW5fc3VwcG9ydCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlBRE0xMDI5X1JFR19OQl9GQU5fU1VQUE9SVCk7CisJCS8qIDB4NDEgaXMgQW5hbG9nIERldmljZXMgKi8KKwkJaWYgKG1hbl9pZCA9PSAweDQxICYmICh0ZW1wX2RldmljZXNfaW5zdGFsbGVkICYgMHhmOSkgPT0gMHgwMQorCQkgICAgJiYgbmJfZmFuX3N1cHBvcnQgPT0gMHgwMykgeworCQkJaWYgKChjaGlwX2lkICYgMHhGMCkgPT0gMHgwMCkgeworCQkJCWtpbmQgPSBhZG0xMDI5OworCQkJfSBlbHNlIHsKKwkJCQkvKiBUaGVyZSBhcmUgbm8gIm9mZmljaWFsIiBDSElQIElELCBzbyBhY3R1YWxseQorCQkJCSAqIHdlIHVzZSBNYWpvci9NaW5vciByZXZpc2lvbiBmb3IgdGhhdCAqLworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgImFkbTEwMjk6IFVua25vd24gbWFqb3IgcmV2aXNpb24gJXgsICIKKwkJCQkgICAgICAgInBsZWFzZSBsZXQgdXMga25vd1xuIiwgY2hpcF9pZCk7CisJCQl9CisJCX0KKworCQlpZiAoa2luZCA8PSAwKSB7CS8qIGlkZW50aWZpY2F0aW9uIGZhaWxlZCAqLworCQkJcHJfZGVidWcoImFkbTEwMjk6IFVuc3VwcG9ydGVkIGNoaXAgKG1hbl9pZD0weCUwMlgsICIKKwkJCQkgImNoaXBfaWQ9MHglMDJYKVxuIiwgbWFuX2lkLCBjaGlwX2lkKTsKKwkJCWdvdG8gZXhpdF9mcmVlOworCQl9CisJfQorCisJaWYgKGtpbmQgPT0gYWRtMTAyOSkgeworCQluYW1lID0gImFkbTEwMjkiOworCX0KKworCS8qIFdlIGNhbiBmaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyAqLworCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCisJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSkKKwkJZ290byBleGl0X2ZyZWU7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIEFETTEwMjkgY2hpcAorCSAqIENoZWNrIGNvbmZpZyByZWdpc3RlcgorCSAqLworCWlmIChhZG0xMDI5X2luaXRfY2xpZW50KGNsaWVudCkgPT0gMCkKKwkJZ290byBleGl0X2RldGFjaDsKKworCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZhZG0xMDI5X2dyb3VwKSkpCisJCWdvdG8gZXhpdF9kZXRhY2g7CisKKwlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOworCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCX0KKworCXJldHVybiAwOworCisgZXhpdF9yZW1vdmVfZmlsZXM6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYWRtMTAyOV9ncm91cCk7CisgZXhpdF9kZXRhY2g6CisJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKyBleGl0X2ZyZWU6CisJa2ZyZWUoZGF0YSk7CisgZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFkbTEwMjlfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwl1OCBjb25maWc7CisJY29uZmlnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURNMTAyOV9SRUdfQ09ORklHKTsKKwlpZiAoKGNvbmZpZyAmIDB4MTApID09IDApIHsKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFETTEwMjlfUkVHX0NPTkZJRywKKwkJCQkJICBjb25maWcgfCAweDEwKTsKKwl9CisJLyogcmVjaGVjayBjb25maWcgKi8KKwljb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRE0xMDI5X1JFR19DT05GSUcpOworCWlmICgoY29uZmlnICYgMHgxMCkgPT0gMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYWRtMTAyOV9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkbTEwMjlfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBlcnI7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmFkbTEwMjlfZ3JvdXApOworCisJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKKwkJcmV0dXJuIGVycjsKKworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCisvKgorZnVuY3Rpb24gdGhhdCB1cGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgY2hpcHMgKHRlbXBlcmF0dXJlIGZvciBleGVtcGxlKQorKi8KK3N0YXRpYyBzdHJ1Y3QgYWRtMTAyOV9kYXRhICphZG0xMDI5X3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFkbTEwMjlfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCS8qCisJICogVXNlIHRoZSAiY2FjaGUiIEx1a2UsIGRvbid0IHJlY2hlY2sgdmFsdWVzCisJICogaWYgdGhlcmUgYXJlIGFscmVhZHkgY2hlY2tlZCBub3QgYSBsb25nIHRpbWUgbGF0ZXIKKwkgKi8KKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAqIDIpCisJIHx8ICFkYXRhLT52YWxpZCkgeworCQlpbnQgbnI7CisKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJVcGRhdGluZyBhZG0xMDI5IGRhdGFcbiIpOworCisJCWZvciAobnIgPSAwOyBuciA8IEFSUkFZX1NJWkUoQURNMTAyOV9SRUdfVEVNUCk7IG5yKyspIHsKKwkJCWRhdGEtPnRlbXBbbnJdID0KKwkJCSAgICBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJICAgICBBRE0xMDI5X1JFR19URU1QW25yXSk7CisJCX0KKwkJZm9yIChuciA9IDA7IG5yIDwgQVJSQVlfU0laRShBRE0xMDI5X1JFR19GQU4pOyBucisrKSB7CisJCQlkYXRhLT5mYW5bbnJdID0KKwkJCSAgICBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJICAgICBBRE0xMDI5X1JFR19GQU5bbnJdKTsKKwkJfQorCQlmb3IgKG5yID0gMDsgbnIgPCBBUlJBWV9TSVpFKEFETTEwMjlfUkVHX0ZBTl9ESVYpOyBucisrKSB7CisJCQlkYXRhLT5mYW5fZGl2W25yXSA9CisJCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCSAgICAgQURNMTAyOV9SRUdfRkFOX0RJVltucl0pOworCQl9CisKKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwkJZGF0YS0+dmFsaWQgPSAxOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGRhdGE7Cit9CisKKy8qCisJQ29tbW9uIG1vZHVsZSBzdHVmZgorKi8KK3N0YXRpYyBpbnQgX19pbml0IHNlbnNvcnNfYWRtMTAyOV9pbml0KHZvaWQpCit7CisKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmFkbTEwMjlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNlbnNvcnNfYWRtMTAyOV9leGl0KHZvaWQpCit7CisKKwlpMmNfZGVsX2RyaXZlcigmYWRtMTAyOV9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJDb3JlbnRpbiBMQUJCRSA8Y29yZW50aW4ubGFiYmVAZ2VvbWF0eXMuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImFkbTEwMjkgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKK21vZHVsZV9pbml0KHNlbnNvcnNfYWRtMTAyOV9pbml0KTsKK21vZHVsZV9leGl0KHNlbnNvcnNfYWRtMTAyOV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZjcxODA1Zi5jIGIvZHJpdmVycy9od21vbi9mNzE4MDVmLmMKaW5kZXggYTI3MmNhZS4uN2MyOTczNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9mNzE4MDVmLmMKKysrIGIvZHJpdmVycy9od21vbi9mNzE4MDVmLmMKQEAgLTE0Niw3ICsxNDYsNiBAQAogc3RydWN0IGY3MTgwNWZfZGF0YSB7CiAJdW5zaWduZWQgc2hvcnQgYWRkcjsKIAljb25zdCBjaGFyICpuYW1lOwotCXN0cnVjdCBtdXRleCBsb2NrOwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKIAogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKQEAgLTI3MSw1MCArMjcwLDQyIEBACiAgKiBEZXZpY2UgSS9PIGFjY2VzcwogICovCiAKKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggZGF0YS0+dXBkYXRlX2xvY2sgaGVsZCwgZXhjZXB0IGR1cmluZyBpbml0aWFsaXphdGlvbiAqLwogc3RhdGljIHU4IGY3MTgwNWZfcmVhZDgoc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSwgdTggcmVnKQogewotCXU4IHZhbDsKLQotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCW91dGIocmVnLCBkYXRhLT5hZGRyICsgQUREUl9SRUdfT0ZGU0VUKTsKLQl2YWwgPSBpbmIoZGF0YS0+YWRkciArIERBVEFfUkVHX09GRlNFVCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiB2YWw7CisJcmV0dXJuIGluYihkYXRhLT5hZGRyICsgREFUQV9SRUdfT0ZGU0VUKTsKIH0KIAorLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBkYXRhLT51cGRhdGVfbG9jayBoZWxkLCBleGNlcHQgZHVyaW5nIGluaXRpYWxpemF0aW9uICovCiBzdGF0aWMgdm9pZCBmNzE4MDVmX3dyaXRlOChzdHJ1Y3QgZjcxODA1Zl9kYXRhICpkYXRhLCB1OCByZWcsIHU4IHZhbCkKIHsKLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAlvdXRiKHJlZywgZGF0YS0+YWRkciArIEFERFJfUkVHX09GRlNFVCk7CiAJb3V0Yih2YWwsIGRhdGEtPmFkZHIgKyBEQVRBX1JFR19PRkZTRVQpOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiB9CiAKIC8qIEl0IGlzIGltcG9ydGFudCB0byByZWFkIHRoZSBNU0IgZmlyc3QsIGJlY2F1c2UgZG9pbmcgc28gbGF0Y2hlcyB0aGUKLSAgIHZhbHVlIG9mIHRoZSBMU0IsIHNvIHdlIGFyZSBzdXJlIGJvdGggYnl0ZXMgYmVsb25nIHRvIHRoZSBzYW1lIHZhbHVlLiAqLworICAgdmFsdWUgb2YgdGhlIExTQiwgc28gd2UgYXJlIHN1cmUgYm90aCBieXRlcyBiZWxvbmcgdG8gdGhlIHNhbWUgdmFsdWUuCisgICBNdXN0IGJlIGNhbGxlZCB3aXRoIGRhdGEtPnVwZGF0ZV9sb2NrIGhlbGQsIGV4Y2VwdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKi8KIHN0YXRpYyB1MTYgZjcxODA1Zl9yZWFkMTYoc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSwgdTggcmVnKQogewogCXUxNiB2YWw7CiAKLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAlvdXRiKHJlZywgZGF0YS0+YWRkciArIEFERFJfUkVHX09GRlNFVCk7CiAJdmFsID0gaW5iKGRhdGEtPmFkZHIgKyBEQVRBX1JFR19PRkZTRVQpIDw8IDg7CiAJb3V0YigrK3JlZywgZGF0YS0+YWRkciArIEFERFJfUkVHX09GRlNFVCk7CiAJdmFsIHw9IGluYihkYXRhLT5hZGRyICsgREFUQV9SRUdfT0ZGU0VUKTsKLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCiAJcmV0dXJuIHZhbDsKIH0KIAorLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBkYXRhLT51cGRhdGVfbG9jayBoZWxkLCBleGNlcHQgZHVyaW5nIGluaXRpYWxpemF0aW9uICovCiBzdGF0aWMgdm9pZCBmNzE4MDVmX3dyaXRlMTYoc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSwgdTggcmVnLCB1MTYgdmFsKQogewotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCW91dGIocmVnLCBkYXRhLT5hZGRyICsgQUREUl9SRUdfT0ZGU0VUKTsKIAlvdXRiKHZhbCA+PiA4LCBkYXRhLT5hZGRyICsgREFUQV9SRUdfT0ZGU0VUKTsKIAlvdXRiKCsrcmVnLCBkYXRhLT5hZGRyICsgQUREUl9SRUdfT0ZGU0VUKTsKIAlvdXRiKHZhbCAmIDB4ZmYsIGRhdGEtPmFkZHIgKyBEQVRBX1JFR19PRkZTRVQpOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZjcxODA1Zl9kYXRhICpmNzE4MDVmX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTE1MCw3ICsxMTQxLDYgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKIAlkYXRhLT5hZGRyID0gcmVzLT5zdGFydDsKLQltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKIAlkYXRhLT5uYW1lID0gbmFtZXNbc2lvX2RhdGEtPmtpbmRdOwogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIApAQCAtMTMwMCwxNCArMTI5MCwxMSBAQAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogRGV2aWNlIGFkZGl0aW9uIGZhaWxlZCAoJWQpXG4iLAogCQkgICAgICAgZXJyKTsKLQkJZ290byBleGl0X2tmcmVlX2RhdGE7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwogCX0KIAogCXJldHVybiAwOwogCi1leGl0X2tmcmVlX2RhdGE6Ci0Ja2ZyZWUocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpOwotCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKIGV4aXRfZGV2aWNlX3B1dDoKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogZXhpdDoKQEAgLTE0MDAsMTAgKzEzODcsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZjcxODA1Zl9leGl0KHZvaWQpCiB7Ci0Ja2ZyZWUocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpOwotCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKLQogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmNzE4MDVmX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaHdtb24uYyBiL2RyaXZlcnMvaHdtb24vaHdtb24uYwppbmRleCAxMDZmYTAxLi5hZmZjYzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2h3bW9uLmMKKysrIGIvZHJpdmVycy9od21vbi9od21vbi5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAljbGFzc19kZXN0cm95KGh3bW9uX2NsYXNzKTsKIH0KIAotbW9kdWxlX2luaXQoaHdtb25faW5pdCk7CitzdWJzeXNfaW5pdGNhbGwoaHdtb25faW5pdCk7CiBtb2R1bGVfZXhpdChod21vbl9leGl0KTsKIAogRVhQT1JUX1NZTUJPTF9HUEwoaHdtb25fZGV2aWNlX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jIGIvZHJpdmVycy9od21vbi9pdDg3LmMKaW5kZXggMWVkOGI3ZS4uNjJhZmM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pdDg3LmMKKysrIGIvZHJpdmVycy9od21vbi9pdDg3LmMKQEAgLTIwMiwxNSArMjAyLDIzIEBACiB9CiAjZGVmaW5lIERJVl9GUk9NX1JFRyh2YWwpICgxIDw8ICh2YWwpKQogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHB3bV9mcmVxWzhdID0geworCTQ4MDAwMDAwIC8gMTI4LAorCTI0MDAwMDAwIC8gMTI4LAorCTEyMDAwMDAwIC8gMTI4LAorCTgwMDAwMDAgLyAxMjgsCisJNjAwMDAwMCAvIDEyOCwKKwkzMDAwMDAwIC8gMTI4LAorCTE1MDAwMDAgLyAxMjgsCisJNzUwMDAwIC8gMTI4LAorfTsKIAotLyogRm9yIGVhY2ggcmVnaXN0ZXJlZCBJVDg3LCB3ZSBuZWVkIHRvIGtlZXAgc29tZSBkYXRhIGluIG1lbW9yeS4gVGhhdAotICAgZGF0YSBpcyBwb2ludGVkIHRvIGJ5IGl0ODdfbGlzdFtOUl0tPmRhdGEuIFRoZSBzdHJ1Y3R1cmUgaXRzZWxmIGlzCi0gICBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGF0IHRoZSBzYW1lIHRpbWUgd2hlbiBhIG5ldyBpdDg3IGNsaWVudCBpcwotICAgYWxsb2NhdGVkLiAqLworCisvKiBGb3IgZWFjaCByZWdpc3RlcmVkIGNoaXAsIHdlIG5lZWQgdG8ga2VlcCBzb21lIGRhdGEgaW4gbWVtb3J5LgorICAgVGhlIHN0cnVjdHVyZSBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICovCiBzdHJ1Y3QgaXQ4N19kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwotCXN0cnVjdCBtdXRleCBsb2NrOwogCWVudW0gY2hpcHMgdHlwZTsKIAogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKQEAgLTIzMiw2ICsyNDAsNyBAQAogCXU4IHZybTsKIAl1MzIgYWxhcm1zOwkJLyogUmVnaXN0ZXIgZW5jb2RpbmcsIGNvbWJpbmVkICovCiAJdTggZmFuX21haW5fY3RybDsJLyogUmVnaXN0ZXIgdmFsdWUgKi8KKwl1OCBmYW5fY3RsOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBtYW51YWxfcHdtX2N0bFszXTsgICAvKiBtYW51YWwgUFdNIHZhbHVlIHNldCBieSB1c2VyICovCiB9OwogCkBAIC01MTksNiArNTI4LDE0IEBACiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGl0ODdfdXBkYXRlX2RldmljZShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwiJWRcbiIsIGRhdGEtPm1hbnVhbF9wd21fY3RsW25yXSk7CiB9CitzdGF0aWMgc3NpemVfdCBzaG93X3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaXQ4N191cGRhdGVfZGV2aWNlKGRldik7CisJaW50IGluZGV4ID0gKGRhdGEtPmZhbl9jdGwgPj4gNCkgJiAweDA3OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHB3bV9mcmVxW2luZGV4XSk7Cit9CiBzdGF0aWMgc3NpemVfdCBzZXRfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKQEAgLTUyOCw5ICs1NDUsMTAgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKLQl1OCByZWcgPSBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fRElWKTsKKwl1OCByZWc7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmVnID0gaXQ4N19yZWFkX3ZhbHVlKGNsaWVudCwgSVQ4N19SRUdfRkFOX0RJVik7CiAJc3dpdGNoIChucikgewogCWNhc2UgMDogZGF0YS0+ZmFuX2Rpdltucl0gPSByZWcgJiAweDA3OyBicmVhazsKIAljYXNlIDE6IGRhdGEtPmZhbl9kaXZbbnJdID0gKHJlZyA+PiAzKSAmIDB4MDc7IGJyZWFrOwpAQCAtNjM5LDYgKzY1NywyOCBAQAogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KK3N0YXRpYyBzc2l6ZV90IHNldF9wd21fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCWludCBpOworCisJLyogU2VhcmNoIGZvciB0aGUgbmVhcmVzdCBhdmFpbGFibGUgZnJlcXVlbmN5ICovCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlpZiAodmFsID4gKHB3bV9mcmVxW2ldICsgcHdtX2ZyZXFbaSsxXSkgLyAyKQorCQkJYnJlYWs7CisJfQorCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPmZhbl9jdGwgPSBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fQ1RMKSAmIDB4OGY7CisJZGF0YS0+ZmFuX2N0bCB8PSBpIDw8IDQ7CisJaXQ4N193cml0ZV92YWx1ZShjbGllbnQsIElUODdfUkVHX0ZBTl9DVEwsIGRhdGEtPmZhbl9jdGwpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQogCiAjZGVmaW5lIHNob3dfZmFuX29mZnNldChvZmZzZXQpCQkJCQlcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbiMjb2Zmc2V0IyNfaW5wdXQsIFNfSVJVR08sCQlcCkBAIC02NTYsNyArNjk2LDEwIEBACiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwJXAogCQlzaG93X3B3bV9lbmFibGUsIHNldF9wd21fZW5hYmxlLCBvZmZzZXQgLSAxKTsJCVwKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtIyNvZmZzZXQsIFNfSVJVR08gfCBTX0lXVVNSLAkJXAotCQlzaG93X3B3bSwgc2V0X3B3bSwgb2Zmc2V0IC0gMSk7CisJCXNob3dfcHdtLCBzZXRfcHdtLCBvZmZzZXQgLSAxKTsJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfZnJlcSwJCQkJCVwKKwkJKG9mZnNldCA9PSAxID8gU19JUlVHTyB8IFNfSVdVU1IgOiBTX0lSVUdPKSwJCVwKKwkJc2hvd19wd21fZnJlcSwgKG9mZnNldCA9PSAxID8gc2V0X3B3bV9mcmVxIDogTlVMTCkpOwogCiBzaG93X3B3bV9vZmZzZXQoMSk7CiBzaG93X3B3bV9vZmZzZXQoMik7CkBAIC05MDQsNyArOTQ3LDYgQEAKIAl9CiAKIAluZXdfY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKLQltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKIAlpMmNfc2V0X2NsaWVudGRhdGEobmV3X2NsaWVudCwgZGF0YSk7CiAJbmV3X2NsaWVudC0+YWRkciA9IGlzYV9hZGRyZXNzOwogCW5ld19jbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwpAQCAtMTAyMSw3ICsxMDYzLDEzIEBACiAJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCiAJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9wd20yLmRldl9hdHRyKSkKIAkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIpKSkKKwkJICAgICAmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkgICAgICZkZXZfYXR0cl9wd20xX2ZyZXEpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkgICAgICZkZXZfYXR0cl9wd20yX2ZyZXEpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkgICAgICZkZXZfYXR0cl9wd20zX2ZyZXEpKSkKIAkJCWdvdG8gRVJST1I0OwogCX0KIApAQCAtMTA3NiwzMyArMTEyNCwyMiBAQAogCXJldHVybiAwOwogfQogCi0vKiBJU0EgYWNjZXNzIG11c3QgYmUgbG9ja2VkIGV4cGxpY2l0bHkhCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGRhdGEtPnVwZGF0ZV9sb2NrIGhlbGQsIGV4Y2VwdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgICBXZSBpZ25vcmUgdGhlIElUODcgQlVTWSBmbGFnIGF0IHRoaXMgbW9tZW50IC0gaXQgY291bGQgbGVhZCB0byBkZWFkbG9ja3MsCiAgICB3b3VsZCBzbG93IGRvd24gdGhlIElUODcgYWNjZXNzIGFuZCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gKi8KIHN0YXRpYyBpbnQgaXQ4N19yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKLQlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IHJlczsKLQotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIElUODdfQUREUl9SRUdfT0ZGU0VUKTsKLQlyZXMgPSBpbmJfcChjbGllbnQtPmFkZHIgKyBJVDg3X0RBVEFfUkVHX09GRlNFVCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiByZXM7CisJcmV0dXJuIGluYl9wKGNsaWVudC0+YWRkciArIElUODdfREFUQV9SRUdfT0ZGU0VUKTsKIH0KIAotLyogSVNBIGFjY2VzcyBtdXN0IGJlIGxvY2tlZCBleHBsaWNpdGx5IQorLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBkYXRhLT51cGRhdGVfbG9jayBoZWxkLCBleGNlcHQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICAgV2UgaWdub3JlIHRoZSBJVDg3IEJVU1kgZmxhZyBhdCB0aGlzIG1vbWVudCAtIGl0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLAogICAgd291bGQgc2xvdyBkb3duIHRoZSBJVDg3IGFjY2VzcyBhbmQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuICovCiBzdGF0aWMgdm9pZCBpdDg3X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAJb3V0Yl9wKHJlZywgY2xpZW50LT5hZGRyICsgSVQ4N19BRERSX1JFR19PRkZTRVQpOwogCW91dGJfcCh2YWx1ZSwgY2xpZW50LT5hZGRyICsgSVQ4N19EQVRBX1JFR19PRkZTRVQpOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiB9CiAKIC8qIFJldHVybiAxIGlmIGFuZCBvbmx5IGlmIHRoZSBQV00gaW50ZXJmYWNlIGlzIHNhZmUgdG8gdXNlICovCkBAIC0xMzE2LDYgKzEzNTMsNyBAQAogCQkJKGl0ODdfcmVhZF92YWx1ZShjbGllbnQsIElUODdfUkVHX0FMQVJNMikgPDwgOCkgfAogCQkJKGl0ODdfcmVhZF92YWx1ZShjbGllbnQsIElUODdfUkVHX0FMQVJNMykgPDwgMTYpOwogCQlkYXRhLT5mYW5fbWFpbl9jdHJsID0gaXQ4N19yZWFkX3ZhbHVlKGNsaWVudCwgSVQ4N19SRUdfRkFOX01BSU5fQ1RSTCk7CisJCWRhdGEtPmZhbl9jdGwgPSBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fQ1RMKTsKIAogCQlkYXRhLT5zZW5zb3IgPSBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19URU1QX0VOQUJMRSk7CiAJCS8qIFRoZSA4NzA1IGRvZXMgbm90IGhhdmUgVklEIGNhcGFiaWxpdHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03MC5jIGIvZHJpdmVycy9od21vbi9sbTcwLmMKaW5kZXggNmJhODQ3My4uN2VhYWUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTcwLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTcwLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IGxtNzBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsbTcwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBsbTcwICpwX2xtNzAgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc4LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzguYwppbmRleCA3M2JjMmZmLi44ODY3ODZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzguYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzguYwpAQCAtMTI1LDEwICsxMjUsOCBAQAogICAgYmFkLiBRdWl0ZSBhIGxvdCBvZiBib29ra2VlcGluZyBpcyBkb25lLiBBIHJlYWwgZHJpdmVyIGNhbiBvZnRlbiBjdXQKICAgIHNvbWUgY29ybmVycy4gKi8KIAotLyogRm9yIGVhY2ggcmVnaXN0ZXJlZCBMTTc4LCB3ZSBuZWVkIHRvIGtlZXAgc29tZSBkYXRhIGluIG1lbW9yeS4gVGhhdAotICAgZGF0YSBpcyBwb2ludGVkIHRvIGJ5IGxtNzhfbGlzdFtOUl0tPmRhdGEuIFRoZSBzdHJ1Y3R1cmUgaXRzZWxmIGlzCi0gICBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGF0IHRoZSBzYW1lIHRpbWUgd2hlbiBhIG5ldyBsbTc4IGNsaWVudCBpcwotICAgYWxsb2NhdGVkLiAqLworLyogRm9yIGVhY2ggcmVnaXN0ZXJlZCBjaGlwLCB3ZSBuZWVkIHRvIGtlZXAgc29tZSBkYXRhIGluIG1lbW9yeS4KKyAgIFRoZSBzdHJ1Y3R1cmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAqLwogc3RydWN0IGxtNzhfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04NS5jIGIvZHJpdmVycy9od21vbi9sbTg1LmMKaW5kZXggMmMzMjkzYy4uMjBhOGM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg1LmMKQEAgLTI5OCwxMSArMjk4LDYgQEAKICNkZWZpbmUgTE04NV9EQVRBX0lOVEVSVkFMICAoSFogKyBIWiAvIDIpCiAjZGVmaW5lIExNODVfQ09ORklHX0lOVEVSVkFMICAoMSAqIDYwICogSFopCiAKLS8qIEZvciBlYWNoIHJlZ2lzdGVyZWQgTE04NSwgd2UgbmVlZCB0byBrZWVwIHNvbWUgZGF0YSBpbiBtZW1vcnkuIFRoYXQKLSAgIGRhdGEgaXMgcG9pbnRlZCB0byBieSBsbTg1X2xpc3RbTlJdLT5kYXRhLiBUaGUgc3RydWN0dXJlIGl0c2VsZiBpcwotICAgZHluYW1pY2FsbHkgYWxsb2NhdGVkLCBhdCB0aGUgc2FtZSB0aW1lIHdoZW4gYSBuZXcgbG04NSBjbGllbnQgaXMKLSAgIGFsbG9jYXRlZC4gKi8KLQogLyogTE04NSBjYW4gYXV0b21hdGljYWxseSBhZGp1c3QgZmFuIHNwZWVkcyBiYXNlZCBvbiB0ZW1wZXJhdHVyZQogICogVGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzIGFuIGVudGlyZSBab25lIGNvbmZpZy4gIFRoZXJlIGFyZQogICogdGhyZWUgem9uZXMgKG9uZSBmb3IgZWFjaCB0ZW1wZXJhdHVyZSBpbnB1dCkgb24gdGhlIGxtODUKQEAgLTMyOSwxMCArMzI0LDExIEBACiAJdTggbWluX29mZjsJLyogTWluIFBXTSBvciBPRkYgYmVsb3cgImxpbWl0IiwgZmxhZyAqLwogfTsKIAorLyogRm9yIGVhY2ggcmVnaXN0ZXJlZCBjaGlwLCB3ZSBuZWVkIHRvIGtlZXAgc29tZSBkYXRhIGluIG1lbW9yeS4KKyAgIFRoZSBzdHJ1Y3R1cmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAqLwogc3RydWN0IGxtODVfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsKIAllbnVtIGNoaXBzIHR5cGU7CiAKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3NpczU1OTUuYyBiL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jCmluZGV4IDk1YTRiNWQuLjNmNDAwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jCkBAIC0xNjIsMTAgKzE2Miw4IEBACiB9CiAjZGVmaW5lIERJVl9GUk9NX1JFRyh2YWwpICgxIDw8ICh2YWwpKQogCi0vKiBGb3IgdGhlIFNJUzU1OTUsIHdlIG5lZWQgdG8ga2VlcCBzb21lIGRhdGEgaW4gbWVtb3J5LiBUaGF0Ci0gICBkYXRhIGlzIHBvaW50ZWQgdG8gYnkgc2lzNTU5NV9saXN0W05SXS0+ZGF0YS4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMKLSAgIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgYXQgdGhlIHRpbWUgd2hlbiB0aGUgbmV3IHNpczU1OTUgY2xpZW50IGlzCi0gICBhbGxvY2F0ZWQuICovCisvKiBGb3IgZWFjaCByZWdpc3RlcmVkIGNoaXAsIHdlIG5lZWQgdG8ga2VlcCBzb21lIGRhdGEgaW4gbWVtb3J5LgorICAgVGhlIHN0cnVjdHVyZSBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICovCiBzdHJ1Y3Qgc2lzNTU5NV9kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi92aWE2ODZhLmMgYi9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYwppbmRleCBmOGFjYWRhLi45YTQ0MGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYworKysgYi9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYwpAQCAtMjkyLDkgKzI5Miw4IEBACiAjZGVmaW5lIERJVl9GUk9NX1JFRyh2YWwpICgxIDw8ICh2YWwpKQogI2RlZmluZSBESVZfVE9fUkVHKHZhbCkgKCh2YWwpPT04PzM6KHZhbCk9PTQ/MjoodmFsKT09MT8wOjEpCiAKLS8qIEZvciB0aGUgVklBNjg2QSwgd2UgbmVlZCB0byBrZWVwIHNvbWUgZGF0YSBpbiBtZW1vcnkuCi0gICBUaGUgc3RydWN0dXJlIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgYXQgdGhlIHNhbWUgdGltZSB3aGVuIGEgbmV3Ci0gICB2aWE2ODZhIGNsaWVudCBpcyBhbGxvY2F0ZWQuICovCisvKiBGb3IgZWFjaCByZWdpc3RlcmVkIGNoaXAsIHdlIG5lZWQgdG8ga2VlcCBzb21lIGRhdGEgaW4gbWVtb3J5LgorICAgVGhlIHN0cnVjdHVyZSBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICovCiBzdHJ1Y3QgdmlhNjg2YV9kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi92dDEyMTEuYyBiL2RyaXZlcnMvaHdtb24vdnQxMjExLmMKaW5kZXggMjVjYzU2MC4uODljMjNkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi92dDEyMTEuYworKysgYi9kcml2ZXJzL2h3bW9uL3Z0MTIxMS5jCkBAIC0xNzgsOSArMTc4LDEwIEBACiAgKiBTdXBlci1JL08gY29uc3RhbnRzIGFuZCBmdW5jdGlvbnMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKiBDb25maWd1cmF0aW9uICYgZGF0YSBpbmRleCBwb3J0IHJlZ2lzdGVycyAqLwotI2RlZmluZSBTSU9fUkVHX0NJUAkJMHgyZQotI2RlZmluZSBTSU9fUkVHX0RJUAkJMHgyZgorLyogQ29uZmlndXJhdGlvbiBpbmRleCBwb3J0IHJlZ2lzdGVycworICogVGhlIHZ0MTIxMSBjYW4gbGl2ZSBhdCAyIGRpZmZlcmVudCBhZGRyZXNzZXMgc28gd2UgbmVlZCB0byBwcm9iZSBib3RoICovCisjZGVmaW5lIFNJT19SRUdfQ0lQMQkJMHgyZQorI2RlZmluZSBTSU9fUkVHX0NJUDIJCTB4NGUKIAogLyogQ29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KICNkZWZpbmUgU0lPX1ZUMTIxMV9MRE4JCTB4MDcJLyogbG9naWNhbCBkZXZpY2UgbnVtYmVyICovCkBAIC0xOTMsMzMgKzE5NCwzMyBAQAogLyogVlQxMjExIGxvZ2ljYWwgZGV2aWNlIG51bWJlcnMgKi8KICNkZWZpbmUgU0lPX1ZUMTIxMV9MRE5fSFdNT04JMHgwYgkvKiBIVyBtb25pdG9yICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX291dGIoaW50IHJlZywgaW50IHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX291dGIoaW50IHNpb19jaXAsIGludCByZWcsIGludCB2YWwpCiB7Ci0Jb3V0YihyZWcsIFNJT19SRUdfQ0lQKTsKLQlvdXRiKHZhbCwgU0lPX1JFR19ESVApOworCW91dGIocmVnLCBzaW9fY2lwKTsKKwlvdXRiKHZhbCwgc2lvX2NpcCArIDEpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzdXBlcmlvX2luYihpbnQgcmVnKQorc3RhdGljIGlubGluZSBpbnQgc3VwZXJpb19pbmIoaW50IHNpb19jaXAsIGludCByZWcpCiB7Ci0Jb3V0YihyZWcsIFNJT19SRUdfQ0lQKTsKLQlyZXR1cm4gaW5iKFNJT19SRUdfRElQKTsKKwlvdXRiKHJlZywgc2lvX2NpcCk7CisJcmV0dXJuIGluYihzaW9fY2lwICsgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX3NlbGVjdChpbnQgbGRuKQorc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fc2VsZWN0KGludCBzaW9fY2lwLCBpbnQgbGRuKQogewotCW91dGIoU0lPX1ZUMTIxMV9MRE4sIFNJT19SRUdfQ0lQKTsKLQlvdXRiKGxkbiwgU0lPX1JFR19ESVApOworCW91dGIoU0lPX1ZUMTIxMV9MRE4sIHNpb19jaXApOworCW91dGIobGRuLCBzaW9fY2lwICsgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX2VudGVyKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19lbnRlcihpbnQgc2lvX2NpcCkKIHsKLQlvdXRiKDB4ODcsIFNJT19SRUdfQ0lQKTsKLQlvdXRiKDB4ODcsIFNJT19SRUdfQ0lQKTsKKwlvdXRiKDB4ODcsIHNpb19jaXApOworCW91dGIoMHg4Nywgc2lvX2NpcCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX2V4aXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX2V4aXQoaW50IHNpb19jaXApCiB7Ci0Jb3V0YigweGFhLCBTSU9fUkVHX0NJUCk7CisJb3V0YigweGFhLCBzaW9fY2lwKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjYzLDI2ICsxMjY0LDI2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgdnQxMjExX2ZpbmQodW5zaWduZWQgc2hvcnQgKmFkZHJlc3MpCitzdGF0aWMgaW50IF9faW5pdCB2dDEyMTFfZmluZChpbnQgc2lvX2NpcCwgdW5zaWduZWQgc2hvcnQgKmFkZHJlc3MpCiB7CiAJaW50IGVyciA9IC1FTk9ERVY7CiAKLQlzdXBlcmlvX2VudGVyKCk7CisJc3VwZXJpb19lbnRlcihzaW9fY2lwKTsKIAotCWlmIChzdXBlcmlvX2luYihTSU9fVlQxMjExX0RFVklEKSAhPSBTSU9fVlQxMjExX0lEKSB7CisJaWYgKHN1cGVyaW9faW5iKHNpb19jaXAsIFNJT19WVDEyMTFfREVWSUQpICE9IFNJT19WVDEyMTFfSUQpIHsKIAkJZ290byBFWElUOwogCX0KIAotCXN1cGVyaW9fc2VsZWN0KFNJT19WVDEyMTFfTEROX0hXTU9OKTsKKwlzdXBlcmlvX3NlbGVjdChzaW9fY2lwLCBTSU9fVlQxMjExX0xETl9IV01PTik7CiAKLQlpZiAoKHN1cGVyaW9faW5iKFNJT19WVDEyMTFfQUNUSVZFKSAmIDEpID09IDApIHsKKwlpZiAoKHN1cGVyaW9faW5iKHNpb19jaXAsIFNJT19WVDEyMTFfQUNUSVZFKSAmIDEpID09IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZOQU1FICI6IEhXIG1vbml0b3IgaXMgZGlzYWJsZWQsICIKIAkJICAgICAgICJza2lwcGluZ1xuIik7CiAJCWdvdG8gRVhJVDsKIAl9CiAKLQkqYWRkcmVzcyA9ICgoc3VwZXJpb19pbmIoU0lPX1ZUMTIxMV9CQUREUikgPDwgOCkgfAotCQkgICAgKHN1cGVyaW9faW5iKFNJT19WVDEyMTFfQkFERFIgKyAxKSkpICYgMHhmZjAwOworCSphZGRyZXNzID0gKChzdXBlcmlvX2luYihzaW9fY2lwLCBTSU9fVlQxMjExX0JBRERSKSA8PCA4KSB8CisJCSAgICAoc3VwZXJpb19pbmIoc2lvX2NpcCwgU0lPX1ZUMTIxMV9CQUREUiArIDEpKSkgJiAweGZmMDA7CiAJaWYgKCphZGRyZXNzID09IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZOQU1FICI6IEJhc2UgYWRkcmVzcyBpcyBub3Qgc2V0LCAiCiAJCSAgICAgICAic2tpcHBpbmdcbiIpOwpAQCAtMTI5MSwxMCArMTI5MiwxMSBAQAogCiAJZXJyID0gMDsKIAlwcmludGsoS0VSTl9JTkZPIERSVk5BTUUgIjogRm91bmQgVlQxMjExIGNoaXAgYXQgMHglMDR4LCAiCi0JICAgICAgICJyZXZpc2lvbiAldVxuIiwgKmFkZHJlc3MsIHN1cGVyaW9faW5iKFNJT19WVDEyMTFfREVWUkVWKSk7CisJICAgICAgICJyZXZpc2lvbiAldVxuIiwgKmFkZHJlc3MsCisJICAgICAgIHN1cGVyaW9faW5iKHNpb19jaXAsIFNJT19WVDEyMTFfREVWUkVWKSk7CiAKIEVYSVQ6Ci0Jc3VwZXJpb19leGl0KCk7CisJc3VwZXJpb19leGl0KHNpb19jaXApOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEzMDMsOCArMTMwNSw4IEBACiAJaW50IGVycjsKIAl1bnNpZ25lZCBzaG9ydCBhZGRyZXNzID0gMDsKIAotCWVyciA9IHZ0MTIxMV9maW5kKCZhZGRyZXNzKTsKLQlpZiAoZXJyKSB7CisJaWYgKChlcnIgPSB2dDEyMTFfZmluZChTSU9fUkVHX0NJUDEsICZhZGRyZXNzKSkgJiYKKwkgICAgKGVyciA9IHZ0MTIxMV9maW5kKFNJT19SRUdfQ0lQMiwgJmFkZHJlc3MpKSkgewogCQlnb3RvIEVYSVQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4MzYyN2VoZi5jIGIvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYwppbmRleCAyMTJhMTU1Li5kYTU4MjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4MzYyN2VoZi5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMKQEAgLTMyLDggKzMyLDEwIEBACiAKICAgICBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIGNoaXBzOgogCi0gICAgQ2hpcCAgICAgICAgI3ZpbiAgICAjZmFuICAgICNwd20gICAgI3RlbXAgICBjaGlwX2lkICAgIG1hbl9pZAotICAgIHc4MzYyN2VoZiAgIDEwICAgICAgNSAgICAgICA0ICAgICAgIDMgICAgICAgMHg4OCwweGExICAweDVjYTMKKyAgICBDaGlwICAgICAgICAjdmluICAgICNmYW4gICAgI3B3bSAgICAjdGVtcCAgY2hpcCBJRHMgICAgICAgbWFuIElECisgICAgdzgzNjI3ZWhmICAgMTAgICAgICA1ICAgICAgIDQgICAgICAgMyAgICAgIDB4ODg1MCAweDg4ICAgIDB4NWNhMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjAgMHhhMQorICAgIHc4MzYyN2RoZyAgICA5ICAgICAgNSAgICAgICA0ICAgICAgIDMgICAgICAweGEwMjAgMHhjMSAgICAweDVjYTMKICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTU1LDggKzU3LDE4IEBACiAgKiBTdXBlci1JL08gY29uc3RhbnRzIGFuZCBmdW5jdGlvbnMKICAqLwogCisvKgorICogVGhlIHRocmVlIGZvbGxvd2luZyBnbG9iYWxzIGFyZSBpbml0aWFsaXplZCBpbiB3ODM2MjdlaGZfZmluZCgpLCBiZWZvcmUKKyAqIHRoZSBpMmMtaXNhIGRldmljZSBpcyBjcmVhdGVkLiBPdGhlcndpc2UsIHRoZXkgY291bGQgYmUgc3RvcmVkIGluCisgKiB3ODM2MjdlaGZfZGF0YS4gVGhpcyBpcyB1Z2x5LCBidXQgbmVjZXNzYXJ5LCBhbmQgd2hlbiB0aGUgZHJpdmVyIGlzIG5leHQKKyAqIHVwZGF0ZWQgdG8gYmVjb21lIGEgcGxhdGZvcm0gZHJpdmVyLCB0aGUgZ2xvYmFscyB3aWxsIGRpc2FwcGVhci4KKyAqLwogc3RhdGljIGludCBSRUc7CQkvKiBUaGUgcmVnaXN0ZXIgdG8gcmVhZC93cml0ZSAqLwogc3RhdGljIGludCBWQUw7CQkvKiBUaGUgdmFsdWUgdG8gcmVhZC93cml0ZSAqLworLyogVGhlIHc4MzYyN2VoZi9laGcgaGF2ZSAxMCB2b2x0YWdlIGlucHV0cywgYnV0IHRoZSB3ODM2MjdkaGcgaGFzIDkuIFRoaXMKKyAqIHZhbHVlIGlzIGFsc28gdXNlZCBpbiB3ODM2MjdlaGZfZGV0ZWN0KCkgdG8gZXhwb3J0IGEgZGV2aWNlIG5hbWUgaW4gc3lzZnMKKyAqIChlLmcuIHc4MzYyN2VoZiBvciB3ODM2MjdkaGcpICovCitzdGF0aWMgaW50IHc4MzYyN2VoZl9udW1faW47CiAKICNkZWZpbmUgVzgzNjI3RUhGX0xEX0hXTQkweDBiCiAKQEAgLTY1LDggKzc3LDEwIEBACiAjZGVmaW5lIFNJT19SRUdfRU5BQkxFCQkweDMwCS8qIExvZ2ljYWwgZGV2aWNlIGVuYWJsZSAqLwogI2RlZmluZSBTSU9fUkVHX0FERFIJCTB4NjAJLyogTG9naWNhbCBkZXZpY2UgYWRkcmVzcyAoMiBieXRlcykgKi8KIAotI2RlZmluZSBTSU9fVzgzNjI3RUhGX0lECTB4ODg0MAotI2RlZmluZSBTSU9fSURfTUFTSwkJMHhGRkMwCisjZGVmaW5lIFNJT19XODM2MjdFSEZfSUQJMHg4ODUwCisjZGVmaW5lIFNJT19XODM2MjdFSEdfSUQJMHg4ODYwCisjZGVmaW5lIFNJT19XODM2MjdESEdfSUQJMHhhMDIwCisjZGVmaW5lIFNJT19JRF9NQVNLCQkweEZGRjAKIAogc3RhdGljIGlubGluZSB2b2lkCiBzdXBlcmlvX291dGIoaW50IHJlZywgaW50IHZhbCkKQEAgLTExNSw4ICsxMjksMTIgQEAKIAogI2RlZmluZSBXODM2MjdFSEZfUkVHX0JBTksJCTB4NEUKICNkZWZpbmUgVzgzNjI3RUhGX1JFR19DT05GSUcJCTB4NDAKLSNkZWZpbmUgVzgzNjI3RUhGX1JFR19DSElQX0lECQkweDQ5Ci0jZGVmaW5lIFc4MzYyN0VIRl9SRUdfTUFOX0lECQkweDRGCisKKy8qIE5vdCBjdXJyZW50bHkgdXNlZDoKKyAqIFJFR19NQU5fSUQgaGFzIHRoZSB2YWx1ZSAweDVjYTMgZm9yIGFsbCBzdXBwb3J0ZWQgY2hpcHMuCisgKiBSRUdfQ0hJUF9JRCA9PSAweDg4LzB4YTEvMHhjMSBkZXBlbmRpbmcgb24gY2hpcCBtb2RlbC4KKyAqIFJFR19NQU5fSUQgaXMgYXQgcG9ydCAweDRmCisgKiBSRUdfQ0hJUF9JRCBpcyBhdCBwb3J0IDB4NTggKi8KIAogc3RhdGljIGNvbnN0IHUxNiBXODM2MjdFSEZfUkVHX0ZBTltdID0geyAweDI4LCAweDI5LCAweDJhLCAweDNmLCAweDU1MyB9Owogc3RhdGljIGNvbnN0IHUxNiBXODM2MjdFSEZfUkVHX0ZBTl9NSU5bXSA9IHsgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHg1NWMgfTsKQEAgLTQyOSw3ICs0NDcsNyBAQAogCQl9CiAKIAkJLyogTWVhc3VyZWQgdm9sdGFnZXMgYW5kIGxpbWl0cyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgdzgzNjI3ZWhmX251bV9pbjsgaSsrKSB7CiAJCQlkYXRhLT5pbltpXSA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGNsaWVudCwKIAkJCQkgICAgICBXODM2MjdFSEZfUkVHX0lOKGkpKTsKIAkJCWRhdGEtPmluX21pbltpXSA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGNsaWVudCwKQEAgLTExMjEsNyArMTEzOSw3IEBACiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfc2YzX2FycmF5c1tpXS5kZXZfYXR0cik7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RhX3NmM19hcnJheXNfZmFuNCk7IGkrKykKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9zZjNfYXJyYXlzX2ZhbjRbaV0uZGV2X2F0dHIpOwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHc4MzYyN2VoZl9udW1faW47IGkrKykgewogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX2luX2lucHV0W2ldLmRldl9hdHRyKTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9pbl9hbGFybVtpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfaW5fbWluW2ldLmRldl9hdHRyKTsKQEAgLTExOTYsNyArMTIxNCwxMSBAQAogCWNsaWVudC0+ZmxhZ3MgPSAwOwogCWRldiA9ICZjbGllbnQtPmRldjsKIAotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCAidzgzNjI3ZWhmIiwgSTJDX05BTUVfU0laRSk7CisJaWYgKHc4MzYyN2VoZl9udW1faW4gPT0gOSkKKwkJc3RybGNweShjbGllbnQtPm5hbWUsICJ3ODM2MjdkaGciLCBJMkNfTkFNRV9TSVpFKTsKKwllbHNlCS8qIGp1c3Qgc2F5IGVoZi4gNjI3RUhHIGlzIDYyN0VIRiBpbiBsZWFkLWZyZWUgcGFja2FnaW5nLiAqLworCQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgInc4MzYyN2VoZiIsIEkyQ19OQU1FX1NJWkUpOworCiAJZGF0YS0+dmFsaWQgPSAwOwogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIApAQCAtMTI0Niw3ICsxMjY4LDcgQEAKIAkJCQlnb3RvIGV4aXRfcmVtb3ZlOwogCQl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgdzgzNjI3ZWhmX251bV9pbjsgaSsrKQogCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfaW5faW5wdXRbaV0uZGV2X2F0dHIpKQogCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNkYV9pbl9hbGFybVtpXS5kZXZfYXR0cikpCkBAIC0xMzQwLDcgKzEzNjIsMTcgQEAKIAogCXZhbCA9IChzdXBlcmlvX2luYihTSU9fUkVHX0RFVklEKSA8PCA4KQogCSAgICB8IHN1cGVyaW9faW5iKFNJT19SRUdfREVWSUQgKyAxKTsKLQlpZiAoKHZhbCAmIFNJT19JRF9NQVNLKSAhPSBTSU9fVzgzNjI3RUhGX0lEKSB7CisJc3dpdGNoICh2YWwgJiBTSU9fSURfTUFTSykgeworCWNhc2UgU0lPX1c4MzYyN0RIR19JRDoKKwkJdzgzNjI3ZWhmX251bV9pbiA9IDk7CisJCWJyZWFrOworCWNhc2UgU0lPX1c4MzYyN0VIRl9JRDoKKwljYXNlIFNJT19XODM2MjdFSEdfSUQ6CisJCXc4MzYyN2VoZl9udW1faW4gPSAxMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidzgzNjI3ZWhmOiB1bnN1cHBvcnRlZCBjaGlwIElEOiAweCUwNHhcbiIsCisJCQl2YWwpOwogCQlzdXBlcmlvX2V4aXQoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM2MjdoZi5jIGIvZHJpdmVycy9od21vbi93ODM2MjdoZi5jCmluZGV4IGRmZGMyOWM3Li5kN2UyNDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4MzYyN2hmLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM2MjdoZi5jCkBAIC0yODYsOSArMjg2LDggQEAKIAlyZXR1cm4gKCh1OCkgaSk7CiB9CiAKLS8qIEZvciBlYWNoIHJlZ2lzdGVyZWQgY2hpcCwgd2UgbmVlZCB0byBrZWVwIHNvbWUgZGF0YSBpbiBtZW1vcnkuIFRoYXQKLSAgIGRhdGEgaXMgcG9pbnRlZCB0byBieSB3ODM2MjdoZl9saXN0W05SXS0+ZGF0YS4gVGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMKLSAgIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgYXQgdGhlIHNhbWUgdGltZSB3aGVuIGEgbmV3IGNsaWVudCBpcyBhbGxvY2F0ZWQuICovCisvKiBGb3IgZWFjaCByZWdpc3RlcmVkIGNoaXAsIHdlIG5lZWQgdG8ga2VlcCBzb21lIGRhdGEgaW4gbWVtb3J5LgorICAgVGhlIHN0cnVjdHVyZSBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICovCiBzdHJ1Y3QgdzgzNjI3aGZfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jIGIvZHJpdmVycy9od21vbi93ODM3ODFkLmMKaW5kZXggMTIzMjE3MS4uYTQ3ZGEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3ODFkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3ODFkLmMKQEAgLTIyMSwxNCArMjIxLDggQEAKICAgIGEgYml0IC0gZXhjZXB0IGlmIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgU01CdXMuIEdyb2FuLiBObyBzb2x1dGlvbgogICAgZm9yIHRoaXMgeWV0LiAqLwogCi0vKiBUaGlzIG1vZHVsZSBtYXkgc2VlbSBvdmVybHkgbG9uZyBhbmQgY29tcGxpY2F0ZWQuIEluIGZhY3QsIGl0IGlzIG5vdCBzbwotICAgYmFkLiBRdWl0ZSBhIGxvdCBvZiBib29ra2VlcGluZyBpcyBkb25lLiBBIHJlYWwgZHJpdmVyIGNhbiBvZnRlbiBjdXQKLSAgIHNvbWUgY29ybmVycy4gKi8KLQotLyogRm9yIGVhY2ggcmVnaXN0ZXJlZCBXODM3ODFELCB3ZSBuZWVkIHRvIGtlZXAgc29tZSBkYXRhIGluIG1lbW9yeS4gVGhhdAotICAgZGF0YSBpcyBwb2ludGVkIHRvIGJ5IHc4Mzc4MWRfbGlzdFtOUl0tPmRhdGEuIFRoZSBzdHJ1Y3R1cmUgaXRzZWxmIGlzCi0gICBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGF0IHRoZSBzYW1lIHRpbWUgd2hlbiBhIG5ldyB3ODM3ODFkIGNsaWVudCBpcwotICAgYWxsb2NhdGVkLiAqLworLyogRm9yIGVhY2ggcmVnaXN0ZXJlZCBjaGlwLCB3ZSBuZWVkIHRvIGtlZXAgc29tZSBkYXRhIGluIG1lbW9yeS4KKyAgIFRoZSBzdHJ1Y3R1cmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAqLwogc3RydWN0IHc4Mzc4MWRfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMKaW5kZXggNmZkOGFkNy4uMWUyNzdiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKiBzZXQgdXAgdGhlIGRyaXZlcmZzIGxpbmthZ2UgdG8gb3VyIHBhcmVudCBkZXZpY2UgKi8KKwkvKiBzZXQgdXAgdGhlIHN5c2ZzIGxpbmthZ2UgdG8gb3VyIHBhcmVudCBkZXZpY2UgKi8KIAlhbGkxNTM1X2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKIAogCXNucHJpbnRmKGFsaTE1MzVfYWRhcHRlci5uYW1lLCBJMkNfTkFNRV9TSVpFLCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMKaW5kZXggZTRlMGRmMS4uZTQ3ZmUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMKQEAgLTQ4OSw3ICs0ODksNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKiBzZXQgdXAgdGhlIGRyaXZlcmZzIGxpbmthZ2UgdG8gb3VyIHBhcmVudCBkZXZpY2UgKi8KKwkvKiBzZXQgdXAgdGhlIHN5c2ZzIGxpbmthZ2UgdG8gb3VyIHBhcmVudCBkZXZpY2UgKi8KIAlhbGkxNXgzX2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKIAogCXNucHJpbnRmKGFsaTE1eDNfYWRhcHRlci5uYW1lLCBJMkNfTkFNRV9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKaW5kZXggZmE2MTU1YS4uNzQ5MGRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCkBAIC0zNzQsNyArMzc0LDcgQEAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJTTUJSRVYgPSAweCVYXG4iLCB0ZW1wKTsKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJBTUQ3NTZfc21iYSA9IDB4JVhcbiIsIGFtZDc1Nl9pb3BvcnQpOwogCi0JLyogc2V0IHVwIHRoZSBkcml2ZXJmcyBsaW5rYWdlIHRvIG91ciBwYXJlbnQgZGV2aWNlICovCisJLyogc2V0IHVwIHRoZSBzeXNmcyBsaW5rYWdlIHRvIG91ciBwYXJlbnQgZGV2aWNlICovCiAJYW1kNzU2X3NtYnVzLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCiAJc3ByaW50ZihhbWQ3NTZfc21idXMubmFtZSwgIlNNQnVzICVzIGFkYXB0ZXIgYXQgJTA0eCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCmluZGV4IDViYmEzZmIuLmUxNWY5ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCkBAIC0zNzEsNyArMzcxLDcgQEAKIAlzbWJ1cy0+YWRhcHRlci5hbGdvID0gJnNtYnVzX2FsZ29yaXRobTsKIAlzbWJ1cy0+YWRhcHRlci5hbGdvX2RhdGEgPSBzbWJ1czsKIAotCS8qIHNldCB1cCB0aGUgZHJpdmVyZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLworCS8qIHNldCB1cCB0aGUgc3lzZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLwogCXNtYnVzLT5hZGFwdGVyLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNtYnVzLT5kZXYsIEFNRF9QQ0lfTUlTQywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IDIxZjI2NzEuLjY1NjlhMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC01MjIsNyArNTIyLDcgQEAKIAllbHNlCiAJCWRldl9kYmcoJmRldi0+ZGV2LCAiU01CdXMgdXNpbmcgUENJIEludGVycnVwdFxuIik7CiAKLQkvKiBzZXQgdXAgdGhlIGRyaXZlcmZzIGxpbmthZ2UgdG8gb3VyIHBhcmVudCBkZXZpY2UgKi8KKwkvKiBzZXQgdXAgdGhlIHN5c2ZzIGxpbmthZ2UgdG8gb3VyIHBhcmVudCBkZXZpY2UgKi8KIAlpODAxX2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKIAogCXNucHJpbnRmKGk4MDFfYWRhcHRlci5uYW1lLCBJMkNfTkFNRV9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMKaW5kZXggMjBlZTRmNy4uOTBlMmQ5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jCkBAIC04Myw3ICs4Myw3IEBACiAJICogRXZlcnkgdGltZSB1bml0IGVuYWJsZSBpcyBhc3NlcnRlZCwgR1BPRCBuZWVkcyB0byBiZSBjbGVhcmVkCiAJICogb24gSU9QM1hYIHRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbiBvbiB0aGUgYnVzLgogCSAqLwotI2lmZGVmIENPTkZJR19QTEFUX0lPUAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSU9QMzJYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzWCkKIAlpZiAoaW9wM3h4X2FkYXAtPmlkID09IDApIHsKIAkJZ3Bpb19saW5lX3NldChJT1AzWFhfR1BJT19MSU5FKDcpLCBHUElPX0xPVyk7CiAJCWdwaW9fbGluZV9zZXQoSU9QM1hYX0dQSU9fTElORSg2KSwgR1BJT19MT1cpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCmluZGV4IGQ4ODgyOTMuLjIxYjE4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKQEAgLTQyNSw3ICs0MjUsNyBAQAogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKLQkvKiBzZXQgdXAgdGhlIGRyaXZlcmZzIGxpbmthZ2UgdG8gb3VyIHBhcmVudCBkZXZpY2UgKi8KKwkvKiBzZXQgdXAgdGhlIHN5c2ZzIGxpbmthZ2UgdG8gb3VyIHBhcmVudCBkZXZpY2UgKi8KIAlwaWl4NF9hZGFwdGVyLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKIAlzbnByaW50ZihwaWl4NF9hZGFwdGVyLm5hbWUsIEkyQ19OQU1FX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwppbmRleCBjM2IxNTY3Li4xNGU4M2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pMmMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgogCkBAIC01NCw4ICs1NSwyMSBAQAogCXVuc2lnbmVkIGludAkJaXJxbG9naWR4OwogCXUzMgkJCWlzcmxvZ1szMl07CiAJdTMyCQkJaWNybG9nWzMyXTsKKworCXZvaWQgX19pb21lbQkJKnJlZ19iYXNlOworCisJdW5zaWduZWQgbG9uZwkJaW9iYXNlOworCXVuc2lnbmVkIGxvbmcJCWlvc2l6ZTsKKworCWludAkJCWlycTsKIH07CiAKKyNkZWZpbmUgX0lCTVIoaTJjKQkoKGkyYyktPnJlZ19iYXNlICsgMCkKKyNkZWZpbmUgX0lEQlIoaTJjKQkoKGkyYyktPnJlZ19iYXNlICsgOCkKKyNkZWZpbmUgX0lDUihpMmMpCSgoaTJjKS0+cmVnX2Jhc2UgKyAweDEwKQorI2RlZmluZSBfSVNSKGkyYykJKChpMmMpLT5yZWdfYmFzZSArIDB4MTgpCisjZGVmaW5lIF9JU0FSKGkyYykJKChpMmMpLT5yZWdfYmFzZSArIDB4MjApCisKIC8qCiAgKiBJMkMgU2xhdmUgbW9kZSBhZGRyZXNzCiAgKi8KQEAgLTEzMCw3ICsxNDQsOCBAQAogCiBzdGF0aWMgdm9pZCBpMmNfcHhhX3Nob3dfc3RhdGUoc3RydWN0IHB4YV9pMmMgKmkyYywgaW50IGxubywgY29uc3QgY2hhciAqZm5hbWUpCiB7Ci0JZGV2X2RiZygmaTJjLT5hZGFwLmRldiwgInN0YXRlOiVzOiVkOiBJU1I9JTA4eCwgSUNSPSUwOHgsIElCTVI9JTAyeFxuIiwgZm5hbWUsIGxubywgSVNSLCBJQ1IsIElCTVIpOworCWRldl9kYmcoJmkyYy0+YWRhcC5kZXYsICJzdGF0ZTolczolZDogSVNSPSUwOHgsIElDUj0lMDh4LCBJQk1SPSUwMnhcbiIsIGZuYW1lLCBsbm8sCisJCXJlYWRsKF9JU1IoaTJjKSksIHJlYWRsKF9JQ1IoaTJjKSksIHJlYWRsKF9JQk1SKGkyYykpKTsKIH0KIAogI2RlZmluZSBzaG93X3N0YXRlKGkyYykgaTJjX3B4YV9zaG93X3N0YXRlKGkyYywgX19MSU5FX18sIF9fRlVOQ1RJT05fXykKQEAgLTE1Myw3ICsxNjgsNyBAQAogCXByaW50aygiaTJjOiBtc2dfbnVtOiAlZCBtc2dfaWR4OiAlZCBtc2dfcHRyOiAlZFxuIiwKIAkJaTJjLT5tc2dfbnVtLCBpMmMtPm1zZ19pZHgsIGkyYy0+bXNnX3B0cik7CiAJcHJpbnRrKCJpMmM6IElDUjogJTA4eCBJU1I6ICUwOHhcbiIKLQkgICAgICAgImkyYzogbG9nOiAiLCBJQ1IsIElTUik7CisJICAgICAgICJpMmM6IGxvZzogIiwgcmVhZGwoX0lDUihpMmMpKSwgcmVhZGwoX0lTUihpMmMpKSk7CiAJZm9yIChpID0gMDsgaSA8IGkyYy0+aXJxbG9naWR4OyBpKyspCiAJCXByaW50aygiWyUwOHg6JTA4eF0gIiwgaTJjLT5pc3Jsb2dbaV0sIGkyYy0+aWNybG9nW2ldKTsKIAlwcmludGsoIlxuIik7CkBAIC0xNjEsNyArMTc2LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaTJjX3B4YV9pc19zbGF2ZW1vZGUoc3RydWN0IHB4YV9pMmMgKmkyYykKIHsKLQlyZXR1cm4gIShJQ1IgJiBJQ1JfU0NMRSk7CisJcmV0dXJuICEocmVhZGwoX0lDUihpMmMpKSAmIElDUl9TQ0xFKTsKIH0KIAogc3RhdGljIHZvaWQgaTJjX3B4YV9hYm9ydChzdHJ1Y3QgcHhhX2kyYyAqaTJjKQpAQCAtMTczLDI4ICsxODgsMjkgQEAKIAkJcmV0dXJuOwogCX0KIAotCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSAmJiAoSUJNUiAmIDB4MSkgPT0gMCkgewotCQl1bnNpZ25lZCBsb25nIGljciA9IElDUjsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkgJiYgKHJlYWRsKF9JQk1SKGkyYykpICYgMHgxKSA9PSAwKSB7CisJCXVuc2lnbmVkIGxvbmcgaWNyID0gcmVhZGwoX0lDUihpMmMpKTsKIAogCQlpY3IgJj0gfklDUl9TVEFSVDsKIAkJaWNyIHw9IElDUl9BQ0tOQUsgfCBJQ1JfU1RPUCB8IElDUl9UQjsKIAotCQlJQ1IgPSBpY3I7CisJCXdyaXRlbChpY3IsIF9JQ1IoaTJjKSk7CiAKIAkJc2hvd19zdGF0ZShpMmMpOwogCiAJCW1zbGVlcCgxKTsKIAl9CiAKLQlJQ1IgJj0gfihJQ1JfTUEgfCBJQ1JfU1RBUlQgfCBJQ1JfU1RPUCk7CisJd3JpdGVsKHJlYWRsKF9JQ1IoaTJjKSkgJiB+KElDUl9NQSB8IElDUl9TVEFSVCB8IElDUl9TVE9QKSwKKwkgICAgICAgX0lDUihpMmMpKTsKIH0KIAogc3RhdGljIGludCBpMmNfcHhhX3dhaXRfYnVzX25vdF9idXN5KHN0cnVjdCBweGFfaTJjICppMmMpCiB7CiAJaW50IHRpbWVvdXQgPSBERUZfVElNRU9VVDsKIAotCXdoaWxlICh0aW1lb3V0LS0gJiYgSVNSICYgKElTUl9JQkIgfCBJU1JfVUIpKSB7Ci0JCWlmICgoSVNSICYgSVNSX1NBRCkgIT0gMCkKKwl3aGlsZSAodGltZW91dC0tICYmIHJlYWRsKF9JU1IoaTJjKSkgJiAoSVNSX0lCQiB8IElTUl9VQikpIHsKKwkJaWYgKChyZWFkbChfSVNSKGkyYykpICYgSVNSX1NBRCkgIT0gMCkKIAkJCXRpbWVvdXQgKz0gNDsKIAogCQltc2xlZXAoMik7CkBAIC0yMTQsOSArMjMwLDkgQEAKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKIAkJaWYgKGkyY19kZWJ1ZyA+IDEpCiAJCQlkZXZfZGJnKCZpMmMtPmFkYXAuZGV2LCAiJXM6ICVsZDogSVNSPSUwOHgsIElDUj0lMDh4LCBJQk1SPSUwMnhcbiIsCi0JCQkJX19mdW5jX18sIChsb25nKWppZmZpZXMsIElTUiwgSUNSLCBJQk1SKTsKKwkJCQlfX2Z1bmNfXywgKGxvbmcpamlmZmllcywgcmVhZGwoX0lTUihpMmMpKSwgcmVhZGwoX0lDUihpMmMpKSwgcmVhZGwoX0lCTVIoaTJjKSkpOwogCi0JCWlmIChJU1IgJiBJU1JfU0FEKSB7CisJCWlmIChyZWFkbChfSVNSKGkyYykpICYgSVNSX1NBRCkgewogCQkJaWYgKGkyY19kZWJ1ZyA+IDApCiAJCQkJZGV2X2RiZygmaTJjLT5hZGFwLmRldiwgIiVzOiBTbGF2ZSBkZXRlY3RlZFxuIiwgX19mdW5jX18pOwogCQkJZ290byBvdXQ7CkBAIC0yMjYsNyArMjQyLDcgQEAKIAkJICogcXVpY2sgY2hlY2sgb2YgdGhlIGkyYyBsaW5lcyB0aGVtc2VsdmVzIHRvIGVuc3VyZSB0aGV5J3ZlCiAJCSAqIGdvbmUgaGlnaC4uLgogCQkgKi8KLQkJaWYgKChJU1IgJiAoSVNSX1VCIHwgSVNSX0lCQikpID09IDAgJiYgSUJNUiA9PSAzKSB7CisJCWlmICgocmVhZGwoX0lTUihpMmMpKSAmIChJU1JfVUIgfCBJU1JfSUJCKSkgPT0gMCAmJiByZWFkbChfSUJNUihpMmMpKSA9PSAzKSB7CiAJCQlpZiAoaTJjX2RlYnVnID4gMCkKIAkJCQlkZXZfZGJnKCZpMmMtPmFkYXAuZGV2LCAiJXM6IGRvbmVcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAxOwpAQCAtMjQ2LDcgKzI2Miw3IEBACiAJaWYgKGkyY19kZWJ1ZykKIAkJZGV2X2RiZygmaTJjLT5hZGFwLmRldiwgInNldHRpbmcgdG8gYnVzIG1hc3RlclxuIik7CiAKLQlpZiAoKElTUiAmIChJU1JfVUIgfCBJU1JfSUJCKSkgIT0gMCkgeworCWlmICgocmVhZGwoX0lTUihpMmMpKSAmIChJU1JfVUIgfCBJU1JfSUJCKSkgIT0gMCkgewogCQlkZXZfZGJnKCZpMmMtPmFkYXAuZGV2LCAiJXM6IHVuaXQgaXMgYnVzeVxuIiwgX19mdW5jX18pOwogCQlpZiAoIWkyY19weGFfd2FpdF9tYXN0ZXIoaTJjKSkgewogCQkJZGV2X2RiZygmaTJjLT5hZGFwLmRldiwgIiVzOiBlcnJvcjogdW5pdCBidXN5XG4iLCBfX2Z1bmNfXyk7CkBAIC0yNTQsNyArMjcwLDcgQEAKIAkJfQogCX0KIAotCUlDUiB8PSBJQ1JfU0NMRTsKKwl3cml0ZWwocmVhZGwoX0lDUihpMmMpKSB8IElDUl9TQ0xFLCBfSUNSKGkyYykpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzAsMTEgKzI4NiwxMSBAQAogCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewogCQlpZiAoaTJjX2RlYnVnID4gMSkKIAkJCWRldl9kYmcoJmkyYy0+YWRhcC5kZXYsICIlczogJWxkOiBJU1I9JTA4eCwgSUNSPSUwOHgsIElCTVI9JTAyeFxuIiwKLQkJCQlfX2Z1bmNfXywgKGxvbmcpamlmZmllcywgSVNSLCBJQ1IsIElCTVIpOworCQkJCV9fZnVuY19fLCAobG9uZylqaWZmaWVzLCByZWFkbChfSVNSKGkyYykpLCByZWFkbChfSUNSKGkyYykpLCByZWFkbChfSUJNUihpMmMpKSk7CiAKLQkJaWYgKChJU1IgJiAoSVNSX1VCfElTUl9JQkIpKSA9PSAwIHx8Ci0JCSAgICAoSVNSICYgSVNSX1NBRCkgIT0gMCB8fAotCQkgICAgKElDUiAmIElDUl9TQ0xFKSA9PSAwKSB7CisJCWlmICgocmVhZGwoX0lTUihpMmMpKSAmIChJU1JfVUJ8SVNSX0lCQikpID09IDAgfHwKKwkJICAgIChyZWFkbChfSVNSKGkyYykpICYgSVNSX1NBRCkgIT0gMCB8fAorCQkgICAgKHJlYWRsKF9JQ1IoaTJjKSkgJiBJQ1JfU0NMRSkgPT0gMCkgewogCQkJaWYgKGkyY19kZWJ1ZyA+IDEpCiAJCQkJZGV2X2RiZygmaTJjLT5hZGFwLmRldiwgIiVzOiBkb25lXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gMTsKQEAgLTMwMiw5ICszMTgsOSBAQAogCQkvKiB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzdG9wIGNvbmRpdGlvbiB0byBlbmQgKi8KIAogCQkvKiBpZiB3ZSB3aGVyZSBpbiBzdG9wLCB0aGVuIGNsZWFyLi4uICovCi0JCWlmIChJQ1IgJiBJQ1JfU1RPUCkgeworCQlpZiAocmVhZGwoX0lDUihpMmMpKSAmIElDUl9TVE9QKSB7CiAJCQl1ZGVsYXkoMTAwKTsKLQkJCUlDUiAmPSB+SUNSX1NUT1A7CisJCQl3cml0ZWwocmVhZGwoX0lDUihpMmMpKSAmIH5JQ1JfU1RPUCwgX0lDUihpMmMpKTsKIAkJfQogCiAJCWlmICghaTJjX3B4YV93YWl0X3NsYXZlKGkyYykpIHsKQEAgLTMxNCwxMiArMzMwLDEyIEBACiAJCX0KIAl9CiAKLQlJQ1IgJj0gfihJQ1JfU1RPUHxJQ1JfQUNLTkFLfElDUl9NQSk7Ci0JSUNSICY9IH5JQ1JfU0NMRTsKKwl3cml0ZWwocmVhZGwoX0lDUihpMmMpKSAmIH4oSUNSX1NUT1B8SUNSX0FDS05BS3xJQ1JfTUEpLCBfSUNSKGkyYykpOworCXdyaXRlbChyZWFkbChfSUNSKGkyYykpICYgfklDUl9TQ0xFLCBfSUNSKGkyYykpOwogCiAJaWYgKGkyY19kZWJ1ZykgewotCQlkZXZfZGJnKCZpMmMtPmFkYXAuZGV2LCAiSUNSIG5vdyAlMDh4LCBJU1IgJTA4eFxuIiwgSUNSLCBJU1IpOwotCQlkZWNvZGVfSUNSKElDUik7CisJCWRldl9kYmcoJmkyYy0+YWRhcC5kZXYsICJJQ1Igbm93ICUwOHgsIElTUiAlMDh4XG4iLCByZWFkbChfSUNSKGkyYykpLCByZWFkbChfSVNSKGkyYykpKTsKKwkJZGVjb2RlX0lDUihyZWFkbChfSUNSKGkyYykpKTsKIAl9CiB9CiAjZWxzZQpAQCAtMzM0LDI0ICszNTAsMjQgQEAKIAlpMmNfcHhhX2Fib3J0KGkyYyk7CiAKIAkvKiByZXNldCBhY2NvcmRpbmcgdG8gOS44ICovCi0JSUNSID0gSUNSX1VSOwotCUlTUiA9IEkyQ19JU1JfSU5JVDsKLQlJQ1IgJj0gfklDUl9VUjsKKwl3cml0ZWwoSUNSX1VSLCBfSUNSKGkyYykpOworCXdyaXRlbChJMkNfSVNSX0lOSVQsIF9JU1IoaTJjKSk7CisJd3JpdGVsKHJlYWRsKF9JQ1IoaTJjKSkgJiB+SUNSX1VSLCBfSUNSKGkyYykpOwogCi0JSVNBUiA9IGkyYy0+c2xhdmVfYWRkcjsKKwl3cml0ZWwoaTJjLT5zbGF2ZV9hZGRyLCBfSVNBUihpMmMpKTsKIAogCS8qIHNldCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcyAqLwotCUlDUiA9IEkyQ19JQ1JfSU5JVDsKKwl3cml0ZWwoSTJDX0lDUl9JTklULCBfSUNSKGkyYykpOwogCiAjaWZkZWYgQ09ORklHX0kyQ19QWEFfU0xBVkUKIAlkZXZfaW5mbygmaTJjLT5hZGFwLmRldiwgIkVuYWJsaW5nIHNsYXZlIG1vZGVcbiIpOwotCUlDUiB8PSBJQ1JfU0FESUUgfCBJQ1JfQUxESUUgfCBJQ1JfU1NESUU7CisJd3JpdGVsKHJlYWRsKF9JQ1IoaTJjKSkgfCBJQ1JfU0FESUUgfCBJQ1JfQUxESUUgfCBJQ1JfU1NESUUsIF9JQ1IoaTJjKSk7CiAjZW5kaWYKIAogCWkyY19weGFfc2V0X3NsYXZlKGkyYywgMCk7CiAKIAkvKiBlbmFibGUgdW5pdCAqLwotCUlDUiB8PSBJQ1JfSVVFOworCXdyaXRlbChyZWFkbChfSUNSKGkyYykpIHwgSUNSX0lVRSwgX0lDUihpMmMpKTsKIAl1ZGVsYXkoMTAwKTsKIH0KIApAQCAtMzcxLDE5ICszODcsMTkgQEAKIAkJaWYgKGkyYy0+c2xhdmUgIT0gTlVMTCkKIAkJCXJldCA9IGkyYy0+c2xhdmUtPnJlYWQoaTJjLT5zbGF2ZS0+ZGF0YSk7CiAKLQkJSURCUiA9IHJldDsKLQkJSUNSIHw9IElDUl9UQjsgICAvKiBhbGxvdyBuZXh0IGJ5dGUgKi8KKwkJd3JpdGVsKHJldCwgX0lEQlIoaTJjKSk7CisJCXdyaXRlbChyZWFkbChfSUNSKGkyYykpIHwgSUNSX1RCLCBfSUNSKGkyYykpOyAgIC8qIGFsbG93IG5leHQgYnl0ZSAqLwogCX0KIH0KIAogc3RhdGljIHZvaWQgaTJjX3B4YV9zbGF2ZV9yeGZ1bGwoc3RydWN0IHB4YV9pMmMgKmkyYywgdTMyIGlzcikKIHsKLQl1bnNpZ25lZCBpbnQgYnl0ZSA9IElEQlI7CisJdW5zaWduZWQgaW50IGJ5dGUgPSByZWFkbChfSURCUihpMmMpKTsKIAogCWlmIChpMmMtPnNsYXZlICE9IE5VTEwpCiAJCWkyYy0+c2xhdmUtPndyaXRlKGkyYy0+c2xhdmUtPmRhdGEsIGJ5dGUpOwogCi0JSUNSIHw9IElDUl9UQjsKKwl3cml0ZWwocmVhZGwoX0lDUihpMmMpKSB8IElDUl9UQiwgX0lDUihpMmMpKTsKIH0KIAogc3RhdGljIHZvaWQgaTJjX3B4YV9zbGF2ZV9zdGFydChzdHJ1Y3QgcHhhX2kyYyAqaTJjLCB1MzIgaXNyKQpAQCAtNDAzLDEzICs0MTksMTMgQEAKIAkgKiBzdGFydCBjb25kaXRpb24uLi4gaWYgdGhpcyBoYXBwZW5zLCB3ZSdkIGJldHRlciBiYWNrIG9mZgogCSAqIGFuZCBzdG9wIGhvbGRpbmcgdGhlIHBvb3IgdGhpbmcgdXAKIAkgKi8KLQlJQ1IgJj0gfihJQ1JfU1RBUlR8SUNSX1NUT1ApOwotCUlDUiB8PSBJQ1JfVEI7CisJd3JpdGVsKHJlYWRsKF9JQ1IoaTJjKSkgJiB+KElDUl9TVEFSVHxJQ1JfU1RPUCksIF9JQ1IoaTJjKSk7CisJd3JpdGVsKHJlYWRsKF9JQ1IoaTJjKSkgfCBJQ1JfVEIsIF9JQ1IoaTJjKSk7CiAKIAl0aW1lb3V0ID0gMHgxMDAwMDsKIAogCXdoaWxlICgxKSB7Ci0JCWlmICgoSUJNUiAmIDIpID09IDIpCisJCWlmICgocmVhZGwoX0lCTVIoaTJjKSkgJiAyKSA9PSAyKQogCQkJYnJlYWs7CiAKIAkJdGltZW91dC0tOwpAQCAtNDIwLDcgKzQzNiw3IEBACiAJCX0KIAl9CiAKLQlJQ1IgJj0gfklDUl9TQ0xFOworCXdyaXRlbChyZWFkbChfSUNSKGkyYykpICYgfklDUl9TQ0xFLCBfSUNSKGkyYykpOwogfQogCiBzdGF0aWMgdm9pZCBpMmNfcHhhX3NsYXZlX3N0b3Aoc3RydWN0IHB4YV9pMmMgKmkyYykKQEAgLTQ0NywxNCArNDYzLDE0IEBACiAJaWYgKGlzciAmIElTUl9CRUQpIHsKIAkJLyogd2hhdCBzaG91bGQgd2UgZG8gaGVyZT8gKi8KIAl9IGVsc2UgewotCQlJREJSID0gMDsKLQkJSUNSIHw9IElDUl9UQjsKKwkJd3JpdGVsKDAsIF9JREJSKGkyYykpOworCQl3cml0ZWwocmVhZGwoX0lDUihpMmMpKSB8IElDUl9UQiwgX0lDUihpMmMpKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGkyY19weGFfc2xhdmVfcnhmdWxsKHN0cnVjdCBweGFfaTJjICppMmMsIHUzMiBpc3IpCiB7Ci0JSUNSIHw9IElDUl9UQiB8IElDUl9BQ0tOQUs7CisJd3JpdGVsKHJlYWRsKF9JQ1IoaTJjKSkgfCBJQ1JfVEIgfCBJQ1JfQUNLTkFLLCBfSUNSKGkyYykpOwogfQogCiBzdGF0aWMgdm9pZCBpMmNfcHhhX3NsYXZlX3N0YXJ0KHN0cnVjdCBweGFfaTJjICppMmMsIHUzMiBpc3IpCkBAIC00NjYsMTMgKzQ4MiwxMyBAQAogCSAqIHN0YXJ0IGNvbmRpdGlvbi4uLiBpZiB0aGlzIGhhcHBlbnMsIHdlJ2QgYmV0dGVyIGJhY2sgb2ZmCiAJICogYW5kIHN0b3AgaG9sZGluZyB0aGUgcG9vciB0aGluZyB1cAogCSAqLwotCUlDUiAmPSB+KElDUl9TVEFSVHxJQ1JfU1RPUCk7Ci0JSUNSIHw9IElDUl9UQiB8IElDUl9BQ0tOQUs7CisJd3JpdGVsKHJlYWRsKF9JQ1IoaTJjKSkgJiB+KElDUl9TVEFSVHxJQ1JfU1RPUCksIF9JQ1IoaTJjKSk7CisJd3JpdGVsKHJlYWRsKF9JQ1IoaTJjKSkgfCBJQ1JfVEIgfCBJQ1JfQUNLTkFLLCBfSUNSKGkyYykpOwogCiAJdGltZW91dCA9IDB4MTAwMDA7CiAKIAl3aGlsZSAoMSkgewotCQlpZiAoKElCTVIgJiAyKSA9PSAyKQorCQlpZiAoKHJlYWRsKF9JQk1SKGkyYykpICYgMikgPT0gMikKIAkJCWJyZWFrOwogCiAJCXRpbWVvdXQtLTsKQEAgLTQ4Myw3ICs0OTksNyBAQAogCQl9CiAJfQogCi0JSUNSICY9IH5JQ1JfU0NMRTsKKwl3cml0ZWwocmVhZGwoX0lDUihpMmMpKSAmIH5JQ1JfU0NMRSwgX0lDUihpMmMpKTsKIH0KIAogc3RhdGljIHZvaWQgaTJjX3B4YV9zbGF2ZV9zdG9wKHN0cnVjdCBweGFfaTJjICppMmMpCkBAIC01MTQsMTMgKzUzMCwxMyBAQAogCS8qCiAJICogU3RlcCAxOiB0YXJnZXQgc2xhdmUgYWRkcmVzcyBpbnRvIElEQlIKIAkgKi8KLQlJREJSID0gaTJjX3B4YV9hZGRyX2J5dGUoaTJjLT5tc2cpOworCXdyaXRlbChpMmNfcHhhX2FkZHJfYnl0ZShpMmMtPm1zZyksIF9JREJSKGkyYykpOwogCiAJLyoKIAkgKiBTdGVwIDI6IGluaXRpYXRlIHRoZSB3cml0ZS4KIAkgKi8KLQlpY3IgPSBJQ1IgJiB+KElDUl9TVE9QIHwgSUNSX0FMRElFKTsKLQlJQ1IgPSBpY3IgfCBJQ1JfU1RBUlQgfCBJQ1JfVEI7CisJaWNyID0gcmVhZGwoX0lDUihpMmMpKSAmIH4oSUNSX1NUT1AgfCBJQ1JfQUxESUUpOworCXdyaXRlbChpY3IgfCBJQ1JfU1RBUlQgfCBJQ1JfVEIsIF9JQ1IoaTJjKSk7CiB9CiAKIC8qCkBAIC01OTQsNyArNjEwLDcgQEAKIAogc3RhdGljIHZvaWQgaTJjX3B4YV9pcnFfdHhlbXB0eShzdHJ1Y3QgcHhhX2kyYyAqaTJjLCB1MzIgaXNyKQogewotCXUzMiBpY3IgPSBJQ1IgJiB+KElDUl9TVEFSVHxJQ1JfU1RPUHxJQ1JfQUNLTkFLfElDUl9UQik7CisJdTMyIGljciA9IHJlYWRsKF9JQ1IoaTJjKSkgJiB+KElDUl9TVEFSVHxJQ1JfU1RPUHxJQ1JfQUNLTkFLfElDUl9UQik7CiAKICBhZ2FpbjoKIAkvKgpAQCAtNjQ1LDcgKzY2MSw3IEBACiAJCS8qCiAJCSAqIFdyaXRlIG1vZGUuICBXcml0ZSB0aGUgbmV4dCBkYXRhIGJ5dGUuCiAJCSAqLwotCQlJREJSID0gaTJjLT5tc2ctPmJ1ZltpMmMtPm1zZ19wdHIrK107CisJCXdyaXRlbChpMmMtPm1zZy0+YnVmW2kyYy0+bXNnX3B0cisrXSwgX0lEQlIoaTJjKSk7CiAKIAkJaWNyIHw9IElDUl9BTERJRSB8IElDUl9UQjsKIApAQCAtNjc1LDcgKzY5MSw3IEBACiAJCS8qCiAJCSAqIFdyaXRlIHRoZSBuZXh0IGFkZHJlc3MuCiAJCSAqLwotCQlJREJSID0gaTJjX3B4YV9hZGRyX2J5dGUoaTJjLT5tc2cpOworCQl3cml0ZWwoaTJjX3B4YV9hZGRyX2J5dGUoaTJjLT5tc2cpLCBfSURCUihpMmMpKTsKIAogCQkvKgogCQkgKiBBbmQgdHJpZ2dlciBhIHJlcGVhdGVkIHN0YXJ0LCBhbmQgc2VuZCB0aGUgYnl0ZS4KQEAgLTY5NiwxOCArNzEyLDE4IEBACiAKIAlpMmMtPmljcmxvZ1tpMmMtPmlycWxvZ2lkeC0xXSA9IGljcjsKIAotCUlDUiA9IGljcjsKKwl3cml0ZWwoaWNyLCBfSUNSKGkyYykpOwogCXNob3dfc3RhdGUoaTJjKTsKIH0KIAogc3RhdGljIHZvaWQgaTJjX3B4YV9pcnFfcnhmdWxsKHN0cnVjdCBweGFfaTJjICppMmMsIHUzMiBpc3IpCiB7Ci0JdTMyIGljciA9IElDUiAmIH4oSUNSX1NUQVJUfElDUl9TVE9QfElDUl9BQ0tOQUt8SUNSX1RCKTsKKwl1MzIgaWNyID0gcmVhZGwoX0lDUihpMmMpKSAmIH4oSUNSX1NUQVJUfElDUl9TVE9QfElDUl9BQ0tOQUt8SUNSX1RCKTsKIAogCS8qCiAJICogUmVhZCB0aGUgYnl0ZS4KIAkgKi8KLQlpMmMtPm1zZy0+YnVmW2kyYy0+bXNnX3B0cisrXSA9IElEQlI7CisJaTJjLT5tc2ctPmJ1ZltpMmMtPm1zZ19wdHIrK10gPSByZWFkbChfSURCUihpMmMpKTsKIAogCWlmIChpMmMtPm1zZ19wdHIgPCBpMmMtPm1zZy0+bGVuKSB7CiAJCS8qCkBAIC03MjQsMTcgKzc0MCwxNyBAQAogCiAJaTJjLT5pY3Jsb2dbaTJjLT5pcnFsb2dpZHgtMV0gPSBpY3I7CiAKLQlJQ1IgPSBpY3I7CisJd3JpdGVsKGljciwgX0lDUihpMmMpKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGkyY19weGFfaGFuZGxlcihpbnQgdGhpc19pcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgcHhhX2kyYyAqaTJjID0gZGV2X2lkOwotCXUzMiBpc3IgPSBJU1I7CisJdTMyIGlzciA9IHJlYWRsKF9JU1IoaTJjKSk7CiAKIAlpZiAoaTJjX2RlYnVnID4gMiAmJiAwKSB7CiAJCWRldl9kYmcoJmkyYy0+YWRhcC5kZXYsICIlczogSVNSPSUwOHgsIElDUj0lMDh4LCBJQk1SPSUwMnhcbiIsCi0JCQlfX2Z1bmNfXywgaXNyLCBJQ1IsIElCTVIpOworCQkJX19mdW5jX18sIGlzciwgcmVhZGwoX0lDUihpMmMpKSwgcmVhZGwoX0lCTVIoaTJjKSkpOwogCQlkZWNvZGVfSVNSKGlzcik7CiAJfQogCkBAIC03NDYsNyArNzYyLDcgQEAKIAkvKgogCSAqIEFsd2F5cyBjbGVhciBhbGwgcGVuZGluZyBJUlFzLgogCSAqLwotCUlTUiA9IGlzciAmIChJU1JfU1NEfElTUl9BTER8SVNSX0lURXxJU1JfSVJGfElTUl9TQUR8SVNSX0JFRCk7CisJd3JpdGVsKGlzciAmIChJU1JfU1NEfElTUl9BTER8SVNSX0lURXxJU1JfSVJGfElTUl9TQUR8SVNSX0JFRCksIF9JU1IoaTJjKSk7CiAKIAlpZiAoaXNyICYgSVNSX1NBRCkKIAkJaTJjX3B4YV9zbGF2ZV9zdGFydChpMmMsIGlzcik7CkBAIC03NzksNyArNzk1LDcgQEAKIAkvKiBJZiB0aGUgSTJDIGNvbnRyb2xsZXIgaXMgZGlzYWJsZWQgd2UgbmVlZCB0byByZXNldCBpdCAocHJvYmFibHkgZHVlCiAgCSAgIHRvIGEgc3VzcGVuZC9yZXN1bWUgZGVzdHJveWluZyBzdGF0ZSkuIFdlIGRvIHRoaXMgaGVyZSBhcyB3ZSBjYW4gdGhlbgogIAkgICBhdm9pZCB3b3JyeWluZyBhYm91dCByZXN1bWluZyB0aGUgY29udHJvbGxlciBiZWZvcmUgaXRzIHVzZXJzLiAqLwotCWlmICghKElDUiAmIElDUl9JVUUpKQorCWlmICghKHJlYWRsKF9JQ1IoaTJjKSkgJiBJQ1JfSVVFKSkKIAkJaTJjX3B4YV9yZXNldChpMmMpOwogCiAJZm9yIChpID0gYWRhcC0+cmV0cmllczsgaSA+PSAwOyBpLS0pIHsKQEAgLTgxMCwyOCArODI2LDUzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcHhhX2kyYyBpMmNfcHhhID0gewogCS5sb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELAotCS53YWl0CT0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoaTJjX3B4YS53YWl0KSwKIAkuYWRhcAk9IHsKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkuYWxnbwkJPSAmaTJjX3B4YV9hbGdvcml0aG0sCi0JCS5uYW1lCQk9ICJweGEyeHgtaTJjIiwKKwkJLm5hbWUJCT0gInB4YTJ4eC1pMmMuMCIsCiAJCS5yZXRyaWVzCT0gNSwKIAl9LAogfTsKIAorI2RlZmluZSByZXNfbGVuKHIpCQkoKHIpLT5lbmQgLSAociktPnN0YXJ0ICsgMSkKIHN0YXRpYyBpbnQgaTJjX3B4YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHB4YV9pMmMgKmkyYyA9ICZpMmNfcHhhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogI2lmZGVmIENPTkZJR19JMkNfUFhBX1NMQVZFCiAJc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAjZW5kaWYKIAlpbnQgcmV0OworCWludCBpcnE7CiAKLSNpZmRlZiBDT05GSUdfUFhBMjd4Ci0JcHhhX2dwaW9fbW9kZShHUElPMTE3X0kyQ1NDTF9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPMTE4X0kyQ1NEQV9NRCk7Ci0JdWRlbGF5KDEwMCk7Ci0jZW5kaWYKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCWlmIChyZXMgPT0gTlVMTCB8fCBpcnEgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19sZW4ocmVzKSwgcmVzLT5uYW1lKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpMmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHhhX2kyYyksIEdGUF9LRVJORUwpOworCWlmICghaTJjKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZW1hbGxvYzsKKwl9CisKKwltZW1jcHkoaTJjLCAmaTJjX3B4YSwgc2l6ZW9mKHN0cnVjdCBweGFfaTJjKSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaTJjLT53YWl0KTsKKwlpMmMtPmFkYXAubmFtZVtzdHJsZW4oaTJjLT5hZGFwLm5hbWUpIC0gMV0gPSAnMCcgKyBkZXYtPmlkICUgMTA7CisKKwlpMmMtPnJlZ19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNfbGVuKHJlcykpOworCWlmICghaTJjLT5yZWdfYmFzZSkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVyZW1hcDsKKwl9CisKKwlpMmMtPmlvYmFzZSA9IHJlcy0+c3RhcnQ7CisJaTJjLT5pb3NpemUgPSByZXNfbGVuKHJlcyk7CisKKwlpMmMtPmlycSA9IGlycTsKIAogCWkyYy0+c2xhdmVfYWRkciA9IEkyQ19QWEFfU0xBVkVfQUREUjsKIApAQCAtODQyLDExICs4ODMsMjggQEAKIAl9CiAjZW5kaWYKIAotCXB4YV9zZXRfY2tlbihDS0VOMTRfSTJDLCAxKTsKLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfSTJDLCBpMmNfcHhhX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsCi0JCQkgICJweGEyeHgtaTJjIiwgaTJjKTsKKwlzd2l0Y2ggKGRldi0+aWQpIHsKKwljYXNlIDA6CisjaWZkZWYgQ09ORklHX1BYQTI3eAorCQlweGFfZ3Bpb19tb2RlKEdQSU8xMTdfSTJDU0NMX01EKTsKKwkJcHhhX2dwaW9fbW9kZShHUElPMTE4X0kyQ1NEQV9NRCk7CisjZW5kaWYKKwkJcHhhX3NldF9ja2VuKENLRU4xNF9JMkMsIDEpOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisJY2FzZSAxOgorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlQQ0ZSIHw9IFBDRlJfUEkyQ0VOOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXB4YV9zZXRfY2tlbihDS0VOMTVfUFdSSTJDLCAxKTsKKyNlbmRpZgorCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgaTJjX3B4YV9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELAorCQkJICBpMmMtPmFkYXAubmFtZSwgaTJjKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJZ290byBlcmVxaXJxOworCiAKIAlpMmNfcHhhX3Jlc2V0KGkyYyk7CiAKQEAgLTg1Niw3ICs5MTQsNyBAQAogCXJldCA9IGkyY19hZGRfYWRhcHRlcigmaTJjLT5hZGFwKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJJMkM6IEZhaWxlZCB0byBhZGQgYnVzXG4iKTsKLQkJZ290byBlcnJfaXJxOworCQlnb3RvIGVhZGFwdDsKIAl9CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CkBAIC04NzAsOSArOTI4LDI1IEBACiAjZW5kaWYKIAlyZXR1cm4gMDsKIAotIGVycl9pcnE6Ci0JZnJlZV9pcnEoSVJRX0kyQywgaTJjKTsKLSBvdXQ6CitlYWRhcHQ6CisJZnJlZV9pcnEoaXJxLCBpMmMpOworZXJlcWlycToKKwlzd2l0Y2ggKGRldi0+aWQpIHsKKwljYXNlIDA6CisJCXB4YV9zZXRfY2tlbihDS0VOMTRfSTJDLCAwKTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1BYQTI3eAorCWNhc2UgMToKKwkJcHhhX3NldF9ja2VuKENLRU4xNV9QV1JJMkMsIDApOworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlQQ0ZSICY9IH5QQ0ZSX1BJMkNFTjsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworI2VuZGlmCisJfQorZXJlbWFwOgorCWtmcmVlKGkyYyk7CitlbWFsbG9jOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNfbGVuKHJlcykpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTg4Myw4ICs5NTcsMjEgQEAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFkYXApOwotCWZyZWVfaXJxKElSUV9JMkMsIGkyYyk7Ci0JcHhhX3NldF9ja2VuKENLRU4xNF9JMkMsIDApOworCWZyZWVfaXJxKGkyYy0+aXJxLCBpMmMpOworCXN3aXRjaCAoZGV2LT5pZCkgeworCWNhc2UgMDoKKwkJcHhhX3NldF9ja2VuKENLRU4xNF9JMkMsIDApOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisJY2FzZSAxOgorCQlweGFfc2V0X2NrZW4oQ0tFTjE1X1BXUkkyQywgMCk7CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCVBDRlIgJj0gflBDRlJfUEkyQ0VOOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisjZW5kaWYKKwl9CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyYy0+aW9iYXNlLCBpMmMtPmlvc2l6ZSk7CisJa2ZyZWUoaTJjKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczU1OTUuYwppbmRleCBkMzMzYmFiLi5hNmZlZWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczU1OTUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczU1OTUuYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIHNldCB1cCB0aGUgZHJpdmVyZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLworCS8qIHNldCB1cCB0aGUgc3lzZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLwogCXNpczU1OTVfYWRhcHRlci5kZXYucGFyZW50ID0gJmRldi0+ZGV2OwogCiAJc3ByaW50ZihzaXM1NTk1X2FkYXB0ZXIubmFtZSwgIlNNQnVzIFNJUzU1OTUgYWRhcHRlciBhdCAlMDR4IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jCmluZGV4IDE3MmJhY2YuLjVmZDczNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIHNldCB1cCB0aGUgZHJpdmVyZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLworCS8qIHNldCB1cCB0aGUgc3lzZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLwogCXNpczYzMF9hZGFwdGVyLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKIAlzcHJpbnRmKHNpczYzMF9hZGFwdGVyLm5hbWUsICJTTUJ1cyBTSVM2MzAgYWRhcHRlciBhdCAlMDR4IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCmluZGV4IDczZGFlNDQuLjQxNTdiMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIHNldCB1cCB0aGUgZHJpdmVyZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLworCS8qIHNldCB1cCB0aGUgc3lzZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLwogCXNpczk2eF9hZGFwdGVyLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKIAlzbnByaW50ZihzaXM5NnhfYWRhcHRlci5uYW1lLCBJMkNfTkFNRV9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKaW5kZXggYmJjYzYyMS4uODE1MjA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAlvdXRiKGluYihJMkNfRElSKSAmIH4oSTJDX1NEQSB8IEkyQ19TQ0wpLCBJMkNfRElSKTsKIAlvdXRiKGluYihJMkNfT1VUKSAmIH4oSTJDX1NEQSB8IEkyQ19TQ0wpLCBJMkNfT1VUKTsKIAotCS8qIHNldCB1cCB0aGUgZHJpdmVyZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLworCS8qIHNldCB1cCB0aGUgc3lzZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLwogCXZ0NTg2Yl9hZGFwdGVyLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKIAlyZXMgPSBpMmNfYml0X2FkZF9idXMoJnZ0NTg2Yl9hZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IGVjMDMzNDEuLjQ5MjM0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtMzgzLDYgKzM4Myw5IEBACiBjb25maWcgQkxLX0RFVl9HRU5FUklDCiAJdHJpc3RhdGUgIkdlbmVyaWMgUENJIElERSBDaGlwc2V0IFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCTEtfREVWX0lERVBDSQorICAgICAgICBoZWxwCisgICAgICAgICAgVGhpcyBvcHRpb24gcHJvdmlkZXMgZ2VuZXJpYyBzdXBwb3J0IGZvciB2YXJpb3VzIFBDSSBJREUgQ2hpcHNldHMKKyAgICAgICAgICB3aGljaCBvdGhlcndpc2UgbWlnaHQgbm90IGJlIHN1cHBvcnRlZC4KIAogY29uZmlnIEJMS19ERVZfT1BUSTYyMQogCXRyaXN0YXRlICJPUFRpIDgyQzYyMSBjaGlwc2V0IGVuaGFuY2VkIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCkBAIC03OTcsNiArODAwLDE0IEBACiAJICB0byB0cmFuc2ZlciBkYXRhIHRvIGFuZCBmcm9tIG1lbW9yeS4gIFNheWluZyBZIGlzIHNhZmUgYW5kIGltcHJvdmVzCiAJICBwZXJmb3JtYW5jZS4KIAorY29uZmlnIEJMS19ERVZfSURFX0NFTExFQgorCWJvb2wgIlRvc2hpYmEncyBDZWxsIFJlZmVyZW5jZSBTZXQgSURFIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQUENfQ0VMTEVCCisJaGVscAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIElERSBjb250cm9sbGVyIG9uCisJICBUb3NoaWJhIENlbGwgUmVmZXJlbmNlIEJvYXJkLgorCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIEJMS19ERVZfSURFX1NXQVJNCiAJdHJpc3RhdGUgIklERSBmb3IgU2lieXRlIGV2YWx1YXRpb24gYm9hcmRzIgogCWRlcGVuZHMgb24gU0lCWVRFX1NCMXh4eF9TT0MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKaW5kZXggZDlmMDI5ZS4uMjhmZWVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKQEAgLTM3LDYgKzM3LDcgQEAKICMgYnVpbHQtaW4gb25seSBkcml2ZXJzIGZyb20gcHBjLwogaWRlLWNvcmUtJChDT05GSUdfQkxLX0RFVl9NUEM4eHhfSURFKQkrPSBwcGMvbXBjOHh4Lm8KIGlkZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfSURFX1BNQUMpCSs9IHBwYy9wbWFjLm8KK2lkZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfSURFX0NFTExFQikJKz0gcHBjL3NjY19wYXRhLm8KIAogIyBidWlsdC1pbiBvbmx5IGRyaXZlcnMgZnJvbSBoODMwMC8KIGlkZS1jb3JlLSQoQ09ORklHX0g4MzAwKQkJKz0gaDgzMDAvaWRlLWg4MzAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FybS9pY3NpZGUuYyBiL2RyaXZlcnMvaWRlL2FybS9pY3NpZGUuYwppbmRleCA4YTFjMjdmLi40MGU1YzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vaWNzaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jCkBAIC0zMDcsMjYgKzMwNywyNCBAQAogCXJldHVybiBvbjsKIH0KIAotc3RhdGljIGludCBpY3NpZGVfZG1hX2hvc3Rfb2ZmKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGljc2lkZV9kbWFfaG9zdF9vZmYoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGljc2lkZV9kbWFfb2ZmX3F1aWV0bHkoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWNzaWRlX2RtYV9vZmZfcXVpZXRseShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJZHJpdmUtPnVzaW5nX2RtYSA9IDA7Ci0JcmV0dXJuIGljc2lkZV9kbWFfaG9zdF9vZmYoZHJpdmUpOwogfQogCi1zdGF0aWMgaW50IGljc2lkZV9kbWFfaG9zdF9vbihpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBpY3NpZGVfZG1hX2hvc3Rfb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGljc2lkZV9kbWFfb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWRyaXZlLT51c2luZ19kbWEgPSAxOwotCXJldHVybiBpY3NpZGVfZG1hX2hvc3Rfb24oZHJpdmUpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaWNzaWRlX2RtYV9jaGVjayhpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC0zNjUsMTAgKzM2Myw3IEBACiBvdXQ6CiAJb24gPSBpY3NpZGVfc2V0X3NwZWVkKGRyaXZlLCB4ZmVyX21vZGUpOwogCi0JaWYgKG9uKQotCQlyZXR1cm4gaWNzaWRlX2RtYV9vbihkcml2ZSk7Ci0JZWxzZQotCQlyZXR1cm4gaWNzaWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJcmV0dXJuIG9uID8gMCA6IC0xOwogfQogCiBzdGF0aWMgaW50IGljc2lkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTQ5Nyw5ICs0OTIsOSBAQAogCWh3aWYtPmF1dG9kbWEJCT0gYXV0b2RtYTsKIAogCWh3aWYtPmlkZV9kbWFfY2hlY2sJPSBpY3NpZGVfZG1hX2NoZWNrOwotCWh3aWYtPmlkZV9kbWFfaG9zdF9vZmYJPSBpY3NpZGVfZG1hX2hvc3Rfb2ZmOwotCWh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkgPSBpY3NpZGVfZG1hX29mZl9xdWlldGx5OwotCWh3aWYtPmlkZV9kbWFfaG9zdF9vbgk9IGljc2lkZV9kbWFfaG9zdF9vbjsKKwlod2lmLT5kbWFfaG9zdF9vZmYJPSBpY3NpZGVfZG1hX2hvc3Rfb2ZmOworCWh3aWYtPmRtYV9vZmZfcXVpZXRseQk9IGljc2lkZV9kbWFfb2ZmX3F1aWV0bHk7CisJaHdpZi0+ZG1hX2hvc3Rfb24JPSBpY3NpZGVfZG1hX2hvc3Rfb247CiAJaHdpZi0+aWRlX2RtYV9vbgk9IGljc2lkZV9kbWFfb247CiAJaHdpZi0+ZG1hX3NldHVwCQk9IGljc2lkZV9kbWFfc2V0dXA7CiAJaHdpZi0+ZG1hX2V4ZWNfY21kCT0gaWNzaWRlX2RtYV9leGVjX2NtZDsKQEAgLTU1Niw3ICs1NTEsNyBAQAogCQkgKiBFbnN1cmUgd2UncmUgdXNpbmcgTU1JTwogCQkgKi8KIAkJZGVmYXVsdF9od2lmX21taW9wcyhod2lmKTsKLQkJaHdpZi0+bW1pbyA9IDI7CisJCWh3aWYtPm1taW8gPSAxOwogCiAJCWZvciAoaSA9IElERV9EQVRBX09GRlNFVDsgaSA8PSBJREVfU1RBVFVTX09GRlNFVDsgaSsrKSB7CiAJCQlod2lmLT5ody5pb19wb3J0c1tpXSA9IHBvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hcm0vcmFwaWRlLmMgYi9kcml2ZXJzL2lkZS9hcm0vcmFwaWRlLmMKaW5kZXggMzA1ODIxNy4uOWM2YzQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXJtL3JhcGlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2FybS9yYXBpZGUuYwpAQCAtNDYsNyArNDYsNyBAQAogCWh3aWYtPmh3LmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSAodW5zaWduZWQgbG9uZyljdHJsOwogCWh3aWYtPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSAodW5zaWduZWQgbG9uZyljdHJsOwogCWh3aWYtPmh3LmlycSA9IGh3aWYtPmlycSA9IGlycTsKLQlod2lmLT5tbWlvID0gMjsKKwlod2lmLT5tbWlvID0gMTsKIAlkZWZhdWx0X2h3aWZfbW1pb3BzKGh3aWYpOwogCiAJcmV0dXJuIGh3aWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jcmlzL2lkZS1jcmlzLmMgYi9kcml2ZXJzL2lkZS9jcmlzL2lkZS1jcmlzLmMKaW5kZXggNTc5N2UwYi4uNmIyZDE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY3Jpcy9pZGUtY3Jpcy5jCisrKyBiL2RyaXZlcnMvaWRlL2NyaXMvaWRlLWNyaXMuYwpAQCAtNjgyLDkgKzY4MiwxMiBAQAogc3RhdGljIHZvaWQgY3Jpc19pZGVfb3V0cHV0X2RhdGEgKGlkZV9kcml2ZV90ICpkcml2ZSwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwogc3RhdGljIHZvaWQgY3Jpc19hdGFwaV9pbnB1dF9ieXRlcyhpZGVfZHJpdmVfdCAqZHJpdmUsIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKIHN0YXRpYyB2b2lkIGNyaXNfYXRhcGlfb3V0cHV0X2J5dGVzKGlkZV9kcml2ZV90ICpkcml2ZSwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBjcmlzX2RtYV9vZmYgKGlkZV9kcml2ZV90ICpkcml2ZSk7CiBzdGF0aWMgaW50IGNyaXNfZG1hX29uIChpZGVfZHJpdmVfdCAqZHJpdmUpOwogCitzdGF0aWMgdm9pZCBjcmlzX2RtYV9vZmYoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworfQorCiBzdGF0aWMgdm9pZCB0dW5lX2NyaXNfaWRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcGlvKQogewogCWludCBzZXR1cCwgc3Ryb2JlLCBob2xkOwpAQCAtNzk1LDcgKzc5OCw3IEBACiAJCSAgICAgICAgICAgICAgICAwLCAwLCBjcmlzX2lkZV9hY2tfaW50ciwKIAkJICAgICAgICAgICAgICAgIGlkZV9kZWZhdWx0X2lycSgwKSk7CiAJCWlkZV9yZWdpc3Rlcl9odygmaHcsICZod2lmKTsKLQkJaHdpZi0+bW1pbyA9IDI7CisJCWh3aWYtPm1taW8gPSAxOwogCQlod2lmLT5jaGlwc2V0ID0gaWRlX2V0cmF4MTAwOwogCQlod2lmLT50dW5lcHJvYyA9ICZ0dW5lX2NyaXNfaWRlOwogCQlod2lmLT5zcGVlZHByb2MgPSAmc3BlZWRfY3Jpc19pZGU7CkBAIC04MTQsMTMgKzgxNywxNiBAQAogCQlod2lmLT5PVVRCU1lOQyA9ICZjcmlzX2lkZV9vdXRic3luYzsKIAkJaHdpZi0+SU5CID0gJmNyaXNfaWRlX2luYjsKIAkJaHdpZi0+SU5XID0gJmNyaXNfaWRlX2ludzsKLQkJaHdpZi0+aWRlX2RtYV9ob3N0X29mZiA9ICZjcmlzX2RtYV9vZmY7Ci0JCWh3aWYtPmlkZV9kbWFfaG9zdF9vbiA9ICZjcmlzX2RtYV9vbjsKLQkJaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseSA9ICZjcmlzX2RtYV9vZmY7CisJCWh3aWYtPmRtYV9ob3N0X29mZiA9ICZjcmlzX2RtYV9vZmY7CisJCWh3aWYtPmRtYV9ob3N0X29uID0gJmNyaXNfZG1hX29uOworCQlod2lmLT5kbWFfb2ZmX3F1aWV0bHkgPSAmY3Jpc19kbWFfb2ZmOwogCQlod2lmLT51ZG1hX2ZvdXIgPSAwOwogCQlod2lmLT51bHRyYV9tYXNrID0gY3Jpc191bHRyYV9tYXNrOwogCQlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsgLyogTXVsdGl3b3JkIERNQSAwLTIgKi8KIAkJaHdpZi0+c3dkbWFfbWFzayA9IDB4MDc7IC8qIFNpbmdsZXdvcmQgRE1BIDAtMiAqLworCQlod2lmLT5hdXRvZG1hID0gMTsKKwkJaHdpZi0+ZHJpdmVzWzBdLmF1dG9kbWEgPSAxOworCQlod2lmLT5kcml2ZXNbMV0uYXV0b2RtYSA9IDE7CiAJfQogCiAJLyogUmVzZXQgcHVsc2UgKi8KQEAgLTgzNSwxMSArODQxLDYgQEAKIAljcmlzX2lkZV9zZXRfc3BlZWQoVFlQRV9VRE1BLCBBVEFfVURNQTJfQ1lDLCBBVEFfVURNQTJfRFZTLCAwKTsKIH0KIAotc3RhdGljIGludCBjcmlzX2RtYV9vZmYgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBjcmlzX2RtYV9vbiAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXJldHVybiAwOwpAQCAtMTA0NSwxNyArMTA0NiwxMCBAQAogCiBzdGF0aWMgaW50IGNyaXNfZG1hX2NoZWNrKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGhkX2RyaXZlaWQqIGlkID0gZHJpdmUtPmlkOworCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY3Jpc19jb25maWdfZHJpdmVfZm9yX2RtYShkcml2ZSkpCisJCXJldHVybiAwOwogCi0JaWYgKGlkICYmIChpZC0+Y2FwYWJpbGl0eSAmIDEpKSB7Ci0JCWlmIChpZGVfdXNlX2RtYShkcml2ZSkpIHsKLQkJCWlmIChjcmlzX2NvbmZpZ19kcml2ZV9mb3JfZG1hKGRyaXZlKSkKLQkJCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vbihkcml2ZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IGNyaXNfZG1hX2VuZChpZGVfZHJpdmVfdCAqZHJpdmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYyBiL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jCmluZGV4IDYwOGNhODcuLjg4NzUwYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jCisrKyBiL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jCkBAIC03NiwxMyArNzYsMTEgQEAKIHsKIAlkZWZhdWx0X2h3aWZfaW9wcyhod2lmKTsKIAotCWh3aWYtPm1taW8gID0gMjsKKwlod2lmLT5tbWlvICA9IDE7CiAJaHdpZi0+T1VUVyAgPSBtbV9vdXR3OwogCWh3aWYtPk9VVFNXID0gbW1fb3V0c3c7CiAJaHdpZi0+SU5XICAgPSBtbV9pbnc7CiAJaHdpZi0+SU5TVyAgPSBtbV9pbnN3OwotCWh3aWYtPk9VVEwgID0gTlVMTDsKLQlod2lmLT5JTkwgICA9IE5VTEw7CiAJaHdpZi0+T1VUU0wgPSBOVUxMOwogCWh3aWYtPklOU0wgID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggNTk2OWNlYy4uNDVhOTI4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTY4NywxNSArNjg3LDggQEAKIHN0YXRpYyBpbnQgY2Ryb21fZGVjb2RlX3N0YXR1cyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBnb29kX3N0YXQsIGludCAqc3RhdF9yZXQpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOwotCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKIAlpbnQgc3RhdCwgZXJyLCBzZW5zZV9rZXk7CiAJCi0JLyogV2UgbWF5IGhhdmUgYm9ndXMgRE1BIGludGVycnVwdHMgaW4gUElPIHN0YXRlIGhlcmUgKi8KLQlpZiAoSFdJRihkcml2ZSktPmRtYV9zdGF0dXMgJiYgaHdpZi0+YXRhcGlfaXJxX2JvZ29uKSB7Ci0JCXN0YXQgPSBod2lmLT5JTkIoaHdpZi0+ZG1hX3N0YXR1cyk7Ci0JCS8qIFNob3VsZCB3ZSBmb3JjZSB0aGUgYml0IGFzIHdlbGwgPyAqLwotCQlod2lmLT5PVVRCKHN0YXQsIGh3aWYtPmRtYV9zdGF0dXMpOwotCX0KIAkvKiBDaGVjayBmb3IgZXJyb3JzLiAqLwogCXN0YXQgPSBIV0lGKGRyaXZlKS0+SU5CKElERV9TVEFUVVNfUkVHKTsKIAlpZiAoc3RhdF9yZXQpCkBAIC05MzAsNiArOTIzLDEwIEBACiAJCUhXSUYoZHJpdmUpLT5PVVRCKGRyaXZlLT5jdGwsIElERV9DT05UUk9MX1JFRyk7CiAgCiAJaWYgKENEUk9NX0NPTkZJR19GTEFHUyAoZHJpdmUpLT5kcnFfaW50ZXJydXB0KSB7CisJCS8qIHdhaXRpbmcgZm9yIENEQiBpbnRlcnJ1cHQsIG5vdCBETUEgeWV0LiAqLworCQlpZiAoaW5mby0+ZG1hKQorCQkJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CisKIAkJLyogcGFja2V0IGNvbW1hbmQgKi8KIAkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgV0lOX1BBQ0tFVENNRCwgaGFuZGxlciwgQVRBUElfV0FJVF9QQywgY2Ryb21fdGltZXJfZXhwaXJ5KTsKIAkJcmV0dXJuIGlkZV9zdGFydGVkOwpAQCAtOTcyLDYgKzk2OSwxMCBAQAogCQkvKiBDaGVjayBmb3IgZXJyb3JzLiAqLwogCQlpZiAoY2Ryb21fZGVjb2RlX3N0YXR1cyhkcml2ZSwgRFJRX1NUQVQsIE5VTEwpKQogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCisJCS8qIE9rLCBuZXh0IGludGVycnVwdCB3aWxsIGJlIERNQSBpbnRlcnJ1cHQuICovCisJCWlmIChpbmZvLT5kbWEpCisJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKIAl9IGVsc2UgewogCQkvKiBPdGhlcndpc2UsIHdlIG11c3Qgd2FpdCBmb3IgRFJRIHRvIGdldCBzZXQuICovCiAJCWlmIChpZGVfd2FpdF9zdGF0KCZzdGFydHN0b3AsIGRyaXZlLCBEUlFfU1RBVCwKQEAgLTExMDMsNyArMTEwNCw3IEBACiAJaWYgKGRtYSkgewogCQlpbmZvLT5kbWEgPSAwOwogCQlpZiAoKGRtYV9lcnJvciA9IEhXSUYoZHJpdmUpLT5pZGVfZG1hX2VuZChkcml2ZSkpKQotCQkJX19pZGVfZG1hX29mZihkcml2ZSk7CisJCQlpZGVfZG1hX29mZihkcml2ZSk7CiAJfQogCiAJaWYgKGNkcm9tX2RlY29kZV9zdGF0dXMoZHJpdmUsIDAsICZzdGF0KSkKQEAgLTE2OTksNyArMTcwMCw3IEBACiAJaWYgKGRtYSkgewogCQlpZiAoZG1hX2Vycm9yKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImlkZS1jZDogZG1hIGVycm9yXG4iKTsKLQkJCV9faWRlX2RtYV9vZmYoZHJpdmUpOworCQkJaWRlX2RtYV9vZmYoZHJpdmUpOwogCQkJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgImRtYSBlcnJvciIsIHN0YXQpOwogCQl9CiAKQEAgLTE4MjUsNyArMTgyNiw3IEBACiAJCWluZm8tPmRtYSA9IDA7CiAJCWlmICgoZG1hX2Vycm9yID0gSFdJRihkcml2ZSktPmlkZV9kbWFfZW5kKGRyaXZlKSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiaWRlLWNkOiB3cml0ZSBkbWEgZXJyb3JcbiIpOwotCQkJX19pZGVfZG1hX29mZihkcml2ZSk7CisJCQlpZGVfZG1hX29mZihkcml2ZSk7CiAJCX0KIAl9CiAKQEAgLTMyNTQsMTQgKzMyNTUsNiBAQAogCWlmIChkcml2ZS0+YXV0b3R1bmUgPT0gSURFX1RVTkVfREVGQVVMVCB8fAogCSAgICBkcml2ZS0+YXV0b3R1bmUgPT0gSURFX1RVTkVfQVVUTykKIAkJZHJpdmUtPmRzY19vdmVybGFwID0gKGRyaXZlLT5uZXh0ICE9IGRyaXZlKTsKLSNpZiAwCi0JZHJpdmUtPmRzY19vdmVybGFwID0gKEhXSUYoZHJpdmUpLT5ub19kc2MpID8gMCA6IDE7Ci0JaWYgKEhXSUYoZHJpdmUpLT5ub19kc2MpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaWRlLWNkOiAlczogZGlzYWJsaW5nIERTQyBvdmVybGFwXG4iLAotCQkJZHJpdmUtPm5hbWUpOwotCQlkcml2ZS0+ZHNjX292ZXJsYXAgPSAwOwotCX0KLSNlbmRpZgogCiAJaWYgKGlkZV9jZHJvbV9yZWdpc3Rlcihkcml2ZSwgbnNsb3RzKSkgewogCQlwcmludGsgKEtFUk5fRVJSICIlczogaWRlX2Nkcm9tX3NldHVwIGZhaWxlZCB0byByZWdpc3RlciBkZXZpY2Ugd2l0aCB0aGUgY2Ryb20gZHJpdmVyLlxuIiwgZHJpdmUtPm5hbWUpOwpAQCAtMzM2MCwyMSArMzM1MywxNiBAQAogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbzsKLQlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJaW50IHJjID0gLUVOT01FTTsKIAogCWlmICghKGluZm8gPSBpZGVfY2RfZ2V0KGRpc2spKSkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCWRyaXZlID0gaW5mby0+ZHJpdmU7Ci0KLQlkcml2ZS0+dXNhZ2UrKzsKLQogCWlmICghaW5mby0+YnVmZmVyKQotCQlpbmZvLT5idWZmZXIgPSBrbWFsbG9jKFNFQ1RPUl9CVUZGRVJfU0laRSwKLQkJCQkJR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOwotICAgICAgICBpZiAoIWluZm8tPmJ1ZmZlciB8fCAocmMgPSBjZHJvbV9vcGVuKCZpbmZvLT5kZXZpbmZvLCBpbm9kZSwgZmlsZSkpKQotCQlkcml2ZS0+dXNhZ2UtLTsKKwkJaW5mby0+YnVmZmVyID0ga21hbGxvYyhTRUNUT1JfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKKworCWlmIChpbmZvLT5idWZmZXIpCisJCXJjID0gY2Ryb21fb3BlbigmaW5mby0+ZGV2aW5mbywgaW5vZGUsIGZpbGUpOwogCiAJaWYgKHJjIDwgMCkKIAkJaWRlX2NkX3B1dChpbmZvKTsKQEAgLTMzODYsMTAgKzMzNzQsOCBAQAogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGlkZV9jZF9nKGRpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGluZm8tPmRyaXZlOwogCiAJY2Ryb21fcmVsZWFzZSAoJmluZm8tPmRldmluZm8sIGZpbGUpOwotCWRyaXZlLT51c2FnZS0tOwogCiAJaWRlX2NkX3B1dChpbmZvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKaW5kZXggMGEwNWEzNy4uZTJjZWExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCkBAIC03Nyw2ICs3Nyw3IEBACiAJaWRlX2RyaXZlcl90CSpkcml2ZXI7CiAJc3RydWN0IGdlbmRpc2sJKmRpc2s7CiAJc3RydWN0IGtyZWYJa3JlZjsKKwl1bnNpZ25lZCBpbnQJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCiB9OwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGlkZWRpc2tfcmVmX211dGV4KTsKQEAgLTEwODEsOCArMTA4Miw5IEBACiAKIAlkcml2ZSA9IGlka3AtPmRyaXZlOwogCi0JZHJpdmUtPnVzYWdlKys7Ci0JaWYgKGRyaXZlLT5yZW1vdmFibGUgJiYgZHJpdmUtPnVzYWdlID09IDEpIHsKKwlpZGtwLT5vcGVuZXJzKys7CisKKwlpZiAoZHJpdmUtPnJlbW92YWJsZSAmJiBpZGtwLT5vcGVuZXJzID09IDEpIHsKIAkJaWRlX3Rhc2tfdCBhcmdzOwogCQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CiAJCWFyZ3MudGZSZWdpc3RlcltJREVfQ09NTUFORF9PRkZTRVRdID0gV0lOX0RPT1JMT0NLOwpAQCAtMTEwNiw5ICsxMTA4LDEwIEBACiAJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coZGlzayk7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CiAKLQlpZiAoZHJpdmUtPnVzYWdlID09IDEpCisJaWYgKGlka3AtPm9wZW5lcnMgPT0gMSkKIAkJaWRlX2NhY2hlZmx1c2hfcChkcml2ZSk7Ci0JaWYgKGRyaXZlLT5yZW1vdmFibGUgJiYgZHJpdmUtPnVzYWdlID09IDEpIHsKKworCWlmIChkcml2ZS0+cmVtb3ZhYmxlICYmIGlka3AtPm9wZW5lcnMgPT0gMSkgewogCQlpZGVfdGFza190IGFyZ3M7CiAJCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKIAkJYXJncy50ZlJlZ2lzdGVyW0lERV9DT01NQU5EX09GRlNFVF0gPSBXSU5fRE9PUlVOTE9DSzsKQEAgLTExMTcsNyArMTEyMCw4IEBACiAJCWlmIChkcml2ZS0+ZG9vcmxvY2tpbmcgJiYgaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJmFyZ3MsIE5VTEwpKQogCQkJZHJpdmUtPmRvb3Jsb2NraW5nID0gMDsKIAl9Ci0JZHJpdmUtPnVzYWdlLS07CisKKwlpZGtwLT5vcGVuZXJzLS07CiAKIAlpZGVfZGlza19wdXQoaWRrcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwppbmRleCA1NmVmZWQ2Li4wOGU3Y2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCkBAIC0zNDgsMTUgKzM0OCwxNCBAQAogc3RhdGljIGludCBjb25maWdfZHJpdmVfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCBoZF9kcml2ZWlkICppZCA9IGRyaXZlLT5pZDsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CiAKLQlpZiAoKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgaHdpZi0+YXV0b2RtYSkgeworCWlmICgoaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBkcml2ZS0+aHdpZi0+YXV0b2RtYSkgewogCQkvKgogCQkgKiBFbmFibGUgRE1BIG9uIGFueSBkcml2ZSB0aGF0IGhhcwogCQkgKiBVbHRyYURNQSAobW9kZSAwLzEvMi8zLzQvNS82KSBlbmFibGVkCiAJCSAqLwogCQlpZiAoKGlkLT5maWVsZF92YWxpZCAmIDQpICYmICgoaWQtPmRtYV91bHRyYSA+PiA4KSAmIDB4N2YpKQotCQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOworCQkJcmV0dXJuIDA7CiAJCS8qCiAJCSAqIEVuYWJsZSBETUEgb24gYW55IGRyaXZlIHRoYXQgaGFzIG1vZGUyIERNQQogCQkgKiAobXVsdGkgb3Igc2luZ2xlKSBlbmFibGVkCkBAIC0zNjQsMTQgKzM2MywxNCBAQAogCQlpZiAoaWQtPmZpZWxkX3ZhbGlkICYgMikJLyogcmVndWxhciBETUEgKi8KIAkJCWlmICgoaWQtPmRtYV9td29yZCAmIDB4NDA0KSA9PSAweDQwNCB8fAogCQkJICAgIChpZC0+ZG1hXzF3b3JkICYgMHg0MDQpID09IDB4NDA0KQotCQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKKwkJCQlyZXR1cm4gMDsKIAogCQkvKiBDb25zdWx0IHRoZSBsaXN0IG9mIGtub3duICJnb29kIiBkcml2ZXMgKi8KIAkJaWYgKF9faWRlX2RtYV9nb29kX2RyaXZlKGRyaXZlKSkKLQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKKwkJCXJldHVybiAwOwogCX0KLS8vCWlmIChod2lmLT50dW5lcHJvYyAhPSBOVUxMKSBod2lmLT50dW5lcHJvYyhkcml2ZSwgMjU1KTsKLQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisKKwlyZXR1cm4gLTE7CiB9CiAKIC8qKgpAQCAtNDE1LDcyICs0MTQsNjggQEAKIH0KIAogLyoqCi0gKglfX2lkZV9kbWFfaG9zdF9vZmYJLQlHZW5lcmljIERNQSBraWxsCisgKglpZGVfZG1hX2hvc3Rfb2ZmCS0JR2VuZXJpYyBETUEga2lsbAogICoJQGRyaXZlOiBkcml2ZSB0byBjb250cm9sCiAgKgogICoJUGVyZm9ybSB0aGUgZ2VuZXJpYyBJREUgY29udHJvbGxlciBETUEgb2ZmIG9wZXJhdGlvbi4gVGhpcwogICoJd29ya3MgZm9yIG1vc3QgSURFIGJ1cyBtYXN0ZXJpbmcgY29udHJvbGxlcnMKICAqLwogCi1pbnQgX19pZGVfZG1hX2hvc3Rfb2ZmIChpZGVfZHJpdmVfdCAqZHJpdmUpCit2b2lkIGlkZV9kbWFfaG9zdF9vZmYoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAl1OCB1bml0CQkJPSAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKTsKIAl1OCBkbWFfc3RhdAkJPSBod2lmLT5JTkIoaHdpZi0+ZG1hX3N0YXR1cyk7CiAKIAlod2lmLT5PVVRCKChkbWFfc3RhdCAmIH4oMTw8KDUrdW5pdCkpKSwgaHdpZi0+ZG1hX3N0YXR1cyk7Ci0JcmV0dXJuIDA7CiB9CiAKLUVYUE9SVF9TWU1CT0woX19pZGVfZG1hX2hvc3Rfb2ZmKTsKK0VYUE9SVF9TWU1CT0woaWRlX2RtYV9ob3N0X29mZik7CiAKIC8qKgotICoJX19pZGVfZG1hX2hvc3Rfb2ZmX3F1aWV0bHkJLQlHZW5lcmljIERNQSBraWxsCisgKglpZGVfZG1hX29mZl9xdWlldGx5CS0JR2VuZXJpYyBETUEga2lsbAogICoJQGRyaXZlOiBkcml2ZSB0byBjb250cm9sCiAgKgogICoJVHVybiBvZmYgdGhlIGN1cnJlbnQgRE1BIG9uIHRoaXMgSURFIGNvbnRyb2xsZXIuIAogICovCiAKLWludCBfX2lkZV9kbWFfb2ZmX3F1aWV0bHkgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3ZvaWQgaWRlX2RtYV9vZmZfcXVpZXRseShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJZHJpdmUtPnVzaW5nX2RtYSA9IDA7CiAJaWRlX3RvZ2dsZV9ib3VuY2UoZHJpdmUsIDApOwogCi0JaWYgKEhXSUYoZHJpdmUpLT5pZGVfZG1hX2hvc3Rfb2ZmKGRyaXZlKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKKwlkcml2ZS0+aHdpZi0+ZG1hX2hvc3Rfb2ZmKGRyaXZlKTsKIH0KIAotRVhQT1JUX1NZTUJPTChfX2lkZV9kbWFfb2ZmX3F1aWV0bHkpOworRVhQT1JUX1NZTUJPTChpZGVfZG1hX29mZl9xdWlldGx5KTsKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJICovCiAKIC8qKgotICoJX19pZGVfZG1hX29mZgktCWRpc2FibGUgRE1BIG9uIGEgZGV2aWNlCisgKglpZGVfZG1hX29mZgktCWRpc2FibGUgRE1BIG9uIGEgZGV2aWNlCiAgKglAZHJpdmU6IGRyaXZlIHRvIGRpc2FibGUgRE1BIG9uCiAgKgogICoJRGlzYWJsZSBJREUgRE1BIGZvciBhIGRldmljZSBvbiB0aGlzIElERSBjb250cm9sbGVyLgogICoJSW5mb3JtIHRoZSB1c2VyIHRoYXQgRE1BIGhhcyBiZWVuIGRpc2FibGVkLgogICovCiAKLWludCBfX2lkZV9kbWFfb2ZmIChpZGVfZHJpdmVfdCAqZHJpdmUpCit2b2lkIGlkZV9kbWFfb2ZmKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlwcmludGsoS0VSTl9JTkZPICIlczogRE1BIGRpc2FibGVkXG4iLCBkcml2ZS0+bmFtZSk7Ci0JcmV0dXJuIEhXSUYoZHJpdmUpLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKwlkcml2ZS0+aHdpZi0+ZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKIH0KIAotRVhQT1JUX1NZTUJPTChfX2lkZV9kbWFfb2ZmKTsKK0VYUE9SVF9TWU1CT0woaWRlX2RtYV9vZmYpOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1BDSQogLyoqCi0gKglfX2lkZV9kbWFfaG9zdF9vbgktCUVuYWJsZSBETUEgb24gYSBob3N0CisgKglpZGVfZG1hX2hvc3Rfb24JLQlFbmFibGUgRE1BIG9uIGEgaG9zdAogICoJQGRyaXZlOiBkcml2ZSB0byBlbmFibGUgZm9yIERNQQogICoKICAqCUVuYWJsZSBETUEgb24gYW4gSURFIGNvbnRyb2xsZXIgZm9sbG93aW5nIGdlbmVyaWMgYnVzIG1hc3RlcmluZwogICoJSURFIGNvbnRyb2xsZXIgYmVoYXZpb3VyCiAgKi8KLSAKLWludCBfX2lkZV9kbWFfaG9zdF9vbiAoaWRlX2RyaXZlX3QgKmRyaXZlKQorCit2b2lkIGlkZV9kbWFfaG9zdF9vbihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWYgKGRyaXZlLT51c2luZ19kbWEpIHsKIAkJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwpAQCAtNDg4LDEyICs0ODMsMTAgQEAKIAkJdTggZG1hX3N0YXQJCT0gaHdpZi0+SU5CKGh3aWYtPmRtYV9zdGF0dXMpOwogCiAJCWh3aWYtPk9VVEIoKGRtYV9zdGF0fCgxPDwoNSt1bml0KSkpLCBod2lmLT5kbWFfc3RhdHVzKTsKLQkJcmV0dXJuIDA7CiAJfQotCXJldHVybiAxOwogfQogCi1FWFBPUlRfU1lNQk9MKF9faWRlX2RtYV9ob3N0X29uKTsKK0VYUE9SVF9TWU1CT0woaWRlX2RtYV9ob3N0X29uKTsKIAogLyoqCiAgKglfX2lkZV9kbWFfb24JCS0JRW5hYmxlIERNQSBvbiBhIGRldmljZQpAQCAtNTExLDggKzUwNCw3IEBACiAJZHJpdmUtPnVzaW5nX2RtYSA9IDE7CiAJaWRlX3RvZ2dsZV9ib3VuY2UoZHJpdmUsIDEpOwogCi0JaWYgKEhXSUYoZHJpdmUpLT5pZGVfZG1hX2hvc3Rfb24oZHJpdmUpKQotCQlyZXR1cm4gMTsKKwlkcml2ZS0+aHdpZi0+ZG1hX2hvc3Rfb24oZHJpdmUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NjUsNyArNTU3LDEwIEBACiAJfQogCiAJLyogUFJEIHRhYmxlICovCi0JaHdpZi0+T1VUTChod2lmLT5kbWF0YWJsZV9kbWEsIGh3aWYtPmRtYV9wcmR0YWJsZSk7CisJaWYgKGh3aWYtPm1taW8pCisJCXdyaXRlbChod2lmLT5kbWF0YWJsZV9kbWEsICh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfcHJkdGFibGUpOworCWVsc2UKKwkJb3V0bChod2lmLT5kbWF0YWJsZV9kbWEsIGh3aWYtPmRtYV9wcmR0YWJsZSk7CiAKIAkvKiBzcGVjaWZ5IHIvdyAqLwogCWh3aWYtPk9VVEIocmVhZGluZywgaHdpZi0+ZG1hX2NvbW1hbmQpOwpAQCAtNjgwLDYgKzY3NSw5IEBACiAJc3RydWN0IGhkX2RyaXZlaWQgKmlkID0gZHJpdmUtPmlkOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAorCWlmICgoaWQtPmNhcGFiaWxpdHkgJiAxKSA9PSAwIHx8IGRyaXZlLT5hdXRvZG1hID09IDApCisJCXJldHVybiAwOworCiAJLyogY29uc3VsdCB0aGUgbGlzdCBvZiBrbm93biAiYmFkIiBkcml2ZXMgKi8KIAlpZiAoX19pZGVfZG1hX2JhZF9kcml2ZShkcml2ZSkpCiAJCXJldHVybiAwOwpAQCAtNzUzLDEyICs3NTEsMzcgQEAKIAlyZXR1cm47CiBidWdfZG1hX29mZjoKIAlwcmludGsoIiwgQlVHIERNQSBPRkYiKTsKLQlod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKwlod2lmLT5kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwogCXJldHVybjsKIH0KIAogRVhQT1JUX1NZTUJPTChpZGVfZG1hX3ZlcmJvc2UpOwogCitpbnQgaWRlX3NldF9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpbnQgcmM7CisKKwlyYyA9IGh3aWYtPmlkZV9kbWFfY2hlY2soZHJpdmUpOworCisJc3dpdGNoKHJjKSB7CisJY2FzZSAtMTogLyogRE1BIG5lZWRzIHRvIGJlIGRpc2FibGVkICovCisJCWh3aWYtPmRtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJCXJldHVybiAwOworCWNhc2UgIDA6IC8qIERNQSBuZWVkcyB0byBiZSBlbmFibGVkICovCisJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKKwljYXNlICAxOiAvKiBETUEgc2V0dGluZyBjYW5ub3QgYmUgY2hhbmdlZCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJjOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X2RtYSk7CisKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJCiBpbnQgX19pZGVfZG1hX2xvc3RpcnEgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTgwOSw3ICs4MzIsNyBAQAogewogCWlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaHdpZik7CiAKLQlpZiAoaHdpZi0+bW1pbyA9PSAyKQorCWlmIChod2lmLT5tbWlvKQogCQlyZXR1cm4gMTsKIAllbHNlCiAJCXJldHVybiBpZGVfcmVsZWFzZV9pb21pb19kbWEoaHdpZik7CkBAIC04NzgsOSArOTAxLDkgQEAKIAogc3RhdGljIGludCBpZGVfZG1hX2lvYmFzZShpZGVfaHdpZl90ICpod2lmLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGludCBwb3J0cykKIHsKLQlpZiAoaHdpZi0+bW1pbyA9PSAyKQorCWlmIChod2lmLT5tbWlvKQogCQlyZXR1cm4gaWRlX21hcHBlZF9tbWlvX2RtYShod2lmLCBiYXNlLHBvcnRzKTsKLQlCVUdfT04oaHdpZi0+bW1pbyA9PSAxKTsKKwogCXJldHVybiBpZGVfaW9taW9fZG1hKGh3aWYsIGJhc2UsIHBvcnRzKTsKIH0KIApAQCAtOTA4LDE0ICs5MzEsMTQgQEAKIAlpZiAoIShod2lmLT5kbWFfcHJkdGFibGUpKQogCQlod2lmLT5kbWFfcHJkdGFibGUJPSAoaHdpZi0+ZG1hX2Jhc2UgKyA0KTsKIAotCWlmICghaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseSkKLQkJaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseSA9ICZfX2lkZV9kbWFfb2ZmX3F1aWV0bHk7Ci0JaWYgKCFod2lmLT5pZGVfZG1hX2hvc3Rfb2ZmKQotCQlod2lmLT5pZGVfZG1hX2hvc3Rfb2ZmID0gJl9faWRlX2RtYV9ob3N0X29mZjsKKwlpZiAoIWh3aWYtPmRtYV9vZmZfcXVpZXRseSkKKwkJaHdpZi0+ZG1hX29mZl9xdWlldGx5ID0gJmlkZV9kbWFfb2ZmX3F1aWV0bHk7CisJaWYgKCFod2lmLT5kbWFfaG9zdF9vZmYpCisJCWh3aWYtPmRtYV9ob3N0X29mZiA9ICZpZGVfZG1hX2hvc3Rfb2ZmOwogCWlmICghaHdpZi0+aWRlX2RtYV9vbikKIAkJaHdpZi0+aWRlX2RtYV9vbiA9ICZfX2lkZV9kbWFfb247Ci0JaWYgKCFod2lmLT5pZGVfZG1hX2hvc3Rfb24pCi0JCWh3aWYtPmlkZV9kbWFfaG9zdF9vbiA9ICZfX2lkZV9kbWFfaG9zdF9vbjsKKwlpZiAoIWh3aWYtPmRtYV9ob3N0X29uKQorCQlod2lmLT5kbWFfaG9zdF9vbiA9ICZpZGVfZG1hX2hvc3Rfb247CiAJaWYgKCFod2lmLT5pZGVfZG1hX2NoZWNrKQogCQlod2lmLT5pZGVfZG1hX2NoZWNrID0gJl9faWRlX2RtYV9jaGVjazsKIAlpZiAoIWh3aWYtPmRtYV9zZXR1cCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwppbmRleCBkMzM3MTdjLi41N2NkMjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC0yNzksNiArMjc5LDcgQEAKIAlpZGVfZHJpdmVyX3QJKmRyaXZlcjsKIAlzdHJ1Y3QgZ2VuZGlzawkqZGlzazsKIAlzdHJ1Y3Qga3JlZglrcmVmOworCXVuc2lnbmVkIGludAlvcGVuZXJzOwkvKiBwcm90ZWN0ZWQgYnkgQktMIGZvciBub3cgKi8KIAogCS8qIEN1cnJlbnQgcGFja2V0IGNvbW1hbmQgKi8KIAlpZGVmbG9wcHlfcGNfdCAqcGM7CkBAIC04NjYsNyArODY3LDcgQEAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBDX0RNQV9JTl9QUk9HUkVTUywgJnBjLT5mbGFncykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpZGUtZmxvcHB5OiBUaGUgZmxvcHB5IHdhbnRzIHRvIGlzc3VlICIKIAkJCSJtb3JlIGludGVycnVwdHMgaW4gRE1BIG1vZGVcbiIpOwotCQkodm9pZClfX2lkZV9kbWFfb2ZmKGRyaXZlKTsKKwkJaWRlX2RtYV9vZmYoZHJpdmUpOwogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAl9CiAKQEAgLTEwOTYsOSArMTA5Nyw5IEBACiAJcGMtPmN1cnJlbnRfcG9zaXRpb24gPSBwYy0+YnVmZmVyOwogCWJjb3VudC5hbGwgPSBtaW4ocGMtPnJlcXVlc3RfdHJhbnNmZXIsIDYzICogMTAyNCk7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBDX0RNQV9FUlJPUiwgJnBjLT5mbGFncykpIHsKLQkJKHZvaWQpX19pZGVfZG1hX29mZihkcml2ZSk7Ci0JfQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUENfRE1BX0VSUk9SLCAmcGMtPmZsYWdzKSkKKwkJaWRlX2RtYV9vZmYoZHJpdmUpOworCiAJZmVhdHVyZS5hbGwgPSAwOwogCiAJaWYgKHRlc3RfYml0KFBDX0RNQV9SRUNPTU1FTkRFRCwgJnBjLT5mbGFncykgJiYgZHJpdmUtPnVzaW5nX2RtYSkKQEAgLTE0MzMsNyArMTQzNCw4IEBACiAJCiAJZHJpdmUtPmJpb3NfY3lsID0gMDsKIAlkcml2ZS0+Ymlvc19oZWFkID0gZHJpdmUtPmJpb3Nfc2VjdCA9IDA7Ci0JZmxvcHB5LT5ibG9ja3MgPSBmbG9wcHktPmJzX2ZhY3RvciA9IDA7CisJZmxvcHB5LT5ibG9ja3MgPSAwOworCWZsb3BweS0+YnNfZmFjdG9yID0gMTsKIAlzZXRfY2FwYWNpdHkoZmxvcHB5LT5kaXNrLCAwKTsKIAogCWlkZWZsb3BweV9jcmVhdGVfcmVhZF9jYXBhY2l0eV9jbWQoJnBjKTsKQEAgLTE5NDksOSArMTk1MSw5IEBACiAKIAlkcml2ZSA9IGZsb3BweS0+ZHJpdmU7CiAKLQlkcml2ZS0+dXNhZ2UrKzsKKwlmbG9wcHktPm9wZW5lcnMrKzsKIAotCWlmIChkcml2ZS0+dXNhZ2UgPT0gMSkgeworCWlmIChmbG9wcHktPm9wZW5lcnMgPT0gMSkgewogCQljbGVhcl9iaXQoSURFRkxPUFBZX0ZPUk1BVF9JTl9QUk9HUkVTUywgJmZsb3BweS0+ZmxhZ3MpOwogCQkvKiBKdXN0IGluIGNhc2UgKi8KIApAQCAtMTk2OSwxMyArMTk3MSwxMSBAQAogCQkgICAgKiogY2FwYWNpdHkgb2YgdGhlIGRyaXZlIG9yIGJlZ2luIHRoZSBmb3JtYXQgLSBTYW0KIAkJICAgICovCiAJCSAgICApIHsKLQkJCWRyaXZlLT51c2FnZS0tOwogCQkJcmV0ID0gLUVJTzsKIAkJCWdvdG8gb3V0X3B1dF9mbG9wcHk7CiAJCX0KIAogCQlpZiAoZmxvcHB5LT53cCAmJiAoZmlscC0+Zl9tb2RlICYgMikpIHsKLQkJCWRyaXZlLT51c2FnZS0tOwogCQkJcmV0ID0gLUVST0ZTOwogCQkJZ290byBvdXRfcHV0X2Zsb3BweTsKIAkJfQpAQCAtMTk4NywxMyArMTk4NywxMyBAQAogCQl9CiAJCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOwogCX0gZWxzZSBpZiAodGVzdF9iaXQoSURFRkxPUFBZX0ZPUk1BVF9JTl9QUk9HUkVTUywgJmZsb3BweS0+ZmxhZ3MpKSB7Ci0JCWRyaXZlLT51c2FnZS0tOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3B1dF9mbG9wcHk7CiAJfQogCXJldHVybiAwOwogCiBvdXRfcHV0X2Zsb3BweToKKwlmbG9wcHktPm9wZW5lcnMtLTsKIAlpZGVfZmxvcHB5X3B1dChmbG9wcHkpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMDA3LDcgKzIwMDcsNyBAQAogCQogCWRlYnVnX2xvZyhLRVJOX0lORk8gIlJlYWNoZWQgaWRlZmxvcHB5X3JlbGVhc2VcbiIpOwogCi0JaWYgKGRyaXZlLT51c2FnZSA9PSAxKSB7CisJaWYgKGZsb3BweS0+b3BlbmVycyA9PSAxKSB7CiAJCS8qIElPTUVHQSBDbGlrISBkcml2ZXMgZG8gbm90IHN1cHBvcnQgbG9jay91bmxvY2sgY29tbWFuZHMgKi8KICAgICAgICAgICAgICAgICBpZiAoIXRlc3RfYml0KElERUZMT1BQWV9DTElLX0RSSVZFLCAmZmxvcHB5LT5mbGFncykpIHsKIAkJCWlkZWZsb3BweV9jcmVhdGVfcHJldmVudF9jbWQoJnBjLCAwKTsKQEAgLTIwMTYsNyArMjAxNiw4IEBACiAKIAkJY2xlYXJfYml0KElERUZMT1BQWV9GT1JNQVRfSU5fUFJPR1JFU1MsICZmbG9wcHktPmZsYWdzKTsKIAl9Ci0JZHJpdmUtPnVzYWdlLS07CisKKwlmbG9wcHktPm9wZW5lcnMtLTsKIAogCWlkZV9mbG9wcHlfcHV0KGZsb3BweSk7CiAKQEAgLTIwNTAsNyArMjA1MSw3IEBACiAJCXByZXZlbnQgPSAwOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIENEUk9NX0xPQ0tET09SOgotCQlpZiAoZHJpdmUtPnVzYWdlID4gMSkKKwkJaWYgKGZsb3BweS0+b3BlbmVycyA+IDEpCiAJCQlyZXR1cm4gLUVCVVNZOwogCiAJCS8qIFRoZSBJT01FR0EgQ2xpayEgRHJpdmUgZG9lc24ndCBzdXBwb3J0IHRoaXMgY29tbWFuZCAtIG5vIHJvb20gZm9yIGFuIGVqZWN0IG1lY2hhbmlzbSAqLwpAQCAtMjA3Miw3ICsyMDczLDcgQEAKIAkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgMikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCWlmIChkcml2ZS0+dXNhZ2UgPiAxKSB7CisJCWlmIChmbG9wcHktPm9wZW5lcnMgPiAxKSB7CiAJCQkvKiBEb24ndCBmb3JtYXQgaWYgc29tZW9uZSBpcyB1c2luZyB0aGUgZGlzayAqLwogCiAJCQljbGVhcl9iaXQoSURFRkxPUFBZX0ZPUk1BVF9JTl9QUk9HUkVTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKaW5kZXggMjYxNGY0MS4uYzE5MzU1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChkcml2ZS0+aHdpZi0+aWRlX2RtYV9jaGVjayA9PSBOVUxMKQogCQkJYnJlYWs7Ci0JCWRyaXZlLT5od2lmLT5pZGVfZG1hX2NoZWNrKGRyaXZlKTsKKwkJaWRlX3NldF9kbWEoZHJpdmUpOwogCQlicmVhazsKIAl9CiAJcG0tPnBtX3N0ZXAgPSBpZGVfcG1fc3RhdGVfY29tcGxldGVkOwpAQCAtMTM1MSw3ICsxMzUxLDcgQEAKIAkgKi8KIAlkcml2ZS0+cmV0cnlfcGlvKys7CiAJZHJpdmUtPnN0YXRlID0gRE1BX1BJT19SRVRSWTsKLQkodm9pZCkgaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJaHdpZi0+ZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKIAogCS8qCiAJICogdW4tYnVzeSBkcml2ZSBldGMgKGh3Z3JvdXAtPmJ1c3kgaXMgY2xlYXJlZCBvbiByZXR1cm4pIGFuZApAQCAtMTY0Niw2ICsxNjQ2LDE3IEBACiAJZGVsX3RpbWVyKCZod2dyb3VwLT50aW1lcik7CiAJc3Bpbl91bmxvY2soJmlkZV9sb2NrKTsKIAorCS8qIFNvbWUgY29udHJvbGxlcnMgbWlnaHQgc2V0IERNQSBJTlRSIG5vIG1hdHRlciBETUEgb3IgUElPOworCSAqIGJtZG1hIHN0YXR1cyBtaWdodCBuZWVkIHRvIGJlIGNsZWFyZWQgZXZlbiBmb3IKKwkgKiBQSU8gaW50ZXJydXB0cyB0byBwcmV2ZW50IHNwdXJpb3VzL2xvc3QgaXJxLgorCSAqLworCWlmIChod2lmLT5pZGVfZG1hX2NsZWFyX2lycSAmJiAhKGRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpKQorCQkvKiBpZGVfZG1hX2VuZCgpIG5lZWRzIGJtZG1hIHN0YXR1cyBmb3IgZXJyb3IgY2hlY2tpbmcuCisJCSAqIFNvLCBza2lwIGNsZWFyaW5nIGJtZG1hIHN0YXR1cyBoZXJlIGFuZCBsZWF2ZSBpdAorCQkgKiB0byBpZGVfZG1hX2VuZCgpIGlmIHRoaXMgaXMgZG1hIGludGVycnVwdC4KKwkJICovCisJCWh3aWYtPmlkZV9kbWFfY2xlYXJfaXJxKGRyaXZlKTsKKwogCWlmIChkcml2ZS0+dW5tYXNrKQogCQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIAkvKiBzZXJ2aWNlIHRoaXMgaW50ZXJydXB0LCBtYXkgc2V0IGhhbmRsZXIgZm9yIG5leHQgaW50ZXJydXB0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCBiYWRkZTYzLi5jNjdiM2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTQ5LDExICs0OSw2IEBACiAJaW5zdyhwb3J0LCBhZGRyLCBjb3VudCk7CiB9CiAKLXN0YXRpYyB1MzIgaWRlX2lubCAodW5zaWduZWQgbG9uZyBwb3J0KQotewotCXJldHVybiAodTMyKSBpbmwocG9ydCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGlkZV9pbnNsICh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKIAlpbnNsKHBvcnQsIGFkZHIsIGNvdW50KTsKQEAgLTc5LDExICs3NCw2IEBACiAJb3V0c3cocG9ydCwgYWRkciwgY291bnQpOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfb3V0bCAodTMyIHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCW91dGwodmFsLCBwb3J0KTsKLX0KLQogc3RhdGljIHZvaWQgaWRlX291dHNsICh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKIAlvdXRzbChwb3J0LCBhZGRyLCBjb3VudCk7CkBAIC05NCwxMiArODQsMTAgQEAKIAlod2lmLT5PVVRCCT0gaWRlX291dGI7CiAJaHdpZi0+T1VUQlNZTkMJPSBpZGVfb3V0YnN5bmM7CiAJaHdpZi0+T1VUVwk9IGlkZV9vdXR3OwotCWh3aWYtPk9VVEwJPSBpZGVfb3V0bDsKIAlod2lmLT5PVVRTVwk9IGlkZV9vdXRzdzsKIAlod2lmLT5PVVRTTAk9IGlkZV9vdXRzbDsKIAlod2lmLT5JTkIJPSBpZGVfaW5iOwogCWh3aWYtPklOVwk9IGlkZV9pbnc7Ci0JaHdpZi0+SU5MCT0gaWRlX2lubDsKIAlod2lmLT5JTlNXCT0gaWRlX2luc3c7CiAJaHdpZi0+SU5TTAk9IGlkZV9pbnNsOwogfQpAQCAtMTIzLDExICsxMTEsNiBAQAogCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKSBwb3J0LCBhZGRyLCBjb3VudCk7CiB9CiAKLXN0YXRpYyB1MzIgaWRlX21tX2lubCAodW5zaWduZWQgbG9uZyBwb3J0KQotewotCXJldHVybiAodTMyKSByZWFkbCgodm9pZCBfX2lvbWVtICopIHBvcnQpOwotfQotCiBzdGF0aWMgdm9pZCBpZGVfbW1faW5zbCAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCiB7CiAJX19pZGVfbW1faW5zbCgodm9pZCBfX2lvbWVtICopIHBvcnQsIGFkZHIsIGNvdW50KTsKQEAgLTE1MywxMSArMTM2LDYgQEAKIAlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopIHBvcnQsIGFkZHIsIGNvdW50KTsKIH0KIAotc3RhdGljIHZvaWQgaWRlX21tX291dGwgKHUzMiB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCXdyaXRlbCh2YWx1ZSwgKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKLX0KLQogc3RhdGljIHZvaWQgaWRlX21tX291dHNsICh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKIAlfX2lkZV9tbV9vdXRzbCgodm9pZCBfX2lvbWVtICopIHBvcnQsIGFkZHIsIGNvdW50KTsKQEAgLTE3MCwxMiArMTQ4LDEwIEBACiAJICAgdGhpcyBvbmUgaXMgY29udHJvbGxlciBzcGVjaWZpYyEgKi8KIAlod2lmLT5PVVRCU1lOQwk9IGlkZV9tbV9vdXRic3luYzsKIAlod2lmLT5PVVRXCT0gaWRlX21tX291dHc7Ci0JaHdpZi0+T1VUTAk9IGlkZV9tbV9vdXRsOwogCWh3aWYtPk9VVFNXCT0gaWRlX21tX291dHN3OwogCWh3aWYtPk9VVFNMCT0gaWRlX21tX291dHNsOwogCWh3aWYtPklOQgk9IGlkZV9tbV9pbmI7CiAJaHdpZi0+SU5XCT0gaWRlX21tX2ludzsKLQlod2lmLT5JTkwJPSBpZGVfbW1faW5sOwogCWh3aWYtPklOU1cJPSBpZGVfbW1faW5zdzsKIAlod2lmLT5JTlNMCT0gaWRlX21tX2luc2w7CiB9CkBAIC03NzcsNyArNzUzLDcgQEAKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQogCWlmIChod2lmLT5pZGVfZG1hX2NoZWNrKQkgLyogY2hlY2sgaWYgaG9zdCBzdXBwb3J0cyBETUEgKi8KLQkJaHdpZi0+aWRlX2RtYV9ob3N0X29mZihkcml2ZSk7CisJCWh3aWYtPmRtYV9ob3N0X29mZihkcml2ZSk7CiAjZW5kaWYKIAogCS8qCkBAIC04NTQsOSArODMwLDkgQEAKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQogCWlmIChzcGVlZCA+PSBYRkVSX1NXX0RNQV8wKQotCQlod2lmLT5pZGVfZG1hX2hvc3Rfb24oZHJpdmUpOworCQlod2lmLT5kbWFfaG9zdF9vbihkcml2ZSk7CiAJZWxzZSBpZiAoaHdpZi0+aWRlX2RtYV9jaGVjaykJLyogY2hlY2sgaWYgaG9zdCBzdXBwb3J0cyBETUEgKi8KLQkJaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJCWh3aWYtPmRtYV9vZmZfcXVpZXRseShkcml2ZSk7CiAjZW5kaWYKIAogCXN3aXRjaChzcGVlZCkgewpAQCAtMTA2NiwxMiArMTA0MiwxMiBAQAogewogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQogCWlmIChkcml2ZS0+Y3JjX2NvdW50KSB7Ci0JCSh2b2lkKSBIV0lGKGRyaXZlKS0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJCWRyaXZlLT5od2lmLT5kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwogCQlpZGVfc2V0X3hmZXJfcmF0ZShkcml2ZSwgaWRlX2F1dG9fcmVkdWNlX3hmZXIoZHJpdmUpKTsKIAkJaWYgKGRyaXZlLT5jdXJyZW50X3NwZWVkID49IFhGRVJfU1dfRE1BXzApCiAJCQkodm9pZCkgSFdJRihkcml2ZSktPmlkZV9kbWFfb24oZHJpdmUpOwogCX0gZWxzZQotCQkodm9pZClfX2lkZV9kbWFfb2ZmKGRyaXZlKTsKKwkJaWRlX2RtYV9vZmYoZHJpdmUpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwppbmRleCA4MjM3ZDg5Li44YWZjZTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCkBAIC0yMDUsNiArMjA1LDIxIEBACiAKIEVYUE9SVF9TWU1CT0woaWRlX2RtYV9lbmFibGUpOwogCitpbnQgaWRlX3VzZV9mYXN0X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJc3RydWN0IGhkX2RyaXZlaWQgKmlkID0gZHJpdmUtPmlkOworCisJaWYgKChpZC0+Y2FwYWJpbGl0eSAmIDEpICYmIGRyaXZlLT5hdXRvZG1hKQorCQlyZXR1cm4gMTsKKworCWlmICgoaWQtPmNhcGFiaWxpdHkgJiA4KSB8fCAoaWQtPmZpZWxkX3ZhbGlkICYgMikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV91c2VfZmFzdF9waW8pOworCiAvKgogICogU3RhbmRhcmQgKGdlbmVyaWMpIHRpbWluZ3MgZm9yIFBJTyBtb2RlcywgZnJvbSBBVEEyIHNwZWNpZmljYXRpb24uCiAgKiBUaGVzZSB0aW1pbmdzIGFyZSBmb3IgYWNjZXNzIHRvIHRoZSBJREUgZGF0YSBwb3J0IHJlZ2lzdGVyICpvbmx5Ki4KQEAgLTM0OSw3ICszNjQsNiBAQAogCWludCB1c2VfaW9yZHkgPSAwOwogCXN0cnVjdCBoZF9kcml2ZWlkKiBpZCA9IGRyaXZlLT5pZDsKIAlpbnQgb3ZlcnJpZGRlbiAgPSAwOwotCWludCBibGFja2xpc3RlZCA9IDA7CiAKIAlpZiAobW9kZV93YW50ZWQgIT0gMjU1KSB7CiAJCXBpb19tb2RlID0gbW9kZV93YW50ZWQ7CkBAIC0zNTcsNyArMzcxLDYgQEAKIAkJcGlvX21vZGUgPSAwOwogCX0gZWxzZSBpZiAoKHBpb19tb2RlID0gaWRlX3NjYW5fcGlvX2JsYWNrbGlzdChpZC0+bW9kZWwpKSAhPSAtMSkgewogCQlvdmVycmlkZGVuID0gMTsKLQkJYmxhY2tsaXN0ZWQgPSAxOwogCQl1c2VfaW9yZHkgPSAocGlvX21vZGUgPiAyKTsKIAl9IGVsc2UgewogCQlwaW9fbW9kZSA9IGlkLT50UElPOwpAQCAtNDA5LDcgKzQyMiw2IEBACiAJCWQtPmN5Y2xlX3RpbWUgPSBjeWNsZV90aW1lID8gY3ljbGVfdGltZSA6IGlkZV9waW9fdGltaW5nc1twaW9fbW9kZV0uY3ljbGVfdGltZTsKIAkJZC0+dXNlX2lvcmR5ID0gdXNlX2lvcmR5OwogCQlkLT5vdmVycmlkZGVuID0gb3ZlcnJpZGRlbjsKLQkJZC0+YmxhY2tsaXN0ZWQgPSBibGFja2xpc3RlZDsKIAl9CiAJcmV0dXJuIHBpb19tb2RlOwogfQpAQCAtNDYyLDggKzQ3NCw2IEBACiAJCXJldHVybiAtMTsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF94ZmVyX3JhdGUpOwotCiBzdGF0aWMgdm9pZCBpZGVfZHVtcF9vcGNvZGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCByZXF1ZXN0ICpycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggMTc2YmJjOC4uOGFmYmQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTg1MywxMSArODUzLDExIEBACiAJCQkJICogdGhpbmdzLCBpZiBub3QgY2hlY2tlZCBhbmQgY2xlYXJlZC4KIAkJCQkgKiAgIFBBUkFOT0lBISEhCiAJCQkJICovCi0JCQkJaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJCQkJaHdpZi0+ZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKICNpZmRlZiBDT05GSUdfSURFRE1BX09OTFlESVNLCiAJCQkJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKICNlbmRpZgotCQkJCQlod2lmLT5pZGVfZG1hX2NoZWNrKGRyaXZlKTsKKwkJCQkJaWRlX3NldF9kbWEoZHJpdmUpOwogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKaW5kZXggYzZlZWMwNC4uNGU1OTIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCkBAIC0xOTcwLDcgKzE5NzAsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiBUaGUgdGFwZSB3YW50cyB0byBpc3N1ZSBtb3JlICIKIAkJCQkiaW50ZXJydXB0cyBpbiBETUEgbW9kZVxuIik7CiAJCXByaW50ayhLRVJOX0VSUiAiaWRlLXRhcGU6IERNQSBkaXNhYmxlZCwgcmV2ZXJ0aW5nIHRvIFBJT1xuIik7Ci0JCSh2b2lkKV9faWRlX2RtYV9vZmYoZHJpdmUpOworCQlpZGVfZG1hX29mZihkcml2ZSk7CiAJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOwogCX0KIAkvKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciBvbiB0aGlzIGludGVycnVwdC4gKi8KQEAgLTIxNzYsNyArMjE3Niw3IEBACiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQQ19ETUFfRVJST1IsICZwYy0+ZmxhZ3MpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImlkZS10YXBlOiBETUEgZGlzYWJsZWQsICIKIAkJCQkicmV2ZXJ0aW5nIHRvIFBJT1xuIik7Ci0JCSh2b2lkKV9faWRlX2RtYV9vZmYoZHJpdmUpOworCQlpZGVfZG1hX29mZihkcml2ZSk7CiAJfQogCWlmICh0ZXN0X2JpdChQQ19ETUFfUkVDT01NRU5ERUQsICZwYy0+ZmxhZ3MpICYmIGRyaXZlLT51c2luZ19kbWEpCiAJCWRtYV9vayA9ICFod2lmLT5kbWFfc2V0dXAoZHJpdmUpOwpAQCAtNDc5MiwxNSArNDc5MiwxMCBAQAogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlOwotCWlkZV9kcml2ZV90ICpkcml2ZTsKIAogCWlmICghKHRhcGUgPSBpZGVfdGFwZV9nZXQoZGlzaykpKQogCQlyZXR1cm4gLUVOWElPOwogCi0JZHJpdmUgPSB0YXBlLT5kcml2ZTsKLQotCWRyaXZlLT51c2FnZSsrOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4MDgsOSArNDgwMyw2IEBACiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwogCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfdGFwZV9nKGRpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IHRhcGUtPmRyaXZlOwotCi0JZHJpdmUtPnVzYWdlLS07CiAKIAlpZGVfdGFwZV9wdXQodGFwZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS5jIGIvZHJpdmVycy9pZGUvaWRlLmMKaW5kZXggYzc1MGY2Yy4uYjNjMDgxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLmMKQEAgLTM4OSw5ICszODksOCBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChod2lmLT5tbWlvID09IDIpCisJaWYgKGh3aWYtPm1taW8pCiAJCXJldHVybiAwOwotCUJVR19PTihod2lmLT5tbWlvID09IDEpOwogCWFkZHIgPSBod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdOwogCWlmIChhZGRyICYmICFod2lmX3JlcXVlc3RfcmVnaW9uKGh3aWYsIGFkZHIsIDEpKQogCQlnb3RvIGNvbnRyb2xfcmVnaW9uX2J1c3k7CkBAIC00MzgsNyArNDM3LDcgQEAKIHsKIAl1MzIgaSA9IDA7CiAKLQlpZiAoaHdpZi0+bW1pbyA9PSAyKQorCWlmIChod2lmLT5tbWlvKQogCQlyZXR1cm47CiAJaWYgKGh3aWYtPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0pCiAJCXJlbGVhc2VfcmVnaW9uKGh3aWYtPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0sIDEpOwpAQCAtNTA3LDIzICs1MDYsMjIgQEAKIAlod2lmLT5pZGVfZG1hX2VuZAkJPSB0bXBfaHdpZi0+aWRlX2RtYV9lbmQ7CiAJaHdpZi0+aWRlX2RtYV9jaGVjawkJPSB0bXBfaHdpZi0+aWRlX2RtYV9jaGVjazsKIAlod2lmLT5pZGVfZG1hX29uCQk9IHRtcF9od2lmLT5pZGVfZG1hX29uOwotCWh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkJPSB0bXBfaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseTsKKwlod2lmLT5kbWFfb2ZmX3F1aWV0bHkJCT0gdG1wX2h3aWYtPmRtYV9vZmZfcXVpZXRseTsKIAlod2lmLT5pZGVfZG1hX3Rlc3RfaXJxCQk9IHRtcF9od2lmLT5pZGVfZG1hX3Rlc3RfaXJxOwotCWh3aWYtPmlkZV9kbWFfaG9zdF9vbgkJPSB0bXBfaHdpZi0+aWRlX2RtYV9ob3N0X29uOwotCWh3aWYtPmlkZV9kbWFfaG9zdF9vZmYJCT0gdG1wX2h3aWYtPmlkZV9kbWFfaG9zdF9vZmY7CisJaHdpZi0+aWRlX2RtYV9jbGVhcl9pcnEJCT0gdG1wX2h3aWYtPmlkZV9kbWFfY2xlYXJfaXJxOworCWh3aWYtPmRtYV9ob3N0X29uCQk9IHRtcF9od2lmLT5kbWFfaG9zdF9vbjsKKwlod2lmLT5kbWFfaG9zdF9vZmYJCT0gdG1wX2h3aWYtPmRtYV9ob3N0X29mZjsKIAlod2lmLT5pZGVfZG1hX2xvc3RpcnEJCT0gdG1wX2h3aWYtPmlkZV9kbWFfbG9zdGlycTsKIAlod2lmLT5pZGVfZG1hX3RpbWVvdXQJCT0gdG1wX2h3aWYtPmlkZV9kbWFfdGltZW91dDsKIAogCWh3aWYtPk9VVEIJCQk9IHRtcF9od2lmLT5PVVRCOwogCWh3aWYtPk9VVEJTWU5DCQkJPSB0bXBfaHdpZi0+T1VUQlNZTkM7CiAJaHdpZi0+T1VUVwkJCT0gdG1wX2h3aWYtPk9VVFc7Ci0JaHdpZi0+T1VUTAkJCT0gdG1wX2h3aWYtPk9VVEw7CiAJaHdpZi0+T1VUU1cJCQk9IHRtcF9od2lmLT5PVVRTVzsKIAlod2lmLT5PVVRTTAkJCT0gdG1wX2h3aWYtPk9VVFNMOwogCiAJaHdpZi0+SU5CCQkJPSB0bXBfaHdpZi0+SU5COwogCWh3aWYtPklOVwkJCT0gdG1wX2h3aWYtPklOVzsKLQlod2lmLT5JTkwJCQk9IHRtcF9od2lmLT5JTkw7CiAJaHdpZi0+SU5TVwkJCT0gdG1wX2h3aWYtPklOU1c7CiAJaHdpZi0+SU5TTAkJCT0gdG1wX2h3aWYtPklOU0w7CiAKQEAgLTU1MSw3ICs1NDksNiBAQAogCWh3aWYtPmV4dHJhX3BvcnRzCQk9IHRtcF9od2lmLT5leHRyYV9wb3J0czsKIAlod2lmLT5hdXRvZG1hCQkJPSB0bXBfaHdpZi0+YXV0b2RtYTsKIAlod2lmLT51ZG1hX2ZvdXIJCQk9IHRtcF9od2lmLT51ZG1hX2ZvdXI7Ci0JaHdpZi0+bm9fZHNjCQkJPSB0bXBfaHdpZi0+bm9fZHNjOwogCiAJaHdpZi0+aHdpZl9kYXRhCQkJPSB0bXBfaHdpZi0+aHdpZl9kYXRhOwogfQpAQCAtMTEzOCwxMiArMTEzNSwxMSBAQAogCWlmIChIV0lGKGRyaXZlKS0+aWRlX2RtYV9jaGVjayA9PSBOVUxMKQogCQlyZXR1cm4gLUVQRVJNOwogCWlmIChhcmcpIHsKLQkJaWYgKEhXSUYoZHJpdmUpLT5pZGVfZG1hX2NoZWNrKGRyaXZlKSkgcmV0dXJuIC1FSU87Ci0JCWlmIChIV0lGKGRyaXZlKS0+aWRlX2RtYV9vbihkcml2ZSkpIHJldHVybiAtRUlPOwotCX0gZWxzZSB7Ci0JCWlmIChfX2lkZV9kbWFfb2ZmKGRyaXZlKSkKKwkJaWYgKGlkZV9zZXRfZG1hKGRyaXZlKSkKIAkJCXJldHVybiAtRUlPOwotCX0KKwkJaWYgKEhXSUYoZHJpdmUpLT5pZGVfZG1hX29uKGRyaXZlKSkgcmV0dXJuIC1FSU87CisJfSBlbHNlCisJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKIAlyZXR1cm4gMDsKICNlbHNlCiAJcmV0dXJuIC1FUEVSTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9idWRkaGEuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9idWRkaGEuYwppbmRleCAwMzkxYTMxLi4xZWQyMjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvYnVkZGhhLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2J1ZGRoYS5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIAkJCQogCQkJaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAmaHdpZik7CiAJCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlod2lmLT5tbWlvID0gMjsKKwkJCQlod2lmLT5tbWlvID0gMTsKIAkJCQlwcmludGsoImlkZSVkOiAiLCBpbmRleCk7CiAJCQkJc3dpdGNoKHR5cGUpIHsKIAkJCQljYXNlIEJPQVJEX0JVRERIQToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9nYXlsZS5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKaW5kZXggNjRkNDI2MS4uZGNmYWRiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCiAJaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAmaHdpZik7CiAJaWYgKGluZGV4ICE9IC0xKSB7Ci0JICAgIGh3aWYtPm1taW8gPSAyOworCSAgICBod2lmLT5tbWlvID0gMTsKIAkgICAgc3dpdGNoIChpKSB7CiAJCWNhc2UgMDoKIAkJICAgIHByaW50aygiaWRlJWQ6IEdheWxlIElERSBpbnRlcmZhY2UgKEElZCBzdHlsZSlcbiIsIGluZGV4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmMKaW5kZXggYzQ4ZTg3ZS4uMTljY2QwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaHQ2NTYwYi5jCkBAIC0xNDMsMTYgKzE0MywxNiBAQAogCQljdXJyZW50X3RpbWluZyA9IHRpbWluZzsKIAkJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayB8fCAhZHJpdmUtPnByZXNlbnQpCiAJCQlzZWxlY3QgfD0gSFRfUFJFRkVUQ0hfTU9ERTsKLQkJKHZvaWQpIEhXSUYoZHJpdmUpLT5JTkIoSFRfQ09ORklHX1BPUlQpOwotCQkodm9pZCkgSFdJRihkcml2ZSktPklOQihIVF9DT05GSUdfUE9SVCk7Ci0JCSh2b2lkKSBIV0lGKGRyaXZlKS0+SU5CKEhUX0NPTkZJR19QT1JUKTsKLQkJKHZvaWQpIEhXSUYoZHJpdmUpLT5JTkIoSFRfQ09ORklHX1BPUlQpOwotCQlIV0lGKGRyaXZlKS0+T1VUQihzZWxlY3QsIEhUX0NPTkZJR19QT1JUKTsKKwkJKHZvaWQpaW5iKEhUX0NPTkZJR19QT1JUKTsKKwkJKHZvaWQpaW5iKEhUX0NPTkZJR19QT1JUKTsKKwkJKHZvaWQpaW5iKEhUX0NPTkZJR19QT1JUKTsKKwkJKHZvaWQpaW5iKEhUX0NPTkZJR19QT1JUKTsKKwkJb3V0YihzZWxlY3QsIEhUX0NPTkZJR19QT1JUKTsKIAkJLyoKIAkJICogU2V0IHRpbWluZyBmb3IgdGhpcyBkcml2ZToKIAkJICovCi0JCUhXSUYoZHJpdmUpLT5PVVRCKHRpbWluZywgSURFX1NFTEVDVF9SRUcpOwotCQkodm9pZCkgSFdJRihkcml2ZSktPklOQihJREVfU1RBVFVTX1JFRyk7CisJCW91dGIodGltaW5nLCBJREVfU0VMRUNUX1JFRyk7CisJCSh2b2lkKWluYihJREVfU1RBVFVTX1JFRyk7CiAjaWZkZWYgREVCVUcKIAkJcHJpbnRrKCJodDY1NjBiOiAlczogc2VsZWN0PSUjeCB0aW1pbmc9JSN4XG4iLAogCQkJZHJpdmUtPm5hbWUsIHNlbGVjdCwgdGltaW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9tYWNpZGUuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9tYWNpZGUuYwppbmRleCBiMTczMGQ3Li40YzAwNzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvbWFjaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L21hY2lkZS5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAl9CiAKICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0JCWh3aWYtPm1taW8gPSAyOworCQlod2lmLT5tbWlvID0gMTsKIAkJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZV90eXBlID09IE1BQ19JREVfUVVBRFJBKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiaWRlJWQ6IE1hY2ludG9zaCBRdWFkcmEgSURFIGludGVyZmFjZVxuIiwgaW5kZXgpOwogCQllbHNlIGlmIChtYWNpbnRvc2hfY29uZmlnLT5pZGVfdHlwZSA9PSBNQUNfSURFX1BCKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L3E0MGlkZS5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L3E0MGlkZS5jCmluZGV4IDQzNGE5NGYuLjc0ZjA4MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9xNDBpZGUuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvcTQwaWRlLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgJmh3aWYpOwogCS8vICoqRklYTUUqKgogCWlmIChpbmRleCAhPSAtMSkKLQkJaHdpZi0+bW1pbyA9IDI7CisJCWh3aWYtPm1taW8gPSAxOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMgYi9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYwppbmRleCBjNzg1NGVhLi4wYTU5ZDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYworKysgYi9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYwpAQCAtMTgxLDEyICsxODEsNiBAQAogewogCWludCBtZW1fc3R0aW1lOwogCWludCBtZW1fc3RjZmc7Ci0JdW5zaWduZWQgbG9uZyBtb2RlOwotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQQotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkpCi0JCW1vZGUgPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCAwKTsKLSNlbmRpZgogCiAJbWVtX3N0dGltZSA9IDA7CiAJbWVtX3N0Y2ZnICA9IGF1X3JlYWRsKE1FTV9TVENGRzIpOwpAQCAtMTk1LDcgKzE4OSw3IEBACiAJCWF1aWRlX3R1bmVfZHJpdmUoZHJpdmUsIHNwZWVkIC0gWEZFUl9QSU9fMCk7CiAJCXJldHVybiAwOwogCX0KLQkgICAgICAKKwogCXN3aXRjaChzcGVlZCkgewogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEKIAljYXNlIFhGRVJfTVdfRE1BXzI6CkBAIC0yMDcsNyArMjAxLDYgQEAKIAkJbWVtX3N0Y2ZnICY9IH5UT0VDU19NQVNLOwogCQltZW1fc3RjZmcgfD0gU0JDX0lERV9NRE1BMl9UQ1NPRSB8IFNCQ19JREVfTURNQTJfVE9FQ1M7CiAKLQkJbW9kZSA9IFhGRVJfTVdfRE1BXzI7CiAJCWJyZWFrOwogCWNhc2UgWEZFUl9NV19ETUFfMToKIAkJbWVtX3N0dGltZSA9IFNCQ19JREVfVElNSU5HKE1ETUExKTsKQEAgLTIxOCw3ICsyMTEsNiBAQAogCQltZW1fc3RjZmcgJj0gflRPRUNTX01BU0s7CiAJCW1lbV9zdGNmZyB8PSBTQkNfSURFX01ETUExX1RDU09FIHwgU0JDX0lERV9NRE1BMV9UT0VDUzsKIAotCQltb2RlID0gWEZFUl9NV19ETUFfMTsKIAkJYnJlYWs7CiAJY2FzZSBYRkVSX01XX0RNQV8wOgogCQltZW1fc3R0aW1lID0gU0JDX0lERV9USU1JTkcoTURNQTApOwpAQCAtMjI5LDE0ICsyMjEsMTMgQEAKIAkJbWVtX3N0Y2ZnICY9IH5UT0VDU19NQVNLOwogCQltZW1fc3RjZmcgfD0gU0JDX0lERV9NRE1BMF9UQ1NPRSB8IFNCQ19JREVfTURNQTBfVE9FQ1M7CiAKLQkJbW9kZSA9IFhGRVJfTVdfRE1BXzA7CiAJCWJyZWFrOwogI2VuZGlmCiAJZGVmYXVsdDoKIAkJcmV0dXJuIDE7CiAJfQotCQotCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKKworCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBzcGVlZCkpCiAJCXJldHVybiAxOwogCiAJYXVfd3JpdGVsKG1lbV9zdHRpbWUsTUVNX1NUVElNRTIpOwpAQCAtNDIzLDkgKzQxNCw5IEBACiAJc3BlZWQgPSBpZGVfZmluZF9iZXN0X21vZGUoZHJpdmUsIFhGRVJfUElPIHwgWEZFUl9NV0RNQSk7CiAJCiAJaWYgKGRyaXZlLT5hdXRvZG1hICYmIChzcGVlZCAmIFhGRVJfTU9ERSkgIT0gWEZFUl9QSU8pCi0JCXJldHVybiBIV0lGKGRyaXZlKS0+aWRlX2RtYV9vbihkcml2ZSk7CisJCXJldHVybiAwOwogCi0JcmV0dXJuIEhXSUYoZHJpdmUpLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKwlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgYXVpZGVfZG1hX3Rlc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTQ0NywyNyArNDM4LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXVpZGVfZG1hX2hvc3Rfb24oaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgYXVpZGVfZG1hX2hvc3Rfb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF1aWRlX2RtYV9vbihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJZHJpdmUtPnVzaW5nX2RtYSA9IDE7Ci0JcmV0dXJuIGF1aWRlX2RtYV9ob3N0X29uKGRyaXZlKTsKLX0KIAotCi1zdGF0aWMgaW50IGF1aWRlX2RtYV9ob3N0X29mZihpZGVfZHJpdmVfdCAqZHJpdmUpCi17CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXVpZGVfZG1hX29mZl9xdWlldGx5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGF1aWRlX2RtYV9ob3N0X29mZihpZGVfZHJpdmVfdCAqZHJpdmUpCit7Cit9CisKK3N0YXRpYyB2b2lkIGF1aWRlX2RtYV9vZmZfcXVpZXRseShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJZHJpdmUtPnVzaW5nX2RtYSA9IDA7Ci0JcmV0dXJuIGF1aWRlX2RtYV9ob3N0X29mZihkcml2ZSk7CiB9CiAKIHN0YXRpYyBpbnQgYXVpZGVfZG1hX2xvc3RpcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQpAQCAtNzE3LDcgKzcwNSw4IEBACiAKIAkvKiBob2xkIHNob3VsZCBiZSBvbiBpbiBhbGwgY2FzZXMgKi8KIAlod2lmLT5ob2xkICAgICAgICAgICAgICAgICAgICAgID0gMTsKLQlod2lmLT5tbWlvICAgICAgICAgICAgICAgICAgICAgID0gMjsKKworCWh3aWYtPm1taW8gID0gMTsKIAogCS8qIElmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBERE1BIGFzc2lzdGVkIGNvcGllcywKIAkgICB0aGVuIHNldCB1cCBhIGZldyBsb2NhbCBJL08gZnVuY3Rpb24gZW50cnkgcG9pbnRzIApAQCAtNzMyLDcgKzcyMSw3IEBACiAJaHdpZi0+c3BlZWRwcm9jICAgICAgICAgICAgICAgICA9ICZhdWlkZV90dW5lX2NoaXBzZXQ7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BCi0JaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseSAgICAgICA9ICZhdWlkZV9kbWFfb2ZmX3F1aWV0bHk7CisJaHdpZi0+ZG1hX29mZl9xdWlldGx5CQk9ICZhdWlkZV9kbWFfb2ZmX3F1aWV0bHk7CiAJaHdpZi0+aWRlX2RtYV90aW1lb3V0ICAgICAgICAgICA9ICZhdWlkZV9kbWFfdGltZW91dDsKIAogCWh3aWYtPmlkZV9kbWFfY2hlY2sgICAgICAgICAgICAgPSAmYXVpZGVfZG1hX2NoZWNrOwpAQCAtNzQxLDggKzczMCw4IEBACiAJaHdpZi0+aWRlX2RtYV9lbmQgICAgICAgICAgICAgICA9ICZhdWlkZV9kbWFfZW5kOwogCWh3aWYtPmRtYV9zZXR1cCAgICAgICAgICAgICAgICAgPSAmYXVpZGVfZG1hX3NldHVwOwogCWh3aWYtPmlkZV9kbWFfdGVzdF9pcnEgICAgICAgICAgPSAmYXVpZGVfZG1hX3Rlc3RfaXJxOwotCWh3aWYtPmlkZV9kbWFfaG9zdF9vZmYgICAgICAgICAgPSAmYXVpZGVfZG1hX2hvc3Rfb2ZmOwotCWh3aWYtPmlkZV9kbWFfaG9zdF9vbiAgICAgICAgICAgPSAmYXVpZGVfZG1hX2hvc3Rfb247CisJaHdpZi0+ZG1hX2hvc3Rfb2ZmCQk9ICZhdWlkZV9kbWFfaG9zdF9vZmY7CisJaHdpZi0+ZG1hX2hvc3Rfb24JCT0gJmF1aWRlX2RtYV9ob3N0X29uOwogCWh3aWYtPmlkZV9kbWFfbG9zdGlycSAgICAgICAgICAgPSAmYXVpZGVfZG1hX2xvc3RpcnE7CiAJaHdpZi0+aWRlX2RtYV9vbiAgICAgICAgICAgICAgICA9ICZhdWlkZV9kbWFfb247CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL21pcHMvc3dhcm0uYyBiL2RyaXZlcnMvaWRlL21pcHMvc3dhcm0uYwppbmRleCAwOWM5ZTc5Li44MWZhMDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9taXBzL3N3YXJtLmMKKysrIGIvZHJpdmVycy9pZGUvbWlwcy9zd2FybS5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkvKiBTZXR1cCBNTUlPIG9wcy4gICovCiAJZGVmYXVsdF9od2lmX21taW9wcyhod2lmKTsKIAkvKiBQcmV2ZW50IHJlc291cmNlIG1hcCBtYW5pcHVsYXRpb24uICAqLwotCWh3aWYtPm1taW8gPSAyOworCWh3aWYtPm1taW8gPSAxOwogCWh3aWYtPm5vcHJvYmUgPSAwOwogCiAJZm9yIChpID0gSURFX0RBVEFfT0ZGU0VUOyBpIDw9IElERV9TVEFUVVNfT0ZGU0VUOyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jIGIvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYwppbmRleCBkMjYxYmZiLi45OTBlYWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMKQEAgLTk0LDkgKzk0LDkgQEAKIAlzd2l0Y2goaHdpZi0+cGNpX2Rldi0+ZGV2aWNlKSB7CiAJCWNhc2UgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjU6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjVSOgotCQkJbW9kZSA9IChod2lmLT5JTkIoKChod2lmLT5jaGFubmVsKSA/Ci0JCQkJCWh3aWYtPm1hdGUtPmRtYV9zdGF0dXMgOgotCQkJCQlod2lmLT5kbWFfc3RhdHVzKSkgJiAweDEwKSA/IDQgOiAzOworCQkJbW9kZSA9IChpbmIoaHdpZi0+Y2hhbm5lbCA/CisJCQkJICAgIGh3aWYtPm1hdGUtPmRtYV9zdGF0dXMgOgorCQkJCSAgICBod2lmLT5kbWFfc3RhdHVzKSAmIDB4MTApID8gNCA6IDM7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MDoKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MFI6CkBAIC0yMDksMjUgKzIwOSwxMyBAQAogCiBzdGF0aWMgaW50IGFlYzYyeHhfY29uZmlnX2RyaXZlX3hmZXJfcmF0ZSAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7CisJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAoKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgZHJpdmUtPmF1dG9kbWEpIHsKLQotCQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpKSB7Ci0JCQlpZiAoY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSkpCi0JCQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOwotCQl9Ci0KLQkJZ290byBmYXN0X2F0YV9waW87Ci0KLQl9IGVsc2UgaWYgKChpZC0+Y2FwYWJpbGl0eSAmIDgpIHx8IChpZC0+ZmllbGRfdmFsaWQgJiAyKSkgewotZmFzdF9hdGFfcGlvOgorCWlmIChpZGVfdXNlX2Zhc3RfcGlvKGRyaXZlKSkKIAkJYWVjNjJ4eF90dW5lX2RyaXZlKGRyaXZlLCA1KTsKLQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotCX0KLQkvKiBJT1JEWSBub3Qgc3VwcG9ydGVkICovCi0JcmV0dXJuIDA7CisKKwlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgYWVjNjJ4eF9pcnFfdGltZW91dCAoaWRlX2RyaXZlX3QgKmRyaXZlKQpAQCAtMjg2LDEwICsyNzQsOCBAQAogCWh3aWYtPnR1bmVwcm9jID0gJmFlYzYyeHhfdHVuZV9kcml2ZTsKIAlod2lmLT5zcGVlZHByb2MgPSAmYWVjNjJ4eF90dW5lX2NoaXBzZXQ7CiAKLQlpZiAoaHdpZi0+cGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODUwVUYpIHsKKwlpZiAoaHdpZi0+cGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODUwVUYpCiAJCWh3aWYtPnNlcmlhbGl6ZWQgPSBod2lmLT5jaGFubmVsOwotCQlod2lmLT5ub19kc2MgPSAxOwotCX0KIAogCWlmIChod2lmLT5tYXRlKQogCQlod2lmLT5tYXRlLT5zZXJpYWxpemVkID0gaHdpZi0+c2VyaWFsaXplZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jIGIvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMKaW5kZXggNjhkZjc3ZS4uNGRlYmQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMKQEAgLTUwNywxNyArNTA3LDE1IEBACiAgKgogICoJQ29uZmlndXJlIGEgZHJpdmUgZm9yIERNQSBvcGVyYXRpb24uIElmIERNQSBpcyBub3QgcG9zc2libGUgd2UKICAqCWRyb3AgdGhlIGRyaXZlIGludG8gUElPIG1vZGUgaW5zdGVhZC4KLSAqCi0gKglGSVhNRTogZXhhY3RseSB3aGF0IGFyZSB3ZSB0cnlpbmcgdG8gcmV0dXJuIGhlcmUKICAqLwotIAorCiBzdGF0aWMgaW50IGFsaTE1eDNfY29uZmlnX2RyaXZlX2Zvcl9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7CiAKIAlpZiAoKG01MjI5X3JldmlzaW9uPD0weDIwKSAmJiAoZHJpdmUtPm1lZGlhIT1pZGVfZGlzaykpCi0JCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKwkJZ290byBub19kbWFfc2V0OwogCiAJZHJpdmUtPmluaXRfc3BlZWQgPSAwOwogCkBAIC01NTIsOSArNTUwLDEwIEBACiBhdGFfcGlvOgogCQlod2lmLT50dW5lcHJvYyhkcml2ZSwgMjU1KTsKIG5vX2RtYV9zZXQ6Ci0JCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKwkJcmV0dXJuIC0xOwogCX0KLQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vbihkcml2ZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC04NTIsOCArODUxLDggQEAKIHsKIAlpZiAobTUyMjlfcmV2aXNpb24gPCAweDIwKQogCQlyZXR1cm47Ci0JaWYgKCEoaHdpZi0+Y2hhbm5lbCkpCi0JCWh3aWYtPk9VVEIoaHdpZi0+SU5CKGRtYWJhc2UrMikgJiAweDYwLCBkbWFiYXNlKzIpOworCWlmICghaHdpZi0+Y2hhbm5lbCkKKwkJb3V0YihpbmIoZG1hYmFzZSArIDIpICYgMHg2MCwgZG1hYmFzZSArIDIpOwogCWlkZV9zZXR1cF9kbWEoaHdpZiwgZG1hYmFzZSwgOCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCmluZGV4IGE0MzM2OTkuLjc5ODliZGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMKQEAgLTMwNCw4ICszMDQsOSBAQAogCWFtZF9zZXRfZHJpdmUoZHJpdmUsIHNwZWVkKTsKIAogCWlmIChkcml2ZS0+YXV0b2RtYSAmJiAoc3BlZWQgJiBYRkVSX01PREUpICE9IFhGRVJfUElPKQotCQlyZXR1cm4gSFdJRihkcml2ZSktPmlkZV9kbWFfb24oZHJpdmUpOwotCXJldHVybiBIV0lGKGRyaXZlKS0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCmluZGV4IDk4MmFjMzEuLjJkNDhhZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBhdGlpeHBfaWRlX2RtYV9ob3N0X29uKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGF0aWl4cF9kbWFfaG9zdF9vbihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRyaXZlLT5od2lmLT5wY2lfZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTgsMTAgKzExOCwxMCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXRpaXhwX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiBfX2lkZV9kbWFfaG9zdF9vbihkcml2ZSk7CisJaWRlX2RtYV9ob3N0X29uKGRyaXZlKTsKIH0KIAotc3RhdGljIGludCBhdGlpeHBfaWRlX2RtYV9ob3N0X29mZihpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBhdGlpeHBfZG1hX2hvc3Rfb2ZmKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZHJpdmUtPmh3aWYtPnBjaV9kZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzNSw3ICsxMzUsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXRpaXhwX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiBfX2lkZV9kbWFfaG9zdF9vZmYoZHJpdmUpOworCWlkZV9kbWFfaG9zdF9vZmYoZHJpdmUpOwogfQogCiAvKioKQEAgLTIzNSwxMSArMjM1LDggQEAKIHsKIAl1OCBzcGVlZCA9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIGF0aWl4cF9yYXRlbWFzayhkcml2ZSkpOwogCi0JLyogSWYgbm8gRE1BIHNwZWVkIHdhcyBhdmFpbGFibGUgdGhlbiBkaXNhYmxlIERNQSBhbmQgdXNlIFBJTy4gKi8KLQlpZiAoIXNwZWVkKSB7Ci0JCXU4IHRzcGVlZCA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgMjU1LCA1LCBOVUxMKTsKLQkJc3BlZWQgPSBhdGlpeHBfZG1hXzJfcGlvKFhGRVJfUElPXzAgKyB0c3BlZWQpICsgWEZFUl9QSU9fMDsKLQl9CisJaWYgKCFzcGVlZCkKKwkJcmV0dXJuIDA7CiAKIAkodm9pZCkgYXRpaXhwX3NwZWVkcHJvYyhkcml2ZSwgc3BlZWQpOwogCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7CkBAIC0yNTUsMzAgKzI1MiwyMCBAQAogCiBzdGF0aWMgaW50IGF0aWl4cF9kbWFfY2hlY2soaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7CiAJdTggdHNwZWVkLCBzcGVlZDsKIAogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmICgoaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBkcml2ZS0+YXV0b2RtYSkgeworCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgYXRpaXhwX2NvbmZpZ19kcml2ZV9mb3JfZG1hKGRyaXZlKSkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSkgewotCQkJaWYgKGF0aWl4cF9jb25maWdfZHJpdmVfZm9yX2RtYShkcml2ZSkpCi0JCQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOwotCQl9Ci0KLQkJZ290byBmYXN0X2F0YV9waW87Ci0KLQl9IGVsc2UgaWYgKChpZC0+Y2FwYWJpbGl0eSAmIDgpIHx8IChpZC0+ZmllbGRfdmFsaWQgJiAyKSkgewotZmFzdF9hdGFfcGlvOgorCWlmIChpZGVfdXNlX2Zhc3RfcGlvKGRyaXZlKSkgewogCQl0c3BlZWQgPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIDI1NSwgNSwgTlVMTCk7CiAJCXNwZWVkID0gYXRpaXhwX2RtYV8yX3BpbyhYRkVSX1BJT18wICsgdHNwZWVkKSArIFhGRVJfUElPXzA7Ci0JCWh3aWYtPnNwZWVkcHJvYyhkcml2ZSwgc3BlZWQpOwotCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJCWF0aWl4cF9zcGVlZHByb2MoZHJpdmUsIHNwZWVkKTsKIAl9Ci0JLyogSU9SRFkgbm90IHN1cHBvcnRlZCAqLwotCXJldHVybiAwOworCisJcmV0dXJuIC0xOwogfQogCiAvKioKQEAgLTMxOCw4ICszMDUsOCBAQAogCWVsc2UKIAkJaHdpZi0+dWRtYV9mb3VyID0gMDsKIAotCWh3aWYtPmlkZV9kbWFfaG9zdF9vbiA9ICZhdGlpeHBfaWRlX2RtYV9ob3N0X29uOwotCWh3aWYtPmlkZV9kbWFfaG9zdF9vZmYgPSAmYXRpaXhwX2lkZV9kbWFfaG9zdF9vZmY7CisJaHdpZi0+ZG1hX2hvc3Rfb24gPSAmYXRpaXhwX2RtYV9ob3N0X29uOworCWh3aWYtPmRtYV9ob3N0X29mZiA9ICZhdGlpeHBfZG1hX2hvc3Rfb2ZmOwogCWh3aWYtPmlkZV9kbWFfY2hlY2sgPSAmYXRpaXhwX2RtYV9jaGVjazsKIAlpZiAoIW5vYXV0b2RtYSkKIAkJaHdpZi0+YXV0b2RtYSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMKaW5kZXggYWVlOTQ3ZS4uNDlkZjI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYwpAQCAtNDY2LDM2ICs0NjYsMjEgQEAKIAlpZiAoIXNwZWVkKQogCQlyZXR1cm4gMDsKIAotCWlmKGlkZV9zZXRfeGZlcl9yYXRlKGRyaXZlLCBzcGVlZCkpCi0JCXJldHVybiAwOyAKLQotCWlmICghZHJpdmUtPmluaXRfc3BlZWQpCi0JCWRyaXZlLT5pbml0X3NwZWVkID0gc3BlZWQ7CisJaWYgKGNtZDY0eF90dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKSkKKwkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gaWRlX2RtYV9lbmFibGUoZHJpdmUpOwogfQogCiBzdGF0aWMgaW50IGNtZDY0eF9jb25maWdfZHJpdmVfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7CisJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAoKGlkICE9IE5VTEwpICYmICgoaWQtPmNhcGFiaWxpdHkgJiAxKSAhPSAwKSAmJiBkcml2ZS0+YXV0b2RtYSkgewotCi0JCWlmIChpZGVfdXNlX2RtYShkcml2ZSkpIHsKLQkJCWlmIChjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKLQkJCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vbihkcml2ZSk7Ci0JCX0KLQotCQlnb3RvIGZhc3RfYXRhX3BpbzsKLQotCX0gZWxzZSBpZiAoKGlkLT5jYXBhYmlsaXR5ICYgOCkgfHwgKGlkLT5maWVsZF92YWxpZCAmIDIpKSB7Ci1mYXN0X2F0YV9waW86CisJaWYgKGlkZV91c2VfZmFzdF9waW8oZHJpdmUpKQogCQljb25maWdfY2hpcHNldF9mb3JfcGlvKGRyaXZlLCAxKTsKLQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotCX0KLQkvKiBJT1JEWSBub3Qgc3VwcG9ydGVkICovCi0JcmV0dXJuIDA7CisKKwlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgY21kNjR4X2FsdF9kbWFfc3RhdHVzIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQpAQCAtNTE4LDEzICs1MDMsMTMgQEAKIAogCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwogCS8qIHJlYWQgRE1BIGNvbW1hbmQgc3RhdGUgKi8KLQlkbWFfY21kID0gaHdpZi0+SU5CKGh3aWYtPmRtYV9jb21tYW5kKTsKKwlkbWFfY21kID0gaW5iKGh3aWYtPmRtYV9jb21tYW5kKTsKIAkvKiBzdG9wIERNQSAqLwotCWh3aWYtPk9VVEIoKGRtYV9jbWQgJiB+MSksIGh3aWYtPmRtYV9jb21tYW5kKTsKKwlvdXRiKGRtYV9jbWQgJiB+MSwgaHdpZi0+ZG1hX2NvbW1hbmQpOwogCS8qIGdldCBETUEgc3RhdHVzICovCi0JZG1hX3N0YXQgPSBod2lmLT5JTkIoaHdpZi0+ZG1hX3N0YXR1cyk7CisJZG1hX3N0YXQgPSBpbmIoaHdpZi0+ZG1hX3N0YXR1cyk7CiAJLyogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCi0JaHdpZi0+T1VUQihkbWFfc3RhdHw2LCBod2lmLT5kbWFfc3RhdHVzKTsKKwlvdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX3N0YXR1cyk7CiAJaWYgKGNtZDY0eF9hbHRfZG1hX3N0YXR1cyhkZXYpKSB7CiAJCXU4IGRtYV9pbnRyCT0gMDsKIAkJdTggZG1hX21hc2sJPSAoaHdpZi0+Y2hhbm5lbCkgPyBBUlRUSU0yM19JTlRSX0NIMSA6CkBAIC01NDYsNyArNTMxLDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CQk9IGh3aWYtPnBjaV9kZXY7CiAgICAgICAgIHU4IGRtYV9hbHRfc3RhdCA9IDAsIG1hc2sJPSAoaHdpZi0+Y2hhbm5lbCkgPyBNUkRNT0RFX0lOVFJfQ0gxIDoKIAkJCQkJCQkgICAgTVJETU9ERV9JTlRSX0NIMDsKLQl1OCBkbWFfc3RhdCA9IGh3aWYtPklOQihod2lmLT5kbWFfc3RhdHVzKTsKKwl1OCBkbWFfc3RhdCA9IGluYihod2lmLT5kbWFfc3RhdHVzKTsKIAogCSh2b2lkKSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIE1SRE1PREUsICZkbWFfYWx0X3N0YXQpOwogI2lmZGVmIERFQlVHCkBAIC01NzYsMTMgKzU2MSwxMyBAQAogCiAJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CiAJLyogZ2V0IERNQSBzdGF0dXMgKi8KLQlkbWFfc3RhdCA9IGh3aWYtPklOQihod2lmLT5kbWFfc3RhdHVzKTsKKwlkbWFfc3RhdCA9IGluYihod2lmLT5kbWFfc3RhdHVzKTsKIAkvKiByZWFkIERNQSBjb21tYW5kIHN0YXRlICovCi0JZG1hX2NtZCA9IGh3aWYtPklOQihod2lmLT5kbWFfY29tbWFuZCk7CisJZG1hX2NtZCA9IGluYihod2lmLT5kbWFfY29tbWFuZCk7CiAJLyogc3RvcCBETUEgKi8KLQlod2lmLT5PVVRCKChkbWFfY21kICYgfjEpLCBod2lmLT5kbWFfY29tbWFuZCk7CisJb3V0YihkbWFfY21kICYgfjEsIGh3aWYtPmRtYV9jb21tYW5kKTsKIAkvKiBjbGVhciB0aGUgSU5UUiAmIEVSUk9SIGJpdHMgKi8KLQlod2lmLT5PVVRCKGRtYV9zdGF0fDYsIGh3aWYtPmRtYV9zdGF0dXMpOworCW91dGIoZG1hX3N0YXQgfCA2LCBod2lmLT5kbWFfc3RhdHVzKTsKIAkvKiBhbmQgZnJlZSBhbnkgRE1BIHJlc291cmNlcyAqLwogCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKIAkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMKaW5kZXggYmE2Nzg2YS4uNDAwODU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MjAuYwpAQCAtMTMyLDEyICsxMzIsMTEgQEAKIAogc3RhdGljIGludCBjczU1MjBfY29uZmlnX2RyaXZlX3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCiAJLyogVHVuZSB0aGUgZHJpdmUgZm9yIFBJTyBtb2RlcyB1cCB0byBQSU8gNCAqLwkKIAljczU1MjBfdHVuZV9kcml2ZShkcml2ZSwgNCk7CisKIAkvKiBUaGVuIHRlbGwgdGhlIGNvcmUgdG8gdXNlIERNQSBvcGVyYXRpb25zICovCi0JcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jCmluZGV4IDliZjVmZGYuLmIyZDdjMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MzAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTMwLmMKQEAgLTgxLDggKzgxLDggQEAKIAogCXBpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgcGlvLCA0LCBOVUxMKTsKIAlpZiAoIWNzNTUzMF9zZXRfeGZlcl9tb2RlKGRyaXZlLCBtb2Rlc1twaW9dKSkgewotCQlmb3JtYXQgPSAoaHdpZi0+SU5MKGJhc2VyZWcrNCkgPj4gMzEpICYgMTsKLQkJaHdpZi0+T1VUTChjczU1MzBfcGlvX3RpbWluZ3NbZm9ybWF0XVtwaW9dLAorCQlmb3JtYXQgPSAoaW5sKGJhc2VyZWcgKyA0KSA+PiAzMSkgJiAxOworCQlvdXRsKGNzNTUzMF9waW9fdGltaW5nc1tmb3JtYXRdW3Bpb10sCiAJCQliYXNlcmVnKyhkcml2ZS0+c2VsZWN0LmIudW5pdDw8MykpOwogCX0KIH0KQEAgLTEwMywxNiArMTAzLDEzIEBACiAJaW50CQkJdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OwogCWlkZV9kcml2ZV90CQkqbWF0ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF4xXTsKIAlzdHJ1Y3QgaGRfZHJpdmVpZAkqaWQgPSBkcml2ZS0+aWQ7Ci0JdW5zaWduZWQgaW50CQlyZWcsIHRpbWluZ3M7CisJdW5zaWduZWQgaW50CQlyZWcsIHRpbWluZ3MgPSAwOwogCXVuc2lnbmVkIGxvbmcJCWJhc2VyZWc7CiAKIAkvKgogCSAqIERlZmF1bHQgdG8gRE1BLW9mZiBpbiBjYXNlIHdlIHJ1biBpbnRvIHRyb3VibGUgaGVyZS4KIAkgKi8KLQlod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKLQkvKiB0dXJuIG9mZiBETUEgd2hpbGUgd2UgZmlkZGxlICovCi0JaHdpZi0+aWRlX2RtYV9ob3N0X29mZihkcml2ZSk7Ci0JLyogY2xlYXIgRE1BX2NhcGFibGUgYml0ICovCisJaHdpZi0+ZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKIAogCS8qCiAJICogVGhlIENTNTUzMCBzcGVjaWZpZXMgdGhhdCB0d28gZHJpdmVzIHNoYXJpbmcgYSBjYWJsZSBjYW5ub3QKQEAgLTE4MiwzMCArMTc5LDI0IEBACiAJCWNhc2UgWEZFUl9NV19ETUFfMToJdGltaW5ncyA9IDB4MDAwMTIxMjE7IGJyZWFrOwogCQljYXNlIFhGRVJfTVdfRE1BXzI6CXRpbWluZ3MgPSAweDAwMDAyMDIwOyBicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNzNTUzMF9jb25maWdfZG1hOiBodWg/IG1vZGU9JTAyeFxuIiwKLQkJCQlkcml2ZS0+bmFtZSwgbW9kZSk7Ci0JCQlyZXR1cm4gMTsJLyogZmFpbHVyZSAqLworCQkJQlVHKCk7CisJCQlicmVhazsKIAl9CiAJYmFzZXJlZyA9IENTNTUzMF9CQVNFUkVHKGh3aWYpOwotCXJlZyA9IGh3aWYtPklOTChiYXNlcmVnKzQpOwkJLyogZ2V0IGRyaXZlMCBjb25maWcgcmVnaXN0ZXIgKi8KKwlyZWcgPSBpbmwoYmFzZXJlZyArIDQpOwkJCS8qIGdldCBkcml2ZTAgY29uZmlnIHJlZ2lzdGVyICovCiAJdGltaW5ncyB8PSByZWcgJiAweDgwMDAwMDAwOwkJLyogcHJlc2VydmUgUElPIGZvcm1hdCBiaXQgKi8KIAlpZiAodW5pdCA9PSAwKSB7CQkJLyogYXJlIHdlIGNvbmZpZ3VyaW5nIGRyaXZlMD8gKi8KLQkJaHdpZi0+T1VUTCh0aW1pbmdzLCBiYXNlcmVnKzQpOwkvKiB3cml0ZSBkcml2ZTAgY29uZmlnIHJlZ2lzdGVyICovCisJCW91dGwodGltaW5ncywgYmFzZXJlZyArIDQpOwkvKiB3cml0ZSBkcml2ZTAgY29uZmlnIHJlZ2lzdGVyICovCiAJfSBlbHNlIHsKIAkJaWYgKHRpbWluZ3MgJiAweDAwMTAwMDAwKQogCQkJcmVnIHw9ICAweDAwMTAwMDAwOwkvKiBlbmFibGUgVURNQSB0aW1pbmdzIGZvciBib3RoIGRyaXZlcyAqLwogCQllbHNlCiAJCQlyZWcgJj0gfjB4MDAxMDAwMDA7CS8qIGRpc2FibGUgVURNQSB0aW1pbmdzIGZvciBib3RoIGRyaXZlcyAqLwotCQlod2lmLT5PVVRMKHJlZywgICAgIGJhc2VyZWcrNCk7CS8qIHdyaXRlIGRyaXZlMCBjb25maWcgcmVnaXN0ZXIgKi8KLQkJaHdpZi0+T1VUTCh0aW1pbmdzLCBiYXNlcmVnKzEyKTsJLyogd3JpdGUgZHJpdmUxIGNvbmZpZyByZWdpc3RlciAqLworCQlvdXRsKHJlZywgYmFzZXJlZyArIDQpOwkJLyogd3JpdGUgZHJpdmUwIGNvbmZpZyByZWdpc3RlciAqLworCQlvdXRsKHRpbWluZ3MsIGJhc2VyZWcgKyAxMik7CS8qIHdyaXRlIGRyaXZlMSBjb25maWcgcmVnaXN0ZXIgKi8KIAl9Ci0JKHZvaWQpIGh3aWYtPmlkZV9kbWFfaG9zdF9vbihkcml2ZSk7Ci0JLyogc2V0IERNQV9jYXBhYmxlIGJpdCAqLwogCi0JLyoKLQkgKiBGaW5hbGx5LCB0dXJuIERNQSBvbiBpbiBzb2Z0d2FyZSwgYW5kIGV4aXQuCi0JICovCi0JcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOwkvKiBzdWNjZXNzICovCisJcmV0dXJuIDA7CS8qIHN1Y2Nlc3MgKi8KIH0KIAogLyoqCkBAIC0zMjEsMTcgKzMxMiwxNyBAQAogCiAJaHdpZi0+dHVuZXByb2MgPSAmY3M1NTMwX3R1bmVwcm9jOwogCWJhc2VyZWcgPSBDUzU1MzBfQkFTRVJFRyhod2lmKTsKLQlkMF90aW1pbmdzID0gaHdpZi0+SU5MKGJhc2VyZWcrMCk7CisJZDBfdGltaW5ncyA9IGlubChiYXNlcmVnICsgMCk7CiAJaWYgKENTNTUzMF9CQURfUElPKGQwX3RpbWluZ3MpKSB7CiAJCS8qIFBJTyB0aW1pbmdzIG5vdCBpbml0aWFsaXplZD8gKi8KLQkJaHdpZi0+T1VUTChjczU1MzBfcGlvX3RpbWluZ3NbKGQwX3RpbWluZ3M+PjMxKSYxXVswXSwgYmFzZXJlZyswKTsKKwkJb3V0bChjczU1MzBfcGlvX3RpbWluZ3NbKGQwX3RpbWluZ3MgPj4gMzEpICYgMV1bMF0sIGJhc2VyZWcgKyAwKTsKIAkJaWYgKCFod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUpCiAJCQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOwogCQkJLyogbmVlZHMgYXV0b3R1bmluZyBsYXRlciAqLwogCX0KLQlpZiAoQ1M1NTMwX0JBRF9QSU8oaHdpZi0+SU5MKGJhc2VyZWcrOCkpKSB7Ci0JLyogUElPIHRpbWluZ3Mgbm90IGluaXRpYWxpemVkPyAqLwotCQlod2lmLT5PVVRMKGNzNTUzMF9waW9fdGltaW5nc1soZDBfdGltaW5ncz4+MzEpJjFdWzBdLCBiYXNlcmVnKzgpOworCWlmIChDUzU1MzBfQkFEX1BJTyhpbmwoYmFzZXJlZyArIDgpKSkgeworCQkvKiBQSU8gdGltaW5ncyBub3QgaW5pdGlhbGl6ZWQ/ICovCisJCW91dGwoY3M1NTMwX3Bpb190aW1pbmdzWyhkMF90aW1pbmdzID4+IDMxKSAmIDFdWzBdLCBiYXNlcmVnICsgOCk7CiAJCWlmICghaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lKQogCQkJaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lID0gMTsKIAkJCS8qIG5lZWRzIGF1dG90dW5pbmcgbGF0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MzUuYyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MzUuYwppbmRleCA1YzVhZWMyLi40NWY0M2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jCkBAIC0xOTUsMjggKzE5NSwxOSBAQAogCiBzdGF0aWMgaW50IGNzNTUzNV9kbWFfY2hlY2soaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7CiAJdTggc3BlZWQ7CiAKIAlkcml2ZS0+aW5pdF9zcGVlZCA9IDA7CiAKLQlpZiAoKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgZHJpdmUtPmF1dG9kbWEpIHsKLQkJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSkgewotCQkJaWYgKGNzNTUzNV9jb25maWdfZHJpdmVfZm9yX2RtYShkcml2ZSkpCi0JCQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOwotCQl9CisJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjczU1MzVfY29uZmlnX2RyaXZlX2Zvcl9kbWEoZHJpdmUpKQorCQlyZXR1cm4gMDsKIAotCQlnb3RvIGZhc3RfYXRhX3BpbzsKLQotCX0gZWxzZSBpZiAoKGlkLT5jYXBhYmlsaXR5ICYgOCkgfHwgKGlkLT5maWVsZF92YWxpZCAmIDIpKSB7Ci1mYXN0X2F0YV9waW86CisJaWYgKGlkZV91c2VfZmFzdF9waW8oZHJpdmUpKSB7CiAJCXNwZWVkID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDQsIE5VTEwpOwogCQljczU1MzVfc2V0X2RyaXZlKGRyaXZlLCBzcGVlZCk7Ci0JCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKIAl9Ci0JLyogSU9SRFkgbm90IHN1cHBvcnRlZCAqLwotCXJldHVybiAwOworCisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgdTggX19kZXZpbml0IGNzNTUzNV9jYWJsZV9kZXRlY3Qoc3RydWN0IHBjaV9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jeTgyYzY5My5jIGIvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMKaW5kZXggOWVhZmNiZi4uMTAzYjlkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMKQEAgLTE5Nyw4ICsxOTcsOCBAQAogI2lmIENZODJDNjkzX0RFQlVHX0xPR1MKIAkvKiBmb3IgZGVidWcgbGV0J3Mgc2hvdyB0aGUgcHJldmlvdXMgdmFsdWVzICovCiAKLQlIV0lGKGRyaXZlKS0+T1VUQihpbmRleCwgQ1k4Ml9JTkRFWF9QT1JUKTsKLQlkYXRhID0gSFdJRihkcml2ZSktPklOQihDWTgyX0RBVEFfUE9SVCk7CisJb3V0YihpbmRleCwgQ1k4Ml9JTkRFWF9QT1JUKTsKKwlkYXRhID0gaW5iKENZODJfREFUQV9QT1JUKTsKIAogCXByaW50ayAoS0VSTl9JTkZPICIlcyAoY2g9JWQsIGRldj0lZCk6IERNQSBtb2RlIGlzICVkIChzaW5nbGU9JWQpXG4iLAogCQlkcml2ZS0+bmFtZSwgSFdJRihkcml2ZSktPmNoYW5uZWwsIGRyaXZlLT5zZWxlY3QuYi51bml0LApAQCAtMjA3LDggKzIwNyw4IEBACiAKIAlkYXRhID0gKHU4KW1vZGV8KHU4KShzaW5nbGU8PDIpOwogCi0JSFdJRihkcml2ZSktPk9VVEIoaW5kZXgsIENZODJfSU5ERVhfUE9SVCk7Ci0JSFdJRihkcml2ZSktPk9VVEIoZGF0YSwgQ1k4Ml9EQVRBX1BPUlQpOworCW91dGIoaW5kZXgsIENZODJfSU5ERVhfUE9SVCk7CisJb3V0YihkYXRhLCBDWTgyX0RBVEFfUE9SVCk7CiAKICNpZiBDWTgyQzY5M19ERUJVR19JTkZPCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgKGNoPSVkLCBkZXY9JWQpOiBzZXQgRE1BIG1vZGUgdG8gJWQgKHNpbmdsZT0lZClcbiIsCkBAIC0yMjcsOCArMjI3LDggQEAKIAkgKi8KIAogCWRhdGEgPSBCVVNNQVNURVJfVElNRU9VVDsKLQlIV0lGKGRyaXZlKS0+T1VUQihDWTgyX0lOREVYX1RJTUVPVVQsIENZODJfSU5ERVhfUE9SVCk7Ci0JSFdJRihkcml2ZSktPk9VVEIoZGF0YSwgQ1k4Ml9EQVRBX1BPUlQpOworCW91dGIoQ1k4Ml9JTkRFWF9USU1FT1VULCBDWTgyX0lOREVYX1BPUlQpOworCW91dGIoZGF0YSwgQ1k4Ml9EQVRBX1BPUlQpOwogCiAjaWYgQ1k4MkM2OTNfREVCVUdfSU5GTwkKIAlwcmludGsgKEtFUk5fSU5GTyAiJXM6IFNldCBJREUgQnVzIE1hc3RlciBUaW1lT3V0IFJlZ2lzdGVyIHRvIDB4JVhcbiIsCkBAIC00NzgsMjEgKzQ3OCwxOCBAQAogCX0KIH0KIAotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgY3k4MmM2OTNfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewotCXsJLyogMCAqLwotCQkubmFtZQkJPSAiQ1k4MkM2OTMiLAotCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2N5ODJjNjkzLAotCQkuaW5pdF9pb3BzCT0gaW5pdF9pb3BzX2N5ODJjNjkzLAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2N5ODJjNjkzLAotCQkuY2hhbm5lbHMJPSAxLAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAotCX0KK3N0YXRpYyBpZGVfcGNpX2RldmljZV90IGN5ODJjNjkzX2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKKwkubmFtZQkJPSAiQ1k4MkM2OTMiLAorCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfY3k4MmM2OTMsCisJLmluaXRfaW9wcwk9IGluaXRfaW9wc19jeTgyYzY5MywKKwkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2N5ODJjNjkzLAorCS5jaGFubmVscwk9IDEsCisJLmF1dG9kbWEJPSBBVVRPRE1BLAorCS5ib290YWJsZQk9IE9OX0JPQVJELAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgY3k4MmM2OTNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWlkZV9wY2lfZGV2aWNlX3QgKmQgPSAmY3k4MmM2OTNfY2hpcHNldHNbaWQtPmRyaXZlcl9kYXRhXTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2MjsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIApAQCAtNTAxLDcgKzQ5OCw3IEBACiAgICAgICAgIGlmICgoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUgJiYKIAkgICAgUENJX0ZVTkMoZGV2LT5kZXZmbikgPT0gMSkgewogCQlkZXYyID0gcGNpX2dldF9zbG90KGRldi0+YnVzLCBkZXYtPmRldmZuICsgMSk7Ci0JCXJldCA9IGlkZV9zZXR1cF9wY2lfZGV2aWNlcyhkZXYsIGRldjIsIGQpOworCQlyZXQgPSBpZGVfc2V0dXBfcGNpX2RldmljZXMoZGV2LCBkZXYyLCAmY3k4MmM2OTNfY2hpcHNldCk7CiAJCS8qIFdlIGxlYWsgcGNpIHJlZnMgaGVyZSBidXQgdGhhdHMgb2sgLSB3ZSBjYW4ndCBiZSB1bmxvYWRlZCAqLwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCmluZGV4IGNlN2IwOGYuLjkyNGVhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMKQEAgLTQ4LDE5ICs0OCw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGhwdDM0eF9jbGVhcl9jaGlwc2V0IChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldgk9IEhXSUYoZHJpdmUpLT5wY2lfZGV2OwotCXUzMiByZWcxID0gMCwgdG1wMSA9IDAsIHJlZzIgPSAwLCB0bXAyID0gMDsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NDQsICZyZWcxKTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQ4LCAmcmVnMik7Ci0JdG1wMSA9ICgoMHgwMCA8PCAoMypkcml2ZS0+ZG4pKSB8IChyZWcxICYgfig3IDw8ICgzKmRyaXZlLT5kbikpKSk7Ci0JdG1wMiA9IChyZWcyICYgfigweDExIDw8IGRyaXZlLT5kbikpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCB0bXAxKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgdG1wMik7Ci19Ci0KIHN0YXRpYyBpbnQgaHB0MzR4X3R1bmVfY2hpcHNldCAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCB4ZmVyc3BlZWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IEhXSUYoZHJpdmUpLT5wY2lfZGV2OwpAQCAtODEsNyArNjgsNyBAQAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NDQsICZyZWcxKTsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQ4LCAmcmVnMik7CiAJdG1wMSA9ICgobG9fc3BlZWQgPDwgKDMqZHJpdmUtPmRuKSkgfCAocmVnMSAmIH4oNyA8PCAoMypkcml2ZS0+ZG4pKSkpOwotCXRtcDIgPSAoKGhpX3NwZWVkIDw8IGRyaXZlLT5kbikgfCByZWcyKTsKKwl0bXAyID0gKChoaV9zcGVlZCA8PCBkcml2ZS0+ZG4pIHwgKHJlZzIgJiB+KDB4MTEgPDwgZHJpdmUtPmRuKSkpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCB0bXAxKTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgdG1wMik7CiAKQEAgLTk5LDcgKzg2LDYgQEAKIHN0YXRpYyB2b2lkIGhwdDM0eF90dW5lX2RyaXZlIChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHBpbykKIHsKIAlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIHBpbywgNSwgTlVMTCk7Ci0JaHB0MzR4X2NsZWFyX2NoaXBzZXQoZHJpdmUpOwogCSh2b2lkKSBocHQzNHhfdHVuZV9jaGlwc2V0KGRyaXZlLCAoWEZFUl9QSU9fMCArIHBpbykpOwogfQogCkBAIC0xMTcsMzggKzEwMywyNSBAQAogCWlmICghKHNwZWVkKSkKIAkJcmV0dXJuIDA7CiAKLQlocHQzNHhfY2xlYXJfY2hpcHNldChkcml2ZSk7CiAJKHZvaWQpIGhwdDM0eF90dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKIAlyZXR1cm4gaWRlX2RtYV9lbmFibGUoZHJpdmUpOwogfQogCiBzdGF0aWMgaW50IGhwdDM0eF9jb25maWdfZHJpdmVfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBoZF9kcml2ZWlkICppZAk9IGRyaXZlLT5pZDsKLQogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmIChpZCAmJiAoaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBkcml2ZS0+YXV0b2RtYSkgewotCi0JCWlmIChpZGVfdXNlX2RtYShkcml2ZSkpIHsKLQkJCWlmIChjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQogI2lmbmRlZiBDT05GSUdfSFBUMzRYX0FVVE9ETUEKLQkJCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJCXJldHVybiAtMTsKICNlbHNlCi0JCQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOworCQlyZXR1cm4gMDsKICNlbmRpZgotCQl9CiAKLQkJZ290byBmYXN0X2F0YV9waW87Ci0KLQl9IGVsc2UgaWYgKChpZC0+Y2FwYWJpbGl0eSAmIDgpIHx8IChpZC0+ZmllbGRfdmFsaWQgJiAyKSkgewotZmFzdF9hdGFfcGlvOgorCWlmIChpZGVfdXNlX2Zhc3RfcGlvKGRyaXZlKSkKIAkJaHB0MzR4X3R1bmVfZHJpdmUoZHJpdmUsIDI1NSk7Ci0JCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKLQl9Ci0JLyogSU9SRFkgbm90IHN1cHBvcnRlZCAqLwotCXJldHVybiAwOworCisJcmV0dXJuIC0xOwogfQogCiAvKgpAQCAtMjA5LDcgKzE4Miw2IEBACiAKIAlod2lmLT50dW5lcHJvYyA9ICZocHQzNHhfdHVuZV9kcml2ZTsKIAlod2lmLT5zcGVlZHByb2MgPSAmaHB0MzR4X3R1bmVfY2hpcHNldDsKLQlod2lmLT5ub19kc2MgPSAxOwogCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IDE7CiAJaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lID0gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCmluZGV4IDA1YmU4ZmEuLjYwZWNkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKQEAgLTczNiwyNCArNzM2LDE1IEBACiAKIHN0YXRpYyBpbnQgaHB0MzY2X2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7Ci0KIAlkcml2ZS0+aW5pdF9zcGVlZCA9IDA7CiAKLQlpZiAoKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgZHJpdmUtPmF1dG9kbWEpIHsKLQkJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKLQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKKwlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQorCQlyZXR1cm4gMDsKIAotCQlnb3RvIGZhc3RfYXRhX3BpbzsKLQotCX0gZWxzZSBpZiAoKGlkLT5jYXBhYmlsaXR5ICYgOCkgfHwgKGlkLT5maWVsZF92YWxpZCAmIDIpKSB7Ci1mYXN0X2F0YV9waW86CisJaWYgKGlkZV91c2VfZmFzdF9waW8oZHJpdmUpKQogCQlocHQzeHhfdHVuZV9kcml2ZShkcml2ZSwgMjU1KTsKLQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotCX0KLQkvKiBJT1JEWSBub3Qgc3VwcG9ydGVkICovCi0JcmV0dXJuIDA7CisKKwlyZXR1cm4gLTE7CiB9CiAKIC8qCkBAIC04NDEsNyArODMyLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZG1hX3N0YXQgPSBod2lmLT5JTkIoaHdpZi0+ZG1hX3N0YXR1cyk7CisJZG1hX3N0YXQgPSBpbmIoaHdpZi0+ZG1hX3N0YXR1cyk7CiAJLyogcmV0dXJuIDEgaWYgSU5UUiBhc3NlcnRlZCAqLwogCWlmIChkbWFfc3RhdCAmIDQpCiAJCXJldHVybiAxOwpAQCAtMTM5MSw5ICsxMzgyLDYgQEAKIAl1OCBkbWFfbmV3CT0gMCwgZG1hX29sZAk9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghZG1hYmFzZSkKLQkJcmV0dXJuOwotCQkKIAlkbWFfb2xkID0gaHdpZi0+SU5CKGRtYWJhc2UgKyAyKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9pdDgyMTMuYyBiL2RyaXZlcnMvaWRlL3BjaS9pdDgyMTMuYwppbmRleCA2MzI0OGI2Li40MjRmMDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvaXQ4MjEzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2l0ODIxMy5jCkBAIC0yNDQsMTcgKzI0NCwxNSBAQAogCiBzdGF0aWMgaW50IGl0ODIxM19jb25maWdfZHJpdmVfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBwaW87CiAKLQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpKSB7Ci0JCWlmIChjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKLQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKLQl9CisJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwkJcmV0dXJuIDA7CiAKLQlod2lmLT5zcGVlZHByb2MoZHJpdmUsIFhGRVJfUElPXzAKLQkJCSsgaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDQsIE5VTEwpKTsKKwlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIDI1NSwgNCwgTlVMTCk7CisJaXQ4MjEzX3R1bmVfY2hpcHNldChkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7CiAKLSAJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOworCXJldHVybiAtMTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMgYi9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMKaW5kZXggZTliYWQxOC4uYTEzMjc2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9pdDgyMXguYwpAQCAtNTIwLDE0ICs1MjAsMTIgQEAKIAogc3RhdGljIGludCBpdDgyMXhfY29uZmlnX2RyaXZlX2Zvcl9kbWEgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmCT0gZHJpdmUtPmh3aWY7CisJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpKSB7Ci0JCWlmIChjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKLQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKLQl9CiAJY29uZmlnX2l0ODIxeF9jaGlwc2V0X2Zvcl9waW8oZHJpdmUsIDEpOwotCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKworCXJldHVybiAtMTsKIH0KIAogLyoqCkBAIC02MDgsMTEgKzYwNiwxMSBAQAogCQkJCXByaW50aygiLlxuIik7CiAJCQkvKiBOb3cgdGhlIGNvcmUgY29kZSB3aWxsIGhhdmUgd3JvbmdseSBkZWNpZGVkIG5vIERNQQogCQkJICAgc28gd2UgbmVlZCB0byBmaXggdGhpcyAqLwotCQkJaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJCQlod2lmLT5kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwogI2lmZGVmIENPTkZJR19JREVETUFfT05MWURJU0sKIAkJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCiAjZW5kaWYKLQkJCQlod2lmLT5pZGVfZG1hX2NoZWNrKGRyaXZlKTsKKwkJCQlpZGVfc2V0X2RtYShkcml2ZSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBOb24gUkFJRCB2b2x1bWUuIEZpeHVwcyB0byBzdG9wIHRoZSBjb3JlIGNvZGUKIAkJCSAgIGRvaW5nIHVuc3VwcG9ydGVkIHRoaW5ncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2ptaWNyb24uYyBiL2RyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMKaW5kZXggZjA3YmJiZS4uNTNmMjU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2ptaWNyb24uYworKysgYi9kcml2ZXJzL2lkZS9wY2kvam1pY3Jvbi5jCkBAIC0xNDcsNyArMTQ3LDkgQEAKIHsKIAl1OCBzcGVlZAk9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIGptaWNyb25fcmF0ZW1hc2soZHJpdmUpKTsKIAotCWNvbmZpZ19qbWljcm9uX2NoaXBzZXRfZm9yX3Bpbyhkcml2ZSwgIXNwZWVkKTsKKwlpZiAoIXNwZWVkKQorCQlyZXR1cm4gMDsKKwogCWptaWNyb25fdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCk7CiAJcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKIH0KQEAgLTE2MiwxNCArMTY0LDEyIEBACiAKIHN0YXRpYyBpbnQgam1pY3Jvbl9jb25maWdfZHJpdmVfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKKwlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQorCQlyZXR1cm4gMDsKIAotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkpIHsKLQkJaWYgKGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQotCQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOwotCX0KIAljb25maWdfam1pY3Jvbl9jaGlwc2V0X2Zvcl9waW8oZHJpdmUsIDEpOwotCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKworCXJldHVybiAtMTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jIGIvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYwppbmRleCA4YWFlYTRlLi5iMzEwYzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMKQEAgLTE2NiwxMCArMTY2LDEwIEBACiAJLyogZ2V0IGRtYSBjb21tYW5kIG1vZGUgKi8KIAlkbWFfY21kID0gaHdpZi0+SU5CKGh3aWYtPmRtYV9jb21tYW5kKTsKIAkvKiBzdG9wIERNQSAqLwotCWh3aWYtPk9VVEIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfY29tbWFuZCk7CisJb3V0YihkbWFfY21kICYgfjEsIGh3aWYtPmRtYV9jb21tYW5kKTsKIAkvKiBmcm9tIEVSUkFUQTogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCiAJZG1hX2NtZCA9IGh3aWYtPklOQihod2lmLT5kbWFfY29tbWFuZCk7Ci0JaHdpZi0+T1VUQihkbWFfY21kfDYsIGh3aWYtPmRtYV9jb21tYW5kKTsKKwlvdXRiKGRtYV9jbWQgfCA2LCBod2lmLT5kbWFfY29tbWFuZCk7CiAJLyogYW5kIGZyZWUgYW55IERNQSByZXNvdXJjZXMgKi8KIAlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CiAJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwpAQCAtMTkwLDcgKzE5MCw4IEBACiBzdGF0aWMgaW50IG5zODc0MTVfaWRlX2RtYV9jaGVjayAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spCi0JCXJldHVybiBIV0lGKGRyaXZlKS0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJCXJldHVybiAtMTsKKwogCXJldHVybiBfX2lkZV9kbWFfY2hlY2soZHJpdmUpOwogfQogCkBAIC0yNDMsOSArMjQ0LDkgQEAKIAkJICogICAgICB0byBTRUxFQ1RfRFJJVkUoKSBwcm9wZXJseSBkdXJpbmcgZmlyc3QgcHJvYmVfaHdpZigpLgogCQkgKi8KIAkJdGltZW91dCA9IDEwMDAwOwotCQlod2lmLT5PVVRCKDEyLCBod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdKTsKKwkJb3V0YigxMiwgaHdpZi0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSk7CiAJCXVkZWxheSgxMCk7Ci0JCWh3aWYtPk9VVEIoOCwgaHdpZi0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSk7CisJCW91dGIoOCwgaHdpZi0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSk7CiAJCWRvIHsKIAkJCXVkZWxheSg1MCk7CiAJCQlzdGF0ID0gaHdpZi0+SU5CKGh3aWYtPmlvX3BvcnRzW0lERV9TVEFUVVNfT0ZGU0VUXSk7CkBAIC0yNjMsNyArMjY0LDcgQEAKIAlpZiAoIWh3aWYtPmRtYV9iYXNlKQogCQlyZXR1cm47CiAKLQlod2lmLT5PVVRCKDB4NjAsIGh3aWYtPmRtYV9zdGF0dXMpOworCW91dGIoMHg2MCwgaHdpZi0+ZG1hX3N0YXR1cyk7CiAJaHdpZi0+ZG1hX3NldHVwID0gJm5zODc0MTVfaWRlX2RtYV9zZXR1cDsKIAlod2lmLT5pZGVfZG1hX2NoZWNrID0gJm5zODc0MTVfaWRlX2RtYV9jaGVjazsKIAlod2lmLT5pZGVfZG1hX2VuZCA9ICZuczg3NDE1X2lkZV9kbWFfZW5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL29wdGk2MjEuYyBiL2RyaXZlcnMvaWRlL3BjaS9vcHRpNjIxLmMKaW5kZXggMjJiYmY2MS4uOWNhNjBkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL29wdGk2MjEuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvb3B0aTYyMS5jCkBAIC0xNzYsMzQgKzE3NiwzNSBAQAogCXJldHVybiAoKHRpbWUqYnVzX3NwZWVkKzk5OSkvMTAwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlX3JlZyhpZGVfaHdpZl90ICpod2lmLCB1OCB2YWx1ZSwgaW50IHJlZykKIC8qIFdyaXRlIHZhbHVlIHRvIHJlZ2lzdGVyIHJlZywgYmFzZSBvZiByZWdpc3RlcgogICogaXMgYXQgcmVnX2Jhc2UgKDB4MWYwIHByaW1hcnksIDB4MTcwIHNlY29uZGFyeSwKICAqIGlmIG5vdCBjaGFuZ2VkIGJ5IFBDSSBjb25maWd1cmF0aW9uKS4KICAqIFRoaXMgaXMgZnJvbSBzZXR1cHZpYy5leGUgcHJvZ3JhbS4KICAqLworc3RhdGljIHZvaWQgd3JpdGVfcmVnKHU4IHZhbHVlLCBpbnQgcmVnKQogewotCWh3aWYtPklOVyhyZWdfYmFzZSsxKTsKLQlod2lmLT5JTlcocmVnX2Jhc2UrMSk7Ci0JaHdpZi0+T1VUQigzLCByZWdfYmFzZSsyKTsKLQlod2lmLT5PVVRCKHZhbHVlLCByZWdfYmFzZStyZWcpOwotCWh3aWYtPk9VVEIoMHg4MywgcmVnX2Jhc2UrMik7CisJaW53KHJlZ19iYXNlICsgMSk7CisJaW53KHJlZ19iYXNlICsgMSk7CisJb3V0YigzLCByZWdfYmFzZSArIDIpOworCW91dGIodmFsdWUsIHJlZ19iYXNlICsgcmVnKTsKKwlvdXRiKDB4ODMsIHJlZ19iYXNlICsgMik7CiB9CiAKLXN0YXRpYyB1OCByZWFkX3JlZyhpZGVfaHdpZl90ICpod2lmLCBpbnQgcmVnKQogLyogUmVhZCB2YWx1ZSBmcm9tIHJlZ2lzdGVyIHJlZywgYmFzZSBvZiByZWdpc3RlcgogICogaXMgYXQgcmVnX2Jhc2UgKDB4MWYwIHByaW1hcnksIDB4MTcwIHNlY29uZGFyeSwKICAqIGlmIG5vdCBjaGFuZ2VkIGJ5IFBDSSBjb25maWd1cmF0aW9uKS4KICAqIFRoaXMgaXMgZnJvbSBzZXR1cHZpYy5leGUgcHJvZ3JhbS4KICAqLworc3RhdGljIHU4IHJlYWRfcmVnKGludCByZWcpCiB7CiAJdTggcmV0ID0gMDsKIAotCWh3aWYtPklOVyhyZWdfYmFzZSsxKTsKLQlod2lmLT5JTlcocmVnX2Jhc2UrMSk7Ci0JaHdpZi0+T1VUQigzLCByZWdfYmFzZSsyKTsKLQlyZXQgPSBod2lmLT5JTkIocmVnX2Jhc2UrcmVnKTsKLQlod2lmLT5PVVRCKDB4ODMsIHJlZ19iYXNlKzIpOworCWludyhyZWdfYmFzZSArIDEpOworCWludyhyZWdfYmFzZSArIDEpOworCW91dGIoMywgcmVnX2Jhc2UgKyAyKTsKKwlyZXQgPSBpbmIocmVnX2Jhc2UgKyByZWcpOworCW91dGIoMHg4MywgcmVnX2Jhc2UgKyAyKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI4NiwzOSArMjg3LDM5IEBACiAgICAgIAlyZWdfYmFzZSA9IGh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF07CiAKIAkvKiBhbGxvdyBSZWdpc3Rlci1CICovCi0JaHdpZi0+T1VUQigweGMwLCByZWdfYmFzZStDTlRSTF9SRUcpOworCW91dGIoMHhjMCwgcmVnX2Jhc2UgKyBDTlRSTF9SRUcpOwogCS8qIGhtbSwgc2V0dXB2aWMuZXhlIGRvZXMgdGhpcyA7LSkgKi8KLQlod2lmLT5PVVRCKDB4ZmYsIHJlZ19iYXNlKzUpOworCW91dGIoMHhmZiwgcmVnX2Jhc2UgKyA1KTsKIAkvKiBpZiByZWFkcyAweGZmLCBhZGFwdGVyIG5vdCBleGlzdD8gKi8KLQkodm9pZCkgaHdpZi0+SU5CKHJlZ19iYXNlK0NOVFJMX1JFRyk7CisJKHZvaWQpaW5iKHJlZ19iYXNlICsgQ05UUkxfUkVHKTsKIAkvKiBpZiByZWFkcyAweGMwLCBubyBpbnRlcmZhY2UgZXhpc3Q/ICovCi0JcmVhZF9yZWcoaHdpZiwgQ05UUkxfUkVHKTsKKwlyZWFkX3JlZyhDTlRSTF9SRUcpOwogCS8qIHJlYWQgdmVyc2lvbiwgcHJvYmFibHkgMCAqLwotCXJlYWRfcmVnKGh3aWYsIFNUUkFQX1JFRyk7CisJcmVhZF9yZWcoU1RSQVBfUkVHKTsKIAogCS8qIHByb2dyYW0gcHJpbWFyeSBkcml2ZSAqLwotCQkvKiBzZWxlY3QgSW5kZXgtMCBmb3IgUmVnaXN0ZXItQSAqLwotCXdyaXRlX3JlZyhod2lmLCAwLCAgICAgIE1JU0NfUkVHKTsKLQkJLyogc2V0IHJlYWQgY3ljbGUgdGltaW5ncyAqLwotCXdyaXRlX3JlZyhod2lmLCBjeWNsZTEsIFJFQURfUkVHKTsKLQkJLyogc2V0IHdyaXRlIGN5Y2xlIHRpbWluZ3MgKi8KLQl3cml0ZV9yZWcoaHdpZiwgY3ljbGUxLCBXUklURV9SRUcpOworCS8qIHNlbGVjdCBJbmRleC0wIGZvciBSZWdpc3Rlci1BICovCisJd3JpdGVfcmVnKDAsIE1JU0NfUkVHKTsKKwkvKiBzZXQgcmVhZCBjeWNsZSB0aW1pbmdzICovCisJd3JpdGVfcmVnKGN5Y2xlMSwgUkVBRF9SRUcpOworCS8qIHNldCB3cml0ZSBjeWNsZSB0aW1pbmdzICovCisJd3JpdGVfcmVnKGN5Y2xlMSwgV1JJVEVfUkVHKTsKIAogCS8qIHByb2dyYW0gc2Vjb25kYXJ5IGRyaXZlICovCi0JCS8qIHNlbGVjdCBJbmRleC0xIGZvciBSZWdpc3Rlci1CICovCi0Jd3JpdGVfcmVnKGh3aWYsIDEsICAgICAgTUlTQ19SRUcpOwotCQkvKiBzZXQgcmVhZCBjeWNsZSB0aW1pbmdzICovCi0Jd3JpdGVfcmVnKGh3aWYsIGN5Y2xlMiwgUkVBRF9SRUcpOwotCQkvKiBzZXQgd3JpdGUgY3ljbGUgdGltaW5ncyAqLwotCXdyaXRlX3JlZyhod2lmLCBjeWNsZTIsIFdSSVRFX1JFRyk7CisJLyogc2VsZWN0IEluZGV4LTEgZm9yIFJlZ2lzdGVyLUIgKi8KKwl3cml0ZV9yZWcoMSwgTUlTQ19SRUcpOworCS8qIHNldCByZWFkIGN5Y2xlIHRpbWluZ3MgKi8KKwl3cml0ZV9yZWcoY3ljbGUyLCBSRUFEX1JFRyk7CisJLyogc2V0IHdyaXRlIGN5Y2xlIHRpbWluZ3MgKi8KKwl3cml0ZV9yZWcoY3ljbGUyLCBXUklURV9SRUcpOwogCiAJLyogdXNlIFJlZ2lzdGVyLUEgZm9yIGRyaXZlIDAgKi8KIAkvKiB1c2UgUmVnaXN0ZXItQiBmb3IgZHJpdmUgMSAqLwotCXdyaXRlX3JlZyhod2lmLCAweDg1LCBDTlRSTF9SRUcpOworCXdyaXRlX3JlZygweDg1LCBDTlRSTF9SRUcpOwogCiAJLyogc2V0IGFkZHJlc3Mgc2V0dXAsIERSRFkgdGltaW5ncywgICAqLwogCS8qICBhbmQgcmVhZCBwcmVmZXRjaCBmb3IgYm90aCBkcml2ZXMgKi8KLSAJd3JpdGVfcmVnKGh3aWYsIG1pc2MsIE1JU0NfUkVHKTsKKwl3cml0ZV9yZWcobWlzYywgTUlTQ19SRUcpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9uZXcuYyBiL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9uZXcuYwppbmRleCAyMzZhMDMxLi42Y2ViMjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfbmV3LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jCkBAIC0xMDEsOCArMTAxLDggQEAKIHsKIAl1OCB2YWx1ZTsKIAotCWh3aWYtPk9VVEIoaW5kZXgsIGh3aWYtPmRtYV92ZW5kb3IxKTsKLQl2YWx1ZSA9IGh3aWYtPklOQihod2lmLT5kbWFfdmVuZG9yMyk7CisJb3V0YihpbmRleCwgaHdpZi0+ZG1hX3ZlbmRvcjEpOworCXZhbHVlID0gaW5iKGh3aWYtPmRtYV92ZW5kb3IzKTsKIAogCURCRygiaW5kZXhbJTAyWF0gdmFsdWVbJTAyWF1cbiIsIGluZGV4LCB2YWx1ZSk7CiAJcmV0dXJuIHZhbHVlOwpAQCAtMTE1LDggKzExNSw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNldF9pbmRleGVkX3JlZyhpZGVfaHdpZl90ICpod2lmLCB1OCBpbmRleCwgdTggdmFsdWUpCiB7Ci0JaHdpZi0+T1VUQihpbmRleCwgaHdpZi0+ZG1hX3ZlbmRvcjEpOwotCWh3aWYtPk9VVEIodmFsdWUsIGh3aWYtPmRtYV92ZW5kb3IzKTsKKwlvdXRiKGluZGV4LCBod2lmLT5kbWFfdmVuZG9yMSk7CisJb3V0Yih2YWx1ZSwgaHdpZi0+ZG1hX3ZlbmRvcjMpOwogCURCRygiaW5kZXhbJTAyWF0gdmFsdWVbJTAyWF1cbiIsIGluZGV4LCB2YWx1ZSk7CiB9CiAKQEAgLTI4MSwyNSArMjgxLDE1IEBACiAKIHN0YXRpYyBpbnQgcGRjbmV3X2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7Ci0KIAlkcml2ZS0+aW5pdF9zcGVlZCA9IDA7CiAKLQlpZiAoKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgZHJpdmUtPmF1dG9kbWEpIHsKKwlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQorCQlyZXR1cm4gMDsKIAotCQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQotCQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOworCWlmIChpZGVfdXNlX2Zhc3RfcGlvKGRyaXZlKSkKKwkJcGRjbmV3X3R1bmVfZHJpdmUoZHJpdmUsIDI1NSk7CiAKLQkJZ290byBmYXN0X2F0YV9waW87Ci0KLQl9IGVsc2UgaWYgKChpZC0+Y2FwYWJpbGl0eSAmIDgpIHx8IChpZC0+ZmllbGRfdmFsaWQgJiAyKSkgewotZmFzdF9hdGFfcGlvOgotCQlod2lmLT50dW5lcHJvYyhkcml2ZSwgMjU1KTsKLQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotCX0KLQkvKiBJT1JEWSBub3Qgc3VwcG9ydGVkICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IHBkY25ld19xdWlya3Byb2MoaWRlX2RyaXZlX3QgKmRyaXZlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCmluZGV4IDczMGU4ZDEuLmE3YTYzOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgbGludXgvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCVZlcnNpb24gMC4zNglTZXB0IDExLCAyMDAyCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OC0yMDAyCQlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDA3CQlNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKgogICogIFByb21pc2UgVWx0cmEzMyBjYXJkcyB3aXRoIEJJT1MgdjEuMjAgdGhyb3VnaCAxLjI4IHdpbGwgbmVlZCB0aGlzCiAgKiAgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgY2FyZCBpbnN0YWxsZWQuCkBAIC0yMTYsMjEgKzIxNywxMCBAQAogfQogCiAKLS8qICAgMCAgICAxICAgIDIgICAgMyAgICA0ICAgIDUgICAgNiAgIDcgICA4Ci0gKiA5NjAsIDQ4MCwgMzkwLCAzMDAsIDI0MCwgMTgwLCAxMjAsIDkwLCA2MAotICogICAgICAgICAgIDE4MCwgMTUwLCAxMjAsICA5MCwgIDYwCi0gKiBETUFfU3BlZWQKLSAqIDE4MCwgMTIwLCAgOTAsICA5MCwgIDkwLCAgNjAsICAzMAotICogIDExLCAgIDUsICAgNCwgICAzLCAgIDIsICAgMSwgICAwCi0gKi8KLXN0YXRpYyB2b2lkIGNvbmZpZ19jaGlwc2V0X2Zvcl9waW8gKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcGlvKQorc3RhdGljIHZvaWQgcGRjMjAyeHhfdHVuZV9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHBpbykKIHsKLQl1OCBzcGVlZCA9IDA7Ci0KLQlpZiAocGlvID09IDUpIHBpbyA9IDQ7Ci0Jc3BlZWQgPSBYRkVSX1BJT18wICsgaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIHBpbywgTlVMTCk7Ci0gICAgICAgIAotCXBkYzIwMnh4X3R1bmVfY2hpcHNldChkcml2ZSwgc3BlZWQpOworCXBpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgcGlvLCA0LCBOVUxMKTsKKwlwZGMyMDJ4eF90dW5lX2NoaXBzZXQoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOwogfQogCiBzdGF0aWMgdTggcGRjMjAyeHhfb2xkX2NhYmxlX2RldGVjdCAoaWRlX2h3aWZfdCAqaHdpZikKQEAgLTI1MCwxNyArMjQwLDE3IEBACiBzdGF0aWMgdm9pZCBwZGNfb2xkX2VuYWJsZV82Nk1Iel9jbG9jayhpZGVfaHdpZl90ICpod2lmKQogewogCXVuc2lnbmVkIGxvbmcgY2xvY2tfcmVnID0gaHdpZi0+ZG1hX21hc3RlciArIDB4MTE7Ci0JdTggY2xvY2sgPSBod2lmLT5JTkIoY2xvY2tfcmVnKTsKKwl1OCBjbG9jayA9IGluYihjbG9ja19yZWcpOwogCi0JaHdpZi0+T1VUQihjbG9jayB8IChod2lmLT5jaGFubmVsID8gMHgwOCA6IDB4MDIpLCBjbG9ja19yZWcpOworCW91dGIoY2xvY2sgfCAoaHdpZi0+Y2hhbm5lbCA/IDB4MDggOiAweDAyKSwgY2xvY2tfcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgcGRjX29sZF9kaXNhYmxlXzY2TUh6X2Nsb2NrKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJdW5zaWduZWQgbG9uZyBjbG9ja19yZWcgPSBod2lmLT5kbWFfbWFzdGVyICsgMHgxMTsKLQl1OCBjbG9jayA9IGh3aWYtPklOQihjbG9ja19yZWcpOworCXU4IGNsb2NrID0gaW5iKGNsb2NrX3JlZyk7CiAKLQlod2lmLT5PVVRCKGNsb2NrICYgfihod2lmLT5jaGFubmVsID8gMHgwOCA6IDB4MDIpLCBjbG9ja19yZWcpOworCW91dGIoY2xvY2sgJiB+KGh3aWYtPmNoYW5uZWwgPyAweDA4IDogMHgwMiksIGNsb2NrX3JlZyk7CiB9CiAKIHN0YXRpYyBpbnQgY29uZmlnX2NoaXBzZXRfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQpAQCAtMzMyLDI3ICszMjIsMTUgQEAKIAogc3RhdGljIGludCBwZGMyMDJ4eF9jb25maWdfZHJpdmVfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBoZF9kcml2ZWlkICppZAk9IGRyaXZlLT5pZDsKLQogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmIChpZCAmJiAoaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBkcml2ZS0+YXV0b2RtYSkgeworCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSkpCisJCXJldHVybiAwOwogCi0JCWlmIChpZGVfdXNlX2RtYShkcml2ZSkpIHsKLQkJCWlmIChjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKLQkJCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vbihkcml2ZSk7Ci0JCX0KKwlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpCisJCXBkYzIwMnh4X3R1bmVfZHJpdmUoZHJpdmUsIDI1NSk7CiAKLQkJZ290byBmYXN0X2F0YV9waW87Ci0KLQl9IGVsc2UgaWYgKChpZC0+Y2FwYWJpbGl0eSAmIDgpIHx8IChpZC0+ZmllbGRfdmFsaWQgJiAyKSkgewotZmFzdF9hdGFfcGlvOgotCQlod2lmLT50dW5lcHJvYyhkcml2ZSwgNSk7Ci0JCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKLQl9Ci0JLyogSU9SRFkgbm90IHN1cHBvcnRlZCAqLwotCXJldHVybiAwOworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBwZGMyMDJ4eF9xdWlya3Byb2MgKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTM3NSwxNCArMzUzLDE0IEBACiAJCXVuc2lnbmVkIGxvbmcgaGlnaF8xNiAgID0gaHdpZi0+ZG1hX21hc3RlcjsKIAkJdW5zaWduZWQgbG9uZyBhdGFwaV9yZWcJPSBoaWdoXzE2ICsgKGh3aWYtPmNoYW5uZWwgPyAweDI0IDogMHgyMCk7CiAJCXUzMiB3b3JkX2NvdW50CT0gMDsKLQkJdTggY2xvY2sgPSBod2lmLT5JTkIoaGlnaF8xNiArIDB4MTEpOworCQl1OCBjbG9jayA9IGluYihoaWdoXzE2ICsgMHgxMSk7CiAKLQkJaHdpZi0+T1VUQihjbG9ja3woaHdpZi0+Y2hhbm5lbCA/IDB4MDggOiAweDAyKSwgaGlnaF8xNisweDExKTsKKwkJb3V0YihjbG9jayB8IChod2lmLT5jaGFubmVsID8gMHgwOCA6IDB4MDIpLCBoaWdoXzE2ICsgMHgxMSk7CiAJCXdvcmRfY291bnQgPSAocnEtPm5yX3NlY3RvcnMgPDwgOCk7CiAJCXdvcmRfY291bnQgPSAocnFfZGF0YV9kaXIocnEpID09IFJFQUQpID8KIAkJCQkJd29yZF9jb3VudCB8IDB4MDUwMDAwMDAgOgogCQkJCQl3b3JkX2NvdW50IHwgMHgwNjAwMDAwMDsKLQkJaHdpZi0+T1VUTCh3b3JkX2NvdW50LCBhdGFwaV9yZWcpOworCQlvdXRsKHdvcmRfY291bnQsIGF0YXBpX3JlZyk7CiAJfQogCWlkZV9kbWFfc3RhcnQoZHJpdmUpOwogfQpAQCAtMzk1LDkgKzM3Myw5IEBACiAJCXVuc2lnbmVkIGxvbmcgYXRhcGlfcmVnCT0gaGlnaF8xNiArIChod2lmLT5jaGFubmVsID8gMHgyNCA6IDB4MjApOwogCQl1OCBjbG9jawkJPSAwOwogCi0JCWh3aWYtPk9VVEwoMCwgYXRhcGlfcmVnKTsgLyogemVybyBvdXQgZXh0cmEgKi8KLQkJY2xvY2sgPSBod2lmLT5JTkIoaGlnaF8xNiArIDB4MTEpOwotCQlod2lmLT5PVVRCKGNsb2NrICYgfihod2lmLT5jaGFubmVsID8gMHgwODoweDAyKSwgaGlnaF8xNisweDExKTsKKwkJb3V0bCgwLCBhdGFwaV9yZWcpOyAvKiB6ZXJvIG91dCBleHRyYSAqLworCQljbG9jayA9IGluYihoaWdoXzE2ICsgMHgxMSk7CisJCW91dGIoY2xvY2sgJiB+KGh3aWYtPmNoYW5uZWwgPyAweDA4OjB4MDIpLCBoaWdoXzE2ICsgMHgxMSk7CiAJfQogCWlmIChkcml2ZS0+Y3VycmVudF9zcGVlZCA+IFhGRVJfVURNQV8yKQogCQlwZGNfb2xkX2Rpc2FibGVfNjZNSHpfY2xvY2soZHJpdmUtPmh3aWYpOwpAQCAtNDA4LDggKzM4Niw4IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXVuc2lnbmVkIGxvbmcgaGlnaF8xNgk9IGh3aWYtPmRtYV9tYXN0ZXI7Ci0JdTggZG1hX3N0YXQJCT0gaHdpZi0+SU5CKGh3aWYtPmRtYV9zdGF0dXMpOwotCXU4IHNjMWQJCQk9IGh3aWYtPklOQigoaGlnaF8xNiArIDB4MDAxZCkpOworCXU4IGRtYV9zdGF0CQk9IGluYihod2lmLT5kbWFfc3RhdHVzKTsKKwl1OCBzYzFkCQkJPSBpbmIoaGlnaF8xNiArIDB4MDAxZCk7CiAKIAlpZiAoaHdpZi0+Y2hhbm5lbCkgewogCQkvKiBiaXQ3OiBFcnJvciwgYml0NjogSW50ZXJydXB0aW5nLCBiaXQ1OiBGSUZPIEZ1bGwsIGJpdDQ6IEZJRk8gRW1wdHkgKi8KQEAgLTQ0NSwxMSArNDIzLDExIEBACiBzdGF0aWMgdm9pZCBwZGMyMDJ4eF9yZXNldF9ob3N0IChpZGVfaHdpZl90ICpod2lmKQogewogCXVuc2lnbmVkIGxvbmcgaGlnaF8xNgk9IGh3aWYtPmRtYV9tYXN0ZXI7Ci0JdTggdWRtYV9zcGVlZF9mbGFnCT0gaHdpZi0+SU5CKGhpZ2hfMTZ8MHgwMDFmKTsKKwl1OCB1ZG1hX3NwZWVkX2ZsYWcJPSBpbmIoaGlnaF8xNiB8IDB4MDAxZik7CiAKLQlod2lmLT5PVVRCKCh1ZG1hX3NwZWVkX2ZsYWcgfCAweDEwKSwgKGhpZ2hfMTZ8MHgwMDFmKSk7CisJb3V0Yih1ZG1hX3NwZWVkX2ZsYWcgfCAweDEwLCBoaWdoXzE2IHwgMHgwMDFmKTsKIAltZGVsYXkoMTAwKTsKLQlod2lmLT5PVVRCKCh1ZG1hX3NwZWVkX2ZsYWcgJiB+MHgxMCksIChoaWdoXzE2fDB4MDAxZikpOworCW91dGIodWRtYV9zcGVlZF9mbGFnICYgfjB4MTAsIGhpZ2hfMTYgfCAweDAwMWYpOwogCW1kZWxheSgyMDAwKTsJLyogMiBzZWNvbmRzID8hICovCiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJQREMyMDJYWDogJXMgY2hhbm5lbCByZXNldC5cbiIsCkBAIC00NjMsNyArNDQxLDcgQEAKIAkKIAlwZGMyMDJ4eF9yZXNldF9ob3N0KGh3aWYpOwogCXBkYzIwMnh4X3Jlc2V0X2hvc3QobWF0ZSk7Ci0JaHdpZi0+dHVuZXByb2MoZHJpdmUsIDUpOworCXBkYzIwMnh4X3R1bmVfZHJpdmUoZHJpdmUsIDI1NSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGluaXRfY2hpcHNldF9wZGMyMDJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2LApAQCAtNDkwLDcgKzQ2OCw3IEBACiAJCWh3aWYtPnJxc2l6ZSA9IDI1NjsKIAogCWh3aWYtPmF1dG9kbWEgPSAwOwotCWh3aWYtPnR1bmVwcm9jICA9ICZjb25maWdfY2hpcHNldF9mb3JfcGlvOworCWh3aWYtPnR1bmVwcm9jICA9ICZwZGMyMDJ4eF90dW5lX2RyaXZlOwogCWh3aWYtPnF1aXJrcHJvYyA9ICZwZGMyMDJ4eF9xdWlya3Byb2M7CiAKIAlpZiAoaHdpZi0+cGNpX2Rldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI0NikKQEAgLTUzNyw5ICs1MTUsOSBAQAogCQlyZXR1cm47CiAJfQogCi0JdWRtYV9zcGVlZF9mbGFnCT0gaHdpZi0+SU5CKChkbWFiYXNlfDB4MWYpKTsKLQlwcmltYXJ5X21vZGUJPSBod2lmLT5JTkIoKGRtYWJhc2V8MHgxYSkpOwotCXNlY29uZGFyeV9tb2RlCT0gaHdpZi0+SU5CKChkbWFiYXNlfDB4MWIpKTsKKwl1ZG1hX3NwZWVkX2ZsYWcJPSBpbmIoZG1hYmFzZSB8IDB4MWYpOworCXByaW1hcnlfbW9kZQk9IGluYihkbWFiYXNlIHwgMHgxYSk7CisJc2Vjb25kYXJ5X21vZGUJPSBpbmIoZG1hYmFzZSB8IDB4MWIpOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiAoVSlETUEgQnVyc3QgQml0ICVzQUJMRUQgIiBcCiAJCSJQcmltYXJ5ICVzIE1vZGUgIiBcCiAJCSJTZWNvbmRhcnkgJXMgTW9kZS5cbiIsIGh3aWYtPmNkcy0+bmFtZSwKQEAgLTU1MiwzMCArNTMwLDEwIEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGT1JDSU5HIEJVUlNUIEJJVCAweCUwMngtPjB4JTAyeCAiLAogCQkJaHdpZi0+Y2RzLT5uYW1lLCB1ZG1hX3NwZWVkX2ZsYWcsCiAJCQkodWRtYV9zcGVlZF9mbGFnfDEpKTsKLQkJaHdpZi0+T1VUQih1ZG1hX3NwZWVkX2ZsYWd8MSwoZG1hYmFzZXwweDFmKSk7Ci0JCXByaW50aygiJXNBQ1RJVkVcbiIsCi0JCQkoaHdpZi0+SU5CKGRtYWJhc2V8MHgxZikmMSkgPyAiIjoiSU4iKTsKKwkJb3V0Yih1ZG1hX3NwZWVkX2ZsYWcgfCAxLCBkbWFiYXNlIHwgMHgxZik7CisJCXByaW50aygiJXNBQ1RJVkVcbiIsIChpbmIoZG1hYmFzZSB8IDB4MWYpICYgMSkgPyAiIiA6ICJJTiIpOwogCX0KICNlbmRpZiAvKiBDT05GSUdfUERDMjAyWFhfQlVSU1QgKi8KLSNpZmRlZiBDT05GSUdfUERDMjAyWFhfTUFTVEVSCi0JaWYgKCEocHJpbWFyeV9tb2RlICYgMSkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZPUkNJTkcgUFJJTUFSWSBNT0RFIEJJVCAiCi0JCQkiMHglMDJ4IC0+IDB4JTAyeCAiLCBod2lmLT5jZHMtPm5hbWUsCi0JCQlwcmltYXJ5X21vZGUsIChwcmltYXJ5X21vZGV8MSkpOwotCQlod2lmLT5PVVRCKHByaW1hcnlfbW9kZXwxLCAoZG1hYmFzZXwweDFhKSk7Ci0JCXByaW50aygiJXNcbiIsCi0JCQkoaHdpZi0+SU5CKChkbWFiYXNlfDB4MWEpKSAmIDEpID8gIk1BU1RFUiIgOiAiUENJIik7Ci0JfQotCi0JaWYgKCEoc2Vjb25kYXJ5X21vZGUgJiAxKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogRk9SQ0lORyBTRUNPTkRBUlkgTU9ERSBCSVQgIgotCQkJIjB4JTAyeCAtPiAweCUwMnggIiwgaHdpZi0+Y2RzLT5uYW1lLAotCQkJc2Vjb25kYXJ5X21vZGUsIChzZWNvbmRhcnlfbW9kZXwxKSk7Ci0JCWh3aWYtPk9VVEIoc2Vjb25kYXJ5X21vZGV8MSwgKGRtYWJhc2V8MHgxYikpOwotCQlwcmludGsoIiVzXG4iLAotCQkJKGh3aWYtPklOQigoZG1hYmFzZXwweDFiKSkgJiAxKSA/ICJNQVNURVIiIDogIlBDSSIpOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfUERDMjAyWFhfTUFTVEVSICovCiAKIAlpZGVfc2V0dXBfZG1hKGh3aWYsIGRtYWJhc2UsIDgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BpaXguYyBiL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMKaW5kZXggNTJjZmMyYS4uNTY5ODIyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3BpaXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jCkBAIC0zNjksNyArMzY5LDcgQEAKIAkgKiBJZiBubyBETUEgc3BlZWQgd2FzIGF2YWlsYWJsZSBvciB0aGUgY2hpcHNldCBoYXMgRE1BIGJ1Z3MKIAkgKiB0aGVuIGRpc2FibGUgRE1BIGFuZCB1c2UgUElPCiAJICovCi0JaWYgKCFzcGVlZCB8fCBub19waWl4X2RtYSkKKwlpZiAoIXNwZWVkKQogCQlyZXR1cm4gMDsKIAogCSh2b2lkKSBwaWl4X3R1bmVfY2hpcHNldChkcml2ZSwgc3BlZWQpOwpAQCAtMzg2LDQxICszODYsMjggQEAKICAKIHN0YXRpYyBpbnQgcGlpeF9jb25maWdfZHJpdmVfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBoZF9kcml2ZWlkICppZAk9IGRyaXZlLT5pZDsKLQogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmICgoaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBkcml2ZS0+YXV0b2RtYSkgeworCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgcGlpeF9jb25maWdfZHJpdmVfZm9yX2RtYShkcml2ZSkpCisJCXJldHVybiAwOwogCi0JCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgcGlpeF9jb25maWdfZHJpdmVfZm9yX2RtYShkcml2ZSkpCi0JCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vbihkcml2ZSk7Ci0KLQkJZ290byBmYXN0X2F0YV9waW87Ci0KLQl9IGVsc2UgaWYgKChpZC0+Y2FwYWJpbGl0eSAmIDgpIHx8IChpZC0+ZmllbGRfdmFsaWQgJiAyKSkgewotZmFzdF9hdGFfcGlvOgorCWlmIChpZGVfdXNlX2Zhc3RfcGlvKGRyaXZlKSkKIAkJLyogRmluZCBiZXN0IFBJTyBtb2RlLiAqLwotCQkodm9pZCkgaHdpZi0+c3BlZWRwcm9jKGRyaXZlLCBYRkVSX1BJT18wICsKLQkJCQkgICAgICAgaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDQsIE5VTEwpKTsKLQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotCX0KLQkvKiBJT1JEWSBub3Qgc3VwcG9ydGVkICovCi0JcmV0dXJuIDA7CisJCXBpaXhfdHVuZV9jaGlwc2V0KGRyaXZlLCBYRkVSX1BJT18wICsKKwkJCQkgIGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgMjU1LCA0LCBOVUxMKSk7CisKKwlyZXR1cm4gLTE7CiB9CiAKIC8qKgotICoJaW5pdF9jaGlwc2V0X3BpaXgJLQlzZXQgdXAgdGhlIFBJSVggY2hpcHNldAotICoJQGRldjogUENJIGRldmljZSB0byBzZXQgdXAKLSAqCUBuYW1lOiBOYW1lIG9mIHRoZSBkZXZpY2UKKyAqCXBpaXhfaXNfaWNoeAktCWNoZWNrIGlmIElDSHgKKyAqCUBkZXY6IFBDSSBkZXZpY2UgdG8gY2hlY2sKICAqCi0gKglJbml0aWFsaXplIHRoZSBQQ0kgZGV2aWNlIGFzIHJlcXVpcmVkLiBGb3IgdGhlIFBJSVggdGhpcyB0dXJucwotICoJb3V0IHRvIGJlIG5pY2UgYW5kIHNpbXBsZQorICoJcmV0dXJucyAxIGlmIElDSHgsIDAgb3RoZXJ3aXNlLgogICovCi0gCi1zdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdCBpbml0X2NoaXBzZXRfcGlpeCAoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBpbnQgcGlpeF9pc19pY2h4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0gICAgICAgIHN3aXRjaChkZXYtPmRldmljZSkgeworICAgICAgICBzd2l0Y2ggKGRldi0+ZGV2aWNlKSB7CiAJCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzE6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzE6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzE6CkBAIC00MzgsMTkgKzQyNSw2MSBAQAogCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18yMToKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTg6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzY6Ci0JCXsKLQkJCXVuc2lnbmVkIGludCBleHRyYSA9IDA7Ci0JCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDU0LCAmZXh0cmEpOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NTQsIGV4dHJhfDB4NDAwKTsKLQkJfQotCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCisgKglpbml0X2NoaXBzZXRfcGlpeAktCXNldCB1cCB0aGUgUElJWCBjaGlwc2V0CisgKglAZGV2OiBQQ0kgZGV2aWNlIHRvIHNldCB1cAorICoJQG5hbWU6IE5hbWUgb2YgdGhlIGRldmljZQorICoKKyAqCUluaXRpYWxpemUgdGhlIFBDSSBkZXZpY2UgYXMgcmVxdWlyZWQuIEZvciB0aGUgUElJWCB0aGlzIHR1cm5zCisgKglvdXQgdG8gYmUgbmljZSBhbmQgc2ltcGxlCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXQgaW5pdF9jaGlwc2V0X3BpaXggKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKHBpaXhfaXNfaWNoeChkZXYpKSB7CisJCXVuc2lnbmVkIGludCBleHRyYSA9IDA7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NTQsICZleHRyYSk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDU0LCBleHRyYXwweDQwMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJcGlpeF9kbWFfY2xlYXJfaXJxCS0JY2xlYXIgQk1ETUEgc3RhdHVzCisgKglAZHJpdmU6IElERSBkcml2ZSB0byBjbGVhcgorICoKKyAqCUNhbGxlZCBmcm9tIGlkZV9pbnRyKCkgZm9yIFBJTyBpbnRlcnJ1cHRzCisgKgl0byBjbGVhciBCTURNQSBzdGF0dXMgYXMgbmVlZGVkIGJ5IElDSHgKKyAqLworc3RhdGljIHZvaWQgcGlpeF9kbWFfY2xlYXJfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CisJdTggZG1hX3N0YXQ7CisKKwkvKiBjbGVhciB0aGUgSU5UUiAmIEVSUk9SIGJpdHMgKi8KKwlkbWFfc3RhdCA9IGh3aWYtPklOQihod2lmLT5kbWFfc3RhdHVzKTsKKwkvKiBTaG91bGQgd2UgZm9yY2UgdGhlIGJpdCBhcyB3ZWxsID8gKi8KKwlod2lmLT5PVVRCKGRtYV9zdGF0LCBod2lmLT5kbWFfc3RhdHVzKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcGlpeF9jYWJsZV9kZXRlY3QoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gaHdpZi0+cGNpX2RldjsKKwl1OCByZWc1NGggPSAwLCBtYXNrID0gaHdpZi0+Y2hhbm5lbCA/IDB4YzAgOiAweDMwOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDU0LCAmcmVnNTRoKTsKKworCXJldHVybiAocmVnNTRoICYgbWFzaykgPyAxIDogMDsKK30KKworLyoqCiAgKglpbml0X2h3aWZfcGlpeAkJLQlmaWxsIGluIHRoZSBod2lmIGZvciB0aGUgUElJWAogICoJQGh3aWY6IElERSBpbnRlcmZhY2UKICAqCkBAIC00NjAsOSArNDg5LDYgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9waWl4KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JdTggcmVnNTRoID0gMCwgcmVnNTVoID0gMCwgYXRhNjYgPSAwOwotCXU4IG1hc2sgPSBod2lmLT5jaGFubmVsID8gMHhjMCA6IDB4MzA7Ci0KICNpZm5kZWYgQ09ORklHX0lBNjQKIAlpZiAoIWh3aWYtPmlycSkKIAkJaHdpZi0+aXJxID0gaHdpZi0+Y2hhbm5lbCA/IDE1IDogMTQ7CkBAIC00NzIsMTAgKzQ5OCw2IEBACiAJCS8qIFRoaXMgaXMgYSBwYWluZnVsIHN5c3RlbSBiZXN0IHRvIGxldCBpdCBzZWxmIHR1bmUgZm9yIG5vdyAqLwogCQlyZXR1cm47CiAJfQotCS8qIEVTQjIgYXBwZWFycyB0byBnZW5lcmF0ZSBzcHVyaW91cyBETUEgaW50ZXJydXB0cyBpbiBQSU8gbW9kZQotCSAgIHdoZW4gaW4gbmF0aXZlIG1vZGUgKi8KLQlpZiAoaHdpZi0+cGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCMl8xOCkKLQkJaHdpZi0+YXRhcGlfaXJxX2JvZ29uID0gMTsKIAogCWh3aWYtPmF1dG9kbWEgPSAwOwogCWh3aWYtPnR1bmVwcm9jID0gJnBpaXhfdHVuZV9kcml2ZTsKQEAgLTQ4NiwxNSArNTA4LDE2IEBACiAJaWYgKCFod2lmLT5kbWFfYmFzZSkKIAkJcmV0dXJuOwogCisJLyogSUNIeCBuZWVkIHRvIGNsZWFyIHRoZSBibWRtYSBzdGF0dXMgZm9yIGFsbCBpbnRlcnJ1cHRzICovCisJaWYgKHBpaXhfaXNfaWNoeChod2lmLT5wY2lfZGV2KSkKKwkJaHdpZi0+aWRlX2RtYV9jbGVhcl9pcnEgPSAmcGlpeF9kbWFfY2xlYXJfaXJxOworCiAJaHdpZi0+YXRhcGlfZG1hID0gMTsKIAlod2lmLT51bHRyYV9tYXNrID0gMHgzZjsKIAlod2lmLT5td2RtYV9tYXNrID0gMHgwNjsKIAlod2lmLT5zd2RtYV9tYXNrID0gMHgwNDsKIAogCXN3aXRjaChod2lmLT5wY2lfZGV2LT5kZXZpY2UpIHsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxTVg6Ci0JCQlod2lmLT5td2RtYV9tYXNrID0gMHg4MDsKLQkJCWh3aWYtPnN3ZG1hX21hc2sgPSAweDgwOwogCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFGQl8wOgogCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFGQl8xOgogCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFTQl8xOgpAQCAtNTA3LDE0ICs1MzAsMTQgQEAKIAkJCWh3aWYtPnVsdHJhX21hc2sgPSAweDA3OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShod2lmLT5wY2lfZGV2LCAweDU0LCAmcmVnNTRoKTsKLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGh3aWYtPnBjaV9kZXYsIDB4NTUsICZyZWc1NWgpOwotCQkJYXRhNjYgPSAocmVnNTRoICYgbWFzaykgPyAxIDogMDsKKwkJCWlmICghaHdpZi0+dWRtYV9mb3VyKQorCQkJCWh3aWYtPnVkbWFfZm91ciA9IHBpaXhfY2FibGVfZGV0ZWN0KGh3aWYpOwogCQkJYnJlYWs7CiAJfQogCi0JaWYgKCEoaHdpZi0+dWRtYV9mb3VyKSkKLQkJaHdpZi0+dWRtYV9mb3VyID0gYXRhNjY7CisJaWYgKG5vX3BpaXhfZG1hKQorCQlod2lmLT51bHRyYV9tYXNrID0gaHdpZi0+bXdkbWFfbWFzayA9IGh3aWYtPnN3ZG1hX21hc2sgPSAwOworCiAJaHdpZi0+aWRlX2RtYV9jaGVjayA9ICZwaWl4X2NvbmZpZ19kcml2ZV94ZmVyX3JhdGU7CiAJaWYgKCFub2F1dG9kbWEpCiAJCWh3aWYtPmF1dG9kbWEgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jIGIvZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jCmluZGV4IDhkNzYyZDMuLmI1YWUwYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zYzEyMDAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCS8qCiAJICogRGVmYXVsdCB0byBETUEtb2ZmIGluIGNhc2Ugd2UgcnVuIGludG8gdHJvdWJsZSBoZXJlLgogCSAqLwotCWh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwkJCS8qIHR1cm4gb2ZmIERNQSB3aGlsZSB3ZSBmaWRkbGUgKi8KKwlod2lmLT5kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwkvKiB0dXJuIG9mZiBETUEgd2hpbGUgd2UgZmlkZGxlICovCiAJb3V0YihpbmIoaHdpZi0+ZG1hX2Jhc2UrMikmfih1bml0PzB4NDA6MHgyMCksIGh3aWYtPmRtYV9iYXNlKzIpOyAvKiBjbGVhciBETUFfY2FwYWJsZSBiaXQgKi8KIAogCS8qCkBAIC0yNDEsMTAgKzI0MSw3IEBACiAKIAlvdXRiKGluYihod2lmLT5kbWFfYmFzZSsyKXwodW5pdD8weDQwOjB4MjApLCBod2lmLT5kbWFfYmFzZSsyKTsJLyogc2V0IERNQV9jYXBhYmxlIGJpdCAqLwogCi0JLyoKLQkgKiBGaW5hbGx5LCB0dXJuIERNQSBvbiBpbiBzb2Z0d2FyZSwgYW5kIGV4aXQuCi0JICovCi0JcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOwkvKiBzdWNjZXNzICovCisJcmV0dXJuIDA7CS8qIHN1Y2Nlc3MgKi8KIH0KIAogLyoKQEAgLTQ0MiwxMCArNDM5LDEwIEBACiAJCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmKGh3aWYtPmRyaXZlc1tkXSk7CiAJCQlpZiAoZHJpdmUtPnByZXNlbnQgJiYgIV9faWRlX2RtYV9iYWRfZHJpdmUoZHJpdmUpKSB7CiAJCQkJaW50IHdhc191c2luZ19kbWEgPSBkcml2ZS0+dXNpbmdfZG1hOwotCQkJCWh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOworCQkJCWh3aWYtPmRtYV9vZmZfcXVpZXRseShkcml2ZSk7CiAJCQkJc2MxMjAwX2NvbmZpZ19kbWEoZHJpdmUpOwogCQkJCWlmICghd2FzX3VzaW5nX2RtYSAmJiBkcml2ZS0+dXNpbmdfZG1hKSB7Ci0JCQkJCWh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOworCQkJCQlod2lmLT5kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwogCQkJCX0KIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NlcnZlcndvcmtzLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYwppbmRleCBlYTlhMjhhLi5kYmNkMzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJaWYgKChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUpIHx8CiAJICAgIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUyKSkgewogCQlpZiAoIWRyaXZlLT5pbml0X3NwZWVkKSB7Ci0JCQl1OCBkbWFfc3RhdCA9IGh3aWYtPklOQihod2lmLT5kbWFfc3RhdHVzKTsKKwkJCXU4IGRtYV9zdGF0ID0gaW5iKGh3aWYtPmRtYV9zdGF0dXMpOwogCiBkbWFfcGlvOgogCQkJaWYgKCgodWx0cmFfZW5hYmxlIDw8ICg3LWRyaXZlLT5kbikgJiAweDgwKSA9PSAweDgwKSAmJgpAQCAtMzE1LDM1ICszMTUsMTUgQEAKIAogc3RhdGljIGludCBzdndrc19jb25maWdfZHJpdmVfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBoZF9kcml2ZWlkICppZAk9IGRyaXZlLT5pZDsKLQogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmICgoaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBkcml2ZS0+YXV0b2RtYSkgeworCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSkpCisJCXJldHVybiAwOwogCi0JCWlmIChpZGVfdXNlX2RtYShkcml2ZSkpIHsKLQkJCWlmIChjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKLQkJCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vbihkcml2ZSk7Ci0JCX0KLQotCQlnb3RvIGZhc3RfYXRhX3BpbzsKLQotCX0gZWxzZSBpZiAoKGlkLT5jYXBhYmlsaXR5ICYgOCkgfHwgKGlkLT5maWVsZF92YWxpZCAmIDIpKSB7Ci1mYXN0X2F0YV9waW86CisJaWYgKGlkZV91c2VfZmFzdF9waW8oZHJpdmUpKQogCQljb25maWdfY2hpcHNldF9mb3JfcGlvKGRyaXZlKTsKLQkJLy8JaHdpZi0+dHVuZXByb2MoZHJpdmUsIDUpOwotCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7Ci0JfQotCS8qIElPUkRZIG5vdCBzdXBwb3J0ZWQgKi8KLQlyZXR1cm4gMDsKLX0KIAotLyogVGhpcyBjYW4gZ28gc29vbiAqLwotCi1zdGF0aWMgaW50IHN2d2tzX2lkZV9kbWFfZW5kIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JcmV0dXJuIF9faWRlX2RtYV9lbmQoZHJpdmUpOworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXQgaW5pdF9jaGlwc2V0X3N2d2tzIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBjaGFyICpuYW1lKQpAQCAtNTM3LDM1ICs1MTcsMjAgQEAKIAl9CiAKIAlod2lmLT5pZGVfZG1hX2NoZWNrID0gJnN2d2tzX2NvbmZpZ19kcml2ZV94ZmVyX3JhdGU7Ci0JaWYgKGh3aWYtPnBjaV9kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjRJREUpCi0JCWh3aWYtPmlkZV9kbWFfZW5kID0gJnN2d2tzX2lkZV9kbWFfZW5kOwotCWVsc2UgaWYgKCEoaHdpZi0+dWRtYV9mb3VyKSkKLQkJaHdpZi0+dWRtYV9mb3VyID0gYXRhNjZfc3Z3a3MoaHdpZik7CisJaWYgKGh3aWYtPnBjaV9kZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjRJREUpIHsKKwkJaWYgKCFod2lmLT51ZG1hX2ZvdXIpCisJCQlod2lmLT51ZG1hX2ZvdXIgPSBhdGE2Nl9zdndrcyhod2lmKTsKKwl9CiAJaWYgKCFub2F1dG9kbWEpCiAJCWh3aWYtPmF1dG9kbWEgPSAxOwogCi0JZG1hX3N0YXQgPSBod2lmLT5JTkIoaHdpZi0+ZG1hX3N0YXR1cyk7CisJZG1hX3N0YXQgPSBpbmIoaHdpZi0+ZG1hX3N0YXR1cyk7CiAJaHdpZi0+ZHJpdmVzWzBdLmF1dG9kbWEgPSAoZG1hX3N0YXQgJiAweDIwKTsKIAlod2lmLT5kcml2ZXNbMV0uYXV0b2RtYSA9IChkbWFfc3RhdCAmIDB4NDApOwogCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9ICghKGRtYV9zdGF0ICYgMHgyMCkpOwogCWh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9ICghKGRtYV9zdGF0ICYgMHg0MCkpOwogfQogCi0vKgotICogV2UgYWxsb3cgdGhlIEJNLURNQSBkcml2ZXIgdG8gb25seSB3b3JrIG9uIGVuYWJsZWQgaW50ZXJmYWNlcy4KLSAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfZG1hX3N2d2tzIChpZGVfaHdpZl90ICpod2lmLCB1bnNpZ25lZCBsb25nIGRtYWJhc2UpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IGh3aWYtPnBjaV9kZXY7Ci0KLQlpZiAoKChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUpIHx8Ci0JICAgICAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2SURFMikpICYmCi0JICAgICghKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICYgMSkpICYmIChod2lmLT5jaGFubmVsKSkKLQkJcmV0dXJuOwotCi0JaWRlX3NldHVwX2RtYShod2lmLCBkbWFiYXNlLCA4KTsKLX0KLQogc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9zZXR1cF9zdndrcyAoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCkKIHsKIAlyZXR1cm4gaWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCBkKTsKQEAgLTYwMCw3ICs1NjUsNiBAQAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfc3Z3a3MsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfc3Z3a3MsCi0JCS5pbml0X2RtYQk9IGluaXRfZG1hX3N2d2tzLAogCQkuY2hhbm5lbHMJPSAyLAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5ib290YWJsZQk9IE9OX0JPQVJELApAQCAtNjA5LDcgKzU3Myw2IEBACiAJCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9jc2I2LAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3N2d2tzLAotCQkuaW5pdF9kbWEJPSBpbml0X2RtYV9zdndrcywKIAkJLmNoYW5uZWxzCT0gMiwKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKQEAgLTYxOCw3ICs1ODEsNiBAQAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfY3NiNiwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zdndrcywKLQkJLmluaXRfZG1hCT0gaW5pdF9kbWFfc3Z3a3MsCiAJCS5jaGFubmVscwk9IDEsCS8qIDIgKi8KIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKQEAgLTYyNyw3ICs1ODksNiBAQAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfc3Z3a3MsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfc3Z3a3MsCi0JCS5pbml0X2RtYQk9IGluaXRfZG1hX3N2d2tzLAogCQkuY2hhbm5lbHMJPSAxLAkvKiAyICovCiAJCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jIGIvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYwppbmRleCBiMGJmMDE4Li5mZDA5YjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKQEAgLTExMCwyNCArMTEwLDI0IEBACiBzdGF0aWMgdm9pZAogc2dpaW9jNF9tYXNrcHJvYyhpZGVfZHJpdmVfdCAqIGRyaXZlLCBpbnQgbWFzaykKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7Ci0JaHdpZi0+T1VUQihtYXNrID8gKGRyaXZlLT5jdGwgfCAyKSA6IChkcml2ZS0+Y3RsICYgfjIpLAotCQkgICBJREVfQ09OVFJPTF9SRUcpOworCXdyaXRlYihtYXNrID8gKGRyaXZlLT5jdGwgfCAyKSA6IChkcml2ZS0+Y3RsICYgfjIpLAorCSAgICAgICAodm9pZCBfX2lvbWVtICopSURFX0NPTlRST0xfUkVHKTsKIH0KIAogCiBzdGF0aWMgaW50CiBzZ2lpb2M0X2NoZWNraXJxKGlkZV9od2lmX3QgKiBod2lmKQogewotCXU4IGludHJfcmVnID0KLQkgICAgaHdpZi0+SU5MKGh3aWYtPmlvX3BvcnRzW0lERV9JUlFfT0ZGU0VUXSArIElPQzRfSU5UUl9SRUcgKiA0KTsKKwl1bnNpZ25lZCBsb25nIGludHJfYWRkciA9CisJCWh3aWYtPmlvX3BvcnRzW0lERV9JUlFfT0ZGU0VUXSArIElPQzRfSU5UUl9SRUcgKiA0OwogCi0JaWYgKGludHJfcmVnICYgMHgwMykKKwlpZiAoKHU4KXJlYWRsKCh2b2lkIF9faW9tZW0gKilpbnRyX2FkZHIpICYgMHgwMykKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU4IHNnaWlvYzRfSU5CKHVuc2lnbmVkIGxvbmcpOwogCiBzdGF0aWMgaW50CiBzZ2lpb2M0X2NsZWFyaXJxKGlkZV9kcml2ZV90ICogZHJpdmUpCkBAIC0xMzgsMjEgKzEzOCwyMSBAQAogCSAgICBod2lmLT5pb19wb3J0c1tJREVfSVJRX09GRlNFVF0gKyAoSU9DNF9JTlRSX1JFRyA8PCAyKTsKIAogCS8qIENvZGUgdG8gY2hlY2sgZm9yIFBDSSBlcnJvciBjb25kaXRpb25zICovCi0JaW50cl9yZWcgPSBod2lmLT5JTkwob3RoZXJfaXIpOworCWludHJfcmVnID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKW90aGVyX2lyKTsKIAlpZiAoaW50cl9yZWcgJiAweDAzKSB7IC8qIFZhbGlkIElPQzQtSURFIGludGVycnVwdCAqLwogCQkvKgotCQkgKiBVc2luZyBod2lmLT5JTkIgdG8gcmVhZCB0aGUgSURFX1NUQVRVU19SRUcgaGFzIGEgc2lkZSBlZmZlY3QKKwkJICogVXNpbmcgc2dpaW9jNF9JTkIgdG8gcmVhZCB0aGUgSURFX1NUQVRVU19SRUcgaGFzIGEgc2lkZSBlZmZlY3QKIAkJICogb2YgY2xlYXJpbmcgdGhlIGludGVycnVwdC4gIFRoZSBmaXJzdCByZWFkIHNob3VsZCBjbGVhciBpdAogCQkgKiBpZiBpdCBpcyBzZXQuICBUaGUgc2Vjb25kIHJlYWQgc2hvdWxkIHJldHVybiBhICJjbGVhciIgc3RhdHVzCiAJCSAqIGlmIGl0IGdvdCBjbGVhcmVkLiAgSWYgbm90LCB0aGVuIHNwaW4gZm9yIGEgYml0IHRyeWluZyB0bwogCQkgKiBjbGVhciBpdC4KIAkJICovCi0JCXU4IHN0YXQgPSBod2lmLT5JTkIoSURFX1NUQVRVU19SRUcpOworCQl1OCBzdGF0ID0gc2dpaW9jNF9JTkIoSURFX1NUQVRVU19SRUcpOwogCQlpbnQgY291bnQgPSAwOwotCQlzdGF0ID0gaHdpZi0+SU5CKElERV9TVEFUVVNfUkVHKTsKKwkJc3RhdCA9IHNnaWlvYzRfSU5CKElERV9TVEFUVVNfUkVHKTsKIAkJd2hpbGUgKChzdGF0ICYgMHg4MCkgJiYgKGNvdW50KysgPCAxMDApKSB7CiAJCQl1ZGVsYXkoMSk7Ci0JCQlzdGF0ID0gaHdpZi0+SU5CKElERV9TVEFUVVNfUkVHKTsKKwkJCXN0YXQgPSBzZ2lpb2M0X0lOQihJREVfU1RBVFVTX1JFRyk7CiAJCX0KIAogCQlpZiAoaW50cl9yZWcgJiAweDAyKSB7CkBAIC0xNjEsOSArMTYxLDkgQEAKIAkJCSAgICBwY2lfc3RhdF9jbWRfcmVnOwogCiAJCQlwY2lfZXJyX2FkZHJfbG93ID0KLQkJCQlod2lmLT5JTkwoaHdpZi0+aW9fcG9ydHNbSURFX0lSUV9PRkZTRVRdKTsKKwkJCQlyZWFkbCgodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHNbSURFX0lSUV9PRkZTRVRdKTsKIAkJCXBjaV9lcnJfYWRkcl9oaWdoID0KLQkJCQlod2lmLT5JTkwoaHdpZi0+aW9fcG9ydHNbSURFX0lSUV9PRkZTRVRdICsgNCk7CisJCQkJcmVhZGwoKHZvaWQgX19pb21lbSAqKShod2lmLT5pb19wb3J0c1tJREVfSVJRX09GRlNFVF0gKyA0KSk7CiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoaHdpZi0+cGNpX2RldiwgUENJX0NPTU1BTkQsCiAJCQkJCSAgICAgICZwY2lfc3RhdF9jbWRfcmVnKTsKIAkJCXByaW50ayhLRVJOX0VSUgpAQCAtMTgwLDkgKzE4MCw5IEBACiAJCX0KIAogCQkvKiBDbGVhciB0aGUgSW50ZXJydXB0LCBFcnJvciBiaXRzIG9uIHRoZSBJT0M0ICovCi0JCWh3aWYtPk9VVEwoMHgwMywgb3RoZXJfaXIpOworCQl3cml0ZWwoMHgwMywgKHZvaWQgX19pb21lbSAqKW90aGVyX2lyKTsKIAotCQlpbnRyX3JlZyA9IGh3aWYtPklOTChvdGhlcl9pcik7CisJCWludHJfcmVnID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKW90aGVyX2lyKTsKIAl9CiAKIAlyZXR1cm4gaW50cl9yZWcgJiAzOwpAQCAtMTkxLDIzICsxOTEsMjUgQEAKIHN0YXRpYyB2b2lkIHNnaWlvYzRfaWRlX2RtYV9zdGFydChpZGVfZHJpdmVfdCAqIGRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKLQl1bnNpZ25lZCBpbnQgcmVnID0gaHdpZi0+SU5MKGh3aWYtPmRtYV9iYXNlICsgSU9DNF9ETUFfQ1RSTCAqIDQpOworCXVuc2lnbmVkIGxvbmcgaW9jNF9kbWFfYWRkciA9IGh3aWYtPmRtYV9iYXNlICsgSU9DNF9ETUFfQ1RSTCAqIDQ7CisJdW5zaWduZWQgaW50IHJlZyA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKilpb2M0X2RtYV9hZGRyKTsKIAl1bnNpZ25lZCBpbnQgdGVtcF9yZWcgPSByZWcgfCBJT0M0X1NfRE1BX1NUQVJUOwogCi0JaHdpZi0+T1VUTCh0ZW1wX3JlZywgaHdpZi0+ZG1hX2Jhc2UgKyBJT0M0X0RNQV9DVFJMICogNCk7CisJd3JpdGVsKHRlbXBfcmVnLCAodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7CiB9CiAKIHN0YXRpYyB1MzIKIHNnaWlvYzRfaWRlX2RtYV9zdG9wKGlkZV9od2lmX3QgKmh3aWYsIHU2NCBkbWFfYmFzZSkKIHsKKwl1bnNpZ25lZCBsb25nIGlvYzRfZG1hX2FkZHIgPSBkbWFfYmFzZSArIElPQzRfRE1BX0NUUkwgKiA0OwogCXUzMglpb2M0X2RtYTsKIAlpbnQJY291bnQ7CiAKIAljb3VudCA9IDA7Ci0JaW9jNF9kbWEgPSBod2lmLT5JTkwoZG1hX2Jhc2UgKyBJT0M0X0RNQV9DVFJMICogNCk7CisJaW9jNF9kbWEgPSByZWFkbCgodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7CiAJd2hpbGUgKChpb2M0X2RtYSAmIElPQzRfU19ETUFfU1RPUCkgJiYgKGNvdW50KysgPCAyMDApKSB7CiAJCXVkZWxheSgxKTsKLQkJaW9jNF9kbWEgPSBod2lmLT5JTkwoZG1hX2Jhc2UgKyBJT0M0X0RNQV9DVFJMICogNCk7CisJCWlvYzRfZG1hID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOwogCX0KIAlyZXR1cm4gaW9jNF9kbWE7CiB9CkBAIC0yMTgsMTEgKzIyMCwxMSBAQAogewogCXUzMiBpb2M0X2RtYSwgYmNfZGV2LCBiY19tZW0sIG51bSwgdmFsaWQgPSAwLCBjbnQgPSAwOwogCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKLQl1NjQgZG1hX2Jhc2UgPSBod2lmLT5kbWFfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gaHdpZi0+ZG1hX2Jhc2U7CiAJaW50IGRtYV9zdGF0ID0gMDsKIAl1bnNpZ25lZCBsb25nICplbmRpbmdfZG1hID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKIAotCWh3aWYtPk9VVEwoSU9DNF9TX0RNQV9TVE9QLCBkbWFfYmFzZSArIElPQzRfRE1BX0NUUkwgKiA0KTsKKwl3cml0ZWwoSU9DNF9TX0RNQV9TVE9QLCAodm9pZCBfX2lvbWVtICopKGRtYV9iYXNlICsgSU9DNF9ETUFfQ1RSTCAqIDQpKTsKIAogCWlvYzRfZG1hID0gc2dpaW9jNF9pZGVfZG1hX3N0b3AoaHdpZiwgZG1hX2Jhc2UpOwogCkBAIC0yNTQsOCArMjU2LDggQEAKIAkJZG1hX3N0YXQgPSAxOwogCX0KIAotCWJjX2RldiA9IGh3aWYtPklOTChkbWFfYmFzZSArIElPQzRfQkNfREVWICogNCk7Ci0JYmNfbWVtID0gaHdpZi0+SU5MKGRtYV9iYXNlICsgSU9DNF9CQ19NRU0gKiA0KTsKKwliY19kZXYgPSByZWFkbCgodm9pZCBfX2lvbWVtICopKGRtYV9iYXNlICsgSU9DNF9CQ19ERVYgKiA0KSk7CisJYmNfbWVtID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKShkbWFfYmFzZSArIElPQzRfQkNfTUVNICogNCkpOwogCiAJaWYgKChiY19kZXYgJiAweDAxRkYpIHx8IChiY19tZW0gJiAweDFGRikpIHsKIAkJaWYgKGJjX2RldiA+IGJjX21lbSArIDgpIHsKQEAgLTI3MywzNCArMjc1LDI5IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNnaWlvYzRfaWRlX2RtYV9jaGVjayhpZGVfZHJpdmVfdCAqIGRyaXZlKQotewotCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBYRkVSX01XX0RNQV8yKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJDb3VsZG5vdCBzZXQgJXMgaW4gTXVsdGltb2RlLTIgRE1BIG1vZGUgfCAiCi0JCQkgICAiRHJpdmUgJXMgdXNpbmcgUElPIGluc3RlYWRcbiIsCi0JCSAgICAgICBkcml2ZS0+bmFtZSwgZHJpdmUtPm5hbWUpOwotCQlkcml2ZS0+dXNpbmdfZG1hID0gMDsKLQl9IGVsc2UKLQkJZHJpdmUtPnVzaW5nX2RtYSA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAogc2dpaW9jNF9pZGVfZG1hX29uKGlkZV9kcml2ZV90ICogZHJpdmUpCiB7CiAJZHJpdmUtPnVzaW5nX2RtYSA9IDE7CiAKLQlyZXR1cm4gSFdJRihkcml2ZSktPmlkZV9kbWFfaG9zdF9vbihkcml2ZSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNnaWlvYzRfaWRlX2RtYV9vZmZfcXVpZXRseShpZGVfZHJpdmVfdCAqIGRyaXZlKQorc3RhdGljIHZvaWQgc2dpaW9jNF9kbWFfb2ZmX3F1aWV0bHkoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWRyaXZlLT51c2luZ19kbWEgPSAwOwogCi0JcmV0dXJuIEhXSUYoZHJpdmUpLT5pZGVfZG1hX2hvc3Rfb2ZmKGRyaXZlKTsKKwlkcml2ZS0+aHdpZi0+ZG1hX2hvc3Rfb2ZmKGRyaXZlKTsKK30KKworc3RhdGljIGludCBzZ2lpb2M0X2lkZV9kbWFfY2hlY2soaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCS8qIEZJWE1FOiBjaGVjayBmb3IgYXZhaWxhYmxlIERNQSBtb2RlcyAqLworCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBYRkVSX01XX0RNQV8yKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjb3VsZG4ndCBzZXQgTVdETUEyIG1vZGUsICIKKwkJCQkgICAgInVzaW5nIFBJTyBpbnN0ZWFkXG4iLCBkcml2ZS0+bmFtZSk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CiB9CiAKIC8qIHJldHVybnMgMSBpZiBkbWEgaXJxIGlzc3VlZCwgMCBvdGhlcndpc2UgKi8KQEAgLTMxMCwyMSArMzA3LDEzIEBACiAJcmV0dXJuIHNnaWlvYzRfY2hlY2tpcnEoSFdJRihkcml2ZSkpOwogfQogCi1zdGF0aWMgaW50Ci1zZ2lpb2M0X2lkZV9kbWFfaG9zdF9vbihpZGVfZHJpdmVfdCAqIGRyaXZlKQorc3RhdGljIHZvaWQgc2dpaW9jNF9kbWFfaG9zdF9vbihpZGVfZHJpdmVfdCAqIGRyaXZlKQogewotCWlmIChkcml2ZS0+dXNpbmdfZG1hKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50Ci1zZ2lpb2M0X2lkZV9kbWFfaG9zdF9vZmYoaWRlX2RyaXZlX3QgKiBkcml2ZSkKK3N0YXRpYyB2b2lkIHNnaWlvYzRfZG1hX2hvc3Rfb2ZmKGlkZV9kcml2ZV90ICogZHJpdmUpCiB7CiAJc2dpaW9jNF9jbGVhcmlycShkcml2ZSk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtNDM2LDE2ICs0MjUsMTcgQEAKIHsKIAl1MzIgaW9jNF9kbWE7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCXU2NCBkbWFfYmFzZSA9IGh3aWYtPmRtYV9iYXNlOworCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBod2lmLT5kbWFfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGlvYzRfZG1hX2FkZHIgPSBkbWFfYmFzZSArIElPQzRfRE1BX0NUUkwgKiA0OwogCXUzMiBkbWFfYWRkciwgZW5kaW5nX2RtYV9hZGRyOwogCi0JaW9jNF9kbWEgPSBod2lmLT5JTkwoZG1hX2Jhc2UgKyBJT0M0X0RNQV9DVFJMICogNCk7CisJaW9jNF9kbWEgPSByZWFkbCgodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7CiAKIAlpZiAoaW9jNF9kbWEgJiBJT0M0X1NfRE1BX0FDVElWRSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiJXMoJXMpOldhcm5pbmchISBETUEgZnJvbSBwcmV2aW91cyB0cmFuc2ZlciB3YXMgc3RpbGwgYWN0aXZlXG4iLAogCQkgICAgICAgX19GVU5DVElPTl9fLCBkcml2ZS0+bmFtZSk7Ci0JCWh3aWYtPk9VVEwoSU9DNF9TX0RNQV9TVE9QLCBkbWFfYmFzZSArIElPQzRfRE1BX0NUUkwgKiA0KTsKKwkJd3JpdGVsKElPQzRfU19ETUFfU1RPUCwgKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOwogCQlpb2M0X2RtYSA9IHNnaWlvYzRfaWRlX2RtYV9zdG9wKGh3aWYsIGRtYV9iYXNlKTsKIAogCQlpZiAoaW9jNF9kbWEgJiBJT0M0X1NfRE1BX1NUT1ApCkBAIC00NTQsMTMgKzQ0NCwxMyBAQAogCQkJICAgICAgIF9fRlVOQ1RJT05fXywgZHJpdmUtPm5hbWUpOwogCX0KIAotCWlvYzRfZG1hID0gaHdpZi0+SU5MKGRtYV9iYXNlICsgSU9DNF9ETUFfQ1RSTCAqIDQpOworCWlvYzRfZG1hID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOwogCWlmIChpb2M0X2RtYSAmIElPQzRfU19ETUFfRVJST1IpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIiVzKCVzKSA6IFdhcm5pbmchISAtIERNQSBFcnJvciBkdXJpbmcgUHJldmlvdXMiCiAJCSAgICAgICAiIHRyYW5zZmVyIHwgc3RhdHVzIDB4JXhcbiIsCiAJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRyaXZlLT5uYW1lLCBpb2M0X2RtYSk7Ci0JCWh3aWYtPk9VVEwoSU9DNF9TX0RNQV9TVE9QLCBkbWFfYmFzZSArIElPQzRfRE1BX0NUUkwgKiA0KTsKKwkJd3JpdGVsKElPQzRfU19ETUFfU1RPUCwgKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOwogCQlpb2M0X2RtYSA9IHNnaWlvYzRfaWRlX2RtYV9zdG9wKGh3aWYsIGRtYV9iYXNlKTsKIAogCQlpZiAoaW9jNF9kbWEgJiBJT0M0X1NfRE1BX1NUT1ApCkBAIC00NzEsMTQgKzQ2MSwxNCBAQAogCiAJLyogQWRkcmVzcyBvZiB0aGUgU2NhdHRlciBHYXRoZXIgTGlzdCAqLwogCWRtYV9hZGRyID0gY3B1X3RvX2xlMzIoaHdpZi0+ZG1hdGFibGVfZG1hKTsKLQlod2lmLT5PVVRMKGRtYV9hZGRyLCBkbWFfYmFzZSArIElPQzRfRE1BX1BUUl9MICogNCk7CisJd3JpdGVsKGRtYV9hZGRyLCAodm9pZCBfX2lvbWVtICopKGRtYV9iYXNlICsgSU9DNF9ETUFfUFRSX0wgKiA0KSk7CiAKIAkvKiBBZGRyZXNzIG9mIHRoZSBFbmRpbmcgRE1BICovCiAJbWVtc2V0KGlkZV9nZXRfaHdpZmRhdGEoaHdpZiksIDAsIElPQzRfSURFX0NBQ0hFTElORV9TSVpFKTsKIAllbmRpbmdfZG1hX2FkZHIgPSBjcHVfdG9fbGUzMihod2lmLT5kbWFfc3RhdHVzKTsKLQlod2lmLT5PVVRMKGVuZGluZ19kbWFfYWRkciwgZG1hX2Jhc2UgKyBJT0M0X0RNQV9FTkRfQUREUiAqIDQpOworCXdyaXRlbChlbmRpbmdfZG1hX2FkZHIsICh2b2lkIF9faW9tZW0gKikoZG1hX2Jhc2UgKyBJT0M0X0RNQV9FTkRfQUREUiAqIDQpKTsKIAotCWh3aWYtPk9VVEwoZG1hX2RpcmVjdGlvbiwgZG1hX2Jhc2UgKyBJT0M0X0RNQV9DVFJMICogNCk7CisJd3JpdGVsKGRtYV9kaXJlY3Rpb24sICh2b2lkIF9faW9tZW0gKilpb2M0X2RtYV9hZGRyKTsKIAlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKIH0KIApAQCAtNTkwLDcgKzU4MCw3IEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQKIGlkZV9pbml0X3NnaWlvYzQoaWRlX2h3aWZfdCAqIGh3aWYpCiB7Ci0JaHdpZi0+bW1pbyA9IDI7CisJaHdpZi0+bW1pbyA9IDE7CiAJaHdpZi0+YXV0b2RtYSA9IDE7CiAJaHdpZi0+YXRhcGlfZG1hID0gMTsKIAlod2lmLT51bHRyYV9tYXNrID0gMHgwOwkvKiBEaXNhYmxlIFVsdHJhIERNQSAqLwpAQCAtNjEzLDEwICs2MDMsMTAgQEAKIAlod2lmLT5pZGVfZG1hX2VuZCA9ICZzZ2lpb2M0X2lkZV9kbWFfZW5kOwogCWh3aWYtPmlkZV9kbWFfY2hlY2sgPSAmc2dpaW9jNF9pZGVfZG1hX2NoZWNrOwogCWh3aWYtPmlkZV9kbWFfb24gPSAmc2dpaW9jNF9pZGVfZG1hX29uOwotCWh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkgPSAmc2dpaW9jNF9pZGVfZG1hX29mZl9xdWlldGx5OworCWh3aWYtPmRtYV9vZmZfcXVpZXRseSA9ICZzZ2lpb2M0X2RtYV9vZmZfcXVpZXRseTsKIAlod2lmLT5pZGVfZG1hX3Rlc3RfaXJxID0gJnNnaWlvYzRfaWRlX2RtYV90ZXN0X2lycTsKLQlod2lmLT5pZGVfZG1hX2hvc3Rfb24gPSAmc2dpaW9jNF9pZGVfZG1hX2hvc3Rfb247Ci0JaHdpZi0+aWRlX2RtYV9ob3N0X29mZiA9ICZzZ2lpb2M0X2lkZV9kbWFfaG9zdF9vZmY7CisJaHdpZi0+ZG1hX2hvc3Rfb24gPSAmc2dpaW9jNF9kbWFfaG9zdF9vbjsKKwlod2lmLT5kbWFfaG9zdF9vZmYgPSAmc2dpaW9jNF9kbWFfaG9zdF9vZmY7CiAJaHdpZi0+aWRlX2RtYV9sb3N0aXJxID0gJnNnaWlvYzRfaWRlX2RtYV9sb3N0aXJxOwogCWh3aWYtPmlkZV9kbWFfdGltZW91dCA9ICZfX2lkZV9kbWFfdGltZW91dDsKIApAQCAtNjg4LDcgKzY3OCw3IEBACiAJZGVmYXVsdF9od2lmX21taW9wcyhod2lmKTsKIAogCS8qIEluaXRpYWxpemluZyBjaGlwc2V0IElSUSBSZWdpc3RlcnMgKi8KLQlod2lmLT5PVVRMKDB4MDMsIGlycXBvcnQgKyBJT0M0X0lOVFJfU0VUICogNCk7CisJd3JpdGVsKDB4MDMsICh2b2lkIF9faW9tZW0gKikoaXJxcG9ydCArIElPQzRfSU5UUl9TRVQgKiA0KSk7CiAKIAlpZGVfaW5pdF9zZ2lpb2M0KGh3aWYpOwogCkBAIC03MjksOCArNzE5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBzZ2lpb2M0X2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7CitzdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBzZ2lpb2M0X2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkgLyogQ2hhbm5lbCAwICovCiAJIC5uYW1lID0gIlNHSUlPQzQiLAogCSAuaW5pdF9od2lmID0gaWRlX2luaXRfc2dpaW9jNCwKQEAgLTczOSw3ICs3MjgsNiBAQAogCSAuYXV0b2RtYSA9IEFVVE9ETUEsCiAJIC8qIFNHSSBJT0M0IGRvZXNuJ3QgaGF2ZSBlbmFibGViaXRzLiAqLwogCSAuYm9vdGFibGUgPSBPTl9CT0FSRCwKLQl9CiB9OwogCiBpbnQKQEAgLTc1MSw4ICs3MzksNyBAQAogCWlmIChpZGQtPmlkZF92YXJpYW50ID09IElPQzRfVkFSSUFOVF9QQ0lfUlQpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHBjaV9pbml0X3NnaWlvYzQoaWRkLT5pZGRfcGRldiwKLQkJCQkmc2dpaW9jNF9jaGlwc2V0c1tpZGQtPmlkZF9wY2lfaWQtPmRyaXZlcl9kYXRhXSk7CisJcmV0dXJuIHBjaV9pbml0X3NnaWlvYzQoaWRkLT5pZGRfcGRldiwgJnNnaWlvYzRfY2hpcHNldCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW9jNF9zdWJtb2R1bGUgaW9jNF9pZGVfc3VibW9kdWxlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYyBiL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKaW5kZXggNGZmODljNy4uN2I0YzE4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCkBAIC0xLDggKzEsOSBAQAogLyoKLSAqIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMJCVZlcnNpb24gMS4wNwlOb3YgMzAsIDIwMDMKKyAqIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMJCVZlcnNpb24gMS4xMQlKYW4gMjcsIDIwMDcKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMglBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDAzCQlSZWQgSGF0IDxhbGFuQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcJCU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiAgTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKgpAQCAtMjA1LDQxICsyMDYsMzkgQEAKIAl1bnNpZ25lZCBsb25nIHRmYWRkcgk9IHNpaW1hZ2Vfc2VscmVnKGh3aWYsIDB4MDIpOwogCQogCS8qIGNoZWF0IGZvciBub3cgYW5kIHVzZSB0aGUgZG9jcyAqLwotCXN3aXRjaChtb2RlX3dhbnRlZCkgewotCQljYXNlIDQ6CQotCQkJc3BlZWRwID0gMHgxMGMxOyAKLQkJCXNwZWVkdCA9IDB4MTBjMTsKLQkJCWJyZWFrOwotCQljYXNlIDM6CQotCQkJc3BlZWRwID0gMHgxMEMzOyAKLQkJCXNwZWVkdCA9IDB4MTBDMzsKLQkJCWJyZWFrOwotCQljYXNlIDI6CQotCQkJc3BlZWRwID0gMHgxMTA0OyAKLQkJCXNwZWVkdCA9IDB4MTI4MTsKLQkJCWJyZWFrOwotCQljYXNlIDE6CQkKLQkJCXNwZWVkcCA9IDB4MjI4MzsgCi0JCQlzcGVlZHQgPSAweDEyODE7Ci0JCQlicmVhazsKLQkJY2FzZSAwOgotCQlkZWZhdWx0OgotCQkJc3BlZWRwID0gMHgzMjhBOyAKLQkJCXNwZWVkdCA9IDB4MzI4QTsKLQkJCWJyZWFrOworCXN3aXRjaCAobW9kZV93YW50ZWQpIHsKKwljYXNlIDQ6CisJCXNwZWVkcCA9IDB4MTBjMTsKKwkJc3BlZWR0ID0gMHgxMGMxOworCQlicmVhazsKKwljYXNlIDM6CisJCXNwZWVkcCA9IDB4MTBjMzsKKwkJc3BlZWR0ID0gMHgxMGMzOworCQlicmVhazsKKwljYXNlIDI6CisJCXNwZWVkcCA9IDB4MTEwNDsKKwkJc3BlZWR0ID0gMHgxMjgxOworCQlicmVhazsKKwljYXNlIDE6CisJCXNwZWVkcCA9IDB4MjI4MzsKKwkJc3BlZWR0ID0gMHgyMjgzOworCQlicmVhazsKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkJc3BlZWRwID0gMHgzMjhhOworCQlzcGVlZHQgPSAweDMyOGE7CisJCWJyZWFrOwogCX0KLQlpZiAoaHdpZi0+bW1pbykKLQl7Ci0JCWh3aWYtPk9VVFcoc3BlZWR0LCBhZGRyKTsKLQkJaHdpZi0+T1VUVyhzcGVlZHAsIHRmYWRkcik7CisKKwlpZiAoaHdpZi0+bW1pbykgeworCQlod2lmLT5PVVRXKHNwZWVkcCwgYWRkcik7CisJCWh3aWYtPk9VVFcoc3BlZWR0LCB0ZmFkZHIpOwogCQkvKiBOb3cgc2V0IHVwIElPUkRZICovCiAJCWlmKG1vZGVfd2FudGVkID09IDMgfHwgbW9kZV93YW50ZWQgPT0gNCkKIAkJCWh3aWYtPk9VVFcoaHdpZi0+SU5XKHRmYWRkci0yKXwweDIwMCwgdGZhZGRyLTIpOwogCQllbHNlCiAJCQlod2lmLT5PVVRXKGh3aWYtPklOVyh0ZmFkZHItMikmfjB4MjAwLCB0ZmFkZHItMik7Ci0JfQotCWVsc2UKLQl7CisJfSBlbHNlIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGh3aWYtPnBjaV9kZXYsIGFkZHIsIHNwZWVkcCk7CiAJCXBjaV93cml0ZV9jb25maWdfd29yZChod2lmLT5wY2lfZGV2LCB0ZmFkZHIsIHNwZWVkdCk7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGh3aWYtPnBjaV9kZXYsIHRmYWRkci0yLCAmc3BlZWRwKTsKQEAgLTM5NywxMiArMzk2LDkgQEAKIAlpZiAoIXNwZWVkKQogCQlyZXR1cm4gMDsKIAotCWlmIChpZGVfc2V0X3hmZXJfcmF0ZShkcml2ZSwgc3BlZWQpKQorCWlmIChzaWltYWdlX3R1bmVfY2hpcHNldChkcml2ZSwgc3BlZWQpKQogCQlyZXR1cm4gMDsKIAotCWlmICghZHJpdmUtPmluaXRfc3BlZWQpCi0JCWRyaXZlLT5pbml0X3NwZWVkID0gc3BlZWQ7Ci0KIAlyZXR1cm4gaWRlX2RtYV9lbmFibGUoZHJpdmUpOwogfQogCkBAIC00MTgsMjUgKzQxNCwxMyBAQAogIAogc3RhdGljIGludCBzaWltYWdlX2NvbmZpZ19kcml2ZV9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBoZF9kcml2ZWlkICppZAk9IGRyaXZlLT5pZDsKKwlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQorCQlyZXR1cm4gMDsKIAotCWlmICgoaWQtPmNhcGFiaWxpdHkgJiAxKSAhPSAwICYmIGRyaXZlLT5hdXRvZG1hKSB7Ci0KLQkJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSkgewotCQkJaWYgKGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQotCQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKLQkJfQotCi0JCWdvdG8gZmFzdF9hdGFfcGlvOwotCi0JfSBlbHNlIGlmICgoaWQtPmNhcGFiaWxpdHkgJiA4KSB8fCAoaWQtPmZpZWxkX3ZhbGlkICYgMikpIHsKLWZhc3RfYXRhX3BpbzoKKwlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpCiAJCWNvbmZpZ19jaGlwc2V0X2Zvcl9waW8oZHJpdmUsIDEpOwotCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7Ci0JfQotCS8qIElPUkRZIG5vdCBzdXBwb3J0ZWQgKi8KLQlyZXR1cm4gMDsKKworCXJldHVybiAtMTsKIH0KIAogLyogcmV0dXJucyAxIGlmIGRtYSBpcnEgaXNzdWVkLCAwIG90aGVyd2lzZSAqLwpAQCAtNDcyLDExICs0NTYsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHIJPSBzaWltYWdlX3NlbHJlZyhod2lmLCAweDEpOwogCiAJaWYgKFNBVEFfRVJST1JfUkVHKSB7Ci0JCXUzMiBleHRfc3RhdCA9IGh3aWYtPklOTChiYXNlICsgMHgxMCk7CisJCXUzMiBleHRfc3RhdCA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKikoYmFzZSArIDB4MTApKTsKIAkJdTggd2F0Y2hkb2cgPSAwOwogCQlpZiAoZXh0X3N0YXQgJiAoKGh3aWYtPmNoYW5uZWwpID8gMHg0MCA6IDB4MTApKSB7Ci0JCQl1MzIgc2F0YV9lcnJvciA9IGh3aWYtPklOTChTQVRBX0VSUk9SX1JFRyk7Ci0JCQlod2lmLT5PVVRMKHNhdGFfZXJyb3IsIFNBVEFfRVJST1JfUkVHKTsKKwkJCXUzMiBzYXRhX2Vycm9yID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKVNBVEFfRVJST1JfUkVHKTsKKwkJCXdyaXRlbChzYXRhX2Vycm9yLCAodm9pZCBfX2lvbWVtICopU0FUQV9FUlJPUl9SRUcpOwogCQkJd2F0Y2hkb2cgPSAoc2F0YV9lcnJvciAmIDB4MDA2ODAwMDApID8gMSA6IDA7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc2F0YV9lcnJvciA9IDB4JTA4eCwgIgogCQkJCSJ3YXRjaGRvZyA9ICVkLCAlc1xuIiwKQEAgLTQ5MywxMSArNDc3LDExIEBACiAJfQogCiAJLyogcmV0dXJuIDEgaWYgSU5UUiBhc3NlcnRlZCAqLwotCWlmICgoaHdpZi0+SU5CKGh3aWYtPmRtYV9zdGF0dXMpICYgMHgwNCkgPT0gMHgwNCkKKwlpZiAoKHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfc3RhdHVzKSAmIDB4MDQpID09IDB4MDQpCiAJCXJldHVybiAxOwogCiAJLyogcmV0dXJuIDEgaWYgRGV2aWNlIElOVFIgYXNzZXJ0ZWQgKi8KLQlpZiAoKGh3aWYtPklOQihhZGRyKSAmIDgpID09IDgpCisJaWYgKChyZWFkYigodm9pZCBfX2lvbWVtICopYWRkcikgJiA4KSA9PSA4KQogCQlyZXR1cm4gMDsJLy9yZXR1cm4gMTsKIAogCXJldHVybiAwOwpAQCAtNTE5LDkgKzUwMyw5IEBACiAJdTMyIHN0YXRfY29uZmlnCQk9IDA7CiAJdW5zaWduZWQgbG9uZyBhZGRyCT0gc2lpbWFnZV9zZWxyZWcoaHdpZiwgMCk7CiAKLQlpZiAoaHdpZi0+bW1pbykgewotCQlzdGF0X2NvbmZpZyA9IGh3aWYtPklOTChhZGRyKTsKLQl9IGVsc2UKKwlpZiAoaHdpZi0+bW1pbykKKwkJc3RhdF9jb25maWcgPSByZWFkbCgodm9pZCBfX2lvbWVtICopYWRkcik7CisJZWxzZQogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoaHdpZi0+cGNpX2RldiwgYWRkciwgJnN0YXRfY29uZmlnKTsKIAogCXN3aXRjaCAoc3RhdGUpIHsKQEAgLTU1Nyw5ICs1NDEsMTAgQEAKIAlpZiAoU0FUQV9TVEFUVVNfUkVHKSB7CiAJCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAotCQlpZiAoKGh3aWYtPklOTChTQVRBX1NUQVRVU19SRUcpICYgMHgwMykgIT0gMHgwMykgeworCQkvKiBTQVRBX1NUQVRVU19SRUcgaXMgdmFsaWQgb25seSB3aGVuIGluIE1NSU8gbW9kZSAqLworCQlpZiAoKHJlYWRsKCh2b2lkIF9faW9tZW0gKilTQVRBX1NUQVRVU19SRUcpICYgMHgwMykgIT0gMHgwMykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlc2V0IHBoeSBkZWFkLCBzdGF0dXM9MHglMDh4XG4iLAotCQkJCWh3aWYtPm5hbWUsIGh3aWYtPklOTChTQVRBX1NUQVRVU19SRUcpKTsKKwkJCQlod2lmLT5uYW1lLCByZWFkbCgodm9pZCBfX2lvbWVtICopU0FUQV9TVEFUVVNfUkVHKSk7CiAJCQlIV0dST1VQKGRyaXZlKS0+cG9sbGluZyA9IDA7CiAJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJCX0KQEAgLTYxOSw3ICs2MDQsOCBAQAogCX0KIAogCWlmIChTQVRBX1NUQVRVU19SRUcpIHsKLQkJdTMyIHNhdGFfc3RhdCA9IGh3aWYtPklOTChTQVRBX1NUQVRVU19SRUcpOworCQkvKiBTQVRBX1NUQVRVU19SRUcgaXMgdmFsaWQgb25seSB3aGVuIGluIE1NSU8gbW9kZSAqLworCQl1MzIgc2F0YV9zdGF0ID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKVNBVEFfU1RBVFVTX1JFRyk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZXNldCBwaHksIHN0YXR1cz0weCUwOHgsICVzXG4iLAogCQkJaHdpZi0+bmFtZSwgc2F0YV9zdGF0LCBfX0ZVTkNUSU9OX18pOwogCQlpZiAoIShzYXRhX3N0YXQpKSB7CkBAIC04OTgsNyArODg0LDggQEAKICAgICAgICAJYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBhZGRyOwogCiAJaHdpZi0+ZG1hX2Jhc2UJCQk9IGJhc2UgKyAoY2ggPyAweDA4IDogMHgwMCk7Ci0JaHdpZi0+bW1pbwkJCT0gMjsKKworCWh3aWYtPm1taW8gPSAxOwogfQogCiBzdGF0aWMgaW50IGlzX2Rldl9zZWFnYXRlX3NhdGEoaWRlX2RyaXZlX3QgKmRyaXZlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMKaW5kZXggMWFmZmY2NS4uMmJhMDY2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCkBAIC02NjcsNjggKzY2NywyMSBAQAogCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2lzNTUxM19jb25maWdfZHJpdmVfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IHNpczU1MTNfY29uZmlnX3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBoZF9kcml2ZWlkICppZAk9IGRyaXZlLT5pZDsKKwljb25maWdfYXJ0X3J3cF9waW8oZHJpdmUsIDUpOwogCiAJZHJpdmUtPmluaXRfc3BlZWQgPSAwOwogCi0JaWYgKGlkICYmIChpZC0+Y2FwYWJpbGl0eSAmIDEpICYmIGRyaXZlLT5hdXRvZG1hKSB7CisJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSkgewotCQkJaWYgKGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQotCQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKLQkJfQotCi0JCWdvdG8gZmFzdF9hdGFfcGlvOwotCi0JfSBlbHNlIGlmICgoaWQtPmNhcGFiaWxpdHkgJiA4KSB8fCAoaWQtPmZpZWxkX3ZhbGlkICYgMikpIHsKLWZhc3RfYXRhX3BpbzoKKwlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpCiAJCXNpczU1MTNfdHVuZV9kcml2ZShkcml2ZSwgNSk7Ci0JCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKLQl9Ci0JLyogSU9SRFkgbm90IHN1cHBvcnRlZCAqLwotCXJldHVybiAwOworCisJcmV0dXJuIC0xOwogfQogCi0vKiBpbml0aWF0ZXMvYWJvcnRzIChVKURNQSByZWFkL3dyaXRlIG9wZXJhdGlvbnMgb24gYSBkcml2ZS4gKi8KLXN0YXRpYyBpbnQgc2lzNTUxM19jb25maWdfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JY29uZmlnX2RyaXZlX2FydF9yd3AoZHJpdmUpOwotCWNvbmZpZ19hcnRfcndwX3Bpbyhkcml2ZSwgNSk7Ci0JcmV0dXJuIHNpczU1MTNfY29uZmlnX2RyaXZlX3hmZXJfcmF0ZShkcml2ZSk7Ci19Ci0KLS8qCi0gIEZ1dHVyZSBzaW1wbGVyIGNvbmZpZ194ZmVyX3JhdGUgOgotICAgV2hlbiBpZGVfZmluZF9iZXN0X21vZGUgaXMgbWFkZSBiYWQtZHJpdmUgYXdhcmUKLSAgIC0gcmVtb3ZlIGNvbmZpZ19kcml2ZV94ZmVyX3JhdGUgYW5kIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEsCi0gICAtIHJlcGxhY2UgY29uZmlnX3hmZXJfcmF0ZSB3aXRoIHRoZSBmb2xsb3dpbmcKLQotc3RhdGljIGludCBzaXM1NTEzX2NvbmZpZ194ZmVyX3JhdGUgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1MTYgdzgwID0gSFdJRihkcml2ZSktPnVkbWFfZm91cjsKLQl1MTYgc3BlZWQ7Ci0KLQljb25maWdfZHJpdmVfYXJ0X3J3cChkcml2ZSk7Ci0JY29uZmlnX2FydF9yd3BfcGlvKGRyaXZlLCA1KTsKLQotCXNwZWVkID0gaWRlX2ZpbmRfYmVzdF9tb2RlKGRyaXZlLAotCQlYRkVSX1BJTyB8IFhGRVJfRVBJTyB8IFhGRVJfU1dETUEgfCBYRkVSX01XRE1BIHwKLQkJKGNoaXBzZXRfZmFtaWx5ID49IEFUQV8zMyA/IFhGRVJfVURNQSA6IDApIHwKLQkJKHc4MCAmJiBjaGlwc2V0X2ZhbWlseSA+PSBBVEFfNjYgPyBYRkVSX1VETUFfNjYgOiAwKSB8Ci0JCSh3ODAgJiYgY2hpcHNldF9mYW1pbHkgPj0gQVRBXzEwMGEgPyBYRkVSX1VETUFfMTAwIDogMCkgfAotCQkodzgwICYmIGNoaXBzZXRfZmFtaWx5ID49IEFUQV8xMzNhID8gWEZFUl9VRE1BXzEzMyA6IDApKTsKLQotCXNpczU1MTNfdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCk7Ci0KLQlpZiAoZHJpdmUtPmF1dG9kbWEgJiYgKHNwZWVkICYgWEZFUl9NT0RFKSAhPSBYRkVSX1BJTykKLQkJcmV0dXJuIEhXSUYoZHJpdmUpLT5pZGVfZG1hX29uKGRyaXZlKTsKLQlyZXR1cm4gSFdJRihkcml2ZSktPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotfQotKi8KLQogLyogQ2hpcCBkZXRlY3Rpb24gYW5kIGdlbmVyYWwgY29uZmlnICovCiBzdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdCBpbml0X2NoaXBzZXRfc2lzNTUxMyAoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jIGIvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKaW5kZXggMTcwYTI2MS4uM2E4YTc2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKQEAgLTE2MSwxNCArMTYxLDE0IEBACiAJCWlmIChpZC0+ZmllbGRfdmFsaWQgJiAyKSB7CiAJCQlpZiAoKGlkLT5kbWFfbXdvcmQgJiBod2lmLT5td2RtYV9tYXNrKSB8fAogCQkJICAgIChpZC0+ZG1hXzF3b3JkICYgaHdpZi0+c3dkbWFfbWFzaykpCi0JCQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOworCQkJCXJldHVybiAwOwogCQl9CiAKLQkJaWYgKF9faWRlX2RtYV9nb29kX2RyaXZlKGRyaXZlKSkKLQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKKwkJaWYgKF9faWRlX2RtYV9nb29kX2RyaXZlKGRyaXZlKSAmJiBpZC0+ZWlkZV9kbWFfdGltZSA8IDE1MCkKKwkJCXJldHVybiAwOwogCX0gd2hpbGUgKDApOwogCi0JcmV0dXJuIGh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOworCXJldHVybiAtMTsKIH0KIAogLyoKQEAgLTIxNSw3ICsyMTUsNyBAQAogCSAqIFdhcyBETUEgZW5hYmxlZD8gIElmIHNvLCBkaXNhYmxlIGl0IC0gd2UncmUgcmVzZXR0aW5nIHRoZQogCSAqIGhvc3QuICBUaGUgSURFIGxheWVyIHdpbGwgYmUgaGFuZGxpbmcgdGhlIGRyaXZlIGZvciB1cy4KIAkgKi8KLQl2YWwgPSBod2lmLT5JTkIoZG1hX2Jhc2UpOworCXZhbCA9IGluYihkbWFfYmFzZSk7CiAJaWYgKHZhbCAmIDEpIHsKIAkJb3V0Yih2YWwgJiB+MSwgZG1hX2Jhc2UpOwogCQlwcmludGsoInNsODJjMTA1OiBETUEgd2FzIGVuYWJsZWRcbiIpOwpAQCAtMjU5LDI4ICsyNTksMjIgQEAKIHsKIAlEQkcoKCJzbDgyYzEwNV9pZGVfZG1hX29uKGRyaXZlOiVzKVxuIiwgZHJpdmUtPm5hbWUpKTsKIAotCWlmIChjb25maWdfZm9yX2RtYShkcml2ZSkpIHsKLQkJY29uZmlnX2Zvcl9waW8oZHJpdmUsIDQsIDAsIDApOwotCQlyZXR1cm4gSFdJRihkcml2ZSktPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotCX0KKwlpZiAoY29uZmlnX2Zvcl9kbWEoZHJpdmUpKQorCQlyZXR1cm4gMTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogRE1BIGVuYWJsZWRcbiIsIGRyaXZlLT5uYW1lKTsKIAlyZXR1cm4gX19pZGVfZG1hX29uKGRyaXZlKTsKIH0KIAotc3RhdGljIGludCBzbDgyYzEwNV9pZGVfZG1hX29mZl9xdWlldGx5IChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBzbDgyYzEwNV9kbWFfb2ZmX3F1aWV0bHkoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXU4IHNwZWVkID0gWEZFUl9QSU9fMDsKLQlpbnQgcmM7Ci0JCi0JREJHKCgic2w4MmMxMDVfaWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZTolcylcbiIsIGRyaXZlLT5uYW1lKSk7CiAKLQlyYyA9IF9faWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJREJHKCgic2w4MmMxMDVfZG1hX29mZl9xdWlldGx5KGRyaXZlOiVzKVxuIiwgZHJpdmUtPm5hbWUpKTsKKworCWlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwogCWlmIChkcml2ZS0+cGlvX3NwZWVkKQogCQlzcGVlZCA9IGRyaXZlLT5waW9fc3BlZWQgLSBYRkVSX1BJT18wOwogCWNvbmZpZ19mb3JfcGlvKGRyaXZlLCBzcGVlZCwgMCwgMSk7Ci0JZHJpdmUtPmN1cnJlbnRfc3BlZWQgPSBkcml2ZS0+cGlvX3NwZWVkOwotCi0JcmV0dXJuIHJjOwogfQogCiAvKgpAQCAtNDAxLDExICszOTUsOSBAQAogLyoKICAqIEluaXRpYWxpc2UgdGhlIGNoaXAKICAqLwotCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3NsODJjMTA1KGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJdW5zaWduZWQgaW50IHJldjsKLQl1OCBkbWFfc3RhdGU7CiAKIAlEQkcoKCJpbml0X2h3aWZfc2w4MmMxMDUoaHdpZjogaWRlJWQpXG4iLCBod2lmLT5pbmRleCkpOwogCkBAIC00MzEsNyArNDIzLDYgQEAKIAlpZiAoIWh3aWYtPmRtYV9iYXNlKQogCQlyZXR1cm47CiAKLQlkbWFfc3RhdGUgPSBod2lmLT5JTkIoaHdpZi0+ZG1hX2Jhc2UgKyAyKSAmIH4weDYwOwogCXJldiA9IHNsODJjMTA1X2JyaWRnZV9yZXZpc2lvbihod2lmLT5wY2lfZGV2KTsKIAlpZiAocmV2IDw9IDUpIHsKIAkJLyoKQEAgLTQ0MSwxNSArNDMyLDEyIEBACiAJCXByaW50aygiICAgICVzOiBXaW5ib25kIDU1MyBicmlkZ2UgcmV2aXNpb24gJWQsIEJNLURNQSBkaXNhYmxlZFxuIiwKIAkJICAgICAgIGh3aWYtPm5hbWUsIHJldik7CiAJfSBlbHNlIHsKLQkJZG1hX3N0YXRlIHw9IDB4NjA7Ci0KIAkJaHdpZi0+YXRhcGlfZG1hID0gMTsKLQkJaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7Ci0JCWh3aWYtPnN3ZG1hX21hc2sgPSAweDA3OworCQlod2lmLT5td2RtYV9tYXNrID0gMHgwNDsKIAogCQlod2lmLT5pZGVfZG1hX2NoZWNrID0gJnNsODJjMTA1X2NoZWNrX2RyaXZlOwogCQlod2lmLT5pZGVfZG1hX29uID0gJnNsODJjMTA1X2lkZV9kbWFfb247Ci0JCWh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkgPSAmc2w4MmMxMDVfaWRlX2RtYV9vZmZfcXVpZXRseTsKKwkJaHdpZi0+ZG1hX29mZl9xdWlldGx5ID0gJnNsODJjMTA1X2RtYV9vZmZfcXVpZXRseTsKIAkJaHdpZi0+aWRlX2RtYV9sb3N0aXJxID0gJnNsODJjMTA1X2lkZV9kbWFfbG9zdF9pcnE7CiAJCWh3aWYtPmRtYV9zdGFydCA9ICZzbDgyYzEwNV9pZGVfZG1hX3N0YXJ0OwogCQlod2lmLT5pZGVfZG1hX3RpbWVvdXQgPSAmc2w4MmMxMDVfaWRlX2RtYV90aW1lb3V0OwpAQCAtNDYyLDcgKzQ1MCw2IEBACiAJCWlmIChod2lmLT5tYXRlKQogCQkJaHdpZi0+c2VyaWFsaXplZCA9IGh3aWYtPm1hdGUtPnNlcmlhbGl6ZWQgPSAxOwogCX0KLQlod2lmLT5PVVRCKGRtYV9zdGF0ZSwgaHdpZi0+ZG1hX2Jhc2UgKyAyKTsKIH0KIAogc3RhdGljIGlkZV9wY2lfZGV2aWNlX3Qgc2w4MmMxMDVfY2hpcHNldCBfX2RldmluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMgYi9kcml2ZXJzL2lkZS9wY2kvc2xjOTBlNjYuYwppbmRleCAyNjYzZGRiLi5hZTdlYjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2xjOTBlNjYuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2xjOTBlNjYuYwpAQCAtMTc5LDI2ICsxNzksMTYgQEAKIAogc3RhdGljIGludCBzbGM5MGU2Nl9jb25maWdfZHJpdmVfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBoZF9kcml2ZWlkICppZAk9IGRyaXZlLT5pZDsKLQogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmICgoaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBkcml2ZS0+YXV0b2RtYSkgeworCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgc2xjOTBlNjZfY29uZmlnX2RyaXZlX2Zvcl9kbWEoZHJpdmUpKQorCQlyZXR1cm4gMDsKIAotCQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIHNsYzkwZTY2X2NvbmZpZ19kcml2ZV9mb3JfZG1hKGRyaXZlKSkKLQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKKwlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpCisJCSh2b2lkKXNsYzkwZTY2X3R1bmVfY2hpcHNldChkcml2ZSwgWEZFUl9QSU9fMCArCisJCQkJaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDQsIE5VTEwpKTsKIAotCQlnb3RvIGZhc3RfYXRhX3BpbzsKLQotCX0gZWxzZSBpZiAoKGlkLT5jYXBhYmlsaXR5ICYgOCkgfHwgKGlkLT5maWVsZF92YWxpZCAmIDIpKSB7Ci1mYXN0X2F0YV9waW86Ci0JCSh2b2lkKSBod2lmLT5zcGVlZHByb2MoZHJpdmUsIFhGRVJfUElPXzAgKwotCQkJCSAgICAgICBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIDI1NSwgNCwgTlVMTCkpOwotCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7Ci0JfQotCS8qIElPUkRZIG5vdCBzdXBwb3J0ZWQgKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfc2xjOTBlNjYgKGlkZV9od2lmX3QgKmh3aWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdGM4NmMwMDEuYyBiL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCmluZGV4IDJhZDcyYmIuLjBiNmQ4MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCkBAIC00NSw3ICs0NSw3IEBACiAKIAlzY3IgJj0gKHNwZWVkIDwgWEZFUl9NV19ETUFfMCkgPyAweGY4ZmYgOiAweGZmMGY7CiAJc2NyIHw9IG1vZGU7Ci0JaHdpZi0+T1VUVyhzY3IsIHNjcl9wb3J0KTsKKwlvdXR3KHNjciwgc2NyX3BvcnQpOwogCiAJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIHNwZWVkKTsKIH0KQEAgLTg5LDE1ICs4OSwxNSBAQAogCQkgICAgICAgImF0dGVtcHRpbmcgcmVjb3ZlcnkuLi5cbiIsIGRyaXZlLT5uYW1lKTsKIAogCQkvKiBTdG9wIERNQSAqLwotCQlod2lmLT5PVVRCKGRtYV9jbWQgJiB+MHgwMSwgaHdpZi0+ZG1hX2NvbW1hbmQpOworCQlvdXRiKGRtYV9jbWQgJiB+MHgwMSwgaHdpZi0+ZG1hX2NvbW1hbmQpOwogCiAJCS8qIFNldHVwIHRoZSBkdW1teSBETUEgdHJhbnNmZXIgKi8KLQkJaHdpZi0+T1VUVygwLCBzY19iYXNlICsgMHgwYSk7CS8qIFNlY3RvciBDb3VudCAqLwotCQlod2lmLT5PVVRXKDAsIHR3Y3JfcG9ydCk7CS8qIFRyYW5zZmVyIFdvcmQgQ291bnQgMSBvciAyICovCisJCW91dHcoMCwgc2NfYmFzZSArIDB4MGEpOwkvKiBTZWN0b3IgQ291bnQgKi8KKwkJb3V0dygwLCB0d2NyX3BvcnQpOwkvKiBUcmFuc2ZlciBXb3JkIENvdW50IDEgb3IgMiAqLwogCiAJCS8qIFN0YXJ0IHRoZSBkdW1teSBETUEgdHJhbnNmZXIgKi8KLQkJaHdpZi0+T1VUQigweDAwLCBod2lmLT5kbWFfY29tbWFuZCk7IC8qIGNsZWFyIFJfT1JfV0NUUiBmb3Igd3JpdGUgKi8KLQkJaHdpZi0+T1VUQigweDAxLCBod2lmLT5kbWFfY29tbWFuZCk7IC8qIHNldCBTVEFSVF9TVE9QQk0gKi8KKwkJb3V0YigweDAwLCBod2lmLT5kbWFfY29tbWFuZCk7IC8qIGNsZWFyIFJfT1JfV0NUUiBmb3Igd3JpdGUgKi8KKwkJb3V0YigweDAxLCBod2lmLT5kbWFfY29tbWFuZCk7IC8qIHNldCBTVEFSVF9TVE9QQk0gKi8KIAogCQkvKgogCQkgKiBJZiBhbiBpbnRlcnJ1cHQgd2FzIHBlbmRpbmcsIGl0IHNob3VsZCBjb21lIHRocnUgc2hvcnRseS4KQEAgLTEyOCw4ICsxMjgsOCBAQAogCSAqIHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0gY29udHJvbCByZWdpc3RlcnMgZm9yIERNQSB0byB3b3JrCiAJICogd2l0aCBMQkE0OCBhbmQgQVRBUEkgZGV2aWNlcy4uLgogCSAqLwotCWh3aWYtPk9VVFcobnNlY3RvcnMsIHNjX2Jhc2UgKyAweDBhKTsJLyogU2VjdG9yIENvdW50ICovCi0JaHdpZi0+T1VUVyhTRUNUT1JfU0laRSAvIDIsIHR3Y3JfcG9ydCk7IC8qIFRyYW5zZmVyIFdvcmQgQ291bnQgMS8yICovCisJb3V0dyhuc2VjdG9ycywgc2NfYmFzZSArIDB4MGEpOwkvKiBTZWN0b3IgQ291bnQgKi8KKwlvdXR3KFNFQ1RPUl9TSVpFIC8gMiwgdHdjcl9wb3J0KTsgLyogVHJhbnNmZXIgV29yZCBDb3VudCAxLzIgKi8KIAogCS8qIEluc3RhbGwgb3VyIHRpbWVvdXQgZXhwaXJ5IGhvb2ssIHNhdmluZyB0aGUgY3VycmVudCBoYW5kbGVyLi4uICovCiAJaWRlX3NldF9od2lmZGF0YShod2lmLCBod2dyb3VwLT5leHBpcnkpOwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJfQogCiAJLyogU3lzdGVtIENvbnRyb2wgMSBSZWdpc3RlciBiaXQgMTEgKEFUQSBIYXJkIFJlc2V0KSB3cml0ZSAqLwotCWh3aWYtPk9VVFcoc2NyMSwgc2NfYmFzZSArIDB4MDApOworCW91dHcoc2NyMSwgc2NfYmFzZSArIDB4MDApOwogCXJldHVybiAwOwogfQogCkBAIC0xODUsMjMgKzE4NSwxMyBAQAogCiBzdGF0aWMgaW50IHRjODZjMDAxX2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7CisJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAoKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgZHJpdmUtPmF1dG9kbWEpIHsKLQotCQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQotCQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOwotCi0JCWdvdG8gZmFzdF9hdGFfcGlvOwotCi0JfSBlbHNlIGlmICgoaWQtPmNhcGFiaWxpdHkgJiA4KSB8fCAoaWQtPmZpZWxkX3ZhbGlkICYgMikpIHsKLWZhc3RfYXRhX3BpbzoKKwlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpCiAJCXRjODZjMDAxX3R1bmVfZHJpdmUoZHJpdmUsIDI1NSk7Ci0JCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKLQl9Ci0JLyogSU9SRFkgbm90IHN1cHBvcnRlZCAqLwotCXJldHVybiAwOworCisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3RjODZjMDAxKGlkZV9od2lmX3QgKmh3aWYpCkBAIC0yMTAsMTMgKzIwMCwxMyBAQAogCXUxNiBzY3IxCQk9IGh3aWYtPklOVyhzY19iYXNlICsgMHgwMCk7OwogCiAJLyogU3lzdGVtIENvbnRyb2wgMSBSZWdpc3RlciBiaXQgMTUgKFNvZnQgUmVzZXQpIHNldCAqLwotCWh3aWYtPk9VVFcoc2NyMSB8ICAweDgwMDAsIHNjX2Jhc2UgKyAweDAwKTsKKwlvdXR3KHNjcjEgfCAgMHg4MDAwLCBzY19iYXNlICsgMHgwMCk7CiAKIAkvKiBTeXN0ZW0gQ29udHJvbCAxIFJlZ2lzdGVyIGJpdCAxNCAoRklGTyBSZXNldCkgc2V0ICovCi0JaHdpZi0+T1VUVyhzY3IxIHwgIDB4NDAwMCwgc2NfYmFzZSArIDB4MDApOworCW91dHcoc2NyMSB8ICAweDQwMDAsIHNjX2Jhc2UgKyAweDAwKTsKIAogCS8qIFN5c3RlbSBDb250cm9sIDEgUmVnaXN0ZXI6IHJlc2V0IGNsZWFyICovCi0JaHdpZi0+T1VUVyhzY3IxICYgfjB4YzAwMCwgc2NfYmFzZSArIDB4MDApOworCW91dHcoc2NyMSAmIH4weGMwMDAsIHNjX2Jhc2UgKyAweDAwKTsKIAogCS8qIFN0b3JlIHRoZSBzeXN0ZW0gY29udHJvbCByZWdpc3RlciBiYXNlIGZvciBjb252ZW5pZW5jZS4uLiAqLwogCWh3aWYtPmNvbmZpZ19kYXRhID0gc2NfYmFzZTsKQEAgLTIzNCw3ICsyMjQsNyBAQAogCSAqIFNlY3RvciBDb3VudCBDb250cm9sIFJlZ2lzdGVyIGJpdHMgMCBhbmQgMSBzZXQ6CiAJICogc29mdHdhcmUgc2V0cyBTZWN0b3IgQ291bnQgUmVnaXN0ZXIgZm9yIG1hc3RlciBhbmQgc2xhdmUgZGV2aWNlCiAJICovCi0JaHdpZi0+T1VUVygweDAwMDMsIHNjX2Jhc2UgKyAweDBjKTsKKwlvdXR3KDB4MDAwMywgc2NfYmFzZSArIDB4MGMpOwogCiAJLyogU2VjdG9yIENvdW50IFJlZ2lzdGVyIGxpbWl0ICovCiAJaHdpZi0+cnFzaXplCSA9IDB4ZmZmZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMgYi9kcml2ZXJzL2lkZS9wY2kvdHJpZmxleC5jCmluZGV4IGIxM2NjZTEuLjVlMDYxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3RyaWZsZXguYwpAQCAtMTA0LDI5ICsxMDQsMjEgQEAKIHsKIAlpbnQgc3BlZWQgPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCAwKTsgLyogTm8gdWx0cmEgc3BlZWRzICovCiAKLQlpZiAoIXNwZWVkKSB7IAotCQl1OCBwc3BlZWQgPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIDI1NSwgNCwgTlVMTCk7Ci0JCXNwZWVkID0gWEZFUl9QSU9fMCArIHBzcGVlZDsKLQl9Ci0JCisJaWYgKCFzcGVlZCkKKwkJcmV0dXJuIDA7CisKIAkodm9pZCkgdHJpZmxleF90dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKIAkgcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKIH0KIAogc3RhdGljIGludCB0cmlmbGV4X2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7CisJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiB0cmlmbGV4X2NvbmZpZ19kcml2ZV9mb3JfZG1hKGRyaXZlKSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAoKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgZHJpdmUtPmF1dG9kbWEpIHsKLQkJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSkgewotCQkJaWYgKHRyaWZsZXhfY29uZmlnX2RyaXZlX2Zvcl9kbWEoZHJpdmUpKQotCQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKLQkJfQotCX0KKwl0cmlmbGV4X3R1bmVfZHJpdmUoZHJpdmUsIDI1NSk7CiAKLQlod2lmLT50dW5lcHJvYyhkcml2ZSwgMjU1KTsKLQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3RyaWZsZXgoaWRlX2h3aWZfdCAqaHdpZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS90cm0yOTAuYyBiL2RyaXZlcnMvaWRlL3BjaS90cm0yOTAuYwppbmRleCAxNzRiODhjLi5jYmIxYjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvdHJtMjkwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3RybTI5MC5jCkBAIC0xNTcsMTYgKzE1NywxNiBAQAogCWlmIChyZWcgIT0gaHdpZi0+c2VsZWN0X2RhdGEpIHsKIAkJaHdpZi0+c2VsZWN0X2RhdGEgPSByZWc7CiAJCS8qIHNldCBQSU8vRE1BICovCi0JCWh3aWYtPk9VVEIoMHg1MXwoaHdpZi0+Y2hhbm5lbDw8MyksIGh3aWYtPmNvbmZpZ19kYXRhKzEpOwotCQlod2lmLT5PVVRXKHJlZyAmIDB4ZmYsIGh3aWYtPmNvbmZpZ19kYXRhKTsKKwkJb3V0YigweDUxIHwgKGh3aWYtPmNoYW5uZWwgPDwgMyksIGh3aWYtPmNvbmZpZ19kYXRhICsgMSk7CisJCW91dHcocmVnICYgMHhmZiwgaHdpZi0+Y29uZmlnX2RhdGEpOwogCX0KIAogCS8qIGVuYWJsZSBJUlEgaWYgbm90IHByb2JpbmcgKi8KIAlpZiAoZHJpdmUtPnByZXNlbnQpIHsKLQkJcmVnID0gaHdpZi0+SU5XKGh3aWYtPmNvbmZpZ19kYXRhICsgMyk7CisJCXJlZyA9IGludyhod2lmLT5jb25maWdfZGF0YSArIDMpOwogCQlyZWcgJj0gMHgxMzsKIAkJcmVnICY9IH4oMSA8PCBod2lmLT5jaGFubmVsKTsKLQkJaHdpZi0+T1VUVyhyZWcsIGh3aWYtPmNvbmZpZ19kYXRhKzMpOworCQlvdXR3KHJlZywgaHdpZi0+Y29uZmlnX2RhdGEgKyAzKTsKIAl9CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0xNzcsMTUgKzE3NywxMiBAQAogCXRybTI5MF9wcmVwYXJlX2RyaXZlKGRyaXZlLCBkcml2ZS0+dXNpbmdfZG1hKTsKIH0KIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQogc3RhdGljIHZvaWQgdHJtMjkwX2lkZV9kbWFfZXhlY19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjb21tYW5kKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQogCUJVR19PTihIV0dST1VQKGRyaXZlKS0+aGFuZGxlciAhPSBOVUxMKTsJLyogcGFyYW5vaWEgY2hlY2sgKi8KIAlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZpZGVfZG1hX2ludHIsIFdBSVRfQ01ELCBOVUxMKTsKIAkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KLQlod2lmLT5PVVRCKGNvbW1hbmQsIElERV9DT01NQU5EX1JFRyk7CisJb3V0Yihjb21tYW5kLCBJREVfQ09NTUFORF9SRUcpOwogfQogCiBzdGF0aWMgaW50IHRybTI5MF9pZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTIxMSwxMCArMjA4LDEwIEBACiAJfQogCS8qIHNlbGVjdCBETUEgeGZlciAqLwogCXRybTI5MF9wcmVwYXJlX2RyaXZlKGRyaXZlLCAxKTsKLQlod2lmLT5PVVRMKGh3aWYtPmRtYXRhYmxlX2RtYXxydywgaHdpZi0+ZG1hX2NvbW1hbmQpOworCW91dGwoaHdpZi0+ZG1hdGFibGVfZG1hIHwgcncsIGh3aWYtPmRtYV9jb21tYW5kKTsKIAlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKIAkvKiBzdGFydCBETUEgKi8KLQlod2lmLT5PVVRXKChjb3VudCAqIDIpIC0gMSwgaHdpZi0+ZG1hX3N0YXR1cyk7CisJb3V0dygoY291bnQgKiAyKSAtIDEsIGh3aWYtPmRtYV9zdGF0dXMpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzAsNyArMjI3LDcgQEAKIAlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8KIAlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0Jc3RhdHVzID0gaHdpZi0+SU5XKGh3aWYtPmRtYV9zdGF0dXMpOworCXN0YXR1cyA9IGludyhod2lmLT5kbWFfc3RhdHVzKTsKIAlyZXR1cm4gKHN0YXR1cyAhPSAweDAwZmYpOwogfQogCkBAIC0yMzksMTAgKzIzNiw5IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwogCXUxNiBzdGF0dXMgPSAwOwogCi0Jc3RhdHVzID0gaHdpZi0+SU5XKGh3aWYtPmRtYV9zdGF0dXMpOworCXN0YXR1cyA9IGludyhod2lmLT5kbWFfc3RhdHVzKTsKIAlyZXR1cm4gKHN0YXR1cyA9PSAweDAwZmYpOwogfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQSAqLwogCiAvKgogICogSW52b2tlZCBmcm9tIGlkZS1kbWEuYyBhdCBib290IHRpbWUuCkBAIC0yNjksMTUgKzI2NSwxNSBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCS8qIHB1dCBjb25maWcgcmVnIGludG8gZmlyc3QgYnl0ZSBvZiBod2lmLT5zZWxlY3RfZGF0YSAqLwotCWh3aWYtPk9VVEIoMHg1MXwoaHdpZi0+Y2hhbm5lbDw8MyksIGh3aWYtPmNvbmZpZ19kYXRhKzEpOworCW91dGIoMHg1MSB8IChod2lmLT5jaGFubmVsIDw8IDMpLCBod2lmLT5jb25maWdfZGF0YSArIDEpOwogCS8qIHNlbGVjdCBQSU8gYXMgZGVmYXVsdCAqLwogCWh3aWYtPnNlbGVjdF9kYXRhID0gMHgyMTsKLQlod2lmLT5PVVRCKGh3aWYtPnNlbGVjdF9kYXRhLCBod2lmLT5jb25maWdfZGF0YSk7CisJb3V0Yihod2lmLT5zZWxlY3RfZGF0YSwgaHdpZi0+Y29uZmlnX2RhdGEpOwogCS8qIGdldCBJUlEgaW5mbyAqLwotCXJlZyA9IGh3aWYtPklOQihod2lmLT5jb25maWdfZGF0YSszKTsKKwlyZWcgPSBpbmIoaHdpZi0+Y29uZmlnX2RhdGEgKyAzKTsKIAkvKiBtYXNrIElSUXMgZm9yIGJvdGggcG9ydHMgKi8KIAlyZWcgPSAocmVnICYgMHgxMCkgfCAweDAzOwotCWh3aWYtPk9VVEIocmVnLCBod2lmLT5jb25maWdfZGF0YSszKTsKKwlvdXRiKHJlZywgaHdpZi0+Y29uZmlnX2RhdGEgKyAzKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAoKHJlZyAmIDB4MTApKQpAQCAtMjg5LDEzICsyODUsMTEgQEAKIAogCWlkZV9zZXR1cF9kbWEoaHdpZiwgKGh3aWYtPmNvbmZpZ19kYXRhICsgNCkgXiAoaHdpZi0+Y2hhbm5lbCA/IDB4MDA4MCA6IDB4MDAwMCksIDMpOwogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCiAJaHdpZi0+ZG1hX3NldHVwID0gJnRybTI5MF9pZGVfZG1hX3NldHVwOwogCWh3aWYtPmRtYV9leGVjX2NtZCA9ICZ0cm0yOTBfaWRlX2RtYV9leGVjX2NtZDsKIAlod2lmLT5kbWFfc3RhcnQgPSAmdHJtMjkwX2lkZV9kbWFfc3RhcnQ7CiAJaHdpZi0+aWRlX2RtYV9lbmQgPSAmdHJtMjkwX2lkZV9kbWFfZW5kOwogCWh3aWYtPmlkZV9kbWFfdGVzdF9pcnEgPSAmdHJtMjkwX2lkZV9kbWFfdGVzdF9pcnE7Ci0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BICovCiAKIAlod2lmLT5zZWxlY3Rwcm9jID0gJnRybTI5MF9zZWxlY3Rwcm9jOwogCWh3aWYtPmF1dG9kbWEgPSAwOwkJLyogcGxheSBpdCBzYWZlIGZvciBub3cgKi8KQEAgLTMxMiwxNiArMzA2LDE2IEBACiAJCXN0YXRpYyB1MTYgbmV4dF9vZmZzZXQgPSAwOwogCQl1OCBvbGRfbWFzazsKIAotCQlod2lmLT5PVVRCKDB4NTR8KGh3aWYtPmNoYW5uZWw8PDMpLCBod2lmLT5jb25maWdfZGF0YSsxKTsKLQkJb2xkID0gaHdpZi0+SU5XKGh3aWYtPmNvbmZpZ19kYXRhKTsKKwkJb3V0YigweDU0IHwgKGh3aWYtPmNoYW5uZWwgPDwgMyksIGh3aWYtPmNvbmZpZ19kYXRhICsgMSk7CisJCW9sZCA9IGludyhod2lmLT5jb25maWdfZGF0YSk7CiAJCW9sZCAmPSB+MTsKLQkJb2xkX21hc2sgPSBod2lmLT5JTkIob2xkKzIpOworCQlvbGRfbWFzayA9IGluYihvbGQgKyAyKTsKIAkJaWYgKG9sZCAhPSBjb21wYXQgJiYgb2xkX21hc2sgPT0gMHhmZikgewogCQkJLyogbGVhdmUgbG93ZXIgMTAgYml0cyB1bnRvdWNoZWQgKi8KIAkJCWNvbXBhdCArPSAobmV4dF9vZmZzZXQgKz0gMHg0MDApOwogCQkJaHdpZi0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSA9IGNvbXBhdCArIDI7Ci0JCQlod2lmLT5PVVRXKGNvbXBhdHwxLCBod2lmLT5jb25maWdfZGF0YSk7Ci0JCQluZXcgPSBod2lmLT5JTlcoaHdpZi0+Y29uZmlnX2RhdGEpOworCQkJb3V0dyhjb21wYXQgfCAxLCBod2lmLT5jb25maWdfZGF0YSk7CisJCQluZXcgPSBpbncoaHdpZi0+Y29uZmlnX2RhdGEpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvbnRyb2wgYmFzZXJlZyB3b3JrYXJvdW5kOiAiCiAJCQkJIm9sZD0weCUwNHgsIG5ldz0weCUwNHhcbiIsCiAJCQkJaHdpZi0+bmFtZSwgb2xkLCBuZXcgJiB+MSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMKaW5kZXggNmZiNmU1MC4uYTUwODU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS92aWE4MmN4eHguYwpAQCAtMjQwLDggKzI0MCw5IEBACiAJdmlhX3NldF9kcml2ZShkcml2ZSwgc3BlZWQpOwogCiAJaWYgKGRyaXZlLT5hdXRvZG1hICYmIChzcGVlZCAmIFhGRVJfTU9ERSkgIT0gWEZFUl9QSU8pCi0JCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKLQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgc3RydWN0IHZpYV9pc2FfYnJpZGdlICp2aWFfY29uZmlnX2ZpbmQoc3RydWN0IHBjaV9kZXYgKippc2EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jIGIvZHJpdmVycy9pZGUvcHBjL3BtYWMuYwppbmRleCBkOGVhMjM3Li4zOTVkMzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCisrKyBiL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKQEAgLTEyMzcsNyArMTIzNyw3IEBACiAgICAgICAgCWh3aWYtPk9VVEJTWU5DID0gcG1hY19vdXRic3luYzsKIAogCS8qIFRlbGwgY29tbW9uIGNvZGUgX25vdF8gdG8gbWVzcyB3aXRoIHJlc291cmNlcyAqLwotCWh3aWYtPm1taW8gPSAyOworCWh3aWYtPm1taW8gPSAxOwogCWh3aWYtPmh3aWZfZGF0YSA9IHBtaWY7CiAJcG1hY19pZGVfaW5pdF9od2lmX3BvcnRzKCZod2lmLT5odywgcG1pZi0+cmVnYmFzZSwgMCwgJmh3aWYtPmlycSk7CiAJbWVtY3B5KGh3aWYtPmlvX3BvcnRzLCBod2lmLT5ody5pb19wb3J0cywgc2l6ZW9mKGh3aWYtPmlvX3BvcnRzKSk7CkBAIC0xOTc5LDE2ICsxOTc5LDEyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQKLXBtYWNfaWRlX2RtYV9ob3N0X29mZiAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgcG1hY19pZGVfZG1hX2hvc3Rfb2ZmKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcG1hY19pZGVfZG1hX2hvc3Rfb24gKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgcG1hY19pZGVfZG1hX2hvc3Rfb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMDM0LDcgKzIwMzAsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaHdpZi0+aWRlX2RtYV9vZmZfcXVpZXRseSA9ICZfX2lkZV9kbWFfb2ZmX3F1aWV0bHk7CisJaHdpZi0+ZG1hX29mZl9xdWlldGx5ID0gJmlkZV9kbWFfb2ZmX3F1aWV0bHk7CiAJaHdpZi0+aWRlX2RtYV9vbiA9ICZfX2lkZV9kbWFfb247CiAJaHdpZi0+aWRlX2RtYV9jaGVjayA9ICZwbWFjX2lkZV9kbWFfY2hlY2s7CiAJaHdpZi0+ZG1hX3NldHVwID0gJnBtYWNfaWRlX2RtYV9zZXR1cDsKQEAgLTIwNDIsOCArMjAzOCw4IEBACiAJaHdpZi0+ZG1hX3N0YXJ0ID0gJnBtYWNfaWRlX2RtYV9zdGFydDsKIAlod2lmLT5pZGVfZG1hX2VuZCA9ICZwbWFjX2lkZV9kbWFfZW5kOwogCWh3aWYtPmlkZV9kbWFfdGVzdF9pcnEgPSAmcG1hY19pZGVfZG1hX3Rlc3RfaXJxOwotCWh3aWYtPmlkZV9kbWFfaG9zdF9vZmYgPSAmcG1hY19pZGVfZG1hX2hvc3Rfb2ZmOwotCWh3aWYtPmlkZV9kbWFfaG9zdF9vbiA9ICZwbWFjX2lkZV9kbWFfaG9zdF9vbjsKKwlod2lmLT5kbWFfaG9zdF9vZmYgPSAmcG1hY19pZGVfZG1hX2hvc3Rfb2ZmOworCWh3aWYtPmRtYV9ob3N0X29uID0gJnBtYWNfaWRlX2RtYV9ob3N0X29uOwogCWh3aWYtPmlkZV9kbWFfdGltZW91dCA9ICZfX2lkZV9kbWFfdGltZW91dDsKIAlod2lmLT5pZGVfZG1hX2xvc3RpcnEgPSAmcG1hY19pZGVfZG1hX2xvc3RpcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BwYy9zY2NfcGF0YS5jIGIvZHJpdmVycy9pZGUvcHBjL3NjY19wYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2NGIwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL3BwYy9zY2NfcGF0YS5jCkBAIC0wLDAgKzEsODMxIEBACisvKgorICogU3VwcG9ydCBmb3IgSURFIGludGVyZmFjZXMgb24gQ2VsbGViIHBsYXRmb3JtCisgKgorICogKEMpIENvcHlyaWdodCAyMDA2IFRPU0hJQkEgQ09SUE9SQVRJT04KKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYzoKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyCUFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMJCVJlZCBIYXQgPGFsYW5AcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1NDQ19BVEEgICAgICAgICAgICAweDAxYjQKKworI2RlZmluZSBTQ0NfUEFUQV9OQU1FICAgICAgICAgICAic2NjIElERSIKKworI2RlZmluZSBURFZIU0VMX01BU1RFUiAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFREVkhTRUxfU0xBVkUgICAgICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBNT0RFX0pDVVNGRU4gICAgICAgICAgICAweDAwMDAwMDgwCisKKyNkZWZpbmUgQ0NLQ1RSTF9BVEFSRVNFVCAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQ0tDVFJMX0JVRkNOVCAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENDS0NUUkxfQ1JTVCAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0NLQ1RSTF9PQ0xLRU4gICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBDQ0tDVFJMX0FUQUNMS09FTiAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENDS0NUUkxfTENMS0VOICAgICAgICAgIDB4MDAwMDAwMDEKKworI2RlZmluZSBRQ0hDRF9JT1NfU1MJCTB4MDAwMDAwMDEKKworI2RlZmluZSBRQ0hTRF9TVFBESUFHCQkweDAwMDIwMDAwCisKKyNkZWZpbmUgSU5UTUFTS19NU0sgICAgICAgICAgICAgMHhEMTAwMDAxMgorI2RlZmluZSBJTlRTVFNfU0VSUk9SCQkweDgwMDAwMDAwCisjZGVmaW5lIElOVFNUU19QUkVSUgkJMHg0MDAwMDAwMAorI2RlZmluZSBJTlRTVFNfUkVSUgkJMHgxMDAwMDAwMAorI2RlZmluZSBJTlRTVFNfSUNFUlIJCTB4MDEwMDAwMDAKKyNkZWZpbmUgSU5UU1RTX0JNU0lOVAkJMHgwMDAwMDAxMAorI2RlZmluZSBJTlRTVFNfQk1IRQkJMHgwMDAwMDAwOAorI2RlZmluZSBJTlRTVFNfSU9JUlFTICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIElOVFNUU19JTlRSUSAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSU5UU1RTX0FDVEVJTlQgICAgICAgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIEVDTU9ERV9WQUxVRSAweDAxCisKK3N0YXRpYyBzdHJ1Y3Qgc2NjX3BvcnRzIHsKKwl1bnNpZ25lZCBsb25nIGN0bCwgZG1hOworCXVuc2lnbmVkIGNoYXIgaHdpZl9pZDsgIC8qIGZvciByZW1vdmluZyBod2lmIGZyb20gc3lzdGVtICovCit9IHNjY19wb3J0c1tNQVhfSFdJRlNdOworCisvKiBQSU8gdHJhbnNmZXIgbW9kZSAgdGFibGUgKi8KKy8qIEpDSFNUICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBKQ0hTVHRibFsyXVs3XSA9IHsKKwl7MHgwRSwgMHgwNSwgMHgwMiwgMHgwMywgMHgwMiwgMHgwMCwgMHgwMH0sICAgLyogMTAwTUh6ICovCisJezB4MTMsIDB4MDcsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDAsIDB4MDB9ICAgIC8qIDEzM01IeiAqLworfTsKKworLyogSkNISFQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIEpDSEhUdGJsWzJdWzddID0geworCXsweDBFLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAwLCAweDAwfSwgICAvKiAxMDBNSHogKi8KKwl7MHgxMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMCwgMHgwMH0gICAgLyogMTMzTUh6ICovCit9OworCisvKiBKQ0hDVCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgSkNIQ1R0YmxbMl1bN10gPSB7CisJezB4MUQsIDB4MUQsIDB4MUMsIDB4MEIsIDB4MDYsIDB4MDAsIDB4MDB9LCAgIC8qIDEwME1IeiAqLworCXsweDI3LCAweDI2LCAweDI2LCAweDBFLCAweDA5LCAweDAwLCAweDAwfSAgICAvKiAxMzNNSHogKi8KK307CisKKworLyogRE1BIHRyYW5zZmVyIG1vZGUgIHRhYmxlICovCisvKiBKQ0hEQ1RNL0pDSERDVFMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIEpDSERDVHh0YmxbMl1bN10gPSB7CisJezB4MEEsIDB4MDYsIDB4MDQsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDB9LCAgIC8qIDEwME1IeiAqLworCXsweDBFLCAweDA5LCAweDA2LCAweDA0LCAweDAyLCAweDAxLCAweDAwfSAgICAvKiAxMzNNSHogKi8KK307CisKKy8qIEpDU1RXVE0vSkNTVFdUUyAgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIEpDU1RXVHh0YmxbMl1bN10gPSB7CisJezB4MDYsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDB9LCAgIC8qIDEwME1IeiAqLworCXsweDA5LCAweDA2LCAweDA0LCAweDAyLCAweDAyLCAweDAyLCAweDAyfSAgICAvKiAxMzNNSHogKi8KK307CisKKy8qIEpDVFNTICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBKQ1RTU3RibFsyXVs3XSA9IHsKKwl7MHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwMH0sICAgLyogMTAwTUh6ICovCisJezB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDV9ICAgIC8qIDEzM01IeiAqLworfTsKKworLyogSkNFTlZUICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBKQ0VOVlR0YmxbMl1bN10gPSB7CisJezB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDB9LCAgIC8qIDEwME1IeiAqLworCXsweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyfSAgICAvKiAxMzNNSHogKi8KK307CisKKy8qIEpDQUNUU0VMUy9KQ0FDVFNFTE0gKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIEpDQUNUU0VMdGJsWzJdWzddID0geworCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwfSwgICAvKiAxMDBNSHogKi8KKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0gICAgLyogMTMzTUh6ICovCit9OworCisKK3N0YXRpYyB1OCBzY2NfaWRlX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdTMyIGRhdGEgPSBpbl9iZTMyKCh2b2lkKilwb3J0KTsKKwlyZXR1cm4gKHU4KWRhdGE7Cit9CisKK3N0YXRpYyB1MTYgc2NjX2lkZV9pbncodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXUzMiBkYXRhID0gaW5fYmUzMigodm9pZCopcG9ydCk7CisJcmV0dXJuICh1MTYpZGF0YTsKK30KKworc3RhdGljIHZvaWQgc2NjX2lkZV9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQoreworCXUxNiAqcHRyID0gKHUxNiAqKWFkZHI7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJKnB0cisrID0gbGUxNl90b19jcHUoaW5fYmUzMigodm9pZCopcG9ydCkpOworCX0KK30KKworc3RhdGljIHZvaWQgc2NjX2lkZV9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQoreworCXUxNiAqcHRyID0gKHUxNiAqKWFkZHI7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJKnB0cisrID0gbGUxNl90b19jcHUoaW5fYmUzMigodm9pZCopcG9ydCkpOworCQkqcHRyKysgPSBsZTE2X3RvX2NwdShpbl9iZTMyKCh2b2lkKilwb3J0KSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzY2NfaWRlX291dGIodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCW91dF9iZTMyKCh2b2lkKilwb3J0LCBhZGRyKTsKK30KKworc3RhdGljIHZvaWQgc2NjX2lkZV9vdXR3KHUxNiBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJb3V0X2JlMzIoKHZvaWQqKXBvcnQsIGFkZHIpOworfQorCitzdGF0aWMgdm9pZAorc2NjX2lkZV9vdXRic3luYyhpZGVfZHJpdmVfdCAqIGRyaXZlLCB1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCisJb3V0X2JlMzIoKHZvaWQqKXBvcnQsIGFkZHIpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJlaWVpbyI6OjoibWVtb3J5Iik7CisJaW5fYmUzMigodm9pZCopKGh3aWYtPmRtYV9iYXNlICsgMHgwMWMpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZWllaW8iOjo6Im1lbW9yeSIpOworfQorCitzdGF0aWMgdm9pZAorc2NjX2lkZV9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKK3sKKwl1MTYgKnB0ciA9ICh1MTYgKilhZGRyOworCXdoaWxlIChjb3VudC0tKSB7CisJCW91dF9iZTMyKCh2b2lkKilwb3J0LCBjcHVfdG9fbGUxNigqcHRyKyspKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY2NfaWRlX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQoreworCXUxNiAqcHRyID0gKHUxNiAqKWFkZHI7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJb3V0X2JlMzIoKHZvaWQqKXBvcnQsIGNwdV90b19sZTE2KCpwdHIrKykpOworCQlvdXRfYmUzMigodm9pZCopcG9ydCwgY3B1X3RvX2xlMTYoKnB0cisrKSk7CisJfQorfQorCisvKioKKyAqCXNjY19yYXRlbWFzawktCUNvbXB1dGUgYXZhaWxhYmxlIG1vZGVzCisgKglAZHJpdmU6IElERSBkcml2ZQorICoKKyAqCUNvbXB1dGUgdGhlIGF2YWlsYWJsZSBzcGVlZHMgZm9yIHRoZSBkZXZpY2VzIG9uIHRoZSBpbnRlcmZhY2UuCisgKglFbmZvcmNlIFVETUEzMyBhcyBhIGxpbWl0IGlmIHRoZXJlIGlzIG5vIDgwcGluIGNhYmxlIHByZXNlbnQuCisgKi8KKworc3RhdGljIHU4IHNjY19yYXRlbWFzayhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJdTggbW9kZSA9IDQ7CisKKwlpZiAoIWVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkpCisJCW1vZGUgPSBtaW4obW9kZSwgKHU4KTEpOworCXJldHVybiBtb2RlOworfQorCisvKioKKyAqCXNjY190dW5lcHJvYwktCXR1bmUgYSBkcml2ZSBQSU8gbW9kZQorICoJQGRyaXZlOiBkcml2ZSB0byB0dW5lCisgKglAbW9kZV93YW50ZWQ6IHRoZSB0YXJnZXQgb3BlcmF0aW5nIG1vZGUKKyAqCisgKglMb2FkIHRoZSB0aW1pbmcgc2V0dGluZ3MgZm9yIHRoaXMgZGV2aWNlIG1vZGUgaW50byB0aGUKKyAqCWNvbnRyb2xsZXIuCisgKi8KKworc3RhdGljIHZvaWQgc2NjX3R1bmVwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSwgYnl0ZSBtb2RlX3dhbnRlZCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CisJc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOworCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2UgPSBwb3J0cy0+Y3RsOworCXVuc2lnbmVkIGxvbmcgY2NrY3RybF9wb3J0ID0gY3RsX2Jhc2UgKyAweGZmMDsKKwl1bnNpZ25lZCBsb25nIHBpb3NodF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAwMDsKKwl1bnNpZ25lZCBsb25nIHBpb2N0X3BvcnQgPSBjdGxfYmFzZSArIDB4MDA0OworCXVuc2lnbmVkIGxvbmcgcmVnOworCXVuc2lnbmVkIGNoYXIgc3BlZWQgPSBYRkVSX1BJT18wOworCWludCBvZmZzZXQ7CisKKwltb2RlX3dhbnRlZCA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgbW9kZV93YW50ZWQsIDQsIE5VTEwpOworCXN3aXRjaCAobW9kZV93YW50ZWQpIHsKKwljYXNlIDQ6CisJCXNwZWVkID0gWEZFUl9QSU9fNDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlzcGVlZCA9IFhGRVJfUElPXzM7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3BlZWQgPSBYRkVSX1BJT18yOworCQlicmVhazsKKwljYXNlIDE6CisJCXNwZWVkID0gWEZFUl9QSU9fMTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCXNwZWVkID0gWEZFUl9QSU9fMDsKKwkJYnJlYWs7CisJfQorCisJcmVnID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopY2NrY3RybF9wb3J0KTsKKwlpZiAocmVnICYgQ0NLQ1RSTF9BVEFDTEtPRU4pIHsKKwkJb2Zmc2V0ID0gMTsgLyogMTMzTUh6ICovCisJfSBlbHNlIHsKKwkJb2Zmc2V0ID0gMDsgLyogMTAwTUh6ICovCisJfQorCXJlZyA9IEpDSFNUdGJsW29mZnNldF1bbW9kZV93YW50ZWRdIDw8IDE2IHwgSkNISFR0Ymxbb2Zmc2V0XVttb2RlX3dhbnRlZF07CisJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKXBpb3NodF9wb3J0LCByZWcpOworCXJlZyA9IEpDSENUdGJsW29mZnNldF1bbW9kZV93YW50ZWRdOworCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilwaW9jdF9wb3J0LCByZWcpOworCisJaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgc3BlZWQpOworfQorCisvKioKKyAqCXNjY190dW5lX2NoaXBzZXQJLQl0dW5lIGEgZHJpdmUgRE1BIG1vZGUKKyAqCUBkcml2ZTogRHJpdmUgdG8gc2V0IHVwCisgKglAeGZlcnNwZWVkOiBzcGVlZCB3ZSB3YW50IHRvIGFjaGlldmUKKyAqCisgKglMb2FkIHRoZSB0aW1pbmcgc2V0dGluZ3MgZm9yIHRoaXMgZGV2aWNlIG1vZGUgaW50byB0aGUKKyAqCWNvbnRyb2xsZXIuCisgKi8KKworc3RhdGljIGludCBzY2NfdHVuZV9jaGlwc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgYnl0ZSB4ZmVyc3BlZWQpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCXU4IHNwZWVkID0gaWRlX3JhdGVfZmlsdGVyKHNjY19yYXRlbWFzayhkcml2ZSksIHhmZXJzcGVlZCk7CisJc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOworCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2UgPSBwb3J0cy0+Y3RsOworCXVuc2lnbmVkIGxvbmcgY2NrY3RybF9wb3J0ID0gY3RsX2Jhc2UgKyAweGZmMDsKKwl1bnNpZ25lZCBsb25nIG1kbWFjdF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAwODsKKwl1bnNpZ25lZCBsb25nIG1jcmNzdF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAwYzsKKwl1bnNpZ25lZCBsb25nIHNkbWFjdF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAxMDsKKwl1bnNpZ25lZCBsb25nIHNjcmNzdF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAxNDsKKwl1bnNpZ25lZCBsb25nIHVkZW52dF9wb3J0ID0gY3RsX2Jhc2UgKyAweDAxODsKKwl1bnNpZ25lZCBsb25nIHRkdmhzZWxfcG9ydCAgID0gY3RsX2Jhc2UgKyAweDAyMDsKKwlpbnQgaXNfc2xhdmUgPSAoJmh3aWYtPmRyaXZlc1sxXSA9PSBkcml2ZSk7CisJaW50IG9mZnNldCwgaWR4OworCXVuc2lnbmVkIGxvbmcgcmVnOworCXVuc2lnbmVkIGxvbmcgamNhY3RzZWw7CisKKwlyZWcgPSBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKiljY2tjdHJsX3BvcnQpOworCWlmIChyZWcgJiBDQ0tDVFJMX0FUQUNMS09FTikgeworCQlvZmZzZXQgPSAxOyAvKiAxMzNNSHogKi8KKwl9IGVsc2UgeworCQlvZmZzZXQgPSAwOyAvKiAxMDBNSHogKi8KKwl9CisKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBYRkVSX1VETUFfNjoKKwkJaWR4ID0gNjsKKwkJYnJlYWs7CisJY2FzZSBYRkVSX1VETUFfNToKKwkJaWR4ID0gNTsKKwkJYnJlYWs7CisJY2FzZSBYRkVSX1VETUFfNDoKKwkJaWR4ID0gNDsKKwkJYnJlYWs7CisJY2FzZSBYRkVSX1VETUFfMzoKKwkJaWR4ID0gMzsKKwkJYnJlYWs7CisJY2FzZSBYRkVSX1VETUFfMjoKKwkJaWR4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBYRkVSX1VETUFfMToKKwkJaWR4ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBYRkVSX1VETUFfMDoKKwkJaWR4ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorCisJamNhY3RzZWwgPSBKQ0FDVFNFTHRibFtvZmZzZXRdW2lkeF07CisJaWYgKGlzX3NsYXZlKSB7CisJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilzZG1hY3RfcG9ydCwgSkNIRENUeHRibFtvZmZzZXRdW2lkeF0pOworCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopc2NyY3N0X3BvcnQsIEpDU1RXVHh0Ymxbb2Zmc2V0XVtpZHhdKTsKKwkJamNhY3RzZWwgPSBqY2FjdHNlbCA8PCAyOworCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopdGR2aHNlbF9wb3J0LCAoaW5fYmUzMigodm9pZCBfX2lvbWVtICopdGR2aHNlbF9wb3J0KSAmIH5URFZIU0VMX1NMQVZFKSB8IGpjYWN0c2VsKTsKKwl9IGVsc2UgeworCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopbWRtYWN0X3BvcnQsIEpDSERDVHh0Ymxbb2Zmc2V0XVtpZHhdKTsKKwkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKW1jcmNzdF9wb3J0LCBKQ1NUV1R4dGJsW29mZnNldF1baWR4XSk7CisJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKil0ZHZoc2VsX3BvcnQsIChpbl9iZTMyKCh2b2lkIF9faW9tZW0gKil0ZHZoc2VsX3BvcnQpICYgflREVkhTRUxfTUFTVEVSKSB8IGpjYWN0c2VsKTsKKwl9CisJcmVnID0gSkNUU1N0Ymxbb2Zmc2V0XVtpZHhdIDw8IDE2IHwgSkNFTlZUdGJsW29mZnNldF1baWR4XTsKKwlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopdWRlbnZ0X3BvcnQsIHJlZyk7CisKKwlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgc3BlZWQpOworfQorCisvKioKKyAqCXNjY19jb25maWdfY2hpcHNldF9mb3JfZG1hCS0JY29uZmlndXJlIGZvciBETUEKKyAqCUBkcml2ZTogZHJpdmUgdG8gY29uZmlndXJlCisgKgorICoJQ2FsbGVkIGJ5IHNjY19jb25maWdfZHJpdmVfZm9yX2RtYSgpLgorICovCisKK3N0YXRpYyBpbnQgc2NjX2NvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXU4IHNwZWVkID0gaWRlX2RtYV9zcGVlZChkcml2ZSwgc2NjX3JhdGVtYXNrKGRyaXZlKSk7CisKKwlpZiAoIXNwZWVkKQorCQlyZXR1cm4gMDsKKworCWlmIChzY2NfdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKK30KKworLyoqCisgKglzY2NfY29uZmlndXJlX2RyaXZlX2Zvcl9kbWEJLQlzZXQgdXAgZm9yIERNQSB0cmFuc2ZlcnMKKyAqCUBkcml2ZTogZHJpdmUgd2UgYXJlIGdvaW5nIHRvIHNldCB1cAorICoKKyAqCVNldCB1cCB0aGUgZHJpdmUgZm9yIERNQSwgdHVuZSB0aGUgY29udHJvbGxlciBhbmQgZHJpdmUgYXMKKyAqCXJlcXVpcmVkLgorICogICAgICBJZiB0aGUgZHJpdmUgaXNuJ3Qgc3VpdGFibGUgZm9yIERNQSBvciB3ZSBoaXQgb3RoZXIgcHJvYmxlbXMKKyAqICAgICAgdGhlbiB3ZSB3aWxsIGRyb3AgZG93biB0byBQSU8gYW5kIHNldCB1cCBQSU8gYXBwcm9wcmlhdGVseS4KKyAqICAgICAgKHJldHVybiAxKQorICovCisKK3N0YXRpYyBpbnQgc2NjX2NvbmZpZ19kcml2ZV9mb3JfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIHNjY19jb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpCisJCXNjY190dW5lcHJvYyhkcml2ZSwgNCk7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICoJc2NjX2lkZV9kbWFfc2V0dXAJLQliZWdpbiBhIERNQSBwaGFzZQorICoJQGRyaXZlOiB0YXJnZXQgZGV2aWNlCisgKgorICoJQnVpbGQgYW4gSURFIERNQSBQUkQgKElERSBzcGVhayBmb3Igc2NhdHRlciBnYXRoZXIgdGFibGUpCisgKglhbmQgdGhlbiBzZXQgdXAgdGhlIERNQSB0cmFuc2ZlciByZWdpc3RlcnMuCisgKgorICoJUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIElmIGEgUElPIGZhbGxiYWNrIGlzIHJlcXVpcmVkIHRoZW4gMQorICoJaXMgcmV0dXJuZWQuCisgKi8KKworc3RhdGljIGludCBzY2NfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOworCXVuc2lnbmVkIGludCByZWFkaW5nOworCXU4IGRtYV9zdGF0OworCisJaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwkJcmVhZGluZyA9IDA7CisJZWxzZQorCQlyZWFkaW5nID0gMSA8PCAzOworCisJLyogZmFsbCBiYWNrIHRvIHBpbyEgKi8KKwlpZiAoIWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpKSB7CisJCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogUFJEIHRhYmxlICovCisJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9wcmR0YWJsZSwgaHdpZi0+ZG1hdGFibGVfZG1hKTsKKworCS8qIHNwZWNpZnkgci93ICovCisJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9jb21tYW5kLCByZWFkaW5nKTsKKworCS8qIHJlYWQgZG1hX3N0YXR1cyBmb3IgSU5UUiAmIEVSUk9SIGZsYWdzICovCisJZG1hX3N0YXQgPSBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfc3RhdHVzKTsKKworCS8qIGNsZWFyIElOVFIgJiBFUlJPUiBmbGFncyAqLworCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfc3RhdHVzLCBkbWFfc3RhdHw2KTsKKwlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqCXNjY19pZGVfZG1hX2VuZAktCVN0b3AgRE1BCisgKglAZHJpdmU6IElERSBkcml2ZQorICoKKyAqCUNoZWNrIGFuZCBjbGVhciBJTlQgU3RhdHVzIHJlZ2lzdGVyLgorICogICAgICBUaGVuIGNhbGwgX19pZGVfZG1hX2VuZCgpLgorICovCisKK3N0YXRpYyBpbnQgc2NjX2lkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICogZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCXVuc2lnbmVkIGxvbmcgaW50c3RzX3BvcnQgPSBod2lmLT5kbWFfYmFzZSArIDB4MDE0OworCXUzMiByZWc7CisKKwl3aGlsZSAoMSkgeworCQlyZWcgPSBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCk7CisKKwkJaWYgKHJlZyAmIElOVFNUU19TRVJST1IpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBTRVJST1JcbiIsIFNDQ19QQVRBX05BTUUpOworCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWludHN0c19wb3J0LCBJTlRTVFNfU0VSUk9SfElOVFNUU19CTVNJTlQpOworCisJCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX2NvbW1hbmQsIGluX2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9jb21tYW5kKSAmIH5RQ0hDRF9JT1NfU1MpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmVnICYgSU5UU1RTX1BSRVJSKSB7CisJCQl1MzIgbWFlYTAsIG1hZWMwOworCQkJdW5zaWduZWQgbG9uZyBjdGxfYmFzZSA9IGh3aWYtPmNvbmZpZ19kYXRhOworCisJCQltYWVhMCA9IGluX2JlMzIoKHZvaWQgX19pb21lbSAqKShjdGxfYmFzZSArIDB4RjUwKSk7CisJCQltYWVjMCA9IGluX2JlMzIoKHZvaWQgX19pb21lbSAqKShjdGxfYmFzZSArIDB4RjU0KSk7CisKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBQUkVSUiBbYWRkcjoleCBjbWQ6JXhdXG4iLCBTQ0NfUEFUQV9OQU1FLCBtYWVhMCwgbWFlYzApOworCisJCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQsIElOVFNUU19QUkVSUnxJTlRTVFNfQk1TSU5UKTsKKworCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9jb21tYW5kLCBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfY29tbWFuZCkgJiB+UUNIQ0RfSU9TX1NTKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJlZyAmIElOVFNUU19SRVJSKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUmVzcG9uc2UgRXJyb3JcbiIsIFNDQ19QQVRBX05BTUUpOworCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWludHN0c19wb3J0LCBJTlRTVFNfUkVSUnxJTlRTVFNfQk1TSU5UKTsKKworCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9jb21tYW5kLCBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfY29tbWFuZCkgJiB+UUNIQ0RfSU9TX1NTKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJlZyAmIElOVFNUU19JQ0VSUikgeworCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9jb21tYW5kLCBpbl9iZTMyKCh2b2lkIF9faW9tZW0gKilod2lmLT5kbWFfY29tbWFuZCkgJiB+UUNIQ0RfSU9TX1NTKTsKKworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IElsbGVnYWwgQ29uZmlndXJhdGlvblxuIiwgU0NDX1BBVEFfTkFNRSk7CisJCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQsIElOVFNUU19JQ0VSUnxJTlRTVFNfQk1TSU5UKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJlZyAmIElOVFNUU19CTVNJTlQpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnRlcm5hbCBCdXMgRXJyb3JcbiIsIFNDQ19QQVRBX05BTUUpOworCQkJb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWludHN0c19wb3J0LCBJTlRTVFNfQk1TSU5UKTsKKworCQkJaWRlX2RvX3Jlc2V0KGRyaXZlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJlZyAmIElOVFNUU19CTUhFKSB7CisJCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQsIElOVFNUU19CTUhFKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJlZyAmIElOVFNUU19BQ1RFSU5UKSB7CisJCQlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaW50c3RzX3BvcnQsIElOVFNUU19BQ1RFSU5UKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJlZyAmIElOVFNUU19JT0lSUVMpIHsKKwkJCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKilpbnRzdHNfcG9ydCwgSU5UU1RTX0lPSVJRUyk7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gX19pZGVfZG1hX2VuZChkcml2ZSk7Cit9CisKKy8qKgorICoJc2V0dXBfbW1pb19zY2MJLQltYXAgQ1RSTC9CTUlEIHJlZ2lvbgorICoJQGRldjogUENJIGRldmljZSB3ZSBhcmUgY29uZmlndXJpbmcKKyAqCUBuYW1lOiBkZXZpY2UgbmFtZQorICoKKyAqLworCitzdGF0aWMgaW50IHNldHVwX21taW9fc2NjIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMSk7CisJdW5zaWduZWQgbG9uZyBjdGxfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAwKTsKKwl1bnNpZ25lZCBsb25nIGRtYV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIDEpOworCXZvaWQgKmN0bF9hZGRyOworCXZvaWQgKmRtYV9hZGRyOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7CisJCWlmIChzY2NfcG9ydHNbaV0uY3RsID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKGkgPj0gTUFYX0hXSUZTKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGN0bF9iYXNlLCBjdGxfc2l6ZSwgbmFtZSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IElERSBjb250cm9sbGVyIE1NSU8gcG9ydHMgbm90IGF2YWlsYWJsZS5cbiIsIFNDQ19QQVRBX05BTUUpOworCQlnb3RvIGZhaWxfMDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkbWFfYmFzZSwgZG1hX3NpemUsIG5hbWUpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJREUgY29udHJvbGxlciBNTUlPIHBvcnRzIG5vdCBhdmFpbGFibGUuXG4iLCBTQ0NfUEFUQV9OQU1FKTsKKwkJZ290byBmYWlsXzE7CisJfQorCisJaWYgKChjdGxfYWRkciA9IGlvcmVtYXAoY3RsX2Jhc2UsIGN0bF9zaXplKSkgPT0gTlVMTCkKKwkJZ290byBmYWlsXzI7CisKKwlpZiAoKGRtYV9hZGRyID0gaW9yZW1hcChkbWFfYmFzZSwgZG1hX3NpemUpKSA9PSBOVUxMKQorCQlnb3RvIGZhaWxfMzsKKworCXBjaV9zZXRfbWFzdGVyKGRldik7CisJc2NjX3BvcnRzW2ldLmN0bCA9ICh1bnNpZ25lZCBsb25nKWN0bF9hZGRyOworCXNjY19wb3J0c1tpXS5kbWEgPSAodW5zaWduZWQgbG9uZylkbWFfYWRkcjsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCAodm9pZCAqKSAmc2NjX3BvcnRzW2ldKTsKKworCXJldHVybiAxOworCisgZmFpbF8zOgorCWlvdW5tYXAoY3RsX2FkZHIpOworIGZhaWxfMjoKKwlyZWxlYXNlX21lbV9yZWdpb24oZG1hX2Jhc2UsIGRtYV9zaXplKTsKKyBmYWlsXzE6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGN0bF9iYXNlLCBjdGxfc2l6ZSk7CisgZmFpbF8wOgorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqCWluaXRfc2V0dXBfc2NjCS0Jc2V0IHVwIGFuIFNDQyBQQVRBIENvbnRyb2xsZXIKKyAqCUBkZXY6IFBDSSBkZXZpY2UKKyAqCUBkOiBJREUgUENJIGRldmljZQorICoKKyAqCVBlcmZvcm0gdGhlIGluaXRpYWwgc2V0IHVwIGZvciB0aGlzIGRldmljZS4KKyAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3NldHVwX3NjYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQoreworCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBkbWFfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGNja2N0cmxfcG9ydDsKKwl1bnNpZ25lZCBsb25nIGludG1hc2tfcG9ydDsKKwl1bnNpZ25lZCBsb25nIG1vZGVfcG9ydDsKKwl1bnNpZ25lZCBsb25nIGVjbW9kZV9wb3J0OworCXVuc2lnbmVkIGxvbmcgZG1hX3N0YXR1c19wb3J0OworCXUzMiByZWcgPSAwOworCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzOworCWludCByYzsKKworCXJjID0gc2V0dXBfbW1pb19zY2MoZGV2LCBkLT5uYW1lKTsKKwlpZiAocmMgPCAwKSB7CisJCXJldHVybiByYzsKKwl9CisKKwlwb3J0cyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCWN0bF9iYXNlID0gcG9ydHMtPmN0bDsKKwlkbWFfYmFzZSA9IHBvcnRzLT5kbWE7CisJY2NrY3RybF9wb3J0ID0gY3RsX2Jhc2UgKyAweGZmMDsKKwlpbnRtYXNrX3BvcnQgPSBkbWFfYmFzZSArIDB4MDEwOworCW1vZGVfcG9ydCA9IGN0bF9iYXNlICsgMHgwMjQ7CisJZWNtb2RlX3BvcnQgPSBjdGxfYmFzZSArIDB4ZjAwOworCWRtYV9zdGF0dXNfcG9ydCA9IGRtYV9iYXNlICsgMHgwMDQ7CisKKwkvKiBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uICovCisJcmVnID0gMDsKKwlvdXRfYmUzMigodm9pZCopY2NrY3RybF9wb3J0LCByZWcpOworCXJlZyB8PSBDQ0tDVFJMX0FUQUNMS09FTjsKKwlvdXRfYmUzMigodm9pZCopY2NrY3RybF9wb3J0LCByZWcpOworCXJlZyB8PSBDQ0tDVFJMX0xDTEtFTiB8IENDS0NUUkxfT0NMS0VOOworCW91dF9iZTMyKCh2b2lkKiljY2tjdHJsX3BvcnQsIHJlZyk7CisJcmVnIHw9IENDS0NUUkxfQ1JTVDsKKwlvdXRfYmUzMigodm9pZCopY2NrY3RybF9wb3J0LCByZWcpOworCisJZm9yICg7OykgeworCQlyZWcgPSBpbl9iZTMyKCh2b2lkKiljY2tjdHJsX3BvcnQpOworCQlpZiAocmVnICYgQ0NLQ1RSTF9DUlNUKQorCQkJYnJlYWs7CisJCXVkZWxheSg1MDAwKTsKKwl9CisKKwlyZWcgfD0gQ0NLQ1RSTF9BVEFSRVNFVDsKKwlvdXRfYmUzMigodm9pZCopY2NrY3RybF9wb3J0LCByZWcpOworCisJb3V0X2JlMzIoKHZvaWQqKWVjbW9kZV9wb3J0LCBFQ01PREVfVkFMVUUpOworCW91dF9iZTMyKCh2b2lkKiltb2RlX3BvcnQsIE1PREVfSkNVU0ZFTik7CisJb3V0X2JlMzIoKHZvaWQqKWludG1hc2tfcG9ydCwgSU5UTUFTS19NU0spOworCisJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7Cit9CisKKy8qKgorICoJaW5pdF9tbWlvX2lvcHNfc2NjCS0Jc2V0IHVwIHRoZSBpb3BzIGZvciBNTUlPCisgKglAaHdpZjogaW50ZXJmYWNlIHRvIHNldCB1cAorICoKKyAqLworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9tbWlvX2lvcHNfc2NjKGlkZV9od2lmX3QgKmh3aWYpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGh3aWYtPnBjaV9kZXY7CisJc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gcG9ydHMtPmRtYTsKKworCWlkZV9zZXRfaHdpZmRhdGEoaHdpZiwgcG9ydHMpOworCisJaHdpZi0+SU5CID0gc2NjX2lkZV9pbmI7CisJaHdpZi0+SU5XID0gc2NjX2lkZV9pbnc7CisJaHdpZi0+SU5TVyA9IHNjY19pZGVfaW5zdzsKKwlod2lmLT5JTlNMID0gc2NjX2lkZV9pbnNsOworCWh3aWYtPk9VVEIgPSBzY2NfaWRlX291dGI7CisJaHdpZi0+T1VUQlNZTkMgPSBzY2NfaWRlX291dGJzeW5jOworCWh3aWYtPk9VVFcgPSBzY2NfaWRlX291dHc7CisJaHdpZi0+T1VUU1cgPSBzY2NfaWRlX291dHN3OworCWh3aWYtPk9VVFNMID0gc2NjX2lkZV9vdXRzbDsKKworCWh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0gPSBkbWFfYmFzZSArIDB4MjA7CisJaHdpZi0+aW9fcG9ydHNbSURFX0VSUk9SX09GRlNFVF0gPSBkbWFfYmFzZSArIDB4MjQ7CisJaHdpZi0+aW9fcG9ydHNbSURFX05TRUNUT1JfT0ZGU0VUXSA9IGRtYV9iYXNlICsgMHgyODsKKwlod2lmLT5pb19wb3J0c1tJREVfU0VDVE9SX09GRlNFVF0gPSBkbWFfYmFzZSArIDB4MmM7CisJaHdpZi0+aW9fcG9ydHNbSURFX0xDWUxfT0ZGU0VUXSA9IGRtYV9iYXNlICsgMHgzMDsKKwlod2lmLT5pb19wb3J0c1tJREVfSENZTF9PRkZTRVRdID0gZG1hX2Jhc2UgKyAweDM0OworCWh3aWYtPmlvX3BvcnRzW0lERV9TRUxFQ1RfT0ZGU0VUXSA9IGRtYV9iYXNlICsgMHgzODsKKwlod2lmLT5pb19wb3J0c1tJREVfU1RBVFVTX09GRlNFVF0gPSBkbWFfYmFzZSArIDB4M2M7CisJaHdpZi0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSA9IGRtYV9iYXNlICsgMHg0MDsKKworCWh3aWYtPmlycSA9IGh3aWYtPnBjaV9kZXYtPmlycTsKKwlod2lmLT5kbWFfYmFzZSA9IGRtYV9iYXNlOworCWh3aWYtPmNvbmZpZ19kYXRhID0gcG9ydHMtPmN0bDsKKwlod2lmLT5tbWlvID0gMTsKK30KKworLyoqCisgKglpbml0X2lvcHNfc2NjCS0Jc2V0IHVwIGlvcHMKKyAqCUBod2lmOiBpbnRlcmZhY2UgdG8gc2V0IHVwCisgKgorICoJRG8gdGhlIGJhc2ljIHNldHVwIGZvciB0aGUgU0NDIGhhcmR3YXJlIGludGVyZmFjZQorICoJYW5kIHRoZW4gZG8gdGhlIE1NSU8gc2V0dXAuCisgKi8KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaW9wc19zY2MoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gIGh3aWYtPnBjaV9kZXY7CisJaHdpZi0+aHdpZl9kYXRhID0gTlVMTDsKKwlpZiAocGNpX2dldF9kcnZkYXRhKGRldikgPT0gTlVMTCkKKwkJcmV0dXJuOworCWluaXRfbW1pb19pb3BzX3NjYyhod2lmKTsKK30KKworLyoqCisgKglpbml0X2h3aWZfc2NjCS0Jc2V0IHVwIGh3aWYKKyAqCUBod2lmOiBpbnRlcmZhY2UgdG8gc2V0IHVwCisgKgorICoJV2UgZG8gdGhlIGJhc2ljIHNldCB1cCBvZiB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZS4gVGhlIFNDQworICoJcmVxdWlyZXMgc2V2ZXJhbCBjdXN0b20gaGFuZGxlcnMgc28gd2Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyAqCWlkZSBETUEgaGFuZGxlcnMgYXBwcm9wcmlhdGVseS4KKyAqLworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3NjYyhpZGVfaHdpZl90ICpod2lmKQoreworCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKKworCXBvcnRzLT5od2lmX2lkID0gaHdpZi0+aW5kZXg7CisKKwlod2lmLT5kbWFfY29tbWFuZCA9IGh3aWYtPmRtYV9iYXNlOworCWh3aWYtPmRtYV9zdGF0dXMgPSBod2lmLT5kbWFfYmFzZSArIDB4MDQ7CisJaHdpZi0+ZG1hX3ByZHRhYmxlID0gaHdpZi0+ZG1hX2Jhc2UgKyAweDA4OworCisJLyogUFRFUkFERCAqLworCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyAweDAxOCksIGh3aWYtPmRtYXRhYmxlX2RtYSk7CisKKwlod2lmLT5kbWFfc2V0dXAgPSBzY2NfZG1hX3NldHVwOworCWh3aWYtPmlkZV9kbWFfZW5kID0gc2NjX2lkZV9kbWFfZW5kOworCWh3aWYtPnNwZWVkcHJvYyA9IHNjY190dW5lX2NoaXBzZXQ7CisJaHdpZi0+dHVuZXByb2MgPSBzY2NfdHVuZXByb2M7CisJaHdpZi0+aWRlX2RtYV9jaGVjayA9IHNjY19jb25maWdfZHJpdmVfZm9yX2RtYTsKKworCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IElERV9UVU5FX0FVVE87CisJaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lID0gSURFX1RVTkVfQVVUTzsKKworCWlmIChpbl9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+Y29uZmlnX2RhdGEgKyAweGZmMCkpICYgQ0NLQ1RSTF9BVEFDTEtPRU4pIHsKKwkJaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7IC8qIDEzM01IeiAqLworCX0gZWxzZSB7CisJCWh3aWYtPnVsdHJhX21hc2sgPSAweDNmOyAvKiAxMDBNSHogKi8KKwl9CisJaHdpZi0+bXdkbWFfbWFzayA9IDB4MDA7CisJaHdpZi0+c3dkbWFfbWFzayA9IDB4MDA7CisJaHdpZi0+YXRhcGlfZG1hID0gMTsKKworCS8qIHdlIHN1cHBvcnQgODBjIGNhYmxlIG9ubHkuICovCisJaHdpZi0+dWRtYV9mb3VyID0gMTsKKworCWh3aWYtPmF1dG9kbWEgPSAwOworCWlmICghbm9hdXRvZG1hKQorCQlod2lmLT5hdXRvZG1hID0gMTsKKwlod2lmLT5kcml2ZXNbMF0uYXV0b2RtYSA9IGh3aWYtPmF1dG9kbWE7CisJaHdpZi0+ZHJpdmVzWzFdLmF1dG9kbWEgPSBod2lmLT5hdXRvZG1hOworfQorCisjZGVmaW5lIERFQ0xBUkVfU0NDX0RFVihuYW1lX3N0cikJCQlcCisgIHsJCQkJCQkJXAorICAgICAgLm5hbWUJCT0gbmFtZV9zdHIsCQkJXAorICAgICAgLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3NjYywJCVwKKyAgICAgIC5pbml0X2lvcHMJPSBpbml0X2lvcHNfc2NjLAkJXAorICAgICAgLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zY2MsCQlcCisgICAgICAuY2hhbm5lbHMJPSAxLAkJCQkJXAorICAgICAgLmF1dG9kbWEJPSBBVVRPRE1BLAkJCQlcCisgICAgICAuYm9vdGFibGUJPSBPTl9CT0FSRCwJCQkJXAorICB9CisKK3N0YXRpYyBpZGVfcGNpX2RldmljZV90IHNjY19jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJLyogMCAqLyBERUNMQVJFX1NDQ19ERVYoInNjY0lERSIpLAorfTsKKworLyoqCisgKglzY2NfaW5pdF9vbmUJLQlwY2kgbGF5ZXIgZGlzY292ZXJ5IGVudHJ5CisgKglAZGV2OiBQQ0kgZGV2aWNlCisgKglAaWQ6IGlkZW50IHRhYmxlIGVudHJ5CisgKgorICoJQ2FsbGVkIGJ5IHRoZSBQQ0kgY29kZSB3aGVuIGl0IGZpbmRzIGFuIFNDQyBQQVRBIGNvbnRyb2xsZXIuCisgKglXZSB0aGVuIHVzZSB0aGUgSURFIFBDSSBnZW5lcmljIGhlbHBlciB0byBkbyBtb3N0IG9mIHRoZSB3b3JrLgorICovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNjY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaWRlX3BjaV9kZXZpY2VfdCAqZCA9ICZzY2NfY2hpcHNldHNbaWQtPmRyaXZlcl9kYXRhXTsKKwlyZXR1cm4gZC0+aW5pdF9zZXR1cChkZXYsIGQpOworfQorCisvKioKKyAqCXNjY19yZW1vdmUJLQlwY2kgbGF5ZXIgcmVtb3ZlIGVudHJ5CisgKglAZGV2OiBQQ0kgZGV2aWNlCisgKgorICoJQ2FsbGVkIGJ5IHRoZSBQQ0kgY29kZSB3aGVuIGl0IHJlbW92ZXMgYW4gU0NDIFBBVEEgY29udHJvbGxlci4KKyAqLworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc2NjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaWRlX2h3aWZfdCAqaHdpZiA9ICZpZGVfaHdpZnNbcG9ydHMtPmh3aWZfaWRdOworCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMSk7CisJdW5zaWduZWQgbG9uZyBjdGxfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAwKTsKKwl1bnNpZ25lZCBsb25nIGRtYV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIDEpOworCisJaWYgKGh3aWYtPmRtYXRhYmxlX2NwdSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGh3aWYtPnBjaV9kZXYsCisJCQkJICAgIFBSRF9FTlRSSUVTICogUFJEX0JZVEVTLAorCQkJCSAgICBod2lmLT5kbWF0YWJsZV9jcHUsCisJCQkJICAgIGh3aWYtPmRtYXRhYmxlX2RtYSk7CisJCWh3aWYtPmRtYXRhYmxlX2NwdSA9IE5VTEw7CisJfQorCisJaWRlX3VucmVnaXN0ZXIoaHdpZi0+aW5kZXgpOworCisJaHdpZi0+Y2hpcHNldCA9IGlkZV91bmtub3duOworCWlvdW5tYXAoKHZvaWQqKXBvcnRzLT5kbWEpOworCWlvdW5tYXAoKHZvaWQqKXBvcnRzLT5jdGwpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihkbWFfYmFzZSwgZG1hX3NpemUpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihjdGxfYmFzZSwgY3RsX3NpemUpOworCW1lbXNldChwb3J0cywgMCwgc2l6ZW9mKCpwb3J0cykpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2NjX3BjaV90YmxbXSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfVE9TSElCQV8yLCBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfU0NDX0FUQSwgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsgMCwgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2NjX3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworCS5uYW1lID0gIlNDQyBJREUiLAorCS5pZF90YWJsZSA9IHNjY19wY2lfdGJsLAorCS5wcm9iZSA9IHNjY19pbml0X29uZSwKKwkucmVtb3ZlID0gc2NjX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgc2NjX2lkZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzY2NfaWRlX2luaXQpOworLyogLS0gTm8gZXhpdCBjb2RlPworc3RhdGljIHZvaWQgc2NjX2lkZV9leGl0KHZvaWQpCit7CisJaWRlX3BjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNjY19pZGVfZXhpdCk7CisgKi8KKworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBDSSBkcml2ZXIgbW9kdWxlIGZvciBUb3NoaWJhIFNDQyBJREUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTQtaW9jdGwuaCBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTQtaW9jdGwuaAppbmRleCA4ZjIwNzUwLi40Njg3OGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0LWlvY3RsLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NC1pb2N0bC5oCkBAIC0xMDAsNSArMTAwLDcgQEAKIAlfSU8gICgnIycsIDB4MjgpCiAjZGVmaW5lIFJBVzEzOTRfSU9DX0lTT19SRUNWX0ZMVVNICQlcCiAJX0lPICAoJyMnLCAweDI5KQorI2RlZmluZSBSQVcxMzk0X0lPQ19HRVRfQ1lDTEVfVElNRVIJCVwKKwlfSU9SICgnIycsIDB4MzAsIHN0cnVjdCByYXcxMzk0X2N5Y2xlX3RpbWVyKQogCiAjZW5kaWYgLyogX19JRUVFMTM5NF9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuYyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCmluZGV4IDE1MjFlNTcuLmQ3OTFkMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jCkBAIC0zMyw3ICszMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNpbmNsdWRlICJpZWVlMTM5NF90eXBlcy5oIgpAQCAtMTg2LDYgKzE4OSw0NSBAQAogCX0KIH0KIAorLyoqCisgKiBocHNiX3JlYWRfY3ljbGVfdGltZXIgLSByZWFkIGN5Y2xlIHRpbWVyIHJlZ2lzdGVyIGFuZCBzeXN0ZW0gdGltZQorICogQGhvc3Q6IGhvc3Qgd2hvc2UgaXNvY2hyb25vdXMgY3ljbGUgdGltZXIgcmVnaXN0ZXIgaXMgcmVhZAorICogQGN5Y2xlX3RpbWVyOiBhZGRyZXNzIG9mIGJpdGZpZWxkIHRvIHJldHVybiB0aGUgcmVnaXN0ZXIgY29udGVudHMKKyAqIEBsb2NhbF90aW1lOiBhZGRyZXNzIHRvIHJldHVybiB0aGUgc3lzdGVtIHRpbWUKKyAqCisgKiBUaGUgZm9ybWF0IG9mICogQGN5Y2xlX3RpbWVyLCBpcyBkZXNjcmliZWQgaW4gT0hDSSAxLjEgY2xhdXNlIDUuMTMuIFRoaXMKKyAqIGZvcm1hdCBpcyBhbHNvIHJlYWQgZnJvbSBub24tT0hDSSBjb250cm9sbGVycy4gKiBAbG9jYWxfdGltZSBjb250YWlucyB0aGUKKyAqIHN5c3RlbSB0aW1lIGluIG1pY3Jvc2Vjb25kcyBzaW5jZSB0aGUgRXBvY2gsIHJlYWQgYXQgdGhlIG1vbWVudCB3aGVuIHRoZQorICogY3ljbGUgdGltZXIgd2FzIHJlYWQuCisgKgorICogUmV0dXJuIHZhbHVlOiAwIGZvciBzdWNjZXNzIG9yIGVycm9yIG51bWJlciBvdGhlcndpc2UuCisgKi8KK2ludCBocHNiX3JlYWRfY3ljbGVfdGltZXIoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgdTMyICpjeWNsZV90aW1lciwKKwkJCSAgdTY0ICpsb2NhbF90aW1lKQoreworCWludCBjdHI7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghaG9zdCB8fCAhY3ljbGVfdGltZXIgfHwgIWxvY2FsX3RpbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJY3RyID0gaG9zdC0+ZHJpdmVyLT5kZXZjdGwoaG9zdCwgR0VUX0NZQ0xFX0NPVU5URVIsIDApOworCWlmIChjdHIpCisJCWRvX2dldHRpbWVvZmRheSgmdHYpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwlpZiAoIWN0cikKKwkJcmV0dXJuIC1FSU87CisJKmN5Y2xlX3RpbWVyID0gY3RyOworCSpsb2NhbF90aW1lID0gdHYudHZfc2VjICogMTAwMDAwMFVMTCArIHR2LnR2X3VzZWM7CisJcmV0dXJuIDA7Cit9CiAKIGludCBocHNiX2J1c19yZXNldChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KQogewpAQCAtMTE5MCw2ICsxMjMyLDcgQEAKIEVYUE9SVF9TWU1CT0woaHBzYl9mcmVlX3BhY2tldCk7CiBFWFBPUlRfU1lNQk9MKGhwc2Jfc2VuZF9wYWNrZXQpOwogRVhQT1JUX1NZTUJPTChocHNiX3Jlc2V0X2J1cyk7CitFWFBPUlRfU1lNQk9MKGhwc2JfcmVhZF9jeWNsZV90aW1lcik7CiBFWFBPUlRfU1lNQk9MKGhwc2JfYnVzX3Jlc2V0KTsKIEVYUE9SVF9TWU1CT0woaHBzYl9zZWxmaWRfcmVjZWl2ZWQpOwogRVhQT1JUX1NZTUJPTChocHNiX3NlbGZpZF9jb21wbGV0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuaCBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5oCmluZGV4IDUzNmJhM2YuLmJkMjlkOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5oCkBAIC0xMjcsNiArMTI3LDkgQEAKICAqIHByb2dyZXNzLCAwIG90aGVyd2lzZS4gKi8KIGludCBocHNiX3Jlc2V0X2J1cyhzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgdHlwZSk7CiAKK2ludCBocHNiX3JlYWRfY3ljbGVfdGltZXIoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgdTMyICpjeWNsZV90aW1lciwKKwkJCSAgdTY0ICpsb2NhbF90aW1lKTsKKwogLyoKICAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBmb3IgaG9zdCBkcml2ZXIgbW9kdWxlIHVzYWdlLiAgQWxsIG9mCiAgKiB0aGVtIGFyZSBzYWZlIHRvIHVzZSBpbiBpbnRlcnJ1cHQgY29udGV4dHMsIGFsdGhvdWdoIHNvbWUgYXJlIHF1aXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCmluZGV4IGJhOWZhZWYuLmM1YWNlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jCkBAIC0xNjgxLDcgKzE2ODEsOCBAQAogCWZvciAoOzspIHsKIAkJLyogU2xlZXAgdW50aWwgbmV4dCBidXMgcmVzZXQgKi8KIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKGdldF9ocHNiX2dlbmVyYXRpb24oaG9zdCkgPT0gZ2VuZXJhdGlvbikKKwkJaWYgKGdldF9ocHNiX2dlbmVyYXRpb24oaG9zdCkgPT0gZ2VuZXJhdGlvbiAmJgorCQkgICAgIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCXNjaGVkdWxlKCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCmluZGV4IGU5ODJkNjAuLjA2ZmFjMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKQEAgLTE4MCw3ICsxODAsNyBAQAogc3RhdGljIHZvaWQgb2hjaTEzOTRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAKICNpZm5kZWYgX19MSVRUTEVfRU5ESUFOCi1jb25zdCBzdGF0aWMgc2l6ZV90IGhkcl9zaXplc1tdID0geworc3RhdGljIGNvbnN0IHNpemVfdCBoZHJfc2l6ZXNbXSA9IHsKIAkzLAkvKiBUQ09ERV9XUklURVEgKi8KIAk0LAkvKiBUQ09ERV9XUklURUIgKi8KIAkzLAkvKiBUQ09ERV9XUklURV9SRVNQT05TRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwppbmRleCBhYTljYTgzLi5iYjg5N2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwpAQCAtMjY2OSw2ICsyNjY5LDE4IEBACiAJZmktPmlzb19zdGF0ZSA9IFJBVzEzOTRfSVNPX0lOQUNUSVZFOwogfQogCitzdGF0aWMgaW50IHJhdzEzOTRfcmVhZF9jeWNsZV90aW1lcihzdHJ1Y3QgZmlsZV9pbmZvICpmaSwgdm9pZCBfX3VzZXIgKiB1YWRkcikKK3sKKwlzdHJ1Y3QgcmF3MTM5NF9jeWNsZV90aW1lciBjdDsKKwlpbnQgZXJyOworCisJZXJyID0gaHBzYl9yZWFkX2N5Y2xlX3RpbWVyKGZpLT5ob3N0LCAmY3QuY3ljbGVfdGltZXIsICZjdC5sb2NhbF90aW1lKTsKKwlpZiAoIWVycikKKwkJaWYgKGNvcHlfdG9fdXNlcih1YWRkciwgJmN0LCBzaXplb2YoY3QpKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisJcmV0dXJuIGVycjsKK30KKwogLyogbW1hcCB0aGUgcmF3aXNvIHhtaXQvcmVjdiBidWZmZXIgKi8KIHN0YXRpYyBpbnQgcmF3MTM5NF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKQEAgLTI3NzcsNiArMjc4OSwxNCBAQAogCQlicmVhazsKIAl9CiAKKwkvKiBzdGF0ZS1pbmRlcGVuZGVudCBjb21tYW5kcyAqLworCXN3aXRjaChjbWQpIHsKKwljYXNlIFJBVzEzOTRfSU9DX0dFVF9DWUNMRV9USU1FUjoKKwkJcmV0dXJuIHJhdzEzOTRfcmVhZF9jeWNsZV90aW1lcihmaSwgYXJncCk7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5oIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmgKaW5kZXggMzViZmMzOC4uN2JkMjJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmgKQEAgLTE3OCw0ICsxNzgsMTQgQEAKIAlfX3MxNiB4bWl0X2N5Y2xlOwogfTsKIAorLyogYXJndW1lbnQgdG8gUkFXMTM5NF9JT0NfR0VUX0NZQ0xFX1RJTUVSIGlvY3RsICovCitzdHJ1Y3QgcmF3MTM5NF9jeWNsZV90aW1lciB7CisJLyogY29udGVudHMgb2YgSXNvY2hyb25vdXMgQ3ljbGUgVGltZXIgcmVnaXN0ZXIsCisJICAgYXMgaW4gT0hDSSAxLjEgY2xhdXNlIDUuMTMgKGFsc28gd2l0aCBub24tT0hDSSBob3N0cykgKi8KKwlfX3UzMiBjeWNsZV90aW1lcjsKKworCS8qIGxvY2FsIHRpbWUgaW4gbWljcm9zZWNvbmRzIHNpbmNlIEVwb2NoLAorCSAgIHNpbXVsdGFuZW91c2x5IHJlYWQgd2l0aCBjeWNsZSB0aW1lciAqLworCV9fdTY0IGxvY2FsX3RpbWU7Cit9OwogI2VuZGlmIC8qIElFRUUxMzk0X1JBVzEzOTRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGUgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZQppbmRleCA1MGZiMWNkLi4xODllNWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogCiBpYl9tYWQteSA6PQkJCW1hZC5vIHNtaS5vIGFnZW50Lm8gbWFkX3JtcHAubwogCi1pYl9zYS15IDo9CQkJc2FfcXVlcnkubworaWJfc2EteSA6PQkJCXNhX3F1ZXJ5Lm8gbXVsdGljYXN0Lm8KIAogaWJfY20teSA6PQkJCWNtLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwppbmRleCBkYjg4ZTYwLi5mOGQ2OWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwpAQCAtNzEsNiArNzEsNyBAQAogc3RhdGljIERFRklORV9JRFIoc2RwX3BzKTsKIHN0YXRpYyBERUZJTkVfSURSKHRjcF9wcyk7CiBzdGF0aWMgREVGSU5FX0lEUih1ZHBfcHMpOworc3RhdGljIERFRklORV9JRFIoaXBvaWJfcHMpOwogc3RhdGljIGludCBuZXh0X3BvcnQ7CiAKIHN0cnVjdCBjbWFfZGV2aWNlIHsKQEAgLTExNiw2ICsxMTcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Rlbl9saXN0OwogCXN0cnVjdCBjbWFfZGV2aWNlCSpjbWFfZGV2OworCXN0cnVjdCBsaXN0X2hlYWQJbWNfbGlzdDsKIAogCWVudW0gY21hX3N0YXRlCQlzdGF0ZTsKIAlzcGlubG9ja190CQlsb2NrOwpAQCAtMTM0LDEwICsxMzYsMjMgQEAKIAl9IGNtX2lkOwogCiAJdTMyCQkJc2VxX251bTsKKwl1MzIJCQlxa2V5OwogCXUzMgkJCXFwX251bTsKIAl1OAkJCXNycTsKIH07CiAKK3N0cnVjdCBjbWFfbXVsdGljYXN0IHsKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCXVuaW9uIHsKKwkJc3RydWN0IGliX3NhX211bHRpY2FzdCAqaWI7CisJfSBtdWx0aWNhc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXZvaWQJCQkqY29udGV4dDsKKwlzdHJ1Y3Qgc29ja2FkZHIJCWFkZHI7CisJdTgJCQlwYWRbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpIC0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcildOworfTsKKwogc3RydWN0IGNtYV93b3JrIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIAlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlCSppZDsKQEAgLTI0Myw2ICsyNTgsMTEgQEAKIAloaC0+aXBfdmVyc2lvbiA9IChpcF92ZXIgPDwgNCkgfCAoaGgtPmlwX3ZlcnNpb24gJiAweEYpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjbWFfaXNfdWRfcHMoZW51bSByZG1hX3BvcnRfc3BhY2UgcHMpCit7CisJcmV0dXJuIChwcyA9PSBSRE1BX1BTX1VEUCB8fCBwcyA9PSBSRE1BX1BTX0lQT0lCKTsKK30KKwogc3RhdGljIHZvaWQgY21hX2F0dGFjaF90b19kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBjbWFfZGV2aWNlICpjbWFfZGV2KQogewpAQCAtMjY1LDE5ICsyODUsNDEgQEAKIAlpZF9wcml2LT5jbWFfZGV2ID0gTlVMTDsKIH0KIAorc3RhdGljIGludCBjbWFfc2V0X3FrZXkoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKKwkJCWVudW0gcmRtYV9wb3J0X3NwYWNlIHBzLAorCQkJc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLCB1MzIgKnFrZXkpCit7CisJc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyByZWM7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHBzKSB7CisJY2FzZSBSRE1BX1BTX1VEUDoKKwkJKnFrZXkgPSBSRE1BX1VEUF9RS0VZOworCQlicmVhazsKKwljYXNlIFJETUFfUFNfSVBPSUI6CisJCWliX2FkZHJfZ2V0X21naWQoZGV2X2FkZHIsICZyZWMubWdpZCk7CisJCXJldCA9IGliX3NhX2dldF9tY21lbWJlcl9yZWMoZGV2aWNlLCBwb3J0X251bSwgJnJlYy5tZ2lkLCAmcmVjKTsKKwkJKnFrZXkgPSBiZTMyX3RvX2NwdShyZWMucWtleSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGNtYV9hY3F1aXJlX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQogewotCWVudW0gcmRtYV9ub2RlX3R5cGUgZGV2X3R5cGUgPSBpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyLmRldl90eXBlOworCXN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkciA9ICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyOwogCXN0cnVjdCBjbWFfZGV2aWNlICpjbWFfZGV2OwogCXVuaW9uIGliX2dpZCBnaWQ7CiAJaW50IHJldCA9IC1FTk9ERVY7CiAKLQlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGRldl90eXBlKSkgeworCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoZGV2X2FkZHItPmRldl90eXBlKSkgewogCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6Ci0JCWliX2FkZHJfZ2V0X3NnaWQoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIsICZnaWQpOworCQlpYl9hZGRyX2dldF9zZ2lkKGRldl9hZGRyLCAmZ2lkKTsKIAkJYnJlYWs7CiAJY2FzZSBSRE1BX1RSQU5TUE9SVF9JV0FSUDoKLQkJaXdfYWRkcl9nZXRfc2dpZCgmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkciwgJmdpZCk7CisJCWl3X2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICZnaWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTI4Nyw3ICszMjksMTIgQEAKIAkJcmV0ID0gaWJfZmluZF9jYWNoZWRfZ2lkKGNtYV9kZXYtPmRldmljZSwgJmdpZCwKIAkJCQkJICZpZF9wcml2LT5pZC5wb3J0X251bSwgTlVMTCk7CiAJCWlmICghcmV0KSB7Ci0JCQljbWFfYXR0YWNoX3RvX2RldihpZF9wcml2LCBjbWFfZGV2KTsKKwkJCXJldCA9IGNtYV9zZXRfcWtleShjbWFfZGV2LT5kZXZpY2UsCisJCQkJCSAgIGlkX3ByaXYtPmlkLnBvcnRfbnVtLAorCQkJCQkgICBpZF9wcml2LT5pZC5wcywgZGV2X2FkZHIsCisJCQkJCSAgICZpZF9wcml2LT5xa2V5KTsKKwkJCWlmICghcmV0KQorCQkJCWNtYV9hdHRhY2hfdG9fZGV2KGlkX3ByaXYsIGNtYV9kZXYpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zMjUsNDAgKzM3Miw1MCBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlkX3ByaXYtPndhaXRfcmVtb3ZlKTsKIAlhdG9taWNfc2V0KCZpZF9wcml2LT5kZXZfcmVtb3ZlLCAwKTsKIAlJTklUX0xJU1RfSEVBRCgmaWRfcHJpdi0+bGlzdGVuX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpZF9wcml2LT5tY19saXN0KTsKIAlnZXRfcmFuZG9tX2J5dGVzKCZpZF9wcml2LT5zZXFfbnVtLCBzaXplb2YgaWRfcHJpdi0+c2VxX251bSk7CiAKIAlyZXR1cm4gJmlkX3ByaXYtPmlkOwogfQogRVhQT1JUX1NZTUJPTChyZG1hX2NyZWF0ZV9pZCk7CiAKLXN0YXRpYyBpbnQgY21hX2luaXRfaWJfcXAoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwgc3RydWN0IGliX3FwICpxcCkKK3N0YXRpYyBpbnQgY21hX2luaXRfdWRfcXAoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwgc3RydWN0IGliX3FwICpxcCkKIHsKIAlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOwotCXN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcjsKLQlpbnQgcmV0OworCWludCBxcF9hdHRyX21hc2ssIHJldDsKIAotCWRldl9hZGRyID0gJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHI7Ci0JcmV0ID0gaWJfZmluZF9jYWNoZWRfcGtleShpZF9wcml2LT5pZC5kZXZpY2UsIGlkX3ByaXYtPmlkLnBvcnRfbnVtLAotCQkJCSAgaWJfYWRkcl9nZXRfcGtleShkZXZfYWRkciksCi0JCQkJICAmcXBfYXR0ci5wa2V5X2luZGV4KTsKKwlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX0lOSVQ7CisJcmV0ID0gcmRtYV9pbml0X3FwX2F0dHIoJmlkX3ByaXYtPmlkLCAmcXBfYXR0ciwgJnFwX2F0dHJfbWFzayk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXFwX2F0dHIucXBfc3RhdGUgPSBJQl9RUFNfSU5JVDsKLQlxcF9hdHRyLnFwX2FjY2Vzc19mbGFncyA9IDA7Ci0JcXBfYXR0ci5wb3J0X251bSA9IGlkX3ByaXYtPmlkLnBvcnRfbnVtOwotCXJldHVybiBpYl9tb2RpZnlfcXAocXAsICZxcF9hdHRyLCBJQl9RUF9TVEFURSB8IElCX1FQX0FDQ0VTU19GTEFHUyB8Ci0JCQkJCSAgSUJfUVBfUEtFWV9JTkRFWCB8IElCX1FQX1BPUlQpOworCXJldCA9IGliX21vZGlmeV9xcChxcCwgJnFwX2F0dHIsIHFwX2F0dHJfbWFzayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXFwX2F0dHIucXBfc3RhdGUgPSBJQl9RUFNfUlRSOworCXJldCA9IGliX21vZGlmeV9xcChxcCwgJnFwX2F0dHIsIElCX1FQX1NUQVRFKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19SVFM7CisJcXBfYXR0ci5zcV9wc24gPSAwOworCXJldCA9IGliX21vZGlmeV9xcChxcCwgJnFwX2F0dHIsIElCX1FQX1NUQVRFIHwgSUJfUVBfU1FfUFNOKTsKKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY21hX2luaXRfaXdfcXAoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwgc3RydWN0IGliX3FwICpxcCkKK3N0YXRpYyBpbnQgY21hX2luaXRfY29ubl9xcChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LCBzdHJ1Y3QgaWJfcXAgKnFwKQogewogCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CisJaW50IHFwX2F0dHJfbWFzaywgcmV0OwogCiAJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19JTklUOwotCXFwX2F0dHIucXBfYWNjZXNzX2ZsYWdzID0gSUJfQUNDRVNTX0xPQ0FMX1dSSVRFOworCXJldCA9IHJkbWFfaW5pdF9xcF9hdHRyKCZpZF9wcml2LT5pZCwgJnFwX2F0dHIsICZxcF9hdHRyX21hc2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gaWJfbW9kaWZ5X3FwKHFwLCAmcXBfYXR0ciwgSUJfUVBfU1RBVEUgfCBJQl9RUF9BQ0NFU1NfRkxBR1MpOworCXJldHVybiBpYl9tb2RpZnlfcXAocXAsICZxcF9hdHRyLCBxcF9hdHRyX21hc2spOwogfQogCiBpbnQgcmRtYV9jcmVhdGVfcXAoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3QgaWJfcGQgKnBkLApAQCAtMzc2LDE4ICs0MzMsMTAgQEAKIAlpZiAoSVNfRVJSKHFwKSkKIAkJcmV0dXJuIFBUUl9FUlIocXApOwogCi0Jc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpKSB7Ci0JY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKLQkJcmV0ID0gY21hX2luaXRfaWJfcXAoaWRfcHJpdiwgcXApOwotCQlicmVhazsKLQljYXNlIFJETUFfVFJBTlNQT1JUX0lXQVJQOgotCQlyZXQgPSBjbWFfaW5pdF9pd19xcChpZF9wcml2LCBxcCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9TWVM7Ci0JCWJyZWFrOwotCX0KLQorCWlmIChjbWFfaXNfdWRfcHMoaWRfcHJpdi0+aWQucHMpKQorCQlyZXQgPSBjbWFfaW5pdF91ZF9xcChpZF9wcml2LCBxcCk7CisJZWxzZQorCQlyZXQgPSBjbWFfaW5pdF9jb25uX3FwKGlkX3ByaXYsIHFwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtNDYwLDIzICs1MDksNTUgQEAKIAlyZXR1cm4gaWJfbW9kaWZ5X3FwKGlkLT5xcCwgJnFwX2F0dHIsIElCX1FQX1NUQVRFKTsKIH0KIAorc3RhdGljIGludCBjbWFfaWJfaW5pdF9xcF9hdHRyKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCisJCQkgICAgICAgc3RydWN0IGliX3FwX2F0dHIgKnFwX2F0dHIsIGludCAqcXBfYXR0cl9tYXNrKQoreworCXN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkciA9ICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyOworCWludCByZXQ7CisKKwlyZXQgPSBpYl9maW5kX2NhY2hlZF9wa2V5KGlkX3ByaXYtPmlkLmRldmljZSwgaWRfcHJpdi0+aWQucG9ydF9udW0sCisJCQkJICBpYl9hZGRyX2dldF9wa2V5KGRldl9hZGRyKSwKKwkJCQkgICZxcF9hdHRyLT5wa2V5X2luZGV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcXBfYXR0ci0+cG9ydF9udW0gPSBpZF9wcml2LT5pZC5wb3J0X251bTsKKwkqcXBfYXR0cl9tYXNrID0gSUJfUVBfU1RBVEUgfCBJQl9RUF9QS0VZX0lOREVYIHwgSUJfUVBfUE9SVDsKKworCWlmIChjbWFfaXNfdWRfcHMoaWRfcHJpdi0+aWQucHMpKSB7CisJCXFwX2F0dHItPnFrZXkgPSBpZF9wcml2LT5xa2V5OworCQkqcXBfYXR0cl9tYXNrIHw9IElCX1FQX1FLRVk7CisJfSBlbHNlIHsKKwkJcXBfYXR0ci0+cXBfYWNjZXNzX2ZsYWdzID0gMDsKKwkJKnFwX2F0dHJfbWFzayB8PSBJQl9RUF9BQ0NFU1NfRkxBR1M7CisJfQorCXJldHVybiAwOworfQorCiBpbnQgcmRtYV9pbml0X3FwX2F0dHIoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0ciwKIAkJICAgICAgIGludCAqcXBfYXR0cl9tYXNrKQogewogCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKIAlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGlkX3ByaXYtPmlkLmRldmljZS0+bm9kZV90eXBlKSkgewogCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6Ci0JCXJldCA9IGliX2NtX2luaXRfcXBfYXR0cihpZF9wcml2LT5jbV9pZC5pYiwgcXBfYXR0ciwKLQkJCQkJIHFwX2F0dHJfbWFzayk7CisJCWlmICghaWRfcHJpdi0+Y21faWQuaWIgfHwgY21hX2lzX3VkX3BzKGlkX3ByaXYtPmlkLnBzKSkKKwkJCXJldCA9IGNtYV9pYl9pbml0X3FwX2F0dHIoaWRfcHJpdiwgcXBfYXR0ciwgcXBfYXR0cl9tYXNrKTsKKwkJZWxzZQorCQkJcmV0ID0gaWJfY21faW5pdF9xcF9hdHRyKGlkX3ByaXYtPmNtX2lkLmliLCBxcF9hdHRyLAorCQkJCQkJIHFwX2F0dHJfbWFzayk7CiAJCWlmIChxcF9hdHRyLT5xcF9zdGF0ZSA9PSBJQl9RUFNfUlRSKQogCQkJcXBfYXR0ci0+cnFfcHNuID0gaWRfcHJpdi0+c2VxX251bTsKIAkJYnJlYWs7CiAJY2FzZSBSRE1BX1RSQU5TUE9SVF9JV0FSUDoKLQkJcmV0ID0gaXdfY21faW5pdF9xcF9hdHRyKGlkX3ByaXYtPmNtX2lkLml3LCBxcF9hdHRyLAotCQkJCQlxcF9hdHRyX21hc2spOworCQlpZiAoIWlkX3ByaXYtPmNtX2lkLml3KSB7CisJCQlxcF9hdHRyLT5xcF9hY2Nlc3NfZmxhZ3MgPSBJQl9BQ0NFU1NfTE9DQUxfV1JJVEU7CisJCQkqcXBfYXR0cl9tYXNrID0gSUJfUVBfU1RBVEUgfCBJQl9RUF9BQ0NFU1NfRkxBR1M7CisJCX0gZWxzZQorCQkJcmV0ID0gaXdfY21faW5pdF9xcF9hdHRyKGlkX3ByaXYtPmNtX2lkLml3LCBxcF9hdHRyLAorCQkJCQkJIHFwX2F0dHJfbWFzayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9TWVM7CkBAIC02OTgsNiArNzc5LDE5IEBACiAJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgY21hX2xlYXZlX21jX2dyb3VwcyhzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXN0cnVjdCBjbWFfbXVsdGljYXN0ICptYzsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmaWRfcHJpdi0+bWNfbGlzdCkpIHsKKwkJbWMgPSBjb250YWluZXJfb2YoaWRfcHJpdi0+bWNfbGlzdC5uZXh0LAorCQkJCSAgc3RydWN0IGNtYV9tdWx0aWNhc3QsIGxpc3QpOworCQlsaXN0X2RlbCgmbWMtPmxpc3QpOworCQlpYl9zYV9mcmVlX211bHRpY2FzdChtYy0+bXVsdGljYXN0LmliKTsKKwkJa2ZyZWUobWMpOworCX0KK30KKwogdm9pZCByZG1hX2Rlc3Ryb3lfaWQoc3RydWN0IHJkbWFfY21faWQgKmlkKQogewogCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CkBAIC03MjIsNiArODE2LDcgQEAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CisJCWNtYV9sZWF2ZV9tY19ncm91cHMoaWRfcHJpdik7CiAJCW11dGV4X2xvY2soJmxvY2spOwogCQljbWFfZGV0YWNoX2Zyb21fZGV2KGlkX3ByaXYpOwogCX0KQEAgLTk3Miw3ICsxMDY3LDcgQEAKIAltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YgZXZlbnQpOwogCW9mZnNldCA9IGNtYV91c2VyX2RhdGFfb2Zmc2V0KGxpc3Rlbl9pZC0+aWQucHMpOwogCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1Q7Ci0JaWYgKGxpc3Rlbl9pZC0+aWQucHMgPT0gUkRNQV9QU19VRFApIHsKKwlpZiAoY21hX2lzX3VkX3BzKGxpc3Rlbl9pZC0+aWQucHMpKSB7CiAJCWNvbm5faWQgPSBjbWFfbmV3X3VkcF9pZCgmbGlzdGVuX2lkLT5pZCwgaWJfZXZlbnQpOwogCQlldmVudC5wYXJhbS51ZC5wcml2YXRlX2RhdGEgPSBpYl9ldmVudC0+cHJpdmF0ZV9kYXRhICsgb2Zmc2V0OwogCQlldmVudC5wYXJhbS51ZC5wcml2YXRlX2RhdGFfbGVuID0KQEAgLTE3MjUsNyArMTgyMCw3IEBACiAJc3RydWN0IHJkbWFfYmluZF9saXN0ICpiaW5kX2xpc3Q7CiAJaW50IHBvcnQsIHJldDsKIAotCWJpbmRfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mICpiaW5kX2xpc3QsIEdGUF9LRVJORUwpOworCWJpbmRfbGlzdCA9IGttYWxsb2Moc2l6ZW9mICpiaW5kX2xpc3QsIEdGUF9LRVJORUwpOwogCWlmICghYmluZF9saXN0KQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTg0Nyw2ICsxOTQyLDkgQEAKIAljYXNlIFJETUFfUFNfVURQOgogCQlwcyA9ICZ1ZHBfcHM7CiAJCWJyZWFrOworCWNhc2UgUkRNQV9QU19JUE9JQjoKKwkJcHMgPSAmaXBvaWJfcHM7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwogCX0KQEAgLTE5NjEsNyArMjA1OSw3IEBACiAJCQlldmVudC5zdGF0dXMgPSBpYl9ldmVudC0+cGFyYW0uc2lkcl9yZXBfcmN2ZC5zdGF0dXM7CiAJCQlicmVhazsKIAkJfQotCQlpZiAocmVwLT5xa2V5ICE9IFJETUFfVURfUUtFWSkgeworCQlpZiAoaWRfcHJpdi0+cWtleSAhPSByZXAtPnFrZXkpIHsKIAkJCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9VTlJFQUNIQUJMRTsKIAkJCWV2ZW50LnN0YXR1cyA9IC1FSU5WQUw7CiAJCQlicmVhazsKQEAgLTIxNjAsNyArMjI1OCw3IEBACiAKIAlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkpIHsKIAljYXNlIFJETUFfVFJBTlNQT1JUX0lCOgotCQlpZiAoaWQtPnBzID09IFJETUFfUFNfVURQKQorCQlpZiAoY21hX2lzX3VkX3BzKGlkLT5wcykpCiAJCQlyZXQgPSBjbWFfcmVzb2x2ZV9pYl91ZHAoaWRfcHJpdiwgY29ubl9wYXJhbSk7CiAJCWVsc2UKIAkJCXJldCA9IGNtYV9jb25uZWN0X2liKGlkX3ByaXYsIGNvbm5fcGFyYW0pOwpAQCAtMjI1Niw3ICsyMzU0LDcgQEAKIAlyZXAuc3RhdHVzID0gc3RhdHVzOwogCWlmIChzdGF0dXMgPT0gSUJfU0lEUl9TVUNDRVNTKSB7CiAJCXJlcC5xcF9udW0gPSBpZF9wcml2LT5xcF9udW07Ci0JCXJlcC5xa2V5ID0gUkRNQV9VRF9RS0VZOworCQlyZXAucWtleSA9IGlkX3ByaXYtPnFrZXk7CiAJfQogCXJlcC5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7CiAJcmVwLnByaXZhdGVfZGF0YV9sZW4gPSBwcml2YXRlX2RhdGFfbGVuOwpAQCAtMjI4MCw3ICsyMzc4LDcgQEAKIAogCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoaWQtPmRldmljZS0+bm9kZV90eXBlKSkgewogCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6Ci0JCWlmIChpZC0+cHMgPT0gUkRNQV9QU19VRFApCisJCWlmIChjbWFfaXNfdWRfcHMoaWQtPnBzKSkKIAkJCXJldCA9IGNtYV9zZW5kX3NpZHJfcmVwKGlkX3ByaXYsIElCX1NJRFJfU1VDQ0VTUywKIAkJCQkJCWNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YSwKIAkJCQkJCWNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4pOwpAQCAtMjM0MSw3ICsyNDM5LDcgQEAKIAogCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoaWQtPmRldmljZS0+bm9kZV90eXBlKSkgewogCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6Ci0JCWlmIChpZC0+cHMgPT0gUkRNQV9QU19VRFApCisJCWlmIChjbWFfaXNfdWRfcHMoaWQtPnBzKSkKIAkJCXJldCA9IGNtYV9zZW5kX3NpZHJfcmVwKGlkX3ByaXYsIElCX1NJRFJfUkVKRUNULAogCQkJCQkJcHJpdmF0ZV9kYXRhLCBwcml2YXRlX2RhdGFfbGVuKTsKIAkJZWxzZQpAQCAtMjM5Miw2ICsyNDkwLDE3OCBAQAogfQogRVhQT1JUX1NZTUJPTChyZG1hX2Rpc2Nvbm5lY3QpOwogCitzdGF0aWMgaW50IGNtYV9pYl9tY19oYW5kbGVyKGludCBzdGF0dXMsIHN0cnVjdCBpYl9zYV9tdWx0aWNhc3QgKm11bHRpY2FzdCkKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCXN0cnVjdCBjbWFfbXVsdGljYXN0ICptYyA9IG11bHRpY2FzdC0+Y29udGV4dDsKKwlzdHJ1Y3QgcmRtYV9jbV9ldmVudCBldmVudDsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IG1jLT5pZF9wcml2OworCWF0b21pY19pbmMoJmlkX3ByaXYtPmRldl9yZW1vdmUpOworCWlmICghY21hX2NvbXAoaWRfcHJpdiwgQ01BX0FERFJfQk9VTkQpICYmCisJICAgICFjbWFfY29tcChpZF9wcml2LCBDTUFfQUREUl9SRVNPTFZFRCkpCisJCWdvdG8gb3V0OworCisJaWYgKCFzdGF0dXMgJiYgaWRfcHJpdi0+aWQucXApCisJCXN0YXR1cyA9IGliX2F0dGFjaF9tY2FzdChpZF9wcml2LT5pZC5xcCwgJm11bHRpY2FzdC0+cmVjLm1naWQsCisJCQkJCSBtdWx0aWNhc3QtPnJlYy5tbGlkKTsKKworCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZiBldmVudCk7CisJZXZlbnQuc3RhdHVzID0gc3RhdHVzOworCWV2ZW50LnBhcmFtLnVkLnByaXZhdGVfZGF0YSA9IG1jLT5jb250ZXh0OworCWlmICghc3RhdHVzKSB7CisJCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9NVUxUSUNBU1RfSk9JTjsKKwkJaWJfaW5pdF9haF9mcm9tX21jbWVtYmVyKGlkX3ByaXYtPmlkLmRldmljZSwKKwkJCQkJIGlkX3ByaXYtPmlkLnBvcnRfbnVtLCAmbXVsdGljYXN0LT5yZWMsCisJCQkJCSAmZXZlbnQucGFyYW0udWQuYWhfYXR0cik7CisJCWV2ZW50LnBhcmFtLnVkLnFwX251bSA9IDB4RkZGRkZGOworCQlldmVudC5wYXJhbS51ZC5xa2V5ID0gYmUzMl90b19jcHUobXVsdGljYXN0LT5yZWMucWtleSk7CisJfSBlbHNlCisJCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9NVUxUSUNBU1RfRVJST1I7CisKKwlyZXQgPSBpZF9wcml2LT5pZC5ldmVudF9oYW5kbGVyKCZpZF9wcml2LT5pZCwgJmV2ZW50KTsKKwlpZiAocmV0KSB7CisJCWNtYV9leGNoKGlkX3ByaXYsIENNQV9ERVNUUk9ZSU5HKTsKKwkJY21hX3JlbGVhc2VfcmVtb3ZlKGlkX3ByaXYpOworCQlyZG1hX2Rlc3Ryb3lfaWQoJmlkX3ByaXYtPmlkKTsKKwkJcmV0dXJuIDA7CisJfQorb3V0OgorCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY21hX3NldF9tZ2lkKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCisJCQkgc3RydWN0IHNvY2thZGRyICphZGRyLCB1bmlvbiBpYl9naWQgKm1naWQpCit7CisJdW5zaWduZWQgY2hhciBtY19tYXBbTUFYX0FERFJfTEVOXTsKKwlzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIgPSAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkcjsKKworCWlmIChjbWFfYW55X2FkZHIoYWRkcikpIHsKKwkJbWVtc2V0KG1naWQsIDAsIHNpemVvZiAqbWdpZCk7CisJfSBlbHNlIGlmICgoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkgICAoKGJlMzJfdG9fY3B1KHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbMF0pICYgMHhGRjEwQTAxQikgPT0KKwkJCQkJCQkJIDB4RkYxMEEwMUIpKSB7CisJCS8qIElQdjYgYWRkcmVzcyBpcyBhbiBTQSBhc3NpZ25lZCBNR0lELiAqLworCQltZW1jcHkobWdpZCwgJnNpbjYtPnNpbjZfYWRkciwgc2l6ZW9mICptZ2lkKTsKKwl9IGVsc2UgeworCQlpcF9pYl9tY19tYXAoc2luLT5zaW5fYWRkci5zX2FkZHIsIG1jX21hcCk7CisJCWlmIChpZF9wcml2LT5pZC5wcyA9PSBSRE1BX1BTX1VEUCkKKwkJCW1jX21hcFs3XSA9IDB4MDE7CS8qIFVzZSBSRE1BIENNIHNpZ25hdHVyZSAqLworCQltY19tYXBbOF0gPSBpYl9hZGRyX2dldF9wa2V5KGRldl9hZGRyKSA+PiA4OworCQltY19tYXBbOV0gPSAodW5zaWduZWQgY2hhcikgaWJfYWRkcl9nZXRfcGtleShkZXZfYWRkcik7CisJCSptZ2lkID0gKih1bmlvbiBpYl9naWQgKikgKG1jX21hcCArIDQpOworCX0KK30KKworc3RhdGljIGludCBjbWFfam9pbl9pYl9tdWx0aWNhc3Qoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCQkgc3RydWN0IGNtYV9tdWx0aWNhc3QgKm1jKQoreworCXN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgcmVjOworCXN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkciA9ICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyOworCWliX3NhX2NvbXBfbWFzayBjb21wX21hc2s7CisJaW50IHJldDsKKworCWliX2FkZHJfZ2V0X21naWQoZGV2X2FkZHIsICZyZWMubWdpZCk7CisJcmV0ID0gaWJfc2FfZ2V0X21jbWVtYmVyX3JlYyhpZF9wcml2LT5pZC5kZXZpY2UsIGlkX3ByaXYtPmlkLnBvcnRfbnVtLAorCQkJCSAgICAgJnJlYy5tZ2lkLCAmcmVjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJY21hX3NldF9tZ2lkKGlkX3ByaXYsICZtYy0+YWRkciwgJnJlYy5tZ2lkKTsKKwlpZiAoaWRfcHJpdi0+aWQucHMgPT0gUkRNQV9QU19VRFApCisJCXJlYy5xa2V5ID0gY3B1X3RvX2JlMzIoUkRNQV9VRFBfUUtFWSk7CisJaWJfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgJnJlYy5wb3J0X2dpZCk7CisJcmVjLnBrZXkgPSBjcHVfdG9fYmUxNihpYl9hZGRyX2dldF9wa2V5KGRldl9hZGRyKSk7CisJcmVjLmpvaW5fc3RhdGUgPSAxOworCisJY29tcF9tYXNrID0gSUJfU0FfTUNNRU1CRVJfUkVDX01HSUQgfCBJQl9TQV9NQ01FTUJFUl9SRUNfUE9SVF9HSUQgfAorCQkgICAgSUJfU0FfTUNNRU1CRVJfUkVDX1BLRVkgfCBJQl9TQV9NQ01FTUJFUl9SRUNfSk9JTl9TVEFURSB8CisJCSAgICBJQl9TQV9NQ01FTUJFUl9SRUNfUUtFWSB8IElCX1NBX01DTUVNQkVSX1JFQ19TTCB8CisJCSAgICBJQl9TQV9NQ01FTUJFUl9SRUNfRkxPV19MQUJFTCB8CisJCSAgICBJQl9TQV9NQ01FTUJFUl9SRUNfVFJBRkZJQ19DTEFTUzsKKworCW1jLT5tdWx0aWNhc3QuaWIgPSBpYl9zYV9qb2luX211bHRpY2FzdCgmc2FfY2xpZW50LCBpZF9wcml2LT5pZC5kZXZpY2UsCisJCQkJCQlpZF9wcml2LT5pZC5wb3J0X251bSwgJnJlYywKKwkJCQkJCWNvbXBfbWFzaywgR0ZQX0tFUk5FTCwKKwkJCQkJCWNtYV9pYl9tY19oYW5kbGVyLCBtYyk7CisJaWYgKElTX0VSUihtYy0+bXVsdGljYXN0LmliKSkKKwkJcmV0dXJuIFBUUl9FUlIobWMtPm11bHRpY2FzdC5pYik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJkbWFfam9pbl9tdWx0aWNhc3Qoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisJCQl2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJc3RydWN0IGNtYV9tdWx0aWNhc3QgKm1jOworCWludCByZXQ7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJaWYgKCFjbWFfY29tcChpZF9wcml2LCBDTUFfQUREUl9CT1VORCkgJiYKKwkgICAgIWNtYV9jb21wKGlkX3ByaXYsIENNQV9BRERSX1JFU09MVkVEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYyA9IGttYWxsb2Moc2l6ZW9mICptYywgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoJm1jLT5hZGRyLCBhZGRyLCBpcF9hZGRyX3NpemUoYWRkcikpOworCW1jLT5jb250ZXh0ID0gY29udGV4dDsKKwltYy0+aWRfcHJpdiA9IGlkX3ByaXY7CisKKwlzcGluX2xvY2soJmlkX3ByaXYtPmxvY2spOworCWxpc3RfYWRkKCZtYy0+bGlzdCwgJmlkX3ByaXYtPm1jX2xpc3QpOworCXNwaW5fdW5sb2NrKCZpZF9wcml2LT5sb2NrKTsKKworCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoaWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6CisJCXJldCA9IGNtYV9qb2luX2liX211bHRpY2FzdChpZF9wcml2LCBtYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9TWVM7CisJCWJyZWFrOworCX0KKworCWlmIChyZXQpIHsKKwkJc3Bpbl9sb2NrX2lycSgmaWRfcHJpdi0+bG9jayk7CisJCWxpc3RfZGVsKCZtYy0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycSgmaWRfcHJpdi0+bG9jayk7CisJCWtmcmVlKG1jKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9qb2luX211bHRpY2FzdCk7CisKK3ZvaWQgcmRtYV9sZWF2ZV9tdWx0aWNhc3Qoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlzdHJ1Y3QgY21hX211bHRpY2FzdCAqbWM7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJc3Bpbl9sb2NrX2lycSgmaWRfcHJpdi0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtYywgJmlkX3ByaXYtPm1jX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFtZW1jbXAoJm1jLT5hZGRyLCBhZGRyLCBpcF9hZGRyX3NpemUoYWRkcikpKSB7CisJCQlsaXN0X2RlbCgmbWMtPmxpc3QpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZpZF9wcml2LT5sb2NrKTsKKworCQkJaWYgKGlkLT5xcCkKKwkJCQlpYl9kZXRhY2hfbWNhc3QoaWQtPnFwLAorCQkJCQkJJm1jLT5tdWx0aWNhc3QuaWItPnJlYy5tZ2lkLAorCQkJCQkJbWMtPm11bHRpY2FzdC5pYi0+cmVjLm1saWQpOworCQkJaWJfc2FfZnJlZV9tdWx0aWNhc3QobWMtPm11bHRpY2FzdC5pYik7CisJCQlrZnJlZShtYyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZpZF9wcml2LT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9sZWF2ZV9tdWx0aWNhc3QpOworCiBzdGF0aWMgdm9pZCBjbWFfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGNtYV9kZXZpY2UgKmNtYV9kZXY7CkBAIC0yNTIyLDYgKzI3OTIsNyBAQAogCWlkcl9kZXN0cm95KCZzZHBfcHMpOwogCWlkcl9kZXN0cm95KCZ0Y3BfcHMpOwogCWlkcl9kZXN0cm95KCZ1ZHBfcHMpOworCWlkcl9kZXN0cm95KCZpcG9pYl9wcyk7CiB9CiAKIG1vZHVsZV9pbml0KGNtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Ztcl9wb29sLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9mbXJfcG9vbC5jCmluZGV4IDg5MjZhMmIuLjFkNzk2ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Ztcl9wb29sLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZm1yX3Bvb2wuYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAKIAl7CiAJCXN0cnVjdCBpYl9wb29sX2ZtciAqZm1yOwotCQlzdHJ1Y3QgaWJfZm1yX2F0dHIgYXR0ciA9IHsKKwkJc3RydWN0IGliX2Ztcl9hdHRyIGZtcl9hdHRyID0gewogCQkJLm1heF9wYWdlcyAgPSBwYXJhbXMtPm1heF9wYWdlc19wZXJfZm1yLAogCQkJLm1heF9tYXBzICAgPSBwb29sLT5tYXhfcmVtYXBzLAogCQkJLnBhZ2Vfc2hpZnQgPSBwYXJhbXMtPnBhZ2Vfc2hpZnQKQEAgLTMyMSw3ICszMjEsNyBAQAogCQkJZm1yLT5yZWZfY291bnQgICAgICAgID0gMDsKIAkJCUlOSVRfSExJU1RfTk9ERSgmZm1yLT5jYWNoZV9ub2RlKTsKIAotCQkJZm1yLT5mbXIgPSBpYl9hbGxvY19mbXIocGQsIHBhcmFtcy0+YWNjZXNzLCAmYXR0cik7CisJCQlmbXItPmZtciA9IGliX2FsbG9jX2ZtcihwZCwgcGFyYW1zLT5hY2Nlc3MsICZmbXJfYXR0cik7CiAJCQlpZiAoSVNfRVJSKGZtci0+Zm1yKSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImZtcl9jcmVhdGUgZmFpbGVkIGZvciBGTVIgJWQiLCBpKTsKIAkJCQlrZnJlZShmbXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCmluZGV4IDEwMzlhZDUuLjg5MWQxZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMKQEAgLTE0Niw2ICsxNDYsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZnJlZV9jbV9pZChzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2KQoreworCWRlYWxsb2Nfd29ya19lbnRyaWVzKGNtX2lkX3ByaXYpOworCWtmcmVlKGNtX2lkX3ByaXYpOworfQorCiAvKgogICogUmVsZWFzZSBhIHJlZmVyZW5jZSBvbiBjbV9pZC4gSWYgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGJlaW5nCiAgKiByZWxlYXNlZCwgZW5hYmxlIHRoZSB3YWl0aW5nIHRocmVhZCAoaW4gaXdfZGVzdHJveV9jbV9pZCkgdG8KQEAgLTE1MywyMSArMTU5LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgaXdjbV9kZXJlZl9pZChzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2KQogewotCWludCByZXQgPSAwOwotCiAJQlVHX09OKGF0b21pY19yZWFkKCZjbV9pZF9wcml2LT5yZWZjb3VudCk9PTApOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjbV9pZF9wcml2LT5yZWZjb3VudCkpIHsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZjbV9pZF9wcml2LT53b3JrX2xpc3QpKTsKLQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmNtX2lkX3ByaXYtPmRlc3Ryb3lfY29tcC53YWl0KSkgewotCQkJQlVHX09OKGNtX2lkX3ByaXYtPnN0YXRlICE9IElXX0NNX1NUQVRFX0RFU1RST1lJTkcpOwotCQkJQlVHX09OKHRlc3RfYml0KElXQ01fRl9DQUxMQkFDS19ERVNUUk9ZLAotCQkJCQkmY21faWRfcHJpdi0+ZmxhZ3MpKTsKLQkJCXJldCA9IDE7Ci0JCX0KIAkJY29tcGxldGUoJmNtX2lkX3ByaXYtPmRlc3Ryb3lfY29tcCk7CisJCXJldHVybiAxOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF9yZWYoc3RydWN0IGl3X2NtX2lkICpjbV9pZCkKQEAgLTE4MSw3ICsxODAsMTEgQEAKIHsKIAlzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2OwogCWNtX2lkX3ByaXYgPSBjb250YWluZXJfb2YoY21faWQsIHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUsIGlkKTsKLQlpd2NtX2RlcmVmX2lkKGNtX2lkX3ByaXYpOworCWlmIChpd2NtX2RlcmVmX2lkKGNtX2lkX3ByaXYpICYmCisJICAgIHRlc3RfYml0KElXQ01fRl9DQUxMQkFDS19ERVNUUk9ZLCAmY21faWRfcHJpdi0+ZmxhZ3MpKSB7CisJCUJVR19PTighbGlzdF9lbXB0eSgmY21faWRfcHJpdi0+d29ya19saXN0KSk7CisJCWZyZWVfY21faWQoY21faWRfcHJpdik7CisJfQogfQogCiBzdGF0aWMgaW50IGNtX2V2ZW50X2hhbmRsZXIoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwgc3RydWN0IGl3X2NtX2V2ZW50ICpldmVudCk7CkBAIC0zNTUsNyArMzU4LDkgQEAKIAljYXNlIElXX0NNX1NUQVRFX0NPTk5fUkVDVjoKIAkJLyoKIAkJICogQXBwIGNhbGxlZCBkZXN0cm95IGJlZm9yZS93aXRob3V0IGNhbGxpbmcgYWNjZXB0IGFmdGVyCi0JCSAqIHJlY2VpdmluZyBjb25uZWN0aW9uIHJlcXVlc3QgZXZlbnQgbm90aWZpY2F0aW9uLgorCQkgKiByZWNlaXZpbmcgY29ubmVjdGlvbiByZXF1ZXN0IGV2ZW50IG5vdGlmaWNhdGlvbiBvcgorCQkgKiByZXR1cm5lZCBub24gemVybyBmcm9tIHRoZSBldmVudCBjYWxsYmFjayBmdW5jdGlvbi4KKwkJICogSW4gZWl0aGVyIGNhc2UsIG11c3QgdGVsbCB0aGUgcHJvdmlkZXIgdG8gcmVqZWN0LgogCQkgKi8KIAkJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9ERVNUUk9ZSU5HOwogCQlicmVhazsKQEAgLTM5MSw5ICszOTYsNyBAQAogCiAJd2FpdF9mb3JfY29tcGxldGlvbigmY21faWRfcHJpdi0+ZGVzdHJveV9jb21wKTsKIAotCWRlYWxsb2Nfd29ya19lbnRyaWVzKGNtX2lkX3ByaXYpOwotCi0Ja2ZyZWUoY21faWRfcHJpdik7CisJZnJlZV9jbV9pZChjbV9pZF9wcml2KTsKIH0KIEVYUE9SVF9TWU1CT0woaXdfZGVzdHJveV9jbV9pZCk7CiAKQEAgLTY0NywxMCArNjUwLDExIEBACiAJLyogQ2FsbCB0aGUgY2xpZW50IENNIGhhbmRsZXIgKi8KIAlyZXQgPSBjbV9pZC0+Y21faGFuZGxlcihjbV9pZCwgaXdfZXZlbnQpOwogCWlmIChyZXQpIHsKKwkJaXdfY21fcmVqZWN0KGNtX2lkLCBOVUxMLCAwKTsKIAkJc2V0X2JpdChJV0NNX0ZfQ0FMTEJBQ0tfREVTVFJPWSwgJmNtX2lkX3ByaXYtPmZsYWdzKTsKIAkJZGVzdHJveV9jbV9pZChjbV9pZCk7CiAJCWlmIChhdG9taWNfcmVhZCgmY21faWRfcHJpdi0+cmVmY291bnQpPT0wKQotCQkJa2ZyZWUoY21faWQpOworCQkJZnJlZV9jbV9pZChjbV9pZF9wcml2KTsKIAl9CiAKIG91dDoKQEAgLTg1NCwxMyArODU4LDEyIEBACiAJCQlkZXN0cm95X2NtX2lkKCZjbV9pZF9wcml2LT5pZCk7CiAJCX0KIAkJQlVHX09OKGF0b21pY19yZWFkKCZjbV9pZF9wcml2LT5yZWZjb3VudCk9PTApOwotCQlpZiAoaXdjbV9kZXJlZl9pZChjbV9pZF9wcml2KSkKLQkJCXJldHVybjsKLQotCQlpZiAoYXRvbWljX3JlYWQoJmNtX2lkX3ByaXYtPnJlZmNvdW50KT09MCAmJgotCQkgICAgdGVzdF9iaXQoSVdDTV9GX0NBTExCQUNLX0RFU1RST1ksICZjbV9pZF9wcml2LT5mbGFncykpIHsKLQkJCWRlYWxsb2Nfd29ya19lbnRyaWVzKGNtX2lkX3ByaXYpOwotCQkJa2ZyZWUoY21faWRfcHJpdik7CisJCWlmIChpd2NtX2RlcmVmX2lkKGNtX2lkX3ByaXYpKSB7CisJCQlpZiAodGVzdF9iaXQoSVdDTV9GX0NBTExCQUNLX0RFU1RST1ksCisJCQkJICAgICAmY21faWRfcHJpdi0+ZmxhZ3MpKSB7CisJCQkJQlVHX09OKCFsaXN0X2VtcHR5KCZjbV9pZF9wcml2LT53b3JrX2xpc3QpKTsKKwkJCQlmcmVlX2NtX2lkKGNtX2lkX3ByaXYpOworCQkJfQogCQkJcmV0dXJuOwogCQl9CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tdWx0aWNhc3QuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL211bHRpY2FzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTc5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tdWx0aWNhc3QuYwpAQCAtMCwwICsxLDgzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi7CoCBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisjaW5jbHVkZSA8cmRtYS9pYl9jYWNoZS5oPgorI2luY2x1ZGUgInNhLmgiCisKK3N0YXRpYyB2b2lkIG1jYXN0X2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKK3N0YXRpYyB2b2lkIG1jYXN0X3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKKworc3RhdGljIHN0cnVjdCBpYl9jbGllbnQgbWNhc3RfY2xpZW50ID0geworCS5uYW1lICAgPSAiaWJfbXVsdGljYXN0IiwKKwkuYWRkICAgID0gbWNhc3RfYWRkX29uZSwKKwkucmVtb3ZlID0gbWNhc3RfcmVtb3ZlX29uZQorfTsKKworc3RhdGljIHN0cnVjdCBpYl9zYV9jbGllbnQJc2FfY2xpZW50Oworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSptY2FzdF93cTsKK3N0YXRpYyB1bmlvbiBpYl9naWQgbWdpZDA7CisKK3N0cnVjdCBtY2FzdF9kZXZpY2U7CisKK3N0cnVjdCBtY2FzdF9wb3J0IHsKKwlzdHJ1Y3QgbWNhc3RfZGV2aWNlCSpkZXY7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgcmJfcm9vdAkJdGFibGU7CisJYXRvbWljX3QJCXJlZmNvdW50OworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXA7CisJdTgJCQlwb3J0X251bTsKK307CisKK3N0cnVjdCBtY2FzdF9kZXZpY2UgeworCXN0cnVjdCBpYl9kZXZpY2UJKmRldmljZTsKKwlzdHJ1Y3QgaWJfZXZlbnRfaGFuZGxlcglldmVudF9oYW5kbGVyOworCWludAkJCXN0YXJ0X3BvcnQ7CisJaW50CQkJZW5kX3BvcnQ7CisJc3RydWN0IG1jYXN0X3BvcnQJcG9ydFswXTsKK307CisKK2VudW0gbWNhc3Rfc3RhdGUgeworCU1DQVNUX0lETEUsCisJTUNBU1RfSk9JTklORywKKwlNQ0FTVF9NRU1CRVIsCisJTUNBU1RfQlVTWSwKKwlNQ0FTVF9FUlJPUgorfTsKKworc3RydWN0IG1jYXN0X21lbWJlcjsKKworc3RydWN0IG1jYXN0X2dyb3VwIHsKKwlzdHJ1Y3QgaWJfc2FfbWNtZW1iZXJfcmVjIHJlYzsKKwlzdHJ1Y3QgcmJfbm9kZQkJbm9kZTsKKwlzdHJ1Y3QgbWNhc3RfcG9ydAkqcG9ydDsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCXN0cnVjdCBsaXN0X2hlYWQJcGVuZGluZ19saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlX2xpc3Q7CisJc3RydWN0IG1jYXN0X21lbWJlcgkqbGFzdF9qb2luOworCWludAkJCW1lbWJlcnNbM107CisJYXRvbWljX3QJCXJlZmNvdW50OworCWVudW0gbWNhc3Rfc3RhdGUJc3RhdGU7CisJc3RydWN0IGliX3NhX3F1ZXJ5CSpxdWVyeTsKKwlpbnQJCQlxdWVyeV9pZDsKK307CisKK3N0cnVjdCBtY2FzdF9tZW1iZXIgeworCXN0cnVjdCBpYl9zYV9tdWx0aWNhc3QJbXVsdGljYXN0OworCXN0cnVjdCBpYl9zYV9jbGllbnQJKmNsaWVudDsKKwlzdHJ1Y3QgbWNhc3RfZ3JvdXAJKmdyb3VwOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwllbnVtIG1jYXN0X3N0YXRlCXN0YXRlOworCWF0b21pY190CQlyZWZjb3VudDsKKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wOworfTsKKworc3RhdGljIHZvaWQgam9pbl9oYW5kbGVyKGludCBzdGF0dXMsIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlYywKKwkJCSB2b2lkICpjb250ZXh0KTsKK3N0YXRpYyB2b2lkIGxlYXZlX2hhbmRsZXIoaW50IHN0YXR1cywgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqcmVjLAorCQkJICB2b2lkICpjb250ZXh0KTsKKworc3RhdGljIHN0cnVjdCBtY2FzdF9ncm91cCAqbWNhc3RfZmluZChzdHJ1Y3QgbWNhc3RfcG9ydCAqcG9ydCwKKwkJCQkgICAgICB1bmlvbiBpYl9naWQgKm1naWQpCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGUgPSBwb3J0LT50YWJsZS5yYl9ub2RlOworCXN0cnVjdCBtY2FzdF9ncm91cCAqZ3JvdXA7CisJaW50IHJldDsKKworCXdoaWxlIChub2RlKSB7CisJCWdyb3VwID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG1jYXN0X2dyb3VwLCBub2RlKTsKKwkJcmV0ID0gbWVtY21wKG1naWQtPnJhdywgZ3JvdXAtPnJlYy5tZ2lkLnJhdywgc2l6ZW9mICptZ2lkKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gZ3JvdXA7CisKKwkJaWYgKHJldCA8IDApCisJCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJbm9kZSA9IG5vZGUtPnJiX3JpZ2h0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBtY2FzdF9ncm91cCAqbWNhc3RfaW5zZXJ0KHN0cnVjdCBtY2FzdF9wb3J0ICpwb3J0LAorCQkJCQlzdHJ1Y3QgbWNhc3RfZ3JvdXAgKmdyb3VwLAorCQkJCQlpbnQgYWxsb3dfZHVwbGljYXRlcykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKmxpbmsgPSAmcG9ydC0+dGFibGUucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgbWNhc3RfZ3JvdXAgKmN1cl9ncm91cDsKKwlpbnQgcmV0OworCisJd2hpbGUgKCpsaW5rKSB7CisJCXBhcmVudCA9ICpsaW5rOworCQljdXJfZ3JvdXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBtY2FzdF9ncm91cCwgbm9kZSk7CisKKwkJcmV0ID0gbWVtY21wKGdyb3VwLT5yZWMubWdpZC5yYXcsIGN1cl9ncm91cC0+cmVjLm1naWQucmF3LAorCQkJICAgICBzaXplb2YgZ3JvdXAtPnJlYy5tZ2lkKTsKKwkJaWYgKHJldCA8IDApCisJCQlsaW5rID0gJigqbGluayktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHJldCA+IDApCisJCQlsaW5rID0gJigqbGluayktPnJiX3JpZ2h0OworCQllbHNlIGlmIChhbGxvd19kdXBsaWNhdGVzKQorCQkJbGluayA9ICYoKmxpbmspLT5yYl9sZWZ0OworCQllbHNlCisJCQlyZXR1cm4gY3VyX2dyb3VwOworCX0KKwlyYl9saW5rX25vZGUoJmdyb3VwLT5ub2RlLCBwYXJlbnQsIGxpbmspOworCXJiX2luc2VydF9jb2xvcigmZ3JvdXAtPm5vZGUsICZwb3J0LT50YWJsZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRlcmVmX3BvcnQoc3RydWN0IG1jYXN0X3BvcnQgKnBvcnQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBvcnQtPnJlZmNvdW50KSkKKwkJY29tcGxldGUoJnBvcnQtPmNvbXApOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2dyb3VwKHN0cnVjdCBtY2FzdF9ncm91cCAqZ3JvdXApCit7CisJc3RydWN0IG1jYXN0X3BvcnQgKnBvcnQgPSBncm91cC0+cG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZ3JvdXAtPnJlZmNvdW50KSkgeworCQlyYl9lcmFzZSgmZ3JvdXAtPm5vZGUsICZwb3J0LT50YWJsZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJa2ZyZWUoZ3JvdXApOworCQlkZXJlZl9wb3J0KHBvcnQpOworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGRlcmVmX21lbWJlcihzdHJ1Y3QgbWNhc3RfbWVtYmVyICptZW1iZXIpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1lbWJlci0+cmVmY291bnQpKQorCQljb21wbGV0ZSgmbWVtYmVyLT5jb21wKTsKK30KKworc3RhdGljIHZvaWQgcXVldWVfam9pbihzdHJ1Y3QgbWNhc3RfbWVtYmVyICptZW1iZXIpCit7CisJc3RydWN0IG1jYXN0X2dyb3VwICpncm91cCA9IG1lbWJlci0+Z3JvdXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncm91cC0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZtZW1iZXItPmxpc3QsICZncm91cC0+cGVuZGluZ19saXN0KTsKKwlpZiAoZ3JvdXAtPnN0YXRlID09IE1DQVNUX0lETEUpIHsKKwkJZ3JvdXAtPnN0YXRlID0gTUNBU1RfQlVTWTsKKwkJYXRvbWljX2luYygmZ3JvdXAtPnJlZmNvdW50KTsKKwkJcXVldWVfd29yayhtY2FzdF93cSwgJmdyb3VwLT53b3JrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JvdXAtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIEEgbXVsdGljYXN0IGdyb3VwIGhhcyB0aHJlZSB0eXBlcyBvZiBtZW1iZXJzOiBmdWxsIG1lbWJlciwgbm9uIG1lbWJlciwgYW5kCisgKiBzZW5kIG9ubHkgbWVtYmVyLiAgV2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgbWVtYmVycyBvZiBlYWNoCisgKiB0eXBlIGJhc2VkIG9uIHRoZWlyIGpvaW4gc3RhdGUuICBBZGp1c3QgdGhlIG51bWJlciBvZiBtZW1iZXJzIHRoZSBiZWxvbmcgdG8KKyAqIHRoZSBzcGVjaWZpZWQgam9pbiBzdGF0ZXMuCisgKi8KK3N0YXRpYyB2b2lkIGFkanVzdF9tZW1iZXJzaGlwKHN0cnVjdCBtY2FzdF9ncm91cCAqZ3JvdXAsIHU4IGpvaW5fc3RhdGUsIGludCBpbmMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrLCBqb2luX3N0YXRlID4+PSAxKQorCQlpZiAoam9pbl9zdGF0ZSAmIDB4MSkKKwkJCWdyb3VwLT5tZW1iZXJzW2ldICs9IGluYzsKK30KKworLyoKKyAqIElmIGEgbXVsdGljYXN0IGdyb3VwIGhhcyB6ZXJvIG1lbWJlcnMgbGVmdCBmb3IgYSBwYXJ0aWN1bGFyIGpvaW4gc3RhdGUsIGJ1dAorICogdGhlIGdyb3VwIGlzIHN0aWxsIGEgbWVtYmVyIHdpdGggdGhlIFNBLCB3ZSBuZWVkIHRvIGxlYXZlIHRoYXQgam9pbiBzdGF0ZS4KKyAqIERldGVybWluZSB3aGljaCBqb2luIHN0YXRlcyB3ZSBzdGlsbCBiZWxvbmcgdG8sIGJ1dCB0aGF0IGRvIG5vdCBoYXZlIGFueQorICogYWN0aXZlIG1lbWJlcnMuCisgKi8KK3N0YXRpYyB1OCBnZXRfbGVhdmVfc3RhdGUoc3RydWN0IG1jYXN0X2dyb3VwICpncm91cCkKK3sKKwl1OCBsZWF2ZV9zdGF0ZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlpZiAoIWdyb3VwLT5tZW1iZXJzW2ldKQorCQkJbGVhdmVfc3RhdGUgfD0gKDB4MSA8PCBpKTsKKworCXJldHVybiBsZWF2ZV9zdGF0ZSAmIGdyb3VwLT5yZWMuam9pbl9zdGF0ZTsKK30KKworc3RhdGljIGludCBjaGVja19zZWxlY3RvcihpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrLAorCQkJICBpYl9zYV9jb21wX21hc2sgc2VsZWN0b3JfbWFzaywKKwkJCSAgaWJfc2FfY29tcF9tYXNrIHZhbHVlX21hc2ssCisJCQkgIHU4IHNlbGVjdG9yLCB1OCBzcmNfdmFsdWUsIHU4IGRzdF92YWx1ZSkKK3sKKwlpbnQgZXJyOworCisJaWYgKCEoY29tcF9tYXNrICYgc2VsZWN0b3JfbWFzaykgfHwgIShjb21wX21hc2sgJiB2YWx1ZV9tYXNrKSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHNlbGVjdG9yKSB7CisJY2FzZSBJQl9TQV9HVDoKKwkJZXJyID0gKHNyY192YWx1ZSA8PSBkc3RfdmFsdWUpOworCQlicmVhazsKKwljYXNlIElCX1NBX0xUOgorCQllcnIgPSAoc3JjX3ZhbHVlID49IGRzdF92YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgSUJfU0FfRVE6CisJCWVyciA9IChzcmNfdmFsdWUgIT0gZHN0X3ZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjbXBfcmVjKHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnNyYywKKwkJICAgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqZHN0LCBpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrKQoreworCS8qIE1HSUQgbXVzdCBhbHJlYWR5IG1hdGNoICovCisKKwlpZiAoY29tcF9tYXNrICYgSUJfU0FfTUNNRU1CRVJfUkVDX1BPUlRfR0lEICYmCisJICAgIG1lbWNtcCgmc3JjLT5wb3J0X2dpZCwgJmRzdC0+cG9ydF9naWQsIHNpemVvZiBzcmMtPnBvcnRfZ2lkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvbXBfbWFzayAmIElCX1NBX01DTUVNQkVSX1JFQ19RS0VZICYmIHNyYy0+cWtleSAhPSBkc3QtPnFrZXkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb21wX21hc2sgJiBJQl9TQV9NQ01FTUJFUl9SRUNfTUxJRCAmJiBzcmMtPm1saWQgIT0gZHN0LT5tbGlkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2hlY2tfc2VsZWN0b3IoY29tcF9tYXNrLCBJQl9TQV9NQ01FTUJFUl9SRUNfTVRVX1NFTEVDVE9SLAorCQkJICAgSUJfU0FfTUNNRU1CRVJfUkVDX01UVSwgZHN0LT5tdHVfc2VsZWN0b3IsCisJCQkgICBzcmMtPm10dSwgZHN0LT5tdHUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY29tcF9tYXNrICYgSUJfU0FfTUNNRU1CRVJfUkVDX1RSQUZGSUNfQ0xBU1MgJiYKKwkgICAgc3JjLT50cmFmZmljX2NsYXNzICE9IGRzdC0+dHJhZmZpY19jbGFzcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvbXBfbWFzayAmIElCX1NBX01DTUVNQkVSX1JFQ19QS0VZICYmIHNyYy0+cGtleSAhPSBkc3QtPnBrZXkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjaGVja19zZWxlY3Rvcihjb21wX21hc2ssIElCX1NBX01DTUVNQkVSX1JFQ19SQVRFX1NFTEVDVE9SLAorCQkJICAgSUJfU0FfTUNNRU1CRVJfUkVDX1JBVEUsIGRzdC0+cmF0ZV9zZWxlY3RvciwKKwkJCSAgIHNyYy0+cmF0ZSwgZHN0LT5yYXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoZWNrX3NlbGVjdG9yKGNvbXBfbWFzaywKKwkJCSAgIElCX1NBX01DTUVNQkVSX1JFQ19QQUNLRVRfTElGRV9USU1FX1NFTEVDVE9SLAorCQkJICAgSUJfU0FfTUNNRU1CRVJfUkVDX1BBQ0tFVF9MSUZFX1RJTUUsCisJCQkgICBkc3QtPnBhY2tldF9saWZlX3RpbWVfc2VsZWN0b3IsCisJCQkgICBzcmMtPnBhY2tldF9saWZlX3RpbWUsIGRzdC0+cGFja2V0X2xpZmVfdGltZSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb21wX21hc2sgJiBJQl9TQV9NQ01FTUJFUl9SRUNfU0wgJiYgc3JjLT5zbCAhPSBkc3QtPnNsKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY29tcF9tYXNrICYgSUJfU0FfTUNNRU1CRVJfUkVDX0ZMT1dfTEFCRUwgJiYKKwkgICAgc3JjLT5mbG93X2xhYmVsICE9IGRzdC0+Zmxvd19sYWJlbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvbXBfbWFzayAmIElCX1NBX01DTUVNQkVSX1JFQ19IT1BfTElNSVQgJiYKKwkgICAgc3JjLT5ob3BfbGltaXQgIT0gZHN0LT5ob3BfbGltaXQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb21wX21hc2sgJiBJQl9TQV9NQ01FTUJFUl9SRUNfU0NPUEUgJiYgc3JjLT5zY29wZSAhPSBkc3QtPnNjb3BlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGpvaW5fc3RhdGUgY2hlY2tlZCBzZXBhcmF0ZWx5LCBwcm94eV9qb2luIGlnbm9yZWQgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlbmRfam9pbihzdHJ1Y3QgbWNhc3RfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgbWNhc3RfbWVtYmVyICptZW1iZXIpCit7CisJc3RydWN0IG1jYXN0X3BvcnQgKnBvcnQgPSBncm91cC0+cG9ydDsKKwlpbnQgcmV0OworCisJZ3JvdXAtPmxhc3Rfam9pbiA9IG1lbWJlcjsKKwlyZXQgPSBpYl9zYV9tY21lbWJlcl9yZWNfcXVlcnkoJnNhX2NsaWVudCwgcG9ydC0+ZGV2LT5kZXZpY2UsCisJCQkJICAgICAgIHBvcnQtPnBvcnRfbnVtLCBJQl9NR01UX01FVEhPRF9TRVQsCisJCQkJICAgICAgICZtZW1iZXItPm11bHRpY2FzdC5yZWMsCisJCQkJICAgICAgIG1lbWJlci0+bXVsdGljYXN0LmNvbXBfbWFzaywKKwkJCQkgICAgICAgMzAwMCwgR0ZQX0tFUk5FTCwgam9pbl9oYW5kbGVyLCBncm91cCwKKwkJCQkgICAgICAgJmdyb3VwLT5xdWVyeSk7CisJaWYgKHJldCA+PSAwKSB7CisJCWdyb3VwLT5xdWVyeV9pZCA9IHJldDsKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZW5kX2xlYXZlKHN0cnVjdCBtY2FzdF9ncm91cCAqZ3JvdXAsIHU4IGxlYXZlX3N0YXRlKQoreworCXN0cnVjdCBtY2FzdF9wb3J0ICpwb3J0ID0gZ3JvdXAtPnBvcnQ7CisJc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyByZWM7CisJaW50IHJldDsKKworCXJlYyA9IGdyb3VwLT5yZWM7CisJcmVjLmpvaW5fc3RhdGUgPSBsZWF2ZV9zdGF0ZTsKKworCXJldCA9IGliX3NhX21jbWVtYmVyX3JlY19xdWVyeSgmc2FfY2xpZW50LCBwb3J0LT5kZXYtPmRldmljZSwKKwkJCQkgICAgICAgcG9ydC0+cG9ydF9udW0sIElCX1NBX01FVEhPRF9ERUxFVEUsICZyZWMsCisJCQkJICAgICAgIElCX1NBX01DTUVNQkVSX1JFQ19NR0lEICAgICB8CisJCQkJICAgICAgIElCX1NBX01DTUVNQkVSX1JFQ19QT1JUX0dJRCB8CisJCQkJICAgICAgIElCX1NBX01DTUVNQkVSX1JFQ19KT0lOX1NUQVRFLAorCQkJCSAgICAgICAzMDAwLCBHRlBfS0VSTkVMLCBsZWF2ZV9oYW5kbGVyLAorCQkJCSAgICAgICBncm91cCwgJmdyb3VwLT5xdWVyeSk7CisJaWYgKHJldCA+PSAwKSB7CisJCWdyb3VwLT5xdWVyeV9pZCA9IHJldDsKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgam9pbl9ncm91cChzdHJ1Y3QgbWNhc3RfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgbWNhc3RfbWVtYmVyICptZW1iZXIsCisJCSAgICAgICB1OCBqb2luX3N0YXRlKQoreworCW1lbWJlci0+c3RhdGUgPSBNQ0FTVF9NRU1CRVI7CisJYWRqdXN0X21lbWJlcnNoaXAoZ3JvdXAsIGpvaW5fc3RhdGUsIDEpOworCWdyb3VwLT5yZWMuam9pbl9zdGF0ZSB8PSBqb2luX3N0YXRlOworCW1lbWJlci0+bXVsdGljYXN0LnJlYyA9IGdyb3VwLT5yZWM7CisJbWVtYmVyLT5tdWx0aWNhc3QucmVjLmpvaW5fc3RhdGUgPSBqb2luX3N0YXRlOworCWxpc3RfbW92ZSgmbWVtYmVyLT5saXN0LCAmZ3JvdXAtPmFjdGl2ZV9saXN0KTsKK30KKworc3RhdGljIGludCBmYWlsX2pvaW4oc3RydWN0IG1jYXN0X2dyb3VwICpncm91cCwgc3RydWN0IG1jYXN0X21lbWJlciAqbWVtYmVyLAorCQkgICAgIGludCBzdGF0dXMpCit7CisJc3Bpbl9sb2NrX2lycSgmZ3JvdXAtPmxvY2spOworCWxpc3RfZGVsX2luaXQoJm1lbWJlci0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZncm91cC0+bG9jayk7CisJcmV0dXJuIG1lbWJlci0+bXVsdGljYXN0LmNhbGxiYWNrKHN0YXR1cywgJm1lbWJlci0+bXVsdGljYXN0KTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19ncm91cF9lcnJvcihzdHJ1Y3QgbWNhc3RfZ3JvdXAgKmdyb3VwKQoreworCXN0cnVjdCBtY2FzdF9tZW1iZXIgKm1lbWJlcjsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycSgmZ3JvdXAtPmxvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmZ3JvdXAtPmFjdGl2ZV9saXN0KSkgeworCQltZW1iZXIgPSBsaXN0X2VudHJ5KGdyb3VwLT5hY3RpdmVfbGlzdC5uZXh0LAorCQkJCSAgICBzdHJ1Y3QgbWNhc3RfbWVtYmVyLCBsaXN0KTsKKwkJYXRvbWljX2luYygmbWVtYmVyLT5yZWZjb3VudCk7CisJCWxpc3RfZGVsX2luaXQoJm1lbWJlci0+bGlzdCk7CisJCWFkanVzdF9tZW1iZXJzaGlwKGdyb3VwLCBtZW1iZXItPm11bHRpY2FzdC5yZWMuam9pbl9zdGF0ZSwgLTEpOworCQltZW1iZXItPnN0YXRlID0gTUNBU1RfRVJST1I7CisJCXNwaW5fdW5sb2NrX2lycSgmZ3JvdXAtPmxvY2spOworCisJCXJldCA9IG1lbWJlci0+bXVsdGljYXN0LmNhbGxiYWNrKC1FTkVUUkVTRVQsCisJCQkJCQkgJm1lbWJlci0+bXVsdGljYXN0KTsKKwkJZGVyZWZfbWVtYmVyKG1lbWJlcik7CisJCWlmIChyZXQpCisJCQlpYl9zYV9mcmVlX211bHRpY2FzdCgmbWVtYmVyLT5tdWx0aWNhc3QpOworCQlzcGluX2xvY2tfaXJxKCZncm91cC0+bG9jayk7CisJfQorCisJZ3JvdXAtPnJlYy5qb2luX3N0YXRlID0gMDsKKwlncm91cC0+c3RhdGUgPSBNQ0FTVF9CVVNZOworCXNwaW5fdW5sb2NrX2lycSgmZ3JvdXAtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBtY2FzdF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtY2FzdF9ncm91cCAqZ3JvdXA7CisJc3RydWN0IG1jYXN0X21lbWJlciAqbWVtYmVyOworCXN0cnVjdCBpYl9zYV9tdWx0aWNhc3QgKm11bHRpY2FzdDsKKwlpbnQgc3RhdHVzLCByZXQ7CisJdTggam9pbl9zdGF0ZTsKKworCWdyb3VwID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqZ3JvdXApLCB3b3JrKTsKK3JldGVzdDoKKwlzcGluX2xvY2tfaXJxKCZncm91cC0+bG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZncm91cC0+cGVuZGluZ19saXN0KSB8fAorCSAgICAgICAoZ3JvdXAtPnN0YXRlID09IE1DQVNUX0VSUk9SKSkgeworCisJCWlmIChncm91cC0+c3RhdGUgPT0gTUNBU1RfRVJST1IpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmZ3JvdXAtPmxvY2spOworCQkJcHJvY2Vzc19ncm91cF9lcnJvcihncm91cCk7CisJCQlnb3RvIHJldGVzdDsKKwkJfQorCisJCW1lbWJlciA9IGxpc3RfZW50cnkoZ3JvdXAtPnBlbmRpbmdfbGlzdC5uZXh0LAorCQkJCSAgICBzdHJ1Y3QgbWNhc3RfbWVtYmVyLCBsaXN0KTsKKwkJbXVsdGljYXN0ID0gJm1lbWJlci0+bXVsdGljYXN0OworCQlqb2luX3N0YXRlID0gbXVsdGljYXN0LT5yZWMuam9pbl9zdGF0ZTsKKwkJYXRvbWljX2luYygmbWVtYmVyLT5yZWZjb3VudCk7CisKKwkJaWYgKGpvaW5fc3RhdGUgPT0gKGdyb3VwLT5yZWMuam9pbl9zdGF0ZSAmIGpvaW5fc3RhdGUpKSB7CisJCQlzdGF0dXMgPSBjbXBfcmVjKCZncm91cC0+cmVjLCAmbXVsdGljYXN0LT5yZWMsCisJCQkJCSBtdWx0aWNhc3QtPmNvbXBfbWFzayk7CisJCQlpZiAoIXN0YXR1cykKKwkJCQlqb2luX2dyb3VwKGdyb3VwLCBtZW1iZXIsIGpvaW5fc3RhdGUpOworCQkJZWxzZQorCQkJCWxpc3RfZGVsX2luaXQoJm1lbWJlci0+bGlzdCk7CisJCQlzcGluX3VubG9ja19pcnEoJmdyb3VwLT5sb2NrKTsKKwkJCXJldCA9IG11bHRpY2FzdC0+Y2FsbGJhY2soc3RhdHVzLCBtdWx0aWNhc3QpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZncm91cC0+bG9jayk7CisJCQlzdGF0dXMgPSBzZW5kX2pvaW4oZ3JvdXAsIG1lbWJlcik7CisJCQlpZiAoIXN0YXR1cykgeworCQkJCWRlcmVmX21lbWJlcihtZW1iZXIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCXJldCA9IGZhaWxfam9pbihncm91cCwgbWVtYmVyLCBzdGF0dXMpOworCQl9CisKKwkJZGVyZWZfbWVtYmVyKG1lbWJlcik7CisJCWlmIChyZXQpCisJCQlpYl9zYV9mcmVlX211bHRpY2FzdCgmbWVtYmVyLT5tdWx0aWNhc3QpOworCQlzcGluX2xvY2tfaXJxKCZncm91cC0+bG9jayk7CisJfQorCisJam9pbl9zdGF0ZSA9IGdldF9sZWF2ZV9zdGF0ZShncm91cCk7CisJaWYgKGpvaW5fc3RhdGUpIHsKKwkJZ3JvdXAtPnJlYy5qb2luX3N0YXRlICY9IH5qb2luX3N0YXRlOworCQlzcGluX3VubG9ja19pcnEoJmdyb3VwLT5sb2NrKTsKKwkJaWYgKHNlbmRfbGVhdmUoZ3JvdXAsIGpvaW5fc3RhdGUpKQorCQkJZ290byByZXRlc3Q7CisJfSBlbHNlIHsKKwkJZ3JvdXAtPnN0YXRlID0gTUNBU1RfSURMRTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZncm91cC0+bG9jayk7CisJCXJlbGVhc2VfZ3JvdXAoZ3JvdXApOworCX0KK30KKworLyoKKyAqIEZhaWwgYSBqb2luIHJlcXVlc3QgaWYgaXQgaXMgc3RpbGwgYWN0aXZlIC0gYXQgdGhlIGhlYWQgb2YgdGhlIHBlbmRpbmcgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3Nfam9pbl9lcnJvcihzdHJ1Y3QgbWNhc3RfZ3JvdXAgKmdyb3VwLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBtY2FzdF9tZW1iZXIgKm1lbWJlcjsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycSgmZ3JvdXAtPmxvY2spOworCW1lbWJlciA9IGxpc3RfZW50cnkoZ3JvdXAtPnBlbmRpbmdfbGlzdC5uZXh0LAorCQkJICAgIHN0cnVjdCBtY2FzdF9tZW1iZXIsIGxpc3QpOworCWlmIChncm91cC0+bGFzdF9qb2luID09IG1lbWJlcikgeworCQlhdG9taWNfaW5jKCZtZW1iZXItPnJlZmNvdW50KTsKKwkJbGlzdF9kZWxfaW5pdCgmbWVtYmVyLT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZncm91cC0+bG9jayk7CisJCXJldCA9IG1lbWJlci0+bXVsdGljYXN0LmNhbGxiYWNrKHN0YXR1cywgJm1lbWJlci0+bXVsdGljYXN0KTsKKwkJZGVyZWZfbWVtYmVyKG1lbWJlcik7CisJCWlmIChyZXQpCisJCQlpYl9zYV9mcmVlX211bHRpY2FzdCgmbWVtYmVyLT5tdWx0aWNhc3QpOworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnEoJmdyb3VwLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgam9pbl9oYW5kbGVyKGludCBzdGF0dXMsIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlYywKKwkJCSB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBtY2FzdF9ncm91cCAqZ3JvdXAgPSBjb250ZXh0OworCisJaWYgKHN0YXR1cykKKwkJcHJvY2Vzc19qb2luX2Vycm9yKGdyb3VwLCBzdGF0dXMpOworCWVsc2UgeworCQlzcGluX2xvY2tfaXJxKCZncm91cC0+cG9ydC0+bG9jayk7CisJCWdyb3VwLT5yZWMgPSAqcmVjOworCQlpZiAoIW1lbWNtcCgmbWdpZDAsICZncm91cC0+cmVjLm1naWQsIHNpemVvZiBtZ2lkMCkpIHsKKwkJCXJiX2VyYXNlKCZncm91cC0+bm9kZSwgJmdyb3VwLT5wb3J0LT50YWJsZSk7CisJCQltY2FzdF9pbnNlcnQoZ3JvdXAtPnBvcnQsIGdyb3VwLCAxKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJmdyb3VwLT5wb3J0LT5sb2NrKTsKKwl9CisJbWNhc3Rfd29ya19oYW5kbGVyKCZncm91cC0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGxlYXZlX2hhbmRsZXIoaW50IHN0YXR1cywgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqcmVjLAorCQkJICB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBtY2FzdF9ncm91cCAqZ3JvdXAgPSBjb250ZXh0OworCisJbWNhc3Rfd29ya19oYW5kbGVyKCZncm91cC0+d29yayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWNhc3RfZ3JvdXAgKmFjcXVpcmVfZ3JvdXAoc3RydWN0IG1jYXN0X3BvcnQgKnBvcnQsCisJCQkJCSB1bmlvbiBpYl9naWQgKm1naWQsIGdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCBtY2FzdF9ncm91cCAqZ3JvdXAsICpjdXJfZ3JvdXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaXNfbWdpZDA7CisKKwlpc19tZ2lkMCA9ICFtZW1jbXAoJm1naWQwLCBtZ2lkLCBzaXplb2YgbWdpZDApOworCWlmICghaXNfbWdpZDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJZ3JvdXAgPSBtY2FzdF9maW5kKHBvcnQsIG1naWQpOworCQlpZiAoZ3JvdXApCisJCQlnb3RvIGZvdW5kOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJfQorCisJZ3JvdXAgPSBremFsbG9jKHNpemVvZiAqZ3JvdXAsIGdmcF9tYXNrKTsKKwlpZiAoIWdyb3VwKQorCQlyZXR1cm4gTlVMTDsKKworCWdyb3VwLT5wb3J0ID0gcG9ydDsKKwlncm91cC0+cmVjLm1naWQgPSAqbWdpZDsKKwlJTklUX0xJU1RfSEVBRCgmZ3JvdXAtPnBlbmRpbmdfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmdyb3VwLT5hY3RpdmVfbGlzdCk7CisJSU5JVF9XT1JLKCZncm91cC0+d29yaywgbWNhc3Rfd29ya19oYW5kbGVyKTsKKwlzcGluX2xvY2tfaW5pdCgmZ3JvdXAtPmxvY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwljdXJfZ3JvdXAgPSBtY2FzdF9pbnNlcnQocG9ydCwgZ3JvdXAsIGlzX21naWQwKTsKKwlpZiAoY3VyX2dyb3VwKSB7CisJCWtmcmVlKGdyb3VwKTsKKwkJZ3JvdXAgPSBjdXJfZ3JvdXA7CisJfSBlbHNlCisJCWF0b21pY19pbmMoJnBvcnQtPnJlZmNvdW50KTsKK2ZvdW5kOgorCWF0b21pY19pbmMoJmdyb3VwLT5yZWZjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBncm91cDsKK30KKworLyoKKyAqIFdlIHNlcmlhbGl6ZSBhbGwgam9pbiByZXF1ZXN0cyB0byBhIHNpbmdsZSBncm91cCB0byBtYWtlIG91ciBsaXZlcyBtdWNoCisgKiBlYXNpZXIuICBPdGhlcndpc2UsIHR3byB1c2VycyBjb3VsZCB0cnkgdG8gam9pbiB0aGUgc2FtZSBncm91cAorICogc2ltdWx0YW5lb3VzbHksIHdpdGggZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLCBvbmUgY291bGQgbGVhdmUgd2hpbGUgdGhlCisgKiBqb2luIGlzIGluIHByb2dyZXNzLCBldGMuLCB3aGljaCBtYWtlcyBsb2NraW5nIGFyb3VuZCBlcnJvciByZWNvdmVyeQorICogZGlmZmljdWx0LgorICovCitzdHJ1Y3QgaWJfc2FfbXVsdGljYXN0ICoKK2liX3NhX2pvaW5fbXVsdGljYXN0KHN0cnVjdCBpYl9zYV9jbGllbnQgKmNsaWVudCwKKwkJICAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAorCQkgICAgIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlYywKKwkJICAgICBpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrLCBnZnBfdCBnZnBfbWFzaywKKwkJICAgICBpbnQgKCpjYWxsYmFjaykoaW50IHN0YXR1cywKKwkJCQkgICAgIHN0cnVjdCBpYl9zYV9tdWx0aWNhc3QgKm11bHRpY2FzdCksCisJCSAgICAgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgbWNhc3RfZGV2aWNlICpkZXY7CisJc3RydWN0IG1jYXN0X21lbWJlciAqbWVtYmVyOworCXN0cnVjdCBpYl9zYV9tdWx0aWNhc3QgKm11bHRpY2FzdDsKKwlpbnQgcmV0OworCisJZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldmljZSwgJm1jYXN0X2NsaWVudCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCisJbWVtYmVyID0ga21hbGxvYyhzaXplb2YgKm1lbWJlciwgZ2ZwX21hc2spOworCWlmICghbWVtYmVyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWliX3NhX2NsaWVudF9nZXQoY2xpZW50KTsKKwltZW1iZXItPmNsaWVudCA9IGNsaWVudDsKKwltZW1iZXItPm11bHRpY2FzdC5yZWMgPSAqcmVjOworCW1lbWJlci0+bXVsdGljYXN0LmNvbXBfbWFzayA9IGNvbXBfbWFzazsKKwltZW1iZXItPm11bHRpY2FzdC5jYWxsYmFjayA9IGNhbGxiYWNrOworCW1lbWJlci0+bXVsdGljYXN0LmNvbnRleHQgPSBjb250ZXh0OworCWluaXRfY29tcGxldGlvbigmbWVtYmVyLT5jb21wKTsKKwlhdG9taWNfc2V0KCZtZW1iZXItPnJlZmNvdW50LCAxKTsKKwltZW1iZXItPnN0YXRlID0gTUNBU1RfSk9JTklORzsKKworCW1lbWJlci0+Z3JvdXAgPSBhY3F1aXJlX2dyb3VwKCZkZXYtPnBvcnRbcG9ydF9udW0gLSBkZXYtPnN0YXJ0X3BvcnRdLAorCQkJCSAgICAgICZyZWMtPm1naWQsIGdmcF9tYXNrKTsKKwlpZiAoIW1lbWJlci0+Z3JvdXApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJLyoKKwkgKiBUaGUgdXNlciB3aWxsIGdldCB0aGUgbXVsdGljYXN0IHN0cnVjdHVyZSBpbiB0aGVpciBjYWxsYmFjay4gIFRoZXkKKwkgKiBjb3VsZCB0aGVuIGZyZWUgdGhlIG11bHRpY2FzdCBzdHJ1Y3R1cmUgYmVmb3JlIHdlIGNhbiByZXR1cm4gZnJvbQorCSAqIHRoaXMgcm91dGluZS4gIFNvIHdlIHNhdmUgdGhlIHBvaW50ZXIgdG8gcmV0dXJuIGJlZm9yZSBxdWV1aW5nCisJICogYW55IGNhbGxiYWNrLgorCSAqLworCW11bHRpY2FzdCA9ICZtZW1iZXItPm11bHRpY2FzdDsKKwlxdWV1ZV9qb2luKG1lbWJlcik7CisJcmV0dXJuIG11bHRpY2FzdDsKKworZXJyOgorCWliX3NhX2NsaWVudF9wdXQoY2xpZW50KTsKKwlrZnJlZShtZW1iZXIpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9MKGliX3NhX2pvaW5fbXVsdGljYXN0KTsKKwordm9pZCBpYl9zYV9mcmVlX211bHRpY2FzdChzdHJ1Y3QgaWJfc2FfbXVsdGljYXN0ICptdWx0aWNhc3QpCit7CisJc3RydWN0IG1jYXN0X21lbWJlciAqbWVtYmVyOworCXN0cnVjdCBtY2FzdF9ncm91cCAqZ3JvdXA7CisKKwltZW1iZXIgPSBjb250YWluZXJfb2YobXVsdGljYXN0LCBzdHJ1Y3QgbWNhc3RfbWVtYmVyLCBtdWx0aWNhc3QpOworCWdyb3VwID0gbWVtYmVyLT5ncm91cDsKKworCXNwaW5fbG9ja19pcnEoJmdyb3VwLT5sb2NrKTsKKwlpZiAobWVtYmVyLT5zdGF0ZSA9PSBNQ0FTVF9NRU1CRVIpCisJCWFkanVzdF9tZW1iZXJzaGlwKGdyb3VwLCBtdWx0aWNhc3QtPnJlYy5qb2luX3N0YXRlLCAtMSk7CisKKwlsaXN0X2RlbF9pbml0KCZtZW1iZXItPmxpc3QpOworCisJaWYgKGdyb3VwLT5zdGF0ZSA9PSBNQ0FTVF9JRExFKSB7CisJCWdyb3VwLT5zdGF0ZSA9IE1DQVNUX0JVU1k7CisJCXNwaW5fdW5sb2NrX2lycSgmZ3JvdXAtPmxvY2spOworCQkvKiBDb250aW51ZSB0byBob2xkIHJlZmVyZW5jZSBvbiBncm91cCB1bnRpbCBjYWxsYmFjayAqLworCQlxdWV1ZV93b3JrKG1jYXN0X3dxLCAmZ3JvdXAtPndvcmspOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZ3JvdXAtPmxvY2spOworCQlyZWxlYXNlX2dyb3VwKGdyb3VwKTsKKwl9CisKKwlkZXJlZl9tZW1iZXIobWVtYmVyKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtZW1iZXItPmNvbXApOworCWliX3NhX2NsaWVudF9wdXQobWVtYmVyLT5jbGllbnQpOworCWtmcmVlKG1lbWJlcik7Cit9CitFWFBPUlRfU1lNQk9MKGliX3NhX2ZyZWVfbXVsdGljYXN0KTsKKworaW50IGliX3NhX2dldF9tY21lbWJlcl9yZWMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKKwkJCSAgIHVuaW9uIGliX2dpZCAqbWdpZCwgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqcmVjKQoreworCXN0cnVjdCBtY2FzdF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbWNhc3RfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgbWNhc3RfZ3JvdXAgKmdyb3VwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmbWNhc3RfY2xpZW50KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwb3J0ID0gJmRldi0+cG9ydFtwb3J0X251bSAtIGRldi0+c3RhcnRfcG9ydF07CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlncm91cCA9IG1jYXN0X2ZpbmQocG9ydCwgbWdpZCk7CisJaWYgKGdyb3VwKQorCQkqcmVjID0gZ3JvdXAtPnJlYzsKKwllbHNlCisJCXJldCA9IC1FQUREUk5PVEFWQUlMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGliX3NhX2dldF9tY21lbWJlcl9yZWMpOworCitpbnQgaWJfaW5pdF9haF9mcm9tX21jbWVtYmVyKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sCisJCQkgICAgIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlYywKKwkJCSAgICAgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpCit7CisJaW50IHJldDsKKwl1MTYgZ2lkX2luZGV4OworCXU4IHA7CisKKwlyZXQgPSBpYl9maW5kX2NhY2hlZF9naWQoZGV2aWNlLCAmcmVjLT5wb3J0X2dpZCwgJnAsICZnaWRfaW5kZXgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltZW1zZXQoYWhfYXR0ciwgMCwgc2l6ZW9mICphaF9hdHRyKTsKKwlhaF9hdHRyLT5kbGlkID0gYmUxNl90b19jcHUocmVjLT5tbGlkKTsKKwlhaF9hdHRyLT5zbCA9IHJlYy0+c2w7CisJYWhfYXR0ci0+cG9ydF9udW0gPSBwb3J0X251bTsKKwlhaF9hdHRyLT5zdGF0aWNfcmF0ZSA9IHJlYy0+cmF0ZTsKKworCWFoX2F0dHItPmFoX2ZsYWdzID0gSUJfQUhfR1JIOworCWFoX2F0dHItPmdyaC5kZ2lkID0gcmVjLT5tZ2lkOworCisJYWhfYXR0ci0+Z3JoLnNnaWRfaW5kZXggPSAodTgpIGdpZF9pbmRleDsKKwlhaF9hdHRyLT5ncmguZmxvd19sYWJlbCA9IGJlMzJfdG9fY3B1KHJlYy0+Zmxvd19sYWJlbCk7CisJYWhfYXR0ci0+Z3JoLmhvcF9saW1pdCA9IHJlYy0+aG9wX2xpbWl0OworCWFoX2F0dHItPmdyaC50cmFmZmljX2NsYXNzID0gcmVjLT50cmFmZmljX2NsYXNzOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGliX2luaXRfYWhfZnJvbV9tY21lbWJlcik7CisKK3N0YXRpYyB2b2lkIG1jYXN0X2dyb3Vwc19sb3N0KHN0cnVjdCBtY2FzdF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBtY2FzdF9ncm91cCAqZ3JvdXA7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJZm9yIChub2RlID0gcmJfZmlyc3QoJnBvcnQtPnRhYmxlKTsgbm9kZTsgbm9kZSA9IHJiX25leHQobm9kZSkpIHsKKwkJZ3JvdXAgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgbWNhc3RfZ3JvdXAsIG5vZGUpOworCQlzcGluX2xvY2soJmdyb3VwLT5sb2NrKTsKKwkJaWYgKGdyb3VwLT5zdGF0ZSA9PSBNQ0FTVF9JRExFKSB7CisJCQlhdG9taWNfaW5jKCZncm91cC0+cmVmY291bnQpOworCQkJcXVldWVfd29yayhtY2FzdF93cSwgJmdyb3VwLT53b3JrKTsKKwkJfQorCQlncm91cC0+c3RhdGUgPSBNQ0FTVF9FUlJPUjsKKwkJc3Bpbl91bmxvY2soJmdyb3VwLT5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtY2FzdF9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudF9oYW5kbGVyICpoYW5kbGVyLAorCQkJCXN0cnVjdCBpYl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IG1jYXN0X2RldmljZSAqZGV2OworCisJZGV2ID0gY29udGFpbmVyX29mKGhhbmRsZXIsIHN0cnVjdCBtY2FzdF9kZXZpY2UsIGV2ZW50X2hhbmRsZXIpOworCisJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKKwljYXNlIElCX0VWRU5UX1BPUlRfRVJSOgorCWNhc2UgSUJfRVZFTlRfTElEX0NIQU5HRToKKwljYXNlIElCX0VWRU5UX1NNX0NIQU5HRToKKwljYXNlIElCX0VWRU5UX0NMSUVOVF9SRVJFR0lTVEVSOgorCQltY2FzdF9ncm91cHNfbG9zdCgmZGV2LT5wb3J0W2V2ZW50LT5lbGVtZW50LnBvcnRfbnVtIC0KKwkJCQkJICAgICBkZXYtPnN0YXJ0X3BvcnRdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBtY2FzdF9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgbWNhc3RfZGV2aWNlICpkZXY7CisJc3RydWN0IG1jYXN0X3BvcnQgKnBvcnQ7CisJaW50IGk7CisKKwlpZiAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoZGV2aWNlLT5ub2RlX3R5cGUpICE9IFJETUFfVFJBTlNQT1JUX0lCKQorCQlyZXR1cm47CisKKwlkZXYgPSBrbWFsbG9jKHNpemVvZiAqZGV2ICsgZGV2aWNlLT5waHlzX3BvcnRfY250ICogc2l6ZW9mICpwb3J0LAorCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisJaWYgKGRldmljZS0+bm9kZV90eXBlID09IFJETUFfTk9ERV9JQl9TV0lUQ0gpCisJCWRldi0+c3RhcnRfcG9ydCA9IGRldi0+ZW5kX3BvcnQgPSAwOworCWVsc2UgeworCQlkZXYtPnN0YXJ0X3BvcnQgPSAxOworCQlkZXYtPmVuZF9wb3J0ID0gZGV2aWNlLT5waHlzX3BvcnRfY250OworCX0KKworCWZvciAoaSA9IDA7IGkgPD0gZGV2LT5lbmRfcG9ydCAtIGRldi0+c3RhcnRfcG9ydDsgaSsrKSB7CisJCXBvcnQgPSAmZGV2LT5wb3J0W2ldOworCQlwb3J0LT5kZXYgPSBkZXY7CisJCXBvcnQtPnBvcnRfbnVtID0gZGV2LT5zdGFydF9wb3J0ICsgaTsKKwkJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOworCQlwb3J0LT50YWJsZSA9IFJCX1JPT1Q7CisJCWluaXRfY29tcGxldGlvbigmcG9ydC0+Y29tcCk7CisJCWF0b21pY19zZXQoJnBvcnQtPnJlZmNvdW50LCAxKTsKKwl9CisKKwlkZXYtPmRldmljZSA9IGRldmljZTsKKwlpYl9zZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmbWNhc3RfY2xpZW50LCBkZXYpOworCisJSU5JVF9JQl9FVkVOVF9IQU5ETEVSKCZkZXYtPmV2ZW50X2hhbmRsZXIsIGRldmljZSwgbWNhc3RfZXZlbnRfaGFuZGxlcik7CisJaWJfcmVnaXN0ZXJfZXZlbnRfaGFuZGxlcigmZGV2LT5ldmVudF9oYW5kbGVyKTsKK30KKworc3RhdGljIHZvaWQgbWNhc3RfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IG1jYXN0X2RldmljZSAqZGV2OworCXN0cnVjdCBtY2FzdF9wb3J0ICpwb3J0OworCWludCBpOworCisJZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldmljZSwgJm1jYXN0X2NsaWVudCk7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWliX3VucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcigmZGV2LT5ldmVudF9oYW5kbGVyKTsKKwlmbHVzaF93b3JrcXVldWUobWNhc3Rfd3EpOworCisJZm9yIChpID0gMDsgaSA8PSBkZXYtPmVuZF9wb3J0IC0gZGV2LT5zdGFydF9wb3J0OyBpKyspIHsKKwkJcG9ydCA9ICZkZXYtPnBvcnRbaV07CisJCWRlcmVmX3BvcnQocG9ydCk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnBvcnQtPmNvbXApOworCX0KKworCWtmcmVlKGRldik7Cit9CisKK2ludCBtY2FzdF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCW1jYXN0X3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImliX21jYXN0Iik7CisJaWYgKCFtY2FzdF93cSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpYl9zYV9yZWdpc3Rlcl9jbGllbnQoJnNhX2NsaWVudCk7CisKKwlyZXQgPSBpYl9yZWdpc3Rlcl9jbGllbnQoJm1jYXN0X2NsaWVudCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisJcmV0dXJuIDA7CisKK2VycjoKKwlpYl9zYV91bnJlZ2lzdGVyX2NsaWVudCgmc2FfY2xpZW50KTsKKwlkZXN0cm95X3dvcmtxdWV1ZShtY2FzdF93cSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBtY2FzdF9jbGVhbnVwKHZvaWQpCit7CisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJm1jYXN0X2NsaWVudCk7CisJaWJfc2FfdW5yZWdpc3Rlcl9jbGllbnQoJnNhX2NsaWVudCk7CisJZGVzdHJveV93b3JrcXVldWUobWNhc3Rfd3EpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2EuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjOTNmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBWb2x0YWlyZSwgSW5jLsKgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBTQV9ICisjZGVmaW5lIFNBX0gKKworI2luY2x1ZGUgPHJkbWEvaWJfc2EuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGliX3NhX2NsaWVudF9nZXQoc3RydWN0IGliX3NhX2NsaWVudCAqY2xpZW50KQoreworCWF0b21pY19pbmMoJmNsaWVudC0+dXNlcnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaWJfc2FfY2xpZW50X3B1dChzdHJ1Y3QgaWJfc2FfY2xpZW50ICpjbGllbnQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNsaWVudC0+dXNlcnMpKQorCQljb21wbGV0ZSgmY2xpZW50LT5jb21wKTsKK30KKworaW50IGliX3NhX21jbWVtYmVyX3JlY19xdWVyeShzdHJ1Y3QgaWJfc2FfY2xpZW50ICpjbGllbnQsCisJCQkgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sCisJCQkgICAgIHU4IG1ldGhvZCwKKwkJCSAgICAgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqcmVjLAorCQkJICAgICBpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrLAorCQkJICAgICBpbnQgdGltZW91dF9tcywgZ2ZwX3QgZ2ZwX21hc2ssCisJCQkgICAgIHZvaWQgKCpjYWxsYmFjaykoaW50IHN0YXR1cywKKwkJCQkJICAgICAgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqcmVzcCwKKwkJCQkJICAgICAgdm9pZCAqY29udGV4dCksCisJCQkgICAgIHZvaWQgKmNvbnRleHQsCisJCQkgICAgIHN0cnVjdCBpYl9zYV9xdWVyeSAqKnNhX3F1ZXJ5KTsKKworaW50IG1jYXN0X2luaXQodm9pZCk7Cit2b2lkIG1jYXN0X2NsZWFudXAodm9pZCk7CisKKyNlbmRpZiAvKiBTQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwppbmRleCBlNDVhZmJhLi42OGRiNjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKQEAgLTQ3LDggKzQ3LDggQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPHJkbWEvaWJfcGFjay5oPgotI2luY2x1ZGUgPHJkbWEvaWJfc2EuaD4KICNpbmNsdWRlIDxyZG1hL2liX2NhY2hlLmg+CisjaW5jbHVkZSAic2EuaCIKIAogTU9EVUxFX0FVVEhPUigiUm9sYW5kIERyZWllciIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmZpbmlCYW5kIHN1Ym5ldCBhZG1pbmlzdHJhdGlvbiBxdWVyeSBzdXBwb3J0Iik7CkBAIC00MjUsMTcgKzQyNSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGliX3NhX3JlZ2lzdGVyX2NsaWVudCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpYl9zYV9jbGllbnRfZ2V0KHN0cnVjdCBpYl9zYV9jbGllbnQgKmNsaWVudCkKLXsKLQlhdG9taWNfaW5jKCZjbGllbnQtPnVzZXJzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGliX3NhX2NsaWVudF9wdXQoc3RydWN0IGliX3NhX2NsaWVudCAqY2xpZW50KQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjbGllbnQtPnVzZXJzKSkKLQkJY29tcGxldGUoJmNsaWVudC0+Y29tcCk7Ci19Ci0KIHZvaWQgaWJfc2FfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGliX3NhX2NsaWVudCAqY2xpZW50KQogewogCWliX3NhX2NsaWVudF9wdXQoY2xpZW50KTsKQEAgLTQ4Miw2ICs0NzEsNyBAQAogCWFoX2F0dHItPnNsID0gcmVjLT5zbDsKIAlhaF9hdHRyLT5zcmNfcGF0aF9iaXRzID0gYmUxNl90b19jcHUocmVjLT5zbGlkKSAmIDB4N2Y7CiAJYWhfYXR0ci0+cG9ydF9udW0gPSBwb3J0X251bTsKKwlhaF9hdHRyLT5zdGF0aWNfcmF0ZSA9IHJlYy0+cmF0ZTsKIAogCWlmIChyZWMtPmhvcF9saW1pdCA+IDEpIHsKIAkJYWhfYXR0ci0+YWhfZmxhZ3MgPSBJQl9BSF9HUkg7CkBAIC05MDEsNyArODkxLDYgQEAKIAlrZnJlZShxdWVyeSk7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woaWJfc2FfbWNtZW1iZXJfcmVjX3F1ZXJ5KTsKIAogc3RhdGljIHZvaWQgc2VuZF9oYW5kbGVyKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LAogCQkJIHN0cnVjdCBpYl9tYWRfc2VuZF93YyAqbWFkX3NlbmRfd2MpCkBAIC0xMDUzLDE0ICsxMDQyLDI3IEBACiAJZ2V0X3JhbmRvbV9ieXRlcygmdGlkLCBzaXplb2YgdGlkKTsKIAogCXJldCA9IGliX3JlZ2lzdGVyX2NsaWVudCgmc2FfY2xpZW50KTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCByZWdpc3RlciBpYl9zYSBjbGllbnRcbiIpOworCQlnb3RvIGVycjE7CisJfQogCisJcmV0ID0gbWNhc3RfaW5pdCgpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBpbml0aWFsaXplIG11bHRpY2FzdCBoYW5kbGluZ1xuIik7CisJCWdvdG8gZXJyMjsKKwl9CisKKwlyZXR1cm4gMDsKK2VycjI6CisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnNhX2NsaWVudCk7CitlcnIxOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpYl9zYV9jbGVhbnVwKHZvaWQpCiB7CisJbWNhc3RfY2xlYW51cCgpOwogCWliX3VucmVnaXN0ZXJfY2xpZW50KCZzYV9jbGllbnQpOwogCWlkcl9kZXN0cm95KCZxdWVyeV9pZHIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKaW5kZXggNzA5MzIzYy4uMDAwYzA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCkBAIC03MTQsOCArNzE0LDYgQEAKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyX3B1dDsKIAl9IGVsc2UgewotCQlpbnQgaTsKLQogCQlmb3IgKGkgPSAxOyBpIDw9IGRldmljZS0+cGh5c19wb3J0X2NudDsgKytpKSB7CiAJCQlyZXQgPSBhZGRfcG9ydChkZXZpY2UsIGkpOwogCQkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwppbmRleCA2YjgxYjk4Li5iNTE2YjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCkBAIC03MCwxMCArNzAsMjQgQEAKIAl1NjQJCQl1aWQ7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAltY19saXN0OworfTsKKworc3RydWN0IHVjbWFfbXVsdGljYXN0IHsKKwlzdHJ1Y3QgdWNtYV9jb250ZXh0CSpjdHg7CisJaW50CQkJaWQ7CisJaW50CQkJZXZlbnRzX3JlcG9ydGVkOworCisJdTY0CQkJdWlkOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3Qgc29ja2FkZHIJCWFkZHI7CisJdTgJCQlwYWRbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpIC0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcildOwogfTsKIAogc3RydWN0IHVjbWFfZXZlbnQgewogCXN0cnVjdCB1Y21hX2NvbnRleHQJKmN0eDsKKwlzdHJ1Y3QgdWNtYV9tdWx0aWNhc3QJKm1jOwogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlzdHJ1Y3QgcmRtYV9jbV9pZAkqY21faWQ7CiAJc3RydWN0IHJkbWFfdWNtX2V2ZW50X3Jlc3AgcmVzcDsKQEAgLTgxLDYgKzk1LDcgQEAKIAogc3RhdGljIERFRklORV9NVVRFWChtdXQpOwogc3RhdGljIERFRklORV9JRFIoY3R4X2lkcik7CitzdGF0aWMgREVGSU5FX0lEUihtdWx0aWNhc3RfaWRyKTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdWNtYV9jb250ZXh0ICpfdWNtYV9maW5kX2NvbnRleHQoaW50IGlkLAogCQkJCQkJICAgICAgc3RydWN0IHVjbWFfZmlsZSAqZmlsZSkKQEAgLTEyNCw2ICsxMzksNyBAQAogCiAJYXRvbWljX3NldCgmY3R4LT5yZWYsIDEpOwogCWluaXRfY29tcGxldGlvbigmY3R4LT5jb21wKTsKKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5tY19saXN0KTsKIAljdHgtPmZpbGUgPSBmaWxlOwogCiAJZG8gewpAQCAtMTQ3LDYgKzE2MywzNyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IHVjbWFfbXVsdGljYXN0KiB1Y21hX2FsbG9jX211bHRpY2FzdChzdHJ1Y3QgdWNtYV9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHVjbWFfbXVsdGljYXN0ICptYzsKKwlpbnQgcmV0OworCisJbWMgPSBremFsbG9jKHNpemVvZigqbWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jKQorCQlyZXR1cm4gTlVMTDsKKworCWRvIHsKKwkJcmV0ID0gaWRyX3ByZV9nZXQoJm11bHRpY2FzdF9pZHIsIEdGUF9LRVJORUwpOworCQlpZiAoIXJldCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJbXV0ZXhfbG9jaygmbXV0KTsKKwkJcmV0ID0gaWRyX2dldF9uZXcoJm11bHRpY2FzdF9pZHIsIG1jLCAmbWMtPmlkKTsKKwkJbXV0ZXhfdW5sb2NrKCZtdXQpOworCX0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTsKKworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwltYy0+Y3R4ID0gY3R4OworCWxpc3RfYWRkX3RhaWwoJm1jLT5saXN0LCAmY3R4LT5tY19saXN0KTsKKwlyZXR1cm4gbWM7CisKK2Vycm9yOgorCWtmcmVlKG1jKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgdWNtYV9jb3B5X2Nvbm5fZXZlbnQoc3RydWN0IHJkbWFfdWNtX2Nvbm5fcGFyYW0gKmRzdCwKIAkJCQkgc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqc3JjKQogewpAQCAtMTgwLDggKzIyNywxOSBAQAogCQkJCSAgIHN0cnVjdCB1Y21hX2V2ZW50ICp1ZXZlbnQpCiB7CiAJdWV2ZW50LT5jdHggPSBjdHg7Ci0JdWV2ZW50LT5yZXNwLnVpZCA9IGN0eC0+dWlkOwotCXVldmVudC0+cmVzcC5pZCA9IGN0eC0+aWQ7CisJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKKwljYXNlIFJETUFfQ01fRVZFTlRfTVVMVElDQVNUX0pPSU46CisJY2FzZSBSRE1BX0NNX0VWRU5UX01VTFRJQ0FTVF9FUlJPUjoKKwkJdWV2ZW50LT5tYyA9IChzdHJ1Y3QgdWNtYV9tdWx0aWNhc3QgKikKKwkJCSAgICAgZXZlbnQtPnBhcmFtLnVkLnByaXZhdGVfZGF0YTsKKwkJdWV2ZW50LT5yZXNwLnVpZCA9IHVldmVudC0+bWMtPnVpZDsKKwkJdWV2ZW50LT5yZXNwLmlkID0gdWV2ZW50LT5tYy0+aWQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVldmVudC0+cmVzcC51aWQgPSBjdHgtPnVpZDsKKwkJdWV2ZW50LT5yZXNwLmlkID0gY3R4LT5pZDsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgaW50IHVjbWFfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCkBAIC0xOTksNyArMjU3LDcgQEAKIAl1Y21hX3NldF9ldmVudF9jb250ZXh0KGN0eCwgZXZlbnQsIHVldmVudCk7CiAJdWV2ZW50LT5yZXNwLmV2ZW50ID0gZXZlbnQtPmV2ZW50OwogCXVldmVudC0+cmVzcC5zdGF0dXMgPSBldmVudC0+c3RhdHVzOwotCWlmIChjbV9pZC0+cHMgPT0gUkRNQV9QU19VRFApCisJaWYgKGNtX2lkLT5wcyA9PSBSRE1BX1BTX1VEUCB8fCBjbV9pZC0+cHMgPT0gUkRNQV9QU19JUE9JQikKIAkJdWNtYV9jb3B5X3VkX2V2ZW50KCZ1ZXZlbnQtPnJlc3AucGFyYW0udWQsICZldmVudC0+cGFyYW0udWQpOwogCWVsc2UKIAkJdWNtYV9jb3B5X2Nvbm5fZXZlbnQoJnVldmVudC0+cmVzcC5wYXJhbS5jb25uLApAQCAtMjkwLDYgKzM0OCw4IEBACiAKIAlsaXN0X2RlbCgmdWV2ZW50LT5saXN0KTsKIAl1ZXZlbnQtPmN0eC0+ZXZlbnRzX3JlcG9ydGVkKys7CisJaWYgKHVldmVudC0+bWMpCisJCXVldmVudC0+bWMtPmV2ZW50c19yZXBvcnRlZCsrOwogCWtmcmVlKHVldmVudCk7CiBkb25lOgogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0KTsKQEAgLTM0Miw2ICs0MDIsMTkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCB1Y21hX2NsZWFudXBfbXVsdGljYXN0KHN0cnVjdCB1Y21hX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgdWNtYV9tdWx0aWNhc3QgKm1jLCAqdG1wOworCisJbXV0ZXhfbG9jaygmbXV0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWMsIHRtcCwgJmN0eC0+bWNfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmbWMtPmxpc3QpOworCQlpZHJfcmVtb3ZlKCZtdWx0aWNhc3RfaWRyLCBtYy0+aWQpOworCQlrZnJlZShtYyk7CisJfQorCW11dGV4X3VubG9jaygmbXV0KTsKK30KKwogc3RhdGljIHZvaWQgdWNtYV9jbGVhbnVwX2V2ZW50cyhzdHJ1Y3QgdWNtYV9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IHVjbWFfZXZlbnQgKnVldmVudCwgKnRtcDsKQEAgLTM2MCw2ICs0MzMsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHVjbWFfY2xlYW51cF9tY19ldmVudHMoc3RydWN0IHVjbWFfbXVsdGljYXN0ICptYykKK3sKKwlzdHJ1Y3QgdWNtYV9ldmVudCAqdWV2ZW50LCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVldmVudCwgdG1wLCAmbWMtPmN0eC0+ZmlsZS0+ZXZlbnRfbGlzdCwgbGlzdCkgeworCQlpZiAodWV2ZW50LT5tYyAhPSBtYykKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZGVsKCZ1ZXZlbnQtPmxpc3QpOworCQlrZnJlZSh1ZXZlbnQpOworCX0KK30KKwogc3RhdGljIGludCB1Y21hX2ZyZWVfY3R4KHN0cnVjdCB1Y21hX2NvbnRleHQgKmN0eCkKIHsKIAlpbnQgZXZlbnRzX3JlcG9ydGVkOwpAQCAtMzY3LDYgKzQ1Myw4IEBACiAJLyogTm8gbmV3IGV2ZW50cyB3aWxsIGJlIGdlbmVyYXRlZCBhZnRlciBkZXN0cm95aW5nIHRoZSBpZC4gKi8KIAlyZG1hX2Rlc3Ryb3lfaWQoY3R4LT5jbV9pZCk7CiAKKwl1Y21hX2NsZWFudXBfbXVsdGljYXN0KGN0eCk7CisKIAkvKiBDbGVhbnVwIGV2ZW50cyBub3QgeWV0IHJlcG9ydGVkIHRvIHRoZSB1c2VyLiAqLwogCW11dGV4X2xvY2soJmN0eC0+ZmlsZS0+bXV0KTsKIAl1Y21hX2NsZWFudXBfZXZlbnRzKGN0eCk7CkBAIC03MzEsNiArODE5LDExNCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHVjbWFfam9pbl9tdWx0aWNhc3Qoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwKKwkJCQkgICBjb25zdCBjaGFyIF9fdXNlciAqaW5idWYsCisJCQkJICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IHJkbWFfdWNtX2pvaW5fbWNhc3QgY21kOworCXN0cnVjdCByZG1hX3VjbV9jcmVhdGVfaWRfcmVzcCByZXNwOworCXN0cnVjdCB1Y21hX2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgdWNtYV9tdWx0aWNhc3QgKm1jOworCWludCByZXQ7CisKKwlpZiAob3V0X2xlbiA8IHNpemVvZihyZXNwKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgaW5idWYsIHNpemVvZihjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwljdHggPSB1Y21hX2dldF9jdHgoZmlsZSwgY21kLmlkKTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwltdXRleF9sb2NrKCZmaWxlLT5tdXQpOworCW1jID0gdWNtYV9hbGxvY19tdWx0aWNhc3QoY3R4KTsKKwlpZiAoSVNfRVJSKG1jKSkgeworCQlyZXQgPSBQVFJfRVJSKG1jKTsKKwkJZ290byBlcnIxOworCX0KKworCW1jLT51aWQgPSBjbWQudWlkOworCW1lbWNweSgmbWMtPmFkZHIsICZjbWQuYWRkciwgc2l6ZW9mIGNtZC5hZGRyKTsKKwlyZXQgPSByZG1hX2pvaW5fbXVsdGljYXN0KGN0eC0+Y21faWQsICZtYy0+YWRkciwgbWMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCXJlc3AuaWQgPSBtYy0+aWQ7CisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljbWQucmVzcG9uc2UsCisJCQkgJnJlc3AsIHNpemVvZihyZXNwKSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBlcnIzOworCX0KKworCW11dGV4X3VubG9jaygmZmlsZS0+bXV0KTsKKwl1Y21hX3B1dF9jdHgoY3R4KTsKKwlyZXR1cm4gMDsKKworZXJyMzoKKwlyZG1hX2xlYXZlX211bHRpY2FzdChjdHgtPmNtX2lkLCAmbWMtPmFkZHIpOworCXVjbWFfY2xlYW51cF9tY19ldmVudHMobWMpOworZXJyMjoKKwltdXRleF9sb2NrKCZtdXQpOworCWlkcl9yZW1vdmUoJm11bHRpY2FzdF9pZHIsIG1jLT5pZCk7CisJbXV0ZXhfdW5sb2NrKCZtdXQpOworCWxpc3RfZGVsKCZtYy0+bGlzdCk7CisJa2ZyZWUobWMpOworZXJyMToKKwltdXRleF91bmxvY2soJmZpbGUtPm11dCk7CisJdWNtYV9wdXRfY3R4KGN0eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9sZWF2ZV9tdWx0aWNhc3Qoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwKKwkJCQkgICAgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAorCQkJCSAgICBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgcmRtYV91Y21fZGVzdHJveV9pZCBjbWQ7CisJc3RydWN0IHJkbWFfdWNtX2Rlc3Ryb3lfaWRfcmVzcCByZXNwOworCXN0cnVjdCB1Y21hX211bHRpY2FzdCAqbWM7CisJaW50IHJldCA9IDA7CisKKwlpZiAob3V0X2xlbiA8IHNpemVvZihyZXNwKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgaW5idWYsIHNpemVvZihjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltdXRleF9sb2NrKCZtdXQpOworCW1jID0gaWRyX2ZpbmQoJm11bHRpY2FzdF9pZHIsIGNtZC5pZCk7CisJaWYgKCFtYykKKwkJbWMgPSBFUlJfUFRSKC1FTk9FTlQpOworCWVsc2UgaWYgKG1jLT5jdHgtPmZpbGUgIT0gZmlsZSkKKwkJbWMgPSBFUlJfUFRSKC1FSU5WQUwpOworCWVsc2UgeworCQlpZHJfcmVtb3ZlKCZtdWx0aWNhc3RfaWRyLCBtYy0+aWQpOworCQlhdG9taWNfaW5jKCZtYy0+Y3R4LT5yZWYpOworCX0KKwltdXRleF91bmxvY2soJm11dCk7CisKKwlpZiAoSVNfRVJSKG1jKSkgeworCQlyZXQgPSBQVFJfRVJSKG1jKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRtYV9sZWF2ZV9tdWx0aWNhc3QobWMtPmN0eC0+Y21faWQsICZtYy0+YWRkcik7CisJbXV0ZXhfbG9jaygmbWMtPmN0eC0+ZmlsZS0+bXV0KTsKKwl1Y21hX2NsZWFudXBfbWNfZXZlbnRzKG1jKTsKKwlsaXN0X2RlbCgmbWMtPmxpc3QpOworCW11dGV4X3VubG9jaygmbWMtPmN0eC0+ZmlsZS0+bXV0KTsKKworCXVjbWFfcHV0X2N0eChtYy0+Y3R4KTsKKwlyZXNwLmV2ZW50c19yZXBvcnRlZCA9IG1jLT5ldmVudHNfcmVwb3J0ZWQ7CisJa2ZyZWUobWMpOworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljbWQucmVzcG9uc2UsCisJCQkgJnJlc3AsIHNpemVvZihyZXNwKSkpCisJCXJldCA9IC1FRkFVTFQ7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHNzaXplX3QgKCp1Y21hX2NtZF90YWJsZVtdKShzdHJ1Y3QgdWNtYV9maWxlICpmaWxlLAogCQkJCSAgIGNvbnN0IGNoYXIgX191c2VyICppbmJ1ZiwKIAkJCQkgICBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikgPSB7CkBAIC03NTAsNiArOTQ2LDggQEAKIAlbUkRNQV9VU0VSX0NNX0NNRF9HRVRfT1BUSU9OXQk9IE5VTEwsCiAJW1JETUFfVVNFUl9DTV9DTURfU0VUX09QVElPTl0JPSBOVUxMLAogCVtSRE1BX1VTRVJfQ01fQ01EX05PVElGWV0JPSB1Y21hX25vdGlmeSwKKwlbUkRNQV9VU0VSX0NNX0NNRF9KT0lOX01DQVNUXQk9IHVjbWFfam9pbl9tdWx0aWNhc3QsCisJW1JETUFfVVNFUl9DTV9DTURfTEVBVkVfTUNBU1RdCT0gdWNtYV9sZWF2ZV9tdWx0aWNhc3QsCiB9OwogCiBzdGF0aWMgc3NpemVfdCB1Y21hX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fZGJnLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19kYmcuYwppbmRleCA1YTczMDZmLi43NWY3YjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19kYmcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19kYmcuYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA2IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYwppbmRleCA4MmZhNzIwLi4xMTRhYzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA2IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaAppbmRleCAxYjk3ZTgwLi44YWIwNGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaApAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA2IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fcmVzb3VyY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3Jlc291cmNlLmMKaW5kZXggOTk3YWEzMi4uNjViZjU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19yZXNvdXJjZS5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNiBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19yZXNvdXJjZS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fcmVzb3VyY2UuaAppbmRleCBhNmJiZTgzLi5hMjcwM2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19yZXNvdXJjZS5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3Jlc291cmNlLmgKQEAgLTEsNiArMSw1IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA2IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCmluZGV4IDEwM2ZjNDIuLjkwZDdiODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaApAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA2IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMKaW5kZXggNDYxMWFmYS4uMDMxNWM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNiBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guaAppbmRleCA2NTE3ZWY4Li5jYWY0ZTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmgKQEAgLTEsNiArMSw1IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA2IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCmluZGV4IGE1MjJiMWIuLmU1NDQyZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA2IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmgKaW5kZXggN2M4MTBkOS4uMGM2ZjI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNiBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY3EuYwppbmRleCA5OGIzYmRiLi5kNzYyNGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NxLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA2IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2V2LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jCmluZGV4IGE2ZWZhOGZlLi41NDM2MmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2V2LmMKQEAgLTEsNiArMSw1IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA2IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX21lbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfbWVtLmMKaW5kZXggMmI2Y2Q1My4uYTZjMmM0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfbWVtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfbWVtLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA2IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCmluZGV4IDY4NjEwODcuLjJhZWYxMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA2IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmgKaW5kZXggNjFlMzI3OC4uMmFmM2U5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNiBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwppbmRleCBlMDY2NzI3Li40ZGRhMmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA2IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTg0Niw2ICs4NDUsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgSVdDSF9RUF9TVEFURV9URVJNSU5BVEU6CiAJCQlxaHAtPmF0dHIuc3RhdGUgPSBJV0NIX1FQX1NUQVRFX1RFUk1JTkFURTsKKwkJCWlmICh0M2JfZGV2aWNlKHFocC0+cmhwKSkKKwkJCQljeGlvX3NldF93cV9pbl9lcnJvcigmcWhwLT53cSk7CiAJCQlpZiAoIWludGVybmFsKQogCQkJCXRlcm1pbmF0ZSA9IDE7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3VzZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3VzZXIuaAppbmRleCBjNGU3ZmJlLi5jYjcwODZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF91c2VyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfdXNlci5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNiBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9LY29uZmlnIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvS2NvbmZpZwppbmRleCA3MjdiMTBkLi4xYTg1NDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL0tjb25maWcKQEAgLTcsMTEgKzcsMyBAQAogCVRvIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQogCXdpbGwgYmUgY2FsbGVkIGliX2VoY2EuCiAKLWNvbmZpZyBJTkZJTklCQU5EX0VIQ0FfU0NBTElORwotCWJvb2wgIlNjYWxpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIElCTUVCVVMgJiYgSU5GSU5JQkFORF9FSENBICYmIEhPVFBMVUdfQ1BVICYmIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQllSENBIHNjYWxpbmcgc3VwcG9ydCBzY2hlZHVsZXMgdGhlIENRIGNhbGxiYWNrcyB0byBkaWZmZXJlbnQgQ1BVcy4KLQotCVRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hvb3NlIFkgaGVyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfY2xhc3Nlcy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmgKaW5kZXggY2Y5NWVlNC4uNDA0MDRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmgKQEAgLTQyLDggKzQyLDYgQEAKICNpZm5kZWYgX19FSENBX0NMQVNTRVNfSF9fCiAjZGVmaW5lIF9fRUhDQV9DTEFTU0VTX0hfXwogCi0jaW5jbHVkZSAiZWhjYV9jbGFzc2VzLmgiCi0jaW5jbHVkZSAiaXB6X3B0X2ZuLmgiCiAKIHN0cnVjdCBlaGNhX21vZHVsZTsKIHN0cnVjdCBlaGNhX3FwOwpAQCAtNTQsMTUgKzUyLDIzIEBACiBzdHJ1Y3QgZWhjYV9wZDsKIHN0cnVjdCBlaGNhX2F2OwogCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0jaW5jbHVkZSAiZWhjYV9jbGFzc2VzX3BTZXJpZXMuaCIKLSNlbmRpZgotCiAjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgogI2luY2x1ZGUgPHJkbWEvaWJfdXNlcl92ZXJicy5oPgogCisjaWZkZWYgQ09ORklHX1BQQzY0CisjaW5jbHVkZSAiZWhjYV9jbGFzc2VzX3BTZXJpZXMuaCIKKyNlbmRpZgorI2luY2x1ZGUgImlwel9wdF9mbi5oIgorI2luY2x1ZGUgImVoY2FfcWVzLmgiCiAjaW5jbHVkZSAiZWhjYV9pcnEuaCIKIAorI2RlZmluZSBFSENBX0VRRV9DQUNIRV9TSVpFIDIwCisKK3N0cnVjdCBlaGNhX2VxZV9jYWNoZV9lbnRyeSB7CisJc3RydWN0IGVoY2FfZXFlICplcWU7CisJc3RydWN0IGVoY2FfY3EgKmNxOworfTsKKwogc3RydWN0IGVoY2FfZXEgewogCXUzMiBsZW5ndGg7CiAJc3RydWN0IGlwel9xdWV1ZSBpcHpfcXVldWU7CkBAIC03NCw2ICs4MCw4IEBACiAJc3BpbmxvY2tfdCBzcGlubG9jazsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaW50ZXJydXB0X3Rhc2s7CiAJdTMyIGlzdDsKKwlzcGlubG9ja190IGlycV9zcGlubG9jazsKKwlzdHJ1Y3QgZWhjYV9lcWVfY2FjaGVfZW50cnkgZXFlX2NhY2hlW0VIQ0FfRVFFX0NBQ0hFX1NJWkVdOwogfTsKIAogc3RydWN0IGVoY2Ffc3BvcnQgewpAQCAtMjY5LDYgKzI3Nyw3IEBACiBleHRlcm4gaW50IGVoY2Ffc3RhdGljX3JhdGU7CiBleHRlcm4gaW50IGVoY2FfcG9ydF9hY3RfdGltZTsKIGV4dGVybiBpbnQgZWhjYV91c2VfaHBfbXI7CitleHRlcm4gaW50IGVoY2Ffc2NhbGluZ19jb2RlOwogCiBzdHJ1Y3QgaXB6dV9xdWV1ZV9yZXNwIHsKIAl1MzIgcWVfc2l6ZTsgICAgICAvKiBxdWV1ZSBlbnRyeSBzaXplICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2VxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2VxLmMKaW5kZXggMjRjZWFiMC4uNDk2MWViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9lcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfZXEuYwpAQCAtNjEsNiArNjEsNyBAQAogCXN0cnVjdCBpYl9kZXZpY2UgKmliX2RldiA9ICZzaGNhLT5pYl9kZXZpY2U7CiAKIAlzcGluX2xvY2tfaW5pdCgmZXEtPnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZXEtPmlycV9zcGlubG9jayk7CiAJZXEtPmlzX2luaXRpYWxpemVkID0gMDsKIAogCWlmICh0eXBlICE9IEVIQ0FfRVEgJiYgdHlwZSAhPSBFSENBX05FUSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9oY2EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaGNhLmMKaW5kZXggYjdiZTk1MC4uMzBlYjQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9oY2EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2hjYS5jCkBAIC0xNjIsNiArMTYyLDkgQEAKIAlwcm9wcy0+YWN0aXZlX3dpZHRoICAgID0gSUJfV0lEVEhfMTJYOwogCXByb3BzLT5hY3RpdmVfc3BlZWQgICAgPSAweDE7CiAKKwkvKiBhdCB0aGUgbW9tZW50IChsb2dpY2FsKSBsaW5rIHN0YXRlIGlzIGFsd2F5cyBMSU5LX1VQICovCisJcHJvcHMtPnBoeXNfc3RhdGUgICAgICA9IDB4NTsKKwogcXVlcnlfcG9ydDE6CiAJZWhjYV9mcmVlX2Z3X2N0cmxibG9jayhyYmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYwppbmRleCA2YzRmOWY5Li4zZWM1M2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmMKQEAgLTYzLDE1ICs2MywxMSBAQAogI2RlZmluZSBFUlJPUl9EQVRBX0xFTkdUSCAgICAgIEVIQ0FfQk1BU0tfSUJNKDUyLDYzKQogI2RlZmluZSBFUlJPUl9EQVRBX1RZUEUgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDAsNykKIAotI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0VIQ0FfU0NBTElORwotCiBzdGF0aWMgdm9pZCBxdWV1ZV9jb21wX3Rhc2soc3RydWN0IGVoY2FfY3EgKl9fY3EpOwogCiBzdGF0aWMgc3RydWN0IGVoY2FfY29tcF9wb29sKiBwb29sOwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjb21wX3Bvb2xfY2FsbGJhY2tfbmI7CiAKLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIHZvaWQgY29tcF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgZWhjYV9jcSAqY3EpCiB7CiAJaWYgKCFjcS0+aWJfY3EuY29tcF9oYW5kbGVyKQpAQCAtMjA2LDcgKzIwMiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNxX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EsCi0JCQkJCSAgdTY0IGVxZSkKKwkJCSAgICAgIHU2NCBlcWUpCiB7CiAJc3RydWN0IGVoY2FfY3EgKmNxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMTgsNyArMzE0LDcgQEAKIAkJCSAgImRpc3J1cHRpdmUgcG9ydCAleCBjb25maWd1cmF0aW9uIGNoYW5nZSIsIHBvcnQpOwogCiAJCWVoY2FfaW5mbygmc2hjYS0+aWJfZGV2aWNlLAotCQkJICJwb3J0ICV4IGlzIGluYWN0aXZlLiIsIHBvcnQpOworCQkJICAicG9ydCAleCBpcyBpbmFjdGl2ZS4iLCBwb3J0KTsKIAkJZXZlbnQuZGV2aWNlID0gJnNoY2EtPmliX2RldmljZTsKIAkJZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9QT1JUX0VSUjsKIAkJZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IHBvcnQ7CkBAIC0zMjYsNyArMzIyLDcgQEAKIAkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKIAogCQllaGNhX2luZm8oJnNoY2EtPmliX2RldmljZSwKLQkJCSAicG9ydCAleCBpcyBhY3RpdmUuIiwgcG9ydCk7CisJCQkgICJwb3J0ICV4IGlzIGFjdGl2ZS4iLCBwb3J0KTsKIAkJZXZlbnQuZGV2aWNlID0gJnNoY2EtPmliX2RldmljZTsKIAkJZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9QT1JUX0FDVElWRTsKIAkJZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IHBvcnQ7CkBAIC00MDEsMTE1ICszOTcsMTcwIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi12b2lkIGVoY2FfdGFza2xldF9lcSh1bnNpZ25lZCBsb25nIGRhdGEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX2VxZShzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLCBzdHJ1Y3QgZWhjYV9lcWUgKmVxZSkKIHsKLQlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gKHN0cnVjdCBlaGNhX3NoY2EqKWRhdGE7Ci0Jc3RydWN0IGVoY2FfZXFlICplcWU7Ci0JaW50IGludF9zdGF0ZTsKLQlpbnQgcXVlcnlfY250ID0gMDsKLQotCWRvIHsKLQkJZXFlID0gKHN0cnVjdCBlaGNhX2VxZSAqKWVoY2FfcG9sbF9lcShzaGNhLCAmc2hjYS0+ZXEpOwotCi0JCWlmICgoc2hjYS0+aHdfbGV2ZWwgPj0gMikgJiYgZXFlKQotCQkJaW50X3N0YXRlID0gMTsKLQkJZWxzZQotCQkJaW50X3N0YXRlID0gMDsKLQotCQl3aGlsZSAoKGludF9zdGF0ZSA9PSAxKSB8fCBlcWUpIHsKLQkJCXdoaWxlIChlcWUpIHsKLQkJCQl1NjQgZXFlX3ZhbHVlID0gZXFlLT5lbnRyeTsKLQotCQkJCWVoY2FfZGJnKCZzaGNhLT5pYl9kZXZpY2UsCi0JCQkJCSAiZXFlX3ZhbHVlPSVseCIsIGVxZV92YWx1ZSk7Ci0KLQkJCQkvKiBUT0RPOiBiZXR0ZXIgc3RydWN0dXJlICovCi0JCQkJaWYgKEVIQ0FfQk1BU0tfR0VUKEVRRV9DT01QTEVUSU9OX0VWRU5ULAotCQkJCQkJICAgZXFlX3ZhbHVlKSkgewotCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQkJCQl1MzIgdG9rZW47Ci0JCQkJCXN0cnVjdCBlaGNhX2NxICpjcTsKLQotCQkJCQllaGNhX2RiZygmc2hjYS0+aWJfZGV2aWNlLAotCQkJCQkJICIuLi4gY29tcGxldGlvbiBldmVudCIpOwotCQkJCQl0b2tlbiA9Ci0JCQkJCQlFSENBX0JNQVNLX0dFVChFUUVfQ1FfVE9LRU4sCi0JCQkJCQkJICAgICAgIGVxZV92YWx1ZSk7Ci0JCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNhX2NxX2lkcl9sb2NrLAotCQkJCQkJCSAgZmxhZ3MpOwotCQkJCQljcSA9IGlkcl9maW5kKCZlaGNhX2NxX2lkciwgdG9rZW4pOwotCi0JCQkJCWlmIChjcSA9PSBOVUxMKSB7Ci0JCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNhX2NxX2lkcl9sb2NrLAotCQkJCQkJCQkgICAgICAgZmxhZ3MpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQotCQkJCQlyZXNldF9lcV9wZW5kaW5nKGNxKTsKLSNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9FSENBX1NDQUxJTkcKLQkJCQkJcXVldWVfY29tcF90YXNrKGNxKTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9jcV9pZHJfbG9jaywKLQkJCQkJCQkgICAgICAgZmxhZ3MpOwotI2Vsc2UKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9jcV9pZHJfbG9jaywKLQkJCQkJCQkgICAgICAgZmxhZ3MpOwotCQkJCQljb21wX2V2ZW50X2NhbGxiYWNrKGNxKTsKLSNlbmRpZgotCQkJCX0gZWxzZSB7Ci0JCQkJCWVoY2FfZGJnKCZzaGNhLT5pYl9kZXZpY2UsCi0JCQkJCQkgIi4uLiBub24gY29tcGxldGlvbiBldmVudCIpOwotCQkJCQlwYXJzZV9pZGVudGlmaWVyKHNoY2EsIGVxZV92YWx1ZSk7Ci0JCQkJfQotCQkJCWVxZSA9Ci0JCQkJCShzdHJ1Y3QgZWhjYV9lcWUgKillaGNhX3BvbGxfZXEoc2hjYSwKLQkJCQkJCQkJICAgICZzaGNhLT5lcSk7Ci0JCQl9Ci0KLQkJCWlmIChzaGNhLT5od19sZXZlbCA+PSAyKSB7Ci0JCQkJaW50X3N0YXRlID0KLQkJCQkgICAgaGlwel9oX3F1ZXJ5X2ludF9zdGF0ZShzaGNhLT5pcHpfaGNhX2hhbmRsZSwKLQkJCQkJCQkgICBzaGNhLT5lcS5pc3QpOwotCQkJCXF1ZXJ5X2NudCsrOwotCQkJCWlvc3luYygpOwotCQkJCWlmIChxdWVyeV9jbnQgPj0gMTAwKSB7Ci0JCQkJCXF1ZXJ5X2NudCA9IDA7Ci0JCQkJCWludF9zdGF0ZSA9IDA7Ci0JCQkJfQotCQkJfQotCQkJZXFlID0gKHN0cnVjdCBlaGNhX2VxZSAqKWVoY2FfcG9sbF9lcShzaGNhLCAmc2hjYS0+ZXEpOwotCisJdTY0IGVxZV92YWx1ZTsKKwl1MzIgdG9rZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZWhjYV9jcSAqY3E7CisJZXFlX3ZhbHVlID0gZXFlLT5lbnRyeTsKKwllaGNhX2RiZygmc2hjYS0+aWJfZGV2aWNlLCAiZXFlX3ZhbHVlPSVseCIsIGVxZV92YWx1ZSk7CisJaWYgKEVIQ0FfQk1BU0tfR0VUKEVRRV9DT01QTEVUSU9OX0VWRU5ULCBlcWVfdmFsdWUpKSB7CisJCWVoY2FfZGJnKCZzaGNhLT5pYl9kZXZpY2UsICIuLi4gY29tcGxldGlvbiBldmVudCIpOworCQl0b2tlbiA9IEVIQ0FfQk1BU0tfR0VUKEVRRV9DUV9UT0tFTiwgZXFlX3ZhbHVlKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmVoY2FfY3FfaWRyX2xvY2ssIGZsYWdzKTsKKwkJY3EgPSBpZHJfZmluZCgmZWhjYV9jcV9pZHIsIHRva2VuKTsKKwkJaWYgKGNxID09IE5VTEwpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoY2FfY3FfaWRyX2xvY2ssIGZsYWdzKTsKKwkJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsCisJCQkJICJJbnZhbGlkIGVxZSBmb3Igbm9uLWV4aXN0aW5nIGNxIHRva2VuPSV4IiwKKwkJCQkgdG9rZW4pOworCQkJcmV0dXJuOwogCQl9Ci0JfSB3aGlsZSAoaW50X3N0YXRlICE9IDApOwotCi0JcmV0dXJuOworCQlyZXNldF9lcV9wZW5kaW5nKGNxKTsKKwkJaWYgKGVoY2Ffc2NhbGluZ19jb2RlKSB7CisJCQlxdWV1ZV9jb21wX3Rhc2soY3EpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9jcV9pZHJfbG9jaywgZmxhZ3MpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9jcV9pZHJfbG9jaywgZmxhZ3MpOworCQkJY29tcF9ldmVudF9jYWxsYmFjayhjcSk7CisJCX0KKwl9IGVsc2UgeworCQllaGNhX2RiZygmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJHb3Qgbm9uIGNvbXBsZXRpb24gZXZlbnQiKTsKKwkJcGFyc2VfaWRlbnRpZmllcihzaGNhLCBlcWVfdmFsdWUpOworCX0KIH0KIAotI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0VIQ0FfU0NBTElORwordm9pZCBlaGNhX3Byb2Nlc3NfZXEoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwgaW50IGlzX2lycSkKK3sKKwlzdHJ1Y3QgZWhjYV9lcSAqZXEgPSAmc2hjYS0+ZXE7CisJc3RydWN0IGVoY2FfZXFlX2NhY2hlX2VudHJ5ICplcWVfY2FjaGUgPSBlcS0+ZXFlX2NhY2hlOworCXU2NCBlcWVfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXFlX2NudCwgaTsKKwlpbnQgZXFfZW1wdHkgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVxLT5pcnFfc3BpbmxvY2ssIGZsYWdzKTsKKwlpZiAoaXNfaXJxKSB7CisJCWNvbnN0IGludCBtYXhfcXVlcnlfY250ID0gMTAwOworCQlpbnQgcXVlcnlfY250ID0gMDsKKwkJaW50IGludF9zdGF0ZSA9IDE7CisJCWRvIHsKKwkJCWludF9zdGF0ZSA9IGhpcHpfaF9xdWVyeV9pbnRfc3RhdGUoCisJCQkJc2hjYS0+aXB6X2hjYV9oYW5kbGUsIGVxLT5pc3QpOworCQkJcXVlcnlfY250Kys7CisJCQlpb3N5bmMoKTsKKwkJfSB3aGlsZSAoaW50X3N0YXRlICYmIHF1ZXJ5X2NudCA8IG1heF9xdWVyeV9jbnQpOworCQlpZiAodW5saWtlbHkoKHF1ZXJ5X2NudCA9PSBtYXhfcXVlcnlfY250KSkpCisJCQllaGNhX2RiZygmc2hjYS0+aWJfZGV2aWNlLCAiaW50X3N0YXRlPSV4IHF1ZXJ5X2NudD0leCIsCisJCQkJIGludF9zdGF0ZSwgcXVlcnlfY250KTsKKwl9CisKKwkvKiByZWFkIG91dCBhbGwgZXFlcyAqLworCWVxZV9jbnQgPSAwOworCWRvIHsKKwkJdTMyIHRva2VuOworCQllcWVfY2FjaGVbZXFlX2NudF0uZXFlID0KKwkJCShzdHJ1Y3QgZWhjYV9lcWUgKillaGNhX3BvbGxfZXEoc2hjYSwgZXEpOworCQlpZiAoIWVxZV9jYWNoZVtlcWVfY250XS5lcWUpCisJCQlicmVhazsKKwkJZXFlX3ZhbHVlID0gZXFlX2NhY2hlW2VxZV9jbnRdLmVxZS0+ZW50cnk7CisJCWlmIChFSENBX0JNQVNLX0dFVChFUUVfQ09NUExFVElPTl9FVkVOVCwgZXFlX3ZhbHVlKSkgeworCQkJdG9rZW4gPSBFSENBX0JNQVNLX0dFVChFUUVfQ1FfVE9LRU4sIGVxZV92YWx1ZSk7CisJCQlzcGluX2xvY2soJmVoY2FfY3FfaWRyX2xvY2spOworCQkJZXFlX2NhY2hlW2VxZV9jbnRdLmNxID0gaWRyX2ZpbmQoJmVoY2FfY3FfaWRyLCB0b2tlbik7CisJCQlpZiAoIWVxZV9jYWNoZVtlcWVfY250XS5jcSkgeworCQkJCXNwaW5fdW5sb2NrKCZlaGNhX2NxX2lkcl9sb2NrKTsKKwkJCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJCQkgIkludmFsaWQgZXFlIGZvciBub24tZXhpc3RpbmcgY3EgIgorCQkJCQkgInRva2VuPSV4IiwgdG9rZW4pOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3Bpbl91bmxvY2soJmVoY2FfY3FfaWRyX2xvY2spOworCQl9IGVsc2UKKwkJCWVxZV9jYWNoZVtlcWVfY250XS5jcSA9IE5VTEw7CisJCWVxZV9jbnQrKzsKKwl9IHdoaWxlIChlcWVfY250IDwgRUhDQV9FUUVfQ0FDSEVfU0laRSk7CisJaWYgKCFlcWVfY250KSB7CisJCWlmIChpc19pcnEpCisJCQllaGNhX2RiZygmc2hjYS0+aWJfZGV2aWNlLAorCQkJCSAiTm8gZXFlIGZvdW5kIGZvciBpcnEgZXZlbnQiKTsKKwkJZ290byB1bmxvY2tfaXJxX3NwaW5sb2NrOworCX0gZWxzZSBpZiAoIWlzX2lycSkKKwkJZWhjYV9kYmcoJnNoY2EtPmliX2RldmljZSwgImRlYWRtYW4gZm91bmQgJXggZXFlIiwgZXFlX2NudCk7CisJaWYgKHVubGlrZWx5KGVxZV9jbnQgPT0gRUhDQV9FUUVfQ0FDSEVfU0laRSkpCisJCWVoY2FfZGJnKCZzaGNhLT5pYl9kZXZpY2UsICJ0b28gbWFueSBlcWVzIGZvciBvbmUgaXJxIGV2ZW50Iik7CisJLyogZW5hYmxlIGlycSBmb3IgbmV3IHBhY2tldHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZXFlX2NudDsgaSsrKSB7CisJCWlmIChlcS0+ZXFlX2NhY2hlW2ldLmNxKQorCQkJcmVzZXRfZXFfcGVuZGluZyhlcS0+ZXFlX2NhY2hlW2ldLmNxKTsKKwl9CisJLyogY2hlY2sgZXEgKi8KKwlzcGluX2xvY2soJmVxLT5zcGlubG9jayk7CisJZXFfZW1wdHkgPSAoIWlwel9lcWl0X2VxX3BlZWtfdmFsaWQoJnNoY2EtPmVxLmlwel9xdWV1ZSkpOworCXNwaW5fdW5sb2NrKCZlcS0+c3BpbmxvY2spOworCS8qIGNhbGwgY29tcGxldGlvbiBoYW5kbGVyIGZvciBjYWNoZWQgZXFlcyAqLworCWZvciAoaSA9IDA7IGkgPCBlcWVfY250OyBpKyspCisJCWlmIChlcS0+ZXFlX2NhY2hlW2ldLmNxKSB7CisJCQlpZiAoZWhjYV9zY2FsaW5nX2NvZGUpIHsKKwkJCQlzcGluX2xvY2soJmVoY2FfY3FfaWRyX2xvY2spOworCQkJCXF1ZXVlX2NvbXBfdGFzayhlcS0+ZXFlX2NhY2hlW2ldLmNxKTsKKwkJCQlzcGluX3VubG9jaygmZWhjYV9jcV9pZHJfbG9jayk7CisJCQl9IGVsc2UKKwkJCQljb21wX2V2ZW50X2NhbGxiYWNrKGVxLT5lcWVfY2FjaGVbaV0uY3EpOworCQl9IGVsc2UgeworCQkJZWhjYV9kYmcoJnNoY2EtPmliX2RldmljZSwgIkdvdCBub24gY29tcGxldGlvbiBldmVudCIpOworCQkJcGFyc2VfaWRlbnRpZmllcihzaGNhLCBlcS0+ZXFlX2NhY2hlW2ldLmVxZS0+ZW50cnkpOworCQl9CisJLyogcG9sbCBlcSBpZiBub3QgZW1wdHkgKi8KKwlpZiAoZXFfZW1wdHkpCisJCWdvdG8gdW5sb2NrX2lycV9zcGlubG9jazsKKwlkbyB7CisJCXN0cnVjdCBlaGNhX2VxZSAqZXFlOworCQllcWUgPSAoc3RydWN0IGVoY2FfZXFlICopZWhjYV9wb2xsX2VxKHNoY2EsICZzaGNhLT5lcSk7CisJCWlmICghZXFlKQorCQkJYnJlYWs7CisJCXByb2Nlc3NfZXFlKHNoY2EsIGVxZSk7CisJCWVxZV9jbnQrKzsKKwl9IHdoaWxlICgxKTsKKwordW5sb2NrX2lycV9zcGlubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcS0+aXJxX3NwaW5sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgZWhjYV90YXNrbGV0X2VxKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwllaGNhX3Byb2Nlc3NfZXEoKHN0cnVjdCBlaGNhX3NoY2EqKWRhdGEsIDEpOworfQogCiBzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfb25saW5lX2NwdShzdHJ1Y3QgZWhjYV9jb21wX3Bvb2wqIHBvb2wpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnc19sYXN0X2NwdTsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlXQVJOX09OX09OQ0UoIWluX2ludGVycnVwdCgpKTsKIAlpZiAoZWhjYV9kZWJ1Z19sZXZlbCkKIAkJZWhjYV9kbXAoJmNwdV9vbmxpbmVfbWFwLCBzaXplb2YoY3B1bWFza190KSwgIiIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxhc3RfY3B1X2xvY2ssIGZsYWdzX2xhc3RfY3B1KTsKLQlwb29sLT5sYXN0X2NwdSA9IG5leHRfY3B1KHBvb2wtPmxhc3RfY3B1LCBjcHVfb25saW5lX21hcCk7Ci0JaWYgKHBvb2wtPmxhc3RfY3B1ID09IE5SX0NQVVMpCi0JCXBvb2wtPmxhc3RfY3B1ID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5sYXN0X2NwdV9sb2NrLCBmbGFnc19sYXN0X2NwdSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxhc3RfY3B1X2xvY2ssIGZsYWdzKTsKKwljcHUgPSBuZXh0X2NwdShwb29sLT5sYXN0X2NwdSwgY3B1X29ubGluZV9tYXApOworCWlmIChjcHUgPT0gTlJfQ1BVUykKKwkJY3B1ID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKKwlwb29sLT5sYXN0X2NwdSA9IGNwdTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5sYXN0X2NwdV9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcG9vbC0+bGFzdF9jcHU7CisJcmV0dXJuIGNwdTsKIH0KIAogc3RhdGljIHZvaWQgX19xdWV1ZV9jb21wX3Rhc2soc3RydWN0IGVoY2FfY3EgKl9fY3EsCiAJCQkgICAgICBzdHJ1Y3QgZWhjYV9jcHVfY29tcF90YXNrICpjY3QpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnc19jY3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnc19jcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNjdC0+dGFza19sb2NrLCBmbGFnc19jY3QpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZfX2NxLT50YXNrX2xvY2ssIGZsYWdzX2NxKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2N0LT50YXNrX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJl9fY3EtPnRhc2tfbG9jayk7CiAKIAlpZiAoX19jcS0+bnJfY2FsbGJhY2tzID09IDApIHsKIAkJX19jcS0+bnJfY2FsbGJhY2tzKys7CkBAIC01MjAsOCArNTcxLDggQEAKIAllbHNlCiAJCV9fY3EtPm5yX2NhbGxiYWNrcysrOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmX19jcS0+dGFza19sb2NrLCBmbGFnc19jcSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2N0LT50YXNrX2xvY2ssIGZsYWdzX2NjdCk7CisJc3Bpbl91bmxvY2soJl9fY3EtPnRhc2tfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2N0LT50YXNrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcXVldWVfY29tcF90YXNrKHN0cnVjdCBlaGNhX2NxICpfX2NxKQpAQCAtNTMyLDY5ICs1ODMsNjkgQEAKIAogCWNwdSA9IGdldF9jcHUoKTsKIAljcHVfaWQgPSBmaW5kX25leHRfb25saW5lX2NwdShwb29sKTsKLQogCUJVR19PTighY3B1X29ubGluZShjcHVfaWQpKTsKIAogCWNjdCA9IHBlcl9jcHVfcHRyKHBvb2wtPmNwdV9jb21wX3Rhc2tzLCBjcHVfaWQpOworCUJVR19PTighY2N0KTsKIAogCWlmIChjY3QtPmNxX2pvYnMgPiAwKSB7CiAJCWNwdV9pZCA9IGZpbmRfbmV4dF9vbmxpbmVfY3B1KHBvb2wpOwogCQljY3QgPSBwZXJfY3B1X3B0cihwb29sLT5jcHVfY29tcF90YXNrcywgY3B1X2lkKTsKKwkJQlVHX09OKCFjY3QpOwogCX0KIAogCV9fcXVldWVfY29tcF90YXNrKF9fY3EsIGNjdCk7Ci0KLQlwdXRfY3B1KCk7Ci0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIHJ1bl9jb21wX3Rhc2soc3RydWN0IGVoY2FfY3B1X2NvbXBfdGFzayogY2N0KQogewogCXN0cnVjdCBlaGNhX2NxICpjcTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzX2NjdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzX2NxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2N0LT50YXNrX2xvY2ssIGZsYWdzX2NjdCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNjdC0+dGFza19sb2NrLCBmbGFncyk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmNjdC0+Y3FfbGlzdCkpIHsKIAkJY3EgPSBsaXN0X2VudHJ5KGNjdC0+Y3FfbGlzdC5uZXh0LCBzdHJ1Y3QgZWhjYV9jcSwgZW50cnkpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjY3QtPnRhc2tfbG9jaywgZmxhZ3NfY2N0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2N0LT50YXNrX2xvY2ssIGZsYWdzKTsKIAkJY29tcF9ldmVudF9jYWxsYmFjayhjcSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjY3QtPnRhc2tfbG9jaywgZmxhZ3NfY2N0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNjdC0+dGFza19sb2NrLCBmbGFncyk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNxLT50YXNrX2xvY2ssIGZsYWdzX2NxKTsKKwkJc3Bpbl9sb2NrKCZjcS0+dGFza19sb2NrKTsKIAkJY3EtPm5yX2NhbGxiYWNrcy0tOwogCQlpZiAoY3EtPm5yX2NhbGxiYWNrcyA9PSAwKSB7CiAJCQlsaXN0X2RlbF9pbml0KGNjdC0+Y3FfbGlzdC5uZXh0KTsKIAkJCWNjdC0+Y3Ffam9icy0tOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNxLT50YXNrX2xvY2ssIGZsYWdzX2NxKTsKLQorCQlzcGluX3VubG9jaygmY3EtPnRhc2tfbG9jayk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2N0LT50YXNrX2xvY2ssIGZsYWdzX2NjdCk7Ci0KLQlyZXR1cm47CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2N0LT50YXNrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBjb21wX3Rhc2sodm9pZCAqX19jY3QpCiB7CiAJc3RydWN0IGVoY2FfY3B1X2NvbXBfdGFzayogY2N0ID0gX19jY3Q7CisJaW50IGNxbF9lbXB0eTsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJd2hpbGUoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlhZGRfd2FpdF9xdWV1ZSgmY2N0LT53YWl0X3F1ZXVlLCAmd2FpdCk7CiAKLQkJaWYgKGxpc3RfZW1wdHkoJmNjdC0+Y3FfbGlzdCkpCisJCXNwaW5fbG9ja19pcnEoJmNjdC0+dGFza19sb2NrKTsKKwkJY3FsX2VtcHR5ID0gbGlzdF9lbXB0eSgmY2N0LT5jcV9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjY3QtPnRhc2tfbG9jayk7CisJCWlmIChjcWxfZW1wdHkpCiAJCQlzY2hlZHVsZSgpOwogCQllbHNlCiAJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJmNjdC0+d2FpdF9xdWV1ZSwgJndhaXQpOwogCi0JCWlmICghbGlzdF9lbXB0eSgmY2N0LT5jcV9saXN0KSkKKwkJc3Bpbl9sb2NrX2lycSgmY2N0LT50YXNrX2xvY2spOworCQljcWxfZW1wdHkgPSBsaXN0X2VtcHR5KCZjY3QtPmNxX2xpc3QpOworCQlzcGluX3VubG9ja19pcnEoJmNjdC0+dGFza19sb2NrKTsKKwkJaWYgKCFjcWxfZW1wdHkpCiAJCQlydW5fY29tcF90YXNrKF9fY2N0KTsKIAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwpAQCAtNjM3LDggKzY4OCw2IEBACiAKIAlpZiAodGFzaykKIAkJa3RocmVhZF9zdG9wKHRhc2spOwotCi0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCB0YWtlX292ZXJfd29yayhzdHJ1Y3QgZWhjYV9jb21wX3Bvb2wgKnBvb2wsCkBAIC02NTQsMTEgKzcwMywxMSBAQAogCWxpc3Rfc3BsaWNlX2luaXQoJmNjdC0+Y3FfbGlzdCwgJmxpc3QpOwogCiAJd2hpbGUoIWxpc3RfZW1wdHkoJmxpc3QpKSB7Ci0JICAgICAgIGNxID0gbGlzdF9lbnRyeShjY3QtPmNxX2xpc3QubmV4dCwgc3RydWN0IGVoY2FfY3EsIGVudHJ5KTsKKwkJY3EgPSBsaXN0X2VudHJ5KGNjdC0+Y3FfbGlzdC5uZXh0LCBzdHJ1Y3QgZWhjYV9jcSwgZW50cnkpOwogCi0JICAgICAgIGxpc3RfZGVsKCZjcS0+ZW50cnkpOwotCSAgICAgICBfX3F1ZXVlX2NvbXBfdGFzayhjcSwgcGVyX2NwdV9wdHIocG9vbC0+Y3B1X2NvbXBfdGFza3MsCi0JCQkJCQkgc21wX3Byb2Nlc3Nvcl9pZCgpKSk7CisJCWxpc3RfZGVsKCZjcS0+ZW50cnkpOworCQlfX3F1ZXVlX2NvbXBfdGFzayhjcSwgcGVyX2NwdV9wdHIocG9vbC0+Y3B1X2NvbXBfdGFza3MsCisJCQkJCQkgIHNtcF9wcm9jZXNzb3JfaWQoKSkpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNjdC0+dGFza19sb2NrLCBmbGFnc19jY3QpOwpAQCAtNzA4LDE0ICs3NTcsMTQgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi0jZW5kaWYKLQogaW50IGVoY2FfY3JlYXRlX2NvbXBfcG9vbCh2b2lkKQogewotI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0VIQ0FfU0NBTElORwogCWludCBjcHU7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCisJaWYgKCFlaGNhX3NjYWxpbmdfY29kZSkKKwkJcmV0dXJuIDA7CisKIAlwb29sID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVoY2FfY29tcF9wb29sKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBvb2wgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03NDAsMTYgKzc4OSwxOSBAQAogCWNvbXBfcG9vbF9jYWxsYmFja19uYi5ub3RpZmllcl9jYWxsID0gY29tcF9wb29sX2NhbGxiYWNrOwogCWNvbXBfcG9vbF9jYWxsYmFja19uYi5wcmlvcml0eSA9MDsKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNvbXBfcG9vbF9jYWxsYmFja19uYik7Ci0jZW5kaWYKKworCXByaW50ayhLRVJOX0lORk8gImVIQ0Egc2NhbGluZyBjb2RlIGVuYWJsZWRcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZWhjYV9kZXN0cm95X2NvbXBfcG9vbCh2b2lkKQogewotI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0VIQ0FfU0NBTElORwogCWludCBpOwogCisJaWYgKCFlaGNhX3NjYWxpbmdfY29kZSkKKwkJcmV0dXJuOworCiAJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNvbXBfcG9vbF9jYWxsYmFja19uYik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CkBAIC03NTgsNyArODEwLDQgQEAKIAl9CiAJZnJlZV9wZXJjcHUocG9vbC0+Y3B1X2NvbXBfdGFza3MpOwogCWtmcmVlKHBvb2wpOwotI2VuZGlmCi0KLQlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuaAppbmRleCBiZTU3OWNjLi42ZWQwNmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmgKQEAgLTU2LDYgKzU2LDcgQEAKIAogaXJxcmV0dXJuX3QgZWhjYV9pbnRlcnJ1cHRfZXEoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHZvaWQgZWhjYV90YXNrbGV0X2VxKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIGVoY2FfcHJvY2Vzc19lcShzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLCBpbnQgaXNfaXJxKTsKIAogc3RydWN0IGVoY2FfY3B1X2NvbXBfdGFzayB7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xdWV1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMKaW5kZXggMTE1NWJjZi4uYzE4MzUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMKQEAgLTUyLDcgKzUyLDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkNocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJQk0gZVNlcnZlciBIQ0EgSW5maW5pQmFuZCBEZXZpY2UgRHJpdmVyIik7Ci1NT0RVTEVfVkVSU0lPTigiU1ZORUhDQV8wMDIwIik7CitNT0RVTEVfVkVSU0lPTigiU1ZORUhDQV8wMDIxIik7CiAKIGludCBlaGNhX29wZW5fYXFwMSAgICAgPSAwOwogaW50IGVoY2FfZGVidWdfbGV2ZWwgICA9IDA7CkBAIC02Miw2ICs2Miw3IEBACiBpbnQgZWhjYV9wb3J0X2FjdF90aW1lID0gMzA7CiBpbnQgZWhjYV9wb2xsX2FsbF9lcXMgID0gMTsKIGludCBlaGNhX3N0YXRpY19yYXRlICAgPSAtMTsKK2ludCBlaGNhX3NjYWxpbmdfY29kZSAgPSAxOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQob3Blbl9hcXAxLCAgICAgZWhjYV9vcGVuX2FxcDEsICAgICBpbnQsIDApOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX2xldmVsLCAgIGVoY2FfZGVidWdfbGV2ZWwsICAgaW50LCAwKTsKQEAgLTcxLDYgKzcyLDcgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChwb3J0X2FjdF90aW1lLCBlaGNhX3BvcnRfYWN0X3RpbWUsIGludCwgMCk7CiBtb2R1bGVfcGFyYW1fbmFtZWQocG9sbF9hbGxfZXFzLCAgZWhjYV9wb2xsX2FsbF9lcXMsICBpbnQsIDApOwogbW9kdWxlX3BhcmFtX25hbWVkKHN0YXRpY19yYXRlLCAgIGVoY2Ffc3RhdGljX3JhdGUsICAgaW50LCAwKTsKK21vZHVsZV9wYXJhbV9uYW1lZChzY2FsaW5nX2NvZGUsICAgZWhjYV9zY2FsaW5nX2NvZGUsICAgaW50LCAwKTsKIAogTU9EVUxFX1BBUk1fREVTQyhvcGVuX2FxcDEsCiAJCSAiQVFQMSBvbiBzdGFydHVwICgwOiBubyAoZGVmYXVsdCksIDE6IHllcykiKTsKQEAgLTkxLDYgKzkzLDggQEAKIAkJICIgKDA6IG5vLCAxOiB5ZXMgKGRlZmF1bHQpKSIpOwogTU9EVUxFX1BBUk1fREVTQyhzdGF0aWNfcmF0ZSwKIAkJICJzZXQgcGVybWFuZW50IHN0YXRpYyByYXRlIChkZWZhdWx0OiBkaXNhYmxlZCkiKTsKK01PRFVMRV9QQVJNX0RFU0Moc2NhbGluZ19jb2RlLAorCQkgInNldCBzY2FsaW5nIGNvZGUgKDA6IGRpc2FibGVkLCAxOiBlbmFibGVkL2RlZmF1bHQpIik7CiAKIHNwaW5sb2NrX3QgZWhjYV9xcF9pZHJfbG9jazsKIHNwaW5sb2NrX3QgZWhjYV9jcV9pZHJfbG9jazsKQEAgLTQzMiw4ICs0MzYsOCBAQAogCiBzdGF0aWMgc3NpemVfdCBlaGNhX3Nob3dfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZV9kcml2ZXIgKmRkcCwgY2hhciAqYnVmKQogewotCXJldHVybiAgc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKLQkJCSBlaGNhX2RlYnVnX2xldmVsKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCWVoY2FfZGVidWdfbGV2ZWwpOwogfQogCiBzdGF0aWMgc3NpemVfdCBlaGNhX3N0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsCkBAIC03NzgsOCArNzgyLDI0IEBACiAKIAlzcGluX2xvY2soJnNoY2FfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNoY2EsICZzaGNhX2xpc3QsIHNoY2FfbGlzdCkgewotCQlpZiAoc2hjYS0+ZXEuaXNfaW5pdGlhbGl6ZWQpCi0JCQllaGNhX3Rhc2tsZXRfZXEoKHVuc2lnbmVkIGxvbmcpKHZvaWQqKXNoY2EpOworCQlpZiAoc2hjYS0+ZXEuaXNfaW5pdGlhbGl6ZWQpIHsKKwkJCS8qIGNhbGwgZGVhZG1hbiBwcm9jIG9ubHkgaWYgZXEgcHRyIGRvZXMgbm90IGNoYW5nZSAqLworCQkJc3RydWN0IGVoY2FfZXEgKmVxID0gJnNoY2EtPmVxOworCQkJaW50IG1heCA9IDM7CisJCQl2b2xhdGlsZSB1NjQgcV9vZnMsIHFfb2ZzMjsKKwkJCXU2NCBmbGFnczsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZlcS0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJCXFfb2ZzID0gZXEtPmlwel9xdWV1ZS5jdXJyZW50X3Ffb2Zmc2V0OworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXEtPnNwaW5sb2NrLCBmbGFncyk7CisJCQlkbyB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmVxLT5zcGlubG9jaywgZmxhZ3MpOworCQkJCXFfb2ZzMiA9IGVxLT5pcHpfcXVldWUuY3VycmVudF9xX29mZnNldDsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcS0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJCQltYXgtLTsKKwkJCX0gd2hpbGUgKHFfb2ZzID09IHFfb2ZzMiAmJiBtYXggPiAwKTsKKwkJCWlmIChxX29mcyA9PSBxX29mczIpCisJCQkJZWhjYV9wcm9jZXNzX2VxKHNoY2EsIDApOworCQl9CiAJfQogCW1vZF90aW1lcigmcG9sbF9lcXNfdGltZXIsIGppZmZpZXMgKyBIWik7CiAJc3Bpbl91bmxvY2soJnNoY2FfbGlzdF9sb2NrKTsKQEAgLTc5MCw3ICs4MTAsNyBAQAogCWludCByZXQ7CiAKIAlwcmludGsoS0VSTl9JTkZPICJlSENBIEluZmluaWJhbmQgRGV2aWNlIERyaXZlciAiCi0JICAgICAgICAgICAgICAgICAiKFJlbC46IFNWTkVIQ0FfMDAyMClcbiIpOworCSAgICAgICAiKFJlbC46IFNWTkVIQ0FfMDAyMSlcbiIpOwogCWlkcl9pbml0KCZlaGNhX3FwX2lkcik7CiAJaWRyX2luaXQoJmVoY2FfY3FfaWRyKTsKIAlzcGluX2xvY2tfaW5pdCgmZWhjYV9xcF9pZHJfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9pcHpfcHRfZm4uaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2lwel9wdF9mbi5oCmluZGV4IGRjM2JkYTIuLjgxOTljNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2lwel9wdF9mbi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2lwel9wdF9mbi5oCkBAIC03OSw3ICs3OSw3IEBACiAJaWYgKHFfb2Zmc2V0ID49IHF1ZXVlLT5xdWV1ZV9sZW5ndGgpCiAJCXJldHVybiBOVUxMOwogCWN1cnJlbnRfcGFnZSA9IChxdWV1ZS0+cXVldWVfcGFnZXMpW3Ffb2Zmc2V0ID4+IEVIQ0FfUEFHRVNISUZUXTsKLQlyZXR1cm4gICZjdXJyZW50X3BhZ2UtPmVudHJpZXNbcV9vZmZzZXQgJiAoRUhDQV9QQUdFU0laRSAtIDEpXTsKKwlyZXR1cm4gJmN1cnJlbnRfcGFnZS0+ZW50cmllc1txX29mZnNldCAmIChFSENBX1BBR0VTSVpFIC0gMSldOwogfQogCiAvKgpAQCAtMjQ3LDYgKzI0NywxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaXB6X2VxaXRfZXFfcGVla192YWxpZChzdHJ1Y3QgaXB6X3F1ZXVlICpxdWV1ZSkKK3sKKwl2b2lkICpyZXQgPSBpcHpfcWVpdF9nZXQocXVldWUpOworCXUzMiBxZSA9ICoodTggKikgcmV0OworCWlmICgocWUgPj4gNykgIT0gKHF1ZXVlLT50b2dnbGVfc3RhdGUgJiAxKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHJldDsKK30KKwogLyogcmV0dXJucyBhZGRyZXNzIChHWCkgb2YgZmlyc3QgcXVldWUgZW50cnkgKi8KIHN0YXRpYyBpbmxpbmUgdTY0IGlwel9xcHRfZ2V0X2ZpcnN0cGFnZShzdHJ1Y3QgaXB6X3FwdCAqcXB0KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RtYS5jCmluZGV4IDZlMGYyYjguLmY2Zjk0OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZG1hLmMKQEAgLTk2LDggKzk2LDggQEAKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CiB9CiAKLWludCBpcGF0aF9tYXBfc2coc3RydWN0IGliX2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCitzdGF0aWMgaW50IGlwYXRoX21hcF9zZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKIAl1NjQgYWRkcjsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jCmluZGV4IDc0Njg0NzcuLjk5MzQ4MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMTAuYwpAQCAtMTUzNCw3ICsxNTM0LDcgQEAKICAqIEBrYmFzZTogaXBhdGhfYmFzZV9pbmZvIHBvaW50ZXIKICAqCiAgKiBXZSBzZXQgdGhlIFBDSUUgZmxhZyBiZWNhdXNlIHRoZSBsb3dlciBiYW5kd2lkdGggb24gUENJZSB2cwotICogSHlwZXJUcmFuc3BvcnQgY2FuIGFmZmVjdCBzb21lIHVzZXIgcGFja2V0IGFsZ29yaXRoaW1zLgorICogSHlwZXJUcmFuc3BvcnQgY2FuIGFmZmVjdCBzb21lIHVzZXIgcGFja2V0IGFsZ29yaXRobXMuCiAgKi8KIHN0YXRpYyBpbnQgaXBhdGhfaHRfZ2V0X2Jhc2VfaW5mbyhzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLCB2b2lkICprYmFzZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjEyMC5jCmluZGV4IGFlOGJmOTkuLjA1OTE4ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMjAuYwpAQCAtMTI5Myw3ICsxMjkzLDcgQEAKICAqIEBrYmFzZTogaXBhdGhfYmFzZV9pbmZvIHBvaW50ZXIKICAqCiAgKiBXZSBzZXQgdGhlIFBDSUUgZmxhZyBiZWNhdXNlIHRoZSBsb3dlciBiYW5kd2lkdGggb24gUENJZSB2cwotICogSHlwZXJUcmFuc3BvcnQgY2FuIGFmZmVjdCBzb21lIHVzZXIgcGFja2V0IGFsZ29yaXRoaW1zLgorICogSHlwZXJUcmFuc3BvcnQgY2FuIGFmZmVjdCBzb21lIHVzZXIgcGFja2V0IGFsZ29yaXRobXMuCiAgKi8KIHN0YXRpYyBpbnQgaXBhdGhfcGVfZ2V0X2Jhc2VfaW5mbyhzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLCB2b2lkICprYmFzZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jCmluZGV4IDBiOWQwNTMuLjQ4ZjdjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYwpAQCAtMTc1LDcgKzE3NSw5IEBACiAJCWlmICghcmV0KSB7CiAJCQkrK2NodW5rLT5ucGFnZXM7CiAKLQkJCWlmICghY29oZXJlbnQgJiYgY2h1bmstPm5wYWdlcyA9PSBNVEhDQV9JQ01fQ0hVTktfTEVOKSB7CisJCQlpZiAoY29oZXJlbnQpCisJCQkJKytjaHVuay0+bnNnOworCQkJZWxzZSBpZiAoY2h1bmstPm5wYWdlcyA9PSBNVEhDQV9JQ01fQ0hVTktfTEVOKSB7CiAJCQkJY2h1bmstPm5zZyA9IHBjaV9tYXBfc2coZGV2LT5wZGV2LCBjaHVuay0+bWVtLAogCQkJCQkJCWNodW5rLT5ucGFnZXMsCiAJCQkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKaW5kZXggMjI0YzkzZC4uNzFkYzg0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKQEAgLTU3Myw2ICs1NzMsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKGN1cl9zdGF0ZSA9PSBuZXdfc3RhdGUgJiYgY3VyX3N0YXRlID09IElCX1FQU19SRVNFVCkgeworCQllcnIgPSAwOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoKGF0dHJfbWFzayAmIElCX1FQX1BLRVlfSU5ERVgpICYmCiAJICAgICBhdHRyLT5wa2V5X2luZGV4ID49IGRldi0+bGltaXRzLnBrZXlfdGFibGVfbGVuKSB7CiAJCW10aGNhX2RiZyhkZXYsICJQX0tleSBpbmRleCAoJXUpIHRvbyBsYXJnZS4gbWF4IGlzICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCmluZGV4IDJkNDgzODcuLjRkNTk2ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCWZvciAoOyBpID49IDA7IC0taSkKIAkJaWJfZG1hX3VubWFwX3NpbmdsZShwcml2LT5jYSwgbWFwcGluZ1tpICsgMV0sIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAotCWtmcmVlX3NrYihza2IpOworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTExMzgsNyArMTEzOCw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihtb2RlLCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd19tb2RlLCBzZXRfbW9kZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbW9kZSwgc2V0X21vZGUpOwogCiBpbnQgaXBvaWJfY21fYWRkX21vZGVfYXR0cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKaW5kZXggZmVhNzM3Zi4uYjMwM2NlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCkBAIC02MCwxNCArNjAsMTEgQEAKIC8qIFVzZWQgZm9yIGFsbCBtdWx0aWNhc3Qgam9pbnMgKGJyb2FkY2FzdCwgSVB2NCBtY2FzdCBhbmQgSVB2NiBtY2FzdCkgKi8KIHN0cnVjdCBpcG9pYl9tY2FzdCB7CiAJc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyBtY21lbWJlcjsKKwlzdHJ1Y3QgaWJfc2FfbXVsdGljYXN0CSAqbWM7CiAJc3RydWN0IGlwb2liX2FoICAgICAgICAgICphaDsKIAogCXN0cnVjdCByYl9ub2RlICAgIHJiX25vZGU7CiAJc3RydWN0IGxpc3RfaGVhZCAgbGlzdDsKLQlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOwotCi0JaW50ICAgICAgICAgICAgICAgICBxdWVyeV9pZDsKLQlzdHJ1Y3QgaWJfc2FfcXVlcnkgKnF1ZXJ5OwogCiAJdW5zaWduZWQgbG9uZyBjcmVhdGVkOwogCXVuc2lnbmVkIGxvbmcgYmFja29mZjsKQEAgLTI5OSwxOCArMjk2LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBpcG9pYl9tY2FzdF9zZW5kb25seV9qb2luX2NvbXBsZXRlKGludCBzdGF0dXMsCi0JCQkJICAgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqbWNtZW1iZXIsCi0JCQkJICAgdm9pZCAqbWNhc3RfcHRyKQorCQkJCSAgIHN0cnVjdCBpYl9zYV9tdWx0aWNhc3QgKm11bHRpY2FzdCkKIHsKLQlzdHJ1Y3QgaXBvaWJfbWNhc3QgKm1jYXN0ID0gbWNhc3RfcHRyOworCXN0cnVjdCBpcG9pYl9tY2FzdCAqbWNhc3QgPSBtdWx0aWNhc3QtPmNvbnRleHQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1jYXN0LT5kZXY7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCS8qIFdlIHRyYXAgZm9yIHBvcnQgZXZlbnRzIG91cnNlbHZlcy4gKi8KKwlpZiAoc3RhdHVzID09IC1FTkVUUkVTRVQpCisJCXJldHVybiAwOworCiAJaWYgKCFzdGF0dXMpCi0JCWlwb2liX21jYXN0X2pvaW5fZmluaXNoKG1jYXN0LCBtY21lbWJlcik7Ci0JZWxzZSB7CisJCXN0YXR1cyA9IGlwb2liX21jYXN0X2pvaW5fZmluaXNoKG1jYXN0LCAmbXVsdGljYXN0LT5yZWMpOworCisJaWYgKHN0YXR1cykgewogCQlpZiAobWNhc3QtPmxvZ2NvdW50KysgPCAyMCkKIAkJCWlwb2liX2RiZ19tY2FzdChuZXRkZXZfcHJpdihkZXYpLCAibXVsdGljYXN0IGpvaW4gZmFpbGVkIGZvciAiCiAJCQkJCUlQT0lCX0dJRF9GTVQgIiwgc3RhdHVzICVkXG4iLApAQCAtMzI1LDExICszMjYsMTAgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKIAogCQkvKiBDbGVhciB0aGUgYnVzeSBmbGFnIHNvIHdlIHRyeSBhZ2FpbiAqLwotCQljbGVhcl9iaXQoSVBPSUJfTUNBU1RfRkxBR19CVVNZLCAmbWNhc3QtPmZsYWdzKTsKLQkJbWNhc3QtPnF1ZXJ5ID0gTlVMTDsKKwkJc3RhdHVzID0gdGVzdF9hbmRfY2xlYXJfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwKKwkJCQkJICAgICZtY2FzdC0+ZmxhZ3MpOwogCX0KLQotCWNvbXBsZXRlKCZtY2FzdC0+ZG9uZSk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBpcG9pYl9tY2FzdF9zZW5kb25seV9qb2luKHN0cnVjdCBpcG9pYl9tY2FzdCAqbWNhc3QpCkBAIC0zNTksMzUgKzM1OSwzMyBAQAogCXJlYy5wb3J0X2dpZCA9IHByaXYtPmxvY2FsX2dpZDsKIAlyZWMucGtleSAgICAgPSBjcHVfdG9fYmUxNihwcml2LT5wa2V5KTsKIAotCWluaXRfY29tcGxldGlvbigmbWNhc3QtPmRvbmUpOwotCi0JcmV0ID0gaWJfc2FfbWNtZW1iZXJfcmVjX3NldCgmaXBvaWJfc2FfY2xpZW50LCBwcml2LT5jYSwgcHJpdi0+cG9ydCwgJnJlYywKLQkJCQkgICAgIElCX1NBX01DTUVNQkVSX1JFQ19NR0lECQl8Ci0JCQkJICAgICBJQl9TQV9NQ01FTUJFUl9SRUNfUE9SVF9HSUQJfAotCQkJCSAgICAgSUJfU0FfTUNNRU1CRVJfUkVDX1BLRVkJCXwKLQkJCQkgICAgIElCX1NBX01DTUVNQkVSX1JFQ19KT0lOX1NUQVRFLAotCQkJCSAgICAgMTAwMCwgR0ZQX0FUT01JQywKLQkJCQkgICAgIGlwb2liX21jYXN0X3NlbmRvbmx5X2pvaW5fY29tcGxldGUsCi0JCQkJICAgICBtY2FzdCwgJm1jYXN0LT5xdWVyeSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJaXBvaWJfd2Fybihwcml2LCAiaWJfc2FfbWNtZW1iZXJfcmVjX3NldCBmYWlsZWQgKHJldCA9ICVkKVxuIiwKKwltY2FzdC0+bWMgPSBpYl9zYV9qb2luX211bHRpY2FzdCgmaXBvaWJfc2FfY2xpZW50LCBwcml2LT5jYSwKKwkJCQkJIHByaXYtPnBvcnQsICZyZWMsCisJCQkJCSBJQl9TQV9NQ01FTUJFUl9SRUNfTUdJRAl8CisJCQkJCSBJQl9TQV9NQ01FTUJFUl9SRUNfUE9SVF9HSUQJfAorCQkJCQkgSUJfU0FfTUNNRU1CRVJfUkVDX1BLRVkJfAorCQkJCQkgSUJfU0FfTUNNRU1CRVJfUkVDX0pPSU5fU1RBVEUsCisJCQkJCSBHRlBfQVRPTUlDLAorCQkJCQkgaXBvaWJfbWNhc3Rfc2VuZG9ubHlfam9pbl9jb21wbGV0ZSwKKwkJCQkJIG1jYXN0KTsKKwlpZiAoSVNfRVJSKG1jYXN0LT5tYykpIHsKKwkJcmV0ID0gUFRSX0VSUihtY2FzdC0+bWMpOworCQljbGVhcl9iaXQoSVBPSUJfTUNBU1RfRkxBR19CVVNZLCAmbWNhc3QtPmZsYWdzKTsKKwkJaXBvaWJfd2Fybihwcml2LCAiaWJfc2Ffam9pbl9tdWx0aWNhc3QgZmFpbGVkIChyZXQgPSAlZClcbiIsCiAJCQkgICByZXQpOwogCX0gZWxzZSB7CiAJCWlwb2liX2RiZ19tY2FzdChwcml2LCAibm8gbXVsdGljYXN0IHJlY29yZCBmb3IgIiBJUE9JQl9HSURfRk1UCiAJCQkJIiwgc3RhcnRpbmcgam9pblxuIiwKIAkJCQlJUE9JQl9HSURfQVJHKG1jYXN0LT5tY21lbWJlci5tZ2lkKSk7Ci0KLQkJbWNhc3QtPnF1ZXJ5X2lkID0gcmV0OwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlwb2liX21jYXN0X2pvaW5fY29tcGxldGUoaW50IHN0YXR1cywKLQkJCQkgICAgICBzdHJ1Y3QgaWJfc2FfbWNtZW1iZXJfcmVjICptY21lbWJlciwKLQkJCQkgICAgICB2b2lkICptY2FzdF9wdHIpCitzdGF0aWMgaW50IGlwb2liX21jYXN0X2pvaW5fY29tcGxldGUoaW50IHN0YXR1cywKKwkJCQkgICAgIHN0cnVjdCBpYl9zYV9tdWx0aWNhc3QgKm11bHRpY2FzdCkKIHsKLQlzdHJ1Y3QgaXBvaWJfbWNhc3QgKm1jYXN0ID0gbWNhc3RfcHRyOworCXN0cnVjdCBpcG9pYl9tY2FzdCAqbWNhc3QgPSBtdWx0aWNhc3QtPmNvbnRleHQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1jYXN0LT5kZXY7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMzk1LDI0ICszOTMsMjUgQEAKIAkJCSIgKHN0YXR1cyAlZClcbiIsCiAJCQlJUE9JQl9HSURfQVJHKG1jYXN0LT5tY21lbWJlci5tZ2lkKSwgc3RhdHVzKTsKIAotCWlmICghc3RhdHVzICYmICFpcG9pYl9tY2FzdF9qb2luX2ZpbmlzaChtY2FzdCwgbWNtZW1iZXIpKSB7CisJLyogV2UgdHJhcCBmb3IgcG9ydCBldmVudHMgb3Vyc2VsdmVzLiAqLworCWlmIChzdGF0dXMgPT0gLUVORVRSRVNFVCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gaXBvaWJfbWNhc3Rfam9pbl9maW5pc2gobWNhc3QsICZtdWx0aWNhc3QtPnJlYyk7CisKKwlpZiAoIXN0YXR1cykgewogCQltY2FzdC0+YmFja29mZiA9IDE7CiAJCW11dGV4X2xvY2soJm1jYXN0X211dGV4KTsKIAkJaWYgKHRlc3RfYml0KElQT0lCX01DQVNUX1JVTiwgJnByaXYtPmZsYWdzKSkKIAkJCXF1ZXVlX2RlbGF5ZWRfd29yayhpcG9pYl93b3JrcXVldWUsCiAJCQkJCSAgICZwcml2LT5tY2FzdF90YXNrLCAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZtY2FzdF9tdXRleCk7Ci0JCWNvbXBsZXRlKCZtY2FzdC0+ZG9uZSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHN0YXR1cyA9PSAtRUlOVFIpIHsKLQkJY29tcGxldGUoJm1jYXN0LT5kb25lKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChzdGF0dXMgJiYgbWNhc3QtPmxvZ2NvdW50KysgPCAyMCkgewotCQlpZiAoc3RhdHVzID09IC1FVElNRURPVVQgfHwgc3RhdHVzID09IC1FSU5UUikgeworCWlmIChtY2FzdC0+bG9nY291bnQrKyA8IDIwKSB7CisJCWlmIChzdGF0dXMgPT0gLUVUSU1FRE9VVCkgewogCQkJaXBvaWJfZGJnX21jYXN0KHByaXYsICJtdWx0aWNhc3Qgam9pbiBmYWlsZWQgZm9yICIgSVBPSUJfR0lEX0ZNVAogCQkJCQkiLCBzdGF0dXMgJWRcbiIsCiAJCQkJCUlQT0lCX0dJRF9BUkcobWNhc3QtPm1jbWVtYmVyLm1naWQpLApAQCAtNDI5LDI0ICs0MjgsMTggQEAKIAlpZiAobWNhc3QtPmJhY2tvZmYgPiBJUE9JQl9NQVhfQkFDS09GRl9TRUNPTkRTKQogCQltY2FzdC0+YmFja29mZiA9IElQT0lCX01BWF9CQUNLT0ZGX1NFQ09ORFM7CiAKKwkvKiBDbGVhciB0aGUgYnVzeSBmbGFnIHNvIHdlIHRyeSBhZ2FpbiAqLworCXN0YXR1cyA9IHRlc3RfYW5kX2NsZWFyX2JpdChJUE9JQl9NQ0FTVF9GTEFHX0JVU1ksICZtY2FzdC0+ZmxhZ3MpOworCiAJbXV0ZXhfbG9jaygmbWNhc3RfbXV0ZXgpOwotCiAJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0JbWNhc3QtPnF1ZXJ5ID0gTlVMTDsKLQotCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9SVU4sICZwcml2LT5mbGFncykpIHsKLQkJaWYgKHN0YXR1cyA9PSAtRVRJTUVET1VUKQotCQkJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPm1jYXN0X3Rhc2ssCi0JCQkJCSAgIDApOwotCQllbHNlCi0JCQlxdWV1ZV9kZWxheWVkX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+bWNhc3RfdGFzaywKLQkJCQkJICAgbWNhc3QtPmJhY2tvZmYgKiBIWik7Ci0JfSBlbHNlCi0JCWNvbXBsZXRlKCZtY2FzdC0+ZG9uZSk7CisJaWYgKHRlc3RfYml0KElQT0lCX01DQVNUX1JVTiwgJnByaXYtPmZsYWdzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPm1jYXN0X3Rhc2ssCisJCQkJICAgbWNhc3QtPmJhY2tvZmYgKiBIWik7CiAJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAltdXRleF91bmxvY2soJm1jYXN0X211dGV4KTsKIAotCXJldHVybjsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgdm9pZCBpcG9pYl9tY2FzdF9qb2luKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcG9pYl9tY2FzdCAqbWNhc3QsCkBAIC00OTUsMTUgKzQ4OCwxNCBAQAogCQlyZWMuaG9wX2xpbWl0CSAgPSBwcml2LT5icm9hZGNhc3QtPm1jbWVtYmVyLmhvcF9saW1pdDsKIAl9CiAKLQlpbml0X2NvbXBsZXRpb24oJm1jYXN0LT5kb25lKTsKLQotCXJldCA9IGliX3NhX21jbWVtYmVyX3JlY19zZXQoJmlwb2liX3NhX2NsaWVudCwgcHJpdi0+Y2EsIHByaXYtPnBvcnQsCi0JCQkJICAgICAmcmVjLCBjb21wX21hc2ssIG1jYXN0LT5iYWNrb2ZmICogMTAwMCwKLQkJCQkgICAgIEdGUF9BVE9NSUMsIGlwb2liX21jYXN0X2pvaW5fY29tcGxldGUsCi0JCQkJICAgICBtY2FzdCwgJm1jYXN0LT5xdWVyeSk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQlpcG9pYl93YXJuKHByaXYsICJpYl9zYV9tY21lbWJlcl9yZWNfc2V0IGZhaWxlZCwgc3RhdHVzICVkXG4iLCByZXQpOworCXNldF9iaXQoSVBPSUJfTUNBU1RfRkxBR19CVVNZLCAmbWNhc3QtPmZsYWdzKTsKKwltY2FzdC0+bWMgPSBpYl9zYV9qb2luX211bHRpY2FzdCgmaXBvaWJfc2FfY2xpZW50LCBwcml2LT5jYSwgcHJpdi0+cG9ydCwKKwkJCQkJICZyZWMsIGNvbXBfbWFzaywgR0ZQX0tFUk5FTCwKKwkJCQkJIGlwb2liX21jYXN0X2pvaW5fY29tcGxldGUsIG1jYXN0KTsKKwlpZiAoSVNfRVJSKG1jYXN0LT5tYykpIHsKKwkJY2xlYXJfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwgJm1jYXN0LT5mbGFncyk7CisJCXJldCA9IFBUUl9FUlIobWNhc3QtPm1jKTsKKwkJaXBvaWJfd2Fybihwcml2LCAiaWJfc2Ffam9pbl9tdWx0aWNhc3QgZmFpbGVkLCBzdGF0dXMgJWRcbiIsIHJldCk7CiAKIAkJbWNhc3QtPmJhY2tvZmYgKj0gMjsKIAkJaWYgKG1jYXN0LT5iYWNrb2ZmID4gSVBPSUJfTUFYX0JBQ0tPRkZfU0VDT05EUykKQEAgLTUxNSw4ICs1MDcsNyBAQAogCQkJCQkgICAmcHJpdi0+bWNhc3RfdGFzaywKIAkJCQkJICAgbWNhc3QtPmJhY2tvZmYgKiBIWik7CiAJCW11dGV4X3VubG9jaygmbWNhc3RfbXV0ZXgpOwotCX0gZWxzZQotCQltY2FzdC0+cXVlcnlfaWQgPSByZXQ7CisJfQogfQogCiB2b2lkIGlwb2liX21jYXN0X2pvaW5fdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC01NDEsNyArNTMyLDcgQEAKIAkJCXByaXYtPmxvY2FsX3JhdGUgPSBhdHRyLmFjdGl2ZV9zcGVlZCAqCiAJCQkJaWJfd2lkdGhfZW51bV90b19pbnQoYXR0ci5hY3RpdmVfd2lkdGgpOwogCQl9IGVsc2UKLQkJaXBvaWJfd2Fybihwcml2LCAiaWJfcXVlcnlfcG9ydCBmYWlsZWRcbiIpOworCQkJaXBvaWJfd2Fybihwcml2LCAiaWJfcXVlcnlfcG9ydCBmYWlsZWRcbiIpOwogCX0KIAogCWlmICghcHJpdi0+YnJvYWRjYXN0KSB7CkBAIC01NjgsNyArNTU5LDggQEAKIAl9CiAKIAlpZiAoIXRlc3RfYml0KElQT0lCX01DQVNUX0ZMQUdfQVRUQUNIRUQsICZwcml2LT5icm9hZGNhc3QtPmZsYWdzKSkgewotCQlpcG9pYl9tY2FzdF9qb2luKGRldiwgcHJpdi0+YnJvYWRjYXN0LCAwKTsKKwkJaWYgKCF0ZXN0X2JpdChJUE9JQl9NQ0FTVF9GTEFHX0JVU1ksICZwcml2LT5icm9hZGNhc3QtPmZsYWdzKSkKKwkJCWlwb2liX21jYXN0X2pvaW4oZGV2LCBwcml2LT5icm9hZGNhc3QsIDApOwogCQlyZXR1cm47CiAJfQogCkBAIC02MjUsMjYgKzYxNyw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHdhaXRfZm9yX21jYXN0X2pvaW4oc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpcG9pYl9tY2FzdCAqbWNhc3QpCi17Ci0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0JaWYgKG1jYXN0ICYmIG1jYXN0LT5xdWVyeSkgewotCQlpYl9zYV9jYW5jZWxfcXVlcnkobWNhc3QtPnF1ZXJ5X2lkLCBtY2FzdC0+cXVlcnkpOwotCQltY2FzdC0+cXVlcnkgPSBOVUxMOwotCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIndhaXRpbmcgZm9yIE1HSUQgIiBJUE9JQl9HSURfRk1UICJcbiIsCi0JCQkJSVBPSUJfR0lEX0FSRyhtY2FzdC0+bWNtZW1iZXIubWdpZCkpOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtY2FzdC0+ZG9uZSk7Ci0JfQotCWVsc2UKLQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLX0KLQogaW50IGlwb2liX21jYXN0X3N0b3BfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCkKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpcG9pYl9tY2FzdCAqbWNhc3Q7CiAKIAlpcG9pYl9kYmdfbWNhc3QocHJpdiwgInN0b3BwaW5nIG11bHRpY2FzdCB0aHJlYWRcbiIpOwogCkBAIC02NjAsNTIgKzYzNSwyNyBAQAogCWlmIChmbHVzaCkKIAkJZmx1c2hfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CiAKLQl3YWl0X2Zvcl9tY2FzdF9qb2luKHByaXYsIHByaXYtPmJyb2FkY2FzdCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jYXN0LCAmcHJpdi0+bXVsdGljYXN0X2xpc3QsIGxpc3QpCi0JCXdhaXRfZm9yX21jYXN0X2pvaW4ocHJpdiwgbWNhc3QpOwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXBvaWJfbWNhc3RfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlwb2liX21jYXN0ICptY2FzdCkKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgcmVjID0gewotCQkuam9pbl9zdGF0ZSA9IDEKLQl9OwogCWludCByZXQgPSAwOwogCi0JaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSVBPSUJfTUNBU1RfRkxBR19BVFRBQ0hFRCwgJm1jYXN0LT5mbGFncykpCi0JCXJldHVybiAwOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSVBPSUJfTUNBU1RfRkxBR19BVFRBQ0hFRCwgJm1jYXN0LT5mbGFncykpIHsKKwkJaXBvaWJfZGJnX21jYXN0KHByaXYsICJsZWF2aW5nIE1HSUQgIiBJUE9JQl9HSURfRk1UICJcbiIsCisJCQkJSVBPSUJfR0lEX0FSRyhtY2FzdC0+bWNtZW1iZXIubWdpZCkpOwogCi0JaXBvaWJfZGJnX21jYXN0KHByaXYsICJsZWF2aW5nIE1HSUQgIiBJUE9JQl9HSURfRk1UICJcbiIsCi0JCQlJUE9JQl9HSURfQVJHKG1jYXN0LT5tY21lbWJlci5tZ2lkKSk7CisJCS8qIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgbXVsdGljYXN0IGdyb3VwICovCisJCXJldCA9IGlwb2liX21jYXN0X2RldGFjaChkZXYsIGJlMTZfdG9fY3B1KG1jYXN0LT5tY21lbWJlci5tbGlkKSwKKwkJCQkJICZtY2FzdC0+bWNtZW1iZXIubWdpZCk7CisJCWlmIChyZXQpCisJCQlpcG9pYl93YXJuKHByaXYsICJpcG9pYl9tY2FzdF9kZXRhY2ggZmFpbGVkIChyZXN1bHQgPSAlZClcbiIsIHJldCk7CisJfQogCi0JcmVjLm1naWQgICAgID0gbWNhc3QtPm1jbWVtYmVyLm1naWQ7Ci0JcmVjLnBvcnRfZ2lkID0gcHJpdi0+bG9jYWxfZ2lkOwotCXJlYy5wa2V5ICAgICA9IGNwdV90b19iZTE2KHByaXYtPnBrZXkpOwotCi0JLyogUmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBtdWx0aWNhc3QgZ3JvdXAgKi8KLQlyZXQgPSBpcG9pYl9tY2FzdF9kZXRhY2goZGV2LCBiZTE2X3RvX2NwdShtY2FzdC0+bWNtZW1iZXIubWxpZCksCi0JCQkJICZtY2FzdC0+bWNtZW1iZXIubWdpZCk7Ci0JaWYgKHJldCkKLQkJaXBvaWJfd2Fybihwcml2LCAiaXBvaWJfbWNhc3RfZGV0YWNoIGZhaWxlZCAocmVzdWx0ID0gJWQpXG4iLCByZXQpOwotCi0JLyoKLQkgKiBKdXN0IG1ha2Ugb25lIHNob3QgYXQgbGVhdmluZyBhbmQgZG9uJ3Qgd2FpdCBmb3IgYSByZXBseTsKLQkgKiBpZiB3ZSBmYWlsLCB0b28gYmFkLgotCSAqLwotCXJldCA9IGliX3NhX21jbWVtYmVyX3JlY19kZWxldGUoJmlwb2liX3NhX2NsaWVudCwgcHJpdi0+Y2EsIHByaXYtPnBvcnQsICZyZWMsCi0JCQkJCUlCX1NBX01DTUVNQkVSX1JFQ19NR0lECQl8Ci0JCQkJCUlCX1NBX01DTUVNQkVSX1JFQ19QT1JUX0dJRAl8Ci0JCQkJCUlCX1NBX01DTUVNQkVSX1JFQ19QS0VZCQl8Ci0JCQkJCUlCX1NBX01DTUVNQkVSX1JFQ19KT0lOX1NUQVRFLAotCQkJCQkwLCBHRlBfQVRPTUlDLCBOVUxMLAotCQkJCQltY2FzdCwgJm1jYXN0LT5xdWVyeSk7Ci0JaWYgKHJldCA8IDApCi0JCWlwb2liX3dhcm4ocHJpdiwgImliX3NhX21jbWVtYmVyX3JlY19kZWxldGUgZmFpbGVkICIKLQkJCSAgICJmb3IgbGVhdmUgKHJlc3VsdCA9ICVkKVxuIiwgcmV0KTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwgJm1jYXN0LT5mbGFncykpCisJCWliX3NhX2ZyZWVfbXVsdGljYXN0KG1jYXN0LT5tYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc1OCw3ICs3MDgsNyBAQAogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJfQogCi0JCWlmIChtY2FzdC0+cXVlcnkpCisJCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9GTEFHX0JVU1ksICZtY2FzdC0+ZmxhZ3MpKQogCQkJaXBvaWJfZGJnX21jYXN0KHByaXYsICJubyBhZGRyZXNzIHZlY3RvciwgIgogCQkJCQkiYnV0IG11bHRpY2FzdCBqb2luIGFscmVhZHkgc3RhcnRlZFxuIik7CiAJCWVsc2UgaWYgKHRlc3RfYml0KElQT0lCX01DQVNUX0ZMQUdfU0VORE9OTFksICZtY2FzdC0+ZmxhZ3MpKQpAQCAtOTE2LDcgKzg2Niw2IEBACiAKIAkvKiBXZSBoYXZlIHRvIGNhbmNlbCBvdXRzaWRlIG9mIHRoZSBzcGlubG9jayAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtY2FzdCwgdG1jYXN0LCAmcmVtb3ZlX2xpc3QsIGxpc3QpIHsKLQkJd2FpdF9mb3JfbWNhc3Rfam9pbihwcml2LCBtY2FzdCk7CiAJCWlwb2liX21jYXN0X2xlYXZlKG1jYXN0LT5kZXYsIG1jYXN0KTsKIAkJaXBvaWJfbWNhc3RfZnJlZShtY2FzdCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IGVmYTFiMWYuLmE5YTcwNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTU4OCwxOCArNTg4LDkgQEAKIHN0YXRpYyBzc2l6ZV90IGlucHV0X2Rldl9zaG93XyMjbmFtZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCQlcCiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gdG9faW5wdXRfZGV2KGRldik7CQkJXAotCWludCByZXR2YWw7CQkJCQkJCQlcCiAJCQkJCQkJCQkJXAotCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfZGV2LT5tdXRleCk7CQkJXAotCWlmIChyZXR2YWwpCQkJCQkJCQlcCi0JCXJldHVybiByZXR2YWw7CQkJCQkJCVwKLQkJCQkJCQkJCQlcCi0JcmV0dmFsID0gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAkJCQkJXAotCQkJICAgIiVzXG4iLCBpbnB1dF9kZXYtPm5hbWUgPyBpbnB1dF9kZXYtPm5hbWUgOiAiIik7CVwKLQkJCQkJCQkJCQlcCi0JbXV0ZXhfdW5sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsJCQkJCVwKLQkJCQkJCQkJCQlcCi0JcmV0dXJuIHJldHZhbDsJCQkJCQkJCVwKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCQkJCVwKKwkJCSBpbnB1dF9kZXYtPm5hbWUgPyBpbnB1dF9kZXYtPm5hbWUgOiAiIik7CQlcCiB9CQkJCQkJCQkJCVwKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBpbnB1dF9kZXZfc2hvd18jI25hbWUsIE5VTEwpOwogCkBAIC0xMDQ5LDEwICsxMDQwLDYgQEAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+Y2Rldi5rb2JqLCAmaW5wdXRfZGV2X2lkX2F0dHJfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5jZGV2LmtvYmosICZpbnB1dF9kZXZfYXR0cl9ncm91cCk7CiAKLQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKLQlkZXYtPm5hbWUgPSBkZXYtPnBoeXMgPSBkZXYtPnVuaXEgPSBOVUxMOwotCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7Ci0KIAljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT5jZGV2KTsKIAogCWlucHV0X3dha2V1cF9wcm9jZnNfcmVhZGVycygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbWlqb3kuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW1pam95LmMKaW5kZXggZTYwODY5MS4uYjBmNTU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbWlqb3kuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FtaWpveS5jCkBAIC01MCw4ICs1MCw2IEBACiBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQobWFwLCBhbWlqb3ksIHVpbnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtYXAsICJNYXAgb2YgYXR0YWNoZWQgam95c3RpY2tzIGluIGZvcm0gb2YgPGE+LDxiPiAoZGVmYXVsdCBpcyAwLDEpIik7CiAKLV9fb2Jzb2xldGVfc2V0dXAoImFtaWpveT0iKTsKLQogc3RhdGljIGludCBhbWlqb3lfdXNlZDsKIHN0YXRpYyBERUZJTkVfTVVURVgoYW1pam95X211dGV4KTsKIHN0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2ICphbWlqb3lfZGV2WzJdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW5hbG9nLmMKaW5kZXggN2VmNjg0NS4uNTFmMWU0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jCkBAIC01OCw4ICs1OCw2IEBACiBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQobWFwLCBqcywgY2hhcnAsICZqc19uYXJncywgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1hcCwgIkRlc2NyaWJlcyBhbmFsb2cgam95c3RpY2tzIHR5cGUvY2FwYWJpbGl0aWVzIik7CiAKLV9fb2Jzb2xldGVfc2V0dXAoImpzPSIpOwotCiAvKgogICogVGltZXMsIGZlYXR1cmUgZGVmaW5pdGlvbnMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2RiOS5jCmluZGV4IDUwODBlMTUuLmI0MWJkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9kYjkuYwpAQCAtNTksMTAgKzU5LDYgQEAKIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChkZXYzLCBkYjlbMl0uYXJncywgaW50LCAmZGI5WzJdLm5hcmdzLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGV2MywgIkRlc2NyaWJlcyB0aGlyZCBhdHRhY2hlZCBkZXZpY2UgKDxwYXJwb3J0Iz4sPHR5cGU+KSIpOwogCi1fX29ic29sZXRlX3NldHVwKCJkYjk9Iik7Ci1fX29ic29sZXRlX3NldHVwKCJkYjlfMj0iKTsKLV9fb2Jzb2xldGVfc2V0dXAoImRiOV8zPSIpOwotCiAjZGVmaW5lIERCOV9BUkdfUEFSUE9SVAkJMAogI2RlZmluZSBEQjlfQVJHX01PREUJCTEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dhbWVjb24uYwppbmRleCBmZTEyYWEzLi43MTFlNGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dhbWVjb24uYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dhbWVjb24uYwpAQCAtNjAsMTAgKzYwLDYgQEAKIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChtYXAzLCBnY1syXS5hcmdzLCBpbnQsICZnY1syXS5uYXJncywgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1hcDMsICJEZXNjcmliZXMgdGhpcmQgc2V0IG9mIGRldmljZXMiKTsKIAotX19vYnNvbGV0ZV9zZXR1cCgiZ2M9Iik7Ci1fX29ic29sZXRlX3NldHVwKCJnY18yPSIpOwotX19vYnNvbGV0ZV9zZXR1cCgiZ2NfMz0iKTsKLQogLyogc2VlIGFsc28gZ3NfcHN4X2RlbGF5IHBhcmFtZXRlciBpbiBQU1ggc3VwcG9ydCBzZWN0aW9uICovCiAKICNkZWZpbmUgR0NfU05FUwkJMQpAQCAtNDAzLDggKzM5OSw2IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQocHN4X2RlbGF5LCBnY19wc3hfZGVsYXksIHVpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwc3hfZGVsYXksICJEZWxheSB3aGVuIGFjY2Vzc2luZyBTb255IFBTWCBjb250cm9sbGVyICh1c2VjcykiKTsKIAotX19vYnNvbGV0ZV9zZXR1cCgiZ2NfcHN4X2RlbGF5PSIpOwotCiBzdGF0aWMgc2hvcnQgZ2NfcHN4X2Fic1tdID0geyBBQlNfWCwgQUJTX1ksIEFCU19SWCwgQUJTX1JZLCBBQlNfSEFUMFgsIEFCU19IQVQwWSB9Owogc3RhdGljIHNob3J0IGdjX3BzeF9idG5bXSA9IHsgQlROX1RMLCBCVE5fVFIsIEJUTl9UTDIsIEJUTl9UUjIsIEJUTl9BLCBCVE5fQiwgQlROX1gsIEJUTl9ZLAogCQkJCUJUTl9TVEFSVCwgQlROX1NFTEVDVCwgQlROX1RIVU1CTCwgQlROX1RIVU1CUiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay90dXJib2dyYWZ4LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R1cmJvZ3JhZnguYwppbmRleCA1NTcwZmQ1Li4wMzdkMzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R1cmJvZ3JhZnguYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R1cmJvZ3JhZnguYwpAQCAtNjAsMTAgKzYwLDYgQEAKIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChtYXAzLCB0Z2Z4WzJdLmFyZ3MsIGludCwgJnRnZnhbMl0ubmFyZ3MsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtYXAzLCAiRGVzY3JpYmVzIHRoaXJkIHNldCBvZiBkZXZpY2VzIik7CiAKLV9fb2Jzb2xldGVfc2V0dXAoInRnZng9Iik7Ci1fX29ic29sZXRlX3NldHVwKCJ0Z2Z4XzI9Iik7Ci1fX29ic29sZXRlX3NldHVwKCJ0Z2Z4XzM9Iik7Ci0KICNkZWZpbmUgVEdGWF9SRUZSRVNIX1RJTUUJSFovMTAwCS8qIDEwIG1zICovCiAKICNkZWZpbmUgVEdGWF9UUklHR0VSCQkweDA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKaW5kZXggMWI4MWE3Mi4uNjQ1MDk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwpAQCAtMjE1LDExICsyMTUsMTEgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhYWVkMjAwMF9rYmQuCiAKIGNvbmZpZyBLRVlCT0FSRF9HUElPCi0gICAgICAgIHRyaXN0YXRlICJCdXR0b25zIG9uIENQVSBHUElPcyAoUFhBKSIKLSAgICAgICAgZGVwZW5kcyBvbiBBUkNIX1BYQQorCXRyaXN0YXRlICJCdXR0b25zIG9uIENQVSBHUElPcyAoUFhBKSIKKwlkZXBlbmRzIG9uIChBUkNIX1NBMTEwMCB8fCBBUkNIX1BYQSB8fCBBUkNIX1MzQzI0MTApCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBidXR0b25zIGNvbm5lY3RlZAotCSAgZGlyZWN0bHkgdG8gR1BJTyBwaW5zIG9mIFBYQSBDUFVzLgorCSAgZGlyZWN0bHkgdG8gR1BJTyBwaW5zIG9mIFNBMTEwMCwgUFhBIG9yIFMzQzI0eHggQ1BVcy4KIAogCSAgU2F5IFkgaGVyZSBpZiB5b3VyIGRldmljZSBoYXMgYnV0dG9ucyBjb25uZWN0ZWQKIAkgIGRpcmVjdGx5IHRvIEdQSU8gcGlucyBvZiB0aGUgQ1BVLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCmluZGV4IGM2MjFhOTEuLjY2Mzg3NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKQEAgLTYzLDEwICs2Myw2IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoZXh0cmEsIGF0a2JkX2V4dHJhLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZXh0cmEsICJFbmFibGUgZXh0cmEgTEVEcyBhbmQga2V5cyBvbiBJQk0gUmFwaWRBY2NlcywgRXpLZXkgYW5kIHNpbWlsYXIga2V5Ym9hcmRzIik7CiAKLV9fb2Jzb2xldGVfc2V0dXAoImF0a2JkX3NldD0iKTsKLV9fb2Jzb2xldGVfc2V0dXAoImF0a2JkX3Jlc2V0Iik7Ci1fX29ic29sZXRlX3NldHVwKCJhdGtiZF9zb2Z0cmVwZWF0PSIpOwotCiAvKgogICogU2NhbmNvZGUgdG8ga2V5Y29kZSB0YWJsZXMuIFRoZXNlIGFyZSBqdXN0IHRoZSBkZWZhdWx0IHNldHRpbmcsIGFuZAogICogYXJlIGxvYWRhYmxlIHZpYSBhbiB1c2VybGFuZCB1dGlsaXR5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggN2FkNDc5ZS4uZmEwM2EwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAotI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dwaW9fa2V5cy5oPgpAQCAtMzgsOCArMzgsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5uYnV0dG9uczsgaSsrKSB7CiAJCWludCBncGlvID0gcGRhdGEtPmJ1dHRvbnNbaV0uZ3BpbzsKLQkJaWYgKGlycSA9PSBJUlFfR1BJTyhncGlvKSkgewotCQkJaW50IHN0YXRlID0gKChHUExSKGdwaW8pICYgR1BJT19iaXQoZ3BpbykpID8gMSA6IDApIF4gKHBkYXRhLT5idXR0b25zW2ldLmFjdGl2ZV9sb3cpOworCQlpZiAoaXJxID09IGdwaW9fdG9faXJxKGdwaW8pKSB7CisJCQlpbnQgc3RhdGUgPSAoZ3Bpb19nZXRfdmFsdWUoZ3BpbykgPyAxIDogMCkgXiAocGRhdGEtPmJ1dHRvbnNbaV0uYWN0aXZlX2xvdyk7CiAKIAkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIHBkYXRhLT5idXR0b25zW2ldLmtleWNvZGUsIHN0YXRlKTsKIAkJCWlucHV0X3N5bmMoaW5wdXQpOwpAQCAtNzUsMTQgKzc1LDE1IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm5idXR0b25zOyBpKyspIHsKIAkJaW50IGNvZGUgPSBwZGF0YS0+YnV0dG9uc1tpXS5rZXljb2RlOwotCQlpbnQgaXJxID0gSVJRX0dQSU8ocGRhdGEtPmJ1dHRvbnNbaV0uZ3Bpbyk7CisJCWludCBpcnEgPSBncGlvX3RvX2lycShwZGF0YS0+YnV0dG9uc1tpXS5ncGlvKTsKIAogCQlzZXRfaXJxX3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOwogCQllcnJvciA9IHJlcXVlc3RfaXJxKGlycSwgZ3Bpb19rZXlzX2lzciwgSVJRRl9TQU1QTEVfUkFORE9NLAogCQkJCSAgICAgcGRhdGEtPmJ1dHRvbnNbaV0uZGVzYyA/IHBkYXRhLT5idXR0b25zW2ldLmRlc2MgOiAiZ3Bpb19rZXlzIiwKIAkJCQkgICAgIHBkZXYpOwogCQlpZiAoZXJyb3IpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZ3Bpby1rZXlzOiB1bmFibGUgdG8gY2xhaW0gaXJxICVkOyBlcnJvciAlZFxuIiwgaXJxLCByZXQpOworCQkJcHJpbnRrKEtFUk5fRVJSICJncGlvLWtleXM6IHVuYWJsZSB0byBjbGFpbSBpcnEgJWQ7IGVycm9yICVkXG4iLAorCQkJCWlycSwgZXJyb3IpOwogCQkJZ290byBmYWlsOwogCQl9CiAJCXNldF9iaXQoY29kZSwgaW5wdXQtPmtleWJpdCk7CkBAIC05OCw3ICs5OSw3IEBACiAKICBmYWlsOgogCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkKLQkJZnJlZV9pcnEoSVJRX0dQSU8ocGRhdGEtPmJ1dHRvbnNbaV0uZ3BpbyksIHBkZXYpOworCQlmcmVlX2lycShncGlvX3RvX2lycShwZGF0YS0+YnV0dG9uc1tpXS5ncGlvKSwgcGRldik7CiAKIAlpbnB1dF9mcmVlX2RldmljZShpbnB1dCk7CiAKQEAgLTExMiw3ICsxMTMsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5uYnV0dG9uczsgaSsrKSB7Ci0JCWludCBpcnEgPSBJUlFfR1BJTyhwZGF0YS0+YnV0dG9uc1tpXS5ncGlvKTsKKwkJaW50IGlycSA9IGdwaW9fdG9faXJxKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pOwogCQlmcmVlX2lycShpcnEsIHBkZXYpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMKaW5kZXggMjU1YTZlYy4uNGRlNGRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbGtiZC5jCkBAIC0yOTQsOCArMjk0LDEwIEBACiAJZGlzYWJsZV9pcnEoSElMX0lSUSk7CiAJZnJlZV9pcnEoSElMX0lSUSwgaGlsX2Rldi5kZXZfaWQpOwogZXJyMjoKKyNpZiBkZWZpbmVkKENPTkZJR19IUDMwMCkKIAlyZWxlYXNlX3JlZ2lvbihISUxCQVNFICsgSElMX0RBVEEsIDIpOwogZXJyMToKKyNlbmRpZgogCWlucHV0X2ZyZWVfZGV2aWNlKGhpbF9kZXYuZGV2KTsKIAloaWxfZGV2LmRldiA9IE5VTEw7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaW5wb3J0LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2lucG9ydC5jCmluZGV4IDcwMWViZDUuLjc5YjYyNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaW5wb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9pbnBvcnQuYwpAQCAtODQsOCArODQsNiBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGlycSwgaW5wb3J0X2lycSwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSBudW1iZXIgKDU9ZGVmYXVsdCkiKTsKIAotX19vYnNvbGV0ZV9zZXR1cCgiaW5wb3J0X2lycT0iKTsKLQogc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKmlucG9ydF9kZXY7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbnBvcnRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naWJtLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2libS5jCmluZGV4IGRiMjA1OTkuLjI2YzNiMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naWJtLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpYm0uYwpAQCAtNzUsOCArNzUsNiBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGlycSwgbG9naWJtX2lycSwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSBudW1iZXIgKDU9ZGVmYXVsdCkiKTsKIAotX19vYnNvbGV0ZV9zZXR1cCgibG9naWJtX2lycT0iKTsKLQogc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKmxvZ2libV9kZXY7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBsb2dpYm1faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCmluZGV4IGEwZTRhMDMuLjBmZTU4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwpAQCAtOTMsMTIgKzkzLDYgQEAKIAkuYXR0cnMJPSBwc21vdXNlX2F0dHJpYnV0ZXMsCiB9OwogCi1fX29ic29sZXRlX3NldHVwKCJwc21vdXNlX25vZXh0Iik7Ci1fX29ic29sZXRlX3NldHVwKCJwc21vdXNlX3Jlc29sdXRpb249Iik7Ci1fX29ic29sZXRlX3NldHVwKCJwc21vdXNlX3NtYXJ0c2Nyb2xsPSIpOwotX19vYnNvbGV0ZV9zZXR1cCgicHNtb3VzZV9yZXNldGFmdGVyPSIpOwotX19vYnNvbGV0ZV9zZXR1cCgicHNtb3VzZV9yYXRlPSIpOwotCiAvKgogICogcHNtb3VzZV9tdXRleCBwcm90ZWN0cyBhbGwgb3BlcmF0aW9ucyBjaGFuZ2luZyBzdGF0ZSBvZiBtb3VzZQogICogKGNvbm5lY3RpbmcsIGRpc2Nvbm5lY3RpbmcsIGNoYW5naW5nIHJhdGUgb3IgcmVzb2x1dGlvbiB2aWEKQEAgLTk4Nyw4ICs5ODEsMzYgQEAKIHN0YXRpYyB2b2lkIHBzbW91c2VfY2xlYW51cChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewogCXN0cnVjdCBwc21vdXNlICpwc21vdXNlID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOworCXN0cnVjdCBwc21vdXNlICpwYXJlbnQgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmcHNtb3VzZV9tdXRleCk7CisKKwlpZiAoc2VyaW8tPnBhcmVudCAmJiBzZXJpby0+aWQudHlwZSA9PSBTRVJJT19QU19QU1RIUlUpIHsKKwkJcGFyZW50ID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8tPnBhcmVudCk7CisJCXBzbW91c2VfZGVhY3RpdmF0ZShwYXJlbnQpOworCX0KKworCXBzbW91c2VfZGVhY3RpdmF0ZShwc21vdXNlKTsKKworCWlmIChwc21vdXNlLT5jbGVhbnVwKQorCQlwc21vdXNlLT5jbGVhbnVwKHBzbW91c2UpOwogCiAJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKworLyoKKyAqIFNvbWUgYm94ZXMsIHN1Y2ggYXMgSFAgbng3NDAwLCBnZXQgdGVycmlibHkgY29uZnVzZWQgaWYgbW91c2UKKyAqIGlzIG5vdCBmdWxseSBlbmFibGVkIGJlZm9yZSBzdXNwZW5kaW5nL3NodXR0aW5nIGRvd24uCisgKi8KKwlwczJfY29tbWFuZCgmcHNtb3VzZS0+cHMyZGV2LCBOVUxMLCBQU01PVVNFX0NNRF9FTkFCTEUpOworCisJaWYgKHBhcmVudCkgeworCQlpZiAocGFyZW50LT5wdF9kZWFjdGl2YXRlKQorCQkJcGFyZW50LT5wdF9kZWFjdGl2YXRlKHBhcmVudCk7CisKKwkJcHNtb3VzZV9hY3RpdmF0ZShwYXJlbnQpOworCX0KKworCW11dGV4X3VubG9jaygmcHNtb3VzZV9tdXRleCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UuaCBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oCmluZGV4IDFiNzRjYWUuLmNmMWRlOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oCkBAIC02OCw2ICs2OCw3IEBACiAKIAlpbnQgKCpyZWNvbm5lY3QpKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKIAl2b2lkICgqZGlzY29ubmVjdCkoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSk7CiAJaW50ICgqcG9sbCkoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpOwogCiAJdm9pZCAoKnB0X2FjdGl2YXRlKShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCA0OWFjNjk2Li5mMGY5NDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTY1Miw2ICs2NTIsNyBAQAogCXBzbW91c2UtPnNldF9yYXRlID0gc3luYXB0aWNzX3NldF9yYXRlOwogCXBzbW91c2UtPmRpc2Nvbm5lY3QgPSBzeW5hcHRpY3NfZGlzY29ubmVjdDsKIAlwc21vdXNlLT5yZWNvbm5lY3QgPSBzeW5hcHRpY3NfcmVjb25uZWN0OworCXBzbW91c2UtPmNsZWFudXAgPSBzeW5hcHRpY3NfcmVzZXQ7CiAJcHNtb3VzZS0+cGt0c2l6ZSA9IDY7CiAJLyogU3luYXB0aWNzIGNhbiB1c3VhbGx5IHN0YXkgaW4gc3luYyB3aXRob3V0IGV4dHJhIGhlbHAgKi8KIAlwc21vdXNlLT5yZXN5bmNfdGltZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggYzNmZGZjMS4uZWMxOTVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwpAQCAtNzYsMTMgKzc2LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIGk4MDQyIGRlYnVnZ2luZyBtb2RlIG9uIGFuZCBvZmYiKTsKICNlbmRpZgogCi1fX29ic29sZXRlX3NldHVwKCJpODA0Ml9ub2F1eCIpOwotX19vYnNvbGV0ZV9zZXR1cCgiaTgwNDJfbm9tdXgiKTsKLV9fb2Jzb2xldGVfc2V0dXAoImk4MDQyX3VubG9jayIpOwotX19vYnNvbGV0ZV9zZXR1cCgiaTgwNDJfcmVzZXQiKTsKLV9fb2Jzb2xldGVfc2V0dXAoImk4MDQyX2RpcmVjdCIpOwotX19vYnNvbGV0ZV9zZXR1cCgiaTgwNDJfZHVtYmtiZCIpOwotCiAjaW5jbHVkZSAiaTgwNDIuaCIKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhpODA0Ml9sb2NrKTsKQEAgLTcyNCw3ICs3MTcsNyBAQAogCWlmICh+aTgwNDJfcmVhZF9zdGF0dXMoKSAmIEk4MDQyX1NUUl9LRVlMT0NLKSB7CiAJCWlmIChpODA0Ml91bmxvY2spCiAJCQlpODA0Ml9jdHIgfD0gSTgwNDJfQ1RSX0lHTktFWUxPQ0s7Ci0JCSBlbHNlCisJCWVsc2UKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImk4MDQyLmM6IFdhcm5pbmc6IEtleWxvY2sgYWN0aXZlLlxuIik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MDQyX2xvY2ssIGZsYWdzKTsKQEAgLTc5MSwyNyArNzg0LDYgQEAKIAogCiAvKgotICogSGVyZSB3ZSB0cnkgdG8gcmVzZXQgZXZlcnl0aGluZyBiYWNrIHRvIGEgc3RhdGUgaW4gd2hpY2ggdGhlIEJJT1Mgd2lsbCBiZQotICogYWJsZSB0byB0YWxrIHRvIHRoZSBoYXJkd2FyZSB3aGVuIHJlYm9vdGluZy4KLSAqLwotCi1zdGF0aWMgdm9pZCBpODA0Ml9jb250cm9sbGVyX2NsZWFudXAodm9pZCkKLXsKLQlpbnQgaTsKLQotLyoKLSAqIFJlc2V0IGFueXRoaW5nIHRoYXQgaXMgY29ubmVjdGVkIHRvIHRoZSBwb3J0cy4KLSAqLwotCi0JZm9yIChpID0gMDsgaSA8IEk4MDQyX05VTV9QT1JUUzsgaSsrKQotCQlpZiAoaTgwNDJfcG9ydHNbaV0uc2VyaW8pCi0JCQlzZXJpb19jbGVhbnVwKGk4MDQyX3BvcnRzW2ldLnNlcmlvKTsKLQotCWk4MDQyX2NvbnRyb2xsZXJfcmVzZXQoKTsKLX0KLQotCi0vKgogICogaTgwNDJfcGFuaWNfYmxpbmsoKSB3aWxsIGZsYXNoIHRoZSBrZXlib2FyZCBMRURzIGFuZCBpcyBjYWxsZWQgd2hlbgogICoga2VybmVsIHBhbmljcy4gRmxhc2hpbmcgTEVEcyBpcyB1c2VmdWwgZm9yIHVzZXJzIHJ1bm5pbmcgWCB3aG8gbWF5CiAgKiBub3Qgc2VlIHRoZSBjb25zb2xlIGFuZCB3aWxsIGhlbHAgZGlzdGluZ3VzaGluZyBwYW5pY3MgZnJvbSAicmVhbCIKQEAgLTg1NywxMyArODI5LDIyIEBACiAKICN1bmRlZiBERUxBWQogCisjaWZkZWYgQ09ORklHX1BNCiAvKgotICogSGVyZSB3ZSB0cnkgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgQklPUyBzZXR0aW5ncworICogSGVyZSB3ZSB0cnkgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgQklPUyBzZXR0aW5ncy4gV2Ugb25seSB3YW50IHRvCisgKiBkbyB0aGF0IG9uY2UsIHdoZW4gd2UgcmVhbGx5IHN1c3BlbmQsIG5vdCB3aGVuIHdlIHRha2luZyBtZW1vcnkKKyAqIHNuYXBzaG90IGZvciBzd3N1c3AgKGluIHRoaXMgY2FzZSB3ZSdsbCBwZXJmb3JtIHJlcXVpcmVkIGNsZWFudXAKKyAqIGFzIHBhcnQgb2Ygc2h1dGRvd24gcHJvY2VzcykuCiAgKi8KIAogc3RhdGljIGludCBpODA0Ml9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCWk4MDQyX2NvbnRyb2xsZXJfY2xlYW51cCgpOworCWlmIChkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCAhPSBzdGF0ZS5ldmVudCkgeworCQlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkKKwkJCWk4MDQyX2NvbnRyb2xsZXJfcmVzZXQoKTsKKworCQlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtODc3LDYgKzg1OCwxMiBAQAogewogCWludCBlcnJvcjsKIAorLyoKKyAqIERvIG5vdCBib3RoZXIgd2l0aCByZXN0b3Jpbmcgc3RhdGUgaWYgd2UgaGF2ZW4ndCBzdXNwZW5lZCB5ZXQKKyAqLworCWlmIChkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTikKKwkJcmV0dXJuIDA7CisKIAllcnJvciA9IGk4MDQyX2NvbnRyb2xsZXJfY2hlY2soKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTg4Niw5ICs4NzMsMTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAvKgotICogUmVzdG9yZSBwcmUtcmVzdW1lIENUUiB2YWx1ZSBhbmQgZGlzYWJsZSBhbGwgcG9ydHMKKyAqIFJlc3RvcmUgb3JpZ2luYWwgQ1RSIHZhbHVlIGFuZCBkaXNhYmxlIGFsbCBwb3J0cwogICovCiAKKwlpODA0Ml9jdHIgPSBpODA0Ml9pbml0aWFsX2N0cjsKKwlpZiAoaTgwNDJfZGlyZWN0KQorCQlpODA0Ml9jdHIgJj0gfkk4MDQyX0NUUl9YTEFURTsKIAlpODA0Ml9jdHIgfD0gSTgwNDJfQ1RSX0FVWERJUyB8IEk4MDQyX0NUUl9LQkRESVM7CiAJaTgwNDJfY3RyICY9IH4oSTgwNDJfQ1RSX0FVWElOVCB8IEk4MDQyX0NUUl9LQkRJTlQpOwogCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9jdHIsIEk4MDQyX0NNRF9DVExfV0NUUikpIHsKQEAgLTkwOSw4ICs4OTksMTEgQEAKIAogCWk4MDQyX2ludGVycnVwdCgwLCBOVUxMKTsKIAorCWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwogCXJldHVybiAwOwogfQorI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAvKgogICogV2UgbmVlZCB0byByZXNldCB0aGUgODA0MiBiYWNrIHRvIG9yaWdpbmFsIG1vZGUgb24gc3lzdGVtIHNodXRkb3duLApAQCAtOTE5LDcgKzkxMiw3IEBACiAKIHN0YXRpYyB2b2lkIGk4MDQyX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlpODA0Ml9jb250cm9sbGVyX2NsZWFudXAoKTsKKwlpODA0Ml9jb250cm9sbGVyX3Jlc2V0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGk4MDQyX2NyZWF0ZV9rYmRfcG9ydCh2b2lkKQpAQCAtMTE1NCw5ICsxMTQ3LDExIEBACiAJfSwKIAkucHJvYmUJCT0gaTgwNDJfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChpODA0Ml9yZW1vdmUpLAorCS5zaHV0ZG93bgk9IGk4MDQyX3NodXRkb3duLAorI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gaTgwNDJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGk4MDQyX3Jlc3VtZSwKLQkuc2h1dGRvd24JPSBpODA0Ml9zaHV0ZG93biwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTgwNDJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKaW5kZXggYjNlODRkMy4uMTBkOWQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCkBAIC05Nyw3ICs5Nyw3IEBACiAKIGludCBwczJfaXNfa2V5Ym9hcmRfaWQoY2hhciBpZF9ieXRlKQogewotCWNvbnN0IHN0YXRpYyBjaGFyIGtleWJvYXJkX2lkc1tdID0geworCXN0YXRpYyBjb25zdCBjaGFyIGtleWJvYXJkX2lkc1tdID0gewogCQkweGFiLAkvKiBSZWd1bGFyIGtleWJvYXJkcwkJKi8KIAkJMHhhYywJLyogTkNEIFN1biBrZXlib2FyZAkJKi8KIAkJMHgyYiwJLyogVHJ1c3Qga2V5Ym9hcmQsIHRyYW5zbGF0ZWQJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwppbmRleCAxN2M4YzYzYy4uYTE1ZTUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtNzc4LDYgKzc3OCwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzZXJpb19jbGVhbnVwKHN0cnVjdCBzZXJpbyAqc2VyaW8pCit7CisJaWYgKHNlcmlvLT5kcnYgJiYgc2VyaW8tPmRydi0+Y2xlYW51cCkKKwkJc2VyaW8tPmRydi0+Y2xlYW51cChzZXJpbyk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlvX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2VyaW8gKnNlcmlvID0gdG9fc2VyaW9fcG9ydChkZXYpOworCisJc2VyaW9fY2xlYW51cChzZXJpbyk7Cit9CisKIHN0YXRpYyB2b2lkIHNlcmlvX2F0dGFjaF9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KQogewogCWludCBlcnJvcjsKQEAgLTkxMCwxMSArOTIzLDI1IEBACiAKICNlbmRpZiAvKiBDT05GSUdfSE9UUExVRyAqLwogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNlcmlvX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaWYgKGRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0gc3RhdGUuZXZlbnQpIHsKKwkJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpCisJCQlzZXJpb19jbGVhbnVwKHRvX3NlcmlvX3BvcnQoZGV2KSk7CisKKwkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNlcmlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNlcmlvICpzZXJpbyA9IHRvX3NlcmlvX3BvcnQoZGV2KTsKIAotCWlmIChzZXJpb19yZWNvbm5lY3RfZHJpdmVyKHNlcmlvKSkgeworCWlmIChkZXYtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX09OICYmCisJICAgIHNlcmlvX3JlY29ubmVjdF9kcml2ZXIoc2VyaW8pKSB7CiAJCS8qCiAJCSAqIERyaXZlciByZS1wcm9iaW5nIGNhbiB0YWtlIGEgd2hpbGUsIHNvIGJldHRlciBsZXQga3NlcmlvZAogCQkgKiBkZWFsIHdpdGggaXQuCkBAIC05MjIsOCArOTQ5LDExIEBACiAJCXNlcmlvX3Jlc2NhbihzZXJpbyk7CiAJfQogCisJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogLyogY2FsbGVkIGZyb20gc2VyaW9fZHJpdmVyLT5jb25uZWN0L2Rpc2Nvbm5lY3QgbWV0aG9kcyB1bmRlciBzZXJpb19tdXRleCAqLwogaW50IHNlcmlvX29wZW4oc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KQpAQCAtOTc0LDcgKzEwMDQsMTEgQEAKIAkudWV2ZW50CQk9IHNlcmlvX3VldmVudCwKIAkucHJvYmUJCT0gc2VyaW9fZHJpdmVyX3Byb2JlLAogCS5yZW1vdmUJCT0gc2VyaW9fZHJpdmVyX3JlbW92ZSwKKwkuc2h1dGRvd24JPSBzZXJpb19zaHV0ZG93biwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IHNlcmlvX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzZXJpb19yZXN1bWUsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNlcmlvX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKaW5kZXggY2QyNTFlZi4uMGEyNmUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKQEAgLTU0Niw3ICs1NDYsNyBAQAogCQkJdHMtPnNwaS0+ZGV2LmJ1c19pZCwgdHMtPnRjLmlnbm9yZSwgUnQpOwogI2VuZGlmCiAJCWhydGltZXJfc3RhcnQoJnRzLT50aW1lciwga3RpbWVfc2V0KDAsIFRTX1BPTExfUEVSSU9EKSwKLQkJCSAgICAgIEhSVElNRVJfUkVMKTsKKwkJCSAgICAgIEhSVElNRVJfTU9ERV9SRUwpOwogCQlyZXR1cm47CiAJfQogCkBAIC01NzgsNyArNTc4LDggQEAKICNlbmRpZgogCX0KIAotCWhydGltZXJfc3RhcnQoJnRzLT50aW1lciwga3RpbWVfc2V0KDAsIFRTX1BPTExfUEVSSU9EKSwgSFJUSU1FUl9SRUwpOworCWhydGltZXJfc3RhcnQoJnRzLT50aW1lciwga3RpbWVfc2V0KDAsIFRTX1BPTExfUEVSSU9EKSwKKwkJCUhSVElNRVJfTU9ERV9SRUwpOwogfQogCiBzdGF0aWMgaW50IGFkczc4NDZfZGVib3VuY2Uodm9pZCAqYWRzLCBpbnQgZGF0YV9pZHgsIGludCAqdmFsKQpAQCAtNjY3LDcgKzY2OCw3IEBACiAJCQkJc3RhdHVzKTsKIH0KIAotc3RhdGljIGludCBhZHM3ODQ2X3RpbWVyKHN0cnVjdCBocnRpbWVyICpoYW5kbGUpCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgYWRzNzg0Nl90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqaGFuZGxlKQogewogCXN0cnVjdCBhZHM3ODQ2CSp0cyA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBhZHM3ODQ2LCB0aW1lcik7CiAJaW50CQlzdGF0dXMgPSAwOwpAQCAtNzI0LDcgKzcyNSw3IEBACiAJCQlkaXNhYmxlX2lycSh0cy0+c3BpLT5pcnEpOwogCQkJdHMtPnBlbmRpbmcgPSAxOwogCQkJaHJ0aW1lcl9zdGFydCgmdHMtPnRpbWVyLCBrdGltZV9zZXQoMCwgVFNfUE9MTF9ERUxBWSksCi0JCQkJCUhSVElNRVJfUkVMKTsKKwkJCQkJSFJUSU1FUl9NT0RFX1JFTCk7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHMtPmxvY2ssIGZsYWdzKTsKQEAgLTg2Miw3ICs4NjMsNyBAQAogCXRzLT5zcGkgPSBzcGk7CiAJdHMtPmlucHV0ID0gaW5wdXRfZGV2OwogCi0JaHJ0aW1lcl9pbml0KCZ0cy0+dGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9SRUwpOworCWhydGltZXJfaW5pdCgmdHMtPnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwogCXRzLT50aW1lci5mdW5jdGlvbiA9IGFkczc4NDZfdGltZXI7CiAKIAlzcGluX2xvY2tfaW5pdCgmdHMtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvTWFrZWZpbGUgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9NYWtlZmlsZQppbmRleCA4MzViODA2Li41MTU4YmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9NYWtlZmlsZQpAQCAtMSw4ICsxLDggQEAKLWdpZ2FzZXQteSA6PSBjb21tb24ubyBpbnRlcmZhY2UubyBwcm9jLm8gZXYtbGF5ZXIubyBpNGwubwotdXNiX2dpZ2FzZXQteSA6PSB1c2ItZ2lnYXNldC5vIGFzeW5jZGF0YS5vCitnaWdhc2V0LXkgOj0gY29tbW9uLm8gaW50ZXJmYWNlLm8gcHJvYy5vIGV2LWxheWVyLm8gaTRsLm8gYXN5bmNkYXRhLm8KK3VzYl9naWdhc2V0LXkgOj0gdXNiLWdpZ2FzZXQubwogYmFzX2dpZ2FzZXQteSA6PSBiYXMtZ2lnYXNldC5vIGlzb2NkYXRhLm8KLXNlcl9naWdhc2V0LXkgOj0gc2VyLWdpZ2FzZXQubyBhc3luY2RhdGEubworc2VyX2dpZ2FzZXQteSA6PSBzZXItZ2lnYXNldC5vCiAKIG9iai0kKENPTkZJR19HSUdBU0VUX00xMDUpICs9IHVzYl9naWdhc2V0Lm8gZ2lnYXNldC5vCiBvYmotJChDT05GSUdfR0lHQVNFVF9CQVNFKSArPSBiYXNfZ2lnYXNldC5vIGdpZ2FzZXQubwotb2JqLSQoQ09ORklHX0dJR0FTRVRfTTEwNSkgKz0gc2VyX2dpZ2FzZXQubyBnaWdhc2V0Lm8KK29iai0kKENPTkZJR19HSUdBU0VUX00xMDEpICs9IHNlcl9naWdhc2V0Lm8gZ2lnYXNldC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9hc3luY2RhdGEuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jCmluZGV4IGRkZjVlOTIuLmYyZjEwOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jCkBAIC00NDQsNiArNDQ0LDcgQEAKIAkJYXRvbWljX3NldCgmaW5idWYtPmhlYWQsIGhlYWQpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfbTEweF9pbnB1dCk7CiAKIAogLyogPT0gZGF0YSBvdXRwdXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtNTkxLDMgKzU5Miw0IEBACiAKIAlyZXR1cm4gbGVuOwkvKiBvayBzbyBmYXIgKi8KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGdpZ2FzZXRfbTEweF9zZW5kX3NrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKaW5kZXggNGUzZjEyNy4uMWIyZGY4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwpAQCAtMTY4MCw3ICsxNjgwLDcgQEAKIAkgKiAtIHdlIGhpdCBhIGdhcCBpbiB0aGUgc2VxdWVuY2UsIHNvIG5vIHJlYXNzZW1ibHkvcHJvY2Vzc2luZyBpcyAKIAkgKiAgIHBvc3NpYmxlICgnc3RhcnQnIHdvdWxkIGJlIHNldCB0byBOVUxMKQogCSAqCi0JICogYWxnb3JpZ2h0bSBmb3IgdGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBjb2RlIGluIHRoZSBib29rCisJICogYWxnb3JpdGhtIGZvciB0aGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIGNvZGUgaW4gdGhlIGJvb2sKIAkgKiAnUFBQIERlc2lnbiBBbmQgRGVidWdnaW5nJyBieSBKYW1lcyBDYXJsc29uIChBZGRpc29uLVdlc2xleSkKIAkgKi8KICAgCXdoaWxlIChzdGFydCAhPSBOVUxMIHx8IG5ld2ZyYWcgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0vdm14LmMgYi9kcml2ZXJzL2t2bS92bXguYwppbmRleCAxZTY0MGI4Li5mZDRlOTE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9rdm0vdm14LmMKKysrIGIvZHJpdmVycy9rdm0vdm14LmMKQEAgLTE4NzksMTIgKzE4NzksNiBAQAogCiAJYXNtICgibW92ICUwLCAlJWRzOyBtb3YgJTAsICUlZXMiIDogOiAiciIoX19VU0VSX0RTKSk7CiAKLQkvKgotCSAqIFByb2ZpbGUgS1ZNIGV4aXQgUklQczoKLQkgKi8KLQlpZiAodW5saWtlbHkocHJvZl9vbiA9PSBLVk1fUFJPRklMSU5HKSkKLQkJcHJvZmlsZV9oaXQoS1ZNX1BST0ZJTElORywgKHZvaWQgKil2bWNzX3JlYWRsKEdVRVNUX1JJUCkpOwotCiAJa3ZtX3J1bi0+ZXhpdF90eXBlID0gMDsKIAlpZiAoZmFpbCkgewogCQlrdm1fcnVuLT5leGl0X3R5cGUgPSBLVk1fRVhJVF9UWVBFX0ZBSUxfRU5UUlk7CkBAIC0xOTA3LDYgKzE5MDEsMTIgQEAKIAogCQkJcmVsb2FkX3RzcygpOwogCQl9CisJCS8qCisJCSAqIFByb2ZpbGUgS1ZNIGV4aXQgUklQczoKKwkJICovCisJCWlmICh1bmxpa2VseShwcm9mX29uID09IEtWTV9QUk9GSUxJTkcpKQorCQkJcHJvZmlsZV9oaXQoS1ZNX1BST0ZJTElORywgKHZvaWQgKil2bWNzX3JlYWRsKEdVRVNUX1JJUCkpOworCiAJCXZjcHUtPmxhdW5jaGVkID0gMTsKIAkJa3ZtX3J1bi0+ZXhpdF90eXBlID0gS1ZNX0VYSVRfVFlQRV9WTV9FWElUOwogCQlyID0ga3ZtX2hhbmRsZV9leGl0KGt2bV9ydW4sIHZjcHUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKaW5kZXggODAxYTk3NC4uN2UyNzA3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCkBAIC0xNSw3ICsxNSw3IEBACiAKICNkZWZpbmUgTUFYX1BNVV9MRVZFTCAweEZGCiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcG11X2JhY2tsaWdodF9kYXRhOworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIHBtdV9iYWNrbGlnaHRfZGF0YTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socG11X2JhY2tsaWdodF9sb2NrKTsKIHN0YXRpYyBpbnQgc2xlZXBpbmc7CiBzdGF0aWMgdTggYmxfY3VydmVbRkJfQkFDS0xJR0hUX0xFVkVMU107CkBAIC03Miw3ICs3Miw3IEBACiB7CiAJc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBsZXZlbCA9IGJkLT5wcm9wcy0+YnJpZ2h0bmVzczsKKwlpbnQgbGV2ZWwgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwbXVfYmFja2xpZ2h0X2xvY2ssIGZsYWdzKTsKIApAQCAtODAsOCArODAsOCBAQAogCWlmIChzbGVlcGluZykKIAkJZ290byBvdXQ7CiAKLQlpZiAoYmQtPnByb3BzLT5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LIHx8Ci0JICAgIGJkLT5wcm9wcy0+ZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKKwlpZiAoYmQtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTksgfHwKKwkgICAgYmQtPnByb3BzLmZiX2JsYW5rICE9IEZCX0JMQU5LX1VOQkxBTkspCiAJCWxldmVsID0gMDsKIAogCWlmIChsZXZlbCA+IDApIHsKQEAgLTEwNywxNCArMTA3LDEzIEBACiAKIHN0YXRpYyBpbnQgcG11X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7Ci0JcmV0dXJuIGJkLT5wcm9wcy0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gYmQtPnByb3BzLmJyaWdodG5lc3M7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcG11X2JhY2tsaWdodF9kYXRhID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBwbXVfYmFja2xpZ2h0X2RhdGEgPSB7CiAJLmdldF9icmlnaHRuZXNzCT0gcG11X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKIAkudXBkYXRlX3N0YXR1cwk9IHBtdV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKLQkubWF4X2JyaWdodG5lc3MJPSAoRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDEpLAorCiB9OwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xNTIsOSArMTUxLDEwIEBACiAJCXByaW50aygicG11Ymw6IEJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CisJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDE7CiAJcG11X2JhY2tsaWdodF9pbml0X2N1cnZlKDB4N0YsIDB4NDYsIDB4MEUpOwogCi0JbGV2ZWwgPSBwbXVfYmFja2xpZ2h0X2RhdGEubWF4X2JyaWdodG5lc3M7CisJbGV2ZWwgPSBiZC0+cHJvcHMubWF4X2JyaWdodG5lc3M7CiAKIAlpZiAoYXV0b3NhdmUpIHsKIAkJLyogcmVhZCBhdXRvc2F2ZWQgdmFsdWUgaWYgYXZhaWxhYmxlICovCkBAIC0xNjQsMTkgKzE2NCwxMiBAQAogCiAJCWxldmVsID0gcG11X2JhY2tsaWdodF9jdXJ2ZV9sb29rdXAoCiAJCQkJKHJlcS5yZXBseVswXSA+PiA0KSAqCi0JCQkJcG11X2JhY2tsaWdodF9kYXRhLm1heF9icmlnaHRuZXNzIC8gMTUpOworCQkJCWJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyAvIDE1KTsKIAl9CiAKLQlkb3duKCZiZC0+c2VtKTsKLQliZC0+cHJvcHMtPmJyaWdodG5lc3MgPSBsZXZlbDsKLQliZC0+cHJvcHMtPnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKLQliZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMoYmQpOwotCXVwKCZiZC0+c2VtKTsKLQotCW11dGV4X2xvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKLQlpZiAoIXBtYWNfYmFja2xpZ2h0KQotCQlwbWFjX2JhY2tsaWdodCA9IGJkOwotCW11dGV4X3VubG9jaygmcG1hY19iYWNrbGlnaHRfbXV0ZXgpOworCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gbGV2ZWw7CisJYmQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CiAKIAlwcmludGsoInBtdWJsOiBCYWNrbGlnaHQgaW5pdGlhbGl6ZWQgKCVzKVxuIiwgbmFtZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwppbmRleCA4NzQxMGRiLi45MWQyNTc5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwpAQCAtNzAsNiArNzAsNyBAQAogCWRlcGVuZHMgb24gSTJDCiAKIGNvbmZpZyBWSURFT19CVUYKKwlkZXBlbmRzIG9uIFBDSQogCXRyaXN0YXRlCiAKIGNvbmZpZyBWSURFT19CVUZfRFZCCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9jb21tb24vS2NvbmZpZwppbmRleCBmMzNlNWQ5Li5jMTIwMTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL0tjb25maWcKQEAgLTUsOCArNSw0IEBACiBjb25maWcgVklERU9fU0FBNzE0Nl9WVgogCXRyaXN0YXRlCiAJc2VsZWN0IFZJREVPX0JVRgotCXNlbGVjdCBWSURFT19WSURFT0JVRgogCXNlbGVjdCBWSURFT19TQUE3MTQ2Ci0KLWNvbmZpZyBWSURFT19WSURFT0JVRgotCXRyaXN0YXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1mdW5jdGlvbnMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWZ1bmN0aW9ucy5jCmluZGV4IDlhOGRkODcuLmNiZjdjMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWZ1bmN0aW9ucy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWZ1bmN0aW9ucy5jCkBAIC0yNTYsNiArMjU2LDExMiBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAorLyogUkM1IGRlY29kaW5nIHN0dWZmLCBtb3ZlZCBmcm9tIGJ0dHYtaW5wdXQuYyB0byBzaGFyZSBpdCB3aXRoCisgKiBzYWE3MTM0ICovCisKKy8qIGRlY29kZSByYXcgYml0IHBhdHRlcm4gdG8gUkM1IGNvZGUgKi8KK3UzMiBpcl9yYzVfZGVjb2RlKHVuc2lnbmVkIGludCBjb2RlKQoreworCXVuc2lnbmVkIGludCBvcmdfY29kZSA9IGNvZGU7CisJdW5zaWduZWQgaW50IHBhaXI7CisJdW5zaWduZWQgaW50IHJjNSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTQ7ICsraSkgeworCQlwYWlyID0gY29kZSAmIDB4MzsKKwkJY29kZSA+Pj0gMjsKKworCQlyYzUgPDw9IDE7CisJCXN3aXRjaCAocGFpcikgeworCQljYXNlIDA6CisJCWNhc2UgMjoKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlyYzUgfD0gMTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlkcHJpbnRrKDEsICJpci1jb21tb246IGlyX3JjNV9kZWNvZGUoJXgpIGJhZCBjb2RlXG4iLCBvcmdfY29kZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlkcHJpbnRrKDEsICJpci1jb21tb246IGNvZGU9JXgsIHJjNT0leCwgc3RhcnQ9JXgsIHRvZ2dsZT0leCwgYWRkcmVzcz0leCwgIgorCQkiaW5zdHI9JXhcbiIsIHJjNSwgb3JnX2NvZGUsIFJDNV9TVEFSVChyYzUpLAorCQlSQzVfVE9HR0xFKHJjNSksIFJDNV9BRERSKHJjNSksIFJDNV9JTlNUUihyYzUpKTsKKwlyZXR1cm4gcmM1OworfQorCit2b2lkIGlyX3JjNV90aW1lcl9lbmQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBjYXJkX2lyICppciA9IChzdHJ1Y3QgY2FyZF9pciAqKWRhdGE7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJdW5zaWduZWQgbG9uZyBjdXJyZW50X2ppZmZpZXMsIHRpbWVvdXQ7CisJdTMyIGdhcDsKKwl1MzIgcmM1ID0gMDsKKworCS8qIGdldCB0aW1lICovCisJY3VycmVudF9qaWZmaWVzID0gamlmZmllczsKKwlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKKworCS8qIGF2b2lkIG92ZXJmbG93IHdpdGggZ2FwID4xcyAqLworCWlmICh0di50dl9zZWMgLSBpci0+YmFzZV90aW1lLnR2X3NlYyA+IDEpIHsKKwkJZ2FwID0gMjAwMDAwOworCX0gZWxzZSB7CisJCWdhcCA9IDEwMDAwMDAgKiAodHYudHZfc2VjIC0gaXItPmJhc2VfdGltZS50dl9zZWMpICsKKwkJICAgIHR2LnR2X3VzZWMgLSBpci0+YmFzZV90aW1lLnR2X3VzZWM7CisJfQorCisJLyogQWxsb3cgc29tZSB0aW1tZXIgaml0dGVyIChSQzUgaXMgfjI0bXMgYW55d2F5IHNvIHRoaXMgaXMgb2spICovCisJaWYgKGdhcCA8IDI4MDAwKSB7CisJCWRwcmludGsoMSwgImlyLWNvbW1vbjogc3B1cmlvdXMgdGltZXJfZW5kXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlyLT5hY3RpdmUgPSAwOworCWlmIChpci0+bGFzdF9iaXQgPCAyMCkgeworCQkvKiBpZ25vcmUgc3B1cmlvdXMgY29kZXMgKGNhdXNlZCBieSBsaWdodC9vdGhlciByZW1vdGVzKSAqLworCQlkcHJpbnRrKDEsICJpci1jb21tb246IHNob3J0IGNvZGU6ICV4XG4iLCBpci0+Y29kZSk7CisJfSBlbHNlIHsKKwkJaXItPmNvZGUgPSAoaXItPmNvZGUgPDwgaXItPnNoaWZ0X2J5KSB8IDE7CisJCXJjNSA9IGlyX3JjNV9kZWNvZGUoaXItPmNvZGUpOworCisJCS8qIHR3byBzdGFydCBiaXRzPyAqLworCQlpZiAoUkM1X1NUQVJUKHJjNSkgIT0gaXItPnN0YXJ0KSB7CisJCQlkcHJpbnRrKDEsICJpci1jb21tb246IHJjNSBzdGFydCBiaXRzIGludmFsaWQ6ICV1XG4iLCBSQzVfU1RBUlQocmM1KSk7CisKKwkJCS8qIHJpZ2h0IGFkZHJlc3M/ICovCisJCX0gZWxzZSBpZiAoUkM1X0FERFIocmM1KSA9PSBpci0+YWRkcikgeworCQkJdTMyIHRvZ2dsZSA9IFJDNV9UT0dHTEUocmM1KTsKKwkJCXUzMiBpbnN0ciA9IFJDNV9JTlNUUihyYzUpOworCisJCQkvKiBHb29kIGNvZGUsIGRlY2lkZSBpZiByZXBlYXQvcmVwcmVzcyAqLworCQkJaWYgKHRvZ2dsZSAhPSBSQzVfVE9HR0xFKGlyLT5sYXN0X3JjNSkgfHwKKwkJCSAgICBpbnN0ciAhPSBSQzVfSU5TVFIoaXItPmxhc3RfcmM1KSkgeworCQkJCWRwcmludGsoMSwgImlyLWNvbW1vbjogaW5zdHJ1Y3Rpb24gJXgsIHRvZ2dsZSAleFxuIiwgaW5zdHIsCisJCQkJCXRvZ2dsZSk7CisJCQkJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwgJmlyLT5pcik7CisJCQkJaXJfaW5wdXRfa2V5ZG93bihpci0+ZGV2LCAmaXItPmlyLCBpbnN0ciwKKwkJCQkJCSBpbnN0cik7CisJCQl9CisKKwkJCS8qIFNldC9yZXNldCBrZXktdXAgdGltZXIgKi8KKwkJCXRpbWVvdXQgPSBjdXJyZW50X2ppZmZpZXMgKyAoNTAwICsgaXItPnJjNV9rZXlfdGltZW91dAorCQkJCQkJICAgICAqIEhaKSAvIDEwMDA7CisJCQltb2RfdGltZXIoJmlyLT50aW1lcl9rZXl1cCwgdGltZW91dCk7CisKKwkJCS8qIFNhdmUgY29kZSBmb3IgcmVwZWF0IHRlc3QgKi8KKwkJCWlyLT5sYXN0X3JjNSA9IHJjNTsKKwkJfQorCX0KK30KKwordm9pZCBpcl9yYzVfdGltZXJfa2V5dXAodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBjYXJkX2lyICppciA9IChzdHJ1Y3QgY2FyZF9pciAqKWRhdGE7CisKKwlkcHJpbnRrKDEsICJpci1jb21tb246IGtleSByZWxlYXNlZFxuIik7CisJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwgJmlyLT5pcik7Cit9CisKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2lucHV0X2luaXQpOwogRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfbm9rZXkpOwogRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfa2V5ZG93bik7CkBAIC0yNjUsNiArMzcxLDEwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChpcl9kZWNvZGVfYmlwaGFzZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9kZWNvZGVfcHVsc2VkaXN0YW5jZSk7CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX3JjNV9kZWNvZGUpOworRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmM1X3RpbWVyX2VuZCk7CitFWFBPUlRfU1lNQk9MX0dQTChpcl9yYzVfdGltZXJfa2V5dXApOworCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1iYXNpYy1vZmZzZXQ6IDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYwppbmRleCAwZTk0OGE1Li4wM2I0N2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCkBAIC0xNjA2LDMgKzE2MDYsMTc0IEBACiB9OwogCiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19idWRnZXRfY2lfb2xkKTsKKworLyoKKyAqIE1hcmMgRmFyZ2FzIDx0ZWxlbmlla29AdGVsZW5pZWtvLmNvbT4KKyAqIHRoaXMgaXMgdGhlIHJlbW90ZSBjb250cm9sIHRoYXQgY29tZXMgd2l0aCB0aGUgYXN1cyBwNzEzMQorICogd2hpY2ggaGFzIGEgbGFiZWwgc2F5aW5nIGlzICJNb2RlbCBQQy0zOSIKKyAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXN1c19wYzM5W0lSX0tFWVRBQl9TSVpFXSA9IHsKKwkvKiBLZXlzIDAgdG8gOSAqLworCVsgMHgxNSBdID0gS0VZXzAsCisJWyAweDI5IF0gPSBLRVlfMSwKKwlbIDB4MmQgXSA9IEtFWV8yLAorCVsgMHgyYiBdID0gS0VZXzMsCisJWyAweDA5IF0gPSBLRVlfNCwKKwlbIDB4MGQgXSA9IEtFWV81LAorCVsgMHgwYiBdID0gS0VZXzYsCisJWyAweDMxIF0gPSBLRVlfNywKKwlbIDB4MzUgXSA9IEtFWV84LAorCVsgMHgzMyBdID0gS0VZXzksCisKKwlbIDB4M2UgXSA9IEtFWV9SQURJTywJCS8qIHJhZGlvICovCisJWyAweDAzIF0gPSBLRVlfTUVOVSwJCS8qIGR2ZC9tZW51ICovCisJWyAweDJhIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDE5IF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDB4MzcgXSA9IEtFWV9VUCwKKwlbIDB4M2IgXSA9IEtFWV9ET1dOLAorCVsgMHgyNyBdID0gS0VZX0xFRlQsCisJWyAweDJmIF0gPSBLRVlfUklHSFQsCisJWyAweDI1IF0gPSBLRVlfVklERU8sCQkvKiB2aWRlbyAqLworCVsgMHgzOSBdID0gS0VZX0FVRElPLAkJLyogbXVzaWMgKi8KKworCVsgMHgyMSBdID0gS0VZX1RWLAkJLyogdHYgKi8KKwlbIDB4MWQgXSA9IEtFWV9FWElULAkJLyogYmFjayAqLworCVsgMHgwYSBdID0gS0VZX0NIQU5ORUxVUCwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLworCVsgMHgxYiBdID0gS0VZX0NIQU5ORUxET1dOLAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCisJWyAweDFhIF0gPSBLRVlfRU5URVIsCQkvKiBlbnRlciAqLworCisJWyAweDA2IF0gPSBLRVlfUEFVU0UsCQkvKiBwbGF5L3BhdXNlICovCisJWyAweDFlIF0gPSBLRVlfUFJFVklPVVMsCS8qIHJldyAqLworCVsgMHgyNiBdID0gS0VZX05FWFQsCQkvKiBmb3J3YXJkICovCisJWyAweDBlIF0gPSBLRVlfUkVXSU5ELAkJLyogYmFja3dhcmQgPDwgKi8KKwlbIDB4M2EgXSA9IEtFWV9GQVNURk9SV0FSRCwJLyogZm9yd2FyZCA+PiAqLworCVsgMHgzNiBdID0gS0VZX1NUT1AsCisJWyAweDJlIF0gPSBLRVlfUkVDT1JELAkJLyogcmVjb3JkaW5nICovCisJWyAweDE2IF0gPSBLRVlfUE9XRVIsCQkvKiB0aGUgYnV0dG9uIHRoYXQgcmVhZHMgImNsb3NlIiAqLworCisJWyAweDExIF0gPSBLRVlfWk9PTSwJCS8qIGZ1bGwgc2NyZWVuICovCisJWyAweDEzIF0gPSBLRVlfTUFDUk8sCQkvKiByZWNhbGwgKi8KKwlbIDB4MjMgXSA9IEtFWV9IT01FLAkJLyogaG9tZSAqLworCVsgMHgwNSBdID0gS0VZX1BWUiwJCS8qIHBpY3R1cmUgKi8KKwlbIDB4M2QgXSA9IEtFWV9NVVRFLAkJLyogbXV0ZSAqLworCVsgMHgwMSBdID0gS0VZX0RWRCwJCS8qIGR2ZCAqLworfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXN1c19wYzM5KTsKKworCisvKiBFbmNvcmUgRU5MVFYtRk0gIC0gYmxhY2sgcGxhc3RpYywgd2hpdGUgZnJvbnQgY292ZXIgd2l0aCB3aGl0ZSBnbG93aW5nIGJ1dHRvbnMKKyAgICBKdWFuIFBhYmxvIFNvcm1hbmkgPHNvcm1hbkBnbWFpbC5jb20+ICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZbSVJfS0VZVEFCX1NJWkVdID0geworCisJLyogUG93ZXIgYnV0dG9uIGRvZXMgbm90aGluZywgbmVpdGhlciBpbiBXaW5kb3dzIGFwcCwKKwkgYWx0aG91Z2ggaXQgc2VuZHMgZGF0YSAodXNlZCBmb3IgQklPUyB3YWtldXA/KSAqLworCVsgMHgwZCBdID0gS0VZX01VVEUsCisKKwlbIDB4MWUgXSA9IEtFWV9UViwKKwlbIDB4MDAgXSA9IEtFWV9WSURFTywKKwlbIDB4MDEgXSA9IEtFWV9BVURJTywJCS8qIG11c2ljICovCisJWyAweDAyIF0gPSBLRVlfTUhQLAkJLyogcGljdHVyZSAqLworCisJWyAweDFmIF0gPSBLRVlfMSwKKwlbIDB4MDMgXSA9IEtFWV8yLAorCVsgMHgwNCBdID0gS0VZXzMsCisJWyAweDA1IF0gPSBLRVlfNCwKKwlbIDB4MWMgXSA9IEtFWV81LAorCVsgMHgwNiBdID0gS0VZXzYsCisJWyAweDA3IF0gPSBLRVlfNywKKwlbIDB4MDggXSA9IEtFWV84LAorCVsgMHgxZCBdID0gS0VZXzksCisJWyAweDBhIF0gPSBLRVlfMCwKKworCVsgMHgwOSBdID0gS0VZX0xJU1QsICAgICAgICAvKiAtLy0tICovCisJWyAweDBiIF0gPSBLRVlfTEFTVCwgICAgICAgIC8qIHJlY2FsbCAqLworCisJWyAweDE0IF0gPSBLRVlfSE9NRSwJCS8qIHdpbiBzdGFydCBtZW51ICovCisJWyAweDE1IF0gPSBLRVlfRVhJVCwJCS8qIGV4aXQgKi8KKwlbIDB4MTYgXSA9IEtFWV9VUCwKKwlbIDB4MTIgXSA9IEtFWV9ET1dOLAorCVsgMHgwYyBdID0gS0VZX1JJR0hULAorCVsgMHgxNyBdID0gS0VZX0xFRlQsCisKKwlbIDB4MTggXSA9IEtFWV9FTlRFUiwJCS8qIE9LICovCisKKwlbIDB4MGUgXSA9IEtFWV9FU0MsCisJWyAweDEzIF0gPSBLRVlfRCwJCS8qIGRlc2t0b3AgKi8KKwlbIDB4MTEgXSA9IEtFWV9UQUIsCisJWyAweDE5IF0gPSBLRVlfU1dJVENIVklERU9NT0RFLAkvKiBzd2l0Y2ggKi8KKworCVsgMHgxYSBdID0gS0VZX01FTlUsCisJWyAweDFiIF0gPSBLRVlfWk9PTSwJCS8qIGZ1bGxzY3JlZW4gKi8KKwlbIDB4NDQgXSA9IEtFWV9USU1FLAkJLyogdGltZSBzaGlmdCAqLworCVsgMHg0MCBdID0gS0VZX01PREUsCQkvKiBzb3VyY2UgKi8KKworCVsgMHg1YSBdID0gS0VZX1JFQ09SRCwKKwlbIDB4NDIgXSA9IEtFWV9QTEFZLAkJLyogcGxheS9wYXVzZSAqLworCVsgMHg0NSBdID0gS0VZX1NUT1AsCisJWyAweDQzIF0gPSBLRVlfQ0FNRVJBLAkJLyogY2FtZXJhIGljb24gKi8KKworCVsgMHg0OCBdID0gS0VZX1JFV0lORCwKKwlbIDB4NGEgXSA9IEtFWV9GQVNURk9SV0FSRCwKKwlbIDB4NDkgXSA9IEtFWV9QUkVWSU9VUywKKwlbIDB4NGIgXSA9IEtFWV9ORVhULAorCisJWyAweDRjIF0gPSBLRVlfRkFWT1JJVEVTLAkvKiB0diB3YWxsICovCisJWyAweDRkIF0gPSBLRVlfU09VTkQsCQkvKiBEVkQgc291bmQgKi8KKwlbIDB4NGUgXSA9IEtFWV9MQU5HVUFHRSwJLyogRFZEIGxhbmcgKi8KKwlbIDB4NGYgXSA9IEtFWV9URVhULAkJLyogRFZEIHRleHQgKi8KKworCVsgMHg1MCBdID0gS0VZX1NMRUVQLAkJLyogc2h1dGRvd24gKi8KKwlbIDB4NTEgXSA9IEtFWV9NT0RFLAkJLyogc3RlcmVvID4gbWFpbiAqLworCVsgMHg1MiBdID0gS0VZX1NFTEVDVCwJCS8qIHN0ZXJlbyA+IHNhcCAqLworCVsgMHg1MyBdID0gS0VZX1BST0cxLAkJLyogdGVsZXRleHQgKi8KKworCisJWyAweDU5IF0gPSBLRVlfUkVELAkJLyogQVAxICovCisJWyAweDQxIF0gPSBLRVlfR1JFRU4sCQkvKiBBUDIgKi8KKwlbIDB4NDcgXSA9IEtFWV9ZRUxMT1csCQkvKiBBUDMgKi8KKwlbIDB4NTcgXSA9IEtFWV9CTFVFLAkJLyogQVA0ICovCisKKworfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW5jb3JlX2VubHR2KTsKKworLyogZm9yIHRoZSBUZWNobm90cmVuZCAxNTAwIGJ1bmRsZWQgcmVtb3RlOiAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfdHRfMTUwMFtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDAxIF0gPSBLRVlfUE9XRVIsCisJWyAweDAyIF0gPSBLRVlfU0hVRkZMRSwJLyogPyBkb3VibGUtYXJyb3cga2V5ICovCisJWyAweDAzIF0gPSBLRVlfMSwKKwlbIDB4MDQgXSA9IEtFWV8yLAorCVsgMHgwNSBdID0gS0VZXzMsCisJWyAweDA2IF0gPSBLRVlfNCwKKwlbIDB4MDcgXSA9IEtFWV81LAorCVsgMHgwOCBdID0gS0VZXzYsCisJWyAweDA5IF0gPSBLRVlfNywKKwlbIDB4MGEgXSA9IEtFWV84LAorCVsgMHgwYiBdID0gS0VZXzksCisJWyAweDBjIF0gPSBLRVlfMCwKKwlbIDB4MGQgXSA9IEtFWV9VUCwKKwlbIDB4MGUgXSA9IEtFWV9MRUZULAorCVsgMHgwZiBdID0gS0VZX09LLAorCVsgMHgxMCBdID0gS0VZX1JJR0hULAorCVsgMHgxMSBdID0gS0VZX0RPV04sCisJWyAweDEyIF0gPSBLRVlfSU5GTywKKwlbIDB4MTMgXSA9IEtFWV9FWElULAorCVsgMHgxNCBdID0gS0VZX1JFRCwKKwlbIDB4MTUgXSA9IEtFWV9HUkVFTiwKKwlbIDB4MTYgXSA9IEtFWV9ZRUxMT1csCisJWyAweDE3IF0gPSBLRVlfQkxVRSwKKwlbIDB4MTggXSA9IEtFWV9NVVRFLAorCVsgMHgxOSBdID0gS0VZX1RFWFQsCisJWyAweDFhIF0gPSBLRVlfTU9ERSwJLyogPyBUVi9SYWRpbyAqLworCVsgMHgyMSBdID0gS0VZX09QVElPTiwKKwlbIDB4MjIgXSA9IEtFWV9FUEcsCisJWyAweDIzIF0gPSBLRVlfQ0hBTk5FTFVQLAorCVsgMHgyNCBdID0gS0VZX0NIQU5ORUxET1dOLAorCVsgMHgyNSBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHgyNiBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAweDI3IF0gPSBLRVlfU0VUVVAsCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc190dF8xNTAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKaW5kZXggYjhkY2ZhMS4uYzE4YTVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogCiAJREVCX0VFKCgiZGV2OiVwXG4iLGRldikpOwogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaSwgU0FBNzE0Nl9SUFNfTUVNLCB2di0+ZF9jbGlwcGluZy5jcHVfYWRkciwgdnYtPmRfY2xpcHBpbmcuZG1hX2hhbmRsZSk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaSwgU0FBNzE0Nl9DTElQUElOR19NRU0sIHZ2LT5kX2NsaXBwaW5nLmNwdV9hZGRyLCB2di0+ZF9jbGlwcGluZy5kbWFfaGFuZGxlKTsKIAlrZnJlZSh2dik7CiAJZGV2LT52dl9kYXRhID0gTlVMTDsKIAlkZXYtPnZ2X2NhbGxiYWNrID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKaW5kZXggYzJiMzVlMy4uNzUyY2Y3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKQEAgLTM4NSw5ICszODUsOSBAQAogCWVsc2UgYnVmWzNdID0gMHg4ODsKIAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAJZGViX3R1bmVyKCJ0dW5lciBidWZmZXIgZm9yICVkIEh6OiAleCAleCAleCAleFxuIixmZXAtPmZyZXF1ZW5jeSwgYnVmWzBdLGJ1ZlsxXSxidWZbMl0sYnVmWzNdKTsKLQlyZXQgPSBmYy0+aTJjX3JlcXVlc3QoZmMsRkNfV1JJVEUsRkNfSTJDX1BPUlRfVFVORVIsMHg2MSxidWZbMF0sJmJ1ZlsxXSwzKTsKKwlyZXQgPSBmYy0+aTJjX3JlcXVlc3QoZmMsIEZDX1dSSVRFLCBGQ19JMkNfUE9SVF9UVU5FUiwgMHg2MSwgYnVmWzBdLCAmYnVmWzFdLCAzKTsKIAlkZWJfdHVuZXIoInR1bmVyIHdyaXRlIHJldHVybmVkOiAlZFxuIixyZXQpOwogCiAJcmV0dXJuIDA7CkBAIC0zOTgsOTEgKzM5OCw3MSBAQAogCTB4ODAsIDB4MDAsCiAJMHg4MSwgMHgwMSwKIAkweDgxLCAweDAwLAotCTB4MDAsIDB4MDksCi0JMHgwMSwgMHg2OSwKKwkweDAwLCAweDQ4LAorCTB4MDEsIDB4NTgsCiAJMHgwMywgMHgwMCwKIAkweDA0LCAweDAwLAogCTB4MDcsIDB4MDAsCiAJMHgwOCwgMHgwMCwKLQkweDIwLCAweDAwLAotCTB4MjEsIDB4NDAsCi0JMHgyMiwgMHgwMCwKLQkweDIzLCAweDAwLAotCTB4MjQsIDB4NDAsCi0JMHgyNSwgMHg4OCwKIAkweDMwLCAweGZmLAotCTB4MzEsIDB4MDAsCisJMHgzMSwgMHg5ZCwKIAkweDMyLCAweGZmLAogCTB4MzMsIDB4MDAsCi0JMHgzNCwgMHg1MCwKLQkweDM1LCAweDdmLAotCTB4MzYsIDB4MDAsCi0JMHgzNywgMHgyMCwKLQkweDM4LCAweDAwLAotCTB4NDAsIDB4MWMsCi0JMHg0MSwgMHhmZiwKLQkweDQyLCAweDI5LAorCTB4MzQsIDB4MjksCisJMHgzNSwgMHg1NSwKKwkweDM2LCAweDgwLAorCTB4MzcsIDB4NmUsCisJMHgzOCwgMHg5YywKKwkweDQwLCAweDFhLAorCTB4NDEsIDB4ZmUsCisJMHg0MiwgMHgzMywKIAkweDQzLCAweDAwLAogCTB4NDQsIDB4ZmYsCiAJMHg0NSwgMHgwMCwKIAkweDQ2LCAweDAwLAogCTB4NDksIDB4MDQsCi0JMHg0YSwgMHgwMCwKKwkweDRhLCAweDUxLAogCTB4NGIsIDB4ZjgsCiAJMHg1MiwgMHgzMCwKLQkweDU1LCAweGFlLAotCTB4NTYsIDB4NDcsCi0JMHg1NywgMHhlMSwKLQkweDU4LCAweDNhLAotCTB4NWEsIDB4MWUsCi0JMHg1YiwgMHgzNCwKLQkweDYwLCAweDAwLAotCTB4NjMsIDB4MDAsCi0JMHg2NCwgMHgwMCwKLQkweDY1LCAweDAwLAotCTB4NjYsIDB4MDAsCi0JMHg2NywgMHgwMCwKLQkweDY4LCAweDAwLAotCTB4NjksIDB4MDAsCi0JMHg2YSwgMHgwMiwKLQkweDZiLCAweDAwLAorCTB4NTMsIDB4MDYsCisJMHg1OSwgMHgwNiwKKwkweDVhLCAweDVlLAorCTB4NWIsIDB4MDQsCisJMHg2MSwgMHg0OSwKKwkweDYyLCAweDBhLAogCTB4NzAsIDB4ZmYsCi0JMHg3MSwgMHgwMCwKKwkweDcxLCAweDA0LAogCTB4NzIsIDB4MDAsCiAJMHg3MywgMHgwMCwKIAkweDc0LCAweDBjLAotCTB4ODAsIDB4MDAsCisJMHg4MCwgMHgyMCwKIAkweDgxLCAweDAwLAotCTB4ODIsIDB4MDAsCisJMHg4MiwgMHgzMCwKIAkweDgzLCAweDAwLAogCTB4ODQsIDB4MDQsCi0JMHg4NSwgMHg4MCwKLQkweDg2LCAweDI0LAotCTB4ODcsIDB4NzgsCi0JMHg4OCwgMHgxMCwKKwkweDg1LCAweDIyLAorCTB4ODYsIDB4MDgsCisJMHg4NywgMHgxYiwKKwkweDg4LCAweDAwLAogCTB4ODksIDB4MDAsCi0JMHg5MCwgMHgwMSwKLQkweDkxLCAweDAxLAotCTB4YTAsIDB4MDQsCisJMHg5MCwgMHgwMCwKKwkweDkxLCAweDA0LAorCTB4YTAsIDB4ODYsCiAJMHhhMSwgMHgwMCwKIAkweGEyLCAweDAwLAogCTB4YjAsIDB4OTEsCiAJMHhiMSwgMHgwYiwKLQkweGMwLCAweDUzLAotCTB4YzEsIDB4NzAsCisJMHhjMCwgMHg1YiwKKwkweGMxLCAweDEwLAogCTB4YzIsIDB4MTIsCi0JMHhkMCwgMHgwMCwKKwkweGQwLCAweDAyLAogCTB4ZDEsIDB4MDAsCiAJMHhkMiwgMHgwMCwKIAkweGQzLCAweDAwLAotCTB4ZDQsIDB4MDAsCisJMHhkNCwgMHgwMiwKIAkweGQ1LCAweDAwLAogCTB4ZGUsIDB4MDAsCi0JMHhkZiwgMHgwMCwKLQkweDYxLCAweDQ5LAotCTB4NjIsIDB4MGIsCi0JMHg1MywgMHgwOCwKLQkweDU5LCAweDA4LAorCTB4ZGYsIDB4MDEsCiAJMHhmZiwgMHhmZiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCmluZGV4IDMyOWE1MWMuLjgzYjA5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYwpAQCAtMzkwLDYgKzM5MCw3IEBACiAJeyAweGZjMDAyNzBmLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULAkJCSJDaGFpblRlY2ggZGlnaXRvcCBEU1QtMTAwMCBEVkItUyIgfSwKIAl7IDB4MDc3MTE0NjEsIEJUVFZfQk9BUkRfQVZEVkJUXzc3MSwJCQkiQVZlcm1lZGlhIEF2ZXJUViBEVkItVCA3NzEiIH0sCiAJeyAweGRiMTAxOGFjLCBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURSwJCSJEVmlDTyBGdXNpb25IRFRWIERWQi1UIExpdGUiIH0sCisJeyAweGRiMTExOGFjLCBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURSwJCSJVbHRyYXZpZXcgRFZCLVQgTGl0ZSIgfSwKIAl7IDB4ZDUwMDE4YWMsIEJUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEUsCSJEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZSIgfSwKIAl7IDB4MjAwMDcwNjMsIEJUVFZfQk9BUkRfUENfSERUViwJCQkicGNIRFRWIEhELTIwMDAgVFYiIH0sCiAJeyAweDAwMjYxODIyLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULAkJCSJETlRWIExpdmUhIE1pbmkiIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCmluZGV4IDlmNzJiNzAuLjAzOTNhM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCkBAIC0xMTYxLDcgKzExNjEsNyBAQAogCQl9CiAJfQogCi0JaWYgKGkgPj0gc2l6ZW9mIChkc3RfdGxpc3QpIC8gc2l6ZW9mIChkc3RfdGxpc3QgWzBdKSkgeworCWlmIChpID49IEFSUkFZX1NJWkUoZHN0X3RsaXN0KSkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9FUlJPUiwgMSwgIlVuYWJsZSB0byByZWNvZ25pemUgJXMgb3IgJXMiLCAmc3RhdGUtPnJ4YnVmZmVyWzBdLCAmc3RhdGUtPnJ4YnVmZmVyWzFdKTsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfRVJST1IsIDEsICJwbGVhc2UgZW1haWwgbGludXgtZHZiQGxpbnV4dHYub3JnIHdpdGggdGhpcyB0eXBlIGluIik7CiAJCXVzZV9kc3RfdHlwZSA9IERTVF9UWVBFX0lTX1NBVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKaW5kZXggM2UzNTkzMS4uNThmNjlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTIxMyw3ICsyMTQsNyBAQAogCQlmcmVxID0gMjE1MDAwMDsgLyogc2F0ZWxsaXRlIElGIGlzIDk1MC4uMjE1ME1IeiAqLwogCiAJLyogZGVjaWRlIHdoaWNoIFZDTyB0byB1c2UgZm9yIHRoZSBpbnB1dCBmcmVxdWVuY3kgKi8KLQlmb3IoaT0xOyhpPHNpemVvZihvc2NpKS9zaXplb2Yob3NjaVswXSkpJiYob3NjaVtpXTxmcmVxKTtpKyspOworCWZvcihpID0gMTsgKGkgPCBBUlJBWV9TSVpFKG9zY2kpKSAmJiAob3NjaVtpXSA8IGZyZXEpOyBpKyspOwogCXByaW50aygiY3gyNDEwOCBkZWJ1Zzogc2VsZWN0IHZjbyAjJWQgKGY9JWQpXG4iLGksZnJlcSk7CiAJYmFuZD1iYW5kc2VsW2ldOwogCS8qIHRoZSBnYWluIHZhbHVlcyBtdXN0IGJlIHNldCBieSBTZXRTeW1ib2xyYXRlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKaW5kZXggZDY0Yjk2Yy4uYTZjYmJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYwpAQCAtODE5LDYgKzgxOSwxMSBAQAogCQlzZXRfYml0KHJjX2tleXNbaSArIDJdLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IDA7CiAJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gMDsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCWlucHV0X2Rldi0+aWQudmVuZG9yID0gY2luZXJneXQyLT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yOworCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGNpbmVyZ3l0Mi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3Q7CisJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMTsKKwlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJmNpbmVyZ3l0Mi0+dWRldi0+ZGV2OwogCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCBlODU5NzIyLi5hMjFhODk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKQEAgLTEwMCw3ICsxMDEsNyBAQAogCXN0cnVjdCBzZW1hcGhvcmUgc2VtOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9oZWFkOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcXVldWU7Ci0JcGlkX3QgdGhyZWFkX3BpZDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKIAl1bnNpZ25lZCBsb25nIHJlbGVhc2VfamlmZmllczsKIAl1bnNpZ25lZCBpbnQgZXhpdDsKIAl1bnNpZ25lZCBpbnQgd2FrZXVwOwpAQCAtNTA4LDE5ICs1MDksMTEgQEAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSA9IGRhdGE7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JY2hhciBuYW1lIFsxNV07CiAJZmVfc3RhdHVzX3QgczsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtczsKIAogCWRwcmludGsoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0Jc25wcmludGYgKG5hbWUsIHNpemVvZihuYW1lKSwgImtkdmItZmUtJWkiLCBmZS0+ZHZiLT5udW0pOwotCi0JbG9ja19rZXJuZWwoKTsKLQlkYWVtb25pemUobmFtZSk7Ci0Jc2lnZmlsbHNldCgmY3VycmVudC0+YmxvY2tlZCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCiAJZmVwcml2LT5jaGVja193cmFwcGVkID0gMDsKIAlmZXByaXYtPnF1YWxpdHkgPSAwOwogCWZlcHJpdi0+ZGVsYXkgPSAzKkhaOwpAQCAtNTMyLDE2ICs1MjUsMTggQEAKIAogCXdoaWxlICgxKSB7CiAJCXVwKCZmZXByaXYtPnNlbSk7CSAgICAvKiBpcyBsb2NrZWQgd2hlbiB3ZSBlbnRlciB0aGUgdGhyZWFkLi4uICovCi0KK3Jlc3RhcnQ6CiAJCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChmZXByaXYtPndhaXRfcXVldWUsCi0JCQkJCQkJICAgZHZiX2Zyb250ZW5kX3Nob3VsZF93YWtldXAoZmUpLAotCQkJCQkJCSAgIGZlcHJpdi0+ZGVsYXkpOwotCQlpZiAoMCAhPSBkdmJfZnJvbnRlbmRfaXNfZXhpdGluZyhmZSkpIHsKKwkJCWR2Yl9mcm9udGVuZF9zaG91bGRfd2FrZXVwKGZlKSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCksCisJCQlmZXByaXYtPmRlbGF5KTsKKworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IGR2Yl9mcm9udGVuZF9pc19leGl0aW5nKGZlKSkgewogCQkJLyogZ290IHNpZ25hbCBvciBxdWl0dGluZyAqLwogCQkJYnJlYWs7CiAJCX0KIAotCQl0cnlfdG9fZnJlZXplKCk7CisJCWlmICh0cnlfdG9fZnJlZXplKCkpCisJCQlnb3RvIHJlc3RhcnQ7CiAKIAkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZmVwcml2LT5zZW0pKQogCQkJYnJlYWs7CkBAIC01OTEsNyArNTg2LDcgQEAKIAkJCWZlLT5vcHMuc2xlZXAoZmUpOwogCX0KIAotCWZlcHJpdi0+dGhyZWFkX3BpZCA9IDA7CisJZmVwcml2LT50aHJlYWQgPSBOVUxMOwogCW1iKCk7CiAKIAlkdmJfZnJvbnRlbmRfd2FrZXVwKGZlKTsKQEAgLTYwMCw3ICs1OTUsNiBAQAogCiBzdGF0aWMgdm9pZCBkdmJfZnJvbnRlbmRfc3RvcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQl1bnNpZ25lZCBsb25nIHJldDsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OwogCiAJZHByaW50ayAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtNjA4LDMzICs2MDIsMTcgQEAKIAlmZXByaXYtPmV4aXQgPSAxOwogCW1iKCk7CiAKLQlpZiAoIWZlcHJpdi0+dGhyZWFkX3BpZCkKKwlpZiAoIWZlcHJpdi0+dGhyZWFkKQogCQlyZXR1cm47CiAKLQkvKiBjaGVjayBpZiB0aGUgdGhyZWFkIGlzIHJlYWxseSBhbGl2ZSAqLwotCWlmIChraWxsX3Byb2MoZmVwcml2LT50aHJlYWRfcGlkLCAwLCAxKSA9PSAtRVNSQ0gpIHsKLQkJcHJpbnRrKCJkdmJfZnJvbnRlbmRfc3RvcDogdGhyZWFkIFBJRCAlZCBhbHJlYWR5IGRpZWRcbiIsCi0JCQkJZmVwcml2LT50aHJlYWRfcGlkKTsKLQkJLyogbWFrZSBzdXJlIHRoZSBtdXRleCB3YXMgbm90IGhlbGQgYnkgdGhlIHRocmVhZCAqLwotCQlpbml0X01VVEVYICgmZmVwcml2LT5zZW0pOwotCQlyZXR1cm47Ci0JfQotCi0JLyogd2FrZSB1cCB0aGUgZnJvbnRlbmQgdGhyZWFkLCBzbyBpdCBub3RpY2VzIHRoYXQgZmUtPmV4aXQgPT0gMSAqLwotCWR2Yl9mcm9udGVuZF93YWtldXAoZmUpOwotCi0JLyogd2FpdCB1bnRpbCB0aGUgZnJvbnRlbmQgdGhyZWFkIGhhcyBleGl0ZWQgKi8KLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZmVwcml2LT53YWl0X3F1ZXVlLDAgPT0gZmVwcml2LT50aHJlYWRfcGlkKTsKLQlpZiAoLUVSRVNUQVJUU1lTICE9IHJldCkgewotCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9JRExFOwotCQlyZXR1cm47Ci0JfQorCWt0aHJlYWRfc3RvcChmZXByaXYtPnRocmVhZCk7CisJaW5pdF9NVVRFWCAoJmZlcHJpdi0+c2VtKTsKIAlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9JRExFOwogCiAJLyogcGFyYW5vaWEgY2hlY2sgaW4gY2FzZSBhIHNpZ25hbCBhcnJpdmVkICovCi0JaWYgKGZlcHJpdi0+dGhyZWFkX3BpZCkKLQkJcHJpbnRrKCJkdmJfZnJvbnRlbmRfc3RvcDogd2FybmluZzogdGhyZWFkIFBJRCAlZCB3b24ndCBleGl0XG4iLAotCQkJCWZlcHJpdi0+dGhyZWFkX3BpZCk7CisJaWYgKGZlcHJpdi0+dGhyZWFkKQorCQlwcmludGsoImR2Yl9mcm9udGVuZF9zdG9wOiB3YXJuaW5nOiB0aHJlYWQgJXAgd29uJ3QgZXhpdFxuIiwKKwkJCQlmZXByaXYtPnRocmVhZCk7CiB9CiAKIHMzMiB0aW1ldmFsX3VzZWNfZGlmZihzdHJ1Y3QgdGltZXZhbCBsYXN0dGltZSwgc3RydWN0IHRpbWV2YWwgY3VydGltZSkKQEAgLTY4NCwxMCArNjYyLDExIEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZmVfdGhyZWFkOwogCiAJZHByaW50ayAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JaWYgKGZlcHJpdi0+dGhyZWFkX3BpZCkgeworCWlmIChmZXByaXYtPnRocmVhZCkgewogCQlpZiAoIWZlcHJpdi0+ZXhpdCkKIAkJCXJldHVybiAwOwogCQllbHNlCkBAIC03MDEsMTggKzY4MCwxOCBAQAogCiAJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfSURMRTsKIAlmZXByaXYtPmV4aXQgPSAwOwotCWZlcHJpdi0+dGhyZWFkX3BpZCA9IDA7CisJZmVwcml2LT50aHJlYWQgPSBOVUxMOwogCW1iKCk7CiAKLQlyZXQgPSBrZXJuZWxfdGhyZWFkIChkdmJfZnJvbnRlbmRfdGhyZWFkLCBmZSwgMCk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImR2Yl9mcm9udGVuZF9zdGFydDogZmFpbGVkIHRvIHN0YXJ0IGtlcm5lbF90aHJlYWQgKCVkKVxuIiwgcmV0KTsKKwlmZV90aHJlYWQgPSBrdGhyZWFkX3J1bihkdmJfZnJvbnRlbmRfdGhyZWFkLCBmZSwKKwkJImtkdmItZmUtJWkiLCBmZS0+ZHZiLT5udW0pOworCWlmIChJU19FUlIoZmVfdGhyZWFkKSkgeworCQlyZXQgPSBQVFJfRVJSKGZlX3RocmVhZCk7CisJCXByaW50aygiZHZiX2Zyb250ZW5kX3N0YXJ0OiBmYWlsZWQgdG8gc3RhcnQga3RocmVhZCAoJWQpXG4iLCByZXQpOwogCQl1cCgmZmVwcml2LT5zZW0pOwogCQlyZXR1cm4gcmV0OwogCX0KLQlmZXByaXYtPnRocmVhZF9waWQgPSByZXQ7Ci0KKwlmZXByaXYtPnRocmVhZCA9IGZlX3RocmVhZDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE1LDcgKzg5NCw3IEBACiAJCQlmZXR1bmVzZXR0aW5ncy5wYXJhbWV0ZXJzLmludmVyc2lvbiA9IElOVkVSU0lPTl9BVVRPOwogCQl9CiAJCWlmIChmZS0+b3BzLmluZm8udHlwZSA9PSBGRV9PRkRNKSB7Ci0JCQkvKiB3aXRob3V0IGhpZXJhY2hpY2FsIGNvZGluZyBjb2RlX3JhdGVfTFAgaXMgaXJyZWxldmFudCwKKwkJCS8qIHdpdGhvdXQgaGllcmFyY2hpY2FsIGNvZGluZyBjb2RlX3JhdGVfTFAgaXMgaXJyZWxldmFudCwKIAkJCSAqIHNvIHdlIHRvbGVyYXRlIHRoZSBvdGhlcndpc2UgaW52YWxpZCBGRUNfTk9ORSBzZXR0aW5nICovCiAJCQlpZiAoZmVwcml2LT5wYXJhbWV0ZXJzLnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPT0gSElFUkFSQ0hZX05PTkUgJiYKIAkJCSAgICBmZXByaXYtPnBhcmFtZXRlcnMudS5vZmRtLmNvZGVfcmF0ZV9MUCA9PSBGRUNfTk9ORSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKaW5kZXggODI2YjQ3Zi4uNDkwMzM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKQEAgLTE5OSwxMiArMTk5LDE0IEBACiAJCQljb25zdCBzdHJ1Y3QgZHZiX2RldmljZSAqdGVtcGxhdGUsIHZvaWQgKnByaXYsIGludCB0eXBlKQogewogCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXY7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZHZiZGV2Zm9wczsKKwogCWludCBpZDsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmR2YmRldl9yZWdpc3Rlcl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWlmICgoaWQgPSBkdmJkZXZfZ2V0X2ZyZWVfaWQgKGFkYXAsIHR5cGUpKSA8IDApIHsKKwlpZiAoKGlkID0gZHZiZGV2X2dldF9mcmVlX2lkIChhZGFwLCB0eXBlKSkgPCAwKXsKIAkJbXV0ZXhfdW5sb2NrKCZkdmJkZXZfcmVnaXN0ZXJfbG9jayk7CiAJCSpwZHZiZGV2ID0gTlVMTDsKIAkJcHJpbnRrICgiJXM6IGNvdWxkIGdldCBmaW5kIGZyZWUgZGV2aWNlIGlkLi4uXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMjEzLDcgKzIxNSwxNSBAQAogCiAJKnBkdmJkZXYgPSBkdmJkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHZiX2RldmljZSksIEdGUF9LRVJORUwpOwogCi0JaWYgKCFkdmJkZXYpIHsKKwlpZiAoIWR2YmRldil7CisJCW11dGV4X3VubG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkdmJkZXZmb3BzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZpbGVfb3BlcmF0aW9ucyksIEdGUF9LRVJORUwpOworCisJaWYgKCFkdmJkZXZmb3BzKXsKKwkJa2ZyZWUgKGR2YmRldik7CiAJCW11dGV4X3VubG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yMjMsNyArMjMzLDkgQEAKIAlkdmJkZXYtPmlkID0gaWQ7CiAJZHZiZGV2LT5hZGFwdGVyID0gYWRhcDsKIAlkdmJkZXYtPnByaXYgPSBwcml2OworCWR2YmRldi0+Zm9wcyA9IGR2YmRldmZvcHM7CiAKKwltZW1jcHkoZHZiZGV2LT5mb3BzLCB0ZW1wbGF0ZS0+Zm9wcywgc2l6ZW9mKHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpKTsKIAlkdmJkZXYtPmZvcHMtPm93bmVyID0gYWRhcC0+bW9kdWxlOwogCiAJbGlzdF9hZGRfdGFpbCAoJmR2YmRldi0+bGlzdF9oZWFkLCAmYWRhcC0+ZGV2aWNlX2xpc3QpOwpAQCAtMjUxLDYgKzI2Myw3IEBACiAJCQkJCWR2YmRldi0+dHlwZSwgZHZiZGV2LT5pZCkpKTsKIAogCWxpc3RfZGVsICgmZHZiZGV2LT5saXN0X2hlYWQpOworCWtmcmVlIChkdmJkZXYtPmZvcHMpOwogCWtmcmVlIChkdmJkZXYpOwogfQogRVhQT1JUX1NZTUJPTChkdmJfdW5yZWdpc3Rlcl9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IGFkNTIxNDMuLjgwZjY3YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTEwOSw2ICsxMDksMzQgQEAKIAkgIE1lZGlvbiBNRDk1NzAwIGh5YnJpZCBVU0IyLjAgZGV2aWNlLgogCSAgRFZpQ08gRnVzaW9uSERUViAoQmx1ZWJpcmQpIFVTQjIuMCBkZXZpY2VzCiAKK2NvbmZpZyBEVkJfVVNCX005MjBYCisJdHJpc3RhdGUgIlVsaSBtOTIweCBEVkItVCBVU0IyLjAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9VU0IKKwlzZWxlY3QgRFZCX01UMzUyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UVU5FUl9RVDEwMTAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIE1TSSBNZWdhIFNreSA1ODAgVVNCMi4wIERWQi1UIHJlY2VpdmVyLgorCSAgQ3VycmVudGx5LCBvbmx5IGRldmljZXMgd2l0aCBhIHByb2R1Y3QgaWQgb2YKKwkgICJEVFYgVVNCIE1JTkkiIChpbiBjb2xkIHN0YXRlKSBhcmUgc3VwcG9ydGVkLgorCSAgRmlybXdhcmUgcmVxdWlyZWQuCisKK2NvbmZpZyBEVkJfVVNCX0dMODYxCisJdHJpc3RhdGUgIkdlbmVzeXMgTG9naWMgR0w4NjEgVVNCMi4wIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UVU5FUl9RVDEwMTAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIE1TSSBNZWdhc2t5IDU4MCAoNTU4MDEpIERWQi1UIFVTQjIuMAorCSAgcmVjZWl2ZXIgd2l0aCBVU0IgSUQgMGRiMDo1NTgxLgorCitjb25maWcgRFZCX1VTQl9BVTY2MTAKKwl0cmlzdGF0ZSAiQWxjb3IgTWljcm8gQVU2NjEwIFVTQjIuMCBzdXBwb3J0IgorCWRlcGVuZHMgb24gRFZCX1VTQgorCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVFVORVJfUVQxMDEwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBTaWdtYXRlayBEVkItMTEwIERWQi1UIFVTQjIuMCByZWNlaXZlci4KKwogY29uZmlnIERWQl9VU0JfRElHSVRWCiAJdHJpc3RhdGUgIk5lYnVsYSBFbGVjdHJvbmljcyB1RGlnaVRWIERWQi1UIFVTQjIuMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKaW5kZXggMTU0ZDU5My4uNDBmMjhmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCkBAIC0zMCw2ICszMCwxNSBAQAogZHZiLXVzYi11bXQtMDEwLW9ianMgPSB1bXQtMDEwLm8KIG9iai0kKENPTkZJR19EVkJfVVNCX1VNVF8wMTApICs9IGR2Yi11c2ItZGlidXNiLWNvbW1vbi5vIGR2Yi11c2ItdW10LTAxMC5vCiAKK2R2Yi11c2ItbTkyMHgtb2JqcyA9IG05MjB4Lm8KK29iai0kKENPTkZJR19EVkJfVVNCX005MjBYKSArPSBkdmItdXNiLW05MjB4Lm8KKworZHZiLXVzYi1nbDg2MS1vYmpzID0gZ2w4NjEubworb2JqLSQoQ09ORklHX0RWQl9VU0JfR0w4NjEpICs9IGR2Yi11c2ItZ2w4NjEubworCitkdmItdXNiLWF1NjYxMC1vYmpzID0gYXU2NjEwLm8KK29iai0kKENPTkZJR19EVkJfVVNCX0FVNjYxMCkgKz0gZHZiLXVzYi1hdTY2MTAubworCiBkdmItdXNiLWRpZ2l0di1vYmpzID0gZGlnaXR2Lm8KIG9iai0kKENPTkZJR19EVkJfVVNCX0RJR0lUVikgKz0gZHZiLXVzYi1kaWdpdHYubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F1NjYxMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hdTY2MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGM2NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hdTY2MTAuYwpAQCAtMCwwICsxLDI1NSBAQAorLyogRFZCIFVTQiBjb21wbGlhbnQgbGludXggZHJpdmVyIGZvciBTaWdtYXRlayBEVkItMTEwIERWQi1UIFVTQjIuMCByZWNlaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqCVNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqLworCisjaW5jbHVkZSAiYXU2NjEwLmgiCisKKyNpbmNsdWRlICJ6bDEwMzUzLmgiCisjaW5jbHVkZSAicXQxMDEwLmgiCisKKy8qIGRlYnVnICovCitzdGF0aWMgaW50IGR2Yl91c2JfYXU2NjEwX2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2F1NjYxMF9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPXJjIChvci1hYmxlKSkuIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CisKK3N0YXRpYyBpbnQgYXU2NjEwX3VzYl9tc2coc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCBvcGVyYXRpb24sIHU4IGFkZHIsCisJCQkgIHU4ICp3YnVmLCB1MTYgd2xlbiwgdTggKnJidWYsIHUxNiBybGVuKQoreworCWludCByZXQ7CisJdTE2IGluZGV4OworCXU4IHVzYl9idWZbNl07IC8qIGVub3VnaCBmb3IgYWxsIGtub3duIHJlcXVlc3RzLAorCQkJICByZWFkIHJldHVybnMgNSBhbmQgd3JpdGUgNiBieXRlcyAqLworCXN3aXRjaCAod2xlbikgeworCWNhc2UgMToKKwkJaW5kZXggPSB3YnVmWzBdIDw8IDg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaW5kZXggPSB3YnVmWzBdIDw8IDg7CisJCWluZGV4ICs9IHdidWZbMV07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdhcm4oIndsZW4gPSAleCwgYWJvcnRpbmcuIiwgd2xlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZC0+dWRldiwgMCksIG9wZXJhdGlvbiwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUnxVU0JfRElSX0lOLCBhZGRyLCBpbmRleCwgdXNiX2J1ZiwKKwkJCSAgICAgIHNpemVvZih1c2JfYnVmKSwgQVU2NjEwX1VTQl9USU1FT1VUKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChvcGVyYXRpb24pIHsKKwljYXNlIEFVNjYxMF9SRVFfSTJDX1JFQUQ6CisJY2FzZSBBVTY2MTBfUkVRX1VTQl9SRUFEOgorCQkvKiByZXF1ZXN0ZWQgdmFsdWUgaXMgYWx3YXlzIDV0aCBieXRlIGluIGJ1ZmZlciAqLworCQlyYnVmWzBdID0gdXNiX2J1Zls0XTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF1NjYxMF9pMmNfbXNnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggYWRkciwKKwkJCSAgdTggKndidWYsIHUxNiB3bGVuLCB1OCAqcmJ1ZiwgdTE2IHJsZW4pCit7CisJdTggcmVxdWVzdDsKKwl1OCB3byA9IChyYnVmID09IE5VTEwgfHwgcmxlbiA9PSAwKTsgLyogd3JpdGUtb25seSAqLworCisJaWYgKHdvKSB7CisJCXJlcXVlc3QgPSBBVTY2MTBfUkVRX0kyQ19XUklURTsKKwl9IGVsc2UgeyAvKiBydyAqLworCQlyZXF1ZXN0ID0gQVU2NjEwX1JFUV9JMkNfUkVBRDsKKwl9CisKKwlyZXR1cm4gYXU2NjEwX3VzYl9tc2coZCwgcmVxdWVzdCwgYWRkciwgd2J1Ziwgd2xlbiwgcmJ1Ziwgcmxlbik7Cit9CisKKworLyogSTJDICovCitzdGF0aWMgaW50IGF1NjYxMF9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLAorCQkJICAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCBpOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKG51bSA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCS8qIHdyaXRlL3JlYWQgcmVxdWVzdCAqLworCQlpZiAoaSsxIDwgbnVtICYmIChtc2dbaSsxXS5mbGFncyAmIEkyQ19NX1JEKSkgeworCQkJaWYgKGF1NjYxMF9pMmNfbXNnKGQsIG1zZ1tpXS5hZGRyLCBtc2dbaV0uYnVmLAorCQkJCQkgICBtc2dbaV0ubGVuLCBtc2dbaSsxXS5idWYsCisJCQkJCSAgIG1zZ1tpKzFdLmxlbikgPCAwKQorCQkJCWJyZWFrOworCQkJaSsrOworCQl9IGVsc2UgaWYgKGF1NjYxMF9pMmNfbXNnKGQsIG1zZ1tpXS5hZGRyLCBtc2dbaV0uYnVmLAorCQkJCQkgICAgICAgbXNnW2ldLmxlbiwgTlVMTCwgMCkgPCAwKQorCQkJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKwlyZXR1cm4gaTsKK30KKworCitzdGF0aWMgdTMyIGF1NjYxMF9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGF1NjYxMF9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgICA9IGF1NjYxMF9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGF1NjYxMF9pMmNfZnVuYywKK307CisKKy8qIENhbGxiYWNrcyBmb3IgRFZCIFVTQiAqLworc3RhdGljIGludCBhdTY2MTBfaWRlbnRpZnlfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcywKKwkJCQkgc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICoqZGVzYywKKwkJCQkgaW50ICpjb2xkKQoreworCSpjb2xkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBhdTY2MTBfemwxMDM1M19jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDFlLAorCS5ub190dW5lciA9IDEsCisJLnBhcmFsbGVsX3RzID0gMSwKK307CisKK3N0YXRpYyBpbnQgYXU2NjEwX3psMTAzNTNfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJaWYgKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsICZhdTY2MTBfemwxMDM1M19jb25maWcsCisJCQkJICAgJmFkYXAtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgc3RydWN0IHF0MTAxMF9jb25maWcgYXU2NjEwX3F0MTAxMF9jb25maWcgPSB7CisJLmkyY19hZGRyZXNzID0gMHhjNAorfTsKKworc3RhdGljIGludCBhdTY2MTBfcXQxMDEwX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXJldHVybiBkdmJfYXR0YWNoKHF0MTAxMF9hdHRhY2gsCisJCQkgIGFkYXAtPmZlLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwKKwkJCSAgJmF1NjYxMF9xdDEwMTBfY29uZmlnKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7Cit9CisKKy8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgYXU2NjEwX3Byb3BlcnRpZXM7CisKK3N0YXRpYyBpbnQgYXU2NjEwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisJaW50IHJldDsKKworCWlmIChpbnRmLT5udW1fYWx0c2V0dGluZyA8IEFVNjYxMF9BTFRTRVRUSU5HX0NPVU5UKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgocmV0ID0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmYXU2NjEwX3Byb3BlcnRpZXMsIFRISVNfTU9EVUxFLCAmZCkpID09IDApIHsKKwkJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIEFVNjYxMF9BTFRTRVRUSU5HKTsKKworCQlpZiAoYWx0ID09IE5VTEwpIHsKKwkJCWRlYl9yYygibm8gYWx0IGZvdW5kIVxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkLT51ZGV2LCBhbHQtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCQkJYWx0LT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhdTY2MTBfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WSURfQUxDT1JfTUlDUk8sIFVTQl9QSURfU0lHTUFURUtfRFZCXzExMCkgfSwKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBhdTY2MTBfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgYXU2NjEwX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKwkuc2l6ZV9vZl9wcml2ICAgICA9IDAsCisJLmlkZW50aWZ5X3N0YXRlICAgPSBhdTY2MTBfaWRlbnRpZnlfc3RhdGUsCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gYXU2NjEwX3psMTAzNTNfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBhdTY2MTBfcXQxMDEwX3R1bmVyX2F0dGFjaCwKKworCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9JU09DLAorCQkJCS5jb3VudCA9IDUsCisJCQkJLmVuZHBvaW50ID0gMHg4MiwKKwkJCQkudSA9IHsKKwkJCQkJLmlzb2MgPSB7CisJCQkJCQkuZnJhbWVzcGVydXJiID0gNDAsCisJCQkJCQkuZnJhbWVzaXplID0gOTQyLCAgIC8qIG1heGltdW0gcGFja2V0IHNpemUgKi8KKwkJCQkJCS5pbnRlcnZhbCA9IDEuMjUsICAgLyogMTI1IHVzICovCisJCQkJCX0KKwkJCQl9CisJCQl9LAorCQl9CisJfSwKKwkuaTJjX2FsZ28gPSAmYXU2NjEwX2kyY19hbGdvLAorCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeworCQkJIlNpZ21hdGVrIERWQi0xMTAgRFZCLVQgVVNCMi4wIiwKKwkJCXsgJmF1NjYxMF90YWJsZVswXSwgTlVMTCB9LAorCQkJeyBOVUxMIH0sCisJCX0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF1NjYxMF9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSAiZHZiX3VzYl9hdTY2MTAiLAorCS5wcm9iZSAgICAgID0gYXU2NjEwX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZHZiX3VzYl9kZXZpY2VfZXhpdCwKKwkuaWRfdGFibGUgICA9IGF1NjYxMF90YWJsZSwKK307CisKKy8qIG1vZHVsZSBzdHVmZiAqLworc3RhdGljIGludCBfX2luaXQgYXU2NjEwX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICgocmV0ID0gdXNiX3JlZ2lzdGVyKCZhdTY2MTBfZHJpdmVyKSkpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXU2NjEwX21vZHVsZV9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciBmcm9tIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmF1NjYxMF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCAoYXU2NjEwX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0IChhdTY2MTBfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIFNpZ21hdGVrIERWQi0xMTAgRFZCLVQgVVNCMi4wIC8gQVU2NjEwIik7CitNT0RVTEVfVkVSU0lPTigiMC4xIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F1NjYxMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hdTY2MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTYxYjA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hdTY2MTAuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9EVkJfVVNCX0FVNjYxMF9IXworI2RlZmluZSBfRFZCX1VTQl9BVTY2MTBfSF8KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImF1NjYxMCIKKyNpbmNsdWRlICJkdmItdXNiLmgiCisKKyNkZWZpbmUgZGViX3JjKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2F1NjYxMF9kZWJ1ZywweDAxLGFyZ3MpCisKKyNkZWZpbmUgQVU2NjEwX1JFUV9JMkNfV1JJVEUJMHgxNAorI2RlZmluZSBBVTY2MTBfUkVRX0kyQ19SRUFECTB4MTMKKyNkZWZpbmUgQVU2NjEwX1JFUV9VU0JfV1JJVEUJMHgxNgorI2RlZmluZSBBVTY2MTBfUkVRX1VTQl9SRUFECTB4MTUKKworI2RlZmluZSBBVTY2MTBfVVNCX1RJTUVPVVQgMTAwMAorCisjZGVmaW5lIEFVNjYxMF9BTFRTRVRUSU5HX0NPVU5UIDYKKyNkZWZpbmUgQVU2NjEwX0FMVFNFVFRJTkcgICAgICAgNQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAppbmRleCAyOTkzODJkLi4xNDgzODZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCkBAIC0xMSw2ICsxMSw3IEBACiAKIC8qIFZlbmRvciBJRHMgKi8KICNkZWZpbmUgVVNCX1ZJRF9BRFNURUNICQkJCTB4MDZlMQorI2RlZmluZSBVU0JfVklEX0FMQ09SX01JQ1JPCQkweDA1OGYKICNkZWZpbmUgVVNCX1ZJRF9BTkNIT1IJCQkJMHgwNTQ3CiAjZGVmaW5lIFVTQl9WSURfQVZFUk1FRElBCQkJMHgwN2NhCiAjZGVmaW5lIFVTQl9WSURfQ09NUFJPCQkJCTB4MTg1YgpAQCAtMjksNiArMzAsNyBAQAogI2RlZmluZSBVU0JfVklEX0xFQURURUsJCQkJMHgwNDEzCiAjZGVmaW5lIFVTQl9WSURfTElURU9OCQkJCTB4MDRjYQogI2RlZmluZSBVU0JfVklEX01FRElPTgkJCQkweDE2NjAKKyNkZWZpbmUgVVNCX1ZJRF9NU0kJCQkJMHgwZGIwCiAjZGVmaW5lIFVTQl9WSURfUElOTkFDTEUJCQkweDIzMDQKICNkZWZpbmUgVVNCX1ZJRF9WSVNJT05QTFVTCQkJMHgxM2QzCiAjZGVmaW5lIFVTQl9WSURfVFdJTkhBTgkJCQkweDE4MjIKQEAgLTExOSw2ICsxMjEsOCBAQAogI2RlZmluZSBVU0JfUElEX0RJR0lUQUxOT1dfQkxVRUJJUkRfRFVBTF8xX0NPTEQJCTB4ZGI1NAogI2RlZmluZSBVU0JfUElEX0RJR0lUQUxOT1dfQkxVRUJJUkRfRFVBTF8xX1dBUk0JCTB4ZGI1NQogI2RlZmluZSBVU0JfUElEX01FRElPTl9NRDk1NzAwCQkJCTB4MDkzMgorI2RlZmluZSBVU0JfUElEX01TSV9NRUdBU0tZNTgwCQkJCTB4NTU4MAorI2RlZmluZSBVU0JfUElEX01TSV9NRUdBU0tZNTgwXzU1ODAxCQkJMHg1NTgxCiAjZGVmaW5lIFVTQl9QSURfS1lFX0RWQl9UX0NPTEQJCQkJMHg3MDFlCiAjZGVmaW5lIFVTQl9QSURfS1lFX0RWQl9UX1dBUk0JCQkJMHg3MDFmCiAjZGVmaW5lIFVTQl9QSURfUENUVl8yMDBFCQkJCTB4MDIwZQpAQCAtMTM0LDYgKzEzOCw3IEBACiAjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX1NUSzc3MDBQCQkweDZmMDAKICNkZWZpbmUgVVNCX1BJRF9HRU5QSVhfOFBTS19DT0xECQkJMHgwMjAwCiAjZGVmaW5lIFVTQl9QSURfR0VOUElYXzhQU0tfV0FSTQkJCTB4MDIwMQorI2RlZmluZSBVU0JfUElEX1NJR01BVEVLX0RWQl8xMTAJCQkweDY2MTAKIAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwppbmRleCAxOWZmNTk3Li45NTExYTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIGludCBkdmJfdXNiX3JlbW90ZV9leGl0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKIAlpZiAoZC0+c3RhdGUgJiBEVkJfVVNCX1NUQVRFX1JFTU9URSkgewotCQljYW5jZWxfZGVsYXllZF93b3JrKCZkLT5yY19xdWVyeV93b3JrKTsKKwkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmZC0+cmNfcXVlcnlfd29yayk7CiAJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGQtPnJjX2lucHV0X2Rldik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9nbDg2MS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9nbDg2MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZjM4YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dsODYxLmMKQEAgLTAsMCArMSwyMzEgQEAKKy8qIERWQiBVU0IgY29tcGxpYW50IGxpbnV4IGRyaXZlciBmb3IgR0w4NjEgVVNCMi4wIGRldmljZXMuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKglTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogc2VlIERvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKi8KKyNpbmNsdWRlICJnbDg2MS5oIgorCisjaW5jbHVkZSAiemwxMDM1My5oIgorI2luY2x1ZGUgInF0MTAxMC5oIgorCisvKiBkZWJ1ZyAqLworaW50IGR2Yl91c2JfZ2w4NjFfZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsZHZiX3VzYl9nbDg2MV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPXJjIChvci1hYmxlKSkuIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CisKK3N0YXRpYyBpbnQgZ2w4NjFfaTJjX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IGFkZHIsCisJCQkgdTggKndidWYsIHUxNiB3bGVuLCB1OCAqcmJ1ZiwgdTE2IHJsZW4pCit7CisJdTE2IGluZGV4OworCXUxNiB2YWx1ZSA9IGFkZHIgPDwgODsKKwlpbnQgd28gPSAocmJ1ZiA9PSBOVUxMIHx8IHJsZW4gPT0gMCk7IC8qIHdyaXRlLW9ubHkgKi8KKwl1OCByZXEsIHR5cGU7CisKKwlpZiAod28pIHsKKwkJcmVxID0gR0w4NjFfUkVRX0kyQ19XUklURTsKKwkJdHlwZSA9IEdMODYxX1dSSVRFOworCX0gZWxzZSB7IC8qIHJ3ICovCisJCXJlcSA9IEdMODYxX1JFUV9JMkNfUkVBRDsKKwkJdHlwZSA9IEdMODYxX1JFQUQ7CisJfQorCisJc3dpdGNoICh3bGVuKSB7CisJY2FzZSAxOgorCQlpbmRleCA9IHdidWZbMF07CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaW5kZXggPSB3YnVmWzBdOworCQl2YWx1ZSA9IHZhbHVlICsgd2J1ZlsxXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd2Fybigid2xlbiA9ICV4LCBhYm9ydGluZy4iLCB3bGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkLT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZC0+dWRldiwgMCksIHJlcSwgdHlwZSwKKwkJCSAgICAgICB2YWx1ZSwgaW5kZXgsIHJidWYsIHJsZW4sIDIwMDApOworfQorCisvKiBJMkMgKi8KK3N0YXRpYyBpbnQgZ2w4NjFfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwKKwkJCSAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCBpOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKG51bSA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCS8qIHdyaXRlL3JlYWQgcmVxdWVzdCAqLworCQlpZiAoaSsxIDwgbnVtICYmIChtc2dbaSsxXS5mbGFncyAmIEkyQ19NX1JEKSkgeworCQkJaWYgKGdsODYxX2kyY19tc2coZCwgbXNnW2ldLmFkZHIsIG1zZ1tpXS5idWYsCisJCQkJCSAgbXNnW2ldLmxlbiwgbXNnW2krMV0uYnVmLCBtc2dbaSsxXS5sZW4pIDwgMCkKKwkJCQlicmVhazsKKwkJCWkrKzsKKwkJfSBlbHNlCisJCQlpZiAoZ2w4NjFfaTJjX21zZyhkLCBtc2dbaV0uYWRkciwgbXNnW2ldLmJ1ZiwKKwkJCQkJICBtc2dbaV0ubGVuLCBOVUxMLCAwKSA8IDApCisJCQkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCXJldHVybiBpOworfQorCitzdGF0aWMgdTMyIGdsODYxX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gZ2w4NjFfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBnbDg2MV9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGdsODYxX2kyY19mdW5jLAorfTsKKworLyogQ2FsbGJhY2tzIGZvciBEVkIgVVNCICovCitzdGF0aWMgaW50IGdsODYxX2lkZW50aWZ5X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCXN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcywKKwkJCQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKipkZXNjLAorCQkJCWludCAqY29sZCkKK3sKKwkqY29sZCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBnbDg2MV96bDEwMzUzX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MWUsCisJLm5vX3R1bmVyID0gMSwKKwkucGFyYWxsZWxfdHMgPSAxLAorfTsKKworc3RhdGljIGludCBnbDg2MV9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlpZiAoKGFkYXAtPmZlID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwgJmdsODYxX3psMTAzNTNfY29uZmlnLAorCQkJCSAgICZhZGFwLT5kZXYtPmkyY19hZGFwKSkgIT0gTlVMTCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHN0cnVjdCBxdDEwMTBfY29uZmlnIGdsODYxX3F0MTAxMF9jb25maWcgPSB7CisJLmkyY19hZGRyZXNzID0gMHhjNAorfTsKKworc3RhdGljIGludCBnbDg2MV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gZHZiX2F0dGFjaChxdDEwMTBfYXR0YWNoLAorCQkJICBhZGFwLT5mZSwgJmFkYXAtPmRldi0+aTJjX2FkYXAsCisJCQkgICZnbDg2MV9xdDEwMTBfY29uZmlnKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7Cit9CisKKy8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZ2w4NjFfcHJvcGVydGllczsKKworc3RhdGljIGludCBnbDg2MV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQ7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCWludCByZXQ7CisKKwlpZiAoaW50Zi0+bnVtX2FsdHNldHRpbmcgPCAyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgocmV0ID0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZ2w4NjFfcHJvcGVydGllcywgVEhJU19NT0RVTEUsICZkKSkgPT0gMCkgeworCQlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaW50ZiwgMCk7CisKKwkJaWYgKGFsdCA9PSBOVUxMKSB7CisJCQlkZWJfcmMoIm5vdCBhbHQgZm91bmQhXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZC0+dWRldiwgYWx0LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQkJCWFsdC0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGdsODYxX3RhYmxlIFtdID0geworCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9NU0ksIFVTQl9QSURfTVNJX01FR0FTS1k1ODBfNTU4MDEpIH0sCisJCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGdsODYxX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGdsODYxX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKworCS5zaXplX29mX3ByaXYgICAgID0gMCwKKworCS5pZGVudGlmeV9zdGF0ZSAgID0gZ2w4NjFfaWRlbnRpZnlfc3RhdGUsCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7eworCisJCS5mcm9udGVuZF9hdHRhY2ggID0gZ2w4NjFfZnJvbnRlbmRfYXR0YWNoLAorCQkudHVuZXJfYXR0YWNoICAgICA9IGdsODYxX3R1bmVyX2F0dGFjaCwKKworCQkuc3RyZWFtID0geworCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCS5jb3VudCA9IDcsCisJCQkuZW5kcG9pbnQgPSAweDgxLAorCQkJLnUgPSB7CisJCQkJLmJ1bGsgPSB7CisJCQkJCS5idWZmZXJzaXplID0gNTEyLAorCQkJCX0KKwkJCX0KKwkJfSwKKwl9fSwKKwkuaTJjX2FsZ28gICAgICAgICA9ICZnbDg2MV9pMmNfYWxnbywKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeyAgICJNU0kgTWVnYSBTa3kgNTU4MDEgRFZCLVQgVVNCMi4wIiwKKwkJCXsgJmdsODYxX3RhYmxlWzBdLCBOVUxMIH0sCisJCQl7IE5VTEwgfSwKKwkJfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZ2w4NjFfZHJpdmVyID0geworCS5uYW1lCQk9ICJkdmJfdXNiX2dsODYxIiwKKwkucHJvYmUJCT0gZ2w4NjFfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBkdmJfdXNiX2RldmljZV9leGl0LAorCS5pZF90YWJsZQk9IGdsODYxX3RhYmxlLAorfTsKKworLyogbW9kdWxlIHN0dWZmICovCitzdGF0aWMgaW50IF9faW5pdCBnbDg2MV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IHVzYl9yZWdpc3RlcigmZ2w4NjFfZHJpdmVyKSkpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZ2w4NjFfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmZ2w4NjFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKGdsODYxX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0IChnbDg2MV9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkNhcmwgTHVuZHF2aXN0IDxjb21hYnVnQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIE1TSSBNZWdhIFNreSA1ODAgRFZCLVQgVVNCMi4wIC8gR0w4NjEiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ2w4NjEuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ2w4NjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmE1MWFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9nbDg2MS5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX0RWQl9VU0JfR0w4NjFfSF8KKyNkZWZpbmUgX0RWQl9VU0JfR0w4NjFfSF8KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImdsODYxIgorI2luY2x1ZGUgImR2Yi11c2IuaCIKKworI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfZ2w4NjFfZGVidWcsMHgwMSxhcmdzKQorCisjZGVmaW5lIEdMODYxX1dSSVRFCQkweDQwCisjZGVmaW5lIEdMODYxX1JFQUQJCTB4YzAKKworI2RlZmluZSBHTDg2MV9SRVFfSTJDX1dSSVRFCTB4MDEKKyNkZWZpbmUgR0w4NjFfUkVRX0kyQ19SRUFECTB4MDIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4YjI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYwpAQCAtMCwwICsxLDU0MSBAQAorLyogRFZCIFVTQiBjb21wbGlhbnQgbGludXggZHJpdmVyIGZvciBNU0kgTWVnYSBTa3kgNTgwIERWQi1UIFVTQjIuMCByZWNlaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBYXBvIFRhaGtvbGEgKGFldEByYXN0ZXJidXJuLm9yZykKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqCVNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqLworCisjaW5jbHVkZSAibTkyMHguaCIKKworI2luY2x1ZGUgIm10MzUyLmgiCisjaW5jbHVkZSAibXQzNTJfcHJpdi5oIgorI2luY2x1ZGUgInF0MTAxMC5oIgorCisvKiBkZWJ1ZyAqLworc3RhdGljIGludCBkdmJfdXNiX205MjB4X2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGR2Yl91c2JfbTkyMHhfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1yYyAob3ItYWJsZSkpLiIgRFZCX1VTQl9ERUJVR19TVEFUVVMpOworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IG1lZ2Fza3lfcmNfa2V5cyBbXSA9IHsKKwl7IDB4MCwgMHgxMiwgS0VZX1BPV0VSIH0sCisJeyAweDAsIDB4MWUsIEtFWV9DWUNMRVdJTkRPV1MgfSwgLyogbWluL21heCAqLworCXsgMHgwLCAweDAyLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAsIDB4MDUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwLCAweDAzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MCwgMHgwNiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MCwgMHgwNCwgS0VZX01VVEUgfSwKKwl7IDB4MCwgMHgwNywgS0VZX09LIH0sIC8qIFRTICovCisJeyAweDAsIDB4MDgsIEtFWV9TVE9QIH0sCisJeyAweDAsIDB4MDksIEtFWV9NRU5VIH0sIC8qIHN3YXAgKi8KKwl7IDB4MCwgMHgwYSwgS0VZX1JFV0lORCB9LAorCXsgMHgwLCAweDFiLCBLRVlfUEFVU0UgfSwKKwl7IDB4MCwgMHgxZiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDAsIDB4MGMsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MCwgMHgwZCwgS0VZX0NBTUVSQSB9LCAvKiBzY3JlZW5zaG90ICovCisJeyAweDAsIDB4MGUsIEtFWV9DT0ZGRUUgfSwgLyogIk1UUyIgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IG05MjA2X3JlYWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IHJlcXVlc3QsIHUxNiB2YWx1ZSxcCisJCQkgICAgIHUxNiBpbmRleCwgdm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICByZXF1ZXN0LCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOLAorCQkJICAgICAgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplLCAyMDAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChyZXQgIT0gc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbTkyMDZfd3JpdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IHJlcXVlc3QsCisJCQkgICAgICB1MTYgdmFsdWUsIHUxNiBpbmRleCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIHJlcXVlc3QsIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VULAorCQkJICAgICAgdmFsdWUsIGluZGV4LCBOVUxMLCAwLCAyMDAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG05MjA2X3JjX2luaXQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IHJldCA9IDA7CisKKwkvKiBSZW1vdGUgY29udHJvbGxlciBpbml0LiAqLworCWlmICgocmV0ID0gbTkyMDZfd3JpdGUodWRldiwgTTkyMDZfQ09SRSwgMHhhOCwgTTkyMDZfUkNfSU5JVDIpKSAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBtOTIwNl93cml0ZSh1ZGV2LCBNOTIwNl9DT1JFLCAweDUxLCBNOTIwNl9SQ19JTklUMSkpICE9IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG05MjA2X3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgbTkyMDZfc3RhdGUgKm0gPSBkLT5wcml2OworCWludCBpLCByZXQgPSAwOworCXU4IHJjX3N0YXRlWzJdOworCisKKwlpZiAoKHJldCA9IG05MjA2X3JlYWQoZC0+dWRldiwgTTkyMDZfQ09SRSwgMHgwLCBNOTIwNl9SQ19TVEFURSwgcmNfc3RhdGUsIDEpKSAhPSAwKQorCQlnb3RvIHVubG9jazsKKworCWlmICgocmV0ID0gbTkyMDZfcmVhZChkLT51ZGV2LCBNOTIwNl9DT1JFLCAweDAsIE05MjA2X1JDX0tFWSwgcmNfc3RhdGUgKyAxLCAxKSkgIT0gMCkKKwkJZ290byB1bmxvY2s7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZWdhc2t5X3JjX2tleXMpOyBpKyspCisJCWlmIChtZWdhc2t5X3JjX2tleXNbaV0uZGF0YSA9PSByY19zdGF0ZVsxXSkgeworCQkJKmV2ZW50ID0gbWVnYXNreV9yY19rZXlzW2ldLmV2ZW50OworCisJCQlzd2l0Y2gocmNfc3RhdGVbMF0pIHsKKwkJCWNhc2UgMHg4MDoKKwkJCQkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7CisJCQkJZ290byB1bmxvY2s7CisKKwkJCWNhc2UgMHg5MzoKKwkJCWNhc2UgMHg5MjoKKwkJCQltLT5yZXBfY291bnQgPSAwOworCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKKwkJCQlnb3RvIHVubG9jazsKKworCQkJY2FzZSAweDkxOgorCQkJCS8qIEZvciBjb21mb3J0LiAqLworCQkJCWlmICgrK20tPnJlcF9jb3VudCA+IDIpCisJCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUkVQRUFUOworCQkJCWdvdG8gdW5sb2NrOworCisJCQlkZWZhdWx0OgorCQkJCWRlYl9yYygiVW5leHBlY3RlZCByYyByZXNwb25zZSAleFxuIiwgcmNfc3RhdGVbMF0pOworCQkJCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKKwkJCQlnb3RvIHVubG9jazsKKwkJCX0KKwkJfQorCisJaWYgKHJjX3N0YXRlWzFdICE9IDApCisJCWRlYl9yYygiVW5rbm93biByYyBrZXkgJXhcbiIsIHJjX3N0YXRlWzFdKTsKKworCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKKworCXVubG9jazoKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEkyQyAqLworc3RhdGljIGludCBtOTIwNl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLAorCQkJICBpbnQgbnVtKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJc3RydWN0IG05MjA2X3N0YXRlICptID0gZC0+cHJpdjsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWlmIChudW0gPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlpZiAoKHJldCA9IG05MjA2X3dyaXRlKGQtPnVkZXYsIE05MjA2X0kyQywgbXNnW2ldLmFkZHIsIDB4ODApKSAhPSAwKQorCQkJZ290byB1bmxvY2s7CisKKwkJaWYgKChyZXQgPSBtOTIwNl93cml0ZShkLT51ZGV2LCBNOTIwNl9JMkMsIG1zZ1tpXS5idWZbMF0sIDB4MCkpICE9IDApCisJCQlnb3RvIHVubG9jazsKKworCQlpZiAoaSArIDEgPCBudW0gJiYgbXNnW2kgKyAxXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQlpbnQgaTJjX2k7CisKKwkJCWZvciAoaTJjX2kgPSAwOyBpMmNfaSA8IE05MjA2X0kyQ19NQVg7IGkyY19pKyspCisJCQkJaWYgKG1zZ1tpXS5hZGRyID09IG0tPmkyY19yW2kyY19pXS5hZGRyKQorCQkJCQlicmVhazsKKworCQkJaWYgKGkyY19pID49IE05MjA2X0kyQ19NQVgpIHsKKwkJCQlkZWJfcmMoIk5vIG1hZ2ljIGZvciBpMmMgYWRkciFcbiIpOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byB1bmxvY2s7CisJCQl9CisKKwkJCWlmICgocmV0ID0gbTkyMDZfd3JpdGUoZC0+dWRldiwgTTkyMDZfSTJDLCBtLT5pMmNfcltpMmNfaV0ubWFnaWMsIDB4ODApKSAhPSAwKQorCQkJCWdvdG8gdW5sb2NrOworCisJCQlpZiAoKHJldCA9IG05MjA2X3JlYWQoZC0+dWRldiwgTTkyMDZfSTJDLCAweDAsIDB4NjAsIG1zZ1tpICsgMV0uYnVmLCBtc2dbaSArIDFdLmxlbikpICE9IDApCisJCQkJZ290byB1bmxvY2s7CisKKwkJCWkrKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChtc2dbaV0ubGVuICE9IDIpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmICgocmV0ID0gbTkyMDZfd3JpdGUoZC0+dWRldiwgTTkyMDZfSTJDLCBtc2dbaV0uYnVmWzFdLCAweDQwKSkgIT0gMCkKKwkJCQlnb3RvIHVubG9jazsKKwkJfQorCX0KKwlyZXQgPSBpOworCXVubG9jazoKKwltdXRleF91bmxvY2soJmQtPmkyY19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIG05MjA2X2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gbTkyMDZfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBtOTIwNl9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IG05MjA2X2kyY19mdW5jLAorfTsKKworCitzdGF0aWMgaW50IG05MjA2X3NldF9maWx0ZXIoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IHR5cGUsIGludCBpZHgsCisJCQkgICAgaW50IHBpZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwaWQgPj0gMHg4MDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBpZCB8PSAweDgwMDA7CisKKwlpZiAoKHJldCA9IG05MjA2X3dyaXRlKGFkYXAtPmRldi0+dWRldiwgTTkyMDZfRklMVEVSLCBwaWQsICh0eXBlIDw8IDgpIHwgKGlkeCAqIDQpICkpICE9IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoKHJldCA9IG05MjA2X3dyaXRlKGFkYXAtPmRldi0+dWRldiwgTTkyMDZfRklMVEVSLCAwLCAodHlwZSA8PCA4KSB8IChpZHggKiA0KSApKSAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtOTIwNl91cGRhdGVfZmlsdGVycyhzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBtOTIwNl9zdGF0ZSAqbSA9IGFkYXAtPmRldi0+cHJpdjsKKwlpbnQgZW5hYmxlZCA9IG0tPmZpbHRlcmluZ19lbmFibGVkOworCWludCBpLCByZXQgPSAwLCBmaWx0ZXIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE05MjA2X01BWF9GSUxURVJTOyBpKyspCisJCWlmIChtLT5maWx0ZXJzW2ldID09IDgxOTIpCisJCQllbmFibGVkID0gMDsKKworCS8qIERpc2FibGUgYWxsIGZpbHRlcnMgKi8KKwlpZiAoKHJldCA9IG05MjA2X3NldF9maWx0ZXIoYWRhcCwgMHg4MSwgMSwgZW5hYmxlZCkpICE9IDApCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTTkyMDZfTUFYX0ZJTFRFUlM7IGkrKykKKwkJaWYgKChyZXQgPSBtOTIwNl9zZXRfZmlsdGVyKGFkYXAsIDB4ODEsIGkgKyAyLCAwKSkgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwlpZiAoKHJldCA9IG05MjA2X3NldF9maWx0ZXIoYWRhcCwgMHg4MiwgMCwgMHgwKSkgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNldCAqLworCWlmIChlbmFibGVkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNOTIwNl9NQVhfRklMVEVSUzsgaSsrKSB7CisJCQlpZiAobS0+ZmlsdGVyc1tpXSA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoKHJldCA9IG05MjA2X3NldF9maWx0ZXIoYWRhcCwgMHg4MSwgZmlsdGVyICsgMiwgbS0+ZmlsdGVyc1tpXSkpICE9IDApCisJCQkJcmV0dXJuIHJldDsKKworCQkJZmlsdGVyKys7CisJCX0KKwl9CisKKwlpZiAoKHJldCA9IG05MjA2X3NldF9maWx0ZXIoYWRhcCwgMHg4MiwgMCwgMHgwMmY1KSkgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbTkyMDZfcGlkX2ZpbHRlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKK3sKKwlzdHJ1Y3QgbTkyMDZfc3RhdGUgKm0gPSBhZGFwLT5kZXYtPnByaXY7CisKKwltLT5maWx0ZXJpbmdfZW5hYmxlZCA9IG9ub2ZmID8gMSA6IDA7CisKKwlyZXR1cm4gbTkyMDZfdXBkYXRlX2ZpbHRlcnMoYWRhcCk7Cit9CisKK3N0YXRpYyBpbnQgbTkyMDZfcGlkX2ZpbHRlcihzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgaW5kZXgsIHUxNiBwaWQsCisJCQkgICAgaW50IG9ub2ZmKQoreworCXN0cnVjdCBtOTIwNl9zdGF0ZSAqbSA9IGFkYXAtPmRldi0+cHJpdjsKKworCW0tPmZpbHRlcnNbaW5kZXhdID0gb25vZmYgPyBwaWQgOiAwOworCisJcmV0dXJuIG05MjA2X3VwZGF0ZV9maWx0ZXJzKGFkYXApOworfQorCitzdGF0aWMgaW50IG05MjA2X2Zpcm13YXJlX2Rvd25sb2FkKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCit7CisJdTE2IHZhbHVlLCBpbmRleCwgc2l6ZTsKKwl1OCByZWFkWzRdLCAqYnVmZjsKKwlpbnQgaSwgcGFzcywgcmV0ID0gMDsKKworCWJ1ZmYgPSBrbWFsbG9jKDY1NTM2LCBHRlBfS0VSTkVMKTsKKworCWlmICgocmV0ID0gbTkyMDZfcmVhZCh1ZGV2LCBNOTIwNl9GSUxURVIsIDB4MCwgMHg4MDAwLCByZWFkLCA0KSkgIT0gMCkKKwkJZ290byBkb25lOworCWRlYl9yYygiJXggJXggJXggJXhcbiIsIHJlYWRbMF0sIHJlYWRbMV0sIHJlYWRbMl0sIHJlYWRbM10pOworCisJaWYgKChyZXQgPSBtOTIwNl9yZWFkKHVkZXYsIE05MjA2X0ZXLCAweDAsIDB4MCwgcmVhZCwgMSkpICE9IDApCisJCWdvdG8gZG9uZTsKKwlkZWJfcmMoIiV4XG4iLCByZWFkWzBdKTsKKworCWZvciAocGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKKwkJZm9yIChpID0gMDsgaSArIChzaXplb2YodTE2KSAqIDMpIDwgZnctPnNpemU7KSB7CisJCQl2YWx1ZSA9IGxlMTZfdG9fY3B1KCoodTE2ICopKGZ3LT5kYXRhICsgaSkpOworCQkJaSArPSBzaXplb2YodTE2KTsKKworCQkJaW5kZXggPSBsZTE2X3RvX2NwdSgqKHUxNiAqKShmdy0+ZGF0YSArIGkpKTsKKwkJCWkgKz0gc2l6ZW9mKHUxNik7CisKKwkJCXNpemUgPSBsZTE2X3RvX2NwdSgqKHUxNiAqKShmdy0+ZGF0YSArIGkpKTsKKwkJCWkgKz0gc2l6ZW9mKHUxNik7CisKKwkJCWlmIChwYXNzID09IDEpIHsKKwkJCQkvKiBXaWxsIHN0YWxsIGlmIHVzaW5nIGZ3LT5kYXRhIC4uLiAqLworCQkJCW1lbWNweShidWZmLCBmdy0+ZGF0YSArIGksIHNpemUpOworCisJCQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LDApLAorCQkJCQkgICAgTTkyMDZfRlcsCisJCQkJCSAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCwKKwkJCQkJICAgIHZhbHVlLCBpbmRleCwgYnVmZiwgc2l6ZSwgMjApOworCQkJCWlmIChyZXQgIT0gc2l6ZSkgeworCQkJCQlkZWJfcmMoImVycm9yIHdoaWxlIHVwbG9hZGluZyBmdyFcbiIpOworCQkJCQlyZXQgPSAtRUlPOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCQkJCW1zbGVlcCgzKTsKKwkJCX0KKwkJCWkgKz0gc2l6ZTsKKwkJfQorCQlpZiAoaSAhPSBmdy0+c2l6ZSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCW1zbGVlcCgzNik7CisKKwkvKiBtOTIwNiB3aWxsIGRpc2Nvbm5lY3QgaXRzZWxmIGZyb20gdGhlIGJ1cyBhZnRlciB0aGlzLiAqLworCSh2b2lkKSBtOTIwNl93cml0ZSh1ZGV2LCBNOTIwNl9DT1JFLCAweDAxLCBNOTIwNl9GV19HTyk7CisJZGViX3JjKCJmaXJtd2FyZSB1cGxvYWRlZCFcbiIpOworCisJZG9uZToKKwlrZnJlZShidWZmKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENhbGxiYWNrcyBmb3IgRFZCIFVTQiAqLworc3RhdGljIGludCBtZWdhc2t5X2lkZW50aWZ5X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCSAgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnByb3BzLAorCQkJCSAgc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICoqZGVzYywKKwkJCQkgIGludCAqY29sZCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisKKwlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcodXNiX2lmbnVtX3RvX2lmKHVkZXYsIDApLCAxKTsKKwkqY29sZCA9IChhbHQgPT0gTlVMTCkgPyAxIDogMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lZ2Fza3lfbXQzNTJfZGVtb2RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwl1OCBjb25maWdbXSA9IHsgQ09ORklHLCAweDNkIH07CisJdTggY2xvY2tbXSA9IHsgQ0xPQ0tfQ1RMLCAweDMwIH07CisJdTggcmVzZXRbXSA9IHsgUkVTRVQsIDB4ODAgfTsKKwl1OCBhZGNfY3RsW10gPSB7IEFEQ19DVExfMSwgMHg0MCB9OworCXU4IGFnY1tdID0geyBBR0NfVEFSR0VULCAweDFjLCAweDIwIH07CisJdTggc2VjX2FnY1tdID0geyAweDY5LCAweDAwLCAweGZmLCAweGZmLCAweDQwLCAweGZmLCAweDAwLCAweDQwLCAweDQwIH07CisJdTggdW5rMVtdID0geyAweDkzLCAweDFhIH07CisJdTggdW5rMltdID0geyAweGI1LCAweDdhIH07CisKKwltdDM1Ml93cml0ZShmZSwgY29uZmlnLCBBUlJBWV9TSVpFKGNvbmZpZykpOworCW10MzUyX3dyaXRlKGZlLCBjbG9jaywgQVJSQVlfU0laRShjbG9jaykpOworCW10MzUyX3dyaXRlKGZlLCByZXNldCwgQVJSQVlfU0laRShyZXNldCkpOworCW10MzUyX3dyaXRlKGZlLCBhZGNfY3RsLCBBUlJBWV9TSVpFKGFkY19jdGwpKTsKKwltdDM1Ml93cml0ZShmZSwgYWdjLCBBUlJBWV9TSVpFKGFnYykpOworCW10MzUyX3dyaXRlKGZlLCBzZWNfYWdjLCBBUlJBWV9TSVpFKHNlY19hZ2MpKTsKKwltdDM1Ml93cml0ZShmZSwgdW5rMSwgQVJSQVlfU0laRSh1bmsxKSk7CisJbXQzNTJfd3JpdGUoZmUsIHVuazIsIEFSUkFZX1NJWkUodW5rMikpOworCisJZGViX3JjKCJEZW1vZCBpbml0IVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtdDM1Ml9jb25maWcgbWVnYXNreV9tdDM1Ml9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDFlLAorCS5ub190dW5lciA9IDEsCisJLmRlbW9kX2luaXQgPSBtZWdhc2t5X210MzUyX2RlbW9kX2luaXQsCit9OworCitzdGF0aWMgaW50IG1lZ2Fza3lfbXQzNTJfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IG05MjA2X3N0YXRlICptID0gYWRhcC0+ZGV2LT5wcml2OworCisJZGViX3JjKCJtZWdhc2t5X2Zyb250ZW5kX2F0dGFjaCFcbiIpOworCisJbS0+aTJjX3JbTTkyMDZfSTJDX0RFTU9EXS5hZGRyID0gbWVnYXNreV9tdDM1Ml9jb25maWcuZGVtb2RfYWRkcmVzczsKKwltLT5pMmNfcltNOTIwNl9JMkNfREVNT0RdLm1hZ2ljID0gMHgxZjsKKworCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJm1lZ2Fza3lfbXQzNTJfY29uZmlnLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpID09IE5VTEwpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcXQxMDEwX2NvbmZpZyBtZWdhc2t5X3F0MTAxMF9jb25maWcgPSB7CisJLmkyY19hZGRyZXNzID0gMHhjNAorfTsKKworc3RhdGljIGludCBtZWdhc2t5X3F0MTAxMF90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgbTkyMDZfc3RhdGUgKm0gPSBhZGFwLT5kZXYtPnByaXY7CisKKwltLT5pMmNfcltNOTIwNl9JMkNfVFVORVJdLmFkZHIgPSBtZWdhc2t5X3F0MTAxMF9jb25maWcuaTJjX2FkZHJlc3M7CisJbS0+aTJjX3JbTTkyMDZfSTJDX1RVTkVSXS5tYWdpYyA9IDB4YzU7CisKKwlpZiAoZHZiX2F0dGFjaChxdDEwMTBfYXR0YWNoLCBhZGFwLT5mZSwgJmFkYXAtPmRldi0+aTJjX2FkYXAsCisJCSAgICAgICAmbWVnYXNreV9xdDEwMTBfY29uZmlnKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCisvKiBEVkIgVVNCIERyaXZlciBzdHVmZiAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIG1lZ2Fza3lfcHJvcGVydGllczsKKworc3RhdGljIGludCBtOTIweF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQ7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJm1lZ2Fza3lfcHJvcGVydGllcywgVEhJU19NT0RVTEUsICZkKSkgPT0gMCkgeworCQlkZWJfcmMoInByb2JlZCFcbiIpOworCisJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCAxKTsKKwkJaWYgKGFsdCA9PSBOVUxMKSB7CisJCQlkZWJfcmMoIm5vdCBhbHQgZm91bmQhXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZC0+dWRldiwgYWx0LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQkJCWFsdC0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlkZWJfcmMoIkNoYW5nZWQgdG8gYWx0ZXJuYXRlIHNldHRpbmchXG4iKTsKKworCQlpZiAoKHJldCA9IG05MjA2X3JjX2luaXQoZC0+dWRldikpICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbTkyMHhfdGFibGUgW10gPSB7CisJCXsgVVNCX0RFVklDRShVU0JfVklEX01TSSwgVVNCX1BJRF9NU0lfTUVHQVNLWTU4MCkgfSwKKwkJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbTkyMHhfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgbWVnYXNreV9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKworCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKwkuZmlybXdhcmUgPSAiZHZiLXVzYi1tZWdhc2t5LTAyLmZ3IiwKKwkuZG93bmxvYWRfZmlybXdhcmUgPSBtOTIwNl9maXJtd2FyZV9kb3dubG9hZCwKKworCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCS5yY19rZXlfbWFwICAgICAgID0gbWVnYXNreV9yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShtZWdhc2t5X3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gbTkyMDZfcmNfcXVlcnksCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgbTkyMDZfc3RhdGUpLAorCisJLmlkZW50aWZ5X3N0YXRlICAgPSBtZWdhc2t5X2lkZW50aWZ5X3N0YXRlLAorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0ge3sKKwkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfAorCQkJRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYsCisKKwkJLnBpZF9maWx0ZXJfY291bnQgPSA4LAorCQkucGlkX2ZpbHRlciAgICAgICA9IG05MjA2X3BpZF9maWx0ZXIsCisJCS5waWRfZmlsdGVyX2N0cmwgID0gbTkyMDZfcGlkX2ZpbHRlcl9jdHJsLAorCisJCS5mcm9udGVuZF9hdHRhY2ggID0gbWVnYXNreV9tdDM1Ml9mcm9udGVuZF9hdHRhY2gsCisJCS50dW5lcl9hdHRhY2ggICAgID0gbWVnYXNreV9xdDEwMTBfdHVuZXJfYXR0YWNoLAorCisJCS5zdHJlYW0gPSB7CisJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJLmNvdW50ID0gOCwKKwkJCS5lbmRwb2ludCA9IDB4ODEsCisJCQkudSA9IHsKKwkJCQkuYnVsayA9IHsKKwkJCQkJLmJ1ZmZlcnNpemUgPSA1MTIsCisJCQkJfQorCQkJfQorCQl9LAorCX19LAorCS5pMmNfYWxnbyAgICAgICAgID0gJm05MjA2X2kyY19hbGdvLAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7ICAgIk1TSSBNZWdhIFNreSA1ODAgRFZCLVQgVVNCMi4wIiwKKwkJCXsgJm05MjB4X3RhYmxlWzBdLCBOVUxMIH0sCisJCQl7IE5VTEwgfSwKKwkJfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbTkyMHhfZHJpdmVyID0geworCS5uYW1lCQk9ICJkdmJfdXNiX205MjB4IiwKKwkucHJvYmUJCT0gbTkyMHhfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBkdmJfdXNiX2RldmljZV9leGl0LAorCS5pZF90YWJsZQk9IG05MjB4X3RhYmxlLAorfTsKKworLyogbW9kdWxlIHN0dWZmICovCitzdGF0aWMgaW50IF9faW5pdCBtOTIweF9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IHVzYl9yZWdpc3RlcigmbTkyMHhfZHJpdmVyKSkpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbTkyMHhfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmbTkyMHhfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKG05MjB4X21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0IChtOTIweF9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFhcG8gVGFoa29sYSA8YWV0QHJhc3RlcmJ1cm4ub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgTVNJIE1lZ2EgU2t5IDU4MCBEVkItVCBVU0IyLjAgLyBVbGkgbTkyMHgiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzU0MTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgX0RWQl9VU0JfTTkyMFhfSF8KKyNkZWZpbmUgX0RWQl9VU0JfTTkyMFhfSF8KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggIm05MjB4IgorI2luY2x1ZGUgImR2Yi11c2IuaCIKKworI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfbTkyMHhfZGVidWcsMHgwMSxhcmdzKQorCisjZGVmaW5lIE05MjA2X0NPUkUJMHgyMgorI2RlZmluZSBNOTIwNl9SQ19TVEFURQkweGZmNTEKKyNkZWZpbmUgTTkyMDZfUkNfS0VZCTB4ZmY1MgorI2RlZmluZSBNOTIwNl9SQ19JTklUMQkweGZmNTQKKyNkZWZpbmUgTTkyMDZfUkNfSU5JVDIJMHhmZjU1CisjZGVmaW5lIE05MjA2X0ZXX0dPCTB4ZmY2OQorCisjZGVmaW5lIE05MjA2X0kyQwkweDIzCisjZGVmaW5lIE05MjA2X0ZJTFRFUgkweDI1CisjZGVmaW5lIE05MjA2X0ZXCTB4MzAKKworI2RlZmluZSBNOTIwNl9NQVhfRklMVEVSUyA4CisKKyNkZWZpbmUgTTkyMDZfSTJDX1RVTkVSCTAKKyNkZWZpbmUgTTkyMDZfSTJDX0RFTU9ECTEKKyNkZWZpbmUgTTkyMDZfSTJDX01BWAkyCisKK3N0cnVjdCBtOTIwNl9zdGF0ZSB7CisJdTE2IGZpbHRlcnNbTTkyMDZfTUFYX0ZJTFRFUlNdOworCWludCBmaWx0ZXJpbmdfZW5hYmxlZDsKKwlpbnQgcmVwX2NvdW50OworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgYWRkcjsKKwkJdW5zaWduZWQgY2hhciBtYWdpYzsKKwl9aTJjX3JbTTkyMDZfSTJDX01BWF07Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IGFmMzE0YmIuLjIyYzJjZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC0yOTAsNiArMjkwLDEzIEBACiAJaGVscAogCSAgQSBEVkItUyBzaWxpY29uIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgdHVuZXIuCiAKK2NvbmZpZyBEVkJfVFVORVJfUVQxMDEwCisJdHJpc3RhdGUgIlF1YW50ZWsgUVQxMDEwIHNpbGljb24gdHVuZXIiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiB0dW5lciBRVDEwMTAgZnJvbSBRdWFudGVrLgorCiBjb25maWcgRFZCX1RVTkVSX01UMjA2MAogCXRyaXN0YXRlICJNaWNyb3R1bmUgTVQyMDYwIHNpbGljb24gSUYgdHVuZXIiCiAJZGVwZW5kcyBvbiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQppbmRleCAzZmE2ZTVkLi5hNjQ2ZDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCkBAIC0zOCw1ICszOCw2IEBACiBvYmotJChDT05GSUdfRFZCX1REQTEwMDg2KSArPSB0ZGExMDA4Ni5vCiBvYmotJChDT05GSUdfRFZCX1REQTgyNlgpICs9IHRkYTgyNngubwogb2JqLSQoQ09ORklHX0RWQl9UVU5FUl9NVDIwNjApICs9IG10MjA2MC5vCitvYmotJChDT05GSUdfRFZCX1RVTkVSX1FUMTAxMCkgKz0gcXQxMDEwLm8KIG9iai0kKENPTkZJR19EVkJfVFVBNjEwMCkgKz0gdHVhNjEwMC5vCiBvYmotJChDT05GSUdfRFZCX1RVTkVSX0xHSDA2WEYpICs9IGxnaDA2eGYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmMKaW5kZXggYWU5NjM5NS4uMTBmYzBjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlpZiAoc3JhdGU8NTAwMDAwKQogCQlzcmF0ZT01MDAwMDA7CiAKLQlmb3IoaT0wOyhpPHNpemVvZihiYW5kcykvc2l6ZW9mKGJhbmRzWzBdKSkmJihzcmF0ZT5iYW5kc1tpXSk7aSsrKQorCWZvcihpID0gMDsgKGkgPCBBUlJBWV9TSVpFKGJhbmRzKSkgJiYgKHNyYXRlPmJhbmRzW2ldKTsgaSsrKQogCQk7CiAJLyogZmlyc3QsIGNoZWNrIHdoaWNoIHNhbXBsZSByYXRlIGlzIGFwcHJvcHJpYXRlOiA0NSwgNjAgODAgb3IgOTAgTUh6LAogCSAgIGFuZCBzZXQgdGhlIFBMTCBhY2NvcmRpbmdseSAoUjA3WzE6MF0gRmNsaywgUjA2Wzc6NF0gUExMbXVsdCwKQEAgLTM2MSw3ICszNjEsNyBAQAogCiAJZHByaW50aygiJXM6IGluaXQgY2hpcFxuIiwgX19GVU5DVElPTl9fKTsKIAotCWZvcihpPTA7aTxzaXplb2YoY3gyNDExMF9yZWdkYXRhKS9zaXplb2YoY3gyNDExMF9yZWdkYXRhWzBdKTtpKyspIHsKKwlmb3IoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN4MjQxMTBfcmVnZGF0YSk7IGkrKykgewogCQljeDI0MTEwX3dyaXRlcmVnKHN0YXRlLCBjeDI0MTEwX3JlZ2RhdGFbaV0ucmVnLCBjeDI0MTEwX3JlZ2RhdGFbaV0uZGF0YSk7CiAJfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKaW5kZXggYTM1NmQyOC4uNzMyZTk0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCkBAIC01MDcsNyArNTA3LDcgQEAKIAlpbnQgaSA9IDA7CiAJaW50IHB1bXAgPSAyOwogCWludCBiYW5kID0gMDsKLQlpbnQgbnVtX2JhbmRzID0gc2l6ZW9mKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzKSAvIHNpemVvZihjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1swXSk7CisJaW50IG51bV9iYW5kcyA9IEFSUkFZX1NJWkUoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHMpOwogCiAJLyogRGVmYXVsdHMgZm9yIGxvdyBmcmVxLCBsb3cgcmF0ZSAqLwogCXN0YXRlLT5WQ0FhcmcgPSBjeDI0MTIzX0FHQ192YWxzWzBdLlZDQXByb2dkYXRhOwpAQCAtNTE2LDcgKzUxNiw3IEBACiAJdmNvX2RpdiA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzWzBdLlZDT2RpdmlkZXI7CiAKIAkvKiBGb3IgdGhlIGdpdmVuIHN5bWJvbCByYXRlLCBkZXRlcm1pbmUgdGhlIFZDQSwgVkdBIGFuZCBGSUxUVU5FIHByb2dyYW1taW5nIGJpdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGN4MjQxMjNfQUdDX3ZhbHMpIC8gc2l6ZW9mKGN4MjQxMjNfQUdDX3ZhbHNbMF0pOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3gyNDEyM19BR0NfdmFscyk7IGkrKykKIAl7CiAJCWlmICgoY3gyNDEyM19BR0NfdmFsc1tpXS5zeW1ib2xyYXRlX2xvdyA8PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpICYmCiAJCSAgICAoY3gyNDEyM19BR0NfdmFsc1tpXS5zeW1ib2xyYXRlX2hpZ2ggPj0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSApIHsKQEAgLTY1OCw3ICs2NTgsNyBAQAogCWRwcmludGsoIiVzOiAgaW5pdCBmcm9udGVuZFxuIixfX0ZVTkNUSU9OX18pOwogCiAJLyogQ29uZmlndXJlIHRoZSBkZW1vZCB0byBhIGdvb2Qgc2V0IG9mIGRlZmF1bHRzICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihjeDI0MTIzX3JlZ2RhdGEpIC8gc2l6ZW9mKGN4MjQxMjNfcmVnZGF0YVswXSk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjeDI0MTIzX3JlZ2RhdGEpOyBpKyspCiAJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIGN4MjQxMjNfcmVnZGF0YVtpXS5yZWcsIGN4MjQxMjNfcmVnZGF0YVtpXS5kYXRhKTsKIAogCS8qIFNldCB0aGUgTE5CIHBvbGFyaXR5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1iLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1iLmMKaW5kZXggYWRiYWJmZC4uYjZhZGVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWIuYwpAQCAtMjM5LDcgKzIzOSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JZGViX3NldGYoImhpZXJhY2h5OiAiKTsKKwlkZWJfc2V0ZigiaGllcmFyY2h5OiAiKTsKIAlzd2l0Y2ggKG9mZG0tPmhpZXJhcmNoeV9pbmZvcm1hdGlvbikgewogCQljYXNlIEhJRVJBUkNIWV9OT05FOgogCQkJZGViX3NldGYoIm5vbmUgIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmMKaW5kZXggMjNhYTc1YS4uMDU0ZDdlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAJdG1wID0gKChjaGFuLT5uZmZ0ICYgMHgxKSA8PCA3KSB8IChjaGFuLT5ndWFyZCA8PCA1KSB8IChjaGFuLT5ucWFtIDw8IDMpIHwgY2hhbi0+dml0X2FscGhhOwogCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAwLCB0bXApOwogCi0JZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDUsIHNlcSk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDUsICgxIDw8IDgpIHwgKChzZXEgJiAweGYpIDw8IDQpKTsKIAogCXRtcCA9IChjaGFuLT52aXRfaHJjaCA8PCA0KSB8IChjaGFuLT52aXRfc2VsZWN0X2hwKTsKIAlpZiAoIWNoYW4tPnZpdF9ocmNoIHx8IChjaGFuLT52aXRfaHJjaCAmJiBjaGFuLT52aXRfc2VsZWN0X2hwKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9xdDEwMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9xdDEwMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjVhYTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3F0MTAxMC5jCkBAIC0wLDAgKzEsNDg1IEBACisvKgorICogIERyaXZlciBmb3IgUXVhbnRlayBRVDEwMTAgc2lsaWNvbiB0dW5lcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKiAgICAgICAgICAgICAgICAgICAgIEFhcG8gVGFoa29sYSA8YWV0QHJhc3RlcmJ1cm4ub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyNpbmNsdWRlICJxdDEwMTAuaCIKKyNpbmNsdWRlICJxdDEwMTBfcHJpdi5oIgorCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworCisjZGVmaW5lIGRwcmludGsoYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHICJRVDEwMTA6ICIgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisvKiByZWFkIHNpbmdsZSByZWdpc3RlciAqLworc3RhdGljIGludCBxdDEwMTBfcmVhZHJlZyhzdHJ1Y3QgcXQxMDEwX3ByaXYgKnByaXYsIHU4IHJlZywgdTggKnZhbCkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7CisJCXsgLmFkZHIgPSBwcml2LT5jZmctPmkyY19hZGRyZXNzLAorCQkgIC5mbGFncyA9IDAsIC5idWYgPSAmcmVnLCAubGVuID0gMSB9LAorCQl7IC5hZGRyID0gcHJpdi0+Y2ZnLT5pMmNfYWRkcmVzcywKKwkJICAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IHZhbCwgLmxlbiA9IDEgfSwKKwl9OworCisJaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmMsIG1zZywgMikgIT0gMikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJxdDEwMTAgSTJDIHJlYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCXJldHVybiAwOworfQorCisvKiB3cml0ZSBzaW5nbGUgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQgcXQxMDEwX3dyaXRlcmVnKHN0cnVjdCBxdDEwMTBfcHJpdiAqcHJpdiwgdTggcmVnLCB1OCB2YWwpCit7CisJdTggYnVmWzJdID0geyByZWcsIHZhbCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBwcml2LT5jZmctPmkyY19hZGRyZXNzLAorCQkJICAgICAgIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CisKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZywgMSkgIT0gMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJxdDEwMTAgSTJDIHdyaXRlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogZHVtcCBhbGwgcmVnaXN0ZXJzICovCitzdGF0aWMgdm9pZCBxdDEwMTBfZHVtcF9yZWdzKHN0cnVjdCBxdDEwMTBfcHJpdiAqcHJpdikKK3sKKwljaGFyIGJ1Zls1Ml0sIGJ1ZjJbNF07CisJdTggcmVnLCB2YWw7CisKKwlmb3IgKHJlZyA9IDA7IDsgcmVnKyspIHsKKwkJaWYgKHJlZyAlIDE2ID09IDApIHsKKwkJCWlmIChyZWcpCisJCQkJcHJpbnRrKCIlc1xuIiwgYnVmKTsKKwkJCXNwcmludGYoYnVmLCAiJTAyeDogIiwgcmVnKTsKKwkJfQorCQlpZiAocXQxMDEwX3JlYWRyZWcocHJpdiwgcmVnLCAmdmFsKSA9PSAwKQorCQkJc3ByaW50ZihidWYyLCAiJTAyeCAiLCB2YWwpOworCQllbHNlCisJCQlzdHJjcHkoYnVmMiwgIi0tICIpOworCQlzdHJjYXQoYnVmLCBidWYyKTsKKwkJaWYgKHJlZyA9PSAweDJmKQorCQkJYnJlYWs7CisJfQorCXByaW50aygiJXNcbiIsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgcXQxMDEwX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBxdDEwMTBfcHJpdiAqcHJpdjsKKwlpbnQgZXJyOworCXUzMiBmcmVxLCBkaXYsIG1vZDEsIG1vZDI7CisJdTggaSwgdG1wdmFsLCByZWcwNTsKKwlxdDEwMTBfaTJjX29wZXJfdCByZFs0OF0gPSB7CisJCXsgUVQxMDEwX1dSLCAweDAxLCAweDgwIH0sCisJCXsgUVQxMDEwX1dSLCAweDAyLCAweDNmIH0sCisJCXsgUVQxMDEwX1dSLCAweDA1LCAweGZmIH0sIC8qIDAyIGMgd3JpdGUgKi8KKwkJeyBRVDEwMTBfV1IsIDB4MDYsIDB4NDQgfSwKKwkJeyBRVDEwMTBfV1IsIDB4MDcsIDB4ZmYgfSwgLyogMDQgYyB3cml0ZSAqLworCQl7IFFUMTAxMF9XUiwgMHgwOCwgMHgwOCB9LAorCQl7IFFUMTAxMF9XUiwgMHgwOSwgMHhmZiB9LCAvKiAwNiBjIHdyaXRlICovCisJCXsgUVQxMDEwX1dSLCAweDBhLCAweGZmIH0sIC8qIDA3IGMgd3JpdGUgKi8KKwkJeyBRVDEwMTBfV1IsIDB4MGIsIDB4ZmYgfSwgLyogMDggYyB3cml0ZSAqLworCQl7IFFUMTAxMF9XUiwgMHgwYywgMHhlMSB9LAorCQl7IFFUMTAxMF9XUiwgMHgxYSwgMHhmZiB9LCAvKiAxMCBjIHdyaXRlICovCisJCXsgUVQxMDEwX1dSLCAweDFiLCAweDAwIH0sCisJCXsgUVQxMDEwX1dSLCAweDFjLCAweDg5IH0sCisJCXsgUVQxMDEwX1dSLCAweDExLCAweGZmIH0sIC8qIDEzIGMgd3JpdGUgKi8KKwkJeyBRVDEwMTBfV1IsIDB4MTIsIDB4ZmYgfSwgLyogMTQgYyB3cml0ZSAqLworCQl7IFFUMTAxMF9XUiwgMHgyMiwgMHhmZiB9LCAvKiAxNSBjIHdyaXRlICovCisJCXsgUVQxMDEwX1dSLCAweDFlLCAweDAwIH0sCisJCXsgUVQxMDEwX1dSLCAweDFlLCAweGQwIH0sCisJCXsgUVQxMDEwX1JELCAweDIyLCAweGZmIH0sIC8qIDE2IGMgcmVhZCAqLworCQl7IFFUMTAxMF9XUiwgMHgxZSwgMHgwMCB9LAorCQl7IFFUMTAxMF9SRCwgMHgwNSwgMHhmZiB9LCAvKiAyMCBjIHJlYWQgKi8KKwkJeyBRVDEwMTBfUkQsIDB4MjIsIDB4ZmYgfSwgLyogMjEgYyByZWFkICovCisJCXsgUVQxMDEwX1dSLCAweDIzLCAweGQwIH0sCisJCXsgUVQxMDEwX1dSLCAweDFlLCAweDAwIH0sCisJCXsgUVQxMDEwX1dSLCAweDFlLCAweGUwIH0sCisJCXsgUVQxMDEwX1JELCAweDIzLCAweGZmIH0sIC8qIDI1IGMgcmVhZCAqLworCQl7IFFUMTAxMF9SRCwgMHgyMywgMHhmZiB9LCAvKiAyNiBjIHJlYWQgKi8KKwkJeyBRVDEwMTBfV1IsIDB4MWUsIDB4MDAgfSwKKwkJeyBRVDEwMTBfV1IsIDB4MjQsIDB4ZDAgfSwKKwkJeyBRVDEwMTBfV1IsIDB4MWUsIDB4MDAgfSwKKwkJeyBRVDEwMTBfV1IsIDB4MWUsIDB4ZjAgfSwKKwkJeyBRVDEwMTBfUkQsIDB4MjQsIDB4ZmYgfSwgLyogMzEgYyByZWFkICovCisJCXsgUVQxMDEwX1dSLCAweDFlLCAweDAwIH0sCisJCXsgUVQxMDEwX1dSLCAweDE0LCAweDdmIH0sCisJCXsgUVQxMDEwX1dSLCAweDE1LCAweDdmIH0sCisJCXsgUVQxMDEwX1dSLCAweDA1LCAweGZmIH0sIC8qIDM1IGMgd3JpdGUgKi8KKwkJeyBRVDEwMTBfV1IsIDB4MDYsIDB4MDAgfSwKKwkJeyBRVDEwMTBfV1IsIDB4MTUsIDB4MWYgfSwKKwkJeyBRVDEwMTBfV1IsIDB4MTYsIDB4ZmYgfSwKKwkJeyBRVDEwMTBfV1IsIDB4MTgsIDB4ZmYgfSwKKwkJeyBRVDEwMTBfV1IsIDB4MWYsIDB4ZmYgfSwgLyogNDAgYyB3cml0ZSAqLworCQl7IFFUMTAxMF9XUiwgMHgyMCwgMHhmZiB9LCAvKiA0MSBjIHdyaXRlICovCisJCXsgUVQxMDEwX1dSLCAweDIxLCAweDUzIH0sCisJCXsgUVQxMDEwX1dSLCAweDI1LCAweGZmIH0sIC8qIDQzIGMgd3JpdGUgKi8KKwkJeyBRVDEwMTBfV1IsIDB4MjYsIDB4MTUgfSwKKwkJeyBRVDEwMTBfV1IsIDB4MDAsIDB4ZmYgfSwgLyogNDUgYyB3cml0ZSAqLworCQl7IFFUMTAxMF9XUiwgMHgwMiwgMHgwMCB9LAorCQl7IFFUMTAxMF9XUiwgMHgwMSwgMHgwMCB9CisJfTsKKworI2RlZmluZSBGUkVRMSAzMjAwMDAwMCAvKiAzMiBNSHogKi8KKyNkZWZpbmUgRlJFUTIgIDQwMDAwMDAgLyogNCBNSHogUXVhcnR6IG9zY2lsbGF0b3IgaW4gdGhlIHN0aWNrPyAqLworCisJcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWZyZXEgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKKwlkaXYgPSAoZnJlcSArIFFUMTAxMF9PRkZTRVQpIC8gUVQxMDEwX1NURVA7CisJZnJlcSA9IChkaXYgKiBRVDEwMTBfU1RFUCkgLSBRVDEwMTBfT0ZGU0VUOworCW1vZDEgPSAoZnJlcSArIFFUMTAxMF9PRkZTRVQpICUgRlJFUTE7CisJbW9kMiA9IChmcmVxICsgUVQxMDEwX09GRlNFVCkgJSBGUkVRMjsKKwlwcml2LT5iYW5kd2lkdGggPQorCQkoZmUtPm9wcy5pbmZvLnR5cGUgPT0gRkVfT0ZETSkgPyBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGggOiAwOworCXByaXYtPmZyZXF1ZW5jeSA9IGZyZXE7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKKwkvKiByZWcgMDUgYmFzZSB2YWx1ZSAqLworCWlmICAgICAgKGZyZXEgPCAyOTAwMDAwMDApIHJlZzA1ID0gMHgxNDsgLyogMjkwIE1IeiAqLworCWVsc2UgaWYgKGZyZXEgPCA2MTAwMDAwMDApIHJlZzA1ID0gMHgzNDsgLyogNjEwIE1IeiAqLworCWVsc2UgaWYgKGZyZXEgPCA4MDIwMDAwMDApIHJlZzA1ID0gMHg1NDsgLyogODAyIE1IeiAqLworCWVsc2UgICAgICAgICAgICAgICAgICAgICAgIHJlZzA1ID0gMHg3NDsKKworCS8qIDB4NSAqLworCXJkWzJdLnZhbCA9IHJlZzA1OworCisJLyogMDcgLSBzZXQgZnJlcXVlbmN5OiAzMiBNSHogc2NhbGUgKi8KKwlyZFs0XS52YWwgPSAoZnJlcSArIFFUMTAxMF9PRkZTRVQpIC8gRlJFUTE7CisKKwkvKiAwOSAtIGNoYW5nZXMgZXZlcnkgOC8yNCBNSHogKi8KKwlpZiAobW9kMSA8IDgwMDAwMDApIHJkWzZdLnZhbCA9IDB4MWQ7CisJZWxzZSAgICAgICAgICAgICAgICByZFs2XS52YWwgPSAweDFjOworCisJLyogMGEgLSBzZXQgZnJlcXVlbmN5OiA0IE1IeiBzY2FsZSAobWF4IDI4IE1IeikgKi8KKwlpZiAgICAgIChtb2QxIDwgMSpGUkVRMikgcmRbN10udmFsID0gMHgwOTsgLyogICswIE1IeiAqLworCWVsc2UgaWYgKG1vZDEgPCAyKkZSRVEyKSByZFs3XS52YWwgPSAweDA4OyAvKiAgKzQgTUh6ICovCisJZWxzZSBpZiAobW9kMSA8IDMqRlJFUTIpIHJkWzddLnZhbCA9IDB4MGY7IC8qICArOCBNSHogKi8KKwllbHNlIGlmIChtb2QxIDwgNCpGUkVRMikgcmRbN10udmFsID0gMHgwZTsgLyogKzEyIE1IeiAqLworCWVsc2UgaWYgKG1vZDEgPCA1KkZSRVEyKSByZFs3XS52YWwgPSAweDBkOyAvKiArMTYgTUh6ICovCisJZWxzZSBpZiAobW9kMSA8IDYqRlJFUTIpIHJkWzddLnZhbCA9IDB4MGM7IC8qICsyMCBNSHogKi8KKwllbHNlIGlmIChtb2QxIDwgNypGUkVRMikgcmRbN10udmFsID0gMHgwYjsgLyogKzI0IE1IeiAqLworCWVsc2UgICAgICAgICAgICAgICAgICAgICByZFs3XS52YWwgPSAweDBhOyAvKiArMjggTUh6ICovCisKKwkvKiAwYiAtIGNoYW5nZXMgZXZlcnkgMi8yIE1IeiAqLworCWlmIChtb2QyIDwgMjAwMDAwMCkgcmRbOF0udmFsID0gMHg0NTsKKwllbHNlICAgICAgICAgICAgICAgIHJkWzhdLnZhbCA9IDB4NDQ7CisKKwkvKiAxYSAtIHNldCBmcmVxdWVuY3k6IDEyNSBrSHogc2NhbGUgKG1heCAzODc1IGtIeikqLworCXRtcHZhbCA9IDB4Nzg7IC8qIGJ5dGUsIG92ZXJmbG93cyBpbnRlbnRpb25hbGx5ICovCisJcmRbMTBdLnZhbCA9IHRtcHZhbC0oKG1vZDIvUVQxMDEwX1NURVApKjB4MDgpOworCisJLyogMTEgKi8KKwlyZFsxM10udmFsID0gMHhmZDsgLyogVE9ETzogY29ycmVjdCB2YWx1ZSBjYWxjdWxhdGlvbiAqLworCisJLyogMTIgKi8KKwlyZFsxNF0udmFsID0gMHg5MTsgLyogVE9ETzogY29ycmVjdCB2YWx1ZSBjYWxjdWxhdGlvbiAqLworCisJLyogMjIgKi8KKwlpZiAgICAgIChmcmVxIDwgNDUwMDAwMDAwKSByZFsxNV0udmFsID0gMHhkMDsgLyogNDUwIE1IeiAqLworCWVsc2UgaWYgKGZyZXEgPCA0ODIwMDAwMDApIHJkWzE1XS52YWwgPSAweGQxOyAvKiA0ODIgTUh6ICovCisJZWxzZSBpZiAoZnJlcSA8IDUxNDAwMDAwMCkgcmRbMTVdLnZhbCA9IDB4ZDQ7IC8qIDUxNCBNSHogKi8KKwllbHNlIGlmIChmcmVxIDwgNTQ2MDAwMDAwKSByZFsxNV0udmFsID0gMHhkNzsgLyogNTQ2IE1IeiAqLworCWVsc2UgaWYgKGZyZXEgPCA2MTAwMDAwMDApIHJkWzE1XS52YWwgPSAweGRhOyAvKiA2MTAgTUh6ICovCisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgcmRbMTVdLnZhbCA9IDB4ZDA7CisKKwkvKiAwNSAqLworCXJkWzM1XS52YWwgPSAocmVnMDUgJiAweGYwKTsKKworCS8qIDFmICovCisJaWYgICAgICAobW9kMSA8ICA4MDAwMDAwKSB0bXB2YWwgPSAweDAwOworCWVsc2UgaWYgKG1vZDEgPCAxMjAwMDAwMCkgdG1wdmFsID0gMHgwMTsKKwllbHNlIGlmIChtb2QxIDwgMTYwMDAwMDApIHRtcHZhbCA9IDB4MDI7CisJZWxzZSBpZiAobW9kMSA8IDI0MDAwMDAwKSB0bXB2YWwgPSAweDAzOworCWVsc2UgaWYgKG1vZDEgPCAyODAwMDAwMCkgdG1wdmFsID0gMHgwNDsKKwllbHNlICAgICAgICAgICAgICAgICAgICAgIHRtcHZhbCA9IDB4MDU7CisJcmRbNDBdLnZhbCA9IChwcml2LT5yZWcxZl9pbml0X3ZhbCArIDB4MGUgKyB0bXB2YWwpOworCisJLyogMjAgKi8KKwlpZiAgICAgIChtb2QxIDwgIDgwMDAwMDApIHRtcHZhbCA9IDB4MDA7CisJZWxzZSBpZiAobW9kMSA8IDEyMDAwMDAwKSB0bXB2YWwgPSAweDAxOworCWVsc2UgaWYgKG1vZDEgPCAyMDAwMDAwMCkgdG1wdmFsID0gMHgwMjsKKwllbHNlIGlmIChtb2QxIDwgMjQwMDAwMDApIHRtcHZhbCA9IDB4MDM7CisJZWxzZSBpZiAobW9kMSA8IDI4MDAwMDAwKSB0bXB2YWwgPSAweDA0OworCWVsc2UgICAgICAgICAgICAgICAgICAgICAgdG1wdmFsID0gMHgwNTsKKwlyZFs0MV0udmFsID0gKHByaXYtPnJlZzIwX2luaXRfdmFsICsgMHgwZCArIHRtcHZhbCk7CisKKwkvKiAyNSAqLworCXJkWzQzXS52YWwgPSBwcml2LT5yZWcyNV9pbml0X3ZhbDsKKworCS8qIDAwICovCisJcmRbNDVdLnZhbCA9IDB4OTI7IC8qIFRPRE86IGNvcnJlY3QgdmFsdWUgY2FsY3VsYXRpb24gKi8KKworCWRwcmludGsoImZyZXE6JXUgMDU6JTAyeCAwNzolMDJ4IDA5OiUwMnggMGE6JTAyeCAwYjolMDJ4ICIgXAorCQkiMWE6JTAyeCAxMTolMDJ4IDEyOiUwMnggMjI6JTAyeCAwNTolMDJ4IDFmOiUwMnggIiBcCisJCSIyMDolMDJ4IDI1OiUwMnggMDA6JTAyeCIsIFwKKwkJZnJlcSwgcmRbMl0udmFsLCByZFs0XS52YWwsIHJkWzZdLnZhbCwgcmRbN10udmFsLCByZFs4XS52YWwsIFwKKwkJcmRbMTBdLnZhbCwgcmRbMTNdLnZhbCwgcmRbMTRdLnZhbCwgcmRbMTVdLnZhbCwgcmRbMzVdLnZhbCwgXAorCQlyZFs0MF0udmFsLCByZFs0MV0udmFsLCByZFs0M10udmFsLCByZFs0NV0udmFsKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJkKTsgaSsrKSB7CisJCWlmIChyZFtpXS5vcGVyID09IFFUMTAxMF9XUikgeworCQkJZXJyID0gcXQxMDEwX3dyaXRlcmVnKHByaXYsIHJkW2ldLnJlZywgcmRbaV0udmFsKTsKKwkJfSBlbHNlIHsgLyogcmVhZCBpcyByZXF1aXJlZCB0byBwcm9wZXIgbG9ja2luZyAqLworCQkJZXJyID0gcXQxMDEwX3JlYWRyZWcocHJpdiwgcmRbaV0ucmVnLCAmdG1wdmFsKTsKKwkJfQorCQlpZiAoZXJyKSByZXR1cm4gZXJyOworCX0KKworCWlmIChkZWJ1ZykKKwkJcXQxMDEwX2R1bXBfcmVncyhwcml2KTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdDEwMTBfaW5pdF9tZWFzMShzdHJ1Y3QgcXQxMDEwX3ByaXYgKnByaXYsCisJCQkgICAgIHU4IG9wZXIsIHU4IHJlZywgdTggcmVnX2luaXRfdmFsLCB1OCAqcmV0dmFsKQoreworCXU4IGksIHZhbDEsIHZhbDI7CisJaW50IGVycjsKKworCXF0MTAxMF9pMmNfb3Blcl90IGkyY19kYXRhW10gPSB7CisJCXsgUVQxMDEwX1dSLCByZWcsIHJlZ19pbml0X3ZhbCB9LAorCQl7IFFUMTAxMF9XUiwgMHgxZSwgMHgwMCB9LAorCQl7IFFUMTAxMF9XUiwgMHgxZSwgb3BlciB9LAorCQl7IFFUMTAxMF9SRCwgcmVnLCAweGZmIH0KKwl9OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaTJjX2RhdGEpOyBpKyspIHsKKwkJaWYgKGkyY19kYXRhW2ldLm9wZXIgPT0gUVQxMDEwX1dSKSB7CisJCQllcnIgPSBxdDEwMTBfd3JpdGVyZWcocHJpdiwgaTJjX2RhdGFbaV0ucmVnLAorCQkJCQkgICAgICBpMmNfZGF0YVtpXS52YWwpOworCQl9IGVsc2UgeworCQkJZXJyID0gcXQxMDEwX3JlYWRyZWcocHJpdiwgaTJjX2RhdGFbaV0ucmVnLCAmdmFsMik7CisJCX0KKwkJaWYgKGVycikgcmV0dXJuIGVycjsKKwl9CisKKwlkbyB7CisJCXZhbDEgPSB2YWwyOworCQllcnIgPSBxdDEwMTBfcmVhZHJlZyhwcml2LCByZWcsICZ2YWwyKTsKKwkJaWYgKGVycikgcmV0dXJuIGVycjsKKwkJZHByaW50aygiY29tcGFyZSByZWc6JTAyeCAlMDJ4ICUwMngiLCByZWcsIHZhbDEsIHZhbDIpOworCX0gd2hpbGUgKHZhbDEgIT0gdmFsMik7CisJKnJldHZhbCA9IHZhbDE7CisKKwlyZXR1cm4gcXQxMDEwX3dyaXRlcmVnKHByaXYsIDB4MWUsIDB4MDApOworfQorCitzdGF0aWMgdTggcXQxMDEwX2luaXRfbWVhczIoc3RydWN0IHF0MTAxMF9wcml2ICpwcml2LAorCQkJICAgIHU4IHJlZ19pbml0X3ZhbCwgdTggKnJldHZhbCkKK3sKKwl1OCBpLCB2YWw7CisJaW50IGVycjsKKwlxdDEwMTBfaTJjX29wZXJfdCBpMmNfZGF0YVtdID0geworCQl7IFFUMTAxMF9XUiwgMHgwNywgcmVnX2luaXRfdmFsIH0sCisJCXsgUVQxMDEwX1dSLCAweDIyLCAweGQwIH0sCisJCXsgUVQxMDEwX1dSLCAweDFlLCAweDAwIH0sCisJCXsgUVQxMDEwX1dSLCAweDFlLCAweGQwIH0sCisJCXsgUVQxMDEwX1JELCAweDIyLCAweGZmIH0sCisJCXsgUVQxMDEwX1dSLCAweDFlLCAweDAwIH0sCisJCXsgUVQxMDEwX1dSLCAweDIyLCAweGZmIH0KKwl9OworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGkyY19kYXRhKTsgaSsrKSB7CisJCWlmIChpMmNfZGF0YVtpXS5vcGVyID09IFFUMTAxMF9XUikgeworCQkJZXJyID0gcXQxMDEwX3dyaXRlcmVnKHByaXYsIGkyY19kYXRhW2ldLnJlZywKKwkJCQkJICAgICAgaTJjX2RhdGFbaV0udmFsKTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IHF0MTAxMF9yZWFkcmVnKHByaXYsIGkyY19kYXRhW2ldLnJlZywgJnZhbCk7CisJCX0KKwkJaWYgKGVycikgcmV0dXJuIGVycjsKKwl9CisJKnJldHZhbCA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdDEwMTBfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgcXQxMDEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgcGFyYW1zOworCWludCBlcnIgPSAwOworCXU4IGksIHRtcHZhbCwgKnZhbHB0ciA9IE5VTEw7CisKKwlxdDEwMTBfaTJjX29wZXJfdCBpMmNfZGF0YVtdID0geworCQl7IFFUMTAxMF9XUiwgMHgwMSwgMHg4MCB9LAorCQl7IFFUMTAxMF9XUiwgMHgwZCwgMHg4NCB9LAorCQl7IFFUMTAxMF9XUiwgMHgwZSwgMHhiNyB9LAorCQl7IFFUMTAxMF9XUiwgMHgyYSwgMHgyMyB9LAorCQl7IFFUMTAxMF9XUiwgMHgyYywgMHhkYyB9LAorCQl7IFFUMTAxMF9NMSwgMHgyNSwgMHg0MCB9LCAvKiBnZXQgcmVnIDI1IGluaXQgdmFsdWUgKi8KKwkJeyBRVDEwMTBfTTEsIDB4ODEsIDB4ZmYgfSwgLyogZ2V0IHJlZyAyNSBpbml0IHZhbHVlICovCisJCXsgUVQxMDEwX1dSLCAweDJiLCAweDcwIH0sCisJCXsgUVQxMDEwX1dSLCAweDJhLCAweDIzIH0sCisJCXsgUVQxMDEwX00xLCAweDI2LCAweDA4IH0sCisJCXsgUVQxMDEwX00xLCAweDgyLCAweGZmIH0sCisJCXsgUVQxMDEwX1dSLCAweDA1LCAweDE0IH0sCisJCXsgUVQxMDEwX1dSLCAweDA2LCAweDQ0IH0sCisJCXsgUVQxMDEwX1dSLCAweDA3LCAweDI4IH0sCisJCXsgUVQxMDEwX1dSLCAweDA4LCAweDBiIH0sCisJCXsgUVQxMDEwX1dSLCAweDExLCAweGZkIH0sCisJCXsgUVQxMDEwX00xLCAweDIyLCAweDBkIH0sCisJCXsgUVQxMDEwX00xLCAweGQwLCAweGZmIH0sCisJCXsgUVQxMDEwX1dSLCAweDA2LCAweDQwIH0sCisJCXsgUVQxMDEwX1dSLCAweDE2LCAweGYwIH0sCisJCXsgUVQxMDEwX1dSLCAweDAyLCAweDM4IH0sCisJCXsgUVQxMDEwX1dSLCAweDAzLCAweDE4IH0sCisJCXsgUVQxMDEwX1dSLCAweDIwLCAweGUwIH0sCisJCXsgUVQxMDEwX00xLCAweDFmLCAweDIwIH0sIC8qIGdldCByZWcgMWYgaW5pdCB2YWx1ZSAqLworCQl7IFFUMTAxMF9NMSwgMHg4NCwgMHhmZiB9LCAvKiBnZXQgcmVnIDFmIGluaXQgdmFsdWUgKi8KKwkJeyBRVDEwMTBfUkQsIDB4MjAsIDB4MjAgfSwgLyogZ2V0IHJlZyAyMCBpbml0IHZhbHVlICovCisJCXsgUVQxMDEwX1dSLCAweDAzLCAweDE5IH0sCisJCXsgUVQxMDEwX1dSLCAweDAyLCAweDNmIH0sCisJCXsgUVQxMDEwX1dSLCAweDIxLCAweDUzIH0sCisJCXsgUVQxMDEwX1JELCAweDIxLCAweGZmIH0sCisJCXsgUVQxMDEwX1dSLCAweDExLCAweGZkIH0sCisJCXsgUVQxMDEwX1dSLCAweDA1LCAweDM0IH0sCisJCXsgUVQxMDEwX1dSLCAweDA2LCAweDQ0IH0sCisJCXsgUVQxMDEwX1dSLCAweDA4LCAweDA4IH0KKwl9OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsgLyogb3BlbiBpMmNfZ2F0ZSAqLworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaTJjX2RhdGEpOyBpKyspIHsKKwkJc3dpdGNoIChpMmNfZGF0YVtpXS5vcGVyKSB7CisJCWNhc2UgUVQxMDEwX1dSOgorCQkJZXJyID0gcXQxMDEwX3dyaXRlcmVnKHByaXYsIGkyY19kYXRhW2ldLnJlZywKKwkJCQkJICAgICAgaTJjX2RhdGFbaV0udmFsKTsKKwkJCWJyZWFrOworCQljYXNlIFFUMTAxMF9SRDoKKwkJCWlmIChpMmNfZGF0YVtpXS52YWwgPT0gMHgyMCkKKwkJCQl2YWxwdHIgPSAmcHJpdi0+cmVnMjBfaW5pdF92YWw7CisJCQllbHNlCisJCQkJdmFscHRyID0gJnRtcHZhbDsKKwkJCWVyciA9IHF0MTAxMF9yZWFkcmVnKHByaXYsIGkyY19kYXRhW2ldLnJlZywgdmFscHRyKTsKKwkJCWJyZWFrOworCQljYXNlIFFUMTAxMF9NMToKKwkJCWlmIChpMmNfZGF0YVtpXS52YWwgPT0gMHgyNSkKKwkJCQl2YWxwdHIgPSAmcHJpdi0+cmVnMjVfaW5pdF92YWw7CisJCQllbHNlIGlmIChpMmNfZGF0YVtpXS52YWwgPT0gMHgxZikKKwkJCQl2YWxwdHIgPSAmcHJpdi0+cmVnMWZfaW5pdF92YWw7CisJCQllbHNlCisJCQkJdmFscHRyID0gJnRtcHZhbDsKKwkJCWVyciA9IHF0MTAxMF9pbml0X21lYXMxKHByaXYsIGkyY19kYXRhW2krMV0ucmVnLAorCQkJCQkJaTJjX2RhdGFbaV0ucmVnLAorCQkJCQkJaTJjX2RhdGFbaV0udmFsLCB2YWxwdHIpOworCQkJaSsrOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGVycikgcmV0dXJuIGVycjsKKwl9CisKKwlmb3IgKGkgPSAweDMxOyBpIDwgMHgzYTsgaSsrKSAvKiAweDMxIC0gMHgzOSAqLworCQlpZiAoKGVyciA9IHF0MTAxMF9pbml0X21lYXMyKHByaXYsIGksICZ0bXB2YWwpKSkKKwkJCXJldHVybiBlcnI7CisKKwlwYXJhbXMuZnJlcXVlbmN5ID0gNTQ1MDAwMDAwOyAvKiBTaWdtYXRlayBEVkItMTEwIDU0NTAwMDAwMCAqLworCQkJCSAgICAgIC8qIE1TSSBNZWdhc2t5IDU4MCBHTDg2MSA1MzMwMDAwMDAgKi8KKwlyZXR1cm4gcXQxMDEwX3NldF9wYXJhbXMoZmUsICZwYXJhbXMpOworfQorCitzdGF0aWMgaW50IHF0MTAxMF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWtmcmVlKGZlLT50dW5lcl9wcml2KTsKKwlmZS0+dHVuZXJfcHJpdiA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXQxMDEwX2dldF9mcmVxdWVuY3koc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqZnJlcXVlbmN5KQoreworCXN0cnVjdCBxdDEwMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCSpmcmVxdWVuY3kgPSBwcml2LT5mcmVxdWVuY3k7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXQxMDEwX2dldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmFuZHdpZHRoKQoreworCXN0cnVjdCBxdDEwMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCSpiYW5kd2lkdGggPSBwcml2LT5iYW5kd2lkdGg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHZiX3R1bmVyX29wcyBxdDEwMTBfdHVuZXJfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSAgICAgICAgICAgPSAiUXVhbnRlayBRVDEwMTAiLAorCQkuZnJlcXVlbmN5X21pbiAgPSBRVDEwMTBfTUlOX0ZSRVEsCisJCS5mcmVxdWVuY3lfbWF4ICA9IFFUMTAxMF9NQVhfRlJFUSwKKwkJLmZyZXF1ZW5jeV9zdGVwID0gUVQxMDEwX1NURVAsCisJfSwKKworCS5yZWxlYXNlICAgICAgID0gcXQxMDEwX3JlbGVhc2UsCisJLmluaXQgICAgICAgICAgPSBxdDEwMTBfaW5pdCwKKwkvKiBUT0RPOiBpbXBsZW1lbnQgc2xlZXAgKi8KKworCS5zZXRfcGFyYW1zICAgID0gcXQxMDEwX3NldF9wYXJhbXMsCisJLmdldF9mcmVxdWVuY3kgPSBxdDEwMTBfZ2V0X2ZyZXF1ZW5jeSwKKwkuZ2V0X2JhbmR3aWR0aCA9IHF0MTAxMF9nZXRfYmFuZHdpZHRoCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICogcXQxMDEwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCQkJICAgIHN0cnVjdCBxdDEwMTBfY29uZmlnICpjZmcpCit7CisJc3RydWN0IHF0MTAxMF9wcml2ICpwcml2ID0gTlVMTDsKKwl1OCBpZDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcXQxMDEwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYtPmNmZyA9IGNmZzsKKwlwcml2LT5pMmMgPSBpMmM7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKKworCS8qIFRyeSB0byBkZXRlY3QgdHVuZXIgY2hpcC4gUHJvYmFibHkgdGhpcyBpcyBub3QgY29ycmVjdCByZWdpc3Rlci4gKi8KKwlpZiAocXQxMDEwX3JlYWRyZWcocHJpdiwgMHgyOSwgJmlkKSAhPSAwIHx8IChpZCAhPSAweDM5KSkgeworCQlrZnJlZShwcml2KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCXByaW50ayhLRVJOX0lORk8gIlF1YW50ZWsgUVQxMDEwIHN1Y2Nlc3NmdWxseSBpZGVudGlmaWVkLlxuIik7CisJbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJnF0MTAxMF90dW5lcl9vcHMsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOworCisJZmUtPnR1bmVyX3ByaXYgPSBwcml2OworCXJldHVybiBmZTsKK30KK0VYUE9SVF9TWU1CT0wocXQxMDEwX2F0dGFjaCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUXVhbnRlayBRVDEwMTAgc2lsaWNvbiB0dW5lciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOworTU9EVUxFX0FVVEhPUigiQWFwbyBUYWhrb2xhIDxhZXRAcmFzdGVyYnVybi5vcmc+Iik7CitNT0RVTEVfVkVSU0lPTigiMC4xIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvcXQxMDEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvcXQxMDEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiNGFhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9xdDEwMTAuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIERyaXZlciBmb3IgUXVhbnRlayBRVDEwMTAgc2lsaWNvbiB0dW5lcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKiAgICAgICAgICAgICAgICAgICAgIEFhcG8gVGFoa29sYSA8YWV0QHJhc3RlcmJ1cm4ub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBRVDEwMTBfSAorI2RlZmluZSBRVDEwMTBfSAorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKK3N0cnVjdCBxdDEwMTBfY29uZmlnIHsKKwl1OCBpMmNfYWRkcmVzczsKK307CisKKy8qKgorICogQXR0YWNoIGEgcXQxMDEwIHR1bmVyIHRvIHRoZSBzdXBwbGllZCBmcm9udGVuZCBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtIGZlICAgZnJvbnRlbmQgdG8gYXR0YWNoIHRvCisgKiBAcGFyYW0gaTJjICBpMmMgYWRhcHRlciB0byB1c2UKKyAqIEBwYXJhbSBjZmcgIHR1bmVyIGh3IGJhc2VkIGNvbmZpZ3VyYXRpb24KKyAqIEByZXR1cm4gZmUgIHBvaW50ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfVFVORVJfUVQxMDEwKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX1FUMTAxMF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpxdDEwMTBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkJCQkgIHN0cnVjdCBxdDEwMTBfY29uZmlnICpjZmcpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqcXQxMDEwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkJCSBzdHJ1Y3QgcXQxMDEwX2NvbmZpZyAqY2ZnKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvLyBDT05GSUdfRFZCX1RVTkVSX1FUMTAxMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9xdDEwMTBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3F0MTAxMF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwY2Y0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9xdDEwMTBfcHJpdi5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogIERyaXZlciBmb3IgUXVhbnRlayBRVDEwMTAgc2lsaWNvbiB0dW5lcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKiAgICAgICAgICAgICAgICAgICAgIEFhcG8gVGFoa29sYSA8YWV0QHJhc3RlcmJ1cm4ub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBRVDEwMTBfUFJJVl9ICisjZGVmaW5lIFFUMTAxMF9QUklWX0gKKworLyoKK3JlZyBkZWYgbWVhbmluZworPT09ID09PSA9PT09PT09CiswMCAgMDAgID8KKzAxICBhMCAgPyBvcGVyYXRpb24gc3RhcnQvc3RvcDsgc3RhcnQ9ODAsIHN0b3A9MDAKKzAyICAwMCAgPworMDMgIDE5ICA/CiswNCAgMDAgID8KKzA1ICAwMCAgPyBtYXliZSBiYW5kIHNlbGVjdGlvbgorMDYgIDAwICA/CiswNyAgMmIgIHNldCBmcmVxdWVuY3k6IDMyIE1IeiBzY2FsZSwgbiozMiBNSHoKKzA4ICAwYiAgPworMDkgIDEwICA/IGNoYW5nZXMgZXZlcnkgOC8yNCBNSHo7IHZhbHVlcyAxZC8xYworMGEgIDA4ICBzZXQgZnJlcXVlbmN5OiA0IE1IeiBzY2FsZSwgbio0IE1IegorMGIgIDQxICA/IGNoYW5nZXMgZXZlcnkgMi8yIE1IejsgdmFsdWVzIDQ1LzQ1CiswYyAgZTEgID8KKzBkICA5NCAgPworMGUgIGI2ICA/CiswZiAgMmMgID8KKzEwICAxMCAgPworMTEgIGYxICA/IG1heWJlIGRldmljZSBzcGVjaWZpZWQgYWRqdXN0bWVudAorMTIgIDExICA/IG1heWJlIGRldmljZSBzcGVjaWZpZWQgYWRqdXN0bWVudAorMTMgIDNmICA/CisxNCAgMWYgID8KKzE1ICAzZiAgPworMTYgIGZmICA/CisxNyAgZmYgID8KKzE4ICBmNyAgPworMTkgIDgwICA/CisxYSAgZDAgIHNldCBmcmVxdWVuY3k6IDEyNSBrSHogc2NhbGUsIG4qMTI1IGtIegorMWIgIDAwICA/CisxYyAgODkgID8KKzFkICAwMCAgPworMWUgIDAwICA/IGxvb2tzIGxpa2Ugb3BlcmF0aW9uIHJlZ2lzdGVyOyB3cml0ZSBjbWQgaGVyZSwgcmVhZCByZXN1bHQgZnJvbSAxZi0yNgorMWYgIDIwICA/IGNoaXAgaW5pdGlhbGl6YXRpb24KKzIwICBlMCAgPyBjaGlwIGluaXRpYWxpemF0aW9uCisyMSAgMjAgID8KKzIyICBkMCAgPworMjMgIGQwICA/CisyNCAgZDAgID8KKzI1ICA0MCAgPyBjaGlwIGluaXRpYWxpemF0aW9uCisyNiAgMDggID8KKzI3ICAyOSAgPworMjggIDU1ICA/CisyOSAgMzkgID8KKzJhICAxMyAgPworMmIgIDAxICA/CisyYyAgZWEgID8KKzJkICAwMCAgPworMmUgIDAwICA/IG5vdCB1c2VkPworMmYgIDAwICA/IG5vdCB1c2VkPworKi8KKworI2RlZmluZSBRVDEwMTBfU1RFUCAgICAgICAgIDEyNTAwMCAvKiAgMTI1IGtIeiB1c2VkIGJ5IFdpbmRvd3MgZHJpdmVycywKKwkJCQkgICAgICBodyBjb3VsZCBiZSBtb3JlIHByZWNpc2UgYnV0IHdlIGRvbid0CisJCQkJICAgICAga25vdyBob3cgdG8gdXNlICovCisjZGVmaW5lIFFUMTAxMF9NSU5fRlJFUSAgIDQ4MDAwMDAwIC8qICAgNDggTUh6ICovCisjZGVmaW5lIFFUMTAxMF9NQVhfRlJFUSAgODYwMDAwMDAwIC8qICA4NjAgTUh6ICovCisjZGVmaW5lIFFUMTAxMF9PRkZTRVQgICAxMjQ2MDAwMDAwIC8qIDEyNDYgTUh6ICovCisKKyNkZWZpbmUgUVQxMDEwX1dSIDAKKyNkZWZpbmUgUVQxMDEwX1JEIDEKKyNkZWZpbmUgUVQxMDEwX00xIDMKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4IG9wZXIsIHJlZywgdmFsOworfSBxdDEwMTBfaTJjX29wZXJfdDsKKworc3RydWN0IHF0MTAxMF9wcml2IHsKKwlzdHJ1Y3QgcXQxMDEwX2NvbmZpZyAqY2ZnOworCXN0cnVjdCBpMmNfYWRhcHRlciAgICppMmM7CisKKwl1OCByZWcxZl9pbml0X3ZhbDsKKwl1OCByZWcyMF9pbml0X3ZhbDsKKwl1OCByZWcyNV9pbml0X3ZhbDsKKworCXUzMiBmcmVxdWVuY3k7CisJdTMyIGJhbmR3aWR0aDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTcuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk3LmMKaW5kZXggMWNhNjQyNC4uOWEzNDM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTcuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5Ny5jCkBAIC0zNSw2ICszNSw3IEBACiAJY29uc3Qgc3RydWN0IHN0djAyOTdfY29uZmlnICpjb25maWc7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIAorCXVuc2lnbmVkIGxvbmcgbGFzdF9iZXI7CiAJdW5zaWduZWQgbG9uZyBiYXNlX2ZyZXE7CiB9OwogCkBAIC0zMTAsNiArMzExLDggQEAKIAkJc3R2MDI5N193cml0ZXJlZyhzdGF0ZSwgc3RhdGUtPmNvbmZpZy0+aW5pdHRhYltpXSwgc3RhdGUtPmNvbmZpZy0+aW5pdHRhYltpKzFdKTsKIAltc2xlZXAoMjAwKTsKIAorCXN0YXRlLT5sYXN0X2JlciA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzQwLDExICszNDMsMTMgQEAKIAlzdHJ1Y3Qgc3R2MDI5N19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCBCRVJbM107CiAKLQlzdHYwMjk3X3dyaXRlcmVnKHN0YXRlLCAweEEwLCAweDgwKTsJLy8gU3RhcnQgQ291bnRpbmcgYml0IGVycm9ycyBmb3IgNDA5NiBCeXRlcwotCW1kZWxheSgyNSk7CQkvLyBIb3BlZnVsbHkgZ290IDQwOTYgQnl0ZXMKIAlzdHYwMjk3X3JlYWRyZWdzKHN0YXRlLCAweEEwLCBCRVIsIDMpOwotCW1kZWxheSgyNSk7Ci0JKmJlciA9IChCRVJbMl0gPDwgOCB8IEJFUlsxXSkgLyAoOCAqIDQwOTYpOworCWlmICghKEJFUlswXSAmIDB4ODApKSB7CisJCXN0YXRlLT5sYXN0X2JlciA9IEJFUlsyXSA8PCA4IHwgQkVSWzFdOworCQlzdHYwMjk3X3dyaXRlcmVnX21hc2soc3RhdGUsIDB4QTAsIDB4ODAsIDB4ODApOworCX0KKworCSpiZXIgPSBzdGF0ZS0+bGFzdF9iZXI7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM3Niw5ICszODEsMTQgQEAKIHsKIAlzdHJ1Y3Qgc3R2MDI5N19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAorCXN0djAyOTdfd3JpdGVyZWdfbWFzayhzdGF0ZSwgMHhERiwgMHgwMywgMHgwMyk7IC8qIGZyZWV6ZSB0aGUgY291bnRlcnMgKi8KKwogCSp1Y2Jsb2NrcyA9IChzdHYwMjk3X3JlYWRyZWcoc3RhdGUsIDB4RDUpIDw8IDgpCiAJCXwgc3R2MDI5N19yZWFkcmVnKHN0YXRlLCAweEQ0KTsKIAorCXN0djAyOTdfd3JpdGVyZWdfbWFzayhzdGF0ZSwgMHhERiwgMHgwMywgMHgwMik7IC8qIGNsZWFyIHRoZSBjb3VudGVycyAqLworCXN0djAyOTdfd3JpdGVyZWdfbWFzayhzdGF0ZSwgMHhERiwgMHgwMywgMHgwMSk7IC8qIHJlLWVuYWJsZSB0aGUgY291bnRlcnMgKi8KKwogCXJldHVybiAwOwogfQogCkBAIC02NDgsNiArNjU4LDcgQEAKIAkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KIAlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOwogCXN0YXRlLT5pMmMgPSBpMmM7CisJc3RhdGUtPmxhc3RfYmVyID0gMDsKIAlzdGF0ZS0+YmFzZV9mcmVxID0gMDsKIAogCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyB0aGVyZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmMKaW5kZXggOTM0ODM3Ni4uMTg3NjhkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5jCkBAIC05Miw3ICs5Miw3IEBACiAJcmV0dXJuIChyZXQgIT0gMSkgPyAtRVJFTU9URUlPIDogMDsKIH0KIAotaW50IHN0djAyOTlfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHU4ICpidWYsIGludCBsZW4pCitzdGF0aWMgaW50IHN0djAyOTlfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHU4ICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IHN0djAyOTlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmMKaW5kZXggZGNhODkxNy4uNWI5YzViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdGRhMTAwMjFfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHU4ICpidWYsIGludCBsZW4pCitzdGF0aWMgaW50IHRkYTEwMDIxX3dyaXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1OCAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCB0ZGExMDAyMV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYwppbmRleCAwMGU0YmNkLi5mNGE5Y2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYwpAQCAtNTc5LDcgKzU3OSw3IEBACiAJcmV0dXJuIC0xOwogfQogCi1pbnQgdGRhMTAwNHhfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHU4ICpidWYsIGludCBsZW4pCitzdGF0aWMgaW50IHRkYTEwMDR4X3dyaXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1OCAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCB0ZGExMDA0eF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMKaW5kZXggMGU5YjU5YS4uMjQ1ZjliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jCkBAIC0zOCw2ICszOCwxMiBAQAogCXN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjb25maWc7CiB9OwogCitzdGF0aWMgaW50IGRlYnVnOworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSBwcmludGsoS0VSTl9ERUJVRyAiemwxMDM1MzogIiBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKIHN0YXRpYyBpbnQgZGVidWdfcmVncyA9IDA7CiAKIHN0YXRpYyBpbnQgemwxMDM1M19zaW5nbGVfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IHJlZywgdTggdmFsKQpAQCAtNTQsNyArNjAsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgemwxMDM1M193cml0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggKmlidWYsIGludCBpbGVuKQorc3RhdGljIGludCB6bDEwMzUzX3dyaXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCAqaWJ1ZiwgaW50IGlsZW4pCiB7CiAJaW50IGVyciwgaTsKIAlmb3IgKGkgPSAwOyBpIDwgaWxlbiAtIDE7IGkrKykKQEAgLTExMyw2ICsxMTksMzYgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIGJ1Zik7CiB9CiAKK3N0YXRpYyB2b2lkIHpsMTAzNTNfY2FsY19ub21pbmFsX3JhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgICAgZW51bSBmZV9iYW5kd2lkdGggYmFuZHdpZHRoLAorCQkJCSAgICAgIHUxNiAqbm9taW5hbF9yYXRlKQoreworCXUzMiBhZGNfY2xvY2sgPSAyMjUyODsgLyogMjAuNDgwIE1IeiBvbiB0aGUgYm9hcmQoIT8pICovCisJdTggYnc7CisJc3RydWN0IHpsMTAzNTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpZiAoc3RhdGUtPmNvbmZpZy5hZGNfY2xvY2spCisJCWFkY19jbG9jayA9IHN0YXRlLT5jb25maWcuYWRjX2Nsb2NrOworCisJc3dpdGNoIChiYW5kd2lkdGgpIHsKKwljYXNlIEJBTkRXSURUSF82X01IWjoKKwkJYncgPSA2OworCQlicmVhazsKKwljYXNlIEJBTkRXSURUSF83X01IWjoKKwkJYncgPSA3OworCQlicmVhazsKKwljYXNlIEJBTkRXSURUSF84X01IWjoKKwlkZWZhdWx0OgorCQlidyA9IDg7CisJCWJyZWFrOworCX0KKworCSpub21pbmFsX3JhdGUgPSAoNjQgKiBidyAqICgxPDwxNikgLyAoNyAqIDgpICogNDAwMCAvIGFkY19jbG9jayArIDIpIC8gNDsKKworCWRwcmludGsoIiVzOiBidyAlZCwgYWRjX2Nsb2NrICVkID0+IDB4JXhcbiIsCisJCV9fRlVOQ1RJT05fXywgYncsIGFkY19jbG9jaywgKm5vbWluYWxfcmF0ZSk7Cit9CisKIHN0YXRpYyBpbnQgemwxMDM1M19zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdGF0aWMgdTggemwxMDM1M19zb2Z0ZG93bltdID0geyAweDUwLCAweDBDLCAweDQ0IH07CkBAIC0xMjUsNyArMTYxLDcgQEAKIAkJCQkgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pCiB7CiAJc3RydWN0IHpsMTAzNTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0KKwl1MTYgbm9taW5hbF9yYXRlOwogCXU4IHBsbGJ1Zls2XSA9IHsgMHg2NyB9OwogCiAJLyogVGhlc2Ugc2V0dGluZ3Mgc2V0ICJhdXRvLWV2ZXJ5dGhpbmciIGFuZCBzdGFydCB0aGUgRlNNLiAqLwpAQCAtMTM4LDE4ICsxNzQsMjMgQEAKIAl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg1NiwgMHgyOCk7CiAJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4ODksIDB4MjApOwogCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweDVFLCAweDAwKTsKLQl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg2NSwgMHg1QSk7Ci0JemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4NjYsIDB4RTkpOworCisJemwxMDM1M19jYWxjX25vbWluYWxfcmF0ZShmZSwgcGFyYW0tPnUub2ZkbS5iYW5kd2lkdGgsICZub21pbmFsX3JhdGUpOworCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCBUUkxfTk9NSU5BTF9SQVRFXzEsIG1zYihub21pbmFsX3JhdGUpKTsKKwl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgVFJMX05PTUlOQUxfUkFURV8wLCBsc2Iobm9taW5hbF9yYXRlKSk7CisKIAl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg2QywgMHhDRCk7CiAJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4NkQsIDB4N0UpOwotCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweDYyLCAweDBBKTsKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCiAJLy8gaWYgdGhlcmUgaXMgbm8gYXR0YWNoZWQgc2Vjb25kYXJ5IHR1bmVyLCB3ZSBjYWxsIHNldF9wYXJhbXMgdG8gcHJvZ3JhbQogCS8vIGEgcG90ZW50aWFsIHR1bmVyIGF0dGFjaGVkIHNvbWV3aGVyZSBlbHNlCiAJaWYgKHN0YXRlLT5jb25maWcubm9fdHVuZXIpIHsKIAkJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpIHsKIAkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHBhcmFtKTsKLQkJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIGZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAJCX0KIAl9CiAKQEAgLTIxMyw2ICsyNTQsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB6bDEwMzUzX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3QgemwxMDM1M19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCSpiZXIgPSB6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIFJTX0VSUl9DTlRfMikgPDwgMTYgfAorCSAgICAgICB6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIFJTX0VSUl9DTlRfMSkgPDwgOCB8CisJICAgICAgIHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgUlNfRVJSX0NOVF8wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsMTAzNTNfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCit7CisJc3RydWN0IHpsMTAzNTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwl1MTYgc2lnbmFsID0gemwxMDM1M19yZWFkX3JlZ2lzdGVyKHN0YXRlLCBBR0NfR0FJTl8xKSA8PCAxMCB8CisJCSAgICAgemwxMDM1M19yZWFkX3JlZ2lzdGVyKHN0YXRlLCBBR0NfR0FJTl8wKSA8PCAyIHwgMzsKKworCSpzdHJlbmd0aCA9IH5zaWduYWw7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB6bDEwMzUzX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKIHsKIAlzdHJ1Y3QgemwxMDM1M19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKQEAgLTIyNyw2ICsyOTEsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB6bDEwMzUzX3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCit7CisJc3RydWN0IHpsMTAzNTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwkqdWNibG9ja3MgPSB6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIFJTX1VCQ18xKSA8PCA4IHwKKwkJICAgIHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgUlNfVUJDXzApOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgemwxMDM1M19nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncwogCQkJCQkgKmZlX3R1bmVfc2V0dGluZ3MpCkBAIC0yNjEsNiArMzM1LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgemwxMDM1M19pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQoreworCXU4IHZhbCA9IDB4MGE7CisKKwlpZiAoZW5hYmxlKQorCQl2YWwgfD0gMHgxMDsKKworCXJldHVybiB6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg2MiwgdmFsKTsKK30KKwogc3RhdGljIHZvaWQgemwxMDM1M19yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCB6bDEwMzUzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwpAQCAtMzE5LDE1ICs0MDMsMjIgQEAKIAogCS5pbml0ID0gemwxMDM1M19pbml0LAogCS5zbGVlcCA9IHpsMTAzNTNfc2xlZXAsCisJLmkyY19nYXRlX2N0cmwgPSB6bDEwMzUzX2kyY19nYXRlX2N0cmwsCiAJLndyaXRlID0gemwxMDM1M193cml0ZSwKIAogCS5zZXRfZnJvbnRlbmQgPSB6bDEwMzUzX3NldF9wYXJhbWV0ZXJzLAogCS5nZXRfdHVuZV9zZXR0aW5ncyA9IHpsMTAzNTNfZ2V0X3R1bmVfc2V0dGluZ3MsCiAKIAkucmVhZF9zdGF0dXMgPSB6bDEwMzUzX3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciA9IHpsMTAzNTNfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gemwxMDM1M19yZWFkX3NpZ25hbF9zdHJlbmd0aCwKIAkucmVhZF9zbnIgPSB6bDEwMzUzX3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzID0gemwxMDM1M19yZWFkX3VjYmxvY2tzLAogfTsKIAorbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworCiBtb2R1bGVfcGFyYW0oZGVidWdfcmVncywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWdfcmVncywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIHJlZ2lzdGVyIGR1bXBzIChkZWZhdWx0Om9mZikuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oCmluZGV4IDBiYzAxMDkuLmNiMjc0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaApAQCAtMjksNiArMjksOSBAQAogCS8qIGRlbW9kdWxhdG9yJ3MgSTJDIGFkZHJlc3MgKi8KIAl1OCBkZW1vZF9hZGRyZXNzOwogCisJLyogZnJlcXVlbmNpZXMgaW4ga0h6ICovCisJaW50IGFkY19jbG9jazsgIC8vIGRlZmF1bHQ6IDIyNTI4CisKIAkvKiBzZXQgaWYgbm8gcGxsIGlzIGNvbm5lY3RlZCB0byB0aGUgc2Vjb25kYXJ5IGkyYyBidXMgKi8KIAlpbnQgbm9fdHVuZXI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzX3ByaXYuaAppbmRleCBiNzIyMjRiLi40OTYyNDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1M19wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTNfcHJpdi5oCkBAIC0yNCwxOSArMjQsMzEgQEAKIAogI2RlZmluZSBJRF9aTDEwMzUzCTB4MTQKIAorI2RlZmluZSBtc2IoeCkgKCgoeCkgPj4gOCkgJiAweGZmKQorI2RlZmluZSBsc2IoeCkgKCh4KSAmIDB4ZmYpCisKIGVudW0gemwxMDM1M19yZWdfYWRkciB7Ci0JSU5URVJSVVBUXzAJPSAweDAwLAotCUlOVEVSUlVQVF8xCT0gMHgwMSwKLQlJTlRFUlJVUFRfMgk9IDB4MDIsCi0JSU5URVJSVVBUXzMJPSAweDAzLAotCUlOVEVSUlVQVF80CT0gMHgwNCwKLQlJTlRFUlJVUFRfNQk9IDB4MDUsCi0JU1RBVFVTXzYJPSAweDA2LAotCVNUQVRVU183CT0gMHgwNywKLQlTVEFUVVNfOAk9IDB4MDgsCi0JU1RBVFVTXzkJPSAweDA5LAotCVNOUgkJPSAweDEwLAotCUNISVBfSUQJCT0gMHg3RiwKKwlJTlRFUlJVUFRfMCAgICAgICAgPSAweDAwLAorCUlOVEVSUlVQVF8xICAgICAgICA9IDB4MDEsCisJSU5URVJSVVBUXzIgICAgICAgID0gMHgwMiwKKwlJTlRFUlJVUFRfMyAgICAgICAgPSAweDAzLAorCUlOVEVSUlVQVF80ICAgICAgICA9IDB4MDQsCisJSU5URVJSVVBUXzUgICAgICAgID0gMHgwNSwKKwlTVEFUVVNfNiAgICAgICAgICAgPSAweDA2LAorCVNUQVRVU183ICAgICAgICAgICA9IDB4MDcsCisJU1RBVFVTXzggICAgICAgICAgID0gMHgwOCwKKwlTVEFUVVNfOSAgICAgICAgICAgPSAweDA5LAorCUFHQ19HQUlOXzEgICAgICAgICA9IDB4MEEsCisJQUdDX0dBSU5fMCAgICAgICAgID0gMHgwQiwKKwlTTlIgICAgICAgICAgICAgICAgPSAweDEwLAorCVJTX0VSUl9DTlRfMiAgICAgICA9IDB4MTEsCisJUlNfRVJSX0NOVF8xICAgICAgID0gMHgxMiwKKwlSU19FUlJfQ05UXzAgICAgICAgPSAweDEzLAorCVJTX1VCQ18xICAgICAgICAgICA9IDB4MTQsCisJUlNfVUJDXzAgICAgICAgICAgID0gMHgxNSwKKwlUUkxfTk9NSU5BTF9SQVRFXzEgPSAweDY1LAorCVRSTF9OT01JTkFMX1JBVEVfMCA9IDB4NjYsCisJQ0hJUF9JRCAgICAgICAgICAgID0gMHg3RiwKIH07CiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX1pMMTAzNTNfUFJJVl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKaW5kZXggMzY2YzEzNy4uMjllZDUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCkBAIC0yMjMsMTEgKzIyNCwxMCBAQAogCiBzdGF0aWMgdm9pZCBhdjcxMTBfYXJtX3N5bmMoc3RydWN0IGF2NzExMCAqYXY3MTEwKQogewotCWF2NzExMC0+YXJtX3JtbW9kID0gMTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmF2NzExMC0+YXJtX3dhaXQpOworCWlmIChhdjcxMTAtPmFybV90aHJlYWQpCisJCWt0aHJlYWRfc3RvcChhdjcxMTAtPmFybV90aHJlYWQpOwogCi0Jd2hpbGUgKGF2NzExMC0+YXJtX3RocmVhZCkKLQkJbXNsZWVwKDEpOworCWF2NzExMC0+YXJtX3RocmVhZCA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgYXJtX3RocmVhZCh2b2lkICpkYXRhKQpAQCAtMjM4LDE3ICsyMzgsMTEgQEAKIAogCWRwcmludGsoNCwgIiVwXG4iLGF2NzExMCk7CiAKLQlsb2NrX2tlcm5lbCgpOwotCWRhZW1vbml6ZSgiYXJtX21vbiIpOwotCXNpZ2ZpbGxzZXQoJmN1cnJlbnQtPmJsb2NrZWQpOwotCXVubG9ja19rZXJuZWwoKTsKLQotCWF2NzExMC0+YXJtX3RocmVhZCA9IGN1cnJlbnQ7Ci0KIAlmb3IgKDs7KSB7CiAJCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChhdjcxMTAtPmFybV93YWl0LAotCQkJCQkJCSAgIGF2NzExMC0+YXJtX3JtbW9kLCA1ICogSFopOwotCQlpZiAoLUVSRVNUQVJUU1lTID09IHRpbWVvdXQgfHwgYXY3MTEwLT5hcm1fcm1tb2QpIHsKKwkJCWt0aHJlYWRfc2hvdWxkX3N0b3AoKSwgNSAqIEhaKTsKKworCQlpZiAoLUVSRVNUQVJUU1lTID09IHRpbWVvdXQgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCQkvKiBnb3Qgc2lnbmFsIG9yIHRvbGQgdG8gcXVpdCovCiAJCQlicmVhazsKIAkJfQpAQCAtMjc2LDcgKzI3MCw2IEBACiAJCWF2NzExMC0+YXJtX2Vycm9ycyA9IDA7CiAJfQogCi0JYXY3MTEwLT5hcm1fdGhyZWFkID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjk1LDggKzY4OCw4IEBACiBzdGF0aWMgaW50IGR2Yl9vc2RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGFyZykKIHsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkdmJkZXYtPnByaXY7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSBkdmJkZXYtPnByaXY7CiAKIAlkcHJpbnRrKDQsICIlcFxuIiwgYXY3MTEwKTsKIApAQCAtNzg2LDcgKzc3OSw3IEBACiBzdGF0aWMgaW50IFN0YXJ0SFdGaWx0ZXIoc3RydWN0IGR2Yl9kZW11eF9maWx0ZXIgKmR2YmRteGZpbHRlcikKIHsKIAlzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQgPSBkdmJkbXhmaWx0ZXItPmZlZWQ7Ci0Jc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKikgZHZiZG14ZmVlZC0+ZGVtdXgtPnByaXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gZHZiZG14ZmVlZC0+ZGVtdXgtPnByaXY7CiAJdTE2IGJ1ZlsyMF07CiAJaW50IHJldCwgaTsKIAl1MTYgaGFuZGxlOwpAQCAtODM1LDcgKzgyOCw3IEBACiAKIHN0YXRpYyBpbnQgU3RvcEhXRmlsdGVyKHN0cnVjdCBkdmJfZGVtdXhfZmlsdGVyICpkdmJkbXhmaWx0ZXIpCiB7Ci0Jc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKikgZHZiZG14ZmlsdGVyLT5mZWVkLT5kZW11eC0+cHJpdjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSBkdmJkbXhmaWx0ZXItPmZlZWQtPmRlbXV4LT5wcml2OwogCXUxNiBidWZbM107CiAJdTE2IGFuc3dbMl07CiAJaW50IHJldDsKQEAgLTg3MSw3ICs4NjQsNyBAQAogc3RhdGljIGludCBkdmJfZmVlZF9zdGFydF9waWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQogewogCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OwotCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopIGR2YmRteC0+cHJpdjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSBkdmJkbXgtPnByaXY7CiAJdTE2ICpwaWQgPSBkdmJkbXgtPnBpZHMsIG5waWRzWzVdOwogCWludCBpOwogCWludCByZXQgPSAwOwpAQCAtOTE0LDcgKzkwNyw3IEBACiBzdGF0aWMgaW50IGR2Yl9mZWVkX3N0b3BfcGlkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCkKIHsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkbXggPSBkdmJkbXhmZWVkLT5kZW11eDsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkdmJkbXgtPnByaXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gZHZiZG14LT5wcml2OwogCXUxNiAqcGlkID0gZHZiZG14LT5waWRzLCBucGlkc1s1XTsKIAlpbnQgaTsKIApAQCAtMTEwMyw5ICsxMDk2LDkgQEAKIAogCS8qIHBvaW50ZXIgY2FzdGluZyBwYXJhbm9pYS4uLiAqLwogCUJVR19PTighZGVtdXgpOwotCWR2YmRlbXV4ID0gKHN0cnVjdCBkdmJfZGVtdXggKikgZGVtdXgtPnByaXY7CisJZHZiZGVtdXggPSBkZW11eC0+cHJpdjsKIAlCVUdfT04oIWR2YmRlbXV4KTsKLQlhdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkdmJkZW11eC0+cHJpdjsKKwlhdjcxMTAgPSBkdmJkZW11eC0+cHJpdjsKIAogCWRwcmludGsoNCwgIiVwXG4iLCBhdjcxMTApOwogCkBAIC0xMTM3LDcgKzExMzAsNyBAQAogCiBzdGF0aWMgaW50IGF2NzExMF9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCiB7Ci0Jc3RydWN0IGF2NzExMCogYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAqKSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBhdjcxMTAqIGF2NzExMCA9IGZlLT5kdmItPnByaXY7CiAKIAlzd2l0Y2ggKHRvbmUpIHsKIAljYXNlIFNFQ19UT05FX09OOgpAQCAtMTE5Nyw3ICsxMTkwLDcgQEAKIHN0YXRpYyBpbnQgYnVkZ2V0X3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQogewogCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZmVlZC0+ZGVtdXg7Ci0Jc3RydWN0IGF2NzExMCAqYnVkZ2V0ID0gKHN0cnVjdCBhdjcxMTAgKikgZGVtdXgtPnByaXY7CisJc3RydWN0IGF2NzExMCAqYnVkZ2V0ID0gZGVtdXgtPnByaXY7CiAJaW50IHN0YXR1czsKIAogCWRwcmludGsoMiwgImF2NzExMDogJXBcbiIsIGJ1ZGdldCk7CkBAIC0xMjEyLDcgKzEyMDUsNyBAQAogc3RhdGljIGludCBidWRnZXRfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKIHsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OwotCXN0cnVjdCBhdjcxMTAgKmJ1ZGdldCA9IChzdHJ1Y3QgYXY3MTEwICopIGRlbXV4LT5wcml2OworCXN0cnVjdCBhdjcxMTAgKmJ1ZGdldCA9IGRlbXV4LT5wcml2OwogCWludCBzdGF0dXM7CiAKIAlkcHJpbnRrKDIsICJidWRnZXQ6ICVwXG4iLCBidWRnZXQpOwpAQCAtMTU1MSw3ICsxNTQ0LDcgQEAKIAogc3RhdGljIGludCBhbHBzX2JzcnYyX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewotCXN0cnVjdCBhdjcxMTAqIGF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwKikgZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgYXY3MTEwKiBhdjcxMTAgPSBmZS0+ZHZiLT5wcml2OwogCXU4IHB3ciA9IDA7CiAJdTggYnVmWzRdOwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDYxLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKQEAgLTE3MDIsNyArMTY5NSw3IEBACiBzdGF0aWMgaW50IGFscHNfdGRsYjdfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNoYXIqIG5hbWUpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NQODg3MCkgfHwgZGVmaW5lZChDT05GSUdfRFZCX1NQODg3MF9NT0RVTEUpCi0Jc3RydWN0IGF2NzExMCogYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAqKSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBhdjcxMTAqIGF2NzExMCA9IGZlLT5kdmItPnByaXY7CiAKIAlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZShmdywgbmFtZSwgJmF2NzExMC0+ZGV2LT5wY2ktPmRldik7CiAjZWxzZQpAQCAtMTg2Nyw3ICsxODYwLDcgQEAKIAogc3RhdGljIGludCBncnVuZGlnXzI5NTA0XzQwMV90dW5lcl9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgYXY3MTEwKiBhdjcxMTAgPSAoc3RydWN0IGF2NzExMCopIGZlLT5kdmItPnByaXY7CisJc3RydWN0IGF2NzExMCogYXY3MTEwID0gZmUtPmR2Yi0+cHJpdjsKIAl1MzIgZGl2OwogCXU4IGNmZywgY3B1bXAsIGJhbmRfc2VsZWN0OwogCXU4IGRhdGFbNF07CkBAIC0yMzM4LDYgKzIzMzEsNyBAQAogCWNvbnN0IGludCBsZW5ndGggPSBUU19XSURUSCAqIFRTX0hFSUdIVDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldi0+cGNpOwogCXN0cnVjdCBhdjcxMTAgKmF2NzExMDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKIAlpbnQgcmV0LCBjb3VudCA9IDA7CiAKIAlkcHJpbnRrKDQsICJkZXY6ICVwXG4iLCBkZXYpOwpAQCAtMjYyMiw5ICsyNjE2LDEyIEBACiAJCXByaW50ayAoImR2Yi10dHBjaTogV2FybmluZywgZmlybXdhcmUgdmVyc2lvbiAweCUwNHggaXMgdG9vIG9sZC4gIgogCQkJIlN5c3RlbSBtaWdodCBiZSB1bnN0YWJsZSFcbiIsIEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSk7CiAKLQlyZXQgPSBrZXJuZWxfdGhyZWFkKGFybV90aHJlYWQsICh2b2lkICopIGF2NzExMCwgMCk7Ci0JaWYgKHJldCA8IDApCisJdGhyZWFkID0ga3RocmVhZF9ydW4oYXJtX3RocmVhZCwgKHZvaWQgKikgYXY3MTEwLCAiYXJtX21vbiIpOworCWlmIChJU19FUlIodGhyZWFkKSkgeworCQlyZXQgPSBQVFJfRVJSKHRocmVhZCk7CiAJCWdvdG8gZXJyX3N0b3BfYXJtXzk7CisJfQorCWF2NzExMC0+YXJtX3RocmVhZCA9IHRocmVhZDsKIAogCS8qIHNldCBpbml0aWFsIHZvbHVtZSBpbiBtaXhlciBzdHJ1Y3QgKi8KIAlhdjcxMTAtPm1peGVyLnZvbHVtZV9sZWZ0ICA9IHZvbHVtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmgKaW5kZXggOWM3OTY5Ni4uYjk4YmQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmgKQEAgLTM1LDcgKzM1LDYgQEAKIAogI2RlZmluZSBBTkFMT0dfVFVORVJfVkVTMTgyMCAxCiAjZGVmaW5lIEFOQUxPR19UVU5FUl9TVFYwMjk3IDIKLSNkZWZpbmUgQU5BTE9HX1RVTkVSX1ZCSSAgICAgMHgxMDAKIAogZXh0ZXJuIGludCBhdjcxMTBfZGVidWc7CiAKQEAgLTIwNSw3ICsyMDQsNiBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqYXJtX3RocmVhZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgIGFybV93YWl0OwogCXUxNgkJICAgIGFybV9sb29wczsKLQlpbnQJCSAgICBhcm1fcm1tb2Q7CiAKIAl2b2lkCQkgICAqZGViaV92aXJ0OwogCWRtYV9hZGRyX3QJICAgIGRlYmlfYnVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwppbmRleCA3OTVlNmU5Li5lNzE5YWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwpAQCAtODgwLDggKzg4MCw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZHZiX3ZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7Ci0Jc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IChzdHJ1Y3QgZHZiX2RldmljZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKikgZHZiZGV2LT5wcml2OworCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gZHZiZGV2LT5wcml2OwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAogCWRwcmludGsoMiwgImF2NzExMDolcCwgXG4iLCBhdjcxMTApOwpAQCAtOTA4LDggKzkwOCw4IEBACiBzdGF0aWMgc3NpemVfdCBkdmJfdmlkZW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IChzdHJ1Y3QgZHZiX2RldmljZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKikgZHZiZGV2LT5wcml2OworCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gZHZiZGV2LT5wcml2OwogCiAJZHByaW50aygyLCAiYXY3MTEwOiVwLCBcbiIsIGF2NzExMCk7CiAKQEAgLTkyNCw4ICs5MjQsOCBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGR2Yl9hdWRpb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSAoc3RydWN0IGR2Yl9kZXZpY2UgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopIGR2YmRldi0+cHJpdjsKKwlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IGR2YmRldi0+cHJpdjsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAKIAlkcHJpbnRrKDIsICJhdjcxMTA6JXAsIFxuIiwgYXY3MTEwKTsKQEAgLTk0NCw4ICs5NDQsOCBAQAogc3RhdGljIHNzaXplX3QgZHZiX2F1ZGlvX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSAoc3RydWN0IGR2Yl9kZXZpY2UgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopIGR2YmRldi0+cHJpdjsKKwlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IGR2YmRldi0+cHJpdjsKIAogCWRwcmludGsoMiwgImF2NzExMDolcCwgXG4iLCBhdjcxMTApOwogCkBAIC05ODksOCArOTg5LDggQEAKIHN0YXRpYyBpbnQgZHZiX3ZpZGVvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGFyZykKIHsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkdmJkZXYtPnByaXY7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSBkdmJkZXYtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBhcmcgPSAodW5zaWduZWQgbG9uZykgcGFyZzsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTIwMyw4ICsxMjAzLDggQEAKIHN0YXRpYyBpbnQgZHZiX2F1ZGlvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGFyZykKIHsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkdmJkZXYtPnByaXY7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSBkdmJkZXYtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBhcmcgPSAodW5zaWduZWQgbG9uZykgcGFyZzsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTM0OSw4ICsxMzQ5LDggQEAKIAogc3RhdGljIGludCBkdmJfdmlkZW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkdmJkZXYtPnByaXY7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSBkdmJkZXYtPnByaXY7CiAJaW50IGVycjsKIAogCWRwcmludGsoMiwgImF2NzExMDolcCwgXG4iLCBhdjcxMTApOwpAQCAtMTM3NCw4ICsxMzc0LDggQEAKIAogc3RhdGljIGludCBkdmJfdmlkZW9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkdmJkZXYtPnByaXY7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSBkdmJkZXYtPnByaXY7CiAKIAlkcHJpbnRrKDIsICJhdjcxMTA6JXAsIFxuIiwgYXY3MTEwKTsKIApAQCAtMTM4OCw5ICsxMzg4LDkgQEAKIAogc3RhdGljIGludCBkdmJfYXVkaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkdmJkZXYtPnByaXY7Ci0JaW50IGVycj1kdmJfZ2VuZXJpY19vcGVuKGlub2RlLCBmaWxlKTsKKwlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IGR2YmRldi0+cHJpdjsKKwlpbnQgZXJyID0gZHZiX2dlbmVyaWNfb3Blbihpbm9kZSwgZmlsZSk7CiAKIAlkcHJpbnRrKDIsICJhdjcxMTA6JXAsIFxuIiwgYXY3MTEwKTsKIApAQCAtMTQwMyw4ICsxNDAzLDggQEAKIAogc3RhdGljIGludCBkdmJfYXVkaW9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkdmJkZXYtPnByaXY7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSBkdmJkZXYtPnByaXY7CiAKIAlkcHJpbnRrKDIsICJhdjcxMTA6JXAsIFxuIiwgYXY3MTEwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYwppbmRleCA0MjUxYTk3Li5lOWI0ZTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYwpAQCAtMjE0LDggKzIxNCw4IEBACiAKIHN0YXRpYyBpbnQgZHZiX2NhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IChzdHJ1Y3QgZHZiX2RldmljZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKikgZHZiZGV2LT5wcml2OworCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gZHZiZGV2LT5wcml2OwogCWludCBlcnIgPSBkdmJfZ2VuZXJpY19vcGVuKGlub2RlLCBmaWxlKTsKIAogCWRwcmludGsoOCwgImF2NzExMDolcFxuIixhdjcxMTApOwpAQCAtMjI4LDggKzIyOCw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZHZiX2NhX3BvbGwgKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSAoc3RydWN0IGR2Yl9kZXZpY2UgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopIGR2YmRldi0+cHJpdjsKKwlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IGR2YmRldi0+cHJpdjsKIAlzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKnJidWYgPSAmYXY3MTEwLT5jaV9yYnVmZmVyOwogCXN0cnVjdCBkdmJfcmluZ2J1ZmZlciAqd2J1ZiA9ICZhdjcxMTAtPmNpX3didWZmZXI7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwpAQCAtMjUxLDggKzI1MSw4IEBACiBzdGF0aWMgaW50IGR2Yl9jYV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnBhcmcpCiB7Ci0Jc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IChzdHJ1Y3QgZHZiX2RldmljZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKikgZHZiZGV2LT5wcml2OworCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gZHZiZGV2LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgYXJnID0gKHVuc2lnbmVkIGxvbmcpIHBhcmc7CiAKIAlkcHJpbnRrKDgsICJhdjcxMTA6JXBcbiIsYXY3MTEwKTsKQEAgLTMyOSw4ICszMjksOCBAQAogc3RhdGljIHNzaXplX3QgZHZiX2NhX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSAoc3RydWN0IGR2Yl9kZXZpY2UgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopIGR2YmRldi0+cHJpdjsKKwlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IGR2YmRldi0+cHJpdjsKIAogCWRwcmludGsoOCwgImF2NzExMDolcFxuIixhdjcxMTApOwogCXJldHVybiBjaV9sbF93cml0ZSgmYXY3MTEwLT5jaV93YnVmZmVyLCBmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsKQEAgLTMzOSwxNSArMzM5LDEzIEBACiBzdGF0aWMgc3NpemVfdCBkdmJfY2FfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSAoc3RydWN0IGR2Yl9kZXZpY2UgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopIGR2YmRldi0+cHJpdjsKKwlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IGR2YmRldi0+cHJpdjsKIAogCWRwcmludGsoOCwgImF2NzExMDolcFxuIixhdjcxMTApOwogCXJldHVybiBjaV9sbF9yZWFkKCZhdjcxMTAtPmNpX3JidWZmZXIsIGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOwogfQogCi0KLQogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2NhX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IGR2Yl9jYV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwppbmRleCBlNDU0NGVhLi5mNTk0NjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KIAogI2luY2x1ZGUgImF2NzExMC5oIgpAQCAtMTYsNiArMTcsNyBAQAogc3RhdGljIGludCBhdl9jbnQ7CiBzdGF0aWMgc3RydWN0IGF2NzExMCAqYXZfbGlzdFs0XTsKIHN0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CitzdGF0aWMgY2hhciBpbnB1dF9waHlzWzMyXTsKIAogc3RhdGljIHU4IGRlbGF5X3RpbWVyX2ZpbmlzaGVkOwogCkBAIC0yMTcsNyArMjE5LDcgQEAKIAlzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCWludCBlcnI7CiAKLQlpZiAoYXZfY250ID49IHNpemVvZiBhdl9saXN0L3NpemVvZiBhdl9saXN0WzBdKQorCWlmIChhdl9jbnQgPj0gQVJSQVlfU0laRShhdl9saXN0KSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAlhdjcxMTBfc2V0dXBfaXJjX2NvbmZpZyhhdjcxMTAsIDB4MDAwMSk7CkBAIC0yMzEsOCArMjMzLDIyIEBACiAJCWlmICghaW5wdXRfZGV2KQogCQkJcmV0dXJuIC1FTk9NRU07CiAKKwkJc25wcmludGYoaW5wdXRfcGh5cywgc2l6ZW9mKGlucHV0X3BoeXMpLAorCQkJInBjaS0lcy9pcjAiLCBwY2lfbmFtZShhdjcxMTAtPmRldi0+cGNpKSk7CisKIAkJaW5wdXRfZGV2LT5uYW1lID0gIkRWQiBvbi1jYXJkIElSIHJlY2VpdmVyIjsKIAorCQlpbnB1dF9kZXYtPnBoeXMgPSBpbnB1dF9waHlzOworCQlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfUENJOworCQlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAxOworCQlpZiAoYXY3MTEwLT5kZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvcikgeworCQkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBhdjcxMTAtPmRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yOworCQkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gYXY3MTEwLT5kZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZTsKKwkJfSBlbHNlIHsKKwkJCWlucHV0X2Rldi0+aWQudmVuZG9yID0gYXY3MTEwLT5kZXYtPnBjaS0+dmVuZG9yOworCQkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gYXY3MTEwLT5kZXYtPnBjaS0+ZGV2aWNlOworCQl9CisJCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmYXY3MTEwLT5kZXYtPnBjaS0+ZGV2OwogCQlzZXRfYml0KEVWX0tFWSwgaW5wdXRfZGV2LT5ldmJpdCk7CiAJCXNldF9iaXQoRVZfUkVQLCBpbnB1dF9kZXYtPmV2Yml0KTsKIAkJaW5wdXRfcmVnaXN0ZXJfa2V5cygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCmluZGV4IGRiZmQ1ZTcuLmNkZTVkM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKQEAgLTE0MCwxNyArMTQwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzdHYwMjk3X3dyaXRlcmVnKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCB1OCBhZGRyLCB1OCByZWcsIHU4IGRhdGEpCi17Ci0JdTggYnVmIFtdID0geyByZWcsIGRhdGEgfTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIgfTsKLQotCWlmICgxICE9IHNhYTcxNDZfaTJjX3RyYW5zZmVyKGRldiwgJm1zZywgMSwgMSkpCi0JCXJldHVybiAtMTsKLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IHR1bmVyX3dyaXRlKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCB1OCBhZGRyLCB1OCBkYXRhIFs0XSkKIHsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGRhdGEsIC5sZW4gPSA0IH07CkBAIC0xOTMsNiArMTgyLDcgQEAKIAogc3RhdGljIGludCBzdHYwMjk3X3NldF90dl9mcmVxKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCB1MzIgZnJlcSkKIHsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCopZGV2LT5leHRfcHJpdjsKIAl1MzIgZGl2OwogCXU4IGRhdGFbNF07CiAKQEAgLTIxMyw4ICsyMDMsOCBAQAogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHYwMjk3X3dyaXRlcmVnKGRldiwgMHgxQywgMHg4NywgMHg3OCk7Ci0Jc3R2MDI5N193cml0ZXJlZyhkZXYsIDB4MUMsIDB4ODYsIDB4YzgpOworCWlmIChhdjcxMTAtPmZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJYXY3MTEwLT5mZS0+b3BzLmkyY19nYXRlX2N0cmwoYXY3MTEwLT5mZSwgMSk7CiAJcmV0dXJuIHR1bmVyX3dyaXRlKGRldiwgMHg2MywgZGF0YSk7CiB9CiAKQEAgLTgxNywyMCArODA3LDIwIEBACiAJCXNhYTcxNDZfdnZfcmVsZWFzZShkZXYpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZhdjcxMTAtPnZiaV9kZXYsIGRldiwgImF2NzExMCIsIFZGTF9UWVBFX1ZCSSkpIHsKKwlpZiAoc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmF2NzExMC0+dmJpX2RldiwgZGV2LCAiYXY3MTEwIiwgVkZMX1RZUEVfVkJJKSkKIAkJRVJSKCgiY2Fubm90IHJlZ2lzdGVyIHZiaSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzKQotCQkJYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfD0gQU5BTE9HX1RVTkVSX1ZCSTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKIGludCBhdjcxMTBfZXhpdF92NGwoc3RydWN0IGF2NzExMCAqYXY3MTEwKQogeworCXN0cnVjdCBzYWE3MTQ2X2RldiogZGV2ID0gYXY3MTEwLT5kZXY7CisKIAlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZhdjcxMTAtPnY0bF9kZXYsIGF2NzExMC0+ZGV2KTsKLQlpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgJiBBTkFMT0dfVFVORVJfVkJJKQotCQlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZhdjcxMTAtPnZiaV9kZXYsIGF2NzExMC0+ZGV2KTsKKwlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZhdjcxMTAtPnZiaV9kZXYsIGF2NzExMC0+ZGV2KTsKKworCXNhYTcxNDZfdnZfcmVsZWFzZShkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggODlhYjRiNS4uMzAzNWIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTEwODksNiArMTA4OSw4IEBACiAJCW1zbGVlcCgyMDApOwogCiAJCXNhYTcxNDZfdW5yZWdpc3Rlcl9kZXZpY2UoJmJ1ZGdldF9hdi0+dmQsIGRldik7CisKKwkJc2FhNzE0Nl92dl9yZWxlYXNlKGRldik7CiAJfQogCiAJaWYgKGJ1ZGdldF9hdi0+YnVkZ2V0LmNpX3ByZXNlbnQpCkBAIC0xMTQ1LDYgKzExNDcsNyBAQAogCQlpZiAoKGVyciA9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZidWRnZXRfYXYtPnZkLCBkZXYsICJrbmMxIiwgVkZMX1RZUEVfR1JBQkJFUikpKSB7CiAJCQkvKiBmaXhtZTogcHJvcGVyIGNsZWFudXAgaGVyZSAqLwogCQkJRVJSKCgiY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuXG4iKSk7CisJCQlzYWE3MTQ2X3Z2X3JlbGVhc2UoZGV2KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwppbmRleCBmMjA2NmI0Li40NjRmZWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwpAQCAtMjksOCArMjksNiBAQAogICogdGhlIHByb2plY3QncyBwYWdlIGlzIGF0IGh0dHA6Ly93d3cubGludXh0di5vcmcvZHZiLwogICovCiAKLSNpbmNsdWRlICJidWRnZXQuaCIKLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzksNiArMzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CiAKKyNpbmNsdWRlICJidWRnZXQuaCIKKwogI2luY2x1ZGUgImR2Yl9jYV9lbjUwMjIxLmgiCiAjaW5jbHVkZSAic3R2MDI5OS5oIgogI2luY2x1ZGUgInN0djAyOTcuaCIKQEAgLTEzMCw2ICsxMzAsNyBAQAogCWludCB0b2dnbGU7CiAJc3RhdGljIGludCBwcmV2X3RvZ2dsZSA9IC0xOwogCXN0YXRpYyB1MzIgaXJfa2V5OworCXN0YXRpYyBpbnQgc3RhdGUgPSAwOwogCXUzMiBjb21tYW5kID0gdHRwY2lfYnVkZ2V0X2RlYmlyZWFkKCZidWRnZXRfY2ktPmJ1ZGdldCwgREVCSU5PU1dBUCwgREVCSUFERFJfSVIsIDIsIDEsIDApID4+IDg7CiAKIAkvKgpAQCAtMTM4LDIxICsxMzksMzQgQEAKIAkgKiB0eXBlMTogWDFDQ0NDQ0MsIEMgPSBjb21tYW5kIGJpdHMgKDAgLSA2MykKIAkgKiB0eXBlMjogWDBUREREREQsIEQgPSBkZXZpY2UgYml0cyAoMCAtIDMxKSwgVCA9IFJDNSB0b2dnbGUgYml0CiAJICoKLQkgKiBNb3JlIHRoYW4gb25lIGNvbW1hbmQgYnl0ZSBtYXkgYmUgZ2VuZXJhdGVkIGJlZm9yZSB0aGUgZGV2aWNlIGJ5dGUKLQkgKiBPbmx5IHdoZW4gd2UgaGF2ZSBib3RoLCBhIGNvcnJlY3Qga2V5cHJlc3MgaXMgZ2VuZXJhdGVkCisJICogRWFjaCBzaWduYWwgZnJvbSB0aGUgcmVtb3RlIGNvbnRyb2wgY2FuIGdlbmVyYXRlIG9uZSBvciBtb3JlIGNvbW1hbmQKKwkgKiBieXRlcyBhbmQgb25lIG9yIG1vcmUgZGV2aWNlIGJ5dGVzLiBGb3IgdGhlIHJlcGVhdGVkIGJ5dGVzLCB0aGUKKwkgKiBoaWdoZXN0IGJpdCAoWCkgaXMgc2V0LiBUaGUgZmlyc3QgY29tbWFuZCBieXRlIGlzIGFsd2F5cyBnZW5lcmF0ZWQKKwkgKiBiZWZvcmUgdGhlIGZpcnN0IGRldmljZSBieXRlLiBPdGhlciB0aGFuIHRoYXQsIG5vIHNwZWNpZmljIG9yZGVyCisJICogc2VlbXMgdG8gYXBwbHkuCisJICoKKwkgKiBPbmx5IHdoZW4gd2UgaGF2ZSBhIGNvbW1hbmQgYW5kIGRldmljZSBieXRlLCBhIGtleXByZXNzIGlzCisJICogZ2VuZXJhdGVkLgogCSAqLwogCisJaWYgKGlyX2RlYnVnKQorCQlwcmludGsoImJ1ZGdldF9jaTogcmVjZWl2ZWQgYnl0ZSAweCUwMnhcbiIsIGNvbW1hbmQpOworCisJLyogSXMgdGhpcyBhIHJlcGVhdGVkIGJ5dGU/ICovCisJaWYgKGNvbW1hbmQgJiAweDgwKQorCQlyZXR1cm47CisKIAkvKiBJcyB0aGlzIGEgUkM1IGNvbW1hbmQgYnl0ZT8gKi8KIAlpZiAoY29tbWFuZCAmIDB4NDApIHsKLQkJaWYgKGlyX2RlYnVnKQotCQkJcHJpbnRrKCJidWRnZXRfY2k6IHJlY2VpdmVkIGNvbW1hbmQgYnl0ZSAweCUwMnhcbiIsIGNvbW1hbmQpOworCQlzdGF0ZSA9IDE7CiAJCWlyX2tleSA9IGNvbW1hbmQgJiAweDNmOwogCQlyZXR1cm47CiAJfQogCiAJLyogSXQncyBhIFJDNSBkZXZpY2UgYnl0ZSAqLwotCWlmIChpcl9kZWJ1ZykKLQkJcHJpbnRrKCJidWRnZXRfY2k6IHJlY2VpdmVkIGRldmljZSBieXRlIDB4JTAyeFxuIiwgY29tbWFuZCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuOworCXN0YXRlID0gMDsKIAlkZXZpY2UgPSBjb21tYW5kICYgMHgxZjsKIAl0b2dnbGUgPSBjb21tYW5kICYgMHgyMDsKIApAQCAtMjIzLDcgKzIzNyw2IEBACiAJc3dpdGNoIChidWRnZXRfY2ktPmJ1ZGdldC5kZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSkgewogCWNhc2UgMHgxMDBjOgogCWNhc2UgMHgxMDBmOgotCWNhc2UgMHgxMDEwOgogCWNhc2UgMHgxMDExOgogCWNhc2UgMHgxMDEyOgogCWNhc2UgMHgxMDE3OgpAQCAtMjM2LDYgKzI0OSwxNiBAQAogCQllbHNlCiAJCQlidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgPSByYzVfZGV2aWNlOwogCQlicmVhazsKKwljYXNlIDB4MTAxMDoKKwkJLyogZm9yIHRoZSBUZWNobm90cmVuZCAxNTAwIGJ1bmRsZWQgcmVtb3RlICovCisJCWlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmYnVkZ2V0X2NpLT5pci5zdGF0ZSwKKwkJCSAgICAgIElSX1RZUEVfUkM1LCBpcl9jb2Rlc190dF8xNTAwKTsKKworCQlpZiAocmM1X2RldmljZSA8IDApCisJCQlidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgPSBJUl9ERVZJQ0VfQU5ZOworCQllbHNlCisJCQlidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgPSByYzVfZGV2aWNlOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiB1bmtub3duIHJlbW90ZSAqLwogCQlpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmJ1ZGdldF9jaS0+aXIuc3RhdGUsCkBAIC04NjksNiArODkyLDE3IEBACiAJLnJlcXVlc3RfZmlybXdhcmUgPSBwaGlsaXBzX3RkbTEzMTZsX3JlcXVlc3RfZmlybXdhcmUsCiB9OwogCitzdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBwaGlsaXBzX3RkbTEzMTZsX2NvbmZpZ19pbnZlcnQgPSB7CisKKwkuZGVtb2RfYWRkcmVzcyA9IDB4OCwKKwkuaW52ZXJ0ID0gMSwKKwkuaW52ZXJ0X29jbGsgPSAwLAorCS54dGFsX2ZyZXEgPSBUREExMDA0Nl9YVEFMXzRNLAorCS5hZ2NfY29uZmlnID0gVERBMTAwNDZfQUdDX0RFRkFVTFQsCisJLmlmX2ZyZXEgPSBUREExMDA0Nl9GUkVRXzM2MTcsCisJLnJlcXVlc3RfZmlybXdhcmUgPSBwaGlsaXBzX3RkbTEzMTZsX3JlcXVlc3RfZmlybXdhcmUsCit9OworCiBzdGF0aWMgaW50IGR2YmNfcGhpbGlwc190ZG0xMzE2bF90dW5lcl9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYnVkZ2V0X2NpICpidWRnZXRfY2kgPSAoc3RydWN0IGJ1ZGdldF9jaSAqKSBmZS0+ZHZiLT5wcml2OwpAQCAtMTA5Miw5ICsxMTI2LDggQEAKIAogCWNhc2UgMHgxMDEyOgkJLy8gVFQgRFZCLVQgQ0kgYnVkZ2V0ICh0ZGExMDA0Ni9QaGlsaXBzIHRkbTEzMTZsKHRkYTY2NTF0dCkpCiAJCWJ1ZGdldF9jaS0+dHVuZXJfcGxsX2FkZHJlc3MgPSAweDYwOwotCQlwaGlsaXBzX3RkbTEzMTZsX2NvbmZpZy5pbnZlcnQgPSAxOwogCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPQotCQkJZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsICZwaGlsaXBzX3RkbTEzMTZsX2NvbmZpZywgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwKTsKKwkJCWR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLCAmcGhpbGlwc190ZG0xMzE2bF9jb25maWdfaW52ZXJ0LCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKSB7CiAJCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGRtMTMxNmxfdHVuZXJfaW5pdDsKIAkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZG0xMzE2bF90dW5lcl9zZXRfcGFyYW1zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCmluZGV4IGJkNmU3YmEuLjc4Yzk4YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKQEAgLTIwLDggKzIwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTM1LDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlICJkbXhkZXYuaCIKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKICNpbmNsdWRlICJkdmJfZmlsdGVyLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYwppbmRleCAxOWQ0NWNjLi45ZjFhZGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKQEAgLTE4MCwxMzYgKzE4MCwxNjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhel9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCit7CisJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1henRlY2giLCBzaXplb2YgKHYtPmRyaXZlcikpOworCXN0cmxjcHkodi0+Y2FyZCwgIkF6dGVjaCBSYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOworCXNwcmludGYodi0+YnVzX2luZm8sIklTQSIpOworCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gZGV2LT5wcml2OwogCi0Jc3dpdGNoKGNtZCkKLQl7Ci0JCWNhc2UgVklESU9DX1FVRVJZQ0FQOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2ID0gYXJnOwotCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKLQkJCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tYXp0ZWNoIiwgc2l6ZW9mICh2LT5kcml2ZXIpKTsKLQkJCXN0cmxjcHkodi0+Y2FyZCwgIkF6dGVjaCBSYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOwotCQkJc3ByaW50Zih2LT5idXNfaW5mbywiSVNBIik7Ci0JCQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQkJCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCWlmICh2LT5pbmRleCA+IDApCisJCXJldHVybiAtRUlOVkFMOwogCi0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ19HX1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKKwlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAKLQkJCWlmICh2LT5pbmRleCA+IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJdi0+cmFuZ2Vsb3c9KDg3KjE2MDAwKTsKKwl2LT5yYW5nZWhpZ2g9KDEwOCoxNjAwMCk7CisJdi0+cnhzdWJjaGFucyA9VjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+Y2FwYWJpbGl0eT1WNEwyX1RVTkVSX0NBUF9MT1c7CisJaWYoYXpfZ2V0c3RlcmVvKGF6KSkKKwkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJZWxzZQorCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJdi0+c2lnbmFsPTB4RkZGRiphel9nZXRzaWdzdHIoYXopOwogCi0JCQltZW1zZXQodiwwLHNpemVvZigqdikpOwotCQkJc3RyY3B5KHYtPm5hbWUsICJGTSIpOwotCQkJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0KLQkJCXYtPnJhbmdlbG93PSg4NyoxNjAwMCk7Ci0JCQl2LT5yYW5nZWhpZ2g9KDEwOCoxNjAwMCk7Ci0JCQl2LT5yeHN1YmNoYW5zID1WNEwyX1RVTkVSX1NVQl9NT05PfFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJCXYtPmNhcGFiaWxpdHk9VjRMMl9UVU5FUl9DQVBfTE9XOwotCQkJaWYoYXpfZ2V0c3RlcmVvKGF6KSkKLQkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJCWVsc2UKLQkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0JCQl2LT5zaWduYWw9MHhGRkZGKmF6X2dldHNpZ3N0cihheik7Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOwotCi0JCQlpZiAodi0+aW5kZXggPiAwKQotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQkJewotCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwotCi0JCQlhei0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQkJCWF6X3NldGZyZXEoYXosIGF6LT5jdXJmcmVxKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7Ci0KLQkJCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCQkJZi0+ZnJlcXVlbmN5ID0gYXotPmN1cmZyZXE7Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOwotCQkJaW50IGk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJCQlyZXR1cm4gKDApOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybD0gYXJnOwotCi0JCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJCQlpZiAoYXotPmN1cnZvbD09MCkKLQkJCQkJCWN0cmwtPnZhbHVlPTE7Ci0JCQkJCWVsc2UKLQkJCQkJCWN0cmwtPnZhbHVlPTA7Ci0JCQkJCXJldHVybiAoMCk7Ci0JCQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQkJCWN0cmwtPnZhbHVlPWF6LT5jdXJ2b2wgKiA2NTU0OwotCQkJCQlyZXR1cm4gKDApOwotCQkJfQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJY2FzZSBWSURJT0NfU19DVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsPSBhcmc7Ci0KLQkJCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQkJCWlmIChjdHJsLT52YWx1ZSkgewotCQkJCQkJYXpfc2V0dm9sKGF6LDApOwotCQkJCQl9IGVsc2UgewotCQkJCQkJYXpfc2V0dm9sKGF6LGF6LT5jdXJ2b2wpOwotCQkJCQl9Ci0JCQkJCXJldHVybiAoMCk7Ci0JCQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQkJCWF6X3NldHZvbChheixjdHJsLT52YWx1ZSk7Ci0JCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLAotCQkJCQkJCSAgYXpfZG9faW9jdGwpOwotCX0KKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhel9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorCitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBhel9kb19pb2N0bCk7CisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoYS0+aW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCit7CisJKmkgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoaSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWlmIChhLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGF6X2RldmljZSAqYXogPSBkZXYtPnByaXY7CisKKwlhei0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwlhel9zZXRmcmVxKGF6LCBhei0+Y3VyZnJlcSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IGRldi0+cHJpdjsKKworCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCWYtPmZyZXF1ZW5jeSA9IGF6LT5jdXJmcmVxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CisJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7CisJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAorCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJcmV0dXJuICgwKTsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGF6X2RldmljZSAqYXogPSBkZXYtPnByaXY7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCWlmIChhei0+Y3Vydm9sPT0wKQorCQkJCWN0cmwtPnZhbHVlPTE7CisJCQllbHNlCisJCQkJY3RybC0+dmFsdWU9MDsKKwkJCXJldHVybiAoMCk7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJY3RybC0+dmFsdWU9YXotPmN1cnZvbCAqIDY1NTQ7CisJCQlyZXR1cm4gKDApOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGF6X2RldmljZSAqYXogPSBkZXYtPnByaXY7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCWlmIChjdHJsLT52YWx1ZSkgeworCQkJCWF6X3NldHZvbChheiwwKTsKKwkJCX0gZWxzZSB7CisJCQkJYXpfc2V0dm9sKGF6LGF6LT5jdXJ2b2wpOworCQkJfQorCQkJcmV0dXJuICgwKTsKKwkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCQlhel9zZXR2b2woYXosY3RybC0+dmFsdWUpOworCQkJcmV0dXJuICgwKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXpfZGV2aWNlIGF6dGVjaF91bml0OwpAQCAtMzE4LDIwICszNDUsMzUgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCiAJLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCi0JLmlvY3RsCQk9IGF6X2lvY3RsLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrICAgICAgICAgPSBub19sbHNlZWssCiB9OwogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBhenRlY2hfcmFkaW89CiB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJBenRlY2ggcmFkaW8iLAotCS50eXBlCQk9IFZJRF9UWVBFX1RVTkVSLAotCS5oYXJkd2FyZQk9IDAsCi0JLmZvcHMgICAgICAgICAgID0gJmF6dGVjaF9mb3BzLAorCS5vd25lcgkJICAgID0gVEhJU19NT0RVTEUsCisJLm5hbWUJCSAgICA9ICJBenRlY2ggcmFkaW8iLAorCS50eXBlCQkgICAgPSBWSURfVFlQRV9UVU5FUiwKKwkuaGFyZHdhcmUJICAgID0gMCwKKwkuZm9wcyAgICAgICAgICAgICAgID0gJmF6dGVjaF9mb3BzLAorCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19nX3R1bmVyICAgICA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfYXVkaW8gICAgID0gdmlkaW9jX2dfYXVkaW8sCisJLnZpZGlvY19zX2F1ZGlvICAgICA9IHZpZGlvY19zX2F1ZGlvLAorCS52aWRpb2NfZ19pbnB1dCAgICAgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2NfcXVlcnljdHJsICAgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAogfTsKIAorbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGF6dGVjaF9yYWRpby5kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsImFjdGl2YXRlcyBkZWJ1ZyBpbmZvIik7CisKIHN0YXRpYyBpbnQgX19pbml0IGF6dGVjaF9pbml0KHZvaWQpCiB7CiAJaWYoaW89PS0xKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwppbmRleCAwNWU1YWE3Li43NDk3NmNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKQEAgLTg5LDE0ICs4OSw2IEBACiAjZGVmaW5lIEdFTVRFS19QQ0lfUkFOR0VfSElHSCAoMTA4KjE2MDAwKQogI2VuZGlmCiAKLSNpZm5kZWYgVFJVRQotI2RlZmluZSBUUlVFICgxKQotI2VuZGlmCi0KLSNpZm5kZWYgRkFMU0UKLSNkZWZpbmUgRkFMU0UgKDApCi0jZW5kaWYKLQogc3RydWN0IGdlbXRla19wY2lfY2FyZCB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9kZXY7CiAKQEAgLTE0NiwxMiArMTM4LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX25pbCggdTMyIHBvcnQsIHU4ICpsYXN0X2J5dGUgKQogewotCV9fZ2VtdGVrX3BjaV9jbWQoIDB4MDAsIHBvcnQsIGxhc3RfYnl0ZSwgRkFMU0UgKTsKKwlfX2dlbXRla19wY2lfY21kKCAweDAwLCBwb3J0LCBsYXN0X2J5dGUsIGZhbHNlICk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX2NtZCggdTE2IGNtZCwgdTMyIHBvcnQsIHU4ICpsYXN0X2J5dGUgKQogewotCV9fZ2VtdGVrX3BjaV9jbWQoIGNtZCwgcG9ydCwgbGFzdF9ieXRlLCBUUlVFICk7CisJX19nZW10ZWtfcGNpX2NtZCggY21kLCBwb3J0LCBsYXN0X2J5dGUsIHRydWUgKTsKIH0KIAogc3RhdGljIHZvaWQgZ2VtdGVrX3BjaV9zZXRmcmVxdWVuY3koIHN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5ICkKQEAgLTE4NCwxNCArMTc2LDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VtdGVrX3BjaV9tdXRlKCBzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkICkKIHsKIAlvdXRiKCAweDFmLCBjYXJkLT5pb2Jhc2UgKTsKLQljYXJkLT5tdXRlID0gVFJVRTsKKwljYXJkLT5tdXRlID0gdHJ1ZTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGdlbXRla19wY2lfdW5tdXRlKCBzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkICkKIHsKIAlpZiAoIGNhcmQtPm11dGUgKSB7CiAJCWdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KCBjYXJkLCBjYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSApOwotCQljYXJkLT5tdXRlID0gRkFMU0U7CisJCWNhcmQtPm11dGUgPSBmYWxzZTsKIAl9CiB9CiAKQEAgLTI1OSw3ICsyNTEsNyBAQAogCiAJCQlnZW10ZWtfcGNpX3NldGZyZXF1ZW5jeSggY2FyZCwgZi0+ZnJlcXVlbmN5ICk7CiAJCQljYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IGYtPmZyZXF1ZW5jeTsKLQkJCWNhcmQtPm11dGUgPSBGQUxTRTsKKwkJCWNhcmQtPm11dGUgPSBmYWxzZTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCmluZGV4IDZiZWViNzQuLjhlMTg0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYwpAQCAtMjcsNyArMjcsOSBAQAogICogQlVHUzoKICAqICAgLSBjYXJkIHVubXV0ZXMgaWYgeW91IGNoYW5nZSBmcmVxdWVuY3kKICAqCi0gKiBDb252ZXJ0ZWQgdG8gVjRMMiBBUEkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKiAoYykgMjAwNiwgMjAwNyBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz46CisgKgktIENvbnZlcnNpb24gdG8gVjRMMiBBUEkKKyAqICAgICAgLSBVc2VzIHZpZGVvX2lvY3RsMiBmb3IgcGFyc2luZyBhbmQgdG8gYWRkIGRlYnVnIHN1cHBvcnQKICAqLwogCiAKQEAgLTQzLDEwICs0NSwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuNzYiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjc3IgogCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDcsNikKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDcsNykKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgbWF4aXJhZGlvX3JhZGlvOworCisjZGVmaW5lIGRwcmludGsobnVtLCBmbXQsIGFyZy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKG1heGlyYWRpb19yYWRpby5kZWJ1ZyA+PSBudW0pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJbWF4aXJhZGlvX3JhZGlvLm5hbWUsICMjIGFyZyk7IH0gd2hpbGUgKDApCiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKIAl7CkBAIC04MSwzMCArOTEsMjEgQEAKICNkZWZpbmUgRlJFUV9JRiAgICAgICAgIDE3MTIwMCAvKiAxMC43KjE2MDAwICAgKi8KICNkZWZpbmUgRlJFUV9TVEVQICAgICAgIDIwMCAgICAvKiAxMi41KjE2ICAgICAgKi8KIAotI2RlZmluZSBGUkVRMkJJVFMoeCkJKCgoICh1bnNpZ25lZCBpbnQpKHgpK0ZSRVFfSUYrKEZSRVFfU1RFUDw8MSkpXAotCQkJLyhGUkVRX1NURVA8PDIpKTw8MikgLyogKHg9PWZtaHoqMTYqMTAwMCkgLT4gYml0cyAqLworLyogKHg9PWZtaHoqMTYqMTAwMCkgLT4gYml0cyAqLworI2RlZmluZSBGUkVRMkJJVFMoeCkJKCgoICh1bnNpZ25lZCBpbnQpKHgpK0ZSRVFfSUYrKEZSRVFfU1RFUDw8MSkpIFwKKwkJCS8oRlJFUV9TVEVQPDwyKSk8PDIpCiAKICNkZWZpbmUgQklUUzJGUkVRKHgpCSgoeCkgKiBGUkVRX1NURVAgLSBGUkVRX0lGKQogCiAKLXN0YXRpYyBpbnQgcmFkaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1heGlyYWRpb19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKIAkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKLQkuaW9jdGwJCT0gcmFkaW9faW9jdGwsCisJLmlvY3RsICAgICAgICAgID0gdmlkZW9faW9jdGwyLAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogfTsKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIG1heGlyYWRpb19yYWRpbyA9Ci17Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJNYXhpIFJhZGlvIEZNMjAwMCByYWRpbyIsCi0JLnR5cGUJCT0gVklEX1RZUEVfVFVORVIsCi0JLmZvcHMgICAgICAgICAgID0gJm1heGlyYWRpb19mb3BzLAotfTsKIAogc3RhdGljIHN0cnVjdCByYWRpb19kZXZpY2UKIHsKQEAgLTExNiwxMiArMTE3LDE0IEBACiAJdW5zaWduZWQgbG9uZyBmcmVxOwogCiAJc3RydWN0IG11dGV4IGxvY2s7Ci19IHJhZGlvX3VuaXQgPSB7MCwgMCwgMCwgMCwgfTsKLQorfSByYWRpb191bml0ID0geworCS5tdXRlZCA9MSwKKwkuZnJlcSA9IEZSRVFfTE8sCit9OwogCiBzdGF0aWMgdm9pZCBvdXRiaXQodW5zaWduZWQgbG9uZyBiaXQsIF9fdTE2IGlvKQogewotCWlmKGJpdCAhPSAwKQorCWlmIChiaXQgIT0gMCkKIAkJewogCQkJb3V0YiggIHBvd2VyfHdyZW58ZGF0YSAgICAgLGlvKTsgdWRlbGF5KDQpOwogCQkJb3V0YiggIHBvd2VyfHdyZW58ZGF0YXxjbGsgLGlvKTsgdWRlbGF5KDQpOwpAQCAtMTM3LDE0ICsxNDAsMjAgQEAKIAogc3RhdGljIHZvaWQgdHVybl9wb3dlcihfX3UxNiBpbywgaW50IHApCiB7Ci0JaWYocCAhPSAwKSBvdXRiKHBvd2VyLCBpbyk7IGVsc2Ugb3V0YigwLGlvKTsKKwlpZiAocCAhPSAwKSB7CisJCWRwcmludGsoMSwgIlJhZGlvIHBvd2VyZWQgb25cbiIpOworCQlvdXRiKHBvd2VyLCBpbyk7CisJfSBlbHNlIHsKKwkJZHByaW50aygxLCAiUmFkaW8gcG93ZXJlZCBvZmZcbiIpOworCQlvdXRiKDAsaW8pOworCX0KIH0KIAotCi1zdGF0aWMgdm9pZCBzZXRfZnJlcShfX3UxNiBpbywgX191MzIgZGF0YSkKK3N0YXRpYyB2b2lkIHNldF9mcmVxKF9fdTE2IGlvLCBfX3UzMiBmcmVxKQogewogCXVuc2lnbmVkIGxvbmcgaW50IHNpOwogCWludCBibDsKKwlpbnQgZGF0YSA9IEZSRVEyQklUUyhmcmVxKTsKIAogCS8qIFRFQTU3NTcgc2hpZnQgcmVnaXN0ZXIgYml0cyAoc2VlIHBkZikgKi8KIApAQCAtMTYzLDE2MSArMTcyLDIyNSBAQAogCW91dGJpdCgwLGlvKTsgLy8gMTYgIHNlYXJjaCBsZXZlbAogCiAJc2kgPSAweDgwMDA7Ci0JZm9yKGJsID0gMTsgYmwgPD0gMTYgOyBibCsrKSB7IG91dGJpdChkYXRhICYgc2ksaW8pOyBzaSA+Pj0xOyB9CisJZm9yIChibCA9IDE7IGJsIDw9IDE2IDsgYmwrKykgeworCQlvdXRiaXQoZGF0YSAmIHNpLGlvKTsKKwkJc2kgPj49MTsKKwl9CiAKLQlvdXRiKHBvd2VyLGlvKTsKKwlkcHJpbnRrKDEsICJSYWRpbyBmcmVxIHNldCB0byAlZC4lMDJkIE1IelxuIiwKKwkJCQlmcmVxIC8gMTYwMDAsCisJCQkJZnJlcSAlIDE2MDAwICogMTAwIC8gMTYwMDApOworCisJdHVybl9wb3dlcihpbywgMSk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3N0ZXJlbyhfX3UxNiBpbykKIHsKLQlvdXRiKHBvd2VyLGlvKTsgdWRlbGF5KDQpOworCW91dGIocG93ZXIsaW8pOworCXVkZWxheSg0KTsKKwogCXJldHVybiAhKGluYihpbykgJiBtb19zdCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3R1bmUoX191MTYgaW8pCiB7Ci0Jb3V0Yihwb3dlcitjbGssaW8pOyB1ZGVsYXkoNCk7CisJb3V0Yihwb3dlcitjbGssaW8pOworCXVkZWxheSg0KTsKKwogCXJldHVybiAhKGluYihpbykgJiBtb19zdCk7CiB9CiAKIAotc3RhdGljIGlubGluZSBpbnQgcmFkaW9fZnVuY3Rpb24oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKK3sKKwlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLW1heGlyYWRpbyIsIHNpemVvZiAodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8iLCBzaXplb2YgKHYtPmNhcmQpKTsKKwlzcHJpbnRmKHYtPmJ1c19pbmZvLCJJU0EiKTsKKwl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX3R1bmVyICp2KQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZD1kZXYtPnByaXY7CiAKLQlzd2l0Y2goY21kKSB7Ci0JCWNhc2UgVklESU9DX1FVRVJZQ0FQOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2ID0gYXJnOwotCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKLQkJCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tbWF4aXJhZGlvIiwgc2l6ZW9mICh2LT5kcml2ZXIpKTsKLQkJCXN0cmxjcHkodi0+Y2FyZCwgIk1heGkgUmFkaW8gRk0yMDAwIHJhZGlvIiwgc2l6ZW9mICh2LT5jYXJkKSk7Ci0JCQlzcHJpbnRmKHYtPmJ1c19pbmZvLCJJU0EiKTsKLQkJCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCQkJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7CisJc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCi0JCQlpZiAodi0+aW5kZXggPiAwKQotCQkJCXJldHVybiAtRUlOVkFMOworCXYtPnJhbmdlbG93PUZSRVFfTE87CisJdi0+cmFuZ2VoaWdoPUZSRVFfSEk7CisJdi0+cnhzdWJjaGFucyA9VjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+Y2FwYWJpbGl0eT1WNEwyX1RVTkVSX0NBUF9MT1c7CisJaWYoZ2V0X3N0ZXJlbyhjYXJkLT5pbykpCisJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCWVsc2UKKwkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCXYtPnNpZ25hbD0weGZmZmYqZ2V0X3R1bmUoY2FyZC0+aW8pOwogCi0JCQltZW1zZXQodiwwLHNpemVvZigqdikpOwotCQkJc3RyY3B5KHYtPm5hbWUsICJGTSIpOwotCQkJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJcmV0dXJuIDA7Cit9CiAKLQkJCXYtPnJhbmdlbG93PUZSRVFfTE87Ci0JCQl2LT5yYW5nZWhpZ2g9RlJFUV9ISTsKLQkJCXYtPnJ4c3ViY2hhbnMgPVY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCQkJdi0+Y2FwYWJpbGl0eT1WNEwyX1RVTkVSX0NBUF9MT1c7Ci0JCQlpZihnZXRfc3RlcmVvKGNhcmQtPmlvKSkKLQkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJCWVsc2UKLQkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0JCQl2LT5zaWduYWw9MHhmZmZmKmdldF90dW5lKGNhcmQtPmlvKTsKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfdHVuZXIgKnYpCit7CisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCXJldHVybiAwOworfQogCi0JCQlpZiAodi0+aW5kZXggPiAwKQotCQkJCXJldHVybiAtRUlOVkFMOworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoYS0+aW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKwlzdHJjcHkoYS0+bmFtZSwgIkZNIik7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlyZXR1cm4gMDsKK30KIAotCQkJaWYgKGYtPmZyZXF1ZW5jeSA8IEZSRVFfTE8gfHwgZi0+ZnJlcXVlbmN5ID4gRlJFUV9ISSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKK3sKKwkqaSA9IDA7CiAKLQkJCWNhcmQtPmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JCQlzZXRfZnJlcShjYXJkLT5pbywgRlJFUTJCSVRTKGNhcmQtPmZyZXEpKTsKLQkJCW1zbGVlcCgxMjUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKwlyZXR1cm4gMDsKK30KIAotCQkJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JCQlmLT5mcmVxdWVuY3kgPSBjYXJkLT5mcmVxOworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCit7CisJaWYgKGkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKLQkJCWludCBpOworCXJldHVybiAwOworfQogCi0JCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCQkJcmV0dXJuICgwKTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKIAotCQkJc3dpdGNoIChjdHJsLT5pZCkgewotCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCQkJY3RybC0+dmFsdWU9Y2FyZC0+bXV0ZWQ7Ci0JCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJaWYgKGEtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCi0JCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJCQljYXJkLT5tdXRlZCA9IGN0cmwtPnZhbHVlOwotCQkJCQlpZihjYXJkLT5tdXRlZCkKLQkJCQkJCXR1cm5fcG93ZXIoY2FyZC0+aW8sIDApOwotCQkJCQllbHNlCi0JCQkJCQlzZXRfZnJlcShjYXJkLT5pbywgRlJFUTJCSVRTKGNhcmQtPmZyZXEpKTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCXJldHVybiAwOworfQogCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLAotCQkJCQkJCSAgcmFkaW9fZnVuY3Rpb24pOworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQ9ZGV2LT5wcml2OwogCisJaWYgKGYtPmZyZXF1ZW5jeSA8IEZSRVFfTE8gfHwgZi0+ZnJlcXVlbmN5ID4gRlJFUV9ISSkgeworCQlkcHJpbnRrKDEsICJyYWRpbyBmcmVxICglZC4lMDJkIE1Ieikgb3V0IG9mIHJhbmdlICglZC0lZClcbiIsCisJCQkJCWYtPmZyZXF1ZW5jeSAvIDE2MDAwLAorCQkJCQlmLT5mcmVxdWVuY3kgJSAxNjAwMCAqIDEwMCAvIDE2MDAwLAorCQkJCQlGUkVRX0xPIC8gMTYwMDAsIEZSRVFfSEkgLyAxNjAwMCk7CisKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJY2FyZC0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwlzZXRfZnJlcShjYXJkLT5pbywgY2FyZC0+ZnJlcSk7CisJbXNsZWVwKDEyNSk7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYWRpb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQ9ZGV2LT5wcml2OwotCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKLQlyZXQgPSB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHJhZGlvX2Z1bmN0aW9uKTsKLQltdXRleF91bmxvY2soJmNhcmQtPmxvY2spOwotCXJldHVybiByZXQ7CisJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJZi0+ZnJlcXVlbmN5ID0gY2FyZC0+ZnJlcTsKKworCWRwcmludGsoNCwgInJhZGlvIGZyZXEgaXMgJWQuJTAyZCBNSHoiLAorCQkJCWYtPmZyZXF1ZW5jeSAvIDE2MDAwLAorCQkJCWYtPmZyZXF1ZW5jeSAlIDE2MDAwICogMTAwIC8gMTYwMDApOworCisJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIkRpbWl0cm9tYW5vbGFraXMgQXBvc3RvbG9zLCBhcGRpbUBncmVjaWFuLm5ldCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWRpbyBkcml2ZXIgZm9yIHRoZSBHdWlsbGVtb3QgTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8uIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCWludCBpOwogCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKKwkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKKwkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksIHNpemVvZigqcWMpKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZD1kZXYtPnByaXY7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCWN0cmwtPnZhbHVlPWNhcmQtPm11dGVkOworCQkJcmV0dXJuICgwKTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQ9ZGV2LT5wcml2OworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQljYXJkLT5tdXRlZCA9IGN0cmwtPnZhbHVlOworCQkJaWYoY2FyZC0+bXV0ZWQpCisJCQkJdHVybl9wb3dlcihjYXJkLT5pbywgMCk7CisJCQllbHNlCisJCQkJc2V0X2ZyZXEoY2FyZC0+aW8sIGNhcmQtPmZyZXEpOworCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIG1heGlyYWRpb19yYWRpbyA9Cit7CisJLm93bmVyCQkgICAgPSBUSElTX01PRFVMRSwKKwkubmFtZQkJICAgID0gIk1heGkgUmFkaW8gRk0yMDAwIHJhZGlvIiwKKwkudHlwZQkJICAgID0gVklEX1RZUEVfVFVORVIsCisJLmZvcHMgICAgICAgICAgICAgICA9ICZtYXhpcmFkaW9fZm9wcywKKworCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19nX3R1bmVyICAgICA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfYXVkaW8gICAgID0gdmlkaW9jX2dfYXVkaW8sCisJLnZpZGlvY19zX2F1ZGlvICAgICA9IHZpZGlvY19zX2F1ZGlvLAorCS52aWRpb2NfZ19pbnB1dCAgICAgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2NfcXVlcnljdHJsICAgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgbWF4aXJhZGlvX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtMzM0LDcgKzQwNyw3IEBACiAJbXV0ZXhfaW5pdCgmcmFkaW9fdW5pdC5sb2NrKTsKIAltYXhpcmFkaW9fcmFkaW8ucHJpdiA9ICZyYWRpb191bml0OwogCi0JaWYodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZtYXhpcmFkaW9fcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucik9PS0xKSB7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmbWF4aXJhZGlvX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpPT0tMSkgewogCQlwcmludGsoInJhZGlvLW1heGlyYWRpbzogY2FuJ3QgcmVnaXN0ZXIgZGV2aWNlISIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb247CiAJfQpAQCAtMzg5LDMgKzQ2MiwxMCBAQAogCiBtb2R1bGVfaW5pdChtYXhpcmFkaW9fcmFkaW9faW5pdCk7CiBtb2R1bGVfZXhpdChtYXhpcmFkaW9fcmFkaW9fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRpbWl0cm9tYW5vbGFraXMgQXBvc3RvbG9zLCBhcGRpbUBncmVjaWFuLm5ldCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWRpbyBkcml2ZXIgZm9yIHRoZSBHdWlsbGVtb3QgTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZyxtYXhpcmFkaW9fcmFkaW8uZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCJhY3RpdmF0ZXMgZGVidWcgaW5mbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IDU3MzU3ZGIuLjdhNjEwNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTM0Miw3ICszNDIsNyBAQAogCiBjb25maWcgVklERU9fVklWSQogCXRyaXN0YXRlICJWaXJ0dWFsIFZpZGVvIERyaXZlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgIVNQQVJDMzIgJiYgIVNQQVJDNjQKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgIVNQQVJDMzIgJiYgIVNQQVJDNjQgJiYgUENJCiAJc2VsZWN0IFZJREVPX0JVRgogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IDliMWYzZjAuLjQ0Y2NhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtMTEzLDQgKzExMywzIEBACiBvYmotJChDT05GSUdfVklERU9fVklWSSkgKz0gdml2aS5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCi1leHRyYS1jZmxhZ3MtJChDT05GSUdfVklERU9fVjRMMV9DT01QQVQpICs9IC1EQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCmluZGV4IDIxZWJlOGYuLjZhZGRjNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCkBAIC0zMDcsNiArMzA3LDcgQEAKIAl7IDB4MDc3MTE0NjEsIEJUVFZfQk9BUkRfQVZEVkJUXzc3MSwgICAgIkFWZXJtZWRpYSBBdmVyVFYgRFZCLVQgNzcxIiB9LAogCXsgMHgwNzYxMTQ2MSwgQlRUVl9CT0FSRF9BVkRWQlRfNzYxLCAgICAiQXZlck1lZGlhIEF2ZXJUViBEVkItVCA3NjEiIH0sCiAJeyAweGRiMTAxOGFjLCBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURSwgICAgIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZSIgfSwKKwl7IDB4ZGIxMTE4YWMsIEJUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFLCAgICAiVWx0cmF2aWV3IERWQi1UIExpdGUiIH0sCiAJeyAweGQ1MDAxOGFjLCBCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9MSVRFLCAgICAiRFZpQ08gRnVzaW9uSERUViA1IExpdGUiIH0sCiAJeyAweDAwMjYxODIyLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULAkiRE5UViBMaXZlISBNaW5pICJ9LAogCkBAIC01NzgsMTQgKzU3OSw5IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MDFmZTAwLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCSNpZiAwCi0JCS8qIG9sZCAqLwotCQkuZ3Bpb211eCAJPSB7IDB4MDFjMDAwLCAwLCAweDAxODAwMCwgMHgwMTQwMDAsIDB4MDAyMDAwIH0sCi0JI2Vsc2UKIAkJLyogMjAwMy0xMC0yMCBieSAiQW50b24gQS4gQXJhcG92IiA8YXJhcG92QG1haWwucnU+ICovCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMDFlMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgwMDIwMDAsCi0JI2VuZGlmCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gLTEsCkBAIC04OTQsMTUgKzg5MCwxMCBAQAogCQkudHVuZXIJCT0gMCwKIAkJLnN2aHMJCT0gMiwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEsIDAgfSwgLyogVFYsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLwotCSNpZiAwCi0JCS5ncGlvbWFzawk9IDB4YzMzMDAwLAotCQkuZ3Bpb211eCAJPSB7IDB4NDIyMDAwLDB4MTAwMCwweDAwMDAsMHg2MjAwMDAsMHg4MDAwMDAgfSwKLQkjZWxzZQogCQkvKiBBbGV4YW5kZXIgVmFyYWtpbiA8YXZhcmFraW5AaG90bWFpbC5jb20+IFtzdGVyZW8gdmVyc2lvbl0gKi8KIAkJLmdwaW9tYXNrCT0gMHhiMzMwMDAsCiAJCS5ncGlvbXV4IAk9IHsgMHgxMjIwMDAsMHgxMDAwLDB4MDAwMCwweDYyMDAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHg4MDAwMDAsCi0JI2VuZGlmCiAJCS8qIEF1ZGlvIFJvdXRpbmcgZm9yICJXaW5GYXN0IDIwMDAgWFAiIChubyB0diBzdGVyZW8gISkKIAkJCWdwaW8yMyAtLSBoZWY0MDUyOm5FbmFibGUgKDB4ODAwMDAwKQogCQkJZ3BpbzEyIC0tIGhlZjQwNTI6QTEKQEAgLTE5MzcsMTEgKzE5MjgsNiBAQAogCQkudmlkZW9faW5wdXRzICAgPSA0LAogCQkuYXVkaW9faW5wdXRzICAgPSAxLAogCQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkjaWYgMCAvKiBUT0RPIC4uLiAqLwotCQkuc3ZocyAgICAgICAgICAgPSBPU1BSRVk1NDBfU1ZJRF9BTkFMT0csCi0JCS5tdXhzZWwgICAgICAgICA9IHsgICAgICAgW09TUFJFWTU0MF9DT01QX0FOQUxPR10gPSAyLAotCQkJCQlbT1NQUkVZNTQwX1NWSURfQU5BTE9HXSA9IDMsIH0sCi0JI2VuZGlmCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gLTEsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTE5NDksMTAgKzE5MzUsNiBAQAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAotCSNpZiAwIC8qIFRPRE8gLi4uICovCi0JCS5tdXhzZWxfaG9vayAgICA9IG9zcHJleV81NDBfbXV4c2VsLAotCQkucGljdHVyZV9ob29rICAgPSBvc3ByZXlfNTQwX3NldF9waWN0dXJlLAotCSNlbmRpZgogCX0sCiAKIAkJLyogLS0tLSBjYXJkIDB4NUMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjYyNyw5ICsyNjA5LDYgQEAKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvICAgICAgPSAwLAotCSNpZiAwCi0JCS5oYXNfcmVtb3RlICAgICA9IDEsCi0JI2VuZGlmCiAJfSwKIAlbQlRUVl9CT0FSRF9TVVBFUl9UVl0gPSB7CiAJCS8qIFJpY2sgQyA8Y3J5cHRkcmFnb29uQGdtYWlsLmNvbT4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCA0MWZkMDlkLi41NzIwYjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC05LDYgKzksMTAgQEAKICAgICBzb21lIHY0bDIgY29kZSBsaW5lcyBhcmUgdGFrZW4gZnJvbSBKdXN0aW4ncyBidHR2MiBkcml2ZXIgd2hpY2ggaXMKICAgICAoYykgMjAwMCBKdXN0aW4gU2Nob2VtYW4gPGp1c3RpbkBzdW50aWdlci5lZS51cC5hYy56YT4KIAorICAgIENyb3BwaW5nIGFuZCBvdmVyc2NhbiBzdXBwb3J0CisgICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IE1pY2hhZWwgSC4gU2NoaW1layA8bXNjaGltZWtAZ214LmF0PgorICAgIFNwb25zb3JlZCBieSBPUFEgU3lzdGVtcyBBQgorCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC02NCw2ICs2OCw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGlycV9kZWJ1ZzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2J1ZmZlcnMgPSA4Owogc3RhdGljIHVuc2lnbmVkIGludCBnYnVmc2l6ZSA9IDB4MjA4MDAwOworc3RhdGljIHVuc2lnbmVkIGludCByZXNldF9jcm9wID0gMTsKIAogc3RhdGljIGludCB2aWRlb19uciA9IC0xOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwpAQCAtMTAzLDYgKzEwOCw3IEBACiBtb2R1bGVfcGFyYW0odmJpX25yLCAgICAgICAgICAgIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oZ2J1ZmZlcnMsICAgICAgICAgIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oZ2J1ZnNpemUsICAgICAgICAgIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0ocmVzZXRfY3JvcCwgICAgICAgIGludCwgMDQ0NCk7CiAKIG1vZHVsZV9wYXJhbSh2NGwyLCAgICAgICAgICAgICAgaW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShiaWdlbmRpYW4sICAgICAgICAgaW50LCAwNjQ0KTsKQEAgLTEyOSw2ICsxMzUsOCBAQAogTU9EVUxFX1BBUk1fREVTQyhpcnFfZGVidWcsImlycSBoYW5kbGVyIGRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOwogTU9EVUxFX1BBUk1fREVTQyhnYnVmZmVycywibnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycy4gcmFuZ2UgMi0zMiwgZGVmYXVsdCA4Iik7CiBNT0RVTEVfUEFSTV9ERVNDKGdidWZzaXplLCJzaXplIG9mIHRoZSBjYXB0dXJlIGJ1ZmZlcnMsIGRlZmF1bHQgaXMgMHgyMDgwMDAiKTsKK01PRFVMRV9QQVJNX0RFU0MocmVzZXRfY3JvcCwicmVzZXQgY3JvcHBpbmcgcGFyYW1ldGVycyBhdCBvcGVuKCksIGRlZmF1bHQgIgorCQkgImlzIDEgKHllcykgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBhcHBsaWNhdGlvbnMiKTsKIE1PRFVMRV9QQVJNX0RFU0MoYXV0b211dGUsIm11dGUgYXVkaW8gb24gYmFkL21pc3NpbmcgdmlkZW8gc2lnbmFsLCBkZWZhdWx0IGlzIDEgKHllcykiKTsKIE1PRFVMRV9QQVJNX0RFU0MoY2hyb21hX2FnYywiZW5hYmxlcyB0aGUgQUdDIG9mIGNocm9tYSBzaWduYWwsIGRlZmF1bHQgaXMgMCAobm8pIik7CiBNT0RVTEVfUEFSTV9ERVNDKGFkY19jcnVzaCwiZW5hYmxlcyB0aGUgbHVtaW5hbmNlIEFEQyBjcnVzaCwgZGVmYXVsdCBpcyAxICh5ZXMpIik7CkBAIC0xOTIsNiArMjAwLDMzIEBACiAJfQogfTsKIAorLyogbWluaGRlbGF5eDEJZmlyc3QgdmlkZW8gcGl4ZWwgd2UgY2FuIGNhcHR1cmUgb24gYSBsaW5lIGFuZAorICAgaGRlbGF5eDEJc3RhcnQgb2YgYWN0aXZlIHZpZGVvLCBib3RoIHJlbGF0aXZlIHRvIHJpc2luZyBlZGdlIG9mCisJCS9IUkVTRVQgcHVsc2UgKDBIKSBpbiAxIC8gZkNMS3gxLgorICAgc3dpZHRoCXdpZHRoIG9mIGFjdGl2ZSB2aWRlbyBhbmQKKyAgIHRvdGFsd2lkdGgJdG90YWwgbGluZSB3aWR0aCwgYm90aCBpbiAxIC8gZkNMS3gxLgorICAgc3F3aWR0aAl0b3RhbCBsaW5lIHdpZHRoIGluIHNxdWFyZSBwaXhlbHMuCisgICB2ZGVsYXkJc3RhcnQgb2YgYWN0aXZlIHZpZGVvIGluIDIgKiBmaWVsZCBsaW5lcyByZWxhdGl2ZSB0bworCQl0cmFpbGluZyBlZGdlIG9mIC9WUkVTRVQgcHVsc2UgKFZERUxBWSByZWdpc3RlcikuCisgICBzaGVpZ2h0CWhlaWdodCBvZiBhY3RpdmUgdmlkZW8gaW4gMiAqIGZpZWxkIGxpbmVzLgorICAgdmlkZW9zdGFydDAJSVRVLVIgZnJhbWUgbGluZSBudW1iZXIgb2YgdGhlIGxpbmUgY29ycmVzcG9uZGluZworCQl0byB2ZGVsYXkgaW4gdGhlIGZpcnN0IGZpZWxkLiAqLworI2RlZmluZSBDUk9QQ0FQKG1pbmhkZWxheXgxLCBoZGVsYXl4MSwgc3dpZHRoLCB0b3RhbHdpZHRoLCBzcXdpZHRoLAkgXAorCQl2ZGVsYXksIHNoZWlnaHQsIHZpZGVvc3RhcnQwKQkJCQkgXAorCS5jcm9wY2FwLmJvdW5kcy5sZWZ0ID0gbWluaGRlbGF5eDEsCQkJCSBcCisJLyogKiAyIGJlY2F1c2UgdmVydGljYWxseSB3ZSBjb3VudCBmaWVsZCBsaW5lcyB0aW1lcyB0d28sICovCSBcCisJLyogZS5nLiAyMyAqIDIgdG8gMjMgKiAyICsgNTc2IGluIFBBTC1CR0hJIGRlZnJlY3QuICovCQkgXAorCS5jcm9wY2FwLmJvdW5kcy50b3AgPSAodmlkZW9zdGFydDApICogMiAtICh2ZGVsYXkpICsgTUlOX1ZERUxBWSwgXAorCS8qIDQgaXMgYSBzYWZldHkgbWFyZ2luIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuICovCQkgXAorCS5jcm9wY2FwLmJvdW5kcy53aWR0aCA9ICh0b3RhbHdpZHRoKSAtIChtaW5oZGVsYXl4MSkgLSA0LAkgXAorCS5jcm9wY2FwLmJvdW5kcy5oZWlnaHQgPSAoc2hlaWdodCkgKyAodmRlbGF5KSAtIE1JTl9WREVMQVksCSBcCisJLmNyb3BjYXAuZGVmcmVjdC5sZWZ0ID0gaGRlbGF5eDEsCQkJCSBcCisJLmNyb3BjYXAuZGVmcmVjdC50b3AgPSAodmlkZW9zdGFydDApICogMiwJCQkgXAorCS5jcm9wY2FwLmRlZnJlY3Qud2lkdGggPSBzd2lkdGgsCQkJCSBcCisJLmNyb3BjYXAuZGVmcmVjdC5oZWlnaHQgPSBzaGVpZ2h0LAkJCQkgXAorCS5jcm9wY2FwLnBpeGVsYXNwZWN0Lm51bWVyYXRvciA9IHRvdGFsd2lkdGgsCQkJIFwKKwkuY3JvcGNhcC5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IHNxd2lkdGgsCisKIGNvbnN0IHN0cnVjdCBidHR2X3R2bm9ybSBidHR2X3R2bm9ybXNbXSA9IHsKIAkvKiBQQUwtQkRHSEkgKi8KIAkvKiBtYXguIGFjdGl2ZSB2aWRlbyBpcyBhY3R1YWxseSA5MjIsIGJ1dCA5MjQgaXMgZGl2aXNpYmxlIGJ5IDQgYW5kIDMhICovCkBAIC0yMTAsMTEgKzI0NSwyNiBAQAogCQkuaGRlbGF5eDEgICAgICAgPSAxODYsCiAJCS5oYWN0aXZleDEgICAgICA9IDkyNCwKIAkJLnZkZWxheSAgICAgICAgID0gMHgyMCwKLQkJLnZiaXBhY2sgICAgICAgID0gMjU1LAorCQkudmJpcGFjayAgICAgICAgPSAyNTUsIC8qIG1pbiAoMjA0OCAvIDQsIDB4MWZmKSAmIDB4ZmYgKi8KIAkJLnNyYW0gICAgICAgICAgID0gMCwKIAkJLyogSVRVLVIgZnJhbWUgbGluZSBudW1iZXIgb2YgdGhlIGZpcnN0IFZCSSBsaW5lCi0JCSAgIHdlIGNhbiBjYXB0dXJlLCBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBmaWVsZC4gKi8KLQkJLnZiaXN0YXJ0CT0geyA3LDMyMCB9LAorCQkgICB3ZSBjYW4gY2FwdHVyZSwgb2YgdGhlIGZpcnN0IGFuZCBzZWNvbmQgZmllbGQuCisJCSAgIFRoZSBsYXN0IGxpbmUgaXMgZGV0ZXJtaW5lZCBieSBjcm9wY2FwLmJvdW5kcy4gKi8KKwkJLnZiaXN0YXJ0ICAgICAgID0geyA3LCAzMjAgfSwKKwkJQ1JPUENBUCgvKiBtaW5oZGVsYXl4MSAqLyA2OCwKKwkJCS8qIGhkZWxheXgxICovIDE4NiwKKwkJCS8qIFNob3VsZCBiZSAoNzY4ICogMTEzNSArIDk0NCAvIDIpIC8gOTQ0LgorCQkJICAgY3JvcGNhcC5kZWZyZWN0IGlzIHVzZWQgZm9yIGltYWdlIHdpZHRoCisJCQkgICBjaGVja3MsIHNvIHdlIGtlZXAgdGhlIG9sZCB2YWx1ZSA5MjQuICovCisJCQkvKiBzd2lkdGggKi8gOTI0LAorCQkJLyogdG90YWx3aWR0aCAqLyAxMTM1LAorCQkJLyogc3F3aWR0aCAqLyA5NDQsCisJCQkvKiB2ZGVsYXkgKi8gMHgyMCwKKwkJCS8qIHNoZWlnaHQgKi8gNTc2LAorCQkJLyogdmlkZW9zdGFydDAgKi8gMjMpCisJCS8qIGJ0ODc4IChhbmQgYnQ4NDg/KSBjYW4gY2FwdHVyZSBhbm90aGVyCisJCSAgIGxpbmUgYmVsb3cgYWN0aXZlIHZpZGVvLiAqLworCQkuY3JvcGNhcC5ib3VuZHMuaGVpZ2h0ID0gKDU3NiArIDIpICsgMHgyMCAtIDIsCiAJfSx7CiAJCS52NGwyX2lkICAgICAgICA9IFY0TDJfU1REX05UU0NfTSB8IFY0TDJfU1REX05UU0NfTV9LUiwKIAkJLm5hbWUgICAgICAgICAgID0gIk5UU0MiLApAQCAtMjI5LDkgKzI3OSwxOCBAQAogCQkuaGRlbGF5eDEgICAgICAgPSAxMjgsCiAJCS5oYWN0aXZleDEgICAgICA9IDkxMCwKIAkJLnZkZWxheSAgICAgICAgID0gMHgxYSwKLQkJLnZiaXBhY2sgICAgICAgID0gMTQ0LAorCQkudmJpcGFjayAgICAgICAgPSAxNDQsIC8qIG1pbiAoMTYwMCAvIDQsIDB4MWZmKSAmIDB4ZmYgKi8KIAkJLnNyYW0gICAgICAgICAgID0gMSwKIAkJLnZiaXN0YXJ0CT0geyAxMCwgMjczIH0sCisJCUNST1BDQVAoLyogbWluaGRlbGF5eDEgKi8gNjgsCisJCQkvKiBoZGVsYXl4MSAqLyAxMjgsCisJCQkvKiBTaG91bGQgYmUgKDY0MCAqIDkxMCArIDc4MCAvIDIpIC8gNzgwPyAqLworCQkJLyogc3dpZHRoICovIDc2OCwKKwkJCS8qIHRvdGFsd2lkdGggKi8gOTEwLAorCQkJLyogc3F3aWR0aCAqLyA3ODAsCisJCQkvKiB2ZGVsYXkgKi8gMHgxYSwKKwkJCS8qIHNoZWlnaHQgKi8gNDgwLAorCQkJLyogdmlkZW9zdGFydDAgKi8gMjMpCiAJfSx7CiAJCS52NGwyX2lkICAgICAgICA9IFY0TDJfU1REX1NFQ0FNLAogCQkubmFtZSAgICAgICAgICAgPSAiU0VDQU0iLApAQCAtMjQ5LDYgKzMwOCwxNCBAQAogCQkudmJpcGFjayAgICAgICAgPSAyNTUsCiAJCS5zcmFtICAgICAgICAgICA9IDAsIC8qIGxpa2UgUEFMLCBjb3JyZWN0PyAqLwogCQkudmJpc3RhcnQJPSB7IDcsIDMyMCB9LAorCQlDUk9QQ0FQKC8qIG1pbmhkZWxheXgxICovIDY4LAorCQkJLyogaGRlbGF5eDEgKi8gMTg2LAorCQkJLyogc3dpZHRoICovIDkyNCwKKwkJCS8qIHRvdGFsd2lkdGggKi8gMTEzNSwKKwkJCS8qIHNxd2lkdGggKi8gOTQ0LAorCQkJLyogdmRlbGF5ICovIDB4MjAsCisJCQkvKiBzaGVpZ2h0ICovIDU3NiwKKwkJCS8qIHZpZGVvc3RhcnQwICovIDIzKQogCX0sewogCQkudjRsMl9pZCAgICAgICAgPSBWNEwyX1NURF9QQUxfTmMsCiAJCS5uYW1lICAgICAgICAgICA9ICJQQUwtTmMiLApAQCAtMjY2LDYgKzMzMywxNCBAQAogCQkudmJpcGFjayAgICAgICAgPSAxNDQsCiAJCS5zcmFtICAgICAgICAgICA9IC0xLAogCQkudmJpc3RhcnQJPSB7IDcsIDMyMCB9LAorCQlDUk9QQ0FQKC8qIG1pbmhkZWxheXgxICovIDY4LAorCQkJLyogaGRlbGF5eDEgKi8gMTMwLAorCQkJLyogc3dpZHRoICovICg2NDAgKiA5MTAgKyA3ODAgLyAyKSAvIDc4MCwKKwkJCS8qIHRvdGFsd2lkdGggKi8gOTEwLAorCQkJLyogc3F3aWR0aCAqLyA3ODAsCisJCQkvKiB2ZGVsYXkgKi8gMHgxYSwKKwkJCS8qIHNoZWlnaHQgKi8gNTc2LAorCQkJLyogdmlkZW9zdGFydDAgKi8gMjMpCiAJfSx7CiAJCS52NGwyX2lkICAgICAgICA9IFY0TDJfU1REX1BBTF9NLAogCQkubmFtZSAgICAgICAgICAgPSAiUEFMLU0iLApAQCAtMjgzLDYgKzM1OCwxNCBAQAogCQkudmJpcGFjayAgICAgICAgPSAxNDQsCiAJCS5zcmFtICAgICAgICAgICA9IC0xLAogCQkudmJpc3RhcnQJPSB7IDEwLCAyNzMgfSwKKwkJQ1JPUENBUCgvKiBtaW5oZGVsYXl4MSAqLyA2OCwKKwkJCS8qIGhkZWxheXgxICovIDEzNSwKKwkJCS8qIHN3aWR0aCAqLyAoNjQwICogOTEwICsgNzgwIC8gMikgLyA3ODAsCisJCQkvKiB0b3RhbHdpZHRoICovIDkxMCwKKwkJCS8qIHNxd2lkdGggKi8gNzgwLAorCQkJLyogdmRlbGF5ICovIDB4MWEsCisJCQkvKiBzaGVpZ2h0ICovIDQ4MCwKKwkJCS8qIHZpZGVvc3RhcnQwICovIDIzKQogCX0sewogCQkudjRsMl9pZCAgICAgICAgPSBWNEwyX1NURF9QQUxfTiwKIAkJLm5hbWUgICAgICAgICAgID0gIlBBTC1OIiwKQEAgLTI5OSw3ICszODIsMTUgQEAKIAkJLnZkZWxheSAgICAgICAgID0gMHgyMCwKIAkJLnZiaXBhY2sgICAgICAgID0gMTQ0LAogCQkuc3JhbSAgICAgICAgICAgPSAtMSwKLQkJLnZiaXN0YXJ0CT0geyA3LCAzMjB9LAorCQkudmJpc3RhcnQgICAgICAgPSB7IDcsIDMyMCB9LAorCQlDUk9QQ0FQKC8qIG1pbmhkZWxheXgxICovIDY4LAorCQkJLyogaGRlbGF5eDEgKi8gMTg2LAorCQkJLyogc3dpZHRoICovICg3NjggKiAxMTM1ICsgOTQ0IC8gMikgLyA5NDQsCisJCQkvKiB0b3RhbHdpZHRoICovIDExMzUsCisJCQkvKiBzcXdpZHRoICovIDk0NCwKKwkJCS8qIHZkZWxheSAqLyAweDIwLAorCQkJLyogc2hlaWdodCAqLyA1NzYsCisJCQkvKiB2aWRlb3N0YXJ0MCAqLyAyMykKIAl9LHsKIAkJLnY0bDJfaWQgICAgICAgID0gVjRMMl9TVERfTlRTQ19NX0pQLAogCQkubmFtZSAgICAgICAgICAgPSAiTlRTQy1KUCIsCkBAIC0zMTYsNyArNDA3LDE1IEBACiAJCS52ZGVsYXkgICAgICAgICA9IDB4MTYsCiAJCS52YmlwYWNrICAgICAgICA9IDE0NCwKIAkJLnNyYW0gICAgICAgICAgID0gLTEsCi0JCS52YmlzdGFydAk9IHsxMCwgMjczfSwKKwkJLnZiaXN0YXJ0ICAgICAgID0geyAxMCwgMjczIH0sCisJCUNST1BDQVAoLyogbWluaGRlbGF5eDEgKi8gNjgsCisJCQkvKiBoZGVsYXl4MSAqLyAxMzUsCisJCQkvKiBzd2lkdGggKi8gKDY0MCAqIDkxMCArIDc4MCAvIDIpIC8gNzgwLAorCQkJLyogdG90YWx3aWR0aCAqLyA5MTAsCisJCQkvKiBzcXdpZHRoICovIDc4MCwKKwkJCS8qIHZkZWxheSAqLyAweDE2LAorCQkJLyogc2hlaWdodCAqLyA0ODAsCisJCQkvKiB2aWRlb3N0YXJ0MCAqLyAyMykKIAl9LHsKIAkJLyogdGhhdCBvbmUgaG9wZWZ1bGx5IHdvcmtzIHdpdGggdGhlIHN0cmFuZ2UgdGltaW5nCiAJCSAqIHdoaWNoIHZpZGVvIHJlY29yZGVycyBwcm9kdWNlIHdoZW4gcGxheWluZyBhIE5UU0MKQEAgLTMzOCw2ICs0MzcsMTQgQEAKIAkJLnZ0b3RhbCAgICAgICAgID0gNTI0LAogCQkuc3JhbSAgICAgICAgICAgPSAtMSwKIAkJLnZiaXN0YXJ0CT0geyAxMCwgMjczIH0sCisJCUNST1BDQVAoLyogbWluaGRlbGF5eDEgKi8gNjgsCisJCQkvKiBoZGVsYXl4MSAqLyAxODYsCisJCQkvKiBzd2lkdGggKi8gOTI0LAorCQkJLyogdG90YWx3aWR0aCAqLyAxMTM1LAorCQkJLyogc3F3aWR0aCAqLyA5NDQsCisJCQkvKiB2ZGVsYXkgKi8gMHgxYSwKKwkJCS8qIHNoZWlnaHQgKi8gNDgwLAorCQkJLyogdmlkZW9zdGFydDAgKi8gMjMpCiAJfQogfTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgQlRUVl9UVk5PUk1TID0gQVJSQVlfU0laRShidHR2X3R2bm9ybXMpOwpAQCAtNjc4LDI1ICs3ODUsODkgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiByZXNvdXJjZSBtYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCisvKgorICAgUkVTT1VSQ0VfICAgIGFsbG9jYXRlZCBieSAgICAgICAgICAgICAgICBmcmVlZCBieQorCisgICBWSURFT19SRUFEICAgYnR0dl9yZWFkIDEpICAgICAgICAgICAgICAgIGJ0dHZfcmVhZCAyKQorCisgICBWSURFT19TVFJFQU0gVklESU9DX1NUUkVBTU9OICAgICAgICAgICAgIFZJRElPQ19TVFJFQU1PRkYKKwkJIFZJRElPQ19RQlVGIDEpICAgICAgICAgICAgICBidHR2X3JlbGVhc2UKKwkJIFZJRElPQ01DQVBUVVJFIDEpCisKKyAgIE9WRVJMQVkJIFZJRElPQ0NBUFRVUkUgb24gICAgICAgICAgICBWSURJT0NDQVBUVVJFIG9mZgorCQkgVklESU9DX09WRVJMQVkgb24gICAgICAgICAgIFZJRElPQ19PVkVSTEFZIG9mZgorCQkgMykgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0dHZfcmVsZWFzZQorCisgICBWQkkJCSBWSURJT0NfU1RSRUFNT04gICAgICAgICAgICAgVklESU9DX1NUUkVBTU9GRgorCQkgVklESU9DX1FCVUYgMSkgICAgICAgICAgICAgIGJ0dHZfcmVsZWFzZQorCQkgYnR0dl9yZWFkLCBidHR2X3BvbGwgMSkgNCkKKworICAgMSkgVGhlIHJlc291cmNlIG11c3QgYmUgYWxsb2NhdGVkIHdoZW4gd2UgZW50ZXIgYnVmZmVyIHByZXBhcmUgZnVuY3Rpb25zCisgICAgICBhbmQgcmVtYWluIGFsbG9jYXRlZCB3aGlsZSBidWZmZXJzIGFyZSBpbiB0aGUgRE1BIHF1ZXVlLgorICAgMikgVGhpcyBpcyBhIHNpbmdsZSBmcmFtZSByZWFkLgorICAgMykgVklESU9DX1NfRkJVRiBhbmQgVklESU9DX1NfRk1UIChPVkVSTEFZKSBzdGlsbCB3b3JrIHdoZW4KKyAgICAgIFJFU09VUkNFX09WRVJMQVkgaXMgYWxsb2NhdGVkLgorICAgNCkgVGhpcyBpcyBhIGNvbnRpbnVvdXMgcmVhZCwgaW1wbGllcyBWSURJT0NfU1RSRUFNT04uCisKKyAgIE5vdGUgdGhpcyBkcml2ZXIgcGVybWl0cyB2aWRlbyBpbnB1dCBhbmQgc3RhbmRhcmQgY2hhbmdlcyByZWdhcmRsZXNzIGlmCisgICByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZC4KKyovCisKKyNkZWZpbmUgVkJJX1JFU09VUkNFUyAoUkVTT1VSQ0VfVkJJKQorI2RlZmluZSBWSURFT19SRVNPVVJDRVMgKFJFU09VUkNFX1ZJREVPX1JFQUQgfCBcCisJCQkgUkVTT1VSQ0VfVklERU9fU1RSRUFNIHwgXAorCQkJIFJFU09VUkNFX09WRVJMQVkpCisKIHN0YXRpYwogaW50IGNoZWNrX2FsbG9jX2J0cmVzKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCBidHR2X2ZoICpmaCwgaW50IGJpdCkKIHsKKwlpbnQgeGJpdHM7IC8qIG11dHVhbCBleGNsdXNpdmUgcmVzb3VyY2VzICovCisKIAlpZiAoZmgtPnJlc291cmNlcyAmIGJpdCkKIAkJLyogaGF2ZSBpdCBhbHJlYWR5IGFsbG9jYXRlZCAqLwogCQlyZXR1cm4gMTsKIAorCXhiaXRzID0gYml0OworCWlmIChiaXQgJiAoUkVTT1VSQ0VfVklERU9fUkVBRCB8IFJFU09VUkNFX1ZJREVPX1NUUkVBTSkpCisJCXhiaXRzIHw9IFJFU09VUkNFX1ZJREVPX1JFQUQgfCBSRVNPVVJDRV9WSURFT19TVFJFQU07CisKIAkvKiBpcyBpdCBmcmVlPyAqLwotCW11dGV4X2xvY2soJmJ0di0+cmVzbG9jayk7Ci0JaWYgKGJ0di0+cmVzb3VyY2VzICYgYml0KSB7CisJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKKwlpZiAoYnR2LT5yZXNvdXJjZXMgJiB4Yml0cykgewogCQkvKiBubywgc29tZW9uZSBlbHNlIHVzZXMgaXQgKi8KLQkJbXV0ZXhfdW5sb2NrKCZidHYtPnJlc2xvY2spOwotCQlyZXR1cm4gMDsKKwkJZ290byBmYWlsOwogCX0KKworCWlmICgoYml0ICYgVklERU9fUkVTT1VSQ0VTKQorCSAgICAmJiAwID09IChidHYtPnJlc291cmNlcyAmIFZJREVPX1JFU09VUkNFUykpIHsKKwkJLyogRG8gY3JvcCAtIHVzZSBjdXJyZW50LCBkb24ndCAtIHVzZSBkZWZhdWx0IHBhcmFtZXRlcnMuICovCisJCV9fczMyIHRvcCA9IGJ0di0+Y3JvcFshIWZoLT5kb19jcm9wXS5yZWN0LnRvcDsKKworCQlpZiAoYnR2LT52YmlfZW5kID4gdG9wKQorCQkJZ290byBmYWlsOworCisJCS8qIFdlIGNhbm5vdCBjYXB0dXJlIHRoZSBzYW1lIGxpbmUgYXMgdmlkZW8gYW5kIFZCSSBkYXRhLgorCQkgICBDbGFpbSBzY2FuIGxpbmVzIGNyb3BbXS5yZWN0LnRvcCB0byBib3R0b20uICovCisJCWJ0di0+Y3JvcF9zdGFydCA9IHRvcDsKKwl9IGVsc2UgaWYgKGJpdCAmIFZCSV9SRVNPVVJDRVMpIHsKKwkJX19zMzIgZW5kID0gZmgtPnZiaV9mbXQuZW5kOworCisJCWlmIChlbmQgPiBidHYtPmNyb3Bfc3RhcnQpCisJCQlnb3RvIGZhaWw7CisKKwkJLyogQ2xhaW0gc2NhbiBsaW5lcyBhYm92ZSBmaC0+dmJpX2ZtdC5lbmQuICovCisJCWJ0di0+dmJpX2VuZCA9IGVuZDsKKwl9CisKIAkvKiBpdCdzIGZyZWUsIGdyYWIgaXQgKi8KIAlmaC0+cmVzb3VyY2VzICB8PSBiaXQ7CiAJYnR2LT5yZXNvdXJjZXMgfD0gYml0OwotCW11dGV4X3VubG9jaygmYnR2LT5yZXNsb2NrKTsKKwltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJcmV0dXJuIDE7CisKKyBmYWlsOgorCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljCkBAIC03MTEsNiArODgyLDM1IEBACiAJcmV0dXJuIChidHYtPnJlc291cmNlcyAmIGJpdCk7CiB9CiAKKy8qIENhbGwgd2l0aCBidHYtPmxvY2sgZG93bi4gKi8KK3N0YXRpYyB2b2lkCitkaXNjbGFpbV92YmlfbGluZXMoc3RydWN0IGJ0dHYgKmJ0dikKK3sKKwlidHYtPnZiaV9lbmQgPSAwOworfQorCisvKiBDYWxsIHdpdGggYnR2LT5sb2NrIGRvd24uICovCitzdGF0aWMgdm9pZAorZGlzY2xhaW1fdmlkZW9fbGluZXMoc3RydWN0IGJ0dHYgKmJ0dikKK3sKKwljb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gKnR2bm9ybTsKKwl1OCBjcm9wOworCisJdHZub3JtID0gJmJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV07CisJYnR2LT5jcm9wX3N0YXJ0ID0gdHZub3JtLT5jcm9wY2FwLmJvdW5kcy50b3AKKwkJKyB0dm5vcm0tPmNyb3BjYXAuYm91bmRzLmhlaWdodDsKKworCS8qIFZCSSBjYXB0dXJpbmcgZW5kcyBhdCBWREVMQVksIHN0YXJ0IG9mIHZpZGVvIGNhcHR1cmluZywgbm8KKwkgICBtYXR0ZXIgaG93IG1hbnkgbGluZXMgdGhlIFZCSSBSSVNDIHByb2dyYW0gZXhwZWN0cy4gV2hlbiB2aWRlbworCSAgIGNhcHR1cmluZyBpcyBvZmYsIGl0IHNoYWxsIG5vIGxvbmdlciAicHJlZW1wdCIgVkJJIGNhcHR1cmluZywKKwkgICBzbyB3ZSBzZXQgVkRFTEFZIHRvIG1heGltdW0uICovCisJY3JvcCA9IGJ0cmVhZChCVDg0OF9FX0NST1ApIHwgMHhjMDsKKwlidHdyaXRlKGNyb3AsIEJUODQ4X0VfQ1JPUCk7CisJYnR3cml0ZSgweGZlLCBCVDg0OF9FX1ZERUxBWV9MTyk7CisJYnR3cml0ZShjcm9wLCBCVDg0OF9PX0NST1ApOworCWJ0d3JpdGUoMHhmZSwgQlQ4NDhfT19WREVMQVlfTE8pOworfQorCiBzdGF0aWMKIHZvaWQgZnJlZV9idHJlcyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgYnR0dl9maCAqZmgsIGludCBiaXRzKQogewpAQCAtNzE4LDEwICs5MTgsMTkgQEAKIAkJLyogdHJ5aW5nIHRvIGZyZWUgcmVzc291cmNlcyBub3QgYWxsb2NhdGVkIGJ5IHVzIC4uLiAqLwogCQlwcmludGsoImJ0dHY6IEJVRyEgKGJ0cmVzKVxuIik7CiAJfQotCW11dGV4X2xvY2soJmJ0di0+cmVzbG9jayk7CisJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKIAlmaC0+cmVzb3VyY2VzICAmPSB+Yml0czsKIAlidHYtPnJlc291cmNlcyAmPSB+Yml0czsKLQltdXRleF91bmxvY2soJmJ0di0+cmVzbG9jayk7CisKKwliaXRzID0gYnR2LT5yZXNvdXJjZXM7CisKKwlpZiAoMCA9PSAoYml0cyAmIFZJREVPX1JFU09VUkNFUykpCisJCWRpc2NsYWltX3ZpZGVvX2xpbmVzKGJ0dik7CisKKwlpZiAoMCA9PSAoYml0cyAmIFZCSV9SRVNPVVJDRVMpKQorCQlkaXNjbGFpbV92YmlfbGluZXMoYnR2KTsKKworCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTEwMzAsNiArMTIzOSwzNiBAQAogCQlidHR2X3RkYTk4ODBfc2V0bm9ybShidHYsYnR2LT50dm5vcm0pOwogfQogCitzdGF0aWMgdm9pZAorYnR0dl9jcm9wX2NhbGNfbGltaXRzKHN0cnVjdCBidHR2X2Nyb3AgKmMpCit7CisJLyogU2NhbGUgZmFjdG9yIG1pbi4gMToxLCBtYXguIDE2OjEuIE1pbi4gaW1hZ2Ugc2l6ZQorCSAgIDQ4IHggMzIuIFNjYWxlZCB3aWR0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4gKi8KKworCWlmICgxKSB7CisJCS8qIEZvciBidWcgY29tcGF0aWJpbGl0eSB3aXRoIFZJRElPQ0dDQVAgYW5kIGltYWdlCisJCSAgIHNpemUgY2hlY2tzIGluIGVhcmxpZXIgZHJpdmVyIHZlcnNpb25zLiAqLworCQljLT5taW5fc2NhbGVkX3dpZHRoID0gNDg7CisJCWMtPm1pbl9zY2FsZWRfaGVpZ2h0ID0gMzI7CisJfSBlbHNlIHsKKwkJYy0+bWluX3NjYWxlZF93aWR0aCA9CisJCQkobWF4KDQ4LCBjLT5yZWN0LndpZHRoID4+IDQpICsgMykgJiB+MzsKKwkJYy0+bWluX3NjYWxlZF9oZWlnaHQgPQorCQkJbWF4KDMyLCBjLT5yZWN0LmhlaWdodCA+PiA0KTsKKwl9CisKKwljLT5tYXhfc2NhbGVkX3dpZHRoICA9IGMtPnJlY3Qud2lkdGggJiB+MzsKKwljLT5tYXhfc2NhbGVkX2hlaWdodCA9IGMtPnJlY3QuaGVpZ2h0OworfQorCitzdGF0aWMgdm9pZAorYnR0dl9jcm9wX3Jlc2V0KHN0cnVjdCBidHR2X2Nyb3AgKmMsIGludCBub3JtKQoreworCWMtPnJlY3QgPSBidHR2X3R2bm9ybXNbbm9ybV0uY3JvcGNhcC5kZWZyZWN0OworCWJ0dHZfY3JvcF9jYWxjX2xpbWl0cyhjKTsKK30KKworLyogQ2FsbCB3aXRoIGJ0di0+bG9jayBkb3duLiAqLwogc3RhdGljIGludAogc2V0X3R2bm9ybShzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgbm9ybSkKIHsKQEAgLTEwMzgsOSArMTI3NywyNCBAQAogCWlmIChub3JtIDwgMCB8fCBub3JtID49IEJUVFZfVFZOT1JNUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlidHYtPnR2bm9ybSA9IG5vcm07CiAJdHZub3JtID0gJmJ0dHZfdHZub3Jtc1tub3JtXTsKIAorCWlmIChidHYtPnR2bm9ybSA8IDAgfHwKKwkgICAgYnR2LT50dm5vcm0gPj0gQlRUVl9UVk5PUk1TIHx8CisJICAgIDAgIT0gbWVtY21wKCZidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLmNyb3BjYXAsCisJCQkmdHZub3JtLT5jcm9wY2FwLAorCQkJc2l6ZW9mICh0dm5vcm0tPmNyb3BjYXApKSkgeworCQlidHR2X2Nyb3BfcmVzZXQoJmJ0di0+Y3JvcFswXSwgbm9ybSk7CisJCWJ0di0+Y3JvcFsxXSA9IGJ0di0+Y3JvcFswXTsgLyogY3VycmVudCA9IGRlZmF1bHQgKi8KKworCQlpZiAoMCA9PSAoYnR2LT5yZXNvdXJjZXMgJiBWSURFT19SRVNPVVJDRVMpKSB7CisJCQlidHYtPmNyb3Bfc3RhcnQgPSB0dm5vcm0tPmNyb3BjYXAuYm91bmRzLnRvcAorCQkJCSsgdHZub3JtLT5jcm9wY2FwLmJvdW5kcy5oZWlnaHQ7CisJCX0KKwl9CisKKwlidHYtPnR2bm9ybSA9IG5vcm07CisKIAlidHdyaXRlKHR2bm9ybS0+YWRlbGF5LCBCVDg0OF9BREVMQVkpOwogCWJ0d3JpdGUodHZub3JtLT5iZGVsYXksIEJUODQ4X0JERUxBWSk7CiAJYnRhb3IodHZub3JtLT5pZm9ybSx+KEJUODQ4X0lGT1JNX05PUk18QlQ4NDhfSUZPUk1fWFRCT1RIKSwKQEAgLTEwNTcsNiArMTMxMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIENhbGwgd2l0aCBidHYtPmxvY2sgZG93bi4gKi8KIHN0YXRpYyB2b2lkCiBzZXRfaW5wdXQoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQogewpAQCAtMTQ1OSwxMyArMTcxNCwxMyBAQAogCWJ0di0+bG9vcF9pcnEgfD0gMTsKIAlidHR2X3NldF9kbWEoYnR2LCAweDAzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidHYtPnNfbG9jayxmbGFncyk7Ci0JaWYgKE5VTEwgPT0gbmV3KQotCQlmcmVlX2J0cmVzKGJ0dixmaCxSRVNPVVJDRV9PVkVSTEFZKTsKIAlpZiAoTlVMTCAhPSBvbGQpIHsKIAkJZHByaW50aygic3dpdGNoX292ZXJsYXk6IG9sZD0lcCBzdGF0ZSBpcyAlZFxuIixvbGQsb2xkLT52Yi5zdGF0ZSk7CiAJCWJ0dHZfZG1hX2ZyZWUoJmZoLT5jYXAsYnR2LCBvbGQpOwogCQlrZnJlZShvbGQpOwogCX0KKwlpZiAoTlVMTCA9PSBuZXcpCisJCWZyZWVfYnRyZXMoYnR2LGZoLFJFU09VUkNFX09WRVJMQVkpOwogCWRwcmludGsoInN3aXRjaF9vdmVybGF5OiBkb25lXG4iKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTQ3OSw3ICsxNzM0LDEwIEBACiAJCQkgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAogCQkJICAgICAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKIHsKKwlzdHJ1Y3QgYnR0dl9maCAqZmggPSBxLT5wcml2X2RhdGE7CiAJaW50IHJlZG9fZG1hX3Jpc2MgPSAwOworCXN0cnVjdCBidHR2X2Nyb3AgYzsKKwlpbnQgbm9ybTsKIAlpbnQgcmM7CiAKIAkvKiBjaGVjayBzZXR0aW5ncyAqLwpAQCAtMTQ5MSwxMiArMTc0OSw1MiBAQAogCQlpZiAod2lkdGgqaGVpZ2h0ID4gYnVmLT52Yi5ic2l6ZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlidWYtPnZiLnNpemUgPSBidWYtPnZiLmJzaXplOwotCX0gZWxzZSB7Ci0JCWlmICh3aWR0aCAgPCA0OCB8fAotCQkgICAgaGVpZ2h0IDwgMzIgfHwKLQkJICAgIHdpZHRoICA+IGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uc3dpZHRoIHx8Ci0JCSAgICBoZWlnaHQgPiBidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLnNoZWlnaHQpCisKKwkJLyogTWFrZSBzdXJlIHR2bm9ybSBhbmQgdmJpX2VuZCByZW1haW4gY29uc2lzdGVudAorCQkgICB1bnRpbCB3ZSdyZSBkb25lLiAqLworCQltdXRleF9sb2NrKCZidHYtPmxvY2spOworCisJCW5vcm0gPSBidHYtPnR2bm9ybTsKKworCQkvKiBJbiB0aGlzIG1vZGUgY2FwdHVyaW5nIGFsd2F5cyBzdGFydHMgYXQgZGVmcmVjdC50b3AKKwkJICAgKGRlZmF1bHQgVkRFTEFZKSwgaWdub3JpbmcgY3JvcHBpbmcgcGFyYW1ldGVycy4gKi8KKwkJaWYgKGJ0di0+dmJpX2VuZCA+IGJ0dHZfdHZub3Jtc1tub3JtXS5jcm9wY2FwLmRlZnJlY3QudG9wKSB7CisJCQltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKKworCQljLnJlY3QgPSBidHR2X3R2bm9ybXNbbm9ybV0uY3JvcGNhcC5kZWZyZWN0OworCX0gZWxzZSB7CisJCW11dGV4X2xvY2soJmJ0di0+bG9jayk7CisKKwkJbm9ybSA9IGJ0di0+dHZub3JtOworCQljID0gYnR2LT5jcm9wWyEhZmgtPmRvX2Nyb3BdOworCisJCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKKworCQlpZiAod2lkdGggPCBjLm1pbl9zY2FsZWRfd2lkdGggfHwKKwkJICAgIHdpZHRoID4gYy5tYXhfc2NhbGVkX3dpZHRoIHx8CisJCSAgICBoZWlnaHQgPCBjLm1pbl9zY2FsZWRfaGVpZ2h0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3dpdGNoIChmaWVsZCkgeworCQljYXNlIFY0TDJfRklFTERfVE9QOgorCQljYXNlIFY0TDJfRklFTERfQk9UVE9NOgorCQljYXNlIFY0TDJfRklFTERfQUxURVJOQVRFOgorCQkJLyogYnR2LT5jcm9wIGNvdW50cyBmcmFtZSBsaW5lcy4gTWF4LiBzY2FsZQorCQkJICAgZmFjdG9yIGlzIDE2OjEgZm9yIGZyYW1lcywgODoxIGZvciBmaWVsZHMuICovCisJCQlpZiAoaGVpZ2h0ICogMiA+IGMubWF4X3NjYWxlZF9oZWlnaHQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJaWYgKGhlaWdodCA+IGMubWF4X3NjYWxlZF9oZWlnaHQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCiAJCWJ1Zi0+dmIuc2l6ZSA9ICh3aWR0aCAqIGhlaWdodCAqIGZtdC0+ZGVwdGgpID4+IDM7CiAJCWlmICgwICE9IGJ1Zi0+dmIuYmFkZHIgICYmICBidWYtPnZiLmJzaXplIDwgYnVmLT52Yi5zaXplKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTA1LDEyICsxODAzLDE3IEBACiAJLyogYWxsb2MgKyBmaWxsIHN0cnVjdCBidHR2X2J1ZmZlciAoaWYgY2hhbmdlZCkgKi8KIAlpZiAoYnVmLT52Yi53aWR0aCAhPSB3aWR0aCB8fCBidWYtPnZiLmhlaWdodCAhPSBoZWlnaHQgfHwKIAkgICAgYnVmLT52Yi5maWVsZCAhPSBmaWVsZCB8fAotCSAgICBidWYtPnR2bm9ybSAhPSBidHYtPnR2bm9ybSB8fCBidWYtPmZtdCAhPSBmbXQpIHsKKwkgICAgYnVmLT50dm5vcm0gIT0gbm9ybSB8fCBidWYtPmZtdCAhPSBmbXQgfHwKKwkgICAgYnVmLT5jcm9wLnRvcCAhPSBjLnJlY3QudG9wIHx8CisJICAgIGJ1Zi0+Y3JvcC5sZWZ0ICE9IGMucmVjdC5sZWZ0IHx8CisJICAgIGJ1Zi0+Y3JvcC53aWR0aCAhPSBjLnJlY3Qud2lkdGggfHwKKwkgICAgYnVmLT5jcm9wLmhlaWdodCAhPSBjLnJlY3QuaGVpZ2h0KSB7CiAJCWJ1Zi0+dmIud2lkdGggID0gd2lkdGg7CiAJCWJ1Zi0+dmIuaGVpZ2h0ID0gaGVpZ2h0OwogCQlidWYtPnZiLmZpZWxkICA9IGZpZWxkOwotCQlidWYtPnR2bm9ybSAgICA9IGJ0di0+dHZub3JtOworCQlidWYtPnR2bm9ybSAgICA9IG5vcm07CiAJCWJ1Zi0+Zm10ICAgICAgID0gZm10OworCQlidWYtPmNyb3AgICAgICA9IGMucmVjdDsKIAkJcmVkb19kbWFfcmlzYyA9IDE7CiAJfQogCkBAIC0xNTc3LDcgKzE4ODAsNyBAQAogCXN0cnVjdCBidHR2X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLHN0cnVjdCBidHR2X2J1ZmZlcix2Yik7CiAJc3RydWN0IGJ0dHZfZmggKmZoID0gcS0+cHJpdl9kYXRhOwogCi0JYnR0dl9kbWFfZnJlZSgmZmgtPmNhcCxmaC0+YnR2LGJ1Zik7CisJYnR0dl9kbWFfZnJlZShxLGZoLT5idHYsYnVmKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgYnR0dl92aWRlb19xb3BzID0gewpAQCAtMTkzOSwxMSArMjI0MiwxNzkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZXJpZnlfd2luZG93KGNvbnN0IHN0cnVjdCBidHR2X3R2bm9ybSAqdHZuLAotCQkJIHN0cnVjdCB2NGwyX3dpbmRvdyAqd2luLCBpbnQgZml4dXApCisvKiBHaXZlbiBjcm9wcGluZyBib3VuZGFyaWVzIGIgYW5kIHRoZSBzY2FsZWQgd2lkdGggYW5kIGhlaWdodCBvZiBhCisgICBzaW5nbGUgZmllbGQgb3IgZnJhbWUsIHdoaWNoIG11c3Qgbm90IGV4Y2VlZCBoYXJkd2FyZSBsaW1pdHMsIHRoaXMKKyAgIGZ1bmN0aW9uIGFkanVzdHMgdGhlIGNyb3BwaW5nIHBhcmFtZXRlcnMgYy4gKi8KK3N0YXRpYyB2b2lkCitidHR2X2Nyb3BfYWRqdXN0CShzdHJ1Y3QgYnR0dl9jcm9wICogICAgICAgICAgICAgYywKKwkJCSBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0ICoJYiwKKwkJCSBfX3MzMiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisJCQkgX19zMzIgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKKwkJCSBlbnVtIHY0bDJfZmllbGQgICAgICAgICAgICAgICAgZmllbGQpCit7CisJX19zMzIgZnJhbWVfaGVpZ2h0ID0gaGVpZ2h0IDw8ICFWNEwyX0ZJRUxEX0hBU19CT1RIKGZpZWxkKTsKKwlfX3MzMiBtYXhfbGVmdDsKKwlfX3MzMiBtYXhfdG9wOworCisJaWYgKHdpZHRoIDwgYy0+bWluX3NjYWxlZF93aWR0aCkgeworCQkvKiBNYXguIGhvci4gc2NhbGUgZmFjdG9yIDE2OjEuICovCisJCWMtPnJlY3Qud2lkdGggPSB3aWR0aCAqIDE2OworCX0gZWxzZSBpZiAod2lkdGggPiBjLT5tYXhfc2NhbGVkX3dpZHRoKSB7CisJCS8qIE1pbi4gaG9yLiBzY2FsZSBmYWN0b3IgMToxLiAqLworCQljLT5yZWN0LndpZHRoID0gd2lkdGg7CisKKwkJbWF4X2xlZnQgPSBiLT5sZWZ0ICsgYi0+d2lkdGggLSB3aWR0aDsKKwkJbWF4X2xlZnQgPSBtaW4obWF4X2xlZnQsIChfX3MzMikgTUFYX0hERUxBWSk7CisJCWlmIChjLT5yZWN0LmxlZnQgPiBtYXhfbGVmdCkKKwkJCWMtPnJlY3QubGVmdCA9IG1heF9sZWZ0OworCX0KKworCWlmIChoZWlnaHQgPCBjLT5taW5fc2NhbGVkX2hlaWdodCkgeworCQkvKiBNYXguIHZlcnQuIHNjYWxlIGZhY3RvciAxNjoxLCBzaW5nbGUgZmllbGRzIDg6MS4gKi8KKwkJYy0+cmVjdC5oZWlnaHQgPSBoZWlnaHQgKiAxNjsKKwl9IGVsc2UgaWYgKGZyYW1lX2hlaWdodCA+IGMtPm1heF9zY2FsZWRfaGVpZ2h0KSB7CisJCS8qIE1pbi4gdmVydC4gc2NhbGUgZmFjdG9yIDE6MS4KKwkJICAgVG9wIGFuZCBoZWlnaHQgY291bnQgZmllbGQgbGluZXMgdGltZXMgdHdvLiAqLworCQljLT5yZWN0LmhlaWdodCA9IChmcmFtZV9oZWlnaHQgKyAxKSAmIH4xOworCisJCW1heF90b3AgPSBiLT50b3AgKyBiLT5oZWlnaHQgLSBjLT5yZWN0LmhlaWdodDsKKwkJaWYgKGMtPnJlY3QudG9wID4gbWF4X3RvcCkKKwkJCWMtPnJlY3QudG9wID0gbWF4X3RvcDsKKwl9CisKKwlidHR2X2Nyb3BfY2FsY19saW1pdHMoYyk7Cit9CisKKy8qIFJldHVybnMgYW4gZXJyb3IgaWYgc2NhbGluZyB0byBhIGZyYW1lIG9yIHNpbmdsZSBmaWVsZCB3aXRoIHRoZSBnaXZlbgorICAgd2lkdGggYW5kIGhlaWdodCBpcyBub3QgcG9zc2libGUgd2l0aCB0aGUgY3VycmVudCBjcm9wcGluZyBwYXJhbWV0ZXJzCisgICBhbmQgd2lkdGggYWxpZ25lZCBhY2NvcmRpbmcgdG8gd2lkdGhfbWFzay4gSWYgYWRqdXN0X3NpemUgaXMgVFJVRSB0aGUKKyAgIGZ1bmN0aW9uIG1heSBhZGp1c3QgdGhlIHdpZHRoIGFuZC9vciBoZWlnaHQgaW5zdGVhZCwgcm91bmRpbmcgd2lkdGgKKyAgIHRvICh3aWR0aCArIHdpZHRoX2JpYXMpICYgd2lkdGhfbWFzay4gSWYgYWRqdXN0X2Nyb3AgaXMgVFJVRSBpdCBtYXkKKyAgIGFsc28gYWRqdXN0IHRoZSBjdXJyZW50IGNyb3BwaW5nIHBhcmFtZXRlcnMgdG8gZ2V0IGNsb3NlciB0byB0aGUKKyAgIGRlc2lyZWQgaW1hZ2Ugc2l6ZS4gKi8KK3N0YXRpYyBpbnQKK2xpbWl0X3NjYWxlZF9zaXplICAgICAgIChzdHJ1Y3QgYnR0dl9maCAqICAgICAgICAgICAgICAgZmgsCisJCQkgX19zMzIgKiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorCQkJIF9fczMyICogICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisJCQkgZW51bSB2NGwyX2ZpZWxkICAgICAgICAgICAgICAgIGZpZWxkLAorCQkJIHVuc2lnbmVkIGludAkJCXdpZHRoX21hc2ssCisJCQkgdW5zaWduZWQgaW50CQkJd2lkdGhfYmlhcywKKwkJCSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0X3NpemUsCisJCQkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdF9jcm9wKQoreworCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OworCWNvbnN0IHN0cnVjdCB2NGwyX3JlY3QgKmI7CisJc3RydWN0IGJ0dHZfY3JvcCAqYzsKKwlfX3MzMiBtaW5fd2lkdGg7CisJX19zMzIgbWluX2hlaWdodDsKKwlfX3MzMiBtYXhfd2lkdGg7CisJX19zMzIgbWF4X2hlaWdodDsKKwlpbnQgcmM7CisKKwlCVUdfT04oKGludCkgd2lkdGhfbWFzayA+PSAwIHx8CisJICAgICAgIHdpZHRoX2JpYXMgPj0gKHVuc2lnbmVkIGludCkgLXdpZHRoX21hc2spOworCisJLyogTWFrZSBzdXJlIHR2bm9ybSwgdmJpX2VuZCBhbmQgdGhlIGN1cnJlbnQgY3JvcHBpbmcgcGFyYW1ldGVycworCSAgIHJlbWFpbiBjb25zaXN0ZW50IHVudGlsIHdlJ3JlIGRvbmUuICovCisJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKKworCWIgPSAmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5jcm9wY2FwLmJvdW5kczsKKworCS8qIERvIGNyb3AgLSB1c2UgY3VycmVudCwgZG9uJ3QgLSB1c2UgZGVmYXVsdCBwYXJhbWV0ZXJzLiAqLworCWMgPSAmYnR2LT5jcm9wWyEhZmgtPmRvX2Nyb3BdOworCisJaWYgKGZoLT5kb19jcm9wCisJICAgICYmIGFkanVzdF9zaXplCisJICAgICYmIGFkanVzdF9jcm9wCisJICAgICYmICFsb2NrZWRfYnRyZXMoYnR2LCBWSURFT19SRVNPVVJDRVMpKSB7CisJCW1pbl93aWR0aCA9IDQ4OworCQltaW5faGVpZ2h0ID0gMzI7CisKKwkJLyogV2UgY2Fubm90IHNjYWxlIHVwLiBXaGVuIHRoZSBzY2FsZWQgaW1hZ2UgaXMgbGFyZ2VyCisJCSAgIHRoYW4gY3JvcC5yZWN0IHdlIGFkanVzdCB0aGUgY3JvcC5yZWN0IGFzIHJlcXVpcmVkCisJCSAgIGJ5IHRoZSBWNEwyIHNwZWMsIGhlbmNlIGNyb3BjYXAuYm91bmRzIGFyZSBvdXIgbGltaXQuICovCisJCW1heF93aWR0aCA9IG1pbihiLT53aWR0aCwgKF9fczMyKSBNQVhfSEFDVElWRSk7CisJCW1heF9oZWlnaHQgPSBiLT5oZWlnaHQ7CisKKwkJLyogV2UgY2Fubm90IGNhcHR1cmUgdGhlIHNhbWUgbGluZSBhcyB2aWRlbyBhbmQgVkJJIGRhdGEuCisJCSAgIE5vdGUgYnR2LT52YmlfZW5kIGlzIHJlYWxseSBhIG1pbmltdW0sIHNlZQorCQkgICBidHR2X3ZiaV90cnlfZm10KCkuICovCisJCWlmIChidHYtPnZiaV9lbmQgPiBiLT50b3ApIHsKKwkJCW1heF9oZWlnaHQgLT0gYnR2LT52YmlfZW5kIC0gYi0+dG9wOworCQkJcmMgPSAtRUJVU1k7CisJCQlpZiAobWluX2hlaWdodCA+IG1heF9oZWlnaHQpCisJCQkJZ290byBmYWlsOworCQl9CisJfSBlbHNlIHsKKwkJcmMgPSAtRUJVU1k7CisJCWlmIChidHYtPnZiaV9lbmQgPiBjLT5yZWN0LnRvcCkKKwkJCWdvdG8gZmFpbDsKKworCQltaW5fd2lkdGggID0gYy0+bWluX3NjYWxlZF93aWR0aDsKKwkJbWluX2hlaWdodCA9IGMtPm1pbl9zY2FsZWRfaGVpZ2h0OworCQltYXhfd2lkdGggID0gYy0+bWF4X3NjYWxlZF93aWR0aDsKKwkJbWF4X2hlaWdodCA9IGMtPm1heF9zY2FsZWRfaGVpZ2h0OworCisJCWFkanVzdF9jcm9wID0gMDsKKwl9CisKKwltaW5fd2lkdGggPSAobWluX3dpZHRoIC0gd2lkdGhfbWFzayAtIDEpICYgd2lkdGhfbWFzazsKKwltYXhfd2lkdGggPSBtYXhfd2lkdGggJiB3aWR0aF9tYXNrOworCisJLyogTWF4LiBzY2FsZSBmYWN0b3IgaXMgMTY6MSBmb3IgZnJhbWVzLCA4OjEgZm9yIGZpZWxkcy4gKi8KKwltaW5faGVpZ2h0ID0gbWluX2hlaWdodDsKKwkvKiBNaW4uIHNjYWxlIGZhY3RvciBpcyAxOjEuICovCisJbWF4X2hlaWdodCA+Pj0gIVY0TDJfRklFTERfSEFTX0JPVEgoZmllbGQpOworCisJaWYgKGFkanVzdF9zaXplKSB7CisJCSp3aWR0aCA9IGNsYW1wKCp3aWR0aCwgbWluX3dpZHRoLCBtYXhfd2lkdGgpOworCQkqaGVpZ2h0ID0gY2xhbXAoKmhlaWdodCwgbWluX2hlaWdodCwgbWF4X2hlaWdodCk7CisKKwkJLyogUm91bmQgYWZ0ZXIgY2xhbXBpbmcgdG8gYXZvaWQgb3ZlcmZsb3cuICovCisJCSp3aWR0aCA9ICgqd2lkdGggKyB3aWR0aF9iaWFzKSAmIHdpZHRoX21hc2s7CisKKwkJaWYgKGFkanVzdF9jcm9wKSB7CisJCQlidHR2X2Nyb3BfYWRqdXN0KGMsIGIsICp3aWR0aCwgKmhlaWdodCwgZmllbGQpOworCisJCQlpZiAoYnR2LT52YmlfZW5kID4gYy0+cmVjdC50b3ApIHsKKwkJCQkvKiBNb3ZlIHRoZSBjcm9wIHdpbmRvdyBvdXQgb2YgdGhlIHdheS4gKi8KKwkJCQljLT5yZWN0LnRvcCA9IGJ0di0+dmJpX2VuZDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXJjID0gLUVJTlZBTDsKKwkJaWYgKCp3aWR0aCAgPCBtaW5fd2lkdGggfHwKKwkJICAgICpoZWlnaHQgPCBtaW5faGVpZ2h0IHx8CisJCSAgICAqd2lkdGggID4gbWF4X3dpZHRoIHx8CisJCSAgICAqaGVpZ2h0ID4gbWF4X2hlaWdodCB8fAorCQkgICAgMCAhPSAoKndpZHRoICYgfndpZHRoX21hc2spKQorCQkJZ290byBmYWlsOworCX0KKworCXJjID0gMDsgLyogc3VjY2VzcyAqLworCisgZmFpbDoKKwltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGdpdmVuIG92ZXJsYXkgd2luZG93IGRpbWVuc2lvbnMgYXJlIG5vdAorICAgcG9zc2libGUgd2l0aCB0aGUgY3VycmVudCBjcm9wcGluZyBwYXJhbWV0ZXJzLiBJZiBhZGp1c3Rfc2l6ZSBpcworICAgVFJVRSB0aGUgZnVuY3Rpb24gbWF5IGFkanVzdCB0aGUgd2luZG93IHdpZHRoIGFuZC9vciBoZWlnaHQKKyAgIGluc3RlYWQsIGhvd2V2ZXIgaXQgYWx3YXlzIHJvdW5kcyB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBhbmQKKyAgIHdpZHRoIGFzIGJ0Y3hfYWxpZ24oKSBkb2VzLiBJZiBhZGp1c3RfY3JvcCBpcyBUUlVFIHRoZSBmdW5jdGlvbgorICAgbWF5IGFsc28gYWRqdXN0IHRoZSBjdXJyZW50IGNyb3BwaW5nIHBhcmFtZXRlcnMgdG8gZ2V0IGNsb3NlcgorICAgdG8gdGhlIGRlc2lyZWQgd2luZG93IHNpemUuICovCitzdGF0aWMgaW50Cit2ZXJpZnlfd2luZG93CQkoc3RydWN0IGJ0dHZfZmggKiAgICAgICAgICAgICAgIGZoLAorCQkJIHN0cnVjdCB2NGwyX3dpbmRvdyAqICAgICAgICAgICB3aW4sCisJCQkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdF9zaXplLAorCQkJIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RfY3JvcCkKIHsKIAllbnVtIHY0bDJfZmllbGQgZmllbGQ7Ci0JaW50IG1heHcsIG1heGg7CisJdW5zaWduZWQgaW50IHdpZHRoX21hc2s7CisJaW50IHJjOwogCiAJaWYgKHdpbi0+dy53aWR0aCAgPCA0OCB8fCB3aW4tPncuaGVpZ2h0IDwgMzIpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTk1MSwzMiArMjQyMiw1MiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZpZWxkID0gd2luLT5maWVsZDsKLQltYXh3ICA9IHR2bi0+c3dpZHRoOwotCW1heGggID0gdHZuLT5zaGVpZ2h0OwogCiAJaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7Ci0JCWZpZWxkID0gKHdpbi0+dy5oZWlnaHQgPiBtYXhoLzIpCisJCV9fczMyIGhlaWdodDI7CisKKwkJaGVpZ2h0MiA9IGZoLT5idHYtPmNyb3BbISFmaC0+ZG9fY3JvcF0ucmVjdC5oZWlnaHQgPj4gMTsKKwkJZmllbGQgPSAod2luLT53LmhlaWdodCA+IGhlaWdodDIpCiAJCQk/IFY0TDJfRklFTERfSU5URVJMQUNFRAogCQkJOiBWNEwyX0ZJRUxEX1RPUDsKIAl9CiAJc3dpdGNoIChmaWVsZCkgewogCWNhc2UgVjRMMl9GSUVMRF9UT1A6CiAJY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKLQkJbWF4aCA9IG1heGggLyAyOwotCQlicmVhazsKIAljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFmaXh1cCAmJiAod2luLT53LndpZHRoID4gbWF4dyB8fCB3aW4tPncuaGVpZ2h0ID4gbWF4aCkpCisJLyogNC1ieXRlIGFsaWdubWVudC4gKi8KKwlpZiAoTlVMTCA9PSBmaC0+b3ZmbXQpCiAJCXJldHVybiAtRUlOVkFMOworCXdpZHRoX21hc2sgPSB+MDsKKwlzd2l0Y2ggKGZoLT5vdmZtdC0+ZGVwdGgpIHsKKwljYXNlIDg6CisJY2FzZSAyNDoKKwkJd2lkdGhfbWFzayA9IH4zOworCQlicmVhazsKKwljYXNlIDE2OgorCQl3aWR0aF9tYXNrID0gfjE7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KIAotCWlmICh3aW4tPncud2lkdGggPiBtYXh3KQotCQl3aW4tPncud2lkdGggPSBtYXh3OwotCWlmICh3aW4tPncuaGVpZ2h0ID4gbWF4aCkKLQkJd2luLT53LmhlaWdodCA9IG1heGg7CisJd2luLT53LndpZHRoIC09IHdpbi0+dy5sZWZ0ICYgfndpZHRoX21hc2s7CisJd2luLT53LmxlZnQgPSAod2luLT53LmxlZnQgLSB3aWR0aF9tYXNrIC0gMSkgJiB3aWR0aF9tYXNrOworCisJcmMgPSBsaW1pdF9zY2FsZWRfc2l6ZShmaCwgJndpbi0+dy53aWR0aCwgJndpbi0+dy5oZWlnaHQsCisJCQkgICAgICAgZmllbGQsIHdpZHRoX21hc2ssCisJCQkgICAgICAgLyogd2lkdGhfYmlhczogcm91bmQgZG93biAqLyAwLAorCQkJICAgICAgIGFkanVzdF9zaXplLCBhZGp1c3RfY3JvcCk7CisJaWYgKDAgIT0gcmMpCisJCXJldHVybiByYzsKKwogCXdpbi0+ZmllbGQgPSBmaWVsZDsKIAlyZXR1cm4gMDsKIH0KQEAgLTE5OTEsNyArMjQ4Miw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghKGZoLT5vdmZtdC0+ZmxhZ3MgJiBGT1JNQVRfRkxBR1NfUEFDS0VEKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dmFsID0gdmVyaWZ5X3dpbmRvdygmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXSx3aW4sZml4dXApOworCXJldHZhbCA9IHZlcmlmeV93aW5kb3coZmgsIHdpbiwKKwkJCSAgICAgICAvKiBhZGp1c3Rfc2l6ZSAqLyBmaXh1cCwKKwkJCSAgICAgICAvKiBhZGp1c3RfY3JvcCAqLyBmaXh1cCk7CiAJaWYgKDAgIT0gcmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC0yMDQ4LDYgKzI1NDEsNyBAQAogCQlzdHJ1Y3QgYnR0dl9idWZmZXIgKm5ldzsKIAogCQluZXcgPSB2aWRlb2J1Zl9hbGxvYyhzaXplb2YoKm5ldykpOworCQluZXctPmNyb3AgPSBidHYtPmNyb3BbISFmaC0+ZG9fY3JvcF0ucmVjdDsKIAkJYnR0dl9vdmVybGF5X3Jpc2MoYnR2LCAmZmgtPm92LCBmaC0+b3ZmbXQsIG5ldyk7CiAJCXJldHZhbCA9IGJ0dHZfc3dpdGNoX292ZXJsYXkoYnR2LGZoLG5ldyk7CiAJfQpAQCAtMjA4MCw3ICsyNTc0LDcgQEAKIAogCXN3aXRjaCAoZmgtPnR5cGUpIHsKIAljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJcmVzID0gUkVTT1VSQ0VfVklERU87CisJCXJlcyA9IFJFU09VUkNFX1ZJREVPX1NUUkVBTTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgogCQlyZXMgPSBSRVNPVVJDRV9WQkk7CkBAIC0yMTM4LDcgKzI2MzIsNyBAQAogCQlmLT5mbXQud2luLmZpZWxkID0gZmgtPm92LmZpZWxkOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JCWJ0dHZfdmJpX2dldF9mbXQoZmgsZik7CisJCWJ0dHZfdmJpX2dldF9mbXQoZmgsICZmLT5mbXQudmJpKTsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMTQ2LDM1ICsyNjQwLDM1IEBACiB9CiAKIHN0YXRpYyBpbnQgYnR0dl90cnlfZm10KHN0cnVjdCBidHR2X2ZoICpmaCwgc3RydWN0IGJ0dHYgKmJ0diwKLQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKKwkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiwgaW50IGFkanVzdF9jcm9wKQogewogCXN3aXRjaCAoZi0+dHlwZSkgewogCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgogCXsKIAkJY29uc3Qgc3RydWN0IGJ0dHZfZm9ybWF0ICpmbXQ7CiAJCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKLQkJdW5zaWduZWQgaW50IG1heHcsbWF4aDsKKwkJX19zMzIgd2lkdGgsIGhlaWdodDsKKwkJaW50IHJjOwogCiAJCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CiAJCWlmIChOVUxMID09IGZtdCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIGZpeHVwIGZvcm1hdCAqLwotCQltYXh3ICA9IGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uc3dpZHRoOwotCQltYXhoICA9IGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uc2hlaWdodDsKIAkJZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCQlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpCi0JCQlmaWVsZCA9IChmLT5mbXQucGl4LmhlaWdodCA+IG1heGgvMikKKwkJaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7CisJCQlfX3MzMiBoZWlnaHQyOworCisJCQloZWlnaHQyID0gYnR2LT5jcm9wWyEhZmgtPmRvX2Nyb3BdLnJlY3QuaGVpZ2h0ID4+IDE7CisJCQlmaWVsZCA9IChmLT5mbXQucGl4LmhlaWdodCA+IGhlaWdodDIpCiAJCQkJPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKIAkJCQk6IFY0TDJfRklFTERfQk9UVE9NOworCQl9CiAJCWlmIChWNEwyX0ZJRUxEX1NFUV9CVCA9PSBmaWVsZCkKIAkJCWZpZWxkID0gVjRMMl9GSUVMRF9TRVFfVEI7CiAJCXN3aXRjaCAoZmllbGQpIHsKIAkJY2FzZSBWNEwyX0ZJRUxEX1RPUDoKIAkJY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKIAkJY2FzZSBWNEwyX0ZJRUxEX0FMVEVSTkFURToKLQkJCW1heGggPSBtYXhoLzI7Ci0JCQlicmVhazsKIAkJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0ZJRUxEX1NFUV9UQjoKQEAgLTIxODUsMjggKzI2NzksMjkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKKwkJd2lkdGggPSBmLT5mbXQucGl4LndpZHRoOworCQloZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKworCQlyYyA9IGxpbWl0X3NjYWxlZF9zaXplKGZoLCAmd2lkdGgsICZoZWlnaHQsIGZpZWxkLAorCQkJCSAgICAgICAvKiB3aWR0aF9tYXNrOiA0IHBpeGVscyAqLyB+MywKKwkJCQkgICAgICAgLyogd2lkdGhfYmlhczogbmVhcmVzdCAqLyAyLAorCQkJCSAgICAgICAvKiBhZGp1c3Rfc2l6ZSAqLyAxLAorCQkJCSAgICAgICBhZGp1c3RfY3JvcCk7CisJCWlmICgwICE9IHJjKQorCQkJcmV0dXJuIHJjOworCiAJCS8qIHVwZGF0ZSBkYXRhIGZvciB0aGUgYXBwbGljYXRpb24gKi8KIAkJZi0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOwotCQlpZiAoZi0+Zm10LnBpeC53aWR0aCAgPCA0OCkKLQkJCWYtPmZtdC5waXgud2lkdGggID0gNDg7Ci0JCWlmIChmLT5mbXQucGl4LmhlaWdodCA8IDMyKQotCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSAzMjsKLQkJaWYgKGYtPmZtdC5waXgud2lkdGggID4gbWF4dykKLQkJCWYtPmZtdC5waXgud2lkdGggPSBtYXh3OwotCQlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPiBtYXhoKQotCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSBtYXhoOwotCQlwaXhfZm9ybWF0X3NldF9zaXplICgmZi0+Zm10LnBpeCwgZm10LAotCQkJCSAgICAgZi0+Zm10LnBpeC53aWR0aCAmIH4zLAotCQkJCSAgICAgZi0+Zm10LnBpeC5oZWlnaHQpOworCQlwaXhfZm9ybWF0X3NldF9zaXplKCZmLT5mbXQucGl4LCBmbXQsIHdpZHRoLCBoZWlnaHQpOwogCiAJCXJldHVybiAwOwogCX0KIAljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJcmV0dXJuIHZlcmlmeV93aW5kb3coJmJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0sCi0JCQkJICAgICAmZi0+Zm10LndpbiwgMSk7CisJCXJldHVybiB2ZXJpZnlfd2luZG93KGZoLCAmZi0+Zm10LndpbiwKKwkJCQkgICAgIC8qIGFkanVzdF9zaXplICovIDEsCisJCQkJICAgICAvKiBhZGp1c3RfY3JvcCAqLyAwKTsKIAljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JCWJ0dHZfdmJpX3RyeV9mbXQoZmgsZik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gYnR0dl92YmlfdHJ5X2ZtdChmaCwgJmYtPmZtdC52YmkpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIyMjUsNyArMjcyMCw3IEBACiAJCXJldHZhbCA9IGJ0dHZfc3dpdGNoX3R5cGUoZmgsZi0+dHlwZSk7CiAJCWlmICgwICE9IHJldHZhbCkKIAkJCXJldHVybiByZXR2YWw7Ci0JCXJldHZhbCA9IGJ0dHZfdHJ5X2ZtdChmaCxidHYsZik7CisJCXJldHZhbCA9IGJ0dHZfdHJ5X2ZtdChmaCxidHYsZiwgLyogYWRqdXN0X2Nyb3AgKi8gMSk7CiAJCWlmICgwICE9IHJldHZhbCkKIAkJCXJldHVybiByZXR2YWw7CiAJCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CkBAIC0yMjU0LDEyICsyNzQ5LDcgQEAKIAkJcmV0dmFsID0gYnR0dl9zd2l0Y2hfdHlwZShmaCxmLT50eXBlKTsKIAkJaWYgKDAgIT0gcmV0dmFsKQogCQkJcmV0dXJuIHJldHZhbDsKLQkJaWYgKGxvY2tlZF9idHJlcyhmaC0+YnR2LCBSRVNPVVJDRV9WQkkpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQkJYnR0dl92YmlfdHJ5X2ZtdChmaCxmKTsKLQkJYnR0dl92Ymlfc2V0bGluZXMoZmgsYnR2LGYtPmZtdC52YmkuY291bnRbMF0pOwotCQlidHR2X3ZiaV9nZXRfZm10KGZoLGYpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGJ0dHZfdmJpX3NldF9mbXQoZmgsICZmLT5mbXQudmJpKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yNTE3LDYgKzMwMDcsNyBAQAogCQlpZiAoKm9uKSB7CiAJCQlmaC0+b3YudHZub3JtID0gYnR2LT50dm5vcm07CiAJCQluZXcgPSB2aWRlb2J1Zl9hbGxvYyhzaXplb2YoKm5ldykpOworCQkJbmV3LT5jcm9wID0gYnR2LT5jcm9wWyEhZmgtPmRvX2Nyb3BdLnJlY3Q7CiAJCQlidHR2X292ZXJsYXlfcmlzYyhidHYsICZmaC0+b3YsIGZoLT5vdmZtdCwgbmV3KTsKIAkJfSBlbHNlIHsKIAkJCW5ldyA9IE5VTEw7CkBAIC0yNTUxLDEwICszMDQyLDE2IEBACiAJCXN0cnVjdCB2aWRlb19tbWFwICp2bSA9IGFyZzsKIAkJc3RydWN0IGJ0dHZfYnVmZmVyICpidWY7CiAJCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwkJX19zMzIgaGVpZ2h0MjsKKwkJaW50IHJlczsKIAogCQlpZiAodm0tPmZyYW1lID49IFZJREVPX01BWF9GUkFNRSkKIAkJCXJldHVybiAtRUlOVkFMOwogCisJCXJlcyA9IGJ0dHZfcmVzb3VyY2UoZmgpOworCQlpZiAoIWNoZWNrX2FsbG9jX2J0cmVzKGJ0diwgZmgsIHJlcykpCisJCQlyZXR1cm4gLUVCVVNZOworCiAJCW11dGV4X2xvY2soJmZoLT5jYXAubG9jayk7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWJ1ZiA9IChzdHJ1Y3QgYnR0dl9idWZmZXIgKilmaC0+Y2FwLmJ1ZnNbdm0tPmZyYW1lXTsKQEAgLTI1NjYsNyArMzA2Myw4IEBACiAJCSAgICBidWYtPnZiLnN0YXRlID09IFNUQVRFX0FDVElWRSkKIAkJCWdvdG8gZmhfdW5sb2NrX2FuZF9yZXR1cm47CiAKLQkJZmllbGQgPSAodm0tPmhlaWdodCA+IGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uc2hlaWdodC8yKQorCQloZWlnaHQyID0gYnR2LT5jcm9wWyEhZmgtPmRvX2Nyb3BdLnJlY3QuaGVpZ2h0ID4+IDE7CisJCWZpZWxkID0gKHZtLT5oZWlnaHQgPiBoZWlnaHQyKQogCQkJPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKIAkJCTogVjRMMl9GSUVMRF9CT1RUT007CiAJCXJldHZhbCA9IGJ0dHZfcHJlcGFyZV9idWZmZXIoJmZoLT5jYXAsYnR2LGJ1ZiwKQEAgLTI2MTMsNTQgKzMxMTEsMTcgQEAKIAl9CiAKIAljYXNlIFZJRElPQ0dWQklGTVQ6Ci0JewotCQlzdHJ1Y3QgdmJpX2Zvcm1hdCAqZm10ID0gKHZvaWQgKikgYXJnOwotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10MjsKLQogCQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgewogCQkJcmV0dmFsID0gYnR0dl9zd2l0Y2hfdHlwZShmaCxWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKTsKIAkJCWlmICgwICE9IHJldHZhbCkKIAkJCQlyZXR1cm4gcmV0dmFsOwogCQl9Ci0JCWJ0dHZfdmJpX2dldF9mbXQoZmgsICZmbXQyKTsKIAotCQltZW1zZXQoZm10LDAsc2l6ZW9mKCpmbXQpKTsKLQkJZm10LT5zYW1wbGluZ19yYXRlICAgID0gZm10Mi5mbXQudmJpLnNhbXBsaW5nX3JhdGU7Ci0JCWZtdC0+c2FtcGxlc19wZXJfbGluZSA9IGZtdDIuZm10LnZiaS5zYW1wbGVzX3Blcl9saW5lOwotCQlmbXQtPnNhbXBsZV9mb3JtYXQgICAgPSBWSURFT19QQUxFVFRFX1JBVzsKLQkJZm10LT5zdGFydFswXSAgICAgICAgID0gZm10Mi5mbXQudmJpLnN0YXJ0WzBdOwotCQlmbXQtPmNvdW50WzBdICAgICAgICAgPSBmbXQyLmZtdC52YmkuY291bnRbMF07Ci0JCWZtdC0+c3RhcnRbMV0gICAgICAgICA9IGZtdDIuZm10LnZiaS5zdGFydFsxXTsKLQkJZm10LT5jb3VudFsxXSAgICAgICAgID0gZm10Mi5mbXQudmJpLmNvdW50WzFdOwotCQlpZiAoZm10Mi5mbXQudmJpLmZsYWdzICYgVjRMMl9WQklfVU5TWU5DKQotCQkJZm10LT5mbGFncyAgIHw9IFZCSV9VTlNZTkM7Ci0JCWlmIChmbXQyLmZtdC52YmkuZmxhZ3MgJiBWNEwyX1ZCSV9JTlRFUkxBQ0VEKQotCQkJZm10LT5mbGFncyAgIHw9IFZCSV9JTlRFUkxBQ0VEOwotCQlyZXR1cm4gMDsKLQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCiAJY2FzZSBWSURJT0NTVkJJRk1UOgotCXsKLQkJc3RydWN0IHZiaV9mb3JtYXQgKmZtdCA9ICh2b2lkICopIGFyZzsKLQkJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDI7Ci0KLQkJcmV0dmFsID0gYnR0dl9zd2l0Y2hfdHlwZShmaCxWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKTsKLQkJaWYgKDAgIT0gcmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKLQkJYnR0dl92YmlfZ2V0X2ZtdChmaCwgJmZtdDIpOwotCi0JCWlmIChmbXQtPnNhbXBsaW5nX3JhdGUgICAgIT0gZm10Mi5mbXQudmJpLnNhbXBsaW5nX3JhdGUgICAgIHx8Ci0JCSAgICBmbXQtPnNhbXBsZXNfcGVyX2xpbmUgIT0gZm10Mi5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgIHx8Ci0JCSAgICBmbXQtPnNhbXBsZV9mb3JtYXQgICAgIT0gVklERU9fUEFMRVRURV9SQVcgICAgICAgICAgICAgIHx8Ci0JCSAgICBmbXQtPnN0YXJ0WzBdICAgICAgICAgIT0gZm10Mi5mbXQudmJpLnN0YXJ0WzBdICAgICAgICAgIHx8Ci0JCSAgICBmbXQtPnN0YXJ0WzFdICAgICAgICAgIT0gZm10Mi5mbXQudmJpLnN0YXJ0WzFdICAgICAgICAgIHx8Ci0JCSAgICBmbXQtPmNvdW50WzBdICAgICAgICAgIT0gZm10LT5jb3VudFsxXSAgICAgICAgICAgICAgICAgIHx8Ci0JCSAgICBmbXQtPmNvdW50WzBdICAgICAgICAgPCAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8Ci0JCSAgICBmbXQtPmNvdW50WzBdICAgICAgICAgPiAgMzIgLyogVkJJX01BWExJTkVTICovKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJYnR0dl92Ymlfc2V0bGluZXMoZmgsYnR2LGZtdC0+Y291bnRbMF0pOwotCQlyZXR1cm4gMDsKLQl9CisJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSwgZmlsZSwgY21kLAorCQkJCQkJICBhcmcsIGJ0dHZfZG9faW9jdGwpOwogCiAJY2FzZSBCVFRWX1ZFUlNJT046CiAJY2FzZSBWSURJT0NHRlJFUToKQEAgLTI3NTMsNyArMzIxNCw3IEBACiAJY2FzZSBWSURJT0NfVFJZX0ZNVDoKIAl7CiAJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQkJcmV0dXJuIGJ0dHZfdHJ5X2ZtdChmaCxidHYsZik7CisJCXJldHVybiBidHR2X3RyeV9mbXQoZmgsYnR2LGYsIC8qIGFkanVzdF9jcm9wICovIDApOwogCX0KIAljYXNlIFZJRElPQ19HX0ZNVDoKIAl7CkBAIC0yNzkyLDE2ICszMjUzLDIzIEBACiAJCWlmICgwID09IChmbXQtPmZsYWdzICYgRk9STUFUX0ZMQUdTX1BBQ0tFRCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQltdXRleF9sb2NrKCZmaC0+Y2FwLmxvY2spOwogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlpZiAoZmItPmZsYWdzICYgVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWSkgewotCQkJaWYgKGZiLT5mbXQud2lkdGggPiBidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLnN3aWR0aCkKLQkJCQlnb3RvIGZoX3VubG9ja19hbmRfcmV0dXJuOwotCQkJaWYgKGZiLT5mbXQuaGVpZ2h0ID4gYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5zaGVpZ2h0KQotCQkJCWdvdG8gZmhfdW5sb2NrX2FuZF9yZXR1cm47CisJCQlfX3MzMiB3aWR0aCA9IGZiLT5mbXQud2lkdGg7CisJCQlfX3MzMiBoZWlnaHQgPSBmYi0+Zm10LmhlaWdodDsKKworCQkJcmV0dmFsID0gbGltaXRfc2NhbGVkX3NpemUoZmgsICZ3aWR0aCwgJmhlaWdodCwKKwkJCQkJCSAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCQkJCSAgIC8qIHdpZHRoX21hc2sgKi8gfjMsCisJCQkJCQkgICAvKiB3aWR0aF9iaWFzICovIDIsCisJCQkJCQkgICAvKiBhZGp1c3Rfc2l6ZSAqLyAwLAorCQkJCQkJICAgLyogYWRqdXN0X2Nyb3AgKi8gMCk7CisJCQlpZiAoMCAhPSByZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKIAkJfQogCiAJCS8qIG9rLCBhY2NlcHQgaXQgKi8KKwkJbXV0ZXhfbG9jaygmZmgtPmNhcC5sb2NrKTsKIAkJYnR2LT5mYnVmLmJhc2UgICAgICAgPSBmYi0+YmFzZTsKIAkJYnR2LT5mYnVmLmZtdC53aWR0aCAgPSBmYi0+Zm10LndpZHRoOwogCQlidHYtPmZidWYuZm10LmhlaWdodCA9IGZiLT5mbXQuaGVpZ2h0OwpAQCAtMjgyOCw2ICszMjk2LDcgQEAKIAkJCQlzdHJ1Y3QgYnR0dl9idWZmZXIgKm5ldzsKIAogCQkJCW5ldyA9IHZpZGVvYnVmX2FsbG9jKHNpemVvZigqbmV3KSk7CisJCQkJbmV3LT5jcm9wID0gYnR2LT5jcm9wWyEhZmgtPmRvX2Nyb3BdLnJlY3Q7CiAJCQkJYnR0dl9vdmVybGF5X3Jpc2MoYnR2LCZmaC0+b3YsZmgtPm92Zm10LG5ldyk7CiAJCQkJcmV0dmFsID0gYnR0dl9zd2l0Y2hfb3ZlcmxheShidHYsZmgsbmV3KTsKIAkJCX0KQEAgLTI4NDMsNyArMzMxMiwxMyBAQAogCQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoYnR0dl9xdWV1ZShmaCksYXJnKTsKIAogCWNhc2UgVklESU9DX1FCVUY6CisJeworCQlpbnQgcmVzID0gYnR0dl9yZXNvdXJjZShmaCk7CisKKwkJaWYgKCFjaGVja19hbGxvY19idHJlcyhidHYsIGZoLCByZXMpKQorCQkJcmV0dXJuIC1FQlVTWTsKIAkJcmV0dXJuIHZpZGVvYnVmX3FidWYoYnR0dl9xdWV1ZShmaCksYXJnKTsKKwl9CiAKIAljYXNlIFZJRElPQ19EUUJVRjoKIAkJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKGJ0dHZfcXVldWUoZmgpLGFyZywKQEAgLTI5NDIsNiArMzQxNywxMjIgQEAKIAkJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoJmJ0di0+cHJpbywgJmZoLT5wcmlvLCAqcHJpbyk7CiAJfQogCisJY2FzZSBWSURJT0NfQ1JPUENBUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9IGFyZzsKKwkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisKKwkJdHlwZSA9IGNhcC0+dHlwZTsKKworCQlpZiAodHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgJiYKKwkJICAgIHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJKmNhcCA9IGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uY3JvcGNhcDsKKwkJY2FwLT50eXBlID0gdHlwZTsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19DUk9QOgorCXsKKwkJc3RydWN0IHY0bDJfY3JvcCAqIGNyb3AgPSBhcmc7CisKKwkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICYmCisJCSAgICBjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIE5vIGZoLT5kb19jcm9wID0gMTsgYmVjYXVzZSBidHYtPmNyb3BbMV0gbWF5IGJlCisJCSAgIGluY29uc2lzdGVudCB3aXRoIGZoLT53aWR0aCBvciBmaC0+aGVpZ2h0IGFuZCBhcHBzCisJCSAgIGRvIG5vdCBleHBlY3QgYSBjaGFuZ2UgaGVyZS4gKi8KKworCQljcm9wLT5jID0gYnR2LT5jcm9wWyEhZmgtPmRvX2Nyb3BdLnJlY3Q7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfQ1JPUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7CisJCWNvbnN0IHN0cnVjdCB2NGwyX3JlY3QgKmI7CisJCXN0cnVjdCBidHR2X2Nyb3AgYzsKKwkJX19zMzIgYl9sZWZ0OworCQlfX3MzMiBiX3RvcDsKKwkJX19zMzIgYl9yaWdodDsKKwkJX19zMzIgYl9ib3R0b207CisKKwkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICYmCisJCSAgICBjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldHZhbCA9IHY0bDJfcHJpb19jaGVjaygmYnR2LT5wcmlvLCZmaC0+cHJpbyk7CisJCWlmICgwICE9IHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisKKwkJLyogTWFrZSBzdXJlIHR2bm9ybSwgdmJpX2VuZCBhbmQgdGhlIGN1cnJlbnQgY3JvcHBpbmcKKwkJICAgcGFyYW1ldGVycyByZW1haW4gY29uc2lzdGVudCB1bnRpbCB3ZSdyZSBkb25lLiBOb3RlCisJCSAgIHJlYWQoKSBtYXkgY2hhbmdlIHZiaV9lbmQgaW4gY2hlY2tfYWxsb2NfYnRyZXMoKS4gKi8KKwkJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKKworCQlyZXR2YWwgPSAtRUJVU1k7CisKKwkJaWYgKGxvY2tlZF9idHJlcyhmaC0+YnR2LCBWSURFT19SRVNPVVJDRVMpKQorCQkJZ290byBidHZfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkJYiA9ICZidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLmNyb3BjYXAuYm91bmRzOworCisJCWJfbGVmdCA9IGItPmxlZnQ7CisJCWJfcmlnaHQgPSBiX2xlZnQgKyBiLT53aWR0aDsKKwkJYl9ib3R0b20gPSBiLT50b3AgKyBiLT5oZWlnaHQ7CisKKwkJYl90b3AgPSBtYXgoYi0+dG9wLCBidHYtPnZiaV9lbmQpOworCQlpZiAoYl90b3AgKyAzMiA+PSBiX2JvdHRvbSkKKwkJCWdvdG8gYnR2X3VubG9ja19hbmRfcmV0dXJuOworCisJCS8qIE1pbi4gc2NhbGVkIHNpemUgNDggeCAzMi4gKi8KKwkJYy5yZWN0LmxlZnQgPSBjbGFtcChjcm9wLT5jLmxlZnQsIGJfbGVmdCwgYl9yaWdodCAtIDQ4KTsKKwkJYy5yZWN0LmxlZnQgPSBtaW4oYy5yZWN0LmxlZnQsIChfX3MzMikgTUFYX0hERUxBWSk7CisKKwkJYy5yZWN0LndpZHRoID0gY2xhbXAoY3JvcC0+Yy53aWR0aCwKKwkJCQkgICAgIDQ4LCBiX3JpZ2h0IC0gYy5yZWN0LmxlZnQpOworCisJCWMucmVjdC50b3AgPSBjbGFtcChjcm9wLT5jLnRvcCwgYl90b3AsIGJfYm90dG9tIC0gMzIpOworCQkvKiBUb3AgYW5kIGhlaWdodCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdHdvLiAqLworCQljLnJlY3QudG9wID0gKGMucmVjdC50b3AgKyAxKSAmIH4xOworCisJCWMucmVjdC5oZWlnaHQgPSBjbGFtcChjcm9wLT5jLmhlaWdodCwKKwkJCQkgICAgICAzMiwgYl9ib3R0b20gLSBjLnJlY3QudG9wKTsKKwkJYy5yZWN0LmhlaWdodCA9IChjLnJlY3QuaGVpZ2h0ICsgMSkgJiB+MTsKKworCQlidHR2X2Nyb3BfY2FsY19saW1pdHMoJmMpOworCisJCWJ0di0+Y3JvcFsxXSA9IGM7CisKKwkJbXV0ZXhfdW5sb2NrKCZidHYtPmxvY2spOworCisJCWZoLT5kb19jcm9wID0gMTsKKworCQltdXRleF9sb2NrKCZmaC0+Y2FwLmxvY2spOworCisJCWlmIChmaC0+d2lkdGggPCBjLm1pbl9zY2FsZWRfd2lkdGgpIHsKKwkJCWZoLT53aWR0aCA9IGMubWluX3NjYWxlZF93aWR0aDsKKwkJCWJ0di0+aW5pdC53aWR0aCA9IGMubWluX3NjYWxlZF93aWR0aDsKKwkJfSBlbHNlIGlmIChmaC0+d2lkdGggPiBjLm1heF9zY2FsZWRfd2lkdGgpIHsKKwkJCWZoLT53aWR0aCA9IGMubWF4X3NjYWxlZF93aWR0aDsKKwkJCWJ0di0+aW5pdC53aWR0aCA9IGMubWF4X3NjYWxlZF93aWR0aDsKKwkJfQorCisJCWlmIChmaC0+aGVpZ2h0IDwgYy5taW5fc2NhbGVkX2hlaWdodCkgeworCQkJZmgtPmhlaWdodCA9IGMubWluX3NjYWxlZF9oZWlnaHQ7CisJCQlidHYtPmluaXQuaGVpZ2h0ID0gYy5taW5fc2NhbGVkX2hlaWdodDsKKwkJfSBlbHNlIGlmIChmaC0+aGVpZ2h0ID4gYy5tYXhfc2NhbGVkX2hlaWdodCkgeworCQkJZmgtPmhlaWdodCA9IGMubWF4X3NjYWxlZF9oZWlnaHQ7CisJCQlidHYtPmluaXQuaGVpZ2h0ID0gYy5tYXhfc2NhbGVkX2hlaWdodDsKKwkJfQorCisJCW11dGV4X3VubG9jaygmZmgtPmNhcC5sb2NrKTsKKworCQlyZXR1cm4gMDsKKwl9CisKIAljYXNlIFZJRElPQ19FTlVNU1REOgogCWNhc2UgVklESU9DX0dfU1REOgogCWNhc2UgVklESU9DX1NfU1REOgpAQCAtMjk2Myw2ICszNTU0LDEwIEBACiAgZmhfdW5sb2NrX2FuZF9yZXR1cm46CiAJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOwogCXJldHVybiByZXR2YWw7CisKKyBidHZfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZidHYtPmxvY2spOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQgYnR0dl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKQEAgLTI5NzIsOCArMzU2NywyNiBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEJUVFZfVkJJU0laRToKKwl7CisJCWNvbnN0IHN0cnVjdCBidHR2X3R2bm9ybSAqdHZub3JtOworCisJCXR2bm9ybSA9IGZoLT52YmlfZm10LnR2bm9ybTsKKworCQlpZiAoZmgtPnZiaV9mbXQuZm10LnN0YXJ0WzBdICE9IHR2bm9ybS0+dmJpc3RhcnRbMF0gfHwKKwkJICAgIGZoLT52YmlfZm10LmZtdC5zdGFydFsxXSAhPSB0dm5vcm0tPnZiaXN0YXJ0WzFdIHx8CisJCSAgICBmaC0+dmJpX2ZtdC5mbXQuY291bnRbMF0gIT0gZmgtPnZiaV9mbXQuZm10LmNvdW50WzFdKSB7CisJCQkvKiBCVFRWX1ZCSVNJWkUgY2Fubm90IGV4cHJlc3MgdGhlc2UgcGFyYW1ldGVycywKKwkJCSAgIGhvd2V2ZXIgb3BlbigpIHJlc2V0cyB0aGUgcGFyYW10ZXJzIHRvIGRlZmF1bHRzCisJCQkgICBhbmQgYXBwcyBzaG91bGRuJ3QgY2FsbCBCVFRWX1ZCSVNJWkUgYWZ0ZXIKKwkJCSAgIFZJRElPQ19TX0ZNVC4gKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKIAkJYnR0dl9zd2l0Y2hfdHlwZShmaCxWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKTsKLQkJcmV0dXJuIGZoLT5saW5lcyAqIDIgKiAyMDQ4OworCQlyZXR1cm4gKGZoLT52YmlfZm10LmZtdC5jb3VudFswXSAqIDIKKwkJCSogZmgtPnZiaV9mbXQuZm10LnNhbXBsZXNfcGVyX2xpbmUpOworCX0KKwogCWRlZmF1bHQ6CiAJCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIGJ0dHZfZG9faW9jdGwpOwogCX0KQEAgLTI5OTIsMTAgKzM2MDUsMTQgQEAKIAogCXN3aXRjaCAoZmgtPnR5cGUpIHsKIAljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJaWYgKGxvY2tlZF9idHJlcyhmaC0+YnR2LFJFU09VUkNFX1ZJREVPKSkKKwkJaWYgKCFjaGVja19hbGxvY19idHJlcyhmaC0+YnR2LCBmaCwgUkVTT1VSQ0VfVklERU9fUkVBRCkpIHsKKwkJCS8qIFZJREVPX1JFQUQgaW4gdXNlIGJ5IGFub3RoZXIgZmgsCisJCQkgICBvciBWSURFT19TVFJFQU0gYnkgYW55IGZoLiAqLwogCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQogCQlyZXR2YWwgPSB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPmNhcCwgZGF0YSwgY291bnQsIHBwb3MsCiAJCQkJCSAgIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwkJZnJlZV9idHJlcyhmaC0+YnR2LCBmaCwgUkVTT1VSQ0VfVklERU9fUkVBRCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKIAkJaWYgKCFjaGVja19hbGxvY19idHJlcyhmaC0+YnR2LGZoLFJFU09VUkNFX1ZCSSkpCkBAIC0zMDIxLDcgKzM2MzgsNyBAQAogCQlyZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlsZSwgJmZoLT52YmksIHdhaXQpOwogCX0KIAotCWlmIChjaGVja19idHJlcyhmaCxSRVNPVVJDRV9WSURFTykpIHsKKwlpZiAoY2hlY2tfYnRyZXMoZmgsUkVTT1VSQ0VfVklERU9fU1RSRUFNKSkgewogCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLwogCQlpZiAobGlzdF9lbXB0eSgmZmgtPmNhcC5zdHJlYW0pKQogCQkJcmV0dXJuIFBPTExFUlI7CkBAIC0zMDMxLDcgKzM2NDgsNyBAQAogCQltdXRleF9sb2NrKCZmaC0+Y2FwLmxvY2spOwogCQlpZiAoTlVMTCA9PSBmaC0+Y2FwLnJlYWRfYnVmKSB7CiAJCQkvKiBuZWVkIHRvIGNhcHR1cmUgYSBuZXcgZnJhbWUgKi8KLQkJCWlmIChsb2NrZWRfYnRyZXMoZmgtPmJ0dixSRVNPVVJDRV9WSURFTykpIHsKKwkJCWlmIChsb2NrZWRfYnRyZXMoZmgtPmJ0dixSRVNPVVJDRV9WSURFT19TVFJFQU0pKSB7CiAJCQkJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOwogCQkJCXJldHVybiBQT0xMRVJSOwogCQkJfQpAQCAtMzExNyw4ICszNzM0LDIzIEBACiAJaTJjX3ZpZGlvY3NjaGFuKGJ0dik7CiAKIAlidHYtPnVzZXJzKys7Ci0JaWYgKFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgPT0gZmgtPnR5cGUpCi0JCWJ0dHZfdmJpX3NldGxpbmVzKGZoLGJ0diwxNik7CisKKwkvKiBUaGUgVjRMMiBzcGVjIHJlcXVpcmVzIG9uZSBnbG9iYWwgc2V0IG9mIGNyb3BwaW5nIHBhcmFtZXRlcnMKKwkgICB3aGljaCBvbmx5IGNoYW5nZSBvbiByZXF1ZXN0LiBUaGVzZSBhcmUgc3RvcmVkIGluIGJ0di0+Y3JvcFsxXS4KKwkgICBIb3dldmVyIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVjRMIGFwcHMgYW5kIGNyb3BwaW5nIHVuYXdhcmUKKwkgICBWNEwyIGFwcHMgd2Ugbm93IHJlc2V0IHRoZSBjcm9wcGluZyBwYXJhbWV0ZXJzIGFzIHNlZW4gdGhyb3VnaAorCSAgIHRoaXMgZmgsIHdoaWNoIGlzIHRvIHNheSBWSURJT0NfR19DUk9QIGFuZCBzY2FsaW5nIGxpbWl0IGNoZWNrcworCSAgIHdpbGwgdXNlIGJ0di0+Y3JvcFswXSwgdGhlIGRlZmF1bHQgY3JvcHBpbmcgcGFyYW1ldGVycyBmb3IgdGhlCisJICAgY3VycmVudCB2aWRlbyBzdGFuZGFyZCwgYW5kIFZJRElPQ19TX0ZNVCB3aWxsIG5vdCBpbXBsaWNpdGVseQorCSAgIGNoYW5nZSB0aGUgY3JvcHBpbmcgcGFyYW1ldGVycyB1bnRpbCBWSURJT0NfU19DUk9QIGhhcyBiZWVuCisJICAgY2FsbGVkLiAqLworCWZoLT5kb19jcm9wID0gIXJlc2V0X2Nyb3A7IC8qIG1vZHVsZSBwYXJhbWV0ZXIgKi8KKworCS8qIExpa2V3aXNlIHRoZXJlIHNob3VsZCBiZSBvbmUgZ2xvYmFsIHNldCBvZiBWQkkgY2FwdHVyZQorCSAgIHBhcmFtZXRlcnMsIGJ1dCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFY0TCBhcHBzIGFuZCBlYXJsaWVyCisJICAgZHJpdmVyIHZlcnNpb25zIGVhY2ggZmggaGFzIGl0cyBvd24gcGFyYW1ldGVycy4gKi8KKwlidHR2X3ZiaV9mbXRfcmVzZXQoJmZoLT52YmlfZm10LCBidHYtPnR2bm9ybSk7CisKIAlidHR2X2ZpZWxkX2NvdW50KGJ0dik7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTMzLDE0ICszNzY1LDE3IEBACiAJCWJ0dHZfc3dpdGNoX292ZXJsYXkoYnR2LGZoLE5VTEwpOwogCiAJLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCi0JaWYgKGNoZWNrX2J0cmVzKGZoLCBSRVNPVVJDRV9WSURFTykpIHsKKwlpZiAoY2hlY2tfYnRyZXMoZmgsIFJFU09VUkNFX1ZJREVPX1NUUkVBTSkpIHsKIAkJdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+Y2FwKTsKLQkJZnJlZV9idHJlcyhidHYsZmgsUkVTT1VSQ0VfVklERU8pOworCQlmcmVlX2J0cmVzKGJ0dixmaCxSRVNPVVJDRV9WSURFT19TVFJFQU0pOwogCX0KIAlpZiAoZmgtPmNhcC5yZWFkX2J1ZikgewogCQlidWZmZXJfcmVsZWFzZSgmZmgtPmNhcCxmaC0+Y2FwLnJlYWRfYnVmKTsKIAkJa2ZyZWUoZmgtPmNhcC5yZWFkX2J1Zik7CiAJfQorCWlmIChjaGVja19idHJlcyhmaCwgUkVTT1VSQ0VfVklERU9fUkVBRCkpIHsKKwkJZnJlZV9idHJlcyhidHYsIGZoLCBSRVNPVVJDRV9WSURFT19SRUFEKTsKKwl9CiAKIAkvKiBzdG9wIHZiaSBjYXB0dXJlICovCiAJaWYgKGNoZWNrX2J0cmVzKGZoLCBSRVNPVVJDRV9WQkkpKSB7CkBAIC0zOTk3LDcgKzQ2MzIsNiBAQAogCiAJLyogaW5pdGlhbGl6ZSBzdHJ1Y3RzIC8gZmlsbCBpbiBkZWZhdWx0cyAqLwogCW11dGV4X2luaXQoJmJ0di0+bG9jayk7Ci0JbXV0ZXhfaW5pdCgmYnR2LT5yZXNsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYnR2LT5zX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZidHYtPmdwaW9fbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYnR2LT5ncGlvcSk7CkBAIC00MDk1LDcgKzQ3MjksNiBAQAogCWJ0di0+aW5pdC5mbXQgICAgICAgICA9IGZvcm1hdF9ieV9wYWxldHRlKFZJREVPX1BBTEVUVEVfUkdCMjQpOwogCWJ0di0+aW5pdC53aWR0aCAgICAgICA9IDMyMDsKIAlidHYtPmluaXQuaGVpZ2h0ICAgICAgPSAyNDA7Ci0JYnR2LT5pbml0LmxpbmVzICAgICAgID0gMTY7CiAJYnR2LT5pbnB1dCA9IDA7CiAKIAkvKiBpbml0aWFsaXplIGhhcmR3YXJlICovCkBAIC00MTMwLDYgKzQ3NjMsMTAgQEAKIAkJYnQ4NDhfc2F0KGJ0diwzMjc2OCk7CiAJCWF1ZGlvX211dGUoYnR2LCAxKTsKIAkJc2V0X2lucHV0KGJ0diwwKTsKKwkJYnR0dl9jcm9wX3Jlc2V0KCZidHYtPmNyb3BbMF0sIGJ0di0+dHZub3JtKTsKKwkJYnR2LT5jcm9wWzFdID0gYnR2LT5jcm9wWzBdOyAvKiBjdXJyZW50ID0gZGVmYXVsdCAqLworCQlkaXNjbGFpbV92YmlfbGluZXMoYnR2KTsKKwkJZGlzY2xhaW1fdmlkZW9fbGluZXMoYnR2KTsKIAl9CiAKIAkvKiBhZGQgc3ViZGV2aWNlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwppbmRleCBjYmMwMTJmLi42Zjc0YzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwpAQCAtMzYsMTMgKzM2LDE4IEBACiBzdGF0aWMgaW50IHJlcGVhdF9wZXJpb2QgPSAzMzsKIG1vZHVsZV9wYXJhbShyZXBlYXRfcGVyaW9kLCBpbnQsIDA2NDQpOwogCitzdGF0aWMgaW50IGlyX3JjNV9yZW1vdGVfZ2FwID0gODg1OworbW9kdWxlX3BhcmFtKGlyX3JjNV9yZW1vdGVfZ2FwLCBpbnQsIDA2NDQpOworc3RhdGljIGludCBpcl9yYzVfa2V5X3RpbWVvdXQgPSAyMDA7Cittb2R1bGVfcGFyYW0oaXJfcmM1X2tleV90aW1lb3V0LCBpbnQsIDA2NDQpOworCiAjZGVmaW5lIERFVk5BTUUgImJ0dHYtaW5wdXQiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHZvaWQgaXJfaGFuZGxlX2tleShzdHJ1Y3QgYnR0diAqYnR2KQogewotCXN0cnVjdCBidHR2X2lyICppciA9IGJ0di0+cmVtb3RlOworCXN0cnVjdCBjYXJkX2lyICppciA9IGJ0di0+cmVtb3RlOwogCXUzMiBncGlvLGRhdGE7CiAKIAkvKiByZWFkIGdwaW8gdmFsdWUgKi8KQEAgLTcyLDcgKzc3LDcgQEAKIAogdm9pZCBidHR2X2lucHV0X2lycShzdHJ1Y3QgYnR0diAqYnR2KQogewotCXN0cnVjdCBidHR2X2lyICppciA9IGJ0di0+cmVtb3RlOworCXN0cnVjdCBjYXJkX2lyICppciA9IGJ0di0+cmVtb3RlOwogCiAJaWYgKCFpci0+cG9sbGluZykKIAkJaXJfaGFuZGxlX2tleShidHYpOwpAQCAtODEsNjUgKzg2LDIxIEBACiBzdGF0aWMgdm9pZCBidHR2X2lucHV0X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgYnR0diAqYnR2ID0gKHN0cnVjdCBidHR2KilkYXRhOwotCXN0cnVjdCBidHR2X2lyICppciA9IGJ0di0+cmVtb3RlOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBidHYtPnJlbW90ZTsKIAogCWlyX2hhbmRsZV9rZXkoYnR2KTsKLQl0aW1lb3V0ID0gamlmZmllcyArIChpci0+cG9sbGluZyAqIEhaIC8gMTAwMCk7Ci0JbW9kX3RpbWVyKCZpci0+dGltZXIsIHRpbWVvdXQpOworCW1vZF90aW1lcigmaXItPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHJjNV9yZW1vdGVfZ2FwID0gODg1OwotbW9kdWxlX3BhcmFtKHJjNV9yZW1vdGVfZ2FwLCBpbnQsIDA2NDQpOwotc3RhdGljIGludCByYzVfa2V5X3RpbWVvdXQgPSAyMDA7Ci1tb2R1bGVfcGFyYW0ocmM1X2tleV90aW1lb3V0LCBpbnQsIDA2NDQpOwotCi0jZGVmaW5lIFJDNV9TVEFSVCh4KQkoKCh4KT4+MTIpJjMpCi0jZGVmaW5lIFJDNV9UT0dHTEUoeCkJKCgoeCk+PjExKSYxKQotI2RlZmluZSBSQzVfQUREUih4KQkoKCh4KT4+NikmMzEpCi0jZGVmaW5lIFJDNV9JTlNUUih4KQkoKHgpJjYzKQotCi0vKiBkZWNvZGUgcmF3IGJpdCBwYXR0ZXJuIHRvIFJDNSBjb2RlICovCi1zdGF0aWMgdTMyIHJjNV9kZWNvZGUodW5zaWduZWQgaW50IGNvZGUpCi17Ci0JdW5zaWduZWQgaW50IG9yZ19jb2RlID0gY29kZTsKLQl1bnNpZ25lZCBpbnQgcGFpcjsKLQl1bnNpZ25lZCBpbnQgcmM1ID0gMDsKLQlpbnQgaTsKLQotCWNvZGUgPSAoY29kZSA8PCAxKSB8IDE7Ci0JZm9yIChpID0gMDsgaSA8IDE0OyArK2kpIHsKLQkJcGFpciA9IGNvZGUgJiAweDM7Ci0JCWNvZGUgPj49IDI7Ci0KLQkJcmM1IDw8PSAxOwotCQlzd2l0Y2ggKHBhaXIpIHsKLQkJY2FzZSAwOgotCQljYXNlIDI6Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJcmM1IHw9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJZHByaW50ayhLRVJOX1dBUk5JTkcgImJhZCBjb2RlOiAleFxuIiwgb3JnX2NvZGUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JZHByaW50ayhLRVJOX1dBUk5JTkcgImNvZGU9JXgsIHJjNT0leCwgc3RhcnQ9JXgsIHRvZ2dsZT0leCwgYWRkcmVzcz0leCwgIgotCQkiaW5zdHI9JXhcbiIsIHJjNSwgb3JnX2NvZGUsIFJDNV9TVEFSVChyYzUpLAotCQlSQzVfVE9HR0xFKHJjNSksIFJDNV9BRERSKHJjNSksIFJDNV9JTlNUUihyYzUpKTsKLQlyZXR1cm4gcmM1OwotfQotCiBzdGF0aWMgaW50IGJ0dHZfcmM1X2lycShzdHJ1Y3QgYnR0diAqYnR2KQogewotCXN0cnVjdCBidHR2X2lyICppciA9IGJ0di0+cmVtb3RlOworCXN0cnVjdCBjYXJkX2lyICppciA9IGJ0di0+cmVtb3RlOwogCXN0cnVjdCB0aW1ldmFsIHR2OwogCXUzMiBncGlvOwogCXUzMiBnYXA7Ci0JdW5zaWduZWQgbG9uZyBjdXJyZW50X2ppZmZpZXMsIHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyBjdXJyZW50X2ppZmZpZXM7CiAKIAkvKiByZWFkIGdwaW8gcG9ydCAqLwogCWdwaW8gPSBidHR2X2dwaW9fcmVhZCgmYnR2LT5jKTsKQEAgLTE2NSw4ICsxMjYsOCBAQAogCQkvKiBvbmx5IGlmIGluIHRoZSBjb2RlIChvdGhlcndpc2Ugc3B1cmlvdXMgSVJRIG9yIHRpbWVyCiAJCSAgIGxhdGUpICovCiAJCWlmIChpci0+bGFzdF9iaXQgPCAyOCkgewotCQkJaXItPmxhc3RfYml0ID0gKGdhcCAtIHJjNV9yZW1vdGVfZ2FwIC8gMikgLwotCQkJICAgIHJjNV9yZW1vdGVfZ2FwOworCQkJaXItPmxhc3RfYml0ID0gKGdhcCAtIGlyX3JjNV9yZW1vdGVfZ2FwIC8gMikgLworCQkJICAgIGlyX3JjNV9yZW1vdGVfZ2FwOwogCQkJaXItPmNvZGUgfD0gMSA8PCBpci0+bGFzdF9iaXQ7CiAJCX0KIAkJLyogc3RhcnRpbmcgbmV3IGNvZGUgKi8KQEAgLTE3Niw4ICsxMzcsOCBAQAogCQlpci0+YmFzZV90aW1lID0gdHY7CiAJCWlyLT5sYXN0X2JpdCA9IDA7CiAKLQkJdGltZW91dCA9IGN1cnJlbnRfamlmZmllcyArICg1MDAgKyAzMCAqIEhaKSAvIDEwMDA7Ci0JCW1vZF90aW1lcigmaXItPnRpbWVyX2VuZCwgdGltZW91dCk7CisJCW1vZF90aW1lcigmaXItPnRpbWVyX2VuZCwKKwkJCSAgY3VycmVudF9qaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygzMCkpOwogCX0KIAogCS8qIHRvZ2dsZSBHUElPIHBpbiA0IHRvIHJlc2V0IHRoZSBpcnEgKi8KQEAgLTE4Niw5NiArMTQ3LDI4IEBACiAJcmV0dXJuIDE7CiB9CiAKLQotc3RhdGljIHZvaWQgYnR0dl9yYzVfdGltZXJfZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgYnR0dl9pciAqaXIgPSAoc3RydWN0IGJ0dHZfaXIgKilkYXRhOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXVuc2lnbmVkIGxvbmcgY3VycmVudF9qaWZmaWVzLCB0aW1lb3V0OwotCXUzMiBnYXA7Ci0KLQkvKiBnZXQgdGltZSAqLwotCWN1cnJlbnRfamlmZmllcyA9IGppZmZpZXM7Ci0JZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0KLQkvKiBhdm9pZCBvdmVyZmxvdyB3aXRoIGdhcCA+MXMgKi8KLQlpZiAodHYudHZfc2VjIC0gaXItPmJhc2VfdGltZS50dl9zZWMgPiAxKSB7Ci0JCWdhcCA9IDIwMDAwMDsKLQl9IGVsc2UgewotCQlnYXAgPSAxMDAwMDAwICogKHR2LnR2X3NlYyAtIGlyLT5iYXNlX3RpbWUudHZfc2VjKSArCi0JCSAgICB0di50dl91c2VjIC0gaXItPmJhc2VfdGltZS50dl91c2VjOwotCX0KLQotCS8qIEFsbG93IHNvbWUgdGltbWVyIGppdHRlciAoUkM1IGlzIH4yNG1zIGFueXdheSBzbyB0aGlzIGlzIG9rKSAqLwotCWlmIChnYXAgPCAyODAwMCkgewotCQlkcHJpbnRrKEtFUk5fV0FSTklORyAic3B1cmlvdXMgdGltZXJfZW5kXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlyLT5hY3RpdmUgPSAwOwotCWlmIChpci0+bGFzdF9iaXQgPCAyMCkgewotCQkvKiBpZ25vcmUgc3B1cmlvdXMgY29kZXMgKGNhdXNlZCBieSBsaWdodC9vdGhlciByZW1vdGVzKSAqLwotCQlkcHJpbnRrKEtFUk5fV0FSTklORyAic2hvcnQgY29kZTogJXhcbiIsIGlyLT5jb2RlKTsKLQl9IGVsc2UgewotCQl1MzIgcmM1ID0gcmM1X2RlY29kZShpci0+Y29kZSk7Ci0KLQkJLyogdHdvIHN0YXJ0IGJpdHM/ICovCi0JCWlmIChSQzVfU1RBUlQocmM1KSAhPSAzKSB7Ci0JCQlkcHJpbnRrKEtFUk5fV0FSTklORyAicmM1IHN0YXJ0IGJpdHMgaW52YWxpZDogJXVcbiIsIFJDNV9TVEFSVChyYzUpKTsKLQotCQkJLyogcmlnaHQgYWRkcmVzcz8gKi8KLQkJfSBlbHNlIGlmIChSQzVfQUREUihyYzUpID09IDB4MCkgewotCQkJdTMyIHRvZ2dsZSA9IFJDNV9UT0dHTEUocmM1KTsKLQkJCXUzMiBpbnN0ciA9IFJDNV9JTlNUUihyYzUpOwotCi0JCQkvKiBHb29kIGNvZGUsIGRlY2lkZSBpZiByZXBlYXQvcmVwcmVzcyAqLwotCQkJaWYgKHRvZ2dsZSAhPSBSQzVfVE9HR0xFKGlyLT5sYXN0X3JjNSkgfHwKLQkJCSAgICBpbnN0ciAhPSBSQzVfSU5TVFIoaXItPmxhc3RfcmM1KSkgewotCQkJCWRwcmludGsoS0VSTl9XQVJOSU5HICJpbnN0cnVjdGlvbiAleCwgdG9nZ2xlICV4XG4iLCBpbnN0ciwKLQkJCQkJdG9nZ2xlKTsKLQkJCQlpcl9pbnB1dF9ub2tleShpci0+ZGV2LCAmaXItPmlyKTsKLQkJCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsICZpci0+aXIsIGluc3RyLAotCQkJCQkJIGluc3RyKTsKLQkJCX0KLQotCQkJLyogU2V0L3Jlc2V0IGtleS11cCB0aW1lciAqLwotCQkJdGltZW91dCA9IGN1cnJlbnRfamlmZmllcyArICg1MDAgKyByYzVfa2V5X3RpbWVvdXQKLQkJCQkJCSAgICAgKiBIWikgLyAxMDAwOwotCQkJbW9kX3RpbWVyKCZpci0+dGltZXJfa2V5dXAsIHRpbWVvdXQpOwotCi0JCQkvKiBTYXZlIGNvZGUgZm9yIHJlcGVhdCB0ZXN0ICovCi0JCQlpci0+bGFzdF9yYzUgPSByYzU7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJ0dHZfcmM1X3RpbWVyX2tleXVwKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgYnR0dl9pciAqaXIgPSAoc3RydWN0IGJ0dHZfaXIgKilkYXRhOwotCi0JZHByaW50ayhLRVJOX0RFQlVHICJrZXkgcmVsZWFzZWRcbiIpOwotCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB2b2lkIGJ0dHZfaXJfc3RhcnQoc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IGJ0dHZfaXIgKmlyKQorc3RhdGljIHZvaWQgYnR0dl9pcl9zdGFydChzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgY2FyZF9pciAqaXIpCiB7CiAJaWYgKGlyLT5wb2xsaW5nKSB7Ci0JCWluaXRfdGltZXIoJmlyLT50aW1lcik7Ci0JCWlyLT50aW1lci5mdW5jdGlvbiA9IGJ0dHZfaW5wdXRfdGltZXI7Ci0JCWlyLT50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWJ0djsKKwkJc2V0dXBfdGltZXIoJmlyLT50aW1lciwgYnR0dl9pbnB1dF90aW1lciwgKHVuc2lnbmVkIGxvbmcpYnR2KTsKIAkJaXItPnRpbWVyLmV4cGlyZXMgID0gamlmZmllcyArIEhaOwogCQlhZGRfdGltZXIoJmlyLT50aW1lcik7CiAJfSBlbHNlIGlmIChpci0+cmM1X2dwaW8pIHsKIAkJLyogc2V0IHRpbWVyX2VuZCBmb3IgY29kZSBjb21wbGV0aW9uICovCiAJCWluaXRfdGltZXIoJmlyLT50aW1lcl9lbmQpOwotCQlpci0+dGltZXJfZW5kLmZ1bmN0aW9uID0gYnR0dl9yYzVfdGltZXJfZW5kOworCQlpci0+dGltZXJfZW5kLmZ1bmN0aW9uID0gaXJfcmM1X3RpbWVyX2VuZDsKIAkJaXItPnRpbWVyX2VuZC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaXI7CiAKIAkJaW5pdF90aW1lcigmaXItPnRpbWVyX2tleXVwKTsKLQkJaXItPnRpbWVyX2tleXVwLmZ1bmN0aW9uID0gYnR0dl9yYzVfdGltZXJfa2V5dXA7CisJCWlyLT50aW1lcl9rZXl1cC5mdW5jdGlvbiA9IGlyX3JjNV90aW1lcl9rZXl1cDsKIAkJaXItPnRpbWVyX2tleXVwLmRhdGEgPSAodW5zaWduZWQgbG9uZylpcjsKKwkJaXItPnNoaWZ0X2J5ID0gMTsKKwkJaXItPnN0YXJ0ID0gMzsKKwkJaXItPmFkZHIgPSAweDA7CisJCWlyLT5yYzVfa2V5X3RpbWVvdXQgPSBpcl9yYzVfa2V5X3RpbWVvdXQ7CisJCWlyLT5yYzVfcmVtb3RlX2dhcCA9IGlyX3JjNV9yZW1vdGVfZ2FwOwogCX0KIH0KIApAQCAtMjk5LDcgKzE5Miw3IEBACiAKIGludCBidHR2X2lucHV0X2luaXQoc3RydWN0IGJ0dHYgKmJ0dikKIHsKLQlzdHJ1Y3QgYnR0dl9pciAqaXI7CisJc3RydWN0IGNhcmRfaXIgKmlyOwogCUlSX0tFWVRBQl9UWVBFICppcl9jb2RlcyA9IE5VTEw7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtcmlzYy5jCmluZGV4IGFmY2ZlNzEuLmU3MTA0ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYwpAQCAtNDMsNyArNDMsOCBAQAogYnR0dl9yaXNjX3BhY2tlZChzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAogCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCiAJCSB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgYnBsLAotCQkgdW5zaWduZWQgaW50IHBhZGRpbmcsIHVuc2lnbmVkIGludCBsaW5lcykKKwkJIHVuc2lnbmVkIGludCBwYWRkaW5nLCB1bnNpZ25lZCBpbnQgc2tpcF9saW5lcywKKwkJIHVuc2lnbmVkIGludCBzdG9yZV9saW5lcykKIHsKIAl1MzIgaW5zdHJ1Y3Rpb25zLGxpbmUsdG9kbzsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwpAQCAtNTQsOSArNTUsMTEgQEAKIAkgICBvbmUgd3JpdGUgcGVyIHNjYW4gbGluZSArIHN5bmMgKyBqdW1wIChhbGwgMiBkd29yZHMpLiAgcGFkZGluZwogCSAgIGNhbiBjYXVzZSBuZXh0IGJwbCB0byBzdGFydCBjbG9zZSB0byBhIHBhZ2UgYm9yZGVyLiAgRmlyc3QgRE1BCiAJICAgcmVnaW9uIG1heSBiZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFICovCi0JaW5zdHJ1Y3Rpb25zICA9IDEgKyAoKGJwbCArIHBhZGRpbmcpICogbGluZXMpIC8gUEFHRV9TSVpFICsgbGluZXM7Ci0JaW5zdHJ1Y3Rpb25zICs9IDI7Ci0JaWYgKChyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhidHYtPmMucGNpLHJpc2MsaW5zdHJ1Y3Rpb25zKjgpKSA8IDApCisJaW5zdHJ1Y3Rpb25zICA9IHNraXBfbGluZXMgKiA0OworCWluc3RydWN0aW9ucyArPSAoMSArICgoYnBsICsgcGFkZGluZykgKiBzdG9yZV9saW5lcykKKwkJCSAvIFBBR0VfU0laRSArIHN0b3JlX2xpbmVzKSAqIDg7CisJaW5zdHJ1Y3Rpb25zICs9IDIgKiA4OworCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MoYnR2LT5jLnBjaSxyaXNjLGluc3RydWN0aW9ucykpIDwgMCkKIAkJcmV0dXJuIHJjOwogCiAJLyogc3luYyBpbnN0cnVjdGlvbiAqLwpAQCAtNjQsMTEgKzY3LDE2IEBACiAJKihycCsrKSA9IGNwdV90b19sZTMyKEJUODQ4X1JJU0NfU1lOQ3xCVDg0OF9GSUZPX1NUQVRVU19GTTEpOwogCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsKIAorCXdoaWxlIChza2lwX2xpbmVzLS0gPiAwKSB7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihCVDg0OF9SSVNDX1NLSVAgfCBCVDg0OF9SSVNDX1NPTCB8CisJCQkJICAgICAgQlQ4NDhfUklTQ19FT0wgfCBicGwpOworCX0KKwogCS8qIHNjYW4gbGluZXMgKi8KIAlzZyA9IHNnbGlzdDsKLQlmb3IgKGxpbmUgPSAwOyBsaW5lIDwgbGluZXM7IGxpbmUrKykgeworCWZvciAobGluZSA9IDA7IGxpbmUgPCBzdG9yZV9saW5lczsgbGluZSsrKSB7CiAJCWlmICgoYnR2LT5vcHRfdmNyX2hhY2spICYmCi0JCSAgICAobGluZSA+PSAobGluZXMgLSBWQ1JfSEFDS19MSU5FUykpKQorCQkgICAgKGxpbmUgPj0gKHN0b3JlX2xpbmVzIC0gVkNSX0hBQ0tfTElORVMpKSkKIAkJCWNvbnRpbnVlOwogCQl3aGlsZSAob2Zmc2V0ICYmIG9mZnNldCA+PSBzZ19kbWFfbGVuKHNnKSkgewogCQkJb2Zmc2V0IC09IHNnX2RtYV9sZW4oc2cpOwpAQCAtMTMwLDcgKzEzOCw4IEBACiAJLyogZXN0aW1hdGUgcmlzYyBtZW06IHdvcnN0IGNhc2UgaXMgb25lIHdyaXRlIHBlciBwYWdlIGJvcmRlciArCiAJICAgb25lIHdyaXRlIHBlciBzY2FuIGxpbmUgKDUgZHdvcmRzKQogCSAgIHBsdXMgc3luYyArIGp1bXAgKDIgZHdvcmRzKSAqLwotCWluc3RydWN0aW9ucyAgPSAoeWJwbCAqIHlsaW5lcyAqIDIpIC8gUEFHRV9TSVpFICsgeWxpbmVzOworCWluc3RydWN0aW9ucyAgPSAoKDMgKyAoeWJwbCArIHlwYWRkaW5nKSAqIHlsaW5lcyAqIDIpCisJCQkgLyBQQUdFX1NJWkUpICsgeWxpbmVzOwogCWluc3RydWN0aW9ucyArPSAyOwogCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MoYnR2LT5jLnBjaSxyaXNjLGluc3RydWN0aW9ucyo0KjUpKSA8IDApCiAJCXJldHVybiByYzsKQEAgLTMxNywxMCArMzI2LDEwIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyB2b2lkCi1idHR2X2NhbGNfZ2VvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCBidHR2X2dlb21ldHJ5ICpnZW8sCi0JICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgaW50ZXJsZWF2ZWQsIGludCBub3JtKQorYnR0dl9jYWxjX2dlb19vbGQoc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IGJ0dHZfZ2VvbWV0cnkgKmdlbywKKwkJICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBpbnRlcmxlYXZlZCwKKwkJICBjb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gKnR2bm9ybSkKIHsKLQljb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gKnR2bm9ybSA9ICZidHR2X3R2bm9ybXNbbm9ybV07CiAJdTMyIHhzZiwgc3I7CiAJaW50IHZkZWxheTsKIApAQCAtMzYxLDYgKzM3MCw2MiBAQAogfQogCiBzdGF0aWMgdm9pZAorYnR0dl9jYWxjX2dlbwkJKHN0cnVjdCBidHR2ICogICAgICAgICAgICAgICAgICBidHYsCisJCQkgc3RydWN0IGJ0dHZfZ2VvbWV0cnkgKiAgICAgICAgIGdlbywKKwkJCSB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgd2lkdGgsCisJCQkgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgIGhlaWdodCwKKwkJCSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF9maWVsZHMsCisJCQkgY29uc3Qgc3RydWN0IGJ0dHZfdHZub3JtICogICAgIHR2bm9ybSwKKwkJCSBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0ICogICAgICAgY3JvcCkKK3sKKwl1bnNpZ25lZCBpbnQgY193aWR0aDsKKwl1bnNpZ25lZCBpbnQgY19oZWlnaHQ7CisJdTMyIHNyOworCisJaWYgKChjcm9wLT5sZWZ0ID09IHR2bm9ybS0+Y3JvcGNhcC5kZWZyZWN0LmxlZnQKKwkgICAgICYmIGNyb3AtPnRvcCA9PSB0dm5vcm0tPmNyb3BjYXAuZGVmcmVjdC50b3AKKwkgICAgICYmIGNyb3AtPndpZHRoID09IHR2bm9ybS0+Y3JvcGNhcC5kZWZyZWN0LndpZHRoCisJICAgICAmJiBjcm9wLT5oZWlnaHQgPT0gdHZub3JtLT5jcm9wY2FwLmRlZnJlY3QuaGVpZ2h0CisJICAgICAmJiB3aWR0aCA8PSB0dm5vcm0tPnN3aWR0aCAvKiBzZWUgUEFMLU5jIGV0IGFsICovKQorCSAgICB8fCBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtidHYtPmlucHV0XSA8IDApIHsKKwkJYnR0dl9jYWxjX2dlb19vbGQoYnR2LCBnZW8sIHdpZHRoLCBoZWlnaHQsCisJCQkJICBib3RoX2ZpZWxkcywgdHZub3JtKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEZvciBidWcgY29tcGF0aWJpbGl0eSB0aGUgaW1hZ2Ugc2l6ZSBjaGVja3MgcGVybWl0IHNjYWxlCisJICAgZmFjdG9ycyA+IDE2LiBTZWUgYnR0dl9jcm9wX2NhbGNfbGltaXRzKCkuICovCisJY193aWR0aCA9IG1pbigodW5zaWduZWQgaW50KSBjcm9wLT53aWR0aCwgd2lkdGggKiAxNik7CisJY19oZWlnaHQgPSBtaW4oKHVuc2lnbmVkIGludCkgY3JvcC0+aGVpZ2h0LCBoZWlnaHQgKiAxNik7CisKKwlnZW8tPndpZHRoID0gd2lkdGg7CisJZ2VvLT5oc2NhbGUgPSAoY193aWR0aCAqIDQwOTZVICsgKHdpZHRoID4+IDEpKSAvIHdpZHRoIC0gNDA5NjsKKwkvKiBFdmVuIHRvIHN0b3JlIENiIGZpcnN0LCBvZGQgZm9yIENyLiAqLworCWdlby0+aGRlbGF5ID0gKChjcm9wLT5sZWZ0ICogd2lkdGggKyBjX3dpZHRoKSAvIGNfd2lkdGgpICYgfjE7CisKKwlnZW8tPnNoZWlnaHQgPSBjX2hlaWdodDsKKwlnZW8tPnZkZWxheSA9IGNyb3AtPnRvcCAtIHR2bm9ybS0+Y3JvcGNhcC5ib3VuZHMudG9wICsgTUlOX1ZERUxBWTsKKwlzciA9IGNfaGVpZ2h0ID4+ICFib3RoX2ZpZWxkczsKKwlzciA9IChzciAqIDUxMlUgKyAoaGVpZ2h0ID4+IDEpKSAvIGhlaWdodCAtIDUxMjsKKwlnZW8tPnZzY2FsZSA9ICgweDEwMDAwVUwgLSBzcikgJiAweDFmZmY7CisJZ2VvLT52c2NhbGUgfD0gYm90aF9maWVsZHMgPyAoQlQ4NDhfVlNDQUxFX0lOVCA8PCA4KSA6IDA7CisJZ2VvLT52dG90YWwgPSB0dm5vcm0tPnZ0b3RhbDsKKworCWdlby0+Y3JvcCA9ICgoKGdlby0+d2lkdGggICA+PiA4KSAmIDB4MDMpIHwKKwkJICAgICAoKGdlby0+aGRlbGF5ICA+PiA2KSAmIDB4MGMpIHwKKwkJICAgICAoKGdlby0+c2hlaWdodCA+PiA0KSAmIDB4MzApIHwKKwkJICAgICAoKGdlby0+dmRlbGF5ICA+PiAyKSAmIDB4YzApKTsKKworCWlmIChidHYtPm9wdF9jb21iZmlsdGVyKSB7CisJCWdlby0+dnRjICA9ICh3aWR0aCA8IDE5MykgPyAyIDogKCh3aWR0aCA8IDM4NSkgPyAxIDogMCk7CisJCWdlby0+Y29tYiA9ICh3aWR0aCA8IDc2OSkgPyAxIDogMDsKKwl9IGVsc2UgeworCQlnZW8tPnZ0YyAgPSAwOworCQlnZW8tPmNvbWIgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQKIGJ0dHZfYXBwbHlfZ2VvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCBidHR2X2dlb21ldHJ5ICpnZW8sIGludCBvZGQpCiB7CiAJaW50IG9mZiA9IG9kZCA/IDB4ODAgOiAweDAwOwpAQCAtNTIyLDE2ICs1ODcsNTEgQEAKIGJ0dHZfYnVmZmVyX2FjdGl2YXRlX3ZiaShzdHJ1Y3QgYnR0diAqYnR2LAogCQkJIHN0cnVjdCBidHR2X2J1ZmZlciAqdmJpKQogewotCS8qIHZiaSBjYXB0dXJlICovCisJc3RydWN0IGJ0Y3hfcmlzY21lbSAqdG9wOworCXN0cnVjdCBidGN4X3Jpc2NtZW0gKmJvdHRvbTsKKwlpbnQgdG9wX2lycV9mbGFnczsKKwlpbnQgYm90dG9tX2lycV9mbGFnczsKKworCXRvcCA9IE5VTEw7CisJYm90dG9tID0gTlVMTDsKKwl0b3BfaXJxX2ZsYWdzID0gMDsKKwlib3R0b21faXJxX2ZsYWdzID0gMDsKKwogCWlmICh2YmkpIHsKKwkJdW5zaWduZWQgaW50IGNyb3AsIHZkZWxheTsKKwogCQl2YmktPnZiLnN0YXRlID0gU1RBVEVfQUNUSVZFOwogCQlsaXN0X2RlbCgmdmJpLT52Yi5xdWV1ZSk7Ci0JCWJ0dHZfcmlzY19ob29rKGJ0diwgUklTQ19TTE9UX09fVkJJLCAmdmJpLT50b3AsICAgIDApOwotCQlidHR2X3Jpc2NfaG9vayhidHYsIFJJU0NfU0xPVF9FX1ZCSSwgJnZiaS0+Ym90dG9tLCA0KTsKLQl9IGVsc2UgewotCQlidHR2X3Jpc2NfaG9vayhidHYsIFJJU0NfU0xPVF9PX1ZCSSwgTlVMTCwgMCk7Ci0JCWJ0dHZfcmlzY19ob29rKGJ0diwgUklTQ19TTE9UX0VfVkJJLCBOVUxMLCAwKTsKKworCQkvKiBWREVMQVkgaXMgc3RhcnQgb2YgdmlkZW8sIGVuZCBvZiBWQkkgY2FwdHVyaW5nLiAqLworCQljcm9wID0gYnRyZWFkKEJUODQ4X0VfQ1JPUCk7CisJCXZkZWxheSA9IGJ0cmVhZChCVDg0OF9FX1ZERUxBWV9MTykgKyAoKGNyb3AgJiAweGMwKSA8PCAyKTsKKworCQlpZiAodmJpLT5nZW8udmRlbGF5ID4gdmRlbGF5KSB7CisJCQl2ZGVsYXkgPSB2YmktPmdlby52ZGVsYXkgJiAweGZlOworCQkJY3JvcCA9IChjcm9wICYgMHgzZikgfCAoKHZiaS0+Z2VvLnZkZWxheSA+PiAyKSAmIDB4YzApOworCisJCQlidHdyaXRlKHZkZWxheSwgQlQ4NDhfRV9WREVMQVlfTE8pOworCQkJYnR3cml0ZShjcm9wLAlCVDg0OF9FX0NST1ApOworCQkJYnR3cml0ZSh2ZGVsYXksIEJUODQ4X09fVkRFTEFZX0xPKTsKKwkJCWJ0d3JpdGUoY3JvcCwJQlQ4NDhfT19DUk9QKTsKKwkJfQorCisJCWlmICh2YmktPnZiaV9jb3VudFswXSA+IDApIHsKKwkJCXRvcCA9ICZ2YmktPnRvcDsKKwkJCXRvcF9pcnFfZmxhZ3MgPSA0OworCQl9CisKKwkJaWYgKHZiaS0+dmJpX2NvdW50WzFdID4gMCkgeworCQkJdG9wX2lycV9mbGFncyA9IDA7CisJCQlib3R0b20gPSAmdmJpLT5ib3R0b207CisJCQlib3R0b21faXJxX2ZsYWdzID0gNDsKKwkJfQogCX0KKworCWJ0dHZfcmlzY19ob29rKGJ0diwgUklTQ19TTE9UX09fVkJJLCB0b3AsIHRvcF9pcnFfZmxhZ3MpOworCWJ0dHZfcmlzY19ob29rKGJ0diwgUklTQ19TTE9UX0VfVkJJLCBib3R0b20sIGJvdHRvbV9pcnFfZmxhZ3MpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYxMSwyOCArNzExLDMxIEBACiAJCWludCBicGYgPSBicGwgKiAoYnVmLT52Yi5oZWlnaHQgPj4gMSk7CiAKIAkJYnR0dl9jYWxjX2dlbyhidHYsJmJ1Zi0+Z2VvLGJ1Zi0+dmIud2lkdGgsYnVmLT52Yi5oZWlnaHQsCi0JCQkgICAgICBWNEwyX0ZJRUxEX0hBU19CT1RIKGJ1Zi0+dmIuZmllbGQpLGJ1Zi0+dHZub3JtKTsKKwkJCSAgICAgIFY0TDJfRklFTERfSEFTX0JPVEgoYnVmLT52Yi5maWVsZCksCisJCQkgICAgICB0dm5vcm0sJmJ1Zi0+Y3JvcCk7CiAKIAkJc3dpdGNoIChidWYtPnZiLmZpZWxkKSB7CiAJCWNhc2UgVjRMMl9GSUVMRF9UT1A6CiAJCQlidHR2X3Jpc2NfcGFja2VkKGJ0diwmYnVmLT50b3AsYnVmLT52Yi5kbWEuc2dsaXN0LAotCQkJCQkgMCxicGwsMCxidWYtPnZiLmhlaWdodCk7CisJCQkJCSAvKiBvZmZzZXQgKi8gMCxicGwsCisJCQkJCSAvKiBwYWRkaW5nICovIDAsLyogc2tpcF9saW5lcyAqLyAwLAorCQkJCQkgYnVmLT52Yi5oZWlnaHQpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9GSUVMRF9CT1RUT006CiAJCQlidHR2X3Jpc2NfcGFja2VkKGJ0diwmYnVmLT5ib3R0b20sYnVmLT52Yi5kbWEuc2dsaXN0LAotCQkJCQkgMCxicGwsMCxidWYtPnZiLmhlaWdodCk7CisJCQkJCSAwLGJwbCwwLDAsYnVmLT52Yi5oZWlnaHQpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgogCQkJYnR0dl9yaXNjX3BhY2tlZChidHYsJmJ1Zi0+dG9wLGJ1Zi0+dmIuZG1hLnNnbGlzdCwKLQkJCQkJIDAsYnBsLGJwbCxidWYtPnZiLmhlaWdodCA+PiAxKTsKKwkJCQkJIDAsYnBsLGJwbCwwLGJ1Zi0+dmIuaGVpZ2h0ID4+IDEpOwogCQkJYnR0dl9yaXNjX3BhY2tlZChidHYsJmJ1Zi0+Ym90dG9tLGJ1Zi0+dmIuZG1hLnNnbGlzdCwKLQkJCQkJIGJwbCxicGwsYnBsLGJ1Zi0+dmIuaGVpZ2h0ID4+IDEpOworCQkJCQkgYnBsLGJwbCxicGwsMCxidWYtPnZiLmhlaWdodCA+PiAxKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfRklFTERfU0VRX1RCOgogCQkJYnR0dl9yaXNjX3BhY2tlZChidHYsJmJ1Zi0+dG9wLGJ1Zi0+dmIuZG1hLnNnbGlzdCwKLQkJCQkJIDAsYnBsLDAsYnVmLT52Yi5oZWlnaHQgPj4gMSk7CisJCQkJCSAwLGJwbCwwLDAsYnVmLT52Yi5oZWlnaHQgPj4gMSk7CiAJCQlidHR2X3Jpc2NfcGFja2VkKGJ0diwmYnVmLT5ib3R0b20sYnVmLT52Yi5kbWEuc2dsaXN0LAotCQkJCQkgYnBmLGJwbCwwLGJ1Zi0+dmIuaGVpZ2h0ID4+IDEpOworCQkJCQkgYnBmLGJwbCwwLDAsYnVmLT52Yi5oZWlnaHQgPj4gMSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwpAQCAtNjYyLDcgKzc2NSw4IEBACiAJCXN3aXRjaCAoYnVmLT52Yi5maWVsZCkgewogCQljYXNlIFY0TDJfRklFTERfVE9QOgogCQkJYnR0dl9jYWxjX2dlbyhidHYsJmJ1Zi0+Z2VvLGJ1Zi0+dmIud2lkdGgsCi0JCQkJICAgICAgYnVmLT52Yi5oZWlnaHQsMCxidWYtPnR2bm9ybSk7CisJCQkJICAgICAgYnVmLT52Yi5oZWlnaHQsLyogYm90aF9maWVsZHMgKi8gMCwKKwkJCQkgICAgICB0dm5vcm0sJmJ1Zi0+Y3JvcCk7CiAJCQlidHR2X3Jpc2NfcGxhbmFyKGJ0diwgJmJ1Zi0+dG9wLCBidWYtPnZiLmRtYS5zZ2xpc3QsCiAJCQkJCSAwLGJ1Zi0+dmIud2lkdGgsMCxidWYtPnZiLmhlaWdodCwKIAkJCQkJIHVvZmZzZXQsdm9mZnNldCxidWYtPmZtdC0+aHNoaWZ0LApAQCAtNjcwLDcgKzc3NCw4IEBACiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKIAkJCWJ0dHZfY2FsY19nZW8oYnR2LCZidWYtPmdlbyxidWYtPnZiLndpZHRoLAotCQkJCSAgICAgIGJ1Zi0+dmIuaGVpZ2h0LDAsYnVmLT50dm5vcm0pOworCQkJCSAgICAgIGJ1Zi0+dmIuaGVpZ2h0LDAsCisJCQkJICAgICAgdHZub3JtLCZidWYtPmNyb3ApOwogCQkJYnR0dl9yaXNjX3BsYW5hcihidHYsICZidWYtPmJvdHRvbSwgYnVmLT52Yi5kbWEuc2dsaXN0LAogCQkJCQkgMCxidWYtPnZiLndpZHRoLDAsYnVmLT52Yi5oZWlnaHQsCiAJCQkJCSB1b2Zmc2V0LHZvZmZzZXQsYnVmLT5mbXQtPmhzaGlmdCwKQEAgLTY3OCw3ICs3ODMsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgogCQkJYnR0dl9jYWxjX2dlbyhidHYsJmJ1Zi0+Z2VvLGJ1Zi0+dmIud2lkdGgsCi0JCQkJICAgICAgYnVmLT52Yi5oZWlnaHQsMSxidWYtPnR2bm9ybSk7CisJCQkJICAgICAgYnVmLT52Yi5oZWlnaHQsMSwKKwkJCQkgICAgICB0dm5vcm0sJmJ1Zi0+Y3JvcCk7CiAJCQlsaW5lcyAgICA9IGJ1Zi0+dmIuaGVpZ2h0ID4+IDE7CiAJCQl5cGFkZGluZyA9IGJ1Zi0+dmIud2lkdGg7CiAJCQljcGFkZGluZyA9IGJ1Zi0+dmIud2lkdGggPj4gYnVmLT5mbXQtPmhzaGlmdDsKQEAgLTcwMCw3ICs4MDYsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9GSUVMRF9TRVFfVEI6CiAJCQlidHR2X2NhbGNfZ2VvKGJ0diwmYnVmLT5nZW8sYnVmLT52Yi53aWR0aCwKLQkJCQkgICAgICBidWYtPnZiLmhlaWdodCwxLGJ1Zi0+dHZub3JtKTsKKwkJCQkgICAgICBidWYtPnZiLmhlaWdodCwxLAorCQkJCSAgICAgIHR2bm9ybSwmYnVmLT5jcm9wKTsKIAkJCWxpbmVzICAgID0gYnVmLT52Yi5oZWlnaHQgPj4gMTsKIAkJCXlwYWRkaW5nID0gYnVmLT52Yi53aWR0aDsKIAkJCWNwYWRkaW5nID0gYnVmLT52Yi53aWR0aCA+PiBidWYtPmZtdC0+aHNoaWZ0OwpAQCAtNzMxLDExICs4MzgsMTIgQEAKIAkJLyogYnVpbGQgcmlzYyBjb2RlICovCiAJCWJ1Zi0+dmIuZmllbGQgPSBWNEwyX0ZJRUxEX1NFUV9UQjsKIAkJYnR0dl9jYWxjX2dlbyhidHYsJmJ1Zi0+Z2VvLHR2bm9ybS0+c3dpZHRoLHR2bm9ybS0+c2hlaWdodCwKLQkJCSAgICAgIDEsYnVmLT50dm5vcm0pOworCQkJICAgICAgMSx0dm5vcm0sJmJ1Zi0+Y3JvcCk7CiAJCWJ0dHZfcmlzY19wYWNrZWQoYnR2LCAmYnVmLT50b3AsICBidWYtPnZiLmRtYS5zZ2xpc3QsCi0JCQkJIDAsIFJBV19CUEwsIDAsIFJBV19MSU5FUyk7CisJCQkJIC8qIG9mZnNldCAqLyAwLCBSQVdfQlBMLCAvKiBwYWRkaW5nICovIDAsCisJCQkJIC8qIHNraXBfbGluZXMgKi8gMCwgUkFXX0xJTkVTKTsKIAkJYnR0dl9yaXNjX3BhY2tlZChidHYsICZidWYtPmJvdHRvbSwgYnVmLT52Yi5kbWEuc2dsaXN0LAotCQkJCSBidWYtPnZiLnNpemUvMiAsIFJBV19CUEwsIDAsIFJBV19MSU5FUyk7CisJCQkJIGJ1Zi0+dmIuc2l6ZS8yICwgUkFXX0JQTCwgMCwgMCwgUkFXX0xJTkVTKTsKIAl9CiAKIAkvKiBjb3B5IGZvcm1hdCBpbmZvICovCkBAIC03NjEsNyArODY5LDggQEAKIAogCS8qIGNhbGN1bGF0ZSBnZW9tZXRyeSAqLwogCWJ0dHZfY2FsY19nZW8oYnR2LCZidWYtPmdlbyxvdi0+dy53aWR0aCxvdi0+dy5oZWlnaHQsCi0JCSAgICAgIFY0TDJfRklFTERfSEFTX0JPVEgob3YtPmZpZWxkKSwgb3YtPnR2bm9ybSk7CisJCSAgICAgIFY0TDJfRklFTERfSEFTX0JPVEgob3YtPmZpZWxkKSwKKwkJICAgICAgJmJ0dHZfdHZub3Jtc1tvdi0+dHZub3JtXSwmYnVmLT5jcm9wKTsKIAogCS8qIGJ1aWxkIHJpc2MgY29kZSAqLwogCXN3aXRjaCAob3YtPmZpZWxkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMKaW5kZXggNmZjNmIwMi4uOTNlMzVkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYwpAQCAtNSw2ICs1LDkgQEAKIAogICAgIChjKSAyMDAyIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4KIAorICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNaWNoYWVsIEguIFNjaGltZWsgPG1zY2hpbWVrQGdteC5hdD4KKyAgICBTcG9uc29yZWQgYnkgT1BRIFN5c3RlbXMgQUIKKwogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtNDEsOCArNDQsMTUgQEAKICAgIHRvIGJlIGFib3V0IDI0NC4gICovCiAjZGVmaW5lIFZCSV9PRkZTRVQgMjQ0CiAKKy8qIDIwNDggZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIGRyaXZlciB2ZXJzaW9ucy4gVGhlIGRyaXZlcgorICAgcmVhbGx5IHN0b3JlcyAxMDI0ICsgdHZub3JtLT52YmlwYWNrICogNCBzYW1wbGVzIHBlciBsaW5lIGluIHRoZQorICAgYnVmZmVyLiBOb3RlIHR2bm9ybS0+dmJpcGFjayBpcyA8PSAweEZGIChsaW1pdCBvZiBWQklQQUNLX0xPICsgSEkKKyAgIGlzIDB4MUZGIERXT1JEcykgYW5kIFZCSSByZWFkKClzIHN0b3JlIGEgZnJhbWUgY291bnRlciBpbiB0aGUgbGFzdAorICAgZm91ciBieXRlcyBvZiB0aGUgVkJJIGltYWdlLiAqLworI2RlZmluZSBWQklfQlBMIDIwNDgKKworLyogQ29tcGF0aWJpbGl0eS4gKi8KICNkZWZpbmUgVkJJX0RFRkxJTkVTIDE2Ci0jZGVmaW5lIFZCSV9NQVhMSU5FUyAzMgogCiBzdGF0aWMgdW5zaWduZWQgaW50IHZiaWJ1ZnMgPSA0Owogc3RhdGljIHVuc2lnbmVkIGludCB2YmlfZGVidWcgPSAwOwpAQCAtNTgsMjEgKzY4LDEyIEBACiAjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pCWlmICh2YmlfZGVidWcpIFwKIAlwcmludGsoS0VSTl9ERUJVRyAiYnR0diVkL3ZiaTogIiBmbXQsIGJ0di0+Yy5uciAsICMjIGFyZykKIAorI2RlZmluZSBJTUFHRV9TSVpFKGZtdCkgXAorCSgoKGZtdCktPmNvdW50WzBdICsgKGZtdCktPmNvdW50WzFdKSAqIChmbXQpLT5zYW1wbGVzX3Blcl9saW5lKQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogdmJpIHJpc2MgY29kZSArIG1tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotc3RhdGljIGludAotdmJpX2J1ZmZlcl9yaXNjKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCBidHR2X2J1ZmZlciAqYnVmLCBpbnQgbGluZXMpCi17Ci0JaW50IGJwbCA9IDIwNDg7Ci0KLQlidHR2X3Jpc2NfcGFja2VkKGJ0diwgJmJ1Zi0+dG9wLCBidWYtPnZiLmRtYS5zZ2xpc3QsCi0JCQkgMCwgYnBsLTQsIDQsIGxpbmVzKTsKLQlidHR2X3Jpc2NfcGFja2VkKGJ0diwgJmJ1Zi0+Ym90dG9tLCBidWYtPnZiLmRtYS5zZ2xpc3QsCi0JCQkgbGluZXMgKiBicGwsIGJwbC00LCA0LCBsaW5lcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmJpX2J1ZmZlcl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCiAJCQkgICAgdW5zaWduZWQgaW50ICpjb3VudCwgdW5zaWduZWQgaW50ICpzaXplKQogewpAQCAtODEsOCArODIsMTYgQEAKIAogCWlmICgwID09ICpjb3VudCkKIAkJKmNvdW50ID0gdmJpYnVmczsKLQkqc2l6ZSA9IGZoLT5saW5lcyAqIDIgKiAyMDQ4OwotCWRwcmludGsoInNldHVwOiBsaW5lcz0lZFxuIixmaC0+bGluZXMpOworCisJKnNpemUgPSBJTUFHRV9TSVpFKCZmaC0+dmJpX2ZtdC5mbXQpOworCisJZHByaW50aygic2V0dXA6IHNhbXBsZXM9JXUgc3RhcnQ9JWQsJWQgY291bnQ9JXUsJXVcbiIsCisJCWZoLT52YmlfZm10LmZtdC5zYW1wbGVzX3Blcl9saW5lLAorCQlmaC0+dmJpX2ZtdC5mbXQuc3RhcnRbMF0sCisJCWZoLT52YmlfZm10LmZtdC5zdGFydFsxXSwKKwkJZmgtPnZiaV9mbXQuZm10LmNvdW50WzBdLAorCQlmaC0+dmJpX2ZtdC5mbXQuY291bnRbMV0pOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkzLDE4ICsxMDIsOTMgQEAKIAlzdHJ1Y3QgYnR0dl9maCAqZmggPSBxLT5wcml2X2RhdGE7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IGZoLT5idHY7CiAJc3RydWN0IGJ0dHZfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsc3RydWN0IGJ0dHZfYnVmZmVyLHZiKTsKKwljb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gKnR2bm9ybTsKKwl1bnNpZ25lZCBpbnQgc2tpcF9saW5lczAsIHNraXBfbGluZXMxLCBtaW5fdmRlbGF5OworCWludCByZWRvX2RtYV9yaXNjOwogCWludCByYzsKIAotCWJ1Zi0+dmIuc2l6ZSA9IGZoLT5saW5lcyAqIDIgKiAyMDQ4OworCWJ1Zi0+dmIuc2l6ZSA9IElNQUdFX1NJWkUoJmZoLT52YmlfZm10LmZtdCk7CiAJaWYgKDAgIT0gYnVmLT52Yi5iYWRkciAgJiYgIGJ1Zi0+dmIuYnNpemUgPCBidWYtPnZiLnNpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJdHZub3JtID0gZmgtPnZiaV9mbXQudHZub3JtOworCisJLyogVGhlcmUncyBubyBWQklfVkRFTEFZIHJlZ2lzdGVyLCBSSVNDIG11c3Qgc2tpcCB0aGUgbGluZXMKKwkgICB3ZSBkb24ndCB3YW50LiBXaXRoIGRlZmF1bHQgcGFyYW1ldGVycyB3ZSBza2lwIHplcm8gbGluZXMKKwkgICBhcyBlYXJsaWVyIGRyaXZlciB2ZXJzaW9ucyBkaWQuIFRoZSBkcml2ZXIgcGVybWl0cyB2aWRlbworCSAgIHN0YW5kYXJkIGNoYW5nZXMgd2hpbGUgY2FwdHVyaW5nLCBzbyB3ZSB1c2UgdmJpX2ZtdC50dm5vcm0KKwkgICBpbnN0ZWFkIG9mIGJ0di0+dHZub3JtIHRvIHNraXAgemVybyBsaW5lcyBhZnRlciB2aWRlbworCSAgIHN0YW5kYXJkIGNoYW5nZXMgYXMgd2VsbC4gKi8KKworCXNraXBfbGluZXMwID0gMDsKKwlza2lwX2xpbmVzMSA9IDA7CisKKwlpZiAoZmgtPnZiaV9mbXQuZm10LmNvdW50WzBdID4gMCkKKwkJc2tpcF9saW5lczAgPSBtYXgoMCwgKGZoLT52YmlfZm10LmZtdC5zdGFydFswXQorCQkJCSAgICAgIC0gdHZub3JtLT52YmlzdGFydFswXSkpOworCWlmIChmaC0+dmJpX2ZtdC5mbXQuY291bnRbMV0gPiAwKQorCQlza2lwX2xpbmVzMSA9IG1heCgwLCAoZmgtPnZiaV9mbXQuZm10LnN0YXJ0WzFdCisJCQkJICAgICAgLSB0dm5vcm0tPnZiaXN0YXJ0WzFdKSk7CisKKwlyZWRvX2RtYV9yaXNjID0gMDsKKworCWlmIChidWYtPnZiaV9za2lwWzBdICE9IHNraXBfbGluZXMwIHx8CisJICAgIGJ1Zi0+dmJpX3NraXBbMV0gIT0gc2tpcF9saW5lczEgfHwKKwkgICAgYnVmLT52YmlfY291bnRbMF0gIT0gZmgtPnZiaV9mbXQuZm10LmNvdW50WzBdIHx8CisJICAgIGJ1Zi0+dmJpX2NvdW50WzFdICE9IGZoLT52YmlfZm10LmZtdC5jb3VudFsxXSkgeworCQlidWYtPnZiaV9za2lwWzBdID0gc2tpcF9saW5lczA7CisJCWJ1Zi0+dmJpX3NraXBbMV0gPSBza2lwX2xpbmVzMTsKKwkJYnVmLT52YmlfY291bnRbMF0gPSBmaC0+dmJpX2ZtdC5mbXQuY291bnRbMF07CisJCWJ1Zi0+dmJpX2NvdW50WzFdID0gZmgtPnZiaV9mbXQuZm10LmNvdW50WzFdOworCQlyZWRvX2RtYV9yaXNjID0gMTsKKwl9CisKIAlpZiAoU1RBVEVfTkVFRFNfSU5JVCA9PSBidWYtPnZiLnN0YXRlKSB7CisJCXJlZG9fZG1hX3Jpc2MgPSAxOwogCQlpZiAoMCAhPSAocmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgJmJ1Zi0+dmIsIE5VTEwpKSkKIAkJCWdvdG8gZmFpbDsKLQkJaWYgKDAgIT0gKHJjID0gdmJpX2J1ZmZlcl9yaXNjKGJ0dixidWYsZmgtPmxpbmVzKSkpCi0JCQlnb3RvIGZhaWw7CiAJfQorCisJaWYgKHJlZG9fZG1hX3Jpc2MpIHsKKwkJdW5zaWduZWQgaW50IGJwbCwgcGFkZGluZywgb2Zmc2V0OworCisJCWJwbCA9IDIwNDQ7IC8qIG1heC4gdmJpcGFjayAqLworCQlwYWRkaW5nID0gVkJJX0JQTCAtIGJwbDsKKworCQlpZiAoZmgtPnZiaV9mbXQuZm10LmNvdW50WzBdID4gMCkgeworCQkJcmMgPSBidHR2X3Jpc2NfcGFja2VkKGJ0diwgJmJ1Zi0+dG9wLAorCQkJCQkgICAgICBidWYtPnZiLmRtYS5zZ2xpc3QsCisJCQkJCSAgICAgIC8qIG9mZnNldCAqLyAwLCBicGwsCisJCQkJCSAgICAgIHBhZGRpbmcsIHNraXBfbGluZXMwLAorCQkJCQkgICAgICBmaC0+dmJpX2ZtdC5mbXQuY291bnRbMF0pOworCQkJaWYgKDAgIT0gcmMpCisJCQkJZ290byBmYWlsOworCQl9CisKKwkJaWYgKGZoLT52YmlfZm10LmZtdC5jb3VudFsxXSA+IDApIHsKKwkJCW9mZnNldCA9IGZoLT52YmlfZm10LmZtdC5jb3VudFswXSAqIFZCSV9CUEw7CisKKwkJCXJjID0gYnR0dl9yaXNjX3BhY2tlZChidHYsICZidWYtPmJvdHRvbSwKKwkJCQkJICAgICAgYnVmLT52Yi5kbWEuc2dsaXN0LAorCQkJCQkgICAgICBvZmZzZXQsIGJwbCwKKwkJCQkJICAgICAgcGFkZGluZywgc2tpcF9saW5lczEsCisJCQkJCSAgICAgIGZoLT52YmlfZm10LmZtdC5jb3VudFsxXSk7CisJCQlpZiAoMCAhPSByYykKKwkJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwkvKiBWQkkgY2FwdHVyaW5nIGVuZHMgYXQgVkRFTEFZLCBzdGFydCBvZiB2aWRlbyBjYXB0dXJpbmcsCisJICAgbm8gbWF0dGVyIHdoZXJlIHRoZSBSSVNDIHByb2dyYW0gZW5kcy4gVkRFTEFZIG1pbmltdW0gaXMgMiwKKwkgICBib3VuZHMudG9wIGlzIHRoZSBjb3JyZXNwb25kaW5nIGZpcnN0IGZpZWxkIGxpbmUgbnVtYmVyCisJICAgdGltZXMgdHdvLiBWREVMQVkgY291bnRzIGhhbGYgZmllbGQgbGluZXMuICovCisJbWluX3ZkZWxheSA9IE1JTl9WREVMQVk7CisJaWYgKGZoLT52YmlfZm10LmVuZCA+PSB0dm5vcm0tPmNyb3BjYXAuYm91bmRzLnRvcCkKKwkJbWluX3ZkZWxheSArPSBmaC0+dmJpX2ZtdC5lbmQgLSB0dm5vcm0tPmNyb3BjYXAuYm91bmRzLnRvcDsKKworCS8qIEZvciBidHR2X2J1ZmZlcl9hY3RpdmF0ZV92YmkoKS4gKi8KKwlidWYtPmdlby52ZGVsYXkgPSBtaW5fdmRlbGF5OworCiAJYnVmLT52Yi5zdGF0ZSA9IFNUQVRFX1BSRVBBUkVEOwogCWJ1Zi0+dmIuZmllbGQgPSBmaWVsZDsKIAlkcHJpbnRrKCJidWYgcHJlcGFyZSAlcDogdG9wPSVwIGJvdHRvbT0lcCBmaWVsZD0lc1xuIiwKQEAgLTE0MCw3ICsyMjQsNyBAQAogCXN0cnVjdCBidHR2X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLHN0cnVjdCBidHR2X2J1ZmZlcix2Yik7CiAKIAlkcHJpbnRrKCJmcmVlICVwXG4iLHZiKTsKLQlidHR2X2RtYV9mcmVlKCZmaC0+Y2FwLGZoLT5idHYsYnVmKTsKKwlidHR2X2RtYV9mcmVlKHEsZmgtPmJ0dixidWYpOwogfQogCiBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGJ0dHZfdmJpX3FvcHMgPSB7CkBAIC0xNTIsNjkgKzIzNiwyMTUgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotdm9pZCBidHR2X3ZiaV9zZXRsaW5lcyhzdHJ1Y3QgYnR0dl9maCAqZmgsIHN0cnVjdCBidHR2ICpidHYsIGludCBsaW5lcykKK3N0YXRpYyBpbnQKK3RyeV9mbXQJCQkoc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCAqCWYsCisJCQkgY29uc3Qgc3RydWN0IGJ0dHZfdHZub3JtICoJdHZub3JtLAorCQkJIF9fczMyCQkJCWNyb3Bfc3RhcnQpCiB7Ci0JaW50IHZkZWxheTsKKwlfX3MzMiBtaW5fc3RhcnQsIG1heF9zdGFydCwgbWF4X2VuZCwgZjJfb2Zmc2V0OworCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKGxpbmVzIDwgMSkKLQkJbGluZXMgPSAxOwotCWlmIChsaW5lcyA+IFZCSV9NQVhMSU5FUykKLQkJbGluZXMgPSBWQklfTUFYTElORVM7Ci0JZmgtPmxpbmVzID0gbGluZXM7CisJLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIGRyaXZlciB2ZXJzaW9ucyB3ZSBtdXN0IHByZXRlbmQKKwkgICB0aGUgVkJJIGFuZCB2aWRlbyBjYXB0dXJlIHdpbmRvdyBtYXkgb3ZlcmxhcC4gSW4gcmVhbGl0eSBSSVNDCisJICAgbWFnaWMgYWJvcnRzIFZCSSBjYXB0dXJpbmcgYXQgdGhlIGZpcnN0IGxpbmUgb2YgdmlkZW8gY2FwdHVyaW5nLAorCSAgIGxlYXZpbmcgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlciB1bmNoYW5nZWQsIHVzdWFsbHkgYWxsIHplcm8uCisJICAgVkJJIGNhcHR1cmluZyBtdXN0IGFsd2F5cyBzdGFydCBiZWZvcmUgdmlkZW8gY2FwdHVyaW5nLiA+PiAxCisJICAgYmVjYXVzZSBjcm9wcGluZyBjb3VudHMgZmllbGQgbGluZXMgdGltZXMgdHdvLiAqLworCW1pbl9zdGFydCA9IHR2bm9ybS0+dmJpc3RhcnRbMF07CisJbWF4X3N0YXJ0ID0gKGNyb3Bfc3RhcnQgPj4gMSkgLSAxOworCW1heF9lbmQgPSAodHZub3JtLT5jcm9wY2FwLmJvdW5kcy50b3AKKwkJICAgKyB0dm5vcm0tPmNyb3BjYXAuYm91bmRzLmhlaWdodCkgPj4gMTsKIAotCXZkZWxheSA9IGJ0cmVhZChCVDg0OF9FX1ZERUxBWV9MTyk7Ci0JaWYgKHZkZWxheSA8IGxpbmVzKjIpIHsKLQkJdmRlbGF5ID0gbGluZXMqMjsKLQkJYnR3cml0ZSh2ZGVsYXksQlQ4NDhfRV9WREVMQVlfTE8pOwotCQlidHdyaXRlKHZkZWxheSxCVDg0OF9PX1ZERUxBWV9MTyk7CisJaWYgKG1pbl9zdGFydCA+IG1heF9zdGFydCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCUJVR19PTihtYXhfc3RhcnQgPj0gbWF4X2VuZCk7CisKKwlmLT5zYW1wbGluZ19yYXRlICAgID0gdHZub3JtLT5Gc2M7CisJZi0+c2FtcGxlc19wZXJfbGluZSA9IFZCSV9CUEw7CisJZi0+c2FtcGxlX2Zvcm1hdCAgICA9IFY0TDJfUElYX0ZNVF9HUkVZOworCWYtPm9mZnNldCAgICAgICAgICAgPSBWQklfT0ZGU0VUOworCisJZjJfb2Zmc2V0ID0gdHZub3JtLT52YmlzdGFydFsxXSAtIHR2bm9ybS0+dmJpc3RhcnRbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7CisJCWlmICgwID09IGYtPmNvdW50W2ldKSB7CisJCQkvKiBObyBkYXRhIGZyb20gdGhpcyBmaWVsZC4gV2UgbGVhdmUgZi0+c3RhcnRbaV0KKwkJCSAgIGFsb25lIGJlY2F1c2UgVklESU9DU1ZCSUZNVCBpcyB3L28gYW5kIEVJTlZBTHMKKwkJCSAgIHdoZW4gYSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBleGFjdGx5IHRoZQorCQkJICAgcmVxdWVzdGVkIHBhcmFtZXRlcnMuICovCisJCX0gZWxzZSB7CisJCQlzNjQgc3RhcnQsIGNvdW50OworCisJCQlzdGFydCA9IGNsYW1wKGYtPnN0YXJ0W2ldLCBtaW5fc3RhcnQsIG1heF9zdGFydCk7CisJCQkvKiBzNjQgdG8gcHJldmVudCBvdmVyZmxvdy4gKi8KKwkJCWNvdW50ID0gKHM2NCkgZi0+c3RhcnRbaV0gKyBmLT5jb3VudFtpXSAtIHN0YXJ0OworCQkJZi0+c3RhcnRbaV0gPSBzdGFydDsKKwkJCWYtPmNvdW50W2ldID0gY2xhbXAoY291bnQsIChzNjQpIDEsCisJCQkJCSAgICBtYXhfZW5kIC0gc3RhcnQpOworCQl9CisKKwkJbWluX3N0YXJ0ICs9IGYyX29mZnNldDsKKwkJbWF4X3N0YXJ0ICs9IGYyX29mZnNldDsKKwkJbWF4X2VuZCArPSBmMl9vZmZzZXQ7CisJfQorCisJaWYgKDAgPT0gKGYtPmNvdW50WzBdIHwgZi0+Y291bnRbMV0pKSB7CisJCS8qIEFzIGluIGVhcmxpZXIgZHJpdmVyIHZlcnNpb25zLiAqLworCQlmLT5zdGFydFswXSA9IHR2bm9ybS0+dmJpc3RhcnRbMF07CisJCWYtPnN0YXJ0WzFdID0gdHZub3JtLT52YmlzdGFydFsxXTsKKwkJZi0+Y291bnRbMF0gPSAxOworCQlmLT5jb3VudFsxXSA9IDE7CisJfQorCisJZi0+ZmxhZ3MgPSAwOworCisJZi0+cmVzZXJ2ZWRbMF0gPSAwOworCWYtPnJlc2VydmVkWzFdID0gMDsKKworCXJldHVybiAwOworfQorCitpbnQKK2J0dHZfdmJpX3RyeV9mbXQJKHN0cnVjdCBidHR2X2ZoICoJCWZoLAorCQkJIHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKglmKQoreworCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OworCWNvbnN0IHN0cnVjdCBidHR2X3R2bm9ybSAqdHZub3JtOworCV9fczMyIGNyb3Bfc3RhcnQ7CisKKwltdXRleF9sb2NrKCZidHYtPmxvY2spOworCisJdHZub3JtID0gJmJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV07CisJY3JvcF9zdGFydCA9IGJ0di0+Y3JvcF9zdGFydDsKKworCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKKworCXJldHVybiB0cnlfZm10KGYsIHR2bm9ybSwgY3JvcF9zdGFydCk7Cit9CisKK2ludAorYnR0dl92Ymlfc2V0X2ZtdAkoc3RydWN0IGJ0dHZfZmggKgkJZmgsCisJCQkgc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCAqCWYpCit7CisJc3RydWN0IGJ0dHYgKmJ0diA9IGZoLT5idHY7CisJY29uc3Qgc3RydWN0IGJ0dHZfdHZub3JtICp0dm5vcm07CisJX19zMzIgc3RhcnQxLCBlbmQ7CisJaW50IHJjOworCisJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKKworCXJjID0gLUVCVVNZOworCWlmIChmaC0+cmVzb3VyY2VzICYgUkVTT1VSQ0VfVkJJKQorCQlnb3RvIGZhaWw7CisKKwl0dm5vcm0gPSAmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXTsKKworCXJjID0gdHJ5X2ZtdChmLCB0dm5vcm0sIGJ0di0+Y3JvcF9zdGFydCk7CisJaWYgKDAgIT0gcmMpCisJCWdvdG8gZmFpbDsKKworCXN0YXJ0MSA9IGYtPnN0YXJ0WzFdIC0gdHZub3JtLT52YmlzdGFydFsxXSArIHR2bm9ybS0+dmJpc3RhcnRbMF07CisKKwkvKiBGaXJzdCBwb3NzaWJsZSBsaW5lIG9mIHZpZGVvIGNhcHR1cmluZy4gU2hvdWxkIGJlCisJICAgbWF4KGYtPnN0YXJ0WzBdICsgZi0+Y291bnRbMF0sIHN0YXJ0MSArIGYtPmNvdW50WzFdKSAqIDIKKwkgICB3aGVuIGNhcHR1cmluZyBib3RoIGZpZWxkcy4gQnV0IGZvciBjb21wYXRpYmlsaXR5IHdlIG11c3QKKwkgICBwcmV0ZW5kIHRoZSBWQkkgYW5kIHZpZGVvIGNhcHR1cmUgd2luZG93IG1heSBvdmVybGFwLAorCSAgIHNvIGVuZCA9IHN0YXJ0ICsgMSwgdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZSwgdGltZXMgdHdvCisJICAgYmVjYXVzZSB2YmlfZm10LmVuZCBjb3VudHMgZmllbGQgbGluZXMgdGltZXMgdHdvLiAqLworCWVuZCA9IG1heChmLT5zdGFydFswXSwgc3RhcnQxKSAqIDIgKyAyOworCisJbXV0ZXhfbG9jaygmZmgtPnZiaS5sb2NrKTsKKworCWZoLT52YmlfZm10LmZtdCAgICA9ICpmOworCWZoLT52YmlfZm10LnR2bm9ybSA9IHR2bm9ybTsKKwlmaC0+dmJpX2ZtdC5lbmQgICAgPSBlbmQ7CisKKwltdXRleF91bmxvY2soJmZoLT52YmkubG9jayk7CisKKwlyYyA9IDA7CisKKyBmYWlsOgorCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKwordm9pZAorYnR0dl92YmlfZ2V0X2ZtdAkoc3RydWN0IGJ0dHZfZmggKgkJZmgsCisJCQkgc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCAqCWYpCit7CisJY29uc3Qgc3RydWN0IGJ0dHZfdHZub3JtICp0dm5vcm07CisKKwkqZiA9IGZoLT52YmlfZm10LmZtdDsKKworCXR2bm9ybSA9ICZidHR2X3R2bm9ybXNbZmgtPmJ0di0+dHZub3JtXTsKKworCWlmICh0dm5vcm0gIT0gZmgtPnZiaV9mbXQudHZub3JtKSB7CisJCV9fczMyIG1heF9lbmQ7CisJCXVuc2lnbmVkIGludCBpOworCisJCS8qIEFzIGluIHZiaV9idWZmZXJfcHJlcGFyZSgpIHRoaXMgaW1pdGF0ZXMgdGhlCisJCSAgIGJlaGF2aW91ciBvZiBlYXJsaWVyIGRyaXZlciB2ZXJzaW9ucyBhZnRlciB2aWRlbworCQkgICBzdGFuZGFyZCBjaGFuZ2VzLCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycyBhbnl3YXkuICovCisKKwkJbWF4X2VuZCA9ICh0dm5vcm0tPmNyb3BjYXAuYm91bmRzLnRvcAorCQkJICAgKyB0dm5vcm0tPmNyb3BjYXAuYm91bmRzLmhlaWdodCkgPj4gMTsKKworCQlmLT5zYW1wbGluZ19yYXRlID0gdHZub3JtLT5Gc2M7CisKKwkJZm9yIChpID0gMDsgaSA8IDI7ICsraSkgeworCQkJX19zMzIgbmV3X3N0YXJ0OworCisJCQluZXdfc3RhcnQgPSBmLT5zdGFydFtpXQorCQkJCSsgdHZub3JtLT52YmlzdGFydFtpXQorCQkJCS0gZmgtPnZiaV9mbXQudHZub3JtLT52YmlzdGFydFtpXTsKKworCQkJZi0+c3RhcnRbaV0gPSBtaW4obmV3X3N0YXJ0LCBtYXhfZW5kIC0gMSk7CisJCQlmLT5jb3VudFtpXSA9IG1pbigoX19zMzIpIGYtPmNvdW50W2ldLAorCQkJCQkgIG1heF9lbmQgLSBmLT5zdGFydFtpXSk7CisKKwkJCW1heF9lbmQgKz0gdHZub3JtLT52YmlzdGFydFsxXQorCQkJCS0gdHZub3JtLT52YmlzdGFydFswXTsKKwkJfQogCX0KIH0KIAotdm9pZCBidHR2X3ZiaV90cnlfZm10KHN0cnVjdCBidHR2X2ZoICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQordm9pZAorYnR0dl92YmlfZm10X3Jlc2V0CShzdHJ1Y3QgYnR0dl92YmlfZm10ICoJCWYsCisJCQkgaW50CQkJCW5vcm0pCiB7CiAJY29uc3Qgc3RydWN0IGJ0dHZfdHZub3JtICp0dm5vcm07Ci0JczY0IGNvdW50MCxjb3VudDEsY291bnQ7CisJdW5zaWduZWQgaW50IHJlYWxfc2FtcGxlc19wZXJfbGluZTsKKwl1bnNpZ25lZCBpbnQgcmVhbF9jb3VudDsKIAotCXR2bm9ybSA9ICZidHR2X3R2bm9ybXNbZmgtPmJ0di0+dHZub3JtXTsKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKLQlmLT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgICAgPSB0dm5vcm0tPkZzYzsKLQlmLT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSAyMDQ4OwotCWYtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCAgICA9IFY0TDJfUElYX0ZNVF9HUkVZOwotCWYtPmZtdC52Ymkub2Zmc2V0ICAgICAgICAgICA9IFZCSV9PRkZTRVQ7Ci0JZi0+Zm10LnZiaS5mbGFncyAgICAgICAgICAgID0gMDsKKwl0dm5vcm0gPSAmYnR0dl90dm5vcm1zW25vcm1dOwogCi0JLyogczY0IHRvIHByZXZlbnQgb3ZlcmZsb3cuICovCi0JY291bnQwID0gKHM2NCkgZi0+Zm10LnZiaS5zdGFydFswXSArIGYtPmZtdC52YmkuY291bnRbMF0KLQkJLSB0dm5vcm0tPnZiaXN0YXJ0WzBdOwotCWNvdW50MSA9IChzNjQpIGYtPmZtdC52Ymkuc3RhcnRbMV0gKyBmLT5mbXQudmJpLmNvdW50WzFdCi0JCS0gdHZub3JtLT52YmlzdGFydFsxXTsKLQljb3VudCAgPSBjbGFtcCAobWF4IChjb3VudDAsIGNvdW50MSksIChzNjQpIDEsIChzNjQpIFZCSV9NQVhMSU5FUyk7CisJZi0+Zm10LnNhbXBsaW5nX3JhdGUgICAgPSB0dm5vcm0tPkZzYzsKKwlmLT5mbXQuc2FtcGxlc19wZXJfbGluZSA9IFZCSV9CUEw7CisJZi0+Zm10LnNhbXBsZV9mb3JtYXQgICAgPSBWNEwyX1BJWF9GTVRfR1JFWTsKKwlmLT5mbXQub2Zmc2V0ICAgICAgICAgICA9IFZCSV9PRkZTRVQ7CisJZi0+Zm10LnN0YXJ0WzBdCQk9IHR2bm9ybS0+dmJpc3RhcnRbMF07CisJZi0+Zm10LnN0YXJ0WzFdCQk9IHR2bm9ybS0+dmJpc3RhcnRbMV07CisJZi0+Zm10LmNvdW50WzBdCQk9IFZCSV9ERUZMSU5FUzsKKwlmLT5mbXQuY291bnRbMV0JCT0gVkJJX0RFRkxJTkVTOworCWYtPmZtdC5mbGFncyAgICAgICAgICAgID0gMDsKKwlmLT5mbXQucmVzZXJ2ZWRbMF0gICAgICA9IDA7CisJZi0+Zm10LnJlc2VydmVkWzFdICAgICAgPSAwOwogCi0JZi0+Zm10LnZiaS5zdGFydFswXSA9IHR2bm9ybS0+dmJpc3RhcnRbMF07Ci0JZi0+Zm10LnZiaS5zdGFydFsxXSA9IHR2bm9ybS0+dmJpc3RhcnRbMV07Ci0JZi0+Zm10LnZiaS5jb3VudFswXSA9IGNvdW50OwotCWYtPmZtdC52YmkuY291bnRbMV0gPSBjb3VudDsKKwkvKiBGb3IgY29tcGF0aWJpbGl0eSB0aGUgYnVmZmVyIHNpemUgbXVzdCBiZSAyICogVkJJX0RFRkxJTkVTICoKKwkgICBWQklfQlBMIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgdmlkZW8gc3RhbmRhcmQuICovCisJcmVhbF9zYW1wbGVzX3Blcl9saW5lICAgPSAxMDI0ICsgdHZub3JtLT52YmlwYWNrICogNDsKKwlyZWFsX2NvdW50ICAgICAgICAgICAgICA9ICgodHZub3JtLT5jcm9wY2FwLmRlZnJlY3QudG9wID4+IDEpCisJCQkJICAgLSB0dm5vcm0tPnZiaXN0YXJ0WzBdKTsKIAotCWYtPmZtdC52YmkucmVzZXJ2ZWRbMF0gPSAwOwotCWYtPmZtdC52YmkucmVzZXJ2ZWRbMV0gPSAwOwotfQorCUJVR19PTihyZWFsX3NhbXBsZXNfcGVyX2xpbmUgPiBWQklfQlBMKTsKKwlCVUdfT04ocmVhbF9jb3VudCA+IFZCSV9ERUZMSU5FUyk7CiAKLXZvaWQgYnR0dl92YmlfZ2V0X2ZtdChzdHJ1Y3QgYnR0dl9maCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQljb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gKnR2bm9ybTsKKwlmLT50dm5vcm0gICAgICAgICAgICAgICA9IHR2bm9ybTsKIAotCXR2bm9ybSA9ICZidHR2X3R2bm9ybXNbZmgtPmJ0di0+dHZub3JtXTsKLQltZW1zZXQoZiwwLHNpemVvZigqZikpOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCWYtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSAgICA9IHR2bm9ybS0+RnNjOwotCWYtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IDIwNDg7Ci0JZi0+Zm10LnZiaS5zYW1wbGVfZm9ybWF0ICAgID0gVjRMMl9QSVhfRk1UX0dSRVk7Ci0JZi0+Zm10LnZiaS5vZmZzZXQgICAgICAgICAgID0gVkJJX09GRlNFVDsKLQlmLT5mbXQudmJpLnN0YXJ0WzBdICAgICAgICAgPSB0dm5vcm0tPnZiaXN0YXJ0WzBdOwotCWYtPmZtdC52Ymkuc3RhcnRbMV0gICAgICAgICA9IHR2bm9ybS0+dmJpc3RhcnRbMV07Ci0JZi0+Zm10LnZiaS5jb3VudFswXSAgICAgICAgID0gZmgtPmxpbmVzOwotCWYtPmZtdC52YmkuY291bnRbMV0gICAgICAgICA9IGZoLT5saW5lczsKLQlmLT5mbXQudmJpLmZsYWdzICAgICAgICAgICAgPSAwOworCS8qIFNlZSBidHR2X3ZiaV9mbXRfc2V0KCkuICovCisJZi0+ZW5kICAgICAgICAgICAgICAgICAgPSB0dm5vcm0tPnZiaXN0YXJ0WzBdICogMiArIDI7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCmluZGV4IGY5YzllM2MuLjU0OTFhY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCkBAIC0xOTcsMzMgKzE5Nyw2IEBACiBzdHJ1Y3QgYnR0djsKIAogCi1zdHJ1Y3QgYnR0dl9pciB7Ci0Jc3RydWN0IGlucHV0X2RldiAgICAgICAgKmRldjsKLQlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgICBpcjsKLQljaGFyICAgICAgICAgICAgICAgICAgICBuYW1lWzMyXTsKLQljaGFyICAgICAgICAgICAgICAgICAgICBwaHlzWzMyXTsKLQotCS8qIFVzdWFsIGdwaW8gc2lnbmFsbGluZyAqLwotCi0JdTMyICAgICAgICAgICAgICAgICAgICAgbWFza19rZXljb2RlOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIG1hc2tfa2V5ZG93bjsKLQl1MzIgICAgICAgICAgICAgICAgICAgICBtYXNrX2tleXVwOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIHBvbGxpbmc7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgbGFzdF9ncGlvOwotCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7Ci0KLQkvKiBSQzUgZ3BpbyAqLwotCXUzMiByYzVfZ3BpbzsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcl9lbmQ7CS8qIHRpbWVyX2VuZCBmb3IgY29kZSBjb21wbGV0aW9uICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXJfa2V5dXA7CS8qIHRpbWVyX2VuZCBmb3Iga2V5IHJlbGVhc2UgKi8KLQl1MzIgbGFzdF9yYzU7CQkJLyogbGFzdCBnb29kIHJjNSBjb2RlICovCi0JdTMyIGxhc3RfYml0OwkJCS8qIGxhc3QgcmF3IGJpdCBzZWVuICovCi0JdTMyIGNvZGU7CQkJLyogcmF3IGNvZGUgdW5kZXIgY29uc3RydWN0aW9uICovCi0Jc3RydWN0IHRpbWV2YWwgYmFzZV90aW1lOwkvKiB0aW1lIG9mIGxhc3Qgc2VlbiBjb2RlICovCi0JaW50IGFjdGl2ZTsJCQkvKiBidWlsZGluZyByYXcgY29kZSAqLwotfTsKLQogc3RydWN0IHR2Y2FyZAogewogCWNoYXIgKm5hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKaW5kZXggMzExYzRjNS4uYWQ3OWI4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaApAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBfQlRUVlBfSF8KIAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNkZWZpbmUgQlRUVl9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCw5LDE2KQorI2RlZmluZSBCVFRWX1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLDksMTcpCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KQEAgLTY2LDE0ICs2NiwyMiBAQAogI2RlZmluZSBSSVNDX1NMT1RfTE9PUCAgICAgICAgMTQKIAogI2RlZmluZSBSRVNPVVJDRV9PVkVSTEFZICAgICAgIDEKLSNkZWZpbmUgUkVTT1VSQ0VfVklERU8gICAgICAgICAyCisjZGVmaW5lIFJFU09VUkNFX1ZJREVPX1NUUkVBTSAgMgogI2RlZmluZSBSRVNPVVJDRV9WQkkgICAgICAgICAgIDQKKyNkZWZpbmUgUkVTT1VSQ0VfVklERU9fUkVBRCAgICA4CiAKICNkZWZpbmUgUkFXX0xJTkVTICAgICAgICAgICAgNjQwCiAjZGVmaW5lIFJBV19CUEwgICAgICAgICAgICAgMTAyNAogCiAjZGVmaW5lIFVOU0VUICgtMVUpCiAKKy8qIE1pbi4gdmFsdWUgaW4gVkRFTEFZIHJlZ2lzdGVyLiAqLworI2RlZmluZSBNSU5fVkRFTEFZIDIKKy8qIEV2ZW4gdG8gZ2V0IENiIGZpcnN0LCBvZGQgZm9yIENyLiAqLworI2RlZmluZSBNQVhfSERFTEFZICgweDNGRiAmIC0yKQorLyogTGltaXRzIHNjYWxlZCB3aWR0aCwgd2hpY2ggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuICovCisjZGVmaW5lIE1BWF9IQUNUSVZFICgweDNGRiAmIC00KQorCiAjZGVmaW5lIGNsYW1wKHgsIGxvdywgaGlnaCkgbWluIChtYXggKGxvdywgeCksIGhpZ2gpCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTkyLDggKzEwMCwxMyBAQAogCXUxNiAgIHZ0b3RhbDsKIAlpbnQgICBzcmFtOwogCS8qIElUVS1SIGZyYW1lIGxpbmUgbnVtYmVyIG9mIHRoZSBmaXJzdCBWQkkgbGluZSB3ZSBjYW4KLQkgICBjYXB0dXJlLCBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBmaWVsZC4gKi8KKwkgICBjYXB0dXJlLCBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBmaWVsZC4gVGhlIGxhc3QgcG9zc2libGUgbGluZQorCSAgIGlzIGRldGVybWluZWQgYnkgY3JvcGNhcC5ib3VuZHMuICovCiAJdTE2ICAgdmJpc3RhcnRbMl07CisJLyogSG9yaXpvbnRhbGx5IHRoaXMgY291bnRzIGZDTEt4MSBzYW1wbGVzIGZvbGxvd2luZyB0aGUgbGVhZGluZworCSAgIGVkZ2Ugb2YgdGhlIGhvcml6b250YWwgc3luYyBwdWxzZSwgdmVydGljYWxseSBJVFUtUiBmcmFtZSBsaW5lCisJICAgbnVtYmVycyBvZiB0aGUgZmlyc3QgZmllbGQgdGltZXMgdHdvICgyLCA0LCA2LCAuLi4gNTI0IG9yIDYyNCkuICovCisJc3RydWN0IHY0bDJfY3JvcGNhcCBjcm9wY2FwOwogfTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gYnR0dl90dm5vcm1zW107CiAKQEAgLTEyOCw2ICsxNDEsOSBAQAogCXN0cnVjdCBidHR2X2dlb21ldHJ5ICAgICAgIGdlbzsKIAlzdHJ1Y3QgYnRjeF9yaXNjbWVtICAgICAgICB0b3A7CiAJc3RydWN0IGJ0Y3hfcmlzY21lbSAgICAgICAgYm90dG9tOworCXN0cnVjdCB2NGwyX3JlY3QgICAgICAgICAgIGNyb3A7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgdmJpX3NraXBbMl07CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgdmJpX2NvdW50WzJdOwogfTsKIAogc3RydWN0IGJ0dHZfYnVmZmVyX3NldCB7CkBAIC0xNDYsNiArMTYyLDM0IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICBzZXR1cF9vazsKIH07CiAKK3N0cnVjdCBidHR2X3ZiaV9mbXQgeworCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgZm10OworCisJLyogZm10LnN0YXJ0W10gYW5kIGNvdW50W10gcmVmZXIgdG8gdGhpcyB2aWRlbyBzdGFuZGFyZC4gKi8KKwljb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gKnR2bm9ybTsKKworCS8qIEVhcmxpZXN0IHBvc3NpYmxlIHN0YXJ0IG9mIHZpZGVvIGNhcHR1cmluZyB3aXRoIHRoaXMKKwkgICB2NGwyX3ZiaV9mb3JtYXQsIGluIHN0cnVjdCBidHR2X2Nyb3AucmVjdCB1bml0cy4gKi8KKwlfX3MzMiAgICAgICAgICAgICAgICAgIGVuZDsKK307CisKKy8qIGJ0dHYtdmJpLmMgKi8KK3ZvaWQgYnR0dl92YmlfZm10X3Jlc2V0KHN0cnVjdCBidHR2X3ZiaV9mbXQgKmYsIGludCBub3JtKTsKKworc3RydWN0IGJ0dHZfY3JvcCB7CisJLyogQSBjcm9wcGluZyByZWN0YW5nbGUgaW4gc3RydWN0IGJ0dHZfdHZub3JtLmNyb3BjYXAgdW5pdHMuICovCisJc3RydWN0IHY0bDJfcmVjdCAgICAgICByZWN0OworCisJLyogU2NhbGVkIGltYWdlIHNpemUgbGltaXRzIHdpdGggdGhpcyBjcm9wIHJlY3QuIERpdmlkZQorCSAgIG1heF9oZWlnaHQsIGJ1dCBub3QgbWluX2hlaWdodCwgYnkgdHdvIHdoZW4gY2FwdHVyaW5nCisJICAgc2luZ2xlIGZpZWxkcy4gU2VlIGFsc28gYnR0dl9jcm9wX3Jlc2V0KCkgYW5kCisJICAgYnR0dl9jcm9wX2FkanVzdCgpIGluIGJ0dHYtZHJpdmVyLmMuICovCisJX19zMzIgICAgICAgICAgICAgICAgICBtaW5fc2NhbGVkX3dpZHRoOworCV9fczMyICAgICAgICAgICAgICAgICAgbWluX3NjYWxlZF9oZWlnaHQ7CisJX19zMzIgICAgICAgICAgICAgICAgICBtYXhfc2NhbGVkX3dpZHRoOworCV9fczMyICAgICAgICAgICAgICAgICAgbWF4X3NjYWxlZF9oZWlnaHQ7Cit9OworCiBzdHJ1Y3QgYnR0dl9maCB7CiAJc3RydWN0IGJ0dHYgICAgICAgICAgICAgICpidHY7CiAJaW50IHJlc291cmNlczsKQEAgLTE2MCwxMyArMjA0LDE5IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOwogCWludCAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ7CiAKLQkvKiBjdXJyZW50IHNldHRpbmdzICovCisJLyogdmlkZW8gb3ZlcmxheSAqLwogCWNvbnN0IHN0cnVjdCBidHR2X2Zvcm1hdCAqb3ZmbXQ7CiAJc3RydWN0IGJ0dHZfb3ZlcmxheSAgICAgIG92OwogCi0JLyogdmlkZW8gb3ZlcmxheSAqLworCS8qIEFwcGxpY2F0aW9uIGNhbGxlZCBWSURJT0NfU19DUk9QLiAqLworCWludCAgICAgICAgICAgICAgICAgICAgICBkb19jcm9wOworCisJLyogdmJpIGNhcHR1cmUgKi8KIAlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgICAgdmJpOwotCWludCAgICAgICAgICAgICAgICAgICAgICBsaW5lczsKKwkvKiBDdXJyZW50IFZCSSBjYXB0dXJlIHdpbmRvdyBhcyBzZWVuIHRocm91Z2ggdGhpcyBmaCAoY2Fubm90CisJICAgYmUgZ2xvYmFsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciBkcml2ZXJzKS4gUHJvdGVjdGVkCisJICAgYnkgc3RydWN0IGJ0dHYubG9jayBhbmQgc3RydWN0IGJ0dHZfZmgudmJpLmxvY2suICovCisJc3RydWN0IGJ0dHZfdmJpX2ZtdCAgICAgIHZiaV9mbXQ7CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNzYsNyArMjI2LDggQEAKIGludCBidHR2X3Jpc2NfcGFja2VkKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCBidGN4X3Jpc2NtZW0gKnJpc2MsCiAJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCiAJCSAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGJwbCwKLQkJICAgICB1bnNpZ25lZCBpbnQgcGl0Y2gsIHVuc2lnbmVkIGludCBsaW5lcyk7CisJCSAgICAgdW5zaWduZWQgaW50IHBpdGNoLCB1bnNpZ25lZCBpbnQgc2tpcF9saW5lcywKKwkJICAgICB1bnNpZ25lZCBpbnQgc3RvcmVfbGluZXMpOwogCiAvKiBjb250cm9sIGRtYSByZWdpc3RlciArIHJpc2MgbWFpbiBsb29wICovCiB2b2lkIGJ0dHZfc2V0X2RtYShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgb3ZlcnJpZGUpOwpAQCAtMjAyLDkgKzI1Myw5IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBidHR2LXZiaS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLXZvaWQgYnR0dl92YmlfdHJ5X2ZtdChzdHJ1Y3QgYnR0dl9maCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZik7Ci12b2lkIGJ0dHZfdmJpX2dldF9mbXQoc3RydWN0IGJ0dHZfZmggKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwotdm9pZCBidHR2X3ZiaV9zZXRsaW5lcyhzdHJ1Y3QgYnR0dl9maCAqZmgsIHN0cnVjdCBidHR2ICpidHYsIGludCBsaW5lcyk7CitpbnQgYnR0dl92YmlfdHJ5X2ZtdChzdHJ1Y3QgYnR0dl9maCAqZmgsIHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKmYpOwordm9pZCBidHR2X3ZiaV9nZXRfZm10KHN0cnVjdCBidHR2X2ZoICpmaCwgc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCAqZik7CitpbnQgYnR0dl92Ymlfc2V0X2ZtdChzdHJ1Y3QgYnR0dl9maCAqZmgsIHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKmYpOwogCiBleHRlcm4gc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBidHR2X3ZiaV9xb3BzOwogCkBAIC0yMzMsNyArMjg0LDYgQEAKICNkZWZpbmUgZDJwcmludGsgaWYgKGJ0dHZfZGVidWcgPj0gMikgcHJpbnRrCiAKICNkZWZpbmUgQlRUVl9NQVhfRkJVRiAgIDB4MjA4MDAwCi0jZGVmaW5lIFZCSUJVRl9TSVpFICAgICAoMjA0OCpWQklfTUFYTElORVMqMikKICNkZWZpbmUgQlRUVl9USU1FT1VUICAgIChIWi8yKSAvKiAwLjUgc2Vjb25kcyAqLwogI2RlZmluZSBCVFRWX0ZSRUVfSURMRSAgKEhaKSAgIC8qIG9uZSBzZWNvbmQgKi8KIApAQCAtMzA4LDEzICszNTgsMTIgQEAKIAogCS8qIGluZnJhcmVkIHJlbW90ZSAqLwogCWludCBoYXNfcmVtb3RlOwotCXN0cnVjdCBidHR2X2lyICpyZW1vdGU7CisJc3RydWN0IGNhcmRfaXIgKnJlbW90ZTsKIAogCS8qIGxvY2tpbmcgKi8KIAlzcGlubG9ja190IHNfbG9jazsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlpbnQgcmVzb3VyY2VzOwotCXN0cnVjdCBtdXRleCByZXNsb2NrOwogI2lmZGVmIFZJRElPQ19HX1BSSU9SSVRZCiAJc3RydWN0IHY0bDJfcHJpb19zdGF0ZSBwcmlvOwogI2VuZGlmCkBAIC0zODQsNiArNDMzLDIxIEBACiAKIAl1bnNpZ25lZCBpbnQgdXNlcnM7CiAJc3RydWN0IGJ0dHZfZmggaW5pdDsKKworCS8qIERlZmF1bHQgKDApIGFuZCBjdXJyZW50ICgxKSB2aWRlbyBjYXB0dXJpbmcgYW5kIG92ZXJsYXkKKwkgICBjcm9wcGluZyBwYXJhbWV0ZXJzIGluIGJ0dHZfdHZub3JtLmNyb3BjYXAgdW5pdHMuIFByb3RlY3RlZAorCSAgIGJ5IGJ0dHYubG9jay4gKi8KKwlzdHJ1Y3QgYnR0dl9jcm9wIGNyb3BbMl07CisKKwkvKiBFYXJsaWVzdCBwb3NzaWJsZSBzdGFydCBvZiB2aWRlbyBjYXB0dXJpbmcgaW4KKwkgICBidHR2X3R2bm9ybS5jcm9wY2FwIGxpbmUgdW5pdHMuIFNldCBieSBjaGVja19hbGxvY19idHJlcygpCisJICAgYW5kIGZyZWVfYnRyZXMoKS4gUHJvdGVjdGVkIGJ5IGJ0dHYubG9jay4gKi8KKwlfX3MzMgkJCXZiaV9lbmQ7CisKKwkvKiBMYXRlc3QgcG9zc2libGUgZW5kIG9mIFZCSSBjYXB0dXJpbmcgKD0gY3JvcFt4XS5yZWN0LnRvcCB3aGVuCisJICAgVklERU9fUkVTT1VSQ0VTIGFyZSBsb2NrZWQpLiBTZXQgYnkgY2hlY2tfYWxsb2NfYnRyZXMoKQorCSAgIGFuZCBmcmVlX2J0cmVzKCkuIFByb3RlY3RlZCBieSBidHR2LmxvY2suICovCisJX19zMzIJCQljcm9wX3N0YXJ0OwogfTsKIAogLyogb3VyIGRldmljZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IDRkYWU4OTIuLjY4MmRjN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtMTE5NSw3ICsxMTk1LDcgQEAKIAkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSkKIHsKIAlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOyAgLyogU2lsZW5jZSB3YXJuaW5nICovCiAKIAkvKgogCSAqIE1ha2Ugc3VyZSBpdCdzIHNvbWV0aGluZyB3ZSBjYW4gZG8uICBVc2VyIHBvaW50ZXJzIGNvdWxkIGJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCmluZGV4IDdlOGQ1ZWYuLjc4Yzk2OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCkBAIC0xMzUwLDEzICsxMzUwLDEzIEBACiAKIHN0YXRpYyB2b2lkIGNyZWF0ZV9wcm9jX2NwaWFfY2FtKHN0cnVjdCBjYW1fZGF0YSAqY2FtKQogewotCWNoYXIgbmFtZVs3XTsKKwljaGFyIG5hbWVbNSArIDEgKyAxMCArIDFdOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwogCiAJaWYgKCFjcGlhX3Byb2Nfcm9vdCB8fCAhY2FtKQogCQlyZXR1cm47CiAKLQlzcHJpbnRmKG5hbWUsICJ2aWRlbyVkIiwgY2FtLT52ZGV2Lm1pbm9yKTsKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ2aWRlbyVkIiwgY2FtLT52ZGV2Lm1pbm9yKTsKIAogCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIFNfSUZSRUd8U19JUlVHT3xTX0lXVVNSLCBjcGlhX3Byb2Nfcm9vdCk7CiAJaWYgKCFlbnQpCkBAIC0xMzc2LDEyICsxMzc2LDEyIEBACiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfcHJvY19jcGlhX2NhbShzdHJ1Y3QgY2FtX2RhdGEgKmNhbSkKIHsKLQljaGFyIG5hbWVbN107CisJY2hhciBuYW1lWzUgKyAxICsgMTAgKyAxXTsKIAogCWlmICghY2FtIHx8ICFjYW0tPnByb2NfZW50cnkpCiAJCXJldHVybjsKIAotCXNwcmludGYobmFtZSwgInZpZGVvJWQiLCBjYW0tPnZkZXYubWlub3IpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInZpZGVvJWQiLCBjYW0tPnZkZXYubWlub3IpOwogCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIGNwaWFfcHJvY19yb290KTsKIAljYW0tPnByb2NfZW50cnkgPSBOVUxMOwogfQpAQCAtMzE1Myw4ICszMTUzLDcgQEAKIAogc3RhdGljIHZvaWQgcHV0X2NhbShzdHJ1Y3QgY3BpYV9jYW1lcmFfb3BzKiBvcHMpCiB7Ci0JaWYgKG9wcy0+b3duZXIpCi0JCW1vZHVsZV9wdXQob3BzLT5vd25lcik7CisJbW9kdWxlX3B1dChvcHMtPm93bmVyKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWNEwgaW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYwppbmRleCAyZjVjYTcxLi5kNjBjZDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYwpAQCAtNTYsNyArNTYsNiBAQAogCVY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVMsCiAJVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRSwKIAlWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFLAotCVY0TDJfQ0lEX01QRUdfVklERU9fUFVMTERPV04sCiAJVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREUsCiAJVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFLAogCVY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLLApAQCAtMTE4LDkgKzExNyw2IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFOgogCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dmlkZW9fZ29wX2Nsb3N1cmU7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTjoKLQkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPnZpZGVvX3B1bGxkb3duOwotCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgogCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dmlkZW9fYml0cmF0ZV9tb2RlOwogCQlicmVhazsKQEAgLTIzMSw5ICsyMjcsNiBAQAogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRToKIAkJcGFyYW1zLT52aWRlb19nb3BfY2xvc3VyZSA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fUFVMTERPV046Ci0JCXBhcmFtcy0+dmlkZW9fcHVsbGRvd24gPSBjdHJsLT52YWx1ZTsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERToKIAkJLyogTVBFRy0xIG9ubHkgYWxsb3dzIENCUiAqLwogCQlpZiAocGFyYW1zLT52aWRlb19lbmNvZGluZyA9PSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xICYmCkBAIC02NzksNyArNjcyLDYgQEAKIAkudmlkZW9fYl9mcmFtZXMgPSAyLAogCS52aWRlb19nb3Bfc2l6ZSA9IDEyLAogCS52aWRlb19nb3BfY2xvc3VyZSA9IDEsCi0JLnZpZGVvX3B1bGxkb3duID0gMCwKIAkudmlkZW9fYml0cmF0ZV9tb2RlID0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIsCiAJLnZpZGVvX2JpdHJhdGUgPSA2MDAwMDAwLAogCS52aWRlb19iaXRyYXRlX3BlYWsgPSA4MDAwMDAwLApAQCAtNzgzLDEwICs3NzUsNiBAQAogCQllcnIgPSBjeDIzNDF4X2FwaShwcml2LCBmdW5jLCBDWDIzNDFYX0VOQ19TRVRfR09QX0NMT1NVUkUsIDEsIG5ldy0+dmlkZW9fZ29wX2Nsb3N1cmUpOwogCQlpZiAoZXJyKSByZXR1cm4gZXJyOwogCX0KLQlpZiAob2xkID09IE5VTEwgfHwgb2xkLT52aWRlb19wdWxsZG93biAhPSBuZXctPnZpZGVvX3B1bGxkb3duKSB7Ci0JCWVyciA9IGN4MjM0MXhfYXBpKHByaXYsIGZ1bmMsIENYMjM0MVhfRU5DX1NFVF8zXzJfUFVMTERPV04sIDEsIG5ldy0+dmlkZW9fcHVsbGRvd24pOwotCQlpZiAoZXJyKSByZXR1cm4gZXJyOwotCX0KIAlpZiAob2xkID09IE5VTEwgfHwgb2xkLT5hdWRpb19wcm9wZXJ0aWVzICE9IG5ldy0+YXVkaW9fcHJvcGVydGllcykgewogCQllcnIgPSBjeDIzNDF4X2FwaShwcml2LCBmdW5jLCBDWDIzNDFYX0VOQ19TRVRfQVVESU9fUFJPUEVSVElFUywgMSwgbmV3LT5hdWRpb19wcm9wZXJ0aWVzKTsKIAkJaWYgKGVycikgcmV0dXJuIGVycjsKQEAgLTg4OCwxMSArODc2LDEwIEBACiAJCXByaW50aygiLCBQZWFrICVkIiwgcC0+dmlkZW9fYml0cmF0ZV9wZWFrKTsKIAl9CiAJcHJpbnRrKCJcbiIpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBWaWRlbzogIEdPUCBTaXplICVkLCAlZCBCLUZyYW1lcywgJXNHT1AgQ2xvc3VyZSwgJXMzOjIgUHVsbGRvd25cbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFZpZGVvOiAgR09QIFNpemUgJWQsICVkIEItRnJhbWVzLCAlc0dPUCBDbG9zdXJlXG4iLAogCQlwcmVmaXgsCiAJCXAtPnZpZGVvX2dvcF9zaXplLCBwLT52aWRlb19iX2ZyYW1lcywKLQkJcC0+dmlkZW9fZ29wX2Nsb3N1cmUgPyAiIiA6ICJObyAiLAotCQlwLT52aWRlb19wdWxsZG93biA/ICIiIDogIk5vICIpOworCQlwLT52aWRlb19nb3BfY2xvc3VyZSA/ICIiIDogIk5vICIpOwogCWlmIChwLT52aWRlb190ZW1wb3JhbF9kZWNpbWF0aW9uKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBWaWRlbzogVGVtcG9yYWwgRGVjaW1hdGlvbiAlZFxuIiwKIAkJCXByZWZpeCwgcC0+dmlkZW9fdGVtcG9yYWxfZGVjaW1hdGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggN2JiNzU4OS4uY2M1MzVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwpAQCAtNjI4LDE3ICs2MjgsOCBAQAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIAkvKiBpb2N0bHMgdG8gYWxsb3cgZGlyZWN0IGFjY2VzcyB0byB0aGUKIAkgKiBjeDI1ODQwIHJlZ2lzdGVycyBmb3IgdGVzdGluZyAqLwotCWNhc2UgVklESU9DX0lOVF9HX1JFR0lTVEVSOgotCXsKLQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKLQotCQlpZiAocmVnLT5pMmNfaWQgIT0gSTJDX0RSSVZFUklEX0NYMjU4NDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmVnLT52YWwgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCByZWctPnJlZyAmIDB4MGZmZik7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0lOVF9TX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgogCXsKIAkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKIApAQCAtNjQ2LDcgKzYzNywxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07Ci0JCWN4MjU4NDBfd3JpdGUoY2xpZW50LCByZWctPnJlZyAmIDB4MGZmZiwgcmVnLT52YWwgJiAweGZmKTsKKwkJaWYgKGNtZCA9PSBWSURJT0NfREJHX0dfUkVHSVNURVIpCisJCQlyZWctPnZhbCA9IGN4MjU4NDBfcmVhZChjbGllbnQsIHJlZy0+cmVnICYgMHgwZmZmKTsKKwkJZWxzZQorCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIHJlZy0+cmVnICYgMHgwZmZmLCByZWctPnZhbCAmIDB4ZmYpOwogCQlicmVhazsKIAl9CiAjZW5kaWYKQEAgLTg5Myw5ICs4ODcsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyogTm90ZTogcmV2aXNpb24gJyhkZXZpY2VfaWQgJiAweDBmKSA9PSAyJyB3YXMgbmV2ZXIgYnVpbHQuIFRoZQorCSAgIG1hcmtpbmcgc2tpcHMgZnJvbSAweDEgPT0gMjIgdG8gMHgzID09IDIzLiAqLwogCXY0bF9pbmZvKGNsaWVudCwgImN4MjUlM3gtMiV4IGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkgICAgKGRldmljZV9pZCAmIDB4ZmZmMCkgPj4gNCwKLQkJICAgIChkZXZpY2VfaWQgJiAweDBmKSA8IDMgPyAoZGV2aWNlX2lkICYgMHgwZikgKyAxIDogMywKKwkJICAgIChkZXZpY2VfaWQgJiAweDBmKSA8IDMgPyAoZGV2aWNlX2lkICYgMHgwZikgKyAxIDogKGRldmljZV9pZCAmIDB4MGYpLAogCQkgICAgYWRkcmVzcyA8PCAxLCBhZGFwdGVyLT5uYW1lKTsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQppbmRleCA2MzljM2I2Li41MzJjZWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCkBAIC0xMiw4ICsxMiwzIEBACiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCi0KLWV4dHJhLWNmbGFncy0kKENPTkZJR19WSURFT19CVUZfRFZCKSArPSAtREhBVkVfVklERU9fQlVGX0RWQj0xCi1leHRyYS1jZmxhZ3MtJChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpKz0gLURIQVZFX1ZQMzA1NF9JMkM9MQotCi1FWFRSQV9DRkxBR1MgKz0gJChleHRyYS1jZmxhZ3MteSkgJChleHRyYS1jZmxhZ3MtbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKaW5kZXggOWE3YTI5OS4uYTFiZTFlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKQEAgLTYsNiArNiw5IEBACiAgKiAgICAoYykgMjAwNCBKZWxsZSBGb2tzIDxqZWxsZUBmb2tzLjhtLmNvbT4KICAqICAgIChjKSAyMDA0IEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4KICAqCisgKiAgICAoYykgMjAwNS0yMDA2IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgorICogICAgICAgIC0gdmlkZW9faW9jdGwyIGNvbnZlcnNpb24KKyAqCiAgKiAgSW5jbHVkZXMgcGFydHMgZnJvbSB0aGUgaXZ0diBkcml2ZXIoIGh0dHA6Ly9pdnR2LnNvdXJjZWZvcmdlLm5ldC8pLAogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTIwLDcgKzUyMyw3IEBACiAKIAlkZXYtPnBhcmFtcy53aWR0aCA9IGRldi0+d2lkdGg7CiAJZGV2LT5wYXJhbXMuaGVpZ2h0ID0gZGV2LT5oZWlnaHQ7Ci0JZGV2LT5wYXJhbXMuaXNfNTBoeiA9IChkZXYtPmNvcmUtPnR2bm9ybS0+aWQgJiBWNEwyX1NURF82MjVfNTApICE9IDA7CisJZGV2LT5wYXJhbXMuaXNfNTBoeiA9IChkZXYtPmNvcmUtPnR2bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgIT0gMDsKIAogCWN4MjM0MXhfdXBkYXRlKGRldiwgYmxhY2tiaXJkX21ib3hfZnVuYywgTlVMTCwgJmRldi0+cGFyYW1zKTsKIH0KQEAgLTcxMCw4ICs3MTMsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBibGFja2JpcmRfcXVlcnltZW51KHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUpCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIElPQ1RMIEhhbmRsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeW1lbnUgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUpCiB7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiAgPSAoKHN0cnVjdCBjeDg4MDJfZmggKilwcml2KS0+ZGV2OwogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKIAogCXFjdHJsLmlkID0gcW1lbnUtPmlkOwpAQCAtNzE5LDIyMSArNzI3LDM0NyBAQAogCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfbWVudShxbWVudSwgJnFjdHJsLCBjeDIzNDF4X2N0cmxfZ2V0X21lbnUocW1lbnUtPmlkKSk7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IG1wZWdfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewotCXN0cnVjdCBjeDg4MDJfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiAgPSAoKHN0cnVjdCBjeDg4MDJfZmggKilwcml2KS0+ZGV2OwogCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gZGV2LT5jb3JlOwogCi0JaWYgKGRlYnVnID4gMSkKLQkJdjRsX3ByaW50X2lvY3RsKGNvcmUtPm5hbWUsY21kKTsKLQotCXN3aXRjaCAoY21kKSB7Ci0KLQkvKiAtLS0gY2FwYWJpbGl0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCWNhc2UgVklESU9DX1FVRVJZQ0FQOgotCXsKLQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCW1lbXNldChjYXAsMCxzaXplb2YoKmNhcCkpOwotCQlzdHJjcHkoY2FwLT5kcml2ZXIsICJjeDg4X2JsYWNrYmlyZCIpOwotCQlzdHJsY3B5KGNhcC0+Y2FyZCwgY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm5hbWUsc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCQlzcHJpbnRmKGNhcC0+YnVzX2luZm8sIlBDSTolcyIscGNpX25hbWUoZGV2LT5wY2kpKTsKLQkJY2FwLT52ZXJzaW9uID0gQ1g4OF9WRVJTSU9OX0NPREU7Ci0JCWNhcC0+Y2FwYWJpbGl0aWVzID0KLQkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAotCQkJVjRMMl9DQVBfUkVBRFdSSVRFICAgICB8Ci0JCQlWNEwyX0NBUF9TVFJFQU1JTkcgICAgIHwKLQkJCTA7Ci0JCWlmIChVTlNFVCAhPSBjb3JlLT50dW5lcl90eXBlKQotCQkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVFVORVI7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogLS0tIGNhcHR1cmUgaW9jdGxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQljYXNlIFZJRElPQ19FTlVNX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYgPSBhcmc7Ci0JCWludCBpbmRleDsKLQotCQlpbmRleCA9IGYtPmluZGV4OwotCQlpZiAoaW5kZXggIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldChmLDAsc2l6ZW9mKCpmKSk7Ci0JCWYtPmluZGV4ID0gaW5kZXg7Ci0JCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sICJNUEVHIiwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7Ci0JCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01QRUc7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQotCQltZW1zZXQoZiwwLHNpemVvZigqZikpOwotCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOwotCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7Ci0JCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gZGV2LT50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHNfcGFja2V0X2NvdW50OyAvKiAxODggKiA0ICogMTAyNDsgKi8KLQkJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOwotCQlmLT5mbXQucGl4LndpZHRoICAgICAgICA9IGRldi0+d2lkdGg7Ci0JCWYtPmZtdC5waXguaGVpZ2h0ICAgICAgID0gZGV2LT5oZWlnaHQ7Ci0JCWYtPmZtdC5waXguZmllbGQgICAgICAgID0gZmgtPm1wZWdxLmZpZWxkOwotCQlkcHJpbnRrKDAsIlZJRElPQ19HX0ZNVDogdzogJWQsIGg6ICVkLCBmOiAlZFxuIiwKLQkJCWRldi0+d2lkdGgsIGRldi0+aGVpZ2h0LCBmaC0+bXBlZ3EuZmllbGQgKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0KLQkJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKLQkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9IGRldi0+dHNfcGFja2V0X3NpemUgKiBkZXYtPnRzX3BhY2tldF9jb3VudDsgLyogMTg4ICogNCAqIDEwMjQ7ICovOwotCQlmLT5mbXQucGl4LmNvbG9yc3BhY2UgICA9IDA7Ci0JCWRwcmludGsoMCwiVklESU9DX1RSWV9GTVQ6IHc6ICVkLCBoOiAlZCwgZjogJWRcbiIsCi0JCQlkZXYtPndpZHRoLCBkZXYtPmhlaWdodCwgZmgtPm1wZWdxLmZpZWxkICk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQotCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOwotCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7Ci0JCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gZGV2LT50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHNfcGFja2V0X2NvdW50OyAvKiAxODggKiA0ICogMTAyNDsgKi87Ci0JCWYtPmZtdC5waXguY29sb3JzcGFjZSAgID0gMDsKLQkJZHByaW50aygwLCJWSURJT0NfU19GTVQ6IHc6ICVkLCBoOiAlZCwgZjogJWRcbiIsCi0JCQlmLT5mbXQucGl4LndpZHRoLCBmLT5mbXQucGl4LmhlaWdodCwgZi0+Zm10LnBpeC5maWVsZCApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiAtLS0gc3RyZWFtaW5nIGNhcHR1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCWNhc2UgVklESU9DX1JFUUJVRlM6Ci0JCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+bXBlZ3EsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19RVUVSWUJVRjoKLQkJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKCZmaC0+bXBlZ3EsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19RQlVGOgotCQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPm1wZWdxLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfRFFCVUY6Ci0JCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmZmgtPm1wZWdxLCBhcmcsCi0JCQkJICAgICAgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCi0JY2FzZSBWSURJT0NfU1RSRUFNT046Ci0JCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPm1wZWdxKTsKLQotCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKLQkJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPm1wZWdxKTsKLQotCS8qIC0tLSBtcGVnIGNvbXByZXNzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JY2FzZSBWSURJT0NfR19NUEVHQ09NUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gKmYgPSBhcmc7Ci0KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVklESU9DX0dfTVBFR0NPTVAgaXMgb2Jzb2xldGUuICIKLQkJCQkgICAgIlJlcGxhY2Ugd2l0aCBWSURJT0NfR19FWFRfQ1RSTFMhIik7Ci0JCW1lbWNweShmLCZkZWZhdWx0X21wZWdfcGFyYW1zLHNpemVvZigqZikpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19NUEVHQ09NUDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVklESU9DX1NfTVBFR0NPTVAgaXMgb2Jzb2xldGUuICIKLQkJCQkgICAgIlJlcGxhY2Ugd2l0aCBWSURJT0NfU19FWFRfQ1RSTFMhIik7Ci0JCXJldHVybiAwOwotCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgotCXsKLQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpmID0gYXJnOwotCi0JCWlmIChmLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBjeDIzNDF4X2V4dF9jdHJscygmZGV2LT5wYXJhbXMsIGYsIGNtZCk7Ci0JfQotCWNhc2UgVklESU9DX1NfRVhUX0NUUkxTOgotCWNhc2UgVklESU9DX1RSWV9FWFRfQ1RSTFM6Ci0JewotCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmYgPSBhcmc7Ci0JCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zIHA7Ci0JCWludCBlcnI7Ci0KLQkJaWYgKGYtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcCA9IGRldi0+cGFyYW1zOwotCQllcnIgPSBjeDIzNDF4X2V4dF9jdHJscygmcCwgZiwgY21kKTsKLQkJaWYgKGVyciA9PSAwICYmIGNtZCA9PSBWSURJT0NfU19FWFRfQ1RSTFMpIHsKLQkJCWVyciA9IGN4MjM0MXhfdXBkYXRlKGRldiwgYmxhY2tiaXJkX21ib3hfZnVuYywgJmRldi0+cGFyYW1zLCAmcCk7Ci0JCQlkZXYtPnBhcmFtcyA9IHA7Ci0JCX0KLQkJcmV0dXJuIGVycjsKLQl9Ci0JY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JewotCQlibGFja2JpcmRfYXBpX2NtZChmaC0+ZGV2LCBDWDIzNDFYX0VOQ19TVE9QX0NBUFRVUkUsIDMsIDAsCi0JCQkJICBCTEFDS0JJUkRfRU5EX05PVywKLQkJCQkgIEJMQUNLQklSRF9NUEVHX0NBUFRVUkUsCi0JCQkJICBCTEFDS0JJUkRfUkFXX0JJVFNfTk9ORSk7Ci0KLQkJY3g4OF9kb19pb2N0bChpbm9kZSwgZmlsZSwgMCwgZGV2LT5jb3JlLCBjbWQsIGFyZywgY3g4OF9pb2N0bF9ob29rKTsKLQotCQlibGFja2JpcmRfaW5pdGlhbGl6ZV9jb2RlYyhkZXYpOwotCQljeDg4X3NldF9zY2FsZShkZXYtPmNvcmUsIGRldi0+d2lkdGgsIGRldi0+aGVpZ2h0LAotCQkJICAgICAgIGZoLT5tcGVncS5maWVsZCk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgotCXsKLQkJY2hhciBuYW1lWzMyICsgMl07Ci0KLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvMiIsIGNvcmUtPm5hbWUpOwotCQlwcmludGsoIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAotCQkgICAgICAgY29yZS0+bmFtZSk7Ci0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBWSURJT0NfTE9HX1NUQVRVUywgTlVMTCk7Ci0JCWN4MjM0MXhfbG9nX3N0YXR1cygmZGV2LT5wYXJhbXMsIG5hbWUpOwotCQlwcmludGsoIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAotCQkgICAgICAgY29yZS0+bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19RVUVSWU1FTlU6Ci0JCXJldHVybiBibGFja2JpcmRfcXVlcnltZW51KGRldiwgYXJnKTsKLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMgPSBhcmc7Ci0KLQkJaWYgKGJsYWNrYmlyZF9xdWVyeWN0cmwoZGV2LCBjKSA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JCXJldHVybiBjeDg4X2RvX2lvY3RsKGlub2RlLCBmaWxlLCAwLCBkZXYtPmNvcmUsIGNtZCwgYXJnLCBtcGVnX2RvX2lvY3RsKTsKLQl9Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gY3g4OF9kb19pb2N0bChpbm9kZSwgZmlsZSwgMCwgZGV2LT5jb3JlLCBjbWQsIGFyZywgY3g4OF9pb2N0bF9ob29rKTsKLQl9CisJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiY3g4OF9ibGFja2JpcmQiKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm5hbWUsc2l6ZW9mKGNhcC0+Y2FyZCkpOworCXNwcmludGYoY2FwLT5idXNfaW5mbywiUENJOiVzIixwY2lfbmFtZShkZXYtPnBjaSkpOworCWNhcC0+dmVyc2lvbiA9IENYODhfVkVSU0lPTl9DT0RFOworCWNhcC0+Y2FwYWJpbGl0aWVzID0KKwkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCVY0TDJfQ0FQX1JFQURXUklURSAgICAgfAorCQlWNEwyX0NBUF9TVFJFQU1JTkc7CisJaWYgKFVOU0VUICE9IGNvcmUtPnR1bmVyX3R5cGUpCisJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOwogCXJldHVybiAwOwogfQogCi1pbnQgKCpjeDg4X2lvY3RsX2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLXVuc2lnbmVkIGludCAoKmN4ODhfaW9jdGxfdHJhbnNsYXRvcikodW5zaWduZWQgaW50IGNtZCk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXBlZ190cmFuc2xhdGVfaW9jdGwodW5zaWduZWQgaW50IGNtZCkKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X2NhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQogewotCXJldHVybiBjbWQ7CisJaWYgKGYtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgIk1QRUciLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01QRUc7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXBlZ19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCB2aWRpb2NfZ19mbXRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCWNtZCA9IGN4ODhfaW9jdGxfdHJhbnNsYXRvciggY21kICk7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgY3g4OF9pb2N0bF9ob29rKTsKKwlzdHJ1Y3QgY3g4ODAyX2ZoICAqZmggICA9IHByaXY7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiAgPSBmaC0+ZGV2OworCisJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOworCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKKwlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9IGRldi0+dHNfcGFja2V0X3NpemUgKiBkZXYtPnRzX3BhY2tldF9jb3VudDsgLyogMTg4ICogNCAqIDEwMjQ7ICovCisJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOworCWYtPmZtdC5waXgud2lkdGggICAgICAgID0gZGV2LT53aWR0aDsKKwlmLT5mbXQucGl4LmhlaWdodCAgICAgICA9IGRldi0+aGVpZ2h0OworCWYtPmZtdC5waXguZmllbGQgICAgICAgID0gZmgtPm1wZWdxLmZpZWxkOworCWRwcmludGsoMCwiVklESU9DX0dfRk1UOiB3OiAlZCwgaDogJWQsIGY6ICVkXG4iLAorCQlkZXYtPndpZHRoLCBkZXYtPmhlaWdodCwgZmgtPm1wZWdxLmZpZWxkICk7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY3g4ODAyX2ZoICAqZmggICA9IHByaXY7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiAgPSBmaC0+ZGV2OworCisJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOworCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKKwlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9IGRldi0+dHNfcGFja2V0X3NpemUgKiBkZXYtPnRzX3BhY2tldF9jb3VudDsgLyogMTg4ICogNCAqIDEwMjQ7ICovOworCWYtPmZtdC5waXguY29sb3JzcGFjZSAgID0gMDsKKwlkcHJpbnRrKDAsIlZJRElPQ19UUllfRk1UOiB3OiAlZCwgaDogJWQsIGY6ICVkXG4iLAorCQlkZXYtPndpZHRoLCBkZXYtPmhlaWdodCwgZmgtPm1wZWdxLmZpZWxkICk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X2NhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY3g4ODAyX2ZoICAqZmggICA9IHByaXY7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiAgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gZGV2LT5jb3JlOworCisJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOworCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKKwlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9IGRldi0+dHNfcGFja2V0X3NpemUgKiBkZXYtPnRzX3BhY2tldF9jb3VudDsgLyogMTg4ICogNCAqIDEwMjQ7ICovOworCWYtPmZtdC5waXguY29sb3JzcGFjZSAgID0gMDsKKwlkZXYtPndpZHRoICAgICAgICAgICAgICA9IGYtPmZtdC5waXgud2lkdGg7CisJZGV2LT5oZWlnaHQgICAgICAgICAgICAgPSBmLT5mbXQucGl4LmhlaWdodDsKKwlmaC0+bXBlZ3EuZmllbGQgICAgICAgICA9IGYtPmZtdC5waXguZmllbGQ7CisJY3g4OF9zZXRfc2NhbGUoY29yZSwgZi0+Zm10LnBpeC53aWR0aCwgZi0+Zm10LnBpeC5oZWlnaHQsIGYtPmZtdC5waXguZmllbGQpOworCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQ1gyMzQxWF9FTkNfU0VUX0ZSQU1FX1NJWkUsIDIsIDAsCisJCQkJZi0+Zm10LnBpeC5oZWlnaHQsIGYtPmZtdC5waXgud2lkdGgpOworCWRwcmludGsoMCwiVklESU9DX1NfRk1UOiB3OiAlZCwgaDogJWQsIGY6ICVkXG4iLAorCQlmLT5mbXQucGl4LndpZHRoLCBmLT5mbXQucGl4LmhlaWdodCwgZi0+Zm10LnBpeC5maWVsZCApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCit7CisJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OworCXJldHVybiAodmlkZW9idWZfcmVxYnVmcygmZmgtPm1wZWdxLCBwKSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCXN0cnVjdCBjeDg4MDJfZmggICpmaCAgID0gcHJpdjsKKwlyZXR1cm4gKHZpZGVvYnVmX3F1ZXJ5YnVmKCZmaC0+bXBlZ3EsIHApKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcWJ1ZiAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgY3g4ODAyX2ZoICAqZmggICA9IHByaXY7CisJcmV0dXJuICh2aWRlb2J1Zl9xYnVmKCZmaC0+bXBlZ3EsIHApKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OworCXJldHVybiAodmlkZW9idWZfZHFidWYoJmZoLT5tcGVncSwgcCwKKwkJCQlmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPm1wZWdxKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3g4ODAyX2ZoICAqZmggICA9IHByaXY7CisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPm1wZWdxKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19tcGVnY29tcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJICAgICAgc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiAqZikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICJWSURJT0NfR19NUEVHQ09NUCBpcyBvYnNvbGV0ZS4gIgorCQkJCSJSZXBsYWNlIHdpdGggVklESU9DX0dfRVhUX0NUUkxTISIpOworCW1lbWNweShmLCZkZWZhdWx0X21wZWdfcGFyYW1zLHNpemVvZigqZikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX21wZWdjb21wIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9tcGVnX2NvbXByZXNzaW9uICpmKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIlZJRElPQ19TX01QRUdDT01QIGlzIG9ic29sZXRlLiAiCisJCQkJIlJlcGxhY2Ugd2l0aCBWSURJT0NfU19FWFRfQ1RSTFMhIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZXh0X2N0cmxzIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmYpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiAgPSAoKHN0cnVjdCBjeDg4MDJfZmggKilwcml2KS0+ZGV2OworCisJaWYgKGYtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBjeDIzNDF4X2V4dF9jdHJscygmZGV2LT5wYXJhbXMsIGYsIFZJRElPQ19HX0VYVF9DVFJMUyk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZXh0X2N0cmxzIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmYpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiAgPSAoKHN0cnVjdCBjeDg4MDJfZmggKilwcml2KS0+ZGV2OworCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zIHA7CisJaW50IGVycjsKKworCWlmIChmLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwID0gZGV2LT5wYXJhbXM7CisJZXJyID0gY3gyMzQxeF9leHRfY3RybHMoJnAsIGYsIFZJRElPQ19TX0VYVF9DVFJMUyk7CisJaWYgKCFlcnIpIHsKKwkJZXJyID0gY3gyMzQxeF91cGRhdGUoZGV2LCBibGFja2JpcmRfbWJveF9mdW5jLCAmZGV2LT5wYXJhbXMsICZwKTsKKwkJZGV2LT5wYXJhbXMgPSBwOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZXh0X2N0cmxzIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmYpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiAgPSAoKHN0cnVjdCBjeDg4MDJfZmggKilwcml2KS0+ZGV2OworCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zIHA7CisJaW50IGVycjsKKworCWlmIChmLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwID0gZGV2LT5wYXJhbXM7CisJZXJyID0gY3gyMzQxeF9leHRfY3RybHMoJnAsIGYsIFZJRElPQ19UUllfRVhUX0NUUkxTKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9IGRldi0+Y29yZTsKKworCWJsYWNrYmlyZF9hcGlfY21kKGZoLT5kZXYsIENYMjM0MVhfRU5DX1NUT1BfQ0FQVFVSRSwgMywgMCwKKwkJCQlCTEFDS0JJUkRfRU5EX05PVywKKwkJCQlCTEFDS0JJUkRfTVBFR19DQVBUVVJFLAorCQkJCUJMQUNLQklSRF9SQVdfQklUU19OT05FKTsKKwljeDg4X3NldF9mcmVxIChjb3JlLGYpOworCWJsYWNrYmlyZF9pbml0aWFsaXplX2NvZGVjKGRldik7CisJY3g4OF9zZXRfc2NhbGUoZGV2LT5jb3JlLCBkZXYtPndpZHRoLCBkZXYtPmhlaWdodCwKKwkJCWZoLT5tcGVncS5maWVsZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gKChzdHJ1Y3QgY3g4ODAyX2ZoICopcHJpdiktPmRldjsKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9IGRldi0+Y29yZTsKKwljaGFyIG5hbWVbMzIgKyAyXTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBjb3JlLT5uYW1lKTsKKwlwcmludGsoIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAorCQljb3JlLT5uYW1lKTsKKwljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOworCWN4MjM0MXhfbG9nX3N0YXR1cygmZGV2LT5wYXJhbXMsIG5hbWUpOworCXByaW50aygiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCisJCWNvcmUtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiAgPSAoKHN0cnVjdCBjeDg4MDJfZmggKilwcml2KS0+ZGV2OworCisJaWYgKGJsYWNrYmlyZF9xdWVyeWN0cmwoZGV2LCBxY3RybCkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlxY3RybC0+aWQgPSB2NGwyX2N0cmxfbmV4dChjdHJsX2NsYXNzZXMsIHFjdHJsLT5pZCk7CisJaWYgKHVubGlrZWx5KHFjdHJsLT5pZCA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGN4ODgwMF9jdHJsX3F1ZXJ5KHFjdHJsKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfaW5wdXQgKmkpCit7CisJc3RydWN0IGN4ODhfY29yZSAgKmNvcmUgPSAoKHN0cnVjdCBjeDg4MDJfZmggKilwcml2KS0+ZGV2LT5jb3JlOworCXJldHVybiBjeDg4X2VudW1faW5wdXQgKGNvcmUsaSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gKChzdHJ1Y3QgY3g4ODAyX2ZoICopcHJpdiktPmRldi0+Y29yZTsKKwlyZXR1cm4KKwkJY3g4OF9nZXRfY29udHJvbChjb3JlLGN0bCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gKChzdHJ1Y3QgY3g4ODAyX2ZoICopcHJpdiktPmRldi0+Y29yZTsKKwlyZXR1cm4KKwkJY3g4OF9zZXRfY29udHJvbChjb3JlLGN0bCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OworCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gZmgtPmRldi0+Y29yZTsKKworCWlmICh1bmxpa2VseShVTlNFVCA9PSBjb3JlLT50dW5lcl90eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJZi0+ZnJlcXVlbmN5ID0gY29yZS0+ZnJlcTsKKwljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfR19GUkVRVUVOQ1ksZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKK3sKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9ICgoc3RydWN0IGN4ODgwMl9maCAqKXByaXYpLT5kZXYtPmNvcmU7CisKKwkqaSA9IGNvcmUtPmlucHV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCit7CisJc3RydWN0IGN4ODhfY29yZSAgKmNvcmUgPSAoKHN0cnVjdCBjeDg4MDJfZmggKilwcml2KS0+ZGV2LT5jb3JlOworCisJaWYgKGkgPj0gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsKKwljeDg4X25ld3N0YXRpb24oY29yZSk7CisJY3g4OF92aWRlb19tdXgoY29yZSxpKTsKKwltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9ICgoc3RydWN0IGN4ODgwMl9maCAqKXByaXYpLT5kZXYtPmNvcmU7CisJdTMyIHJlZzsKKworCWlmICh1bmxpa2VseShVTlNFVCA9PSBjb3JlLT50dW5lcl90eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwl0LT50eXBlICAgICAgID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk07CisJdC0+cmFuZ2VoaWdoICA9IDB4ZmZmZmZmZmZVTDsKKworCWN4ODhfZ2V0X3N0ZXJlbyhjb3JlICx0KTsKKwlyZWcgPSBjeF9yZWFkKE1PX0RFVklDRV9TVEFUVVMpOworCXQtPnNpZ25hbCA9IChyZWcgJiAoMTw8NSkpID8gMHhmZmZmIDogMHgwMDAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9ICgoc3RydWN0IGN4ODgwMl9maCAqKXByaXYpLT5kZXYtPmNvcmU7CisKKwlpZiAoVU5TRVQgPT0gY29yZS0+dHVuZXJfdHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKDAgIT0gdC0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCisJY3g4OF9zZXRfc3RlcmVvKGNvcmUsIHQtPmF1ZG1vZGUsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICppZCkKK3sKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9ICgoc3RydWN0IGN4ODgwMl9maCAqKXByaXYpLT5kZXYtPmNvcmU7CisKKwltdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsKKwljeDg4X3NldF90dm5vcm0oY29yZSwqaWQpOworCW11dGV4X3VubG9jaygmY29yZS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qIEZJWE1FOiBjeDg4X2lvY3RsX2hvb2sgbm90IGltcGxlbWVudGVkICovCisKIHN0YXRpYyBpbnQgbXBlZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CkBAIC0xMDU5LDE3ICsxMTkzLDQ3IEBACiAJLnJlYWQJICAgICAgID0gbXBlZ19yZWFkLAogCS5wb2xsICAgICAgICAgID0gbXBlZ19wb2xsLAogCS5tbWFwCSAgICAgICA9IG1wZWdfbW1hcCwKLQkuaW9jdGwJICAgICAgID0gbXBlZ19pb2N0bCwKKwkuaW9jdGwJICAgICAgID0gdmlkZW9faW9jdGwyLAogCS5sbHNlZWsgICAgICAgID0gbm9fbGxzZWVrLAogfTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3g4ODAyX21wZWdfdGVtcGxhdGUgPQogewotCS5uYW1lICAgICAgICAgID0gImN4ODgwMiIsCi0JLnR5cGUgICAgICAgICAgPSBWSURfVFlQRV9DQVBUVVJFfFZJRF9UWVBFX1RVTkVSfFZJRF9UWVBFX1NDQUxFU3xWSURfVFlQRV9NUEVHX0VOQ09ERVIsCi0JLmhhcmR3YXJlICAgICAgPSAwLAotCS5mb3BzICAgICAgICAgID0gJm1wZWdfZm9wcywKLQkubWlub3IgICAgICAgICA9IC0xLAorCS5uYW1lICAgICAgICAgICAgICAgICA9ICJjeDg4MDIiLAorCS50eXBlICAgICAgICAgICAgICAgICA9IFZJRF9UWVBFX0NBUFRVUkV8VklEX1RZUEVfVFVORVJ8VklEX1RZUEVfU0NBTEVTfFZJRF9UWVBFX01QRUdfRU5DT0RFUiwKKwkuZm9wcyAgICAgICAgICAgICAgICAgPSAmbXBlZ19mb3BzLAorCS5taW5vciAgICAgICAgICAgICAgICA9IC0xLAorCS52aWRpb2NfcXVlcnltZW51ICAgICA9IHZpZGlvY19xdWVyeW1lbnUsCisJLnZpZGlvY19xdWVyeWNhcCAgICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfY2FwICA9IHZpZGlvY19lbnVtX2ZtdF9jYXAsCisJLnZpZGlvY19nX2ZtdF9jYXAgICAgID0gdmlkaW9jX2dfZm10X2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfY2FwICAgPSB2aWRpb2NfdHJ5X2ZtdF9jYXAsCisJLnZpZGlvY19zX2ZtdF9jYXAgICAgID0gdmlkaW9jX3NfZm10X2NhcCwKKwkudmlkaW9jX3JlcWJ1ZnMgICAgICAgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmICAgICAgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmICAgICAgICAgID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiAgICAgICAgID0gdmlkaW9jX2RxYnVmLAorCS52aWRpb2Nfc3RyZWFtb24gICAgICA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiAgICAgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfZ19tcGVnY29tcCAgICA9IHZpZGlvY19nX21wZWdjb21wLAorCS52aWRpb2Nfc19tcGVnY29tcCAgICA9IHZpZGlvY19zX21wZWdjb21wLAorCS52aWRpb2NfZ19leHRfY3RybHMgICA9IHZpZGlvY19nX2V4dF9jdHJscywKKwkudmlkaW9jX3NfZXh0X2N0cmxzICAgPSB2aWRpb2Nfc19leHRfY3RybHMsCisJLnZpZGlvY190cnlfZXh0X2N0cmxzID0gdmlkaW9jX3RyeV9leHRfY3RybHMsCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSAgID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2NfbG9nX3N0YXR1cyAgICA9IHZpZGlvY19sb2dfc3RhdHVzLAorCS52aWRpb2NfcXVlcnljdHJsICAgICA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19lbnVtX2lucHV0ICAgID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2N0cmwgICAgICAgID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgICAgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgICA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX2dfaW5wdXQgICAgICAgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgICAgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfdHVuZXIgICAgICAgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgICAgICAgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX3Nfc3RkICAgICAgICAgPSB2aWRpb2Nfc19zdGQsCisJLnR2bm9ybXMgICAgICAgICAgICAgID0gQ1g4OF9OT1JNUywKKyAgICAgICAuY3VycmVudF9ub3JtICAgICAgICAgPSBWNEwyX1NURF9OVFNDX00sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTExNjQsNyArMTMyOCw5IEBACiAJY3gyMzQxeF9maWxsX2RlZmF1bHRzKCZkZXYtPnBhcmFtcyk7CiAJZGV2LT5wYXJhbXMucG9ydCA9IENYMjM0MVhfUE9SVF9TVFJFQU1JTkc7CiAKLQlpZiAoY29yZS0+dHZub3JtLT5pZCAmIFY0TDJfU1REXzUyNV82MCkgeworCWN4ODgwMl9tcGVnX3RlbXBsYXRlLmN1cnJlbnRfbm9ybSA9IGNvcmUtPnR2bm9ybTsKKworCWlmIChjb3JlLT50dm5vcm0gJiBWNEwyX1NURF81MjVfNjApIHsKIAkJZGV2LT5oZWlnaHQgPSA0ODA7CiAJfSBlbHNlIHsKIAkJZGV2LT5oZWlnaHQgPSA1NzY7CkBAIC0xMTc4LDYgKzEzNDQsMTEgQEAKIAlibGFja2JpcmRfcmVnaXN0ZXJfdmlkZW8oZGV2KTsKIAogCS8qIGluaXRpYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb246IG5lZWRlZCA/ICovCisJbXV0ZXhfbG9jaygmZGV2LT5jb3JlLT5sb2NrKTsKKy8vCWluaXRfY29udHJvbHMoY29yZSk7CisJY3g4OF9zZXRfdHZub3JtKGNvcmUsY29yZS0+dHZub3JtKTsKKwljeDg4X3ZpZGVvX211eChjb3JlLDApOworCW11dGV4X3VubG9jaygmZGV2LT5jb3JlLT5sb2NrKTsKIAogCXJldHVybiAwOwogCkBAIC0xMjEyLDggKzEzODMsNiBAQAogCXByaW50ayhLRVJOX0lORk8gImN4MjM4OHg6IHNuYXBzaG90IGRhdGUgJTA0ZC0lMDJkLSUwMmRcbiIsCiAJICAgICAgIFNOQVBTSE9ULzEwMDAwLCAoU05BUFNIT1QvMTAwKSUxMDAsIFNOQVBTSE9UJTEwMCk7CiAjZW5kaWYKLQljeDg4X2lvY3RsX2hvb2sgPSBtcGVnX2RvX2lvY3RsOwotCWN4ODhfaW9jdGxfdHJhbnNsYXRvciA9IG1wZWdfdHJhbnNsYXRlX2lvY3RsOwogCXJldHVybiBjeDg4MDJfcmVnaXN0ZXJfZHJpdmVyKCZjeDg4MDJfYmxhY2tiaXJkX2RyaXZlcik7CiB9CiAKQEAgLTEyMjUsOCArMTM5NCw4IEBACiBtb2R1bGVfaW5pdChibGFja2JpcmRfaW5pdCk7CiBtb2R1bGVfZXhpdChibGFja2JpcmRfZmluaSk7CiAKLUVYUE9SVF9TWU1CT0woY3g4OF9pb2N0bF9ob29rKTsKLUVYUE9SVF9TWU1CT0woY3g4OF9pb2N0bF90cmFuc2xhdG9yKTsKK21vZHVsZV9wYXJhbV9uYW1lZCh2aWRlb19kZWJ1ZyxjeDg4MDJfbXBlZ190ZW1wbGF0ZS5kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbdmlkZW9dIik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggNDM0Yjc4YS4uNjVlOWQ4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtNzY0LDYgKzc2NCwxMiBAQAogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCiAJCQkudm11eCAgID0gMCwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMiwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAogCQl9fSwKIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCmluZGV4IDE4OTk3MzYuLmQ4NjgxM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKQEAgLTUsNiArNSwxMSBAQAogICoKICAqIChjKSAyMDAzIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10KICAqCisgKiAoYykgMjAwNS0yMDA2IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgorICogICAgIC0gTXVsdGl0dW5lciBzdXBwb3J0CisgKiAgICAgLSB2aWRlb19pb2N0bDIgY29udmVyc2lvbgorICogICAgIC0gUEFML00gZml4ZXMKKyAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC02MzEsMzAgKzYzNiwzMCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV9zd2lkdGgoc3RydWN0IGN4ODhfdHZub3JtICpub3JtKQorc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV9zd2lkdGgodjRsMl9zdGRfaWQgbm9ybSkKIHsKLQlyZXR1cm4gKG5vcm0tPmlkICYgKFY0TDJfU1REX01OICYgflY0TDJfU1REX1BBTF9OYykpID8gNzU0IDogOTIyOworCXJldHVybiAobm9ybSAmIChWNEwyX1NURF9NTiAmIH5WNEwyX1NURF9QQUxfTmMpKSA/IDc1NCA6IDkyMjsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV9oZGVsYXkoc3RydWN0IGN4ODhfdHZub3JtICpub3JtKQorc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV9oZGVsYXkodjRsMl9zdGRfaWQgbm9ybSkKIHsKLQlyZXR1cm4gKG5vcm0tPmlkICYgKFY0TDJfU1REX01OICYgflY0TDJfU1REX1BBTF9OYykpID8gMTM1IDogMTg2OworCXJldHVybiAobm9ybSAmIChWNEwyX1NURF9NTiAmIH5WNEwyX1NURF9QQUxfTmMpKSA/IDEzNSA6IDE4NjsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV92ZGVsYXkoc3RydWN0IGN4ODhfdHZub3JtICpub3JtKQorc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV92ZGVsYXkodjRsMl9zdGRfaWQgbm9ybSkKIHsKLQlyZXR1cm4gKG5vcm0tPmlkICYgVjRMMl9TVERfNjI1XzUwKSA/IDB4MjQgOiAweDE4OworCXJldHVybiAobm9ybSAmIFY0TDJfU1REXzYyNV81MCkgPyAweDI0IDogMHgxODsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV9mc2M4KHN0cnVjdCBjeDg4X3R2bm9ybSAqbm9ybSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5saW5lIG5vcm1fZnNjOCh2NGwyX3N0ZF9pZCBub3JtKQogewotCWlmIChub3JtLT5pZCAmIFY0TDJfU1REX1BBTF9NKQorCWlmIChub3JtICYgVjRMMl9TVERfUEFMX00pCiAJCXJldHVybiAyODYwNDg5MjsgICAgICAvLyAzLjU3NTYxMSBNSHoKIAotCWlmIChub3JtLT5pZCAmIChWNEwyX1NURF9QQUxfTmMpKQorCWlmIChub3JtICYgKFY0TDJfU1REX1BBTF9OYykpCiAJCXJldHVybiAyODY1NjQ0ODsgICAgICAvLyAzLjU4MjA1NiBNSHoKIAotCWlmIChub3JtLT5pZCAmIFY0TDJfU1REX05UU0MpIC8vIEFsbCBOVFNDL00gYW5kIHZhcmlhbnRzCisJaWYgKG5vcm0gJiBWNEwyX1NURF9OVFNDKSAvLyBBbGwgTlRTQy9NIGFuZCB2YXJpYW50cwogCQlyZXR1cm4gMjg2MzYzNjA7ICAgICAgLy8gMy41Nzk1NDU0NSBNSHogKy8tIDEwIEh6CiAKIAkvKiBTRUNBTSBoYXZlIGFsc28gZGlmZmVyZW50IHN1YiBjYXJyaWVyIGZvciBjaHJvbWEsCkBAIC02NjYsMjAgKzY3MSwyMCBAQAogCXJldHVybiAzNTQ2ODk1MDsgICAgICAvLyA0LjQzMzYxODc1IE1IeiArLy0gNSBIegogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlubGluZSBub3JtX2h0b3RhbChzdHJ1Y3QgY3g4OF90dm5vcm0gKm5vcm0pCitzdGF0aWMgdW5zaWduZWQgaW50IGlubGluZSBub3JtX2h0b3RhbCh2NGwyX3N0ZF9pZCBub3JtKQogewogCiAJdW5zaWduZWQgaW50IGZzYzQ9bm9ybV9mc2M4KG5vcm0pLzI7CiAKIAkvKiByZXR1cm5zIDQqRlNDIC8gdnRvdGFsIC8gZnJhbWVzIHBlciBzZWNvbmRzICovCi0JcmV0dXJuIChub3JtLT5pZCAmIFY0TDJfU1REXzYyNV81MCkgPworCXJldHVybiAobm9ybSAmIFY0TDJfU1REXzYyNV81MCkgPwogCQkJCSgoZnNjNCszMTIpLzYyNSsxMikvMjUgOgogCQkJCSgoZnNjNCsyNjIpLzUyNSoxMDAxKzE1MDAwKS8zMDAwMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV92YmlwYWNrKHN0cnVjdCBjeDg4X3R2bm9ybSAqbm9ybSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5saW5lIG5vcm1fdmJpcGFjayh2NGwyX3N0ZF9pZCBub3JtKQogewotCXJldHVybiAobm9ybS0+aWQgJiBWNEwyX1NURF82MjVfNTApID8gNTExIDogNDAwOworCXJldHVybiAobm9ybSAmIFY0TDJfU1REXzYyNV81MCkgPyA1MTEgOiA0MDA7CiB9CiAKIGludCBjeDg4X3NldF9zY2FsZShzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCkBAIC02OTIsNyArNjk3LDcgQEAKIAlkcHJpbnRrKDEsInNldF9zY2FsZTogJWR4JWQgWyVzJXMsJXNdXG4iLCB3aWR0aCwgaGVpZ2h0LAogCQlWNEwyX0ZJRUxEX0hBU19UT1AoZmllbGQpICAgID8gIlQiIDogIiIsCiAJCVY0TDJfRklFTERfSEFTX0JPVFRPTShmaWVsZCkgPyAiQiIgOiAiIiwKLQkJY29yZS0+dHZub3JtLT5uYW1lKTsKKwkJdjRsMl9ub3JtX3RvX25hbWUoY29yZS0+dHZub3JtKSk7CiAJaWYgKCFWNEwyX0ZJRUxEX0hBU19CT1RIKGZpZWxkKSkKIAkJaGVpZ2h0ICo9IDI7CiAKQEAgLTcyOSw3ICs3MzQsNyBAQAogCS8vIHNldHVwIGZpbHRlcnMKIAl2YWx1ZSA9IDA7CiAJdmFsdWUgfD0gKDEgPDwgMTkpOyAgICAgICAgLy8gQ0ZJTFQgKGRlZmF1bHQpCi0JaWYgKGNvcmUtPnR2bm9ybS0+aWQgJiBWNEwyX1NURF9TRUNBTSkgeworCWlmIChjb3JlLT50dm5vcm0gJiBWNEwyX1NURF9TRUNBTSkgewogCQl2YWx1ZSB8PSAoMSA8PCAxNSk7CiAJCXZhbHVlIHw9ICgxIDw8IDE2KTsKIAl9CkBAIC04MjYsMzYgKzgzMSwzNiBAQAogCiBzdGF0aWMgaW50IHNldF90dmF1ZGlvKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpCiB7Ci0Jc3RydWN0IGN4ODhfdHZub3JtICpub3JtID0gY29yZS0+dHZub3JtOworCXY0bDJfc3RkX2lkIG5vcm0gPSBjb3JlLT50dm5vcm07CiAKIAlpZiAoQ1g4OF9WTVVYX1RFTEVWSVNJT04gIT0gSU5QVVQoY29yZS0+aW5wdXQpLT50eXBlKQogCQlyZXR1cm4gMDsKIAotCWlmIChWNEwyX1NURF9QQUxfQkcgJiBub3JtLT5pZCkgeworCWlmIChWNEwyX1NURF9QQUxfQkcgJiBub3JtKSB7CiAJCWNvcmUtPnR2YXVkaW8gPSBXV19CRzsKIAotCX0gZWxzZSBpZiAoVjRMMl9TVERfUEFMX0RLICYgbm9ybS0+aWQpIHsKKwl9IGVsc2UgaWYgKFY0TDJfU1REX1BBTF9ESyAmIG5vcm0pIHsKIAkJY29yZS0+dHZhdWRpbyA9IFdXX0RLOwogCi0JfSBlbHNlIGlmIChWNEwyX1NURF9QQUxfSSAmIG5vcm0tPmlkKSB7CisJfSBlbHNlIGlmIChWNEwyX1NURF9QQUxfSSAmIG5vcm0pIHsKIAkJY29yZS0+dHZhdWRpbyA9IFdXX0k7CiAKLQl9IGVsc2UgaWYgKFY0TDJfU1REX1NFQ0FNX0wgJiBub3JtLT5pZCkgeworCX0gZWxzZSBpZiAoVjRMMl9TVERfU0VDQU1fTCAmIG5vcm0pIHsKIAkJY29yZS0+dHZhdWRpbyA9IFdXX0w7CiAKLQl9IGVsc2UgaWYgKFY0TDJfU1REX1NFQ0FNX0RLICYgbm9ybS0+aWQpIHsKKwl9IGVsc2UgaWYgKFY0TDJfU1REX1NFQ0FNX0RLICYgbm9ybSkgewogCQljb3JlLT50dmF1ZGlvID0gV1dfREs7CiAKLQl9IGVsc2UgaWYgKChWNEwyX1NURF9OVFNDX00gJiBub3JtLT5pZCkgfHwKLQkJICAgKFY0TDJfU1REX1BBTF9NICAmIG5vcm0tPmlkKSkgeworCX0gZWxzZSBpZiAoKFY0TDJfU1REX05UU0NfTSAmIG5vcm0pIHx8CisJCSAgIChWNEwyX1NURF9QQUxfTSAgJiBub3JtKSkgewogCQljb3JlLT50dmF1ZGlvID0gV1dfQlRTQzsKIAotCX0gZWxzZSBpZiAoVjRMMl9TVERfTlRTQ19NX0pQICYgbm9ybS0+aWQpIHsKKwl9IGVsc2UgaWYgKFY0TDJfU1REX05UU0NfTV9KUCAmIG5vcm0pIHsKIAkJY29yZS0+dHZhdWRpbyA9IFdXX0VJQUo7CiAKIAl9IGVsc2UgewogCQlwcmludGsoIiVzLzA6IHR2YXVkaW8gc3VwcG9ydCBuZWVkcyB3b3JrIGZvciB0aGlzIHR2IG5vcm0gWyVzXSwgc29ycnlcbiIsCi0JCSAgICAgICBjb3JlLT5uYW1lLCBub3JtLT5uYW1lKTsKKwkJICAgICAgIGNvcmUtPm5hbWUsIHY0bDJfbm9ybV90b19uYW1lKGNvcmUtPnR2bm9ybSkpOwogCQljb3JlLT50dmF1ZGlvID0gMDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODc0LDcgKzg3OSw3IEBACiAKIAogCi1pbnQgY3g4OF9zZXRfdHZub3JtKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHN0cnVjdCBjeDg4X3R2bm9ybSAqbm9ybSkKK2ludCBjeDg4X3NldF90dm5vcm0oc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdjRsMl9zdGRfaWQgbm9ybSkKIHsKIAl1MzIgZnNjODsKIAl1MzIgYWRjX2Nsb2NrOwpAQCAtODgyLDYgKzg4Nyw3IEBACiAJdTMyIHN0ZXBfZGIsc3RlcF9kcjsKIAl1NjQgdG1wNjQ7CiAJdTMyIGJkZWxheSxhZ2NkZWxheSxodG90YWw7CisJdTMyIGN4aWZvcm1hdCwgY3hvZm9ybWF0OwogCiAJY29yZS0+dHZub3JtID0gbm9ybTsKIAlmc2M4ICAgICAgID0gbm9ybV9mc2M4KG5vcm0pOwpAQCAtODkwLDIzICs4OTYsNTEgQEAKIAlzdGVwX2RiICAgID0gZnNjODsKIAlzdGVwX2RyICAgID0gZnNjODsKIAotCWlmIChub3JtLT5pZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJaWYgKG5vcm0gJiBWNEwyX1NURF9OVFNDX01fSlApIHsKKwkJY3hpZm9ybWF0ID0gVmlkZW9Gb3JtYXROVFNDSmFwYW47CisJCWN4b2Zvcm1hdCA9IDB4MTgxZjAwMDg7CisJfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfTlRTQ180NDMpIHsKKwkJY3hpZm9ybWF0ID0gVmlkZW9Gb3JtYXROVFNDNDQzOworCQljeG9mb3JtYXQgPSAweDE4MWYwMDA4OworCX0gZWxzZSBpZiAobm9ybSAmIFY0TDJfU1REX1BBTF9NKSB7CisJCWN4aWZvcm1hdCA9IFZpZGVvRm9ybWF0UEFMTTsKKwkJY3hvZm9ybWF0ID0gMHgxYzFmMDAwODsKKwl9IGVsc2UgaWYgKG5vcm0gJiBWNEwyX1NURF9QQUxfTikgeworCQljeGlmb3JtYXQgPSBWaWRlb0Zvcm1hdFBBTE47CisJCWN4b2Zvcm1hdCA9IDB4MWMxZjAwMDg7CisJfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfUEFMX05jKSB7CisJCWN4aWZvcm1hdCA9IFZpZGVvRm9ybWF0UEFMTkM7CisJCWN4b2Zvcm1hdCA9IDB4MWMxZjAwMDg7CisJfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfUEFMXzYwKSB7CisJCWN4aWZvcm1hdCA9IFZpZGVvRm9ybWF0UEFMNjA7CisJCWN4b2Zvcm1hdCA9IDB4MTgxZjAwMDg7CisJfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfTlRTQykgeworCQljeGlmb3JtYXQgPSBWaWRlb0Zvcm1hdE5UU0M7CisJCWN4b2Zvcm1hdCA9IDB4MTgxZjAwMDg7CisJfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfU0VDQU0pIHsKIAkJc3RlcF9kYiA9IDQyNTAwMDAgKiA4OwogCQlzdGVwX2RyID0gNDQwNjI1MCAqIDg7CisKKwkJY3hpZm9ybWF0ID0gVmlkZW9Gb3JtYXRTRUNBTTsKKwkJY3hvZm9ybWF0ID0gMHgxODFmMDAwODsKKwl9IGVsc2UgeyAvKiBQQUwgKi8KKwkJY3hpZm9ybWF0ID0gVmlkZW9Gb3JtYXRQQUw7CisJCWN4b2Zvcm1hdCA9IDB4MTgxZjAwMDg7CiAJfQogCiAJZHByaW50aygxLCJzZXRfdHZub3JtOiBcIiVzXCIgZnNjOD0lZCBhZGM9JWQgdmRlYz0lZCBkYi9kcj0lZC8lZFxuIiwKLQkJbm9ybS0+bmFtZSwgZnNjOCwgYWRjX2Nsb2NrLCB2ZGVjX2Nsb2NrLCBzdGVwX2RiLCBzdGVwX2RyKTsKKwkJdjRsMl9ub3JtX3RvX25hbWUoY29yZS0+dHZub3JtKSwgZnNjOCwgYWRjX2Nsb2NrLCB2ZGVjX2Nsb2NrLAorCQlzdGVwX2RiLCBzdGVwX2RyKTsKIAlzZXRfcGxsKGNvcmUsMix2ZGVjX2Nsb2NrKTsKIAogCWRwcmludGsoMSwic2V0X3R2bm9ybTogTU9fSU5QVVRfRk9STUFUICAweCUwOHggW29sZD0weCUwOHhdXG4iLAotCQlub3JtLT5jeGlmb3JtYXQsIGN4X3JlYWQoTU9fSU5QVVRfRk9STUFUKSAmIDB4MGYpOwotCWN4X2FuZG9yKE1PX0lOUFVUX0ZPUk1BVCwgMHhmLCBub3JtLT5jeGlmb3JtYXQpOworCQljeGlmb3JtYXQsIGN4X3JlYWQoTU9fSU5QVVRfRk9STUFUKSAmIDB4MGYpOworCWN4X2FuZG9yKE1PX0lOUFVUX0ZPUk1BVCwgMHhmLCBjeGlmb3JtYXQpOwogCiAJLy8gRklYTUU6IGFzLWlzIGZyb20gRFNjYWxlcgogCWRwcmludGsoMSwic2V0X3R2bm9ybTogTU9fT1VUUFVUX0ZPUk1BVCAweCUwOHggW29sZD0weCUwOHhdXG4iLAotCQlub3JtLT5jeG9mb3JtYXQsIGN4X3JlYWQoTU9fT1VUUFVUX0ZPUk1BVCkpOwotCWN4X3dyaXRlKE1PX09VVFBVVF9GT1JNQVQsIG5vcm0tPmN4b2Zvcm1hdCk7CisJCWN4b2Zvcm1hdCwgY3hfcmVhZChNT19PVVRQVVRfRk9STUFUKSk7CisJY3hfd3JpdGUoTU9fT1VUUFVUX0ZPUk1BVCwgY3hvZm9ybWF0KTsKIAogCS8vIE1PX1NDT05WX1JFRyA9IGFkYyBjbG9jayAvIHZpZGVvIGRlYyBjbG9jayAqIDJeMTcKIAl0bXA2NCAgPSBhZGNfY2xvY2sgKiAodTY0KSgxIDw8IDE3KTsKQEAgLTk1NSw3ICs5ODksNyBAQAogCXNldF90dmF1ZGlvKGNvcmUpOwogCiAJLy8gdGVsbCBpMmMgY2hpcHMKLQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfU19TVEQsJm5vcm0tPmlkKTsKKwljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfU19TVEQsJm5vcm0pOwogCiAJLy8gZG9uZQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCA4YjIwMzM1Li40ZjU1NjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSAibXQzNTIuaCIKICNpbmNsdWRlICJtdDM1Ml9wcml2LmgiCi0jaWZkZWYgSEFWRV9WUDMwNTRfSTJDCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0X01PRFVMRSkKICMgaW5jbHVkZSAiY3g4OC12cDMwNTQtaTJjLmgiCiAjZW5kaWYKICNpbmNsdWRlICJ6bDEwMzUzLmgiCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkuZGVtb2RfaW5pdCAgICA9IGR2aWNvX2R1YWxfZGVtb2RfaW5pdCwKIH07CiAKLSNpZmRlZiBIQVZFX1ZQMzA1NF9JMkMKKyNpZiBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NCkgfHwgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTRfTU9EVUxFKQogc3RhdGljIGludCBkbnR2X2xpdmVfZHZidF9wcm9fZGVtb2RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKIHsKIAlzdGF0aWMgdTggY2xvY2tfY29uZmlnIFtdICA9IHsgMHg4OSwgMHgzOCwgMHgzOCB9OwpAQCAtNTQzLDcgKzU0Myw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVF9QUk86Ci0jaWZkZWYgSEFWRV9WUDMwNTRfSTJDCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0X01PRFVMRSkKIAkJZGV2LT5jb3JlLT5wbGxfYWRkciA9IDB4NjE7CiAJCWRldi0+Y29yZS0+cGxsX2Rlc2MgPSAmZHZiX3BsbF9mbWQxMjE2bWU7CiAJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZkbnR2X2xpdmVfZHZidF9wcm9fY29uZmlnLApAQCAtNzkzLDcgKzc5Myw3IEBACiAJaWYgKCEoY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm1wZWcgJiBDWDg4X01QRUdfRFZCKSkKIAkJZ290byBmYWlsX2NvcmU7CiAKLSNpZmRlZiBIQVZFX1ZQMzA1NF9JMkMKKyNpZiBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NCkgfHwgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTRfTU9EVUxFKQogCWVyciA9IHZwMzA1NF9pMmNfcHJvYmUoZGV2KTsKIAlpZiAoMCAhPSBlcnIpCiAJCWdvdG8gZmFpbF9jb3JlOwpAQCAtODIyLDcgKzgyMiw3IEBACiAJLyogZHZiICovCiAJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoJmRldi0+ZHZiKTsKIAotI2lmZGVmIEhBVkVfVlAzMDU0X0kyQworI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0KSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NF9NT0RVTEUpCiAJdnAzMDU0X2kyY19yZW1vdmUoZGV2KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCmluZGV4IDg4YWYyM2EuLjk4MzBkNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIAlpZiAoMCAhPSBjb3JlLT5pMmNfcmMpCiAJCXJldHVybjsKIAorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0JVRl9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0JVRl9EVkJfTU9EVUxFKQogCWlmICggKGNvcmUtPmR2YmRldikgJiYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kKSApIHsKIAkJaWYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJCWNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZCwgMSk7CkBAIC0xNTQsNiArMTU1LDcgQEAKIAkJaWYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJCWNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZCwgMCk7CiAJfSBlbHNlCisjZW5kaWYKIAkJaTJjX2NsaWVudHNfY29tbWFuZCgmY29yZS0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCmluZGV4IDA2M2RmMDMuLjk3ZWY0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKQEAgLTc5Nyw1NSArNzk3LDYgQEAKICAgICAgICBBZGQgc29tZSBjb2RlIGhlcmUgbGF0ZXIuCiAqLwogCi0jIGlmIDAKLQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfU0FQIHwKLQkgICAgVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMjsKLQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0KLQlzd2l0Y2ggKGNvcmUtPnR2YXVkaW8pIHsKLQljYXNlIFdXX0JUU0M6Ci0JCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBWNEwyX1RVTkVSX0NBUF9TQVA7Ci0JCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JCWlmICgxID09IHBpbG90KSB7Ci0JCQkvKiBTQVAgKi8KLQkJCXQtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfU0FQOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgV1dfQTJfQkc6Ci0JY2FzZSBXV19BMl9ESzoKLQljYXNlIFdXX0EyX006Ci0JCWlmICgxID09IHBpbG90KSB7Ci0JCQkvKiBzdGVyZW8gKi8KLQkJCXQtPnJ4c3ViY2hhbnMgPQotCQkJICAgIFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JCQlpZiAoMCA9PSBtb2RlKQotCQkJCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQl9Ci0JCWlmICgyID09IHBpbG90KSB7Ci0JCQkvKiBkdWFsIGxhbmd1YWdlIC0tIEZJWE1FICovCi0JCQl0LT5yeHN1YmNoYW5zID0KLQkJCSAgICBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOwotCQkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKLQkJfQotCQlicmVhazsKLQljYXNlIFdXX05JQ0FNX0JHREtMOgotCQlpZiAoMCA9PSBtb2RlKSB7Ci0JCQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJCXQtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgV1dfU1lTVEVNX0xfQU06Ci0JCWlmICgweDAgPT0gbW9kZSAmJiAhKGN4X3JlYWQoQVVEX0lOSVQpICYgMHgwNCkpIHsKLQkJCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQkJdC0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogbm90aGluZyAqLwotCQlicmVhazsKLQl9Ci0jIGVuZGlmCiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZiaS5jCmluZGV4IGFhMmE2OTcuLjg2YzFjZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZiaS5jCkBAIC0yMSw5ICsyMSwxMSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotdm9pZCBjeDg4MDBfdmJpX2ZtdChzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCitpbnQgY3g4ODAwX3ZiaV9mbXQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0JbWVtc2V0KCZmLT5mbXQudmJpLDAsc2l6ZW9mKGYtPmZtdC52YmkpKTsKKwlzdHJ1Y3QgY3g4ODAwX2ZoICAqZmggICA9IHByaXY7CisJc3RydWN0IGN4ODgwMF9kZXYgKmRldiAgPSBmaC0+ZGV2OwogCiAJZi0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gVkJJX0xJTkVfTEVOR1RIOwogCWYtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOwpAQCAtMzEsMTggKzMzLDE5IEBACiAJZi0+Zm10LnZiaS5jb3VudFswXSA9IFZCSV9MSU5FX0NPVU5UOwogCWYtPmZtdC52YmkuY291bnRbMV0gPSBWQklfTElORV9DT1VOVDsKIAotCWlmIChkZXYtPmNvcmUtPnR2bm9ybS0+aWQgJiBWNEwyX1NURF81MjVfNjApIHsKKwlpZiAoZGV2LT5jb3JlLT50dm5vcm0gJiBWNEwyX1NURF81MjVfNjApIHsKIAkJLyogbnRzYyAqLwogCQlmLT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSAyODYzNjM2MzsKIAkJZi0+Zm10LnZiaS5zdGFydFswXSA9IDEwOwogCQlmLT5mbXQudmJpLnN0YXJ0WzFdID0gMjczOwogCi0JfSBlbHNlIGlmIChkZXYtPmNvcmUtPnR2bm9ybS0+aWQgJiBWNEwyX1NURF82MjVfNTApIHsKKwl9IGVsc2UgaWYgKGRldi0+Y29yZS0+dHZub3JtICYgVjRMMl9TVERfNjI1XzUwKSB7CiAJCS8qIHBhbCAqLwogCQlmLT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSAzNTQ2ODk1MDsKIAkJZi0+Zm10LnZiaS5zdGFydFswXSA9IDcgLTE7CiAJCWYtPmZtdC52Ymkuc3RhcnRbMV0gPSAzMTkgLTE7CiAJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4ODgwMF9zdGFydF92YmlfZG1hKHN0cnVjdCBjeDg4MDBfZGV2ICAgICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCBjODZhN2UwLi5hOTdiZTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKQEAgLTEsMyArMSw0IEBACisKIC8qCiAgKgogICogZGV2aWNlIGRyaXZlciBmb3IgQ29uZXhhbnQgMjM4OHggYmFzZWQgVFYgY2FyZHMKQEAgLTUsNiArNiwxMSBAQAogICoKICAqIChjKSAyMDAzLTA0IEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10KICAqCisgKiAoYykgMjAwNS0yMDA2IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgorICoJLSBNdWx0aXR1bmVyIHN1cHBvcnQKKyAqCS0gdmlkZW9faW9jdGwyIGNvbnZlcnNpb24KKyAqCS0gUEFML00gZml4ZXMKKyAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC04MCw2NSArODYsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogc3RhdGljIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1zdGF0aWMgc3RydWN0IGN4ODhfdHZub3JtIHR2bm9ybXNbXSA9IHsKLQl7Ci0JCS5uYW1lICAgICAgPSAiTlRTQy1NIiwKLQkJLmlkICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKLQkJLmN4aWZvcm1hdCA9IFZpZGVvRm9ybWF0TlRTQywKLQkJLmN4b2Zvcm1hdCA9IDB4MTgxZjAwMDgsCi0JfSx7Ci0JCS5uYW1lICAgICAgPSAiTlRTQy1KUCIsCi0JCS5pZCAgICAgICAgPSBWNEwyX1NURF9OVFNDX01fSlAsCi0JCS5jeGlmb3JtYXQgPSBWaWRlb0Zvcm1hdE5UU0NKYXBhbiwKLQkJLmN4b2Zvcm1hdCA9IDB4MTgxZjAwMDgsCi0JfSx7Ci0JCS5uYW1lICAgICAgPSAiUEFMLUJHIiwKLQkJLmlkICAgICAgICA9IFY0TDJfU1REX1BBTF9CRywKLQkJLmN4aWZvcm1hdCA9IFZpZGVvRm9ybWF0UEFMLAotCQkuY3hvZm9ybWF0ID0gMHgxODFmMDAwOCwKLQl9LHsKLQkJLm5hbWUgICAgICA9ICJQQUwtREsiLAotCQkuaWQgICAgICAgID0gVjRMMl9TVERfUEFMX0RLLAotCQkuY3hpZm9ybWF0ID0gVmlkZW9Gb3JtYXRQQUwsCi0JCS5jeG9mb3JtYXQgPSAweDE4MWYwMDA4LAotCX0sewotCQkubmFtZSAgICAgID0gIlBBTC1JIiwKLQkJLmlkICAgICAgICA9IFY0TDJfU1REX1BBTF9JLAotCQkuY3hpZm9ybWF0ID0gVmlkZW9Gb3JtYXRQQUwsCi0JCS5jeG9mb3JtYXQgPSAweDE4MWYwMDA4LAotCX0sewotCQkubmFtZSAgICAgID0gIlBBTC1NIiwKLQkJLmlkICAgICAgICA9IFY0TDJfU1REX1BBTF9NLAotCQkuY3hpZm9ybWF0ID0gVmlkZW9Gb3JtYXRQQUxNLAotCQkuY3hvZm9ybWF0ID0gMHgxYzFmMDAwOCwKLQl9LHsKLQkJLm5hbWUgICAgICA9ICJQQUwtTiIsCi0JCS5pZCAgICAgICAgPSBWNEwyX1NURF9QQUxfTiwKLQkJLmN4aWZvcm1hdCA9IFZpZGVvRm9ybWF0UEFMTiwKLQkJLmN4b2Zvcm1hdCA9IDB4MWMxZjAwMDgsCi0JfSx7Ci0JCS5uYW1lICAgICAgPSAiUEFMLU5jIiwKLQkJLmlkICAgICAgICA9IFY0TDJfU1REX1BBTF9OYywKLQkJLmN4aWZvcm1hdCA9IFZpZGVvRm9ybWF0UEFMTkMsCi0JCS5jeG9mb3JtYXQgPSAweDFjMWYwMDA4LAotCX0sewotCQkubmFtZSAgICAgID0gIlBBTC02MCIsCi0JCS5pZCAgICAgICAgPSBWNEwyX1NURF9QQUxfNjAsCi0JCS5jeGlmb3JtYXQgPSBWaWRlb0Zvcm1hdFBBTDYwLAotCQkuY3hvZm9ybWF0ID0gMHgxODFmMDAwOCwKLQl9LHsKLQkJLm5hbWUgICAgICA9ICJTRUNBTS1MIiwKLQkJLmlkICAgICAgICA9IFY0TDJfU1REX1NFQ0FNX0wsCi0JCS5jeGlmb3JtYXQgPSBWaWRlb0Zvcm1hdFNFQ0FNLAotCQkuY3hvZm9ybWF0ID0gMHgxODFmMDAwOCwKLQl9LHsKLQkJLm5hbWUgICAgICA9ICJTRUNBTS1ESyIsCi0JCS5pZCAgICAgICAgPSBWNEwyX1NURF9TRUNBTV9ESywKLQkJLmN4aWZvcm1hdCA9IFZpZGVvRm9ybWF0U0VDQU0sCi0JCS5jeG9mb3JtYXQgPSAweDE4MWYwMDA4LAotCX0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY3g4ODAwX2ZtdCBmb3JtYXRzW10gPSB7CiAJewogCQkubmFtZSAgICAgPSAiOCBicHAsIGdyYXkiLApAQCAtMzY0LDE0ICszMTEsNiBAQAogfQogRVhQT1JUX1NZTUJPTChjeDg4MDBfY3RybF9xdWVyeSk7CiAKLXN0YXRpYyBpbnQgY3g4OF9xdWVyeWN0cmwoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKLXsKLQlxY3RybC0+aWQgPSB2NGwyX2N0cmxfbmV4dChjdHJsX2NsYXNzZXMsIHFjdHJsLT5pZCk7Ci0JaWYgKHFjdHJsLT5pZCA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gY3g4ODAwX2N0cmxfcXVlcnkocWN0cmwpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiByZXNvdXJjZSBtYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTQyNCw4ICszNjMsNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogc3RhdGljIGludCB2aWRlb19tdXgoc3RydWN0IGN4ODgwMF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGlucHV0KSAqLwotc3RhdGljIGludCB2aWRlb19tdXgoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdW5zaWduZWQgaW50IGlucHV0KQoraW50IGN4ODhfdmlkZW9fbXV4KHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHVuc2lnbmVkIGludCBpbnB1dCkKIHsKIAkvKiBzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOyAqLwogCkBAIC00NjQsNiArNDAyLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGN4ODhfdmlkZW9fbXV4KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTk0NCwxOSArODgzLDE4IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogVklERU8gQ1RSTCBJT0NUTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLS8qIHN0YXRpYyBpbnQgZ2V0X2NvbnRyb2woc3RydWN0IGN4ODgwMF9kZXYgKmRldiwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKSAqLwotc3RhdGljIGludCBnZXRfY29udHJvbChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCitpbnQgY3g4OF9nZXRfY29udHJvbCAoc3RydWN0IGN4ODhfY29yZSAgKmNvcmUsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKIHsKLQkvKiBzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOyAqLwotCXN0cnVjdCBjeDg4X2N0cmwgKmMgPSBOVUxMOworCXN0cnVjdCBjeDg4X2N0cmwgICpjICAgID0gTlVMTDsKIAl1MzIgdmFsdWU7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ1g4ODAwX0NUTFM7IGkrKykKIAkJaWYgKGN4ODgwMF9jdGxzW2ldLnYuaWQgPT0gY3RsLT5pZCkKIAkJCWMgPSAmY3g4ODAwX2N0bHNbaV07Ci0JaWYgKE5VTEwgPT0gYykKKwlpZiAodW5saWtlbHkoTlVMTCA9PSBjKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2YWx1ZSA9IGMtPnNyZWcgPyBjeF9zcmVhZChjLT5zcmVnKSA6IGN4X3JlYWQoYy0+cmVnKTsKQEAgLTk3NywyMCArOTE1LDIwIEBACiAJCQkJdmFsdWUsYy0+bWFzaywgYy0+c3JlZyA/ICIgW3NoYWRvd2VkXSIgOiAiIik7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGN4ODhfZ2V0X2NvbnRyb2wpOwogCi0vKiBzdGF0aWMgaW50IHNldF9jb250cm9sKHN0cnVjdCBjeDg4MDBfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkgKi8KLXN0YXRpYyBpbnQgc2V0X2NvbnRyb2woc3RydWN0IGN4ODhfY29yZSAqY29yZSwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoraW50IGN4ODhfc2V0X2NvbnRyb2woc3RydWN0IGN4ODhfY29yZSAqY29yZSwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQogewotCS8qIHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7ICovCiAJc3RydWN0IGN4ODhfY3RybCAqYyA9IE5VTEw7CiAJdTMyIHZhbHVlLG1hc2s7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQ1g4ODAwX0NUTFM7IGkrKykgewogCQlpZiAoY3g4ODAwX2N0bHNbaV0udi5pZCA9PSBjdGwtPmlkKSB7CiAJCQljID0gJmN4ODgwMF9jdGxzW2ldOwogCQl9CiAJfQotCWlmIChOVUxMID09IGMpCisJaWYgKHVubGlrZWx5KE5VTEwgPT0gYykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGN0bC0+dmFsdWUgPCBjLT52Lm1pbmltdW0pCkBAIC0xMDEwLDcgKzk0OCw3IEBACiAKIAkJdmFsdWUgPSAoKGN0bC0+dmFsdWUgLSBjLT5vZmYpIDw8IGMtPnNoaWZ0KSAmIGMtPm1hc2s7CiAKLQkJaWYgKGNvcmUtPnR2bm9ybS0+aWQgJiBWNEwyX1NURF9TRUNBTSkgeworCQlpZiAoY29yZS0+dHZub3JtICYgVjRMMl9TVERfU0VDQU0pIHsKIAkJCS8qIEZvciBTRUNBTSwgYm90aCBVIGFuZCBWIHNhdCBzaG91bGQgYmUgZXF1YWwgKi8KIAkJCXZhbHVlPXZhbHVlPDw4fHZhbHVlOwogCQl9IGVsc2UgewpAQCAtMTAzMyw2ICs5NzEsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woY3g4OF9zZXRfY29udHJvbCk7CiAKIHN0YXRpYyB2b2lkIGluaXRfY29udHJvbHMoc3RydWN0IGN4ODhfY29yZSAqY29yZSkKIHsKQEAgLTEwNDIsNjQ4ICs5ODEsNTMxIEBACiAJZm9yIChpID0gMDsgaSA8IENYODgwMF9DVExTOyBpKyspIHsKIAkJY3RybC5pZD1jeDg4MDBfY3Rsc1tpXS52LmlkOwogCQljdHJsLnZhbHVlPWN4ODgwMF9jdGxzW2ldLnYuZGVmYXVsdF92YWx1ZTsKLQkJc2V0X2NvbnRyb2woY29yZSwgJmN0cmwpOworCisJCWN4ODhfc2V0X2NvbnRyb2woY29yZSwgJmN0cmwpOwogCX0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBWSURFTyBJT0NUTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotc3RhdGljIGludCBjeDg4MDBfZ19mbXQoc3RydWN0IGN4ODgwMF9kZXYgKmRldiwgc3RydWN0IGN4ODgwMF9maCAqZmgsCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGN4ODgwMF9maCAgKmZoICAgPSBwcml2OworCisJZi0+Zm10LnBpeC53aWR0aCAgICAgICAgPSBmaC0+d2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQgICAgICAgPSBmaC0+aGVpZ2h0OworCWYtPmZtdC5waXguZmllbGQgICAgICAgID0gZmgtPnZpZHEuZmllbGQ7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBmaC0+Zm10LT5mb3VyY2M7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPQorCQkoZi0+Zm10LnBpeC53aWR0aCAqIGZoLT5mbXQtPmRlcHRoKSA+PiAzOworCWYtPmZtdC5waXguc2l6ZWltYWdlID0KKwkJZi0+Zm10LnBpeC5oZWlnaHQgKiBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCXN3aXRjaCAoZi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQltZW1zZXQoJmYtPmZtdC5waXgsMCxzaXplb2YoZi0+Zm10LnBpeCkpOwotCQlmLT5mbXQucGl4LndpZHRoICAgICAgICA9IGZoLT53aWR0aDsKLQkJZi0+Zm10LnBpeC5oZWlnaHQgICAgICAgPSBmaC0+aGVpZ2h0OwotCQlmLT5mbXQucGl4LmZpZWxkICAgICAgICA9IGZoLT52aWRxLmZpZWxkOwotCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IGZoLT5mbXQtPmZvdXJjYzsKLQkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPQotCQkJKGYtPmZtdC5waXgud2lkdGggKiBmaC0+Zm10LT5kZXB0aCkgPj4gMzsKLQkJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPQotCQkJZi0+Zm10LnBpeC5oZWlnaHQgKiBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgotCQljeDg4MDBfdmJpX2ZtdChkZXYsIGYpOwotCQlyZXR1cm4gMDsKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9ICgoc3RydWN0IGN4ODgwMF9maCAqKXByaXYpLT5kZXYtPmNvcmU7CisJc3RydWN0IGN4ODgwMF9mbXQgKmZtdDsKKwllbnVtIHY0bDJfZmllbGQgICBmaWVsZDsKKwl1bnNpZ25lZCBpbnQgICAgICBtYXh3LCBtYXhoOworCisJZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlpZiAoTlVMTCA9PSBmbXQpCisJCXJldHVybiAtRUlOVkFMOworCisJZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCW1heHcgID0gbm9ybV9tYXh3KGNvcmUtPnR2bm9ybSk7CisJbWF4aCAgPSBub3JtX21heGgoY29yZS0+dHZub3JtKTsKKworCWlmIChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgeworCQlmaWVsZCA9IChmLT5mbXQucGl4LmhlaWdodCA+IG1heGgvMikKKwkJCT8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECisJCQk6IFY0TDJfRklFTERfQk9UVE9NOworCX0KKworCXN3aXRjaCAoZmllbGQpIHsKKwljYXNlIFY0TDJfRklFTERfVE9QOgorCWNhc2UgVjRMMl9GSUVMRF9CT1RUT006CisJCW1heGggPSBtYXhoIC8gMjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKworCWYtPmZtdC5waXguZmllbGQgPSBmaWVsZDsKKwlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPCAzMikKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSAzMjsKKwlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPiBtYXhoKQorCQlmLT5mbXQucGl4LmhlaWdodCA9IG1heGg7CisJaWYgKGYtPmZtdC5waXgud2lkdGggPCA0OCkKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDQ4OworCWlmIChmLT5mbXQucGl4LndpZHRoID4gbWF4dykKKwkJZi0+Zm10LnBpeC53aWR0aCA9IG1heHc7CisJZi0+Zm10LnBpeC53aWR0aCAmPSB+MHgwMzsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9CisJCShmLT5mbXQucGl4LndpZHRoICogZm10LT5kZXB0aCkgPj4gMzsKKwlmLT5mbXQucGl4LnNpemVpbWFnZSA9CisJCWYtPmZtdC5waXguaGVpZ2h0ICogZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmU7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDg4MDBfdHJ5X2ZtdChzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2LCBzdHJ1Y3QgY3g4ODAwX2ZoICpmaCwKLQkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorc3RhdGljIGludCB2aWRpb2Nfc19mbXRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CisJc3RydWN0IGN4ODgwMF9maCAgKmZoICAgPSBwcml2OworCWludCBlcnIgPSB2aWRpb2NfdHJ5X2ZtdF9jYXAgKGZpbGUscHJpdixmKTsKIAotCXN3aXRjaCAoZi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCXsKLQkJc3RydWN0IGN4ODgwMF9mbXQgKmZtdDsKLQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwotCQl1bnNpZ25lZCBpbnQgbWF4dywgbWF4aDsKLQotCQlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwotCQlpZiAoTlVMTCA9PSBmbXQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlmaWVsZCA9IGYtPmZtdC5waXguZmllbGQ7Ci0JCW1heHcgID0gbm9ybV9tYXh3KGNvcmUtPnR2bm9ybSk7Ci0JCW1heGggID0gbm9ybV9tYXhoKGNvcmUtPnR2bm9ybSk7Ci0KLQkJaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7Ci0JCQlmaWVsZCA9IChmLT5mbXQucGl4LmhlaWdodCA+IG1heGgvMikKLQkJCQk/IFY0TDJfRklFTERfSU5URVJMQUNFRAotCQkJCTogVjRMMl9GSUVMRF9CT1RUT007Ci0JCX0KLQotCQlzd2l0Y2ggKGZpZWxkKSB7Ci0JCWNhc2UgVjRMMl9GSUVMRF9UT1A6Ci0JCWNhc2UgVjRMMl9GSUVMRF9CT1RUT006Ci0JCQltYXhoID0gbWF4aCAvIDI7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZi0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOwotCQlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPCAzMikKLQkJCWYtPmZtdC5waXguaGVpZ2h0ID0gMzI7Ci0JCWlmIChmLT5mbXQucGl4LmhlaWdodCA+IG1heGgpCi0JCQlmLT5mbXQucGl4LmhlaWdodCA9IG1heGg7Ci0JCWlmIChmLT5mbXQucGl4LndpZHRoIDwgNDgpCi0JCQlmLT5mbXQucGl4LndpZHRoID0gNDg7Ci0JCWlmIChmLT5mbXQucGl4LndpZHRoID4gbWF4dykKLQkJCWYtPmZtdC5waXgud2lkdGggPSBtYXh3OwotCQlmLT5mbXQucGl4LndpZHRoICY9IH4weDAzOwotCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9Ci0JCQkoZi0+Zm10LnBpeC53aWR0aCAqIGZtdC0+ZGVwdGgpID4+IDM7Ci0JCWYtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCWYtPmZtdC5waXguaGVpZ2h0ICogZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmU7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKLQkJY3g4ODAwX3ZiaV9mbXQoZGV2LCBmKTsKLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKwlmaC0+Zm10ICAgICAgICA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJZmgtPndpZHRoICAgICAgPSBmLT5mbXQucGl4LndpZHRoOworCWZoLT5oZWlnaHQgICAgID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4ODgwMF9zX2ZtdChzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2LCBzdHJ1Y3QgY3g4ODAwX2ZoICpmaCwKLQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKLQlpbnQgZXJyOwotCi0Jc3dpdGNoIChmLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWVyciA9IGN4ODgwMF90cnlfZm10KGRldixmaCxmKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlmaC0+Zm10ICAgICAgICA9IGZvcm1hdF9ieV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci0JCWZoLT53aWR0aCAgICAgID0gZi0+Zm10LnBpeC53aWR0aDsKLQkJZmgtPmhlaWdodCAgICAgPSBmLT5mbXQucGl4LmhlaWdodDsKLQkJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JCWN4ODgwMF92YmlfZm10KGRldiwgZik7Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgX25vdF8gY2FsbGVkIGRpcmVjdGx5LCBidXQgZnJvbQotICogdmlkZW9fZ2VuZXJpY19pb2N0bCAoYW5kIG1heWJlIG90aGVycykuICB1c2Vyc3BhY2UKLSAqIGNvcHlpbmcgaXMgZG9uZSBhbHJlYWR5LCBhcmcgaXMgYSBrZXJuZWwgcG9pbnRlci4KLSAqLwotc3RhdGljIGludCB2aWRlb19kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBjeDg4MDBfZmggICpmaCAgID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjeDg4MDBfZGV2ICpkZXYgID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2ICA9ICgoc3RydWN0IGN4ODgwMF9maCAqKXByaXYpLT5kZXY7CiAJc3RydWN0IGN4ODhfY29yZSAgKmNvcmUgPSBkZXYtPmNvcmU7Ci0JaW50IGVycjsKIAotCWlmICh2aWRlb19kZWJ1ZyA+IDEpCi0JCXY0bF9wcmludF9pb2N0bChjb3JlLT5uYW1lLGNtZCk7Ci0Jc3dpdGNoIChjbWQpIHsKKwlzdHJjcHkoY2FwLT5kcml2ZXIsICJjeDg4MDAiKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm5hbWUsCisJCXNpemVvZihjYXAtPmNhcmQpKTsKKwlzcHJpbnRmKGNhcC0+YnVzX2luZm8sIlBDSTolcyIscGNpX25hbWUoZGV2LT5wY2kpKTsKKwljYXAtPnZlcnNpb24gPSBDWDg4X1ZFUlNJT05fQ09ERTsKKwljYXAtPmNhcGFiaWxpdGllcyA9CisJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAorCQlWNEwyX0NBUF9SRUFEV1JJVEUgICAgIHwKKwkJVjRMMl9DQVBfU1RSRUFNSU5HICAgICB8CisJCVY0TDJfQ0FQX1ZCSV9DQVBUVVJFOworCWlmIChVTlNFVCAhPSBjb3JlLT50dW5lcl90eXBlKQorCQljYXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX0NBUF9UVU5FUjsKKwlyZXR1cm4gMDsKK30KIAotCS8qIC0tLSBjYXBhYmlsaXRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JY2FzZSBWSURJT0NfUVVFUllDQVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKwlpZiAodW5saWtlbHkoZi0+aW5kZXggPj0gQVJSQVlfU0laRShmb3JtYXRzKSkpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCW1lbXNldChjYXAsMCxzaXplb2YoKmNhcCkpOwotCQlzdHJjcHkoY2FwLT5kcml2ZXIsICJjeDg4MDAiKTsKLQkJc3RybGNweShjYXAtPmNhcmQsIGN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5uYW1lLAotCQkJc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCQlzcHJpbnRmKGNhcC0+YnVzX2luZm8sIlBDSTolcyIscGNpX25hbWUoZGV2LT5wY2kpKTsKLQkJY2FwLT52ZXJzaW9uID0gQ1g4OF9WRVJTSU9OX0NPREU7Ci0JCWNhcC0+Y2FwYWJpbGl0aWVzID0KLQkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAotCQkJVjRMMl9DQVBfUkVBRFdSSVRFICAgICB8Ci0JCQlWNEwyX0NBUF9TVFJFQU1JTkcgICAgIHwKLQkJCVY0TDJfQ0FQX1ZCSV9DQVBUVVJFICAgfAotCQkJMDsKLQkJaWYgKFVOU0VUICE9IGNvcmUtPnR1bmVyX3R5cGUpCi0JCQljYXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX0NBUF9UVU5FUjsKLQkJcmV0dXJuIDA7Ci0JfQorCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sZm9ybWF0c1tmLT5pbmRleF0ubmFtZSxzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwlmLT5waXhlbGZvcm1hdCA9IGZvcm1hdHNbZi0+aW5kZXhdLmZvdXJjYzsKIAotCS8qIC0tLSBjYXB0dXJlIGlvY3RscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmID0gYXJnOwotCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKLQkJdW5zaWduZWQgaW50IGluZGV4OworCXJldHVybiAwOworfQogCi0JCWluZGV4ID0gZi0+aW5kZXg7Ci0JCXR5cGUgID0gZi0+dHlwZTsKLQkJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQkJaWYgKGluZGV4ID49IEFSUkFZX1NJWkUoZm9ybWF0cykpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1zZXQoZiwwLHNpemVvZigqZikpOwotCQkJZi0+aW5kZXggPSBpbmRleDsKLQkJCWYtPnR5cGUgID0gdHlwZTsKLQkJCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sZm9ybWF0c1tpbmRleF0ubmFtZSxzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKLQkJCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c1tpbmRleF0uZm91cmNjOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0JCXJldHVybiBjeDg4MDBfZ19mbXQoZGV2LGZoLGYpOwotCX0KLQljYXNlIFZJRElPQ19TX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQkJcmV0dXJuIGN4ODgwMF9zX2ZtdChkZXYsZmgsZik7Ci0JfQotCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0JCXJldHVybiBjeDg4MDBfdHJ5X2ZtdChkZXYsZmgsZik7Ci0JfQogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCS8qIC0tLSBzdHJlYW1pbmcgY2FwdHVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JY2FzZSBWSURJT0NHTUJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19tYnVmICptYnVmID0gYXJnOwotCQlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnE7Ci0JCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzIHJlcTsKLQkJdW5zaWduZWQgaW50IGk7Ci0KLQkJcSA9IGdldF9xdWV1ZShmaCk7Ci0JCW1lbXNldCgmcmVxLDAsc2l6ZW9mKHJlcSkpOwotCQlyZXEudHlwZSAgID0gcS0+dHlwZTsKLQkJcmVxLmNvdW50ICA9IDg7Ci0JCXJlcS5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOwotCQllcnIgPSB2aWRlb2J1Zl9yZXFidWZzKHEsJnJlcSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJbWVtc2V0KG1idWYsMCxzaXplb2YoKm1idWYpKTsKLQkJbWJ1Zi0+ZnJhbWVzID0gcmVxLmNvdW50OwotCQltYnVmLT5zaXplICAgPSAwOwotCQlmb3IgKGkgPSAwOyBpIDwgbWJ1Zi0+ZnJhbWVzOyBpKyspIHsKLQkJCW1idWYtPm9mZnNldHNbaV0gID0gcS0+YnVmc1tpXS0+Ym9mZjsKLQkJCW1idWYtPnNpemUgICAgICAgKz0gcS0+YnVmc1tpXS0+YnNpemU7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotI2VuZGlmCi0JY2FzZSBWSURJT0NfUkVRQlVGUzoKLQkJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoZ2V0X3F1ZXVlKGZoKSwgYXJnKTsKLQotCWNhc2UgVklESU9DX1FVRVJZQlVGOgotCQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoZ2V0X3F1ZXVlKGZoKSwgYXJnKTsKLQotCWNhc2UgVklESU9DX1FCVUY6Ci0JCXJldHVybiB2aWRlb2J1Zl9xYnVmKGdldF9xdWV1ZShmaCksIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19EUUJVRjoKLQkJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIGFyZywKLQkJCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCi0JY2FzZSBWSURJT0NfU1RSRUFNT046Ci0JewotCQlpbnQgcmVzID0gZ2V0X3Jlc3NvdXJjZShmaCk7Ci0KLQkJaWYgKCFyZXNfZ2V0KGRldixmaCxyZXMpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQkJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKGdldF9xdWV1ZShmaCkpOwotCX0KLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JewotCQlpbnQgcmVzID0gZ2V0X3Jlc3NvdXJjZShmaCk7Ci0KLQkJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCXJlc19mcmVlKGRldixmaCxyZXMpOwotCQlyZXR1cm4gMDsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGN4ODhfZG9faW9jdGwoIGlub2RlLCBmaWxlLCBmaC0+cmFkaW8sIGNvcmUsIGNtZCwgYXJnLCB2aWRlb19kb19pb2N0bCApOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGN4ODhfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIGludCByYWRpbywKLQkJICBzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcsIHY0bDJfa2lvY3RsIGRyaXZlcl9pb2N0bCkKK3N0YXRpYyBpbnQgdmlkaW9jZ21idWYgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKIHsKKwlzdHJ1Y3QgY3g4ODAwX2ZoICAgICAgICAgICAqZmggICA9IHByaXY7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICAgICAgKnE7CisJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgcmVxOworCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKLSAgICAgICBpZiAodmlkZW9fZGVidWcpIHsKLQkgICAgICAgaWYgKHZpZGVvX2RlYnVnID4gMSkgewotCQkgICAgICAgaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1dSSVRFKQotCQkJICAgICAgIHY0bF9wcmludGtfaW9jdGxfYXJnKCJjeDg4KHcpIixjbWQsIGFyZyk7Ci0JCSAgICAgICBlbHNlIGlmICghX0lPQ19ESVIoY21kKSAmIF9JT0NfUkVBRCkgewotCQkJICAgICAgIHY0bF9wcmludF9pb2N0bCgiY3g4OCIsIGNtZCk7Ci0JCSAgICAgICB9Ci0JICAgICAgIH0gZWxzZQotCQkgICAgICAgdjRsX3ByaW50X2lvY3RsKGNvcmUtPm5hbWUsY21kKTsKKwlxID0gZ2V0X3F1ZXVlKGZoKTsKKwltZW1zZXQoJnJlcSwwLHNpemVvZihyZXEpKTsKKwlyZXEudHlwZSAgID0gcS0+dHlwZTsKKwlyZXEuY291bnQgID0gODsKKwlyZXEubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwllcnIgPSB2aWRlb2J1Zl9yZXFidWZzKHEsJnJlcSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKLSAgICAgICB9Ci0KLQlzd2l0Y2ggKGNtZCkgewotCS8qIC0tLS0tLS0tLS0gdHYgbm9ybXMgLS0tLS0tLS0tLSAqLwotCWNhc2UgVklESU9DX0VOVU1TVEQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqZSA9IGFyZzsKLQkJdW5zaWduZWQgaW50IGk7Ci0KLQkJaSA9IGUtPmluZGV4OwotCQlpZiAoaSA+PSBBUlJBWV9TSVpFKHR2bm9ybXMpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWVyciA9IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChlLCB0dm5vcm1zW2UtPmluZGV4XS5pZCwKLQkJCQkJICAgICAgIHR2bm9ybXNbZS0+aW5kZXhdLm5hbWUpOwotCQllLT5pbmRleCA9IGk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfU1REOgotCXsKLQkJdjRsMl9zdGRfaWQgKmlkID0gYXJnOwotCi0JCSppZCA9IGNvcmUtPnR2bm9ybS0+aWQ7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX1NURDoKLQl7Ci0JCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKLQkJdW5zaWduZWQgaW50IGk7Ci0KLQkJZm9yKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0dm5vcm1zKTsgaSsrKQotCQkJaWYgKCppZCAmIHR2bm9ybXNbaV0uaWQpCi0JCQkJYnJlYWs7Ci0JCWlmIChpID09IEFSUkFZX1NJWkUodHZub3JtcykpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsKLQkJY3g4OF9zZXRfdHZub3JtKGNvcmUsJnR2bm9ybXNbaV0pOwotCQltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiAtLS0tLS0gaW5wdXQgc3dpdGNoaW5nIC0tLS0tLS0tLS0gKi8KLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6Ci0JewotCQlzdGF0aWMgY29uc3QgY2hhciAqaW5hbWVbXSA9IHsKLQkJCVsgQ1g4OF9WTVVYX0NPTVBPU0lURTEgXSA9ICJDb21wb3NpdGUxIiwKLQkJCVsgQ1g4OF9WTVVYX0NPTVBPU0lURTIgXSA9ICJDb21wb3NpdGUyIiwKLQkJCVsgQ1g4OF9WTVVYX0NPTVBPU0lURTMgXSA9ICJDb21wb3NpdGUzIiwKLQkJCVsgQ1g4OF9WTVVYX0NPTVBPU0lURTQgXSA9ICJDb21wb3NpdGU0IiwKLQkJCVsgQ1g4OF9WTVVYX1NWSURFTyAgICAgXSA9ICJTLVZpZGVvIiwKLQkJCVsgQ1g4OF9WTVVYX1RFTEVWSVNJT04gXSA9ICJUZWxldmlzaW9uIiwKLQkJCVsgQ1g4OF9WTVVYX0NBQkxFICAgICAgXSA9ICJDYWJsZSBUViIsCi0JCQlbIENYODhfVk1VWF9EVkIgICAgICAgIF0gPSAiRFZCIiwKLQkJCVsgQ1g4OF9WTVVYX0RFQlVHICAgICAgXSA9ICJmb3IgZGVidWcgb25seSIsCi0JCX07Ci0JCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOwotCQl1bnNpZ25lZCBpbnQgbjsKLQotCQluID0gaS0+aW5kZXg7Ci0JCWlmIChuID49IDQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKDAgPT0gSU5QVVQobiktPnR5cGUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWVtc2V0KGksMCxzaXplb2YoKmkpKTsKLQkJaS0+aW5kZXggPSBuOwotCQlpLT50eXBlICA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7Ci0JCXN0cmNweShpLT5uYW1lLGluYW1lW0lOUFVUKG4pLT50eXBlXSk7Ci0JCWlmICgoQ1g4OF9WTVVYX1RFTEVWSVNJT04gPT0gSU5QVVQobiktPnR5cGUpIHx8Ci0JCSAgICAoQ1g4OF9WTVVYX0NBQkxFICAgICAgPT0gSU5QVVQobiktPnR5cGUpKQotCQkJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKLQkJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUodHZub3Jtcyk7IG4rKykKLQkJCWktPnN0ZCB8PSB0dm5vcm1zW25dLmlkOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19JTlBVVDoKLQl7Ci0JCXVuc2lnbmVkIGludCAqaSA9IGFyZzsKLQotCQkqaSA9IGNvcmUtPmlucHV0OwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQl7Ci0JCXVuc2lnbmVkIGludCAqaSA9IGFyZzsKLQotCQlpZiAoKmkgPj0gNCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQltdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsKLQkJY3g4OF9uZXdzdGF0aW9uKGNvcmUpOwotCQl2aWRlb19tdXgoY29yZSwqaSk7Ci0JCW11dGV4X3VubG9jaygmY29yZS0+bG9jayk7Ci0JCXJldHVybiAwOwotCX0KLQotCi0KLQkvKiAtLS0gY29udHJvbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYyA9IGFyZzsKLQotCQlyZXR1cm4gY3g4OF9xdWVyeWN0cmwoYyk7Ci0JfQotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJcmV0dXJuIGdldF9jb250cm9sKGNvcmUsYXJnKTsKLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXJldHVybiBzZXRfY29udHJvbChjb3JlLGFyZyk7Ci0KLQkvKiAtLS0gdHVuZXIgaW9jdGxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKLQkJdTMyIHJlZzsKLQotCQlpZiAoVU5TRVQgPT0gY29yZS0+dHVuZXJfdHlwZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoMCAhPSB0LT5pbmRleCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldCh0LDAsc2l6ZW9mKCp0KSk7Ci0JCXN0cmNweSh0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOwotCQl0LT50eXBlICAgICAgID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNOwotCQl0LT5yYW5nZWhpZ2ggID0gMHhmZmZmZmZmZlVMOwotCi0JCWN4ODhfZ2V0X3N0ZXJlbyhjb3JlICx0KTsKLQkJcmVnID0gY3hfcmVhZChNT19ERVZJQ0VfU1RBVFVTKTsKLQkJdC0+c2lnbmFsID0gKHJlZyAmICgxPDw1KSkgPyAweGZmZmYgOiAweDAwMDA7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0KLQkJaWYgKFVOU0VUID09IGNvcmUtPnR1bmVyX3R5cGUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKDAgIT0gdC0+aW5kZXgpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY3g4OF9zZXRfc3RlcmVvKGNvcmUsIHQtPmF1ZG1vZGUsIDEpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7Ci0KLQkJbWVtc2V0KGYsMCxzaXplb2YoKmYpKTsKLQotCQlpZiAoVU5TRVQgPT0gY29yZS0+dHVuZXJfdHlwZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIGYtPnR5cGUgPSBmaC0+cmFkaW8gPyBWNEwyX1RVTkVSX1JBRElPIDogVjRMMl9UVU5FUl9BTkFMT0dfVFY7ICovCi0JCWYtPnR5cGUgPSByYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQkJZi0+ZnJlcXVlbmN5ID0gY29yZS0+ZnJlcTsKLQotCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfR19GUkVRVUVOQ1ksZik7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCXsKLQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwotCi0JCWlmIChVTlNFVCA9PSBjb3JlLT50dW5lcl90eXBlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChmLT50dW5lciAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICgwID09IHJhZGlvICYmIGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9BTkFMT0dfVFYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKDEgPT0gcmFkaW8gJiYgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW11dGV4X2xvY2soJmNvcmUtPmxvY2spOwotCQljb3JlLT5mcmVxID0gZi0+ZnJlcXVlbmN5OwotCQljeDg4X25ld3N0YXRpb24oY29yZSk7Ci0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLFZJRElPQ19TX0ZSRVFVRU5DWSxmKTsKLQotCQkvKiBXaGVuIGNoYW5naW5nIGNoYW5uZWxzIGl0IGlzIHJlcXVpcmVkIHRvIHJlc2V0IFRWQVVESU8gKi8KLQkJbXNsZWVwICgxMCk7Ci0JCWN4ODhfc2V0X3R2YXVkaW8oY29yZSk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQkvKiBpb2N0bHMgdG8gYWxsb3cgZGlyZWN0IGFjY2VzIHRvIHRoZSBjeDIzODh4IHJlZ2lzdGVycyAqLwotCWNhc2UgVklESU9DX0lOVF9HX1JFR0lTVEVSOgotCXsKLQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKLQotCQlpZiAocmVnLT5pMmNfaWQgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQkvKiBjeDIzODh4IGhhcyBhIDI0LWJpdCByZWdpc3RlciBzcGFjZSAqLwotCQlyZWctPnZhbCA9IGN4X3JlYWQocmVnLT5yZWcmMHhmZmZmZmYpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfSU5UX1NfUkVHSVNURVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOwotCi0JCWlmIChyZWctPmkyY19pZCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JCWN4X3dyaXRlKHJlZy0+cmVnJjB4ZmZmZmZmLCByZWctPnZhbCk7Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGlub2RlLGZpbGUsY21kLGFyZywKLQkJCQkJCSAgZHJpdmVyX2lvY3RsKTsKKwltYnVmLT5mcmFtZXMgPSByZXEuY291bnQ7CisJbWJ1Zi0+c2l6ZSAgID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWJ1Zi0+ZnJhbWVzOyBpKyspIHsKKwkJbWJ1Zi0+b2Zmc2V0c1tpXSAgPSBxLT5idWZzW2ldLT5ib2ZmOworCQltYnVmLT5zaXplICAgICAgICs9IHEtPmJ1ZnNbaV0tPmJzaXplOwogCX0KIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCi1zdGF0aWMgaW50IHZpZGVvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCiB7Ci0gICAgICAgaW50IHJldHZhbDsKLQotICAgICAgIHJldHZhbD12aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHZpZGVvX2RvX2lvY3RsKTsKLQotICAgICAgIGlmICh2aWRlb19kZWJ1ZyA+IDEpIHsKLQkgICAgICAgaWYgKHJldHZhbCA8IDApIHsKLQkJICAgICAgIHY0bF9wcmludF9pb2N0bCgiY3g4OChlcnIpIiwgY21kKTsKLQkJICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJjeDg4KGVycik6IGVycmNvZGU9JWRcbiIscmV0dmFsKTsKLQkgICAgICAgfSBlbHNlIGlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19SRUFEKQotCQkgICAgICAgdjRsX3ByaW50a19pb2N0bF9hcmcoImN4ODgocikiLGNtZCwgKHZvaWQgKilhcmcpOwotICAgICAgIH0KLQotICAgICAgIHJldHVybiByZXR2YWw7CisJc3RydWN0IGN4ODgwMF9maCAgKmZoICAgPSBwcml2OworCXJldHVybiAodmlkZW9idWZfcmVxYnVmcyhnZXRfcXVldWUoZmgpLCBwKSk7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCXN0cnVjdCBjeDg4MDBfZmggICpmaCAgID0gcHJpdjsKKwlyZXR1cm4gKHZpZGVvYnVmX3F1ZXJ5YnVmKGdldF9xdWV1ZShmaCksIHApKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcWJ1ZiAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgY3g4ODAwX2ZoICAqZmggICA9IHByaXY7CisJcmV0dXJuICh2aWRlb2J1Zl9xYnVmKGdldF9xdWV1ZShmaCksIHApKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJc3RydWN0IGN4ODgwMF9maCAgKmZoICAgPSBwcml2OworCXJldHVybiAodmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwKKwkJCQlmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IGN4ODgwMF9maCAgKmZoICAgPSBwcml2OworCXN0cnVjdCBjeDg4MDBfZGV2ICpkZXYgID0gZmgtPmRldjsKKworCWlmICh1bmxpa2VseShmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodW5saWtlbHkoaSAhPSBmaC0+dHlwZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGRldixmaCxnZXRfcmVzc291cmNlKGZoKSkpKQorCQlyZXR1cm4gLUVCVVNZOworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbihnZXRfcXVldWUoZmgpKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgY3g4ODAwX2ZoICAqZmggICA9IHByaXY7CisJc3RydWN0IGN4ODgwMF9kZXYgKmRldiAgPSBmaC0+ZGV2OworCWludCAgICAgICAgICAgICAgIGVyciwgcmVzOworCisJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGkgIT0gZmgtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzID0gZ2V0X3Jlc3NvdXJjZShmaCk7CisJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKGdldF9xdWV1ZShmaCkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJlc19mcmVlKGRldixmaCxyZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICp0dm5vcm1zKQoreworCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gKChzdHJ1Y3QgY3g4ODAwX2ZoICopcHJpdiktPmRldi0+Y29yZTsKKworCW11dGV4X2xvY2soJmNvcmUtPmxvY2spOworCWN4ODhfc2V0X3R2bm9ybShjb3JlLCp0dm5vcm1zKTsKKwltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG9ubHkgb25lIGlucHV0IGluIHRoaXMgc2FtcGxlIGRyaXZlciAqLworaW50IGN4ODhfZW51bV9pbnB1dCAoc3RydWN0IGN4ODhfY29yZSAgKmNvcmUsc3RydWN0IHY0bDJfaW5wdXQgKmkpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmluYW1lW10gPSB7CisJCVsgQ1g4OF9WTVVYX0NPTVBPU0lURTEgXSA9ICJDb21wb3NpdGUxIiwKKwkJWyBDWDg4X1ZNVVhfQ09NUE9TSVRFMiBdID0gIkNvbXBvc2l0ZTIiLAorCQlbIENYODhfVk1VWF9DT01QT1NJVEUzIF0gPSAiQ29tcG9zaXRlMyIsCisJCVsgQ1g4OF9WTVVYX0NPTVBPU0lURTQgXSA9ICJDb21wb3NpdGU0IiwKKwkJWyBDWDg4X1ZNVVhfU1ZJREVPICAgICBdID0gIlMtVmlkZW8iLAorCQlbIENYODhfVk1VWF9URUxFVklTSU9OIF0gPSAiVGVsZXZpc2lvbiIsCisJCVsgQ1g4OF9WTVVYX0NBQkxFICAgICAgXSA9ICJDYWJsZSBUViIsCisJCVsgQ1g4OF9WTVVYX0RWQiAgICAgICAgXSA9ICJEVkIiLAorCQlbIENYODhfVk1VWF9ERUJVRyAgICAgIF0gPSAiZm9yIGRlYnVnIG9ubHkiLAorCX07CisJdW5zaWduZWQgaW50IG47CisKKwluID0gaS0+aW5kZXg7CisJaWYgKG4gPj0gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKDAgPT0gSU5QVVQobiktPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCW1lbXNldChpLDAsc2l6ZW9mKCppKSk7CisJaS0+aW5kZXggPSBuOworCWktPnR5cGUgID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwlzdHJjcHkoaS0+bmFtZSxpbmFtZVtJTlBVVChuKS0+dHlwZV0pOworCWlmICgoQ1g4OF9WTVVYX1RFTEVWSVNJT04gPT0gSU5QVVQobiktPnR5cGUpIHx8CisJCShDWDg4X1ZNVVhfQ0FCTEUgICAgICA9PSBJTlBVVChuKS0+dHlwZSkpCisJCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7CisJCWktPnN0ZCA9IENYODhfTk9STVM7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGN4ODhfZW51bV9pbnB1dCk7CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2lucHV0ICppKQoreworCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gKChzdHJ1Y3QgY3g4ODAwX2ZoICopcHJpdiktPmRldi0+Y29yZTsKKwlyZXR1cm4gY3g4OF9lbnVtX2lucHV0IChjb3JlLGkpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gKChzdHJ1Y3QgY3g4ODAwX2ZoICopcHJpdiktPmRldi0+Y29yZTsKKworCSppID0gY29yZS0+aW5wdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9ICgoc3RydWN0IGN4ODgwMF9maCAqKXByaXYpLT5kZXYtPmNvcmU7CisKKwlpZiAoaSA+PSA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNvcmUtPmxvY2spOworCWN4ODhfbmV3c3RhdGlvbihjb3JlKTsKKwljeDg4X3ZpZGVvX211eChjb3JlLGkpOworCW11dGV4X3VubG9jaygmY29yZS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCit7CisJcWN0cmwtPmlkID0gdjRsMl9jdHJsX25leHQoY3RybF9jbGFzc2VzLCBxY3RybC0+aWQpOworCWlmICh1bmxpa2VseShxY3RybC0+aWQgPT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBjeDg4MDBfY3RybF9xdWVyeShxY3RybCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gKChzdHJ1Y3QgY3g4ODAwX2ZoICopcHJpdiktPmRldi0+Y29yZTsKKwlyZXR1cm4KKwkJY3g4OF9nZXRfY29udHJvbChjb3JlLGN0bCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQoreworCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gKChzdHJ1Y3QgY3g4ODAwX2ZoICopcHJpdiktPmRldi0+Y29yZTsKKwlyZXR1cm4KKwkJY3g4OF9zZXRfY29udHJvbChjb3JlLGN0bCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gKChzdHJ1Y3QgY3g4ODAwX2ZoICopcHJpdiktPmRldi0+Y29yZTsKKwl1MzIgcmVnOworCisJaWYgKHVubGlrZWx5KFVOU0VUID09IGNvcmUtPnR1bmVyX3R5cGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoMCAhPSB0LT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwl0LT50eXBlICAgICAgID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk07CisJdC0+cmFuZ2VoaWdoICA9IDB4ZmZmZmZmZmZVTDsKKworCWN4ODhfZ2V0X3N0ZXJlbyhjb3JlICx0KTsKKwlyZWcgPSBjeF9yZWFkKE1PX0RFVklDRV9TVEFUVVMpOworCXQtPnNpZ25hbCA9IChyZWcgJiAoMTw8NSkpID8gMHhmZmZmIDogMHgwMDAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9ICgoc3RydWN0IGN4ODgwMF9maCAqKXByaXYpLT5kZXYtPmNvcmU7CisKKwlpZiAoVU5TRVQgPT0gY29yZS0+dHVuZXJfdHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKDAgIT0gdC0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCisJY3g4OF9zZXRfc3RlcmVvKGNvcmUsIHQtPmF1ZG1vZGUsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBjeDg4MDBfZmggICpmaCAgID0gcHJpdjsKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9IGZoLT5kZXYtPmNvcmU7CisKKwlpZiAodW5saWtlbHkoVU5TRVQgPT0gY29yZS0+dHVuZXJfdHlwZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZi0+dHlwZSA9IGZoLT5yYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsgKi8KKwlmLT50eXBlID0gZmgtPnJhZGlvID8gVjRMMl9UVU5FUl9SQURJTyA6IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCWYtPmZyZXF1ZW5jeSA9IGNvcmUtPmZyZXE7CisKKwljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfR19GUkVRVUVOQ1ksZik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGN4ODhfc2V0X2ZyZXEgKHN0cnVjdCBjeDg4X2NvcmUgICpjb3JlLAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlpZiAodW5saWtlbHkoVU5TRVQgPT0gY29yZS0+dHVuZXJfdHlwZSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh1bmxpa2VseShmLT50dW5lciAhPSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsKKwljb3JlLT5mcmVxID0gZi0+ZnJlcXVlbmN5OworCWN4ODhfbmV3c3RhdGlvbihjb3JlKTsKKwljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfU19GUkVRVUVOQ1ksZik7CisKKwkvKiBXaGVuIGNoYW5naW5nIGNoYW5uZWxzIGl0IGlzIHJlcXVpcmVkIHRvIHJlc2V0IFRWQVVESU8gKi8KKwltc2xlZXAgKDEwKTsKKwljeDg4X3NldF90dmF1ZGlvKGNvcmUpOworCisJbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjeDg4X3NldF9mcmVxKTsKKworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgY3g4ODAwX2ZoICAqZmggICA9IHByaXY7CisJc3RydWN0IGN4ODhfY29yZSAgKmNvcmUgPSBmaC0+ZGV2LT5jb3JlOworCisJaWYgKHVubGlrZWx5KDAgPT0gZmgtPnJhZGlvICYmIGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9BTkFMT0dfVFYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodW5saWtlbHkoMSA9PSBmaC0+cmFkaW8gJiYgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4KKwkJY3g4OF9zZXRfZnJlcSAoY29yZSxmKTsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgdmlkaW9jX2dfcmVnaXN0ZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSAoKHN0cnVjdCBjeDg4MDBfZmgqKWZoKS0+ZGV2LT5jb3JlOworCisJaWYgKHJlZy0+aTJjX2lkICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCS8qIGN4MjM4OHggaGFzIGEgMjQtYml0IHJlZ2lzdGVyIHNwYWNlICovCisJcmVnLT52YWwgPSBjeF9yZWFkKHJlZy0+cmVnJjB4ZmZmZmZmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19yZWdpc3RlciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9ICgoc3RydWN0IGN4ODgwMF9maCopZmgpLT5kZXYtPmNvcmU7CisKKwlpZiAocmVnLT5pMmNfaWQgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3hfd3JpdGUocmVnLT5yZWcmMHhmZmZmZmYsIHJlZy0+dmFsKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogUkFESU8gRVNQRUNJRklDIElPQ1RMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgcmFkaW9fZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHJhZGlvX3F1ZXJ5Y2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKLQlzdHJ1Y3QgY3g4ODAwX2ZoICpmaCAgICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2ICA9IGZoLT5kZXY7CisJc3RydWN0IGN4ODgwMF9kZXYgKmRldiAgPSAoKHN0cnVjdCBjeDg4MDBfZmggKilwcml2KS0+ZGV2OwogCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlID0gZGV2LT5jb3JlOwogCi0JaWYgKHZpZGVvX2RlYnVnID4gMSkKLQkJdjRsX3ByaW50X2lvY3RsKGNvcmUtPm5hbWUsY21kKTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfUVVFUllDQVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJbWVtc2V0KGNhcCwwLHNpemVvZigqY2FwKSk7Ci0JCXN0cmNweShjYXAtPmRyaXZlciwgImN4ODgwMCIpOwotCQlzdHJsY3B5KGNhcC0+Y2FyZCwgY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm5hbWUsCi0JCQlzaXplb2YoY2FwLT5jYXJkKSk7Ci0JCXNwcmludGYoY2FwLT5idXNfaW5mbywiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wY2kpKTsKLQkJY2FwLT52ZXJzaW9uID0gQ1g4OF9WRVJTSU9OX0NPREU7Ci0JCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0KLQkJaWYgKHQtPmluZGV4ID4gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldCh0LDAsc2l6ZW9mKCp0KSk7Ci0JCXN0cmNweSh0LT5uYW1lLCAiUmFkaW8iKTsKLQkJdC0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0KLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX0dfVFVORVIsdCk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKLQotCQlpZiAoaS0+aW5kZXggIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdHJjcHkoaS0+bmFtZSwiUmFkaW8iKTsKLQkJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JewotCQlpbnQgKmkgPSBhcmc7Ci0JCSppID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQotCQltZW1zZXQoYSwwLHNpemVvZigqYSkpOwotCQlzdHJjcHkoYS0+bmFtZSwiUmFkaW8iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfU1REOgotCXsKLQkJdjRsMl9zdGRfaWQgKmlkID0gYXJnOwotCQkqaWQgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JY2FzZSBWSURJT0NTVFVORVI6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7Ci0KLQkJaWYgKHYtPnR1bmVyKSAvKiBPbmx5IHR1bmVyIDAgKi8KLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLFZJRElPQ1NUVU5FUix2KTsKLQkJcmV0dXJuIDA7Ci0JfQotI2VuZGlmCi0JY2FzZSBWSURJT0NfU19UVU5FUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOwotCi0JCWlmICgwICE9IHQtPmluZGV4KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfVFVORVIsdCk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBWSURJT0NfU19BVURJTzoKLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCWNhc2UgVklESU9DX1NfU1REOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYyA9IGFyZzsKLQkJaW50IGk7Ci0KLQkJaWYgKGMtPmlkIDwgIFY0TDJfQ0lEX0JBU0UgfHwKLQkJICAgIGMtPmlkID49IFY0TDJfQ0lEX0xBU1RQMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoYy0+aWQgPT0gVjRMMl9DSURfQVVESU9fTVVURSkgewotCQkJZm9yIChpID0gMDsgaSA8IENYODgwMF9DVExTOyBpKyspCi0JCQkJaWYgKGN4ODgwMF9jdGxzW2ldLnYuaWQgPT0gYy0+aWQpCi0JCQkJCWJyZWFrOwotCQkJKmMgPSBjeDg4MDBfY3Rsc1tpXS52OwotCQl9IGVsc2UKLQkJCSpjID0gbm9fY3RsOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JCXJldHVybiB2aWRlb19kb19pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcpOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGlub2RlLGZpbGUsY21kLGFyZywKLQkJCQkJCSAgcmFkaW9fZG9faW9jdGwpOwotCX0KKwlzdHJjcHkoY2FwLT5kcml2ZXIsICJjeDg4MDAiKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm5hbWUsCisJCXNpemVvZihjYXAtPmNhcmQpKTsKKwlzcHJpbnRmKGNhcC0+YnVzX2luZm8sIlBDSTolcyIsIHBjaV9uYW1lKGRldi0+cGNpKSk7CisJY2FwLT52ZXJzaW9uID0gQ1g4OF9WRVJTSU9OX0NPREU7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKIAlyZXR1cm4gMDsKLX07Cit9CiAKLXN0YXRpYyBpbnQgcmFkaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgcmFkaW9fZ190dW5lciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQpCiB7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgcmFkaW9fZG9faW9jdGwpOwotfTsKKwlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9ICgoc3RydWN0IGN4ODgwMF9maCAqKXByaXYpLT5kZXYtPmNvcmU7CisKKwlpZiAodW5saWtlbHkodC0+aW5kZXggPiAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJjcHkodC0+bmFtZSwgIlJhZGlvIik7CisJdC0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisKKwljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfR19UVU5FUix0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByYWRpb19lbnVtX2lucHV0IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlpZiAoaS0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3RyY3B5KGktPm5hbWUsIlJhZGlvIik7CisJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhZGlvX2dfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAodW5saWtlbHkoYS0+aW5kZXgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChhLDAsc2l6ZW9mKCphKSk7CisJc3RyY3B5KGEtPm5hbWUsIlJhZGlvIik7CisJcmV0dXJuIDA7Cit9CisKKy8qIEZJWE1FOiBTaG91bGQgYWRkIGEgc3RhbmRhcmQgZm9yIHJhZGlvICovCisKK3N0YXRpYyBpbnQgcmFkaW9fc190dW5lciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQpCit7CisJc3RydWN0IGN4ODhfY29yZSAgKmNvcmUgPSAoKHN0cnVjdCBjeDg4MDBfZmggKilwcml2KS0+ZGV2LT5jb3JlOworCisJaWYgKDAgIT0gdC0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCisJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfVFVORVIsdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByYWRpb19zX2F1ZGlvIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhZGlvX3NfaW5wdXQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFkaW9fcXVlcnljdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMpCit7CisJaW50IGk7CisKKwlpZiAoYy0+aWQgPCAgVjRMMl9DSURfQkFTRSB8fAorCQljLT5pZCA+PSBWNEwyX0NJRF9MQVNUUDEpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7CisJCWZvciAoaSA9IDA7IGkgPCBDWDg4MDBfQ1RMUzsgaSsrKQorCQkJaWYgKGN4ODgwMF9jdGxzW2ldLnYuaWQgPT0gYy0+aWQpCisJCQkJYnJlYWs7CisJCSpjID0gY3g4ODAwX2N0bHNbaV0udjsKKwl9IGVsc2UKKwkJKmMgPSBub19jdGw7CisJcmV0dXJuIDA7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTE4MTYsMjcgKzE2MzgsNTIgQEAKIAkucmVhZAkgICAgICAgPSB2aWRlb19yZWFkLAogCS5wb2xsICAgICAgICAgID0gdmlkZW9fcG9sbCwKIAkubW1hcAkgICAgICAgPSB2aWRlb19tbWFwLAotCS5pb2N0bAkgICAgICAgPSB2aWRlb19pb2N0bCwKKwkuaW9jdGwJICAgICAgID0gdmlkZW9faW9jdGwyLAogCS5jb21wYXRfaW9jdGwgID0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgICAgICAgID0gbm9fbGxzZWVrLAogfTsKIAorc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3g4ODAwX3ZiaV90ZW1wbGF0ZTsKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4ODgwMF92aWRlb190ZW1wbGF0ZSA9CiB7Ci0JLm5hbWUgICAgICAgICAgPSAiY3g4ODAwLXZpZGVvIiwKLQkudHlwZSAgICAgICAgICA9IFZJRF9UWVBFX0NBUFRVUkV8VklEX1RZUEVfVFVORVJ8VklEX1RZUEVfU0NBTEVTLAotCS5oYXJkd2FyZSAgICAgID0gMCwKLQkuZm9wcyAgICAgICAgICA9ICZ2aWRlb19mb3BzLAotCS5taW5vciAgICAgICAgID0gLTEsCi19OwotCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBjeDg4MDBfdmJpX3RlbXBsYXRlID0KLXsKLQkubmFtZSAgICAgICAgICA9ICJjeDg4MDAtdmJpIiwKLQkudHlwZSAgICAgICAgICA9IFZJRF9UWVBFX1RFTEVURVhUfFZJRF9UWVBFX1RVTkVSLAotCS5oYXJkd2FyZSAgICAgID0gMCwKLQkuZm9wcyAgICAgICAgICA9ICZ2aWRlb19mb3BzLAotCS5taW5vciAgICAgICAgID0gLTEsCisJLm5hbWUgICAgICAgICAgICAgICAgID0gImN4ODgwMC12aWRlbyIsCisJLnR5cGUgICAgICAgICAgICAgICAgID0gVklEX1RZUEVfQ0FQVFVSRXxWSURfVFlQRV9UVU5FUnxWSURfVFlQRV9TQ0FMRVMsCisJLmZvcHMgICAgICAgICAgICAgICAgID0gJnZpZGVvX2ZvcHMsCisJLm1pbm9yICAgICAgICAgICAgICAgID0gLTEsCisJLnZpZGlvY19xdWVyeWNhcCAgICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfY2FwICA9IHZpZGlvY19lbnVtX2ZtdF9jYXAsCisJLnZpZGlvY19nX2ZtdF9jYXAgICAgID0gdmlkaW9jX2dfZm10X2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfY2FwICAgPSB2aWRpb2NfdHJ5X2ZtdF9jYXAsCisJLnZpZGlvY19zX2ZtdF9jYXAgICAgID0gdmlkaW9jX3NfZm10X2NhcCwKKwkudmlkaW9jX2dfZm10X3ZiaSAgICAgPSBjeDg4MDBfdmJpX2ZtdCwKKwkudmlkaW9jX3RyeV9mbXRfdmJpICAgPSBjeDg4MDBfdmJpX2ZtdCwKKwkudmlkaW9jX3NfZm10X3ZiaSAgICAgPSBjeDg4MDBfdmJpX2ZtdCwKKwkudmlkaW9jX3JlcWJ1ZnMgICAgICAgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmICAgICAgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmICAgICAgICAgID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiAgICAgICAgID0gdmlkaW9jX2RxYnVmLAorCS52aWRpb2Nfc19zdGQgICAgICAgICA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX2VudW1faW5wdXQgICAgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgICAgICAgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgICAgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCAgICAgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgICA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICAgID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3N0cmVhbW9uICAgICAgPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgICAgID0gdmlkaW9jX3N0cmVhbW9mZiwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorCS52aWRpb2NfZ190dW5lciAgICAgICA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciAgICAgICA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgICA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ICAgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciAgICA9IHZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciAgICA9IHZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCisJLnR2bm9ybXMgICAgICAgICAgICAgID0gQ1g4OF9OT1JNUywKKwkuY3VycmVudF9ub3JtICAgICAgICAgPSBWNEwyX1NURF9OVFNDX00sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYWRpb19mb3BzID0KQEAgLTE4NDQsMTggKzE2OTEsMzAgQEAKIAkub3duZXIgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5vcGVuICAgICAgICAgID0gdmlkZW9fb3BlbiwKIAkucmVsZWFzZSAgICAgICA9IHZpZGVvX3JlbGVhc2UsCi0JLmlvY3RsICAgICAgICAgPSByYWRpb19pb2N0bCwKKwkuaW9jdGwgICAgICAgICA9IHZpZGVvX2lvY3RsMiwKIAkuY29tcGF0X2lvY3RsICA9IHY0bF9jb21wYXRfaW9jdGwzMiwKIAkubGxzZWVrICAgICAgICA9IG5vX2xsc2VlaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGN4ODgwMF9yYWRpb190ZW1wbGF0ZSA9CiB7Ci0JLm5hbWUgICAgICAgICAgPSAiY3g4ODAwLXJhZGlvIiwKLQkudHlwZSAgICAgICAgICA9IFZJRF9UWVBFX1RVTkVSLAotCS5oYXJkd2FyZSAgICAgID0gMCwKLQkuZm9wcyAgICAgICAgICA9ICZyYWRpb19mb3BzLAotCS5taW5vciAgICAgICAgID0gLTEsCisJLm5hbWUgICAgICAgICAgICAgICAgID0gImN4ODgwMC1yYWRpbyIsCisJLnR5cGUgICAgICAgICAgICAgICAgID0gVklEX1RZUEVfVFVORVIsCisJLmhhcmR3YXJlICAgICAgICAgICAgID0gMCwKKwkuZm9wcyAgICAgICAgICAgICAgICAgPSAmcmFkaW9fZm9wcywKKwkubWlub3IgICAgICAgICAgICAgICAgPSAtMSwKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgICAgPSByYWRpb19xdWVyeWNhcCwKKwkudmlkaW9jX2dfdHVuZXIgICAgICAgPSByYWRpb19nX3R1bmVyLAorCS52aWRpb2NfZW51bV9pbnB1dCAgICA9IHJhZGlvX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2F1ZGlvICAgICAgID0gcmFkaW9fZ19hdWRpbywKKwkudmlkaW9jX3NfdHVuZXIgICAgICAgPSByYWRpb19zX3R1bmVyLAorCS52aWRpb2Nfc19hdWRpbyAgICAgICA9IHJhZGlvX3NfYXVkaW8sCisJLnZpZGlvY19zX2lucHV0ICAgICAgID0gcmFkaW9fc19pbnB1dCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCAgICAgPSByYWRpb19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICAgID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgICAgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgICA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ICAgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTg5MCw2ICsxNzQ5LDcgQEAKIHsKIAlzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2OwogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmU7CisKIAlpbnQgZXJyOwogCiAJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksR0ZQX0tFUk5FTCk7CkBAIC0xOTI0LDkgKzE3ODQsMTUgQEAKIAkJZ290byBmYWlsX2NvcmU7CiAJfQogCisJLyogSW5pdGlhbGl6ZSBWQkkgdGVtcGxhdGUgKi8KKwltZW1jcHkoICZjeDg4MDBfdmJpX3RlbXBsYXRlLCAmY3g4ODAwX3ZpZGVvX3RlbXBsYXRlLAorCQlzaXplb2YoY3g4ODAwX3ZiaV90ZW1wbGF0ZSkgKTsKKwlzdHJjcHkoY3g4ODAwX3ZiaV90ZW1wbGF0ZS5uYW1lLCJjeDg4MDAtdmJpIik7CisJY3g4ODAwX3ZiaV90ZW1wbGF0ZS50eXBlID0gVklEX1RZUEVfVEVMRVRFWFR8VklEX1RZUEVfVFVORVI7CisKIAkvKiBpbml0aWFsaXplIGRyaXZlciBzdHJ1Y3QgKi8KIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7Ci0JY29yZS0+dHZub3JtID0gdHZub3JtczsKKwljb3JlLT50dm5vcm0gPSBjeDg4MDBfdmlkZW9fdGVtcGxhdGUuY3VycmVudF9ub3JtOwogCiAJLyogaW5pdCB2aWRlbyBkbWEgcXVldWVzICovCiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5hY3RpdmUpOwpAQCAtMjAwNyw5ICsxODczLDkgQEAKIAogCS8qIGluaXRpYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KIAltdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsKLQljeDg4X3NldF90dm5vcm0oY29yZSx0dm5vcm1zKTsKKwljeDg4X3NldF90dm5vcm0oY29yZSxjb3JlLT50dm5vcm0pOwogCWluaXRfY29udHJvbHMoY29yZSk7Ci0JdmlkZW9fbXV4KGNvcmUsMCk7CisJY3g4OF92aWRlb19tdXgoY29yZSwwKTsKIAltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOwogCiAJLyogc3RhcnQgdHZhdWRpbyB0aHJlYWQgKi8KQEAgLTIxNzgsOCArMjA0NCw2IEBACiBtb2R1bGVfaW5pdChjeDg4MDBfaW5pdCk7CiBtb2R1bGVfZXhpdChjeDg4MDBfZmluaSk7CiAKLUVYUE9SVF9TWU1CT0woY3g4OF9kb19pb2N0bCk7Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggYTk1NzVhZC4uZDJlY2ZiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC0zMSw3ICszMSw5IEBACiAjaW5jbHVkZSA8bWVkaWEvdmlkZW8tYnVmLmg+CiAjaW5jbHVkZSA8bWVkaWEvY3gyMzQxeC5oPgogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0JVRl9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0JVRl9EVkJfTU9EVUxFKQogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvLWJ1Zi1kdmIuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSAiYnRjeC1yaXNjLmgiCiAjaW5jbHVkZSAiY3g4OC1yZWcuaCIKQEAgLTUwLDYgKzUyLDEzIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZGVmaW5lcyBhbmQgZW51bXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAorLyogQ3VycmVudGx5IHVuc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXI6IFBBTC9ILCBOVFNDL0tyLCBTRUNBTSBCL0cvSC9MQyAqLworI2RlZmluZSBDWDg4X05PUk1TIChcCisJVjRMMl9TVERfTlRTQ19NfCAgVjRMMl9TVERfTlRTQ19NX0pQfCAgVjRMMl9TVERfTlRTQ180NDMgfCBcCisJVjRMMl9TVERfUEFMX0JHfCAgVjRMMl9TVERfUEFMX0RLICAgfCAgVjRMMl9TVERfUEFMX0kgICAgfCBcCisJVjRMMl9TVERfUEFMX00gfCAgVjRMMl9TVERfUEFMX04gICAgfCAgVjRMMl9TVERfUEFMX05jICAgfCBcCisJVjRMMl9TVERfUEFMXzYwfCAgVjRMMl9TVERfU0VDQU1fTCAgfCAgVjRMMl9TVERfU0VDQU1fREsgKQorCiAjZGVmaW5lIEZPUk1BVF9GTEFHU19QQUNLRUQgICAgICAgMHgwMQogI2RlZmluZSBGT1JNQVRfRkxBR1NfUExBTkFSICAgICAgIDB4MDIKIApAQCAtODIsMjIgKzkxLDE1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogdHYgbm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotc3RydWN0IGN4ODhfdHZub3JtIHsKLQljaGFyICAgICAgICAgICAgICAgICAgICpuYW1lOwotCXY0bDJfc3RkX2lkICAgICAgICAgICAgaWQ7Ci0JdTMyICAgICAgICAgICAgICAgICAgICBjeGlmb3JtYXQ7Ci0JdTMyICAgICAgICAgICAgICAgICAgICBjeG9mb3JtYXQ7Ci19OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGlubGluZSBub3JtX21heHcoc3RydWN0IGN4ODhfdHZub3JtICpub3JtKQorc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV9tYXh3KHY0bDJfc3RkX2lkIG5vcm0pCiB7Ci0JcmV0dXJuIChub3JtLT5pZCAmIChWNEwyX1NURF9NTiAmIH5WNEwyX1NURF9QQUxfTmMpKSA/IDcyMCA6IDc2ODsKKwlyZXR1cm4gKG5vcm0gJiAoVjRMMl9TVERfTU4gJiB+VjRMMl9TVERfUEFMX05jKSkgPyA3MjAgOiA3Njg7CiB9CiAKIAotc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV9tYXhoKHN0cnVjdCBjeDg4X3R2bm9ybSAqbm9ybSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5saW5lIG5vcm1fbWF4aCh2NGwyX3N0ZF9pZCBub3JtKQogewotCXJldHVybiAobm9ybS0+aWQgJiBWNEwyX1NURF82MjVfNTApID8gNTc2IDogNDgwOworCXJldHVybiAobm9ybSAmIFY0TDJfU1REXzYyNV81MCkgPyA1NzYgOiA0ODA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zMTMsMTMgKzMxNSwxNSBAQAogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHR1bmVyX2Zvcm1hdHM7CiAKIAkvKiBjb25maWcgaW5mbyAtLSBkdmIgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19WSURFT19CVUZfRFZCKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19CVUZfRFZCX01PRFVMRSkKIAlzdHJ1Y3QgZHZiX3BsbF9kZXNjICAgICAgICAqcGxsX2Rlc2M7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgcGxsX2FkZHI7CiAJaW50IAkJCSAgICgqcHJldl9zZXRfdm9sdGFnZSkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSk7CisjZW5kaWYKIAogCS8qIHN0YXRlIGluZm8gKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAgICAgICAqa3RocmVhZDsKLQlzdHJ1Y3QgY3g4OF90dm5vcm0gICAgICAgICAqdHZub3JtOworCXY0bDJfc3RkX2lkICAgICAgICAgICAgICAgIHR2bm9ybTsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICB0dmF1ZGlvOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvbW9kZV9tYW51YWw7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9tb2RlX2N1cnJlbnQ7CkBAIC00NjAsMTIgKzQ2NCwxNCBAQAogCWludCAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDsKIAorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0JVRl9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0JVRl9EVkJfTU9EVUxFKQogCS8qIGZvciBkdmIgb25seSAqLwogCXN0cnVjdCB2aWRlb2J1Zl9kdmIgICAgICAgIGR2YjsKIAl2b2lkKiAgICAgICAgICAgICAgICAgICAgICBmZV9oYW5kbGU7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpmZV9yZWxlYXNlKSh2b2lkICpoYW5kbGUpOwogCiAJdm9pZAkJCSAgICpjYXJkX3ByaXY7CisjZW5kaWYKIAkvKiBmb3Igc3dpdGNoaW5nIG1vZHVsYXRpb24gdHlwZXMgKi8KIAl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICB0c19nZW5fY250cmw7CiAKQEAgLTUzNiw3ICs1NDIsNyBAQAogCiBleHRlcm4gaW50IGN4ODhfc2V0X3NjYWxlKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHVuc2lnbmVkIGludCB3aWR0aCwKIAkJCSAgdW5zaWduZWQgaW50IGhlaWdodCwgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKTsKLWV4dGVybiBpbnQgY3g4OF9zZXRfdHZub3JtKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHN0cnVjdCBjeDg4X3R2bm9ybSAqbm9ybSk7CitleHRlcm4gaW50IGN4ODhfc2V0X3R2bm9ybShzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB2NGwyX3N0ZF9pZCBub3JtKTsKIAogZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UgKmN4ODhfdmRldl9pbml0KHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsCiAJCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpwY2ksCkBAIC01NTMsNyArNTU5LDEwIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3g4OC12YmkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotdm9pZCBjeDg4MDBfdmJpX2ZtdChzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOworLyogQ2FuIGJlIHVzZWQgYXMgZ192YmlfZm10LCB0cnlfdmJpX2ZtdCBhbmQgc192YmlfZm10ICovCitpbnQgY3g4ODAwX3ZiaV9mbXQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOworCiAvKgogaW50IGN4ODgwMF9zdGFydF92YmlfZG1hKHN0cnVjdCBjeDg4MDBfZGV2ICAgICpkZXYsCiAJCQkgc3RydWN0IGN4ODhfZG1hcXVldWUgKnEsCkBAIC02MzMsMTkgKzY0MiwxNCBAQAogaW50IGN4ODgwMl9yZXN1bWVfY29tbW9uKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIGN4ODgtdmlkZW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1leHRlcm4gaW50IGN4ODhfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIGludCByYWRpbywKLQkJCQlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJCXZvaWQgKmFyZywgdjRsMl9raW9jdGwgZHJpdmVyX2lvY3RsKTsKKy8qIGN4ODgtdmlkZW8uYyovCiBleHRlcm4gY29uc3QgdTMyIGN4ODhfdXNlcl9jdHJsc1tdOwogZXh0ZXJuIGludCBjeDg4MDBfY3RybF9xdWVyeShzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIGN4ODgtYmxhY2tiaXJkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiB1c2VkIGJ5IGN4ODgtaXZ0diBpb2N0bCBlbXVsYXRpb24gbGF5ZXIgICAgICAgICAgICAgICAgICAgICAqLwotZXh0ZXJuIGludCAoKmN4ODhfaW9jdGxfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotZXh0ZXJuIHVuc2lnbmVkIGludCAoKmN4ODhfaW9jdGxfdHJhbnNsYXRvcikodW5zaWduZWQgaW50IGNtZCk7CitpbnQgY3g4OF9lbnVtX2lucHV0IChzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSxzdHJ1Y3QgdjRsMl9pbnB1dCAqaSk7CitpbnQgY3g4OF9zZXRfZnJlcSAoc3RydWN0IGN4ODhfY29yZSAgKmNvcmUsc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKTsKK2ludCBjeDg4X2dldF9jb250cm9sKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCk7CitpbnQgY3g4OF9zZXRfY29udHJvbChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpOworaW50IGN4ODhfdmlkZW9fbXV4KHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHVuc2lnbmVkIGludCBpbnB1dCk7CiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxLmgKaW5kZXggMmU1Y2E0MC4uMjYyZjk4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTEuaApAQCAtMTcxLDEwICsxNzEsNyBAQAogc3RydWN0IGV0NjF4MjUxX2RldmljZSoKIGV0NjF4MjUxX21hdGNoX2lkKHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewotCWlmICh1c2JfbWF0Y2hfaWQodXNiX2lmbnVtX3RvX2lmKGNhbS0+dXNiZGV2LCAwKSwgaWQpKQotCQlyZXR1cm4gY2FtOwotCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHVzYl9tYXRjaF9pZCh1c2JfaWZudW1fdG9faWYoY2FtLT51c2JkZXYsIDApLCBpZCkgPyBjYW0gOiBOVUxMOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKaW5kZXggNDk3OTJhZS4uYTY1MjU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBWNEwyIGRyaXZlciBmb3IgRVQ2MVhbMTJdNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCkBAIC00OCw4ICs0OCw4IEBACiAjZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9BVVRIT1IgICIoQykgMjAwNiBMdWNhIFJpc29saWEiCiAjZGVmaW5lIEVUNjFYMjUxX0FVVEhPUl9FTUFJTCAgICI8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iCiAjZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9MSUNFTlNFICJHUEwiCi0jZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OICIxOjEuMDIiCi0jZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OX0NPREUgIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDIpCisjZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OICIxOjEuMDQiCisjZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OX0NPREUgIEtFUk5FTF9WRVJTSU9OKDEsIDEsIDQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtODUsNyArODUsNyBAQAogCQkgIlxuZGV0ZWN0ZWQgY2FtZXJhLiIKIAkJICJcbiAwID0gZG8gbm90IGZvcmNlIG1lbW9yeSB1bm1hcHBpbmciCiAJCSAiXG4gMSA9IGZvcmNlIG1lbW9yeSB1bm1hcHBpbmcgKHNhdmUgbWVtb3J5KSIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhTTjlDMTAyX0ZPUkNFX01VTk1BUCkiLiIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhFVDYxWDI1MV9GT1JDRV9NVU5NQVApIi4iCiAJCSAiXG4iKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBmcmFtZV90aW1lb3V0W10gPSB7WzAgLi4uIEVUNjFYMjUxX01BWF9ERVZJQ0VTLTFdID0KQEAgLTEzMyw3ICsxMzMsOCBAQAogCiAJY2FtLT5uYnVmZmVycyA9IGNvdW50OwogCXdoaWxlIChjYW0tPm5idWZmZXJzID4gMCkgewotCQlpZiAoKGJ1ZmYgPSB2bWFsbG9jXzMyKGNhbS0+bmJ1ZmZlcnMgKiBQQUdFX0FMSUdOKGltYWdlc2l6ZSkpKSkKKwkJaWYgKChidWZmID0gdm1hbGxvY18zMl91c2VyKGNhbS0+bmJ1ZmZlcnMgKgorCQkJCQkgICAgUEFHRV9BTElHTihpbWFnZXNpemUpKSkpCiAJCQlicmVhazsKIAkJY2FtLT5uYnVmZmVycy0tOwogCX0KQEAgLTU0MywxMCArNTQ0LDExIEBACiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjYW0tPnVzYmRldjsKIAlzdHJ1Y3QgdXJiKiB1cmI7Ci0JY29uc3QgdW5zaWduZWQgaW50IHdNYXhQYWNrZXRTaXplW10gPSB7MCwgMjU2LCAzODQsIDUxMiwgNjQwLCA3NjgsIDgzMiwKLQkJCQkJICAgICAgIDg2NCwgODk2LCA5MjAsIDk1NiwgOTgwLCAxMDAwLAotCQkJCQkgICAgICAgMTAyMn07Ci0JY29uc3QgdW5zaWduZWQgaW50IHBzeiA9IHdNYXhQYWNrZXRTaXplW0VUNjFYMjUxX0FMVEVSTkFURV9TRVRUSU5HXTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlKiBhbHRzZXR0aW5nID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKAorCQkJCQkJICAgdXNiX2lmbnVtX3RvX2lmKHVkZXYsIDApLAorCQkJCQkJICAgRVQ2MVgyNTFfQUxURVJOQVRFX1NFVFRJTkcpOworCWNvbnN0IHVuc2lnbmVkIGludCBwc3ogPSBsZTE2X3RvX2NwdShhbHRzZXR0aW5nLT4KKwkJCQkJICAgICBlbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKIAlzOCBpLCBqOwogCWludCBlcnIgPSAwOwogCkBAIC05NzYsMjkgKzk3OCwzMSBAQAogc3RhdGljIGludCBldDYxeDI1MV9jcmVhdGVfc3lzZnMoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnY0bGRldiA9IGNhbS0+djRsZGV2OwotCWludCByYzsKKwlpbnQgZXJyID0gMDsKIAotCXJjID0gdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3JlZyk7Ci0JaWYgKHJjKSBnb3RvIGVycjsKLQlyYyA9IHZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl92YWwpOwotCWlmIChyYykgZ290byBlcnJfcmVnOworCWlmICgoZXJyID0gdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3JlZykpKQorCQlnb3RvIGVycl9vdXQ7CisJaWYgKChlcnIgPSB2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfdmFsKSkpCisJCWdvdG8gZXJyX3JlZzsKKwogCWlmIChjYW0tPnNlbnNvci5zeXNmc19vcHMpIHsKLQkJcmMgPSB2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaTJjX3JlZyk7Ci0JCWlmIChyYykgZ290byBlcnJfdmFsOwotCQlyYyA9IHZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9pMmNfdmFsKTsKLQkJaWYgKHJjKSBnb3RvIGVycl9pMmNfcmVnOworCQlpZiAoKGVyciA9IHZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsCisJCQkJCQkgICZjbGFzc19kZXZpY2VfYXR0cl9pMmNfcmVnKSkpCisJCQlnb3RvIGVycl92YWw7CisJCWlmICgoZXJyID0gdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwKKwkJCQkJCSAgJmNsYXNzX2RldmljZV9hdHRyX2kyY192YWwpKSkKKwkJCWdvdG8gZXJyX2kyY19yZWc7CiAJfQogCi0JcmV0dXJuIDA7Ci0KIGVycl9pMmNfcmVnOgorCWlmIChjYW0tPnNlbnNvci5zeXNmc19vcHMpCiAJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2kyY19yZWcpOwogZXJyX3ZhbDoKIAl2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfdmFsKTsKIGVycl9yZWc6CiAJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3JlZyk7Ci1lcnI6Ci0JcmV0dXJuIHJjOworZXJyX291dDoKKwlyZXR1cm4gZXJyOwogfQogI2VuZGlmIC8qIENPTkZJR19WSURFT19BRFZfREVCVUcgKi8KIApAQCAtMTc2NywxMCArMTc3MSwxMCBAQAogCXJlY3QtPmxlZnQgPSAocy0+X3JlY3QubGVmdCAmIDFMKSA/IHJlY3QtPmxlZnQgfCAxTCA6IHJlY3QtPmxlZnQgJiB+MUw7CiAJcmVjdC0+dG9wID0gKHMtPl9yZWN0LnRvcCAmIDFMKSA/IHJlY3QtPnRvcCB8IDFMIDogcmVjdC0+dG9wICYgfjFMOwogCi0JaWYgKHJlY3QtPndpZHRoIDwgNCkKLQkJcmVjdC0+d2lkdGggPSA0OwotCWlmIChyZWN0LT5oZWlnaHQgPCA0KQotCQlyZWN0LT5oZWlnaHQgPSA0OworCWlmIChyZWN0LT53aWR0aCA8IDE2KQorCQlyZWN0LT53aWR0aCA9IDE2OworCWlmIChyZWN0LT5oZWlnaHQgPCAxNikKKwkJcmVjdC0+aGVpZ2h0ID0gMTY7CiAJaWYgKHJlY3QtPndpZHRoID4gYm91bmRzLT53aWR0aCkKIAkJcmVjdC0+d2lkdGggPSBib3VuZHMtPndpZHRoOwogCWlmIChyZWN0LT5oZWlnaHQgPiBib3VuZHMtPmhlaWdodCkKQEAgLTE3ODQsOCArMTc4OCw4IEBACiAJaWYgKHJlY3QtPnRvcCArIHJlY3QtPmhlaWdodCA+IGJvdW5kcy0+dG9wICsgYm91bmRzLT5oZWlnaHQpCiAJCXJlY3QtPnRvcCA9IGJvdW5kcy0+dG9wK2JvdW5kcy0+aGVpZ2h0IC0gcmVjdC0+aGVpZ2h0OwogCi0JcmVjdC0+d2lkdGggJj0gfjNMOwotCXJlY3QtPmhlaWdodCAmPSB+M0w7CisJcmVjdC0+d2lkdGggJj0gfjE1TDsKKwlyZWN0LT5oZWlnaHQgJj0gfjE1TDsKIAogCWlmIChFVDYxWDI1MV9QUkVTRVJWRV9JTUdTQ0FMRSkgewogCQkvKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCBzY2FsaW5nIGZhY3RvciAqLwpAQCAtMTg0Niw2ICsxODUwLDM1IEBACiAKIAogc3RhdGljIGludAorZXQ2MXgyNTFfdmlkaW9jX2VudW1fZnJhbWVzaXplcyhzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB2NGwyX2ZybXNpemVlbnVtIGZybXNpemU7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmZybXNpemUsIGFyZywgc2l6ZW9mKGZybXNpemUpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoZnJtc2l6ZS5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmcm1zaXplLnBpeGVsX2Zvcm1hdCAhPSBWNEwyX1BJWF9GTVRfRVQ2MVgyNTEgJiYKKwkgICAgZnJtc2l6ZS5waXhlbF9mb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmcm1zaXplLnR5cGUgPSBWNEwyX0ZSTVNJWkVfVFlQRV9TVEVQV0lTRTsKKwlmcm1zaXplLnN0ZXB3aXNlLm1pbl93aWR0aCA9IGZybXNpemUuc3RlcHdpc2Uuc3RlcF93aWR0aCA9IDE2OworCWZybXNpemUuc3RlcHdpc2UubWluX2hlaWdodCA9IGZybXNpemUuc3RlcHdpc2Uuc3RlcF9oZWlnaHQgPSAxNjsKKwlmcm1zaXplLnN0ZXB3aXNlLm1heF93aWR0aCA9IGNhbS0+c2Vuc29yLmNyb3BjYXAuYm91bmRzLndpZHRoOworCWZybXNpemUuc3RlcHdpc2UubWF4X2hlaWdodCA9IGNhbS0+c2Vuc29yLmNyb3BjYXAuYm91bmRzLmhlaWdodDsKKwltZW1zZXQoJmZybXNpemUucmVzZXJ2ZWQsIDAsIHNpemVvZihmcm1zaXplLnJlc2VydmVkKSk7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmZybXNpemUsIHNpemVvZihmcm1zaXplKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAogZXQ2MXgyNTFfdmlkaW9jX2VudW1fZm10KHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7CiAJc3RydWN0IHY0bDJfZm10ZGVzYyBmbXRkOwpAQCAtMTg1Myw2ICsxODg2LDkgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZtdGQsIGFyZywgc2l6ZW9mKGZtdGQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKKwlpZiAoZm10ZC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoZm10ZC5pbmRleCA9PSAwKSB7CiAJCXN0cmNweShmbXRkLmRlc2NyaXB0aW9uLCAiYmF5ZXIgcmdiIik7CiAJCWZtdGQucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OwpAQCAtMTkzNCwxNyArMTk3MCwxNyBAQAogCXJlY3Qud2lkdGggPSBzY2FsZSAqIHBpeC0+d2lkdGg7CiAJcmVjdC5oZWlnaHQgPSBzY2FsZSAqIHBpeC0+aGVpZ2h0OwogCi0JaWYgKHJlY3Qud2lkdGggPCA0KQotCQlyZWN0LndpZHRoID0gNDsKLQlpZiAocmVjdC5oZWlnaHQgPCA0KQotCQlyZWN0LmhlaWdodCA9IDQ7CisJaWYgKHJlY3Qud2lkdGggPCAxNikKKwkJcmVjdC53aWR0aCA9IDE2OworCWlmIChyZWN0LmhlaWdodCA8IDE2KQorCQlyZWN0LmhlaWdodCA9IDE2OwogCWlmIChyZWN0LndpZHRoID4gYm91bmRzLT5sZWZ0ICsgYm91bmRzLT53aWR0aCAtIHJlY3QubGVmdCkKIAkJcmVjdC53aWR0aCA9IGJvdW5kcy0+bGVmdCArIGJvdW5kcy0+d2lkdGggLSByZWN0LmxlZnQ7CiAJaWYgKHJlY3QuaGVpZ2h0ID4gYm91bmRzLT50b3AgKyBib3VuZHMtPmhlaWdodCAtIHJlY3QudG9wKQogCQlyZWN0LmhlaWdodCA9IGJvdW5kcy0+dG9wICsgYm91bmRzLT5oZWlnaHQgLSByZWN0LnRvcDsKIAotCXJlY3Qud2lkdGggJj0gfjNMOwotCXJlY3QuaGVpZ2h0ICY9IH4zTDsKKwlyZWN0LndpZHRoICY9IH4xNUw7CisJcmVjdC5oZWlnaHQgJj0gfjE1TDsKIAogCXsgLyogYWRqdXN0IHRoZSBzY2FsaW5nIGZhY3RvciAqLwogCQl1MzIgYSwgYjsKQEAgLTIzNzgsNiArMjQxNCw5IEBACiAJY2FzZSBWSURJT0NfU19GTVQ6CiAJCXJldHVybiBldDYxeDI1MV92aWRpb2NfdHJ5X3NfZm10KGNhbSwgY21kLCBhcmcpOwogCisJY2FzZSBWSURJT0NfRU5VTV9GUkFNRVNJWkVTOgorCQlyZXR1cm4gZXQ2MXgyNTFfdmlkaW9jX2VudW1fZnJhbWVzaXplcyhjYW0sIGFyZyk7CisKIAljYXNlIFZJRElPQ19HX0pQRUdDT01QOgogCQlyZXR1cm4gZXQ2MXgyNTFfdmlkaW9jX2dfanBlZ2NvbXAoY2FtLCBhcmcpOwogCkBAIC0yNDEzLDYgKzI0NTIsNyBAQAogCWNhc2UgVklESU9DX1FVRVJZU1REOgogCWNhc2UgVklESU9DX0VOVU1TVEQ6CiAJY2FzZSBWSURJT0NfUVVFUllNRU5VOgorCWNhc2UgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM6CiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGVmYXVsdDoKQEAgLTI0NTksNiArMjQ5OSw3IEBACiAJLm9wZW4gPSAgICBldDYxeDI1MV9vcGVuLAogCS5yZWxlYXNlID0gZXQ2MXgyNTFfcmVsZWFzZSwKIAkuaW9jdGwgPSAgIGV0NjF4MjUxX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLnJlYWQgPSAgICBldDYxeDI1MV9yZWFkLAogCS5wb2xsID0gICAgZXQ2MXgyNTFfcG9sbCwKIAkubW1hcCA9ICAgIGV0NjF4MjUxX21tYXAsCkBAIC0yNDk3LDcgKzI1MzgsNyBAQAogCW11dGV4X2luaXQoJmNhbS0+ZGV2X211dGV4KTsKIAogCURCRygyLCAiRVQ2MVhbMTJdNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXIgZGV0ZWN0ZWQgIgotCSAgICAgICAiKHZpZC9waWQgMHglMDRYLzB4JTA0WCkiLGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisJICAgICAgICIodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsaWQtPmlkVmVuZG9yLCBpZC0+aWRQcm9kdWN0KTsKIAogCWZvciAgKGkgPSAwOyBldDYxeDI1MV9zZW5zb3JfdGFibGVbaV07IGkrKykgewogCQllcnIgPSBldDYxeDI1MV9zZW5zb3JfdGFibGVbaV0oY2FtKTsKQEAgLTI1NTAsOSArMjU5MSwxNCBAQAogCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogCWVyciA9IGV0NjF4MjUxX2NyZWF0ZV9zeXNmcyhjYW0pOwotCWlmIChlcnIpCi0JCWdvdG8gZmFpbDI7Ci0JREJHKDIsICJPcHRpb25hbCBkZXZpY2UgY29udHJvbCB0aHJvdWdoICdzeXNmcycgaW50ZXJmYWNlIHJlYWR5Iik7CisJaWYgKCFlcnIpCisJCURCRygyLCAiT3B0aW9uYWwgZGV2aWNlIGNvbnRyb2wgdGhyb3VnaCAnc3lzZnMnICIKKwkJICAgICAgICJpbnRlcmZhY2UgcmVhZHkiKTsKKwllbHNlCisJCURCRygyLCAiRmFpbGVkIHRvIGNyZWF0ZSAnc3lzZnMnIGludGVyZmFjZSBmb3Igb3B0aW9uYWwgIgorCQkgICAgICAgImRldmljZSBjb250cm9sbGluZy4gRXJyb3IgIyVkIiwgZXJyKTsKKyNlbHNlCisJREJHKDIsICJPcHRpb25hbCBkZXZpY2UgY29udHJvbCB0aHJvdWdoICdzeXNmcycgaW50ZXJmYWNlIGRpc2FibGVkIik7CiAjZW5kaWYKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FtKTsKQEAgLTI1NjEsMTMgKzI2MDcsNiBAQAogCiAJcmV0dXJuIDA7CiAKLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi1mYWlsMjoKLQl2aWRlb19ucltkZXZfbnJdID0gLTE7Ci0JZGV2X25yID0gKGRldl9uciA8IEVUNjFYMjUxX01BWF9ERVZJQ0VTLTEpID8gZGV2X25yKzEgOiAwOwotCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNhbS0+djRsZGV2KTsKLSNlbmRpZgogZmFpbDoKIAlpZiAoY2FtKSB7CiAJCWtmcmVlKGNhbS0+Y29udHJvbF9idWZmZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9zZW5zb3IuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfc2Vuc29yLmgKaW5kZXggNjVlZGQwOC4uNWZhZGI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9zZW5zb3IuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX3NlbnNvci5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQVBJIGZvciBpbWFnZSBzZW5zb3JzIGNvbm5lY3RlZCB0byBFVDYxWFsxMl01MSBQQyBDYW1lcmEgQ29udHJvbGxlcnMgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgpAQCAtODIsNyArODIsNyBAQAogCUVUNjFYMjUxX0kyQ19SU1RBX1JFUEVBVCA9IDB4MDEsIC8qIHJlcGVhdCBzdGFydCAqLwogfTsKIAotI2RlZmluZSBFVDYxWDI1MV9NQVhfQ1RSTFMgVjRMMl9DSURfTEFTVFAxLVY0TDJfQ0lEX0JBU0UrMTAKKyNkZWZpbmUgRVQ2MVgyNTFfTUFYX0NUUkxTIChWNEwyX0NJRF9MQVNUUDEtVjRMMl9DSURfQkFTRSsxMCkKIAogc3RydWN0IGV0NjF4MjUxX3NlbnNvciB7CiAJY2hhciBuYW1lWzMyXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfdGFzNTEzMGQxYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV90YXM1MTMwZDFiLmMKaW5kZXggYTdkNjViOC4uYjA2NjQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV90YXM1MTMwZDFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV90YXM1MTMwZDFiLmMKQEAgLTIsNyArMiw3IEBACiAgKiBQbHVnLWluIGZvciBUQVM1MTMwRDFCIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIEVUNjFYWzEyXTUxICAgICAgICAqCiAgKiBQQyBDYW1lcmEgQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYwppbmRleCA5ODQ2YzQ2Li4zNzk2NDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKQEAgLTMxLDcgKzMxLDYgQEAKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdzsKIAlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgaTJjX2hhbmRsZXI7Ci0Jc3RydWN0IHB2cjJfYXVkaW9fc3RhdCBhc3RhdDsKIAl1bnNpZ25lZCBsb25nIHN0YWxlX21hc2s7CiB9OwogCkBAIC00NCwxMyArNDMsNiBAQAogCiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgbXNwMzQwMCB2NGwyIHNldF9zdGVyZW8iKTsKIAotCWlmIChoZHctPmlucHV0X3ZhbCA9PSBQVlIyX0NWQUxfSU5QVVRfVFYpIHsKLQkJc3RydWN0IHY0bDJfdHVuZXIgdnQ7Ci0JCW1lbXNldCgmdnQsMCxzaXplb2YodnQpKTsKLQkJdnQuYXVkbW9kZSA9IGhkdy0+YXVkaW9tb2RlX3ZhbDsKLQkJcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX1NfVFVORVIsJnZ0KTsKLQl9Ci0KIAlyb3V0ZS5pbnB1dCA9IE1TUF9JTlBVVF9ERUZBVUxUOwogCXJvdXRlLm91dHB1dCA9IE1TUF9PVVRQVVQoTVNQX1NDX0lOX0RTUF9TQ0FSVDEpOwogCXN3aXRjaCAoaGR3LT5pbnB1dF92YWwpIHsKQEAgLTc4LDggKzcwLDcgQEAKIHN0YXRpYyBpbnQgY2hlY2tfc3RlcmVvKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dCkKIHsKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gKGhkdy0+aW5wdXRfZGlydHkgfHwKLQkJaGR3LT5hdWRpb21vZGVfZGlydHkpOworCXJldHVybiBoZHctPmlucHV0X2RpcnR5OwogfQogCiAKQEAgLTk5LDggKzkwLDcgQEAKIAl1bnNpZ25lZCBsb25nIG1zazsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCi0JZm9yIChpZHggPSAwOyBpZHggPCBzaXplb2YobXNwMzQwMF9vcHMpL3NpemVvZihtc3AzNDAwX29wc1swXSk7Ci0JICAgICBpZHgrKykgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShtc3AzNDAwX29wcyk7IGlkeCsrKSB7CiAJCW1zayA9IDEgPDwgaWR4OwogCQlpZiAoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykgY29udGludWU7CiAJCWlmIChtc3AzNDAwX29wc1tpZHhdLmNoZWNrKGN0eHQpKSB7CkBAIC0xMTYsOCArMTA2LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1zazsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCi0JZm9yIChpZHggPSAwOyBpZHggPCBzaXplb2YobXNwMzQwMF9vcHMpL3NpemVvZihtc3AzNDAwX29wc1swXSk7Ci0JICAgICBpZHgrKykgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShtc3AzNDAwX29wcyk7IGlkeCsrKSB7CiAJCW1zayA9IDEgPDwgaWR4OwogCQlpZiAoIShjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSkgY29udGludWU7CiAJCWN0eHQtPnN0YWxlX21hc2sgJj0gfm1zazsKQEAgLTEyNiwyNyArMTE1LDkgQEAKIH0KIAogCi0vKiBUaGlzIHJlYWRzIGJhY2sgdGhlIGN1cnJlbnQgc2lnbmFsIHR5cGUgKi8KLXN0YXRpYyBpbnQgZ2V0X2F1ZGlvX3N0YXR1cyhzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKmN0eHQpCi17Ci0Jc3RydWN0IHY0bDJfdHVuZXIgdnQ7Ci0JaW50IHN0YXQ7Ci0KLQltZW1zZXQoJnZ0LDAsc2l6ZW9mKHZ0KSk7Ci0Jc3RhdCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19HX1RVTkVSLCZ2dCk7Ci0JaWYgKHN0YXQgPCAwKSByZXR1cm4gc3RhdDsKLQotCWN0eHQtPmhkdy0+ZmxhZ19zdGVyZW8gPSAodnQuYXVkbW9kZSAmIFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pICE9IDA7Ci0JY3R4dC0+aGR3LT5mbGFnX2JpbGluZ3VhbCA9Ci0JCSh2dC5hdWRtb2RlICYgVjRMMl9UVU5FUl9NT0RFX0xBTkcyKSAhPSAwOwotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyB2b2lkIHB2cjJfbXNwMzQwMF9kZXRhY2goc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0KQogewogCWN0eHQtPmNsaWVudC0+aGFuZGxlciA9IE5VTEw7Ci0JY3R4dC0+aGR3LT5hdWRpb19zdGF0ID0gTlVMTDsKIAlrZnJlZShjdHh0KTsKIH0KIApAQCAtMTU4LDcgKzEyOSw3IEBACiB9CiAKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyBtc3AzNDAwX2Z1bmNzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyBtc3AzNDAwX2Z1bmNzID0gewogCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlwdnIyX21zcDM0MDBfZGV0YWNoLAogCS5jaGVjayA9IChpbnQgKCopKHZvaWQgKikpbXNwMzQwMF9jaGVjaywKIAkudXBkYXRlID0gKHZvaWQgKCopKHZvaWQgKikpbXNwMzQwMF91cGRhdGUsCkBAIC0xNjksMjQgKzE0MCwxNyBAQAogaW50IHB2cjJfaTJjX21zcDM0MDBfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICpoZHcsc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCiB7CiAJc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0OwotCWlmIChoZHctPmF1ZGlvX3N0YXQpIHJldHVybiAwOwogCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7CiAKLQljdHh0ID0ga21hbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOworCWN0eHQgPSBremFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7CiAJaWYgKCFjdHh0KSByZXR1cm4gMDsKLQltZW1zZXQoY3R4dCwwLHNpemVvZigqY3R4dCkpOwogCiAJY3R4dC0+aTJjX2hhbmRsZXIuZnVuY19kYXRhID0gY3R4dDsKIAljdHh0LT5pMmNfaGFuZGxlci5mdW5jX3RhYmxlID0gJm1zcDM0MDBfZnVuY3M7CiAJY3R4dC0+Y2xpZW50ID0gY3A7CiAJY3R4dC0+aGR3ID0gaGR3OwotCWN0eHQtPmFzdGF0LmN0eHQgPSBjdHh0OwotCWN0eHQtPmFzdGF0LnN0YXR1cyA9IChpbnQgKCopKHZvaWQgKikpZ2V0X2F1ZGlvX3N0YXR1czsKLQljdHh0LT5hc3RhdC5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlwdnIyX21zcDM0MDBfZGV0YWNoOwotCWN0eHQtPnN0YWxlX21hc2sgPSAoMSA8PCAoc2l6ZW9mKG1zcDM0MDBfb3BzKS8KLQkJCQkgIHNpemVvZihtc3AzNDAwX29wc1swXSkpKSAtIDE7CisJY3R4dC0+c3RhbGVfbWFzayA9ICgxIDw8IEFSUkFZX1NJWkUobXNwMzQwMF9vcHMpKSAtIDE7CiAJY3AtPmhhbmRsZXIgPSAmY3R4dC0+aTJjX2hhbmRsZXI7Ci0JaGR3LT5hdWRpb19zdGF0ID0gJmN0eHQtPmFzdGF0OwogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIDB4JXggbXNwMzQwMCBWNEwyIGhhbmRsZXIgc2V0IHVwIiwKIAkJICAgY3AtPmNsaWVudC0+YWRkcik7CiAJcmV0dXJuICEwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY29udGV4dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY29udGV4dC5jCmluZGV4IGNmMTI5NzQuLjZiYmVkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNvbnRleHQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jb250ZXh0LmMKQEAgLTgzLDkgKzgzLDggQEAKIAl2b2lkICgqc2V0dXBfZnVuYykoc3RydWN0IHB2cjJfY29udGV4dCAqKSkKIHsKIAlzdHJ1Y3QgcHZyMl9jb250ZXh0ICptcCA9IE5VTEw7Ci0JbXAgPSBrbWFsbG9jKHNpemVvZigqbXApLEdGUF9LRVJORUwpOworCW1wID0ga3phbGxvYyhzaXplb2YoKm1wKSxHRlBfS0VSTkVMKTsKIAlpZiAoIW1wKSBnb3RvIGRvbmU7Ci0JbWVtc2V0KG1wLDAsc2l6ZW9mKCptcCkpOwogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9TVFJVQ1QsIkNyZWF0aW5nIHB2cl9tYWluIGlkPSVwIixtcCk7CiAJbXAtPnNldHVwX2Z1bmMgPSBzZXR1cF9mdW5jOwogCW11dGV4X2luaXQoJm1wLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMKaW5kZXggYzc3ZGU4NS4uZjU2OWIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuYwpAQCAtMjYsNiArMjYsMjcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAKK3N0YXRpYyBpbnQgcHZyMl9jdHJsX3JhbmdlX2NoZWNrKHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsaW50IHZhbCkKK3sKKwlpZiAoY3B0ci0+aW5mby0+Y2hlY2tfdmFsdWUpIHsKKwkJaWYgKCFjcHRyLT5pbmZvLT5jaGVja192YWx1ZShjcHRyLHZhbCkpIHJldHVybiAtRVJBTkdFOworCX0gZWxzZSB7CisJCWludCBsaW07CisJCWxpbSA9IGNwdHItPmluZm8tPmRlZi50eXBlX2ludC5taW5fdmFsdWU7CisJCWlmIChjcHRyLT5pbmZvLT5nZXRfbWluX3ZhbHVlKSB7CisJCQljcHRyLT5pbmZvLT5nZXRfbWluX3ZhbHVlKGNwdHIsJmxpbSk7CisJCX0KKwkJaWYgKHZhbCA8IGxpbSkgcmV0dXJuIC1FUkFOR0U7CisJCWxpbSA9IGNwdHItPmluZm8tPmRlZi50eXBlX2ludC5tYXhfdmFsdWU7CisJCWlmIChjcHRyLT5pbmZvLT5nZXRfbWF4X3ZhbHVlKSB7CisJCQljcHRyLT5pbmZvLT5nZXRfbWF4X3ZhbHVlKGNwdHIsJmxpbSk7CisJCX0KKwkJaWYgKHZhbCA+IGxpbSkgcmV0dXJuIC1FUkFOR0U7CisJfQorCXJldHVybiAwOworfQorCisKIC8qIFNldCB0aGUgZ2l2ZW4gY29udHJvbC4gKi8KIGludCBwdnIyX2N0cmxfc2V0X3ZhbHVlKHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsaW50IHZhbCkKIHsKQEAgLTQzLDE3ICs2NCw4IEBACiAJCQlpZiAoY3B0ci0+aW5mby0+dHlwZSA9PSBwdnIyX2N0bF9iaXRtYXNrKSB7CiAJCQkJbWFzayAmPSBjcHRyLT5pbmZvLT5kZWYudHlwZV9iaXRtYXNrLnZhbGlkX2JpdHM7CiAJCQl9IGVsc2UgaWYgKGNwdHItPmluZm8tPnR5cGUgPT0gcHZyMl9jdGxfaW50KSB7Ci0JCQkJaW50IGxpbTsKLQkJCQlsaW0gPSBjcHRyLT5pbmZvLT5kZWYudHlwZV9pbnQubWluX3ZhbHVlOwotCQkJCWlmIChjcHRyLT5pbmZvLT5nZXRfbWluX3ZhbHVlKSB7Ci0JCQkJCWNwdHItPmluZm8tPmdldF9taW5fdmFsdWUoY3B0ciwmbGltKTsKLQkJCQl9Ci0JCQkJaWYgKHZhbCA8IGxpbSkgYnJlYWs7Ci0JCQkJbGltID0gY3B0ci0+aW5mby0+ZGVmLnR5cGVfaW50Lm1heF92YWx1ZTsKLQkJCQlpZiAoY3B0ci0+aW5mby0+Z2V0X21heF92YWx1ZSkgewotCQkJCQljcHRyLT5pbmZvLT5nZXRfbWF4X3ZhbHVlKGNwdHIsJmxpbSk7Ci0JCQkJfQotCQkJCWlmICh2YWwgPiBsaW0pIGJyZWFrOworCQkJCXJldCA9IHB2cjJfY3RybF9yYW5nZV9jaGVjayhjcHRyLHZhbCk7CisJCQkJaWYgKHJldCA8IDApIGJyZWFrOwogCQkJfSBlbHNlIGlmIChjcHRyLT5pbmZvLT50eXBlID09IHB2cjJfY3RsX2VudW0pIHsKIAkJCQlpZiAodmFsID49IGNwdHItPmluZm8tPmRlZi50eXBlX2VudW0uY291bnQpIHsKIAkJCQkJYnJlYWs7CkBAIC00OTgsMTYgKzUxMCwxMyBAQAogCUxPQ0tfVEFLRShjcHRyLT5oZHctPmJpZ19sb2NrKTsgZG8gewogCQlpZiAoY3B0ci0+aW5mby0+dHlwZSA9PSBwdnIyX2N0bF9pbnQpIHsKIAkJCXJldCA9IHBhcnNlX3Rva2VuKHB0cixsZW4sdmFscHRyLE5VTEwsMCk7Ci0JCQlpZiAoKHJldCA+PSAwKSAmJgotCQkJICAgICgoKnZhbHB0ciA8IGNwdHItPmluZm8tPmRlZi50eXBlX2ludC5taW5fdmFsdWUpIHx8Ci0JCQkgICAgICgqdmFscHRyID4gY3B0ci0+aW5mby0+ZGVmLnR5cGVfaW50Lm1heF92YWx1ZSkpKSB7Ci0JCQkJcmV0ID0gLUVSQU5HRTsKKwkJCWlmIChyZXQgPj0gMCkgeworCQkJCXJldCA9IHB2cjJfY3RybF9yYW5nZV9jaGVjayhjcHRyLCp2YWxwdHIpOwogCQkJfQogCQkJaWYgKG1hc2twdHIpICptYXNrcHRyID0gfjA7CiAJCX0gZWxzZSBpZiAoY3B0ci0+aW5mby0+dHlwZSA9PSBwdnIyX2N0bF9ib29sKSB7Ci0JCQlyZXQgPSBwYXJzZV90b2tlbigKLQkJCQlwdHIsbGVuLHZhbHB0cixib29sTmFtZXMsCi0JCQkJc2l6ZW9mKGJvb2xOYW1lcykvc2l6ZW9mKGJvb2xOYW1lc1swXSkpOworCQkJcmV0ID0gcGFyc2VfdG9rZW4ocHRyLGxlbix2YWxwdHIsYm9vbE5hbWVzLAorCQkJCQkgIEFSUkFZX1NJWkUoYm9vbE5hbWVzKSk7CiAJCQlpZiAocmV0ID09IDEpIHsKIAkJCQkqdmFscHRyID0gKnZhbHB0ciA/ICEwIDogMDsKIAkJCX0gZWxzZSBpZiAocmV0ID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCmluZGV4IDg0OGZiMjMzLi5lOGE5MjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMKQEAgLTYzLDYgKzYzLDcgQEAKIAkJdmlkX2lucHV0ID0gQ1gyNTg0MF9DT01QT1NJVEU3OwogCQlhdWRfaW5wdXQgPSBDWDI1ODQwX0FVRElPODsKIAkJYnJlYWs7CisJY2FzZSBQVlIyX0NWQUxfSU5QVVRfUkFESU86IC8vIFRyZWF0IHNhbWUgYXMgY29tcG9zaXRlCiAJY2FzZSBQVlIyX0NWQUxfSU5QVVRfQ09NUE9TSVRFOgogCQl2aWRfaW5wdXQgPSBDWDI1ODQwX0NPTVBPU0lURTM7CiAJCWF1ZF9pbnB1dCA9IENYMjU4NDBfQVVESU9fU0VSSUFMOwpAQCAtNzEsNyArNzIsNiBAQAogCQl2aWRfaW5wdXQgPSBDWDI1ODQwX1NWSURFTzE7CiAJCWF1ZF9pbnB1dCA9IENYMjU4NDBfQVVESU9fU0VSSUFMOwogCQlicmVhazsKLQljYXNlIFBWUjJfQ1ZBTF9JTlBVVF9SQURJTzoKIAlkZWZhdWx0OgogCQkvLyBKdXN0IHNldCBpdCB0byBiZSBjb21wb3NpdGUgaW5wdXQgZm9yIG5vdy4uLgogCQl2aWRfaW5wdXQgPSBDWDI1ODQwX0NPTVBPU0lURTM7CkBAIC0xNTAsOCArMTUwLDcgQEAKIAl1bnNpZ25lZCBsb25nIG1zazsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCi0JZm9yIChpZHggPSAwOyBpZHggPCBzaXplb2YoZGVjb2Rlcl9vcHMpL3NpemVvZihkZWNvZGVyX29wc1swXSk7Ci0JICAgICBpZHgrKykgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShkZWNvZGVyX29wcyk7IGlkeCsrKSB7CiAJCW1zayA9IDEgPDwgaWR4OwogCQlpZiAoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykgY29udGludWU7CiAJCWlmIChkZWNvZGVyX29wc1tpZHhdLmNoZWNrKGN0eHQpKSB7CkBAIC0xNjcsOCArMTY2LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1zazsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCi0JZm9yIChpZHggPSAwOyBpZHggPCBzaXplb2YoZGVjb2Rlcl9vcHMpL3NpemVvZihkZWNvZGVyX29wc1swXSk7Ci0JICAgICBpZHgrKykgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShkZWNvZGVyX29wcyk7IGlkeCsrKSB7CiAJCW1zayA9IDEgPDwgaWR4OwogCQlpZiAoIShjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSkgY29udGludWU7CiAJCWN0eHQtPnN0YWxlX21hc2sgJj0gfm1zazsKQEAgLTE5OSwxOCArMTk3LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IGRlY29kZXJfaXNfdHVuZWQoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCi17Ci0Jc3RydWN0IHY0bDJfdHVuZXIgdnQ7Ci0JaW50IHJldDsKLQotCW1lbXNldCgmdnQsMCxzaXplb2YodnQpKTsKLQlyZXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfR19UVU5FUiwmdnQpOwotCWlmIChyZXQgPCAwKSByZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gdnQuc2lnbmFsID8gMSA6IDA7Ci19Ci0KLQogc3RhdGljIHVuc2lnbmVkIGludCBkZWNvZGVyX2Rlc2NyaWJlKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0LAogCQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpCiB7CkBAIC0yMjYsNyArMjEyLDcgQEAKIH0KIAogCi1jb25zdCBzdGF0aWMgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIGhmdW5jcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgaGZ1bmNzID0gewogCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX2RldGFjaCwKIAkuY2hlY2sgPSAoaW50ICgqKSh2b2lkICopKWRlY29kZXJfY2hlY2ssCiAJLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfdXBkYXRlLApAQCAtMjQzLDIxICsyMjksMTggQEAKIAlpZiAoY3AtPmhhbmRsZXIpIHJldHVybiAwOwogCWlmICghZGVjb2Rlcl9kZXRlY3QoY3ApKSByZXR1cm4gMDsKIAotCWN0eHQgPSBrbWFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7CisJY3R4dCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHh0KSxHRlBfS0VSTkVMKTsKIAlpZiAoIWN0eHQpIHJldHVybiAwOwotCW1lbXNldChjdHh0LDAsc2l6ZW9mKCpjdHh0KSk7CiAKIAljdHh0LT5oYW5kbGVyLmZ1bmNfZGF0YSA9IGN0eHQ7CiAJY3R4dC0+aGFuZGxlci5mdW5jX3RhYmxlID0gJmhmdW5jczsKIAljdHh0LT5jdHJsLmN0eHQgPSBjdHh0OwogCWN0eHQtPmN0cmwuZGV0YWNoID0gKHZvaWQgKCopKHZvaWQgKikpZGVjb2Rlcl9kZXRhY2g7CiAJY3R4dC0+Y3RybC5lbmFibGUgPSAodm9pZCAoKikodm9pZCAqLGludCkpZGVjb2Rlcl9lbmFibGU7Ci0JY3R4dC0+Y3RybC50dW5lZCA9IChpbnQgKCopKHZvaWQgKikpZGVjb2Rlcl9pc190dW5lZDsKIAljdHh0LT5jdHJsLmZvcmNlX3Jlc2V0ID0gKHZvaWQgKCopKHZvaWQqKSlkZWNvZGVyX3Jlc2V0OwogCWN0eHQtPmNsaWVudCA9IGNwOwogCWN0eHQtPmhkdyA9IGhkdzsKLQljdHh0LT5zdGFsZV9tYXNrID0gKDEgPDwgKHNpemVvZihkZWNvZGVyX29wcykvCi0JCQkJICBzaXplb2YoZGVjb2Rlcl9vcHNbMF0pKSkgLSAxOworCWN0eHQtPnN0YWxlX21hc2sgPSAoMSA8PCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKSkgLSAxOwogCWhkdy0+ZGVjb2Rlcl9jdHJsID0gJmN0eHQtPmN0cmw7CiAJY3AtPmhhbmRsZXIgPSAmY3R4dC0+aGFuZGxlcjsKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYwppbmRleCBmOTg1ZjAwLi5lOWRhOWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogewogCXN0cnVjdCBkZWJ1Z2lmY19tYXNrX2l0ZW0gKm1pcDsKIAl1bnNpZ25lZCBpbnQgaWR4OwotCWZvciAoaWR4ID0gMDsgaWR4IDwgc2l6ZW9mKG1hc2tfaXRlbXMpL3NpemVvZihtYXNrX2l0ZW1zWzBdKTsgaWR4KyspIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUobWFza19pdGVtcyk7IGlkeCsrKSB7CiAJCW1pcCA9IG1hc2tfaXRlbXMgKyBpZHg7CiAJCWlmIChkZWJ1Z2lmY19tYXRjaF9rZXl3b3JkKGJ1Zixjb3VudCxtaXAtPm5hbWUpKSB7CiAJCQlyZXR1cm4gbWlwLT5tc2s7CkBAIC0xNjksNyArMTY5LDcgQEAKIAl1bnNpZ25lZCBpbnQgaWR4OwogCWludCBiY250ID0gMDsKIAlpbnQgY2NudDsKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHNpemVvZihtYXNrX2l0ZW1zKS9zaXplb2YobWFza19pdGVtc1swXSk7IGlkeCsrKSB7CisJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKG1hc2tfaXRlbXMpOyBpZHgrKykgewogCQltaXAgPSBtYXNrX2l0ZW1zICsgaWR4OwogCQlpZiAoIShtaXAtPm1zayAmIG1zaykpIGNvbnRpbnVlOwogCQljY250ID0gc2NucHJpbnRmKGJ1ZixzeiwiJXMlYyVzIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmMKaW5kZXggNmNmZjhlNy4uNDVjYmNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmMKQEAgLTEwMiw5ICsxMDIsOCBAQAogCQl9CiAJCW1zZ1sxXS5sZW4gPSBwY250OwogCQltc2dbMV0uYnVmID0gZWVwcm9tK3RjbnQ7Ci0JCWlmICgocmV0ID0gaTJjX3RyYW5zZmVyKAotCQkJICAgICAmaGR3LT5pMmNfYWRhcCwKLQkJCSAgICAgbXNnLHNpemVvZihtc2cpL3NpemVvZihtc2dbMF0pKSkgIT0gMikgeworCQlpZiAoKHJldCA9IGkyY190cmFuc2ZlcigmaGR3LT5pMmNfYWRhcCwKKwkJCQkJbXNnLEFSUkFZX1NJWkUobXNnKSkpICE9IDIpIHsKIAkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAogCQkJCSAgICJlZXByb20gZmV0Y2ggc2V0IG9mZnMgZXJyPSVkIixyZXQpOwogCQkJa2ZyZWUoZWVwcm9tKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYwppbmRleCBjOTRmOTdiLi41Nzg2ZmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAicHZydXNiMi1lbmNvZGVyLmgiCiAjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCisjaW5jbHVkZSAicHZydXNiMi1meDItY21kLmgiCiAKIAogCkBAIC0zNCwzNCArMzUsNDEgQEAKICNkZWZpbmUgSVZUVl9NQk9YX0RSSVZFUl9ET05FIDB4MDAwMDAwMDIKICNkZWZpbmUgSVZUVl9NQk9YX0RSSVZFUl9CVVNZIDB4MDAwMDAwMDEKIAorI2RlZmluZSBNQk9YX0JBU0UgMHg0NAorCiAKIHN0YXRpYyBpbnQgcHZyMl9lbmNvZGVyX3dyaXRlX3dvcmRzKHN0cnVjdCBwdnIyX2hkdyAqaGR3LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgb2ZmcywKIAkJCQkgICAgY29uc3QgdTMyICpkYXRhLCB1bnNpZ25lZCBpbnQgZGxlbikKIHsKLQl1bnNpZ25lZCBpbnQgaWR4OworCXVuc2lnbmVkIGludCBpZHgsYWRkcjsKKwl1bnNpZ25lZCBpbnQgYkFkZHI7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgb2ZmcyA9IDA7CiAJdW5zaWduZWQgaW50IGNodW5rQ250OwogCiAJLyoKIAogCUZvcm1hdDogRmlyc3QgYnl0ZSBtdXN0IGJlIDB4MDEuICBSZW1haW5pbmcgMzIgYml0IHdvcmRzIGFyZQotCXNwcmVhZCBvdXQgaW50byBjaHVua3Mgb2YgNyBieXRlcyBlYWNoLCBsaXR0bGUtZW5kaWFuIG9yZGVyZWQsCi0Jb2Zmc2V0IGF0IHplcm8gd2l0aGluIGVhY2ggMiBibGFuayBieXRlcyBmb2xsb3dpbmcgYW5kIGEKLQlzaW5nbGUgYnl0ZSB0aGF0IGlzIDB4NDQgcGx1cyB0aGUgb2Zmc2V0IG9mIHRoZSB3b3JkLiAgUmVwZWF0Ci0JcmVxdWVzdCBmb3IgYWRkaXRpb25hbCB3b3Jkcywgd2l0aCBvZmZzZXQgYWRqdXN0ZWQKLQlhY2NvcmRpbmdseS4KKwlzcHJlYWQgb3V0IGludG8gY2h1bmtzIG9mIDcgYnl0ZXMgZWFjaCwgd2l0aCB0aGUgZmlyc3QgNCBieXRlcworCWJlaW5nIHRoZSBkYXRhIHdvcmQgKGxpdHRsZSBlbmRpYW4pLCBhbmQgdGhlIG5leHQgMyBieXRlcworCWJlaW5nIHRoZSBhZGRyZXNzIHdoZXJlIHRoYXQgZGF0YSB3b3JkIGlzIHRvIGJlIHdyaXR0ZW4gKGJpZworCWVuZGlhbikuICBSZXBlYXQgcmVxdWVzdCBmb3IgYWRkaXRpb25hbCB3b3Jkcywgd2l0aCBvZmZzZXQKKwlhZGp1c3RlZCBhY2NvcmRpbmdseS4KIAogCSovCiAJd2hpbGUgKGRsZW4pIHsKIAkJY2h1bmtDbnQgPSA4OwogCQlpZiAoY2h1bmtDbnQgPiBkbGVuKSBjaHVua0NudCA9IGRsZW47CiAJCW1lbXNldChoZHctPmNtZF9idWZmZXIsMCxzaXplb2YoaGR3LT5jbWRfYnVmZmVyKSk7Ci0JCWhkdy0+Y21kX2J1ZmZlclswXSA9IDB4MDE7CisJCWJBZGRyID0gMDsKKwkJaGR3LT5jbWRfYnVmZmVyW2JBZGRyKytdID0gRlgyQ01EX01FTV9XUklURV9EV09SRDsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBjaHVua0NudDsgaWR4KyspIHsKLQkJCWhkdy0+Y21kX2J1ZmZlclsxKyhpZHgqNykrNl0gPSAweDQ0ICsgaWR4ICsgb2ZmczsKLQkJCVBWUjJfREVDT01QT1NFX0xFKGhkdy0+Y21kX2J1ZmZlciwgMSsoaWR4KjcpLAotCQkJCQkgIGRhdGFbaWR4XSk7CisJCQlhZGRyID0gaWR4ICsgb2ZmczsKKwkJCWhkdy0+Y21kX2J1ZmZlcltiQWRkcis2XSA9IChhZGRyICYgMHhmZnUpOworCQkJaGR3LT5jbWRfYnVmZmVyW2JBZGRyKzVdID0gKChhZGRyPj44KSAmIDB4ZmZ1KTsKKwkJCWhkdy0+Y21kX2J1ZmZlcltiQWRkcis0XSA9ICgoYWRkcj4+MTYpICYgMHhmZnUpOworCQkJUFZSMl9ERUNPTVBPU0VfTEUoaGR3LT5jbWRfYnVmZmVyLCBiQWRkcixkYXRhW2lkeF0pOworCQkJYkFkZHIgKz0gNzsKIAkJfQogCQlyZXQgPSBwdnIyX3NlbmRfcmVxdWVzdChoZHcsCiAJCQkJCWhkdy0+Y21kX2J1ZmZlciwxKyhjaHVua0NudCo3KSwKQEAgLTc2LDMzICs4NCw0MiBAQAogfQogCiAKLXN0YXRpYyBpbnQgcHZyMl9lbmNvZGVyX3JlYWRfd29yZHMoc3RydWN0IHB2cjJfaGR3ICpoZHcsaW50IHN0YXR1c0ZsLAorc3RhdGljIGludCBwdnIyX2VuY29kZXJfcmVhZF93b3JkcyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCQkgICB1bnNpZ25lZCBpbnQgb2ZmcywKIAkJCQkgICB1MzIgKmRhdGEsIHVuc2lnbmVkIGludCBkbGVuKQogewogCXVuc2lnbmVkIGludCBpZHg7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgb2ZmcyA9IDA7CiAJdW5zaWduZWQgaW50IGNodW5rQ250OwogCiAJLyoKIAogCUZvcm1hdDogRmlyc3QgYnl0ZSBtdXN0IGJlIDB4MDIgKHN0YXR1cyBjaGVjaykgb3IgMHgyOCAocmVhZAogCWJhY2sgYmxvY2sgb2YgMzIgYml0IHdvcmRzKS4gIE5leHQgNiBieXRlcyBtdXN0IGJlIHplcm8sCi0JZm9sbG93ZWQgYnkgYSBzaW5nbGUgYnl0ZSBvZiAweDQ0K29mZnNldCBmb3IgcG9ydGlvbiB0byBiZQotCXJlYWQuICBSZXR1cm5lZCBkYXRhIGlzIHBhY2tlZCBzZXQgb2YgMzIgYml0cyB3b3JkcyB0aGF0IHdlcmUKLQlyZWFkLgorCWZvbGxvd2VkIGJ5IGEgc2luZ2xlIGJ5dGUgb2YgTUJPWF9CQVNFK29mZnNldCBmb3IgcG9ydGlvbiB0bworCWJlIHJlYWQuICBSZXR1cm5lZCBkYXRhIGlzIHBhY2tlZCBzZXQgb2YgMzIgYml0cyB3b3JkcyB0aGF0CisJd2VyZSByZWFkLgogCiAJKi8KIAogCXdoaWxlIChkbGVuKSB7CiAJCWNodW5rQ250ID0gMTY7CiAJCWlmIChjaHVua0NudCA+IGRsZW4pIGNodW5rQ250ID0gZGxlbjsKLQkJbWVtc2V0KGhkdy0+Y21kX2J1ZmZlciwwLHNpemVvZihoZHctPmNtZF9idWZmZXIpKTsKLQkJaGR3LT5jbWRfYnVmZmVyWzBdID0gc3RhdHVzRmwgPyAweDAyIDogMHgyODsKLQkJaGR3LT5jbWRfYnVmZmVyWzddID0gMHg0NCArIG9mZnM7CisJCWlmIChjaHVua0NudCA8IDE2KSBjaHVua0NudCA9IDE7CisJCWhkdy0+Y21kX2J1ZmZlclswXSA9CisJCQkoKGNodW5rQ250ID09IDEpID8KKwkJCSBGWDJDTURfTUVNX1JFQURfRFdPUkQgOiBGWDJDTURfTUVNX1JFQURfNjRCWVRFUyk7CisJCWhkdy0+Y21kX2J1ZmZlclsxXSA9IDA7CisJCWhkdy0+Y21kX2J1ZmZlclsyXSA9IDA7CisJCWhkdy0+Y21kX2J1ZmZlclszXSA9IDA7CisJCWhkdy0+Y21kX2J1ZmZlcls0XSA9IDA7CisJCWhkdy0+Y21kX2J1ZmZlcls1XSA9ICgob2Zmcz4+MTYpICYgMHhmZnUpOworCQloZHctPmNtZF9idWZmZXJbNl0gPSAoKG9mZnM+PjgpICYgMHhmZnUpOworCQloZHctPmNtZF9idWZmZXJbN10gPSAob2ZmcyAmIDB4ZmZ1KTsKIAkJcmV0ID0gcHZyMl9zZW5kX3JlcXVlc3QoaGR3LAogCQkJCQloZHctPmNtZF9idWZmZXIsOCwKLQkJCQkJaGR3LT5jbWRfYnVmZmVyLGNodW5rQ250ICogNCk7CisJCQkJCWhkdy0+Y21kX2J1ZmZlciwKKwkJCQkJKGNodW5rQ250ID09IDEgPyA0IDogMTYgKiA0KSk7CiAJCWlmIChyZXQpIHJldHVybiByZXQ7CiAKIAkJZm9yIChpZHggPSAwOyBpZHggPCBjaHVua0NudDsgaWR4KyspIHsKQEAgLTEyOSw2ICsxNDYsOCBAQAogCQkJICAgIHUzMiAqYXJncCkKIHsKIAl1bnNpZ25lZCBpbnQgcG9sbF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgdHJ5X2NvdW50ID0gMDsKKwlpbnQgcmV0cnlfZmxhZzsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCS8qIFRoZXNlIHNpemVzIGxvb2sgdG8gYmUgbGltaXRlZCBieSB0aGUgRlgyIGZpcm13YXJlIGltcGxlbWVudGF0aW9uICovCkBAIC0xNDAsMTQgKzE1OSwxNSBAQAogCS8qCiAKIAlUaGUgZW5jb2RlciBzZWVtcyB0byBzcGVhayBlbnRpcmVseSB1c2luZyBibG9ja3MgMzIgYml0IHdvcmRzLgotCUluIGl2dHYgZHJpdmVyIHRlcm1zLCB0aGlzIGlzIGEgbWFpbGJveCB3aGljaCB3ZSBwb3B1bGF0ZSB3aXRoCi0JZGF0YSBhbmQgd2F0Y2ggd2hhdCB0aGUgaGFyZHdhcmUgZG9lcyB3aXRoIGl0LiAgVGhlIGZpcnN0IHdvcmQKLQlpcyBhIHNldCBvZiBmbGFncyB1c2VkIHRvIGNvbnRyb2wgdGhlIHRyYW5zYWN0aW9uLCB0aGUgc2Vjb25kCi0Jd29yZCBpcyB0aGUgY29tbWFuZCB0byBleGVjdXRlLCB0aGUgdGhpcmQgYnl0ZSBpcyB6ZXJvIChpdnR2Ci0JZHJpdmVyIHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyBzb21lIGtpbmQgb2YgcmV0dXJuIHZhbHVlKSwgYW5kCi0JdGhlIGZvdXJ0aCBieXRlIGlzIGEgc3BlY2lmaWVkIHRpbWVvdXQgKHdpbmRvd3MgZHJpdmVyIGFsd2F5cwotCXVzZXMgMHgwMDA2MDAwMCBleGNlcHQgZm9yIG9uZSBjYXNlIHdoZW4gaXQgaXMgemVybykuICBBbGwKLQlzdWNjZXNzaXZlIHdvcmRzIGFyZSB0aGUgYXJndW1lbnQgd29yZHMgZm9yIHRoZSBjb21tYW5kLgorCUluIGl2dHYgZHJpdmVyIHRlcm1zLCB0aGlzIGlzIGEgbWFpbGJveCBhdCBNQk9YX0JBU0Ugd2hpY2ggd2UKKwlwb3B1bGF0ZSB3aXRoIGRhdGEgYW5kIHdhdGNoIHdoYXQgdGhlIGhhcmR3YXJlIGRvZXMgd2l0aCBpdC4KKwlUaGUgZmlyc3Qgd29yZCBpcyBhIHNldCBvZiBmbGFncyB1c2VkIHRvIGNvbnRyb2wgdGhlCisJdHJhbnNhY3Rpb24sIHRoZSBzZWNvbmQgd29yZCBpcyB0aGUgY29tbWFuZCB0byBleGVjdXRlLCB0aGUKKwl0aGlyZCBieXRlIGlzIHplcm8gKGl2dHYgZHJpdmVyIHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyBzb21lCisJa2luZCBvZiByZXR1cm4gdmFsdWUpLCBhbmQgdGhlIGZvdXJ0aCBieXRlIGlzIGEgc3BlY2lmaWVkCisJdGltZW91dCAod2luZG93cyBkcml2ZXIgYWx3YXlzIHVzZXMgMHgwMDA2MDAwMCBleGNlcHQgZm9yIG9uZQorCWNhc2Ugd2hlbiBpdCBpcyB6ZXJvKS4gIEFsbCBzdWNjZXNzaXZlIHdvcmRzIGFyZSB0aGUgYXJndW1lbnQKKwl3b3JkcyBmb3IgdGhlIGNvbW1hbmQuCiAKIAlGaXJzdCwgd3JpdGUgb3V0IHRoZSBlbnRpcmUgc2V0IG9mIHdvcmRzLCB3aXRoIHRoZSBmaXJzdCB3b3JkCiAJYmVpbmcgemVyby4KQEAgLTE1Niw0NCArMTc2LDQyIEBACiAJSVZUVl9NQk9YX0RSSVZFUl9ET05FIHwgSVZUVl9EUklWRVJfQlVTWSB0aGlzIHRpbWUgKHdoaWNoCiAJcHJvYmFibHkgbWVhbnMgImdvIikuCiAKLQlOZXh0LCByZWFkIGJhY2sgMTYgd29yZHMgYXMgc3RhdHVzLiAgQ2hlY2sgdGhlIGZpcnN0IHdvcmQsCisJTmV4dCwgcmVhZCBiYWNrIHRoZSByZXR1cm4gY291bnQgd29yZHMuICBDaGVjayB0aGUgZmlyc3Qgd29yZCwKIAl3aGljaCBzaG91bGQgaGF2ZSBJVlRWX01CT1hfRklSTVdBUkVfRE9ORSBzZXQuICBJZiBob3dldmVyCiAJdGhhdCBiaXQgaXMgbm90IHNldCwgdGhlbiB0aGUgY29tbWFuZCBpc24ndCBkb25lIHNvIHJlcGVhdCB0aGUKLQlyZWFkLgotCi0JTmV4dCwgcmVhZCBiYWNrIDMyIHdvcmRzIGFuZCBjb21wYXJlIHdpdGggdGhlIG9yaWdpbmFsCi0JYXJ1Z21lbnRzLiAgSG9wZWZ1bGx5IHRoZXkgd2lsbCBtYXRjaC4KKwlyZWFkIHVudGlsIGl0IGlzIHNldC4KIAogCUZpbmFsbHksIHdyaXRlIG91dCBqdXN0IHRoZSBmaXJzdCB3b3JkIGFnYWluLCBidXQgc2V0IGl0IHRvCiAJMHgwIHRoaXMgdGltZSAod2hpY2ggcHJvYmFibHkgbWVhbnMgImlkbGUiKS4KIAogCSovCiAKLQlpZiAoYXJnX2NudF9zZW5kID4gKHNpemVvZih3ckRhdGEpL3NpemVvZih3ckRhdGFbMF0pKS00KSB7CisJaWYgKGFyZ19jbnRfc2VuZCA+IChBUlJBWV9TSVpFKHdyRGF0YSkgLSA0KSkgewogCQlwdnIyX3RyYWNlKAogCQkJUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAogCQkJIkZhaWxlZCB0byB3cml0ZSBjeDIzNDE2IGNvbW1hbmQiCiAJCQkiIC0gdG9vIG1hbnkgaW5wdXQgYXJndW1lbnRzIgotCQkJIiAod2FzIGdpdmVuICV1IGxpbWl0ICV1KSIsCi0JCQlhcmdfY250X3NlbmQsCi0JCQkodW5zaWduZWQgaW50KShzaXplb2Yod3JEYXRhKS9zaXplb2Yod3JEYXRhWzBdKSkgLSA0KTsKKwkJCSIgKHdhcyBnaXZlbiAldSBsaW1pdCAlbHUpIiwKKwkJCWFyZ19jbnRfc2VuZCwgKGxvbmcgdW5zaWduZWQpIEFSUkFZX1NJWkUod3JEYXRhKSAtIDQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoYXJnX2NudF9yZWN2ID4gKHNpemVvZihyZERhdGEpL3NpemVvZihyZERhdGFbMF0pKS00KSB7CisJaWYgKGFyZ19jbnRfcmVjdiA+IChBUlJBWV9TSVpFKHJkRGF0YSkgLSA0KSkgewogCQlwdnIyX3RyYWNlKAogCQkJUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAogCQkJIkZhaWxlZCB0byB3cml0ZSBjeDIzNDE2IGNvbW1hbmQiCiAJCQkiIC0gdG9vIG1hbnkgcmV0dXJuIGFyZ3VtZW50cyIKLQkJCSIgKHdhcyBnaXZlbiAldSBsaW1pdCAldSkiLAotCQkJYXJnX2NudF9yZWN2LAotCQkJKHVuc2lnbmVkIGludCkoc2l6ZW9mKHJkRGF0YSkvc2l6ZW9mKHJkRGF0YVswXSkpIC0gNCk7CisJCQkiICh3YXMgZ2l2ZW4gJXUgbGltaXQgJWx1KSIsCisJCQlhcmdfY250X3JlY3YsIChsb25nIHVuc2lnbmVkKSBBUlJBWV9TSVpFKHJkRGF0YSkgLSA0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAKIAlMT0NLX1RBS0UoaGR3LT5jdGxfbG9jayk7IGRvIHsKIAorCQlyZXRyeV9mbGFnID0gMDsKKwkJdHJ5X2NvdW50Kys7CisJCXJldCA9IDA7CiAJCXdyRGF0YVswXSA9IDA7CiAJCXdyRGF0YVsxXSA9IGNtZDsKIAkJd3JEYXRhWzJdID0gMDsKQEAgLTIwMSw1OSArMjE5LDc0IEBACiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgYXJnX2NudF9zZW5kOyBpZHgrKykgewogCQkJd3JEYXRhW2lkeCs0XSA9IGFyZ3BbaWR4XTsKIAkJfQotCQlmb3IgKDsgaWR4IDwgKHNpemVvZih3ckRhdGEpL3NpemVvZih3ckRhdGFbMF0pKS00OyBpZHgrKykgeworCQlmb3IgKDsgaWR4IDwgQVJSQVlfU0laRSh3ckRhdGEpIC0gNDsgaWR4KyspIHsKIAkJCXdyRGF0YVtpZHgrNF0gPSAwOwogCQl9CiAKLQkJcmV0ID0gcHZyMl9lbmNvZGVyX3dyaXRlX3dvcmRzKGhkdyx3ckRhdGEsaWR4KTsKKwkJcmV0ID0gcHZyMl9lbmNvZGVyX3dyaXRlX3dvcmRzKGhkdyxNQk9YX0JBU0Usd3JEYXRhLGlkeCk7CiAJCWlmIChyZXQpIGJyZWFrOwogCQl3ckRhdGFbMF0gPSBJVlRWX01CT1hfRFJJVkVSX0RPTkV8SVZUVl9NQk9YX0RSSVZFUl9CVVNZOwotCQlyZXQgPSBwdnIyX2VuY29kZXJfd3JpdGVfd29yZHMoaGR3LHdyRGF0YSwxKTsKKwkJcmV0ID0gcHZyMl9lbmNvZGVyX3dyaXRlX3dvcmRzKGhkdyxNQk9YX0JBU0Usd3JEYXRhLDEpOwogCQlpZiAocmV0KSBicmVhazsKIAkJcG9sbF9jb3VudCA9IDA7CiAJCXdoaWxlICgxKSB7Ci0JCQlpZiAocG9sbF9jb3VudCA8IDEwMDAwMDAwKSBwb2xsX2NvdW50Kys7Ci0JCQlyZXQgPSBwdnIyX2VuY29kZXJfcmVhZF93b3JkcyhoZHcsITAscmREYXRhLDEpOwotCQkJaWYgKHJldCkgYnJlYWs7CisJCQlwb2xsX2NvdW50Kys7CisJCQlyZXQgPSBwdnIyX2VuY29kZXJfcmVhZF93b3JkcyhoZHcsTUJPWF9CQVNFLHJkRGF0YSwKKwkJCQkJCSAgICAgIGFyZ19jbnRfcmVjdis0KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWlmIChyZERhdGFbMF0gJiBJVlRWX01CT1hfRklSTVdBUkVfRE9ORSkgewogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKHBvbGxfY291bnQgPT0gMTAwKSB7CisJCQlpZiAocmREYXRhWzBdICYmIChwb2xsX2NvdW50IDwgMTAwMCkpIGNvbnRpbnVlOworCQkJaWYgKCFyZERhdGFbMF0pIHsKKwkJCQlyZXRyeV9mbGFnID0gITA7CisJCQkJcHZyMl90cmFjZSgKKwkJCQkJUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJCQkiRW5jb2RlciB0aW1lZCBvdXQgd2FpdGluZyBmb3IgdXMiCisJCQkJCSI7IGFycmFuZ2luZyB0byByZXRyeSIpOworCQkJfSBlbHNlIHsKIAkJCQlwdnIyX3RyYWNlKAogCQkJCQlQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCiAJCQkJCSIqKipXQVJOSU5HKioqIGRldmljZSdzIGVuY29kZXIiCiAJCQkJCSIgYXBwZWFycyB0byBiZSBzdHVjayIKLQkJCQkJIiAoc3RhdHVzPTAlMDh4KSIscmREYXRhWzBdKTsKLQkJCQlwdnIyX3RyYWNlKAotCQkJCQlQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCi0JCQkJCSJFbmNvZGVyIGNvbW1hbmQ6IDB4JTAyeCIsY21kKTsKLQkJCQlmb3IgKGlkeCA9IDQ7IGlkeCA8IGFyZ19jbnRfc2VuZDsgaWR4KyspIHsKLQkJCQkJcHZyMl90cmFjZSgKLQkJCQkJCVBWUjJfVFJBQ0VfRVJST1JfTEVHUywKLQkJCQkJCSJFbmNvZGVyIGFyZyVkOiAweCUwOHgiLAotCQkJCQkJaWR4LTMsd3JEYXRhW2lkeF0pOwotCQkJCX0KLQkJCQlwdnIyX3RyYWNlKAotCQkJCQlQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCi0JCQkJCSJHaXZpbmcgdXAgd2FpdGluZy4iCi0JCQkJCSIgIEl0IGlzIGxpa2VseSB0aGF0IgotCQkJCQkiIHRoaXMgaXMgYSBiYWQgaWRlYS4uLiIpOwotCQkJCXJldCA9IC1FQlVTWTsKLQkJCQlicmVhazsKKwkJCQkJIiAoc3RhdHVzPTB4JTA4eCkiLHJkRGF0YVswXSk7CiAJCQl9CisJCQlwdnIyX3RyYWNlKAorCQkJCVBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCQkiRW5jb2RlciBjb21tYW5kOiAweCUwMngiLGNtZCk7CisJCQlmb3IgKGlkeCA9IDQ7IGlkeCA8IGFyZ19jbnRfc2VuZDsgaWR4KyspIHsKKwkJCQlwdnIyX3RyYWNlKAorCQkJCQlQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCisJCQkJCSJFbmNvZGVyIGFyZyVkOiAweCUwOHgiLAorCQkJCQlpZHgtMyx3ckRhdGFbaWR4XSk7CisJCQl9CisJCQlyZXQgPSAtRUJVU1k7CisJCQlicmVhazsKIAkJfQotCQlpZiAocmV0KSBicmVhazsKKwkJaWYgKHJldHJ5X2ZsYWcpIHsKKwkJCWlmICh0cnlfY291bnQgPCAyMCkgY29udGludWU7CisJCQlwdnIyX3RyYWNlKAorCQkJCVBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCQkiVG9vIG1hbnkgcmV0cmllcy4uLiIpOworCQkJcmV0ID0gLUVCVVNZOworCQl9CisJCWlmIChyZXQpIHsKKwkJCXB2cjJfdHJhY2UoCisJCQkJUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJCSJHaXZpbmcgdXAgb24gY29tbWFuZC4iCisJCQkJIiAgSXQgaXMgbGlrZWx5IHRoYXQiCisJCQkJIiB0aGlzIGlzIGEgYmFkIGlkZWEuLi4iKTsKKwkJCWJyZWFrOworCQl9CiAJCXdyRGF0YVswXSA9IDB4NzsKLQkJcmV0ID0gcHZyMl9lbmNvZGVyX3JlYWRfd29yZHMoCi0JCQloZHcsMCxyZERhdGEsCi0JCQlzaXplb2YocmREYXRhKS9zaXplb2YocmREYXRhWzBdKSk7Ci0JCWlmIChyZXQpIGJyZWFrOwogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGFyZ19jbnRfcmVjdjsgaWR4KyspIHsKIAkJCWFyZ3BbaWR4XSA9IHJkRGF0YVtpZHgrNF07CiAJCX0KIAogCQl3ckRhdGFbMF0gPSAweDA7Ci0JCXJldCA9IHB2cjJfZW5jb2Rlcl93cml0ZV93b3JkcyhoZHcsd3JEYXRhLDEpOworCQlyZXQgPSBwdnIyX2VuY29kZXJfd3JpdGVfd29yZHMoaGR3LE1CT1hfQkFTRSx3ckRhdGEsMSk7CiAJCWlmIChyZXQpIGJyZWFrOwogCiAJfSB3aGlsZSgwKTsgTE9DS19HSVZFKGhkdy0+Y3RsX2xvY2spOwpAQCAtMjY5LDEzICszMDIsMTMgQEAKIAl1bnNpZ25lZCBpbnQgaWR4OwogCXUzMiBkYXRhWzEyXTsKIAotCWlmIChhcmdzID4gc2l6ZW9mKGRhdGEpL3NpemVvZihkYXRhWzBdKSkgeworCWlmIChhcmdzID4gQVJSQVlfU0laRShkYXRhKSkgewogCQlwdnIyX3RyYWNlKAogCQkJUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAogCQkJIkZhaWxlZCB0byB3cml0ZSBjeDIzNDE2IGNvbW1hbmQiCiAJCQkiIC0gdG9vIG1hbnkgYXJndW1lbnRzIgotCQkJIiAod2FzIGdpdmVuICV1IGxpbWl0ICV1KSIsCi0JCQlhcmdzLCh1bnNpZ25lZCBpbnQpKHNpemVvZihkYXRhKS9zaXplb2YoZGF0YVswXSkpKTsKKwkJCSIgKHdhcyBnaXZlbiAldSBsaW1pdCAlbHUpIiwKKwkJCWFyZ3MsIChsb25nIHVuc2lnbmVkKSBBUlJBWV9TSVpFKGRhdGEpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yODgsNiArMzIxLDczIEBACiAJcmV0dXJuIHB2cjJfZW5jb2Rlcl9jbWQoaGR3LGNtZCxhcmdzLDAsZGF0YSk7CiB9CiAKKworLyogVGhpcyBpbXBsZW1lbnRzIHNvbWUgZXh0cmEgc2V0dXAgZm9yIHRoZSBlbmNvZGVyIHRoYXQgc2VlbXMgdG8gYmUKKyAgIHNwZWNpZmljIHRvIHRoZSBQVlIgVVNCMiBoYXJkd2FyZS4gKi8KK2ludCBwdnIyX2VuY29kZXJfcHJlcF9jb25maWcoc3RydWN0IHB2cjJfaGR3ICpoZHcpCit7CisJaW50IHJldCA9IDA7CisJaW50IGVuY01pc2MzQXJnID0gMDsKKworI2lmIDAKKwkvKiBUaGlzIGluZXhwbGljYWJsZSBiaXQgaGFwcGVucyBpbiB0aGUgSGF1cHBhZ2Ugd2luZG93cworCSAgIGRyaXZlciAoZm9yIGJvdGggMjR4eHggYW5kIDI5eHh4IGRldmljZXMpLiAgSG93ZXZlciBJCisJICAgY3VycmVudGx5IHNlZSBubyBkaWZmZXJlbmNlIGluIGJlaGF2aW9yIHdpdGggb3Igd2l0aG91dAorCSAgIHRoaXMgc3R1ZmYuICBMZWF2ZSB0aGlzIGhlcmUgYXMgYSBub3RlIG9mIGl0cyBleGlzdGVuY2UsCisJICAgYnV0IGRvbid0IHVzZSBpdC4gKi8KKwlMT0NLX1RBS0UoaGR3LT5jdGxfbG9jayk7IGRvIHsKKwkJdTMyIGRhdFsxXTsKKwkJZGF0WzBdID0gMHg4MDAwMDY0MDsKKwkJcHZyMl9lbmNvZGVyX3dyaXRlX3dvcmRzKGhkdywweDAxZmUsZGF0LDEpOworCQlwdnIyX2VuY29kZXJfd3JpdGVfd29yZHMoaGR3LDB4MDIzZSxkYXQsMSk7CisJfSB3aGlsZSgwKTsgTE9DS19HSVZFKGhkdy0+Y3RsX2xvY2spOworI2VuZGlmCisKKwkvKiBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+IDI2LUphbi0yMDA2IFRoZSB3aW5kb3dzIGRyaXZlcgorCSAgIHNlbmRzIHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBFTkNfTUlTQyBjb21tYW5kcyAoZm9yIGJvdGgKKwkgICAyNHh4eCBhbmQgMjl4eHggZGV2aWNlcykuICBNZWFuaW5ncyBhcmUgbm90IGVudGlyZWx5IGNsZWFyLAorCSAgIGhvd2V2ZXIgd2l0aG91dCB0aGUgRU5DX01JU0MoMywxKSBjb21tYW5kIHRoZW4gd2UgcmlzaworCSAgIHJhbmRvbSBwZXJwZXR1YWwgdmlkZW8gY29ycnVwdGlvbiB3aGVuZXZlciB0aGUgdmlkZW8gaW5wdXQKKwkgICBicmVha3MgdXAgZm9yIGEgbW9tZW50IChsaWtlIHdoZW4gc3dpdGNoaW5nIGNoYW5uZWxzKS4gKi8KKworCisjaWYgMAorCS8qIFRoaXMgRU5DX01JU0MoNSwwKSBjb21tYW5kIHNlZW1zIHRvIGh1cnQgMjl4eHggc3luYworCSAgIHBlcmZvcm1hbmNlIG9uIGNoYW5uZWwgY2hhbmdlcywgYnV0IGlzIG5vdCBhIHByb2JsZW0gb24KKwkgICAyNHh4eCBkZXZpY2VzLiAqLworCXJldCB8PSBwdnIyX2VuY29kZXJfdmNtZChoZHcsIENYMjM0MVhfRU5DX01JU0MsNCwgNSwwLDAsMCk7CisjZW5kaWYKKworCS8qIFRoaXMgRU5DX01JU0MoMyxlbmNNaXNjM0FyZykgY29tbWFuZCBpcyBjcml0aWNhbCAtIHdpdGhvdXQKKwkgICBpdCB0aGVyZSB3aWxsIGV2ZW50dWFsbHkgYmUgdmlkZW8gY29ycnVwdGlvbi4gIEFsc28sIHRoZQorCSAgIDI5eHh4IGNhc2UgaXMgc3RyYW5nZSAtIHRoZSBXaW5kb3dzIGRyaXZlciBpcyBwYXNzaW5nIDEKKwkgICByZWdhcmRsZXNzIG9mIGRldmljZSB0eXBlIGJ1dCBpZiB3ZSBoYXZlIDEgZm9yIDI5eHh4IGRldmljZQorCSAgIHRoZSB2aWRlbyB0dXJucyBzbHVnZ2lzaC4gICovCisJc3dpdGNoIChoZHctPmhkd190eXBlKSB7CisJY2FzZSBQVlIyX0hEV19UWVBFXzI0WFhYOiBlbmNNaXNjM0FyZyA9IDE7IGJyZWFrOworCWNhc2UgUFZSMl9IRFdfVFlQRV8yOVhYWDogZW5jTWlzYzNBcmcgPSAwOyBicmVhazsKKwlkZWZhdWx0OiBicmVhazsKKwl9CisJcmV0IHw9IHB2cjJfZW5jb2Rlcl92Y21kKGhkdywgQ1gyMzQxWF9FTkNfTUlTQyw0LCAzLAorCQkJCSBlbmNNaXNjM0FyZywwLDApOworCisJcmV0IHw9IHB2cjJfZW5jb2Rlcl92Y21kKGhkdywgQ1gyMzQxWF9FTkNfTUlTQyw0LCA4LDAsMCwwKTsKKworI2lmIDAKKwkvKiBUaGlzIEVOQ19NSVNDKDQsMSkgY29tbWFuZCBpcyBwb2lzb25vdXMsIHNvIGl0IGlzIGNvbW1lbnRlZAorCSAgIG91dC4gIEJ1dCBJJ20gbGVhdmluZyBpdCBoZXJlIGFueXdheSB0byBkb2N1bWVudCBpdHMKKwkgICBleGlzdGVuY2UgaW4gdGhlIFdpbmRvd3MgZHJpdmVyLiAgVGhlIGVmZmVjdCBvZiB0aGlzCisJICAgY29tbWFuZCBpcyB0aGF0IGFwcHMgZGlzcGxheWluZyB0aGUgc3RyZWFtIGJlY29tZSBzbHVnZ2lzaAorCSAgIHdpdGggc3R1dHRlcmluZyB2aWRlby4gKi8KKwlyZXQgfD0gcHZyMl9lbmNvZGVyX3ZjbWQoaGR3LCBDWDIzNDFYX0VOQ19NSVNDLDQsIDQsMSwwLDApOworI2VuZGlmCisKKwlyZXQgfD0gcHZyMl9lbmNvZGVyX3ZjbWQoaGR3LCBDWDIzNDFYX0VOQ19NSVNDLDQsIDAsMywwLDApOworCXJldCB8PSBwdnIyX2VuY29kZXJfdmNtZChoZHcsIENYMjM0MVhfRU5DX01JU0MsNCwxNSwwLDAsMCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgcHZyMl9lbmNvZGVyX2NvbmZpZ3VyZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlpbnQgcmV0OwpAQCAtMzAyLDYgKzQwMiw4IEBACiAKIAlyZXQgPSAwOwogCisJcmV0IHw9IHB2cjJfZW5jb2Rlcl9wcmVwX2NvbmZpZyhoZHcpOworCiAJaWYgKCFyZXQpIHJldCA9IHB2cjJfZW5jb2Rlcl92Y21kKAogCQloZHcsQ1gyMzQxWF9FTkNfU0VUX05VTV9WU1lOQ19MSU5FUywgMiwKIAkJMHhmMCwgMHhmMCk7CkBAIC0zNjAsMTUgKzQ2MiwyMiBAQAogCXB2cjJfaGR3X2dwaW9fY2hnX2RpcihoZHcsMHhmZmZmZmZmZiwweDAwMDAwNDgxKTsKIAlwdnIyX2hkd19ncGlvX2NoZ19vdXQoaGR3LDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCk7CiAKLQlpZiAoaGR3LT5jb25maWcgPT0gcHZyMl9jb25maWdfdmJpKSB7CisJcHZyMl9lbmNvZGVyX3ZjbWQoaGR3LENYMjM0MVhfRU5DX01VVEVfVklERU8sMSwKKwkJCSAgaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPID8gMSA6IDApOworCisJc3dpdGNoIChoZHctPmNvbmZpZykgeworCWNhc2UgcHZyMl9jb25maWdfdmJpOgogCQlzdGF0dXMgPSBwdnIyX2VuY29kZXJfdmNtZChoZHcsQ1gyMzQxWF9FTkNfU1RBUlRfQ0FQVFVSRSwyLAogCQkJCQkgICAweDAxLDB4MTQpOwotCX0gZWxzZSBpZiAoaGR3LT5jb25maWcgPT0gcHZyMl9jb25maWdfbXBlZykgeworCQlicmVhazsKKwljYXNlIHB2cjJfY29uZmlnX21wZWc6CiAJCXN0YXR1cyA9IHB2cjJfZW5jb2Rlcl92Y21kKGhkdyxDWDIzNDFYX0VOQ19TVEFSVF9DQVBUVVJFLDIsCiAJCQkJCSAgIDAsMHgxMyk7Ci0JfSBlbHNlIHsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogVW5oYW5kbGVkIGNhc2VzIGZvciBub3cgKi8KIAkJc3RhdHVzID0gcHZyMl9lbmNvZGVyX3ZjbWQoaGR3LENYMjM0MVhfRU5DX1NUQVJUX0NBUFRVUkUsMiwKIAkJCQkJICAgMCwweDEzKTsKKwkJYnJlYWs7CiAJfQogCWlmICghc3RhdHVzKSB7CiAJCWhkdy0+c3Vic3lzX2VuYWJsZWRfbWFzayB8PSAoMTw8UFZSMl9TVUJTWVNfQl9FTkNfUlVOKTsKQEAgLTM4MywxNSArNDkyLDE5IEBACiAJLyogbWFzayBhbGwgaW50ZXJydXB0cyAqLwogCXB2cjJfd3JpdGVfcmVnaXN0ZXIoaGR3LCAweDAwNDgsIDB4ZmZmZmZmZmYpOwogCi0JaWYgKGhkdy0+Y29uZmlnID09IHB2cjJfY29uZmlnX3ZiaSkgeworCXN3aXRjaCAoaGR3LT5jb25maWcpIHsKKwljYXNlIHB2cjJfY29uZmlnX3ZiaToKIAkJc3RhdHVzID0gcHZyMl9lbmNvZGVyX3ZjbWQoaGR3LENYMjM0MVhfRU5DX1NUT1BfQ0FQVFVSRSwzLAogCQkJCQkgICAweDAxLDB4MDEsMHgxNCk7Ci0JfSBlbHNlIGlmIChoZHctPmNvbmZpZyA9PSBwdnIyX2NvbmZpZ19tcGVnKSB7CisJCWJyZWFrOworCWNhc2UgcHZyMl9jb25maWdfbXBlZzoKIAkJc3RhdHVzID0gcHZyMl9lbmNvZGVyX3ZjbWQoaGR3LENYMjM0MVhfRU5DX1NUT1BfQ0FQVFVSRSwzLAogCQkJCQkgICAweDAxLDAsMHgxMyk7Ci0JfSBlbHNlIHsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogVW5oYW5kbGVkIGNhc2VzIGZvciBub3cgKi8KIAkJc3RhdHVzID0gcHZyMl9lbmNvZGVyX3ZjbWQoaGR3LENYMjM0MVhfRU5DX1NUT1BfQ0FQVFVSRSwzLAogCQkJCQkgICAweDAxLDAsMHgxMyk7CisJCWJyZWFrOwogCX0KIAogCS8qIGNoYW5nZSBzb21lIEdQSU8gZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZngyLWNtZC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZngyLWNtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYmM2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1meDItY21kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqCisgKiAgJElkJAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX1BWUlVTQjJfRlgyX0NNRF9IXworI2RlZmluZSBfUFZSVVNCMl9GWDJfQ01EX0hfCisKKyNkZWZpbmUgRlgyQ01EX01FTV9XUklURV9EV09SRCAgMHgwMQorI2RlZmluZSBGWDJDTURfTUVNX1JFQURfRFdPUkQgICAweDAyCisKKyNkZWZpbmUgRlgyQ01EX01FTV9SRUFEXzY0QllURVMgMHgyOAorCisjZGVmaW5lIEZYMkNNRF9SRUdfV1JJVEUgICAgICAgIDB4MDQKKyNkZWZpbmUgRlgyQ01EX1JFR19SRUFEICAgICAgICAgMHgwNQorI2RlZmluZSBGWDJDTURfTUVNU0VMICAgICAgICAgICAweDA2CisKKyNkZWZpbmUgRlgyQ01EX0kyQ19XUklURSAgICAgICAgMHgwOAorI2RlZmluZSBGWDJDTURfSTJDX1JFQUQgICAgICAgICAweDA5CisKKyNkZWZpbmUgRlgyQ01EX0dFVF9VU0JfU1BFRUQgICAgMHgwYgorCisjZGVmaW5lIEZYMkNNRF9TVFJFQU1JTkdfT04gICAgIDB4MzYKKyNkZWZpbmUgRlgyQ01EX1NUUkVBTUlOR19PRkYgICAgMHgzNworCisjZGVmaW5lIEZYMkNNRF9GV1BPU1QxICAgICAgICAgIDB4NTIKKworI2RlZmluZSBGWDJDTURfUE9XRVJfT0ZGICAgICAgICAweGRjCisjZGVmaW5lIEZYMkNNRF9QT1dFUl9PTiAgICAgICAgIDB4ZGUKKworI2RlZmluZSBGWDJDTURfREVFUF9SRVNFVCAgICAgICAweGRkCisKKyNkZWZpbmUgRlgyQ01EX0dFVF9FRVBST01fQUREUiAgMHhlYgorI2RlZmluZSBGWDJDTURfR0VUX0lSX0NPREUgICAgICAweGVjCisKKyNlbmRpZiAvKiBfUFZSVVNCMl9GWDJfQ01EX0hfICovCisKKy8qCisgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CisgICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgorICAqKiogbW9kZTogYyAqKioKKyAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKKyAgKioqIHRhYi13aWR0aDogOCAqKioKKyAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgorICAqKiogRW5kOiAqKioKKyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKaW5kZXggMzRiMDhmYi4uMTZiZDc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKQEAgLTYwLDYgKzYwLDcgQEAKIAogdHlwZWRlZiBpbnQgKCpwdnIyX2N0bGZfaXNfZGlydHkpKHN0cnVjdCBwdnIyX2N0cmwgKik7CiB0eXBlZGVmIHZvaWQgKCpwdnIyX2N0bGZfY2xlYXJfZGlydHkpKHN0cnVjdCBwdnIyX2N0cmwgKik7Cit0eXBlZGVmIGludCAoKnB2cjJfY3RsZl9jaGVja192YWx1ZSkoc3RydWN0IHB2cjJfY3RybCAqLGludCk7CiB0eXBlZGVmIGludCAoKnB2cjJfY3RsZl9nZXRfdmFsdWUpKHN0cnVjdCBwdnIyX2N0cmwgKixpbnQgKik7CiB0eXBlZGVmIGludCAoKnB2cjJfY3RsZl9zZXRfdmFsdWUpKHN0cnVjdCBwdnIyX2N0cmwgKixpbnQgbXNrLGludCB2YWwpOwogdHlwZWRlZiBpbnQgKCpwdnIyX2N0bGZfdmFsX3RvX3N5bSkoc3RydWN0IHB2cjJfY3RybCAqLGludCBtc2ssaW50IHZhbCwKQEAgLTgzLDYgKzg0LDcgQEAKIAlwdnIyX2N0bGZfZ2V0X3ZhbHVlIGdldF9taW5fdmFsdWU7ICAvKiBHZXQgbWluaW11bSBhbGxvd2VkIHZhbHVlICovCiAJcHZyMl9jdGxmX2dldF92YWx1ZSBnZXRfbWF4X3ZhbHVlOyAgLyogR2V0IG1heGltdW0gYWxsb3dlZCB2YWx1ZSAqLwogCXB2cjJfY3RsZl9zZXRfdmFsdWUgc2V0X3ZhbHVlOyAgICAgIC8qIFNldCBpdHMgdmFsdWUgKi8KKwlwdnIyX2N0bGZfY2hlY2tfdmFsdWUgY2hlY2tfdmFsdWU7ICAvKiBDaGVjayB0aGF0IHZhbHVlIGlzIHZhbGlkICovCiAJcHZyMl9jdGxmX3ZhbF90b19zeW0gdmFsX3RvX3N5bTsgICAgLyogQ3VzdG9tIGNvbnZlcnQgdmFsdWUtPnN5bWJvbCAqLwogCXB2cjJfY3RsZl9zeW1fdG9fdmFsIHN5bV90b192YWw7ICAgIC8qIEN1c3RvbSBjb252ZXJ0IHN5bWJvbC0+dmFsdWUgKi8KIAlwdnIyX2N0bGZfaXNfZGlydHkgaXNfZGlydHk7ICAgICAgICAvKiBSZXR1cm4gdHJ1ZSBpZiBkaXJ0eSAqLwpAQCAtMTM1LDE3ICsxMzcsMTAgQEAKIH07CiAKIAotc3RydWN0IHB2cjJfYXVkaW9fc3RhdCB7Ci0Jdm9pZCAqY3R4dDsKLQl2b2lkICgqZGV0YWNoKSh2b2lkICopOwotCWludCAoKnN0YXR1cykodm9pZCAqKTsKLX07Ci0KIHN0cnVjdCBwdnIyX2RlY29kZXJfY3RybCB7CiAJdm9pZCAqY3R4dDsKIAl2b2lkICgqZGV0YWNoKSh2b2lkICopOwogCXZvaWQgKCplbmFibGUpKHZvaWQgKixpbnQpOwotCWludCAoKnR1bmVkKSh2b2lkICopOwogCXZvaWQgKCpmb3JjZV9yZXNldCkodm9pZCAqKTsKIH07CiAKQEAgLTIxMiw3ICsyMDcsNiBAQAogCS8qIEZyZXF1ZW5jeSB0YWJsZSAqLwogCXVuc2lnbmVkIGludCBmcmVxVGFibGVbRlJFUVRBQkxFX1NJWkVdOwogCXVuc2lnbmVkIGludCBmcmVxUHJvZ1Nsb3Q7Ci0JdW5zaWduZWQgaW50IGZyZXFTbG90OwogCiAJLyogU3R1ZmYgZm9yIGhhbmRsaW5nIGxvdyBsZXZlbCBjb250cm9sIGludGVyYWN0aW9uIHdpdGggZGV2aWNlICovCiAJc3RydWN0IG11dGV4IGN0bF9sb2NrX211dGV4OwpAQCAtMjU4LDkgKzI1MiwxNyBAQAogCS8qIFR1bmVyIC8gZnJlcXVlbmN5IGNvbnRyb2wgc3R1ZmYgKi8KIAl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsKIAlpbnQgdHVuZXJfdXBkYXRlZDsKLQl1bnNpZ25lZCBpbnQgZnJlcVZhbDsKKwl1bnNpZ25lZCBpbnQgZnJlcVZhbFRlbGV2aXNpb247ICAvKiBDdXJyZW50IGZyZXEgZm9yIHR2IG1vZGUgKi8KKwl1bnNpZ25lZCBpbnQgZnJlcVZhbFJhZGlvOyAgICAgICAvKiBDdXJyZW50IGZyZXEgZm9yIHJhZGlvIG1vZGUgKi8KKwl1bnNpZ25lZCBpbnQgZnJlcVNsb3RUZWxldmlzaW9uOyAvKiBDdXJyZW50IHNsb3QgZm9yIHR2IG1vZGUgKi8KKwl1bnNpZ25lZCBpbnQgZnJlcVNsb3RSYWRpbzsgICAgICAvKiBDdXJyZW50IHNsb3QgZm9yIHJhZGlvIG1vZGUgKi8KKwl1bnNpZ25lZCBpbnQgZnJlcVNlbGVjdG9yOyAgICAgICAvKiAwPXJhZGlvIDE9dGVsZXZpc2lvbiAqLwogCWludCBmcmVxRGlydHk7CiAKKwkvKiBDdXJyZW50IHR1bmVyIGluZm8gLSB0aGlzIGluZm9ybWF0aW9uIGlzIHBvbGxlZCBmcm9tIHRoZSBJMkMgYnVzICovCisJc3RydWN0IHY0bDJfdHVuZXIgdHVuZXJfc2lnbmFsX2luZm87CisJaW50IHR1bmVyX3NpZ25hbF9zdGFsZTsKKwogCS8qIFZpZGVvIHN0YW5kYXJkIGhhbmRsaW5nICovCiAJdjRsMl9zdGRfaWQgc3RkX21hc2tfZWVwcm9tOyAvLyBIYXJkd2FyZSBzdXBwb3J0ZWQgc2VsZWN0aW9ucwogCXY0bDJfc3RkX2lkIHN0ZF9tYXNrX2F2YWlsOyAgLy8gV2hpY2ggc3RhbmRhcmRzIHdlIG1heSBzZWxlY3QgZnJvbQpAQCAtMjgxLDIwICsyODMsMTcgQEAKIAlpbnQgdW5pdF9udW1iZXI7ICAgICAgICAgICAgIC8qIElEIGZvciBkcml2ZXIgaW5zdGFuY2UgKi8KIAl1bnNpZ25lZCBsb25nIHNlcmlhbF9udW1iZXI7IC8qIElEIGZvciBoYXJkd2FyZSBpdHNlbGYgKi8KIAotCS8qIE1pbm9yIG51bWJlciB1c2VkIGJ5IHY0bCBsb2dpYyAoeWVzLCB0aGlzIGlzIGEgaGFjaywgYXMgdGhlcmUgc2hvdWxkCi0JICAgYmUgbm8gdjRsIGp1bmsgaGVyZSkuICBQcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcy4gKi8KLQlpbnQgdjRsX21pbm9yX251bWJlcjsKKwkvKiBNaW5vciBudW1iZXJzIHVzZWQgYnkgdjRsIGxvZ2ljICh5ZXMsIHRoaXMgaXMgYSBoYWNrLCBhcyB0aGVyZQorCSAgIHNob3VsZCBiZSBubyB2NGwganVuayBoZXJlKS4gIFByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLiAqLworCWludCB2NGxfbWlub3JfbnVtYmVyX3ZpZGVvOworCWludCB2NGxfbWlub3JfbnVtYmVyX3ZiaTsKKwlpbnQgdjRsX21pbm9yX251bWJlcl9yYWRpbzsKIAogCS8qIExvY2F0aW9uIG9mIGVlcHJvbSBvciBhIG5lZ2F0aXZlIG51bWJlciBpZiBub25lICovCiAJaW50IGVlcHJvbV9hZGRyOwogCiAJZW51bSBwdnIyX2NvbmZpZyBjb25maWc7CiAKLQkvKiBJbmZvcm1hdGlvbiBhYm91dCB3aGF0IGF1ZGlvIHNpZ25hbCB3ZSdyZSBoZWFyaW5nICovCi0JaW50IGZsYWdfc3RlcmVvOwotCWludCBmbGFnX2JpbGluZ3VhbDsKLQlzdHJ1Y3QgcHZyMl9hdWRpb19zdGF0ICphdWRpb19zdGF0OwotCiAJLyogQ29udHJvbCBzdGF0ZSBuZWVkZWQgZm9yIGN4MjM0MXggbW9kdWxlICovCiAJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgZW5jX2N1cl9zdGF0ZTsKIAlzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyBlbmNfY3RsX3N0YXRlOwpAQCAtMzI3LDYgKzMyNiw5IEBACiAJdW5zaWduZWQgaW50IGNvbnRyb2xfY250OwogfTsKIAorLyogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBjdXJyZW50IGZyZXF1ZW5jeSAqLwordW5zaWduZWQgbG9uZyBwdnIyX2hkd19nZXRfY3VyX2ZyZXEoc3RydWN0IHB2cjJfaGR3ICopOworCiAjZW5kaWYgLyogX19QVlJVU0IyX0hEV19JTlRFUk5BTF9IICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCmluZGV4IGQyMDA0OTYuLmExY2EwZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC0zNiw2ICszNiwxMCBAQAogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCiAjaW5jbHVkZSAicHZydXNiMi1lbmNvZGVyLmgiCiAjaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgorI2luY2x1ZGUgInB2cnVzYjItZngyLWNtZC5oIgorCisjZGVmaW5lIFRWX01JTl9GUkVRICAgICA1NTI1MDAwMEwKKyNkZWZpbmUgVFZfTUFYX0ZSRVEgICAgODUwMDAwMDAwTAogCiBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwdnIyX2RldmljZV90YWJsZVtdID0gewogCVtQVlIyX0hEV19UWVBFXzI5WFhYXSA9IHsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjkwMCkgfSwKQEAgLTcxLDEyICs3NSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHB2cjJfc3RyaW5nX3RhYmxlIHB2cjJfY2xpZW50X2xpc3RzW10gPSB7CiAJW1BWUjJfSERXX1RZUEVfMjlYWFhdID0gewotCQlwdnIyX2NsaWVudF8yOXh4eCwKLQkJc2l6ZW9mKHB2cjJfY2xpZW50XzI5eHh4KS9zaXplb2YocHZyMl9jbGllbnRfMjl4eHhbMF0pLAorCQlwdnIyX2NsaWVudF8yOXh4eCwgQVJSQVlfU0laRShwdnIyX2NsaWVudF8yOXh4eCkKIAl9LAogCVtQVlIyX0hEV19UWVBFXzI0WFhYXSA9IHsKLQkJcHZyMl9jbGllbnRfMjR4eHgsCi0JCXNpemVvZihwdnIyX2NsaWVudF8yNHh4eCkvc2l6ZW9mKHB2cjJfY2xpZW50XzI0eHh4WzBdKSwKKwkJcHZyMl9jbGllbnRfMjR4eHgsIEFSUkFZX1NJWkUocHZyMl9jbGllbnRfMjR4eHgpCiAJfSwKIH07CiAKQEAgLTE2MCw5ICsxNjIsNiBAQAogCQkuc3RyaWQgPSAidmlkZW9fZ29wX2Nsb3N1cmUiLAogCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFLAogCX0sewotCQkuc3RyaWQgPSAidmlkZW9fcHVsbGRvd24iLAotCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOLAotCX0sewogCQkuc3RyaWQgPSAidmlkZW9fYml0cmF0ZV9tb2RlIiwKIAkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREUsCiAJfSx7CkBAIC0yMTIsNyArMjExLDcgQEAKIAkJLmlkID0gVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX0JPVFRPTSwKIAl9CiB9OwotI2RlZmluZSBNUEVHREVGX0NPVU5UIChzaXplb2YobXBlZ19pZHMpL3NpemVvZihtcGVnX2lkc1swXSkpCisjZGVmaW5lIE1QRUdERUZfQ09VTlQgQVJSQVlfU0laRShtcGVnX2lkcykKIAogCiBzdGF0aWMgY29uc3QgY2hhciAqY29udHJvbF92YWx1ZXNfc3JhdGVbXSA9IHsKQEAgLTI1NSwxMCArMjU0LDEwIEBACiAJW1BWUjJfU1VCU1lTX0JfRU5DX1JVTl0gPSAiZW5jX3J1biIsCiB9OwogCitzdGF0aWMgdm9pZCBwdnIyX2hkd19zZXRfY3VyX2ZyZXEoc3RydWN0IHB2cjJfaGR3ICosdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgaW50IHB2cjJfaGR3X2NtZF91c2JzdHJlYW0oc3RydWN0IHB2cjJfaGR3ICpoZHcsaW50IHJ1bkZsKTsKIHN0YXRpYyBpbnQgcHZyMl9oZHdfY29tbWl0X2N0bF9pbnRlcm5hbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7CiBzdGF0aWMgaW50IHB2cjJfaGR3X2dldF9lZXByb21fYWRkcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfaGR3X2dldF9zaWduYWxfc3RhdHVzX2ludGVybmFsKHN0cnVjdCBwdnIyX2hkdyAqaGR3KTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X2ludGVybmFsX2ZpbmRfc3RkZW51bShzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7CiBzdGF0aWMgdm9pZCBwdnIyX2hkd19pbnRlcm5hbF9zZXRfc3RkX2F2YWlsKHN0cnVjdCBwdnIyX2hkdyAqaGR3KTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3JlbmRlcl91c2VsZXNzX3VubG9ja2VkKHN0cnVjdCBwdnIyX2hkdyAqaGR3KTsKQEAgLTI3Miw4ICsyNzEsNiBAQAogCQkJCXVuc2lnbmVkIGludCB0aW1lb3V0LGludCBwcm9iZV9mbCwKIAkJCQl2b2lkICp3cml0ZV9kYXRhLHVuc2lnbmVkIGludCB3cml0ZV9sZW4sCiAJCQkJdm9pZCAqcmVhZF9kYXRhLHVuc2lnbmVkIGludCByZWFkX2xlbik7Ci1zdGF0aWMgaW50IHB2cjJfd3JpdGVfdTE2KHN0cnVjdCBwdnIyX2hkdyAqaGR3LCB1MTYgZGF0YSwgaW50IHJlcyk7Ci1zdGF0aWMgaW50IHB2cjJfd3JpdGVfdTgoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHU4IGRhdGEsIGludCByZXMpOwogCiBzdGF0aWMgaW50IGN0cmxfY2hhbm5lbGZyZXFfZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsaW50ICp2cCkKIHsKQEAgLTI4OSw4ICsyODYsMjEgQEAKIHN0YXRpYyBpbnQgY3RybF9jaGFubmVsZnJlcV9zZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0cixpbnQgbSxpbnQgdikKIHsKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwdHItPmhkdzsKLQlpZiAoKGhkdy0+ZnJlcVByb2dTbG90ID4gMCkgJiYgKGhkdy0+ZnJlcVByb2dTbG90IDw9IEZSRVFUQUJMRV9TSVpFKSkgewotCQloZHctPmZyZXFUYWJsZVtoZHctPmZyZXFQcm9nU2xvdC0xXSA9IHY7CisJdW5zaWduZWQgaW50IHNsb3RJZCA9IGhkdy0+ZnJlcVByb2dTbG90OworCWlmICgoc2xvdElkID4gMCkgJiYgKHNsb3RJZCA8PSBGUkVRVEFCTEVfU0laRSkpIHsKKwkJaGR3LT5mcmVxVGFibGVbc2xvdElkLTFdID0gdjsKKwkJLyogSGFuZGxlIHNpZGUgZWZmZWN0cyBjb3JyZWN0bHkgLSBpZiB3ZSdyZSB0dW5lZCB0byB0aGlzCisJCSAgIHNsb3QsIHRoZW4gZm9yZ290IHRoZSBzbG90IGlkIHJlbGF0aW9uIHNpbmNlIHRoZSBzdG9yZWQKKwkJICAgZnJlcXVlbmN5IGhhcyBiZWVuIGNoYW5nZWQuICovCisJCWlmIChoZHctPmZyZXFTZWxlY3RvcikgeworCQkJaWYgKGhkdy0+ZnJlcVNsb3RSYWRpbyA9PSBzbG90SWQpIHsKKwkJCQloZHctPmZyZXFTbG90UmFkaW8gPSAwOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGhkdy0+ZnJlcVNsb3RUZWxldmlzaW9uID09IHNsb3RJZCkgeworCQkJCWhkdy0+ZnJlcVNsb3RUZWxldmlzaW9uID0gMDsKKwkJCX0KKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTMxMiwyOCArMzIyLDMyIEBACiAKIHN0YXRpYyBpbnQgY3RybF9jaGFubmVsX2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLGludCAqdnApCiB7Ci0JKnZwID0gY3B0ci0+aGR3LT5mcmVxU2xvdDsKKwlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwdHItPmhkdzsKKwkqdnAgPSBoZHctPmZyZXFTZWxlY3RvciA/IGhkdy0+ZnJlcVNsb3RSYWRpbyA6IGhkdy0+ZnJlcVNsb3RUZWxldmlzaW9uOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN0cmxfY2hhbm5lbF9zZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0cixpbnQgbSxpbnQgdikKK3N0YXRpYyBpbnQgY3RybF9jaGFubmVsX3NldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLGludCBtLGludCBzbG90SWQpCiB7CiAJdW5zaWduZWQgZnJlcSA9IDA7CiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcHRyLT5oZHc7Ci0JaGR3LT5mcmVxU2xvdCA9IHY7Ci0JaWYgKChoZHctPmZyZXFTbG90ID4gMCkgJiYgKGhkdy0+ZnJlcVNsb3QgPD0gRlJFUVRBQkxFX1NJWkUpKSB7Ci0JCWZyZXEgPSBoZHctPmZyZXFUYWJsZVtoZHctPmZyZXFTbG90LTFdOworCWlmICgoc2xvdElkIDwgMCkgfHwgKHNsb3RJZCA+IEZSRVFUQUJMRV9TSVpFKSkgcmV0dXJuIDA7CisJaWYgKHNsb3RJZCA+IDApIHsKKwkJZnJlcSA9IGhkdy0+ZnJlcVRhYmxlW3Nsb3RJZC0xXTsKKwkJaWYgKCFmcmVxKSByZXR1cm4gMDsKKwkJcHZyMl9oZHdfc2V0X2N1cl9mcmVxKGhkdyxmcmVxKTsKIAl9Ci0JaWYgKGZyZXEgJiYgKGZyZXEgIT0gaGR3LT5mcmVxVmFsKSkgewotCQloZHctPmZyZXFWYWwgPSBmcmVxOwotCQloZHctPmZyZXFEaXJ0eSA9ICEwOworCWlmIChoZHctPmZyZXFTZWxlY3RvcikgeworCQloZHctPmZyZXFTbG90UmFkaW8gPSBzbG90SWQ7CisJfSBlbHNlIHsKKwkJaGR3LT5mcmVxU2xvdFRlbGV2aXNpb24gPSBzbG90SWQ7CiAJfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN0cmxfZnJlcV9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0cixpbnQgKnZwKQogewotCSp2cCA9IGNwdHItPmhkdy0+ZnJlcVZhbDsKKwkqdnAgPSBwdnIyX2hkd19nZXRfY3VyX2ZyZXEoY3B0ci0+aGR3KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzQ5LDEwICszNjMsNyBAQAogCiBzdGF0aWMgaW50IGN0cmxfZnJlcV9zZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0cixpbnQgbSxpbnQgdikKIHsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwdHItPmhkdzsKLQloZHctPmZyZXFWYWwgPSB2OwotCWhkdy0+ZnJlcURpcnR5ID0gITA7Ci0JaGR3LT5mcmVxU2xvdCA9IDA7CisJcHZyMl9oZHdfc2V0X2N1cl9mcmVxKGNwdHItPmhkdyx2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzc4LDYgKzM4OSw4OSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN0cmxfZ2V0X2lucHV0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsaW50ICp2cCkKK3sKKwkqdnAgPSBjcHRyLT5oZHctPmlucHV0X3ZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX3NldF9pbnB1dChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLGludCBtLGludCB2KQoreworCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3B0ci0+aGR3OworCisJaWYgKGhkdy0+aW5wdXRfdmFsICE9IHYpIHsKKwkJaGR3LT5pbnB1dF92YWwgPSB2OworCQloZHctPmlucHV0X2RpcnR5ID0gITA7CisJfQorCisJLyogSGFuZGxlIHNpZGUgZWZmZWN0cyAtIGlmIHdlIHN3aXRjaCB0byBhIG1vZGUgdGhhdCBuZWVkcyB0aGUgUkYKKwkgICB0dW5lciwgdGhlbiBzZWxlY3QgdGhlIHJpZ2h0IGZyZXF1ZW5jeSBjaG9pY2UgYXMgd2VsbCBhbmQgbWFyaworCSAgIGl0IGRpcnR5LiAqLworCWlmIChoZHctPmlucHV0X3ZhbCA9PSBQVlIyX0NWQUxfSU5QVVRfUkFESU8pIHsKKwkJaGR3LT5mcmVxU2VsZWN0b3IgPSAwOworCQloZHctPmZyZXFEaXJ0eSA9ICEwOworCX0gZWxzZSBpZiAoaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1RWKSB7CisJCWhkdy0+ZnJlcVNlbGVjdG9yID0gMTsKKwkJaGR3LT5mcmVxRGlydHkgPSAhMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9pc2RpcnR5X2lucHV0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIpCit7CisJcmV0dXJuIGNwdHItPmhkdy0+aW5wdXRfZGlydHkgIT0gMDsKK30KKworc3RhdGljIHZvaWQgY3RybF9jbGVhcmRpcnR5X2lucHV0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIpCit7CisJY3B0ci0+aGR3LT5pbnB1dF9kaXJ0eSA9IDA7Cit9CisKKworc3RhdGljIGludCBjdHJsX2ZyZXFfbWF4X2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLCBpbnQgKnZwKQoreworCXVuc2lnbmVkIGxvbmcgZnY7CisJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcHRyLT5oZHc7CisJaWYgKGhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlKSB7CisJCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwl9CisJZnYgPSBoZHctPnR1bmVyX3NpZ25hbF9pbmZvLnJhbmdlaGlnaDsKKwlpZiAoIWZ2KSB7CisJCS8qIFNhZmV0eSBmYWxsYmFjayAqLworCQkqdnAgPSBUVl9NQVhfRlJFUTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChoZHctPnR1bmVyX3NpZ25hbF9pbmZvLmNhcGFiaWxpdHkgJiBWNEwyX1RVTkVSX0NBUF9MT1cpIHsKKwkJZnYgPSAoZnYgKiAxMjUpIC8gMjsKKwl9IGVsc2UgeworCQlmdiA9IGZ2ICogNjI1MDA7CisJfQorCSp2cCA9IGZ2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN0cmxfZnJlcV9taW5fZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdnApCit7CisJdW5zaWduZWQgbG9uZyBmdjsKKwlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwdHItPmhkdzsKKwlpZiAoaGR3LT50dW5lcl9zaWduYWxfc3RhbGUpIHsKKwkJcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCX0KKwlmdiA9IGhkdy0+dHVuZXJfc2lnbmFsX2luZm8ucmFuZ2Vsb3c7CisJaWYgKCFmdikgeworCQkvKiBTYWZldHkgZmFsbGJhY2sgKi8KKwkJKnZwID0gVFZfTUlOX0ZSRVE7CisJCXJldHVybiAwOworCX0KKwlpZiAoaGR3LT50dW5lcl9zaWduYWxfaW5mby5jYXBhYmlsaXR5ICYgVjRMMl9UVU5FUl9DQVBfTE9XKSB7CisJCWZ2ID0gKGZ2ICogMTI1KSAvIDI7CisJfSBlbHNlIHsKKwkJZnYgPSBmdiAqIDYyNTAwOworCX0KKwkqdnAgPSBmdjsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjdHJsX2N4MjM0MXhfaXNfZGlydHkoc3RydWN0IHB2cjJfY3RybCAqY3B0cikKIHsKIAlyZXR1cm4gY3B0ci0+aGR3LT5lbmNfc3RhbGUgIT0gMDsKQEAgLTUzNCw4ICs2MjgsMzIgQEAKIAogc3RhdGljIGludCBjdHJsX3NpZ25hbF9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0cixpbnQgKnZwKQogewotCSp2cCA9ICgocHZyMl9oZHdfZ2V0X3NpZ25hbF9zdGF0dXNfaW50ZXJuYWwoY3B0ci0+aGR3KSAmCi0JCVBWUjJfU0lHTkFMX09LKSA/IDEgOiAwKTsKKwlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwdHItPmhkdzsKKwlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJKnZwID0gaGR3LT50dW5lcl9zaWduYWxfaW5mby5zaWduYWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9hdWRpb19tb2Rlc19wcmVzZW50X2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLGludCAqdnApCit7CisJaW50IHZhbCA9IDA7CisJdW5zaWduZWQgaW50IHN1YmNoYW47CisJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcHRyLT5oZHc7CisJcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCXN1YmNoYW4gPSBoZHctPnR1bmVyX3NpZ25hbF9pbmZvLnJ4c3ViY2hhbnM7CisJaWYgKHN1YmNoYW4gJiBWNEwyX1RVTkVSX1NVQl9NT05PKSB7CisJCXZhbCB8PSAoMSA8PCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CisJfQorCWlmIChzdWJjaGFuICYgVjRMMl9UVU5FUl9TVUJfU1RFUkVPKSB7CisJCXZhbCB8PSAoMSA8PCBWNEwyX1RVTkVSX01PREVfU1RFUkVPKTsKKwl9CisJaWYgKHN1YmNoYW4gJiBWNEwyX1RVTkVSX1NVQl9MQU5HMSkgeworCQl2YWwgfD0gKDEgPDwgVjRMMl9UVU5FUl9NT0RFX0xBTkcxKTsKKwl9CisJaWYgKHN1YmNoYW4gJiBWNEwyX1RVTkVSX1NVQl9MQU5HMikgeworCQl2YWwgfD0gKDEgPDwgVjRMMl9UVU5FUl9NT0RFX0xBTkcyKTsKKwl9CisJKnZwID0gdmFsOwogCXJldHVybiAwOwogfQogCkBAIC02MDQsNyArNzIyLDcgQEAKIAogI2RlZmluZSBERUZFTlVNKHRhYikgXAogCS50eXBlID0gcHZyMl9jdGxfZW51bSwgXAotCS5kZWYudHlwZV9lbnVtLmNvdW50ID0gKHNpemVvZih0YWIpL3NpemVvZigodGFiKVswXSkpLCBcCisJLmRlZi50eXBlX2VudW0uY291bnQgPSBBUlJBWV9TSVpFKHRhYiksIFwKIAkuZGVmLnR5cGVfZW51bS52YWx1ZV9uYW1lcyA9IHRhYgogCiAjZGVmaW5lIERFRkJPT0wgXApAQCAtNjQxLDE1ICs3NTksMTEgQEAKIFZDUkVBVEVfRlVOQ1MoYmFzcykKIFZDUkVBVEVfRlVOQ1ModHJlYmxlKQogVkNSRUFURV9GVU5DUyhtdXRlKQotVkNSRUFURV9GVU5DUyhpbnB1dCkKIFZDUkVBVEVfRlVOQ1MoYXVkaW9tb2RlKQogVkNSRUFURV9GVU5DUyhyZXNfaG9yKQogVkNSRUFURV9GVU5DUyhyZXNfdmVyKQogVkNSRUFURV9GVU5DUyhzcmF0ZSkKIAotI2RlZmluZSBNSU5fRlJFUSA1NTI1MDAwMEwKLSNkZWZpbmUgTUFYX0ZSRVEgODUwMDAwMDAwTAotCiAvKiBUYWJsZSBkZWZpbml0aW9uIG9mIGFsbCBjb250cm9scyB3aGljaCBjYW4gYmUgbWFuaXB1bGF0ZWQgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9jdGxfaW5mbyBjb250cm9sX2RlZnNbXSA9IHsKIAl7CkBAIC02ODQsNyArNzk4LDcgQEAKIAkJLnY0bF9pZCA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKIAkJLmRlc2MgPSAiVm9sdW1lIiwKIAkJLm5hbWUgPSAidm9sdW1lIiwKLQkJLmRlZmF1bHRfdmFsdWUgPSA2NTUzNSwKKwkJLmRlZmF1bHRfdmFsdWUgPSA2MjAwMCwKIAkJREVGUkVGKHZvbHVtZSksCiAJCURFRklOVCgwLDY1NTM1KSwKIAl9LHsKQEAgLTc1OCwxMiArODcyLDE2IEBACiAJCS5kZXNjID0gIlR1bmVyIEZyZXF1ZW5jeSAoSHopIiwKIAkJLm5hbWUgPSAiZnJlcXVlbmN5IiwKIAkJLmludGVybmFsX2lkID0gUFZSMl9DSURfRlJFUVVFTkNZLAotCQkuZGVmYXVsdF92YWx1ZSA9IDE3NTI1MDAwMEwsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKIAkJLnNldF92YWx1ZSA9IGN0cmxfZnJlcV9zZXQsCiAJCS5nZXRfdmFsdWUgPSBjdHJsX2ZyZXFfZ2V0LAogCQkuaXNfZGlydHkgPSBjdHJsX2ZyZXFfaXNfZGlydHksCiAJCS5jbGVhcl9kaXJ0eSA9IGN0cmxfZnJlcV9jbGVhcl9kaXJ0eSwKLQkJREVGSU5UKE1JTl9GUkVRLE1BWF9GUkVRKSwKKwkJREVGSU5UKDAsMCksCisJCS8qIEhvb2sgaW4gY2hlY2sgZm9yIGlucHV0IHZhbHVlICh0di9yYWRpbykgYW5kIGFkanVzdAorCQkgICBtYXgvbWluIHZhbHVlcyBhY2NvcmRpbmdseSAqLworCQkuZ2V0X21heF92YWx1ZSA9IGN0cmxfZnJlcV9tYXhfZ2V0LAorCQkuZ2V0X21pbl92YWx1ZSA9IGN0cmxfZnJlcV9taW5fZ2V0LAogCX0sewogCQkuZGVzYyA9ICJDaGFubmVsIiwKIAkJLm5hbWUgPSAiY2hhbm5lbCIsCkBAIC03NzUsNyArODkzLDExIEBACiAJCS5uYW1lID0gImZyZXFfdGFibGVfdmFsdWUiLAogCQkuc2V0X3ZhbHVlID0gY3RybF9jaGFubmVsZnJlcV9zZXQsCiAJCS5nZXRfdmFsdWUgPSBjdHJsX2NoYW5uZWxmcmVxX2dldCwKLQkJREVGSU5UKE1JTl9GUkVRLE1BWF9GUkVRKSwKKwkJREVGSU5UKDAsMCksCisJCS8qIEhvb2sgaW4gY2hlY2sgZm9yIGlucHV0IHZhbHVlICh0di9yYWRpbykgYW5kIGFkanVzdAorCQkgICBtYXgvbWluIHZhbHVlcyBhY2NvcmRpbmdseSAqLworCQkuZ2V0X21heF92YWx1ZSA9IGN0cmxfZnJlcV9tYXhfZ2V0LAorCQkuZ2V0X21pbl92YWx1ZSA9IGN0cmxfZnJlcV9taW5fZ2V0LAogCX0sewogCQkuZGVzYyA9ICJDaGFubmVsIFByb2dyYW0gSUQiLAogCQkubmFtZSA9ICJmcmVxX3RhYmxlX2NoYW5uZWwiLApAQCAtNzk2LDcgKzkxOCwyMCBAQAogCQkuZGVzYyA9ICJTaWduYWwgUHJlc2VudCIsCiAJCS5uYW1lID0gInNpZ25hbF9wcmVzZW50IiwKIAkJLmdldF92YWx1ZSA9IGN0cmxfc2lnbmFsX2dldCwKLQkJREVGQk9PTCwKKwkJREVGSU5UKDAsNjU1MzUpLAorCX0seworCQkuZGVzYyA9ICJBdWRpbyBNb2RlcyBQcmVzZW50IiwKKwkJLm5hbWUgPSAiYXVkaW9fbW9kZXNfcHJlc2VudCIsCisJCS5nZXRfdmFsdWUgPSBjdHJsX2F1ZGlvX21vZGVzX3ByZXNlbnRfZ2V0LAorCQkvKiBGb3IgdGhpcyB0eXBlIHdlICJib3Jyb3ciIHRoZSBWNEwyX1RVTkVSX01PREUgZW51bSBmcm9tCisJCSAgIHY0bC4gIE5vdGhpbmcgb3V0c2lkZSBvZiB0aGlzIG1vZHVsZSBjYXJlcyBhYm91dCB0aGlzLAorCQkgICBidXQgSSByZXVzZSBpdCBpbiBvcmRlciB0byBhbHNvIHJldXNlIHRoZQorCQkgICBjb250cm9sX3ZhbHVlc19hdWRpb21vZGUgc3RyaW5nIHRhYmxlLiAqLworCQlERUZNQVNLKCgoMSA8PCBWNEwyX1RVTkVSX01PREVfTU9OTyl8CisJCQkgKDEgPDwgVjRMMl9UVU5FUl9NT0RFX1NURVJFTyl8CisJCQkgKDEgPDwgVjRMMl9UVU5FUl9NT0RFX0xBTkcxKXwKKwkJCSAoMSA8PCBWNEwyX1RVTkVSX01PREVfTEFORzIpKSwKKwkJCWNvbnRyb2xfdmFsdWVzX2F1ZGlvbW9kZSksCiAJfSx7CiAJCS5kZXNjID0gIlZpZGVvIFN0YW5kYXJkcyBBdmFpbGFibGUgTWFzayIsCiAJCS5uYW1lID0gInZpZGVvX3N0YW5kYXJkX21hc2tfYXZhaWxhYmxlIiwKQEAgLTg0Niw3ICs5ODEsNyBAQAogCX0KIH07CiAKLSNkZWZpbmUgQ1RSTERFRl9DT1VOVCAoc2l6ZW9mKGNvbnRyb2xfZGVmcykvc2l6ZW9mKGNvbnRyb2xfZGVmc1swXSkpCisjZGVmaW5lIENUUkxERUZfQ09VTlQgQVJSQVlfU0laRShjb250cm9sX2RlZnMpCiAKIAogY29uc3QgY2hhciAqcHZyMl9jb25maWdfZ2V0X25hbWUoZW51bSBwdnIyX2NvbmZpZyBjZmcpCkBAIC04NTUsNyArOTkwLDggQEAKIAljYXNlIHB2cjJfY29uZmlnX2VtcHR5OiByZXR1cm4gImVtcHR5IjsKIAljYXNlIHB2cjJfY29uZmlnX21wZWc6IHJldHVybiAibXBlZyI7CiAJY2FzZSBwdnIyX2NvbmZpZ192Ymk6IHJldHVybiAidmJpIjsKLQljYXNlIHB2cjJfY29uZmlnX3JhZGlvOiByZXR1cm4gInJhZGlvIjsKKwljYXNlIHB2cjJfY29uZmlnX3BjbTogcmV0dXJuICJwY20iOworCWNhc2UgcHZyMl9jb25maWdfcmF3dmlkZW86IHJldHVybiAicmF3IHZpZGVvIjsKIAl9CiAJcmV0dXJuICI8dW5rbm93bj4iOwogfQpAQCAtODcyLDYgKzEwMDgsNDAgQEAKIAlyZXR1cm4gaGR3LT5zZXJpYWxfbnVtYmVyOwogfQogCit1bnNpZ25lZCBsb25nIHB2cjJfaGR3X2dldF9jdXJfZnJlcShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlyZXR1cm4gaGR3LT5mcmVxU2VsZWN0b3IgPyBoZHctPmZyZXFWYWxUZWxldmlzaW9uIDogaGR3LT5mcmVxVmFsUmFkaW87Cit9CisKKy8qIFNldCB0aGUgY3VycmVudGx5IHR1bmVkIGZyZXF1ZW5jeSBhbmQgYWNjb3VudCBmb3IgYWxsIHBvc3NpYmxlCisgICBkcml2ZXItY29yZSBzaWRlIGVmZmVjdHMgb2YgdGhpcyBhY3Rpb24uICovCit2b2lkIHB2cjJfaGR3X3NldF9jdXJfZnJlcShzdHJ1Y3QgcHZyMl9oZHcgKmhkdyx1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlpZiAoaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPKSB7CisJCWlmIChoZHctPmZyZXFTZWxlY3RvcikgeworCQkJLyogU3dpbmcgb3ZlciB0byByYWRpbyBmcmVxdWVuY3kgc2VsZWN0aW9uICovCisJCQloZHctPmZyZXFTZWxlY3RvciA9IDA7CisJCQloZHctPmZyZXFEaXJ0eSA9ICEwOworCQl9CisJCWlmIChoZHctPmZyZXFWYWxSYWRpbyAhPSB2YWwpIHsKKwkJCWhkdy0+ZnJlcVZhbFJhZGlvID0gdmFsOworCQkJaGR3LT5mcmVxU2xvdFJhZGlvID0gMDsKKwkJCWhkdy0+ZnJlcURpcnR5ID0gITA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIShoZHctPmZyZXFTZWxlY3RvcikpIHsKKwkJCS8qIFN3aW5nIG92ZXIgdG8gdGVsZXZpc2lvbiBmcmVxdWVuY3kgc2VsZWN0aW9uICovCisJCQloZHctPmZyZXFTZWxlY3RvciA9IDE7CisJCQloZHctPmZyZXFEaXJ0eSA9ICEwOworCQl9CisJCWlmIChoZHctPmZyZXFWYWxUZWxldmlzaW9uICE9IHZhbCkgeworCQkJaGR3LT5mcmVxVmFsVGVsZXZpc2lvbiA9IHZhbDsKKwkJCWhkdy0+ZnJlcVNsb3RUZWxldmlzaW9uID0gMDsKKwkJCWhkdy0+ZnJlcURpcnR5ID0gITA7CisJCX0KKwl9Cit9CisKIGludCBwdnIyX2hkd19nZXRfdW5pdF9udW1iZXIoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJcmV0dXJuIGhkdy0+dW5pdF9udW1iZXI7CkBAIC05NjAsMTIgKzExMzAsMTAgQEAKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9zdHJpbmdfdGFibGUgZndfZmlsZV9kZWZzW10gPSB7CiAJCVtQVlIyX0hEV19UWVBFXzI5WFhYXSA9IHsKLQkJCWZ3X2ZpbGVzXzI5eHh4LAotCQkJc2l6ZW9mKGZ3X2ZpbGVzXzI5eHh4KS9zaXplb2YoZndfZmlsZXNfMjl4eHhbMF0pLAorCQkJZndfZmlsZXNfMjl4eHgsIEFSUkFZX1NJWkUoZndfZmlsZXNfMjl4eHgpCiAJCX0sCiAJCVtQVlIyX0hEV19UWVBFXzI0WFhYXSA9IHsKLQkJCWZ3X2ZpbGVzXzI0eHh4LAotCQkJc2l6ZW9mKGZ3X2ZpbGVzXzI0eHh4KS9zaXplb2YoZndfZmlsZXNfMjR4eHhbMF0pLAorCQkJZndfZmlsZXNfMjR4eHgsIEFSUkFZX1NJWkUoZndfZmlsZXNfMjR4eHgpCiAJCX0sCiAJfTsKIAloZHctPmZ3MV9zdGF0ZSA9IEZXMV9TVEFURV9GQUlMRUQ7IC8vIGRlZmF1bHQgcmVzdWx0CkBAIC0xMDQxLDcgKzEyMDksNyBAQAogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnkgPSBOVUxMOwogCXZvaWQgICpmd19wdHI7Ci0JdW5zaWduZWQgaW50IHBpcGUsIGZ3X2xlbiwgZndfZG9uZTsKKwl1bnNpZ25lZCBpbnQgcGlwZSwgZndfbGVuLCBmd19kb25lLCBiY250LCBpY250OwogCWludCBhY3R1YWxfbGVuZ3RoOwogCWludCByZXQgPSAwOwogCWludCBmd2lkeDsKQEAgLTEwNTIsOCArMTIyMCw3IEBACiAJdHJhY2VfZmlybXdhcmUoInB2cjJfdXBsb2FkX2Zpcm13YXJlMiIpOwogCiAJcmV0ID0gcHZyMl9sb2NhdGVfZmlybXdhcmUoaGR3LCZmd19lbnRyeSwiZW5jb2RlciIsCi0JCQkJICAgc2l6ZW9mKGZ3X2ZpbGVzKS9zaXplb2YoZndfZmlsZXNbMF0pLAotCQkJCSAgIGZ3X2ZpbGVzKTsKKwkJCQkgICBBUlJBWV9TSVpFKGZ3X2ZpbGVzKSwgZndfZmlsZXMpOwogCWlmIChyZXQgPCAwKSByZXR1cm4gcmV0OwogCWZ3aWR4ID0gcmV0OwogCXJldCA9IDA7CkBAIC0xMDc5LDggKzEyNDYsMTMgQEAKIAlyZXQgfD0gcHZyMl93cml0ZV9yZWdpc3RlcihoZHcsIDB4YWEwNCwgMHgwMDA1NzgxMCk7IC8qdW5rbm93biovCiAJcmV0IHw9IHB2cjJfd3JpdGVfcmVnaXN0ZXIoaGR3LCAweGFhMTAsIDB4MDAxNDg1MDApOyAvKnVua25vd24qLwogCXJldCB8PSBwdnIyX3dyaXRlX3JlZ2lzdGVyKGhkdywgMHhhYTE4LCAweDAwODQwMDAwKTsgLyp1bmtub3duKi8KLQlyZXQgfD0gcHZyMl93cml0ZV91OChoZHcsIDB4NTIsIDApOwotCXJldCB8PSBwdnIyX3dyaXRlX3UxNihoZHcsIDB4MDYwMCwgMCk7CisJTE9DS19UQUtFKGhkdy0+Y3RsX2xvY2spOyBkbyB7CisJCWhkdy0+Y21kX2J1ZmZlclswXSA9IEZYMkNNRF9GV1BPU1QxOworCQlyZXQgfD0gcHZyMl9zZW5kX3JlcXVlc3QoaGR3LGhkdy0+Y21kX2J1ZmZlciwxLDAsMCk7CisJCWhkdy0+Y21kX2J1ZmZlclswXSA9IEZYMkNNRF9NRU1TRUw7CisJCWhkdy0+Y21kX2J1ZmZlclsxXSA9IDA7CisJCXJldCB8PSBwdnIyX3NlbmRfcmVxdWVzdChoZHcsaGR3LT5jbWRfYnVmZmVyLDIsMCwwKTsKKwl9IHdoaWxlICgwKTsgTE9DS19HSVZFKGhkdy0+Y3RsX2xvY2spOwogCiAJaWYgKHJldCkgewogCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKQEAgLTEwOTMsMTEgKzEyNjUsMTEgQEAKIAogCWZ3X2xlbiA9IGZ3X2VudHJ5LT5zaXplOwogCi0JaWYgKGZ3X2xlbiAlIEZJUk1XQVJFX0NIVU5LX1NJWkUpIHsKKwlpZiAoZndfbGVuICUgc2l6ZW9mKHUzMikpIHsKIAkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCiAJCQkgICAic2l6ZSBvZiAlcyBmaXJtd2FyZSIKLQkJCSAgICIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDgxOTJCIiwKLQkJCSAgIGZ3X2ZpbGVzW2Z3aWR4XSk7CisJCQkgICAiIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAldSBieXRlcyIsCisJCQkgICBmd19maWxlc1tmd2lkeF0sc2l6ZW9mKHUzMikpOwogCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTExMTIsMTggKzEyODQsMjEgQEAKIAogCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoaGR3LT51c2JfZGV2LCBQVlIyX0ZJUk1XQVJFX0VORFBPSU5UKTsKIAotCWZvciAoZndfZG9uZSA9IDAgOyAoZndfZG9uZSA8IGZ3X2xlbikgJiYgIXJldCA7Ci0JICAgICBmd19kb25lICs9IEZJUk1XQVJFX0NIVU5LX1NJWkUgKSB7Ci0JCWludCBpOwotCQltZW1jcHkoZndfcHRyLCBmd19lbnRyeS0+ZGF0YSArIGZ3X2RvbmUsIEZJUk1XQVJFX0NIVU5LX1NJWkUpOwotCQkvKiBVc2Jzbm9vcCBsb2cgIHNob3dzIHRoYXQgd2UgbXVzdCBzd2FwIGJ5dGVzLi4uICovCi0JCWZvciAoaSA9IDA7IGkgPCBGSVJNV0FSRV9DSFVOS19TSVpFLzQgOyBpKyspCi0JCQkoKHUzMiAqKWZ3X3B0cilbaV0gPSBfX19zd2FiMzIoKCh1MzIgKilmd19wdHIpW2ldKTsKKwlmd19kb25lID0gMDsKKwlmb3IgKGZ3X2RvbmUgPSAwOyBmd19kb25lIDwgZndfbGVuOykgeworCQliY250ID0gZndfbGVuIC0gZndfZG9uZTsKKwkJaWYgKGJjbnQgPiBGSVJNV0FSRV9DSFVOS19TSVpFKSBiY250ID0gRklSTVdBUkVfQ0hVTktfU0laRTsKKwkJbWVtY3B5KGZ3X3B0ciwgZndfZW50cnktPmRhdGEgKyBmd19kb25lLCBiY250KTsKKwkJLyogVXNic25vb3AgbG9nIHNob3dzIHRoYXQgd2UgbXVzdCBzd2FwIGJ5dGVzLi4uICovCisJCWZvciAoaWNudCA9IDA7IGljbnQgPCBiY250LzQgOyBpY250KyspCisJCQkoKHUzMiAqKWZ3X3B0cilbaWNudF0gPQorCQkJCV9fX3N3YWIzMigoKHUzMiAqKWZ3X3B0cilbaWNudF0pOwogCi0JCXJldCB8PSB1c2JfYnVsa19tc2coaGR3LT51c2JfZGV2LCBwaXBlLCBmd19wdHIsCi0JCQkJICAgIEZJUk1XQVJFX0NIVU5LX1NJWkUsCisJCXJldCB8PSB1c2JfYnVsa19tc2coaGR3LT51c2JfZGV2LCBwaXBlLCBmd19wdHIsYmNudCwKIAkJCQkgICAgJmFjdHVhbF9sZW5ndGgsIEhaKTsKLQkJcmV0IHw9IChhY3R1YWxfbGVuZ3RoICE9IEZJUk1XQVJFX0NIVU5LX1NJWkUpOworCQlyZXQgfD0gKGFjdHVhbF9sZW5ndGggIT0gYmNudCk7CisJCWlmIChyZXQpIGJyZWFrOworCQlmd19kb25lICs9IGJjbnQ7CiAJfQogCiAJdHJhY2VfZmlybXdhcmUoInVwbG9hZCBvZiAlcyA6ICVpIC8gJWkgIiwKQEAgLTExNDIsNyArMTMxNywxMSBAQAogCiAJcmV0IHw9IHB2cjJfd3JpdGVfcmVnaXN0ZXIoaGR3LCAweDkwNTQsIDB4ZmZmZmZmZmYpOyAvKnJlc2V0IGh3IGJsb2NrcyovCiAJcmV0IHw9IHB2cjJfd3JpdGVfcmVnaXN0ZXIoaGR3LCAweDkwNTgsIDB4ZmZmZmZmZTgpOyAvKlZQVSBjdHJsKi8KLQlyZXQgfD0gcHZyMl93cml0ZV91MTYoaGR3LCAweDA2MDAsIDApOworCUxPQ0tfVEFLRShoZHctPmN0bF9sb2NrKTsgZG8geworCQloZHctPmNtZF9idWZmZXJbMF0gPSBGWDJDTURfTUVNU0VMOworCQloZHctPmNtZF9idWZmZXJbMV0gPSAwOworCQlyZXQgfD0gcHZyMl9zZW5kX3JlcXVlc3QoaGR3LGhkdy0+Y21kX2J1ZmZlciwyLDAsMCk7CisJfSB3aGlsZSAoMCk7IExPQ0tfR0lWRShoZHctPmN0bF9sb2NrKTsKIAogCWlmIChyZXQpIHsKIAkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCkBAIC0xNDc5LDcgKzE2NTgsNyBAQAogCSAgIGZpcm13YXJlIG5lZWRzIGJlIGxvYWRlZC4gKi8KIAlpbnQgcmVzdWx0OwogCUxPQ0tfVEFLRShoZHctPmN0bF9sb2NrKTsgZG8gewotCQloZHctPmNtZF9idWZmZXJbMF0gPSAweGViOworCQloZHctPmNtZF9idWZmZXJbMF0gPSBGWDJDTURfR0VUX0VFUFJPTV9BRERSOwogCQlyZXN1bHQgPSBwdnIyX3NlbmRfcmVxdWVzdF9leChoZHcsSFoqMSwhMCwKIAkJCQkJICAgaGR3LT5jbWRfYnVmZmVyLDEsCiAJCQkJCSAgIGhkdy0+Y21kX2J1ZmZlciwxKTsKQEAgLTE2MTEsNiArMTc5MCwxNiBAQAogCQljcHRyLT5pbmZvLT5zZXRfdmFsdWUoY3B0cix+MCxjcHRyLT5pbmZvLT5kZWZhdWx0X3ZhbHVlKTsKIAl9CiAKKwkvKiBTZXQgdXAgc3BlY2lhbCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHRlbGV2aXNpb24gYW5kIHJhZGlvCisJICAgZnJlcXVlbmNpZXMgaGVyZS4gIEl0J3Mgbm90IHJlYWxseSBpbXBvcnRhbnQgd2hhdCB0aGVzZSBkZWZhdWx0cworCSAgIGFyZSwgYnV0IEkgc2V0IHRoZW0gdG8gc29tZXRoaW5nIHVzYWJsZSBpbiB0aGUgQ2hpY2FnbyBhcmVhIGp1c3QKKwkgICB0byBtYWtlIGRyaXZlciB0ZXN0aW5nIGEgbGl0dGxlIGVhc2llci4gKi8KKworCS8qIFVTIEJyb2FkY2FzdCBjaGFubmVsIDcgKDE3NS4yNSBNSHopICovCisJaGR3LT5mcmVxVmFsVGVsZXZpc2lvbiA9IDE3NTI1MDAwMEw7CisJLyogMTA0LjMgTUh6LCBhIHVzYWJsZSBGTSBzdGF0aW9uIGZvciBteSBhcmVhICovCisJaGR3LT5mcmVxVmFsUmFkaW8gPSAxMDQzMDAwMDBMOworCiAJLy8gRG8gbm90IHVzZSBwdnIyX3Jlc2V0X2N0bF9lbmRwb2ludHMoKSBoZXJlLiAgSXQgaXMgbm90CiAJLy8gdGhyZWFkLXNhZmUgYWdhaW5zdCB0aGUgbm9ybWFsIHB2cjJfc2VuZF9yZXF1ZXN0KCkgbWVjaGFuaXNtLgogCS8vIChXZSBzaG91bGQgbWFrZSBpdCB0aHJlYWQgc2FmZSkuCkBAIC0xNzUwLDI2ICsxOTM5LDI0IEBACiAJc3RydWN0IHB2cjJfY3RsX2luZm8gKmNpcHRyOwogCiAJaGR3X3R5cGUgPSBkZXZpZCAtIHB2cjJfZGV2aWNlX3RhYmxlOwotCWlmIChoZHdfdHlwZSA+PQotCSAgICBzaXplb2YocHZyMl9kZXZpY2VfbmFtZXMpL3NpemVvZihwdnIyX2RldmljZV9uYW1lc1swXSkpIHsKKwlpZiAoaGR3X3R5cGUgPj0gQVJSQVlfU0laRShwdnIyX2RldmljZV9uYW1lcykpIHsKIAkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCiAJCQkgICAiQm9ndXMgZGV2aWNlIHR5cGUgb2YgJXUgcmVwb3J0ZWQiLGhkd190eXBlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaGR3ID0ga21hbGxvYyhzaXplb2YoKmhkdyksR0ZQX0tFUk5FTCk7CisJaGR3ID0ga3phbGxvYyhzaXplb2YoKmhkdyksR0ZQX0tFUk5FTCk7CiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsInB2cjJfaGR3X2NyZWF0ZTogaGR3PSVwLCB0eXBlIFwiJXNcIiIsCiAJCSAgIGhkdyxwdnIyX2RldmljZV9uYW1lc1toZHdfdHlwZV0pOwogCWlmICghaGR3KSBnb3RvIGZhaWw7Ci0JbWVtc2V0KGhkdywwLHNpemVvZigqaGR3KSk7CisJaGR3LT50dW5lcl9zaWduYWxfc3RhbGUgPSAhMDsKIAljeDIzNDF4X2ZpbGxfZGVmYXVsdHMoJmhkdy0+ZW5jX2N0bF9zdGF0ZSk7CiAKIAloZHctPmNvbnRyb2xfY250ID0gQ1RSTERFRl9DT1VOVDsKIAloZHctPmNvbnRyb2xfY250ICs9IE1QRUdERUZfQ09VTlQ7Ci0JaGR3LT5jb250cm9scyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwdnIyX2N0cmwpICogaGR3LT5jb250cm9sX2NudCwKKwloZHctPmNvbnRyb2xzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHB2cjJfY3RybCkgKiBoZHctPmNvbnRyb2xfY250LAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghaGR3LT5jb250cm9scykgZ290byBmYWlsOwotCW1lbXNldChoZHctPmNvbnRyb2xzLDAsc2l6ZW9mKHN0cnVjdCBwdnIyX2N0cmwpICogaGR3LT5jb250cm9sX2NudCk7CiAJaGR3LT5oZHdfdHlwZSA9IGhkd190eXBlOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgaGR3LT5jb250cm9sX2NudDsgaWR4KyspIHsKIAkJY3B0ciA9IGhkdy0+Y29udHJvbHMgKyBpZHg7CkBAIC0xNzgzLDExICsxOTcwLDkgQEAKIAkJY3B0ci0+aW5mbyA9IGNvbnRyb2xfZGVmcytpZHg7CiAJfQogCS8qIERlZmluZSBhbmQgY29uZmlndXJlIGFkZGl0aW9uYWwgY29udHJvbHMgZnJvbSBjeDIzNDF4IG1vZHVsZS4gKi8KLQloZHctPm1wZWdfY3RybF9pbmZvID0ga21hbGxvYygKKwloZHctPm1wZWdfY3RybF9pbmZvID0ga3phbGxvYygKIAkJc2l6ZW9mKCooaGR3LT5tcGVnX2N0cmxfaW5mbykpICogTVBFR0RFRl9DT1VOVCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoZHctPm1wZWdfY3RybF9pbmZvKSBnb3RvIGZhaWw7Ci0JbWVtc2V0KGhkdy0+bXBlZ19jdHJsX2luZm8sMCwKLQkgICAgICAgc2l6ZW9mKCooaGR3LT5tcGVnX2N0cmxfaW5mbykpICogTVBFR0RFRl9DT1VOVCk7CiAJZm9yIChpZHggPSAwOyBpZHggPCBNUEVHREVGX0NPVU5UOyBpZHgrKykgewogCQljcHRyID0gaGR3LT5jb250cm9scyArIGlkeCArIENUUkxERUZfQ09VTlQ7CiAJCWNpcHRyID0gJihoZHctPm1wZWdfY3RybF9pbmZvW2lkeF0uaW5mbyk7CkBAIC0xODcyLDcgKzIwNTcsOSBAQAogCiAJaGR3LT5lZXByb21fYWRkciA9IC0xOwogCWhkdy0+dW5pdF9udW1iZXIgPSAtMTsKLQloZHctPnY0bF9taW5vcl9udW1iZXIgPSAtMTsKKwloZHctPnY0bF9taW5vcl9udW1iZXJfdmlkZW8gPSAtMTsKKwloZHctPnY0bF9taW5vcl9udW1iZXJfdmJpID0gLTE7CisJaGR3LT52NGxfbWlub3JfbnVtYmVyX3JhZGlvID0gLTE7CiAJaGR3LT5jdGxfd3JpdGVfYnVmZmVyID0ga21hbGxvYyhQVlIyX0NUTF9CVUZGU0laRSxHRlBfS0VSTkVMKTsKIAlpZiAoIWhkdy0+Y3RsX3dyaXRlX2J1ZmZlcikgZ290byBmYWlsOwogCWhkdy0+Y3RsX3JlYWRfYnVmZmVyID0ga21hbGxvYyhQVlIyX0NUTF9CVUZGU0laRSxHRlBfS0VSTkVMKTsKQEAgLTE5MjksMTAgKzIxMTYsMTAgQEAKIAlpZiAoaGR3KSB7CiAJCXVzYl9mcmVlX3VyYihoZHctPmN0bF9yZWFkX3VyYik7CiAJCXVzYl9mcmVlX3VyYihoZHctPmN0bF93cml0ZV91cmIpOwotCQlpZiAoaGR3LT5jdGxfcmVhZF9idWZmZXIpIGtmcmVlKGhkdy0+Y3RsX3JlYWRfYnVmZmVyKTsKLQkJaWYgKGhkdy0+Y3RsX3dyaXRlX2J1ZmZlcikga2ZyZWUoaGR3LT5jdGxfd3JpdGVfYnVmZmVyKTsKLQkJaWYgKGhkdy0+Y29udHJvbHMpIGtmcmVlKGhkdy0+Y29udHJvbHMpOwotCQlpZiAoaGR3LT5tcGVnX2N0cmxfaW5mbykga2ZyZWUoaGR3LT5tcGVnX2N0cmxfaW5mbyk7CisJCWtmcmVlKGhkdy0+Y3RsX3JlYWRfYnVmZmVyKTsKKwkJa2ZyZWUoaGR3LT5jdGxfd3JpdGVfYnVmZmVyKTsKKwkJa2ZyZWUoaGR3LT5jb250cm9scyk7CisJCWtmcmVlKGhkdy0+bXBlZ19jdHJsX2luZm8pOwogCQlrZnJlZShoZHcpOwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTE5ODIsOSArMjE2OSw2IEBACiAJCXB2cjJfc3RyZWFtX2Rlc3Ryb3koaGR3LT52aWRfc3RyZWFtKTsKIAkJaGR3LT52aWRfc3RyZWFtID0gTlVMTDsKIAl9Ci0JaWYgKGhkdy0+YXVkaW9fc3RhdCkgewotCQloZHctPmF1ZGlvX3N0YXQtPmRldGFjaChoZHctPmF1ZGlvX3N0YXQtPmN0eHQpOwotCX0KIAlpZiAoaGR3LT5kZWNvZGVyX2N0cmwpIHsKIAkJaGR3LT5kZWNvZGVyX2N0cmwtPmRldGFjaChoZHctPmRlY29kZXJfY3RybC0+Y3R4dCk7CiAJfQpAQCAtMTk5NywxMCArMjE4MSwxMCBAQAogCQkJdW5pdF9wb2ludGVyc1toZHctPnVuaXRfbnVtYmVyXSA9IE5VTEw7CiAJCX0KIAl9IHdoaWxlICgwKTsgdXAoJnB2cjJfdW5pdF9zZW0pOwotCWlmIChoZHctPmNvbnRyb2xzKSBrZnJlZShoZHctPmNvbnRyb2xzKTsKLQlpZiAoaGR3LT5tcGVnX2N0cmxfaW5mbykga2ZyZWUoaGR3LT5tcGVnX2N0cmxfaW5mbyk7Ci0JaWYgKGhkdy0+c3RkX2RlZnMpIGtmcmVlKGhkdy0+c3RkX2RlZnMpOwotCWlmIChoZHctPnN0ZF9lbnVtX25hbWVzKSBrZnJlZShoZHctPnN0ZF9lbnVtX25hbWVzKTsKKwlrZnJlZShoZHctPmNvbnRyb2xzKTsKKwlrZnJlZShoZHctPm1wZWdfY3RybF9pbmZvKTsKKwlrZnJlZShoZHctPnN0ZF9kZWZzKTsKKwlrZnJlZShoZHctPnN0ZF9lbnVtX25hbWVzKTsKIAlrZnJlZShoZHcpOwogfQogCkBAIC0yMjEwLDEwICsyMzk0LDkgQEAKIAkJY3B0ciA9IGhkdy0+Y29udHJvbHMgKyBpZHg7CiAJCWlmIChjcHRyLT5pbmZvLT5pc19kaXJ0eSA9PSAwKSBjb250aW51ZTsKIAkJaWYgKCFjcHRyLT5pbmZvLT5pc19kaXJ0eShjcHRyKSkgY29udGludWU7Ci0JCWlmICghY29tbWl0X2ZsYWcpIHsKLQkJCWNvbW1pdF9mbGFnID0gITA7Ci0JCX0KKwkJY29tbWl0X2ZsYWcgPSAhMDsKIAorCQlpZiAoIShwdnJ1c2IyX2RlYnVnICYgUFZSMl9UUkFDRV9DVEwpKSBjb250aW51ZTsKIAkJYmNudCA9IHNjbnByaW50ZihidWYsc2l6ZW9mKGJ1ZiksIlwiJXNcIiA8LS0gIiwKIAkJCQkgY3B0ci0+aW5mby0+bmFtZSk7CiAJCXZhbHVlID0gMDsKQEAgLTIyNjMsNiArMjQ0NiwxMyBAQAogCQlzdGFsZV9zdWJzeXNfbWFzayB8PSAoMTw8UFZSMl9TVUJTWVNfQl9FTkNfQ0ZHKTsKIAl9CiAKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSkgeworCQkvKiBwazogSWYgaW5wdXQgY2hhbmdlcyB0byBvciBmcm9tIHJhZGlvLCB0aGVuIHRoZSBlbmNvZGVyCisJCSAgIG5lZWRzIHRvIGJlIHJlc3RhcnRlZCAoZm9yIEVOQ19NVVRFX1ZJREVPIHRvIHdvcmspICovCisJCXN0YWxlX3N1YnN5c19tYXNrIHw9ICgxPDxQVlIyX1NVQlNZU19CX0VOQ19SVU4pOworCX0KKworCiAJaWYgKGhkdy0+c3JhdGVfZGlydHkpIHsKIAkJLyogV3JpdGUgbmV3IHNhbXBsZSByYXRlIGludG8gY29udHJvbCBzdHJ1Y3R1cmUgc2luY2UKIAkJICogdGhlIG1hc3RlciBjb3B5IGlzIHN0YWxlLiAgV2UgbXVzdCB0cmFjayBzcmF0ZQpAQCAtMjM0MywzOSArMjUzMywxMSBAQAogfQogCiAKLS8qIFJldHVybiBiaXQgbWFzayBpbmRpY2F0aW5nIHNpZ25hbCBzdGF0dXMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl9oZHdfZ2V0X3NpZ25hbF9zdGF0dXNfaW50ZXJuYWwoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JdW5zaWduZWQgaW50IG1zayA9IDA7Ci0Jc3dpdGNoIChoZHctPmlucHV0X3ZhbCkgewotCWNhc2UgUFZSMl9DVkFMX0lOUFVUX1RWOgotCWNhc2UgUFZSMl9DVkFMX0lOUFVUX1JBRElPOgotCQlpZiAoaGR3LT5kZWNvZGVyX2N0cmwgJiYKLQkJICAgIGhkdy0+ZGVjb2Rlcl9jdHJsLT50dW5lZChoZHctPmRlY29kZXJfY3RybC0+Y3R4dCkpIHsKLQkJCW1zayB8PSBQVlIyX1NJR05BTF9PSzsKLQkJCWlmIChoZHctPmF1ZGlvX3N0YXQgJiYKLQkJCSAgICBoZHctPmF1ZGlvX3N0YXQtPnN0YXR1cyhoZHctPmF1ZGlvX3N0YXQtPmN0eHQpKSB7Ci0JCQkJaWYgKGhkdy0+ZmxhZ19zdGVyZW8pIHsKLQkJCQkJbXNrIHw9IFBWUjJfU0lHTkFMX1NURVJFTzsKLQkJCQl9Ci0JCQkJaWYgKGhkdy0+ZmxhZ19iaWxpbmd1YWwpIHsKLQkJCQkJbXNrIHw9IFBWUjJfU0lHTkFMX1NBUDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbXNrIHw9IFBWUjJfU0lHTkFMX09LIHwgUFZSMl9TSUdOQUxfU1RFUkVPOwotCX0KLQlyZXR1cm4gbXNrOwotfQotCi0KIGludCBwdnIyX2hkd19pc19oc20oc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJaW50IHJlc3VsdDsKIAlMT0NLX1RBS0UoaGR3LT5jdGxfbG9jayk7IGRvIHsKLQkJaGR3LT5jbWRfYnVmZmVyWzBdID0gMHgwYjsKKwkJaGR3LT5jbWRfYnVmZmVyWzBdID0gRlgyQ01EX0dFVF9VU0JfU1BFRUQ7CiAJCXJlc3VsdCA9IHB2cjJfc2VuZF9yZXF1ZXN0KGhkdywKIAkJCQkJICAgaGR3LT5jbWRfYnVmZmVyLDEsCiAJCQkJCSAgIGhkdy0+Y21kX2J1ZmZlciwxKTsKQEAgLTIzODYsMTQgKzI1NDgsMjUgQEAKIH0KIAogCi0vKiBSZXR1cm4gYml0IG1hc2sgaW5kaWNhdGluZyBzaWduYWwgc3RhdHVzICovCi11bnNpZ25lZCBpbnQgcHZyMl9oZHdfZ2V0X3NpZ25hbF9zdGF0dXMoc3RydWN0IHB2cjJfaGR3ICpoZHcpCisvKiBFeGVjdXRlIHBvbGwgb2YgdHVuZXIgc3RhdHVzICovCit2b2lkIHB2cjJfaGR3X2V4ZWN1dGVfdHVuZXJfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKLQl1bnNpZ25lZCBpbnQgbXNrID0gMDsKIAlMT0NLX1RBS0UoaGR3LT5iaWdfbG9jayk7IGRvIHsKLQkJbXNrID0gcHZyMl9oZHdfZ2V0X3NpZ25hbF9zdGF0dXNfaW50ZXJuYWwoaGR3KTsKKwkJcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOwogCX0gd2hpbGUgKDApOyBMT0NLX0dJVkUoaGR3LT5iaWdfbG9jayk7Ci0JcmV0dXJuIG1zazsKK30KKworCisvKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHR1bmVyICovCitpbnQgcHZyMl9oZHdfZ2V0X3R1bmVyX3N0YXR1cyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgdjRsMl90dW5lciAqdnRwKQoreworCUxPQ0tfVEFLRShoZHctPmJpZ19sb2NrKTsgZG8geworCQlpZiAoaGR3LT50dW5lcl9zaWduYWxfc3RhbGUpIHsKKwkJCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwkJfQorCQltZW1jcHkodnRwLCZoZHctPnR1bmVyX3NpZ25hbF9pbmZvLHNpemVvZihzdHJ1Y3QgdjRsMl90dW5lcikpOworCX0gd2hpbGUgKDApOyBMT0NLX0dJVkUoaGR3LT5iaWdfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMjQ0MiwxNCArMjYxNSwxMiBAQAogCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRklSTVdBUkUsCiAJCQkgICAiUHJlcGFyaW5nIHRvIHN1Y2sgb3V0IENQVSBmaXJtd2FyZSIpOwogCQloZHctPmZ3X3NpemUgPSAweDIwMDA7Ci0JCWhkdy0+ZndfYnVmZmVyID0ga21hbGxvYyhoZHctPmZ3X3NpemUsR0ZQX0tFUk5FTCk7CisJCWhkdy0+ZndfYnVmZmVyID0ga3phbGxvYyhoZHctPmZ3X3NpemUsR0ZQX0tFUk5FTCk7CiAJCWlmICghaGR3LT5md19idWZmZXIpIHsKIAkJCWhkdy0+Zndfc2l6ZSA9IDA7CiAJCQlicmVhazsKIAkJfQogCi0JCW1lbXNldChoZHctPmZ3X2J1ZmZlciwwLGhkdy0+Zndfc2l6ZSk7Ci0KIAkJLyogV2UgaGF2ZSB0byBob2xkIHRoZSBDUFUgZHVyaW5nIGZpcm13YXJlIHVwbG9hZC4gKi8KIAkJcHZyMl9oZHdfY3B1cmVzZXRfYXNzZXJ0KGhkdywxKTsKIApAQCAtMjUxMywxNiArMjY4NCwyOCBAQAogfQogCiAKLWludCBwdnIyX2hkd192NGxfZ2V0X21pbm9yX251bWJlcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK2ludCBwdnIyX2hkd192NGxfZ2V0X21pbm9yX251bWJlcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCQkgIGVudW0gcHZyMl92NGxfdHlwZSBpbmRleCkKIHsKLQlyZXR1cm4gaGR3LT52NGxfbWlub3JfbnVtYmVyOworCXN3aXRjaCAoaW5kZXgpIHsKKwljYXNlIHB2cjJfdjRsX3R5cGVfdmlkZW86IHJldHVybiBoZHctPnY0bF9taW5vcl9udW1iZXJfdmlkZW87CisJY2FzZSBwdnIyX3Y0bF90eXBlX3ZiaTogcmV0dXJuIGhkdy0+djRsX21pbm9yX251bWJlcl92Ymk7CisJY2FzZSBwdnIyX3Y0bF90eXBlX3JhZGlvOiByZXR1cm4gaGR3LT52NGxfbWlub3JfbnVtYmVyX3JhZGlvOworCWRlZmF1bHQ6IHJldHVybiAtMTsKKwl9CiB9CiAKIAotLyogU3RvcmUgdGhlIHY0bCBtaW5vciBkZXZpY2UgbnVtYmVyICovCi12b2lkIHB2cjJfaGR3X3Y0bF9zdG9yZV9taW5vcl9udW1iZXIoc3RydWN0IHB2cjJfaGR3ICpoZHcsaW50IHYpCisvKiBTdG9yZSBhIHY0bCBtaW5vciBkZXZpY2UgbnVtYmVyICovCit2b2lkIHB2cjJfaGR3X3Y0bF9zdG9yZV9taW5vcl9udW1iZXIoc3RydWN0IHB2cjJfaGR3ICpoZHcsCisJCQkJICAgICBlbnVtIHB2cjJfdjRsX3R5cGUgaW5kZXgsaW50IHYpCiB7Ci0JaGR3LT52NGxfbWlub3JfbnVtYmVyID0gdjsKKwlzd2l0Y2ggKGluZGV4KSB7CisJY2FzZSBwdnIyX3Y0bF90eXBlX3ZpZGVvOiBoZHctPnY0bF9taW5vcl9udW1iZXJfdmlkZW8gPSB2OworCWNhc2UgcHZyMl92NGxfdHlwZV92Ymk6IGhkdy0+djRsX21pbm9yX251bWJlcl92YmkgPSB2OworCWNhc2UgcHZyMl92NGxfdHlwZV9yYWRpbzogaGR3LT52NGxfbWlub3JfbnVtYmVyX3JhZGlvID0gdjsKKwlkZWZhdWx0OiBicmVhazsKKwl9CiB9CiAKIApAQCAtMjgwNCw3ICsyOTg3LDcgQEAKIAogCUxPQ0tfVEFLRShoZHctPmN0bF9sb2NrKTsKIAotCWhkdy0+Y21kX2J1ZmZlclswXSA9IDB4MDQ7ICAvKiB3cml0ZSByZWdpc3RlciBwcmVmaXggKi8KKwloZHctPmNtZF9idWZmZXJbMF0gPSBGWDJDTURfUkVHX1dSSVRFOyAgLyogd3JpdGUgcmVnaXN0ZXIgcHJlZml4ICovCiAJUFZSMl9ERUNPTVBPU0VfTEUoaGR3LT5jbWRfYnVmZmVyLDEsZGF0YSk7CiAJaGR3LT5jbWRfYnVmZmVyWzVdID0gMDsKIAloZHctPmNtZF9idWZmZXJbNl0gPSAocmVnID4+IDgpICYgMHhmZjsKQEAgLTI4MjUsNyArMzAwOCw3IEBACiAKIAlMT0NLX1RBS0UoaGR3LT5jdGxfbG9jayk7CiAKLQloZHctPmNtZF9idWZmZXJbMF0gPSAweDA1OyAgLyogcmVhZCByZWdpc3RlciBwcmVmaXggKi8KKwloZHctPmNtZF9idWZmZXJbMF0gPSBGWDJDTURfUkVHX1JFQUQ7ICAvKiByZWFkIHJlZ2lzdGVyIHByZWZpeCAqLwogCWhkdy0+Y21kX2J1ZmZlclsxXSA9IDA7CiAJaGR3LT5jbWRfYnVmZmVyWzJdID0gMDsKIAloZHctPmNtZF9idWZmZXJbM10gPSAwOwpAQCAtMjg0MywzOSArMzAyNiw2IEBACiB9CiAKIAotc3RhdGljIGludCBwdnIyX3dyaXRlX3UxNihzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgdTE2IGRhdGEsIGludCByZXMpCi17Ci0JaW50IHJldDsKLQotCUxPQ0tfVEFLRShoZHctPmN0bF9sb2NrKTsKLQotCWhkdy0+Y21kX2J1ZmZlclswXSA9IChkYXRhID4+IDgpICYgMHhmZjsKLQloZHctPmNtZF9idWZmZXJbMV0gPSBkYXRhICYgMHhmZjsKLQotCXJldCA9IHB2cjJfc2VuZF9yZXF1ZXN0KGhkdywgaGR3LT5jbWRfYnVmZmVyLCAyLCBoZHctPmNtZF9idWZmZXIsIHJlcyk7Ci0KLQlMT0NLX0dJVkUoaGR3LT5jdGxfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgcHZyMl93cml0ZV91OChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgdTggZGF0YSwgaW50IHJlcykKLXsKLQlpbnQgcmV0OwotCi0JTE9DS19UQUtFKGhkdy0+Y3RsX2xvY2spOwotCi0JaGR3LT5jbWRfYnVmZmVyWzBdID0gZGF0YTsKLQotCXJldCA9IHB2cjJfc2VuZF9yZXF1ZXN0KGhkdywgaGR3LT5jbWRfYnVmZmVyLCAxLCBoZHctPmNtZF9idWZmZXIsIHJlcyk7Ci0KLQlMT0NLX0dJVkUoaGR3LT5jdGxfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3JlbmRlcl91c2VsZXNzX3VubG9ja2VkKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewogCWlmICghaGR3LT5mbGFnX29rKSByZXR1cm47CkBAIC0yOTQ5LDcgKzMwOTksNyBAQAogCUxPQ0tfVEFLRShoZHctPmN0bF9sb2NrKTsgZG8gewogCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwiUmVxdWVzdGluZyB1cHJvYyBoYXJkIHJlc2V0Iik7CiAJCWhkdy0+ZmxhZ19vayA9ICEwOwotCQloZHctPmNtZF9idWZmZXJbMF0gPSAweGRkOworCQloZHctPmNtZF9idWZmZXJbMF0gPSBGWDJDTURfREVFUF9SRVNFVDsKIAkJc3RhdHVzID0gcHZyMl9zZW5kX3JlcXVlc3QoaGR3LGhkdy0+Y21kX2J1ZmZlciwxLE5VTEwsMCk7CiAJfSB3aGlsZSAoMCk7IExPQ0tfR0lWRShoZHctPmN0bF9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMjk2MSw3ICszMTExLDcgQEAKIAlpbnQgc3RhdHVzOwogCUxPQ0tfVEFLRShoZHctPmN0bF9sb2NrKTsgZG8gewogCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwiUmVxdWVzdGluZyBwb3dlcnVwIik7Ci0JCWhkdy0+Y21kX2J1ZmZlclswXSA9IDB4ZGU7CisJCWhkdy0+Y21kX2J1ZmZlclswXSA9IEZYMkNNRF9QT1dFUl9PTjsKIAkJc3RhdHVzID0gcHZyMl9zZW5kX3JlcXVlc3QoaGR3LGhkdy0+Y21kX2J1ZmZlciwxLE5VTEwsMCk7CiAJfSB3aGlsZSAoMCk7IExPQ0tfR0lWRShoZHctPmN0bF9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMjk5NCw3ICszMTQ0LDggQEAKIHsKIAlpbnQgc3RhdHVzOwogCUxPQ0tfVEFLRShoZHctPmN0bF9sb2NrKTsgZG8gewotCQloZHctPmNtZF9idWZmZXJbMF0gPSAocnVuRmwgPyAweDM2IDogMHgzNyk7CisJCWhkdy0+Y21kX2J1ZmZlclswXSA9CisJCQkocnVuRmwgPyBGWDJDTURfU1RSRUFNSU5HX09OIDogRlgyQ01EX1NUUkVBTUlOR19PRkYpOwogCQlzdGF0dXMgPSBwdnIyX3NlbmRfcmVxdWVzdChoZHcsaGR3LT5jbWRfYnVmZmVyLDEsTlVMTCwwKTsKIAl9IHdoaWxlICgwKTsgTE9DS19HSVZFKGhkdy0+Y3RsX2xvY2spOwogCWlmICghc3RhdHVzKSB7CkBAIC0zMDkzLDcgKzMyNDQsNyBAQAogewogCWludCByZXN1bHQ7CiAJTE9DS19UQUtFKGhkdy0+Y3RsX2xvY2spOyBkbyB7Ci0JCWhkdy0+Y21kX2J1ZmZlclswXSA9IDB4ZWI7CisJCWhkdy0+Y21kX2J1ZmZlclswXSA9IEZYMkNNRF9HRVRfRUVQUk9NX0FERFI7CiAJCXJlc3VsdCA9IHB2cjJfc2VuZF9yZXF1ZXN0KGhkdywKIAkJCQkJICAgaGR3LT5jbWRfYnVmZmVyLDEsCiAJCQkJCSAgIGhkdy0+Y21kX2J1ZmZlciwxKTsKQEAgLTMxMDUsNyArMzI1Niw3IEBACiAKIAogaW50IHB2cjJfaGR3X3JlZ2lzdGVyX2FjY2VzcyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKLQkJCSAgICAgdTMyIGNoaXBfaWQsdW5zaWduZWQgbG9uZyByZWdfaWQsCisJCQkgICAgIHUzMiBjaGlwX2lkLCB1NjQgcmVnX2lkLAogCQkJICAgICBpbnQgc2V0RmwsdTMyICp2YWxfcHRyKQogewogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKQEAgLTMxMTUsNiArMzI2Niw4IEBACiAJaW50IHN0YXQgPSAwOwogCWludCBva0ZsID0gMDsKIAorCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgcmV0dXJuIC1FUEVSTTsKKwogCXJlcS5pMmNfaWQgPSBjaGlwX2lkOwogCXJlcS5yZWcgPSByZWdfaWQ7CiAJaWYgKHNldEZsKSByZXEudmFsID0gKnZhbF9wdHI7CkBAIC0zMTIzLDggKzMyNzYsOCBAQAogCQkJY3AgPSBsaXN0X2VudHJ5KGl0ZW0sc3RydWN0IHB2cjJfaTJjX2NsaWVudCxsaXN0KTsKIAkJCWlmIChjcC0+Y2xpZW50LT5kcml2ZXItPmlkICE9IGNoaXBfaWQpIGNvbnRpbnVlOwogCQkJc3RhdCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoCi0JCQkJY3AsKHNldEZsID8gVklESU9DX0lOVF9TX1JFR0lTVEVSIDoKLQkJCQkgICAgVklESU9DX0lOVF9HX1JFR0lTVEVSKSwmcmVxKTsKKwkJCQljcCwoc2V0RmwgPyBWSURJT0NfREJHX1NfUkVHSVNURVIgOgorCQkJCSAgICBWSURJT0NfREJHX0dfUkVHSVNURVIpLCZyZXEpOwogCQkJaWYgKCFzZXRGbCkgKnZhbF9wdHIgPSByZXEudmFsOwogCQkJb2tGbCA9ICEwOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCmluZGV4IDI5OTc5YmIuLjU2NmE4ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCkBAIC00NCwxMiArNDQsNiBAQAogI2RlZmluZSBQVlIyX0NWQUxfSU5QVVRfQ09NUE9TSVRFIDIKICNkZWZpbmUgUFZSMl9DVkFMX0lOUFVUX1JBRElPIDMKIAotLyogVmFsdWVzIHRoYXQgcHZyMl9oZHdfZ2V0X3NpZ25hbF9zdGF0dXMoKSByZXR1cm5zICovCi0jZGVmaW5lIFBWUjJfU0lHTkFMX09LICAgICAweDAwMDEKLSNkZWZpbmUgUFZSMl9TSUdOQUxfU1RFUkVPIDB4MDAwMgotI2RlZmluZSBQVlIyX1NJR05BTF9TQVAgICAgMHgwMDA0Ci0KLQogLyogU3Vic3lzdGVtIGRlZmluaXRpb25zIC0gdGhlc2UgYXJlIHZhcmlvdXMgcGllY2VzIHRoYXQgY2FuIGJlCiAgICBpbmRlcGVuZGVudGx5IHN0b3BwZWQgLyBzdGFydGVkLiAgVXN1YWxseSB5b3UgZG9uJ3Qgd2FudCB0byBtZXNzIHdpdGgKICAgIHRoaXMgZGlyZWN0bHkgKGxldCB0aGUgZHJpdmVyIGhhbmRsZSB0aGluZ3MgaXRzZWxmKSwgYnV0IGl0IGlzIHVzZWZ1bApAQCAtNzIsMTAgKzY2LDE3IEBACiAJUFZSMl9TVUJTWVNfUlVOX0FMTCApCiAKIGVudW0gcHZyMl9jb25maWcgewotCXB2cjJfY29uZmlnX2VtcHR5LAotCXB2cjJfY29uZmlnX21wZWcsCi0JcHZyMl9jb25maWdfdmJpLAotCXB2cjJfY29uZmlnX3JhZGlvLAorCXB2cjJfY29uZmlnX2VtcHR5LCAgICAvKiBObyBjb25maWd1cmF0aW9uICovCisJcHZyMl9jb25maWdfbXBlZywgICAgIC8qIEVuY29kZWQgLyBjb21wcmVzc2VkIHZpZGVvICovCisJcHZyMl9jb25maWdfdmJpLCAgICAgIC8qIFN0YW5kYXJkIHZiaSBpbmZvICovCisJcHZyMl9jb25maWdfcGNtLCAgICAgIC8qIEF1ZGlvIHJhdyBwY20gc3RyZWFtICovCisJcHZyMl9jb25maWdfcmF3dmlkZW8sIC8qIFZpZGVvIHJhdyBmcmFtZXMgKi8KK307CisKK2VudW0gcHZyMl92NGxfdHlwZSB7CisJcHZyMl92NGxfdHlwZV92aWRlbywKKwlwdnIyX3Y0bF90eXBlX3ZiaSwKKwlwdnIyX3Y0bF90eXBlX3JhZGlvLAogfTsKIAogY29uc3QgY2hhciAqcHZyMl9jb25maWdfZ2V0X25hbWUoZW51bSBwdnIyX2NvbmZpZyk7CkBAIC0xNDgsOCArMTQ5LDExIEBACiAvKiBSZXR1cm4gbmFtZSBmb3IgdGhpcyBkcml2ZXIgaW5zdGFuY2UgKi8KIGNvbnN0IGNoYXIgKnB2cjJfaGR3X2dldF9kcml2ZXJfbmFtZShzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKLS8qIFJldHVybiBQVlIyX1NJR05BTF9YWFhYIGJpdCBtYXNrIGluZGljYXRpbmcgc2lnbmFsIHN0YXR1cyAqLwotdW5zaWduZWQgaW50IHB2cjJfaGR3X2dldF9zaWduYWxfc3RhdHVzKHN0cnVjdCBwdnIyX2hkdyAqKTsKKy8qIE1hcmsgdHVuZXIgc3RhdHVzIHN0YWxlIHNvIHRoYXQgaXQgd2lsbCBiZSByZS1mZXRjaGVkICovCit2b2lkIHB2cjJfaGR3X2V4ZWN1dGVfdHVuZXJfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKik7CisKKy8qIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHVuZXIgKi8KK2ludCBwdnIyX2hkd19nZXRfdHVuZXJfc3RhdHVzKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCB2NGwyX3R1bmVyICopOwogCiAvKiBRdWVyeSBkZXZpY2UgYW5kIHNlZSBpZiBpdCB0aGlua3MgaXQgaXMgb24gYSBoaWdoLXNwZWVkIFVTQiBsaW5rICovCiBpbnQgcHZyMl9oZHdfaXNfaHNtKHN0cnVjdCBwdnIyX2hkdyAqKTsKQEAgLTIwNSwxMSArMjA5LDEyIEBACiBpbnQgcHZyMl9oZHdfY3B1ZndfZ2V0KHN0cnVjdCBwdnIyX2hkdyAqLHVuc2lnbmVkIGludCBvZmZzLAogCQkgICAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpOwogCi0vKiBSZXRyaWV2ZSBwcmV2aW91c2x5IHN0b3JlZCB2NGwgbWlub3IgZGV2aWNlIG51bWJlciAqLwotaW50IHB2cjJfaGR3X3Y0bF9nZXRfbWlub3JfbnVtYmVyKHN0cnVjdCBwdnIyX2hkdyAqKTsKKy8qIFJldHJpZXZlIGEgcHJldmlvdXNseSBzdG9yZWQgdjRsIG1pbm9yIGRldmljZSBudW1iZXIgKi8KK2ludCBwdnIyX2hkd192NGxfZ2V0X21pbm9yX251bWJlcihzdHJ1Y3QgcHZyMl9oZHcgKixlbnVtIHB2cjJfdjRsX3R5cGUgaW5kZXgpOwogCi0vKiBTdG9yZSB0aGUgdjRsIG1pbm9yIGRldmljZSBudW1iZXIgKi8KLXZvaWQgcHZyMl9oZHdfdjRsX3N0b3JlX21pbm9yX251bWJlcihzdHJ1Y3QgcHZyMl9oZHcgKixpbnQpOworLyogU3RvcmUgYSB2NGwgbWlub3IgZGV2aWNlIG51bWJlciAqLwordm9pZCBwdnIyX2hkd192NGxfc3RvcmVfbWlub3JfbnVtYmVyKHN0cnVjdCBwdnIyX2hkdyAqLAorCQkJCSAgICAgZW51bSBwdnIyX3Y0bF90eXBlIGluZGV4LGludCk7CiAKIC8qIERpcmVjdCByZWFkL3dyaXRlIGFjY2VzcyB0byBjaGlwJ3MgcmVnaXN0ZXJzOgogICAgY2hpcF9pZCAtIHVuaXF1ZSBpZCBvZiBjaGlwIChlLmcuIEkyQ19EUklWRVJEX3h4eHgpCkBAIC0yMTcsNyArMjIyLDcgQEAKICAgIHNldEZsICAgLSB0cnVlIHRvIHNldCB0aGUgcmVnaXN0ZXIsIGZhbHNlIHRvIHJlYWQgaXQKICAgIHZhbF9wdHIgLSBzdG9yYWdlIGxvY2F0aW9uIGZvciBzb3VyY2UgLyByZXN1bHQuICovCiBpbnQgcHZyMl9oZHdfcmVnaXN0ZXJfYWNjZXNzKHN0cnVjdCBwdnIyX2hkdyAqLAotCQkJICAgICB1MzIgY2hpcF9pZCx1bnNpZ25lZCBsb25nIHJlZ19pZCwKKwkJCSAgICAgdTMyIGNoaXBfaWQsdTY0IHJlZ19pZCwKIAkJCSAgICAgaW50IHNldEZsLHUzMiAqdmFsX3B0cik7CiAKIC8qIFRoZSBmb2xsb3dpbmcgZW50cnkgcG9pbnRzIGFyZSBhbGwgbG93ZXIgbGV2ZWwgdGhpbmdzIHlvdSBub3JtYWxseSBkb24ndApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMKaW5kZXggMDUxMjE2Ni4uNDk3NzM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jCkBAIC0zMywxNSArMzMsMTcgQEAKICNkZWZpbmUgdHJhY2VfaTJjKC4uLikgcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQyxfX1ZBX0FSR1NfXykKIAogI2RlZmluZSBPUF9TVEFOREFSRCAwCi0jZGVmaW5lIE9QX0JDU0ggMQotI2RlZmluZSBPUF9WT0xVTUUgMgotI2RlZmluZSBPUF9GUkVRIDMKLSNkZWZpbmUgT1BfQVVESU9SQVRFIDQKLSNkZWZpbmUgT1BfU0laRSA1Ci0jZGVmaW5lIE9QX0xPRyA2CisjZGVmaW5lIE9QX0FVRElPTU9ERSAxCisjZGVmaW5lIE9QX0JDU0ggMgorI2RlZmluZSBPUF9WT0xVTUUgMworI2RlZmluZSBPUF9GUkVRIDQKKyNkZWZpbmUgT1BfQVVESU9SQVRFIDUKKyNkZWZpbmUgT1BfU0laRSA2CisjZGVmaW5lIE9QX0xPRyA3CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKiBjb25zdCBvcHNbXSA9IHsKIAlbT1BfU1RBTkRBUkRdID0gJnB2cjJfaTJjX29wX3Y0bDJfc3RhbmRhcmQsCisJW09QX0FVRElPTU9ERV0gPSAmcHZyMl9pMmNfb3BfdjRsMl9hdWRpb21vZGUsCiAJW09QX0JDU0hdID0gJnB2cjJfaTJjX29wX3Y0bDJfYmNzaCwKIAlbT1BfVk9MVU1FXSA9ICZwdnIyX2kyY19vcF92NGwyX3ZvbHVtZSwKIAlbT1BfRlJFUV0gPSAmcHZyMl9pMmNfb3BfdjRsMl9mcmVxdWVuY3ksCkBAIC01NCwxMSArNTYsMTMgQEAKIAlpbnQgaWQ7CiAJaWQgPSBjcC0+Y2xpZW50LT5kcml2ZXItPmlkOwogCWNwLT5jdGxfbWFzayA9ICgoMSA8PCBPUF9TVEFOREFSRCkgfAorCQkJKDEgPDwgT1BfQVVESU9NT0RFKSB8CiAJCQkoMSA8PCBPUF9CQ1NIKSB8CiAJCQkoMSA8PCBPUF9WT0xVTUUpIHwKIAkJCSgxIDw8IE9QX0ZSRVEpIHwKIAkJCSgxIDw8IE9QX1NJWkUpIHwKIAkJCSgxIDw8IE9QX0xPRykpOworCWNwLT5zdGF0dXNfcG9sbCA9IHB2cjJfdjRsMl9jbWRfc3RhdHVzX3BvbGw7CiAKIAlpZiAoaWQgPT0gSTJDX0RSSVZFUklEX01TUDM0MDApIHsKIAkJaWYgKHB2cjJfaTJjX21zcDM0MDBfc2V0dXAoaGR3LGNwKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYwppbmRleCAwNWVhMTdhLi5jNjUwZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYwpAQCAtMjQsMjIgKzI0LDI2IEBACiAjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiBzdGF0aWMgdm9pZCBzZXRfc3RhbmRhcmQoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7Ci0JdjRsMl9zdGRfaWQgdnM7Ci0JdnMgPSBoZHctPnN0ZF9tYXNrX2N1cjsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsCi0JCSAgICJpMmMgdjRsMiBzZXRfc3RhbmRhcmQoMHglbGx4KSIsKGxvbmcgbG9uZyB1bnNpZ25lZCl2cyk7CisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBzZXRfc3RhbmRhcmQiKTsKIAotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19TVEQsJnZzKTsKKwlpZiAoaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPKSB7CisJCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxBVURDX1NFVF9SQURJTyxOVUxMKTsKKwl9IGVsc2UgeworCQl2NGwyX3N0ZF9pZCB2czsKKwkJdnMgPSBoZHctPnN0ZF9tYXNrX2N1cjsKKwkJcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX1NURCwmdnMpOworCX0KKwloZHctPnR1bmVyX3NpZ25hbF9zdGFsZSA9ICEwOwogfQogCiAKIHN0YXRpYyBpbnQgY2hlY2tfc3RhbmRhcmQoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7Ci0JcmV0dXJuIGhkdy0+c3RkX2RpcnR5ICE9IDA7CisJcmV0dXJuIChoZHctPmlucHV0X2RpcnR5ICE9IDApIHx8IChoZHctPnN0ZF9kaXJ0eSAhPSAwKTsKIH0KIAogCkBAIC0xMzYsMTYgKzE0MCw1MyBAQAogfTsKIAogCitzdGF0aWMgdm9pZCBzZXRfYXVkaW9tb2RlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQoreworCXN0cnVjdCB2NGwyX3R1bmVyIHZ0OworCW1lbXNldCgmdnQsMCxzaXplb2YodnQpKTsKKwl2dC5hdWRtb2RlID0gaGR3LT5hdWRpb21vZGVfdmFsOworCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19UVU5FUiwmdnQpOworfQorCisKK3N0YXRpYyBpbnQgY2hlY2tfYXVkaW9tb2RlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQoreworCXJldHVybiAoaGR3LT5pbnB1dF9kaXJ0eSB8fAorCQloZHctPmF1ZGlvbW9kZV9kaXJ0eSk7Cit9CisKKworY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfYXVkaW9tb2RlID0geworCS5jaGVjayA9IGNoZWNrX2F1ZGlvbW9kZSwKKwkudXBkYXRlID0gc2V0X2F1ZGlvbW9kZSwKKwkubmFtZSA9ICJ2NGwyX2F1ZGlvbW9kZSIsCit9OworCisKIHN0YXRpYyB2b2lkIHNldF9mcmVxdWVuY3koc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJdW5zaWduZWQgbG9uZyBmdjsKIAlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgZnJlcTsKLQlmdiA9IGhkdy0+ZnJlcVZhbDsKKwlmdiA9IHB2cjJfaGR3X2dldF9jdXJfZnJlcShoZHcpOwogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgc2V0X2ZyZXEoJWx1KSIsZnYpOworCWlmIChoZHctPnR1bmVyX3NpZ25hbF9zdGFsZSkgeworCQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJfQogCW1lbXNldCgmZnJlcSwwLHNpemVvZihmcmVxKSk7Ci0JZnJlcS5mcmVxdWVuY3kgPSBmdiAvIDYyNTAwOworCWlmIChoZHctPnR1bmVyX3NpZ25hbF9pbmZvLmNhcGFiaWxpdHkgJiBWNEwyX1RVTkVSX0NBUF9MT1cpIHsKKwkJLy8gKChmdiAqIDEwMDApIC8gNjI1MDApCisJCWZyZXEuZnJlcXVlbmN5ID0gKGZ2ICogMikgLyAxMjU7CisJfSBlbHNlIHsKKwkJZnJlcS5mcmVxdWVuY3kgPSBmdiAvIDYyNTAwOworCX0KKwkvKiB0dW5lci1jb3JlIGN1cnJlbnRseSBkb2Vzbid0IHNlZW0gdG8gY2FyZSBhYm91dCB0aGlzLCBidXQKKwkgICBsZXQncyBzZXQgaXQgYW55d2F5IGZvciBjb21wbGV0ZW5lc3MuICovCisJaWYgKGhkdy0+aW5wdXRfdmFsID09IFBWUjJfQ1ZBTF9JTlBVVF9SQURJTykgeworCQlmcmVxLnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCX0gZWxzZSB7CisJCWZyZXEudHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCX0KIAlmcmVxLnR1bmVyID0gMDsKLQlmcmVxLnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfRlJFUVVFTkNZLCZmcmVxKTsKIH0KIApAQCAtMjIxLDYgKzI2MiwxMiBAQAogfQogCiAKK3ZvaWQgcHZyMl92NGwyX2NtZF9zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKK3sKKwlwdnIyX2kyY19jbGllbnRfY21kKGNwLFZJRElPQ19HX1RVTkVSLCZjcC0+aGR3LT50dW5lcl9zaWduYWxfaW5mbyk7Cit9CisKKwogLyoKICAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKICAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCmluZGV4IGVjYWJkZGIuLmM4MzhkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCkBAIC0yNiwxMyArMjYsMTYgQEAKICNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9zdGFuZGFyZDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9yYWRpbzsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9iY3NoOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3ZvbHVtZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9mcmVxdWVuY3k7CiBleHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfc2l6ZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9hdWRpb21vZGU7CiBleHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfbG9nOwogCiB2b2lkIHB2cjJfdjRsMl9jbWRfc3RyZWFtKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKixpbnQpOwordm9pZCBwdnIyX3Y0bDJfY21kX3N0YXR1c19wb2xsKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7CiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfQ01EX1Y0TDJfSCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwppbmRleCA2MmE3Y2ZjLi41OGZjM2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCiAjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCisjaW5jbHVkZSAicHZydXNiMi1meDItY21kLmgiCiAKICNkZWZpbmUgdHJhY2VfaTJjKC4uLikgcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQyxfX1ZBX0FSR1NfXykKIApAQCAtNjYsNyArNjcsNyBAQAogCW1lbXNldChoZHctPmNtZF9idWZmZXIsIDAsIHNpemVvZihoZHctPmNtZF9idWZmZXIpKTsKIAogCS8qIFNldCB1cCBjb21tYW5kIGJ1ZmZlciBmb3IgYW4gSTJDIHdyaXRlICovCi0JaGR3LT5jbWRfYnVmZmVyWzBdID0gMHgwODsgICAgICAvKiB3cml0ZSBwcmVmaXggKi8KKwloZHctPmNtZF9idWZmZXJbMF0gPSBGWDJDTURfSTJDX1dSSVRFOyAgICAgIC8qIHdyaXRlIHByZWZpeCAqLwogCWhkdy0+Y21kX2J1ZmZlclsxXSA9IGkyY19hZGRyOyAgLyogaTJjIGFkZHIgb2YgY2hpcCAqLwogCWhkdy0+Y21kX2J1ZmZlclsyXSA9IGxlbmd0aDsgICAgLyogbGVuZ3RoIG9mIHdoYXQgZm9sbG93cyAqLwogCWlmIChsZW5ndGgpIG1lbWNweShoZHctPmNtZF9idWZmZXIgKyAzLCBkYXRhLCBsZW5ndGgpOwpAQCAtMTI4LDcgKzEyOSw3IEBACiAJbWVtc2V0KGhkdy0+Y21kX2J1ZmZlciwgMCwgc2l6ZW9mKGhkdy0+Y21kX2J1ZmZlcikpOwogCiAJLyogU2V0IHVwIGNvbW1hbmQgYnVmZmVyIGZvciBhbiBJMkMgd3JpdGUgZm9sbG93ZWQgYnkgYSByZWFkICovCi0JaGR3LT5jbWRfYnVmZmVyWzBdID0gMHgwOTsgIC8qIHJlYWQgcHJlZml4ICovCisJaGR3LT5jbWRfYnVmZmVyWzBdID0gRlgyQ01EX0kyQ19SRUFEOyAgLyogcmVhZCBwcmVmaXggKi8KIAloZHctPmNtZF9idWZmZXJbMV0gPSBkbGVuOyAgLyogYXJnIGxlbmd0aCAqLwogCWhkdy0+Y21kX2J1ZmZlclsyXSA9IHJsZW47ICAvKiBhbnN3ZXIgbGVuZ3RoLiBEZXZpY2Ugd2lsbCBzZW5kIG9uZQogCQkJCSAgICAgICBtb3JlIGJ5dGUgKHN0YXR1cykuICovCkBAIC0yMjEsNyArMjIyLDcgQEAKIAogCS8qIElzc3VlIGEgY29tbWFuZCB0byB0aGUgRlgyIHRvIHJlYWQgdGhlIElSIHJlY2VpdmVyLiAqLwogCUxPQ0tfVEFLRShoZHctPmN0bF9sb2NrKTsgZG8gewotCQloZHctPmNtZF9idWZmZXJbMF0gPSAweGVjOworCQloZHctPmNtZF9idWZmZXJbMF0gPSBGWDJDTURfR0VUX0lSX0NPREU7CiAJCXN0YXQgPSBwdnIyX3NlbmRfcmVxdWVzdChoZHcsCiAJCQkJCSBoZHctPmNtZF9idWZmZXIsMSwKIAkJCQkJIGhkdy0+Y21kX2J1ZmZlciw0KTsKQEAgLTU5MCw2ICs1OTEsMzMgQEAKIAogI2RlZmluZSBCVUZTSVpFIDUwMAogCisKK3ZvaWQgcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVtOworCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwOworCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0cCA9ICZoZHctPnR1bmVyX3NpZ25hbF9pbmZvOworCQltZW1zZXQodnRwLDAsc2l6ZW9mKCp2dHApKTsKKwkJbGlzdF9mb3JfZWFjaChpdGVtLCZoZHctPmkyY19jbGllbnRzKSB7CisJCQljcCA9IGxpc3RfZW50cnkoaXRlbSxzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50LGxpc3QpOworCQkJaWYgKCFjcC0+ZGV0ZWN0ZWRfZmxhZykgY29udGludWU7CisJCQlpZiAoIWNwLT5zdGF0dXNfcG9sbCkgY29udGludWU7CisJCQljcC0+c3RhdHVzX3BvbGwoY3ApOworCQl9CisJCWhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlID0gMDsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgc3RhdHVzIHBvbGwiCisJCQkgICAiIHR5cGU9JXUgc3RyZW5ndGg9JXUgYXVkaW89MHgleCBjYXA9MHgleCIKKwkJCSAgICIgbG93PSV1IGhpPSV1IiwKKwkJCSAgIHZ0cC0+dHlwZSwKKwkJCSAgIHZ0cC0+c2lnbmFsLHZ0cC0+cnhzdWJjaGFucyx2dHAtPmNhcGFiaWxpdHksCisJCQkgICB2dHAtPnJhbmdlbG93LHZ0cC0+cmFuZ2VoaWdoKTsKKwl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOworfQorCisKKy8qIElzc3VlIHZhcmlvdXMgSTJDIG9wZXJhdGlvbnMgdG8gYnJpbmcgY2hpcC1sZXZlbCBkcml2ZXJzIGludG8gc3luYyB3aXRoCisgICBzdGF0ZSBzdG9yZWQgaW4gdGhpcyBkcml2ZXIuICovCiB2b2lkIHB2cjJfaTJjX2NvcmVfc3luYyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAl1bnNpZ25lZCBsb25nIG1zazsKQEAgLTg3MCwxMiArODk4LDEyIEBACiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSAoc3RydWN0IHB2cjJfaGR3ICopKGNsaWVudC0+YWRhcHRlci0+YWxnb19kYXRhKTsKIAlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcDsKIAlpbnQgZmwgPSAhKGhkdy0+aTJjX3BlbmRfdHlwZXMgJiBQVlIyX0kyQ19QRU5EX0FMTCk7Ci0JY3AgPSBrbWFsbG9jKHNpemVvZigqY3ApLEdGUF9LRVJORUwpOworCWNwID0ga3phbGxvYyhzaXplb2YoKmNwKSxHRlBfS0VSTkVMKTsKIAl0cmFjZV9pMmMoImkyY19hdHRhY2ggW2NsaWVudD0lcyBAIDB4JXggY3R4dD0lcF0iLAogCQkgIGNsaWVudC0+bmFtZSwKIAkJICBjbGllbnQtPmFkZHIsY3ApOwogCWlmICghY3ApIHJldHVybiAtRU5PTUVNOwotCW1lbXNldChjcCwwLHNpemVvZigqY3ApKTsKKwljcC0+aGR3ID0gaGR3OwogCUlOSVRfTElTVF9IRUFEKCZjcC0+bGlzdCk7CiAJY3AtPmNsaWVudCA9IGNsaWVudDsKIAltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7CkBAIC05NDgsOCArOTc2LDcgQEAKIAlwcmludGsoIiVzOiBpMmMgc2NhbiBiZWdpbm5pbmdcbiIsaGR3LT5uYW1lKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKIAkJbXNnWzBdLmFkZHIgPSBpOwotCQlyYyA9IGkyY190cmFuc2ZlcigmaGR3LT5pMmNfYWRhcCxtc2csCi0JCQkJICBzaXplb2YobXNnKS9zaXplb2YobXNnWzBdKSk7CisJCXJjID0gaTJjX3RyYW5zZmVyKCZoZHctPmkyY19hZGFwLG1zZywgQVJSQVlfU0laRShtc2cpKTsKIAkJaWYgKHJjICE9IDEpIGNvbnRpbnVlOwogCQlwcmludGsoIiVzOiBpMmMgc2NhbjogZm91bmQgZGV2aWNlIEAgMHgleFxuIixoZHctPm5hbWUsaSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKaW5kZXggNmQ3ZTI1Mi4uYmQwODA3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5oCkBAIC0zNSwxMCArMzUsMTIgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyICpoYW5kbGVyOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcHZyMl9oZHcgKmhkdzsKIAlpbnQgZGV0ZWN0ZWRfZmxhZzsKIAlpbnQgcmVjdl9lbmFibGU7CiAJdW5zaWduZWQgbG9uZyBwZW5kX21hc2s7CiAJdW5zaWduZWQgbG9uZyBjdGxfbWFzazsKKwl2b2lkICgqc3RhdHVzX3BvbGwpKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7CiB9OwogCiBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlciB7CkBAIC02Nyw2ICs2OSw3IEBACiAKIGludCBwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlKHN0cnVjdCBwdnIyX2hkdyAqKTsKIHZvaWQgcHZyMl9pMmNfY29yZV9zeW5jKHN0cnVjdCBwdnIyX2hkdyAqKTsKK3ZvaWQgcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKik7CiB1bnNpZ25lZCBpbnQgcHZyMl9pMmNfcmVwb3J0KHN0cnVjdCBwdnIyX2hkdyAqLGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgbWF4bGVuKTsKICNkZWZpbmUgUFZSMl9JMkNfREVUQUlMX0RFQlVHICAgMHgwMDAxCiAjZGVmaW5lIFBWUjJfSTJDX0RFVEFJTF9IQU5ETEVSIDB4MDAwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmMKaW5kZXggNTdmYjMyMC4uY2UzYzg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5jCkBAIC00NzQsOSArNDc0LDggQEAKIHN0cnVjdCBwdnIyX3N0cmVhbSAqcHZyMl9zdHJlYW1fY3JlYXRlKHZvaWQpCiB7CiAJc3RydWN0IHB2cjJfc3RyZWFtICpzcDsKLQlzcCA9IGttYWxsb2Moc2l6ZW9mKCpzcCksR0ZQX0tFUk5FTCk7CisJc3AgPSBremFsbG9jKHNpemVvZigqc3ApLEdGUF9LRVJORUwpOwogCWlmICghc3ApIHJldHVybiBzcDsKLQltZW1zZXQoc3AsMCxzaXplb2YoKnNwKSk7CiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsInB2cjJfc3RyZWFtX2NyZWF0ZTogc3A9JXAiLHNwKTsKIAlwdnIyX3N0cmVhbV9pbml0KHNwKTsKIAlyZXR1cm4gc3A7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5jCmluZGV4IGI3MWY5YTkuLmY3ODI0MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5jCkBAIC04NywxMCArODcsOSBAQAogc3RydWN0IHB2cjJfaW9yZWFkICpwdnIyX2lvcmVhZF9jcmVhdGUodm9pZCkKIHsKIAlzdHJ1Y3QgcHZyMl9pb3JlYWQgKmNwOwotCWNwID0ga21hbGxvYyhzaXplb2YoKmNwKSxHRlBfS0VSTkVMKTsKKwljcCA9IGt6YWxsb2Moc2l6ZW9mKCpjcCksR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcCkgcmV0dXJuIE5VTEw7CiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX1NUUlVDVCwicHZyMl9pb3JlYWRfY3JlYXRlIGlkPSVwIixjcCk7Ci0JbWVtc2V0KGNwLDAsc2l6ZW9mKCpjcCkpOwogCWlmIChwdnIyX2lvcmVhZF9pbml0KGNwKSA8IDApIHsKIAkJa2ZyZWUoY3ApOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN0ZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3RkLmMKaW5kZXggZjk1YzU5OC4uODFkZTI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3RkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3RkLmMKQEAgLTc4LDE0ICs3OCwxNCBAQAogI2RlZmluZSBDU1REX0FMTCAoQ1NURF9QQUx8Q1NURF9OVFNDfENTVERfU0VDQU0pCiAKIC8qIE1hcHBpbmcgb2Ygc3RhbmRhcmQgYml0cyB0byBjb2xvciBzeXN0ZW0gKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3Qgc3RkX25hbWUgc3RkX2dyb3Vwc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzdGRfbmFtZSBzdGRfZ3JvdXBzW10gPSB7CiAJeyJQQUwiLENTVERfUEFMfSwKIAl7Ik5UU0MiLENTVERfTlRTQ30sCiAJeyJTRUNBTSIsQ1NURF9TRUNBTX0sCiB9OwogCiAvKiBNYXBwaW5nIG9mIHN0YW5kYXJkIGJpdHMgdG8gbW9kdWxhdGlvbiBzeXN0ZW0gKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3Qgc3RkX25hbWUgc3RkX2l0ZW1zW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN0ZF9uYW1lIHN0ZF9pdGVtc1tdID0gewogCXsiQiIsVFNURF9CfSwKIAl7IkIxIixUU1REX0IxfSwKIAl7IkQiLFRTVERfRH0sCkBAIC0xNDEsMTAgKzE0MSw4IEBACiAJCQljbnQgPSAwOwogCQkJd2hpbGUgKChjbnQgPCBidWZTaXplKSAmJiAoYnVmUHRyW2NudF0gIT0gJy0nKSkgY250Kys7CiAJCQlpZiAoY250ID49IGJ1ZlNpemUpIHJldHVybiAwOyAvLyBObyBtb3JlIGNoYXJhY3RlcnMKLQkJCXNwID0gZmluZF9zdGRfbmFtZSgKLQkJCQlzdGRfZ3JvdXBzLAotCQkJCXNpemVvZihzdGRfZ3JvdXBzKS9zaXplb2Yoc3RkX2dyb3Vwc1swXSksCi0JCQkJYnVmUHRyLGNudCk7CisJCQlzcCA9IGZpbmRfc3RkX25hbWUoc3RkX2dyb3VwcywgQVJSQVlfU0laRShzdGRfZ3JvdXBzKSwKKwkJCQkJICAgYnVmUHRyLGNudCk7CiAJCQlpZiAoIXNwKSByZXR1cm4gMDsgLy8gSWxsZWdhbCBjb2xvciBzeXN0ZW0gbmFtZQogCQkJY250Kys7CiAJCQlidWZQdHIgKz0gY250OwpAQCAtMTYzLDggKzE2MSw3IEBACiAJCQlpZiAoY2ggPT0gJy8nKSBicmVhazsKIAkJCWNudCsrOwogCQl9Ci0JCXNwID0gZmluZF9zdGRfbmFtZShzdGRfaXRlbXMsCi0JCQkJICAgc2l6ZW9mKHN0ZF9pdGVtcykvc2l6ZW9mKHN0ZF9pdGVtc1swXSksCisJCXNwID0gZmluZF9zdGRfbmFtZShzdGRfaXRlbXMsIEFSUkFZX1NJWkUoc3RkX2l0ZW1zKSwKIAkJCQkgICBidWZQdHIsY250KTsKIAkJaWYgKCFzcCkgcmV0dXJuIDA7IC8vIElsbGVnYWwgbW9kdWxhdGlvbiBzeXN0ZW0gSUQKIAkJdCA9IHNwLT5pZCAmIGNtc2s7CkBAIC0xODksMTQgKzE4NiwxMCBAQAogCXVuc2lnbmVkIGludCBjMSxjMjsKIAljZmwgPSAwOwogCWMxID0gMDsKLQlmb3IgKGlkeDEgPSAwOwotCSAgICAgaWR4MSA8IHNpemVvZihzdGRfZ3JvdXBzKS9zaXplb2Yoc3RkX2dyb3Vwc1swXSk7Ci0JICAgICBpZHgxKyspIHsKKwlmb3IgKGlkeDEgPSAwOyBpZHgxIDwgQVJSQVlfU0laRShzdGRfZ3JvdXBzKTsgaWR4MSsrKSB7CiAJCWdwID0gc3RkX2dyb3VwcyArIGlkeDE7CiAJCWdmbCA9IDA7Ci0JCWZvciAoaWR4MiA9IDA7Ci0JCSAgICAgaWR4MiA8IHNpemVvZihzdGRfaXRlbXMpL3NpemVvZihzdGRfaXRlbXNbMF0pOwotCQkgICAgIGlkeDIrKykgeworCQlmb3IgKGlkeDIgPSAwOyBpZHgyIDwgQVJSQVlfU0laRShzdGRfaXRlbXMpOyBpZHgyKyspIHsKIAkJCWlwID0gc3RkX2l0ZW1zICsgaWR4MjsKIAkJCWlmICghKGdwLT5pZCAmIGlwLT5pZCAmIGlkKSkgY29udGludWU7CiAJCQlpZiAoIWdmbCkgewpAQCAtMjc5LDcgKzI3Miw3IEBACiAJfQogfTsKIAotI2RlZmluZSBnZW5lcmljX3N0YW5kYXJkc19jbnQgKHNpemVvZihnZW5lcmljX3N0YW5kYXJkcykvc2l6ZW9mKGdlbmVyaWNfc3RhbmRhcmRzWzBdKSkKKyNkZWZpbmUgZ2VuZXJpY19zdGFuZGFyZHNfY250IEFSUkFZX1NJWkUoZ2VuZXJpY19zdGFuZGFyZHMpCiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqbWF0Y2hfc3RkKHY0bDJfc3RkX2lkIGlkKQogewpAQCAtMzQ4LDcgKzM0MSw3IEBACiAJCWZtc2sgfD0gaWRtc2s7CiAJfQogCi0JZm9yIChpZHgyID0gMDsgaWR4MiA8IHNpemVvZihzdGRfbWl4ZXMpL3NpemVvZihzdGRfbWl4ZXNbMF0pOyBpZHgyKyspIHsKKwlmb3IgKGlkeDIgPSAwOyBpZHgyIDwgQVJSQVlfU0laRShzdGRfbWl4ZXMpOyBpZHgyKyspIHsKIAkJaWYgKChpZCAmIHN0ZF9taXhlc1tpZHgyXSkgPT0gc3RkX21peGVzW2lkeDJdKSBzdGRfY250Kys7CiAJfQogCkBAIC0zNjYsMTYgKzM1OSwxNSBAQAogCQkgICBzdGRfY250KTsKIAlpZiAoIXN0ZF9jbnQpIHJldHVybiBOVUxMOyAvLyBwYXJhbm9pYQogCi0Jc3RkZGVmcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkKSAqIHN0ZF9jbnQsCisJc3RkZGVmcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkKSAqIHN0ZF9jbnQsCiAJCQkgIEdGUF9LRVJORUwpOwotCW1lbXNldChzdGRkZWZzLDAsc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkKSAqIHN0ZF9jbnQpOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgc3RkX2NudDsgaWR4KyspIHN0ZGRlZnNbaWR4XS5pbmRleCA9IGlkeDsKIAogCWlkeCA9IDA7CiAKIAkvKiBFbnVtZXJhdGUgcG90ZW50aWFsIHNwZWNpYWwgY2FzZXMgKi8KLQlmb3IgKGlkeDIgPSAwOyAoKGlkeDIgPCBzaXplb2Yoc3RkX21peGVzKS9zaXplb2Yoc3RkX21peGVzWzBdKSkgJiYKLQkJCShpZHggPCBzdGRfY250KSk7IGlkeDIrKykgeworCWZvciAoaWR4MiA9IDA7IChpZHgyIDwgQVJSQVlfU0laRShzdGRfbWl4ZXMpKSAmJiAoaWR4IDwgc3RkX2NudCk7CisJICAgICBpZHgyKyspIHsKIAkJaWYgKCEoaWQgJiBzdGRfbWl4ZXNbaWR4Ml0pKSBjb250aW51ZTsKIAkJaWYgKHB2cjJfc3RkX2ZpbGwoc3RkZGVmcytpZHgsc3RkX21peGVzW2lkeDJdKSkgaWR4Kys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKaW5kZXggYzI5NGY0Ni4uOTEzOTZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC00MCw4ICs0MCwxMCBAQAogCXN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtICppdGVtX2ZpcnN0OwogCXN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtICppdGVtX2xhc3Q7CiAJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYXR0cl92NGxfbWlub3JfbnVtYmVyOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGF0dHJfdjRsX3JhZGlvX21pbm9yX251bWJlcjsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBhdHRyX3VuaXRfbnVtYmVyOwogCWludCB2NGxfbWlub3JfbnVtYmVyX2NyZWF0ZWRfb2s7CisJaW50IHY0bF9yYWRpb19taW5vcl9udW1iZXJfY3JlYXRlZF9vazsKIAlpbnQgdW5pdF9udW1iZXJfY3JlYXRlZF9vazsKIH07CiAKQEAgLTQ5MSw3ICs0OTMsNyBAQAogCXVuc2lnbmVkIGludCBjbnQsYWNudDsKIAlpbnQgcmV0OwogCi0JaWYgKChjdGxfaWQgPCAwKSB8fCAoY3RsX2lkID49IChzaXplb2YoZnVuY3MpL3NpemVvZihmdW5jc1swXSkpKSkgeworCWlmICgoY3RsX2lkIDwgMCkgfHwgKGN0bF9pZCA+PSBBUlJBWV9TSVpFKGZ1bmNzKSkpIHsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDk5LDkgKzUwMSw4IEBACiAJY3B0ciA9IHB2cjJfaGR3X2dldF9jdHJsX2J5X2luZGV4KHNmcC0+Y2hhbm5lbC5oZHcsY3RsX2lkKTsKIAlpZiAoIWNwdHIpIHJldHVybjsKIAotCWNpcCA9IGttYWxsb2Moc2l6ZW9mKCpjaXApLEdGUF9LRVJORUwpOworCWNpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaXApLEdGUF9LRVJORUwpOwogCWlmICghY2lwKSByZXR1cm47Ci0JbWVtc2V0KGNpcCwwLHNpemVvZigqY2lwKSk7CiAJcHZyMl9zeXNmc190cmFjZSgiQ3JlYXRpbmcgcHZyMl9zeXNmc19jdGxfaXRlbSBpZD0lcCIsY2lwKTsKIAogCWNpcC0+Y3B0ciA9IGNwdHI7CkBAIC02MTEsOSArNjEyLDggQEAKIAlzdHJ1Y3QgcHZyMl9zeXNmc19kZWJ1Z2lmYyAqZGlwOwogCWludCByZXQ7CiAKLQlkaXAgPSBrbWFsbG9jKHNpemVvZigqZGlwKSxHRlBfS0VSTkVMKTsKKwlkaXAgPSBremFsbG9jKHNpemVvZigqZGlwKSxHRlBfS0VSTkVMKTsKIAlpZiAoIWRpcCkgcmV0dXJuOwotCW1lbXNldChkaXAsMCxzaXplb2YoKmRpcCkpOwogCWRpcC0+YXR0cl9kZWJ1Z2NtZC5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJZGlwLT5hdHRyX2RlYnVnY21kLmF0dHIubmFtZSA9ICJkZWJ1Z2NtZCI7CiAJZGlwLT5hdHRyX2RlYnVnY21kLmF0dHIubW9kZSA9IFNfSVJVR098U19JV1VTUnxTX0lXR1JQOwpAQCAtNzA5LDYgKzcwOSwxMCBAQAogCQljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoc2ZwLT5jbGFzc19kZXYsCiAJCQkJCSAmc2ZwLT5hdHRyX3Y0bF9taW5vcl9udW1iZXIpOwogCX0KKwlpZiAoc2ZwLT52NGxfcmFkaW9fbWlub3JfbnVtYmVyX2NyZWF0ZWRfb2spIHsKKwkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LAorCQkJCQkgJnNmcC0+YXR0cl92NGxfcmFkaW9fbWlub3JfbnVtYmVyKTsKKwl9CiAJaWYgKHNmcC0+dW5pdF9udW1iZXJfY3JlYXRlZF9vaykgewogCQljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoc2ZwLT5jbGFzc19kZXYsCiAJCQkJCSAmc2ZwLT5hdHRyX3VuaXRfbnVtYmVyKTsKQEAgLTcyNiw3ICs3MzAsMjAgQEAKIAlzZnAgPSAoc3RydWN0IHB2cjJfc3lzZnMgKiljbGFzc19kZXYtPmNsYXNzX2RhdGE7CiAJaWYgKCFzZnApIHJldHVybiAtRUlOVkFMOwogCXJldHVybiBzY25wcmludGYoYnVmLFBBR0VfU0laRSwiJWRcbiIsCi0JCQkgcHZyMl9oZHdfdjRsX2dldF9taW5vcl9udW1iZXIoc2ZwLT5jaGFubmVsLmhkdykpOworCQkJIHB2cjJfaGR3X3Y0bF9nZXRfbWlub3JfbnVtYmVyKHNmcC0+Y2hhbm5lbC5oZHcsCisJCQkJCQkgICAgICAgcHZyMl92NGxfdHlwZV92aWRlbykpOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHY0bF9yYWRpb19taW5vcl9udW1iZXJfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsCisJCQkJCSAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcHZyMl9zeXNmcyAqc2ZwOworCXNmcCA9IChzdHJ1Y3QgcHZyMl9zeXNmcyAqKWNsYXNzX2Rldi0+Y2xhc3NfZGF0YTsKKwlpZiAoIXNmcCkgcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHNjbnByaW50ZihidWYsUEFHRV9TSVpFLCIlZFxuIiwKKwkJCSBwdnIyX2hkd192NGxfZ2V0X21pbm9yX251bWJlcihzZnAtPmNoYW5uZWwuaGR3LAorCQkJCQkJICAgICAgIHB2cjJfdjRsX3R5cGVfcmFkaW8pKTsKIH0KIAogCkBAIC03NDksOSArNzY2LDggQEAKIAogCXVzYl9kZXYgPSBwdnIyX2hkd19nZXRfZGV2KHNmcC0+Y2hhbm5lbC5oZHcpOwogCWlmICghdXNiX2RldikgcmV0dXJuOwotCWNsYXNzX2RldiA9IGttYWxsb2Moc2l6ZW9mKCpjbGFzc19kZXYpLEdGUF9LRVJORUwpOworCWNsYXNzX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpjbGFzc19kZXYpLEdGUF9LRVJORUwpOwogCWlmICghY2xhc3NfZGV2KSByZXR1cm47Ci0JbWVtc2V0KGNsYXNzX2RldiwwLHNpemVvZigqY2xhc3NfZGV2KSk7CiAKIAlwdnIyX3N5c2ZzX3RyYWNlKCJDcmVhdGluZyBjbGFzc19kZXYgaWQ9JXAiLGNsYXNzX2Rldik7CiAKQEAgLTc5Myw2ICs4MDksMjAgQEAKIAkJc2ZwLT52NGxfbWlub3JfbnVtYmVyX2NyZWF0ZWRfb2sgPSAhMDsKIAl9CiAKKwlzZnAtPmF0dHJfdjRsX3JhZGlvX21pbm9yX251bWJlci5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CisJc2ZwLT5hdHRyX3Y0bF9yYWRpb19taW5vcl9udW1iZXIuYXR0ci5uYW1lID0gInY0bF9yYWRpb19taW5vcl9udW1iZXIiOworCXNmcC0+YXR0cl92NGxfcmFkaW9fbWlub3JfbnVtYmVyLmF0dHIubW9kZSA9IFNfSVJVR087CisJc2ZwLT5hdHRyX3Y0bF9yYWRpb19taW5vcl9udW1iZXIuc2hvdyA9IHY0bF9yYWRpb19taW5vcl9udW1iZXJfc2hvdzsKKwlzZnAtPmF0dHJfdjRsX3JhZGlvX21pbm9yX251bWJlci5zdG9yZSA9IE5VTEw7CisJcmV0ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LAorCQkJCSAgICAgICAmc2ZwLT5hdHRyX3Y0bF9yYWRpb19taW5vcl9udW1iZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUgZXJyb3I6ICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCByZXQpOworCX0gZWxzZSB7CisJCXNmcC0+djRsX3JhZGlvX21pbm9yX251bWJlcl9jcmVhdGVkX29rID0gITA7CisJfQorCiAJc2ZwLT5hdHRyX3VuaXRfbnVtYmVyLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAlzZnAtPmF0dHJfdW5pdF9udW1iZXIuYXR0ci5uYW1lID0gInVuaXRfbnVtYmVyIjsKIAlzZnAtPmF0dHJfdW5pdF9udW1iZXIuYXR0ci5tb2RlID0gU19JUlVHTzsKQEAgLTgyOSw5ICs4NTksOCBAQAogCQkJCSAgICAgc3RydWN0IHB2cjJfc3lzZnNfY2xhc3MgKmNsYXNzX3B0cikKIHsKIAlzdHJ1Y3QgcHZyMl9zeXNmcyAqc2ZwOwotCXNmcCA9IGttYWxsb2Moc2l6ZW9mKCpzZnApLEdGUF9LRVJORUwpOworCXNmcCA9IGt6YWxsb2Moc2l6ZW9mKCpzZnApLEdGUF9LRVJORUwpOwogCWlmICghc2ZwKSByZXR1cm4gc2ZwOwotCW1lbXNldChzZnAsMCxzaXplb2YoKnNmcCkpOwogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9TVFJVQ1QsIkNyZWF0aW5nIHB2cjJfc3lzZnMgaWQ9JXAiLHNmcCk7CiAJcHZyMl9jaGFubmVsX2luaXQoJnNmcC0+Y2hhbm5lbCxtcCk7CiAJc2ZwLT5jaGFubmVsLmNoZWNrX2Z1bmMgPSBwdnIyX3N5c2ZzX2ludGVybmFsX2NoZWNrOwpAQCAtODUyLDkgKzg4MSw4IEBACiBzdHJ1Y3QgcHZyMl9zeXNmc19jbGFzcyAqcHZyMl9zeXNmc19jbGFzc19jcmVhdGUodm9pZCkKIHsKIAlzdHJ1Y3QgcHZyMl9zeXNmc19jbGFzcyAqY2xwOwotCWNscCA9IGttYWxsb2Moc2l6ZW9mKCpjbHApLEdGUF9LRVJORUwpOworCWNscCA9IGt6YWxsb2Moc2l6ZW9mKCpjbHApLEdGUF9LRVJORUwpOwogCWlmICghY2xwKSByZXR1cm4gY2xwOwotCW1lbXNldChjbHAsMCxzaXplb2YoKmNscCkpOwogCXB2cjJfc3lzZnNfdHJhY2UoIkNyZWF0aW5nIHB2cjJfc3lzZnNfY2xhc3MgaWQ9JXAiLGNscCk7CiAJY2xwLT5jbGFzcy5uYW1lID0gInB2cnVzYjIiOwogCWNscC0+Y2xhc3MuY2xhc3NfcmVsZWFzZSA9IHB2cjJfc3lzZnNfY2xhc3NfcmVsZWFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jCmluZGV4IGFmOWYyNDYuLjA1ZTY1Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuYwpAQCAtODAsNyArODAsNyBAQAogfQogCiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgdHVuZXJfZnVuY3MgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIHR1bmVyX2Z1bmNzID0gewogCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlwdnIyX3R1bmVyX2RldGFjaCwKIAkuY2hlY2sgPSAoaW50ICgqKSh2b2lkICopKXR1bmVyX2NoZWNrLAogCS51cGRhdGUgPSAodm9pZCAoKikodm9pZCAqKSl0dW5lcl91cGRhdGUsCkBAIC05Myw5ICs5Myw4IEBACiAJc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dDsKIAlpZiAoY3AtPmhhbmRsZXIpIHJldHVybiAwOwogCi0JY3R4dCA9IGttYWxsb2Moc2l6ZW9mKCpjdHh0KSxHRlBfS0VSTkVMKTsKKwljdHh0ID0ga3phbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOwogCWlmICghY3R4dCkgcmV0dXJuIDA7Ci0JbWVtc2V0KGN0eHQsMCxzaXplb2YoKmN0eHQpKTsKIAogCWN0eHQtPmkyY19oYW5kbGVyLmZ1bmNfZGF0YSA9IGN0eHQ7CiAJY3R4dC0+aTJjX2hhbmRsZXIuZnVuY190YWJsZSA9ICZ0dW5lcl9mdW5jczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwppbmRleCA2Y2YxNzA4MC4uNGZlNDEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwpAQCAtNDAsNyArNDAsMTAgQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlIGRldmJhc2U7IC8qIE1VU1QgYmUgZmlyc3QhICovCiAJc3RydWN0IHB2cjJfdjRsMiAqdjRscDsKIAlzdHJ1Y3QgcHZyMl9jb250ZXh0X3N0cmVhbSAqc3RyZWFtOwotCWVudW0gcHZyMl9jb25maWcgY29uZmlnOworCS8qIEluZm9ybWF0aW9uIGFib3V0IHRoaXMgZGV2aWNlOiAqLworCWVudW0gcHZyMl9jb25maWcgY29uZmlnOyAvKiBFeHBlY3RlZCBzdHJlYW0gZm9ybWF0ICovCisJaW50IHY0bF90eXBlOyAvKiBWNEwgZGVmaW5lZCB0eXBlIGZvciB0aGlzIGRldmljZSBub2RlICovCisJZW51bSBwdnIyX3Y0bF90eXBlIG1pbm9yX3R5cGU7IC8qIHB2cjItdW5kZXJzdG9vZCBtaW5vciBkZXZpY2UgdHlwZSAqLwogfTsKIAogc3RydWN0IHB2cjJfdjRsMl9maCB7CkBAIC01NCw2ICs1Nyw3IEBACiAJc3RydWN0IHB2cjJfdjRsMl9maCAqdnByZXY7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9kYXRhOwogCWludCBmd19tb2RlX2ZsYWc7CisJaW50IHByZXZfaW5wdXRfdmFsOwogfTsKIAogc3RydWN0IHB2cjJfdjRsMiB7CkBAIC02MywxMyArNjcsMjIgQEAKIAogCXN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgcHJpbzsKIAotCS8qIHN0cmVhbXMgKi8KLQlzdHJ1Y3QgcHZyMl92NGwyX2RldiAqdmRldjsKKwkvKiBzdHJlYW1zIC0gTm90ZSB0aGF0IHRoZXNlIG11c3QgYmUgc2VwYXJhdGVseSwgaW5kaXZpZHVhbGx5LAorCSAqIGFsbG9jYXRlZCBwb2ludGVycy4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgdjRsIGNvcmUgaXMgZ29pbmcgdG8KKwkgKiBtYW5hZ2UgdGhlaXIgZGVsZXRpb24gLSBzZXBhcmF0ZWx5LCBpbmRpdmlkdWFsbHkuLi4gICovCisJc3RydWN0IHB2cjJfdjRsMl9kZXYgKmRldl92aWRlbzsKKwlzdHJ1Y3QgcHZyMl92NGwyX2RldiAqZGV2X3JhZGlvOwogfTsKIAogc3RhdGljIGludCB2aWRlb19ucltQVlJfTlVNXSA9IHtbMCAuLi4gUFZSX05VTS0xXSA9IC0xfTsKIG1vZHVsZV9wYXJhbV9hcnJheSh2aWRlb19uciwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsICJPZmZzZXQgZm9yIGRldmljZSdzIG1pbm9yIik7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAiT2Zmc2V0IGZvciBkZXZpY2UncyB2aWRlbyBkZXYgbWlub3IiKTsKK3N0YXRpYyBpbnQgcmFkaW9fbnJbUFZSX05VTV0gPSB7WzAgLi4uIFBWUl9OVU0tMV0gPSAtMX07Cittb2R1bGVfcGFyYW1fYXJyYXkocmFkaW9fbnIsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiT2Zmc2V0IGZvciBkZXZpY2UncyByYWRpbyBkZXYgbWlub3IiKTsKK3N0YXRpYyBpbnQgdmJpX25yW1BWUl9OVU1dID0ge1swIC4uLiBQVlJfTlVNLTFdID0gLTF9OworbW9kdWxlX3BhcmFtX2FycmF5KHZiaV9uciwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmJpX25yLCAiT2Zmc2V0IGZvciBkZXZpY2UncyB2YmkgZGV2IG1pbm9yIik7CiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5IHB2cl9jYXBhYmlsaXR5ID17CiAJLmRyaXZlciAgICAgICAgID0gInB2cnVzYjIiLApAQCAtNzcsMzAgKzkwLDExIEBACiAJLmJ1c19pbmZvICAgICAgID0gInVzYiIsCiAJLnZlcnNpb24gICAgICAgID0gS0VSTkVMX1ZFUlNJT04oMCw4LDApLAogCS5jYXBhYmlsaXRpZXMgICA9IChWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfVkJJX0NBUFRVUkUgfAotCQkJICAgVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9BVURJTyB8CisJCQkgICBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX0FVRElPIHwgVjRMMl9DQVBfUkFESU8gfAogCQkJICAgVjRMMl9DQVBfUkVBRFdSSVRFKSwKIAkucmVzZXJ2ZWQgICAgICAgPSB7MCwwLDAsMH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl90dW5lciBwdnJfdjRsMl90dW5lcnNbXT0gewotCXsKLQkJLmluZGV4ICAgICAgPSAwLAotCQkubmFtZSAgICAgICA9ICJUViBUdW5lciIsCi0JCS50eXBlICAgICAgICAgICA9IFY0TDJfVFVORVJfQU5BTE9HX1RWLAotCQkuY2FwYWJpbGl0eSAgICAgPSAoVjRMMl9UVU5FUl9DQVBfTk9STSB8Ci0JCQkJICAgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKLQkJCQkgICBWNEwyX1RVTkVSX0NBUF9MQU5HMSB8Ci0JCQkJICAgVjRMMl9UVU5FUl9DQVBfTEFORzIpLAotCQkucmFuZ2Vsb3cgICA9IDAsCi0JCS5yYW5nZWhpZ2ggID0gMCwKLQkJLnJ4c3ViY2hhbnMgICAgID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPLAotCQkuYXVkbW9kZSAgICAgICAgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPLAotCQkuc2lnbmFsICAgICAgICAgPSAwLAotCQkuYWZjICAgICAgICAgICAgPSAwLAotCQkucmVzZXJ2ZWQgICAgICAgPSB7MCwwLDAsMH0KLQl9Ci19OwotCiBzdGF0aWMgc3RydWN0IHY0bDJfZm10ZGVzYyBwdnJfZm10ZGVzYyBbXSA9IHsKIAl7CiAJCS5pbmRleCAgICAgICAgICA9IDAsCkBAIC0xNTQsNiArMTQ4LDE4IEBACiAJfQogfTsKIAorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3Y0bF9uYW1lKGludCB2NGxfdHlwZSkKK3sKKwlzd2l0Y2ggKHY0bF90eXBlKSB7CisJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOiByZXR1cm4gInZpZGVvIjsKKwljYXNlIFZGTF9UWVBFX1JBRElPOiByZXR1cm4gInJhZGlvIjsKKwljYXNlIFZGTF9UWVBFX1ZCSTogcmV0dXJuICJ2YmkiOworCWRlZmF1bHQ6IHJldHVybiAiPyI7CisJfQorfQorCisKIC8qCiAgKiBwdnJfaW9jdGwoKQogICoKQEAgLTMxNSwxMyArMzIxLDM5IEBACiAKIAljYXNlIFZJRElPQ19FTlVNQVVESU86CiAJeworCQkvKiBwa3Q6IEZJWE1FOiBXZSBhcmUgcmV0dXJuaW5nIG9uZSAiZmFrZSIgaW5wdXQgaGVyZQorCQkgICB3aGljaCBjb3VsZCB2ZXJ5IHdlbGwgYmUgY2FsbGVkICJ3aGF0ZXZlcl93ZV9saWtlIi4KKwkJICAgVGhpcyBpcyBmb3IgYXBwcyB0aGF0IHdhbnQgdG8gc2VlIGFuIGF1ZGlvIGlucHV0CisJCSAgIGp1c3QgdG8gZmVlbCBjb21mb3J0YWJsZSwgYXMgd2VsbCBhcyB0byB0ZXN0IGlmCisJCSAgIGl0IGNhbiBkbyBzdGVyZW8gb3Igc3RoLiBUaGVyZSBpcyBhY3R1YWxseSBubyBndWFyYW50ZWUKKwkJICAgdGhhdCB0aGUgYWN0dWFsIGF1ZGlvIGlucHV0IGNhbm5vdCBjaGFuZ2UgYmVoaW5kIHRoZSBhcHAncworCQkgICBiYWNrLCBidXQgbW9zdCBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBtaW5kIHRoYXQgZWl0aGVyLgorCisJCSAgIEhvcGVmdWxseSwgbXBsYXllciBwZW9wbGUgd2lsbCB3b3JrIHdpdGggdXMgb24gdGhpcyAodGhpcworCQkgICB3aG9sZSBtZXNzIGlzIHRvIHN1cHBvcnQgbXBsYXllciBwdnI6Ly8pLCBvciBIYW5zIHdpbGwgY29tZQorCQkgICB1cCB3aXRoIGEgbW9yZSBzdGFuZGFyZCB3YXkgdG8gc2F5ICJ3ZSBoYXZlIGlucHV0cyBidXQgd2UKKwkJICAgZG9uICd0IHdhbnQgeW91IHRvIGNoYW5nZSB0aGVtIGluZGVwZW5kZW50IG9mIHZpZGVvIiB3aGljaAorCQkgICB3aWxsIHNvcnQgdGhpcyBtZXNzLgorCQkgKi8KKwkJc3RydWN0IHY0bDJfYXVkaW8gKnZpbiA9IGFyZzsKIAkJcmV0ID0gLUVJTlZBTDsKKwkJaWYgKHZpbi0+aW5kZXggPiAwKSBicmVhazsKKwkJc3RybmNweSh2aW4tPm5hbWUsICJQVlJVU0IyIEF1ZGlvIiwxNCk7CisJCXZpbi0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CiAJCWJyZWFrOwogCX0KIAogCWNhc2UgVklESU9DX0dfQVVESU86CiAJewotCQlyZXQgPSAtRUlOVkFMOworCQkvKiBwa3Q6IEZJWE1FOiBzZWUgYWJvdmUgY29tbWVudCAoVklESU9DX0VOVU1BVURJTykgKi8KKwkJc3RydWN0IHY0bDJfYXVkaW8gKnZpbiA9IGFyZzsKKwkJbWVtc2V0KHZpbiwwLHNpemVvZigqdmluKSk7CisJCXZpbi0+aW5kZXggPSAwOworCQlzdHJuY3B5KHZpbi0+bmFtZSwgIlBWUlVTQjIgQXVkaW8iLDE0KTsKKwkJdmluLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCQlyZXQgPSAwOwogCQlicmVhazsKIAl9CiAKQEAgLTMzMywzNCArMzY1LDExIEBACiAJY2FzZSBWSURJT0NfR19UVU5FUjoKIAl7CiAJCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IChzdHJ1Y3QgdjRsMl90dW5lciAqKWFyZzsKLQkJdW5zaWduZWQgaW50IHN0YXR1c19tYXNrOwotCQlpbnQgdmFsOwotCQlpZiAodnQtPmluZGV4ICE9MCkgYnJlYWs7CiAKLQkJc3RhdHVzX21hc2sgPSBwdnIyX2hkd19nZXRfc2lnbmFsX3N0YXR1cyhoZHcpOworCQlpZiAodnQtPmluZGV4ICE9IDApIGJyZWFrOyAvKiBPbmx5IGFuc3dlciBmb3IgdGhlIDFzdCB0dW5lciAqLwogCi0JCW1lbWNweSh2dCwgJnB2cl92NGwyX3R1bmVyc1t2dC0+aW5kZXhdLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3R1bmVyKSk7Ci0KLQkJdnQtPnNpZ25hbCA9IDA7Ci0JCWlmIChzdGF0dXNfbWFzayAmIFBWUjJfU0lHTkFMX09LKSB7Ci0JCQlpZiAoc3RhdHVzX21hc2sgJiBQVlIyX1NJR05BTF9TVEVSRU8pIHsKLQkJCQl2dC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJCX0gZWxzZSB7Ci0JCQkJdnQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJfQotCQkJaWYgKHN0YXR1c19tYXNrICYgUFZSMl9TSUdOQUxfU0FQKSB7Ci0JCQkJdnQtPnJ4c3ViY2hhbnMgfD0gKFY0TDJfVFVORVJfU1VCX0xBTkcxIHwKLQkJCQkJCSAgIFY0TDJfVFVORVJfU1VCX0xBTkcyKTsKLQkJCX0KLQkJCXZ0LT5zaWduYWwgPSA2NTUzNTsKLQkJfQotCi0JCXZhbCA9IDA7Ci0JCXJldCA9IHB2cjJfY3RybF9nZXRfdmFsdWUoCi0JCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsUFZSMl9DSURfQVVESU9NT0RFKSwKLQkJCSZ2YWwpOwotCQl2dC0+YXVkbW9kZSA9IHZhbDsKKwkJcHZyMl9oZHdfZXhlY3V0ZV90dW5lcl9wb2xsKGhkdyk7CisJCXJldCA9IHB2cjJfaGR3X2dldF90dW5lcl9zdGF0dXMoaGR3LHZ0KTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zNzQsMTQgKzM4Myw0MCBAQAogCQlyZXQgPSBwdnIyX2N0cmxfc2V0X3ZhbHVlKAogCQkJcHZyMl9oZHdfZ2V0X2N0cmxfYnlfaWQoaGR3LFBWUjJfQ0lEX0FVRElPTU9ERSksCiAJCQl2dC0+YXVkbW9kZSk7CisJCWJyZWFrOwogCX0KIAogCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgogCXsKIAkJY29uc3Qgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICp2ZiA9IChzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKilhcmc7CisJCXVuc2lnbmVkIGxvbmcgZnY7CisJCXN0cnVjdCB2NGwyX3R1bmVyIHZ0OworCQlpbnQgY3VyX2lucHV0OworCQlzdHJ1Y3QgcHZyMl9jdHJsICpjdHJscDsKKwkJcmV0ID0gcHZyMl9oZHdfZ2V0X3R1bmVyX3N0YXR1cyhoZHcsJnZ0KTsKKwkJaWYgKHJldCAhPSAwKSBicmVhazsKKwkJY3RybHAgPSBwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsUFZSMl9DSURfSU5QVVQpOworCQlyZXQgPSBwdnIyX2N0cmxfZ2V0X3ZhbHVlKGN0cmxwLCZjdXJfaW5wdXQpOworCQlpZiAocmV0ICE9IDApIGJyZWFrOworCQlpZiAodmYtPnR5cGUgPT0gVjRMMl9UVU5FUl9SQURJTykgeworCQkJaWYgKGN1cl9pbnB1dCAhPSBQVlIyX0NWQUxfSU5QVVRfUkFESU8pIHsKKwkJCQlwdnIyX2N0cmxfc2V0X3ZhbHVlKGN0cmxwLAorCQkJCQkJICAgIFBWUjJfQ1ZBTF9JTlBVVF9SQURJTyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY3VyX2lucHV0ID09IFBWUjJfQ1ZBTF9JTlBVVF9SQURJTykgeworCQkJCXB2cjJfY3RybF9zZXRfdmFsdWUoY3RybHAsCisJCQkJCQkgICAgUFZSMl9DVkFMX0lOUFVUX1RWKTsKKwkJCX0KKwkJfQorCQlmdiA9IHZmLT5mcmVxdWVuY3k7CisJCWlmICh2dC5jYXBhYmlsaXR5ICYgVjRMMl9UVU5FUl9DQVBfTE9XKSB7CisJCQlmdiA9IChmdiAqIDEyNSkgLyAyOworCQl9IGVsc2UgeworCQkJZnYgPSBmdiAqIDYyNTAwOworCQl9CiAJCXJldCA9IHB2cjJfY3RybF9zZXRfdmFsdWUoCi0JCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsUFZSMl9DSURfRlJFUVVFTkNZKSwKLQkJCXZmLT5mcmVxdWVuY3kgKiA2MjUwMCk7CisJCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsUFZSMl9DSURfRlJFUVVFTkNZKSxmdik7CiAJCWJyZWFrOwogCX0KIApAQCAtMzg5LDEwICs0MjQsMjcgQEAKIAl7CiAJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqdmYgPSAoc3RydWN0IHY0bDJfZnJlcXVlbmN5ICopYXJnOwogCQlpbnQgdmFsID0gMDsKKwkJaW50IGN1cl9pbnB1dDsKKwkJc3RydWN0IHY0bDJfdHVuZXIgdnQ7CisJCXJldCA9IHB2cjJfaGR3X2dldF90dW5lcl9zdGF0dXMoaGR3LCZ2dCk7CisJCWlmIChyZXQgIT0gMCkgYnJlYWs7CiAJCXJldCA9IHB2cjJfY3RybF9nZXRfdmFsdWUoCiAJCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsUFZSMl9DSURfRlJFUVVFTkNZKSwKIAkJCSZ2YWwpOwotCQl2YWwgLz0gNjI1MDA7CisJCWlmIChyZXQgIT0gMCkgYnJlYWs7CisJCXB2cjJfY3RybF9nZXRfdmFsdWUoCisJCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsUFZSMl9DSURfSU5QVVQpLAorCQkJJmN1cl9pbnB1dCk7CisJCWlmIChjdXJfaW5wdXQgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPKSB7CisJCQl2Zi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJCX0gZWxzZSB7CisJCQl2Zi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQl9CisJCWlmICh2dC5jYXBhYmlsaXR5ICYgVjRMMl9UVU5FUl9DQVBfTE9XKSB7CisJCQl2YWwgPSAodmFsICogMikgLyAxMjU7CisJCX0gZWxzZSB7CisJCQl2YWwgLz0gNjI1MDA7CisJCX0KIAkJdmYtPmZyZXF1ZW5jeSA9IHZhbDsKIAkJYnJlYWs7CiAJfQpAQCAtNDQ5LDcgKzUwMSw3IEBACiAJCXJldCA9IDA7CiAJCXN3aXRjaCh2Zi0+dHlwZSkgewogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQkJaW50IGxtaW4sbG1heDsKKwkJCWludCBsbWluLGxtYXgsbGRlZjsKIAkJCXN0cnVjdCBwdnIyX2N0cmwgKmhjcCwqdmNwOwogCQkJaW50IGggPSB2Zi0+Zm10LnBpeC5oZWlnaHQ7CiAJCQlpbnQgdyA9IHZmLT5mbXQucGl4LndpZHRoOwpAQCAtNDU4LDE0ICs1MTAsMjAgQEAKIAogCQkJbG1pbiA9IHB2cjJfY3RybF9nZXRfbWluKGhjcCk7CiAJCQlsbWF4ID0gcHZyMl9jdHJsX2dldF9tYXgoaGNwKTsKLQkJCWlmICh3IDwgbG1pbikgeworCQkJbGRlZiA9IHB2cjJfY3RybF9nZXRfZGVmKGhjcCk7CisJCQlpZiAodyA9PSAtMSkgeworCQkJCXcgPSBsZGVmOworCQkJfSBlbHNlIGlmICh3IDwgbG1pbikgewogCQkJCXcgPSBsbWluOwogCQkJfSBlbHNlIGlmICh3ID4gbG1heCkgewogCQkJCXcgPSBsbWF4OwogCQkJfQogCQkJbG1pbiA9IHB2cjJfY3RybF9nZXRfbWluKHZjcCk7CiAJCQlsbWF4ID0gcHZyMl9jdHJsX2dldF9tYXgodmNwKTsKLQkJCWlmIChoIDwgbG1pbikgeworCQkJbGRlZiA9IHB2cjJfY3RybF9nZXRfZGVmKHZjcCk7CisJCQlpZiAoaCA9PSAtMSkgeworCQkJCWggPSBsZGVmOworCQkJfSBlbHNlIGlmIChoIDwgbG1pbikgewogCQkJCWggPSBsbWluOwogCQkJfSBlbHNlIGlmIChoID4gbG1heCkgewogCQkJCWggPSBsbWF4OwpAQCAtNDk0LDYgKzU1MiwxMyBAQAogCiAJY2FzZSBWSURJT0NfU1RSRUFNT046CiAJeworCQlpZiAoIWZoLT5kZXZfaW5mby0+c3RyZWFtKSB7CisJCQkvKiBObyBzdHJlYW0gZGVmaW5lZCBmb3IgdGhpcyBub2RlLiAgVGhpcyBtZWFucworCQkJICAgdGhhdCB3ZSdyZSBub3QgY3VycmVudGx5IGFsbG93ZWQgdG8gc3RyZWFtIGZyb20KKwkJCSAgIHRoaXMgbm9kZS4gKi8KKwkJCXJldCA9IC1FUEVSTTsKKwkJCWJyZWFrOworCQl9CiAJCXJldCA9IHB2cjJfaGR3X3NldF9zdHJlYW1fdHlwZShoZHcsZGV2X2luZm8tPmNvbmZpZyk7CiAJCWlmIChyZXQgPCAwKSByZXR1cm4gcmV0OwogCQlyZXQgPSBwdnIyX2hkd19zZXRfc3RyZWFtaW5nKGhkdywhMCk7CkBAIC01MDIsNiArNTY3LDEzIEBACiAKIAljYXNlIFZJRElPQ19TVFJFQU1PRkY6CiAJeworCQlpZiAoIWZoLT5kZXZfaW5mby0+c3RyZWFtKSB7CisJCQkvKiBObyBzdHJlYW0gZGVmaW5lZCBmb3IgdGhpcyBub2RlLiAgVGhpcyBtZWFucworCQkJICAgdGhhdCB3ZSdyZSBub3QgY3VycmVudGx5IGFsbG93ZWQgdG8gc3RyZWFtIGZyb20KKwkJCSAgIHRoaXMgbm9kZS4gKi8KKwkJCXJldCA9IC1FUEVSTTsKKwkJCWJyZWFrOworCQl9CiAJCXJldCA9IHB2cjJfaGR3X3NldF9zdHJlYW1pbmcoaGR3LDApOwogCQlicmVhazsKIAl9CkBAIC01OTksNiArNjcxLDcgQEAKIAkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmw7CiAJCXVuc2lnbmVkIGludCBpZHg7CiAJCWludCB2YWw7CisJCXJldCA9IDA7CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgY3Rscy0+Y291bnQ7IGlkeCsrKSB7CiAJCQljdHJsID0gY3Rscy0+Y29udHJvbHMgKyBpZHg7CiAJCQlyZXQgPSBwdnIyX2N0cmxfZ2V0X3ZhbHVlKApAQCAtNjIxLDYgKzY5NCw3IEBACiAJCQkoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICopYXJnOwogCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybDsKIAkJdW5zaWduZWQgaW50IGlkeDsKKwkJcmV0ID0gMDsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBjdGxzLT5jb3VudDsgaWR4KyspIHsKIAkJCWN0cmwgPSBjdGxzLT5jb250cm9scyArIGlkeDsKIAkJCXJldCA9IHB2cjJfY3RybF9zZXRfdmFsdWUoCkBAIC02NDMsNiArNzE3LDcgQEAKIAkJdW5zaWduZWQgaW50IGlkeDsKIAkJLyogRm9yIHRoZSBtb21lbnQganVzdCB2YWxpZGF0ZSB0aGF0IHRoZSByZXF1ZXN0ZWQgY29udHJvbAogCQkgICBhY3R1YWxseSBleGlzdHMuICovCisJCXJldCA9IDA7CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgY3Rscy0+Y291bnQ7IGlkeCsrKSB7CiAJCQljdHJsID0gY3Rscy0+Y29udHJvbHMgKyBpZHg7CiAJCQlwY3RsID0gcHZyMl9oZHdfZ2V0X2N0cmxfdjRsKGhkdyxjdHJsLT5pZCk7CkBAIC02NjIsMTYgKzczNywxNiBAQAogCQlicmVhazsKIAl9CiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCWNhc2UgVklESU9DX0lOVF9HX1JFR0lTVEVSOgotCWNhc2UgVklESU9DX0lOVF9TX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgogCXsKIAkJdTMyIHZhbDsKIAkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlcSA9IChzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqKWFyZzsKLQkJaWYgKGNtZCA9PSBWSURJT0NfSU5UX1NfUkVHSVNURVIpIHZhbCA9IHJlcS0+dmFsOworCQlpZiAoY21kID09IFZJRElPQ19EQkdfU19SRUdJU1RFUikgdmFsID0gcmVxLT52YWw7CiAJCXJldCA9IHB2cjJfaGR3X3JlZ2lzdGVyX2FjY2VzcygKIAkJCWhkdyxyZXEtPmkyY19pZCxyZXEtPnJlZywKLQkJCWNtZCA9PSBWSURJT0NfSU5UX1NfUkVHSVNURVIsJnZhbCk7Ci0JCWlmIChjbWQgPT0gVklESU9DX0lOVF9HX1JFR0lTVEVSKSByZXEtPnZhbCA9IHZhbDsKKwkJCWNtZCA9PSBWSURJT0NfREJHX1NfUkVHSVNURVIsJnZhbCk7CisJCWlmIChjbWQgPT0gVklESU9DX0RCR19HX1JFR0lTVEVSKSByZXEtPnZhbCA9IHZhbDsKIAkJYnJlYWs7CiAJfQogI2VuZGlmCkBAIC03MDcsOCArNzgyLDEyIEBACiAKIHN0YXRpYyB2b2lkIHB2cjJfdjRsMl9kZXZfZGVzdHJveShzdHJ1Y3QgcHZyMl92NGwyX2RldiAqZGlwKQogewotCXByaW50ayhLRVJOX0lORk8gInB2cnVzYjI6IHVucmVnaXN0ZXJpbmcgZGV2aWNlIHZpZGVvJWQgWyVzXVxuIiwKLQkgICAgICAgZGlwLT5kZXZiYXNlLm1pbm9yLHB2cjJfY29uZmlnX2dldF9uYW1lKGRpcC0+Y29uZmlnKSk7CisJaW50IG1pbm9yX2lkID0gZGlwLT5kZXZiYXNlLm1pbm9yOworCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gZGlwLT52NGxwLT5jaGFubmVsLm1jX2hlYWQtPmhkdzsKKwllbnVtIHB2cjJfY29uZmlnIGNmZyA9IGRpcC0+Y29uZmlnOworCWludCB2NGxfdHlwZSA9IGRpcC0+djRsX3R5cGU7CisKKwlwdnIyX2hkd192NGxfc3RvcmVfbWlub3JfbnVtYmVyKGhkdyxkaXAtPm1pbm9yX3R5cGUsLTEpOwogCiAJLyogUGFyYW5vaWEgKi8KIAlkaXAtPnY0bHAgPSBOVUxMOwpAQCAtNzE3LDEzICs3OTYsMjQgQEAKIAkvKiBBY3R1YWwgZGVhbGxvY2F0aW9uIGhhcHBlbnMgbGF0ZXIgd2hlbiBhbGwgaW50ZXJuYWwgcmVmZXJlbmNlcwogCSAgIGFyZSBnb25lLiAqLwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkaXAtPmRldmJhc2UpOworCisJcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogdW5yZWdpc3RlcmVkIGRldmljZSAlcyV1IFslc11cbiIsCisJICAgICAgIGdldF92NGxfbmFtZSh2NGxfdHlwZSksbWlub3JfaWQgJiAweDFmLAorCSAgICAgICBwdnIyX2NvbmZpZ19nZXRfbmFtZShjZmcpKTsKKwogfQogCiAKIHN0YXRpYyB2b2lkIHB2cjJfdjRsMl9kZXN0cm95X25vX2xvY2soc3RydWN0IHB2cjJfdjRsMiAqdnApCiB7Ci0JcHZyMl9oZHdfdjRsX3N0b3JlX21pbm9yX251bWJlcih2cC0+Y2hhbm5lbC5tY19oZWFkLT5oZHcsLTEpOwotCXB2cjJfdjRsMl9kZXZfZGVzdHJveSh2cC0+dmRldik7CisJaWYgKHZwLT5kZXZfdmlkZW8pIHsKKwkJcHZyMl92NGwyX2Rldl9kZXN0cm95KHZwLT5kZXZfdmlkZW8pOworCQl2cC0+ZGV2X3ZpZGVvID0gMDsKKwl9CisJaWYgKHZwLT5kZXZfcmFkaW8pIHsKKwkJcHZyMl92NGwyX2Rldl9kZXN0cm95KHZwLT5kZXZfcmFkaW8pOworCQl2cC0+ZGV2X3JhZGlvID0gMDsKKwl9CiAKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfU1RSVUNULCJEZXN0cm95aW5nIHB2cjJfdjRsMiBpZD0lcCIsdnApOwogCXB2cjJfY2hhbm5lbF9kb25lKCZ2cC0+Y2hhbm5lbCk7CkBAIC03NjYsMjMgKzg1NiwzNyBAQAogCXN0cnVjdCBwdnIyX3Y0bDJfZmggKmZocCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcHZyMl92NGwyICp2cCA9IGZocC0+dmhlYWQ7CiAJc3RydWN0IHB2cjJfY29udGV4dCAqbXAgPSBmaHAtPnZoZWFkLT5jaGFubmVsLm1jX2hlYWQ7CisJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBmaHAtPmNoYW5uZWwubWNfaGVhZC0+aGR3OwogCiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX09QRU5fQ0xPU0UsInB2cjJfdjRsMl9yZWxlYXNlIik7CiAKIAlpZiAoZmhwLT5yaHApIHsKIAkJc3RydWN0IHB2cjJfc3RyZWFtICpzcDsKLQkJc3RydWN0IHB2cjJfaGR3ICpoZHc7Ci0JCWhkdyA9IGZocC0+Y2hhbm5lbC5tY19oZWFkLT5oZHc7CiAJCXB2cjJfaGR3X3NldF9zdHJlYW1pbmcoaGR3LDApOwogCQlzcCA9IHB2cjJfaW9yZWFkX2dldF9zdHJlYW0oZmhwLT5yaHApOwogCQlpZiAoc3ApIHB2cjJfc3RyZWFtX3NldF9jYWxsYmFjayhzcCxOVUxMLE5VTEwpOwogCQlwdnIyX2lvcmVhZF9kZXN0cm95KGZocC0+cmhwKTsKIAkJZmhwLT5yaHAgPSBOVUxMOwogCX0KKwogCXY0bDJfcHJpb19jbG9zZSgmdnAtPnByaW8sICZmaHAtPnByaW8pOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAKIAlwdnIyX2NvbnRleHRfZW50ZXIobXApOyBkbyB7CisJCS8qIFJlc3RvcmUgdGhlIHByZXZpb3VzIGlucHV0IHNlbGVjdGlvbiwgaWYgaXQgbWFrZXMgc2Vuc2UKKwkJICAgdG8gZG8gc28uICovCisJCWlmIChmaHAtPmRldl9pbmZvLT52NGxfdHlwZSA9PSBWRkxfVFlQRV9SQURJTykgeworCQkJc3RydWN0IHB2cjJfY3RybCAqY3A7CisJCQlpbnQgcHZhbDsKKwkJCWNwID0gcHZyMl9oZHdfZ2V0X2N0cmxfYnlfaWQoaGR3LFBWUjJfQ0lEX0lOUFVUKTsKKwkJCXB2cjJfY3RybF9nZXRfdmFsdWUoY3AsJnB2YWwpOworCQkJLyogT25seSByZXN0b3JlIGlmIHdlJ3JlIHN0aWxsIHNlbGVjdGluZyB0aGUgcmFkaW8gKi8KKwkJCWlmIChwdmFsID09IFBWUjJfQ1ZBTF9JTlBVVF9SQURJTykgeworCQkJCXB2cjJfY3RybF9zZXRfdmFsdWUoY3AsZmhwLT5wcmV2X2lucHV0X3ZhbCk7CisJCQkJcHZyMl9oZHdfY29tbWl0X2N0bChoZHcpOworCQkJfQorCQl9CisKIAkJaWYgKGZocC0+dm5leHQpIHsKIAkJCWZocC0+dm5leHQtPnZwcmV2ID0gZmhwLT52cHJldjsKIAkJfSBlbHNlIHsKQEAgLTgyOCwxMSArOTMyLDEwIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWZocCA9IGttYWxsb2Moc2l6ZW9mKCpmaHApLEdGUF9LRVJORUwpOworCWZocCA9IGt6YWxsb2Moc2l6ZW9mKCpmaHApLEdGUF9LRVJORUwpOwogCWlmICghZmhwKSB7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoZmhwLDAsc2l6ZW9mKCpmaHApKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZocC0+d2FpdF9kYXRhKTsKIAlmaHAtPmRldl9pbmZvID0gZGlwOwpAQCAtODQwLDYgKzk0Myw3IEBACiAJcHZyMl9jb250ZXh0X2VudGVyKHZwLT5jaGFubmVsLm1jX2hlYWQpOyBkbyB7CiAJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9TVFJVQ1QsIkNyZWF0aW5nIHB2cl92NGwyX2ZoIGlkPSVwIixmaHApOwogCQlwdnIyX2NoYW5uZWxfaW5pdCgmZmhwLT5jaGFubmVsLHZwLT5jaGFubmVsLm1jX2hlYWQpOworCiAJCWZocC0+dm5leHQgPSBOVUxMOwogCQlmaHAtPnZwcmV2ID0gdnAtPnZsYXN0OwogCQlpZiAodnAtPnZsYXN0KSB7CkBAIC04NDksNiArOTUzLDE4IEBACiAJCX0KIAkJdnAtPnZsYXN0ID0gZmhwOwogCQlmaHAtPnZoZWFkID0gdnA7CisKKwkJLyogT3BlbmluZyB0aGUgL2Rldi9yYWRpb1ggZGV2aWNlIGltcGxpZXMgYSBtb2RlIHN3aXRjaC4KKwkJICAgU28gZXhlY3V0ZSB0aGF0IGhlcmUuICBOb3RlIHRoYXQgeW91IGNhbiBnZXQgdGhlCisJCSAgIElERU5USUNBTCBlZmZlY3QgbWVyZWx5IGJ5IG9wZW5pbmcgdGhlIG5vcm1hbCB2aWRlbworCQkgICBkZXZpY2UgYW5kIHNldHRpbmcgdGhlIGlucHV0IGFwcHJvcHJpYXRlbHkuICovCisJCWlmIChkaXAtPnY0bF90eXBlID09IFZGTF9UWVBFX1JBRElPKSB7CisJCQlzdHJ1Y3QgcHZyMl9jdHJsICpjcDsKKwkJCWNwID0gcHZyMl9oZHdfZ2V0X2N0cmxfYnlfaWQoaGR3LFBWUjJfQ0lEX0lOUFVUKTsKKwkJCXB2cjJfY3RybF9nZXRfdmFsdWUoY3AsJmZocC0+cHJldl9pbnB1dF92YWwpOworCQkJcHZyMl9jdHJsX3NldF92YWx1ZShjcCxQVlIyX0NWQUxfSU5QVVRfUkFESU8pOworCQkJcHZyMl9oZHdfY29tbWl0X2N0bChoZHcpOworCQl9CiAJfSB3aGlsZSAoMCk7IHB2cjJfY29udGV4dF9leGl0KHZwLT5jaGFubmVsLm1jX2hlYWQpOwogCiAJZmhwLT5maWxlID0gZmlsZTsKQEAgLTg3Myw2ICs5ODksMTIgQEAKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdzsKIAlpZiAoZmgtPnJocCkgcmV0dXJuIDA7CiAKKwlpZiAoIWZoLT5kZXZfaW5mby0+c3RyZWFtKSB7CisJCS8qIE5vIHN0cmVhbSBkZWZpbmVkIGZvciB0aGlzIG5vZGUuICBUaGlzIG1lYW5zIHRoYXQgd2UncmUKKwkJICAgbm90IGN1cnJlbnRseSBhbGxvd2VkIHRvIHN0cmVhbSBmcm9tIHRoaXMgbm9kZS4gKi8KKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKIAkvKiBGaXJzdCByZWFkKCkgYXR0ZW1wdC4gIFRyeSB0byBjbGFpbSB0aGUgc3RyZWFtIGFuZCBzdGFydAogCSAgIGl0Li4uICovCiAJaWYgKChyZXQgPSBwdnIyX2NoYW5uZWxfY2xhaW1fc3RyZWFtKCZmaC0+Y2hhbm5lbCwKQEAgLTEwMTIsMjUgKzExMzQsMzcgQEAKIAogc3RhdGljIHZvaWQgcHZyMl92NGwyX2Rldl9pbml0KHN0cnVjdCBwdnIyX3Y0bDJfZGV2ICpkaXAsCiAJCQkgICAgICAgc3RydWN0IHB2cjJfdjRsMiAqdnAsCi0JCQkgICAgICAgZW51bSBwdnIyX2NvbmZpZyBjZmcpCisJCQkgICAgICAgaW50IHY0bF90eXBlKQogewogCWludCBtaW5kZXZudW07CiAJaW50IHVuaXRfbnVtYmVyOwotCWludCB2NGxfdHlwZTsKKwlpbnQgKm5yX3B0ciA9IDA7CiAJZGlwLT52NGxwID0gdnA7Ci0JZGlwLT5jb25maWcgPSBjZmc7CiAKIAotCXN3aXRjaCAoY2ZnKSB7Ci0JY2FzZSBwdnIyX2NvbmZpZ19tcGVnOgotCQl2NGxfdHlwZSA9IFZGTF9UWVBFX0dSQUJCRVI7CisJZGlwLT52NGxfdHlwZSA9IHY0bF90eXBlOworCXN3aXRjaCAodjRsX3R5cGUpIHsKKwljYXNlIFZGTF9UWVBFX0dSQUJCRVI6CiAJCWRpcC0+c3RyZWFtID0gJnZwLT5jaGFubmVsLm1jX2hlYWQtPnZpZGVvX3N0cmVhbTsKKwkJZGlwLT5jb25maWcgPSBwdnIyX2NvbmZpZ19tcGVnOworCQlkaXAtPm1pbm9yX3R5cGUgPSBwdnIyX3Y0bF90eXBlX3ZpZGVvOworCQlucl9wdHIgPSB2aWRlb19ucjsKKwkJaWYgKCFkaXAtPnN0cmVhbSkgeworCQkJZXJyKCJGYWlsZWQgdG8gc2V0IHVwIHB2cnVzYjIgdjRsIHZpZGVvIGRldiIKKwkJCSAgICAiIGR1ZSB0byBtaXNzaW5nIHN0cmVhbSBpbnN0YW5jZSIpOworCQkJcmV0dXJuOworCQl9CiAJCWJyZWFrOwotCWNhc2UgcHZyMl9jb25maWdfdmJpOgotCQl2NGxfdHlwZSA9IFZGTF9UWVBFX1ZCSTsKKwljYXNlIFZGTF9UWVBFX1ZCSToKKwkJZGlwLT5jb25maWcgPSBwdnIyX2NvbmZpZ192Ymk7CisJCWRpcC0+bWlub3JfdHlwZSA9IHB2cjJfdjRsX3R5cGVfdmJpOworCQlucl9wdHIgPSB2YmlfbnI7CiAJCWJyZWFrOwotCWNhc2UgcHZyMl9jb25maWdfcmFkaW86Ci0JCXY0bF90eXBlID0gVkZMX1RZUEVfUkFESU87CisJY2FzZSBWRkxfVFlQRV9SQURJTzoKKwkJZGlwLT5zdHJlYW0gPSAmdnAtPmNoYW5uZWwubWNfaGVhZC0+dmlkZW9fc3RyZWFtOworCQlkaXAtPmNvbmZpZyA9IHB2cjJfY29uZmlnX21wZWc7CisJCWRpcC0+bWlub3JfdHlwZSA9IHB2cjJfdjRsX3R5cGVfcmFkaW87CisJCW5yX3B0ciA9IHJhZGlvX25yOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBCYWlsIG91dCAodGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZSkgKi8KQEAgLTEwMzksMzAgKzExNzMsMjcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICghZGlwLT5zdHJlYW0pIHsKLQkJZXJyKCJGYWlsZWQgdG8gc2V0IHVwIHB2cnVzYjIgdjRsIGRldiIKLQkJICAgICIgZHVlIHRvIG1pc3Npbmcgc3RyZWFtIGluc3RhbmNlIik7Ci0JCXJldHVybjsKLQl9Ci0KIAltZW1jcHkoJmRpcC0+ZGV2YmFzZSwmdmRldl90ZW1wbGF0ZSxzaXplb2YodmRldl90ZW1wbGF0ZSkpOwogCWRpcC0+ZGV2YmFzZS5yZWxlYXNlID0gcHZyMl92aWRlb19kZXZpY2VfcmVsZWFzZTsKIAogCW1pbmRldm51bSA9IC0xOwogCXVuaXRfbnVtYmVyID0gcHZyMl9oZHdfZ2V0X3VuaXRfbnVtYmVyKHZwLT5jaGFubmVsLm1jX2hlYWQtPmhkdyk7Ci0JaWYgKCh1bml0X251bWJlciA+PSAwKSAmJiAodW5pdF9udW1iZXIgPCBQVlJfTlVNKSkgewotCQltaW5kZXZudW0gPSB2aWRlb19uclt1bml0X251bWJlcl07CisJaWYgKG5yX3B0ciAmJiAodW5pdF9udW1iZXIgPj0gMCkgJiYgKHVuaXRfbnVtYmVyIDwgUFZSX05VTSkpIHsKKwkJbWluZGV2bnVtID0gbnJfcHRyW3VuaXRfbnVtYmVyXTsKIAl9Ci0JaWYgKCh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRpcC0+ZGV2YmFzZSwgdjRsX3R5cGUsIG1pbmRldm51bSkgPCAwKSAmJgotCSAgICAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkaXAtPmRldmJhc2UsIHY0bF90eXBlLCAtMSkgPCAwKSkgewotCQllcnIoIkZhaWxlZCB0byByZWdpc3RlciBwdnJ1c2IyIHY0bCB2aWRlbyBkZXZpY2UiKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICJwdnJ1c2IyOiByZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIFslc11cbiIsCi0JCSAgICAgICBkaXAtPmRldmJhc2UubWlub3IscHZyMl9jb25maWdfZ2V0X25hbWUoZGlwLT5jb25maWcpKTsKKwlpZiAoKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGlwLT5kZXZiYXNlLAorCQkJCSAgIGRpcC0+djRsX3R5cGUsIG1pbmRldm51bSkgPCAwKSAmJgorCSAgICAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkaXAtPmRldmJhc2UsCisJCQkJICAgZGlwLT52NGxfdHlwZSwgLTEpIDwgMCkpIHsKKwkJZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgcHZydXNiMiB2NGwgZGV2aWNlIik7CiAJfQogCisJcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogcmVnaXN0ZXJlZCBkZXZpY2UgJXMldSBbJXNdXG4iLAorCSAgICAgICBnZXRfdjRsX25hbWUoZGlwLT52NGxfdHlwZSksZGlwLT5kZXZiYXNlLm1pbm9yICYgMHgxZiwKKwkgICAgICAgcHZyMl9jb25maWdfZ2V0X25hbWUoZGlwLT5jb25maWcpKTsKKwogCXB2cjJfaGR3X3Y0bF9zdG9yZV9taW5vcl9udW1iZXIodnAtPmNoYW5uZWwubWNfaGVhZC0+aGR3LAotCQkJCQlkaXAtPmRldmJhc2UubWlub3IpOworCQkJCQlkaXAtPm1pbm9yX3R5cGUsZGlwLT5kZXZiYXNlLm1pbm9yKTsKIH0KIAogCkBAIC0xMDcwLDIyICsxMjAxLDI0IEBACiB7CiAJc3RydWN0IHB2cjJfdjRsMiAqdnA7CiAKLQl2cCA9IGttYWxsb2Moc2l6ZW9mKCp2cCksR0ZQX0tFUk5FTCk7CisJdnAgPSBremFsbG9jKHNpemVvZigqdnApLEdGUF9LRVJORUwpOwogCWlmICghdnApIHJldHVybiB2cDsKLQltZW1zZXQodnAsMCxzaXplb2YoKnZwKSk7Ci0JdnAtPnZkZXYgPSBrbWFsbG9jKHNpemVvZigqdnAtPnZkZXYpLEdGUF9LRVJORUwpOwotCWlmICghdnAtPnZkZXYpIHsKKwl2cC0+ZGV2X3ZpZGVvID0ga3phbGxvYyhzaXplb2YoKnZwLT5kZXZfdmlkZW8pLEdGUF9LRVJORUwpOworCXZwLT5kZXZfcmFkaW8gPSBremFsbG9jKHNpemVvZigqdnAtPmRldl9yYWRpbyksR0ZQX0tFUk5FTCk7CisJaWYgKCEodnAtPmRldl92aWRlbyAmJiB2cC0+ZGV2X3JhZGlvKSkgeworCQlrZnJlZSh2cC0+ZGV2X3ZpZGVvKTsKKwkJa2ZyZWUodnAtPmRldl9yYWRpbyk7CiAJCWtmcmVlKHZwKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldCh2cC0+dmRldiwwLHNpemVvZigqdnAtPnZkZXYpKTsKIAlwdnIyX2NoYW5uZWxfaW5pdCgmdnAtPmNoYW5uZWwsbW5wKTsKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfU1RSVUNULCJDcmVhdGluZyBwdnIyX3Y0bDIgaWQ9JXAiLHZwKTsKIAogCXZwLT5jaGFubmVsLmNoZWNrX2Z1bmMgPSBwdnIyX3Y0bDJfaW50ZXJuYWxfY2hlY2s7CiAKIAkvKiByZWdpc3RlciBzdHJlYW1zICovCi0JcHZyMl92NGwyX2Rldl9pbml0KHZwLT52ZGV2LHZwLHB2cjJfY29uZmlnX21wZWcpOworCXB2cjJfdjRsMl9kZXZfaW5pdCh2cC0+ZGV2X3ZpZGVvLHZwLFZGTF9UWVBFX0dSQUJCRVIpOworCXB2cjJfdjRsMl9kZXZfaW5pdCh2cC0+ZGV2X3JhZGlvLHZwLFZGTF9UWVBFX1JBRElPKTsKIAogCXJldHVybiB2cDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmMKaW5kZXggMDVmMmNkZC4uNjFlZmE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmMKQEAgLTY2LDcgKzY2LDkgQEAKIAkJcm91dGUuaW5wdXQgPSBTQUE3MTE1X1NWSURFTzI7CiAJCWJyZWFrOwogCWNhc2UgUFZSMl9DVkFMX0lOUFVUX1JBRElPOgotCQkvLyA/Pz8/PyBObyBpZGVhIHlldCB3aGF0IHRvIGRvIGhlcmUKKwkJLy8gSW4gcmFkaW8gbW9kZSwgd2UgbXV0ZSB0aGUgdmlkZW8sIGJ1dCBwb2ludCBhdCBvbmUKKwkJLy8gc3BvdCBqdXN0IHRvIHN0YXkgY29uc2lzdGVudAorCQlyb3V0ZS5pbnB1dCA9IFNBQTcxMTVfQ09NUE9TSVRFNTsKIAlkZWZhdWx0OgogCQlyZXR1cm47CiAJfQpAQCAtMTM3LDggKzEzOSw3IEBACiAJdW5zaWduZWQgbG9uZyBtc2s7CiAJdW5zaWduZWQgaW50IGlkeDsKIAotCWZvciAoaWR4ID0gMDsgaWR4IDwgc2l6ZW9mKGRlY29kZXJfb3BzKS9zaXplb2YoZGVjb2Rlcl9vcHNbMF0pOwotCSAgICAgaWR4KyspIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpOyBpZHgrKykgewogCQltc2sgPSAxIDw8IGlkeDsKIAkJaWYgKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spIGNvbnRpbnVlOwogCQlpZiAoZGVjb2Rlcl9vcHNbaWR4XS5jaGVjayhjdHh0KSkgewpAQCAtMTU0LDggKzE1NSw3IEBACiAJdW5zaWduZWQgbG9uZyBtc2s7CiAJdW5zaWduZWQgaW50IGlkeDsKIAotCWZvciAoaWR4ID0gMDsgaWR4IDwgc2l6ZW9mKGRlY29kZXJfb3BzKS9zaXplb2YoZGVjb2Rlcl9vcHNbMF0pOwotCSAgICAgaWR4KyspIHsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpOyBpZHgrKykgewogCQltc2sgPSAxIDw8IGlkeDsKIAkJaWYgKCEoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykpIGNvbnRpbnVlOwogCQljdHh0LT5zdGFsZV9tYXNrICY9IH5tc2s7CkBAIC0xODMsMjUgKzE4MywxMyBAQAogfQogCiAKLXN0YXRpYyBpbnQgZGVjb2Rlcl9pc190dW5lZChzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQlzdHJ1Y3QgdjRsMl90dW5lciB2dDsKLQlpbnQgcmV0OwotCi0JbWVtc2V0KCZ2dCwwLHNpemVvZih2dCkpOwotCXJldCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19HX1RVTkVSLCZ2dCk7Ci0JaWYgKHJldCA8IDApIHJldHVybiAtRUlOVkFMOwotCXJldHVybiB2dC5zaWduYWwgPyAxIDogMDsKLX0KLQotCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlY29kZXJfZGVzY3JpYmUoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQsY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpCiB7CiAJcmV0dXJuIHNjbnByaW50ZihidWYsY250LCJoYW5kbGVyOiBwdnJ1c2IyLXZpZGVvLXY0bCIpOwogfQogCiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgaGZ1bmNzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyBoZnVuY3MgPSB7CiAJLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfZGV0YWNoLAogCS5jaGVjayA9IChpbnQgKCopKHZvaWQgKikpZGVjb2Rlcl9jaGVjaywKIAkudXBkYXRlID0gKHZvaWQgKCopKHZvaWQgKikpZGVjb2Rlcl91cGRhdGUsCkBAIC0yMTgsMjAgKzIwNiwxNyBAQAogCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7CiAJaWYgKCFkZWNvZGVyX2RldGVjdChjcCkpIHJldHVybiAwOwogCi0JY3R4dCA9IGttYWxsb2Moc2l6ZW9mKCpjdHh0KSxHRlBfS0VSTkVMKTsKKwljdHh0ID0ga3phbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOwogCWlmICghY3R4dCkgcmV0dXJuIDA7Ci0JbWVtc2V0KGN0eHQsMCxzaXplb2YoKmN0eHQpKTsKIAogCWN0eHQtPmhhbmRsZXIuZnVuY19kYXRhID0gY3R4dDsKIAljdHh0LT5oYW5kbGVyLmZ1bmNfdGFibGUgPSAmaGZ1bmNzOwogCWN0eHQtPmN0cmwuY3R4dCA9IGN0eHQ7CiAJY3R4dC0+Y3RybC5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX2RldGFjaDsKIAljdHh0LT5jdHJsLmVuYWJsZSA9ICh2b2lkICgqKSh2b2lkICosaW50KSlkZWNvZGVyX2VuYWJsZTsKLQljdHh0LT5jdHJsLnR1bmVkID0gKGludCAoKikodm9pZCAqKSlkZWNvZGVyX2lzX3R1bmVkOwogCWN0eHQtPmNsaWVudCA9IGNwOwogCWN0eHQtPmhkdyA9IGhkdzsKLQljdHh0LT5zdGFsZV9tYXNrID0gKDEgPDwgKHNpemVvZihkZWNvZGVyX29wcykvCi0JCQkJICBzaXplb2YoZGVjb2Rlcl9vcHNbMF0pKSkgLSAxOworCWN0eHQtPnN0YWxlX21hc2sgPSAoMSA8PCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKSkgLSAxOwogCWhkdy0+ZGVjb2Rlcl9jdHJsID0gJmN0eHQtPmN0cmw7CiAJY3AtPmhhbmRsZXIgPSAmY3R4dC0+aGFuZGxlcjsKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyAweCV4IHNhYTcxMXggVjRMMiBoYW5kbGVyIHNldCB1cCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5jCmluZGV4IDI0MTNlNTEuLjY2YjRkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5jCkBAIC01MCwxNSArNTAsMjEgQEAKIHsKIAlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCWludCBtc2sgPSAwOwogCiAJbWVtc2V0KCZyb3V0ZSwwLHNpemVvZihyb3V0ZSkpOwogCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgd204Nzc1IHNldF9pbnB1dCh2YWw9JWQgbXNrPTB4JXgpIiwKLQkJICAgaGR3LT5pbnB1dF92YWwsbXNrKTsKKwlzd2l0Y2goaGR3LT5pbnB1dF92YWwpIHsKKwljYXNlIFBWUjJfQ1ZBTF9JTlBVVF9SQURJTzoKKwkJcm91dGUuaW5wdXQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBBbGwgb3RoZXIgY2FzZXMganVzdCB1c2UgdGhlIHNlY29uZCBpbnB1dCAqLworCQlyb3V0ZS5pbnB1dCA9IDI7CisJCWJyZWFrOworCX0KKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB3bTg3NzUgc2V0X2lucHV0KHZhbD0lZCByb3V0ZT0weCV4KSIsCisJCSAgIGhkdy0+aW5wdXRfdmFsLHJvdXRlLmlucHV0KTsKIAotCS8vIEFsd2F5cyBwb2ludCB0byBpbnB1dCAjMSBubyBtYXR0ZXIgd2hhdAotCXJvdXRlLmlucHV0ID0gMjsKIAlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywmcm91dGUpOwogfQogCkBAIC05OSw4ICsxMDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgbXNrOwogCXVuc2lnbmVkIGludCBpZHg7CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHNpemVvZih3bTg3NzVfb3BzKS9zaXplb2Yod204Nzc1X29wc1swXSk7Ci0JICAgICBpZHgrKykgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRSh3bTg3NzVfb3BzKTsgaWR4KyspIHsKIAkJbXNrID0gMSA8PCBpZHg7CiAJCWlmIChjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSBjb250aW51ZTsKIAkJaWYgKHdtODc3NV9vcHNbaWR4XS5jaGVjayhjdHh0KSkgewpAQCAtMTE2LDggKzEyMSw3IEBACiAJdW5zaWduZWQgbG9uZyBtc2s7CiAJdW5zaWduZWQgaW50IGlkeDsKIAotCWZvciAoaWR4ID0gMDsgaWR4IDwgc2l6ZW9mKHdtODc3NV9vcHMpL3NpemVvZih3bTg3NzVfb3BzWzBdKTsKLQkgICAgIGlkeCsrKSB7CisJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHdtODc3NV9vcHMpOyBpZHgrKykgewogCQltc2sgPSAxIDw8IGlkeDsKIAkJaWYgKCEoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykpIGNvbnRpbnVlOwogCQljdHh0LT5zdGFsZV9tYXNrICY9IH5tc2s7CkBAIC0xMjYsNyArMTMwLDcgQEAKIH0KIAogCi1jb25zdCBzdGF0aWMgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIGhmdW5jcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgaGZ1bmNzID0gewogCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSl3bTg3NzVfZGV0YWNoLAogCS5jaGVjayA9IChpbnQgKCopKHZvaWQgKikpd204Nzc1X2NoZWNrLAogCS51cGRhdGUgPSAodm9pZCAoKikodm9pZCAqKSl3bTg3NzVfdXBkYXRlLApAQCAtMTQwLDE2ICsxNDQsMTQgQEAKIAogCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7CiAKLQljdHh0ID0ga21hbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOworCWN0eHQgPSBremFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7CiAJaWYgKCFjdHh0KSByZXR1cm4gMDsKLQltZW1zZXQoY3R4dCwwLHNpemVvZigqY3R4dCkpOwogCiAJY3R4dC0+aGFuZGxlci5mdW5jX2RhdGEgPSBjdHh0OwogCWN0eHQtPmhhbmRsZXIuZnVuY190YWJsZSA9ICZoZnVuY3M7CiAJY3R4dC0+Y2xpZW50ID0gY3A7CiAJY3R4dC0+aGR3ID0gaGR3OwotCWN0eHQtPnN0YWxlX21hc2sgPSAoMSA8PCAoc2l6ZW9mKHdtODc3NV9vcHMpLwotCQkJCSAgc2l6ZW9mKHdtODc3NV9vcHNbMF0pKSkgLSAxOworCWN0eHQtPnN0YWxlX21hc2sgPSAoMSA8PCBBUlJBWV9TSVpFKHdtODc3NV9vcHMpKSAtIDE7CiAJY3AtPmhhbmRsZXIgPSAmY3R4dC0+aGFuZGxlcjsKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyAweCV4IHdtODc3NSBWNEwyIGhhbmRsZXIgc2V0IHVwIiwKIAkJICAgY3AtPmNsaWVudC0+YWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL01ha2VmaWxlCmluZGV4IDlkYjIyNjAuLmY1YzhlYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL01ha2VmaWxlCkBAIC0yLDExICsyLDMgQEAKIHB3Yy1vYmpzCSs9IHB3Yy1kZWMxLm8gcHdjLWRlYzIzLm8gcHdjLWtpYXJhLm8gcHdjLXRpbW9uLm8KIAogb2JqLSQoQ09ORklHX1VTQl9QV0MpICs9IHB3Yy5vCi0KLWlmZXEgKCQoQ09ORklHX1VTQl9QV0NfREVCVUcpLHkpCi1FWFRSQV9DRkxBR1MgKz0gLURDT05GSUdfUFdDX0RFQlVHPTEKLWVsc2UKLUVYVFJBX0NGTEFHUyArPSAtRENPTkZJR19QV0NfREVCVUc9MAotZW5kaWYKLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCmluZGV4IDk4MjVmZDMuLjI3ZWQ3NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIHN0YXRpYyBpbnQgZGVmYXVsdF9mcHMgPSAxMDsKIHN0YXRpYyBpbnQgZGVmYXVsdF9mYnVmcyA9IDM7ICAgLyogRGVmYXVsdCBudW1iZXIgb2YgZnJhbWUgYnVmZmVycyAqLwogICAgICAgIGludCBwd2NfbWJ1ZnMgPSAyOwkvKiBEZWZhdWx0IG51bWJlciBvZiBtbWFwKCkgYnVmZmVycyAqLwotI2lmIENPTkZJR19QV0NfREVCVUcKKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19ERUJVRwogICAgICAgIGludCBwd2NfdHJhY2UgPSBQV0NfREVCVUdfTEVWRUw7CiAjZW5kaWYKIHN0YXRpYyBpbnQgcG93ZXJfc2F2ZSA9IDA7CkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYnV0dG9uKTsKIH0KIAotI2lmIENPTkZJR19QV0NfREVCVUcKKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIgKnB3Y19zZW5zb3JfdHlwZV90b19zdHJpbmcodW5zaWduZWQgaW50IHNlbnNvcl90eXBlKQogewogCXN3aXRjaChzZW5zb3JfdHlwZSkgewpAQCAtMTgzNSw3ICsxODM1LDcgQEAKIG1vZHVsZV9wYXJhbShmcHMsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oZmJ1ZnMsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0obWJ1ZnMsIGludCwgMDQ0NCk7Ci0jaWYgQ09ORklHX1BXQ19ERUJVRworI2lmZGVmIENPTkZJR19VU0JfUFdDX0RFQlVHCiBtb2R1bGVfcGFyYW1fbmFtZWQodHJhY2UsIHB3Y190cmFjZSwgaW50LCAwNjQ0KTsKICNlbmRpZgogbW9kdWxlX3BhcmFtKHBvd2VyX3NhdmUsIGludCwgMDQ0NCk7CkBAIC0xOTA4LDcgKzE5MDgsNyBAQAogCQlkZWZhdWx0X2ZidWZzID0gZmJ1ZnM7CiAJCVBXQ19ERUJVR19NT0RVTEUoIk51bWJlciBvZiBmcmFtZSBidWZmZXJzIHNldCB0byAlZC5cbiIsIGRlZmF1bHRfZmJ1ZnMpOwogCX0KLSNpZiBDT05GSUdfUFdDX0RFQlVHCisjaWZkZWYgQ09ORklHX1VTQl9QV0NfREVCVUcKIAlpZiAocHdjX3RyYWNlID49IDApIHsKIAkJUFdDX0RFQlVHX01PRFVMRSgiVHJhY2Ugb3B0aW9uczogMHglMDR4XG4iLCBwd2NfdHJhY2UpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy12NGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy12NGwuYwppbmRleCBiN2ViM2NlLi5kNWU2YmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jCkBAIC0zNTAsNyArMzUwLDcgQEAKIAlpZiAocGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotI2lmIENPTkZJR19QV0NfREVCVUcKKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19ERUJVRwogCWlmIChQV0NfREVCVUdfTEVWRUxfSU9DVEwgJiBwd2NfdHJhY2UpCiAJCXY0bF9wcmludGtfaW9jdGwoY21kKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaAppbmRleCA3ZTljNDIzLi5lNzc4YTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaApAQCAtMzksMTEgKzM5LDYgQEAKICNpbmNsdWRlICJwd2MtdW5jb21wcmVzcy5oIgogI2luY2x1ZGUgPG1lZGlhL3B3Yy1pb2N0bC5oPgogCi0vKiBUdXJuIHNvbWUgZGVidWdnaW5nIG9wdGlvbnMgb24vb2ZmICovCi0jaWZuZGVmIENPTkZJR19QV0NfREVCVUcKLSNkZWZpbmUgQ09ORklHX1BXQ19ERUJVRyAxCi0jZW5kaWYKLQogLyogVmVyc2lvbiBibG9jayAqLwogI2RlZmluZSBQV0NfTUFKT1IJMTAKICNkZWZpbmUgUFdDX01JTk9SCTAKQEAgLTc2LDcgKzcxLDcgQEAKICNkZWZpbmUgUFdDX0RFQlVHX1RSQUNFKGZtdCwgYXJncy4uLikgUFdDX0RFQlVHKFRSQUNFLCBmbXQsICMjYXJncykKIAogCi0jaWYgQ09ORklHX1BXQ19ERUJVRworI2lmZGVmIENPTkZJR19VU0JfUFdDX0RFQlVHCiAKICNkZWZpbmUgUFdDX0RFQlVHX0xFVkVMCShQV0NfREVCVUdfTEVWRUxfTU9EVUxFKQogCkBAIC0yNzAsNyArMjY1LDcgQEAKICNlbmRpZgogCiAvKiBHbG9iYWwgdmFyaWFibGVzICovCi0jaWYgQ09ORklHX1BXQ19ERUJVRworI2lmZGVmIENPTkZJR19VU0JfUFdDX0RFQlVHCiBleHRlcm4gaW50IHB3Y190cmFjZTsKICNlbmRpZgogZXh0ZXJuIGludCBwd2NfbWJ1ZnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKaW5kZXggNzZmNWY1ZC4uZTIwYWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspCiAJewogCQltZW1zZXQodC0+cGdidWZbcGdidWZdLCAnICcsIHNpemVvZih0LT5wZ2J1ZlswXSkpOwotCQl0LT5pc19zZWFyY2hpbmdbcGdidWZdID0gRkFMU0U7CisJCXQtPmlzX3NlYXJjaGluZ1twZ2J1Zl0gPSBmYWxzZTsKIAl9CiAJdmQtPnByaXY9dDsKIApAQCAtMTk4LDcgKzE5OCw3IEBACiAKIC8qIEdldCBjb3VudCBudW1iZXIgb2YgYnl0ZXMgZnJvbSBJskMtZGV2aWNlIGF0IGFkZHJlc3MgYWRyLCBzdG9yZSB0aGVtIGluIGJ1Zi4KICAqIFN0YXJ0ICYgc3RvcCBoYW5kc2hha2luZyBpcyBkb25lIGJ5IHRoaXMgcm91dGluZSwgYWNrIHdpbGwgYmUgc2VudCBhZnRlciB0aGUKLSAqIGxhc3QgYnl0ZSB0byBpbmhpYml0IGZ1cnRoZXIgc2VuZGluZyBvZiBkYXRhLiBJZiB1YWNjZXNzIGlzIFRSVUUsIGRhdGEgaXMKKyAqIGxhc3QgYnl0ZSB0byBpbmhpYml0IGZ1cnRoZXIgc2VuZGluZyBvZiBkYXRhLiBJZiB1YWNjZXNzIGlzICd0cnVlJywgZGF0YSBpcwogICogd3JpdHRlbiB0byB1c2VyLXNwYWNlIHdpdGggcHV0X3VzZXIuIFJldHVybnMgLTEgaWYgSbJDLWRldmljZSBkaWRuJ3Qgc2VuZAogICogYWNrbm93bGVkZ2UsIDAgb3RoZXJ3aXNlCiAgKi8KQEAgLTMzOCw3ICszMzgsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQl0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0gPSBUUlVFOworCXQtPmlzX3NlYXJjaGluZ1tyZXEtPnBnYnVmXSA9IHRydWU7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCQl9CiAJfQogCWlmICghaW5mby0+aGFtbWluZyAmJiAhaW5mby0+bm90Zm91bmQpCi0JCXQtPmlzX3NlYXJjaGluZ1tkYXVfbm9dID0gRkFMU0U7CisJCXQtPmlzX3NlYXJjaGluZ1tkYXVfbm9dID0gZmFsc2U7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2NCw3ICs1NjQsNyBAQAogCXsKIAkJcmV0dXJuIC1FSU87CiAJfQotCXQtPmlzX3NlYXJjaGluZ1tkYXVfbm9dID0gRkFMU0U7CisJdC0+aXNfc2VhcmNoaW5nW2RhdV9ub10gPSBmYWxzZTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5oCmluZGV4IDdiOTExMTIuLjY0Mzk0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmgKQEAgLTQxLDIzICs0MSwxOCBAQAogI2RlZmluZSBQT1NfSEVBREVSX1NUQVJUIDcKICNkZWZpbmUgUE9TX0hFQURFUl9FTkQgMzEKIAotLyogUmV0dXJucyBUUlVFIGlmIHRoZSBwYXJ0IG9mIHRoZSB2aWRlb3RleHQgcGFnZSBkZXNjcmliZWQgd2l0aCByZXEgY29udGFpbnMKKy8qIFJldHVybnMgJ3RydWUnIGlmIHRoZSBwYXJ0IG9mIHRoZSB2aWRlb3RleHQgcGFnZSBkZXNjcmliZWQgd2l0aCByZXEgY29udGFpbnMKICAgIChhdCBsZWFzdCBwYXJ0cyBvZikgdGhlIHRpbWUgZmllbGQgKi8KICNkZWZpbmUgUkVRX0NPTlRBSU5TX1RJTUUocF9yZXEpIFwKIAkoKHBfcmVxKS0+c3RhcnQgPD0gUE9TX1RJTUVfRU5EICYmIFwKIAkgKHBfcmVxKS0+ZW5kICAgPj0gUE9TX1RJTUVfU1RBUlQpCiAKLS8qIFJldHVybnMgVFJVRSBpZiB0aGUgcGFydCBvZiB0aGUgdmlkZW90ZXh0IHBhZ2UgZGVzY3JpYmVkIHdpdGggcmVxIGNvbnRhaW5zCisvKiBSZXR1cm5zICd0cnVlJyBpZiB0aGUgcGFydCBvZiB0aGUgdmlkZW90ZXh0IHBhZ2UgZGVzY3JpYmVkIHdpdGggcmVxIGNvbnRhaW5zCiAgICAoYXQgbGVhc3QgcGFydHMgb2YpIHRoZSBwYWdlIGhlYWRlciAqLwogI2RlZmluZSBSRVFfQ09OVEFJTlNfSEVBREVSKHBfcmVxKSBcCiAJKChwX3JlcSktPnN0YXJ0IDw9IFBPU19IRUFERVJfRU5EICYmIFwKIAkgKHBfcmVxKS0+ZW5kICAgPj0gUE9TX0hFQURFUl9TVEFSVCkKIAotI2lmbmRlZiBGQUxTRQotI2RlZmluZSBGQUxTRSAwCi0jZGVmaW5lIFRSVUUgMQotI2VuZGlmCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIE1vZGUgcmVnaXN0ZXIgbnVtYmVycyBvZiB0aGUgU0FBNTI0NkEJCQkJICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYwppbmRleCAzZTg0NzM3Li5mMmEyZjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYwpAQCAtMTI0LDExICsxMjQsNiBAQAogCiAvKiBHZW5lcmFsIGRlZmluZXMgYW5kIGRlYnVnZ2luZyBzdXBwb3J0ICovCiAKLSNpZm5kZWYgRkFMU0UKLSNkZWZpbmUgRkFMU0UgMAotI2RlZmluZSBUUlVFIDEKLSNlbmRpZgotCiAjZGVmaW5lIFJFU0NIRUQgZG8geyBjb25kX3Jlc2NoZWQoKTsgfSB3aGlsZSgwKQogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzYWFfdGVtcGxhdGU7CS8qIERlY2xhcmVkIG5lYXIgYm90dG9tICovCkBAIC0xODMsOSArMTc4LDkgQEAKIAkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnNyZWdzLCAwLCBzaXplb2YodC0+dmRhdVswXS5zcmVncykpOwogCQltZW1zZXQodC0+dmRhdVtwZ2J1Zl0ubGFzdHN0YXQsIDAsIHNpemVvZih0LT52ZGF1WzBdLmxhc3RzdGF0KSk7CiAJCXQtPnZkYXVbcGdidWZdLmV4cGlyZSA9IDA7Ci0JCXQtPnZkYXVbcGdidWZdLmNscmZvdW5kID0gVFJVRTsKLQkJdC0+dmRhdVtwZ2J1Zl0uc3RvcHBlZCA9IFRSVUU7Ci0JCXQtPmlzX3NlYXJjaGluZ1twZ2J1Zl0gPSBGQUxTRTsKKwkJdC0+dmRhdVtwZ2J1Zl0uY2xyZm91bmQgPSB0cnVlOworCQl0LT52ZGF1W3BnYnVmXS5zdG9wcGVkID0gdHJ1ZTsKKwkJdC0+aXNfc2VhcmNoaW5nW3BnYnVmXSA9IGZhbHNlOwogCX0KIAl2ZC0+cHJpdj10OwogCkBAIC0yOTgsNyArMjkzLDcgQEAKIAogLyogR2V0IGNvdW50IG51bWJlciBvZiBieXRlcyBmcm9tIEmyQy1kZXZpY2UgYXQgYWRkcmVzcyBhZHIsIHN0b3JlIHRoZW0gaW4gYnVmLiBTdGFydCAmIHN0b3AKICAqIGhhbmRzaGFraW5nIGlzIGRvbmUgYnkgdGhpcyByb3V0aW5lLCBhY2sgd2lsbCBiZSBzZW50IGFmdGVyIHRoZSBsYXN0IGJ5dGUgdG8gaW5oaWJpdCBmdXJ0aGVyCi0gKiBzZW5kaW5nIG9mIGRhdGEuIElmIHVhY2Nlc3MgaXMgVFJVRSwgZGF0YSBpcyB3cml0dGVuIHRvIHVzZXItc3BhY2Ugd2l0aCBwdXRfdXNlci4KKyAqIHNlbmRpbmcgb2YgZGF0YS4gSWYgdWFjY2VzcyBpcyAndHJ1ZScsIGRhdGEgaXMgd3JpdHRlbiB0byB1c2VyLXNwYWNlIHdpdGggcHV0X3VzZXIuCiAgKiBSZXR1cm5zIC0xIGlmIEmyQy1kZXZpY2UgZGlkbid0IHNlbmQgYWNrbm93bGVkZ2UsIDAgb3RoZXJ3aXNlCiAgKi8KIApAQCAtMzE3LDcgKzMxMiw3IEBACiBzdGF0aWMgaW50IGRvX3NhYTUyNDlfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCXN0YXRpYyBpbnQgdmlydHVhbF9tb2RlID0gRkFMU0U7CisJc3RhdGljIGludCB2aXJ0dWFsX21vZGUgPSBmYWxzZTsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0PXZkLT5wcml2OwogCkBAIC0zNDAsNyArMzM1LDcgQEAKIAkJCWlmIChyZXEtPnBnYnVmIDwgMCB8fCByZXEtPnBnYnVmID49IE5VTV9EQVVTKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJbWVtc2V0KHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYsICcgJywgc2l6ZW9mKHQtPnZkYXVbMF0ucGdidWYpKTsKLQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uY2xyZm91bmQgPSBUUlVFOworCQkJdC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCA9IHRydWU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC0zNTAsNyArMzQ1LDcgQEAKIAogCQkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLmNscmZvdW5kID0gVFJVRTsKKwkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uY2xyZm91bmQgPSB0cnVlOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtMzc2LDkgKzM3MSw5IEBACiAJCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzRdID0gKHJlcS0+cGFnZW1hc2sgJiBIUl9VTklUID8gMHgxMCA6IDApIHwgKHJlcS0+aG91ciAmIDB4Zik7CiAJCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzVdID0gKHJlcS0+cGFnZW1hc2sgJiBNSU5fVEVOID8gMHgxMCA6IDApIHwgKHJlcS0+bWludXRlIC8gMHgxMCk7CiAJCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzZdID0gKHJlcS0+cGFnZW1hc2sgJiBNSU5fVU5JVCA/IDB4MTAgOiAwKSB8IChyZXEtPm1pbnV0ZSAmIDB4Zik7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSBGQUxTRTsKLQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uY2xyZm91bmQgPSBUUlVFOwotCQkJdC0+aXNfc2VhcmNoaW5nW3JlcS0+cGdidWZdID0gVFJVRTsKKwkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uc3RvcHBlZCA9IGZhbHNlOworCQkJdC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCA9IHRydWU7CisJCQl0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0gPSB0cnVlOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtNDMwLDcgKzQyNSw3IEBACiAJCQkJCQkJaTJjX2dldGRhdGEodCwgNDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUgKyAyMyAqIDQwKSkKIAkJCQkJCQlyZXR1cm4gLUVJTzsKIAkJCQkJfQotCQkJCQl0LT52ZGF1W3JlcS0+cGdidWZdLmNscmZvdW5kID0gRkFMU0U7CisJCQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uY2xyZm91bmQgPSBmYWxzZTsKIAkJCQkJbWVtY3B5KHQtPnZkYXVbcmVxLT5wZ2J1Zl0ubGFzdHN0YXQsIGluZm9iaXRzLCBzaXplb2YoaW5mb2JpdHMpKTsKIAkJCQl9CiAJCQkJZWxzZQpAQCAtNDc0LDcgKzQ2OSw3IEBACiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlpZiAoIWluZm8uaGFtbWluZyAmJiAhaW5mby5ub3Rmb3VuZCkKIAkJCXsKLQkJCQl0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0gPSBGQUxTRTsKKwkJCQl0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0gPSBmYWxzZTsKIAkJCX0KIAkJCXJldHVybiAwOwogCQl9CkBAIC01MzAsOCArNTI1LDggQEAKIAogCQkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSBUUlVFOwotCQkJdC0+aXNfc2VhcmNoaW5nW3JlcS0+cGdidWZdID0gRkFMU0U7CisJCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSB0cnVlOworCQkJdC0+aXNfc2VhcmNoaW5nW3JlcS0+cGdidWZdID0gZmFsc2U7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC02NjAsMTEgKzY1NSwxMSBAQAogCQltZW1zZXQodC0+dmRhdVtwZ2J1Zl0uc3JlZ3MsIDAsIHNpemVvZih0LT52ZGF1WzBdLnNyZWdzKSk7CiAJCW1lbXNldCh0LT52ZGF1W3BnYnVmXS5sYXN0c3RhdCwgMCwgc2l6ZW9mKHQtPnZkYXVbMF0ubGFzdHN0YXQpKTsKIAkJdC0+dmRhdVtwZ2J1Zl0uZXhwaXJlID0gMDsKLQkJdC0+dmRhdVtwZ2J1Zl0uY2xyZm91bmQgPSBUUlVFOwotCQl0LT52ZGF1W3BnYnVmXS5zdG9wcGVkID0gVFJVRTsKLQkJdC0+aXNfc2VhcmNoaW5nW3BnYnVmXSA9IEZBTFNFOworCQl0LT52ZGF1W3BnYnVmXS5jbHJmb3VuZCA9IHRydWU7CisJCXQtPnZkYXVbcGdidWZdLnN0b3BwZWQgPSB0cnVlOworCQl0LT5pc19zZWFyY2hpbmdbcGdidWZdID0gZmFsc2U7CiAJfQotCXQtPnZpcnR1YWxfbW9kZT1GQUxTRTsKKwl0LT52aXJ0dWFsX21vZGUgPSBmYWxzZTsKIAlyZXR1cm4gMDsKIAogIGZhaWw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IGMyMzc0ZWQuLmM0ZjA2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC03MSw2ICs3MSw3IEBACiBzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSB7CiAJdjRsMl9zdGRfaWQgc3RkOwogCWludCBpbnB1dDsKKwlpbnQgb3V0cHV0OwogCWludCBlbmFibGU7CiAJaW50IHJhZGlvOwogCWludCBicmlnaHQ7CkBAIC0xMzAxLDcgKzEzMDIsNyBAQAogCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKIAogCQlyb3V0ZS0+aW5wdXQgPSBzdGF0ZS0+aW5wdXQ7Ci0JCXJvdXRlLT5vdXRwdXQgPSAwOworCQlyb3V0ZS0+b3V0cHV0ID0gc3RhdGUtPm91dHB1dDsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMzA5LDcgKzEzMTAsNyBAQAogCXsKIAkJc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CiAKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZGVjb2RlciBzZXQgaW5wdXQgJWRcbiIsIHJvdXRlLT5pbnB1dCk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IGlucHV0ICVkIG91dHB1dCAlZFxuIiwgcm91dGUtPmlucHV0LCByb3V0ZS0+b3V0cHV0KTsKIAkJLyogc2FhNzExMyBkb2VzIG5vdCBoYXZlIHRoZXNlIGlucHV0cyAqLwogCQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMyAmJgogCQkgICAgKHJvdXRlLT5pbnB1dCA9PSBTQUE3MTE1X0NPTVBPU0lURTQgfHwKQEAgLTEzMTgsMTAgKzEzMTksMTIgQEAKIAkJfQogCQlpZiAocm91dGUtPmlucHV0ID4gU0FBNzExNV9TVklERU8zKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChzdGF0ZS0+aW5wdXQgPT0gcm91dGUtPmlucHV0KQorCQlpZiAocm91dGUtPm91dHB1dCA+IFNBQTcxMTVfSVBPUlRfT04pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHN0YXRlLT5pbnB1dCA9PSByb3V0ZS0+aW5wdXQgJiYgc3RhdGUtPm91dHB1dCA9PSByb3V0ZS0+b3V0cHV0KQogCQkJYnJlYWs7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vdyBzZXR0aW5nICVzIGlucHV0XG4iLAotCQkJKHJvdXRlLT5pbnB1dCA+PSBTQUE3MTE1X1NWSURFTzApID8gIlMtVmlkZW8iIDogIkNvbXBvc2l0ZSIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3cgc2V0dGluZyAlcyBpbnB1dCAlcyBvdXRwdXRcbiIsCisJCQkocm91dGUtPmlucHV0ID49IFNBQTcxMTVfU1ZJREVPMCkgPyAiUy1WaWRlbyIgOiAiQ29tcG9zaXRlIiwgKHJvdXRlLT5vdXRwdXQgPT0gU0FBNzExNV9JUE9SVF9PTikgPyAiaXBvcnQgb24iIDogImlwb3J0IG9mZiIpOwogCQlzdGF0ZS0+aW5wdXQgPSByb3V0ZS0+aW5wdXQ7CiAKIAkJLyogc2VsZWN0IG1vZGUgKi8KQEAgLTEzMzMsNiArMTMzNiwxNCBAQAogCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8wOV9MVU1BX0NOVEwsCiAJCQkgICAgICAoc2FhNzExeF9yZWFkKGNsaWVudCwgUl8wOV9MVU1BX0NOVEwpICYgMHg3ZikgfAogCQkJICAgICAgIChzdGF0ZS0+aW5wdXQgPj0gU0FBNzExNV9TVklERU8wID8gMHg4MCA6IDB4MCkpOworCisJCXN0YXRlLT5vdXRwdXQgPSByb3V0ZS0+b3V0cHV0OworCQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExNCB8fAorCQkJc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExNSkgeworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfODNfWF9QT1JUX0lfT19FTkFfQU5EX09VVF9DTEssCisJCQkgICAgICAoc2FhNzExeF9yZWFkKGNsaWVudCwgUl84M19YX1BPUlRfSV9PX0VOQV9BTkRfT1VUX0NMSykgJiAweGZlKSB8CisJCQkgICAgICAgKHN0YXRlLT5vdXRwdXQgJiAweDAxKSk7CisJCX0KIAkJYnJlYWs7CiAJfQogCkBAIC0xMzc3LDYgKzEzODgsOSBAQAogCXsKIAkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhICpkYXRhID0gYXJnOwogCisJCS8qIE5vdGU6IHRoZSBpbnRlcm5hbCBmaWVsZCBJRCBpcyBpbnZlcnRlZCBmb3IgTlRTQywKKwkJICAgc28gZGF0YS0+ZmllbGQgMCBtYXBzIHRvIHRoZSBzYWE3MTE1IGV2ZW4gZmllbGQsCisJCSAgIHdoZXJlYXMgZm9yIFBBTCBpdCBtYXBzIHRvIHRoZSBzYWE3MTE1IG9kZCBmaWVsZC4gKi8KIAkJc3dpdGNoIChkYXRhLT5pZCkgewogCQljYXNlIFY0TDJfU0xJQ0VEX1dTU182MjU6CiAJCQlpZiAoc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2YikgJiAweGMwKQpAQCAtMTM4NywxNyArMTQwMSwxNyBAQAogCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgogCQkJaWYgKGRhdGEtPmZpZWxkID09IDApIHsKIAkJCQkvKiBDQyAqLwotCQkJCWlmIChzYWE3MTF4X3JlYWQoY2xpZW50LCAweDY2KSAmIDB4YzApCisJCQkJaWYgKHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NjYpICYgMHgzMCkKIAkJCQkJcmV0dXJuIC1FSU87Ci0JCQkJZGF0YS0+ZGF0YVswXSA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NjcpOwotCQkJCWRhdGEtPmRhdGFbMV0gPSBzYWE3MTF4X3JlYWQoY2xpZW50LCAweDY4KTsKKwkJCQlkYXRhLT5kYXRhWzBdID0gc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2OSk7CisJCQkJZGF0YS0+ZGF0YVsxXSA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NmEpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJLyogWERTICovCi0JCQlpZiAoc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2NikgJiAweDMwKQorCQkJaWYgKHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NjYpICYgMHhjMCkKIAkJCQlyZXR1cm4gLUVJTzsKLQkJCWRhdGEtPmRhdGFbMF0gPSBzYWE3MTF4X3JlYWQoY2xpZW50LCAweDY5KTsKLQkJCWRhdGEtPmRhdGFbMV0gPSBzYWE3MTF4X3JlYWQoY2xpZW50LCAweDZhKTsKKwkJCWRhdGEtPmRhdGFbMF0gPSBzYWE3MTF4X3JlYWQoY2xpZW50LCAweDY3KTsKKwkJCWRhdGEtPmRhdGFbMV0gPSBzYWE3MTF4X3JlYWQoY2xpZW50LCAweDY4KTsKIAkJCXJldHVybiAwOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDA2LDE3ICsxNDIwLDggQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JY2FzZSBWSURJT0NfSU5UX0dfUkVHSVNURVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOwotCi0JCWlmIChyZWctPmkyY19pZCAhPSBJMkNfRFJJVkVSSURfU0FBNzExWCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZWctPnZhbCA9IHNhYTcxMXhfcmVhZChjbGllbnQsIHJlZy0+cmVnICYgMHhmZik7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0lOVF9TX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgogCXsKIAkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKIApAQCAtMTQyNCw3ICsxNDI5LDEwIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJc2FhNzExeF93cml0ZShjbGllbnQsIHJlZy0+cmVnICYgMHhmZiwgcmVnLT52YWwgJiAweGZmKTsKKwkJaWYgKGNtZCA9PSBWSURJT0NfREJHX0dfUkVHSVNURVIpCisJCQlyZWctPnZhbCA9IHNhYTcxMXhfcmVhZChjbGllbnQsIHJlZy0+cmVnICYgMHhmZik7CisJCWVsc2UKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7CiAJCWJyZWFrOwogCX0KICNlbmRpZgpAQCAtMTQ5Miw2ICsxNTAwLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXN0YXRlLT5pbnB1dCA9IC0xOworCXN0YXRlLT5vdXRwdXQgPSBTQUE3MTE1X0lQT1JUX09OOwogCXN0YXRlLT5lbmFibGUgPSAxOwogCXN0YXRlLT5yYWRpbyA9IDA7CiAJc3RhdGUtPmJyaWdodCA9IDEyODsKQEAgLTE1NTAsNyArMTU1OSw3IEBACiAKIHN0YXRpYyBpbnQgc2FhNzExeF9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaWYgKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKKwlpZiAoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HIHx8IGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX1RWX0RJR0lUQUwpCiAJCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJnNhYTcxMXhfYXR0YWNoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKaW5kZXggYWQ0MDFiZC4uYmQ5YzRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKQEAgLTYxNCwxNyArNjE0LDggQEAKIAkJYnJlYWs7CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JY2FzZSBWSURJT0NfSU5UX0dfUkVHSVNURVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOwotCi0JCWlmIChyZWctPmkyY19pZCAhPSBJMkNfRFJJVkVSSURfU0FBNzEyNykKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZWctPnZhbCA9IHNhYTcxMjdfcmVhZChjbGllbnQsIHJlZy0+cmVnICYgMHhmZik7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0lOVF9TX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgogCXsKIAkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKIApAQCAtNjMyLDcgKzYyMywxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07Ci0JCXNhYTcxMjdfd3JpdGUoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7CisJCWlmIChjbWQgPT0gVklESU9DX0RCR19HX1JFR0lTVEVSKQorCQkJcmVnLT52YWwgPSBzYWE3MTI3X3JlYWQoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYpOworCQllbHNlCisJCQlzYWE3MTI3X3dyaXRlKGNsaWVudCwgcmVnLT5yZWcgJiAweGZmLCByZWctPnZhbCAmIDB4ZmYpOwogCQlicmVhazsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZQppbmRleCA4OWExNTY1Li5jODVjOGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L01ha2VmaWxlCkBAIC0xNCw3ICsxNCwzIEBACiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCi0KLWV4dHJhLWNmbGFncy0kKENPTkZJR19WSURFT19CVUZfRFZCKSArPSAtREhBVkVfVklERU9fQlVGX0RWQj0xCi0KLUVYVFJBX0NGTEFHUyArPSAkKGV4dHJhLWNmbGFncy15KSAkKGV4dHJhLWNmbGFncy1tKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggYWU5ODRiYi4uODlmMzIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0yNDY5LDYgKzI0NjksMTEgQEAKIAkJCS5hbXV4ID0gTElORTIsCiAJCQkuZ3BpbyA9IDB4MDIwMDAwMCwKIAkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDIsCisJCQkudm11eCA9IDAsCisJCQkuYW11eCA9IExJTkUyLAorCQkJLmdwaW8gPSAweDAyMDAwMDAsCisJCX0sewogCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKIAkJCS52bXV4ID0gOCwKIAkJCS5hbXV4ID0gTElORTIsCkBAIC0zMTgzLDYgKzMxODgsMTA3IEBACiAJCQkuYW11eCAgID0gTElORTEsCiAJCX19LAogCX0sCisJW1NBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWXSA9IHsKKwkvKiBTdGV2ZW4gV2FsdGVyIDxzdGV2ZW5yd2FsdGVyQGdtYWlsLmNvbT4KKwkgICBKdWFuIFBhYmxvIFNvcm1hbmkgPHNvcm1hbkBnbWFpbC5jb20+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJFbmNvcmUgRU5MVFYiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMjAwMDAwLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9UTkZfNTMzNU1GLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IDMsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3R2X21vbm8sCisJCQkudm11eCA9IDcsCisJCQkuYW11eCA9IDQsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSAyLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDAsCisJCQkuYW11eCA9IDIsCisJCX19LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IExJTkUyLAorLyoJCQkuZ3BpbyA9IDB4MDAzMDAwMDEsKi8KKwkJCS5ncGlvID0gMHgyMDAwMCwKKworCQl9LAorCQkubXV0ZSA9IHsKKwkJCS5uYW1lID0gbmFtZV9tdXRlLAorCQkJLmFtdXggPSAwLAorCQl9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNXSA9IHsKKyAgLyoJSnVhbiBQYWJsbyBTb3JtYW5pIDxzb3JtYW5AZ21haWwuY29tPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiRW5jb3JlIEVOTFRWLUZNIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19BVFNDLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IDMsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3R2X21vbm8sCisJCQkudm11eCA9IDcsCisJCQkuYW11eCA9IDQsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSAyLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDAsCisJCQkuYW11eCA9IDIsCisJCX19LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IExJTkUyLAorCQkJLmdwaW8gPSAweDIwMDAwLAorCisJCX0sCisJCS5tdXRlID0geworCQkJLm5hbWUgPSBuYW1lX211dGUsCisJCQkuYW11eCA9IDAsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9DSU5FUkdZX0hUX1BDSV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBDaW5lcmd5IEhUIFBDSSIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzID0ge3sKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDEsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ICAgPSA2LAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9fSwKKwl9LAogfTsKIAogY29uc3QgdW5zaWduZWQgaW50IHNhYTcxMzRfYmNvdW50ID0gQVJSQVlfU0laRShzYWE3MTM0X2JvYXJkcyk7CkBAIC0zODIyLDYgKzM5MjgsMzYgQEAKIAkJLnN1YmRldmljZSAgICA9IDB4MTE3MiwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ01DSUEsCiAJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKKwkJLnN1YnZlbmRvciAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLnN1YmRldmljZSAgICA9IDB4MjM0MiwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzAsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDExMzEsCisJCS5zdWJkZXZpY2UgICAgPSAweDIzNDEsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUViwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLAorCQkuc3VidmVuZG9yICAgID0gMHgzMDE2LAorCQkuc3ViZGV2aWNlICAgID0gMHgyMzQ0LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9FTkNPUkVfRU5MVFYsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKKwkJLnN1YnZlbmRvciAgICA9IDB4MTEzMSwKKwkJLnN1YmRldmljZSAgICA9IDB4MjMwZiwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE1M2IsCisJCS5zdWJkZXZpY2UgICAgPSAweDExNzUsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0NJTkVSR1lfSFRfUENJLAorCX0sewogCQkvKiAtLS0gYm9hcmRzIHdpdGhvdXQgZWVwcm9tICsgc3Vic3lzdGVtIElEIC0tLSAqLwogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCkBAIC0zOTI2LDkgKzQwNjIsMTIgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX1RFUk1JTkFUT1I6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1NFRE5BX1BDX1RWX0NBUkRCVVM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfTFIzMDE6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVERVTzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfUFJPVEVVU18yMzA5OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVI6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVjoKKwljYXNlIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNOgogCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9HUElPOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCU19MUjMwMDoKQEAgLTQxNTAsNiArNDI4OSw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1lfSFRfUENNQ0lBOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9DSU5FUkdZX0hUX1BDSToKIAkJLyogbWFrZSB0aGUgdGRhMTAwNDYgZmluZCBpdHMgZWVwcm9tICovCiAJCXsKIAkJdTggZGF0YVtdID0geyAweDNjLCAweDMzLCAweDYwfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKaW5kZXggYzMzZjZhNi4uZTMwNTlmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKQEAgLTE0MjYsNiArMTQyNiwxOCBAQAogCiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1lfSFRfUENJOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCQkgICAgICAgJmNpbmVyZ3lfaHRfY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IHRkYTgyOTBfaTJjX2dhdGVfY3RybDsKKwkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBjaW5lcmd5X2h0X3R1bmVyX2luaXQ7CisJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IGNpbmVyZ3lfaHRfdHVuZXJfc2xlZXA7CisJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gbWQ4ODAwX2R2YnRfcGxsX3NldDsKKworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50aygiJXM6IEh1aD8gdW5rbm93biBEVkIgY2FyZD9cbiIsZGV2LT5uYW1lKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jCmluZGV4IDZmOWZlODYuLmNjZThkYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jCkBAIC0xMjAsOSArMTIwLDkgQEAKIAljYXNlIEFSQl9MT1NUOgogCWNhc2UgU0VRX0VSUjoKIAljYXNlIFNUX0VSUjoKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiB0cnVlOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIH0KIApAQCAtMTMxLDkgKzEzMSw5IEBACiAJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIElETEU6CiAJY2FzZSBET05FX1NUT1A6Ci0JCXJldHVybiBUUlVFOworCQlyZXR1cm4gdHJ1ZTsKIAlkZWZhdWx0OgotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiB9CiAKQEAgLTE0MSw5ICsxNDEsOSBAQAogewogCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSBCVVNZOgotCQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIHRydWU7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogfQogCkBAIC0xNTksOCArMTU5LDggQEAKIAkJc2FhX3dhaXQoSTJDX1dBSVRfREVMQVkpOwogCX0KIAlpZiAoSTJDX1dBSVRfUkVUUlkgPT0gY291bnQpCi0JCXJldHVybiBGQUxTRTsKLQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgaW50IGkyY19yZXNldChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKQEAgLTE3MSw3ICsxNzEsNyBAQAogCWQycHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpMmMgcmVzZXRcbiIsZGV2LT5uYW1lKTsKIAlzdGF0dXMgPSBpMmNfZ2V0X3N0YXR1cyhkZXYpOwogCWlmICghaTJjX2lzX2Vycm9yKHN0YXR1cykpCi0JCXJldHVybiBUUlVFOworCQlyZXR1cm4gdHJ1ZTsKIAlpMmNfc2V0X3N0YXR1cyhkZXYsc3RhdHVzKTsKIAogCWZvciAoY291bnQgPSAwOyBjb3VudCA8IEkyQ19XQUlUX1JFVFJZOyBjb3VudCsrKSB7CkBAIC0xODEsMTMgKzE4MSwxMyBAQAogCQl1ZGVsYXkoSTJDX1dBSVRfREVMQVkpOwogCX0KIAlpZiAoSTJDX1dBSVRfUkVUUlkgPT0gY291bnQpCi0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKCFpMmNfaXNfaWRsZShzdGF0dXMpKQotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAogCWkyY19zZXRfYXR0cihkZXYsTk9QKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaTJjX3NlbmRfYnl0ZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCmluZGV4IGU0MjUyNjguLjQ2YzU4M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwpAQCAtNDAsMTYgKzQwLDI0IEBACiBtb2R1bGVfcGFyYW0ocGlubmFjbGVfcmVtb3RlLCBpbnQsIDA2NDQpOyAgICAvKiBDaG9vc2UgUGlubmFjbGUgUENUViByZW1vdGUgKi8KIE1PRFVMRV9QQVJNX0RFU0MocGlubmFjbGVfcmVtb3RlLCAiU3BlY2lmeSBQaW5uYWNsZSBQQ1RWIHJlbW90ZTogMD1jb2xvdXJlZCwgMT1ncmV5IChkZWZhdWx0cyB0byAwKSIpOwogCitzdGF0aWMgaW50IGlyX3JjNV9yZW1vdGVfZ2FwID0gODg1OworbW9kdWxlX3BhcmFtKGlyX3JjNV9yZW1vdGVfZ2FwLCBpbnQsIDA2NDQpOworc3RhdGljIGludCBpcl9yYzVfa2V5X3RpbWVvdXQgPSAxMTU7Cittb2R1bGVfcGFyYW0oaXJfcmM1X2tleV90aW1lb3V0LCBpbnQsIDA2NDQpOworCiAjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pCWlmIChpcl9kZWJ1ZykgXAogCXByaW50ayhLRVJOX0RFQlVHICIlcy9pcjogIiBmbXQsIGRldi0+bmFtZSAsICMjIGFyZykKICNkZWZpbmUgaTJjZHByaW50ayhmbXQsIGFyZy4uLikgICAgaWYgKGlyX2RlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2lyOiAiIGZtdCwgaXItPmMubmFtZSAsICMjIGFyZykKIAorLyoqIHJjNSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgc2FhNzEzNF9yYzVfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gR1BJTyBnZW5lcmljIGtleWNvZGUgYnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGJ1aWxkX2tleShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKLQlzdHJ1Y3Qgc2FhNzEzNF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKKwlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKIAl1MzIgZ3BpbywgZGF0YTsKIAogCS8qIHJpc2luZyBTQUE3MTM0X0dQSU9fR1BSRVNDQU4gcmVhZHMgdGhlIHN0YXR1cyAqLwpAQCAtMTM0LDE2ICsxNDIsMTkgQEAKIAogdm9pZCBzYWE3MTM0X2lucHV0X2lycShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKLQlzdHJ1Y3Qgc2FhNzEzNF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKKwlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKIAotCWlmICghaXItPnBvbGxpbmcpCisJaWYgKCFpci0+cG9sbGluZyAmJiAhaXItPnJjNV9ncGlvKSB7CiAJCWJ1aWxkX2tleShkZXYpOworCX0gZWxzZSBpZiAoaXItPnJjNV9ncGlvKSB7CisJCXNhYTcxMzRfcmM1X2lycShkZXYpOworCX0KIH0KIAogc3RhdGljIHZvaWQgc2FhNzEzNF9pbnB1dF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSAoc3RydWN0IHNhYTcxMzRfZGV2KilkYXRhOwotCXN0cnVjdCBzYWE3MTM0X2lyICppciA9IGRldi0+cmVtb3RlOworCXN0cnVjdCBjYXJkX2lyICppciA9IGRldi0+cmVtb3RlOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAogCWJ1aWxkX2tleShkZXYpOwpAQCAtMTUxLDcgKzE2Miw3IEBACiAJbW9kX3RpbWVyKCZpci0+dGltZXIsIHRpbWVvdXQpOwogfQogCi1zdGF0aWMgdm9pZCBzYWE3MTM0X2lyX3N0YXJ0KHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzEzNF9pciAqaXIpCitzdGF0aWMgdm9pZCBzYWE3MTM0X2lyX3N0YXJ0KHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBzdHJ1Y3QgY2FyZF9pciAqaXIpCiB7CiAJaWYgKGlyLT5wb2xsaW5nKSB7CiAJCWluaXRfdGltZXIoJmlyLT50aW1lcik7CkBAIC0xNTksNiArMTcwLDE5IEBACiAJCWlyLT50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWRldjsKIAkJaXItPnRpbWVyLmV4cGlyZXMgID0gamlmZmllcyArIEhaOwogCQlhZGRfdGltZXIoJmlyLT50aW1lcik7CisJfSBlbHNlIGlmIChpci0+cmM1X2dwaW8pIHsKKwkJLyogc2V0IHRpbWVyX2VuZCBmb3IgY29kZSBjb21wbGV0aW9uICovCisJCWluaXRfdGltZXIoJmlyLT50aW1lcl9lbmQpOworCQlpci0+dGltZXJfZW5kLmZ1bmN0aW9uID0gaXJfcmM1X3RpbWVyX2VuZDsKKwkJaXItPnRpbWVyX2VuZC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaXI7CisJCWluaXRfdGltZXIoJmlyLT50aW1lcl9rZXl1cCk7CisJCWlyLT50aW1lcl9rZXl1cC5mdW5jdGlvbiA9IGlyX3JjNV90aW1lcl9rZXl1cDsKKwkJaXItPnRpbWVyX2tleXVwLmRhdGEgPSAodW5zaWduZWQgbG9uZylpcjsKKwkJaXItPnNoaWZ0X2J5ID0gMjsKKwkJaXItPnN0YXJ0ID0gMHgyOworCQlpci0+YWRkciA9IDB4MTc7CisJCWlyLT5yYzVfa2V5X3RpbWVvdXQgPSBpcl9yYzVfa2V5X3RpbWVvdXQ7CisJCWlyLT5yYzVfcmVtb3RlX2dhcCA9IGlyX3JjNV9yZW1vdGVfZ2FwOwogCX0KIH0KIApAQCAtMTcwLDEzICsxOTQsMTQgQEAKIAogaW50IHNhYTcxMzRfaW5wdXRfaW5pdDEoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IHNhYTcxMzRfaXIgKmlyOworCXN0cnVjdCBjYXJkX2lyICppcjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJSVJfS0VZVEFCX1RZUEUgKmlyX2NvZGVzID0gTlVMTDsKIAl1MzIgbWFza19rZXljb2RlID0gMDsKIAl1MzIgbWFza19rZXlkb3duID0gMDsKIAl1MzIgbWFza19rZXl1cCAgID0gMDsKIAlpbnQgcG9sbGluZyAgICAgID0gMDsKKwlpbnQgcmM1X2dwaW8JID0gMDsKIAlpbnQgaXJfdHlwZSAgICAgID0gSVJfVFlQRV9PVEhFUjsKIAlpbnQgZXJyOwogCkBAIC0yOTUsNiArMzIwLDE4IEBACiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMUYwMDsKIAkJbWFza19rZXlkb3duID0gMHgwMDQwMDAwOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9EVUFMOgorCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19hc3VzX3BjMzk7CisJCW1hc2tfa2V5ZG93biA9IDB4MDA0MDAwMDsKKwkJcmM1X2dwaW8gPSAxOworCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9FTkNPUkVfRU5MVFZfRk06CisJCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2VuY29yZV9lbmx0djsKKwkJbWFza19rZXljb2RlID0gMHgwMDAwN2Y7CisJCW1hc2tfa2V5dXAgICA9IDB4MDQwMDAwOworCQlwb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKKwkJYnJlYWs7CiAJfQogCWlmIChOVUxMID09IGlyX2NvZGVzKSB7CiAJCXByaW50aygiJXM6IE9vcHM6IElSIGNvbmZpZyBlcnJvciBbY2FyZD0lZF1cbiIsCkBAIC0zMTYsNiArMzUzLDcgQEAKIAlpci0+bWFza19rZXlkb3duID0gbWFza19rZXlkb3duOwogCWlyLT5tYXNrX2tleXVwICAgPSBtYXNrX2tleXVwOwogCWlyLT5wb2xsaW5nICAgICAgPSBwb2xsaW5nOworCWlyLT5yYzVfZ3BpbwkgPSByYzVfZ3BpbzsKIAogCS8qIGluaXQgaW5wdXQgZGV2aWNlICovCiAJc25wcmludGYoaXItPm5hbWUsIHNpemVvZihpci0+bmFtZSksICJzYWE3MTM0IElSICglcykiLApAQCAtNDAyLDYgKzQ0MCw0OSBAQAogCX0KIAogfQorCitzdGF0aWMgaW50IHNhYTcxMzRfcmM1X2lycShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwl1MzIgZ2FwOworCXVuc2lnbmVkIGxvbmcgY3VycmVudF9qaWZmaWVzLCB0aW1lb3V0OworCisJLyogZ2V0IHRpbWUgb2YgYml0ICovCisJY3VycmVudF9qaWZmaWVzID0gamlmZmllczsKKwlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKKworCS8qIGF2b2lkIG92ZXJmbG93IHdpdGggZ2FwID4xcyAqLworCWlmICh0di50dl9zZWMgLSBpci0+YmFzZV90aW1lLnR2X3NlYyA+IDEpIHsKKwkJZ2FwID0gMjAwMDAwOworCX0gZWxzZSB7CisJCWdhcCA9IDEwMDAwMDAgKiAodHYudHZfc2VjIC0gaXItPmJhc2VfdGltZS50dl9zZWMpICsKKwkJICAgIHR2LnR2X3VzZWMgLSBpci0+YmFzZV90aW1lLnR2X3VzZWM7CisJfQorCisJLyogYWN0aXZlIGNvZGUgPT4gYWRkIGJpdCAqLworCWlmIChpci0+YWN0aXZlKSB7CisJCS8qIG9ubHkgaWYgaW4gdGhlIGNvZGUgKG90aGVyd2lzZSBzcHVyaW91cyBJUlEgb3IgdGltZXIKKwkJICAgbGF0ZSkgKi8KKwkJaWYgKGlyLT5sYXN0X2JpdCA8IDI4KSB7CisJCQlpci0+bGFzdF9iaXQgPSAoZ2FwIC0gaXJfcmM1X3JlbW90ZV9nYXAgLyAyKSAvCisJCQkgICAgaXJfcmM1X3JlbW90ZV9nYXA7CisJCQlpci0+Y29kZSB8PSAxIDw8IGlyLT5sYXN0X2JpdDsKKwkJfQorCQkvKiBzdGFydGluZyBuZXcgY29kZSAqLworCX0gZWxzZSB7CisJCWlyLT5hY3RpdmUgPSAxOworCQlpci0+Y29kZSA9IDA7CisJCWlyLT5iYXNlX3RpbWUgPSB0djsKKwkJaXItPmxhc3RfYml0ID0gMDsKKworCQl0aW1lb3V0ID0gY3VycmVudF9qaWZmaWVzICsgKDUwMCArIDMwICogSFopIC8gMTAwMDsKKwkJbW9kX3RpbWVyKCZpci0+dGltZXJfZW5kLCB0aW1lb3V0KTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1iYXNpYy1vZmZzZXQ6IDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IDg4Y2QxMjk3Li5iM2UzOTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTQxLDE0ICs0MSwxMCBAQAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpZiBkZWZpbmVkKENPTkZJR19WSURFT19CVUZfRFZCKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19CVUZfRFZCX01PRFVMRSkKICNpbmNsdWRlIDxtZWRpYS92aWRlby1idWYtZHZiLmg+CisjZW5kaWYKIAotI2lmbmRlZiBUUlVFCi0jIGRlZmluZSBUUlVFICgxPT0xKQotI2VuZGlmCi0jaWZuZGVmIEZBTFNFCi0jIGRlZmluZSBGQUxTRSAoMT09MCkKLSNlbmRpZgogI2RlZmluZSBVTlNFVCAoLTFVKQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjMyLDYgKzIyOCw5IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwQSAgMTAzCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTAgICAgMTA0CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ01DSUEgICAgMTA1CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWICAgICAgICAgMTA2CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNICAgICAgMTA3CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ0kgICAgICAgMTA4CiAKICNkZWZpbmUgU0FBNzEzNF9NQVhCT0FSRFMgOAogI2RlZmluZSBTQUE3MTM0X0lOUFVUX01BWCA4CkBAIC00MTEsMjAgKzQxMCw2IEBACiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICAgKnN1YnN0cmVhbTsKIH07CiAKLS8qIElSIGlucHV0ICovCi1zdHJ1Y3Qgc2FhNzEzNF9pciB7Ci0Jc3RydWN0IGlucHV0X2RldiAgICAgICAgICAgKmRldjsKLQlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgICAgICBpcjsKLQljaGFyICAgICAgICAgICAgICAgICAgICAgICBuYW1lWzMyXTsKLQljaGFyICAgICAgICAgICAgICAgICAgICAgICBwaHlzWzMyXTsKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX2tleWNvZGU7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgbWFza19rZXlkb3duOwotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfa2V5dXA7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgcG9sbGluZzsKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2dwaW87Ci0Jc3RydWN0IHRpbWVyX2xpc3QgICAgICAgICAgdGltZXI7Ci19OwotCiAvKiB0cy9tcGVnIHN0YXR1cyAqLwogc3RydWN0IHNhYTcxMzRfdHMgewogCS8qIFRTIGNhcHR1cmUgKi8KQEAgLTQ2Myw3ICs0NDgsNyBAQAogCiAJLyogaW5mcmFyZWQgcmVtb3RlICovCiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgaGFzX3JlbW90ZTsKLQlzdHJ1Y3Qgc2FhNzEzNF9pciAgICAgICAgICAqcmVtb3RlOworCXN0cnVjdCBjYXJkX2lyCQkgICAqcmVtb3RlOwogCiAJLyogcGNpIGkvbyAqLwogCWNoYXIgICAgICAgICAgICAgICAgICAgICAgIG5hbWVbMzJdOwpAQCAtNTQzLDkgKzUyOCwxMSBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgIGVtcHJlc3Nfd29ya3F1ZXVlOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGVtcHJlc3Nfc3RhcnRlZDsKIAorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0JVRl9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX0JVRl9EVkJfTU9EVUxFKQogCS8qIFNBQTcxMzRfTVBFR19EVkIgb25seSAqLwogCXN0cnVjdCB2aWRlb2J1Zl9kdmIgICAgICAgIGR2YjsKIAlpbnQgKCpvcmlnaW5hbF9kZW1vZF9zbGVlcCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpOworI2VuZGlmCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjk4LDYgKzY4NSw3IEBACiB2b2lkIHNhYTcxMzRfaW5wdXRfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKIHZvaWQgc2FhNzEzNF9zZXRfaTJjX2lyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBzdHJ1Y3QgSVJfaTJjICppcik7CiAKKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIGMtYmFzaWMtb2Zmc2V0OiA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9LY29uZmlnCmluZGV4IGNmNTUyZTYuLjFhN2NjYjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZwpAQCAtMSw5ICsxLDkgQEAKIGNvbmZpZyBVU0JfU045QzEwMgotCXRyaXN0YXRlICJVU0IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgorCXRyaXN0YXRlICJVU0IgU045QzF4eCBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDEKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gU09OaVggU045QzEwMSwKLQkgIFNOOUMxMDIgb3IgU045QzEwMyBQQyBDYW1lcmEgQ29udHJvbGxlcnMuCisJICBTTjlDMTAyLCBTTjlDMTAzLCBTTjlDMTA1IGFuZCBTTjlDMTIwIFBDIENhbWVyYSBDb250cm9sbGVycy4KIAogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvc245YzEwMi50eHQ+IGZvciBtb3JlIGluZm8uCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9NYWtlZmlsZQppbmRleCA1MzZhZDMwLi4zMGUzZGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogc245YzEwMi1vYmpzICAgIDo9IHNuOWMxMDJfY29yZS5vIHNuOWMxMDJfaHY3MTMxZC5vIHNuOWMxMDJfbWkwMzQzLm8gXAotCQkgICBzbjljMTAyX292NzYzMC5vIHNuOWMxMDJfcGFzMTA2Yi5vIHNuOWMxMDJfcGFzMjAyYmNhLm8gXAorCQkgICBzbjljMTAyX292NzYzMC5vIHNuOWMxMDJfb3Y3NjYwLm8gc245YzEwMl9wYXMxMDZiLm8gXAogCQkgICBzbjljMTAyX3BhczIwMmJjYi5vIHNuOWMxMDJfdGFzNTExMGMxYi5vIFwKIAkJICAgc245YzEwMl90YXM1MTMwZDFiLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyLmgKaW5kZXggMmM2ZmYzOS4uNTQyOGYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVjRMMiBkcml2ZXIgZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVjRMMiBkcml2ZXIgZm9yIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMzcsMzMgKzM3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAKKyNpbmNsdWRlICJzbjljMTAyX2NvbmZpZy5oIgogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAic245YzEwMl9kZXZ0YWJsZS5oIgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgU045QzEwMl9ERUJVRwotI2RlZmluZSBTTjlDMTAyX0RFQlVHX0xFVkVMICAgICAgIDIKLSNkZWZpbmUgU045QzEwMl9NQVhfREVWSUNFUyAgICAgICA2NAotI2RlZmluZSBTTjlDMTAyX1BSRVNFUlZFX0lNR1NDQUxFIDAKLSNkZWZpbmUgU045QzEwMl9GT1JDRV9NVU5NQVAgICAgICAwCi0jZGVmaW5lIFNOOUMxMDJfTUFYX0ZSQU1FUyAgICAgICAgMzIKLSNkZWZpbmUgU045QzEwMl9VUkJTICAgICAgICAgICAgICAyCi0jZGVmaW5lIFNOOUMxMDJfSVNPX1BBQ0tFVFMgICAgICAgNwotI2RlZmluZSBTTjlDMTAyX0FMVEVSTkFURV9TRVRUSU5HIDgKLSNkZWZpbmUgU045QzEwMl9VUkJfVElNRU9VVCAgICAgICBtc2Vjc190b19qaWZmaWVzKDIgKiBTTjlDMTAyX0lTT19QQUNLRVRTKQotI2RlZmluZSBTTjlDMTAyX0NUUkxfVElNRU9VVCAgICAgIDMwMAotI2RlZmluZSBTTjlDMTAyX0ZSQU1FX1RJTUVPVVQgICAgIDIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1lbnVtIHNuOWMxMDJfYnJpZGdlIHsKLQlCUklER0VfU045QzEwMSA9IDB4MDEsCi0JQlJJREdFX1NOOUMxMDIgPSAweDAyLAotCUJSSURHRV9TTjlDMTAzID0gMHgwNCwKLX07Ci0KLVNOOUMxMDJfSURfVEFCTEUKLVNOOUMxMDJfU0VOU09SX1RBQkxFCiAKIGVudW0gc245YzEwMl9mcmFtZV9zdGF0ZSB7CiAJRl9VTlVTRUQsCkBAIC05OSwxMyArNzYsMTEgQEAKIAlTVFJFQU1fT04sCiB9OwogCi10eXBlZGVmIGNoYXIgc245YzEwM19zb2ZfaGVhZGVyX3RbMThdOwotdHlwZWRlZiBjaGFyIHNuOWMxMDJfc29mX2hlYWRlcl90WzEyXTsKLXR5cGVkZWYgY2hhciBzbjljMTAyX2VvZl9oZWFkZXJfdFs0XTsKK3R5cGVkZWYgY2hhciBzbjljMTAyX3NvZl9oZWFkZXJfdFs2Ml07CiAKIHN0cnVjdCBzbjljMTAyX3N5c2ZzX2F0dHIgewogCXU4IHJlZywgaTJjX3JlZzsKLQlzbjljMTAzX3NvZl9oZWFkZXJfdCBmcmFtZV9oZWFkZXI7CisJc245YzEwMl9zb2ZfaGVhZGVyX3QgZnJhbWVfaGVhZGVyOwogfTsKIAogc3RydWN0IHNuOWMxMDJfbW9kdWxlX3BhcmFtIHsKQEAgLTEzNyw4ICsxMTIsOCBAQAogCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiBjb21wcmVzc2lvbjsKIAogCXN0cnVjdCBzbjljMTAyX3N5c2ZzX2F0dHIgc3lzZnM7Ci0Jc245YzEwM19zb2ZfaGVhZGVyX3Qgc29mX2hlYWRlcjsKLQl1MTYgcmVnWzYzXTsKKwlzbjljMTAyX3NvZl9oZWFkZXJfdCBzb2ZfaGVhZGVyOworCXUxNiByZWdbMzg0XTsKIAogCXN0cnVjdCBzbjljMTAyX21vZHVsZV9wYXJhbSBtb2R1bGVfcGFyYW07CiAKQEAgLTE1NSwxMCArMTMwLDcgQEAKIHN0cnVjdCBzbjljMTAyX2RldmljZSoKIHNuOWMxMDJfbWF0Y2hfaWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlpZiAodXNiX21hdGNoX2lkKHVzYl9pZm51bV90b19pZihjYW0tPnVzYmRldiwgMCksIGlkKSkKLQkJcmV0dXJuIGNhbTsKLQotCXJldHVybiBOVUxMOworCXJldHVybiB1c2JfbWF0Y2hfaWQodXNiX2lmbnVtX3RvX2lmKGNhbS0+dXNiZGV2LCAwKSwgaWQpID8gY2FtIDogTlVMTDsKIH0KIAogCkBAIC0xNjksNiArMTQxLDE5IEBACiAJbWVtY3B5KCZjYW0tPnNlbnNvciwgc2Vuc29yLCBzaXplb2Yoc3RydWN0IHNuOWMxMDJfc2Vuc29yKSk7CiB9CiAKKworZW51bSBzbjljMTAyX2JyaWRnZQorc245YzEwMl9nZXRfYnJpZGdlKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCXJldHVybiBjYW0tPmJyaWRnZTsKK30KKworCitzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNuOWMxMDJfZ2V0X3NlbnNvcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlyZXR1cm4gJmNhbS0+c2Vuc29yOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICN1bmRlZiBEQkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvbmZpZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY0ZTAzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvbmZpZy5oCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdsb2JhbCBwYXJhbWV0ZXJzIGZvciB0aGUgVjRMMiBkcml2ZXIgZm9yIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1NOOUMxMDJfQ09ORklHX0hfCisjZGVmaW5lIF9TTjlDMTAyX0NPTkZJR19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisKKyNkZWZpbmUgU045QzEwMl9ERUJVRworI2RlZmluZSBTTjlDMTAyX0RFQlVHX0xFVkVMICAgICAgIDIKKyNkZWZpbmUgU045QzEwMl9NQVhfREVWSUNFUyAgICAgICA2NAorI2RlZmluZSBTTjlDMTAyX1BSRVNFUlZFX0lNR1NDQUxFIDAKKyNkZWZpbmUgU045QzEwMl9GT1JDRV9NVU5NQVAgICAgICAwCisjZGVmaW5lIFNOOUMxMDJfTUFYX0ZSQU1FUyAgICAgICAgMzIKKyNkZWZpbmUgU045QzEwMl9VUkJTICAgICAgICAgICAgICAyCisjZGVmaW5lIFNOOUMxMDJfSVNPX1BBQ0tFVFMgICAgICAgNworI2RlZmluZSBTTjlDMTAyX0FMVEVSTkFURV9TRVRUSU5HIDgKKyNkZWZpbmUgU045QzEwMl9VUkJfVElNRU9VVCAgICAgICBtc2Vjc190b19qaWZmaWVzKDIgKiBTTjlDMTAyX0lTT19QQUNLRVRTKQorI2RlZmluZSBTTjlDMTAyX0NUUkxfVElNRU9VVCAgICAgIDMwMAorI2RlZmluZSBTTjlDMTAyX0ZSQU1FX1RJTUVPVVQgICAgIDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgY29uc3QgdTggU045QzEwMl9ZX1FUQUJMRTBbNjRdID0geworCSA4LCAgIDUsICAgNSwgICA4LCAgMTIsICAyMCwgIDI1LCAgMzAsCisJIDYsICAgNiwgICA3LCAgIDksICAxMywgIDI5LCAgMzAsICAyNywKKwkgNywgICA2LCAgIDgsICAxMiwgIDIwLCAgMjgsICAzNCwgIDI4LAorCSA3LCAgIDgsICAxMSwgIDE0LCAgMjUsICA0MywgIDQwLCAgMzEsCisJIDksICAxMSwgIDE4LCAgMjgsICAzNCwgIDU0LCAgNTEsICAzOCwKKwkxMiwgIDE3LCAgMjcsICAzMiwgIDQwLCAgNTIsICA1NiwgIDQ2LAorCTI0LCAgMzIsICAzOSwgIDQzLCAgNTEsICA2MCwgIDYwLCAgNTAsCisJMzYsICA0NiwgIDQ3LCAgNDksICA1NiwgIDUwLCAgNTEsICA0OQorfTsKKworc3RhdGljIGNvbnN0IHU4IFNOOUMxMDJfVVZfUVRBQkxFMFs2NF0gPSB7CisJIDgsICAgOSwgIDEyLCAgMjMsICA0OSwgIDQ5LCAgNDksICA0OSwKKwkgOSwgIDEwLCAgMTMsICAzMywgIDQ5LCAgNDksICA0OSwgIDQ5LAorCTEyLCAgMTMsICAyOCwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksCisJMjMsICAzMywgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwKKwk0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LAorCTQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksCisJNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwKKwk0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5Cit9OworCitzdGF0aWMgY29uc3QgdTggU045QzEwMl9ZX1FUQUJMRTFbNjRdID0geworCTE2LCAgMTEsICAxMCwgIDE2LCAgMjQsICA0MCwgIDUxLCAgNjEsCisJMTIsICAxMiwgIDE0LCAgMTksICAyNiwgIDU4LCAgNjAsICA1NSwKKwkxNCwgIDEzLCAgMTYsICAyNCwgIDQwLCAgNTcsICA2OSwgIDU2LAorCTE0LCAgMTcsICAyMiwgIDI5LCAgNTEsICA4NywgIDgwLCAgNjIsCisJMTgsICAyMiwgIDM3LCAgNTYsICA2OCwgMTA5LCAxMDMsICA3NywKKwkyNCwgIDM1LCAgNTUsICA2NCwgIDgxLCAxMDQsIDExMywgIDkyLAorCTQ5LCAgNjQsICA3OCwgIDg3LCAxMDMsIDEyMSwgMTIwLCAxMDEsCisJNzIsICA5MiwgIDk1LCAgOTgsIDExMiwgMTAwLCAxMDMsICA5OQorfTsKKworc3RhdGljIGNvbnN0IHU4IFNOOUMxMDJfVVZfUVRBQkxFMVs2NF0gPSB7CisJMTcsICAxOCwgIDI0LCAgNDcsICA5OSwgIDk5LCAgOTksICA5OSwKKwkxOCwgIDIxLCAgMjYsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LAorCTI0LCAgMjYsICA1NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisJNDcsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKwk5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LAorCTk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisJOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKwk5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5Cit9OworCisjZW5kaWYgLyogX1NOOUMxMDJfQ09ORklHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKaW5kZXggMDRkNGM4Zi4uZDBlMmI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFY0TDIgZHJpdmVyIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFY0TDIgZHJpdmVyIGZvciBTTjlDMXh4IFBDIENhbWVyYSBDb250cm9sbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKQEAgLTQzLDEyICs0MywxMiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgU045QzEwMl9NT0RVTEVfTkFNRSAgICAgIlY0TDIgZHJpdmVyIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycyIKKyNkZWZpbmUgU045QzEwMl9NT0RVTEVfTkFNRSAgICAgIlY0TDIgZHJpdmVyIGZvciBTTjlDMXh4IFBDIENhbWVyYSBDb250cm9sbGVycyIKICNkZWZpbmUgU045QzEwMl9NT0RVTEVfQVVUSE9SICAgIihDKSAyMDA0LTIwMDYgTHVjYSBSaXNvbGlhIgogI2RlZmluZSBTTjlDMTAyX0FVVEhPUl9FTUFJTCAgICAiPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IgogI2RlZmluZSBTTjlDMTAyX01PRFVMRV9MSUNFTlNFICAiR1BMIgotI2RlZmluZSBTTjlDMTAyX01PRFVMRV9WRVJTSU9OICAiMToxLjI3IgotI2RlZmluZSBTTjlDMTAyX01PRFVMRV9WRVJTSU9OX0NPREUgIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDI3KQorI2RlZmluZSBTTjlDMTAyX01PRFVMRV9WRVJTSU9OICAiMToxLjM0IgorI2RlZmluZSBTTjlDMTAyX01PRFVMRV9WRVJTSU9OX0NPREUgIEtFUk5FTF9WRVJTSU9OKDEsIDEsIDM0KQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTkxLDcgKzkxLDggQEAKIAkJCQkgICAgICAgU045QzEwMl9GUkFNRV9USU1FT1VUfTsKIG1vZHVsZV9wYXJhbV9hcnJheShmcmFtZV90aW1lb3V0LCB1aW50LCBOVUxMLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZnJhbWVfdGltZW91dCwKLQkJICJcbjxuWywuLi5dPiBUaW1lb3V0IGZvciBhIHZpZGVvIGZyYW1lIGluIHNlY29uZHMuIgorCQkgIlxuPDB8blssLi4uXT4gVGltZW91dCBmb3IgYSB2aWRlbyBmcmFtZSBpbiBzZWNvbmRzIGJlZm9yZSIKKwkJICJcbnJldHVybmluZyBhbiBJL08gZXJyb3I7IDAgZm9yIGluZmluaXR5LiIKIAkJICJcblRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmljIGZvciBlYWNoIGRldGVjdGVkIGNhbWVyYS4iCiAJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoU045QzEwMl9GUkFNRV9USU1FT1VUKSIuIgogCQkgIlxuIik7CkBAIC0xMTMsMzIgKzExNCwxMyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBzbjljMTAyX3NvZl9oZWFkZXJfdCBzbjljMTAyX3NvZl9oZWFkZXJbXSA9IHsKLQl7MHhmZiwgMHhmZiwgMHgwMCwgMHhjNCwgMHhjNCwgMHg5NiwgMHgwMH0sCi0JezB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzQsIDB4YzQsIDB4OTYsIDB4MDF9LAotfTsKLQotc3RhdGljIHNuOWMxMDNfc29mX2hlYWRlcl90IHNuOWMxMDNfc29mX2hlYWRlcltdID0gewotCXsweGZmLCAweGZmLCAweDAwLCAweGM0LCAweGM0LCAweDk2LCAweDIwfSwKLX07Ci0KLXN0YXRpYyBzbjljMTAyX2VvZl9oZWFkZXJfdCBzbjljMTAyX2VvZl9oZWFkZXJbXSA9IHsKLQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCi0JezB4NDAsIDB4MDAsIDB4MDAsIDB4MDB9LAotCXsweDgwLCAweDAwLCAweDAwLCAweDAwfSwKLQl7MHhjMCwgMHgwMCwgMHgwMCwgMHgwMH0sCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHN0YXRpYyB1MzIKIHNuOWMxMDJfcmVxdWVzdF9idWZmZXJzKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB1MzIgY291bnQsCiAJCQllbnVtIHNuOWMxMDJfaW9fbWV0aG9kIGlvKQogewogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHAgPSAmKGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQpOwogCXN0cnVjdCB2NGwyX3JlY3QqIHIgPSAmKGNhbS0+c2Vuc29yLmNyb3BjYXAuYm91bmRzKTsKLQljb25zdCBzaXplX3QgaW1hZ2VzaXplID0gY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwIHx8Ci0JCQkJIGlvID09IElPX1JFQUQgPworCXNpemVfdCBpbWFnZXNpemUgPSBjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgfHwgaW8gPT0gSU9fUkVBRCA/CiAJCQkJIChwLT53aWR0aCAqIHAtPmhlaWdodCAqIHAtPnByaXYpIC8gOCA6CiAJCQkJIChyLT53aWR0aCAqIHItPmhlaWdodCAqIHAtPnByaXYpIC8gODsKIAl2b2lkKiBidWZmID0gTlVMTDsKQEAgLTE0Nyw5ICsxMjksMTMgQEAKIAlpZiAoY291bnQgPiBTTjlDMTAyX01BWF9GUkFNRVMpCiAJCWNvdW50ID0gU045QzEwMl9NQVhfRlJBTUVTOwogCisJaWYgKGNhbS0+YnJpZGdlID09IEJSSURHRV9TTjlDMTA1IHx8IGNhbS0+YnJpZGdlID09IEJSSURHRV9TTjlDMTIwKQorCQlpbWFnZXNpemUgKz0gNTg5ICsgMjsgLyogbGVuZ3RoIG9mIEpQRUcgaGVhZGVyICsgRU9JIG1hcmtlciAqLworCiAJY2FtLT5uYnVmZmVycyA9IGNvdW50OwogCXdoaWxlIChjYW0tPm5idWZmZXJzID4gMCkgewotCQlpZiAoKGJ1ZmYgPSB2bWFsbG9jXzMyKGNhbS0+bmJ1ZmZlcnMgKiBQQUdFX0FMSUdOKGltYWdlc2l6ZSkpKSkKKwkJaWYgKChidWZmID0gdm1hbGxvY18zMl91c2VyKGNhbS0+bmJ1ZmZlcnMgKgorCQkJCQkgICAgUEFHRV9BTElHTihpbWFnZXNpemUpKSkpCiAJCQlicmVhazsKIAkJY2FtLT5uYnVmZmVycy0tOwogCX0KQEAgLTMyMiw5ICszMDgsMjEgQEAKIHNuOWMxMDJfaTJjX2RldGVjdF9yZWFkX2Vycm9yKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAogCQkJICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IpCiB7Ci0JaW50IHI7CisJaW50IHIgLCBlcnIgPSAwOworCiAJciA9IHNuOWMxMDJfcmVhZF9yZWcoY2FtLCAweDA4KTsKLQlyZXR1cm4gKHIgPCAwIHx8IChyID49IDAgJiYgIShyICYgMHgwOCkpKSA/IC1FSU8gOiAwOworCWlmIChyIDwgMCkKKwkJZXJyICs9IHI7CisKKwlpZiAoY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDEgfHwgY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDIpIHsKKwkJaWYgKCEociAmIDB4MDgpKQorCQkJZXJyICs9IC0xOworCX0gZWxzZSB7CisJCWlmIChyICYgMHgwOCkKKwkJCWVyciArPSAtMTsKKwl9CisKKwlyZXR1cm4gZXJyID8gLUVJTyA6IDA7CiB9CiAKIApAQCAtNDE1LDcgKzQxMyw3IEBACiAJZGF0YVs0XSA9IGRhdGEzOwogCWRhdGFbNV0gPSBkYXRhNDsKIAlkYXRhWzZdID0gZGF0YTU7Ci0JZGF0YVs3XSA9IDB4MTQ7CisJZGF0YVs3XSA9IDB4MTc7CiAJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwOCwgMHg0MSwKIAkJCSAgICAgIDB4MDgsIDAsIGRhdGEsIDgsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKIAlpZiAocmVzIDwgMCkKQEAgLTQ2NywzMSArNDY1LDM1IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQqCi1zbjljMTAyX2ZpbmRfc29mX2hlYWRlcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCogbWVtLCBzaXplX3QgbGVuKQorc3RhdGljIHNpemVfdCBzbjljMTAyX3NvZl9sZW5ndGgoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCiB7Ci0Jc2l6ZV90IHNvZmxlbiA9IDAsIGk7Ci0JdTggaiwgbiA9IDA7Ci0KIAlzd2l0Y2ggKGNhbS0+YnJpZGdlKSB7CiAJY2FzZSBCUklER0VfU045QzEwMToKIAljYXNlIEJSSURHRV9TTjlDMTAyOgotCQlzb2ZsZW4gPSBzaXplb2Yoc245YzEwMl9zb2ZfaGVhZGVyX3QpOwotCQluID0gc2l6ZW9mKHNuOWMxMDJfc29mX2hlYWRlcikgLyBzb2ZsZW47Ci0JCWJyZWFrOworCQlyZXR1cm4gMTI7CiAJY2FzZSBCUklER0VfU045QzEwMzoKLQkJc29mbGVuID0gc2l6ZW9mKHNuOWMxMDNfc29mX2hlYWRlcl90KTsKLQkJbiA9IHNpemVvZihzbjljMTAzX3NvZl9oZWFkZXIpIC8gc29mbGVuOworCQlyZXR1cm4gMTg7CisJY2FzZSBCUklER0VfU045QzEwNToKKwljYXNlIEJSSURHRV9TTjlDMTIwOgorCQlyZXR1cm4gNjI7CiAJfQogCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQqCitzbjljMTAyX2ZpbmRfc29mX2hlYWRlcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCogbWVtLCBzaXplX3QgbGVuKQoreworCWNoYXIgc29mX2hlYWRlcls2XSA9IHsweGZmLCAweGZmLCAweDAwLCAweGM0LCAweGM0LCAweDk2fTsKKwlzaXplX3Qgc29mbGVuID0gMCwgaTsKKworCXNvZmxlbiA9IHNuOWMxMDJfc29mX2xlbmd0aChjYW0pOworCiAJZm9yIChpID0gMDsgKGxlbiA+PSBzb2ZsZW4pICYmIChpIDw9IGxlbiAtIHNvZmxlbik7IGkrKykKLQkJZm9yIChqID0gMDsgaiA8IG47IGorKykKLQkJCS8qIFRoZSBpbnZhcmlhYmxlIHBhcnQgb2YgdGhlIGhlYWRlciBpcyA2IGJ5dGVzIGxvbmcgKi8KLQkJCWlmICgoY2FtLT5icmlkZ2UgIT0gQlJJREdFX1NOOUMxMDMgJiYKLQkJCSAgICAhbWVtY21wKG1lbSArIGksIHNuOWMxMDJfc29mX2hlYWRlcltqXSwgNikpIHx8Ci0JCQkgICAgKGNhbS0+YnJpZGdlID09IEJSSURHRV9TTjlDMTAzICYmCi0JCQkgICAgIW1lbWNtcChtZW0gKyBpLCBzbjljMTAzX3NvZl9oZWFkZXJbal0sIDYpKSkgewotCQkJCW1lbWNweShjYW0tPnNvZl9oZWFkZXIsIG1lbSArIGksIHNvZmxlbik7CisJCWlmICghbWVtY21wKG1lbSArIGksIHNvZl9oZWFkZXIsIHNpemVvZihzb2ZfaGVhZGVyKSkpIHsKKwkJCW1lbWNweShjYW0tPnNvZl9oZWFkZXIsIG1lbSArIGksCisJCQkgICAgICAgc2l6ZW9mKHNuOWMxMDJfc29mX2hlYWRlcl90KSk7CiAJCQkJLyogU2tpcCB0aGUgaGVhZGVyICovCiAJCQkJcmV0dXJuIG1lbSArIGkgKyBzb2ZsZW47CiAJCQl9CkBAIC01MDMsMjEgKzUwNSwxMjMgQEAKIHN0YXRpYyB2b2lkKgogc245YzEwMl9maW5kX2VvZl9oZWFkZXIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQqIG1lbSwgc2l6ZV90IGxlbikKIHsKLQlzaXplX3QgZW9mbGVuID0gc2l6ZW9mKHNuOWMxMDJfZW9mX2hlYWRlcl90KSwgaTsKLQl1bnNpZ25lZCBqLCBuID0gc2l6ZW9mKHNuOWMxMDJfZW9mX2hlYWRlcikgLyBlb2ZsZW47CisJY2hhciBlb2ZfaGVhZGVyWzRdWzRdID0geworCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJCXsweDQwLCAweDAwLCAweDAwLCAweDAwfSwKKwkJezB4ODAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCQl7MHhjMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJfTsKKwlzaXplX3QgaSwgajsKIAotCWlmIChjYW0tPnNlbnNvci5waXhfZm9ybWF0LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCWlmIChjYW0tPnNlbnNvci5waXhfZm9ybWF0LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYIHx8CisJICAgIGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX0pQRUcpCiAJCXJldHVybiBOVUxMOyAvKiBFT0YgaGVhZGVyIGRvZXMgbm90IGV4aXN0IGluIGNvbXByZXNzZWQgZGF0YSAqLwogCi0JZm9yIChpID0gMDsgKGxlbiA+PSBlb2ZsZW4pICYmIChpIDw9IGxlbiAtIGVvZmxlbik7IGkrKykKLQkJZm9yIChqID0gMDsgaiA8IG47IGorKykKLQkJCWlmICghbWVtY21wKG1lbSArIGksIHNuOWMxMDJfZW9mX2hlYWRlcltqXSwgZW9mbGVuKSkKKwlmb3IgKGkgPSAwOyAobGVuID49IDQpICYmIChpIDw9IGxlbiAtIDQpOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGVvZl9oZWFkZXIpOyBqKyspCisJCQlpZiAoIW1lbWNtcChtZW0gKyBpLCBlb2ZfaGVhZGVyW2pdLCA0KSkKIAkJCQlyZXR1cm4gbWVtICsgaTsKIAogCXJldHVybiBOVUxMOwogfQogCiAKK3N0YXRpYyB2b2lkCitzbjljMTAyX3dyaXRlX2pwZWdoZWFkZXIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCBzbjljMTAyX2ZyYW1lX3QqIGYpCit7CisJc3RhdGljIHU4IGpwZWdfaGVhZGVyWzU4OV0gPSB7CisJCTB4ZmYsIDB4ZDgsIDB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MDUsCisJCTB4MDYsIDB4MDUsIDB4MDQsIDB4MDYsIDB4MDYsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsCisJCTB4MDgsIDB4MGEsIDB4MTAsIDB4MGEsIDB4MGEsIDB4MDksIDB4MDksIDB4MGEsIDB4MTQsIDB4MGUsCisJCTB4MGYsIDB4MGMsIDB4MTAsIDB4MTcsIDB4MTQsIDB4MTgsIDB4MTgsIDB4MTcsIDB4MTQsIDB4MTYsCisJCTB4MTYsIDB4MWEsIDB4MWQsIDB4MjUsIDB4MWYsIDB4MWEsIDB4MWIsIDB4MjMsIDB4MWMsIDB4MTYsCisJCTB4MTYsIDB4MjAsIDB4MmMsIDB4MjAsIDB4MjMsIDB4MjYsIDB4MjcsIDB4MjksIDB4MmEsIDB4MjksCisJCTB4MTksIDB4MWYsIDB4MmQsIDB4MzAsIDB4MmQsIDB4MjgsIDB4MzAsIDB4MjUsIDB4MjgsIDB4MjksCisJCTB4MjgsIDB4MDEsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MGEsIDB4MDgsIDB4MGEsIDB4MTMsIDB4MGEsCisJCTB4MGEsIDB4MTMsIDB4MjgsIDB4MWEsIDB4MTYsIDB4MWEsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJCTB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJCTB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJCTB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJCTB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsCisJCTB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4MjgsIDB4ZmYsIDB4YzQsIDB4MDEsIDB4YTIsCisJCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDUsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsCisJCTB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MDEsCisJCTB4MDAsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisJCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsCisJCTB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MTAsIDB4MDAsCisJCTB4MDIsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2QsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDAsIDB4MDQsCisJCTB4MTEsIDB4MDUsIDB4MTIsIDB4MjEsIDB4MzEsIDB4NDEsIDB4MDYsIDB4MTMsIDB4NTEsIDB4NjEsCisJCTB4MDcsIDB4MjIsIDB4NzEsIDB4MTQsIDB4MzIsIDB4ODEsIDB4OTEsIDB4YTEsIDB4MDgsIDB4MjMsCisJCTB4NDIsIDB4YjEsIDB4YzEsIDB4MTUsIDB4NTIsIDB4ZDEsIDB4ZjAsIDB4MjQsIDB4MzMsIDB4NjIsCisJCTB4NzIsIDB4ODIsIDB4MDksIDB4MGEsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjUsCisJCTB4MjYsIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsCisJCTB4MzksIDB4M2EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksIDB4NGEsCisJCTB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsIDB4NTksIDB4NWEsIDB4NjMsIDB4NjQsCisJCTB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksIDB4NmEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsCisJCTB4NzcsIDB4NzgsIDB4NzksIDB4N2EsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsIDB4ODgsCisJCTB4ODksIDB4OGEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsIDB4OTksCisJCTB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsIDB4YTgsIDB4YTksIDB4YWEsCisJCTB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsIDB4YjgsIDB4YjksIDB4YmEsIDB4YzIsCisJCTB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsIDB4ZDMsCisJCTB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZTEsIDB4ZTIsIDB4ZTMsCisJCTB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZjEsIDB4ZjIsIDB4ZjMsCisJCTB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4MTEsIDB4MDAsIDB4MDIsCisJCTB4MDEsIDB4MDIsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDQsIDB4MDcsIDB4MDUsIDB4MDQsIDB4MDQsCisJCTB4MDAsIDB4MDEsIDB4MDIsIDB4NzcsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTEsIDB4MDQsCisJCTB4MDUsIDB4MjEsIDB4MzEsIDB4MDYsIDB4MTIsIDB4NDEsIDB4NTEsIDB4MDcsIDB4NjEsIDB4NzEsCisJCTB4MTMsIDB4MjIsIDB4MzIsIDB4ODEsIDB4MDgsIDB4MTQsIDB4NDIsIDB4OTEsIDB4YTEsIDB4YjEsCisJCTB4YzEsIDB4MDksIDB4MjMsIDB4MzMsIDB4NTIsIDB4ZjAsIDB4MTUsIDB4NjIsIDB4NzIsIDB4ZDEsCisJCTB4MGEsIDB4MTYsIDB4MjQsIDB4MzQsIDB4ZTEsIDB4MjUsIDB4ZjEsIDB4MTcsIDB4MTgsIDB4MTksCisJCTB4MWEsIDB4MjYsIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsCisJCTB4MzksIDB4M2EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksIDB4NGEsCisJCTB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsIDB4NTksIDB4NWEsIDB4NjMsIDB4NjQsCisJCTB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksIDB4NmEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsCisJCTB4NzcsIDB4NzgsIDB4NzksIDB4N2EsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisJCTB4ODgsIDB4ODksIDB4OGEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsCisJCTB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsIDB4YTgsIDB4YTksCisJCTB4YWEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsIDB4YjgsIDB4YjksIDB4YmEsCisJCTB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsCisJCTB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZTIsIDB4ZTMsCisJCTB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZjIsIDB4ZjMsIDB4ZjQsCisJCTB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmYsIDB4YzAsIDB4MDAsIDB4MTEsCisJCTB4MDgsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4ODAsIDB4MDMsIDB4MDEsIDB4MjEsIDB4MDAsIDB4MDIsCisJCTB4MTEsIDB4MDEsIDB4MDMsIDB4MTEsIDB4MDEsIDB4ZmYsIDB4ZGEsIDB4MDAsIDB4MGMsIDB4MDMsCisJCTB4MDEsIDB4MDAsIDB4MDIsIDB4MTEsIDB4MDMsIDB4MTEsIDB4MDAsIDB4M2YsIDB4MDAKKwl9OworCXU4ICpwb3MgPSBmLT5idWZtZW07CisKKwltZW1jcHkocG9zLCBqcGVnX2hlYWRlciwgc2l6ZW9mKGpwZWdfaGVhZGVyKSk7CisJKihwb3MgKyA2KSA9IDB4MDA7CisJKihwb3MgKyA3ICsgNjQpID0gMHgwMTsKKwlpZiAoY2FtLT5jb21wcmVzc2lvbi5xdWFsaXR5ID09IDApIHsKKwkJbWVtY3B5KHBvcyArIDcsIFNOOUMxMDJfWV9RVEFCTEUwLCA2NCk7CisJCW1lbWNweShwb3MgKyA4ICsgNjQsIFNOOUMxMDJfVVZfUVRBQkxFMCwgNjQpOworCX0gZWxzZSBpZiAoY2FtLT5jb21wcmVzc2lvbi5xdWFsaXR5ID09IDEpIHsKKwkJbWVtY3B5KHBvcyArIDcsIFNOOUMxMDJfWV9RVEFCTEUxLCA2NCk7CisJCW1lbWNweShwb3MgKyA4ICsgNjQsIFNOOUMxMDJfVVZfUVRBQkxFMSwgNjQpOworCX0KKwkqKHBvcyArIDU2NCkgPSBjYW0tPnNlbnNvci5waXhfZm9ybWF0LndpZHRoICYgMHhGRjsKKwkqKHBvcyArIDU2MykgPSAoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC53aWR0aCA+PiA4KSAmIDB4RkY7CisJKihwb3MgKyA1NjIpID0gY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC5oZWlnaHQgJiAweEZGOworCSoocG9zICsgNTYxKSA9IChjYW0tPnNlbnNvci5waXhfZm9ybWF0LmhlaWdodCA+PiA4KSAmIDB4RkY7CisJKihwb3MgKyA1NjcpID0gMHgyMTsKKworCWYtPmJ1Zi5ieXRlc3VzZWQgKz0gc2l6ZW9mKGpwZWdfaGVhZGVyKTsKK30KKworCitzdGF0aWMgdm9pZAorc245YzEwMl93cml0ZV9lb2ltYXJrZXIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCBzbjljMTAyX2ZyYW1lX3QqIGYpCit7CisJc3RhdGljIGNvbnN0IHU4IGVvaV9tYXJrZXJbMl0gPSB7MHhmZiwgMHhkOX07CisKKwltZW1jcHkoZi0+YnVmbWVtICsgZi0+YnVmLmJ5dGVzdXNlZCwgZW9pX21hcmtlciwgc2l6ZW9mKGVvaV9tYXJrZXIpKTsKKwlmLT5idWYuYnl0ZXN1c2VkICs9IHNpemVvZihlb2lfbWFya2VyKTsKK30KKworCiBzdGF0aWMgdm9pZCBzbjljMTAyX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB1cmItPmNvbnRleHQ7CkBAIC01MzUsNyArNjM5LDcgQEAKIAkJY2FtLT5zdHJlYW0gPSBTVFJFQU1fT0ZGOwogCQlpZiAoKCpmKSkKIAkJCSgqZiktPnN0YXRlID0gRl9RVUVVRUQ7Ci0JCURCRygzLCAiU3RyZWFtIGludGVycnVwdGVkIik7CisJCURCRygzLCAiU3RyZWFtIGludGVycnVwdGVkIGJ5IGFwcGxpY2F0aW9uIik7CiAJCXdha2VfdXAoJmNhbS0+d2FpdF9zdHJlYW0pOwogCX0KIApAQCAtNTU3LDEwICs2NjEsOSBAQAogCWltYWdlc2l6ZSA9IChjYW0tPnNlbnNvci5waXhfZm9ybWF0LndpZHRoICoKIAkJICAgICBjYW0tPnNlbnNvci5waXhfZm9ybWF0LmhlaWdodCAqCiAJCSAgICAgY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC5wcml2KSAvIDg7Ci0KLQlzb2ZsZW4gPSAoY2FtLT5icmlkZ2UpID09IEJSSURHRV9TTjlDMTAzID8KLQkJCQkgIHNpemVvZihzbjljMTAzX3NvZl9oZWFkZXJfdCkgOgotCQkJCSAgc2l6ZW9mKHNuOWMxMDJfc29mX2hlYWRlcl90KTsKKwlpZiAoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfSlBFRykKKwkJaW1hZ2VzaXplICs9IDU4OTsgLyogbGVuZ3RoIG9mIGpwZWcgaGVhZGVyICovCisJc29mbGVuID0gc245YzEwMl9zb2ZfbGVuZ3RoKGNhbSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBpbWcsIGxlbiwgc3RhdHVzOwpAQCAtNjEwLDEyICs3MTMsMjEgQEAKIAkJCQkoKmYpLT5idWYuYnl0ZXN1c2VkICs9IGltZzsKIAogCQkJCWlmICgoKmYpLT5idWYuYnl0ZXN1c2VkID09IGltYWdlc2l6ZSB8fAotCQkJCSAgICAoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PQotCQkJCQkJVjRMMl9QSVhfRk1UX1NOOUMxMFggJiYgZW9mKSkgeworCQkJCSAgICAoKGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0KKwkJCQkgICAgICBWNEwyX1BJWF9GTVRfU045QzEwWCB8fAorCQkJCSAgICAgIGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0KKwkJCQkgICAgICBWNEwyX1BJWF9GTVRfSlBFRykgJiYgZW9mKSkgewogCQkJCQl1MzIgYjsKKworCQkJCQlpZiAoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC5waXhlbGZvcm1hdAorCQkJCQkgICAgPT0gVjRMMl9QSVhfRk1UX0pQRUcpCisJCQkJCQlzbjljMTAyX3dyaXRlX2VvaW1hcmtlcihjYW0sCisJCQkJCQkJCQkoKmYpKTsKKwogCQkJCQliID0gKCpmKS0+YnVmLmJ5dGVzdXNlZDsKIAkJCQkJKCpmKS0+c3RhdGUgPSBGX0RPTkU7CiAJCQkJCSgqZiktPmJ1Zi5zZXF1ZW5jZT0gKytjYW0tPmZyYW1lX2NvdW50OworCiAJCQkJCXNwaW5fbG9jaygmY2FtLT5xdWV1ZV9sb2NrKTsKIAkJCQkJbGlzdF9tb3ZlX3RhaWwoJigqZiktPmZyYW1lLAogCQkJCQkJICAgICAgICZjYW0tPm91dHF1ZXVlKTsKQEAgLTYyNyw4ICs3MzksMTAgQEAKIAkJCQkJZWxzZQogCQkJCQkJKCpmKSA9IE5VTEw7CiAJCQkJCXNwaW5fdW5sb2NrKCZjYW0tPnF1ZXVlX2xvY2spOworCiAJCQkJCW1lbWNweShjYW0tPnN5c2ZzLmZyYW1lX2hlYWRlciwKIAkJCQkJICAgICAgIGNhbS0+c29mX2hlYWRlciwgc29mbGVuKTsKKwogCQkJCQlEQkcoMywgIlZpZGVvIGZyYW1lIGNhcHR1cmVkOiAlbHUgIgogCQkJCQkgICAgICAgImJ5dGVzIiwgKHVuc2lnbmVkIGxvbmcpKGIpKTsKIApAQCAtNjYxLDYgKzc3NSw5IEBACiAJCQkoKmYpLT5idWYuYnl0ZXN1c2VkID0gMDsKIAkJCWxlbiAtPSAoc29mIC0gcG9zKTsKIAkJCXBvcyA9IHNvZjsKKwkJCWlmIChjYW0tPnNlbnNvci5waXhfZm9ybWF0LnBpeGVsZm9ybWF0ID09CisJCQkgICAgVjRMMl9QSVhfRk1UX0pQRUcpCisJCQkJc245YzEwMl93cml0ZV9qcGVnaGVhZGVyKGNhbSwgKCpmKSk7CiAJCQlEQkcoMywgIlNPRiBkZXRlY3RlZDogbmV3IHZpZGVvIGZyYW1lIik7CiAJCQlpZiAobGVuKQogCQkJCWdvdG8gcmVkbzsKQEAgLTY3MSw3ICs3ODgsOSBAQAogCQkJCWdvdG8gZW5kX29mX2ZyYW1lOyAvKiAoMSkgKi8KIAkJCWVsc2UgewogCQkJCWlmIChjYW0tPnNlbnNvci5waXhfZm9ybWF0LnBpeGVsZm9ybWF0ID09Ci0JCQkJICAgIFY0TDJfUElYX0ZNVF9TTjlDMTBYKSB7CisJCQkJICAgIFY0TDJfUElYX0ZNVF9TTjlDMTBYIHx8CisJCQkJICAgIGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0KKwkJCQkgICAgVjRMMl9QSVhfRk1UX0pQRUcpIHsKIAkJCQkJZW9mID0gc29mIC0gc29mbGVuOwogCQkJCQlnb3RvIGVuZF9vZl9mcmFtZTsKIAkJCQl9IGVsc2UgewpAQCAtNzAxLDEzICs4MjAsMTEgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGNhbS0+dXNiZGV2OwogCXN0cnVjdCB1cmIqIHVyYjsKLQljb25zdCB1bnNpZ25lZCBpbnQgc245YzEwMl93TWF4UGFja2V0U2l6ZVtdID0gezAsIDEyOCwgMjU2LCAzODQsIDUxMiwKLQkJCQkJCSAgICAgICA2ODAsIDgwMCwgOTAwLCAxMDIzfTsKLQljb25zdCB1bnNpZ25lZCBpbnQgc245YzEwM193TWF4UGFja2V0U2l6ZVtdID0gezAsIDEyOCwgMjU2LCAzODQsIDUxMiwKLQkJCQkJCSAgICAgICA2ODAsIDgwMCwgOTAwLCAxMDAzfTsKLQljb25zdCB1bnNpZ25lZCBpbnQgcHN6ID0gKGNhbS0+YnJpZGdlID09IEJSSURHRV9TTjlDMTAzKSA/Ci0JCQkgICAgc245YzEwM193TWF4UGFja2V0U2l6ZVtTTjlDMTAyX0FMVEVSTkFURV9TRVRUSU5HXSA6Ci0JCQkgICAgc245YzEwMl93TWF4UGFja2V0U2l6ZVtTTjlDMTAyX0FMVEVSTkFURV9TRVRUSU5HXTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlKiBhbHRzZXR0aW5nID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKAorCQkJCQkJICAgIHVzYl9pZm51bV90b19pZih1ZGV2LCAwKSwKKwkJCQkJCSAgICBTTjlDMTAyX0FMVEVSTkFURV9TRVRUSU5HKTsKKwljb25zdCB1bnNpZ25lZCBpbnQgcHN6ID0gbGUxNl90b19jcHUoYWx0c2V0dGluZy0+CisJCQkJCSAgICAgZW5kcG9pbnRbMF0uZGVzYy53TWF4UGFja2V0U2l6ZSk7CiAJczggaSwgajsKIAlpbnQgZXJyID0gMDsKIApAQCAtNzc1LDcgKzg5Miw3IEBACiAJcmV0dXJuIDA7CiAKIGZyZWVfdXJiczoKLQlmb3IgKGkgPSAwOyBpIDwgU045QzEwMl9VUkJTOyBpKyspCisJZm9yIChpID0gMDsgKGkgPCBTTjlDMTAyX1VSQlMpICYmIGNhbS0+dXJiW2ldOyBpKyspCiAJCXVzYl9mcmVlX3VyYihjYW0tPnVyYltpXSk7CiAKIGZyZWVfYnVmZmVyczoKQEAgLTgzNCwyOSArOTUxLDI5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi1zdGF0aWMgdTggc245YzEwMl9zdHJ0b3U4KGNvbnN0IGNoYXIqIGJ1ZmYsIHNpemVfdCBsZW4sIHNzaXplX3QqIGNvdW50KQorc3RhdGljIHUxNiBzbjljMTAyX3N0cnRvdTE2KGNvbnN0IGNoYXIqIGJ1ZmYsIHNpemVfdCBsZW4sIHNzaXplX3QqIGNvdW50KQogewotCWNoYXIgc3RyWzVdOworCWNoYXIgc3RyWzddOwogCWNoYXIqIGVuZHA7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKLQlpZiAobGVuIDwgNCkgeworCWlmIChsZW4gPCA2KSB7CiAJCXN0cm5jcHkoc3RyLCBidWZmLCBsZW4pOwogCQlzdHJbbGVuKzFdID0gJ1wwJzsKIAl9IGVsc2UgewogCQlzdHJuY3B5KHN0ciwgYnVmZiwgNCk7Ci0JCXN0cls0XSA9ICdcMCc7CisJCXN0cls2XSA9ICdcMCc7CiAJfQogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmZW5kcCwgMCk7CiAKIAkqY291bnQgPSAwOwotCWlmICh2YWwgPD0gMHhmZikKKwlpZiAodmFsIDw9IDB4ZmZmZikKIAkJKmNvdW50ID0gKHNzaXplX3QpKGVuZHAgLSBzdHIpOwogCWlmICgoKmNvdW50KSAmJiAobGVuID09ICpjb3VudCsxKSAmJiAoYnVmZlsqY291bnRdID09ICdcbicpKQogCQkqY291bnQgKz0gMTsKIAotCXJldHVybiAodTgpdmFsOworCXJldHVybiAodTE2KXZhbDsKIH0KIAogLyoKQEAgLTg3Myw3ICs5OTAsOCBAQAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsCisJCQkJCSAgICAgY2xhc3NfZGV2KSk7CiAJaWYgKCFjYW0pIHsKIAkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTg5MSwyNyArMTAwOSwyOCBAQAogc245YzEwMl9zdG9yZV9yZWcoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKLQl1OCBpbmRleDsKKwl1MTYgaW5kZXg7CiAJc3NpemVfdCBjb3VudDsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsCisJCQkJCSAgICAgY2xhc3NfZGV2KSk7CiAJaWYgKCFjYW0pIHsKIAkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmRleCA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKLQlpZiAoaW5kZXggPiAweDFmIHx8ICFjb3VudCkgeworCWluZGV4ID0gc245YzEwMl9zdHJ0b3UxNihidWYsIGxlbiwgJmNvdW50KTsKKwlpZiAoaW5kZXggPj0gQVJSQVlfU0laRShjYW0tPnJlZykgfHwgIWNvdW50KSB7CiAJCW11dGV4X3VubG9jaygmc245YzEwMl9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJY2FtLT5zeXNmcy5yZWcgPSBpbmRleDsKIAotCURCRygyLCAiTW92ZWQgU045QzEwWCByZWdpc3RlciBpbmRleCB0byAweCUwMlgiLCBjYW0tPnN5c2ZzLnJlZyk7CisJREJHKDIsICJNb3ZlZCBTTjlDMVhYIHJlZ2lzdGVyIGluZGV4IHRvIDB4JTAyWCIsIGNhbS0+c3lzZnMucmVnKTsKIAlEQkcoMywgIldyaXR0ZW4gYnl0ZXM6ICV6ZCIsIGNvdW50KTsKIAogCW11dGV4X3VubG9jaygmc245YzEwMl9zeXNmc19sb2NrKTsKQEAgLTkyOSw3ICsxMDQ4LDggQEAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLAorCQkJCQkgICAgIGNsYXNzX2RldikpOwogCWlmICghY2FtKSB7CiAJCW11dGV4X3VubG9jaygmc245YzEwMl9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC05NTQsMjAgKzEwNzQsMjEgQEAKIHNuOWMxMDJfc3RvcmVfdmFsKHN0cnVjdCBjbGFzc19kZXZpY2UqIGNkLCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW07Ci0JdTggdmFsdWU7CisJdTE2IHZhbHVlOwogCXNzaXplX3QgY291bnQ7CiAJaW50IGVycjsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsCisJCQkJCSAgICAgY2xhc3NfZGV2KSk7CiAJaWYgKCFjYW0pIHsKIAkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQl2YWx1ZSA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKKwl2YWx1ZSA9IHNuOWMxMDJfc3RydG91MTYoYnVmLCBsZW4sICZjb3VudCk7CiAJaWYgKCFjb3VudCkgewogCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTc5LDcgKzExMDAsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlEQkcoMiwgIldyaXR0ZW4gU045QzEwWCByZWcuIDB4JTAyWCwgdmFsLiAweCUwMlgiLAorCURCRygyLCAiV3JpdHRlbiBTTjlDMVhYIHJlZy4gMHglMDJYLCB2YWwuIDB4JTAyWCIsCiAJICAgIGNhbS0+c3lzZnMucmVnLCB2YWx1ZSk7CiAJREJHKDMsICJXcml0dGVuIGJ5dGVzOiAlemQiLCBjb3VudCk7CiAKQEAgLTk5Nyw3ICsxMTE4LDggQEAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLAorCQkJCQkgICAgIGNsYXNzX2RldikpOwogCWlmICghY2FtKSB7CiAJCW11dGV4X3VubG9jaygmc245YzEwMl9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMDE3LDE5ICsxMTM5LDIwIEBACiBzbjljMTAyX3N0b3JlX2kyY19yZWcoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKLQl1OCBpbmRleDsKKwl1MTYgaW5kZXg7CiAJc3NpemVfdCBjb3VudDsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsCisJCQkJCSAgICAgY2xhc3NfZGV2KSk7CiAJaWYgKCFjYW0pIHsKIAkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmRleCA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKKwlpbmRleCA9IHNuOWMxMDJfc3RydG91MTYoYnVmLCBsZW4sICZjb3VudCk7CiAJaWYgKCFjb3VudCkgewogCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTA1NSw3ICsxMTc4LDggQEAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLAorCQkJCQkgICAgIGNsYXNzX2RldikpOwogCWlmICghY2FtKSB7CiAJCW11dGV4X3VubG9jaygmc245YzEwMl9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMDg1LDE0ICsxMjA5LDE1IEBACiBzbjljMTAyX3N0b3JlX2kyY192YWwoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKLQl1OCB2YWx1ZTsKKwl1MTYgdmFsdWU7CiAJc3NpemVfdCBjb3VudDsKIAlpbnQgZXJyOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwKKwkJCQkJICAgICBjbGFzc19kZXYpKTsKIAlpZiAoIWNhbSkgewogCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTEwMyw3ICsxMjI4LDcgQEAKIAkJcmV0dXJuIC1FTk9TWVM7CiAJfQogCi0JdmFsdWUgPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CisJdmFsdWUgPSBzbjljMTAyX3N0cnRvdTE2KGJ1ZiwgbGVuLCAmY291bnQpOwogCWlmICghY291bnQpIHsKIAkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMzEsMTMgKzEyNTYsMTQgQEAKIAlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKIAllbnVtIHNuOWMxMDJfYnJpZGdlIGJyaWRnZTsKIAlzc2l6ZV90IHJlcyA9IDA7Ci0JdTggdmFsdWU7CisJdTE2IHZhbHVlOwogCXNzaXplX3QgY291bnQ7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLAorCQkJCQkgICAgIGNsYXNzX2RldikpOwogCWlmICghY2FtKSB7CiAJCW11dGV4X3VubG9jaygmc245YzEwMl9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMTQ3LDcgKzEyNzMsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCi0JdmFsdWUgPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CisJdmFsdWUgPSBzbjljMTAyX3N0cnRvdTE2KGJ1ZiwgbGVuLCAmY291bnQpOwogCWlmICghY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMTYwLDkgKzEyODYsMTEgQEAKIAkJCXJlcyA9IHNuOWMxMDJfc3RvcmVfdmFsKGNkLCBidWYsIGxlbik7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX1NOOUMxMDM6CisJY2FzZSBCUklER0VfU045QzEwNToKKwljYXNlIEJSSURHRV9TTjlDMTIwOgogCQlpZiAodmFsdWUgPiAweDdmKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICgocmVzID0gc245YzEwMl9zdG9yZV9yZWcoY2QsICIweDA0IiwgNCkpID49IDApCisJCWlmICgocmVzID0gc245YzEwMl9zdG9yZV9yZWcoY2QsICIweDA3IiwgNCkpID49IDApCiAJCQlyZXMgPSBzbjljMTAyX3N0b3JlX3ZhbChjZCwgYnVmLCBsZW4pOwogCQlicmVhazsKIAl9CkBAIC0xMTc1LDEwICsxMzAzLDEwIEBACiBzbjljMTAyX3N0b3JlX2JsdWUoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzc2l6ZV90IHJlcyA9IDA7Ci0JdTggdmFsdWU7CisJdTE2IHZhbHVlOwogCXNzaXplX3QgY291bnQ7CiAKLQl2YWx1ZSA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKKwl2YWx1ZSA9IHNuOWMxMDJfc3RydG91MTYoYnVmLCBsZW4sICZjb3VudCk7CiAJaWYgKCFjb3VudCB8fCB2YWx1ZSA+IDB4N2YpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMTkzLDEwICsxMzIxLDEwIEBACiBzbjljMTAyX3N0b3JlX3JlZChzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQogewogCXNzaXplX3QgcmVzID0gMDsKLQl1OCB2YWx1ZTsKKwl1MTYgdmFsdWU7CiAJc3NpemVfdCBjb3VudDsKIAotCXZhbHVlID0gc245YzEwMl9zdHJ0b3U4KGJ1ZiwgbGVuLCAmY291bnQpOworCXZhbHVlID0gc245YzEwMl9zdHJ0b3UxNihidWYsIGxlbiwgJmNvdW50KTsKIAlpZiAoIWNvdW50IHx8IHZhbHVlID4gMHg3ZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEyMTIsNyArMTM0MCw4IEBACiAJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW07CiAJc3NpemVfdCBjb3VudDsKIAotCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwKKwkJCQkJICAgICBjbGFzc19kZXYpKTsKIAlpZiAoIWNhbSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTEyNDMsMzAgKzEzNzIsMzYgQEAKIHN0YXRpYyBpbnQgc245YzEwMl9jcmVhdGVfc3lzZnMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdjRsZGV2ID0gY2FtLT52NGxkZXY7Ci0JaW50IHJjOworCWludCBlcnIgPSAwOwogCi0JcmMgPSB2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnKTsKLQlpZiAocmMpIGdvdG8gZXJyOwotCXJjID0gdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3ZhbCk7Ci0JaWYgKHJjKSBnb3RvIGVycl9yZWc7Ci0JcmMgPSB2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfZnJhbWVfaGVhZGVyKTsKLQlpZiAocmMpIGdvdG8gZXJyX3ZhbDsKKwlpZiAoKGVyciA9IHZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9yZWcpKSkKKwkJZ290byBlcnJfb3V0OworCWlmICgoZXJyID0gdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3ZhbCkpKQorCQlnb3RvIGVycl9yZWc7CisJaWYgKChlcnIgPSB2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LAorCQkJCQkgICAgJmNsYXNzX2RldmljZV9hdHRyX2ZyYW1lX2hlYWRlcikpKQorCQlnb3RvIGVycl92YWw7CiAKIAlpZiAoY2FtLT5zZW5zb3Iuc3lzZnNfb3BzKSB7Ci0JCXJjID0gdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2kyY19yZWcpOwotCQlpZiAocmMpIGdvdG8gZXJyX2ZyaGVhZDsKLQkJcmMgPSB2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaTJjX3ZhbCk7Ci0JCWlmIChyYykgZ290byBlcnJfaTJjX3JlZzsKKwkJaWYgKChlcnIgPSB2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LAorCQkJCQkJICAmY2xhc3NfZGV2aWNlX2F0dHJfaTJjX3JlZykpKQorCQkJZ290byBlcnJfZnJhbWVfaGVhZGVyOworCQlpZiAoKGVyciA9IHZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsCisJCQkJCQkgICZjbGFzc19kZXZpY2VfYXR0cl9pMmNfdmFsKSkpCisJCQlnb3RvIGVycl9pMmNfcmVnOwogCX0KIAogCWlmIChjYW0tPmJyaWRnZSA9PSBCUklER0VfU045QzEwMSB8fCBjYW0tPmJyaWRnZSA9PSBCUklER0VfU045QzEwMikgewotCQlyYyA9IHZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9ncmVlbik7Ci0JCWlmIChyYykgZ290byBlcnJfaTJjX3ZhbDsKLQl9IGVsc2UgaWYgKGNhbS0+YnJpZGdlID09IEJSSURHRV9TTjlDMTAzKSB7Ci0JCXJjID0gdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2JsdWUpOwotCQlpZiAocmMpIGdvdG8gZXJyX2kyY192YWw7Ci0JCXJjID0gdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3JlZCk7Ci0JCWlmIChyYykgZ290byBlcnJfYmx1ZTsKKwkJaWYgKChlcnIgPSB2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LAorCQkJCQkJICAgICZjbGFzc19kZXZpY2VfYXR0cl9ncmVlbikpKQorCQkJZ290byBlcnJfaTJjX3ZhbDsKKwl9IGVsc2UgeworCQlpZiAoKGVyciA9IHZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsCisJCQkJCQkgICAgJmNsYXNzX2RldmljZV9hdHRyX2JsdWUpKSkKKwkJCWdvdG8gZXJyX2kyY192YWw7CisJCWlmICgoZXJyID0gdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwKKwkJCQkJCSAgICAmY2xhc3NfZGV2aWNlX2F0dHJfcmVkKSkpCisJCQlnb3RvIGVycl9ibHVlOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTI3OSwxNCArMTQxNCwxNCBAQAogZXJyX2kyY19yZWc6CiAJaWYgKGNhbS0+c2Vuc29yLnN5c2ZzX29wcykKIAkJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2kyY19yZWcpOwotZXJyX2ZyaGVhZDoKK2Vycl9mcmFtZV9oZWFkZXI6CiAJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2ZyYW1lX2hlYWRlcik7CiBlcnJfdmFsOgogCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl92YWwpOwogZXJyX3JlZzoKIAl2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnKTsKLWVycjoKLQlyZXR1cm4gcmM7CitlcnJfb3V0OgorCXJldHVybiBlcnI7CiB9CiAjZW5kaWYgLyogQ09ORklHX1ZJREVPX0FEVl9ERUJVRyAqLwogCkBAIC0xMjk3LDEwICsxNDMyLDM2IEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKLQkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgxOF0gfCAweDgwLCAweDE4KTsKLQllbHNlCi0JCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGNhbS0+cmVnWzB4MThdICYgMHg3ZiwgMHgxOCk7CisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFggfHwKKwkgICAgcGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfSlBFRykgeworCQlzd2l0Y2ggKGNhbS0+YnJpZGdlKSB7CisJCWNhc2UgQlJJREdFX1NOOUMxMDE6CisJCWNhc2UgQlJJREdFX1NOOUMxMDI6CisJCWNhc2UgQlJJREdFX1NOOUMxMDM6CisJCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDE4XSB8IDB4ODAsCisJCQkJCQkgMHgxOCk7CisJCQlicmVhazsKKwkJY2FzZSBCUklER0VfU045QzEwNToKKwkJY2FzZSBCUklER0VfU045QzEyMDoKKwkJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGNhbS0+cmVnWzB4MThdICYgMHg3ZiwKKwkJCQkJCSAweDE4KTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChjYW0tPmJyaWRnZSkgeworCQljYXNlIEJSSURHRV9TTjlDMTAxOgorCQljYXNlIEJSSURHRV9TTjlDMTAyOgorCQljYXNlIEJSSURHRV9TTjlDMTAzOgorCQkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgxOF0gJiAweDdmLAorCQkJCQkJIDB4MTgpOworCQkJYnJlYWs7CisJCWNhc2UgQlJJREdFX1NOOUMxMDU6CisJCWNhc2UgQlJJREdFX1NOOUMxMjA6CisJCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDE4XSB8IDB4ODAsCisJCQkJCQkgMHgxOCk7CisJCQlicmVhazsKKwkJfQorCX0KIAogCXJldHVybiBlcnIgPyAtRUlPIDogMDsKIH0KQEAgLTEzMTAsMTIgKzE0NzEsNDYgQEAKIHNuOWMxMDJfc2V0X2NvbXByZXNzaW9uKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAogCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uKiBjb21wcmVzc2lvbikKIHsKLQlpbnQgZXJyID0gMDsKKwlpbnQgaSwgZXJyID0gMDsKIAorCXN3aXRjaCAoY2FtLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9TTjlDMTAxOgorCWNhc2UgQlJJREdFX1NOOUMxMDI6CisJY2FzZSBCUklER0VfU045QzEwMzoKIAlpZiAoY29tcHJlc3Npb24tPnF1YWxpdHkgPT0gMCkKLQkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgxN10gfCAweDAxLCAweDE3KTsKKwkJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGNhbS0+cmVnWzB4MTddIHwgMHgwMSwKKwkJCQkJCSAweDE3KTsKIAllbHNlIGlmIChjb21wcmVzc2lvbi0+cXVhbGl0eSA9PSAxKQotCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDE3XSAmIDB4ZmUsIDB4MTcpOworCQkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgxN10gJiAweGZlLAorCQkJCQkJIDB4MTcpOworCQlicmVhazsKKwljYXNlIEJSSURHRV9TTjlDMTA1OgorCWNhc2UgQlJJREdFX1NOOUMxMjA6CisJCWlmIChjb21wcmVzc2lvbi0+cXVhbGl0eSA9PSAwKSB7CisJCQlmb3IgKGkgPSAwOyBpIDw9IDYzOyBpKyspIHsKKwkJCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLAorCQkJCQkJCSBTTjlDMTAyX1lfUVRBQkxFMFtpXSwKKwkJCQkJCQkgMHgxMDAgKyBpKTsKKwkJCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLAorCQkJCQkJCSBTTjlDMTAyX1VWX1FUQUJMRTBbaV0sCisJCQkJCQkJIDB4MTQwICsgaSk7CisJCQl9CisJCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDE4XSAmIDB4YmYsCisJCQkJCQkgMHgxOCk7CisJCX0gZWxzZSBpZiAoY29tcHJlc3Npb24tPnF1YWxpdHkgPT0gMSkgeworCQkJZm9yIChpID0gMDsgaSA8PSA2MzsgaSsrKSB7CisJCQkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwKKwkJCQkJCQkgU045QzEwMl9ZX1FUQUJMRTFbaV0sCisJCQkJCQkJIDB4MTAwICsgaSk7CisJCQkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwKKwkJCQkJCQkgU045QzEwMl9VVl9RVEFCTEUxW2ldLAorCQkJCQkJCSAweDE0MCArIGkpOworCQkJfQorCQkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgxOF0gfCAweDQwLAorCQkJCQkJIDB4MTgpOworCQl9CisJCWJyZWFrOworCX0KIAogCXJldHVybiBlcnIgPyAtRUlPIDogMDsKIH0KQEAgLTEzOTksNyArMTU5NCwxNiBAQAogCX0KIAogCWlmICghKGNhbS0+c3RhdGUgJiBERVZfSU5JVElBTElaRUQpKQotCQljYW0tPmNvbXByZXNzaW9uLnF1YWxpdHkgPSAgY2FtLT5yZWdbMHgxN10gJiAweDAxID8gMCA6IDE7CisJCWlmIChjYW0tPmJyaWRnZSA9PSBCUklER0VfU045QzEwMSB8fAorCQkgICAgY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDIgfHwKKwkJICAgIGNhbS0+YnJpZGdlID09IEJSSURHRV9TTjlDMTAzKSB7CisJCQljYW0tPmNvbXByZXNzaW9uLnF1YWxpdHkgPSAgY2FtLT5yZWdbMHgxN10gJiAweDAxID8KKwkJCQkJCSAgICAwIDogMTsKKwkJfSBlbHNlIHsKKwkJCWNhbS0+Y29tcHJlc3Npb24ucXVhbGl0eSA9ICBjYW0tPnJlZ1sweDE4XSAmIDB4NDAgPworCQkJCQkJICAgIDAgOiAxOworCQkJZXJyICs9IHNuOWMxMDJfc2V0X2NvbXByZXNzaW9uKGNhbSwgJmNhbS0+Y29tcHJlc3Npb24pOworCQl9CiAJZWxzZQogCQllcnIgKz0gc245YzEwMl9zZXRfY29tcHJlc3Npb24oY2FtLCAmY2FtLT5jb21wcmVzc2lvbik7CiAJZXJyICs9IHNuOWMxMDJfc2V0X3BpeF9mb3JtYXQoY2FtLCAmcy0+cGl4X2Zvcm1hdCk7CkBAIC0xNDA4LDcgKzE2MTIsOCBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAocy0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwlpZiAocy0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCB8fAorCSAgICBzLT5waXhfZm9ybWF0LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9KUEVHKQogCQlEQkcoMywgIkNvbXByZXNzZWQgdmlkZW8gZm9ybWF0IGlzIGFjdGl2ZSwgcXVhbGl0eSAlZCIsCiAJCSAgICBjYW0tPmNvbXByZXNzaW9uLnF1YWxpdHkpOwogCWVsc2UKQEAgLTE0OTAsNiArMTY5NSw3IEBACiAKIAlpZiAoY2FtLT51c2VycykgewogCQlEQkcoMiwgIkRldmljZSAvZGV2L3ZpZGVvJWQgaXMgYnVzeS4uLiIsIGNhbS0+djRsZGV2LT5taW5vcik7CisJCURCRygzLCAiU2ltdWx0YW5lb3VzIG9wZW5zIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAJCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHx8CiAJCSAgICAoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSkgewogCQkJZXJyID0gLUVXT1VMREJMT0NLOwpAQCAtMTYyOCw2ICsxODM0LDE3IEBACiAJCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CisJCWlmICghY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCkgeworCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCisJCQkgICAgICAoIGNhbS0+d2FpdF9mcmFtZSwKKwkJCQkoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fAorCQkJCShjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKKwkJCQkoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSApOworCQkJaWYgKGVycikgeworCQkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0gZWxzZSB7CiAJCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dAogCQkJICAoIGNhbS0+d2FpdF9mcmFtZSwKIAkJCSAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fApAQCAtMTYzOCwxMiArMTg1NSwxOCBAQAogCQlpZiAodGltZW91dCA8IDApIHsKIAkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQkJcmV0dXJuIHRpbWVvdXQ7CisJCQl9IGVsc2UgaWYgKHRpbWVvdXQgPT0gMCAmJgorCQkJCSAgICEoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpKSB7CisJCQkJREJHKDEsICJWaWRlbyBmcmFtZSB0aW1lb3V0IGVsYXBzZWQiKTsKKwkJCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KIAkJfQogCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKIAkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQkJaWYgKCF0aW1lb3V0IHx8IChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpKSB7CisJCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKIAkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KQEAgLTE5NDAsNiArMjE2Myw5IEBACiAJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjdHJsLCBzaXplb2YoY3RybCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCVBEQkdHKCJWSURJT0NfR19DVFJMOiBpZCAlbHUsIHZhbHVlICVsdSIsCisJICAgICAgKHVuc2lnbmVkIGxvbmcpY3RybC5pZCwgKHVuc2lnbmVkIGxvbmcpY3RybC52YWx1ZSk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMTI3LDYgKzIzNTMsNDUgQEAKIAogCiBzdGF0aWMgaW50CitzbjljMTAyX3ZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB2NGwyX2ZybXNpemVlbnVtIGZybXNpemU7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmZybXNpemUsIGFyZywgc2l6ZW9mKGZybXNpemUpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoZnJtc2l6ZS5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY2FtLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9TTjlDMTAxOgorCWNhc2UgQlJJREdFX1NOOUMxMDI6CisJY2FzZSBCUklER0VfU045QzEwMzoKKwkJaWYgKGZybXNpemUucGl4ZWxfZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9TTjlDMTBYICYmCisJCSAgICBmcm1zaXplLnBpeGVsX2Zvcm1hdCAhPSBWNEwyX1BJWF9GTVRfU0JHR1I4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBCUklER0VfU045QzEwNToKKwljYXNlIEJSSURHRV9TTjlDMTIwOgorCQlpZiAoZnJtc2l6ZS5waXhlbF9mb3JtYXQgIT0gVjRMMl9QSVhfRk1UX0pQRUcgJiYKKwkJICAgIGZybXNpemUucGl4ZWxfZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9TQkdHUjgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmcm1zaXplLnR5cGUgPSBWNEwyX0ZSTVNJWkVfVFlQRV9TVEVQV0lTRTsKKwlmcm1zaXplLnN0ZXB3aXNlLm1pbl93aWR0aCA9IGZybXNpemUuc3RlcHdpc2Uuc3RlcF93aWR0aCA9IDE2OworCWZybXNpemUuc3RlcHdpc2UubWluX2hlaWdodCA9IGZybXNpemUuc3RlcHdpc2Uuc3RlcF9oZWlnaHQgPSAxNjsKKwlmcm1zaXplLnN0ZXB3aXNlLm1heF93aWR0aCA9IGNhbS0+c2Vuc29yLmNyb3BjYXAuYm91bmRzLndpZHRoOworCWZybXNpemUuc3RlcHdpc2UubWF4X2hlaWdodCA9IGNhbS0+c2Vuc29yLmNyb3BjYXAuYm91bmRzLmhlaWdodDsKKwltZW1zZXQoJmZybXNpemUucmVzZXJ2ZWQsIDAsIHNpemVvZihmcm1zaXplLnJlc2VydmVkKSk7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmZybXNpemUsIHNpemVvZihmcm1zaXplKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAogc245YzEwMl92aWRpb2NfZW51bV9mbXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQogewogCXN0cnVjdCB2NGwyX2ZtdGRlc2MgZm10ZDsKQEAgLTIxMzQsMTIgKzIzOTksMjYgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZtdGQsIGFyZywgc2l6ZW9mKGZtdGQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKKwlpZiAoZm10ZC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoZm10ZC5pbmRleCA9PSAwKSB7CiAJCXN0cmNweShmbXRkLmRlc2NyaXB0aW9uLCAiYmF5ZXIgcmdiIik7CiAJCWZtdGQucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OwogCX0gZWxzZSBpZiAoZm10ZC5pbmRleCA9PSAxKSB7CisJCXN3aXRjaCAoY2FtLT5icmlkZ2UpIHsKKwkJY2FzZSBCUklER0VfU045QzEwMToKKwkJY2FzZSBCUklER0VfU045QzEwMjoKKwkJY2FzZSBCUklER0VfU045QzEwMzoKIAkJc3RyY3B5KGZtdGQuZGVzY3JpcHRpb24sICJjb21wcmVzc2VkIik7CiAJCWZtdGQucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU045QzEwWDsKKwkJCWJyZWFrOworCQljYXNlIEJSSURHRV9TTjlDMTA1OgorCQljYXNlIEJSSURHRV9TTjlDMTIwOgorCQkJc3RyY3B5KGZtdGQuZGVzY3JpcHRpb24sICJKUEVHIik7CisJCQlmbXRkLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0pQRUc7CisJCQlicmVhazsKKwkJfQogCQlmbXRkLmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOwogCX0gZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIxNjYsNyArMjQ0NSw4IEBACiAJaWYgKGZvcm1hdC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwZm10LT5ieXRlc3BlcmxpbmUgPSAocGZtdC0+cGl4ZWxmb3JtYXQ9PVY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCXBmbXQtPmJ5dGVzcGVybGluZSA9IChwZm10LT5waXhlbGZvcm1hdD09VjRMMl9QSVhfRk1UX1NOOUMxMFggfHwKKwkJCSAgICAgIHBmbXQtPnBpeGVsZm9ybWF0PT1WNEwyX1BJWF9GTVRfSlBFRykKIAkJCSAgICAgPyAwIDogKHBmbXQtPndpZHRoICogcGZtdC0+cHJpdikgLyA4OwogCXBmbXQtPnNpemVpbWFnZSA9IHBmbXQtPmhlaWdodCAqICgocGZtdC0+d2lkdGgqcGZtdC0+cHJpdikvOCk7CiAJcGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CkBAIC0yMjM3LDEyICsyNTE3LDI1IEBACiAJcGl4LT53aWR0aCA9IHJlY3Qud2lkdGggLyBzY2FsZTsKIAlwaXgtPmhlaWdodCA9IHJlY3QuaGVpZ2h0IC8gc2NhbGU7CiAKKwlzd2l0Y2ggKGNhbS0+YnJpZGdlKSB7CisJY2FzZSBCUklER0VfU045QzEwMToKKwljYXNlIEJSSURHRV9TTjlDMTAyOgorCWNhc2UgQlJJREdFX1NOOUMxMDM6CiAJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1NOOUMxMFggJiYKIAkgICAgcGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfU0JHR1I4KQogCQlwaXgtPnBpeGVsZm9ybWF0ID0gcGZtdC0+cGl4ZWxmb3JtYXQ7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMDU6CisJY2FzZSBCUklER0VfU045QzEyMDoKKwkJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX0pQRUcgJiYKKwkJICAgIHBpeC0+cGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKKwkJCXBpeC0+cGl4ZWxmb3JtYXQgPSBwZm10LT5waXhlbGZvcm1hdDsKKwkJYnJlYWs7CisJfQogCXBpeC0+cHJpdiA9IHBmbXQtPnByaXY7IC8qIGJwcCAqLwogCXBpeC0+Y29sb3JzcGFjZSA9IHBmbXQtPmNvbG9yc3BhY2U7Ci0JcGl4LT5ieXRlc3BlcmxpbmUgPSAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwlwaXgtPmJ5dGVzcGVybGluZSA9IChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYIHx8CisJCQkgICAgIHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX0pQRUcpCiAJCQkgICAgPyAwIDogKHBpeC0+d2lkdGggKiBwaXgtPnByaXYpIC8gODsKIAlwaXgtPnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0ICogKChwaXgtPndpZHRoICogcGl4LT5wcml2KSAvIDgpOwogCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CkBAIC0yMzE1LDggKzI2MDgsNyBAQAogc3RhdGljIGludAogc245YzEwMl92aWRpb2NfZ19qcGVnY29tcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7Ci0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYW0tPmNvbXByZXNzaW9uLAotCQkJIHNpemVvZihjYW0tPmNvbXByZXNzaW9uKSkpCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYW0tPmNvbXByZXNzaW9uLCBzaXplb2YoY2FtLT5jb21wcmVzc2lvbikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwpAQCAtMjQ3MSw2ICsyNzYzLDcgQEAKIAlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90ICpmOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAlsb25nIHRpbWVvdXQ7CisJaW50IGVyciA9IDA7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmIsIGFyZywgc2l6ZW9mKGIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yNDgzLDYgKzI3NzYsMTUgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCQlyZXR1cm4gLUVBR0FJTjsKKwkJaWYgKCFjYW0tPm1vZHVsZV9wYXJhbS5mcmFtZV90aW1lb3V0KSB7CisJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJCSAgICAgICggY2FtLT53YWl0X2ZyYW1lLAorCQkJCSghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHx8CisJCQkJKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fAorCQkJCShjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpICk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0gZWxzZSB7CiAJCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dAogCQkJICAoIGNhbS0+d2FpdF9mcmFtZSwKIAkJCSAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fApAQCAtMjQ5Miw5ICsyNzk0LDE1IEBACiAJCQkgICAgMTAwMCAqIG1zZWNzX3RvX2ppZmZpZXMoMSkgKTsKIAkJaWYgKHRpbWVvdXQgPCAwKQogCQkJcmV0dXJuIHRpbWVvdXQ7CisJCQllbHNlIGlmICh0aW1lb3V0ID09IDAgJiYKKwkJCQkgIShjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkpIHsKKwkJCQlEQkcoMSwgIlZpZGVvIGZyYW1lIHRpbWVvdXQgZWxhcHNlZCIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CiAJCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKIAkJCXJldHVybiAtRU5PREVWOwotCQlpZiAoIXRpbWVvdXQgfHwgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkpCisJCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpCiAJCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI2MTIsNiArMjkyMCw3MCBAQAogfQogCiAKK3N0YXRpYyBpbnQKK3NuOWMxMDJfdmlkaW9jX2VudW1hdWRpbyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJc3RydWN0IHY0bDJfYXVkaW8gYXVkaW87CisKKwlpZiAoY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDEgfHwgY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhdWRpbywgYXJnLCBzaXplb2YoYXVkaW8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoYXVkaW8uaW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJjcHkoYXVkaW8ubmFtZSwgIk1pY3JvcGhvbmUiKTsKKwlhdWRpby5jYXBhYmlsaXR5ID0gMDsKKwlhdWRpby5tb2RlID0gMDsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYXVkaW8sIHNpemVvZihhdWRpbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3NuOWMxMDJfdmlkaW9jX2dfYXVkaW8oc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB2NGwyX2F1ZGlvIGF1ZGlvOworCisJaWYgKGNhbS0+YnJpZGdlID09IEJSSURHRV9TTjlDMTAxIHx8IGNhbS0+YnJpZGdlID09IEJSSURHRV9TTjlDMTAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYXVkaW8sIGFyZywgc2l6ZW9mKGF1ZGlvKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJbWVtc2V0KCZhdWRpbywgMCwgc2l6ZW9mKGF1ZGlvKSk7CisJc3RyY3B5KGF1ZGlvLm5hbWUsICJNaWNyb3Bob25lIik7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmF1ZGlvLCBzaXplb2YoYXVkaW8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CitzbjljMTAyX3ZpZGlvY19zX2F1ZGlvKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3QgdjRsMl9hdWRpbyBhdWRpbzsKKworCWlmIChjYW0tPmJyaWRnZSA9PSBCUklER0VfU045QzEwMSB8fCBjYW0tPmJyaWRnZSA9PSBCUklER0VfU045QzEwMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmF1ZGlvLCBhcmcsIHNpemVvZihhdWRpbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChhdWRpby5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisKIHN0YXRpYyBpbnQgc245YzEwMl9pb2N0bF92NGwyKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAogCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7CkBAIC0yNjQ5LDYgKzMwMjEsOSBAQAogCWNhc2UgVklESU9DX1NfQ1JPUDoKIAkJcmV0dXJuIHNuOWMxMDJfdmlkaW9jX3NfY3JvcChjYW0sIGFyZyk7CiAKKwljYXNlIFZJRElPQ19FTlVNX0ZSQU1FU0laRVM6CisJCXJldHVybiBzbjljMTAyX3ZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMoY2FtLCBhcmcpOworCiAJY2FzZSBWSURJT0NfRU5VTV9GTVQ6CiAJCXJldHVybiBzbjljMTAyX3ZpZGlvY19lbnVtX2ZtdChjYW0sIGFyZyk7CiAKQEAgLTI2ODksMTEgKzMwNjQsMjEgQEAKIAljYXNlIFZJRElPQ19TX1BBUk06CiAJCXJldHVybiBzbjljMTAyX3ZpZGlvY19zX3Bhcm0oY2FtLCBhcmcpOwogCisJY2FzZSBWSURJT0NfRU5VTUFVRElPOgorCQlyZXR1cm4gc245YzEwMl92aWRpb2NfZW51bWF1ZGlvKGNhbSwgYXJnKTsKKworCWNhc2UgVklESU9DX0dfQVVESU86CisJCXJldHVybiBzbjljMTAyX3ZpZGlvY19nX2F1ZGlvKGNhbSwgYXJnKTsKKworCWNhc2UgVklESU9DX1NfQVVESU86CisJCXJldHVybiBzbjljMTAyX3ZpZGlvY19zX2F1ZGlvKGNhbSwgYXJnKTsKKwogCWNhc2UgVklESU9DX0dfU1REOgogCWNhc2UgVklESU9DX1NfU1REOgogCWNhc2UgVklESU9DX1FVRVJZU1REOgogCWNhc2UgVklESU9DX0VOVU1TVEQ6CiAJY2FzZSBWSURJT0NfUVVFUllNRU5VOgorCWNhc2UgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM6CiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGVmYXVsdDoKQEAgLTI3NDEsNiArMzEyNiw3IEBACiAJLm9wZW4gPSAgICBzbjljMTAyX29wZW4sCiAJLnJlbGVhc2UgPSBzbjljMTAyX3JlbGVhc2UsCiAJLmlvY3RsID0gICBzbjljMTAyX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLnJlYWQgPSAgICBzbjljMTAyX3JlYWQsCiAJLnBvbGwgPSAgICBzbjljMTAyX3BvbGwsCiAJLm1tYXAgPSAgICBzbjljMTAyX21tYXAsCkBAIC0yNzY1LDcgKzMxNTEsNyBAQAogCWNhbS0+dXNiZGV2ID0gdWRldjsKIAogCWlmICghKGNhbS0+Y29udHJvbF9idWZmZXIgPSBremFsbG9jKDgsIEdGUF9LRVJORUwpKSkgewotCQlEQkcoMSwgImttYWxsb2MoKSBmYWlsZWQiKTsKKwkJREJHKDEsICJremFsbG9jKCkgZmFpbGVkIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0yNzc5LDI0ICszMTY1LDMxIEBACiAJbXV0ZXhfaW5pdCgmY2FtLT5kZXZfbXV0ZXgpOwogCiAJciA9IHNuOWMxMDJfcmVhZF9yZWcoY2FtLCAweDAwKTsKLQlpZiAociA8IDAgfHwgciAhPSAweDEwKSB7Ci0JCURCRygxLCAiU29ycnksIHRoaXMgaXMgbm90IGEgU045QzEweCBiYXNlZCBjYW1lcmEgIgotCQkgICAgICAgIih2aWQvcGlkIDB4JTA0WC8weCUwNFgpIiwgaWQtPmlkVmVuZG9yLCBpZC0+aWRQcm9kdWN0KTsKKwlpZiAociA8IDAgfHwgKHIgIT0gMHgxMCAmJiByICE9IDB4MTEgJiYgciAhPSAweDEyKSkgeworCQlEQkcoMSwgIlNvcnJ5LCB0aGlzIGlzIG5vdCBhIFNOOUMxeHggYmFzZWQgY2FtZXJhICIKKwkJICAgICAgICIodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQljYW0tPmJyaWRnZSA9IChpZC0+aWRQcm9kdWN0ICYgMHhmZmMwKSA9PSAweDYwODAgPwotCQkgICAgICBCUklER0VfU045QzEwMyA6IEJSSURHRV9TTjlDMTAyOworCWNhbS0+YnJpZGdlID0gaWQtPmRyaXZlcl9pbmZvOwogCXN3aXRjaCAoY2FtLT5icmlkZ2UpIHsKIAljYXNlIEJSSURHRV9TTjlDMTAxOgogCWNhc2UgQlJJREdFX1NOOUMxMDI6CiAJCURCRygyLCAiU045QzEwWzEyXSBQQyBDYW1lcmEgQ29udHJvbGxlciBkZXRlY3RlZCAiCi0JCSAgICAgICAiKHZpZC9waWQgMHglMDRYLzB4JTA0WCkiLCBpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOworCQkgICAgICAgIih2aWQvcGlkIDB4JTA0WDoweCUwNFgpIiwgaWQtPmlkVmVuZG9yLCBpZC0+aWRQcm9kdWN0KTsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU045QzEwMzoKIAkJREJHKDIsICJTTjlDMTAzIFBDIENhbWVyYSBDb250cm9sbGVyIGRldGVjdGVkICIKLQkJICAgICAgICIodmlkL3BpZCAweCUwNFgvMHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisJCSAgICAgICAiKHZpZC9waWQgMHglMDRYOjB4JTA0WCkiLCBpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOworCQlicmVhazsKKwljYXNlIEJSSURHRV9TTjlDMTA1OgorCQlEQkcoMiwgIlNOOUMxMDUgUEMgQ2FtZXJhIENvbnRyb2xsZXIgZGV0ZWN0ZWQgIgorCQkgICAgICAgIih2aWQvcGlkIDB4JTA0WDoweCUwNFgpIiwgaWQtPmlkVmVuZG9yLCBpZC0+aWRQcm9kdWN0KTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU045QzEyMDoKKwkJREJHKDIsICJTTjlDMTIwIFBDIENhbWVyYSBDb250cm9sbGVyIGRldGVjdGVkICIKKwkJICAgICAgICIodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjgxNiwxMiArMzIwOSwxOCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJaWYgKCEoY2FtLT5icmlkZ2UgJiBjYW0tPnNlbnNvci5zdXBwb3J0ZWRfYnJpZGdlKSkgeworCQlEQkcoMSwgIkJyaWRnZSBub3Qgc3VwcG9ydGVkIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDsKKwl9CisKIAlpZiAoc245YzEwMl9pbml0KGNhbSkpIHsKIAkJREJHKDEsICJJbml0aWFsaXphdGlvbiBmYWlsZWQuIEkgd2lsbCByZXRyeSBvbiBvcGVuKCkuIik7CiAJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJfQogCi0Jc3RyY3B5KGNhbS0+djRsZGV2LT5uYW1lLCAiU045QzEweCBQQyBDYW1lcmEiKTsKKwlzdHJjcHkoY2FtLT52NGxkZXYtPm5hbWUsICJTTjlDMXh4IFBDIENhbWVyYSIpOwogCWNhbS0+djRsZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwogCWNhbS0+djRsZGV2LT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX1NDQUxFUzsKIAljYW0tPnY0bGRldi0+aGFyZHdhcmUgPSAwOwpAQCAtMjgzOCw3ICszMjM3LDEwIEBACiAJCURCRygxLCAiVjRMMiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCIpOwogCQlpZiAoZXJyID09IC1FTkZJTEUgJiYgdmlkZW9fbnJbZGV2X25yXSA9PSAtMSkKIAkJCURCRygxLCAiRnJlZSAvZGV2L3ZpZGVvWCBub2RlIG5vdCBmb3VuZCIpOwotCQlnb3RvIGZhaWwyOworCQl2aWRlb19ucltkZXZfbnJdID0gLTE7CisJCWRldl9uciA9IChkZXZfbnIgPCBTTjlDMTAyX01BWF9ERVZJQ0VTLTEpID8gZGV2X25yKzEgOiAwOworCQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKKwkJZ290byBmYWlsOwogCX0KIAogCURCRygyLCAiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bWlub3IpOwpAQCAtMjg1MCw5ICszMjUyLDE0IEBACiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiAJZXJyID0gc245YzEwMl9jcmVhdGVfc3lzZnMoY2FtKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZhaWwzOwotCURCRygyLCAiT3B0aW9uYWwgZGV2aWNlIGNvbnRyb2wgdGhyb3VnaCAnc3lzZnMnIGludGVyZmFjZSByZWFkeSIpOworCWlmICghZXJyKQorCQlEQkcoMiwgIk9wdGlvbmFsIGRldmljZSBjb250cm9sIHRocm91Z2ggJ3N5c2ZzJyAiCisJCSAgICAgICAiaW50ZXJmYWNlIHJlYWR5Iik7CisJZWxzZQorCQlEQkcoMiwgIkZhaWxlZCB0byBjcmVhdGUgb3B0aW9uYWwgJ3N5c2ZzJyBpbnRlcmZhY2UgZm9yICIKKwkJICAgICAgICJkZXZpY2UgY29udHJvbGxpbmcuIEVycm9yICMlZCIsIGVycik7CisjZWxzZQorCURCRygyLCAiT3B0aW9uYWwgZGV2aWNlIGNvbnRyb2wgdGhyb3VnaCAnc3lzZnMnIGludGVyZmFjZSBkaXNhYmxlZCIpOwogI2VuZGlmCiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhbSk7CkBAIC0yODYxLDE0ICszMjY4LDYgQEAKIAogCXJldHVybiAwOwogCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotZmFpbDM6Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYpOwotI2VuZGlmCi1mYWlsMjoKLQl2aWRlb19ucltkZXZfbnJdID0gLTE7Ci0JZGV2X25yID0gKGRldl9uciA8IFNOOUMxMDJfTUFYX0RFVklDRVMtMSkgPyBkZXZfbnIrMSA6IDA7Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiBmYWlsOgogCWlmIChjYW0pIHsKIAkJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTY4MmVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaApAQCAtMCwwICsxLDE0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGFibGUgb2YgZGV2aWNlIGlkZW50aWZpZXJzIG9mIHRoZSBTTjlDMXh4IFBDIENhbWVyYSBDb250cm9sbGVycyAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfU045QzEwMl9ERVZUQUJMRV9IXworI2RlZmluZSBfU045QzEwMl9ERVZUQUJMRV9IXworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKK3N0cnVjdCBzbjljMTAyX2RldmljZTsKKworLyoKKyAgIEVhY2ggU045QzF4eCBjYW1lcmEgaGFzIHByb3BlciBQSUQvVklEIGlkZW50aWZpZXJzLgorICAgU045QzEwMywgU045QzEwNSwgU045QzEyMCBzdXBwb3J0IG11bHRpcGxlIGludGVyZmFjZXMsIGJ1dCB3ZSBvbmx5IGhhdmUgdG8KKyAgIGhhbmRsZSB0aGUgdmlkZW8gY2xhc3MgaW50ZXJmYWNlLgorKi8KKyNkZWZpbmUgU045QzEwMl9VU0JfREVWSUNFKHZlbmQsIHByb2QsIGJyaWRnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuaWRWZW5kb3IgPSAodmVuZCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5pZFByb2R1Y3QgPSAocHJvZCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmJJbnRlcmZhY2VDbGFzcyA9IDB4ZmYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuZHJpdmVyX2luZm8gPSAoYnJpZGdlKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgc245YzEwMl9pZF90YWJsZVtdID0geworCS8qIFNOOUMxMDEgYW5kIFNOOUMxMDIgKi8KKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSwgQlJJREdFX1NOOUMxMDIpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1LCBCUklER0VfU045QzEwMiksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcsIEJSSURHRV9TTjlDMTAyKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSwgQlJJREdFX1NOOUMxMDIpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDExLCBCUklER0VfU045QzEwMiksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMGQsIEJSSURHRV9TTjlDMTAyKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAxOSwgQlJJREdFX1NOOUMxMDIpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0LCBCUklER0VfU045QzEwMiksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjUsIEJSSURHRV9TTjlDMTAyKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOCwgQlJJREdFX1NOOUMxMDIpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI5LCBCUklER0VfU045QzEwMiksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmEsIEJSSURHRV9TTjlDMTAyKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYiwgQlJJREdFX1NOOUMxMDIpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJjLCBCUklER0VfU045QzEwMiksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmQsIEJSSURHRV9TTjlDMTAyKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyZSwgQlJJREdFX1NOOUMxMDIpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDMwLCBCUklER0VfU045QzEwMiksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwM2YsIEJSSURHRV9TTjlDMTAyKSwgfSwKKwkvKiBTTjlDMTAzICovCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODAsIEJSSURHRV9TTjlDMTAzKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4MiwgQlJJREdFX1NOOUMxMDMpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDgzLCBCUklER0VfU045QzEwMyksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODgsIEJSSURHRV9TTjlDMTAzKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4YSwgQlJJREdFX1NOOUMxMDMpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhiLCBCUklER0VfU045QzEwMyksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGMsIEJSSURHRV9TTjlDMTAzKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4ZSwgQlJJREdFX1NOOUMxMDMpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhmLCBCUklER0VfU045QzEwMyksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTAsIEJSSURHRV9TTjlDMTAzKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhMiwgQlJJREdFX1NOOUMxMDMpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGEzLCBCUklER0VfU045QzEwMyksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTgsIEJSSURHRV9TTjlDMTAzKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhYSwgQlJJREdFX1NOOUMxMDMpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFiLCBCUklER0VfU045QzEwMyksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWMsIEJSSURHRV9TTjlDMTAzKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhZSwgQlJJREdFX1NOOUMxMDMpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFmLCBCUklER0VfU045QzEwMyksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjAsIEJSSURHRV9TTjlDMTAzKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiMiwgQlJJREdFX1NOOUMxMDMpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGIzLCBCUklER0VfU045QzEwMyksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjgsIEJSSURHRV9TTjlDMTAzKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiYSwgQlJJREdFX1NOOUMxMDMpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGJiLCBCUklER0VfU045QzEwMyksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmMsIEJSSURHRV9TTjlDMTAzKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiZSwgQlJJREdFX1NOOUMxMDMpLCB9LAorCS8qIFNOOUMxMDUgKi8KKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDA0NzEsIDB4MDMyNywgQlJJREdFX1NOOUMxMDUpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI4LCBCUklER0VfU045QzEwNSksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYzAsIEJSSURHRV9TTjlDMTA1KSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBjOCwgQlJJREdFX1NOOUMxMDUpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGNjLCBCUklER0VfU045QzEwNSksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZWEsIEJSSURHRV9TTjlDMTA1KSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBlYywgQlJJREdFX1NOOUMxMDUpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZhLCBCUklER0VfU045QzEwNSksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZmIsIEJSSURHRV9TTjlDMTA1KSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYywgQlJJREdFX1NOOUMxMDUpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZlLCBCUklER0VfU045QzEwNSksIH0sCisJLyogU045QzEyMCAqLworCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTMwLCBCUklER0VfU045QzEyMCksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2EsIEJSSURHRV9TTjlDMTIwKSwgfSwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYiwgQlJJREdFX1NOOUMxMjApLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNjLCBCUklER0VfU045QzEyMCksIH0sCisJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2UsIEJSSURHRV9TTjlDMTIwKSwgfSwKKwl7IH0KK307CisKKy8qCisgICBQcm9iaW5nIGZ1bmN0aW9uczogb24gc3VjY2VzcywgeW91IG11c3QgYXR0YWNoIHRoZSBzZW5zb3IgdG8gdGhlIGNhbWVyYQorICAgYnkgY2FsbGluZyBzbjljMTAyX2F0dGFjaF9zZW5zb3IoKS4KKyAgIFRvIGVuYWJsZSB0aGUgSTJDIGNvbW11bmljYXRpb24sIHlvdSBtaWdodCBuZWVkIHRvIHBlcmZvcm0gYSByZWFsbHkgYmFzaWMKKyAgIGluaXRpYWxpemF0aW9uIG9mIHRoZSBTTjlDMVhYIGNoaXAuCisgICBGdW5jdGlvbnMgbXVzdCByZXR1cm4gMCBvbiBzdWNjZXNzLCB0aGUgYXBwcm9wcmlhdGUgZXJyb3Igb3RoZXJ3aXNlLgorKi8KK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV9odjcxMzFkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV9taTAzNDMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX292NzYzMChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CitleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfb3Y3NjYwKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV9wYXMxMDZiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV9wYXMyMDJiY2Ioc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX3RhczUxMTBjMWIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX3RhczUxMzBkMWIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworCisvKgorICAgQWRkIHRoZSBhYm92ZSBlbnRyaWVzIHRvIHRoaXMgdGFibGUuIEJlIHN1cmUgdG8gYWRkIHRoZSBlbnRyeSBpbiB0aGUgcmlnaHQKKyAgIHBsYWNlLCBzaW5jZSwgb24gZmFpbHVyZSwgdGhlIG5leHQgcHJvYmluZyByb3V0aW5lIGlzIGNhbGxlZCBhY2NvcmRpbmcgdG8KKyAgIHRoZSBvcmRlciBvZiB0aGUgbGlzdCBiZWxvdywgZnJvbSB0b3AgdG8gYm90dG9tLgorKi8KK3N0YXRpYyBpbnQgKCpzbjljMTAyX3NlbnNvcl90YWJsZVtdKShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqKSA9IHsKKwkmc245YzEwMl9wcm9iZV9taTAzNDMsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLworCSZzbjljMTAyX3Byb2JlX3BhczEwNmIsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLworCSZzbjljMTAyX3Byb2JlX3BhczIwMmJjYiwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCisJJnNuOWMxMDJfcHJvYmVfaHY3MTMxZCwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCisJJnNuOWMxMDJfcHJvYmVfb3Y3NjMwLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KKwkmc245YzEwMl9wcm9iZV9vdjc2NjAsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLworCSZzbjljMTAyX3Byb2JlX3RhczUxMTBjMWIsIC8qIGRldGVjdGlvbiBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLworCSZzbjljMTAyX3Byb2JlX3RhczUxMzBkMWIsIC8qIGRldGVjdGlvbiBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLworCU5VTEwsCit9OworCisjZW5kaWYgLyogX1NOOUMxMDJfREVWVEFCTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMWQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMWQuYwppbmRleCBjNDExN2JmLi43YWUzNjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9odjcxMzFkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfaHY3MTMxZC5jCkBAIC0xLDggKzEsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUGx1Zy1pbiBmb3IgSFY3MTMxRCBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICAgKgorICogUGx1Zy1pbiBmb3IgSFY3MTMxRCBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMXh4IFBDIENhbWVyYSAgICAgKgogICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgpAQCAtMTI0LDcgKzEyNCw3IEBACiBzdGF0aWMgaW50IGh2NzEzMWRfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCiAJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKIHsKLQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmaHY3MTMxZDsKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBzbjljMTAyX2dldF9zZW5zb3IoY2FtKTsKIAlpbnQgZXJyID0gMDsKIAl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyAyLAogCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAyOwpAQCAtMTUzLDYgKzE1Myw3IEBACiBzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIGh2NzEzMWQgPSB7CiAJLm5hbWUgPSAiSFY3MTMxRCIsCiAJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCisJLnN1cHBvcnRlZF9icmlkZ2UgPSBCUklER0VfU045QzEwMSB8IEJSSURHRV9TTjlDMTAyIHwgQlJJREdFX1NOOUMxMDMsCiAJLnN5c2ZzX29wcyA9IFNOOUMxMDJfSTJDX1JFQUQgfCBTTjlDMTAyX0kyQ19XUklURSwKIAkuZnJlcXVlbmN5ID0gU045QzEwMl9JMkNfMTAwS0haLAogCS5pbnRlcmZhY2UgPSBTTjlDMTAyX0kyQ18yV0lSRVMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNDMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM0My5jCmluZGV4IDQxNjllYTQuLmEzM2QxYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM0My5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM0My5jCkBAIC0xLDggKzEsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUGx1Zy1pbiBmb3IgTUktMDM0MyBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICAgKgorICogUGx1Zy1pbiBmb3IgTUktMDM0MyBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMXh4IFBDIENhbWVyYSAgICAgKgogICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgpAQCAtMjAxLDcgKzIwMSw3IEBACiBzdGF0aWMgaW50IG1pMDM0M19zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQogewotCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZtaTAzNDM7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gc245YzEwMl9nZXRfc2Vuc29yKGNhbSk7CiAJaW50IGVyciA9IDA7CiAJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgMCwKIAkgICB2X3N0YXJ0ID0gKHU4KShyZWN0LT50b3AgLSBzLT5jcm9wY2FwLmJvdW5kcy50b3ApICsgMjsKQEAgLTIzNyw2ICsyMzcsNyBAQAogc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBtaTAzNDMgPSB7CiAJLm5hbWUgPSAiTUktMDM0MyIsCiAJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCisJLnN1cHBvcnRlZF9icmlkZ2UgPSBCUklER0VfU045QzEwMSB8IEJSSURHRV9TTjlDMTAyIHwgQlJJREdFX1NOOUMxMDMsCiAJLmZyZXF1ZW5jeSA9IFNOOUMxMDJfSTJDXzEwMEtIWiwKIAkuaW50ZXJmYWNlID0gU045QzEwMl9JMkNfMldJUkVTLAogCS5pMmNfc2xhdmVfaWQgPSAweDVkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjMwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9vdjc2MzAuYwppbmRleCAzZGEwNDIwLi43ZGYwOWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9vdjc2MzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9vdjc2MzAuYwpAQCAtMSw4ICsxLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBsdWctaW4gZm9yIE9WNzYzMCBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICAgICoKKyAqIFBsdWctaW4gZm9yIE9WNzYzMCBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMXh4IFBDIENhbWVyYSAgICAgICoKICAqIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKQEAgLTI5LDEzICsyOSwxNyBAQAogewogCWludCBlcnIgPSAwOwogCisJc3dpdGNoIChzbjljMTAyX2dldF9icmlkZ2UoY2FtKSkgeworCWNhc2UgQlJJREdFX1NOOUMxMDE6CisJY2FzZSBCUklER0VfU045QzEwMjoKIAllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDE0KTsKIAllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDYwLCAweDE3KTsKIAllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDBmLCAweDE4KTsKIAllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDUwLCAweDE5KTsKIAotCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTIsIDB4ODApOwotCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTEsIDB4MDEpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEyLCAweDhkKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMiwgMHgwZCk7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTEsIDB4MDApOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTUsIDB4MzQpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTYsIDB4MDMpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTcsIDB4MWMpOwpAQCAtNDMsMTQgKzQ3LDcyIEBACiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxOSwgMHgwNik7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxYSwgMHhmNik7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxYiwgMHgwNCk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMCwgMHhmNik7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjAsIDB4NDQpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDIzLCAweGVlKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNiwgMHhhMCk7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjcsIDB4OWEpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDI4LCAweDIwKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyOSwgMHgzMCk7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MmYsIDB4M2QpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDMwLCAweDI0KTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMiwgMHg4Nik7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4NjAsIDB4YTkpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDYxLCAweDQyKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2NSwgMHgwMCk7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4NjksIDB4MzgpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDZmLCAweDg4KTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3MCwgMHgwYik7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4NzEsIDB4MDApOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDc0LCAweDIxKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3ZCwgMHhmNyk7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMDM6CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MDIpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDAzKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgxYSwgMHgwNCk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MDUpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDA2KTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgwNyk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDMsIDB4MTApOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDBhLCAweDE0KTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg2MCwgMHgxNyk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGYsIDB4MTgpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDUwLCAweDE5KTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgxZCwgMHgxYSk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MTAsIDB4MWIpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAyLCAweDFjKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMywgMHgxZCk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGYsIDB4MWUpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDBjLCAweDFmKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgyMCk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MTAsIDB4MjEpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDIyKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgzMCwgMHgyMyk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MjQpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDUwLCAweDI1KTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg2MCwgMHgyNik7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NzAsIDB4MjcpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDgwLCAweDI4KTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg5MCwgMHgyOSk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4YTAsIDB4MmEpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGIwLCAweDJiKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhjMCwgMHgyYyk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZDAsIDB4MmQpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGUwLCAweDJlKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhmMCwgMHgyZik7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZmYsIDB4MzApOworCisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTIsIDB4OGQpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEyLCAweDBkKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxNSwgMHgzNCk7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTEsIDB4MDEpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDFiLCAweDA0KTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMCwgMHg0NCk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMywgMHhlZSk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNiwgMHhhMCk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNywgMHg5YSk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyOCwgMHhhMCk7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjgsIDB4MjApOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjksIDB4MzApOwotCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MmEsIDB4YTApOwotCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MmIsIDB4MWYpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MmYsIDB4M2QpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MzAsIDB4MjQpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MzIsIDB4ODYpOwpAQCAtNjMsMTEgKzEyNSw3NyBAQAogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4NzEsIDB4MDApOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4NzQsIDB4MjEpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4N2QsIDB4ZjcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gZXJyOwogfQogCiAKK3N0YXRpYyBpbnQgb3Y3NjMwX2dldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MTApKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBzbjljMTAyX3ByZWFkX3JlZyhjYW0sIDB4MDcpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBzbjljMTAyX3ByZWFkX3JlZyhjYW0sIDB4MDYpOworCQlicmVhazsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBzbjljMTAyX3ByZWFkX3JlZyhjYW0sIDB4MDUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwMCkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDNmOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwYykpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDNmOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1dISVRFTkVTUzoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDBkKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4M2Y7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgxMykpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDAxOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4NzUpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAoY3RybC0+dmFsdWUgJiAweDgwKSA/IDEgOiAwOworCQlicmVhazsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR0FNTUE6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgxNCkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IChjdHJsLT52YWx1ZSAmIDB4MDIpID8gMSA6IDA7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9CQU5EX0ZJTFRFUjoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDJkKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gKGN0cmwtPnZhbHVlICYgMHgwMikgPyAxIDogMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKIHN0YXRpYyBpbnQgb3Y3NjMwX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAogCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKIHsKQEAgLTc1LDU3ICsyMDMsMzUgQEAKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgotCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEwLCBjdHJsLT52YWx1ZSA+PiAyKTsKLQkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3NiwgY3RybC0+dmFsdWUgJiAweDAzKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMCwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgotCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDAyLCBjdHJsLT52YWx1ZSk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGN0cmwtPnZhbHVlLCAweDA3KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6Ci0JCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDEsIGN0cmwtPnZhbHVlKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY3RybC0+dmFsdWUsIDB4MDYpOworCQlicmVhazsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY3RybC0+dmFsdWUsIDB4MDUpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0dBSU46CiAJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDAsIGN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJZXJyICs9IGN0cmwtPnZhbHVlID8gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA1LAotCQkJCQkJICAgICAgIChjdHJsLT52YWx1ZS0xKSB8IDB4MjApCi0JCQkJICAgOiBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDUsIDB4MDApOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDYsIGN0cmwtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDAzLCBjdHJsLT52YWx1ZSA8PCA0KTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWVyciArPSBjdHJsLT52YWx1ZSA/IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNCwKLQkJCQkJCSAgICAgICAoY3RybC0+dmFsdWUtMSkgfCAweDIwKQotCQkJCSAgIDogc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA0LCAweDAwKTsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFOgogCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBjLCBjdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfV0hJVEVORVNTOgogCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBkLCBjdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOgotCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEyLCAoY3RybC0+dmFsdWUgPDwgMikgfCAweDc4KTsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKLQkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMywgY3RybC0+dmFsdWUpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEzLCBjdHJsLT52YWx1ZSB8CisJCQkJCQkgICAgKGN0cmwtPnZhbHVlIDw8IDEpKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9WRkxJUDoKIAkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3NSwgMHgwZSB8IChjdHJsLT52YWx1ZSA8PCA3KSk7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQkxBQ0tfTEVWRUw6Ci0JCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjUsIGN0cmwtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0JSSUdIVF9MRVZFTDoKLQkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNCwgY3RybC0+dmFsdWUpOwotCQlicmVhazsKIAljYXNlIFNOOUMxMDJfVjRMMl9DSURfR0FNTUE6Ci0JCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTQsIChjdHJsLT52YWx1ZSA8PCAyKSB8IDB4ODApOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDE0LCBjdHJsLT52YWx1ZSA8PCAyKTsKIAkJYnJlYWs7CiAJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0JBTkRfRklMVEVSOgogCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDJkLCBjdHJsLT52YWx1ZSA8PCAyKTsKQEAgLTE0MSwxMCArMjQ3LDEyIEBACiBzdGF0aWMgaW50IG92NzYzMF9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKIAkJCSAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCiB7Ci0Jc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJm92NzYzMDsKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBzbjljMTAyX2dldF9zZW5zb3IoY2FtKTsKIAlpbnQgZXJyID0gMDsKLQl1OCB2X3N0YXJ0ID0gKHU4KShyZWN0LT50b3AgLSBzLT5jcm9wY2FwLmJvdW5kcy50b3ApICsgMTsKKwl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyAxLAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAxOwogCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CiAJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTY4LDcgKzI3Niw4IEBACiBzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIG92NzYzMCA9IHsKIAkubmFtZSA9ICJPVjc2MzAiLAogCS5tYWludGFpbmVyID0gIkx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iLAotCS5zeXNmc19vcHMgPSBTTjlDMTAyX0kyQ19XUklURSwKKwkuc3VwcG9ydGVkX2JyaWRnZSA9IEJSSURHRV9TTjlDMTAxIHwgQlJJREdFX1NOOUMxMDIgfCBCUklER0VfU045QzEwMywKKwkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfUkVBRCB8IFNOOUMxMDJfSTJDX1dSSVRFLAogCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ18xMDBLSFosCiAJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzJXSVJFUywKIAkuaTJjX3NsYXZlX2lkID0gMHgyMSwKQEAgLTE4NSw4MyArMjk0LDEzIEBACiAJCQkuZmxhZ3MgPSAwLAogCQl9LAogCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9IVUUsCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZSA9ICJodWUiLAotCQkJLm1pbmltdW0gPSAweDAwLAotCQkJLm1heGltdW0gPSAweDFmKzEsCi0JCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCi0JCQkuZmxhZ3MgPSAwLAotCQl9LAotCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAic2F0dXJhdGlvbiIsCi0JCQkubWluaW11bSA9IDB4MDAsCi0JCQkubWF4aW11bSA9IDB4MGYsCi0JCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDgsCi0JCQkuZmxhZ3MgPSAwLAotCQl9LAotCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gImNvbnRyYXN0IiwKLQkJCS5taW5pbXVtID0gMHgwMCwKLQkJCS5tYXhpbXVtID0gMHgxZisxLAotCQkJLnN0ZXAgPSAweDAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAotCQkJLmZsYWdzID0gMCwKLQkJfSwKLQkJewogCQkJLmlkID0gVjRMMl9DSURfRVhQT1NVUkUsCiAJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCQkubmFtZSA9ICJleHBvc3VyZSIsCi0JCQkubWluaW11bSA9IDB4MDAwLAotCQkJLm1heGltdW0gPSAweDNmZiwKLQkJCS5zdGVwID0gMHgwMDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4ODM8PDIsCi0JCQkuZmxhZ3MgPSAwLAotCQl9LAotCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gInJlZCBiYWxhbmNlIiwKIAkJCS5taW5pbXVtID0gMHgwMCwKIAkJCS5tYXhpbXVtID0gMHhmZiwKIAkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgzYSwKLQkJCS5mbGFncyA9IDAsCi0JCX0sCi0JCXsKLQkJCS5pZCA9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gImJsdWUgYmFsYW5jZSIsCi0JCQkubWluaW11bSA9IDB4MDAsCi0JCQkubWF4aW11bSA9IDB4ZmYsCi0JCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4NzcsCi0JCQkuZmxhZ3MgPSAwLAotCQl9LAotCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiYnJpZ2h0bmVzcyIsCi0JCQkubWluaW11bSA9IDB4MDAsCi0JCQkubWF4aW11bSA9IDB4ZmYsCi0JCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4YTAsCi0JCQkuZmxhZ3MgPSAwLAotCQl9LAotCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAid2hpdGUgYmFsYW5jZSBiYWNrZ3JvdW5kOiBibHVlIiwKLQkJCS5taW5pbXVtID0gMHgwMCwKLQkJCS5tYXhpbXVtID0gMHgzZiwKLQkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgyMCwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHg2MCwKIAkJCS5mbGFncyA9IDAsCiAJCX0sCiAJCXsKQEAgLTI3NSwyMSArMzE0LDQxIEBACiAJCQkuZmxhZ3MgPSAwLAogCQl9LAogCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UsCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCQkubmFtZSA9ICJhdXRvIHdoaXRlIGJhbGFuY2UiLAorCQkJLmlkID0gVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIndoaXRlIGJhbGFuY2UgYmFja2dyb3VuZDogYmx1ZSIsCiAJCQkubWluaW11bSA9IDB4MDAsCi0JCQkubWF4aW11bSA9IDB4MDEsCisJCQkubWF4aW11bSA9IDB4M2YsCiAJCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MjAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gInJlZCBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHg3ZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgyMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImJsdWUgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4N2YsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MjAsCiAJCQkuZmxhZ3MgPSAwLAogCQl9LAogCQl7CiAJCQkuaWQgPSBWNEwyX0NJRF9BVVRPR0FJTiwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gImdhaW4gJiBleHBvc3VyZSBtb2RlIiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lID0gImF1dG8gYWRqdXN0IiwKIAkJCS5taW5pbXVtID0gMHgwMCwKLQkJCS5tYXhpbXVtID0gMHgwMywKKwkJCS5tYXhpbXVtID0gMHgwMSwKIAkJCS5zdGVwID0gMHgwMSwKIAkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwKIAkJCS5mbGFncyA9IDAsCkBAIC0zMDUsMjMgKzM2NCwxMyBAQAogCQkJLmZsYWdzID0gMCwKIAkJfSwKIAkJewotCQkJLmlkID0gVjRMMl9DSURfQkxBQ0tfTEVWRUwsCisJCQkuaWQgPSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0UsCiAJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZSA9ICJibGFjayBwaXhlbCByYXRpbyIsCi0JCQkubWluaW11bSA9IDB4MDEsCi0JCQkubWF4aW11bSA9IDB4OWEsCisJCQkubmFtZSA9ICJncmVlbiBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHg3ZiwKIAkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHg4YSwKLQkJCS5mbGFncyA9IDAsCi0JCX0sCi0JCXsKLQkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfQlJJR0hUX0xFVkVMLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiYnJpZ2h0IHBpeGVsIHJhdGlvIiwKLQkJCS5taW5pbXVtID0gMHgwMSwKLQkJCS5tYXhpbXVtID0gMHg5YSwKLQkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgxMCwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgyMCwKIAkJCS5mbGFncyA9IDAsCiAJCX0sCiAJCXsKQEAgLTM0NSw2ICszOTQsNyBAQAogCQkJLmZsYWdzID0gMCwKIAkJfSwKIAl9LAorCS5nZXRfY3RybCA9ICZvdjc2MzBfZ2V0X2N0cmwsCiAJLnNldF9jdHJsID0gJm92NzYzMF9zZXRfY3RybCwKIAkuY3JvcGNhcCA9IHsKIAkJLmJvdW5kcyA9IHsKQEAgLTM2NCw3ICs0MTQsNyBAQAogCS5waXhfZm9ybWF0ID0gewogCQkud2lkdGggPSA2NDAsCiAJCS5oZWlnaHQgPSA0ODAsCi0JCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TTjlDMTBYLAogCQkucHJpdiA9IDgsCiAJfSwKIAkuc2V0X3BpeF9mb3JtYXQgPSAmb3Y3NjMwX3NldF9waXhfZm9ybWF0CkBAIC0zNzMsMjggKzQyMywzNiBAQAogCiBpbnQgc245YzEwMl9wcm9iZV9vdjc2MzAoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCiB7Ci0JY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgb3Y3NjMwX2lkX3RhYmxlW10gPSB7Ci0JCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYyksIH0sCi0JCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyZCksIH0sCi0JCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4ZiksIH0sCi0JCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiMCksIH0sCi0JCXsgfQotCX07Ci0JaW50IGVyciA9IDA7CisJaW50IHBpZCwgdmVyLCBlcnIgPSAwOwogCi0JaWYgKCFzbjljMTAyX21hdGNoX2lkKGNhbSwgb3Y3NjMwX2lkX3RhYmxlKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KKwlzd2l0Y2ggKHNuOWMxMDJfZ2V0X2JyaWRnZShjYW0pKSB7CisJY2FzZSBCUklER0VfU045QzEwMToKKwljYXNlIEJSSURHRV9TTjlDMTAyOgogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MDEpOwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjgsIDB4MTcpOwotCWlmIChlcnIpCisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMDM6IC8qIGRvIF9ub3RfIGNoYW5nZSBhbnl0aGluZyEgKi8KKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwOSwgMHgwMSk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDIsIDB4MDEpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDI4LCAweDE3KTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg0NCwgMHgwMik7CisJCXBpZCA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJm92NzYzMCwgMHgwYSk7CisJCWlmIChlcnIgfHwgcGlkIDwgMCkgeyAvKiB0cnkgYSBkaWZmZXJlbnQgaW5pdGlhbGl6YXRpb24gKi8KKwkJCWVyciA9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHgwMSk7CisJCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDAxKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlwaWQgPSBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZvdjc2MzAsIDB4MGEpOworCXZlciA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJm92NzYzMCwgMHgwYik7CisJaWYgKGVyciB8fCBwaWQgPCAwIHx8IHZlciA8IDApCiAJCXJldHVybiAtRUlPOwotCi0JZXJyICs9IHNuOWMxMDJfaTJjX3RyeV93cml0ZShjYW0sICZvdjc2MzAsIDB4MGIsIDApOwotCWlmIChlcnIpCisJaWYgKHBpZCAhPSAweDc2IHx8IHZlciAhPSAweDMxKQogCQlyZXR1cm4gLUVOT0RFVjsKLQogCXNuOWMxMDJfYXR0YWNoX3NlbnNvcihjYW0sICZvdjc2MzApOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9vdjc2NjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzY2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NzBjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9vdjc2NjAuYwpAQCAtMCwwICsxLDU5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGx1Zy1pbiBmb3IgT1Y3NjYwIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxeHggUEMgQ2FtZXJhICAgICAgKgorICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisKKworc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBvdjc2NjA7CisKKworc3RhdGljIGludCBvdjc2NjBfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MDIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MDMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MWEsIDB4MDQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDMsIDB4MTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDgsIDB4MTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4OGIsIDB4MTgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MWQsIDB4MWEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MTAsIDB4MWIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDIsIDB4MWMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDMsIDB4MWQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGYsIDB4MWUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGMsIDB4MWYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MjApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjksIDB4MjEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MjIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NTQsIDB4MjMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NjYsIDB4MjQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NzYsIDB4MjUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ODUsIDB4MjYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4OTQsIDB4MjcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4YTEsIDB4MjgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4YWUsIDB4MjkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4YmIsIDB4MmEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4YzcsIDB4MmIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZDMsIDB4MmMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZGUsIDB4MmQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZWEsIDB4MmUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZjQsIDB4MmYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZmYsIDB4MzApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4M0YpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NDApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NDIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NDMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NDQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NDUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NDYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NDcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NDgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NDkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NEEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NEIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NEMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NEQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NEUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NEYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NTEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NTMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NTUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NTYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NTgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NTkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NUEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NUIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NUMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NUQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NUUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NUYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NjApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NjEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NjIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NjMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NjQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NjUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NjYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NjcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NjgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NjkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NkEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NkIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NkMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NkQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NkUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NkYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NzApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NzEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NzIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NzMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NzQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NzUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4NzYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4NzcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4NzgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4NzkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4N0EpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4N0IpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4QzcsIDB4N0MpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4N0QpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4N0UpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4N0YpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MTQsIDB4ODQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4ODUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjcsIDB4ODYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4ODcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDcsIDB4ODgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4ODkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4RUMsIDB4OEEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGYsIDB4OEIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4RDgsIDB4OEMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGYsIDB4OEQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4M0QsIDB4OEUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4OEYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4M0QsIDB4OTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4OTEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4Q0QsIDB4OTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGYsIDB4OTMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZjcsIDB4OTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGYsIDB4OTUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MEMsIDB4OTYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4OTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4OTgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NjYsIDB4OTkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDUsIDB4OUEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4OUIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDQsIDB4OUMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4OUQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDgsIDB4OUUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4OUYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MkQsIDB4QzApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MkQsIDB4QzEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4M0EsIDB4QzIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDUsIDB4QzMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDQsIDB4QzQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4M0YsIDB4QzUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4QzYpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4QzcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NTAsIDB4QzgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4M0MsIDB4QzkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjgsIDB4Q0EpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4RDgsIDB4Q0IpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MTQsIDB4Q0MpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4RUMsIDB4Q0QpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MzIsIDB4Q0UpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4REQsIDB4Q0YpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MzIsIDB4RDApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4REQsIDB4RDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NkEsIDB4RDIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NTAsIDB4RDMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4RDQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4RDUpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4RDYpOworCisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMiwgMHg4MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMSwgMHgwOSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMCwgMHgwQSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMSwgMHg3OCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMiwgMHg5MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMywgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNCwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNSwgMHgwOCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNiwgMHgwQik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNywgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwOCwgMHgxQyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwOSwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwQSwgMHg3Nik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwQiwgMHg2MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwQywgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwRCwgMHgwOCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwRSwgMHgwNCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwRiwgMHg2Rik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMCwgMHgyMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMSwgMHgwMyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMiwgMHgwNSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMywgMHhGOCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxNCwgMHgyQyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxNSwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxNiwgMHgwMik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxNywgMHgxMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxOCwgMHg2MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxOSwgMHgwMik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxQSwgMHg3Qik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxQiwgMHgwMik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxQywgMHg3Rik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxRCwgMHhBMik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxRSwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxRiwgMHgwRSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMCwgMHgwNSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMSwgMHgwNSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMiwgMHgwNSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMywgMHgwNSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNCwgMHg2OCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNSwgMHg1OCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNiwgMHhENCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNywgMHg4MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyOCwgMHg4MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyOSwgMHgzMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyQSwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyQiwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyQywgMHg4MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyRCwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyRSwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyRiwgMHgwRSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMCwgMHgwOCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMSwgMHgzMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMiwgMHhCNCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMywgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzNCwgMHgwNyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzNSwgMHg4NCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzNiwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzNywgMHgwQyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzOCwgMHgwMik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzOSwgMHg0Myk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzQSwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzQiwgMHgwMik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzQywgMHg2Qyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzRCwgMHg5OSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzRSwgMHgwRSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzRiwgMHg0MSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0MCwgMHhDMSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0MSwgMHgyMik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0MiwgMHgwOCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0MywgMHhGMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0NCwgMHgxMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0NSwgMHg3OCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0NiwgMHhBOCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0NywgMHg2MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0OCwgMHg4MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0OSwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0QSwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0QiwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0QywgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0RCwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0RSwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0RiwgMHg0Nik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1MCwgMHgzNik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1MSwgMHgwRik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1MiwgMHgxNyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1MywgMHg3Rik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1NCwgMHg5Nik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1NSwgMHg0MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1NiwgMHg0MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1NywgMHg0MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1OCwgMHgwRik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1OSwgMHhCQSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1QSwgMHg5QSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1QiwgMHgyMik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1QywgMHhCOSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1RCwgMHg5Qik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1RSwgMHgxMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg1RiwgMHhGMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2MCwgMHgwNSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2MSwgMHg2MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2MiwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2MywgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2NCwgMHg1MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2NSwgMHgzMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2NiwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2NywgMHg4MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2OCwgMHg3QSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2OSwgMHg5MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2QSwgMHg4MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2QiwgMHgwQSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2QywgMHgzMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2RCwgMHg0OCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2RSwgMHg4MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg2RiwgMHg3NCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3MCwgMHg2NCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3MSwgMHg2MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3MiwgMHg1Qyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3MywgMHg1OCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3NCwgMHg1NCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3NSwgMHg0Qyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3NiwgMHg0MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3NywgMHgzOCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3OCwgMHgzNCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3OSwgMHgzMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3QSwgMHgyRik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3QiwgMHgyQik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3QywgMHgwMyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3RCwgMHgwNyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3RSwgMHgxNyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3RiwgMHgzNCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4MCwgMHg0MSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4MSwgMHg0RCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4MiwgMHg1OCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4MywgMHg2Myk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4NCwgMHg2RSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4NSwgMHg3Nyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4NiwgMHg4Nyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4NywgMHg5NSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4OCwgMHhBRik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4OSwgMHhDNyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4QSwgMHhERik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4QiwgMHg5OSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4QywgMHg5OSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4RCwgMHhDRik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4RSwgMHgyMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg4RiwgMHgyNik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5MCwgMHgxMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5MSwgMHgwQyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5MiwgMHgyNSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5MywgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5NCwgMHg1MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5NSwgMHg1MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5NiwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5NywgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5OCwgMHgxMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5OSwgMHg0MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5QSwgMHg0MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5QiwgMHgyMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5QywgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5RCwgMHg5OSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5RSwgMHg3Rik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg5RiwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHhBMCwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHhBMSwgMHgwMCk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgb3Y3NjYwX2dldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MTApKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFOgorCQljdHJsLT52YWx1ZSA9IHNuOWMxMDJfcHJlYWRfcmVnKGNhbSwgMHgwMik7CisJCWN0cmwtPnZhbHVlID0gKGN0cmwtPnZhbHVlICYgMHgwNCkgPyAxIDogMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBzbjljMTAyX3ByZWFkX3JlZyhjYW0sIDB4MDUpOworCQljdHJsLT52YWx1ZSAmPSAweDdmOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBzbjljMTAyX3ByZWFkX3JlZyhjYW0sIDB4MDYpOworCQljdHJsLT52YWx1ZSAmPSAweDdmOworCQlicmVhazsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBzbjljMTAyX3ByZWFkX3JlZyhjYW0sIDB4MDcpOworCQljdHJsLT52YWx1ZSAmPSAweDdmOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwMCkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDdmOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MTMpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgJj0gMHgwMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQgb3Y3NjYwX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEwLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRToKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg0MyB8IChjdHJsLT52YWx1ZSA8PCAyKSwgMHgwMik7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGN0cmwtPnZhbHVlLCAweDA1KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGN0cmwtPnZhbHVlLCAweDA2KTsKKwkJYnJlYWs7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGN0cmwtPnZhbHVlLCAweDA3KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDAwLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTMsIDB4ZjAgfCBjdHJsLT52YWx1ZSB8CisJCQkJCQkgICAgKGN0cmwtPnZhbHVlIDw8IDEpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQgb3Y3NjYwX3NldF9jcm9wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBzbjljMTAyX2dldF9zZW5zb3IoY2FtKTsKKwlpbnQgZXJyID0gMDsKKwl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyAxLAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAxOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgb3Y3NjYwX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJCSBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpCit7CisJaW50IHIwLCBlcnIgPSAwOworCisJcjAgPSBzbjljMTAyX3ByZWFkX3JlZyhjYW0sIDB4MDEpOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX0pQRUcpIHsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgcjAgfCAweDQwLCAweDAxKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhhMiwgMHgxNyk7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTEsIDB4MDApOworCX0gZWxzZSB7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHIwIHwgMHg0MCwgMHgwMSk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4YTIsIDB4MTcpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDExLCAweDBkKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3Igb3Y3NjYwID0geworCS5uYW1lID0gIk9WNzY2MCIsCisJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCisJLnN1cHBvcnRlZF9icmlkZ2UgPSBCUklER0VfU045QzEwNSB8IEJSSURHRV9TTjlDMTIwLAorCS5zeXNmc19vcHMgPSBTTjlDMTAyX0kyQ19SRUFEIHwgU045QzEwMl9JMkNfV1JJVEUsCisJLmZyZXF1ZW5jeSA9IFNOOUMxMDJfSTJDXzEwMEtIWiwKKwkuaW50ZXJmYWNlID0gU045QzEwMl9JMkNfMldJUkVTLAorCS5pMmNfc2xhdmVfaWQgPSAweDIxLAorCS5pbml0ID0gJm92NzY2MF9pbml0LAorCS5xY3RybCA9IHsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImdsb2JhbCBnYWluIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHg3ZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwYSwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweGZmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDUwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lID0gIm5pZ2h0IG1vZGUiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDAxLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfUkVEX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJyZWQgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4N2YsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MWYsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJibHVlIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDdmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDFlLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQVVUT0dBSU4sCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSA9ICJhdXRvIGFkanVzdCIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MDEsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJncmVlbiBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHg3ZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgyMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJfSwKKwkuZ2V0X2N0cmwgPSAmb3Y3NjYwX2dldF9jdHJsLAorCS5zZXRfY3RybCA9ICZvdjc2NjBfc2V0X2N0cmwsCisJLmNyb3BjYXAgPSB7CisJCS5ib3VuZHMgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDY0MCwKKwkJCS5oZWlnaHQgPSA0ODAsCisJCX0sCisJCS5kZWZyZWN0ID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCX0sCisJLnNldF9jcm9wID0gJm92NzY2MF9zZXRfY3JvcCwKKwkucGl4X2Zvcm1hdCA9IHsKKwkJLndpZHRoID0gNjQwLAorCQkuaGVpZ2h0ID0gNDgwLAorCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSlBFRywKKwkJLnByaXYgPSA4LAorCX0sCisJLnNldF9waXhfZm9ybWF0ID0gJm92NzY2MF9zZXRfcGl4X2Zvcm1hdAorfTsKKworCitpbnQgc245YzEwMl9wcm9iZV9vdjc2NjAoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJaW50IHBpZCwgdmVyLCBlcnIgPSAwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHhmMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHhmMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyOCwgMHgxNyk7CisKKwlwaWQgPSBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZvdjc2NjAsIDB4MGEpOworCXZlciA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJm92NzY2MCwgMHgwYik7CisJaWYgKGVyciB8fCBwaWQgPCAwIHx8IHZlciA8IDApCisJCXJldHVybiAtRUlPOworCWlmIChwaWQgIT0gMHg3NiB8fCB2ZXIgIT0gMHg2MCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJm92NzY2MCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczEwNmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczEwNmIuYwppbmRleCA5OTE1OTQ0Li44ZDc5YTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMxMDZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfcGFzMTA2Yi5jCkBAIC0xLDggKzEsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUGx1Zy1pbiBmb3IgUEFTMTA2QiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICAgKgorICogUGx1Zy1pbiBmb3IgUEFTMTA2QiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMXh4IFBDIENhbWVyYSAgICAgKgogICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgpAQCAtMTQzLDcgKzE0Myw3IEBACiBzdGF0aWMgaW50IHBhczEwNmJfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCiAJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKIHsKLQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmcGFzMTA2YjsKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBzbjljMTAyX2dldF9zZW5zb3IoY2FtKTsKIAlpbnQgZXJyID0gMDsKIAl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyA0LAogCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAzOwpAQCAtMTcyLDYgKzE3Miw3IEBACiBzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHBhczEwNmIgPSB7CiAJLm5hbWUgPSAiUEFTMTA2QiIsCiAJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCisJLnN1cHBvcnRlZF9icmlkZ2UgPSBCUklER0VfU045QzEwMSB8IEJSSURHRV9TTjlDMTAyIHwgQlJJREdFX1NOOUMxMDMsCiAJLnN5c2ZzX29wcyA9IFNOOUMxMDJfSTJDX1JFQUQgfCBTTjlDMTAyX0kyQ19XUklURSwKIAkuZnJlcXVlbmN5ID0gU045QzEwMl9JMkNfNDAwS0haIHwgU045QzEwMl9JMkNfMTAwS0haLAogCS5pbnRlcmZhY2UgPSBTTjlDMTAyX0kyQ18yV0lSRVMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMyMDJiY2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGYxYWUyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBsdWctaW4gZm9yIFBBUzIwMkJDQSBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICoKLSAqIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCi0KLQotc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMyMDJiY2E7Ci0KLQotc3RhdGljIGludCBwYXMyMDJiY2FfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTApOwotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTEpOwotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTQpOwotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOwotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MzAsIDB4MTkpOwotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDksIDB4MTgpOwotCi0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMiwgMHgxNCk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMywgMHg0MCk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZCwgMHgyYyk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZSwgMHgwMSk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZiwgMHhhOSk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMCwgMHgwOCk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMywgMHg2Myk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxNSwgMHg3MCk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMSwgMHgwMSk7Ci0KLQltc2xlZXAoNDAwKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLQotc3RhdGljIGludCBwYXMyMDJiY2Ffc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0JCQkJICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKLXsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYKQotCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDI0LCAweDE3KTsKLQllbHNlCi0JCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotCi1zdGF0aWMgaW50IHBhczIwMmJjYV9zZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKLQkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNCwgY3RybC0+dmFsdWUgPj4gNik7Ci0JCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDUsIGN0cmwtPnZhbHVlICYgMHgzZik7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6Ci0JCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDksIGN0cmwtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6Ci0JCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDcsIGN0cmwtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9HQUlOOgotCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEwLCBjdHJsLT52YWx1ZSk7Ci0JCWJyZWFrOwotCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgotCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA4LCBjdHJsLT52YWx1ZSk7Ci0JCWJyZWFrOwotCWNhc2UgU045QzEwMl9WNEwyX0NJRF9EQUNfTUFHTklUVURFOgotCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBjLCBjdHJsLT52YWx1ZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDExLCAweDAxKTsKLQotCXJldHVybiBlcnIgPyAtRUlPIDogMDsKLX0KLQotCi1zdGF0aWMgaW50IHBhczIwMmJjYV9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCi17Ci0Jc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJnBhczIwMmJjYTsKLQlpbnQgZXJyID0gMDsKLQl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyAzLAotCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAzOwotCi0JZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7Ci0JZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgcGFzMjAyYmNhID0gewotCS5uYW1lID0gIlBBUzIwMkJDQSIsCi0JLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCi0JLnN5c2ZzX29wcyA9IFNOOUMxMDJfSTJDX1JFQUQgfCBTTjlDMTAyX0kyQ19XUklURSwKLQkuZnJlcXVlbmN5ID0gU045QzEwMl9JMkNfNDAwS0haIHwgU045QzEwMl9JMkNfMTAwS0haLAotCS5pbnRlcmZhY2UgPSBTTjlDMTAyX0kyQ18yV0lSRVMsCi0JLmkyY19zbGF2ZV9pZCA9IDB4NDAsCi0JLmluaXQgPSAmcGFzMjAyYmNhX2luaXQsCi0JLnFjdHJsID0gewotCQl7Ci0JCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gImV4cG9zdXJlIiwKLQkJCS5taW5pbXVtID0gMHgwMWU1LAotCQkJLm1heGltdW0gPSAweDNmZmYsCi0JCQkuc3RlcCA9IDB4MDAwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMWU1LAotCQkJLmZsYWdzID0gMCwKLQkJfSwKLQkJewotCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gImdsb2JhbCBnYWluIiwKLQkJCS5taW5pbXVtID0gMHgwMCwKLQkJCS5tYXhpbXVtID0gMHgxZiwKLQkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwYywKLQkJCS5mbGFncyA9IDAsCi0JCX0sCi0JCXsKLQkJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAicmVkIGJhbGFuY2UiLAotCQkJLm1pbmltdW0gPSAweDAwLAotCQkJLm1heGltdW0gPSAweDBmLAotCQkJLnN0ZXAgPSAweDAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAxLAotCQkJLmZsYWdzID0gMCwKLQkJfSwKLQkJewotCQkJLmlkID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiYmx1ZSBiYWxhbmNlIiwKLQkJCS5taW5pbXVtID0gMHgwMCwKLQkJCS5tYXhpbXVtID0gMHgwZiwKLQkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwNSwKLQkJCS5mbGFncyA9IDAsCi0JCX0sCi0JCXsKLQkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRSwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gImdyZWVuIGJhbGFuY2UiLAotCQkJLm1pbmltdW0gPSAweDAwLAotCQkJLm1heGltdW0gPSAweDBmLAotCQkJLnN0ZXAgPSAweDAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAotCQkJLmZsYWdzID0gMCwKLQkJfSwKLQkJewotCQkJLmlkID0gU045QzEwMl9WNEwyX0NJRF9EQUNfTUFHTklUVURFLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiREFDIG1hZ25pdHVkZSIsCi0JCQkubWluaW11bSA9IDB4MDAsCi0JCQkubWF4aW11bSA9IDB4ZmYsCi0JCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDQsCi0JCQkuZmxhZ3MgPSAwLAotCQl9LAotCX0sCi0JLnNldF9jdHJsID0gJnBhczIwMmJjYV9zZXRfY3RybCwKLQkuY3JvcGNhcCA9IHsKLQkJLmJvdW5kcyA9IHsKLQkJCS5sZWZ0ID0gMCwKLQkJCS50b3AgPSAwLAotCQkJLndpZHRoID0gNjQwLAotCQkJLmhlaWdodCA9IDQ4MCwKLQkJfSwKLQkJLmRlZnJlY3QgPSB7Ci0JCQkubGVmdCA9IDAsCi0JCQkudG9wID0gMCwKLQkJCS53aWR0aCA9IDY0MCwKLQkJCS5oZWlnaHQgPSA0ODAsCi0JCX0sCi0JfSwKLQkuc2V0X2Nyb3AgPSAmcGFzMjAyYmNhX3NldF9jcm9wLAotCS5waXhfZm9ybWF0ID0gewotCQkud2lkdGggPSA2NDAsCi0JCS5oZWlnaHQgPSA0ODAsCi0JCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCi0JCS5wcml2ID0gOCwKLQl9LAotCS5zZXRfcGl4X2Zvcm1hdCA9ICZwYXMyMDJiY2Ffc2V0X3BpeF9mb3JtYXQKLX07Ci0KLQotaW50IHNuOWMxMDJfcHJvYmVfcGFzMjAyYmNhKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQotewotCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBhczIwMmJjYV9pZF90YWJsZVtdID0gewotCQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWYpLCB9LAotCQl7IH0KLQl9OwotCWludCBlcnIgPSAwOwotCi0JaWYgKCFzbjljMTAyX21hdGNoX2lkKGNhbSxwYXMyMDJiY2FfaWRfdGFibGUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOwotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MDEpOwotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjgsIDB4MTcpOwotCWlmIChlcnIpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHNuOWMxMDJfaTJjX3RyeV93cml0ZShjYW0sICZwYXMyMDJiY2EsIDB4MTAsIDApKSAvKiB0cnkgdG8gd3JpdGUgKi8KLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlzbjljMTAyX2F0dGFjaF9zZW5zb3IoY2FtLCAmcGFzMjAyYmNhKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfcGFzMjAyYmNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMyMDJiY2IuYwppbmRleCBlM2MxMTc4Li43ODk0ZjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMyMDJiY2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMyMDJiY2IuYwpAQCAtMSwxMyArMSwxMyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUGx1Zy1pbiBmb3IgUEFTMjAyQkNCIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhICAgKgorICogUGx1Zy1pbiBmb3IgUEFTMjAyQkNCIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxeHggUEMgQ2FtZXJhICAgKgogICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IENhcmxvcyBFZHVhcmRvIE1lZGFnbGlhIER5b25pc2lvICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgIDxtZWRhZ2xpYUB1bmRsLm9yZy5icj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9jYWR1LmhvbWVsaW51eC5jb206ODA4MC8gICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogREFDIE1hZ25pdHVkZSwgZXhwb3N1cmUgYW5kIGdyZWVuIGdhaW4gY29udHJvbHMgYWRkZWQgYnkgICAgICAgICAgICAgICAgKgotICogTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogU3VwcG9ydCBmb3IgU045QzEwMywgREFDIE1hZ25pdHVkZSwgZXhwb3N1cmUgYW5kIGdyZWVuIGdhaW4gY29udHJvbHMgICAgKgorICogYWRkZWQgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgpAQCAtMzUsMTIgKzM1LDU0IEBACiB7CiAJaW50IGVyciA9IDA7CiAKKwlzd2l0Y2ggKHNuOWMxMDJfZ2V0X2JyaWRnZShjYW0pKSB7CisJY2FzZSBCUklER0VfU045QzEwMToKKwljYXNlIEJSSURHRV9TTjlDMTAyOgogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTApOwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTEpOwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTQpOwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MzAsIDB4MTkpOwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDksIDB4MTgpOworCQlicmVhazsKKwljYXNlIEJSSURHRV9TTjlDMTAzOgorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDAyKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgwMyk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MWEsIDB4MDQpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDA1KTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgwNik7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MDcpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDEwKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxMSk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTQpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDE3KTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgzMCwgMHgxOSk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDksIDB4MTgpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAyLCAweDFjKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMywgMHgxZCk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGYsIDB4MWUpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDBjLCAweDFmKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgyMCk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MTAsIDB4MjEpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDIyKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgzMCwgMHgyMyk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MjQpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDUwLCAweDI1KTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg2MCwgMHgyNik7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NzAsIDB4MjcpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDgwLCAweDI4KTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg5MCwgMHgyOSk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4YTAsIDB4MmEpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGIwLCAweDJiKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhjMCwgMHgyYyk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZDAsIDB4MmQpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGUwLCAweDJlKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhmMCwgMHgyZik7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZmYsIDB4MzApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDAyLCAweDE0KTsKIAllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDAzLCAweDQwKTsKQEAgLTEwNyw3ICsxNDksNyBAQAogCWludCBlcnIgPSAwOwogCiAJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCi0JCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjQsIDB4MTcpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDI4LCAweDE3KTsKIAllbHNlCiAJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOwogCkBAIC0xNTIsMTEgKzE5NCwyMyBAQAogc3RhdGljIGludCBwYXMyMDJiY2Jfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQogewotCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZwYXMyMDJiY2I7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gc245YzEwMl9nZXRfc2Vuc29yKGNhbSk7CiAJaW50IGVyciA9IDA7Ci0JdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgNCwKKwl1OCBoX3N0YXJ0ID0gMCwKIAkgICB2X3N0YXJ0ID0gKHU4KShyZWN0LT50b3AgLSBzLT5jcm9wY2FwLmJvdW5kcy50b3ApICsgMzsKIAorCXN3aXRjaCAoc245YzEwMl9nZXRfYnJpZGdlKGNhbSkpIHsKKwljYXNlIEJSSURHRV9TTjlDMTAxOgorCWNhc2UgQlJJREdFX1NOOUMxMDI6CisJCWhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSArIDQ7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMDM6CisJCWhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSArIDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc3RhcnQsIDB4MTIpOwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZfc3RhcnQsIDB4MTMpOwogCkBAIC0xNjYsOCArMjIwLDggQEAKIAogc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMyMDJiY2IgPSB7CiAJLm5hbWUgPSAiUEFTMjAyQkNCIiwKLQkubWFpbnRhaW5lciA9ICJDYXJsb3MgRWR1YXJkbyBNZWRhZ2xpYSBEeW9uaXNpbyAiCi0JCSAgICAgICI8bWVkYWdsaWFAdW5kbC5vcmcuYnI+IiwKKwkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKKwkuc3VwcG9ydGVkX2JyaWRnZSA9IEJSSURHRV9TTjlDMTAxIHwgQlJJREdFX1NOOUMxMDIgfCBCUklER0VfU045QzEwMywKIAkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfUkVBRCB8IFNOOUMxMDJfSTJDX1dSSVRFLAogCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ180MDBLSFogfCBTTjlDMTAyX0kyQ18xMDBLSFosCiAJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzJXSVJFUywKQEAgLTE5MSw3ICsyNDUsNyBAQAogCQkJLm1pbmltdW0gPSAweDAwLAogCQkJLm1heGltdW0gPSAweDFmLAogCQkJLnN0ZXAgPSAweDAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAweDBjLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDBiLAogCQkJLmZsYWdzID0gMCwKIAkJfSwKIAkJewpAQCAtMjAxLDcgKzI1NSw3IEBACiAJCQkubWluaW11bSA9IDB4MDAsCiAJCQkubWF4aW11bSA9IDB4MGYsCiAJCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCiAJCQkuZmxhZ3MgPSAwLAogCQl9LAogCQl7CkBAIC0yNzEsMTYgKzMyNSwyNyBAQAogCSAqICBNaW5pbWFsIGluaXRpYWxpemF0aW9uIHRvIGVuYWJsZSB0aGUgSTJDIGNvbW11bmljYXRpb24KIAkgKiAgTk9URTogZG8gTk9UIGNoYW5nZSB0aGUgdmFsdWVzIQogCSAqLwotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOyAvKiBzZW5zb3IgcG93ZXIgZG93biAqLwotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MDEpOyAvKiBzZW5zb3IgcG93ZXIgb24gKi8KLQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDI4LCAweDE3KTsgLyogc2Vuc29yIGNsb2NrIGF0IDI0IE1IeiAqLwotCWlmIChlcnIpCi0JCXJldHVybiAtRUlPOworCXN3aXRjaCAoc245YzEwMl9nZXRfYnJpZGdlKGNhbSkpIHsKKwljYXNlIEJSSURHRV9TTjlDMTAxOgorCWNhc2UgQlJJREdFX1NOOUMxMDI6CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOyAvKiBwb3dlciBkb3duICovCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MDEpOyAvKiBwb3dlciBvbiAqLworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDI4LCAweDE3KTsgLyogY2xvY2sgMjQgTUh6ICovCisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMDM6IC8qIGRvIF9ub3RfIGNoYW5nZSBhbnl0aGluZyEgKi8KKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwOSwgMHgwMSk7CisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDQsIDB4MDEpOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDQ0LCAweDAyKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyOSwgMHgxNyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCXIwID0gc245YzEwMl9pMmNfdHJ5X3JlYWQoY2FtLCAmcGFzMjAyYmNiLCAweDAwKTsKIAlyMSA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJnBhczIwMmJjYiwgMHgwMSk7CiAKLQlpZiAocjAgPCAwIHx8IHIxIDwgMCkKKwlpZiAoZXJyIHx8IHIwIDwgMCB8fCByMSA8IDApCiAJCXJldHVybiAtRUlPOwogCiAJcGlkID0gKHIwIDw8IDQpIHwgKChyMSAmIDB4ZjApID4+IDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9zZW5zb3IuaAppbmRleCAyYTg3NGVlLi4wNWYyOTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9zZW5zb3IuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9zZW5zb3IuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEFQSSBmb3IgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzICAgICoKKyAqIEFQSSBmb3IgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKQEAgLTM2LDE0ICszNiwxMyBAQAogLyoKICAgIE9WRVJWSUVXLgogICAgVGhpcyBpcyBhIHNtYWxsIGludGVyZmFjZSB0aGF0IGFsbG93cyB5b3UgdG8gYWRkIHN1cHBvcnQgZm9yIGFueSBDQ0QvQ01PUwotICAgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMFggYnJpZGdlcy4gVGhlIGVudGlyZSBBUEkgaXMgZG9jdW1lbnRlZAorICAgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxWFggYnJpZGdlcy4gVGhlIGVudGlyZSBBUEkgaXMgZG9jdW1lbnRlZAogICAgYmVsb3cuIEluIHRoZSBtb3N0IGdlbmVyYWwgY2FzZSwgdG8gc3VwcG9ydCBhIHNlbnNvciB0aGVyZSBhcmUgdGhyZWUgc3RlcHMKICAgIHlvdSBoYXZlIHRvIGZvbGxvdzoKICAgIDEpIGRlZmluZSB0aGUgbWFpbiAic245YzEwMl9zZW5zb3IiIHN0cnVjdHVyZSBieSBzZXR0aW5nIHRoZSBiYXNpYyBmaWVsZHM7CiAgICAyKSB3cml0ZSBhIHByb2JpbmcgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IHRoZSBjb3JlIG1vZHVsZSB3aGVuIHRoZSBVU0IKICAgICAgIGNhbWVyYSBpcyByZWNvZ25pemVkLCB0aGVuIGFkZCBib3RoIHRoZSBVU0IgaWRzIGFuZCB0aGUgbmFtZSBvZiB0aGF0Ci0gICAgICBmdW5jdGlvbiB0byB0aGUgdHdvIGNvcnJlc3BvbmRpbmcgdGFibGVzIFNFTlNPUl9UQUJMRSBhbmQgSURfVEFCTEUgKHNlZQotICAgICAgYmVsb3cpOworICAgICAgZnVuY3Rpb24gdG8gdGhlIHR3byBjb3JyZXNwb25kaW5nIHRhYmxlcyBpbiBzbjljMTAyX2RldnRhYmxlLmg7CiAgICAzKSBpbXBsZW1lbnQgdGhlIG1ldGhvZHMgdGhhdCB5b3Ugd2FudC9uZWVkIChhbmQgZmlsbCB0aGUgcmVzdCBvZiB0aGUgbWFpbgogICAgICAgc3RydWN0dXJlIGFjY29yZGluZ2x5KS4KICAgICJzbjljMTAyX3BhczEwNmIuYyIgaXMgYW4gZXhhbXBsZSBvZiBhbGwgdGhpcyBzdHVmZi4gUmVtZW1iZXIgdGhhdCB5b3UgZG8KQEAgLTU0LDQyICs1MywyMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qCi0gICBQcm9iaW5nIGZ1bmN0aW9uczogb24gc3VjY2VzcywgeW91IG11c3QgYXR0YWNoIHRoZSBzZW5zb3IgdG8gdGhlIGNhbWVyYQotICAgYnkgY2FsbGluZyBzbjljMTAyX2F0dGFjaF9zZW5zb3IoKSBwcm92aWRlZCBiZWxvdy4KLSAgIFRvIGVuYWJsZSB0aGUgSTJDIGNvbW11bmljYXRpb24sIHlvdSBtaWdodCBuZWVkIHRvIHBlcmZvcm0gYSByZWFsbHkgYmFzaWMKLSAgIGluaXRpYWxpemF0aW9uIG9mIHRoZSBTTjlDMTBYIGNoaXAgYnkgdXNpbmcgdGhlIHdyaXRlIGZ1bmN0aW9uIGRlY2xhcmVkCi0gICBhaGVhZC4KLSAgIEZ1bmN0aW9ucyBtdXN0IHJldHVybiAwIG9uIHN1Y2Nlc3MsIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBvdGhlcndpc2UuCi0qLwotZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX2h2NzEzMWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOwotZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX21pMDM0MyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7Ci1leHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfb3Y3NjMwKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKLWV4dGVybiBpbnQgc245YzEwMl9wcm9iZV9wYXMxMDZiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKLWV4dGVybiBpbnQgc245YzEwMl9wcm9iZV9wYXMyMDJiY2Eoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOwotZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX3BhczIwMmJjYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7Ci1leHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfdGFzNTExMGMxYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7Ci1leHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfdGFzNTEzMGQxYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7Ci0KLS8qCi0gICBBZGQgdGhlIGFib3ZlIGVudHJpZXMgdG8gdGhpcyB0YWJsZS4gQmUgc3VyZSB0byBhZGQgdGhlIGVudHJ5IGluIHRoZSByaWdodAotICAgcGxhY2UsIHNpbmNlLCBvbiBmYWlsdXJlLCB0aGUgbmV4dCBwcm9iaW5nIHJvdXRpbmUgaXMgY2FsbGVkIGFjY29yZGluZyB0bwotICAgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGJlbG93LCBmcm9tIHRvcCB0byBib3R0b20uCi0qLwotI2RlZmluZSBTTjlDMTAyX1NFTlNPUl9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGludCAoKnNuOWMxMDJfc2Vuc29yX3RhYmxlW10pKHN0cnVjdCBzbjljMTAyX2RldmljZSopID0geyAgICAgICAgICAgICAgXAotCSZzbjljMTAyX3Byb2JlX21pMDM0MywgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovICAgICBcCi0JJnNuOWMxMDJfcHJvYmVfcGFzMTA2YiwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovICAgIFwKLQkmc245YzEwMl9wcm9iZV9wYXMyMDJiY2IsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLyAgXAotCSZzbjljMTAyX3Byb2JlX2h2NzEzMWQsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLyAgICBcCi0JJnNuOWMxMDJfcHJvYmVfcGFzMjAyYmNhLCAvKiBkZXRlY3Rpb24gbW9zdGx5IGJhc2VkIG9uIFVTQiBwaWQvdmlkICovIFwKLQkmc245YzEwMl9wcm9iZV9vdjc2MzAsIC8qIGRldGVjdGlvbiBtb3N0bHkgYmFzZWQgb24gVVNCIHBpZC92aWQgKi8gICAgXAotCSZzbjljMTAyX3Byb2JlX3RhczUxMTBjMWIsIC8qIGRldGVjdGlvbiBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLyAgICAgICBcCi0JJnNuOWMxMDJfcHJvYmVfdGFzNTEzMGQxYiwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovICAgICAgIFwKLQlOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZW51bSBzbjljMTAyX2JyaWRnZSB7CisJQlJJREdFX1NOOUMxMDEgPSAweDAxLAorCUJSSURHRV9TTjlDMTAyID0gMHgwMiwKKwlCUklER0VfU045QzEwMyA9IDB4MDQsCisJQlJJREdFX1NOOUMxMDUgPSAweDA4LAorCUJSSURHRV9TTjlDMTIwID0gMHgxMCwKIH07CiAKLS8qIERldmljZSBpZGVudGlmaWNhdGlvbiAqLworLyogUmV0dXJuIHRoZSBicmlkZ2UgbmFtZSAqLworZW51bSBzbjljMTAyX2JyaWRnZSBzbjljMTAyX2dldF9icmlkZ2Uoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRoZSBzZW5zb3Igc3RydWN0IGF0dGFjaGVkIHRvIHRoZSBjYW1lcmEgKi8KK3N0cnVjdCBzbjljMTAyX3NlbnNvciogc245YzEwMl9nZXRfc2Vuc29yKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKKworLyogSWRlbnRpZnkgYSBkZXZpY2UgKi8KIGV4dGVybiBzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqCiBzbjljMTAyX21hdGNoX2lkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogCkBAIC05OSw2OCArNzcsOCBAQAogCQkgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcik7CiAKIC8qCi0gICBFYWNoIFNOOUMxMHggY2FtZXJhIGhhcyBwcm9wZXIgUElEL1ZJRCBpZGVudGlmaWVycy4KLSAgIFNOOUMxMDMgc3VwcG9ydHMgbXVsdGlwbGUgaW50ZXJmYWNlcywgYnV0IHdlIG9ubHkgaGFuZGxlIHRoZSB2aWRlbyBjbGFzcwotICAgaW50ZXJmYWNlLgotKi8KLSNkZWZpbmUgU045QzEwMl9VU0JfREVWSUNFKHZlbmQsIHByb2QsIGludGNsYXNzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkuaWRWZW5kb3IgPSAodmVuZCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCS5pZFByb2R1Y3QgPSAocHJvZCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JLmJJbnRlcmZhY2VDbGFzcyA9IChpbnRjbGFzcykKLQotI2RlZmluZSBTTjlDMTAyX0lEX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNuOWMxMDJfaWRfdGFibGVbXSA9IHsgICAgICAgICAgICAgICAgICAgICAgXAotCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIH0sIC8qIFRBUzUxMTBDMUIgKi8gICAgICAgICAgICAgICAgICAgICBcCi0JeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1KSwgfSwgLyogVEFTNTExMEMxQiAqLyAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSksIH0sIC8qIFBBUzEwNkIgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDBkKSwgfSwgLyogUEFTMTA2QiAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjQpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyNSksIH0sIC8qIFRBUzUxMzBEMUIgYW5kIFRBUzUxMTBDMUIgKi8gICAgICBcCi0JeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI4KSwgfSwgLyogUEFTMjAyQkNCICovICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjkpLCB9LCAvKiBQQVMxMDZCICovICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYSksIH0sIC8qIEhWNzEzMUQgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJiKSwgfSwgLyogTUktMDM0MyAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmMpLCB9LCAvKiBPVjc2MzAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyZCksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJlKSwgfSwgLyogT1Y3NjMwICovICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMzApLCB9LCAvKiBNSTAzeCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDgwLCAweGZmKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODIsIDB4ZmYpLCB9LCAvKiBNSTAzNDMgJiBNSTAzNjAgKi8gIFwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4MywgMHhmZiksIH0sIC8qIEhWNzEzMVtEfEUxXSAqLyAgICAgXAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDg4LCAweGZmKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGEsIDB4ZmYpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4YiwgMHhmZiksIH0sICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhjLCAweGZmKSwgfSwgLyogSFY3MTMxL1IgKi8gICAgICAgICBcCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGUsIDB4ZmYpLCB9LCAvKiBDSVMtVkYxMCAqLyAgICAgICAgIFwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4ZiwgMHhmZiksIH0sIC8qIE9WNzYzMCAqLyAgICAgICAgICAgXAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGEwLCAweGZmKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTIsIDB4ZmYpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhMywgMHhmZiksIH0sICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGE4LCAweGZmKSwgfSwgLyogUEFTMTA2QiAqLyAgICAgICAgICBcCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWEsIDB4ZmYpLCB9LCAvKiBUQVM1MTMwRDFCICovICAgICAgIFwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhYiwgMHhmZiksIH0sIC8qIFRBUzUxMTBDMUIgKi8gICAgICAgXAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFjLCAweGZmKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWUsIDB4ZmYpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhZiwgMHhmZiksIH0sIC8qIFBBUzIwMkJDQiAqLyAgICAgICAgXAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGIwLCAweGZmKSwgfSwgLyogT1Y3NjMwICg/KSAqLyAgICAgICBcCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjIsIDB4ZmYpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiMywgMHhmZiksIH0sICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGI4LCAweGZmKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmEsIDB4ZmYpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiYiwgMHhmZiksIH0sICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGJjLCAweGZmKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmUsIDB4ZmYpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgogICAgUmVhZC93cml0ZSByb3V0aW5lczogdGhleSBhbHdheXMgcmV0dXJuIC0xIG9uIGVycm9yLCAwIG9yIHRoZSByZWFkIHZhbHVlCi0gICBvdGhlcndpc2UuIE5PVEUgdGhhdCBhIHJlYWwgcmVhZCBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgU045QzEwWAorICAgb3RoZXJ3aXNlLiBOT1RFIHRoYXQgYSByZWFsIHJlYWQgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFNOOUMxWFgKICAgIGNoaXAgZm9yIHNvbWUgb2YgaXRzIHJlZ2lzdGVycy4gVG8gd29yayBhcm91bmQgdGhpcyBwcm9ibGVtLCBhIHBzZXVkby1yZWFkCiAgICBjYWxsIGlzIHByb3ZpZGVkIGluc3RlYWQ6IGl0IHJldHVybnMgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdmFsdWUKICAgIG9uIHRoZSByZWdpc3RlciAoMCBpZiBpdCBoYXMgbmV2ZXIgYmVlbiB3cml0dGVuKSwgdGhlIHVzdWFsIC0xIG9uIGVycm9yLgpAQCAtMTc2LDcgKzk0LDcgQEAKICAgIFRoZXNlIG11c3QgYmUgdXNlZCBpZiBhbmQgb25seSBpZiB0aGUgc2Vuc29yIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBzdGFuZGFyZAogICAgSTJDIHByb3RvY29sLiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZ29vZCByZWFzb25zIHdoeSB5b3UgbXVzdCB1c2UgdGhlCiAgICBzaW5nbGUtYnl0ZSB2ZXJzaW9ucyBvZiB0aGVzZSBmdW5jdGlvbnM6IGRvIG5vdCBhYnVzZS4gVGhlIGZpcnN0IGZ1bmN0aW9uCi0gICB3cml0ZXMgbiBieXRlcywgZnJvbSBkYXRhMCB0byBkYXRhbiwgdG8gcmVnaXN0ZXJzIDB4MDkgLSAweDA5K24gb2YgU045QzEwWAorICAgd3JpdGVzIG4gYnl0ZXMsIGZyb20gZGF0YTAgdG8gZGF0YW4sIHRvIHJlZ2lzdGVycyAweDA5IC0gMHgwOStuIG9mIFNOOUMxWFgKICAgIGNoaXAuIFRoZSBzZWNvbmQgb25lIHByb2dyYW1zIHRoZSByZWdpc3RlcnMgMHgwOSBhbmQgMHgxMCB3aXRoIGRhdGEwIGFuZAogICAgZGF0YTEsIGFuZCBwbGFjZXMgdGhlIG4gYnl0ZXMgcmVhZCBmcm9tIHRoZSBzZW5zb3IgcmVnaXN0ZXIgdGFibGUgaW4gdGhlCiAgICBidWZmZXIgcG9pbnRlZCBieSAnYnVmZmVyJy4gQm90aCB0aGUgZnVuY3Rpb25zIHJldHVybiAtMSBvbiBlcnJvcjsgdGhlIHdyaXRlCkBAIC0yMDAsMTYgKzExOCw2IEBACiBleHRlcm4gaW50IHNuOWMxMDJfd3JpdGVfcmVnKHN0cnVjdCBzbjljMTAyX2RldmljZSosIHU4IHZhbHVlLCB1MTYgaW5kZXgpOwogZXh0ZXJuIGludCBzbjljMTAyX3ByZWFkX3JlZyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLCB1MTYgaW5kZXgpOwogCi0vKgotICAgTk9URTogdGhlcmUgYXJlIG5vIGV4cG9ydGVkIGRlYnVnZ2luZyBmdW5jdGlvbnMuIFRvIHVuaWZvcm0gdGhlIG91dHB1dCB5b3UKLSAgIG11c3QgdXNlIHRoZSBkZXZfaW5mbygpL2Rldl93YXJuKCkvZGV2X2VycigpIG1hY3JvcyBkZWZpbmVkIGluIGRldmljZS5oLAotICAgYWxyZWFkeSBpbmNsdWRlZCBoZXJlLCB0aGUgYXJndW1lbnQgYmVpbmcgdGhlIHN0cnVjdCBkZXZpY2UgJyZ1c2JkZXYtPmRldicKLSAgIG9mIHRoZSBzZW5zb3Igc3RydWN0dXJlLiBEbyBOT1QgdXNlIHRoZXNlIG1hY3JvcyBiZWZvcmUgdGhlIHNlbnNvciBpcwotICAgYXR0YWNoZWQgb3IgdGhlIGtlcm5lbCB3aWxsIGNyYXNoISBIb3dldmVyLCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIG5vdGlmeQotICAgdGhlIHVzZXIgYWJvdXQgY29tbW9uIGVycm9ycyBvciBvdGhlciBtZXNzYWdlcywgc2luY2UgdGhpcyBpcyBkb25lIGJ5IHRoZQotICAgbWFzdGVyIG1vZHVsZS4KLSovCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogZW51bSBzbjljMTAyX2kyY19zeXNmc19vcHMgewpAQCAtMjI3LDE3ICsxMzUsMTkgQEAKIAlTTjlDMTAyX0kyQ18zV0lSRVMsCiB9OwogCi0jZGVmaW5lIFNOOUMxMDJfTUFYX0NUUkxTIFY0TDJfQ0lEX0xBU1RQMS1WNEwyX0NJRF9CQVNFKzEwCisjZGVmaW5lIFNOOUMxMDJfTUFYX0NUUkxTIChWNEwyX0NJRF9MQVNUUDEtVjRMMl9DSURfQkFTRSsxMCkKIAogc3RydWN0IHNuOWMxMDJfc2Vuc29yIHsKIAljaGFyIG5hbWVbMzJdLCAvKiBzZW5zb3IgbmFtZSAqLwogCSAgICAgbWFpbnRhaW5lcls2NF07IC8qIG5hbWUgb2YgdGhlIG1hbnRhaW5lciA8ZW1haWw+ICovCiAKKwllbnVtIHNuOWMxMDJfYnJpZGdlIHN1cHBvcnRlZF9icmlkZ2U7IC8qIHN1cHBvcnRlZCBTTjlDMXh4IGJyaWRnZXMgKi8KKwogCS8qIFN1cHBvcnRlZCBvcGVyYXRpb25zIHRocm91Z2ggdGhlICdzeXNmcycgaW50ZXJmYWNlICovCiAJZW51bSBzbjljMTAyX2kyY19zeXNmc19vcHMgc3lzZnNfb3BzOwogCiAJLyoKLQkgICBUaGVzZSBzZW5zb3IgY2FwYWJpbGl0aWVzIG11c3QgYmUgcHJvdmlkZWQgaWYgdGhlIFNOOUMxMFggY29udHJvbGxlcgorCSAgIFRoZXNlIHNlbnNvciBjYXBhYmlsaXRpZXMgbXVzdCBiZSBwcm92aWRlZCBpZiB0aGUgU045QzFYWCBjb250cm9sbGVyCiAJICAgbmVlZHMgdG8gY29tbXVuaWNhdGUgdGhyb3VnaCB0aGUgc2Vuc29yIHNlcmlhbCBpbnRlcmZhY2UgYnkgdXNpbmcKIAkgICBhdCBsZWFzdCBvbmUgb2YgdGhlIGkyYyBmdW5jdGlvbnMgYXZhaWxhYmxlLgogCSovCkBAIC0yNjAsNyArMTcwLDcgQEAKIAkvKgogCSAgIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHNlbnNvciBoYXMgYmVlbiBhdHRhY2hlZC4KIAkgICBJdCBzaG91bGQgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBzZW5zb3Igb25seSwgYnV0IG1heSBhbHNvCi0JICAgY29uZmlndXJlIHBhcnQgb2YgdGhlIFNOOUMxMFggY2hpcCBpZiBuZWNlc3NhcnkuIFlvdSBkb24ndCBuZWVkIHRvCisJICAgY29uZmlndXJlIHBhcnQgb2YgdGhlIFNOOUMxWFggY2hpcCBpZiBuZWNlc3NhcnkuIFlvdSBkb24ndCBuZWVkIHRvCiAJICAgc2V0dXAgcGljdHVyZSBzZXR0aW5ncyBsaWtlIGJyaWdodG5lc3MsIGNvbnRyYXN0LCBldGMuLiBoZXJlLCBpZgogCSAgIHRoZSBjb3JyaXNwb25kaW5nIGNvbnRyb2xzIGFyZSBpbXBsZW1lbnRlZCAoc2VlIGJlbG93KSwgc2luY2UKIAkgICB0aGV5IGFyZSBhZGp1c3RlZCBpbiB0aGUgY29yZSBkcml2ZXIgYnkgY2FsbGluZyB0aGUgc2V0X2N0cmwoKQpAQCAtMzAwLDcgKzIxMCw3IEBACiAJICAgSXQgaXMgbm90IGFsd2F5cyB0cnVlIHRoYXQgdGhlIGxhcmdlc3QgYWNoaWV2YWJsZSBhY3RpdmUgd2luZG93IGNhbgogCSAgIGNvdmVyIHRoZSB3aG9sZSBhcnJheSBvZiBwaXhlbHMuIFRoZSBWNEwyIEFQSSBkZWZpbmVzIGFub3RoZXIKIAkgICBhcmVhIGNhbGxlZCAic291cmNlIHJlY3RhbmdsZSIsIHdoaWNoLCBpbiB0dXJuLCBpcyBhIHN1YnJlY3RhbmdsZSBvZgotCSAgIHRoZSBhY3RpdmUgd2luZG93LiBUaGUgU045QzEwWCBjaGlwIGlzIGFsd2F5cyBwcm9ncmFtbWVkIHRvIHJlYWQgdGhlCisJICAgdGhlIGFjdGl2ZSB3aW5kb3cuIFRoZSBTTjlDMVhYIGNoaXAgaXMgYWx3YXlzIHByb2dyYW1tZWQgdG8gcmVhZCB0aGUKIAkgICBzb3VyY2UgcmVjdGFuZ2xlLgogCSAgIFRoZSBib3VuZHMgb2YgYm90aCB0aGUgYWN0aXZlIHdpbmRvdyBhbmQgdGhlIHNvdXJjZSByZWN0YW5nbGUgYXJlCiAJICAgc3BlY2lmaWVkIGluIHRoZSBjcm9wY2FwIHN1YnN0cnVjdHVyZXMgJ2JvdW5kcycgYW5kICdkZWZyZWN0Jy4KQEAgLTMyNiwxMyArMjM2LDEzIEBACiAJCQljb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KTsKIAkvKgogCSAgIFRvIGJlIGNhbGxlZCBvbiBWSURJT0NfQ19TRVRDUk9QLiBUaGUgY29yZSBtb2R1bGUgYWx3YXlzIGNhbGxzIGEKLQkgICBkZWZhdWx0IHJvdXRpbmUgd2hpY2ggY29uZmlndXJlcyB0aGUgYXBwcm9wcmlhdGUgU045QzEwWCByZWdzIChhbHNvCisJICAgZGVmYXVsdCByb3V0aW5lIHdoaWNoIGNvbmZpZ3VyZXMgdGhlIGFwcHJvcHJpYXRlIFNOOUMxWFggcmVncyAoYWxzbwogCSAgIHNjYWxpbmcpLCBidXQgeW91IG1heSBuZWVkIHRvIG92ZXJyaWRlL2FkanVzdCBzcGVjaWZpYyBzdHVmZi4KIAkgICAncmVjdCcgY29udGFpbnMgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgdGhhdCBhcmUgbXVsdGlwbGUgb2YgMTY6IGluCiAJICAgY2FzZSB5b3Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZnVuY3Rpb24sIHlvdSBhbHdheXMgaGF2ZSB0byBwcm9ncmFtCiAJICAgdGhlIGNoaXAgdG8gbWF0Y2ggdGhvc2UgdmFsdWVzOyBvbiBlcnJvciByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcKIAkgICBlcnJvciBjb2RlIHdpdGhvdXQgcm9sbGluZyBiYWNrLgotCSAgIE5PVEU6IGluIGNhc2UsIHlvdSBtdXN0IHByb2dyYW0gdGhlIFNOOUMxMFggY2hpcCB0byBnZXQgcmlkIG9mCisJICAgTk9URTogaW4gY2FzZSwgeW91IG11c3QgcHJvZ3JhbSB0aGUgU045QzFYWCBjaGlwIHRvIGdldCByaWQgb2YKIAkJIGJsYW5rIHBpeGVscyBvciBibGFuayBsaW5lcyBhdCB0aGUgX3N0YXJ0XyBvZiBlYWNoIGxpbmUgb3IKIAkJIGZyYW1lIGFmdGVyIGVhY2ggSFNZTkMgb3IgVlNZTkMsIHNvIHRoYXQgdGhlIGltYWdlIHN0YXJ0cyB3aXRoCiAJCSByZWFsIFJHQiBkYXRhIChzZWUgcmVncyAweDEyLCAweDEzKSAoaGF2aW5nIHNldCBIX1NJWkUgYW5kLApAQCAtMzQ0LDE2ICsyNTQsMTYgQEAKIAkvKgogCSAgIFdoYXQgeW91IGhhdmUgdG8gZGVmaW5lIGhlcmUgYXJlOiAxKSBpbml0aWFsICd3aWR0aCcgYW5kICdoZWlnaHQnIG9mCiAJICAgdGhlIHRhcmdldCByZWN0YW5nbGUgMikgdGhlIGluaXRpYWwgJ3BpeGVsZm9ybWF0Jywgd2hpY2ggY2FuIGJlCi0JICAgZWl0aGVyIFY0TDJfUElYX0ZNVF9TTjlDMTBYIChmb3IgY29tcHJlc3NlZCB2aWRlbykgb3IKLQkgICBWNEwyX1BJWF9GTVRfU0JHR1I4IDMpICdwcml2Jywgd2hpY2ggd2UnbGwgYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUKLQkgICBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwgZm9yIHVuY29tcHJlc3NlZCB2aWRlbywgOCBvciA5IChkZXNwaXRlIHRoZQotCSAgIGN1cnJlbnQgdmFsdWUgb2YgJ3BpeGVsZm9ybWF0JykuCisJICAgZWl0aGVyIFY0TDJfUElYX0ZNVF9TTjlDMTBYLCBWNEwyX1BJWF9GTVRfSlBFRyAoZm9yIG9tcHJlc3NlZCB2aWRlbykKKwkgICBvciBWNEwyX1BJWF9GTVRfU0JHR1I4IDMpICdwcml2Jywgd2hpY2ggd2UnbGwgYmUgdXNlZCB0byBpbmRpY2F0ZQorCSAgIHRoZSBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwgZm9yIHVuY29tcHJlc3NlZCB2aWRlbywgOCBvciA5IChkZXNwaXRlCisJICAgdGhlIGN1cnJlbnQgdmFsdWUgb2YgJ3BpeGVsZm9ybWF0JykuCiAJICAgTk9URSAxOiBib3RoICd3aWR0aCcgYW5kICdoZWlnaHQnIF9tdXN0XyBiZSBlaXRoZXIgMS8xIG9yIDEvMiBvciAxLzQKIAkJICAgb2YgY3JvcGNhcC5kZWZyZWN0LndpZHRoIGFuZCBjcm9wY2FwLmRlZnJlY3QuaGVpZ2h0LiBJCiAJCSAgIHN1Z2dlc3QgMS8xLgogCSAgIE5PVEUgMjogVGhlIGluaXRpYWwgY29tcHJlc3Npb24gcXVhbGl0eSBpcyBkZWZpbmVkIGJ5IHRoZSBmaXJzdCBiaXQKIAkJICAgb2YgcmVnIDB4MTcgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW1hZ2Ugc2Vuc29yLgotCSAgIE5PVEUgMzogYXMgc2FpZCBhYm92ZSwgeW91IGhhdmUgdG8gcHJvZ3JhbSB0aGUgU045QzEwWCBjaGlwIHRvIGdldAorCSAgIE5PVEUgMzogYXMgc2FpZCBhYm92ZSwgeW91IGhhdmUgdG8gcHJvZ3JhbSB0aGUgU045QzFYWCBjaGlwIHRvIGdldAogCQkgICByaWQgb2YgYW55IGJsYW5rIHBpeGVscywgc28gdGhhdCB0aGUgb3V0cHV0IG9mIHRoZSBzZW5zb3IKIAkJICAgbWF0Y2hlcyB0aGUgUkdCIGJheWVyIHNlcXVlbmNlIChpLmUuIEJHQkdCRy4uLkdSR1JHUikuCiAJKi8KQEAgLTM3OCwxMiArMjg4LDEyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFByaXZhdGUgaW9jdGwncyBmb3IgY29udHJvbCBzZXR0aW5ncyBzdXBwb3J0ZWQgYnkgc29tZSBpbWFnZSBzZW5zb3JzICovCi0jZGVmaW5lIFNOOUMxMDJfVjRMMl9DSURfREFDX01BR05JVFVERSBWNEwyX0NJRF9QUklWQVRFX0JBU0UKLSNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDEKLSNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9SRVNFVF9MRVZFTCBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAyCi0jZGVmaW5lIFNOOUMxMDJfVjRMMl9DSURfUElYRUxfQklBU19WT0xUQUdFIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDMKLSNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9HQU1NQSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA0Ci0jZGVmaW5lIFNOOUMxMDJfVjRMMl9DSURfQkFORF9GSUxURVIgVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNQotI2RlZmluZSBTTjlDMTAyX1Y0TDJfQ0lEX0JSSUdIVF9MRVZFTCBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA2CisjZGVmaW5lIFNOOUMxMDJfVjRMMl9DSURfREFDX01BR05JVFVERSAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMCkKKyNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxKQorI2RlZmluZSBTTjlDMTAyX1Y0TDJfQ0lEX1JFU0VUX0xFVkVMIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAyKQorI2RlZmluZSBTTjlDMTAyX1Y0TDJfQ0lEX1BJWEVMX0JJQVNfVk9MVEFHRSAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMykKKyNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9HQU1NQSAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNCkKKyNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9CQU5EX0ZJTFRFUiAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNSkKKyNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9CUklHSFRfTEVWRUwgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDYpCiAKICNlbmRpZiAvKiBfU045QzEwMl9TRU5TT1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMTBjMWIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMTBjMWIuYwppbmRleCAyOTRlYjAyLi45MDAyM2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTEwYzFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGMxYi5jCkBAIC0xLDggKzEsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUGx1Zy1pbiBmb3IgVEFTNTExMEMxQiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgKgorICogUGx1Zy1pbiBmb3IgVEFTNTExMEMxQiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMXh4IFBDIENhbWVyYSAgKgogICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgpAQCAtNjQsNyArNjQsNyBAQAogc3RhdGljIGludCB0YXM1MTEwYzFiX3NldF9jcm9wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCiB7Ci0Jc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJnRhczUxMTBjMWI7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gc245YzEwMl9nZXRfc2Vuc29yKGNhbSk7CiAJaW50IGVyciA9IDA7CiAJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgNjksCiAJICAgdl9zdGFydCA9ICh1OCkocmVjdC0+dG9wIC0gcy0+Y3JvcGNhcC5ib3VuZHMudG9wKSArIDk7CkBAIC05OCw2ICs5OCw3IEBACiBzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHRhczUxMTBjMWIgPSB7CiAJLm5hbWUgPSAiVEFTNTExMEMxQiIsCiAJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCisJLnN1cHBvcnRlZF9icmlkZ2UgPSBCUklER0VfU045QzEwMSB8IEJSSURHRV9TTjlDMTAyIHwgQlJJREdFX1NOOUMxMDMsCiAJLnN5c2ZzX29wcyA9IFNOOUMxMDJfSTJDX1dSSVRFLAogCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ18xMDBLSFosCiAJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzNXSVJFUywKQEAgLTE0NSw2ICsxNDYsNyBAQAogCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRhczUxMTBjMWJfaWRfdGFibGVbXSA9IHsKIAkJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDAxKSwgfSwKIAkJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1KSwgfSwKKwkJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA3KSwgfSwKIAkJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFiKSwgfSwKIAkJeyB9CiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMzBkMWIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMzBkMWIuYwppbmRleCA5ZWNiMDkwLi5jYjFiMzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTMwZDFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTEzMGQxYi5jCkBAIC0xLDggKzEsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUGx1Zy1pbiBmb3IgVEFTNTEzMEQxQiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgKgorICogUGx1Zy1pbiBmb3IgVEFTNTEzMEQxQiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMXh4IFBDIENhbWVyYSAgKgogICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgpAQCAtNjUsNyArNjUsNyBAQAogc3RhdGljIGludCB0YXM1MTMwZDFiX3NldF9jcm9wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCiB7Ci0Jc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJnRhczUxMzBkMWI7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gc245YzEwMl9nZXRfc2Vuc29yKGNhbSk7CiAJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgMTA0LAogCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAxMjsKIAlpbnQgZXJyID0gMDsKQEAgLTk5LDYgKzk5LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgdGFzNTEzMGQxYiA9IHsKIAkubmFtZSA9ICJUQVM1MTMwRDFCIiwKIAkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKKwkuc3VwcG9ydGVkX2JyaWRnZSA9IEJSSURHRV9TTjlDMTAxIHwgQlJJREdFX1NOOUMxMDIgfCBCUklER0VfU045QzEwMywKIAkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfV1JJVEUsCiAJLmZyZXF1ZW5jeSA9IFNOOUMxMDJfSTJDXzEwMEtIWiwKIAkuaW50ZXJmYWNlID0gU045QzEwMl9JMkNfM1dJUkVTLApAQCAtMTU0LDYgKzE1NSw3IEBACiBpbnQgc245YzEwMl9wcm9iZV90YXM1MTMwZDFiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQogewogCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRhczUxMzBkMWJfaWRfdGFibGVbXSA9IHsKKwkJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0KSwgfSwKIAkJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI1KSwgfSwKIAkJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFhKSwgfSwKIAkJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2bWl4ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZtaXhlci5jCmluZGV4IDdlYTkxMzIuLjNhZTVhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZtaXhlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZtaXhlci5jCkBAIC0yMTIsOCArMjEyLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKGNsaWVudC0+YWRhcHRlci0+b3duZXIpCi0JCW1vZHVsZV9wdXQoY2xpZW50LT5hZGFwdGVyLT5vd25lcik7CisJbW9kdWxlX3B1dChjbGllbnQtPmFkYXB0ZXItPm93bmVyKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYwppbmRleCBiYzBhNGZjLi44ODZiNWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYwpAQCAtOTUwLDE3ICs5NTAsOCBAQAogCX0KIAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQljYXNlIFZJRElPQ19JTlRfR19SRUdJU1RFUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcgPSBhcmc7Ci0KLQkJaWYgKHJlZy0+aTJjX2lkICE9IEkyQ19EUklWRVJJRF9UVlA1MTUwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJlZy0+dmFsID0gdHZwNTE1MF9yZWFkKGMsIHJlZy0+cmVnICYgMHhmZik7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0lOVF9TX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgogCXsKIAkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKIApAQCAtOTY4LDcgKzk1OSwxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07Ci0JCXR2cDUxNTBfd3JpdGUoYywgcmVnLT5yZWcgJiAweGZmLCByZWctPnZhbCAmIDB4ZmYpOworCQlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikKKwkJCXJlZy0+dmFsID0gdHZwNTE1MF9yZWFkKGMsIHJlZy0+cmVnICYgMHhmZik7CisJCWVsc2UKKwkJCXR2cDUxNTBfd3JpdGUoYywgcmVnLT5yZWcgJiAweGZmLCByZWctPnZhbCAmIDB4ZmYpOwogCQlicmVhazsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCmluZGV4IGZjNTIyMDEuLmIzYjVmZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYwpAQCAtMTYyLDI3ICsxNjIsMTkgQEAKIAkJYnJlYWs7CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JY2FzZSBWSURJT0NfSU5UX0dfUkVHSVNURVI6CisJY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6CisJY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6CiAJewogCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOwogCiAJCWlmIChyZWctPmkyY19pZCAhPSBJMkNfRFJJVkVSSURfVVBENjQwMzFBKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJlZy0+dmFsID0gdXBkNjQwMzFhX3JlYWQoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19JTlRfU19SRUdJU1RFUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcgPSBhcmc7Ci0JCXU4IGFkZHIgPSByZWctPnJlZyAmIDB4ZmY7Ci0JCXU4IHZhbCA9IHJlZy0+dmFsICYgMHhmZjsKLQotCQlpZiAocmVnLT5pMmNfaWQgIT0gSTJDX0RSSVZFUklEX1VQRDY0MDMxQSkKLQkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwotCQl1cGQ2NDAzMWFfd3JpdGUoY2xpZW50LCBhZGRyLCB2YWwpOworCQlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikKKwkJCXJlZy0+dmFsID0gdXBkNjQwMzFhX3JlYWQoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYpOworCQllbHNlCisJCQl1cGQ2NDAzMWFfd3JpdGUoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7CiAJCWJyZWFrOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jCmluZGV4IGMzYTdmZmUuLjg4NTI5MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMKQEAgLTEzOSwyNyArMTM5LDE5IEBACiAJCWJyZWFrOwogCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCWNhc2UgVklESU9DX0lOVF9HX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgorCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgogCXsKIAkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKIAogCQlpZiAocmVnLT5pMmNfaWQgIT0gSTJDX0RSSVZFUklEX1VQRDY0MDgzKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJlZy0+dmFsID0gdXBkNjQwODNfcmVhZChjbGllbnQsIHJlZy0+cmVnICYgMHhmZik7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0lOVF9TX1JFR0lTVEVSOgotCXsKLQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKLQkJdTggYWRkciA9IHJlZy0+cmVnICYgMHhmZjsKLQkJdTggdmFsID0gcmVnLT52YWwgJiAweGZmOwotCi0JCWlmIChyZWctPmkyY19pZCAhPSBJMkNfRFJJVkVSSURfVVBENjQwODMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJdXBkNjQwODNfd3JpdGUoY2xpZW50LCBhZGRyLCB2YWwpOworCQlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikKKwkJCXJlZy0+dmFsID0gdXBkNjQwODNfcmVhZChjbGllbnQsIHJlZy0+cmVnICYgMHhmZik7CisJCWVsc2UKKwkJCXVwZDY0MDgzX3dyaXRlKGNsaWVudCwgcmVnLT5yZWcgJiAweGZmLCByZWctPnZhbCAmIDB4ZmYpOwogCQlicmVhazsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi9LY29uZmlnCmluZGV4IGZjMjRlZjAuLmM0M2E1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWSURFT19VU0JWSVNJT04KIAl0cmlzdGF0ZSAiVVNCIHZpZGVvIGRldmljZXMgYmFzZWQgb24gTm9nYXRlY2ggTlQxMDAzLzEwMDQvMTAwNSIKLQlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19WNEwyCisJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMiAmJiBVU0IKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fU0FBNzExWCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCmluZGV4IDkwMWY2NjQuLmYyMTU0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJcmV0dXJuIG1lbTsKIH0KIAotdm9pZCB1c2J2aXNpb25fcnZmcmVlKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIHZvaWQgdXNidmlzaW9uX3J2ZnJlZSh2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGFkcjsKIApAQCAtMTg1MiwyOCArMTg1MiwzMyBAQAogCiAvKgogICogdXNidmlzaW9uX2ZyYW1lc19hbGxvYwotICogYWxsb2NhdGUgdGhlIG1heGltdW0gZnJhbWVzIHRoaXMgZHJpdmVyIGNhbiBtYW5hZ2UKKyAqIGFsbG9jYXRlIHRoZSByZXF1aXJlZCBmcmFtZXMKICAqLwotaW50IHVzYnZpc2lvbl9mcmFtZXNfYWxsb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK2ludCB1c2J2aXNpb25fZnJhbWVzX2FsbG9jKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCBudW1iZXJfb2ZfZnJhbWVzKQogewogCWludCBpOwogCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZnJhbWUgYnVmZmVycyAqLwotCXVzYnZpc2lvbi0+bWF4X2ZyYW1lX3NpemUgPSBNQVhfRlJBTUVfU0laRTsKLQl1c2J2aXNpb24tPmZidWZfc2l6ZSA9IFVTQlZJU0lPTl9OVU1GUkFNRVMgKiB1c2J2aXNpb24tPm1heF9mcmFtZV9zaXplOwotCXVzYnZpc2lvbi0+ZmJ1ZiA9IHVzYnZpc2lvbl9ydm1hbGxvYyh1c2J2aXNpb24tPmZidWZfc2l6ZSk7CisJLypuZWVkcyB0byBiZSBwYWdlIGFsaWduZWQgY2F1c2UgdGhlIGJ1ZmZlcnMgY2FuIGJlIG1hcHBlZCBpbmRpdmlkdWFsbHkhICovCisJdXNidmlzaW9uLT5tYXhfZnJhbWVfc2l6ZSA9ICBQQUdFX0FMSUdOKHVzYnZpc2lvbi0+Y3Vyd2lkdGggKgorCQkJCQkJdXNidmlzaW9uLT5jdXJoZWlnaHQgKgorCQkJCQkJdXNidmlzaW9uLT5wYWxldHRlLmJ5dGVzX3Blcl9waXhlbCk7CiAKLQlpZih1c2J2aXNpb24tPmZidWYgPT0gTlVMTCkgewotCQllcnIoIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yIGZidWYgIiwKLQkJICAgIF9fRlVOQ1RJT05fXywgdXNidmlzaW9uLT5mYnVmX3NpemUpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBUcnkgdG8gZG8gbXkgYmVzdCB0byBhbGxvY2F0ZSB0aGUgZnJhbWVzIHRoZSB1c2VyIHdhbnQgaW4gdGhlIHJlbWFpbmluZyBtZW1vcnkgKi8KKwl1c2J2aXNpb24tPm51bV9mcmFtZXMgPSBudW1iZXJfb2ZfZnJhbWVzOworCXdoaWxlICh1c2J2aXNpb24tPm51bV9mcmFtZXMgPiAwKSB7CisJCXVzYnZpc2lvbi0+ZmJ1Zl9zaXplID0gdXNidmlzaW9uLT5udW1fZnJhbWVzICogdXNidmlzaW9uLT5tYXhfZnJhbWVfc2l6ZTsKKwkJaWYoKHVzYnZpc2lvbi0+ZmJ1ZiA9IHVzYnZpc2lvbl9ydm1hbGxvYyh1c2J2aXNpb24tPmZidWZfc2l6ZSkpKSB7CisJCQlicmVhazsKKwkJfQorCQl1c2J2aXNpb24tPm51bV9mcmFtZXMtLTsKIAl9CisKIAlzcGluX2xvY2tfaW5pdCgmdXNidmlzaW9uLT5xdWV1ZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1c2J2aXNpb24tPndhaXRfZnJhbWUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVzYnZpc2lvbi0+d2FpdF9zdHJlYW0pOwogCiAJLyogQWxsb2NhdGUgYWxsIGJ1ZmZlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgVVNCVklTSU9OX05VTUZSQU1FUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHVzYnZpc2lvbi0+bnVtX2ZyYW1lczsgaSsrKSB7CiAJCXVzYnZpc2lvbi0+ZnJhbWVbaV0uaW5kZXggPSBpOwogCQl1c2J2aXNpb24tPmZyYW1lW2ldLmdyYWJzdGF0ZSA9IEZyYW1lU3RhdGVfVW51c2VkOwogCQl1c2J2aXNpb24tPmZyYW1lW2ldLmRhdGEgPSB1c2J2aXNpb24tPmZidWYgKwpAQCAtMTg4Nyw3ICsxODkyLDggQEAKIAkJdXNidmlzaW9uLT5mcmFtZVtpXS5oZWlnaHQgPSB1c2J2aXNpb24tPmN1cmhlaWdodDsKIAkJdXNidmlzaW9uLT5mcmFtZVtpXS5ieXRlc19yZWFkID0gMDsKIAl9Ci0JcmV0dXJuIDA7CisJUERFQlVHKERCR19GVU5DLCAiYWxsb2NhdGVkICVkIGZyYW1lcyAoJWQgYnl0ZXMgcGVyIGZyYW1lKSIsdXNidmlzaW9uLT5udW1fZnJhbWVzLHVzYnZpc2lvbi0+bWF4X2ZyYW1lX3NpemUpOworCXJldHVybiB1c2J2aXNpb24tPm51bV9mcmFtZXM7CiB9CiAKIC8qCkBAIC0xODk3LDkgKzE5MDMsMTMgQEAKIHZvaWQgdXNidmlzaW9uX2ZyYW1lc19mcmVlKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCiB7CiAJLyogSGF2ZSB0byBmcmVlIGFsbCB0aGF0IG1lbW9yeSAqLworCVBERUJVRyhEQkdfRlVOQywgImZyZWUgJWQgZnJhbWVzIix1c2J2aXNpb24tPm51bV9mcmFtZXMpOworCiAJaWYgKHVzYnZpc2lvbi0+ZmJ1ZiAhPSBOVUxMKSB7CiAJCXVzYnZpc2lvbl9ydmZyZWUodXNidmlzaW9uLT5mYnVmLCB1c2J2aXNpb24tPmZidWZfc2l6ZSk7CiAJCXVzYnZpc2lvbi0+ZmJ1ZiA9IE5VTEw7CisKKwkJdXNidmlzaW9uLT5udW1fZnJhbWVzID0gMDsKIAl9CiB9CiAvKgpAQCAtMjM1MSw2ICsyMzYxLDMyIEBACiAJcmV0dXJuIFVTQlZJU0lPTl9JU19PUEVSQVRJT05BTCh1c2J2aXNpb24pOwogfQogCitpbnQgdXNidmlzaW9uX3NldF9hbHRlcm5hdGUoc3RydWN0IHVzYl91c2J2aXNpb24gKmRldikKK3sKKwlpbnQgZXJyQ29kZSwgcHJldl9hbHQgPSBkZXYtPmlmYWNlQWx0OworCWludCBpOworCisJZGV2LT5pZmFjZUFsdD0wOworCWZvcihpPTA7aTwgZGV2LT5udW1fYWx0OyBpKyspCisJCWlmKGRldi0+YWx0X21heF9wa3Rfc2l6ZVtpXT5kZXYtPmFsdF9tYXhfcGt0X3NpemVbZGV2LT5pZmFjZUFsdF0pCisJCQlkZXYtPmlmYWNlQWx0PWk7CisKKwlpZiAoZGV2LT5pZmFjZUFsdCAhPSBwcmV2X2FsdCkgeworCQlkZXYtPmlzb2NQYWNrZXRTaXplID0gZGV2LT5hbHRfbWF4X3BrdF9zaXplW2Rldi0+aWZhY2VBbHRdOworCQlQREVCVUcoREJHX0ZVTkMsInNldHRpbmcgYWx0ZXJuYXRlICVkIHdpdGggd01heFBhY2tldFNpemU9JXUiLCBkZXYtPmlmYWNlQWx0LGRldi0+aXNvY1BhY2tldFNpemUpOworCQllcnJDb2RlID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LT5kZXYsIGRldi0+aWZhY2UsIGRldi0+aWZhY2VBbHQpOworCQlpZiAoZXJyQ29kZSA8IDApIHsKKwkJCWVyciAoImNhbm5vdCBjaGFuZ2UgYWx0ZXJuYXRlIG51bWJlciB0byAlZCAoZXJyb3I9JWkpIiwKKwkJCQkJCQlkZXYtPmlmYWNlQWx0LCBlcnJDb2RlKTsKKwkJCXJldHVybiBlcnJDb2RlOworCQl9CisJfQorCisJUERFQlVHKERCR19JU09DLCAiSVNPIFBhY2tldCBMZW5ndGg6JWQiLCBkZXYtPmlzb2NQYWNrZXRTaXplKTsKKworCXJldHVybiAwOworfQorCiAvKgogICogdXNidmlzaW9uX2luaXRfaXNvYygpCiAgKgpAQCAtMjM2OCwxNSArMjQwNCwxMyBAQAogCXNjcmF0Y2hfcmVzZXQodXNidmlzaW9uKTsKIAogCS8qIEFsdGVybmF0ZSBpbnRlcmZhY2UgMSBpcyBpcyB0aGUgYmlnZ2VzdCBmcmFtZSBzaXplICovCi0JZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldiwgdXNidmlzaW9uLT5pZmFjZSwgdXNidmlzaW9uLT5pZmFjZUFsdEFjdGl2ZSk7CisJZXJyQ29kZSA9IHVzYnZpc2lvbl9zZXRfYWx0ZXJuYXRlKHVzYnZpc2lvbik7CiAJaWYgKGVyckNvZGUgPCAwKSB7CiAJCXVzYnZpc2lvbi0+bGFzdF9lcnJvciA9IGVyckNvZGU7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJcmVnVmFsdWUgPSAoMTYgLSB1c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fQUxURVJfUkVHKSkgJiAweDBGOwotCXVzYnZpc2lvbi0+aXNvY1BhY2tldFNpemUgPSAocmVnVmFsdWUgPT0gMCkgPyAwIDogKHJlZ1ZhbHVlICogNjQpIC0gMTsKLQlQREVCVUcoREJHX0lTT0MsICJJU08gUGFja2V0IExlbmd0aDolZCIsIHVzYnZpc2lvbi0+aXNvY1BhY2tldFNpemUpOwogCiAJdXNidmlzaW9uLT51c2JfYmFuZHdpZHRoID0gcmVnVmFsdWUgPj4gMTsKIAlQREVCVUcoREJHX0lTT0MsICJVU0IgQmFuZHdpZHRoIFVzYWdlOiAlZE1iaXQvU2VjIiwgdXNidmlzaW9uLT51c2JfYmFuZHdpZHRoKTsKQEAgLTI0NjIsOCArMjQ5Niw5IEBACiAJaWYgKCF1c2J2aXNpb24tPnJlbW92ZV9wZW5kaW5nKSB7CiAKIAkJLyogU2V0IHBhY2tldCBzaXplIHRvIDAgKi8KKwkJdXNidmlzaW9uLT5pZmFjZUFsdD0wOwogCQllcnJDb2RlID0gdXNiX3NldF9pbnRlcmZhY2UodXNidmlzaW9uLT5kZXYsIHVzYnZpc2lvbi0+aWZhY2UsCi0JCQkJICAgICAgdXNidmlzaW9uLT5pZmFjZUFsdEluYWN0aXZlKTsKKwkJCQkJICAgIHVzYnZpc2lvbi0+aWZhY2VBbHQpOwogCQlpZiAoZXJyQ29kZSA8IDApIHsKIAkJCWVycigiJXM6IHVzYl9zZXRfaW50ZXJmYWNlKCkgZmFpbGVkOiBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgZXJyQ29kZSk7CiAJCQl1c2J2aXNpb24tPmxhc3RfZXJyb3IgPSBlcnJDb2RlOwpAQCAtMjQ5MCw2ICsyNTI1LDcgQEAKIAlSRVNUUklDVF9UT19SQU5HRShjaGFubmVsLCAwLCB1c2J2aXNpb24tPnZpZGVvX2lucHV0cyk7CiAJdXNidmlzaW9uLT5jdGxfaW5wdXQgPSBjaGFubmVsOwogCSAgcm91dGUuaW5wdXQgPSBTQUE3MTE1X0NPTVBPU0lURTE7CisJICByb3V0ZS5vdXRwdXQgPSAwOwogCSAgY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCZyb3V0ZSk7CiAJICBjYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX1NfSU5QVVQsICZ1c2J2aXNpb24tPmN0bF9pbnB1dCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKaW5kZXggYWYzMzY1My4uYWU1ZjQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCWN0cmwudmFsdWUgPSAwOwogCWlmKHVzYnZpc2lvbi0+dXNlcikKIAkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSA+PiA4KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSk7CiB9CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaHVlLCBTX0lSVUdPLCBzaG93X2h1ZSwgTlVMTCk7CiAKQEAgLTI0Myw3ICsyNDMsNyBAQAogCWN0cmwudmFsdWUgPSAwOwogCWlmKHVzYnZpc2lvbi0+dXNlcikKIAkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSA+PiA4KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSk7CiB9CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoY29udHJhc3QsIFNfSVJVR08sIHNob3dfY29udHJhc3QsIE5VTEwpOwogCkBAIC0yNTYsNyArMjU2LDcgQEAKIAljdHJsLnZhbHVlID0gMDsKIAlpZih1c2J2aXNpb24tPnVzZXIpCiAJCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfR19DVFJMLCAmY3RybCk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGN0cmwudmFsdWUgPj4gOCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGN0cmwudmFsdWUpOwogfQogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJyaWdodG5lc3MsIFNfSVJVR08sIHNob3dfYnJpZ2h0bmVzcywgTlVMTCk7CiAKQEAgLTI2OSw3ICsyNjksNyBAQAogCWN0cmwudmFsdWUgPSAwOwogCWlmKHVzYnZpc2lvbi0+dXNlcikKIAkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSA+PiA4KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSk7CiB9CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2F0dXJhdGlvbiwgU19JUlVHTywgc2hvd19zYXR1cmF0aW9uLCBOVUxMKTsKIApAQCAtMzkxLDE5ICszOTEsMTQgQEAKIAlpZiAodXNidmlzaW9uLT51c2VyKQogCQllcnJDb2RlID0gLUVCVVNZOwogCWVsc2UgewotCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmcmFtZSBidWZmZXJzICovCi0JCWVyckNvZGUgPSB1c2J2aXNpb25fZnJhbWVzX2FsbG9jKHVzYnZpc2lvbik7Ci0JCWlmKCFlcnJDb2RlKSB7Ci0JCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBzY3JhdGNoIHJpbmcgYnVmZmVyICovCi0JCQllcnJDb2RlID0gdXNidmlzaW9uX3NjcmF0Y2hfYWxsb2ModXNidmlzaW9uKTsKLQkJCWlmICgoIWVyckNvZGUpICYmIChpc29jTW9kZT09SVNPQ19NT0RFX0NPTVBSRVNTKSkgewotCQkJCS8qIEFsbG9jYXRlIGludGVybWVkaWF0ZSBkZWNvbXByZXNzaW9uIGJ1ZmZlcnMgb25seSBpZiBuZWVkZWQgKi8KLQkJCQllcnJDb2RlID0gdXNidmlzaW9uX2RlY29tcHJlc3NfYWxsb2ModXNidmlzaW9uKTsKLQkJCX0KKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc2NyYXRjaCByaW5nIGJ1ZmZlciAqLworCQllcnJDb2RlID0gdXNidmlzaW9uX3NjcmF0Y2hfYWxsb2ModXNidmlzaW9uKTsKKwkJaWYgKGlzb2NNb2RlPT1JU09DX01PREVfQ09NUFJFU1MpIHsKKwkJCS8qIEFsbG9jYXRlIGludGVybWVkaWF0ZSBkZWNvbXByZXNzaW9uIGJ1ZmZlcnMgb25seSBpZiBuZWVkZWQgKi8KKwkJCWVyckNvZGUgPSB1c2J2aXNpb25fZGVjb21wcmVzc19hbGxvYyh1c2J2aXNpb24pOwogCQl9CiAJCWlmIChlcnJDb2RlKSB7CiAJCQkvKiBEZWFsbG9jYXRlIGFsbCBidWZmZXJzIGlmIHRyb3VibGUgKi8KLQkJCXVzYnZpc2lvbl9mcmFtZXNfZnJlZSh1c2J2aXNpb24pOwogCQkJdXNidmlzaW9uX3NjcmF0Y2hfZnJlZSh1c2J2aXNpb24pOwogCQkJdXNidmlzaW9uX2RlY29tcHJlc3NfZnJlZSh1c2J2aXNpb24pOwogCQl9CkBAIC00NzYsNiArNDcxLDcgQEAKIAogCXVzYnZpc2lvbl9kZWNvbXByZXNzX2ZyZWUodXNidmlzaW9uKTsKIAl1c2J2aXNpb25fZnJhbWVzX2ZyZWUodXNidmlzaW9uKTsKKwl1c2J2aXNpb25fZW1wdHlfZnJhbWVxdWV1ZXModXNidmlzaW9uKTsKIAl1c2J2aXNpb25fc2NyYXRjaF9mcmVlKHVzYnZpc2lvbik7CiAKIAl1c2J2aXNpb24tPnVzZXItLTsKQEAgLTQ4OSw3ICs0ODUsNyBAQAogCXVwKCZ1c2J2aXNpb24tPmxvY2spOwogCiAJaWYgKHVzYnZpc2lvbi0+cmVtb3ZlX3BlbmRpbmcpIHsKLQkJaW5mbygiJXM6IEZpbmFsIGRpc2Nvbm5lY3QiLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogRmluYWwgZGlzY29ubmVjdFxuIiwgX19GVU5DVElPTl9fKTsKIAkJdXNidmlzaW9uX3JlbGVhc2UodXNidmlzaW9uKTsKIAl9CiAKQEAgLTUxOSwyNyArNTE1LDggQEAKIAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIAkJLyogaW9jdGxzIHRvIGFsbG93IGRpcmVjdCBhY2NlcyB0byB0aGUgTlQxMDB4IHJlZ2lzdGVycyAqLwotCQljYXNlIFZJRElPQ19JTlRfR19SRUdJU1RFUjoKLQkJewotCQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKLQkJCWludCBlcnJDb2RlOwotCi0JCQlpZiAocmVnLT5pMmNfaWQgIT0gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCS8qIE5UMTAweCBoYXMgYSA4LWJpdCByZWdpc3RlciBzcGFjZSAqLwotCQkJZXJyQ29kZSA9IHVzYnZpc2lvbl9yZWFkX3JlZyh1c2J2aXNpb24sIHJlZy0+cmVnJjB4ZmYpOwotCQkJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCQkJZXJyKCIlczogVklESU9DX0lOVF9HX1JFR0lTVEVSIGZhaWxlZDogZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIGVyckNvZGUpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcmVnLT52YWw9KHVuc2lnbmVkIGNoYXIpZXJyQ29kZTsKLQkJCQlQREVCVUcoREJHX0lPQ1RMLCAiVklESU9DX0lOVF9HX1JFR0lTVEVSIHJlZz0weCUwMlgsIHZhbHVlPTB4JTAyWCIsCi0JCQkJCQkJKHVuc2lnbmVkIGludClyZWctPnJlZywgcmVnLT52YWwpOwotCQkJCWVyckNvZGUgPSAwOyAvLyBObyBlcnJvcgotCQkJfQotCQkJcmV0dXJuIGVyckNvZGU7Ci0JCX0KLQkJY2FzZSBWSURJT0NfSU5UX1NfUkVHSVNURVI6CisJCWNhc2UgVklESU9DX0RCR19HX1JFR0lTVEVSOgorCQljYXNlIFZJRElPQ19EQkdfU19SRUdJU1RFUjoKIAkJewogCQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKIAkJCWludCBlcnJDb2RlOwpAQCAtNTQ4LDE1ICs1MjUsMjIgQEAKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCQlyZXR1cm4gLUVQRVJNOwotCQkJZXJyQ29kZSA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCByZWctPnJlZyYweGZmLCByZWctPnZhbCk7CisJCQkvKiBOVDEwMHggaGFzIGEgOC1iaXQgcmVnaXN0ZXIgc3BhY2UgKi8KKwkJCWlmIChjbWQgPT0gVklESU9DX0RCR19HX1JFR0lTVEVSKQorCQkJCWVyckNvZGUgPSB1c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCByZWctPnJlZyYweGZmKTsKKwkJCWVsc2UKKwkJCQllcnJDb2RlID0gdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIHJlZy0+cmVnJjB4ZmYsIHJlZy0+dmFsKTsKIAkJCWlmIChlcnJDb2RlIDwgMCkgewotCQkJCWVycigiJXM6IFZJRElPQ19JTlRfU19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkIiwgX19GVU5DVElPTl9fLCBlcnJDb2RlKTsKKwkJCQllcnIoIiVzOiBWSURJT0NfREJHXyVjX1JFR0lTVEVSIGZhaWxlZDogZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sCisJCQkJICAgIGNtZCA9PSBWSURJT0NfREJHX0dfUkVHSVNURVIgPyAnRycgOiAnUycsIGVyckNvZGUpOworCQkJCXJldHVybiBlcnJDb2RlOwogCQkJfQotCQkJZWxzZSB7Ci0JCQkJUERFQlVHKERCR19JT0NUTCwgIlZJRElPQ19JTlRfU19SRUdJU1RFUiByZWc9MHglMDJYLCB2YWx1ZT0weCUwMlgiLAotCQkJCQkJCSh1bnNpZ25lZCBpbnQpcmVnLT5yZWcsIHJlZy0+dmFsKTsKLQkJCQllcnJDb2RlID0gMDsKLQkJCX0KKwkJCWlmIChjbWQgPT0gVklESU9DX0RCR19TX1JFR0lTVEVSKQorCQkJCXJlZy0+dmFsID0gKHU4KWVyckNvZGU7CisKKwkJCVBERUJVRyhEQkdfSU9DVEwsICJWSURJT0NfREJHXyVjX1JFR0lTVEVSIHJlZz0weCUwMlgsIHZhbHVlPTB4JTAyWCIsCisJCQkgICAgICAgY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUiA/ICdHJyA6ICdTJywKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXJlZy0+cmVnLCByZWctPnZhbCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogI2VuZGlmCkBAIC03OTIsOCArNzc2LDggQEAKIAkJY2FzZSBWSURJT0NfR19DVFJMOgogCQl7CiAJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCQkJUERFQlVHKERCR19JT0NUTCwiVklESU9DX0dfQ1RSTCBpZD0leCB2YWx1ZT0leCIsY3RybC0+aWQsY3RybC0+dmFsdWUpOwogCQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCQkJUERFQlVHKERCR19JT0NUTCwiVklESU9DX0dfQ1RSTCBpZD0leCB2YWx1ZT0leCIsY3RybC0+aWQsY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJY2FzZSBWSURJT0NfU19DVFJMOgpAQCAtODIxLDcgKzgwNSw5IEBACiAJCQkJICAgIHJldHVybiByZXQ7CiAJCQl9CiAKKwkJCXVzYnZpc2lvbl9mcmFtZXNfZnJlZSh1c2J2aXNpb24pOwogCQkJdXNidmlzaW9uX2VtcHR5X2ZyYW1lcXVldWVzKHVzYnZpc2lvbik7CisJCQl2ci0+Y291bnQgPSB1c2J2aXNpb25fZnJhbWVzX2FsbG9jKHVzYnZpc2lvbix2ci0+Y291bnQpOwogCiAJCQl1c2J2aXNpb24tPmN1ckZyYW1lID0gTlVMTDsKIApAQCAtODM4LDcgKzgyNCw3IEBACiAJCQlpZih2Yi0+dHlwZSAhPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFKSB7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQlpZih2Yi0+aW5kZXg+PVVTQlZJU0lPTl9OVU1GUkFNRVMpICB7CisJCQlpZih2Yi0+aW5kZXg+PXVzYnZpc2lvbi0+bnVtX2ZyYW1lcykgIHsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCS8vIFVwZGF0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGZyYW1lIHN0YXRlCkBAIC04NTIsNyArODM4LDcgQEAKIAkJCQl2Yi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CiAJCQl2Yi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKIAotCQkJdmItPm0ub2Zmc2V0ID0gdmItPmluZGV4KnVzYnZpc2lvbi0+bWF4X2ZyYW1lX3NpemU7CisJCQl2Yi0+bS5vZmZzZXQgPSB2Yi0+aW5kZXgqUEFHRV9BTElHTih1c2J2aXNpb24tPm1heF9mcmFtZV9zaXplKTsKIAogCQkJdmItPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CiAJCQl2Yi0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CkBAIC04NzEsNyArODU3LDcgQEAKIAkJCWlmKHZiLT50eXBlICE9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUpIHsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWlmKHZiLT5pbmRleD49VVNCVklTSU9OX05VTUZSQU1FUykgIHsKKwkJCWlmKHZiLT5pbmRleD49dXNidmlzaW9uLT5udW1fZnJhbWVzKSAgewogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCkBAIC0xMDQxLDYgKzEwMjcsNyBAQAogCQkJCQkJaWYgKChyZXQgPSB1c2J2aXNpb25fc3RyZWFtX2ludGVycnVwdCh1c2J2aXNpb24pKSkKIAkJCQkJCQlyZXR1cm4gcmV0OwogCQkJCQl9CisJCQkJCXVzYnZpc2lvbl9mcmFtZXNfZnJlZSh1c2J2aXNpb24pOwogCQkJCQl1c2J2aXNpb25fZW1wdHlfZnJhbWVxdWV1ZXModXNidmlzaW9uKTsKIAogCQkJCQl1c2J2aXNpb24tPmN1ckZyYW1lID0gTlVMTDsKQEAgLTEwODcsMTIgKzEwNzQsMjQgQEAKIAlpZiAoIVVTQlZJU0lPTl9JU19PUEVSQVRJT05BTCh1c2J2aXNpb24pIHx8IChidWYgPT0gTlVMTCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JLyogbm8gc3RyZWFtIGlzIHJ1bm5pbmcsIG1ha2UgaXQgcnVubmluZyAhICovCi0JdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBTdHJlYW1fT247Ci0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX1NUUkVBTU9OICwgTlVMTCk7CisJLyogVGhpcyBlbnRyeSBwb2ludCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG1tYXAgcm91dGluZXMgc28gdGhhdCBhIHVzZXIgY2FuIGRvIGVpdGhlcgorCSAgIFZJRElPQ19RQlVGL1ZJRElPQ19EUUJVRiB0byBnZXQgZnJhbWVzIG9yIGNhbGwgcmVhZCBvbiB0aGUgZGV2aWNlLiAqLworCWlmKCF1c2J2aXNpb24tPm51bV9mcmFtZXMpIHsKKwkJLyogRmlyc3QsIGFsbG9jYXRlIHNvbWUgZnJhbWVzIHRvIHdvcmsgd2l0aCBpZiB0aGlzIGhhcyBub3QgYmVlbiBkb25lIHdpdGgKKwkJIFZJRElPQ19SRVFCVUYgKi8KKwkJdXNidmlzaW9uX2ZyYW1lc19mcmVlKHVzYnZpc2lvbik7CisJCXVzYnZpc2lvbl9lbXB0eV9mcmFtZXF1ZXVlcyh1c2J2aXNpb24pOworCQl1c2J2aXNpb25fZnJhbWVzX2FsbG9jKHVzYnZpc2lvbixVU0JWSVNJT05fTlVNRlJBTUVTKTsKKwl9CiAKLQkvKiBGaXJzdCwgZW5xdWV1ZSBhcyBtYW55IGZyYW1lcyBhcyBwb3NzaWJsZSAobGlrZSBhIHVzZXIgb2YgVklESU9DX1FCVUYgd291bGQgZG8pICovCi0JZm9yKGk9MDtpPFVTQlZJU0lPTl9OVU1GUkFNRVM7aSsrKSB7CisJaWYodXNidmlzaW9uLT5zdHJlYW1pbmcgIT0gU3RyZWFtX09uKSB7CisJCS8qIG5vIHN0cmVhbSBpcyBydW5uaW5nLCBtYWtlIGl0IHJ1bm5pbmcgISAqLworCQl1c2J2aXNpb24tPnN0cmVhbWluZyA9IFN0cmVhbV9PbjsKKwkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX1NUUkVBTU9OICwgTlVMTCk7CisJfQorCisJLyogVGhlbiwgZW5xdWV1ZSBhcyBtYW55IGZyYW1lcyBhcyBwb3NzaWJsZSAobGlrZSBhIHVzZXIgb2YgVklESU9DX1FCVUYgd291bGQgZG8pICovCisJZm9yKGk9MDtpPHVzYnZpc2lvbi0+bnVtX2ZyYW1lcztpKyspIHsKIAkJZnJhbWUgPSAmdXNidmlzaW9uLT5mcmFtZVtpXTsKIAkJaWYoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGcmFtZVN0YXRlX1VudXNlZCkgewogCQkJLyogTWFyayBpdCBhcyByZWFkeSBhbmQgZW5xdWV1ZSBmcmFtZSAqLwpAQCAtMTE2OSw2ICsxMTY4LDggQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSAoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKIAorCVBERUJVRyhEQkdfTU1BUCwgIm1tYXAiKTsKKwogCWRvd24oJnVzYnZpc2lvbi0+bG9jayk7CiAKIAlpZiAoIVVTQlZJU0lPTl9JU19PUEVSQVRJT05BTCh1c2J2aXNpb24pKSB7CkBAIC0xMTc3LDE2ICsxMTc4LDE2IEBACiAJfQogCiAJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB8fAotCSAgICBzaXplICE9IFBBR0VfQUxJR04odXNidmlzaW9uLT5jdXJ3aWR0aCp1c2J2aXNpb24tPmN1cmhlaWdodCp1c2J2aXNpb24tPnBhbGV0dGUuYnl0ZXNfcGVyX3BpeGVsKSkgeworCSAgICBzaXplICE9IFBBR0VfQUxJR04odXNidmlzaW9uLT5tYXhfZnJhbWVfc2l6ZSkpIHsKIAkJdXAoJnVzYnZpc2lvbi0+bG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBVU0JWSVNJT05fTlVNRlJBTUVTOyBpKyspIHsKLQkJaWYgKCgodXNidmlzaW9uLT5tYXhfZnJhbWVfc2l6ZSppKSA+PiBQQUdFX1NISUZUKSA9PSB2bWEtPnZtX3Bnb2ZmKQorCWZvciAoaSA9IDA7IGkgPCB1c2J2aXNpb24tPm51bV9mcmFtZXM7IGkrKykgeworCQlpZiAoKChQQUdFX0FMSUdOKHVzYnZpc2lvbi0+bWF4X2ZyYW1lX3NpemUpKmkpID4+IFBBR0VfU0hJRlQpID09IHZtYS0+dm1fcGdvZmYpCiAJCQlicmVhazsKIAl9Ci0JaWYgKGkgPT0gVVNCVklTSU9OX05VTUZSQU1FUykgeworCWlmIChpID09IHVzYnZpc2lvbi0+bnVtX2ZyYW1lcykgewogCQlQREVCVUcoREJHX01NQVAsICJtbWFwOiB1c2VyIHN1cHBsaWVkIG1hcHBpbmcgYWRkcmVzcyBpcyBvdXQgb2YgcmFuZ2UiKTsKIAkJdXAoJnVzYnZpc2lvbi0+bG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTI0Miw2ICsxMjQzLDEzIEBACiAJCQl9CiAJCX0KIAorCQkvKiBBbHRlcm5hdGUgaW50ZXJmYWNlIDEgaXMgaXMgdGhlIGJpZ2dlc3QgZnJhbWUgc2l6ZSAqLworCQllcnJDb2RlID0gdXNidmlzaW9uX3NldF9hbHRlcm5hdGUodXNidmlzaW9uKTsKKwkJaWYgKGVyckNvZGUgPCAwKSB7CisJCQl1c2J2aXNpb24tPmxhc3RfZXJyb3IgPSBlcnJDb2RlOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCiAJCS8vIElmIHNvIGZhciBubyBlcnJvcnMgdGhlbiB3ZSBzaGFsbCBzdGFydCB0aGUgcmFkaW8KIAkJdXNidmlzaW9uLT5yYWRpbyA9IDE7CiAJCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLEFVRENfU0VUX1JBRElPLCZ1c2J2aXNpb24tPnR1bmVyX3R5cGUpOwpAQCAtMTI3Myw2ICsxMjgxLDExIEBACiAKIAlkb3duKCZ1c2J2aXNpb24tPmxvY2spOwogCisJLyogU2V0IHBhY2tldCBzaXplIHRvIDAgKi8KKwl1c2J2aXNpb24tPmlmYWNlQWx0PTA7CisJZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKHVzYnZpc2lvbi0+ZGV2LCB1c2J2aXNpb24tPmlmYWNlLAorCQkJCSAgICB1c2J2aXNpb24tPmlmYWNlQWx0KTsKKwogCXVzYnZpc2lvbl9hdWRpb19vZmYodXNidmlzaW9uKTsKIAl1c2J2aXNpb24tPnJhZGlvPTA7CiAJdXNidmlzaW9uLT51c2VyLS07CkBAIC0xMjg1LDcgKzEyOTgsNyBAQAogCXVwKCZ1c2J2aXNpb24tPmxvY2spOwogCiAJaWYgKHVzYnZpc2lvbi0+cmVtb3ZlX3BlbmRpbmcpIHsKLQkJaW5mbygiJXM6IEZpbmFsIGRpc2Nvbm5lY3QiLCBfX0ZVTkNUSU9OX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogRmluYWwgZGlzY29ubmVjdFxuIiwgX19GVU5DVElPTl9fKTsKIAkJdXNidmlzaW9uX3JlbGVhc2UodXNidmlzaW9uKTsKIAl9CiAKQEAgLTE2MTEsNyArMTYyNCw3IEBACiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSh1c2J2aXNpb24tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTwwKSB7CiAJCWdvdG8gZXJyX2V4aXQ7CiAJfQotCWluZm8oIlVTQlZpc2lvblslZF06IHJlZ2lzdGVyZWQgVVNCVmlzaW9uIFZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWQgW3Y0bDJdIiwgdXNidmlzaW9uLT5ucix1c2J2aXNpb24tPnZkZXYtPm1pbm9yICYgMHgxZik7CisJcHJpbnRrKEtFUk5fSU5GTyAiVVNCVmlzaW9uWyVkXTogcmVnaXN0ZXJlZCBVU0JWaXNpb24gVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBbdjRsMl1cbiIsIHVzYnZpc2lvbi0+bnIsdXNidmlzaW9uLT52ZGV2LT5taW5vciAmIDB4MWYpOwogCiAJLy8gUmFkaW8gRGV2aWNlOgogCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uUmFkaW8pIHsKQEAgLTE2MjMsNyArMTYzNiw3IEBACiAJCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UodXNidmlzaW9uLT5yZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpPDApIHsKIAkJCWdvdG8gZXJyX2V4aXQ7CiAJCX0KLQkJaW5mbygiVVNCVmlzaW9uWyVkXTogcmVnaXN0ZXJlZCBVU0JWaXNpb24gUmFkaW8gZGV2aWNlIC9kZXYvcmFkaW8lZCBbdjRsMl0iLCB1c2J2aXNpb24tPm5yLCB1c2J2aXNpb24tPnJkZXYtPm1pbm9yICYgMHgxZik7CisJCXByaW50ayhLRVJOX0lORk8gIlVTQlZpc2lvblslZF06IHJlZ2lzdGVyZWQgVVNCVmlzaW9uIFJhZGlvIGRldmljZSAvZGV2L3JhZGlvJWQgW3Y0bDJdXG4iLCB1c2J2aXNpb24tPm5yLCB1c2J2aXNpb24tPnJkZXYtPm1pbm9yICYgMHgxZik7CiAJfQogCS8vIHZiaSBEZXZpY2U6CiAJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS52YmkpIHsKQEAgLTE2MzQsNyArMTY0Nyw3IEBACiAJCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UodXNidmlzaW9uLT52YmksIFZGTF9UWVBFX1ZCSSwgdmJpX25yKTwwKSB7CiAJCQlnb3RvIGVycl9leGl0OwogCQl9Ci0JCWluZm8oIlVTQlZpc2lvblslZF06IHJlZ2lzdGVyZWQgVVNCVmlzaW9uIFZCSSBkZXZpY2UgL2Rldi92YmklZCBbdjRsMl0gKE5vdCBXb3JraW5nIFlldCEpIiwgdXNidmlzaW9uLT5ucix1c2J2aXNpb24tPnZiaS0+bWlub3IgJiAweDFmKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCVmlzaW9uWyVkXTogcmVnaXN0ZXJlZCBVU0JWaXNpb24gVkJJIGRldmljZSAvZGV2L3ZiaSVkIFt2NGwyXSAoTm90IFdvcmtpbmcgWWV0ISlcbiIsIHVzYnZpc2lvbi0+bnIsdXNidmlzaW9uLT52YmktPm1pbm9yICYgMHgxZik7CiAJfQogCS8vIGFsbCBkb25lCiAJcmV0dXJuIDA7CkBAIC0xNzY0LDE1ICsxNzc3LDE3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IHVzYnZpc2lvbl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmlkKQogewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWlmOwogCV9fdTggaWZudW0gPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAJY29uc3Qgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSBOVUxMOwogCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0JaW50IG1vZGVsOworCWludCBtb2RlbCxpOwogCiAJUERFQlVHKERCR19QUk9CRSwgIlZJRD0lIzA0eCwgUElEPSUjMDR4LCBpZm51bT0ldSIsCiAJCQkJCWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciwgZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCwgaWZudW0pOworCiAJLyogSXMgaXQgYW4gVVNCVklTSU9OIHZpZGVvIGRldj8gKi8KIAltb2RlbCA9IDA7CiAJZm9yKG1vZGVsID0gMDsgdXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5pZFZlbmRvcjsgbW9kZWwrKykgewpAQCAtMTc4Myw3ICsxNzk4LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaW5mbygiJXM6ICVzIGZvdW5kIiwgX19GVU5DVElPTl9fLCB1c2J2aXNpb25fZGV2aWNlX2RhdGFbbW9kZWxdLk1vZGVsU3RyaW5nKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGZvdW5kXG4iLCBfX0ZVTkNUSU9OX18sIHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uTW9kZWxTdHJpbmcpOwogCQlicmVhazsKIAl9CiAKQEAgLTE3OTksNyArMTgxNCw3IEBACiAJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFsxXS5kZXNjOwogCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSB7CiAJCWVycigiJXM6IGludGVyZmFjZSAlZC4gaGFzIG5vbi1JU08gZW5kcG9pbnQhIiwgX19GVU5DVElPTl9fLCBpZm51bSk7Ci0JCWVycigiJXM6IEVuZHBvaW50IGF0dHJpYnVyZXMgJWQiLCBfX0ZVTkNUSU9OX18sIGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMpOworCQllcnIoIiVzOiBFbmRwb2ludCBhdHRyaWJ1dGVzICVkIiwgX19GVU5DVElPTl9fLCBlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKSB7CkBAIC0xODI2LDYgKzE4NDEsMjggQEAKIAogCWRvd24oJnVzYnZpc2lvbi0+bG9jayk7CiAKKwkvKiBjb21wdXRlIGFsdGVybmF0ZSBtYXggcGFja2V0IHNpemVzICovCisJdWlmID0gZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXTsKKworCXVzYnZpc2lvbi0+bnVtX2FsdD11aWYtPm51bV9hbHRzZXR0aW5nOworCVBERUJVRyhEQkdfUFJPQkUsICJBbHRlcm5hdGUgc2V0dGluZ3M6ICVpIix1c2J2aXNpb24tPm51bV9hbHQpOworCXVzYnZpc2lvbi0+YWx0X21heF9wa3Rfc2l6ZSA9IGttYWxsb2MoMzIqCisJCQkJCSAgICAgIHVzYnZpc2lvbi0+bnVtX2FsdCxHRlBfS0VSTkVMKTsKKwlpZiAodXNidmlzaW9uLT5hbHRfbWF4X3BrdF9zaXplID09IE5VTEwpIHsKKwkJZXJyKCJ1c2J2aXNpb246IG91dCBvZiBtZW1vcnkhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IHVzYnZpc2lvbi0+bnVtX2FsdCA7IGkrKykgeworCQl1MTYgdG1wID0gbGUxNl90b19jcHUodWlmLT5hbHRzZXR0aW5nW2ldLmVuZHBvaW50WzFdLmRlc2MuCisJCQkJICAgICAgd01heFBhY2tldFNpemUpOworCQl1c2J2aXNpb24tPmFsdF9tYXhfcGt0X3NpemVbaV0gPQorCQkJKHRtcCAmIDB4MDdmZikgKiAoKCh0bXAgJiAweDE4MDApID4+IDExKSArIDEpOworCQlQREVCVUcoREJHX1BST0JFLCAiQWx0ZXJuYXRlIHNldHRpbmcgJWksIG1heCBzaXplPSAlaSIsaSwKKwkJICAgICAgIHVzYnZpc2lvbi0+YWx0X21heF9wa3Rfc2l6ZVtpXSk7CisJfQorCisKIAl1c2J2aXNpb24tPm5yID0gdXNidmlzaW9uX25yKys7CiAKIAl1c2J2aXNpb24tPmhhdmVfdHVuZXIgPSB1c2J2aXNpb25fZGV2aWNlX2RhdGFbbW9kZWxdLlR1bmVyOwpAQCAtMTgzOCw4ICsxODc1LDcgQEAKIAl1c2J2aXNpb24tPkRldk1vZGVsID0gbW9kZWw7CiAJdXNidmlzaW9uLT5yZW1vdmVfcGVuZGluZyA9IDA7CiAJdXNidmlzaW9uLT5pZmFjZSA9IGlmbnVtOwotCXVzYnZpc2lvbi0+aWZhY2VBbHRJbmFjdGl2ZSA9IDA7Ci0JdXNidmlzaW9uLT5pZmFjZUFsdEFjdGl2ZSA9IDE7CisJdXNidmlzaW9uLT5pZmFjZUFsdCA9IDA7CiAJdXNidmlzaW9uLT52aWRlb19lbmRwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CiAJdXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSA9IDA7CiAJdXNidmlzaW9uLT51c2JfYmFuZHdpZHRoID0gMDsKQEAgLTE4OTUsNyArMTkzMSw3IEBACiAJdXAoJnVzYnZpc2lvbi0+bG9jayk7CiAKIAlpZiAodXNidmlzaW9uLT51c2VyKSB7Ci0JCWluZm8oIiVzOiBJbiB1c2UsIGRpc2Nvbm5lY3QgcGVuZGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbiB1c2UsIGRpc2Nvbm5lY3QgcGVuZGluZ1xuIiwgX19GVU5DVElPTl9fKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1c2J2aXNpb24tPndhaXRfZnJhbWUpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVzYnZpc2lvbi0+d2FpdF9zdHJlYW0pOwogCX0KQEAgLTIwNjEsNyArMjA5Nyw3IEBACiAJZXJyQ29kZSA9IHVzYl9yZWdpc3RlcigmdXNidmlzaW9uX2RyaXZlcik7CiAKIAlpZiAoZXJyQ29kZSA9PSAwKSB7Ci0JCWluZm8oRFJJVkVSX0RFU0MgIiA6ICIgVVNCVklTSU9OX1ZFUlNJT05fU1RSSU5HKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiIDogIiBVU0JWSVNJT05fVkVSU0lPTl9TVFJJTkcgIlxuIik7CiAJCVBERUJVRyhEQkdfUFJPQkUsICJzdWNjZXNzIik7CiAJfQogCXJldHVybiBlcnJDb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24uaAppbmRleCBlMmJjYWJhLi5hZDZhZmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24uaApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KQEAgLTM5Niw4ICszOTcsMTEgQEAKIAogCS8qIERldmljZSBzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCS8qIHVzYiB0cmFuc2ZlciAqLworCWludCBudW1fYWx0OwkJLyogTnVtYmVyIG9mIGFsdGVybmF0aXZlIHNldHRpbmdzICovCisJdW5zaWduZWQgaW50ICphbHRfbWF4X3BrdF9zaXplOwkvKiBhcnJheSBvZiB3TWF4UGFja2V0U2l6ZSAqLwogCXVuc2lnbmVkIGNoYXIgaWZhY2U7CQkJCQkJLyogVmlkZW8gaW50ZXJmYWNlIG51bWJlciAqLwotCXVuc2lnbmVkIGNoYXIgaWZhY2VBbHRBY3RpdmUsIGlmYWNlQWx0SW5hY3RpdmU7CQkJLyogQWx0IHNldHRpbmdzICovCisJdW5zaWduZWQgY2hhciBpZmFjZUFsdDsJCQkvKiBBbHQgc2V0dGluZ3MgKi8KIAl1bnNpZ25lZCBjaGFyIFZpbl9SZWcyX1ByZXNldDsKIAlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CiAJc3RydWN0IHRpbWVyX2xpc3QgcG93ZXJPZmZUaW1lcjsKQEAgLTQyMSw2ICs0MjUsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfc3RyZWFtOwkJCQkJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KIAlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpjdXJGcmFtZTsJCQkJLy8gcG9pbnRlciB0byBjdXJyZW50IGZyYW1lLCBzZXQgYnkgdXNidmlzaW9uX2ZpbmRfaGVhZGVyCiAJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSBmcmFtZVtVU0JWSVNJT05fTlVNRlJBTUVTXTsJCS8vIGZyYW1lIGJ1ZmZlcgorCWludCBudW1fZnJhbWVzOwkJCQkJCQkvLyBudW1iZXIgb2YgZnJhbWVzIGFsbG9jYXRlZAogCXN0cnVjdCB1c2J2aXNpb25fc2J1ZiBzYnVmW1VTQlZJU0lPTl9OVU1TQlVGXTsJCQkvLyBTIGJ1ZmZlcmluZwogCXZvbGF0aWxlIGludCByZW1vdmVfcGVuZGluZzsJCQkJCS8qIElmIHNldCB0aGVuIGFib3V0IHRvIGV4aXQgKi8KIApAQCAtNDg2LDEyICs0OTEsMTEgQEAKIHZvaWQgY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZyk7CiAKIC8qIGRlZmluZWQgaW4gdXNidmlzaW9uLWNvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLXZvaWQgdXNidmlzaW9uX3J2ZnJlZSh2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBpbnQgdXNidmlzaW9uX3JlYWRfcmVnKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIHVuc2lnbmVkIGNoYXIgcmVnKTsKIGludCB1c2J2aXNpb25fd3JpdGVfcmVnKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIHVuc2lnbmVkIGNoYXIgcmVnLAogCQkJdW5zaWduZWQgY2hhciB2YWx1ZSk7CiAKLWludCB1c2J2aXNpb25fZnJhbWVzX2FsbG9jKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOworaW50IHVzYnZpc2lvbl9mcmFtZXNfYWxsb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgaW50IG51bWJlcl9vZl9mcmFtZXMpOwogdm9pZCB1c2J2aXNpb25fZnJhbWVzX2ZyZWUoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CiBpbnQgdXNidmlzaW9uX3NjcmF0Y2hfYWxsb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CiB2b2lkIHVzYnZpc2lvbl9zY3JhdGNoX2ZyZWUoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CkBAIC01MDIsNiArNTA2LDcgQEAKIGludCB1c2J2aXNpb25faW5pdF9pc29jKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwogaW50IHVzYnZpc2lvbl9yZXN0YXJ0X2lzb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CiB2b2lkIHVzYnZpc2lvbl9zdG9wX2lzb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CitpbnQgdXNidmlzaW9uX3NldF9hbHRlcm5hdGUoc3RydWN0IHVzYl91c2J2aXNpb24gKmRldik7CiAKIGludCB1c2J2aXNpb25fc2V0X2F1ZGlvKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCBBdWRpb0NoYW5uZWwpOwogaW50IHVzYnZpc2lvbl9hdWRpb19vZmYoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKaW5kZXggOGExM2U1OS4uZDJjMWFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwpAQCAtMTEsNyArMTEsNyBAQAogICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqIEF1dGhvcjoJQmlsbCBEaXJrcyA8YmRpcmtzQHBhY2JlbGwubmV0PgorICogQXV0aG9yOglCaWxsIERpcmtzIDxiaWxsQHRoZWRpcmtzLm9yZz4KICAqCQlldCBhbC4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwppbmRleCBiOGVlMzdkLi5kZGZkODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCkBAIC0xMiw3ICsxMiw3IEBACiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogQXV0aG9yOglCaWxsIERpcmtzIDxiZGlya3NAcGFjYmVsbC5uZXQ+CisgKiBBdXRob3I6CUJpbGwgRGlya3MgPGJpbGxAdGhlZGlya3Mub3JnPgogICoJCWJhc2VkIG9uIGNvZGUgYnkgQWxhbiBDb3gsIDxhbGFuQGN5bXJ1Lm5ldD4KICAqCiAgKi8KQEAgLTI3MSwxMSArMjcxLDYgQEAKIAlbVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVF0gID0gInNsaWNlYy12Ymktb3V0IiwKIH07CiAKLXN0YXRpYyBjaGFyICp2NGwyX21lbW9yeV9uYW1lc1tdID0gewotCVtWNEwyX01FTU9SWV9NTUFQXSAgICA9ICJtbWFwIiwKLQlbVjRMMl9NRU1PUllfVVNFUlBUUl0gPSAidXNlcnB0ciIsCi0JW1Y0TDJfTUVNT1JZX09WRVJMQVldID0gIm92ZXJsYXkiLAotfTsKIAogI2RlZmluZSBwcnRfbmFtZXMoYSxhcnIpICgoKGEpPj0wKSYmKChhKTxBUlJBWV9TSVpFKGFycikpKT9hcnJbYV06InVua25vd24iCiAKQEAgLTQwMCw5ICszOTUsMTAgQEAKIAlbX0lPQ19OUihUVU5FUl9TRVRfU1RBTkRCWSldICAgICAgICAgICA9ICJUVU5FUl9TRVRfU1RBTkRCWSIsCiAJW19JT0NfTlIoVERBOTg4N19TRVRfQ09ORklHKV0gICAgICAgICAgPSAiVERBOTg4N19TRVRfQ09ORklHIiwKIAorCVtfSU9DX05SKFZJRElPQ19EQkdfU19SRUdJU1RFUildICAgICAgID0gIlZJRElPQ19EQkdfU19SRUdJU1RFUiIsCisJW19JT0NfTlIoVklESU9DX0RCR19HX1JFR0lTVEVSKV0gICAgICAgPSAiVklESU9DX0RCR19HX1JFR0lTVEVSIiwKKwogCVtfSU9DX05SKFZJRElPQ19JTlRfU19UVU5FUl9NT0RFKV0gICAgID0gIlZJRElPQ19JTlRfU19UVU5FUl9NT0RFIiwKLQlbX0lPQ19OUihWSURJT0NfSU5UX1NfUkVHSVNURVIpXSAgICAgICA9ICJWSURJT0NfSU5UX1NfUkVHSVNURVIiLAotCVtfSU9DX05SKFZJRElPQ19JTlRfR19SRUdJU1RFUildICAgICAgID0gIlZJRElPQ19JTlRfR19SRUdJU1RFUiIsCiAJW19JT0NfTlIoVklESU9DX0lOVF9SRVNFVCldICAgICAgICAgICAgPSAiVklESU9DX0lOVF9SRVNFVCIsCiAJW19JT0NfTlIoVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRKV0gPSAiVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRIiwKIAlbX0lPQ19OUihWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSldICA9ICJWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSIsCkBAIC00MTksMTQgKzQxNSw2IEBACiB9OwogI2RlZmluZSBWNEwyX0lOVF9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2ludF9pb2N0bHMpCiAKLXN0YXRpYyB2b2lkIHY0bF9wcmludF9waXhfZm10IChjaGFyICpzLCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpmbXQpCi17Ci0JcHJpbnRrICgiJXM6IHdpZHRoPSVkLCBoZWlnaHQ9JWQsIGZvcm1hdD0lZCwgZmllbGQ9JXMsICIKLQkJImJ5dGVzcGVybGluZT0lZCBzaXplaW1hZ2U9JWQsIGNvbG9yc3BhY2U9JWRcbiIsIHMsCi0JCWZtdC0+d2lkdGgsZm10LT5oZWlnaHQsZm10LT5waXhlbGZvcm1hdCwKLQkJcHJ0X25hbWVzKGZtdC0+ZmllbGQsdjRsMl9maWVsZF9uYW1lcyksCi0JCWZtdC0+Ynl0ZXNwZXJsaW5lLGZtdC0+c2l6ZWltYWdlLGZtdC0+Y29sb3JzcGFjZSk7Ci19OwogCiAvKiBDb21tb24gaW9jdGwgZGVidWcgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkKICAgIGV4dGVybmFsIGlvY3RsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgaW50ZXJuYWwgVjRMIGlvY3RsICovCkBAIC00NjYsNTc2ICs0NTQsNiBAQAogCX0KIH0KIAotLyogQ29tbW9uIGlvY3RsIGRlYnVnIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5Ci0gICBleHRlcm5hbCBpb2N0bCBtZXNzYWdlcyBhcyB3ZWxsIGFzIGludGVybmFsIFY0TCBpb2N0bCBhbmQgaXRzCi0gICBhcmd1bWVudHMgKi8KLXZvaWQgdjRsX3ByaW50a19pb2N0bF9hcmcoY2hhciAqcyx1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JcHJpbnRrKHMpOwotCXByaW50aygiOiAiKTsKLQl2NGxfcHJpbnRrX2lvY3RsKGNtZCk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19JTlRfR19DSElQX0lERU5UOgotCXsKLQkJZW51bSB2NGwyX2NoaXBfaWRlbnQgICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IGNoaXAgaWRlbnQ9JWRcbiIsIHMsICpwKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0dfUFJJT1JJVFk6Ci0JY2FzZSBWSURJT0NfU19QUklPUklUWToKLQl7Ci0JCWVudW0gdjRsMl9wcmlvcml0eSAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBwcmlvcml0eT0lZFxuIiwgcywgKnApOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfSU5UX1NfVFVORVJfTU9ERToKLQl7Ci0JCWVudW0gdjRsMl90dW5lcl90eXBlICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IHR1bmVyIHR5cGU9JWRcbiIsIHMsICpwKTsKLQkJYnJlYWs7Ci0JfQotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWNhc2UgREVDT0RFUl9TRVRfVkJJX0JZUEFTUzoKLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCWNhc2UgREVDT0RFUl9TRVRfR1BJTzoKLQljYXNlIERFQ09ERVJfU0VUX05PUk06Ci0JY2FzZSBWSURJT0NDQVBUVVJFOgotCWNhc2UgVklESU9DU1lOQzoKLQljYXNlIFZJRElPQ1NXUklURU1PREU6Ci0jZW5kaWYKLQljYXNlIFRVTkVSX1NFVF9UWVBFX0FERFI6Ci0JY2FzZSBUVU5FUl9TRVRfU1RBTkRCWToKLQljYXNlIFREQTk4ODdfU0VUX0NPTkZJRzoKLSNpZmRlZiBfX09MRF9WSURJT0NfCi0JY2FzZSBWSURJT0NfT1ZFUkxBWV9PTEQ6Ci0jZW5kaWYKLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JY2FzZSBWSURJT0NfR19PVVRQVVQ6Ci0JY2FzZSBWSURJT0NfU19PVVRQVVQ6Ci0JY2FzZSBWSURJT0NfU1RSRUFNT046Ci0JY2FzZSBWSURJT0NfR19JTlBVVDoKLQljYXNlIFZJRElPQ19PVkVSTEFZOgotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JewotCQlpbnQgKnA9YXJnOwotCQlwcmludGsgKCIlczogdmFsdWU9JWRcbiIsIHMsICpwKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0dfQVVESU86Ci0JY2FzZSBWSURJT0NfU19BVURJTzoKLQljYXNlIFZJRElPQ19FTlVNQVVESU86Ci0jaWZkZWYgX19PTERfVklESU9DXwotCWNhc2UgVklESU9DX0dfQVVESU9fT0xEOgotI2VuZGlmCi0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqcD1hcmc7Ci0KLQkJcHJpbnRrICgiJXM6IGluZGV4PSVkLCBuYW1lPSVzLCBjYXBhYmlsaXR5PSVkLCBtb2RlPSVkXG4iLAotCQkJcyxwLT5pbmRleCwgcC0+bmFtZSxwLT5jYXBhYmlsaXR5LCBwLT5tb2RlKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0dfQVVET1VUOgotCWNhc2UgVklESU9DX1NfQVVET1VUOgotCWNhc2UgVklESU9DX0VOVU1BVURPVVQ6Ci0jaWZkZWYgX19PTERfVklESU9DXwotCWNhc2UgVklESU9DX0dfQVVET1VUX09MRDoKLSNlbmRpZgotCXsKLQkJc3RydWN0IHY0bDJfYXVkaW9vdXQgKnA9YXJnOwotCQlwcmludGsgKCIlczogaW5kZXg9JWQsIG5hbWU9JXMsIGNhcGFiaWxpdHk9JWQsIG1vZGU9JWRcbiIsIHMsCi0JCQkJcC0+aW5kZXgsIHAtPm5hbWUsIHAtPmNhcGFiaWxpdHkscC0+bW9kZSk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19RQlVGOgotCWNhc2UgVklESU9DX0RRQlVGOgotCWNhc2UgVklESU9DX1FVRVJZQlVGOgotCXsKLQkJc3RydWN0IHY0bDJfYnVmZmVyICpwPWFyZzsKLQkJc3RydWN0IHY0bDJfdGltZWNvZGUgKnRjPSZwLT50aW1lY29kZTsKLQkJcHJpbnRrICgiJXM6ICUwMmxkOiUwMmQ6JTAyZC4lMDhsZCBpbmRleD0lZCwgdHlwZT0lcywgIgotCQkJImJ5dGVzdXNlZD0lZCwgZmxhZ3M9MHglMDh4LCAiCi0JCQkiZmllbGQ9JTBkLCBzZXF1ZW5jZT0lZCwgbWVtb3J5PSVzLCBvZmZzZXQvdXNlcnB0cj0weCUwOGx4XG4iLAotCQkJCXMsCi0JCQkJKHAtPnRpbWVzdGFtcC50dl9zZWMvMzYwMCksCi0JCQkJKGludCkocC0+dGltZXN0YW1wLnR2X3NlYy82MCklNjAsCi0JCQkJKGludCkocC0+dGltZXN0YW1wLnR2X3NlYyU2MCksCi0JCQkJcC0+dGltZXN0YW1wLnR2X3VzZWMsCi0JCQkJcC0+aW5kZXgsCi0JCQkJcHJ0X25hbWVzKHAtPnR5cGUsdjRsMl90eXBlX25hbWVzKSwKLQkJCQlwLT5ieXRlc3VzZWQscC0+ZmxhZ3MsCi0JCQkJcC0+ZmllbGQscC0+c2VxdWVuY2UsCi0JCQkJcHJ0X25hbWVzKHAtPm1lbW9yeSx2NGwyX21lbW9yeV9uYW1lcyksCi0JCQkJcC0+bS51c2VycHRyKTsKLQkJcHJpbnRrICgiJXM6IHRpbWVjb2RlPSAlMDJkOiUwMmQ6JTAyZCB0eXBlPSVkLCAiCi0JCQkiZmxhZ3M9MHglMDh4LCBmcmFtZXM9JWQsIHVzZXJiaXRzPTB4JTA4eFxuIiwKLQkJCQlzLHRjLT5ob3Vycyx0Yy0+bWludXRlcyx0Yy0+c2Vjb25kcywKLQkJCQl0Yy0+dHlwZSwgdGMtPmZsYWdzLCB0Yy0+ZnJhbWVzLCAqKF9fdTMyICopIHRjLT51c2VyYml0cyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19RVUVSWUNBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnA9YXJnOwotCQlwcmludGsgKCIlczogZHJpdmVyPSVzLCBjYXJkPSVzLCBidXM9JXMsIHZlcnNpb249MHglMDh4LCAiCi0JCQkiY2FwYWJpbGl0aWVzPTB4JTA4eFxuIiwgcywKLQkJCQlwLT5kcml2ZXIscC0+Y2FyZCxwLT5idXNfaW5mbywKLQkJCQlwLT52ZXJzaW9uLAotCQkJCXAtPmNhcGFiaWxpdGllcyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JY2FzZSBWSURJT0NfU19DVFJMOgotI2lmZGVmIF9fT0xEX1ZJRElPQ18KLQljYXNlIFZJRElPQ19TX0NUUkxfT0xEOgotI2VuZGlmCi0JewotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IGlkPSVkLCB2YWx1ZT0lZFxuIiwgcywgcC0+aWQsIHAtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgotCWNhc2UgVklESU9DX1NfRVhUX0NUUkxTOgotCWNhc2UgVklESU9DX1RSWV9FWFRfQ1RSTFM6Ci0JewotCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKnAgPSBhcmc7Ci0JCWludCBpOwotCi0JCXByaW50aygiJXM6IGN0cmxfY2xhc3M9JWQsIGNvdW50PSVkXG4iLCBzLCBwLT5jdHJsX2NsYXNzLCBwLT5jb3VudCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBwLT5jb3VudDsgaSsrKSB7Ci0JCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqYyA9ICZwLT5jb250cm9sc1tpXTsKLQkJCWlmIChjbWQgPT0gVklESU9DX0dfRVhUX0NUUkxTKQotCQkJCXByaW50aygiJXM6IGlkPSVkXG4iLCBzLCBjLT5pZCk7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKCIlczogaWQ9JWQsIHZhbHVlPSVkXG4iLCBzLCBjLT5pZCwgYy0+dmFsdWUpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19HX0NST1A6Ci0JY2FzZSBWSURJT0NfU19DUk9QOgotCXsKLQkJc3RydWN0IHY0bDJfY3JvcCAqcD1hcmc7Ci0JCS8qRklYTUU6IFNob3VsZCBhbHNvIHNob3cgcmVjdCBzdHJ1Y3RzICovCi0JCXByaW50ayAoIiVzOiB0eXBlPSVkXG4iLCBzLCBwLT50eXBlKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0NST1BDQVA6Ci0jaWZkZWYgX19PTERfVklESU9DXwotCWNhc2UgVklESU9DX0NST1BDQVBfT0xEOgotI2VuZGlmCi0JewotCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpwPWFyZzsKLQkJLypGSVhNRTogU2hvdWxkIGFsc28gc2hvdyByZWN0IHN0cnVjdHMgKi8KLQkJcHJpbnRrICgiJXM6IHR5cGU9JWRcbiIsIHMsIHAtPnR5cGUpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORToKLQl7Ci0JCXN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBpc19zZWNvbmRfZmllbGQ9JWQsIHB0cj0weCUwOGx4LCBsaW5lPSVkLCAiCi0JCQkidHlwZT0lZFxuIiwgcywKLQkJCQlwLT5pc19zZWNvbmRfZmllbGQsKHVuc2lnbmVkIGxvbmcpcC0+cCxwLT5saW5lLHAtPnR5cGUpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IGluZGV4PSVkLCB0eXBlPSVkLCBmbGFncz0lZCwgZGVzY3JpcHRpb249JXMsIgotCQkJIiBwaXhlbGZvcm1hdD0lZFxuIiwgcywKLQkJCQlwLT5pbmRleCwgcC0+dHlwZSwgcC0+ZmxhZ3MscC0+ZGVzY3JpcHRpb24sCi0JCQkJcC0+cGl4ZWxmb3JtYXQpOwotCi0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQljYXNlIFZJRElPQ19TX0ZNVDoKLQljYXNlIFZJRElPQ19UUllfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IHR5cGU9JXNcbiIsIHMsCi0JCQkJcHJ0X25hbWVzKHAtPnR5cGUsdjRsMl90eXBlX25hbWVzKSk7Ci0JCXN3aXRjaCAocC0+dHlwZSkgewotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJCXY0bF9wcmludF9waXhfZm10IChzLCAmcC0+Zm10LnBpeCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWNhc2UgVklESU9DX0dfRkJVRjoKLQljYXNlIFZJRElPQ19TX0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBjYXBhYmlsaXR5PSVkLCBmbGFncz0lZCwgYmFzZT0weCUwOGx4XG4iLCBzLAotCQkJCXAtPmNhcGFiaWxpdHkscC0+ZmxhZ3MsICh1bnNpZ25lZCBsb25nKXAtPmJhc2UpOwotCQl2NGxfcHJpbnRfcGl4X2ZtdCAocywgJnAtPmZtdCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKLQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiB0dW5lcj0lZCwgdHlwZT0lZCwgZnJlcXVlbmN5PSVkXG4iLCBzLAotCQkJCXAtPnR1bmVyLHAtPnR5cGUscC0+ZnJlcXVlbmN5KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2lucHV0ICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IGluZGV4PSVkLCBuYW1lPSVzLCB0eXBlPSVkLCBhdWRpb3NldD0lZCwgIgotCQkJInR1bmVyPSVkLCBzdGQ9JUxkLCBzdGF0dXM9JWRcbiIsIHMsCi0JCQkJcC0+aW5kZXgscC0+bmFtZSxwLT50eXBlLHAtPmF1ZGlvc2V0LAotCQkJCXAtPnR1bmVyLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcC0+c3RkLAotCQkJCXAtPnN0YXR1cyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19HX0pQRUdDT01QOgotCWNhc2UgVklESU9DX1NfSlBFR0NPTVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKnA9YXJnOwotCQlwcmludGsgKCIlczogcXVhbGl0eT0lZCwgQVBQbj0lZCwgQVBQX2xlbj0lZCwgQ09NX2xlbj0lZCwiCi0JCQkiIGpwZWdfbWFya2Vycz0lZFxuIiwgcywKLQkJCQlwLT5xdWFsaXR5LHAtPkFQUG4scC0+QVBQX2xlbiwKLQkJCQlwLT5DT01fbGVuLHAtPmpwZWdfbWFya2Vycyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19HX01PRFVMQVRPUjoKLQljYXNlIFZJRElPQ19TX01PRFVMQVRPUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX21vZHVsYXRvciAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0lZCwgcmFuZ2Vsb3c9JWQsIgotCQkJIiByYW5nZWhpZ2g9JWQsIHR4c3ViY2hhbnM9JWRcbiIsIHMsCi0JCQkJcC0+aW5kZXgsIHAtPm5hbWUscC0+Y2FwYWJpbGl0eSxwLT5yYW5nZWxvdywKLQkJCQlwLT5yYW5nZWhpZ2gscC0+dHhzdWJjaGFucyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19HX01QRUdDT01QOgotCWNhc2UgVklESU9DX1NfTVBFR0NPTVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9tcGVnX2NvbXByZXNzaW9uICpwPWFyZzsKLQkJLypGSVhNRTogU2V2ZXJhbCBmaWVsZHMgbm90IHNob3duICovCi0JCXByaW50ayAoIiVzOiB0c19waWRfcG10PSVkLCB0c19waWRfYXVkaW89JWQsIHRzX3BpZF92aWRlbz0lZCwgIgotCQkJInRzX3BpZF9wY3I9JWQsIHBzX3NpemU9JWQsIGF1X3NhbXBsZV9yYXRlPSVkLCAiCi0JCQkiYXVfcGVzaWQ9JWMsIHZpX2ZyYW1lX3JhdGU9JWQsIHZpX2ZyYW1lc19wZXJfZ29wPSVkLCAiCi0JCQkidmlfYmZyYW1lc19jb3VudD0lZCwgdmlfcGVzaWQ9JWNcbiIsIHMsCi0JCQkJcC0+dHNfcGlkX3BtdCxwLT50c19waWRfYXVkaW8sIHAtPnRzX3BpZF92aWRlbywKLQkJCQlwLT50c19waWRfcGNyLCBwLT5wc19zaXplLCBwLT5hdV9zYW1wbGVfcmF0ZSwKLQkJCQlwLT5hdV9wZXNpZCwgcC0+dmlfZnJhbWVfcmF0ZSwKLQkJCQlwLT52aV9mcmFtZXNfcGVyX2dvcCwgcC0+dmlfYmZyYW1lc19jb3VudCwKLQkJCQlwLT52aV9wZXNpZCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19FTlVNT1VUUFVUOgotCXsKLQkJc3RydWN0IHY0bDJfb3V0cHV0ICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IGluZGV4PSVkLCBuYW1lPSVzLHR5cGU9JWQsIGF1ZGlvc2V0PSVkLCAiCi0JCQkibW9kdWxhdG9yPSVkLCBzdGQ9JUxkXG4iLAotCQkJCXMscC0+aW5kZXgscC0+bmFtZSxwLT50eXBlLHAtPmF1ZGlvc2V0LAotCQkJCXAtPm1vZHVsYXRvciwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXAtPnN0ZCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnA9YXJnOwotCQlwcmludGsgKCIlczogaWQ9JWQsIHR5cGU9JWQsIG5hbWU9JXMsIG1pbi9tYXg9JWQvJWQsIgotCQkJIiBzdGVwPSVkLCBkZWZhdWx0PSVkLCBmbGFncz0weCUwOHhcbiIsIHMsCi0JCQkJcC0+aWQscC0+dHlwZSxwLT5uYW1lLHAtPm1pbmltdW0scC0+bWF4aW11bSwKLQkJCQlwLT5zdGVwLHAtPmRlZmF1bHRfdmFsdWUscC0+ZmxhZ3MpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfUVVFUllNRU5VOgotCXsKLQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IGlkPSVkLCBpbmRleD0lZCwgbmFtZT0lc1xuIiwgcywKLQkJCQlwLT5pZCxwLT5pbmRleCxwLT5uYW1lKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0lOVF9HX1JFR0lTVEVSOgotCWNhc2UgVklESU9DX0lOVF9TX1JFR0lTVEVSOgotCXsKLQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnA9YXJnOwotCQlwcmludGsgKCIlczogaTJjX2lkPSVkLCByZWc9JWx1LCB2YWw9JWRcbiIsIHMsCi0JCQkJcC0+aTJjX2lkLHAtPnJlZyxwLT52YWwpOwotCi0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19SRVFCVUZTOgotCXsKLQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnA9YXJnOwotCQlwcmludGsgKCIlczogY291bnQ9JWQsIHR5cGU9JXMsIG1lbW9yeT0lc1xuIiwgcywKLQkJCQlwLT5jb3VudCwKLQkJCQlwcnRfbmFtZXMocC0+dHlwZSx2NGwyX3R5cGVfbmFtZXMpLAotCQkJCXBydF9uYW1lcyhwLT5tZW1vcnksdjRsMl9tZW1vcnlfbmFtZXMpKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6Ci0JY2FzZSBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORzoKLQljYXNlIFZJRElPQ19JTlRfR19BVURJT19ST1VUSU5HOgotCWNhc2UgVklESU9DX0lOVF9HX1ZJREVPX1JPVVRJTkc6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBpbnB1dD0weCV4LCBvdXRwdXQ9MHgleFxuIiwgcywgcC0+aW5wdXQsIHAtPm91dHB1dCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19JTlRfU19DUllTVEFMX0ZSRVE6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jcnlzdGFsX2ZyZXEgKnA9YXJnOwotCQlwcmludGsgKCIlczogZnJlcT0ldSwgZmxhZ3M9MHgleFxuIiwgcywgcC0+ZnJlcSwgcC0+ZmxhZ3MpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfR19TTElDRURfVkJJX0NBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IHNlcnZpY2Vfc2V0PSVkXG4iLCBzLAotCQkJCXAtPnNlcnZpY2Vfc2V0KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0lOVF9TX1ZCSV9EQVRBOgotCWNhc2UgVklESU9DX0lOVF9HX1ZCSV9EQVRBOgotCXsKLQkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhICAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBpZD0lZCwgZmllbGQ9JWQsIGxpbmU9JWRcbiIsIHMsCi0JCQkJcC0+aWQsIHAtPmZpZWxkLCBwLT5saW5lKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0VOVU1TVEQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBpbmRleD0lZCwgaWQ9JUxkLCBuYW1lPSVzLCBmcHM9JWQvJWQsICIKLQkJCSJmcmFtZWxpbmVzPSVkXG4iLCBzLCBwLT5pbmRleCwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXAtPmlkLCBwLT5uYW1lLAotCQkJCXAtPmZyYW1lcGVyaW9kLm51bWVyYXRvciwKLQkJCQlwLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciwKLQkJCQlwLT5mcmFtZWxpbmVzKTsKLQotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfR19QQVJNOgotCWNhc2UgVklESU9DX1NfUEFSTToKLSNpZmRlZiBfX09MRF9WSURJT0NfCi0JY2FzZSBWSURJT0NfU19QQVJNX09MRDoKLSNlbmRpZgotCXsKLQkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiB0eXBlPSVkXG4iLCBzLCBwLT50eXBlKTsKLQotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfR19UVU5FUjoKLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnA9YXJnOwotCQlwcmludGsgKCIlczogaW5kZXg9JWQsIG5hbWU9JXMsIHR5cGU9JWQsIGNhcGFiaWxpdHk9JWQsICIKLQkJCSJyYW5nZWxvdz0lZCwgcmFuZ2VoaWdoPSVkLCBzaWduYWw9JWQsIGFmYz0lZCwgIgotCQkJInJ4c3ViY2hhbnM9JWQsIGF1ZG1vZGU9JWRcbiIsIHMsCi0JCQkJcC0+aW5kZXgsIHAtPm5hbWUsIHAtPnR5cGUsCi0JCQkJcC0+Y2FwYWJpbGl0eSwgcC0+cmFuZ2Vsb3cscC0+cmFuZ2VoaWdoLAotCQkJCXAtPnJ4c3ViY2hhbnMsIHAtPmF1ZG1vZGUsIHAtPnNpZ25hbCwKLQkJCQlwLT5hZmMpOwotCQlicmVhazsKLQl9Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JY2FzZSBWSURJT0NHVkJJRk1UOgotCWNhc2UgVklESU9DU1ZCSUZNVDoKLQl7Ci0JCXN0cnVjdCB2YmlfZm9ybWF0ICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IHNhbXBsaW5nX3JhdGU9JWQsIHNhbXBsZXNfcGVyX2xpbmU9JWQsICIKLQkJCSJzYW1wbGVfZm9ybWF0PSVkLCBzdGFydD0lZC8lZCwgY291bnQ9JWQvJWQsIGZsYWdzPSVkXG4iLCBzLAotCQkJCXAtPnNhbXBsaW5nX3JhdGUscC0+c2FtcGxlc19wZXJfbGluZSwKLQkJCQlwLT5zYW1wbGVfZm9ybWF0LHAtPnN0YXJ0WzBdLHAtPnN0YXJ0WzFdLAotCQkJCXAtPmNvdW50WzBdLHAtPmNvdW50WzFdLHAtPmZsYWdzKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DR0FVRElPOgotCWNhc2UgVklESU9DU0FVRElPOgotCXsKLQkJc3RydWN0IHZpZGVvX2F1ZGlvICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IGF1ZGlvPSVkLCB2b2x1bWU9JWQsIGJhc3M9JWQsIHRyZWJsZT0lZCwgIgotCQkJImZsYWdzPSVkLCBuYW1lPSVzLCBtb2RlPSVkLCBiYWxhbmNlPSVkLCBzdGVwPSVkXG4iLAotCQkJCXMscC0+YXVkaW8scC0+dm9sdW1lLHAtPmJhc3MsIHAtPnRyZWJsZSwKLQkJCQlwLT5mbGFncyxwLT5uYW1lLHAtPm1vZGUscC0+YmFsYW5jZSxwLT5zdGVwKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DR0ZCVUY6Ci0JY2FzZSBWSURJT0NTRkJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19idWZmZXIgKnA9YXJnOwotCQlwcmludGsgKCIlczogYmFzZT0lMDhseCwgaGVpZ2h0PSVkLCB3aWR0aD0lZCwgZGVwdGg9JWQsICIKLQkJCSJieXRlc3BlcmxpbmU9JWRcbiIsIHMsCi0JCQkJKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UsIHAtPmhlaWdodCwgcC0+d2lkdGgsCi0JCQkJcC0+ZGVwdGgscC0+Ynl0ZXNwZXJsaW5lKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DR0NBUDoKLQl7Ci0JCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IG5hbWU9JXMsIHR5cGU9JWQsIGNoYW5uZWxzPSVkLCBhdWRpb3M9JWQsICIKLQkJCSJtYXh3aWR0aD0lZCwgbWF4aGVpZ2h0PSVkLCBtaW53aWR0aD0lZCwgbWluaGVpZ2h0PSVkXG4iLAotCQkJCXMscC0+bmFtZSxwLT50eXBlLHAtPmNoYW5uZWxzLHAtPmF1ZGlvcywKLQkJCQlwLT5tYXh3aWR0aCxwLT5tYXhoZWlnaHQscC0+bWlud2lkdGgsCi0JCQkJcC0+bWluaGVpZ2h0KTsKLQotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NHQ0FQVFVSRToKLQljYXNlIFZJRElPQ1NDQVBUVVJFOgotCXsKLQkJc3RydWN0IHZpZGVvX2NhcHR1cmUgKnA9YXJnOwotCQlwcmludGsgKCIlczogeD0lZCwgeT0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZCwgZGVjaW1hdGlvbj0lZCwiCi0JCQkiIGZsYWdzPSVkXG4iLCBzLAotCQkJCXAtPngsIHAtPnkscC0+d2lkdGgsIHAtPmhlaWdodCwKLQkJCQlwLT5kZWNpbWF0aW9uLHAtPmZsYWdzKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DR0NIQU46Ci0JY2FzZSBWSURJT0NTQ0hBTjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19jaGFubmVsICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IGNoYW5uZWw9JWQsIG5hbWU9JXMsIHR1bmVycz0lZCwgZmxhZ3M9JWQsICIKLQkJCSJ0eXBlPSVkLCBub3JtPSVkXG4iLCBzLAotCQkJCXAtPmNoYW5uZWwscC0+bmFtZSxwLT50dW5lcnMsCi0JCQkJcC0+ZmxhZ3MscC0+dHlwZSxwLT5ub3JtKTsKLQotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NTTUlDUk9DT0RFOgotCXsKLQkJc3RydWN0IHZpZGVvX2NvZGUgKnA9YXJnOwotCQlwcmludGsgKCIlczogbG9hZHdoYXQ9JXMsIGRhdGFzaXplPSVkXG4iLCBzLAotCQkJCXAtPmxvYWR3aGF0LHAtPmRhdGFzaXplKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBmbGFncz0lZCwgaW5wdXRzPSVkLCBvdXRwdXRzPSVkXG4iLCBzLAotCQkJCXAtPmZsYWdzLHAtPmlucHV0cyxwLT5vdXRwdXRzKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9JTklUOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBsZW49JWNcbiIsIHMsIHAtPmxlbik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ0dQTEFZSU5GTzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19pbmZvICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IGZyYW1lX2NvdW50PSVkLCBoX3NpemU9JWQsIHZfc2l6ZT0lZCwgIgotCQkJInNtcHRlX3RpbWVjb2RlPSVkLCBwaWN0dXJlX3R5cGU9JWQsICIKLQkJCSJ0ZW1wb3JhbF9yZWZlcmVuY2U9JWQsIHVzZXJfZGF0YT0lc1xuIiwgcywKLQkJCQlwLT5mcmFtZV9jb3VudCwgcC0+aF9zaXplLAotCQkJCXAtPnZfc2l6ZSwgcC0+c21wdGVfdGltZWNvZGUsCi0JCQkJcC0+cGljdHVyZV90eXBlLCBwLT50ZW1wb3JhbF9yZWZlcmVuY2UsCi0JCQkJcC0+dXNlcl9kYXRhKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DS0VZOgotCXsKLQkJc3RydWN0IHZpZGVvX2tleSAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBrZXk9JXMsIGZsYWdzPSVkXG4iLCBzLAotCQkJCXAtPmtleSwgcC0+ZmxhZ3MpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NHTUJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19tYnVmICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IHNpemU9JWQsIGZyYW1lcz0lZCwgb2Zmc2V0cz0weCUwOGx4XG4iLCBzLAotCQkJCXAtPnNpemUsCi0JCQkJcC0+ZnJhbWVzLAotCQkJCSh1bnNpZ25lZCBsb25nKXAtPm9mZnNldHMpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NNQ0FQVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19tbWFwICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IGZyYW1lPSVkLCBoZWlnaHQ9JWQsIHdpZHRoPSVkLCBmb3JtYXQ9JWRcbiIsIHMsCi0JCQkJcC0+ZnJhbWUsCi0JCQkJcC0+aGVpZ2h0LCBwLT53aWR0aCwKLQkJCQlwLT5mb3JtYXQpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NHUElDVDoKLQljYXNlIFZJRElPQ1NQSUNUOgotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwPWFyZzsKLQotCQlwcmludGsgKCIlczogYnJpZ2h0bmVzcz0lZCwgaHVlPSVkLCBjb2xvdXI9JWQsIGNvbnRyYXN0PSVkLCIKLQkJCSIgd2hpdGVuZXNzPSVkLCBkZXB0aD0lZCwgcGFsZXR0ZT0lZFxuIiwgcywKLQkJCQlwLT5icmlnaHRuZXNzLCBwLT5odWUsIHAtPmNvbG91ciwKLQkJCQlwLT5jb250cmFzdCwgcC0+d2hpdGVuZXNzLCBwLT5kZXB0aCwKLQkJCQlwLT5wYWxldHRlKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DU1BMQVlNT0RFOgotCXsKLQkJc3RydWN0IHZpZGVvX3BsYXlfbW9kZSAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiBtb2RlPSVkLCBwMT0lZCwgcDI9JWRcbiIsIHMsCi0JCQkJcC0+bW9kZSxwLT5wMSxwLT5wMik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ0dUVU5FUjoKLQljYXNlIFZJRElPQ1NUVU5FUjoKLQl7Ci0JCXN0cnVjdCB2aWRlb190dW5lciAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiB0dW5lcj0lZCwgbmFtZT0lcywgcmFuZ2Vsb3c9JWxkLCByYW5nZWhpZ2g9JWxkLCAiCi0JCQkiZmxhZ3M9JWQsIG1vZGU9JWQsIHNpZ25hbD0lZFxuIiwgcywKLQkJCQlwLT50dW5lciwgcC0+bmFtZSxwLT5yYW5nZWxvdywgcC0+cmFuZ2VoaWdoLAotCQkJCXAtPmZsYWdzLHAtPm1vZGUsIHAtPnNpZ25hbCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ0dVTklUOgotCXsKLQkJc3RydWN0IHZpZGVvX3VuaXQgKnA9YXJnOwotCQlwcmludGsgKCIlczogdmlkZW89JWQsIHZiaT0lZCwgcmFkaW89JWQsIGF1ZGlvPSVkLCAiCi0JCQkidGVsZXRleHQ9JWRcbiIsIHMsCi0JCQkJcC0+dmlkZW8scC0+dmJpLHAtPnJhZGlvLHAtPmF1ZGlvLHAtPnRlbGV0ZXh0KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DR1dJTjoKLQljYXNlIFZJRElPQ1NXSU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICpwPWFyZzsKLQkJcHJpbnRrICgiJXM6IHg9JWQsIHk9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWQsIGNocm9tYWtleT0lZCwiCi0JCQkiIGZsYWdzPSVkLCBjbGlwY291bnQ9JWRcbiIsIHMsCi0JCQkJcC0+eCwgcC0+eSxwLT53aWR0aCwgcC0+aGVpZ2h0LAotCQkJCXAtPmNocm9tYWtleSxwLT5mbGFncywKLQkJCQlwLT5jbGlwY291bnQpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NHRlJFUToKLQljYXNlIFZJRElPQ1NGUkVROgotCXsKLQkJdW5zaWduZWQgbG9uZyAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiB2YWx1ZT0lbHVcbiIsIHMsICpwKTsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6Ci0JY2FzZSBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVROgotCWNhc2UgVklESU9DX0lOVF9TX1NUQU5EQlk6Ci0JY2FzZSBWSURJT0NfSU5UX1JFU0VUOgotCXsKLQkJdTMyICpwPWFyZzsKLQotCQlwcmludGsgKCIlczogdmFsdWU9JWRcbiIsIHMsICpwKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0dfU1REOgotCWNhc2UgVklESU9DX1NfU1REOgotCWNhc2UgVklESU9DX1FVRVJZU1REOgotCXsKLQkJdjRsMl9zdGRfaWQgKnA9YXJnOwotCi0JCXByaW50ayAoIiVzOiB2YWx1ZT0lTHVcbiIsIHMsICh1bnNpZ25lZCBsb25nIGxvbmcpKnApOwotCQlicmVhazsKLQl9Ci0JfQotfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xNTQ0LDcgKzk2Miw2IEBACiBFWFBPUlRfU1lNQk9MKHY0bDJfZmllbGRfbmFtZXMpOwogRVhQT1JUX1NZTUJPTCh2NGwyX3R5cGVfbmFtZXMpOwogRVhQT1JUX1NZTUJPTCh2NGxfcHJpbnRrX2lvY3RsKTsKLUVYUE9SVF9TWU1CT0wodjRsX3ByaW50a19pb2N0bF9hcmcpOwogCiBFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9uZXh0KTsKIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2NoZWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jCmluZGV4IDY1MDRhNTguLjQ1OTc4NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYwpAQCAtMTQ4LDYgKzE0OCw4IEBACiAJZHByaW50aygxLCJpbml0IHVzZXIgWzB4JWx4KzB4JWx4ID0+ICVkIHBhZ2VzXVxuIiwKIAkJZGF0YSxzaXplLGRtYS0+bnJfcGFnZXMpOwogCisJZG1hLT52YXJlYSA9ICh2b2lkICopIGRhdGE7CisKIAlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJZXJyID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCxjdXJyZW50LT5tbSwKIAkJCSAgICAgZGF0YSAmIFBBR0VfTUFTSywgZG1hLT5ucl9wYWdlcywKQEAgLTI4NSw2ICsyODcsNyBAQAogCiAJdmZyZWUoZG1hLT52bWFsbG9jKTsKIAlkbWEtPnZtYWxsb2MgPSBOVUxMOworCWRtYS0+dmFyZWEgPSBOVUxMOwogCiAJaWYgKGRtYS0+YnVzX2FkZHIpIHsKIAkJZG1hLT5idXNfYWRkciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKaW5kZXggYTc4NmMxZi4uZGM5YjFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYwpAQCAtMTQ1Myw2ICsxNDUzLDI2IEBACiAJCXJldD12ZmQtPnZpZGlvY19sb2dfc3RhdHVzKGZpbGUsIGZoKTsKIAkJYnJlYWs7CiAJfQorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwljYXNlIFZJRElPQ19EQkdfR19SRUdJU1RFUjoKKwl7CisJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpwPWFyZzsKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0PS1FUEVSTTsKKwkJZWxzZSBpZiAodmZkLT52aWRpb2NfZ19yZWdpc3RlcikKKwkJCXJldD12ZmQtPnZpZGlvY19nX3JlZ2lzdGVyKGZpbGUsIGZoLCBwKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0RCR19TX1JFR0lTVEVSOgorCXsKKwkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnA9YXJnOworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXQ9LUVQRVJNOworCQllbHNlIGlmICh2ZmQtPnZpZGlvY19zX3JlZ2lzdGVyKQorCQkJcmV0PXZmZC0+dmlkaW9jX3NfcmVnaXN0ZXIoZmlsZSwgZmgsIHApOworCQlicmVhazsKKwl9CisjZW5kaWYKIAl9IC8qIHN3aXRjaCAqLwogCiAJaWYgKHZmZC0+ZGVidWcgJiBWNEwyX0RFQlVHX0lPQ1RMX0FSRykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwppbmRleCBjZmI2YjFmLi5mN2UxZDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwpAQCAtMTQ1LDcgKzE0NSw5IEBACiAKIAlzdHJ1Y3Qgdml2aV9mbXQgICAgICAgICpmbXQ7CiAKKyNpZmRlZiBDT05GSUdfVklWSV9TQ0FUVEVSCiAJc3RydWN0IHNnX3RvX2FkZHIgICAgICAqdG9fYWRkcjsKKyNlbmRpZgogfTsKIAogc3RydWN0IHZpdmlfZG1hcXVldWUgewpAQCAtMjMwLDYgKzIzMiw3IEBACiAjZGVmaW5lIFRTVEFNUF9NQVhfWSBUU1RBTVBfTUlOX1krMTUKICNkZWZpbmUgVFNUQU1QX01JTl9YIDY0CiAKKyNpZmRlZiBDT05GSUdfVklWSV9TQ0FUVEVSCiBzdGF0aWMgdm9pZCBwcmVwX3RvX2FkZHIoc3RydWN0IHNnX3RvX2FkZHIgdG9fYWRkcltdLAogCQkJIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQogewpAQCAtMjYyLDE0ICsyNjUsMjQgQEAKIAogCXJldHVybiAocDEpOwogfQorI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVklWSV9TQ0FUVEVSCiBzdGF0aWMgdm9pZCBnZW5fbGluZShzdHJ1Y3Qgc2dfdG9fYWRkciB0b19hZGRyW10saW50IGluaXBvcyxpbnQgcGFnZXMsaW50IHdtYXgsCiAJCSAgICAgaW50IGhtYXgsIGludCBsaW5lLCBjaGFyICp0aW1lc3RyKQorI2Vsc2UKK3N0YXRpYyB2b2lkIGdlbl9saW5lKGNoYXIgKmJhc2VwLGludCBpbmlwb3MsaW50IHdtYXgsCisJCSAgICAgaW50IGhtYXgsIGludCBsaW5lLCBjaGFyICp0aW1lc3RyKQorI2VuZGlmCiB7Ci0JaW50ICB3LGksaixwb3M9aW5pcG9zLHBncG9zLG9sZHBnLHk7Ci0JY2hhciAqcCwqcywqYmFzZXA7Ci0Jc3RydWN0IHBhZ2UgKnBnOworCWludCAgdyxpLGoscG9zPWluaXBvcyx5OworCWNoYXIgKnAsKnM7CiAJdTggICBjaHIscixnLGIsY29sb3I7CisjaWZkZWYgQ09ORklHX1ZJVklfU0NBVFRFUgorCWludCBwZ3BvcyxvbGRwZzsKKwljaGFyICpiYXNlcDsKKwlzdHJ1Y3QgcGFnZSAqcGc7CisKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CiAKQEAgLTI4MCw2ICsyOTMsNyBAQAogCXBnPXBmbl90b19wYWdlKHNnX2RtYV9hZGRyZXNzKHRvX2FkZHJbb2xkcGddLnNnKSA+PiBQQUdFX1NISUZUKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3BpbmxvY2ssZmxhZ3MpOwogCWJhc2VwID0ga21hcF9hdG9taWMocGcsIEtNX0JPVU5DRV9SRUFEKSt0b19hZGRyW29sZHBnXS5zZy0+b2Zmc2V0OworI2VuZGlmCiAKIAkvKiBXZSB3aWxsIGp1c3QgZHVwbGljYXRlIHRoZSBzZWNvbmQgcGl4ZWwgYXQgdGhlIHBhY2tldCAqLwogCXdtYXgvPTI7CkBAIC0yOTEsNiArMzA1LDcgQEAKIAkJYj1iYXJzW3cqNy93bWF4XVsyXTsKIAogCQlmb3IgKGNvbG9yPTA7Y29sb3I8NDtjb2xvcisrKSB7CisjaWZkZWYgQ09ORklHX1ZJVklfU0NBVFRFUgogCQkJcGdwb3M9Z2V0X2FkZHJfcG9zKHBvcyxwYWdlcyx0b19hZGRyKTsKIAkJCWlmIChwZ3BvcyE9b2xkcGcpIHsKIAkJCQlwZz1wZm5fdG9fcGFnZShzZ19kbWFfYWRkcmVzcyh0b19hZGRyW3BncG9zXS5zZykgPj4gUEFHRV9TSElGVCk7CkBAIC0yOTksNiArMzE0LDkgQEAKIAkJCQlvbGRwZz1wZ3BvczsKIAkJCX0KIAkJCXA9YmFzZXArcG9zLXRvX2FkZHJbcGdwb3NdLnBvczsKKyNlbHNlCisJCQlwPWJhc2VwK3BvczsKKyNlbmRpZgogCiAJCQlzd2l0Y2ggKGNvbG9yKSB7CiAJCQkJY2FzZSAwOgpAQCAtMzQzLDYgKzM2MSw3IEBACiAKIAkJCQlwb3M9aW5pcG9zK2oqMjsKIAkJCQlmb3IgKGNvbG9yPTA7Y29sb3I8NDtjb2xvcisrKSB7CisjaWZkZWYgQ09ORklHX1ZJVklfU0NBVFRFUgogCQkJCQlwZ3Bvcz1nZXRfYWRkcl9wb3MocG9zLHBhZ2VzLHRvX2FkZHIpOwogCQkJCQlpZiAocGdwb3MhPW9sZHBnKSB7CiAJCQkJCQlwZz1wZm5fdG9fcGFnZShzZ19kbWFfYWRkcmVzcygKQEAgLTM1Niw2ICszNzUsOSBAQAogCQkJCQkJb2xkcGc9cGdwb3M7CiAJCQkJCX0KIAkJCQkJcD1iYXNlcCtwb3MtdG9fYWRkcltwZ3Bvc10ucG9zOworI2Vsc2UKKwkJCQkJcD1iYXNlcCtwb3M7CisjZW5kaWYKIAogCQkJCQl5PVRPX1kocixnLGIpOwogCkBAIC0zODAsMTkgKzQwMiwyNyBAQAogCiAKIGVuZDoKKyNpZmRlZiBDT05GSUdfVklWSV9TQ0FUVEVSCiAJa3VubWFwX2F0b21pYyhiYXNlcCwgS01fQk9VTkNFX1JFQUQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwaW5sb2NrLGZsYWdzKTsKLQorI2Vsc2UKKwlyZXR1cm47CisjZW5kaWYKIH0KIHN0YXRpYyB2b2lkIHZpdmlfZmlsbGJ1ZmYoc3RydWN0IHZpdmlfZGV2ICpkZXYsc3RydWN0IHZpdmlfYnVmZmVyICpidWYpCiB7CiAJaW50IGgscG9zPTA7CiAJaW50IGhtYXggID0gYnVmLT52Yi5oZWlnaHQ7CiAJaW50IHdtYXggID0gYnVmLT52Yi53aWR0aDsKLQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2Yj0mYnVmLT52YjsKLQlzdHJ1Y3Qgc2dfdG9fYWRkciAqdG9fYWRkcj1idWYtPnRvX2FkZHI7CiAJc3RydWN0IHRpbWV2YWwgdHM7CisjaWZkZWYgQ09ORklHX1ZJVklfU0NBVFRFUgorCXN0cnVjdCBzZ190b19hZGRyICp0b19hZGRyPWJ1Zi0+dG9fYWRkcjsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2Yj0mYnVmLT52YjsKKyNlbHNlCisJY2hhciAqdG1wYnVmOworI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVklWSV9TQ0FUVEVSCiAJLyogVGVzdCBpZiBETUEgbWFwcGluZyBpcyByZWFkeSAqLwogCWlmICghc2dfZG1hX2FkZHJlc3MoJnZiLT5kbWEuc2dsaXN0WzBdKSkKIAkJcmV0dXJuOwpAQCAtNDAxLDkgKzQzMSwyOCBAQAogCiAJLyogQ2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIG1lbW9yeSAqLwogCUJVR19PTihidWYtPnZiLmRtYS5ucl9wYWdlcyA8PCBQQUdFX1NISUZUIDwgKGJ1Zi0+dmIud2lkdGgqYnVmLT52Yi5oZWlnaHQpKjIpOworI2Vsc2UKKwlpZiAoYnVmLT52Yi5kbWEudmFyZWEpIHsKKwkJdG1wYnVmPWttYWxsb2MgKHdtYXgqMiwgR0ZQX0tFUk5FTCk7CisJfSBlbHNlIHsKKwkJdG1wYnVmPWJ1Zi0+dmIuZG1hLnZtYWxsb2M7CisJfQorCisjZW5kaWYKIAogCWZvciAoaD0wO2g8aG1heDtoKyspIHsKKyNpZmRlZiBDT05GSUdfVklWSV9TQ0FUVEVSCiAJCWdlbl9saW5lKHRvX2FkZHIscG9zLHZiLT5kbWEubnJfcGFnZXMsd21heCxobWF4LGgsZGV2LT50aW1lc3RyKTsKKyNlbHNlCisJCWlmIChidWYtPnZiLmRtYS52YXJlYSkgeworCQkJZ2VuX2xpbmUodG1wYnVmLDAsd21heCxobWF4LGgsZGV2LT50aW1lc3RyKTsKKwkJCS8qIEZJWE1FOiByZXBsYWNpbmcgdG8gX19jb3B5X3RvX3VzZXIgKi8KKwkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLT52Yi5kbWEudmFyZWErcG9zLHRtcGJ1Zix3bWF4KjIpIT0wKQorCQkJCWRwcmludGsoMiwidml2aWZpbGwgY29weV90b191c2VyIGZhaWxlZC5cbiIpOworCQl9IGVsc2UgeworCQkJZ2VuX2xpbmUodG1wYnVmLHBvcyx3bWF4LGhtYXgsaCxkZXYtPnRpbWVzdHIpOworCQl9CisjZW5kaWYKIAkJcG9zICs9IHdtYXgqMjsKIAl9CiAKQEAgLTQyOSw3ICs0NzgsNyBAQAogCQkJZGV2LT5oLGRldi0+bSxkZXYtPnMsKGRldi0+dXMrNTAwKS8xMDAwKTsKIAogCWRwcmludGsoMiwidml2aWZpbGwgYXQgJXM6IEJ1ZmZlciAweCUwOGx4IHNpemU9ICVkXG4iLGRldi0+dGltZXN0ciwKLQkJCSh1bnNpZ25lZCBsb25nKWJ1Zi0+dmIuZG1hLnZtYWxsb2MscG9zKTsKKwkJCSh1bnNpZ25lZCBsb25nKWJ1Zi0+dmIuZG1hLnZhcmVhLHBvcyk7CiAKIAkvKiBBZHZpY2UgdGhhdCBidWZmZXIgd2FzIGZpbGxlZCAqLwogCWJ1Zi0+dmIuc3RhdGUgPSBTVEFURV9ET05FOwpAQCAtNDcxLDExICs1MjAsMTIgQEAKIAogCQkvKiBGaWxsIGJ1ZmZlciAqLwogCQl2aXZpX2ZpbGxidWZmKGRldixidWYpOwotCX0KLQlpZiAobGlzdF9lbXB0eSgmZG1hX3EtPmFjdGl2ZSkpIHsKLQkJZGVsX3RpbWVyKCZkbWFfcS0+dGltZW91dCk7Ci0JfSBlbHNlIHsKLQkJbW9kX3RpbWVyKCZkbWFfcS0+dGltZW91dCwgamlmZmllcytCVUZGRVJfVElNRU9VVCk7CisKKwkJaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKSB7CisJCQlkZWxfdGltZXIoJmRtYV9xLT50aW1lb3V0KTsKKwkJfSBlbHNlIHsKKwkJCW1vZF90aW1lcigmZG1hX3EtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOworCQl9CiAJfQogCWlmIChiYyAhPSAxKQogCQlkcHJpbnRrKDEsIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIixfX0ZVTkNUSU9OX18sYmMpOwpAQCAtNTIyLDYgKzU3Miw4IEBACiAKIAlkcHJpbnRrKDEsInRocmVhZCBzdGFydGVkXG4iKTsKIAorCW1vZF90aW1lcigmZG1hX3EtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOworCiAJZm9yICg7OykgewogCQl2aXZpX3NsZWVwKGRtYV9xKTsKIApAQCAtNTM4LDcgKzU5MCw2IEBACiAJZG1hX3EtPmluaV9qaWZmaWVzPWppZmZpZXM7CiAKIAlkcHJpbnRrKDEsIiVzXG4iLF9fRlVOQ1RJT05fXyk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZG1hX3EtPndxKTsKIAogCWRtYV9xLT5rdGhyZWFkID0ga3RocmVhZF9ydW4odml2aV90aHJlYWQsIGRtYV9xLCAidml2aSIpOwogCkBAIC01NDYsNiArNTk3LDkgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aXZpOiBrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIoZG1hX3EtPmt0aHJlYWQpOwogCX0KKwkvKiBXYWtlcyB0aHJlYWQgKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRtYV9xLT53cSk7CisKIAlkcHJpbnRrKDEsInJldHVybmluZyBmcm9tICVzXG4iLF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuIDA7CiB9CkBAIC02NjMsOSArNzE3LDExIEBACiAJaWYgKGluX2ludGVycnVwdCgpKQogCQlCVUcoKTsKIAorI2lmZGVmIENPTkZJR19WSVZJX1NDQVRURVIKIAkvKkZJWE1FOiBNYXliZSBhIHNwaW5sb2NrIGlzIHJlcXVpcmVkIGhlcmUgKi8KIAlrZnJlZShidWYtPnRvX2FkZHIpOwogCWJ1Zi0+dG9fYWRkcj1OVUxMOworI2VuZGlmCiAKIAl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsMCwwKTsKIAl2aWRlb2J1Zl9kbWFfdW5tYXAodnEsICZidWYtPnZiLmRtYSk7CkBAIC03MTEsMTEgKzc2NywxMiBAQAogCiAJYnVmLT52Yi5zdGF0ZSA9IFNUQVRFX1BSRVBBUkVEOwogCisjaWZkZWYgQ09ORklHX1ZJVklfU0NBVFRFUgogCWlmIChOVUxMID09IChidWYtPnRvX2FkZHIgPSBrbWFsbG9jKHNpemVvZigqYnVmLT50b19hZGRyKSAqIHZiLT5kbWEubnJfcGFnZXMsR0ZQX0tFUk5FTCkpKSB7CiAJCXJjPS1FTk9NRU07CiAJCWdvdG8gZmFpbDsKIAl9Ci0KKyNlbmRpZgogCXJldHVybiAwOwogCiBmYWlsOgpAQCAtNzgwLDYgKzgzNyw3IEBACiAJZnJlZV9idWZmZXIodnEsYnVmKTsKIH0KIAorI2lmZGVmIENPTkZJR19WSVZJX1NDQVRURVIKIHN0YXRpYyBpbnQgdml2aV9tYXBfc2codm9pZCAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCiAJCSAgICAgICBpbnQgZGlyZWN0aW9uKQogewpAQCAtODEyLDYgKzg3MCw3IEBACiAvLwlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgdml2aV92aWRlb19xb3BzID0gewogCS5idWZfc2V0dXAgICAgICA9IGJ1ZmZlcl9zZXR1cCwKQEAgLTgyMCw5ICs4NzksOSBAQAogCS5idWZfcmVsZWFzZSAgICA9IGJ1ZmZlcl9yZWxlYXNlLAogCiAJLyogTm9uLXBjaSBoYW5kbGluZyByb3V0aW5lcyAqLwotCS52Yl9tYXBfc2cgICAgICA9IHZpdmlfbWFwX3NnLAotCS52Yl9kbWFfc3luY19zZyA9IHZpdmlfZG1hX3N5bmNfc2csCi0JLnZiX3VubWFwX3NnICAgID0gdml2aV91bm1hcF9zZywKKy8vCS52Yl9tYXBfc2cgICAgICA9IHZpdmlfbWFwX3NnLAorLy8JLnZiX2RtYV9zeW5jX3NnID0gdml2aV9kbWFfc3luY19zZywKKy8vCS52Yl91bm1hcF9zZyAgICA9IHZpdmlfdW5tYXBfc2csCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyMDAsMTEgKzEyNTksMTkgQEAKIAlzcHJpbnRmKGRldi0+dGltZXN0ciwiJTAyZDolMDJkOiUwMmQ6JTAzZCIsCiAJCQlkZXYtPmgsZGV2LT5tLGRldi0+cywoZGV2LT51cys1MDApLzEwMDApOwogCisjaWZkZWYgQ09ORklHX1ZJVklfU0NBVFRFUgorCXZpZGVvYnVmX3F1ZXVlX2luaXQoJmZoLT52Yl92aWRxLFZJREVPQlVGX0RNQV9TQ0FUVEVSLCAmdml2aV92aWRlb19xb3BzLAorCQkJTlVMTCwgTlVMTCwKKwkJCWZoLT50eXBlLAorCQkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJc2l6ZW9mKHN0cnVjdCB2aXZpX2J1ZmZlciksZmgpOworI2Vsc2UKIAl2aWRlb2J1Zl9xdWV1ZV9pbml0KCZmaC0+dmJfdmlkcSwgJnZpdmlfdmlkZW9fcW9wcywKIAkJCU5VTEwsIE5VTEwsCiAJCQlmaC0+dHlwZSwKIAkJCVY0TDJfRklFTERfSU5URVJMQUNFRCwKIAkJCXNpemVvZihzdHJ1Y3Qgdml2aV9idWZmZXIpLGZoKTsKKyNlbmRpZgogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzUyLDYgKzE0MTksNyBAQAogCS8qIGluaXQgdmlkZW8gZG1hIHF1ZXVlcyAqLwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEuYWN0aXZlKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxLnF1ZXVlZCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT52aWRxLndxKTsKIAogCS8qIGluaXRpYWxpemUgbG9ja3MgKi8KIAlpbml0X01VVEVYKCZkZXYtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDEuaAppbmRleCBiOWM5M2I4Li43MTBmMTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDEuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFY0TDIgZHJpdmVyIGZvciBaQzAzMDEgSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAgICAgICAgICAgICAgICAgICoKKyAqIFY0TDIgZHJpdmVyIGZvciBaQzAzMDFbUF0gSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCmluZGV4IDhkYTdmMTUuLmYxMTIwNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFZpZGVvNExpbnV4MiBkcml2ZXIgZm9yIFpDMDMwMVtQXSBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcCAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIEluZm9ybWF0aW9ucyBhYm91dCB0aGUgY2hpcCBpbnRlcm5hbHMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgSTJDIHByb3RvY29sICoKICAqIGhhdmUgYmVlbiB0YWtlbiBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBaQzAzMHggVmlkZW80TGludXgxICAgICAgICoKQEAgLTUyLDggKzUyLDggQEAKICNkZWZpbmUgWkMwMzAxX01PRFVMRV9BVVRIT1IgICIoQykgMjAwNiBMdWNhIFJpc29saWEiCiAjZGVmaW5lIFpDMDMwMV9BVVRIT1JfRU1BSUwgICAiPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IgogI2RlZmluZSBaQzAzMDFfTU9EVUxFX0xJQ0VOU0UgIkdQTCIKLSNkZWZpbmUgWkMwMzAxX01PRFVMRV9WRVJTSU9OICIxOjEuMDUiCi0jZGVmaW5lIFpDMDMwMV9NT0RVTEVfVkVSU0lPTl9DT0RFICBLRVJORUxfVkVSU0lPTigxLCAwLCA1KQorI2RlZmluZSBaQzAzMDFfTU9EVUxFX1ZFUlNJT04gIjE6MS4wNyIKKyNkZWZpbmUgWkMwMzAxX01PRFVMRV9WRVJTSU9OX0NPREUgIEtFUk5FTF9WRVJTSU9OKDEsIDEsIDcpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtODksNyArODksNyBAQAogCQkgIlxuZGV0ZWN0ZWQgY2FtZXJhLiIKIAkJICJcbiAwID0gZG8gbm90IGZvcmNlIG1lbW9yeSB1bm1hcHBpbmciCiAJCSAiXG4gMSA9IGZvcmNlIG1lbW9yeSB1bm1hcHBpbmcgKHNhdmUgbWVtb3J5KSIKLQkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhTTjlDMTAyX0ZPUkNFX01VTk1BUCkiLiIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhaQzAzMDFfRk9SQ0VfTVVOTUFQKSIuIgogCQkgIlxuIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhbWVfdGltZW91dFtdID0ge1swIC4uLiBaQzAzMDFfTUFYX0RFVklDRVMtMV0gPQpAQCAtMTM2LDcgKzEzNiw4IEBACiAKIAljYW0tPm5idWZmZXJzID0gY291bnQ7CiAJd2hpbGUgKGNhbS0+bmJ1ZmZlcnMgPiAwKSB7Ci0JCWlmICgoYnVmZiA9IHZtYWxsb2NfMzIoY2FtLT5uYnVmZmVycyAqIFBBR0VfQUxJR04oaW1hZ2VzaXplKSkpKQorCQlpZiAoKGJ1ZmYgPSB2bWFsbG9jXzMyX3VzZXIoY2FtLT5uYnVmZmVycyAqCisJCQkJCSAgICBQQUdFX0FMSUdOKGltYWdlc2l6ZSkpKSkKIAkJCWJyZWFrOwogCQljYW0tPm5idWZmZXJzLS07CiAJfQpAQCAtNDMwLDcgKzQzMSw4IEBACiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSogYWx0c2V0dGluZyA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZygKIAkJCQkJCSAgICAgdXNiX2lmbnVtX3RvX2lmKHVkZXYsIDApLAogCQkJCQkJICAgICBaQzAzMDFfQUxURVJOQVRFX1NFVFRJTkcpOwotCWNvbnN0IHVuc2lnbmVkIGludCBwc3ogPSBhbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplOworCWNvbnN0IHVuc2lnbmVkIGludCBwc3ogPSBsZTE2X3RvX2NwdShhbHRzZXR0aW5nLT4KKwkJCQkJICAgICBlbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKIAlzdHJ1Y3QgdXJiKiB1cmI7CiAJczggaSwgajsKIAlpbnQgZXJyID0gMDsKQEAgLTQ4OSw3ICs0OTEsNyBAQAogCXJldHVybiAwOwogCiBmcmVlX3VyYnM6Ci0JZm9yIChpID0gMDsgaSA8IFpDMDMwMV9VUkJTOyBpKyspCisJZm9yIChpID0gMDsgKGkgPCBaQzAzMDFfVVJCUykgJiYgY2FtLT51cmJbaV07IGkrKykKIAkJdXNiX2ZyZWVfdXJiKGNhbS0+dXJiW2ldKTsKIAogZnJlZV9idWZmZXJzOgpAQCAtMTI4OCw2ICsxMjkwLDM1IEBACiAKIAogc3RhdGljIGludAoremMwMzAxX3ZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gZnJtc2l6ZTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZnJtc2l6ZSwgYXJnLCBzaXplb2YoZnJtc2l6ZSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChmcm1zaXplLmluZGV4ICE9IDAgJiYgZnJtc2l6ZS5pbmRleCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmcm1zaXplLnBpeGVsX2Zvcm1hdCAhPSBWNEwyX1BJWF9GTVRfSlBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmcm1zaXplLnR5cGUgPSBWNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVURTsKKworCWlmIChmcm1zaXplLmluZGV4ID09IDEpIHsKKwkJZnJtc2l6ZS5kaXNjcmV0ZS53aWR0aCA9IGNhbS0+c2Vuc29yLmNyb3BjYXAuZGVmcmVjdC53aWR0aDsKKwkJZnJtc2l6ZS5kaXNjcmV0ZS5oZWlnaHQgPSBjYW0tPnNlbnNvci5jcm9wY2FwLmRlZnJlY3QuaGVpZ2h0OworCX0KKwltZW1zZXQoJmZybXNpemUucmVzZXJ2ZWQsIDAsIHNpemVvZihmcm1zaXplLnJlc2VydmVkKSk7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmZybXNpemUsIHNpemVvZihmcm1zaXplKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAogemMwMzAxX3ZpZGlvY19lbnVtX2ZtdChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKIAlzdHJ1Y3QgdjRsMl9mbXRkZXNjIGZtdGQ7CkBAIC0xMjk1LDYgKzEzMjYsOSBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmZm10ZCwgYXJnLCBzaXplb2YoZm10ZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCWlmIChmbXRkLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChmbXRkLmluZGV4ID09IDApIHsKIAkJc3RyY3B5KGZtdGQuZGVzY3JpcHRpb24sICJKUEVHIik7CiAJCWZtdGQucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSlBFRzsKQEAgLTE3OTUsNiArMTgyOSw5IEBACiAJY2FzZSBWSURJT0NfU19GTVQ6CiAJCXJldHVybiB6YzAzMDFfdmlkaW9jX3RyeV9zX2ZtdChjYW0sIGNtZCwgYXJnKTsKIAorCWNhc2UgVklESU9DX0VOVU1fRlJBTUVTSVpFUzoKKwkJcmV0dXJuIHpjMDMwMV92aWRpb2NfZW51bV9mcmFtZXNpemVzKGNhbSwgYXJnKTsKKwogCWNhc2UgVklESU9DX0dfSlBFR0NPTVA6CiAJCXJldHVybiB6YzAzMDFfdmlkaW9jX2dfanBlZ2NvbXAoY2FtLCBhcmcpOwogCkBAIC0xODMwLDYgKzE4NjcsNyBAQAogCWNhc2UgVklESU9DX1FVRVJZU1REOgogCWNhc2UgVklESU9DX0VOVU1TVEQ6CiAJY2FzZSBWSURJT0NfUVVFUllNRU5VOgorCWNhc2UgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM6CiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGVmYXVsdDoKQEAgLTE4NzYsNiArMTkxNCw3IEBACiAJLm9wZW4gPSAgICB6YzAzMDFfb3BlbiwKIAkucmVsZWFzZSA9IHpjMDMwMV9yZWxlYXNlLAogCS5pb2N0bCA9ICAgemMwMzAxX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLnJlYWQgPSAgICB6YzAzMDFfcmVhZCwKIAkucG9sbCA9ICAgIHpjMDMwMV9wb2xsLAogCS5tbWFwID0gICAgemMwMzAxX21tYXAsCkBAIC0xOTEzLDcgKzE5NTIsNyBAQAogCW11dGV4X2luaXQoJmNhbS0+ZGV2X211dGV4KTsKIAogCURCRygyLCAiWkMwMzAxW1BdIEltYWdlIFByb2Nlc3NvciBhbmQgQ29udHJvbCBDaGlwIGRldGVjdGVkICIKLQkgICAgICAgIih2aWQvcGlkIDB4JTA0WC8weCUwNFgpIixpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOworCSAgICAgICAiKHZpZC9waWQgMHglMDRYOjB4JTA0WCkiLGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CiAKIAlmb3IgIChpID0gMDsgemMwMzAxX3NlbnNvcl90YWJsZVtpXTsgaSsrKSB7CiAJCWVyciA9IHpjMDMwMV9zZW5zb3JfdGFibGVbaV0oY2FtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9wYXMyMDJiY2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9wYXMyMDJiY2IuYwppbmRleCBlY2ZkMzlhLi4zZWZiOTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfcGFzMjAyYmNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3BhczIwMmJjYi5jCkBAIC0xLDggKzEsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUGx1Zy1pbiBmb3IgUEFTMjAyQkNCIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFpDMDMwMVtQXSBJbWFnZSAgICAgKgorICogUGx1Zy1pbiBmb3IgUEFTMjAyQkNCIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFpDMDMwMSBJbWFnZSAgICAgICAgKgogICogUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogSW5pdGlhbGl6YXRpb24gdmFsdWVzIG9mIHRoZSBaQzAzMDFbUF0gaGF2ZSBiZWVuIHRha2VuIGZyb20gdGhlIFNQQ0E1WFggKgogICogZHJpdmVyIG1haW50YWluZWQgYnkgTWljaGVsIFhoYWFyZCA8bXhoYWFyZEBtYWdpYy5mcj4gICAgICAgICAgICAgICAgICAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3BiMDMzMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3BiMDMzMC5jCmluZGV4IGVkODU0MmUuLjU3ODRiMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9wYjAzMzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfcGIwMzMwLmMKQEAgLTEsOCArMSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQbHVnLWluIGZvciBQQi0wMzMwIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFpDMDMwMVtQXSBJbWFnZSAgICAgICAqCisgKiBQbHVnLWluIGZvciBQQi0wMzMwIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFpDMDMwMVAgSW1hZ2UgICAgICAgICAqCiAgKiBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBJbml0aWFsaXphdGlvbiB2YWx1ZXMgb2YgdGhlIFpDMDMwMVtQXSBoYXZlIGJlZW4gdGFrZW4gZnJvbSB0aGUgU1BDQTVYWCAqCiAgKiBkcml2ZXIgbWFpbnRhaW5lZCBieSBNaWNoZWwgWGhhYXJkIDxteGhhYXJkQG1hZ2ljLmZyPiAgICAgICAgICAgICAgICAgICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmgKaW5kZXggM2RhZjA0OS4uNDRlODJjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3NlbnNvci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9zZW5zb3IuaApAQCAtMSw4ICsxLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEFQSSBmb3IgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFpDMDMwMSBJbWFnZSBQcm9jZXNzb3IgYW5kICAgICAgICoKKyAqIEFQSSBmb3IgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFpDMDMwMVtQXSBJbWFnZSBQcm9jZXNzb3IgYW5kICAgICoKICAqIENvbnRyb2wgQ2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKQEAgLTcwLDcgKzcwLDcgQEAKIAl7IFpDMDMwMV9VU0JfREVWSUNFKDB4MDQxZSwgMHg0MDM2LCAweGZmKSwgfSwgLyogSFY3MTMxICovICAgICAgICAgICAgXAogCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwM2EsIDB4ZmYpLCB9LCAvKiBIVjcxMzEgKi8gICAgICAgICAgICBcCiAJeyBaQzAzMDFfVVNCX0RFVklDRSgweDA0NTgsIDB4NzAwNywgMHhmZiksIH0sIC8qIFRBUzUxMzAgKi8gICAgICAgICAgIFwKLQl7IFpDMDMwMV9VU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDBDLCAweGZmKSwgfSwgLyogVEFTNTEzMCAqLyAgICAgICAgICAgXAorCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwNDU4LCAweDcwMGMsIDB4ZmYpLCB9LCAvKiBUQVM1MTMwICovICAgICAgICAgICBcCiAJeyBaQzAzMDFfVVNCX0RFVklDRSgweDA0NTgsIDB4NzAwZiwgMHhmZiksIH0sIC8qIFRBUzUxMzAgKi8gICAgICAgICAgIFwKIAl7IFpDMDMwMV9VU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGFlLCAweGZmKSwgfSwgLyogUEFTMjAyICovICAgICAgICAgICAgXAogCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwNTVmLCAweGQwMDMsIDB4ZmYpLCB9LCAvKiBUQVM1MTMwICovICAgICAgICAgICBcCkBAIC05Myw5ICs5Myw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBaQzAzMDFfTUFYX0NUUkxTIFY0TDJfQ0lEX0xBU1RQMS1WNEwyX0NJRF9CQVNFKzEwCi0jZGVmaW5lIFpDMDMwMV9WNEwyX0NJRF9EQUNfTUFHTklUVURFIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRQotI2RlZmluZSBaQzAzMDFfVjRMMl9DSURfR1JFRU5fQkFMQU5DRSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxCisjZGVmaW5lIFpDMDMwMV9NQVhfQ1RSTFMgKFY0TDJfQ0lEX0xBU1RQMSAtIFY0TDJfQ0lEX0JBU0UgKyAxMCkKKyNkZWZpbmUgWkMwMzAxX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREUgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDApCisjZGVmaW5lIFpDMDMwMV9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxKQogCiBzdHJ1Y3QgemMwMzAxX3NlbnNvciB7CiAJY2hhciBuYW1lWzMyXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnCmluZGV4IGZjM2M4ODUuLmFiNmU5ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcKKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZwpAQCAtMiw2ICsyLDIwIEBACiAjIE11bHRpZnVuY3Rpb24gbWlzY2VsbGFuZW91cyBkZXZpY2VzCiAjCiAKK21lbnUgIk11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMiCisKK2NvbmZpZyBNRkRfU001MDEKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgU2lsaWNvbiBNb3Rpb24gU001MDEiCisJIC0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgdGhlIGNvcmUgZHJpdmVyIGZvciB0aGUgU2lsaWNvbiBNb3Rpb24gU001MDEgbXVsdGltZWRpYQorCSAgY29tcGFuaW9uIGNoaXAuIFRoaXMgZGV2aWNlIGlzIGEgbXVsdGlmdW5jdGlvbiBkZXZpY2Ugd2hpY2ggbWF5CisJICBwcm92aWRlIG51bWVyb3VzIGludGVyZmFjZXMgaW5jbHVkaW5nIFVTQiBob3N0IGNvbnRyb2xsZXIgVVNCIGdhZGdldCwKKwkgIEFzeW5jcm9ub3VzIFNlcmlhbCBwb3J0cywgQXVkaW8gZnVuY3Rpb25zIGFuZCBhIGR1YWwgZGlzcGxheSB2aWRlbworCSAgaW50ZXJmYWNlLiBUaGUgZGV2aWNlIG1heSBiZSBjb25uZWN0ZWQgYnkgUENJIG9yIGxvY2FsIGJ1cyB3aXRoCisJICB2YXJ5aW5nIGZ1bmN0aW9ucyBlbmFibGVkLgorCitlbmRtZW51CisKIG1lbnUgIk11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycyIKIAlkZXBlbmRzIG9uIEFSQ0hfU0ExMTAwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggYWRiMjliNS4uNTE0MzIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTIsNiArMiw4IEBACiAjIE1ha2VmaWxlIGZvciBtdWx0aWZ1bmN0aW9uIG1pc2NlbGxhbmVvdXMgZGV2aWNlcwogIwogCitvYmotJChDT05GSUdfTUZEX1NNNTAxKQkJKz0gc201MDEubworCiBvYmotJChDT05GSUdfTUNQKQkJKz0gbWNwLWNvcmUubwogb2JqLSQoQ09ORklHX01DUF9TQTExWDApCSs9IG1jcC1zYTExeDAubwogb2JqLSQoQ09ORklHX01DUF9VQ0IxMjAwKQkrPSB1Y2IxeDAwLWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc201MDEuYyBiL2RyaXZlcnMvbWZkL3NtNTAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM1YTFlMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3NtNTAxLmMKQEAgLTAsMCArMSwxMTQ4IEBACisvKiBsaW51eC9kcml2ZXJzL21mZC9zbTUwMS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJVmluY2VudCBTYW5kZXJzIDx2aW5jZUBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTTTUwMSBNRkQgZHJpdmVyCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8bGludXgvc201MDEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbTUwMS1yZWdzLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RydWN0IHNtNTAxX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQlwZGV2OworfTsKKworc3RydWN0IHNtNTAxX2RldmRhdGEgeworCXNwaW5sb2NrX3QJCQkgcmVnX2xvY2s7CisJc3RydWN0IG11dGV4CQkJIGNsb2NrX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAkJIGRldmljZXM7CisKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UJCQkqaW9fcmVzOworCXN0cnVjdCByZXNvdXJjZQkJCSptZW1fcmVzOworCXN0cnVjdCByZXNvdXJjZQkJCSpyZWdzX2NsYWltOworCXN0cnVjdCBzbTUwMV9wbGF0ZGF0YQkJKnBsYXRkYXRhOworCisJaW50CQkJCSB1bml0X3Bvd2VyWzIwXTsKKwl1bnNpZ25lZCBpbnQJCQkgcGRldl9pZDsKKwl1bnNpZ25lZCBpbnQJCQkgaXJxOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworfTsKKworI2RlZmluZSBNSFogKDEwMDAgKiAxMDAwKQorCisjaWZkZWYgREVCVUcKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlzY19kaXZbXSA9IHsKKwlbMF0JCT0gMSwKKwlbMV0JCT0gMiwKKwlbMl0JCT0gNCwKKwlbM10JCT0gOCwKKwlbNF0JCT0gMTYsCisJWzVdCQk9IDMyLAorCVs2XQkJPSA2NCwKKwlbN10JCT0gMTI4LAorCVs4XQkJPSAzLAorCVs5XQkJPSA2LAorCVsxMF0JCT0gMTIsCisJWzExXQkJPSAyNCwKKwlbMTJdCQk9IDQ4LAorCVsxM10JCT0gOTYsCisJWzE0XQkJPSAxOTIsCisJWzE1XQkJPSAzODQsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHB4X2RpdltdID0geworCVswXQkJPSAxLAorCVsxXQkJPSAyLAorCVsyXQkJPSA0LAorCVszXQkJPSA4LAorCVs0XQkJPSAxNiwKKwlbNV0JCT0gMzIsCisJWzZdCQk9IDY0LAorCVs3XQkJPSAxMjgsCisJWzhdCQk9IDMsCisJWzldCQk9IDYsCisJWzEwXQkgICAgICAgID0gMTIsCisJWzExXQkJPSAyNCwKKwlbMTJdCQk9IDQ4LAorCVsxM10JCT0gOTYsCisJWzE0XQkJPSAxOTIsCisJWzE1XQkJPSAzODQsCisJWzE2XQkJPSA1LAorCVsxN10JCT0gMTAsCisJWzE4XQkJPSAyMCwKKwlbMTldCQk9IDQwLAorCVsyMF0JCT0gODAsCisJWzIxXQkJPSAxNjAsCisJWzIyXQkJPSAzMjAsCisJWzIzXQkJPSA2MDQsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWNvZGVfZGl2KHVuc2lnbmVkIGxvbmcgcGxsMiwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkJdW5zaWduZWQgaW50IGxzaGZ0LCB1bnNpZ25lZCBpbnQgc2VsYml0LAorCQkJCXVuc2lnbmVkIGxvbmcgbWFzaywgY29uc3QgdW5zaWduZWQgaW50ICpkdGFiKQoreworCWlmICh2YWwgJiBzZWxiaXQpCisJCXBsbDIgPSAyODggKiBNSFo7CisKKwlyZXR1cm4gcGxsMiAvIGR0YWJbKHZhbCA+PiBsc2hmdCkgJiBtYXNrXTsKK30KKworI2RlZmluZSBmbXRfZnJlcSh4KSAoKHgpIC8gTUhaKSwgKCh4KSAlIE1IWiksICh4KQorCisvKiBzbTUwMV9kdW1wX2NsaworICoKKyAqIFByaW50IG91dCB0aGUgY3VycmVudCBjbG9jayBjb25maWd1cmF0aW9uIGZvciB0aGUgZGV2aWNlCisqLworCitzdGF0aWMgdm9pZCBzbTUwMV9kdW1wX2NsayhzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20pCit7CisJdW5zaWduZWQgbG9uZyBtaXNjdCA9IHJlYWRsKHNtLT5yZWdzICsgU001MDFfTUlTQ19USU1JTkcpOworCXVuc2lnbmVkIGxvbmcgcG0wID0gcmVhZGwoc20tPnJlZ3MgKyBTTTUwMV9QT1dFUl9NT0RFXzBfQ0xPQ0spOworCXVuc2lnbmVkIGxvbmcgcG0xID0gcmVhZGwoc20tPnJlZ3MgKyBTTTUwMV9QT1dFUl9NT0RFXzFfQ0xPQ0spOworCXVuc2lnbmVkIGxvbmcgcG1jID0gcmVhZGwoc20tPnJlZ3MgKyBTTTUwMV9QT1dFUl9NT0RFX0NPTlRST0wpOworCXVuc2lnbmVkIGxvbmcgc2RjbGswLCBzZGNsazE7CisJdW5zaWduZWQgbG9uZyBwbGwyID0gMDsKKworCXN3aXRjaCAobWlzY3QgJiAweDMwKSB7CisJY2FzZSAweDAwOgorCQlwbGwyID0gMzM2ICogTUhaOworCQlicmVhazsKKwljYXNlIDB4MTA6CisJCXBsbDIgPSAyODggKiBNSFo7CisJCWJyZWFrOworCWNhc2UgMHgyMDoKKwkJcGxsMiA9IDI0MCAqIE1IWjsKKwkJYnJlYWs7CisJY2FzZSAweDMwOgorCQlwbGwyID0gMTkyICogTUhaOworCQlicmVhazsKKwl9CisKKwlzZGNsazAgPSAobWlzY3QgJiAoMTw8MTIpKSA/IHBsbDIgOiAyODggKiBNSFo7CisJc2RjbGswIC89IG1pc2NfZGl2WygobWlzY3QgPj4gOCkgJiAweGYpXTsKKworCXNkY2xrMSA9IChtaXNjdCAmICgxPDwyMCkpID8gcGxsMiA6IDI4OCAqIE1IWjsKKwlzZGNsazEgLz0gbWlzY19kaXZbKChtaXNjdCA+PiAxNikgJiAweGYpXTsKKworCWRldl9kYmcoc20tPmRldiwgIk1JU0NUPSUwOGx4LCBQTTA9JTA4bHgsIFBNMT0lMDhseFxuIiwKKwkJbWlzY3QsIHBtMCwgcG0xKTsKKworCWRldl9kYmcoc20tPmRldiwgIlBMTDIgPSAlbGQuJWxkIE1IeiAoJWxkKSwgU0RDTEswPSUwOGx4LCBTRENMSzE9JTA4bHhcbiIsCisJCWZtdF9mcmVxKHBsbDIpLCBzZGNsazAsIHNkY2xrMSk7CisKKwlkZXZfZGJnKHNtLT5kZXYsICJTRFJBTTogUE0wPSVsZCwgUE0xPSVsZFxuIiwgc2RjbGswLCBzZGNsazEpOworCisJZGV2X2RiZyhzbS0+ZGV2LCAiUE0wWyVjXTogIgorCQkgIlAyICVsZC4lbGQgTUh6ICglbGQpLCBWMiAlbGQuJWxkICglbGQpLCAiCit4CQkgIk0gJWxkLiVsZCAoJWxkKSwgTVgxICVsZC4lbGQgKCVsZClcbiIsCisJCSAocG1jICYgMyApID09IDAgPyAnKicgOiAnLScsCisJCSBmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMCwgMjQsIDE8PDI5LCAzMSwgcHhfZGl2KSksCisJCSBmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMCwgMTYsIDE8PDIwLCAxNSwgbWlzY19kaXYpKSwKKwkJIGZtdF9mcmVxKGRlY29kZV9kaXYocGxsMiwgcG0wLCA4LCAgMTw8MTIsIDE1LCBtaXNjX2RpdikpLAorCQkgZm10X2ZyZXEoZGVjb2RlX2RpdihwbGwyLCBwbTAsIDAsICAxPDw0LCAgMTUsIG1pc2NfZGl2KSkpOworCisJZGV2X2RiZyhzbS0+ZGV2LCAiUE0xWyVjXTogIgorCQkiUDIgJWxkLiVsZCBNSHogKCVsZCksIFYyICVsZC4lbGQgKCVsZCksICIKKwkJIk0gJWxkLiVsZCAoJWxkKSwgTVgxICVsZC4lbGQgKCVsZClcbiIsCisJCShwbWMgJiAzICkgPT0gMSA/ICcqJyA6ICctJywKKwkJZm10X2ZyZXEoZGVjb2RlX2RpdihwbGwyLCBwbTEsIDI0LCAxPDwyOSwgMzEsIHB4X2RpdikpLAorCQlmbXRfZnJlcShkZWNvZGVfZGl2KHBsbDIsIHBtMSwgMTYsIDE8PDIwLCAxNSwgbWlzY19kaXYpKSwKKwkJZm10X2ZyZXEoZGVjb2RlX2RpdihwbGwyLCBwbTEsIDgsICAxPDwxMiwgMTUsIG1pc2NfZGl2KSksCisJCWZtdF9mcmVxKGRlY29kZV9kaXYocGxsMiwgcG0xLCAwLCAgMTw8NCwgIDE1LCBtaXNjX2RpdikpKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBzbTUwMV9kdW1wX2NsayhzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20pCit7Cit9CisjZW5kaWYKKworLyogc201MDFfc3luY19yZWdzCisgKgorICogZW5zdXJlIHRoZQorKi8KKworc3RhdGljIHZvaWQgc201MDFfc3luY19yZWdzKHN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbSkKK3sKKwlyZWFkbChzbS0+cmVncyk7Cit9CisKKy8qIHNtNTAxX21pc2NfY29udHJvbAorICoKKyAqIGFsdGVycyB0aGUgbWlzY2VsZW5lb3VzIGNvbnRyb2wgcGFyYW1ldGVycworKi8KKworaW50IHNtNTAxX21pc2NfY29udHJvbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIHNldCwgdW5zaWduZWQgbG9uZyBjbGVhcikKK3sKKwlzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIG1pc2M7CisJdW5zaWduZWQgbG9uZyBzYXZlOworCXVuc2lnbmVkIGxvbmcgdG87CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPnJlZ19sb2NrLCBzYXZlKTsKKworCW1pc2MgPSByZWFkbChzbS0+cmVncyArIFNNNTAxX01JU0NfQ09OVFJPTCk7CisJdG8gPSAobWlzYyAmIH5jbGVhcikgfCBzZXQ7CisKKwlpZiAodG8gIT0gbWlzYykgeworCQl3cml0ZWwodG8sIHNtLT5yZWdzICsgU001MDFfTUlTQ19DT05UUk9MKTsKKwkJc201MDFfc3luY19yZWdzKHNtKTsKKworCQlkZXZfZGJnKHNtLT5kZXYsICJNSVNDX0NPTlRST0wgJTA4bHhcbiIsIG1pc2MpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5yZWdfbG9jaywgc2F2ZSk7CisJcmV0dXJuIHRvOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChzbTUwMV9taXNjX2NvbnRyb2wpOworCisvKiBzbTUwMV9tb2RpZnlfcmVnCisgKgorICogTW9kaWZ5IGEgcmVnaXN0ZXIgaW4gdGhlIFNNNTAxIHdoaWNoIG1heSBiZSBzaGFyZWQgd2l0aCBvdGhlcgorICogZHJpdmVycy4KKyovCisKK3Vuc2lnbmVkIGxvbmcgc201MDFfbW9kaWZ5X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZWcsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzZXQsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjbGVhcikKK3sKKwlzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisJdW5zaWduZWQgbG9uZyBzYXZlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5yZWdfbG9jaywgc2F2ZSk7CisKKwlkYXRhID0gcmVhZGwoc20tPnJlZ3MgKyByZWcpOworCWRhdGEgfD0gc2V0OworCWRhdGEgJj0gfmNsZWFyOworCisJd3JpdGVsKGRhdGEsIHNtLT5yZWdzICsgcmVnKTsKKwlzbTUwMV9zeW5jX3JlZ3Moc20pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPnJlZ19sb2NrLCBzYXZlKTsKKworCXJldHVybiBkYXRhOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChzbTUwMV9tb2RpZnlfcmVnKTsKKwordW5zaWduZWQgbG9uZyBzbTUwMV9ncGlvX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZ3BpbykKK3sKKwlzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHJlZzsKKworCXJlZyA9IChncGlvID4gMzIpID8gU001MDFfR1BJT19EQVRBX0hJR0ggOiBTTTUwMV9HUElPX0RBVEFfTE9XOworCXJlc3VsdCA9IHJlYWRsKHNtLT5yZWdzICsgcmVnKTsKKworCXJlc3VsdCA+Pj0gKGdwaW8gJiAzMSk7CisJcmV0dXJuIHJlc3VsdCAmIDFVTDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoc201MDFfZ3Bpb19nZXQpOworCit2b2lkIHNtNTAxX2dwaW9fc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgIHVuc2lnbmVkIGxvbmcgZ3BpbywKKwkJICAgIHVuc2lnbmVkIGludCB0bywKKwkJICAgIHVuc2lnbmVkIGludCBkaXIpCit7CisJc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl1bnNpZ25lZCBsb25nIGJpdCA9IDEgPDwgKGdwaW8gJiAzMSk7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCXVuc2lnbmVkIGxvbmcgc2F2ZTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWJhc2UgPSAoZ3BpbyA+IDMyKSA/IFNNNTAxX0dQSU9fREFUQV9ISUdIIDogU001MDFfR1BJT19EQVRBX0xPVzsKKwliYXNlICs9IFNNNTAxX0dQSU87CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPnJlZ19sb2NrLCBzYXZlKTsKKworCXZhbCA9IHJlYWRsKHNtLT5yZWdzICsgYmFzZSkgJiB+Yml0OworCWlmICh0bykKKwkJdmFsIHw9IGJpdDsKKwl3cml0ZWwodmFsLCBzbS0+cmVncyArIGJhc2UpOworCisJdmFsID0gcmVhZGwoc20tPnJlZ3MgKyBTTTUwMV9HUElPX0REUl9MT1cpICYgfmJpdDsKKwlpZiAoZGlyKQorCQl2YWwgfD0gYml0OworCisJd3JpdGVsKHZhbCwgc20tPnJlZ3MgKyBTTTUwMV9HUElPX0REUl9MT1cpOworCXNtNTAxX3N5bmNfcmVncyhzbSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+cmVnX2xvY2ssIHNhdmUpOworCit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHNtNTAxX2dwaW9fc2V0KTsKKworCisvKiBzbTUwMV91bml0X3Bvd2VyCisgKgorICogYWx0ZXJzIHRoZSBwb3dlciBhY3RpdmUgZ2F0ZSB0byBzZXQgc3BlY2lmaWMgdW5pdHMgb24gb3Igb2ZmCisgKi8KKworaW50IHNtNTAxX3VuaXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdW5pdCwgdW5zaWduZWQgaW50IHRvKQoreworCXN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgbW9kZTsKKwl1bnNpZ25lZCBsb25nIGdhdGU7CisJdW5zaWduZWQgbG9uZyBjbG9jazsKKworCW11dGV4X2xvY2soJnNtLT5jbG9ja19sb2NrKTsKKworCW1vZGUgPSByZWFkbChzbS0+cmVncyArIFNNNTAxX1BPV0VSX01PREVfQ09OVFJPTCk7CisJZ2F0ZSA9IHJlYWRsKHNtLT5yZWdzICsgU001MDFfQ1VSUkVOVF9HQVRFKTsKKwljbG9jayA9IHJlYWRsKHNtLT5yZWdzICsgU001MDFfQ1VSUkVOVF9DTE9DSyk7CisKKwltb2RlICY9IDM7CQkvKiBnZXQgY3VycmVudCBwb3dlciBtb2RlICovCisKKwlpZiAodW5pdCA+IEFSUkFZX1NJWkUoc20tPnVuaXRfcG93ZXIpKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IGJhZCB1bml0ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHVuaXQpOworCQlnb3RvIGFscmVhZHk7CisJfQorCisJZGV2X2RiZyhzbS0+ZGV2LCAiJXM6IHVuaXQgJWQsIGN1ciAlZCwgdG8gJWRcbiIsIF9fRlVOQ1RJT05fXywgdW5pdCwKKwkJc20tPnVuaXRfcG93ZXJbdW5pdF0sIHRvKTsKKworCWlmICh0byA9PSAwICYmIHNtLT51bml0X3Bvd2VyW3VuaXRdID09IDApIHsKKwkJZGV2X2VycihzbS0+ZGV2LCAidW5pdCAlZCBpcyBhbHJlYWR5IHNodXRkb3duXG4iLCB1bml0KTsKKwkJZ290byBhbHJlYWR5OworCX0KKworCXNtLT51bml0X3Bvd2VyW3VuaXRdICs9IHRvID8gMSA6IC0xOworCXRvID0gc20tPnVuaXRfcG93ZXJbdW5pdF0gPyAxIDogMDsKKworCWlmICh0bykgeworCQlpZiAoZ2F0ZSAmICgxIDw8IHVuaXQpKQorCQkJZ290byBhbHJlYWR5OworCQlnYXRlIHw9ICgxIDw8IHVuaXQpOworCX0gZWxzZSB7CisJCWlmICghKGdhdGUgJiAoMSA8PCB1bml0KSkpCisJCQlnb3RvIGFscmVhZHk7CisJCWdhdGUgJj0gfigxIDw8IHVuaXQpOworCX0KKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMToKKwkJd3JpdGVsKGdhdGUsIHNtLT5yZWdzICsgU001MDFfUE9XRVJfTU9ERV8wX0dBVEUpOworCQl3cml0ZWwoY2xvY2ssIHNtLT5yZWdzICsgU001MDFfUE9XRVJfTU9ERV8wX0NMT0NLKTsKKwkJbW9kZSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwljYXNlIDA6CisJCXdyaXRlbChnYXRlLCBzbS0+cmVncyArIFNNNTAxX1BPV0VSX01PREVfMV9HQVRFKTsKKwkJd3JpdGVsKGNsb2NrLCBzbS0+cmVncyArIFNNNTAxX1BPV0VSX01PREVfMV9DTE9DSyk7CisJCW1vZGUgPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwl3cml0ZWwobW9kZSwgc20tPnJlZ3MgKyBTTTUwMV9QT1dFUl9NT0RFX0NPTlRST0wpOworCXNtNTAxX3N5bmNfcmVncyhzbSk7CisKKwlkZXZfZGJnKHNtLT5kZXYsICJnYXRlICUwOGx4LCBjbG9jayAlMDhseCwgbW9kZSAlMDhseFxuIiwKKwkJZ2F0ZSwgY2xvY2ssIG1vZGUpOworCisJbXNsZWVwKDE2KTsKKworIGFscmVhZHk6CisJbXV0ZXhfdW5sb2NrKCZzbS0+Y2xvY2tfbG9jayk7CisJcmV0dXJuIGdhdGU7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHNtNTAxX3VuaXRfcG93ZXIpOworCisKKy8qIFBlcmZvcm0gYSByb3VuZGVkIGRpdmlzaW9uLiAqLworc3RhdGljIGxvbmcgc201MDFmYl9yb3VuZF9kaXYobG9uZyBudW0sIGxvbmcgZGVub20pCit7CisgICAgICAgIC8qIG4gLyBkICsgMSAvIDIgPSAoMm4gKyBkKSAvIDJkICovCisgICAgICAgIHJldHVybiAoMiAqIG51bSArIGRlbm9tKSAvICgyICogZGVub20pOworfQorCisvKiBjbG9jayB2YWx1ZSBzdHJ1Y3R1cmUuICovCitzdHJ1Y3Qgc201MDFfY2xvY2sgeworCXVuc2lnbmVkIGxvbmcgbWNsazsKKwlpbnQgZGl2aWRlcjsKKwlpbnQgc2hpZnQ7Cit9OworCisvKiBzbTUwMV9zZWxlY3RfY2xvY2sKKyAqCisgKiBzZWxlY3RzIG5lYXJlc3QgZGlzY3JldGUgY2xvY2sgZnJlcXVlbmN5IHRoZSBTTTUwMSBjYW4gYWNoaXZlCisgKiAgIHRoZSBtYXhpbXVtIGRpdmlzb3IgaXMgMyBvciA1CisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNtNTAxX3NlbGVjdF9jbG9jayh1bnNpZ25lZCBsb25nIGZyZXEsCisJCQkJCXN0cnVjdCBzbTUwMV9jbG9jayAqY2xvY2ssCisJCQkJCWludCBtYXhfZGl2KQoreworCXVuc2lnbmVkIGxvbmcgbWNsazsKKwlpbnQgZGl2aWRlcjsKKwlpbnQgc2hpZnQ7CisJbG9uZyBkaWZmOworCWxvbmcgYmVzdF9kaWZmID0gOTk5OTk5OTk5OworCisJLyogVHJ5IDI4OE1IeiBhbmQgMzM2TUh6IGNsb2Nrcy4gKi8KKwlmb3IgKG1jbGsgPSAyODgwMDAwMDA7IG1jbGsgPD0gMzM2MDAwMDAwOyBtY2xrICs9IDQ4MDAwMDAwKSB7CisJCS8qIHRyeSBkaXZpZGVycyAxIGFuZCAzIGZvciBDUlQgYW5kIGZvciBwYW5lbCwKKwkJICAgdHJ5IGRpdmlkZXIgNSBmb3IgcGFuZWwgb25seS4qLworCisJCWZvciAoZGl2aWRlciA9IDE7IGRpdmlkZXIgPD0gbWF4X2RpdjsgZGl2aWRlciArPSAyKSB7CisJCQkvKiB0cnkgYWxsIDggc2hpZnQgdmFsdWVzLiovCisJCQlmb3IgKHNoaWZ0ID0gMDsgc2hpZnQgPCA4OyBzaGlmdCsrKSB7CisJCQkJLyogQ2FsY3VsYXRlIGRpZmZlcmVuY2UgdG8gcmVxdWVzdGVkIGNsb2NrICovCisJCQkJZGlmZiA9IHNtNTAxZmJfcm91bmRfZGl2KG1jbGssIGRpdmlkZXIgPDwgc2hpZnQpIC0gZnJlcTsKKwkJCQlpZiAoZGlmZiA8IDApCisJCQkJCWRpZmYgPSAtZGlmZjsKKworCQkJCS8qIElmIGl0IGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCwgdXNlIGl0ICovCisJCQkJaWYgKGRpZmYgPCBiZXN0X2RpZmYpIHsKKwkJCQkJYmVzdF9kaWZmID0gZGlmZjsKKworCQkJCQljbG9jay0+bWNsayA9IG1jbGs7CisJCQkJCWNsb2NrLT5kaXZpZGVyID0gZGl2aWRlcjsKKwkJCQkJY2xvY2stPnNoaWZ0ID0gc2hpZnQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogUmV0dXJuIGJlc3QgY2xvY2suICovCisJcmV0dXJuIGNsb2NrLT5tY2xrIC8gKGNsb2NrLT5kaXZpZGVyIDw8IGNsb2NrLT5zaGlmdCk7Cit9CisKKy8qIHNtNTAxX3NldF9jbG9jaworICoKKyAqIHNldCBvbmUgb2YgdGhlIGZvdXIgY2xvY2sgc291cmNlcyB0byB0aGUgY2xvc2VzdCBhdmFpbGFibGUgZnJlcXVlbmN5IHRvCisgKiAgdGhlIG9uZSBzcGVjaWZpZWQKKyovCisKK3Vuc2lnbmVkIGxvbmcgc201MDFfc2V0X2Nsb2NrKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIGludCBjbGtzcmMsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHJlcV9mcmVxKQoreworCXN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgbW9kZSA9IHJlYWRsKHNtLT5yZWdzICsgU001MDFfUE9XRVJfTU9ERV9DT05UUk9MKTsKKwl1bnNpZ25lZCBsb25nIGdhdGUgPSByZWFkbChzbS0+cmVncyArIFNNNTAxX0NVUlJFTlRfR0FURSk7CisJdW5zaWduZWQgbG9uZyBjbG9jayA9IHJlYWRsKHNtLT5yZWdzICsgU001MDFfQ1VSUkVOVF9DTE9DSyk7CisJdW5zaWduZWQgY2hhciByZWc7CisJdW5zaWduZWQgbG9uZyBzbTUwMV9mcmVxOyAvKiB0aGUgYWN0dWFsIGZyZXF1ZW5jeSBhY2hlaXZlZCAqLworCisJc3RydWN0IHNtNTAxX2Nsb2NrIHRvOworCisJLyogZmluZCBhY2hpdmFibGUgZGlzY3JldGUgZnJlcXVlbmN5IGFuZCBzZXR1cCByZWdpc3RlciB2YWx1ZQorCSAqIGFjY29yZGluZ2x5LCBWMlhDTEssIE1DTEsgYW5kIE0xWENMSyBhcmUgdGhlIHNhbWUgUDJYQ0xLCisJICogaGFzIGFuIGV4dHJhIGJpdCBmb3IgdGhlIGRpdmlkZXIgKi8KKworCXN3aXRjaCAoY2xrc3JjKSB7CisJY2FzZSBTTTUwMV9DTE9DS19QMlhDTEs6CisJCS8qIFRoaXMgY2xvY2sgaXMgZGl2aWRlZCBpbiBoYWxmIHNvIHRvIGFjaGl2ZSB0aGUKKwkJICogcmVxdWVzdGVkIGZyZXF1ZW5jeSB0aGUgdmFsdWUgbXVzdCBiZSBtdWx0aXBsaWVkIGJ5CisJCSAqIDIuIFRoaXMgY2xvY2sgYWxzbyBoYXMgYW4gYWRkaXRpb25hbCBwcmUgZGl2aXNvciAqLworCisJCXNtNTAxX2ZyZXEgPSAoc201MDFfc2VsZWN0X2Nsb2NrKDIgKiByZXFfZnJlcSwgJnRvLCA1KSAvIDIpOworCQlyZWc9dG8uc2hpZnQgJiAweDA3Oy8qIGJvdHRvbSAzIGJpdHMgYXJlIHNoaWZ0ICovCisJCWlmICh0by5kaXZpZGVyID09IDMpCisJCQlyZWcgfD0gMHgwODsgLyogLzMgZGl2aWRlciByZXF1aXJlZCAqLworCQllbHNlIGlmICh0by5kaXZpZGVyID09IDUpCisJCQlyZWcgfD0gMHgxMDsgLyogLzUgZGl2aWRlciByZXF1aXJlZCAqLworCQlpZiAodG8ubWNsayAhPSAyODgwMDAwMDApCisJCQlyZWcgfD0gMHgyMDsgLyogd2hpY2ggbWNsayBwbGwgaXMgc291cmNlICovCisJCWJyZWFrOworCisJY2FzZSBTTTUwMV9DTE9DS19WMlhDTEs6CisJCS8qIFRoaXMgY2xvY2sgaXMgZGl2aWRlZCBpbiBoYWxmIHNvIHRvIGFjaGl2ZSB0aGUKKwkJICogcmVxdWVzdGVkIGZyZXF1ZW5jeSB0aGUgdmFsdWUgbXVzdCBiZSBtdWx0aXBsaWVkIGJ5IDIuICovCisKKwkJc201MDFfZnJlcSA9IChzbTUwMV9zZWxlY3RfY2xvY2soMiAqIHJlcV9mcmVxLCAmdG8sIDMpIC8gMik7CisJCXJlZz10by5zaGlmdCAmIDB4MDc7CS8qIGJvdHRvbSAzIGJpdHMgYXJlIHNoaWZ0ICovCisJCWlmICh0by5kaXZpZGVyID09IDMpCisJCQlyZWcgfD0gMHgwODsJLyogLzMgZGl2aWRlciByZXF1aXJlZCAqLworCQlpZiAodG8ubWNsayAhPSAyODgwMDAwMDApCisJCQlyZWcgfD0gMHgxMDsJLyogd2hpY2ggbWNsayBwbGwgaXMgc291cmNlICovCisJCWJyZWFrOworCisJY2FzZSBTTTUwMV9DTE9DS19NQ0xLOgorCWNhc2UgU001MDFfQ0xPQ0tfTTFYQ0xLOgorCQkvKiBUaGVzZSBjbG9ja3MgYXJlIHRoZSBzYW1lIGFuZCBub3QgZnVydGhlciBkaXZpZGVkICovCisKKwkJc201MDFfZnJlcSA9IHNtNTAxX3NlbGVjdF9jbG9jayggcmVxX2ZyZXEsICZ0bywgMyk7CisJCXJlZz10by5zaGlmdCAmIDB4MDc7CS8qIGJvdHRvbSAzIGJpdHMgYXJlIHNoaWZ0ICovCisJCWlmICh0by5kaXZpZGVyID09IDMpCisJCQlyZWcgfD0gMHgwODsJLyogLzMgZGl2aWRlciByZXF1aXJlZCAqLworCQlpZiAodG8ubWNsayAhPSAyODgwMDAwMDApCisJCQlyZWcgfD0gMHgxMDsJLyogd2hpY2ggbWNsayBwbGwgaXMgc291cmNlICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7IC8qIHRoaXMgaXMgYmFkICovCisJfQorCisJbXV0ZXhfbG9jaygmc20tPmNsb2NrX2xvY2spOworCisJbW9kZSA9IHJlYWRsKHNtLT5yZWdzICsgU001MDFfUE9XRVJfTU9ERV9DT05UUk9MKTsKKwlnYXRlID0gcmVhZGwoc20tPnJlZ3MgKyBTTTUwMV9DVVJSRU5UX0dBVEUpOworCWNsb2NrID0gcmVhZGwoc20tPnJlZ3MgKyBTTTUwMV9DVVJSRU5UX0NMT0NLKTsKKworCWNsb2NrID0gY2xvY2sgJiB+KDB4RkYgPDwgY2xrc3JjKTsKKwljbG9jayB8PSByZWc8PGNsa3NyYzsKKworCW1vZGUgJj0gMzsJLyogZmluZCBjdXJyZW50IG1vZGUgKi8KKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMToKKwkJd3JpdGVsKGdhdGUsIHNtLT5yZWdzICsgU001MDFfUE9XRVJfTU9ERV8wX0dBVEUpOworCQl3cml0ZWwoY2xvY2ssIHNtLT5yZWdzICsgU001MDFfUE9XRVJfTU9ERV8wX0NMT0NLKTsKKwkJbW9kZSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwljYXNlIDA6CisJCXdyaXRlbChnYXRlLCBzbS0+cmVncyArIFNNNTAxX1BPV0VSX01PREVfMV9HQVRFKTsKKwkJd3JpdGVsKGNsb2NrLCBzbS0+cmVncyArIFNNNTAxX1BPV0VSX01PREVfMV9DTE9DSyk7CisJCW1vZGUgPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCW11dGV4X3VubG9jaygmc20tPmNsb2NrX2xvY2spOworCQlyZXR1cm4gLTE7CisJfQorCisJd3JpdGVsKG1vZGUsIHNtLT5yZWdzICsgU001MDFfUE9XRVJfTU9ERV9DT05UUk9MKTsKKwlzbTUwMV9zeW5jX3JlZ3Moc20pOworCisJZGV2X2luZm8oc20tPmRldiwgImdhdGUgJTA4bHgsIGNsb2NrICUwOGx4LCBtb2RlICUwOGx4XG4iLAorCQkgZ2F0ZSwgY2xvY2ssIG1vZGUpOworCisJbXNsZWVwKDE2KTsKKwltdXRleF91bmxvY2soJnNtLT5jbG9ja19sb2NrKTsKKworCXNtNTAxX2R1bXBfY2xrKHNtKTsKKworCXJldHVybiBzbTUwMV9mcmVxOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChzbTUwMV9zZXRfY2xvY2spOworCisvKiBzbTUwMV9maW5kX2Nsb2NrCisgKgorICogZmluZHMgdGhlIGNsb3Nlc3QgYXZhaWxhYmxlIGZyZXF1ZW5jeSBmb3IgYSBnaXZlbiBjbG9jaworKi8KKwordW5zaWduZWQgbG9uZyBzbTUwMV9maW5kX2Nsb2NrKGludCBjbGtzcmMsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZXFfZnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIHNtNTAxX2ZyZXE7IC8qIHRoZSBmcmVxdWVuY3kgYWNoaXZlYWJsZSBieSB0aGUgNTAxICovCisJc3RydWN0IHNtNTAxX2Nsb2NrIHRvOworCisJc3dpdGNoIChjbGtzcmMpIHsKKwljYXNlIFNNNTAxX0NMT0NLX1AyWENMSzoKKwkJc201MDFfZnJlcSA9IChzbTUwMV9zZWxlY3RfY2xvY2soMiAqIHJlcV9mcmVxLCAmdG8sIDUpIC8gMik7CisJCWJyZWFrOworCisJY2FzZSBTTTUwMV9DTE9DS19WMlhDTEs6CisJCXNtNTAxX2ZyZXEgPSAoc201MDFfc2VsZWN0X2Nsb2NrKDIgKiByZXFfZnJlcSwgJnRvLCAzKSAvIDIpOworCQlicmVhazsKKworCWNhc2UgU001MDFfQ0xPQ0tfTUNMSzoKKwljYXNlIFNNNTAxX0NMT0NLX00xWENMSzoKKwkJc201MDFfZnJlcSA9IHNtNTAxX3NlbGVjdF9jbG9jayhyZXFfZnJlcSwgJnRvLCAzKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzbTUwMV9mcmVxID0gMDsJCS8qIGVycm9yICovCisJfQorCisJcmV0dXJuIHNtNTAxX2ZyZXE7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHNtNTAxX2ZpbmRfY2xvY2spOworCitzdGF0aWMgc3RydWN0IHNtNTAxX2RldmljZSAqdG9fc21fZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwZGV2LCBzdHJ1Y3Qgc201MDFfZGV2aWNlLCBwZGV2KTsKK30KKworLyogc201MDFfZGV2aWNlX3JlbGVhc2UKKyAqCisgKiBBIHJlbGVhc2UgZnVuY3Rpb24gZm9yIHRoZSBwbGF0Zm9ybSBkZXZpY2VzIHdlIGNyZWF0ZSB0byBhbGxvdyB1cyB0bworICogZnJlZSBhbnkgaXRlbXMgd2UgYWxsb2NhdGVkCisqLworCitzdGF0aWMgdm9pZCBzbTUwMV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJa2ZyZWUodG9fc21fZGV2aWNlKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKSk7Cit9CisKKy8qIHNtNTAxX2NyZWF0ZV9zdWJkZXYKKyAqCisgKiBDcmVhdGUgYSBza2VsZXRvbiBwbGF0Zm9ybSBkZXZpY2Ugd2l0aCByZXNvdXJjZXMgZm9yIHBhc3NpbmcgdG8gYQorICogc3ViLWRyaXZlcgorKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKgorc201MDFfY3JlYXRlX3N1YmRldihzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20sCisJCSAgICBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgcmVzX2NvdW50KQoreworCXN0cnVjdCBzbTUwMV9kZXZpY2UgKnNtZGV2OworCisJc21kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc201MDFfZGV2aWNlKSArCisJCQlzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIHJlc19jb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbWRldikKKwkJcmV0dXJuIE5VTEw7CisKKwlzbWRldi0+cGRldi5kZXYucmVsZWFzZSA9IHNtNTAxX2RldmljZV9yZWxlYXNlOworCisJc21kZXYtPnBkZXYubmFtZSA9IG5hbWU7CisJc21kZXYtPnBkZXYuaWQgPSBzbS0+cGRldl9pZDsKKwlzbWRldi0+cGRldi5yZXNvdXJjZSA9IChzdHJ1Y3QgcmVzb3VyY2UgKikoc21kZXYrMSk7CisJc21kZXYtPnBkZXYubnVtX3Jlc291cmNlcyA9IHJlc19jb3VudDsKKworCXNtZGV2LT5wZGV2LmRldi5wYXJlbnQgPSBzbS0+ZGV2OworCisJcmV0dXJuICZzbWRldi0+cGRldjsKK30KKworLyogc201MDFfcmVnaXN0ZXJfZGV2aWNlCisgKgorICogUmVnaXN0ZXIgYSBwbGF0Zm9ybSBkZXZpY2UgY3JlYXRlZCB3aXRoIHNtNTAxX2NyZWF0ZV9zdWJkZXYoKQorKi8KKworc3RhdGljIGludCBzbTUwMV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtLAorCQkJCSBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbTUwMV9kZXZpY2UgKnNtZGV2ID0gdG9fc21fZGV2aWNlKHBkZXYpOworCWludCBwdHI7CisJaW50IHJldDsKKworCWZvciAocHRyID0gMDsgcHRyIDwgcGRldi0+bnVtX3Jlc291cmNlczsgcHRyKyspIHsKKwkJcHJpbnRrKCIlc1slZF0gZmxhZ3MgJTA4bHg6ICUwOGxseC4uJTA4bGx4XG4iLAorCQkgICAgICAgcGRldi0+bmFtZSwgcHRyLAorCQkgICAgICAgcGRldi0+cmVzb3VyY2VbcHRyXS5mbGFncywKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGRldi0+cmVzb3VyY2VbcHRyXS5zdGFydCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGRldi0+cmVzb3VyY2VbcHRyXS5lbmQpOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKKworCWlmIChyZXQgPj0gMCkgeworCQlkZXZfZGJnKHNtLT5kZXYsICJyZWdpc3RlcmVkICVzXG4iLCBwZGV2LT5uYW1lKTsKKwkJbGlzdF9hZGRfdGFpbCgmc21kZXYtPmxpc3QsICZzbS0+ZGV2aWNlcyk7CisJfSBlbHNlCisJCWRldl9lcnIoc20tPmRldiwgImVycm9yIHJlZ2lzdGVyaW5nICVzICglZClcbiIsCisJCQlwZGV2LT5uYW1lLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyogc201MDFfY3JlYXRlX3N1YmlvCisgKgorICogRmlsbCBpbiBhbiBJTyByZXNvdXJjZSBmb3IgYSBzdWIgZGV2aWNlCisqLworCitzdGF0aWMgdm9pZCBzbTUwMV9jcmVhdGVfc3ViaW8oc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtLAorCQkJICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJICAgICAgIHJlc291cmNlX3NpemVfdCBvZmZzLAorCQkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplKQoreworCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKwlyZXMtPnBhcmVudCA9IHNtLT5pb19yZXM7CisJcmVzLT5zdGFydCA9IHNtLT5pb19yZXMtPnN0YXJ0ICsgb2ZmczsKKwlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyBzaXplIC0gMTsKK30KKworLyogc201MDFfY3JlYXRlX21lbQorICoKKyAqIEZpbGwgaW4gYW4gTUVNIHJlc291cmNlIGZvciBhIHN1YiBkZXZpY2UKKyovCisKK3N0YXRpYyB2b2lkIHNtNTAxX2NyZWF0ZV9tZW0oc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtLAorCQkJICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90ICpvZmZzLAorCQkJICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSkKK3sKKwkqb2ZmcyAtPSBzaXplOwkJLyogYWRqdXN0IG1lbW9yeSBzaXplICovCisKKwlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJcmVzLT5wYXJlbnQgPSBzbS0+bWVtX3JlczsKKwlyZXMtPnN0YXJ0ID0gc20tPm1lbV9yZXMtPnN0YXJ0ICsgKm9mZnM7CisJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgc2l6ZSAtIDE7Cit9CisKKy8qIHNtNTAxX2NyZWF0ZV9pcnEKKyAqCisgKiBGaWxsIGluIGFuIElSUSByZXNvdXJjZSBmb3IgYSBzdWIgZGV2aWNlCisqLworCitzdGF0aWMgdm9pZCBzbTUwMV9jcmVhdGVfaXJxKHN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbSwKKwkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfSVJROworCXJlcy0+cGFyZW50ID0gTlVMTDsKKwlyZXMtPnN0YXJ0ID0gcmVzLT5lbmQgPSBzbS0+aXJxOworfQorCitzdGF0aWMgaW50IHNtNTAxX3JlZ2lzdGVyX3VzYmhvc3Qoc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtLAorCQkJCSAgcmVzb3VyY2Vfc2l6ZV90ICptZW1fYXZhaWwpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXBkZXYgPSBzbTUwMV9jcmVhdGVfc3ViZGV2KHNtLCAic201MDEtdXNiIiwgMyk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNtNTAxX2NyZWF0ZV9zdWJpbyhzbSwgJnBkZXYtPnJlc291cmNlWzBdLCAweDQwMDAwLCAweDIwMDAwKTsKKwlzbTUwMV9jcmVhdGVfbWVtKHNtLCAmcGRldi0+cmVzb3VyY2VbMV0sIG1lbV9hdmFpbCwgMjU2KjEwMjQpOworCXNtNTAxX2NyZWF0ZV9pcnEoc20sICZwZGV2LT5yZXNvdXJjZVsyXSk7CisKKwlyZXR1cm4gc201MDFfcmVnaXN0ZXJfZGV2aWNlKHNtLCBwZGV2KTsKK30KKworc3RhdGljIGludCBzbTUwMV9yZWdpc3Rlcl9kaXNwbGF5KHN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbSwKKwkJCQkgIHJlc291cmNlX3NpemVfdCAqbWVtX2F2YWlsKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlwZGV2ID0gc201MDFfY3JlYXRlX3N1YmRldihzbSwgInNtNTAxLWZiIiwgNCk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNtNTAxX2NyZWF0ZV9zdWJpbyhzbSwgJnBkZXYtPnJlc291cmNlWzBdLCAweDgwMDAwLCAweDEwMDAwKTsKKwlzbTUwMV9jcmVhdGVfc3ViaW8oc20sICZwZGV2LT5yZXNvdXJjZVsxXSwgMHgxMDAwMDAsIDB4NTAwMDApOworCXNtNTAxX2NyZWF0ZV9tZW0oc20sICZwZGV2LT5yZXNvdXJjZVsyXSwgbWVtX2F2YWlsLCAqbWVtX2F2YWlsKTsKKwlzbTUwMV9jcmVhdGVfaXJxKHNtLCAmcGRldi0+cmVzb3VyY2VbM10pOworCisJcmV0dXJuIHNtNTAxX3JlZ2lzdGVyX2RldmljZShzbSwgcGRldik7Cit9CisKKy8qIHNtNTAxX2RiZ19yZWdzCisgKgorICogRGVidWcgYXR0cmlidXRlIHRvIGF0dGFjaCB0byBwYXJlbnQgZGV2aWNlIHRvIHNob3cgY29yZSByZWdpc3RlcnMKKyovCisKK3N0YXRpYyBzc2l6ZV90IHNtNTAxX2RiZ19yZWdzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWZmKQoreworCXN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpCTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCWNoYXIgKnB0ciA9IGJ1ZmY7CisJaW50IHJldDsKKworCWZvciAocmVnID0gMHgwMDsgcmVnIDwgMHg3MDsgcmVnICs9IDQpIHsKKwkJcmV0ID0gc3ByaW50ZihwdHIsICIlMDh4ID0gJTA4eFxuIiwKKwkJCSAgICAgIHJlZywgcmVhZGwoc20tPnJlZ3MgKyByZWcpKTsKKwkJcHRyICs9IHJldDsKKwl9CisKKwlyZXR1cm4gcHRyIC0gYnVmZjsKK30KKworCitzdGF0aWMgREVWSUNFX0FUVFIoZGJnX3JlZ3MsIDA2NjYsIHNtNTAxX2RiZ19yZWdzLCBOVUxMKTsKKworLyogc201MDFfaW5pdF9yZWcKKyAqCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBpbml0IGNvZGUgdG8gc2V0dXAgYSByZWdpc3RlcgorKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNtNTAxX2luaXRfcmVnKHN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcmVnLAorCQkJCSAgc3RydWN0IHNtNTAxX3JlZ19pbml0ICpyKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJdG1wID0gcmVhZGwoc20tPnJlZ3MgKyByZWcpOworCXRtcCB8PSByLT5zZXQ7CisJdG1wICY9IH5yLT5tYXNrOworCXdyaXRlbCh0bXAsIHNtLT5yZWdzICsgcmVnKTsKK30KKworLyogc201MDFfaW5pdF9yZWdzCisgKgorICogU2V0dXAgY29yZSByZWdpc3RlciB2YWx1ZXMKKyovCisKK3N0YXRpYyB2b2lkIHNtNTAxX2luaXRfcmVncyhzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20sCisJCQkgICAgc3RydWN0IHNtNTAxX2luaXRkYXRhICppbml0KQoreworCXNtNTAxX21pc2NfY29udHJvbChzbS0+ZGV2LAorCQkJICAgaW5pdC0+bWlzY19jb250cm9sLnNldCwKKwkJCSAgIGluaXQtPm1pc2NfY29udHJvbC5tYXNrKTsKKworCXNtNTAxX2luaXRfcmVnKHNtLCBTTTUwMV9NSVNDX1RJTUlORywgJmluaXQtPm1pc2NfdGltaW5nKTsKKwlzbTUwMV9pbml0X3JlZyhzbSwgU001MDFfR1BJTzMxXzBfQ09OVFJPTCwgJmluaXQtPmdwaW9fbG93KTsKKwlzbTUwMV9pbml0X3JlZyhzbSwgU001MDFfR1BJTzYzXzMyX0NPTlRST0wsICZpbml0LT5ncGlvX2hpZ2gpOworCisJaWYgKGluaXQtPm1jbGspIHsKKwkJZGV2X2luZm8oc20tPmRldiwgInNldHRpbmcgTUNMSyB0byAlbGRcbiIsIGluaXQtPm1jbGspOworCQlzbTUwMV9zZXRfY2xvY2soc20tPmRldiwgU001MDFfQ0xPQ0tfTUNMSywgaW5pdC0+bWNsayk7CisJfQorCisJaWYgKGluaXQtPm0xeGNsaykgeworCQlkZXZfaW5mbyhzbS0+ZGV2LCAic2V0dGluZyBNMVhDTEsgdG8gJWxkXG4iLCBpbml0LT5tMXhjbGspOworCQlzbTUwMV9zZXRfY2xvY2soc20tPmRldiwgU001MDFfQ0xPQ0tfTTFYQ0xLLCBpbml0LT5tMXhjbGspOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzbTUwMV9tZW1fbG9jYWxbXSA9IHsKKwlbMF0JPSA0KjEwMjQqMTAyNCwKKwlbMV0JPSA4KjEwMjQqMTAyNCwKKwlbMl0JPSAxNioxMDI0KjEwMjQsCisJWzNdCT0gMzIqMTAyNCoxMDI0LAorCVs0XQk9IDY0KjEwMjQqMTAyNCwKKwlbNV0JPSAyKjEwMjQqMTAyNCwKK307CisKKy8qIHNtNTAxX2luaXRfZGV2CisgKgorICogQ29tbW9uIGluaXQgY29kZSBmb3IgYW4gU001MDEKKyovCisKK3N0YXRpYyBpbnQgc201MDFfaW5pdF9kZXYoc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtKQoreworCXJlc291cmNlX3NpemVfdCBtZW1fYXZhaWw7CisJdW5zaWduZWQgbG9uZyBkcmFtY3RybDsKKwlpbnQgcmV0OworCisJbXV0ZXhfaW5pdCgmc20tPmNsb2NrX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZzbS0+cmVnX2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnNtLT5kZXZpY2VzKTsKKworCWRyYW1jdHJsID0gcmVhZGwoc20tPnJlZ3MgKyBTTTUwMV9EUkFNX0NPTlRST0wpOworCisJbWVtX2F2YWlsID0gc201MDFfbWVtX2xvY2FsWyhkcmFtY3RybCA+PiAxMykgJiAweDddOworCisJZGV2X2luZm8oc20tPmRldiwgIlNNNTAxIEF0ICVwOiBWZXJzaW9uICUwOHgsICVsZCBNYiwgSVJRICVkXG4iLAorCQkgc20tPnJlZ3MsIHJlYWRsKHNtLT5yZWdzICsgU001MDFfREVWSUNFSUQpLAorCQkgKHVuc2lnbmVkIGxvbmcpbWVtX2F2YWlsID4+IDIwLCBzbS0+aXJxKTsKKworCWRldl9pbmZvKHNtLT5kZXYsICJDdXJyZW50R2F0ZSAgICAgICUwOHhcbiIsIHJlYWRsKHNtLT5yZWdzKzB4MzgpKTsKKwlkZXZfaW5mbyhzbS0+ZGV2LCAiQ3VycmVudENsb2NrICAgICAlMDh4XG4iLCByZWFkbChzbS0+cmVncysweDNjKSk7CisJZGV2X2luZm8oc20tPmRldiwgIlBvd2VyTW9kZUNvbnRyb2wgJTA4eFxuIiwgcmVhZGwoc20tPnJlZ3MrMHg1NCkpOworCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKHNtLT5kZXYsICZkZXZfYXR0cl9kYmdfcmVncyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihzbS0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1ZyByZWdzIGZpbGVcbiIpOworCisJc201MDFfZHVtcF9jbGsoc20pOworCisJLyogY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgc29tZSBkZXZpY2UgaW5pdGlhbGlzYXRpb24gKi8KKworCWlmIChzbS0+cGxhdGRhdGEpIHsKKwkJc3RydWN0IHNtNTAxX3BsYXRkYXRhICpwZGF0YSA9IHNtLT5wbGF0ZGF0YTsKKworCQlpZiAocGRhdGEtPmluaXQpIHsKKwkJCXNtNTAxX2luaXRfcmVncyhzbSwgc20tPnBsYXRkYXRhLT5pbml0KTsKKworCQkJaWYgKHBkYXRhLT5pbml0LT5kZXZpY2VzICYgU001MDFfVVNFX1VTQl9IT1NUKQorCQkJCXNtNTAxX3JlZ2lzdGVyX3VzYmhvc3Qoc20sICZtZW1fYXZhaWwpOworCQl9CisJfQorCisJLyogYWx3YXlzIGNyZWF0ZSBhIGZyYW1lYnVmZmVyICovCisJc201MDFfcmVnaXN0ZXJfZGlzcGxheShzbSwgJm1lbV9hdmFpbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbTUwMV9wbGF0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc207CisJaW50IGVycjsKKworCXNtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNtNTAxX2RldmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc20gPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgZGV2aWNlIGRhdGFcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycjE7CisJfQorCisJc20tPmRldiA9ICZkZXYtPmRldjsKKwlzbS0+cGRldl9pZCA9IGRldi0+aWQ7CisJc20tPmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKwlzbS0+aW9fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCXNtLT5tZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXNtLT5wbGF0ZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoc20tPmlycSA8IDApIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGlycSByZXNvdXJjZVxuIik7CisJCWVyciA9IHNtLT5pcnE7CisJCWdvdG8gZXJyX3JlczsKKwl9CisKKwlpZiAoc20tPmlvX3JlcyA9PSBOVUxMIHx8IHNtLT5tZW1fcmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IElPIHJlc291cmNlXG4iKTsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfcmVzOworCX0KKworCXNtLT5yZWdzX2NsYWltID0gcmVxdWVzdF9tZW1fcmVnaW9uKHNtLT5pb19yZXMtPnN0YXJ0LAorCQkJCQkgICAgMHgxMDAsICJzbTUwMSIpOworCisJaWYgKHNtLT5yZWdzX2NsYWltID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgY2xhaW0gcmVnaXN0ZXJzXG4iKTsKKwkJZXJyPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JlczsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHNtKTsKKworCXNtLT5yZWdzID0gaW9yZW1hcChzbS0+aW9fcmVzLT5zdGFydCwKKwkJCSAgIChzbS0+aW9fcmVzLT5lbmQgLSBzbS0+aW9fcmVzLT5zdGFydCkgLSAxKTsKKworCWlmIChzbS0+cmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIHJlZ2lzdGVyc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX2NsYWltOworCX0KKworCXJldHVybiBzbTUwMV9pbml0X2RldihzbSk7CisKKyBlcnJfY2xhaW06CisJcmVsZWFzZV9yZXNvdXJjZShzbS0+cmVnc19jbGFpbSk7CisJa2ZyZWUoc20tPnJlZ3NfY2xhaW0pOworIGVycl9yZXM6CisJa2ZyZWUoc20pOworIGVycjE6CisJcmV0dXJuIGVycjsKKworfQorCisvKiBJbml0aWFsaXNhdGlvbiBkYXRhIGZvciBQQ0kgZGV2aWNlcyAqLworCitzdGF0aWMgc3RydWN0IHNtNTAxX2luaXRkYXRhIHNtNTAxX3BjaV9pbml0ZGF0YSA9IHsKKwkuZ3Bpb19oaWdoCT0geworCQkuc2V0CT0gMHgzRjAwMDAwMCwJCS8qIDI0Yml0IHBhbmVsICovCisJCS5tYXNrCT0gMHgwLAorCX0sCisJLm1pc2NfdGltaW5nCT0geworCQkuc2V0CT0gMHgwMTAxMDAsCQkvKiBTRFJBTSB0aW1pbmcgKi8KKwkJLm1hc2sJPSAweDFGMUYwMCwKKwl9LAorCS5taXNjX2NvbnRyb2wJPSB7CisJCS5zZXQJPSBTTTUwMV9NSVNDX1BOTF8yNEJJVCwKKwkJLm1hc2sJPSAwLAorCX0sCisKKwkuZGV2aWNlcwk9IFNNNTAxX1VTRV9BTEwsCisJLm1jbGsJCT0gMTAwICogTUhaLAorCS5tMXhjbGsJCT0gMTYwICogTUhaLAorfTsKKworc3RhdGljIHN0cnVjdCBzbTUwMV9wbGF0ZGF0YV9mYnN1YiBzbTUwMV9wZGF0YV9mYnN1YiA9IHsKKwkuZmxhZ3MJCT0gKFNNNTAxRkJfRkxBR19VU0VfSU5JVF9NT0RFIHwKKwkJCSAgIFNNNTAxRkJfRkxBR19VU0VfSFdDVVJTT1IgfAorCQkJICAgU001MDFGQl9GTEFHX1VTRV9IV0FDQ0VMIHwKKwkJCSAgIFNNNTAxRkJfRkxBR19ESVNBQkxFX0FUX0VYSVQpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbTUwMV9wbGF0ZGF0YV9mYiBzbTUwMV9mYl9wZGF0YSA9IHsKKwkuZmJfcm91dGUJPSBTTTUwMV9GQl9PV04sCisJLmZiX2NydAkJPSAmc201MDFfcGRhdGFfZmJzdWIsCisJLmZiX3BubAkJPSAmc201MDFfcGRhdGFfZmJzdWIsCit9OworCitzdGF0aWMgc3RydWN0IHNtNTAxX3BsYXRkYXRhIHNtNTAxX3BjaV9wbGF0ZGF0YSA9IHsKKwkuaW5pdAkJPSAmc201MDFfcGNpX2luaXRkYXRhLAorCS5mYgkJPSAmc201MDFfZmJfcGRhdGEsCit9OworCitzdGF0aWMgaW50IHNtNTAxX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbTsKKwlpbnQgZXJyOworCisJc20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc201MDFfZGV2ZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChzbSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gbWVtb3J5IGZvciBkZXZpY2UgZGF0YVxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwkvKiBzZXQgYSBkZWZhdWx0IHNldCBvZiBwbGF0Zm9ybSBkYXRhICovCisJZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHNtLT5wbGF0ZGF0YSA9ICZzbTUwMV9wY2lfcGxhdGRhdGE7CisKKwkvKiBzZXQgYSBob3BlZnVsbHkgdW5pcXVlIGlkIGZvciBvdXIgY2hpbGQgcGxhdGZvcm0gZGV2aWNlcyAqLworCXNtLT5wZGV2X2lkID0gMzIgKyBkZXYtPmRldmZuOworCisJcGNpX3NldF9kcnZkYXRhKGRldiwgc20pOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiY2Fubm90IGVuYWJsZSBkZXZpY2VcbiIpOworCQlnb3RvIGVycjI7CisJfQorCisJc20tPmRldiA9ICZkZXYtPmRldjsKKwlzbS0+aXJxID0gZGV2LT5pcnE7CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkvKiBpZiB0aGUgc3lzdGVtIGlzIGJpZy1lbmRpYW4sIHdlIG1vc3QgcHJvYmFibHkgaGF2ZSBhCisJICogdHJhbnNsYXRpb24gaW4gdGhlIElPIGxheWVyIG1ha2luZyB0aGUgUENJIGJ1cyBsaXR0bGUgZW5kaWFuCisJICogc28gbWFrZSB0aGUgZnJhbWVidWZmZXIgc3dhcHBlZCBwaXhlbHMgKi8KKworCXNtNTAxX2ZiX3BkYXRhLmZsYWdzIHw9IFNNNTAxX0ZCUERfU1dBUF9GQl9FTkRJQU47CisjZW5kaWYKKworCS8qIGNoZWNrIG91ciByZXNvdXJjZXMgKi8KKworCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAicmVnaW9uICMwIGlzIG5vdCBtZW1vcnk/XG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnIzOworCX0KKworCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhkZXYsIDEpICYgSU9SRVNPVVJDRV9NRU0pKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAicmVnaW9uICMxIGlzIG5vdCBtZW1vcnk/XG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnIzOworCX0KKworCS8qIG1ha2Ugb3VyIHJlc291cmNlcyByZWFkeSBmb3Igc2hhcmluZyAqLworCisJc20tPmlvX3JlcyA9ICZkZXYtPnJlc291cmNlWzFdOworCXNtLT5tZW1fcmVzID0gJmRldi0+cmVzb3VyY2VbMF07CisKKwlzbS0+cmVnc19jbGFpbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihzbS0+aW9fcmVzLT5zdGFydCwKKwkJCQkJICAgIDB4MTAwLCAic201MDEiKTsKKwlpZiAoc20tPnJlZ3NfY2xhaW0gPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBjbGFpbSByZWdpc3RlcnNcbiIpOworCQllcnI9IC1FQlVTWTsKKwkJZ290byBlcnIzOworCX0KKworCXNtLT5yZWdzID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAxKSwKKwkJCSAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAxKSk7CisKKwlpZiAoc20tPnJlZ3MgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCByZW1hcCByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycjQ7CisJfQorCisJc201MDFfaW5pdF9kZXYoc20pOworCXJldHVybiAwOworCisgZXJyNDoKKwlyZWxlYXNlX3Jlc291cmNlKHNtLT5yZWdzX2NsYWltKTsKKwlrZnJlZShzbS0+cmVnc19jbGFpbSk7CisgZXJyMzoKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKyBlcnIyOgorCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKHNtKTsKKyBlcnIxOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNtNTAxX3JlbW92ZV9zdWIoc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtLAorCQkJICAgICBzdHJ1Y3Qgc201MDFfZGV2aWNlICpzbWRldikKK3sKKwlsaXN0X2RlbCgmc21kZXYtPmxpc3QpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZzbWRldi0+cGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHNtNTAxX2Rldl9yZW1vdmUoc3RydWN0IHNtNTAxX2RldmRhdGEgKnNtKQoreworCXN0cnVjdCBzbTUwMV9kZXZpY2UgKnNtZGV2LCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNtZGV2LCB0bXAsICZzbS0+ZGV2aWNlcywgbGlzdCkKKwkJc201MDFfcmVtb3ZlX3N1YihzbSwgc21kZXYpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKHNtLT5kZXYsICZkZXZfYXR0cl9kYmdfcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNtNTAxX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCXNtNTAxX2Rldl9yZW1vdmUoc20pOworCWlvdW5tYXAoc20tPnJlZ3MpOworCisJcmVsZWFzZV9yZXNvdXJjZShzbS0+cmVnc19jbGFpbSk7CisJa2ZyZWUoc20tPnJlZ3NfY2xhaW0pOworCisJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Cit9CisKK3N0YXRpYyBpbnQgc201MDFfcGxhdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbTUwMV9kZXZkYXRhICpzbSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlzbTUwMV9kZXZfcmVtb3ZlKHNtKTsKKwlpb3VubWFwKHNtLT5yZWdzKTsKKworCXJlbGVhc2VfcmVzb3VyY2Uoc20tPnJlZ3NfY2xhaW0pOworCWtmcmVlKHNtLT5yZWdzX2NsYWltKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc201MDFfcGNpX3RibFtdID0geworCXsgMHgxMjZmLCAweDA1MDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7IDAsIH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc201MDFfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzbTUwMV9wY2lfZHJ2ID0geworCS5uYW1lCQk9ICJzbTUwMSIsCisJLmlkX3RhYmxlCT0gc201MDFfcGNpX3RibCwKKwkucHJvYmUJCT0gc201MDFfcGNpX3Byb2JlLAorCS5yZW1vdmUJCT0gc201MDFfcGNpX3JlbW92ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNtNTAxX3BsYXRfZHJ2ID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzbTUwMSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHNtNTAxX3BsYXRfcHJvYmUsCisJLnJlbW92ZQkJPSBzbTUwMV9wbGF0X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNtNTAxX2Jhc2VfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc201MDFfcGxhdF9kcnYpOworCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJnNtNTAxX3BjaV9kcnYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc201MDFfYmFzZV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtNTAxX3BsYXRfZHJ2KTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNtNTAxX3BjaV9kcnYpOworfQorCittb2R1bGVfaW5pdChzbTUwMV9iYXNlX2luaXQpOworbW9kdWxlX2V4aXQoc201MDFfYmFzZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTTTUwMSBDb3JlIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiwgVmluY2VudCBTYW5kZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IGJlZGFlNGEuLjgwYjE5OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC0xMDcsNCArMTA3LDE5IEBACiAKIAkgIElmIHlvdSBoYXZlIGFuIE1TSSBTMjcwIGxhcHRvcCwgc2F5IFkgb3IgTSBoZXJlLgogCitjb25maWcgU09OWV9MQVBUT1AKKwl0cmlzdGF0ZSAiU29ueSBMYXB0b3AgRXh0cmFzIgorCWRlcGVuZHMgb24gWDg2ICYmIEFDUEkKKwlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCSAgLS0taGVscC0tLQorCSAgVGhpcyBtaW5pLWRyaXZlciBkcml2ZXMgdGhlIFNOQyBkZXZpY2UgcHJlc2VudCBpbiB0aGUgQUNQSSBCSU9TIG9mCisJICB0aGUgU29ueSBWYWlvIGxhcHRvcHMuCisKKwkgIEl0IGdpdmVzIGFjY2VzcyB0byBzb21lIGV4dHJhIGxhcHRvcCBmdW5jdGlvbmFsaXRpZXMuIEluIGl0cyBjdXJyZW50CisJICBmb3JtLCB0aGlzIGRyaXZlciBsZXQgdGhlIHVzZXIgc2V0IG9yIHF1ZXJ5IHRoZSBzY3JlZW4gYnJpZ2h0bmVzcworCSAgdGhyb3VnaCB0aGUgYmFja2xpZ2h0IHN1YnN5c3RlbSBhbmQgcmVtb3ZlL2FwcGx5IHBvd2VyIHRvIHNvbWUKKwkgIGRldmljZXMuCisKKwkgIFJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb255LWxhcHRvcC50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKaW5kZXggMzVkYTUzYy4uNzc5M2NjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQpAQCAtMTEsMyArMTEsNCBAQAogb2JqLSQoQ09ORklHX1RJRk1fQ09SRSkgICAgICAgCSs9IHRpZm1fY29yZS5vCiBvYmotJChDT05GSUdfVElGTV83WFgxKSAgICAgICAJKz0gdGlmbV83eHgxLm8KIG9iai0kKENPTkZJR19TR0lfSU9DNCkJCSs9IGlvYzQubworb2JqLSQoQ09ORklHX1NPTllfTEFQVE9QKQkrPSBzb255LWxhcHRvcC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvYXN1cy1sYXB0b3AuYyBiL2RyaXZlcnMvbWlzYy9hc3VzLWxhcHRvcC5jCmluZGV4IDg2MWMzOTkuLjI5NWU5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9hc3VzLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvbWlzYy9hc3VzLWxhcHRvcC5jCkBAIC0xOTUsMTEgKzE5NSw5IEBACiAgKi8KIHN0YXRpYyBpbnQgcmVhZF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCk7CiBzdGF0aWMgaW50IHVwZGF0ZV9ibF9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKTsKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgYXN1c2JsX2RhdGEgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYXN1c2JsX29wcyA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMgPSB1cGRhdGVfYmxfc3RhdHVzLAotCS5tYXhfYnJpZ2h0bmVzcyA9IDE1LAogfTsKIAogLyogVGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IHVwZGF0ZSB0aGUgTEVEJ3MsIGFuZCBhcmUgY2FsbGVkIGZyb20gYQpAQCAtMzQ5LDEzICszNDcsOCBAQAogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IGFzdXNfYmFja2xpZ2h0X2RldmljZTsKIAogCWlmIChiZCkgewotCQlkb3duKCZiZC0+c2VtKTsKLQkJaWYgKGxpa2VseShiZC0+cHJvcHMpKSB7Ci0JCQliZC0+cHJvcHMtPnBvd2VyID0gYmxhbms7Ci0JCQlpZiAobGlrZWx5KGJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cykpCi0JCQkJYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKGJkKTsKLQkJfQotCQl1cCgmYmQtPnNlbSk7CisJCWJkLT5wcm9wcy5wb3dlciA9IGJsYW5rOworCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CiAJfQogfQogCkBAIC0zODcsMTMgKzM4MCwxMyBAQAogc3RhdGljIGludCB1cGRhdGVfYmxfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlpbnQgcnY7Ci0JaW50IHZhbHVlID0gYmQtPnByb3BzLT5icmlnaHRuZXNzOworCWludCB2YWx1ZSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwogCiAJcnYgPSBzZXRfYnJpZ2h0bmVzcyhiZCwgdmFsdWUpOwogCWlmIChydikKIAkJcmV0dXJuIHJ2OwogCi0JdmFsdWUgPSAoYmQtPnByb3BzLT5wb3dlciA9PSBGQl9CTEFOS19VTkJMQU5LKSA/IDEgOiAwOworCXZhbHVlID0gKGJkLT5wcm9wcy5wb3dlciA9PSBGQl9CTEFOS19VTkJMQU5LKSA/IDEgOiAwOwogCXJldHVybiBzZXRfbGNkX3N0YXRlKHZhbHVlKTsKIH0KIApAQCAtMTAxOSw3ICsxMDEyLDcgQEAKIAogCWlmIChicmlnaHRuZXNzX3NldF9oYW5kbGUgJiYgbGNkX3N3aXRjaF9oYW5kbGUpIHsKIAkJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKEFTVVNfSE9US19GSUxFLCBkZXYsCi0JCQkJCSAgICAgICBOVUxMLCAmYXN1c2JsX2RhdGEpOworCQkJCQkgICAgICAgTlVMTCwgJmFzdXNibF9vcHMpOwogCQlpZiAoSVNfRVJSKGJkKSkgewogCQkJcHJpbnRrKEFTVVNfRVJSCiAJCQkgICAgICAgIkNvdWxkIG5vdCByZWdpc3RlciBhc3VzIGJhY2tsaWdodCBkZXZpY2VcbiIpOwpAQCAtMTAyOSwxNCArMTAyMiwxMCBAQAogCiAJCWFzdXNfYmFja2xpZ2h0X2RldmljZSA9IGJkOwogCi0JCWRvd24oJmJkLT5zZW0pOwotCQlpZiAobGlrZWx5KGJkLT5wcm9wcykpIHsKLQkJCWJkLT5wcm9wcy0+YnJpZ2h0bmVzcyA9IHJlYWRfYnJpZ2h0bmVzcyhOVUxMKTsKLQkJCWJkLT5wcm9wcy0+cG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwotCQkJaWYgKGxpa2VseShiZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMpKQotCQkJCWJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cyhiZCk7Ci0JCX0KLQkJdXAoJmJkLT5zZW0pOworCQliZC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSAxNTsKKwkJYmQtPnByb3BzLmJyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MoTlVMTCk7CisJCWJkLT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJkKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDg4LDExICsxMDc3LDYgQEAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWFjcGlfc3BlY2lmaWNfaG90a2V5X2VuYWJsZWQpIHsKLQkJcHJpbnRrKEFTVVNfRVJSICJVc2luZyBnZW5lcmljIGhvdGtleSBkcml2ZXJcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfaG90a19kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKQogCQlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL21zaS1sYXB0b3AuYyBiL2RyaXZlcnMvbWlzYy9tc2ktbGFwdG9wLmMKaW5kZXggOGU1ZTA3ZS4uNjhjNGI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL21zaS1sYXB0b3AuYworKysgYi9kcml2ZXJzL21pc2MvbXNpLWxhcHRvcC5jCkBAIC0xNTcsMTQgKzE1NywxMiBAQAogCiBzdGF0aWMgaW50IGJsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmIpCiB7Ci0JcmV0dXJuIHNldF9sY2RfbGV2ZWwoYi0+cHJvcHMtPmJyaWdodG5lc3MpOworCXJldHVybiBzZXRfbGNkX2xldmVsKGItPnByb3BzLmJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIG1zaWJsX3Byb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBtc2libF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gYmxfZ2V0X2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMgID0gYmxfdXBkYXRlX3N0YXR1cywKLQkubWF4X2JyaWdodG5lc3MgPSBNU0lfTENEX0xFVkVMX01BWC0xLAogfTsKIAogc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICptc2libF9kZXZpY2U7CkBAIC0zMTgsMTAgKzMxNiwxMiBAQAogCS8qIFJlZ2lzdGVyIGJhY2tsaWdodCBzdHVmZiAqLwogCiAJbXNpYmxfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigibXNpLWxhcHRvcC1ibCIsIE5VTEwsIE5VTEwsCi0JCQkJCQkmbXNpYmxfcHJvcHMpOworCQkJCQkJJm1zaWJsX29wcyk7CiAJaWYgKElTX0VSUihtc2libF9kZXZpY2UpKQogCQlyZXR1cm4gUFRSX0VSUihtc2libF9kZXZpY2UpOwogCisJbXNpYmxfZGV2aWNlLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IE1TSV9MQ0RfTEVWRUxfTUFYLTEsCisKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1zaXBmX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsX2JhY2tsaWdodDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zb255LWxhcHRvcC5jIGIvZHJpdmVycy9taXNjL3NvbnktbGFwdG9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViZTI0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9zb255LWxhcHRvcC5jCkBAIC0wLDAgKzEsNTY0IEBACisvKgorICogQUNQSSBTb255IE5vdGVib29rIENvbnRyb2wgRHJpdmVyIChTTkMpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBNYXR0aWEgRG9uZ2lsaSA8bWFsYXR0aWFAbGludXguaXQ+CisgKgorICogUGFydHMgb2YgdGhpcyBkcml2ZXIgaW5zcGlyZWQgZnJvbSBhc3VzX2FjcGkuYyBhbmQgaWJtX2FjcGkuYworICogd2hpY2ggYXJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIHJlc3BlY3RpdmUgYXV0aG9ycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2RlZmluZSBBQ1BJX1NOQ19DTEFTUwkJInNvbnkiCisjZGVmaW5lIEFDUElfU05DX0hJRAkJIlNOWTUwMDEiCisjZGVmaW5lIEFDUElfU05DX0RSSVZFUl9OQU1FCSJBQ1BJIFNvbnkgTm90ZWJvb2sgQ29udHJvbCBEcml2ZXIgdjAuNCIKKworLyogdGhlIGRldmljZSB1c2VzIDEtYmFzZWQgdmFsdWVzLCB3aGlsZSB0aGUgYmFja2xpZ2h0IHN1YnN5c3RlbSB1c2VzCisgICAwLWJhc2VkIHZhbHVlcyAqLworI2RlZmluZSBTT05ZX01BWF9CUklHSFRORVNTCTgKKworI2RlZmluZSBMT0dfUEZYCQkJS0VSTl9XQVJOSU5HICJzb255LWxhcHRvcDogIgorCitNT0RVTEVfQVVUSE9SKCJTdGVsaWFuIFBvcCwgTWF0dGlhIERvbmdpbGkiKTsKK01PRFVMRV9ERVNDUklQVElPTihBQ1BJX1NOQ19EUklWRVJfTkFNRSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IHRoaXMgdG8gMSAoYW5kIFJURk0pIGlmIHlvdSB3YW50IHRvIGhlbHAgIgorCQkgInRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlciIpOworCitzdGF0aWMgc3NpemVfdCBzb255X2FjcGlfc2hvdyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICosCisJCQkgICAgICBjaGFyICopOworc3RhdGljIHNzaXplX3Qgc29ueV9hY3BpX3N0b3JlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiwKKwkJCSAgICAgICBjb25zdCBjaGFyICosIHNpemVfdCk7CitzdGF0aWMgaW50IGJvb2xlYW5fdmFsaWRhdGUoY29uc3QgaW50LCBjb25zdCBpbnQpOworc3RhdGljIGludCBicmlnaHRuZXNzX2RlZmF1bHRfdmFsaWRhdGUoY29uc3QgaW50LCBjb25zdCBpbnQpOworCisjZGVmaW5lIFNOQ19WQUxJREFURV9JTgkJMAorI2RlZmluZSBTTkNfVkFMSURBVEVfT1VUCTEKKworc3RydWN0IHNvbnlfYWNwaV92YWx1ZSB7CisJY2hhciAqbmFtZTsJCS8qIG5hbWUgb2YgdGhlIGVudHJ5ICovCisJY2hhciAqKmFjcGlnZXQ7CQkvKiBuYW1lcyBvZiB0aGUgQUNQSSBnZXQgZnVuY3Rpb24gKi8KKwljaGFyICoqYWNwaXNldDsJCS8qIG5hbWVzIG9mIHRoZSBBQ1BJIHNldCBmdW5jdGlvbiAqLworCWludCAoKnZhbGlkYXRlKShjb25zdCBpbnQsIGNvbnN0IGludCk7CS8qIGlucHV0L291dHB1dCB2YWxpZGF0aW9uICovCisJaW50IHZhbHVlOwkJLyogY3VycmVudCBzZXR0aW5nICovCisJaW50IHZhbGlkOwkJLyogSGFzIGV2ZXIgYmVlbiBzZXQgKi8KKwlpbnQgZGVidWc7CQkvKiBhY3RpdmUgb25seSBpbiBkZWJ1ZyBtb2RlID8gKi8KKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZhdHRyOwkvKiBzeXNmcyBhdHJpYnV0ZSAqLworfTsKKworI2RlZmluZSBIQU5ETEVfTkFNRVMoX25hbWUsIF92YWx1ZXMuLi4pIFwKKwlzdGF0aWMgY2hhciAqc25jXyMjX25hbWVbXSA9IHsgX3ZhbHVlcywgTlVMTCB9CisKKyNkZWZpbmUgU09OWV9BQ1BJX1ZBTFVFKF9uYW1lLCBfZ2V0dGVycywgX3NldHRlcnMsIF92YWxpZGF0ZSwgX2RlYnVnKSBcCisJeyBcCisJCS5uYW1lCQk9IF9fc3RyaW5naWZ5KF9uYW1lKSwgXAorCQkuYWNwaWdldAk9IF9nZXR0ZXJzLCBcCisJCS5hY3Bpc2V0CT0gX3NldHRlcnMsIFwKKwkJLnZhbGlkYXRlCT0gX3ZhbGlkYXRlLCBcCisJCS5kZWJ1ZwkJPSBfZGVidWcsIFwKKwkJLmRldmF0dHIJPSBfX0FUVFIoX25hbWUsIDAsIHNvbnlfYWNwaV9zaG93LCBzb255X2FjcGlfc3RvcmUpLCBcCisJfQorCisjZGVmaW5lIFNPTllfQUNQSV9WQUxVRV9OVUxMCXsgLm5hbWUgPSBOVUxMIH0KKworSEFORExFX05BTUVTKGZua2V5X2dldCwgIkdIS0UiKTsKKworSEFORExFX05BTUVTKGJyaWdodG5lc3NfZGVmX2dldCwgIkdQQlIiKTsKK0hBTkRMRV9OQU1FUyhicmlnaHRuZXNzX2RlZl9zZXQsICJTUEJSIik7CisKK0hBTkRMRV9OQU1FUyhjZHBvd2VyX2dldCwgIkdDRFAiKTsKK0hBTkRMRV9OQU1FUyhjZHBvd2VyX3NldCwgIlNDRFAiLCAiQ0RQVyIpOworCitIQU5ETEVfTkFNRVMoYXVkaW9wb3dlcl9nZXQsICJHQVpQIik7CitIQU5ETEVfTkFNRVMoYXVkaW9wb3dlcl9zZXQsICJBWlBXIik7CisKK0hBTkRMRV9OQU1FUyhsYW5wb3dlcl9nZXQsICJHTE5QIik7CitIQU5ETEVfTkFNRVMobGFucG93ZXJfc2V0LCAiTE5QVyIpOworCitIQU5ETEVfTkFNRVMoUElEX2dldCwgIkdQSUQiKTsKKworSEFORExFX05BTUVTKENUUl9nZXQsICJHQ1RSIik7CitIQU5ETEVfTkFNRVMoQ1RSX3NldCwgIlNDVFIiKTsKKworSEFORExFX05BTUVTKFBDUl9nZXQsICJHUENSIik7CitIQU5ETEVfTkFNRVMoUENSX3NldCwgIlNQQ1IiKTsKKworSEFORExFX05BTUVTKENNSV9nZXQsICJHQ01JIik7CitIQU5ETEVfTkFNRVMoQ01JX3NldCwgIlNDTUkiKTsKKworc3RhdGljIHN0cnVjdCBzb255X2FjcGlfdmFsdWUgc29ueV9hY3BpX3ZhbHVlc1tdID0geworCVNPTllfQUNQSV9WQUxVRShicmlnaHRuZXNzX2RlZmF1bHQsIHNuY19icmlnaHRuZXNzX2RlZl9nZXQsCisJCQlzbmNfYnJpZ2h0bmVzc19kZWZfc2V0LCBicmlnaHRuZXNzX2RlZmF1bHRfdmFsaWRhdGUsIDApLAorCVNPTllfQUNQSV9WQUxVRShmbmtleSwgc25jX2Zua2V5X2dldCwgTlVMTCwgTlVMTCwgMCksCisJU09OWV9BQ1BJX1ZBTFVFKGNkcG93ZXIsIHNuY19jZHBvd2VyX2dldCwgc25jX2NkcG93ZXJfc2V0LCBib29sZWFuX3ZhbGlkYXRlLCAwKSwKKwlTT05ZX0FDUElfVkFMVUUoYXVkaW9wb3dlciwgc25jX2F1ZGlvcG93ZXJfZ2V0LCBzbmNfYXVkaW9wb3dlcl9zZXQsCisJCQlib29sZWFuX3ZhbGlkYXRlLCAwKSwKKwlTT05ZX0FDUElfVkFMVUUobGFucG93ZXIsIHNuY19sYW5wb3dlcl9nZXQsIHNuY19sYW5wb3dlcl9zZXQsCisJCQlib29sZWFuX3ZhbGlkYXRlLCAxKSwKKwkvKiB1bmtub3duIG1ldGhvZHMgKi8KKwlTT05ZX0FDUElfVkFMVUUoUElELCBzbmNfUElEX2dldCwgTlVMTCwgTlVMTCwgMSksCisJU09OWV9BQ1BJX1ZBTFVFKENUUiwgc25jX0NUUl9nZXQsIHNuY19DVFJfc2V0LCBOVUxMLCAxKSwKKwlTT05ZX0FDUElfVkFMVUUoUENSLCBzbmNfUENSX2dldCwgc25jX1BDUl9zZXQsIE5VTEwsIDEpLAorCVNPTllfQUNQSV9WQUxVRShDTUksIHNuY19DTUlfZ2V0LCBzbmNfQ01JX3NldCwgTlVMTCwgMSksCisJU09OWV9BQ1BJX1ZBTFVFX05VTEwKK307CisKK3N0YXRpYyBhY3BpX2hhbmRsZSBzb255X2FjcGlfaGFuZGxlOworc3RhdGljIHN0cnVjdCBhY3BpX2RldmljZSAqc29ueV9hY3BpX2FjcGlfZGV2aWNlID0gTlVMTDsKKworLyoKKyAqIGFjcGlfZXZhbHVhdGVfb2JqZWN0IHdyYXBwZXJzCisgKi8KK3N0YXRpYyBpbnQgYWNwaV9jYWxsZ2V0ZnVuYyhhY3BpX2hhbmRsZSBoYW5kbGUsIGNoYXIgKm5hbWUsIGludCAqcmVzdWx0KQoreworCXN0cnVjdCBhY3BpX2J1ZmZlciBvdXRwdXQ7CisJdW5pb24gYWNwaV9vYmplY3Qgb3V0X29iajsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlvdXRwdXQubGVuZ3RoID0gc2l6ZW9mKG91dF9vYmopOworCW91dHB1dC5wb2ludGVyID0gJm91dF9vYmo7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIG5hbWUsIE5VTEwsICZvdXRwdXQpOworCWlmICgoc3RhdHVzID09IEFFX09LKSAmJiAob3V0X29iai50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSkgeworCQkqcmVzdWx0ID0gb3V0X29iai5pbnRlZ2VyLnZhbHVlOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcmludGsoTE9HX1BGWCAiYWNwaV9jYWxscmVhZGZ1bmMgZmFpbGVkXG4iKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBhY3BpX2NhbGxzZXRmdW5jKGFjcGlfaGFuZGxlIGhhbmRsZSwgY2hhciAqbmFtZSwgaW50IHZhbHVlLAorCQkJICAgIGludCAqcmVzdWx0KQoreworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwl1bmlvbiBhY3BpX29iamVjdCBpbl9vYmo7CisJc3RydWN0IGFjcGlfYnVmZmVyIG91dHB1dDsKKwl1bmlvbiBhY3BpX29iamVjdCBvdXRfb2JqOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtcy5jb3VudCA9IDE7CisJcGFyYW1zLnBvaW50ZXIgPSAmaW5fb2JqOworCWluX29iai50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5fb2JqLmludGVnZXIudmFsdWUgPSB2YWx1ZTsKKworCW91dHB1dC5sZW5ndGggPSBzaXplb2Yob3V0X29iaik7CisJb3V0cHV0LnBvaW50ZXIgPSAmb3V0X29iajsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgbmFtZSwgJnBhcmFtcywgJm91dHB1dCk7CisJaWYgKHN0YXR1cyA9PSBBRV9PSykgeworCQlpZiAocmVzdWx0ICE9IE5VTEwpIHsKKwkJCWlmIChvdXRfb2JqLnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJCQlwcmludGsoTE9HX1BGWCAiYWNwaV9ldmFsdWF0ZV9vYmplY3QgYmFkICIKKwkJCQkgICAgICAgInJldHVybiB0eXBlXG4iKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQkqcmVzdWx0ID0gb3V0X29iai5pbnRlZ2VyLnZhbHVlOworCQl9CisJCXJldHVybiAwOworCX0KKworCXByaW50ayhMT0dfUEZYICJhY3BpX2V2YWx1YXRlX29iamVjdCBmYWlsZWRcbiIpOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogc29ueV9hY3BpX3ZhbHVlcyBpbnB1dC9vdXRwdXQgdmFsaWRhdGUgZnVuY3Rpb25zCisgKi8KKworLyogYnJpZ2h0bmVzc19kZWZhdWx0X3ZhbGlkYXRlOgorICoKKyAqIG1hbmlwdWxhdGUgaW5wdXQgb3V0cHV0IHZhbHVlcyB0byBrZWVwIGNvbnNpc3RlbmN5IHdpdGggdGhlCisgKiBiYWNrbGlnaHQgZnJhbWV3b3JrIGZvciB3aGljaCBicmlnaHRuZXNzIHZhbHVlcyBhcmUgMC1iYXNlZC4KKyAqLworc3RhdGljIGludCBicmlnaHRuZXNzX2RlZmF1bHRfdmFsaWRhdGUoY29uc3QgaW50IGRpcmVjdGlvbiwgY29uc3QgaW50IHZhbHVlKQoreworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJCWNhc2UgU05DX1ZBTElEQVRFX09VVDoKKwkJCXJldHVybiB2YWx1ZSAtIDE7CisJCWNhc2UgU05DX1ZBTElEQVRFX0lOOgorCQkJaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPCBTT05ZX01BWF9CUklHSFRORVNTKQorCQkJCXJldHVybiB2YWx1ZSArIDE7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKiBib29sZWFuX3ZhbGlkYXRlOgorICoKKyAqIG9uIGlucHV0IHZhbGlkYXRlIGJvb2xlYW4gdmFsdWVzIDAvMSwgb24gb3V0cHV0IGp1c3QgcGFzcyB0aGUKKyAqIHJlY2VpdmVkIHZhbHVlLgorICovCitzdGF0aWMgaW50IGJvb2xlYW5fdmFsaWRhdGUoY29uc3QgaW50IGRpcmVjdGlvbiwgY29uc3QgaW50IHZhbHVlKQoreworCWlmIChkaXJlY3Rpb24gPT0gU05DX1ZBTElEQVRFX0lOKSB7CisJCWlmICh2YWx1ZSAhPSAwICYmIHZhbHVlICE9IDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHZhbHVlOworfQorCisvKgorICogU3lzZnMgc2hvdy9zdG9yZSBjb21tb24gdG8gYWxsIHNvbnlfYWNwaV92YWx1ZXMKKyAqLworc3RhdGljIHNzaXplX3Qgc29ueV9hY3BpX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZmZlcikKK3sKKwlpbnQgdmFsdWU7CisJc3RydWN0IHNvbnlfYWNwaV92YWx1ZSAqaXRlbSA9CisJICAgIGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3Qgc29ueV9hY3BpX3ZhbHVlLCBkZXZhdHRyKTsKKworCWlmICghKml0ZW0tPmFjcGlnZXQpCisJCXJldHVybiAtRUlPOworCisJaWYgKGFjcGlfY2FsbGdldGZ1bmMoc29ueV9hY3BpX2hhbmRsZSwgKml0ZW0tPmFjcGlnZXQsICZ2YWx1ZSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChpdGVtLT52YWxpZGF0ZSkKKwkJdmFsdWUgPSBpdGVtLT52YWxpZGF0ZShTTkNfVkFMSURBVEVfT1VULCB2YWx1ZSk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmZmVyLCBQQUdFX1NJWkUsICIlZFxuIiwgdmFsdWUpOworfQorCitzdGF0aWMgc3NpemVfdCBzb255X2FjcGlfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworCWludCB2YWx1ZTsKKwlzdHJ1Y3Qgc29ueV9hY3BpX3ZhbHVlICppdGVtID0KKwkgICAgY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBzb255X2FjcGlfdmFsdWUsIGRldmF0dHIpOworCisJaWYgKCFpdGVtLT5hY3Bpc2V0KQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChjb3VudCA+IDMxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmZmVyLCBOVUxMLCAxMCk7CisKKwlpZiAoaXRlbS0+dmFsaWRhdGUpCisJCXZhbHVlID0gaXRlbS0+dmFsaWRhdGUoU05DX1ZBTElEQVRFX0lOLCB2YWx1ZSk7CisKKwlpZiAodmFsdWUgPCAwKQorCQlyZXR1cm4gdmFsdWU7CisKKwlpZiAoYWNwaV9jYWxsc2V0ZnVuYyhzb255X2FjcGlfaGFuZGxlLCAqaXRlbS0+YWNwaXNldCwgdmFsdWUsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisJaXRlbS0+dmFsdWUgPSB2YWx1ZTsKKwlpdGVtLT52YWxpZCA9IDE7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogUGxhdGZvcm0gZGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuY3BmX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJzb255LWxhcHRvcCIsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9Cit9Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNuY3BmX2RldmljZTsKKworc3RhdGljIGludCBzb255X3NuY19wZl9hZGQodm9pZCkKK3sKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJc3RydWN0IHNvbnlfYWNwaV92YWx1ZSAqaXRlbTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25jcGZfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXNuY3BmX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29ueS1sYXB0b3AiLCAtMSk7CisJaWYgKCFzbmNwZl9kZXZpY2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfcGxhdGZvcm1fcmVnaXN0ZXJlZDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHNuY3BmX2RldmljZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcGxhdGZvcm1fYWxsb2NlZDsKKworCWZvciAoaXRlbSA9IHNvbnlfYWNwaV92YWx1ZXM7IGl0ZW0tPm5hbWU7ICsraXRlbSkgeworCisJCWlmICghZGVidWcgJiYgaXRlbS0+ZGVidWcpCisJCQljb250aW51ZTsKKworCQkvKiBmaW5kIHRoZSBhdmFpbGFibGUgYWNwaWdldCBhcyBkZXNjcmliZWQgaW4gdGhlIERTRFQgKi8KKwkJZm9yICg7IGl0ZW0tPmFjcGlnZXQgJiYgKml0ZW0tPmFjcGlnZXQ7ICsraXRlbS0+YWNwaWdldCkgeworCQkJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoc29ueV9hY3BpX2hhbmRsZSwKKwkJCQkJCQkgKml0ZW0tPmFjcGlnZXQsCisJCQkJCQkJICZoYW5kbGUpKSkgeworCQkJCWlmIChkZWJ1ZykKKwkJCQkJcHJpbnRrKExPR19QRlggIkZvdW5kICVzIGdldHRlcjogJXNcbiIsCisJCQkJCSAgICAgICBpdGVtLT5uYW1lLCAqaXRlbS0+YWNwaWdldCk7CisJCQkJaXRlbS0+ZGV2YXR0ci5hdHRyLm1vZGUgfD0gU19JUlVHTzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qIGZpbmQgdGhlIGF2YWlsYWJsZSBhY3Bpc2V0IGFzIGRlc2NyaWJlZCBpbiB0aGUgRFNEVCAqLworCQlmb3IgKDsgaXRlbS0+YWNwaXNldCAmJiAqaXRlbS0+YWNwaXNldDsgKytpdGVtLT5hY3Bpc2V0KSB7CisJCQlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShzb255X2FjcGlfaGFuZGxlLAorCQkJCQkJCSAqaXRlbS0+YWNwaXNldCwKKwkJCQkJCQkgJmhhbmRsZSkpKSB7CisJCQkJaWYgKGRlYnVnKQorCQkJCQlwcmludGsoTE9HX1BGWCAiRm91bmQgJXMgc2V0dGVyOiAlc1xuIiwKKwkJCQkJICAgICAgIGl0ZW0tPm5hbWUsICppdGVtLT5hY3Bpc2V0KTsKKwkJCQlpdGVtLT5kZXZhdHRyLmF0dHIubW9kZSB8PSBTX0lXVVNSOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGl0ZW0tPmRldmF0dHIuYXR0ci5tb2RlICE9IDApIHsKKwkJCXJldCA9CisJCQkgICAgZGV2aWNlX2NyZWF0ZV9maWxlKCZzbmNwZl9kZXZpY2UtPmRldiwKKwkJCQkJICAgICAgICZpdGVtLT5kZXZhdHRyKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXRfc3lzZnM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworICAgICAgb3V0X3N5c2ZzOgorCWZvciAoaXRlbSA9IHNvbnlfYWNwaV92YWx1ZXM7IGl0ZW0tPm5hbWU7ICsraXRlbSkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNuY3BmX2RldmljZS0+ZGV2LCAmaXRlbS0+ZGV2YXR0cik7CisJfQorCXBsYXRmb3JtX2RldmljZV9kZWwoc25jcGZfZGV2aWNlKTsKKyAgICAgIG91dF9wbGF0Zm9ybV9hbGxvY2VkOgorCXBsYXRmb3JtX2RldmljZV9wdXQoc25jcGZfZGV2aWNlKTsKKyAgICAgIG91dF9wbGF0Zm9ybV9yZWdpc3RlcmVkOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmNwZl9kcml2ZXIpOworICAgICAgb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNvbnlfc25jX3BmX3JlbW92ZSh2b2lkKQoreworCXN0cnVjdCBzb255X2FjcGlfdmFsdWUgKml0ZW07CisKKwlmb3IgKGl0ZW0gPSBzb255X2FjcGlfdmFsdWVzOyBpdGVtLT5uYW1lOyArK2l0ZW0pIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZzbmNwZl9kZXZpY2UtPmRldiwgJml0ZW0tPmRldmF0dHIpOworCX0KKworCXBsYXRmb3JtX2RldmljZV9kZWwoc25jcGZfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNuY3BmX2RldmljZSk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuY3BmX2RyaXZlcik7Cit9CisKKy8qCisgKiBCYWNrbGlnaHQgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgc29ueV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJcmV0dXJuIGFjcGlfY2FsbHNldGZ1bmMoc29ueV9hY3BpX2hhbmRsZSwgIlNCUlQiLAorCQkJCWJkLT5wcm9wcy5icmlnaHRuZXNzICsgMSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgc29ueV9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCWludCB2YWx1ZTsKKworCWlmIChhY3BpX2NhbGxnZXRmdW5jKHNvbnlfYWNwaV9oYW5kbGUsICJHQlJUIiwgJnZhbHVlKSkKKwkJcmV0dXJuIDA7CisJLyogYnJpZ2h0bmVzcyBsZXZlbHMgYXJlIDEtYmFzZWQsIHdoaWxlIGJhY2tsaWdodCBvbmVzIGFyZSAwLWJhc2VkICovCisJcmV0dXJuIHZhbHVlIC0gMTsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpzb255X2JhY2tsaWdodF9kZXZpY2U7CitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgc29ueV9iYWNrbGlnaHRfb3BzID0geworCS51cGRhdGVfc3RhdHVzID0gc29ueV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MgPSBzb255X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKK307CisKKy8qCisgKiBBQ1BJIGNhbGxiYWNrcworICovCitzdGF0aWMgdm9pZCBzb255X2FjcGlfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQoreworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKExPR19QRlggInNvbnlfYWNwaV9ub3RpZnksIGV2ZW50OiAlZFxuIiwgZXZlbnQpOworCWFjcGlfYnVzX2dlbmVyYXRlX2V2ZW50KHNvbnlfYWNwaV9hY3BpX2RldmljZSwgMSwgZXZlbnQpOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgc29ueV93YWxrX2NhbGxiYWNrKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGxldmVsLAorCQkJCSAgICAgIHZvaWQgKmNvbnRleHQsIHZvaWQgKipyZXR1cm5fdmFsdWUpCit7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb3BlcmFuZDsKKworCW5vZGUgPSAoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKiloYW5kbGU7CisJb3BlcmFuZCA9ICh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICopbm9kZS0+b2JqZWN0OworCisJcHJpbnRrKExPR19QRlggIm1ldGhvZDogbmFtZTogJTQuNHMsIGFyZ3MgJVhcbiIsIG5vZGUtPm5hbWUuYXNjaWksCisJICAgICAgICh1MzIpIG9wZXJhbmQtPm1ldGhvZC5wYXJhbV9jb3VudCk7CisKKwlyZXR1cm4gQUVfT0s7Cit9CisKKy8qCisgKiBBQ1BJIGRldmljZQorICovCitzdGF0aWMgaW50IHNvbnlfYWNwaV9yZXN1bWUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHNvbnlfYWNwaV92YWx1ZSAqaXRlbTsKKworCWZvciAoaXRlbSA9IHNvbnlfYWNwaV92YWx1ZXM7IGl0ZW0tPm5hbWU7IGl0ZW0rKykgeworCQlpbnQgcmV0OworCisJCWlmICghaXRlbS0+dmFsaWQpCisJCQljb250aW51ZTsKKwkJcmV0ID0gYWNwaV9jYWxsc2V0ZnVuYyhzb255X2FjcGlfaGFuZGxlLCAqaXRlbS0+YWNwaXNldCwKKwkJCQkgICAgICAgaXRlbS0+dmFsdWUsIE5VTEwpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKCIlczogJWRcbiIsIF9fRlVOQ1RJT05fXywgcmV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbnlfYWNwaV9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWludCByZXN1bHQ7CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCisJc29ueV9hY3BpX2FjcGlfZGV2aWNlID0gZGV2aWNlOworCisJc29ueV9hY3BpX2hhbmRsZSA9IGRldmljZS0+aGFuZGxlOworCisJaWYgKGRlYnVnKSB7CisJCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX01FVEhPRCwgc29ueV9hY3BpX2hhbmRsZSwKKwkJCQkJICAgICAxLCBzb255X3dhbGtfY2FsbGJhY2ssIE5VTEwsIE5VTEwpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCXByaW50ayhMT0dfUEZYICJ1bmFibGUgdG8gd2FsayBhY3BpIHJlc291cmNlc1xuIik7CisJCQlyZXN1bHQgPSAtRU5PREVWOworCQkJZ290byBvdXR3YWxrOworCQl9CisJfQorCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKHNvbnlfYWNwaV9oYW5kbGUsCisJCQkJCSAgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAorCQkJCQkgICAgIHNvbnlfYWNwaV9ub3RpZnksIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoTE9HX1BGWCAidW5hYmxlIHRvIGluc3RhbGwgbm90aWZ5IGhhbmRsZXJcbiIpOworCQlyZXN1bHQgPSAtRU5PREVWOworCQlnb3RvIG91dHdhbGs7CisJfQorCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoc29ueV9hY3BpX2hhbmRsZSwgIkdCUlQiLCAmaGFuZGxlKSkpIHsKKwkJc29ueV9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcigic29ueSIsIE5VTEwsCisJCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkJICAmc29ueV9iYWNrbGlnaHRfb3BzKTsKKworCQlpZiAoSVNfRVJSKHNvbnlfYmFja2xpZ2h0X2RldmljZSkpIHsKKwkJCXByaW50ayhMT0dfUEZYICJ1bmFibGUgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0IGRldmljZVxuIik7CisJCQlzb255X2JhY2tsaWdodF9kZXZpY2UgPSBOVUxMOworCQl9IGVsc2UgeworCQkJc29ueV9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5icmlnaHRuZXNzID0KKwkJCSAgICBzb255X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcworCQkJICAgIChzb255X2JhY2tsaWdodF9kZXZpY2UpOworCQkJc29ueV9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IAorCQkJICAgIFNPTllfTUFYX0JSSUdIVE5FU1MgLSAxOworCQl9CisKKwl9CisKKwlpZiAoc29ueV9zbmNfcGZfYWRkKCkpCisJCWdvdG8gb3V0YmFja2xpZ2h0OworCisJcHJpbnRrKEtFUk5fSU5GTyBBQ1BJX1NOQ19EUklWRVJfTkFNRSAiIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWRcbiIpOworCisJcmV0dXJuIDA7CisKKyAgICAgIG91dGJhY2tsaWdodDoKKwlpZiAoc29ueV9iYWNrbGlnaHRfZGV2aWNlKQorCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoc29ueV9iYWNrbGlnaHRfZGV2aWNlKTsKKworCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKHNvbnlfYWNwaV9oYW5kbGUsCisJCQkJCSAgICBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCSAgICBzb255X2FjcGlfbm90aWZ5KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXByaW50ayhMT0dfUEZYICJ1bmFibGUgdG8gcmVtb3ZlIG5vdGlmeSBoYW5kbGVyXG4iKTsKKyAgICAgIG91dHdhbGs6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBzb255X2FjcGlfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlpZiAoc29ueV9iYWNrbGlnaHRfZGV2aWNlKQorCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoc29ueV9iYWNrbGlnaHRfZGV2aWNlKTsKKworCXNvbnlfYWNwaV9hY3BpX2RldmljZSA9IE5VTEw7CisKKwlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihzb255X2FjcGlfaGFuZGxlLAorCQkJCQkgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAorCQkJCQkgICAgc29ueV9hY3BpX25vdGlmeSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlwcmludGsoTE9HX1BGWCAidW5hYmxlIHRvIHJlbW92ZSBub3RpZnkgaGFuZGxlclxuIik7CisKKwlzb255X3NuY19wZl9yZW1vdmUoKTsKKworCXByaW50ayhLRVJOX0lORk8gQUNQSV9TTkNfRFJJVkVSX05BTUUgIiBzdWNjZXNzZnVsbHkgcmVtb3ZlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBzb255X2FjcGlfZHJpdmVyID0geworCS5uYW1lID0gQUNQSV9TTkNfRFJJVkVSX05BTUUsCisJLmNsYXNzID0gQUNQSV9TTkNfQ0xBU1MsCisJLmlkcyA9IEFDUElfU05DX0hJRCwKKwkub3BzID0geworCQkuYWRkID0gc29ueV9hY3BpX2FkZCwKKwkJLnJlbW92ZSA9IHNvbnlfYWNwaV9yZW1vdmUsCisJCS5yZXN1bWUgPSBzb255X2FjcGlfcmVzdW1lLAorCQl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc29ueV9hY3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZzb255X2FjcGlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNvbnlfYWNwaV9leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfYWNwaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzb255X2FjcGlfaW5pdCk7Cittb2R1bGVfZXhpdChzb255X2FjcGlfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9hdDkxX21jaS5jIGIvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYwppbmRleCAyY2U1MGYzLi40NTlmNGI0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2F0OTFfbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvYXRtZWxfcGRjLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9wcm90b2NvbC5oPgpAQCAtNzUsNyArNzYsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX21jaS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcGRjLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUgImF0OTFfbWNpIgogCkBAIC0yMTEsMTMgKzIxMSwxMyBAQAogCiAJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGlzIG5lZWRzIGZpbGxpbmcgKi8KIAkJaWYgKGkgPT0gMCkgewotCQkJaWYgKGF0OTFfbWNpX3JlYWQoaG9zdCwgQVQ5MV9QRENfUkNSKSAhPSAwKSB7CisJCQlpZiAoYXQ5MV9tY2lfcmVhZChob3N0LCBBVE1FTF9QRENfUkNSKSAhPSAwKSB7CiAJCQkJcHJfZGVidWcoIlRyYW5zZmVyIGFjdGl2ZSBpbiBjdXJyZW50XG4iKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQogCQllbHNlIHsKLQkJCWlmIChhdDkxX21jaV9yZWFkKGhvc3QsIEFUOTFfUERDX1JOQ1IpICE9IDApIHsKKwkJCWlmIChhdDkxX21jaV9yZWFkKGhvc3QsIEFUTUVMX1BEQ19STkNSKSAhPSAwKSB7CiAJCQkJcHJfZGVidWcoIlRyYW5zZmVyIGFjdGl2ZSBpbiBuZXh0XG4iKTsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTIzNCwxMiArMjM0LDEyIEBACiAJCXByX2RlYnVnKCJkbWEgYWRkcmVzcyA9ICUwOFgsIGxlbmd0aCA9ICVkXG4iLCBzZy0+ZG1hX2FkZHJlc3MsIHNnLT5sZW5ndGgpOwogCiAJCWlmIChpID09IDApIHsKLQkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1JQUiwgc2ctPmRtYV9hZGRyZXNzKTsKLQkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1JDUiwgc2ctPmxlbmd0aCAvIDQpOworCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1JQUiwgc2ctPmRtYV9hZGRyZXNzKTsKKwkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19SQ1IsIHNnLT5sZW5ndGggLyA0KTsKIAkJfQogCQllbHNlIHsKLQkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1JOUFIsIHNnLT5kbWFfYWRkcmVzcyk7Ci0JCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19STkNSLCBzZy0+bGVuZ3RoIC8gNCk7CisJCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUk5QUiwgc2ctPmRtYV9hZGRyZXNzKTsKKwkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19STkNSLCBzZy0+bGVuZ3RoIC8gNCk7CiAJCX0KIAl9CiAKQEAgLTMwMyw3ICszMDMsNyBAQAogCQlhdDkxbWNpX3ByZV9kbWFfcmVhZChob3N0KTsKIAllbHNlIHsKIAkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfSUVSLCBBVDkxX01DSV9SWEJVRkYpOwotCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRESVMgfCBBVDkxX1BEQ19UWFRESVMpOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUFRDUiwgQVRNRUxfUERDX1JYVERJUyB8IEFUTUVMX1BEQ19UWFRESVMpOwogCX0KIAogCXByX2RlYnVnKCJwb3N0IGRtYSByZWFkIGRvbmVcbiIpOwpAQCAtMzIwLDcgKzMyMCw3IEBACiAJcHJfZGVidWcoIkhhbmRsaW5nIHRoZSB0cmFuc21pdFxuIik7CiAKIAkvKiBEaXNhYmxlIHRoZSB0cmFuc2ZlciAqLwotCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1JYVERJUyB8IEFUOTFfUERDX1RYVERJUyk7CisJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1BUQ1IsIEFUTUVMX1BEQ19SWFRESVMgfCBBVE1FTF9QRENfVFhURElTKTsKIAogCS8qIE5vdyB3YWl0IGZvciBjbWQgcmVhZHkgKi8KIAlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9JRFIsIEFUOTFfTUNJX1RYQlVGRSk7CkBAIC00MzEsMTUgKzQzMSwxNSBAQAogCQljbWQtPm9wY29kZSwgY21kciwgY21kLT5hcmcsIGJsb2NrcywgYmxvY2tfbGVuZ3RoLCBhdDkxX21jaV9yZWFkKGhvc3QsIEFUOTFfTUNJX01SKSk7CiAKIAlpZiAoIWRhdGEpIHsKLQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUFRDUiwgQVQ5MV9QRENfVFhURElTIHwgQVQ5MV9QRENfUlhURElTKTsKLQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUlBSLCAwKTsKLQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUkNSLCAwKTsKLQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUk5QUiwgMCk7Ci0JCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1JOQ1IsIDApOwotCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19UUFIsIDApOwotCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19UQ1IsIDApOwotCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19UTlBSLCAwKTsKLQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfVE5DUiwgMCk7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19QVENSLCBBVE1FTF9QRENfVFhURElTIHwgQVRNRUxfUERDX1JYVERJUyk7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19SUFIsIDApOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUkNSLCAwKTsKKwkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1JOUFIsIDApOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUk5DUiwgMCk7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19UUFIsIDApOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfVENSLCAwKTsKKwkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1ROUFIsIDApOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfVE5DUiwgMCk7CiAKIAkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfQVJHUiwgY21kLT5hcmcpOwogCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9DTURSLCBjbWRyKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCS8qCiAJICogRGlzYWJsZSB0aGUgUERDIGNvbnRyb2xsZXIKIAkgKi8KLQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRESVMgfCBBVDkxX1BEQ19UWFRESVMpOworCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19QVENSLCBBVE1FTF9QRENfUlhURElTIHwgQVRNRUxfUERDX1RYVERJUyk7CiAKIAlpZiAoY21kciAmIEFUOTFfTUNJX1RSQ01EX1NUQVJUKSB7CiAJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IDA7CkBAIC00ODEsOCArNDgxLDggQEAKIAogCQkJcHJfZGVidWcoIlRyYW5zbWl0dGluZyAlZCBieXRlc1xuIiwgaG9zdC0+dG90YWxfbGVuZ3RoKTsKIAotCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfVFBSLCBob3N0LT5waHlzaWNhbF9hZGRyZXNzKTsKLQkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1RDUiwgaG9zdC0+dG90YWxfbGVuZ3RoIC8gNCk7CisJCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfVFBSLCBob3N0LT5waHlzaWNhbF9hZGRyZXNzKTsKKwkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19UQ1IsIGhvc3QtPnRvdGFsX2xlbmd0aCAvIDQpOwogCQkJaWVyID0gQVQ5MV9NQ0lfVFhCVUZFOwogCQl9CiAJfQpAQCAtNDk3LDkgKzQ5Nyw5IEBACiAKIAlpZiAoY21kciAmIEFUOTFfTUNJX1RSQ01EX1NUQVJUKSB7CiAJCWlmIChjbWRyICYgQVQ5MV9NQ0lfVFJESVIpCi0JCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRFTik7CisJCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUFRDUiwgQVRNRUxfUERDX1JYVEVOKTsKIAkJZWxzZQotCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUFRDUiwgQVQ5MV9QRENfVFhURU4pOworCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1BUQ1IsIEFUTUVMX1BEQ19UWFRFTik7CiAJfQogCXJldHVybiBpZXI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCmluZGV4IGY2OTE4NGEuLmYzMzQ5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCkBAIC0zOTcsOSArMzk3LDIzIEBACiAJY2ZpX2ZpeHVwKG10ZCwgZml4dXBfdGFibGUpOwogCiAJZm9yIChpPTA7IGk8IGNmaS0+bnVtY2hpcHM7IGkrKykgewotCQljZmktPmNoaXBzW2ldLndvcmRfd3JpdGVfdGltZSA9IDE8PGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dFR5cDsKLQkJY2ZpLT5jaGlwc1tpXS5idWZmZXJfd3JpdGVfdGltZSA9IDE8PGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0VHlwOwotCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWUgPSAxMDAwPDxjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0VHlwOworCQlpZiAoY2ZpLT5jZmlxLT5Xb3JkV3JpdGVUaW1lb3V0VHlwKQorCQkJY2ZpLT5jaGlwc1tpXS53b3JkX3dyaXRlX3RpbWUgPQorCQkJCTE8PGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dFR5cDsKKwkJZWxzZQorCQkJY2ZpLT5jaGlwc1tpXS53b3JkX3dyaXRlX3RpbWUgPSA1MDAwMDsKKworCQlpZiAoY2ZpLT5jZmlxLT5CdWZXcml0ZVRpbWVvdXRUeXApCisJCQljZmktPmNoaXBzW2ldLmJ1ZmZlcl93cml0ZV90aW1lID0KKwkJCQkxPDxjZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dFR5cDsKKwkJLyogTm8gZGVmYXVsdDsgaWYgaXQgaXNuJ3Qgc3BlY2lmaWVkLCB3ZSB3b24ndCB1c2UgaXQgKi8KKworCQlpZiAoY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dFR5cCkKKwkJCWNmaS0+Y2hpcHNbaV0uZXJhc2VfdGltZSA9CisJCQkJMTAwMDw8Y2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dFR5cDsKKwkJZWxzZQorCQkJY2ZpLT5jaGlwc1tpXS5lcmFzZV90aW1lID0gMjAwMDAwMDsKKwogCQljZmktPmNoaXBzW2ldLnJlZl9wb2ludF9jb3VudGVyID0gMDsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmKGNmaS0+Y2hpcHNbaV0ud3EpKTsKIAl9CkBAIC01NDYsMTMgKzU2MCwxMSBAQAogCQkJc3RydWN0IGNmaV9pbnRlbGV4dF9wcm9ncmFtbWluZ19yZWdpb25pbmZvICpwcmluZm87CiAJCQlwcmluZm8gPSAoc3RydWN0IGNmaV9pbnRlbGV4dF9wcm9ncmFtbWluZ19yZWdpb25pbmZvICopJmV4dHAtPmV4dHJhW29mZnNdOwogCQkJbXRkLT53cml0ZXNpemUgPSBjZmktPmludGVybGVhdmUgPDwgcHJpbmZvLT5Qcm9nUmVnU2hpZnQ7Ci0JCQlNVERfUFJPR1JFR0lPTl9DVFJMTU9ERV9WQUxJRChtdGQpID0gY2ZpLT5pbnRlcmxlYXZlICogcHJpbmZvLT5Db250cm9sVmFsaWQ7Ci0JCQlNVERfUFJPR1JFR0lPTl9DVFJMTU9ERV9JTlZBTElEKG10ZCkgPSBjZmktPmludGVybGVhdmUgKiBwcmluZm8tPkNvbnRyb2xJbnZhbGlkOwogCQkJbXRkLT5mbGFncyAmPSB+TVREX0JJVF9XUklURUFCTEU7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHByb2dyYW0gcmVnaW9uIHNpemUvY3RybF92YWxpZC9jdHJsX2ludmFsID0gJWQvJWQvJWRcbiIsCiAJCQkgICAgICAgbWFwLT5uYW1lLCBtdGQtPndyaXRlc2l6ZSwKLQkJCSAgICAgICBNVERfUFJPR1JFR0lPTl9DVFJMTU9ERV9WQUxJRChtdGQpLAotCQkJICAgICAgIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX0lOVkFMSUQobXRkKSk7CisJCQkgICAgICAgY2ZpLT5pbnRlcmxlYXZlICogcHJpbmZvLT5Db250cm9sVmFsaWQsCisJCQkgICAgICAgY2ZpLT5pbnRlcmxlYXZlICogcHJpbmZvLT5Db250cm9sSW52YWxpZCk7CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwppbmRleCBkNTY4NDlmLi42OWQ0OWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwpAQCAtNjYyLDcgKzY2Miw3IEBACiAgKiBhIHNtYWxsIGJ1ZmZlciBmb3IgdGhpcy4KICAqIFhYWDogSWYgdGhlIGJ1ZmZlciBzaXplIGlzIG5vdCBhIG11bHRpcGxlIG9mIDIsIHRoaXMgd2lsbCBicmVhawogICovCi0jZGVmaW5lIEVDQ0JVRl9TSVpFIChtdGQtPmVjY3NpemUpCisjZGVmaW5lIEVDQ0JVRl9TSVpFIChtdGQtPndyaXRlc2l6ZSkKICNkZWZpbmUgRUNDQlVGX0RJVih4KSAoKHgpICYgfihFQ0NCVUZfU0laRSAtIDEpKQogI2RlZmluZSBFQ0NCVUZfTU9EKHgpICgoeCkgJiAgKEVDQ0JVRl9TSVpFIC0gMSkpCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDAuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jCmluZGV4IDYwM2E3OTUuLjhhMGM0ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jCkBAIC01NjksNyArNTY5LDYgQEAKIAogCW10ZC0+dHlwZSA9IE1URF9OQU5ERkxBU0g7CiAJbXRkLT5mbGFncyA9IE1URF9DQVBfTkFOREZMQVNIOwotCW10ZC0+ZWNjdHlwZSA9IE1URF9FQ0NfUlNfRGlza09uQ2hpcDsKIAltdGQtPnNpemUgPSAwOwogCW10ZC0+ZXJhc2VzaXplID0gMDsKIAltdGQtPndyaXRlc2l6ZSA9IDUxMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxLmMKaW5kZXggZmU3MWExMi4uNmYzNjhhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxLmMKQEAgLTM0OCw3ICszNDgsNiBAQAogCiAJbXRkLT50eXBlID0gTVREX05BTkRGTEFTSDsKIAltdGQtPmZsYWdzID0gTVREX0NBUF9OQU5ERkxBU0g7Ci0JbXRkLT5lY2N0eXBlID0gTVREX0VDQ19SU19EaXNrT25DaGlwOwogCW10ZC0+c2l6ZSA9IDA7CiAKIAkvKiBGSVhNRTogZXJhc2Ugc2l6ZSBpcyBub3QgYWx3YXlzIDhLaUIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMXBsdXMuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMXBsdXMuYwppbmRleCBiYTRkYjY4Li44OGJhODJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDFwbHVzLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxcGx1cy5jCkBAIC00NzIsNyArNDcyLDYgQEAKIAogCW10ZC0+dHlwZSA9IE1URF9OQU5ERkxBU0g7CiAJbXRkLT5mbGFncyA9IE1URF9DQVBfTkFOREZMQVNIOwotCW10ZC0+ZWNjdHlwZSA9IE1URF9FQ0NfUlNfRGlza09uQ2hpcDsKIAltdGQtPnNpemUgPSAwOwogCiAJbXRkLT5lcmFzZXNpemUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IGY0NTczMTUuLmJiZjA1NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTIwNCw3ICsyMDQsNyBAQAogCiBjb25maWcgTVREX0NLODA0WFJPTQogCXRyaXN0YXRlICJCSU9TIGZsYXNoIGNoaXAgb24gTnZpZGlhIENLODA0IgotCWRlcGVuZHMgb24gWDg2ICYmIE1URF9KRURFQ1BST0JFCisJZGVwZW5kcyBvbiBYODYgJiYgTVREX0pFREVDUFJPQkUgJiYgUENJCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdHJlYXRpbmcgdGhlIEJJT1MgZmxhc2ggY2hpcCBvbiBudmlkaWEgbW90aGVyYm9hcmRzCiAJICBhcyBhbiBNVEQgZGV2aWNlIC0gd2l0aCB0aGlzIHlvdSBjYW4gcmVwcm9ncmFtIHlvdXIgQklPUy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYW1kNzZ4cm9tLmMgYi9kcml2ZXJzL210ZC9tYXBzL2FtZDc2eHJvbS5jCmluZGV4IDc4YjY3MTEuLjcyOGFlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvYW1kNzZ4cm9tLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9hbWQ3Nnhyb20uYwpAQCAtMjA1LDggKzIwNSw4IEBACiAJCQkoKCh1bnNpZ25lZCBsb25nKSh3aW5kb3ctPnZpcnQpKSArIG9mZnNldCk7CiAJCW1hcC0+bWFwLnNpemUgPSAweGZmZmZmZmZmVUwgLSBtYXBfdG9wICsgMVVMOwogCQkvKiBTZXQgdGhlIG5hbWUgb2YgdGhlIG1hcCB0byB0aGUgYWRkcmVzcyBJIGFtIHRyeWluZyAqLwotCQlzcHJpbnRmKG1hcC0+bWFwX25hbWUsICIlcyBAJTA4bHgiLAotCQkJTU9EX05BTUUsIG1hcC0+bWFwLnBoeXMpOworCQlzcHJpbnRmKG1hcC0+bWFwX25hbWUsICIlcyBAJTA4THgiLAorCQkJTU9EX05BTUUsICh1bnNpZ25lZCBsb25nIGxvbmcpbWFwLT5tYXAucGh5cyk7CiAKIAkJLyogVGhlcmUgaXMgbm8gZ2VuZXJpYyBWUFAgc3VwcG9ydCAqLwogCQlmb3IobWFwLT5tYXAuYmFua3dpZHRoID0gMzI7IG1hcC0+bWFwLmJhbmt3aWR0aDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvY2s4MDR4cm9tLmMgYi9kcml2ZXJzL210ZC9tYXBzL2NrODA0eHJvbS5jCmluZGV4IDIzOGQ0MmUuLjNkNGE0ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvY2s4MDR4cm9tLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9jazgwNHhyb20uYwpAQCAtMjA3LDggKzIwNyw4IEBACiAJCQkoKCh1bnNpZ25lZCBsb25nKSh3aW5kb3ctPnZpcnQpKSArIG9mZnNldCk7CiAJCW1hcC0+bWFwLnNpemUgPSAweGZmZmZmZmZmVUwgLSBtYXBfdG9wICsgMVVMOwogCQkvKiBTZXQgdGhlIG5hbWUgb2YgdGhlIG1hcCB0byB0aGUgYWRkcmVzcyBJIGFtIHRyeWluZyAqLwotCQlzcHJpbnRmKG1hcC0+bWFwX25hbWUsICIlcyBAJTA4bHgiLAotCQkJTU9EX05BTUUsIG1hcC0+bWFwLnBoeXMpOworCQlzcHJpbnRmKG1hcC0+bWFwX25hbWUsICIlcyBAJTA4THgiLAorCQkJTU9EX05BTUUsICh1bnNpZ25lZCBsb25nIGxvbmcpbWFwLT5tYXAucGh5cyk7CiAKIAkJLyogVGhlcmUgaXMgbm8gZ2VuZXJpYyBWUFAgc3VwcG9ydCAqLwogCQlmb3IobWFwLT5tYXAuYmFua3dpZHRoID0gMzI7IG1hcC0+bWFwLmJhbmt3aWR0aDsKQEAgLTMyNyw3ICszMjcsNyBAQAogCXBkZXYgPSBOVUxMOwogCiAJZm9yKGlkID0gY2s4MDR4cm9tX3BjaV90Ymw7IGlkLT52ZW5kb3I7IGlkKyspIHsKLQkJcGRldiA9IHBjaV9maW5kX2RldmljZShpZC0+dmVuZG9yLCBpZC0+ZGV2aWNlLCBOVUxMKTsKKwkJcGRldiA9IHBjaV9nZXRfZGV2aWNlKGlkLT52ZW5kb3IsIGlkLT5kZXZpY2UsIE5VTEwpOwogCQlpZiAocGRldikKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZXNiMnJvbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9lc2Iycm9tLmMKaW5kZXggYTlkODA4YS4uMGJjMDEzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9lc2Iycm9tLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9lc2Iycm9tLmMKQEAgLTI4OSw4ICsyODksOCBAQAogCQkJKCgodW5zaWduZWQgbG9uZykod2luZG93LT52aXJ0KSkgKyBvZmZzZXQpOwogCQltYXAtPm1hcC5zaXplID0gMHhmZmZmZmZmZlVMIC0gbWFwX3RvcCArIDFVTDsKIAkJLyogU2V0IHRoZSBuYW1lIG9mIHRoZSBtYXAgdG8gdGhlIGFkZHJlc3MgSSBhbSB0cnlpbmcgKi8KLQkJc3ByaW50ZihtYXAtPm1hcF9uYW1lLCAiJXMgQCUwOGx4IiwKLQkJCU1PRF9OQU1FLCBtYXAtPm1hcC5waHlzKTsKKwkJc3ByaW50ZihtYXAtPm1hcF9uYW1lLCAiJXMgQCUwOEx4IiwKKwkJCU1PRF9OQU1FLCAodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+bWFwLnBoeXMpOwogCiAJCS8qIEZpcm13YXJlIGh1YnMgb25seSB1c2UgdnBwIHdoZW4gYmVpbmcgcHJvZ3JhbW1lZAogCQkgKiBpbiBhIGZhY3Rvcnkgc2V0dGluZy4gIFNvIGluLXBsYWNlIHByb2dyYW1taW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2ljaHhyb20uYyBiL2RyaXZlcnMvbXRkL21hcHMvaWNoeHJvbS5jCmluZGV4IDJiYjNlNjM2Li4yYzg4NGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2ljaHhyb20uYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2ljaHhyb20uYwpAQCAtMjI3LDggKzIyNyw4IEBACiAJCQkoKCh1bnNpZ25lZCBsb25nKSh3aW5kb3ctPnZpcnQpKSArIG9mZnNldCk7CiAJCW1hcC0+bWFwLnNpemUgPSAweGZmZmZmZmZmVUwgLSBtYXBfdG9wICsgMVVMOwogCQkvKiBTZXQgdGhlIG5hbWUgb2YgdGhlIG1hcCB0byB0aGUgYWRkcmVzcyBJIGFtIHRyeWluZyAqLwotCQlzcHJpbnRmKG1hcC0+bWFwX25hbWUsICIlcyBAJTA4bHgiLAotCQkJTU9EX05BTUUsIG1hcC0+bWFwLnBoeXMpOworCQlzcHJpbnRmKG1hcC0+bWFwX25hbWUsICIlcyBAJTA4THgiLAorCQkJTU9EX05BTUUsICh1bnNpZ25lZCBsb25nIGxvbmcpbWFwLT5tYXAucGh5cyk7CiAKIAkJLyogRmlybXdhcmUgaHVicyBvbmx5IHVzZSB2cHAgd2hlbiBiZWluZyBwcm9ncmFtbWVkCiAJCSAqIGluIGEgZmFjdG9yeSBzZXR0aW5nLiAgU28gaW4tcGxhY2UgcHJvZ3JhbW1pbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvbmV0c2M1MjAuYyBiL2RyaXZlcnMvbXRkL21hcHMvbmV0c2M1MjAuYwppbmRleCBlZDIxNTQ3Li45NWRjYWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL25ldHNjNTIwLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9uZXRzYzUyMC5jCkBAIC05NCw3ICs5NCw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0c2M1MjAodm9pZCkKIHsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIk5ldFNjNTIwIGZsYXNoIGRldmljZTogMHglbHggYXQgMHglbHhcbiIsIG5ldHNjNTIwX21hcC5zaXplLCBuZXRzYzUyMF9tYXAucGh5cyk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJOZXRTYzUyMCBmbGFzaCBkZXZpY2U6IDB4JUx4IGF0IDB4JUx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyluZXRzYzUyMF9tYXAuc2l6ZSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbmV0c2M1MjBfbWFwLnBoeXMpOwogCW5ldHNjNTIwX21hcC52aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKG5ldHNjNTIwX21hcC5waHlzLCBuZXRzYzUyMF9tYXAuc2l6ZSk7CiAKIAlpZiAoIW5ldHNjNTIwX21hcC52aXJ0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3NjNTIwY2RwLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NjNTIwY2RwLmMKaW5kZXggOWI1MGNmYy4uNDA0NWUzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYzUyMGNkcC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc2M1MjBjZHAuYwpAQCAtMjM3LDggKzIzNyw5IEBACiAjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fRkxBU0hfQkFOS1M7IGkrKykgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNDNTIwIENEUCBmbGFzaCBkZXZpY2U6IDB4JWx4IGF0IDB4JWx4XG4iLAotCQkgICAgICAgc2M1MjBjZHBfbWFwW2ldLnNpemUsIHNjNTIwY2RwX21hcFtpXS5waHlzKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJTQzUyMCBDRFAgZmxhc2ggZGV2aWNlOiAweCVMeCBhdCAweCVMeFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2M1MjBjZHBfbWFwW2ldLnNpemUsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXNjNTIwY2RwX21hcFtpXS5waHlzKTsKIAogCQlzYzUyMGNkcF9tYXBbaV0udmlydCA9IGlvcmVtYXBfbm9jYWNoZShzYzUyMGNkcF9tYXBbaV0ucGh5cywgc2M1MjBjZHBfbWFwW2ldLnNpemUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRjaGFyLmMgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKaW5kZXggNjFhOTk0ZS4uMTU5MmVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY2hhci5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNoYXIuYwpAQCAtNDE5LDggKzQxOSw5IEBACiAJCWluZm8uZXJhc2VzaXplCT0gbXRkLT5lcmFzZXNpemU7CiAJCWluZm8ud3JpdGVzaXplCT0gbXRkLT53cml0ZXNpemU7CiAJCWluZm8ub29ic2l6ZQk9IG10ZC0+b29ic2l6ZTsKLQkJaW5mby5lY2N0eXBlCT0gbXRkLT5lY2N0eXBlOwotCQlpbmZvLmVjY3NpemUJPSBtdGQtPmVjY3NpemU7CisJCS8qIFRoZSBiZWxvdyBmaWVsZHMgYXJlIG9ic29sZXRlICovCisJCWluZm8uZWNjdHlwZQk9IC0xOworCQlpbmZvLmVjY3NpemUJPSAwOwogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvX3VzZXIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKaW5kZXggMDY5MDI2OC4uODgwNTgwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKQEAgLTcyNyw4ICs3MjcsNiBAQAogCWNvbmNhdC0+bXRkLmVyYXNlc2l6ZSA9IHN1YmRldlswXS0+ZXJhc2VzaXplOwogCWNvbmNhdC0+bXRkLndyaXRlc2l6ZSA9IHN1YmRldlswXS0+d3JpdGVzaXplOwogCWNvbmNhdC0+bXRkLm9vYnNpemUgPSBzdWJkZXZbMF0tPm9vYnNpemU7Ci0JY29uY2F0LT5tdGQuZWNjdHlwZSA9IHN1YmRldlswXS0+ZWNjdHlwZTsKLQljb25jYXQtPm10ZC5lY2NzaXplID0gc3ViZGV2WzBdLT5lY2NzaXplOwogCWlmIChzdWJkZXZbMF0tPndyaXRldikKIAkJY29uY2F0LT5tdGQud3JpdGV2ID0gY29uY2F0X3dyaXRldjsKIAlpZiAoc3ViZGV2WzBdLT5yZWFkX29vYikKQEAgLTc3NCw4ICs3NzIsNiBAQAogCQlpZiAoY29uY2F0LT5tdGQud3JpdGVzaXplICAgIT0gIHN1YmRldltpXS0+d3JpdGVzaXplIHx8CiAJCSAgICBjb25jYXQtPm10ZC5zdWJwYWdlX3NmdCAhPSBzdWJkZXZbaV0tPnN1YnBhZ2Vfc2Z0IHx8CiAJCSAgICBjb25jYXQtPm10ZC5vb2JzaXplICAgICE9ICBzdWJkZXZbaV0tPm9vYnNpemUgfHwKLQkJICAgIGNvbmNhdC0+bXRkLmVjY3R5cGUgICAgIT0gIHN1YmRldltpXS0+ZWNjdHlwZSB8fAotCQkgICAgY29uY2F0LT5tdGQuZWNjc2l6ZSAgICAhPSAgc3ViZGV2W2ldLT5lY2NzaXplIHx8CiAJCSAgICAhY29uY2F0LT5tdGQucmVhZF9vb2IgICE9ICFzdWJkZXZbaV0tPnJlYWRfb29iIHx8CiAJCSAgICAhY29uY2F0LT5tdGQud3JpdGVfb29iICE9ICFzdWJkZXZbaV0tPndyaXRlX29vYikgewogCQkJa2ZyZWUoY29uY2F0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwppbmRleCBiYWZkMmZiLi42MzNkZWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCkBAIC0zMzgsOCArMzM4LDYgQEAKIAkJc2xhdmUtPm10ZC5zaXplID0gcGFydHNbaV0uc2l6ZTsKIAkJc2xhdmUtPm10ZC53cml0ZXNpemUgPSBtYXN0ZXItPndyaXRlc2l6ZTsKIAkJc2xhdmUtPm10ZC5vb2JzaXplID0gbWFzdGVyLT5vb2JzaXplOwotCQlzbGF2ZS0+bXRkLmVjY3R5cGUgPSBtYXN0ZXItPmVjY3R5cGU7Ci0JCXNsYXZlLT5tdGQuZWNjc2l6ZSA9IG1hc3Rlci0+ZWNjc2l6ZTsKIAkJc2xhdmUtPm10ZC5zdWJwYWdlX3NmdCA9IG1hc3Rlci0+c3VicGFnZV9zZnQ7CiAKIAkJc2xhdmUtPm10ZC5uYW1lID0gcGFydHNbaV0ubmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCAzNThmNTVhLi4yZDEyZGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC0xMjYsMTAgKzEyNiw2IEBACiAJICBpbmNvcnJlY3QgRUNDIGdlbmVyYXRpb24sIGFuZCBpZiB1c2luZyB0aGVzZSwgdGhlIGRlZmF1bHQgb2YKIAkgIHNvZnR3YXJlIEVDQyBpcyBwcmVmZXJhYmxlLgogCi0JICBJZiB5b3UgbGF5IGRvd24gYSBkZXZpY2Ugd2l0aCB0aGUgaGFyZHdhcmUgRUNDLCB0aGVuIHlvdSB3aWxsCi0JICBjdXJyZW50bHkgbm90IGJlIGFibGUgdG8gc3dpdGNoIHRvIHNvZnR3YXJlLCBhcyB0aGVyZSBpcyBubwotCSAgaW1wbGVtZW50YXRpb24gZm9yIEVDQyBtZXRob2QgdXNlZCBieSB0aGUgUzNDMjQxMAotCiBjb25maWcgTVREX05BTkRfTkRGQwogCXRyaXN0YXRlICJOREZDIE5hbkQgRmxhc2ggQ29udHJvbGxlciIKIAlkZXBlbmRzIG9uIE1URF9OQU5EICYmIDQ0eApAQCAtMjIxLDkgKzIxNywxNyBAQAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIEZsYXNoIG9uIFNoYXJwIFNMIFNlcmllcyAoQzd4eCArIG90aGVycykiCiAJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBBUkNIX1BYQQogCitjb25maWcgTVREX05BTkRfQkFTTEVSX0VYQ0lURQorCXRyaXN0YXRlICAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBvbiBCYXNsZXIgZVhjaXRlIgorCWRlcGVuZHMgb24gTVREX05BTkQgJiYgQkFTTEVSX0VYQ0lURQorCWhlbHAKKyAgICAgICAgICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggZGV2aWNlIGZvdW5kIG9uIHRoZQorICAgICAgICAgIEJhc2xlciBlWGNpdGUgU21hcnQgQ2FtZXJhLiBJZiBidWlsdCBhcyBhIG1vZHVsZSwgdGhlIGRyaXZlcgorICAgICAgICAgIHdpbGwgYmUgbmFtZWQgImV4Y2l0ZV9uYW5kZmxhc2gua28iLgorCiBjb25maWcgTVREX05BTkRfQ0FGRQogICAgICAgIHRyaXN0YXRlICJOQU5EIHN1cHBvcnQgZm9yIE9MUEMgQ0FGw4kgY2hpcCIKLSAgICAgICBkZXBlbmRzIG9uIFBDSQorICAgICAgIGRlcGVuZHMgb24gTVREX05BTkQgJiYgUENJCiAgICAgICAgaGVscAogCSBVc2UgTkFORCBmbGFzaCBhdHRhY2hlZCB0byB0aGUgQ0FGw4kgY2hpcCBkZXNpZ25lZCBmb3IgdGhlICQxMDAKIAkgbGFwdG9wLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKaW5kZXggZjdhNTNmMC4uODBmMWRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfQ1M1NTNYKQkJKz0gY3M1NTN4X25hbmQubwogb2JqLSQoQ09ORklHX01URF9OQU5EX05ERkMpCQkrPSBuZGZjLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9BVDkxKQkJKz0gYXQ5MV9uYW5kLm8KK29iai0kKENPTkZJR19NVERfTkFORF9CQVNMRVJfRVhDSVRFKQkrPSBleGNpdGVfbmFuZGZsYXNoLm8KIAogbmFuZC1vYmpzIDo9IG5hbmRfYmFzZS5vIG5hbmRfYmJ0Lm8KIGNhZmVfbmFuZC1vYmpzIDo9IGNhZmUubyBjYWZlX2VjYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2NhZmUuYyBiL2RyaXZlcnMvbXRkL25hbmQvY2FmZS5jCmluZGV4IDA4Y2IwNjAuLmZkNmJiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvY2FmZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvY2FmZS5jCkBAIC03OCw4ICs3OCw5IEBACiBzdGF0aWMgaW50IGNoZWNrZWNjID0gMTsKIG1vZHVsZV9wYXJhbShjaGVja2VjYywgaW50LCAwNjQ0KTsKIAotc3RhdGljIGludCBzbG93dGltaW5nID0gMDsKLW1vZHVsZV9wYXJhbShzbG93dGltaW5nLCBpbnQsIDA2NDQpOworc3RhdGljIGludCBudW10aW1pbmdzOworc3RhdGljIGludCB0aW1pbmdbM107Cittb2R1bGVfcGFyYW1fYXJyYXkodGltaW5nLCBpbnQsICZudW10aW1pbmdzLCAwNjQ0KTsKIAogLyogSHJtLiBXaHkgaXNuJ3QgdGhpcyBhbHJlYWR5IGNvbmRpdGlvbmFsIG9uIHNvbWV0aGluZyBpbiB0aGUgc3RydWN0IGRldmljZT8gKi8KICNkZWZpbmUgY2FmZV9kZXZfZGJnKGRldiwgYXJncy4uLikgZG8geyBpZiAoZGVidWcpIGRldl9kYmcoZGV2LCAjI2FyZ3MpOyB9IHdoaWxlKDApCkBAIC0yNjQsMTAgKzI2NSwxMCBAQAogCW5kZWxheSgxMDApOwogCiAJaWYgKDEpIHsKLQkJaW50IGMgPSA1MDAwMDA7CisJCWludCBjOwogCQl1aW50MzJfdCBpcnFzOwogCi0JCXdoaWxlIChjLS0pIHsKKwkJZm9yIChjID0gNTAwMDAwOyBjICE9IDA7IGMtLSkgewogCQkJaXJxcyA9IGNhZmVfcmVhZGwoY2FmZSwgTkFORF9JUlEpOwogCQkJaWYgKGlycXMgJiBkb25laW50KQogCQkJCWJyZWFrOwpAQCAtNTI5LDYgKzUzMCw3IEBACiB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQ7CiAJc3RydWN0IGNhZmVfcHJpdiAqY2FmZTsKKwl1aW50MzJfdCB0aW1pbmcxLCB0aW1pbmcyLCB0aW1pbmczOwogCXVpbnQzMl90IGN0cmw7CiAJaW50IGVyciA9IDA7CiAKQEAgLTU4MCwzMSArNTgyLDQ1IEBACiAJCWNhZmUtPm5hbmQuYmxvY2tfYmFkID0gY2FmZV9uYW5kX2Jsb2NrX2JhZDsKIAl9CiAKKwlpZiAobnVtdGltaW5ncyAmJiBudW10aW1pbmdzICE9IDMpIHsKKwkJZGV2X3dhcm4oJmNhZmUtPnBkZXYtPmRldiwgIiVkIHRpbWluZyByZWdpc3RlciB2YWx1ZXMgaWdub3JlZDsgcHJlY2lzZWx5IHRocmVlIGFyZSByZXF1aXJlZFxuIiwgbnVtdGltaW5ncyk7CisJfQorCisJaWYgKG51bXRpbWluZ3MgPT0gMykgeworCQl0aW1pbmcxID0gdGltaW5nWzBdOworCQl0aW1pbmcyID0gdGltaW5nWzFdOworCQl0aW1pbmczID0gdGltaW5nWzJdOworCQljYWZlX2Rldl9kYmcoJmNhZmUtPnBkZXYtPmRldiwgIlVzaW5nIHByb3ZpZGVkIHRpbWluZ3MgKCUwOHggJTA4eCAlMDh4KVxuIiwKKwkJCSAgICAgdGltaW5nMSwgdGltaW5nMiwgdGltaW5nMyk7CisJfSBlbHNlIHsKKwkJdGltaW5nMSA9IGNhZmVfcmVhZGwoY2FmZSwgTkFORF9USU1JTkcxKTsKKwkJdGltaW5nMiA9IGNhZmVfcmVhZGwoY2FmZSwgTkFORF9USU1JTkcyKTsKKwkJdGltaW5nMyA9IGNhZmVfcmVhZGwoY2FmZSwgTkFORF9USU1JTkczKTsKKworCQlpZiAodGltaW5nMSB8IHRpbWluZzIgfCB0aW1pbmczKSB7CisJCQljYWZlX2Rldl9kYmcoJmNhZmUtPnBkZXYtPmRldiwgIlRpbWluZyByZWdpc3RlcnMgYWxyZWFkeSBzZXQgKCUwOHggJTA4eCAlMDh4KVxuIiwgdGltaW5nMSwgdGltaW5nMiwgdGltaW5nMyk7CisJCX0gZWxzZSB7CisJCQlkZXZfd2FybigmY2FmZS0+cGRldi0+ZGV2LCAiVGltaW5nIHJlZ2lzdGVycyB1bnNldDsgdXNpbmcgbW9zdCBjb25zZXJ2YXRpdmUgZGVmYXVsdHNcbiIpOworCQkJdGltaW5nMSA9IHRpbWluZzIgPSB0aW1pbmczID0gMHhmZmZmZmZmZjsKKwkJfQorCX0KKwogCS8qIFN0YXJ0IG9mZiBieSByZXNldHRpbmcgdGhlIE5BTkQgY29udHJvbGxlciBjb21wbGV0ZWx5ICovCiAJY2FmZV93cml0ZWwoY2FmZSwgMSwgTkFORF9SRVNFVCk7CiAJY2FmZV93cml0ZWwoY2FmZSwgMCwgTkFORF9SRVNFVCk7CiAKLQljYWZlX3dyaXRlbChjYWZlLCAweGZmZmZmZmZmLCBOQU5EX0lSUV9NQVNLKTsKKwljYWZlX3dyaXRlbChjYWZlLCB0aW1pbmcxLCBOQU5EX1RJTUlORzEpOworCWNhZmVfd3JpdGVsKGNhZmUsIHRpbWluZzIsIE5BTkRfVElNSU5HMik7CisJY2FmZV93cml0ZWwoY2FmZSwgdGltaW5nMywgTkFORF9USU1JTkczKTsKIAotCS8qIFRpbWluZ3MgZnJvbSBNYXJ2ZWxsJ3MgdGVzdCBjb2RlIChub3QgdmVyaWZpZWQgb3IgY2FsY3VsYXRlZCBieSB1cykgKi8KLQlpZiAoIXNsb3d0aW1pbmcpIHsKLQkJY2FmZV93cml0ZWwoY2FmZSwgMHgwMTAxMGEwYSwgTkFORF9USU1JTkcxKTsKLQkJY2FmZV93cml0ZWwoY2FmZSwgMHgyNDEyMTIxMiwgTkFORF9USU1JTkcyKTsKLQkJY2FmZV93cml0ZWwoY2FmZSwgMHgxMTAwMDAwMCwgTkFORF9USU1JTkczKTsKLQl9IGVsc2UgewotCQljYWZlX3dyaXRlbChjYWZlLCAweGZmZmZmZmZmLCBOQU5EX1RJTUlORzEpOwotCQljYWZlX3dyaXRlbChjYWZlLCAweGZmZmZmZmZmLCBOQU5EX1RJTUlORzIpOwotCQljYWZlX3dyaXRlbChjYWZlLCAweGZmZmZmZmZmLCBOQU5EX1RJTUlORzMpOwotCX0KIAljYWZlX3dyaXRlbChjYWZlLCAweGZmZmZmZmZmLCBOQU5EX0lSUV9NQVNLKTsKIAllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZjYWZlX25hbmRfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSAgIkNBRkUgTkFORCIsIG10ZCk7CiAJaWYgKGVycikgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIElSUSAlZFxuIiwgcGRldi0+aXJxKTsKLQogCQlnb3RvIG91dF9mcmVlX2RtYTsKIAl9Ci0jaWYgMQorCiAJLyogRGlzYWJsZSBtYXN0ZXIgcmVzZXQsIGVuYWJsZSBOQU5EIGNsb2NrICovCiAJY3RybCA9IGNhZmVfcmVhZGwoY2FmZSwgR0xPQkFMX0NUUkwpOwogCWN0cmwgJj0gMHhmZmZmZWZmMDsKQEAgLTYzMSwzMiArNjQ3LDggQEAKIAljYWZlX3dyaXRlbChjYWZlLCAweDgwMDAwMDA3LCBHTE9CQUxfSVJRX01BU0spOwogCWNhZmVfZGV2X2RiZygmY2FmZS0+cGRldi0+ZGV2LCAiQ29udHJvbCAleCwgSVJRIG1hc2sgJXhcbiIsCiAJCWNhZmVfcmVhZGwoY2FmZSwgR0xPQkFMX0NUUkwpLCBjYWZlX3JlYWRsKGNhZmUsIEdMT0JBTF9JUlFfTUFTSykpOwotI2VuZGlmCi0jaWYgMQotCW10ZC0+d3JpdGVzaXplPTIwNDg7Ci0JbXRkLT5vb2JzaXplID0gMHg0MDsKLQltZW1zZXQoY2FmZS0+ZG1hYnVmLCAweDVhLCAyMTEyKTsKLQljYWZlLT5uYW5kLmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFESUQsIDAsIC0xKTsKLQljYWZlLT5uYW5kLnJlYWRfYnl0ZShtdGQpOwotCWNhZmUtPm5hbmQucmVhZF9ieXRlKG10ZCk7Ci0JY2FmZS0+bmFuZC5yZWFkX2J5dGUobXRkKTsKLQljYWZlLT5uYW5kLnJlYWRfYnl0ZShtdGQpOwotCWNhZmUtPm5hbmQucmVhZF9ieXRlKG10ZCk7Ci0jZW5kaWYKLSNpZiAwCi0JY2FmZS0+bmFuZC5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIDAsIDApOwotCS8vCW5hbmRfd2FpdF9yZWFkeShtdGQpOwotCWNhZmUtPm5hbmQucmVhZF9ieXRlKG10ZCk7Ci0JY2FmZS0+bmFuZC5yZWFkX2J5dGUobXRkKTsKLQljYWZlLT5uYW5kLnJlYWRfYnl0ZShtdGQpOwotCWNhZmUtPm5hbmQucmVhZF9ieXRlKG10ZCk7Ci0jZW5kaWYKLSNpZiAwCi0Jd3JpdGVsKDB4ODQ2MDAwNzAsIGNhZmUtPm1taW8pOwotCXVkZWxheSgxMCk7Ci0JY2FmZV9kZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJTdGF0dXMgJXhcbiIsIGNhZmVfcmVhZGwoY2FmZSwgTkFORF9OT05NRU0pKTsKLSNlbmRpZgotCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCiAJaWYgKG5hbmRfc2Nhbl9pZGVudChtdGQsIDEpKSB7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBvdXRfaXJxOwpAQCAtNzYwLDEzICs3NTIsNCBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk5BTkQgZmxhc2ggZHJpdmVyIGZvciBPTFBDIENBRkUgY2hpcCIpOwotCi0vKiBDb3JyZWN0IEVDQyBmb3IgMjA0OCBieXRlcyBvZiAweGZmOgotICAgNDEgYTAgNzEgNjUgNTQgMjcgZjMgOTMgZWMgYTkgYmUgZWQgMGIgYTEgKi8KLQotLyogZHdtdzIncyBCLXRlc3QgYm9hcmQsIGluIGNhc2Ugb2YgY29tcGxldGVseSBzY3Jld2luZyBpdDoKLUJhZCBlcmFzZWJsb2NrIDIzOTQgYXQgMHgxMmI0MDAwMAotQmFkIGVyYXNlYmxvY2sgMjYyNyBhdCAweDE0ODYwMDAwCi1CYWQgZXJhc2VibG9jayAzMzQ5IGF0IDB4MWEyYTAwMDAKLSovCitNT0RVTEVfREVTQ1JJUFRJT04oIk5BTkQgZmxhc2ggZHJpdmVyIGZvciBPTFBDIENBRsOJIGNoaXAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9lY2MuYyBiL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9lY2MuYwppbmRleCAxYjlmYTA1Li5lYTVjODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NhZmVfZWNjLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9jYWZlX2VjYy5jCkBAIC0xMDQ1LDcgKzEwNDUsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXJyX3Bvcyh1bnNpZ25lZCBzaG9ydCBkaW4pCiB7Ci0JQlVHX09OKGRpbiA+IDQwOTYpOworCUJVR19PTihkaW4gPj0gQVJSQVlfU0laRShlcnJfcG9zX2x1dCkpOwogCXJldHVybiBlcnJfcG9zX2x1dFtkaW5dOwogfQogc3RhdGljIGludCBjaGtfbm9fZXJyX29ubHkodW5zaWduZWQgc2hvcnQgKmNoa19zeW5kcm9tZV9saXN0LCB1bnNpZ25lZCBzaG9ydCAqZXJyX2luZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYyBiL2RyaXZlcnMvbXRkL25hbmQvZXhjaXRlX25hbmRmbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOWFmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYwpAQCAtMCwwICsxLDI0OCBAQAorLyoKKyogIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDcgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKKyogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyLnFiYXNsZXJ3ZWIuY29tPgorKiAgT3JpZ2luYWwgY29kZSBieSBUaGllcyBNb2VsbGVyIDx0aGllcy5tb2VsbGVyQGJhc2xlcndlYi5jb20+CisqCisqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+CisKKyNpbmNsdWRlIDxleGNpdGVfbmFuZGZsYXNoLmg+CisKKyNkZWZpbmUgRVhDSVRFX05BTkRGTEFTSF9WRVJTSU9OICIwLjEiCisKKy8qIEkvTyByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIEVYQ0lURV9OQU5ERkxBU0hfREFUQV9CWVRFICAgMHgwMAorI2RlZmluZSBFWENJVEVfTkFOREZMQVNIX1NUQVRVU19CWVRFIDB4MGMKKyNkZWZpbmUgRVhDSVRFX05BTkRGTEFTSF9BRERSX0JZVEUgICAweDEwCisjZGVmaW5lIEVYQ0lURV9OQU5ERkxBU0hfQ01EX0JZVEUgICAgMHgxNAorCisvKiBwcmVmaXggZm9yIGRlYnVnIG91dHB1dCAqLworc3RhdGljIGNvbnN0IGNoYXIgbW9kdWxlX2lkW10gPSAiZXhjaXRlX25hbmRmbGFzaCI7CisKKy8qCisgKiBwYXJ0aXRpb24gZGVmaW5pdGlvbgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9bXSA9IHsKKwl7CisJCS5uYW1lID0gImVYY2l0ZSBSb290RlMiLAorCQkub2Zmc2V0ID0gMCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMCisJfQorfTsKKworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKgorZXhjaXRlX25hbmRfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkgY29uc3QgY2hhciAqYmFzZW5hbWUpCit7CisJY2hhciBidWZbODBdOworCisJaWYgKHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVzXyV1IiwgYmFzZW5hbWUsIGQtPmlkKSA+PSBzaXplb2YgYnVmKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkLCBmbGFncywgYnVmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgorZXhjaXRlX25hbmRfbWFwX3JlZ3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZCwgY29uc3QgY2hhciAqYmFzZW5hbWUpCit7CisJdm9pZCAqcmVzdWx0ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKmNvbnN0IHIgPQorCSAgICBleGNpdGVfbmFuZF9nZXRfcmVzb3VyY2UoZCwgSU9SRVNPVVJDRV9NRU0sIGJhc2VuYW1lKTsKKworCWlmIChyKQorCQlyZXN1bHQgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHItPmVuZCArIDEgLSByLT5zdGFydCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogY29udHJvbGxlciBhbmQgbXRkIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSB7CisJc3RydWN0IG10ZF9pbmZvIGJvYXJkX210ZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwIGJvYXJkX2NoaXA7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXZvaWQgX19pb21lbSAqdGd0OworfTsKKworLyogQ29udHJvbCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgZXhjaXRlX25hbmRfY29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKiBjb25zdCBkID0KKwkgICAgY29udGFpbmVyX29mKG10ZCwgc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEsIGJvYXJkX210ZCk7CisKKwlzd2l0Y2ggKGN0cmwpIHsKKwljYXNlIE5BTkRfQ1RSTF9DSEFOR0UgfCBOQU5EX0NUUkxfQ0xFOgorCQlkLT50Z3QgPSBkLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9DTURfQllURTsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NUUkxfQ0hBTkdFIHwgTkFORF9DVFJMX0FMRToKKwkJZC0+dGd0ID0gZC0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfQUREUl9CWVRFOworCQlicmVhazsKKwljYXNlIE5BTkRfQ1RSTF9DSEFOR0UgfCBOQU5EX05DRToKKwkJZC0+dGd0ID0gZC0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfREFUQV9CWVRFOworCQlicmVhazsKKwl9CisKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCV9fcmF3X3dyaXRlYihjbWQsIGQtPnRndCk7Cit9CisKKy8qIFJldHVybiAwIGlmIGZsYXNoIGlzIGJ1c3ksIDEgaWYgcmVhZHkgKi8KK3N0YXRpYyBpbnQgZXhjaXRlX25hbmRfZGV2cmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKiBjb25zdCBkcnZkYXRhID0KKwkgICAgY29udGFpbmVyX29mKG10ZCwgc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEsIGJvYXJkX210ZCk7CisKKwlyZXR1cm4gX19yYXdfcmVhZGIoZHJ2ZGF0YS0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfU1RBVFVTX0JZVEUpOworfQorCisvKgorICogQ2FsbGVkIGJ5IGRldmljZSBsYXllciB0byByZW1vdmUgdGhlIGRyaXZlci4KKyAqIFRoZSBiaW5kaW5nIHRvIHRoZSBtdGQgYW5kIGFsbCBhbGxvY2F0ZWQKKyAqIHJlc291cmNlcyBhcmUgcmVsZWFzZWQuCisgKi8KK3N0YXRpYyBpbnQgX19leGl0IGV4Y2l0ZV9uYW5kX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKiBjb25zdCB0aGlzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCWlmICh1bmxpa2VseSghdGhpcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FsbGVkICVzIHdpdGhvdXQgcHJpdmF0ZSBkYXRhISEiLAorCQkgICAgICAgbW9kdWxlX2lkLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgcmVsZWFzZSBvdXIgbXRkCisJICogdGhlbiBnbyB0aHJvdWdoIGZyZWVpbmcgdGhlIHJlc291cmNlIHVzZWQKKwkgKi8KKwluYW5kX3JlbGVhc2UoJnRoaXMtPmJvYXJkX210ZCk7CisKKwkvKiBmcmVlIHRoZSBjb21tb24gcmVzb3VyY2VzICovCisJaW91bm1hcCh0aGlzLT5yZWdzKTsKKwlrZnJlZSh0aGlzKTsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDEsICIlczogcmVtb3ZlZFxuIiwgbW9kdWxlX2lkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGxlZCBieSBkZXZpY2UgbGF5ZXIgd2hlbiBpdCBmaW5kcyBhIGRldmljZSBtYXRjaGluZworICogb25lIG91ciBkcml2ZXIgY2FuIGhhbmRsZS4gVGhpcyBjb2RlIGNoZWNrcyB0byBzZWUgaWYKKyAqIGl0IGNhbiBhbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IHJlc291cmNlcyB0aGVuIGNhbGxzIHRoZQorICogbmFuZCBsYXllciB0byBsb29rIGZvciBkZXZpY2VzLgorKi8KK3N0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogY29uc3QgcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICpkcnZkYXRhOwkvKiBwcml2YXRlIGRyaXZlciBkYXRhICovCisJc3RydWN0IG5hbmRfY2hpcCAqYm9hcmRfY2hpcDsJLyogcHJpdmF0ZSBmbGFzaCBjaGlwIGRhdGEgKi8KKwlzdHJ1Y3QgbXRkX2luZm8gKmJvYXJkX210ZDsJLyogbXRkIGluZm8gZm9yIHRoaXMgYm9hcmQgKi8KKwlpbnQgc2Nhbl9yZXM7CisKKwlkcnZkYXRhID0ga3phbGxvYyhzaXplb2YoKmRydmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIWRydmRhdGEpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeSBmb3IgZHJ2ZGF0YVxuIiwKKwkJICAgICAgIG1vZHVsZV9pZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIGJpbmQgcHJpdmF0ZSBkYXRhIGludG8gZHJpdmVyICovCisJZGV2X3NldF9kcnZkYXRhKGRldiwgZHJ2ZGF0YSk7CisKKwkvKiBhbGxvY2F0ZSBhbmQgbWFwIHRoZSByZXNvdXJjZSAqLworCWRydmRhdGEtPnJlZ3MgPQorCQlleGNpdGVfbmFuZF9tYXBfcmVncyhwZGV2LCBFWENJVEVfTkFOREZMQVNIX1JFU09VUkNFX1JFR1MpOworCisJaWYgKHVubGlrZWx5KCFkcnZkYXRhLT5yZWdzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIsCisJCSAgICAgICBtb2R1bGVfaWQpOworCQlrZnJlZShkcnZkYXRhKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJCisJZHJ2ZGF0YS0+dGd0ID0gZHJ2ZGF0YS0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfREFUQV9CWVRFOworCisJLyogaW5pdGlhbGlzZSBvdXIgY2hpcCAqLworCWJvYXJkX2NoaXAgPSAmZHJ2ZGF0YS0+Ym9hcmRfY2hpcDsKKwlib2FyZF9jaGlwLT5JT19BRERSX1IgPSBib2FyZF9jaGlwLT5JT19BRERSX1cgPQorCQlkcnZkYXRhLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9EQVRBX0JZVEU7CisJYm9hcmRfY2hpcC0+Y21kX2N0cmwgPSBleGNpdGVfbmFuZF9jb250cm9sOworCWJvYXJkX2NoaXAtPmRldl9yZWFkeSA9IGV4Y2l0ZV9uYW5kX2RldnJlYWR5OworCWJvYXJkX2NoaXAtPmNoaXBfZGVsYXkgPSAyNTsKKwlib2FyZF9jaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisKKwkvKiBsaW5rIGNoaXAgdG8gbXRkICovCisJYm9hcmRfbXRkID0gJmRydmRhdGEtPmJvYXJkX210ZDsKKwlib2FyZF9tdGQtPnByaXYgPSBib2FyZF9jaGlwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMiwgIiVzOiBkZXZpY2Ugc2NhblxuIiwgbW9kdWxlX2lkKTsKKwlzY2FuX3JlcyA9IG5hbmRfc2NhbigmZHJ2ZGF0YS0+Ym9hcmRfbXRkLCAxKTsKKworCWlmIChsaWtlbHkoIXNjYW5fcmVzKSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwyLCAiJXM6IHJlZ2lzdGVyIHBhcnRpdGlvbnNcbiIsIG1vZHVsZV9pZCk7CisJCWFkZF9tdGRfcGFydGl0aW9ucygmZHJ2ZGF0YS0+Ym9hcmRfbXRkLCBwYXJ0aXRpb25faW5mbywKKwkJCQkgICBzaXplb2YgcGFydGl0aW9uX2luZm8gLyBzaXplb2YgcGFydGl0aW9uX2luZm9bMF0pOworCX0gZWxzZSB7CisJCWlvdW5tYXAoZHJ2ZGF0YS0+cmVncyk7CisJCWtmcmVlKGRydmRhdGEpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkZXZpY2Ugc2NhbiBmYWlsZWRcbiIsIG1vZHVsZV9pZCk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGV4Y2l0ZV9uYW5kX2RyaXZlciA9IHsKKwkubmFtZSA9ICJleGNpdGVfbmFuZCIsCisJLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUgPSBleGNpdGVfbmFuZF9wcm9iZSwKKwkucmVtb3ZlID0gX19leGl0X3AoZXhjaXRlX25hbmRfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZXhjaXRlX25hbmRfaW5pdCh2b2lkKQoreworCXByX2luZm8oIkJhc2xlciBlWGNpdGUgbmFuZCBmbGFzaCBkcml2ZXIgVmVyc2lvbiAiCisJCUVYQ0lURV9OQU5ERkxBU0hfVkVSU0lPTiAiXG4iKTsKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhjaXRlX25hbmRfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChleGNpdGVfbmFuZF9pbml0KTsKK21vZHVsZV9leGl0KGV4Y2l0ZV9uYW5kX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQmFzbGVyIGVYY2l0ZSBOQU5ELUZsYXNoIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRVhDSVRFX05BTkRGTEFTSF9WRVJTSU9OKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggZGZlNTZlMC4uYWNhZjk3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC0xMjcyLDEwICsxMjcyLDI1IEBACiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfcmVhZF9vb2I6IGZyb20gPSAweCUwOEx4LCBsZW4gPSAlaVxuIiwKIAkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZyb20sIHJlYWRsZW4pOwogCi0JaWYgKG9wcy0+bW9kZSA9PSBNVERfT09CX1JBVykKLQkJbGVuID0gbXRkLT5vb2JzaXplOwotCWVsc2UKKwlpZiAob3BzLT5tb2RlID09IE1URF9PT0JfQVVUTykKIAkJbGVuID0gY2hpcC0+ZWNjLmxheW91dC0+b29iYXZhaWw7CisJZWxzZQorCQlsZW4gPSBtdGQtPm9vYnNpemU7CisKKwlpZiAodW5saWtlbHkob3BzLT5vb2JvZmZzID49IGxlbikpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9vb2I6ICIKKwkJCSJBdHRlbXB0IHRvIHN0YXJ0IHJlYWQgb3V0c2lkZSBvb2JcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKHVubGlrZWx5KGZyb20gPj0gbXRkLT5zaXplIHx8CisJCSAgICAgb3BzLT5vb2JvZmZzICsgcmVhZGxlbiA+ICgobXRkLT5zaXplID4+IGNoaXAtPnBhZ2Vfc2hpZnQpIC0KKwkJCQkJKGZyb20gPj4gY2hpcC0+cGFnZV9zaGlmdCkpICogbGVuKSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX29vYjogIgorCQkJIkF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWNoaXBuciA9IChpbnQpKGZyb20gPj4gY2hpcC0+Y2hpcF9zaGlmdCk7CiAJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwpAQCAtMTc0MiwxOSArMTc1Nyw0MCBAQAogc3RhdGljIGludCBuYW5kX2RvX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAogCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKLQlpbnQgY2hpcG5yLCBwYWdlLCBzdGF0dXM7CisJaW50IGNoaXBuciwgcGFnZSwgc3RhdHVzLCBsZW47CiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX3dyaXRlX29vYjogdG8gPSAweCUwOHgsIGxlbiA9ICVpXG4iLAogCSAgICAgICh1bnNpZ25lZCBpbnQpdG8sIChpbnQpb3BzLT5vb2JsZW4pOwogCisJaWYgKG9wcy0+bW9kZSA9PSBNVERfT09CX0FVVE8pCisJCWxlbiA9IGNoaXAtPmVjYy5sYXlvdXQtPm9vYmF2YWlsOworCWVsc2UKKwkJbGVuID0gbXRkLT5vb2JzaXplOworCiAJLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2UgKi8KLQlpZiAoKG9wcy0+b29ib2ZmcyArIG9wcy0+b29ibGVuKSA+IG10ZC0+b29ic2l6ZSkgeworCWlmICgob3BzLT5vb2JvZmZzICsgb3BzLT5vb2JsZW4pID4gbGVuKSB7CiAJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX29vYjogIgogCQkgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKHVubGlrZWx5KG9wcy0+b29ib2ZmcyA+PSBsZW4pKSB7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3JlYWRfb29iOiAiCisJCQkiQXR0ZW1wdCB0byBzdGFydCB3cml0ZSBvdXRzaWRlIG9vYlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KKwlpZiAodW5saWtlbHkodG8gPj0gbXRkLT5zaXplIHx8CisJCSAgICAgb3BzLT5vb2JvZmZzICsgb3BzLT5vb2JsZW4gPgorCQkJKChtdGQtPnNpemUgPj4gY2hpcC0+cGFnZV9zaGlmdCkgLQorCQkJICh0byA+PiBjaGlwLT5wYWdlX3NoaWZ0KSkgKiBsZW4pKSB7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3JlYWRfb29iOiAiCisJCQkiQXR0ZW1wdCB3cml0ZSBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWNoaXBuciA9IChpbnQpKHRvID4+IGNoaXAtPmNoaXBfc2hpZnQpOwogCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKIApAQCAtMjUzMCw3ICsyNTY2LDYgQEAKIAkvKiBGaWxsIGluIHJlbWFpbmluZyBNVEQgZHJpdmVyIGRhdGEgKi8KIAltdGQtPnR5cGUgPSBNVERfTkFOREZMQVNIOwogCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX05BTkRGTEFTSDsKLQltdGQtPmVjY3R5cGUgPSBNVERfRUNDX1NXOwogCW10ZC0+ZXJhc2UgPSBuYW5kX2VyYXNlOwogCW10ZC0+cG9pbnQgPSBOVUxMOwogCW10ZC0+dW5wb2ludCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCmluZGV4IDhiMzIwMzUuLjBkZGZkNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCkBAIC0zMzcsMTcgKzMzNyw2OSBAQAogc3RhdGljIGludCBzM2MyNDEwX25hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKIAkJCQkgICAgIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpCiB7Ci0JcHJfZGVidWcoInMzYzI0MTBfbmFuZF9jb3JyZWN0X2RhdGEoJXAsJXAsJXAsJXApXG4iLCBtdGQsIGRhdCwgcmVhZF9lY2MsIGNhbGNfZWNjKTsKKwlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSBzM2MyNDEwX25hbmRfbXRkX3RvaW5mbyhtdGQpOworCXVuc2lnbmVkIGludCBkaWZmMCwgZGlmZjEsIGRpZmYyOworCXVuc2lnbmVkIGludCBiaXQsIGJ5dGU7CiAKLQlwcl9kZWJ1ZygiZWNjczogcmVhZCAlMDJ4LCUwMngsJTAyeCB2cyBjYWxjICUwMngsJTAyeCwlMDJ4XG4iLAotCQkgcmVhZF9lY2NbMF0sIHJlYWRfZWNjWzFdLCByZWFkX2VjY1syXSwgY2FsY19lY2NbMF0sIGNhbGNfZWNjWzFdLCBjYWxjX2VjY1syXSk7CisJcHJfZGVidWcoIiVzKCVwLCVwLCVwLCVwKVxuIiwgX19mdW5jX18sIG10ZCwgZGF0LCByZWFkX2VjYywgY2FsY19lY2MpOwogCi0JaWYgKHJlYWRfZWNjWzBdID09IGNhbGNfZWNjWzBdICYmIHJlYWRfZWNjWzFdID09IGNhbGNfZWNjWzFdICYmIHJlYWRfZWNjWzJdID09IGNhbGNfZWNjWzJdKQotCQlyZXR1cm4gMDsKKwlkaWZmMCA9IHJlYWRfZWNjWzBdIF4gY2FsY19lY2NbMF07CisJZGlmZjEgPSByZWFkX2VjY1sxXSBeIGNhbGNfZWNjWzFdOworCWRpZmYyID0gcmVhZF9lY2NbMl0gXiBjYWxjX2VjY1syXTsKIAotCS8qIHdlIGN1cmVudGx5IGhhdmUgbm8gbWV0aG9kIGZvciBjb3JyZWN0aW5nIHRoZSBlcnJvciAqLworCXByX2RlYnVnKCIlczogcmQgJTAyeCUwMnglMDJ4IGNhbGMgJTAyeCUwMnglMDJ4IGRpZmYgJTAyeCUwMnglMDJ4XG4iLAorCQkgX19mdW5jX18sCisJCSByZWFkX2VjY1swXSwgcmVhZF9lY2NbMV0sIHJlYWRfZWNjWzJdLAorCQkgY2FsY19lY2NbMF0sIGNhbGNfZWNjWzFdLCBjYWxjX2VjY1syXSwKKwkJIGRpZmYwLCBkaWZmMSwgZGlmZjIpOwogCi0JcmV0dXJuIC0xOworCWlmIChkaWZmMCA9PSAwICYmIGRpZmYxID09IDAgJiYgZGlmZjIgPT0gMCkKKwkJcmV0dXJuIDA7CQkvKiBFQ0MgaXMgb2sgKi8KKworCS8qIENhbiB3ZSBjb3JyZWN0IHRoaXMgRUNDIChpZSwgb25lIHJvdyBhbmQgY29sdW1uIGNoYW5nZSkuCisJICogTm90ZSwgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSAyNTYgZXJyb3IgY29kZSBvbiBzbWFydG1lZGlhICovCisKKwlpZiAoKChkaWZmMCBeIChkaWZmMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCisJICAgICgoZGlmZjEgXiAoZGlmZjEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSAmJgorCSAgICAoKGRpZmYyIF4gKGRpZmYyID4+IDEpKSAmIDB4NTUpID09IDB4NTUpIHsKKwkJLyogY2FsY3VsYXRlIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGVycm9yICovCisKKwkJYml0ICA9IChkaWZmMiA+PiAyKSAmIDE7CisJCWJpdCB8PSAoZGlmZjIgPj4gMykgJiAyOworCQliaXQgfD0gKGRpZmYyID4+IDQpICYgNDsKKworCQkvKiBjYWxjdWxhdGUgdGhlIGJ5dGUgcG9zaXRpb24gb2YgdGhlIGVycm9yICovCisKKwkJYnl0ZSAgPSAoZGlmZjEgPDwgMSkgJiAweDgwOworCQlieXRlIHw9IChkaWZmMSA8PCAyKSAmIDB4NDA7CisJCWJ5dGUgfD0gKGRpZmYxIDw8IDMpICYgMHgyMDsKKwkJYnl0ZSB8PSAoZGlmZjEgPDwgNCkgJiAweDEwOworCisJCWJ5dGUgfD0gKGRpZmYwID4+IDMpICYgMHgwODsKKwkJYnl0ZSB8PSAoZGlmZjAgPj4gMikgJiAweDA0OworCQlieXRlIHw9IChkaWZmMCA+PiAxKSAmIDB4MDI7CisJCWJ5dGUgfD0gKGRpZmYwID4+IDApICYgMHgwMTsKKworCQlieXRlIHw9IChkaWZmMiA8PCA4KSAmIDB4MTAwOworCisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiY29ycmVjdGluZyBlcnJvciBiaXQgJWQsIGJ5dGUgJWRcbiIsCisJCQliaXQsIGJ5dGUpOworCisJCWRhdFtieXRlXSBePSAoMSA8PCBiaXQpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBpZiB0aGVyZSBpcyBvbmx5IG9uZSBiaXQgZGlmZmVyZW5jZSBpbiB0aGUgRUNDLCB0aGVuCisJICogb25lIG9mIG9ubHkgYSByb3cgb3IgY29sdW1uIHBhcml0eSBoYXMgY2hhbmdlZCwgd2hpY2gKKwkgKiBtZWFucyB0aGUgZXJyb3IgaXMgbW9zdCBwcm9iYWJseSBpbiB0aGUgRUNDIGl0c2VsZiAqLworCisJZGlmZjAgfD0gKGRpZmYxIDw8IDgpOworCWRpZmYwIHw9IChkaWZmMiA8PCAxNik7CisKKwlpZiAoKGRpZmYwICYgfigxPDxmbHMoZGlmZjApKSkgPT0gMCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKIH0KIAogLyogRUNDIGZ1bmN0aW9ucwpAQCAtMzY2LDYgKzQxOCwxNSBAQAogCXdyaXRlbChjdHJsLCBpbmZvLT5yZWdzICsgUzNDMjQxMF9ORkNPTkYpOwogfQogCitzdGF0aWMgdm9pZCBzM2MyNDEyX25hbmRfZW5hYmxlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSBzM2MyNDEwX25hbmRfbXRkX3RvaW5mbyhtdGQpOworCXVuc2lnbmVkIGxvbmcgY3RybDsKKworCWN0cmwgPSByZWFkbChpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORkNPTlQpOworCXdyaXRlbChjdHJsIHwgUzNDMjQxMl9ORkNPTlRfSU5JVF9NQUlOX0VDQywgaW5mby0+cmVncyArIFMzQzI0NDBfTkZDT05UKTsKK30KKwogc3RhdGljIHZvaWQgczNjMjQ0MF9uYW5kX2VuYWJsZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpCiB7CiAJc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvID0gczNjMjQxMF9uYW5kX210ZF90b2luZm8obXRkKTsKQEAgLTM4Myw2ICs0NDQsMjEgQEAKIAllY2NfY29kZVsxXSA9IHJlYWRiKGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GRUNDICsgMSk7CiAJZWNjX2NvZGVbMl0gPSByZWFkYihpbmZvLT5yZWdzICsgUzNDMjQxMF9ORkVDQyArIDIpOwogCisJcHJfZGVidWcoIiVzOiByZXR1cm5pbmcgZWNjICUwMnglMDJ4JTAyeFxuIiwgX19mdW5jX18sCisJCSBlY2NfY29kZVswXSwgZWNjX2NvZGVbMV0sIGVjY19jb2RlWzJdKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0MTJfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSBzM2MyNDEwX25hbmRfbXRkX3RvaW5mbyhtdGQpOworCXVuc2lnbmVkIGxvbmcgZWNjID0gcmVhZGwoaW5mby0+cmVncyArIFMzQzI0MTJfTkZNRUNDMCk7CisKKwllY2NfY29kZVswXSA9IGVjYzsKKwllY2NfY29kZVsxXSA9IGVjYyA+PiA4OworCWVjY19jb2RlWzJdID0gZWNjID4+IDE2OworCiAJcHJfZGVidWcoImNhbGN1bGF0ZV9lY2M6IHJldHVybmluZyBlY2MgJTAyeCwlMDJ4LCUwMnhcbiIsIGVjY19jb2RlWzBdLCBlY2NfY29kZVsxXSwgZWNjX2NvZGVbMl0pOwogCiAJcmV0dXJuIDA7CkBAIC0zOTcsNyArNDczLDcgQEAKIAllY2NfY29kZVsxXSA9IGVjYyA+PiA4OwogCWVjY19jb2RlWzJdID0gZWNjID4+IDE2OwogCi0JcHJfZGVidWcoImNhbGN1bGF0ZV9lY2M6IHJldHVybmluZyBlY2MgJTAyeCwlMDJ4LCUwMnhcbiIsIGVjY19jb2RlWzBdLCBlY2NfY29kZVsxXSwgZWNjX2NvZGVbMl0pOworCXByX2RlYnVnKCIlczogcmV0dXJuaW5nIGVjYyAlMDZ4XG4iLCBfX2Z1bmNfXywgZWNjKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTY1LDYgKzY0MSwxMCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBUWVBFX1MzQzI0MTI6CisgIAkJCWNoaXAtPmVjYy5od2N0bCAgICAgPSBzM2MyNDEyX25hbmRfZW5hYmxlX2h3ZWNjOworICAJCQljaGlwLT5lY2MuY2FsY3VsYXRlID0gczNjMjQxMl9uYW5kX2NhbGN1bGF0ZV9lY2M7CisJCQlicmVhazsKKwogCQljYXNlIFRZUEVfUzNDMjQ0MDoKICAgCQkJY2hpcC0+ZWNjLmh3Y3RsICAgICA9IHMzYzI0NDBfbmFuZF9lbmFibGVfaHdlY2M7CiAgIAkJCWNoaXAtPmVjYy5jYWxjdWxhdGUgPSBzM2MyNDQwX25hbmRfY2FsY3VsYXRlX2VjYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCmluZGV4IDJkYTZiYjIuLjdmMWNiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgU2Ftc3VuZyBFbGVjdHJvbmljcwogICogIEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTk0LDE2ICs5NCw5IEBACiAgKi8KIHN0YXRpYyBpbnQgb25lbmFuZF9ibG9ja19hZGRyZXNzKHN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMsIGludCBibG9jaykKIHsKLQlpZiAodGhpcy0+ZGV2aWNlX2lkICYgT05FTkFORF9ERVZJQ0VfSVNfRERQKSB7Ci0JCS8qIERldmljZSBGbGFzaCBDb3JlIHNlbGVjdCwgTkFORCBGbGFzaCBCbG9jayBBZGRyZXNzICovCi0JCWludCBkZnMgPSAwOwotCi0JCWlmIChibG9jayAmIHRoaXMtPmRlbnNpdHlfbWFzaykKLQkJCWRmcyA9IDE7Ci0KLQkJcmV0dXJuIChkZnMgPDwgT05FTkFORF9ERFBfU0hJRlQpIHwKLQkJCShibG9jayAmICh0aGlzLT5kZW5zaXR5X21hc2sgLSAxKSk7Ci0JfQorCS8qIERldmljZSBGbGFzaCBDb3JlIHNlbGVjdCwgTkFORCBGbGFzaCBCbG9jayBBZGRyZXNzICovCisJaWYgKGJsb2NrICYgdGhpcy0+ZGVuc2l0eV9tYXNrKQorCQlyZXR1cm4gT05FTkFORF9ERFBfQ0hJUDEgfCAoYmxvY2sgXiB0aGlzLT5kZW5zaXR5X21hc2spOwogCiAJcmV0dXJuIGJsb2NrOwogfQpAQCAtMTE4LDE3ICsxMTEsMTEgQEAKICAqLwogc3RhdGljIGludCBvbmVuYW5kX2J1ZmZlcnJhbV9hZGRyZXNzKHN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMsIGludCBibG9jaykKIHsKLQlpZiAodGhpcy0+ZGV2aWNlX2lkICYgT05FTkFORF9ERVZJQ0VfSVNfRERQKSB7Ci0JCS8qIERldmljZSBCdWZmZXJSQU0gU2VsZWN0ICovCi0JCWludCBkYnMgPSAwOworCS8qIERldmljZSBCdWZmZXJSQU0gU2VsZWN0ICovCisJaWYgKGJsb2NrICYgdGhpcy0+ZGVuc2l0eV9tYXNrKQorCQlyZXR1cm4gT05FTkFORF9ERFBfQ0hJUDE7CiAKLQkJaWYgKGJsb2NrICYgdGhpcy0+ZGVuc2l0eV9tYXNrKQotCQkJZGJzID0gMTsKLQotCQlyZXR1cm4gKGRicyA8PCBPTkVOQU5EX0REUF9TSElGVCk7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIE9ORU5BTkRfRERQX0NISVAwOwogfQogCiAvKioKQEAgLTMxNywyMiArMzA0LDI1IEBACiAJY3RybCA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfQ1RSTF9TVEFUVVMpOwogCiAJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfRVJST1IpIHsKLQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd2FpdDogY29udHJvbGxlciBlcnJvciA9IDB4JTA0eFxuIiwgY3RybCk7CisJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiBjb250cm9sbGVyIGVycm9yID0gMHglMDR4XG4iLCBjdHJsKTsKIAkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfTE9DSykKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dhaXQ6IGl0J3MgbG9ja2VkIGVycm9yLlxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd2FpdDogaXQncyBsb2NrZWQgZXJyb3IuXG4iKTsKIAkJcmV0dXJuIGN0cmw7CiAJfQogCiAJaWYgKGludGVycnVwdCAmIE9ORU5BTkRfSU5UX1JFQUQpIHsKIAkJaW50IGVjYyA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfRUNDX1NUQVRVUyk7CiAJCWlmIChlY2MpIHsKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dhaXQ6IEVDQyBlcnJvciA9IDB4JTA0eFxuIiwgZWNjKTsKKwkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiBFQ0MgZXJyb3IgPSAweCUwNHhcbiIsIGVjYyk7CiAJCQlpZiAoZWNjICYgT05FTkFORF9FQ0NfMkJJVF9BTEwpIHsKIAkJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKIAkJCQlyZXR1cm4gZWNjOwogCQkJfSBlbHNlIGlmIChlY2MgJiBPTkVOQU5EX0VDQ18xQklUX0FMTCkKIAkJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQrKzsKIAkJfQorCX0gZWxzZSBpZiAoc3RhdGUgPT0gRkxfUkVBRElORykgeworCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd2FpdDogcmVhZCB0aW1lb3V0ISBjdHJsPTB4JTA0eCBpbnRyPTB4JTA0eFxuIiwgY3RybCwgaW50ZXJydXB0KTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01ODcsMjIgKzU3NywzMiBAQAogc3RhdGljIGludCBvbmVuYW5kX2NoZWNrX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGFkZHIpCiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgYmxvY2ssIHBhZ2U7Ci0JaW50IGk7CisJaW50IGJsb2NrcGFnZSwgZm91bmQgPSAwOworCXVuc2lnbmVkIGludCBpOwogCi0JYmxvY2sgPSAoaW50KSAoYWRkciA+PiB0aGlzLT5lcmFzZV9zaGlmdCk7Ci0JcGFnZSA9IChpbnQpIChhZGRyID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCXBhZ2UgJj0gdGhpcy0+cGFnZV9tYXNrOwotCi0JaSA9IE9ORU5BTkRfQ1VSUkVOVF9CVUZGRVJSQU0odGhpcyk7CisJYmxvY2twYWdlID0gKGludCkgKGFkZHIgPj4gdGhpcy0+cGFnZV9zaGlmdCk7CiAKIAkvKiBJcyB0aGVyZSB2YWxpZCBkYXRhPyAqLwotCWlmICh0aGlzLT5idWZmZXJyYW1baV0uYmxvY2sgPT0gYmxvY2sgJiYKLQkgICAgdGhpcy0+YnVmZmVycmFtW2ldLnBhZ2UgPT0gcGFnZSAmJgotCSAgICB0aGlzLT5idWZmZXJyYW1baV0udmFsaWQpCi0JCXJldHVybiAxOworCWkgPSBPTkVOQU5EX0NVUlJFTlRfQlVGRkVSUkFNKHRoaXMpOworCWlmICh0aGlzLT5idWZmZXJyYW1baV0uYmxvY2twYWdlID09IGJsb2NrcGFnZSkKKwkJZm91bmQgPSAxOworCWVsc2UgeworCQkvKiBDaGVjayBhbm90aGVyIEJ1ZmZlclJBTSAqLworCQlpID0gT05FTkFORF9ORVhUX0JVRkZFUlJBTSh0aGlzKTsKKwkJaWYgKHRoaXMtPmJ1ZmZlcnJhbVtpXS5ibG9ja3BhZ2UgPT0gYmxvY2twYWdlKSB7CisJCQlPTkVOQU5EX1NFVF9ORVhUX0JVRkZFUlJBTSh0aGlzKTsKKwkJCWZvdW5kID0gMTsKKwkJfQorCX0KIAotCXJldHVybiAwOworCWlmIChmb3VuZCAmJiBPTkVOQU5EX0lTX0REUCh0aGlzKSkgeworCQkvKiBTZWxlY3QgRGF0YVJBTSBmb3IgRERQICovCisJCWludCBibG9jayA9IChpbnQpIChhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KTsKKwkJaW50IHZhbHVlID0gb25lbmFuZF9idWZmZXJyYW1fYWRkcmVzcyh0aGlzLCBibG9jayk7CisJCXRoaXMtPndyaXRlX3dvcmQodmFsdWUsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMik7CisJfQorCisJcmV0dXJuIGZvdW5kOwogfQogCiAvKioKQEAgLTYxMywzMSArNjEzLDQ5IEBACiAgKgogICogVXBkYXRlIEJ1ZmZlclJBTSBpbmZvcm1hdGlvbgogICovCi1zdGF0aWMgaW50IG9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGFkZHIsCitzdGF0aWMgdm9pZCBvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBhZGRyLAogCQlpbnQgdmFsaWQpCiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgYmxvY2ssIHBhZ2U7Ci0JaW50IGk7CisJaW50IGJsb2NrcGFnZTsKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWJsb2NrID0gKGludCkgKGFkZHIgPj4gdGhpcy0+ZXJhc2Vfc2hpZnQpOwotCXBhZ2UgPSAoaW50KSAoYWRkciA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQlwYWdlICY9IHRoaXMtPnBhZ2VfbWFzazsKKwlibG9ja3BhZ2UgPSAoaW50KSAoYWRkciA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKIAotCS8qIEludmFsaWRhdGUgQnVmZmVyUkFNICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9CVUZGRVJSQU07IGkrKykgewotCQlpZiAodGhpcy0+YnVmZmVycmFtW2ldLmJsb2NrID09IGJsb2NrICYmCi0JCSAgICB0aGlzLT5idWZmZXJyYW1baV0ucGFnZSA9PSBwYWdlKQotCQkJdGhpcy0+YnVmZmVycmFtW2ldLnZhbGlkID0gMDsKLQl9CisJLyogSW52YWxpZGF0ZSBhbm90aGVyIEJ1ZmZlclJBTSAqLworCWkgPSBPTkVOQU5EX05FWFRfQlVGRkVSUkFNKHRoaXMpOworCWlmICh0aGlzLT5idWZmZXJyYW1baV0uYmxvY2twYWdlID09IGJsb2NrcGFnZSkKKwkJdGhpcy0+YnVmZmVycmFtW2ldLmJsb2NrcGFnZSA9IC0xOwogCiAJLyogVXBkYXRlIEJ1ZmZlclJBTSAqLwogCWkgPSBPTkVOQU5EX0NVUlJFTlRfQlVGRkVSUkFNKHRoaXMpOwotCXRoaXMtPmJ1ZmZlcnJhbVtpXS5ibG9jayA9IGJsb2NrOwotCXRoaXMtPmJ1ZmZlcnJhbVtpXS5wYWdlID0gcGFnZTsKLQl0aGlzLT5idWZmZXJyYW1baV0udmFsaWQgPSB2YWxpZDsKKwlpZiAodmFsaWQpCisJCXRoaXMtPmJ1ZmZlcnJhbVtpXS5ibG9ja3BhZ2UgPSBibG9ja3BhZ2U7CisJZWxzZQorCQl0aGlzLT5idWZmZXJyYW1baV0uYmxvY2twYWdlID0gLTE7Cit9CiAKLQlyZXR1cm4gMDsKKy8qKgorICogb25lbmFuZF9pbnZhbGlkYXRlX2J1ZmZlcnJhbSAtIFtHRU5FUklDXSBJbnZhbGlkYXRlIEJ1ZmZlclJBTSBpbmZvcm1hdGlvbgorICogQHBhcmFtIG10ZAkJTVREIGRhdGEgc3RydWN0dXJlCisgKiBAcGFyYW0gYWRkcgkJc3RhcnQgYWRkcmVzcyB0byBpbnZhbGlkYXRlCisgKiBAcGFyYW0gbGVuCQlsZW5ndGggdG8gaW52YWxpZGF0ZQorICoKKyAqIEludmFsaWRhdGUgQnVmZmVyUkFNIGluZm9ybWF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIG9uZW5hbmRfaW52YWxpZGF0ZV9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBhZGRyLAorCQl1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJaW50IGk7CisJbG9mZl90IGVuZF9hZGRyID0gYWRkciArIGxlbjsKKworCS8qIEludmFsaWRhdGUgQnVmZmVyUkFNICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9CVUZGRVJSQU07IGkrKykgeworCQlsb2ZmX3QgYnVmX2FkZHIgPSB0aGlzLT5idWZmZXJyYW1baV0uYmxvY2twYWdlIDw8IHRoaXMtPnBhZ2Vfc2hpZnQ7CisJCWlmIChidWZfYWRkciA+PSBhZGRyICYmIGJ1Zl9hZGRyIDwgZW5kX2FkZHIpCisJCQl0aGlzLT5idWZmZXJyYW1baV0uYmxvY2twYWdlID0gLTE7CisJfQogfQogCiAvKioKQEAgLTcxNiw3ICs3MzQsNyBAQAogCiAJLyogRG8gbm90IGFsbG93IHJlYWRzIHBhc3QgZW5kIG9mIGRldmljZSAqLwogCWlmICgoZnJvbSArIGxlbikgPiBtdGQtPnNpemUpIHsKLQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfcmVhZDogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3JlYWQ6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CiAJCSpyZXRsZW4gPSAwOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03MjQsOCArNzQyLDYgQEAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KIAlvbmVuYW5kX2dldF9kZXZpY2UobXRkLCBGTF9SRUFESU5HKTsKIAotCS8qIFRPRE8gaGFuZGxpbmcgb29iICovCi0KIAlzdGF0cyA9IG10ZC0+ZWNjX3N0YXRzOwogCiAgCS8qIFJlYWQtd2hpbGUtbG9hZCBtZXRob2QgKi8KQEAgLTc1NCw5ICs3NzAsOSBAQAogIAkJCSAqIE5vdyB3ZSBpc3N1ZWQgY2hpcCAxIHJlYWQgYW5kIHBvaW50ZWQgY2hpcCAxCiAgCQkJICogYnVmZmVyYW0gc28gd2UgaGF2ZSB0byBwb2ludCBjaGlwIDAgYnVmZmVyYW0uCiAgCQkJICovCi0gCQkJaWYgKHRoaXMtPmRldmljZV9pZCAmIE9ORU5BTkRfREVWSUNFX0lTX0REUCAmJgotIAkJCQkJdW5saWtlbHkoZnJvbSA9PSAodGhpcy0+Y2hpcHNpemUgPj4gMSkpKSB7Ci0gCQkJCXRoaXMtPndyaXRlX3dvcmQoMCwgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1MyKTsKKyAJCQlpZiAoT05FTkFORF9JU19ERFAodGhpcykgJiYKKyAJCQkgICAgdW5saWtlbHkoZnJvbSA9PSAodGhpcy0+Y2hpcHNpemUgPj4gMSkpKSB7CisgCQkJCXRoaXMtPndyaXRlX3dvcmQoT05FTkFORF9ERFBfQ0hJUDAsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMik7CiAgCQkJCWJvdW5kYXJ5ID0gMTsKICAJCQl9IGVsc2UKICAJCQkJYm91bmRhcnkgPSAwOwpAQCAtNzcwLDcgKzc4Niw3IEBACiAgCQkJYnJlYWs7CiAgCQkvKiBTZXQgdXAgZm9yIG5leHQgcmVhZCBmcm9tIGJ1ZmZlclJBTSAqLwogIAkJaWYgKHVubGlrZWx5KGJvdW5kYXJ5KSkKLSAJCQl0aGlzLT53cml0ZV93b3JkKDB4ODAwMCwgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1MyKTsKKyAJCQl0aGlzLT53cml0ZV93b3JkKE9ORU5BTkRfRERQX0NISVAxLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzIpOwogIAkJT05FTkFORF9TRVRfTkVYVF9CVUZGRVJSQU0odGhpcyk7CiAgCQlidWYgKz0gdGhpc2xlbjsKICAJCXRoaXNsZW4gPSBtaW5fdChpbnQsIG10ZC0+d3JpdGVzaXplLCBsZW4gLSByZWFkKTsKQEAgLTgwMSwyMCArODE3LDU5IEBACiB9CiAKIC8qKgorICogb25lbmFuZF90cmFuc2Zlcl9hdXRvX29vYiAtIFtJbnRlcm5hbF0gb29iIGF1dG8tcGxhY2VtZW50IHRyYW5zZmVyCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGJ1ZgkJZGVzdGluYXRpb24gYWRkcmVzcworICogQHBhcmFtIGNvbHVtbglvb2Igb2Zmc2V0IHRvIHJlYWQgZnJvbQorICogQHBhcmFtIHRoaXNsZW4Jb29iIGxlbmd0aCB0byByZWFkCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF90cmFuc2Zlcl9hdXRvX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBpbnQgY29sdW1uLAorCQkJCWludCB0aGlzbGVuKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfb29iZnJlZSAqZnJlZTsKKwlpbnQgcmVhZGNvbCA9IGNvbHVtbjsKKwlpbnQgcmVhZGVuZCA9IGNvbHVtbiArIHRoaXNsZW47CisJaW50IGxhc3RnYXAgPSAwOworCXVpbnQ4X3QgKm9vYl9idWYgPSB0aGlzLT5wYWdlX2J1ZiArIG10ZC0+d3JpdGVzaXplOworCisJZm9yIChmcmVlID0gdGhpcy0+ZWNjbGF5b3V0LT5vb2JmcmVlOyBmcmVlLT5sZW5ndGg7ICsrZnJlZSkgeworCQlpZiAocmVhZGNvbCA+PSBsYXN0Z2FwKQorCQkJcmVhZGNvbCArPSBmcmVlLT5vZmZzZXQgLSBsYXN0Z2FwOworCQlpZiAocmVhZGVuZCA+PSBsYXN0Z2FwKQorCQkJcmVhZGVuZCArPSBmcmVlLT5vZmZzZXQgLSBsYXN0Z2FwOworCQlsYXN0Z2FwID0gZnJlZS0+b2Zmc2V0ICsgZnJlZS0+bGVuZ3RoOworCX0KKwl0aGlzLT5yZWFkX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIG9vYl9idWYsIDAsIG10ZC0+b29ic2l6ZSk7CisJZm9yIChmcmVlID0gdGhpcy0+ZWNjbGF5b3V0LT5vb2JmcmVlOyBmcmVlLT5sZW5ndGg7ICsrZnJlZSkgeworCQlpbnQgZnJlZV9lbmQgPSBmcmVlLT5vZmZzZXQgKyBmcmVlLT5sZW5ndGg7CisJCWlmIChmcmVlLT5vZmZzZXQgPCByZWFkZW5kICYmIGZyZWVfZW5kID4gcmVhZGNvbCkgeworCQkJaW50IHN0ID0gbWF4X3QoaW50LGZyZWUtPm9mZnNldCxyZWFkY29sKTsKKwkJCWludCBlZCA9IG1pbl90KGludCxmcmVlX2VuZCxyZWFkZW5kKTsKKwkJCWludCBuID0gZWQgLSBzdDsKKwkJCW1lbWNweShidWYsIG9vYl9idWYgKyBzdCwgbik7CisJCQlidWYgKz0gbjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBvbmVuYW5kX2RvX3JlYWRfb29iIC0gW01URCBJbnRlcmZhY2VdIE9uZU5BTkQgcmVhZCBvdXQtb2YtYmFuZAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSBmcm9tCQlvZmZzZXQgdG8gcmVhZCBmcm9tCiAgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAogICogQHBhcmFtIHJldGxlbglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcwogICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0IGRhdGEKKyAqIEBwYXJhbSBtb2RlCQlvcGVyYXRpb24gbW9kZQogICoKICAqIE9uZU5BTkQgcmVhZCBvdXQtb2YtYmFuZCBkYXRhIGZyb20gdGhlIHNwYXJlIGFyZWEKICAqLwotaW50IG9uZW5hbmRfZG9fcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQorc3RhdGljIGludCBvbmVuYW5kX2RvX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwgbXRkX29vYl9tb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCWludCByZWFkID0gMCwgdGhpc2xlbiwgY29sdW1uOworCWludCByZWFkID0gMCwgdGhpc2xlbiwgY29sdW1uLCBvb2JzaXplOwogCWludCByZXQgPSAwOwogCiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfcmVhZF9vb2I6IGZyb20gPSAweCUwOHgsIGxlbiA9ICVpXG4iLCAodW5zaWduZWQgaW50KSBmcm9tLCAoaW50KSBsZW4pOwpAQCAtODIyLDIxICs4NzcsMzMgQEAKIAkvKiBJbml0aWFsaXplIHJldHVybiBsZW5ndGggdmFsdWUgKi8KIAkqcmV0bGVuID0gMDsKIAorCWlmIChtb2RlID09IE1URF9PT0JfQVVUTykKKwkJb29ic2l6ZSA9IHRoaXMtPmVjY2xheW91dC0+b29iYXZhaWw7CisJZWxzZQorCQlvb2JzaXplID0gbXRkLT5vb2JzaXplOworCisJY29sdW1uID0gZnJvbSAmIChtdGQtPm9vYnNpemUgLSAxKTsKKworCWlmICh1bmxpa2VseShjb2x1bW4gPj0gb29ic2l6ZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3JlYWRfb29iOiBBdHRlbXB0ZWQgdG8gc3RhcnQgcmVhZCBvdXRzaWRlIG9vYlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KLQlpZiAodW5saWtlbHkoKGZyb20gKyBsZW4pID4gbXRkLT5zaXplKSkgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF9yZWFkX29vYjogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwlpZiAodW5saWtlbHkoZnJvbSA+PSBtdGQtPnNpemUgfHwKKwkJICAgICBjb2x1bW4gKyBsZW4gPiAoKG10ZC0+c2l6ZSA+PiB0aGlzLT5wYWdlX3NoaWZ0KSAtCisJCQkJICAgICAoZnJvbSA+PiB0aGlzLT5wYWdlX3NoaWZ0KSkgKiBvb2JzaXplKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfcmVhZF9vb2I6IEF0dGVtcHRlZCB0byByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCiAJb25lbmFuZF9nZXRfZGV2aWNlKG10ZCwgRkxfUkVBRElORyk7CiAKLQljb2x1bW4gPSBmcm9tICYgKG10ZC0+b29ic2l6ZSAtIDEpOwotCiAJd2hpbGUgKHJlYWQgPCBsZW4pIHsKIAkJY29uZF9yZXNjaGVkKCk7CiAKLQkJdGhpc2xlbiA9IG10ZC0+b29ic2l6ZSAtIGNvbHVtbjsKKwkJdGhpc2xlbiA9IG9vYnNpemUgLSBjb2x1bW47CiAJCXRoaXNsZW4gPSBtaW5fdChpbnQsIHRoaXNsZW4sIGxlbik7CiAKIAkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQURPT0IsIGZyb20sIG10ZC0+b29ic2l6ZSk7CkBAIC04NDYsMTEgKzkxMywxNCBAQAogCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CiAJCS8qIEZpcnN0IGNvcHkgZGF0YSBhbmQgY2hlY2sgcmV0dXJuIHZhbHVlIGZvciBFQ0MgaGFuZGxpbmcgKi8KIAotCQl0aGlzLT5yZWFkX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIGJ1ZiwgY29sdW1uLCB0aGlzbGVuKTsKKwkJaWYgKG1vZGUgPT0gTVREX09PQl9BVVRPKQorCQkJb25lbmFuZF90cmFuc2Zlcl9hdXRvX29vYihtdGQsIGJ1ZiwgY29sdW1uLCB0aGlzbGVuKTsKKwkJZWxzZQorCQkJdGhpcy0+cmVhZF9idWZmZXJyYW0obXRkLCBPTkVOQU5EX1NQQVJFUkFNLCBidWYsIGNvbHVtbiwgdGhpc2xlbik7CiAKIAkJaWYgKHJldCkgewotCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfcmVhZF9vb2I6IHJlYWQgZmFpbGVkID0gMHgleFxuIiwgcmV0KTsKLQkJCWdvdG8gb3V0OworCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3JlYWRfb29iOiByZWFkIGZhaWxlZCA9IDB4JXhcbiIsIHJldCk7CisJCQlicmVhazsKIAkJfQogCiAJCXJlYWQgKz0gdGhpc2xlbjsKQEAgLTg2OCw3ICs5MzgsNiBAQAogCQl9CiAJfQogCi1vdXQ6CiAJLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLwogCW9uZW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIApAQCAtODg1LDEwICs5NTQsMTMyIEBACiBzdGF0aWMgaW50IG9uZW5hbmRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAogCQkJICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewotCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7Ci0KKwlzd2l0Y2ggKG9wcy0+bW9kZSkgeworCWNhc2UgTVREX09PQl9QTEFDRToKKwljYXNlIE1URF9PT0JfQVVUTzoKKwkJYnJlYWs7CisJY2FzZSBNVERfT09CX1JBVzoKKwkJLyogTm90IGltcGxlbWVudGVkIHlldCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlyZXR1cm4gb25lbmFuZF9kb19yZWFkX29vYihtdGQsIGZyb20gKyBvcHMtPm9vYm9mZnMsIG9wcy0+b29ibGVuLAotCQkJCSAgICZvcHMtPm9vYnJldGxlbiwgb3BzLT5vb2JidWYpOworCQkJCSAgICZvcHMtPm9vYnJldGxlbiwgb3BzLT5vb2JidWYsIG9wcy0+bW9kZSk7Cit9CisKKy8qKgorICogb25lbmFuZF9iYnRfd2FpdCAtIFtERUZBVUxUXSB3YWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGRvbmUKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gc3RhdGUJCXN0YXRlIHRvIHNlbGVjdCB0aGUgbWF4LiB0aW1lb3V0IHZhbHVlCisgKgorICogV2FpdCBmb3IgY29tbWFuZCBkb25lLgorICovCitzdGF0aWMgaW50IG9uZW5hbmRfYmJ0X3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBpbnQgaW50ZXJydXB0OworCXVuc2lnbmVkIGludCBjdHJsOworCisJLyogVGhlIDIwIG1zZWMgaXMgZW5vdWdoICovCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJaW50ZXJydXB0ID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQlpZiAoaW50ZXJydXB0ICYgT05FTkFORF9JTlRfTUFTVEVSKQorCQkJYnJlYWs7CisJfQorCS8qIFRvIGdldCBjb3JyZWN0IGludGVycnVwdCBzdGF0dXMgaW4gdGltZW91dCBjYXNlICovCisJaW50ZXJydXB0ID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCWN0cmwgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKworCWlmIChjdHJsICYgT05FTkFORF9DVFJMX0VSUk9SKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJvbmVuYW5kX2JidF93YWl0OiBjb250cm9sbGVyIGVycm9yID0gMHglMDR4XG4iLCBjdHJsKTsKKwkJLyogSW5pdGlhbCBiYWQgYmxvY2sgY2FzZSAqLworCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9MT0FEKQorCQkJcmV0dXJuIE9ORU5BTkRfQkJUX1JFQURfRVJST1I7CisJCXJldHVybiBPTkVOQU5EX0JCVF9SRUFEX0ZBVEFMX0VSUk9SOworCX0KKworCWlmIChpbnRlcnJ1cHQgJiBPTkVOQU5EX0lOVF9SRUFEKSB7CisJCWludCBlY2MgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0VDQ19TVEFUVVMpOworCQlpZiAoZWNjICYgT05FTkFORF9FQ0NfMkJJVF9BTEwpCisJCQlyZXR1cm4gT05FTkFORF9CQlRfUkVBRF9FUlJPUjsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfYmJ0X3dhaXQ6IHJlYWQgdGltZW91dCEiCisJCQkiY3RybD0weCUwNHggaW50cj0weCUwNHhcbiIsIGN0cmwsIGludGVycnVwdCk7CisJCXJldHVybiBPTkVOQU5EX0JCVF9SRUFEX0ZBVEFMX0VSUk9SOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9uZW5hbmRfYmJ0X3JlYWRfb29iIC0gW01URCBJbnRlcmZhY2VdIE9uZU5BTkQgcmVhZCBvdXQtb2YtYmFuZCBmb3IgYmJ0IHNjYW4KKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gZnJvbQkJb2Zmc2V0IHRvIHJlYWQgZnJvbQorICogQHBhcmFtIEBvcHMJCW9vYiBvcGVyYXRpb24gZGVzY3JpcHRpb24gc3RydWN0dXJlCisgKgorICogT25lTkFORCByZWFkIG91dC1vZi1iYW5kIGRhdGEgZnJvbSB0aGUgc3BhcmUgYXJlYSBmb3IgYmJ0IHNjYW4KKyAqLworaW50IG9uZW5hbmRfYmJ0X3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgCisJCQkgICAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgcmVhZCA9IDAsIHRoaXNsZW4sIGNvbHVtbjsKKwlpbnQgcmV0ID0gMDsKKwlzaXplX3QgbGVuID0gb3BzLT5vb2JsZW47CisJdV9jaGFyICpidWYgPSBvcHMtPm9vYmJ1ZjsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX2JidF9yZWFkX29vYjogZnJvbSA9IDB4JTA4eCwgbGVuID0gJXppXG4iLCAodW5zaWduZWQgaW50KSBmcm9tLCBsZW4pOworCisJLyogSW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUgKi8KKwlvcHMtPm9vYnJldGxlbiA9IDA7CisKKwkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKHVubGlrZWx5KChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX2JidF9yZWFkX29vYjogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIE9ORU5BTkRfQkJUX1JFQURfRkFUQUxfRVJST1I7CisJfQorCisJLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCisJb25lbmFuZF9nZXRfZGV2aWNlKG10ZCwgRkxfUkVBRElORyk7CisKKwljb2x1bW4gPSBmcm9tICYgKG10ZC0+b29ic2l6ZSAtIDEpOworCisJd2hpbGUgKHJlYWQgPCBsZW4pIHsKKwkJY29uZF9yZXNjaGVkKCk7CisKKwkJdGhpc2xlbiA9IG10ZC0+b29ic2l6ZSAtIGNvbHVtbjsKKwkJdGhpc2xlbiA9IG1pbl90KGludCwgdGhpc2xlbiwgbGVuKTsKKworCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVBRE9PQiwgZnJvbSwgbXRkLT5vb2JzaXplKTsKKworCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCBmcm9tLCAwKTsKKworCQlyZXQgPSBvbmVuYW5kX2JidF93YWl0KG10ZCwgRkxfUkVBRElORyk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKworCQl0aGlzLT5yZWFkX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIGJ1ZiwgY29sdW1uLCB0aGlzbGVuKTsKKwkJcmVhZCArPSB0aGlzbGVuOworCQlpZiAocmVhZCA9PSBsZW4pCisJCQlicmVhazsKKworCQlidWYgKz0gdGhpc2xlbjsKKworCQkvKiBSZWFkIG1vcmU/ICovCisJCWlmIChyZWFkIDwgbGVuKSB7CisJCQkvKiBVcGRhdGUgUGFnZSBzaXplICovCisJCQlmcm9tICs9IG10ZC0+d3JpdGVzaXplOworCQkJY29sdW1uID0gMDsKKwkJfQorCX0KKworCS8qIERlc2VsZWN0IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KKwlvbmVuYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CisKKwlvcHMtPm9vYnJldGxlbiA9IHJlYWQ7CisJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUKQEAgLTg5NywxNCArMTA4OCwxMiBAQAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHZlcmlmeQogICogQHBhcmFtIHRvCQlvZmZzZXQgdG8gcmVhZCBmcm9tCi0gKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBhbmQgY29tcGFyZQogICoKICAqLwotc3RhdGljIGludCBvbmVuYW5kX3ZlcmlmeV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBsb2ZmX3QgdG8sIGludCBsZW4pCitzdGF0aWMgaW50IG9uZW5hbmRfdmVyaWZ5X29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGxvZmZfdCB0bykKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCWNoYXIgKnJlYWRwID0gdGhpcy0+cGFnZV9idWY7Ci0JaW50IGNvbHVtbiA9IHRvICYgKG10ZC0+b29ic2l6ZSAtIDEpOworCWNoYXIgKnJlYWRwID0gdGhpcy0+cGFnZV9idWYgKyBtdGQtPndyaXRlc2l6ZTsKIAlpbnQgc3RhdHVzLCBpOwogCiAJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQURPT0IsIHRvLCBtdGQtPm9vYnNpemUpOwpAQCAtOTEzLDkgKzExMDIsOCBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKLQl0aGlzLT5yZWFkX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIHJlYWRwLCBjb2x1bW4sIGxlbik7Ci0KLQlmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykKKwl0aGlzLT5yZWFkX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIHJlYWRwLCAwLCBtdGQtPm9vYnNpemUpOworCWZvcihpID0gMDsgaSA8IG10ZC0+b29ic2l6ZTsgaSsrKQogCQlpZiAoYnVmW2ldICE9IDB4RkYgJiYgYnVmW2ldICE9IHJlYWRwW2ldKQogCQkJcmV0dXJuIC1FQkFETVNHOwogCkBAIC05MjMsNDEgKzExMTEsNTEgQEAKIH0KIAogLyoqCi0gKiBvbmVuYW5kX3ZlcmlmeV9wYWdlIC0gW0dFTkVSSUNdIHZlcmlmeSB0aGUgY2hpcCBjb250ZW50cyBhZnRlciBhIHdyaXRlCi0gKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gdmVyaWZ5CisgKiBvbmVuYW5kX3ZlcmlmeSAtIFtHRU5FUklDXSB2ZXJpZnkgdGhlIGNoaXAgY29udGVudHMgYWZ0ZXIgYSB3cml0ZQorICogQHBhcmFtIG10ZCAgICAgICAgICBNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGJ1ZiAgICAgICAgICB0aGUgZGF0YWJ1ZmZlciB0byB2ZXJpZnkKKyAqIEBwYXJhbSBhZGRyICAgICAgICAgb2Zmc2V0IHRvIHJlYWQgZnJvbQorICogQHBhcmFtIGxlbiAgICAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBhbmQgY29tcGFyZQogICoKLSAqIENoZWNrIERhdGFSQU0gYXJlYSBkaXJlY3RseQogICovCi1zdGF0aWMgaW50IG9uZW5hbmRfdmVyaWZ5X3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBsb2ZmX3QgYWRkcikKK3N0YXRpYyBpbnQgb25lbmFuZF92ZXJpZnkoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBsb2ZmX3QgYWRkciwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXZvaWQgX19pb21lbSAqZGF0YXJhbTAsICpkYXRhcmFtMTsKKwl2b2lkIF9faW9tZW0gKmRhdGFyYW07CiAJaW50IHJldCA9IDA7CisJaW50IHRoaXNsZW4sIGNvbHVtbjsKIAotCS8qIEluIHBhcnRpYWwgcGFnZSB3cml0ZSwganVzdCBza2lwIGl0ICovCi0JaWYgKChhZGRyICYgKG10ZC0+d3JpdGVzaXplIC0gMSkpICE9IDApCi0JCXJldHVybiAwOworCXdoaWxlIChsZW4gIT0gMCkgeworCQl0aGlzbGVuID0gbWluX3QoaW50LCBtdGQtPndyaXRlc2l6ZSwgbGVuKTsKKwkJY29sdW1uID0gYWRkciAmIChtdGQtPndyaXRlc2l6ZSAtIDEpOworCQlpZiAoY29sdW1uICsgdGhpc2xlbiA+IG10ZC0+d3JpdGVzaXplKQorCQkJdGhpc2xlbiA9IG10ZC0+d3JpdGVzaXplIC0gY29sdW1uOwogCi0JdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQUQsIGFkZHIsIG10ZC0+d3JpdGVzaXplKTsKKwkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQUQsIGFkZHIsIG10ZC0+d3JpdGVzaXplKTsKIAotCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9SRUFESU5HKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCBhZGRyLCAwKTsKIAotCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIGFkZHIsIDEpOworCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCi0JLyogQ2hlY2ssIGlmIHRoZSB0d28gZGF0YXJhbSBhcmVhcyBhcmUgc2FtZSAqLwotCWRhdGFyYW0wID0gdGhpcy0+YmFzZSArIE9ORU5BTkRfREFUQVJBTTsKLQlkYXRhcmFtMSA9IGRhdGFyYW0wICsgbXRkLT53cml0ZXNpemU7CisJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIGFkZHIsIDEpOwogCi0JaWYgKG1lbWNtcChkYXRhcmFtMCwgZGF0YXJhbTEsIG10ZC0+d3JpdGVzaXplKSkKLQkJcmV0dXJuIC1FQkFETVNHOworCQlkYXRhcmFtID0gdGhpcy0+YmFzZSArIE9ORU5BTkRfREFUQVJBTTsKKwkJZGF0YXJhbSArPSBvbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBPTkVOQU5EX0RBVEFSQU0pOworCisJCWlmIChtZW1jbXAoYnVmLCBkYXRhcmFtICsgY29sdW1uLCB0aGlzbGVuKSkKKwkJCXJldHVybiAtRUJBRE1TRzsKKworCQlsZW4gLT0gdGhpc2xlbjsKKwkJYnVmICs9IHRoaXNsZW47CisJCWFkZHIgKz0gdGhpc2xlbjsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KICNlbHNlCi0jZGVmaW5lIG9uZW5hbmRfdmVyaWZ5X3BhZ2UoLi4uKQkoMCkKKyNkZWZpbmUgb25lbmFuZF92ZXJpZnkoLi4uKQkJKDApCiAjZGVmaW5lIG9uZW5hbmRfdmVyaWZ5X29vYiguLi4pCQkoMCkKICNlbmRpZgogCkBAIC05ODgsNjAgKzExODYsNTcgQEAKIAogCS8qIERvIG5vdCBhbGxvdyB3cml0ZXMgcGFzdCBlbmQgb2YgZGV2aWNlICovCiAJaWYgKHVubGlrZWx5KCh0byArIGxlbikgPiBtdGQtPnNpemUpKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlOiBBdHRlbXB0IHdyaXRlIHRvIHBhc3QgZW5kIG9mIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93cml0ZTogQXR0ZW1wdCB3cml0ZSB0byBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBSZWplY3Qgd3JpdGVzLCB3aGljaCBhcmUgbm90IHBhZ2UgYWxpZ25lZCAqLwogICAgICAgICBpZiAodW5saWtlbHkoTk9UQUxJR05FRCh0bykpIHx8IHVubGlrZWx5KE5PVEFMSUdORUQobGVuKSkpIHsKLSAgICAgICAgICAgICAgICBERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZTogQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAib25lbmFuZF93cml0ZTogQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwogICAgICAgICB9CiAKIAljb2x1bW4gPSB0byAmIChtdGQtPndyaXRlc2l6ZSAtIDEpOwotCXN1YnBhZ2UgPSBjb2x1bW4gfHwgKGxlbiAmIChtdGQtPndyaXRlc2l6ZSAtIDEpKTsKIAogCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwogCW9uZW5hbmRfZ2V0X2RldmljZShtdGQsIEZMX1dSSVRJTkcpOwogCiAJLyogTG9vcCB1bnRpbCBhbGwgZGF0YSB3cml0ZSAqLwogCXdoaWxlICh3cml0dGVuIDwgbGVuKSB7Ci0JCWludCBieXRlcyA9IG10ZC0+d3JpdGVzaXplOwotCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgYnl0ZXMsIGxlbiAtIHdyaXR0ZW4pOworCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgbXRkLT53cml0ZXNpemUgLSBjb2x1bW4sIGxlbiAtIHdyaXR0ZW4pOwogCQl1X2NoYXIgKndidWYgPSAodV9jaGFyICopIGJ1ZjsKIAogCQljb25kX3Jlc2NoZWQoKTsKIAotCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfQlVGRkVSUkFNLCB0bywgYnl0ZXMpOworCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfQlVGRkVSUkFNLCB0bywgdGhpc2xlbik7CiAKIAkJLyogUGFydGlhbCBwYWdlIHdyaXRlICovCisJCXN1YnBhZ2UgPSB0aGlzbGVuIDwgbXRkLT53cml0ZXNpemU7CiAJCWlmIChzdWJwYWdlKSB7Ci0JCQlieXRlcyA9IG1pbl90KGludCwgYnl0ZXMgLSBjb2x1bW4sIChpbnQpIGxlbik7CiAJCQltZW1zZXQodGhpcy0+cGFnZV9idWYsIDB4ZmYsIG10ZC0+d3JpdGVzaXplKTsKLQkJCW1lbWNweSh0aGlzLT5wYWdlX2J1ZiArIGNvbHVtbiwgYnVmLCBieXRlcyk7CisJCQltZW1jcHkodGhpcy0+cGFnZV9idWYgKyBjb2x1bW4sIGJ1ZiwgdGhpc2xlbik7CiAJCQl3YnVmID0gdGhpcy0+cGFnZV9idWY7Ci0JCQkvKiBFdmVuIHRob3VnaCBwYXJ0aWFsIHdyaXRlLCB3ZSBuZWVkIHBhZ2Ugc2l6ZSAqLwotCQkJdGhpc2xlbiA9IG10ZC0+d3JpdGVzaXplOwogCQl9CiAKLQkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9EQVRBUkFNLCB3YnVmLCAwLCB0aGlzbGVuKTsKKwkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9EQVRBUkFNLCB3YnVmLCAwLCBtdGQtPndyaXRlc2l6ZSk7CiAJCXRoaXMtPndyaXRlX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIGZmY2hhcnMsIDAsIG10ZC0+b29ic2l6ZSk7CiAKIAkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1BST0csIHRvLCBtdGQtPndyaXRlc2l6ZSk7CiAKLQkJLyogSW4gcGFydGlhbCBwYWdlIHdyaXRlIHdlIGRvbid0IHVwZGF0ZSBidWZmZXJyYW0gKi8KLQkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgdG8sICFzdWJwYWdlKTsKLQogCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfV1JJVElORyk7CisKKwkJLyogSW4gcGFydGlhbCBwYWdlIHdyaXRlIHdlIGRvbid0IHVwZGF0ZSBidWZmZXJyYW0gKi8KKwkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgdG8sICFyZXQgJiYgIXN1YnBhZ2UpOworCiAJCWlmIChyZXQpIHsKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlOiB3cml0ZSBmaWxhZWQgJWRcbiIsIHJldCk7CisJCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd3JpdGU6IHdyaXRlIGZpbGFlZCAlZFxuIiwgcmV0KTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogT25seSBjaGVjayB2ZXJpZnkgd3JpdGUgdHVybiBvbiAqLwotCQlyZXQgPSBvbmVuYW5kX3ZlcmlmeV9wYWdlKG10ZCwgKHVfY2hhciAqKSB3YnVmLCB0byk7CisJCXJldCA9IG9uZW5hbmRfdmVyaWZ5KG10ZCwgKHVfY2hhciAqKSB3YnVmLCB0bywgdGhpc2xlbik7CiAJCWlmIChyZXQpIHsKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlOiB2ZXJpZnkgZmFpbGVkICVkXG4iLCByZXQpOworCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dyaXRlOiB2ZXJpZnkgZmFpbGVkICVkXG4iLCByZXQpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTA2NCwyMCArMTI1OSw1OCBAQAogfQogCiAvKioKKyAqIG9uZW5hbmRfZmlsbF9hdXRvX29vYiAtIFtJbnRlcm5hbF0gb29iIGF1dG8tcGxhY2VtZW50IHRyYW5zZmVyCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIG9vYl9idWYJb29iIGJ1ZmZlcgorICogQHBhcmFtIGJ1ZgkJc291cmNlIGFkZHJlc3MKKyAqIEBwYXJhbSBjb2x1bW4Jb29iIG9mZnNldCB0byB3cml0ZSB0bworICogQHBhcmFtIHRoaXNsZW4Jb29iIGxlbmd0aCB0byB3cml0ZQorICovCitzdGF0aWMgaW50IG9uZW5hbmRfZmlsbF9hdXRvX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpvb2JfYnVmLAorCQkJCSAgY29uc3QgdV9jaGFyICpidWYsIGludCBjb2x1bW4sIGludCB0aGlzbGVuKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfb29iZnJlZSAqZnJlZTsKKwlpbnQgd3JpdGVjb2wgPSBjb2x1bW47CisJaW50IHdyaXRlZW5kID0gY29sdW1uICsgdGhpc2xlbjsKKwlpbnQgbGFzdGdhcCA9IDA7CisKKwlmb3IgKGZyZWUgPSB0aGlzLT5lY2NsYXlvdXQtPm9vYmZyZWU7IGZyZWUtPmxlbmd0aDsgKytmcmVlKSB7CisJCWlmICh3cml0ZWNvbCA+PSBsYXN0Z2FwKQorCQkJd3JpdGVjb2wgKz0gZnJlZS0+b2Zmc2V0IC0gbGFzdGdhcDsKKwkJaWYgKHdyaXRlZW5kID49IGxhc3RnYXApCisJCQl3cml0ZWVuZCArPSBmcmVlLT5vZmZzZXQgLSBsYXN0Z2FwOworCQlsYXN0Z2FwID0gZnJlZS0+b2Zmc2V0ICsgZnJlZS0+bGVuZ3RoOworCX0KKwlmb3IgKGZyZWUgPSB0aGlzLT5lY2NsYXlvdXQtPm9vYmZyZWU7IGZyZWUtPmxlbmd0aDsgKytmcmVlKSB7CisJCWludCBmcmVlX2VuZCA9IGZyZWUtPm9mZnNldCArIGZyZWUtPmxlbmd0aDsKKwkJaWYgKGZyZWUtPm9mZnNldCA8IHdyaXRlZW5kICYmIGZyZWVfZW5kID4gd3JpdGVjb2wpIHsKKwkJCWludCBzdCA9IG1heF90KGludCxmcmVlLT5vZmZzZXQsd3JpdGVjb2wpOworCQkJaW50IGVkID0gbWluX3QoaW50LGZyZWVfZW5kLHdyaXRlZW5kKTsKKwkJCWludCBuID0gZWQgLSBzdDsKKwkJCW1lbWNweShvb2JfYnVmICsgc3QsIGJ1Ziwgbik7CisJCQlidWYgKz0gbjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBvbmVuYW5kX2RvX3dyaXRlX29vYiAtIFtJbnRlcm5hbF0gT25lTkFORCB3cml0ZSBvdXQtb2YtYmFuZAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSB0bwkJb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKICAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKICAqIEBwYXJhbSBidWYJCXRoZSBkYXRhIHRvIHdyaXRlCisgKiBAcGFyYW0gbW9kZQkJb3BlcmF0aW9uIG1vZGUKICAqCiAgKiBPbmVOQU5EIHdyaXRlIG91dC1vZi1iYW5kCiAgKi8KIHN0YXRpYyBpbnQgb25lbmFuZF9kb193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQkJCQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCisJCQkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLCBtdGRfb29iX21vZGVfdCBtb2RlKQogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IGNvbHVtbiwgcmV0ID0gMDsKKwlpbnQgY29sdW1uLCByZXQgPSAwLCBvb2JzaXplOwogCWludCB3cml0dGVuID0gMDsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX3dyaXRlX29vYjogdG8gPSAweCUwOHgsIGxlbiA9ICVpXG4iLCAodW5zaWduZWQgaW50KSB0bywgKGludCkgbGVuKTsKQEAgLTEwODUsOSArMTMxOCwzMCBAQAogCS8qIEluaXRpYWxpemUgcmV0bGVuLCBpbiBjYXNlIG9mIGVhcmx5IGV4aXQgKi8KIAkqcmV0bGVuID0gMDsKIAotCS8qIERvIG5vdCBhbGxvdyB3cml0ZXMgcGFzdCBlbmQgb2YgZGV2aWNlICovCi0JaWYgKHVubGlrZWx5KCh0byArIGxlbikgPiBtdGQtPnNpemUpKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlX29vYjogQXR0ZW1wdCB3cml0ZSB0byBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOworCWlmIChtb2RlID09IE1URF9PT0JfQVVUTykKKwkJb29ic2l6ZSA9IHRoaXMtPmVjY2xheW91dC0+b29iYXZhaWw7CisJZWxzZQorCQlvb2JzaXplID0gbXRkLT5vb2JzaXplOworCisJY29sdW1uID0gdG8gJiAobXRkLT5vb2JzaXplIC0gMSk7CisKKwlpZiAodW5saWtlbHkoY29sdW1uID49IG9vYnNpemUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93cml0ZV9vb2I6IEF0dGVtcHRlZCB0byBzdGFydCB3cml0ZSBvdXRzaWRlIG9vYlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggTkFORDogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2UgKi8KKwlpZiAoY29sdW1uICsgbGVuID4gb29ic2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd3JpdGVfb29iOiAiCisJCSAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKHVubGlrZWx5KHRvID49IG10ZC0+c2l6ZSB8fAorCQkgICAgIGNvbHVtbiArIGxlbiA+ICgobXRkLT5zaXplID4+IHRoaXMtPnBhZ2Vfc2hpZnQpIC0KKwkJCQkgICAgICh0byA+PiB0aGlzLT5wYWdlX3NoaWZ0KSkgKiBvb2JzaXplKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd3JpdGVfb29iOiBBdHRlbXB0ZWQgdG8gd3JpdGUgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMDk2LDE4ICsxMzUwLDE5IEBACiAKIAkvKiBMb29wIHVudGlsIGFsbCBkYXRhIHdyaXRlICovCiAJd2hpbGUgKHdyaXR0ZW4gPCBsZW4pIHsKLQkJaW50IHRoaXNsZW4gPSBtaW5fdChpbnQsIG10ZC0+b29ic2l6ZSwgbGVuIC0gd3JpdHRlbik7CisJCWludCB0aGlzbGVuID0gbWluX3QoaW50LCBvb2JzaXplLCBsZW4gLSB3cml0dGVuKTsKIAogCQljb25kX3Jlc2NoZWQoKTsKIAotCQljb2x1bW4gPSB0byAmIChtdGQtPm9vYnNpemUgLSAxKTsKLQogCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfQlVGRkVSUkFNLCB0bywgbXRkLT5vb2JzaXplKTsKIAogCQkvKiBXZSBzZW5kIGRhdGEgdG8gc3BhcmUgcmFtIHdpdGggb29ic2l6ZQogCQkgKiB0byBwcmV2ZW50IGJ5dGUgYWNjZXNzICovCiAJCW1lbXNldCh0aGlzLT5wYWdlX2J1ZiwgMHhmZiwgbXRkLT5vb2JzaXplKTsKLQkJbWVtY3B5KHRoaXMtPnBhZ2VfYnVmICsgY29sdW1uLCBidWYsIHRoaXNsZW4pOworCQlpZiAobW9kZSA9PSBNVERfT09CX0FVVE8pCisJCQlvbmVuYW5kX2ZpbGxfYXV0b19vb2IobXRkLCB0aGlzLT5wYWdlX2J1ZiwgYnVmLCBjb2x1bW4sIHRoaXNsZW4pOworCQllbHNlCisJCQltZW1jcHkodGhpcy0+cGFnZV9idWYgKyBjb2x1bW4sIGJ1ZiwgdGhpc2xlbik7CiAJCXRoaXMtPndyaXRlX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIHRoaXMtPnBhZ2VfYnVmLCAwLCBtdGQtPm9vYnNpemUpOwogCiAJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9QUk9HT09CLCB0bywgbXRkLT5vb2JzaXplKTsKQEAgLTExMTYsMjYgKzEzNzEsMjUgQEAKIAogCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfV1JJVElORyk7CiAJCWlmIChyZXQpIHsKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlX29vYjogd3JpdGUgZmlsYWVkICVkXG4iLCByZXQpOwotCQkJZ290byBvdXQ7CisJCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd3JpdGVfb29iOiB3cml0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlicmVhazsKIAkJfQogCi0JCXJldCA9IG9uZW5hbmRfdmVyaWZ5X29vYihtdGQsIGJ1ZiwgdG8sIHRoaXNsZW4pOworCQlyZXQgPSBvbmVuYW5kX3ZlcmlmeV9vb2IobXRkLCB0aGlzLT5wYWdlX2J1ZiwgdG8pOwogCQlpZiAocmV0KSB7Ci0JCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZV9vb2I6IHZlcmlmeSBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCQlnb3RvIG91dDsKKwkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93cml0ZV9vb2I6IHZlcmlmeSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlicmVhazsKIAkJfQogCiAJCXdyaXR0ZW4gKz0gdGhpc2xlbjsKLQogCQlpZiAod3JpdHRlbiA9PSBsZW4pCiAJCQlicmVhazsKIAotCQl0byArPSB0aGlzbGVuOworCQl0byArPSBtdGQtPndyaXRlc2l6ZTsKIAkJYnVmICs9IHRoaXNsZW47CisJCWNvbHVtbiA9IDA7CiAJfQogCi1vdXQ6CiAJLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLwogCW9uZW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIApAQCAtMTE1MywxMCArMTQwNywxNyBAQAogc3RhdGljIGludCBvbmVuYW5kX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAogCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKLQlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOwotCisJc3dpdGNoIChvcHMtPm1vZGUpIHsKKwljYXNlIE1URF9PT0JfUExBQ0U6CisJY2FzZSBNVERfT09CX0FVVE86CisJCWJyZWFrOworCWNhc2UgTVREX09PQl9SQVc6CisJCS8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIG9uZW5hbmRfZG9fd3JpdGVfb29iKG10ZCwgdG8gKyBvcHMtPm9vYm9mZnMsIG9wcy0+b29ibGVuLAotCQkJCSAgICAmb3BzLT5vb2JyZXRsZW4sIG9wcy0+b29iYnVmKTsKKwkJCQkgICAgJm9wcy0+b29icmV0bGVuLCBvcHMtPm9vYmJ1Ziwgb3BzLT5tb2RlKTsKIH0KIAogLyoqCkBAIC0xMTk5LDE5ICsxNDYwLDE5IEBACiAKIAkvKiBTdGFydCBhZGRyZXNzIG11c3QgYWxpZ24gb24gYmxvY2sgYm91bmRhcnkgKi8KIAlpZiAodW5saWtlbHkoaW5zdHItPmFkZHIgJiAoYmxvY2tfc2l6ZSAtIDEpKSkgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF9lcmFzZTogVW5hbGlnbmVkIGFkZHJlc3NcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfZXJhc2U6IFVuYWxpZ25lZCBhZGRyZXNzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogTGVuZ3RoIG11c3QgYWxpZ24gb24gYmxvY2sgYm91bmRhcnkgKi8KIAlpZiAodW5saWtlbHkoaW5zdHItPmxlbiAmIChibG9ja19zaXplIC0gMSkpKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX2VyYXNlOiBMZW5ndGggbm90IGJsb2NrIGFsaWduZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfZXJhc2U6IExlbmd0aCBub3QgYmxvY2sgYWxpZ25lZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIERvIG5vdCBhbGxvdyBlcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KIAlpZiAodW5saWtlbHkoKGluc3RyLT5sZW4gKyBpbnN0ci0+YWRkcikgPiBtdGQtPnNpemUpKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX2VyYXNlOiBFcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfZXJhc2U6IEVyYXNlIHBhc3QgZW5kIG9mIGRldmljZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTIzOCwxMCArMTQ5OSwxMiBAQAogCiAJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9FUkFTRSwgYWRkciwgYmxvY2tfc2l6ZSk7CiAKKwkJb25lbmFuZF9pbnZhbGlkYXRlX2J1ZmZlcnJhbShtdGQsIGFkZHIsIGJsb2NrX3NpemUpOworCiAJCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9FUkFTSU5HKTsKIAkJLyogQ2hlY2ssIGlmIGl0IGlzIHdyaXRlIHByb3RlY3RlZCAqLwogCQlpZiAocmV0KSB7Ci0JCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF9lcmFzZTogRmFpbGVkIGVyYXNlLCBibG9jayAlZFxuIiwgKHVuc2lnbmVkKSAoYWRkciA+PiB0aGlzLT5lcmFzZV9zaGlmdCkpOworCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX2VyYXNlOiBGYWlsZWQgZXJhc2UsIGJsb2NrICVkXG4iLCAodW5zaWduZWQpIChhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KSk7CiAJCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOwogCQkJaW5zdHItPmZhaWxfYWRkciA9IGFkZHI7CiAJCQlnb3RvIGVyYXNlX2V4aXQ7CkBAIC0xMzIyLDcgKzE1ODUsNyBAQAogCiAgICAgICAgIC8qIFdlIHdyaXRlIHR3byBieXRlcywgc28gd2UgZG9udCBoYXZlIHRvIG1lc3Mgd2l0aCAxNiBiaXQgYWNjZXNzICovCiAgICAgICAgIG9mcyArPSBtdGQtPm9vYnNpemUgKyAoYmJtLT5iYWRibG9ja3BvcyAmIH4weDAxKTsKLSAgICAgICAgcmV0dXJuIG9uZW5hbmRfZG9fd3JpdGVfb29iKG10ZCwgb2ZzICwgMiwgJnJldGxlbiwgYnVmKTsKKyAgICAgICAgcmV0dXJuIG9uZW5hbmRfZG9fd3JpdGVfb29iKG10ZCwgb2ZzICwgMiwgJnJldGxlbiwgYnVmLCBNVERfT09CX1BMQUNFKTsKIH0KIAogLyoqCkBAIC0xNDkxLDYgKzE3NTQsOCBAQAogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAKIAlpZiAodGhpcy0+b3B0aW9ucyAmIE9ORU5BTkRfSEFTX1VOTE9DS19BTEwpIHsKKwkJLyogU2V0IHN0YXJ0IGJsb2NrIGFkZHJlc3MgKi8KKwkJdGhpcy0+d3JpdGVfd29yZCgwLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1RBUlRfQkxPQ0tfQUREUkVTUyk7CiAJCS8qIFdyaXRlIHVubG9jayBjb21tYW5kICovCiAJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9VTkxPQ0tfQUxMLCAwLCAwKTsKIApAQCAtMTUwMywxMyArMTc2OCwxMCBAQAogCQkJY29udGludWU7CiAKIAkJLyogV29ya2Fyb3VuZCBmb3IgYWxsIGJsb2NrIHVubG9jayBpbiBERFAgKi8KLQkJaWYgKHRoaXMtPmRldmljZV9pZCAmIE9ORU5BTkRfREVWSUNFX0lTX0REUCkgewotCQkJbG9mZl90IG9mczsKLQkJCXNpemVfdCBsZW47Ci0KKwkJaWYgKE9ORU5BTkRfSVNfRERQKHRoaXMpKSB7CiAJCQkvKiAxc3QgYmxvY2sgb24gYW5vdGhlciBjaGlwICovCi0JCQlvZnMgPSB0aGlzLT5jaGlwc2l6ZSA+PiAxOwotCQkJbGVuID0gMSA8PCB0aGlzLT5lcmFzZV9zaGlmdDsKKwkJCWxvZmZfdCBvZnMgPSB0aGlzLT5jaGlwc2l6ZSA+PiAxOworCQkJc2l6ZV90IGxlbiA9IG10ZC0+ZXJhc2VzaXplOwogCiAJCQlvbmVuYW5kX3VubG9jayhtdGQsIG9mcywgbGVuKTsKIAkJfQpAQCAtMTYxNyw3ICsxODc5LDcgQEAKIAl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfT1RQX0FDQ0VTUywgMCwgMCk7CiAJdGhpcy0+d2FpdChtdGQsIEZMX09UUElORyk7CiAKLQlyZXQgPSBvbmVuYW5kX2RvX3dyaXRlX29vYihtdGQsIGZyb20sIGxlbiwgcmV0bGVuLCBidWYpOworCXJldCA9IG9uZW5hbmRfZG9fd3JpdGVfb29iKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1ZiwgTVREX09PQl9QTEFDRSk7CiAKIAkvKiBFeGl0IE9UUCBhY2Nlc3MgbW9kZSAqLwogCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRVNFVCwgMCwgMCk7CkBAIC0xODIzLDEyICsyMDg1LDEzIEBACiAjZW5kaWYJLyogQ09ORklHX01URF9PTkVOQU5EX09UUCAqLwogCiAvKioKLSAqIG9uZW5hbmRfbG9ja19zY2hlbWUgLSBDaGVjayBhbmQgc2V0IE9uZU5BTkQgbG9jayBzY2hlbWUKKyAqIG9uZW5hbmRfY2hlY2tfZmVhdHVyZXMgLSBDaGVjayBhbmQgc2V0IE9uZU5BTkQgZmVhdHVyZXMKICAqIEBwYXJhbSBtdGQJCU1URCBkYXRhIHN0cnVjdHVyZQogICoKLSAqIENoZWNrIGFuZCBzZXQgT25lTkFORCBsb2NrIHNjaGVtZQorICogQ2hlY2sgYW5kIHNldCBPbmVOQU5EIGZlYXR1cmVzCisgKiAtIGxvY2sgc2NoZW1lCiAgKi8KLXN0YXRpYyB2b2lkIG9uZW5hbmRfbG9ja19zY2hlbWUoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgdm9pZCBvbmVuYW5kX2NoZWNrX2ZlYXR1cmVzKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJdW5zaWduZWQgaW50IGRlbnNpdHksIHByb2Nlc3M7CkBAIC0xOTYxLDI2ICsyMjI0LDI4IEBACiAJZGVuc2l0eSA9IGRldl9pZCA+PiBPTkVOQU5EX0RFVklDRV9ERU5TSVRZX1NISUZUOwogCXRoaXMtPmNoaXBzaXplID0gKDE2IDw8IGRlbnNpdHkpIDw8IDIwOwogCS8qIFNldCBkZW5zaXR5IG1hc2suIGl0IGlzIHVzZWQgZm9yIEREUCAqLwotCXRoaXMtPmRlbnNpdHlfbWFzayA9ICgxIDw8IChkZW5zaXR5ICsgNikpOworCWlmIChPTkVOQU5EX0lTX0REUCh0aGlzKSkKKwkJdGhpcy0+ZGVuc2l0eV9tYXNrID0gKDEgPDwgKGRlbnNpdHkgKyA2KSk7CisJZWxzZQorCQl0aGlzLT5kZW5zaXR5X21hc2sgPSAwOwogCiAJLyogT25lTkFORCBwYWdlIHNpemUgJiBibG9jayBzaXplICovCiAJLyogVGhlIGRhdGEgYnVmZmVyIHNpemUgaXMgZXF1YWwgdG8gcGFnZSBzaXplICovCiAJbXRkLT53cml0ZXNpemUgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0RBVEFfQlVGRkVSX1NJWkUpOwogCW10ZC0+b29ic2l6ZSA9IG10ZC0+d3JpdGVzaXplID4+IDU7Ci0JLyogUGFnZXJzIHBlciBibG9jayBpcyBhbHdheXMgNjQgaW4gT25lTkFORCAqLworCS8qIFBhZ2VzIHBlciBhIGJsb2NrIGFyZSBhbHdheXMgNjQgaW4gT25lTkFORCAqLwogCW10ZC0+ZXJhc2VzaXplID0gbXRkLT53cml0ZXNpemUgPDwgNjsKIAogCXRoaXMtPmVyYXNlX3NoaWZ0ID0gZmZzKG10ZC0+ZXJhc2VzaXplKSAtIDE7CiAJdGhpcy0+cGFnZV9zaGlmdCA9IGZmcyhtdGQtPndyaXRlc2l6ZSkgLSAxOwotCXRoaXMtPnBwYl9zaGlmdCA9ICh0aGlzLT5lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOwotCXRoaXMtPnBhZ2VfbWFzayA9IChtdGQtPmVyYXNlc2l6ZSAvIG10ZC0+d3JpdGVzaXplKSAtIDE7CisJdGhpcy0+cGFnZV9tYXNrID0gKDEgPDwgKHRoaXMtPmVyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpIC0gMTsKIAogCS8qIFJFVklTVDogTXVsdGljaGlwIGhhbmRsaW5nICovCiAKIAltdGQtPnNpemUgPSB0aGlzLT5jaGlwc2l6ZTsKIAotCS8qIENoZWNrIE9uZU5BTkQgbG9jayBzY2hlbWUgKi8KLQlvbmVuYW5kX2xvY2tfc2NoZW1lKG10ZCk7CisJLyogQ2hlY2sgT25lTkFORCBmZWF0dXJlcyAqLworCW9uZW5hbmRfY2hlY2tfZmVhdHVyZXMobXRkKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjAyMSw2ICsyMjg2LDcgQEAKICAqLwogaW50IG9uZW5hbmRfc2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1heGNoaXBzKQogeworCWludCBpOwogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAKIAlpZiAoIXRoaXMtPnJlYWRfd29yZCkKQEAgLTIwOTIsMTIgKzIzNTgsMjEgQEAKIAl9CiAKIAl0aGlzLT5zdWJwYWdlc2l6ZSA9IG10ZC0+d3JpdGVzaXplID4+IG10ZC0+c3VicGFnZV9zZnQ7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGZvciBhIGNsaWVudCB0byBwbGFjZSBkYXRhIGludG8KKwkgKiB0aGUgb3V0IG9mIGJhbmQgYXJlYQorCSAqLworCXRoaXMtPmVjY2xheW91dC0+b29iYXZhaWwgPSAwOworCWZvciAoaSA9IDA7IHRoaXMtPmVjY2xheW91dC0+b29iZnJlZVtpXS5sZW5ndGg7IGkrKykKKwkJdGhpcy0+ZWNjbGF5b3V0LT5vb2JhdmFpbCArPQorCQkJdGhpcy0+ZWNjbGF5b3V0LT5vb2JmcmVlW2ldLmxlbmd0aDsKKwogCW10ZC0+ZWNjbGF5b3V0ID0gdGhpcy0+ZWNjbGF5b3V0OwogCiAJLyogRmlsbCBpbiByZW1haW5pbmcgTVREIGRyaXZlciBkYXRhICovCiAJbXRkLT50eXBlID0gTVREX05BTkRGTEFTSDsKIAltdGQtPmZsYWdzID0gTVREX0NBUF9OQU5ERkxBU0g7Ci0JbXRkLT5lY2N0eXBlID0gTVREX0VDQ19TVzsKIAltdGQtPmVyYXNlID0gb25lbmFuZF9lcmFzZTsKIAltdGQtPnBvaW50ID0gTlVMTDsKIAltdGQtPnVucG9pbnQgPSBOVUxMOwpAQCAtMjE0NCw4ICsyNDE5LDExIEBACiAJZGVsX210ZF9kZXZpY2UgKG10ZCk7CiAKIAkvKiBGcmVlIGJhZCBibG9jayB0YWJsZSBtZW1vcnksIGlmIGFsbG9jYXRlZCAqLwotCWlmICh0aGlzLT5iYm0pCisJaWYgKHRoaXMtPmJibSkgeworCQlzdHJ1Y3QgYmJtX2luZm8gKmJibSA9IHRoaXMtPmJibTsKKwkJa2ZyZWUoYmJtLT5iYnQpOwogCQlrZnJlZSh0aGlzLT5iYm0pOworCX0KIAkvKiBCdWZmZXIgYWxsb2NhdGVkIGJ5IG9uZW5hbmRfc2NhbiAqLwogCWlmICh0aGlzLT5vcHRpb25zICYgT05FTkFORF9QQUdFQlVGX0FMTE9DKQogCQlrZnJlZSh0aGlzLT5wYWdlX2J1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmJ0LmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmJ0LmMKaW5kZXggOThmOGZkMS4uYWVjZGQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2JidC5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYwpAQCAtMTcsOCArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCi1leHRlcm4gaW50IG9uZW5hbmRfZG9fcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkJICAgICAgIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CitleHRlcm4gaW50IG9uZW5hbmRfYmJ0X3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CiAKIC8qKgogICogY2hlY2tfc2hvcnRfcGF0dGVybiAtIFtHRU5FUklDXSBjaGVjayBpZiBhIHBhdHRlcm4gaXMgaW4gdGhlIGJ1ZmZlcgpAQCAtNjUsMTAgKzY1LDExIEBACiAJaW50IHN0YXJ0YmxvY2s7CiAJbG9mZl90IGZyb207CiAJc2l6ZV90IHJlYWRsZW4sIG9vYmxlbjsKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiU2Nhbm5pbmcgZGV2aWNlIGZvciBiYWQgYmxvY2tzXG4iKTsKIAotCWxlbiA9IDE7CisJbGVuID0gMjsKIAogCS8qIFdlIG5lZWQgb25seSByZWFkIGZldyBieXRlcyBmcm9tIHRoZSBPT0IgYXJlYSAqLwogCXNjYW5sZW4gPSBvb2JsZW4gPSAwOwpAQCAtODIsMjIgKzgzLDI0IEBACiAJc3RhcnRibG9jayA9IDA7CiAJZnJvbSA9IDA7CiAKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisJb3BzLm9vYmxlbiA9IHJlYWRsZW47CisJb3BzLm9vYmJ1ZiA9IGJ1ZjsKKwlvcHMubGVuID0gb3BzLm9vYm9mZnMgPSBvcHMucmV0bGVuID0gb3BzLm9vYnJldGxlbiA9IDA7CisKIAlmb3IgKGkgPSBzdGFydGJsb2NrOyBpIDwgbnVtYmxvY2tzOyApIHsKIAkJaW50IHJldDsKIAogCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLQkJCXNpemVfdCByZXRsZW47Ci0KIAkJCS8qIE5vIG5lZWQgdG8gcmVhZCBwYWdlcyBmdWxseSwKIAkJCSAqIGp1c3QgcmVhZCByZXF1aXJlZCBPT0IgYnl0ZXMgKi8KLQkJCXJldCA9IG9uZW5hbmRfZG9fcmVhZF9vb2IobXRkLCBmcm9tICsgaiAqIG10ZC0+d3JpdGVzaXplICsgYmQtPm9mZnMsCi0JCQkJCQkgIHJlYWRsZW4sICZyZXRsZW4sICZidWZbMF0pOworCQkJcmV0ID0gb25lbmFuZF9iYnRfcmVhZF9vb2IobXRkLCBmcm9tICsgaiAqIG10ZC0+d3JpdGVzaXplICsgYmQtPm9mZnMsICZvcHMpOwogCiAJCQkvKiBJZiBpdCBpcyBhIGluaXRpYWwgYmFkIGJsb2NrLCBqdXN0IGlnbm9yZSBpdCAqLwotCQkJaWYgKHJldCAmJiAhKHJldCAmIE9ORU5BTkRfQ1RSTF9MT0FEKSkKLQkJCQlyZXR1cm4gcmV0OworCQkJaWYgKHJldCA9PSBPTkVOQU5EX0JCVF9SRUFEX0ZBVEFMX0VSUk9SKQorCQkJCXJldHVybiAtRUlPOwogCi0JCQlpZiAoY2hlY2tfc2hvcnRfcGF0dGVybigmYnVmW2ogKiBzY2FubGVuXSwgc2NhbmxlbiwgbXRkLT53cml0ZXNpemUsIGJkKSkgeworCQkJaWYgKHJldCB8fCBjaGVja19zaG9ydF9wYXR0ZXJuKCZidWZbaiAqIHNjYW5sZW5dLCBzY2FubGVuLCBtdGQtPndyaXRlc2l6ZSwgYmQpKSB7CiAJCQkJYmJtLT5iYnRbaSA+PiAzXSB8PSAweDAzIDw8IChpICYgMHg2KTsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJCYWQgZXJhc2VibG9jayAlZCBhdCAweCUwOHhcbiIsCiAJCQkJCWkgPj4gMSwgKHVuc2lnbmVkIGludCkgZnJvbSk7CkBAIC0xNjgsOCArMTcxLDggQEAKICAqIG1hcmtlZCBnb29kIC8gYmFkIGJsb2NrcyBhbmQgd3JpdGVzIHRoZSBiYWQgYmxvY2sgdGFibGUocykgdG8KICAqIHRoZSBzZWxlY3RlZCBwbGFjZS4KICAqCi0gKiBUaGUgYmFkIGJsb2NrIHRhYmxlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgaGVyZS4gSXQgbXVzdCBiZSBmcmVlZAotICogYnkgY2FsbGluZyB0aGUgb25lbmFuZF9mcmVlX2JidCBmdW5jdGlvbi4KKyAqIFRoZSBiYWQgYmxvY2sgdGFibGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBoZXJlLiBJdCBpcyBmcmVlZAorICogYnkgdGhlIG9uZW5hbmRfcmVsZWFzZSBmdW5jdGlvbi4KICAqCiAgKi8KIGludCBvbmVuYW5kX3NjYW5fYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvcmVkYm9vdC5jIGIvZHJpdmVycy9tdGQvcmVkYm9vdC5jCmluZGV4IDAzNWNkOWIuLmE2MTM1MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3JlZGJvb3QuYworKysgYi9kcml2ZXJzL210ZC9yZWRib290LmMKQEAgLTk0LDggKzk0LDE5IEBACiAJCQkgKiAoTk9URTogdGhpcyBpcyAnc2l6ZScgbm90ICdkYXRhX2xlbmd0aCc7IHNpemUgaXMKIAkJCSAqIHRoZSBmdWxsIHNpemUgb2YgdGhlIGVudHJ5LikKIAkJCSAqLwotCQkJaWYgKHN3YWIzMihidWZbaV0uc2l6ZSkgPT0gbWFzdGVyLT5lcmFzZXNpemUpIHsKKworCQkJLyogUmVkQm9vdCBjYW4gY29tYmluZSB0aGUgRklTIGRpcmVjdG9yeSBhbmQKKwkJCSAgIGNvbmZpZyBwYXJ0aXRpb25zIGludG8gYSBzaW5nbGUgZXJhc2VibG9jazsKKwkJCSAgIHdlIGFzc3VtZSB3cm9uZy1lbmRpYW4gaWYgZWl0aGVyIHRoZSBzd2FwcGVkCisJCQkgICAnc2l6ZScgbWF0Y2hlcyB0aGUgZXJhc2VibG9jayBzaXplIHByZWNpc2VseSwKKwkJCSAgIG9yIGlmIHRoZSBzd2FwcGVkIHNpemUgYWN0dWFsbHkgZml0cyBpbiBhbgorCQkJICAgZXJhc2VibG9jayB3aGlsZSB0aGUgdW5zd2FwcGVkIHNpemUgZG9lc24ndC4gKi8KKwkJCWlmIChzd2FiMzIoYnVmW2ldLnNpemUpID09IG1hc3Rlci0+ZXJhc2VzaXplIHx8CisJCQkgICAgKGJ1ZltpXS5zaXplID4gbWFzdGVyLT5lcmFzZXNpemUKKwkJCSAgICAgJiYgc3dhYjMyKGJ1ZltpXS5zaXplKSA8IG1hc3Rlci0+ZXJhc2VzaXplKSkgewogCQkJCWludCBqOworCQkJCS8qIFVwZGF0ZSBudW1zbG90cyBiYXNlZCBvbiBhY3R1YWwgRklTIGRpcmVjdG9yeSBzaXplICovCisJCQkJbnVtc2xvdHMgPSBzd2FiMzIoYnVmW2ldLnNpemUpIC8gc2l6ZW9mIChzdHJ1Y3QgZmlzX2ltYWdlX2Rlc2MpOwogCQkJCWZvciAoaiA9IDA7IGogPCBudW1zbG90czsgKytqKSB7CiAKIAkJCQkJLyogQSBzaW5nbGUgMHhmZiBkZW5vdGVzIGEgZGVsZXRlZCBlbnRyeS4KQEAgLTEyMCwxMSArMTMxLDExIEBACiAJCQkJCXN3YWIzMnMoJmJ1ZltqXS5kZXNjX2Nrc3VtKTsKIAkJCQkJc3dhYjMycygmYnVmW2pdLmZpbGVfY2tzdW0pOwogCQkJCX0KKwkJCX0gZWxzZSBpZiAoYnVmW2ldLnNpemUgPCBtYXN0ZXItPmVyYXNlc2l6ZSkgeworCQkJCS8qIFVwZGF0ZSBudW1zbG90cyBiYXNlZCBvbiBhY3R1YWwgRklTIGRpcmVjdG9yeSBzaXplICovCisJCQkJbnVtc2xvdHMgPSBidWZbaV0uc2l6ZSAvIHNpemVvZihzdHJ1Y3QgZmlzX2ltYWdlX2Rlc2MpOwogCQkJfQogCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQkvKiByZS1jYWxjdWxhdGUgb2YgcmVhbCBudW1zbG90cyAqLwotCQkJbnVtc2xvdHMgPSBidWZbaV0uc2l6ZSAvIHNpemVvZihzdHJ1Y3QgZmlzX2ltYWdlX2Rlc2MpOwogCQl9CiAJfQogCWlmIChpID09IG51bXNsb3RzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKaW5kZXggMzVhZDVjZi4uOTkzMDRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOXRvby5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwpAQCAtMTEwOSw2ICsxMTA5LDggQEAKIAogCWFzc2VydCAoZGV2ICE9IE5VTEwpOwogCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwogCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwogCiAJX19ydGw4MTM5X2NsZWFudXBfZGV2IChkZXYpOwpAQCAtMTYwMywxOCArMTYwNSwyMSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC0+bWlpLmRldjsKIAl1bnNpZ25lZCBsb25nIHRocl9kZWxheSA9IG5leHRfdGljazsKIAorCXJ0bmxfbG9jaygpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCWlmICh0cC0+d2F0Y2hkb2dfZmlyZWQpIHsKIAkJdHAtPndhdGNoZG9nX2ZpcmVkID0gMDsKIAkJcnRsODEzOV90eF90aW1lb3V0X3Rhc2sod29yayk7Ci0JfSBlbHNlIGlmIChydG5sX3RyeWxvY2soKSkgewotCQlydGw4MTM5X3RocmVhZF9pdGVyIChkZXYsIHRwLCB0cC0+bW1pb19hZGRyKTsKLQkJcnRubF91bmxvY2sgKCk7Ci0JfSBlbHNlIHsKLQkJLyogdW5saWtlbHkgcmFjZS4gIG1pdGlnYXRlIHdpdGggZmFzdCBwb2xsLiAqLwotCQl0aHJfZGVsYXkgPSBIWiAvIDI7Ci0JfQorCX0gZWxzZQorCQlydGw4MTM5X3RocmVhZF9pdGVyKGRldiwgdHAsIHRwLT5tbWlvX2FkZHIpOwogCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0cC0+dGhyZWFkLCB0aHJfZGVsYXkpOworCWlmICh0cC0+aGF2ZV90aHJlYWQpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHAtPnRocmVhZCwgdGhyX2RlbGF5KTsKK291dF91bmxvY2s6CisJcnRubF91bmxvY2sgKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxMzlfc3RhcnRfdGhyZWFkKHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwKQpAQCAtMTYyNiwxOSArMTYzMSwxMSBAQAogCQlyZXR1cm47CiAKIAl0cC0+aGF2ZV90aHJlYWQgPSAxOworCXRwLT53YXRjaGRvZ19maXJlZCA9IDA7CiAKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRwLT50aHJlYWQsIG5leHRfdGljayk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxMzlfc3RvcF90aHJlYWQoc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHApCi17Ci0JaWYgKHRwLT5oYXZlX3RocmVhZCkgewotCQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZ0cC0+dGhyZWFkKTsKLQkJdHAtPmhhdmVfdGhyZWFkID0gMDsKLQl9IGVsc2UKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxMzlfdHhfY2xlYXIgKHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwKQogewogCXRwLT5jdXJfdHggPSAwOwpAQCAtMTY5NiwxMiArMTY5MywxMSBAQAogewogCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCXRwLT53YXRjaGRvZ19maXJlZCA9IDE7CiAJaWYgKCF0cC0+aGF2ZV90aHJlYWQpIHsKLQkJSU5JVF9ERUxBWUVEX1dPUksoJnRwLT50aHJlYWQsIHJ0bDgxMzlfdHhfdGltZW91dF90YXNrKTsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJnRwLT50aHJlYWQsIHJ0bDgxMzlfdGhyZWFkKTsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0cC0+dGhyZWFkLCBuZXh0X3RpY2spOwotCX0gZWxzZQotCQl0cC0+d2F0Y2hkb2dfZmlyZWQgPSAxOwotCisJfQogfQogCiBzdGF0aWMgaW50IHJ0bDgxMzlfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTIyMzMsOCArMjIyOSw2IEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlIChkZXYpOwogCi0JcnRsODEzOV9zdG9wX3RocmVhZCh0cCk7Ci0KIAlpZiAobmV0aWZfbXNnX2lmZG93bih0cCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgMHglNC40eC5cbiIsCiAJCQlkZXYtPm5hbWUsIFJUTF9SMTYgKEludHJTdGF0dXMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IDM4ZjQxYTUuLjlkNWMwODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMTI4NCw4ICsxMjg0LDggQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHBjbmV0MzIuCiAKIGNvbmZpZyBQQ05FVDMyX05BUEkKLQlib29sICJVc2UgUlggcG9sbGluZyAoTkFQSSkgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQQ05FVDMyICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIlVzZSBSWCBwb2xsaW5nIChOQVBJKSIKKwlkZXBlbmRzIG9uIFBDTkVUMzIKIAloZWxwCiAJICBOQVBJIGlzIGEgbmV3IGRyaXZlciBBUEkgZGVzaWduZWQgdG8gcmVkdWNlIENQVSBhbmQgaW50ZXJydXB0IGxvYWQKIAkgIHdoZW4gdGhlIGRyaXZlciBpcyByZWNlaXZpbmcgbG90cyBvZiBwYWNrZXRzIGZyb20gdGhlIGNhcmQuIEl0IGlzCkBAIC0yMTI1LDE0ICsyMTI1LDE2IEBACiAJICB3aWxsIGJlIGNhbGxlZCBza3kyLiAgVGhpcyBpcyByZWNvbW1lbmRlZC4KIAogY29uZmlnIFNLOThMSU4KLQl0cmlzdGF0ZSAiTWFydmVsbCBZdWtvbiBDaGlwc2V0IC8gU3lzS29ubmVjdCBTSy05OHh4IFN1cHBvcnQiCisJdHJpc3RhdGUgIk1hcnZlbGwgWXVrb24gQ2hpcHNldCAvIFN5c0tvbm5lY3QgU0stOTh4eCBTdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFBDSQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBNYXJ2ZWxsIFl1a29uIG9yIFN5c0tvbm5lY3QgU0stOTh4eC9TSy05NXh4CiAJICBjb21wbGlhbnQgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyLgogCi0JICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgb3JpZ2luYWwgWXVrb24gY2hpcHNldC4gQSBjbGVhbmVyIGRyaXZlciBpcyAKLQkgIGFsc28gYXZhaWxhYmxlIChza2dlKSB3aGljaCBzZWVtcyB0byB3b3JrIGJldHRlciB0aGFuIHRoaXMgb25lLgorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIG9yaWdpbmFsIFl1a29uIGNoaXBzZXQuIFRoaXMgZHJpdmVyIGlzCisJICBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsIGluIHRoZSBuZWFyIGZ1dHVyZSwKKwkgIGl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBza2dlIGRyaXZlci4gc2tnZSBpcyBjbGVhbmVyIGFuZAorCSAgc2VlbXMgdG8gd29yayBiZXR0ZXIuCiAKIAkgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIG5ld2VyIFl1a29uMiBjaGlwc2V0LiBBIHNlcGFyYXRlCiAJICBkcml2ZXIsIHNreTIsIGlzIHByb3ZpZGVkIHRvIHN1cHBvcnQgWXVrb24yLWJhc2VkIGFkYXB0ZXJzLgpAQCAtMjMwNSwyNyArMjMwNyw2IEBACiAJICBjaGlwc2V0IHdoaWNoIGlzIHVzZWQgaW4gdGhlIE1vbWVuY28gT2NlbG90IEMgYW5kIEphZ3VhciBBVFggYW5kCiAJICBQZWdhc29zIElJLCBhbW9uZ3N0IG90aGVyIFBQQyBhbmQgTUlQUyBib2FyZHMuCiAKLWNvbmZpZyBNVjY0M1hYX0VUSF8wCi0JYm9vbCAiTVYtNjQzWFggUG9ydCAwIgotCWRlcGVuZHMgb24gTVY2NDNYWF9FVEgKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUG9ydCAwIG9mIHRoZSBNYXJ2ZWxsIE1WNjQzWFggR2lnYWJpdAotCSAgRXRoZXJuZXQuCi0KLWNvbmZpZyBNVjY0M1hYX0VUSF8xCi0JYm9vbCAiTVYtNjQzWFggUG9ydCAxIgotCWRlcGVuZHMgb24gTVY2NDNYWF9FVEgKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUG9ydCAxIG9mIHRoZSBNYXJ2ZWxsIE1WNjQzWFggR2lnYWJpdAotCSAgRXRoZXJuZXQuCi0KLWNvbmZpZyBNVjY0M1hYX0VUSF8yCi0JYm9vbCAiTVYtNjQzWFggUG9ydCAyIgotCWRlcGVuZHMgb24gTVY2NDNYWF9FVEgKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUG9ydCAyIG9mIHRoZSBNYXJ2ZWxsIE1WNjQzWFggR2lnYWJpdAotCSAgRXRoZXJuZXQuCi0KIGNvbmZpZyBRTEEzWFhYCiAJdHJpc3RhdGUgIlFMb2dpYyBRTEEzWFhYIE5ldHdvcmsgRHJpdmVyIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTIzMzcsNyArMjMxOCw3IEBACiAKIGNvbmZpZyBBVEwxCiAJdHJpc3RhdGUgIkF0dGFuc2ljIEwxIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIE5FVF9QQ0kgJiYgUENJICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gUENJICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBNSUkKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCmluZGV4IGU3NTU1ZDQuLjYzMTg4MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jCkBAIC05NCw3ICs5NCw3IEBACiAKIAlCVUdNU0coRF9EVVJJTkcsICJpdCdzIGEgcmF3IHBhY2tldCAobGVuZ3RoPSVkKVxuIiwgbGVuZ3RoKTsKIAotCWlmIChsZW5ndGggPj0gTWluVFUpCisJaWYgKGxlbmd0aCA+IE1UVSkKIAkJb2ZzID0gNTEyIC0gbGVuZ3RoOwogCWVsc2UKIAkJb2ZzID0gMjU2IC0gbGVuZ3RoOwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJCSAgICAgICBsZW5ndGgsIFhNVFUpOwogCQlsZW5ndGggPSBYTVRVOwogCX0KLQlpZiAobGVuZ3RoID4gTWluVFUpIHsKKwlpZiAobGVuZ3RoID49IE1pblRVKSB7CiAJCWhhcmQtPm9mZnNldFswXSA9IDA7CiAJCWhhcmQtPm9mZnNldFsxXSA9IG9mcyA9IDUxMiAtIGxlbmd0aDsKIAl9IGVsc2UgaWYgKGxlbmd0aCA+IE1UVSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCmluZGV4IDRlOTFkYWIuLjgzMDA0ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKQEAgLTQxLDcgKzQxLDcgQEAKICAqICAgICA8am9qb0ByZXBhcy5kZT4KICAqLwogCi0jZGVmaW5lIFZFUlNJT04gImFyY25ldDogdjMuOTMgQkVUQSAyMDAwLzA0LzI5IC0gYnkgQXZlcnkgUGVubmFydW4gZXQgYWwuXG4iCisjZGVmaW5lIFZFUlNJT04gImFyY25ldDogdjMuOTQgQkVUQSAyMDA3LzAyLzA4IC0gYnkgQXZlcnkgUGVubmFydW4gZXQgYWwuXG4iCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCmluZGV4IDk4ZDMyNmIuLmI4YzBmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKQEAgLTE1NSw2ICsxNTUsNyBAQAogCXsgMHgxNTcxLCAweGEwMGIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFSQ19JU181TUJJVCB9LAogCXsgMHgxNTcxLCAweGEwMGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFSQ19JU181TUJJVCB9LAogCXsgMHgxNTcxLCAweGEwMGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFSQ19JU181TUJJVCB9LAorCXsgMHgxNTcxLCAweGEwMGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFSQ19JU181TUJJVCB9LAogCXsgMHgxNTcxLCAweGEyMDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFSQ19DQU5fMTBNQklUIH0sCiAJeyAweDE1NzEsIDB4YTIwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVJDX0NBTl8xME1CSVQgfSwKIAl7IDB4MTU3MSwgMHhhMjAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBUkNfQ0FOXzEwTUJJVCB9LApAQCAtMTYzLDYgKzE2NCw4IEBACiAJeyAweDE1NzEsIDB4YTIwNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVJDX0NBTl8xME1CSVQgfSwKIAl7IDB4MTBCNSwgMHg5MDMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBUkNfQ0FOXzEwTUJJVCB9LAogCXsgMHgxMEI1LCAweDkwNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFSQ19DQU5fMTBNQklUIH0sCisJeyAweDE0QkEsIDB4NjAwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVJDX0NBTl8xME1CSVQgfSwKKwl7IDB4MTBCNSwgMHgyMjAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBUkNfQ0FOXzEwTUJJVCB9LAogCXswLH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKaW5kZXggNDIxODA3NS4uN2NmMGEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCVNFVF9TVUJBRFIoU1VCX1NFVFVQMSk7CiAJb3V0YihscC0+c2V0dXAsIF9YUkVHKTsKIAotCWlmIChscC0+Y2FyZF9mbGFncyAmIEFSQ19DQU5fMTBNQklUKQorCWlmIChscC0+Y2xvY2ttICE9IDApCiAJewogCQlTRVRfU1VCQURSKFNVQl9TRVRVUDIpOwogCQlvdXRiKGxwLT5zZXR1cDIsIF9YUkVHKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9ody5jIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2h3LmMKaW5kZXggMDhiMmQ3OC4uMzE0ZGJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2h3LmMKQEAgLTI0MywxNCArMjQzLDggQEAKIAkJCWkgKz0gNDsKIAkJfQogCi0vKgotICogVGhlIGZvbGxvd2luZyAyIGxpbmVzIGFyZSB0aGUgQXR0YW5zaWMgb3JpZ2luYWxzLiAgU2F2aW5nIGZvciBwb3N0ZXJpdHkuCi0gKgkJKih1MzIgKikgJiBldGhfYWRkclsyXSA9IExPTkdTV0FQKGFkZHJbMF0pOwotICoJCSoodTE2ICopICYgZXRoX2FkZHJbMF0gPSBTSE9SVFNXQVAoKih1MTYgKikgJiBhZGRyWzFdKTsKLSAqLwotCQkqKHUzMiAqKSAmIGV0aF9hZGRyWzJdID0gc3dhYjMyKGFkZHJbMF0pOwotCQkqKHUxNiAqKSAmIGV0aF9hZGRyWzBdID0gc3dhYjE2KCoodTE2ICopICYgYWRkclsxXSk7Ci0KKwkJKih1MzIgKikgJmV0aF9hZGRyWzJdID0gc3dhYjMyKGFkZHJbMF0pOworCQkqKHUxNiAqKSAmZXRoX2FkZHJbMF0gPSBzd2FiMTYoKih1MTYgKikgJmFkZHJbMV0pOwogCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihldGhfYWRkcikpIHsKIAkJCW1lbWNweShody0+cGVybV9tYWNfYWRkciwgZXRoX2FkZHIsIEVUSF9BTEVOKTsKIAkJCXJldHVybiAwOwpAQCAtMjgxLDE3ICsyNzUsMjggQEAKIAkJaSArPSA0OwogCX0KIAotLyoKLSAqIFRoZSBmb2xsb3dpbmcgMiBsaW5lcyBhcmUgdGhlIEF0dGFuc2ljIG9yaWdpbmFscy4gIFNhdmluZyBmb3IgcG9zdGVyaXR5LgotICoJKih1MzIgKikgJiBldGhfYWRkclsyXSA9IExPTkdTV0FQKGFkZHJbMF0pOwotICoJKih1MTYgKikgJiBldGhfYWRkclswXSA9IFNIT1JUU1dBUCgqKHUxNiAqKSAmIGFkZHJbMV0pOwotICovCi0JKih1MzIgKikgJiBldGhfYWRkclsyXSA9IHN3YWIzMihhZGRyWzBdKTsKLQkqKHUxNiAqKSAmIGV0aF9hZGRyWzBdID0gc3dhYjE2KCoodTE2ICopICYgYWRkclsxXSk7CisJKih1MzIgKikgJmV0aF9hZGRyWzJdID0gc3dhYjMyKGFkZHJbMF0pOworCSoodTE2ICopICZldGhfYWRkclswXSA9IHN3YWIxNigqKHUxNiAqKSAmYWRkclsxXSk7CiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2FkZHIpKSB7CiAJCW1lbWNweShody0+cGVybV9tYWNfYWRkciwgZXRoX2FkZHIsIEVUSF9BTEVOKTsKIAkJcmV0dXJuIDA7CiAJfQorCisJLyoKKwkgKiBPbiBzb21lIG1vdGhlcmJvYXJkcywgdGhlIE1BQyBhZGRyZXNzIGlzIHdyaXR0ZW4gYnkgdGhlCisJICogQklPUyBkaXJlY3RseSB0byB0aGUgTUFDIHJlZ2lzdGVyIGR1cmluZyBQT1NULCBhbmQgaXMKKwkgKiBub3Qgc3RvcmVkIGluIGVlcHJvbS4gIElmIGFsbCBlbHNlIHRodXMgZmFyIGhhcyBmYWlsZWQKKwkgKiB0byBmZXRjaCB0aGUgcGVybWFuZW50IE1BQyBhZGRyZXNzLCB0cnkgcmVhZGluZyBpdCBkaXJlY3RseS4KKwkgKi8KKwlhZGRyWzBdID0gaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfTUFDX1NUQV9BRERSKTsKKwlhZGRyWzFdID0gaW9yZWFkMTYoaHctPmh3X2FkZHIgKyAoUkVHX01BQ19TVEFfQUREUiArIDQpKTsKKwkqKHUzMiAqKSAmZXRoX2FkZHJbMl0gPSBzd2FiMzIoYWRkclswXSk7CisJKih1MTYgKikgJmV0aF9hZGRyWzBdID0gc3dhYjE2KCoodTE2ICopICZhZGRyWzFdKTsKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihldGhfYWRkcikpIHsKKwkJbWVtY3B5KGh3LT5wZXJtX21hY19hZGRyLCBldGhfYWRkciwgRVRIX0FMRU4pOworCQlyZXR1cm4gMDsKKwl9CisKIAlyZXR1cm4gMTsKIH0KIApAQCAtMzU3LDcgKzM2Miw3IEBACiAJICovCiAJaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiAzMSkgJiAweDE7CiAJaGFzaF9iaXQgPSAoaGFzaF92YWx1ZSA+PiAyNikgJiAweDFGOwotCW10YSA9IGlvcmVhZDMyKChodyArIFJFR19SWF9IQVNIX1RBQkxFKSArIChoYXNoX3JlZyA8PCAyKSk7CisJbXRhID0gaW9yZWFkMzIoKGh3LT5od19hZGRyICsgUkVHX1JYX0hBU0hfVEFCTEUpICsgKGhhc2hfcmVnIDw8IDIpKTsKIAltdGEgfD0gKDEgPDwgaGFzaF9iaXQpOwogCWlvd3JpdGUzMihtdGEsIChody0+aHdfYWRkciArIFJFR19SWF9IQVNIX1RBQkxFKSArIChoYXNoX3JlZyA8PCAyKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX21haW4uYwppbmRleCA2NjU1NjQwLi42NTY3MzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9tYWluLmMKQEAgLTgyLDggKzgyLDcgQEAKIAogI2luY2x1ZGUgImF0bDEuaCIKIAotI2RlZmluZSBSVU5fUkVBTFRJTUUgMAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMi4wLjYiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIyLjAuNyIKIAogY2hhciBhdGwxX2RyaXZlcl9uYW1lW10gPSAiYXRsMSI7CiBzdGF0aWMgY29uc3QgY2hhciBhdGwxX2RyaXZlcl9zdHJpbmdbXSA9ICJBdHRhbnNpYyBMMSBFdGhlcm5ldCBOZXR3b3JrIERyaXZlciI7CkBAIC0xMDAsNyArOTksNyBAQAogICogYXRsMV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRsMV9wY2lfdGJsW10gPSB7Ci0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgMHgxMDQ4KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMSl9LAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYjQ0LmMgYi9kcml2ZXJzL25ldC9iNDQuYwppbmRleCA1ZmY3ODgyLi5hYWFkYTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtNTksNyArNTksNiBAQAogI2RlZmluZSBCNDRfREVGX1RYX1JJTkdfUEVORElORwkJKEI0NF9UWF9SSU5HX1NJWkUgLSAxKQogI2RlZmluZSBCNDRfVFhfUklOR19CWVRFUwkoc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykgKiBcCiAJCQkJIEI0NF9UWF9SSU5HX1NJWkUpCi0jZGVmaW5lIEI0NF9ETUFfTUFTSyAweDNmZmZmZmZmCiAKICNkZWZpbmUgVFhfUklOR19HQVAoQlApCVwKIAkoQjQ0X1RYX1JJTkdfU0laRSAtIChCUCktPnR4X3BlbmRpbmcpCkBAIC02NjUsNyArNjY0LDcgQEAKIAkvKiBIYXJkd2FyZSBidWcgd29yay1hcm91bmQsIHRoZSBjaGlwIGlzIHVuYWJsZSB0byBkbyBQQ0kgRE1BCiAJICAgdG8vZnJvbSBhbnl0aGluZyBhYm92ZSAxR0IgOi0oICovCiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpIHx8Ci0JCW1hcHBpbmcgKyBSWF9QS1RfQlVGX1NaID4gQjQ0X0RNQV9NQVNLKSB7CisJCW1hcHBpbmcgKyBSWF9QS1RfQlVGX1NaID4gRE1BXzMwQklUX01BU0spIHsKIAkJLyogU2lnaC4uLiAqLwogCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpKQogCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwcGluZywgUlhfUEtUX0JVRl9TWixQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtNjc3LDcgKzY3Niw3IEBACiAJCQkJCSBSWF9QS1RfQlVGX1NaLAogCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpIHx8Ci0JCQltYXBwaW5nICsgUlhfUEtUX0JVRl9TWiA+IEI0NF9ETUFfTUFTSykgeworCQkJbWFwcGluZyArIFJYX1BLVF9CVUZfU1ogPiBETUFfMzBCSVRfTUFTSykgewogCQkJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSkKIAkJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXBwaW5nLCBSWF9QS1RfQlVGX1NaLFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtOTg4LDcgKzk4Nyw3IEBACiAJfQogCiAJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1hcHBpbmcpIHx8IG1hcHBpbmcgKyBsZW4gPiBCNDRfRE1BX01BU0spIHsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IobWFwcGluZykgfHwgbWFwcGluZyArIGxlbiA+IERNQV8zMEJJVF9NQVNLKSB7CiAJCS8qIENoaXAgY2FuJ3QgaGFuZGxlIERNQSB0by9mcm9tID4xR0IsIHVzZSBib3VuY2UgYnVmZmVyICovCiAJCWlmICghZG1hX21hcHBpbmdfZXJyb3IobWFwcGluZykpCiAJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXBwaW5nLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtMTAwMCw3ICs5OTksNyBAQAogCiAJCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShicC0+cGRldiwgYm91bmNlX3NrYi0+ZGF0YSwKIAkJCQkJIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWlmIChkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gQjQ0X0RNQV9NQVNLKSB7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihtYXBwaW5nKSB8fCBtYXBwaW5nICsgbGVuID4gRE1BXzMwQklUX01BU0spIHsKIAkJCWlmICghZG1hX21hcHBpbmdfZXJyb3IobWFwcGluZykpCiAJCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwcGluZywKIAkJCQkJIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CkBAIC0xMjI3LDcgKzEyMjYsNyBAQAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKIAogCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IocnhfcmluZ19kbWEpIHx8Ci0JCQlyeF9yaW5nX2RtYSArIHNpemUgPiBCNDRfRE1BX01BU0spIHsKKwkJCXJ4X3JpbmdfZG1hICsgc2l6ZSA+IERNQV8zMEJJVF9NQVNLKSB7CiAJCQlrZnJlZShyeF9yaW5nKTsKIAkJCWdvdG8gb3V0X2VycjsKIAkJfQpAQCAtMTI1NCw3ICsxMjUzLDcgQEAKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAogCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IodHhfcmluZ19kbWEpIHx8Ci0JCQl0eF9yaW5nX2RtYSArIHNpemUgPiBCNDRfRE1BX01BU0spIHsKKwkJCXR4X3JpbmdfZG1hICsgc2l6ZSA+IERNQV8zMEJJVF9NQVNLKSB7CiAJCQlrZnJlZSh0eF9yaW5nKTsKIAkJCWdvdG8gb3V0X2VycjsKIAkJfQpAQCAtMTI4OSw3ICsxMjg4LDcgQEAKIAlpZiAoc3NiX2lzX2NvcmVfdXAoYnApKSB7CiAJCWJ3MzIoYnAsIEI0NF9SQ1ZfTEFaWSwgMCk7CiAJCWJ3MzIoYnAsIEI0NF9FTkVUX0NUUkwsIEVORVRfQ1RSTF9ESVNBQkxFKTsKLQkJYjQ0X3dhaXRfYml0KGJwLCBCNDRfRU5FVF9DVFJMLCBFTkVUX0NUUkxfRElTQUJMRSwgMTAwLCAxKTsKKwkJYjQ0X3dhaXRfYml0KGJwLCBCNDRfRU5FVF9DVFJMLCBFTkVUX0NUUkxfRElTQUJMRSwgMjAwLCAxKTsKIAkJYnczMihicCwgQjQ0X0RNQVRYX0NUUkwsIDApOwogCQlicC0+dHhfcHJvZCA9IGJwLT50eF9jb25zID0gMDsKIAkJaWYgKGJyMzIoYnAsIEI0NF9ETUFSWF9TVEFUKSAmIERNQVJYX1NUQVRfRU1BU0spIHsKQEAgLTIxNTEsMTMgKzIxNTAsMTMgQEAKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCi0JZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCAodTY0KSBCNDRfRE1BX01BU0spOworCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgKHU2NCkgRE1BXzMwQklUX01BU0spOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQogCi0JZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsICh1NjQpIEI0NF9ETUFfTUFTSyk7CisJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsICh1NjQpIERNQV8zMEJJVF9NQVNLKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmcuXG4iKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfZGVmcy5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfZGVmcy5oCmluZGV4IDE2ZTAwNDkuLmUxNDg2MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2RlZnMuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19kZWZzLmgKQEAgLTEsNiArMSw1IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKaW5kZXggYzZiNzI2Ni4uYjJjZjVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaAppbmRleCAwZTZiZWI2Li5mMTU0NDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmMgYi9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYwppbmRleCAzYzBjYjg1Li5kNjYwYWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYwpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2wydC5oIGIvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmgKaW5kZXggYmE1ZDJjYi4uZDc5MDAxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmgKQEAgLTEsNiArMSw1IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy90M2NkZXYuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzY2Rldi5oCmluZGV4IDlhZjNiY2QuLmZhNDA5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzY2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzY2Rldi5oCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IENoZWxzaW8gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKaW5kZXggNjg5ZjE1OC4uZGQ0YjcyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCkBAIC0zMzcsNyArMzM3LDYgQEAKIAlzdHJ1Y3QgZTEwMDBfcnhfcmluZyB0ZXN0X3J4X3Jpbmc7CiAKIAotCXVpbnQzMl90ICpjb25maWdfc3BhY2U7CiAJaW50IG1zZ19lbmFibGU7CiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlib29sZWFuX3QgaGF2ZV9tc2k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKaW5kZXggNDRlYmM3Mi4uNjc3Nzg4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCQllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CiAJfQogCi0JaWYgKG5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkgeworCWlmIChFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpIHsKIAogCQllMTAwMF9nZXRfc3BlZWRfYW5kX2R1cGxleChodywgJmFkYXB0ZXItPmxpbmtfc3BlZWQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkYXB0ZXItPmxpbmtfZHVwbGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCmluZGV4IGQ2NzEwNTguLmJkMDAwYjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKQEAgLTMyNTMsNyArMzI1Myw3IEBACiAjZGVmaW5lIElGRV9QTUNfQVVUT19NRElYICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIDE9ZW5hYmxlIE1ESS9NREktWCBmZWF0dXJlLCBkZWZhdWx0IDA9ZGlzYWJsZWQgKi8KICNkZWZpbmUgSUZFX1BNQ19GT1JDRV9NRElYICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogMT1mb3JjZSBNRElYLVgsIDA9Zm9yY2UgTURJICovCiAjZGVmaW5lIElGRV9QTUNfTURJWF9TVEFUVVMgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIDE9TURJLVgsIDA9TURJICovCi0jZGVmaW5lIElGRV9QTUNfQVVUT19NRElYX0NPTVBMRVRFICAgICAgICAgICAweDAwMTAgIC8qIFJlc29sdXRpb24gYWxnb3J0aG0gaXMgY29tcGxldGVkICovCisjZGVmaW5lIElGRV9QTUNfQVVUT19NRElYX0NPTVBMRVRFICAgICAgICAgICAweDAwMTAgIC8qIFJlc29sdXRpb24gYWxnb3JpdGhtIGlzIGNvbXBsZXRlZCAqLwogI2RlZmluZSBJRkVfUE1DX01ESVhfTU9ERV9TSElGVCAgICAgICAgICAgICAgNgogI2RlZmluZSBJRkVfUEhDX01ESVhfUkVTRVRfQUxMX01BU0sgICAgICAgICAgMHgwMDAwICAvKiBEaXNhYmxlIGF1dG8gTURJLVggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCmluZGV4IDYxOWM4OTIuLjk4MjE1ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKQEAgLTUwNzEsNTggKzUwNzEsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi0vKiBTYXZlL3Jlc3RvcmUgMTYgb3IgNjQgZHdvcmRzIG9mIFBDSSBjb25maWcgc3BhY2UgZGVwZW5kaW5nIG9uIHdoaWNoCi0gKiBidXMgd2UncmUgb24gKFBDSShYKSB2cy4gUENJLUUpCi0gKi8KLSNkZWZpbmUgUENJRV9DT05GSUdfU1BBQ0VfTEVOIDI1NgotI2RlZmluZSBQQ0lfQ09ORklHX1NQQUNFX0xFTiA2NAotc3RhdGljIGludAotZTEwMDBfcGNpX3NhdmVfc3RhdGUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JaW50IHNpemU7Ci0JaW50IGk7Ci0KLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NzEpCi0JCXNpemUgPSBQQ0lFX0NPTkZJR19TUEFDRV9MRU47Ci0JZWxzZQotCQlzaXplID0gUENJX0NPTkZJR19TUEFDRV9MRU47Ci0KLQlXQVJOX09OKGFkYXB0ZXItPmNvbmZpZ19zcGFjZSAhPSBOVUxMKTsKLQotCWFkYXB0ZXItPmNvbmZpZ19zcGFjZSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhZGFwdGVyLT5jb25maWdfc3BhY2UpIHsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAidW5hYmxlIHRvIGFsbG9jYXRlICVkIGJ5dGVzXG4iLCBzaXplKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWZvciAoaSA9IDA7IGkgPCAoc2l6ZSAvIDQpOyBpKyspCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIGkgKiA0LCAmYWRhcHRlci0+Y29uZmlnX3NwYWNlW2ldKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWUxMDAwX3BjaV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBhZGFwdGVyLT5wZGV2OwotCWludCBzaXplOwotCWludCBpOwotCi0JaWYgKGFkYXB0ZXItPmNvbmZpZ19zcGFjZSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NzEpCi0JCXNpemUgPSBQQ0lFX0NPTkZJR19TUEFDRV9MRU47Ci0JZWxzZQotCQlzaXplID0gUENJX0NPTkZJR19TUEFDRV9MRU47Ci0JZm9yIChpID0gMDsgaSA8IChzaXplIC8gNCk7IGkrKykKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIGkgKiA0LCBhZGFwdGVyLT5jb25maWdfc3BhY2VbaV0pOwotCWtmcmVlKGFkYXB0ZXItPmNvbmZpZ19zcGFjZSk7Ci0JYWRhcHRlci0+Y29uZmlnX3NwYWNlID0gTlVMTDsKLQlyZXR1cm47Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KIHN0YXRpYyBpbnQKIGUxMDAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTUxNDIsOSArNTA5MCw3IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1BNCi0JLyogSW1wbGVtZW50IG91ciBvd24gdmVyc2lvbiBvZiBwY2lfc2F2ZV9zdGF0ZShwZGV2KSBiZWNhdXNlIHBjaS0KLQkgKiBleHByZXNzIGFkYXB0ZXJzIGhhdmUgMjU2LWJ5dGUgY29uZmlnIHNwYWNlcy4gKi8KLQlyZXR2YWwgPSBlMTAwMF9wY2lfc2F2ZV9zdGF0ZShhZGFwdGVyKTsKKwlyZXR2YWwgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogI2VuZGlmCkBAIC01MjMxLDcgKzUxNzcsNyBAQAogCXVpbnQzMl90IGVycjsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQllMTAwMF9wY2lfcmVzdG9yZV9zdGF0ZShhZGFwdGVyKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgewogCQlwcmludGsoS0VSTl9FUlIgImUxMDAwOiBDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXG4iKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCmluZGV4IDRhNTBmY2IuLjM4NjhiODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuYwpAQCAtNzE0LDEzICs3MTQsNiBAQAogICogY2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3ZlIG5vdCBiZWNvbWUgd2VkZ2VkLgogICovCiAKLS8qCi0gKiBIYW5kbGUgYW4gRXRoZXJFeHByZXNzIGludGVycnVwdAotICogSWYgd2UndmUgZmluaXNoZWQgaW5pdGlhbGl6aW5nLCBzdGFydCB0aGUgUlUgYW5kIENVIHVwLgotICogSWYgd2UndmUgYWxyZWFkeSBzdGFydGVkLCByZWFwIHR4IGJ1ZmZlcnMsIGhhbmRsZSBhbnkgcmVjZWl2ZWQgcGFja2V0cywKLSAqIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBub3QgYmVjb21lIHdlZGdlZC4KLSAqLwotCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZWV4cF9zdGFydF9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHN0YXR1cykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKaW5kZXggMjcyZTFlYy4uNDIyOTVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBEUlZfTkFNRQkiZWhlYSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIkVIRUFfMDA0NSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIkVIRUFfMDA0NiIKIAogI2RlZmluZSBFSEVBX01TR19ERUZBVUxUIChORVRJRl9NU0dfTElOSyB8IE5FVElGX01TR19USU1FUiBcCiAJfCBORVRJRl9NU0dfUlhfRVJSIHwgTkVUSUZfTVNHX1RYX0VSUikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCmluZGV4IDM4YjJmYTQuLjg4YWQxYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwpAQCAtNzYsNyArNzYsNyBAQAogCWludCB4OwogCXVuc2lnbmVkIGNoYXIgKmRlYiA9IGFkcjsKIAlmb3IgKHggPSAwOyB4IDwgbGVuOyB4ICs9IDE2KSB7Ci0JCXByaW50ayhEUlZfTkFNRSAiJXMgYWRyPSVwIG9mcz0lMDR4ICUwMTZseCAlMDE2bHhcbiIsIG1zZywKKwkJcHJpbnRrKERSVl9OQU1FICIgJXMgYWRyPSVwIG9mcz0lMDR4ICUwMTZseCAlMDE2bHhcbiIsIG1zZywKIAkJCSAgZGViLCB4LCAqKCh1NjQqKSZkZWJbMF0pLCAqKCh1NjQqKSZkZWJbOF0pKTsKIAkJZGViICs9IDE2OwogCX0KQEAgLTU1NSw2ICs1NTUsNyBAQAogewogCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBwYXJhbTsKIAlzdHJ1Y3QgZWhlYV9lcWUgKmVxZTsKKwlzdHJ1Y3QgZWhlYV9xcCAqcXA7CiAJdTMyIHFwX3Rva2VuOwogCiAJZXFlID0gZWhlYV9wb2xsX2VxKHBvcnQtPnFwX2VxKTsKQEAgLTU2Myw5ICs1NjQsMTQgQEAKIAkJcXBfdG9rZW4gPSBFSEVBX0JNQVNLX0dFVChFSEVBX0VRRV9RUF9UT0tFTiwgZXFlLT5lbnRyeSk7CiAJCWVoZWFfZXJyb3IoIlFQIGFmZl9lcnI6IGVudHJ5PTB4JWx4LCB0b2tlbj0weCV4IiwKIAkJCSAgIGVxZS0+ZW50cnksIHFwX3Rva2VuKTsKKworCQlxcCA9IHBvcnQtPnBvcnRfcmVzW3FwX3Rva2VuXS5xcDsKKwkJZWhlYV9lcnJvcl9kYXRhKHBvcnQtPmFkYXB0ZXIsIHFwLT5md19oYW5kbGUpOwogCQllcWUgPSBlaGVhX3BvbGxfZXEocG9ydC0+cXBfZXEpOwogCX0KIAorCXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+ZWhlYV93cSwgJnBvcnQtPnJlc2V0X3Rhc2spOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcGh5cC5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuYwppbmRleCAzNzcxNmUwNWU4Li5iYzNjMDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcGh5cC5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmMKQEAgLTYxMiwzICs2MTIsMTMgQEAKIAkJCQkgICAgICAgZXZlbnRfbWFzaywJCS8qIFI2ICovCiAJCQkJICAgICAgIDAsIDAsIDAsIDApOwkJLyogUjctUjEyICovCiB9CisKK3U2NCBlaGVhX2hfZXJyb3JfZGF0YShjb25zdCB1NjQgYWRhcHRlcl9oYW5kbGUsIGNvbnN0IHU2NCByZXNzb3VyY2VfaGFuZGxlLAorCQkgICAgICB2b2lkICpyYmxvY2spCit7CisJcmV0dXJuIGVoZWFfcGxwYXJfaGNhbGxfbm9yZXRzKEhfRVJST1JfREFUQSwKKwkJCQkgICAgICAgYWRhcHRlcl9oYW5kbGUsICAgICAgICAgIC8qIFI0ICovCisJCQkJICAgICAgIHJlc3NvdXJjZV9oYW5kbGUsICAgICAgICAvKiBSNSAqLworCQkJCSAgICAgICB2aXJ0X3RvX2FicyhyYmxvY2spLCAgICAgLyogUjYgKi8KKwkJCQkgICAgICAgMCwgMCwgMCwgMCk7ICAgICAgICAgICAgIC8qIFI3LVIxMiAqLworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuaCBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmgKaW5kZXggOTE5Zjk0Yi4uOTBhY2RkYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmgKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuaApAQCAtNDU0LDQgKzQ1NCw3IEBACiB1NjQgZWhlYV9oX3Jlc2V0X2V2ZW50cyhjb25zdCB1NjQgYWRhcHRlcl9oYW5kbGUsIGNvbnN0IHU2NCBuZXFfaGFuZGxlLAogCQkJY29uc3QgdTY0IGV2ZW50X21hc2spOwogCit1NjQgZWhlYV9oX2Vycm9yX2RhdGEoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLCBjb25zdCB1NjQgcmVzc291cmNlX2hhbmRsZSwKKwkJICAgICAgdm9pZCAqcmJsb2NrKTsKKwogI2VuZGlmCS8qIF9fRUhFQV9QSFlQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCmluZGV4IGYxNDNlMTMuLjk2ZmYzYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKQEAgLTQ4Niw2ICs0ODYsNyBAQAogCWlmICghcXApCiAJCXJldHVybiAwOwogCisJZWhlYV9oX2Rpc2FibGVfYW5kX2dldF9oZWEocXAtPmFkYXB0ZXItPmhhbmRsZSwgcXAtPmZ3X2hhbmRsZSk7CiAJaHJldCA9IGVoZWFfaF9mcmVlX3Jlc291cmNlKHFwLT5hZGFwdGVyLT5oYW5kbGUsIHFwLT5md19oYW5kbGUpOwogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewogCQllaGVhX2Vycm9yKCJkZXN0cm95X3FwIGZhaWxlZCIpOwpAQCAtNTgxLDQgKzU4Miw0NSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQgcHJpbnRfZXJyb3JfZGF0YSh1NjQgKmRhdGEpCit7CisJaW50IGxlbmd0aDsKKwl1NjQgdHlwZSA9IEVIRUFfQk1BU0tfR0VUKEVSUk9SX0RBVEFfVFlQRSwgZGF0YVsyXSk7CisJdTY0IHJlc291cmNlID0gZGF0YVsxXTsKIAorCWxlbmd0aCA9IEVIRUFfQk1BU0tfR0VUKEVSUk9SX0RBVEFfTEVOR1RILCBkYXRhWzBdKTsKKworCWlmIChsZW5ndGggPiBFSEVBX1BBR0VTSVpFKQorCQlsZW5ndGggPSBFSEVBX1BBR0VTSVpFOworCisJaWYgKHR5cGUgPT0gMHg4KSAvKiBRdWV1ZSBQYWlyICovCisJCWVoZWFfZXJyb3IoIlFQIChyZXNvdXJjZT0lbFgpIHN0YXRlOiBBRVI9MHglbFgsIEFFUlI9MHglbFgsICIKKwkJCSAgICJwb3J0PSVsWCIsIHJlc291cmNlLCBkYXRhWzZdLCBkYXRhWzEyXSwgZGF0YVsyMl0pOworCisJZWhlYV9kdW1wKGRhdGEsIGxlbmd0aCwgImVycm9yIGRhdGEiKTsKK30KKwordm9pZCBlaGVhX2Vycm9yX2RhdGEoc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciwgdTY0IHJlc19oYW5kbGUpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdTY0ICpyYmxvY2s7CisKKwlyYmxvY2sgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYmxvY2spIHsKKwkJZWhlYV9lcnJvcigiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBlaGVhX2hfZXJyb3JfZGF0YShhZGFwdGVyLT5oYW5kbGUsCisJCQkJcmVzX2hhbmRsZSwKKwkJCQlyYmxvY2spOworCisJaWYgKHJldCA9PSBIX1JfU1RBVEUpCisJCWVoZWFfZXJyb3IoIk5vIGVycm9yIGRhdGEgaXMgYXZhaWxhYmxlOiAlbFguIiwgcmVzX2hhbmRsZSk7CisJZWxzZSBpZiAocmV0ID09IEhfU1VDQ0VTUykKKwkJcHJpbnRfZXJyb3JfZGF0YShyYmxvY2spOworCWVsc2UKKwkJZWhlYV9lcnJvcigiRXJyb3IgZGF0YSBjb3VsZCBub3QgYmUgZmV0Y2hlZDogJWxYIiwgcmVzX2hhbmRsZSk7CisKKwlrZnJlZShyYmxvY2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5oIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5oCmluZGV4IDdlZmRjOTYuLjFmZjYwOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuaAorKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmgKQEAgLTE4MCw2ICsxODAsOSBAQAogCXU2NCBlbnRyeTsKIH07CiAKKyNkZWZpbmUgRVJST1JfREFUQV9MRU5HVEggIEVIRUFfQk1BU0tfSUJNKDUyLDYzKQorI2RlZmluZSBFUlJPUl9EQVRBX1RZUEUgICAgRUhFQV9CTUFTS19JQk0oMCw3KQorCiBzdGF0aWMgaW5saW5lIHZvaWQgKmh3X3FlaXRfY2FsYyhzdHJ1Y3QgaHdfcXVldWUgKnF1ZXVlLCB1NjQgcV9vZmZzZXQpCiB7CiAJc3RydWN0IGVoZWFfcGFnZSAqY3VycmVudF9wYWdlOwpAQCAtMzU1LDQgKzM1OCw2IEBACiAKIGludCBlaGVhX3JlZ19tcl9hZGFwdGVyKHN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCit2b2lkIGVoZWFfZXJyb3JfZGF0YShzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyLCB1NjQgcmVzX2hhbmRsZSk7CisKICNlbmRpZgkvKiBfX0VIRUFfUU1SX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDFiZTRhODQuLjFmODM5ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTEwLDYgKzEwLDcgQEAKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTYxMiw3MSArMTYxMywxNyBAQAogCS8qIFNhdmUgaWV2ZW50IGZvciBmdXR1cmUgcmVmZXJlbmNlICovCiAJdTMyIGV2ZW50cyA9IGdmYXJfcmVhZCgmcHJpdi0+cmVncy0+aWV2ZW50KTsKIAotCS8qIENsZWFyIElFVkVOVCAqLwotCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmlldmVudCwgZXZlbnRzKTsKLQogCS8qIENoZWNrIGZvciByZWNlcHRpb24gKi8KLQlpZiAoKGV2ZW50cyAmIElFVkVOVF9SWEYwKSB8fCAoZXZlbnRzICYgSUVWRU5UX1JYQjApKQorCWlmIChldmVudHMgJiBJRVZFTlRfUlhfTUFTSykKIAkJZ2Zhcl9yZWNlaXZlKGlycSwgZGV2X2lkKTsKIAogCS8qIENoZWNrIGZvciB0cmFuc21pdCBjb21wbGV0aW9uICovCi0JaWYgKChldmVudHMgJiBJRVZFTlRfVFhGKSB8fCAoZXZlbnRzICYgSUVWRU5UX1RYQikpCisJaWYgKGV2ZW50cyAmIElFVkVOVF9UWF9NQVNLKQogCQlnZmFyX3RyYW5zbWl0KGlycSwgZGV2X2lkKTsKIAotCS8qIFVwZGF0ZSBlcnJvciBzdGF0aXN0aWNzICovCi0JaWYgKGV2ZW50cyAmIElFVkVOVF9UWEUpIHsKLQkJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7Ci0KLQkJaWYgKGV2ZW50cyAmIElFVkVOVF9MQykKLQkJCXByaXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKLQkJaWYgKGV2ZW50cyAmIElFVkVOVF9DUkwpCi0JCQlwcml2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwotCQlpZiAoZXZlbnRzICYgSUVWRU5UX1hGVU4pIHsKLQkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKHByaXYpKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0eCB1bmRlcnJ1bi4gZHJvcHBlZCBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQlwcml2LT5leHRyYV9zdGF0cy50eF91bmRlcnJ1bisrOwotCi0JCQkvKiBSZWFjdGl2YXRlIHRoZSBUeCBRdWV1ZXMgKi8KLQkJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnRzdGF0LCBUU1RBVF9DTEVBUl9USEFMVCk7Ci0JCX0KLQl9Ci0JaWYgKGV2ZW50cyAmIElFVkVOVF9CU1kpIHsKLQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCXByaXYtPmV4dHJhX3N0YXRzLnJ4X2JzeSsrOwotCi0JCWdmYXJfcmVjZWl2ZShpcnEsIGRldl9pZCk7Ci0KLSNpZm5kZWYgQ09ORklHX0dGQVJfTkFQSQotCQkvKiBDbGVhciB0aGUgaGFsdCBiaXQgaW4gUlNUQVQgKi8KLQkJZ2Zhcl93cml0ZSgmcHJpdi0+cmVncy0+cnN0YXQsIFJTVEFUX0NMRUFSX1JIQUxUKTsKLSNlbmRpZgotCi0JCWlmIChuZXRpZl9tc2dfcnhfZXJyKHByaXYpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBidXN5IGVycm9yIChyaGFsdDogJXgpXG4iLAotCQkJCQlkZXYtPm5hbWUsCi0JCQkJCWdmYXJfcmVhZCgmcHJpdi0+cmVncy0+cnN0YXQpKTsKLQl9Ci0JaWYgKGV2ZW50cyAmIElFVkVOVF9CQUJSKSB7Ci0JCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQlwcml2LT5leHRyYV9zdGF0cy5yeF9iYWJyKys7Ci0KLQkJaWYgKG5ldGlmX21zZ19yeF9lcnIocHJpdikpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJhYmJsaW5nIGVycm9yXG4iLCBkZXYtPm5hbWUpOwotCX0KLQlpZiAoZXZlbnRzICYgSUVWRU5UX0VCRVJSKSB7Ci0JCXByaXYtPmV4dHJhX3N0YXRzLmViZXJyKys7Ci0JCWlmIChuZXRpZl9tc2dfcnhfZXJyKHByaXYpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBFQkVSUlxuIiwgZGV2LT5uYW1lKTsKLQl9Ci0JaWYgKChldmVudHMgJiBJRVZFTlRfUlhDKSAmJiAobmV0aWZfbXNnX3J4X2Vycihwcml2KSkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGNvbnRyb2wgZnJhbWVcbiIsIGRldi0+bmFtZSk7Ci0KLQlpZiAoZXZlbnRzICYgSUVWRU5UX0JBQlQpIHsKLQkJcHJpdi0+ZXh0cmFfc3RhdHMudHhfYmFidCsrOwotCQlpZiAobmV0aWZfbXNnX3J4X2Vycihwcml2KSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmFidCBlcnJvclxuIiwgZGV2LT5uYW1lKTsKLQl9CisJLyogQ2hlY2sgZm9yIGVycm9ycyAqLworCWlmIChldmVudHMgJiBJRVZFTlRfRVJSX01BU0spCisJCWdmYXJfZXJyb3IoaXJxLCBkZXZfaWQpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTkzOCw3ICsxODg1LDcgQEAKIAkvKiBIbW0uLi4gKi8KIAlpZiAobmV0aWZfbXNnX3J4X2Vycihwcml2KSB8fCBuZXRpZl9tc2dfdHhfZXJyKHByaXYpKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVycm9yIGludGVycnVwdCAoaWV2ZW50PTB4JTA4eCBpbWFzaz0weCUwOHgpXG4iLAotCQkJCWRldi0+bmFtZSwgZXZlbnRzLCBnZmFyX3JlYWQoJnByaXYtPnJlZ3MtPmltYXNrKSk7CisJCSAgICAgICBkZXYtPm5hbWUsIGV2ZW50cywgZ2Zhcl9yZWFkKCZwcml2LT5yZWdzLT5pbWFzaykpOwogCiAJLyogVXBkYXRlIHRoZSBlcnJvciBjb3VudGVycyAqLwogCWlmIChldmVudHMgJiBJRVZFTlRfVFhFKSB7CkBAIC0xOTUwLDggKzE4OTcsOCBAQAogCQkJcHJpdi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJaWYgKGV2ZW50cyAmIElFVkVOVF9YRlVOKSB7CiAJCQlpZiAobmV0aWZfbXNnX3R4X2Vycihwcml2KSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVuZGVycnVuLiAgcGFja2V0IGRyb3BwZWQuXG4iLAotCQkJCQkJZGV2LT5uYW1lKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRYIEZJRk8gdW5kZXJydW4sICIKKwkJCQkgICAgICAgInBhY2tldCBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lKTsKIAkJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCXByaXYtPmV4dHJhX3N0YXRzLnR4X3VuZGVycnVuKys7CiAKQEAgLTE5NzMsMzAgKzE5MjAsMjggQEAKICNlbmRpZgogCiAJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHByaXYpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBidXN5IGVycm9yIChyaGFsdDogJXgpXG4iLAotCQkJCQlkZXYtPm5hbWUsCi0JCQkJCWdmYXJfcmVhZCgmcHJpdi0+cmVncy0+cnN0YXQpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYnVzeSBlcnJvciAocnN0YXQ6ICV4KVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGdmYXJfcmVhZCgmcHJpdi0+cmVncy0+cnN0YXQpKTsKIAl9CiAJaWYgKGV2ZW50cyAmIElFVkVOVF9CQUJSKSB7CiAJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlwcml2LT5leHRyYV9zdGF0cy5yeF9iYWJyKys7CiAKIAkJaWYgKG5ldGlmX21zZ19yeF9lcnIocHJpdikpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJhYmJsaW5nIGVycm9yXG4iLCBkZXYtPm5hbWUpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiYWJibGluZyBSWCBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIAl9CiAJaWYgKGV2ZW50cyAmIElFVkVOVF9FQkVSUikgewogCQlwcml2LT5leHRyYV9zdGF0cy5lYmVycisrOwogCQlpZiAobmV0aWZfbXNnX3J4X2Vycihwcml2KSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRUJFUlJcbiIsIGRldi0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJ1cyBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIAl9CiAJaWYgKChldmVudHMgJiBJRVZFTlRfUlhDKSAmJiBuZXRpZl9tc2dfcnhfc3RhdHVzKHByaXYpKQotCQlpZiAobmV0aWZfbXNnX3J4X3N0YXR1cyhwcml2KSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogY29udHJvbCBmcmFtZVxuIiwgZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjb250cm9sIGZyYW1lXG4iLCBkZXYtPm5hbWUpOwogCiAJaWYgKGV2ZW50cyAmIElFVkVOVF9CQUJUKSB7CiAJCXByaXYtPmV4dHJhX3N0YXRzLnR4X2JhYnQrKzsKIAkJaWYgKG5ldGlmX21zZ190eF9lcnIocHJpdikpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJhYnQgZXJyb3JcbiIsIGRldi0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJhYmJsaW5nIFRYIGVycm9yXG4iLCBkZXYtPm5hbWUpOwogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKaW5kZXggNDVmZmI1ZC4uYWVjOWFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYwpAQCAtMzgsMTMgKzM4LDE1IEBACiAjaW5jbHVkZSAiZ2lhbmZhci5oIgogCiAjZGVmaW5lIEdGQVJfQVRUUihfbmFtZSkgXAotc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93XyMjX25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKTsgXAotc3RhdGljIHNzaXplX3QgZ2Zhcl9zZXRfIyNfbmFtZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBcCitzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfIyNfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7IFwKK3N0YXRpYyBzc2l6ZV90IGdmYXJfc2V0XyMjX25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCiAJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsgXAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKF9uYW1lLCAwNjQ0LCBnZmFyX3Nob3dfIyNfbmFtZSwgZ2Zhcl9zZXRfIyNfbmFtZSkKK3N0YXRpYyBERVZJQ0VfQVRUUihfbmFtZSwgMDY0NCwgZ2Zhcl9zaG93XyMjX25hbWUsIGdmYXJfc2V0XyMjX25hbWUpCiAKICNkZWZpbmUgR0ZBUl9DUkVBVEVfRklMRShfZGV2LCBfbmFtZSkgXAotCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmX2Rldi0+Y2xhc3NfZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfIyNfbmFtZSkKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJl9kZXYtPmRldiwgJmRldl9hdHRyXyMjX25hbWUpCiAKIEdGQVJfQVRUUihiZF9zdGFzaCk7CiBHRkFSX0FUVFIocnhfc3Rhc2hfc2l6ZSk7CkBAIC01MywyOSArNTUsMjggQEAKIEdGQVJfQVRUUihmaWZvX3N0YXJ2ZSk7CiBHRkFSX0FUVFIoZmlmb19zdGFydmVfb2ZmKTsKIAotI2RlZmluZSB0b19uZXRfZGV2KGNkKSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCBuZXRfZGV2aWNlLCBjbGFzc19kZXYpCi0KLXN0YXRpYyBzc2l6ZV90IGdmYXJfc2hvd19iZF9zdGFzaChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfYmRfc3Rhc2goc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihjZGV2KTsKLQlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBwcml2LT5iZF9zdGFzaF9lbj8gIm9uIiA6ICJvZmYiKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcHJpdi0+YmRfc3Rhc2hfZW4gPyAib24iIDogIm9mZiIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBnZmFyX3NldF9iZF9zdGFzaChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LAotCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IGdmYXJfc2V0X2JkX3N0YXNoKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGNkZXYpOwotCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOwogCWludCBuZXdfc2V0dGluZyA9IDA7CiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIEZpbmQgb3V0IHRoZSBuZXcgc2V0dGluZyAqLwotCWlmICghc3RybmNtcCgib24iLCBidWYsIGNvdW50LTEpIHx8ICFzdHJuY21wKCIxIiwgYnVmLCBjb3VudC0xKSkKKwlpZiAoIXN0cm5jbXAoIm9uIiwgYnVmLCBjb3VudCAtIDEpIHx8ICFzdHJuY21wKCIxIiwgYnVmLCBjb3VudCAtIDEpKQogCQluZXdfc2V0dGluZyA9IDE7Ci0JZWxzZSBpZiAoIXN0cm5jbXAoIm9mZiIsIGJ1ZiwgY291bnQtMSkgfHwgIXN0cm5jbXAoIjAiLCBidWYsIGNvdW50LTEpKQorCWVsc2UgaWYgKCFzdHJuY21wKCJvZmYiLCBidWYsIGNvdW50IC0gMSkKKwkJIHx8ICFzdHJuY21wKCIwIiwgYnVmLCBjb3VudCAtIDEpKQogCQluZXdfc2V0dGluZyA9IDA7CiAJZWxzZQogCQlyZXR1cm4gY291bnQ7CkBAIC05OSwxOSArMTAwLDE5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfcnhfc3Rhc2hfc2l6ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfcnhfc3Rhc2hfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRvX25ldF9kZXYoY2Rldik7Ci0Jc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+cnhfc3Rhc2hfc2l6ZSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGdmYXJfc2V0X3J4X3N0YXNoX3NpemUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBnZmFyX3NldF9yeF9zdGFzaF9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihjZGV2KTsKLQlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKIAl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAl1MzIgdGVtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTQ1LDIxICsxNDYsMjEgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLQogLyogU3Rhc2hpbmcgd2lsbCBvbmx5IGJlIGVuYWJsZWQgd2hlbiByeF9zdGFzaF9zaXplICE9IDAgKi8KLXN0YXRpYyBzc2l6ZV90IGdmYXJfc2hvd19yeF9zdGFzaF9pbmRleChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfcnhfc3Rhc2hfaW5kZXgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGNkZXYpOwotCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPnJ4X3N0YXNoX2luZGV4KTsKIH0KIAotc3RhdGljIHNzaXplX3QgZ2Zhcl9zZXRfcnhfc3Rhc2hfaW5kZXgoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBnZmFyX3NldF9yeF9zdGFzaF9pbmRleChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihjZGV2KTsKLQlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKIAl1bnNpZ25lZCBzaG9ydCBpbmRleCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE4MywxOSArMTg0LDIwIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfZmlmb190aHJlc2hvbGQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X2ZpZm9fdGhyZXNob2xkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihjZGV2KTsKLQlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT5maWZvX3RocmVzaG9sZCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGdmYXJfc2V0X2ZpZm9fdGhyZXNob2xkKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsCi0JCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgZ2Zhcl9zZXRfZmlmb190aHJlc2hvbGQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRvX25ldF9kZXYoY2Rldik7Ci0Jc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CiAJdW5zaWduZWQgaW50IGxlbmd0aCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIxNywyMCArMjE5LDE5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfZmlmb19zdGFydmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRvX25ldF9kZXYoY2Rldik7Ci0Jc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+Zmlmb19zdGFydmUpOwogfQogCi0KLXN0YXRpYyBzc2l6ZV90IGdmYXJfc2V0X2ZpZm9fc3RhcnZlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsCi0JCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgZ2Zhcl9zZXRfZmlmb19zdGFydmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRvX25ldF9kZXYoY2Rldik7Ci0Jc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CiAJdW5zaWduZWQgaW50IG51bSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI1MiwxOSArMjUzLDIwIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfZmlmb19zdGFydmVfb2ZmKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGdmYXJfc2hvd19maWZvX3N0YXJ2ZV9vZmYoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRvX25ldF9kZXYoY2Rldik7Ci0Jc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+Zmlmb19zdGFydmVfb2ZmKTsKIH0KIAotc3RhdGljIHNzaXplX3QgZ2Zhcl9zZXRfZmlmb19zdGFydmVfb2ZmKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsCi0JCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgZ2Zhcl9zZXRfZmlmb19zdGFydmVfb2ZmKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGNkZXYpOwotCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOwogCXVuc2lnbmVkIGludCBudW0gPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vS2NvbmZpZwppbmRleCBmZWIwYWRhLi42ZTkwNjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL0tjb25maWcKQEAgLTEzOCw3ICsxMzgsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgb25lIG9mIHR3byBkcml2ZXJzIGZvciBCYXljb20gc3R5bGUgc2ltcGxlIGFtYXRldXIgcmFkaW8KIAkgIG1vZGVtcyB0aGF0IGNvbm5lY3QgdG8gYSBzZXJpYWwgaW50ZXJmYWNlLiBUaGUgZHJpdmVyIHN1cHBvcnRzIHRoZQotCSAgc2VyMTIgZGVzaWduIGluIGZ1bGwtZHVwbGV4IG1vZGUuIFRoaXMgaXMgdGhlIG9sZCBkcml2ZXIuICBJdCBpcworCSAgc2VyMTIgZGVzaWduIGluIGhhbGYtZHVwbGV4IG1vZGUuIFRoaXMgaXMgdGhlIG9sZCBkcml2ZXIuICBJdCBpcwogCSAgc3RpbGwgcHJvdmlkZWQgaW4gY2FzZSB5b3VyIHNlcmlhbCBpbnRlcmZhY2UgY2hpcCBkb2VzIG5vdCB3b3JrIHdpdGgKIAkgIHRoZSBmdWxsLWR1cGxleCBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2lhdGVkLiAgVG8gY29uZmlndXJlCiAJICB0aGUgZHJpdmVyLCB1c2UgdGhlIHNldGhkbGMgdXRpbGl0eSBhdmFpbGFibGUgaW4gdGhlIHN0YW5kYXJkIGF4MjUKQEAgLTE5MCwzICsxOTAsNCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgeWFtLgogCisgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKaW5kZXggMTUzYjZkYy4uODRhYTIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hkbGNkcnYuaD4KICNpbmNsdWRlIDxsaW51eC9iYXljb20uaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bmV0L2F4MjUuaD4gCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNDMzLDE2ICs0MzQsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCByYW5kb21fc2VlZDsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByYW5kb21fbnVtKHZvaWQpCi17Ci0JcmFuZG9tX3NlZWQgPSAyODYyOSAqIHJhbmRvbV9zZWVkICsgMTU3OwotCXJldHVybiByYW5kb21fc2VlZDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0aWMgaW50IHRyYW5zbWl0KHN0cnVjdCBiYXljb21fc3RhdGUgKmJjLCBpbnQgY250LCB1bnNpZ25lZCBjaGFyIHN0YXQpCiB7CiAJc3RydWN0IHBhcnBvcnQgKnBwID0gYmMtPnBkZXYtPnBvcnQ7CkBAIC00NjQsNyArNDU1LDcgQEAKIAkJCWlmICgoLS1iYy0+aGRsY3R4LnNsb3RjbnQpID4gMCkKIAkJCQlyZXR1cm4gMDsKIAkJCWJjLT5oZGxjdHguc2xvdGNudCA9IGJjLT5jaF9wYXJhbXMuc2xvdHRpbWU7Ci0JCQlpZiAoKHJhbmRvbV9udW0oKSAlIDI1NikgPiBiYy0+Y2hfcGFyYW1zLnBwZXJzaXN0KQorCQkJaWYgKChyYW5kb20zMigpICUgMjU2KSA+IGJjLT5jaF9wYXJhbXMucHBlcnNpc3QpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKaW5kZXggNDUyODczZS4uZjVhMTdhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2hkbGNkcnYuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxuZXQvYXgyNS5oPiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0zNzEsMTYgKzM3Miw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJhbmRvbV9zZWVkOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHJhbmRvbV9udW0odm9pZCkKLXsKLQlyYW5kb21fc2VlZCA9IDI4NjI5ICogcmFuZG9tX3NlZWQgKyAxNTc7Ci0JcmV0dXJuIHJhbmRvbV9zZWVkOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHZvaWQgaGRsY2Rydl9hcmJpdHJhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGhkbGNkcnZfc3RhdGUgKnMpCiB7CiAJaWYgKCFzIHx8IHMtPm1hZ2ljICE9IEhETENEUlZfTUFHSUMgfHwgcy0+aGRsY3R4LnB0dCB8fCAhcy0+c2tiKSAKQEAgLTM5Niw3ICszODcsNyBAQAogCWlmICgoLS1zLT5oZGxjdHguc2xvdGNudCkgPiAwKQogCQlyZXR1cm47CiAJcy0+aGRsY3R4LnNsb3RjbnQgPSBzLT5jaF9wYXJhbXMuc2xvdHRpbWU7Ci0JaWYgKChyYW5kb21fbnVtKCkgJSAyNTYpID4gcy0+Y2hfcGFyYW1zLnBwZXJzaXN0KQorCWlmICgocmFuZG9tMzIoKSAlIDI1NikgPiBzLT5jaF9wYXJhbXMucHBlcnNpc3QpCiAJCXJldHVybjsKIAlzdGFydF90eChkZXYsIHMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwppbmRleCAwOGYyNzExLi5lZTNlYTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTU2NiwxNCArNTY3LDYgQEAKIAlwdHRfb24oZGV2KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJhbmRvbV9zZWVkOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHJhbmRvbV9udW0odm9pZCkKLXsKLQlyYW5kb21fc2VlZCA9IDI4NjI5ICogcmFuZG9tX3NlZWQgKyAxNTc7Ci0JcmV0dXJuIHJhbmRvbV9zZWVkOwotfQotCiBzdGF0aWMgdm9pZCB5YW1fYXJiaXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHlhbV9wb3J0ICp5cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC02MDAsNyArNTkzLDcgQEAKIAl5cC0+c2xvdGNudCA9IHlwLT5zbG90IC8gMTA7CiAKIAkvKiBpcyByYW5kb20gPiBwZXJzaXN0ID8gKi8KLQlpZiAoKHJhbmRvbV9udW0oKSAlIDI1NikgPiB5cC0+cGVycykKKwlpZiAoKHJhbmRvbTMyKCkgJSAyNTYpID4geXAtPnBlcnMpCiAJCXJldHVybjsKIAogCXlhbV9zdGFydF90eChkZXYsIHlwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCmluZGV4IGYwZDMwY2YuLjRhZDc4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwpAQCAtODM2LDEzICs4MzYsMTcgQEAKIAl9CiAKIAlpcC0+bWlpLnBoeV9pZCA9IGk7CisKK291dDoKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBpb2MzX21paV9zdGFydChzdHJ1Y3QgaW9jM19wcml2YXRlICppcCkKK3sKIAlpcC0+aW9jM190aW1lci5leHBpcmVzID0gamlmZmllcyArICgxMiAqIEhaKS8xMDsgIC8qIDEuMiBzZWMuICovCiAJaXAtPmlvYzNfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBpcDsKIAlpcC0+aW9jM190aW1lci5mdW5jdGlvbiA9ICZpb2MzX3RpbWVyOwogCWFkZF90aW1lcigmaXAtPmlvYzNfdGltZXIpOwotCi1vdXQ6Ci0JcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGlvYzNfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgaW9jM19wcml2YXRlICppcCkKQEAgLTEwNzEsNiArMTA3NSw3IEBACiAJaXAtPmVoYXJfaCA9IDA7CiAJaXAtPmVoYXJfbCA9IDA7CiAJaW9jM19pbml0KGRldik7CisJaW9jM19taWlfc3RhcnQoaXApOwogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAlyZXR1cm4gMDsKQEAgLTEyNzQsNiArMTI3OSw3IEBACiAJCWdvdG8gb3V0X3N0b3A7CiAJfQogCisJaW9jM19taWlfc3RhcnQoaXApOwogCWlvYzNfc3NyYW1fZGlzYyhpcCk7CiAJaW9jM19nZXRfZWFkZHIoaXApOwogCkBAIC0xMzE0LDYgKzEzMjAsNyBAQAogCiBvdXRfc3RvcDoKIAlpb2MzX3N0b3AoaXApOworCWRlbF90aW1lcl9zeW5jKCZpcC0+aW9jM190aW1lcik7CiAJaW9jM19mcmVlX3JpbmdzKGlwKTsKIG91dF9yZXM6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKQEAgLTEzMzUsNiArMTM0Miw4IEBACiAJc3RydWN0IGlvYzMgKmlvYzMgPSBpcC0+cmVnczsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJZGVsX3RpbWVyX3N5bmMoJmlwLT5pb2MzX3RpbWVyKTsKKwogCWlvdW5tYXAoaW9jMyk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlmcmVlX25ldGRldihkZXYpOwpAQCAtMTQ5Miw2ICsxNTAxLDcgQEAKIAlpb2MzX3N0b3AoaXApOwogCWlvYzNfaW5pdChkZXYpOwogCWlvYzNfbWlpX2luaXQoaXApOworCWlvYzNfbWlpX3N0YXJ0KGlwKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmaXAtPmlvYzNfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCBhNDE0MThiLi4yZTk1NzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC04ODEsMjcgKzg4MSwxNSBAQAogc3RhdGljIGludCBtYWNiX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOwotCXJldCA9IG1paV9ldGh0b29sX2dzZXQoJmJwLT5taWksIGNtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIG1paV9ldGh0b29sX2dzZXQoJmJwLT5taWksIGNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgbWFjYl9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKLQlyZXQgPSBtaWlfZXRodG9vbF9zc2V0KCZicC0+bWlpLCBjbWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBtaWlfZXRodG9vbF9zc2V0KCZicC0+bWlpLCBjbWQpOwogfQogCiBzdGF0aWMgdm9pZCBtYWNiX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCkBAIC05MzAsMTcgKzkxOCwxMSBAQAogc3RhdGljIGludCBtYWNiX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7CiAJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKLQlyZXQgPSBnZW5lcmljX21paV9pb2N0bCgmYnAtPm1paSwgaWZfbWlpKHJxKSwgY21kLCBOVUxMKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmJwLT5taWksIGlmX21paShycSksIGNtZCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1hY2JfbWlpX3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqX2RldiwgY2hhciAqYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWV0aC5jIGIvZHJpdmVycy9uZXQvbWV0aC5jCmluZGV4IGQzOGI3YzcuLjdlNjljYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21ldGguYworKysgYi9kcml2ZXJzL25ldC9tZXRoLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCiBzdGF0aWMgdm9pZCBtZXRoX2NoZWNrX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gKHN0cnVjdCBtZXRoX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBtZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgbWlpX2FkdmVydGlzaW5nID0gbWRpb19yZWFkKHByaXYsIDQpOwogCXVuc2lnbmVkIGxvbmcgbWlpX3BhcnRuZXIgPSBtZGlvX3JlYWQocHJpdiwgNSk7CiAJdW5zaWduZWQgbG9uZyBuZWdvdGlhdGVkID0gbWlpX2FkdmVydGlzaW5nICYgbWlpX3BhcnRuZXI7CkBAIC0yNjgsNyArMjY4LDcgQEAKIAogaW50IG1ldGhfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gKHN0cnVjdCBtZXRoX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBtZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogUmVzZXQgY2FyZCAqLwogCW1hY2UtPmV0aC5tYWNfY3RybCA9IFNHSV9NQUNfUkVTRVQ7CkBAIC0zMTAsNyArMzEwLDcgQEAKICAqLwogc3RhdGljIGludCBtZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBtZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXQ7CiAKIAlwcml2LT5waHlfYWRkciA9IC0xOyAgICAvKiBObyBQSFkgaXMga25vd24geWV0Li4uICovCkBAIC0zNTQsNyArMzU0LDcgQEAKIAogc3RhdGljIGludCBtZXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBtZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJRFBSSU5USygiU3RvcHBpbmcgcXVldWVcbiIpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsgLyogY2FuJ3QgdHJhbnNtaXQgYW55IG1vcmUgKi8KQEAgLTM3Niw3ICszNzYsNyBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXM7Ci0Jc3RydWN0IG1ldGhfcHJpdmF0ZSAqcHJpdiA9IChzdHJ1Y3QgbWV0aF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZpZm9fcnB0ciA9IChpbnRfc3RhdHVzICYgTUVUSF9JTlRfUlhfUlBUUl9NQVNLKSA+PiA4OwogCiAJc3Bpbl9sb2NrKCZwcml2LT5tZXRoX2xvY2spOwpAQCAtNDY2LDE0ICs0NjYsMTQgQEAKIAogc3RhdGljIGludCBtZXRoX3R4X2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gKHN0cnVjdCBtZXRoX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBtZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJcmV0dXJuIChwcml2LT50eF9jb3VudCA+PSBUWF9SSU5HX0VOVFJJRVMgLSAxKTsKIH0KIAogc3RhdGljIHZvaWQgbWV0aF90eF9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHVuc2lnbmVkIGxvbmcgaW50X3N0YXR1cykKIHsKLQlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBtZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgbG9uZyBycHRyID0gKGludF9zdGF0dXMmVFhfSU5GT19SUFRSKSA+PiAxNjsKQEAgLTUzNiw3ICs1MzYsNyBAQAogCiBzdGF0aWMgdm9pZCBtZXRoX2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHVuc2lnbmVkIHN0YXR1cykKIHsKLQlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gKHN0cnVjdCBtZXRoX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBtZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJcHJpbnRrKEtFUk5fV0FSTklORyAibWV0aDogZXJyb3Igc3RhdHVzOiAweCUwOHhcbiIsc3RhdHVzKTsKIAkvKiBjaGVjayBmb3IgZXJyb3JzIHRvby4uLiAqLwpAQCAtNTcwLDcgKzU3MCw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgbWV0aF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7Ci0Jc3RydWN0IG1ldGhfcHJpdmF0ZSAqcHJpdiA9IChzdHJ1Y3QgbWV0aF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIHN0YXR1czsKIAogCXN0YXR1cyA9IG1hY2UtPmV0aC5pbnRfc3RhdDsKQEAgLTY5NSw3ICs2OTUsNyBAQAogICovCiBzdGF0aWMgaW50IG1ldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gKHN0cnVjdCBtZXRoX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBtZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bWV0aF9sb2NrLCBmbGFncyk7CkBAIC03MjYsNyArNzI2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgbWV0aF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1ldGhfcHJpdmF0ZSAqcHJpdiA9IChzdHJ1Y3QgbWV0aF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dFxuIiwgZGV2LT5uYW1lKTsKQEAgLTc3OCw3ICs3NzgsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm1ldGhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2ID0gKHN0cnVjdCBtZXRoX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBtZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXJldHVybiAmcHJpdi0+c3RhdHM7CiB9CiAKQEAgLTgwNyw3ICs4MDcsNyBAQAogCWRldi0+aXJxCSAgICAgPSBNQUNFX0VUSEVSTkVUX0lSUTsKIAlkZXYtPmJhc2VfYWRkcgkgICAgID0gKHVuc2lnbmVkIGxvbmcpJm1hY2UtPmV0aDsKIAotCXByaXYgPSAoc3RydWN0IG1ldGhfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPm1ldGhfbG9jayk7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCBmZmEwYWZkLi5hZGYyOWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC0yNDQsNiArMjQ0LDkgQEAKIAlNSUlfRU5fU0NSTQk9IDB4MDAwNCwJLyogZW5hYmxlIHNjcmFtYmxlciAodHApICovCiB9OwogCitlbnVtIHsKKwlOQVRTRU1JX0ZMQUdfSUdOT1JFX1BIWQkJPSAweDEsCit9OwogCiAvKiBhcnJheSBvZiBib2FyZCBkYXRhIGRpcmVjdGx5IGluZGV4ZWQgYnkgcGNpX3RibFt4XS5kcml2ZXJfZGF0YSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB7CkBAIC0yNTEsMTAgKzI1NCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGVlcHJvbV9zaXplOwogfSBuYXRzZW1pX3BjaV9pbmZvW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7ICJBY3VsYWIgRTEvVDEgUE1YYyBjUENJIGNhcnJpZXIgY2FyZCIsIE5BVFNFTUlfRkxBR19JR05PUkVfUEhZLCAxMjggfSwKIAl7ICJOYXRTZW1pIERQODM4MVs1Nl0iLCAwLCAyNCB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5hdHNlbWlfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfVkVORE9SX0lEX05TLCAweDAwMjAsIDB4MTJkOSwgICAgIDB4MDAwYywgICAgIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfTlMsIDB4MDAyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKQEAgLTU2OCw2ICs1NzMsOCBAQAogCXUzMiBpbnRyX3N0YXR1czsKIAkvKiBEbyBub3QgdG91Y2ggdGhlIG5pYyByZWdpc3RlcnMgKi8KIAlpbnQgaGFuZHNfb2ZmOworCS8qIERvbid0IHBheSBhdHRlbnRpb24gdG8gdGhlIHJlcG9ydGVkIGxpbmsgc3RhdGUuICovCisJaW50IGlnbm9yZV9waHk7CiAJLyogZXh0ZXJuYWwgcGh5IHRoYXQgaXMgdXNlZDogb25seSB2YWxpZCBpZiBkZXYtPmlmX3BvcnQgIT0gUE9SVF9UUCAqLwogCWludCBtaWk7CiAJaW50IHBoeV9hZGRyX2V4dGVybmFsOwpAQCAtNjk2LDcgKzcwMywxMCBAQAogCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiB0bXA7CiAKLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCWlmIChucC0+aWdub3JlX3BoeSkKKwkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCWVsc2UKKwkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAogCS8qIGdldCB0aGUgaW5pdGlhbCBzZXR0aW5ncyBmcm9tIGhhcmR3YXJlICovCiAJdG1wICAgICAgICAgICAgPSBtZGlvX3JlYWQoZGV2LCBNSUlfQk1DUik7CkBAIC04MDYsOCArODE2LDEzIEBACiAJbnAtPmhhbmRzX29mZiA9IDA7CiAJbnAtPmludHJfc3RhdHVzID0gMDsKIAlucC0+ZWVwcm9tX3NpemUgPSBuYXRzZW1pX3BjaV9pbmZvW2NoaXBfaWR4XS5lZXByb21fc2l6ZTsKKwlpZiAobmF0c2VtaV9wY2lfaW5mb1tjaGlwX2lkeF0uZmxhZ3MgJiBOQVRTRU1JX0ZMQUdfSUdOT1JFX1BIWSkKKwkJbnAtPmlnbm9yZV9waHkgPSAxOworCWVsc2UKKwkJbnAtPmlnbm9yZV9waHkgPSAwOwogCiAJLyogSW5pdGlhbCBwb3J0OgorCSAqIC0gSWYgY29uZmlndXJlZCB0byBpZ25vcmUgdGhlIFBIWSBzZXQgdXAgZm9yIGV4dGVybmFsLgogCSAqIC0gSWYgdGhlIG5pYyB3YXMgY29uZmlndXJlZCB0byB1c2UgYW4gZXh0ZXJuYWwgcGh5IGFuZCBpZiBmaW5kX21paQogCSAqICAgZmluZHMgYSBwaHk6IHVzZSBleHRlcm5hbCBwb3J0LCBmaXJzdCBwaHkgdGhhdCByZXBsaWVzLgogCSAqIC0gT3RoZXJ3aXNlOiBpbnRlcm5hbCBwb3J0LgpAQCAtODE1LDcgKzgzMCw3IEBACiAJICogVGhlIGFkZHJlc3Mgd291bGQgYmUgdXNlZCB0byBhY2Nlc3MgYSBwaHkgb3ZlciB0aGUgbWlpIGJ1cywgYnV0CiAJICogdGhlIGludGVybmFsIHBoeSBpcyBhY2Nlc3NlZCB0aHJvdWdoIG1hcHBlZCByZWdpc3RlcnMuCiAJICovCi0JaWYgKHJlYWRsKGlvYWRkciArIENoaXBDb25maWcpICYgQ2ZnRXh0UGh5KQorCWlmIChucC0+aWdub3JlX3BoeSB8fCByZWFkbChpb2FkZHIgKyBDaGlwQ29uZmlnKSAmIENmZ0V4dFBoeSkKIAkJZGV2LT5pZl9wb3J0ID0gUE9SVF9NSUk7CiAJZWxzZQogCQlkZXYtPmlmX3BvcnQgPSBQT1JUX1RQOwpAQCAtODI1LDcgKzg0MCw5IEBACiAKIAlpZiAoZGV2LT5pZl9wb3J0ICE9IFBPUlRfVFApIHsKIAkJbnAtPnBoeV9hZGRyX2V4dGVybmFsID0gZmluZF9taWkoZGV2KTsKLQkJaWYgKG5wLT5waHlfYWRkcl9leHRlcm5hbCA9PSBQSFlfQUREUl9OT05FKSB7CisJCS8qIElmIHdlJ3JlIGlnbm9yaW5nIHRoZSBQSFkgaXQgZG9lc24ndCBtYXR0ZXIgaWYgd2UgY2FuJ3QKKwkJICogZmluZCBvbmUuICovCisJCWlmICghbnAtPmlnbm9yZV9waHkgJiYgbnAtPnBoeV9hZGRyX2V4dGVybmFsID09IFBIWV9BRERSX05PTkUpIHsKIAkJCWRldi0+aWZfcG9ydCA9IFBPUlRfVFA7CiAJCQlucC0+cGh5X2FkZHJfZXh0ZXJuYWwgPSBQSFlfQUREUl9JTlRFUk5BTDsKIAkJfQpAQCAtODkxLDYgKzkwOCw4IEBACiAJCXByaW50aygiJTAyeCwgSVJRICVkIiwgZGV2LT5kZXZfYWRkcltpXSwgaXJxKTsKIAkJaWYgKGRldi0+aWZfcG9ydCA9PSBQT1JUX1RQKQogCQkJcHJpbnRrKCIsIHBvcnQgVFAuXG4iKTsKKwkJZWxzZSBpZiAobnAtPmlnbm9yZV9waHkpCisJCQlwcmludGsoIiwgcG9ydCBNSUksIGlnbm9yaW5nIFBIWVxuIik7CiAJCWVsc2UKIAkJCXByaW50aygiLCBwb3J0IE1JSSwgcGh5IGFkICVkLlxuIiwgbnAtPnBoeV9hZGRyX2V4dGVybmFsKTsKIAl9CkBAIC0xNTcxLDkgKzE1OTAsMTMgQEAKIHsKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKiBpb2FkZHIgPSBuc19pb2FkZHIoZGV2KTsKLQlpbnQgZHVwbGV4OworCWludCBkdXBsZXggPSBucC0+ZHVwbGV4OwogCXUxNiBibXNyOwogCisJLyogSWYgd2UgYXJlIGlnbm9yaW5nIHRoZSBQSFkgdGhlbiBkb24ndCB0cnkgcmVhZGluZyBpdC4gKi8KKwlpZiAobnAtPmlnbm9yZV9waHkpCisJCWdvdG8gcHJvcGFnYXRlX3N0YXRlOworCiAJLyogVGhlIGxpbmsgc3RhdHVzIGZpZWxkIGlzIGxhdGNoZWQ6IGl0IHJlbWFpbnMgbG93IGFmdGVyIGEgdGVtcG9yYXJ5CiAJICogbGluayBmYWlsdXJlIHVudGlsIGl0J3MgcmVhZC4gV2UgbmVlZCB0aGUgY3VycmVudCBsaW5rIHN0YXR1cywKIAkgKiB0aHVzIHJlYWQgdHdpY2UuCkBAIC0xNTg1LDcgKzE2MDgsNyBAQAogCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCQlpZiAobmV0aWZfbXNnX2xpbmsobnApKQogCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IGxpbmsgZG93bi5cbiIsCi0JCQkJCWRldi0+bmFtZSk7CisJCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCQkJdW5kb19jYWJsZV9tYWdpYyhkZXYpOwogCQl9CkBAIC0xNjA5LDYgKzE2MzIsNyBAQAogCQkJZHVwbGV4ID0gMTsKIAl9CiAKK3Byb3BhZ2F0ZV9zdGF0ZToKIAkvKiBpZiBkdXBsZXggaXMgc2V0IHRoZW4gYml0IDI4IG11c3QgYmUgc2V0LCB0b28gKi8KIAlpZiAoZHVwbGV4IF4gISEobnAtPnJ4X2NvbmZpZyAmIFJ4QWNjZXB0VHgpKSB7CiAJCWlmIChuZXRpZl9tc2dfbGluayhucCkpCkBAIC0yODE5LDYgKzI4NDMsMTUgQEAKIAl9CiAKIAkvKgorCSAqIElmIHdlJ3JlIGlnbm9yaW5nIHRoZSBQSFkgdGhlbiBhdXRvbmVnIGFuZCB0aGUgaW50ZXJuYWwKKwkgKiB0cmFuc2NpZXZlciBhcmUgcmVhbGx5IG5vdCBnb2luZyB0byB3b3JrIHNvIGRvbid0IGxldCB0aGUKKwkgKiB1c2VyIHNlbGVjdCB0aGVtLgorCSAqLworCWlmIChucC0+aWdub3JlX3BoeSAmJiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSB8fAorCQkJICAgICAgIGVjbWQtPnBvcnQgPT0gUE9SVF9UUCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKIAkgKiBtYXh0eHBrdCwgbWF4cnhwa3Q6IGlnbm9yZWQgZm9yIG5vdy4KIAkgKgogCSAqIHRyYW5zY2VpdmVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKaW5kZXggM2YzODk2ZS4uMjgwN2VmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCkBAIC0yNTIsNyArMjUyLDcgQEAKICNkZWZpbmUgbmV0eGVuX3NldF9tc2dfY3R4aWQoY29uZmlnX3dvcmQsIHZhbCkJXAogCSgoY29uZmlnX3dvcmQpICY9IH4oMHgzZmY8PDE4KSwgKGNvbmZpZ193b3JkKSB8PSAodmFsICYgMHgzZmYpIDw8IDE4KQogI2RlZmluZSBuZXR4ZW5fc2V0X21zZ19vcGNvZGUoY29uZmlnX3dvcmQsIHZhbCkJXAotCSgoY29uZmlnX3dvcmQpICY9IH4oMHhmPDwyNCksIChjb25maWdfd29yZCkgfD0gKHZhbCAmIDB4ZikgPDwgMjQpCisJKChjb25maWdfd29yZCkgJj0gfigweGY8PDI4KSwgKGNvbmZpZ193b3JkKSB8PSAodmFsICYgMHhmKSA8PCAyOCkKIAogc3RydWN0IG5ldHhlbl9yY3ZfY29udGV4dCB7CiAJX19sZTY0IHJjdl9yaW5nX2FkZHI7CkBAIC0zMDMsMTQgKzMwMywxNCBAQAogCShjbWRfZGVzYyktPmZsYWdzX29wY29kZSB8PSBjcHVfdG9fbGUxNigodmFsKSAmIDB4N2YpKQogI2RlZmluZSBuZXR4ZW5fc2V0X2NtZF9kZXNjX29wY29kZShjbWRfZGVzYywgdmFsKQlcCiAJKChjbWRfZGVzYyktPmZsYWdzX29wY29kZSAmPSB+Y3B1X3RvX2xlMTYoMHgzZjw8NyksIFwKLQkoY21kX2Rlc2MpLT5mbGFnc19vcGNvZGUgfD0gY3B1X3RvX2xlMTYoKHZhbCkgJiAoMHgzZjw8NykpKQorCShjbWRfZGVzYyktPmZsYWdzX29wY29kZSB8PSBjcHVfdG9fbGUxNigoKHZhbCAmIDB4M2YpPDw3KSkpCiAKICNkZWZpbmUgbmV0eGVuX3NldF9jbWRfZGVzY19udW1fb2ZfYnVmZihjbWRfZGVzYywgdmFsKQlcCiAJKChjbWRfZGVzYyktPm51bV9vZl9idWZmZXJzX3RvdGFsX2xlbmd0aCAmPSB+Y3B1X3RvX2xlMzIoMHhmZiksIFwKIAkoY21kX2Rlc2MpLT5udW1fb2ZfYnVmZmVyc190b3RhbF9sZW5ndGggfD0gY3B1X3RvX2xlMzIoKHZhbCkgJiAweGZmKSkKICNkZWZpbmUgbmV0eGVuX3NldF9jbWRfZGVzY190b3RhbGxlbmd0aChjbWRfZGVzYywgdmFsKQlcCi0JKChjbWRfZGVzYyktPm51bV9vZl9idWZmZXJzX3RvdGFsX2xlbmd0aCAmPSBjcHVfdG9fbGUzMigweGZmKSwgXAotCShjbWRfZGVzYyktPm51bV9vZl9idWZmZXJzX3RvdGFsX2xlbmd0aCB8PSBjcHVfdG9fbGUzMih2YWwgPDwgMjQpKQorCSgoY21kX2Rlc2MpLT5udW1fb2ZfYnVmZmVyc190b3RhbF9sZW5ndGggJj0gfmNwdV90b19sZTMyKDB4ZmZmZmZmMDApLCBcCisJKGNtZF9kZXNjKS0+bnVtX29mX2J1ZmZlcnNfdG90YWxfbGVuZ3RoIHw9IGNwdV90b19sZTMyKHZhbCA8PCA4KSkKIAogI2RlZmluZSBuZXR4ZW5fZ2V0X2NtZF9kZXNjX29wY29kZShjbWRfZGVzYykJXAogCSgobGUxNl90b19jcHUoKGNtZF9kZXNjKS0+ZmxhZ3Nfb3Bjb2RlKSA+PiA3KSAmIDB4MDAzRikKQEAgLTEwNDAsNiArMTA0MCw3IEBACiBpbnQgbmV0eGVuX2JhY2t1cF9jcmJpbml0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgbmV0eGVuX2ZsYXNoX2VyYXNlX3NlY29uZGFyeShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IG5ldHhlbl9mbGFzaF9lcmFzZV9wcmltYXJ5KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG5ldHhlbl9oYWx0X3BlZ3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIAogaW50IG5ldHhlbl9yb21fZmFzdF93cml0ZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQgZGF0YSk7CiBpbnQgbmV0eGVuX3JvbV9zZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwppbmRleCBjYzBlZmUyLi42MjUyZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAl3b2wtPndvbG9wdHMgPSAwOwogfQogCi1zdGF0aWMgdTMyIG5ldHhlbl9uaWNfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB1MzIgbmV0eGVuX25pY190ZXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CkBAIC00NTksNiArNDU5LDcgQEAKIAlpbnQgcmV0OwogCiAJaWYgKGZsYXNoX3N0YXJ0ID09IDApIHsKKwkJbmV0eGVuX2hhbHRfcGVncyhhZGFwdGVyKTsKIAkJcmV0ID0gbmV0eGVuX2ZsYXNoX3VubG9jayhhZGFwdGVyKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZsYXNoIHVubG9jayBmYWlsZWQuXG4iLApAQCAtNzEyLDcgKzcxMyw3IEBACiB7CiAJaWYgKGV0aF90ZXN0LT5mbGFncyA9PSBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CS8qIG9mZmxpbmUgdGVzdHMgKi8KIAkJLyogbGluayB0ZXN0ICovCi0JCWlmICghKGRhdGFbNF0gPSAodTY0KSBuZXR4ZW5fbmljX2dldF9saW5rKGRldikpKQorCQlpZiAoIShkYXRhWzRdID0gKHU2NCkgbmV0eGVuX25pY190ZXN0X2xpbmsoZGV2KSkpCiAJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCkBAIC03MjcsNyArNzI4LDcgQEAKIAkJCWRldi0+b3BlbihkZXYpOwogCX0gZWxzZSB7CQkvKiBvbmxpbmUgdGVzdHMgKi8KIAkJLyogbGluayB0ZXN0ICovCi0JCWlmICghKGRhdGFbNF0gPSAodTY0KSBuZXR4ZW5fbmljX2dldF9saW5rKGRldikpKQorCQlpZiAoIShkYXRhWzRdID0gKHU2NCkgbmV0eGVuX25pY190ZXN0X2xpbmsoZGV2KSkpCiAJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCiAJCS8qIG90aGVyIHRlc3RzIHBhc3MgYnkgZGVmYXVsdCAqLwpAQCAtNzgzLDcgKzc4NCw3IEBACiAJLmdldF9yZWdzX2xlbiA9IG5ldHhlbl9uaWNfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfcmVncyA9IG5ldHhlbl9uaWNfZ2V0X3JlZ3MsCiAJLmdldF93b2wgPSBuZXR4ZW5fbmljX2dldF93b2wsCi0JLmdldF9saW5rID0gbmV0eGVuX25pY19nZXRfbGluaywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbiA9IG5ldHhlbl9uaWNfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20gPSBuZXR4ZW5fbmljX2dldF9lZXByb20sCiAJLnNldF9lZXByb20gPSBuZXR4ZW5fbmljX3NldF9lZXByb20sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwppbmRleCBmMjYzMjMyLi43MTk1YWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKQEAgLTQyMCw2ICs0MjAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gc2l6ZW9mKHUzMik7IGkrKykgewogCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkciwgcHRyMzIpID09IC0xKQogCQkJcmV0dXJuIC0xOworCQkqcHRyMzIgPSBjcHVfdG9fbGUzMigqcHRyMzIpOwogCQlwdHIzMisrOwogCQlhZGRyICs9IHNpemVvZih1MzIpOwogCX0KQEAgLTQyOCw2ICs0MjksNyBAQAogCiAJCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBhZGRyLCAmbG9jYWwpID09IC0xKQogCQkJcmV0dXJuIC0xOworCQlsb2NhbCA9IGNwdV90b19sZTMyKGxvY2FsKTsKIAkJbWVtY3B5KHB0cjMyLCAmbG9jYWwsIChjaGFyICopYnVmICsgc2l6ZSAtIChjaGFyICopcHRyMzIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IGY3YmI4YzkuLjJmMzI0MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTcxNyw2ICs3MTcsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCit2b2lkIG5ldHhlbl9oYWx0X3BlZ3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCSBuZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzAgKyAweDNjLCAxKTsKKwkgbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUEVHX05FVF8xICsgMHgzYywgMSk7CisJIG5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMiArIDB4M2MsIDEpOworCSBuZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzMgKyAweDNjLCAxKTsKK30KKwogaW50IG5ldHhlbl9mbGFzaF91bmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewogCWludCByZXQgPSAwOwpAQCAtMTI0Niw3ICsxMjU0LDcgQEAKIAkgKiB0aGUgbmV0ZGV2IHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGRldmljZS4KIAkgKi8KIAotCWNvbnN1bWVyID0gKihhZGFwdGVyLT5jbWRfY29uc3VtZXIpOworCWNvbnN1bWVyID0gbGUzMl90b19jcHUoKihhZGFwdGVyLT5jbWRfY29uc3VtZXIpKTsKIAlpZiAobGFzdF9jb25zdW1lciA9PSBjb25zdW1lcikgewkvKiBSaW5nIGlzIGVtcHR5ICAgICovCiAJCURQUklOVEsoSU5GTywgImxhc3RfY29uc3VtZXIgJWQgPT0gY29uc3VtZXIgJWRcbiIsCiAJCQlsYXN0X2NvbnN1bWVyLCBjb25zdW1lcik7CkBAIC0xMzQwLDcgKzEzNDgsNyBAQAogCWlmIChhZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lciA9PSBjb25zdW1lciAmJgogCSAgICAoKChhZGFwdGVyLT5jbWRfcHJvZHVjZXIgKyAxKSAlCiAJICAgICAgYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpID09IGFkYXB0ZXItPmxhc3RfY21kX2NvbnN1bWVyKSkgewotCQljb25zdW1lciA9ICooYWRhcHRlci0+Y21kX2NvbnN1bWVyKTsKKwkJY29uc3VtZXIgPSBsZTMyX3RvX2NwdSgqKGFkYXB0ZXItPmNtZF9jb25zdW1lcikpOwogCX0KIAlkb25lID0gKGFkYXB0ZXItPmxhc3RfY21kX2NvbnN1bWVyID09IGNvbnN1bWVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDM2YmE2YTEuLjIyNWZmNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTQzNCwxMiArNDM0LDEzIEBACiAJCWFkYXB0ZXItPnBvcnRfY291bnQrKzsKIAkJYWRhcHRlci0+cG9ydFtpXSA9IHBvcnQ7CiAJfQotCisjaWZuZGVmIENPTkZJR19QUEM2NAogCXdyaXRlbCgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFKSk7CiAJbmV0eGVuX3Bpbml0X2Zyb21fcm9tKGFkYXB0ZXIsIDApOwogCXVkZWxheSg1MDApOwogCW5ldHhlbl9sb2FkX2Zpcm13YXJlKGFkYXB0ZXIpOwogCW5ldHhlbl9waGFudG9tX2luaXQoYWRhcHRlciwgTkVUWEVOX05JQ19QRUdfVFVORSk7CisjZW5kaWYKIAkvKgogCSAqIGRlbGF5IGEgd2hpbGUgdG8gZW5zdXJlIHRoYXQgdGhlIFBlZ3MgYXJlIHVwICYgcnVubmluZy4KIAkgKiBPdGhlcndpc2UsIHdlIG1pZ2h0IHNlZSBzb21lIGZsYWt5IGJlaGF2aW91ci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKaW5kZXggNDBkNzAwMy4uZDVkOTUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCiBpbnQgbmV0eGVuX25pdV94Z19pbml0X3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCkKIHsKLQlsb25nIHJlZyA9IDAsIHJldCA9IDA7CisJdTMyIHJlZyA9IDAsIHJldCA9IDA7CiAKIAlpZiAoYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGUgPT0gTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWikgewogCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKaW5kZXggNDQ4YmY0YS4uYzdiZDljMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKQEAgLTkxNSw3ICs5MTUsNyBAQAogCWlmICgoaW53KGlvYWRkciArIEVMM19TVEFUVVMpICYgSW50TGF0Y2gpICYmIChpbmIoaW9hZGRyICsgVGltZXIpID09IDB4ZmYpKSB7CiAJCWlmICghbHAtPmZhc3RfcG9sbCkKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRlcnJ1cHQocykgZHJvcHBlZCFcbiIsIGRldi0+bmFtZSk7Ci0JCWVsM19pbnRlcnJ1cHQoZGV2LT5pcnEsIGxwKTsKKwkJZWwzX2ludGVycnVwdChkZXYtPmlycSwgZGV2KTsKIAkJbHAtPmZhc3RfcG9sbCA9IEhaOwogCX0KIAlpZiAobHAtPmZhc3RfcG9sbCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwppbmRleCA1MzBkZjg4Li4yNTYxZjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwpAQCAtMTkyNyw3ICsxOTI3LDcgQEAKICAgICBpZiAoc21jLT53YXRjaGRvZysrICYmICgoaT4+OCkgJiBpKSkgewogCWlmICghc21jLT5mYXN0X3BvbGwpCiAJICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRlcnJ1cHQocykgZHJvcHBlZCFcbiIsIGRldi0+bmFtZSk7Ci0Jc21jX2ludGVycnVwdChkZXYtPmlycSwgc21jKTsKKwlzbWNfaW50ZXJydXB0KGRldi0+aXJxLCBkZXYpOwogCXNtYy0+ZmFzdF9wb2xsID0gSFo7CiAgICAgfQogICAgIGlmIChzbWMtPmZhc3RfcG9sbCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYyBiL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMKaW5kZXggZjRkNGViNi4uMjJhZWM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCkBAIC00Miw2ICs0MiwxOSBAQAogI2RlZmluZSBNSUlfTTEwMTFfSU1BU0tfSU5JVAkJMHg2NDAwCiAjZGVmaW5lIE1JSV9NMTAxMV9JTUFTS19DTEVBUgkJMHgwMDAwCiAKKyNkZWZpbmUgTUlJX00xMDExX1BIWV9TQ1IJCTB4MTAKKyNkZWZpbmUgTUlJX00xMDExX1BIWV9TQ1JfQVVUT19DUk9TUwkweDAwNjAKKworI2RlZmluZSBNSUlfTTExNDVfUEhZX0VYVF9DUgkJMHgxNAorI2RlZmluZSBNSUlfTTExNDVfUkdNSUlfUlhfREVMQVkJMHgwMDgwCisjZGVmaW5lIE1JSV9NMTE0NV9SR01JSV9UWF9ERUxBWQkweDAwMDIKKworI2RlZmluZSBNMTE0NV9ERVZfRkxBR1NfUkVTSVNUQU5DRQkweDAwMDAwMDAxCisKKyNkZWZpbmUgTUlJX00xMTExX1BIWV9MRURfQ09OVFJPTAkweDE4CisjZGVmaW5lIE1JSV9NMTExMV9QSFlfTEVEX0RJUkVDVAkweDQxMDAKKyNkZWZpbmUgTUlJX00xMTExX1BIWV9MRURfQ09NQklORQkweDQxMWMKKwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIFBIWSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkFuZHkgRmxlbWluZyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtNjMsNyArNzYsNyBAQAogewogCWludCBlcnI7CiAKLQlpZihwaHlkZXYtPmludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKQorCWlmIChwaHlkZXYtPmludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKQogCQllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfTTEwMTFfSU1BU0ssIE1JSV9NMTAxMV9JTUFTS19JTklUKTsKIAllbHNlCiAJCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9NMTAxMV9JTUFTSywgTUlJX00xMDExX0lNQVNLX0NMRUFSKTsKQEAgLTEwMywzNCArMTE2LDE1MyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX00xMDExX1BIWV9TQ1IsCisJCQlNSUlfTTEwMTFfUEhZX1NDUl9BVVRPX0NST1NTKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9NMTExMV9QSFlfTEVEX0NPTlRST0wsCisJCQlNSUlfTTExMTFfUEhZX0xFRF9ESVJFQ1QpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7CiAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IG04OGUxMTQ1X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IGVycjsKKworCS8qIFRha2UgY2FyZSBvZiBlcnJhdGEgRTAgJiBFMSAqLworCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIDB4MWQsIDB4MDAxYik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCAweDFlLCAweDQxOGYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgMHgxZCwgMHgwMDE2KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIDB4MWUsIDB4YTJkYSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAocGh5ZGV2LT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJKSB7CisJCWludCB0ZW1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfTTExNDVfUEhZX0VYVF9DUik7CisJCWlmICh0ZW1wIDwgMCkKKwkJCXJldHVybiB0ZW1wOworCisJCXRlbXAgfD0gKE1JSV9NMTE0NV9SR01JSV9SWF9ERUxBWSB8IE1JSV9NMTE0NV9SR01JSV9UWF9ERUxBWSk7CisKKwkJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX00xMTQ1X1BIWV9FWFRfQ1IsIHRlbXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKHBoeWRldi0+ZGV2X2ZsYWdzICYgTTExNDVfREVWX0ZMQUdTX1JFU0lTVEFOQ0UpIHsKKwkJCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIDB4MWQsIDB4MDAxMik7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCisJCQl0ZW1wID0gcGh5X3JlYWQocGh5ZGV2LCAweDFlKTsKKwkJCWlmICh0ZW1wIDwgMCkKKwkJCQlyZXR1cm4gdGVtcDsKKworCQkJdGVtcCAmPSAweGYwM2Y7CisJCQl0ZW1wIHw9IDIgPDwgOTsJLyogMzYgb2htICovCisJCQl0ZW1wIHw9IDIgPDwgNjsJLyogMzkgb2htICovCisKKwkJCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIDB4MWUsIHRlbXApOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKworCQkJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgMHgxZCwgMHgzKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisKKwkJCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIDB4MWUsIDB4ODAwMCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtODhlMTEwMV9kcml2ZXIgPSB7Ci0JLnBoeV9pZAkJPSAweDAxNDEwYzAwLAotCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmMDAsCi0JLm5hbWUJCT0gIk1hcnZlbGwgODhFMTEwMSIsCi0JLmZlYXR1cmVzCT0gUEhZX0dCSVRfRkVBVFVSRVMsCi0JLmZsYWdzCQk9IFBIWV9IQVNfSU5URVJSVVBULAotCS5jb25maWdfYW5lZwk9ICZtYXJ2ZWxsX2NvbmZpZ19hbmVnLAotCS5yZWFkX3N0YXR1cwk9ICZnZW5waHlfcmVhZF9zdGF0dXMsCi0JLmFja19pbnRlcnJ1cHQJPSAmbWFydmVsbF9hY2tfaW50ZXJydXB0LAotCS5jb25maWdfaW50cgk9ICZtYXJ2ZWxsX2NvbmZpZ19pbnRyLAotCS5kcml2ZXIgCT0geyAub3duZXIgPSBUSElTX01PRFVMRSx9LAorCS5waHlfaWQgPSAweDAxNDEwYzYwLAorCS5waHlfaWRfbWFzayA9IDB4ZmZmZmZmZjAsCisJLm5hbWUgPSAiTWFydmVsbCA4OEUxMTAxIiwKKwkuZmVhdHVyZXMgPSBQSFlfR0JJVF9GRUFUVVJFUywKKwkuZmxhZ3MgPSBQSFlfSEFTX0lOVEVSUlVQVCwKKwkuY29uZmlnX2FuZWcgPSAmbWFydmVsbF9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMgPSAmZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0ID0gJm1hcnZlbGxfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIgPSAmbWFydmVsbF9jb25maWdfaW50ciwKKwkuZHJpdmVyID0gey5vd25lciA9IFRISVNfTU9EVUxFLH0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbTg4ZTExMTFzX2RyaXZlciA9IHsKKwkucGh5X2lkID0gMHgwMTQxMGNjMCwKKwkucGh5X2lkX21hc2sgPSAweGZmZmZmZmYwLAorCS5uYW1lID0gIk1hcnZlbGwgODhFMTExMSIsCisJLmZlYXR1cmVzID0gUEhZX0dCSVRfRkVBVFVSRVMsCisJLmZsYWdzID0gUEhZX0hBU19JTlRFUlJVUFQsCisJLmNvbmZpZ19hbmVnID0gJm1hcnZlbGxfY29uZmlnX2FuZWcsCisJLnJlYWRfc3RhdHVzID0gJmdlbnBoeV9yZWFkX3N0YXR1cywKKwkuYWNrX2ludGVycnVwdCA9ICZtYXJ2ZWxsX2Fja19pbnRlcnJ1cHQsCisJLmNvbmZpZ19pbnRyID0gJm1hcnZlbGxfY29uZmlnX2ludHIsCisJLmRyaXZlciA9IHsub3duZXIgPSBUSElTX01PRFVMRSx9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG04OGUxMTQ1X2RyaXZlciA9IHsKKwkucGh5X2lkID0gMHgwMTQxMGNkMCwKKwkucGh5X2lkX21hc2sgPSAweGZmZmZmZmYwLAorCS5uYW1lID0gIk1hcnZlbGwgODhFMTE0NSIsCisJLmZlYXR1cmVzID0gUEhZX0dCSVRfRkVBVFVSRVMsCisJLmZsYWdzID0gUEhZX0hBU19JTlRFUlJVUFQsCisJLmNvbmZpZ19pbml0ID0gJm04OGUxMTQ1X2NvbmZpZ19pbml0LAorCS5jb25maWdfYW5lZyA9ICZtYXJ2ZWxsX2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cyA9ICZnZW5waHlfcmVhZF9zdGF0dXMsCisJLmFja19pbnRlcnJ1cHQgPSAmbWFydmVsbF9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50ciA9ICZtYXJ2ZWxsX2NvbmZpZ19pbnRyLAorCS5kcml2ZXIgPSB7Lm93bmVyID0gVEhJU19NT0RVTEUsfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1hcnZlbGxfaW5pdCh2b2lkKQogewotCXJldHVybiBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZtODhlMTEwMV9kcml2ZXIpOworCWludCByZXQ7CisKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZtODhlMTEwMV9kcml2ZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZtODhlMTExMXNfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjExMTFzOworCisJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlcigmbTg4ZTExNDVfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjExNDU7CisKKwlyZXR1cm4gMDsKKworICAgICAgZXJyMTE0NToKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJm04OGUxMTExc19kcml2ZXIpOworICAgICAgZXJyMTExMXM6CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZtODhlMTEwMV9kcml2ZXIpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYXJ2ZWxsX2V4aXQodm9pZCkKIHsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJm04OGUxMTAxX2RyaXZlcik7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZtODhlMTExMXNfZHJpdmVyKTsKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJm04OGUxMTQ1X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG1hcnZlbGxfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCBmZGY0NWZkLi43ZDViNmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogICovCiBzdHJ1Y3QgcGh5X2RldmljZSAqIHBoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBoeV9pZCwKIAkJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICopLCB1MzIgZmxhZ3MsCi0JCXUzMiBpbnRlcmZhY2UpCisJCXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCiB7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIApAQCAtMTg3LDcgKzE4Nyw3IEBACiB9CiAKIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCWNvbnN0IGNoYXIgKnBoeV9pZCwgdTMyIGZsYWdzLCB1MzIgaW50ZXJmYWNlKQorCQljb25zdCBjaGFyICpwaHlfaWQsIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKIHsKIAlzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyA9ICZtZGlvX2J1c190eXBlOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCA1NTk4ZDg2Li4xM2NmMDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTE3MzMsNiArMTczMyw4IEBACiAJYXNzZXJ0KGRldiAhPSBOVUxMKTsKIAlhc3NlcnQodHAgIT0gTlVMTCk7CiAKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlydGw4MTY5X3JlbGVhc2VfYm9hcmQocGRldiwgZGV2LCB0cC0+bW1pb19hZGRyKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CkBAIC0yMTYxLDEwICsyMTYzLDEzIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLT5kZXY7CiAJaW50IHJldDsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJcnRsODE2OV93YWl0X2Zvcl9xdWllc2NlbmNlKGRldik7Ci0JCXJ0bDgxNjlfY2xvc2UoZGV2KTsKLQl9CisJcnRubF9sb2NrKCk7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJcnRsODE2OV93YWl0X2Zvcl9xdWllc2NlbmNlKGRldik7CisJcnRsODE2OV9jbG9zZShkZXYpOwogCiAJcmV0ID0gcnRsODE2OV9vcGVuKGRldik7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CkBAIC0yMTc5LDYgKzIxODQsOSBAQAogCQl9CiAJCXJ0bDgxNjlfc2NoZWR1bGVfd29yayhkZXYsIHJ0bDgxNjlfcmVpbml0X3Rhc2spOwogCX0KKworb3V0X3VubG9jazoKKwlydG5sX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMjE4Nyw4ICsyMTk1LDEwIEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCB0YXNrLndvcmspOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC0+ZGV2OwogCisJcnRubF9sb2NrKCk7CisKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuOworCQlnb3RvIG91dF91bmxvY2s7CiAKIAlydGw4MTY5X3dhaXRfZm9yX3F1aWVzY2VuY2UoZGV2KTsKIApAQCAtMjIxMCw2ICsyMjIwLDkgQEAKIAkJfQogCQlydGw4MTY5X3NjaGVkdWxlX3dvcmsoZGV2LCBydGw4MTY5X3Jlc2V0X3Rhc2spOwogCX0KKworb3V0X3VubG9jazoKKwlydG5sX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI3MjIsOCArMjczNSw2IEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiBjb3JlX2Rvd246CiAJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggZThlMGQ5NC4uZmQ4NTY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtMzc1OCw3ICszNzU4LDYgQEAKIHsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gZGV2LT5wcml2OwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJLyogUmVzZXQgY2FyZCwga2lsbCB0YXNrbGV0IGFuZCBmcmVlIFR4IGFuZCBSeCBidWZmZXJzLiAqLwogCXMyaW9fY2FyZF9kb3duKHNwKTsKQEAgLTU4NDcsOSArNTg0NiwxNCBAQAogCXJlZ2lzdGVyIHU2NCB2YWw2NDsKIAl1MTYgc3ViaWQ7CiAKKwlydG5sX2xvY2soKTsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmKG5pYy0+bGlua19zdGF0ZSkpKSB7CiAJCS8qIFRoZSBjYXJkIGlzIGJlaW5nIHJlc2V0LCBubyBwb2ludCBkb2luZyBhbnl0aGluZyAqLwotCQlyZXR1cm47CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlzdWJpZCA9IG5pYy0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKQEAgLTU5MDMsNiArNTkwNyw5IEBACiAJCXMyaW9fbGluayhuaWMsIExJTktfRE9XTik7CiAJfQogCWNsZWFyX2JpdCgwLCAmKG5pYy0+bGlua19zdGF0ZSkpOworCitvdXRfdW5sb2NrOgorCXJ0bmxfbG9jaygpOwogfQogCiBzdGF0aWMgaW50IHNldF9yeGRfYnVmZmVyX3BvaW50ZXIoc3RydWN0IHMyaW9fbmljICpzcCwgc3RydWN0IFJ4RF90ICpyeGRwLApAQCAtNjM1Niw2ICs2MzYzLDExIEBACiAJc3RydWN0IHMyaW9fbmljICpzcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgczJpb19uaWMsIHJzdF90aW1lcl90YXNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3AtPmRldjsKIAorCXJ0bmxfbG9jaygpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCXMyaW9fY2FyZF9kb3duKHNwKTsKIAlpZiAoczJpb19jYXJkX3VwKHNwKSkgewogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBEZXZpY2UgYnJpbmcgdXAgZmFpbGVkXG4iLApAQCAtNjM2NCw3ICs2Mzc2LDggQEAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJREJHX1BSSU5UKEVSUl9EQkcsICIlczogd2FzIHJlc2V0IGJ5IFR4IHdhdGNoZG9nIHRpbWVyXG4iLAogCQkgIGRldi0+bmFtZSk7Ci0KK291dF91bmxvY2s6CisJcnRubF91bmxvY2soKTsKIH0KIAogLyoqCkBAIC03MTczLDYgKzcxODYsOCBAQAogCQlyZXR1cm47CiAJfQogCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwogCXNwID0gZGV2LT5wcml2OwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczE5MC5jIGIvZHJpdmVycy9uZXQvc2lzMTkwLmMKaW5kZXggNDVkOTFiMS4uYjA4NTA4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzMTkwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzMTkwLmMKQEAgLTkwOSw2ICs5MDksOSBAQAogCiAJcnRubF9sb2NrKCk7CiAKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJZ290byBvdXRfdW5sb2NrOworCiAJdmFsID0gbWRpb19yZWFkKGlvYWRkciwgcGh5X2lkLCBNSUlfQk1DUik7CiAJaWYgKHZhbCAmIEJNQ1JfUkVTRVQpIHsKIAkJLy8gRklYTUU6IG5lZWRsZXNzbHkgaGlnaCA/ICAtLSBGUiAwMi8wNy8yMDA1CkBAIC05ODEsNiArOTg0LDcgQEAKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCX0KIAorb3V0X3VubG9jazoKIAlydG5sX3VubG9jaygpOwogfQogCkBAIC0xMTAyLDggKzExMDYsNiBAQAogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQogCWRvIHsKIAkJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOwogCkBAIC0xODU3LDYgKzE4NTksNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAlzaXMxOTBfbWlpX3JlbW92ZShkZXYpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlzaXMxOTBfcmVsZWFzZV9ib2FyZChwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCmluZGV4IDkyZDExYjkuLmU5NGFiMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCkBAIC01MTg4LDYgKzUxODgsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBza2dlX2luaXQodm9pZCkKIHsKKwlwcmludGsoS0VSTl9OT1RJQ0UgInNrOThsaW46IGRyaXZlciBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgc2tnZSBkcml2ZXIiCisJICAgICAgICIgYW5kIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbFxuIik7CisKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2tnZV9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggZTQ4MmU3Zi4uYzNkMmUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtMTQxOSw3ICsxNDE5LDggQEAKIAltdXRleF91bmxvY2soJmh3LT5waHlfbXV0ZXgpOwogCiBub2NoYW5nZToKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnNrZ2UtPmxpbmtfdGhyZWFkLCBMSU5LX0haKTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnNrZ2UtPmxpbmtfdGhyZWFkLCBMSU5LX0haKTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuZXNpc19tYWNfaW5pdChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0KQpAQCAtMjUzMCw3ICsyNTMxLDcgQEAKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTICYmIGh3LT5waHlfdHlwZSA9PSBTS19QSFlfWE1BQykKLQkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmc2tnZS0+bGlua190aHJlYWQpOworCQljYW5jZWxfZGVsYXllZF93b3JrKCZza2dlLT5saW5rX3RocmVhZCk7CiAKIAlza2dlX3dyaXRlOChza2dlLT5odywgU0tfUkVHKHNrZ2UtPnBvcnQsIExOS19MRURfUkVHKSwgTEVEX09GRik7CiAJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKQEAgLTM2OTAsNiArMzY5MSw4IEBACiAJaWYgKCFodykKIAkJcmV0dXJuOwogCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwogCWlmICgoZGV2MSA9IGh3LT5kZXZbMV0pKQogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYxKTsKIAlkZXYwID0gaHctPmRldlswXTsKQEAgLTM3MDQsOCArMzcwNyw2IEBACiAJc2tnZV93cml0ZTE2KGh3LCBCMF9MRUQsIExFRF9TVEFUX09GRik7CiAJc2tnZV93cml0ZTgoaHcsIEIwX0NUU1QsIENTX1JTVF9TRVQpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQogCWZyZWVfaXJxKHBkZXYtPmlycSwgaHcpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IGYyYWIzZDUuLjUyZWRiZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlICJza3kyLmgiCiAKICNkZWZpbmUgRFJWX05BTUUJCSJza3kyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMTIiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4xMyIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIiAiCiAKIC8qCkBAIC0xNzQyLDEzICsxNzQyLDYgQEAKIAlyZWcgJj0gfihHTV9HUENSX1JYX0VOQSB8IEdNX0dQQ1JfVFhfRU5BKTsKIAlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fR1BfQ1RSTCwgcmVnKTsKIAotCWlmIChza3kyLT5mbG93X3N0YXR1cyA9PSBGQ19SWCkgewotCQkvKiByZXN0b3JlIEFzeW1tZXRyaWMgUGF1c2UgYml0ICovCi0JCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfQVVORV9BRFYsCi0JCQkgICAgIGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9BVU5FX0FEVikKLQkJCSAgICAgfCBQSFlfTV9BTl9BU1ApOwotCX0KLQogCW5ldGlmX2NhcnJpZXJfb2ZmKHNreTItPm5ldGRldik7CiAJbmV0aWZfc3RvcF9xdWV1ZShza3kyLT5uZXRkZXYpOwogCkBAIC0xNzczLDEwICsxNzY2LDEwIEBACiB7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAJdW5zaWduZWQgcG9ydCA9IHNreTItPnBvcnQ7Ci0JdTE2IGxwYTsKKwl1MTYgYWR2ZXJ0LCBscGE7CiAKKwlhZHZlcnQgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfQVVORV9BRFYpOwogCWxwYSA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9BVU5FX0xQKTsKLQogCWlmIChscGEgJiBQSFlfTV9BTl9SRikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogcmVtb3RlIGZhdWx0Iiwgc2t5Mi0+bmV0ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwpAQCAtMTc5MSwyMCArMTc4NCw0MCBAQAogCXNreTItPnNwZWVkID0gc2t5Ml9waHlfc3BlZWQoaHcsIGF1eCk7CiAJc2t5Mi0+ZHVwbGV4ID0gKGF1eCAmIFBIWV9NX1BTX0ZVTExfRFVQKSA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAKLQkvKiBQYXVzZSBiaXRzIGFyZSBvZmZzZXQgKDkuLjgpICovCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwKLQkgICAgfHwgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VCi0JICAgIHx8IGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRVgpCi0JCWF1eCA+Pj0gNjsKKwkvKiBTaW5jZSB0aGUgcGF1c2UgcmVzdWx0IGJpdHMgc2VlbSB0byBpbiBkaWZmZXJlbnQgcG9zaXRpb25zIG9uCisJICogZGlmZmVyZW50IGNoaXBzLiBsb29rIGF0IHJlZ2lzdGVycy4KKwkgKi8KKwlpZiAoIXNreTJfaXNfY29wcGVyKGh3KSkgeworCQkvKiBTaGlmdCBmb3IgYml0cyBpbiBmaWJlciBQSFkgKi8KKwkJYWR2ZXJ0ICY9IH4oQURWRVJUSVNFX1BBVVNFX0NBUHxBRFZFUlRJU0VfUEFVU0VfQVNZTSk7CisJCWxwYSAmPSB+KExQQV9QQVVTRV9DQVB8TFBBX1BBVVNFX0FTWU0pOwogCi0Jc2t5Mi0+Zmxvd19zdGF0dXMgPSBza3kyX2Zsb3coYXV4ICYgUEhZX01fUFNfUlhfUF9FTiwKLQkJCQkgICAgICBhdXggJiBQSFlfTV9QU19UWF9QX0VOKTsKKwkJaWYgKGFkdmVydCAmIEFEVkVSVElTRV8xMDAwWFBBVVNFKQorCQkJYWR2ZXJ0IHw9IEFEVkVSVElTRV9QQVVTRV9DQVA7CisJCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwMFhQU0VfQVNZTSkKKwkJCWFkdmVydCB8PSBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKKwkJaWYgKGxwYSAmIExQQV8xMDAwWFBBVVNFKQorCQkJbHBhIHw9IExQQV9QQVVTRV9DQVA7CisJCWlmIChscGEgJiBMUEFfMTAwMFhQQVVTRV9BU1lNKQorCQkJbHBhIHw9IExQQV9QQVVTRV9BU1lNOworCX0KKworCXNreTItPmZsb3dfc3RhdHVzID0gRkNfTk9ORTsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFX1BBVVNFX0NBUCkgeworCQlpZiAobHBhICYgTFBBX1BBVVNFX0NBUCkKKwkJCXNreTItPmZsb3dfc3RhdHVzID0gRkNfQk9USDsKKwkJZWxzZSBpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFX1BBVVNFX0FTWU0pCisJCQlza3kyLT5mbG93X3N0YXR1cyA9IEZDX1JYOworCX0gZWxzZSBpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFX1BBVVNFX0FTWU0pIHsKKwkJaWYgKChscGEgJiBMUEFfUEFVU0VfQ0FQKSAmJiAobHBhICYgTFBBX1BBVVNFX0FTWU0pKQorCQkJc2t5Mi0+Zmxvd19zdGF0dXMgPSBGQ19UWDsKKwl9CiAKIAlpZiAoc2t5Mi0+ZHVwbGV4ID09IERVUExFWF9IQUxGICYmIHNreTItPnNwZWVkIDwgU1BFRURfMTAwMAogCSAgICAmJiAhKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSB8fCBody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VYKSkKIAkJc2t5Mi0+Zmxvd19zdGF0dXMgPSBGQ19OT05FOwogCi0JaWYgKGF1eCAmIFBIWV9NX1BTX1JYX1BfRU4pCisJaWYgKHNreTItPmZsb3dfc3RhdHVzICYgRkNfVFgpCiAJCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19DVFJMKSwgR01DX1BBVVNFX09OKTsKIAllbHNlCiAJCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19DVFJMKSwgR01DX1BBVVNFX09GRik7CkBAIC0xODUzLDE2ICsxODY2LDEzIEBACiAJc3Bpbl91bmxvY2soJnNreTItPnBoeV9sb2NrKTsKIH0KIAotCiAvKiBUcmFuc21pdCB0aW1lb3V0IGlzIG9ubHkgY2FsbGVkIGlmIHdlIGFyZSBydW5uaW5nLCBjYXJyaWVyIGlzIHVwCiAgKiBhbmQgdHggcXVldWUgaXMgZnVsbCAoc3RvcHBlZCkuCi0gKiBDYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGhlbGQuCiAgKi8KIHN0YXRpYyB2b2lkIHNreTJfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwotCXUzMiBpbWFzazsKIAogCWlmIChuZXRpZl9tc2dfdGltZXIoc2t5MikpCiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB0eCB0aW1lb3V0XG4iLCBkZXYtPm5hbWUpOwpAQCAtMTg3MiwxOSArMTg4Miw4IEBACiAJICAgICAgIHNreTJfcmVhZDE2KGh3LCBza3kyLT5wb3J0ID09IDAgPyBTVEFUX1RYQTFfUklEWCA6IFNUQVRfVFhBMl9SSURYKSwKIAkgICAgICAgc2t5Ml9yZWFkMTYoaHcsIFFfQUREUih0eHFhZGRyW3NreTItPnBvcnRdLCBRX0RPTkUpKSk7CiAKLQlpbWFzayA9IHNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKTsJLyogYmxvY2sgSVJRIGluIGh3ICovCi0Jc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKLQlza3kyX3JlYWQzMihodywgQjBfSU1TSyk7Ci0KLQluZXRpZl9wb2xsX2Rpc2FibGUoaHctPmRldlswXSk7CQkvKiBzdG9wIE5BUEkgcG9sbCAqLwotCXN5bmNocm9uaXplX2lycShody0+cGRldi0+aXJxKTsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CQkJLyogZG9uJ3Qgd2FrZXVwIGR1cmluZyBmbHVzaCAqLwotCXNreTJfdHhfY29tcGxldGUoc2t5Miwgc2t5Mi0+dHhfcHJvZCk7CS8qIEZsdXNoIHRyYW5zbWl0IHF1ZXVlICovCi0KLQlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGltYXNrKTsKLQotCXNreTJfcGh5X3JlaW5pdChza3kyKTsJCQkvKiB0aGlzIGNsZWFycyBmbG93IGNvbnRyb2wgZXRjICovCisJLyogY2FuJ3QgcmVzdGFydCBzYWZlbHkgdW5kZXIgc29mdGlycSAqLworCXNjaGVkdWxlX3dvcmsoJmh3LT5yZXN0YXJ0X3dvcmspOwogfQogCiBzdGF0aWMgaW50IHNreTJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKQEAgLTIwNTcsOSArMjA1Niw2IEBACiAJaWYgKCEoc3RhdHVzICYgR01SX0ZTX1JYX09LKSkKIAkJZ290byByZXN1Ym1pdDsKIAotCWlmIChsZW5ndGggPiBkZXYtPm10dSArIEVUSF9ITEVOKQotCQlnb3RvIG92ZXJzaXplOwotCiAJaWYgKGxlbmd0aCA8IGNvcHlicmVhaykKIAkJc2tiID0gcmVjZWl2ZV9jb3B5KHNreTIsIHJlLCBsZW5ndGgpOwogCWVsc2UKQEAgLTIwNjksMTQgKzIwNjUsMTAgQEAKIAogCXJldHVybiBza2I7CiAKLW92ZXJzaXplOgotCSsrc2t5Mi0+bmV0X3N0YXRzLnJ4X292ZXJfZXJyb3JzOwotCWdvdG8gcmVzdWJtaXQ7Ci0KIGVycm9yOgogCSsrc2t5Mi0+bmV0X3N0YXRzLnJ4X2Vycm9yczsKIAlpZiAoc3RhdHVzICYgR01SX0ZTX1JYX0ZGX09WKSB7Ci0JCXNreTItPm5ldF9zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQlza3kyLT5uZXRfc3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJZ290byByZXN1Ym1pdDsKIAl9CiAKQEAgLTI2MzgsNiArMjYzMCw0OSBAQAogCXNreTJfd3JpdGU4KGh3LCBTVEFUX0lTUl9USU1FUl9DVFJMLCBUSU1fU1RBUlQpOwogfQogCitzdGF0aWMgdm9pZCBza3kyX3Jlc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBza3kyX2h3ICpodyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2t5Ml9odywgcmVzdGFydF93b3JrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBpLCBlcnI7CisKKwlkZXZfZGJnKCZody0+cGRldi0+ZGV2LCAicmVzdGFydGluZ1xuIik7CisKKwlkZWxfdGltZXJfc3luYygmaHctPmlkbGVfdGltZXIpOworCisJcnRubF9sb2NrKCk7CisJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKKwlza3kyX3JlYWQzMihodywgQjBfSU1TSyk7CisKKwluZXRpZl9wb2xsX2Rpc2FibGUoaHctPmRldlswXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKKwkJZGV2ID0gaHctPmRldltpXTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCXNreTJfZG93bihkZXYpOworCX0KKworCXNreTJfcmVzZXQoaHcpOworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgWTJfSVNfQkFTRSk7CisJbmV0aWZfcG9sbF9lbmFibGUoaHctPmRldlswXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKKwkJZGV2ID0gaHctPmRldltpXTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJZXJyID0gc2t5Ml91cChkZXYpOworCQkJaWYgKGVycikgeworCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogY291bGQgbm90IHJlc3RhcnQgJWRcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCQlkZXZfY2xvc2UoZGV2KTsKKwkJCX0KKwkJfQorCX0KKworCXNreTJfaWRsZV9zdGFydChodyk7CisKKwlydG5sX3VubG9jaygpOworfQorCiBzdGF0aWMgaW5saW5lIHU4IHNreTJfd29sX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3Qgc2t5Ml9odyAqaHcpCiB7CiAJcmV0dXJuIHNreTJfaXNfY29wcGVyKGh3KSA/IChXQUtFX1BIWSB8IFdBS0VfTUFHSUMpIDogMDsKQEAgLTM2MDAsNiArMzYzNSw4IEBACiAJfQogCiAJc2V0dXBfdGltZXIoJmh3LT5pZGxlX3RpbWVyLCBza3kyX2lkbGUsICh1bnNpZ25lZCBsb25nKSBodyk7CisJSU5JVF9XT1JLKCZody0+cmVzdGFydF93b3JrLCBza3kyX3Jlc3RhcnQpOworCiAJc2t5Ml9pZGxlX3N0YXJ0KGh3KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CkBAIC0zNjM2LDYgKzM2NzMsOCBAQAogCiAJZGVsX3RpbWVyX3N5bmMoJmh3LT5pZGxlX3RpbWVyKTsKIAorCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIDApOwogCXN5bmNocm9uaXplX2lycShody0+cGRldi0+aXJxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5oIGIvZHJpdmVycy9uZXQvc2t5Mi5oCmluZGV4IDNiMDE4OTUuLmFjMjRiZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuaAorKysgYi9kcml2ZXJzL25ldC9za3kyLmgKQEAgLTE1ODksNyArMTU4OSw3IEBACiAKIAlHTVJfRlNfQU5ZX0VSUgk9IEdNUl9GU19SWF9GRl9PViB8IEdNUl9GU19DUkNfRVJSIHwKIAkJCSAgR01SX0ZTX0ZSQUdNRU5UIHwgR01SX0ZTX0xPTkdfRVJSIHwKLQkJICAJICBHTVJfRlNfTUlJX0VSUiB8IEdNUl9GU19HT09EX0ZDIHwgR01SX0ZTX0JBRF9GQyB8CisJCSAgCSAgR01SX0ZTX01JSV9FUlIgfCBHTVJfRlNfQkFEX0ZDIHwKIAkJCSAgR01SX0ZTX1VOX1NJWkUgfCBHTVJfRlNfSkFCQkVSLAogfTsKIApAQCAtMTkzMyw2ICsxOTMzLDcgQEAKIAlkbWFfYWRkcl90ICAgCSAgICAgc3RfZG1hOwogCiAJc3RydWN0IHRpbWVyX2xpc3QgICAgaWRsZV90aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICByZXN0YXJ0X3dvcms7CiAJaW50CQkgICAgIG1zaTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICBtc2lfd2FpdDsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCmluZGV4IDYxNzA4Y2YuLjg4OTdmNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCkBAIC0yNiw3ICsyNiw3IEBACiAjIFRoZXJlIGlzIG5vIHdheSB0byBkZXRlY3QgYSBjb210cm9sIHN2MTEgLSBmb3JjZSBpdCBtb2R1bGFyIGZvciBub3cuCiBjb25maWcgSE9TVEVTU19TVjExCiAJdHJpc3RhdGUgIkNvbXRyb2wgSG9zdGVzcyBTVi0xMSBzdXBwb3J0IgotCWRlcGVuZHMgb24gV0FOICYmIElTQSAmJiBtICYmIElTQV9ETUFfQVBJCisJZGVwZW5kcyBvbiBXQU4gJiYgSVNBICYmIG0gJiYgSVNBX0RNQV9BUEkgJiYgSU5FVAogCWhlbHAKIAkgIERyaXZlciBmb3IgQ29tdHJvbCBIb3N0ZXNzIFNWLTExIG5ldHdvcmsgY2FyZCB3aGljaAogCSAgb3BlcmF0ZXMgb24gbG93IHNwZWVkIHN5bmNocm9ub3VzIHNlcmlhbCBsaW5rcyBhdCB1cCB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMgYi9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYwppbmRleCBiYzE1NmI1Li5hZmYwNWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYworKysgYi9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYwpAQCAtNTQyLDcgKzU0Miw3IEBACiAKIAlDTE9DS19CQVNFID0gdXNlX2NyeXN0YWxfY2xvY2sgPyAyNDU3NjAwMCA6IHBjaV9jbG9ja19mcmVxOwogCi0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmcGMzMDBfcGNpX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBjMzAwX3BjaV9kcml2ZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCBiMDgwNTVhLi5hOGMyYmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC0xNjIzLDcgKzE2MjMsNyBAQAogCiAJY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCBwa2V5LCAxNik7CiAJY291bnRlciA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IChzaXplb2YoY29udGV4dC0+Y29lZmYpL3NpemVvZihjb250ZXh0LT5jb2VmZlswXSkpOyApIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb250ZXh0LT5jb2VmZik7ICkgewogCQlhZXNfY291bnRlclsxNV0gPSAodTgpKGNvdW50ZXIgPj4gMCk7CiAJCWFlc19jb3VudGVyWzE0XSA9ICh1OCkoY291bnRlciA+PiA4KTsKIAkJYWVzX2NvdW50ZXJbMTNdID0gKHU4KShjb3VudGVyID4+IDE2KTsKQEAgLTE2MzIsNyArMTYzMiw3IEBACiAJCW1lbWNweSAocGxhaW4sIGFlc19jb3VudGVyLCAxNik7CiAJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBwbGFpbiwgcGxhaW4pOwogCQljaXBoZXIgPSBwbGFpbjsKLQkJZm9yIChqPTA7IChqPDE2KSAmJiAoaTwgKHNpemVvZihjb250ZXh0LT5jb2VmZikvc2l6ZW9mKGNvbnRleHQtPmNvZWZmWzBdKSkpOyApIHsKKwkJZm9yIChqID0gMDsgKGogPCAxNikgJiYgKGkgPCBBUlJBWV9TSVpFKGNvbnRleHQtPmNvZWZmKSk7ICkgewogCQkJY29udGV4dC0+Y29lZmZbaSsrXSA9IG50b2hsKCoodTMyICopJmNpcGhlcltqXSk7CiAJCQlqICs9IDQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmgKaW5kZXggM2EwNjRkZS4uOTVmZjE3NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFBGWAkJCQlLQlVJTERfTU9ETkFNRSAiOiAiCiAKICNkZWZpbmUgQkNNNDN4eF9TV0lUQ0hfQ09SRV9NQVhfUkVUUklFUwk1MAotI2RlZmluZSBCQ000M3h4X0lSUVdBSVRfTUFYX1JFVFJJRVMJNTAKKyNkZWZpbmUgQkNNNDN4eF9JUlFXQUlUX01BWF9SRVRSSUVTCTEwMAogCiAjZGVmaW5lIEJDTTQzeHhfSU9fU0laRQkJCTgxOTIKIApAQCAtMzMzLDcgKzMzMyw3IEBACiAjZGVmaW5lIEJDTTQzeHhfU0JGX1BTMgkJCTB4MDQwMDAwMDAKICNkZWZpbmUgQkNNNDN4eF9TQkZfTk9fU1NJRF9CQ0FTVAkweDA4MDAwMDAwCiAjZGVmaW5lIEJDTTQzeHhfU0JGX1RJTUVfVVBEQVRFCQkweDEwMDAwMDAwCi0jZGVmaW5lIEJDTTQzeHhfU0JGXzgwMDAwMDAwCQkweDgwMDAwMDAwIC8qRklYTUU6IGZpeCBuYW1lKi8KKyNkZWZpbmUgQkNNNDN4eF9TQkZfTU9ERV9HCQkweDgwMDAwMDAwCiAKIC8qIE1pY3JvY29kZSAqLwogI2RlZmluZSBCQ000M3h4X1VDT0RFX1JFVklTSU9OCQkweDAwMDAKQEAgLTUwNyw4ICs1MDcsNiBAQAogCXU4IGV0MW1hY2FkZHJbNl07CiAJdTggZXQwcGh5YWRkcjo1OwogCXU4IGV0MXBoeWFkZHI6NTsKLQl1OCBldDBtZGNwb3J0OjE7Ci0JdTggZXQxbWRjcG9ydDoxOwogCXU4IGJvYXJkcmV2OwogCXU4IGxvY2FsZTo0OwogCXU4IGFudGVubmFzX2FwaHk6MjsKQEAgLTU0Miw3ICs1NDAsNyBAQAogCiBzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvIHsKIAkvKiBIYXJkd2FyZSBEYXRhICovCi0JdTggdmVyc2lvbjsKKwl1OCBhbmFsb2c7CiAJdTggdHlwZTsKIAl1OCByZXY7CiAJdTE2IGFudGVubmFfZGl2ZXJzaXR5OwpAQCAtNzcxLDYgKzc2OSw3IEBACiAJICogVGhpcyBpcyBjdXJyZW50bHkgYWx3YXlzIEJDTTQzeHhfQlVTVFlQRV9QQ0kKIAkgKi8KIAl1OCBidXN0eXBlOworCXU2NCBkbWFfbWFzazsKIAogCXUxNiBib2FyZF92ZW5kb3I7CiAJdTE2IGJvYXJkX3R5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMKaW5kZXggOTc4ZWQwOS4uNmUwZGM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYwpAQCAtMTQ1LDE2ICsxNDUsMTQgQEAKIAkJCSAgaW50IHR4KQogewogCWRtYV9hZGRyX3QgZG1hYWRkcjsKKwlpbnQgZGlyZWN0aW9uID0gUENJX0RNQV9GUk9NREVWSUNFOwogCi0JaWYgKHR4KSB7Ci0JCWRtYWFkZHIgPSBkbWFfbWFwX3NpbmdsZSgmcmluZy0+YmNtLT5wY2lfZGV2LT5kZXYsCisJaWYgKHR4KQorCQlkaXJlY3Rpb24gPSBQQ0lfRE1BX1RPREVWSUNFOworCisJZG1hYWRkciA9IHBjaV9tYXBfc2luZ2xlKHJpbmctPmJjbS0+cGNpX2RldiwKIAkJCQkJIGJ1ZiwgbGVuLAotCQkJCQkgRE1BX1RPX0RFVklDRSk7Ci0JfSBlbHNlIHsKLQkJZG1hYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZyaW5nLT5iY20tPnBjaV9kZXYtPmRldiwKLQkJCQkJIGJ1ZiwgbGVuLAotCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKLQl9CisJCQkJCSBkaXJlY3Rpb24pOwogCiAJcmV0dXJuIGRtYWFkZHI7CiB9CkBAIC0xNjYsMTMgKzE2NCwxMyBAQAogCQkgICAgICBpbnQgdHgpCiB7CiAJaWYgKHR4KSB7Ci0JCWRtYV91bm1hcF9zaW5nbGUoJnJpbmctPmJjbS0+cGNpX2Rldi0+ZGV2LAorCQlwY2lfdW5tYXBfc2luZ2xlKHJpbmctPmJjbS0+cGNpX2RldiwKIAkJCQkgYWRkciwgbGVuLAotCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJCQkgUENJX0RNQV9UT0RFVklDRSk7CiAJfSBlbHNlIHsKLQkJZG1hX3VubWFwX3NpbmdsZSgmcmluZy0+YmNtLT5wY2lfZGV2LT5kZXYsCisJCXBjaV91bm1hcF9zaW5nbGUocmluZy0+YmNtLT5wY2lfZGV2LAogCQkJCSBhZGRyLCBsZW4sCi0JCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJfQogfQogCkBAIC0xODMsOCArMTgxLDggQEAKIHsKIAlhc3NlcnQoIXJpbmctPnR4KTsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZyaW5nLT5iY20tPnBjaV9kZXYtPmRldiwKLQkJCQlhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHJpbmctPmJjbS0+cGNpX2RldiwKKwkJCQkgICAgYWRkciwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogfQogCiBzdGF0aWMgaW5saW5lCkBAIC0xOTQsOCArMTkyLDggQEAKIHsKIAlhc3NlcnQoIXJpbmctPnR4KTsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKCZyaW5nLT5iY20tPnBjaV9kZXYtPmRldiwKLQkJCQkgICBhZGRyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHJpbmctPmJjbS0+cGNpX2RldiwKKwkJCQkgICAgYWRkciwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIH0KIAogLyogVW5tYXAgYW5kIGZyZWUgYSBkZXNjcmlwdG9yIGJ1ZmZlci4gKi8KQEAgLTIxNCwxNyArMjEyLDUzIEBACiAKIHN0YXRpYyBpbnQgYWxsb2NfcmluZ21lbW9yeShzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICYocmluZy0+YmNtLT5wY2lfZGV2LT5kZXYpOwotCi0JcmluZy0+ZGVzY2Jhc2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSwKLQkJCQkJICAgICYocmluZy0+ZG1hYmFzZSksIEdGUF9LRVJORUwpOworCXJpbmctPmRlc2NiYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocmluZy0+YmNtLT5wY2lfZGV2LCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSwKKwkJCQkJICAgICYocmluZy0+ZG1hYmFzZSkpOwogCWlmICghcmluZy0+ZGVzY2Jhc2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRE1BIHJpbmdtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJLyogQWxsb2NhdGlvbiBtYXkgaGF2ZSBmYWlsZWQgZHVlIHRvIHBjaV9hbGxvY19jb25zaXN0ZW50CisJCSAgIGluc2lzdGluZyBvbiB1c2Ugb2YgR0ZQX0RNQSwgd2hpY2ggaXMgbW9yZSByZXN0cmljdGl2ZQorCQkgICB0aGFuIG5lY2Vzc2FyeS4uLiAgKi8KKwkJc3RydWN0IGRtYV9kZXNjICpyeF9yaW5nOworCQlkbWFfYWRkcl90IHJ4X3JpbmdfZG1hOworCisJCXJ4X3JpbmcgPSBremFsbG9jKEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFyeF9yaW5nKQorCQkJZ290byBvdXRfZXJyOworCisJCXJ4X3JpbmdfZG1hID0gcGNpX21hcF9zaW5nbGUocmluZy0+YmNtLT5wY2lfZGV2LCByeF9yaW5nLAorCQkJCQkgICAgIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFLAorCQkJCQkgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisKKwkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihyeF9yaW5nX2RtYSkgfHwKKwkJICAgIHJ4X3JpbmdfZG1hICsgQkNNNDN4eF9ETUFfUklOR01FTVNJWkUgPiByaW5nLT5iY20tPmRtYV9tYXNrKSB7CisJCQkvKiBTaWdoLi4uICovCisJCQlpZiAoIXBjaV9kbWFfbWFwcGluZ19lcnJvcihyeF9yaW5nX2RtYSkpCisJCQkJcGNpX3VubWFwX3NpbmdsZShyaW5nLT5iY20tPnBjaV9kZXYsCisJCQkJCQkgcnhfcmluZ19kbWEsIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFLAorCQkJCQkJIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCQlyeF9yaW5nX2RtYSA9IHBjaV9tYXBfc2luZ2xlKHJpbmctPmJjbS0+cGNpX2RldiwKKwkJCQkJCSByeF9yaW5nLCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSwKKwkJCQkJCSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihyeF9yaW5nX2RtYSkgfHwKKwkJCSAgICByeF9yaW5nX2RtYSArIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFID4gcmluZy0+YmNtLT5kbWFfbWFzaykgeworCQkJCWFzc2VydCgwKTsKKwkJCQlpZiAoIXBjaV9kbWFfbWFwcGluZ19lcnJvcihyeF9yaW5nX2RtYSkpCisJCQkJCXBjaV91bm1hcF9zaW5nbGUocmluZy0+YmNtLT5wY2lfZGV2LAorCQkJCQkJCSByeF9yaW5nX2RtYSwgQkNNNDN4eF9ETUFfUklOR01FTVNJWkUsCisJCQkJCQkJIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCQkJZ290byBvdXRfZXJyOworCQkJfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJpbmctPmRlc2NiYXNlID0gcnhfcmluZzsKKyAgICAgICAgICAgICAgICByaW5nLT5kbWFiYXNlID0gcnhfcmluZ19kbWE7CiAJfQogCW1lbXNldChyaW5nLT5kZXNjYmFzZSwgMCwgQkNNNDN4eF9ETUFfUklOR01FTVNJWkUpOwogCiAJcmV0dXJuIDA7CitvdXRfZXJyOgorCXByaW50ayhLRVJOX0VSUiBQRlggIkRNQSByaW5nbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9yaW5nbWVtb3J5KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCkBAIC00MDcsNiArNDQxLDI5IEBACiAJaWYgKHVubGlrZWx5KCFza2IpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkbWFhZGRyID0gbWFwX2Rlc2NidWZmZXIocmluZywgc2tiLT5kYXRhLCByaW5nLT5yeF9idWZmZXJzaXplLCAwKTsKKwkvKiBUaGlzIGhhcmR3YXJlIGJ1ZyB3b3JrLWFyb3VuZCBhZGFwdGVkIGZyb20gdGhlIGI0NCBkcml2ZXIuCisJICAgVGhlIGNoaXAgbWF5IGJlIHVuYWJsZSB0byBkbyBQQ0kgRE1BIHRvL2Zyb20gYW55dGhpbmcgYWJvdmUgMUdCICovCisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihkbWFhZGRyKSB8fAorCSAgICBkbWFhZGRyICsgcmluZy0+cnhfYnVmZmVyc2l6ZSA+IHJpbmctPmJjbS0+ZG1hX21hc2spIHsKKwkJLyogVGhpcyBvbmUgaGFzIDMwLWJpdCBhZGRyZXNzaW5nLi4uICovCisJCWlmICghcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRtYWFkZHIpKQorCQkJcGNpX3VubWFwX3NpbmdsZShyaW5nLT5iY20tPnBjaV9kZXYsCisJCQkJCSBkbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJc2tiID0gX19kZXZfYWxsb2Nfc2tiKHJpbmctPnJ4X2J1ZmZlcnNpemUsR0ZQX0RNQSk7CisJCWlmIChza2IgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlkbWFhZGRyID0gcGNpX21hcF9zaW5nbGUocmluZy0+YmNtLT5wY2lfZGV2LAorCQkJCQkgc2tiLT5kYXRhLCByaW5nLT5yeF9idWZmZXJzaXplLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihkbWFhZGRyKSB8fAorCQkgICAgZG1hYWRkciArIHJpbmctPnJ4X2J1ZmZlcnNpemUgPiByaW5nLT5iY20tPmRtYV9tYXNrKSB7CisJCQlhc3NlcnQoMCk7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CiAJbWV0YS0+c2tiID0gc2tiOwogCW1ldGEtPmRtYWFkZHIgPSBkbWFhZGRyOwogCXNrYi0+ZGV2ID0gcmluZy0+YmNtLT5uZXRfZGV2OwpAQCAtNjM2LDggKzY5MywxMCBAQAogCWVyciA9IGRtYWNvbnRyb2xsZXJfc2V0dXAocmluZyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9yaW5nbWVtb3J5OworCXJldHVybiByaW5nOwogCiBvdXQ6CisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXJyb3IgaW4gYmNtNDN4eF9zZXR1cF9kbWFyaW5nXG4iKTsKIAlyZXR1cm4gcmluZzsKIAogZXJyX2ZyZWVfcmluZ21lbW9yeToKQEAgLTcwNSwzMCArNzY0LDE2IEBACiAJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZzsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAlpbnQgZG1hNjQgPSAwOwotCXU2NCBtYXNrID0gYmNtNDN4eF9nZXRfc3VwcG9ydGVkX2RtYV9tYXNrKGJjbSk7Ci0JaW50IG5vYml0czsKIAotCWlmIChtYXNrID09IERNQV82NEJJVF9NQVNLKSB7CisJYmNtLT5kbWFfbWFzayA9IGJjbTQzeHhfZ2V0X3N1cHBvcnRlZF9kbWFfbWFzayhiY20pOworCWlmIChiY20tPmRtYV9tYXNrID09IERNQV82NEJJVF9NQVNLKQogCQlkbWE2NCA9IDE7Ci0JCW5vYml0cyA9IDY0OwotCX0gZWxzZSBpZiAobWFzayA9PSBETUFfMzJCSVRfTUFTSykKLQkJbm9iaXRzID0gMzI7Ci0JZWxzZQotCQlub2JpdHMgPSAzMDsKLQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKGJjbS0+cGNpX2RldiwgbWFzayk7Ci0JZXJyIHw9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhiY20tPnBjaV9kZXYsIG1hc2spOwotCWlmIChlcnIpIHsKLSNpZmRlZiBDT05GSUdfQkNNNDNYWF9QSU8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkRNQSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlLiIKLQkJCQkJIiBGYWxsaW5nIGJhY2sgdG8gUElPLlxuIik7Ci0JCWJjbS0+X191c2luZ19waW8gPSAxOwotCQlyZXR1cm4gLUVOT1NZUzsKLSNlbHNlCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIkZBVEFMOiBETUEgbm90IHN1cHBvcnRlZCBhbmQgUElPIG5vdCBjb25maWd1cmVkLiAiCi0JCQkJICAgICJQbGVhc2UgcmVjb21waWxlIHRoZSBkcml2ZXIgd2l0aCBQSU8gc3VwcG9ydC5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZiAvKiBDT05GSUdfQkNNNDNYWF9QSU8gKi8KLQl9CisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhiY20tPnBjaV9kZXYsIGJjbS0+ZG1hX21hc2spOworCWlmIChlcnIpCisJCWdvdG8gbm9fZG1hOworCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhiY20tPnBjaV9kZXYsIGJjbS0+ZG1hX21hc2spOworCWlmIChlcnIpCisJCWdvdG8gbm9fZG1hOwogCiAJLyogc2V0dXAgVFggRE1BIGNoYW5uZWxzLiAqLwogCXJpbmcgPSBiY200M3h4X3NldHVwX2RtYXJpbmcoYmNtLCAwLCAxLCBkbWE2NCk7CkBAIC03NzQsNyArODE5LDkgQEAKIAkJZG1hLT5yeF9yaW5nMyA9IHJpbmc7CiAJfQogCi0JZHByaW50ayhLRVJOX0lORk8gUEZYICIlZC1iaXQgRE1BIGluaXRpYWxpemVkXG4iLCBub2JpdHMpOworCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiJWQtYml0IERNQSBpbml0aWFsaXplZFxuIiwKKwkJKGJjbS0+ZG1hX21hc2sgPT0gRE1BXzY0QklUX01BU0spID8gNjQgOgorCQkoYmNtLT5kbWFfbWFzayA9PSBETUFfMzJCSVRfTUFTSykgPyAzMiA6IDMwKTsKIAllcnIgPSAwOwogb3V0OgogCXJldHVybiBlcnI7CkBAIC04MDAsNyArODQ3LDE3IEBACiBlcnJfZGVzdHJveV90eDA6CiAJYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nMCk7CiAJZG1hLT50eF9yaW5nMCA9IE5VTEw7Ci0JZ290byBvdXQ7Citub19kbWE6CisjaWZkZWYgQ09ORklHX0JDTTQzWFhfUElPCisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkRNQSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlLiIKKwkJCQkiIEZhbGxpbmcgYmFjayB0byBQSU8uXG4iKTsKKwliY20tPl9fdXNpbmdfcGlvID0gMTsKKwlyZXR1cm4gLUVOT1NZUzsKKyNlbHNlCisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRkFUQUw6IERNQSBub3Qgc3VwcG9ydGVkIGFuZCBQSU8gbm90IGNvbmZpZ3VyZWQuICIKKwkJCSAgICAiUGxlYXNlIHJlY29tcGlsZSB0aGUgZHJpdmVyIHdpdGggUElPIHN1cHBvcnQuXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKKyNlbmRpZiAvKiBDT05GSUdfQkNNNDNYWF9QSU8gKi8KIH0KIAogLyogR2VuZXJhdGUgYSBjb29raWUgZm9yIHRoZSBUWCBoZWFkZXIuICovCkBAIC05MDUsNiArOTYyLDcgQEAKIAlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX2dlbmVyaWMgKmRlc2M7CiAJc3RydWN0IGJjbTQzeHhfZG1hZGVzY19tZXRhICptZXRhOwogCWRtYV9hZGRyX3QgZG1hYWRkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYm91bmNlX3NrYjsKIAogCWFzc2VydChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApOwogCkBAIC05MjQsOSArOTgyLDI4IEBACiAJCQkgICAgICAgc2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IGJjbTQzeHhfdHhoZHIpLAogCQkJICAgICAgIChjdXJfZnJhZyA9PSAwKSwKIAkJCSAgICAgICBnZW5lcmF0ZV9jb29raWUocmluZywgc2xvdCkpOworCWRtYWFkZHIgPSBtYXBfZGVzY2J1ZmZlcihyaW5nLCBza2ItPmRhdGEsIHNrYi0+bGVuLCAxKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZG1hYWRkcikgfHwgZG1hYWRkciArIHNrYi0+bGVuID4gcmluZy0+YmNtLT5kbWFfbWFzaykgeworCQkvKiBjaGlwIGNhbm5vdCBoYW5kbGUgRE1BIHRvL2Zyb20gPiAxR0IsIHVzZSBib3VuY2UgYnVmZmVyIChjb3BpZWQgZnJvbSBiNDQgZHJpdmVyKSAqLworCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKGRtYWFkZHIpKQorCQkJdW5tYXBfZGVzY2J1ZmZlcihyaW5nLCBkbWFhZGRyLCBza2ItPmxlbiwgMSk7CisJCWJvdW5jZV9za2IgPSBfX2Rldl9hbGxvY19za2Ioc2tiLT5sZW4sIEdGUF9BVE9NSUN8R0ZQX0RNQSk7CisJCWlmICghYm91bmNlX3NrYikKKwkJCXJldHVybjsKKwkJZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIGJvdW5jZV9za2ItPmRhdGEsIGJvdW5jZV9za2ItPmxlbiwgMSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihkbWFhZGRyKSB8fCBkbWFhZGRyICsgc2tiLT5sZW4gPiByaW5nLT5iY20tPmRtYV9tYXNrKSB7CisJCQlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKGRtYWFkZHIpKQorCQkJCXVubWFwX2Rlc2NidWZmZXIocmluZywgZG1hYWRkciwgc2tiLT5sZW4sIDEpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoYm91bmNlX3NrYik7CisJCQlhc3NlcnQoMCk7CisJCQlyZXR1cm47CisJCX0KKwkJbWVtY3B5KHNrYl9wdXQoYm91bmNlX3NrYiwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJc2tiID0gYm91bmNlX3NrYjsKKwl9CiAKIAltZXRhLT5za2IgPSBza2I7Ci0JZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIDEpOwogCW1ldGEtPmRtYWFkZHIgPSBkbWFhZGRyOwogCiAJZmlsbF9kZXNjcmlwdG9yKHJpbmcsIGRlc2MsIGRtYWFkZHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfaWx0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfaWx0LmMKaW5kZXggYWQ4ZTU2OS4uZjJiOGRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2lsdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9pbHQuYwpAQCAtMzI1LDYgKzMyNSwyMSBAQAogCX0KIH0KIAordm9pZCBiY200M3h4X2lsdF93cml0ZTMyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCwgdTMyIHZhbCkKK3sKKwlpZiAoYmNtNDN4eF9jdXJyZW50X3BoeShiY20pLT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9BKSB7CisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfQ1RSTCwgb2Zmc2V0KTsKKwkJbW1pb3diKCk7CisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfREFUQTIsICh2YWwgJiAweEZGRkYwMDAwKSA+PiAxNik7CisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0FfREFUQTEsIHZhbCAmIDB4MDAwMEZGRkYpOworCX0gZWxzZSB7CisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0dfQ1RSTCwgb2Zmc2V0KTsKKwkJbW1pb3diKCk7CisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0dfREFUQTIsICh2YWwgJiAweEZGRkYwMDAwKSA+PiAxNik7CisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgQkNNNDN4eF9QSFlfSUxUX0dfREFUQTEsIHZhbCAmIDB4MDAwMEZGRkYpOworCX0KK30KKwogdTE2IGJjbTQzeHhfaWx0X3JlYWQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgb2Zmc2V0KQogewogCWlmIChiY200M3h4X2N1cnJlbnRfcGh5KGJjbSktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0EpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9pbHQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9pbHQuaAppbmRleCA0NjQ1MjFhLi5kN2VhZjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfaWx0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2lsdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKIAogdm9pZCBiY200M3h4X2lsdF93cml0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBvZmZzZXQsIHUxNiB2YWwpOwordm9pZCBiY200M3h4X2lsdF93cml0ZTMyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCwgdTMyIHZhbCk7CiB1MTYgYmNtNDN4eF9pbHRfcmVhZChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBvZmZzZXQpOwogCiAjZW5kaWYgLyogQkNNNDN4eF9JTFRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCmluZGV4IDIzYWFmMWUuLjczYzgzMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYwpAQCAtOTUsMTMgKzk1LDkgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChub2xlZHMsIG1vZHBhcmFtX25vbGVkcywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9sZWRzLCAiVHVybiBvZmYgYWxsIExFRCBhY3Rpdml0eSIpOwogCi0jaWZkZWYgQ09ORklHX0JDTTQzWFhfREVCVUcKIHN0YXRpYyBjaGFyIG1vZHBhcmFtX2Z3cG9zdGZpeFs2NF07CiBtb2R1bGVfcGFyYW1fc3RyaW5nKGZ3cG9zdGZpeCwgbW9kcGFyYW1fZndwb3N0Zml4LCA2NCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZ3cG9zdGZpeCwgIlBvc3RmaXggZm9yIC5mdyBmaWxlcy4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcuIik7Ci0jZWxzZQotIyBkZWZpbmUgbW9kcGFyYW1fZndwb3N0Zml4ICAiIgotI2VuZGlmIC8qIENPTkZJR19CQ000M1hYX0RFQlVHKi8KK01PRFVMRV9QQVJNX0RFU0MoZndwb3N0Zml4LCAiUG9zdGZpeCBmb3IgLmZ3IGZpbGVzLiBVc2VmdWwgZm9yIHVzaW5nIG11bHRpcGxlIGZpcm13YXJlIGltYWdlIHZlcnNpb25zLiIpOwogCiAKIC8qIElmIHlvdSB3YW50IHRvIGRlYnVnIHdpdGgganVzdCBhIHNpbmdsZSBkZXZpY2UsIGVuYWJsZSB0aGlzLApAQCAtODU1LDggKzg1MSw2IEBACiAJdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX0VUSFBIWV07CiAJYmNtLT5zcHJvbS5ldDBwaHlhZGRyID0gKHZhbHVlICYgMHgwMDFGKTsKIAliY20tPnNwcm9tLmV0MXBoeWFkZHIgPSAodmFsdWUgJiAweDAzRTApID4+IDU7Ci0JYmNtLT5zcHJvbS5ldDBtZGNwb3J0ID0gKHZhbHVlICYgKDEgPDwgMTQpKSA+PiAxNDsKLQliY20tPnNwcm9tLmV0MW1kY3BvcnQgPSAodmFsdWUgJiAoMSA8PCAxNSkpID4+IDE1OwogCiAJLyogYm9hcmRyZXYsIGFudGVubmFzLCBsb2NhbGUgKi8KIAl2YWx1ZSA9IHNwcm9tW0JDTTQzeHhfU1BST01fQk9BUkRSRVZdOwpAQCAtMTQ1MywxMiArMTQ0NywxMCBAQAogCiAJCWJjbTQzeHhfZGVidWdmc19sb2dfdHhzdGF0KGJjbSwgJnN0YXQpOwogCi0JCWlmIChzdGF0LmZsYWdzICYgQkNNNDN4eF9UWFNUQVRfRkxBR19JR05PUkUpCisJCWlmIChzdGF0LmZsYWdzICYgQkNNNDN4eF9UWFNUQVRfRkxBR19BTVBEVSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIShzdGF0LmZsYWdzICYgQkNNNDN4eF9UWFNUQVRfRkxBR19BQ0spKSB7Ci0JCQkvL1RPRE86IHBhY2tldCB3YXMgbm90IGFja2VkICh3YXMgbG9zdCkKLQkJfQotCQkvL1RPRE86IFRoZXJlIGFyZSBtb3JlICh1bmtub3duKSBmbGFncyB0byB0ZXN0LiBzZWUgYmNtNDN4eF9tYWluLmgKKwkJaWYgKHN0YXQuZmxhZ3MgJiBCQ000M3h4X1RYU1RBVF9GTEFHX0lOVEVSKQorCQkJY29udGludWU7CiAKIAkJaWYgKGJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpCiAJCQliY200M3h4X3Bpb19oYW5kbGVfeG1pdHN0YXR1cyhiY20sICZzdGF0KTsKQEAgLTI5ODMsOCArMjk3NSwxMCBAQAogCWVyciA9IGJjbTQzeHhfcGN0bF9zZXRfY3J5c3RhbChiY20sIDEpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwotCWJjbTQzeHhfcGNpX3JlYWRfY29uZmlnMTYoYmNtLCBQQ0lfU1RBVFVTLCAmcGNpX3N0YXR1cyk7Ci0JYmNtNDN4eF9wY2lfd3JpdGVfY29uZmlnMTYoYmNtLCBQQ0lfU1RBVFVTLCBwY2lfc3RhdHVzICYgflBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCk7CisJZXJyID0gYmNtNDN4eF9wY2lfcmVhZF9jb25maWcxNihiY20sIFBDSV9TVEFUVVMsICZwY2lfc3RhdHVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwllcnIgPSBiY200M3h4X3BjaV93cml0ZV9jb25maWcxNihiY20sIFBDSV9TVEFUVVMsIHBjaV9zdGF0dXMgJiB+UENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUKTsKIAogb3V0OgogCXJldHVybiBlcnI7CkBAIC0zNjk4LDcgKzM2OTIsNyBAQAogewogCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKIAl1MTYgdmFsdWU7Ci0JdTggcGh5X3ZlcnNpb247CisJdTggcGh5X2FuYWxvZzsKIAl1OCBwaHlfdHlwZTsKIAl1OCBwaHlfcmV2OwogCWludCBwaHlfcmV2X29rID0gMTsKQEAgLTM3MDYsMTIgKzM3MDAsMTIgQEAKIAogCXZhbHVlID0gYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fUEhZX1ZFUik7CiAKLQlwaHlfdmVyc2lvbiA9ICh2YWx1ZSAmIDB4RjAwMCkgPj4gMTI7CisJcGh5X2FuYWxvZyA9ICh2YWx1ZSAmIDB4RjAwMCkgPj4gMTI7CiAJcGh5X3R5cGUgPSAodmFsdWUgJiAweDBGMDApID4+IDg7CiAJcGh5X3JldiA9ICh2YWx1ZSAmIDB4MDAwRik7CiAKLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkRldGVjdGVkIFBIWTogVmVyc2lvbjogJXgsIFR5cGUgJXgsIFJldmlzaW9uICV4XG4iLAotCQlwaHlfdmVyc2lvbiwgcGh5X3R5cGUsIHBoeV9yZXYpOworCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiRGV0ZWN0ZWQgUEhZOiBBbmFsb2c6ICV4LCBUeXBlICV4LCBSZXZpc2lvbiAleFxuIiwKKwkJcGh5X2FuYWxvZywgcGh5X3R5cGUsIHBoeV9yZXYpOwogCiAJc3dpdGNoIChwaHlfdHlwZSkgewogCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0E6CkBAIC0zNzU0LDcgKzM3NDgsNyBAQAogCQkgICAgICAgcGh5X3Jldik7CiAJfQogCi0JcGh5LT52ZXJzaW9uID0gcGh5X3ZlcnNpb247CisJcGh5LT5hbmFsb2cgPSBwaHlfYW5hbG9nOwogCXBoeS0+dHlwZSA9IHBoeV90eXBlOwogCXBoeS0+cmV2ID0gcGh5X3JldjsKIAlpZiAoKHBoeV90eXBlID09IEJDTTQzeHhfUEhZVFlQRV9CKSB8fCAocGh5X3R5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cpKSB7CkBAIC0zNzk2LDEyICszNzkwLDE4IEBACiAJfQogCW5ldF9kZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJjbS0+bW1pb19hZGRyOwogCi0JYmNtNDN4eF9wY2lfcmVhZF9jb25maWcxNihiY20sIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELAorCWVyciA9IGJjbTQzeHhfcGNpX3JlYWRfY29uZmlnMTYoYmNtLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICZiY20tPmJvYXJkX3ZlbmRvcik7Ci0JYmNtNDN4eF9wY2lfcmVhZF9jb25maWcxNihiY20sIFBDSV9TVUJTWVNURU1fSUQsCisJaWYgKGVycikKKwkJZ290byBlcnJfaW91bm1hcDsKKwllcnIgPSBiY200M3h4X3BjaV9yZWFkX2NvbmZpZzE2KGJjbSwgUENJX1NVQlNZU1RFTV9JRCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICZiY20tPmJvYXJkX3R5cGUpOwotCWJjbTQzeHhfcGNpX3JlYWRfY29uZmlnMTYoYmNtLCBQQ0lfUkVWSVNJT05fSUQsCisJaWYgKGVycikKKwkJZ290byBlcnJfaW91bm1hcDsKKwllcnIgPSBiY200M3h4X3BjaV9yZWFkX2NvbmZpZzE2KGJjbSwgUENJX1JFVklTSU9OX0lELAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgJmJjbS0+Ym9hcmRfcmV2aXNpb24pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2lvdW5tYXA7CiAKIAllcnIgPSBiY200M3h4X2NoaXBzZXRfYXR0YWNoKGJjbSk7CiAJaWYgKGVycikKQEAgLTM4OTIsNiArMzg5Miw3IEBACiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lfZGV2KTsKIGVycl9wY2lfZGlzYWJsZToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5hYmxlIHRvIGF0dGFjaCBib2FyZFxuIik7CiAJZ290byBvdXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYwppbmRleCA1MmNlMmE5Li4zYTVjOWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3BoeS5jCkBAIC0yMDUsOCArMjA1LDggQEAKIAkgICAgKGJjbS0+Ym9hcmRfdHlwZSA9PSAweDA0MTYpKQogCQlyZXR1cm47CiAKLQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTYsIGJjbTQzeHhfcmVhZDE2KGJjbSwgMHgwM0U2KSAmIDB4RkZERik7CiAJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjgsIDB4ODAxOCk7CisJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0U2LCBiY200M3h4X3JlYWQxNihiY20sIDB4MDNFNikgJiAweEZGREYpOwogCiAJaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRykgewogCQlpZiAoIXBoeS0+Y29ubmVjdGVkKQpAQCAtMzE3LDYgKzMxNywxMyBAQAogCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgb2Zmc2V0ICsgMHgwODAxLCA3KTsKIAliY200M3h4X2lsdF93cml0ZShiY20sIG9mZnNldCArIDB4MDgwMiwgMTYpOwogCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgb2Zmc2V0ICsgMHgwODAzLCAyOCk7CisKKwlpZiAocGh5LT5yZXYgPj0gNikgeworCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyNiwgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MjYpCisJCQkJICAmIDB4RkZGQykpOworCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyNiwgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0MjYpCisJCQkJICAmIDB4RUZGRikpOworCX0KIH0KIAogc3RhdGljIHZvaWQgYmNtNDN4eF9waHlfc2V0dXBnKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKQEAgLTMzNyw3ICszNDQsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9JTFRfTk9JU0VHMV9TSVpFOyBpKyspCiAJCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MTgwMCArIGksIGJjbTQzeHhfaWx0X25vaXNlZzFbaV0pOwogCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9JTFRfUk9UT1JfU0laRTsgaSsrKQotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDIwMDAgKyBpLCBiY200M3h4X2lsdF9yb3RvcltpXSk7CisJCQliY200M3h4X2lsdF93cml0ZTMyKGJjbSwgMHgyMDAwICsgaSwgYmNtNDN4eF9pbHRfcm90b3JbaV0pOwogCX0gZWxzZSB7CiAJCS8qIG5yc3NpIHZhbHVlcyBhcmUgc2lnbmVkIDYtYml0IHZhbHVlcy4gTm90IHN1cmUgd2h5IHdlIHdyaXRlIDB4NzY1NCBoZXJlLi4uICovCiAJCWJjbTQzeHhfbnJzc2lfaHdfd3JpdGUoYmNtLCAweEJBOTgsIChzMTYpMHg3NjU0KTsKQEAgLTM3Nyw3ICszODQsNyBAQAogCQogCWlmIChwaHktPnJldiA9PSAxKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X0lMVF9SRVRBUkRfU0laRTsgaSsrKQotCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDI0MDAgKyBpLCBiY200M3h4X2lsdF9yZXRhcmRbaV0pOworCQkJYmNtNDN4eF9pbHRfd3JpdGUzMihiY20sIDB4MjQwMCArIGksIGJjbTQzeHhfaWx0X3JldGFyZFtpXSk7CiAJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHg1NDA0ICsgaSwgMHgwMDIwKTsKIAkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHg1NDA4ICsgaSwgMHgwMDIwKTsKQEAgLTUwMCwxMCArNTA3LDEwIEBACiAJCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X0lMVF9OT0lTRUEyX1NJWkU7IGkrKykKIAkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgxODAwICsgaSwgYmNtNDN4eF9pbHRfbm9pc2VhMltpXSk7CiAJCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X0lMVF9ST1RPUl9TSVpFOyBpKyspCi0JCQliY200M3h4X2lsdF93cml0ZShiY20sIDB4MjAwMCArIGksIGJjbTQzeHhfaWx0X3JvdG9yW2ldKTsKKwkJCWJjbTQzeHhfaWx0X3dyaXRlMzIoYmNtLCAweDIwMDAgKyBpLCBiY200M3h4X2lsdF9yb3RvcltpXSk7CiAJCWJjbTQzeHhfcGh5X2luaXRfbm9pc2VzY2FsZXRibChiY20pOwogCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9JTFRfUkVUQVJEX1NJWkU7IGkrKykKLQkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgyNDAwICsgaSwgYmNtNDN4eF9pbHRfcmV0YXJkW2ldKTsKKwkJCWJjbTQzeHhfaWx0X3dyaXRlMzIoYmNtLCAweDI0MDAgKyBpLCBiY200M3h4X2lsdF9yZXRhcmRbaV0pOwogCQlicmVhazsKIAljYXNlIDM6CiAJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQpAQCAtNzI5LDE5ICs3MzYsMTkgQEAKIAlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7CiAJc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwogCXUxNiBvZmZzZXQ7CisJdTE2IHZhbHVlOworCXU4IG9sZF9jaGFubmVsOwogCi0JaWYgKHBoeS0+dmVyc2lvbiA9PSAxICYmCi0JICAgIHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkgeworCWlmIChwaHktPmFuYWxvZyA9PSAxKQogCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCiAJCQkJICAgICAgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0EpCiAJCQkJICAgICAgfCAweDAwNTApOwotCX0KIAlpZiAoKGJjbS0+Ym9hcmRfdmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQlJPQURDT00pICYmCiAJICAgIChiY20tPmJvYXJkX3R5cGUgIT0gMHgwNDE2KSkgeworCQl2YWx1ZSA9IDB4MjEyMDsKIAkJZm9yIChvZmZzZXQgPSAweDAwQTggOyBvZmZzZXQgPCAweDAwQzc7IG9mZnNldCsrKSB7Ci0JCQliY200M3h4X3BoeV93cml0ZShiY20sIG9mZnNldCwKLQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIG9mZnNldCkgKyAweDIwMjApCi0JCQkJCSAgJiAweDNGM0YpOworCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCBvZmZzZXQsIHZhbHVlKTsKKwkJCXZhbHVlICs9IDB4MDIwMjsKIAkJfQogCX0KIAliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzNSwKQEAgLTc1MCw3ICs3NTcsNyBAQAogCWlmIChyYWRpby0+dmVyc2lvbiA9PSAweDIwNTApCiAJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDM4LCAweDA2NjcpOwogCi0JaWYgKHBoeS0+Y29ubmVjdGVkKSB7CisJaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRykgewogCQlpZiAocmFkaW8tPnZlcnNpb24gPT0gMHgyMDUwKSB7CiAJCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCiAJCQkJCSAgICAgIGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDdBKQpAQCAtNzc2LDcgKzc4Myw3IEBACiAJCQkJICBiY200M3h4X3BoeV9yZWFkKGJjbSwgQkNNNDN4eF9QSFlfUkFESU9fQklURklFTEQpIHwgKDEgPDwgMTEpKTsKIAl9CiAKLQlpZiAocGh5LT52ZXJzaW9uID09IDEgJiYgcmFkaW8tPnZlcnNpb24gPT0gMHgyMDUwKSB7CisJaWYgKHBoeS0+YW5hbG9nID09IDEpIHsKIAkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjYsIDB4Q0UwMCk7CiAJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDIxLCAweDM3NjMpOwogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyMiwgMHgxQkMzKTsKQEAgLTc4NywxNCArNzk0LDE1IEBACiAJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMzAsIDB4MDBDNik7CiAJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0VDLCAweDNGMjIpOwogCi0JaWYgKHBoeS0+dmVyc2lvbiA9PSAxICYmIHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkKKwlpZiAocGh5LT5hbmFsb2cgPT0gMSkKIAkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMjAsIDB4M0UxQyk7CiAJZWxzZQogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyMCwgMHgzMDFDKTsKIAotCWlmIChwaHktPnZlcnNpb24gPT0gMCkKKwlpZiAocGh5LT5hbmFsb2cgPT0gMCkKIAkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0U0LCAweDMwMDApOwogCisJb2xkX2NoYW5uZWwgPSByYWRpby0+Y2hhbm5lbDsKIAkvKiBGb3JjZSB0byBjaGFubmVsIDcsIGV2ZW4gaWYgbm90IHN1cHBvcnRlZC4gKi8KIAliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCA3LCAwKTsKIApAQCAtODE2LDExICs4MjQsMTEgQEAKIAogCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QSwgYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0EpIHwgMHgwMDA3KTsKIAotCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIEJDTTQzeHhfUkFESU9fREVGQVVMVF9DSEFOTkVMX0JHLCAwKTsKKwliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCBvbGRfY2hhbm5lbCwgMCk7CiAKIAliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNCwgMHgwMDgwKTsKIAliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzMiwgMHgwMENBKTsKLQliY200M3h4X3BoeV93cml0ZShiY20sIDB4ODhBMywgMHgwMDJBKTsKKwliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyQSwgMHg4OEEzKTsKIAogCWJjbTQzeHhfcmFkaW9fc2V0X3R4cG93ZXJfYmcoYmNtLCAweEZGRkYsIDB4RkZGRiwgMHhGRkZGKTsKIApAQCAtODM1LDYxICs4NDMsMjQgQEAKIAlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7CiAJc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwogCXUxNiBvZmZzZXQsIHZhbDsKKwl1OCBvbGRfY2hhbm5lbDsKIAogCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDNFLCAweDgxN0EpOwogCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3QSwKIAkgICAgICAgICAgICAgICAgICAgICAgKGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDdBKSB8IDB4MDA1OCkpOwotCWlmICgocmFkaW8tPm1hbnVmYWN0ID09IDB4MTdGKSAmJgotCSAgICAocmFkaW8tPnZlcnNpb24gPT0gMHgyMDUwKSAmJgotCSAgICAocmFkaW8tPnJldmlzaW9uID09IDMgfHwKLQkgICAgIHJhZGlvLT5yZXZpc2lvbiA9PSA0IHx8Ci0JICAgICByYWRpby0+cmV2aXNpb24gPT0gNSkpIHsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUxLCAweDAwMUYpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIDB4MDA0MCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MywgMHgwMDVCKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDU0LCAweDAwOTgpOworCWlmIChyYWRpby0+cmV2aXNpb24gPT0gNCB8fAorCSAgICAgcmFkaW8tPnJldmlzaW9uID09IDUpIHsKKwkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUxLCAweDAwMzcpOworCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIDB4MDA3MCk7CisJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MywgMHgwMEIzKTsKKwkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDU0LCAweDAwOUIpOwogCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUEsIDB4MDA4OCk7CiAJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1QiwgMHgwMDg4KTsKIAkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVELCAweDAwODgpOwogCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUUsIDB4MDA4OCk7CiAJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3RCwgMHgwMDg4KTsKIAl9Ci0JaWYgKChyYWRpby0+bWFudWZhY3QgPT0gMHgxN0YpICYmCi0JICAgIChyYWRpby0+dmVyc2lvbiA9PSAweDIwNTApICYmCi0JICAgIChyYWRpby0+cmV2aXNpb24gPT0gNikpIHsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUxLCAweDAwMDApOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIDB4MDA0MCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MywgMHgwMEI3KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDU0LCAweDAwOTgpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUEsIDB4MDA4OCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1QiwgMHgwMDhCKTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVDLCAweDAwQjUpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUQsIDB4MDA4OCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1RSwgMHgwMDg4KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdELCAweDAwODgpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0MsIDB4MDAwMSk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3RSwgMHgwMDA4KTsKLQl9Ci0JaWYgKChyYWRpby0+bWFudWZhY3QgPT0gMHgxN0YpICYmCi0JICAgIChyYWRpby0+dmVyc2lvbiA9PSAweDIwNTApICYmCi0JICAgIChyYWRpby0+cmV2aXNpb24gPT0gNykpIHsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUxLCAweDAwMDApOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTIsIDB4MDA0MCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MywgMHgwMEI3KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDU0LCAweDAwOTgpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUEsIDB4MDA4OCk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1QiwgMHgwMEE4KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVDLCAweDAwNzUpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUQsIDB4MDBGNSk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1RSwgMHgwMEI4KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdELCAweDAwRTgpOwotCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0MsIDB4MDAwMSk7Ci0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3RSwgMHgwMDA4KTsKLQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdCLCAweDAwMDApOwotCX0KLQlpZiAoKHJhZGlvLT5tYW51ZmFjdCA9PSAweDE3RikgJiYKLQkgICAgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkgJiYKLQkgICAgKHJhZGlvLT5yZXZpc2lvbiA9PSA4KSkgeworCWlmIChyYWRpby0+cmV2aXNpb24gPT0gOCkgewogCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTEsIDB4MDAwMCk7CiAJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MiwgMHgwMDQwKTsKIAkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUzLCAweDAwQjcpOwpAQCAtOTMzLDIwICs5MDQsMjYgQEAKIAkJICAgICAgICAgICAgICAgICAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgwMikgfCAweDAxMDApOwogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQyQiwKIAkJICAgICAgICAgICAgICAgICAgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQyQikgfCAweDIwMDApOworCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4NUIsIDB4MDAwMCk7CisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHg1QywgMHgwMDAwKTsKIAl9CiAKLQkvKiBGb3JjZSB0byBjaGFubmVsIDcsIGV2ZW4gaWYgbm90IHN1cHBvcnRlZC4gKi8KLQliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCA3LCAwKTsKKwlvbGRfY2hhbm5lbCA9IHJhZGlvLT5jaGFubmVsOworCWlmIChvbGRfY2hhbm5lbCA+PSA4KQorCQliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCAxLCAwKTsKKwllbHNlCisJCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIDEzLCAwKTsKIAogCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1MCwgMHgwMDIwKTsKIAliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTAsIDB4MDAyMyk7CiAJdWRlbGF5KDQwKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0MsIChiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QykgfCAweDAwMDIpKTsKLQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNTAsIDB4MDAyMCk7Ci0JaWYgKHJhZGlvLT5tYW51ZmFjdCA9PSAweDE3RiAmJgotCSAgICByYWRpby0+dmVyc2lvbiA9PSAweDIwNTAgJiYKLQkgICAgcmFkaW8tPnJldmlzaW9uIDw9IDIpIHsKKwlpZiAocmFkaW8tPnJldmlzaW9uIDwgNiB8fCByYWRpby0+IHJldmlzaW9uID09IDgpIHsKKwkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdDLCAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwN0MpCisJCQkJICAgICAgfCAweDAwMDIpKTsKIAkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUwLCAweDAwMjApOworCX0KKwlpZiAocmFkaW8tPnJldmlzaW9uIDw9IDIpIHsKKwkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDdDLCAweDAwMjApOwogCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUEsIDB4MDA3MCk7CiAJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA1QiwgMHgwMDdCKTsKIAkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVDLCAweDAwQjApOwpAQCAtOTU0LDQ2ICs5MzEsNDEgQEAKIAliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwN0EsCiAJICAgICAgICAgICAgICAgICAgICAgIChiY200M3h4X3JhZGlvX3JlYWQxNihiY20sIDB4MDA3QSkgJiAweDAwRjgpIHwgMHgwMDA3KTsKIAotCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIEJDTTQzeHhfUkFESU9fREVGQVVMVF9DSEFOTkVMX0JHLCAwKTsKKwliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCBvbGRfY2hhbm5lbCwgMCk7CiAKIAliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNCwgMHgwMjAwKTsKLQlpZiAocmFkaW8tPnZlcnNpb24gPT0gMHgyMDUwKXsKLQkJaWYgKHJhZGlvLT5yZXZpc2lvbiA9PSAzIHx8Ci0JCSAgICByYWRpby0+cmV2aXNpb24gPT0gNCB8fAotCQkgICAgcmFkaW8tPnJldmlzaW9uID09IDUpCi0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyQSwgMHg4QUMwKTsKLQkJZWxzZQotCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkEsIDB4ODhDMik7Ci0JfQorCWlmIChyYWRpby0+cmV2aXNpb24gPj0gNikKKwkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkEsIDB4ODhDMik7CisJZWxzZQorCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAyQSwgMHg4QUMwKTsKIAliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzOCwgMHgwNjY4KTsKIAliY200M3h4X3JhZGlvX3NldF90eHBvd2VyX2JnKGJjbSwgMHhGRkZGLCAweEZGRkYsIDB4RkZGRik7Ci0JaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCkgewotCQlpZiAocmFkaW8tPnJldmlzaW9uID09IDMgfHwKLQkJICAgIHJhZGlvLT5yZXZpc2lvbiA9PSA0IHx8Ci0JCSAgICByYWRpby0+cmV2aXNpb24gPT0gNSkKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDVELCBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDVEKSB8IDB4MDAwMyk7Ci0JCWVsc2UgaWYgKHJhZGlvLT5yZXZpc2lvbiA8PSAyKQotCQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDVELCAweDAwMEQpOwotCX0KKwlpZiAocmFkaW8tPnJldmlzaW9uIDw9IDUpCisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDVELCBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDVEKSB8IDB4MDAwMyk7CisJaWYgKHJhZGlvLT5yZXZpc2lvbiA8PSAyKQorCQliY200M3h4X3JhZGlvX3dyaXRlMTYoYmNtLCAweDAwNUQsIDB4MDAwRCk7CiAJCi0JaWYgKHBoeS0+cmV2ID09IDQpCi0JCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDAyLCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAwMikgJiAweEZGQzApIHwgMHgwMDA0KTsKLQllbHNlCisJaWYgKHBoeS0+YW5hbG9nID09IDQpewogCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTQsIDB4MDAwOSk7CisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHg2MSwgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4NjEpICYgMHhGRkYpOworCX0gZWxzZSB7CisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDAyLCAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDAwMikgJiAweEZGQzApIHwgMHgwMDA0KTsKKwl9CisJaWYgKHBoeS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRykKKwkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0U2LCAweDApOwogCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0IpIHsKIAkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0U2LCAweDgxNDApOwogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNiwgMHgwNDEwKTsKIAkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTcsIDB4MDgyMCk7CiAJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDYyLCAweDAwMDcpOwogCQkodm9pZCkgYmNtNDN4eF9yYWRpb19jYWxpYnJhdGlvbnZhbHVlKGJjbSk7Ci0JCWJjbTQzeHhfcGh5X2xvX2JfbWVhc3VyZShiY20pOworCQliY200M3h4X3BoeV9sb19nX21lYXN1cmUoYmNtKTsKIAkJaWYgKGJjbS0+c3Byb20uYm9hcmRmbGFncyAmIEJDTTQzeHhfQkZMX1JTU0kpIHsKIAkJCWJjbTQzeHhfY2FsY19ucnNzaV9zbG9wZShiY20pOwogCQkJYmNtNDN4eF9jYWxjX25yc3NpX3RocmVzaG9sZChiY20pOwogCQl9CiAJCWJjbTQzeHhfcGh5X2luaXRfcGN0bChiY20pOwotCX0gZWxzZQotCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTYsIDB4MCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBiY200M3h4X2NhbGNfbG9vcGJhY2tfZ2FpbihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCkBAIC0xMDYzLDcgKzEwMzUsNyBAQAogCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDVBLCAweDA3ODApOwogCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU5LCAweEM4MTApOwogCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDU4LCAweDAwMEQpOwotCWlmIChwaHktPnZlcnNpb24gPT0gMCkgeworCWlmIChwaHktPmFuYWxvZyA9PSAwKSB7CiAJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDAzLCAweDAxMjIpOwogCX0gZWxzZSB7CiAJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDBBLApAQCAtMTIwNSwyNyArMTE3NywzMCBAQAogCWlmIChwaHktPnJldiA+PSAyKSB7CiAJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODE0LCAweDAwMDApOwogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxNSwgMHgwMDAwKTsKLQkJaWYgKHBoeS0+cmV2ID09IDIpCi0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMSwgMHgwMDAwKTsKLQkJZWxzZSBpZiAocGh5LT5yZXYgPj0gMykKLQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODExLCAweDA0MDApOworCX0KKwlpZiAocGh5LT5yZXYgPT0gMikgeworCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMSwgMHgwMDAwKTsKIAkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIDB4MDBDMCk7Ci0JCWlmIChwaHktPmNvbm5lY3RlZCkgewotCQkJdG1wID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQwMCkgJiAweEZGOwotCQkJaWYgKHRtcCA8IDYpIHsKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRDMiwgMHgxODE2KTsKLQkJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRDMywgMHg4MDA2KTsKLQkJCQlpZiAodG1wICE9IDMpIHsKLQkJCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0Q0MsCi0JCQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRDQykKLQkJCQkJCQkgICAmIDB4MDBGRikgfCAweDFGMDApOwotCQkJCX0KKwl9CisJaWYgKHBoeS0+cmV2ID49IDMpIHsKKwkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA4MTEsIDB4MDQwMCk7CisJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDE1LCAweDAwQzApOworCX0KKwlpZiAocGh5LT5jb25uZWN0ZWQpIHsKKwkJdG1wID0gYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQwMCkgJiAweEZGOworCQlpZiAodG1wIDwgNikgeworCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0QzIsIDB4MTgxNik7CisJCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDRDMywgMHg4MDA2KTsKKwkJCWlmICh0bXAgIT0gMykgeworCQkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwNENDLAorCQkJCQkJICAoYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDRDQykKKwkJCQkJCSAgICYgMHgwMEZGKSB8IDB4MUYwMCk7CiAJCQl9CiAJCX0KIAl9CiAJaWYgKHBoeS0+cmV2IDwgMyAmJiBwaHktPmNvbm5lY3RlZCkKIAkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDA0N0UsIDB4MDA3OCk7Ci0JaWYgKHBoeS0+cmV2ID49IDYgJiYgcGh5LT5yZXYgPD0gOCkgeworCWlmIChyYWRpby0+cmV2aXNpb24gPT0gOCkgewogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgwMSwgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDgwMSkgfCAweDAwODApOwogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDQzRSwgYmNtNDN4eF9waHlfcmVhZChiY20sIDB4MDQzRSkgfCAweDAwMDQpOwogCX0KQEAgLTE2MzgsMTQgKzE2MTMsMTQgQEAKIAlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7CiAJdTE2IHZhbHVlOwogCi0JaWYgKHBoeS0+dmVyc2lvbiA9PSAwKSB7CisJaWYgKHBoeS0+YW5hbG9nID09IDApIHsKIAkJdmFsdWUgPSAoYmNtNDN4eF9yZWFkMTYoYmNtLCAweDAzRTYpICYgMHhGRkYwKTsKIAkJdmFsdWUgfD0gKGJhc2ViYW5kX2F0dGVudWF0aW9uICYgMHgwMDBGKTsKIAkJYmNtNDN4eF93cml0ZTE2KGJjbSwgMHgwM0U2LCB2YWx1ZSk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAocGh5LT52ZXJzaW9uID4gMSkgeworCWlmIChwaHktPmFuYWxvZyA+IDEpIHsKIAkJdmFsdWUgPSBiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDYwKSAmIH4weDAwM0M7CiAJCXZhbHVlIHw9IChiYXNlYmFuZF9hdHRlbnVhdGlvbiA8PCAyKSAmIDB4MDAzQzsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3JhZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcmFkaW8uYwppbmRleCBhZjE5YTA3Li4zMmJlYjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcmFkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcmFkaW8uYwpAQCAtMTM5MywxMSArMTM5MywxMiBAQAogCWJhY2t1cFsxMl0gPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19DSEFOTkVMX0VYVCk7CiAKIAkvLyBJbml0aWFsaXphdGlvbgotCWlmIChwaHktPnZlcnNpb24gPT0gMCkgeworCWlmIChwaHktPmFuYWxvZyA9PSAwKSB7CiAJCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDNFNiwgMHgwMTIyKTsKIAl9IGVsc2UgewotCQlpZiAocGh5LT52ZXJzaW9uID49IDIpCi0JCQliY200M3h4X3dyaXRlMTYoYmNtLCAweDAzRTYsIDB4MDA0MCk7CisJCWlmIChwaHktPmFuYWxvZyA+PSAyKQorCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMDMsIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDAzKQorCQkJCQkmIDB4RkZCRikgfCAweDAwNDApOwogCQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fQ0hBTk5FTF9FWFQsCiAJCSAgICAgICAgICAgICAgICAoYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fQ0hBTk5FTF9FWFQpIHwgMHgyMDAwKSk7CiAJfQpAQCAtMTQwNSw3ICsxNDA2LDcgQEAKIAlyZXQgPSBiY200M3h4X3JhZGlvX2NhbGlicmF0aW9udmFsdWUoYmNtKTsKIAogCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0IpCi0JCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA3OCwgMHgwMDAzKTsKKwkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDc4LCAweDAwMjYpOwogCiAJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIDB4QkZBRik7CiAJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkIsIDB4MTQwMyk7CkBAIC0xNDE2LDcgKzE0MTcsNyBAQAogCSAgICAgICAgICAgICAgICAgICAgICAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNTEpIHwgMHgwMDA0KSk7CiAJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUyLCAweDAwMDApOwogCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4MDA0MywKLQkJCSAgICAgIGJjbTQzeHhfcmFkaW9fcmVhZDE2KGJjbSwgMHgwMDQzKSB8IDB4MDAwOSk7CisJCQkgICAgICAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNDMpICYgMHhGRkYwKSB8IDB4MDAwOSk7CiAJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTgsIDB4MDAwMCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewpAQCAtMTQ4OCw3ICsxNDg5LDcgQEAKIAliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDA1OSwgYmFja3VwWzE3XSk7CiAJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwNTgsIGJhY2t1cFsxOF0pOwogCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDNFNiwgYmFja3VwWzExXSk7Ci0JaWYgKHBoeS0+dmVyc2lvbiAhPSAwKQorCWlmIChwaHktPmFuYWxvZyAhPSAwKQogCQliY200M3h4X3dyaXRlMTYoYmNtLCBCQ000M3h4X01NSU9fQ0hBTk5FTF9FWFQsIGJhY2t1cFsxMl0pOwogCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDM1LCBiYWNrdXBbMTBdKTsKIAliY200M3h4X3JhZGlvX3NlbGVjdGNoYW5uZWwoYmNtLCByYWRpby0+Y2hhbm5lbCwgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfd3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCmluZGV4IGQyY2E5NDkuLjdiNjY1ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCkBAIC0yNjAsMjIgKzI2MCwyMiBAQAogCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0EgfHwKIAkgICAgcGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9HKSB7CiAJCXJhbmdlLT5udW1fYml0cmF0ZXMgPSA4OwotCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX09GRE1fUkFURV82TUI7Ci0JCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjsKLQkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKLQkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjsKLQkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKLQkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKLQkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjsKLQkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKKwkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CICogNTAwMDAwOworCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX09GRE1fUkFURV85TUIgKiA1MDAwMDA7CisJCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUIgKiA1MDAwMDA7CisJCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUIgKiA1MDAwMDA7CisJCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUIgKiA1MDAwMDA7CisJCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUIgKiA1MDAwMDA7CisJCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUIgKiA1MDAwMDA7CisJCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUIgKiA1MDAwMDA7CiAJfQogCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0IgfHwKIAkgICAgcGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9HKSB7CiAJCXJhbmdlLT5udW1fYml0cmF0ZXMgKz0gNDsKLQkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7Ci0JCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COwotCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX0NDS19SQVRFXzVNQjsKLQkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COworCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQiAqIDUwMDAwMDsKKwkJcmFuZ2UtPmJpdHJhdGVbaSsrXSA9IElFRUU4MDIxMV9DQ0tfUkFURV8yTUIgKiA1MDAwMDA7CisJCXJhbmdlLT5iaXRyYXRlW2krK10gPSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CICogNTAwMDAwOworCQlyYW5nZS0+Yml0cmF0ZVtpKytdID0gSUVFRTgwMjExX0NDS19SQVRFXzExTUIgKiA1MDAwMDA7CiAJfQogCiAJZ2VvID0gaWVlZTgwMjExX2dldF9nZW8oYmNtLT5pZWVlKTsKQEAgLTI4NSw3ICsyODUsNyBAQAogCQlpZiAoaiA9PSBJV19NQVhfRlJFUVVFTkNJRVMpCiAJCQlicmVhazsKIAkJcmFuZ2UtPmZyZXFbal0uaSA9IGogKyAxOwotCQlyYW5nZS0+ZnJlcVtqXS5tID0gZ2VvLT5hW2ldLmZyZXE7Ly9GSVhNRT8KKwkJcmFuZ2UtPmZyZXFbal0ubSA9IGdlby0+YVtpXS5mcmVxICogMTAwMDAwOwogCQlyYW5nZS0+ZnJlcVtqXS5lID0gMTsKIAkJaisrOwogCX0KQEAgLTI5Myw3ICsyOTMsNyBAQAogCQlpZiAoaiA9PSBJV19NQVhfRlJFUVVFTkNJRVMpCiAJCQlicmVhazsKIAkJcmFuZ2UtPmZyZXFbal0uaSA9IGogKyAxOwotCQlyYW5nZS0+ZnJlcVtqXS5tID0gZ2VvLT5iZ1tpXS5mcmVxOy8vRklYTUU/CisJCXJhbmdlLT5mcmVxW2pdLm0gPSBnZW8tPmJnW2ldLmZyZXEgKiAxMDAwMDA7CiAJCXJhbmdlLT5mcmVxW2pdLmUgPSAxOwogCQlqKys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3htaXQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF94bWl0LmgKaW5kZXggMmFlZDE5ZS4uOWVjZjJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3htaXQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfeG1pdC5oCkBAIC0xMzcsMTQgKzEzNyw4IEBACiAJdTE2IHVua25vd247IC8vRklYTUUKIH07CiAKLSNkZWZpbmUgQkNNNDN4eF9UWFNUQVRfRkxBR19BQ0sJCTB4MDEKLS8vVE9ETyAjZGVmaW5lIEJDTTQzeHhfVFhTVEFUX0ZMQUdfPz8/CTB4MDIKLS8vVE9ETyAjZGVmaW5lIEJDTTQzeHhfVFhTVEFUX0ZMQUdfPz8/CTB4MDQKLS8vVE9ETyAjZGVmaW5lIEJDTTQzeHhfVFhTVEFUX0ZMQUdfPz8/CTB4MDgKLS8vVE9ETyAjZGVmaW5lIEJDTTQzeHhfVFhTVEFUX0ZMQUdfPz8/CTB4MTAKLSNkZWZpbmUgQkNNNDN4eF9UWFNUQVRfRkxBR19JR05PUkUJMHgyMAotLy9UT0RPICNkZWZpbmUgQkNNNDN4eF9UWFNUQVRfRkxBR18/Pz8JMHg0MAotLy9UT0RPICNkZWZpbmUgQkNNNDN4eF9UWFNUQVRfRkxBR18/Pz8JMHg4MAorI2RlZmluZSBCQ000M3h4X1RYU1RBVF9GTEFHX0FNUERVCTB4MTAKKyNkZWZpbmUgQkNNNDN4eF9UWFNUQVRfRkxBR19JTlRFUgkweDIwCiAKIHU4IGJjbTQzeHhfcGxjcF9nZXRfcmF0ZWNvZGVfY2NrKGNvbnN0IHU4IGJpdHJhdGUpOwogdTggYmNtNDN4eF9wbGNwX2dldF9yYXRlY29kZV9vZmRtKGNvbnN0IHU4IGJpdHJhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oCmluZGV4IGU4OWM4OTAuLmVmMzdhNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmgKQEAgLTIsMTMgKzIsMTQgQEAKICNkZWZpbmUgSE9TVEFQX0gKIAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgImhvc3RhcF93bGFuLmgiCiAjaW5jbHVkZSAiaG9zdGFwX2FwLmgiCiAKIHN0YXRpYyBjb25zdCBsb25nIGZyZXFfbGlzdFtdID0geyAyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAogCQkJCSAgMjQ0NywgMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ4NCB9OwotI2RlZmluZSBGUkVRX0NPVU5UIChzaXplb2YoZnJlcV9saXN0KSAvIHNpemVvZihmcmVxX2xpc3RbMF0pKQorI2RlZmluZSBGUkVRX0NPVU5UIEFSUkFZX1NJWkUoZnJlcV9saXN0KQogCiAvKiBob3N0YXAuYyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKaW5kZXggYjg1ODU3YS4uYWQ2ZTRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAKIC8qIERlYnVnZ2luZyBzdHVmZiAqLwogI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHCi0jZGVmaW5lIENPTkZJR19JUFcyMTAwX1JYX0RFQlVHCS8qIFJlY2VwdGlvbiBkZWJ1Z2dpbmcgKi8KKyNkZWZpbmUgSVBXMjEwMF9SWF9ERUJVRwkvKiBSZWNlcHRpb24gZGVidWdnaW5nICovCiAjZW5kaWYKIAogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CkBAIC0yMjM5LDcgKzIyMzksNyBAQAogCXByaXYtPnNuYXBzaG90WzBdID0gTlVMTDsKIH0KIAotI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHX0MzCisjaWZkZWYgSVBXMjEwMF9ERUJVR19DMwogc3RhdGljIGludCBpcHcyMTAwX3NuYXBzaG90X2FsbG9jKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCiB7CiAJaW50IGk7CkBAIC0yMzE0LDEzICsyMzE0LDEzIEBACiAgKiBUaGUgc2l6ZSBvZiB0aGUgY29uc3RydWN0ZWQgZXRoZXJuZXQKICAqCiAgKi8KLSNpZmRlZiBDT05GSUdfSVBXMjEwMF9SWF9ERUJVRworI2lmZGVmIElQVzIxMDBfUlhfREVCVUcKIHN0YXRpYyB1OCBwYWNrZXRfZGF0YVtJUFdfUlhfTklDX0JVRkZFUl9MRU5HVEhdOwogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGlwdzIxMDBfY29ycnVwdGlvbl9kZXRlY3RlZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgaSkKIHsKLSNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVR19DMworI2lmZGVmIElQVzIxMDBfREVCVUdfQzMKIAlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOwogCXUzMiBtYXRjaCwgcmVnOwogCWludCBqOwpAQCAtMjM0Miw3ICsyMzQyLDcgQEAKIAl9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHX0MzCisjaWZkZWYgSVBXMjEwMF9ERUJVR19DMwogCS8qIEhhbHQgdGhlIGZpbXJ3YXJlIHNvIHdlIGNhbiBnZXQgYSBnb29kIGltYWdlICovCiAJd3JpdGVfcmVnaXN0ZXIocHJpdi0+bmV0X2RldiwgSVBXX1JFR19SRVNFVF9SRUcsCiAJCSAgICAgICBJUFdfQVVYX0hPU1RfUkVTRVRfUkVHX1NUT1BfTUFTVEVSKTsKQEAgLTI0MTMsNyArMjQxMyw3IEBACiAKIAlza2JfcHV0KHBhY2tldC0+c2tiLCBzdGF0dXMtPmZyYW1lX3NpemUpOwogCi0jaWZkZWYgQ09ORklHX0lQVzIxMDBfUlhfREVCVUcKKyNpZmRlZiBJUFcyMTAwX1JYX0RFQlVHCiAJLyogTWFrZSBhIGNvcHkgb2YgdGhlIGZyYW1lIHNvIHdlIGNhbiBkdW1wIGl0IHRvIHRoZSBsb2dzIGlmCiAJICogaWVlZTgwMjExX3J4IGZhaWxzICovCiAJbWVtY3B5KHBhY2tldF9kYXRhLCBwYWNrZXQtPnNrYi0+ZGF0YSwKQEAgLTI0MjEsNyArMjQyMSw3IEBACiAjZW5kaWYKIAogCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHBhY2tldC0+c2tiLCBzdGF0cykpIHsKLSNpZmRlZiBDT05GSUdfSVBXMjEwMF9SWF9ERUJVRworI2lmZGVmIElQVzIxMDBfUlhfREVCVUcKIAkJSVBXX0RFQlVHX0RST1AoIiVzOiBOb24gY29uc3VtZWQgcGFja2V0OlxuIiwKIAkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJcHJpbnRrX2J1ZihJUFdfRExfRFJPUCwgcGFja2V0X2RhdGEsIHN0YXR1cy0+ZnJhbWVfc2l6ZSk7CkBAIC0yODg4LDcgKzI4ODgsNyBAQAogCiAjaWZkZWYgQ09ORklHX0lQVzIxMDBfREVCVUcKIAkJaWYgKHBhY2tldC0+aW5mby5jX3N0cnVjdC5jbWQtPmhvc3RfY29tbWFuZF9yZWcgPAotCQkgICAgc2l6ZW9mKGNvbW1hbmRfdHlwZXMpIC8gc2l6ZW9mKCpjb21tYW5kX3R5cGVzKSkKKwkJICAgIEFSUkFZX1NJWkUoY29tbWFuZF90eXBlcykpCiAJCQlJUFdfREVCVUdfVFgoIkNvbW1hbmQgJyVzICglZCknIHByb2Nlc3NlZDogJWQuXG4iLAogCQkJCSAgICAgY29tbWFuZF90eXBlc1twYWNrZXQtPmluZm8uY19zdHJ1Y3QuY21kLT4KIAkJCQkJCSAgIGhvc3RfY29tbWFuZF9yZWddLApAQCAtMzczNiw3ICszNzM2LDcgQEAKIAogCW91dCArPSBzcHJpbnRmKG91dCwgIiUzMHMgW0FkZHJlc3MgXSA6IEhleFxuIiwgIlJlZ2lzdGVyIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihod19kYXRhKSAvIHNpemVvZigqaHdfZGF0YSkpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShod19kYXRhKTsgaSsrKSB7CiAJCXJlYWRfcmVnaXN0ZXIoZGV2LCBod19kYXRhW2ldLmFkZHIsICZ2YWwpOwogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlMzBzIFslMDhYXSA6ICUwOFhcbiIsCiAJCQkgICAgICAgaHdfZGF0YVtpXS5uYW1lLCBod19kYXRhW2ldLmFkZHIsIHZhbCk7CkBAIC0zNzU3LDcgKzM3NTcsNyBAQAogCiAJb3V0ICs9IHNwcmludGYob3V0LCAiJTMwcyBbQWRkcmVzcyBdIDogSGV4XG4iLCAiTklDIGVudHJ5Iik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihuaWNfZGF0YSkgLyBzaXplb2YoKm5pY19kYXRhKSk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5pY19kYXRhKTsgaSsrKSB7CiAJCXU4IHRtcDg7CiAJCXUxNiB0bXAxNjsKIAkJdTMyIHRtcDMyOwpAQCAtMzg5NCwxMyArMzg5NCwxMSBAQAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKQogCQlyZXR1cm4gMDsKIAotCWlmIChsb29wID49IHNpemVvZihvcmRfZGF0YSkgLyBzaXplb2YoKm9yZF9kYXRhKSkKKwlpZiAobG9vcCA+PSBBUlJBWV9TSVpFKG9yZF9kYXRhKSkKIAkJbG9vcCA9IDA7CiAKIAkvKiBzeXNmcyBwcm92aWRlcyB1cyBQQUdFX1NJWkUgYnVmZmVyICovCi0Jd2hpbGUgKGxlbiA8IFBBR0VfU0laRSAtIDEyOCAmJgotCSAgICAgICBsb29wIDwgKHNpemVvZihvcmRfZGF0YSkgLyBzaXplb2YoKm9yZF9kYXRhKSkpIHsKLQorCXdoaWxlIChsZW4gPCBQQUdFX1NJWkUgLSAxMjggJiYgbG9vcCA8IEFSUkFZX1NJWkUob3JkX2RhdGEpKSB7CiAJCXZhbF9sZW4gPSBzaXplb2YodTMyKTsKIAogCQlpZiAoaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LCBvcmRfZGF0YVtsb29wXS5pbmRleCwgJnZhbCwKQEAgLTQ5MTIsNyArNDkxMCw3IEBACiAJZWxzZQogCQlwcml2LT5wb3dlcl9tb2RlID0gSVBXX1BPV0VSX0VOQUJMRUQgfCBwb3dlcl9sZXZlbDsKIAotI2lmZGVmIENPTkZJR19JUFcyMTAwX1RYX1BPV0VSCisjaWZkZWYgSVBXMjEwMF9UWF9QT1dFUgogCWlmIChwcml2LT5wb3J0X3R5cGUgPT0gSUJTUyAmJiBwcml2LT5hZGhvY19wb3dlciAhPSBERlRMX0lCU1NfVFhfUE9XRVIpIHsKIAkJLyogU2V0IGJlYWNvbiBpbnRlcnZhbCAqLwogCQljbWQuaG9zdF9jb21tYW5kID0gVFhfUE9XRVJfSU5ERVg7CkBAIC02NTg5LDcgKzY1ODcsNyBAQAogCTExMDAwMDAwCiB9OwogCi0jZGVmaW5lIFJBVEVfQ09VTlQgKHNpemVvZihpcHcyMTAwX3JhdGVzXzExYikgLyBzaXplb2YoaXB3MjEwMF9yYXRlc18xMWJbMF0pKQorI2RlZmluZSBSQVRFX0NPVU5UIEFSUkFZX1NJWkUoaXB3MjEwMF9yYXRlc18xMWIpCiAKIHN0YXRpYyBpbnQgaXB3MjEwMF93eF9nZXRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwppbmRleCA4MzhkNTEwLi44NDFiM2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKQEAgLTEzOTUsMTEgKzEzOTUsMTYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6Ci0JCWRvdDF4ID0gcGFyYW0tPnZhbHVlID8gMSA6IDA7CisJCS8qIGRvdDF4IHNob3VsZCBiZSB0aGUgb3Bwb3NpdGUgb2YgUlhfVU5FTkNSWVBURURfRUFQT0w7CisJCSAqIHR1cm4gb2ZmIGRvdDF4IHdoZW4gYWxsb3dpbmcgcmVjZWlwdCBvZiB1bmVuY3J5cHRlZCBFQVBPTAorCQkgKiBmcmFtZXMsIHR1cm4gb24gZG90MXggd2hlbiByZWNlaXB0IHNob3VsZCBiZSBkaXNhbGxvd2VkCisJCSAqLworCQlkb3QxeCA9IHBhcmFtLT52YWx1ZSA/IDAgOiAweDAxOwogCQlicmVhazsKIAogCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CiAJCXByaXZpbnZva2VkID0gcGFyYW0tPnZhbHVlID8gMSA6IDA7CisJCWJyZWFrOwogCiAJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CiAJCWV4dW5lbmNyeXB0ID0gcGFyYW0tPnZhbHVlID8gMSA6IDA7CkBAIC0xNTg5LDYgKzE1OTQsNyBAQAogCQkJfQogCQkJa2V5LnR5cGUgPSBET1QxMV9QUklWX1RLSVA7CiAJCQlrZXkubGVuZ3RoID0gS0VZX1NJWkVfVEtJUDsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvb2lkX21ndC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKaW5kZXggZTZjZjlkZi4uNDI3ODAzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKQEAgLTE2LDYgKzE2LDggQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCiAjaW5jbHVkZSAicHJpc21jb21wYXQuaCIKICNpbmNsdWRlICJpc2xwY2lfZGV2LmgiCiAjaW5jbHVkZSAiaXNscGNpX21ndC5oIgpAQCAtNjkyLDcgKzY5NCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSBWRUNfU0laRShhKSAoc2l6ZW9mKGEpL3NpemVvZihhWzBdKSkKKyNkZWZpbmUgVkVDX1NJWkUoYSkgQVJSQVlfU0laRShhKQogCiBpbnQKIG1ndF9jb21taXQoaXNscGNpX3ByaXZhdGUgKnByaXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKaW5kZXggMjQyMjFlNC4uMmFhM2M3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYwpAQCAtMjgsNyArMjgsNyBAQAogICovCiBzdGF0aWMgdTggd3ZfaXJxX3RvX3BzYShpbnQgaXJxKQogewotCWlmIChpcnEgPCAwIHx8IGlycSA+PSBORUxTKGlycXZhbHMpKQorCWlmIChpcnEgPCAwIHx8IGlycSA+PSBBUlJBWV9TSVpFKGlycXZhbHMpKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiBpcnF2YWxzW2lycV07CkBAIC00Miw3ICs0Miw3IEBACiB7CiAJaW50IGlycTsKIAotCWZvciAoaXJxID0gMDsgaXJxIDwgTkVMUyhpcnF2YWxzKTsgaXJxKyspCisJZm9yIChpcnEgPSAwOyBpcnEgPCBBUlJBWV9TSVpFKGlycXZhbHMpOyBpcnErKykKIAkJaWYgKGlycXZhbHNbaXJxXSA9PSBpcnF2YWwpCiAJCQlyZXR1cm4gaXJxOwogCkBAIC0xNjk1LDcgKzE2OTUsNyBAQAogCQkvKiBMb29rIGluIHRoZSB0YWJsZSBpZiB0aGUgZnJlcXVlbmN5IGlzIGFsbG93ZWQgKi8KIAkJaWYgKHRhYmxlWzkgLSAoZnJlcSAvIDE2KV0gJiAoMSA8PCAoZnJlcSAlIDE2KSkpIHsKIAkJCS8qIENvbXB1dGUgYXBwcm94aW1hdGUgY2hhbm5lbCBudW1iZXIgKi8KLQkJCXdoaWxlICgoYyA8IE5FTFMoY2hhbm5lbF9iYW5kcykpICYmCisJCQl3aGlsZSAoKGMgPCBBUlJBWV9TSVpFKGNoYW5uZWxfYmFuZHMpKSAmJgogCQkJCSgoKGNoYW5uZWxfYmFuZHNbY10gPj4gMSkgLSAyNCkgPCBmcmVxKSkgCiAJCQkJYysrOwogCQkJbGlzdFtpXS5pID0gYzsJLyogU2V0IHRoZSBsaXN0IGluZGV4ICovCkBAIC00MjY5LDcgKzQyNjksNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IDwtd2F2ZWxhbl9wcm9iZSgpXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCiAJfSBlbHNlIHsgLyogU2NhbiBhbGwgcG9zc2libGUgYWRkcmVzc2VzIG9mIHRoZSBXYXZlTEFOIGhhcmR3YXJlLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgTkVMUyhpb2Jhc2UpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW9iYXNlKTsgaSsrKSB7CiAJCQlkZXYtPmlycSA9IGRlZl9pcnE7CiAJCQlpZiAod2F2ZWxhbl9jb25maWcoZGV2LCBpb2Jhc2VbaV0pID09IDApIHsKICNpZmRlZiBERUJVR19DQUxMQkFDS19UUkFDRQpAQCAtNDI4MCw3ICs0MjgwLDcgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlpZiAoaSA9PSBORUxTKGlvYmFzZSkpCisJCWlmIChpID09IEFSUkFZX1NJWkUoaW9iYXNlKSkKIAkJCXIgPSAtRU5PREVWOwogCX0KIAlpZiAocikgCkBAIC00MzI3LDE0ICs0MzI3LDE0IEBACiAjZW5kaWYKIAogCQkvKiBDb3B5IHRoZSBiYXNpYyBzZXQgb2YgYWRkcmVzcyB0byBiZSBwcm9iZWQuICovCi0JCWZvciAoaSA9IDA7IGkgPCBORUxTKGlvYmFzZSk7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW9iYXNlKTsgaSsrKQogCQkJaW9baV0gPSBpb2Jhc2VbaV07CiAJfQogCiAKIAkvKiBMb29wIG9uIGFsbCBwb3NzaWJsZSBiYXNlIGFkZHJlc3Nlcy4gKi8KIAlpID0gLTE7Ci0Jd2hpbGUgKChpb1srK2ldICE9IDApICYmIChpIDwgTkVMUyhpbykpKSB7CisJd2hpbGUgKChpb1srK2ldICE9IDApICYmIChpIDwgQVJSQVlfU0laRShpbykpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YobmV0X2xvY2FsKSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLnAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCmluZGV4IDcyYjY0NmMuLmZlMjQyODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCkBAIC00NDksOSArNDQ5LDYgQEAKIC8qIFdhdGNoZG9nIHRlbXBvcmlzYXRpb24gKi8KICNkZWZpbmUJV0FUQ0hET0dfSklGRklFUwkoNTEyKkhaLzEwMCkKIAotLyogTWFjcm8gdG8gZ2V0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gYXJyYXkgKi8KLSNkZWZpbmUJTkVMUyhhKQkJCQkoc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pKQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSBJT0NUTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBTSU9DU0lQUVRIUglTSU9DSVdGSVJTVFBSSVYJCS8qIFNldCBxdWFsaXR5IHRocmVzaG9sZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCmluZGV4IDVlYjgxNjMuLmIwNDIzOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKQEAgLTExNjgsNyArMTE2OCw3IEBACiAJIG0ubW1yX3VudXNlZDBbNl0sCiAJIG0ubW1yX3VudXNlZDBbN10pOwogI2VuZGlmCS8qIERFQlVHX1NIT1dfVU5VU0VEICovCi0gIHByaW50ayhLRVJOX0RFQlVHICJFbmNyeXB0aW9uIGFsZ29yeXRobTogJTAyWCAtIFN0YXR1czogJTAyWFxuIiwKKyAgcHJpbnRrKEtFUk5fREVCVUcgIkVuY3J5cHRpb24gYWxnb3JpdGhtOiAlMDJYIC0gU3RhdHVzOiAlMDJYXG4iLAogCSBtLm1tcl9kZXNfYXZhaWwsIG0ubW1yX2Rlc19zdGF0dXMpOwogI2lmZGVmIERFQlVHX1NIT1dfVU5VU0VECiAgIHByaW50ayhLRVJOX0RFQlVHICJtbWNfdW51c2VkMVtdOiAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCkBAIC0zNTkwLDkgKzM1OTAsOSBAQAogICBjZmJsay5hY2xvYyA9IFRSVUU7ICAgICAgICAgICAvKiBEaXNhYmxlIHNvdXJjZSBhZGRyIGluc2VydGlvbiBieSBpODI1OTMgKi8KICAgY2ZibGsucHJlYW1iX2xlbiA9IDA7ICAgICAgICAgLyogMiBieXRlcyBwcmVhbWJsZSAoU0ZEKSAqLwogICBjZmJsay5sb29wYmFjayA9IEZBTFNFOwotICBjZmJsay5saW5fcHJpbyA9IDA7ICAgCS8qIGNvbmZvcm0gdG8gODAyLjMgYmFja29mZiBhbGdvcml0bSAqLwotICBjZmJsay5leHBfcHJpbyA9IDU7CSAgICAgICAgLyogY29uZm9ybSB0byA4MDIuMyBiYWNrb2ZmIGFsZ29yaXRtICovCi0gIGNmYmxrLmJvZl9tZXQgPSAxOwkgICAgICAgIC8qIGNvbmZvcm0gdG8gODAyLjMgYmFja29mZiBhbGdvcml0bSAqLworICBjZmJsay5saW5fcHJpbyA9IDA7ICAgCS8qIGNvbmZvcm0gdG8gODAyLjMgYmFja29mZiBhbGdvcml0aG0gKi8KKyAgY2ZibGsuZXhwX3ByaW8gPSA1OwkgICAgICAgIC8qIGNvbmZvcm0gdG8gODAyLjMgYmFja29mZiBhbGdvcml0aG0gKi8KKyAgY2ZibGsuYm9mX21ldCA9IDE7CSAgICAgICAgLyogY29uZm9ybSB0byA4MDIuMyBiYWNrb2ZmIGFsZ29yaXRobSAqLwogICBjZmJsay5pZnJtX3NwYyA9IDB4MjAgPj4gNDsJLyogMzIgYml0IHRpbWVzIGludGVyZnJhbWUgc3BhY2luZyAqLwogICBjZmJsay5zbG90dGltX2xvdyA9IDB4MjAgPj4gNTsJLyogMzIgYml0IHRpbWVzIHNsb3QgdGltZSAqLwogICBjZmJsay5zbG90dGltX2hpID0gMHgwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IDEyZGZjMGIuLjljNjRmODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAJLyogQWxsb2NhdGUgYSBzaW5nbGUgbWVtb3J5IGJsb2NrIGZvciB2YWx1ZXMgYW5kIGFkZHJlc3Nlcy4gKi8KIAljb3VudDE2ID0gMipjb3VudDsKLQlhMTYgPSBrbWFsbG9jKGNvdW50MTYgKiAoc2l6ZW9mKHpkX2FkZHJfdCkgKyBzaXplb2YodTE2KSksCisJYTE2ID0gKHpkX2FkZHJfdCAqKSBrbWFsbG9jKGNvdW50MTYgKiAoc2l6ZW9mKHpkX2FkZHJfdCkgKyBzaXplb2YodTE2KSksCiAJCSAgICAgICAgICAgICAgICAgICBHRlBfTk9GUyk7CiAJaWYgKCFhMTYpIHsKIAkJZGV2X2RiZ19mKHpkX2NoaXBfZGV2KGNoaXApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYwppbmRleCBhMDg1MjQxLi40YzVmNzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiBzdGF0aWMgaW50IHJlc2V0X21vZGUoc3RydWN0IHpkX21hYyAqbWFjKQogewogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gemRfbWFjX3RvX2llZWU4MDIxMShtYWMpOwotCXN0cnVjdCB6ZF9pb3JlcTMyIGlvcmVxc1szXSA9IHsKKwlzdHJ1Y3QgemRfaW9yZXEzMiBpb3JlcXNbXSA9IHsKIAkJeyBDUl9SWF9GSUxURVIsIFNUQV9SWF9GSUxURVIgfSwKIAkJeyBDUl9TTklGRkVSX09OLCAwVSB9LAogCX07CkBAIC0xNjQsMTAgKzE2NCw5IEBACiAJaWYgKGllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CiAJCWlvcmVxc1swXS52YWx1ZSA9IDB4ZmZmZmZmZmY7CiAJCWlvcmVxc1sxXS52YWx1ZSA9IDB4MTsKLQkJaW9yZXFzWzJdLnZhbHVlID0gRU5DX1NOSUZGRVI7CiAJfQogCi0JcmV0dXJuIHpkX2lvd3JpdGUzMmEoJm1hYy0+Y2hpcCwgaW9yZXFzLCAzKTsKKwlyZXR1cm4gemRfaW93cml0ZTMyYSgmbWFjLT5jaGlwLCBpb3JlcXMsIEFSUkFZX1NJWkUoaW9yZXFzKSk7CiB9CiAKIGludCB6ZF9tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtOTA0LDE2ICs5MDMsMjEgQEAKIHN0YXRpYyBpbnQgemRfbWFjX3R4KHN0cnVjdCB6ZF9tYWMgKm1hYywgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiwgaW50IHByaSkKIHsKIAlpbnQgaSwgcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHpkX21hY190b19pZWVlODAyMTEobWFjKTsKIAogCWZvciAoaSA9IDA7IGkgPCB0eGItPm5yX2ZyYWdzOyBpKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4Yi0+ZnJhZ21lbnRzW2ldOwogCiAJCXIgPSBmaWxsX2N0cmxzZXQobWFjLCB0eGIsIGkpOwotCQlpZiAocikKKwkJaWYgKHIpIHsKKwkJCWllZWUtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCXJldHVybiByOworCQl9CiAJCXIgPSB6ZF91c2JfdHgoJm1hYy0+Y2hpcC51c2IsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCQlpZiAocikKKwkJaWYgKHIpIHsKKwkJCWllZWUtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCXJldHVybiByOworCQl9CiAJfQogCiAJLyogRklYTUU6IHNob3VsZG4ndCB0aGlzIGJlIGhhbmRsZWQgYnkgdGhlIHVwcGVyIGxheWVycz8gKi8KQEAgLTEwNjMsOSArMTA2NywyMyBAQAogCiAJKnBzdGF0dXMgPSBzdGF0dXMgPSB6ZF90YWlsKGJ1ZmZlciwgbGVuZ3RoLCBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpOwogCWlmIChzdGF0dXMtPmZyYW1lX3N0YXR1cyAmIFpEX1JYX0VSUk9SKSB7Ci0JCS8qIEZJWE1FOiB1cGRhdGU/ICovCisJCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gemRfbWFjX3RvX2llZWU4MDIxMShtYWMpOworCQlpZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cy0+ZnJhbWVfc3RhdHVzICYgWkRfUlhfVElNRU9VVF9FUlJPUikKKwkJCWllZWUtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJZWxzZSBpZiAoc3RhdHVzLT5mcmFtZV9zdGF0dXMgJiBaRF9SWF9GSUZPX09WRVJSVU5fRVJST1IpCisJCQlpZWVlLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQllbHNlIGlmIChzdGF0dXMtPmZyYW1lX3N0YXR1cyAmIFpEX1JYX0RFQ1JZUFRJT05fRVJST1IpCisJCQlpZWVlLT5pZWVlX3N0YXRzLnJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGUrKzsKKwkJZWxzZSBpZiAoc3RhdHVzLT5mcmFtZV9zdGF0dXMgJiBaRF9SWF9DUkMzMl9FUlJPUikgeworCQkJaWVlZS0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJaWVlZS0+aWVlZV9zdGF0cy5yeF9mY3NfZXJyb3JzKys7CisJCX0KKwkJZWxzZSBpZiAoc3RhdHVzLT5mcmFtZV9zdGF0dXMgJiBaRF9SWF9DUkMxNl9FUlJPUikKKwkJCWllZWUtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCiAJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cykpOwogCXN0YXRzLT5sZW4gPSBsZW5ndGggLSAoWkRfUExDUF9IRUFERVJfU0laRSArIElFRUU4MDIxMV9GQ1NfTEVOICsKIAkJICAgICAgICAgICAgICAgKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpOwpAQCAtMTA5NCwxNCArMTExMiwxNiBAQAogCWlmIChza2ItPmxlbiA8IFpEX1BMQ1BfSEVBREVSX1NJWkUgKyBJRUVFODAyMTFfMUFERFJfTEVOICsKIAkgICAgICAgICAgICAgICBJRUVFODAyMTFfRkNTX0xFTiArIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSkKIAl7Ci0JCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJQYWNrZXQgd2l0aCBsZW5ndGggJXUgdG8gc21hbGwuXG4iLAotCQkJIHNrYi0+bGVuKTsKKwkJaWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWllZWUtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJZ290byBmcmVlX3NrYjsKIAl9CiAKIAlyID0gZmlsbF9yeF9zdGF0cygmc3RhdHMsICZzdGF0dXMsIG1hYywgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJaWYgKHIpIHsKLQkJLyogT25seSBwYWNrZXRzIHdpdGggcnggZXJyb3JzIGFyZSBpbmNsdWRlZCBoZXJlLiAqLworCQkvKiBPbmx5IHBhY2tldHMgd2l0aCByeCBlcnJvcnMgYXJlIGluY2x1ZGVkIGhlcmUuCisJCSAqIFRoZSBlcnJvciBzdGF0cyBoYXZlIGFscmVhZHkgYmVlbiBzZXQgaW4gZmlsbF9yeF9zdGF0cy4KKwkJICovCiAJCWdvdG8gZnJlZV9za2I7CiAJfQogCkBAIC0xMTE0LDggKzExMzQsMTAgQEAKIAogCXIgPSBmaWx0ZXJfcngoaWVlZSwgc2tiLT5kYXRhLCBza2ItPmxlbiwgJnN0YXRzKTsKIAlpZiAociA8PSAwKSB7Ci0JCWlmIChyIDwgMCkKKwkJaWYgKHIgPCAwKSB7CisJCQlpZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJFcnJvciBpbiBwYWNrZXQuXG4iKTsKKwkJfQogCQlnb3RvIGZyZWVfc2tiOwogCX0KIApAQCAtMTE0Niw3ICsxMTY4LDkgQEAKIAogCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCB6ZF9ydF9oZHIpICsgbGVuZ3RoKTsKIAlpZiAoIXNrYikgeworCQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHpkX21hY190b19pZWVlODAyMTEobWFjKTsKIAkJZGV2X3dhcm4oemRfbWFjX2RldihtYWMpLCAiQ291bGQgbm90IGFsbG9jYXRlIHNrYi5cbiIpOworCQlpZWVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlza2JfcmVzZXJ2ZShza2IsIHNpemVvZihzdHJ1Y3QgemRfcnRfaGRyKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCmluZGV4IDc1ZWY1NTYuLmFhYzhhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCkBAIC0zMTMsNiArMzEzLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfcmV0cnlfZmFpbGVkX2ludChzdHJ1Y3QgdXJiICp1cmIpCiB7CisJc3RydWN0IHpkX3VzYiAqdXNiID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpkX3VzYl90b19tYWModXNiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHpkX21hY190b19pZWVlODAyMTEobWFjKTsKKworCWllZWUtPnN0YXRzLnR4X2Vycm9ycysrOworCWllZWUtPmllZWVfc3RhdHMudHhfcmV0cnlfbGltaXRfZXhjZWVkZWQrKzsKIAlkZXZfZGJnX2YodXJiX2Rldih1cmIpLCAicmV0cnkgZmFpbGVkIGludGVycnVwdFxuIik7CiB9CiAKQEAgLTQ4Nyw2ICs0OTMsOSBAQAogCiAJaWYgKGxlbmd0aCA8IHNpemVvZihzdHJ1Y3QgcnhfbGVuZ3RoX2luZm8pKSB7CiAJCS8qIEl0J3Mgbm90IGEgY29tcGxldGUgcGFja2V0IGFueWhvdy4gKi8KKwkJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSB6ZF9tYWNfdG9faWVlZTgwMjExKG1hYyk7CisJCWllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlpZWVlLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAJbGVuZ3RoX2luZm8gPSAoc3RydWN0IHJ4X2xlbmd0aF9pbmZvICopCkBAIC05MjMsNiArOTMyLDggQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKKwl1c2JfcmVzZXRfZGV2aWNlKGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworCiAJbmV0ZGV2ID0gemRfbmV0ZGV2X2FsbG9jKGludGYpOwogCWlmIChuZXRkZXYgPT0gTlVMTCkgewogCQlyID0gLUVOT01FTTsKQEAgLTEwMjQsNiArMTAzNSw3IEBACiAKIAlyID0gdXNiX3JlZ2lzdGVyKCZkcml2ZXIpOwogCWlmIChyKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHpkX3dvcmtxdWV1ZSk7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgdXNiX3JlZ2lzdGVyKCkgZmFpbGVkLiBFcnJvciBudW1iZXIgJWRcbiIsCiAJCSAgICAgICBkcml2ZXIubmFtZSwgcik7CiAJCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKaW5kZXggYjYxYzE3Yi4uM2RlMjYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCkBAIC0xNTQ2LDcgKzE1NDYsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgZ2V0X3N1cGVyaW9fZG1hIChzdHJ1Y3QgcGFycG9ydCAqcCkKK3N0YXRpYyBpbnQgZ2V0X3N1cGVyaW9fZG1hIChzdHJ1Y3QgcGFycG9ydCAqcCkKIHsKIAlpbnQgaT0wOwogCXdoaWxlKCAoc3VwZXJpb3NbaV0uaW8gIT0gcC0+YmFzZSkgJiYgKGk8TlJfU1VQRVJJT1MpKQpAQCAtMjEwNiw3ICsyMTA2LDcgQEAKIC8qIC0tLSBETUEgZGV0ZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIE9ubHkgaWYgY2hpcHNldCBjb25mb3JtcyB0byBFQ1AgSVNBIEludGVyZmFjZSBTdGFuZGFyZCAqLwotc3RhdGljIGludCBfX2RldmluaXQgcHJvZ3JhbW1hYmxlX2RtYV9zdXBwb3J0IChzdHJ1Y3QgcGFycG9ydCAqcCkKK3N0YXRpYyBpbnQgcHJvZ3JhbW1hYmxlX2RtYV9zdXBwb3J0IChzdHJ1Y3QgcGFycG9ydCAqcCkKIHsKIAl1bnNpZ25lZCBjaGFyIG9lY3IgPSBpbmIgKEVDT05UUk9MIChwKSk7CiAJaW50IGRtYTsKQEAgLTIxMjMsNyArMjEyMyw3IEBACiAJcmV0dXJuIGRtYTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9kbWFfcHJvYmUgKHN0cnVjdCBwYXJwb3J0ICpwKQorc3RhdGljIGludCBwYXJwb3J0X2RtYV9wcm9iZSAoc3RydWN0IHBhcnBvcnQgKnApCiB7CiAJY29uc3Qgc3RydWN0IHBhcnBvcnRfcGNfcHJpdmF0ZSAqcHJpdiA9IHAtPnByaXZhdGVfZGF0YTsKIAlpZiAocHJpdi0+ZWNyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IDQ0MzhhZTEuLmEzYzE3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTQxNSw2ICs0MTUsNyBAQAogICogX19wY2lfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBuZXcgcGNpIGRyaXZlcgogICogQGRydjogdGhlIGRyaXZlciBzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXIKICAqIEBvd25lcjogb3duZXIgbW9kdWxlIG9mIGRydgorICogQG1vZF9uYW1lOiBtb2R1bGUgbmFtZSBzdHJpbmcKICAqIAogICogQWRkcyB0aGUgZHJpdmVyIHN0cnVjdHVyZSB0byB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGRyaXZlcnMuCiAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIG90aGVyd2lzZSAwLiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggN2E5NDA3Ni4uY2Q5MTNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTE0Myw2ICsxNDMsMTQgQEAKIAlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIGF0b21pY19yZWFkKCZwZGV2LT5lbmFibGVfY250KSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTlVNQQorc3RhdGljIHNzaXplX3QKK251bWFfbm9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJWRcbiIsIGRldi0+bnVtYV9ub2RlKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3NpemVfdAogbXNpX2J1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTE5NCw2ICsyMDIsOSBAQAogCV9fQVRUUl9STyhpcnEpLAogCV9fQVRUUl9STyhsb2NhbF9jcHVzKSwKIAlfX0FUVFJfUk8obW9kYWxpYXMpLAorI2lmZGVmIENPTkZJR19OVU1BCisJX19BVFRSX1JPKG51bWFfbm9kZSksCisjZW5kaWYKIAlfX0FUVFIoZW5hYmxlLCAwNjAwLCBpc19lbmFibGVkX3Nob3csIGlzX2VuYWJsZWRfc3RvcmUpLAogCV9fQVRUUihicm9rZW5fcGFyaXR5X3N0YXR1cywoU19JUlVHT3xTX0lXVVNSKSwKIAkJYnJva2VuX3Bhcml0eV9zdGF0dXNfc2hvdyxicm9rZW5fcGFyaXR5X3N0YXR1c19zdG9yZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDhiNDRjZmYuLjFlNzRlMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0yMSw2ICsyMSwxMiBAQAogCiB1bnNpZ25lZCBpbnQgcGNpX3BtX2QzX2RlbGF5ID0gMTA7CiAKKyNkZWZpbmUgREVGQVVMVF9DQVJEQlVTX0lPX1NJWkUJCSgyNTYpCisjZGVmaW5lIERFRkFVTFRfQ0FSREJVU19NRU1fU0laRQkoNjQqMTAyNCoxMDI0KQorLyogcGNpPWNibWVtc2l6ZT1ubk0sY2Jpb3NpemU9bm4gY2FuIG92ZXJyaWRlIHRoaXMgKi8KK3Vuc2lnbmVkIGxvbmcgcGNpX2NhcmRidXNfaW9fc2l6ZSA9IERFRkFVTFRfQ0FSREJVU19JT19TSVpFOwordW5zaWduZWQgbG9uZyBwY2lfY2FyZGJ1c19tZW1fc2l6ZSA9IERFRkFVTFRfQ0FSREJVU19NRU1fU0laRTsKKwogLyoqCiAgKiBwY2lfYnVzX21heF9idXNuciAtIHJldHVybnMgbWF4aW11bSBQQ0kgYnVzIG51bWJlciBvZiBnaXZlbiBidXMnIGNoaWxkcmVuCiAgKiBAYnVzOiBwb2ludGVyIHRvIFBDSSBidXMgc3RydWN0dXJlIHRvIHNlYXJjaApAQCAtMTMwMCw3ICsxMzA2LDcgQEAKIAogLyoqCiAgKiBwY2lfc2VsZWN0X2JhcnMgLSBNYWtlIEJBUiBtYXNrIGZyb20gdGhlIHR5cGUgb2YgcmVzb3VyY2UKLSAqIEBwZGV2OiB0aGUgUENJIGRldmljZSBmb3Igd2hpY2ggQkFSIG1hc2sgaXMgbWFkZQorICogQGRldjogdGhlIFBDSSBkZXZpY2UgZm9yIHdoaWNoIEJBUiBtYXNrIGlzIG1hZGUKICAqIEBmbGFnczogcmVzb3VyY2UgdHlwZSBtYXNrIHRvIGJlIHNlbGVjdGVkCiAgKgogICogVGhpcyBoZWxwZXIgcm91dGluZSBtYWtlcyBiYXIgbWFzayBmcm9tIHRoZSB0eXBlIG9mIHJlc291cmNlLgpAQCAtMTMzMyw2ICsxMzM5LDEwIEBACiAJCWlmICgqc3RyICYmIChzdHIgPSBwY2liaW9zX3NldHVwKHN0cikpICYmICpzdHIpIHsKIAkJCWlmICghc3RyY21wKHN0ciwgIm5vbXNpIikpIHsKIAkJCQlwY2lfbm9fbXNpKCk7CisJCQl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgImNiaW9zaXplPSIsIDkpKSB7CisJCQkJcGNpX2NhcmRidXNfaW9fc2l6ZSA9IG1lbXBhcnNlKHN0ciArIDksICZzdHIpOworCQkJfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJjYm1lbXNpemU9IiwgMTApKSB7CisJCQkJcGNpX2NhcmRidXNfbWVtX3NpemUgPSBtZW1wYXJzZShzdHIgKyAxMCwgJnN0cik7CiAJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBVbmtub3duIG9wdGlvbiBgJXMnXG4iLAogCQkJCQkJc3RyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5oIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmgKaW5kZXggM2MwYTU4Zi4uYmY2NTVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmgKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmgKQEAgLTg1LDcgKzg1LDcgQEAKIAlzdHJ1Y3QgbXV0ZXggcnBjX211dGV4OwkJLyoKIAkJCQkJICogb25seSBvbmUgdGhyZWFkIGNvdWxkIGRvCiAJCQkJCSAqIHJlY292ZXJ5IG9uIHRoZSBzYW1lCi0JCQkJCSAqIHJvb3QgcG9ydCBoaWVyYWNoeQorCQkJCQkgKiByb290IHBvcnQgaGllcmFyY2h5CiAJCQkJCSAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcmVsZWFzZTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IDg5ZjMwMzYuLjM1NTRmMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCkBAIC0zNiwxMyArMzYsNiBAQAogCiAjZGVmaW5lIFJPVU5EX1VQKHgsIGEpCQkoKCh4KSArIChhKSAtIDEpICYgfigoYSkgLSAxKSkKIAotLyoKLSAqIEZJWE1FOiBJTyBzaG91bGQgYmUgbWF4IDI1NiBieXRlcy4gIEhvd2V2ZXIsIHNpbmNlIHdlIG1heQotICogaGF2ZSBhIFAyUCBicmlkZ2UgYmVsb3cgYSBjYXJkYnVzIGJyaWRnZSwgd2UgbmVlZCA0Sy4KLSAqLwotI2RlZmluZSBDQVJEQlVTX0lPX1NJWkUJCSgyNTYpCi0jZGVmaW5lIENBUkRCVVNfTUVNX1NJWkUJKDY0KjEwMjQqMTAyNCkKLQogc3RhdGljIHZvaWQgX19kZXZpbml0CiBwYnVzX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKHN0cnVjdCBwY2lfYnVzICpidXMpCiB7CkBAIC00MTUsMTIgKzQwOCwxMiBAQAogCSAqIFJlc2VydmUgc29tZSByZXNvdXJjZXMgZm9yIENhcmRCdXMuICBXZSByZXNlcnZlCiAJICogYSBmaXhlZCBhbW91bnQgb2YgYnVzIHNwYWNlIGZvciBDYXJkQnVzIGJyaWRnZXMuCiAJICovCi0JYl9yZXNbMF0uc3RhcnQgPSBDQVJEQlVTX0lPX1NJWkU7Ci0JYl9yZXNbMF0uZW5kID0gYl9yZXNbMF0uc3RhcnQgKyBDQVJEQlVTX0lPX1NJWkUgLSAxOworCWJfcmVzWzBdLnN0YXJ0ID0gcGNpX2NhcmRidXNfaW9fc2l6ZTsKKwliX3Jlc1swXS5lbmQgPSBiX3Jlc1swXS5zdGFydCArIHBjaV9jYXJkYnVzX2lvX3NpemUgLSAxOwogCWJfcmVzWzBdLmZsYWdzIHw9IElPUkVTT1VSQ0VfSU87CiAKLQliX3Jlc1sxXS5zdGFydCA9IENBUkRCVVNfSU9fU0laRTsKLQliX3Jlc1sxXS5lbmQgPSBiX3Jlc1sxXS5zdGFydCArIENBUkRCVVNfSU9fU0laRSAtIDE7CisJYl9yZXNbMV0uc3RhcnQgPSBwY2lfY2FyZGJ1c19pb19zaXplOworCWJfcmVzWzFdLmVuZCA9IGJfcmVzWzFdLnN0YXJ0ICsgcGNpX2NhcmRidXNfaW9fc2l6ZSAtIDE7CiAJYl9yZXNbMV0uZmxhZ3MgfD0gSU9SRVNPVVJDRV9JTzsKIAogCS8qCkBAIC00NDAsMTYgKzQzMywxNiBAQAogCSAqIHR3aWNlIHRoZSBzaXplLgogCSAqLwogCWlmIChjdHJsICYgUENJX0NCX0JSSURHRV9DVExfUFJFRkVUQ0hfTUVNMCkgewotCQliX3Jlc1syXS5zdGFydCA9IENBUkRCVVNfTUVNX1NJWkU7Ci0JCWJfcmVzWzJdLmVuZCA9IGJfcmVzWzJdLnN0YXJ0ICsgQ0FSREJVU19NRU1fU0laRSAtIDE7CisJCWJfcmVzWzJdLnN0YXJ0ID0gcGNpX2NhcmRidXNfbWVtX3NpemU7CisJCWJfcmVzWzJdLmVuZCA9IGJfcmVzWzJdLnN0YXJ0ICsgcGNpX2NhcmRidXNfbWVtX3NpemUgLSAxOwogCQliX3Jlc1syXS5mbGFncyB8PSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAKLQkJYl9yZXNbM10uc3RhcnQgPSBDQVJEQlVTX01FTV9TSVpFOwotCQliX3Jlc1szXS5lbmQgPSBiX3Jlc1szXS5zdGFydCArIENBUkRCVVNfTUVNX1NJWkUgLSAxOworCQliX3Jlc1szXS5zdGFydCA9IHBjaV9jYXJkYnVzX21lbV9zaXplOworCQliX3Jlc1szXS5lbmQgPSBiX3Jlc1szXS5zdGFydCArIHBjaV9jYXJkYnVzX21lbV9zaXplIC0gMTsKIAkJYl9yZXNbM10uZmxhZ3MgfD0gSU9SRVNPVVJDRV9NRU07CiAJfSBlbHNlIHsKLQkJYl9yZXNbM10uc3RhcnQgPSBDQVJEQlVTX01FTV9TSVpFICogMjsKLQkJYl9yZXNbM10uZW5kID0gYl9yZXNbM10uc3RhcnQgKyBDQVJEQlVTX01FTV9TSVpFICogMiAtIDE7CisJCWJfcmVzWzNdLnN0YXJ0ID0gcGNpX2NhcmRidXNfbWVtX3NpemUgKiAyOworCQliX3Jlc1szXS5lbmQgPSBiX3Jlc1szXS5zdGFydCArIHBjaV9jYXJkYnVzX21lbV9zaXplICogMiAtIDE7CiAJCWJfcmVzWzNdLmZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLWlycS5jIGIvZHJpdmVycy9wY2kvc2V0dXAtaXJxLmMKaW5kZXggYTI1MTI4OS4uNTY4ZjE4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtaXJxLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtaXJxLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAkgICAgICAgaW50ICgqbWFwX2lycSkoc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4KSkKIHsKIAl1OCBwaW4sIHNsb3Q7Ci0JaW50IGlycTsKKwlpbnQgaXJxID0gMDsKIAogCS8qIElmIHRoaXMgZGV2aWNlIGlzIG5vdCBvbiB0aGUgcHJpbWFyeSBidXMsIHdlIG5lZWQgdG8gZmlndXJlIG91dAogCSAgIHdoaWNoIGludGVycnVwdCBwaW4gaXQgd2lsbCBjb21lIGluIG9uLiAgIFdlIGtub3cgd2hpY2ggc2xvdCBpdApAQCAtMzMsMTYgKzMzLDE4IEBACiAJICAgYXBwbHkgdGhlIHN3aXp6bGUgZnVuY3Rpb24uICAqLwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJnBpbik7Ci0JLyogQ29wZSB3aXRoIDAgYW5kIGlsbGVnYWwuICovCi0JaWYgKHBpbiA9PSAwIHx8IHBpbiA+IDQpCisJLyogQ29wZSB3aXRoIGlsbGVnYWwuICovCisJaWYgKHBpbiA+IDQpCiAJCXBpbiA9IDE7CiAKLQkvKiBGb2xsb3cgdGhlIGNoYWluIG9mIGJyaWRnZXMsIHN3aXp6bGluZyBhcyB3ZSBnby4gICovCi0Jc2xvdCA9ICgqc3dpenpsZSkoZGV2LCAmcGluKTsKKwlpZiAocGluICE9IDApIHsKKwkJLyogRm9sbG93IHRoZSBjaGFpbiBvZiBicmlkZ2VzLCBzd2l6emxpbmcgYXMgd2UgZ28uICAqLworCQlzbG90ID0gKCpzd2l6emxlKShkZXYsICZwaW4pOwogCi0JaXJxID0gKCptYXBfaXJxKShkZXYsIHNsb3QsIHBpbik7Ci0JaWYgKGlycSA9PSAtMSkKLQkJaXJxID0gMDsKKwkJaXJxID0gKCptYXBfaXJxKShkZXYsIHNsb3QsIHBpbik7CisJCWlmIChpcnEgPT0gLTEpCisJCQlpcnEgPSAwOworCX0KIAlkZXYtPmlycSA9IGlycTsKIAogCXByX2RlYnVnKCJQQ0k6IGZpeHVwIGlycTogKCVzKSBnb3QgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKaW5kZXggYjMxODYyOC4uOTliYWFiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCWJvYXJkLT5kZXRfcGluLCBib2FyZC0+aXJxX3Bpbik7CiAKIAljZi0+c29ja2V0Lm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY2YtPnNvY2tldC5kZXYuZGV2ID0gJnBkZXYtPmRldjsKKwljZi0+c29ja2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCWNmLT5zb2NrZXQub3BzID0gJmF0OTFfY2Zfb3BzOwogCWNmLT5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9zdGF0aWNfb3BzOwogCWNmLT5zb2NrZXQuZmVhdHVyZXMgPSBTU19DQVBfUENDQVJEIHwgU1NfQ0FQX1NUQVRJQ19NQVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYyBiL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYwppbmRleCAyZDdlZmZlLi5hMWJkNzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCkBAIC00MCw4ICs0MCw2IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIEZJTkRfRklSU1RfQklUKG4pCSgobikgLSAoKG4pICYgKChuKS0xKSkpCi0KIC8qIE9mZnNldHMgaW4gdGhlIEV4cGFuc2lvbiBST00gSW1hZ2UgSGVhZGVyICovCiAjZGVmaW5lIFJPTV9TSUdOQVRVUkUJCTB4MDAwMAkvKiAyIGJ5dGVzICovCiAjZGVmaW5lIFJPTV9EQVRBX1BUUgkJMHgwMDE4CS8qIDIgYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwppbmRleCBkMmEzYmVhLi5hYTc3NzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCkBAIC00NzgsNyArNDc4LDcgQEAKICAqCiAgKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWRkZWQgdG8gdGhlIGJ1ZmZlcgogICovCi1zdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCA9CiAJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCwgc29ja2V0LmRldik7CkBAIC01MDEsNyArNTAxLDcgQEAKIAogCXJldHVybiBwLWJ1ZjsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzdGF0dXMsIFNfSVJVR08sIHNob3dfc3RhdHVzLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdGF0dXMsIFNfSVJVR08sIHNob3dfc3RhdHVzLCBOVUxMKTsKIAogCiBzdGF0aWMgc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIHNvY19jb21tb25fcGNtY2lhX29wZXJhdGlvbnMgPSB7CkBAIC02NjAsNyArNjYwLDcgQEAKIAogCQlza3QtPnNvY2tldC5vcHMgPSAmc29jX2NvbW1vbl9wY21jaWFfb3BlcmF0aW9uczsKIAkJc2t0LT5zb2NrZXQub3duZXIgPSBvcHMtPm93bmVyOwotCQlza3QtPnNvY2tldC5kZXYuZGV2ID0gZGV2OworCQlza3QtPnNvY2tldC5kZXYucGFyZW50ID0gZGV2OwogCiAJCWluaXRfdGltZXIoJnNrdC0+cG9sbF90aW1lcik7CiAJCXNrdC0+cG9sbF90aW1lci5mdW5jdGlvbiA9IHNvY19jb21tb25fcGNtY2lhX3BvbGxfZXZlbnQ7CkBAIC03NDcsNyArNzQ3LDcgQEAKIAogCQlhZGRfdGltZXIoJnNrdC0+cG9sbF90aW1lcik7CiAKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZza3QtPnNvY2tldC5kZXYsICZkZXZpY2VfYXR0cl9zdGF0dXMpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnNrdC0+c29ja2V0LmRldiwgJmRldl9hdHRyX3N0YXR1cyk7CiAJfQogCiAJZGV2X3NldF9kcnZkYXRhKGRldiwgc2luZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYWNwaS9LY29uZmlnIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9LY29uZmlnCmluZGV4IGFkMjdlNWUuLmIwNDc2N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGFjcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3BucC9wbnBhY3BpL0tjb25maWcKQEAgLTIsMTcgKzIsNSBAQAogIyBQbHVnIGFuZCBQbGF5IEFDUEkgY29uZmlndXJhdGlvbgogIwogY29uZmlnIFBOUEFDUEkKLQlib29sICJQbHVnIGFuZCBQbGF5IEFDUEkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBOUCAmJiBBQ1BJCi0JZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgTGludXggdXNlcyB0aGUgUE5QQUNQSSB0byBhdXRvZGV0ZWN0IGJ1aWx0LWluCi0JICBtYWluYm9hcmQgcmVzb3VyY2VzIChlLmcuIHBhcmFsbGVsIHBvcnQgcmVzb3VyY2VzKS4KLQotICAgICAgICAgIFNvbWUgZmVhdHVyZXMgKGUuZy4gcmVhbCBob3RwbHVnKSBhcmUgbm90IGN1cnJlbnRseQotICAgICAgICAgIGltcGxlbWVudGVkLgotCi0gICAgICAgICAgSWYgeW91IHdvdWxkIGxpa2UgdGhlIGtlcm5lbCB0byBkZXRlY3QgYW5kIGFsbG9jYXRlIHJlc291cmNlcyB0bwotICAgICAgICAgIHlvdXIgbWFpbmJvYXJkIGRldmljZXMgKG9uIHNvbWUgc3lzdGVtcyB0aGV5IGFyZSBkaXNhYmxlZCBieSB0aGUKLSAgICAgICAgICBCSU9TKSBzYXkgWSBoZXJlLiAgQWxzbyB0aGUgUE5QQUNQSSBjYW4gaGVscCBwcmV2ZW50IHJlc291cmNlCi0gICAgICAgICAgY29uZmxpY3RzIGJldHdlZW4gbWFpbmJvYXJkIGRldmljZXMgYW5kIG90aGVyIGJ1cyBkZXZpY2VzLgorCWJvb2wKKwlkZWZhdWx0IChQTlAgJiYgQUNQSSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL01ha2VmaWxlIGIvZHJpdmVycy9wczMvTWFrZWZpbGUKaW5kZXggOTY5NThjMC4uZTI1MWQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wczMvTWFrZWZpbGUKQEAgLTEsMiArMSwzIEBACiBvYmotJChDT05GSUdfUFMzX1ZVQVJUKSArPSB2dWFydC5vCiBvYmotJChDT05GSUdfUFMzX1BTM0FWKSArPSBwczNhdi5vIHBzM2F2X2NtZC5vCitvYmotJChDT05GSUdfUFMzX1NZU19NQU5BR0VSKSArPSBzeXMtbWFuYWdlci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9zeXMtbWFuYWdlci5jIGIvZHJpdmVycy9wczMvc3lzLW1hbmFnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmMzMGJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wczMvc3lzLW1hbmFnZXIuYwpAQCAtMCwwICsxLDYwNCBAQAorLyoKKyAqICBQUzMgU3lzdGVtIE1hbmFnZXIuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyBTb255IENvbXB1dGVyIEVudGVydGFpbm1lbnQgSW5jLgorICogIENvcHlyaWdodCAyMDA3IFNvbnkgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3BzMy5oPgorI2luY2x1ZGUgInZ1YXJ0LmgiCisKK01PRFVMRV9BVVRIT1IoIlNvbnkgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUFMzIFN5c3RlbSBNYW5hZ2VyIik7CisKKy8qKgorICogcHMzX3N5c19tYW5hZ2VyIC0gUFMzIHN5c3RlbSBtYW5hZ2VyIGRyaXZlci4KKyAqCisgKiBUaGUgc3lzdGVtIG1hbmFnZXIgcHJvdmlkZXMgYW4gYXN5bmNyb25vdXMgc3lzdGVtIGV2ZW50IG5vdGlmaWNhdGlvbgorICogbWVjaGFuaXNtIGZvciByZXBvcnRpbmcgZXZlbnRzIGxpa2UgdGhlcm1hbCBhbGVydCBhbmQgYnV0dG9uIHByZXNzZXMgdG8KKyAqIGd1ZXN0cy4gIEl0IGFsc28gcHJvdmlkZXMgc3VwcG9ydCB0byBjb250cm9sIHN5c3RlbSBzaHV0ZG93biBhbmQgc3RhcnR1cC4KKyAqCisgKiBUaGUgYWN0dWFsIHN5c3RlbSBtYW5hZ2VyIGlzIGltcGxlbWVudGVkIGFzIGFuIGFwcGxpY2F0aW9uIHJ1bm5pbmcgaW4gdGhlCisgKiBzeXN0ZW0gcG9saWN5IG1vZHVsZSBpbiBscGFyXzEuICBHdWVzdHMgY29tbXVuaWNhdGUgd2l0aCB0aGUgc3lzdGVtIG1hbmFnZXIKKyAqIHRocm91Z2ggcG9ydCAyIG9mIHRoZSB2dWFydCB1c2luZyBhIHNpbXBsZSBwYWNrZXQgbWVzc2FnZSBwcm90b2NvbC4KKyAqIE1lc3NhZ2VzIGFyZSBjb21wcmlzZWQgb2YgYSBmaXhlZCBmaWVsZCBoZWFkZXIgZm9sbG93ZWQgYnkgYSBtZXNzYWdlCisgKiBzcGVjaWZpYyBwYXlsb2FkLgorICovCisKKy8qKgorICogc3RydWN0IHBzM19zeXNfbWFuYWdlcl9oZWFkZXIgLSBTeXN0ZW0gbWFuYWdlciBtZXNzYWdlIGhlYWRlci4KKyAqIEB2ZXJzaW9uOiBIZWFkZXIgdmVyc2lvbiwgY3VycmVudGx5IDEuCisgKiBAc2l6ZTogSGVhZGVyIHNpemUgaW4gYnl0ZXMsIGN1cmVudGx5IDE2LgorICogQHBheWxvYWRfc2l6ZTogTWVzc2FnZSBwYXlsb2FkIHNpemUgaW4gYnl0ZXMuCisgKiBAc2VydmljZV9pZDogTWVzc2FnZSB0eXBlLCBvbmUgb2YgZW51bSBwczNfc3lzX21hbmFnZXJfc2VydmljZV9pZC4KKyAqLworCitzdHJ1Y3QgcHMzX3N5c19tYW5hZ2VyX2hlYWRlciB7CisJLyogdmVyc2lvbiAxICovCisJdTggdmVyc2lvbjsKKwl1OCBzaXplOworCXUxNiByZXNlcnZlZF8xOworCXUzMiBwYXlsb2FkX3NpemU7CisJdTE2IHNlcnZpY2VfaWQ7CisJdTE2IHJlc2VydmVkXzJbM107Cit9OworCisvKioKKyAqIEBQUzNfU01fUlhfTVNHX0xFTiAtIFN5c3RlbSBtYW5hZ2VyIHJlY2VpdmVkIG1lc3NhZ2UgbGVuZ3RoLgorICoKKyAqIEN1cnJlbnRseSBhbGwgbWVzc2FnZXMgcmVjZWl2ZWQgZnJvbSB0aGUgc3lzdGVtIG1hbmFnZXIgYXJlIHRoZSBzYW1lIGxlbmd0aAorICogKDE2IGJ5dGVzIGhlYWRlciArIDE2IGJ5dGVzIHBheWxvYWQgPSAzMiBieXRlcykuICBUaGlzIGtub3dsZWdlIGlzIHVzZWQgdG8KKyAqIHNpbXBsaWZ5IHRoZSBsb2dpYy4KKyAqLworCitlbnVtIHsKKwlQUzNfU01fUlhfTVNHX0xFTiA9IDMyLAorfTsKKworLyoqCisgKiBlbnVtIHBzM19zeXNfbWFuYWdlcl9zZXJ2aWNlX2lkIC0gTWVzc2FnZSBoZWFkZXIgc2VydmljZV9pZC4KKyAqIEBQUzNfU01fU0VSVklDRV9JRF9SRVFVRVNUOiAgICAgIGd1ZXN0IC0tPiBzeXNfbWFuYWdlci4KKyAqIEBQUzNfU01fU0VSVklDRV9JRF9DT01NQU5EOiAgICAgIGd1ZXN0IDwtLSBzeXNfbWFuYWdlci4KKyAqIEBQUzNfU01fU0VSVklDRV9JRF9SRVNQT05TRTogICAgIGd1ZXN0IC0tPiBzeXNfbWFuYWdlci4KKyAqIEBQUzNfU01fU0VSVklDRV9JRF9TRVRfQVRUUjogICAgIGd1ZXN0IC0tPiBzeXNfbWFuYWdlci4KKyAqIEBQUzNfU01fU0VSVklDRV9JRF9FWFRFUk5fRVZFTlQ6IGd1ZXN0IDwtLSBzeXNfbWFuYWdlci4KKyAqIEBQUzNfU01fU0VSVklDRV9JRF9TRVRfTkVYVF9PUDogIGd1ZXN0IC0tPiBzeXNfbWFuYWdlci4KKyAqLworCitlbnVtIHBzM19zeXNfbWFuYWdlcl9zZXJ2aWNlX2lkIHsKKwkvKiB2ZXJzaW9uIDEgKi8KKwlQUzNfU01fU0VSVklDRV9JRF9SRVFVRVNUID0gMSwKKwlQUzNfU01fU0VSVklDRV9JRF9SRVNQT05TRSA9IDIsCisJUFMzX1NNX1NFUlZJQ0VfSURfQ09NTUFORCA9IDMsCisJUFMzX1NNX1NFUlZJQ0VfSURfRVhURVJOX0VWRU5UID0gNCwKKwlQUzNfU01fU0VSVklDRV9JRF9TRVRfTkVYVF9PUCA9IDUsCisJUFMzX1NNX1NFUlZJQ0VfSURfU0VUX0FUVFIgPSA4LAorfTsKKworLyoqCisgKiBlbnVtIHBzM19zeXNfbWFuYWdlcl9hdHRyIC0gTm90aWZpY2F0aW9uIGF0dHJpYnV0ZSAoYml0IHBvc2l0aW9uIG1hc2spLgorICogQFBTM19TTV9BVFRSX1BPV0VSOiBQb3dlciBidXR0b24uCisgKiBAUFMzX1NNX0FUVFJfUkVTRVQ6IFJlc2V0IGJ1dHRvbiwgbm90IGF2YWlsYWJsZSBvbiByZXRhaWwgY29uc29sZS4KKyAqIEBQUzNfU01fQVRUUl9USEVSTUFMOiBTeXRlbSB0aGVybWFsIGFsZXJ0LgorICogQFBTM19TTV9BVFRSX0NPTlRST0xMRVI6IFJlbW90ZSBjb250cm9sbGVyIGV2ZW50LgorICogQFBTM19TTV9BVFRSX0FMTDogTG9naWNhbCBPUiBvZiBhbGwuCisgKgorICogVGhlIGd1ZXN0IHRlbGxzIHRoZSBzeXN0ZW0gbWFuYWdlciB3aGljaCBldmVudHMgaXQgaXMgaW50ZXJlc3RlZCBpbiByZWNlaXZpbmcKKyAqIG5vdGljZSBvZiBieSBzZW5kaW5nIHRoZSBzeXN0ZW0gbWFuYWdlciBhIGxvZ2ljYWwgT1Igb2Ygbm90aWZpY2F0aW9uCisgKiBhdHRyaWJ1dGVzIHZpYSB0aGUgcHMzX3N5c19tYW5hZ2VyX3NlbmRfYXR0cigpIHJvdXRpbmUuCisgKi8KKworZW51bSBwczNfc3lzX21hbmFnZXJfYXR0ciB7CisJLyogdmVyc2lvbiAxICovCisJUFMzX1NNX0FUVFJfUE9XRVIgPSAxLAorCVBTM19TTV9BVFRSX1JFU0VUID0gMiwKKwlQUzNfU01fQVRUUl9USEVSTUFMID0gNCwKKwlQUzNfU01fQVRUUl9DT05UUk9MTEVSID0gOCwgLyogYm9ndXM/ICovCisJUFMzX1NNX0FUVFJfQUxMID0gMHgwZiwKK307CisKKy8qKgorICogZW51bSBwczNfc3lzX21hbmFnZXJfZXZlbnQgLSBFeHRlcm5hbCBldmVudCB0eXBlLCByZXBvcnRlZCBieSBzeXN0ZW0gbWFuYWdlci4KKyAqIEBQUzNfU01fRVZFTlRfUE9XRVJfUFJFU1NFRDogcGF5bG9hZC52YWx1ZSBub3QgdXNlZC4KKyAqIEBQUzNfU01fRVZFTlRfUE9XRVJfUkVMRUFTRUQ6IHBheWxvYWQudmFsdWUgPSB0aW1lIHByZXNzZWQgaW4gbWlsbGlzZWMuCisgKiBAUFMzX1NNX0VWRU5UX1JFU0VUX1BSRVNTRUQ6IHBheWxvYWQudmFsdWUgbm90IHVzZWQuCisgKiBAUFMzX1NNX0VWRU5UX1JFU0VUX1JFTEVBU0VEOiBwYXlsb2FkLnZhbHVlID0gdGltZSBwcmVzc2VkIGluIG1pbGxpc2VjLgorICogQFBTM19TTV9FVkVOVF9USEVSTUFMX0FMRVJUOiBwYXlsb2FkLnZhbHVlID0gdGhlcm1hbCB6b25lIGlkLgorICogQFBTM19TTV9FVkVOVF9USEVSTUFMX0NMRUFSRUQ6IHBheWxvYWQudmFsdWUgPSB0aGVybWFsIHpvbmUgaWQuCisgKi8KKworZW51bSBwczNfc3lzX21hbmFnZXJfZXZlbnQgeworCS8qIHZlcnNpb24gMSAqLworCVBTM19TTV9FVkVOVF9QT1dFUl9QUkVTU0VEID0gMywKKwlQUzNfU01fRVZFTlRfUE9XRVJfUkVMRUFTRUQgPSA0LAorCVBTM19TTV9FVkVOVF9SRVNFVF9QUkVTU0VEID0gNSwKKwlQUzNfU01fRVZFTlRfUkVTRVRfUkVMRUFTRUQgPSA2LAorCVBTM19TTV9FVkVOVF9USEVSTUFMX0FMRVJUID0gNywKKwlQUzNfU01fRVZFTlRfVEhFUk1BTF9DTEVBUkVEID0gOCwKKwkvKiBubyBpbmZvIG9uIGNvbnRyb2xsZXIgZXZlbnRzICovCit9OworCisvKioKKyAqIGVudW0gcHMzX3N5c19tYW5hZ2VyX25leHRfb3AgLSBPcGVyYXRpb24gdG8gcGVyZm9ybSBhZnRlciBscGFyIGlzIGRlc3Ryb3llZC4KKyAqLworCitlbnVtIHBzM19zeXNfbWFuYWdlcl9uZXh0X29wIHsKKwkvKiB2ZXJzaW9uIDMgKi8KKwlQUzNfU01fTkVYVF9PUF9TWVNfU0hVVERPV04gPSAxLAorCVBTM19TTV9ORVhUX09QX1NZU19SRUJPT1QgPSAyLAorCVBTM19TTV9ORVhUX09QX0xQQVJfUkVCT09UID0gMHg4MiwKK307CisKKy8qKgorICogZW51bSBwczNfc3lzX21hbmFnZXJfd2FrZV9zb3VyY2UgLSBOZXh0LW9wIHdha2V1cCBzb3VyY2UgKGJpdCBwb3NpdGlvbiBtYXNrKS4KKyAqIEBQUzNfU01fV0FLRV9ERUZBVUxUOiBEaXNrIGluc2VydCwgcG93ZXIgYnV0dG9uLCBlamVjdCBidXR0b24sIElSCisgKiBjb250cm9sbGVyLCBhbmQgYmx1ZXRvb3RoIGNvbnRyb2xsZXIuCisgKiBAUFMzX1NNX1dBS0VfUlRDOgorICogQFBTM19TTV9XQUtFX1JUQ19FUlJPUjoKKyAqIEBQUzNfU01fV0FLRV9QX09fUjogUG93ZXIgb24gcmVzZXQuCisgKgorICogQWRkaXRpb25hbCB3YWtldXAgc291cmNlcyB3aGVuIHNwZWNpZnlpbmcgUFMzX1NNX05FWFRfT1BfU1lTX1NIVVRET1dOLgorICogU3lzdGVtIHdpbGwgYWx3YXlzIHdha2UgZnJvbSB0aGUgUFMzX1NNX1dBS0VfREVGQVVMVCBzb3VyY2VzLgorICovCisKK2VudW0gcHMzX3N5c19tYW5hZ2VyX3dha2Vfc291cmNlIHsKKwkvKiB2ZXJzaW9uIDMgKi8KKwlQUzNfU01fV0FLRV9ERUZBVUxUICAgPSAwLAorCVBTM19TTV9XQUtFX1JUQyAgICAgICA9IDB4MDAwMDAwNDAsCisJUFMzX1NNX1dBS0VfUlRDX0VSUk9SID0gMHgwMDAwMDA4MCwKKwlQUzNfU01fV0FLRV9QX09fUiAgICAgPSAweDEwMDAwMDAwLAorfTsKKworLyoqCisgKiBlbnVtIHBzM19zeXNfbWFuYWdlcl9jbWQgLSBDb21tYW5kIGZyb20gc3lzdGVtIG1hbmFnZXIgdG8gZ3Vlc3QuCisgKgorICogVGhlIGd1ZXN0IGNvbXBsZXRlcyB0aGUgYWN0aW9ucyBuZWVkZWQsIHRoZW4gYWNrcyBvciBuYWtzIHRoZSBjb21tYW5kIHZpYQorICogcHMzX3N5c19tYW5hZ2VyX3NlbmRfcmVzcG9uc2UoKS4gIEluIHRoZSBjYXNlIG9mIEBQUzNfU01fQ01EX1NIVVRET1dOLAorICogdGhlIGd1ZXN0IG11c3QgYmUgZnVsbHkgcHJlcGFyZWQgZm9yIGEgc3lzdGVtIHBvd2Vyb2ZmIHByaW9yIHRvIGFja2luZyB0aGUKKyAqIGNvbW1hbmQuCisgKi8KKworZW51bSBwczNfc3lzX21hbmFnZXJfY21kIHsKKwkvKiB2ZXJzaW9uIDEgKi8KKwlQUzNfU01fQ01EX1NIVVRET1dOID0gMSwgLyogc2h1dGRvd24gZ3Vlc3QgT1MgKi8KK307CisKKy8qKgorICogcHMzX3N5c19tYW5hZ2VyX3dyaXRlIC0gSGVscGVyIHRvIHdyaXRlIGEgdHdvIHBhcnQgbWVzc2FnZSB0byB0aGUgdnVhcnQuCisgKgorICovCisKK3N0YXRpYyBpbnQgcHMzX3N5c19tYW5hZ2VyX3dyaXRlKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiwKKwljb25zdCBzdHJ1Y3QgcHMzX3N5c19tYW5hZ2VyX2hlYWRlciAqaGVhZGVyLCBjb25zdCB2b2lkICpwYXlsb2FkKQoreworCWludCByZXN1bHQ7CisKKwlCVUdfT04oaGVhZGVyLT52ZXJzaW9uICE9IDEpOworCUJVR19PTihoZWFkZXItPnNpemUgIT0gMTYpOworCUJVR19PTihoZWFkZXItPnBheWxvYWRfc2l6ZSAhPSA4ICYmIGhlYWRlci0+cGF5bG9hZF9zaXplICE9IDE2KTsKKwlCVUdfT04oaGVhZGVyLT5zZXJ2aWNlX2lkID4gOCk7CisKKwlyZXN1bHQgPSBwczNfdnVhcnRfd3JpdGUoZGV2LCBoZWFkZXIsCisJCXNpemVvZihzdHJ1Y3QgcHMzX3N5c19tYW5hZ2VyX2hlYWRlcikpOworCisJaWYgKCFyZXN1bHQpCisJCXJlc3VsdCA9IHBzM192dWFydF93cml0ZShkZXYsIHBheWxvYWQsIGhlYWRlci0+cGF5bG9hZF9zaXplKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogcHMzX3N5c19tYW5hZ2VyX3NlbmRfYXR0ciAtIFNlbmQgYSAnc2V0IGF0dHJpYnV0ZScgdG8gdGhlIHN5c3RlbSBtYW5hZ2VyLgorICoKKyAqLworCitzdGF0aWMgaW50IHBzM19zeXNfbWFuYWdlcl9zZW5kX2F0dHIoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2LAorCWVudW0gcHMzX3N5c19tYW5hZ2VyX2F0dHIgYXR0cikKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHBzM19zeXNfbWFuYWdlcl9oZWFkZXIgaGVhZGVyID0geworCQkudmVyc2lvbiA9IDEsCisJCS5zaXplID0gMTYsCisJCS5wYXlsb2FkX3NpemUgPSAxNiwKKwkJLnNlcnZpY2VfaWQgPSBQUzNfU01fU0VSVklDRV9JRF9TRVRfQVRUUiwKKwl9OworCXN0cnVjdCB7CisJCXU4IHZlcnNpb247CisJCXU4IHJlc2VydmVkXzFbM107CisJCXUzMiBhdHRyaWJ1dGU7CisJfSBwYXlsb2FkOworCisJQlVJTERfQlVHX09OKHNpemVvZihwYXlsb2FkKSAhPSA4KTsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiAleGhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgYXR0cik7CisKKwltZW1zZXQoJnBheWxvYWQsIDAsIHNpemVvZihwYXlsb2FkKSk7CisJcGF5bG9hZC52ZXJzaW9uID0gMTsKKwlwYXlsb2FkLmF0dHJpYnV0ZSA9IGF0dHI7CisKKwlyZXR1cm4gcHMzX3N5c19tYW5hZ2VyX3dyaXRlKGRldiwgJmhlYWRlciwgJnBheWxvYWQpOworfQorCisvKioKKyAqIHBzM19zeXNfbWFuYWdlcl9zZW5kX25leHRfb3AgLSBTZW5kIGEgJ3NldCBuZXh0IG9wJyB0byB0aGUgc3lzdGVtIG1hbmFnZXIuCisgKgorICogVGVsbCB0aGUgc3lzdGVtIG1hbmFnZXIgd2hhdCB0byBkbyBhZnRlciB0aGlzIGxwYXIgaXMgZGVzdHJveWVkLgorICovCisKK3N0YXRpYyBpbnQgcHMzX3N5c19tYW5hZ2VyX3NlbmRfbmV4dF9vcChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsCisJZW51bSBwczNfc3lzX21hbmFnZXJfbmV4dF9vcCBvcCwKKwllbnVtIHBzM19zeXNfbWFuYWdlcl93YWtlX3NvdXJjZSB3YWtlX3NvdXJjZSkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHBzM19zeXNfbWFuYWdlcl9oZWFkZXIgaGVhZGVyID0geworCQkudmVyc2lvbiA9IDEsCisJCS5zaXplID0gMTYsCisJCS5wYXlsb2FkX3NpemUgPSAxNiwKKwkJLnNlcnZpY2VfaWQgPSBQUzNfU01fU0VSVklDRV9JRF9TRVRfTkVYVF9PUCwKKwl9OworCXN0cnVjdCB7CisJCXU4IHZlcnNpb247CisJCXU4IHR5cGU7CisJCXU4IGdvc19pZDsKKwkJdTggcmVzZXJ2ZWRfMTsKKwkJdTMyIHdha2Vfc291cmNlOworCQl1OCByZXNlcnZlZF8yWzhdOworCX0gcGF5bG9hZDsKKworCUJVSUxEX0JVR19PTihzaXplb2YocGF5bG9hZCkgIT0gMTYpOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6ICgleGgpXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIG9wKTsKKworCW1lbXNldCgmcGF5bG9hZCwgMCwgc2l6ZW9mKHBheWxvYWQpKTsKKwlwYXlsb2FkLnZlcnNpb24gPSAzOworCXBheWxvYWQudHlwZSA9IG9wOworCXBheWxvYWQuZ29zX2lkID0gMzsgLyogb3RoZXIgb3MgKi8KKwlwYXlsb2FkLndha2Vfc291cmNlID0gd2FrZV9zb3VyY2U7CisKKwlyZXR1cm4gcHMzX3N5c19tYW5hZ2VyX3dyaXRlKGRldiwgJmhlYWRlciwgJnBheWxvYWQpOworfQorCisvKioKKyAqIHBzM19zeXNfbWFuYWdlcl9zZW5kX3JlcXVlc3Rfc2h1dGRvd24gLSBTZW5kICdyZXF1ZXN0JyB0byB0aGUgc3lzdGVtIG1hbmFnZXIuCisgKgorICogVGhlIGd1ZXN0IHNlbmRzIHRoaXMgbWVzc2FnZSB0byByZXF1ZXN0IGFuIG9wZXJhdGlvbiBvciBhY3Rpb24gb2YgdGhlIHN5c3RlbQorICogbWFuYWdlci4gIFRoZSByZXBseSBpcyBhIGNvbW1hbmQgbWVzc2FnZSBmcm9tIHRoZSBzeXN0ZW0gbWFuYWdlci4gIEluIHRoZQorICogY29tbWFuZCBoYW5kbGVyIHRoZSBndWVzdCBwZXJmb3JtcyB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbi4gIFRoZSByZXN1bHQgb2YKKyAqIHRoZSBjb21tYW5kIGlzIHRoZW4gY29tbXVuaWNhdGVkIGJhY2sgdG8gdGhlIHN5c3RlbSBtYW5hZ2VyIHdpdGggYSByZXNwb25zZQorICogbWVzc2FnZS4KKyAqCisgKiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCByZXF1ZXN0IGl0IHRoZSAnc2h1dGRvd24gc2VsZicgcmVxdWVzdC4KKyAqLworCitzdGF0aWMgaW50IHBzM19zeXNfbWFuYWdlcl9zZW5kX3JlcXVlc3Rfc2h1dGRvd24oc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHMzX3N5c19tYW5hZ2VyX2hlYWRlciBoZWFkZXIgPSB7CisJCS52ZXJzaW9uID0gMSwKKwkJLnNpemUgPSAxNiwKKwkJLnBheWxvYWRfc2l6ZSA9IDE2LAorCQkuc2VydmljZV9pZCA9IFBTM19TTV9TRVJWSUNFX0lEX1JFUVVFU1QsCisJfTsKKwlzdHJ1Y3QgeworCQl1OCB2ZXJzaW9uOworCQl1OCB0eXBlOworCQl1OCBnb3NfaWQ7CisJCXU4IHJlc2VydmVkXzFbMTNdOworCX0gc3RhdGljIGNvbnN0IHBheWxvYWQgPSB7CisJCS52ZXJzaW9uID0gMSwKKwkJLnR5cGUgPSAxLCAvKiBzaHV0ZG93biAqLworCQkuZ29zX2lkID0gMCwgLyogc2VsZiAqLworCX07CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHBheWxvYWQpICE9IDE2KTsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJcmV0dXJuIHBzM19zeXNfbWFuYWdlcl93cml0ZShkZXYsICZoZWFkZXIsICZwYXlsb2FkKTsKK30KKworLyoqCisgKiBwczNfc3lzX21hbmFnZXJfc2VuZF9yZXNwb25zZSAtIFNlbmQgYSAncmVzcG9uc2UnIHRvIHRoZSBzeXN0ZW0gbWFuYWdlci4KKyAqIEBzdGF0dXM6IHplcm8gPSBzdWNjZXNzLCBvdGhlcnMgZmFpbC4KKyAqCisgKiBUaGUgZ3Vlc3Qgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIHRoZSBzeXN0ZW0gbWFuYWdlciB0byBhY25vd2xlZGdlIHN1Y2Nlc3Mgb3IKKyAqIGZhaWx1cmUgb2YgYSBjb21tYW5kIHNlbnQgYnkgdGhlIHN5c3RlbSBtYW5hZ2VyLgorICovCisKK3N0YXRpYyBpbnQgcHMzX3N5c19tYW5hZ2VyX3NlbmRfcmVzcG9uc2Uoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2LAorCXU2NCBzdGF0dXMpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBwczNfc3lzX21hbmFnZXJfaGVhZGVyIGhlYWRlciA9IHsKKwkJLnZlcnNpb24gPSAxLAorCQkuc2l6ZSA9IDE2LAorCQkucGF5bG9hZF9zaXplID0gMTYsCisJCS5zZXJ2aWNlX2lkID0gUFMzX1NNX1NFUlZJQ0VfSURfUkVTUE9OU0UsCisJfTsKKwlzdHJ1Y3QgeworCQl1OCB2ZXJzaW9uOworCQl1OCByZXNlcnZlZF8xWzNdOworCQl1OCBzdGF0dXM7CisJCXU4IHJlc2VydmVkXzJbMTFdOworCX0gcGF5bG9hZDsKKworCUJVSUxEX0JVR19PTihzaXplb2YocGF5bG9hZCkgIT0gMTYpOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6ICglcylcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJKHN0YXR1cyA/ICJuYWsiIDogImFjayIpKTsKKworCW1lbXNldCgmcGF5bG9hZCwgMCwgc2l6ZW9mKHBheWxvYWQpKTsKKwlwYXlsb2FkLnZlcnNpb24gPSAxOworCXBheWxvYWQuc3RhdHVzID0gc3RhdHVzOworCisJcmV0dXJuIHBzM19zeXNfbWFuYWdlcl93cml0ZShkZXYsICZoZWFkZXIsICZwYXlsb2FkKTsKK30KKworLyoqCisgKiBwczNfc3lzX21hbmFnZXJfaGFuZGxlX2V2ZW50IC0gU2Vjb25kIHN0YWdlIGV2ZW50IG1zZyBoYW5kbGVyLgorICoKKyAqLworCitzdGF0aWMgaW50IHBzM19zeXNfbWFuYWdlcl9oYW5kbGVfZXZlbnQoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KQoreworCWludCByZXN1bHQ7CisJc3RydWN0IHsKKwkJdTggdmVyc2lvbjsKKwkJdTggdHlwZTsKKwkJdTggcmVzZXJ2ZWRfMVsyXTsKKwkJdTMyIHZhbHVlOworCQl1OCByZXNlcnZlZF8yWzhdOworCX0gZXZlbnQ7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKGV2ZW50KSAhPSAxNik7CisKKwlyZXN1bHQgPSBwczNfdnVhcnRfcmVhZChkZXYsICZldmVudCwgc2l6ZW9mKGV2ZW50KSk7CisJQlVHX09OKHJlc3VsdCk7CisKKwlpZiAoZXZlbnQudmVyc2lvbiAhPSAxKSB7CisJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiB1bnN1cHBvcnRlZCBldmVudCB2ZXJzaW9uICgldSlcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIGV2ZW50LnZlcnNpb24pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKKwljYXNlIFBTM19TTV9FVkVOVF9QT1dFUl9QUkVTU0VEOgorCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogUE9XRVJfUFJFU1NFRFxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCWJyZWFrOworCWNhc2UgUFMzX1NNX0VWRU5UX1BPV0VSX1JFTEVBU0VEOgorCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogUE9XRVJfUkVMRUFTRUQgKCV1IG1zKVxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgZXZlbnQudmFsdWUpOworCQlraWxsX2NhZF9waWQoU0lHSU5ULCAxKTsKKwkJYnJlYWs7CisJY2FzZSBQUzNfU01fRVZFTlRfVEhFUk1BTF9BTEVSVDoKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IFRIRVJNQUxfQUxFUlQgKHpvbmUgJXUpXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBldmVudC52YWx1ZSk7CisJCXByaW50ayhLRVJOX0lORk8gIlBTMyBUaGVybWFsIEFsZXJ0IFpvbmUgJXVcbiIsIGV2ZW50LnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBQUzNfU01fRVZFTlRfVEhFUk1BTF9DTEVBUkVEOgorCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogVEhFUk1BTF9DTEVBUkVEICh6b25lICV1KVxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgZXZlbnQudmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogdW5rbm93biBldmVudCAoJXUpXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBldmVudC50eXBlKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisvKioKKyAqIHBzM19zeXNfbWFuYWdlcl9oYW5kbGVfY21kIC0gU2Vjb25kIHN0YWdlIGNvbW1hbmQgbXNnIGhhbmRsZXIuCisgKgorICogVGhlIHN5c3RlbSBtYW5hZ2VyIHNlbmRzIHRoaXMgaW4gcmVwbHkgdG8gYSAncmVxdWVzdCcgbWVzc2FnZSBmcm9tIHRoZSBndWVzdC4KKyAqLworCitzdGF0aWMgaW50IHBzM19zeXNfbWFuYWdlcl9oYW5kbGVfY21kKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB7CisJCXU4IHZlcnNpb247CisJCXU4IHR5cGU7CisJCXU4IHJlc2VydmVkXzFbMTRdOworCX0gY21kOworCisJQlVJTERfQlVHX09OKHNpemVvZihjbWQpICE9IDE2KTsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJcmVzdWx0ID0gcHMzX3Z1YXJ0X3JlYWQoZGV2LCAmY21kLCBzaXplb2YoY21kKSk7CisKKwlpZihyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwlpZiAoY21kLnZlcnNpb24gIT0gMSkgeworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogdW5zdXBwb3J0ZWQgY21kIHZlcnNpb24gKCV1KVxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgY21kLnZlcnNpb24pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY21kLnR5cGUgIT0gUFMzX1NNX0NNRF9TSFVURE9XTikgeworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogdW5rbm93biBjbWQgKCV1KVxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgY21kLnR5cGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwczNfc3lzX21hbmFnZXJfc2VuZF9yZXNwb25zZShkZXYsIDApOworCXJldHVybiAwOworfQorCisvKioKKyAqIHBzM19zeXNfbWFuYWdlcl9oYW5kbGVfbXNnIC0gRmlyc3Qgc3RhZ2UgbXNnIGhhbmRsZXIuCisgKgorICovCisKK3N0YXRpYyBpbnQgcHMzX3N5c19tYW5hZ2VyX2hhbmRsZV9tc2coc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KQoreworCWludCByZXN1bHQ7CisJc3RydWN0IHBzM19zeXNfbWFuYWdlcl9oZWFkZXIgaGVhZGVyOworCisJcmVzdWx0ID0gcHMzX3Z1YXJ0X3JlYWQoZGV2LCAmaGVhZGVyLAorCQlzaXplb2Yoc3RydWN0IHBzM19zeXNfbWFuYWdlcl9oZWFkZXIpKTsKKworCWlmKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWlmIChoZWFkZXIudmVyc2lvbiAhPSAxKSB7CisJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiB1bnN1cHBvcnRlZCBoZWFkZXIgdmVyc2lvbiAoJXUpXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBoZWFkZXIudmVyc2lvbik7CisJCWdvdG8gZmFpbF9oZWFkZXI7CisJfQorCisJQlVJTERfQlVHX09OKHNpemVvZihoZWFkZXIpICE9IDE2KTsKKwlCVUdfT04oaGVhZGVyLnNpemUgIT0gMTYpOworCUJVR19PTihoZWFkZXIucGF5bG9hZF9zaXplICE9IDE2KTsKKworCXN3aXRjaCAoaGVhZGVyLnNlcnZpY2VfaWQpIHsKKwljYXNlIFBTM19TTV9TRVJWSUNFX0lEX0VYVEVSTl9FVkVOVDoKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IEVWRU5UXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQlyZXR1cm4gcHMzX3N5c19tYW5hZ2VyX2hhbmRsZV9ldmVudChkZXYpOworCWNhc2UgUFMzX1NNX1NFUlZJQ0VfSURfQ09NTUFORDoKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IENPTU1BTkRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXJldHVybiBwczNfc3lzX21hbmFnZXJfaGFuZGxlX2NtZChkZXYpOworCWRlZmF1bHQ6CisJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiB1bmtub3duIHNlcnZpY2VfaWQgKCV1KVxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgaGVhZGVyLnNlcnZpY2VfaWQpOworCQlicmVhazsKKwl9CisJZ290byBmYWlsX2lkOworCitmYWlsX2hlYWRlcjoKKwlwczNfdnVhcnRfY2xlYXJfcnhfYnl0ZXMoZGV2LCAwKTsKKwlyZXR1cm4gLUVJTzsKK2ZhaWxfaWQ6CisJcHMzX3Z1YXJ0X2NsZWFyX3J4X2J5dGVzKGRldiwgaGVhZGVyLnBheWxvYWRfc2l6ZSk7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qKgorICogcHMzX3N5c19tYW5hZ2VyX3dvcmsgLSBBc3luY3Jvbm91cyByZWFkIGhhbmRsZXIuCisgKgorICogU2lnbmFsZWQgd2hlbiBhIGNvbXBsZXRlIG1lc3NhZ2UgYXJyaXZlcyBhdCB0aGUgdnVhcnQgcG9ydC4KKyAqLworCitzdGF0aWMgdm9pZCBwczNfc3lzX21hbmFnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2ID0gcHMzX3Z1YXJ0X3dvcmtfdG9fcG9ydF9kZXZpY2Uod29yayk7CisKKwlwczNfc3lzX21hbmFnZXJfaGFuZGxlX21zZyhkZXYpOworCXBzM192dWFydF9yZWFkX2FzeW5jKGRldiwgcHMzX3N5c19tYW5hZ2VyX3dvcmssIFBTM19TTV9SWF9NU0dfTEVOKTsKK30KKworc3RydWN0IHsKKwlzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXY7Cit9IHN0YXRpYyBkcnZfcHJpdjsKKworLyoqCisgKiBwczNfc3lzX21hbmFnZXJfcmVzdGFydCAtIFRoZSBmaW5hbCBwbGF0Zm9ybSBtYWNoaW5lX3Jlc3RhcnQgcm91dGluZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbmV2ZXIgcmV0dXJucy4gIFRoZSByb3V0aW5lIGRpc2FibGVzIGFzeW5jcm9ub3VzIHZ1YXJ0IHJlYWRzCisgKiB0aGVuIHNwaW5zIGNhbGxpbmcgcHMzX3N5c19tYW5hZ2VyX2hhbmRsZV9tc2coKSB0byByZWNlaXZlIGFuZCBhY2tub3dsZWRnZQorICogdGhlIHNodXRkb3duIGNvbW1hbmQgc2VudCBmcm9tIHRoZSBzeXN0ZW0gbWFuYWdlci4gIFNvb24gYWZ0ZXIgdGhlCisgKiBhY2tub3dsZWRnZW1lbnQgaXMgc2VudCB0aGUgbHBhciBpcyBkZXN0cm95ZWQgYnkgdGhlIEhWLiAgVGhpcyByb3V0aW5lCisgKiBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBwczNfcmVzdGFydCgpLgorICovCisKK3ZvaWQgcHMzX3N5c19tYW5hZ2VyX3Jlc3RhcnQodm9pZCkKK3sKKwlzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYgPSBkcnZfcHJpdi5kZXY7CisKKwlCVUdfT04oIWRydl9wcml2LmRldik7CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXBzM192dWFydF9jYW5jZWxfYXN5bmMoZGV2KTsKKworCXBzM19zeXNfbWFuYWdlcl9zZW5kX2F0dHIoZGV2LCAwKTsKKwlwczNfc3lzX21hbmFnZXJfc2VuZF9uZXh0X29wKGRldiwgUFMzX1NNX05FWFRfT1BfTFBBUl9SRUJPT1QsCisJCVBTM19TTV9XQUtFX0RFRkFVTFQpOworCXBzM19zeXNfbWFuYWdlcl9zZW5kX3JlcXVlc3Rfc2h1dGRvd24oZGV2KTsKKworCXByaW50ayhLRVJOX0VNRVJHICJTeXN0ZW0gSGFsdGVkLCBPSyB0byB0dXJuIG9mZiBwb3dlclxuIik7CisKKwl3aGlsZSgxKQorCQlwczNfc3lzX21hbmFnZXJfaGFuZGxlX21zZyhkZXYpOworfQorCisvKioKKyAqIHBzM19zeXNfbWFuYWdlcl9wb3dlcl9vZmYgLSBUaGUgZmluYWwgcGxhdGZvcm0gbWFjaGluZV9wb3dlcl9vZmYgcm91dGluZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbmV2ZXIgcmV0dXJucy4gIFRoZSByb3V0aW5lIGRpc2FibGVzIGFzeW5jcm9ub3VzIHZ1YXJ0IHJlYWRzCisgKiB0aGVuIHNwaW5zIGNhbGxpbmcgcHMzX3N5c19tYW5hZ2VyX2hhbmRsZV9tc2coKSB0byByZWNlaXZlIGFuZCBhY2tub3dsZWRnZQorICogdGhlIHNodXRkb3duIGNvbW1hbmQgc2VudCBmcm9tIHRoZSBzeXN0ZW0gbWFuYWdlci4gIFNvb24gYWZ0ZXIgdGhlCisgKiBhY2tub3dsZWRnZW1lbnQgaXMgc2VudCB0aGUgbHBhciBpcyBkZXN0cm95ZWQgYnkgdGhlIEhWLiAgVGhpcyByb3V0aW5lCisgKiBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBwczNfcG93ZXJfb2ZmKCkuCisgKi8KKwordm9pZCBwczNfc3lzX21hbmFnZXJfcG93ZXJfb2ZmKHZvaWQpCit7CisJc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2ID0gZHJ2X3ByaXYuZGV2OworCisJQlVHX09OKCFkcnZfcHJpdi5kZXYpOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlwczNfdnVhcnRfY2FuY2VsX2FzeW5jKGRldik7CisKKwlwczNfc3lzX21hbmFnZXJfc2VuZF9uZXh0X29wKGRldiwgUFMzX1NNX05FWFRfT1BfU1lTX1NIVVRET1dOLAorCQlQUzNfU01fV0FLRV9ERUZBVUxUKTsKKwlwczNfc3lzX21hbmFnZXJfc2VuZF9yZXF1ZXN0X3NodXRkb3duKGRldik7CisKKwlwcmludGsoS0VSTl9FTUVSRyAiU3lzdGVtIEhhbHRlZCwgT0sgdG8gdHVybiBvZmYgcG93ZXJcbiIpOworCisJd2hpbGUoMSkKKwkJcHMzX3N5c19tYW5hZ2VyX2hhbmRsZV9tc2coZGV2KTsKK30KKworc3RhdGljIGludCBwczNfc3lzX21hbmFnZXJfcHJvYmUoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KQoreworCWludCByZXN1bHQ7CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCUJVR19PTihkcnZfcHJpdi5kZXYpOworCWRydl9wcml2LmRldiA9IGRldjsKKworCXJlc3VsdCA9IHBzM19zeXNfbWFuYWdlcl9zZW5kX2F0dHIoZGV2LCBQUzNfU01fQVRUUl9BTEwpOworCUJVR19PTihyZXN1bHQpOworCisJcmVzdWx0ID0gcHMzX3Z1YXJ0X3JlYWRfYXN5bmMoZGV2LCBwczNfc3lzX21hbmFnZXJfd29yaywKKwkJUFMzX1NNX1JYX01TR19MRU4pOworCUJVR19PTihyZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kcml2ZXIgcHMzX3N5c19tYW5hZ2VyID0geworCS5tYXRjaF9pZCA9IFBTM19NQVRDSF9JRF9TWVNURU1fTUFOQUdFUiwKKwkuY29yZSA9IHsKKwkJLm5hbWUgPSAicHMzX3N5c19tYW5hZ2VyIiwKKwl9LAorCS5wcm9iZSA9IHBzM19zeXNfbWFuYWdlcl9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBzM19zeXNfbWFuYWdlcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBzM192dWFydF9wb3J0X2RyaXZlcl9yZWdpc3RlcigmcHMzX3N5c19tYW5hZ2VyKTsKK30KKworbW9kdWxlX2luaXQocHMzX3N5c19tYW5hZ2VyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvdnVhcnQuYyBiL2RyaXZlcnMvcHMzL3Z1YXJ0LmMKaW5kZXggZWY4ZmQ0Yy4uNzQ2Mjk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvdnVhcnQuYworKysgYi9kcml2ZXJzL3BzMy92dWFydC5jCkBAIC0yMSw4ICsyMSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9wczMuaD4KIAorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9sdjFjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogCkBAIC0zMCw3ICszMiw3IEBACiAKIE1PRFVMRV9BVVRIT1IoIlNvbnkgQ29ycG9yYXRpb24iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9ERVNDUklQVElPTigicHMzIHZ1YXJ0Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBTMyB2dWFydCIpOwogCiAvKioKICAqIHZ1YXJ0IC0gQW4gaW50ZXItcGFydGl0aW9uIGRhdGEgbGluayBzZXJ2aWNlLgpAQCAtMTU3LDcgKzE1OSw3IEBACiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCi0JcmVzdWx0ID0gbHYxX2dldF92aXJ0dWFsX3VhcnRfcGFyYW0oZGV2LT5wb3J0X251bWJlciwKKwlyZXN1bHQgPSBsdjFfZ2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnByaXYtPnBvcnRfbnVtYmVyLAogCQlQQVJBTV9UWF9UUklHR0VSLCAmdHJpZy0+dHgpOwogCiAJaWYgKHJlc3VsdCkgewpAQCAtMTY2LDcgKzE2OCw3IEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JcmVzdWx0ID0gbHYxX2dldF92aXJ0dWFsX3VhcnRfcGFyYW0oZGV2LT5wb3J0X251bWJlciwKKwlyZXN1bHQgPSBsdjFfZ2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnByaXYtPnBvcnRfbnVtYmVyLAogCQlQQVJBTV9SWF9CVUZfU0laRSwgJnNpemUpOwogCiAJaWYgKHJlc3VsdCkgewpAQCAtMTc1LDcgKzE3Nyw3IEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JcmVzdWx0ID0gbHYxX2dldF92aXJ0dWFsX3VhcnRfcGFyYW0oZGV2LT5wb3J0X251bWJlciwKKwlyZXN1bHQgPSBsdjFfZ2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnByaXYtPnBvcnRfbnVtYmVyLAogCQlQQVJBTV9SWF9UUklHR0VSLCAmdmFsKTsKIAogCWlmIChyZXN1bHQpIHsKQEAgLTE5OCw3ICsyMDAsNyBAQAogCWludCByZXN1bHQ7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCi0JcmVzdWx0ID0gbHYxX3NldF92aXJ0dWFsX3VhcnRfcGFyYW0oZGV2LT5wb3J0X251bWJlciwKKwlyZXN1bHQgPSBsdjFfc2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnByaXYtPnBvcnRfbnVtYmVyLAogCQlQQVJBTV9UWF9UUklHR0VSLCB0eCk7CiAKIAlpZiAocmVzdWx0KSB7CkBAIC0yMDcsNyArMjA5LDcgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQlyZXN1bHQgPSBsdjFfZ2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnBvcnRfbnVtYmVyLAorCXJlc3VsdCA9IGx2MV9nZXRfdmlydHVhbF91YXJ0X3BhcmFtKGRldi0+cHJpdi0+cG9ydF9udW1iZXIsCiAJCVBBUkFNX1JYX0JVRl9TSVpFLCAmc2l6ZSk7CiAKIAlpZiAocmVzdWx0KSB7CkBAIC0yMTYsNyArMjE4LDcgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQlyZXN1bHQgPSBsdjFfc2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnBvcnRfbnVtYmVyLAorCXJlc3VsdCA9IGx2MV9zZXRfdmlydHVhbF91YXJ0X3BhcmFtKGRldi0+cHJpdi0+cG9ydF9udW1iZXIsCiAJCVBBUkFNX1JYX1RSSUdHRVIsIHNpemUgLSByeCk7CiAKIAlpZiAocmVzdWx0KSB7CkBAIC0yMzIsOSArMjM0LDkgQEAKIH0KIAogc3RhdGljIGludCBwczNfdnVhcnRfZ2V0X3J4X2J5dGVzX3dhaXRpbmcoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2LAotCXVuc2lnbmVkIGxvbmcgKmJ5dGVzX3dhaXRpbmcpCisJdTY0ICpieXRlc193YWl0aW5nKQogewotCWludCByZXN1bHQgPSBsdjFfZ2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnBvcnRfbnVtYmVyLAorCWludCByZXN1bHQgPSBsdjFfZ2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnByaXYtPnBvcnRfbnVtYmVyLAogCQlQQVJBTV9SWF9CWVRFUywgYnl0ZXNfd2FpdGluZyk7CiAKIAlpZiAocmVzdWx0KQpAQCAtMjUzLDEwICsyNTUsMTAgQEAKIAogCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiAlbHhoXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIG1hc2spOwogCi0JZGV2LT5pbnRlcnJ1cHRfbWFzayA9IG1hc2s7CisJZGV2LT5wcml2LT5pbnRlcnJ1cHRfbWFzayA9IG1hc2s7CiAKLQlyZXN1bHQgPSBsdjFfc2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnBvcnRfbnVtYmVyLAotCQlQQVJBTV9JTlRFUlJVUFRfTUFTSywgZGV2LT5pbnRlcnJ1cHRfbWFzayk7CisJcmVzdWx0ID0gbHYxX3NldF92aXJ0dWFsX3VhcnRfcGFyYW0oZGV2LT5wcml2LT5wb3J0X251bWJlciwKKwkJUEFSQU1fSU5URVJSVVBUX01BU0ssIGRldi0+cHJpdi0+aW50ZXJydXB0X21hc2spOwogCiAJaWYgKHJlc3VsdCkKIAkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGludGVycnVwdF9tYXNrIGZhaWxlZDogJXNcbiIsCkBAIC0yNjUsNjIgKzI2Nyw2NCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgcHMzX3Z1YXJ0X2dldF9pbnRlcnJ1cHRfbWFzayhzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IHBzM192dWFydF9nZXRfaW50ZXJydXB0X3N0YXR1cyhzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsCiAJdW5zaWduZWQgbG9uZyAqc3RhdHVzKQogewotCWludCByZXN1bHQgPSBsdjFfZ2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnBvcnRfbnVtYmVyLAotCQlQQVJBTV9JTlRFUlJVUFRfU1RBVFVTLCBzdGF0dXMpOworCXU2NCB0bXA7CisJaW50IHJlc3VsdCA9IGx2MV9nZXRfdmlydHVhbF91YXJ0X3BhcmFtKGRldi0+cHJpdi0+cG9ydF9udW1iZXIsCisJCVBBUkFNX0lOVEVSUlVQVF9TVEFUVVMsICZ0bXApOwogCiAJaWYgKHJlc3VsdCkKIAkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGludGVycnVwdF9zdGF0dXMgZmFpbGVkOiAlc1xuIiwKIAkJCV9fZnVuY19fLCBfX0xJTkVfXywgcHMzX3Jlc3VsdChyZXN1bHQpKTsKIAorCSpzdGF0dXMgPSB0bXAgJiBkZXYtPnByaXYtPmludGVycnVwdF9tYXNrOworCiAJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IG0gJWx4aCwgcyAlbHhoLCBtJnMgJWx4aFxuIiwKLQkJX19mdW5jX18sIF9fTElORV9fLCBkZXYtPmludGVycnVwdF9tYXNrLCAqc3RhdHVzLAotCQlkZXYtPmludGVycnVwdF9tYXNrICYgKnN0YXR1cyk7CisJCV9fZnVuY19fLCBfX0xJTkVfXywgZGV2LT5wcml2LT5pbnRlcnJ1cHRfbWFzaywgdG1wLCAqc3RhdHVzKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKIGludCBwczNfdnVhcnRfZW5hYmxlX2ludGVycnVwdF90eChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChkZXYtPmludGVycnVwdF9tYXNrICYgSU5URVJSVVBUX01BU0tfVFgpID8gMAotCQk6IHBzM192dWFydF9zZXRfaW50ZXJydXB0X21hc2soZGV2LCBkZXYtPmludGVycnVwdF9tYXNrCisJcmV0dXJuIChkZXYtPnByaXYtPmludGVycnVwdF9tYXNrICYgSU5URVJSVVBUX01BU0tfVFgpID8gMAorCQk6IHBzM192dWFydF9zZXRfaW50ZXJydXB0X21hc2soZGV2LCBkZXYtPnByaXYtPmludGVycnVwdF9tYXNrCiAJCXwgSU5URVJSVVBUX01BU0tfVFgpOwogfQogCiBpbnQgcHMzX3Z1YXJ0X2VuYWJsZV9pbnRlcnJ1cHRfcngoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KQogewotCXJldHVybiAoZGV2LT5pbnRlcnJ1cHRfbWFzayAmIElOVEVSUlVQVF9NQVNLX1JYKSA/IDAKLQkJOiBwczNfdnVhcnRfc2V0X2ludGVycnVwdF9tYXNrKGRldiwgZGV2LT5pbnRlcnJ1cHRfbWFzaworCXJldHVybiAoZGV2LT5wcml2LT5pbnRlcnJ1cHRfbWFzayAmIElOVEVSUlVQVF9NQVNLX1JYKSA/IDAKKwkJOiBwczNfdnVhcnRfc2V0X2ludGVycnVwdF9tYXNrKGRldiwgZGV2LT5wcml2LT5pbnRlcnJ1cHRfbWFzawogCQl8IElOVEVSUlVQVF9NQVNLX1JYKTsKIH0KIAogaW50IHBzM192dWFydF9lbmFibGVfaW50ZXJydXB0X2Rpc2Nvbm5lY3Qoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KQogewotCXJldHVybiAoZGV2LT5pbnRlcnJ1cHRfbWFzayAmIElOVEVSUlVQVF9NQVNLX0RJU0NPTk5FQ1QpID8gMAotCQk6IHBzM192dWFydF9zZXRfaW50ZXJydXB0X21hc2soZGV2LCBkZXYtPmludGVycnVwdF9tYXNrCisJcmV0dXJuIChkZXYtPnByaXYtPmludGVycnVwdF9tYXNrICYgSU5URVJSVVBUX01BU0tfRElTQ09OTkVDVCkgPyAwCisJCTogcHMzX3Z1YXJ0X3NldF9pbnRlcnJ1cHRfbWFzayhkZXYsIGRldi0+cHJpdi0+aW50ZXJydXB0X21hc2sKIAkJfCBJTlRFUlJVUFRfTUFTS19ESVNDT05ORUNUKTsKIH0KIAogaW50IHBzM192dWFydF9kaXNhYmxlX2ludGVycnVwdF90eChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChkZXYtPmludGVycnVwdF9tYXNrICYgSU5URVJSVVBUX01BU0tfVFgpCi0JCT8gcHMzX3Z1YXJ0X3NldF9pbnRlcnJ1cHRfbWFzayhkZXYsIGRldi0+aW50ZXJydXB0X21hc2sKKwlyZXR1cm4gKGRldi0+cHJpdi0+aW50ZXJydXB0X21hc2sgJiBJTlRFUlJVUFRfTUFTS19UWCkKKwkJPyBwczNfdnVhcnRfc2V0X2ludGVycnVwdF9tYXNrKGRldiwgZGV2LT5wcml2LT5pbnRlcnJ1cHRfbWFzawogCQkmIH5JTlRFUlJVUFRfTUFTS19UWCkgOiAwOwogfQogCiBpbnQgcHMzX3Z1YXJ0X2Rpc2FibGVfaW50ZXJydXB0X3J4KHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gKGRldi0+aW50ZXJydXB0X21hc2sgJiBJTlRFUlJVUFRfTUFTS19SWCkKLQkJPyBwczNfdnVhcnRfc2V0X2ludGVycnVwdF9tYXNrKGRldiwgZGV2LT5pbnRlcnJ1cHRfbWFzaworCXJldHVybiAoZGV2LT5wcml2LT5pbnRlcnJ1cHRfbWFzayAmIElOVEVSUlVQVF9NQVNLX1JYKQorCQk/IHBzM192dWFydF9zZXRfaW50ZXJydXB0X21hc2soZGV2LCBkZXYtPnByaXYtPmludGVycnVwdF9tYXNrCiAJCSYgfklOVEVSUlVQVF9NQVNLX1JYKSA6IDA7CiB9CiAKIGludCBwczNfdnVhcnRfZGlzYWJsZV9pbnRlcnJ1cHRfZGlzY29ubmVjdChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChkZXYtPmludGVycnVwdF9tYXNrICYgSU5URVJSVVBUX01BU0tfRElTQ09OTkVDVCkKLQkJPyBwczNfdnVhcnRfc2V0X2ludGVycnVwdF9tYXNrKGRldiwgZGV2LT5pbnRlcnJ1cHRfbWFzaworCXJldHVybiAoZGV2LT5wcml2LT5pbnRlcnJ1cHRfbWFzayAmIElOVEVSUlVQVF9NQVNLX0RJU0NPTk5FQ1QpCisJCT8gcHMzX3Z1YXJ0X3NldF9pbnRlcnJ1cHRfbWFzayhkZXYsIGRldi0+cHJpdi0+aW50ZXJydXB0X21hc2sKIAkJJiB+SU5URVJSVVBUX01BU0tfRElTQ09OTkVDVCkgOiAwOwogfQogCkBAIC0zMzUsOSArMzM5LDcgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0JZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6ICV4aFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBieXRlcyk7Ci0KLQlyZXN1bHQgPSBsdjFfd3JpdGVfdmlydHVhbF91YXJ0KGRldi0+cG9ydF9udW1iZXIsCisJcmVzdWx0ID0gbHYxX3dyaXRlX3ZpcnR1YWxfdWFydChkZXYtPnByaXYtPnBvcnRfbnVtYmVyLAogCQlwczNfbW1fcGh5c190b19scGFyKF9fcGEoYnVmKSksIGJ5dGVzLCBieXRlc193cml0dGVuKTsKIAogCWlmIChyZXN1bHQpIHsKQEAgLTM0NiwxMCArMzQ4LDEwIEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JZGV2LT5zdGF0cy5ieXRlc193cml0dGVuICs9ICpieXRlc193cml0dGVuOworCWRldi0+cHJpdi0+c3RhdHMuYnl0ZXNfd3JpdHRlbiArPSAqYnl0ZXNfd3JpdHRlbjsKIAotCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiB3cm90ZSAlbHhoLyV4aD0+JWx4aFxuIiwgX19mdW5jX18sCi0JCV9fTElORV9fLCAqYnl0ZXNfd3JpdHRlbiwgYnl0ZXMsIGRldi0+c3RhdHMuYnl0ZXNfd3JpdHRlbik7CisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHdyb3RlICVseGgvJXhoPT4lbHhoXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCisJCSpieXRlc193cml0dGVuLCBieXRlcywgZGV2LT5wcml2LT5zdGF0cy5ieXRlc193cml0dGVuKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0zNjcsNyArMzY5LDcgQEAKIAogCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiAleGhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgYnl0ZXMpOwogCi0JcmVzdWx0ID0gbHYxX3JlYWRfdmlydHVhbF91YXJ0KGRldi0+cG9ydF9udW1iZXIsCisJcmVzdWx0ID0gbHYxX3JlYWRfdmlydHVhbF91YXJ0KGRldi0+cHJpdi0+cG9ydF9udW1iZXIsCiAJCXBzM19tbV9waHlzX3RvX2xwYXIoX19wYShidWYpKSwgYnl0ZXMsIGJ5dGVzX3JlYWQpOwogCiAJaWYgKHJlc3VsdCkgewpAQCAtMzc2LDE1ICszNzgsNTggQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQlkZXYtPnN0YXRzLmJ5dGVzX3JlYWQgKz0gKmJ5dGVzX3JlYWQ7CisJZGV2LT5wcml2LT5zdGF0cy5ieXRlc19yZWFkICs9ICpieXRlc19yZWFkOwogCiAJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHJlYWQgJWx4aC8leGg9PiVseGhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKLQkJKmJ5dGVzX3JlYWQsIGJ5dGVzLCBkZXYtPnN0YXRzLmJ5dGVzX3JlYWQpOworCQkqYnl0ZXNfcmVhZCwgYnl0ZXMsIGRldi0+cHJpdi0+c3RhdHMuYnl0ZXNfcmVhZCk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQogCiAvKioKKyAqIHBzM192dWFydF9jbGVhcl9yeF9ieXRlcyAtIERpc2NhcmQgYnl0ZXMgcmVjZWl2ZWQuCisgKiBAYnl0ZXM6IE1heCBieXRlIGNvdW50IHRvIGRpc2NhcmQsIHplcm8gPSBhbGwgcGVuZGluZy4KKyAqCisgKiBVc2VkIHRvIGNsZWFyIHBlbmRpbmcgcnggaW50ZXJydXB0IHNvdXJjZS4gIFdpbGwgbm90IGJsb2NrLgorICovCisKK3ZvaWQgcHMzX3Z1YXJ0X2NsZWFyX3J4X2J5dGVzKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiwKKwl1bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJaW50IHJlc3VsdDsKKwl1NjQgYnl0ZXNfd2FpdGluZzsKKwl2b2lkKiB0bXA7CisKKwlyZXN1bHQgPSBwczNfdnVhcnRfZ2V0X3J4X2J5dGVzX3dhaXRpbmcoZGV2LCAmYnl0ZXNfd2FpdGluZyk7CisKKwlCVUdfT04ocmVzdWx0KTsKKworCWJ5dGVzID0gYnl0ZXMgPyBtaW4oYnl0ZXMsICh1bnNpZ25lZCBpbnQpYnl0ZXNfd2FpdGluZykgOiBieXRlc193YWl0aW5nOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6ICV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGJ5dGVzKTsKKworCWlmICghYnl0ZXMpCisJCXJldHVybjsKKworCS8qIEFkZCBzb21lIGV4dHJhIHNwYWNlIGZvciByZWNlbnRseSBhcnJpdmVkIGRhdGEuICovCisKKwlieXRlcyArPSAxMjg7CisKKwl0bXAgPSBrbWFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKKworCWlmICghdG1wKQorCQlyZXR1cm47CisKKwlwczNfdnVhcnRfcmF3X3JlYWQoZGV2LCB0bXAsIGJ5dGVzLCAmYnl0ZXNfd2FpdGluZyk7CisKKwlrZnJlZSh0bXApOworCisJLyogRG9uJ3QgaW5jbHVkZSB0aGVzZSBieXRlcyBpbiB0aGUgc3RhdHMuICovCisKKwlkZXYtPnByaXYtPnN0YXRzLmJ5dGVzX3JlYWQgLT0gYnl0ZXNfd2FpdGluZzsKK30KKworLyoqCiAgKiBzdHJ1Y3QgbGlzdF9idWZmZXIgLSBBbiBlbGVtZW50IGZvciBhIHBvcnQgZGV2aWNlIGZpZm8gYnVmZmVyIGxpc3QuCiAgKi8KIApAQCAtNDE2LDE0ICs0NjEsMTQgQEAKIAlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogJXUoJXhoKSBieXRlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLAogCQlieXRlcywgYnl0ZXMpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dHhfbGlzdC5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cHJpdi0+dHhfbGlzdC5sb2NrLCBmbGFncyk7CiAKLQlpZiAobGlzdF9lbXB0eSgmZGV2LT50eF9saXN0LmhlYWQpKSB7CisJaWYgKGxpc3RfZW1wdHkoJmRldi0+cHJpdi0+dHhfbGlzdC5oZWFkKSkgewogCQl1bnNpZ25lZCBsb25nIGJ5dGVzX3dyaXR0ZW47CiAKIAkJcmVzdWx0ID0gcHMzX3Z1YXJ0X3Jhd193cml0ZShkZXYsIGJ1ZiwgYnl0ZXMsICZieXRlc193cml0dGVuKTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnByaXYtPnR4X2xpc3QubG9jaywgZmxhZ3MpOwogCiAJCWlmIChyZXN1bHQpIHsKIAkJCWRldl9kYmcoJmRldi0+Y29yZSwKQEAgLTQ0MSw3ICs0ODYsNyBAQAogCQlieXRlcyAtPSBieXRlc193cml0dGVuOwogCQlidWYgKz0gYnl0ZXNfd3JpdHRlbjsKIAl9IGVsc2UKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT50eF9saXN0LmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wcml2LT50eF9saXN0LmxvY2ssIGZsYWdzKTsKIAogCWxiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RfYnVmZmVyKSArIGJ5dGVzLCBHRlBfS0VSTkVMKTsKIApAQCAtNDU0LDEwICs0OTksMTAgQEAKIAlsYi0+dGFpbCA9IGxiLT5kYXRhICsgYnl0ZXM7CiAJbGItPmRiZ19udW1iZXIgPSArK2RiZ19udW1iZXI7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT50eF9saXN0LmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZsYi0+bGluaywgJmRldi0+dHhfbGlzdC5oZWFkKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wcml2LT50eF9saXN0LmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZsYi0+bGluaywgJmRldi0+cHJpdi0+dHhfbGlzdC5oZWFkKTsKIAlwczNfdnVhcnRfZW5hYmxlX2ludGVycnVwdF90eChkZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dHhfbGlzdC5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wcml2LT50eF9saXN0LmxvY2ssIGZsYWdzKTsKIAogCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiBxdWV1ZWQgYnVmXyVsdSwgJXhoIGJ5dGVzXG4iLAogCQlfX2Z1bmNfXywgX19MSU5FX18sIGxiLT5kYmdfbnVtYmVyLCBieXRlcyk7CkBAIC00ODQsNDcgKzUyOSw4MyBAQAogCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiAldSgleGgpIGJ5dGVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCiAJCWJ5dGVzLCBieXRlcyk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yeF9saXN0LmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wcml2LT5yeF9saXN0LmxvY2ssIGZsYWdzKTsKIAotCWlmIChkZXYtPnJ4X2xpc3QuYnl0ZXNfaGVsZCA8IGJ5dGVzKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cnhfbGlzdC5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+cHJpdi0+cnhfbGlzdC5ieXRlc19oZWxkIDwgYnl0ZXMpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wcml2LT5yeF9saXN0LmxvY2ssIGZsYWdzKTsKIAkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHN0YXJ2ZWQgZm9yICVseGggYnl0ZXNcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18sIGJ5dGVzIC0gZGV2LT5yeF9saXN0LmJ5dGVzX2hlbGQpOworCQkJX19mdW5jX18sIF9fTElORV9fLAorCQkJYnl0ZXMgLSBkZXYtPnByaXYtPnJ4X2xpc3QuYnl0ZXNfaGVsZCk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsYiwgbiwgJmRldi0+cnhfbGlzdC5oZWFkLCBsaW5rKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxiLCBuLCAmZGV2LT5wcml2LT5yeF9saXN0LmhlYWQsIGxpbmspIHsKIAkJYnl0ZXNfcmVhZCA9IG1pbigodW5zaWduZWQgaW50KShsYi0+dGFpbCAtIGxiLT5oZWFkKSwgYnl0ZXMpOwogCiAJCW1lbWNweShidWYsIGxiLT5oZWFkLCBieXRlc19yZWFkKTsKIAkJYnVmICs9IGJ5dGVzX3JlYWQ7CiAJCWJ5dGVzIC09IGJ5dGVzX3JlYWQ7Ci0JCWRldi0+cnhfbGlzdC5ieXRlc19oZWxkIC09IGJ5dGVzX3JlYWQ7CisJCWRldi0+cHJpdi0+cnhfbGlzdC5ieXRlc19oZWxkIC09IGJ5dGVzX3JlYWQ7CiAKIAkJaWYgKGJ5dGVzX3JlYWQgPCBsYi0+dGFpbCAtIGxiLT5oZWFkKSB7CiAJCQlsYi0+aGVhZCArPSBieXRlc19yZWFkOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yeF9saXN0LmxvY2ssIGZsYWdzKTsKLQotCQkJZGV2X2RiZygmZGV2LT5jb3JlLAotCQkJCSIlczolZDogZGVxdWV1ZWQgYnVmXyVsdSwgJWx4aCBieXRlc1xuIiwKLQkJCQlfX2Z1bmNfXywgX19MSU5FX18sIGxiLT5kYmdfbnVtYmVyLCBieXRlc19yZWFkKTsKKwkJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiBidWZfJWx1OiBkZXF1ZXVlZCAlbHhoICIKKwkJCQkiYnl0ZXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgbGItPmRiZ19udW1iZXIsCisJCQkJYnl0ZXNfcmVhZCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnByaXYtPnJ4X2xpc3QubG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZCBmcmVlIGJ1Zl8lbHVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKLQkJCWxiLT5kYmdfbnVtYmVyKTsKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGJ1Zl8lbHU6IGZyZWUsIGRlcXVldWVkICVseGggIgorCQkJImJ5dGVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGxiLT5kYmdfbnVtYmVyLAorCQkJYnl0ZXNfcmVhZCk7CiAKIAkJbGlzdF9kZWwoJmxiLT5saW5rKTsKIAkJa2ZyZWUobGIpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJ4X2xpc3QubG9jaywgZmxhZ3MpOwogCi0JZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGRlcXVldWVkIGJ1Zl8lbHUsICV4aCBieXRlc1xuIiwKLQkJX19mdW5jX18sIF9fTElORV9fLCBsYi0+ZGJnX251bWJlciwgYnl0ZXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cHJpdi0+cnhfbGlzdC5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwczNfdnVhcnRfcmVhZF9hc3luYyhzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsIHdvcmtfZnVuY190IGZ1bmMsCisJdW5zaWduZWQgaW50IGJ5dGVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZihkZXYtPnByaXYtPndvcmsudHJpZ2dlcikgeworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogd2FybmluZywgbXVsdGlwbGUgY2FsbHNcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlCVUdfT04oIWJ5dGVzKTsKKworCVBSRVBBUkVfV09SSygmZGV2LT5wcml2LT53b3JrLndvcmssIGZ1bmMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cHJpdi0+d29yay5sb2NrLCBmbGFncyk7CisJaWYoZGV2LT5wcml2LT5yeF9saXN0LmJ5dGVzX2hlbGQgPj0gYnl0ZXMpIHsKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHNjaGVkdWxlX3dvcmsgJXhoIGJ5dGVzXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBieXRlcyk7CisJCXNjaGVkdWxlX3dvcmsoJmRldi0+cHJpdi0+d29yay53b3JrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wcml2LT53b3JrLmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2LT5wcml2LT53b3JrLnRyaWdnZXIgPSBieXRlczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnByaXYtPndvcmsubG9jaywgZmxhZ3MpOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHdhaXRpbmcgZm9yICV1KCV4aCkgYnl0ZXNcbiIsIF9fZnVuY19fLAorCQlfX0xJTkVfXywgYnl0ZXMsIGJ5dGVzKTsKIAogCXJldHVybiAwOwogfQogCit2b2lkIHBzM192dWFydF9jYW5jZWxfYXN5bmMoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KQoreworCWRldi0+cHJpdi0+d29yay50cmlnZ2VyID0gMDsKK30KKwogLyoqCiAgKiBwczNfdnVhcnRfaGFuZGxlX2ludGVycnVwdF90eCAtIHRoaXJkIHN0YWdlIHRyYW5zbWl0IGludGVycnVwdCBoYW5kbGVyCiAgKgpAQCAtNTQyLDkgKzYyMyw5IEBACiAKIAlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnByaXYtPnR4X2xpc3QubG9jaywgZmxhZ3MpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxiLCBuLCAmZGV2LT50eF9saXN0LmhlYWQsIGxpbmspIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGIsIG4sICZkZXYtPnByaXYtPnR4X2xpc3QuaGVhZCwgbGluaykgewogCiAJCXVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbjsKIApAQCAtNTc4LDcgKzY1OSw3IEBACiAKIAlwczNfdnVhcnRfZGlzYWJsZV9pbnRlcnJ1cHRfdHgoZGV2KTsKIHBvcnRfZnVsbDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cHJpdi0+dHhfbGlzdC5sb2NrLCBmbGFncyk7CiAJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQgd3JvdGUgJWx4aCBieXRlcyB0b3RhbFxuIiwKIAkJX19mdW5jX18sIF9fTElORV9fLCBieXRlc190b3RhbCk7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTYwOSw3ICs2OTAsNyBAQAogCiAJQlVHX09OKCFieXRlcyk7CiAKLQkvKiBhZGQgc29tZSBleHRyYSBzcGFjZSBmb3IgcmVjZW50bHkgYXJyaXZlZCBkYXRhICovCisJLyogQWRkIHNvbWUgZXh0cmEgc3BhY2UgZm9yIHJlY2VudGx5IGFycml2ZWQgZGF0YS4gKi8KIAogCWJ5dGVzICs9IDEyODsKIApAQCAtNjI0LDE0ICs3MDUsMjMgQEAKIAlsYi0+dGFpbCA9IGxiLT5kYXRhICsgYnl0ZXM7CiAJbGItPmRiZ19udW1iZXIgPSArK2RiZ19udW1iZXI7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yeF9saXN0LmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZsYi0+bGluaywgJmRldi0+cnhfbGlzdC5oZWFkKTsKLQlkZXYtPnJ4X2xpc3QuYnl0ZXNfaGVsZCArPSBieXRlczsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJ4X2xpc3QubG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnByaXYtPnJ4X2xpc3QubG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmxiLT5saW5rLCAmZGV2LT5wcml2LT5yeF9saXN0LmhlYWQpOworCWRldi0+cHJpdi0+cnhfbGlzdC5ieXRlc19oZWxkICs9IGJ5dGVzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cHJpdi0+cnhfbGlzdC5sb2NrLCBmbGFncyk7CiAKLQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogcXVldWVkIGJ1Zl8lbHUsICVseGggYnl0ZXNcbiIsCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGJ1Zl8lbHU6IHF1ZXVlZCAlbHhoIGJ5dGVzXG4iLAogCQlfX2Z1bmNfXywgX19MSU5FX18sIGxiLT5kYmdfbnVtYmVyLCBieXRlcyk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wcml2LT53b3JrLmxvY2ssIGZsYWdzKTsKKwlpZihkZXYtPnByaXYtPndvcmsudHJpZ2dlcgorCQkmJiBkZXYtPnByaXYtPnJ4X2xpc3QuYnl0ZXNfaGVsZCA+PSBkZXYtPnByaXYtPndvcmsudHJpZ2dlcikgeworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogc2NoZWR1bGVfd29yayAlbHhoIGJ5dGVzXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBkZXYtPnByaXYtPndvcmsudHJpZ2dlcik7CisJCWRldi0+cHJpdi0+d29yay50cmlnZ2VyID0gMDsKKwkJc2NoZWR1bGVfd29yaygmZGV2LT5wcml2LT53b3JrLndvcmspOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnByaXYtPndvcmsubG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC02NTYsNyArNzQ2LDcgQEAKIAlpbnQgcmVzdWx0OwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwogCi0JcmVzdWx0ID0gcHMzX3Z1YXJ0X2dldF9pbnRlcnJ1cHRfbWFzayhkZXYsICZzdGF0dXMpOworCXJlc3VsdCA9IHBzM192dWFydF9nZXRfaW50ZXJydXB0X3N0YXR1cyhkZXYsICZzdGF0dXMpOwogCiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTY2NSwyMSArNzU1LDIxIEBACiAJCXN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzICYgSU5URVJSVVBUX01BU0tfRElTQ09OTkVDVCkgewotCQlkZXYtPnN0YXRzLmRpc2Nvbm5lY3RfaW50ZXJydXB0cysrOworCQlkZXYtPnByaXYtPnN0YXRzLmRpc2Nvbm5lY3RfaW50ZXJydXB0cysrOwogCQlyZXN1bHQgPSBwczNfdnVhcnRfaGFuZGxlX2ludGVycnVwdF9kaXNjb25uZWN0KGRldik7CiAJCWlmIChyZXN1bHQpCiAJCQlwczNfdnVhcnRfZGlzYWJsZV9pbnRlcnJ1cHRfZGlzY29ubmVjdChkZXYpOwogCX0KIAogCWlmIChzdGF0dXMgJiBJTlRFUlJVUFRfTUFTS19UWCkgewotCQlkZXYtPnN0YXRzLnR4X2ludGVycnVwdHMrKzsKKwkJZGV2LT5wcml2LT5zdGF0cy50eF9pbnRlcnJ1cHRzKys7CiAJCXJlc3VsdCA9IHBzM192dWFydF9oYW5kbGVfaW50ZXJydXB0X3R4KGRldik7CiAJCWlmIChyZXN1bHQpCiAJCQlwczNfdnVhcnRfZGlzYWJsZV9pbnRlcnJ1cHRfdHgoZGV2KTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgSU5URVJSVVBUX01BU0tfUlgpIHsKLQkJZGV2LT5zdGF0cy5yeF9pbnRlcnJ1cHRzKys7CisJCWRldi0+cHJpdi0+c3RhdHMucnhfaW50ZXJydXB0cysrOwogCQlyZXN1bHQgPSBwczNfdnVhcnRfaGFuZGxlX2ludGVycnVwdF9yeChkZXYpOwogCQlpZiAocmVzdWx0KQogCQkJcHMzX3Z1YXJ0X2Rpc2FibGVfaW50ZXJydXB0X3J4KGRldik7CkBAIC02ODgsMTIgKzc3OCwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgdnVhcnRfcHJpdmF0ZSB7Ci0JdW5zaWduZWQgaW50IGluX3VzZTsKLQl1bnNpZ25lZCBpbnQgdmlycTsKLQlzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXZpY2VzW1BPUlRfQ09VTlRdOworc3RydWN0IHZ1YXJ0X2J1c19wcml2IHsKIAljb25zdCBzdHJ1Y3QgcG9ydHNfYm1wIGJtcDsKLX07CisJdW5zaWduZWQgaW50IHZpcnE7CisJc3RydWN0IHNlbWFwaG9yZSBwcm9iZV9tdXRleDsKKwlpbnQgdXNlX2NvdW50OworCXN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldmljZXNbUE9SVF9DT1VOVF07Cit9IHN0YXRpYyB2dWFydF9idXNfcHJpdjsKIAogLyoqCiAgKiBwczNfdnVhcnRfaXJxX2hhbmRsZXIgLSBmaXJzdCBzdGFnZSBpbnRlcnJ1cHQgaGFuZGxlcgpAQCAtNzA1LDI1ICs3OTYsMjUgQEAKIAogc3RhdGljIGlycXJldHVybl90IHBzM192dWFydF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpfcHJpdmF0ZSkKIHsKLQlzdHJ1Y3QgdnVhcnRfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgdnVhcnRfYnVzX3ByaXYgKmJ1c19wcml2OwogCiAJQlVHX09OKCFfcHJpdmF0ZSk7Ci0JcHJpdmF0ZSA9IChzdHJ1Y3QgdnVhcnRfcHJpdmF0ZSAqKV9wcml2YXRlOworCWJ1c19wcml2ID0gKHN0cnVjdCB2dWFydF9idXNfcHJpdiAqKV9wcml2YXRlOwogCiAJd2hpbGUgKDEpIHsKIAkJdW5zaWduZWQgaW50IHBvcnQ7CiAKLQkJZHVtcF9wb3J0c19ibXAoJnByaXZhdGUtPmJtcCk7CisJCWR1bXBfcG9ydHNfYm1wKCZidXNfcHJpdi0+Ym1wKTsKIAotCQlwb3J0ID0gKEJJVFNfUEVSX0xPTkcgLSAxKSAtIF9faWxvZzIocHJpdmF0ZS0+Ym1wLnN0YXR1cyk7CisJCXBvcnQgPSAoQklUU19QRVJfTE9ORyAtIDEpIC0gX19pbG9nMihidXNfcHJpdi0+Ym1wLnN0YXR1cyk7CiAKIAkJaWYgKHBvcnQgPT0gQklUU19QRVJfTE9ORykKIAkJCWJyZWFrOwogCiAJCUJVR19PTihwb3J0ID49IFBPUlRfQ09VTlQpOwotCQlCVUdfT04oIXByaXZhdGUtPmRldmljZXNbcG9ydF0pOworCQlCVUdfT04oIWJ1c19wcml2LT5kZXZpY2VzW3BvcnRdKTsKIAotCQlwczNfdnVhcnRfaGFuZGxlX3BvcnRfaW50ZXJydXB0KHByaXZhdGUtPmRldmljZXNbcG9ydF0pOworCQlwczNfdnVhcnRfaGFuZGxlX3BvcnRfaW50ZXJydXB0KGJ1c19wcml2LT5kZXZpY2VzW3BvcnRdKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC03NDQsMTIgKzgzNSwxMCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdnVhcnRfcHJpdmF0ZSB2dWFydF9wcml2YXRlOwotCiBzdGF0aWMgaW50IHBzM192dWFydF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewogCWludCByZXN1bHQ7Ci0JdW5zaWduZWQgbG9uZyB0bXA7CisJdW5zaWduZWQgaW50IHBvcnRfbnVtYmVyOwogCXN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiA9IHRvX3BzM192dWFydF9wb3J0X2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyICpkcnYgPQogCQl0b19wczNfdnVhcnRfcG9ydF9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKQEAgLTc1OCw3ICs4NDcsMTIgQEAKIAogCUJVR19PTighZHJ2KTsKIAotCXJlc3VsdCA9IHBzM192dWFydF9tYXRjaF9pZF90b19wb3J0KGRldi0+bWF0Y2hfaWQsICZkZXYtPnBvcnRfbnVtYmVyKTsKKwlkb3duKCZ2dWFydF9idXNfcHJpdi5wcm9iZV9tdXRleCk7CisKKwkvKiBTZXR1cCB2dWFydF9idXNfcHJpdi5kZXZpY2VzW10uICovCisKKwlyZXN1bHQgPSBwczNfdnVhcnRfbWF0Y2hfaWRfdG9fcG9ydChkZXYtPm1hdGNoX2lkLAorCQkmcG9ydF9udW1iZXIpOwogCiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogdW5rbm93biBtYXRjaF9pZCAoJWQpXG4iLApAQCAtNzY3LDI0ICs4NjEsNDEgQEAKIAkJZ290byBmYWlsX21hdGNoOwogCX0KIAotCWlmICh2dWFydF9wcml2YXRlLmRldmljZXNbZGV2LT5wb3J0X251bWJlcl0pIHsKKwlpZiAodnVhcnRfYnVzX3ByaXYuZGV2aWNlc1twb3J0X251bWJlcl0pIHsKIAkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHBvcnQgYnVzeSAoJWQpXG4iLCBfX2Z1bmNfXywKLQkJCV9fTElORV9fLCBkZXYtPnBvcnRfbnVtYmVyKTsKKwkJCV9fTElORV9fLCBwb3J0X251bWJlcik7CiAJCXJlc3VsdCA9IC1FQlVTWTsKIAkJZ290byBmYWlsX21hdGNoOwogCX0KIAotCXZ1YXJ0X3ByaXZhdGUuZGV2aWNlc1tkZXYtPnBvcnRfbnVtYmVyXSA9IGRldjsKKwl2dWFydF9idXNfcHJpdi5kZXZpY2VzW3BvcnRfbnVtYmVyXSA9IGRldjsKIAotCUlOSVRfTElTVF9IRUFEKCZkZXYtPnR4X2xpc3QuaGVhZCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmRldi0+dHhfbGlzdC5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmZGV2LT5yeF9saXN0LmhlYWQpOwotCXNwaW5fbG9ja19pbml0KCZkZXYtPnJ4X2xpc3QubG9jayk7CisJLyogU2V0dXAgZGV2LT5wcml2LiAqLwogCi0JdnVhcnRfcHJpdmF0ZS5pbl91c2UrKzsKLQlpZiAodnVhcnRfcHJpdmF0ZS5pbl91c2UgPT0gMSkgeworCWRldi0+cHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9wcml2KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWRldi0+cHJpdikgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfYWxsb2M7CisJfQorCisJZGV2LT5wcml2LT5wb3J0X251bWJlciA9IHBvcnRfbnVtYmVyOworCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+cHJpdi0+dHhfbGlzdC5oZWFkKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5wcml2LT50eF9saXN0LmxvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+cHJpdi0+cnhfbGlzdC5oZWFkKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5wcml2LT5yeF9saXN0LmxvY2spOworCisJSU5JVF9XT1JLKCZkZXYtPnByaXYtPndvcmsud29yaywgTlVMTCk7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+cHJpdi0+d29yay5sb2NrKTsKKwlkZXYtPnByaXYtPndvcmsudHJpZ2dlciA9IDA7CisJZGV2LT5wcml2LT53b3JrLmRldiA9IGRldjsKKworCWlmICgrK3Z1YXJ0X2J1c19wcml2LnVzZV9jb3VudCA9PSAxKSB7CisKIAkJcmVzdWx0ID0gcHMzX2FsbG9jX3Z1YXJ0X2lycShQUzNfQklORElOR19DUFVfQU5ZLAotCQkJKHZvaWQqKSZ2dWFydF9wcml2YXRlLmJtcC5zdGF0dXMsICZ2dWFydF9wcml2YXRlLnZpcnEpOworCQkJKHZvaWQqKSZ2dWFydF9idXNfcHJpdi5ibXAuc3RhdHVzLCAmdnVhcnRfYnVzX3ByaXYudmlycSk7CiAKIAkJaWYgKHJlc3VsdCkgewogCQkJZGV2X2RiZygmZGV2LT5jb3JlLApAQCAtNzk0LDggKzkwNSw4IEBACiAJCQlnb3RvIGZhaWxfYWxsb2NfaXJxOwogCQl9CiAKLQkJcmVzdWx0ID0gcmVxdWVzdF9pcnEodnVhcnRfcHJpdmF0ZS52aXJxLCBwczNfdnVhcnRfaXJxX2hhbmRsZXIsCi0JCQlJUlFGX0RJU0FCTEVELCAidnVhcnQiLCAmdnVhcnRfcHJpdmF0ZSk7CisJCXJlc3VsdCA9IHJlcXVlc3RfaXJxKHZ1YXJ0X2J1c19wcml2LnZpcnEsIHBzM192dWFydF9pcnFfaGFuZGxlciwKKwkJCUlSUUZfRElTQUJMRUQsICJ2dWFydCIsICZ2dWFydF9idXNfcHJpdik7CiAKIAkJaWYgKHJlc3VsdCkgewogCQkJZGV2X2luZm8oJmRldi0+Y29yZSwgIiVzOiVkOiByZXF1ZXN0X2lycSBmYWlsZWQgKCVkKVxuIiwKQEAgLTgwNCwxMCArOTE1LDExIEBACiAJCX0KIAl9CiAKLQlwczNfdnVhcnRfc2V0X2ludGVycnVwdF9tYXNrKGRldiwgSU5URVJSVVBUX01BU0tfUlgpOwotCiAJLyogY2xlYXIgc3RhbGUgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JcHMzX3Z1YXJ0X2dldF9pbnRlcnJ1cHRfbWFzayhkZXYsICZ0bXApOworCisJcHMzX3Z1YXJ0X2NsZWFyX3J4X2J5dGVzKGRldiwgMCk7CisKKwlwczNfdnVhcnRfc2V0X2ludGVycnVwdF9tYXNrKGRldiwgSU5URVJSVVBUX01BU0tfUlgpOwogCiAJcHMzX3Z1YXJ0X3NldF90cmlnZ2VycyhkZXYsIDEsIDEpOwogCkBAIC04MjIsMjAgKzkzNCwyNyBAQAogCWlmIChyZXN1bHQpIHsKIAkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGRydi0+cHJvYmUgZmFpbGVkXG4iLAogCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJZG93bigmdnVhcnRfYnVzX3ByaXYucHJvYmVfbXV0ZXgpOwogCQlnb3RvIGZhaWxfcHJvYmU7CiAJfQogCisJdXAoJnZ1YXJ0X2J1c19wcml2LnByb2JlX211dGV4KTsKKwogCXJldHVybiByZXN1bHQ7CiAKIGZhaWxfcHJvYmU6CisJcHMzX3Z1YXJ0X3NldF9pbnRlcnJ1cHRfbWFzayhkZXYsIDApOwogZmFpbF9yZXF1ZXN0X2lycToKLQl2dWFydF9wcml2YXRlLmluX3VzZS0tOwotCWlmICghdnVhcnRfcHJpdmF0ZS5pbl91c2UpIHsKLQkJcHMzX2ZyZWVfdnVhcnRfaXJxKHZ1YXJ0X3ByaXZhdGUudmlycSk7Ci0JCXZ1YXJ0X3ByaXZhdGUudmlycSA9IE5PX0lSUTsKLQl9CisJcHMzX2ZyZWVfdnVhcnRfaXJxKHZ1YXJ0X2J1c19wcml2LnZpcnEpOworCXZ1YXJ0X2J1c19wcml2LnZpcnEgPSBOT19JUlE7CiBmYWlsX2FsbG9jX2lycToKKwktLXZ1YXJ0X2J1c19wcml2LnVzZV9jb3VudDsKKwlrZnJlZShkZXYtPnByaXYpOworCWRldi0+cHJpdiA9IE5VTEw7CitmYWlsX2FsbG9jOgorCXZ1YXJ0X2J1c19wcml2LmRldmljZXNbcG9ydF9udW1iZXJdID0gMDsKIGZhaWxfbWF0Y2g6CisJdXAoJnZ1YXJ0X2J1c19wcml2LnByb2JlX211dGV4KTsKIAlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZCBmYWlsZWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTg0NiwxMCArOTY1LDEyIEBACiAJc3RydWN0IHBzM192dWFydF9wb3J0X2RyaXZlciAqZHJ2ID0KIAkJdG9fcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyKF9kZXYtPmRyaXZlcik7CiAKKwlkb3duKCZ2dWFydF9idXNfcHJpdi5wcm9iZV9tdXRleCk7CisKIAlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKIAkJZGV2LT5jb3JlLmJ1c19pZCk7CiAKLQlCVUdfT04odnVhcnRfcHJpdmF0ZS5pbl91c2UgPCAxKTsKKwlCVUdfT04odnVhcnRfYnVzX3ByaXYudXNlX2NvdW50IDwgMSk7CiAKIAlpZiAoZHJ2LT5yZW1vdmUpCiAJCWRydi0+cmVtb3ZlKGRldik7CkBAIC04NTcsMTMgKzk3OCwxOSBAQAogCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogJXMgbm8gcmVtb3ZlIG1ldGhvZFxuIiwgX19mdW5jX18sCiAJCQlfX0xJTkVfXywgZGV2LT5jb3JlLmJ1c19pZCk7CiAKLQl2dWFydF9wcml2YXRlLmluX3VzZS0tOworCXZ1YXJ0X2J1c19wcml2LmRldmljZXNbZGV2LT5wcml2LT5wb3J0X251bWJlcl0gPSAwOwogCi0JaWYgKCF2dWFydF9wcml2YXRlLmluX3VzZSkgewotCQlmcmVlX2lycSh2dWFydF9wcml2YXRlLnZpcnEsICZ2dWFydF9wcml2YXRlKTsKLQkJcHMzX2ZyZWVfdnVhcnRfaXJxKHZ1YXJ0X3ByaXZhdGUudmlycSk7Ci0JCXZ1YXJ0X3ByaXZhdGUudmlycSA9IE5PX0lSUTsKKwlpZiAoLS12dWFydF9idXNfcHJpdi51c2VfY291bnQgPT0gMCkgeworCQlCVUcoKTsKKwkJZnJlZV9pcnEodnVhcnRfYnVzX3ByaXYudmlycSwgJnZ1YXJ0X2J1c19wcml2KTsKKwkJcHMzX2ZyZWVfdnVhcnRfaXJxKHZ1YXJ0X2J1c19wcml2LnZpcnEpOworCQl2dWFydF9idXNfcHJpdi52aXJxID0gTk9fSVJROwogCX0KKworCWtmcmVlKGRldi0+cHJpdik7CisJZGV2LT5wcml2ID0gTlVMTDsKKworCXVwKCZ2dWFydF9idXNfcHJpdi5wcm9iZV9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4NCwxMiArMTAxMSwxMiBAQAogfQogCiAvKioKLSAqIHBzM192dWFydCAtIFRoZSB2dWFydCBpbnN0YW5jZS4KKyAqIHBzM192dWFydF9idXMgLSBUaGUgdnVhcnQgYnVzIGluc3RhbmNlLgogICoKICAqIFRoZSB2dWFydCBpcyBtYW5hZ2VkIGFzIGEgYnVzIHRoYXQgcG9ydCBkZXZpY2VzIGNvbm5lY3QgdG8uCiAgKi8KIAotc3RydWN0IGJ1c190eXBlIHBzM192dWFydCA9IHsKK3N0cnVjdCBidXNfdHlwZSBwczNfdnVhcnRfYnVzID0gewogICAgICAgICAubmFtZSA9ICJwczNfdnVhcnQiLAogCS5tYXRjaCA9IHBzM192dWFydF9tYXRjaCwKIAkucHJvYmUgPSBwczNfdnVhcnRfcHJvYmUsCkBAIC04OTcsMjQgKzEwMjQsMzAgQEAKIAkuc2h1dGRvd24gPSBwczNfdnVhcnRfc2h1dGRvd24sCiB9OwogCi1pbnQgX19pbml0IHBzM192dWFydF9pbml0KHZvaWQpCitpbnQgX19pbml0IHBzM192dWFydF9idXNfaW5pdCh2b2lkKQogewogCWludCByZXN1bHQ7CiAKIAlwcl9kZWJ1ZygiJXM6JWQ6XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwotCXJlc3VsdCA9IGJ1c19yZWdpc3RlcigmcHMzX3Z1YXJ0KTsKKworCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9QUzNfTFYxKSkKKwkJcmV0dXJuIDA7CisKKwlpbml0X01VVEVYKCZ2dWFydF9idXNfcHJpdi5wcm9iZV9tdXRleCk7CisJcmVzdWx0ID0gYnVzX3JlZ2lzdGVyKCZwczNfdnVhcnRfYnVzKTsKIAlCVUdfT04ocmVzdWx0KTsKKwogCXJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgX19leGl0IHBzM192dWFydF9leGl0KHZvaWQpCit2b2lkIF9fZXhpdCBwczNfdnVhcnRfYnVzX2V4aXQodm9pZCkKIHsKIAlwcl9kZWJ1ZygiJXM6JWQ6XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwotCWJ1c191bnJlZ2lzdGVyKCZwczNfdnVhcnQpOworCWJ1c191bnJlZ2lzdGVyKCZwczNfdnVhcnRfYnVzKTsKIH0KIAotY29yZV9pbml0Y2FsbChwczNfdnVhcnRfaW5pdCk7Ci1tb2R1bGVfZXhpdChwczNfdnVhcnRfZXhpdCk7Citjb3JlX2luaXRjYWxsKHBzM192dWFydF9idXNfaW5pdCk7Cittb2R1bGVfZXhpdChwczNfdnVhcnRfYnVzX2V4aXQpOwogCiAvKioKICAqIHBzM192dWFydF9wb3J0X3JlbGVhc2VfZGV2aWNlIC0gUmVtb3ZlIGEgdnVhcnQgcG9ydCBkZXZpY2UuCkBAIC05MjIsMTEgKzEwNTUsMTQgQEAKIAogc3RhdGljIHZvaWQgcHMzX3Z1YXJ0X3BvcnRfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqX2RldikKIHsKLQlzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYgPSB0b19wczNfdnVhcnRfcG9ydF9kZXZpY2UoX2Rldik7CiAjaWYgZGVmaW5lZChERUJVRykKLQltZW1zZXQoZGV2LCAweGFkLCBzaXplb2Yoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSkpOworCXN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiA9IHRvX3BzM192dWFydF9wb3J0X2RldmljZShfZGV2KTsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJQlVHX09OKGRldi0+cHJpdiAmJiAiZm9yZ290IHRvIGZyZWUiKTsKKwltZW1zZXQoJmRldi0+Y29yZSwgMCwgc2l6ZW9mKGRldi0+Y29yZSkpOwogI2VuZGlmCi0Ja2ZyZWUoZGV2KTsKIH0KIAogLyoqCkBAIC05MzUsMTEgKzEwNzEsMTIgQEAKIAogaW50IHBzM192dWFydF9wb3J0X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJlc3VsdDsKIAlzdGF0aWMgdW5zaWduZWQgaW50IGRldl9jb3VudCA9IDE7CiAKKwlCVUdfT04oZGV2LT5wcml2ICYmICJmb3Jnb3QgdG8gZnJlZSIpOworCiAJZGV2LT5jb3JlLnBhcmVudCA9IE5VTEw7Ci0JZGV2LT5jb3JlLmJ1cyA9ICZwczNfdnVhcnQ7CisJZGV2LT5jb3JlLmJ1cyA9ICZwczNfdnVhcnRfYnVzOwogCWRldi0+Y29yZS5yZWxlYXNlID0gcHMzX3Z1YXJ0X3BvcnRfcmVsZWFzZV9kZXZpY2U7CiAKIAlzbnByaW50ZihkZXYtPmNvcmUuYnVzX2lkLCBzaXplb2YoZGV2LT5jb3JlLmJ1c19pZCksICJ2dWFydF8lMDJ4IiwKQEAgLTk0Nyw5ICsxMDg0LDcgQEAKIAogCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCi0JcmVzdWx0ID0gZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmNvcmUpOwotCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmNvcmUpOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChwczNfdnVhcnRfcG9ydF9kZXZpY2VfcmVnaXN0ZXIpOwpAQCAtOTYzLDcgKzEwOTgsNyBAQAogCWludCByZXN1bHQ7CiAKIAlwcl9kZWJ1ZygiJXM6JWQ6ICglcylcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgZHJ2LT5jb3JlLm5hbWUpOwotCWRydi0+Y29yZS5idXMgPSAmcHMzX3Z1YXJ0OworCWRydi0+Y29yZS5idXMgPSAmcHMzX3Z1YXJ0X2J1czsKIAlyZXN1bHQgPSBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+Y29yZSk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTk3Niw2ICsxMTExLDcgQEAKIAogdm9pZCBwczNfdnVhcnRfcG9ydF9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyICpkcnYpCiB7CisJcHJfZGVidWcoIiVzOiVkOiAoJXMpXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGRydi0+Y29yZS5uYW1lKTsKIAlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5jb3JlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvdnVhcnQuaCBiL2RyaXZlcnMvcHMzL3Z1YXJ0LmgKaW5kZXggMmNiZjcyOC4uMWJlOTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvdnVhcnQuaAorKysgYi9kcml2ZXJzL3BzMy92dWFydC5oCkBAIC0yMSw2ICsyMSw0NCBAQAogI2lmICFkZWZpbmVkKF9QUzNfVlVBUlRfSCkKICNkZWZpbmUgX1BTM19WVUFSVF9ICiAKKyNpbmNsdWRlIDxhc20vcHMzLmg+CisKK3N0cnVjdCBwczNfdnVhcnRfc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbjsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX3JlYWQ7CisJdW5zaWduZWQgbG9uZyB0eF9pbnRlcnJ1cHRzOworCXVuc2lnbmVkIGxvbmcgcnhfaW50ZXJydXB0czsKKwl1bnNpZ25lZCBsb25nIGRpc2Nvbm5lY3RfaW50ZXJydXB0czsKK307CisKK3N0cnVjdCBwczNfdnVhcnRfd29yayB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJdW5zaWduZWQgbG9uZyB0cmlnZ2VyOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlKiBkZXY7IC8qIHRvIGNvbnZlcnQgd29yayB0byBkZXZpY2UgKi8KK307CisKKy8qKgorICogc3RydWN0IHBzM192dWFydF9wb3J0X3ByaXYgLSBwcml2YXRlIHZ1YXJ0IGRldmljZSBkYXRhLgorICovCisKK3N0cnVjdCBwczNfdnVhcnRfcG9ydF9wcml2IHsKKwl1bnNpZ25lZCBpbnQgcG9ydF9udW1iZXI7CisJdTY0IGludGVycnVwdF9tYXNrOworCisJc3RydWN0IHsKKwkJc3BpbmxvY2tfdCBsb2NrOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJfSB0eF9saXN0OworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgYnl0ZXNfaGVsZDsKKwkJc3BpbmxvY2tfdCBsb2NrOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJfSByeF9saXN0OworCXN0cnVjdCBwczNfdnVhcnRfc3RhdHMgc3RhdHM7CisJc3RydWN0IHBzM192dWFydF93b3JrIHdvcms7Cit9OworCiAvKioKICAqIHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kcml2ZXIgLSBhIGRyaXZlciBmb3IgYSBkZXZpY2Ugb24gYSB2dWFydCBwb3J0CiAgKi8KQEAgLTQxLDEwICs3OSw2IEBACiBpbnQgcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kcml2ZXIgKmRydik7CiB2b2lkIHBzM192dWFydF9wb3J0X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kcml2ZXIgKmRydik7CiAKLWludCBwczNfdnVhcnRfd3JpdGUoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2LAotCWNvbnN0IHZvaWQqIGJ1ZiwgdW5zaWduZWQgaW50IGJ5dGVzKTsKLWludCBwczNfdnVhcnRfcmVhZChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsIHZvaWQqIGJ1ZiwKLQl1bnNpZ25lZCBpbnQgYnl0ZXMpOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyICp0b19wczNfdnVhcnRfcG9ydF9kcml2ZXIoCiAJc3RydWN0IGRldmljZV9kcml2ZXIgKl9kcnYpCiB7CkBAIC01NSw1ICs4OSwyMiBAQAogewogCXJldHVybiBjb250YWluZXJfb2YoX2Rldiwgc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSwgY29yZSk7CiB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKnBzM192dWFydF93b3JrX3RvX3BvcnRfZGV2aWNlKAorCXN0cnVjdCB3b3JrX3N0cnVjdCAqX3dvcmspCit7CisJc3RydWN0IHBzM192dWFydF93b3JrICp2dyA9IGNvbnRhaW5lcl9vZihfd29yaywgc3RydWN0IHBzM192dWFydF93b3JrLAorCQl3b3JrKTsKKwlyZXR1cm4gdnctPmRldjsKK30KKworaW50IHBzM192dWFydF93cml0ZShzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQqIGJ1ZiwKKwl1bnNpZ25lZCBpbnQgYnl0ZXMpOworaW50IHBzM192dWFydF9yZWFkKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiwgdm9pZCogYnVmLAorCXVuc2lnbmVkIGludCBieXRlcyk7CitpbnQgcHMzX3Z1YXJ0X3JlYWRfYXN5bmMoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2LCB3b3JrX2Z1bmNfdCBmdW5jLAorCXVuc2lnbmVkIGludCBieXRlcyk7Cit2b2lkIHBzM192dWFydF9jYW5jZWxfYXN5bmMoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KTsKK3ZvaWQgcHMzX3Z1YXJ0X2NsZWFyX3J4X2J5dGVzKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiwKKwl1bnNpZ25lZCBpbnQgYnl0ZXMpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IDRiYmNhNTAuLmRlZWYyOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtMTAxLDcgKzEwMSw3IEBACiAKIGNvbmZpZyBSVENfRFJWX0NNT1MKIAl0cmlzdGF0ZSAiUEMtc3R5bGUgJ0NNT1MnIHJlYWwgdGltZSBjbG9jayIKLQlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiAoWDg2X1BDIHx8IEFMUEhBIHx8IEFSTTI2IHx8IEFSTSBcCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgKFg4NiB8fCBBTFBIQSB8fCBBUk0yNiB8fCBBUk0gXAogCQl8fCBNMzJSIHx8IEFUQVJJIHx8IFBPV0VSUEMpCiAJaGVscAogCSAgU2F5ICJ5ZXMiIGhlcmUgdG8gZ2V0IGRpcmVjdCBzdXBwb3J0IGZvciB0aGUgcmVhbCB0aW1lIGNsb2NrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwppbmRleCBhNzI0YWI0Li5hYzBlNjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKQEAgLTE2NCw2ICsxNjQsNyBAQAogCXRtLnRtX21pbiA9IGFscm0tPnRpbWUudG1fbWluOwogCXRtLnRtX3NlYyA9IGFscm0tPnRpbWUudG1fc2VjOwogCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19BTEFSTSk7CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfVElNQUxSLAogCQkgIEJJTjJCQ0QodG0udG1fc2VjKSA8PCAwCiAJCXwgQklOMkJDRCh0bS50bV9taW4pIDw8IDgKQEAgLTE3NCw2ICsxNzUsOSBAQAogCQl8IEJJTjJCQ0QodG0udG1fbWRheSkgPDwgMjQKIAkJfCBBVDkxX1JUQ19EQVRFRU4gfCBBVDkxX1JUQ19NVEhFTik7CiAKKwlpZiAoYWxybS0+ZW5hYmxlZCkKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSUVSLCBBVDkxX1JUQ19BTEFSTSk7CisKIAlwcl9kZWJ1ZygiJXMoKTogJTRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZFxuIiwgX19GVU5DVElPTl9fLAogCQlhdDkxX2FsYXJtX3llYXIsIHRtLnRtX21vbiwgdG0udG1fbWRheSwgdG0udG1faG91ciwKIAkJdG0udG1fbWluLCB0bS50bV9zZWMpOwpAQCAtMzAzLDYgKzMwNywxMiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qIGNwdSBpbml0IGNvZGUgc2hvdWxkIHJlYWxseSBoYXZlIGZsYWdnZWQgdGhpcyBkZXZpY2UgYXMKKwkgKiBiZWluZyB3YWtlLWNhcGFibGU7IGlmIGl0IGRpZG4ndCwgZG8gdGhhdCBoZXJlLgorCSAqLworCWlmICghZGV2aWNlX2Nhbl93YWtldXAoJnBkZXYtPmRldikpCisJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwgJnBkZXYtPmRldiwKIAkJCQkmYXQ5MV9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGMpKSB7CkBAIC0zMTAsNyArMzIwLDYgQEAKIAkJcmV0dXJuIFBUUl9FUlIocnRjKTsKIAl9CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKLQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJBVDkxIFJlYWwgVGltZSBDbG9jayBkcml2ZXIuXG4iKTsKIAlyZXR1cm4gMDsKQEAgLTMxOSw3ICszMjgsNyBAQAogLyoKICAqIERpc2FibGUgYW5kIHJlbW92ZSB0aGUgUlRDIGRyaXZlcgogICovCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBhdDkxX3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19leGl0IGF0OTFfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApAQCAtMzMxLDcgKzM0MCw2IEBACiAKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQwNCw4ICs0MTIsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0OTFfcnRjX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gYXQ5MV9ydGNfcHJvYmUsCi0JLnJlbW92ZQkJPSBhdDkxX3J0Y19yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChhdDkxX3J0Y19yZW1vdmUpLAogCS5zdXNwZW5kCT0gYXQ5MV9ydGNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGF0OTFfcnRjX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKQEAgLTQxNiw3ICs0MjMsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhdDkxX3J0Y19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXQ5MV9ydGNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZhdDkxX3J0Y19kcml2ZXIsIGF0OTFfcnRjX3Byb2JlKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGF0OTFfcnRjX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCA5YzhlYWQ0Li42NzdiYWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0yNjMsOCArMjYzLDEyIEBACiAKIHN0YXRpYyBpbnQgc2ExMTAwX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCiB7CisJdTMyCXJ0c3I7CisKIAltZW1jcHkoJmFscm0tPnRpbWUsICZydGNfYWxhcm0sIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKTsKLQlhbHJtLT5wZW5kaW5nID0gUlRTUiAmIFJUU1JfQUwgPyAxIDogMDsKKwlydHNyID0gUlRTUjsKKwlhbHJtLT5lbmFibGVkID0gKHJ0c3IgJiBSVFNSX0FMRSkgPyAxIDogMDsKKwlhbHJtLT5wZW5kaW5nID0gKHJ0c3IgJiBSVFNSX0FMKSA/IDEgOiAwOwogCXJldHVybiAwOwogfQogCkBAIC0yNzUsMTIgKzI3OSwxMCBAQAogCXNwaW5fbG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7CiAJcmV0ID0gcnRjX3VwZGF0ZV9hbGFybSgmYWxybS0+dGltZSk7CiAJaWYgKHJldCA9PSAwKSB7Ci0JCW1lbWNweSgmcnRjX2FsYXJtLCAmYWxybS0+dGltZSwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOwotCiAJCWlmIChhbHJtLT5lbmFibGVkKQotCQkJZW5hYmxlX2lycV93YWtlKElSUV9SVENBbHJtKTsKKwkJCVJUU1IgfD0gUlRTUl9BTEU7CiAJCWVsc2UKLQkJCWRpc2FibGVfaXJxX3dha2UoSVJRX1JUQ0Fscm0pOworCQkJUlRTUiAmPSB+UlRTUl9BTEU7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYwppbmRleCBmZmE5MjgyLi5iYWE4ZmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ3AuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpbmNsdWRlICJzY2xwLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCmluZGV4IGIzYTU2ZGMuLjljYjEyOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9yZXNldC5oPgorI2luY2x1ZGUgPGFzbS9pcGwuaD4KICNpbmNsdWRlICJhaXJxLmgiCiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY3NzLmgiCkBAIC0xMDQ3LDcgKzEwNDgsNyBAQAogCWRvX3JlaXBsX2FzbSgqKChfX3UzMiopJnNjaGlkKSk7CiB9CiAKLWV4dGVybiBzdHJ1Y3Qgc2NoaWIgaXBsX3NjaGliOworc3RhdGljIHN0cnVjdCBzY2hpYiBfX2luaXRkYXRhIGlwbF9zY2hpYjsKIAogLyoKICAqIGlwbF9zYXZlX3BhcmFtZXRlcnMgZ2V0cyBjYWxsZWQgdmVyeSBlYXJseS4gSXQgaXMgbm90IGFsbG93ZWQgdG8gYWNjZXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci92ZmNfaTJjLmMgYi9kcml2ZXJzL3NidXMvY2hhci92ZmNfaTJjLmMKaW5kZXggY2VlYzMwNi4uOWVmZWQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvdmZjX2kyYy5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL3ZmY19pMmMuYwpAQCAtMTQsNyArMTQsNyBAQAogLyogTk9URTogSXQgc2VlbXMgdG8gbWUgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhlCiBwY2Q4NTg0dC9wY2Y4NTg0IGRvZXMgbm90IHNob3cgdGhlIGNvcnJlY3Qgd2F5IHRvIGFkZHJlc3MgdGhlIGkyYyBidXMuCiBCYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gb24gdGhlIEkyQyBidXMgaXRzZWxmIGFuZCB0aGUgcmVtYWluZGVyIG9mCi10aGUgUGhpbGxpcHMgZG9jcyB0aGUgZm9sbG93aW5nIGFsZ29yaXRoaW1zIGFwcGVyIHRvIGJlIGNvcnJlY3QuICBJIGFtCit0aGUgUGhpbGxpcHMgZG9jcyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobXMgYXBwZWFyIHRvIGJlIGNvcnJlY3QuICBJIGFtCiBmYWlybHkgY2VydGFpbiB0aGF0IHRoZSBmbG93Y2hhcnRzIGluIHRoZSBwaGlsbGlwcyBkb2NzIGFyZSB3cm9uZy4gKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IDViZjNmMDcuLjRjZDI4MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0yMzAsNiArMjMwLDcgQEAKIAkgIFRoZSBTQ1NJIHN1YnN5c3RlbSBjYW4gcHJvYmUgZm9yIGRldmljZXMgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlCiAJICBzeXN0ZW0gY29udGludWVzIGJvb3RpbmcsIGFuZCBldmVuIHByb2JlIGRldmljZXMgb24gZGlmZmVyZW50CiAJICBidXNzZXMgaW4gcGFyYWxsZWwsIGxlYWRpbmcgdG8gYSBzaWduaWZpY2FudCBzcGVlZC11cC4KKwogCSAgSWYgeW91IGhhdmUgYnVpbHQgU0NTSSBhcyBtb2R1bGVzLCBlbmFibGluZyB0aGlzIG9wdGlvbiBjYW4KIAkgIGJlIGEgcHJvYmxlbSBhcyB0aGUgZGV2aWNlcyBtYXkgbm90IGhhdmUgYmVlbiBmb3VuZCBieSB0aGUKIAkgIHRpbWUgeW91ciBzeXN0ZW0gZXhwZWN0cyB0aGVtIHRvIGhhdmUgYmVlbi4gIFlvdSBjYW4gbG9hZCB0aGUKQEAgLTIzNyw4ICsyMzgsOCBAQAogCSAgSWYgeW91IGJ1aWxkIHlvdXIgU0NTSSBkcml2ZXJzIGludG8gdGhlIGtlcm5lbCwgdGhlbiBldmVyeXRoaW5nCiAJICB3aWxsIHdvcmsgZmluZSBpZiB5b3Ugc2F5IFkgaGVyZS4KIAotCSAgWW91IGNhbiBvdmVycmlkZSB0aGlzIGNob2ljZSBieSBzcGVjaWZ5aW5nIHNjc2lfbW9kLnNjYW49InN5bmMiCi0JICBvciAiYXN5bmMiIG9uIHRoZSBrZXJuZWwncyBjb21tYW5kIGxpbmUuCisJICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgY2hvaWNlIGJ5IHNwZWNpZnlpbmcgInNjc2lfbW9kLnNjYW49c3luYyIKKwkgIG9yIGFzeW5jIG9uIHRoZSBrZXJuZWwncyBjb21tYW5kIGxpbmUuCiAKIG1lbnUgIlNDU0kgVHJhbnNwb3J0cyIKIAlkZXBlbmRzIG9uIFNDU0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hMTAwdTJ3LmMgYi9kcml2ZXJzL3Njc2kvYTEwMHUydy5jCmluZGV4IDI2NTBhNWQuLjdmNDI0MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hMTAwdTJ3LmMKKysrIGIvZHJpdmVycy9zY3NpL2ExMDB1MncuYwpAQCAtMTA2Nyw3ICsxMDY3LDcgQEAKIAkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7CiAJfQogCi0JLyogPDAyPiByZWFkIGZyb20gYmFzZSBhZGRyZXNzICsgMHg1MCBvZmZzZXQgdG8gZ2V0IHRoZSBiaW9zIGJhbHVlLiAqLworCS8qIDwwMj4gcmVhZCBmcm9tIGJhc2UgYWRkcmVzcyArIDB4NTAgb2Zmc2V0IHRvIGdldCB0aGUgYmlvcyB2YWx1ZS4gKi8KIAliaW9zID0gT1JDX1JEV09SRChwb3J0LCAweDUwKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwppbmRleCBjN2ZlNDc4Li4yYmUwM2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKQEAgLTQxOCw3ICs0MTgsNiBAQAogCXN0cmNhdChicCwgIiAgICAgICAgIik7CiAJYWhkX2NvbnRyb2xsZXJfaW5mbyhhaGQsIGFoZF9pbmZvKTsKIAlzdHJjYXQoYnAsIGFoZF9pbmZvKTsKLQlzdHJjYXQoYnAsICJcbiIpOwogCiAJcmV0dXJuIChicCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5jIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuYwppbmRleCBlYWU3YTI0Li5jNzUwZmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2VxLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKICNkZWZpbmUgUEFVU0VfVFJJRVMgMTAwMAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlICpzZXF1ZW5jZXJfZnc7Ci1zdGF0aWMgY29uc3QgY2hhciAqc2VxdWVuY2VyX3ZlcnNpb247CiBzdGF0aWMgdTE2IGNzZXFfdmVjc1tDU0VRX05VTV9WRUNTXSwgbHNlcV92ZWNzW0xTRVFfTlVNX1ZFQ1NdLCBtb2RlMl90YXNrLAogCWNzZXFfaWRsZV9sb29wLCBsc2VxX2lkbGVfbG9vcDsKIHN0YXRpYyB1OCAqY3NlcV9jb2RlLCAqbHNlcV9jb2RlOwpAQCAtMTI3Niw3ICsxMjc1LDYgQEAKIAloZWFkZXIuY3N1bSA9IGxlMzJfdG9fY3B1KGhkcl9wdHItPmNzdW0pOwogCWhlYWRlci5tYWpvciA9IGxlMzJfdG9fY3B1KGhkcl9wdHItPm1ham9yKTsKIAloZWFkZXIubWlub3IgPSBsZTMyX3RvX2NwdShoZHJfcHRyLT5taW5vcik7Ci0Jc2VxdWVuY2VyX3ZlcnNpb24gPSBoZHJfcHRyLT52ZXJzaW9uOwogCWhlYWRlci5jc2VxX3RhYmxlX29mZnNldCA9IGxlMzJfdG9fY3B1KGhkcl9wdHItPmNzZXFfdGFibGVfb2Zmc2V0KTsKIAloZWFkZXIuY3NlcV90YWJsZV9zaXplID0gbGUzMl90b19jcHUoaGRyX3B0ci0+Y3NlcV90YWJsZV9zaXplKTsKIAloZWFkZXIubHNlcV90YWJsZV9vZmZzZXQgPSBsZTMyX3RvX2NwdShoZHJfcHRyLT5sc2VxX3RhYmxlX29mZnNldCk7CkBAIC0xMzAzLDYgKzEzMDEsMTYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJYXNkX3ByaW50aygiRm91bmQgc2VxdWVuY2VyIEZpcm13YXJlIHZlcnNpb24gJWQuJWQgKCVzKVxuIiwKKwkJICAgaGVhZGVyLm1ham9yLCBoZWFkZXIubWlub3IsIGhkcl9wdHItPnZlcnNpb24pOworCisJaWYgKGhlYWRlci5tYWpvciAhPSBTQVNfUkFaT1JfU0VRVUVOQ0VSX0ZXX01BSk9SKSB7CisJCWFzZF9wcmludGsoIkZpcm13YXJlIE1ham9yIFZlcnNpb24gTWlzbWF0Y2g7IgorCQkJICAgImRyaXZlciByZXF1aXJlcyB2ZXJzaW9uICVkLlgiLAorCQkJICAgU0FTX1JBWk9SX1NFUVVFTkNFUl9GV19NQUpPUik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXB0cl9jc2VxX3ZlY3MgPSAodTE2ICopJnNlcXVlbmNlcl9mdy0+ZGF0YVtoZWFkZXIuY3NlcV90YWJsZV9vZmZzZXRdOwogCXB0cl9sc2VxX3ZlY3MgPSAodTE2ICopJnNlcXVlbmNlcl9mdy0+ZGF0YVtoZWFkZXIubHNlcV90YWJsZV9vZmZzZXRdOwogCW1vZGUyX3Rhc2sgPSBoZWFkZXIubW9kZTJfdGFzazsKQEAgLTEzMzUsNyArMTM0Myw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JYXNkX3ByaW50aygidXNpbmcgc2VxdWVuY2VyICVzXG4iLCBzZXF1ZW5jZXJfdmVyc2lvbik7CiAJZXJyID0gYXNkX3NlcV9kb3dubG9hZF9zZXFzKGFzZF9oYSk7CiAJaWYgKGVycikgewogCQlhc2RfcHJpbnRrKCJjb3VsZG4ndCBkb3dubG9hZCBzZXF1ZW5jZXJzIGZvciAlc1xuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2VxLmggYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3NlcS5oCmluZGV4IDk0MzdmZjAuLjJlYTZhMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfc2VxLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF9zZXEuaApAQCAtMzEsNiArMzEsNyBAQAogI2RlZmluZSBMU0VRX05VTV9WRUNTCTExCiAKICNkZWZpbmUgU0FTX1JBWk9SX1NFUVVFTkNFUl9GV19GSUxFICJhaWM5NHh4LXNlcS5mdyIKKyNkZWZpbmUgU0FTX1JBWk9SX1NFUVVFTkNFUl9GV19NQUpPUgkxCiAKIC8qIE5vdGU6ICBBbGwgcXVhbnRpdGVzIGluIHRoZSBzZXF1ZW5jZXIgZmlsZSBhcmUgbGl0dGxlIGVuZGlhbiAqLwogc3RydWN0IHNlcXVlbmNlcl9maWxlX2hlYWRlciB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMgYi9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKaW5kZXggNDY3NzE1Mi4uZDQxMzY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJY29uc3Qgdm9pZCBfX2lvbWVtICpyZWdfZmFzID0gYmFzZSArIEVFU09YX0ZBUzIxNl9PRkZTRVQ7CiAJY29uc3Qgdm9pZCBfX2lvbWVtICpyZWdfZG1hc3RhdCA9IGJhc2UgKyBFRVNPWF9ETUFTVEFUOwogCWNvbnN0IHZvaWQgX19pb21lbSAqcmVnX2RtYWRhdGEgPSBiYXNlICsgRUVTT1hfRE1BREFUQTsKLQljb25zdCByZWdpc3RlciB1bnNpZ25lZCBsb25nIG1hc2sgPSAweGZmZmY7CisJcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgbG9uZyBtYXNrID0gMHhmZmZmOwogCiAJZG8gewogCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwppbmRleCA4ZjZiNWJmLi4yYjViOGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwpAQCAtODAxLDE1ICs4MDEsMTAgQEAKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CiAJc3RydWN0IGlkZV9zY3NpX29iaiAqc2NzaTsKLQlpZGVfZHJpdmVfdCAqZHJpdmU7CiAKIAlpZiAoIShzY3NpID0gaWRlX3Njc2lfZ2V0KGRpc2spKSkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCWRyaXZlID0gc2NzaS0+ZHJpdmU7Ci0KLQlkcml2ZS0+dXNhZ2UrKzsKLQogCXJldHVybiAwOwogfQogCkBAIC04MTcsOSArODEyLDYgQEAKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CiAJc3RydWN0IGlkZV9zY3NpX29iaiAqc2NzaSA9IGlkZV9zY3NpX2coZGlzayk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gc2NzaS0+ZHJpdmU7Ci0KLQlkcml2ZS0+dXNhZ2UtLTsKIAogCWlkZV9zY3NpX3B1dChzY3NpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCBhZmNhNDVjLi45ZDAxNGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtNTE4LDYgKzUxOCwxMCBAQAogCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgICpwcmluZzsKIAl1aW50MzJfdCBldmVudF9kYXRhOworCS8qIElmIHRoZSBwY2kgY2hhbm5lbCBpcyBvZmZsaW5lLCBpZ25vcmUgcG9zc2libGUgZXJyb3JzLAorCSAqIHNpbmNlIHdlIGNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwY2kgY2FyZCBhbnl3YXkuICovCisJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUocGhiYS0+cGNpZGV2KSkKKwkJcmV0dXJuOwogCiAJaWYgKHBoYmEtPndvcmtfaHMgJiBIU19GRkVSNiB8fAogCSAgICBwaGJhLT53b3JrX2hzICYgSFNfRkZFUjUpIHsKQEAgLTE3OTcsNiArMTgwMSw5MiBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KIAorLyoqCisgKiBscGZjX2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWVjdGlvbiBzdGF0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBscGZjX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCXBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAgKnByaW5nOworCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkgeworCQlscGZjX3BjaV9yZW1vdmVfb25lKHBkZXYpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCS8qCisJICogVGhlcmUgbWF5IGJlIEkvT3MgZHJvcHBlZCBieSB0aGUgZmlybXdhcmUuCisJICogRXJyb3IgaW9jYiAoSS9PKSBvbiB0eGNtcGxxIGFuZCBsZXQgdGhlIFNDU0kgbGF5ZXIKKwkgKiByZXRyeSBpdCBhZnRlciByZS1lc3RhYmxpc2hpbmcgbGluay4KKwkgKi8KKwlwcmluZyA9ICZwc2xpLT5yaW5nW3BzbGktPmZjcF9yaW5nXTsKKwlscGZjX3NsaV9hYm9ydF9pb2NiX3JpbmcocGhiYSwgcHJpbmcpOworCisJLyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7Cit9CisKKy8qKgorICogbHBmY19pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LgorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBscGZjX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKKwlpbnQgYmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSk7CisKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwgInJlY292ZXJpbmcgZnJvbSBhIHNsb3QgcmVzZXQuXG4iKTsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfYmFycyhwZGV2LCBiYXJzKSkgeworCQlwcmludGsoS0VSTl9FUlIgImxwZmM6IENhbm5vdCByZS1lbmFibGUgIgorCQkJIlBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwkvKiBSZS1lc3RhYmxpc2hpbmcgTGluayAqLworCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwlwaGJhLT5mY19mbGFnIHw9IEZDX0VTVEFCTElTSF9MSU5LOworCXBzbGktPnNsaV9mbGFnICY9IH5MUEZDX1NMSTJfQUNUSVZFOworCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCisKKwkvKiBUYWtlIGRldmljZSBvZmZsaW5lOyB0aGlzIHdpbGwgcGVyZm9ybSBjbGVhbnVwICovCisJbHBmY19vZmZsaW5lKHBoYmEpOworCWxwZmNfc2xpX2JyZHJlc3RhcnQocGhiYSk7CisKKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworfQorCisvKioKKyAqIGxwZmNfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAorICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLgorICovCitzdGF0aWMgdm9pZCBscGZjX2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilob3N0LT5ob3N0ZGF0YTsKKworCWlmIChscGZjX29ubGluZShwaGJhKSA9PSAwKSB7CisJCW1vZF90aW1lcigmcGhiYS0+ZmNfZXN0YWJ0bW8sIGppZmZpZXMgKyBIWiAqIDYwKTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBscGZjX2lkX3RhYmxlW10gPSB7CiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1ZJUEVSLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LApAQCAtMTg1NywxMSArMTk0NywxOCBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbHBmY19pZF90YWJsZSk7CiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGxwZmNfZXJyX2hhbmRsZXIgPSB7CisJLmVycm9yX2RldGVjdGVkID0gbHBmY19pb19lcnJvcl9kZXRlY3RlZCwKKwkuc2xvdF9yZXNldCA9IGxwZmNfaW9fc2xvdF9yZXNldCwKKwkucmVzdW1lID0gbHBmY19pb19yZXN1bWUsCit9OworCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbHBmY19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gTFBGQ19EUklWRVJfTkFNRSwKIAkuaWRfdGFibGUJPSBscGZjX2lkX3RhYmxlLAogCS5wcm9iZQkJPSBscGZjX3BjaV9wcm9iZV9vbmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChscGZjX3BjaV9yZW1vdmVfb25lKSwKKwkuZXJyX2hhbmRsZXIgPSAmbHBmY19lcnJfaGFuZGxlciwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwppbmRleCBhNDEyOGUxLi45ZmI2OTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKQEAgLTIxMDQsNiArMjEwNCwxMCBAQAogCXZvbGF0aWxlIHVpbnQzMl90IHdvcmQwLCBsZGF0YTsKIAl2b2lkIF9faW9tZW0gKnRvX3NsaW07CiAKKwkvKiBJZiB0aGUgUENJIGNoYW5uZWwgaXMgaW4gb2ZmbGluZSBzdGF0ZSwgZG8gbm90IHBvc3QgbWJveC4gKi8KKwlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShwaGJhLT5wY2lkZXYpKSkKKwkJcmV0dXJuIE1CWF9OT1RfRklOSVNIRUQ7CisKIAlwc2xpID0gJnBoYmEtPnNsaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgZHJ2cl9mbGFnKTsKQEAgLTI0MDcsNiArMjQxMSwxMCBAQAogCXN0cnVjdCBscGZjX2lvY2JxICpuZXh0aW9jYjsKIAlJT0NCX3QgKmlvY2I7CiAKKwkvKiBJZiB0aGUgUENJIGNoYW5uZWwgaXMgaW4gb2ZmbGluZSBzdGF0ZSwgZG8gbm90IHBvc3QgaW9jYnMuICovCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUocGhiYS0+cGNpZGV2KSkpCisJCXJldHVybiBJT0NCX0VSUk9SOworCiAJLyoKIAkgKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGFuIElPQ0IgaWYgd2UgYXJlIGluIGEgPCBMSU5LX0RPV04gc3RhdGUKIAkgKi8KQEAgLTMxNTQsNiArMzE2MiwxMCBAQAogCWlmICh1bmxpa2VseSghcGhiYSkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAorCS8qIElmIHRoZSBwY2kgY2hhbm5lbCBpcyBvZmZsaW5lLCBpZ25vcmUgYWxsIHRoZSBpbnRlcnJ1cHRzLiAqLworCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHBoYmEtPnBjaWRldikpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKIAlwaGJhLT5zbGkuc2xpc3RhdC5zbGlfaW50cisrOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKaW5kZXggODA4YTFiOC4uMGFhMzMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKQEAgLTUwNzIsNyArNTA3Miw3IEBACiAJCQkJIm1lZ2FyYWlkOiBmYWlsZWQgdG8gY3JlYXRlIG1lZ2FyYWlkIHJvb3RcbiIpOwogCX0KICNlbmRpZgotCWVycm9yID0gcGNpX21vZHVsZV9pbml0KCZtZWdhcmFpZF9wY2lfZHJpdmVyKTsKKwllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1lZ2FyYWlkX3BjaV9kcml2ZXIpOwogCWlmIChlcnJvcikgewogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJCXJlbW92ZV9wcm9jX2VudHJ5KCJtZWdhcmFpZCIsICZwcm9jX3Jvb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCmluZGV4IDE1ZTI0ZmMuLjdhODEyNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKQEAgLTEwLDExICsxMCwxMyBAQAogICoJICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiBGSUxFCQk6IG1lZ2FyYWlkX3Nhcy5jCi0gKiBWZXJzaW9uCTogdjAwLjAwLjAzLjA1CisgKiBWZXJzaW9uCTogdjAwLjAwLjAzLjEwLXJjMQogICoKICAqIEF1dGhvcnM6Ci0gKiAJU3JlZW5pdmFzIEJhZ2Fsa290ZQk8U3JlZW5pdmFzLkJhZ2Fsa290ZUBsc2kuY29tPgotICogCVN1bWFudCBQYXRybwkJPFN1bWFudC5QYXRyb0Bsc2kuY29tPgorICoJKGVtYWlsLWlkIDogbWVnYXJhaWRsaW51eEBsc2kuY29tKQorICogCVNyZWVuaXZhcyBCYWdhbGtvdGUKKyAqIAlTdW1hbnQgUGF0cm8KKyAqCUJvIFlhbmcKICAqCiAgKiBMaXN0IG9mIHN1cHBvcnRlZCBjb250cm9sbGVycwogICoKQEAgLTM1LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtODQxLDYgKzg0NCwxMSBAQAogCiAJaW5zdGFuY2UgPSAoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKikKIAkgICAgc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKKworCS8qIERvbid0IHByb2Nlc3MgaWYgd2UgaGF2ZSBhbHJlYWR5IGRlY2xhcmVkIGFkYXB0ZXIgZGVhZCAqLworCWlmIChpbnN0YW5jZS0+aHdfY3JpdF9lcnJvcikKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisKIAlzY21kLT5zY3NpX2RvbmUgPSBkb25lOwogCXNjbWQtPnJlc3VsdCA9IDA7CiAKQEAgLTg1MCw2ICs4NTgsMTggQEAKIAkJZ290byBvdXRfZG9uZTsKIAl9CiAKKwlzd2l0Y2ggKHNjbWQtPmNtbmRbMF0pIHsKKwljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOgorCQkvKgorCQkgKiBGVyB0YWtlcyBjYXJlIG9mIGZsdXNoIGNhY2hlIG9uIGl0cyBvd24KKwkJICogTm8gbmVlZCB0byBzZW5kIGl0IGRvd24KKwkJICovCisJCXNjbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNjsKKwkJZ290byBvdXRfZG9uZTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKIAljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOwogCWlmICghY21kKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKQEAgLTEwMTAsNiArMTAzMCw0OSBAQAogfQogCiAvKioKKyAqIG1lZ2FzYXNfYmlvc19wYXJhbSAtIFJldHVybnMgZGlzayBnZW9tZXRyeSBmb3IgYSBkaXNrCisgKiBAc2RldjogCQlkZXZpY2UgaGFuZGxlCisgKiBAYmRldjoJCWJsb2NrIGRldmljZQorICogQGNhcGFjaXR5OgkJZHJpdmUgY2FwYWNpdHkKKyAqIEBnZW9tOgkJZ2VvbWV0cnkgcGFyYW1ldGVycworICovCitzdGF0aWMgaW50CittZWdhc2FzX2Jpb3NfcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAorCQkgc2VjdG9yX3QgY2FwYWNpdHksIGludCBnZW9tW10pCit7CisJaW50IGhlYWRzOworCWludCBzZWN0b3JzOworCXNlY3Rvcl90IGN5bGluZGVyczsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwkvKiBEZWZhdWx0IGhlYWRzICg2NCkgJiBzZWN0b3JzICgzMikgKi8KKwloZWFkcyA9IDY0OworCXNlY3RvcnMgPSAzMjsKKworCXRtcCA9IGhlYWRzICogc2VjdG9yczsKKwljeWxpbmRlcnMgPSBjYXBhY2l0eTsKKworCXNlY3Rvcl9kaXYoY3lsaW5kZXJzLCB0bXApOworCisJLyoKKwkgKiBIYW5kbGUgZXh0ZW5kZWQgdHJhbnNsYXRpb24gc2l6ZSBmb3IgbG9naWNhbCBkcml2ZXMgPiAxR2IKKwkgKi8KKworCWlmIChjYXBhY2l0eSA+PSAweDIwMDAwMCkgeworCQloZWFkcyA9IDI1NTsKKwkJc2VjdG9ycyA9IDYzOworCQl0bXAgPSBoZWFkcypzZWN0b3JzOworCQljeWxpbmRlcnMgPSBjYXBhY2l0eTsKKwkJc2VjdG9yX2RpdihjeWxpbmRlcnMsIHRtcCk7CisJfQorCisJZ2VvbVswXSA9IGhlYWRzOworCWdlb21bMV0gPSBzZWN0b3JzOworCWdlb21bMl0gPSBjeWxpbmRlcnM7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBtZWdhc2FzX3NlcnZpY2VfYWVuIC0JUHJvY2Vzc2VzIGFuIGV2ZW50IG5vdGlmaWNhdGlvbgogICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQogICogQGNtZDoJCQlBRU4gY29tbWFuZCBjb21wbGV0ZWQgYnkgdGhlIElTUgpAQCAtMTA0OSw2ICsxMTEyLDcgQEAKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBtZWdhc2FzX3Jlc2V0X2RldmljZSwKIAkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgPSBtZWdhc2FzX3Jlc2V0X2J1c19ob3N0LAogCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIgPSBtZWdhc2FzX3Jlc2V0X2J1c19ob3N0LAorCS5iaW9zX3BhcmFtID0gbWVnYXNhc19iaW9zX3BhcmFtLAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAogfTsKIApAQCAtMTI4MiwxMSArMTM0NiwxMyBAQAogCWlmKGluc3RhbmNlLT5pbnN0YW5jZXQtPmNsZWFyX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKKwlpZiAoaW5zdGFuY2UtPmh3X2NyaXRfZXJyb3IpCisJCWdvdG8gb3V0X2RvbmU7CiAgICAgICAgIC8qCiAJICogU2NoZWR1bGUgdGhlIHRhc2tsZXQgZm9yIGNtZCBjb21wbGV0aW9uCiAJICovCiAJdGFza2xldF9zY2hlZHVsZSgmaW5zdGFuY2UtPmlzcl90YXNrbGV0KTsKLQorb3V0X2RvbmU6CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xNzQxLDYgKzE4MDcsMTAgQEAKIAlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKIAlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UgPSAoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKilpbnN0YW5jZV9hZGRyOwogCisJLyogSWYgd2UgaGF2ZSBhbHJlYWR5IGRlY2xhcmVkIGFkYXB0ZXIgZGVhZCwgZG9ub3QgY29tcGxldGUgY21kcyAqLworCWlmIChpbnN0YW5jZS0+aHdfY3JpdF9lcnJvcikKKwkJcmV0dXJuOworCiAJcHJvZHVjZXIgPSAqaW5zdGFuY2UtPnByb2R1Y2VyOwogCWNvbnN1bWVyID0gKmluc3RhbmNlLT5jb25zdW1lcjsKIApAQCAtMjY1NSw5ICsyNzI1LDkgQEAKIAkgKiBGb3IgZWFjaCB1c2VyIGJ1ZmZlciwgY3JlYXRlIGEgbWlycm9yIGJ1ZmZlciBhbmQgY29weSBpbgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNnZV9jb3VudDsgaSsrKSB7Ci0JCWtidWZmX2FycltpXSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAorCQlrYnVmZl9hcnJbaV0gPSBkbWFfYWxsb2NfY29oZXJlbnQoJmluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkJCQkgICAgaW9jLT5zZ2xbaV0uaW92X2xlbiwKLQkJCQkJCSAgICAmYnVmX2hhbmRsZSk7CisJCQkJCQkgICAgJmJ1Zl9oYW5kbGUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWtidWZmX2FycltpXSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBhbGxvYyAiCiAJCQkgICAgICAgImtlcm5lbCBTR0wgYnVmZmVyIGZvciBJT0NUTCBcbiIpOwpAQCAtMjY4NCw4ICsyNzU0LDggQEAKIAl9CiAKIAlpZiAoaW9jLT5zZW5zZV9sZW4pIHsKLQkJc2Vuc2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwgaW9jLT5zZW5zZV9sZW4sCi0JCQkJCSAgICAgJnNlbnNlX2hhbmRsZSk7CisJCXNlbnNlID0gZG1hX2FsbG9jX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LCBpb2MtPnNlbnNlX2xlbiwKKwkJCQkJICAgICAmc2Vuc2VfaGFuZGxlLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzZW5zZSkgewogCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CkBAIC0yNzQ0LDEyICsyODE0LDEyIEBACiAKICAgICAgIG91dDoKIAlpZiAoc2Vuc2UpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwgaW9jLT5zZW5zZV9sZW4sCisJCWRtYV9mcmVlX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LCBpb2MtPnNlbnNlX2xlbiwKIAkJCQkgICAgc2Vuc2UsIHNlbnNlX2hhbmRsZSk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGlvYy0+c2dlX2NvdW50ICYmIGtidWZmX2FycltpXTsgaSsrKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsCisJCWRtYV9mcmVlX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LAogCQkJCSAgICBrZXJuX3NnZTMyW2ldLmxlbmd0aCwKIAkJCQkgICAga2J1ZmZfYXJyW2ldLCBrZXJuX3NnZTMyW2ldLnBoeXNfYWRkcik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCmluZGV4IGNhY2IzYWQuLmU4NjI5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKQEAgLTE4LDkgKzE4LDkgQEAKIC8qCiAgKiBNZWdhUkFJRCBTQVMgRHJpdmVyIG1ldGEgZGF0YQogICovCi0jZGVmaW5lIE1FR0FTQVNfVkVSU0lPTgkJCQkiMDAuMDAuMDMuMDUiCi0jZGVmaW5lIE1FR0FTQVNfUkVMREFURQkJCQkiT2N0IDAyLCAyMDA2IgotI2RlZmluZSBNRUdBU0FTX0VYVF9WRVJTSU9OCQkJIk1vbiBPY3QgMDIgMTE6MjE6MzIgUERUIDIwMDYiCisjZGVmaW5lIE1FR0FTQVNfVkVSU0lPTgkJCQkiMDAuMDAuMDMuMTAtcmMxIgorI2RlZmluZSBNRUdBU0FTX1JFTERBVEUJCQkJIkZlYiAxNCwgMjAwNyIKKyNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJCSJXZWQgRmViIDE0IDEwOjE0OjI1IFBTVCAyMDA3IgogCiAvKgogICogRGV2aWNlIElEcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zc3QuYyBiL2RyaXZlcnMvc2NzaS9vc3N0LmMKaW5kZXggOTY2OGI3My4uYTk2N2ZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL29zc3QuYworKysgYi9kcml2ZXJzL3Njc2kvb3NzdC5jCkBAIC01NTc0LDE0ICs1NTc0LDE0IEBACiAKIHN0YXRpYyBEUklWRVJfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCBvc3N0X3ZlcnNpb25fc2hvdywgTlVMTCk7CiAKLXN0YXRpYyBpbnQgb3NzdF9jcmVhdGVfZHJpdmVyZnNfZmlsZXMoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcmZzKQorc3RhdGljIGludCBvc3N0X2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqc3lzZnMpCiB7Ci0JcmV0dXJuIGRyaXZlcl9jcmVhdGVfZmlsZShkcml2ZXJmcywgJmRyaXZlcl9hdHRyX3ZlcnNpb24pOworCXJldHVybiBkcml2ZXJfY3JlYXRlX2ZpbGUoc3lzZnMsICZkcml2ZXJfYXR0cl92ZXJzaW9uKTsKIH0KIAotc3RhdGljIHZvaWQgb3NzdF9yZW1vdmVfZHJpdmVyZnNfZmlsZXMoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcmZzKQorc3RhdGljIHZvaWQgb3NzdF9yZW1vdmVfc3lzZnNfZmlsZXMoc3RydWN0IGRldmljZV9kcml2ZXIgKnN5c2ZzKQogewotCWRyaXZlcl9yZW1vdmVfZmlsZShkcml2ZXJmcywgJmRyaXZlcl9hdHRyX3ZlcnNpb24pOworCWRyaXZlcl9yZW1vdmVfZmlsZShzeXNmcywgJmRyaXZlcl9hdHRyX3ZlcnNpb24pOwogfQogCiAvKgpAQCAtNTk1Myw3ICs1OTUzLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfY2hyZGV2OwogCi0JZXJyID0gb3NzdF9jcmVhdGVfZHJpdmVyZnNfZmlsZXMoJm9zc3RfdGVtcGxhdGUuZ2VuZHJ2KTsKKwllcnIgPSBvc3N0X2NyZWF0ZV9zeXNmc19maWxlcygmb3NzdF90ZW1wbGF0ZS5nZW5kcnYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zY3NpZHJ2OwogCkBAIC01OTczLDcgKzU5NzMsNyBAQAogCWludCBpOwogCXN0cnVjdCBvc3N0X3RhcGUgKiBTVHA7CiAKLQlvc3N0X3JlbW92ZV9kcml2ZXJmc19maWxlcygmb3NzdF90ZW1wbGF0ZS5nZW5kcnYpOworCW9zc3RfcmVtb3ZlX3N5c2ZzX2ZpbGVzKCZvc3N0X3RlbXBsYXRlLmdlbmRydik7CiAJc2NzaV91bnJlZ2lzdGVyX2RyaXZlcigmb3NzdF90ZW1wbGF0ZS5nZW5kcnYpOwogCXVucmVnaXN0ZXJfY2hyZGV2KE9TU1RfTUFKT1IsICJvc3N0Iik7CiAJb3NzdF9zeXNmc19jbGVhbnVwKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMKaW5kZXggNjlkNmU5Yi4uYmI2ZjA1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Byb2MuYwpAQCAtMTc5LDkgKzE3OSw4IEBACiAJc2VxX3ByaW50ZihzLCAiXG4iKTsKIAogCXNlcV9wcmludGYocywgIiAgVHlwZTogICAlcyAiLCBzY3NpX2RldmljZV90eXBlKHNkZXYtPnR5cGUpKTsKLQlzZXFfcHJpbnRmKHMsICIgICAgICAgICAgICAgICBBTlNJIgotCQkgICAgICIgU0NTSSByZXZpc2lvbjogJTAyeCIsIChzZGV2LT5zY3NpX2xldmVsIC0gMSkgPwotCQkgICAgIHNkZXYtPnNjc2lfbGV2ZWwgLSAxIDogMSk7CisJc2VxX3ByaW50ZihzLCAiICAgICAgICAgICAgICAgQU5TSSAgU0NTSSByZXZpc2lvbjogJTAyeCIsCisJCQlzZGV2LT5zY3NpX2xldmVsIC0gKHNkZXYtPnNjc2lfbGV2ZWwgPiAxKSk7CiAJaWYgKHNkZXYtPnNjc2lfbGV2ZWwgPT0gMikKIAkJc2VxX3ByaW50ZihzLCAiIENDU1xuIik7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IGE0M2I5ZWMuLjA5NDkxNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTU0LDcgKzU0LDcgQEAKICNkZWZpbmUgU0NTSV9USU1FT1VUICgyKkhaKQogCiAvKgotICogUHJlZml4IHZhbHVlcyBmb3IgdGhlIFNDU0kgaWQncyAoc3RvcmVkIGluIGRyaXZlcmZzIG5hbWUgZmllbGQpCisgKiBQcmVmaXggdmFsdWVzIGZvciB0aGUgU0NTSSBpZCdzIChzdG9yZWQgaW4gc3lzZnMgbmFtZSBmaWVsZCkKICAqLwogI2RlZmluZSBTQ1NJX1VJRF9TRVJfTlVNICdTJwogI2RlZmluZSBTQ1NJX1VJRF9VTktOT1dOICdaJwpAQCAtMzg1LDYgKzM4NSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnN0YXJnZXQtPnNpYmxpbmdzKTsKIAlJTklUX0xJU1RfSEVBRCgmc3RhcmdldC0+ZGV2aWNlcyk7CiAJc3RhcmdldC0+c3RhdGUgPSBTVEFSR0VUX1JVTk5JTkc7CisJc3RhcmdldC0+c2NzaV9sZXZlbCA9IFNDU0lfMjsKICByZXRyeToKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKQEAgLTY1NCw2ICs2NTUsMTkgQEAKIAkgKiBzaG9ydCBJTlFVSVJZKSwgYW4gYWJvcnQgaGVyZSBwcmV2ZW50cyBhbnkgZnVydGhlciB1c2Ugb2YgdGhlCiAJICogZGV2aWNlLCBpbmNsdWRpbmcgc3BpbiB1cC4KIAkgKgorCSAqIE9uIHRoZSB3aG9sZSwgdGhlIGJlc3QgYXBwcm9hY2ggc2VlbXMgdG8gYmUgdG8gYXNzdW1lIHRoZSBmaXJzdAorCSAqIDM2IGJ5dGVzIGFyZSB2YWxpZCBubyBtYXR0ZXIgd2hhdCB0aGUgZGV2aWNlIHNheXMuICBUaGF0J3MKKwkgKiBiZXR0ZXIgdGhhbiBjb3B5aW5nIDwgMzYgYnl0ZXMgdG8gdGhlIGlucXVpcnktcmVzdWx0IGJ1ZmZlcgorCSAqIGFuZCBkaXNwbGF5aW5nIGdhcmJhZ2UgZm9yIHRoZSBWZW5kb3IsIFByb2R1Y3QsIG9yIFJldmlzaW9uCisJICogc3RyaW5ncy4KKwkgKi8KKwlpZiAoc2Rldi0+aW5xdWlyeV9sZW4gPCAzNikgeworCQlwcmludGsoS0VSTl9JTkZPICJzY3NpIHNjYW46IElOUVVJUlkgcmVzdWx0IHRvbyBzaG9ydCAoJWQpLCIKKwkJCQkiIHVzaW5nIDM2XG4iLCBzZGV2LT5pbnF1aXJ5X2xlbik7CisJCXNkZXYtPmlucXVpcnlfbGVuID0gMzY7CisJfQorCisJLyoKIAkgKiBSZWxhdGVkIHRvIHRoZSBhYm92ZSBpc3N1ZToKIAkgKgogCSAqIFhYWCBEZXZpY2VzIChkaXNrIG9yIGFsbD8pIHNob3VsZCBiZSBzZW50IGEgVEVTVCBVTklUIFJFQURZLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggMjU5YzkwYy4uYzI3NWRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC05MjIsNyArOTIyLDcgQEAKIAlzbnByaW50ZihzZGV2LT5zZGV2X2NsYXNzZGV2LmNsYXNzX2lkLCBCVVNfSURfU0laRSwKIAkJICIlZDolZDolZDolZCIsIHNkZXYtPmhvc3QtPmhvc3Rfbm8sCiAJCSBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuKTsKLQlzZGV2LT5zY3NpX2xldmVsID0gU0NTSV8yOworCXNkZXYtPnNjc2lfbGV2ZWwgPSBzdGFyZ2V0LT5zY3NpX2xldmVsOwogCXRyYW5zcG9ydF9zZXR1cF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGRfdGFpbCgmc2Rldi0+c2FtZV90YXJnZXRfc2libGluZ3MsICZzdGFyZ2V0LT5kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RndF9pZi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdGd0X2lmLmMKaW5kZXggZjIzNDRhYi4uMGUwODgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdGd0X2lmLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdGd0X2lmLmMKQEAgLTMzLDYgKzMzLDE0IEBACiAKICNpbmNsdWRlICJzY3NpX3RndF9wcml2LmgiCiAKKyNpZiBUR1RfUklOR19TSVpFIDwgUEFHRV9TSVpFCisjICBkZWZpbmUgVEdUX1JJTkdfU0laRSBQQUdFX1NJWkUKKyNlbmRpZgorCisjZGVmaW5lIFRHVF9SSU5HX1BBR0VTIChUR1RfUklOR19TSVpFID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIFRHVF9FVkVOVF9QRVJfUEFHRSAoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCB0Z3RfZXZlbnQpKQorI2RlZmluZSBUR1RfTUFYX0VWRU5UUyAoVEdUX0VWRU5UX1BFUl9QQUdFICogVEdUX1JJTkdfUEFHRVMpCisKIHN0cnVjdCB0Z3RfcmluZyB7CiAJdTMyIHRyX2lkeDsKIAl1bnNpZ25lZCBsb25nIHRyX3BhZ2VzW1RHVF9SSU5HX1BBR0VTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggMGQzYzEwZi4uNThhZmRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTg1NSw3ICs4NTUsNyBAQAogCiAvKgogICogTm90ZTogaW4gdGhlIHRhcmdldCBzaG93IGZ1bmN0aW9uIHdlIHJlY29nbml6ZSB3aGVuIHRoZSByZW1vdGUKLSAqICBwb3J0IGlzIGluIHRoZSBoZWlyYXJjaHkgYW5kIGRvIG5vdCBhbGxvdyB0aGUgZHJpdmVyIHRvIGdldAorICogIHBvcnQgaXMgaW4gdGhlIGhpZXJhcmNoeSBhbmQgZG8gbm90IGFsbG93IHRoZSBkcml2ZXIgdG8gZ2V0CiAgKiAgaW52b2x2ZWQgaW4gc3lzZnMgZnVuY3Rpb25zLiBUaGUgZHJpdmVyIG9ubHkgZ2V0cyBpbnZvbHZlZCBpZgogICogIGl0J3MgdGhlICJvbGQiIHN0eWxlIHRoYXQgZG9lc24ndCB1c2UgcnBvcnRzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKaW5kZXggNmQzOTE1MGUuLmIyZWY3MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKQEAgLTUwMCw3ICs1MDAsNyBAQAogRVhQT1JUX1NZTUJPTChzYXNfcGh5X2FsbG9jKTsKIAogLyoqCi0gKiBzYXNfcGh5X2FkZCAgLS0gIGFkZCBhIFNBUyBQSFkgdG8gdGhlIGRldmljZSBoaWVyYWNoeQorICogc2FzX3BoeV9hZGQgIC0tICBhZGQgYSBTQVMgUEhZIHRvIHRoZSBkZXZpY2UgaGllcmFyY2h5CiAgKiBAcGh5OglUaGUgUEhZIHRvIGJlIGFkZGVkCiAgKgogICogUHVibGlzaGVzIGEgU0FTIFBIWSB0byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLgpAQCAtMTI2NSw3ICsxMjY1LDcgQEAKIEVYUE9SVF9TWU1CT0woc2FzX2V4cGFuZGVyX2FsbG9jKTsKIAogLyoqCi0gKiBzYXNfcnBoeV9hZGQgIC0tICBhZGQgYSBTQVMgcmVtb3RlIFBIWSB0byB0aGUgZGV2aWNlIGhpZXJhY2h5CisgKiBzYXNfcnBoeV9hZGQgIC0tICBhZGQgYSBTQVMgcmVtb3RlIFBIWSB0byB0aGUgZGV2aWNlIGhpZXJhcmNoeQogICogQHJwaHk6CVRoZSByZW1vdGUgUEhZIHRvIGJlIGFkZGVkCiAgKgogICogUHVibGlzaGVzIGEgU0FTIHJlbW90ZSBQSFkgdG8gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggM2YwNDhiZC4uNWE4ZjU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTEyNjksOSArMTI2OSwxOCBAQAogCiAJLyogU29tZSBkZXZpY2VzIHJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIHNlY3RvcnMsIG5vdCB0aGUKIAkgKiBoaWdoZXN0IHNlY3RvciBudW1iZXIuICBNYWtlIHRoZSBuZWNlc3NhcnkgYWRqdXN0bWVudC4gKi8KLQlpZiAoc2RwLT5maXhfY2FwYWNpdHkpCisJaWYgKHNkcC0+Zml4X2NhcGFjaXR5KSB7CiAJCS0tc2RrcC0+Y2FwYWNpdHk7CiAKKwkvKiBTb21lIGRldmljZXMgaGF2ZSB2ZXJzaW9uIHdoaWNoIHJlcG9ydCB0aGUgY29ycmVjdCBzaXplcworCSAqIGFuZCBvdGhlcnMgd2hpY2ggZG8gbm90LiBXZSBndWVzcyBzaXplIGFjY29yZGluZyB0byBhIGhldXJpc3RpYworCSAqIGFuZCBlcnIgb24gdGhlIHNpZGUgb2YgbG93ZXJpbmcgdGhlIGNhcGFjaXR5LiAqLworCX0gZWxzZSB7CisJCWlmIChzZHAtPmd1ZXNzX2NhcGFjaXR5KQorCQkJaWYgKHNka3AtPmNhcGFjaXR5ICYgMHgwMSkgLyogb2RkIHNpemVzIGFyZSBvZGQgKi8KKwkJCQktLXNka3AtPmNhcGFjaXR5OworCX0KKwogZ290X2RhdGE6CiAJaWYgKHNlY3Rvcl9zaXplID09IDApIHsKIAkJc2VjdG9yX3NpemUgPSA1MTI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jIGIvZHJpdmVycy9zY3NpL3NnaXdkOTMuYwppbmRleCBlODFmOTdhLi5hMTU3NTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZ2l3ZDkzLmMKQEAgLTI0NCw5ICsyNDQsMTAgQEAKIAlyZWdzLlNBU1IgPSB3ZHJlZ3MgKyAzOwogCXJlZ3MuU0NNRCA9IHdkcmVncyArIDc7CiAKLQl3ZDMzYzkzX2luaXQoaG9zdCwgcmVncywgZG1hX3NldHVwLCBkbWFfc3RvcCwgV0QzM0M5M19GU18xNl8yMCk7CisJd2QzM2M5M19pbml0KGhvc3QsIHJlZ3MsIGRtYV9zZXR1cCwgZG1hX3N0b3AsIFdEMzNDOTNfRlNfTUhaKDIwKSk7CiAKLQloZGF0YS0+d2gubm9fc3luYyA9IDA7CisJaWYgKGhkYXRhLT53aC5ub19zeW5jID09IDB4ZmYpCisJCWhkYXRhLT53aC5ub19zeW5jID0gMDsKIAogCWlmIChyZXF1ZXN0X2lycShpcnEsIHNnaXdkOTNfaW50ciwgMCwgIlNHSSBXRDkzIiwgKHZvaWQgKikgaG9zdCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAic2dpd2Q5MzogQ291bGQgbm90IHJlZ2lzdGVyIGlycSAlZCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IDNkMmUwMjMuLjk4ZDg0MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC0xOTUsOCArMTk1LDggQEAKIHN0YXRpYyBpbnQgc3RfcHJvYmUoc3RydWN0IGRldmljZSAqKTsKIHN0YXRpYyBpbnQgc3RfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKik7CiAKLXN0YXRpYyBpbnQgZG9fY3JlYXRlX2RyaXZlcmZzX2ZpbGVzKHZvaWQpOwotc3RhdGljIHZvaWQgZG9fcmVtb3ZlX2RyaXZlcmZzX2ZpbGVzKHZvaWQpOworc3RhdGljIGludCBkb19jcmVhdGVfc3lzZnNfZmlsZXModm9pZCk7CitzdGF0aWMgdm9pZCBkb19yZW1vdmVfc3lzZnNfZmlsZXModm9pZCk7CiBzdGF0aWMgaW50IGRvX2NyZWF0ZV9jbGFzc19maWxlcyhzdHJ1Y3Qgc2NzaV90YXBlICosIGludCwgaW50KTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2RyaXZlciBzdF90ZW1wbGF0ZSA9IHsKQEAgLTQxOTMsNyArNDE5Myw3IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfY2hyZGV2OwogCi0JZXJyID0gZG9fY3JlYXRlX2RyaXZlcmZzX2ZpbGVzKCk7CisJZXJyID0gZG9fY3JlYXRlX3N5c2ZzX2ZpbGVzKCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfc2NzaWRydjsKIApAQCAtNDIxMSw3ICs0MjExLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfc3Qodm9pZCkKIHsKLQlkb19yZW1vdmVfZHJpdmVyZnNfZmlsZXMoKTsKKwlkb19yZW1vdmVfc3lzZnNfZmlsZXMoKTsKIAlzY3NpX3VucmVnaXN0ZXJfZHJpdmVyKCZzdF90ZW1wbGF0ZS5nZW5kcnYpOwogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihTQ1NJX1RBUEVfTUFKT1IsIDApLAogCQkJCSBTVF9NQVhfVEFQRV9FTlRSSUVTKTsKQEAgLTQyNDksNDMgKzQyNDksNDMgQEAKIH0KIHN0YXRpYyBEUklWRVJfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCBzdF92ZXJzaW9uX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgaW50IGRvX2NyZWF0ZV9kcml2ZXJmc19maWxlcyh2b2lkKQorc3RhdGljIGludCBkb19jcmVhdGVfc3lzZnNfZmlsZXModm9pZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyZnMgPSAmc3RfdGVtcGxhdGUuZ2VuZHJ2OworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpzeXNmcyA9ICZzdF90ZW1wbGF0ZS5nZW5kcnY7CiAJaW50IGVycjsKIAotCWVyciA9IGRyaXZlcl9jcmVhdGVfZmlsZShkcml2ZXJmcywgJmRyaXZlcl9hdHRyX3RyeV9kaXJlY3RfaW8pOworCWVyciA9IGRyaXZlcl9jcmVhdGVfZmlsZShzeXNmcywgJmRyaXZlcl9hdHRyX3RyeV9kaXJlY3RfaW8pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gZHJpdmVyX2NyZWF0ZV9maWxlKGRyaXZlcmZzLCAmZHJpdmVyX2F0dHJfZml4ZWRfYnVmZmVyX3NpemUpOworCWVyciA9IGRyaXZlcl9jcmVhdGVfZmlsZShzeXNmcywgJmRyaXZlcl9hdHRyX2ZpeGVkX2J1ZmZlcl9zaXplKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl90cnlfZGlyZWN0X2lvOwotCWVyciA9IGRyaXZlcl9jcmVhdGVfZmlsZShkcml2ZXJmcywgJmRyaXZlcl9hdHRyX21heF9zZ19zZWdzKTsKKwllcnIgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoc3lzZnMsICZkcml2ZXJfYXR0cl9tYXhfc2dfc2Vncyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfYXR0cl9maXhlZF9idWY7Ci0JZXJyID0gZHJpdmVyX2NyZWF0ZV9maWxlKGRyaXZlcmZzLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CisJZXJyID0gZHJpdmVyX2NyZWF0ZV9maWxlKHN5c2ZzLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfYXR0cl9tYXhfc2c7CiAKIAlyZXR1cm4gMDsKIAogZXJyX2F0dHJfbWF4X3NnOgotCWRyaXZlcl9yZW1vdmVfZmlsZShkcml2ZXJmcywgJmRyaXZlcl9hdHRyX21heF9zZ19zZWdzKTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoc3lzZnMsICZkcml2ZXJfYXR0cl9tYXhfc2dfc2Vncyk7CiBlcnJfYXR0cl9maXhlZF9idWY6Ci0JZHJpdmVyX3JlbW92ZV9maWxlKGRyaXZlcmZzLCAmZHJpdmVyX2F0dHJfZml4ZWRfYnVmZmVyX3NpemUpOworCWRyaXZlcl9yZW1vdmVfZmlsZShzeXNmcywgJmRyaXZlcl9hdHRyX2ZpeGVkX2J1ZmZlcl9zaXplKTsKIGVycl90cnlfZGlyZWN0X2lvOgotCWRyaXZlcl9yZW1vdmVfZmlsZShkcml2ZXJmcywgJmRyaXZlcl9hdHRyX3RyeV9kaXJlY3RfaW8pOworCWRyaXZlcl9yZW1vdmVfZmlsZShzeXNmcywgJmRyaXZlcl9hdHRyX3RyeV9kaXJlY3RfaW8pOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX3JlbW92ZV9kcml2ZXJmc19maWxlcyh2b2lkKQorc3RhdGljIHZvaWQgZG9fcmVtb3ZlX3N5c2ZzX2ZpbGVzKHZvaWQpCiB7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcmZzID0gJnN0X3RlbXBsYXRlLmdlbmRydjsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqc3lzZnMgPSAmc3RfdGVtcGxhdGUuZ2VuZHJ2OwogCi0JZHJpdmVyX3JlbW92ZV9maWxlKGRyaXZlcmZzLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7Ci0JZHJpdmVyX3JlbW92ZV9maWxlKGRyaXZlcmZzLCAmZHJpdmVyX2F0dHJfbWF4X3NnX3NlZ3MpOwotCWRyaXZlcl9yZW1vdmVfZmlsZShkcml2ZXJmcywgJmRyaXZlcl9hdHRyX2ZpeGVkX2J1ZmZlcl9zaXplKTsKLQlkcml2ZXJfcmVtb3ZlX2ZpbGUoZHJpdmVyZnMsICZkcml2ZXJfYXR0cl90cnlfZGlyZWN0X2lvKTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoc3lzZnMsICZkcml2ZXJfYXR0cl92ZXJzaW9uKTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoc3lzZnMsICZkcml2ZXJfYXR0cl9tYXhfc2dfc2Vncyk7CisJZHJpdmVyX3JlbW92ZV9maWxlKHN5c2ZzLCAmZHJpdmVyX2F0dHJfZml4ZWRfYnVmZmVyX3NpemUpOworCWRyaXZlcl9yZW1vdmVfZmlsZShzeXNmcywgJmRyaXZlcl9hdHRyX3RyeV9kaXJlY3RfaW8pOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncxLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3MS5oCmluZGV4IDdiMzlmNGEuLjdiMDhkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncxLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzEuaApAQCAtMTAyMCw3ICsxMDIwLDcgQEAKIAkgKiAgSXQgc2hhbGwgYmUgYSB0YWdnZWQgY29tbWFuZC4KIAkgKiAgUmVhZCBTSU1QTEUrVEFHLgogCSAqICBUaGUgQyBjb2RlIHdpbGwgZGVhbCB3aXRoIGVycm9ycy4KLQkgKiAgQWdyZXNzaXZlIG9wdGltaXphdGlvbiwgaXMnbnQgaXQ/IDopCisJICogIEFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBpc24ndCBpdD8gOikKIAkgKi8KIAlTQ1JfTU9WRV9BQlMgKDIpIF4gU0NSX01TR19JTiwKIAkJSEFERFJfMSAobXNnaW4pLApAQCAtMTA0NCw3ICsxMDQ0LDcgQEAKIAkJUkFERFJfMSAoZHNhKSwKIAkvKgogCSAqICBUaGUgU0lETCBzdGlsbCBjb250YWlucyB0aGUgVEFHIHZhbHVlLgotCSAqICBBZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBpc24ndCBpdD8gOik6KQorCSAqICBBZ2dyZXNzaXZlIG9wdGltaXphdGlvbiwgaXNuJ3QgaXQ/IDopOikKIAkgKi8KIAlTQ1JfUkVHX1NGQlIgKHNpZGwsIFNDUl9TSEwsIDApLAogCQkwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzIuaCBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncyLmgKaW5kZXggODUxZjI3MC4uNmU1Yjk1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzIuaAorKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3Mi5oCkBAIC05NTYsNyArOTU2LDcgQEAKIAkgKiAgSXQgc2hhbGwgYmUgYSB0YWdnZWQgY29tbWFuZC4KIAkgKiAgUmVhZCBTSU1QTEUrVEFHLgogCSAqICBUaGUgQyBjb2RlIHdpbGwgZGVhbCB3aXRoIGVycm9ycy4KLQkgKiAgQWdyZXNzaXZlIG9wdGltaXphdGlvbiwgaXMnbnQgaXQ/IDopCisJICogIEFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBpc24ndCBpdD8gOikKIAkgKi8KIAlTQ1JfTU9WRV9BQlMgKDIpIF4gU0NSX01TR19JTiwKIAkJSEFERFJfMSAobXNnaW4pLApAQCAtOTY4LDcgKzk2OCw3IEBACiAJCW9mZnNldG9mKHN0cnVjdCBzeW1fbGNiLCBoZWFkLml0bHFfdGJsX3NhKSwKIAkvKgogCSAqICBUaGUgU0lETCBzdGlsbCBjb250YWlucyB0aGUgVEFHIHZhbHVlLgotCSAqICBBZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBpc24ndCBpdD8gOik6KQorCSAqICBBZ2dyZXNzaXZlIG9wdGltaXphdGlvbiwgaXNuJ3QgaXQ/IDopOikKIAkgKi8KIAlTQ1JfUkVHX1NGQlIgKHNpZGwsIFNDUl9TSEwsIDApLAogCQkwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYyBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKaW5kZXggODM1NzUxNi4uZmE0ZTA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYworKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCkBAIC02OSw2ICs2OSwxMSBAQAogICogQWRkZWQgc3VwcG9ydCBmb3IgcHJlIC1BIGNoaXBzLCB3aGljaCBkb24ndCBoYXZlIGFkdmFuY2VkIGZlYXR1cmVzCiAgKiBhbmQgd2lsbCBnZW5lcmF0ZSBDU1JfUkVTRUwgcmF0aGVyIHRoYW4gQ1NSX1JFU0VMX0FNLgogICoJUmljaGFyZCBIaXJzdCA8cmljaGFyZEBzbGVlcGllLmRlbW9uLmNvLnVrPiAgQXVndXN0IDIwMDAKKyAqCisgKiBBZGRlZCBzdXBwb3J0IGZvciBCdXJzdCBNb2RlIERNQSBhbmQgRmFzdCBTQ1NJLiBFbmFibGVkIHRoZSB1c2Ugb2YKKyAqIGRlZmF1bHRfc3hfcGVyIGZvciBhc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMuIEFkZGVkIGFkanVzdG1lbnQKKyAqIG9mIHRyYW5zZmVyIHBlcmlvZHMgaW4gc3hfdGFibGUgdG8gdGhlIGFjdHVhbCBpbnB1dC1jbG9jay4KKyAqICBwZXRlciBmdWVyc3QgPHBvc3RAcGZyc3QuZGU+ICBGZWJydWFyeSAyMDA3CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtODYsOSArOTEsMTEgQEAKIAogI2luY2x1ZGUgIndkMzNjOTMuaCIKIAorI2RlZmluZSBvcHRpbXVtX3N4X3Blcihob3N0ZGF0YSkgKGhvc3RkYXRhKS0+c3hfdGFibGVbMV0ucGVyaW9kX25zCiAKLSNkZWZpbmUgV0QzM0M5M19WRVJTSU9OICAgICIxLjI2IgotI2RlZmluZSBXRDMzQzkzX0RBVEUgICAgICAgIjIyL0ZlYi8yMDAzIgorCisjZGVmaW5lIFdEMzNDOTNfVkVSU0lPTiAgICAiMS4yNisrIgorI2RlZmluZSBXRDMzQzkzX0RBVEUgICAgICAgIjEwL0ZlYi8yMDA3IgogCiBNT0RVTEVfQVVUSE9SKCJKb2huIFNoaWZmbGV0dCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIFdEMzNDOTMgU0NTSSBkcml2ZXIiKTsKQEAgLTEyMiw2ICsxMjksMTMgQEAKICAqICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIGluIHdkMzNjOTMuaAogICogLSAgY2xvY2s6eCAgICAgICAgLXggPSBjbG9jayBpbnB1dCBpbiBNSHogZm9yIFdEMzNjOTMgY2hpcC4gTm9ybWFsIHZhbHVlcwogICogICAgICAgICAgICAgICAgICAgIHdvdWxkIGJlIGZyb20gOCB0aHJvdWdoIDIwLiBEZWZhdWx0IGlzIDguCisgKiAtICBidXJzdDp4ICAgICAgICAteCA9IDEgdG8gdXNlIEJ1cnN0IE1vZGUgKG9yIERlbWFuZC1Nb2RlKSBETUEsIHggPSAwIHRvIHVzZQorICogICAgICAgICAgICAgICAgICAgIFNpbmdsZSBCeXRlIERNQSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuIEFyZ3VtZW50IGlzCisgKiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgLSBpZiBub3QgcHJlc2VudCwgc2FtZSBhcyAiYnVyc3Q6MSIuCisgKiAtICBmYXN0OnggICAgICAgICAteCA9IDEgdG8gZW5hYmxlIEZhc3QgU0NTSSwgd2hpY2ggaXMgb25seSBlZmZlY3RpdmUgd2l0aAorICogICAgICAgICAgICAgICAgICAgIGlucHV0LWNsb2NrIGRpdmlzb3IgNCAoV0QzM0M5M19GU18xNl8yMCksIHggPSAwIHRvIGRpc2FibGUKKyAqICAgICAgICAgICAgICAgICAgICBpdCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuICBBcmd1bWVudCBpcyBvcHRpb25hbCAtIGlmIG5vdAorICogICAgICAgICAgICAgICAgICAgIHByZXNlbnQsIHNhbWUgYXMgImZhc3Q6MSIuCiAgKiAtICBuZXh0ICAgICAgICAgICAtTm8gYXJndW1lbnQuIFVzZWQgdG8gc2VwYXJhdGUgYmxvY2tzIG9mIGtleXdvcmRzIHdoZW4KICAqICAgICAgICAgICAgICAgICAgICB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgaG9zdCBhZGFwdGVyIGluIHRoZSBzeXN0ZW0uCiAgKgpAQCAtMTQ4LDcgKzE2Miw3IEBACiAgKi8KIAogLyogTm9ybWFsbHksIG5vIGRlZmF1bHRzIGFyZSBzcGVjaWZpZWQgKi8KLXN0YXRpYyBjaGFyICpzZXR1cF9hcmdzW10gPSB7ICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIgfTsKK3N0YXRpYyBjaGFyICpzZXR1cF9hcmdzW10gPSB7ICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiIH07CiAKIHN0YXRpYyBjaGFyICpzZXR1cF9zdHJpbmdzOwogbW9kdWxlX3BhcmFtKHNldHVwX3N0cmluZ3MsIGNoYXJwLCAwKTsKQEAgLTI5OCwyMCArMzEyLDggQEAKIAlyZXR1cm4geDsKIH0KIAotc3RhdGljIHN0cnVjdCBzeF9wZXJpb2Qgc3hfdGFibGVbXSA9IHsKLQl7MSwgMHgyMH0sCi0JezI1MiwgMHgyMH0sCi0JezM3NiwgMHgzMH0sCi0JezUwMCwgMHg0MH0sCi0JezYyNCwgMHg1MH0sCi0Jezc1MiwgMHg2MH0sCi0Jezg3NiwgMHg3MH0sCi0JezEwMDAsIDB4MDB9LAotCXswLCAwfQotfTsKLQogc3RhdGljIGludAotcm91bmRfcGVyaW9kKHVuc2lnbmVkIGludCBwZXJpb2QpCityb3VuZF9wZXJpb2QodW5zaWduZWQgaW50IHBlcmlvZCwgY29uc3Qgc3RydWN0IHN4X3BlcmlvZCAqc3hfdGFibGUpCiB7CiAJaW50IHg7CiAKQEAgLTMyNCwxNyArMzI2LDQ5IEBACiAJcmV0dXJuIDc7CiB9CiAKKy8qCisgKiBDYWxjdWxhdGUgU3luY2hyb25vdXMgVHJhbnNmZXIgUmVnaXN0ZXIgdmFsdWUgZnJvbSBTRFRSIGNvZGUuCisgKi8KIHN0YXRpYyB1Y2hhcgotY2FsY19zeW5jX3hmZXIodW5zaWduZWQgaW50IHBlcmlvZCwgdW5zaWduZWQgaW50IG9mZnNldCkKK2NhbGNfc3luY194ZmVyKHVuc2lnbmVkIGludCBwZXJpb2QsIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBmYXN0LAorICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHN4X3BlcmlvZCAqc3hfdGFibGUpCiB7CisJLyogV2hlbiBkb2luZyBGYXN0IFNDU0kgc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMsIHRoZSBjb3JyZXNwb25kaW5nCisJICogdmFsdWUgaW4gJ3N4X3RhYmxlJyBpcyB0d28gdGltZXMgdGhlIGFjdHVhbGx5IHVzZWQgdHJhbnNmZXIgcGVyaW9kLgorCSAqLwogCXVjaGFyIHJlc3VsdDsKIAorCWlmIChvZmZzZXQgJiYgZmFzdCkgeworCQlmYXN0ID0gU1RSX0ZTUzsKKwkJcGVyaW9kICo9IDI7CisJfSBlbHNlIHsKKwkJZmFzdCA9IDA7CisJfQogCXBlcmlvZCAqPSA0OwkJLyogY29udmVydCBTRFRSIGNvZGUgdG8gbnMgKi8KLQlyZXN1bHQgPSBzeF90YWJsZVtyb3VuZF9wZXJpb2QocGVyaW9kKV0ucmVnX3ZhbHVlOworCXJlc3VsdCA9IHN4X3RhYmxlW3JvdW5kX3BlcmlvZChwZXJpb2Qsc3hfdGFibGUpXS5yZWdfdmFsdWU7CiAJcmVzdWx0IHw9IChvZmZzZXQgPCBPUFRJTVVNX1NYX09GRikgPyBvZmZzZXQgOiBPUFRJTVVNX1NYX09GRjsKKwlyZXN1bHQgfD0gZmFzdDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICogQ2FsY3VsYXRlIFNEVFIgY29kZSBieXRlcyBbM10sWzRdIGZyb20gcGVyaW9kIGFuZCBvZmZzZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FsY19zeW5jX21zZyh1bnNpZ25lZCBpbnQgcGVyaW9kLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgZmFzdCwKKyAgICAgICAgICAgICAgICB1Y2hhciAgbXNnWzJdKQoreworCS8qICdwZXJpb2QnIGlzIGEgIm5vcm1hbCItbW9kZSB2YWx1ZSwgbGlrZSB0aGUgb25lcyBpbiAnc3hfdGFibGUnLiBUaGUKKwkgKiBhY3R1YWxseSB1c2VkIHRyYW5zZmVyIHBlcmlvZCBmb3IgRmFzdCBTQ1NJIHN5bmNocm9ub3VzIGRhdGEKKwkgKiB0cmFuc2ZlcnMgaXMgaGFsZiB0aGF0IHZhbHVlLgorCSAqLworCXBlcmlvZCAvPSA0OworCWlmIChvZmZzZXQgJiYgZmFzdCkKKwkJcGVyaW9kIC89IDI7CisJbXNnWzBdID0gcGVyaW9kOworCW1zZ1sxXSA9IG9mZnNldDsKK30KKwogaW50CiB3ZDMzYzkzX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCiAJCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQpAQCAtNjMyLDcgKzY2Niw3IEBACiAJCQkJd3JpdGVfd2QzM2M5M19jb3VudChyZWdzLAogCQkJCQkJICAgIGNtZC0+U0NwLnRoaXNfcmVzaWR1YWwpOwogCQkJCXdyaXRlX3dkMzNjOTMocmVncywgV0RfQ09OVFJPTCwKLQkJCQkJICAgICAgQ1RSTF9JREkgfCBDVFJMX0VESSB8IENUUkxfRE1BKTsKKwkJCQkJICAgICAgQ1RSTF9JREkgfCBDVFJMX0VESSB8IGhvc3RkYXRhLT5kbWFfbW9kZSk7CiAJCQkJaG9zdGRhdGEtPmRtYSA9IERfRE1BX1JVTk5JTkc7CiAJCQl9CiAJCX0gZWxzZQpAQCAtNzEyLDYgKzc0Niw4IEBACiAJCWNtZC0+U0NwLnB0ciA9IHBhZ2VfYWRkcmVzcyhjbWQtPlNDcC5idWZmZXItPnBhZ2UpICsKIAkJICAgIGNtZC0+U0NwLmJ1ZmZlci0+b2Zmc2V0OwogCX0KKwlpZiAoIWNtZC0+U0NwLnRoaXNfcmVzaWR1YWwpIC8qIGF2b2lkIGJvZ3VzIHNldHVwcyAqLworCQlyZXR1cm47CiAKIAl3cml0ZV93ZDMzYzkzKHJlZ3MsIFdEX1NZTkNIUk9OT1VTX1RSQU5TRkVSLAogCQkgICAgICBob3N0ZGF0YS0+c3luY194ZmVyW2NtZC0+ZGV2aWNlLT5pZF0pOwpAQCAtNzQ0LDcgKzc4MCw3IEBACiAjaWZkZWYgUFJPQ19TVEFUSVNUSUNTCiAJCWhvc3RkYXRhLT5kbWFfY250Kys7CiAjZW5kaWYKLQkJd3JpdGVfd2QzM2M5MyhyZWdzLCBXRF9DT05UUk9MLCBDVFJMX0lESSB8IENUUkxfRURJIHwgQ1RSTF9ETUEpOworCQl3cml0ZV93ZDMzYzkzKHJlZ3MsIFdEX0NPTlRST0wsIENUUkxfSURJIHwgQ1RSTF9FREkgfCBob3N0ZGF0YS0+ZG1hX21vZGUpOwogCQl3cml0ZV93ZDMzYzkzX2NvdW50KHJlZ3MsIGNtZC0+U0NwLnRoaXNfcmVzaWR1YWwpOwogCiAJCWlmICgoaG9zdGRhdGEtPmxldmVsMiA+PSBMMl9EQVRBKSB8fApAQCAtODYyLDkgKzg5OCw2IEBACiAJCQlob3N0ZGF0YS0+b3V0Z29pbmdfbXNnWzBdIHw9IDB4NDA7CiAKIAkJaWYgKGhvc3RkYXRhLT5zeW5jX3N0YXRbY21kLT5kZXZpY2UtPmlkXSA9PSBTU19GSVJTVCkgewotI2lmZGVmIFNZTkNfREVCVUcKLQkJCXByaW50aygiIHNlbmRpbmcgU0RUUiAiKTsKLSNlbmRpZgogCiAJCQlob3N0ZGF0YS0+c3luY19zdGF0W2NtZC0+ZGV2aWNlLT5pZF0gPSBTU19XQUlUSU5HOwogCkBAIC04NzgsMTQgKzkxMSwyMCBAQAogCQkJaG9zdGRhdGEtPm91dGdvaW5nX21zZ1syXSA9IDM7CiAJCQlob3N0ZGF0YS0+b3V0Z29pbmdfbXNnWzNdID0gRVhURU5ERURfU0RUUjsKIAkJCWlmIChob3N0ZGF0YS0+bm9fc3luYyAmICgxIDw8IGNtZC0+ZGV2aWNlLT5pZCkpIHsKLQkJCQlob3N0ZGF0YS0+b3V0Z29pbmdfbXNnWzRdID0KLQkJCQkgICAgaG9zdGRhdGEtPmRlZmF1bHRfc3hfcGVyIC8gNDsKLQkJCQlob3N0ZGF0YS0+b3V0Z29pbmdfbXNnWzVdID0gMDsKKwkJCQljYWxjX3N5bmNfbXNnKGhvc3RkYXRhLT5kZWZhdWx0X3N4X3BlciwgMCwKKwkJCQkJCTAsIGhvc3RkYXRhLT5vdXRnb2luZ19tc2cgKyA0KTsKIAkJCX0gZWxzZSB7Ci0JCQkJaG9zdGRhdGEtPm91dGdvaW5nX21zZ1s0XSA9IE9QVElNVU1fU1hfUEVSIC8gNDsKLQkJCQlob3N0ZGF0YS0+b3V0Z29pbmdfbXNnWzVdID0gT1BUSU1VTV9TWF9PRkY7CisJCQkJY2FsY19zeW5jX21zZyhvcHRpbXVtX3N4X3Blcihob3N0ZGF0YSksCisJCQkJCQlPUFRJTVVNX1NYX09GRiwKKwkJCQkJCWhvc3RkYXRhLT5mYXN0LAorCQkJCQkJaG9zdGRhdGEtPm91dGdvaW5nX21zZyArIDQpOwogCQkJfQogCQkJaG9zdGRhdGEtPm91dGdvaW5nX2xlbiA9IDY7CisjaWZkZWYgU1lOQ19ERUJVRworCQkJdWNwID0gaG9zdGRhdGEtPm91dGdvaW5nX21zZyArIDE7CisJCQlwcmludGsoIiBzZW5kaW5nIFNEVFIgJTAyeDAzJTAyeCUwMnglMDJ4ICIsCisJCQkJdWNwWzBdLCB1Y3BbMl0sIHVjcFszXSwgdWNwWzRdKTsKKyNlbmRpZgogCQl9IGVsc2UKIAkJCWhvc3RkYXRhLT5vdXRnb2luZ19sZW4gPSAxOwogCkBAIC0xMDAxLDggKzEwNDAsMTMgQEAKICNpZmRlZiBTWU5DX0RFQlVHCiAJCQkgICAgcHJpbnRrKCItUkVKLSIpOwogI2VuZGlmCi0JCQlpZiAoaG9zdGRhdGEtPnN5bmNfc3RhdFtjbWQtPmRldmljZS0+aWRdID09IFNTX1dBSVRJTkcpCisJCQlpZiAoaG9zdGRhdGEtPnN5bmNfc3RhdFtjbWQtPmRldmljZS0+aWRdID09IFNTX1dBSVRJTkcpIHsKIAkJCQlob3N0ZGF0YS0+c3luY19zdGF0W2NtZC0+ZGV2aWNlLT5pZF0gPSBTU19TRVQ7CisJCQkJLyogd2Ugd2FudCBkZWZhdWx0X3N4X3Blciwgbm90IERFRkFVTFRfU1hfUEVSICovCisJCQkJaG9zdGRhdGEtPnN5bmNfeGZlcltjbWQtPmRldmljZS0+aWRdID0KKwkJCQkJY2FsY19zeW5jX3hmZXIoaG9zdGRhdGEtPmRlZmF1bHRfc3hfcGVyCisJCQkJCQkvIDQsIDAsIDAsIGhvc3RkYXRhLT5zeF90YWJsZSk7CisJCQl9CiAJCQl3cml0ZV93ZDMzYzkzX2NtZChyZWdzLCBXRF9DTURfTkVHQVRFX0FDSyk7CiAJCQlob3N0ZGF0YS0+c3RhdGUgPSBTX0NPTk5FQ1RFRDsKIAkJCWJyZWFrOwpAQCAtMTAyMiw3ICsxMDY2LDEwIEBACiAKIAkJCQlzd2l0Y2ggKHVjcFsyXSkgewkvKiB3aGF0J3MgdGhlIEVYVEVOREVEIGNvZGU/ICovCiAJCQkJY2FzZSBFWFRFTkRFRF9TRFRSOgotCQkJCQlpZCA9IGNhbGNfc3luY194ZmVyKHVjcFszXSwgdWNwWzRdKTsKKwkJCQkJLyogZGVmYXVsdCB0byBkZWZhdWx0IGFzeW5jIHBlcmlvZCAqLworCQkJCQlpZCA9IGNhbGNfc3luY194ZmVyKGhvc3RkYXRhLT4KKwkJCQkJCQlkZWZhdWx0X3N4X3BlciAvIDQsIDAsCisJCQkJCQkJMCwgaG9zdGRhdGEtPnN4X3RhYmxlKTsKIAkJCQkJaWYgKGhvc3RkYXRhLT5zeW5jX3N0YXRbY21kLT5kZXZpY2UtPmlkXSAhPQogCQkJCQkgICAgU1NfV0FJVElORykgewogCkBAIC0xMDQxLDIwICsxMDg4LDIyIEBACiAJCQkJCQlob3N0ZGF0YS0+b3V0Z29pbmdfbXNnWzFdID0gMzsKIAkJCQkJCWhvc3RkYXRhLT5vdXRnb2luZ19tc2dbMl0gPQogCQkJCQkJICAgIEVYVEVOREVEX1NEVFI7Ci0JCQkJCQlob3N0ZGF0YS0+b3V0Z29pbmdfbXNnWzNdID0KLQkJCQkJCSAgICBob3N0ZGF0YS0+ZGVmYXVsdF9zeF9wZXIgLwotCQkJCQkJICAgIDQ7Ci0JCQkJCQlob3N0ZGF0YS0+b3V0Z29pbmdfbXNnWzRdID0gMDsKKwkJCQkJCWNhbGNfc3luY19tc2coaG9zdGRhdGEtPgorCQkJCQkJCWRlZmF1bHRfc3hfcGVyLCAwLAorCQkJCQkJCTAsIGhvc3RkYXRhLT5vdXRnb2luZ19tc2cgKyAzKTsKIAkJCQkJCWhvc3RkYXRhLT5vdXRnb2luZ19sZW4gPSA1OwotCQkJCQkJaG9zdGRhdGEtPnN5bmNfeGZlcltjbWQtPmRldmljZS0+aWRdID0KLQkJCQkJCSAgICBjYWxjX3N5bmNfeGZlcihob3N0ZGF0YS0+Ci0JCQkJCQkJCSAgIGRlZmF1bHRfc3hfcGVyCi0JCQkJCQkJCSAgIC8gNCwgMCk7CiAJCQkJCX0gZWxzZSB7Ci0JCQkJCQlob3N0ZGF0YS0+c3luY194ZmVyW2NtZC0+ZGV2aWNlLT5pZF0gPSBpZDsKKwkJCQkJCWlmICh1Y3BbNF0pIC8qIHdlbGwsIHN5bmMgdHJhbnNmZXIgKi8KKwkJCQkJCQlpZCA9IGNhbGNfc3luY194ZmVyKHVjcFszXSwgdWNwWzRdLAorCQkJCQkJCQkJaG9zdGRhdGEtPmZhc3QsCisJCQkJCQkJCQlob3N0ZGF0YS0+c3hfdGFibGUpOworCQkJCQkJZWxzZSBpZiAodWNwWzNdKSAvKiB2ZXJ5IHVubGlrZWx5Li4uICovCisJCQkJCQkJaWQgPSBjYWxjX3N5bmNfeGZlcih1Y3BbM10sIHVjcFs0XSwKKwkJCQkJCQkJCTAsIGhvc3RkYXRhLT5zeF90YWJsZSk7CiAJCQkJCX0KKwkJCQkJaG9zdGRhdGEtPnN5bmNfeGZlcltjbWQtPmRldmljZS0+aWRdID0gaWQ7CiAjaWZkZWYgU1lOQ19ERUJVRwotCQkJCQlwcmludGsoInN5bmNfeGZlcj0lMDJ4IiwKKwkJCQkJcHJpbnRrKCIgc3luY194ZmVyPSUwMnhcbiIsCiAJCQkJCSAgICAgICBob3N0ZGF0YS0+c3luY194ZmVyW2NtZC0+ZGV2aWNlLT5pZF0pOwogI2VuZGlmCiAJCQkJCWhvc3RkYXRhLT5zeW5jX3N0YXRbY21kLT5kZXZpY2UtPmlkXSA9CkBAIC0xNDg2LDcgKzE1MzUsNyBAQAogCXdyaXRlX3dkMzNjOTMocmVncywgV0RfQ09OVFJPTCwgQ1RSTF9JREkgfCBDVFJMX0VESSB8IENUUkxfUE9MTEVEKTsKIAl3cml0ZV93ZDMzYzkzKHJlZ3MsIFdEX1NZTkNIUk9OT1VTX1RSQU5TRkVSLAogCQkgICAgICBjYWxjX3N5bmNfeGZlcihob3N0ZGF0YS0+ZGVmYXVsdF9zeF9wZXIgLyA0LAotCQkJCSAgICAgREVGQVVMVF9TWF9PRkYpKTsKKwkJCQkgICAgIERFRkFVTFRfU1hfT0ZGLCAwLCBob3N0ZGF0YS0+c3hfdGFibGUpKTsKIAl3cml0ZV93ZDMzYzkzKHJlZ3MsIFdEX0NPTU1BTkQsIFdEX0NNRF9SRVNFVCk7CiAKIApAQCAtMTUxMiw2ICsxNTYxLDkgQEAKIAl9IGVsc2UKIAkJaG9zdGRhdGEtPmNoaXAgPSBDX1VOS05PV05fQ0hJUDsKIAorCWlmIChob3N0ZGF0YS0+Y2hpcCAhPSBDX1dEMzNDOTNCKQkvKiBGYXN0IFNDU0kgdW5hdmFpbGFibGUgKi8KKwkJaG9zdGRhdGEtPmZhc3QgPSAwOworCiAJd3JpdGVfd2QzM2M5MyhyZWdzLCBXRF9USU1FT1VUX1BFUklPRCwgVElNRU9VVF9QRVJJT0RfVkFMVUUpOwogCXdyaXRlX3dkMzNjOTMocmVncywgV0RfQ09OVFJPTCwgQ1RSTF9JREkgfCBDVFJMX0VESSB8IENUUkxfUE9MTEVEKTsKIH0KQEAgLTE1MzMsNyArMTU4NSw4IEBACiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQlob3N0ZGF0YS0+YnVzeVtpXSA9IDA7CiAJCWhvc3RkYXRhLT5zeW5jX3hmZXJbaV0gPQotCQkgICAgY2FsY19zeW5jX3hmZXIoREVGQVVMVF9TWF9QRVIgLyA0LCBERUZBVUxUX1NYX09GRik7CisJCQljYWxjX3N5bmNfeGZlcihERUZBVUxUX1NYX1BFUiAvIDQsIERFRkFVTFRfU1hfT0ZGLAorCQkJCQkwLCBob3N0ZGF0YS0+c3hfdGFibGUpOwogCQlob3N0ZGF0YS0+c3luY19zdGF0W2ldID0gU1NfVU5TRVQ7CS8qIHVzaW5nIGRlZmF1bHQgc3luYyB2YWx1ZXMgKi8KIAl9CiAJaG9zdGRhdGEtPmlucHV0X1EgPSBOVUxMOwpAQCAtMTc4Miw2ICsxODM1LDk4IEBACiAJcmV0dXJuICsreDsKIH0KIAorLyoKKyAqIENhbGN1bGF0ZSBpbnRlcm5hbCBkYXRhLXRyYW5zZmVyLWNsb2NrIGN5Y2xlIGZyb20gaW5wdXQtY2xvY2sKKyAqIGZyZXF1ZW5jeSAoL01IeikgYW5kIGZpbGwgJ3N4X3RhYmxlJy4KKyAqCisgKiBUaGUgb3JpZ2luYWwgZHJpdmVyIHVzZWQgdG8gcmVseSBvbiBhIGZpeGVkIHN4X3RhYmxlLCBjb250YWluaW5nIHBlcmlvZHMKKyAqIGZvciAob25seSkgdGhlIGxvd2VyIGxpbWl0cyBvZiB0aGUgcmVzcGVjdGl2ZSBpbnB1dC1jbG9jay1mcmVxdWVuY3kgcmFuZ2VzCisgKiAoOC0xMC8xMi0xNS8xNi0yMCBNSHopLiBBbHRob3VnaCBpdCBzZWVtcywgdGhhdCBubyBwcm9ibGVtcyBvY3VycmVkIHdpdGgKKyAqIHRoaXMgc2V0dGluZyBzbyBmYXIsIGl0IG1pZ2h0IGJlIGRlc2lyYWJsZSB0byBhZGp1c3QgdGhlIHRyYW5zZmVyIHBlcmlvZHMKKyAqIGNsb3NlciB0byB0aGUgcmVhbGx5IGF0dGFjaGVkLCBwb3NzaWJseSAyNSUgaGlnaGVyLCBpbnB1dC1jbG9jaywgc2luY2UKKyAqIC0gdGhlIHdkMzNjOTMgbWF5IHJlYWxseSB1c2UgYSBzaWduaWZpY2FudCBzaG9ydGVyIHBlcmlvZCwgdGhhbiBpdCBoYXMKKyAqICAgbmVnb3RpYXRlZCAoZWcuIHRocmFzaGluZyB0aGUgdGFyZ2V0LCB3aGljaCBleHBlY3RzIDQvOE1Ieiwgd2l0aCA1LzEwTUh6CisgKiAgIGluc3RlYWQpLgorICogLSB0aGUgd2QzM2M5MyBtYXkgYXNrIHRoZSB0YXJnZXQgZm9yIGEgbG93ZXIgdHJhbnNmZXIgcmF0ZSwgdGhhbiB0aGUgdGFyZ2V0CisgKiAgIGlzIGNhcGFibGUgb2YgKGVnLiBuZWdvdGlhdGluZyBmb3IgYW4gYXNzdW1lZCBtaW5pbXVtIG9mIDI1Mm5zIGluc3RlYWQgb2YKKyAqICAgcG9zc2libGUgMjAwbnMsIHdoaWNoIGluZGVlZCBzaG93cyB1cCBpbiB0ZXN0cyBhcyBhbiBhcHByb3guIDEwJSBsb3dlcgorICogICB0cmFuc2ZlciByYXRlKS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3JvdW5kXzQodW5zaWduZWQgaW50IHgpCit7CisJc3dpdGNoICh4ICYgMykgeworCQljYXNlIDE6IC0teDsKKwkJCWJyZWFrOworCQljYXNlIDI6ICsreDsKKwkJY2FzZSAzOiArK3g7CisJfQorCXJldHVybiB4OworfQorCitzdGF0aWMgdm9pZAorY2FsY19zeF90YWJsZSh1bnNpZ25lZCBpbnQgbWh6LCBzdHJ1Y3Qgc3hfcGVyaW9kIHN4X3RhYmxlWzldKQoreworCXVuc2lnbmVkIGludCBkLCBpOworCWlmIChtaHogPCAxMSkKKwkJZCA9IDI7CS8qIGRpdmlzb3IgZm9yICA4LTEwIE1IeiBpbnB1dC1jbG9jayAqLworCWVsc2UgaWYgKG1oeiA8IDE2KQorCQlkID0gMzsJLyogZGl2aXNvciBmb3IgMTItMTUgTUh6IGlucHV0LWNsb2NrICovCisJZWxzZQorCQlkID0gNDsJLyogZGl2aXNvciBmb3IgMTYtMjAgTUh6IGlucHV0LWNsb2NrICovCisKKwlkID0gKDEwMDAwMCAqIGQpIC8gMiAvIG1oejsgLyogMTAwIHggRFRDQyAvIG5hbm9zZWMgKi8KKworCXN4X3RhYmxlWzBdLnBlcmlvZF9ucyA9IDE7CisJc3hfdGFibGVbMF0ucmVnX3ZhbHVlID0gMHgyMDsKKwlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7CisJCXN4X3RhYmxlW2ldLnBlcmlvZF9ucyA9IHJvdW5kXzQoKGkrMSkqZCAvIDEwMCk7CisJCXN4X3RhYmxlW2ldLnJlZ192YWx1ZSA9IChpKzEpKjB4MTA7CisJfQorCXN4X3RhYmxlWzddLnJlZ192YWx1ZSA9IDA7CisJc3hfdGFibGVbOF0ucGVyaW9kX25zID0gMDsKKwlzeF90YWJsZVs4XS5yZWdfdmFsdWUgPSAwOworfQorCisvKgorICogY2hlY2sgYW5kLCBtYXliZSwgbWFwIGFuIGluaXQtIG9yICJjbG9jazoiLSBhcmd1bWVudC4KKyAqLworc3RhdGljIHVjaGFyCitzZXRfY2xrX2ZyZXEoaW50IGZyZXEsIGludCAqbWh6KQoreworCWludCB4ID0gZnJlcTsKKwlpZiAoV0QzM0M5M19GU184XzEwID09IGZyZXEpCisJCWZyZXEgPSA4OworCWVsc2UgaWYgKFdEMzNDOTNfRlNfMTJfMTUgPT0gZnJlcSkKKwkJZnJlcSA9IDEyOworCWVsc2UgaWYgKFdEMzNDOTNfRlNfMTZfMjAgPT0gZnJlcSkKKwkJZnJlcSA9IDE2OworCWVsc2UgaWYgKGZyZXEgPiA3ICYmIGZyZXEgPCAxMSkKKwkJeCA9IFdEMzNDOTNfRlNfOF8xMDsKKwkJZWxzZSBpZiAoZnJlcSA+IDExICYmIGZyZXEgPCAxNikKKwkJeCA9IFdEMzNDOTNfRlNfMTJfMTU7CisJCWVsc2UgaWYgKGZyZXEgPiAxNSAmJiBmcmVxIDwgMjEpCisJCXggPSBXRDMzQzkzX0ZTXzE2XzIwOworCWVsc2UgeworCQkJLyogSG1tLCB3b3VsZG4ndCBpdCBiZSBzYWZlciB0byBhc3N1bWUgaGlnaGVzdCBmcmVxIGhlcmU/ICovCisJCXggPSBXRDMzQzkzX0ZTXzhfMTA7CisJCWZyZXEgPSA4OworCX0KKwkqbWh6ID0gZnJlcTsKKwlyZXR1cm4geDsKK30KKworLyoKKyAqIHRvIGJlIHVzZWQgd2l0aCB0aGUgcmVzeW5jOiBmYXN0OiAuLi4gb3B0aW9ucworICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Jlc3luYyAoIHN0cnVjdCBXRDMzQzkzX2hvc3RkYXRhICpoZCwgaW50IG1hc2sgKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWlmIChtYXNrICYgKDEgPDwgaSkpCisJCQloZC0+c3luY19zdGF0W2ldID0gU1NfVU5TRVQ7Cit9CisKIHZvaWQKIHdkMzNjOTNfaW5pdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgY29uc3Qgd2QzM2M5M19yZWdzIHJlZ3MsCiAJICAgICBkbWFfc2V0dXBfdCBzZXR1cCwgZG1hX3N0b3BfdCBzdG9wLCBpbnQgY2xvY2tfZnJlcSkKQEAgLTE3OTgsNyArMTk0Myw4IEBACiAJaG9zdGRhdGEgPSAoc3RydWN0IFdEMzNDOTNfaG9zdGRhdGEgKikgaW5zdGFuY2UtPmhvc3RkYXRhOwogCiAJaG9zdGRhdGEtPnJlZ3MgPSByZWdzOwotCWhvc3RkYXRhLT5jbG9ja19mcmVxID0gY2xvY2tfZnJlcTsKKwlob3N0ZGF0YS0+Y2xvY2tfZnJlcSA9IHNldF9jbGtfZnJlcShjbG9ja19mcmVxLCAmaSk7CisJY2FsY19zeF90YWJsZShpLCBob3N0ZGF0YS0+c3hfdGFibGUpOwogCWhvc3RkYXRhLT5kbWFfc2V0dXAgPSBzZXR1cDsKIAlob3N0ZGF0YS0+ZG1hX3N0b3AgPSBzdG9wOwogCWhvc3RkYXRhLT5kbWFfYm91bmNlX2J1ZmZlciA9IE5VTEw7CkBAIC0xODA2LDcgKzE5NTIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJaG9zdGRhdGEtPmJ1c3lbaV0gPSAwOwogCQlob3N0ZGF0YS0+c3luY194ZmVyW2ldID0KLQkJICAgIGNhbGNfc3luY194ZmVyKERFRkFVTFRfU1hfUEVSIC8gNCwgREVGQVVMVF9TWF9PRkYpOworCQkJY2FsY19zeW5jX3hmZXIoREVGQVVMVF9TWF9QRVIgLyA0LCBERUZBVUxUX1NYX09GRiwKKwkJCQkJMCwgaG9zdGRhdGEtPnN4X3RhYmxlKTsKIAkJaG9zdGRhdGEtPnN5bmNfc3RhdFtpXSA9IFNTX1VOU0VUOwkvKiB1c2luZyBkZWZhdWx0IHN5bmMgdmFsdWVzICovCiAjaWZkZWYgUFJPQ19TVEFUSVNUSUNTCiAJCWhvc3RkYXRhLT5jbWRfY250W2ldID0gMDsKQEAgLTE4MjgsNiArMTk3NSw4IEBACiAJaG9zdGRhdGEtPmRlZmF1bHRfc3hfcGVyID0gREVGQVVMVF9TWF9QRVI7CiAJaG9zdGRhdGEtPm5vX3N5bmMgPSAweGZmOwkvKiBzeW5jIGRlZmF1bHRzIHRvIG9mZiAqLwogCWhvc3RkYXRhLT5ub19kbWEgPSAwOwkvKiBkZWZhdWx0IGlzIERNQSBlbmFibGVkICovCisJaG9zdGRhdGEtPmZhc3QgPSAwOwkvKiBkZWZhdWx0IGlzIEZhc3QgU0NTSSB0cmFuc2ZlcnMgZGlzYWJsZWQgKi8KKwlob3N0ZGF0YS0+ZG1hX21vZGUgPSBDVFJMX0RNQTsJLyogZGVmYXVsdCBpcyBTaW5nbGUgQnl0ZSBETUEgKi8KIAogI2lmZGVmIFBST0NfSU5URVJGQUNFCiAJaG9zdGRhdGEtPnByb2MgPSBQUl9WRVJTSU9OIHwgUFJfSU5GTyB8IFBSX1NUQVRJU1RJQ1MgfApAQCAtMTgzOSw2ICsxOTg4LDExIEBACiAjZW5kaWYKICNlbmRpZgogCisJaWYgKGNoZWNrX3NldHVwX2FyZ3MoImNsb2NrIiwgJmZsYWdzLCAmdmFsLCBidWYpKSB7CisJCWhvc3RkYXRhLT5jbG9ja19mcmVxID0gc2V0X2Nsa19mcmVxKHZhbCwgJnZhbCk7CisJCWNhbGNfc3hfdGFibGUodmFsLCBob3N0ZGF0YS0+c3hfdGFibGUpOworCX0KKwogCWlmIChjaGVja19zZXR1cF9hcmdzKCJub3N5bmMiLCAmZmxhZ3MsICZ2YWwsIGJ1ZikpCiAJCWhvc3RkYXRhLT5ub19zeW5jID0gdmFsOwogCkBAIC0xODQ3LDcgKzIwMDEsOCBAQAogCiAJaWYgKGNoZWNrX3NldHVwX2FyZ3MoInBlcmlvZCIsICZmbGFncywgJnZhbCwgYnVmKSkKIAkJaG9zdGRhdGEtPmRlZmF1bHRfc3hfcGVyID0KLQkJICAgIHN4X3RhYmxlW3JvdW5kX3BlcmlvZCgodW5zaWduZWQgaW50KSB2YWwpXS5wZXJpb2RfbnM7CisJCSAgICBob3N0ZGF0YS0+c3hfdGFibGVbcm91bmRfcGVyaW9kKCh1bnNpZ25lZCBpbnQpIHZhbCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdGRhdGEtPnN4X3RhYmxlKV0ucGVyaW9kX25zOwogCiAJaWYgKGNoZWNrX3NldHVwX2FyZ3MoImRpc2Nvbm5lY3QiLCAmZmxhZ3MsICZ2YWwsIGJ1ZikpIHsKIAkJaWYgKCh2YWwgPj0gRElTX05FVkVSKSAmJiAodmFsIDw9IERJU19BTFdBWVMpKQpAQCAtMTg2MiwxNyArMjAxNywxMiBAQAogCWlmIChjaGVja19zZXR1cF9hcmdzKCJkZWJ1ZyIsICZmbGFncywgJnZhbCwgYnVmKSkKIAkJaG9zdGRhdGEtPmFyZ3MgPSB2YWwgJiBEQl9NQVNLOwogCi0JaWYgKGNoZWNrX3NldHVwX2FyZ3MoImNsb2NrIiwgJmZsYWdzLCAmdmFsLCBidWYpKSB7Ci0JCWlmICh2YWwgPiA3ICYmIHZhbCA8IDExKQotCQkJdmFsID0gV0QzM0M5M19GU184XzEwOwotCQllbHNlIGlmICh2YWwgPiAxMSAmJiB2YWwgPCAxNikKLQkJCXZhbCA9IFdEMzNDOTNfRlNfMTJfMTU7Ci0JCWVsc2UgaWYgKHZhbCA+IDE1ICYmIHZhbCA8IDIxKQotCQkJdmFsID0gV0QzM0M5M19GU18xNl8yMDsKLQkJZWxzZQotCQkJdmFsID0gV0QzM0M5M19GU184XzEwOwotCQlob3N0ZGF0YS0+Y2xvY2tfZnJlcSA9IHZhbDsKLQl9CisJaWYgKGNoZWNrX3NldHVwX2FyZ3MoImJ1cnN0IiwgJmZsYWdzLCAmdmFsLCBidWYpKQorCQlob3N0ZGF0YS0+ZG1hX21vZGUgPSB2YWwgPyBDVFJMX0JVUlNUOkNUUkxfRE1BOworCisJaWYgKFdEMzNDOTNfRlNfMTZfMjAgPT0gaG9zdGRhdGEtPmNsb2NrX2ZyZXEgLyogZGl2aXNvciA0ICovCisJCSYmIGNoZWNrX3NldHVwX2FyZ3MoImZhc3QiLCAmZmxhZ3MsICZ2YWwsIGJ1ZikpCisJCWhvc3RkYXRhLT5mYXN0ID0gISF2YWw7CiAKIAlpZiAoKGkgPSBjaGVja19zZXR1cF9hcmdzKCJuZXh0IiwgJmZsYWdzLCAmdmFsLCBidWYpKSkgewogCQl3aGlsZSAoaSkKQEAgLTE5MTcsNTMgKzIwNjcsNjUgQEAKIAljaGFyIHRidWZbMTI4XTsKIAlzdHJ1Y3QgV0QzM0M5M19ob3N0ZGF0YSAqaGQ7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwotCWludCB4LCBpOworCWludCB4OwogCXN0YXRpYyBpbnQgc3RvcCA9IDA7CiAKIAloZCA9IChzdHJ1Y3QgV0QzM0M5M19ob3N0ZGF0YSAqKSBpbnN0YW5jZS0+aG9zdGRhdGE7CiAKIC8qIElmICdpbicgaXMgVFJVRSB3ZSBuZWVkIHRvIF9yZWFkXyB0aGUgcHJvYyBmaWxlLiBXZSBhY2NlcHQgdGhlIGZvbGxvd2luZwotICoga2V5d29yZHMgKHNhbWUgZm9ybWF0IGFzIGNvbW1hbmQtbGluZSwgYnV0IG9ubHkgT05FIHBlciByZWFkKToKKyAqIGtleXdvcmRzIChzYW1lIGZvcm1hdCBhcyBjb21tYW5kLWxpbmUsIGJ1dCBhcmd1bWVudHMgYXJlIG5vdCBvcHRpb25hbCk6CiAgKiAgICBkZWJ1ZwogICogICAgZGlzY29ubmVjdAogICogICAgcGVyaW9kCiAgKiAgICByZXN5bmMKICAqICAgIHByb2MKICAqICAgIG5vZG1hCisgKiAgICBsZXZlbDIKKyAqICAgIGJ1cnN0CisgKiAgICBmYXN0CisgKiAgICBub3N5bmMKICAqLwogCiAJaWYgKGluKSB7CiAJCWJ1ZltsZW5dID0gJ1wwJzsKLQkJYnAgPSBidWY7CisJCWZvciAoYnAgPSBidWY7ICpicDsgKSB7CisJCQl3aGlsZSAoJywnID09ICpicCB8fCAnICcgPT0gKmJwKQorCQkJCSsrYnA7CiAJCWlmICghc3RybmNtcChicCwgImRlYnVnOiIsIDYpKSB7Ci0JCQlicCArPSA2OwotCQkJaGQtPmFyZ3MgPSBzaW1wbGVfc3RydG91bChicCwgTlVMTCwgMCkgJiBEQl9NQVNLOworCQkJCWhkLT5hcmdzID0gc2ltcGxlX3N0cnRvdWwoYnArNiwgJmJwLCAwKSAmIERCX01BU0s7CiAJCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnAsICJkaXNjb25uZWN0OiIsIDExKSkgewotCQkJYnAgKz0gMTE7Ci0JCQl4ID0gc2ltcGxlX3N0cnRvdWwoYnAsIE5VTEwsIDApOworCQkJCXggPSBzaW1wbGVfc3RydG91bChicCsxMSwgJmJwLCAwKTsKIAkJCWlmICh4IDwgRElTX05FVkVSIHx8IHggPiBESVNfQUxXQVlTKQogCQkJCXggPSBESVNfQURBUFRJVkU7CiAJCQloZC0+ZGlzY29ubmVjdCA9IHg7CiAJCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnAsICJwZXJpb2Q6IiwgNykpIHsKLQkJCWJwICs9IDc7Ci0JCQl4ID0gc2ltcGxlX3N0cnRvdWwoYnAsIE5VTEwsIDApOworCQkJeCA9IHNpbXBsZV9zdHJ0b3VsKGJwKzcsICZicCwgMCk7CiAJCQloZC0+ZGVmYXVsdF9zeF9wZXIgPQotCQkJICAgIHN4X3RhYmxlW3JvdW5kX3BlcmlvZCgodW5zaWduZWQgaW50KSB4KV0ucGVyaW9kX25zOworCQkJCWhkLT5zeF90YWJsZVtyb3VuZF9wZXJpb2QoKHVuc2lnbmVkIGludCkgeCwKKwkJCQkJCQkgIGhkLT5zeF90YWJsZSldLnBlcmlvZF9uczsKIAkJfSBlbHNlIGlmICghc3RybmNtcChicCwgInJlc3luYzoiLCA3KSkgewotCQkJYnAgKz0gNzsKLQkJCXggPSBzaW1wbGVfc3RydG91bChicCwgTlVMTCwgMCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQotCQkJCWlmICh4ICYgKDEgPDwgaSkpCi0JCQkJCWhkLT5zeW5jX3N0YXRbaV0gPSBTU19VTlNFVDsKKwkJCQlzZXRfcmVzeW5jKGhkLCAoaW50KXNpbXBsZV9zdHJ0b3VsKGJwKzcsICZicCwgMCkpOwogCQl9IGVsc2UgaWYgKCFzdHJuY21wKGJwLCAicHJvYzoiLCA1KSkgewotCQkJYnAgKz0gNTsKLQkJCWhkLT5wcm9jID0gc2ltcGxlX3N0cnRvdWwoYnAsIE5VTEwsIDApOworCQkJCWhkLT5wcm9jID0gc2ltcGxlX3N0cnRvdWwoYnArNSwgJmJwLCAwKTsKIAkJfSBlbHNlIGlmICghc3RybmNtcChicCwgIm5vZG1hOiIsIDYpKSB7Ci0JCQlicCArPSA2OwotCQkJaGQtPm5vX2RtYSA9IHNpbXBsZV9zdHJ0b3VsKGJwLCBOVUxMLCAwKTsKKwkJCQloZC0+bm9fZG1hID0gc2ltcGxlX3N0cnRvdWwoYnArNiwgJmJwLCAwKTsKIAkJfSBlbHNlIGlmICghc3RybmNtcChicCwgImxldmVsMjoiLCA3KSkgewotCQkJYnAgKz0gNzsKLQkJCWhkLT5sZXZlbDIgPSBzaW1wbGVfc3RydG91bChicCwgTlVMTCwgMCk7CisJCQkJaGQtPmxldmVsMiA9IHNpbXBsZV9zdHJ0b3VsKGJwKzcsICZicCwgMCk7CisJCQl9IGVsc2UgaWYgKCFzdHJuY21wKGJwLCAiYnVyc3Q6IiwgNikpIHsKKwkJCQloZC0+ZG1hX21vZGUgPQorCQkJCQlzaW1wbGVfc3RydG9sKGJwKzYsICZicCwgMCkgPyBDVFJMX0JVUlNUOkNUUkxfRE1BOworCQkJfSBlbHNlIGlmICghc3RybmNtcChicCwgImZhc3Q6IiwgNSkpIHsKKwkJCQl4ID0gISFzaW1wbGVfc3RydG9sKGJwKzUsICZicCwgMCk7CisJCQkJaWYgKHggIT0gaGQtPmZhc3QpCisJCQkJCXNldF9yZXN5bmMoaGQsIDB4ZmYpOworCQkJCWhkLT5mYXN0ID0geDsKKwkJCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnAsICJub3N5bmM6IiwgNykpIHsKKwkJCQl4ID0gc2ltcGxlX3N0cnRvdWwoYnArNywgJmJwLCAwKTsKKwkJCQlzZXRfcmVzeW5jKGhkLCB4IF4gaGQtPm5vX3N5bmMpOworCQkJCWhkLT5ub19zeW5jID0geDsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7IC8qIHVua25vd24ga2V5d29yZCxzeW50YXgtZXJyb3IsLi4uICovCisJCQl9CiAJCX0KIAkJcmV0dXJuIGxlbjsKIAl9CkBAIC0xOTc3LDggKzIxMzksOSBAQAogCQlzdHJjYXQoYnAsIHRidWYpOwogCX0KIAlpZiAoaGQtPnByb2MgJiBQUl9JTkZPKSB7Ci0JCXNwcmludGYodGJ1ZiwgIlxuY2xvY2tfZnJlcT0lMDJ4IG5vX3N5bmM9JTAyeCBub19kbWE9JWQiLAotCQkJaGQtPmNsb2NrX2ZyZXEsIGhkLT5ub19zeW5jLCBoZC0+bm9fZG1hKTsKKwkJc3ByaW50Zih0YnVmLCAiXG5jbG9ja19mcmVxPSUwMnggbm9fc3luYz0lMDJ4IG5vX2RtYT0lZCIKKwkJCSIgZG1hX21vZGU9JTAyeCBmYXN0PSVkIiwKKwkJCWhkLT5jbG9ja19mcmVxLCBoZC0+bm9fc3luYywgaGQtPm5vX2RtYSwgaGQtPmRtYV9tb2RlLCBoZC0+ZmFzdCk7CiAJCXN0cmNhdChicCwgdGJ1Zik7CiAJCXN0cmNhdChicCwgIlxuc3luY194ZmVyW10gPSAgICAgICAiKTsKIAkJZm9yICh4ID0gMDsgeCA8IDc7IHgrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuaCBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmgKaW5kZXggZWRjYjAzNi4uNjFmZmI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuaAorKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5oCkBAIC0xNTUsNiArMTU1LDkgQEAKICNkZWZpbmUgV0QzM0M5M19GU18xMl8xNSBPV05JRF9GU18xMgogI2RlZmluZSBXRDMzQzkzX0ZTXzE2XzIwIE9XTklEX0ZTXzE2CiAKKyAgIC8qIHBhc3MgaW5wdXQtY2xvY2sgZXhwbGljaXRlbHkuIGFjY2VwdGVkIG1oeiB2YWx1ZXMgYXJlIDgtMTAsMTItMjAgKi8KKyNkZWZpbmUgV0QzM0M5M19GU19NSFoobWh6KSAobWh6KQorCiAgICAvKiBDb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIENUUkxfSFNQICAgICAweDAxCiAjZGVmaW5lIENUUkxfSEEgICAgICAweDAyCkBAIC0yNTMsNiArMjU2LDkgQEAKICAgICB1Y2hhciAgICAgICAgICAgIHN5bmNfc3RhdFs4XTsgICAgIC8qIHN0YXR1cyBvZiBzeW5jIG5lZ290aWF0aW9uIHBlciB0YXJnZXQgKi8KICAgICB1Y2hhciAgICAgICAgICAgIG5vX3N5bmM7ICAgICAgICAgIC8qIGJpdG1hc2s6IGRvbid0IGRvIHN5bmMgb24gdGhlc2UgdGFyZ2V0cyAqLwogICAgIHVjaGFyICAgICAgICAgICAgbm9fZG1hOyAgICAgICAgICAgLyogc2V0IHRoaXMgZmxhZyB0byBkaXNhYmxlIERNQSAqLworICAgIHVjaGFyICAgICAgICAgICAgZG1hX21vZGU7ICAgICAgICAgLyogRE1BIEJ1cnN0IE1vZGUgb3IgU2luZ2xlIEJ5dGUgRE1BICovCisgICAgdWNoYXIgICAgICAgICAgICBmYXN0OyAgICAgICAgICAgICAvKiBzZXQgdGhpcyBmbGFnIHRvIGVuYWJsZSBGYXN0IFNDU0kgKi8KKyAgICBzdHJ1Y3Qgc3hfcGVyaW9kIHN4X3RhYmxlWzldOyAgICAgIC8qIHRyYW5zZmVyIHBlcmlvZHMgZm9yIGFjdHVhbCBEVEMtc2V0dGluZyAqLwogI2lmZGVmIFBST0NfSU5URVJGQUNFCiAgICAgdWNoYXIgICAgICAgICAgICBwcm9jOyAgICAgICAgICAgICAvKiBiaXRtYXNrOiB3aGF0J3MgaW4gcHJvYyBvdXRwdXQgKi8KICNpZmRlZiBQUk9DX1NUQVRJU1RJQ1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCA5OGVjODYxLi5jMTI5YTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC0xMTk2LDcgKzExOTYsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwLCBpbnQgKnN0YXR1cykKK3JlY2VpdmVfY2hhcnMoc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCwgdW5zaWduZWQgaW50ICpzdGF0dXMpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LmluZm8tPnR0eTsKIAl1bnNpZ25lZCBjaGFyIGNoLCBsc3IgPSAqc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggZThkZDcxZC4uYWQ5ZjMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC0yNjIsNyArMjYyLDggQEAKIAlzZWxlY3QgU0VSSUFMX0NPUkUKIAloZWxwCiAJICBUaGlzIHNlbGVjdHMgdGhlIEFSTShSKSBBTUJBKFIpIFByaW1lQ2VsbCBQTDAxMCBVQVJULiAgSWYgeW91IGhhdmUKLQkgIGFuIEludGVncmF0b3IvQVAgb3IgSW50ZWdyYXRvci9QUDIgcGxhdGZvcm0sIHNheSBZIG9yIE0gaGVyZS4KKwkgIGFuIEludGVncmF0b3IvQVAgb3IgSW50ZWdyYXRvci9QUDIgcGxhdGZvcm0sIG9yIGlmIHlvdSBoYXZlIGEKKwkgIENpcnJ1cyBMb2dpYyBFUDkzeHggQ1BVLCBzYXkgWSBvciBNIGhlcmUuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggZGY0NWE3YS4uOTM1ZjQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTMzLDEyICszMywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1lbF9wZGMuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvc2VyaWFsX2F0OTEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcGRjLmg+CisKICNpZmRlZiBDT05GSUdfQVJNCiAjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCmluZGV4IDc4N2E4ZjEuLmZhNDU1OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogaW50IF9faW5pdCBjcG1fdWFydF9pbml0X3BvcnRkZXNjKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0NQTV9TTUMxKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQ1BNX1NNQzIpCi0JdTMyIGFkZHI7CisJdTE2ICphZGRyOwogI2VuZGlmCiAJcHJfZGVidWcoIkNQTSB1YXJ0Wy1dOmluaXQgcG9ydGRlc2NcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCmluZGV4IGUyMTZkY2YuLjA0Y2M4OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lteC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIHsKIAlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmc3BvcnQtPnBvcnQuaW5mby0+eG1pdDsKIAotCWRvIHsKKwl3aGlsZSAoIShVVFMoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSAmIFVUU19UWEZVTEwpKSB7CiAJCS8qIHNlbmQgeG1pdC0+YnVmW3htaXQtPnRhaWxdCiAJCSAqIG91dCB0aGUgcG9ydCBoZXJlICovCiAJCVVSVFgwKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgPSB4bWl0LT5idWZbeG1pdC0+dGFpbF07CkBAIC0xNjMsNyArMTYzLDcgQEAKIAkJc3BvcnQtPnBvcnQuaWNvdW50LnR4Kys7CiAJCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCiAJCQlicmVhazsKLQl9IHdoaWxlICghKFVUUygodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpICYgVVRTX1RYRlVMTCkpOworCX0KIAogCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCiAJCWlteF9zdG9wX3R4KCZzcG9ydC0+cG9ydCk7CkBAIC0xNzgsOCArMTc4LDcgQEAKIAogCVVDUjEoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSB8PSBVQ1IxX1RYTVBUWUVOOwogCi0JaWYoVVRTKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgJiBVVFNfVFhFTVBUWSkKLQkJaW14X3RyYW5zbWl0X2J1ZmZlcihzcG9ydCk7CisJaW14X3RyYW5zbWl0X2J1ZmZlcihzcG9ydCk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbXhfcnRzaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTQwNCw3ICs0MDMsOCBAQAogCWlmIChyZXR2YWwpIGdvdG8gZXJyb3Jfb3V0MjsKIAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKHNwb3J0LT5ydHNpcnEsIGlteF9ydHNpbnQsCi0JCQkgICAgIElSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCSAgICAgKHNwb3J0LT5ydHNpcnEgPCBJTVhfSVJRUykgPyAwIDoKKwkJCSAgICAgICBJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCiAJCQkgICAgIERSSVZFUl9OQU1FLCBzcG9ydCk7CiAJaWYgKHJldHZhbCkgZ290byBlcnJvcl9vdXQzOwogCkBAIC02NzgsNyArNjc4LDcgQEAKIAkJLm1hcGJhc2UJPSBJTVhfVUFSVDFfQkFTRSwgLyogRklYTUUgKi8KIAkJLmlycQkJPSBVQVJUMV9NSU5UX1JYLAogCQkudWFydGNsawk9IDE2MDAwMDAwLAotCQkuZmlmb3NpemUJPSA4LAorCQkuZmlmb3NpemUJPSAzMiwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkub3BzCQk9ICZpbXhfcG9wcywKIAkJLmxpbmUJCT0gMCwKQEAgLTY5NCw3ICs2OTQsNyBAQAogCQkubWFwYmFzZQk9IElNWF9VQVJUMl9CQVNFLCAvKiBGSVhNRSAqLwogCQkuaXJxCQk9IFVBUlQyX01JTlRfUlgsCiAJCS51YXJ0Y2xrCT0gMTYwMDAwMDAsCi0JCS5maWZvc2l6ZQk9IDgsCisJCS5maWZvc2l6ZQk9IDMyLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS5vcHMJCT0gJmlteF9wb3BzLAogCQkubGluZQkJPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCA5NTViYmQ2Li44ZDI0Y2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtOTk1LDggKzk5NSwxMCBAQAogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgTlVMTCk7CiAKLQlpZiAocG9ydCkKKwlpZiAocG9ydCkgewogCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7CisJCWlycV9kaXNwb3NlX21hcHBpbmcocG9ydC0+aXJxKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKaW5kZXggYzJmMTAxMi4uNmI3NmJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKQEAgLTI0OCw2ICsyNDgsMTAgQEAKIAkJLm11bHRpCT0gMiwKIAl9LCB7CiAJCS5tYW5maWQJPSBNQU5GSURfUVVBVEVDSCwKKwkJLnByb2RpZAk9IFBST0RJRF9RVUFURUNIX0RVQUxfUlMyMzJfRywKKwkJLm11bHRpCT0gMiwKKwl9LCB7CisJCS5tYW5maWQJPSBNQU5GSURfUVVBVEVDSCwKIAkJLnByb2RpZAk9IFBST0RJRF9RVUFURUNIX1FVQURfUlMyMzIsCiAJCS5tdWx0aQk9IDQsCiAJfSwgewpAQCAtODkxLDYgKzg5NSw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIk9FTSAgICAgICIsICJDMjg4TVggICAgICIsIDB4YjU3MmQzNjAsIDB4ZDIzODViN2EpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJQQ01DSUEgICAiLCAiQzMzNk1YICAgICAiLCAweDk5YmNhZmU5LCAweGFhMjViY2FiKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiUXVhdGVjaCBJbmMiLCAiUENNQ0lBIER1YWwgUlMtMjMyIFNlcmlhbCBQb3J0IENhcmQiLCAweGM0NDIwYjM1LCAweDkyYWJjOTJmKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiUXVhdGVjaCBJbmMiLCAiRHVhbCBSUy0yMzIgU2VyaWFsIFBvcnQgUEMgQ2FyZCIsIDB4YzQ0MjBiMzUsIDB4MDMxYTM4MGQpLAogCVBDTUNJQV9QRkNfREVWSUNFX0NJU19QUk9EX0lEMTIoMSwgIlBDTUNJQSIsICJFTjIyMTgtTEFOL01PREVNIiwgMHgyODFmMWM1ZCwgMHg1NzBmMzQ4ZSwgIlBDTUxNMjguY2lzIiksCiAJUENNQ0lBX1BGQ19ERVZJQ0VfQ0lTX1BST0RfSUQxMigxLCAiUENNQ0lBIiwgIlVFMjIxOC1MQU4vTU9ERU0iLCAweDI4MWYxYzVkLCAweDZmZGNhY2VlLCAiUENNTE0yOC5jaXMiKSwKIAlQQ01DSUFfUEZDX0RFVklDRV9DSVNfUFJPRF9JRDEyKDEsICJQc2lvbiBEYWNvbSIsICJHb2xkIENhcmQgVjM0IEV0aGVybmV0IiwgMHhmNWYwMjVjMiwgMHgzMzhlODE1NSwgIlBDTUxNMjguY2lzIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYyBiL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCmluZGV4IGMyYTlmZWYuLjZmYTI2MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCkBAIC0yMyw2ICsyMywxMCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCisjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MQorI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgorI2VuZGlmCisKICNpbmNsdWRlICJhdG1lbF9zcGkuaCIKIAogLyoKQEAgLTQ5MSw3ICs0OTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhdG1lbF9zcGlfY2xlYW51cChjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIHZvaWQgYXRtZWxfc3BpX2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpZiAoc3BpLT5jb250cm9sbGVyX3N0YXRlKQogCQlncGlvX2ZyZWUoKHVuc2lnbmVkIGludClzcGktPmNvbnRyb2xsZXJfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKaW5kZXggMzY2YWY0OS4uOTZmNjJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAJcmV0dXJuIHV3aXJlX3NldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIHV3aXJlX2NsZWFudXAoY29uc3Qgc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyB2b2lkIHV3aXJlX2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlrZnJlZShzcGktPmNvbnRyb2xsZXJfc3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2lteC5jIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCmluZGV4IDZjY2Y4YTEuLjUxZGFhMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfaW14LmMKQEAgLTEzNjEsMTAgKzEzNjEsOSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXAoY29uc3Qgc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyB2b2lkIGNsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwID0gc3BpX2dldF9jdGxkYXRhKChzdHJ1Y3Qgc3BpX2RldmljZSAqKXNwaSk7Ci0Ja2ZyZWUoY2hpcCk7CisJa2ZyZWUoc3BpX2dldF9jdGxkYXRhKHNwaSkpOwogfQogCiBzdGF0aWMgaW50IGluaXRfcXVldWUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4X2dwaW8uYyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4X2dwaW8uYwppbmRleCBlZGE1M2VkLi42MTFhYzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9ncGlvLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZ3Bpby5jCkBAIC03Myw2ICs3MywxOSBAQAogCXJldHVybiBiaXRiYW5nX3R4cnhfYmVfY3BoYTEoc3BpLCBuc2VjcywgMCwgd29yZCwgYml0cyk7CiB9CiAKK3N0YXRpYyB1MzIgczNjMjQxMF9zcGlncGlvX3R4cnhfbW9kZTIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQkgICAgICB1bnNpZ25lZCBuc2VjcywgdTMyIHdvcmQsIHU4IGJpdHMpCit7CisJcmV0dXJuIGJpdGJhbmdfdHhyeF9iZV9jcGhhMChzcGksIG5zZWNzLCAxLCB3b3JkLCBiaXRzKTsKK30KKworc3RhdGljIHUzMiBzM2MyNDEwX3NwaWdwaW9fdHhyeF9tb2RlMyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSAgICAgIHVuc2lnbmVkIG5zZWNzLCB1MzIgd29yZCwgdTggYml0cykKK3sKKwlyZXR1cm4gYml0YmFuZ190eHJ4X2JlX2NwaGExKHNwaSwgbnNlY3MsIDEsIHdvcmQsIGJpdHMpOworfQorCisKIHN0YXRpYyB2b2lkIHMzYzI0MTBfc3BpZ3Bpb19jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpkZXYsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgczNjMjQxMF9zcGlncGlvICpzZyA9IHNwaWRldl90b19zZyhkZXYpOwpAQCAtMTA4LDYgKzEyMSw4IEBACiAKIAlzcC0+Yml0YmFuZy50eHJ4X3dvcmRbU1BJX01PREVfMF0gPSBzM2MyNDEwX3NwaWdwaW9fdHhyeF9tb2RlMDsKIAlzcC0+Yml0YmFuZy50eHJ4X3dvcmRbU1BJX01PREVfMV0gPSBzM2MyNDEwX3NwaWdwaW9fdHhyeF9tb2RlMTsKKwlzcC0+Yml0YmFuZy50eHJ4X3dvcmRbU1BJX01PREVfMl0gPSBzM2MyNDEwX3NwaWdwaW9fdHhyeF9tb2RlMjsKKwlzcC0+Yml0YmFuZy50eHJ4X3dvcmRbU1BJX01PREVfM10gPSBzM2MyNDEwX3NwaWdwaW9fdHhyeF9tb2RlMzsKIAogCS8qIHNldCBzdGF0ZSBvZiBzcGkgcGlucyAqLwogCXMzYzI0MTBfZ3Bpb19zZXRwaW4oc3AtPmluZm8tPnBpbl9jbGssIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQppbmRleCA4MjViZjg4Li44YjdmZjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpAQCAtNTEsNiArNTEsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9BRFVUVVgpCSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX0FQUExFRElTUExBWSkJKz0gbWlzYy8KIG9iai0kKENPTkZJR19VU0JfQVVFUlNXQUxEKQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UpCSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzKSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX0NZVEhFUk0pCSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX0VNSTI2KQkJKz0gbWlzYy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMgYi9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCmluZGV4IGRhZTRlZjEuLjQ5NzNlMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKKysrIGIvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCA5ODE5OTYyLi5kMzhhMjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC0zMjYsMTAgKzMyNiwxNiBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBhY20tPnR0eTsKIAlzdHJ1Y3QgYWNtX3J1ICpyY3Y7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSA9IDA7CisJdW5zaWduZWQgY2hhciB0aHJvdHRsZWQ7CiAJZGJnKCJFbnRlcmluZyBhY21fcnhfdGFza2xldCIpOwogCi0JaWYgKCFBQ01fUkVBRFkoYWNtKSB8fCBhY20tPnRocm90dGxlKQorCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmYWNtLT50aHJvdHRsZV9sb2NrKTsKKwl0aHJvdHRsZWQgPSBhY20tPnRocm90dGxlOworCXNwaW5fdW5sb2NrKCZhY20tPnRocm90dGxlX2xvY2spOworCWlmICh0aHJvdHRsZWQpCiAJCXJldHVybjsKIAogbmV4dF9idWZmZXI6CkBAIC0zNDYsMjIgKzM1MiwyMCBAQAogCWRiZygiYWNtX3J4X3Rhc2tsZXQ6IHByb2Nlc2luZyBidWYgMHglcCwgc2l6ZSA9ICVkIiwgYnVmLCBidWYtPnNpemUpOwogCiAJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBidWYtPnNpemUpOwotCWlmICghYWNtLT50aHJvdHRsZSkKKwlzcGluX2xvY2soJmFjbS0+dGhyb3R0bGVfbG9jayk7CisJdGhyb3R0bGVkID0gYWNtLT50aHJvdHRsZTsKKwlzcGluX3VubG9jaygmYWNtLT50aHJvdHRsZV9sb2NrKTsKKwlpZiAoIXRocm90dGxlZCkKIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGJ1Zi0+YmFzZSwgYnVmLT5zaXplKTsKIAl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCi0Jc3Bpbl9sb2NrKCZhY20tPnRocm90dGxlX2xvY2spOwotCWlmIChhY20tPnRocm90dGxlKSB7Ci0JCWRiZygiVGhyb3R0ZWxpbmcgbm90aWNlZCIpOwotCQltZW1tb3ZlKGJ1Zi0+YmFzZSwgYnVmLT5iYXNlICsgaSwgYnVmLT5zaXplIC0gaSk7Ci0JCWJ1Zi0+c2l6ZSAtPSBpOwotCQlzcGluX3VubG9jaygmYWNtLT50aHJvdHRsZV9sb2NrKTsKKwlpZiAodGhyb3R0bGVkKSB7CisJCWRiZygiVGhyb3R0bGluZyBub3RpY2VkIik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2FkZCgmYnVmLT5saXN0LCAmYWNtLT5maWxsZWRfcmVhZF9idWZzKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KLQlzcGluX3VubG9jaygmYWNtLT50aHJvdHRsZV9sb2NrKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkKCZidWYtPmxpc3QsICZhY20tPnNwYXJlX3JlYWRfYnVmcyk7CkBAIC00NjcsNyArNDcxLDggQEAKIAkJZ290byBiYWlsX291dDsKIAl9CiAKLQlpZiAoMCA+IGFjbV9zZXRfY29udHJvbChhY20sIGFjbS0+Y3RybG91dCA9IEFDTV9DVFJMX0RUUiB8IEFDTV9DVFJMX1JUUykpCisJaWYgKDAgPiBhY21fc2V0X2NvbnRyb2woYWNtLCBhY20tPmN0cmxvdXQgPSBBQ01fQ1RSTF9EVFIgfCBBQ01fQ1RSTF9SVFMpICYmCisJICAgIChhY20tPmN0cmxfY2FwcyAmIFVTQl9DRENfQ0FQX0xJTkUpKQogCQlnb3RvIGZ1bGxfYmFpbG91dDsKIAogCUlOSVRfTElTVF9IRUFEKCZhY20tPnNwYXJlX3JlYWRfdXJicyk7CkBAIC00ODAsNiArNDg1LDggQEAKIAkJbGlzdF9hZGQoJihhY20tPnJiW2ldLmxpc3QpLCAmYWNtLT5zcGFyZV9yZWFkX2J1ZnMpOwogCX0KIAorCWFjbS0+dGhyb3R0bGUgPSAwOworCiAJdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CiAKIGRvbmU6CkBAIC0xMDkyLDYgKzEwOTksMTAgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweDE2MTEpLCAvKiBaeURBUyA1NksgVVNCIE1PREVNIC0gbmV3IHZlcnNpb24gKi8KIAkuZHJpdmVyX2luZm8gPSBTSU5HTEVfUlhfVVJCLCAvKiBmaXJtd2FyZSBidWcgKi8KIAl9LAorCXsgVVNCX0RFVklDRSgweDIyYjgsIDB4NzAwMCksIC8qIE1vdG9yb2xhIFEgUGhvbmUgKi8KKwkuZHJpdmVyX2luZm8gPSBOT19VTklPTl9OT1JNQUwsIC8qIGhhcyBubyB1bmlvbiBkZXNjcmlwdG9yICovCisJfSwKKwogCS8qIGNvbnRyb2wgaW50ZXJmYWNlcyB3aXRoIHZhcmlvdXMgQVQtY29tbWFuZCBzZXRzICovCiAJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0NPTU0sIFVTQl9DRENfU1VCQ0xBU1NfQUNNLAogCQlVU0JfQ0RDX0FDTV9QUk9UT19BVF9WMjVURVIpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCmluZGV4IGE0N2MzMGIuLmFlZmM3OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCkBAIC02MDQsMTAgKzYwNCw2IEBACiAJbG9ja19rZXJuZWwoKTsKIAlpZiAoIXN0KSB7CiAJCXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2Vfc3RhdHVzKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc3QpIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCXJldHVybiBQT0xMSU47Ci0JCX0KIAogCQkvKiB3ZSBtYXkgaGF2ZSBkcm9wcGVkIEJLTCAtIG5lZWQgdG8gY2hlY2sgZm9yIGhhdmluZyBsb3N0IHRoZSByYWNlICovCiAJCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpIHsKQEAgLTYxNSw2ICs2MTEsMTEgQEAKIAkJCXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQkJZ290byBsb3N0X3JhY2U7CiAJCX0KKwkJLyogd2UgaGF2ZW4ndCBsb3N0IC0gY2hlY2sgZm9yIGFsbG9jYXRpb24gZmFpbHVyZSBub3cgKi8KKwkJaWYgKCFzdCkgeworCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJcmV0dXJuIFBPTExJTjsKKwkJfQogCiAJCS8qCiAJCSAqIG5lZWQgdG8gcHJldmVudCB0aGUgbW9kdWxlIGZyb20gYmVpbmcgdW5sb2FkZWQsIHNpbmNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKaW5kZXggMjA4Nzc2Ni4uMjc0ZjE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpAQCAtODU3LDExICs4NTcsMTEgQEAKIAogc3RhdGljIGludCBwcm9jX3NldGNvbmZpZyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKIHsKLQl1bnNpZ25lZCBpbnQgdTsKKwlpbnQgdTsKIAlpbnQgc3RhdHVzID0gMDsKICAJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYWN0Y29uZmlnOwogCi0JaWYgKGdldF91c2VyKHUsICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKSkKKwlpZiAoZ2V0X3VzZXIodSwgKGludCBfX3VzZXIgKilhcmcpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogIAlhY3Rjb25maWcgPSBwcy0+ZGV2LT5hY3Rjb25maWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwppbmRleCA2MDBkMWJjLi4yYWRlZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKQEAgLTc0Myw2ICs3NDMsNyBAQAogICogdXNiX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgVVNCIGludGVyZmFjZSBkcml2ZXIKICAqIEBuZXdfZHJpdmVyOiBVU0Igb3BlcmF0aW9ucyBmb3IgdGhlIGludGVyZmFjZSBkcml2ZXIKICAqIEBvd25lcjogbW9kdWxlIG93bmVyIG9mIHRoaXMgZHJpdmVyLgorICogQG1vZF9uYW1lOiBtb2R1bGUgbmFtZSBzdHJpbmcKICAqCiAgKiBSZWdpc3RlcnMgYSBVU0IgaW50ZXJmYWNlIGRyaXZlciB3aXRoIHRoZSBVU0IgY29yZS4gIFRoZSBsaXN0IG9mCiAgKiB1bmF0dGFjaGVkIGludGVyZmFjZXMgd2lsbCBiZSByZXNjYW5uZWQgd2hlbmV2ZXIgYSBuZXcgZHJpdmVyIGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggNWU2MjhhZS4uZTBlYzcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJa3JlZl9pbml0KCZlcF9jbGFzcy0+a3JlZik7CiAJZXBfY2xhc3MtPmNsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAidXNiX2VuZHBvaW50Iik7CiAJaWYgKElTX0VSUihlcF9jbGFzcy0+Y2xhc3MpKSB7Ci0JCXJlc3VsdCA9IElTX0VSUihlcF9jbGFzcy0+Y2xhc3MpOworCQlyZXN1bHQgPSBQVFJfRVJSKGVwX2NsYXNzLT5jbGFzcyk7CiAJCWdvdG8gY2xhc3NfY3JlYXRlX2Vycm9yOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2dlbmVyaWMuYwppbmRleCBiNTMxYTRmLi45YmJjYjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2dlbmVyaWMuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJLyogaWYgdGhpcyBpcyBvbmx5IGFuIHVuYmluZCwgbm90IGEgcGh5c2ljYWwgZGlzY29ubmVjdCwgdGhlbgogCSAqIHVuY29uZmlndXJlIHRoZSBkZXZpY2UgKi8KIAlpZiAodWRldi0+YWN0Y29uZmlnKQotCQl1c2Jfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgMCk7CisJCXVzYl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCAtMSk7CiAKIAl1c2JfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyh1ZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDU5MGVjODIuLjUwYzBkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtNDQsNiArNDQsNyBAQAogCQlzdHJ1Y3QgdXNiX2h1Yl9zdGF0dXMJaHViOwogCQlzdHJ1Y3QgdXNiX3BvcnRfc3RhdHVzCXBvcnQ7CiAJfQkJCSpzdGF0dXM7CS8qIGJ1ZmZlciBmb3Igc3RhdHVzIHJlcG9ydHMgKi8KKwlzdHJ1Y3QgbXV0ZXgJCXN0YXR1c19tdXRleDsJLyogZm9yIHRoZSBzdGF0dXMgYnVmZmVyICovCiAKIAlpbnQJCQllcnJvcjsJCS8qIGxhc3QgcmVwb3J0ZWQgZXJyb3IgKi8KIAlpbnQJCQluZXJyb3JzOwkvKiB0cmFjayBjb25zZWN1dGl2ZSBlcnJvcnMgKi8KQEAgLTUzNSw2ICs1MzYsNyBAQAogewogCWludCByZXQ7CiAKKwltdXRleF9sb2NrKCZodWItPnN0YXR1c19tdXRleCk7CiAJcmV0ID0gZ2V0X2h1Yl9zdGF0dXMoaHViLT5oZGV2LCAmaHViLT5zdGF0dXMtPmh1Yik7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIgKGh1Yi0+aW50ZmRldiwKQEAgLTU0NCw2ICs1NDYsNyBAQAogCQkqY2hhbmdlID0gbGUxNl90b19jcHUoaHViLT5zdGF0dXMtPmh1Yi53SHViQ2hhbmdlKTsgCiAJCXJldCA9IDA7CiAJfQorCW11dGV4X3VubG9jaygmaHViLT5zdGF0dXNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYxNyw2ICs2MjAsNyBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQorCW11dGV4X2luaXQoJmh1Yi0+c3RhdHVzX211dGV4KTsKIAogCWh1Yi0+ZGVzY3JpcHRvciA9IGttYWxsb2Moc2l6ZW9mKCpodWItPmRlc2NyaXB0b3IpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWh1Yi0+ZGVzY3JpcHRvcikgewpAQCAtMTM5Niw2ICsxNDAwLDcgQEAKIHsKIAlpbnQgcmV0OwogCisJbXV0ZXhfbG9jaygmaHViLT5zdGF0dXNfbXV0ZXgpOwogCXJldCA9IGdldF9wb3J0X3N0YXR1cyhodWItPmhkZXYsIHBvcnQxLCAmaHViLT5zdGF0dXMtPnBvcnQpOwogCWlmIChyZXQgPCA0KSB7CiAJCWRldl9lcnIgKGh1Yi0+aW50ZmRldiwKQEAgLTE0MDcsNiArMTQxMiw3IEBACiAJCSpjaGFuZ2UgPSBsZTE2X3RvX2NwdShodWItPnN0YXR1cy0+cG9ydC53UG9ydENoYW5nZSk7IAogCQlyZXQgPSAwOwogCX0KKwltdXRleF91bmxvY2soJmh1Yi0+c3RhdHVzX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTA0LDYgKzE5MTAsNyBAQAogCXN0cnVjdCB1c2JfaHViCQkqaHViID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CiAJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXYgPSBodWItPmhkZXY7CiAJdW5zaWduZWQJCXBvcnQxOworCWludAkJCXN0YXR1cyA9IDA7CiAKIAkvKiBmYWlsIGlmIGNoaWxkcmVuIGFyZW4ndCBhbHJlYWR5IHN1c3BlbmRlZCAqLwogCWZvciAocG9ydDEgPSAxOyBwb3J0MSA8PSBoZGV2LT5tYXhjaGlsZDsgcG9ydDErKykgewpAQCAtMTkyNywyNCArMTkzNCwxOCBAQAogCiAJZGV2X2RiZygmaW50Zi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQkvKiAiZ2xvYmFsIHN1c3BlbmQiIG9mIHRoZSBkb3duc3RyZWFtIEhDLXRvLVVTQiBpbnRlcmZhY2UgKi8KLQlpZiAoIWhkZXYtPnBhcmVudCkgewotCQlzdHJ1Y3QgdXNiX2J1cwkqYnVzID0gaGRldi0+YnVzOwotCQlpZiAoYnVzKSB7Ci0JCQlpbnQJc3RhdHVzID0gaGNkX2J1c19zdXNwZW5kIChidXMpOwotCi0JCQlpZiAoc3RhdHVzICE9IDApIHsKLQkJCQlkZXZfZGJnKCZoZGV2LT5kZXYsICInZ2xvYmFsJyBzdXNwZW5kICVkXG4iLAotCQkJCQlzdGF0dXMpOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQogCS8qIHN0b3Aga2h1YmQgYW5kIHJlbGF0ZWQgYWN0aXZpdHkgKi8KIAlodWJfcXVpZXNjZShodWIpOwotCXJldHVybiAwOworCisJLyogImdsb2JhbCBzdXNwZW5kIiBvZiB0aGUgZG93bnN0cmVhbSBIQy10by1VU0IgaW50ZXJmYWNlICovCisJaWYgKCFoZGV2LT5wYXJlbnQpIHsKKwkJc3RhdHVzID0gaGNkX2J1c19zdXNwZW5kKGhkZXYtPmJ1cyk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJZGV2X2RiZygmaGRldi0+ZGV2LCAiJ2dsb2JhbCcgc3VzcGVuZCAlZFxuIiwgc3RhdHVzKTsKKwkJCWh1Yl9hY3RpdmF0ZShodWIpOworCQl9CisJfQorCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgaHViX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggOGFjYTM1Ny4uNzRlZGFlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTEzMTYsNiArMTMxNiwxNCBAQAogICogdXNlIHRoaXMga2luZCBvZiBjb25maWd1cmFiaWxpdHk7IG1hbnkgZGV2aWNlcyBvbmx5IGhhdmUgb25lCiAgKiBjb25maWd1cmF0aW9uLgogICoKKyAqIEBjb25maWd1cmF0aW9uIGlzIHRoZSB2YWx1ZSBvZiB0aGUgY29uZmlndXJhdGlvbiB0byBiZSBpbnN0YWxsZWQuCisgKiBBY2NvcmRpbmcgdG8gdGhlIFVTQiBzcGVjIChlLmcuIHNlY3Rpb24gOS4xLjEuNSksIGNvbmZpZ3VyYXRpb24gdmFsdWVzCisgKiBtdXN0IGJlIG5vbi16ZXJvOyBhIHZhbHVlIG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSBpbgorICogdW5jb25maWd1cmVkLiAgSG93ZXZlciBzb21lIGRldmljZXMgZXJyb25lb3VzbHkgdXNlIDAgYXMgb25lIG9mIHRoZWlyCisgKiBjb25maWd1cmF0aW9uIHZhbHVlcy4gIFRvIGhlbHAgbWFuYWdlIHN1Y2ggZGV2aWNlcywgdGhpcyByb3V0aW5lIHdpbGwKKyAqIGFjY2VwdCBAY29uZmlndXJhdGlvbiA9IC0xIGFzIGluZGljYXRpbmcgdGhlIGRldmljZSBzaG91bGQgYmUgcHV0IGluCisgKiBhbiB1bmNvbmZpZ3VyZWQgc3RhdGUuCisgKgogICogVVNCIGRldmljZSBjb25maWd1cmF0aW9ucyBtYXkgYWZmZWN0IExpbnV4IGludGVyb3BlcmFiaWxpdHksCiAgKiBwb3dlciBjb25zdW1wdGlvbiBhbmQgdGhlIGZ1bmN0aW9uYWxpdHkgYXZhaWxhYmxlLiAgRm9yIGV4YW1wbGUsCiAgKiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGxpbWl0ZWQgdG8gdXNpbmcgMTAwbUEgb2YgYnVzIHBvd2VyLApAQCAtMTM0NywxMCArMTM1NSwxNSBAQAogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICoqbmV3X2ludGVyZmFjZXMgPSBOVUxMOwogCWludCBuLCBuaW50ZjsKIAotCWZvciAoaSA9IDA7IGkgPCBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpKyspIHsKLQkJaWYgKGRldi0+Y29uZmlnW2ldLmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9PSBjb25maWd1cmF0aW9uKSB7Ci0JCQljcCA9ICZkZXYtPmNvbmZpZ1tpXTsKLQkJCWJyZWFrOworCWlmIChjb25maWd1cmF0aW9uID09IC0xKQorCQljb25maWd1cmF0aW9uID0gMDsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7IGkrKykgeworCQkJaWYgKGRldi0+Y29uZmlnW2ldLmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9PQorCQkJCQljb25maWd1cmF0aW9uKSB7CisJCQkJY3AgPSAmZGV2LT5jb25maWdbaV07CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAl9CiAJaWYgKCghY3AgJiYgY29uZmlndXJhdGlvbiAhPSAwKSkKQEAgLTEzNTksNiArMTM3Miw3IEBACiAJLyogVGhlIFVTQiBzcGVjIHNheXMgY29uZmlndXJhdGlvbiAwIG1lYW5zIHVuY29uZmlndXJlZC4KIAkgKiBCdXQgaWYgYSBkZXZpY2UgaW5jbHVkZXMgYSBjb25maWd1cmF0aW9uIG51bWJlcmVkIDAsCiAJICogd2Ugd2lsbCBhY2NlcHQgaXQgYXMgYSBjb3JyZWN0bHkgY29uZmlndXJlZCBzdGF0ZS4KKwkgKiBVc2UgLTEgaWYgeW91IHJlYWxseSB3YW50IHRvIHVuY29uZmlndXJlIHRoZSBkZXZpY2UuCiAJICovCiAJaWYgKGNwICYmIGNvbmZpZ3VyYXRpb24gPT0gMCkKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiY29uZmlnIDAgZGVzY3JpcHRvcj8/XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oIGIvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKaW5kZXggNjI3YTVhMi4uN2YzMWE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKKysrIGIvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKQEAgLTMxLDcgKzMxLDcgQEAKIHsgVVNCX0RFVklDRV9JTkZPKDcsIDEsIDMpIH0sCiAjZW5kaWYKIAotI2lmZGVmCUNPTkZJR19VU0JfQ0RDRVRIRVIKKyNpZmRlZglDT05GSUdfVVNCX05FVF9DRENFVEhFUgogLyogTGludXgtVVNCIENEQyBFdGhlcm5ldCBnYWRnZXQgKi8KIHsgVVNCX0RFVklDRSgweDA1MjUsIDB4YTRhMSksIH0sCiAvKiBMaW51eC1VU0IgQ0RDIEV0aGVybmV0ICsgUk5ESVMgZ2FkZ2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKaW5kZXggNGVhYTBlZS4uMGVkZmJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwpAQCAtNjMsNyArNjMsNyBAQAogCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOwogCWludAkJCWNvbmZpZywgdmFsdWU7CiAKLQlpZiAoc3NjYW5mKGJ1ZiwgIiV1IiwgJmNvbmZpZykgIT0gMSB8fCBjb25maWcgPiAyNTUpCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZjb25maWcpICE9IDEgfHwgY29uZmlnIDwgLTEgfHwgY29uZmlnID4gMjU1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl1c2JfbG9ja19kZXZpY2UodWRldik7CiAJdmFsdWUgPSB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgY29uZmlnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKaW5kZXggMzZiMzZlMC4uYTQ2Nzc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKQEAgLTc4NCw3ICs3ODQsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBhdDkxX2VwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VwX29wcyBhdDkxX2VwX29wcyA9IHsKIAkuZW5hYmxlCQk9IGF0OTFfZXBfZW5hYmxlLAogCS5kaXNhYmxlCT0gYXQ5MV9lcF9kaXNhYmxlLAogCS5hbGxvY19yZXF1ZXN0CT0gYXQ5MV9lcF9hbGxvY19yZXF1ZXN0LApAQCAtOTEyLDcgKzkxMiw3IEBACiAJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfVFhWQywgMCk7CiAJCWlmIChjcHVfaXNfYXQ5MXJtOTIwMCgpKQogCQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZSh1ZGMtPmJvYXJkLnB1bGx1cF9waW4sIDEpOwotCQllbHNlIGlmIChjcHVfaXNfYXQ5MXNhbTkyNjAoKSkgeworCQllbHNlIGlmIChjcHVfaXNfYXQ5MXNhbTkyNjAoKSB8fCBjcHVfaXNfYXQ5MXNhbTkyNjMoKSkgewogCQkJdTMyCXR4dmMgPSBhdDkxX3VkcF9yZWFkKHVkYywgQVQ5MV9VRFBfVFhWQyk7CiAKIAkJCXR4dmMgfD0gQVQ5MV9VRFBfVFhWQ19QVU9OOwpAQCAtOTI5LDcgKzkyOSw3IEBACiAJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfVFhWQywgQVQ5MV9VRFBfVFhWQ19UWFZESVMpOwogCQlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkKIAkJCWF0OTFfc2V0X2dwaW9fdmFsdWUodWRjLT5ib2FyZC5wdWxsdXBfcGluLCAwKTsKLQkJZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYwKCkpIHsKKwkJZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYwKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkpIHsKIAkJCXUzMgl0eHZjID0gYXQ5MV91ZHBfcmVhZCh1ZGMsIEFUOTFfVURQX1RYVkMpOwogCiAJCQl0eHZjICY9IH5BVDkxX1VEUF9UWFZDX1BVT047CkBAIC0xNjUxLDcgKzE2NTEsNyBAQAogCXB1bGx1cChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpLCAwKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgYXQ5MXVkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2luaXQgYXQ5MXVkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UJKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IGF0OTFfdWRjCSp1ZGM7CkBAIC0xNzYyLDcgKzE3NjIsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGF0OTF1ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBhdDkxdWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBhdDkxX3VkYyAqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC0xODM2LDggKzE4MzYsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0OTFfdWRjID0gewotCS5wcm9iZQkJPSBhdDkxdWRjX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYXQ5MXVkY19yZW1vdmUpLAorCS5yZW1vdmUJCT0gX19leGl0X3AoYXQ5MXVkY19yZW1vdmUpLAogCS5zaHV0ZG93bgk9IGF0OTF1ZGNfc2h1dGRvd24sCiAJLnN1c3BlbmQJPSBhdDkxdWRjX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBhdDkxdWRjX3Jlc3VtZSwKQEAgLTE4NDcsMTMgKzE4NDYsMTMgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgdWRjX2luaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB1ZGNfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdDkxX3VkYyk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYXQ5MV91ZGMsIGF0OTF1ZGNfcHJvYmUpOwogfQogbW9kdWxlX2luaXQodWRjX2luaXRfbW9kdWxlKTsKIAotc3RhdGljIHZvaWQgX19kZXZleGl0IHVkY19leGl0X21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHVkY19leGl0X21vZHVsZSh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdDkxX3VkYyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwppbmRleCAyNzkwNGE1Li5mMDE4OTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCXN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbwkJKm1hY2ggPSB0aGVfY29udHJvbGxlci0+bWFjaDsKIAogCWlmIChtYWNoLT5ncGlvX3ZidXMpCi0JCXJldHVybiBweGFfZ3Bpb19nZXQobWFjaC0+Z3Bpb192YnVzKTsKKwkJcmV0dXJuIHVkY19ncGlvX2dldChtYWNoLT5ncGlvX3ZidXMpOwogCWlmIChtYWNoLT51ZGNfaXNfY29ubmVjdGVkKQogCQlyZXR1cm4gbWFjaC0+dWRjX2lzX2Nvbm5lY3RlZCgpOwogCXJldHVybiAxOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvCQkqbWFjaCA9IHRoZV9jb250cm9sbGVyLT5tYWNoOwogCiAJaWYgKG1hY2gtPmdwaW9fcHVsbHVwKQotCQlweGFfZ3Bpb19zZXQobWFjaC0+Z3Bpb19wdWxsdXAsIDApOworCQl1ZGNfZ3Bpb19zZXQobWFjaC0+Z3Bpb19wdWxsdXAsIDApOwogCWVsc2UgaWYgKG1hY2gtPnVkY19jb21tYW5kKQogCQltYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9ESVNDT05ORUNUKTsKIH0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbwkJKm1hY2ggPSB0aGVfY29udHJvbGxlci0+bWFjaDsKIAogCWlmIChtYWNoLT5ncGlvX3B1bGx1cCkKLQkJcHhhX2dwaW9fc2V0KG1hY2gtPmdwaW9fcHVsbHVwLCAxKTsKKwkJdWRjX2dwaW9fc2V0KG1hY2gtPmdwaW9fcHVsbHVwLCAxKTsKIAllbHNlIGlmIChtYWNoLT51ZGNfY29tbWFuZCkKIAkJbWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfQ09OTkVDVCk7CiB9CkBAIC0xNzU1LDcgKzE3NTUsNyBAQAogc3RhdGljIGlycXJldHVybl90IHVkY192YnVzX2lycShpbnQgaXJxLCB2b2lkICpfZGV2KQogewogCXN0cnVjdCBweGEyeHhfdWRjCSpkZXYgPSBfZGV2OwotCWludAkJCXZidXMgPSBweGFfZ3Bpb19nZXQoZGV2LT5tYWNoLT5ncGlvX3ZidXMpOworCWludAkJCXZidXMgPSB1ZGNfZ3Bpb19nZXQoZGV2LT5tYWNoLT5ncGlvX3ZidXMpOwogCiAJcHhhMnh4X3VkY192YnVzX3Nlc3Npb24oJmRldi0+Z2FkZ2V0LCB2YnVzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0yNTQ1LDE1ICsyNTQ1LDEzIEBACiAJZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCWRldi0+bWFjaCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmIChkZXYtPm1hY2gtPmdwaW9fdmJ1cykgewotCQl2YnVzX2lycSA9IElSUV9HUElPKGRldi0+bWFjaC0+Z3Bpb192YnVzICYgR1BJT19NRF9NQVNLX05SKTsKLQkJcHhhX2dwaW9fbW9kZSgoZGV2LT5tYWNoLT5ncGlvX3ZidXMgJiBHUElPX01EX01BU0tfTlIpCi0JCQkJfCBHUElPX0lOKTsKKwkJdWRjX2dwaW9faW5pdF92YnVzKGRldi0+bWFjaC0+Z3Bpb192YnVzKTsKKwkJdmJ1c19pcnEgPSB1ZGNfZ3Bpb190b19pcnEoZGV2LT5tYWNoLT5ncGlvX3ZidXMpOwogCQlzZXRfaXJxX3R5cGUodmJ1c19pcnEsIElSUVRfQk9USEVER0UpOwogCX0gZWxzZQogCQl2YnVzX2lycSA9IDA7CiAJaWYgKGRldi0+bWFjaC0+Z3Bpb19wdWxsdXApCi0JCXB4YV9ncGlvX21vZGUoKGRldi0+bWFjaC0+Z3Bpb19wdWxsdXAgJiBHUElPX01EX01BU0tfTlIpCi0JCQkJfCBHUElPX09VVCB8IEdQSU9fREZMVF9MT1cpOworCQl1ZGNfZ3Bpb19pbml0X3B1bGx1cChkZXYtPm1hY2gtPmdwaW9fcHVsbHVwKTsKIAogCWluaXRfdGltZXIoJmRldi0+dGltZXIpOwogCWRldi0+dGltZXIuZnVuY3Rpb24gPSB1ZGNfd2F0Y2hkb2c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaAppbmRleCA4ZTU5OGM4Li43NzNlNTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmgKQEAgLTE3NywyMSArMTc3LDYgQEAKIAogc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjICp0aGVfY29udHJvbGxlcjsKIAotc3RhdGljIGlubGluZSBpbnQgcHhhX2dwaW9fZ2V0KHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIChHUExSKGdwaW8pICYgR1BJT19iaXQoZ3BpbykpICE9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBweGFfZ3Bpb19zZXQodW5zaWduZWQgZ3BpbywgaW50IGlzX29uKQotewotCWludCBtYXNrID0gR1BJT19iaXQoZ3Bpbyk7Ci0KLQlpZiAoaXNfb24pCi0JCUdQU1IoZ3BpbykgPSBtYXNrOwotCWVsc2UKLQkJR1BDUihncGlvKSA9IG1hc2s7Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKaW5kZXggZTZjMTlhYS4uZTU1MjY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwpAQCAtMTY5OSw2ICsxNjk5LDcgQEAKIAkJCW1lbWNweSgmcG9ydC0+cG9ydF9saW5lX2NvZGluZywgcmVxLT5idWYsIHJldCk7CiAJCQlzcGluX3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKIAkJfQorCQlyZXQgPSAwOwogCQlicmVhazsKIAogCWNhc2UgVVNCX0NEQ19SRVFfR0VUX0xJTkVfQ09ESU5HOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCmluZGV4IDI0NmFmZWEuLjQzZWRkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCiAjZWxzZQogCi0vKiB0cm91Ymxlc2hvb3RpbmcgaGVscDogZXhwb3NlIHN0YXRlIGluIGRyaXZlcmZzICovCisvKiB0cm91Ymxlc2hvb3RpbmcgaGVscDogZXhwb3NlIHN0YXRlIGluIHN5c2ZzICovCiAKICNkZWZpbmUgc3BlZWRfY2hhcihpbmZvMSkgKHsgY2hhciB0bXA7IFwKIAkJc3dpdGNoIChpbmZvMSAmICgzIDw8IDEyKSkgeyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggMTg1NzIxZC4uYTc0MDU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtNDIsNiArNDIsOSBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2lmZGVmIENPTkZJR19QUENfUFMzCisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisjZW5kaWYKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjk5LDYgKzMwMiwxOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CiB9CiAKKy8qIE9uIHNvbWUgc3lzdGVtcywgbGVhdmluZyByZW1vdGUgd2FrZXVwIGVuYWJsZWQgcHJldmVudHMgc3lzdGVtIHNodXRkb3duLgorICogVGhlIGZpcm13YXJlIHNlZW1zIHRvIHRoaW5rIHRoYXQgcG93ZXJpbmcgb2ZmIGlzIGEgd2FrZXVwIGV2ZW50IQorICogVGhpcyByb3V0aW5lIHR1cm5zIG9mZiByZW1vdGUgd2FrZXVwIGFuZCBldmVyeXRoaW5nIGVsc2UsIG9uIGFsbCBwb3J0cy4KKyAqLworc3RhdGljIHZvaWQgZWhjaV90dXJuX29mZl9hbGxfcG9ydHMoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCWludAlwb3J0ID0gSENTX05fUE9SVFMoZWhjaS0+aGNzX3BhcmFtcyk7CisKKwl3aGlsZSAocG9ydC0tKQorCQllaGNpX3dyaXRlbChlaGNpLCBQT1JUX1JXQ19CSVRTLAorCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1c1twb3J0XSk7Cit9CisKIC8qIGVoY2lfc2h1dGRvd24ga2ljayBpbiBmb3Igc2lsaWNvbiBvbiBhbnkgYnVzIChub3QganVzdCBwY2ksIGV0YykuCiAgKiBUaGlzIGZvcmNpYmx5IGRpc2FibGVzIGRtYSBhbmQgSVJRcywgaGVscGluZyBrZXhlYyBhbmQgb3RoZXIgY2FzZXMKICAqIHdoZXJlIHRoZSBuZXh0IHN5c3RlbSBzb2Z0d2FyZSBtYXkgZXhwZWN0IGNsZWFuIHN0YXRlLgpAQCAtMzEwLDkgKzMyNiwxMyBAQAogCiAJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwogCSh2b2lkKSBlaGNpX2hhbHQgKGVoY2kpOworCWVoY2lfdHVybl9vZmZfYWxsX3BvcnRzKGVoY2kpOwogCiAJLyogbWFrZSBCSU9TL2V0YyB1c2UgY29tcGFuaW9uIGNvbnRyb2xsZXIgZHVyaW5nIHJlYm9vdCAqLwogCWVoY2lfd3JpdGVsKGVoY2ksIDAsICZlaGNpLT5yZWdzLT5jb25maWd1cmVkX2ZsYWcpOworCisJLyogdW5ibG9jayBwb3N0ZWQgd3JpdGVzICovCisJZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKIH0KIAogc3RhdGljIHZvaWQgZWhjaV9wb3J0X3Bvd2VyIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGludCBpc19vbikKQEAgLTk1MSwxNSArOTcxLDE4IEBACiAjZW5kaWYKIAogI2lmZGVmIFBTM19TWVNURU1fQlVTX0RSSVZFUgotCXJldHZhbCA9IHBzM19zeXN0ZW1fYnVzX2RyaXZlcl9yZWdpc3RlcigmUFMzX1NZU1RFTV9CVVNfRFJJVkVSKTsKLQlpZiAocmV0dmFsIDwgMCkgeworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1BTM19MVjEpKSB7CisJCXJldHZhbCA9IHBzM19zeXN0ZW1fYnVzX2RyaXZlcl9yZWdpc3RlcigKKwkJCQkmUFMzX1NZU1RFTV9CVVNfRFJJVkVSKTsKKwkJaWYgKHJldHZhbCA8IDApIHsKICNpZmRlZiBQTEFURk9STV9EUklWRVIKLQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJlBMQVRGT1JNX0RSSVZFUik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmUExBVEZPUk1fRFJJVkVSKTsKICNlbmRpZgogI2lmZGVmIFBDSV9EUklWRVIKLQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZQQ0lfRFJJVkVSKTsKKwkJCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmUENJX0RSSVZFUik7CiAjZW5kaWYKLQkJcmV0dXJuIHJldHZhbDsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KIAl9CiAjZW5kaWYKIApAQCAtOTc2LDcgKzk5OSw4IEBACiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZQQ0lfRFJJVkVSKTsKICNlbmRpZgogI2lmZGVmIFBTM19TWVNURU1fQlVTX0RSSVZFUgotCXBzM19zeXN0ZW1fYnVzX2RyaXZlcl91bnJlZ2lzdGVyKCZQUzNfU1lTVEVNX0JVU19EUklWRVIpOworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1BTM19MVjEpKQorCQlwczNfc3lzdGVtX2J1c19kcml2ZXJfdW5yZWdpc3RlcigmUFMzX1NZU1RFTV9CVVNfRFJJVkVSKTsKICNlbmRpZgogfQogbW9kdWxlX2V4aXQoZWhjaV9oY2RfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKaW5kZXggMGQ4M2M2ZC4uOWFmNTI5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMzYsNiArMzYsOCBAQAogCWludAkJCXBvcnQ7CiAJaW50CQkJbWFzazsKIAorCWVoY2lfZGJnKGVoY2ksICJzdXNwZW5kIHJvb3QgaHViXG4iKTsKKwogCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCiAJCW1zbGVlcCg1KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCmluZGV4IDI3MThiNWQuLjQ2ODczZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKQEAgLTE1NzcsNyArMTU3Nyw3IEBACiAKICNkZWZpbmUgcmVzb3VyY2VfbGVuKHIpICgoKHIpLT5lbmQgLSAociktPnN0YXJ0KSArIDEpCiAKLXN0YXRpYyBpbnQgX19pbml0IGlzcDExNnhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlzcDExNnhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCXN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKaW5kZXggOTMwMzQ2NC4uZDg0OWM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCkBAIC0xOCwxOSArMTgsMzggQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CiAKICNpZm5kZWYgQ09ORklHX0FSQ0hfQVQ5MQogI2Vycm9yICJDT05GSUdfQVJDSF9BVDkxIG11c3QgYmUgZGVmaW5lZC4iCiAjZW5kaWYKIAotLyogaW50ZXJmYWNlIGFuZCBmdW5jdGlvbiBjbG9ja3MgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrICppY2xrLCAqZmNsazsKKy8qIGludGVyZmFjZSBhbmQgZnVuY3Rpb24gY2xvY2tzOyBzb21ldGltZXMgYWxzbyBhbiBBSEIgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrICppY2xrLCAqZmNsaywgKmhjbGs7CiBzdGF0aWMgaW50IGNsb2NrZWQ7CiAKIGV4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdGF0aWMgdm9pZCBhdDkxX3N0YXJ0X2Nsb2NrKHZvaWQpCit7CisJaWYgKGNwdV9pc19hdDkxc2FtOTI2MSgpKQorCQljbGtfZW5hYmxlKGhjbGspOworCWNsa19lbmFibGUoaWNsayk7CisJY2xrX2VuYWJsZShmY2xrKTsKKwljbG9ja2VkID0gMTsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9zdG9wX2Nsb2NrKHZvaWQpCit7CisJY2xrX2Rpc2FibGUoZmNsayk7CisJY2xrX2Rpc2FibGUoaWNsayk7CisJaWYgKGNwdV9pc19hdDkxc2FtOTI2MSgpKQorCQljbGtfZGlzYWJsZShoY2xrKTsKKwljbG9ja2VkID0gMDsKK30KKwogc3RhdGljIHZvaWQgYXQ5MV9zdGFydF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTQxLDkgKzYwLDcgQEAKIAkvKgogCSAqIFN0YXJ0IHRoZSBVU0IgY2xvY2tzLgogCSAqLwotCWNsa19lbmFibGUoaWNsayk7Ci0JY2xrX2VuYWJsZShmY2xrKTsKLQljbG9ja2VkID0gMTsKKwlhdDkxX3N0YXJ0X2Nsb2NrKCk7CiAKIAkvKgogCSAqIFRoZSBVU0IgaG9zdCBjb250cm9sbGVyIG11c3QgcmVtYWluIGluIHJlc2V0LgpAQCAtNjYsOSArODMsNyBAQAogCS8qCiAJICogU3RvcCB0aGUgVVNCIGNsb2Nrcy4KIAkgKi8KLQljbGtfZGlzYWJsZShmY2xrKTsKLQljbGtfZGlzYWJsZShpY2xrKTsKLQljbG9ja2VkID0gMDsKKwlhdDkxX3N0b3BfY2xvY2soKTsKIH0KIAogCkBAIC0xMjYsNiArMTQxLDggQEAKIAogCWljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJvaGNpX2NsayIpOwogCWZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1aHBjayIpOworCWlmIChjcHVfaXNfYXQ5MXNhbTkyNjEoKSkKKwkJaGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImhjazAiKTsKIAogCWF0OTFfc3RhcnRfaGMocGRldik7CiAJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKQEAgLTEzNyw2ICsxNTQsOCBAQAogCS8qIEVycm9yIGhhbmRsaW5nICovCiAJYXQ5MV9zdG9wX2hjKHBkZXYpOwogCisJaWYgKGNwdV9pc19hdDkxc2FtOTI2MSgpKQorCQljbGtfcHV0KGhjbGspOwogCWNsa19wdXQoZmNsayk7CiAJY2xrX3B1dChpY2xrKTsKIApAQCAtMTcxLDkgKzE5MCwxMSBAQAogCWlvdW5tYXAoaGNkLT5yZWdzKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIAorCWlmIChjcHVfaXNfYXQ5MXNhbTkyNjEoKSkKKwkJY2xrX3B1dChoY2xrKTsKIAljbGtfcHV0KGZjbGspOwogCWNsa19wdXQoaWNsayk7Ci0JZmNsayA9IGljbGsgPSBOVUxMOworCWZjbGsgPSBpY2xrID0gaGNsayA9IE5VTEw7CiAKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CiAJcmV0dXJuIDA7CkBAIC0yODAsOSArMzAxLDcgQEAKIAkgKi8KIAlpZiAoYXQ5MV9zdXNwZW5kX2VudGVyaW5nX3Nsb3dfY2xvY2soKSkgewogCQlvaGNpX3VzYl9yZXNldCAob2hjaSk7Ci0JCWNsa19kaXNhYmxlKGZjbGspOwotCQljbGtfZGlzYWJsZShpY2xrKTsKLQkJY2xvY2tlZCA9IDA7CisJCWF0OTFfc3RvcF9jbG9jaygpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjk1LDExICszMTQsOCBAQAogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKIAkJZGlzYWJsZV9pcnFfd2FrZShoY2QtPmlycSk7CiAKLQlpZiAoIWNsb2NrZWQpIHsKLQkJY2xrX2VuYWJsZShpY2xrKTsKLQkJY2xrX2VuYWJsZShmY2xrKTsKLQkJY2xvY2tlZCA9IDE7Ci0JfQorCWlmICghY2xvY2tlZCkKKwkJYXQ5MV9zdGFydF9jbG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggZmE2YTdjZS4uZjBkMjllZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtNDIsNiArNDIsOSBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2lmZGVmIENPTkZJR19QUENfUFMzCisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAKQEAgLTk0NCw5ICs5NDcsMTIgQEAKIAkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOwogCiAjaWZkZWYgUFMzX1NZU1RFTV9CVVNfRFJJVkVSCi0JcmV0dmFsID0gcHMzX3N5c3RlbV9idXNfZHJpdmVyX3JlZ2lzdGVyKCZQUzNfU1lTVEVNX0JVU19EUklWRVIpOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIGVycm9yX3BzMzsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9QUzNfTFYxKSkgeworCQlyZXR2YWwgPSBwczNfc3lzdGVtX2J1c19kcml2ZXJfcmVnaXN0ZXIoCisJCQkJJlBTM19TWVNURU1fQlVTX0RSSVZFUik7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBlcnJvcl9wczM7CisJfQogI2VuZGlmCiAKICNpZmRlZiBQTEFURk9STV9EUklWRVIKQEAgLTk5Miw3ICs5OTgsOCBAQAogIGVycm9yX3BsYXRmb3JtOgogI2VuZGlmCiAjaWZkZWYgUFMzX1NZU1RFTV9CVVNfRFJJVkVSCi0JcHMzX3N5c3RlbV9idXNfZHJpdmVyX3VucmVnaXN0ZXIoJlBTM19TWVNURU1fQlVTX0RSSVZFUik7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfUFMzX0xWMSkpCisJCXBzM19zeXN0ZW1fYnVzX2RyaXZlcl91bnJlZ2lzdGVyKCZQUzNfU1lTVEVNX0JVU19EUklWRVIpOwogIGVycm9yX3BzMzoKICNlbmRpZgogCXJldHVybiByZXR2YWw7CkBAIC0xMDE0LDcgKzEwMjEsOCBAQAogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZQTEFURk9STV9EUklWRVIpOwogI2VuZGlmCiAjaWZkZWYgUFMzX1NZU1RFTV9CVVNfRFJJVkVSCi0JcHMzX3N5c3RlbV9idXNfZHJpdmVyX3VucmVnaXN0ZXIoJlBTM19TWVNURU1fQlVTX0RSSVZFUik7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfUFMzX0xWMSkpCisJCXBzM19zeXN0ZW1fYnVzX2RyaXZlcl91bnJlZ2lzdGVyKCZQUzNfU1lTVEVNX0JVU19EUklWRVIpOwogI2VuZGlmCiB9CiBtb2R1bGVfZXhpdChvaGNpX2hjZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnIGIvZHJpdmVycy91c2IvaW5wdXQvS2NvbmZpZwppbmRleCAyZTcxZDNjLi42OWE5ZjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcKQEAgLTU4LDEzICs1OCwxNyBAQAogCSAgZGV2aWNlcy4KIAogY29uZmlnIExPR0lURUNIX0ZGCi0JYm9vbCAiTG9naXRlY2ggV2luZ01hbiAqM0Qgc3VwcG9ydCIKKwlib29sICJMb2dpdGVjaCBkZXZpY2VzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBISURfRkYKIAlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUyBpZiBVU0JfSElECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgZGV2aWNlczoKIAkgIC0gTG9naXRlY2ggV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQKKwkgIC0gTG9naXRlY2ggV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQgMgogCSAgLSBMb2dpdGVjaCBXaW5nTWFuIEZvcmNlIDNECisJICAtIExvZ2l0ZWNoIEZvcm11bGEgRm9yY2UgRVgKKwkgIC0gTG9naXRlY2ggTU9NTyBGb3JjZSB3aGVlbAorCiAJICBhbmQgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIGZvciB0aGVtLgogCSAgTm90ZTogaWYgeW91IHNheSBOIGhlcmUsIHRoaXMgZGV2aWNlIHdpbGwgc3RpbGwgYmUgc3VwcG9ydGVkLCBidXQgd2l0aG91dAogCSAgZm9yY2UgZmVlZGJhY2suCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYwppbmRleCA0ZDhlZDNkLi5lZjA5OTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKQEAgLTUxNSw2ICs1MTUsNyBAQAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfVFVSQk9YCQkweDA2MmEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9UVVJCT1hfS0VZQk9BUkQJMHgwMjAxCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ0lEQwkJMHgxNjc3CiAKIC8qCiAgKiBJbml0aWFsaXplIGFsbCByZXBvcnRzCkBAIC01NDgsNyArNTQ5LDYgQEAKIH0KIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0dUQ08JCTB4MDc4YwotI2RlZmluZSBVU0JfVkVORE9SX0lEX0dUQ09fSVBBTkVMXzIgICAgIDB4NTU0MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fOTAJCTB4MDA5MAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwCQkweDAxMDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMQkJMHgwMTAxCkBAIC01OTQsOCArNTk0LDYgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDQJCTB4MTAwNAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNQkJMHgxMDA1CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA2CQkweDEwMDYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzgJCTB4MDAwOAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fZCAgICAgICAgICAgIDB4MDAwZAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfV0FDT00JCTB4MDU2YQogCkBAIC04NTQsOCArODUyLDYgQEAKIAl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwMDQsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwMDUsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwMDYsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDT19JUEFORUxfMiwgVVNCX0RFVklDRV9JRF9HVENPXzgsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDT19JUEFORUxfMiwgVVNCX0RFVklDRV9JRF9HVENPX2QsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfSU1BVElPTiwgVVNCX0RFVklDRV9JRF9ESVNDX1NUQUtLQSwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9LQkdFQVIsIFVTQl9ERVZJQ0VfSURfS0JHRUFSX0pBTVNUVURJTywgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9DQVNTWSwgSElEX1FVSVJLX0lHTk9SRSB9LApAQCAtOTUzLDYgKzk0OSw4IEBACiAKIAl7IFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSLCBISURfUVVJUktfU09OWV9QUzNfQ09OVFJPTExFUiB9LAogCisJeyBVU0JfVkVORE9SX0lEX0NJREMsIDB4MDEwMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCiAJeyAwLCAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1mZi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMKaW5kZXggYmM3ZjhlNi4uZTQzMWZhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMKQEAgLTU0LDkgKzU0LDEwIEBACiBzdGF0aWMgc3RydWN0IGhpZF9mZl9pbml0aWFsaXplciBpbml0c1tdID0gewogI2lmZGVmIENPTkZJR19MT0dJVEVDSF9GRgogCXsgMHg0NmQsIDB4YzIxMSwgaGlkX2xnZmZfaW5pdCB9LCAvKiBMb2dpdGVjaCBDb3JkbGVzcyBydW1ibGUgcGFkICovCi0JeyAweDQ2ZCwgMHhjMjgzLCBoaWRfbGdmZl9pbml0IH0sIC8qIExvZ2l0ZWNoIFdpbmdtYW4gRm9yY2UgM2QgKi8KLQl7IDB4NDZkLCAweGMyOTUsIGhpZF9sZ2ZmX2luaXQgfSwgLyogTG9naXRlY2ggTU9NTyBmb3JjZSB3aGVlbCAqLwogCXsgMHg0NmQsIDB4YzIxOSwgaGlkX2xnZmZfaW5pdCB9LCAvKiBMb2dpdGVjaCBDb3JkbGVzcyBydW1ibGUgcGFkIDIgKi8KKwl7IDB4NDZkLCAweGMyODMsIGhpZF9sZ2ZmX2luaXQgfSwgLyogTG9naXRlY2ggV2luZ21hbiBGb3JjZSAzZCAqLworCXsgMHg0NmQsIDB4YzI5NCwgaGlkX2xnZmZfaW5pdCB9LCAvKiBMb2dpdGVjaCBGb3JtdWxhIEZvcmNlIEVYICovCisJeyAweDQ2ZCwgMHhjMjk1LCBoaWRfbGdmZl9pbml0IH0sIC8qIExvZ2l0ZWNoIE1PTU8gZm9yY2Ugd2hlZWwgKi8KIAl7IDB4NDZkLCAweGNhMDMsIGhpZF9sZ2ZmX2luaXQgfSwgLyogTG9naXRlY2ggTU9NTyBmb3JjZSB3aGVlbCAqLwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BBTlRIRVJMT1JEX0ZGCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtbGdmZi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWxnZmYuYwppbmRleCA0ZGYwOTY4Li5lNmYzYWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtbGdmZi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1sZ2ZmLmMKQEAgLTUyLDggKzUyLDkgQEAKIAl7IDB4MDQ2ZCwgMHhjMjExLCBmZl9ydW1ibGUgfSwKIAl7IDB4MDQ2ZCwgMHhjMjE5LCBmZl9ydW1ibGUgfSwKIAl7IDB4MDQ2ZCwgMHhjMjgzLCBmZl9qb3lzdGljayB9LAorCXsgMHgwNDZkLCAweGMyOTQsIGZmX2pveXN0aWNrIH0sCisJeyAweDA0NmQsIDB4YzI5NSwgZmZfam95c3RpY2sgfSwKIAl7IDB4MDQ2ZCwgMHhjYTAzLCBmZl9qb3lzdGljayB9LAotCXsgMHgwMDAwLCAweDAwMDAsIGZmX2pveXN0aWNrIH0KIH07CiAKIHN0YXRpYyBpbnQgaGlkX2xnZmZfcGxheShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKQEAgLTEwNSw4ICsxMDYsOSBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwogCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCWNvbnN0IHNpZ25lZCBzaG9ydCAqZmZfYml0cyA9IGZmX2pveXN0aWNrOwogCWludCBlcnJvcjsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAogCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KIAlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKQEAgLTEzMCwxMiArMTMyLDE0IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2aWNlcyk7IGkrKykgewogCQlpZiAoZGV2LT5pZC52ZW5kb3IgPT0gZGV2aWNlc1tpXS5pZFZlbmRvciAmJgogCQkgICAgZGV2LT5pZC5wcm9kdWN0ID09IGRldmljZXNbaV0uaWRQcm9kdWN0KSB7Ci0JCQlmb3IgKGogPSAwOyBkZXZpY2VzW2ldLmZmW2pdID49IDA7IGorKykKLQkJCQlzZXRfYml0KGRldmljZXNbaV0uZmZbal0sIGRldi0+ZmZiaXQpOworCQkJZmZfYml0cyA9IGRldmljZXNbaV0uZmY7CiAJCQlicmVhazsKIAkJfQogCX0KIAorCWZvciAoaSA9IDA7IGZmX2JpdHNbaV0gPj0gMDsgaSsrKQorCQlzZXRfYml0KGZmX2JpdHNbaV0sIGRldi0+ZmZiaXQpOworCiAJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIE5VTEwsIGhpZF9sZ2ZmX3BsYXkpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCmluZGV4IGE3NGJmODYuLjQ5MDdlOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKQEAgLTg4LDYgKzg4LDE3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JsY2QuCiAKK2NvbmZpZyBVU0JfQkVSUllfQ0hBUkdFCisJdHJpc3RhdGUgIlVTQiBCbGFja0JlcnJ5IHJlY2hhcmdlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBCbGFja0JlcnJ5IGRldmljZSB0byB5b3VyCisJICBjb21wdXRlcidzIFVTQiBwb3J0IGFuZCBoYXZlIGl0IGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvICJyZWNoYXJnZSIKKwkgIG1vZGUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJlcnJ5X2NoYXJnZS4KKwogY29uZmlnIFVTQl9MRUQKIAl0cmlzdGF0ZSAiVVNCIExFRCBkcml2ZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKaW5kZXggMmNiYTA3ZC4uZGFjMmQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9BRFVUVVgpCSs9IGFkdXR1eC5vCiBvYmotJChDT05GSUdfVVNCX0FQUExFRElTUExBWSkJKz0gYXBwbGVkaXNwbGF5Lm8KIG9iai0kKENPTkZJR19VU0JfQVVFUlNXQUxEKQkrPSBhdWVyc3dhbGQubworb2JqLSQoQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UpCSs9IGJlcnJ5X2NoYXJnZS5vCiBvYmotJChDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzKSs9IGN5cHJlc3NfY3k3YzYzLm8KIG9iai0kKENPTkZJR19VU0JfQ1lUSEVSTSkJKz0gY3l0aGVybS5vCiBvYmotJChDT05GSUdfVVNCX0VNSTI2KQkJKz0gZW1pMjYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYyBiL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKaW5kZXggMzJmMGUzYS4uY2Y3MGMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlpbnQgcmV0dmFsOwogCiAJcGRhdGEtPm1zZ2RhdGFbMF0gPSAweDEwOwotCXBkYXRhLT5tc2dkYXRhWzFdID0gYmQtPnByb3BzLT5icmlnaHRuZXNzOworCXBkYXRhLT5tc2dkYXRhWzFdID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CiAKIAlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coCiAJCXBkYXRhLT51ZGV2LApAQCAtMTc3LDExICsxNzcsOSBAQAogCQlyZXR1cm4gcGRhdGEtPm1zZ2RhdGFbMV07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgYXBwbGVkaXNwbGF5X2JsX2RhdGEgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAorc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFwcGxlZGlzcGxheV9ibF9kYXRhID0gewogCS5nZXRfYnJpZ2h0bmVzcwk9IGFwcGxlZGlzcGxheV9ibF9nZXRfYnJpZ2h0bmVzcywKIAkudXBkYXRlX3N0YXR1cwk9IGFwcGxlZGlzcGxheV9ibF91cGRhdGVfc3RhdHVzLAotCS5tYXhfYnJpZ2h0bmVzcwk9IDB4RkYKIH07CiAKIHN0YXRpYyB2b2lkIGFwcGxlZGlzcGxheV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTE5MCwxMSArMTg4LDkgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhcHBsZWRpc3BsYXksIHdvcmsud29yayk7CiAJaW50IHJldHZhbDsKIAotCXVwKCZwZGF0YS0+YmQtPnNlbSk7CiAJcmV0dmFsID0gYXBwbGVkaXNwbGF5X2JsX2dldF9icmlnaHRuZXNzKHBkYXRhLT5iZCk7CiAJaWYgKHJldHZhbCA+PSAwKQotCQlwZGF0YS0+YmQtPnByb3BzLT5icmlnaHRuZXNzID0gcmV0dmFsOwotCWRvd24oJnBkYXRhLT5iZC0+c2VtKTsKKwkJcGRhdGEtPmJkLT5wcm9wcy5icmlnaHRuZXNzID0gcmV0dmFsOwogCiAJLyogUG9sbCBhZ2FpbiBpbiBhYm91dCAxMjVtcyBpZiB0aGVyZSdzIHN0aWxsIGEgYnV0dG9uIHByZXNzZWQgKi8KIAlpZiAocGRhdGEtPmJ1dHRvbl9wcmVzc2VkKQpAQCAtMjgxLDE3ICsyNzcsMTcgQEAKIAkvKiBSZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlICovCiAJc25wcmludGYoYmxfbmFtZSwgc2l6ZW9mKGJsX25hbWUpLCAiYXBwbGVkaXNwbGF5JWQiLAogCQlhdG9taWNfaW5jX3JldHVybigmY291bnRfZGlzcGxheXMpIC0gMSk7Ci0JcGRhdGEtPmJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihibF9uYW1lLCBOVUxMLAotCQlwZGF0YSwgJmFwcGxlZGlzcGxheV9ibF9kYXRhKTsKKwlwZGF0YS0+YmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGJsX25hbWUsIE5VTEwsIHBkYXRhLAorCQkJCQkJJmFwcGxlZGlzcGxheV9ibF9kYXRhKTsKIAlpZiAoSVNfRVJSKHBkYXRhLT5iZCkpIHsKIAkJZXJyKCJhcHBsZWRpc3BsYXk6IEJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCisJcGRhdGEtPmJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7CisKIAkvKiBUcnkgdG8gZ2V0IGJyaWdodG5lc3MgKi8KLQl1cCgmcGRhdGEtPmJkLT5zZW0pOwogCWJyaWdodG5lc3MgPSBhcHBsZWRpc3BsYXlfYmxfZ2V0X2JyaWdodG5lc3MocGRhdGEtPmJkKTsKLQlkb3duKCZwZGF0YS0+YmQtPnNlbSk7CiAKIAlpZiAoYnJpZ2h0bmVzcyA8IDApIHsKIAkJcmV0dmFsID0gYnJpZ2h0bmVzczsKQEAgLTMwMCw5ICsyOTYsNyBAQAogCX0KIAogCS8qIFNldCBicmlnaHRuZXNzIGluIGJhY2tsaWdodCBkZXZpY2UgKi8KLQl1cCgmcGRhdGEtPmJkLT5zZW0pOwotCXBkYXRhLT5iZC0+cHJvcHMtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOwotCWRvd24oJnBkYXRhLT5iZC0+c2VtKTsKKwlwZGF0YS0+YmQtPnByb3BzLmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOwogCiAJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoZSBpbnRlcmZhY2UgZGV2aWNlICovCiAJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgcGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9iZXJyeV9jaGFyZ2UuYyBiL2RyaXZlcnMvdXNiL21pc2MvYmVycnlfY2hhcmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4OTNjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYmVycnlfY2hhcmdlLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBVU0IgQmxhY2tCZXJyeSBjaGFyZ2luZyBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiBJbmZvcm1hdGlvbiBvbiBob3cgdG8gc3dpdGNoIGNvbmZpZ3Mgd2FzIHRha2VuIGJ5IHRoZSBiY2hhcmdlLmNjIGZpbGUKKyAqIGNyZWF0ZWQgYnkgdGhlIGJhcnJ5LnNmLm5ldCBwcm9qZWN0LgorICoKKyAqIGJjaGFyZ2UuY2MgaGFzIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0OgorICogCUNvcHlyaWdodCAoQykgMjAwNiwgTmV0IERpcmVjdCBJbmMuIChodHRwOi8vd3d3Lm5ldGRpcmVjdC5jYS8pCisgKiBhbmQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgorICoKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBSSU1fVkVORE9SCQkweDBmY2EKKyNkZWZpbmUgQkxBQ0tCRVJSWQkJMHgwMDAxCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKyNpZmRlZiBkYmcKKyN1bmRlZiBkYmcKKyNlbmRpZgorI2RlZmluZSBkYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikJCQkJXAorCWlmIChkZWJ1ZykJCQkJCQlcCisJCWRldl9wcmludGsoS0VSTl9ERUJVRyAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShSSU1fVkVORE9SLCBCTEFDS0JFUlJZKSB9LAorCXsgfSwJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIGludCBtYWdpY19jaGFyZ2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJY2hhciAqZHVtbXlfYnVmZmVyID0ga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpbnQgcmV0dmFsOworCisJaWYgKCFkdW1teV9idWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogc2VuZCB0d28gbWFnaWMgY29tbWFuZHMgYW5kIHRoZW4gc2V0IHRoZSBjb25maWd1cmF0aW9uLiAgVGhlIGRldmljZQorCSAqIHdpbGwgdGhlbiByZXNldCBpdHNlbGYgd2l0aCB0aGUgbmV3IHBvd2VyIHVzYWdlIGFuZCBzaG91bGQgc3RhcnQKKwkgKiBjaGFyZ2luZy4gKi8KKworCS8qIE5vdGUsIHdpdGggdGVzdGluZywgaXQgb25seSBzZWVtcyB0aGF0IHRoZSBmaXJzdCBtZXNzYWdlIGlzIHJlYWxseQorCSAqIG5lZWRlZCAoYXQgbGVhc3QgZm9yIHRoZSA4NzAwYyksIGJ1dCB0byBiZSBzYWZlLCB3ZSBlbXVsYXRlIHdoYXQKKwkgKiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBzZWVtIHRvIGJlIHNlbmRpbmcgdG8gdGhlaXIgZGV2aWNlLiAgV2UKKwkgKiByZWFsbHkgbmVlZCB0byBnZXQgc29tZSBzcGVjcyBmb3IgdGhpcyBkZXZpY2UgdG8gYmUgc3VyZSBhYm91dCB3aGF0CisJICogaXMgZ29pbmcgb24gaGVyZS4KKwkgKi8KKwlkYmcoJnVkZXYtPmRldiwgIlNlbmRpbmcgZmlyc3QgbWFnaWMgY29tbWFuZFxuIik7CisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkgMHhhNSwgMHhjMCwgMCwgMSwgZHVtbXlfYnVmZmVyLCAyLCAxMDApOworCWlmIChyZXR2YWwgIT0gMikgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJGaXJzdCBtYWdpYyBjb21tYW5kIGZhaWxlZDogJWQuXG4iLAorCQkJcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlkYmcoJnVkZXYtPmRldiwgIlNlbmRpbmcgZmlyc3QgbWFnaWMgY29tbWFuZFxuIik7CisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkgMHhhMiwgMHg0MCwgMCwgMSwgZHVtbXlfYnVmZmVyLCAwLCAxMDApOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJTZWNvbmQgbWFnaWMgY29tbWFuZCBmYWlsZWQ6ICVkLlxuIiwKKwkJCXJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZGJnKCZ1ZGV2LT5kZXYsICJDYWxsaW5nIHNldF9jb25maWd1cmF0aW9uXG4iKTsKKwlyZXR2YWwgPSB1c2JfZHJpdmVyX3NldF9jb25maWd1cmF0aW9uKHVkZXYsIDEpOworCWlmIChyZXR2YWwpCisJCWRldl9lcnIoJnVkZXYtPmRldiwgIlNldCBDb25maWd1cmF0aW9uIGZhaWxlZCA6JWQuXG4iLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBiZXJyeV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwlkYmcoJnVkZXYtPmRldiwgIlBvd2VyIGlzIHNldCB0byAlZG1BXG4iLAorCSAgICB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk1heFBvd2VyICogMik7CisKKwkvKiBjaGVjayB0aGUgcG93ZXIgdXNhZ2Ugc28gd2UgZG9uJ3QgdHJ5IHRvIGVuYWJsZSBzb21ldGhpbmcgdGhhdCBpcworCSAqIGFscmVhZHkgZW5hYmxlZCAqLworCWlmICgodWRldi0+YWN0Y29uZmlnLT5kZXNjLmJNYXhQb3dlciAqIDIpID09IDUwMCkgeworCQlkYmcoJnVkZXYtPmRldiwgImRldmljZSBpcyBhbHJlYWR5IGNoYXJnaW5nLCBwb3dlciBpcyAiCisJCSAgICAic2V0IHRvICVkbUFcbiIsIHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTWF4UG93ZXIgKiAyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogdHVybiB0aGUgcG93ZXIgb24gKi8KKwltYWdpY19jaGFyZ2UodWRldik7CisKKwkvKiB3ZSBkb24ndCByZWFsbHkgd2FudCB0byBiaW5kIHRvIHRoZSBkZXZpY2UsIHVzZXJzcGFjZSBwcm9ncmFtcyBjYW4KKwkgKiBoYW5kbGUgdGhlIHN5bmNpbmcganVzdCBmaW5lLCBzbyBnZXQgb3V0dGEgaGVyZS4gKi8KKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgYmVycnlfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJlcnJ5X2RyaXZlciA9IHsKKwkubmFtZSA9CQkiYmVycnlfY2hhcmdlIiwKKwkucHJvYmUgPQliZXJyeV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWJlcnJ5X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBiZXJyeV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmYmVycnlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJlcnJ5X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmYmVycnlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYmVycnlfaW5pdCk7Cittb2R1bGVfZXhpdChiZXJyeV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4iKTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL25ldC9LY29uZmlnCmluZGV4IGEyYjk0ZWY1Li4wZjNkN2RiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9uZXQvS2NvbmZpZwpAQCAtODQsNiArODQsNyBAQAogY29uZmlnIFVTQl9SVEw4MTUwCiAJdHJpc3RhdGUgIlVTQiBSVEw4MTUwIGJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJc2VsZWN0IE1JSQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgUlRMODE1MCBiYXNlZCB1c2ItZXRoZXJuZXQgYWRhcHRlci4KIAkgIFNlbmQgbWUgPHBldGthbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IGFueSBjb21tZW50cyB5b3UgbWF5IGhhdmUuCkBAIC05OCw3ICs5OSw3IEBACiAKIGNvbmZpZyBVU0JfVVNCTkVUCiAJdHJpc3RhdGUgIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrIgotCXNlbGVjdCBNSUkgaWYgVVNCTkVUX01JSSAhPSBuCisJc2VsZWN0IE1JSSBpZiBVU0JfVVNCTkVUX01JSSAhPSBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLAogCSAgd2l0aCAibWluaWRyaXZlcnMiIGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlCkBAIC0yMzksNiArMjQwLDcgQEAKIGNvbmZpZyBVU0JfTkVUX0NEQ19TVUJTRVQKIAl0cmlzdGF0ZSAiU2ltcGxlIFVTQiBOZXR3b3JrIExpbmtzIChDREMgRXRoZXJuZXQgc3Vic2V0KSIKIAlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKwlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGRyaXZlciBtb2R1bGUgc3VwcG9ydHMgVVNCIG5ldHdvcmsgZGV2aWNlcyB0aGF0IGNhbiB3b3JrCiAJICB3aXRob3V0IGFueSBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24uICBTZWxlY3QgaXQgaWYgeW91IGhhdmUKQEAgLTI5OCw2ICszMDAsMTMgQEAKIAkgIENob29zZSB0aGlzIG9wdGlvbiB0byBzdXBwb3J0IHRoZSB1c2IgbmV0d29ya2luZyBsaW5rcyB1c2VkCiAJICBieSBzb21lIHNhbXBsZSBmaXJtd2FyZSBmcm9tIEVwc29uLgogCitjb25maWcgVVNCX0tDMjE5MAorCWJvb2xlYW4gIktUIFRlY2hub2xvZ3kgS0MyMTkwIGJhc2VkIGNhYmxlcyAoSW5zdGFOZXQpIgorCWRlcGVuZHMgb24gVVNCX05FVF9DRENfU1VCU0VUICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgoENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UncmUgdXNpbmcgYSBob3N0LXRvLWhvc3QgY2FibGUKKwkgoHdpdGggb25lIG9mIHRoZXNlIGNoaXBzLgorCiBjb25maWcgVVNCX05FVF9aQVVSVVMKIAl0cmlzdGF0ZSAiU2hhcnAgWmF1cnVzIChzdG9jayBST01zKSBhbmQgY29tcGF0aWJsZSIKIAlkZXBlbmRzIG9uIFVTQl9VU0JORVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMgYi9kcml2ZXJzL3VzYi9uZXQvYXNpeC5jCmluZGV4IGJkMzU3ZTEuLjdlZjJlNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKKysrIGIvZHJpdmVycy91c2IvbmV0L2FzaXguYwpAQCAtMzUxLDkgKzM1MSwxMSBAQAogCiAJc2tiX3B1c2goc2tiLCA0KTsKIAlwYWNrZXRfbGVuID0gKCgoc2tiLT5sZW4gLSA0KSBeIDB4MDAwMGZmZmYpIDw8IDE2KSArIChza2ItPmxlbiAtIDQpOworCWNwdV90b19sZTMycygmcGFja2V0X2xlbik7CiAJbWVtY3B5KHNrYi0+ZGF0YSwgJnBhY2tldF9sZW4sIHNpemVvZihwYWNrZXRfbGVuKSk7CiAKIAlpZiAoKHNrYi0+bGVuICUgNTEyKSA9PSAwKSB7CisJCWNwdV90b19sZTMycygmcGFkYnl0ZXMpOwogCQltZW1jcHkoIHNrYi0+dGFpbCwgJnBhZGJ5dGVzLCBzaXplb2YocGFkYnl0ZXMpKTsKIAkJc2tiX3B1dChza2IsIHNpemVvZihwYWRieXRlcykpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9jZGNfc3Vic2V0LmMgYi9kcml2ZXJzL3VzYi9uZXQvY2RjX3N1YnNldC5jCmluZGV4IGFlOGZiMDYuLmJjNjJiMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9jZGNfc3Vic2V0LmMKKysrIGIvZHJpdmVycy91c2IvbmV0L2NkY19zdWJzZXQuYwpAQCAtNzksMTMgKzc5LDE5IEBACiAgKgogICogQUxpIE01NjMyIGRyaXZlciAuLi4gZG9lcyBoaWdoIHNwZWVkCiAgKgorICogTk9URSB0aGF0IHRoZSBNUy1XaW5kb3dzIGRyaXZlcnMgZm9yIHRoaXMgY2hpcCB1c2Ugc29tZSBmdW5reSBhbmQKKyAqIChuYXR1cmFsbHkpIHVuZG9jdW1lbnRlZCA3LWJ5dGUgcHJlZml4IHRvIGVhY2ggcGFja2V0LCBzbyB0aGlzIGlzIGEKKyAqIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGludGVyb3BlcmF0ZS4gIEFsc28sIG9uY2UgeW91IHVucGx1ZworICogb25lIGVuZCBvZiB0aGUgY2FibGUsIHlvdSBuZWVkIHRvIHJlcGx1ZyB0aGUgb3RoZXIgZW5kIHRvbyAuLi4gc2luY2UKKyAqIGNoaXAgZG9jcyBhcmUgdW5hdmFpbGFibGUsIHRoZXJlJ3Mgbm8gd2F5IHRvIHJlc2V0IHRoZSByZWxldmFudCBzdGF0ZQorICogc2hvcnQgb2YgYSBwb3dlciBjeWNsZS4KKyAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWFsaV9tNTYzMl9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJBTGkgTTU2MzIiLAogfTsKIAotCiAjZW5kaWYKIAogDApAQCAtMTU5LDYgKzE2NSwxMSBAQAogI2VuZGlmCS8qIENPTkZJR19VU0JfRVBTT04yODg4ICovCiAKIAwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZm8gZnJvbSBKb25hdGhhbiBNY0Rvd2VsbCA8bm9vZGxlc0BlYXJ0aC5saT4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmZGVmIENPTkZJR19VU0JfS0MyMTkwCiAjZGVmaW5lIEhBVkVfSEFSRFdBUkUKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8ga2MyMTkwX2luZm8gPSB7CkBAIC0yMjMsNiArMjM0LDEwIEBACiAJVVNCX0RFVklDRSAoMHgwNDAyLCAweDU2MzIpLAkvLyBBTGkgZGVmYXVsdHMKIAkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmFsaV9tNTYzMl9pbmZvLAogfSwKK3sKKwlVU0JfREVWSUNFICgweDE4MmQsMHgyMDdjKSwJLy8gU2l0ZUNvbSBDTi0xMjQKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmFsaV9tNTYzMl9pbmZvLAorfSwKICNlbmRpZgogCiAjaWZkZWYJQ09ORklHX1VTQl9BTjI3MjAKQEAgLTMxNCwxMyArMzI5LDEzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNkY19zdWJzZXRfaW5pdCh2b2lkKQogewotIAlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZjZGNfc3Vic2V0X2RyaXZlcik7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmY2RjX3N1YnNldF9kcml2ZXIpOwogfQogbW9kdWxlX2luaXQoY2RjX3N1YnNldF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGNkY19zdWJzZXRfZXhpdCh2b2lkKQogewotIAl1c2JfZGVyZWdpc3RlcigmY2RjX3N1YnNldF9kcml2ZXIpOworCXVzYl9kZXJlZ2lzdGVyKCZjZGNfc3Vic2V0X2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChjZGNfc3Vic2V0X2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMgYi9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMKaW5kZXggNDNiYTYxYS4uZGU2OWIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJCWlmICh0bXAgPCAwKQogCQkJcmV0dXJuIHRtcDsKIAl9Ci0JCisKIAlkZXYtPmluID0gdXNiX3JjdmJ1bGtwaXBlIChkZXYtPnVkZXYsCiAJCQlpbi0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKIAlkZXYtPm91dCA9IHVzYl9zbmRidWxrcGlwZSAoZGV2LT51ZGV2LApAQCAtMzI3LDcgKzMyNyw3IEBACiAJaWYgKG5ldGlmX3J1bm5pbmcgKGRldi0+bmV0KQogCQkJJiYgbmV0aWZfZGV2aWNlX3ByZXNlbnQgKGRldi0+bmV0KQogCQkJJiYgIXRlc3RfYml0IChFVkVOVF9SWF9IQUxULCAmZGV2LT5mbGFncykpIHsKLQkJc3dpdGNoIChyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKSl7IAorCQlzd2l0Y2ggKHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpKXsKIAkJY2FzZSAtRVBJUEU6CiAJCQl1c2JuZXRfZGVmZXJfa2V2ZW50IChkZXYsIEVWRU5UX1JYX0hBTFQpOwogCQkJYnJlYWs7CkBAIC00NDMsNyArNDQzLDcgQEAKIAkgICAgY2FzZSAtRU9WRVJGTE9XOgogCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCS8vIEZBTExUSFJPVUdICi0JICAgIAorCiAJICAgIGRlZmF1bHQ6CiAJCWVudHJ5LT5zdGF0ZSA9IHJ4X2NsZWFudXA7CiAJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CkBAIC01NjAsNyArNTYwLDcgQEAKIAogCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQogCQlkZXZpbmZvIChkZXYsICJzdG9wIHN0YXRzOiByeC90eCAlbGQvJWxkLCBlcnJzICVsZC8lbGQiLAotCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzLCBkZXYtPnN0YXRzLnR4X3BhY2tldHMsIAorCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzLCBkZXYtPnN0YXRzLnR4X3BhY2tldHMsCiAJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycywgZGV2LT5zdGF0cy50eF9lcnJvcnMKIAkJCSk7CiAKQEAgLTU3OCw3ICs1NzgsNyBAQAogCQkJZGV2ZGJnIChkZXYsICJ3YWl0ZWQgZm9yICVkIHVyYiBjb21wbGV0aW9ucyIsIHRlbXApOwogCX0KIAlkZXYtPndhaXQgPSBOVUxMOwotCXJlbW92ZV93YWl0X3F1ZXVlICgmdW5saW5rX3dha2V1cCwgJndhaXQpOyAKKwlyZW1vdmVfd2FpdF9xdWV1ZSAoJnVubGlua193YWtldXAsICZ3YWl0KTsKIAogCXVzYl9raWxsX3VyYihkZXYtPmludGVycnVwdCk7CiAKQEAgLTgzNCw3ICs4MzQsNyBAQAogCX0KIAogCWlmICh0ZXN0X2JpdCAoRVZFTlRfTElOS19SRVNFVCwgJmRldi0+ZmxhZ3MpKSB7Ci0JCXN0cnVjdCBkcml2ZXJfaW5mbyAJKmluZm8gPSBkZXYtPmRyaXZlcl9pbmZvOworCQlzdHJ1Y3QgZHJpdmVyX2luZm8JKmluZm8gPSBkZXYtPmRyaXZlcl9pbmZvOwogCQlpbnQJCQlyZXR2YWwgPSAwOwogCiAJCWNsZWFyX2JpdCAoRVZFTlRfTElOS19SRVNFVCwgJmRldi0+ZmxhZ3MpOwpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKICAqIFVTQiBEZXZpY2UgRHJpdmVyIHN1cHBvcnQKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotIAorCiAvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKIAogdm9pZCB1c2JuZXRfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC0xMDg3LDcgKzEwODcsNyBAQAogCQkJaW50Zi0+ZGV2LmRyaXZlci0+bmFtZSwKIAkJCXhkZXYtPmJ1cy0+YnVzX25hbWUsIHhkZXYtPmRldnBhdGgsCiAJCQlkZXYtPmRyaXZlcl9pbmZvLT5kZXNjcmlwdGlvbik7Ci0JCisKIAluZXQgPSBkZXYtPm5ldDsKIAl1bnJlZ2lzdGVyX25ldGRldiAobmV0KTsKIApAQCAtMTExMSw3ICsxMTExLDcgQEAKIHVzYm5ldF9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpwcm9kKQogewogCXN0cnVjdCB1c2JuZXQJCQkqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlIAkJKm5ldDsKKwlzdHJ1Y3QgbmV0X2RldmljZQkJKm5ldDsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlCSppbnRlcmZhY2U7CiAJc3RydWN0IGRyaXZlcl9pbmZvCQkqaW5mbzsKIAlzdHJ1Y3QgdXNiX2RldmljZQkJKnhkZXY7CkBAIC0xMTgxLDYgKzExODEsOSBAQAogCS8vIE5PVEUgbmV0LT5uYW1lIHN0aWxsIG5vdCB1c2FibGUgLi4uCiAJaWYgKGluZm8tPmJpbmQpIHsKIAkJc3RhdHVzID0gaW5mby0+YmluZCAoZGV2LCB1ZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIG91dDE7CisKIAkJLy8gaGV1cmlzdGljOiAgInVzYiVkIiBmb3IgbGlua3Mgd2Uga25vdyBhcmUgdHdvLWhvc3QsCiAJCS8vIGVsc2UgImV0aCVkIiB3aGVuIHRoZXJlJ3MgcmVhc29uYWJsZSBkb3VidC4gIHVzZXJzcGFjZQogCQkvLyBjYW4gcmVuYW1lIHRoZSBsaW5rIGlmIGl0IGtub3dzIGJldHRlci4KQEAgLTEyMDcsMTIgKzEyMTAsMTIgQEAKIAlpZiAoc3RhdHVzID09IDAgJiYgZGV2LT5zdGF0dXMpCiAJCXN0YXR1cyA9IGluaXRfc3RhdHVzIChkZXYsIHVkZXYpOwogCWlmIChzdGF0dXMgPCAwKQotCQlnb3RvIG91dDE7CisJCWdvdG8gb3V0MzsKIAogCWlmICghZGV2LT5yeF91cmJfc2l6ZSkKIAkJZGV2LT5yeF91cmJfc2l6ZSA9IGRldi0+aGFyZF9tdHU7CiAJZGV2LT5tYXhwYWNrZXQgPSB1c2JfbWF4cGFja2V0IChkZXYtPnVkZXYsIGRldi0+b3V0LCAxKTsKLQkKKwogCVNFVF9ORVRERVZfREVWKG5ldCwgJnVkZXYtPmRldik7CiAJc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2IChuZXQpOwogCWlmIChzdGF0dXMpCkBAIC0xMjU1LDcgKzEyNTgsNyBAQAogaW50IHVzYm5ldF9zdXNwZW5kIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JCisKIAkvKiBhY2NlbGVyYXRlIGVtcHR5aW5nIG9mIHRoZSByeCBhbmQgcXVldWVzLCB0byBhdm9pZAogCSAqIGhhdmluZyBldmVyeXRoaW5nIGVycm9yIG91dC4KIAkgKi8KQEAgLTEyODYsNyArMTI4OSw3IEBACiAJCQk8IHNpemVvZiAoc3RydWN0IHNrYl9kYXRhKSk7CiAKIAlyYW5kb21fZXRoZXJfYWRkcihub2RlX2lkKTsKLSAJcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdCh1c2JuZXRfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKaW5kZXggMGFmNDJlMy4uMTg4MTZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKQEAgLTU4LDExICs1OCw2IEBACiAJaWYgKHVyYi0+c3RhdHVzKSB7CiAJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKIAkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwotCQkvKiBzb21ldGhpbmcgaGFwcGVuZWQsIHNvIGZyZWUgdXAgdGhlIG1lbW9yeSBmb3IgdGhpcyB1cmIgKi8KLQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQlrZnJlZSAodXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOwotCQl9CiAJCXJldHVybjsKIAl9CiAJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CkBAIC0xNDYsNiArMTQxLDggQEAKIAkJCQkgIGFpcnByaW1lX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXN1bHQpIHsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQkJa2ZyZWUoYnVmZmVyKTsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiAlZCBmb3IgcG9ydCAlZCwgZXJyb3IgJWRcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBpLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CkBAIC0xNjAsMjcgKzE1NywxMiBAQAogCS8qIHNvbWUgZXJyb3IgaGFwcGVuZWQsIGNhbmNlbCBhbnkgc3VibWl0dGVkIHVyYnMgYW5kIGNsZWFuIHVwIGFueXRoaW5nIHRoYXQKIAkgICBnb3QgYWxsb2NhdGVkIHN1Y2Nlc3NmdWxseSAqLwogCi0JZm9yICggOyBpID49IDA7IC0taSkgeworCXdoaWxlIChpLS0gIT0gMCkgewogCQl1cmIgPSBwcml2LT5yZWFkX3VyYnBbaV07Ci0JCWlmICh1cmIpIHsKLQkJCS8qIFRoaXMgdXJiIHdhcyBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5LiBTbyB3ZSBoYXZlIHRvCi0JCQkgICBjYW5jZWwgaXQuCi0JCQkgICBVbmxpbmtpbmcgdGhlIHVyYiB3aWxsIGludm9rZSByZWFkX2J1bGtfY2FsbGJhY2soKQotCQkJICAgd2l0aCBhbiBlcnJvciBzdGF0dXMsIHNvIGl0cyB0cmFuc2ZlciBidWZmZXIgd2lsbAotCQkJICAgYmUgZnJlZWQgdGhlcmUgKi8KLQkJCWlmICh1c2JfdW5saW5rX3VyYiAodXJiKSAhPSAtRUlOUFJPR1JFU1MpIHsKLQkJCQkvKiBjb21tZW50cyBpbiBkcml2ZXJzL3VzYi9jb3JlL3VyYi5jIHNheSB0aGlzCi0JCQkJICAgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSB1cmIgd2FzIG5ldmVyIHN1Ym1pdHRlZCwKLQkJCQkgICBvciBoYXMgY29tcGxldGVkIGFscmVhZHkuCi0JCQkJICAgRWl0aGVyIHdheSB3ZSBtYXkgaGF2ZSB0byBmcmVlIHRoZSB0cmFuc2ZlcgotCQkJCSAgIGJ1ZmZlciBoZXJlLiAqLwotCQkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcikgewotCQkJCQlrZnJlZSAodXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7Ci0JCQkJfQotCQkJfQotCQkJdXNiX2ZyZWVfdXJiICh1cmIpOwotCQl9CisJCWJ1ZmZlciA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCQl1c2Jfa2lsbF91cmIgKHVyYik7CisJCXVzYl9mcmVlX3VyYiAodXJiKTsKKwkJa2ZyZWUgKGJ1ZmZlcik7CiAJfQogCiAgb3V0OgpAQCAtMTk0LDEwICsxNzYsOSBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CiAKLQkvKiBraWxsaW5nIHRoZSB1cmIgd2lsbCBpbnZva2UgcmVhZF9idWxrX2NhbGxiYWNrKCkgd2l0aCBhbiBlcnJvciBzdGF0dXMsCi0JICAgc28gdGhlIHRyYW5zZmVyIGJ1ZmZlciB3aWxsIGJlIGZyZWVkIHRoZXJlICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9SRUFEX1VSQlM7ICsraSkgewogCQl1c2Jfa2lsbF91cmIgKHByaXYtPnJlYWRfdXJicFtpXSk7CisJCWtmcmVlIChwcml2LT5yZWFkX3VyYnBbaV0tPnRyYW5zZmVyX2J1ZmZlcik7CiAJCXVzYl9mcmVlX3VyYiAocHJpdi0+cmVhZF91cmJwW2ldKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwppbmRleCAzZWMyNDg3Li5kYjYyM2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCkBAIC02OSw2ICs2OSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjE4KSB9LCAvKiBMaXBvd3NreSBJbmR1c3RyaWUgRWxla3Ryb25payBHbWJILCBIQVJQLTEgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjApIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjEpIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM1LCAweEVBNjEpIH0sIC8qIFNpbGljb24gTGFicyBNb2JpRGF0YSBHUFJTIFVTQiBNb2RlbSAqLwogCXsgVVNCX0RFVklDRSgweDEzQUQsIDB4OTk5OSkgfSwgLyogQmFsdGVjaCBjYXJkIHJlYWRlciAqLwogCXsgVVNCX0RFVklDRSgweDE2RDYsIDB4MDAwMSkgfSwgLyogSmFibG90cm9uIHNlcmlhbCBpbnRlcmZhY2UgKi8KIAl7IH0gLyogVGVybWluYXRpbmcgRW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IDYwMWUwNjQuLjUzYmFlZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtNjYsNiArNjYsOCBAQAogCS5udW1fYnVsa19vdXQgPQkJTlVNX0RPTlRfQ0FSRSwKIAkubnVtX3BvcnRzID0JCTEsCiAJLnNodXRkb3duID0JCXVzYl9zZXJpYWxfZ2VuZXJpY19zaHV0ZG93biwKKwkudGhyb3R0bGUgPQkJdXNiX3NlcmlhbF9nZW5lcmljX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCXVzYl9zZXJpYWxfZ2VuZXJpY191bnRocm90dGxlLAogfTsKIAogc3RhdGljIGludCBnZW5lcmljX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCkBAIC0xMTUsNiArMTE3LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCWludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKIApAQCAtMTI0LDcgKzEyNywxMyBAQAogCWlmIChwb3J0LT50dHkpCiAJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOwogCi0JLyogaWYgd2UgaGF2ZSBhIGJ1bGsgaW50ZXJydXB0LCBzdGFydCByZWFkaW5nIGZyb20gaXQgKi8KKwkvKiBjbGVhciB0aGUgdGhyb3R0bGUgZmxhZ3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXBvcnQtPnRocm90dGxlZCA9IDA7CisJcG9ydC0+dGhyb3R0bGVfcmVxID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwkvKiBpZiB3ZSBoYXZlIGEgYnVsayBlbmRwb2ludCwgc3RhcnQgcmVhZGluZyBmcm9tIGl0ICovCiAJaWYgKHNlcmlhbC0+bnVtX2J1bGtfaW4pIHsKIAkJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKQEAgLTI1MywzMSArMjYyLDIyIEBACiAJcmV0dXJuIChjaGFycyk7CiB9CiAKLXZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQorLyogUHVzaCBkYXRhIHRvIHR0eSBsYXllciBhbmQgcmVzdWJtaXQgdGhlIGJ1bGsgcmVhZCBVUkIgKi8KK3N0YXRpYyB2b2lkIGZsdXNoX2FuZF9yZXN1Ym1pdF9yZWFkX3VyYiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBwb3J0LT5yZWFkX3VyYjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OwogCWludCByZXN1bHQ7CiAKLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKLQotCWlmICh1cmItPnN0YXR1cykgewotCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47Ci0JfQotCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7Ci0KLQl0dHkgPSBwb3J0LT50dHk7CisJLyogUHVzaCBkYXRhIHRvIHR0eSAqLwogCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JICAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCSAgCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7IC8qIGlzIHRoaXMgYWxsb3dlZCBmcm9tIGFuIFVSQiBjYWxsYmFjayA/ICovCiAJfQogCi0JLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLworCS8qIENvbnRpbnVlIHJlYWRpbmcgZnJvbSBkZXZpY2UgKi8KIAl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAogCQkJICAgdXNiX3JjdmJ1bGtwaXBlIChzZXJpYWwtPmRldiwKIAkJCQkgICAJICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKQEAgLTI5MCw2ICsyOTAsNDAgQEAKIAlpZiAocmVzdWx0KQogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CiB9CisKK3ZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGlzX3Rocm90dGxlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJLyogVGhyb3R0bGUgdGhlIGRldmljZSBpZiByZXF1ZXN0ZWQgYnkgdHR5ICovCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCQlpc190aHJvdHRsZWQgPSBwb3J0LT50aHJvdHRsZWQgPSBwb3J0LT50aHJvdHRsZV9yZXE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGlzX3Rocm90dGxlZCkgeworCQkJLyogTGV0IHRoZSByZWNlaXZlZCBkYXRhIGxpbmdlciBpbiB0aGUgcmVhZCBVUkI7CisJCQkgKiB1c2Jfc2VyaWFsX2dlbmVyaWNfdW50aHJvdHRsZSgpIHdpbGwgcGljayBpdAorCQkJICogdXAgbGF0ZXIuICovCisJCQlkYmcoIiVzIC0gdGhyb3R0bGluZyBkZXZpY2UiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogSGFuZGxlIGRhdGEgYW5kIGNvbnRpbnVlIHJlYWRpbmcgZnJvbSBkZXZpY2UgKi8KKwlmbHVzaF9hbmRfcmVzdWJtaXRfcmVhZF91cmIocG9ydCk7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2dlbmVyaWNfcmVhZF9idWxrX2NhbGxiYWNrKTsKIAogdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKQpAQCAtMzA4LDYgKzM0MiwzOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX2J1bGtfY2FsbGJhY2spOwogCit2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY190aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBTZXQgdGhlIHRocm90dGxlIHJlcXVlc3QgZmxhZy4gSXQgd2lsbCBiZSBwaWNrZWQgdXAKKwkgKiBieSB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVhZF9idWxrX2NhbGxiYWNrKCkuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlwb3J0LT50aHJvdHRsZV9yZXEgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKK30KKwordm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlpbnQgd2FzX3Rocm90dGxlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBDbGVhciB0aGUgdGhyb3R0bGUgZmxhZ3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXdhc190aHJvdHRsZWQgPSBwb3J0LT50aHJvdHRsZWQ7CisJcG9ydC0+dGhyb3R0bGVkID0gcG9ydC0+dGhyb3R0bGVfcmVxID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwlpZiAod2FzX3Rocm90dGxlZCkgeworCQkvKiBIYW5kbGUgcGVuZGluZyBkYXRhIGFuZCByZXN1bWUgcmVhZGluZyBmcm9tIGRldmljZSAqLworCQlmbHVzaF9hbmRfcmVzdWJtaXRfcmVhZF91cmIocG9ydCk7CisJfQorfQorCiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCBjZWQ5ZjMyLi45OTYzYThiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtNjksNyArNjksNiBAQAogLyogVmVuZG9yIGFuZCBwcm9kdWN0IElEcyAqLwogI2RlZmluZSBPUFRJT05fVkVORE9SX0lEICAgICAgICAgICAgICAgIDB4MEFGMAogI2RlZmluZSBIVUFXRUlfVkVORE9SX0lEICAgICAgICAgICAgICAgIDB4MTJEMQotI2RlZmluZSBBVURJT1ZPWF9WRU5ET1JfSUQgICAgICAgICAgICAgIDB4MEYzRAogI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lEICAgICAgIDB4MTQxMAogI2RlZmluZSBBTllEQVRBX1ZFTkRPUl9JRCAgICAgICAgICAgICAgIDB4MTZkNQogCkBAIC04MSw3ICs4MCw2IEBACiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0dUTUFYMzYgICAgICAgICAgMHg2NzAxCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0U2MDAgICAgICAgICAgICAgMHgxMDAxCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UyMjAgICAgICAgICAgICAgMHgxMDAzCi0jZGVmaW5lIEFVRElPVk9YX1BST0RVQ1RfQUlSQ0FSRCAgICAgICAgMHgwMTEyCiAjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1U3NDAgICAgMHgxNDAwCiAjZGVmaW5lIEFOWURBVEFfUFJPRFVDVF9JRCAgICAgICAgICAgICAgMHg2NTAxCiAKQEAgLTk0LDcgKzkyLDYgQEAKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfR1RNQVgzNikgfSwKIAl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTYwMCkgfSwKIAl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTIyMCkgfSwKLQl7IFVTQl9ERVZJQ0UoQVVESU9WT1hfVkVORE9SX0lELCBBVURJT1ZPWF9QUk9EVUNUX0FJUkNBUkQpIH0sCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVTc0MCkgfSwKIAl7IFVTQl9ERVZJQ0UoQU5ZREFUQV9WRU5ET1JfSUQsIEFOWURBVEFfUFJPRFVDVF9JRCkgfSwKIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KQEAgLTEwOSw3ICsxMDYsNiBAQAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9HVE1BWDM2KSB9LAogCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FNjAwKSB9LAogCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMjIwKSB9LAotCXsgVVNCX0RFVklDRShBVURJT1ZPWF9WRU5ET1JfSUQsIEFVRElPVk9YX1BST0RVQ1RfQUlSQ0FSRCkgfSwKIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCxOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNzQwKSB9LAogCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0lEKSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IDZjMDgzZDQuLjgzZGZhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTgzLDYgKzgzLDcgQEAKIAl7IFVTQl9ERVZJQ0UoQkVMS0lOX1ZFTkRPUl9JRCwgQkVMS0lOX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKEFMQ09SX1ZFTkRPUl9JRCwgQUxDT1JfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFdTMDAySU5fVkVORE9SX0lELCBXUzAwMklOX1BST0RVQ1RfSUQpIH0sCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCmluZGV4IDY1YTUwMzk2Li5mOWE3MWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCkBAIC05NywzICs5Nyw4IEBACiAvKiBIdWF3ZWkgRTYyMCBVTVRTL0hTRFBBIGNhcmQgKElEOiAxMmQxOjEwMDEpICovCiAjZGVmaW5lIEhVQVdFSV9WRU5ET1JfSUQJMHgxMmQxCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0lECTB4MTAwMQorCisvKiBXaWxsY29tIFdTMDAySU4gRGF0YSBEcml2ZXIgKGJ5IE5ldEluZGV4IEluYy4pICovCisjZGVmaW5lIFdTMDAySU5fVkVORE9SX0lECTB4MTFmNgorI2RlZmluZSBXUzAwMklOX1BST0RVQ1RfSUQJMHgyMDAxCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwppbmRleCA3MDIzNGY1Li5lMjI3ZjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCkBAIC0xNTMsNiArMTUzLDEyIEBACiAJCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9GSVhfQ0FQQUNJVFkpCiAJCQlzZGV2LT5maXhfY2FwYWNpdHkgPSAxOwogCisJCS8qIEEgZmV3IGRpc2tzIGhhdmUgdHdvIGluZGlzdGluZ3Vpc2hhYmxlIHZlcnNpb24sIG9uZSBvZgorCQkgKiB3aGljaCByZXBvcnRzIHRoZSBjb3JyZWN0IGNhcGFjaXR5IGFuZCB0aGUgb3RoZXIgZG9lcyBub3QuCisJCSAqIFRoZSBzZCBkcml2ZXIgaGFzIHRvIGd1ZXNzIHdoaWNoIGlzIHRoZSBjYXNlLiAqLworCQlpZiAodXMtPmZsYWdzICYgVVNfRkxfQ0FQQUNJVFlfSEVVUklTVElDUykKKwkJCXNkZXYtPmd1ZXNzX2NhcGFjaXR5ID0gMTsKKwogCQkvKiBTb21lIGRldmljZXMgcmVwb3J0IGEgU0NTSSByZXZpc2lvbiBsZXZlbCBhYm92ZSAyIGJ1dCBhcmUKIAkJICogdW5hYmxlIHRvIGhhbmRsZSB0aGUgUkVQT1JUIExVTlMgY29tbWFuZCAoZm9yIHdoaWNoCiAJCSAqIHN1cHBvcnQgaXMgbWFuZGF0b3J5IGF0IGxldmVsIDMpLiAgU2luY2Ugd2UgYWxyZWFkeSBoYXZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCBmNDlhNjJmLi45NjQ0YThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTExMDEsNiArMTEwMSwxNSBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfU0lOR0xFX0xVTiksCiAKKy8qIFN1Ym1pdHRlZCBieSBEeWxhbiBUYWZ0IDxkMTNmMDBsQGdtYWlsLmNvbT4KKyAqIFVTX0ZMX0lHTk9SRV9SRVNJRFVFIE5lZWRlZAorICovCitVTlVTVUFMX0RFViggIDB4MDhjYSwgMHgzMTAzLCAweDAxMDAsIDB4MDEwMCwKKyAgICAgICAgICAgICAgICAiQUlQVEVLIiwKKyAgICAgICAgICAgICAgICAiQWlwdGVrIFVTQiBLZXljaGFpbiBNUDMgUGxheWVyIiwKKyAgICAgICAgICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKyAgICAgICAgICAgICAgICBVU19GTF9JR05PUkVfUkVTSURVRSksCisKIC8qIEVudHJ5IG5lZWRlZCBmb3IgZmxhZ3MuIE1vcmVvdmVyLCBhbGwgZGV2aWNlcyB3aXRoIHRoaXMgSUQgdXNlCiAgKiBidWxrLW9ubHkgdHJhbnNwb3J0LCBidXQgX3NvbWVfIGZhbHNlbHkgcmVwb3J0IENvbnRyb2wvQnVsayBpbnN0ZWFkLgogICogT25lIGV4YW1wbGUgaXMgIlRydW1waW9uIERpZ2l0YWwgUmVzZWFyY2ggTVlNUDMiLgpAQCAtMTMxMSwxMiArMTMyMCwxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9fV1BfREVURUNUICksCiAKLS8qIFJlcG9ydGVkIGJ5IEphbiBNYXRlIDxtYXRlQGZpaXQuc3R1YmEuc2s+ICovCisvKiBSZXBvcnRlZCBieSBKYW4gTWF0ZSA8bWF0ZUBmaWl0LnN0dWJhLnNrPgorICogYW5kIGJ5IFNvZXJlbiBTb25uZW5idXJnIDxrZXJuZWxAbm43LmRlPiAqLwogVU5VU1VBTF9ERVYoICAweDBmY2UsIDB4ZTAzMCwgMHgwMDAwLCAweDAwMDAsCiAJCSJTb255IEVyaWNzc29uIiwKIAkJIlA5OTBpIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCi0JCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgfCBVU19GTF9JR05PUkVfUkVTSURVRSApLAogCiAvKiBSZXBvcnRlZCBieSBFbW1hbnVlbCBWYXNpbGFraXMgPGV2YXNAZm9ydGhuZXQuZ3I+ICovCiBVTlVTVUFMX0RFViggIDB4MGZjZSwgMHhlMDMxLCAweDAwMDAsIDB4MDAwMCwKQEAgLTEzODUsNiArMTM5NSwxNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKIAorLyogUmVwb3J0ZWQgYnkgVGhvbWFzIEJhZWNobGVyIDx0aG9tYXNAYXJjaGxpbnV4Lm9yZz4KKyAqIEZpeGVzIEkvTyBlcnJvcnMgd2l0aCBUZWFjIEhELTM1UFUgZGV2aWNlcworICovCisKK1VOVVNVQUxfREVWKCAweDE2NTIsIDB4NjYwMCwgMHgwMjAxLCAweDAyMDEsCisgICAgICAgICAgICAgICAiU3VwZXIgVG9wIiwKKyAgICAgICAgICAgICAgICJVU0IgMi4wICBJREUgREVWSUNFIiwKKyAgICAgICAgICAgICAgIFVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorICAgICAgICAgICAgICAgVVNfRkxfSUdOT1JFX1JFU0lEVUUpLAorCiAvKiBwYXRjaCBzdWJtaXR0ZWQgYnkgRGF2aWRlIFBlcmluaSA8cGVyaW5pLmRhdmlkZUBkcHNvZnR3YXJlLm9yZz4KICAqIGFuZCBSZW5hdG8gUGVyaW5pIDxycGVyaW5pQGVtYWlsLml0PgogICovCkBAIC0xNDIzLDcgKzE0NDMsNyBAQAogCQkiRGF0YVN0b3IiLAogCQkiVVNCNDUwMCBGVzEuMDQiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJVVNfRkxfRklYX0NBUEFDSVRZKSwKKwkJVVNfRkxfQ0FQQUNJVFlfSEVVUklTVElDUyksCiAKIC8qIENvbnRyb2wvQnVsayB0cmFuc3BvcnQgZm9yIGFsbCBTdWJDbGFzcyB2YWx1ZXMgKi8KIFVTVUFMX0RFVihVU19TQ19SQkMsIFVTX1BSX0NCLCBVU0JfVVNfVFlQRV9TVE9SKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jIGIvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKaW5kZXggMjk2YjA5MS4uNDY5MjlhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKKysrIGIvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKQEAgLTkwLDE0ICs5MCwxNiBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JLyogcHJldmVudCB0aGUgZGV2aWNlIGZyb20gYmVpbmcgYXV0b3N1c3BlbmRlZCAqLwotCXJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShpbnRlcmZhY2UpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdDsKLQogCS8qIGluY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgZm9yIHRoZSBkZXZpY2UgKi8KIAlrcmVmX2dldCgmZGV2LT5rcmVmKTsKIAorCS8qIHByZXZlbnQgdGhlIGRldmljZSBmcm9tIGJlaW5nIGF1dG9zdXNwZW5kZWQgKi8KKwlyZXR2YWwgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoaW50ZXJmYWNlKTsKKwlpZiAocmV0dmFsKSB7CisJCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHNrZWxfZGVsZXRlKTsKKwkJZ290byBleGl0OworCX0KKwogCS8qIHNhdmUgb3VyIG9iamVjdCBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggODg3NGNmMi4uYzE1MzZkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtNCwyMCArNCw3IEBACiAKIG1lbnUgIkdyYXBoaWNzIHN1cHBvcnQiCiAKLWNvbmZpZyBGSVJNV0FSRV9FRElECi0gICAgICAgYm9vbCAiRW5hYmxlIGZpcm13YXJlIEVESUQiCi0gICAgICAgZGVmYXVsdCB5Ci0gICAgICAgLS0taGVscC0tLQotICAgICAgICAgVGhpcyBlbmFibGVzIGFjY2VzcyB0byB0aGUgRURJRCB0cmFuc2ZlcnJlZCBmcm9tIHRoZSBmaXJtd2FyZS4KLQkgT24gdGhlIGkzODYsIHRoaXMgaXMgZnJvbSB0aGUgVmlkZW8gQklPUy4gRW5hYmxlIHRoaXMgaWYgRERDL0kyQwotCSB0cmFuc2ZlcnMgZG8gbm90IHdvcmsgZm9yIHlvdXIgZHJpdmVyIGFuZCBpZiB5b3UgYXJlIHVzaW5nCi0JIG52aWRpYWZiLCBpODEwZmIgb3Igc2F2YWdlZmIuCi0KLQkgSW4gZ2VuZXJhbCwgY2hvb3NpbmcgWSBmb3IgdGhpcyBvcHRpb24gaXMgc2FmZS4gIElmIHlvdQotCSBleHBlcmllbmNlIGV4dHJlbWVseSBsb25nIGRlbGF5cyB3aGlsZSBib290aW5nIGJlZm9yZSB5b3UgZ2V0Ci0JIHNvbWV0aGluZyBvbiB5b3VyIGRpc3BsYXksIHRyeSBzZXR0aW5nIHRoaXMgdG8gTi4gIE1hdHJveCBjYXJkcyBpbgotCSBjb21iaW5hdGlvbiB3aXRoIGNlcnRhaW4gbW90aGVyYm9hcmRzIGFuZCBtb25pdG9ycyBhcmUga25vd24gdG8KLQkgc3VmZmVyIGZyb20gdGhpcyBwcm9ibGVtLgorc291cmNlICJkcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnIgogCiBjb25maWcgRkIKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgZnJhbWUgYnVmZmVyIGRldmljZXMiCkBAIC01Myw5ICs0MCwyNyBAQAogCSAgKGUuZy4gYW4gYWNjZWxlcmF0ZWQgWCBzZXJ2ZXIpIGFuZCB0aGF0IGFyZSBub3QgZnJhbWUgYnVmZmVyCiAJICBkZXZpY2UtYXdhcmUgbWF5IGNhdXNlIHVuZXhwZWN0ZWQgcmVzdWx0cy4gSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEZJUk1XQVJFX0VESUQKKyAgICAgICBib29sICJFbmFibGUgZmlybXdhcmUgRURJRCIKKyAgICAgICBkZXBlbmRzIG9uIEZCCisgICAgICAgZGVmYXVsdCBuCisgICAgICAgLS0taGVscC0tLQorICAgICAgICAgVGhpcyBlbmFibGVzIGFjY2VzcyB0byB0aGUgRURJRCB0cmFuc2ZlcnJlZCBmcm9tIHRoZSBmaXJtd2FyZS4KKwkgT24gdGhlIGkzODYsIHRoaXMgaXMgZnJvbSB0aGUgVmlkZW8gQklPUy4gRW5hYmxlIHRoaXMgaWYgRERDL0kyQworCSB0cmFuc2ZlcnMgZG8gbm90IHdvcmsgZm9yIHlvdXIgZHJpdmVyIGFuZCBpZiB5b3UgYXJlIHVzaW5nCisJIG52aWRpYWZiLCBpODEwZmIgb3Igc2F2YWdlZmIuCisKKwkgSW4gZ2VuZXJhbCwgY2hvb3NpbmcgWSBmb3IgdGhpcyBvcHRpb24gaXMgc2FmZS4gIElmIHlvdQorCSBleHBlcmllbmNlIGV4dHJlbWVseSBsb25nIGRlbGF5cyB3aGlsZSBib290aW5nIGJlZm9yZSB5b3UgZ2V0CisJIHNvbWV0aGluZyBvbiB5b3VyIGRpc3BsYXksIHRyeSBzZXR0aW5nIHRoaXMgdG8gTi4gIE1hdHJveCBjYXJkcyBpbgorCSBjb21iaW5hdGlvbiB3aXRoIGNlcnRhaW4gbW90aGVyYm9hcmRzIGFuZCBtb25pdG9ycyBhcmUga25vd24gdG8KKwkgc3VmZmVyIGZyb20gdGhpcyBwcm9ibGVtLgorCiBjb25maWcgRkJfRERDCiAgICAgICAgdHJpc3RhdGUKLSAgICAgICBkZXBlbmRzIG9uIEZCICYmIEkyQyAmJiBJMkNfQUxHT0JJVAorICAgICAgIGRlcGVuZHMgb24gRkIKKyAgICAgICBzZWxlY3QgSTJDX0FMR09CSVQKKyAgICAgICBzZWxlY3QgSTJDCiAgICAgICAgZGVmYXVsdCBuCiAKIGNvbmZpZyBGQl9DRkJfRklMTFJFQ1QKQEAgLTEzNCw2ICsxMzksOSBAQAogCSBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgdG8gb25lIGRyaXZlciwgbWF0cm94ZmIuICBJZgogCSB1bnN1cmUsIHNheSBOLgogCitjb21tZW50ICJGcmFtYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBGQgorCiBjb25maWcgRkJfQ0lSUlVTCiAJdHJpc3RhdGUgIkNpcnJ1cyBMb2dpYyBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgKFpPUlJPIHx8IFBDSSkKQEAgLTY3MSw2ICs2NzksNyBAQAogCWRlcGVuZHMgb24gRkIgJiYgUENJCiAJc2VsZWN0IEkyQ19BTEdPQklUIGlmIEZCX05WSURJQV9JMkMKIAlzZWxlY3QgSTJDIGlmIEZCX05WSURJQV9JMkMKKwlzZWxlY3QgRkJfQkFDS0xJR0hUIGlmIEZCX05WSURJQV9CQUNLTElHSFQKIAlzZWxlY3QgRkJfTU9ERV9IRUxQRVJTCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKQEAgLTY5OSw4ICs3MDgsNyBAQAogCiBjb25maWcgRkJfTlZJRElBX0JBQ0tMSUdIVAogCWJvb2wgIlN1cHBvcnQgZm9yIGJhY2tsaWdodCBjb250cm9sIgotCWRlcGVuZHMgb24gRkJfTlZJRElBICYmIFBNQUNfQkFDS0xJR0hUCi0Jc2VsZWN0IEZCX0JBQ0tMSUdIVAorCWRlcGVuZHMgb24gRkJfTlZJRElBCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBiYWNrbGlnaHQgb2YgeW91ciBkaXNwbGF5LgpAQCAtNzA4LDkgKzcxNiw4IEBACiBjb25maWcgRkJfUklWQQogCXRyaXN0YXRlICJuVmlkaWEgUml2YSBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgUENJCi0Jc2VsZWN0IEkyQ19BTEdPQklUIGlmIEZCX1JJVkFfSTJDCi0Jc2VsZWN0IEkyQyBpZiBGQl9SSVZBX0kyQwogCXNlbGVjdCBGQl9EREMgaWYgRkJfUklWQV9JMkMKKwlzZWxlY3QgRkJfQkFDS0xJR0hUIGlmIEZCX1JJVkFfQkFDS0xJR0hUCiAJc2VsZWN0IEZCX01PREVfSEVMUEVSUwogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCkBAIC03NDcsOCArNzU0LDcgQEAKIAogY29uZmlnIEZCX1JJVkFfQkFDS0xJR0hUCiAJYm9vbCAiU3VwcG9ydCBmb3IgYmFja2xpZ2h0IGNvbnRyb2wiCi0JZGVwZW5kcyBvbiBGQl9SSVZBICYmIFBNQUNfQkFDS0xJR0hUCi0Jc2VsZWN0IEZCX0JBQ0tMSUdIVAorCWRlcGVuZHMgb24gRkJfUklWQQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29udHJvbCB0aGUgYmFja2xpZ2h0IG9mIHlvdXIgZGlzcGxheS4KQEAgLTc5OCw4ICs4MDQsNiBAQAogY29uZmlnIEZCX0k4MTBfSTJDCiAJYm9vbCAiRW5hYmxlIEREQyBTdXBwb3J0IgogCWRlcGVuZHMgb24gRkJfSTgxMCAmJiBGQl9JODEwX0dURgotCXNlbGVjdCBJMkMKLQlzZWxlY3QgSTJDX0FMR09CSVQKIAlzZWxlY3QgRkJfRERDCiAJaGVscAogCkBAIC05ODksOSArOTkzLDggQEAKIGNvbmZpZyBGQl9SQURFT04KIAl0cmlzdGF0ZSAiQVRJIFJhZGVvbiBkaXNwbGF5IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBQQ0kKLQlzZWxlY3QgSTJDX0FMR09CSVQgaWYgRkJfUkFERU9OX0kyQwotCXNlbGVjdCBJMkMgaWYgRkJfUkFERU9OX0kyQwogCXNlbGVjdCBGQl9EREMgaWYgRkJfUkFERU9OX0kyQworCXNlbGVjdCBGQl9CQUNLTElHSFQgaWYgRkJfUkFERU9OX0JBQ0tMSUdIVAogCXNlbGVjdCBGQl9NT0RFX0hFTFBFUlMKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQpAQCAtMTAyMSw4ICsxMDI0LDcgQEAKIAogY29uZmlnIEZCX1JBREVPTl9CQUNLTElHSFQKIAlib29sICJTdXBwb3J0IGZvciBiYWNrbGlnaHQgY29udHJvbCIKLQlkZXBlbmRzIG9uIEZCX1JBREVPTiAmJiBQTUFDX0JBQ0tMSUdIVAotCXNlbGVjdCBGQl9CQUNLTElHSFQKKwlkZXBlbmRzIG9uIEZCX1JBREVPTgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29udHJvbCB0aGUgYmFja2xpZ2h0IG9mIHlvdXIgZGlzcGxheS4KQEAgLTEwNDIsNiArMTA0NCw3IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9CQUNLTElHSFQgaWYgRkJfQVRZMTI4X0JBQ0tMSUdIVAogCXNlbGVjdCBGQl9NQUNNT0RFUyBpZiBQUENfUE1BQwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGdyYXBoaWNzIGJvYXJkcyB3aXRoIHRoZSBBVEkgUmFnZTEyOCBjaGlwcy4KQEAgLTEwNTMsOCArMTA1Niw3IEBACiAKIGNvbmZpZyBGQl9BVFkxMjhfQkFDS0xJR0hUCiAJYm9vbCAiU3VwcG9ydCBmb3IgYmFja2xpZ2h0IGNvbnRyb2wiCi0JZGVwZW5kcyBvbiBGQl9BVFkxMjggJiYgUE1BQ19CQUNLTElHSFQKLQlzZWxlY3QgRkJfQkFDS0xJR0hUCisJZGVwZW5kcyBvbiBGQl9BVFkxMjgKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIGJhY2tsaWdodCBvZiB5b3VyIGRpc3BsYXkuCkBAIC0xMDY1LDYgKzEwNjcsNyBAQAogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgRkJfQkFDS0xJR0hUIGlmIEZCX0FUWV9CQUNLTElHSFQKIAlzZWxlY3QgRkJfTUFDTU9ERVMgaWYgUFBDCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgZ3JhcGhpY3MgYm9hcmRzIHdpdGggdGhlIEFUSSBNYWNoNjQgY2hpcHMuCkBAIC0xMTAzLDggKzExMDYsNyBAQAogCiBjb25maWcgRkJfQVRZX0JBQ0tMSUdIVAogCWJvb2wgIlN1cHBvcnQgZm9yIGJhY2tsaWdodCBjb250cm9sIgotCWRlcGVuZHMgb24gRkJfQVRZICYmIFBNQUNfQkFDS0xJR0hUCi0Jc2VsZWN0IEZCX0JBQ0tMSUdIVAorCWRlcGVuZHMgb24gRkJfQVRZCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBiYWNrbGlnaHQgb2YgeW91ciBkaXNwbGF5LgpAQCAtMTEyMyw4ICsxMTI1LDYgQEAKIGNvbmZpZyBGQl9TQVZBR0UKIAl0cmlzdGF0ZSAiUzMgU2F2YWdlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBQQ0kgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IEkyQ19BTEdPQklUIGlmIEZCX1NBVkFHRV9JMkMKLQlzZWxlY3QgSTJDIGlmIEZCX1NBVkFHRV9JMkMKIAlzZWxlY3QgRkJfRERDIGlmIEZCX1NBVkFHRV9JMkMKIAlzZWxlY3QgRkJfTU9ERV9IRUxQRVJTCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVApAQCAtMTU3Myw2ICsxNTczLDI0IEBACiAJICBUdXJuIG9uIGRlYnVnZ2luZyBtZXNzYWdlcy4gTm90ZSB0aGF0IHlvdSBjYW4gc2V0L3Vuc2V0IGF0IHJ1biB0aW1lCiAJICB0aHJvdWdoIHN5c2ZzCiAKK2NvbmZpZyBGQl9TTTUwMQorCXRyaXN0YXRlICJTaWxpY29uIE1vdGlvbiBTTTUwMSBmcmFtZWJ1ZmZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkIgJiYgTUZEX1NNNTAxCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCS0tLWhlbHAtLS0KKwkgIEZyYW1lIGJ1ZmZlciBkcml2ZXIgZm9yIHRoZSBDUlQgYW5kIExDRCBjb250cm9sbGVycyBpbiB0aGUgU2lsaWNvbgorCSAgTW90aW9uIFNNNTAxLgorCisJICBUaGlzIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaCBjYW4gYmUKKwkgIGluc2VydGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdSB3YW50KS4gVGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc201MDFmYi4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwKKwkgIHNheSBNIGhlcmUgYW5kIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dD4uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwogY29uZmlnIEZCX1BOWDQwMDhfRFVNCiAJdHJpc3RhdGUgIkRpc3BsYXkgVXBkYXRlIE1vZHVsZSBzdXBwb3J0IG9uIFBoaWxpcHMgUE5YNDAwOCBib2FyZCIKIAlkZXBlbmRzIG9uIEZCICYmIEFSQ0hfUE5YNDAwOApAQCAtMTYzOSw2ICsxNjU3LDcgQEAKIAkgIHRoZSB2ZmJfZW5hYmxlPTEgb3B0aW9uLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgorCiBpZiBWVAogCXNvdXJjZSAiZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWciCiBlbmRpZgpAQCAtMTY0Nyw5ICsxNjY2LDUgQEAKIAlzb3VyY2UgImRyaXZlcnMvdmlkZW8vbG9nby9LY29uZmlnIgogZW5kaWYKIAotaWYgU1lTRlMKLQlzb3VyY2UgImRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWciCi1lbmRpZgotCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCmluZGV4IDY4MDFlZGYuLjc2MDMwNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogCiBvYmotJChDT05GSUdfVlQpCQkgICs9IGNvbnNvbGUvCiBvYmotJChDT05GSUdfTE9HTykJCSAgKz0gbG9nby8KLW9iai0kKENPTkZJR19TWVNGUykJCSAgKz0gYmFja2xpZ2h0Lworb2JqLXkJCQkJICArPSBiYWNrbGlnaHQvCiAKIG9iai0kKENPTkZJR19GQl9DRkJfRklMTFJFQ1QpICArPSBjZmJmaWxscmVjdC5vCiBvYmotJChDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBKSAgKz0gY2ZiY29weWFyZWEubwpAQCAtOTgsNiArOTgsNyBAQAogb2JqLSQoQ09ORklHX0ZCX1BOWDQwMDhfRFVNX1JHQikgICs9IHBueDQwMDgvCiBvYmotJChDT05GSUdfRkJfSUJNX0dYVDQ1MDApCSAgKz0gZ3h0NDUwMC5vCiBvYmotJChDT05GSUdfRkJfUFMzKQkJICArPSBwczNmYi5vCitvYmotJChDT05GSUdfRkJfU001MDEpICAgICAgICAgICAgKz0gc201MDFmYi5vCiAKICMgUGxhdGZvcm0gb3IgZmFsbGJhY2sgZHJpdmVycyBnbyBoZXJlCiBvYmotJChDT05GSUdfRkJfVkVTQSkgICAgICAgICAgICAgKz0gdmVzYWZiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCmluZGV4IDJlOTc2ZmYuLjg3MjZjMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwpAQCAtMTY5NSw5ICsxNjk1LDYgQEAKICNpZmRlZiBDT05GSUdfRkJfQVRZMTI4X0JBQ0tMSUdIVAogI2RlZmluZSBNQVhfTEVWRUwgMHhGRgogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIGF0eTEyOF9ibF9kYXRhOwotCi0vKiBDYWxsIHdpdGggZmJfaW5mby0+YmxfbXV0ZXggaGVsZCAqLwogc3RhdGljIGludCBhdHkxMjhfYmxfZ2V0X2xldmVsX2JyaWdodG5lc3Moc3RydWN0IGF0eTEyOGZiX3BhciAqcGFyLAogCQlpbnQgbGV2ZWwpCiB7CkBAIC0xNzA1LDYgKzE3MDIsNyBAQAogCWludCBhdHlsZXZlbDsKIAogCS8qIEdldCBhbmQgY29udmVydCB0aGUgdmFsdWUgKi8KKwkvKiBObyBsb2NraW5nIG9mIGJsX2N1cnZlIHNpbmNlIHdlIHJlYWQgYSBzaW5nbGUgdmFsdWUgKi8KIAlhdHlsZXZlbCA9IE1BWF9MRVZFTCAtCiAJCShpbmZvLT5ibF9jdXJ2ZVtsZXZlbF0gKiBGQl9CQUNLTElHSFRfTUFYIC8gTUFYX0xFVkVMKTsKIApAQCAtMTcyNCwxOSArMTcyMiwxOCBAQAogLyogVGhhdCBvbmUgcHJldmVudHMgcHJvcGVyIENSVCBvdXRwdXQgd2l0aCBMQ0Qgb2ZmICovCiAjdW5kZWYgQkFDS0xJR0hUX0RBQ19PRkYKIAotLyogQ2FsbCB3aXRoIGZiX2luZm8tPmJsX211dGV4IGhlbGQgKi8KLXN0YXRpYyBpbnQgX19hdHkxMjhfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCitzdGF0aWMgaW50IGF0eTEyOF9ibF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlzdHJ1Y3QgYXR5MTI4ZmJfcGFyICpwYXIgPSBjbGFzc19nZXRfZGV2ZGF0YSgmYmQtPmNsYXNzX2Rldik7CiAJdW5zaWduZWQgaW50IHJlZyA9IGF0eV9sZF9sZTMyKExWRFNfR0VOX0NOVEwpOwogCWludCBsZXZlbDsKIAotCWlmIChiZC0+cHJvcHMtPnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTksgfHwKLQkgICAgYmQtPnByb3BzLT5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LIHx8CisJaWYgKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LIHx8CisJICAgIGJkLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LIHx8CiAJICAgICFwYXItPmxjZF9vbikKIAkJbGV2ZWwgPSAwOwogCWVsc2UKLQkJbGV2ZWwgPSBiZC0+cHJvcHMtPmJyaWdodG5lc3M7CisJCWxldmVsID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CiAKIAlyZWcgfD0gTFZEU19CTF9NT0RfRU4gfCBMVkRTX0JMT047CiAJaWYgKGxldmVsID4gMCkgewpAQCAtMTc3OCw0MyArMTc3NSwyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0eTEyOF9ibF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKLXsKLQlzdHJ1Y3QgYXR5MTI4ZmJfcGFyICpwYXIgPSBjbGFzc19nZXRfZGV2ZGF0YSgmYmQtPmNsYXNzX2Rldik7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGFyLT5wZGV2KTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmaW5mby0+YmxfbXV0ZXgpOwotCXJldCA9IF9fYXR5MTI4X2JsX3VwZGF0ZV9zdGF0dXMoYmQpOwotCW11dGV4X3VubG9jaygmaW5mby0+YmxfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBhdHkxMjhfYmxfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXJldHVybiBiZC0+cHJvcHMtPmJyaWdodG5lc3M7CisJcmV0dXJuIGJkLT5wcm9wcy5icmlnaHRuZXNzOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIGF0eTEyOF9ibF9kYXRhID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhdHkxMjhfYmxfZGF0YSA9IHsKIAkuZ2V0X2JyaWdodG5lc3MJPSBhdHkxMjhfYmxfZ2V0X2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMJPSBhdHkxMjhfYmxfdXBkYXRlX3N0YXR1cywKLQkubWF4X2JyaWdodG5lc3MJPSAoRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDEpLAogfTsKIAogc3RhdGljIHZvaWQgYXR5MTI4X2JsX3NldF9wb3dlcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHBvd2VyKQogewotCW11dGV4X2xvY2soJmluZm8tPmJsX211dGV4KTsKLQogCWlmIChpbmZvLT5ibF9kZXYpIHsKLQkJZG93bigmaW5mby0+YmxfZGV2LT5zZW0pOwotCQlpbmZvLT5ibF9kZXYtPnByb3BzLT5wb3dlciA9IHBvd2VyOwotCQlfX2F0eTEyOF9ibF91cGRhdGVfc3RhdHVzKGluZm8tPmJsX2Rldik7Ci0JCXVwKCZpbmZvLT5ibF9kZXYtPnNlbSk7CisJCWluZm8tPmJsX2Rldi0+cHJvcHMucG93ZXIgPSBwb3dlcjsKKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoaW5mby0+YmxfZGV2KTsKIAl9Ci0KLQltdXRleF91bmxvY2soJmluZm8tPmJsX211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgYXR5MTI4X2JsX2luaXQoc3RydWN0IGF0eTEyOGZiX3BhciAqcGFyKQpAQCAtMTg0MSwyNSArMTgxNywxNSBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCW11dGV4X2xvY2soJmluZm8tPmJsX211dGV4KTsKIAlpbmZvLT5ibF9kZXYgPSBiZDsKIAlmYl9ibF9kZWZhdWx0X2N1cnZlKGluZm8sIDAsCiAJCSA2MyAqIEZCX0JBQ0tMSUdIVF9NQVggLyBNQVhfTEVWRUwsCiAJCTIxOSAqIEZCX0JBQ0tMSUdIVF9NQVggLyBNQVhfTEVWRUwpOwotCW11dGV4X3VubG9jaygmaW5mby0+YmxfbXV0ZXgpOwogCi0JZG93bigmYmQtPnNlbSk7Ci0JYmQtPnByb3BzLT5icmlnaHRuZXNzID0gYXR5MTI4X2JsX2RhdGEubWF4X2JyaWdodG5lc3M7Ci0JYmQtPnByb3BzLT5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7Ci0JYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKGJkKTsKLQl1cCgmYmQtPnNlbSk7Ci0KLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7Ci0JaWYgKCFwbWFjX2JhY2tsaWdodCkKLQkJcG1hY19iYWNrbGlnaHQgPSBiZDsKLQltdXRleF91bmxvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKLSNlbmRpZgorCWJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEZCX0JBQ0tMSUdIVF9MRVZFTFMgLSAxOworCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gYmQtPnByb3BzLm1heF9icmlnaHRuZXNzOworCWJkLT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmQpOwogCiAJcHJpbnRrKCJhdHkxMjg6IEJhY2tsaWdodCBpbml0aWFsaXplZCAoJXMpXG4iLCBuYW1lKTsKIApAQCAtMTg2OSwzMSArMTgzNSwxMCBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgYXR5MTI4X2JsX2V4aXQoc3RydWN0IGF0eTEyOGZiX3BhciAqcGFyKQorc3RhdGljIHZvaWQgYXR5MTI4X2JsX2V4aXQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBhci0+cGRldik7Ci0KLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7Ci0jZW5kaWYKLQotCW11dGV4X2xvY2soJmluZm8tPmJsX211dGV4KTsKLQlpZiAoaW5mby0+YmxfZGV2KSB7Ci0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0JCWlmIChwbWFjX2JhY2tsaWdodCA9PSBpbmZvLT5ibF9kZXYpCi0JCQlwbWFjX2JhY2tsaWdodCA9IE5VTEw7Ci0jZW5kaWYKLQotCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoaW5mby0+YmxfZGV2KTsKLQkJaW5mby0+YmxfZGV2ID0gTlVMTDsKLQotCQlwcmludGsoImF0eTEyODogQmFja2xpZ2h0IHVubG9hZGVkXG4iKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0KLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQltdXRleF91bmxvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKLSNlbmRpZgorCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihiZCk7CisJcHJpbnRrKCJhdHkxMjg6IEJhY2tsaWdodCB1bmxvYWRlZFxuIik7CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZCX0FUWTEyOF9CQUNLTElHSFQgKi8KIApAQCAtMjE4MCwxMSArMjEyNSwxMiBAQAogCiAJcGFyID0gaW5mby0+cGFyOwogCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwogI2lmZGVmIENPTkZJR19GQl9BVFkxMjhfQkFDS0xJR0hUCi0JYXR5MTI4X2JsX2V4aXQocGFyKTsKKwlhdHkxMjhfYmxfZXhpdChpbmZvLT5ibF9kZXYpOwogI2VuZGlmCiAKLQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogI2lmZGVmIENPTkZJR19NVFJSCiAJaWYgKHBhci0+bXRyci52cmFtX3ZhbGlkKQogCQltdHJyX2RlbChwYXItPm10cnIudnJhbSwgaW5mby0+Zml4LnNtZW1fc3RhcnQsCkBAIC0yMjE0LDExICsyMTYwLDYgQEAKIAlpZiAocGFyLT5sb2NrX2JsYW5rIHx8IHBhci0+YXNsZWVwKQogCQlyZXR1cm4gMDsKIAotI2lmZGVmIENPTkZJR19GQl9BVFkxMjhfQkFDS0xJR0hUCi0JaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpICYmIGJsYW5rKQotCQlhdHkxMjhfYmxfc2V0X3Bvd2VyKGZiLCBGQl9CTEFOS19QT1dFUkRPV04pOwotI2VuZGlmCi0KIAlpZiAoYmxhbmsgJiBGQl9CTEFOS19WU1lOQ19TVVNQRU5EKQogCQlzdGF0ZSB8PSAyOwogCWlmIChibGFuayAmIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQpCkBAIC0yMjMzLDExICsyMTc0LDYgQEAKIAkJYXR5MTI4X3NldF9sY2RfZW5hYmxlKHBhciwgcGFyLT5sY2Rfb24gJiYgIWJsYW5rKTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfRkJfQVRZMTI4X0JBQ0tMSUdIVAotCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSAmJiAhYmxhbmspCi0JCWF0eTEyOF9ibF9zZXRfcG93ZXIoZmIsIEZCX0JMQU5LX1VOQkxBTkspOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IDMwMTYxMmMuLmE3ZTAwNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTIxMTQsMTUgKzIxMTQsMTMgQEAKICNpZmRlZiBDT05GSUdfRkJfQVRZX0JBQ0tMSUdIVAogI2RlZmluZSBNQVhfTEVWRUwgMHhGRgogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIGF0eV9ibF9kYXRhOwotCi0vKiBDYWxsIHdpdGggZmJfaW5mby0+YmxfbXV0ZXggaGVsZCAqLwogc3RhdGljIGludCBhdHlfYmxfZ2V0X2xldmVsX2JyaWdodG5lc3Moc3RydWN0IGF0eWZiX3BhciAqcGFyLCBpbnQgbGV2ZWwpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGFyLT5wZGV2KTsKIAlpbnQgYXR5bGV2ZWw7CiAKIAkvKiBHZXQgYW5kIGNvbnZlcnQgdGhlIHZhbHVlICovCisJLyogTm8gbG9ja2luZyBvZiBibF9jdXJ2ZSBzaW5jZSB3ZSByZWFkIGEgc2luZ2xlIHZhbHVlICovCiAJYXR5bGV2ZWwgPSBpbmZvLT5ibF9jdXJ2ZVtsZXZlbF0gKiBGQl9CQUNLTElHSFRfTUFYIC8gTUFYX0xFVkVMOwogCiAJaWYgKGF0eWxldmVsIDwgMCkKQEAgLTIxMzMsMTggKzIxMzEsMTcgQEAKIAlyZXR1cm4gYXR5bGV2ZWw7CiB9CiAKLS8qIENhbGwgd2l0aCBmYl9pbmZvLT5ibF9tdXRleCBoZWxkICovCi1zdGF0aWMgaW50IF9fYXR5X2JsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQorc3RhdGljIGludCBhdHlfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7CiAJc3RydWN0IGF0eWZiX3BhciAqcGFyID0gY2xhc3NfZ2V0X2RldmRhdGEoJmJkLT5jbGFzc19kZXYpOwogCXVuc2lnbmVkIGludCByZWcgPSBhdHlfbGRfbGNkKExDRF9NSVNDX0NOVEwsIHBhcik7CiAJaW50IGxldmVsOwogCi0JaWYgKGJkLT5wcm9wcy0+cG93ZXIgIT0gRkJfQkxBTktfVU5CTEFOSyB8fAotCSAgICBiZC0+cHJvcHMtPmZiX2JsYW5rICE9IEZCX0JMQU5LX1VOQkxBTkspCisJaWYgKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LIHx8CisJICAgIGJkLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQogCQlsZXZlbCA9IDA7CiAJZWxzZQotCQlsZXZlbCA9IGJkLT5wcm9wcy0+YnJpZ2h0bmVzczsKKwkJbGV2ZWwgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIAogCXJlZyB8PSAoQkxNT0RfRU4gfCBCSUFTTU9EX0VOKTsKIAlpZiAobGV2ZWwgPiAwKSB7CkBAIC0yMTU5LDQ1ICsyMTU2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXR5X2JsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQotewotCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IGNsYXNzX2dldF9kZXZkYXRhKCZiZC0+Y2xhc3NfZGV2KTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwYXItPnBkZXYpOwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0JcmV0ID0gX19hdHlfYmxfdXBkYXRlX3N0YXR1cyhiZCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IGF0eV9ibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7Ci0JcmV0dXJuIGJkLT5wcm9wcy0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gYmQtPnByb3BzLmJyaWdodG5lc3M7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgYXR5X2JsX2RhdGEgPSB7Ci0JLm93bmVyCSAgPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhdHlfYmxfZGF0YSA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSBhdHlfYmxfZ2V0X2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMJPSBhdHlfYmxfdXBkYXRlX3N0YXR1cywKLQkubWF4X2JyaWdodG5lc3MgPSAoRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDEpLAogfTsKIAotc3RhdGljIHZvaWQgYXR5X2JsX3NldF9wb3dlcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHBvd2VyKQotewotCW11dGV4X2xvY2soJmluZm8tPmJsX211dGV4KTsKLQotCWlmIChpbmZvLT5ibF9kZXYpIHsKLQkJZG93bigmaW5mby0+YmxfZGV2LT5zZW0pOwotCQlpbmZvLT5ibF9kZXYtPnByb3BzLT5wb3dlciA9IHBvd2VyOwotCQlfX2F0eV9ibF91cGRhdGVfc3RhdHVzKGluZm8tPmJsX2Rldik7Ci0JCXVwKCZpbmZvLT5ibF9kZXYtPnNlbSk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGF0eV9ibF9pbml0KHN0cnVjdCBhdHlmYl9wYXIgKnBhcikKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwYXItPnBkZXYpOwpAQCAtMjIxOCwyNSArMjE4NiwxNSBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCW11dGV4X2xvY2soJmluZm8tPmJsX211dGV4KTsKIAlpbmZvLT5ibF9kZXYgPSBiZDsKIAlmYl9ibF9kZWZhdWx0X2N1cnZlKGluZm8sIDAsCiAJCTB4M0YgKiBGQl9CQUNLTElHSFRfTUFYIC8gTUFYX0xFVkVMLAogCQkweEZGICogRkJfQkFDS0xJR0hUX01BWCAvIE1BWF9MRVZFTCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7CiAKLQlkb3duKCZiZC0+c2VtKTsKLQliZC0+cHJvcHMtPmJyaWdodG5lc3MgPSBhdHlfYmxfZGF0YS5tYXhfYnJpZ2h0bmVzczsKLQliZC0+cHJvcHMtPnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKLQliZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMoYmQpOwotCXVwKCZiZC0+c2VtKTsKLQotI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAotCW11dGV4X2xvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKLQlpZiAoIXBtYWNfYmFja2xpZ2h0KQotCQlwbWFjX2JhY2tsaWdodCA9IGJkOwotCW11dGV4X3VubG9jaygmcG1hY19iYWNrbGlnaHRfbXV0ZXgpOwotI2VuZGlmCisJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDE7CisJYmQtPnByb3BzLmJyaWdodG5lc3MgPSBiZC0+cHJvcHMubWF4X2JyaWdodG5lc3M7CisJYmQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CiAKIAlwcmludGsoImF0eTogQmFja2xpZ2h0IGluaXRpYWxpemVkICglcylcbiIsIG5hbWUpOwogCkBAIC0yMjQ2LDMwICsyMjA0LDEwIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBhdHlfYmxfZXhpdChzdHJ1Y3QgYXR5ZmJfcGFyICpwYXIpCitzdGF0aWMgdm9pZCBhdHlfYmxfZXhpdChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGFyLT5wZGV2KTsKLQotI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAotCW11dGV4X2xvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKLSNlbmRpZgotCi0JbXV0ZXhfbG9jaygmaW5mby0+YmxfbXV0ZXgpOwotCWlmIChpbmZvLT5ibF9kZXYpIHsKLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQkJaWYgKHBtYWNfYmFja2xpZ2h0ID09IGluZm8tPmJsX2RldikKLQkJCXBtYWNfYmFja2xpZ2h0ID0gTlVMTDsKLSNlbmRpZgotCi0JCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihpbmZvLT5ibF9kZXYpOwotCi0JCXByaW50aygiYXR5OiBCYWNrbGlnaHQgdW5sb2FkZWRcbiIpOwotCX0KLQltdXRleF91bmxvY2soJmluZm8tPmJsX211dGV4KTsKLQotI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAotCW11dGV4X3VubG9jaygmcG1hY19iYWNrbGlnaHRfbXV0ZXgpOwotI2VuZGlmCisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJkKTsKKwlwcmludGsoImF0eTogQmFja2xpZ2h0IHVubG9hZGVkXG4iKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19GQl9BVFlfQkFDS0xJR0hUICovCkBAIC0yODE0LDggKzI3NTIsNiBAQAogCQlyZXR1cm4gMDsKIAogI2lmZGVmIENPTkZJR19GQl9BVFlfQkFDS0xJR0hUCi0JaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpICYmIGJsYW5rID4gRkJfQkxBTktfTk9STUFMKQotCQlhdHlfYmxfc2V0X3Bvd2VyKGluZm8sIEZCX0JMQU5LX1BPV0VSRE9XTik7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QpCiAJaWYgKHBhci0+bGNkX3RhYmxlICYmIGJsYW5rID4gRkJfQkxBTktfTk9STUFMICYmCiAJICAgIChhdHlfbGRfbGNkKExDRF9HRU5fQ05UTCwgcGFyKSAmIExDRF9PTikpIHsKQEAgLTI4NDYsOCArMjc4Miw2IEBACiAJYXR5X3N0X2xlMzIoQ1JUQ19HRU5fQ05UTCwgZ2VuX2NudGwsIHBhcik7CiAKICNpZmRlZiBDT05GSUdfRkJfQVRZX0JBQ0tMSUdIVAotCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSAmJiBibGFuayA8PSBGQl9CTEFOS19OT1JNQUwpCi0JCWF0eV9ibF9zZXRfcG93ZXIoaW5mbywgRkJfQkxBTktfVU5CTEFOSyk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QpCiAJaWYgKHBhci0+bGNkX3RhYmxlICYmIGJsYW5rIDw9IEZCX0JMQU5LX05PUk1BTCAmJgogCSAgICAoYXR5X2xkX2xjZChMQ0RfR0VOX0NOVEwsIHBhcikgJiBMQ0RfT04pKSB7CkBAIC0zNzI2LDEzICszNjYwLDEzIEBACiAJYXR5X3NldF9jcnRjKHBhciwgJnNhdmVkX2NydGMpOwogCXBhci0+cGxsX29wcy0+c2V0X3BsbChpbmZvLCAmc2F2ZWRfcGxsKTsKIAorCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisKICNpZmRlZiBDT05GSUdfRkJfQVRZX0JBQ0tMSUdIVAogCWlmIChNNjRfSEFTKE1PQklMX0JVUykpCi0JCWF0eV9ibF9leGl0KHBhcik7CisJCWF0eV9ibF9leGl0KGluZm8tPmJsX2Rldik7CiAjZW5kaWYKIAotCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7Ci0KICNpZmRlZiBDT05GSUdfTVRSUgogCWlmIChwYXItPm10cnJfcmVnID49IDApIHsKIAkgICAgbXRycl9kZWwocGFyLT5tdHJyX3JlZywgMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKaW5kZXggM2FiZmQ0YS4uMGJlMjVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYwpAQCAtMTksOCArMTksNiBAQAogCiAjZGVmaW5lIE1BWF9SQURFT05fTEVWRUwgMHhGRgogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHJhZGVvbl9ibF9kYXRhOwotCiBzdHJ1Y3QgcmFkZW9uX2JsX3ByaXZkYXRhIHsKIAlzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm87CiAJdWludDhfdCBuZWdhdGl2ZTsKQEAgLTI5LDE3ICsyNywxMyBAQAogc3RhdGljIGludCByYWRlb25fYmxfZ2V0X2xldmVsX2JyaWdodG5lc3Moc3RydWN0IHJhZGVvbl9ibF9wcml2ZGF0YSAqcGRhdGEsCiAJCWludCBsZXZlbCkKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBkYXRhLT5yaW5mby0+aW5mbzsKIAlpbnQgcmxldmVsOwogCi0JbXV0ZXhfbG9jaygmaW5mby0+YmxfbXV0ZXgpOwotCiAJLyogR2V0IGFuZCBjb252ZXJ0IHRoZSB2YWx1ZSAqLworCS8qIE5vIGxvY2tpbmcgb2YgYmxfY3VydmUgc2luY2Ugd2UgcmVhZCBhIHNpbmdsZSB2YWx1ZSAqLwogCXJsZXZlbCA9IHBkYXRhLT5yaW5mby0+aW5mby0+YmxfY3VydmVbbGV2ZWxdICoKIAkJIEZCX0JBQ0tMSUdIVF9NQVggLyBNQVhfUkFERU9OX0xFVkVMOwogCi0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0KIAlpZiAocmxldmVsIDwgMCkKIAkJcmxldmVsID0gMDsKIAllbHNlIGlmIChybGV2ZWwgPiBNQVhfUkFERU9OX0xFVkVMKQpAQCAtNjUsMTEgKzU5LDExIEBACiAJICogYmFja2xpZ2h0LiBUaGlzIHByb3ZpZGVzIHNvbWUgZ3JlYXRlciBwb3dlciBzYXZpbmcgYW5kIHRoZSBkaXNwbGF5CiAJICogaXMgdXNlbGVzcyB3aXRob3V0IGJhY2tsaWdodCBhbnl3YXkuCiAJICovCi0gICAgICAgIGlmIChiZC0+cHJvcHMtPnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTksgfHwKLQkgICAgYmQtPnByb3BzLT5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorICAgICAgICBpZiAoYmQtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTksgfHwKKwkgICAgYmQtPnByb3BzLmZiX2JsYW5rICE9IEZCX0JMQU5LX1VOQkxBTkspCiAJCWxldmVsID0gMDsKIAllbHNlCi0JCWxldmVsID0gYmQtPnByb3BzLT5icmlnaHRuZXNzOworCQlsZXZlbCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwogCiAJZGVsX3RpbWVyX3N5bmMoJnJpbmZvLT5sdmRzX3RpbWVyKTsKIAlyYWRlb25fZW5naW5lX2lkbGUoKTsKQEAgLTEzMCwxNCArMTI0LDEyIEBACiAKIHN0YXRpYyBpbnQgcmFkZW9uX2JsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKLQlyZXR1cm4gYmQtPnByb3BzLT5icmlnaHRuZXNzOworCXJldHVybiBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyByYWRlb25fYmxfZGF0YSA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgcmFkZW9uX2JsX2RhdGEgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gcmFkZW9uX2JsX2dldF9icmlnaHRuZXNzLAogCS51cGRhdGVfc3RhdHVzCT0gcmFkZW9uX2JsX3VwZGF0ZV9zdGF0dXMsCi0JLm1heF9icmlnaHRuZXNzID0gKEZCX0JBQ0tMSUdIVF9MRVZFTFMgLSAxKSwKIH07CiAKIHZvaWQgcmFkZW9uZmJfYmxfaW5pdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCkBAIC0xODgsMjUgKzE4MCwxNSBAQAogCQltYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNSIpOwogI2VuZGlmCiAKLQltdXRleF9sb2NrKCZyaW5mby0+aW5mby0+YmxfbXV0ZXgpOwogCXJpbmZvLT5pbmZvLT5ibF9kZXYgPSBiZDsKIAlmYl9ibF9kZWZhdWx0X2N1cnZlKHJpbmZvLT5pbmZvLCAwLAogCQkgNjMgKiBGQl9CQUNLTElHSFRfTUFYIC8gTUFYX1JBREVPTl9MRVZFTCwKIAkJMjE3ICogRkJfQkFDS0xJR0hUX01BWCAvIE1BWF9SQURFT05fTEVWRUwpOwotCW11dGV4X3VubG9jaygmcmluZm8tPmluZm8tPmJsX211dGV4KTsKIAotCWRvd24oJmJkLT5zZW0pOwotCWJkLT5wcm9wcy0+YnJpZ2h0bmVzcyA9IHJhZGVvbl9ibF9kYXRhLm1heF9icmlnaHRuZXNzOwotCWJkLT5wcm9wcy0+cG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwotCWJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cyhiZCk7Ci0JdXAoJmJkLT5zZW0pOwotCi0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0JbXV0ZXhfbG9jaygmcG1hY19iYWNrbGlnaHRfbXV0ZXgpOwotCWlmICghcG1hY19iYWNrbGlnaHQpCi0JCXBtYWNfYmFja2xpZ2h0ID0gYmQ7Ci0JbXV0ZXhfdW5sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7Ci0jZW5kaWYKKwliZC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSBGQl9CQUNLTElHSFRfTEVWRUxTIC0gMTsKKwliZC0+cHJvcHMuYnJpZ2h0bmVzcyA9IGJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzczsKKwliZC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOworCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJkKTsKIAogCXByaW50aygicmFkZW9uZmI6IEJhY2tsaWdodCBpbml0aWFsaXplZCAoJXMpXG4iLCBuYW1lKTsKIApAQCAtMjE5LDI5ICsyMDEsMTYgQEAKIAogdm9pZCByYWRlb25mYl9ibF9leGl0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKIHsKLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7Ci0jZW5kaWYKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSByaW5mby0+aW5mby0+YmxfZGV2OwogCi0JbXV0ZXhfbG9jaygmcmluZm8tPmluZm8tPmJsX211dGV4KTsKLQlpZiAocmluZm8tPmluZm8tPmJsX2RldikgeworCWlmIChiZCkgewogCQlzdHJ1Y3QgcmFkZW9uX2JsX3ByaXZkYXRhICpwZGF0YTsKIAotI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAotCQlpZiAocG1hY19iYWNrbGlnaHQgPT0gcmluZm8tPmluZm8tPmJsX2RldikKLQkJCXBtYWNfYmFja2xpZ2h0ID0gTlVMTDsKLSNlbmRpZgotCi0JCXBkYXRhID0gY2xhc3NfZ2V0X2RldmRhdGEoJnJpbmZvLT5pbmZvLT5ibF9kZXYtPmNsYXNzX2Rldik7Ci0JCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihyaW5mby0+aW5mby0+YmxfZGV2KTsKKwkJcGRhdGEgPSBjbGFzc19nZXRfZGV2ZGF0YSgmYmQtPmNsYXNzX2Rldik7CisJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihiZCk7CiAJCWtmcmVlKHBkYXRhKTsKIAkJcmluZm8tPmluZm8tPmJsX2RldiA9IE5VTEw7CiAKIAkJcHJpbnRrKCJyYWRlb25mYjogQmFja2xpZ2h0IHVubG9hZGVkXG4iKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyaW5mby0+aW5mby0+YmxfbXV0ZXgpOwotCi0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0JbXV0ZXhfdW5sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7Ci0jZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCmluZGV4IDBlZDU3N2UuLjdlMjI4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwpAQCAtMjM5Myw3ICsyMzkzLDYgQEAKICAgICAgICAgaWYgKCFyaW5mbykKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLQlyYWRlb25mYl9ibF9leGl0KHJpbmZvKTsKIAlyYWRlb25mYl9wbV9leGl0KHJpbmZvKTsKIAogCWlmIChyaW5mby0+bW9uMV9FRElEKQpAQCAtMjQyMCw2ICsyNDE5LDggQEAKIAogICAgICAgICB1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCisgICAgICAgIHJhZGVvbmZiX2JsX2V4aXQocmluZm8pOworCiAgICAgICAgIGlvdW5tYXAocmluZm8tPm1taW9fYmFzZSk7CiAgICAgICAgIGlvdW5tYXAocmluZm8tPmZiX2Jhc2UpOwogIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggMDJmMTUyOS4uNDdkMTViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC0xOSwxMSArMTksNiBAQAogCSAgVG8gaGF2ZSBzdXBwb3J0IGZvciB5b3VyIHNwZWNpZmljIExDRCBwYW5lbCB5b3Ugd2lsbCBoYXZlIHRvCiAJICBzZWxlY3QgdGhlIHByb3BlciBkcml2ZXJzIHdoaWNoIGRlcGVuZCBvbiB0aGlzIG9wdGlvbi4KIAotY29uZmlnIEJBQ0tMSUdIVF9ERVZJQ0UKLQlib29sCi0JZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBMQ0RfQ0xBU1NfREVWSUNFCiAgICAgICAgIHRyaXN0YXRlICJMb3dsZXZlbCBMQ0QgY29udHJvbHMiCiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfTENEX1NVUFBPUlQKQEAgLTM3LDE0ICszMiw5IEBACiAJICBUbyBoYXZlIHN1cHBvcnQgZm9yIHlvdXIgc3BlY2lmaWMgTENEIHBhbmVsIHlvdSB3aWxsIGhhdmUgdG8KIAkgIHNlbGVjdCB0aGUgcHJvcGVyIGRyaXZlcnMgd2hpY2ggZGVwZW5kIG9uIHRoaXMgb3B0aW9uLgogCi1jb25maWcgTENEX0RFVklDRQotCWJvb2wKLQlkZXBlbmRzIG9uIExDRF9DTEFTU19ERVZJQ0UKLQlkZWZhdWx0IHkKLQogY29uZmlnIEJBQ0tMSUdIVF9DT1JHSQogCXRyaXN0YXRlICJTaGFycCBDb3JnaSBCYWNrbGlnaHQgRHJpdmVyIChTTCBTZXJpZXMpIgotCWRlcGVuZHMgb24gQkFDS0xJR0hUX0RFVklDRSAmJiBQWEFfU0hBUlBTTAorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBQWEFfU0hBUlBTTAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIElmIHlvdSBoYXZlIGEgU2hhcnAgWmF1cnVzIFNMLUM3eHgsIFNMLUN4eDAwIG9yIFNMLTYwMDB4IHNheSB5IHRvIGVuYWJsZSB0aGUKQEAgLTUyLDcgKzQyLDcgQEAKIAogY29uZmlnIEJBQ0tMSUdIVF9MT0NPTU8KIAl0cmlzdGF0ZSAiU2hhcnAgTE9DT01PIExDRC9CYWNrbGlnaHQgRHJpdmVyIgotCWRlcGVuZHMgb24gQkFDS0xJR0hUX0RFVklDRSAmJiBTSEFSUF9MT0NPTU8KKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgU0hBUlBfTE9DT01PCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgSWYgeW91IGhhdmUgYSBTaGFycCBaYXVydXMgU0wtNTUwMCAoQ29sbGllKSBvciBTTC01NjAwIChQb29kbGUpIHNheSB5IHRvCkBAIC02MCw5ICs1MCwxNiBAQAogCiBjb25maWcgQkFDS0xJR0hUX0hQNjgwCiAJdHJpc3RhdGUgIkhQIEpvcm5hZGEgNjgwIEJhY2tsaWdodCBEcml2ZXIiCi0JZGVwZW5kcyBvbiBCQUNLTElHSFRfREVWSUNFICYmIFNIX0hQNlhYCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFICYmIFNIX0hQNlhYCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgSWYgeW91IGhhdmUgYSBIUCBKb3JuYWRhIDY4MCwgc2F5IHkgdG8gZW5hYmxlIHRoZQogCSAgYmFja2xpZ2h0IGRyaXZlci4KIAorY29uZmlnIEJBQ0tMSUdIVF9QUk9HRUFSCisJdHJpc3RhdGUgIkZyb250cGF0aCBQcm9HZWFyIEJhY2tsaWdodCBEcml2ZXIiCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFICYmIFBDSSAmJiBYODYKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIEZyb250cGF0aCBQcm9HZWFyIHNheSBZIHRvIGVuYWJsZSB0aGUKKwkgIGJhY2tsaWdodCBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCmluZGV4IDY1ZTU1NTMuLjBjM2NlNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQpAQCAtNSwzICs1LDQgQEAKIG9iai0kKENPTkZJR19CQUNLTElHSFRfQ09SR0kpCSs9IGNvcmdpX2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfSFA2ODApCSs9IGhwNjgwX2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfTE9DT01PKQkrPSBsb2NvbW9sY2Qubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9QUk9HRUFSKSArPSBwcm9nZWFyX2JsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKaW5kZXggOTYwMWJmZS4uYzY1ZTgxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKQEAgLTE0LDYgKzE0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogCisjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCisjaW5jbHVkZSA8YXNtL2JhY2tsaWdodC5oPgorI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19GQikgfHwgKGRlZmluZWQoQ09ORklHX0ZCX01PRFVMRSkgJiYgXAogCQkJICAgZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRV9NT0RVTEUpKQpAQCAtMjgsMTkgKzMxLDE4IEBACiAJc3RydWN0IGZiX2V2ZW50ICpldmRhdGEgPSBkYXRhOwogCiAJLyogSWYgd2UgYXJlbid0IGludGVyZXN0ZWQgaW4gdGhpcyBldmVudCwgc2tpcCBpdCBpbW1lZGlhdGVseSAuLi4gKi8KLQlpZiAoZXZlbnQgIT0gRkJfRVZFTlRfQkxBTkspCisJaWYgKGV2ZW50ICE9IEZCX0VWRU5UX0JMQU5LICYmIGV2ZW50ICE9IEZCX0VWRU5UX0NPTkJMQU5LKQogCQlyZXR1cm4gMDsKIAogCWJkID0gY29udGFpbmVyX29mKHNlbGYsIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlLCBmYl9ub3RpZik7Ci0JZG93bigmYmQtPnNlbSk7Ci0JaWYgKGJkLT5wcm9wcykKLQkJaWYgKCFiZC0+cHJvcHMtPmNoZWNrX2ZiIHx8Ci0JCSAgICBiZC0+cHJvcHMtPmNoZWNrX2ZiKGV2ZGF0YS0+aW5mbykpIHsKLQkJCWJkLT5wcm9wcy0+ZmJfYmxhbmsgPSAqKGludCAqKWV2ZGF0YS0+ZGF0YTsKLQkJCWlmIChsaWtlbHkoYmQtPnByb3BzICYmIGJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cykpCi0JCQkJYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKGJkKTsKKwltdXRleF9sb2NrKCZiZC0+b3BzX2xvY2spOworCWlmIChiZC0+b3BzKQorCQlpZiAoIWJkLT5vcHMtPmNoZWNrX2ZiIHx8CisJCSAgICBiZC0+b3BzLT5jaGVja19mYihldmRhdGEtPmluZm8pKSB7CisJCQliZC0+cHJvcHMuZmJfYmxhbmsgPSAqKGludCAqKWV2ZGF0YS0+ZGF0YTsKKwkJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJkKTsKIAkJfQotCXVwKCZiZC0+c2VtKTsKKwltdXRleF91bmxvY2soJmJkLT5vcHNfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY5LDE1ICs3MSw5IEBACiAKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zaG93X3Bvd2VyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgcmMgPSAtRU5YSU87CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gdG9fYmFja2xpZ2h0X2RldmljZShjZGV2KTsKIAotCWRvd24oJmJkLT5zZW0pOwotCWlmIChsaWtlbHkoYmQtPnByb3BzKSkKLQkJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBiZC0+cHJvcHMtPnBvd2VyKTsKLQl1cCgmYmQtPnNlbSk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJkLT5wcm9wcy5wb3dlcik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zdG9yZV9wb3dlcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTkzLDMwICs4OSwyMyBAQAogCWlmIChzaXplICE9IGNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oJmJkLT5zZW0pOwotCWlmIChsaWtlbHkoYmQtPnByb3BzKSkgeworCW11dGV4X2xvY2soJmJkLT5vcHNfbG9jayk7CisJaWYgKGJkLT5vcHMpIHsKIAkJcHJfZGVidWcoImJhY2tsaWdodDogc2V0IHBvd2VyIHRvICVkXG4iLCBwb3dlcik7Ci0JCWJkLT5wcm9wcy0+cG93ZXIgPSBwb3dlcjsKLQkJaWYgKGxpa2VseShiZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMpKQotCQkJYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKGJkKTsKKwkJYmQtPnByb3BzLnBvd2VyID0gcG93ZXI7CisJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJkKTsKIAkJcmMgPSBjb3VudDsKIAl9Ci0JdXAoJmJkLT5zZW0pOworCW11dGV4X3VubG9jaygmYmQtPm9wc19sb2NrKTsKIAogCXJldHVybiByYzsKIH0KIAogc3RhdGljIHNzaXplX3QgYmFja2xpZ2h0X3Nob3dfYnJpZ2h0bmVzcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7Ci0JaW50IHJjID0gLUVOWElPOwogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IHRvX2JhY2tsaWdodF9kZXZpY2UoY2Rldik7CiAKLQlkb3duKCZiZC0+c2VtKTsKLQlpZiAobGlrZWx5KGJkLT5wcm9wcykpCi0JCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgYmQtPnByb3BzLT5icmlnaHRuZXNzKTsKLQl1cCgmYmQtPnNlbSk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJkLT5wcm9wcy5icmlnaHRuZXNzKTsKIH0KIAogc3RhdGljIHNzaXplX3QgYmFja2xpZ2h0X3N0b3JlX2JyaWdodG5lc3Moc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0xMzIsMzUgKzEyMSwyOCBAQAogCWlmIChzaXplICE9IGNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oJmJkLT5zZW0pOwotCWlmIChsaWtlbHkoYmQtPnByb3BzKSkgewotCQlpZiAoYnJpZ2h0bmVzcyA+IGJkLT5wcm9wcy0+bWF4X2JyaWdodG5lc3MpCisJbXV0ZXhfbG9jaygmYmQtPm9wc19sb2NrKTsKKwlpZiAoYmQtPm9wcykgeworCQlpZiAoYnJpZ2h0bmVzcyA+IGJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcykKIAkJCXJjID0gLUVJTlZBTDsKIAkJZWxzZSB7CiAJCQlwcl9kZWJ1ZygiYmFja2xpZ2h0OiBzZXQgYnJpZ2h0bmVzcyB0byAlZFxuIiwKIAkJCQkgYnJpZ2h0bmVzcyk7Ci0JCQliZC0+cHJvcHMtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOwotCQkJaWYgKGxpa2VseShiZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMpKQotCQkJCWJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cyhiZCk7CisJCQliZC0+cHJvcHMuYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisJCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CiAJCQlyYyA9IGNvdW50OwogCQl9CiAJfQotCXVwKCZiZC0+c2VtKTsKKwltdXRleF91bmxvY2soJmJkLT5vcHNfbG9jayk7CiAKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zaG93X21heF9icmlnaHRuZXNzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgcmMgPSAtRU5YSU87CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gdG9fYmFja2xpZ2h0X2RldmljZShjZGV2KTsKIAotCWRvd24oJmJkLT5zZW0pOwotCWlmIChsaWtlbHkoYmQtPnByb3BzKSkKLQkJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBiZC0+cHJvcHMtPm1heF9icmlnaHRuZXNzKTsKLQl1cCgmYmQtPnNlbSk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zaG93X2FjdHVhbF9icmlnaHRuZXNzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsCkBAIC0xNjksMTAgKzE1MSwxMCBAQAogCWludCByYyA9IC1FTlhJTzsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSB0b19iYWNrbGlnaHRfZGV2aWNlKGNkZXYpOwogCi0JZG93bigmYmQtPnNlbSk7Ci0JaWYgKGxpa2VseShiZC0+cHJvcHMgJiYgYmQtPnByb3BzLT5nZXRfYnJpZ2h0bmVzcykpCi0JCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgYmQtPnByb3BzLT5nZXRfYnJpZ2h0bmVzcyhiZCkpOwotCXVwKCZiZC0+c2VtKTsKKwltdXRleF9sb2NrKCZiZC0+b3BzX2xvY2spOworCWlmIChiZC0+b3BzICYmIGJkLT5vcHMtPmdldF9icmlnaHRuZXNzKQorCQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGJkLT5vcHMtPmdldF9icmlnaHRuZXNzKGJkKSk7CisJbXV0ZXhfdW5sb2NrKCZiZC0+b3BzX2xvY2spOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMjExLDcgKzE5Myw3IEBACiAgKiAgIHJlc3BlY3RpdmUgZnJhbWVidWZmZXIgZGV2aWNlKS4KICAqIEBkZXZkYXRhOiBhbiBvcHRpb25hbCBwb2ludGVyIHRvIGJlIHN0b3JlZCBpbiB0aGUgY2xhc3NfZGV2aWNlLiBUaGUKICAqICAgbWV0aG9kcyBtYXkgcmV0cmlldmUgaXQgYnkgdXNpbmcgY2xhc3NfZ2V0X2RldmRhdGEoJmJkLT5jbGFzc19kZXYpLgotICogQGJwOiB0aGUgYmFja2xpZ2h0IHByb3BlcnRpZXMgc3RydWN0dXJlLgorICogQG9wczogdGhlIGJhY2tsaWdodCBvcGVyYXRpb25zIHN0cnVjdHVyZS4KICAqCiAgKiBDcmVhdGVzIGFuZCByZWdpc3RlcnMgbmV3IGJhY2tsaWdodCBjbGFzc19kZXZpY2UuIFJldHVybnMgZWl0aGVyIGFuCiAgKiBFUlJfUFRSKCkgb3IgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgZGV2aWNlLgpAQCAtMjE5LDM5ICsyMDEsNDIgQEAKIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCiAJc3RydWN0IGRldmljZSAqZGV2LAogCXZvaWQgKmRldmRhdGEsCi0Jc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzICpicCkKKwlzdHJ1Y3QgYmFja2xpZ2h0X29wcyAqb3BzKQogewogCWludCBpLCByYzsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqbmV3X2JkOwogCiAJcHJfZGVidWcoImJhY2tsaWdodF9kZXZpY2VfYWxsb2M6IG5hbWU9JXNcbiIsIG5hbWUpOwogCi0JbmV3X2JkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkoIW5ld19iZCkpCisJbmV3X2JkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19iZCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlpbml0X01VVEVYKCZuZXdfYmQtPnNlbSk7Ci0JbmV3X2JkLT5wcm9wcyA9IGJwOwotCW1lbXNldCgmbmV3X2JkLT5jbGFzc19kZXYsIDAsIHNpemVvZihuZXdfYmQtPmNsYXNzX2RldikpOworCW11dGV4X2luaXQoJm5ld19iZC0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJm5ld19iZC0+b3BzX2xvY2spOworCW5ld19iZC0+b3BzID0gb3BzOwogCW5ld19iZC0+Y2xhc3NfZGV2LmNsYXNzID0gJmJhY2tsaWdodF9jbGFzczsKIAluZXdfYmQtPmNsYXNzX2Rldi5kZXYgPSBkZXY7CiAJc3RybGNweShuZXdfYmQtPmNsYXNzX2Rldi5jbGFzc19pZCwgbmFtZSwgS09CSl9OQU1FX0xFTik7CiAJY2xhc3Nfc2V0X2RldmRhdGEoJm5ld19iZC0+Y2xhc3NfZGV2LCBkZXZkYXRhKTsKIAogCXJjID0gY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKCZuZXdfYmQtPmNsYXNzX2Rldik7Ci0JaWYgKHVubGlrZWx5KHJjKSkgewotZXJyb3I6CQlrZnJlZShuZXdfYmQpOworCWlmIChyYykgeworCQlrZnJlZShuZXdfYmQpOwogCQlyZXR1cm4gRVJSX1BUUihyYyk7CiAJfQogCiAJcmMgPSBiYWNrbGlnaHRfcmVnaXN0ZXJfZmIobmV3X2JkKTsKLQlpZiAodW5saWtlbHkocmMpKQotCQlnb3RvIGVycm9yOworCWlmIChyYykgeworCQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmbmV3X2JkLT5jbGFzc19kZXYpOworCQlyZXR1cm4gRVJSX1BUUihyYyk7CisJfQorCiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShibF9jbGFzc19kZXZpY2VfYXR0cmlidXRlcyk7IGkrKykgewogCQlyYyA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmbmV3X2JkLT5jbGFzc19kZXYsCiAJCQkJCSAgICAgICZibF9jbGFzc19kZXZpY2VfYXR0cmlidXRlc1tpXSk7Ci0JCWlmICh1bmxpa2VseShyYykpIHsKKwkJaWYgKHJjKSB7CiAJCQl3aGlsZSAoLS1pID49IDApCiAJCQkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZuZXdfYmQtPmNsYXNzX2RldiwKIAkJCQkJCQkgJmJsX2NsYXNzX2RldmljZV9hdHRyaWJ1dGVzW2ldKTsKQEAgLTI2MSw2ICsyNDYsMTMgQEAKIAkJfQogCX0KIAorI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAorCW11dGV4X2xvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKKwlpZiAoIXBtYWNfYmFja2xpZ2h0KQorCQlwbWFjX2JhY2tsaWdodCA9IG5ld19iZDsKKwltdXRleF91bmxvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKKyNlbmRpZgorCiAJcmV0dXJuIG5ld19iZDsKIH0KIEVYUE9SVF9TWU1CT0woYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcik7CkBAIC0yODAsMTMgKzI3MiwyMCBAQAogCiAJcHJfZGVidWcoImJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcjogbmFtZT0lc1xuIiwgYmQtPmNsYXNzX2Rldi5jbGFzc19pZCk7CiAKKyNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKKwltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7CisJaWYgKHBtYWNfYmFja2xpZ2h0ID09IGJkKQorCQlwbWFjX2JhY2tsaWdodCA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7CisjZW5kaWYKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJsX2NsYXNzX2RldmljZV9hdHRyaWJ1dGVzKTsgaSsrKQogCQljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoJmJkLT5jbGFzc19kZXYsCiAJCQkJCSAmYmxfY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZXNbaV0pOwogCi0JZG93bigmYmQtPnNlbSk7Ci0JYmQtPnByb3BzID0gTlVMTDsKLQl1cCgmYmQtPnNlbSk7CisJbXV0ZXhfbG9jaygmYmQtPm9wc19sb2NrKTsKKwliZC0+b3BzID0gTlVMTDsKKwltdXRleF91bmxvY2soJmJkLT5vcHNfbG9jayk7CiAKIAliYWNrbGlnaHRfdW5yZWdpc3Rlcl9mYihiZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jCmluZGV4IGZkZTFkOTUuLmNlMDBlMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zaGFycHNsX3BtLmg+CiAKIHN0YXRpYyBpbnQgY29yZ2libF9pbnRlbnNpdHk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGJsX211dGV4KTsKIHN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgY29yZ2libF9kYXRhOwogc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpjb3JnaV9iYWNrbGlnaHRfZGV2aWNlOwogc3RhdGljIHN0cnVjdCBjb3JnaWJsX21hY2hpbmZvICpibF9tYWNoaW5mbzsKQEAgLTM0LDIwICszMywxOCBAQAogc3RhdGljIGludCBjb3JnaWJsX3NlbmRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAl2b2lkICgqY29yZ2lfa2lja19iYXR0KSh2b2lkKTsKLQlpbnQgaW50ZW5zaXR5ID0gYmQtPnByb3BzLT5icmlnaHRuZXNzOworCWludCBpbnRlbnNpdHkgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIAotCWlmIChiZC0+cHJvcHMtPnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJaWYgKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKQogCQlpbnRlbnNpdHkgPSAwOwotCWlmIChiZC0+cHJvcHMtPmZiX2JsYW5rICE9IEZCX0JMQU5LX1VOQkxBTkspCisJaWYgKGJkLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQogCQlpbnRlbnNpdHkgPSAwOwogCWlmIChjb3JnaWJsX2ZsYWdzICYgQ09SR0lCTF9TVVNQRU5ERUQpCiAJCWludGVuc2l0eSA9IDA7CiAJaWYgKGNvcmdpYmxfZmxhZ3MgJiBDT1JHSUJMX0JBVFRMT1cpCiAJCWludGVuc2l0eSAmPSBibF9tYWNoaW5mby0+bGltaXRfbWFzazsKIAotIAltdXRleF9sb2NrKCZibF9tdXRleCk7CiAJYmxfbWFjaGluZm8tPnNldF9ibF9pbnRlbnNpdHkoaW50ZW5zaXR5KTsKLQltdXRleF91bmxvY2soJmJsX211dGV4KTsKIAogCWNvcmdpYmxfaW50ZW5zaXR5ID0gaW50ZW5zaXR5OwogCkBAIC02MSwxNyArNTgsMjEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBjb3JnaWJsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGNvcmdpYmxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKIAljb3JnaWJsX2ZsYWdzIHw9IENPUkdJQkxfU1VTUEVOREVEOwotCWNvcmdpYmxfc2VuZF9pbnRlbnNpdHkoY29yZ2lfYmFja2xpZ2h0X2RldmljZSk7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcmdpYmxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2libF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwogCWNvcmdpYmxfZmxhZ3MgJj0gfkNPUkdJQkxfU1VTUEVOREVEOwotCWNvcmdpYmxfc2VuZF9pbnRlbnNpdHkoY29yZ2lfYmFja2xpZ2h0X2RldmljZSk7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmQpOwogCXJldHVybiAwOwogfQogI2Vsc2UKQEAgLTg0LDEyICs4NSw2IEBACiAJcmV0dXJuIGNvcmdpYmxfaW50ZW5zaXR5OwogfQogCi1zdGF0aWMgaW50IGNvcmdpYmxfc2V0X2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCi17Ci0JY29yZ2libF9zZW5kX2ludGVuc2l0eShjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIENhbGxlZCB3aGVuIHRoZSBiYXR0ZXJ5IGlzIGxvdyB0byBsaW1pdCB0aGUgYmFja2xpZ2h0IGludGVuc2l0eS4KICAqIElmIGxpbWl0PT0wIGNsZWFyIGFueSBsaW1pdCwgb3RoZXJ3aXNlIGxpbWl0IHRoZSBpbnRlbnNpdHkKQEAgLTEwMCwxNSArOTUsMTQgQEAKIAkJY29yZ2libF9mbGFncyB8PSBDT1JHSUJMX0JBVFRMT1c7CiAJZWxzZQogCQljb3JnaWJsX2ZsYWdzICY9IH5DT1JHSUJMX0JBVFRMT1c7Ci0JY29yZ2libF9zZW5kX2ludGVuc2l0eShjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKTsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKTsKIH0KIEVYUE9SVF9TWU1CT0woY29yZ2libF9saW1pdF9pbnRlbnNpdHkpOwogCiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgY29yZ2libF9kYXRhID0gewotCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGNvcmdpYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IGNvcmdpYmxfZ2V0X2ludGVuc2l0eSwKLQkudXBkYXRlX3N0YXR1cyAgPSBjb3JnaWJsX3NldF9pbnRlbnNpdHksCisJLnVwZGF0ZV9zdGF0dXMgID0gY29yZ2libF9zZW5kX2ludGVuc2l0eSwKIH07CiAKIHN0YXRpYyBpbnQgY29yZ2libF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTE2LDMwICsxMTAsMzQgQEAKIAlzdHJ1Y3QgY29yZ2libF9tYWNoaW5mbyAqbWFjaGluZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWJsX21hY2hpbmZvID0gbWFjaGluZm87Ci0JY29yZ2libF9kYXRhLm1heF9icmlnaHRuZXNzID0gbWFjaGluZm8tPm1heF9pbnRlbnNpdHk7CiAJaWYgKCFtYWNoaW5mby0+bGltaXRfbWFzaykKIAkJbWFjaGluZm8tPmxpbWl0X21hc2sgPSAtMTsKIAogCWNvcmdpX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyICgiY29yZ2ktYmwiLAotCQkmcGRldi0+ZGV2LCBOVUxMLCAmY29yZ2libF9kYXRhKTsKKwkJJnBkZXYtPmRldiwgTlVMTCwgJmNvcmdpYmxfb3BzKTsKIAlpZiAoSVNfRVJSIChjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIgKGNvcmdpX2JhY2tsaWdodF9kZXZpY2UpOwogCi0JY29yZ2libF9kYXRhLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKLQljb3JnaWJsX2RhdGEuYnJpZ2h0bmVzcyA9IG1hY2hpbmZvLT5kZWZhdWx0X2ludGVuc2l0eTsKLQljb3JnaWJsX3NlbmRfaW50ZW5zaXR5KGNvcmdpX2JhY2tsaWdodF9kZXZpY2UpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvcmdpX2JhY2tsaWdodF9kZXZpY2UpOworCisJY29yZ2lfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSBtYWNoaW5mby0+bWF4X2ludGVuc2l0eTsKKwljb3JnaV9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJY29yZ2lfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9IG1hY2hpbmZvLT5kZWZhdWx0X2ludGVuc2l0eTsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKTsKIAogCXByaW50aygiQ29yZ2kgQmFja2xpZ2h0IERyaXZlciBJbml0aWFsaXplZC5cbiIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcmdpYmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2libF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwogCWNvcmdpYmxfZGF0YS5wb3dlciA9IDA7CiAJY29yZ2libF9kYXRhLmJyaWdodG5lc3MgPSAwOwotCWNvcmdpYmxfc2VuZF9pbnRlbnNpdHkoY29yZ2lfYmFja2xpZ2h0X2RldmljZSk7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmQpOwogCi0JYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGNvcmdpX2JhY2tsaWdodF9kZXZpY2UpOworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihiZCk7CiAKIAlwcmludGsoIkNvcmdpIEJhY2tsaWdodCBEcml2ZXIgVW5sb2FkZWRcbiIpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKaW5kZXggYzA3ZDgyMC4uMDg5OWZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCkBAIC0yOCwxNyArMjgsMTYgQEAKIHN0YXRpYyBpbnQgaHA2ODBibF9zdXNwZW5kZWQ7CiBzdGF0aWMgaW50IGN1cnJlbnRfaW50ZW5zaXR5ID0gMDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmxfbG9jayk7Ci1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmhwNjgwX2JhY2tsaWdodF9kZXZpY2U7CiAKIHN0YXRpYyB2b2lkIGhwNjgwYmxfc2VuZF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHY7Ci0JaW50IGludGVuc2l0eSA9IGJkLT5wcm9wcy0+YnJpZ2h0bmVzczsKKwlpbnQgaW50ZW5zaXR5ID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CiAKLQlpZiAoYmQtPnByb3BzLT5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKQorCWlmIChiZC0+cHJvcHMucG93ZXIgIT0gRkJfQkxBTktfVU5CTEFOSykKIAkJaW50ZW5zaXR5ID0gMDsKLQlpZiAoYmQtPnByb3BzLT5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCWlmIChiZC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKIAkJaW50ZW5zaXR5ID0gMDsKIAlpZiAoaHA2ODBibF9zdXNwZW5kZWQpCiAJCWludGVuc2l0eSA9IDA7CkBAIC02NiwxNyArNjUsMjEgQEAKIAogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGhwNjgwYmxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaHA2ODBibF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwogCWhwNjgwYmxfc3VzcGVuZGVkID0gMTsKLQlocDY4MGJsX3NlbmRfaW50ZW5zaXR5KGhwNjgwX2JhY2tsaWdodF9kZXZpY2UpOworCWhwNjgwYmxfc2VuZF9pbnRlbnNpdHkoYmQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhwNjgwYmxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaHA2ODBibF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwogCWhwNjgwYmxfc3VzcGVuZGVkID0gMDsKLQlocDY4MGJsX3NlbmRfaW50ZW5zaXR5KGhwNjgwX2JhY2tsaWdodF9kZXZpY2UpOworCWhwNjgwYmxfc2VuZF9pbnRlbnNpdHkoYmQpOwogCXJldHVybiAwOwogfQogI2Vsc2UKQEAgLTk1LDMzICs5OCwzOCBAQAogCXJldHVybiBjdXJyZW50X2ludGVuc2l0eTsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBocDY4MGJsX2RhdGEgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5tYXhfYnJpZ2h0bmVzcyA9IEhQNjgwX01BWF9JTlRFTlNJVFksCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgaHA2ODBibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gaHA2ODBibF9nZXRfaW50ZW5zaXR5LAogCS51cGRhdGVfc3RhdHVzICA9IGhwNjgwYmxfc2V0X2ludGVuc2l0eSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGhwNjgwYmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgaHA2ODBibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWhwNjgwX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyICgiaHA2ODAtYmwiLAotCQkmZGV2LT5kZXYsIE5VTEwsICZocDY4MGJsX2RhdGEpOwotCWlmIChJU19FUlIgKGhwNjgwX2JhY2tsaWdodF9kZXZpY2UpKQotCQlyZXR1cm4gUFRSX0VSUiAoaHA2ODBfYmFja2xpZ2h0X2RldmljZSk7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwogCi0JaHA2ODBfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMtPmJyaWdodG5lc3MgPSBIUDY4MF9ERUZBVUxUX0lOVEVOU0lUWTsKLQlocDY4MGJsX3NlbmRfaW50ZW5zaXR5KGhwNjgwX2JhY2tsaWdodF9kZXZpY2UpOworCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlciAoImhwNjgwLWJsIiwgJnBkZXYtPmRldiwgTlVMTCwKKwkJICAgICZocDY4MGJsX29wcyk7CisJaWYgKElTX0VSUihiZCkpCisJCXJldHVybiBQVFJfRVJSKGJkKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGJkKTsKKworCWJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEhQNjgwX01BWF9JTlRFTlNJVFk7CisJYmQtPnByb3BzLmJyaWdodG5lc3MgPSBIUDY4MF9ERUZBVUxUX0lOVEVOU0lUWTsKKwlocDY4MGJsX3NlbmRfaW50ZW5zaXR5KGJkKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhwNjgwYmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaHA2ODBibF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwogCWhwNjgwYmxfZGF0YS5icmlnaHRuZXNzID0gMDsKIAlocDY4MGJsX2RhdGEucG93ZXIgPSAwOwotCWhwNjgwYmxfc2VuZF9pbnRlbnNpdHkoaHA2ODBfYmFja2xpZ2h0X2RldmljZSk7CisJaHA2ODBibF9zZW5kX2ludGVuc2l0eShiZCk7CiAKLQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoaHA2ODBfYmFja2xpZ2h0X2RldmljZSk7CisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJkKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwppbmRleCBmNmUwNDE2Li42ZWY4ZjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwpAQCAtMzEsMTEgKzMxLDExIEBACiAJCXJldHVybiAwOwogCiAJbGQgPSBjb250YWluZXJfb2Yoc2VsZiwgc3RydWN0IGxjZF9kZXZpY2UsIGZiX25vdGlmKTsKLQlkb3duKCZsZC0+c2VtKTsKLQlpZiAobGQtPnByb3BzKQotCQlpZiAoIWxkLT5wcm9wcy0+Y2hlY2tfZmIgfHwgbGQtPnByb3BzLT5jaGVja19mYihldmRhdGEtPmluZm8pKQotCQkJbGQtPnByb3BzLT5zZXRfcG93ZXIobGQsICooaW50ICopZXZkYXRhLT5kYXRhKTsKLQl1cCgmbGQtPnNlbSk7CisJbXV0ZXhfbG9jaygmbGQtPm9wc19sb2NrKTsKKwlpZiAobGQtPm9wcykKKwkJaWYgKCFsZC0+b3BzLT5jaGVja19mYiB8fCBsZC0+b3BzLT5jaGVja19mYihldmRhdGEtPmluZm8pKQorCQkJbGQtPm9wcy0+c2V0X3Bvd2VyKGxkLCAqKGludCAqKWV2ZGF0YS0+ZGF0YSk7CisJbXV0ZXhfdW5sb2NrKCZsZC0+b3BzX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC02NiwxMiArNjYsMTIgQEAKIAlpbnQgcmM7CiAJc3RydWN0IGxjZF9kZXZpY2UgKmxkID0gdG9fbGNkX2RldmljZShjZGV2KTsKIAotCWRvd24oJmxkLT5zZW0pOwotCWlmIChsaWtlbHkobGQtPnByb3BzICYmIGxkLT5wcm9wcy0+Z2V0X3Bvd2VyKSkKLQkJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBsZC0+cHJvcHMtPmdldF9wb3dlcihsZCkpOworCW11dGV4X2xvY2soJmxkLT5vcHNfbG9jayk7CisJaWYgKGxkLT5vcHMgJiYgbGQtPm9wcy0+Z2V0X3Bvd2VyKQorCQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGxkLT5vcHMtPmdldF9wb3dlcihsZCkpOwogCWVsc2UKIAkJcmMgPSAtRU5YSU87Ci0JdXAoJmxkLT5zZW0pOworCW11dGV4X3VubG9jaygmbGQtPm9wc19sb2NrKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTg5LDEzICs4OSwxMyBAQAogCWlmIChzaXplICE9IGNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oJmxkLT5zZW0pOwotCWlmIChsaWtlbHkobGQtPnByb3BzICYmIGxkLT5wcm9wcy0+c2V0X3Bvd2VyKSkgeworCW11dGV4X2xvY2soJmxkLT5vcHNfbG9jayk7CisJaWYgKGxkLT5vcHMgJiYgbGQtPm9wcy0+c2V0X3Bvd2VyKSB7CiAJCXByX2RlYnVnKCJsY2Q6IHNldCBwb3dlciB0byAlZFxuIiwgcG93ZXIpOwotCQlsZC0+cHJvcHMtPnNldF9wb3dlcihsZCwgcG93ZXIpOworCQlsZC0+b3BzLT5zZXRfcG93ZXIobGQsIHBvd2VyKTsKIAkJcmMgPSBjb3VudDsKIAl9Ci0JdXAoJmxkLT5zZW0pOworCW11dGV4X3VubG9jaygmbGQtPm9wc19sb2NrKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTEwNSwxMCArMTA1LDEwIEBACiAJaW50IHJjID0gLUVOWElPOwogCXN0cnVjdCBsY2RfZGV2aWNlICpsZCA9IHRvX2xjZF9kZXZpY2UoY2Rldik7CiAKLQlkb3duKCZsZC0+c2VtKTsKLQlpZiAobGlrZWx5KGxkLT5wcm9wcyAmJiBsZC0+cHJvcHMtPmdldF9jb250cmFzdCkpCi0JCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgbGQtPnByb3BzLT5nZXRfY29udHJhc3QobGQpKTsKLQl1cCgmbGQtPnNlbSk7CisJbXV0ZXhfbG9jaygmbGQtPm9wc19sb2NrKTsKKwlpZiAobGQtPm9wcyAmJiBsZC0+b3BzLT5nZXRfY29udHJhc3QpCisJCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgbGQtPm9wcy0+Z2V0X2NvbnRyYXN0KGxkKSk7CisJbXV0ZXhfdW5sb2NrKCZsZC0+b3BzX2xvY2spOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTI2LDI4ICsxMjYsMjIgQEAKIAlpZiAoc2l6ZSAhPSBjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZsZC0+c2VtKTsKLQlpZiAobGlrZWx5KGxkLT5wcm9wcyAmJiBsZC0+cHJvcHMtPnNldF9jb250cmFzdCkpIHsKKwltdXRleF9sb2NrKCZsZC0+b3BzX2xvY2spOworCWlmIChsZC0+b3BzICYmIGxkLT5vcHMtPnNldF9jb250cmFzdCkgewogCQlwcl9kZWJ1ZygibGNkOiBzZXQgY29udHJhc3QgdG8gJWRcbiIsIGNvbnRyYXN0KTsKLQkJbGQtPnByb3BzLT5zZXRfY29udHJhc3QobGQsIGNvbnRyYXN0KTsKKwkJbGQtPm9wcy0+c2V0X2NvbnRyYXN0KGxkLCBjb250cmFzdCk7CiAJCXJjID0gY291bnQ7CiAJfQotCXVwKCZsZC0+c2VtKTsKKwltdXRleF91bmxvY2soJmxkLT5vcHNfbG9jayk7CiAKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGxjZF9zaG93X21heF9jb250cmFzdChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7Ci0JaW50IHJjID0gLUVOWElPOwogCXN0cnVjdCBsY2RfZGV2aWNlICpsZCA9IHRvX2xjZF9kZXZpY2UoY2Rldik7CiAKLQlkb3duKCZsZC0+c2VtKTsKLQlpZiAobGlrZWx5KGxkLT5wcm9wcykpCi0JCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgbGQtPnByb3BzLT5tYXhfY29udHJhc3QpOwotCXVwKCZsZC0+c2VtKTsKLQotCXJldHVybiByYzsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbGQtPnByb3BzLm1heF9jb250cmFzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGxjZF9jbGFzc19yZWxlYXNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldikKQEAgLTE4MCw0NSArMTc0LDQ2IEBACiAgKiAgIHJlc3BlY3RpdmUgZnJhbWVidWZmZXIgZGV2aWNlKS4KICAqIEBkZXZkYXRhOiBhbiBvcHRpb25hbCBwb2ludGVyIHRvIGJlIHN0b3JlZCBpbiB0aGUgY2xhc3NfZGV2aWNlLiBUaGUKICAqICAgbWV0aG9kcyBtYXkgcmV0cmlldmUgaXQgYnkgdXNpbmcgY2xhc3NfZ2V0X2RldmRhdGEobGQtPmNsYXNzX2RldikuCi0gKiBAbHA6IHRoZSBsY2QgcHJvcGVydGllcyBzdHJ1Y3R1cmUuCisgKiBAb3BzOiB0aGUgbGNkIG9wZXJhdGlvbnMgc3RydWN0dXJlLgogICoKICAqIENyZWF0ZXMgYW5kIHJlZ2lzdGVycyBhIG5ldyBsY2QgY2xhc3NfZGV2aWNlLiBSZXR1cm5zIGVpdGhlciBhbiBFUlJfUFRSKCkKICAqIG9yIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIGRldmljZS4KICAqLwogc3RydWN0IGxjZF9kZXZpY2UgKmxjZF9kZXZpY2VfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGV2ZGF0YSwKLQkJCQkgICAgICAgc3RydWN0IGxjZF9wcm9wZXJ0aWVzICpscCkKKwkJCQkgICAgICAgc3RydWN0IGxjZF9vcHMgKm9wcykKIHsKIAlpbnQgaSwgcmM7CiAJc3RydWN0IGxjZF9kZXZpY2UgKm5ld19sZDsKIAogCXByX2RlYnVnKCJsY2RfZGV2aWNlX3JlZ2lzdGVyOiBuYW1lPSVzXG4iLCBuYW1lKTsKIAotCW5ld19sZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsY2RfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KCFuZXdfbGQpKQorCW5ld19sZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsY2RfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfbGQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JaW5pdF9NVVRFWCgmbmV3X2xkLT5zZW0pOwotCW5ld19sZC0+cHJvcHMgPSBscDsKLQltZW1zZXQoJm5ld19sZC0+Y2xhc3NfZGV2LCAwLCBzaXplb2YobmV3X2xkLT5jbGFzc19kZXYpKTsKKwltdXRleF9pbml0KCZuZXdfbGQtPm9wc19sb2NrKTsKKwltdXRleF9pbml0KCZuZXdfbGQtPnVwZGF0ZV9sb2NrKTsKKwluZXdfbGQtPm9wcyA9IG9wczsKIAluZXdfbGQtPmNsYXNzX2Rldi5jbGFzcyA9ICZsY2RfY2xhc3M7CiAJc3RybGNweShuZXdfbGQtPmNsYXNzX2Rldi5jbGFzc19pZCwgbmFtZSwgS09CSl9OQU1FX0xFTik7CiAJY2xhc3Nfc2V0X2RldmRhdGEoJm5ld19sZC0+Y2xhc3NfZGV2LCBkZXZkYXRhKTsKIAogCXJjID0gY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKCZuZXdfbGQtPmNsYXNzX2Rldik7Ci0JaWYgKHVubGlrZWx5KHJjKSkgewotZXJyb3I6CQlrZnJlZShuZXdfbGQpOworCWlmIChyYykgeworCQlrZnJlZShuZXdfbGQpOwogCQlyZXR1cm4gRVJSX1BUUihyYyk7CiAJfQogCiAJcmMgPSBsY2RfcmVnaXN0ZXJfZmIobmV3X2xkKTsKLQotCWlmICh1bmxpa2VseShyYykpCi0JCWdvdG8gZXJyb3I7CisJaWYgKHJjKSB7CisJCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZuZXdfbGQtPmNsYXNzX2Rldik7CisJCXJldHVybiBFUlJfUFRSKHJjKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsY2RfY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZXMpOyBpKyspIHsKIAkJcmMgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19sZC0+Y2xhc3NfZGV2LAogCQkJCQkgICAgICAmbGNkX2NsYXNzX2RldmljZV9hdHRyaWJ1dGVzW2ldKTsKLQkJaWYgKHVubGlrZWx5KHJjKSkgeworCQlpZiAocmMpIHsKIAkJCXdoaWxlICgtLWkgPj0gMCkKIAkJCQljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoJm5ld19sZC0+Y2xhc3NfZGV2LAogCQkJCQkJCSAmbGNkX2NsYXNzX2RldmljZV9hdHRyaWJ1dGVzW2ldKTsKQEAgLTI1MSw5ICsyNDYsOSBAQAogCQljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoJmxkLT5jbGFzc19kZXYsCiAJCQkJCSAmbGNkX2NsYXNzX2RldmljZV9hdHRyaWJ1dGVzW2ldKTsKIAotCWRvd24oJmxkLT5zZW0pOwotCWxkLT5wcm9wcyA9IE5VTEw7Ci0JdXAoJmxkLT5zZW0pOworCW11dGV4X2xvY2soJmxkLT5vcHNfbG9jayk7CisJbGQtPm9wcyA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZsZC0+b3BzX2xvY2spOwogCWxjZF91bnJlZ2lzdGVyX2ZiKGxkKTsKIAljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmbGQtPmNsYXNzX2Rldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jCmluZGV4IGZjODEyZDkuLmQxMzEyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jCkBAIC0xMTIsMTEgKzExMiwxMSBAQAogCiBzdGF0aWMgaW50IGxvY29tb2xjZF9zZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKLQlpbnQgaW50ZW5zaXR5ID0gYmQtPnByb3BzLT5icmlnaHRuZXNzOworCWludCBpbnRlbnNpdHkgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIAotCWlmIChiZC0+cHJvcHMtPnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJaWYgKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKQogCQlpbnRlbnNpdHkgPSAwOwotCWlmIChiZC0+cHJvcHMtPmZiX2JsYW5rICE9IEZCX0JMQU5LX1VOQkxBTkspCisJaWYgKGJkLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQogCQlpbnRlbnNpdHkgPSAwOwogCWlmIChsb2NvbW9sY2RfZmxhZ3MgJiBMT0NPTU9MQ0RfU1VTUEVOREVEKQogCQlpbnRlbnNpdHkgPSAwOwpAQCAtMTQxLDExICsxNDEsOSBAQAogCXJldHVybiBjdXJyZW50X2ludGVuc2l0eTsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBsb2NvbW9ibF9kYXRhID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBsb2NvbW9ibF9kYXRhID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IGxvY29tb2xjZF9nZXRfaW50ZW5zaXR5LAogCS51cGRhdGVfc3RhdHVzICA9IGxvY29tb2xjZF9zZXRfaW50ZW5zaXR5LAotCS5tYXhfYnJpZ2h0bmVzcyA9IDQsCiB9OwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xOTAsNyArMTg4LDggQEAKIAkJcmV0dXJuIFBUUl9FUlIgKGxvY29tb2xjZF9ibF9kZXZpY2UpOwogCiAJLyogU2V0IHVwIGZyb250bGlnaHQgc28gdGhhdCBzY3JlZW4gaXMgcmVhZGFibGUgKi8KLQlsb2NvbW9ibF9kYXRhLmJyaWdodG5lc3MgPSAyOworCWxvY29tb2xjZF9ibF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gNCwKKwlsb2NvbW9sY2RfYmxfZGV2aWNlLT5wcm9wcy5icmlnaHRuZXNzID0gMjsKIAlsb2NvbW9sY2Rfc2V0X2ludGVuc2l0eShsb2NvbW9sY2RfYmxfZGV2aWNlKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHJvZ2Vhcl9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHJvZ2Vhcl9ibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjI2OTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wcm9nZWFyX2JsLmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiAgQmFja2xpZ2h0IERyaXZlciBmb3IgRnJvbnRwYXRoIFByb0dlYXIgSFgxMDUwKworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYgTWFyY2luIEp1c3praWV3aWN6CisgKgorICogIEJhc2VkIG9uIFByb2dlYXIgTENEIGRyaXZlciBieSBNIFNjaGFjaHQKKyAqICA8bXNjaGFjaHQgYXQgYWx1bW5pIGRvdCB3YXNoaW5ndG9uIGRvdCBlZHU+CisgKgorICogIEJhc2VkIG9uIFNoYXJwJ3MgQ29yZ2kgQmFja2xpZ2h0IERyaXZlcgorICogIEJhc2VkIG9uIEJhY2tsaWdodCBEcml2ZXIgZm9yIEhQIEpvcm5hZGEgNjgwCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2RlZmluZSBQTVVfTFBDUiAgICAgICAgICAgICAgIDB4QjAKKyNkZWZpbmUgU0JfTVBTMSAgICAgICAgICAgICAgICAweDYxCisjZGVmaW5lIEhXX0xFVkVMX01BWCAgICAgICAgICAgMHg3NworI2RlZmluZSBIV19MRVZFTF9NSU4gICAgICAgICAgIDB4NGYKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpwbXVfZGV2ID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqc2JfZGV2ID0gTlVMTDsKKworc3RhdGljIGludCBwcm9nZWFyYmxfc2V0X2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJaW50IGludGVuc2l0eSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOworCisJaWYgKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlpbnRlbnNpdHkgPSAwOworCWlmIChiZC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJaW50ZW5zaXR5ID0gMDsKKworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwbXVfZGV2LCBQTVVfTFBDUiwgaW50ZW5zaXR5ICsgSFdfTEVWRUxfTUlOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2dlYXJibF9nZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwl1OCBpbnRlbnNpdHk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocG11X2RldiwgUE1VX0xQQ1IsICZpbnRlbnNpdHkpOworCisJcmV0dXJuIGludGVuc2l0eSAtIEhXX0xFVkVMX01JTjsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIHByb2dlYXJibF9vcHMgPSB7CisJLmdldF9icmlnaHRuZXNzID0gcHJvZ2VhcmJsX2dldF9pbnRlbnNpdHksCisJLnVwZGF0ZV9zdGF0dXMgPSBwcm9nZWFyYmxfc2V0X2ludGVuc2l0eSwKK307CisKK3N0YXRpYyBpbnQgcHJvZ2VhcmJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdTggdGVtcDsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqcHJvZ2Vhcl9iYWNrbGlnaHRfZGV2aWNlOworCisJcG11X2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTcxMDEsIDApOworCWlmICghcG11X2RldikgeworCQlwcmludGsoIkFMSSBNNzEwMSBQTVUgbm90IGZvdW5kLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNiX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTE1MzMsIDApOworCWlmICghc2JfZGV2KSB7CisJCXByaW50aygiQUxJIDE1MzMgU0Igbm90IGZvdW5kLlxuIik7CisJCXBjaV9kZXZfcHV0KHBtdV9kZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiAgICAgU2V0IFNCX01QUzEgdG8gZW5hYmxlIGJyaWdodG5lc3MgY29udHJvbC4gKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShzYl9kZXYsIFNCX01QUzEsICZ0ZW1wKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoc2JfZGV2LCBTQl9NUFMxLCB0ZW1wIHwgMHgyMCk7CisKKwlwcm9nZWFyX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJwcm9nZWFyLWJsIiwKKwkJCQkJCQkgICAgICZwZGV2LT5kZXYsIE5VTEwsCisJCQkJCQkJICAgICAmcHJvZ2VhcmJsX29wcyk7CisJaWYgKElTX0VSUihwcm9nZWFyX2JhY2tsaWdodF9kZXZpY2UpKQorCQlyZXR1cm4gUFRSX0VSUihwcm9nZWFyX2JhY2tsaWdodF9kZXZpY2UpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJvZ2Vhcl9iYWNrbGlnaHRfZGV2aWNlKTsKKworCXByb2dlYXJfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOworCXByb2dlYXJfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9IEhXX0xFVkVMX01BWCAtIEhXX0xFVkVMX01JTjsKKwlwcm9nZWFyX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gSFdfTEVWRUxfTUFYIC0gSFdfTEVWRUxfTUlOOworCXByb2dlYXJibF9zZXRfaW50ZW5zaXR5KHByb2dlYXJfYmFja2xpZ2h0X2RldmljZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9nZWFyYmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwcm9nZWFyYmxfZHJpdmVyID0geworCS5wcm9iZSA9IHByb2dlYXJibF9wcm9iZSwKKwkucmVtb3ZlID0gcHJvZ2VhcmJsX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJwcm9nZWFyLWJsIiwKKwkJICAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwcm9nZWFyYmxfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBwcm9nZWFyYmxfaW5pdCh2b2lkKQoreworCWludCByZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnByb2dlYXJibF9kcml2ZXIpOworCisJaWYgKCFyZXQpIHsKKwkJcHJvZ2VhcmJsX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicHJvZ2Vhci1ibCIsIC0xKTsKKwkJaWYgKCFwcm9nZWFyYmxfZGV2aWNlKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwcm9nZWFyYmxfZGV2aWNlKTsKKworCQlpZiAocmV0KSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHByb2dlYXJibF9kZXZpY2UpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnByb2dlYXJibF9kcml2ZXIpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHByb2dlYXJibF9leGl0KHZvaWQpCit7CisJcGNpX2Rldl9wdXQocG11X2Rldik7CisJcGNpX2Rldl9wdXQoc2JfZGV2KTsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHByb2dlYXJibF9kZXZpY2UpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwcm9nZWFyYmxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocHJvZ2VhcmJsX2luaXQpOworbW9kdWxlX2V4aXQocHJvZ2VhcmJsX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJjaW4gSnVzemtpZXdpY3ogPGxpbnV4QGhydy5vbmUucGw+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlByb0dlYXIgQmFja2xpZ2h0IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2NoaXBzZmIuYwppbmRleCA3M2NiNDI2Li5hZjMxM2JmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMKQEAgLTE0NSwyNiArMTQ1LDYgQEAKIAogc3RhdGljIGludCBjaGlwc2ZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0JbXV0ZXhfbG9jaygmcG1hY19iYWNrbGlnaHRfbXV0ZXgpOwotCi0JaWYgKHBtYWNfYmFja2xpZ2h0KSB7Ci0JCS8qIHVzZWQgdG8gZGlzYWJsZSBiYWNrbGlnaHQgb25seSBmb3IgYmxhbmsgPiAxLCBidXQgaXQgc2VlbXMKLQkJICogdXNlZnVsIGF0IGJsYW5rID0gMSB0b28gKHNhdmVzIGJhdHRlcnksIGV4dGVuZHMgYmFja2xpZ2h0Ci0JCSAqIGxpZmUpCi0JIAkgKi8KLQkJZG93bigmcG1hY19iYWNrbGlnaHQtPnNlbSk7Ci0JCWlmIChibGFuaykKLQkJCXBtYWNfYmFja2xpZ2h0LT5wcm9wcy0+cG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047Ci0JCWVsc2UKLQkJCXBtYWNfYmFja2xpZ2h0LT5wcm9wcy0+cG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwotCQlwbWFjX2JhY2tsaWdodC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMocG1hY19iYWNrbGlnaHQpOwotCQl1cCgmcG1hY19iYWNrbGlnaHQtPnNlbSk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7Ci0jZW5kaWYgLyogQ09ORklHX1BNQUNfQkFDS0xJR0hUICovCi0KIAlyZXR1cm4gMTsJLyogZ2V0IGZiX2JsYW5rIHRvIHNldCB0aGUgY29sb3JtYXAgdG8gYWxsIGJsYWNrICovCiB9CiAKQEAgLTQxNSwxMCArMzk1LDggQEAKIAkvKiB0dXJuIG9uIHRoZSBiYWNrbGlnaHQgKi8KIAltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7CiAJaWYgKHBtYWNfYmFja2xpZ2h0KSB7Ci0JCWRvd24oJnBtYWNfYmFja2xpZ2h0LT5zZW0pOwotCQlwbWFjX2JhY2tsaWdodC0+cHJvcHMtPnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKLQkJcG1hY19iYWNrbGlnaHQtPnByb3BzLT51cGRhdGVfc3RhdHVzKHBtYWNfYmFja2xpZ2h0KTsKLQkJdXAoJnBtYWNfYmFja2xpZ2h0LT5zZW0pOworCQlwbWFjX2JhY2tsaWdodC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOworCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhwbWFjX2JhY2tsaWdodCk7CiAJfQogCW11dGV4X3VubG9jaygmcG1hY19iYWNrbGlnaHRfbXV0ZXgpOwogI2VuZGlmIC8qIENPTkZJR19QTUFDX0JBQ0tMSUdIVCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCBiZTNmMmMzLi4wNDI5ZmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtMjIzMyw2ICsyMjMzLDggQEAKIHN0YXRpYyB2b2lkIGZiY29uX2dlbmVyaWNfYmxhbmsoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKIAkJCQlpbnQgYmxhbmspCiB7CisJc3RydWN0IGZiX2V2ZW50IGV2ZW50OworCiAJaWYgKGJsYW5rKSB7CiAJCXVuc2lnbmVkIHNob3J0IGNoYXJtYXNrID0gdmMtPnZjX2hpX2ZvbnRfbWFzayA/CiAJCQkweDFmZiA6IDB4ZmY7CkBAIC0yMjQzLDYgKzIyNDUsMTEgQEAKIAkJZmJjb25fY2xlYXIodmMsIDAsIDAsIHZjLT52Y19yb3dzLCB2Yy0+dmNfY29scyk7CiAJCXZjLT52Y192aWRlb19lcmFzZV9jaGFyID0gb2xkYzsKIAl9CisKKworCWV2ZW50LmluZm8gPSBpbmZvOworCWV2ZW50LmRhdGEgPSAmYmxhbms7CisJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9DT05CTEFOSywgJmV2ZW50KTsKIH0KIAogc3RhdGljIGludCBmYmNvbl9ibGFuayhzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBibGFuaywgaW50IG1vZGVfc3dpdGNoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwppbmRleCA4MThmYjA5Li40MGM4MGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYwpAQCAtNTksNyArNTksNyBAQAogCWluZm8tPmRldmljZSA9IGRldjsKIAogI2lmZGVmIENPTkZJR19GQl9CQUNLTElHSFQKLQltdXRleF9pbml0KCZpbmZvLT5ibF9tdXRleCk7CisJbXV0ZXhfaW5pdCgmaW5mby0+YmxfY3VydmVfbXV0ZXgpOwogI2VuZGlmCiAKIAlyZXR1cm4gaW5mbzsKQEAgLTQ0NSwxMCArNDQ1LDEwIEBACiAJLyogSWYgdGhlcmUgaGFzIGJlZW4gYW4gZXJyb3IgaW4gdGhlIGlucHV0IGRhdGEsIHdlIHdvbid0CiAJICogcmVhY2ggdGhpcyBsb29wLgogCSAqLwotCW11dGV4X2xvY2soJmZiX2luZm8tPmJsX211dGV4KTsKKwltdXRleF9sb2NrKCZmYl9pbmZvLT5ibF9jdXJ2ZV9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IEZCX0JBQ0tMSUdIVF9MRVZFTFM7ICsraSkKIAkJZmJfaW5mby0+YmxfY3VydmVbaV0gPSB0bXBfY3VydmVbaV07Ci0JbXV0ZXhfdW5sb2NrKCZmYl9pbmZvLT5ibF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZmYl9pbmZvLT5ibF9jdXJ2ZV9tdXRleCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC00NjYsNyArNDY2LDcgQEAKIAlpZiAoIWZiX2luZm8gfHwgIWZiX2luZm8tPmJsX2RldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQltdXRleF9sb2NrKCZmYl9pbmZvLT5ibF9tdXRleCk7CisJbXV0ZXhfbG9jaygmZmJfaW5mby0+YmxfY3VydmVfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBGQl9CQUNLTElHSFRfTEVWRUxTOyBpICs9IDgpCiAJCWxlbiArPSBzbnByaW50ZigmYnVmW2xlbl0sIFBBR0VfU0laRSwKIAkJCQkiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLApAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCQkJZmJfaW5mby0+YmxfY3VydmVbaSArIDVdLAogCQkJCWZiX2luZm8tPmJsX2N1cnZlW2kgKyA2XSwKIAkJCQlmYl9pbmZvLT5ibF9jdXJ2ZVtpICsgN10pOwotCW11dGV4X3VubG9jaygmZmJfaW5mby0+YmxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZmJfaW5mby0+YmxfY3VydmVfbXV0ZXgpOwogCiAJcmV0dXJuIGxlbjsKIH0KQEAgLTU1Miw2ICs1NTIsOCBAQAogewogCXVuc2lnbmVkIGludCBpLCBmbGF0LCBjb3VudCwgcmFuZ2UgPSAobWF4IC0gbWluKTsKIAorCW11dGV4X2xvY2soJmZiX2luZm8tPmJsX2N1cnZlX211dGV4KTsKKwogCWZiX2luZm8tPmJsX2N1cnZlWzBdID0gb2ZmOwogCiAJZm9yIChmbGF0ID0gMTsgZmxhdCA8IChGQl9CQUNLTElHSFRfTEVWRUxTIC8gMTYpOyArK2ZsYXQpCkBAIC01NjAsNiArNTYyLDggQEAKIAljb3VudCA9IEZCX0JBQ0tMSUdIVF9MRVZFTFMgKiAxNSAvIDE2OwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQogCQlmYl9pbmZvLT5ibF9jdXJ2ZVtmbGF0ICsgaV0gPSBtaW4gKyAocmFuZ2UgKiAoaSArIDEpIC8gY291bnQpOworCisJbXV0ZXhfdW5sb2NrKCZmYl9pbmZvLT5ibF9jdXJ2ZV9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmYl9ibF9kZWZhdWx0X2N1cnZlKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCmluZGV4IGFiMWI4ZmUuLjdlNzYwMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogc3RhdGljIGludCB2c3luYzEgICAgIF9fZGV2aW5pdGRhdGE7CiBzdGF0aWMgaW50IHZzeW5jMiAgICAgX19kZXZpbml0ZGF0YTsKIHN0YXRpYyBpbnQgeHJlcyAgICAgICBfX2RldmluaXRkYXRhOwotc3RhdGljIGludCB5cmVzICAgICAgIF9fZGV2aW5pdGRhdGE7CitzdGF0aWMgaW50IHlyZXM7CiBzdGF0aWMgaW50IHZ5cmVzICAgICAgX19kZXZpbml0ZGF0YTsKIHN0YXRpYyBpbnQgc3luYyAgICAgICBfX2RldmluaXRkYXRhOwogc3RhdGljIGludCBleHR2Z2EgICAgIF9fZGV2aW5pdGRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2JhY2tsaWdodC5jCmluZGV4IGRmOTM0YmQuLmI3MDE2ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2JhY2tsaWdodC5jCkBAIC0xNiwxMSArMTYsNiBAQAogI2luY2x1ZGUgIm52X3R5cGUuaCIKICNpbmNsdWRlICJudl9wcm90by5oIgogCi0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0jaW5jbHVkZSA8YXNtL2JhY2tsaWdodC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jZW5kaWYKLQogLyogV2UgZG8gbm90IGhhdmUgYW55IGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIHZhbHVlcyBhcmUgYWxsb3dlZCwgdGh1cwogICogd2UgdXNlZCBzYWZlIHZhbHVlcy4KICAqLwpAQCAtMzAsNyArMjUsNiBAQAogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIG52aWRpYV9ibF9kYXRhOwogCi0vKiBDYWxsIHdpdGggZmJfaW5mby0+YmxfbXV0ZXggaGVsZCAqLwogc3RhdGljIGludCBudmlkaWFfYmxfZ2V0X2xldmVsX2JyaWdodG5lc3Moc3RydWN0IG52aWRpYV9wYXIgKnBhciwKIAkJaW50IGxldmVsKQogewpAQCAtMzgsNiArMzIsNyBAQAogCWludCBubGV2ZWw7CiAKIAkvKiBHZXQgYW5kIGNvbnZlcnQgdGhlIHZhbHVlICovCisJLyogTm8gbG9ja2luZyBvZiBibF9jdXJ2ZSBzaW5jZSB3ZSByZWFkIGEgc2luZ2xlIHZhbHVlICovCiAJbmxldmVsID0gTUlOX0xFVkVMICsgaW5mby0+YmxfY3VydmVbbGV2ZWxdICogTEVWRUxfU1RFUDsKIAogCWlmIChubGV2ZWwgPCAwKQpAQCAtNTAsOCArNDUsNyBAQAogCXJldHVybiBubGV2ZWw7CiB9CiAKLS8qIENhbGwgd2l0aCBmYl9pbmZvLT5ibF9tdXRleCBoZWxkICovCi1zdGF0aWMgaW50IF9fbnZpZGlhX2JsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQorc3RhdGljIGludCBudmlkaWFfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7CiAJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGNsYXNzX2dldF9kZXZkYXRhKCZiZC0+Y2xhc3NfZGV2KTsKIAl1MzIgdG1wX3BjcnQsIHRtcF9wbWMsIGZwY29udHJvbDsKQEAgLTYwLDExICs1NCwxMSBAQAogCWlmICghcGFyLT5GbGF0UGFuZWwpCiAJCXJldHVybiAwOwogCi0JaWYgKGJkLT5wcm9wcy0+cG93ZXIgIT0gRkJfQkxBTktfVU5CTEFOSyB8fAotCSAgICBiZC0+cHJvcHMtPmZiX2JsYW5rICE9IEZCX0JMQU5LX1VOQkxBTkspCisJaWYgKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LIHx8CisJICAgIGJkLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQogCQlsZXZlbCA9IDA7CiAJZWxzZQotCQlsZXZlbCA9IGJkLT5wcm9wcy0+YnJpZ2h0bmVzczsKKwkJbGV2ZWwgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIAogCXRtcF9wbWMgPSBOVl9SRDMyKHBhci0+UE1DLCAweDEwRjApICYgMHgwMDAwRkZGRjsKIAl0bXBfcGNydCA9IE5WX1JEMzIocGFyLT5QQ1JUQzAsIDB4MDgxQykgJiAweEZGRkZGRkZDOwpAQCAtODUsNDUgKzc5LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbnZpZGlhX2JsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQotewotCXN0cnVjdCBudmlkaWFfcGFyICpwYXIgPSBjbGFzc19nZXRfZGV2ZGF0YSgmYmQtPmNsYXNzX2Rldik7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGFyLT5wY2lfZGV2KTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmaW5mby0+YmxfbXV0ZXgpOwotCXJldCA9IF9fbnZpZGlhX2JsX3VwZGF0ZV9zdGF0dXMoYmQpOwotCW11dGV4X3VubG9jaygmaW5mby0+YmxfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBudmlkaWFfYmxfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXJldHVybiBiZC0+cHJvcHMtPmJyaWdodG5lc3M7CisJcmV0dXJuIGJkLT5wcm9wcy5icmlnaHRuZXNzOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIG52aWRpYV9ibF9kYXRhID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBudmlkaWFfYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IG52aWRpYV9ibF9nZXRfYnJpZ2h0bmVzcywKIAkudXBkYXRlX3N0YXR1cwk9IG52aWRpYV9ibF91cGRhdGVfc3RhdHVzLAotCS5tYXhfYnJpZ2h0bmVzcyA9IChGQl9CQUNLTElHSFRfTEVWRUxTIC0gMSksCiB9OwogCi12b2lkIG52aWRpYV9ibF9zZXRfcG93ZXIoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBwb3dlcikKLXsKLQltdXRleF9sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0KLQlpZiAoaW5mby0+YmxfZGV2KSB7Ci0JCWRvd24oJmluZm8tPmJsX2Rldi0+c2VtKTsKLQkJaW5mby0+YmxfZGV2LT5wcm9wcy0+cG93ZXIgPSBwb3dlcjsKLQkJX19udmlkaWFfYmxfdXBkYXRlX3N0YXR1cyhpbmZvLT5ibF9kZXYpOwotCQl1cCgmaW5mby0+YmxfZGV2LT5zZW0pOwotCX0KLQotCW11dGV4X3VubG9jaygmaW5mby0+YmxfbXV0ZXgpOwotfQotCiB2b2lkIG52aWRpYV9ibF9pbml0KHN0cnVjdCBudmlkaWFfcGFyICpwYXIpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGFyLT5wY2lfZGV2KTsKQEAgLTE0MSwzMiArMTA2LDIyIEBACiAKIAlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJudmlkaWFibCVkIiwgaW5mby0+bm9kZSk7CiAKLQliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgaW5mby0+ZGV2LCBwYXIsICZudmlkaWFfYmxfZGF0YSk7CisJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsIGluZm8tPmRldiwgcGFyLCAmbnZpZGlhX2JsX29wcyk7CiAJaWYgKElTX0VSUihiZCkpIHsKIAkJaW5mby0+YmxfZGV2ID0gTlVMTDsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibnZpZGlhOiBCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JbXV0ZXhfbG9jaygmaW5mby0+YmxfbXV0ZXgpOwogCWluZm8tPmJsX2RldiA9IGJkOwogCWZiX2JsX2RlZmF1bHRfY3VydmUoaW5mbywgMCwKIAkJMHgxNTggKiBGQl9CQUNLTElHSFRfTUFYIC8gTUFYX0xFVkVMLAogCQkweDUzNCAqIEZCX0JBQ0tMSUdIVF9NQVggLyBNQVhfTEVWRUwpOwotCW11dGV4X3VubG9jaygmaW5mby0+YmxfbXV0ZXgpOwogCi0JZG93bigmYmQtPnNlbSk7Ci0JYmQtPnByb3BzLT5icmlnaHRuZXNzID0gbnZpZGlhX2JsX2RhdGEubWF4X2JyaWdodG5lc3M7Ci0JYmQtPnByb3BzLT5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7Ci0JYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKGJkKTsKLQl1cCgmYmQtPnNlbSk7Ci0KLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7Ci0JaWYgKCFwbWFjX2JhY2tsaWdodCkKLQkJcG1hY19iYWNrbGlnaHQgPSBiZDsKLQltdXRleF91bmxvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKLSNlbmRpZgorCWJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEZCX0JBQ0tMSUdIVF9MRVZFTFMgLSAxOworCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gbnZpZGlhX2JsX2RhdGEubWF4X2JyaWdodG5lc3M7CisJYmQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CiAKIAlwcmludGsoIm52aWRpYTogQmFja2xpZ2h0IGluaXRpYWxpemVkICglcylcbiIsIG5hbWUpOwogCkBAIC0xNzksMjUgKzEzNCw4IEBACiB2b2lkIG52aWRpYV9ibF9leGl0KHN0cnVjdCBudmlkaWFfcGFyICpwYXIpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGFyLT5wY2lfZGV2KTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBpbmZvLT5ibF9kZXY7CiAKLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7Ci0jZW5kaWYKLQotCW11dGV4X2xvY2soJmluZm8tPmJsX211dGV4KTsKLQlpZiAoaW5mby0+YmxfZGV2KSB7Ci0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0JCWlmIChwbWFjX2JhY2tsaWdodCA9PSBpbmZvLT5ibF9kZXYpCi0JCQlwbWFjX2JhY2tsaWdodCA9IE5VTEw7Ci0jZW5kaWYKLQotCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoaW5mby0+YmxfZGV2KTsKLQotCQlwcmludGsoIm52aWRpYTogQmFja2xpZ2h0IHVubG9hZGVkXG4iKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0KLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQltdXRleF91bmxvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKLSNlbmRpZgorCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihiZCk7CisJcHJpbnRrKCJudmlkaWE6IEJhY2tsaWdodCB1bmxvYWRlZFxuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9wcm90by5oIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfcHJvdG8uaAppbmRleCA0MzA1OGQwLi5mZjVjNDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9wcm90by5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3Byb3RvLmgKQEAgLTY3LDExICs2Nyw5IEBACiAjaWZkZWYgQ09ORklHX0ZCX05WSURJQV9CQUNLTElHSFQKIGV4dGVybiB2b2lkIG52aWRpYV9ibF9pbml0KHN0cnVjdCBudmlkaWFfcGFyICpwYXIpOwogZXh0ZXJuIHZvaWQgbnZpZGlhX2JsX2V4aXQoc3RydWN0IG52aWRpYV9wYXIgKnBhcik7Ci1leHRlcm4gdm9pZCBudmlkaWFfYmxfc2V0X3Bvd2VyKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgcG93ZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBudmlkaWFfYmxfaW5pdChzdHJ1Y3QgbnZpZGlhX3BhciAqcGFyKSB7fQogc3RhdGljIGlubGluZSB2b2lkIG52aWRpYV9ibF9leGl0KHN0cnVjdCBudmlkaWFfcGFyICpwYXIpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgbnZpZGlhX2JsX3NldF9wb3dlcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHBvd2VyKSB7fQogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX05WX1BST1RPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYwppbmRleCA4ZTViNDg0Li5jMThlOTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYworKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYwpAQCAtOTM4LDggKzkzOCw2IEBACiAJTlZXcml0ZVNlcShwYXIsIDB4MDEsIHRtcCk7CiAJTlZXcml0ZUNydGMocGFyLCAweDFhLCB2ZXNhKTsKIAotCW52aWRpYV9ibF9zZXRfcG93ZXIoaW5mbywgYmxhbmspOwotCiAJTlZUUkFDRV9MRUFWRSgpOwogCiAJcmV0dXJuIDA7CkBAIC0xMzUyLDkgKzEzNTAsMTAgQEAKIAogCU5WVFJBQ0VfRU5URVIoKTsKIAorCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisKIAludmlkaWFfYmxfZXhpdChwYXIpOwogCi0JdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKICNpZmRlZiBDT05GSUdfTVRSUgogCWlmIChwYXItPm10cnIudnJhbV92YWxpZCkKIAkJbXRycl9kZWwocGFyLT5tdHJyLnZyYW0sIGluZm8tPmZpeC5zbWVtX3N0YXJ0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMgYi9kcml2ZXJzL3ZpZGVvL3JpdmEvZmJkZXYuYwppbmRleCBmMmU5Yjc0Li5mOGEzZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3JpdmEvZmJkZXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL3JpdmEvZmJkZXYuYwpAQCAtMjgyLDcgKzI4Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcml2YV9ibF9kYXRhOwogCi0vKiBDYWxsIHdpdGggZmJfaW5mby0+YmxfbXV0ZXggaGVsZCAqLwogc3RhdGljIGludCByaXZhX2JsX2dldF9sZXZlbF9icmlnaHRuZXNzKHN0cnVjdCByaXZhX3BhciAqcGFyLAogCQlpbnQgbGV2ZWwpCiB7CkBAIC0yOTAsNiArMjg5LDcgQEAKIAlpbnQgbmxldmVsOwogCiAJLyogR2V0IGFuZCBjb252ZXJ0IHRoZSB2YWx1ZSAqLworCS8qIE5vIGxvY2tpbmcgb24gYmxfY3VydmUgc2luY2UgYWNjZXNzaW5nIGEgc2luZ2xlIHZhbHVlICovCiAJbmxldmVsID0gTUlOX0xFVkVMICsgaW5mby0+YmxfY3VydmVbbGV2ZWxdICogTEVWRUxfU1RFUDsKIAogCWlmIChubGV2ZWwgPCAwKQpAQCAtMzAyLDE4ICszMDIsMTcgQEAKIAlyZXR1cm4gbmxldmVsOwogfQogCi0vKiBDYWxsIHdpdGggZmJfaW5mby0+YmxfbXV0ZXggaGVsZCAqLwotc3RhdGljIGludCBfX3JpdmFfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCitzdGF0aWMgaW50IHJpdmFfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7CiAJc3RydWN0IHJpdmFfcGFyICpwYXIgPSBjbGFzc19nZXRfZGV2ZGF0YSgmYmQtPmNsYXNzX2Rldik7CiAJVTAzMiB0bXBfcGNydCwgdG1wX3BtYzsKIAlpbnQgbGV2ZWw7CiAKLQlpZiAoYmQtPnByb3BzLT5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LIHx8Ci0JICAgIGJkLT5wcm9wcy0+ZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKKwlpZiAoYmQtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTksgfHwKKwkgICAgYmQtPnByb3BzLmZiX2JsYW5rICE9IEZCX0JMQU5LX1VOQkxBTkspCiAJCWxldmVsID0gMDsKIAllbHNlCi0JCWxldmVsID0gYmQtPnByb3BzLT5icmlnaHRuZXNzOworCQlsZXZlbCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwogCiAJdG1wX3BtYyA9IHBhci0+cml2YS5QTUNbMHgxMEYwLzRdICYgMHgwMDAwRkZGRjsKIAl0bXBfcGNydCA9IHBhci0+cml2YS5QQ1JUQzBbMHgwODFDLzRdICYgMHhGRkZGRkZGQzsKQEAgLTMyOCw0NSArMzI3LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcml2YV9ibF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKLXsKLQlzdHJ1Y3Qgcml2YV9wYXIgKnBhciA9IGNsYXNzX2dldF9kZXZkYXRhKCZiZC0+Y2xhc3NfZGV2KTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwYXItPnBkZXYpOwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0JcmV0ID0gX19yaXZhX2JsX3VwZGF0ZV9zdGF0dXMoYmQpOwotCW11dGV4X3VubG9jaygmaW5mby0+YmxfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCByaXZhX2JsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKLQlyZXR1cm4gYmQtPnByb3BzLT5icmlnaHRuZXNzOworCXJldHVybiBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyByaXZhX2JsX2RhdGEgPSB7Ci0JLm93bmVyICAgID0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgcml2YV9ibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gcml2YV9ibF9nZXRfYnJpZ2h0bmVzcywKIAkudXBkYXRlX3N0YXR1cwk9IHJpdmFfYmxfdXBkYXRlX3N0YXR1cywKLQkubWF4X2JyaWdodG5lc3MgPSAoRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDEpLAogfTsKIAotc3RhdGljIHZvaWQgcml2YV9ibF9zZXRfcG93ZXIoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBwb3dlcikKLXsKLQltdXRleF9sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0KLQlpZiAoaW5mby0+YmxfZGV2KSB7Ci0JCWRvd24oJmluZm8tPmJsX2Rldi0+c2VtKTsKLQkJaW5mby0+YmxfZGV2LT5wcm9wcy0+cG93ZXIgPSBwb3dlcjsKLQkJX19yaXZhX2JsX3VwZGF0ZV9zdGF0dXMoaW5mby0+YmxfZGV2KTsKLQkJdXAoJmluZm8tPmJsX2Rldi0+c2VtKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmluZm8tPmJsX211dGV4KTsKLX0KLQogc3RhdGljIHZvaWQgcml2YV9ibF9pbml0KHN0cnVjdCByaXZhX3BhciAqcGFyKQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBhci0+cGRldik7CkBAIC0zODQsMzIgKzM1NCwyMiBAQAogCiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicml2YWJsJWQiLCBpbmZvLT5ub2RlKTsKIAotCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBpbmZvLT5kZXYsIHBhciwgJnJpdmFfYmxfZGF0YSk7CisJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsIGluZm8tPmRldiwgcGFyLCAmcml2YV9ibF9vcHMpOwogCWlmIChJU19FUlIoYmQpKSB7CiAJCWluZm8tPmJsX2RldiA9IE5VTEw7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJpdmE6IEJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQltdXRleF9sb2NrKCZpbmZvLT5ibF9tdXRleCk7CiAJaW5mby0+YmxfZGV2ID0gYmQ7CiAJZmJfYmxfZGVmYXVsdF9jdXJ2ZShpbmZvLCAwLAogCQlNSU5fTEVWRUwgKiBGQl9CQUNLTElHSFRfTUFYIC8gTUFYX0xFVkVMLAogCQlGQl9CQUNLTElHSFRfTUFYKTsKLQltdXRleF91bmxvY2soJmluZm8tPmJsX211dGV4KTsKIAotCWRvd24oJmJkLT5zZW0pOwotCWJkLT5wcm9wcy0+YnJpZ2h0bmVzcyA9IHJpdmFfYmxfZGF0YS5tYXhfYnJpZ2h0bmVzczsKLQliZC0+cHJvcHMtPnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKLQliZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMoYmQpOwotCXVwKCZiZC0+c2VtKTsKLQotI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAotCW11dGV4X2xvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKLQlpZiAoIXBtYWNfYmFja2xpZ2h0KQotCQlwbWFjX2JhY2tsaWdodCA9IGJkOwotCW11dGV4X3VubG9jaygmcG1hY19iYWNrbGlnaHRfbXV0ZXgpOwotI2VuZGlmCisJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDE7CisJYmQtPnByb3BzLmJyaWdodG5lc3MgPSByaXZhX2JsX2RhdGEubWF4X2JyaWdodG5lc3M7CisJYmQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CiAKIAlwcmludGsoInJpdmE6IEJhY2tsaWdodCBpbml0aWFsaXplZCAoJXMpXG4iLCBuYW1lKTsKIApAQCAtNDE5LDM1ICszNzksMTYgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIHJpdmFfYmxfZXhpdChzdHJ1Y3Qgcml2YV9wYXIgKnBhcikKK3N0YXRpYyB2b2lkIHJpdmFfYmxfZXhpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwYXItPnBkZXYpOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IGluZm8tPmJsX2RldjsKIAotI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAotCW11dGV4X2xvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKLSNlbmRpZgotCi0JbXV0ZXhfbG9jaygmaW5mby0+YmxfbXV0ZXgpOwotCWlmIChpbmZvLT5ibF9kZXYpIHsKLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQkJaWYgKHBtYWNfYmFja2xpZ2h0ID09IGluZm8tPmJsX2RldikKLQkJCXBtYWNfYmFja2xpZ2h0ID0gTlVMTDsKLSNlbmRpZgotCi0JCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihpbmZvLT5ibF9kZXYpOwotCi0JCXByaW50aygicml2YTogQmFja2xpZ2h0IHVubG9hZGVkXG4iKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0KLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQltdXRleF91bmxvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKLSNlbmRpZgorCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihiZCk7CisJcHJpbnRrKCJyaXZhOiBCYWNrbGlnaHQgdW5sb2FkZWRcbiIpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCByaXZhX2JsX2luaXQoc3RydWN0IHJpdmFfcGFyICpwYXIpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcml2YV9ibF9leGl0KHN0cnVjdCByaXZhX3BhciAqcGFyKSB7fQotc3RhdGljIGlubGluZSB2b2lkIHJpdmFfYmxfc2V0X3Bvd2VyKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgcG93ZXIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcml2YV9ibF9leGl0KHN0cnVjdCBmYl9pbmZvICppbmZvKSB7fQogI2VuZGlmIC8qIENPTkZJR19GQl9SSVZBX0JBQ0tMSUdIVCAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKQEAgLTEzNDgsOCArMTI4OSw2IEBACiAJU0VRb3V0KHBhciwgMHgwMSwgdG1wKTsKIAlDUlRDb3V0KHBhciwgMHgxYSwgdmVzYSk7CiAKLQlyaXZhX2JsX3NldF9wb3dlcihpbmZvLCBibGFuayk7Ci0KIAlOVlRSQUNFX0xFQVZFKCk7CiAKIAlyZXR1cm4gMDsKQEAgLTIxNjYsMTQgKzIxMDUsMTUgQEAKIAkKIAlOVlRSQUNFX0VOVEVSKCk7CiAKLQlyaXZhX2JsX2V4aXQocGFyKTsKLQogI2lmZGVmIENPTkZJR19GQl9SSVZBX0kyQwogCXJpdmFfZGVsZXRlX2kyY19idXNzZXMocGFyKTsKIAlrZnJlZShwYXItPkVESUQpOwogI2VuZGlmCiAKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCisJcml2YV9ibF9leGl0KGluZm8pOworCiAjaWZkZWYgQ09ORklHX01UUlIKIAlpZiAocGFyLT5tdHJyLnZyYW1fdmFsaWQpCiAJCW10cnJfZGVsKHBhci0+bXRyci52cmFtLCBpbmZvLT5maXguc21lbV9zdGFydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCmluZGV4IGNjZWY1NmQuLmVkMzQyNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwpAQCAtNzkxLDYgKzc5MSw4IEBACiAKIAlpbmZvID0gZmJpbmZvLT5wYXI7CiAJaW5mby0+ZmIgPSBmYmluZm87CisJaW5mby0+ZGV2ID0gJnBkZXYtPmRldjsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZiaW5mbyk7CiAKIAlkcHJpbnRrKCJkZXZpbml0XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jIGIvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiMjkwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jCkBAIC0wLDAgKzEsMTc4NiBAQAorLyogbGludXgvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQHNpbXRlYy5jby51az4KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIEZyYW1lYnVmZmVyIGRyaXZlciBmb3IgdGhlIFNpbGljb24gTW90aW9uIFNNNTAxCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaWZkZWYgQ09ORklHX1BNCisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvc201MDEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbTUwMS1yZWdzLmg+CisKKyNkZWZpbmUgTlJfUEFMRVRURQkyNTYKKworZW51bSBzbTUwMV9jb250cm9sbGVyIHsKKwlIRUFEX0NSVAk9IDAsCisJSEVBRF9QQU5FTAk9IDEsCit9OworCisvKiBTTTUwMSBtZW1vcnkgYWRyZXNzICovCitzdHJ1Y3Qgc201MDFfbWVtIHsKKwl1bnNpZ25lZCBsb25nCSBzaXplOworCXVuc2lnbmVkIGxvbmcJIHNtX2FkZHI7CisJdm9pZCBfX2lvbWVtCSprX2FkZHI7Cit9OworCisvKiBwcml2YXRlIGRhdGEgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgZnJhbWJ1ZmZlcnMqICovCitzdHJ1Y3Qgc201MDFmYl9pbmZvIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBmYl9pbmZvCQkqZmJbMl07CQkvKiBmYiBpbmZvIGZvciBib3RoIGhlYWRzICovCisJc3RydWN0IHJlc291cmNlCQkqZmJtZW1fcmVzOwkvKiBmcmFtZWJ1ZmZlciByZXNvdXJjZSAqLworCXN0cnVjdCByZXNvdXJjZQkJKnJlZ3NfcmVzOwkvKiByZWdpc3RlcnMgcmVzb3VyY2UgKi8KKwlzdHJ1Y3Qgc201MDFfcGxhdGRhdGFfZmIgKnBkYXRhOwkvKiBvdXIgcGxhdGZvcm0gZGF0YSAqLworCisJaW50CQkJIGlycTsKKwlpbnQJCQkgc3dhcF9lbmRpYW47CS8qIHNldCB0byBzd2FwIHJnYj0+YmdyICovCisJdm9pZCBfX2lvbWVtCQkqcmVnczsJCS8qIHJlbWFwcGVkIHJlZ2lzdGVycyAqLworCXZvaWQgX19pb21lbQkJKmZibWVtOwkJLyogcmVtYXBwZWQgZnJhbWVidWZmZXIgKi8KKwlzaXplX3QJCQkgZmJtZW1fbGVuOwkvKiBsZW5ndGggb2YgcmVtYXBwZWQgcmVnaW9uICovCit9OworCisvKiBwZXItZnJhbWVidWZmZXIgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgc201MDFmYl9wYXIgeworCXUzMgkJCSBwc2V1ZG9fcGFsZXR0ZVsxNl07CisKKwllbnVtIHNtNTAxX2NvbnRyb2xsZXIJIGhlYWQ7CisJc3RydWN0IHNtNTAxX21lbQkgY3Vyc29yOworCXN0cnVjdCBzbTUwMV9tZW0JIHNjcmVlbjsKKwlzdHJ1Y3QgZmJfb3BzCQkgb3BzOworCisJdm9pZAkJCSpzdG9yZV9mYjsKKwl2b2lkCQkJKnN0b3JlX2N1cnNvcjsKKwl2b2lkIF9faW9tZW0JCSpjdXJzb3JfcmVnczsKKwlzdHJ1Y3Qgc201MDFmYl9pbmZvCSppbmZvOworfTsKKworLyogSGVscGVyIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgaW5saW5lIGludCBoX3RvdGFsKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCXJldHVybiB2YXItPnhyZXMgKyB2YXItPmxlZnRfbWFyZ2luICsKKwkJdmFyLT5yaWdodF9tYXJnaW4gKyB2YXItPmhzeW5jX2xlbjsKK30KKworc3RhdGljIGlubGluZSBpbnQgdl90b3RhbChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwlyZXR1cm4gdmFyLT55cmVzICsgdmFyLT51cHBlcl9tYXJnaW4gKworCQl2YXItPmxvd2VyX21hcmdpbiArIHZhci0+dnN5bmNfbGVuOworfQorCisvKiBzbTUwMWZiX3N5bmNfcmVncygpCisgKgorICogVGhpcyBjYWxsIGlzIG1haW5seSBmb3IgUENJIGJ1cyBzeXN0ZW1zIHdoZXJlIHdlIG5lZWQgdG8KKyAqIGVuc3VyZSB0aGF0IGFueSB3cml0ZXMgdG8gdGhlIGJ1cyBhcmUgY29tcGxldGVkIGJlZm9yZSB0aGUKKyAqIG5leHQgcGhhc2UsIG9yIGFmdGVyIGNvbXBsZXRpbmcgYSBmdW5jdGlvbi4KKyovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbTUwMWZiX3N5bmNfcmVncyhzdHJ1Y3Qgc201MDFmYl9pbmZvICppbmZvKQoreworCXJlYWRsKGluZm8tPnJlZ3MpOworfQorCisvKiBzbTUwMV9hbGxvY19tZW0KKyAqCisgKiBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gbGF5IG91dCBtZW1vcnkgZm9yIHRoZSB0d28gZnJhbWVidWZmZXJzIGFuZAorICogZXZlcnl0aGluZyBlbHNlCisgKgorICogfGZibWVtX3Jlcy0+c3RhcnQJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJtZW1fcmVzLT5lbmR8CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHxmYlswXS5maXguc21lbV9zdGFydCAgICB8ICAgICAgICAgfGZiWzFdLmZpeC5zbWVtX3N0YXJ0ICAgIHwgICAgIDJLICAgICAgfAorICogfC0+IGZiWzBdLmZpeC5zbWVtX2xlbiA8LXwgc3BhcmUgICB8LT4gZmJbMV0uZml4LnNtZW1fbGVuIDwtfC0+IGN1cnNvcnMgPC18CisgKgorICogVGhlICJzcGFyZSIgc3BhY2UgaXMgZm9yIHRoZSAyZCBlbmdpbmUgZGF0YQorICogdGhlIGZpeGVkIGlzIHNwYWNlIGZvciB0aGUgY3Vyc29ycyAoMngxS2J5dGUpCisgKgorICogd2UgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSAyRCBhY2NlbGVyYXRpb24gZW5naW5lCisgKiBjb21tYW5kIGxpc3QgYW5kIHRoZSBkYXRhIGZvciB0aGUgZW5naW5lIHRvIGRlYWwgd2l0aC4KKyAqCisgKiAtIGFsbCBhbGxvY2F0aW9ucyBtdXN0IGJlIDEyOGJpdCBhbGlnbmVkCisgKiAtIGN1cnNvcnMgYXJlIDY0eDY0eDIgYml0cyAoMUtieXRlKQorICoKKyAqLworCisjZGVmaW5lIFNNNTAxX01FTUZfQ1VSU09SCQkoMSkKKyNkZWZpbmUgU001MDFfTUVNRl9QQU5FTAkJKDIpCisjZGVmaW5lIFNNNTAxX01FTUZfQ1JUCQkJKDQpCisjZGVmaW5lIFNNNTAxX01FTUZfQUNDRUwJCSg4KQorCitpbnQgc201MDFfYWxsb2NfbWVtKHN0cnVjdCBzbTUwMWZiX2luZm8gKmluZiwgc3RydWN0IHNtNTAxX21lbSAqbWVtLAorCQkgICAgdW5zaWduZWQgaW50IHdoeSwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgaW50IHB0ciA9IDA7CisKKwlzd2l0Y2ggKHdoeSkgeworCWNhc2UgU001MDFfTUVNRl9DVVJTT1I6CisJCXB0ciA9IGluZi0+ZmJtZW1fbGVuIC0gc2l6ZTsKKwkJaW5mLT5mYm1lbV9sZW4gPSBwdHI7CisJCWJyZWFrOworCisJY2FzZSBTTTUwMV9NRU1GX1BBTkVMOgorCQlwdHIgPSBpbmYtPmZibWVtX2xlbiAtIHNpemU7CisJCWlmIChwdHIgPCBpbmYtPmZiWzBdLT5maXguc21lbV9sZW4pCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlicmVhazsKKworCWNhc2UgU001MDFfTUVNRl9DUlQ6CisJCXB0ciA9IDA7CisJCWJyZWFrOworCisJY2FzZSBTTTUwMV9NRU1GX0FDQ0VMOgorCQlwdHIgPSBpbmYtPmZiWzBdLT5maXguc21lbV9sZW47CisKKwkJaWYgKChwdHIgKyBzaXplKSA+CisJCSAgICAoaW5mLT5mYlsxXS0+Zml4LnNtZW1fc3RhcnQgLSBpbmYtPmZibWVtX3Jlcy0+c3RhcnQpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtLT5zaXplICAgID0gc2l6ZTsKKwltZW0tPnNtX2FkZHIgPSBwdHI7CisJbWVtLT5rX2FkZHIgID0gaW5mLT5mYm1lbSArIHB0cjsKKworCWRldl9kYmcoaW5mLT5kZXYsICIlczogcmVzdWx0ICUwOGx4LCAlcCAtICV1LCAlemRcbiIsCisJCV9fZnVuY19fLCBtZW0tPnNtX2FkZHIsIG1lbS0+a19hZGRyLCB3aHksIHNpemUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHNtNTAxZmJfcHNfdG9faHoKKyAqCisgKiBDb252ZXJ0cyBhIHBlcmlvZCBpbiBwaWNvc2Vjb25kcyB0byBIei4KKyAqCisgKiBOb3RlLCB3ZSB0cnkgdG8ga2VlcCB0aGlzIGluIEh6IHRvIG1pbmltaXNlIHJvdW5kaW5nIHdpdGgKKyAqIHRoZSBsaW1pdGVkIFBMTCBzZXR0aW5ncyBvbiB0aGUgU001MDEuCisqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzbTUwMWZiX3BzX3RvX2h6KHVuc2lnbmVkIGxvbmcgcHN2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbnVtZXJhdG9yPTEwMDAwMDAwMDAwMDBVTEw7CisKKwkvKiAxMF4xMiAvIHBpY29zZWNvbmQgcGVyaW9kIGdpdmVzIGZyZXF1ZW5jeSBpbiBIeiAqLworCWRvX2RpdihudW1lcmF0b3IsIHBzdmFsdWUpOworCXJldHVybiAodW5zaWduZWQgbG9uZyludW1lcmF0b3I7Cit9CisKKy8qIHNtNTAxZmJfaHpfdG9fcHMgaXMgaWRlbnRpY2FsIHRvIHRoZSBvcG9zaXRlIHRyYW5zZm9ybSAqLworCisjZGVmaW5lIHNtNTAxZmJfaHpfdG9fcHMoeCkgc201MDFmYl9wc190b19oeih4KQorCisvKiBzbTUwMWZiX3NldHVwX2dhbW1hCisgKgorICogUHJvZ3JhbXMgYSBsaW5lYXIgMS4wIGdhbW1hIHJhbXAgaW4gY2FzZSB0aGUgZ2FtbWEKKyAqIGNvcnJlY3Rpb24gaXMgZW5hYmxlZCB3aXRob3V0IHByb2dyYW1taW5nIGFueXRoaW5nIGVsc2UuCisqLworCitzdGF0aWMgdm9pZCBzbTUwMWZiX3NldHVwX2dhbW1hKHN0cnVjdCBzbTUwMWZiX2luZm8gKmZiaSwKKwkJCQl1bnNpZ25lZCBsb25nIHBhbGV0dGUpCit7CisJdW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7CisJaW50IG9mZnNldDsKKworCS8qIHNldCBnYW1tYSB2YWx1ZXMgKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IDI1NiAqIDQ7IG9mZnNldCArPSA0KSB7CisJCXdyaXRlbCh2YWx1ZSwgZmJpLT5yZWdzICsgcGFsZXR0ZSArIG9mZnNldCk7CisJCXZhbHVlICs9IDB4MDEwMTAxOyAJLyogQWR2YW5jZSBSR0IgYnkgMSwxLDEuKi8KKwl9Cit9CisKKy8qIHNtNTAxZmJfY2hlY2tfdmFyCisgKgorICogY2hlY2sgY29tbW9uIHZhcmlhYmxlcyBmb3IgYm90aCBwYW5lbCBhbmQgY3J0CisqLworCitzdGF0aWMgaW50IHNtNTAxZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc201MDFmYl9wYXIgICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqc20gID0gcGFyLT5pbmZvOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJLyogY2hlY2sgd2UgY2FuIGZpdCB0aGVzZSB2YWx1ZXMgaW50byB0aGUgcmVnaXN0ZXJzICovCisKKwlpZiAodmFyLT5oc3luY19sZW4gPiAyNTUgfHwgdmFyLT52c3luY19sZW4gPiAyNTUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCh2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbikgPj0gNDA5NikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKHZhci0+eXJlcyArIHZhci0+bG93ZXJfbWFyZ2luKSA+IDIwNDgpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogaGFyZCBsaW1pdHMgb2YgZGV2aWNlICovCisKKwlpZiAoaF90b3RhbCh2YXIpID4gNDA5NiB8fCB2X3RvdGFsKHZhcikgPiAyMDQ4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGNoZWNrIG91ciBsaW5lIGxlbmd0aCBpcyBnb2luZyB0byBiZSAxMjggYml0IGFsaWduZWQgKi8KKworCXRtcCA9ICh2YXItPnhyZXMgKiB2YXItPmJpdHNfcGVyX3BpeGVsKSAvIDg7CisJaWYgKCh0bXAgJiAxNSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBjaGVjayB0aGUgdmlydHVhbCBzaXplICovCisKKwlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPiA0MDk2IHx8IHZhci0+eXJlc192aXJ0dWFsID4gMjA0OCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBjYW4gY29wZSB3aXRoIDgsMTYgb3IgMzJicHAgKi8KKworCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsIDw9IDgpCisJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSA4OworCWVsc2UgaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPD0gMTYpCisJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsKKwllbHNlIGlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDI0KQorCQl2YXItPmJpdHNfcGVyX3BpeGVsID0gMzI7CisKKwkvKiBzZXQgci9nL2IgcG9zaXRpb25zIGFuZCB2YWxpZGF0ZSBicHAgKi8KKwlzd2l0Y2godmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJdmFyLT5yZWQubGVuZ3RoCQk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCXZhci0+cmVkLm9mZnNldAkJPSAwOworCQl2YXItPmdyZWVuLmxlbmd0aAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCXZhci0+Z3JlZW4ub2Zmc2V0CT0gMDsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCXZhci0+Ymx1ZS5vZmZzZXQJPSAwOworCQl2YXItPnRyYW5zcC5sZW5ndGgJPSAwOworCisJCWJyZWFrOworCisJY2FzZSAxNjoKKwkJaWYgKHNtLT5wZGF0YS0+ZmxhZ3MgJiBTTTUwMV9GQlBEX1NXQVBfRkJfRU5ESUFOKSB7CisJCQl2YXItPnJlZC5vZmZzZXQJCT0gMTE7CisJCQl2YXItPmdyZWVuLm9mZnNldAk9IDU7CisJCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKKwkJfSBlbHNlIHsKKwkJCXZhci0+Ymx1ZS5vZmZzZXQJPSAxMTsKKwkJCXZhci0+Z3JlZW4ub2Zmc2V0CT0gNTsKKwkJCXZhci0+cmVkLm9mZnNldAkJPSAwOworCQl9CisKKwkJdmFyLT5yZWQubGVuZ3RoCQk9IDU7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IDU7CisJCXZhci0+dHJhbnNwLmxlbmd0aAk9IDA7CisJCWJyZWFrOworCisJY2FzZSAzMjoKKwkJaWYgKHNtLT5wZGF0YS0+ZmxhZ3MgJiBTTTUwMV9GQlBEX1NXQVBfRkJfRU5ESUFOKSB7CisJCQl2YXItPnRyYW5zcC5vZmZzZXQJPSAwOworCQkJdmFyLT5yZWQub2Zmc2V0CQk9IDg7CisJCQl2YXItPmdyZWVuLm9mZnNldAk9IDE2OworCQkJdmFyLT5ibHVlLm9mZnNldAk9IDI0OworCQl9IGVsc2UgeworCQkJdmFyLT50cmFuc3Aub2Zmc2V0CT0gMjQ7CisJCQl2YXItPnJlZC5vZmZzZXQJCT0gMTY7CisJCQl2YXItPmdyZWVuLm9mZnNldAk9IDg7CisJCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKKwkJfQorCisJCXZhci0+cmVkLmxlbmd0aAkJPSA4OworCQl2YXItPmdyZWVuLmxlbmd0aAk9IDg7CisJCXZhci0+Ymx1ZS5sZW5ndGgJPSA4OworCQl2YXItPnRyYW5zcC5sZW5ndGgJPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogc201MDFmYl9jaGVja192YXJfY3J0KCk6CisgKgorICogY2hlY2sgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBDUlQgaGVhZCwgYW5kIGVpdGhlciBicmluZyB0aGVtCisgKiBiYWNrIGludG8gcmFuZ2UsIG9yIHJldHVybiAtRUlOVkFMLgorKi8KKworc3RhdGljIGludCBzbTUwMWZiX2NoZWNrX3Zhcl9jcnQoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkJIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXJldHVybiBzbTUwMWZiX2NoZWNrX3Zhcih2YXIsIGluZm8pOworfQorCisvKiBzbTUwMWZiX2NoZWNrX3Zhcl9wbmwoKToKKyAqCisgKiBjaGVjayB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIENSVCBoZWFkLCBhbmQgZWl0aGVyIGJyaW5nIHRoZW0KKyAqIGJhY2sgaW50byByYW5nZSwgb3IgcmV0dXJuIC1FSU5WQUwuCisqLworCitzdGF0aWMgaW50IHNtNTAxZmJfY2hlY2tfdmFyX3BubChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCQkgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJcmV0dXJuIHNtNTAxZmJfY2hlY2tfdmFyKHZhciwgaW5mbyk7Cit9CisKKy8qIHNtNTAxZmJfc2V0X3Bhcl9jb21tb24KKyAqCisgKiBzZXQgY29tbW9uIHJlZ2lzdGVycyBmb3IgZnJhbWVidWZmZXJzCisqLworCitzdGF0aWMgaW50IHNtNTAxZmJfc2V0X3Bhcl9jb21tb24oc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwlzdHJ1Y3Qgc201MDFmYl9wYXIgICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqZmJpID0gcGFyLT5pbmZvOworCXVuc2lnbmVkIGxvbmcgcGl4Y2xvY2s7ICAgICAgLyogcGl4ZWxjbG9jayBpbiBIeiAqLworCXVuc2lnbmVkIGxvbmcgc201MDFwaXhjbG9jazsgLyogcGl4ZWxjbG9jayB0aGUgNTAxIGNhbiBhY2hpdmUgaW4gSHogKi8KKwl1bnNpZ25lZCBpbnQgbWVtX3R5cGU7CisJdW5zaWduZWQgaW50IGNsb2NrX3R5cGU7CisJdW5zaWduZWQgaW50IGhlYWRfYWRkcjsKKworCWRldl9kYmcoZmJpLT5kZXYsICIlczogJWR4JWQsIGJwcCA9ICVkLCB2aXJ0dWFsICVkeCVkXG4iLAorCQlfX2Z1bmNfXywgdmFyLT54cmVzLCB2YXItPnlyZXMsIHZhci0+Yml0c19wZXJfcGl4ZWwsCisJCXZhci0+eHJlc192aXJ0dWFsLCB2YXItPnlyZXNfdmlydHVhbCk7CisKKwlzd2l0Y2ggKHBhci0+aGVhZCkgeworCWNhc2UgSEVBRF9DUlQ6CisJCW1lbV90eXBlID0gU001MDFfTUVNRl9DUlQ7CisJCWNsb2NrX3R5cGUgPSBTTTUwMV9DTE9DS19WMlhDTEs7CisJCWhlYWRfYWRkciA9IFNNNTAxX0RDX0NSVF9GQl9BRERSOworCQlicmVhazsKKworCWNhc2UgSEVBRF9QQU5FTDoKKwkJbWVtX3R5cGUgPSBTTTUwMV9NRU1GX1BBTkVMOworCQljbG9ja190eXBlID0gU001MDFfQ0xPQ0tfUDJYQ0xLOworCQloZWFkX2FkZHIgPSBTTTUwMV9EQ19QQU5FTF9GQl9BRERSOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCW1lbV90eXBlID0gMDsJCS8qIHN0b3AgY29tcGlsZXIgd2FybmluZ3MgKi8KKwkJaGVhZF9hZGRyID0gMDsKKwkJY2xvY2tfdHlwZSA9IDA7CisJfQorCisJc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCQlicmVhazsKKworCWNhc2UgMTY6CisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfRElSRUNUQ09MT1I7CisJCWJyZWFrOworCisJY2FzZSAzMjoKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCWJyZWFrOworCX0KKworCS8qIGFsbG9jYXRlIGZiIG1lbW9yeSB3aXRoaW4gNTAxICovCisJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gKHZhci0+eHJlc192aXJ0dWFsICogdmFyLT5iaXRzX3Blcl9waXhlbCkvODsKKwlpbmZvLT5maXguc21lbV9sZW4gICAgPSBpbmZvLT5maXgubGluZV9sZW5ndGggKiB2YXItPnlyZXNfdmlydHVhbDsKKworCWRldl9kYmcoZmJpLT5kZXYsICIlczogbGluZSBsZW5ndGggPSAldVxuIiwgX19mdW5jX18sCisJCWluZm8tPmZpeC5saW5lX2xlbmd0aCk7CisKKwlpZiAoc201MDFfYWxsb2NfbWVtKGZiaSwgJnBhci0+c2NyZWVuLCBtZW1fdHlwZSwKKwkJCSAgICBpbmZvLT5maXguc21lbV9sZW4pKSB7CisJCWRldl9lcnIoZmJpLT5kZXYsICJubyBtZW1vcnkgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBmYmktPmZibWVtX3Jlcy0+c3RhcnQgKyBwYXItPnNjcmVlbi5zbV9hZGRyOworCisJaW5mby0+c2NyZWVuX2Jhc2UgPSBmYmktPmZibWVtICsgcGFyLT5zY3JlZW4uc21fYWRkcjsKKwlpbmZvLT5zY3JlZW5fc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKworCS8qIHNldCBzdGFydCBvZiBmcmFtZWJ1ZmZlciB0byB0aGUgc2NyZWVuICovCisKKwl3cml0ZWwocGFyLT5zY3JlZW4uc21fYWRkciB8IFNNNTAxX0FERFJfRkxJUCwgZmJpLT5yZWdzICsgaGVhZF9hZGRyKTsKKworCS8qIHByb2dyYW0gQ1JUIGNsb2NrICAqLworCisJcGl4Y2xvY2sgPSBzbTUwMWZiX3BzX3RvX2h6KHZhci0+cGl4Y2xvY2spOworCisJc201MDFwaXhjbG9jayA9IHNtNTAxX3NldF9jbG9jayhmYmktPmRldi0+cGFyZW50LCBjbG9ja190eXBlLAorCQkJCQlwaXhjbG9jayk7CisKKwkvKiB1cGRhdGUgZmIgbGF5ZXIgd2l0aCBhY3R1YWwgY2xvY2sgdXNlZCAqLworCXZhci0+cGl4Y2xvY2sgPSBzbTUwMWZiX2h6X3RvX3BzKHNtNTAxcGl4Y2xvY2spOworCisJZGV2X2RiZyhmYmktPmRldiwgIiVzOiBwaXhjbG9jayhwcykgPSAldSwgcGl4Y2xvY2soSHopICA9ICVsdSwgIgorCSAgICAgICAic201MDFwaXhjbG9jayA9ICVsdSwgIGVycm9yID0gJWxkJSVcbiIsCisJICAgICAgIF9fZnVuY19fLCB2YXItPnBpeGNsb2NrLCBwaXhjbG9jaywgc201MDFwaXhjbG9jaywKKwkgICAgICAgKChwaXhjbG9jayAtIHNtNTAxcGl4Y2xvY2spKjEwMCkvcGl4Y2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHNtNTAxZmJfc2V0X3Bhcl9nZW9tZXRyeQorICoKKyAqIHNldCB0aGUgZ2VvbWV0cnkgcmVnaXN0ZXJzIGZvciBzcGVjaWZpZWQgZnJhbWVidWZmZXIuCisqLworCitzdGF0aWMgdm9pZCBzbTUwMWZiX3NldF9wYXJfZ2VvbWV0cnkoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwlzdHJ1Y3Qgc201MDFmYl9wYXIgICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqZmJpID0gcGFyLT5pbmZvOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGZiaS0+cmVnczsKKwl1bnNpZ25lZCBsb25nIHJlZzsKKworCWlmIChwYXItPmhlYWQgPT0gSEVBRF9DUlQpCisJCWJhc2UgKz0gU001MDFfRENfQ1JUX0hfVE9UOworCWVsc2UKKwkJYmFzZSArPSBTTTUwMV9EQ19QQU5FTF9IX1RPVDsKKworCS8qIHNldCBmcmFtZWJ1ZmZlciB3aWR0aCBhbmQgZGlzcGxheSB3aWR0aCAqLworCisJcmVnID0gaW5mby0+Zml4LmxpbmVfbGVuZ3RoOworCXJlZyB8PSAoKHZhci0+eHJlcyAqIHZhci0+Yml0c19wZXJfcGl4ZWwpLzgpIDw8IDE2OworCisJd3JpdGVsKHJlZywgZmJpLT5yZWdzICsgKHBhci0+aGVhZCA9PSBIRUFEX0NSVCA/CisJCSAgICBTTTUwMV9EQ19DUlRfRkJfT0ZGU0VUIDogIFNNNTAxX0RDX1BBTkVMX0ZCX09GRlNFVCkpOworCisJLyogcHJvZ3JhbSBob3Jpem9udGFsIHRvdGFsICovCisKKwlyZWcgID0gKGhfdG90YWwodmFyKSAtIDEpIDw8IDE2OworCXJlZyB8PSAodmFyLT54cmVzIC0gMSk7CisKKwl3cml0ZWwocmVnLCBiYXNlICsgU001MDFfT0ZGX0RDX0hfVE9UKTsKKworCS8qIHByb2dyYW0gaG9yaXpvbnRhbCBzeW5jICovCisKKwlyZWcgID0gdmFyLT5oc3luY19sZW4gPDwgMTY7CisJcmVnIHw9IHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luIC0gMTsKKworCXdyaXRlbChyZWcsIGJhc2UgKyBTTTUwMV9PRkZfRENfSF9TWU5DKTsKKworCS8qIHByb2dyYW0gdmVydGljYWwgdG90YWwgKi8KKworCXJlZyAgPSAodl90b3RhbCh2YXIpIC0gMSkgPDwgMTY7CisJcmVnIHw9ICh2YXItPnlyZXMgLSAxKTsKKworCXdyaXRlbChyZWcsIGJhc2UgKyBTTTUwMV9PRkZfRENfVl9UT1QpOworCisJLyogcHJvZ3JhbSB2ZXJ0aWNhbCBzeW5jICovCisJcmVnICA9IHZhci0+dnN5bmNfbGVuIDw8IDE2OworCXJlZyB8PSB2YXItPnlyZXMgKyB2YXItPmxvd2VyX21hcmdpbiAtIDE7CisKKwl3cml0ZWwocmVnLCBiYXNlICsgU001MDFfT0ZGX0RDX1ZfU1lOQyk7Cit9CisKKy8qIHNtNTAxZmJfcGFuX2NydAorICoKKyAqIHBhbiB0aGUgQ1JUIGRpc3BsYXkgb3V0cHV0IHdpdGhpbiBhbiB2aXJ0dWFsIGZyYW1lYnVmZmVyCisqLworCitzdGF0aWMgaW50IHNtNTAxZmJfcGFuX2NydChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzbTUwMWZiX3BhciAgKnBhciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc201MDFmYl9pbmZvICpmYmkgPSBwYXItPmluZm87CisJdW5zaWduZWQgaW50IGJ5dGVzX3BpeGVsID0gdmFyLT5iaXRzX3Blcl9waXhlbCAvIDg7CisJdW5zaWduZWQgbG9uZyByZWc7CisJdW5zaWduZWQgbG9uZyB4b2ZmczsKKworCXhvZmZzID0gdmFyLT54b2Zmc2V0ICogYnl0ZXNfcGl4ZWw7CisKKwlyZWcgPSByZWFkbChmYmktPnJlZ3MgKyBTTTUwMV9EQ19DUlRfQ09OVFJPTCk7CisKKwlyZWcgJj0gflNNNTAxX0RDX0NSVF9DT05UUk9MX1BJWEVMX01BU0s7CisJcmVnIHw9ICgoeG9mZnMgJiAxNSkgLyBieXRlc19waXhlbCkgPDwgNDsKKwl3cml0ZWwocmVnLCBmYmktPnJlZ3MgKyBTTTUwMV9EQ19DUlRfQ09OVFJPTCk7CisKKwlyZWcgPSAocGFyLT5zY3JlZW4uc21fYWRkciArIHhvZmZzICsKKwkgICAgICAgdmFyLT55b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoKTsKKwl3cml0ZWwocmVnIHwgU001MDFfQUREUl9GTElQLCBmYmktPnJlZ3MgKyBTTTUwMV9EQ19DUlRfRkJfQUREUik7CisKKwlzbTUwMWZiX3N5bmNfcmVncyhmYmkpOworCXJldHVybiAwOworfQorCisvKiBzbTUwMWZiX3Bhbl9wbmwKKyAqCisgKiBwYW4gdGhlIHBhbmVsIGRpc3BsYXkgb3V0cHV0IHdpdGhpbiBhbiB2aXJ0dWFsIGZyYW1lYnVmZmVyCisqLworCitzdGF0aWMgaW50IHNtNTAxZmJfcGFuX3BubChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzbTUwMWZiX3BhciAgKnBhciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc201MDFmYl9pbmZvICpmYmkgPSBwYXItPmluZm87CisJdW5zaWduZWQgbG9uZyByZWc7CisKKwlyZWcgPSB2YXItPnhvZmZzZXQgfCAodmFyLT54cmVzX3ZpcnR1YWwgPDwgMTYpOworCXdyaXRlbChyZWcsIGZiaS0+cmVncyArIFNNNTAxX0RDX1BBTkVMX0ZCX1dJRFRIKTsKKworCXJlZyA9IHZhci0+eW9mZnNldCB8ICh2YXItPnlyZXNfdmlydHVhbCA8PCAxNik7CisJd3JpdGVsKHJlZywgZmJpLT5yZWdzICsgU001MDFfRENfUEFORUxfRkJfSEVJR0hUKTsKKworCXNtNTAxZmJfc3luY19yZWdzKGZiaSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHNtNTAxZmJfc2V0X3Bhcl9jcnQKKyAqCisgKiBTZXQgdGhlIENSVCB2aWRlbyBtb2RlIGZyb20gdGhlIGZiX2luZm8gc3RydWN0dXJlCisqLworCitzdGF0aWMgaW50IHNtNTAxZmJfc2V0X3Bhcl9jcnQoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNtNTAxZmJfcGFyICAqcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCBzbTUwMWZiX2luZm8gKmZiaSA9IHBhci0+aW5mbzsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7CisJdW5zaWduZWQgbG9uZyBjb250cm9sOyAgICAgICAvKiBjb250cm9sIHJlZ2lzdGVyICovCisJaW50IHJldDsKKworCS8qIGFjdGl2YXRlIG5ldyBjb25maWd1cmF0aW9uICovCisKKwlkZXZfZGJnKGZiaS0+ZGV2LCAiJXMoJXApXG4iLCBfX2Z1bmNfXywgaW5mbyk7CisKKwkvKiBlbmFibGUgQ1JUIERBQyAtIG5vdGUgMCBpcyBvbiEqLworCXNtNTAxX21pc2NfY29udHJvbChmYmktPmRldi0+cGFyZW50LCAwLCBTTTUwMV9NSVNDX0RBQ19QT1dFUik7CisKKwljb250cm9sID0gcmVhZGwoZmJpLT5yZWdzICsgU001MDFfRENfQ1JUX0NPTlRST0wpOworCisJY29udHJvbCAmPSAoU001MDFfRENfQ1JUX0NPTlRST0xfUElYRUxfTUFTSyB8CisJCSAgICBTTTUwMV9EQ19DUlRfQ09OVFJPTF9HQU1NQSB8CisJCSAgICBTTTUwMV9EQ19DUlRfQ09OVFJPTF9CTEFOSyB8CisJCSAgICBTTTUwMV9EQ19DUlRfQ09OVFJPTF9TRUwgfAorCQkgICAgU001MDFfRENfQ1JUX0NPTlRST0xfQ1AgfAorCQkgICAgU001MDFfRENfQ1JUX0NPTlRST0xfVFZQKTsKKworCS8qIHNldCB0aGUgc3luYyBwb2xhcml0aWVzIGJlZm9yZSB3ZSBjaGVjayBkYXRhIHNvdXJjZSAgKi8KKworCWlmICgodmFyLT5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpID09IDApCisJCWNvbnRyb2wgfD0gU001MDFfRENfQ1JUX0NPTlRST0xfSFNQOworCisJaWYgKCh2YXItPnN5bmMgJiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QpID09IDApCisJCWNvbnRyb2wgfD0gU001MDFfRENfQ1JUX0NPTlRST0xfVlNQOworCisJaWYgKChjb250cm9sICYgU001MDFfRENfQ1JUX0NPTlRST0xfU0VMKSA9PSAwKSB7CisJCS8qIHRoZSBoZWFkIGlzIGRpc3BsYXlpbmcgcGFuZWwgZGF0YS4uLiAqLworCisJCXNtNTAxX2FsbG9jX21lbShmYmksICZwYXItPnNjcmVlbiwgU001MDFfTUVNRl9DUlQsIDApOworCQlnb3RvIG91dF91cGRhdGU7CisJfQorCisJcmV0ID0gc201MDFmYl9zZXRfcGFyX2NvbW1vbihpbmZvLCB2YXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihmYmktPmRldiwgImZhaWxlZCB0byBzZXQgY29tbW9uIHBhcmFtZXRlcnNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNtNTAxZmJfcGFuX2NydCh2YXIsIGluZm8pOworCXNtNTAxZmJfc2V0X3Bhcl9nZW9tZXRyeShpbmZvLCB2YXIpOworCisJY29udHJvbCB8PSBTTTUwMV9GSUZPXzM7CS8qIGZpbGwgaWYgPjMgZnJlZSBzbG90cyAqLworCisJc3dpdGNoKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCWNvbnRyb2wgfD0gU001MDFfRENfQ1JUX0NPTlRST0xfOEJQUDsKKwkJYnJlYWs7CisKKwljYXNlIDE2OgorCQljb250cm9sIHw9IFNNNTAxX0RDX0NSVF9DT05UUk9MXzE2QlBQOworCQlicmVhazsKKworCWNhc2UgMzI6CisJCWNvbnRyb2wgfD0gU001MDFfRENfQ1JUX0NPTlRST0xfMzJCUFA7CisJCXNtNTAxZmJfc2V0dXBfZ2FtbWEoZmJpLCBTTTUwMV9EQ19DUlRfUEFMRVRURSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJY29udHJvbCB8PSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9TRUw7CS8qIENSVCBkaXNwbGF5cyBDUlQgZGF0YSAqLworCWNvbnRyb2wgfD0gU001MDFfRENfQ1JUX0NPTlRST0xfVEU7CS8qIGVuYWJsZSBDUlQgdGltaW5nICovCisJY29udHJvbCB8PSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9FTkFCTEU7CS8qIGVuYWJsZSBDUlQgcGxhbmUgKi8KKworIG91dF91cGRhdGU6CisJZGV2X2RiZyhmYmktPmRldiwgIm5ldyBjb250cm9sIGlzICUwOGx4XG4iLCBjb250cm9sKTsKKworCXdyaXRlbChjb250cm9sLCBmYmktPnJlZ3MgKyBTTTUwMV9EQ19DUlRfQ09OVFJPTCk7CisJc201MDFmYl9zeW5jX3JlZ3MoZmJpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbTUwMWZiX3BhbmVsX3Bvd2VyKHN0cnVjdCBzbTUwMWZiX2luZm8gKmZiaSwgaW50IHRvKQoreworCXVuc2lnbmVkIGxvbmcgY29udHJvbDsKKwl2b2lkIF9faW9tZW0gKmN0cmxfcmVnID0gZmJpLT5yZWdzICsgU001MDFfRENfUEFORUxfQ09OVFJPTDsKKworCWNvbnRyb2wgPSByZWFkbChjdHJsX3JlZyk7CisKKwlpZiAodG8gJiYgKGNvbnRyb2wgJiBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX1ZERCkgPT0gMCkgeworCQkvKiBlbmFibGUgcGFuZWwgcG93ZXIgKi8KKworCQljb250cm9sIHw9IFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfVkREOwkvKiBGUFZEREVOICovCisJCXdyaXRlbChjb250cm9sLCBjdHJsX3JlZyk7CisJCXNtNTAxZmJfc3luY19yZWdzKGZiaSk7CisJCW1kZWxheSgxMCk7CisKKwkJY29udHJvbCB8PSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX0RBVEE7CS8qIERBVEEgKi8KKwkJd3JpdGVsKGNvbnRyb2wsIGN0cmxfcmVnKTsKKwkJc201MDFmYl9zeW5jX3JlZ3MoZmJpKTsKKwkJbWRlbGF5KDEwKTsKKworCQljb250cm9sIHw9IFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfQklBUzsJLyogVkJJQVNFTiAqLworCQl3cml0ZWwoY29udHJvbCwgY3RybF9yZWcpOworCQlzbTUwMWZiX3N5bmNfcmVncyhmYmkpOworCQltZGVsYXkoMTApOworCisJCWNvbnRyb2wgfD0gU001MDFfRENfUEFORUxfQ09OVFJPTF9GUEVOOworCQl3cml0ZWwoY29udHJvbCwgY3RybF9yZWcpOworCisJfSBlbHNlIGlmICghdG8gJiYgKGNvbnRyb2wgJiBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX1ZERCkgIT0gMCkgeworCQkvKiBkaXNhYmxlIHBhbmVsIHBvd2VyICovCisKKwkJY29udHJvbCAmPSB+U001MDFfRENfUEFORUxfQ09OVFJPTF9GUEVOOworCQl3cml0ZWwoY29udHJvbCwgY3RybF9yZWcpOworCQlzbTUwMWZiX3N5bmNfcmVncyhmYmkpOworCQltZGVsYXkoMTApOworCisJCWNvbnRyb2wgJj0gflNNNTAxX0RDX1BBTkVMX0NPTlRST0xfQklBUzsKKwkJd3JpdGVsKGNvbnRyb2wsIGN0cmxfcmVnKTsKKwkJc201MDFmYl9zeW5jX3JlZ3MoZmJpKTsKKwkJbWRlbGF5KDEwKTsKKworCQljb250cm9sICY9IH5TTTUwMV9EQ19QQU5FTF9DT05UUk9MX0RBVEE7CisJCXdyaXRlbChjb250cm9sLCBjdHJsX3JlZyk7CisJCXNtNTAxZmJfc3luY19yZWdzKGZiaSk7CisJCW1kZWxheSgxMCk7CisKKwkJY29udHJvbCAmPSB+U001MDFfRENfUEFORUxfQ09OVFJPTF9WREQ7CisJCXdyaXRlbChjb250cm9sLCBjdHJsX3JlZyk7CisJCXNtNTAxZmJfc3luY19yZWdzKGZiaSk7CisJCW1kZWxheSgxMCk7CisJfQorCisJc201MDFmYl9zeW5jX3JlZ3MoZmJpKTsKK30KKworLyogc201MDFmYl9zZXRfcGFyX3BubAorICoKKyAqIFNldCB0aGUgcGFuZWwgdmlkZW8gbW9kZSBmcm9tIHRoZSBmYl9pbmZvIHN0cnVjdHVyZQorKi8KKworc3RhdGljIGludCBzbTUwMWZiX3NldF9wYXJfcG5sKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzbTUwMWZiX3BhciAgKnBhciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc201MDFmYl9pbmZvICpmYmkgPSBwYXItPmluZm87CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOworCXVuc2lnbmVkIGxvbmcgY29udHJvbDsKKwl1bnNpZ25lZCBsb25nIHJlZzsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhmYmktPmRldiwgIiVzKCVwKVxuIiwgX19mdW5jX18sIGluZm8pOworCisJLyogYWN0aXZhdGUgdGhpcyBuZXcgY29uZmlndXJhdGlvbiAqLworCisJcmV0ID0gc201MDFmYl9zZXRfcGFyX2NvbW1vbihpbmZvLCB2YXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzbTUwMWZiX3Bhbl9wbmwodmFyLCBpbmZvKTsKKwlzbTUwMWZiX3NldF9wYXJfZ2VvbWV0cnkoaW5mbywgdmFyKTsKKworCS8qIHVwZGF0ZSBjb250cm9sIHJlZ2lzdGVyICovCisKKwljb250cm9sID0gcmVhZGwoZmJpLT5yZWdzICsgU001MDFfRENfUEFORUxfQ09OVFJPTCk7CisJY29udHJvbCAmPSAoU001MDFfRENfUEFORUxfQ09OVFJPTF9HQU1NQSB8CisJCSAgICBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX1ZERCAgfAorCQkgICAgU001MDFfRENfUEFORUxfQ09OVFJPTF9EQVRBIHwKKwkJICAgIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfQklBUyB8CisJCSAgICBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX0ZQRU4gfAorCQkgICAgU001MDFfRENfUEFORUxfQ09OVFJPTF9DUCB8CisJCSAgICBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX0NLIHwKKwkJICAgIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfSFAgfAorCQkgICAgU001MDFfRENfUEFORUxfQ09OVFJPTF9WUCB8CisJCSAgICBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX0hQRCB8CisJCSAgICBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX1ZQRCk7CisKKwljb250cm9sIHw9IFNNNTAxX0ZJRk9fMzsJLyogZmlsbCBpZiA+MyBmcmVlIHNsb3RzICovCisKKwlzd2l0Y2godmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJY29udHJvbCB8PSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MXzhCUFA7CisJCWJyZWFrOworCisJY2FzZSAxNjoKKwkJY29udHJvbCB8PSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MXzE2QlBQOworCQlicmVhazsKKworCWNhc2UgMzI6CisJCWNvbnRyb2wgfD0gU001MDFfRENfUEFORUxfQ09OVFJPTF8zMkJQUDsKKwkJc201MDFmYl9zZXR1cF9nYW1tYShmYmksIFNNNTAxX0RDX1BBTkVMX1BBTEVUVEUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXdyaXRlbCgweDAsIGZiaS0+cmVncyArIFNNNTAxX0RDX1BBTkVMX1BBTk5JTkdfQ09OVFJPTCk7CisKKwkvKiBwYW5lbCBwbGFuZSB0b3AgbGVmdCBhbmQgYm90dG9tIHJpZ2h0IGxvY2F0aW9uICovCisKKwl3cml0ZWwoMHgwMCwgZmJpLT5yZWdzICsgU001MDFfRENfUEFORUxfVExfTE9DKTsKKworCXJlZyAgPSB2YXItPnhyZXMgLSAxOworCXJlZyB8PSAodmFyLT55cmVzIC0gMSkgPDwgMTY7CisKKwl3cml0ZWwocmVnLCBmYmktPnJlZ3MgKyBTTTUwMV9EQ19QQU5FTF9CUl9MT0MpOworCisJLyogcHJvZ3JhbSBwYW5lbCBjb250cm9sIHJlZ2lzdGVyICovCisKKwljb250cm9sIHw9IFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfVEU7CS8qIGVuYWJsZSBQQU5FTCB0aW1pbmcgKi8KKwljb250cm9sIHw9IFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfRU47CS8qIGVuYWJsZSBQQU5FTCBnZnggcGxhbmUgKi8KKworCWlmICgodmFyLT5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpID09IDApCisJCWNvbnRyb2wgfD0gU001MDFfRENfUEFORUxfQ09OVFJPTF9IU1A7CisKKwlpZiAoKHZhci0+c3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkgPT0gMCkKKwkJY29udHJvbCB8PSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX1ZTUDsKKworCXdyaXRlbChjb250cm9sLCBmYmktPnJlZ3MgKyBTTTUwMV9EQ19QQU5FTF9DT05UUk9MKTsKKwlzbTUwMWZiX3N5bmNfcmVncyhmYmkpOworCisJLyogcG93ZXIgdGhlIHBhbmVsIHVwICovCisJc201MDFmYl9wYW5lbF9wb3dlcihmYmksIDEpOworCXJldHVybiAwOworfQorCisKKy8qIGNoYW5fdG9fZmllbGQKKyAqCisgKiBjb252ZXJ0IGEgY29sb3VyIHZhbHVlIGludG8gYSBmaWVsZCBwb3NpdGlvbgorICoKKyAqIGZyb20gcHhhZmIuYworKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2hhbl90b19maWVsZCh1bnNpZ25lZCBpbnQgY2hhbiwKKwkJCQkJIHN0cnVjdCBmYl9iaXRmaWVsZCAqYmYpCit7CisJY2hhbiAmPSAweGZmZmY7CisJY2hhbiA+Pj0gMTYgLSBiZi0+bGVuZ3RoOworCXJldHVybiBjaGFuIDw8IGJmLT5vZmZzZXQ7Cit9CisKKy8qIHNtNTAxZmJfc2V0Y29scmVnCisgKgorICogc2V0IHRoZSBjb2xvdXIgbWFwcGluZyBmb3IgbW9kZXMgdGhhdCBzdXBwb3J0IHBhbGV0dGlzZWQgZGF0YQorKi8KKworc3RhdGljIGludCBzbTUwMWZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywKKwkJCSAgICAgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwgdW5zaWduZWQgYmx1ZSwKKwkJCSAgICAgdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc201MDFmYl9wYXIgICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqZmJpID0gcGFyLT5pbmZvOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGZiaS0+cmVnczsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJaWYgKHBhci0+aGVhZCA9PSBIRUFEX0NSVCkKKwkJYmFzZSArPSBTTTUwMV9EQ19DUlRfUEFMRVRURTsKKwllbHNlCisJCWJhc2UgKz0gU001MDFfRENfUEFORUxfUEFMRVRURTsKKworCXN3aXRjaCAoaW5mby0+Zml4LnZpc3VhbCkgeworCWNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKKwkJLyogdHJ1ZS1jb2xvdXIsIHVzZSBwc2V1by1wYWxldHRlICovCisKKwkJaWYgKHJlZ25vIDwgMTYpIHsKKwkJCXUzMiAqcGFsID0gcGFyLT5wc2V1ZG9fcGFsZXR0ZTsKKworCQkJdmFsICA9IGNoYW5fdG9fZmllbGQocmVkLCAgICZpbmZvLT52YXIucmVkKTsKKwkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGdyZWVuLCAmaW5mby0+dmFyLmdyZWVuKTsKKwkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGJsdWUsICAmaW5mby0+dmFyLmJsdWUpOworCisJCQlwYWxbcmVnbm9dID0gdmFsOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6CisJCWlmIChyZWdubyA8IDI1NikgeworCQkJdmFsID0gKHJlZCA+PiA4KSA8PCAxNjsKKwkJCXZhbCB8PSAoZ3JlZW4gPj4gOCkgPDwgODsKKwkJCXZhbCB8PSBibHVlID4+IDg7CisKKwkJCXdyaXRlbCh2YWwsIGJhc2UgKyAocmVnbm8gKiA0KSk7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAxOyAgIC8qIHVua25vd24gdHlwZSAqLworCX0KKworCXJldHVybiAwOworfQorCisvKiBzbTUwMWZiX2JsYW5rX3BubAorICoKKyAqIEJsYW5rIG9yIHVuLWJsYW5rIHRoZSBwYW5lbCBpbnRlcmZhY2UKKyovCisKK3N0YXRpYyBpbnQgc201MDFmYl9ibGFua19wbmwoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzbTUwMWZiX3BhciAgKnBhciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc201MDFmYl9pbmZvICpmYmkgPSBwYXItPmluZm87CisKKwlkZXZfZGJnKGZiaS0+ZGV2LCAiJXMobW9kZT0lZCwgJXApXG4iLCBfX2Z1bmNfXywgYmxhbmtfbW9kZSwgaW5mbyk7CisKKwlzd2l0Y2ggKGJsYW5rX21vZGUpIHsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwkJc201MDFmYl9wYW5lbF9wb3dlcihmYmksIDApOworCQlicmVhazsKKworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJc201MDFmYl9wYW5lbF9wb3dlcihmYmksIDEpOworCQlicmVhazsKKworCWNhc2UgRkJfQkxBTktfTk9STUFMOgorCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIHNtNTAxZmJfYmxhbmtfY3J0CisgKgorICogQmxhbmsgb3IgdW4tYmxhbmsgdGhlIGNydCBpbnRlcmZhY2UKKyovCisKK3N0YXRpYyBpbnQgc201MDFmYl9ibGFua19jcnQoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzbTUwMWZiX3BhciAgKnBhciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc201MDFmYl9pbmZvICpmYmkgPSBwYXItPmluZm87CisJdW5zaWduZWQgbG9uZyBjdHJsOworCisJZGV2X2RiZyhmYmktPmRldiwgIiVzKG1vZGU9JWQsICVwKVxuIiwgX19mdW5jX18sIGJsYW5rX21vZGUsIGluZm8pOworCisJY3RybCA9IHJlYWRsKGZiaS0+cmVncyArIFNNNTAxX0RDX0NSVF9DT05UUk9MKTsKKworCXN3aXRjaCAoYmxhbmtfbW9kZSkgeworCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgorCQljdHJsICY9IH5TTTUwMV9EQ19DUlRfQ09OVFJPTF9FTkFCTEU7CisJCXNtNTAxX21pc2NfY29udHJvbChmYmktPmRldi0+cGFyZW50LCBTTTUwMV9NSVNDX0RBQ19QT1dFUiwgMCk7CisKKwljYXNlIEZCX0JMQU5LX05PUk1BTDoKKwkJY3RybCB8PSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9CTEFOSzsKKwkJYnJlYWs7CisKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCWN0cmwgJj0gflNNNTAxX0RDX0NSVF9DT05UUk9MX0JMQU5LOworCQljdHJsIHw9ICBTTTUwMV9EQ19DUlRfQ09OVFJPTF9FTkFCTEU7CisJCXNtNTAxX21pc2NfY29udHJvbChmYmktPmRldi0+cGFyZW50LCAwLCBTTTUwMV9NSVNDX0RBQ19QT1dFUik7CisJCWJyZWFrOworCisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKworCX0KKworCXdyaXRlbChjdHJsLCBmYmktPnJlZ3MgKyBTTTUwMV9EQ19DUlRfQ09OVFJPTCk7CisJc201MDFmYl9zeW5jX3JlZ3MoZmJpKTsKKworCXJldHVybiAwOworfQorCisvKiBzbTUwMWZiX2N1cnNvcgorICoKKyAqIHNldCBvciBjaGFuZ2UgdGhlIGhhcmR3YXJlIGN1cnNvciBwYXJhbWV0ZXJzCisqLworCitpbnQgc201MDFmYl9jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9jdXJzb3IgKmN1cnNvcikKK3sKKwlzdHJ1Y3Qgc201MDFmYl9wYXIgICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqZmJpID0gcGFyLT5pbmZvOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGZiaS0+cmVnczsKKwl1bnNpZ25lZCBsb25nIGh3Y19hZGRyOworCXVuc2lnbmVkIGxvbmcgZmcsIGJnOworCisJZGV2X2RiZyhmYmktPmRldiwgIiVzKCVwLCVwKVxuIiwgX19mdW5jX18sIGluZm8sIGN1cnNvcik7CisKKwlpZiAocGFyLT5oZWFkID09IEhFQURfQ1JUKQorCQliYXNlICs9IFNNNTAxX0RDX0NSVF9IV0NfQkFTRTsKKwllbHNlCisJCWJhc2UgKz0gU001MDFfRENfUEFORUxfSFdDX0JBU0U7CisKKwkvKiBjaGVjayBub3QgYmVpbmcgYXNrZWQgdG8gZXhjZWVkIGNhcGFiaWxpdGllcyAqLworCisJaWYgKGN1cnNvci0+aW1hZ2Uud2lkdGggPiA2NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY3Vyc29yLT5pbWFnZS5oZWlnaHQgPiA2NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY3Vyc29yLT5pbWFnZS5kZXB0aCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaHdjX2FkZHIgPSByZWFkbChiYXNlICsgU001MDFfT0ZGX0hXQ19BRERSKTsKKworCWlmIChjdXJzb3ItPmVuYWJsZSkKKwkJd3JpdGVsKGh3Y19hZGRyIHwgU001MDFfSFdDX0VOLCBiYXNlICsgU001MDFfT0ZGX0hXQ19BRERSKTsKKwllbHNlCisJCXdyaXRlbChod2NfYWRkciAmIH5TTTUwMV9IV0NfRU4sIGJhc2UgKyBTTTUwMV9PRkZfSFdDX0FERFIpOworCisJLyogc2V0IGRhdGEgKi8KKwlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUUE9TKSB7CisJCXVuc2lnbmVkIGludCB4ID0gY3Vyc29yLT5pbWFnZS5keDsKKwkJdW5zaWduZWQgaW50IHkgPSBjdXJzb3ItPmltYWdlLmR5OworCisJCWlmICh4ID49IDIwNDggfHwgeSA+PSAyMDQ4ICkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWRldl9kYmcoZmJpLT5kZXYsICJzZXQgcG9zaXRpb24gJWQsJWRcbiIsIHgsIHkpOworCisJCS8veSArPSBjdXJzb3ItPmltYWdlLmhlaWdodDsKKworCQl3cml0ZWwoeCB8ICh5IDw8IDE2KSwgYmFzZSArIFNNNTAxX09GRl9IV0NfTE9DKTsKKwl9CisKKwlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUQ01BUCkgeworCQl1bnNpZ25lZCBpbnQgYmdfY29sID0gY3Vyc29yLT5pbWFnZS5iZ19jb2xvcjsKKwkJdW5zaWduZWQgaW50IGZnX2NvbCA9IGN1cnNvci0+aW1hZ2UuZmdfY29sb3I7CisKKwkJZGV2X2RiZyhmYmktPmRldiwgIiVzOiB1cGRhdGUgY21hcCAoJTA4eCwlMDh4KVxuIiwKKwkJCV9fZnVuY19fLCBiZ19jb2wsIGZnX2NvbCk7CisKKwkJYmcgPSAoKGluZm8tPmNtYXAucmVkW2JnX2NvbF0gJiAweEY4KSA8PCA4KSB8CisJCQkoKGluZm8tPmNtYXAuZ3JlZW5bYmdfY29sXSAmIDB4RkMpIDw8IDMpIHwKKwkJCSgoaW5mby0+Y21hcC5ibHVlW2JnX2NvbF0gJiAweEY4KSA+PiAzKTsKKworCQlmZyA9ICgoaW5mby0+Y21hcC5yZWRbZmdfY29sXSAmIDB4RjgpIDw8IDgpIHwKKwkJCSgoaW5mby0+Y21hcC5ncmVlbltmZ19jb2xdICYgMHhGQykgPDwgMykgfAorCQkJKChpbmZvLT5jbWFwLmJsdWVbZmdfY29sXSAmIDB4RjgpID4+IDMpOworCisJCWRldl9kYmcoZmJpLT5kZXYsICJmZ2NvbCAlMDh4LCBiZ2NvbCAlMDh4XG4iLCBmZywgYmcpOworCisJCXdyaXRlbChiZywgYmFzZSArIFNNNTAxX09GRl9IV0NfQ09MT1JfMV8yKTsKKwkJd3JpdGVsKGZnLCBiYXNlICsgU001MDFfT0ZGX0hXQ19DT0xPUl8zKTsKKwl9CisKKwlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUU0laRSB8fAorCSAgICBjdXJzb3ItPnNldCAmIChGQl9DVVJfU0VUSU1BR0UgfCBGQl9DVVJfU0VUU0hBUEUpKSB7CisJCS8qIFNNNTAxIGN1cnNvciBpcyBhIHR3byBicHAgNjR4NjQgYml0bWFwIHRoaXMgcm91dGluZQorCQkgKiBjbGVhcnMgaXQgdG8gdHJhbnNwYXJlbnQgdGhlbiBjb21iaW5lcyB0aGUgY3Vyc29yCisJCSAqIHNoYXBlIHBsYW5lIHdpdGggdGhlIGNvbG91ciBwbGFuZSB0byBzZXQgdGhlCisJCSAqIGN1cnNvciAqLworCQlpbnQgeCwgeTsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqcGNvbCA9IGN1cnNvci0+aW1hZ2UuZGF0YTsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqcG1zayA9IGN1cnNvci0+bWFzazsKKwkJdm9pZCBfX2lvbWVtICAgKmRzdCA9IHBhci0+Y3Vyc29yLmtfYWRkcjsKKwkJdW5zaWduZWQgY2hhciAgZGNvbCA9IDA7CisJCXVuc2lnbmVkIGNoYXIgIGRtc2sgPSAwOworCQl1bnNpZ25lZCBpbnQgICBvcDsKKworCQlkZXZfZGJnKGZiaS0+ZGV2LCAiJXM6IHNldHRpbmcgc2hhcGUgKCVkLCVkKVxuIiwKKwkJCV9fZnVuY19fLCBjdXJzb3ItPmltYWdlLndpZHRoLCBjdXJzb3ItPmltYWdlLmhlaWdodCk7CisKKwkJZm9yIChvcCA9IDA7IG9wIDwgKDY0KjY0KjIpLzg7IG9wKz00KQorCQkJd3JpdGVsKDB4MCwgZHN0ICsgb3ApOworCisJCWZvciAoeSA9IDA7IHkgPCBjdXJzb3ItPmltYWdlLmhlaWdodDsgeSsrKSB7CisJCQlmb3IgKHggPSAwOyB4IDwgY3Vyc29yLT5pbWFnZS53aWR0aDsgeCsrKSB7CisJCQkJaWYgKCh4ICUgOCkgPT0gMCkgeworCQkJCQlkY29sID0gKnBjb2wrKzsKKwkJCQkJZG1zayA9ICpwbXNrKys7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGNvbCA+Pj0gMTsKKwkJCQkJZG1zayA+Pj0gMTsKKwkJCQl9CisKKwkJCQlpZiAoZG1zayAmIDEpIHsKKwkJCQkJb3AgPSAoZGNvbCAmIDEpID8gMSA6IDM7CisJCQkJCW9wIDw8PSAoKHggJSA0KSAqIDIpOworCisJCQkJCW9wIHw9IHJlYWRiKGRzdCArICh4IC8gNCkpOworCQkJCQl3cml0ZWIob3AsIGRzdCArICh4IC8gNCkpOworCQkJCX0KKwkJCX0KKwkJCWRzdCArPSAoNjQqMikvODsKKwkJfQorCX0KKworCXNtNTAxZmJfc3luY19yZWdzKGZiaSk7CS8qIGVuc3VyZSBjdXJzb3IgZGF0YSBmbHVzaGVkICovCisJcmV0dXJuIDA7Cit9CisKKy8qIHNtNTAxZmJfY3J0c3JjX3Nob3cKKyAqCisgKiBkZXZpY2UgYXR0cmlidXRlIGNvZGUgdG8gc2hvdyB3aGVyZSB0aGUgY3J0IG91dHB1dCBpcyBzb3VyY2VkIGZyb20KKyovCisKK3N0YXRpYyBzc2l6ZV90IHNtNTAxZmJfY3J0c3JjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgY3RybDsKKworCWN0cmwgPSByZWFkbChpbmZvLT5yZWdzICsgU001MDFfRENfQ1JUX0NPTlRST0wpOworCWN0cmwgJj0gU001MDFfRENfQ1JUX0NPTlRST0xfU0VMOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGN0cmwgPyAiY3J0IiA6ICJwYW5lbCIpOworfQorCisvKiBzbTUwMWZiX2NydHNyY19zaG93CisgKgorICogZGV2aWNlIGF0dHJpYnV0ZSBjb2RlIHRvIHNldCB3aGVyZSB0aGUgY3J0IG91dHB1dCBpcyBzb3VyY2VkIGZyb20KKyovCisKK3N0YXRpYyBzc2l6ZV90IHNtNTAxZmJfY3J0c3JjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWVudW0gc201MDFfY29udHJvbGxlciBoZWFkOworCXVuc2lnbmVkIGxvbmcgY3RybDsKKworCWlmIChsZW4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJuaWNtcChidWYsICJjcnQiLCBzaXplb2YoImNydCIpKSA9PSAwKQorCQloZWFkID0gSEVBRF9DUlQ7CisJZWxzZSBpZiAoc3RybmljbXAoYnVmLCAicGFuZWwiLCBzaXplb2YoInBhbmVsIikpID09IDApCisJCWhlYWQgPSBIRUFEX1BBTkVMOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZfaW5mbyhkZXYsICJzZXR0aW5nIGNydCBzb3VyY2UgdG8gaGVhZCAlZFxuIiwgaGVhZCk7CisKKwljdHJsID0gcmVhZGwoaW5mby0+cmVncyArIFNNNTAxX0RDX0NSVF9DT05UUk9MKTsKKworCWlmIChoZWFkID09IEhFQURfQ1JUKSB7CisJCWN0cmwgfD0gU001MDFfRENfQ1JUX0NPTlRST0xfU0VMOworCQljdHJsIHw9IFNNNTAxX0RDX0NSVF9DT05UUk9MX0VOQUJMRTsKKwkJY3RybCB8PSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9URTsKKwl9IGVsc2UgeworCQljdHJsICY9IH5TTTUwMV9EQ19DUlRfQ09OVFJPTF9TRUw7CisJCWN0cmwgJj0gflNNNTAxX0RDX0NSVF9DT05UUk9MX0VOQUJMRTsKKwkJY3RybCAmPSB+U001MDFfRENfQ1JUX0NPTlRST0xfVEU7CisJfQorCisJd3JpdGVsKGN0cmwsIGluZm8tPnJlZ3MgKyBTTTUwMV9EQ19DUlRfQ09OVFJPTCk7CisJc201MDFmYl9zeW5jX3JlZ3MoaW5mbyk7CisKKwlyZXR1cm4gKGhlYWQgPT0gSEVBRF9DUlQpID8gMyA6IDU7Cit9CisKKy8qIFByZXBhcmUgdGhlIGRldmljZV9hdHRyIGZvciByZWdpc3RyYXRpb24gd2l0aCBzeXNmcyBsYXRlciAqLworc3RhdGljIERFVklDRV9BVFRSKGNydF9zcmMsIDA2NjYsIHNtNTAxZmJfY3J0c3JjX3Nob3csIHNtNTAxZmJfY3J0c3JjX3N0b3JlKTsKKworLyogc201MDFmYl9zaG93X3JlZ3MKKyAqCisgKiBzaG93IHRoZSBwcmltYXJ5IHNtNTAxIHJlZ2lzdGVycworKi8KK3N0YXRpYyBpbnQgc201MDFmYl9zaG93X3JlZ3Moc3RydWN0IHNtNTAxZmJfaW5mbyAqaW5mbywgY2hhciAqcHRyLAorCQkJICAgICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdm9pZCBfX2lvbWVtICptZW0gPSBpbmZvLT5yZWdzOworCWNoYXIgKmJ1ZiA9IHB0cjsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJZm9yIChyZWcgPSBzdGFydDsgcmVnIDwgKGxlbiArIHN0YXJ0KTsgcmVnICs9IDQpCisJCXB0ciArPSBzcHJpbnRmKHB0ciwgIiUwOHggPSAlMDh4XG4iLCByZWcsIHJlYWRsKG1lbSArIHJlZykpOworCisJcmV0dXJuIHB0ciAtIGJ1ZjsKK30KKworLyogc201MDFmYl9kZWJ1Z19zaG93X2NydAorICoKKyAqIHNob3cgdGhlIGNydCBjb250cm9sIGFuZCBjdXJzb3IgcmVnaXN0ZXJzCisqLworCitzdGF0aWMgc3NpemVfdCBzbTUwMWZiX2RlYnVnX3Nob3dfY3J0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnB0ciA9IGJ1ZjsKKworCXB0ciArPSBzbTUwMWZiX3Nob3dfcmVncyhpbmZvLCBwdHIsIFNNNTAxX0RDX0NSVF9DT05UUk9MLCAweDQwKTsKKwlwdHIgKz0gc201MDFmYl9zaG93X3JlZ3MoaW5mbywgcHRyLCBTTTUwMV9EQ19DUlRfSFdDX0JBU0UsIDB4MTApOworCisJcmV0dXJuIHB0ciAtIGJ1ZjsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGZicmVnc19jcnQsIDA0NDQsIHNtNTAxZmJfZGVidWdfc2hvd19jcnQsIE5VTEwpOworCisvKiBzbTUwMWZiX2RlYnVnX3Nob3dfcG5sCisgKgorICogc2hvdyB0aGUgcGFuZWwgY29udHJvbCBhbmQgY3Vyc29yIHJlZ2lzdGVycworKi8KKworc3RhdGljIHNzaXplX3Qgc201MDFmYl9kZWJ1Z19zaG93X3BubChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbTUwMWZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICpwdHIgPSBidWY7CisKKwlwdHIgKz0gc201MDFmYl9zaG93X3JlZ3MoaW5mbywgcHRyLCAweDAsIDB4NDApOworCXB0ciArPSBzbTUwMWZiX3Nob3dfcmVncyhpbmZvLCBwdHIsIFNNNTAxX0RDX1BBTkVMX0hXQ19CQVNFLCAweDEwKTsKKworCXJldHVybiBwdHIgLSBidWY7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihmYnJlZ3NfcG5sLCAwNDQ0LCBzbTUwMWZiX2RlYnVnX3Nob3dfcG5sLCBOVUxMKTsKKworLyogZnJhbWVidWZmZXIgb3BzICovCisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHNtNTAxZmJfb3BzX2NydCA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX2NoZWNrX3Zhcgk9IHNtNTAxZmJfY2hlY2tfdmFyX2NydCwKKwkuZmJfc2V0X3Bhcgk9IHNtNTAxZmJfc2V0X3Bhcl9jcnQsCisJLmZiX2JsYW5rCT0gc201MDFmYl9ibGFua19jcnQsCisJLmZiX3NldGNvbHJlZwk9IHNtNTAxZmJfc2V0Y29scmVnLAorCS5mYl9wYW5fZGlzcGxheQk9IHNtNTAxZmJfcGFuX2NydCwKKwkuZmJfY3Vyc29yCT0gc201MDFmYl9jdXJzb3IsCisJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHNtNTAxZmJfb3BzX3BubCA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX2NoZWNrX3Zhcgk9IHNtNTAxZmJfY2hlY2tfdmFyX3BubCwKKwkuZmJfc2V0X3Bhcgk9IHNtNTAxZmJfc2V0X3Bhcl9wbmwsCisJLmZiX3Bhbl9kaXNwbGF5CT0gc201MDFmYl9wYW5fcG5sLAorCS5mYl9ibGFuawk9IHNtNTAxZmJfYmxhbmtfcG5sLAorCS5mYl9zZXRjb2xyZWcJPSBzbTUwMWZiX3NldGNvbHJlZywKKwkuZmJfY3Vyc29yCT0gc201MDFmYl9jdXJzb3IsCisJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKK307CisKKy8qIHNtNTAxZmJfaW5mb19hbGxvYworICoKKyAqIGNyZWF0ZXMgYW5kIGluaXRpYWxpc2VzIGFuIHNtNTAxZmJfaW5mbyBzdHJ1Y3R1cmUKKyovCisKK3N0YXRpYyBzdHJ1Y3Qgc201MDFmYl9pbmZvICpzbTUwMWZiX2luZm9fYWxsb2Moc3RydWN0IGZiX2luZm8gKmZiaW5mb19jcnQsCisJCQkJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJpbmZvX3BubCkKK3sKKwlzdHJ1Y3Qgc201MDFmYl9pbmZvICppbmZvOworCXN0cnVjdCBzbTUwMWZiX3BhciAgKnBhcjsKKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc201MDFmYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGluZm8pIHsKKwkJLyogc2V0IHRoZSByZWZlcmVuY2VzIGJhY2sgKi8KKworCQlwYXIgPSBmYmluZm9fY3J0LT5wYXI7CisJCXBhci0+aW5mbyA9IGluZm87CisJCXBhci0+aGVhZCA9IEhFQURfQ1JUOworCQlmYmluZm9fY3J0LT5wc2V1ZG9fcGFsZXR0ZSA9ICZwYXItPnBzZXVkb19wYWxldHRlOworCisJCXBhciA9IGZiaW5mb19wbmwtPnBhcjsKKwkJcGFyLT5pbmZvID0gaW5mbzsKKwkJcGFyLT5oZWFkID0gSEVBRF9QQU5FTDsKKwkJZmJpbmZvX3BubC0+cHNldWRvX3BhbGV0dGUgPSAmcGFyLT5wc2V1ZG9fcGFsZXR0ZTsKKworCQkvKiBzdG9yZSB0aGUgdHdvIGZicyBpbnRvIG91ciBpbmZvICovCisJCWluZm8tPmZiW0hFQURfQ1JUXSA9IGZiaW5mb19jcnQ7CisJCWluZm8tPmZiW0hFQURfUEFORUxdID0gZmJpbmZvX3BubDsKKwl9CisKKwlyZXR1cm4gaW5mbzsKK30KKworLyogc201MDFfaW5pdF9jdXJzb3IKKyAqCisgKiBpbml0aWFsaXNlIGh3IGN1cnNvciBwYXJhbWV0ZXJzCisqLworCitpbnQgc201MDFfaW5pdF9jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmZiaSwgdW5zaWduZWQgaW50IHJlZ19iYXNlKQoreworCXN0cnVjdCBzbTUwMWZiX3BhciAqcGFyID0gZmJpLT5wYXI7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqaW5mbyA9IHBhci0+aW5mbzsKKwlpbnQgcmV0OworCisJcGFyLT5jdXJzb3JfcmVncyA9IGluZm8tPnJlZ3MgKyByZWdfYmFzZTsKKworCXJldCA9IHNtNTAxX2FsbG9jX21lbShpbmZvLCAmcGFyLT5jdXJzb3IsIFNNNTAxX01FTUZfQ1VSU09SLCAxMDI0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGluaXRpYWxpc2UgdGhlIGNvbG91ciByZWdpc3RlcnMgKi8KKworCXdyaXRlbChwYXItPmN1cnNvci5zbV9hZGRyLCBwYXItPmN1cnNvcl9yZWdzICsgU001MDFfT0ZGX0hXQ19BRERSKTsKKworCXdyaXRlbCgweDAwLCBwYXItPmN1cnNvcl9yZWdzICsgU001MDFfT0ZGX0hXQ19MT0MpOworCXdyaXRlbCgweDAwLCBwYXItPmN1cnNvcl9yZWdzICsgU001MDFfT0ZGX0hXQ19DT0xPUl8xXzIpOworCXdyaXRlbCgweDAwLCBwYXItPmN1cnNvcl9yZWdzICsgU001MDFfT0ZGX0hXQ19DT0xPUl8zKTsKKwlzbTUwMWZiX3N5bmNfcmVncyhpbmZvKTsKKworCXJldHVybiAwOworfQorCisvKiBzbTUwMWZiX2luZm9fc3RhcnQKKyAqCisgKiBmaWxscyB0aGUgcGFyIHN0cnVjdHVyZSBjbGFpbWluZyByZXNvdXJjZXMgYW5kIHJlbWFwcGluZyBldGMuCisqLworCitzdGF0aWMgaW50IHNtNTAxZmJfc3RhcnQoc3RydWN0IHNtNTAxZmJfaW5mbyAqaW5mbywKKwkJCSBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqcmVzOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCisJaW5mby0+ZGV2ID0gZGV2ID0gJnBkZXYtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKworCWluZm8tPmlycSA9IHJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJLyogd2UgY3VycmVudGx5IGRvIG5vdCB1c2UgdGhlIElSUSAqLworCQlkZXZfd2FybihkZXYsICJubyBpcnEgZm9yIGRldmljZVxuIik7CisJfQorCisJLyogYWxsb2NhdGUsIHJlc2VydmUgYW5kIHJlbWFwIHJlc291cmNlcyBmb3IgcmVnaXN0ZXJzICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJubyByZXNvdXJjZSBkZWZpbml0aW9uIGZvciByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycl9yZWxlYXNlOworCX0KKworCWluZm8tPnJlZ3NfcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsCisJCQkJCSAgICByZXMtPmVuZCAtIHJlcy0+c3RhcnQsCisJCQkJCSAgICBwZGV2LT5uYW1lKTsKKworCWlmIChpbmZvLT5yZWdzX3JlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfcmVsZWFzZTsKKwl9CisKKwlpbmZvLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSsxKTsKKwlpZiAoaW5mby0+cmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfcmVnc19yZXM7CisJfQorCisJLyogYWxsb2NhdGUsIHJlc2VydmUgcmVzb3VyY2VzIGZvciBmcmFtZWJ1ZmZlciAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMik7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAibm8gbWVtb3J5IHJlc291cmNlIGRlZmluZWRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX3JlZ3NfbWFwOworCX0KKworCWluZm8tPmZibWVtX3JlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LAorCQkJCQkgICAgIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKzEsCisJCQkJCSAgICAgcGRldi0+bmFtZSk7CisJaWYgKGluZm8tPmZibWVtX3JlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl9yZWdzX21hcDsKKwl9CisKKwlpbmZvLT5mYm1lbSA9IGlvcmVtYXAocmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkrMSk7CisJaWYgKGluZm8tPmZibWVtID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVtYXAgZnJhbWVidWZmZXJcbiIpOworCQlnb3RvIGVycl9tZW1fcmVzOworCX0KKworCWluZm8tPmZibWVtX2xlbiA9IChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKzE7CisKKwkvKiBlbmFibGUgZGlzcGxheSBjb250cm9sbGVyICovCisJc201MDFfdW5pdF9wb3dlcihkZXYtPnBhcmVudCwgU001MDFfR0FURV9ESVNQTEFZLCAxKTsKKworCS8qIHNldHVwIGN1cnNvcnMgKi8KKworCXNtNTAxX2luaXRfY3Vyc29yKGluZm8tPmZiW0hFQURfQ1JUXSwgU001MDFfRENfQ1JUX0hXQ19BRERSKTsKKwlzbTUwMV9pbml0X2N1cnNvcihpbmZvLT5mYltIRUFEX1BBTkVMXSwgU001MDFfRENfUEFORUxfSFdDX0FERFIpOworCisJcmV0dXJuIDA7IC8qIGV2ZXJ5dGhpbmcgaXMgc2V0dXAgKi8KKworIGVycl9tZW1fcmVzOgorCXJlbGVhc2VfcmVzb3VyY2UoaW5mby0+ZmJtZW1fcmVzKTsKKwlrZnJlZShpbmZvLT5mYm1lbV9yZXMpOworCisgZXJyX3JlZ3NfbWFwOgorCWlvdW5tYXAoaW5mby0+cmVncyk7CisKKyBlcnJfcmVnc19yZXM6CisJcmVsZWFzZV9yZXNvdXJjZShpbmZvLT5yZWdzX3Jlcyk7CisJa2ZyZWUoaW5mby0+cmVnc19yZXMpOworCisgZXJyX3JlbGVhc2U6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc201MDFmYl9zdG9wKHN0cnVjdCBzbTUwMWZiX2luZm8gKmluZm8pCit7CisJLyogZGlzYWJsZSBkaXNwbGF5IGNvbnRyb2xsZXIgKi8KKwlzbTUwMV91bml0X3Bvd2VyKGluZm8tPmRldi0+cGFyZW50LCBTTTUwMV9HQVRFX0RJU1BMQVksIDApOworCisJaW91bm1hcChpbmZvLT5mYm1lbSk7CisJcmVsZWFzZV9yZXNvdXJjZShpbmZvLT5mYm1lbV9yZXMpOworCWtmcmVlKGluZm8tPmZibWVtX3Jlcyk7CisKKwlpb3VubWFwKGluZm8tPnJlZ3MpOworCXJlbGVhc2VfcmVzb3VyY2UoaW5mby0+cmVnc19yZXMpOworCWtmcmVlKGluZm8tPnJlZ3NfcmVzKTsKK30KKworc3RhdGljIHZvaWQgc201MDFmYl9pbmZvX3JlbGVhc2Uoc3RydWN0IHNtNTAxZmJfaW5mbyAqaW5mbykKK3sKKwlrZnJlZShpbmZvKTsKK30KKworc3RhdGljIGludCBzbTUwMWZiX2luaXRfZmIoc3RydWN0IGZiX2luZm8gKmZiLAorCQkJICAgZW51bSBzbTUwMV9jb250cm9sbGVyIGhlYWQsCisJCQkgICBjb25zdCBjaGFyICpmYm5hbWUpCit7CisJc3RydWN0IHNtNTAxX3BsYXRkYXRhX2Zic3ViICpwZDsKKwlzdHJ1Y3Qgc201MDFmYl9wYXIgKnBhciA9IGZiLT5wYXI7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqaW5mbyA9IHBhci0+aW5mbzsKKwl1bnNpZ25lZCBsb25nIGN0cmw7CisJdW5zaWduZWQgaW50IGVuYWJsZTsKKwlpbnQgcmV0OworCisJc3dpdGNoIChoZWFkKSB7CisJY2FzZSBIRUFEX0NSVDoKKwkJcGQgPSBpbmZvLT5wZGF0YS0+ZmJfY3J0OworCQljdHJsID0gcmVhZGwoaW5mby0+cmVncyArIFNNNTAxX0RDX0NSVF9DT05UUk9MKTsKKwkJZW5hYmxlID0gKGN0cmwgJiBTTTUwMV9EQ19DUlRfQ09OVFJPTF9FTkFCTEUpID8gMSA6IDA7CisKKwkJLyogZW5zdXJlIHdlIHNldCB0aGUgY29ycmVjdCBzb3VyY2UgcmVnaXN0ZXIgKi8KKwkJaWYgKGluZm8tPnBkYXRhLT5mYl9yb3V0ZSAhPSBTTTUwMV9GQl9DUlRfUEFORUwpIHsKKwkJCWN0cmwgfD0gU001MDFfRENfQ1JUX0NPTlRST0xfU0VMOworCQkJd3JpdGVsKGN0cmwsIGluZm8tPnJlZ3MgKyBTTTUwMV9EQ19DUlRfQ09OVFJPTCk7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgSEVBRF9QQU5FTDoKKwkJcGQgPSBpbmZvLT5wZGF0YS0+ZmJfcG5sOworCQljdHJsID0gcmVhZGwoaW5mby0+cmVncyArIFNNNTAxX0RDX1BBTkVMX0NPTlRST0wpOworCQllbmFibGUgPSAoY3RybCAmIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfRU4pID8gMSA6IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcGQgPSBOVUxMOwkJLyogc3RvcCBjb21waWxlciB3YXJuaW5ncyAqLworCQljdHJsID0gMDsKKwkJZW5hYmxlID0gMDsKKwkJQlVHKCk7CisJfQorCisJZGV2X2luZm8oaW5mby0+ZGV2LCAiZmIgJXMgJXNhYmxlZCBhdCBzdGFydFxuIiwKKwkJIGZibmFtZSwgZW5hYmxlID8gImVuIiA6ICJkaXMiKTsKKworCS8qIGNoZWNrIHRvIHNlZSBpZiBvdXIgcm91dGluZyBhbGxvd3MgdGhpcyAqLworCisJaWYgKGhlYWQgPT0gSEVBRF9DUlQgJiYgaW5mby0+cGRhdGEtPmZiX3JvdXRlID09IFNNNTAxX0ZCX0NSVF9QQU5FTCkgeworCQljdHJsICY9IH5TTTUwMV9EQ19DUlRfQ09OVFJPTF9TRUw7CisJCXdyaXRlbChjdHJsLCBpbmZvLT5yZWdzICsgU001MDFfRENfQ1JUX0NPTlRST0wpOworCQllbmFibGUgPSAwOworCX0KKworCXN0cmxjcHkoZmItPmZpeC5pZCwgZmJuYW1lLCBzaXplb2YoZmItPmZpeC5pZCkpOworCisJbWVtY3B5KCZwYXItPm9wcywKKwkgICAgICAgKGhlYWQgPT0gSEVBRF9DUlQpID8gJnNtNTAxZmJfb3BzX2NydCA6ICZzbTUwMWZiX29wc19wbmwsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZmJfb3BzKSk7CisKKwkvKiB1cGRhdGUgb3BzIGRlcGVuZGFudCBvbiB3aGF0IHdlJ3ZlIGJlZW4gcGFzc2VkICovCisKKwlpZiAoKHBkLT5mbGFncyAmIFNNNTAxRkJfRkxBR19VU0VfSFdDVVJTT1IpID09IDApCisJCXBhci0+b3BzLmZiX2N1cnNvciA9IE5VTEw7CisKKwlmYi0+ZmJvcHMgPSAmcGFyLT5vcHM7CisJZmItPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVCB8CisJCUZCSU5GT19IV0FDQ0VMX1hQQU4gfCBGQklORk9fSFdBQ0NFTF9ZUEFOOworCisJLyogZml4ZWQgZGF0YSAqLworCisJZmItPmZpeC50eXBlCQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlmYi0+Zml4LnR5cGVfYXV4CT0gMDsKKwlmYi0+Zml4LnhwYW5zdGVwCT0gMTsKKwlmYi0+Zml4LnlwYW5zdGVwCT0gMTsKKwlmYi0+Zml4Lnl3cmFwc3RlcAk9IDA7CisJZmItPmZpeC5hY2NlbAkJPSBGQl9BQ0NFTF9OT05FOworCisJLyogc2NyZWVubW9kZSAqLworCisJZmItPnZhci5ub25zdGQJCT0gMDsKKwlmYi0+dmFyLmFjdGl2YXRlCT0gRkJfQUNUSVZBVEVfTk9XOworCWZiLT52YXIuYWNjZWxfZmxhZ3MJPSAwOworCWZiLT52YXIudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKKwlmYi0+dmFyLmJpdHNfcGVyX3BpeGVsICA9IDE2OworCisJaWYgKGVuYWJsZSAmJiAocGQtPmZsYWdzICYgU001MDFGQl9GTEFHX1VTRV9JTklUX01PREUpICYmIDApIHsKKwkJLyogVE9ETyByZWFkIHRoZSBtb2RlIGZyb20gdGhlIGN1cnJlbnQgZGlzcGxheSAqLworCisJfSBlbHNlIHsKKwkJaWYgKHBkLT5kZWZfbW9kZSkgeworCQkJZGV2X2luZm8oaW5mby0+ZGV2LCAidXNpbmcgc3VwcGxpZWQgbW9kZVxuIik7CisJCQlmYl92aWRlb21vZGVfdG9fdmFyKCZmYi0+dmFyLCBwZC0+ZGVmX21vZGUpOworCisJCQlmYi0+dmFyLmJpdHNfcGVyX3BpeGVsID0gcGQtPmRlZl9icHAgPyBwZC0+ZGVmX2JwcCA6IDg7CisJCQlmYi0+dmFyLnhyZXNfdmlydHVhbCA9IGZiLT52YXIueHJlczsKKwkJCWZiLT52YXIueXJlc192aXJ0dWFsID0gZmItPnZhci55cmVzOworCQl9IGVsc2UgeworCQkJcmV0ID0gZmJfZmluZF9tb2RlKCZmYi0+dmFyLCBmYiwKKwkJCQkJICAgTlVMTCwgTlVMTCwgMCwgTlVMTCwgOCk7CisKKwkJCWlmIChyZXQgPT0gMCB8fCByZXQgPT0gNCkgeworCQkJCWRldl9lcnIoaW5mby0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIGdldCBpbml0aWFsIG1vZGVcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJfQorCisJLyogaW5pdGlhbGlzZSBhbmQgc2V0IHRoZSBwYWxldHRlICovCisJZmJfYWxsb2NfY21hcCgmZmItPmNtYXAsIE5SX1BBTEVUVEUsIDApOworCWZiX3NldF9jbWFwKCZmYi0+Y21hcCwgZmIpOworCisJcmV0ID0gKGZiLT5mYm9wcy0+ZmJfY2hlY2tfdmFyKSgmZmItPnZhciwgZmIpOworCWlmIChyZXQpCisJCWRldl9lcnIoaW5mby0+ZGV2LCAiY2hlY2tfdmFyKCkgZmFpbGVkIG9uIGluaXRpYWwgc2V0dXA/XG4iKTsKKworCS8qIGVuc3VyZSB3ZSd2ZSBhY3RpdmF0ZWQgb3VyIG5ldyBjb25maWd1cmF0aW9uICovCisJKGZiLT5mYm9wcy0+ZmJfc2V0X3BhcikoZmIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGRlZmF1bHQgcGxhdGZvcm0gZGF0YSBpZiBub25lIGlzIHN1cHBsaWVkIChpZSwgUENJIGRldmljZSkgKi8KKworc3RhdGljIHN0cnVjdCBzbTUwMV9wbGF0ZGF0YV9mYnN1YiBzbTUwMWZiX3BkYXRhX2NydCA9IHsKKwkuZmxhZ3MJCT0gKFNNNTAxRkJfRkxBR19VU0VfSU5JVF9NT0RFIHwKKwkJCSAgIFNNNTAxRkJfRkxBR19VU0VfSFdDVVJTT1IgfAorCQkJICAgU001MDFGQl9GTEFHX1VTRV9IV0FDQ0VMIHwKKwkJCSAgIFNNNTAxRkJfRkxBR19ESVNBQkxFX0FUX0VYSVQpLAorCit9OworCitzdGF0aWMgc3RydWN0IHNtNTAxX3BsYXRkYXRhX2Zic3ViIHNtNTAxZmJfcGRhdGFfcG5sID0geworCS5mbGFncwkJPSAoU001MDFGQl9GTEFHX1VTRV9JTklUX01PREUgfAorCQkJICAgU001MDFGQl9GTEFHX1VTRV9IV0NVUlNPUiB8CisJCQkgICBTTTUwMUZCX0ZMQUdfVVNFX0hXQUNDRUwgfAorCQkJICAgU001MDFGQl9GTEFHX0RJU0FCTEVfQVRfRVhJVCksCit9OworCitzdGF0aWMgc3RydWN0IHNtNTAxX3BsYXRkYXRhX2ZiIHNtNTAxZmJfZGVmX3BkYXRhID0geworCS5mYl9yb3V0ZQkJPSBTTTUwMV9GQl9PV04sCisJLmZiX2NydAkJCT0gJnNtNTAxZmJfcGRhdGFfY3J0LAorCS5mYl9wbmwJCQk9ICZzbTUwMWZiX3BkYXRhX3BubCwKK307CisKK3N0YXRpYyBjaGFyIGRyaXZlcl9uYW1lX2NydFtdID0gInNtNTAxZmItY3J0IjsKK3N0YXRpYyBjaGFyIGRyaXZlcl9uYW1lX3BubFtdID0gInNtNTAxZmItcGFuZWwiOworCitzdGF0aWMgaW50IF9faW5pdCBzbTUwMWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgZGV2aWNlCSAgICAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZmJfaW5mbwkgICAgKmZiaW5mb19jcnQ7CisJc3RydWN0IGZiX2luZm8JICAgICpmYmluZm9fcG5sOworCWludAkJICAgICByZXQ7CisKKwkvKiBhbGxvY2F0ZSBvdXIgZnJhbWVidWZmZXJzICovCisKKwlmYmluZm9fY3J0ID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbTUwMWZiX3BhciksIGRldik7CisJaWYgKGZiaW5mb19jcnQgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBhbGxvY2F0ZSBjcnQgZnJhbWVidWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmYmluZm9fcG5sID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbTUwMWZiX3BhciksIGRldik7CisJaWYgKGZiaW5mb19wbmwgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBhbGxvY2F0ZSBwYW5lbCBmcmFtZWJ1ZmZlclxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmJpbmZvX2NydF9hbGxvY19mYWlsOworCX0KKworCWluZm8gPSBzbTUwMWZiX2luZm9fYWxsb2MoZmJpbmZvX2NydCwgZmJpbmZvX3BubCk7CisJaWYgKGluZm8gPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBhbGxvY2F0ZSBwYXJcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHNtNTAxZmJfYWxsb2NfZmFpbDsKKwl9CisKKwlpZiAoZGV2LT5wYXJlbnQtPnBsYXRmb3JtX2RhdGEpIHsKKwkJc3RydWN0IHNtNTAxX3BsYXRkYXRhICpwZCA9IGRldi0+cGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCQlpbmZvLT5wZGF0YSA9IHBkLT5mYjsKKwl9CisKKwlpZiAoaW5mby0+cGRhdGEgPT0gTlVMTCkgeworCQlkZXZfaW5mbyhkZXYsICJ1c2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZGF0YVxuIik7CisJCWluZm8tPnBkYXRhID0gJnNtNTAxZmJfZGVmX3BkYXRhOworCX0KKworCS8qIHN0YXJ0IHRoZSBmcmFtZWJ1ZmZlcnMgKi8KKworCXJldCA9IHNtNTAxZmJfc3RhcnQoaW5mbywgcGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBpbml0aWFsaXNlIFNNNTAxXG4iKTsKKwkJZ290byBzbTUwMWZiX3N0YXJ0X2ZhaWw7CisJfQorCisJLyogQ1JUIGZyYW1lYnVmZmVyIHNldHVwICovCisKKwlyZXQgPSBzbTUwMWZiX2luaXRfZmIoZmJpbmZvX2NydCwgSEVBRF9DUlQsIGRyaXZlcl9uYW1lX2NydCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBpbml0aWFsaXNlIENSVCBmYlxuIik7CisJCWdvdG8gc201MDFmYl9zdGFydF9mYWlsOworCX0KKworCS8qIFBhbmVsIGZyYW1lYnVmZmVyIHNldHVwICovCisKKwlyZXQgPSBzbTUwMWZiX2luaXRfZmIoZmJpbmZvX3BubCwgSEVBRF9QQU5FTCwgZHJpdmVyX25hbWVfcG5sKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGluaXRpYWxpc2UgUGFuZWwgZmJcbiIpOworCQlnb3RvIHNtNTAxZmJfc3RhcnRfZmFpbDsKKwl9CisKKwkvKiByZWdpc3RlciBmcmFtZWJ1ZmZlcnMgKi8KKworCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiaW5mb19jcnQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIENSVCBmYiAoJWQpXG4iLCByZXQpOworCQlnb3RvIHJlZ2lzdGVyX2NydF9mYWlsOworCX0KKworCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiaW5mb19wbmwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHBhbmVsIGZiICglZClcbiIsIHJldCk7CisJCWdvdG8gcmVnaXN0ZXJfcG5sX2ZhaWw7CisJfQorCisJZGV2X2luZm8oZGV2LCAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKKwkJIGZiaW5mb19jcnQtPm5vZGUsIGZiaW5mb19jcnQtPmZpeC5pZCk7CisKKwlkZXZfaW5mbyhkZXYsICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAorCSAgICAgICBmYmluZm9fcG5sLT5ub2RlLCBmYmluZm9fcG5sLT5maXguaWQpOworCisJLyogY3JlYXRlIGRldmljZSBmaWxlcyAqLworCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NydF9zcmMpOworCWlmIChyZXQpCisJCWdvdG8gY3J0c3JjX2ZhaWw7CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmJyZWdzX3BubCk7CisJaWYgKHJldCkKKwkJZ290byBmYnJlZ3NfcG5sX2ZhaWw7CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmJyZWdzX2NydCk7CisJaWYgKHJldCkKKwkJZ290byBmYnJlZ3NfY3J0X2ZhaWw7CisKKwkvKiB3ZSByZWdpc3RlcmVkLCByZXR1cm4gb2sgKi8KKwlyZXR1cm4gMDsKKworIGZicmVnc19jcnRfZmFpbDoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmJyZWdzX3BubCk7CisKKyBmYnJlZ3NfcG5sX2ZhaWw6CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NydF9zcmMpOworCisgY3J0c3JjX2ZhaWw6CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmluZm9fcG5sKTsKKworIHJlZ2lzdGVyX3BubF9mYWlsOgorCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJpbmZvX2NydCk7CisKKyByZWdpc3Rlcl9jcnRfZmFpbDoKKwlzbTUwMWZiX3N0b3AoaW5mbyk7CisKKyBzbTUwMWZiX3N0YXJ0X2ZhaWw6CisJc201MDFmYl9pbmZvX3JlbGVhc2UoaW5mbyk7CisKKyBzbTUwMWZiX2FsbG9jX2ZhaWw6CisJZnJhbWVidWZmZXJfcmVsZWFzZShmYmluZm9fcG5sKTsKKworIGZiaW5mb19jcnRfYWxsb2NfZmFpbDoKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiaW5mb19jcnQpOworCisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogIENsZWFudXAKKyAqLworc3RhdGljIGludCBzbTUwMWZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbTUwMWZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvX2NydCA9IGluZm8tPmZiWzBdOworCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm9fcG5sID0gaW5mby0+ZmJbMV07CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2ZicmVnc19jcnQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZmJyZWdzX3BubCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9jcnRfc3JjKTsKKworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJpbmZvX2NydCk7CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmluZm9fcG5sKTsKKworCXNtNTAxZmJfc3RvcChpbmZvKTsKKwlzbTUwMWZiX2luZm9fcmVsZWFzZShpbmZvKTsKKworCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpbmZvX3BubCk7CisJZnJhbWVidWZmZXJfcmVsZWFzZShmYmluZm9fY3J0KTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgc201MDFmYl9zdXNwZW5kX2ZiKHN0cnVjdCBzbTUwMWZiX2luZm8gKmluZm8sCisJCQkgICAgICBlbnVtIHNtNTAxX2NvbnRyb2xsZXIgaGVhZCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpID0gaW5mby0+ZmJbaGVhZF07CisJc3RydWN0IHNtNTAxZmJfcGFyICpwYXIgPSBmYmktPnBhcjsKKworCWlmIChwYXItPnNjcmVlbi5zaXplID09IDApCisJCXJldHVybiAwOworCisJLyogYmFja3VwIGNvcGllcyBpbiBjYXNlIGNoaXAgaXMgcG93ZXJlZCBkb3duIG92ZXIgc3VzcGVuZCAqLworCisJcGFyLT5zdG9yZV9mYiA9IHZtYWxsb2MocGFyLT5zY3JlZW4uc2l6ZSk7CisJaWYgKHBhci0+c3RvcmVfZmIgPT0gTlVMTCkgeworCQlkZXZfZXJyKGluZm8tPmRldiwgIm5vIG1lbW9yeSB0byBzdG9yZSBzY3JlZW5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwYXItPnN0b3JlX2N1cnNvciA9IHZtYWxsb2MocGFyLT5jdXJzb3Iuc2l6ZSk7CisJaWYgKHBhci0+c3RvcmVfY3Vyc29yID09IE5VTEwpIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJubyBtZW1vcnkgdG8gc3RvcmUgY3Vyc29yXG4iKTsKKwkJZ290byBlcnJfbm9jdXJzb3I7CisJfQorCisJbWVtY3B5X2Zyb21pbyhwYXItPnN0b3JlX2ZiLCBwYXItPnNjcmVlbi5rX2FkZHIsIHBhci0+c2NyZWVuLnNpemUpOworCW1lbWNweV9mcm9taW8ocGFyLT5zdG9yZV9jdXJzb3IsIHBhci0+Y3Vyc29yLmtfYWRkciwgcGFyLT5jdXJzb3Iuc2l6ZSk7CisKKwkvKiBibGFuayB0aGUgcmVsZXZhbnQgaW50ZXJmYWNlIHRvIGVuc3VyZSB1bml0IHBvd2VyIG1pbmltaXNlZCAqLworCShwYXItPm9wcy5mYl9ibGFuaykoRkJfQkxBTktfUE9XRVJET1dOLCBmYmkpOworCisJcmV0dXJuIDA7CisKKyBlcnJfbm9jdXJzb3I6CisJdmZyZWUocGFyLT5zdG9yZV9mYik7CisKKwlyZXR1cm4gLUVOT01FTTsKKworfQorCitzdGF0aWMgdm9pZCBzbTUwMWZiX3Jlc3VtZV9mYihzdHJ1Y3Qgc201MDFmYl9pbmZvICppbmZvLAorCQkJICAgICAgZW51bSBzbTUwMV9jb250cm9sbGVyIGhlYWQpCit7CisJc3RydWN0IGZiX2luZm8gKmZiaSA9IGluZm8tPmZiW2hlYWRdOworCXN0cnVjdCBzbTUwMWZiX3BhciAqcGFyID0gZmJpLT5wYXI7CisKKwlpZiAocGFyLT5zY3JlZW4uc2l6ZSA9PSAwKQorCQlyZXR1cm47CisKKwkvKiByZS1hY3RpdmF0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCisJKHBhci0+b3BzLmZiX3NldF9wYXIpKGZiaSk7CisKKwkvKiByZXN0b3JlIHRoZSBkYXRhICovCisKKwltZW1jcHlfdG9pbyhwYXItPnNjcmVlbi5rX2FkZHIsIHBhci0+c3RvcmVfZmIsIHBhci0+c2NyZWVuLnNpemUpOworCW1lbWNweV90b2lvKHBhci0+Y3Vyc29yLmtfYWRkciwgcGFyLT5zdG9yZV9jdXJzb3IsIHBhci0+Y3Vyc29yLnNpemUpOworCisJdmZyZWUocGFyLT5zdG9yZV9mYik7CisJdmZyZWUocGFyLT5zdG9yZV9jdXJzb3IpOworfQorCisKKy8qIHN1c3BlbmQgYW5kIHJlc3VtZSBzdXBwb3J0ICovCisKK3N0YXRpYyBpbnQgc201MDFmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc201MDFmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbTUwMWZiX3N1c3BlbmRfZmIoaW5mbywgSEVBRF9DUlQpOworCXNtNTAxZmJfc3VzcGVuZF9mYihpbmZvLCBIRUFEX1BBTkVMKTsKKworCS8qIHR1cm4gb2ZmIHRoZSBjbG9ja3MsIGluIGNhc2UgdGhlIGRldmljZSBpcyBub3QgcG93ZXJlZCBkb3duICovCisJc201MDFfdW5pdF9wb3dlcihpbmZvLT5kZXYtPnBhcmVudCwgU001MDFfR0FURV9ESVNQTEFZLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtNTAxZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNtNTAxZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc201MDFfdW5pdF9wb3dlcihpbmZvLT5kZXYtPnBhcmVudCwgU001MDFfR0FURV9ESVNQTEFZLCAxKTsKKworCXNtNTAxZmJfcmVzdW1lX2ZiKGluZm8sIEhFQURfQ1JUKTsKKwlzbTUwMWZiX3Jlc3VtZV9mYihpbmZvLCBIRUFEX1BBTkVMKTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBzbTUwMWZiX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzbTUwMWZiX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNtNTAxZmJfZHJpdmVyID0geworCS5wcm9iZQkJPSBzbTUwMWZiX3Byb2JlLAorCS5yZW1vdmUJCT0gc201MDFmYl9yZW1vdmUsCisJLnN1c3BlbmQJPSBzbTUwMWZiX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzbTUwMWZiX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic201MDEtZmIiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworaW50IF9fZGV2aW5pdCBzbTUwMWZiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbTUwMWZiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbTUwMWZiX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc201MDFmYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzbTUwMWZiX2luaXQpOworbW9kdWxlX2V4aXQoc201MDFmYl9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzLCBWaW5jZW50IFNhbmRlcnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU001MDEgRnJhbWVidWZmZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9mcy85cC9maWQuYyBiL2ZzLzlwL2ZpZC5jCmluZGV4IGE5YjYzMDEuLjkwNDE5NzEgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2ZpZC5jCisrKyBiL2ZzLzlwL2ZpZC5jCkBAIC0xMzYsNyArMTM2LDggQEAKIH0KIAogLyoqCi0gKiB2OWZzX2ZpZF9jbG9uZSAtIGxvb2t1cCB0aGUgZmlkIGZvciBhIGRlbnRyeSwgY2xvbmUgYSBwcml2YXRlIGNvcHkgYW5kIHJlbGVhc2UgaXQKKyAqIHY5ZnNfZmlkX2Nsb25lIC0gbG9va3VwIHRoZSBmaWQgZm9yIGEgZGVudHJ5LCBjbG9uZSBhIHByaXZhdGUgY29weSBhbmQKKyAqIAkJCXJlbGVhc2UgaXQKICAqIEBkZW50cnk6IGRlbnRyeSB0byBsb29rIGZvciBmaWQgaW4KICAqCiAgKiBmaW5kIGEgZmlkIGluIHRoZSBkZW50cnkgYW5kIHRoZW4gY2xvbmUgdG8gYSBuZXcgcHJpdmF0ZSBmaWQKZGlmZiAtLWdpdCBhL2ZzLzlwL211eC5jIGIvZnMvOXAvbXV4LmMKaW5kZXggMTQ3Y2VlZi4uYzc4Mzg3NCAxMDA2NDQKLS0tIGEvZnMvOXAvbXV4LmMKKysrIGIvZnMvOXAvbXV4LmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCXZwdC0+bXV4bnVtLS07CiAJaWYgKCF2cHQtPm11eG51bSkgewogCQlkcHJpbnRrKERFQlVHX01VWCwgImRlc3Ryb3kgcHJvYyAlcFxuIiwgdnB0KTsKLQkJc2VuZF9zaWcoU0lHS0lMTCwgdnB0LT50YXNrLCAxKTsKKwkJa3RocmVhZF9zdG9wKHZwdC0+dGFzayk7CiAJCXZwdC0+dGFzayA9IE5VTEw7CiAJCXY5ZnNfbXV4X3BvbGxfdGFza19udW0tLTsKIAl9CkBAIC00MzgsMTEgKzQzOCw4IEBACiAKIAl2cHQgPSBhOwogCWRwcmludGsoREVCVUdfTVVYLCAic3RhcnQgJXAgJXBcbiIsIGN1cnJlbnQsIHZwdCk7Ci0JYWxsb3dfc2lnbmFsKFNJR0tJTEwpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCWJyZWFrOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtLCBtdG1wLCAmdnB0LT5tdXhfbGlzdCwgbXV4X2xpc3QpIHsKIAkJCXY5ZnNfcG9sbF9tdXgobSk7CmRpZmYgLS1naXQgYS9mcy85cC92OWZzLmMgYi9mcy85cC92OWZzLmMKaW5kZXggZDliNTYxYi4uNmFkNmYxOSAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmcy5jCisrKyBiL2ZzLzlwL3Y5ZnMuYwpAQCAtNTMsNiArNTMsOCBAQAogCU9wdF91bmFtZSwgT3B0X3JlbW90ZW5hbWUsCiAJLyogT3B0aW9ucyB0aGF0IHRha2Ugbm8gYXJndW1lbnRzICovCiAJT3B0X2xlZ2FjeSwgT3B0X25vZGV2bWFwLCBPcHRfdW5peCwgT3B0X3RjcCwgT3B0X2ZkLAorCS8qIENhY2hlIG9wdGlvbnMgKi8KKwlPcHRfY2FjaGVfbG9vc2UsCiAJLyogRXJyb3IgdG9rZW4gKi8KIAlPcHRfZXJyCiB9OwpAQCAtNzYsNiArNzgsOCBAQAogCXtPcHRfZmQsICJmZCJ9LAogCXtPcHRfbGVnYWN5LCAibm9leHRlbmQifSwKIAl7T3B0X25vZGV2bWFwLCAibm9kZXZtYXAifSwKKwl7T3B0X2NhY2hlX2xvb3NlLCAiY2FjaGU9bG9vc2UifSwKKwl7T3B0X2NhY2hlX2xvb3NlLCAibG9vc2UifSwKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKQEAgLTEwNiw2ICsxMTAsNyBAQAogCXY5c2VzLT5kZWJ1ZyA9IDA7CiAJdjlzZXMtPnJmZG5vID0gfjA7CiAJdjlzZXMtPndmZG5vID0gfjA7CisJdjlzZXMtPmNhY2hlID0gMDsKIAogCWlmICghb3B0aW9ucykKIAkJcmV0dXJuOwpAQCAtMTIxLDcgKzEyNiw2IEBACiAJCQkJCSJpbnRlZ2VyIGZpZWxkLCBidXQgbm8gaW50ZWdlcj9cbiIpOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCiAJCX0KIAkJc3dpdGNoICh0b2tlbikgewogCQljYXNlIE9wdF9wb3J0OgpAQCAtMTY5LDYgKzE3Myw5IEBACiAJCWNhc2UgT3B0X25vZGV2bWFwOgogCQkJdjlzZXMtPm5vZGV2ID0gMTsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9jYWNoZV9sb29zZToKKwkJCXY5c2VzLT5jYWNoZSA9IENBQ0hFX0xPT1NFOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQljb250aW51ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmcy5oIGIvZnMvOXAvdjlmcy5oCmluZGV4IGMxMzRkMTAuLjgyMGJmNWNhIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmgKKysrIGIvZnMvOXAvdjlmcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAJdW5zaWduZWQgaW50IGFmaWQ7CS8qIGF1dGhlbnRpY2F0aW9uIGZpZCAqLwogCXVuc2lnbmVkIGludCByZmRubzsJLyogcmVhZCBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyICovCiAJdW5zaWduZWQgaW50IHdmZG5vOwkvKiB3cml0ZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyICovCi0KKwl1bnNpZ25lZCBpbnQgY2FjaGU7CS8qIGNhY2hlIG1vZGUgKi8KIAogCWNoYXIgKm5hbWU7CQkvKiB1c2VyIG5hbWUgdG8gbW91bnQgYXMgKi8KIAljaGFyICpyZW1vdGVuYW1lOwkvKiBuYW1lIG9mIHJlbW90ZSBoaWVyYXJjaHkgYmVpbmcgbW91bnRlZCAqLwpAQCAtNzMsNiArNzMsMTMgQEAKIAlQUk9UT19GRCwKIH07CiAKKy8qIHBvc3NpYmxlIHZhbHVlcyBvZiAtPmNhY2hlICovCisvKiBldmVudHVhbGx5IHN1cHBvcnQgbG9vc2UsIHRpZ2h0LCB0aW1lLCBzZXNzaW9uLCBkZWZhdWx0IGFsd2F5cyBub25lICovCitlbnVtIHsKKwlDQUNIRV9OT05FLAkJLyogZGVmYXVsdCAqLworCUNBQ0hFX0xPT1NFLAkJLyogbm8gY29uc2lzdGVuY3kgKi8KK307CisKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICp2OWZzX2RlYnVnZnNfcm9vdDsKIAogaW50IHY5ZnNfc2Vzc2lvbl9pbml0KHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqLCBjb25zdCBjaGFyICosIGNoYXIgKik7CmRpZmYgLS1naXQgYS9mcy85cC92OWZzX3Zmcy5oIGIvZnMvOXAvdjlmc192ZnMuaAppbmRleCA0NTBiMGMxLi44YWRhNGM1IDEwMDY0NAotLS0gYS9mcy85cC92OWZzX3Zmcy5oCisrKyBiL2ZzLzlwL3Y5ZnNfdmZzLmgKQEAgLTQwLDggKzQwLDEwIEBACiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdjlmc19mc190eXBlOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdjlmc19hZGRyX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2OWZzX2ZpbGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHY5ZnNfY2FjaGVkX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHY5ZnNfZGlyX29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zOwogCiBzdHJ1Y3QgaW5vZGUgKnY5ZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlKTsKIGlub190IHY5ZnNfcWlkMmlubyhzdHJ1Y3Qgdjlmc19xaWQgKnFpZCk7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfYWRkci5jIGIvZnMvOXAvdmZzX2FkZHIuYwppbmRleCBjYzI0YWJmLi5iZWQ0OGZhIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfYWRkci5jCisrKyBiL2ZzLzlwL3Zmc19hZGRyLmMKQEAgLTYzLDYgKzYzLDggQEAKIAlpbnQgdG90YWwgPSAwOwogCWludCByZXN1bHQgPSAwOwogCisJZHByaW50ayhERUJVR19WRlMsICJcbiIpOworCiAJYnVmZmVyID0ga21hcChwYWdlKTsKIAlkbyB7CiAJCWlmIChjb3VudCA8IHJzaXplKQpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2RlbnRyeS5jIGIvZnMvOXAvdmZzX2RlbnRyeS5jCmluZGV4IDA2MmRhYTYuLmRkZmZkOGEgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19kZW50cnkuYworKysgYi9mcy85cC92ZnNfZGVudHJ5LmMKQEAgLTUzLDEwICs1MywzMSBAQAogc3RhdGljIGludCB2OWZzX2RlbnRyeV9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWRwcmludGsoREVCVUdfVkZTLCAiIGRlbnRyeTogJXMgKCVwKVxuIiwgZGVudHJ5LT5kX2luYW1lLCBkZW50cnkpOworCiAJcmV0dXJuIDE7CiB9CiAKIC8qKgorICogdjlmc19jYWNoZWRfZGVudHJ5X2RlbGV0ZSAtIGNhbGxlZCB3aGVuIGRlbnRyeSByZWZjb3VudCBlcXVhbHMgMAorICogQGRlbnRyeTogIGRlbnRyeSBpbiBxdWVzdGlvbgorICoKKyAqIE9ubHkgcmV0dXJuIDEgaWYgb3VyIGlub2RlIGlzIGludmFsaWQuICBPbmx5IG5vbi1zeW50aGV0aWMgZmlsZXMKKyAqIChvbmVzIHdpdGhvdXQgbXRpbWUgPT0gMCkgc2hvdWxkIGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKi8KKworc3RhdGljIGludCB2OWZzX2NhY2hlZF9kZW50cnlfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWRwcmludGsoREVCVUdfVkZTLCAiIGRlbnRyeTogJXMgKCVwKVxuIiwgZGVudHJ5LT5kX2luYW1lLCBkZW50cnkpOworCisJaWYoIWlub2RlKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKioKICAqIHY5ZnNfZGVudHJ5X3JlbGVhc2UgLSBjYWxsZWQgd2hlbiBkZW50cnkgaXMgZ29pbmcgdG8gYmUgZnJlZWQKICAqIEBkZW50cnk6ICBkZW50cnkgdGhhdCBpcyBiZWluZyByZWxlYXNlCiAgKgpAQCAtODcsNiArMTA4LDExIEBACiAJfQogfQogCitzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnMgPSB7CisJLmRfZGVsZXRlID0gdjlmc19jYWNoZWRfZGVudHJ5X2RlbGV0ZSwKKwkuZF9yZWxlYXNlID0gdjlmc19kZW50cnlfcmVsZWFzZSwKK307CisKIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2OWZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZSA9IHY5ZnNfZGVudHJ5X2RlbGV0ZSwKIAkuZF9yZWxlYXNlID0gdjlmc19kZW50cnlfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19maWxlLmMgYi9mcy85cC92ZnNfZmlsZS5jCmluZGV4IDZjNzgzNDMuLjY1M2RmYTUgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19maWxlLmMKKysrIGIvZnMvOXAvdmZzX2ZpbGUuYwpAQCAtNzksNiArNzksMTMgQEAKIAl2ZmlkLT5maWxwID0gZmlsZTsKIAlrZnJlZShmY2FsbCk7CiAKKwlpZigodmZpZC0+cWlkLnZlcnNpb24pICYmICh2OXNlcy0+Y2FjaGUpKSB7CisJCWRwcmludGsoREVCVUdfVkZTLCAiY2FjaGVkIik7CisJCS8qIGVuYWJsZSBjYWNoZWQgZmlsZSBvcHRpb25zICovCisJCWlmKGZpbGUtPmZfb3AgPT0gJnY5ZnNfZmlsZV9vcGVyYXRpb25zKQorCQkJZmlsZS0+Zl9vcCA9ICZ2OWZzX2NhY2hlZF9maWxlX29wZXJhdGlvbnM7CisJfQorCiAJcmV0dXJuIDA7CiAKIENsdW5rX0ZpZDoKQEAgLTIzOCw2ICsyNDUsMTcgQEAKIAlyZXR1cm4gdG90YWw7CiB9CiAKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjlmc19jYWNoZWRfZmlsZV9vcGVyYXRpb25zID0geworCS5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAorCS5yZWFkID0gZG9fc3luY19yZWFkLAorCS5haW9fcmVhZCA9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKKwkud3JpdGUgPSB2OWZzX2ZpbGVfd3JpdGUsCisJLm9wZW4gPSB2OWZzX2ZpbGVfb3BlbiwKKwkucmVsZWFzZSA9IHY5ZnNfZGlyX3JlbGVhc2UsCisJLmxvY2sgPSB2OWZzX2ZpbGVfbG9jaywKKwkubW1hcCA9IGdlbmVyaWNfZmlsZV9tbWFwLAorfTsKKwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2OWZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZCA9IHY5ZnNfZmlsZV9yZWFkLApkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCA1Y2YyMjEzLi4xMjRhMDg1IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtNTA0LDcgKzUwNCwxMCBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWRlbnRyeS0+ZF9vcCA9ICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zOworCWlmKHY5c2VzLT5jYWNoZSkKKwkJZGVudHJ5LT5kX29wID0gJnY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zOworCWVsc2UKKwkJZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAogCWlmIChuZCAmJiBuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikgewpAQCAtNTg5LDcgKzU5MiwxMCBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWRlbnRyeS0+ZF9vcCA9ICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zOworCWlmKHY5c2VzLT5jYWNoZSkKKwkJZGVudHJ5LT5kX29wID0gJnY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zOworCWVsc2UKKwkJZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlyZXR1cm4gMDsKIApAQCAtNjI2LDcgKzYzMiw2IEBACiAKIAlzYiA9IGRpci0+aV9zYjsKIAl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGlyKTsKLQlkZW50cnktPmRfb3AgPSAmdjlmc19kZW50cnlfb3BlcmF0aW9uczsKIAlkaXJmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCk7CiAKIAlpZihJU19FUlIoZGlyZmlkKSkKQEAgLTY5Nyw2ICs3MDIsMTAgQEAKIAogCWZpZC0+cWlkID0gZmNhbGwtPnBhcmFtcy5yc3RhdC5zdGF0LnFpZDsKIAl2OWZzX3N0YXQyaW5vZGUoJmZjYWxsLT5wYXJhbXMucnN0YXQuc3RhdCwgaW5vZGUsIGlub2RlLT5pX3NiKTsKKwlpZigoZmlkLT5xaWQudmVyc2lvbikmJih2OXNlcy0+Y2FjaGUpKQorCQlkZW50cnktPmRfb3AgPSAmdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnM7CisJZWxzZQorCQlkZW50cnktPmRfb3AgPSAmdjlmc19kZW50cnlfb3BlcmF0aW9uczsKIAogCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCWtmcmVlKGZjYWxsKTsKQEAgLTExODQsNyArMTE5MywxMCBAQAogCQlnb3RvIGZyZWVfdmZpZDsKIAl9CiAKLQlkZW50cnktPmRfb3AgPSAmdjlmc19kZW50cnlfb3BlcmF0aW9uczsKKwlpZih2OXNlcy0+Y2FjaGUpCisJCWRlbnRyeS0+ZF9vcCA9ICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9uczsKKwllbHNlCisJCWRlbnRyeS0+ZF9vcCA9ICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGE3MjJiNWEuLjNjNDg4NmIgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMTE4OSwzMiArMTE4OSw2IEBACiAJICBUbyBjb21waWxlIHRoZSBFRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZWZzLgogCi1jb25maWcgSkZGU19GUwotCXRyaXN0YXRlICJKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSAoSkZGUykgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1URCAmJiBCTE9DSyAmJiBCUk9LRU4KLQloZWxwCi0JICBKRkZTIGlzIHRoZSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSBkZXZlbG9wZWQgYnkgQXhpcwotCSAgQ29tbXVuaWNhdGlvbnMgaW4gU3dlZGVuLCBhaW1lZCBhdCBwcm92aWRpbmcgYSBjcmFzaC9wb3dlcmRvd24tc2FmZQotCSAgZmlsZSBzeXN0ZW0gZm9yIGRpc2stbGVzcyBlbWJlZGRlZCBkZXZpY2VzLiBGdXJ0aGVyIGluZm9ybWF0aW9uIGlzCi0JICBhdmFpbGFibGUgYXQgKDxodHRwOi8vZGV2ZWxvcGVyLmF4aXMuY29tL3NvZnR3YXJlL2pmZnMvPikuCi0KLQkgIE5PVEU6IFRoaXMgZmlsZXN5c3RlbSBpcyBkZXByZWNhdGVkIGFuZCBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgaW4KLQkgIDIuNi4yMS4gIFNlZSBEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKLQotY29uZmlnIEpGRlNfRlNfVkVSQk9TRQotCWludCAiSkZGUyBkZWJ1Z2dpbmcgdmVyYm9zaXR5ICgwID0gcXVpZXQsIDMgPSBub2lzeSkiCi0JZGVwZW5kcyBvbiBKRkZTX0ZTCi0JZGVmYXVsdCAiMCIKLQloZWxwCi0JICBEZXRlcm1pbmVzIHRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIEpGRlMgZGVidWdnaW5nIG1lc3NhZ2VzLgotCi1jb25maWcgSkZGU19QUk9DX0ZTCi0JYm9vbCAiSkZGUyBzdGF0cyBhdmFpbGFibGUgaW4gL3Byb2MgZmlsZXN5c3RlbSIKLQlkZXBlbmRzIG9uIEpGRlNfRlMgJiYgUFJPQ19GUwotCWhlbHAKLQkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3RhdGlzdGljcyBmcm9tIG1vdW50ZWQgSkZGUyBmaWxlIHN5c3RlbXMKLQkgIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGluIHRoZSAvcHJvYy9mcy9qZmZzLyBkaXJlY3RvcnkuCi0KIGNvbmZpZyBKRkZTMl9GUwogCXRyaXN0YXRlICJKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSB2MiAoSkZGUzIpIHN1cHBvcnQiCiAJc2VsZWN0IENSQzMyCmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IGI5ZmZhNjNmLi45ZWRmNDExIDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQorKysgYi9mcy9NYWtlZmlsZQpAQCAtOTQsNyArOTQsNiBAQAogb2JqLSQoQ09ORklHX05URlNfRlMpCQkrPSBudGZzLwogb2JqLSQoQ09ORklHX1VGU19GUykJCSs9IHVmcy8KIG9iai0kKENPTkZJR19FRlNfRlMpCQkrPSBlZnMvCi1vYmotJChDT05GSUdfSkZGU19GUykJCSs9IGpmZnMvCiBvYmotJChDT05GSUdfSkZGUzJfRlMpCQkrPSBqZmZzMi8KIG9iai0kKENPTkZJR19BRkZTX0ZTKQkJKz0gYWZmcy8KIG9iai0kKENPTkZJR19ST01GU19GUykJCSs9IHJvbWZzLwpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaAppbmRleCA3ZGIyZDI4Li4yMzJjNjk0IDEwMDY0NAotLS0gYS9mcy9hZmZzL2FmZnMuaAorKysgYi9mcy9hZmZzL2FmZnMuaApAQCAtMTcxLDYgKzE3MSw3IEBACiBleHRlcm4gc3RydWN0IGlub2RlCQkqYWZmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIpOwogZXh0ZXJuIGludAkJCSBhZmZzX25vdGlmeV9jaGFuZ2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogZXh0ZXJuIHZvaWQJCQkgYWZmc19wdXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gdm9pZAkJCSBhZmZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gdm9pZAkJCSBhZmZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkCQkJIGFmZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gdm9pZAkJCSBhZmZzX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9hZmZzL2lub2RlLmMgYi9mcy9hZmZzL2lub2RlLmMKaW5kZXggZmNlNjg0OC4uYzViOWQ3M2MgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvaW5vZGUuYworKysgYi9mcy9hZmZzL2lub2RlLmMKQEAgLTI0MywxMiArMjQzLDE3IEBACiB7CiAJcHJfZGVidWcoIkFGRlM6IHB1dF9pbm9kZShpbm89JWx1LCBubGluaz0ldSlcbiIsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbmxpbmspOwogCWFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7Ci0JaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkgPT0gMSkgewotCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCWlmIChpbm9kZS0+aV9zaXplICE9IEFGRlNfSShpbm9kZSktPm1tdV9wcml2YXRlKQotCQkJYWZmc190cnVuY2F0ZShpbm9kZSk7Ci0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCX0KK30KKwordm9pZAorYWZmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCWlmIChpbm9kZS0+aV9zaXplICE9IEFGRlNfSShpbm9kZSktPm1tdV9wcml2YXRlKQorCQlhZmZzX3RydW5jYXRlKGlub2RlKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKworCWdlbmVyaWNfZHJvcF9pbm9kZShpbm9kZSk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvc3VwZXIuYyBiL2ZzL2FmZnMvc3VwZXIuYwppbmRleCBhMzI0MDQ1Li5jMzk4NmExIDEwMDY0NAotLS0gYS9mcy9hZmZzL3N1cGVyLmMKKysrIGIvZnMvYWZmcy9zdXBlci5jCkBAIC0xMTgsNiArMTE4LDcgQEAKIAkucmVhZF9pbm9kZQk9IGFmZnNfcmVhZF9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBhZmZzX3dyaXRlX2lub2RlLAogCS5wdXRfaW5vZGUJPSBhZmZzX3B1dF9pbm9kZSwKKwkuZHJvcF9pbm9kZQk9IGFmZnNfZHJvcF9pbm9kZSwKIAkuZGVsZXRlX2lub2RlCT0gYWZmc19kZWxldGVfaW5vZGUsCiAJLmNsZWFyX2lub2RlCT0gYWZmc19jbGVhcl9pbm9kZSwKIAkucHV0X3N1cGVyCT0gYWZmc19wdXRfc3VwZXIsCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2F1dG9mc19pLmggYi9mcy9hdXRvZnM0L2F1dG9mc19pLmgKaW5kZXggNmI0Y2VjMy4uZDg1ZjQyZiAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCisrKyBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaApAQCAtNTIsNiArNTIsOCBAQAogCiAJaW50CQlmbGFnczsKIAorCXN0cnVjdCBsaXN0X2hlYWQgcmVoYXNoOworCiAJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmk7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3VzZWQ7CiAJYXRvbWljX3QgY291bnQ7CkBAIC0xMTAsNiArMTEyLDggQEAKIAlzdHJ1Y3QgbXV0ZXggd3FfbXV0ZXg7CiAJc3BpbmxvY2tfdCBmc19sb2NrOwogCXN0cnVjdCBhdXRvZnNfd2FpdF9xdWV1ZSAqcXVldWVzOyAvKiBXYWl0IHF1ZXVlIHBvaW50ZXIgKi8KKwlzcGlubG9ja190IHJlaGFzaF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcmVoYXNoX2xpc3Q7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqYXV0b2ZzNF9zYmkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvaW5vZGUuYyBiL2ZzL2F1dG9mczQvaW5vZGUuYwppbmRleCA1ZTQ1OGUwLi4yNjA2M2RjIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2lub2RlLmMKKysrIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCkBAIC00OCw2ICs0OCw4IEBACiAJaW5vLT5kZW50cnkgPSBOVUxMOwogCWluby0+c2l6ZSA9IDA7CiAKKwlJTklUX0xJU1RfSEVBRCgmaW5vLT5yZWhhc2gpOworCiAJaW5vLT5sYXN0X3VzZWQgPSBqaWZmaWVzOwogCWF0b21pY19zZXQoJmluby0+Y291bnQsIDApOwogCkBAIC0xNTgsMTQgKzE2MCwxMyBAQAogCWlmICghc2JpKQogCQlnb3RvIG91dF9raWxsX3NiOwogCi0Jc2ItPnNfZnNfaW5mbyA9IE5VTEw7Ci0KLQlpZiAoICFzYmktPmNhdGF0b25pYyApCisJaWYgKCFzYmktPmNhdGF0b25pYykKIAkJYXV0b2ZzNF9jYXRhdG9uaWNfbW9kZShzYmkpOyAvKiBGcmVlIHdhaXQgcXVldWVzLCBjbG9zZSBwaXBlICovCiAKIAkvKiBDbGVhbiB1cCBhbmQgcmVsZWFzZSBkYW5nbGluZyByZWZlcmVuY2VzICovCiAJYXV0b2ZzNF9mb3JjZV9yZWxlYXNlKHNiaSk7CiAKKwlzYi0+c19mc19pbmZvID0gTlVMTDsKIAlrZnJlZShzYmkpOwogCiBvdXRfa2lsbF9zYjoKQEAgLTMzNiw2ICszMzcsOCBAQAogCW11dGV4X2luaXQoJnNiaS0+d3FfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZzYmktPmZzX2xvY2spOwogCXNiaS0+cXVldWVzID0gTlVMTDsKKwlzcGluX2xvY2tfaW5pdCgmc2JpLT5yZWhhc2hfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnNiaS0+cmVoYXNoX2xpc3QpOwogCXMtPnNfYmxvY2tzaXplID0gMTAyNDsKIAlzLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gMTA7CiAJcy0+c19tYWdpYyA9IEFVVE9GU19TVVBFUl9NQUdJQzsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggNDdmZWU5Ni4uYjQ2MzEwNCAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9yb290LmMKKysrIGIvZnMvYXV0b2ZzNC9yb290LmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogCQkgKi8KIAkJc3RhdHVzID0gZF9pbnZhbGlkYXRlKGRlbnRyeSk7CiAJCWlmIChzdGF0dXMgIT0gLUVCVVNZKQotCQkJcmV0dXJuIC1FTk9FTlQ7CisJCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKIAlEUFJJTlRLKCJkZW50cnk9JXAgJS4qcyBpbm89JXAiLApAQCAtNDEzLDcgKzQxMywxNiBAQAogCQkgKi8KIAkJc3RhdHVzID0gdHJ5X3RvX2ZpbGxfZGVudHJ5KGRlbnRyeSwgZmxhZ3MpOwogCQlpZiAoc3RhdHVzID09IDApCi0JCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gMTsKKworCQkvKgorCQkgKiBBIHN0YXR1cyBvZiBFQUdBSU4gaGVyZSBtZWFucyB0aGF0IHRoZSBkZW50cnkgaGFzIGdvbmUKKwkJICogYXdheSB3aGlsZSB3YWl0aW5nIGZvciBhbiBleHBpcmUgdG8gY29tcGxldGUuIElmIHdlIGFyZQorCQkgKiByYWNpbmcgd2l0aCBleHBpcmUgbG9va3VwIHdpbGwgd2FpdCBmb3IgaXQgc28gdGhpcyBtdXN0CisJCSAqIGJlIGEgcmV2YWxpZGF0ZSBhbmQgd2UgbmVlZCB0byBzZW5kIGl0IHRvIGxvb2t1cC4KKwkJICovCisJCWlmIChzdGF0dXMgPT0gLUVBR0FJTikKKwkJCXJldHVybiAwOwogCiAJCXJldHVybiBzdGF0dXM7CiAJfQpAQCAtNDU5LDkgKzQ2OCwxOCBAQAogCWRlLT5kX2ZzZGF0YSA9IE5VTEw7CiAKIAlpZiAoaW5mKSB7CisJCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpID0gYXV0b2ZzNF9zYmkoZGUtPmRfc2IpOworCiAJCWluZi0+ZGVudHJ5ID0gTlVMTDsKIAkJaW5mLT5pbm9kZSA9IE5VTEw7CiAKKwkJaWYgKHNiaSkgeworCQkJc3Bpbl9sb2NrKCZzYmktPnJlaGFzaF9sb2NrKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmaW5mLT5yZWhhc2gpKQorCQkJCWxpc3RfZGVsKCZpbmYtPnJlaGFzaCk7CisJCQlzcGluX3VubG9jaygmc2JpLT5yZWhhc2hfbG9jayk7CisJCX0KKwogCQlhdXRvZnM0X2ZyZWVfaW5vKGluZik7CiAJfQogfQpAQCAtNDc4LDEwICs0OTYsODAgQEAKIAkuZF9yZWxlYXNlCT0gYXV0b2ZzNF9kZW50cnlfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2xvb2t1cF91bmhhc2hlZChzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuID0gbmFtZS0+bGVuOworCXVuc2lnbmVkIGludCBoYXNoID0gbmFtZS0+aGFzaDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzdHIgPSBuYW1lLT5uYW1lOworCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpoZWFkOworCisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZzYmktPnJlaGFzaF9sb2NrKTsKKwloZWFkID0gJnNiaS0+cmVoYXNoX2xpc3Q7CisJbGlzdF9mb3JfZWFjaChwLCBoZWFkKSB7CisJCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vOworCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJCXN0cnVjdCBxc3RyICpxc3RyOworCisJCWlubyA9IGxpc3RfZW50cnkocCwgc3RydWN0IGF1dG9mc19pbmZvLCByZWhhc2gpOworCQlkZW50cnkgPSBpbm8tPmRlbnRyeTsKKworCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKworCQkvKiBCYWQgbHVjaywgd2UndmUgYWxyZWFkeSBiZWVuIGRlbnRyeV9pcHV0ICovCisJCWlmICghZGVudHJ5LT5kX2lub2RlKQorCQkJZ290byBuZXh0OworCisJCXFzdHIgPSAmZGVudHJ5LT5kX25hbWU7CisKKwkJaWYgKGRlbnRyeS0+ZF9uYW1lLmhhc2ggIT0gaGFzaCkKKwkJCWdvdG8gbmV4dDsKKwkJaWYgKGRlbnRyeS0+ZF9wYXJlbnQgIT0gcGFyZW50KQorCQkJZ290byBuZXh0OworCisJCWlmIChxc3RyLT5sZW4gIT0gbGVuKQorCQkJZ290byBuZXh0OworCQlpZiAobWVtY21wKHFzdHItPm5hbWUsIHN0ciwgbGVuKSkKKwkJCWdvdG8gbmV4dDsKKworCQlpZiAoZF91bmhhc2hlZChkZW50cnkpKSB7CisJCQlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOworCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKworCQkJbGlzdF9kZWxfaW5pdCgmaW5vLT5yZWhhc2gpOworCQkJZGdldChkZW50cnkpOworCQkJLyoKKwkJCSAqIE1ha2UgdGhlIHJlaGFzaGVkIGRlbnRyeSBuZWdhdGl2ZSBzbyB0aGUgVkZTCisJCQkgKiBiZWhhdmVzIGFzIGl0IHNob3VsZC4KKwkJCSAqLworCQkJaWYgKGlub2RlKSB7CisJCQkJZGVudHJ5LT5kX2lub2RlID0gTlVMTDsKKwkJCQlsaXN0X2RlbF9pbml0KCZkZW50cnktPmRfYWxpYXMpOworCQkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCQkJc3Bpbl91bmxvY2soJnNiaS0+cmVoYXNoX2xvY2spOworCQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQkJaXB1dChpbm9kZSk7CisJCQkJcmV0dXJuIGRlbnRyeTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCQlzcGluX3VubG9jaygmc2JpLT5yZWhhc2hfbG9jayk7CisJCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQkJcmV0dXJuIGRlbnRyeTsKKwkJfQorbmV4dDoKKwkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJnNiaS0+cmVoYXNoX2xvY2spOworCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisKKwlyZXR1cm4gTlVMTDsKK30KKwogLyogTG9va3VwcyBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgKi8KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaTsKKwlzdHJ1Y3QgZGVudHJ5ICp1bmhhc2hlZDsKIAlpbnQgb3pfbW9kZTsKIAogCURQUklOVEsoIm5hbWUgPSAlLipzIiwKQEAgLTQ5NywyNSArNTg1LDQ2IEBACiAJRFBSSU5USygicGlkID0gJXUsIHBncnAgPSAldSwgY2F0YXRvbmljID0gJWQsIG96X21vZGUgPSAlZCIsCiAJCSBjdXJyZW50LT5waWQsIHByb2Nlc3NfZ3JvdXAoY3VycmVudCksIHNiaS0+Y2F0YXRvbmljLCBvel9tb2RlKTsKIAotCS8qCi0JICogTWFyayB0aGUgZGVudHJ5IGluY29tcGxldGUsIGJ1dCBhZGQgaXQuIFRoaXMgaXMgbmVlZGVkIHNvCi0JICogdGhhdCB0aGUgVkZTIGxheWVyIGtub3dzIGFib3V0IHRoZSBkZW50cnksIGFuZCB3ZSBjYW4gY291bnQKLQkgKiBvbiBjYXRjaGluZyBhbnkgbG9va3VwcyB0aHJvdWdoIHRoZSByZXZhbGlkYXRlLgotCSAqCi0JICogTGV0IGFsbCB0aGUgaGFyZCB3b3JrIGJlIGRvbmUgYnkgdGhlIHJldmFsaWRhdGUgZnVuY3Rpb24gdGhhdAotCSAqIG5lZWRzIHRvIGJlIGFibGUgdG8gZG8gdGhpcyBhbnl3YXkuLgotCSAqCi0JICogV2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSB3ZSByZWxlYXNlIHRoZSBkaXJlY3Rvcnkgc2VtYXBob3JlLgotCSAqLwotCWRlbnRyeS0+ZF9vcCA9ICZhdXRvZnM0X3Jvb3RfZGVudHJ5X29wZXJhdGlvbnM7CisJdW5oYXNoZWQgPSBhdXRvZnM0X2xvb2t1cF91bmhhc2hlZChzYmksIGRlbnRyeS0+ZF9wYXJlbnQsICZkZW50cnktPmRfbmFtZSk7CisJaWYgKCF1bmhhc2hlZCkgeworCQkvKgorCQkgKiBNYXJrIHRoZSBkZW50cnkgaW5jb21wbGV0ZSwgYnV0IGFkZCBpdC4gVGhpcyBpcyBuZWVkZWQgc28KKwkJICogdGhhdCB0aGUgVkZTIGxheWVyIGtub3dzIGFib3V0IHRoZSBkZW50cnksIGFuZCB3ZSBjYW4gY291bnQKKwkJICogb24gY2F0Y2hpbmcgYW55IGxvb2t1cHMgdGhyb3VnaCB0aGUgcmV2YWxpZGF0ZS4KKwkJICoKKwkJICogTGV0IGFsbCB0aGUgaGFyZCB3b3JrIGJlIGRvbmUgYnkgdGhlIHJldmFsaWRhdGUgZnVuY3Rpb24gdGhhdAorCQkgKiBuZWVkcyB0byBiZSBhYmxlIHRvIGRvIHRoaXMgYW55d2F5Li4KKwkJICoKKwkJICogV2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSB3ZSByZWxlYXNlIHRoZSBkaXJlY3Rvcnkgc2VtYXBob3JlLgorCQkgKi8KKwkJZGVudHJ5LT5kX29wID0gJmF1dG9mczRfcm9vdF9kZW50cnlfb3BlcmF0aW9uczsKKworCQlkZW50cnktPmRfZnNkYXRhID0gTlVMTDsKKwkJZF9hZGQoZGVudHJ5LCBOVUxMKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyh1bmhhc2hlZCk7CisJCURQUklOVEsoInJlaGFzaCAlcCB3aXRoICVwIiwgZGVudHJ5LCB1bmhhc2hlZCk7CisJCS8qCisJCSAqIElmIHdlIGFyZSByYWNpbmcgd2l0aCBleHBpcmUgdGhlIHJlcXVlc3QgbWlnaHQgbm90CisJCSAqIGJlIHF1aXRlIGNvbXBsZXRlIGJ1dCB0aGUgZGlyZWN0b3J5IGhhcyBiZWVuIHJlbW92ZWQKKwkJICogc28gaXQgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bCwgc28ganVzdCB3YWl0IGZvciBpdC4KKwkJICovCisJCWlmIChpbm8gJiYgKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX0VYUElSSU5HKSkgeworCQkJRFBSSU5USygid2FpdCBmb3IgaW5jb21wbGV0ZSBleHBpcmUgJXAgbmFtZT0lLipzIiwKKwkJCQl1bmhhc2hlZCwgdW5oYXNoZWQtPmRfbmFtZS5sZW4sCisJCQkJdW5oYXNoZWQtPmRfbmFtZS5uYW1lKTsKKwkJCWF1dG9mczRfd2FpdChzYmksIHVuaGFzaGVkLCBORllfTk9ORSk7CisJCQlEUFJJTlRLKCJyZXF1ZXN0IGNvbXBsZXRlZCIpOworCQl9CisJCWRfcmVoYXNoKHVuaGFzaGVkKTsKKwkJZGVudHJ5ID0gdW5oYXNoZWQ7CisJfQogCiAJaWYgKCFvel9tb2RlKSB7CiAJCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX0FVVE9GU19QRU5ESU5HOwogCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCX0KLQlkZW50cnktPmRfZnNkYXRhID0gTlVMTDsKLQlkX2FkZChkZW50cnksIE5VTEwpOwogCiAJaWYgKGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZSkgewogCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CkBAIC01MzQsNiArNjQzLDggQEAKIAkJCWlmIChzaWdpc21lbWJlciAoc2lnc2V0LCBTSUdLSUxMKSB8fAogCQkJICAgIHNpZ2lzbWVtYmVyIChzaWdzZXQsIFNJR1FVSVQpIHx8CiAJCQkgICAgc2lnaXNtZW1iZXIgKHNpZ3NldCwgU0lHSU5UKSkgeworCQkJICAgIGlmICh1bmhhc2hlZCkKKwkJCQlkcHV0KHVuaGFzaGVkKTsKIAkJCSAgICByZXR1cm4gRVJSX1BUUigtRVJFU1RBUlROT0lOVFIpOwogCQkJfQogCQl9CkBAIC01NDQsMTIgKzY1NSwzMyBAQAogCiAJLyoKIAkgKiBJZiB0aGlzIGRlbnRyeSBpcyB1bmhhc2hlZCwgdGhlbiB3ZSBzaG91bGRuJ3QgaG9ub3VyIHRoaXMKLQkgKiBsb29rdXAgZXZlbiBpZiB0aGUgZGVudHJ5IGlzIHBvc2l0aXZlLiAgUmV0dXJuaW5nIEVOT0VOVCBoZXJlCi0JICogZG9lc24ndCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIGFsbCBzeXN0ZW0gY2FsbHMsIGJ1dCBpdCBzaG91bGQKLQkgKiBiZSBPSyBmb3IgdGhlIG9wZXJhdGlvbnMgd2UgcGVybWl0IGZyb20gYW4gYXV0b2ZzLgorCSAqIGxvb2t1cC4gIFJldHVybmluZyBFTk9FTlQgaGVyZSBkb2Vzbid0IGRvIHRoZSByaWdodCB0aGluZworCSAqIGZvciBhbGwgc3lzdGVtIGNhbGxzLCBidXQgaXQgc2hvdWxkIGJlIE9LIGZvciB0aGUgb3BlcmF0aW9ucworCSAqIHdlIHBlcm1pdCBmcm9tIGFuIGF1dG9mcy4KIAkgKi8KLQlpZiAoZGVudHJ5LT5kX2lub2RlICYmIGRfdW5oYXNoZWQoZGVudHJ5KSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisJaWYgKGRlbnRyeS0+ZF9pbm9kZSAmJiBkX3VuaGFzaGVkKGRlbnRyeSkpIHsKKwkJLyoKKwkJICogQSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uIGNhbiAoYW5kIGhhcyBkb25lIGluIHRoZSBwYXN0KQorCQkgKiByZW1vdmUgYW5kIHJlLWNyZWF0ZSB0aGlzIGRpcmVjdG9yeSBkdXJpbmcgdGhlIGNhbGxiYWNrLgorCQkgKiBUaGlzIGNhbiBsZWF2ZSB1cyB3aXRoIGFuIHVuaGFzaGVkIGRlbnRyeSwgYnV0IGEKKwkJICogc3VjY2Vzc2Z1bCBtb3VudCEgIFNvIHdlIG5lZWQgdG8gcGVyZm9ybSBhbm90aGVyCisJCSAqIGNhY2hlZCBsb29rdXAgaW4gY2FzZSB0aGUgZGVudHJ5IG5vdyBleGlzdHMuCisJCSAqLworCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OworCQlzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBkX2xvb2t1cChwYXJlbnQsICZkZW50cnktPmRfbmFtZSk7CisJCWlmIChuZXcgIT0gTlVMTCkKKwkJCWRlbnRyeSA9IG5ldzsKKwkJZWxzZQorCQkJZGVudHJ5ID0gRVJSX1BUUigtRU5PRU5UKTsKKworCQlpZiAodW5oYXNoZWQpCisJCQlkcHV0KHVuaGFzaGVkKTsKKworCQlyZXR1cm4gZGVudHJ5OworCX0KKworCWlmICh1bmhhc2hlZCkKKwkJcmV0dXJuIGRlbnRyeTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtNjExLDkgKzc0MywxMCBAQAogICogTm9ybWFsIGZpbGVzeXN0ZW1zIHdvdWxkIGRvIGEgImRfZGVsZXRlKCkiIHRvIHRlbGwgdGhlIFZGUyBkY2FjaGUKICAqIHRoYXQgdGhlIGZpbGUgbm8gbG9uZ2VyIGV4aXN0cy4gSG93ZXZlciwgZG9pbmcgdGhhdCBtZWFucyB0aGF0IHRoZQogICogVkZTIGxheWVyIGNhbiB0dXJuIHRoZSBkZW50cnkgaW50byBhIG5lZ2F0aXZlIGRlbnRyeS4gIFdlIGRvbid0IHdhbnQKLSAqIHRoaXMsIGJlY2F1c2Ugc2luY2UgdGhlIHVubGluayBpcyBwcm9iYWJseSB0aGUgcmVzdWx0IG9mIGFuIGV4cGlyZS4KLSAqIFdlIHNpbXBseSBkX2Ryb3AgaXQsIHdoaWNoIGFsbG93cyB0aGUgZGVudHJ5IGxvb2t1cCB0byByZW1vdW50IGl0Ci0gKiBpZiBuZWNlc3NhcnkuCisgKiB0aGlzLCBiZWNhdXNlIHRoZSB1bmxpbmsgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBvZiBhbiBleHBpcmUuCisgKiBXZSBzaW1wbHkgZF9kcm9wIGl0IGFuZCBhZGQgaXQgdG8gYSByZWhhc2ggY2FuZGlkYXRlcyBsaXN0IGluIHRoZQorICogc3VwZXIgYmxvY2ssIHdoaWNoIGFsbG93cyB0aGUgZGVudHJ5IGxvb2t1cCB0byByZXVzZSBpdCByZXRhaW5pbmcKKyAqIHRoZSBmbGFncywgc3VjaCBhcyBleHBpcmUgaW4gcHJvZ3Jlc3MsIGluIGNhc2Ugd2UncmUgcmFjaW5nIHdpdGggZXhwaXJlLgogICoKICAqIElmIGEgcHJvY2VzcyBpcyBibG9ja2VkIG9uIHRoZSBkZW50cnkgd2FpdGluZyBmb3IgdGhlIGV4cGlyZSB0byBmaW5pc2gsCiAgKiBpdCB3aWxsIGludmFsaWRhdGUgdGhlIGRlbnRyeSBhbmQgdHJ5IHRvIG1vdW50IHdpdGggYSBuZXcgb25lLgpAQCAtNjQyLDcgKzc3NSwxNCBAQAogCiAJZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOwogCi0JZF9kcm9wKGRlbnRyeSk7CisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZzYmktPnJlaGFzaF9sb2NrKTsKKwlsaXN0X2FkZCgmaW5vLT5yZWhhc2gsICZzYmktPnJlaGFzaF9saXN0KTsKKwlzcGluX3VubG9jaygmc2JpLT5yZWhhc2hfbG9jayk7CisJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CisJX19kX2Ryb3AoZGVudHJ5KTsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1Myw2ICs3OTMsOSBAQAogCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CiAJc3RydWN0IGF1dG9mc19pbmZvICpwX2lubzsKIAkKKwlEUFJJTlRLKCJkZW50cnkgJXAsIHJlbW92aW5nICUuKnMiLAorCQlkZW50cnksIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisKIAlpZiAoIWF1dG9mczRfb3pfbW9kZShzYmkpKQogCQlyZXR1cm4gLUVBQ0NFUzsKIApAQCAtNjYxLDYgKzgwNCw5IEBACiAJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJCXJldHVybiAtRU5PVEVNUFRZOwogCX0KKwlzcGluX2xvY2soJnNiaS0+cmVoYXNoX2xvY2spOworCWxpc3RfYWRkKCZpbm8tPnJlaGFzaCwgJnNiaS0+cmVoYXNoX2xpc3QpOworCXNwaW5fdW5sb2NrKCZzYmktPnJlaGFzaF9sb2NrKTsKIAlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAlfX2RfZHJvcChkZW50cnkpOwogCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3dhaXRxLmMgYi9mcy9hdXRvZnM0L3dhaXRxLmMKaW5kZXggMWU0YTUzOS4uMGQwNDFhOSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC93YWl0cS5jCisrKyBiL2ZzL2F1dG9mczQvd2FpdHEuYwpAQCAtODQsNyArODQsMTEgQEAKIAkJCQkgc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlICp3cSwKIAkJCQkgaW50IHR5cGUpCiB7Ci0JdW5pb24gYXV0b2ZzX3BhY2tldF91bmlvbiBwa3Q7CisJdW5pb24geworCQlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9oZHIgaGRyOworCQl1bmlvbiBhdXRvZnNfcGFja2V0X3VuaW9uIHY0X3BrdDsKKwkJdW5pb24gYXV0b2ZzX3Y1X3BhY2tldF91bmlvbiB2NV9wa3Q7CisJfSBwa3Q7CiAJc2l6ZV90IHBrdHN6OwogCiAJRFBSSU5USygid2FpdCBpZCA9IDB4JTA4bHgsIG5hbWUgPSAlLipzLCB0eXBlPSVkIiwKQEAgLTk4LDcgKzEwMiw3IEBACiAJLyogS2VybmVsIHByb3RvY29sIHY0IG1pc3NpbmcgYW5kIGV4cGlyZSBwYWNrZXRzICovCiAJY2FzZSBhdXRvZnNfcHR5cGVfbWlzc2luZzoKIAl7Ci0JCXN0cnVjdCBhdXRvZnNfcGFja2V0X21pc3NpbmcgKm1wID0gJnBrdC5taXNzaW5nOworCQlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9taXNzaW5nICptcCA9ICZwa3QudjRfcGt0Lm1pc3Npbmc7CiAKIAkJcGt0c3ogPSBzaXplb2YoKm1wKTsKIApAQCAtMTEwLDcgKzExNCw3IEBACiAJfQogCWNhc2UgYXV0b2ZzX3B0eXBlX2V4cGlyZV9tdWx0aToKIAl7Ci0JCXN0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZV9tdWx0aSAqZXAgPSAmcGt0LmV4cGlyZV9tdWx0aTsKKwkJc3RydWN0IGF1dG9mc19wYWNrZXRfZXhwaXJlX211bHRpICplcCA9ICZwa3QudjRfcGt0LmV4cGlyZV9tdWx0aTsKIAogCQlwa3RzeiA9IHNpemVvZigqZXApOwogCkBAIC0xMjksNyArMTMzLDcgQEAKIAljYXNlIGF1dG9mc19wdHlwZV9taXNzaW5nX2RpcmVjdDoKIAljYXNlIGF1dG9mc19wdHlwZV9leHBpcmVfZGlyZWN0OgogCXsKLQkJc3RydWN0IGF1dG9mc192NV9wYWNrZXQgKnBhY2tldCA9ICZwa3QudjVfcGFja2V0OworCQlzdHJ1Y3QgYXV0b2ZzX3Y1X3BhY2tldCAqcGFja2V0ID0gJnBrdC52NV9wa3QudjVfcGFja2V0OwogCiAJCXBrdHN6ID0gc2l6ZW9mKCpwYWNrZXQpOwogCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggNjY5ZGJlNS4uNTFkYjExOCAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtNzYsNyArNzYsOCBAQAogCQkubG9hZF9iaW5hcnkJPSBsb2FkX2VsZl9iaW5hcnksCiAJCS5sb2FkX3NobGliCT0gbG9hZF9lbGZfbGlicmFyeSwKIAkJLmNvcmVfZHVtcAk9IGVsZl9jb3JlX2R1bXAsCi0JCS5taW5fY29yZWR1bXAJPSBFTEZfRVhFQ19QQUdFU0laRQorCQkubWluX2NvcmVkdW1wCT0gRUxGX0VYRUNfUEFHRVNJWkUsCisJCS5oYXN2ZHNvCT0gMQogfTsKIAogI2RlZmluZSBCQURfQUREUih4KSAoKHVuc2lnbmVkIGxvbmcpKHgpID49IFRBU0tfU0laRSkKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggMGM1OWI3MC4uNTc1MDc2YyAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTExMDEsNiArMTEwMSwxMyBAQAogCQkJaW50IGZvcl9wYXJ0KTsKIHN0YXRpYyBpbnQgX19ibGtkZXZfcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBmb3JfcGFydCk7CiAKKy8qCisgKiBiZF9tdXRleCBsb2NraW5nOgorICoKKyAqICBtdXRleF9sb2NrKHBhcnQtPmJkX211dGV4KQorICogICAgbXV0ZXhfbG9ja19uZXN0ZWQod2hvbGUtPmJkX211dGV4LCAxKQorICovCisKIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGZvcl9wYXJ0KQogewogCXN0cnVjdCBtb2R1bGUgKm93bmVyID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggZjk5YzUwOS4uZTg1MDRiNiAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTE3NDMsNyArMTc0Myw2IEBACiAJU2V0UGFnZUVycm9yKHBhZ2UpOwogCUJVR19PTihQYWdlV3JpdGViYWNrKHBhZ2UpKTsKIAlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7Ci0JdW5sb2NrX3BhZ2UocGFnZSk7CiAJZG8gewogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5leHQgPSBiaC0+Yl90aGlzX3BhZ2U7CiAJCWlmIChidWZmZXJfYXN5bmNfd3JpdGUoYmgpKSB7CkBAIC0xNzUzLDYgKzE3NTIsNyBAQAogCQl9CiAJCWJoID0gbmV4dDsKIAl9IHdoaWxlIChiaCAhPSBoZWFkKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKIAlnb3RvIGRvbmU7CiB9CiAKQEAgLTIyNDgsNyArMjI0OCw2IEBACiAJaW50IGk7CiAJaW50IHJldCA9IDA7CiAJaW50IGlzX21hcHBlZF90b19kaXNrID0gMTsKLQlpbnQgZGlydGllZF9pdCA9IDA7CiAKIAlpZiAoUGFnZU1hcHBlZFRvRGlzayhwYWdlKSkKIAkJcmV0dXJuIDA7CkBAIC0yMjg1LDE0ICsyMjg0LDEwIEBACiAJCQljb250aW51ZTsKIAkJaWYgKGJ1ZmZlcl9uZXcoJm1hcF9iaCkgfHwgIWJ1ZmZlcl9tYXBwZWQoJm1hcF9iaCkpIHsKIAkJCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCQkJaWYgKGJsb2NrX3N0YXJ0IDwgZnJvbSkgeworCQkJaWYgKGJsb2NrX3N0YXJ0IDwgZnJvbSkKIAkJCQltZW1zZXQoa2FkZHIrYmxvY2tfc3RhcnQsIDAsIGZyb20tYmxvY2tfc3RhcnQpOwotCQkJCWRpcnRpZWRfaXQgPSAxOwotCQkJfQotCQkJaWYgKGJsb2NrX2VuZCA+IHRvKSB7CisJCQlpZiAoYmxvY2tfZW5kID4gdG8pCiAJCQkJbWVtc2V0KGthZGRyICsgdG8sIDAsIGJsb2NrX2VuZCAtIHRvKTsKLQkJCQlkaXJ0aWVkX2l0ID0gMTsKLQkJCX0KIAkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCQkJY29udGludWU7CkBAIC0yMzQ3LDE3ICsyMzQyLDYgQEAKIAogCWlmIChpc19tYXBwZWRfdG9fZGlzaykKIAkJU2V0UGFnZU1hcHBlZFRvRGlzayhwYWdlKTsKLQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0KLQkvKgotCSAqIFNldHRpbmcgdGhlIHBhZ2UgZGlydHkgaGVyZSBpc24ndCBuZWNlc3NhcnkgZm9yIHRoZSBwcmVwYXJlX3dyaXRlCi0JICogZnVuY3Rpb24gLSBjb21taXRfd3JpdGUgd2lsbCBkbyB0aGF0LiAgQnV0IGlmL3doZW4gdGhpcyBmdW5jdGlvbiBpcwotCSAqIHVzZWQgd2l0aGluIHRoZSBwYWdlZmF1bHQgaGFuZGxlciB0byBlbnN1cmUgdGhhdCBhbGwgbW1hcHBlZCBwYWdlcwotCSAqIGhhdmUgYmFja2luZyBzcGFjZSBpbiB0aGUgZmlsZXN5c3RlbSwgd2Ugd2lsbCBuZWVkIHRvIGRpcnR5IHRoZSBwYWdlCi0JICogaWYgaXRzIGNvbnRlbnRzIHdlcmUgYWx0ZXJlZC4KLQkgKi8KLQlpZiAoZGlydGllZF9pdCkKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjM4Nyw2ICsyMzcxLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlsb2ZmX3QgcG9zID0gKChsb2ZmX3QpcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkgKyB0bzsKIAorCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlpZiAocG9zID4gaW5vZGUtPmlfc2l6ZSkgewogCQlpX3NpemVfd3JpdGUoaW5vZGUsIHBvcyk7CmRpZmYgLS1naXQgYS9mcy9jaGFyX2Rldi5jIGIvZnMvY2hhcl9kZXYuYwppbmRleCBlNjE5NGUyLi43OGNlZDcyIDEwMDY0NAotLS0gYS9mcy9jaGFyX2Rldi5jCisrKyBiL2ZzL2NoYXJfZGV2LmMKQEAgLTYsNiArNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKQEAgLTEwOCwxMiArMTA5LDcgQEAKIAkvKiB0ZW1wb3JhcnkgKi8KIAlpZiAobWFqb3IgPT0gMCkgewogCQlmb3IgKGkgPSBBUlJBWV9TSVpFKGNocmRldnMpLTE7IGkgPiAwOyBpLS0pIHsKLQkJCS8qCi0JCQkgKiBEaXNhbGxvdyB0aGUgTEFOQU5BLWFzc2lnbmVkIExPQ0FML0VYUEVSSU1FTlRBTAotCQkJICogbWFqb3JzCi0JCQkgKi8KLQkJCWlmICgoNjAgPD0gaSAmJiBpIDw9IDYzKSB8fCAoMTIwIDw9IGkgJiYgaSA8PSAxMjcpIHx8Ci0JCQkJCSgyNDAgPD0gaSAmJiBpIDw9IDI1NCkpCisJCQlpZiAoaXNfbGFuYW5hX21ham9yKGkpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKGNocmRldnNbaV0gPT0gTlVMTCkKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggNDMyZTUxNS4uMDgwYzVlYiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9SRUFETUUKKysrIGIvZnMvY2lmcy9SRUFETUUKQEAgLTEsNSArMSw1IEBACiBUaGUgQ0lGUyBWRlMgc3VwcG9ydCBmb3IgTGludXggc3VwcG9ydHMgbWFueSBhZHZhbmNlZCBuZXR3b3JrIGZpbGVzeXN0ZW0gCi1mZWF0dXJlcyBzdWNoIGFzIGhlaXJhcmNoaWNhbCBkZnMgbGlrZSBuYW1lc3BhY2UsIGhhcmRsaW5rcywgbG9ja2luZyBhbmQgbW9yZS4gIAorZmVhdHVyZXMgc3VjaCBhcyBoaWVyYXJjaGljYWwgZGZzIGxpa2UgbmFtZXNwYWNlLCBoYXJkbGlua3MsIGxvY2tpbmcgYW5kIG1vcmUuICAKIEl0IHdhcyBkZXNpZ25lZCB0byBjb21wbHkgd2l0aCB0aGUgU05JQSBDSUZTIFRlY2huaWNhbCBSZWZlcmVuY2UgKHdoaWNoIAogc3VwZXJzZWRlcyB0aGUgMTk5MiBYL09wZW4gU01CIFN0YW5kYXJkKSBhcyB3ZWxsIGFzIHRvIHBlcmZvcm0gYmVzdCBwcmFjdGljZSAKIHByYWN0aWNhbCBpbnRlcm9wZXJhYmlsaXR5IHdpdGggV2luZG93cyAyMDAwLCBXaW5kb3dzIFhQLCBTYW1iYSBhbmQgZXF1aXZhbGVudCAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggYjhlOTE0Ny4uMjQzNjQxMCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTI4MjQsMTAgKzI4MjQsMTAgQEAKIAogCiAvKiBzZWN1cml0eSBpZCBmb3IgZXZlcnlvbmUgKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgY2lmc19zaWQgc2lkX2V2ZXJ5b25lID0gCitzdGF0aWMgY29uc3Qgc3RydWN0IGNpZnNfc2lkIHNpZF9ldmVyeW9uZSA9CiAJCXsxLCAxLCB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX07CiAvKiBncm91cCB1c2VycyAqLwotY29uc3Qgc3RhdGljIHN0cnVjdCBjaWZzX3NpZCBzaWRfdXNlciA9IAorc3RhdGljIGNvbnN0IHN0cnVjdCBjaWZzX3NpZCBzaWRfdXNlciA9CiAJCXsxLCAyICwgezAsIDAsIDAsIDAsIDAsIDV9LCB7MzIsIDU0NSwgMCwgMH19OwogCiAvKiBDb252ZXJ0IENJRlMgQUNMIHRvIFBPU0lYIGZvcm0gKi8KZGlmZiAtLWdpdCBhL2ZzL2RlYnVnZnMvZmlsZS5jIGIvZnMvZGVidWdmcy9maWxlLmMKaW5kZXggOGQxMzBjYy4uNjgyZjkyOCAxMDA2NDQKLS0tIGEvZnMvZGVidWdmcy9maWxlLmMKKysrIGIvZnMvZGVidWdmcy9maWxlLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KIAogc3RhdGljIHNzaXplX3QgZGVmYXVsdF9yZWFkX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCkBAIC00NCw2ICs0NSwxNyBAQAogCS5vcGVuID0JCWRlZmF1bHRfb3BlbiwKIH07CiAKK3N0YXRpYyB2b2lkICpkZWJ1Z2ZzX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJbmRfc2V0X2xpbmsobmQsIGRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGVidWdmc19saW5rX29wZXJhdGlvbnMgPSB7CisJLnJlYWRsaW5rICAgICAgID0gZ2VuZXJpY19yZWFkbGluaywKKwkuZm9sbG93X2xpbmsgICAgPSBkZWJ1Z2ZzX2ZvbGxvd19saW5rLAorfTsKKwogc3RhdGljIHZvaWQgZGVidWdmc191OF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKIHsKIAkqKHU4ICopZGF0YSA9IHZhbDsKZGlmZiAtLWdpdCBhL2ZzL2RlYnVnZnMvaW5vZGUuYyBiL2ZzL2RlYnVnZnMvaW5vZGUuYwppbmRleCBjNjkyNDg3Li43YjMyNGNmIDEwMDY0NAotLS0gYS9mcy9kZWJ1Z2ZzL2lub2RlLmMKKysrIGIvZnMvZGVidWdmcy9pbm9kZS5jCkBAIC0yNSwxMSArMjUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiAjZGVmaW5lIERFQlVHRlNfTUFHSUMJMHg2NDYyNjcyMAogCiAvKiBkZWNsYXJlZCBvdmVyIGluIGZpbGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGVidWdmc19saW5rX29wZXJhdGlvbnM7CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmRlYnVnZnNfbW91bnQ7CiBzdGF0aWMgaW50IGRlYnVnZnNfbW91bnRfY291bnQ7CkBAIC01MSw2ICs1Myw5IEBACiAJCWNhc2UgU19JRlJFRzoKIAkJCWlub2RlLT5pX2ZvcCA9ICZkZWJ1Z2ZzX2ZpbGVfb3BlcmF0aW9uczsKIAkJCWJyZWFrOworCQljYXNlIFNfSUZMTks6CisJCQlpbm9kZS0+aV9vcCA9ICZkZWJ1Z2ZzX2xpbmtfb3BlcmF0aW9uczsKKwkJCWJyZWFrOwogCQljYXNlIFNfSUZESVI6CiAJCQlpbm9kZS0+aV9vcCA9ICZzaW1wbGVfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwpAQCAtOTYsNiArMTAxLDEyIEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIGludCBkZWJ1Z2ZzX2xpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCit7CisJbW9kZSA9IChtb2RlICYgU19JQUxMVUdPKSB8IFNfSUZMTks7CisJcmV0dXJuIGRlYnVnZnNfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOworfQorCiBzdGF0aWMgaW50IGRlYnVnZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQogewogCWludCByZXM7CkBAIC0xNTgsMTAgKzE2OSwxNyBAQAogCW11dGV4X2xvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJKmRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHBhcmVudCwgc3RybGVuKG5hbWUpKTsKIAlpZiAoIUlTX0VSUigqZGVudHJ5KSkgewotCQlpZiAoKG1vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpCisJCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgeworCQljYXNlIFNfSUZESVI6CiAJCQllcnJvciA9IGRlYnVnZnNfbWtkaXIocGFyZW50LT5kX2lub2RlLCAqZGVudHJ5LCBtb2RlKTsKLQkJZWxzZSAKKwkJCWJyZWFrOworCQljYXNlIFNfSUZMTks6CisJCQllcnJvciA9IGRlYnVnZnNfbGluayhwYXJlbnQtPmRfaW5vZGUsICpkZW50cnksIG1vZGUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CiAJCQllcnJvciA9IGRlYnVnZnNfY3JlYXRlKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CisJCQlicmVhazsKKwkJfQogCQlkcHV0KCpkZW50cnkpOwogCX0gZWxzZQogCQllcnJvciA9IFBUUl9FUlIoKmRlbnRyeSk7CkBAIC0xOTQsOSArMjEyLDcgQEAKICAqIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZS4pICBJZiBhbiBlcnJvciBvY2N1cnMsICVOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCiAgKgogICogSWYgZGVidWdmcyBpcyBub3QgZW5hYmxlZCBpbiB0aGUga2VybmVsLCB0aGUgdmFsdWUgLSVFTk9ERVYgd2lsbCBiZQotICogcmV0dXJuZWQuICBJdCBpcyBub3Qgd2lzZSB0byBjaGVjayBmb3IgdGhpcyB2YWx1ZSwgYnV0IHJhdGhlciwgY2hlY2sgZm9yCi0gKiAlTlVMTCBvciAhJU5VTEwgaW5zdGVhZCBhcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yICNpZmRlZiBpbiB0aGUgY2FsbGluZwotICogY29kZS4KKyAqIHJldHVybmVkLgogICovCiBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAogCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwKQEAgLTI0Niw5ICsyNjIsNyBAQAogICogeW91IGFyZSByZXNwb25zaWJsZSBoZXJlLikgIElmIGFuIGVycm9yIG9jY3VycywgJU5VTEwgd2lsbCBiZSByZXR1cm5lZC4KICAqCiAgKiBJZiBkZWJ1Z2ZzIGlzIG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWwsIHRoZSB2YWx1ZSAtJUVOT0RFViB3aWxsIGJlCi0gKiByZXR1cm5lZC4gIEl0IGlzIG5vdCB3aXNlIHRvIGNoZWNrIGZvciB0aGlzIHZhbHVlLCBidXQgcmF0aGVyLCBjaGVjayBmb3IKLSAqICVOVUxMIG9yICElTlVMTCBpbnN0ZWFkIGFzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3IgI2lmZGVmIGluIHRoZSBjYWxsaW5nCi0gKiBjb2RlLgorICogcmV0dXJuZWQuCiAgKi8KIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfY3JlYXRlX2Rpcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQpCiB7CkBAIC0yNTksNiArMjczLDQ3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChkZWJ1Z2ZzX2NyZWF0ZV9kaXIpOwogCiAvKioKKyAqIGRlYnVnZnNfY3JlYXRlX3N5bWxpbmstIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgaW4gdGhlIGRlYnVnZnMgZmlsZXN5c3RlbQorICogQG5hbWU6IGEgcG9pbnRlciB0byBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBzeW1ib2xpYyBsaW5rIHRvCisgKiAgICAgICAgY3JlYXRlLgorICogQHBhcmVudDogYSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgZGVudHJ5IGZvciB0aGlzIHN5bWJvbGljIGxpbmsuICBUaGlzCisgKiAgICAgICAgICBzaG91bGQgYmUgYSBkaXJlY3RvcnkgZGVudHJ5IGlmIHNldC4gIElmIHRoaXMgcGFyYW1hdGVyIGlzIE5VTEwsCisgKiAgICAgICAgICB0aGVuIHRoZSBzeW1ib2xpYyBsaW5rIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgZGVidWdmcworICogICAgICAgICAgZmlsZXN5c3RlbS4KKyAqIEB0YXJnZXQ6IGEgcG9pbnRlciB0byBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSB0YXJnZXQgb2YgdGhlCisgKiAgICAgICAgICBzeW1ib2xpYyBsaW5rLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiBkZWJ1Z2ZzIHRoYXQKKyAqIGxpbmtzIHRvIHRoZSBnaXZlbiB0YXJnZXQgcGF0aC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgcG9pbnRlciB0byBhIGRlbnRyeSBpZiBpdCBzdWNjZWVkcy4gIFRoaXMKKyAqIHBvaW50ZXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGRlYnVnZnNfcmVtb3ZlKCkgZnVuY3Rpb24gd2hlbiB0aGUgc3ltYm9saWMKKyAqIGxpbmsgaXMgdG8gYmUgcmVtb3ZlZCAobm8gYXV0b21hdGljIGNsZWFudXAgaGFwcGVucyBpZiB5b3VyIG1vZHVsZSBpcworICogdW5sb2FkZWQsIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZS4pICBJZiBhbiBlcnJvciBvY2N1cnMsICVOVUxMIHdpbGwgYmUKKyAqIHJldHVybmVkLgorICoKKyAqIElmIGRlYnVnZnMgaXMgbm90IGVuYWJsZWQgaW4gdGhlIGtlcm5lbCwgdGhlIHZhbHVlIC0lRU5PREVWIHdpbGwgYmUKKyAqIHJldHVybmVkLgorICovCitzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV9zeW1saW5rKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkgICAgICBjb25zdCBjaGFyICp0YXJnZXQpCit7CisJc3RydWN0IGRlbnRyeSAqcmVzdWx0OworCWNoYXIgKmxpbms7CisKKwlsaW5rID0ga3N0cmR1cCh0YXJnZXQsIEdGUF9LRVJORUwpOworCWlmICghbGluaykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXN1bHQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSUZMTksgfCBTX0lSV1hVR08sIHBhcmVudCwgbGluaywKKwkJCQkgICAgIE5VTEwpOworCWlmICghcmVzdWx0KQorCQlrZnJlZShsaW5rKTsKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdmc19jcmVhdGVfc3ltbGluayk7CisKKy8qKgogICogZGVidWdmc19yZW1vdmUgLSByZW1vdmVzIGEgZmlsZSBvciBkaXJlY3RvcnkgZnJvbSB0aGUgZGVidWdmcyBmaWxlc3lzdGVtCiAgKiBAZGVudHJ5OiBhIHBvaW50ZXIgdG8gYSB0aGUgZGVudHJ5IG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB0byBiZQogICogICAgICAgICAgcmVtb3ZlZC4KQEAgLTI4NywxNSArMzQyLDIyIEBACiAJaWYgKGRlYnVnZnNfcG9zaXRpdmUoZGVudHJ5KSkgewogCQlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CiAJCQlkZ2V0KGRlbnRyeSk7Ci0JCQlpZiAoU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJCXN3aXRjaCAoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUgJiBTX0lGTVQpIHsKKwkJCWNhc2UgU19JRkRJUjoKIAkJCQlyZXQgPSBzaW1wbGVfcm1kaXIocGFyZW50LT5kX2lub2RlLCBkZW50cnkpOwogCQkJCWlmIChyZXQpCiAJCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCQkJIkRlYnVnRlMgcm1kaXIgb24gJXMgZmFpbGVkIDogIgogCQkJCQkJImRpcmVjdG9yeSBub3QgZW1wdHkuXG4iLAogCQkJCQkJZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJCWNhc2UgU19JRkxOSzoKKwkJCQlrZnJlZShkZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZSk7CisJCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQlkZWZhdWx0OgogCQkJCXNpbXBsZV91bmxpbmsocGFyZW50LT5kX2lub2RlLCBkZW50cnkpOworCQkJCWJyZWFrOworCQkJfQogCQkJaWYgKCFyZXQpCiAJCQkJZF9kZWxldGUoZGVudHJ5KTsKIAkJCWRwdXQoZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKaW5kZXggYjM2MDliNy4uNDAzZTNiYSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKKysrIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICplY3J5cHRmc19oZWFkZXJfY2FjaGVfMjsKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZWNyeXB0ZnNfeGF0dHJfY2FjaGU7CiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmVjcnlwdGZzX2xvd2VyX3BhZ2VfY2FjaGU7CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmVjcnlwdGZzX2tleV9yZWNvcmRfY2FjaGU7CiAKIGludCBlY3J5cHRmc19pbnRlcnBvc2Uoc3RydWN0IGRlbnRyeSAqaGlkZGVuX2RlbnRyeSwKIAkJICAgICAgIHN0cnVjdCBkZW50cnkgKnRoaXNfZGVudHJ5LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYyBiL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKaW5kZXggODExNTZlOS4uYjU1MGRlYSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYworKysgYi9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCkBAIC0xNjM4LDYgKzE2MzgsOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RydWN0IGttZW1fY2FjaGUgKmVjcnlwdGZzX2tleV9yZWNvcmRfY2FjaGU7CisKIC8qKgogICogZWNyeXB0ZnNfZ2VuZXJhdGVfa2V5X3BhY2tldF9zZXQKICAqIEBkZXN0OiBWaXJ0dWFsIGFkZHJlc3MgZnJvbSB3aGljaCB0byB3cml0ZSB0aGUga2V5IHJlY29yZCBzZXQKQEAgLTE2NjQsNTAgKzE2NjYsNTUgQEAKIAkJJmVjcnlwdGZzX3N1cGVyYmxvY2tfdG9fcHJpdmF0ZSgKIAkJCWVjcnlwdGZzX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CiAJc2l6ZV90IHdyaXR0ZW47Ci0Jc3RydWN0IGVjcnlwdGZzX2tleV9yZWNvcmQga2V5X3JlYzsKKwlzdHJ1Y3QgZWNyeXB0ZnNfa2V5X3JlY29yZCAqa2V5X3JlYzsKIAlpbnQgcmMgPSAwOwogCiAJKCpsZW4pID0gMDsKKwlrZXlfcmVjID0ga21lbV9jYWNoZV9hbGxvYyhlY3J5cHRmc19rZXlfcmVjb3JkX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtleV9yZWMpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAJaWYgKG1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3RvaykgewogCQlhdXRoX3RvayA9IG1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3RvazsKIAkJaWYgKGF1dGhfdG9rLT50b2tlbl90eXBlID09IEVDUllQVEZTX1BBU1NXT1JEKSB7CiAJCQlyYyA9IHdyaXRlX3RhZ18zX3BhY2tldCgoZGVzdF9iYXNlICsgKCpsZW4pKSwKIAkJCQkJCW1heCwgYXV0aF90b2ssCi0JCQkJCQljcnlwdF9zdGF0LCAma2V5X3JlYywKKwkJCQkJCWNyeXB0X3N0YXQsIGtleV9yZWMsCiAJCQkJCQkmd3JpdHRlbik7CiAJCQlpZiAocmMpIHsKIAkJCQllY3J5cHRmc19wcmludGsoS0VSTl9XQVJOSU5HLCAiRXJyb3IgIgogCQkJCQkJIndyaXRpbmcgdGFnIDMgcGFja2V0XG4iKTsKLQkJCQlnb3RvIG91dDsKKwkJCQlnb3RvIG91dF9mcmVlOwogCQkJfQogCQkJKCpsZW4pICs9IHdyaXR0ZW47CiAJCQkvKiBXcml0ZSBhdXRoIHRvayBzaWduYXR1cmUgcGFja2V0ICovCiAJCQlyYyA9IHdyaXRlX3RhZ18xMV9wYWNrZXQoCiAJCQkJKGRlc3RfYmFzZSArICgqbGVuKSksCiAJCQkJKG1heCAtICgqbGVuKSksCi0JCQkJa2V5X3JlYy5zaWcsIEVDUllQVEZTX1NJR19TSVpFLCAmd3JpdHRlbik7CisJCQkJa2V5X3JlYy0+c2lnLCBFQ1JZUFRGU19TSUdfU0laRSwgJndyaXR0ZW4pOwogCQkJaWYgKHJjKSB7CiAJCQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3Igd3JpdGluZyAiCiAJCQkJCQkiYXV0aCB0b2sgc2lnbmF0dXJlIHBhY2tldFxuIik7Ci0JCQkJZ290byBvdXQ7CisJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KIAkJCSgqbGVuKSArPSB3cml0dGVuOwogCQl9IGVsc2UgaWYgKGF1dGhfdG9rLT50b2tlbl90eXBlID09IEVDUllQVEZTX1BSSVZBVEVfS0VZKSB7CiAJCQlyYyA9IHdyaXRlX3RhZ18xX3BhY2tldChkZXN0X2Jhc2UgKyAoKmxlbiksCiAJCQkJCQltYXgsIGF1dGhfdG9rLAogCQkJCQkJY3J5cHRfc3RhdCxtb3VudF9jcnlwdF9zdGF0LAotCQkJCQkJJmtleV9yZWMsICZ3cml0dGVuKTsKKwkJCQkJCWtleV9yZWMsICZ3cml0dGVuKTsKIAkJCWlmIChyYykgewogCQkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJFcnJvciAiCiAJCQkJCQkid3JpdGluZyB0YWcgMSBwYWNrZXRcbiIpOwotCQkJCWdvdG8gb3V0OworCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CiAJCQkoKmxlbikgKz0gd3JpdHRlbjsKIAkJfSBlbHNlIHsKIAkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJVbnN1cHBvcnRlZCAiCiAJCQkJCSJhdXRoZW50aWNhdGlvbiB0b2tlbiB0eXBlXG4iKTsKIAkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfZnJlZTsKIAkJfQogCX0gZWxzZQogCQlCVUcoKTsKQEAgLTE3MTcsNiArMTcyNCw5IEBACiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIHdyaXRpbmcgYm91bmRhcnkgYnl0ZVxuIik7CiAJCXJjID0gLUVJTzsKIAl9CisKK291dF9mcmVlOgorCWttZW1fY2FjaGVfZnJlZShlY3J5cHRmc19rZXlfcmVjb3JkX2NhY2hlLCBrZXlfcmVjKTsKIG91dDoKIAlpZiAocmMpCiAJCSgqbGVuKSA9IDA7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tYWluLmMgYi9mcy9lY3J5cHRmcy9tYWluLmMKaW5kZXggMjZmZTQwNS4uODAwNDRkMSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWFpbi5jCisrKyBiL2ZzL2VjcnlwdGZzL21haW4uYwpAQCAtNjUxLDYgKzY1MSwxMSBAQAogCQkubmFtZSA9ICJlY3J5cHRmc19sb3dlcl9wYWdlX2NhY2hlIiwKIAkJLnNpemUgPSBQQUdFX0NBQ0hFX1NJWkUsCiAJfSwKKwl7CisJCS5jYWNoZSA9ICZlY3J5cHRmc19rZXlfcmVjb3JkX2NhY2hlLAorCQkubmFtZSA9ICJlY3J5cHRmc19rZXlfcmVjb3JkX2NhY2hlIiwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGVjcnlwdGZzX2tleV9yZWNvcmQpLAorCX0sCiB9OwogCiBzdGF0aWMgdm9pZCBlY3J5cHRmc19mcmVlX2ttZW1fY2FjaGVzKHZvaWQpCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tZXNzYWdpbmcuYyBiL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jCmluZGV4IDQ3ZDdlN2IuLjNiYWYyNTMgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jCisrKyBiL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jCkBAIC0xNjksNyArMTY5LDggQEAKIAlpZiAoIW5ld19pZCkgewogCQlyYyA9IC1FTk9NRU07CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnk7IHVuYWJsZSAiCi0JCQkJInRvIHJlZ2lzdGVyIGRhZW1vbiBbJWRdIGZvciB1c2VyXG4iLCBwaWQsIHVpZCk7CisJCQkJInRvIHJlZ2lzdGVyIGRhZW1vbiBbJWRdIGZvciB1c2VyIFslZF1cbiIsCisJCQkJcGlkLCB1aWQpOwogCQlnb3RvIHVubG9jazsKIAl9CiAJaWYgKCFlY3J5cHRmc19maW5kX2RhZW1vbl9pZCh1aWQsICZvbGRfaWQpKSB7CmRpZmYgLS1naXQgYS9mcy9leHQyL2JhbGxvYy5jIGIvZnMvZXh0Mi9iYWxsb2MuYwppbmRleCBiMTk4MWQwLi5iYWY3MWRkIDEwMDY0NAotLS0gYS9mcy9leHQyL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDIvYmFsbG9jLmMKQEAgLTI5LDcgKzI5LDcgQEAKICAqIFRoZSBmaWxlIHN5c3RlbSBjb250YWlucyBncm91cCBkZXNjcmlwdG9ycyB3aGljaCBhcmUgbG9jYXRlZCBhZnRlciB0aGUKICAqIHN1cGVyIGJsb2NrLiAgRWFjaCBkZXNjcmlwdG9yIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgdGhlIGJpdG1hcCBibG9jayBhbmQKICAqIHRoZSBmcmVlIGJsb2NrcyBjb3VudCBpbiB0aGUgYmxvY2suICBUaGUgZGVzY3JpcHRvcnMgYXJlIGxvYWRlZCBpbiBtZW1vcnkKLSAqIHdoZW4gYSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIChzZWUgZXh0Ml9yZWFkX3N1cGVyKS4KKyAqIHdoZW4gYSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIChzZWUgZXh0Ml9maWxsX3N1cGVyKS4KICAqLwogCiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvYmFsbG9jLmMgYi9mcy9leHQzL2JhbGxvYy5jCmluZGV4IDIyMTYxNzQuLmNhOGFlZTYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYmFsbG9jLmMKKysrIGIvZnMvZXh0My9iYWxsb2MuYwpAQCAtMzIsNyArMzIsNyBAQAogICogVGhlIGZpbGUgc3lzdGVtIGNvbnRhaW5zIGdyb3VwIGRlc2NyaXB0b3JzIHdoaWNoIGFyZSBsb2NhdGVkIGFmdGVyIHRoZQogICogc3VwZXIgYmxvY2suICBFYWNoIGRlc2NyaXB0b3IgY29udGFpbnMgdGhlIG51bWJlciBvZiB0aGUgYml0bWFwIGJsb2NrIGFuZAogICogdGhlIGZyZWUgYmxvY2tzIGNvdW50IGluIHRoZSBibG9jay4gIFRoZSBkZXNjcmlwdG9ycyBhcmUgbG9hZGVkIGluIG1lbW9yeQotICogd2hlbiBhIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQgKHNlZSBleHQzX3JlYWRfc3VwZXIpLgorICogd2hlbiBhIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQgKHNlZSBleHQzX2ZpbGxfc3VwZXIpLgogICovCiAKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggYzRkZDExMC4uOGEyMzQ4MyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYworKysgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC01MCw3ICs1MCw3IEBACiAgKiBUaGUgZmlsZSBzeXN0ZW0gY29udGFpbnMgZ3JvdXAgZGVzY3JpcHRvcnMgd2hpY2ggYXJlIGxvY2F0ZWQgYWZ0ZXIgdGhlCiAgKiBzdXBlciBibG9jay4gIEVhY2ggZGVzY3JpcHRvciBjb250YWlucyB0aGUgbnVtYmVyIG9mIHRoZSBiaXRtYXAgYmxvY2sgYW5kCiAgKiB0aGUgZnJlZSBibG9ja3MgY291bnQgaW4gdGhlIGJsb2NrLiAgVGhlIGRlc2NyaXB0b3JzIGFyZSBsb2FkZWQgaW4gbWVtb3J5Ci0gKiB3aGVuIGEgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCAoc2VlIGV4dDRfcmVhZF9zdXBlcikuCisgKiB3aGVuIGEgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCAoc2VlIGV4dDRfZmlsbF9zdXBlcikuCiAgKi8KIAogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IGRjMjcyNGYuLjc5MTZiNTAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAogCXNpemUgPSAoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gc2l6ZW9mKHN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIpKQogCQkJLyBzaXplb2Yoc3RydWN0IGV4dDRfZXh0ZW50KTsKLSNpZmRlZiBBR1JFU1NJVkVfVEVTVAorI2lmZGVmIEFHR1JFU1NJVkVfVEVTVAogCWlmIChzaXplID4gNikKIAkJc2l6ZSA9IDY7CiAjZW5kaWYKQEAgLTIzNSw3ICsyMzUsNyBAQAogCiAJc2l6ZSA9IChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSBzaXplb2Yoc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlcikpCiAJCQkvIHNpemVvZihzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4KTsKLSNpZmRlZiBBR1JFU1NJVkVfVEVTVAorI2lmZGVmIEFHR1JFU1NJVkVfVEVTVAogCWlmIChzaXplID4gNSkKIAkJc2l6ZSA9IDU7CiAjZW5kaWYKQEAgLTI0OSw3ICsyNDksNyBAQAogCXNpemUgPSBzaXplb2YoRVhUNF9JKGlub2RlKS0+aV9kYXRhKTsKIAlzaXplIC09IHNpemVvZihzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyKTsKIAlzaXplIC89IHNpemVvZihzdHJ1Y3QgZXh0NF9leHRlbnQpOwotI2lmZGVmIEFHUkVTU0lWRV9URVNUCisjaWZkZWYgQUdHUkVTU0lWRV9URVNUCiAJaWYgKHNpemUgPiAzKQogCQlzaXplID0gMzsKICNlbmRpZgpAQCAtMjYzLDcgKzI2Myw3IEBACiAJc2l6ZSA9IHNpemVvZihFWFQ0X0koaW5vZGUpLT5pX2RhdGEpOwogCXNpemUgLT0gc2l6ZW9mKHN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIpOwogCXNpemUgLz0gc2l6ZW9mKHN0cnVjdCBleHQ0X2V4dGVudF9pZHgpOwotI2lmZGVmIEFHUkVTU0lWRV9URVNUCisjaWZkZWYgQUdHUkVTU0lWRV9URVNUCiAJaWYgKHNpemUgPiA0KQogCQlzaXplID0gNDsKICNlbmRpZgpAQCAtMTExOCw3ICsxMTE4LDcgQEAKIAkgKi8KIAlpZiAobGUxNl90b19jcHUoZXgxLT5lZV9sZW4pICsgbGUxNl90b19jcHUoZXgyLT5lZV9sZW4pID4gRVhUX01BWF9MRU4pCiAJCXJldHVybiAwOwotI2lmZGVmIEFHUkVTU0lWRV9URVNUCisjaWZkZWYgQUdHUkVTU0lWRV9URVNUCiAJaWYgKGxlMTZfdG9fY3B1KGV4MS0+ZWVfbGVuKSA+PSA0KQogCQlyZXR1cm4gMDsKICNlbmRpZgpAQCAtMTg5MSw4ICsxODkxLDggQEAKIAogCWlmICh0ZXN0X29wdChzYiwgRVhURU5UUykpIHsKIAkJcHJpbnRrKCJFWFQ0LWZzOiBmaWxlIGV4dGVudHMgZW5hYmxlZCIpOwotI2lmZGVmIEFHUkVTU0lWRV9URVNUCi0JCXByaW50aygiLCBhZ3Jlc3NpdmUgdGVzdHMiKTsKKyNpZmRlZiBBR0dSRVNTSVZFX1RFU1QKKwkJcHJpbnRrKCIsIGFnZ3Jlc3NpdmUgdGVzdHMiKTsKICNlbmRpZgogI2lmZGVmIENIRUNLX0JJTlNFQVJDSAogCQlwcmludGsoIiwgY2hlY2sgYmluc2VhcmNoIik7CmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jCmluZGV4IDc2MTA3MzUuLjliZmU2MDcgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCisrKyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC0xNzMsMTAgKzE3MywxMiBAQAogCQkgKgogCQkgKiBCdXQgd2UgbXVzdCBmaWxsIHRoZSByZW1haW5pbmcgYXJlYSBvciBob2xlIGJ5IG51bCBmb3IKIAkJICogdXBkYXRpbmcgLT5tbXVfcHJpdmF0ZS4KKwkJICoKKwkJICogUmV0dXJuIDAsIGFuZCBmYWxsYmFjayB0byBub3JtYWwgYnVmZmVyZWQgd3JpdGUuCiAJCSAqLwogCQlsb2ZmX3Qgc2l6ZSA9IG9mZnNldCArIGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKIAkJaWYgKE1TRE9TX0koaW5vZGUpLT5tbXVfcHJpdmF0ZSA8IHNpemUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAwOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9mcy9qZmZzL01ha2VmaWxlIGIvZnMvamZmcy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxYzBiYi4uMDAwMDAwMAotLS0gYS9mcy9qZmZzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IEpvdXJuYWxsaW5nIEZsYXNoIEZpbGVTeXN0ZW0gKEpGRlMpIHJvdXRpbmVzLgotIwotIyAkSWQ6IE1ha2VmaWxlLHYgMS4xMSAyMDAxLzA5LzI1IDIwOjU5OjQxIGR3bXcyIEV4cCAkCi0jCi0KLW9iai0kKENPTkZJR19KRkZTX0ZTKSArPSBqZmZzLm8KLQotamZmcy15IAkJCQk6PSBqZmZzX2ZtLm8gaW50cmVwLm8gaW5vZGUtdjIzLm8KLWpmZnMtJChDT05GSUdfSkZGU19QUk9DX0ZTKQkrPSBqZmZzX3Byb2MubwotamZmcy1vYmpzCQkJOj0gJChqZmZzLXkpCmRpZmYgLS1naXQgYS9mcy9qZmZzL2lub2RlLXYyMy5jIGIvZnMvamZmcy9pbm9kZS12MjMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYwMmI5Mi4uMDAwMDAwMAotLS0gYS9mcy9qZmZzL2lub2RlLXYyMy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg0NyArMCwwIEBACi0vKgotICogSkZGUyAtLSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgTGludXggaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBBeGlzIENvbW11bmljYXRpb25zIEFCLgotICoKLSAqIENyZWF0ZWQgYnkgRmlubiBIYWthbnNzb24gPGZpbm5AYXhpcy5jb20+LgotICoKLSAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICRJZDogaW5vZGUtdjIzLmMsdiAxLjcwIDIwMDEvMTAvMDIgMDk6MTY6MDIgZHdtdzIgRXhwICQKLSAqCi0gKiBQb3J0ZWQgdG8gTGludXggMi4zLnggYW5kIE1URDoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAgQWxleGFuZGVyIExhcnNzb24gKGFsZXhAY2VuZGlvLnNlKSwgQ2VuZGlvIFN5c3RlbXMgQUIKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCwgMjAwMSAgUmVkIEhhdCwgSW5jLgotICovCi0KLS8qIGlub2RlLmMgLS0gQ29udGFpbnMgdGhlIGNvZGUgdGhhdCBpcyBjYWxsZWQgZnJvbSB0aGUgVkZTLiAgKi8KLQotLyogVE9ETy1BTEVYOgotICogdWlkIGFuZCBnaWQgYXJlIGp1c3QgMTYgYml0LgotICogamZmc19maWxlX3dyaXRlIHJlYWRzIGZyb20gdXNlci1zcGFjZSBwb2ludGVycyB3aXRob3V0IHh4X2Zyb21fdXNlcgotICogbWF5YmUgb3RoZXIgc3R1ZmYgZG8gdG8uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2pmZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvdmZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImpmZnNfZm0uaCIKLSNpbmNsdWRlICJpbnRyZXAuaCIKLSNpZmRlZiBDT05GSUdfSkZGU19QUk9DX0ZTCi0jaW5jbHVkZSAiamZmc19wcm9jLmgiCi0jZW5kaWYKLQotc3RhdGljIGludCBqZmZzX3JlbW92ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgdHlwZSk7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBqZmZzX29wczsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGpmZnNfZmlsZV9vcGVyYXRpb25zOwotc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgamZmc19kaXJfb3BlcmF0aW9uczsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZmc19hZGRyZXNzX29wZXJhdGlvbnM7Ci0KLXN0cnVjdCBrbWVtX2NhY2hlICAgICAqbm9kZV9jYWNoZSA9IE5VTEw7Ci1zdHJ1Y3Qga21lbV9jYWNoZSAgICAgKmZtX2NhY2hlID0gTlVMTDsKLQotLyogQ2FsbGVkIGJ5IHRoZSBWRlMgYXQgbW91bnQgdGltZSB0byBpbml0aWFsaXplIHRoZSB3aG9sZSBmaWxlIHN5c3RlbS4gICovCi1zdGF0aWMgaW50IGpmZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQotewotCXN0cnVjdCBpbm9kZSAqcm9vdF9pbm9kZTsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjOwotCi0Jc2ItPnNfZmxhZ3MgfD0gTVNfTk9ESVJBVElNRTsKLQotCUQxKHByaW50ayhLRVJOX05PVElDRSAiSkZGUzogVHJ5aW5nIHRvIG1vdW50IGRldmljZSAlcy5cbiIsCi0JCSAgc2ItPnNfaWQpKTsKLQotCWlmIChNQUpPUihzYi0+c19kZXYpICE9IE1URF9CTE9DS19NQUpPUikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJKRkZTOiBUcnlpbmcgdG8gbW91bnQgYSAiCi0JCSAgICAgICAibm9uLW10ZCBkZXZpY2UuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc2ItPnNfYmxvY2tzaXplID0gUEFHRV9DQUNIRV9TSVpFOwotCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gUEFHRV9DQUNIRV9TSElGVDsKLQlzYi0+c19mc19pbmZvID0gKHZvaWQgKikgMDsKLQlzYi0+c19tYXhieXRlcyA9IDB4RkZGRkZGRkY7Ci0KLQkvKiBCdWlsZCB0aGUgZmlsZSBzeXN0ZW0uICAqLwotCWlmIChqZmZzX2J1aWxkX2ZzKHNiKSA8IDApIHsKLQkJZ290byBqZmZzX3NiX2VycjE7Ci0JfQotCi0JLyoKLQkgKiBzZXQgdXAgZW5vdWdoIHNvIHRoYXQgd2UgY2FuIHJlYWQgYW4gaW5vZGUKLQkgKi8KLQlzYi0+c19tYWdpYyA9IEpGRlNfTUFHSUNfU0JfQklUTUFTSzsKLQlzYi0+c19vcCA9ICZqZmZzX29wczsKLQotCXJvb3RfaW5vZGUgPSBpZ2V0KHNiLCBKRkZTX01JTl9JTk8pOwotCWlmICghcm9vdF9pbm9kZSkKLQkgICAgICAgIGdvdG8gamZmc19zYl9lcnIyOwotCi0JLyogR2V0IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIGZpbGUgc3lzdGVtLiAgKi8KLQlpZiAoIShzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3RfaW5vZGUpKSkgewotCQlnb3RvIGpmZnNfc2JfZXJyMzsKLQl9Ci0KLQljID0gKHN0cnVjdCBqZmZzX2NvbnRyb2wgKikgc2ItPnNfZnNfaW5mbzsKLQotI2lmZGVmIENPTkZJR19KRkZTX1BST0NfRlMKLQkvKiBTZXQgdXAgdGhlIGpmZnMgcHJvYyBmaWxlIHN5c3RlbS4gICovCi0JaWYgKGpmZnNfcmVnaXN0ZXJfamZmc19wcm9jX2RpcihNSU5PUihzYi0+c19kZXYpLCBjKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSkZGUzogRmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIEpGRlMgIgotCQkJInByb2MgZmlsZSBzeXN0ZW0gZm9yIGRldmljZSAlcy5cbiIsCi0JCQlzYi0+c19pZCk7Ci0JfQotI2VuZGlmCi0KLQkvKiBTZXQgdGhlIEdhcmJhZ2UgQ29sbGVjdGlvbiB0aHJlc2hvbGRzICovCi0KLQkvKiBHQyBpZiBmcmVlIHNwYWNlIGdvZXMgYmVsb3cgNSUgb2YgdGhlIHRvdGFsIHNpemUgKi8KLQljLT5nY19taW5mcmVlX3RocmVzaG9sZCA9IGMtPmZtYy0+Zmxhc2hfc2l6ZSAvIDIwOwotCi0JaWYgKGMtPmdjX21pbmZyZWVfdGhyZXNob2xkIDwgYy0+Zm1jLT5zZWN0b3Jfc2l6ZSkKLQkJYy0+Z2NfbWluZnJlZV90aHJlc2hvbGQgPSBjLT5mbWMtPnNlY3Rvcl9zaXplOwotCi0JLyogR0MgaWYgZGlydHkgc3BhY2UgZXhjZWVkcyAzMyUgb2YgdGhlIHRvdGFsIHNpemUuICovCi0JYy0+Z2NfbWF4ZGlydHlfdGhyZXNob2xkID0gYy0+Zm1jLT5mbGFzaF9zaXplIC8gMzsKLQotCWlmIChjLT5nY19tYXhkaXJ0eV90aHJlc2hvbGQgPCBjLT5mbWMtPnNlY3Rvcl9zaXplKQotCQljLT5nY19tYXhkaXJ0eV90aHJlc2hvbGQgPSBjLT5mbWMtPnNlY3Rvcl9zaXplOwotCi0KLQljLT50aHJlYWRfcGlkID0ga2VybmVsX3RocmVhZCAoamZmc19nYXJiYWdlX2NvbGxlY3RfdGhyZWFkLCAKLQkJCQkgICAgICAgICh2b2lkICopIGMsIAotCQkJCSAgICAgICAgQ0xPTkVfS0VSTkVMKTsKLQlEMShwcmludGsoS0VSTl9OT1RJQ0UgIkpGRlM6IEdDIHRocmVhZCBwaWQ9JWQuXG4iLCAoaW50KSBjLT50aHJlYWRfcGlkKSk7Ci0KLQlEMShwcmludGsoS0VSTl9OT1RJQ0UgIkpGRlM6IFN1Y2Nlc3NmdWxseSBtb3VudGVkIGRldmljZSAlcy5cbiIsCi0JICAgICAgIHNiLT5zX2lkKSk7Ci0JcmV0dXJuIDA7Ci0KLWpmZnNfc2JfZXJyMzoKLQlpcHV0KHJvb3RfaW5vZGUpOwotamZmc19zYl9lcnIyOgotCWpmZnNfY2xlYW51cF9jb250cm9sKChzdHJ1Y3QgamZmc19jb250cm9sICopc2ItPnNfZnNfaW5mbyk7Ci1qZmZzX3NiX2VycjE6Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiSkZGUzogRmFpbGVkIHRvIG1vdW50IGRldmljZSAlcy5cbiIsCi0JICAgICAgIHNiLT5zX2lkKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSBpcyB1bW91bnRlZC4gICovCi1zdGF0aWMgdm9pZAotamZmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjID0gKHN0cnVjdCBqZmZzX2NvbnRyb2wgKikgc2ItPnNfZnNfaW5mbzsKLQotCUQyKHByaW50aygiamZmc19wdXRfc3VwZXIoKVxuIikpOwotCi0jaWZkZWYgQ09ORklHX0pGRlNfUFJPQ19GUwotCWpmZnNfdW5yZWdpc3Rlcl9qZmZzX3Byb2NfZGlyKGMpOwotI2VuZGlmCi0KLQlpZiAoYy0+Z2NfdGFzaykgewotCQlEMShwcmludGsgKEtFUk5fTk9USUNFICJqZmZzX3B1dF9zdXBlcigpOiBUZWxsaW5nIGdjIHRocmVhZCB0byBkaWUuXG4iKSk7Ci0JCXNlbmRfc2lnKFNJR0tJTEwsIGMtPmdjX3Rhc2ssIDEpOwotCX0KLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjLT5nY190aHJlYWRfY29tcCk7Ci0KLQlEMShwcmludGsgKEtFUk5fTk9USUNFICJqZmZzX3B1dF9zdXBlcigpOiBTdWNjZXNzZnVsbHkgd2FpdGVkIG9uIHRocmVhZC5cbiIpKTsKLQotCWpmZnNfY2xlYW51cF9jb250cm9sKChzdHJ1Y3QgamZmc19jb250cm9sICopc2ItPnNfZnNfaW5mbyk7Ci0JRDEocHJpbnRrKEtFUk5fTk9USUNFICJKRkZTOiBTdWNjZXNzZnVsbHkgdW5tb3VudGVkIGRldmljZSAlcy5cbiIsCi0JICAgICAgIHNiLT5zX2lkKSk7Ci19Ci0KLQotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB1c2VyIGNvbW1hbmRzIGxpa2UgY2htb2QsIGNoZ3JwIGFuZAotICAgY2hvd24gYXJlIGV4ZWN1dGVkLiBTeXN0ZW0gY2FsbHMgbGlrZSB0cnVuYygpIHJlc3VsdHMgaW4gYSBjYWxsCi0gICB0byB0aGlzIGZ1bmN0aW9uLiAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgamZmc19yYXdfaW5vZGUgcmF3X2lub2RlOwotCXN0cnVjdCBqZmZzX2NvbnRyb2wgKmM7Ci0Jc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWM7Ci0Jc3RydWN0IGpmZnNfZmlsZSAqZjsKLQlzdHJ1Y3QgamZmc19ub2RlICpuZXdfbm9kZTsKLQlpbnQgdXBkYXRlX2FsbDsKLQlpbnQgcmVzID0gMDsKLQlpbnQgcmVjb3ZlcmFibGUgPSAwOwotCi0JbG9ja19rZXJuZWwoKTsKLQotCWlmICgocmVzID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBpYXR0cikpKSAKLQkJZ290byBvdXQ7Ci0KLQljID0gKHN0cnVjdCBqZmZzX2NvbnRyb2wgKilpbm9kZS0+aV9zYi0+c19mc19pbmZvOwotCWZtYyA9IGMtPmZtYzsKLQotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgIm5vdGlmeV9jaGFuZ2UoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JbXV0ZXhfbG9jaygmZm1jLT5iaWdsb2NrKTsKLQotCWYgPSBqZmZzX2ZpbmRfZmlsZShjLCBpbm9kZS0+aV9pbm8pOwotCi0JQVNTRVJUKGlmICghZikgewotCQlwcmludGsoImpmZnNfc2V0YXR0cigpOiBJbnZhbGlkIGlub2RlIG51bWJlcjogJWx1XG4iLAotCQkgICAgICAgaW5vZGUtPmlfaW5vKTsKLQkJRDMocHJpbnRrIChLRVJOX05PVElDRSAibm90aWZ5X2NoYW5nZSgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JCW11dGV4X3VubG9jaygmZm1jLT5iaWdsb2NrKTsKLQkJcmVzID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfSk7Ci0KLQlEMShwcmludGsoIioqKmpmZnNfc2V0YXR0cigpOiBmaWxlOiBcIiVzXCIsIGlubzogJXVcbiIsCi0JCSAgZi0+bmFtZSwgZi0+aW5vKSk7Ci0KLQl1cGRhdGVfYWxsID0gaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9GT1JDRTsKLQotCWlmICggKHVwZGF0ZV9hbGwgfHwgaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKQotCSAgICAgJiYgKGlhdHRyLT5pYV9zaXplICsgMTI4IDwgZi0+c2l6ZSkgKSB7Ci0JCS8qIFdlJ3JlIHNocmlua2luZyB0aGUgZmlsZSBieSBtb3JlIHRoYW4gMTI4IGJ5dGVzLgotCQkgICBXZSdsbCBiZSBhYmxlIHRvIEdDIGFuZCByZWNvdmVyIHRoaXMgc3BhY2UsIHNvCi0JCSAgIGFsbG93IGl0IHRvIGdvIGludG8gdGhlIHJlc2VydmVkIHNwYWNlLiAqLwotCQlyZWNvdmVyYWJsZSA9IDE7Ci0gICAgICAgIH0KLQotCWlmICghKG5ld19ub2RlID0gamZmc19hbGxvY19ub2RlKCkpKSB7Ci0JCUQocHJpbnRrKCJqZmZzX3NldGF0dHIoKTogQWxsb2NhdGlvbiBmYWlsZWQhXG4iKSk7Ci0JCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgIm5vdGlmeV9jaGFuZ2UoKTogdXAgYmlnbG9ja1xuIikpOwotCQltdXRleF91bmxvY2soJmZtYy0+YmlnbG9jayk7Ci0JCXJlcyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCW5ld19ub2RlLT5kYXRhX29mZnNldCA9IDA7Ci0JbmV3X25vZGUtPnJlbW92ZWRfc2l6ZSA9IDA7Ci0JcmF3X2lub2RlLm1hZ2ljID0gSkZGU19NQUdJQ19CSVRNQVNLOwotCXJhd19pbm9kZS5pbm8gPSBmLT5pbm87Ci0JcmF3X2lub2RlLnBpbm8gPSBmLT5waW5vOwotCXJhd19pbm9kZS5tb2RlID0gZi0+bW9kZTsKLQlyYXdfaW5vZGUudWlkID0gZi0+dWlkOwotCXJhd19pbm9kZS5naWQgPSBmLT5naWQ7Ci0JcmF3X2lub2RlLmF0aW1lID0gZi0+YXRpbWU7Ci0JcmF3X2lub2RlLm10aW1lID0gZi0+bXRpbWU7Ci0JcmF3X2lub2RlLmN0aW1lID0gZi0+Y3RpbWU7Ci0JcmF3X2lub2RlLmRzaXplID0gMDsKLQlyYXdfaW5vZGUub2Zmc2V0ID0gMDsKLQlyYXdfaW5vZGUucnNpemUgPSAwOwotCXJhd19pbm9kZS5kc2l6ZSA9IDA7Ci0JcmF3X2lub2RlLm5zaXplID0gZi0+bnNpemU7Ci0JcmF3X2lub2RlLm5saW5rID0gZi0+bmxpbms7Ci0JcmF3X2lub2RlLnNwYXJlID0gMDsKLQlyYXdfaW5vZGUucmVuYW1lID0gMDsKLQlyYXdfaW5vZGUuZGVsZXRlZCA9IDA7Ci0KLQlpZiAodXBkYXRlX2FsbCB8fCBpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpIHsKLQkJcmF3X2lub2RlLm1vZGUgPSBpYXR0ci0+aWFfbW9kZTsKLQkJaW5vZGUtPmlfbW9kZSA9IGlhdHRyLT5pYV9tb2RlOwotCX0KLQlpZiAodXBkYXRlX2FsbCB8fCBpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCkgewotCQlyYXdfaW5vZGUudWlkID0gaWF0dHItPmlhX3VpZDsKLQkJaW5vZGUtPmlfdWlkID0gaWF0dHItPmlhX3VpZDsKLQl9Ci0JaWYgKHVwZGF0ZV9hbGwgfHwgaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpIHsKLQkJcmF3X2lub2RlLmdpZCA9IGlhdHRyLT5pYV9naWQ7Ci0JCWlub2RlLT5pX2dpZCA9IGlhdHRyLT5pYV9naWQ7Ci0JfQotCWlmICh1cGRhdGVfYWxsIHx8IGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgewotCQlpbnQgbGVuOwotCQlEMShwcmludGsoImpmZnNfbm90aWZ5X2NoYW5nZSgpOiBDaGFuZ2luZyBzaXplICIKLQkJCSAgInRvICVsdSBieXRlcyFcbiIsIChsb25nKWlhdHRyLT5pYV9zaXplKSk7Ci0JCXJhd19pbm9kZS5vZmZzZXQgPSBpYXR0ci0+aWFfc2l6ZTsKLQotCQkvKiBDYWxjdWxhdGUgaG93IG1hbnkgYnl0ZXMgbmVlZCB0byBiZSByZW1vdmVkIGZyb20KLQkJICAgdGhlIGVuZC4gICovCi0JCWlmIChmLT5zaXplIDwgaWF0dHItPmlhX3NpemUpIHsKLQkJCWxlbiA9IDA7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlsZW4gPSBmLT5zaXplIC0gaWF0dHItPmlhX3NpemU7Ci0JCX0KLQotCQlyYXdfaW5vZGUucnNpemUgPSBsZW47Ci0KLQkJLyogVGhlIHVwZGF0ZWQgbm9kZSB3aWxsIGJlIGEgcmVtb3ZhbCBub2RlLCB3aXRoCi0JCSAgIGJhc2UgYXQgdGhlIG5ldyBzaXplIGFuZCBzaXplIG9mIHRoZSBuYnIgb2YgYnl0ZXMKLQkJICAgdG8gYmUgcmVtb3ZlZC4gICovCi0JCW5ld19ub2RlLT5kYXRhX29mZnNldCA9IGlhdHRyLT5pYV9zaXplOwotCQluZXdfbm9kZS0+cmVtb3ZlZF9zaXplID0gbGVuOwotCQlpbm9kZS0+aV9zaXplID0gaWF0dHItPmlhX3NpemU7Ci0JCWlub2RlLT5pX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgNTExKSA+PiA5OwotCi0JCWlmIChsZW4pIHsKLQkJCWludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbm9kZS0+aV9tYXBwaW5nLCAwLCAtMSk7Ci0JCX0KLQkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCQlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lOwotCX0KLQlpZiAodXBkYXRlX2FsbCB8fCBpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0FUSU1FKSB7Ci0JCXJhd19pbm9kZS5hdGltZSA9IGlhdHRyLT5pYV9hdGltZS50dl9zZWM7Ci0JCWlub2RlLT5pX2F0aW1lID0gaWF0dHItPmlhX2F0aW1lOwotCX0KLQlpZiAodXBkYXRlX2FsbCB8fCBpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01USU1FKSB7Ci0JCXJhd19pbm9kZS5tdGltZSA9IGlhdHRyLT5pYV9tdGltZS50dl9zZWM7Ci0JCWlub2RlLT5pX210aW1lID0gaWF0dHItPmlhX210aW1lOwotCX0KLQlpZiAodXBkYXRlX2FsbCB8fCBpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0NUSU1FKSB7Ci0JCXJhd19pbm9kZS5jdGltZSA9IGlhdHRyLT5pYV9jdGltZS50dl9zZWM7Ci0JCWlub2RlLT5pX2N0aW1lID0gaWF0dHItPmlhX2N0aW1lOwotCX0KLQotCS8qIFdyaXRlIHRoaXMgbm9kZSB0byB0aGUgZmxhc2guICAqLwotCWlmICgocmVzID0gamZmc193cml0ZV9ub2RlKGMsIG5ld19ub2RlLCAmcmF3X2lub2RlLCBmLT5uYW1lLCBOVUxMLCByZWNvdmVyYWJsZSwgZikpIDwgMCkgewotCQlEKHByaW50aygiamZmc19ub3RpZnlfY2hhbmdlKCk6IFRoZSB3cml0ZSBmYWlsZWQhXG4iKSk7Ci0JCWpmZnNfZnJlZV9ub2RlKG5ld19ub2RlKTsKLQkJRDMocHJpbnRrIChLRVJOX05PVElDRSAibl9jKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQkJbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlqZmZzX2luc2VydF9ub2RlKGMsIGYsICZyYXdfaW5vZGUsIE5VTEwsIG5ld19ub2RlKTsKLQotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgIm5fYygpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotb3V0OgotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gcmVzOwotfSAvKiBqZmZzX25vdGlmeV9jaGFuZ2UoKSAgKi8KLQotCi1zdGF0aWMgc3RydWN0IGlub2RlICoKLWpmZnNfbmV3X2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGpmZnNfcmF3X2lub2RlICpyYXdfaW5vZGUsCi0JICAgICAgIGludCAqIGVycikKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYjsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjOwotCXN0cnVjdCBqZmZzX2ZpbGUgKmY7Ci0KLQlzYiA9IGRpci0+aV9zYjsKLQlpbm9kZSA9IG5ld19pbm9kZShzYik7Ci0JaWYgKCFpbm9kZSkgewotCQkqZXJyID0gLUVOT01FTTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JYyA9IChzdHJ1Y3QgamZmc19jb250cm9sICopc2ItPnNfZnNfaW5mbzsKLQotCWlub2RlLT5pX2lubyA9IHJhd19pbm9kZS0+aW5vOwotCWlub2RlLT5pX21vZGUgPSByYXdfaW5vZGUtPm1vZGU7Ci0JaW5vZGUtPmlfbmxpbmsgPSByYXdfaW5vZGUtPm5saW5rOwotCWlub2RlLT5pX3VpZCA9IHJhd19pbm9kZS0+dWlkOwotCWlub2RlLT5pX2dpZCA9IHJhd19pbm9kZS0+Z2lkOwotCWlub2RlLT5pX3NpemUgPSByYXdfaW5vZGUtPmRzaXplOwotCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IHJhd19pbm9kZS0+YXRpbWU7Ci0JaW5vZGUtPmlfbXRpbWUudHZfc2VjID0gcmF3X2lub2RlLT5tdGltZTsKLQlpbm9kZS0+aV9jdGltZS50dl9zZWMgPSByYXdfaW5vZGUtPmN0aW1lOwotCWlub2RlLT5pX2N0aW1lLnR2X25zZWMgPSAwOwotCWlub2RlLT5pX210aW1lLnR2X25zZWMgPSAwOwotCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSAwOwotCWlub2RlLT5pX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgNTExKSA+PiA5OwotCi0JZiA9IGpmZnNfZmluZF9maWxlKGMsIHJhd19pbm9kZS0+aW5vKTsKLQotCWlub2RlLT5pX3ByaXZhdGUgPSAodm9pZCAqKWY7Ci0JaW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpOwotCi0JcmV0dXJuIGlub2RlOwotfQotCi0vKiBHZXQgc3RhdGlzdGljcyBvZiB0aGUgZmlsZSBzeXN0ZW0uICAqLwotc3RhdGljIGludAotamZmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQotewotCXN0cnVjdCBqZmZzX2NvbnRyb2wgKmMgPSAoc3RydWN0IGpmZnNfY29udHJvbCAqKSBkZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKLQlzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYzsKLQotCWxvY2tfa2VybmVsKCk7Ci0KLQlmbWMgPSBjLT5mbWM7Ci0KLQlEMihwcmludGsoImpmZnNfc3RhdGZzKClcbiIpKTsKLQotCWJ1Zi0+Zl90eXBlID0gSkZGU19NQUdJQ19TQl9CSVRNQVNLOwotCWJ1Zi0+Zl9ic2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKLQlidWYtPmZfYmxvY2tzID0gKGZtYy0+Zmxhc2hfc2l6ZSAvIFBBR0VfQ0FDSEVfU0laRSkKLQkJICAgICAgIC0gKGZtYy0+bWluX2ZyZWVfc2l6ZSAvIFBBR0VfQ0FDSEVfU0laRSk7Ci0JYnVmLT5mX2JmcmVlID0gKGpmZnNfZnJlZV9zaXplMShmbWMpICsgamZmc19mcmVlX3NpemUyKGZtYykgKwotCQkgICAgICAgZm1jLT5kaXJ0eV9zaXplIC0gZm1jLT5taW5fZnJlZV9zaXplKQotCQkJICAgICAgID4+IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0JYnVmLT5mX2JhdmFpbCA9IGJ1Zi0+Zl9iZnJlZTsKLQotCS8qIEZpbmQgb3V0IGhvdyBtYW55IGZpbGVzIHRoZXJlIGFyZSBpbiB0aGUgZmlsZXN5c3RlbS4gICovCi0JYnVmLT5mX2ZpbGVzID0gamZmc19mb3JlYWNoX2ZpbGUoYywgamZmc19maWxlX2NvdW50KTsKLQlidWYtPmZfZmZyZWUgPSBidWYtPmZfYmZyZWU7Ci0JLyogYnVmLT5mX2ZzaWQgPSAwOyAqLwotCWJ1Zi0+Zl9uYW1lbGVuID0gSkZGU19NQVhfTkFNRV9MRU47Ci0KLQl1bmxvY2tfa2VybmVsKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBSZW5hbWUgYSBmaWxlLiAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKLQkgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQotewotCXN0cnVjdCBqZmZzX3Jhd19pbm9kZSByYXdfaW5vZGU7Ci0Jc3RydWN0IGpmZnNfY29udHJvbCAqYzsKLQlzdHJ1Y3QgamZmc19maWxlICpvbGRfZGlyX2Y7Ci0Jc3RydWN0IGpmZnNfZmlsZSAqbmV3X2Rpcl9mOwotCXN0cnVjdCBqZmZzX2ZpbGUgKmRlbF9mOwotCXN0cnVjdCBqZmZzX2ZpbGUgKmY7Ci0Jc3RydWN0IGpmZnNfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWludCByZXN1bHQgPSAwOwotCV9fdTMyIHJlbmFtZV9kYXRhID0gMDsKLQotCUQyKHByaW50aygiKioqamZmc19yZW5hbWUoKVxuIikpOwotCi0JRChwcmludGsoImpmZnNfcmVuYW1lKCk6IG9sZF9kaXI6IDB4JXAsIG9sZCBuYW1lOiAweCVwLCAiCi0JCSAibmV3X2RpcjogMHglcCwgbmV3IG5hbWU6IDB4JXBcbiIsCi0JCSBvbGRfZGlyLCBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJIG5ld19kaXIsIG5ld19kZW50cnktPmRfbmFtZS5uYW1lKSk7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCWMgPSAoc3RydWN0IGpmZnNfY29udHJvbCAqKW9sZF9kaXItPmlfc2ItPnNfZnNfaW5mbzsKLQlBU1NFUlQoaWYgKCFjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiamZmc19yZW5hbWUoKTogVGhlIG9sZF9kaXIgaW5vZGUgIgotCQkgICAgICAgImRpZG4ndCBoYXZlIGEgcmVmZXJlbmNlIHRvIGEgamZmc19maWxlIHN0cnVjdFxuIik7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FSU87Ci0JfSk7Ci0KLQlyZXN1bHQgPSAtRU5PVERJUjsKLQlpZiAoIShvbGRfZGlyX2YgPSBvbGRfZGlyLT5pX3ByaXZhdGUpKSB7Ci0JCUQocHJpbnRrKCJqZmZzX3JlbmFtZSgpOiBPbGQgZGlyIGludmFsaWQuXG4iKSk7Ci0JCWdvdG8gamZmc19yZW5hbWVfZW5kOwotCX0KLQotCS8qIFRyeSB0byBmaW5kIHRoZSBmaWxlIHRvIG1vdmUuICAqLwotCXJlc3VsdCA9IC1FTk9FTlQ7Ci0JaWYgKCEoZiA9IGpmZnNfZmluZF9jaGlsZChvbGRfZGlyX2YsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAotCQkJCSAgb2xkX2RlbnRyeS0+ZF9uYW1lLmxlbikpKSB7Ci0JCWdvdG8gamZmc19yZW5hbWVfZW5kOwotCX0KLQotCS8qIEZpbmQgdGhlIG5ldyBkaXJlY3RvcnkuICAqLwotCXJlc3VsdCA9IC1FTk9URElSOwotCWlmICghKG5ld19kaXJfZiA9IG5ld19kaXItPmlfcHJpdmF0ZSkpIHsKLQkJRChwcmludGsoImpmZnNfcmVuYW1lKCk6IE5ldyBkaXIgaW52YWxpZC5cbiIpKTsKLQkJZ290byBqZmZzX3JlbmFtZV9lbmQ7Ci0JfQotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgInJlbmFtZSgpOiBkb3duIGJpZ2xvY2tcbiIpKTsKLQltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCS8qIENyZWF0ZSBhIG5vZGUgYW5kIGluaXRpYWxpemUgYXMgbXVjaCBhcyBuZWVkZWQuICAqLwotCXJlc3VsdCA9IC1FTk9NRU07Ci0JaWYgKCEobm9kZSA9IGpmZnNfYWxsb2Nfbm9kZSgpKSkgewotCQlEKHByaW50aygiamZmc19yZW5hbWUoKTogQWxsb2NhdGlvbiBmYWlsZWQ6IG5vZGUgPT0gMFxuIikpOwotCQlnb3RvIGpmZnNfcmVuYW1lX2VuZDsKLQl9Ci0Jbm9kZS0+ZGF0YV9vZmZzZXQgPSAwOwotCW5vZGUtPnJlbW92ZWRfc2l6ZSA9IDA7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSByYXcgaW5vZGUuICAqLwotCXJhd19pbm9kZS5tYWdpYyA9IEpGRlNfTUFHSUNfQklUTUFTSzsKLQlyYXdfaW5vZGUuaW5vID0gZi0+aW5vOwotCXJhd19pbm9kZS5waW5vID0gbmV3X2Rpcl9mLT5pbm87Ci0vKiAgCXJhd19pbm9kZS52ZXJzaW9uID0gZi0+aGlnaGVzdF92ZXJzaW9uICsgMTsgKi8KLQlyYXdfaW5vZGUubW9kZSA9IGYtPm1vZGU7Ci0JcmF3X2lub2RlLnVpZCA9IGN1cnJlbnQtPmZzdWlkOwotCXJhd19pbm9kZS5naWQgPSBjdXJyZW50LT5mc2dpZDsKLSNpZiAwCi0JcmF3X2lub2RlLnVpZCA9IGYtPnVpZDsKLQlyYXdfaW5vZGUuZ2lkID0gZi0+Z2lkOwotI2VuZGlmCi0JcmF3X2lub2RlLmF0aW1lID0gZ2V0X3NlY29uZHMoKTsKLQlyYXdfaW5vZGUubXRpbWUgPSByYXdfaW5vZGUuYXRpbWU7Ci0JcmF3X2lub2RlLmN0aW1lID0gZi0+Y3RpbWU7Ci0JcmF3X2lub2RlLm9mZnNldCA9IDA7Ci0JcmF3X2lub2RlLmRzaXplID0gMDsKLQlyYXdfaW5vZGUucnNpemUgPSAwOwotCXJhd19pbm9kZS5uc2l6ZSA9IG5ld19kZW50cnktPmRfbmFtZS5sZW47Ci0JcmF3X2lub2RlLm5saW5rID0gZi0+bmxpbms7Ci0JcmF3X2lub2RlLnNwYXJlID0gMDsKLQlyYXdfaW5vZGUucmVuYW1lID0gMDsKLQlyYXdfaW5vZGUuZGVsZXRlZCA9IDA7Ci0KLQkvKiBTZWUgaWYgdGhlcmUgYWxyZWFkeSBleGlzdHMgYSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBhcwotCSAgIG5ld19uYW1lLiAgKi8KLQlpZiAoKGRlbF9mID0gamZmc19maW5kX2NoaWxkKG5ld19kaXJfZiwgbmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJICAgICBuZXdfZGVudHJ5LT5kX25hbWUubGVuKSkpIHsKLQkJcmF3X2lub2RlLnJlbmFtZSA9IDE7Ci0JCXJhd19pbm9kZS5kc2l6ZSA9IHNpemVvZihfX3UzMik7Ci0JCXJlbmFtZV9kYXRhID0gZGVsX2YtPmlubzsKLQl9Ci0KLQkvKiBXcml0ZSB0aGUgbmV3IG5vZGUgdG8gdGhlIGZsYXNoIG1lbW9yeS4gICovCi0JaWYgKChyZXN1bHQgPSBqZmZzX3dyaXRlX25vZGUoYywgbm9kZSwgJnJhd19pbm9kZSwKLQkJCQkgICAgICBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkgICAgICAodW5zaWduZWQgY2hhciopJnJlbmFtZV9kYXRhLCAwLCBmKSkgPCAwKSB7Ci0JCUQocHJpbnRrKCJqZmZzX3JlbmFtZSgpOiBGYWlsZWQgdG8gd3JpdGUgbm9kZSB0byBmbGFzaC5cbiIpKTsKLQkJamZmc19mcmVlX25vZGUobm9kZSk7Ci0JCWdvdG8gamZmc19yZW5hbWVfZW5kOwotCX0KLQlyYXdfaW5vZGUuZHNpemUgPSAwOwotCi0JaWYgKHJhd19pbm9kZS5yZW5hbWUpIHsKLQkJLyogVGhlIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIG11c3QgYmUgZGVsZXRlZC4gICovCi0JCS8vRklYTUUgZGVhZGxvY2sJICAgICAgICBkb3duKCZjLT5mbWMtPmdjbG9jayk7Ci0JCWlmICgocmVzdWx0ID0gamZmc19yZW1vdmUobmV3X2RpciwgbmV3X2RlbnRyeSwKLQkJCQkJICBkZWxfZi0+bW9kZSkpIDwgMCkgewotCQkJLyogVGhpcyBpcyByZWFsbHkgYmFkLiAgKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiSkZGUzogQW4gZXJyb3Igb2NjdXJyZWQgaW4gIgotCQkJICAgICAgICJyZW5hbWUoKS5cbiIpOwotCQl9Ci0JCS8vCQl1cCgmYy0+Zm1jLT5nY2xvY2spOwotCX0KLQotCWlmIChvbGRfZGlyX2YgIT0gbmV3X2Rpcl9mKSB7Ci0JCS8qIFJlbW92ZSB0aGUgZmlsZSBmcm9tIGl0cyBvbGQgcG9zaXRpb24gaW4gdGhlCi0JCSAgIGZpbGVzeXN0ZW0gdHJlZS4gICovCi0JCWpmZnNfdW5saW5rX2ZpbGVfZnJvbV90cmVlKGYpOwotCX0KLQotCS8qIEluc2VydCB0aGUgbmV3IG5vZGUgaW50byB0aGUgZmlsZSBzeXN0ZW0uICAqLwotCWlmICgocmVzdWx0ID0gamZmc19pbnNlcnRfbm9kZShjLCBmLCAmcmF3X2lub2RlLAotCQkJCSAgICAgICBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSwgbm9kZSkpIDwgMCkgewotCQlEKHByaW50ayhLRVJOX0VSUiAiamZmc19yZW5hbWUoKTogamZmc19pbnNlcnRfbm9kZSgpICIKLQkJCSAiZmFpbGVkIVxuIikpOwotCX0KLQotCWlmIChvbGRfZGlyX2YgIT0gbmV3X2Rpcl9mKSB7Ci0JCS8qIEluc2VydCB0aGUgZmlsZSB0byBpdHMgbmV3IHBvc2l0aW9uIGluIHRoZQotCQkgICBmaWxlIHN5c3RlbS4gICovCi0JCWpmZnNfaW5zZXJ0X2ZpbGVfaW50b190cmVlKGYpOwotCX0KLQotCS8qIFRoaXMgaXMgYSBraW5kIG9mIHVwZGF0ZSBvZiB0aGUgaW5vZGUgd2UncmUgYWJvdXQgdG8gbWFrZQotCSAgIGhlcmUuICBUaGlzIGlzIHdoYXQgdGhleSBkbyBpbiBleHQyZnMuICBLaW5kIG9mLiAgKi8KLQlpZiAoKGlub2RlID0gaWdldChuZXdfZGlyLT5pX3NiLCBmLT5pbm8pKSkgewotCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQlpcHV0KGlub2RlKTsKLQl9Ci0KLWpmZnNfcmVuYW1lX2VuZDoKLQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJyZW5hbWUoKTogdXAgYmlnbG9ja1xuIikpOwotCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJlc3VsdDsKLX0gLyogamZmc19yZW5hbWUoKSAgKi8KLQotCi0vKiBSZWFkIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeS4gIFVzZWQgYnkgcHJvZ3JhbXMgbGlrZSBgbHMnCi0gICBmb3IgaW5zdGFuY2UuICAqLwotc3RhdGljIGludAotamZmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQotewotCXN0cnVjdCBqZmZzX2ZpbGUgKmY7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBqZmZzX2NvbnRyb2wgKmMgPSAoc3RydWN0IGpmZnNfY29udHJvbCAqKWlub2RlLT5pX3NiLT5zX2ZzX2luZm87Ci0JaW50IGo7Ci0JaW50IGRkaW5vOwotCWxvY2tfa2VybmVsKCk7Ci0JRDMocHJpbnRrIChLRVJOX05PVElDRSAicmVhZGRpcigpOiBkb3duIGJpZ2xvY2tcbiIpKTsKLQltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCi0JRDIocHJpbnRrKCJqZmZzX3JlYWRkaXIoKTogaW5vZGU6IDB4JXAsIGZpbHA6IDB4JXBcbiIsIGlub2RlLCBmaWxwKSk7Ci0JaWYgKGZpbHAtPmZfcG9zID09IDApIHsKLQkJRDMocHJpbnRrKCJqZmZzX3JlYWRkaXIoKTogXCIuXCIgJWx1XG4iLCBpbm9kZS0+aV9pbm8pKTsKLQkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLiIsIDEsIGZpbHAtPmZfcG9zLCBpbm9kZS0+aV9pbm8sIERUX0RJUikgPCAwKSB7Ci0JCQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJyZWFkZGlyKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQkJCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWZpbHAtPmZfcG9zID0gMTsKLQl9Ci0JaWYgKGZpbHAtPmZfcG9zID09IDEpIHsKLQkJaWYgKGlub2RlLT5pX2lubyA9PSBKRkZTX01JTl9JTk8pIHsKLQkJCWRkaW5vID0gSkZGU19NSU5fSU5POwotCQl9Ci0JCWVsc2UgewotCQkJZGRpbm8gPSAoKHN0cnVjdCBqZmZzX2ZpbGUgKikKLQkJCQkgaW5vZGUtPmlfcHJpdmF0ZSktPnBpbm87Ci0JCX0KLQkJRDMocHJpbnRrKCJqZmZzX3JlYWRkaXIoKTogXCIuLlwiICV1XG4iLCBkZGlubykpOwotCQlpZiAoZmlsbGRpcihkaXJlbnQsICIuLiIsIDIsIGZpbHAtPmZfcG9zLCBkZGlubywgRFRfRElSKSA8IDApIHsKLQkJCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgInJlYWRkaXIoKTogdXAgYmlnbG9ja1xuIikpOwotCQkJbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCQkJdW5sb2NrX2tlcm5lbCgpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJZmlscC0+Zl9wb3MrKzsKLQl9Ci0JZiA9ICgoc3RydWN0IGpmZnNfZmlsZSAqKWlub2RlLT5pX3ByaXZhdGUpLT5jaGlsZHJlbjsKLQotCWogPSAyOwotCXdoaWxlKGYgJiYgKGYtPmRlbGV0ZWQgfHwgaisrIDwgZmlscC0+Zl9wb3MgKSkgewotCQlmID0gZi0+c2libGluZ19uZXh0OwotCX0KLQotCXdoaWxlIChmKSB7Ci0JCUQzKHByaW50aygiamZmc19yZWFkZGlyKCk6IFwiJXNcIiBpbm86ICV1XG4iLAotCQkJICAoZi0+bmFtZSA/IGYtPm5hbWUgOiAiIiksIGYtPmlubykpOwotCQlpZiAoZmlsbGRpcihkaXJlbnQsIGYtPm5hbWUsIGYtPm5zaXplLAotCQkJICAgIGZpbHAtPmZfcG9zICwgZi0+aW5vLCBEVF9VTktOT1dOKSA8IDApIHsKLQkJICAgICAgICBEMyhwcmludGsgKEtFUk5fTk9USUNFICJyZWFkZGlyKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQkJCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWZpbHAtPmZfcG9zKys7Ci0JCWRvIHsKLQkJCWYgPSBmLT5zaWJsaW5nX25leHQ7Ci0JCX0gd2hpbGUoZiAmJiBmLT5kZWxldGVkKTsKLQl9Ci0JRDMocHJpbnRrIChLRVJOX05PVElDRSAicmVhZGRpcigpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gZmlscC0+Zl9wb3M7Ci19IC8qIGpmZnNfcmVhZGRpcigpICAqLwotCi0KLS8qIEZpbmQgYSBmaWxlIGluIGEgZGlyZWN0b3J5LiBJZiB0aGUgZmlsZSBleGlzdHMsIHJldHVybiBpdHMKLSAgIGNvcnJlc3BvbmRpbmcgZGVudHJ5LiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoKLWpmZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXN0cnVjdCBqZmZzX2ZpbGUgKmQ7Ci0Jc3RydWN0IGpmZnNfZmlsZSAqZjsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjID0gKHN0cnVjdCBqZmZzX2NvbnRyb2wgKilkaXItPmlfc2ItPnNfZnNfaW5mbzsKLQlpbnQgbGVuOwotCWludCByID0gMDsKLQljb25zdCBjaGFyICpuYW1lOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwotCi0JbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOwotCW5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwotCi0JbG9ja19rZXJuZWwoKTsKLQotCUQzKHsKLQkJY2hhciAqcyA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCW1lbWNweShzLCBuYW1lLCBsZW4pOwotCQlzW2xlbl0gPSAnXDAnOwotCQlwcmludGsoImpmZnNfbG9va3VwKCk6IGRpcjogMHglcCwgbmFtZTogXCIlc1wiXG4iLCBkaXIsIHMpOwotCQlrZnJlZShzKTsKLQl9KTsKLQotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImxvb2t1cCgpOiBkb3duIGJpZ2xvY2tcbiIpKTsKLQltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCi0JciA9IC1FTkFNRVRPT0xPTkc7Ci0JaWYgKGxlbiA+IEpGRlNfTUFYX05BTUVfTEVOKSB7Ci0JCWdvdG8gamZmc19sb29rdXBfZW5kOwotCX0KLQotCXIgPSAtRUFDQ0VTOwotCWlmICghKGQgPSAoc3RydWN0IGpmZnNfZmlsZSAqKWRpci0+aV9wcml2YXRlKSkgewotCQlEKHByaW50aygiamZmc19sb29rdXAoKTogTm8gc3VjaCBpbm9kZSEgKCVsdSlcbiIsCi0JCQkgZGlyLT5pX2lubykpOwotCQlnb3RvIGpmZnNfbG9va3VwX2VuZDsKLQl9Ci0KLQkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgaW5vZGUgdG8gdGhlIGZpbGUuICAqLwotCi0JLyogaWdldCBjYWxscyBqZmZzX3JlYWRfaW5vZGUsIHNvIHdlIG5lZWQgdG8gZHJvcCB0aGUgYmlnbG9jawotICAgICAgICAgICBiZWZvcmUgY2FsbGluZyBpZ2V0LiAgVW5mb3J0dW5hdGVseSwgdGhlIEdDIGhhcyBhIHRlbmRlbmN5Ci0gICAgICAgICAgIHRvIHNuZWFrIGluIGhlcmUsIGJlY2F1c2UgaWdldCBzb21ldGltZXMgY2FsbHMgc2NoZWR1bGUgKCkuCi0JKi8KLQotCWlmICgobGVuID09IDEpICYmIChuYW1lWzBdID09ICcuJykpIHsKLQkJRDMocHJpbnRrIChLRVJOX05PVElDRSAibG9va3VwKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQkJbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCQlpZiAoIShpbm9kZSA9IGlnZXQoZGlyLT5pX3NiLCBkLT5pbm8pKSkgewotCQkJRChwcmludGsoImpmZnNfbG9va3VwKCk6IC4gaWdldCgpID09PiBOVUxMXG4iKSk7Ci0JCQlnb3RvIGpmZnNfbG9va3VwX2VuZF9ub19iaWdsb2NrOwotCQl9Ci0JCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImxvb2t1cCgpOiBkb3duIGJpZ2xvY2tcbiIpKTsKLQkJbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQl9IGVsc2UgaWYgKChsZW4gPT0gMikgJiYgKG5hbWVbMF0gPT0gJy4nKSAmJiAobmFtZVsxXSA9PSAnLicpKSB7Ci0JICAgICAgICBEMyhwcmludGsgKEtFUk5fTk9USUNFICJsb29rdXAoKTogdXAgYmlnbG9ja1xuIikpOwotCQltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7Ci0gCQlpZiAoIShpbm9kZSA9IGlnZXQoZGlyLT5pX3NiLCBkLT5waW5vKSkpIHsKLQkJCUQocHJpbnRrKCJqZmZzX2xvb2t1cCgpOiAuLiBpZ2V0KCkgPT0+IE5VTExcbiIpKTsKLQkJCWdvdG8gamZmc19sb29rdXBfZW5kX25vX2JpZ2xvY2s7Ci0JCX0KLQkJRDMocHJpbnRrIChLRVJOX05PVElDRSAibG9va3VwKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCQltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCX0gZWxzZSBpZiAoKGYgPSBqZmZzX2ZpbmRfY2hpbGQoZCwgbmFtZSwgbGVuKSkpIHsKLQkgICAgICAgIEQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImxvb2t1cCgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQkJaWYgKCEoaW5vZGUgPSBpZ2V0KGRpci0+aV9zYiwgZi0+aW5vKSkpIHsKLQkJCUQocHJpbnRrKCJqZmZzX2xvb2t1cCgpOiBpZ2V0KCkgPT0+IE5VTExcbiIpKTsKLQkJCWdvdG8gamZmc19sb29rdXBfZW5kX25vX2JpZ2xvY2s7Ci0JCX0KLQkJRDMocHJpbnRrIChLRVJOX05PVElDRSAibG9va3VwKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCQltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCX0gZWxzZSB7Ci0JCUQzKHByaW50aygiamZmc19sb29rdXAoKTogQ291bGRuJ3QgZmluZCB0aGUgZmlsZS4gIgotCQkJICAiZiA9IDB4JXAsIG5hbWUgPSBcIiVzXCIsIGQgPSAweCVwLCBkLT5pbm8gPSAldVxuIiwKLQkJCSAgZiwgbmFtZSwgZCwgZC0+aW5vKSk7Ci0JCWlub2RlID0gTlVMTDsKLQl9Ci0KLQlkX2FkZChkZW50cnksIGlub2RlKTsKLQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJsb29rdXAoKTogdXAgYmlnbG9ja1xuIikpOwotCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIE5VTEw7Ci0KLWpmZnNfbG9va3VwX2VuZDoKLQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJsb29rdXAoKTogdXAgYmlnbG9ja1xuIikpOwotCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQotamZmc19sb29rdXBfZW5kX25vX2JpZ2xvY2s6Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiBFUlJfUFRSKHIpOwotfSAvKiBqZmZzX2xvb2t1cCgpICAqLwotCi0KLS8qIFRyeSB0byByZWFkIGEgcGFnZSBvZiBkYXRhIGZyb20gYSBmaWxlLiAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfZG9fcmVhZHBhZ2Vfbm9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQl2b2lkICpidWY7Ci0JdW5zaWduZWQgbG9uZyByZWFkX2xlbjsKLQlpbnQgcmVzdWx0OwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAoc3RydWN0IGlub2RlKilwYWdlLT5tYXBwaW5nLT5ob3N0OwotCXN0cnVjdCBqZmZzX2ZpbGUgKmYgPSAoc3RydWN0IGpmZnNfZmlsZSAqKWlub2RlLT5pX3ByaXZhdGU7Ci0Jc3RydWN0IGpmZnNfY29udHJvbCAqYyA9IChzdHJ1Y3QgamZmc19jb250cm9sICopaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKLQlpbnQgcjsKLQlsb2ZmX3Qgb2Zmc2V0OwotCi0JRDIocHJpbnRrKCIqKipqZmZzX3JlYWRwYWdlKCk6IGZpbGUgPSBcIiVzXCIsIHBhZ2UtPmluZGV4ID0gJWx1XG4iLAotCQkgIChmLT5uYW1lID8gZi0+bmFtZSA6ICIiKSwgKGxvbmcpcGFnZS0+aW5kZXgpKTsKLQotCWdldF9wYWdlKHBhZ2UpOwotCS8qIERvbid0IFNldFBhZ2VMb2NrZWQocGFnZSksIHNob3VsZCBiZSBsb2NrZWQgYWxyZWFkeSAqLwotCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwotCUNsZWFyUGFnZUVycm9yKHBhZ2UpOwotCi0JRDMocHJpbnRrIChLRVJOX05PVElDRSAicmVhZHBhZ2UoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQotCXJlYWRfbGVuID0gMDsKLQlyZXN1bHQgPSAwOwotCW9mZnNldCA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpOwotCi0Ja21hcChwYWdlKTsKLQlidWYgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JaWYgKG9mZnNldCA8IGlub2RlLT5pX3NpemUpIHsKLQkJcmVhZF9sZW4gPSBtaW5fdChsb25nLCBpbm9kZS0+aV9zaXplIC0gb2Zmc2V0LCBQQUdFX1NJWkUpOwotCQlyID0gamZmc19yZWFkX2RhdGEoZiwgYnVmLCBvZmZzZXQsIHJlYWRfbGVuKTsKLQkJaWYgKHIgIT0gcmVhZF9sZW4pIHsKLQkJCXJlc3VsdCA9IC1FSU87Ci0JCQlEKAotCQkJICAgICAgICBwcmludGsoIioqKmpmZnNfcmVhZHBhZ2UoKTogUmVhZCBlcnJvciEgIgotCQkJCSAgICAgICAiV2FudGVkIHRvIHJlYWQgJWx1IGJ5dGVzIGJ1dCBvbmx5ICIKLQkJCQkgICAgICAgInJlYWQgJWQgYnl0ZXMuXG4iLCByZWFkX2xlbiwgcik7Ci0JCQkgICk7Ci0JCX0KLQotCX0KLQotCS8qIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiBwYXJ0aWFsIG9yIG5vIHJlYWQgaW4gYWJvdmUgKi8KLQlpZihyZWFkX2xlbiA8IFBBR0VfU0laRSkKLQkgICAgICAgIG1lbXNldChidWYgKyByZWFkX2xlbiwgMCwgUEFHRV9TSVpFIC0gcmVhZF9sZW4pOwotCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCWt1bm1hcChwYWdlKTsKLQotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgInJlYWRwYWdlKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JICAgICAgICBTZXRQYWdlRXJyb3IocGFnZSk7Ci0JfWVsc2UgewotCSAgICAgICAgU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwkgICAgICAgIAotCX0KLQotCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQotCUQzKHByaW50aygiamZmc19yZWFkcGFnZSgpOiBMZWF2aW5nLi4uXG4iKSk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfSAvKiBqZmZzX2RvX3JlYWRwYWdlX25vbG9jaygpICAqLwotCi1zdGF0aWMgaW50IGpmZnNfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCWludCByZXQgPSBqZmZzX2RvX3JlYWRwYWdlX25vbG9jayhmaWxlLCBwYWdlKTsKLQl1bmxvY2tfcGFnZShwYWdlKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBDcmVhdGUgYSBuZXcgZGlyZWN0b3J5LiAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCi17Ci0Jc3RydWN0IGpmZnNfcmF3X2lub2RlIHJhd19pbm9kZTsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjOwotCXN0cnVjdCBqZmZzX25vZGUgKm5vZGU7Ci0Jc3RydWN0IGpmZnNfZmlsZSAqZGlyX2Y7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlpbnQgZGlyX21vZGU7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JaW50IGVycjsKLQotCUQxKHsKLQkgICAgICAgIGludCBsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47Ci0JCWNoYXIgKl9uYW1lID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKLQkJbWVtY3B5KF9uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lLCBsZW4pOwotCQlfbmFtZVtsZW5dID0gJ1wwJzsKLQkJcHJpbnRrKCIqKipqZmZzX21rZGlyKCk6IGRpciA9IDB4JXAsIG5hbWUgPSBcIiVzXCIsICIKLQkJICAgICAgICJsZW4gPSAlZCwgbW9kZSA9IDB4JTA4eFxuIiwgZGlyLCBfbmFtZSwgbGVuLCBtb2RlKTsKLQkJa2ZyZWUoX25hbWUpOwotCX0pOwotCi0JbG9ja19rZXJuZWwoKTsKLQlkaXJfZiA9IGRpci0+aV9wcml2YXRlOwotCi0JQVNTRVJUKGlmICghZGlyX2YpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJqZmZzX21rZGlyKCk6IE5vIHJlZmVyZW5jZSB0byBhICIKLQkJICAgICAgICJqZmZzX2ZpbGUgc3RydWN0IGluIGlub2RlLlxuIik7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FSU87Ci0JfSk7Ci0KLQljID0gZGlyX2YtPmM7Ci0JRDMocHJpbnRrIChLRVJOX05PVElDRSAibWtkaXIoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQotCWRpcl9tb2RlID0gU19JRkRJUiB8IChtb2RlICYgKFNfSVJXWFVHT3xTX0lTVlRYKQotCQkJICAgICAgJiB+Y3VycmVudC0+ZnMtPnVtYXNrKTsKLQlpZiAoZGlyLT5pX21vZGUgJiBTX0lTR0lEKSB7Ci0JCWRpcl9tb2RlIHw9IFNfSVNHSUQ7Ci0JfQotCi0JLyogQ3JlYXRlIGEgbm9kZSBhbmQgaW5pdGlhbGl6ZSBpdCBhcyBtdWNoIGFzIG5lZWRlZC4gICovCi0JaWYgKCEobm9kZSA9IGpmZnNfYWxsb2Nfbm9kZSgpKSkgewotCQlEKHByaW50aygiamZmc19ta2RpcigpOiBBbGxvY2F0aW9uIGZhaWxlZDogbm9kZSA9PSAwXG4iKSk7Ci0JCXJlc3VsdCA9IC1FTk9NRU07Ci0JCWdvdG8gamZmc19ta2Rpcl9lbmQ7Ci0JfQotCW5vZGUtPmRhdGFfb2Zmc2V0ID0gMDsKLQlub2RlLT5yZW1vdmVkX3NpemUgPSAwOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgcmF3IGlub2RlLiAgKi8KLQlyYXdfaW5vZGUubWFnaWMgPSBKRkZTX01BR0lDX0JJVE1BU0s7Ci0JcmF3X2lub2RlLmlubyA9IGMtPm5leHRfaW5vKys7Ci0JcmF3X2lub2RlLnBpbm8gPSBkaXJfZi0+aW5vOwotCXJhd19pbm9kZS52ZXJzaW9uID0gMTsKLQlyYXdfaW5vZGUubW9kZSA9IGRpcl9tb2RlOwotCXJhd19pbm9kZS51aWQgPSBjdXJyZW50LT5mc3VpZDsKLQlyYXdfaW5vZGUuZ2lkID0gKGRpci0+aV9tb2RlICYgU19JU0dJRCkgPyBkaXItPmlfZ2lkIDogY3VycmVudC0+ZnNnaWQ7Ci0JLyoJcmF3X2lub2RlLmdpZCA9IGN1cnJlbnQtPmZzZ2lkOyAqLwotCXJhd19pbm9kZS5hdGltZSA9IGdldF9zZWNvbmRzKCk7Ci0JcmF3X2lub2RlLm10aW1lID0gcmF3X2lub2RlLmF0aW1lOwotCXJhd19pbm9kZS5jdGltZSA9IHJhd19pbm9kZS5hdGltZTsKLQlyYXdfaW5vZGUub2Zmc2V0ID0gMDsKLQlyYXdfaW5vZGUuZHNpemUgPSAwOwotCXJhd19pbm9kZS5yc2l6ZSA9IDA7Ci0JcmF3X2lub2RlLm5zaXplID0gZGVudHJ5LT5kX25hbWUubGVuOwotCXJhd19pbm9kZS5ubGluayA9IDE7Ci0JcmF3X2lub2RlLnNwYXJlID0gMDsKLQlyYXdfaW5vZGUucmVuYW1lID0gMDsKLQlyYXdfaW5vZGUuZGVsZXRlZCA9IDA7Ci0KLQkvKiBXcml0ZSB0aGUgbmV3IG5vZGUgdG8gdGhlIGZsYXNoLiAgKi8KLQlpZiAoKHJlc3VsdCA9IGpmZnNfd3JpdGVfbm9kZShjLCBub2RlLCAmcmF3X2lub2RlLAotCQkJCSAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgTlVMTCwgMCwgTlVMTCkpIDwgMCkgewotCQlEKHByaW50aygiamZmc19ta2RpcigpOiBqZmZzX3dyaXRlX25vZGUoKSBmYWlsZWQuXG4iKSk7Ci0JCWpmZnNfZnJlZV9ub2RlKG5vZGUpOwotCQlnb3RvIGpmZnNfbWtkaXJfZW5kOwotCX0KLQotCS8qIEluc2VydCB0aGUgbmV3IG5vZGUgaW50byB0aGUgZmlsZSBzeXN0ZW0uICAqLwotCWlmICgocmVzdWx0ID0gamZmc19pbnNlcnRfbm9kZShjLCBOVUxMLCAmcmF3X2lub2RlLCBkZW50cnktPmRfbmFtZS5uYW1lLAotCQkJCSAgICAgICBub2RlKSkgPCAwKSB7Ci0JCWdvdG8gamZmc19ta2Rpcl9lbmQ7Ci0JfQotCi0JaW5vZGUgPSBqZmZzX25ld19pbm9kZShkaXIsICZyYXdfaW5vZGUsICZlcnIpOwotCWlmIChpbm9kZSA9PSBOVUxMKSB7Ci0JCXJlc3VsdCA9IGVycjsKLQkJZ290byBqZmZzX21rZGlyX2VuZDsKLQl9Ci0KLQlpbm9kZS0+aV9vcCA9ICZqZmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotCWlub2RlLT5pX2ZvcCA9ICZqZmZzX2Rpcl9vcGVyYXRpb25zOwotCi0JbWFya19pbm9kZV9kaXJ0eShkaXIpOwotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0KLQlyZXN1bHQgPSAwOwotamZmc19ta2Rpcl9lbmQ6Ci0JRDMocHJpbnRrIChLRVJOX05PVElDRSAibWtkaXIoKTogdXAgYmlnbG9ja1xuIikpOwotCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJlc3VsdDsKLX0gLyogamZmc19ta2RpcigpICAqLwotCi0KLS8qIFJlbW92ZSBhIGRpcmVjdG9yeS4gICovCi1zdGF0aWMgaW50Ci1qZmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0Jc3RydWN0IGpmZnNfY29udHJvbCAqYyA9IChzdHJ1Y3QgamZmc19jb250cm9sICopZGlyLT5pX3NiLT5zX2ZzX2luZm87Ci0JaW50IHJldDsKLQlEMyhwcmludGsoIioqKmpmZnNfcm1kaXIoKVxuIikpOwotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgInJtZGlyKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCWxvY2tfa2VybmVsKCk7Ci0JbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQlyZXQgPSBqZmZzX3JlbW92ZShkaXIsIGRlbnRyeSwgU19JRkRJUik7Ci0JRDMocHJpbnRrIChLRVJOX05PVElDRSAicm1kaXIoKTogdXAgYmlnbG9ja1xuIikpOwotCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0vKiBSZW1vdmUgYW55IGtpbmQgb2YgZmlsZSBleGNlcHQgZm9yIGRpcmVjdG9yaWVzLiAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0Jc3RydWN0IGpmZnNfY29udHJvbCAqYyA9IChzdHJ1Y3QgamZmc19jb250cm9sICopZGlyLT5pX3NiLT5zX2ZzX2luZm87Ci0JaW50IHJldDsgCi0KLQlsb2NrX2tlcm5lbCgpOwotCUQzKHByaW50aygiKioqamZmc191bmxpbmsoKVxuIikpOwotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgInVubGluaygpOiBkb3duIGJpZ2xvY2tcbiIpKTsKLQltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCXJldCA9IGpmZnNfcmVtb3ZlKGRpciwgZGVudHJ5LCAwKTsKLQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJ1bmxpbmsoKTogdXAgYmlnbG9ja1xuIikpOwotCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0vKiBSZW1vdmUgYSBKRkZTIGVudHJ5LCBpLmUuIHBsYWluIGZpbGVzLCBkaXJlY3RvcmllcywgZXRjLiAgSGVyZSB3ZQotICAgc2hvdWxkbid0IHRlc3QgZm9yIGZyZWUgc3BhY2Ugb24gdGhlIGRldmljZS4gICovCi1zdGF0aWMgaW50Ci1qZmZzX3JlbW92ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgamZmc19yYXdfaW5vZGUgcmF3X2lub2RlOwotCXN0cnVjdCBqZmZzX2NvbnRyb2wgKmM7Ci0Jc3RydWN0IGpmZnNfZmlsZSAqZGlyX2Y7IC8qIFRoZSBmaWxlLXRvLXJlbW92ZSdzIHBhcmVudC4gICovCi0Jc3RydWN0IGpmZnNfZmlsZSAqZGVsX2Y7IC8qIFRoZSBmaWxlIHRvIHJlbW92ZS4gICovCi0Jc3RydWN0IGpmZnNfbm9kZSAqZGVsX25vZGU7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlEMSh7Ci0JCWludCBsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47Ci0JCWNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwotCQljaGFyICpfbmFtZSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCW1lbWNweShfbmFtZSwgbmFtZSwgbGVuKTsKLQkJX25hbWVbbGVuXSA9ICdcMCc7Ci0JCXByaW50aygiKioqamZmc19yZW1vdmUoKTogZmlsZSA9IFwiJXNcIiwgaW5vID0gJWxkXG4iLCBfbmFtZSwgZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7Ci0JCWtmcmVlKF9uYW1lKTsKLQl9KTsKLQotCWRpcl9mID0gZGlyLT5pX3ByaXZhdGU7Ci0JYyA9IGRpcl9mLT5jOwotCi0JcmVzdWx0ID0gLUVOT0VOVDsKLQlpZiAoIShkZWxfZiA9IGpmZnNfZmluZF9jaGlsZChkaXJfZiwgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkgICAgICBkZW50cnktPmRfbmFtZS5sZW4pKSkgewotCQlEKHByaW50aygiamZmc19yZW1vdmUoKTogamZmc19maW5kX2NoaWxkKCkgZmFpbGVkLlxuIikpOwotCQlnb3RvIGpmZnNfcmVtb3ZlX2VuZDsKLQl9Ci0KLQlpZiAoU19JU0RJUih0eXBlKSkgewotCQlzdHJ1Y3QgamZmc19maWxlICpjaGlsZCA9IGRlbF9mLT5jaGlsZHJlbjsKLQkJd2hpbGUoY2hpbGQpIHsKLQkJCWlmKCAhY2hpbGQtPmRlbGV0ZWQgKSB7Ci0JCQkJcmVzdWx0ID0gLUVOT1RFTVBUWTsKLQkJCQlnb3RvIGpmZnNfcmVtb3ZlX2VuZDsKLQkJCX0KLQkJCWNoaWxkID0gY2hpbGQtPnNpYmxpbmdfbmV4dDsKLQkJfQotCX0gICAgICAgICAgICAKLQllbHNlIGlmIChTX0lTRElSKGRlbF9mLT5tb2RlKSkgewotCQlEKHByaW50aygiamZmc19yZW1vdmUoKTogbm9kZSBpcyBhIGRpcmVjdG9yeSAiCi0JCQkgImJ1dCBpdCBzaG91bGRuJ3QgYmUuXG4iKSk7Ci0JCXJlc3VsdCA9IC1FUEVSTTsKLQkJZ290byBqZmZzX3JlbW92ZV9lbmQ7Ci0JfQotCi0JaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0KLQlyZXN1bHQgPSAtRUlPOwotCWlmIChkZWxfZi0+aW5vICE9IGlub2RlLT5pX2lubykKLQkJZ290byBqZmZzX3JlbW92ZV9lbmQ7Ci0KLQlpZiAoIWlub2RlLT5pX25saW5rKSB7Ci0JCXByaW50aygiRGVsZXRpbmcgbm9uZXhpc3RlbnQgZmlsZSBpbm9kZTogJWx1LCBubGluazogJWRcbiIsCi0JCSAgICAgICBpbm9kZS0+aV9pbm8sIGlub2RlLT5pX25saW5rKTsKLQkJaW5vZGUtPmlfbmxpbms9MTsKLQl9Ci0KLQkvKiBDcmVhdGUgYSBub2RlIGZvciB0aGUgZGVsZXRpb24uICAqLwotCXJlc3VsdCA9IC1FTk9NRU07Ci0JaWYgKCEoZGVsX25vZGUgPSBqZmZzX2FsbG9jX25vZGUoKSkpIHsKLQkJRChwcmludGsoImpmZnNfcmVtb3ZlKCk6IEFsbG9jYXRpb24gZmFpbGVkIVxuIikpOwotCQlnb3RvIGpmZnNfcmVtb3ZlX2VuZDsKLQl9Ci0JZGVsX25vZGUtPmRhdGFfb2Zmc2V0ID0gMDsKLQlkZWxfbm9kZS0+cmVtb3ZlZF9zaXplID0gMDsKLQotCS8qIEluaXRpYWxpemUgdGhlIHJhdyBpbm9kZS4gICovCi0JcmF3X2lub2RlLm1hZ2ljID0gSkZGU19NQUdJQ19CSVRNQVNLOwotCXJhd19pbm9kZS5pbm8gPSBkZWxfZi0+aW5vOwotCXJhd19pbm9kZS5waW5vID0gZGVsX2YtPnBpbm87Ci0vKiAgCXJhd19pbm9kZS52ZXJzaW9uID0gZGVsX2YtPmhpZ2hlc3RfdmVyc2lvbiArIDE7ICovCi0JcmF3X2lub2RlLm1vZGUgPSBkZWxfZi0+bW9kZTsKLQlyYXdfaW5vZGUudWlkID0gY3VycmVudC0+ZnN1aWQ7Ci0JcmF3X2lub2RlLmdpZCA9IGN1cnJlbnQtPmZzZ2lkOwotCXJhd19pbm9kZS5hdGltZSA9IGdldF9zZWNvbmRzKCk7Ci0JcmF3X2lub2RlLm10aW1lID0gZGVsX2YtPm10aW1lOwotCXJhd19pbm9kZS5jdGltZSA9IHJhd19pbm9kZS5hdGltZTsKLQlyYXdfaW5vZGUub2Zmc2V0ID0gMDsKLQlyYXdfaW5vZGUuZHNpemUgPSAwOwotCXJhd19pbm9kZS5yc2l6ZSA9IDA7Ci0JcmF3X2lub2RlLm5zaXplID0gMDsKLQlyYXdfaW5vZGUubmxpbmsgPSBkZWxfZi0+bmxpbms7Ci0JcmF3X2lub2RlLnNwYXJlID0gMDsKLQlyYXdfaW5vZGUucmVuYW1lID0gMDsKLQlyYXdfaW5vZGUuZGVsZXRlZCA9IDE7Ci0KLQkvKiBXcml0ZSB0aGUgbmV3IG5vZGUgdG8gdGhlIGZsYXNoIG1lbW9yeS4gICovCi0JaWYgKGpmZnNfd3JpdGVfbm9kZShjLCBkZWxfbm9kZSwgJnJhd19pbm9kZSwgTlVMTCwgTlVMTCwgMSwgZGVsX2YpIDwgMCkgewotCQlqZmZzX2ZyZWVfbm9kZShkZWxfbm9kZSk7Ci0JCXJlc3VsdCA9IC1FSU87Ci0JCWdvdG8gamZmc19yZW1vdmVfZW5kOwotCX0KLQotCS8qIFVwZGF0ZSB0aGUgZmlsZS4gIFRoaXMgb3BlcmF0aW9uIHdpbGwgbWFrZSB0aGUgZmlsZSBkaXNhcHBlYXIKLQkgICBmcm9tIHRoZSBpbi1tZW1vcnkgZmlsZSBzeXN0ZW0gc3RydWN0dXJlcy4gICovCi0JamZmc19pbnNlcnRfbm9kZShjLCBkZWxfZiwgJnJhd19pbm9kZSwgTlVMTCwgZGVsX25vZGUpOwotCi0JZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQltYXJrX2lub2RlX2RpcnR5KGRpcik7Ci0JaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWU7Ci0JaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwotCi0JZF9kZWxldGUoZGVudHJ5KTsJLyogVGhpcyBhbHNvIGZyZWVzIHRoZSBpbm9kZSAqLwotCi0JcmVzdWx0ID0gMDsKLWpmZnNfcmVtb3ZlX2VuZDoKLQlyZXR1cm4gcmVzdWx0OwotfSAvKiBqZmZzX3JlbW92ZSgpICAqLwotCi0KLXN0YXRpYyBpbnQKLWpmZnNfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsIGRldl90IHJkZXYpCi17Ci0Jc3RydWN0IGpmZnNfcmF3X2lub2RlIHJhd19pbm9kZTsKLQlzdHJ1Y3QgamZmc19maWxlICpkaXJfZjsKLQlzdHJ1Y3QgamZmc19ub2RlICpub2RlID0gTlVMTDsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JdTE2IGRhdGEgPSBvbGRfZW5jb2RlX2RldihyZGV2KTsKLQlpbnQgZXJyOwotCi0JRDEocHJpbnRrKCIqKipqZmZzX21rbm9kKClcbiIpKTsKLQotCWlmICghb2xkX3ZhbGlkX2RldihyZGV2KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbG9ja19rZXJuZWwoKTsKLQlkaXJfZiA9IGRpci0+aV9wcml2YXRlOwotCWMgPSBkaXJfZi0+YzsKLQotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgIm1rbm9kKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCW11dGV4X2xvY2soJmMtPmZtYy0+YmlnbG9jayk7Ci0KLQkvKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgbm9kZS4gICovCi0JaWYgKCEobm9kZSA9IGpmZnNfYWxsb2Nfbm9kZSgpKSkgewotCQlEKHByaW50aygiamZmc19ta25vZCgpOiBBbGxvY2F0aW9uIGZhaWxlZCFcbiIpKTsKLQkJcmVzdWx0ID0gLUVOT01FTTsKLQkJZ290byBqZmZzX21rbm9kX2VycjsKLQl9Ci0Jbm9kZS0+ZGF0YV9vZmZzZXQgPSAwOwotCW5vZGUtPnJlbW92ZWRfc2l6ZSA9IDA7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSByYXcgaW5vZGUuICAqLwotCXJhd19pbm9kZS5tYWdpYyA9IEpGRlNfTUFHSUNfQklUTUFTSzsKLQlyYXdfaW5vZGUuaW5vID0gYy0+bmV4dF9pbm8rKzsKLQlyYXdfaW5vZGUucGlubyA9IGRpcl9mLT5pbm87Ci0JcmF3X2lub2RlLnZlcnNpb24gPSAxOwotCXJhd19pbm9kZS5tb2RlID0gbW9kZTsKLQlyYXdfaW5vZGUudWlkID0gY3VycmVudC0+ZnN1aWQ7Ci0JcmF3X2lub2RlLmdpZCA9IChkaXItPmlfbW9kZSAmIFNfSVNHSUQpID8gZGlyLT5pX2dpZCA6IGN1cnJlbnQtPmZzZ2lkOwotCS8qCXJhd19pbm9kZS5naWQgPSBjdXJyZW50LT5mc2dpZDsgKi8KLQlyYXdfaW5vZGUuYXRpbWUgPSBnZXRfc2Vjb25kcygpOwotCXJhd19pbm9kZS5tdGltZSA9IHJhd19pbm9kZS5hdGltZTsKLQlyYXdfaW5vZGUuY3RpbWUgPSByYXdfaW5vZGUuYXRpbWU7Ci0JcmF3X2lub2RlLm9mZnNldCA9IDA7Ci0JcmF3X2lub2RlLmRzaXplID0gMjsKLQlyYXdfaW5vZGUucnNpemUgPSAwOwotCXJhd19pbm9kZS5uc2l6ZSA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKLQlyYXdfaW5vZGUubmxpbmsgPSAxOwotCXJhd19pbm9kZS5zcGFyZSA9IDA7Ci0JcmF3X2lub2RlLnJlbmFtZSA9IDA7Ci0JcmF3X2lub2RlLmRlbGV0ZWQgPSAwOwotCi0JLyogV3JpdGUgdGhlIG5ldyBub2RlIHRvIHRoZSBmbGFzaC4gICovCi0JaWYgKChlcnIgPSBqZmZzX3dyaXRlX25vZGUoYywgbm9kZSwgJnJhd19pbm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkgICAodW5zaWduZWQgY2hhciAqKSZkYXRhLCAwLCBOVUxMKSkgPCAwKSB7Ci0JCUQocHJpbnRrKCJqZmZzX21rbm9kKCk6IGpmZnNfd3JpdGVfbm9kZSgpIGZhaWxlZC5cbiIpKTsKLQkJcmVzdWx0ID0gZXJyOwotCQlnb3RvIGpmZnNfbWtub2RfZXJyOwotCX0KLQotCS8qIEluc2VydCB0aGUgbmV3IG5vZGUgaW50byB0aGUgZmlsZSBzeXN0ZW0uICAqLwotCWlmICgoZXJyID0gamZmc19pbnNlcnRfbm9kZShjLCBOVUxMLCAmcmF3X2lub2RlLCBkZW50cnktPmRfbmFtZS5uYW1lLAotCQkJCSAgICBub2RlKSkgPCAwKSB7Ci0JCXJlc3VsdCA9IGVycjsKLQkJZ290byBqZmZzX21rbm9kX2VuZDsKLQl9Ci0KLQlpbm9kZSA9IGpmZnNfbmV3X2lub2RlKGRpciwgJnJhd19pbm9kZSwgJmVycik7Ci0JaWYgKGlub2RlID09IE5VTEwpIHsKLQkJcmVzdWx0ID0gZXJyOwotCQlnb3RvIGpmZnNfbWtub2RfZW5kOwotCX0KLQotCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgcmRldik7Ci0KLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCi0JZ290byBqZmZzX21rbm9kX2VuZDsKLQotamZmc19ta25vZF9lcnI6Ci0JaWYgKG5vZGUpIHsKLQkJamZmc19mcmVlX25vZGUobm9kZSk7Ci0JfQotCi1qZmZzX21rbm9kX2VuZDoKLQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJta25vZCgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gcmVzdWx0OwotfSAvKiBqZmZzX21rbm9kKCkgICovCi0KLQotc3RhdGljIGludAotamZmc19zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpCi17Ci0Jc3RydWN0IGpmZnNfcmF3X2lub2RlIHJhd19pbm9kZTsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjOwotCXN0cnVjdCBqZmZzX2ZpbGUgKmRpcl9mOwotCXN0cnVjdCBqZmZzX25vZGUgKm5vZGU7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQotCWludCBzeW1uYW1lX2xlbiA9IHN0cmxlbihzeW1uYW1lKTsKLQlpbnQgZXJyOwotCi0JbG9ja19rZXJuZWwoKTsKLQlEMSh7Ci0JCWludCBsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47IAotCQljaGFyICpfbmFtZSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWNoYXIgKl9zeW1uYW1lID0ga21hbGxvYyhzeW1uYW1lX2xlbiArIDEsIEdGUF9LRVJORUwpOwotCQltZW1jcHkoX25hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGxlbik7Ci0JCV9uYW1lW2xlbl0gPSAnXDAnOwotCQltZW1jcHkoX3N5bW5hbWUsIHN5bW5hbWUsIHN5bW5hbWVfbGVuKTsKLQkJX3N5bW5hbWVbc3ltbmFtZV9sZW5dID0gJ1wwJzsKLQkJcHJpbnRrKCIqKipqZmZzX3N5bWxpbmsoKTogZGlyID0gMHglcCwgIgotCQkgICAgICAgImRlbnRyeS0+ZG5hbWUubmFtZSA9IFwiJXNcIiwgIgotCQkgICAgICAgInN5bW5hbWUgPSBcIiVzXCJcbiIsIGRpciwgX25hbWUsIF9zeW1uYW1lKTsKLQkJa2ZyZWUoX25hbWUpOwotCQlrZnJlZShfc3ltbmFtZSk7Ci0JfSk7Ci0KLQlkaXJfZiA9IGRpci0+aV9wcml2YXRlOwotCUFTU0VSVChpZiAoIWRpcl9mKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiamZmc19zeW1saW5rKCk6IE5vIHJlZmVyZW5jZSB0byBhICIKLQkJICAgICAgICJqZmZzX2ZpbGUgc3RydWN0IGluIGlub2RlLlxuIik7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FSU87Ci0JfSk7Ci0KLQljID0gZGlyX2YtPmM7Ci0KLQkvKiBDcmVhdGUgYSBub2RlIGFuZCBpbml0aWFsaXplIGl0IGFzIG11Y2ggYXMgbmVlZGVkLiAgKi8KLQlpZiAoIShub2RlID0gamZmc19hbGxvY19ub2RlKCkpKSB7Ci0JCUQocHJpbnRrKCJqZmZzX3N5bWxpbmsoKTogQWxsb2NhdGlvbiBmYWlsZWQ6IG5vZGUgPSBOVUxMXG4iKSk7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgInN5bWxpbmsoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQotCW5vZGUtPmRhdGFfb2Zmc2V0ID0gMDsKLQlub2RlLT5yZW1vdmVkX3NpemUgPSAwOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgcmF3IGlub2RlLiAgKi8KLQlyYXdfaW5vZGUubWFnaWMgPSBKRkZTX01BR0lDX0JJVE1BU0s7Ci0JcmF3X2lub2RlLmlubyA9IGMtPm5leHRfaW5vKys7Ci0JcmF3X2lub2RlLnBpbm8gPSBkaXJfZi0+aW5vOwotCXJhd19pbm9kZS52ZXJzaW9uID0gMTsKLQlyYXdfaW5vZGUubW9kZSA9IFNfSUZMTksgfCBTX0lSV1hVR087Ci0JcmF3X2lub2RlLnVpZCA9IGN1cnJlbnQtPmZzdWlkOwotCXJhd19pbm9kZS5naWQgPSAoZGlyLT5pX21vZGUgJiBTX0lTR0lEKSA/IGRpci0+aV9naWQgOiBjdXJyZW50LT5mc2dpZDsKLQlyYXdfaW5vZGUuYXRpbWUgPSBnZXRfc2Vjb25kcygpOwotCXJhd19pbm9kZS5tdGltZSA9IHJhd19pbm9kZS5hdGltZTsKLQlyYXdfaW5vZGUuY3RpbWUgPSByYXdfaW5vZGUuYXRpbWU7Ci0JcmF3X2lub2RlLm9mZnNldCA9IDA7Ci0JcmF3X2lub2RlLmRzaXplID0gc3ltbmFtZV9sZW47Ci0JcmF3X2lub2RlLnJzaXplID0gMDsKLQlyYXdfaW5vZGUubnNpemUgPSBkZW50cnktPmRfbmFtZS5sZW47Ci0JcmF3X2lub2RlLm5saW5rID0gMTsKLQlyYXdfaW5vZGUuc3BhcmUgPSAwOwotCXJhd19pbm9kZS5yZW5hbWUgPSAwOwotCXJhd19pbm9kZS5kZWxldGVkID0gMDsKLQotCS8qIFdyaXRlIHRoZSBuZXcgbm9kZSB0byB0aGUgZmxhc2guICAqLwotCWlmICgoZXJyID0gamZmc193cml0ZV9ub2RlKGMsIG5vZGUsICZyYXdfaW5vZGUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilzeW1uYW1lLCAwLCBOVUxMKSkgPCAwKSB7Ci0JCUQocHJpbnRrKCJqZmZzX3N5bWxpbmsoKTogamZmc193cml0ZV9ub2RlKCkgZmFpbGVkLlxuIikpOwotCQlqZmZzX2ZyZWVfbm9kZShub2RlKTsKLQkJZ290byBqZmZzX3N5bWxpbmtfZW5kOwotCX0KLQotCS8qIEluc2VydCB0aGUgbmV3IG5vZGUgaW50byB0aGUgZmlsZSBzeXN0ZW0uICAqLwotCWlmICgoZXJyID0gamZmc19pbnNlcnRfbm9kZShjLCBOVUxMLCAmcmF3X2lub2RlLCBkZW50cnktPmRfbmFtZS5uYW1lLAotCQkJCSAgICBub2RlKSkgPCAwKSB7Ci0JCWdvdG8gamZmc19zeW1saW5rX2VuZDsKLQl9Ci0KLQlpbm9kZSA9IGpmZnNfbmV3X2lub2RlKGRpciwgJnJhd19pbm9kZSwgJmVycik7Ci0JaWYgKGlub2RlID09IE5VTEwpIHsKLQkJZ290byBqZmZzX3N5bWxpbmtfZW5kOwotCX0KLQllcnIgPSAwOwotCWlub2RlLT5pX29wID0gJnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwotCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmpmZnNfYWRkcmVzc19vcGVyYXRpb25zOwotCi0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLSBqZmZzX3N5bWxpbmtfZW5kOgotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgInN5bWxpbmsoKTogdXAgYmlnbG9ja1xuIikpOwotCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIGVycjsKLX0gLyogamZmc19zeW1saW5rKCkgICovCi0KLQotLyogQ3JlYXRlIGFuIGlub2RlIGluc2lkZSBhIEpGRlMgZGlyZWN0b3J5IChkaXIpIGFuZCByZXR1cm4gaXQuCi0gKgotICogQnkgdGhlIHRpbWUgdGhpcyBpcyBjYWxsZWQsIHdlIGFscmVhZHkgaGF2ZSBjcmVhdGVkCi0gKiB0aGUgZGlyZWN0b3J5IGNhY2hlIGVudHJ5IGZvciB0aGUgbmV3IGZpbGUsIGJ1dCBpdAotICogaXMgc28gZmFyIG5lZ2F0aXZlIC0gaXQgaGFzIG5vIGlub2RlLgotICoKLSAqIElmIHRoZSBjcmVhdGUgc3VjY2VlZHMsIHdlIGZpbGwgaW4gdGhlIGlub2RlIGluZm9ybWF0aW9uCi0gKiB3aXRoIGRfaW5zdGFudGlhdGUoKS4KLSAqLwotc3RhdGljIGludAotamZmc19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCi0JCXN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXN0cnVjdCBqZmZzX3Jhd19pbm9kZSByYXdfaW5vZGU7Ci0Jc3RydWN0IGpmZnNfY29udHJvbCAqYzsKLQlzdHJ1Y3QgamZmc19ub2RlICpub2RlOwotCXN0cnVjdCBqZmZzX2ZpbGUgKmRpcl9mOyAvKiBKRkZTIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkaXJlY3RvcnkuICAqLwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW50IGVycjsKLQotCWxvY2tfa2VybmVsKCk7Ci0JRDEoewotCQlpbnQgbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOwotCQljaGFyICpzID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKLQkJbWVtY3B5KHMsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGxlbik7Ci0JCXNbbGVuXSA9ICdcMCc7Ci0JCXByaW50aygiamZmc19jcmVhdGUoKTogZGlyOiAweCVwLCBuYW1lOiBcIiVzXCJcbiIsIGRpciwgcyk7Ci0JCWtmcmVlKHMpOwotCX0pOwotCi0JZGlyX2YgPSBkaXItPmlfcHJpdmF0ZTsKLQlBU1NFUlQoaWYgKCFkaXJfZikgewotCQlwcmludGsoS0VSTl9FUlIgImpmZnNfY3JlYXRlKCk6IE5vIHJlZmVyZW5jZSB0byBhICIKLQkJICAgICAgICJqZmZzX2ZpbGUgc3RydWN0IGluIGlub2RlLlxuIik7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FSU87Ci0JfSk7Ci0KLQljID0gZGlyX2YtPmM7Ci0KLQkvKiBDcmVhdGUgYSBub2RlIGFuZCBpbml0aWFsaXplIGFzIG11Y2ggYXMgbmVlZGVkLiAgKi8KLQlpZiAoIShub2RlID0gamZmc19hbGxvY19ub2RlKCkpKSB7Ci0JCUQocHJpbnRrKCJqZmZzX2NyZWF0ZSgpOiBBbGxvY2F0aW9uIGZhaWxlZDogbm9kZSA9PSAwXG4iKSk7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImNyZWF0ZSgpOiBkb3duIGJpZ2xvY2tcbiIpKTsKLQltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwotCi0Jbm9kZS0+ZGF0YV9vZmZzZXQgPSAwOwotCW5vZGUtPnJlbW92ZWRfc2l6ZSA9IDA7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSByYXcgaW5vZGUuICAqLwotCXJhd19pbm9kZS5tYWdpYyA9IEpGRlNfTUFHSUNfQklUTUFTSzsKLQlyYXdfaW5vZGUuaW5vID0gYy0+bmV4dF9pbm8rKzsKLQlyYXdfaW5vZGUucGlubyA9IGRpcl9mLT5pbm87Ci0JcmF3X2lub2RlLnZlcnNpb24gPSAxOwotCXJhd19pbm9kZS5tb2RlID0gbW9kZTsKLQlyYXdfaW5vZGUudWlkID0gY3VycmVudC0+ZnN1aWQ7Ci0JcmF3X2lub2RlLmdpZCA9IChkaXItPmlfbW9kZSAmIFNfSVNHSUQpID8gZGlyLT5pX2dpZCA6IGN1cnJlbnQtPmZzZ2lkOwotCXJhd19pbm9kZS5hdGltZSA9IGdldF9zZWNvbmRzKCk7Ci0JcmF3X2lub2RlLm10aW1lID0gcmF3X2lub2RlLmF0aW1lOwotCXJhd19pbm9kZS5jdGltZSA9IHJhd19pbm9kZS5hdGltZTsKLQlyYXdfaW5vZGUub2Zmc2V0ID0gMDsKLQlyYXdfaW5vZGUuZHNpemUgPSAwOwotCXJhd19pbm9kZS5yc2l6ZSA9IDA7Ci0JcmF3X2lub2RlLm5zaXplID0gZGVudHJ5LT5kX25hbWUubGVuOwotCXJhd19pbm9kZS5ubGluayA9IDE7Ci0JcmF3X2lub2RlLnNwYXJlID0gMDsKLQlyYXdfaW5vZGUucmVuYW1lID0gMDsKLQlyYXdfaW5vZGUuZGVsZXRlZCA9IDA7Ci0KLQkvKiBXcml0ZSB0aGUgbmV3IG5vZGUgdG8gdGhlIGZsYXNoLiAgKi8KLQlpZiAoKGVyciA9IGpmZnNfd3JpdGVfbm9kZShjLCBub2RlLCAmcmF3X2lub2RlLAotCQkJCSAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIE5VTEwsIDAsIE5VTEwpKSA8IDApIHsKLQkJRChwcmludGsoImpmZnNfY3JlYXRlKCk6IGpmZnNfd3JpdGVfbm9kZSgpIGZhaWxlZC5cbiIpKTsKLQkJamZmc19mcmVlX25vZGUobm9kZSk7Ci0JCWdvdG8gamZmc19jcmVhdGVfZW5kOwotCX0KLQotCS8qIEluc2VydCB0aGUgbmV3IG5vZGUgaW50byB0aGUgZmlsZSBzeXN0ZW0uICAqLwotCWlmICgoZXJyID0gamZmc19pbnNlcnRfbm9kZShjLCBOVUxMLCAmcmF3X2lub2RlLCBkZW50cnktPmRfbmFtZS5uYW1lLAotCQkJCSAgICBub2RlKSkgPCAwKSB7Ci0JCWdvdG8gamZmc19jcmVhdGVfZW5kOwotCX0KLQotCS8qIEluaXRpYWxpemUgYW4gaW5vZGUuICAqLwotCWlub2RlID0gamZmc19uZXdfaW5vZGUoZGlyLCAmcmF3X2lub2RlLCAmZXJyKTsKLQlpZiAoaW5vZGUgPT0gTlVMTCkgewotCQlnb3RvIGpmZnNfY3JlYXRlX2VuZDsKLQl9Ci0JZXJyID0gMDsKLQlpbm9kZS0+aV9vcCA9ICZqZmZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLQlpbm9kZS0+aV9mb3AgPSAmamZmc19maWxlX29wZXJhdGlvbnM7Ci0JaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmamZmc19hZGRyZXNzX29wZXJhdGlvbnM7Ci0JaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcyA9IDA7Ci0KLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotIGpmZnNfY3JlYXRlX2VuZDoKLQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJjcmVhdGUoKTogdXAgYmlnbG9ja1xuIikpOwotCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIGVycjsKLX0gLyogamZmc19jcmVhdGUoKSAgKi8KLQotCi0vKiBXcml0ZSwgYXBwZW5kIG9yIHJld3JpdGUgZGF0YSB0byBhbiBleGlzdGluZyBmaWxlLiAgKi8KLXN0YXRpYyBzc2l6ZV90Ci1qZmZzX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQlsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGpmZnNfcmF3X2lub2RlIHJhd19pbm9kZTsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjOwotCXN0cnVjdCBqZmZzX2ZpbGUgKmY7Ci0Jc3RydWN0IGpmZnNfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JaW50IHJlY292ZXJhYmxlID0gMDsKLQlzaXplX3Qgd3JpdHRlbiA9IDA7Ci0JX191MzIgdGhpc2NvdW50ID0gY291bnQ7Ci0JbG9mZl90IHBvcyA9ICpwcG9zOwotCWludCBlcnI7Ci0KLQlpbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0KLQlEMihwcmludGsoIioqKmpmZnNfZmlsZV93cml0ZSgpOiBpbm9kZTogMHglcCAoaW5vOiAlbHUpLCAiCi0JCSAgImZpbHA6IDB4JXAsIGJ1ZjogMHglcCwgY291bnQ6ICVkXG4iLAotCQkgIGlub2RlLCBpbm9kZS0+aV9pbm8sIGZpbHAsIGJ1ZiwgY291bnQpKTsKLQotI2lmIDAKLQlpZiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpIHsKLQkJRChwcmludGsoImpmZnNfZmlsZV93cml0ZSgpOiBNU19SRE9OTFlcbiIpKTsKLQkJZXJyID0gLUVST0ZTOwotCQlnb3RvIG91dF9pc2VtOwotCX0KLSNlbmRpZgkKLQllcnIgPSAtRUlOVkFMOwotCi0JaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0JCUQocHJpbnRrKCJqZmZzX2ZpbGVfd3JpdGUoKTogaW5vZGUtPmlfbW9kZSA9PSAweCUwOHhcbiIsCi0JCQkJaW5vZGUtPmlfbW9kZSkpOwotCQlnb3RvIG91dF9pc2VtOwotCX0KLQotCWlmICghKGYgPSBpbm9kZS0+aV9wcml2YXRlKSkgewotCQlEKHByaW50aygiamZmc19maWxlX3dyaXRlKCk6IGlub2RlLT5pX3ByaXZhdGUgPSAweCVwXG4iLAotCQkJCWlub2RlLT5pX3ByaXZhdGUpKTsKLQkJZ290byBvdXRfaXNlbTsKLQl9Ci0KLQljID0gZi0+YzsKLQotCS8qCi0JICogVGhpcyB3aWxsIG5ldmVyIHRyaWdnZXIgd2l0aCBzYW5lIHBhZ2Ugc2l6ZXMuICBsZWF2ZSBpdCBpbgotCSAqIGFueXdheSwgc2luY2UgSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBtZXJnZSBsYXJnZXIgd3JpdGVzCi0JICogKHRoZSBjdXJyZW50IGlkZWEgaXMgdG8gcG9rZSBhIHRocmVhZCB0aGF0IGRvZXMgdGhlIGFjdHVhbAotCSAqIEkvTyBhbmQgc3RhcnRzIGJ5IGRvaW5nIGEgbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpLiAgdGhlbiB3ZQotCSAqIHdvdWxkIG5lZWQgdG8gZ2V0IHRoZSBwYWdlIGNhY2hlIHBhZ2VzIGFuZCBoYXZlIGEgbGlzdCBvZgotCSAqIEkvTyByZXF1ZXN0cyBhbmQgZG8gd3JpdGUtbWVyZ2luZyBoZXJlLgotCSAqIC0tIHBydW1wZgotCSAqLwotCXRoaXNjb3VudCA9IG1pbihjLT5mbWMtPm1heF9jaHVua19zaXplIC0gc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSksIGNvdW50KTsKLQotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImZpbGVfd3JpdGUoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQotCS8qIFVyZ2guIFBPU0lYIHNheXMgd2UgY2FuIGRvIHNob3J0IHdyaXRlcyBpZiB3ZSBmZWVsIGxpa2UgaXQuIAotCSAqIEluIHByYWN0aWNlLCB3ZSBjYW4ndC4gTm90aGluZyB3aWxsIGNvcGUuIFNvIHdlIGxvb3AgdW50aWwKLQkgKiB3ZSdyZSBkb25lLgotCSAqCi0JICogPF9BbmFyY2h5Xz4gcG9zaXggYW5kIHJlYWxpdHkgYXJlIG5vdCBpbnRlcmNvbm5lY3RlZCBvbiB0aGlzIGlzc3VlCi0JICovCi0Jd2hpbGUgKGNvdW50KSB7Ci0JCS8qIFRoaW5ncyBhcmUgZ29pbmcgdG8gYmUgd3JpdHRlbiBzbyB3ZSBjb3VsZCBhbGxvY2F0ZSBhbmQKLQkJICAgaW5pdGlhbGl6ZSB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBub3cuICAqLwotCQlpZiAoIShub2RlID0gamZmc19hbGxvY19ub2RlKCkpKSB7Ci0JCQlEKHByaW50aygiamZmc19maWxlX3dyaXRlKCk6IG5vZGUgPT0gMFxuIikpOwotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJbm9kZS0+ZGF0YV9vZmZzZXQgPSBwb3M7Ci0JCW5vZGUtPnJlbW92ZWRfc2l6ZSA9IDA7Ci0KLQkJLyogSW5pdGlhbGl6ZSB0aGUgcmF3IGlub2RlLiAgKi8KLQkJcmF3X2lub2RlLm1hZ2ljID0gSkZGU19NQUdJQ19CSVRNQVNLOwotCQlyYXdfaW5vZGUuaW5vID0gZi0+aW5vOwotCQlyYXdfaW5vZGUucGlubyA9IGYtPnBpbm87Ci0KLQkJcmF3X2lub2RlLm1vZGUgPSBmLT5tb2RlOwotCi0JCXJhd19pbm9kZS51aWQgPSBmLT51aWQ7Ci0JCXJhd19pbm9kZS5naWQgPSBmLT5naWQ7Ci0JCXJhd19pbm9kZS5hdGltZSA9IGdldF9zZWNvbmRzKCk7Ci0JCXJhd19pbm9kZS5tdGltZSA9IHJhd19pbm9kZS5hdGltZTsKLQkJcmF3X2lub2RlLmN0aW1lID0gZi0+Y3RpbWU7Ci0JCXJhd19pbm9kZS5vZmZzZXQgPSBwb3M7Ci0JCXJhd19pbm9kZS5kc2l6ZSA9IHRoaXNjb3VudDsKLQkJcmF3X2lub2RlLnJzaXplID0gMDsKLQkJcmF3X2lub2RlLm5zaXplID0gZi0+bnNpemU7Ci0JCXJhd19pbm9kZS5ubGluayA9IGYtPm5saW5rOwotCQlyYXdfaW5vZGUuc3BhcmUgPSAwOwotCQlyYXdfaW5vZGUucmVuYW1lID0gMDsKLQkJcmF3X2lub2RlLmRlbGV0ZWQgPSAwOwotCi0JCWlmIChwb3MgPCBmLT5zaXplKSB7Ci0JCQlub2RlLT5yZW1vdmVkX3NpemUgPSByYXdfaW5vZGUucnNpemUgPSBtaW4odGhpc2NvdW50LCAoX191MzIpKGYtPnNpemUgLSBwb3MpKTsKLQotCQkJLyogSWYgdGhpcyBub2RlIGlzIGdvaW5nIGVudGlyZWx5IG92ZXIgdGhlIHRvcCBvZiBvbGQgZGF0YSwKLQkJCSAgIHdlIGNhbiBhbGxvdyBpdCB0byBnbyBpbnRvIHRoZSByZXNlcnZlZCBzcGFjZSwgYmVjYXVzZQotCQkJICAgd2Uga25vdyB0aGF0IEdDIGNhbiByZWNsYWltIHRoZSBzcGFjZSBsYXRlci4KLQkJCSovCi0JCQlpZiAocG9zICsgdGhpc2NvdW50IDwgZi0+c2l6ZSkgewotCQkJCS8qIElmIGFsbCB0aGUgZGF0YSB3ZSdyZSBvdmVyd3JpdGluZyBhcmUgX3JlYWxfLAotCQkJCSAgIG5vdCBqdXN0IGhvbGVzLCB0aGVuOgotCQkJCSAgIHJlY292ZXJhYmxlID0gMTsKLQkJCQkqLwotCQkJfQotCQl9Ci0KLQkJLyogV3JpdGUgdGhlIG5ldyBub2RlIHRvIHRoZSBmbGFzaC4gICovCi0JCS8qIE5PVEU6IFdlIHdvdWxkIGJlIHF1aXRlIGhhcHB5IGlmIGpmZnNfd3JpdGVfbm9kZSgpIHdyb3RlIGEKLQkJICAgc21hbGxlciBub2RlIHRoYW4gd2Ugd2VyZSBleHBlY3RpbmcuIFRoZXJlJ3Mgbm8gbmVlZCBmb3IgaXQKLQkJICAgdG8gd2FzdGUgdGhlIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGZsYXNoIGp1c3QgYmVjYXVzZSBpdCdzCi0JCSAgIGEgbGl0dGxlIHNtYWxsZXIgdGhhbiB3aGF0IHdlIGFza2VkIGZvci4gQnV0IHRoYXQncyBhIHdob2xlCi0JCSAgIG5ldyBjYW4gb2Ygd29ybXMgd2hpY2ggSSdtIG5vdCBnb2luZyB0byBvcGVuIHRoaXMgd2Vlay4gCi0JCSAgIC0tIGR3bXcyLgotCQkqLwotCQlpZiAoKGVyciA9IGpmZnNfd3JpdGVfbm9kZShjLCBub2RlLCAmcmF3X2lub2RlLCBmLT5uYW1lLAotCQkJCQkgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKWJ1ZiwKLQkJCQkJICAgcmVjb3ZlcmFibGUsIGYpKSA8IDApIHsKLQkJCUQocHJpbnRrKCJqZmZzX2ZpbGVfd3JpdGUoKTogamZmc193cml0ZV9ub2RlKCkgZmFpbGVkLlxuIikpOwotCQkJamZmc19mcmVlX25vZGUobm9kZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXdyaXR0ZW4gKz0gZXJyOwotCQlidWYgKz0gZXJyOwotCQljb3VudCAtPSBlcnI7Ci0JCXBvcyArPSBlcnI7Ci0KLQkJLyogSW5zZXJ0IHRoZSBuZXcgbm9kZSBpbnRvIHRoZSBmaWxlIHN5c3RlbS4gICovCi0JCWlmICgoZXJyID0gamZmc19pbnNlcnRfbm9kZShjLCBmLCAmcmF3X2lub2RlLCBOVUxMLCBub2RlKSkgPCAwKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCUQzKHByaW50aygiamZmc19maWxlX3dyaXRlKCk6IG5ldyBmX3BvcyAlbGQuXG4iLCAobG9uZylwb3MpKTsKLQotCQl0aGlzY291bnQgPSBtaW4oYy0+Zm1jLT5tYXhfY2h1bmtfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpLCBjb3VudCk7Ci0JfQotIG91dDoKLQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJmaWxlX3dyaXRlKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7Ci0KLQkvKiBGaXggdGhpbmdzIGluIHRoZSByZWFsIGlub2RlLiAgKi8KLQlpZiAocG9zID4gaW5vZGUtPmlfc2l6ZSkgewotCQlpbm9kZS0+aV9zaXplID0gcG9zOwotCQlpbm9kZS0+aV9ibG9ja3MgPSAoaW5vZGUtPmlfc2l6ZSArIDUxMSkgPj4gOTsKLQl9Ci0JaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlub2RlLT5pX21hcHBpbmcsIDAsIC0xKTsKLQotIG91dF9pc2VtOgotCXJldHVybiBlcnI7Ci19IC8qIGpmZnNfZmlsZV93cml0ZSgpICAqLwotCi1zdGF0aWMgaW50Ci1qZmZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBwYWdlICpwYWdlLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCi17Ci0JLyogRklYTUU6IHdlIHNob3VsZCBkZXRlY3Qgc29tZSBlcnJvciBjb25kaXRpb25zIGhlcmUgKi8KLQotCS8qIEJ1Z2dlciB0aGF0LiBXZSBzaG91bGQgbWFrZSBzdXJlIHRoZSBwYWdlIGlzIHVwdG9kYXRlICovCi0JaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkgJiYgKGZyb20gfHwgdG8gPCBQQUdFX0NBQ0hFX1NJWkUpKQotCQlyZXR1cm4gamZmc19kb19yZWFkcGFnZV9ub2xvY2soZmlscCwgcGFnZSk7Ci0KLQlyZXR1cm4gMDsKLX0gLyogamZmc19wcmVwYXJlX3dyaXRlKCkgKi8KLQotc3RhdGljIGludAotamZmc19jb21taXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBwYWdlICpwYWdlLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKLXsKLSAgICAgICB2b2lkICphZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpICsgZnJvbTsKLSAgICAgICAvKiBYWFg6IFBBR0VfQ0FDSEVfU0hJRlQgb3IgUEFHRV9TSElGVCAqLwotICAgICAgIGxvZmZfdCBwb3MgPSBwYWdlX29mZnNldChwYWdlKSArIGZyb207Ci0KLSAgICAgICByZXR1cm4gamZmc19maWxlX3dyaXRlKGZpbHAsIGFkZHIsIHRvLWZyb20sICZwb3MpOwotfSAvKiBqZmZzX2NvbW1pdF93cml0ZSgpICovCi0KLS8qIFRoaXMgaXMgb3VyIGlvY3RsKCkgcm91dGluZS4gICovCi1zdGF0aWMgaW50Ci1qZmZzX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCSAgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBqZmZzX2NvbnRyb2wgKmM7Ci0JaW50IHJldCA9IDA7Ci0KLQlEMihwcmludGsoIioqKmpmZnNfaW9jdGwoKTogY21kID0gMHglMDh4LCBhcmcgPSAweCUwOGx4XG4iLAotCQkgIGNtZCwgYXJnKSk7Ci0KLQlpZiAoIShjID0gKHN0cnVjdCBqZmZzX2NvbnRyb2wgKilpbm9kZS0+aV9zYi0+c19mc19pbmZvKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkpGRlM6IEJhZCBpbm9kZSBpbiBpb2N0bCgpIGNhbGwuICIKLQkJICAgICAgICIoY21kID0gMHglMDh4KVxuIiwgY21kKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImlvY3RsKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCW11dGV4X2xvY2soJmMtPmZtYy0+YmlnbG9jayk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgSkZGU19QUklOVF9IQVNIOgotCQlqZmZzX3ByaW50X2hhc2hfdGFibGUoYyk7Ci0JCWJyZWFrOwotCWNhc2UgSkZGU19QUklOVF9UUkVFOgotCQlqZmZzX3ByaW50X3RyZWUoYy0+cm9vdCwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgSkZGU19HRVRfU1RBVFVTOgotCQl7Ci0JCQlzdHJ1Y3QgamZmc19mbGFzaF9zdGF0dXMgZnN0OwotCQkJc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMgPSBjLT5mbWM7Ci0JCQlwcmludGsoIkZsYXNoIHN0YXR1cyAtLSAiKTsKLQkJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwKLQkJCQkgICAgICAgKHN0cnVjdCBqZmZzX2ZsYXNoX3N0YXR1cyBfX3VzZXIgKilhcmcsCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgamZmc19mbGFzaF9zdGF0dXMpKSkgewotCQkJCUQocHJpbnRrKCJqZmZzX2lvY3RsKCk6IEJhZCBhcmcgaW4gIgotCQkJCQkgIkpGRlNfR0VUX1NUQVRVUyBpb2N0bCFcbiIpKTsKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJCWJyZWFrOwotCQkJfQotCQkJZnN0LnNpemUgPSBmbWMtPmZsYXNoX3NpemU7Ci0JCQlmc3QudXNlZCA9IGZtYy0+dXNlZF9zaXplOwotCQkJZnN0LmRpcnR5ID0gZm1jLT5kaXJ0eV9zaXplOwotCQkJZnN0LmJlZ2luID0gZm1jLT5oZWFkLT5vZmZzZXQ7Ci0JCQlmc3QuZW5kID0gZm1jLT50YWlsLT5vZmZzZXQgKyBmbWMtPnRhaWwtPnNpemU7Ci0JCQlwcmludGsoInNpemU6ICVkLCB1c2VkOiAlZCwgZGlydHk6ICVkLCAiCi0JCQkgICAgICAgImJlZ2luOiAlZCwgZW5kOiAlZFxuIiwKLQkJCSAgICAgICBmc3Quc2l6ZSwgZnN0LnVzZWQsIGZzdC5kaXJ0eSwKLQkJCSAgICAgICBmc3QuYmVnaW4sIGZzdC5lbmQpOwotCQkJaWYgKGNvcHlfdG9fdXNlcigoc3RydWN0IGpmZnNfZmxhc2hfc3RhdHVzIF9fdXNlciAqKWFyZywKLQkJCQkJICZmc3QsCi0JCQkJCSBzaXplb2Yoc3RydWN0IGpmZnNfZmxhc2hfc3RhdHVzKSkpIHsKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9UVFk7Ci0JfQotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImlvY3RsKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0gLyogamZmc19pb2N0bCgpICAqLwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmZnNfYWRkcmVzc19vcGVyYXRpb25zID0gewotCS5yZWFkcGFnZQk9IGpmZnNfcmVhZHBhZ2UsCi0JLnByZXBhcmVfd3JpdGUJPSBqZmZzX3ByZXBhcmVfd3JpdGUsCi0JLmNvbW1pdF93cml0ZQk9IGpmZnNfY29tbWl0X3dyaXRlLAotfTsKLQotc3RhdGljIGludCBqZmZzX2ZzeW5jKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgZGVudHJ5ICpkLCBpbnQgZGF0YXN5bmMpCi17Ci0JLyogV2UgY3VycmVudGx5IGhhdmUgT19TWU5DIG9wZXJhdGlvbnMgYXQgYWxsIHRpbWVzLgotCSAgIERvIG5vdGhpbmcuCi0JKi8KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqZmZzX2ZpbGVfb3BlcmF0aW9ucyA9Ci17Ci0JLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCi0JLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKLQkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCi0JLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCi0JLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCi0JLmlvY3RsCQk9IGpmZnNfaW9jdGwsCi0JLm1tYXAJCT0gZ2VuZXJpY19maWxlX3JlYWRvbmx5X21tYXAsCi0JLmZzeW5jCQk9IGpmZnNfZnN5bmMsCi0JLnNlbmRmaWxlCT0gZ2VuZXJpY19maWxlX3NlbmRmaWxlLAotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPQotewotCS5sb29rdXAJCT0gamZmc19sb29rdXAsICAgICAgICAgIC8qIGxvb2t1cCAqLwotCS5zZXRhdHRyCT0gamZmc19zZXRhdHRyLAotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqZmZzX2Rpcl9vcGVyYXRpb25zID0KLXsKLQkucmVhZGRpcgk9IGpmZnNfcmVhZGRpciwKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPQotewotCS5jcmVhdGUJCT0gamZmc19jcmVhdGUsCi0JLmxvb2t1cAkJPSBqZmZzX2xvb2t1cCwKLQkudW5saW5rCQk9IGpmZnNfdW5saW5rLAotCS5zeW1saW5rCT0gamZmc19zeW1saW5rLAotCS5ta2RpcgkJPSBqZmZzX21rZGlyLAotCS5ybWRpcgkJPSBqZmZzX3JtZGlyLAotCS5ta25vZAkJPSBqZmZzX21rbm9kLAotCS5yZW5hbWUJCT0gamZmc19yZW5hbWUsCi0JLnNldGF0dHIJPSBqZmZzX3NldGF0dHIsCi19OwotCi0KLS8qIEluaXRpYWxpemUgYW4gaW5vZGUgZm9yIHRoZSBWRlMuICAqLwotc3RhdGljIHZvaWQKLWpmZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBqZmZzX2ZpbGUgKmY7Ci0Jc3RydWN0IGpmZnNfY29udHJvbCAqYzsKLQotCUQzKHByaW50aygiamZmc19yZWFkX2lub2RlKCk6IGlub2RlLT5pX2lubyA9PSAlbHVcbiIsIGlub2RlLT5pX2lubykpOwotCi0JaWYgKCFpbm9kZS0+aV9zYikgewotCQlEKHByaW50aygiamZmc19yZWFkX2lub2RlKCk6ICFpbm9kZS0+aV9zYiA9PT4gIgotCQkJICJObyBzdXBlciBibG9jayFcbiIpKTsKLQkJcmV0dXJuOwotCX0KLQljID0gKHN0cnVjdCBqZmZzX2NvbnRyb2wgKilpbm9kZS0+aV9zYi0+c19mc19pbmZvOwotCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgInJlYWRfaW5vZGUoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQlpZiAoIShmID0gamZmc19maW5kX2ZpbGUoYywgaW5vZGUtPmlfaW5vKSkpIHsKLQkJRChwcmludGsoImpmZnNfcmVhZF9pbm9kZSgpOiBObyBzdWNoIGlub2RlICglbHUpLlxuIiwKLQkJCSBpbm9kZS0+aV9pbm8pKTsKLQkJRDMocHJpbnRrIChLRVJOX05PVElDRSAicmVhZF9pbm9kZSgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKLQkJcmV0dXJuOwotCX0KLQlpbm9kZS0+aV9wcml2YXRlID0gZjsKLQlpbm9kZS0+aV9tb2RlID0gZi0+bW9kZTsKLQlpbm9kZS0+aV9ubGluayA9IGYtPm5saW5rOwotCWlub2RlLT5pX3VpZCA9IGYtPnVpZDsKLQlpbm9kZS0+aV9naWQgPSBmLT5naWQ7Ci0JaW5vZGUtPmlfc2l6ZSA9IGYtPnNpemU7Ci0JaW5vZGUtPmlfYXRpbWUudHZfc2VjID0gZi0+YXRpbWU7Ci0JaW5vZGUtPmlfbXRpbWUudHZfc2VjID0gZi0+bXRpbWU7Ci0JaW5vZGUtPmlfY3RpbWUudHZfc2VjID0gZi0+Y3RpbWU7Ci0JaW5vZGUtPmlfYXRpbWUudHZfbnNlYyA9IAotCWlub2RlLT5pX210aW1lLnR2X25zZWMgPSAKLQlpbm9kZS0+aV9jdGltZS50dl9uc2VjID0gMDsKLQotCWlub2RlLT5pX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgNTExKSA+PiA5OwotCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0JCWlub2RlLT5pX29wID0gJmpmZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwotCQlpbm9kZS0+aV9mb3AgPSAmamZmc19maWxlX29wZXJhdGlvbnM7Ci0JCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmpmZnNfYWRkcmVzc19vcGVyYXRpb25zOwotCX0KLQllbHNlIGlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7Ci0JCWlub2RlLT5pX29wID0gJmpmZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci0JCWlub2RlLT5pX2ZvcCA9ICZqZmZzX2Rpcl9vcGVyYXRpb25zOwotCX0KLQllbHNlIGlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7Ci0JCWlub2RlLT5pX29wID0gJnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwotCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZqZmZzX2FkZHJlc3Nfb3BlcmF0aW9uczsKLQl9Ci0JZWxzZSB7Ci0JCS8qIElmIHRoZSBub2RlIGlzIGEgZGV2aWNlIG9mIHNvbWUgc29ydCwgdGhlbiB0aGUgbnVtYmVyIG9mCi0JCSAgIHRoZSBkZXZpY2Ugc2hvdWxkIGJlIHJlYWQgZnJvbSB0aGUgZmxhc2ggbWVtb3J5IGFuZCB0aGVuCi0JCSAgIGFkZGVkIHRvIHRoZSBpbm9kZSdzIGlfcmRldiBtZW1iZXIuICAqLwotCQl1MTYgdmFsOwotCQlqZmZzX3JlYWRfZGF0YShmLCAoY2hhciAqKSZ2YWwsIDAsIDIpOwotCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsCi0JCQlvbGRfZGVjb2RlX2Rldih2YWwpKTsKLQl9Ci0KLQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJyZWFkX2lub2RlKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWpmZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IGpmZnNfZmlsZSAqZjsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjOwotCUQzKHByaW50aygiamZmc19kZWxldGVfaW5vZGUoKTogaW5vZGUtPmlfaW5vID09ICVsdVxuIiwKLQkJICBpbm9kZS0+aV9pbm8pKTsKLQotCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKLQlsb2NrX2tlcm5lbCgpOwotCWlub2RlLT5pX3NpemUgPSAwOwotCWlub2RlLT5pX2Jsb2NrcyA9IDA7Ci0JaW5vZGUtPmlfcHJpdmF0ZSA9IE5VTEw7Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwotCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKSB7Ci0JCWMgPSAoc3RydWN0IGpmZnNfY29udHJvbCAqKSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwotCQlmID0gKHN0cnVjdCBqZmZzX2ZpbGUgKikgamZmc19maW5kX2ZpbGUgKGMsIGlub2RlLT5pX2lubyk7Ci0JCWpmZnNfcG9zc2libHlfZGVsZXRlX2ZpbGUoZik7Ci0JfQotCi0JdW5sb2NrX2tlcm5lbCgpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1qZmZzX3dyaXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0Jc3RydWN0IGpmZnNfY29udHJvbCAqYyA9IChzdHJ1Y3QgamZmc19jb250cm9sICopc2ItPnNfZnNfaW5mbzsKLQlsb2NrX2tlcm5lbCgpOwotCWpmZnNfZ2FyYmFnZV9jb2xsZWN0X3RyaWdnZXIoYyk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotfQotCi1zdGF0aWMgaW50IGpmZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQotewotCSpmbGFncyB8PSBNU19OT0RJUkFUSU1FOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgamZmc19vcHMgPQotewotCS5yZWFkX2lub2RlCT0gamZmc19yZWFkX2lub2RlLAotCS5kZWxldGVfaW5vZGUgCT0gamZmc19kZWxldGVfaW5vZGUsCi0JLnB1dF9zdXBlcgk9IGpmZnNfcHV0X3N1cGVyLAotCS53cml0ZV9zdXBlcgk9IGpmZnNfd3JpdGVfc3VwZXIsCi0JLnN0YXRmcwkJPSBqZmZzX3N0YXRmcywKLQkucmVtb3VudF9mcwk9IGpmZnNfcmVtb3VudCwKLX07Ci0KLXN0YXRpYyBpbnQgamZmc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCi0JaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCi17Ci0JcmV0dXJuIGdldF9zYl9iZGV2KGZzX3R5cGUsIGZsYWdzLCBkZXZfbmFtZSwgZGF0YSwgamZmc19maWxsX3N1cGVyLAotCQkJICAgbW50KTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGpmZnNfZnNfdHlwZSA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gImpmZnMiLAotCS5nZXRfc2IJCT0gamZmc19nZXRfc2IsCi0JLmtpbGxfc2IJPSBraWxsX2Jsb2NrX3N1cGVyLAotCS5mc19mbGFncwk9IEZTX1JFUVVJUkVTX0RFViwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1pbml0X2pmZnNfZnModm9pZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPICJKRkZTIHZlcnNpb24gIiBKRkZTX1ZFUlNJT05fU1RSSU5HCi0JCSIsIChDKSAxOTk5LCAyMDAwICBBeGlzIENvbW11bmljYXRpb25zIEFCXG4iKTsKLQkKLSNpZmRlZiBDT05GSUdfSkZGU19QUk9DX0ZTCi0JamZmc19wcm9jX3Jvb3QgPSBwcm9jX21rZGlyKCJqZmZzIiwgcHJvY19yb290X2ZzKTsKLQlpZiAoIWpmZnNfcHJvY19yb290KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNhbm5vdCBjcmVhdGUgL3Byb2MvamZmcyBlbnRyeVxuIik7Ci0JfQotI2VuZGlmCi0JZm1fY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiamZmc19mbSIsIHNpemVvZihzdHJ1Y3QgamZmc19mbSksCi0JCSAgICAgICAwLAotCQkgICAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTUVNX1NQUkVBRCwKLQkJICAgICAgIE5VTEwsIE5VTEwpOwotCWlmICghZm1fY2FjaGUpIHsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jbm9kZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJqZmZzX25vZGUiLHNpemVvZihzdHJ1Y3QgamZmc19ub2RlKSwKLQkJICAgICAgIDAsCi0JCSAgICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9NRU1fU1BSRUFELAotCQkgICAgICAgTlVMTCwgTlVMTCk7Ci0JaWYgKCFub2RlX2NhY2hlKSB7Ci0JCWttZW1fY2FjaGVfZGVzdHJveShmbV9jYWNoZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZqZmZzX2ZzX3R5cGUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWV4aXRfamZmc19mcyh2b2lkKQotewotCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmamZmc19mc190eXBlKTsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koZm1fY2FjaGUpOwotCWttZW1fY2FjaGVfZGVzdHJveShub2RlX2NhY2hlKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9qZmZzX2ZzKQotbW9kdWxlX2V4aXQoZXhpdF9qZmZzX2ZzKQotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlRoZSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSIpOwotTU9EVUxFX0FVVEhPUigiQXhpcyBDb21tdW5pY2F0aW9ucyBBQi4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMvaW50cmVwLmMgYi9mcy9qZmZzL2ludHJlcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGQxODkxLi4wMDAwMDAwCi0tLSBhL2ZzL2pmZnMvaW50cmVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDQ5ICswLDAgQEAKLS8qCi0gKiBKRkZTIC0tIEpvdXJuYWxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIExpbnV4IGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgQXhpcyBDb21tdW5pY2F0aW9ucywgSW5jLgotICoKLSAqIENyZWF0ZWQgYnkgRmlubiBIYWthbnNzb24gPGZpbm5AYXhpcy5jb20+LgotICoKLSAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICRJZDogaW50cmVwLmMsdiAxLjEwMiAyMDAxLzA5LzIzIDIzOjI4OjM2IGR3bXcyIEV4cCAkCi0gKgotICogUG9ydGVkIHRvIExpbnV4IDIuMy54IGFuZCBNVEQ6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEFsZXhhbmRlciBMYXJzc29uIChhbGV4QGNlbmRpby5zZSksIENlbmRpbyBTeXN0ZW1zIEFCCi0gKgotICovCi0KLS8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29kZSBmb3IgdGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiB0aGUKLSAgIEpvdXJuYWxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIEpGRlMuICAqLwotCi0vKgotICogVG9kbyBsaXN0OgotICoKLSAqIG1lbWNweV90b19mbGFzaCgpIGFuZCBtZW1jcHlfZnJvbV9mbGFzaCgpIGZ1bmN0aW9ucy4KLSAqCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBoYXJkIGxpbmtzLgotICoKLSAqIE9yZ2FuaXplIHRoZSBzb3VyY2UgY29kZSBpbiBhIGJldHRlciB3YXkuIEFnYWluc3QgdGhlIFZGUyB3ZSBjb3VsZAotICogaGF2ZSBqZmZzX2V4dC5jLCBhbmQgYWdhaW5zdCB0aGUgYmxvY2sgZGV2aWNlIGpmZnNfaW50LmMuCi0gKiBBIGJldHRlciBmaWxlLWludGVybmFsIG9yZ2FuaXphdGlvbiB0b28uCi0gKgotICogQSBiZXR0ZXIgY2hlY2tzdW0gYWxnb3JpdGhtLgotICoKLSAqIENvbnNpZGVyIGVuZGlhbm5lc3Mgc3R1ZmYuIG50b2hsKCkgZXRjLgotICoKLSAqIEFyZSB3ZSBoYW5kbGluZyB0aGUgYXRpbWUsIG10aW1lLCBjdGltZSBtZW1iZXJzIG9mIHRoZSBpbm9kZSByaWdodD8KLSAqCi0gKiBSZW1vdmUgc29tZSBkdXBsaWNhdGVkIGNvZGUuIFRha2UgYSBsb29rIGF0IGpmZnNfd3JpdGVfbm9kZSgpIGFuZAotICogamZmc19yZXdyaXRlX2RhdGEoKSBmb3IgaW5zdGFuY2UuCi0gKgotICogSW1wbGVtZW50IG1vcmUgbWVhbmluZyBvZiB0aGUgbmxpbmsgbWVtYmVyIGluIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzLgotICogbmxpbmsgY291bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGhhcmQgbGlua3MgZm9yIGluc3RhbmNlLgotICoKLSAqIEJldHRlciBtZW1vcnkgbWFuYWdlbWVudC4gQWxsb2NhdGUgZGF0YSBzdHJ1Y3R1cmVzIGluIGxhcmdlciBjaHVua3MKLSAqIGlmIHBvc3NpYmxlLgotICoKLSAqIElmIHRvbyBtdWNoIG1ldGEgZGF0YSBpcyBzdG9yZWQsIGEgZ2FyYmFnZSBjb2xsZWN0IHNob3VsZCBiZSBpc3N1ZWQuCi0gKiBXZSBoYXZlIGV4cGVyaWVuY2VkIHByb2JsZW1zIHdpdGggdG9vIG11Y2ggbWV0YSBkYXRhIHdpdGggZm9yIGluc3RhbmNlCi0gKiBsb2cgZmlsZXMuCi0gKgotICogSW1wcm92ZSB0aGUgY2FsbHMgdG8gamZmc19pb2N0bCgpLiBXZSB3b3VsZCBsaWtlIHRvIHJldHJpZXZlIG1vcmUKLSAqIGluZm9ybWF0aW9uIHRvIGJlIGFibGUgdG8gZGVidWcgKG9yIHRvIHN1cGVydmlzZSkgSkZGUyBkdXJpbmcgcnVuLXRpbWUuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9qZmZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgotCi0jaW5jbHVkZSAiaW50cmVwLmgiCi0jaW5jbHVkZSAiamZmc19mbS5oIgotCi1sb25nIG5vX2pmZnNfbm9kZSA9IDA7Ci1zdGF0aWMgbG9uZyBub19qZmZzX2ZpbGUgPSAwOwotI2lmIGRlZmluZWQoSkZGU19NRU1PUllfREVCVUcpICYmIEpGRlNfTUVNT1JZX0RFQlVHCi1sb25nIG5vX2pmZnNfY29udHJvbCA9IDA7Ci1sb25nIG5vX2pmZnNfcmF3X2lub2RlID0gMDsKLWxvbmcgbm9famZmc19ub2RlX3JlZiA9IDA7Ci1sb25nIG5vX2pmZnNfZm0gPSAwOwotbG9uZyBub19qZmZzX2ZtY29udHJvbCA9IDA7Ci1sb25nIG5vX2hhc2ggPSAwOwotbG9uZyBub19uYW1lID0gMDsKLSNlbmRpZgotCi1zdGF0aWMgaW50IGpmZnNfc2Nhbl9mbGFzaChzdHJ1Y3QgamZmc19jb250cm9sICpjKTsKLXN0YXRpYyBpbnQgamZmc191cGRhdGVfZmlsZShzdHJ1Y3QgamZmc19maWxlICpmLCBzdHJ1Y3QgamZmc19ub2RlICpub2RlKTsKLXN0YXRpYyBpbnQgamZmc19idWlsZF9maWxlKHN0cnVjdCBqZmZzX2ZpbGUgKmYpOwotc3RhdGljIGludCBqZmZzX2ZyZWVfZmlsZShzdHJ1Y3QgamZmc19maWxlICpmKTsKLXN0YXRpYyBpbnQgamZmc19mcmVlX25vZGVfbGlzdChzdHJ1Y3QgamZmc19maWxlICpmKTsKLXN0YXRpYyBpbnQgamZmc19nYXJiYWdlX2NvbGxlY3Rfbm93KHN0cnVjdCBqZmZzX2NvbnRyb2wgKmMpOwotc3RhdGljIGludCBqZmZzX2luc2VydF9maWxlX2ludG9faGFzaChzdHJ1Y3QgamZmc19maWxlICpmKTsKLXN0YXRpYyBpbnQgamZmc19yZW1vdmVfcmVkdW5kYW50X25vZGVzKHN0cnVjdCBqZmZzX2ZpbGUgKmYpOwotCi0vKiBJcyB0aGVyZSBlbm91Z2ggc3BhY2Ugb24gdGhlIGZsYXNoPyAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IEpGRlNfRU5PVUdIX1NQQUNFKHN0cnVjdCBqZmZzX2NvbnRyb2wgKmMsIF9fdTMyIHNwYWNlKQotewotCXN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jID0gYy0+Zm1jOwotCi0Jd2hpbGUgKDEpIHsKLQkJaWYgKChmbWMtPmZsYXNoX3NpemUgLSAoZm1jLT51c2VkX3NpemUgKyBmbWMtPmRpcnR5X3NpemUpKQotCQkJPj0gZm1jLT5taW5fZnJlZV9zaXplICsgc3BhY2UpIHsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWlmIChmbWMtPmRpcnR5X3NpemUgPCBmbWMtPnNlY3Rvcl9zaXplKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKGpmZnNfZ2FyYmFnZV9jb2xsZWN0X25vdyhjKSkgewotCQkgIEQxKHByaW50aygiSkZGU19FTk9VR0hfU1BBQ0U6IGpmZnNfZ2FyYmFnZV9jb2xsZWN0X25vdygpIGZhaWxlZC5cbiIpKTsKLQkJICByZXR1cm4gMDsKLQkJfQotCX0KLX0KLQotI2lmIENPTkZJR19KRkZTX0ZTX1ZFUkJPU0UgPiAwCi1zdGF0aWMgX191OAotZmxhc2hfcmVhZF91OChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20pCi17Ci0Jc2l6ZV90IHJldGxlbjsKLQlfX3U4IHJldDsKLQlpbnQgcmVzOwotCi0JcmVzID0gTVREX1JFQUQobXRkLCBmcm9tLCAxLCAmcmV0bGVuLCAmcmV0KTsKLQlpZiAocmV0bGVuICE9IDEpIHsKLQkJcHJpbnRrKCJEaWRuJ3QgcmVhZCBhIGJ5dGUgaW4gZmxhc2hfcmVhZF91OCgpLiBSZXR1cm5lZCAlZFxuIiwgcmVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWpmZnNfaGV4ZHVtcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHBvcywgaW50IHNpemUpCi17Ci0JY2hhciBsaW5lWzE2XTsKLQlpbnQgaiA9IDA7Ci0KLQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJaW50IGk7Ci0KLQkJcHJpbnRrKCIlbGQ6IiwgKGxvbmcpIHBvcyk7Ci0JCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7Ci0JCQlsaW5lW2pdID0gZmxhc2hfcmVhZF91OChtdGQsIHBvcysrKTsKLQkJfQotCQlmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7Ci0JCQlpZiAoIShpICYgMSkpIHsKLQkJCQlwcmludGsoIiAlLjJ4IiwgbGluZVtpXSAmIDB4ZmYpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcHJpbnRrKCIlLjJ4IiwgbGluZVtpXSAmIDB4ZmYpOwotCQkJfQotCQl9Ci0KLQkJLyogUHJpbnQgZW1wdHkgc3BhY2UgKi8KLQkJZm9yICg7IGkgPCAxNjsgaSsrKSB7Ci0JCQlpZiAoIShpICYgMSkpIHsKLQkJCQlwcmludGsoIiAgICIpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcHJpbnRrKCIgICIpOwotCQkJfQotCQl9Ci0JCXByaW50aygiICAiKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7Ci0JCQlpZiAoaXNncmFwaChsaW5lW2ldKSkgewotCQkJCXByaW50aygiJWMiLCBsaW5lW2ldKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXByaW50aygiLiIpOwotCQkJfQotCQl9Ci0JCXByaW50aygiXG4iKTsKLQkJc2l6ZSAtPSAxNjsKLQl9Ci19Ci0KLS8qIFByaW50IHRoZSBjb250ZW50cyBvZiBhIG5vZGUuICAqLwotc3RhdGljIHZvaWQKLWpmZnNfcHJpbnRfbm9kZShzdHJ1Y3QgamZmc19ub2RlICpuKQotewotCUQocHJpbnRrKCJqZmZzX25vZGU6IDB4JXBcbiIsIG4pKTsKLQlEKHByaW50aygie1xuIikpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTA4eCwgLyogdmVyc2lvbiAgKi9cbiIsIG4tPnZlcnNpb24pKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIGRhdGFfb2Zmc2V0ICAqL1xuIiwgbi0+ZGF0YV9vZmZzZXQpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIGRhdGFfc2l6ZSAgKi9cbiIsIG4tPmRhdGFfc2l6ZSkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTA4eCwgLyogcmVtb3ZlZF9zaXplICAqL1xuIiwgbi0+cmVtb3ZlZF9zaXplKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglMDh4LCAvKiBmbV9vZmZzZXQgICovXG4iLCBuLT5mbV9vZmZzZXQpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwMngsICAgICAgIC8qIG5hbWVfc2l6ZSAgKi9cbiIsIG4tPm5hbWVfc2l6ZSkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JXAsIC8qIGZtLCAgZm0tPm9mZnNldDogJXUgICovXG4iLAotCQkgbi0+Zm0sIChuLT5mbSA/IG4tPmZtLT5vZmZzZXQgOiAwKSkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JXAsIC8qIHZlcnNpb25fcHJldiAgKi9cbiIsIG4tPnZlcnNpb25fcHJldikpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JXAsIC8qIHZlcnNpb25fbmV4dCAgKi9cbiIsIG4tPnZlcnNpb25fbmV4dCkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JXAsIC8qIHJhbmdlX3ByZXYgICovXG4iLCBuLT5yYW5nZV9wcmV2KSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglcCwgLyogcmFuZ2VfbmV4dCAgKi9cbiIsIG4tPnJhbmdlX25leHQpKTsKLQlEKHByaW50aygifVxuIikpOwotfQotCi0jZW5kaWYKLQotLyogUHJpbnQgdGhlIGNvbnRlbnRzIG9mIGEgcmF3IGlub2RlLiAgKi8KLXN0YXRpYyB2b2lkCi1qZmZzX3ByaW50X3Jhd19pbm9kZShzdHJ1Y3QgamZmc19yYXdfaW5vZGUgKnJhd19pbm9kZSkKLXsKLQlEKHByaW50aygiamZmc19yYXdfaW5vZGU6IGlub2RlIG51bWJlcjogJXVcbiIsIHJhd19pbm9kZS0+aW5vKSk7Ci0JRChwcmludGsoIntcbiIpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIG1hZ2ljICAqL1xuIiwgcmF3X2lub2RlLT5tYWdpYykpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTA4eCwgLyogaW5vICAqL1xuIiwgcmF3X2lub2RlLT5pbm8pKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIHBpbm8gICovXG4iLCByYXdfaW5vZGUtPnBpbm8pKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIHZlcnNpb24gICovXG4iLCByYXdfaW5vZGUtPnZlcnNpb24pKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIG1vZGUgICovXG4iLCByYXdfaW5vZGUtPm1vZGUpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwNHgsICAgICAvKiB1aWQgICovXG4iLCByYXdfaW5vZGUtPnVpZCkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTA0eCwgICAgIC8qIGdpZCAgKi9cbiIsIHJhd19pbm9kZS0+Z2lkKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglMDh4LCAvKiBhdGltZSAgKi9cbiIsIHJhd19pbm9kZS0+YXRpbWUpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIG10aW1lICAqL1xuIiwgcmF3X2lub2RlLT5tdGltZSkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTA4eCwgLyogY3RpbWUgICovXG4iLCByYXdfaW5vZGUtPmN0aW1lKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglMDh4LCAvKiBvZmZzZXQgICovXG4iLCByYXdfaW5vZGUtPm9mZnNldCkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTA4eCwgLyogZHNpemUgICovXG4iLCByYXdfaW5vZGUtPmRzaXplKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglMDh4LCAvKiByc2l6ZSAgKi9cbiIsIHJhd19pbm9kZS0+cnNpemUpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwMngsICAgICAgIC8qIG5zaXplICAqL1xuIiwgcmF3X2lub2RlLT5uc2l6ZSkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTAyeCwgICAgICAgLyogbmxpbmsgICovXG4iLCByYXdfaW5vZGUtPm5saW5rKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglMDJ4LCAgICAgICAvKiBzcGFyZSAgKi9cbiIsCi0JCSByYXdfaW5vZGUtPnNwYXJlKSk7Ci0JRChwcmludGsoIiAgICAgICAgJXUsICAgICAgICAgIC8qIHJlbmFtZSAgKi9cbiIsCi0JCSByYXdfaW5vZGUtPnJlbmFtZSkpOwotCUQocHJpbnRrKCIgICAgICAgICV1LCAgICAgICAgICAvKiBkZWxldGVkICAqL1xuIiwKLQkJIHJhd19pbm9kZS0+ZGVsZXRlZCkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTAyeCwgICAgICAgLyogYWNjdXJhdGUgICovXG4iLAotCQkgcmF3X2lub2RlLT5hY2N1cmF0ZSkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTA4eCwgLyogZGNoa3N1bSAgKi9cbiIsIHJhd19pbm9kZS0+ZGNoa3N1bSkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTA0eCwgICAgIC8qIG5jaGtzdW0gICovXG4iLCByYXdfaW5vZGUtPm5jaGtzdW0pKTsKLQlEKHByaW50aygiICAgICAgICAweCUwNHgsICAgICAvKiBjaGtzdW0gICovXG4iLCByYXdfaW5vZGUtPmNoa3N1bSkpOwotCUQocHJpbnRrKCJ9XG4iKSk7Ci19Ci0KLSNkZWZpbmUgZmxhc2hfc2FmZV9hY3F1aXJlKGFyZykKLSNkZWZpbmUgZmxhc2hfc2FmZV9yZWxlYXNlKGFyZykKLQotCi1zdGF0aWMgaW50Ci1mbGFzaF9zYWZlX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAotCQl1X2NoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXNpemVfdCByZXRsZW47Ci0JaW50IHJlczsKLQotCUQzKHByaW50ayhLRVJOX05PVElDRSAiZmxhc2hfc2FmZV9yZWFkKCVwLCAlMDh4LCAlcCwgJTA4eClcbiIsCi0JCSAgbXRkLCAodW5zaWduZWQgaW50KSBmcm9tLCBidWYsIGNvdW50KSk7Ci0KLQlyZXMgPSBtdGQtPnJlYWQobXRkLCBmcm9tLCBjb3VudCwgJnJldGxlbiwgYnVmKTsKLQlpZiAocmV0bGVuICE9IGNvdW50KSB7Ci0JCXBhbmljKCJEaWRuJ3QgcmVhZCBhbGwgYnl0ZXMgaW4gZmxhc2hfc2FmZV9yZWFkKCkuIFJldHVybmVkICVkXG4iLCByZXMpOwotCX0KLQlyZXR1cm4gcmVzP3JlczpyZXRsZW47Ci19Ci0KLQotc3RhdGljIF9fdTMyCi1mbGFzaF9yZWFkX3UzMihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20pCi17Ci0Jc2l6ZV90IHJldGxlbjsKLQlfX3UzMiByZXQ7Ci0JaW50IHJlczsKLQotCXJlcyA9IG10ZC0+cmVhZChtdGQsIGZyb20sIDQsICZyZXRsZW4sICh1bnNpZ25lZCBjaGFyICopJnJldCk7Ci0JaWYgKHJldGxlbiAhPSA0KSB7Ci0JCXByaW50aygiRGlkbid0IHJlYWQgYWxsIGJ5dGVzIGluIGZsYXNoX3JlYWRfdTMyKCkuIFJldHVybmVkICVkXG4iLCByZXMpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQKLWZsYXNoX3NhZmVfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKLQkJIGNvbnN0IHVfY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc2l6ZV90IHJldGxlbjsKLQlpbnQgcmVzOwotCi0JRDMocHJpbnRrKEtFUk5fTk9USUNFICJmbGFzaF9zYWZlX3dyaXRlKCVwLCAlMDh4LCAlcCwgJTA4eClcbiIsCi0JCSAgbXRkLCAodW5zaWduZWQgaW50KSB0bywgYnVmLCBjb3VudCkpOwotCi0JcmVzID0gbXRkLT53cml0ZShtdGQsIHRvLCBjb3VudCwgJnJldGxlbiwgYnVmKTsKLQlpZiAocmV0bGVuICE9IGNvdW50KSB7Ci0JCXByaW50aygiRGlkbid0IHdyaXRlIGFsbCBieXRlcyBpbiBmbGFzaF9zYWZlX3dyaXRlKCkuIFJldHVybmVkICVkXG4iLCByZXMpOwotCX0KLQlyZXR1cm4gcmVzP3JlczpyZXRsZW47Ci19Ci0KLQotc3RhdGljIGludAotZmxhc2hfc2FmZV93cml0ZXYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLAotCQkJdW5zaWduZWQgbG9uZyBpb3ZlY19jbnQsIGxvZmZfdCB0bykKLXsKLQlzaXplX3QgcmV0bGVuLCByZXRsZW5fYTsKLQlpbnQgaTsKLQlpbnQgcmVzOwotCi0JRDMocHJpbnRrKEtFUk5fTk9USUNFICJmbGFzaF9zYWZlX3dyaXRldiglcCwgJTA4eCwgJXApXG4iLAotCQkgIG10ZCwgKHVuc2lnbmVkIGludCkgdG8sIHZlY3MpKTsKLQotCWlmIChtdGQtPndyaXRldikgewotCQlyZXMgPSBtdGQtPndyaXRldihtdGQsIHZlY3MsIGlvdmVjX2NudCwgdG8sICZyZXRsZW4pOwotCQlyZXR1cm4gcmVzID8gcmVzIDogcmV0bGVuOwotCX0KLQkvKiBOb3QgaW1wbGVtZW50ZWQgd3JpdGV2LiBSZXBlYXRlZGx5IHVzZSB3cml0ZSAtIG9uIHRoZSBub3Qgc28KLQkgICB1bnJlYXNvbmFibGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBtdGQgZHJpdmVyIGRvZXNuJ3QgY2FyZSBob3cKLQkgICBtYW55IHdyaXRlIGN5Y2xlcyB3ZSB1c2UuICovCi0JcmVzPTA7Ci0JcmV0bGVuPTA7Ci0KLQlmb3IgKGk9MDsgIXJlcyAmJiBpPGlvdmVjX2NudDsgaSsrKSB7Ci0JCXJlcyA9IG10ZC0+d3JpdGUobXRkLCB0bywgdmVjc1tpXS5pb3ZfbGVuLCAmcmV0bGVuX2EsCi0JCQkJIHZlY3NbaV0uaW92X2Jhc2UpOwotCQlpZiAocmV0bGVuX2EgIT0gdmVjc1tpXS5pb3ZfbGVuKSB7Ci0JCQlwcmludGsoIkRpZG4ndCB3cml0ZSBhbGwgYnl0ZXMgaW4gZmxhc2hfc2FmZV93cml0ZXYoKS4gUmV0dXJuZWQgJWRcbiIsIHJlcyk7Ci0JCQlpZiAoaSAhPSBpb3ZlY19jbnQtMSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJfQotCQkvKiBJZiByZXMgaXMgbm9uLXplcm8sIHJldGxlbl9hIGlzIHVuZGVmaW5lZCwgYnV0IHdlIGRvbid0Ci0JCSAgIGNhcmUgYmVjYXVzZSBpbiB0aGF0IGNhc2UgaXQncyBub3QgZ29pbmcgdG8gYmUgCi0JCSAgIHJldHVybmVkIGFueXdheS4KLQkJKi8KLQkJdG8gKz0gcmV0bGVuX2E7Ci0JCXJldGxlbiArPSByZXRsZW5fYTsKLQl9Ci0JcmV0dXJuIHJlcz9yZXM6cmV0bGVuOwotfQotCi0KLXN0YXRpYyBpbnQKLWZsYXNoX21lbXNldChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAotCSAgICAgY29uc3QgdV9jaGFyIGMsIHNpemVfdCBzaXplKQotewotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHBhdHRlcm5bNjRdOwotCWludCBpOwotCi0JLyogZmlsbCB1cCBwYXR0ZXJuICovCi0KLQlmb3IoaSA9IDA7IGkgPCA2NDsgaSsrKQotCQlwYXR0ZXJuW2ldID0gYzsKLQotCS8qIHdyaXRlIGFzIG1hbnkgNjQtYnl0ZSBjaHVua3MgYXMgd2UgY2FuICovCi0KLQl3aGlsZSAoc2l6ZSA+PSA2NCkgewotCQlmbGFzaF9zYWZlX3dyaXRlKG10ZCwgdG8sIHBhdHRlcm4sIDY0KTsKLQkJc2l6ZSAtPSA2NDsKLQkJdG8gKz0gNjQ7Ci0JfQotCi0JLyogYW5kIHRoZSByZXN0ICovCi0KLQlpZihzaXplKQotCQlmbGFzaF9zYWZlX3dyaXRlKG10ZCwgdG8sIHBhdHRlcm4sIHNpemUpOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWludHJlcF9lcmFzZV9jYWxsYmFjayhzdHJ1Y3QgZXJhc2VfaW5mbyAqZG9uZSkKLXsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAqd2FpdF9xOwotCi0Jd2FpdF9xID0gKHdhaXRfcXVldWVfaGVhZF90ICopZG9uZS0+cHJpdjsKLQotCXdha2VfdXAod2FpdF9xKTsKLX0KLQotCi1zdGF0aWMgaW50Ci1mbGFzaF9lcmFzZV9yZWdpb24oc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBzdGFydCwKLQkJICAgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IGVyYXNlX2luZm8gKmVyYXNlOwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTsKLQotCWVyYXNlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGVyYXNlX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWVyYXNlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndhaXRfcSk7Ci0KLQllcmFzZS0+bXRkID0gbXRkOwotCWVyYXNlLT5jYWxsYmFjayA9IGludHJlcF9lcmFzZV9jYWxsYmFjazsKLQllcmFzZS0+YWRkciA9IHN0YXJ0OwotCWVyYXNlLT5sZW4gPSBzaXplOwotCWVyYXNlLT5wcml2ID0gKHVfbG9uZykmd2FpdF9xOwotCi0JLyogRklYTUU6IFVzZSBUQVNLX0lOVEVSUlVQVElCTEUgYW5kIGRlYWwgd2l0aCBiZWluZyBpbnRlcnJ1cHRlZCAqLwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQlhZGRfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7Ci0KLQlpZiAobXRkLT5lcmFzZShtdGQsIGVyYXNlKSA8IDApIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoJndhaXRfcSwgJndhaXQpOwotCQlrZnJlZShlcmFzZSk7Ci0KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZmxhc2g6IGVyYXNlIG9mIHJlZ2lvbiBbMHglbHgsIDB4JWx4XSAiCi0JCSAgICAgICAidG90YWxseSBmYWlsZWRcbiIsIChsb25nKXN0YXJ0LCAobG9uZylzdGFydCArIHNpemUpOwotCi0JCXJldHVybiAtMTsKLQl9Ci0KLQlzY2hlZHVsZSgpOyAvKiBXYWl0IGZvciBmbGFzaCB0byBmaW5pc2guICovCi0JcmVtb3ZlX3dhaXRfcXVldWUoJndhaXRfcSwgJndhaXQpOwotCi0Ja2ZyZWUoZXJhc2UpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgcm91dGluZSBjYWxjdWxhdGVzIGNoZWNrc3VtcyBpbiBKRkZTLiAgKi8KLXN0YXRpYyBfX3UzMgotamZmc19jaGVja3N1bShjb25zdCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKLXsKLQlfX3UzMiBzdW0gPSAwOwotCV9fdTggKnB0ciA9IChfX3U4ICopZGF0YTsKLQl3aGlsZSAoc2l6ZS0tID4gMCkgewotCQlzdW0gKz0gKnB0cisrOwotCX0KLQlEMyhwcmludGsoIiwgcmVzdWx0OiAweCUwOHhcbiIsIHN1bSkpOwotCXJldHVybiBzdW07Ci19Ci0KLQotc3RhdGljIGludAotamZmc19jaGVja3N1bV9mbGFzaChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHN0YXJ0LCBpbnQgc2l6ZSwgX191MzIgKnJlc3VsdCkKLXsKLQlfX3UzMiBzdW0gPSAwOwotCWxvZmZfdCBwdHIgPSBzdGFydDsKLQlfX3U4ICpyZWFkX2J1ZjsKLQlpbnQgaSwgbGVuZ3RoOwotCi0JLyogQWxsb2NhdGUgcmVhZCBidWZmZXIgKi8KLQlyZWFkX2J1ZiA9IGttYWxsb2Moc2l6ZW9mKF9fdTgpICogNDA5NiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZWFkX2J1ZikgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgImttYWxsb2MgZmFpbGVkIGluIGpmZnNfY2hlY2tzdW1fZmxhc2goKVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQkvKiBMb29wIHVudGlsIGNoZWNrc3VtIGRvbmUgKi8KLQl3aGlsZSAoc2l6ZSkgewotCQkvKiBHZXQgYW1vdW50IG9mIGRhdGEgdG8gcmVhZCAqLwotCQlpZiAoc2l6ZSA8IDQwOTYpCi0JCQlsZW5ndGggPSBzaXplOwotCQllbHNlCi0JCQlsZW5ndGggPSA0MDk2OwotCi0JCS8qIFBlcmZvcm0gZmxhc2ggcmVhZCAqLwotCQlEMyhwcmludGsoS0VSTl9OT1RJQ0UgImpmZnNfY2hlY2tzdW1fZmxhc2hcbiIpKTsKLQkJZmxhc2hfc2FmZV9yZWFkKG10ZCwgcHRyLCAmcmVhZF9idWZbMF0sIGxlbmd0aCk7Ci0KLQkJLyogQ29tcHV0ZSBjaGVja3N1bSAqLwotCQlmb3IgKGk9MDsgaSA8IGxlbmd0aCA7IGkrKykKLQkJCXN1bSArPSByZWFkX2J1ZltpXTsKLQotCQkvKiBVcGRhdGUgcG9pbnRlciBhbmQgc2l6ZSAqLwotCQlzaXplIC09IGxlbmd0aDsKLQkJcHRyICs9IGxlbmd0aDsKLQl9Ci0KLQkvKiBGcmVlIHJlYWQgYnVmZmVyICovCi0Ja2ZyZWUocmVhZF9idWYpOwotCi0JLyogUmV0dXJuIHJlc3VsdCAqLwotCUQzKHByaW50aygiY2hlY2tzdW0gcmVzdWx0OiAweCUwOHhcbiIsIHN1bSkpOwotCSpyZXN1bHQgPSBzdW07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgamZmc19mbV93cml0ZV9sb2NrKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jKQotewotICAvLwlkb3duKCZmbWMtPndsb2NrKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBqZmZzX2ZtX3dyaXRlX3VubG9jayhzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYykKLXsKLSAgLy8JdXAoJmZtYy0+d2xvY2spOwotfQotCi0KLS8qIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBzdHJ1Y3QgamZmc19maWxlLiAgKi8KLXN0YXRpYyBzdHJ1Y3QgamZmc19maWxlICoKLWpmZnNfY3JlYXRlX2ZpbGUoc3RydWN0IGpmZnNfY29udHJvbCAqYywKLQkJIGNvbnN0IHN0cnVjdCBqZmZzX3Jhd19pbm9kZSAqcmF3X2lub2RlKQotewotCXN0cnVjdCBqZmZzX2ZpbGUgKmY7Ci0KLQlpZiAoIShmID0ga3phbGxvYyhzaXplb2YoKmYpLCBHRlBfS0VSTkVMKSkpIHsKLQkJRChwcmludGsoImpmZnNfY3JlYXRlX2ZpbGUoKTogRmFpbGVkIVxuIikpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0Jbm9famZmc19maWxlKys7Ci0JZi0+aW5vID0gcmF3X2lub2RlLT5pbm87Ci0JZi0+cGlubyA9IHJhd19pbm9kZS0+cGlubzsKLQlmLT5ubGluayA9IHJhd19pbm9kZS0+bmxpbms7Ci0JZi0+ZGVsZXRlZCA9IHJhd19pbm9kZS0+ZGVsZXRlZDsKLQlmLT5jID0gYzsKLQotCXJldHVybiBmOwotfQotCi0KLS8qIEJ1aWxkIGEgY29udHJvbCBibG9jayBmb3IgdGhlIGZpbGUgc3lzdGVtLiAgKi8KLXN0YXRpYyBzdHJ1Y3QgamZmc19jb250cm9sICoKLWpmZnNfY3JlYXRlX2NvbnRyb2woc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjOwotCXJlZ2lzdGVyIGludCBzID0gc2l6ZW9mKHN0cnVjdCBqZmZzX2NvbnRyb2wpOwotCWludCBpOwotCUQoY2hhciAqdCA9IDApOwotCi0JRDIocHJpbnRrKCJqZmZzX2NyZWF0ZV9jb250cm9sKClcbiIpKTsKLQotCWlmICghKGMgPSBrbWFsbG9jKHMsIEdGUF9LRVJORUwpKSkgewotCQlnb3RvIGZhaWxfY29udHJvbDsKLQl9Ci0JREpNKG5vX2pmZnNfY29udHJvbCsrKTsKLQljLT5yb290ID0gTlVMTDsKLQljLT5nY190YXNrID0gTlVMTDsKLQljLT5oYXNoX2xlbiA9IEpGRlNfSEFTSF9TSVpFOwotCXMgPSBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkgKiBjLT5oYXNoX2xlbjsKLQlpZiAoIShjLT5oYXNoID0ga21hbGxvYyhzLCBHRlBfS0VSTkVMKSkpIHsKLQkJZ290byBmYWlsX2hhc2g7Ci0JfQotCURKTShub19oYXNoKyspOwotCWZvciAoaSA9IDA7IGkgPCBjLT5oYXNoX2xlbjsgaSsrKQotCQlJTklUX0xJU1RfSEVBRCgmYy0+aGFzaFtpXSk7Ci0JaWYgKCEoYy0+Zm1jID0gamZmc19idWlsZF9iZWdpbihjLCBNSU5PUihzYi0+c19kZXYpKSkpIHsKLQkJZ290byBmYWlsX2ZtaW5pdDsKLQl9Ci0JYy0+bmV4dF9pbm8gPSBKRkZTX01JTl9JTk8gKyAxOwotCWMtPmRlbGV0ZV9saXN0ID0gKHN0cnVjdCBqZmZzX2RlbGV0ZV9saXN0ICopIDA7Ci0JcmV0dXJuIGM7Ci0KLWZhaWxfZm1pbml0OgotCUQodCA9ICJjLT5mbWMiKTsKLWZhaWxfaGFzaDoKLQlrZnJlZShjKTsKLQlESk0obm9famZmc19jb250cm9sLS0pOwotCUQodCA9IHQgPyB0IDogImMtPmhhc2giKTsKLWZhaWxfY29udHJvbDoKLQlEKHQgPSB0ID8gdCA6ICJjb250cm9sIik7Ci0JRChwcmludGsoImpmZnNfY3JlYXRlX2NvbnRyb2woKTogQWxsb2NhdGlvbiBmYWlsZWQ6ICglcylcbiIsIHQpKTsKLQlyZXR1cm4gKHN0cnVjdCBqZmZzX2NvbnRyb2wgKikwOwotfQotCi0KLS8qIENsZWFuIHVwIGFsbCBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlIHN5c3RlbS4gICovCi12b2lkCi1qZmZzX2NsZWFudXBfY29udHJvbChzdHJ1Y3QgamZmc19jb250cm9sICpjKQotewotCUQyKHByaW50aygiamZmc19jbGVhbnVwX2NvbnRyb2woKVxuIikpOwotCi0JaWYgKCFjKSB7Ci0JCUQocHJpbnRrKCJqZmZzX2NsZWFudXBfY29udHJvbCgpOiBjID09IE5VTEwgISEhXG4iKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQl3aGlsZSAoYy0+ZGVsZXRlX2xpc3QpIHsKLQkJc3RydWN0IGpmZnNfZGVsZXRlX2xpc3QgKmRlbGV0ZV9saXN0X2VsZW1lbnQ7Ci0JCWRlbGV0ZV9saXN0X2VsZW1lbnQgPSBjLT5kZWxldGVfbGlzdDsKLQkJYy0+ZGVsZXRlX2xpc3QgPSBjLT5kZWxldGVfbGlzdC0+bmV4dDsKLQkJa2ZyZWUoZGVsZXRlX2xpc3RfZWxlbWVudCk7Ci0JfQotCi0JLyogRnJlZSBhbGwgZmlsZXMgYW5kIG5vZGVzLiAgKi8KLQlpZiAoYy0+aGFzaCkgewotCQlqZmZzX2ZvcmVhY2hfZmlsZShjLCBqZmZzX2ZyZWVfbm9kZV9saXN0KTsKLQkJamZmc19mb3JlYWNoX2ZpbGUoYywgamZmc19mcmVlX2ZpbGUpOwotCQlrZnJlZShjLT5oYXNoKTsKLQkJREpNKG5vX2hhc2gtLSk7Ci0JfQotCWpmZnNfY2xlYW51cF9mbWNvbnRyb2woYy0+Zm1jKTsKLQlrZnJlZShjKTsKLQlESk0obm9famZmc19jb250cm9sLS0pOwotCUQzKHByaW50aygiamZmc19jbGVhbnVwX2NvbnRyb2woKTogTGVhdmluZy4uLlxuIikpOwotfQotCi0KLS8qIFRoaXMgZnVuY3Rpb24gYWRkcyBhIHZpcnR1YWwgcm9vdCBub2RlIHRvIHRoZSBpbi1SQU0gcmVwcmVzZW50YXRpb24uCi0gICBDYWxsZWQgYnkgamZmc19idWlsZF9mcygpLiAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfYWRkX3ZpcnR1YWxfcm9vdChzdHJ1Y3QgamZmc19jb250cm9sICpjKQotewotCXN0cnVjdCBqZmZzX2ZpbGUgKnJvb3Q7Ci0Jc3RydWN0IGpmZnNfbm9kZSAqbm9kZTsKLQotCUQyKHByaW50aygiamZmc19hZGRfdmlydHVhbF9yb290KCk6ICIKLQkJICAiQ3JlYXRpbmcgYSB2aXJ0dWFsIHJvb3QgZGlyZWN0b3J5LlxuIikpOwotCi0JaWYgKCEocm9vdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBqZmZzX2ZpbGUpLCBHRlBfS0VSTkVMKSkpIHsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCW5vX2pmZnNfZmlsZSsrOwotCWlmICghKG5vZGUgPSBqZmZzX2FsbG9jX25vZGUoKSkpIHsKLQkJa2ZyZWUocm9vdCk7Ci0JCW5vX2pmZnNfZmlsZS0tOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JREpNKG5vX2pmZnNfbm9kZSsrKTsKLQltZW1zZXQobm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBqZmZzX25vZGUpKTsKLQlub2RlLT5pbm8gPSBKRkZTX01JTl9JTk87Ci0Jcm9vdC0+aW5vID0gSkZGU19NSU5fSU5POwotCXJvb3QtPm1vZGUgPSBTX0lGRElSIHwgU19JUldYVSB8IFNfSVJHUlAKLQkJICAgICB8IFNfSVhHUlAgfCBTX0lST1RIIHwgU19JWE9USDsKLQlyb290LT5hdGltZSA9IHJvb3QtPm10aW1lID0gcm9vdC0+Y3RpbWUgPSBnZXRfc2Vjb25kcygpOwotCXJvb3QtPm5saW5rID0gMTsKLQlyb290LT5jID0gYzsKLQlyb290LT52ZXJzaW9uX2hlYWQgPSByb290LT52ZXJzaW9uX3RhaWwgPSBub2RlOwotCWpmZnNfaW5zZXJ0X2ZpbGVfaW50b19oYXNoKHJvb3QpOwotCXJldHVybiAwOwotfQotCi0KLS8qIFRoaXMgaXMgd2hlcmUgdGhlIGZpbGUgc3lzdGVtIGlzIGJ1aWx0IGFuZCBpbml0aWFsaXplZC4gICovCi1pbnQKLWpmZnNfYnVpbGRfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjOwotCWludCBlcnIgPSAwOwotCi0JRDIocHJpbnRrKCJqZmZzX2J1aWxkX2ZzKClcbiIpKTsKLQotCWlmICghKGMgPSBqZmZzX2NyZWF0ZV9jb250cm9sKHNiKSkpIHsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWMtPmJ1aWxkaW5nX2ZzID0gMTsKLQljLT5zYiA9IHNiOwotCWlmICgoZXJyID0gamZmc19zY2FuX2ZsYXNoKGMpKSA8IDApIHsKLQkJaWYoZXJyID09IC1FQUdBSU4pewotCQkJLyogc2Nhbl9mbGFzaCgpIHdhbnRzIHVzIHRvIHRyeSBvbmNlIG1vcmUuIEEgZmxpcHBpbmcgCi0JCQkgICBiaXRzIHNlY3RvciB3YXMgZGV0ZWN0IGluIHRoZSBtaWRkbGUgb2YgdGhlIHNjYW4gZmxhc2guCi0JCQkgICBDbGVhbiB1cCBvbGQgYWxsb2NhdGVkIG1lbW9yeSBiZWZvcmUgZ29pbmcgaW4uCi0JCQkqLwotCQkJRDEocHJpbnRrKCJqZmZzX2J1aWxkX2ZzOiBDbGVhbmluZyB1cCBhbGwgY29udHJvbCBzdHJ1Y3R1cmVzLCIKLQkJCQkgICIgcmVhbGxvY2F0aW5nIHRoZW0gYW5kIHRyeWluZyBtb3VudCBhZ2Fpbi5cbiIpKTsKLQkJCWpmZnNfY2xlYW51cF9jb250cm9sKGMpOwotCQkJaWYgKCEoYyA9IGpmZnNfY3JlYXRlX2NvbnRyb2woc2IpKSkgewotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQkJYy0+YnVpbGRpbmdfZnMgPSAxOwotCQkJYy0+c2IgPSBzYjsKLQotCQkJaWYgKChlcnIgPSBqZmZzX3NjYW5fZmxhc2goYykpIDwgMCkgewotCQkJCWdvdG8gamZmc19idWlsZF9mc19mYWlsOwotCQkJfQkJCQotCQl9ZWxzZXsKLQkJCWdvdG8gamZmc19idWlsZF9mc19mYWlsOwotCQl9Ci0JfQotCi0JLyogQWRkIGEgdmlydHVhbCByb290IG5vZGUgaWYgbm8gb25lIGV4aXN0cy4gICovCi0JaWYgKCFqZmZzX2ZpbmRfZmlsZShjLCBKRkZTX01JTl9JTk8pKSB7Ci0JCWlmICgoZXJyID0gamZmc19hZGRfdmlydHVhbF9yb290KGMpKSA8IDApIHsKLQkJCWdvdG8gamZmc19idWlsZF9mc19mYWlsOwotCQl9Ci0JfQotCi0Jd2hpbGUgKGMtPmRlbGV0ZV9saXN0KSB7Ci0JCXN0cnVjdCBqZmZzX2ZpbGUgKmY7Ci0JCXN0cnVjdCBqZmZzX2RlbGV0ZV9saXN0ICpkZWxldGVfbGlzdF9lbGVtZW50OwotCi0JCWlmICgoZiA9IGpmZnNfZmluZF9maWxlKGMsIGMtPmRlbGV0ZV9saXN0LT5pbm8pKSkgewotCQkJZi0+ZGVsZXRlZCA9IDE7Ci0JCX0KLQkJZGVsZXRlX2xpc3RfZWxlbWVudCA9IGMtPmRlbGV0ZV9saXN0OwotCQljLT5kZWxldGVfbGlzdCA9IGMtPmRlbGV0ZV9saXN0LT5uZXh0OwotCQlrZnJlZShkZWxldGVfbGlzdF9lbGVtZW50KTsKLQl9Ci0KLQkvKiBSZW1vdmUgZGVsZXRlZCBub2Rlcy4gICovCi0JaWYgKChlcnIgPSBqZmZzX2ZvcmVhY2hfZmlsZShjLCBqZmZzX3Bvc3NpYmx5X2RlbGV0ZV9maWxlKSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSkZGUzogRmFpbGVkIHRvIHJlbW92ZSBkZWxldGVkIG5vZGVzLlxuIik7Ci0JCWdvdG8gamZmc19idWlsZF9mc19mYWlsOwotCX0KLQkvKiBSZW1vdmUgcmVkdW5kYW50IG5vZGVzLiAgKFdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUKLQkgICByZXR1cm4gdmFsdWUgaW4gdGhpcyBjYXNlLikgICovCi0JamZmc19mb3JlYWNoX2ZpbGUoYywgamZmc19yZW1vdmVfcmVkdW5kYW50X25vZGVzKTsKLQkvKiBUcnkgdG8gYnVpbGQgYSB0cmVlIGZyb20gYWxsIHRoZSBub2Rlcy4gICovCi0JaWYgKChlcnIgPSBqZmZzX2ZvcmVhY2hfZmlsZShjLCBqZmZzX2luc2VydF9maWxlX2ludG9fdHJlZSkpIDwgMCkgewotCQlwcmludGsoIkpGRlM6IEZhaWxlZCB0byBidWlsZCB0cmVlLlxuIik7Ci0JCWdvdG8gamZmc19idWlsZF9mc19mYWlsOwotCX0KLQkvKiBDb21wdXRlIHRoZSBzaXplcyBvZiBhbGwgZmlsZXMgaW4gdGhlIGZpbGVzeXN0ZW0uICBBZGp1c3QgaWYKLQkgICBuZWNlc3NhcnkuICAqLwotCWlmICgoZXJyID0gamZmc19mb3JlYWNoX2ZpbGUoYywgamZmc19idWlsZF9maWxlKSkgPCAwKSB7Ci0JCXByaW50aygiSkZGUzogRmFpbGVkIHRvIGJ1aWxkIGZpbGUgc3lzdGVtLlxuIik7Ci0JCWdvdG8gamZmc19idWlsZF9mc19mYWlsOwotCX0KLQlzYi0+c19mc19pbmZvID0gKHZvaWQgKiljOwotCWMtPmJ1aWxkaW5nX2ZzID0gMDsKLQotCUQxKGpmZnNfcHJpbnRfaGFzaF90YWJsZShjKSk7Ci0JRDEoamZmc19wcmludF90cmVlKGMtPnJvb3QsIDApKTsKLQotCXJldHVybiAwOwotCi1qZmZzX2J1aWxkX2ZzX2ZhaWw6Ci0JamZmc19jbGVhbnVwX2NvbnRyb2woYyk7Ci0JcmV0dXJuIGVycjsKLX0gLyogamZmc19idWlsZF9mcygpICAqLwotCi0KLS8qCi0gIFRoaXMgY2hlY2tzIGZvciBzZWN0b3JzIHRoYXQgd2VyZSBiZWluZyBlcmFzZWQgaW4gdGhlaXIgcHJldmlvdXMgCi0gIGxpZmV0aW1lcyBhbmQgZm9yIHNvbWUgcmVhc29uIG9yIHRoZSBvdGhlciAocG93ZXIgZmFpbCBldGMuKSwgCi0gIHRoZSBlcmFzZSBjeWNsZXMgbmV2ZXIgY29tcGxldGVkLgotICBBcyB0aGUgZmxhc2ggYXJyYXkgd291bGQgaGF2ZSByZXZlcnRlZCBiYWNrIHRvIHJlYWQgc3RhdHVzLCAKLSAgdGhlc2Ugc2VjdG9ycyBhcmUgZGV0ZWN0ZWQgYnkgdGhlIHN5bXB0b20gb2YgdGhlICJmbGlwcGluZyBiaXRzIiwKLSAgaS5lLiBiaXRzIGJlaW5nIHJlYWQgYmFjayBkaWZmZXJlbnRseSBmcm9tIHRoZSBzYW1lIGxvY2F0aW9uIGluCi0gIGZsYXNoIGlmIHJlYWQgbXVsdGlwbGUgdGltZXMuCi0gIFRoZSBvbmx5IHNvbHV0aW9uIHRvIHRoaXMgaXMgdG8gcmUtZXJhc2UgdGhlIGVudGlyZQotICBzZWN0b3IuCi0gIFVuZm9ydHVuYXRlbHkgZGV0ZWN0aW5nICJmbGlwcGluZyBiaXRzIiBpcyBub3QgYSBzaW1wbGUgZXhlcmNpc2UKLSAgYXMgYSBiaXQgbWF5IGJlIHJlYWQgYmFjayBhdCAxIG9yIDAgZGVwZW5kaW5nIG9uIHRoZSBhbGlnbm1lbnQgCi0gIG9mIHRoZSBzdGFycyBpbiB0aGUgdW5pdmVyc2UuCi0gIFRoZSBsZXZlbCBvZiBjb25maWRlbmNlIGlzIGluIGRpcmVjdCBwcm9wb3J0aW9uIHRvIHRoZSBudW1iZXIgb2YgCi0gIHNjYW5zIGRvbmUuIEJ5IHBvd2VyIGZhaWwgdGVzdGluZyBJIChWaXBpbikgaGF2ZSBiZWVuIGFibGUgdG8gCi0gIHByb292ZSB0aGF0IHJlYWRpbmcgdHdpY2UgaXMgbm90IGVub3VnaC4KLSAgTWF5YmUgNCB0aW1lcz8gQ2hhbmdlIE5VTV9SRVJFQURTIHRvIGEgaGlnaGVyIG51bWJlciBpZiB5b3Ugd2FudAotICBhIChldmVuKSBoaWdoZXIgZGVncmVlIG9mIGNvbmZpZGVuY2UgaW4geW91ciBtb3VudCBwcm9jZXNzLiAKLSAgQSBoaWdoZXIgbnVtYmVyIHdvdWxkIG9mIGNvdXJzZSBzbG93IGRvd24geW91ciBtb3VudC4KLSovCi1zdGF0aWMgaW50IGNoZWNrX3BhcnRseV9lcmFzZWRfc2VjdG9ycyhzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYyl7Ci0KLSNkZWZpbmUgTlVNX1JFUkVBRFMgICAgICAgICAgICAgNCAvKiBzZWUgbm90ZSBhYm92ZSAqLwotI2RlZmluZSBSRUFEX0FIRUFEX0JZVEVTICAgICAgICA0MDk2IC8qIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LCAKLQkJCQkJdXN1YWxseSBzZXQgdG8ga2VybmVsIHBhZ2Ugc2l6ZSAqLwotCi0JX191OCAqcmVhZF9idWYxOwotCV9fdTggKnJlYWRfYnVmMjsKLQotCWludCBlcnIgPSAwOwotCWludCByZXRsZW47Ci0JaW50IGk7Ci0JaW50IGNudDsKLQlfX3UzMiBvZmZzZXQ7Ci0JbG9mZl90IHBvcyA9IDA7Ci0JbG9mZl90IGVuZCA9IGZtYy0+Zmxhc2hfc2l6ZTsKLQotCi0JLyogQWxsb2NhdGUgcmVhZCBidWZmZXJzICovCi0JcmVhZF9idWYxID0ga21hbGxvYyhzaXplb2YoX191OCkgKiBSRUFEX0FIRUFEX0JZVEVTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlYWRfYnVmMSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZWFkX2J1ZjIgPSBrbWFsbG9jKHNpemVvZihfX3U4KSAqIFJFQURfQUhFQURfQllURVMsIEdGUF9LRVJORUwpOwotCWlmICghcmVhZF9idWYyKSB7Ci0JCWtmcmVlKHJlYWRfYnVmMSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotIENIRUNLX05FWFQ6Ci0Jd2hpbGUocG9zIDwgZW5kKXsKLQkJCi0JCUQxKHByaW50aygiY2hlY2tfcGFydGx5X2VyYXNlZF9zZWN0b3IoKTpjaGVja2luZyBzZWN0b3Igd2hpY2ggY29udGFpbnMiCi0JCQkgICIgb2Zmc2V0IDB4JXggZm9yIGZsaXBwaW5nIGJpdHMuLlxuIiwgKF9fdTMyKXBvcykpOwotCQkKLQkJcmV0bGVuID0gZmxhc2hfc2FmZV9yZWFkKGZtYy0+bXRkLCBwb3MsCi0JCQkJCSAmcmVhZF9idWYxWzBdLCBSRUFEX0FIRUFEX0JZVEVTKTsKLQkJcmV0bGVuICY9IH4zOwotCQkKLQkJZm9yKGNudCA9IDA7IGNudCA8IE5VTV9SRVJFQURTOyBjbnQrKyl7Ci0JCQkodm9pZClmbGFzaF9zYWZlX3JlYWQoZm1jLT5tdGQsIHBvcywKLQkJCQkJICAgICAgJnJlYWRfYnVmMlswXSwgUkVBRF9BSEVBRF9CWVRFUyk7Ci0JCQkKLQkJCWZvciAoaT0wIDsgaSA8IHJldGxlbiA7IGkrPTQpIHsKLQkJCQkvKiBidWZmZXJzIE1VU1QgbWF0Y2gsIGRvdWJsZSB3b3JkIGZvciB3b3JkISAqLwotCQkJCWlmKCooKF9fdTMyICopICZyZWFkX2J1ZjFbaV0pICE9Ci0JCQkJICAgKigoX191MzIgKikgJnJlYWRfYnVmMltpXSkKLQkJCQkgICApewotCQkJCSAgICAgICAgLyogZmxpcHBpbmcgYml0cyBkZXRlY3RlZCwgdGltZSB0byBlcmFzZSBzZWN0b3IgKi8KLQkJCQkJLyogVGhpcyB3aWxsIGhlbHAgdXMgbG9nIHNvbWUgc3RhdGlzdGljcyBldGMuICovCi0JCQkJCUQxKHByaW50aygiRmxpcHBpbmcgYml0cyBkZXRlY3RlZCBpbiByZS1yZWFkIHJvdW5kOiVpIG9mICVpXG4iLAotCQkJCQkgICAgICAgY250LCBOVU1fUkVSRUFEUykpOwotCQkJCQlEMShwcmludGsoImNoZWNrX3BhcnRseV9lcmFzZWRfc2VjdG9yczpmbGlwcGluZyBiaXRzIGRldGVjdGVkIgotCQkJCQkJICAiIEBvZmZzZXQ6MHgleCgweCV4IT0weCV4KVxuIiwKLQkJCQkJCSAgKF9fdTMyKXBvcytpLCAqKChfX3UzMiAqKSAmcmVhZF9idWYxW2ldKSwgCi0JCQkJCQkgICooKF9fdTMyICopICZyZWFkX2J1ZjJbaV0pKSk7Ci0JCQkJCQotCQkJCSAgICAgICAgLyogY2FsY3VsYXRlIHN0YXJ0IG9mIHByZXNlbnQgc2VjdG9yICovCi0JCQkJCW9mZnNldCA9ICgoKF9fdTMyKXBvcytpKS8oX191MzIpZm1jLT5zZWN0b3Jfc2l6ZSkgKiAoX191MzIpZm1jLT5zZWN0b3Jfc2l6ZTsKLQkJCQkJCi0JCQkJCUQxKHByaW50aygiY2hlY2tfcGFydGx5X2VyYXNlZF9zZWN0b3IoKTplcmFzaW5nIHNlY3RvciBzdGFydGluZyAweCV4LlxuIiwKLQkJCQkJCSAgb2Zmc2V0KSk7Ci0JCQkJCQotCQkJCQlpZiAoZmxhc2hfZXJhc2VfcmVnaW9uKGZtYy0+bXRkLAotCQkJCQkJCSAgICAgICBvZmZzZXQsIGZtYy0+c2VjdG9yX3NpemUpIDwgMCkgewotCQkJCQkJcHJpbnRrKEtFUk5fRVJSICJKRkZTOiBFcmFzZSBvZiBmbGFzaCBmYWlsZWQuICIKLQkJCQkJCSAgICAgICAib2Zmc2V0ID0gJXUsIGVyYXNlX3NpemUgPSAlZFxuIiwKLQkJCQkJCSAgICAgICBvZmZzZXQgLCBmbWMtPnNlY3Rvcl9zaXplKTsKLQkJCQkJCQotCQkJCQkJZXJyID0gLUVJTzsKLQkJCQkJCWdvdG8gcmV0dXJuQmFjazsKLQotCQkJCQl9ZWxzZXsKLQkJCQkJCUQxKHByaW50aygiSkZGUzogRXJhc2Ugb2YgZmxhc2ggc2VjdG9yIEAweCV4IHN1Y2Nlc3NmdWwuXG4iLAotCQkJCQkJICAgICAgIG9mZnNldCkpOwotCQkJCQkJLyogc2tpcCBhaGVhZCB0byB0aGUgbmV4dCBzZWN0b3IgKi8KLQkJCQkJCXBvcyA9ICgoKF9fdTMyKXBvcytpKS8oX191MzIpZm1jLT5zZWN0b3Jfc2l6ZSkgKiAoX191MzIpZm1jLT5zZWN0b3Jfc2l6ZTsKLQkJCQkJCXBvcyArPSBmbWMtPnNlY3Rvcl9zaXplOwotCQkJCQkJZ290byBDSEVDS19ORVhUOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXBvcyArPSBSRUFEX0FIRUFEX0JZVEVTOwotCX0KLQotIHJldHVybkJhY2s6Ci0Ja2ZyZWUocmVhZF9idWYxKTsKLQlrZnJlZShyZWFkX2J1ZjIpOwotCi0JRDIocHJpbnRrKCJjaGVja19wYXJ0bHlfZXJhc2VkX3NlY3RvcigpOkRvbmUgY2hlY2tpbmcgYWxsIHNlY3RvcnMgdGlsbCBvZmZzZXQgMHgleCBmb3IgZmxpcHBpbmcgYml0cy5cbiIsCi0JCSAgKF9fdTMyKXBvcykpOwotCi0JcmV0dXJuIGVycjsKLQotfS8qIGVuZCBjaGVja19wYXJ0bHlfZXJhc2VkX3NlY3RvcnMoKSAqLwotCi0KLQotLyogU2NhbiB0aGUgd2hvbGUgZmxhc2ggbWVtb3J5IGluIG9yZGVyIHRvIGZpbmQgYWxsIG5vZGVzIGluIHRoZQotICAgZmlsZSBzeXN0ZW1zLiAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfc2Nhbl9mbGFzaChzdHJ1Y3QgamZmc19jb250cm9sICpjKQotewotCWNoYXIgbmFtZVtKRkZTX01BWF9OQU1FX0xFTiArIDJdOwotCXN0cnVjdCBqZmZzX3Jhd19pbm9kZSByYXdfaW5vZGU7Ci0Jc3RydWN0IGpmZnNfbm9kZSAqbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMgPSBjLT5mbWM7Ci0JX191MzIgY2hlY2tzdW07Ci0JX191OCB0bXBfYWNjdXJhdGU7Ci0JX191MTYgdG1wX2Noa3N1bTsKLQlfX3UzMiBkZWxldGVkX2ZpbGU7Ci0JbG9mZl90IHBvcyA9IDA7Ci0JbG9mZl90IHN0YXJ0OwotCWxvZmZfdCB0ZXN0X3N0YXJ0OwotCWxvZmZfdCBlbmQgPSBmbWMtPmZsYXNoX3NpemU7Ci0JX191OCAqcmVhZF9idWY7Ci0JaW50IGksIGxlbiwgcmV0bGVuOwotCV9fdTMyIG9mZnNldDsKLQotCV9fdTMyIGZyZWVfY2h1bmtfc2l6ZTE7Ci0JX191MzIgZnJlZV9jaHVua19zaXplMjsKLQotCQotI2RlZmluZSBOVU1GUkVFQUxMT1dFRCAgICAgMiAgICAgICAgLyogMiBjaHVua3Mgb2YgYXQgbGVhc3QgZXJhc2Ugc2l6ZSBzcGFjZSBhbGxvd2VkICovCi0JaW50IG51bV9mcmVlX3NwYWNlID0gMDsgICAgICAgLyogRmxhZyBlcnIgaWYgbW9yZSB0aGFuIFRXTwotCQkJCSAgICAgICBmcmVlIGJsb2NrcyBmb3VuZC4gVGhpcyBpcyBOT1QgYWxsb3dlZAotCQkJCSAgICAgICBieSB0aGUgY3VycmVudCBqZmZzIGRlc2lnbi4KLQkJCQkgICAgKi8KLQlpbnQgbnVtX2ZyZWVfc3BjX25vdF9hY2NwID0gMDsgLyogRm9yIGRlYnVnZ2luZyBwdXJwb3NlZCBrZWVwIGNvdW50IAotCQkJCQlvZiBob3cgbXVjaCBmcmVlIHNwYWNlIHdhcyByZWplY3RlZCBhbmQKLQkJCQkJbWFya2VkIGRpcnR5Ci0JCQkJICAgICAqLwotCi0JRDEocHJpbnRrKCJqZmZzX3NjYW5fZmxhc2goKTogc3RhcnQgcG9zID0gMHglbHgsIGVuZCA9IDB4JWx4XG4iLAotCQkgIChsb25nKXBvcywgKGxvbmcpZW5kKSk7Ci0KLQlmbGFzaF9zYWZlX2FjcXVpcmUoZm1jLT5tdGQpOwotCi0JLyoKLQkgIGNoZWNrIGFuZCBtYWtlIHN1cmUgdGhhdCBhbnkgc2VjdG9yIGRvZXMgbm90IHN1ZmZlcgotCSAgZnJvbSB0aGUgInBhcnRseSBlcmFzZWQsIGJpdCBmbGlwcGluZyBzeW5kcm9tZSIgKFRNIFZpcGluIDopCi0JICBJZiBzbywgb2ZmZW5kaW5nIHNlY3RvcnMgd2lsbCBiZSBlcmFzZWQuCi0JKi8KLQlpZihjaGVja19wYXJ0bHlfZXJhc2VkX3NlY3RvcnMoZm1jKSA8IDApewotCi0JCWZsYXNoX3NhZmVfcmVsZWFzZShmbWMtPm10ZCk7Ci0JCXJldHVybiAtRUlPOyAvKiBiYWQsIGJhZCwgYmFkIGVycm9yLiBDYW5ub3QgY29udGludWUuKi8KLQl9Ci0KLQkvKiBBbGxvY2F0ZSByZWFkIGJ1ZmZlciAqLwotCXJlYWRfYnVmID0ga21hbGxvYyhzaXplb2YoX191OCkgKiA0MDk2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlYWRfYnVmKSB7Ci0JCWZsYXNoX3NhZmVfcmVsZWFzZShmbWMtPm10ZCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQkJCSAgICAgIAotCS8qIFN0YXJ0IHRoZSBzY2FuLiAgKi8KLQl3aGlsZSAocG9zIDwgZW5kKSB7Ci0JCWRlbGV0ZWRfZmlsZSA9IDA7Ci0KLQkJLyogUmVtZW1iZXIgdGhlIHBvc2l0aW9uIGZyb20gd2hlcmUgd2Ugc3RhcnRlZCB0aGlzIHNjYW4uICAqLwotCQlzdGFydCA9IHBvczsKLQotCQlzd2l0Y2ggKGZsYXNoX3JlYWRfdTMyKGZtYy0+bXRkLCBwb3MpKSB7Ci0JCWNhc2UgSkZGU19FTVBUWV9CSVRNQVNLOgotCQkJLyogV2UgaGF2ZSBmb3VuZCAweGZmZmZmZmZmIGF0IHRoaXMgcG9zaXRpb24uICBXZSBoYXZlIHRvCi0JCQkgICBzY2FuIHRoZSByZXN0IG9mIHRoZSBmbGFzaCB0aWxsIHRoZSBlbmQgb3IgdGlsbAotCQkJICAgc29tZXRoaW5nIGVsc2UgdGhhbiAweGZmZmZmZmZmIGlzIGZvdW5kLgotCQkgICAgICAgICAgIEtlZXAgZ29pbmcgdGlsbCB3ZSBkbyBub3QgZmluZCBKRkZTX0VNUFRZX0JJVE1BU0sgCi0JCQkgICBhbnltb3JlICovCi0KLQkJCUQxKHByaW50aygiamZmc19zY2FuX2ZsYXNoKCk6IDB4ZmZmZmZmZmYgYXQgcG9zIDB4JWx4LlxuIiwKLQkJCQkgIChsb25nKXBvcykpOwotCi0JCSAgICAgICAgd2hpbGUocG9zIDwgZW5kKXsKLQotCQkJICAgICAgbGVuID0gZW5kIC0gcG9zIDwgNDA5NiA/IGVuZCAtIHBvcyA6IDQwOTY7Ci0JCQkgICAgICAKLQkJCSAgICAgIHJldGxlbiA9IGZsYXNoX3NhZmVfcmVhZChmbWMtPm10ZCwgcG9zLAotCQkJCQkJICZyZWFkX2J1ZlswXSwgbGVuKTsKLQotCQkJICAgICAgcmV0bGVuICY9IH4zOwotCQkJICAgICAgCi0JCQkgICAgICBmb3IgKGk9MCA7IGkgPCByZXRsZW4gOyBpKz00LCBwb3MgKz0gNCkgewotCQkJCSAgICAgIGlmKCooKF9fdTMyICopICZyZWFkX2J1ZltpXSkgIT0KLQkJCQkJIEpGRlNfRU1QVFlfQklUTUFTSykKLQkJCQkJYnJlYWs7Ci0JCQkgICAgICB9Ci0JCQkgICAgICBpZiAoaSA9PSByZXRsZW4pCi0JCQkJICAgIGNvbnRpbnVlOwotCQkJICAgICAgZWxzZQotCQkJCSAgICBicmVhazsKLQkJCX0KLQotCQkJRDEocHJpbnRrKCJqZmZzX3NjYW5fZmxhc2goKToweGZmZmZmZmZmIGVuZGVkIGF0IHBvcyAweCVseC5cbiIsCi0JCQkJICAobG9uZylwb3MpKTsKLQkJCQotCQkJLyogSWYgc29tZSBmcmVlIHNwYWNlIGVuZHMgaW4gdGhlIG1pZGRsZSBvZiBhIHNlY3RvciwKLQkJCSAgIHRyZWF0IGl0IGFzIGRpcnR5IHJhdGhlciB0aGFuIGNsZWFuLgotCQkJICAgVGhpcyBpcyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgb25lIHRocmVhZCAKLQkJCSAgIGFsbG9jYXRlZCBzcGFjZSBmb3IgYSBub2RlLCBidXQgZGlkbid0IGdldCB0bwotCQkJICAgYWN0dWFsbHkgX3dyaXRlXyBpdCBiZWZvcmUgcG93ZXIgd2FzIGxvc3QsIGxlYXZpbmcKLQkJCSAgIGEgZ2FwIGluIHRoZSBsb2cuIFNoaWZ0aW5nIGFsbCBub2RlIHdyaXRlcyBpbnRvCi0JCQkgICBhIHNpbmdsZSBrZXJuZWwgdGhyZWFkIHdpbGwgZml4IHRoZSBvcmlnaW5hbCBwcm9ibGVtLgotCQkJKi8KLQkJCWlmICgoX191MzIpIHBvcyAlIGZtYy0+c2VjdG9yX3NpemUpIHsKLQkJCQkvKiBJZiB0aGVyZSB3YXMgZnJlZSBzcGFjZSBpbiBwcmV2aW91cyAKLQkJCQkgICBzZWN0b3JzLCBkb24ndCBtYXJrIHRoYXQgZGlydHkgdG9vIC0gCi0JCQkJICAgb25seSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzZWN0b3IKLQkJCQkgICAob3IgZnJvbSBzdGFydCkgCi0JCQkJKi8KLQotCQkJICAgICAgICB0ZXN0X3N0YXJ0ID0gcG9zICYgfihmbWMtPnNlY3Rvcl9zaXplLTEpOyAvKiBlbmQgb2YgbGFzdCBzZWN0b3IgKi8KLQotCQkJCWlmIChzdGFydCA8IHRlc3Rfc3RhcnQpIHsKLQotCQkJCSAgICAgICAgLyogZnJlZSBzcGFjZSBzdGFydGVkIGluIHRoZSBwcmV2aW91cyBzZWN0b3IhICovCi0KLQkJCQkJaWYoKG51bV9mcmVlX3NwYWNlIDwgTlVNRlJFRUFMTE9XRUQpICYmIAotCQkJCQkgICAoKHVuc2lnbmVkIGludCkodGVzdF9zdGFydCAtIHN0YXJ0KSA+PSBmbWMtPnNlY3Rvcl9zaXplKSl7Ci0KLQkJCQkgICAgICAgICAgICAgICAgLyoKLQkJCQkJCSAgQ291bnQgaXQgaW4gaWYgd2UgYXJlIHN0aWxsIHVuZGVyIE5VTUZSRUVBTExPV0VEICphbmQqIGl0IGlzIAotCQkJCQkJICBhdCBsZWFzdCAxIGVyYXNlIHNlY3RvciBpbiBsZW5ndGguIFRoaXMgd2lsbCBrZWVwIHVzIGZyb20gCi0JCQkJCQkgIHBpY2tpbmcgYW55IGxpdHRsZSBvbGUnIHNwYWNlIGFzICJmcmVlIi4KLQkJCQkJCSovCi0JCQkJCSAgCi0JCQkJCSAgICAgICAgRDEocHJpbnRrKCJSZWR1Y2luZyBlbmQgb2YgZnJlZSBzcGFjZSB0byAweCV4IGZyb20gMHgleFxuIiwKLQkJCQkJCQkgICh1bnNpZ25lZCBpbnQpdGVzdF9zdGFydCwgKHVuc2lnbmVkIGludClwb3MpKTsKLQotCQkJCQkJRDEocHJpbnRrKCJGcmVlIHNwYWNlIGFjY2VwdGVkOiBTdGFydGluZyAweCV4IGZvciAweCV4IGJ5dGVzXG4iLAotCQkJCQkJCSAgKHVuc2lnbmVkIGludCkgc3RhcnQsCi0JCQkJCQkJICAodW5zaWduZWQgaW50KSh0ZXN0X3N0YXJ0IC0gc3RhcnQpKSk7Ci0KLQkJCQkJCS8qIGJlbG93LCBzcGFjZSBmcm9tICJzdGFydCIgdG8gInBvcyIgd2lsbCBiZSBtYXJrZWQgZGlydHkuICovCi0JCQkJCQlzdGFydCA9IHRlc3Rfc3RhcnQ7IAotCQkJCQkJCi0JCQkJCQkvKiBCZWluZyBpbiBoZXJlIG1lYW5zIHRoYXQgd2UgaGF2ZSBmb3VuZCBhdCBsZWFzdCBhbiBlbnRpcmUgCi0JCQkJCQkgICBlcmFzZSBzZWN0b3Igc2l6ZSBvZiBmcmVlIHNwYWNlIGVuZGluZyBvbiBhIHNlY3RvciBib3VuZGFyeS4KLQkJCQkJCSAgIEtlZXAgdHJhY2sgb2YgZnJlZSBzcGFjZXMgYWNjZXB0ZWQuCi0JCQkJCQkqLwotCQkJCQkJbnVtX2ZyZWVfc3BhY2UrKzsKLQkJCQkJfWVsc2V7Ci0JCQkJCSAgICAgICAgbnVtX2ZyZWVfc3BjX25vdF9hY2NwKys7Ci0JCQkJCSAgICAgICAgRDEocHJpbnRrKCJGcmVlIHNwYWNlICgjJWkpIGZvdW5kIGJ1dCAqTm90KiBhY2NlcHRlZDogU3RhcnRpbmciCi0JCQkJCQkJICAiIDB4JXggZm9yIDB4JXggYnl0ZXNcbiIsCi0JCQkJCQkJICBudW1fZnJlZV9zcGNfbm90X2FjY3AsICh1bnNpZ25lZCBpbnQpc3RhcnQsIAotCQkJCQkJCSAgKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGludCkocG9zICYgfihmbWMtPnNlY3Rvcl9zaXplLTEpKSAtICh1bnNpZ25lZCBpbnQpc3RhcnQpKSk7Ci0JCQkJCSAgICAgICAgCi0JCQkJCX0KLQkJCQkJCi0JCQkJfQotCQkJCWlmKCgoKF9fdTMyKShwb3MgLSBzdGFydCkpICE9IDApKXsKLQotCQkJCSAgICAgICAgRDEocHJpbnRrKCJEaXJ0eSBzcGFjZTogU3RhcnRpbmcgMHgleCBmb3IgMHgleCBieXRlc1xuIiwKLQkJCQkJCSAgKHVuc2lnbmVkIGludCkgc3RhcnQsICh1bnNpZ25lZCBpbnQpIChwb3MgLSBzdGFydCkpKTsKLQkJCQkJamZmc19mbWFsbG9jZWQoZm1jLCAoX191MzIpIHN0YXJ0LAotCQkJCQkJICAgICAgIChfX3UzMikgKHBvcyAtIHN0YXJ0KSwgTlVMTCk7Ci0JCQkJfWVsc2V7Ci0JCQkJCS8qICJGbGlwcGluZyBiaXRzIiBkZXRlY3RlZC4gVGhpcyBtZWFucyB0aGF0IG91ciBzY2FuIGZvciB0aGVtCi0JCQkJCSAgIGRpZCBub3QgY2F0Y2ggdGhpcyBvZmZzZXQuIFNlZSBjaGVja19wYXJ0bHlfZXJhc2VkX3NlY3RvcnMoKSBmb3IKLQkJCQkJICAgbW9yZSBpbmZvLgotCQkJCQkqLwotCQkJCSAgICAgICAgCi0JCQkJCUQxKHByaW50aygiamZmc19zY2FuX2ZsYXNoKCk6d2FudHMgdG8gYWxsb2NhdGUgZGlydHkgZmxhc2ggIgotCQkJCQkJICAic3BhY2UgZm9yIDAgYnl0ZXMuXG4iKSk7Ci0JCQkJCUQxKHByaW50aygiamZmc19zY2FuX2ZsYXNoKCk6IEZsaXBwaW5nIGJpdHMhIFdlIHdpbGwgZnJlZSAiCi0JCQkJCQkgICJhbGwgYWxsb2NhdGVkIG1lbW9yeSwgZXJhc2UgdGhpcyBzZWN0b3IgYW5kIHJlbW91bnRcbiIpKTsKLQotCQkJCQkvKiBjYWxjdWxhdGUgc3RhcnQgb2YgcHJlc2VudCBzZWN0b3IgKi8KLQkJCQkJb2Zmc2V0ID0gKCgoX191MzIpcG9zKS8oX191MzIpZm1jLT5zZWN0b3Jfc2l6ZSkgKiAoX191MzIpZm1jLT5zZWN0b3Jfc2l6ZTsKLQkJCQkJCi0JCQkJCUQxKHByaW50aygiamZmc19zY2FuX2ZsYXNoKCk6ZXJhc2luZyBzZWN0b3Igc3RhcnRpbmcgMHgleC5cbiIsCi0JCQkJCQkgIG9mZnNldCkpOwotCQkJCQkKLQkJCQkJaWYgKGZsYXNoX2VyYXNlX3JlZ2lvbihmbWMtPm10ZCwKLQkJCQkJCQkgICAgICAgb2Zmc2V0LCBmbWMtPnNlY3Rvcl9zaXplKSA8IDApIHsKLQkJCQkJCXByaW50ayhLRVJOX0VSUiAiSkZGUzogRXJhc2Ugb2YgZmxhc2ggZmFpbGVkLiAiCi0JCQkJCQkgICAgICAgIm9mZnNldCA9ICV1LCBlcmFzZV9zaXplID0gJWRcbiIsCi0JCQkJCQkgICAgICAgb2Zmc2V0ICwgZm1jLT5zZWN0b3Jfc2l6ZSk7Ci0KLQkJCQkJCWZsYXNoX3NhZmVfcmVsZWFzZShmbWMtPm10ZCk7Ci0JCQkJCQlrZnJlZShyZWFkX2J1Zik7Ci0JCQkJCQlyZXR1cm4gLTE7IC8qIGJhZCwgYmFkLCBiYWQhICovCi0KLQkJCQkJfQotCQkJCQlmbGFzaF9zYWZlX3JlbGVhc2UoZm1jLT5tdGQpOwotCQkJCQlrZnJlZShyZWFkX2J1Zik7Ci0KLQkJCQkJcmV0dXJuIC1FQUdBSU47IC8qIGVyYXNlZCBvZmZlbmRpbmcgc2VjdG9yLiBUcnkgbW91bnQgb25lIG1vcmUgdGltZSBwbGVhc2UuICovCi0JCQkJfQotCQkJfWVsc2V7Ci0JCQkgICAgICAgIC8qIEJlaW5nIGluIGhlcmUgbWVhbnMgdGhhdCB3ZSBoYXZlIGZvdW5kIGZyZWUgc3BhY2UgdGhhdCBlbmRzIG9uIGFuIGVyYXNlIHNlY3RvcgotCQkJCSAgIGJvdW5kYXJ5LgotCQkJCSAgIENvdW50IGl0IGluIGlmIHdlIGFyZSBzdGlsbCB1bmRlciBOVU1GUkVFQUxMT1dFRCAqYW5kKiBpdCBpcyBhdCBsZWFzdCAxIGVyYXNlIAotCQkJCSAgIHNlY3RvciBpbiBsZW5ndGguIFRoaXMgd2lsbCBrZWVwIHVzIGZyb20gcGlja2luZyBhbnkgbGl0dGxlIG9sZScgc3BhY2UgYXMgImZyZWUiLgotCQkJCSAqLwotCQkJICAgICAgICAgaWYoKG51bV9mcmVlX3NwYWNlIDwgTlVNRlJFRUFMTE9XRUQpICYmIAotCQkJCSAgICAoKHVuc2lnbmVkIGludCkocG9zIC0gc3RhcnQpID49IGZtYy0+c2VjdG9yX3NpemUpKXsKLQkJCQkgICAgICAgICAgIC8qIFdlIHJlYWxseSBkb24ndCBkbyBhbnl0aGluZyB0byBtYXJrIHNwYWNlIGFzIGZyZWUsIGV4Y2VwdCAqbm90KiAKLQkJCQkJICAgICAgbWFyayBpdCBkaXJ0eSBhbmQganVzdCBhZHZhbmNlIHRoZSAicG9zIiBsb2NhdGlvbiBwb2ludGVyLiAKLQkJCQkJICAgICAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHBpY2tlZCB1cCBhcyBmcmVlIHNwYWNlLgotCQkJCQkgICAgKi8gCi0JCQkJICAgICAgICAgICBudW1fZnJlZV9zcGFjZSsrOwotCQkJCSAgICAgICAgICAgRDEocHJpbnRrKCJGcmVlIHNwYWNlIGFjY2VwdGVkOiBTdGFydGluZyAweCV4IGZvciAweCV4IGJ5dGVzXG4iLAotCQkJCQkJICAgICAodW5zaWduZWQgaW50KSBzdGFydCwgKHVuc2lnbmVkIGludCkgKHBvcyAtIHN0YXJ0KSkpOwotCQkJCSB9ZWxzZXsKLQkJCQkgICAgICAgICBudW1fZnJlZV9zcGNfbm90X2FjY3ArKzsKLQkJCQkJIEQxKHByaW50aygiRnJlZSBzcGFjZSAoIyVpKSBmb3VuZCBidXQgKk5vdCogYWNjZXB0ZWQ6IFN0YXJ0aW5nICIKLQkJCQkJCSAgICIweCV4IGZvciAweCV4IGJ5dGVzXG4iLCBudW1fZnJlZV9zcGNfbm90X2FjY3AsIAotCQkJCQkJICAgKHVuc2lnbmVkIGludCkgc3RhcnQsIAotCQkJCQkJICAgKHVuc2lnbmVkIGludCkgKHBvcyAtIHN0YXJ0KSkpOwotCQkJCQkgCi0JCQkJCSAvKiBNYXJrIHRoaXMgc3BhY2UgYXMgZGlydHkuIFdlIGFscmVhZHkgaGF2ZSBvdXIgZnJlZSBzcGFjZS4gKi8KLQkJCQkJIEQxKHByaW50aygiRGlydHkgc3BhY2U6IFN0YXJ0aW5nIDB4JXggZm9yIDB4JXggYnl0ZXNcbiIsCi0JCQkJCQkgICAodW5zaWduZWQgaW50KSBzdGFydCwgKHVuc2lnbmVkIGludCkgKHBvcyAtIHN0YXJ0KSkpOwotCQkJCQkgamZmc19mbWFsbG9jZWQoZm1jLCAoX191MzIpIHN0YXJ0LAotCQkJCQkJCShfX3UzMikgKHBvcyAtIHN0YXJ0KSwgTlVMTCk7CQkJCSAgICAgICAgICAgCi0JCQkJIH0KLQkJCQkgCi0JCQl9Ci0JCQlpZihudW1fZnJlZV9zcGFjZSA+IE5VTUZSRUVBTExPV0VEKXsKLQkJCSAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnNfc2Nhbl9mbGFzaCgpOiBGb3VuZCBmcmVlIHNwYWNlICIKLQkJCQkJIm51bWJlciAlaS4gT25seSAlaSBmcmVlIHNwYWNlIGlzIGFsbG93ZWQuXG4iLAotCQkJCQludW1fZnJlZV9zcGFjZSwgTlVNRlJFRUFMTE9XRUQpOwkJCSAgICAgIAotCQkJfQotCQkJY29udGludWU7Ci0KLQkJY2FzZSBKRkZTX0RJUlRZX0JJVE1BU0s6Ci0JCQkvKiBXZSBoYXZlIGZvdW5kIDB4MDAwMDAwMDAgYXQgdGhpcyBwb3NpdGlvbi4gIFNjYW4gYXMgZmFyCi0JCQkgICBhcyBwb3NzaWJsZSB0byBmaW5kIG91dCBob3cgbXVjaCBpcyBkaXJ0eS4gICovCi0JCQlEMShwcmludGsoImpmZnNfc2Nhbl9mbGFzaCgpOiAweDAwMDAwMDAwIGF0IHBvcyAweCVseC5cbiIsCi0JCQkJICAobG9uZylwb3MpKTsKLQkJCWZvciAoOyBwb3MgPCBlbmQKLQkJCSAgICAgICAmJiBKRkZTX0RJUlRZX0JJVE1BU0sgPT0gZmxhc2hfcmVhZF91MzIoZm1jLT5tdGQsIHBvcyk7Ci0JCQkgICAgIHBvcyArPSA0KTsKLQkJCUQxKHByaW50aygiamZmc19zY2FuX2ZsYXNoKCk6IDB4MDAgZW5kZWQgYXQgIgotCQkJCSAgInBvcyAweCVseC5cbiIsIChsb25nKXBvcykpOwotCQkJamZmc19mbWFsbG9jZWQoZm1jLCAoX191MzIpIHN0YXJ0LAotCQkJCSAgICAgICAoX191MzIpIChwb3MgLSBzdGFydCksIE5VTEwpOwotCQkJY29udGludWU7Ci0KLQkJY2FzZSBKRkZTX01BR0lDX0JJVE1BU0s6Ci0JCQkvKiBXZSBoYXZlIHByb2JhYmx5IGZvdW5kIGEgbmV3IHJhdyBpbm9kZS4gICovCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQliYWRfaW5vZGU6Ci0JCQkvKiBXZSdyZSBmKmNrZWQuICBUaGlzIGlzIG5vdCBzb2x2ZWQgeWV0LiAgV2UgaGF2ZQotCQkJICAgdG8gc2NhbiBmb3IgdGhlIG1hZ2ljIHBhdHRlcm4uICAqLwotCQkJRDEocHJpbnRrKCIqKioqKioqKioqKioqKiogRGlydHkgZmxhc2ggbWVtb3J5IG9yICIKLQkJCQkgICJiYWQgaW5vZGU6ICIKLQkJCQkgICJoZXhkdW1wKHBvcyA9IDB4JWx4LCBsZW4gPSAxMjgpOlxuIiwKLQkJCQkgIChsb25nKXBvcykpOwotCQkJRDEoamZmc19oZXhkdW1wKGZtYy0+bXRkLCBwb3MsIDEyOCkpOwotCi0JCQlmb3IgKHBvcyArPSA0OyBwb3MgPCBlbmQ7IHBvcyArPSA0KSB7Ci0JCQkJc3dpdGNoIChmbGFzaF9yZWFkX3UzMihmbWMtPm10ZCwgcG9zKSkgewotCQkJCWNhc2UgSkZGU19NQUdJQ19CSVRNQVNLOgotCQkJCWNhc2UgSkZGU19FTVBUWV9CSVRNQVNLOgotCQkJCQkvKiBoYW5kbGUgdGhlc2UgaW4gdGhlIG1haW4gc3dpdGNoKCkgbG9vcCAqLwotCQkJCQlnb3RvIGNvbnRfc2NhbjsKLQotCQkJCWRlZmF1bHQ6Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJY29udF9zY2FuOgotCQkJLyogRmlyc3QsIG1hcmsgYXMgZGlydHkgdGhlIHJlZ2lvbgotCQkJICAgd2hpY2ggcmVhbGx5IGRvZXMgY29udGFpbiBjcmFwLiAqLwotCQkJamZmc19mbWFsbG9jZWQoZm1jLCAoX191MzIpIHN0YXJ0LAotCQkJCSAgICAgICAoX191MzIpIChwb3MgLSBzdGFydCksCi0JCQkJICAgICAgIE5VTEwpOwotCQkJCi0JCQljb250aW51ZTsKLQkJfS8qIHN3aXRjaCAqLwotCi0JCS8qIFdlIGhhdmUgZm91bmQgdGhlIGJlZ2lubmluZyBvZiBhbiBpbm9kZS4gIENyZWF0ZSBhCi0JCSAgIG5vZGUgZm9yIGl0IHVubGVzcyB0aGVyZSBhbHJlYWR5IGlzIG9uZSBhdmFpbGFibGUuICAqLwotCQlpZiAoIW5vZGUpIHsKLQkJCWlmICghKG5vZGUgPSBqZmZzX2FsbG9jX25vZGUoKSkpIHsKLQkJCQkvKiBGcmVlIHJlYWQgYnVmZmVyICovCi0JCQkJa2ZyZWUocmVhZF9idWYpOwotCi0JCQkJLyogUmVsZWFzZSB0aGUgZmxhc2ggZGV2aWNlICovCi0JCQkJZmxhc2hfc2FmZV9yZWxlYXNlKGZtYy0+bXRkKTsKLQkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0KLQkJCURKTShub19qZmZzX25vZGUrKyk7Ci0JCX0KLQotCQkvKiBSZWFkIHRoZSBuZXh0IHJhdyBpbm9kZS4gICovCi0KLQkJZmxhc2hfc2FmZV9yZWFkKGZtYy0+bXRkLCBwb3MsICh1X2NoYXIgKikgJnJhd19pbm9kZSwKLQkJCQlzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKSk7Ci0KLQkJLyogV2hlbiB3ZSBjb21wdXRlIHRoZSBjaGVja3N1bSBmb3IgdGhlIGlub2RlLCB3ZSBuZXZlcgotCQkgICBjb3VudCB0aGUgJ2FjY3VyYXRlJyBvciB0aGUgJ2NoZWNrc3VtJyBmaWVsZHMuICAqLwotCQl0bXBfYWNjdXJhdGUgPSByYXdfaW5vZGUuYWNjdXJhdGU7Ci0JCXRtcF9jaGtzdW0gPSByYXdfaW5vZGUuY2hrc3VtOwotCQlyYXdfaW5vZGUuYWNjdXJhdGUgPSAwOwotCQlyYXdfaW5vZGUuY2hrc3VtID0gMDsKLQkJY2hlY2tzdW0gPSBqZmZzX2NoZWNrc3VtKCZyYXdfaW5vZGUsCi0JCQkJCSBzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKSk7Ci0JCXJhd19pbm9kZS5hY2N1cmF0ZSA9IHRtcF9hY2N1cmF0ZTsKLQkJcmF3X2lub2RlLmNoa3N1bSA9IHRtcF9jaGtzdW07Ci0KLQkJRDMocHJpbnRrKCIqKiogV2UgaGF2ZSBmb3VuZCB0aGlzIHJhdyBpbm9kZSBhdCBwb3MgMHglbHggIgotCQkJICAib24gdGhlIGZsYXNoOlxuIiwgKGxvbmcpcG9zKSk7Ci0JCUQzKGpmZnNfcHJpbnRfcmF3X2lub2RlKCZyYXdfaW5vZGUpKTsKLQotCQlpZiAoY2hlY2tzdW0gIT0gcmF3X2lub2RlLmNoa3N1bSkgewotCQkJRDEocHJpbnRrKCJqZmZzX3NjYW5fZmxhc2goKTogQmFkIGNoZWNrc3VtOiAiCi0JCQkJICAiY2hlY2tzdW0gPSAldSwgIgotCQkJCSAgInJhd19pbm9kZS5jaGtzdW0gPSAldVxuIiwKLQkJCQkgIGNoZWNrc3VtLCByYXdfaW5vZGUuY2hrc3VtKSk7Ci0JCQlwb3MgKz0gc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSk7Ci0JCQlqZmZzX2ZtYWxsb2NlZChmbWMsIChfX3UzMikgc3RhcnQsCi0JCQkJICAgICAgIChfX3UzMikgKHBvcyAtIHN0YXJ0KSwgTlVMTCk7Ci0JCQkvKiBSZXVzZSB0aGlzIHVudXNlZCBzdHJ1Y3QgamZmc19ub2RlLiAgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogQ2hlY2sgdGhlIHJhdyBpbm9kZSByZWFkIHNvIGZhci4gIFN0YXJ0IHdpdGggdGhlCi0JCSAgIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBmaWxlbmFtZS4gICovCi0JCWlmIChyYXdfaW5vZGUubnNpemUgPiBKRkZTX01BWF9OQU1FX0xFTikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiamZmc19zY2FuX2ZsYXNoOiBGb3VuZCBhICIKLQkJCSAgICAgICAiSkZGUyBub2RlIHdpdGggbmFtZSB0b28gbGFyZ2VcbiIpOwotCQkJZ290byBiYWRfaW5vZGU7Ci0JCX0KLQotCQlpZiAocmF3X2lub2RlLnJlbmFtZSAmJiByYXdfaW5vZGUuZHNpemUgIT0gc2l6ZW9mKF9fdTMyKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiamZmc19zY2FuX2ZsYXNoOiBGb3VuZCBhICIKLQkJCSAgICAgICAicmVuYW1lIG5vZGUgd2l0aCBkc2l6ZSAldS5cbiIsCi0JCQkgICAgICAgcmF3X2lub2RlLmRzaXplKTsKLQkJCWpmZnNfcHJpbnRfcmF3X2lub2RlKCZyYXdfaW5vZGUpOwotCQkJZ290byBiYWRfaW5vZGU7Ci0JCX0KLQotCQkvKiBUaGUgbm9kZSdzIGRhdGEgc2VnbWVudCBzaG91bGQgbm90IGV4Y2VlZCBhCi0JCSAgIGNlcnRhaW4gbGVuZ3RoLiAgKi8KLQkJaWYgKHJhd19pbm9kZS5kc2l6ZSA+IGZtYy0+bWF4X2NodW5rX3NpemUpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnNfc2Nhbl9mbGFzaDogRm91bmQgYSAiCi0JCQkgICAgICAgIkpGRlMgbm9kZSB3aXRoIGRzaXplICgweCV4KSA+IG1heF9jaHVua19zaXplICgweCV4KVxuIiwKLQkJCSAgICAgICByYXdfaW5vZGUuZHNpemUsIGZtYy0+bWF4X2NodW5rX3NpemUpOwotCQkJZ290byBiYWRfaW5vZGU7Ci0JCX0KLQotCQlwb3MgKz0gc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSk7Ci0KLQkJLyogVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgYSBub2RlIHRoYXQKLQkJICAgdmlvbGF0ZXMgdGhlIGZsYXNoIGJvdW5kYXJpZXMgc2hvdWxkbid0IGJlIHdyaXR0ZW4KLQkJICAgaW4gdGhlIGZpcnN0IHBsYWNlLiAqLwotCQlpZiAocG9zID49IGVuZCkgewotCQkJZ290byBjaGVja19ub2RlOwotCQl9Ci0KLQkJLyogUmVhZCB0aGUgbmFtZS4gICovCi0JCSpuYW1lID0gMDsKLQkJaWYgKHJhd19pbm9kZS5uc2l6ZSkgewotCQkgICAgICAgIGZsYXNoX3NhZmVfcmVhZChmbWMtPm10ZCwgcG9zLCBuYW1lLCByYXdfaW5vZGUubnNpemUpOwotCQkJbmFtZVtyYXdfaW5vZGUubnNpemVdID0gJ1wwJzsKLQkJCXBvcyArPSByYXdfaW5vZGUubnNpemUKLQkJCSAgICAgICArIEpGRlNfR0VUX1BBRF9CWVRFUyhyYXdfaW5vZGUubnNpemUpOwotCQkJRDMocHJpbnRrKCJuYW1lID09IFwiJXNcIlxuIiwgbmFtZSkpOwotCQkJY2hlY2tzdW0gPSBqZmZzX2NoZWNrc3VtKG5hbWUsIHJhd19pbm9kZS5uc2l6ZSk7Ci0JCQlpZiAoY2hlY2tzdW0gIT0gcmF3X2lub2RlLm5jaGtzdW0pIHsKLQkJCQlEMShwcmludGsoImpmZnNfc2Nhbl9mbGFzaCgpOiBCYWQgY2hlY2tzdW06ICIKLQkJCQkJICAiY2hlY2tzdW0gPSAldSwgIgotCQkJCQkgICJyYXdfaW5vZGUubmNoa3N1bSA9ICV1XG4iLAotCQkJCQkgIGNoZWNrc3VtLCByYXdfaW5vZGUubmNoa3N1bSkpOwotCQkJCWpmZnNfZm1hbGxvY2VkKGZtYywgKF9fdTMyKSBzdGFydCwKLQkJCQkJICAgICAgIChfX3UzMikgKHBvcyAtIHN0YXJ0KSwgTlVMTCk7Ci0JCQkJLyogUmV1c2UgdGhpcyB1bnVzZWQgc3RydWN0IGpmZnNfbm9kZS4gICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAocG9zID49IGVuZCkgewotCQkJCWdvdG8gY2hlY2tfbm9kZTsKLQkJCX0KLQkJfQotCi0JCS8qIFJlYWQgdGhlIGRhdGEsIGlmIGl0IGV4aXN0cywgaW4gb3JkZXIgdG8gYmUgc3VyZSBpdAotCQkgICBtYXRjaGVzIHRoZSBjaGVja3N1bS4gICovCi0JCWlmIChyYXdfaW5vZGUuZHNpemUpIHsKLQkJCWlmIChyYXdfaW5vZGUucmVuYW1lKSB7Ci0JCQkJZGVsZXRlZF9maWxlID0gZmxhc2hfcmVhZF91MzIoZm1jLT5tdGQsIHBvcyk7Ci0JCQl9Ci0JCQlpZiAoamZmc19jaGVja3N1bV9mbGFzaChmbWMtPm10ZCwgcG9zLCByYXdfaW5vZGUuZHNpemUsICZjaGVja3N1bSkpIHsKLQkJCQlwcmludGsoImpmZnNfY2hlY2tzdW1fZmxhc2goKSBmYWlsZWQgdG8gY2FsY3VsYXRlIGEgY2hlY2tzdW1cbiIpOwotCQkJCWpmZnNfZm1hbGxvY2VkKGZtYywgKF9fdTMyKSBzdGFydCwKLQkJCQkJICAgICAgIChfX3UzMikgKHBvcyAtIHN0YXJ0KSwgTlVMTCk7Ci0JCQkJLyogUmV1c2UgdGhpcyB1bnVzZWQgc3RydWN0IGpmZnNfbm9kZS4gICovCi0JCQkJY29udGludWU7Ci0JCQl9CQkJCQotCQkJcG9zICs9IHJhd19pbm9kZS5kc2l6ZQotCQkJICAgICAgICsgSkZGU19HRVRfUEFEX0JZVEVTKHJhd19pbm9kZS5kc2l6ZSk7Ci0KLQkJCWlmIChjaGVja3N1bSAhPSByYXdfaW5vZGUuZGNoa3N1bSkgewotCQkJCUQxKHByaW50aygiamZmc19zY2FuX2ZsYXNoKCk6IEJhZCBjaGVja3N1bTogIgotCQkJCQkgICJjaGVja3N1bSA9ICV1LCAiCi0JCQkJCSAgInJhd19pbm9kZS5kY2hrc3VtID0gJXVcbiIsCi0JCQkJCSAgY2hlY2tzdW0sIHJhd19pbm9kZS5kY2hrc3VtKSk7Ci0JCQkJamZmc19mbWFsbG9jZWQoZm1jLCAoX191MzIpIHN0YXJ0LAotCQkJCQkgICAgICAgKF9fdTMyKSAocG9zIC0gc3RhcnQpLCBOVUxMKTsKLQkJCQkvKiBSZXVzZSB0aGlzIHVudXNlZCBzdHJ1Y3QgamZmc19ub2RlLiAgKi8KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCi0JCWNoZWNrX25vZGU6Ci0KLQkJLyogUmVtZW1iZXIgdGhlIGhpZ2hlc3QgaW5vZGUgbnVtYmVyIGluIHRoZSB3aG9sZSBmaWxlCi0JCSAgIHN5c3RlbS4gIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHdoZW4gYXNzaWduaW5nCi0JCSAgIG5ldyBmaWxlcyBuZXcgaW5vZGUgbnVtYmVycy4gICovCi0JCWlmIChjLT5uZXh0X2lubyA8PSByYXdfaW5vZGUuaW5vKSB7Ci0JCQljLT5uZXh0X2lubyA9IHJhd19pbm9kZS5pbm8gKyAxOwotCQl9Ci0KLQkJaWYgKHJhd19pbm9kZS5hY2N1cmF0ZSkgewotCQkJaW50IGVycjsKLQkJCW5vZGUtPmRhdGFfb2Zmc2V0ID0gcmF3X2lub2RlLm9mZnNldDsKLQkJCW5vZGUtPmRhdGFfc2l6ZSA9IHJhd19pbm9kZS5kc2l6ZTsKLQkJCW5vZGUtPnJlbW92ZWRfc2l6ZSA9IHJhd19pbm9kZS5yc2l6ZTsKLQkJCS8qIENvbXB1dGUgdGhlIG9mZnNldCB0byB0aGUgYWN0dWFsIGRhdGEgaW4gdGhlCi0JCQkgICBvbi1mbGFzaCBub2RlLiAgKi8KLQkJCW5vZGUtPmZtX29mZnNldAotCQkJPSBzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKQotCQkJICArIHJhd19pbm9kZS5uc2l6ZQotCQkJICArIEpGRlNfR0VUX1BBRF9CWVRFUyhyYXdfaW5vZGUubnNpemUpOwotCQkJbm9kZS0+Zm0gPSBqZmZzX2ZtYWxsb2NlZChmbWMsIChfX3UzMikgc3RhcnQsCi0JCQkJCQkgIChfX3UzMikgKHBvcyAtIHN0YXJ0KSwKLQkJCQkJCSAgbm9kZSk7Ci0JCQlpZiAoIW5vZGUtPmZtKSB7Ci0JCQkJRChwcmludGsoImpmZnNfc2Nhbl9mbGFzaCgpOiAhbm9kZS0+Zm1cbiIpKTsKLQkJCQlqZmZzX2ZyZWVfbm9kZShub2RlKTsKLQkJCQlESk0obm9famZmc19ub2RlLS0pOwotCi0JCQkJLyogRnJlZSByZWFkIGJ1ZmZlciAqLwotCQkJCWtmcmVlKHJlYWRfYnVmKTsKLQotCQkJCS8qIFJlbGVhc2UgdGhlIGZsYXNoIGRldmljZSAqLwotCQkJCWZsYXNoX3NhZmVfcmVsZWFzZShmbWMtPm10ZCk7Ci0KLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0KLQkJCWlmICgoZXJyID0gamZmc19pbnNlcnRfbm9kZShjLCBOVUxMLCAmcmF3X2lub2RlLAotCQkJCQkJICAgIG5hbWUsIG5vZGUpKSA8IDApIHsKLQkJCQlwcmludGsoIkpGRlM6IEZhaWxlZCB0byBoYW5kbGUgcmF3IGlub2RlLiAiCi0JCQkJICAgICAgICIoZXJyID0gJWQpXG4iLCBlcnIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKHJhd19pbm9kZS5yZW5hbWUpIHsKLQkJCQlzdHJ1Y3QgamZmc19kZWxldGVfbGlzdCAqZGwKLQkJCQk9IChzdHJ1Y3QgamZmc19kZWxldGVfbGlzdCAqKQotCQkJCSAga21hbGxvYyhzaXplb2Yoc3RydWN0IGpmZnNfZGVsZXRlX2xpc3QpLAotCQkJCQkgIEdGUF9LRVJORUwpOwotCQkJCWlmICghZGwpIHsKLQkJCQkJRChwcmludGsoImpmZnNfc2Nhbl9mbGFzaDogIWRsXG4iKSk7Ci0JCQkJCWpmZnNfZnJlZV9ub2RlKG5vZGUpOwotCQkJCQlESk0obm9famZmc19ub2RlLS0pOwotCi0JCQkJCS8qIFJlbGVhc2UgdGhlIGZsYXNoIGRldmljZSAqLwotCQkJCQlmbGFzaF9zYWZlX3JlbGVhc2UoZm1jLT5mbGFzaF9wYXJ0KTsKLQotCQkJCQkvKiBGcmVlIHJlYWQgYnVmZmVyICovCi0JCQkJCWtmcmVlKHJlYWRfYnVmKTsKLQotCQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCQl9Ci0JCQkJZGwtPmlubyA9IGRlbGV0ZWRfZmlsZTsKLQkJCQlkbC0+bmV4dCA9IGMtPmRlbGV0ZV9saXN0OwotCQkJCWMtPmRlbGV0ZV9saXN0ID0gZGw7Ci0JCQkJbm9kZS0+ZGF0YV9zaXplID0gMDsKLQkJCX0KLQkJCUQzKGpmZnNfcHJpbnRfbm9kZShub2RlKSk7Ci0JCQlub2RlID0gTlVMTDsgLyogRG9uJ3QgZnJlZSB0aGUgbm9kZSEgICovCi0JCX0KLQkJZWxzZSB7Ci0JCQlqZmZzX2ZtYWxsb2NlZChmbWMsIChfX3UzMikgc3RhcnQsCi0JCQkJICAgICAgIChfX3UzMikgKHBvcyAtIHN0YXJ0KSwgTlVMTCk7Ci0JCQlEMyhwcmludGsoImpmZnNfc2Nhbl9mbGFzaCgpOiBKdXN0IGZvdW5kIGFuIG9ic29sZXRlICIKLQkJCQkgICJyYXdfaW5vZGUuIENvbnRpbnVpbmcgdGhlIHNjYW4uLi5cbiIpKTsKLQkJCS8qIFJldXNlIHRoaXMgdW51c2VkIHN0cnVjdCBqZmZzX25vZGUuICAqLwotCQl9Ci0JfQotCi0JaWYgKG5vZGUpIHsKLQkJamZmc19mcmVlX25vZGUobm9kZSk7Ci0JCURKTShub19qZmZzX25vZGUtLSk7Ci0JfQotCWpmZnNfYnVpbGRfZW5kKGZtYyk7Ci0KLQkvKiBGcmVlIHJlYWQgYnVmZmVyICovCi0Ja2ZyZWUocmVhZF9idWYpOwotCi0JaWYoIW51bV9mcmVlX3NwYWNlKXsKLQkgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnNfc2Nhbl9mbGFzaCgpOiBEaWQgbm90IGZpbmQgZXZlbiBhIHNpbmdsZSAiCi0JCSAgICAgICAiY2h1bmsgb2YgZnJlZSBzcGFjZS4gVGhpcyBpcyBCQUQhXG4iKTsKLQl9Ci0KLQkvKiBSZXR1cm4gaGFwcHkgKi8KLQlEMyhwcmludGsoImpmZnNfc2Nhbl9mbGFzaCgpOiBMZWF2aW5nLi4uXG4iKSk7Ci0JZmxhc2hfc2FmZV9yZWxlYXNlKGZtYy0+bXRkKTsKLQotCS8qIFRoaXMgaXMgdG8gdHJhcCB0aGUgImZyZWUgc2l6ZSBhY2NvdW50aW5nIHNjcmV3ZWQgZXJyb3IuICovCi0JZnJlZV9jaHVua19zaXplMSA9IGpmZnNfZnJlZV9zaXplMShmbWMpOwotCWZyZWVfY2h1bmtfc2l6ZTIgPSBqZmZzX2ZyZWVfc2l6ZTIoZm1jKTsKLQotCWlmIChmcmVlX2NodW5rX3NpemUxICsgZnJlZV9jaHVua19zaXplMiAhPSBmbWMtPmZyZWVfc2l6ZSkgewotCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnNfc2Nhbl9mYWxzaCgpOkZyZWUgc2l6ZSBhY2NvdW50aW5nIHNjcmV3ZWRcbiIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJqZmZmc19zY2FuX2ZsYXNoKCk6ZnJlZV9jaHVua19zaXplMSA9PSAweCV4LCAiCi0JCSAgICAgICAiZnJlZV9jaHVua19zaXplMiA9PSAweCV4LCBmbWMtPmZyZWVfc2l6ZSA9PSAweCV4XG4iLCAKLQkJICAgICAgIGZyZWVfY2h1bmtfc2l6ZTEsIGZyZWVfY2h1bmtfc2l6ZTIsIGZtYy0+ZnJlZV9zaXplKTsKLQotCQlyZXR1cm4gLTE7IC8qIERvIE5PVCBtb3VudCBmL3Mgc28gdGhhdCB3ZSBjYW4gaW5zcGVjdCB3aGF0IGhhcHBlbmVkLgotCQkJICAgICAgTW91bnRpbmcgdGhpcyAgc2NyZXdlZCB1cCBmL3Mgd2lsbCBzY3JldyB1cyB1cCBhbnl3YXkuCi0JCQkgICAgKi8KLQl9CQotCi0JcmV0dXJuIDA7IC8qIGFzIGZhciBhcyB3ZSBhcmUgY29uY2VybmVkLCB3ZSBhcmUgaGFwcHkhICovCi19IC8qIGpmZnNfc2Nhbl9mbGFzaCgpICAqLwotCi0KLS8qIEluc2VydCBhbnkga2luZCBvZiBub2RlIGludG8gdGhlIGZpbGUgc3lzdGVtLiAgVGFrZSBjYXJlIG9mIGRhdGEKLSAgIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gIEFsc28gcmVtb3ZlIHJlZHVuZGFudCBpbmZvcm1hdGlvbi4gVGhlCi0gICBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgYG5hbWUnIGlzIHJlZ2FyZGVkIGFzICJnaXZlbiBhd2F5IiBpbiB0aGUKLSAgIGNhbGxlcidzIHBlcnNwZWN0aXZlLiAgKi8KLWludAotamZmc19pbnNlcnRfbm9kZShzdHJ1Y3QgamZmc19jb250cm9sICpjLCBzdHJ1Y3QgamZmc19maWxlICpmLAotCQkgY29uc3Qgc3RydWN0IGpmZnNfcmF3X2lub2RlICpyYXdfaW5vZGUsCi0JCSBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgamZmc19ub2RlICpub2RlKQotewotCWludCB1cGRhdGVfbmFtZSA9IDA7Ci0JaW50IGluc2VydF9pbnRvX3RyZWUgPSAwOwotCi0JRDIocHJpbnRrKCJqZmZzX2luc2VydF9ub2RlKCk6IGlubyA9ICV1LCB2ZXJzaW9uID0gJXUsICIKLQkJICAibmFtZSA9IFwiJXNcIiwgZGVsZXRlZCA9ICVkXG4iLAotCQkgIHJhd19pbm9kZS0+aW5vLCByYXdfaW5vZGUtPnZlcnNpb24sCi0JCSAgKChuYW1lICYmICpuYW1lKSA/IG5hbWUgOiAiIiksIHJhd19pbm9kZS0+ZGVsZXRlZCkpOwotCi0JLyogSWYgdGhlcmUgZG9lc24ndCBleGlzdCBhbiBhc3NvY2lhdGVkIGpmZnNfZmlsZSwgdGhlbgotCSAgIGNyZWF0ZSwgaW5pdGlhbGl6ZSBhbmQgaW5zZXJ0IG9uZSBpbnRvIHRoZSBmaWxlIHN5c3RlbS4gICovCi0JaWYgKCFmICYmICEoZiA9IGpmZnNfZmluZF9maWxlKGMsIHJhd19pbm9kZS0+aW5vKSkpIHsKLQkJaWYgKCEoZiA9IGpmZnNfY3JlYXRlX2ZpbGUoYywgcmF3X2lub2RlKSkpIHsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWpmZnNfaW5zZXJ0X2ZpbGVfaW50b19oYXNoKGYpOwotCQlpbnNlcnRfaW50b190cmVlID0gMTsKLQl9Ci0Jbm9kZS0+aW5vID0gcmF3X2lub2RlLT5pbm87Ci0Jbm9kZS0+dmVyc2lvbiA9IHJhd19pbm9kZS0+dmVyc2lvbjsKLQlub2RlLT5kYXRhX3NpemUgPSByYXdfaW5vZGUtPmRzaXplOwotCW5vZGUtPmZtX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpICsgcmF3X2lub2RlLT5uc2l6ZQotCQkJICArIEpGRlNfR0VUX1BBRF9CWVRFUyhyYXdfaW5vZGUtPm5zaXplKTsKLQlub2RlLT5uYW1lX3NpemUgPSByYXdfaW5vZGUtPm5zaXplOwotCi0JLyogTm93IGluc2VydCB0aGUgbm9kZSBhdCB0aGUgY29ycmVjdCBwb3NpdGlvbiBpbnRvIHRoZSBmaWxlJ3MKLQkgICB2ZXJzaW9uIGxpc3QuICAqLwotCWlmICghZi0+dmVyc2lvbl9oZWFkKSB7Ci0JCS8qIFRoaXMgaXMgdGhlIGZpcnN0IG5vZGUuICAqLwotCQlmLT52ZXJzaW9uX2hlYWQgPSBub2RlOwotCQlmLT52ZXJzaW9uX3RhaWwgPSBub2RlOwotCQlub2RlLT52ZXJzaW9uX3ByZXYgPSBOVUxMOwotCQlub2RlLT52ZXJzaW9uX25leHQgPSBOVUxMOwotCQlmLT5oaWdoZXN0X3ZlcnNpb24gPSBub2RlLT52ZXJzaW9uOwotCQl1cGRhdGVfbmFtZSA9IDE7Ci0JCWYtPm1vZGUgPSByYXdfaW5vZGUtPm1vZGU7Ci0JCWYtPnVpZCA9IHJhd19pbm9kZS0+dWlkOwotCQlmLT5naWQgPSByYXdfaW5vZGUtPmdpZDsKLQkJZi0+YXRpbWUgPSByYXdfaW5vZGUtPmF0aW1lOwotCQlmLT5tdGltZSA9IHJhd19pbm9kZS0+bXRpbWU7Ci0JCWYtPmN0aW1lID0gcmF3X2lub2RlLT5jdGltZTsKLQl9Ci0JZWxzZSBpZiAoKGYtPmhpZ2hlc3RfdmVyc2lvbiA8IG5vZGUtPnZlcnNpb24pCi0JCSB8fCAobm9kZS0+dmVyc2lvbiA9PSAwKSkgewotCQkvKiBJbnNlcnQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4gIEkuZS4gdGhpcyBub2RlIGlzIHRoZQotCQkgICBuZXdlc3Qgb25lIHNvIGZhci4gICovCi0JCW5vZGUtPnZlcnNpb25fcHJldiA9IGYtPnZlcnNpb25fdGFpbDsKLQkJbm9kZS0+dmVyc2lvbl9uZXh0ID0gTlVMTDsKLQkJZi0+dmVyc2lvbl90YWlsLT52ZXJzaW9uX25leHQgPSBub2RlOwotCQlmLT52ZXJzaW9uX3RhaWwgPSBub2RlOwotCQlmLT5oaWdoZXN0X3ZlcnNpb24gPSBub2RlLT52ZXJzaW9uOwotCQl1cGRhdGVfbmFtZSA9IDE7Ci0JCWYtPnBpbm8gPSByYXdfaW5vZGUtPnBpbm87Ci0JCWYtPm1vZGUgPSByYXdfaW5vZGUtPm1vZGU7Ci0JCWYtPnVpZCA9IHJhd19pbm9kZS0+dWlkOwotCQlmLT5naWQgPSByYXdfaW5vZGUtPmdpZDsKLQkJZi0+YXRpbWUgPSByYXdfaW5vZGUtPmF0aW1lOwotCQlmLT5tdGltZSA9IHJhd19pbm9kZS0+bXRpbWU7Ci0JCWYtPmN0aW1lID0gcmF3X2lub2RlLT5jdGltZTsKLQl9Ci0JZWxzZSBpZiAoZi0+dmVyc2lvbl9oZWFkLT52ZXJzaW9uID4gbm9kZS0+dmVyc2lvbikgewotCQkvKiBJbnNlcnQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdC4gICovCi0JCW5vZGUtPnZlcnNpb25fcHJldiA9IE5VTEw7Ci0JCW5vZGUtPnZlcnNpb25fbmV4dCA9IGYtPnZlcnNpb25faGVhZDsKLQkJZi0+dmVyc2lvbl9oZWFkLT52ZXJzaW9uX3ByZXYgPSBub2RlOwotCQlmLT52ZXJzaW9uX2hlYWQgPSBub2RlOwotCQlpZiAoIWYtPm5hbWUpIHsKLQkJCXVwZGF0ZV9uYW1lID0gMTsKLQkJfQotCX0KLQllbHNlIHsKLQkJc3RydWN0IGpmZnNfbm9kZSAqbjsKLQkJaW50IG5ld2VyX25hbWUgPSAwOwotCQkvKiBTZWFyY2ggZm9yIHRoZSBpbnNlcnRpb24gcG9zaXRpb24gc3RhcnRpbmcgZnJvbQotCQkgICB0aGUgdGFpbCAobmV3ZXN0IG5vZGUpLiAgKi8KLQkJZm9yIChuID0gZi0+dmVyc2lvbl90YWlsOyBuOyBuID0gbi0+dmVyc2lvbl9wcmV2KSB7Ci0JCQlpZiAobi0+dmVyc2lvbiA8IG5vZGUtPnZlcnNpb24pIHsKLQkJCQlub2RlLT52ZXJzaW9uX3ByZXYgPSBuOwotCQkJCW5vZGUtPnZlcnNpb25fbmV4dCA9IG4tPnZlcnNpb25fbmV4dDsKLQkJCQlub2RlLT52ZXJzaW9uX25leHQtPnZlcnNpb25fcHJldiA9IG5vZGU7Ci0JCQkJbi0+dmVyc2lvbl9uZXh0ID0gbm9kZTsKLQkJCQlpZiAoIW5ld2VyX25hbWUpIHsKLQkJCQkJdXBkYXRlX25hbWUgPSAxOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChuLT5uYW1lX3NpemUpIHsKLQkJCQluZXdlcl9uYW1lID0gMTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIERlbGV0aW9uIGlzIGlycmV2ZXJzaWJsZS4gSWYgYW55ICdkZWxldGVkJyBub2RlIGlzIGV2ZXIKLQkgICB3cml0dGVuLCB0aGUgZmlsZSBpcyBkZWxldGVkICovCi0JaWYgKHJhd19pbm9kZS0+ZGVsZXRlZCkKLQkJZi0+ZGVsZXRlZCA9IHJhd19pbm9kZS0+ZGVsZXRlZDsKLQotCS8qIFBlcmhhcHMgdXBkYXRlIHRoZSBuYW1lLiAgKi8KLQlpZiAocmF3X2lub2RlLT5uc2l6ZSAmJiB1cGRhdGVfbmFtZSAmJiBuYW1lICYmICpuYW1lICYmIChuYW1lICE9IGYtPm5hbWUpKSB7Ci0JCWlmIChmLT5uYW1lKSB7Ci0JCQlrZnJlZShmLT5uYW1lKTsKLQkJCURKTShub19uYW1lLS0pOwotCQl9Ci0JCWlmICghKGYtPm5hbWUgPSBrbWFsbG9jKHJhd19pbm9kZS0+bnNpemUgKyAxLAotCQkJCQkJIEdGUF9LRVJORUwpKSkgewotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJREpNKG5vX25hbWUrKyk7Ci0JCW1lbWNweShmLT5uYW1lLCBuYW1lLCByYXdfaW5vZGUtPm5zaXplKTsKLQkJZi0+bmFtZVtyYXdfaW5vZGUtPm5zaXplXSA9ICdcMCc7Ci0JCWYtPm5zaXplID0gcmF3X2lub2RlLT5uc2l6ZTsKLQkJRDMocHJpbnRrKCJqZmZzX2luc2VydF9ub2RlKCk6IFVwZGF0ZWQgdGhlIG5hbWUgb2YgIgotCQkJICAidGhlIGZpbGUgdG8gXCIlc1wiLlxuIiwgbmFtZSkpOwotCX0KLQotCWlmICghYy0+YnVpbGRpbmdfZnMpIHsKLQkJRDMocHJpbnRrKCJqZmZzX2luc2VydF9ub2RlKCk6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLQkJCSAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gMVxuIikpOwotCQlpZiAoaW5zZXJ0X2ludG9fdHJlZSkgewotCQkJamZmc19pbnNlcnRfZmlsZV9pbnRvX3RyZWUoZik7Ci0JCX0KLQkJLyogT25jZSB1cG9uIGEgdGltZSwgd2Ugd291bGQgY2FsbCBqZmZzX3Bvc3NpYmx5X2RlbGV0ZV9maWxlKCkKLQkJICAgaGVyZS4gVGhhdCBjYXVzZXMgYW4gb29wcyBpZiBzb21lb25lJ3Mgc3RpbGwgZ290IHRoZSBmaWxlCi0JCSAgIG9wZW4sIHNvIG5vdyB3ZSBvbmx5IGRvIGl0IGluIGpmZnNfZGVsZXRlX2lub2RlKCkKLQkJICAgLS0gZHdtdzIKLQkJKi8KLQkJaWYgKG5vZGUtPmRhdGFfc2l6ZSB8fCBub2RlLT5yZW1vdmVkX3NpemUpIHsKLQkJCWpmZnNfdXBkYXRlX2ZpbGUoZiwgbm9kZSk7Ci0JCX0KLQkJamZmc19yZW1vdmVfcmVkdW5kYW50X25vZGVzKGYpOwotCi0JCWpmZnNfZ2FyYmFnZV9jb2xsZWN0X3RyaWdnZXIoYyk7Ci0KLQkJRDMocHJpbnRrKCJqZmZzX2luc2VydF9ub2RlKCk6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLQkJCSAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gMlxuIikpOwotCX0KLQotCXJldHVybiAwOwotfSAvKiBqZmZzX2luc2VydF9ub2RlKCkgICovCi0KLQotLyogVW5saW5rIGEgamZmc19ub2RlIGZyb20gdGhlIHZlcnNpb24gbGlzdCBpdCBpcyBpbi4gICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWpmZnNfdW5saW5rX25vZGVfZnJvbV92ZXJzaW9uX2xpc3Qoc3RydWN0IGpmZnNfZmlsZSAqZiwKLQkJCQkgICBzdHJ1Y3QgamZmc19ub2RlICpub2RlKQotewotCWlmIChub2RlLT52ZXJzaW9uX3ByZXYpIHsKLQkJbm9kZS0+dmVyc2lvbl9wcmV2LT52ZXJzaW9uX25leHQgPSBub2RlLT52ZXJzaW9uX25leHQ7Ci0JfSBlbHNlIHsKLQkJZi0+dmVyc2lvbl9oZWFkID0gbm9kZS0+dmVyc2lvbl9uZXh0OwotCX0KLQlpZiAobm9kZS0+dmVyc2lvbl9uZXh0KSB7Ci0JCW5vZGUtPnZlcnNpb25fbmV4dC0+dmVyc2lvbl9wcmV2ID0gbm9kZS0+dmVyc2lvbl9wcmV2OwotCX0gZWxzZSB7Ci0JCWYtPnZlcnNpb25fdGFpbCA9IG5vZGUtPnZlcnNpb25fcHJldjsKLQl9Ci19Ci0KLQotLyogVW5saW5rIGEgamZmc19ub2RlIGZyb20gdGhlIHJhbmdlIGxpc3QgaXQgaXMgaW4uICAqLwotc3RhdGljIGlubGluZSB2b2lkCi1qZmZzX3VubGlua19ub2RlX2Zyb21fcmFuZ2VfbGlzdChzdHJ1Y3QgamZmc19maWxlICpmLCBzdHJ1Y3QgamZmc19ub2RlICpub2RlKQotewotCWlmIChub2RlLT5yYW5nZV9wcmV2KSB7Ci0JCW5vZGUtPnJhbmdlX3ByZXYtPnJhbmdlX25leHQgPSBub2RlLT5yYW5nZV9uZXh0OwotCX0KLQllbHNlIHsKLQkJZi0+cmFuZ2VfaGVhZCA9IG5vZGUtPnJhbmdlX25leHQ7Ci0JfQotCWlmIChub2RlLT5yYW5nZV9uZXh0KSB7Ci0JCW5vZGUtPnJhbmdlX25leHQtPnJhbmdlX3ByZXYgPSBub2RlLT5yYW5nZV9wcmV2OwotCX0KLQllbHNlIHsKLQkJZi0+cmFuZ2VfdGFpbCA9IG5vZGUtPnJhbmdlX3ByZXY7Ci0JfQotfQotCi0KLS8qIEZ1bmN0aW9uIHVzZWQgYnkgamZmc19yZW1vdmVfcmVkdW5kYW50X25vZGVzKCkgYmVsb3cuICBUaGlzIGZ1bmN0aW9uCi0gICBjbGFzc2lmaWVzIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBhIG5vZGUgYWRkcyB0byBhIGZpbGUuICAqLwotc3RhdGljIGlubGluZSBfX3U4Ci1qZmZzX2NsYXNzaWZ5X25vZGUoc3RydWN0IGpmZnNfbm9kZSAqbm9kZSkKLXsKLQlfX3U4IG1vZF90eXBlID0gSkZGU19NT0RJRllfSU5PREU7Ci0KLQlpZiAobm9kZS0+bmFtZV9zaXplKSB7Ci0JCW1vZF90eXBlIHw9IEpGRlNfTU9ESUZZX05BTUU7Ci0JfQotCWlmIChub2RlLT5kYXRhX3NpemUgfHwgbm9kZS0+cmVtb3ZlZF9zaXplKSB7Ci0JCW1vZF90eXBlIHw9IEpGRlNfTU9ESUZZX0RBVEE7Ci0JfQotCXJldHVybiBtb2RfdHlwZTsKLX0KLQotCi0vKiBSZW1vdmUgcmVkdW5kYW50IG5vZGVzIGZyb20gYSBmaWxlLiAgTWFyayB0aGUgb24tZmxhc2ggbWVtb3J5Ci0gICBhcyBkaXJ0eS4gICovCi1zdGF0aWMgaW50Ci1qZmZzX3JlbW92ZV9yZWR1bmRhbnRfbm9kZXMoc3RydWN0IGpmZnNfZmlsZSAqZikKLXsKLQlzdHJ1Y3QgamZmc19ub2RlICpuZXdlc3Rfbm9kZTsKLQlzdHJ1Y3QgamZmc19ub2RlICpjdXI7Ci0Jc3RydWN0IGpmZnNfbm9kZSAqcHJldjsKLQlfX3U4IG5ld2VzdF90eXBlOwotCV9fdTggbW9kX3R5cGU7Ci0JX191OCBub2RlX3dpdGhfbmFtZV9sYXRlciA9IDA7Ci0KLQlpZiAoIShuZXdlc3Rfbm9kZSA9IGYtPnZlcnNpb25fdGFpbCkpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogV2hhdCBkb2VzIHRoZSBgbmV3ZXN0X25vZGUnIG1vZGlmeT8gICovCi0JbmV3ZXN0X3R5cGUgPSBqZmZzX2NsYXNzaWZ5X25vZGUobmV3ZXN0X25vZGUpOwotCW5vZGVfd2l0aF9uYW1lX2xhdGVyID0gbmV3ZXN0X3R5cGUgJiBKRkZTX01PRElGWV9OQU1FOwotCi0JRDMocHJpbnRrKCJqZmZzX3JlbW92ZV9yZWR1bmRhbnRfbm9kZXMoKTogaW5vOiAldSwgbmFtZTogXCIlc1wiLCAiCi0JCSAgIm5ld2VzdF90eXBlOiAldVxuIiwgZi0+aW5vLCAoZi0+bmFtZSA/IGYtPm5hbWUgOiAiIiksCi0JCSAgbmV3ZXN0X3R5cGUpKTsKLQotCS8qIFRyYXZlcnNlIHRoZSBmaWxlJ3Mgbm9kZXMgYW5kIGRldGVybWluZSB3aGljaCBvZiB0aGVtIHRoYXQgYXJlCi0JICAgc3VwZXJmbHVvdXMuICBZZWFoLCB0aGlzIG1pZ2h0IGxvb2sgdmVyeSBjb21wbGV4IGF0IGZpcnN0Ci0JICAgZ2xhbmNlIGJ1dCBpdCBpcyBhY3R1YWxseSB2ZXJ5IHNpbXBsZS4gICovCi0JZm9yIChjdXIgPSBuZXdlc3Rfbm9kZS0+dmVyc2lvbl9wcmV2OyBjdXI7IGN1ciA9IHByZXYpIHsKLQkJcHJldiA9IGN1ci0+dmVyc2lvbl9wcmV2OwotCQltb2RfdHlwZSA9IGpmZnNfY2xhc3NpZnlfbm9kZShjdXIpOwotCQlpZiAoKG1vZF90eXBlIDw9IEpGRlNfTU9ESUZZX0lOT0RFKQotCQkgICAgfHwgKChuZXdlc3RfdHlwZSAmIEpGRlNfTU9ESUZZX05BTUUpCi0JCQkmJiAobW9kX3R5cGUKLQkJCSAgICA8PSAoSkZGU19NT0RJRllfSU5PREUgKyBKRkZTX01PRElGWV9OQU1FKSkpCi0JCSAgICB8fCAoY3VyLT5kYXRhX3NpemUgPT0gMCAmJiBjdXItPnJlbW92ZWRfc2l6ZQotCQkJJiYgIWN1ci0+dmVyc2lvbl9wcmV2ICYmIG5vZGVfd2l0aF9uYW1lX2xhdGVyKSkgewotCQkJLyogWWVzLCB0aGlzIG5vZGUgaXMgcmVkdW5kYW50LiBSZW1vdmUgaXQuICAqLwotCQkJRDIocHJpbnRrKCJqZmZzX3JlbW92ZV9yZWR1bmRhbnRfbm9kZXMoKTogIgotCQkJCSAgIlJlbW92aW5nIG5vZGU6IGlubzogJXUsIHZlcnNpb246ICV1LCAiCi0JCQkJICAibW9kX3R5cGU6ICV1XG4iLCBjdXItPmlubywgY3VyLT52ZXJzaW9uLAotCQkJCSAgbW9kX3R5cGUpKTsKLQkJCWpmZnNfdW5saW5rX25vZGVfZnJvbV92ZXJzaW9uX2xpc3QoZiwgY3VyKTsKLQkJCWpmZnNfZm1mcmVlKGYtPmMtPmZtYywgY3VyLT5mbSwgY3VyKTsKLQkJCWpmZnNfZnJlZV9ub2RlKGN1cik7Ci0JCQlESk0obm9famZmc19ub2RlLS0pOwotCQl9Ci0JCWVsc2UgewotCQkJbm9kZV93aXRoX25hbWVfbGF0ZXIgfD0gKG1vZF90eXBlICYgSkZGU19NT0RJRllfTkFNRSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBJbnNlcnQgYSBmaWxlIGludG8gdGhlIGhhc2ggdGFibGUuICAqLwotc3RhdGljIGludAotamZmc19pbnNlcnRfZmlsZV9pbnRvX2hhc2goc3RydWN0IGpmZnNfZmlsZSAqZikKLXsKLQlpbnQgaSA9IGYtPmlubyAlIGYtPmMtPmhhc2hfbGVuOwotCi0JRDMocHJpbnRrKCJqZmZzX2luc2VydF9maWxlX2ludG9faGFzaCgpOiBmLT5pbm86ICV1XG4iLCBmLT5pbm8pKTsKLQotCWxpc3RfYWRkKCZmLT5oYXNoLCAmZi0+Yy0+aGFzaFtpXSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogSW5zZXJ0IGEgZmlsZSBpbnRvIHRoZSBmaWxlIHN5c3RlbSB0cmVlLiAgKi8KLWludAotamZmc19pbnNlcnRfZmlsZV9pbnRvX3RyZWUoc3RydWN0IGpmZnNfZmlsZSAqZikKLXsKLQlzdHJ1Y3QgamZmc19maWxlICpwYXJlbnQ7Ci0KLQlEMyhwcmludGsoImpmZnNfaW5zZXJ0X2ZpbGVfaW50b190cmVlKCk6IG5hbWU6IFwiJXNcIlxuIiwKLQkJICAoZi0+bmFtZSA/IGYtPm5hbWUgOiAiIikpKTsKLQotCWlmICghKHBhcmVudCA9IGpmZnNfZmluZF9maWxlKGYtPmMsIGYtPnBpbm8pKSkgewotCQlpZiAoZi0+cGlubyA9PSAwKSB7Ci0JCQlmLT5jLT5yb290ID0gZjsKLQkJCWYtPnBhcmVudCA9IE5VTEw7Ci0JCQlmLT5zaWJsaW5nX3ByZXYgPSBOVUxMOwotCQkJZi0+c2libGluZ19uZXh0ID0gTlVMTDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWVsc2UgewotCQkJRDEocHJpbnRrKCJqZmZzX2luc2VydF9maWxlX2ludG9fdHJlZSgpOiBGb3VuZCAiCi0JCQkJICAiaW5vZGUgd2l0aCBubyBwYXJlbnQgYW5kIHBpbm8gPT0gJXVcbiIsCi0JCQkJICBmLT5waW5vKSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0JZi0+cGFyZW50ID0gcGFyZW50OwotCWYtPnNpYmxpbmdfbmV4dCA9IHBhcmVudC0+Y2hpbGRyZW47Ci0JaWYgKGYtPnNpYmxpbmdfbmV4dCkgewotCQlmLT5zaWJsaW5nX25leHQtPnNpYmxpbmdfcHJldiA9IGY7Ci0JfQotCWYtPnNpYmxpbmdfcHJldiA9IE5VTEw7Ci0JcGFyZW50LT5jaGlsZHJlbiA9IGY7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogUmVtb3ZlIGEgZmlsZSBmcm9tIHRoZSBoYXNoIHRhYmxlLiAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfdW5saW5rX2ZpbGVfZnJvbV9oYXNoKHN0cnVjdCBqZmZzX2ZpbGUgKmYpCi17Ci0JRDMocHJpbnRrKCJqZmZzX3VubGlua19maWxlX2Zyb21faGFzaCgpOiBmOiAweCVwLCAiCi0JCSAgImlubyAldVxuIiwgZiwgZi0+aW5vKSk7Ci0KLQlsaXN0X2RlbCgmZi0+aGFzaCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogSnVzdCByZW1vdmUgdGhlIGZpbGUgZnJvbSB0aGUgcGFyZW50J3MgY2hpbGRyZW4uICBEb24ndCBmcmVlCi0gICBhbnkgbWVtb3J5LiAgKi8KLWludAotamZmc191bmxpbmtfZmlsZV9mcm9tX3RyZWUoc3RydWN0IGpmZnNfZmlsZSAqZikKLXsKLQlEMyhwcmludGsoImpmZnNfdW5saW5rX2ZpbGVfZnJvbV90cmVlKCk6IGlubzogJWQsIHBpbm86ICVkLCBuYW1lOiAiCi0JCSAgIlwiJXNcIlxuIiwgZi0+aW5vLCBmLT5waW5vLCAoZi0+bmFtZSA/IGYtPm5hbWUgOiAiIikpKTsKLQotCWlmIChmLT5zaWJsaW5nX3ByZXYpIHsKLQkJZi0+c2libGluZ19wcmV2LT5zaWJsaW5nX25leHQgPSBmLT5zaWJsaW5nX25leHQ7Ci0JfQotCWVsc2UgaWYgKGYtPnBhcmVudCkgewotCSAgICAgICAgRDMocHJpbnRrKCJmLT5wYXJlbnQ9JXBcbiIsIGYtPnBhcmVudCkpOwotCQlmLT5wYXJlbnQtPmNoaWxkcmVuID0gZi0+c2libGluZ19uZXh0OwotCX0KLQlpZiAoZi0+c2libGluZ19uZXh0KSB7Ci0JCWYtPnNpYmxpbmdfbmV4dC0+c2libGluZ19wcmV2ID0gZi0+c2libGluZ19wcmV2OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBGaW5kIGEgZmlsZSB3aXRoIGl0cyBpbm9kZSBudW1iZXIuICAqLwotc3RydWN0IGpmZnNfZmlsZSAqCi1qZmZzX2ZpbmRfZmlsZShzdHJ1Y3QgamZmc19jb250cm9sICpjLCBfX3UzMiBpbm8pCi17Ci0Jc3RydWN0IGpmZnNfZmlsZSAqZjsKLQlpbnQgaSA9IGlubyAlIGMtPmhhc2hfbGVuOwotCi0JRDMocHJpbnRrKCJqZmZzX2ZpbmRfZmlsZSgpOiBpbm86ICV1XG4iLCBpbm8pKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmMtPmhhc2hbaV0sIGhhc2gpIHsKLQkJaWYgKGlubyAhPSBmLT5pbm8pCi0JCQljb250aW51ZTsKLQkJRDMocHJpbnRrKCJqZmZzX2ZpbmRfZmlsZSgpOiBGb3VuZCBmaWxlIHdpdGggaW5vICIKLQkJCSAgICAgICAiJXUuIChuYW1lOiBcIiVzXCIpXG4iLAotCQkJICAgICAgIGlubywgKGYtPm5hbWUgPyBmLT5uYW1lIDogIiIpKTsKLQkJKTsKLQkJcmV0dXJuIGY7Ci0JfQotCUQzKHByaW50aygiamZmc19maW5kX2ZpbGUoKTogRGlkbid0IGZpbmQgZmlsZSAiCi0JCQkgIndpdGggaW5vICV1LlxuIiwgaW5vKTsKLQkpOwotCXJldHVybiBOVUxMOwotfQotCi0KLS8qIEZpbmQgYSBmaWxlIGluIGEgZGlyZWN0b3J5LiAgV2UgYXJlIGNvbXBhcmluZyB0aGUgbmFtZXMuICAqLwotc3RydWN0IGpmZnNfZmlsZSAqCi1qZmZzX2ZpbmRfY2hpbGQoc3RydWN0IGpmZnNfZmlsZSAqZGlyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQotewotCXN0cnVjdCBqZmZzX2ZpbGUgKmY7Ci0KLQlEMyhwcmludGsoImpmZnNfZmluZF9jaGlsZCgpXG4iKSk7Ci0KLQlmb3IgKGYgPSBkaXItPmNoaWxkcmVuOyBmOyBmID0gZi0+c2libGluZ19uZXh0KSB7Ci0JCWlmICghZi0+ZGVsZXRlZCAmJiBmLT5uYW1lCi0JCSAgICAmJiAhc3RybmNtcChmLT5uYW1lLCBuYW1lLCBsZW4pCi0JCSAgICAmJiBmLT5uYW1lW2xlbl0gPT0gJ1wwJykgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlEMyhpZiAoZikgewotCQlwcmludGsoImpmZnNfZmluZF9jaGlsZCgpOiBGb3VuZCBcIiVzXCIuXG4iLCBmLT5uYW1lKTsKLQl9Ci0JZWxzZSB7Ci0JCWNoYXIgKmNvcHkgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwotCQlpZiAoY29weSkgewotCQkJbWVtY3B5KGNvcHksIG5hbWUsIGxlbik7Ci0JCQljb3B5W2xlbl0gPSAnXDAnOwotCQl9Ci0JCXByaW50aygiamZmc19maW5kX2NoaWxkKCk6IERpZG4ndCBmaW5kIHRoZSBmaWxlIFwiJXNcIi5cbiIsCi0JCSAgICAgICAoY29weSA/IGNvcHkgOiAiIikpOwotCQlrZnJlZShjb3B5KTsKLQl9KTsKLQotCXJldHVybiBmOwotfQotCi0KLS8qIFdyaXRlIGEgcmF3IGlub2RlIHRoYXQgdGFrZXMgdXAgYSBjZXJ0YWluIGFtb3VudCBvZiBzcGFjZSBpbiB0aGUgZmxhc2gKLSAgIG1lbW9yeS4gIEF0IHRoZSBlbmQgb2YgdGhlIGZsYXNoIGRldmljZSwgdGhlcmUgaXMgb2Z0ZW4gc3BhY2UgdGhhdCBpcwotICAgaW1wb3NzaWJsZSB0byB1c2UuICBBdCB0aGVzZSB0aW1lcyB3ZSB3YW50IHRvIG1hcmsgdGhpcyBzcGFjZSBhcyBub3QKLSAgIHVzZWQuICBJbiB0aGUgY2FzZXMgd2hlbiB0aGUgYW1vdW50IG9mIHNwYWNlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbgotICAgYSBzdHJ1Y3QgamZmc19yYXdfaW5vZGUsIHdlIHdyaXRlIGEgImR1bW15IG5vZGUiIHRoYXQgdGFrZXMgdXAgdGhpcwotICAgc3BhY2UuICBUaGUgc3BhY2UgYWZ0ZXIgdGhlIHJhdyBpbm9kZSwgaWYgaXQgZXhpc3RzLCBpcyBsZWZ0IGFzIGl0IGlzLgotICAgU2luY2UgdGhpcyBzcGFjZSBhZnRlciB0aGUgcmF3IGlub2RlIGNvbnRhaW5zIEpGRlNfRU1QVFlfQklUTUFTSyBieXRlcywKLSAgIHdlIGNhbiBjb21wdXRlIHRoZSBjaGVja3N1bSBvZiBpdDsgd2UgZG9uJ3QgaGF2ZSB0byBtYW5pcHVsYXRlIGl0IGFueQotICAgZnVydGhlci4KLQotICAgSWYgdGhlIHNwYWNlIGxlZnQgb24gdGhlIGRldmljZSBpcyBsZXNzIHRoYW4gdGhlIHNpemUgb2YgYSBzdHJ1Y3QKLSAgIGpmZnNfcmF3X2lub2RlLCB0aGlzIHNwYWNlIGlzIGZpbGxlZCB3aXRoIEpGRlNfRElSVFlfQklUTUFTSyBieXRlcy4KLSAgIE5vIHJhdyBpbm9kZSBpcyB3cml0dGVuIHRoaXMgdGltZS4gICovCi1zdGF0aWMgaW50Ci1qZmZzX3dyaXRlX2R1bW15X25vZGUoc3RydWN0IGpmZnNfY29udHJvbCAqYywgc3RydWN0IGpmZnNfZm0gKmRpcnR5X2ZtKQotewotCXN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jID0gYy0+Zm1jOwotCWludCBlcnI7Ci0KLQlEMShwcmludGsoImpmZnNfd3JpdGVfZHVtbXlfbm9kZSgpOiBkaXJ0eV9mbS0+b2Zmc2V0ID0gMHglMDh4LCAiCi0JCSAgImRpcnR5X2ZtLT5zaXplID0gJXVcbiIsCi0JCSAgZGlydHlfZm0tPm9mZnNldCwgZGlydHlfZm0tPnNpemUpKTsKLQotCWlmIChkaXJ0eV9mbS0+c2l6ZSA+PSBzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKSkgewotCQlzdHJ1Y3QgamZmc19yYXdfaW5vZGUgcmF3X2lub2RlOwotCQltZW1zZXQoJnJhd19pbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSkpOwotCQlyYXdfaW5vZGUubWFnaWMgPSBKRkZTX01BR0lDX0JJVE1BU0s7Ci0JCXJhd19pbm9kZS5kc2l6ZSA9IGRpcnR5X2ZtLT5zaXplCi0JCQkJICAtIHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpOwotCQlyYXdfaW5vZGUuZGNoa3N1bSA9IHJhd19pbm9kZS5kc2l6ZSAqIDB4ZmY7Ci0JCXJhd19pbm9kZS5jaGtzdW0KLQkJPSBqZmZzX2NoZWNrc3VtKCZyYXdfaW5vZGUsIHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpKTsKLQotCQlpZiAoKGVyciA9IGZsYXNoX3NhZmVfd3JpdGUoZm1jLT5tdGQsCi0JCQkJCSAgICBkaXJ0eV9mbS0+b2Zmc2V0LAotCQkJCQkgICAgKHVfY2hhciAqKSZyYXdfaW5vZGUsCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKSkpCi0JCSAgICA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiSkZGUzogamZmc193cml0ZV9kdW1teV9ub2RlOiAiCi0JCQkgICAgICAgImZsYXNoX3NhZmVfd3JpdGUgZmFpbGVkIVxuIik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCWVsc2UgewotCQlmbGFzaF9zYWZlX2FjcXVpcmUoZm1jLT5tdGQpOwotCQlmbGFzaF9tZW1zZXQoZm1jLT5tdGQsIGRpcnR5X2ZtLT5vZmZzZXQsIDAsIGRpcnR5X2ZtLT5zaXplKTsKLQkJZmxhc2hfc2FmZV9yZWxlYXNlKGZtYy0+bXRkKTsKLQl9Ci0KLQlEMyhwcmludGsoImpmZnNfd3JpdGVfZHVtbXlfbm9kZSgpOiBMZWF2aW5nLi4uXG4iKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogV3JpdGUgYSByYXcgaW5vZGUsIHBvc3NpYmx5IGl0cyBuYW1lIGFuZCBwb3NzaWJseSBzb21lIGRhdGEuICAqLwotaW50Ci1qZmZzX3dyaXRlX25vZGUoc3RydWN0IGpmZnNfY29udHJvbCAqYywgc3RydWN0IGpmZnNfbm9kZSAqbm9kZSwKLQkJc3RydWN0IGpmZnNfcmF3X2lub2RlICpyYXdfaW5vZGUsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCi0JCWludCByZWNvdmVyYWJsZSwKLQkJc3RydWN0IGpmZnNfZmlsZSAqZikKLXsKLQlzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYyA9IGMtPmZtYzsKLQlzdHJ1Y3QgamZmc19mbSAqZm07Ci0Jc3RydWN0IGt2ZWMgbm9kZV9pb3ZlY1s0XTsKLQl1bnNpZ25lZCBsb25nIGlvdmVjX2NudDsKLQotCV9fdTMyIHBvczsKLQlpbnQgZXJyOwotCV9fdTMyIHNsYWNrID0gMDsKLQotCV9fdTMyIHRvdGFsX25hbWVfc2l6ZSA9IHJhd19pbm9kZS0+bnNpemUKLQkJCQkrIEpGRlNfR0VUX1BBRF9CWVRFUyhyYXdfaW5vZGUtPm5zaXplKTsKLQlfX3UzMiB0b3RhbF9kYXRhX3NpemUgPSByYXdfaW5vZGUtPmRzaXplCi0JCQkJKyBKRkZTX0dFVF9QQURfQllURVMocmF3X2lub2RlLT5kc2l6ZSk7Ci0JX191MzIgdG90YWxfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpCi0JCQkgICArIHRvdGFsX25hbWVfc2l6ZSArIHRvdGFsX2RhdGFfc2l6ZTsKLQkKLQkvKiBJZiB0aGlzIG5vZGUgaXNuJ3Qgc29tZXRoaW5nIHRoYXQgd2lsbCBldmVudHVhbGx5IGxldAotCSAgIEdDIGZyZWUgZXZlbiBtb3JlIHNwYWNlLCB0aGVuIGRvbid0IGFsbG93IGl0IHVubGVzcwotCSAgIHRoZXJlJ3MgYXQgbGVhc3QgbWF4X2NodW5rX3NpemUgc3BhY2Ugc3RpbGwgYXZhaWxhYmxlCi0JKi8KLQlpZiAoIXJlY292ZXJhYmxlKQotCQlzbGFjayA9IGZtYy0+bWF4X2NodW5rX3NpemU7Ci0JCQotCi0JLyogRmlyZSB0aGUgcmV0cm9yb2NrZXRzIGFuZCBzaG9vdCB0aGUgZnJ1aXRvbiB0b3JwZWRvZXMsIHNpciEgICovCi0KLQlBU1NFUlQoaWYgKCFub2RlKSB7Ci0JCXByaW50aygiamZmc193cml0ZV9ub2RlKCk6IG5vZGUgPT0gTlVMTFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0pOwotCUFTU0VSVChpZiAocmF3X2lub2RlICYmIHJhd19pbm9kZS0+bnNpemUgJiYgIW5hbWUpIHsKLQkJcHJpbnRrKCIqKiogamZmc193cml0ZV9ub2RlKCk6IG5zaXplID0gJXUgYnV0IG5hbWUgPT0gTlVMTFxuIiwKLQkJICAgICAgIHJhd19pbm9kZS0+bnNpemUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9KTsKLQotCUQxKHByaW50aygiamZmc193cml0ZV9ub2RlKCk6IGZpbGVuYW1lID0gXCIlc1wiLCBpbm8gPSAldSwgIgotCQkgICJ0b3RhbF9zaXplID0gJXVcbiIsCi0JCSAgKG5hbWUgPyBuYW1lIDogIiIpLCByYXdfaW5vZGUtPmlubywKLQkJICB0b3RhbF9zaXplKSk7Ci0KLQlqZmZzX2ZtX3dyaXRlX2xvY2soZm1jKTsKLQotcmV0cnk6Ci0JZm0gPSBOVUxMOwotCWVyciA9IDA7Ci0Jd2hpbGUgKCFmbSkgewotCi0JCS8qIERlYWRsb2NrcyBzdWNrLiAqLwotCQl3aGlsZShmbWMtPmZyZWVfc2l6ZSA8IGZtYy0+bWluX2ZyZWVfc2l6ZSArIHRvdGFsX3NpemUgKyBzbGFjaykgewotCQkJamZmc19mbV93cml0ZV91bmxvY2soZm1jKTsKLQkJCWlmICghSkZGU19FTk9VR0hfU1BBQ0UoYywgdG90YWxfc2l6ZSArIHNsYWNrKSkKLQkJCQlyZXR1cm4gLUVOT1NQQzsKLQkJCWpmZnNfZm1fd3JpdGVfbG9jayhmbWMpOwotCQl9Ci0KLQkJLyogRmlyc3QgdHJ5IHRvIGFsbG9jYXRlIHNvbWUgZmxhc2ggbWVtb3J5LiAgKi8KLQkJZXJyID0gamZmc19mbWFsbG9jKGZtYywgdG90YWxfc2l6ZSwgbm9kZSwgJmZtKTsKLQkJCi0JCWlmIChlcnIgPT0gLUVOT1NQQykgewotCQkJLyogSnVzdCBvdXQgb2Ygc3BhY2UuIEdDIGFuZCB0cnkgYWdhaW4gKi8KLQkJCWlmIChmbWMtPmRpcnR5X3NpemUgPCBmbWMtPnNlY3Rvcl9zaXplKSB7Ci0JCQkJRChwcmludGsoImpmZnNfd3JpdGVfbm9kZSgpOiBqZmZzX2ZtYWxsb2MoMHglcCwgJXUpICIKLQkJCQkJICJmYWlsZWQsIG5vIGRpcnR5IHNwYWNlIHRvIEdDXG4iLCBmbWMsCi0JCQkJCSB0b3RhbF9zaXplKSk7Ci0JCQkJcmV0dXJuIGVycjsKLQkJCX0KLQkJCQotCQkJRDEocHJpbnRrKEtFUk5fSU5GTyAiamZmc193cml0ZV9ub2RlKCk6IENhbGxpbmcgamZmc19nYXJiYWdlX2NvbGxlY3Rfbm93KClcbiIpKTsKLQkJCWpmZnNfZm1fd3JpdGVfdW5sb2NrKGZtYyk7Ci0JCQlpZiAoKGVyciA9IGpmZnNfZ2FyYmFnZV9jb2xsZWN0X25vdyhjKSkpIHsKLQkJCQlEKHByaW50aygiamZmc193cml0ZV9ub2RlKCk6IGpmZnNfZ2FyYmFnZV9jb2xsZWN0X25vdygpIGZhaWxlZFxuIikpOwotCQkJCXJldHVybiBlcnI7Ci0JCQl9Ci0JCQlqZmZzX2ZtX3dyaXRlX2xvY2soZm1jKTsKLQkJCWNvbnRpbnVlOwotCQl9IAotCi0JCWlmIChlcnIgPCAwKSB7Ci0JCQlqZmZzX2ZtX3dyaXRlX3VubG9jayhmbWMpOwotCi0JCQlEKHByaW50aygiamZmc193cml0ZV9ub2RlKCk6IGpmZnNfZm1hbGxvYygweCVwLCAldSkgIgotCQkJCSAiZmFpbGVkIVxuIiwgZm1jLCB0b3RhbF9zaXplKSk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJaWYgKCFmbS0+bm9kZXMpIHsKLQkJCS8qIFRoZSBqZmZzX2ZtIHN0cnVjdCB0aGF0IHdlIGdvdCBpcyBub3QgZ29vZCBlbm91Z2guCi0JCQkgICBNYWtlIHRoYXQgc3BhY2UgZGlydHkgYW5kIHRyeSBhZ2FpbiAgKi8KLQkJCWlmICgoZXJyID0gamZmc193cml0ZV9kdW1teV9ub2RlKGMsIGZtKSkgPCAwKSB7Ci0JCQkJa2ZyZWUoZm0pOwotCQkJCURKTShub19qZmZzX2ZtLS0pOwotCQkJCWpmZnNfZm1fd3JpdGVfdW5sb2NrKGZtYyk7Ci0JCQkJRChwcmludGsoImpmZnNfd3JpdGVfbm9kZSgpOiAiCi0JCQkJCSAiamZmc193cml0ZV9kdW1teV9ub2RlKCk6IEZhaWxlZCFcbiIpKTsKLQkJCQlyZXR1cm4gZXJyOwotCQkJfQotCQkJZm0gPSBOVUxMOwotCQl9Ci0JfSAvKiB3aGlsZSghZm0pICovCi0Jbm9kZS0+Zm0gPSBmbTsKLQotCUFTU0VSVChpZiAoZm0tPm5vZGVzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJqZmZzX3dyaXRlX25vZGUoKTogZm0tPm5vZGVzID09IDBcbiIpOwotCX0pOwotCi0JcG9zID0gbm9kZS0+Zm0tPm9mZnNldDsKLQotCS8qIEluY3JlbWVudCB0aGUgdmVyc2lvbiBudW1iZXIgaGVyZS4gV2UgY2FuJ3QgbGV0IHRoZSBjYWxsZXIKLQkgICBzZXQgaXQgYmVmb3JlaGFuZCwgYmVjYXVzZSB3ZSBtaWdodCBoYXZlIGhhZCB0byBkbyBHQyBvbiBhIG5vZGUKLQkgICBvZiB0aGlzIGZpbGUgLSBhbmQgd2UnZCBlbmQgdXAgcmV1c2luZyB2ZXJzaW9uIG51bWJlcnMuCi0JKi8KLQlpZiAoZikgewotCQlyYXdfaW5vZGUtPnZlcnNpb24gPSBmLT5oaWdoZXN0X3ZlcnNpb24gKyAxOwotCQlEMShwcmludGsgKEtFUk5fTk9USUNFICJqZmZzX3dyaXRlX25vZGUoKTogc2V0dGluZyB2ZXJzaW9uIG9mICVzIHRvICVkXG4iLCBmLT5uYW1lLCByYXdfaW5vZGUtPnZlcnNpb24pKTsKLQotCQkvKiBpZiB0aGUgZmlsZSB3YXMgZGVsZXRlZCwgc2V0IHRoZSBkZWxldGVkIGJpdCBpbiB0aGUgcmF3IGlub2RlICovCi0JCWlmIChmLT5kZWxldGVkKQotCQkJcmF3X2lub2RlLT5kZWxldGVkID0gMTsKLQl9Ci0KLQkvKiBDb21wdXRlIHRoZSBjaGVja3N1bSBmb3IgdGhlIGRhdGEgYW5kIG5hbWUgY2h1bmtzLiAgKi8KLQlyYXdfaW5vZGUtPmRjaGtzdW0gPSBqZmZzX2NoZWNrc3VtKGRhdGEsIHJhd19pbm9kZS0+ZHNpemUpOwotCXJhd19pbm9kZS0+bmNoa3N1bSA9IGpmZnNfY2hlY2tzdW0obmFtZSwgcmF3X2lub2RlLT5uc2l6ZSk7Ci0KLQkvKiBUaGUgY2hlY2tzdW0gaXMgY2FsY3VsYXRlZCB3aXRob3V0IHRoZSBjaGtzdW0gYW5kIGFjY3VyYXRlCi0JICAgZmllbGRzIHNvIHNldCB0aGVtIHRvIHplcm8gZmlyc3QuICAqLwotCXJhd19pbm9kZS0+YWNjdXJhdGUgPSAwOwotCXJhd19pbm9kZS0+Y2hrc3VtID0gMDsKLQlyYXdfaW5vZGUtPmNoa3N1bSA9IGpmZnNfY2hlY2tzdW0ocmF3X2lub2RlLAotCQkJCQkgIHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpKTsKLQlyYXdfaW5vZGUtPmFjY3VyYXRlID0gMHhmZjsKLQotCUQzKHByaW50aygiamZmc193cml0ZV9ub2RlKCk6IEFib3V0IHRvIHdyaXRlIHRoaXMgcmF3IGlub2RlIHRvIHRoZSAiCi0JCSAgImZsYXNoIGF0IHBvcyAweCVseDpcbiIsIChsb25nKXBvcykpOwotCUQzKGpmZnNfcHJpbnRfcmF3X2lub2RlKHJhd19pbm9kZSkpOwotCi0JLyogVGhlIGFjdHVhbCByYXcgSkZGUyBub2RlICovCi0Jbm9kZV9pb3ZlY1swXS5pb3ZfYmFzZSA9ICh2b2lkICopIHJhd19pbm9kZTsKLQlub2RlX2lvdmVjWzBdLmlvdl9sZW4gPSAoc2l6ZV90KSBzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKTsKLQlpb3ZlY19jbnQgPSAxOwotCi0JLyogR2V0IG5hbWUgYW5kIHNpemUgaWYgdGhlcmUgaXMgb25lICovCi0JaWYgKHJhd19pbm9kZS0+bnNpemUpIHsKLQkJbm9kZV9pb3ZlY1tpb3ZlY19jbnRdLmlvdl9iYXNlID0gKHZvaWQgKikgbmFtZTsKLQkJbm9kZV9pb3ZlY1tpb3ZlY19jbnRdLmlvdl9sZW4gPSAoc2l6ZV90KSByYXdfaW5vZGUtPm5zaXplOwotCQlpb3ZlY19jbnQrKzsKLQotCQlpZiAoSkZGU19HRVRfUEFEX0JZVEVTKHJhd19pbm9kZS0+bnNpemUpKSB7Ci0JCQlzdGF0aWMgdW5zaWduZWQgY2hhciBhbGxmZlszXT17MjU1LDI1NSwyNTV9OwotCQkJLyogQWRkIHNvbWUgZXh0cmEgcGFkZGluZyBpZiBuZWNlc3NhcnkgKi8KLQkJCW5vZGVfaW92ZWNbaW92ZWNfY250XS5pb3ZfYmFzZSA9IGFsbGZmOwotCQkJbm9kZV9pb3ZlY1tpb3ZlY19jbnRdLmlvdl9sZW4gPQotCQkJCUpGRlNfR0VUX1BBRF9CWVRFUyhyYXdfaW5vZGUtPm5zaXplKTsKLQkJCWlvdmVjX2NudCsrOwotCQl9Ci0JfQotCi0JLyogR2V0IGRhdGEgYW5kIHNpemUgaWYgdGhlcmUgaXMgYW55ICovCi0JaWYgKHJhd19pbm9kZS0+ZHNpemUpIHsKLQkJbm9kZV9pb3ZlY1tpb3ZlY19jbnRdLmlvdl9iYXNlID0gKHZvaWQgKikgZGF0YTsKLQkJbm9kZV9pb3ZlY1tpb3ZlY19jbnRdLmlvdl9sZW4gPSAoc2l6ZV90KSByYXdfaW5vZGUtPmRzaXplOwotCQlpb3ZlY19jbnQrKzsKLQkJLyogTm8gbmVlZCB0byBwYWQgdGhpcyBiZWNhdXNlIHdlJ3JlIG5vdCBhY3R1YWxseSBwdXR0aW5nCi0JCSAgIGFueXRoaW5nIGFmdGVyIGl0LgotCQkqLwotCX0KLQotCWlmICgoZXJyID0gZmxhc2hfc2FmZV93cml0ZXYoZm1jLT5tdGQsIG5vZGVfaW92ZWMsIGlvdmVjX2NudCwKLQkJCQkgICAgcG9zKSkgPCAwKSB7Ci0JCWpmZnNfZm1mcmVlX3BhcnRseShmbWMsIGZtLCAwKTsKLQkJamZmc19mbV93cml0ZV91bmxvY2soZm1jKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJKRkZTOiBqZmZzX3dyaXRlX25vZGU6IEZhaWxlZCB0byB3cml0ZSwgIgotCQkgICAgICAgInJlcXVlc3RlZCAlaSwgd3JvdGUgJWlcbiIsIHRvdGFsX3NpemUsIGVycik7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCWlmIChyYXdfaW5vZGUtPmRlbGV0ZWQpCi0JCWYtPmRlbGV0ZWQgPSAxOwotCi0JamZmc19mbV93cml0ZV91bmxvY2soZm1jKTsKLQlEMyhwcmludGsoImpmZnNfd3JpdGVfbm9kZSgpOiBMZWF2aW5nLi4uXG4iKSk7Ci0JcmV0dXJuIHJhd19pbm9kZS0+ZHNpemU7Ci19IC8qIGpmZnNfd3JpdGVfbm9kZSgpICAqLwotCi0KLS8qIFJlYWQgZGF0YSBmcm9tIHRoZSBub2RlIGFuZCB3cml0ZSBpdCB0byB0aGUgYnVmZmVyLiAgJ25vZGVfb2Zmc2V0JwotICAgaXMgaG93IG11Y2ggd2UgaGF2ZSByZWFkIGZyb20gdGhpcyBwYXJ0aWN1bGFyIG5vZGUgYmVmb3JlIGFuZCB3aGljaAotICAgc2hvdWxkbid0IGJlIHJlYWQgYWdhaW4uICAnbWF4X3NpemUnIGlzIGhvdyBtdWNoIHNwYWNlIHRoZXJlIGlzIGluCi0gICB0aGUgYnVmZmVyLiAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfZ2V0X25vZGVfZGF0YShzdHJ1Y3QgamZmc19maWxlICpmLCBzdHJ1Y3QgamZmc19ub2RlICpub2RlLCAKLQkJICAgdW5zaWduZWQgY2hhciAqYnVmLF9fdTMyIG5vZGVfb2Zmc2V0LCBfX3UzMiBtYXhfc2l6ZSkKLXsKLQlzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYyA9IGYtPmMtPmZtYzsKLQlfX3UzMiBwb3MgPSBub2RlLT5mbS0+b2Zmc2V0ICsgbm9kZS0+Zm1fb2Zmc2V0ICsgbm9kZV9vZmZzZXQ7Ci0JX191MzIgYXZhaWwgPSBub2RlLT5kYXRhX3NpemUgLSBub2RlX29mZnNldDsKLQlfX3UzMiByOwotCi0JRDIocHJpbnRrKCIgIGpmZnNfZ2V0X25vZGVfZGF0YSgpOiBmaWxlOiBcIiVzXCIsIGlubzogJXUsICIKLQkJICAidmVyc2lvbjogJXUsIG5vZGVfb2Zmc2V0OiAldVxuIiwKLQkJICBmLT5uYW1lLCBub2RlLT5pbm8sIG5vZGUtPnZlcnNpb24sIG5vZGVfb2Zmc2V0KSk7Ci0KLQlyID0gbWluKGF2YWlsLCBtYXhfc2l6ZSk7Ci0JRDMocHJpbnRrKEtFUk5fTk9USUNFICJqZmZzX2dldF9ub2RlX2RhdGFcbiIpKTsKLQlmbGFzaF9zYWZlX3JlYWQoZm1jLT5tdGQsIHBvcywgYnVmLCByKTsKLQotCUQzKHByaW50aygiICBqZmZzX2dldF9ub2RlX2RhdGEoKTogUmVhZCAldSBieXRlJXMuXG4iLAotCQkgIHIsIChyID09IDEgPyAiIiA6ICJzIikpKTsKLQotCXJldHVybiByOwotfQotCi0KLS8qIFJlYWQgZGF0YSBmcm9tIHRoZSBmaWxlJ3Mgbm9kZXMuICBXcml0ZSB0aGUgZGF0YSB0byB0aGUgYnVmZmVyCi0gICAnYnVmJy4gICdyZWFkX29mZnNldCcgdGVsbHMgaG93IG11Y2ggZGF0YSB3ZSBzaG91bGQgc2tpcC4gICovCi1pbnQKLWpmZnNfcmVhZF9kYXRhKHN0cnVjdCBqZmZzX2ZpbGUgKmYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgX191MzIgcmVhZF9vZmZzZXQsCi0JICAgICAgIF9fdTMyIHNpemUpCi17Ci0Jc3RydWN0IGpmZnNfbm9kZSAqbm9kZTsKLQlfX3UzMiByZWFkX2RhdGEgPSAwOyAvKiBUb3RhbCBhbW91bnQgb2YgcmVhZCBkYXRhLiAgKi8KLQlfX3UzMiBub2RlX29mZnNldCA9IDA7Ci0JX191MzIgcG9zID0gMDsgLyogTnVtYmVyIG9mIGJ5dGVzIHRyYXZlcnNlZC4gICovCi0KLQlEMihwcmludGsoImpmZnNfcmVhZF9kYXRhKCk6IGZpbGUgPSBcIiVzXCIsIHJlYWRfb2Zmc2V0ID0gJWQsICIKLQkJICAic2l6ZSA9ICV1XG4iLAotCQkgIChmLT5uYW1lID8gZi0+bmFtZSA6ICIiKSwgcmVhZF9vZmZzZXQsIHNpemUpKTsKLQotCWlmIChyZWFkX29mZnNldCA+PSBmLT5zaXplKSB7Ci0JCUQocHJpbnRrKCIgIGYtPnNpemU6ICVkXG4iLCBmLT5zaXplKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIEZpcnN0IGZpbmQgdGhlIG5vZGUgdG8gcmVhZCBkYXRhIGZyb20uICAqLwotCW5vZGUgPSBmLT5yYW5nZV9oZWFkOwotCXdoaWxlIChwb3MgPD0gcmVhZF9vZmZzZXQpIHsKLQkJbm9kZV9vZmZzZXQgPSByZWFkX29mZnNldCAtIHBvczsKLQkJaWYgKG5vZGVfb2Zmc2V0ID49IG5vZGUtPmRhdGFfc2l6ZSkgewotCQkJcG9zICs9IG5vZGUtPmRhdGFfc2l6ZTsKLQkJCW5vZGUgPSBub2RlLT5yYW5nZV9uZXh0OwotCQl9Ci0JCWVsc2UgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiAiQ2F0cyBhcmUgbGl2aW5nIHByb29mIHRoYXQgbm90IGV2ZXJ5dGhpbmcgaW4gbmF0dXJlCi0JICAgaGFzIHRvIGJlIHVzZWZ1bC4iCi0JICAgLSBHYXJyaXNvbiBLZWlsb3IgKCc5NykgICovCi0KLQkvKiBGaWxsIHRoZSBidWZmZXIuICAqLwotCXdoaWxlIChub2RlICYmIChyZWFkX2RhdGEgPCBzaXplKSkgewotCQlpbnQgcjsKLQkJaWYgKCFub2RlLT5mbSkgewotCQkJLyogVGhpcyBub2RlIGRvZXMgbm90IHJlZmVyIHRvIHJlYWwgZGF0YS4gICovCi0JCQlyID0gbWluKHNpemUgLSByZWFkX2RhdGEsCi0JCQkJICAgICBub2RlLT5kYXRhX3NpemUgLSBub2RlX29mZnNldCk7Ci0JCQltZW1zZXQoJmJ1ZltyZWFkX2RhdGFdLCAwLCByKTsKLQkJfQotCQllbHNlIGlmICgociA9IGpmZnNfZ2V0X25vZGVfZGF0YShmLCBub2RlLCAmYnVmW3JlYWRfZGF0YV0sCi0JCQkJCQkgbm9kZV9vZmZzZXQsCi0JCQkJCQkgc2l6ZSAtIHJlYWRfZGF0YSkpIDwgMCkgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJcmVhZF9kYXRhICs9IHI7Ci0JCW5vZGVfb2Zmc2V0ID0gMDsKLQkJbm9kZSA9IG5vZGUtPnJhbmdlX25leHQ7Ci0JfQotCUQzKHByaW50aygiICBqZmZzX3JlYWRfZGF0YSgpOiBSZWFkICV1IGJ5dGVzLlxuIiwgcmVhZF9kYXRhKSk7Ci0JcmV0dXJuIHJlYWRfZGF0YTsKLX0KLQotCi0vKiBVc2VkIGZvciB0cmF2ZXJzaW5nIGFsbCBub2RlcyBpbiB0aGUgaGFzaCB0YWJsZS4gICovCi1pbnQKLWpmZnNfZm9yZWFjaF9maWxlKHN0cnVjdCBqZmZzX2NvbnRyb2wgKmMsIGludCAoKmZ1bmMpKHN0cnVjdCBqZmZzX2ZpbGUgKikpCi17Ci0JaW50IHBvczsKLQlpbnQgcjsKLQlpbnQgcmVzdWx0ID0gMDsKLQotCWZvciAocG9zID0gMDsgcG9zIDwgYy0+aGFzaF9sZW47IHBvcysrKSB7Ci0JCXN0cnVjdCBqZmZzX2ZpbGUgKmYsICpuZXh0OwotCi0JCS8qIFdlIG11c3QgZG8gX3NhZmUsIGJlY2F1c2UgJ2Z1bmMnIG1pZ2h0IHJlbW92ZSB0aGUKLQkJICAgY3VycmVudCBmaWxlICdmJyBmcm9tIHRoZSBsaXN0LiAgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGYsIG5leHQsICZjLT5oYXNoW3Bvc10sIGhhc2gpIHsKLQkJCXIgPSBmdW5jKGYpOwotCQkJaWYgKHIgPCAwKQotCQkJCXJldHVybiByOwotCQkJcmVzdWx0ICs9IHI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0KLS8qIEZyZWUgYWxsIG5vZGVzIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUuICAqLwotc3RhdGljIGludAotamZmc19mcmVlX25vZGVfbGlzdChzdHJ1Y3QgamZmc19maWxlICpmKQotewotCXN0cnVjdCBqZmZzX25vZGUgKm5vZGU7Ci0Jc3RydWN0IGpmZnNfbm9kZSAqcDsKLQotCUQzKHByaW50aygiamZmc19mcmVlX25vZGVfbGlzdCgpOiBmICMldSwgXCIlc1wiXG4iLAotCQkgIGYtPmlubywgKGYtPm5hbWUgPyBmLT5uYW1lIDogIiIpKSk7Ci0Jbm9kZSA9IGYtPnZlcnNpb25faGVhZDsKLQl3aGlsZSAobm9kZSkgewotCQlwID0gbm9kZTsKLQkJbm9kZSA9IG5vZGUtPnZlcnNpb25fbmV4dDsKLQkJamZmc19mcmVlX25vZGUocCk7Ci0JCURKTShub19qZmZzX25vZGUtLSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qIEZyZWUgYSBmaWxlIGFuZCBpdHMgbmFtZS4gICovCi1zdGF0aWMgaW50Ci1qZmZzX2ZyZWVfZmlsZShzdHJ1Y3QgamZmc19maWxlICpmKQotewotCUQzKHByaW50aygiamZmc19mcmVlX2ZpbGU6IGYgIyV1LCBcIiVzXCJcbiIsCi0JCSAgZi0+aW5vLCAoZi0+bmFtZSA/IGYtPm5hbWUgOiAiIikpKTsKLQotCWlmIChmLT5uYW1lKSB7Ci0JCWtmcmVlKGYtPm5hbWUpOwotCQlESk0obm9fbmFtZS0tKTsKLQl9Ci0Ja2ZyZWUoZik7Ci0Jbm9famZmc19maWxlLS07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBsb25nCi1qZmZzX2dldF9maWxlX2NvdW50KHZvaWQpCi17Ci0JcmV0dXJuIG5vX2pmZnNfZmlsZTsKLX0KLQotLyogU2VlIGlmIGEgZmlsZSBpcyBkZWxldGVkLiBJZiBzbywgbWFyayB0aGF0IGZpbGUncyBub2RlcyBhcyBvYnNvbGV0ZS4gICovCi1pbnQKLWpmZnNfcG9zc2libHlfZGVsZXRlX2ZpbGUoc3RydWN0IGpmZnNfZmlsZSAqZikKLXsKLQlzdHJ1Y3QgamZmc19ub2RlICpuOwotCi0JRDMocHJpbnRrKCJqZmZzX3Bvc3NpYmx5X2RlbGV0ZV9maWxlKCk6IGlubzogJXVcbiIsCi0JCSAgZi0+aW5vKSk7Ci0KLQlBU1NFUlQoaWYgKCFmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiamZmc19wb3NzaWJseV9kZWxldGVfZmlsZSgpOiBmID09IE5VTExcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfSk7Ci0KLQlpZiAoZi0+ZGVsZXRlZCkgewotCQkvKiBGaXJzdCB0cnkgdG8gcmVtb3ZlIGFsbCBvbGRlciB2ZXJzaW9ucy4gIENvbW1lbmNlIHdpdGgKLQkJICAgdGhlIG9sZGVzdCBub2RlLiAgKi8KLQkJZm9yIChuID0gZi0+dmVyc2lvbl9oZWFkOyBuOyBuID0gbi0+dmVyc2lvbl9uZXh0KSB7Ci0JCQlpZiAoIW4tPmZtKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoamZmc19mbWZyZWUoZi0+Yy0+Zm1jLCBuLT5mbSwgbikgPCAwKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJLyogVW5saW5rIHRoZSBmaWxlIGZyb20gdGhlIGZpbGVzeXN0ZW0uICAqLwotCQlpZiAoIWYtPmMtPmJ1aWxkaW5nX2ZzKSB7Ci0JCQlqZmZzX3VubGlua19maWxlX2Zyb21fdHJlZShmKTsKLQkJfQotCQlqZmZzX3VubGlua19maWxlX2Zyb21faGFzaChmKTsKLQkJamZmc19mcmVlX25vZGVfbGlzdChmKTsKLQkJamZmc19mcmVlX2ZpbGUoZik7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBqZmZzX2ZvcmVhY2hfZmlsZSgpIHRvIGNvdW50IHRoZSBudW1iZXIKLSAgIG9mIGZpbGVzIGluIHRoZSBmaWxlIHN5c3RlbS4gICovCi1pbnQKLWpmZnNfZmlsZV9jb3VudChzdHJ1Y3QgamZmc19maWxlICpmKQotewotCXJldHVybiAxOwotfQotCi0KLS8qIEJ1aWxkIHVwIGEgZmlsZSdzIHJhbmdlIGxpc3QgZnJvbSBzY3JhdGNoIGJ5IGdvaW5nIHRocm91Z2ggdGhlCi0gICB2ZXJzaW9uIGxpc3QuICAqLwotc3RhdGljIGludAotamZmc19idWlsZF9maWxlKHN0cnVjdCBqZmZzX2ZpbGUgKmYpCi17Ci0Jc3RydWN0IGpmZnNfbm9kZSAqbjsKLQotCUQzKHByaW50aygiamZmc19idWlsZF9maWxlKCk6IGlubzogJXUsIG5hbWU6IFwiJXNcIlxuIiwKLQkJICBmLT5pbm8sIChmLT5uYW1lID8gZi0+bmFtZSA6ICIiKSkpOwotCi0JZm9yIChuID0gZi0+dmVyc2lvbl9oZWFkOyBuOyBuID0gbi0+dmVyc2lvbl9uZXh0KSB7Ci0JCWpmZnNfdXBkYXRlX2ZpbGUoZiwgbik7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qIFJlbW92ZSBhbiBhbW91bnQgb2YgZGF0YSBmcm9tIGEgZmlsZS4gSWYgdGhpcyBhbW91bnQgb2YgZGF0YSBpcwotICAgemVybywgdGhhdCBjb3VsZCBtZWFuIHRoYXQgYSBub2RlIHNob3VsZCBiZSBzcGxpdCBpbiB0d28gcGFydHMuCi0gICBXZSByZW1vdmUgb3IgY2hhbmdlIHRoZSBhcHByb3ByaWF0ZSBub2RlcyBpbiB0aGUgbGlzdHMuCi0KLSAgIFN0YXJ0aW5nIG9mZnNldCBvZiBhcmVhIHRvIGJlIHJlbW92ZWQgaXMgbm9kZS0+ZGF0YV9vZmZzZXQsCi0gICBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgYXJlYSBpcyBpbiBub2RlLT5yZW1vdmVkX3NpemUuICAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfZGVsZXRlX2RhdGEoc3RydWN0IGpmZnNfZmlsZSAqZiwgc3RydWN0IGpmZnNfbm9kZSAqbm9kZSkKLXsKLQlzdHJ1Y3QgamZmc19ub2RlICpuOwotCV9fdTMyIG9mZnNldCA9IG5vZGUtPmRhdGFfb2Zmc2V0OwotCV9fdTMyIHJlbW92ZV9zaXplID0gbm9kZS0+cmVtb3ZlZF9zaXplOwotCi0JRDMocHJpbnRrKCJqZmZzX2RlbGV0ZV9kYXRhKCk6IG9mZnNldCA9ICV1LCByZW1vdmVfc2l6ZSA9ICV1XG4iLAotCQkgIG9mZnNldCwgcmVtb3ZlX3NpemUpKTsKLQotCWlmIChyZW1vdmVfc2l6ZSA9PSAwCi0JICAgICYmIGYtPnJhbmdlX3RhaWwKLQkgICAgJiYgZi0+cmFuZ2VfdGFpbC0+ZGF0YV9vZmZzZXQgKyBmLT5yYW5nZV90YWlsLT5kYXRhX3NpemUKLQkgICAgICAgPT0gb2Zmc2V0KSB7Ci0JCS8qIEEgc2ltcGxlIGFwcGVuZDsgbm90aGluZyB0byByZW1vdmUgb3Igbm8gbm9kZSB0byBzcGxpdC4gICovCi0JCXJldHVybiAwOwotCX0KLQotCS8qIEZpbmQgdGhlIG5vZGUgd2hlcmUgd2Ugc2hvdWxkIGJlZ2luIHRoZSByZW1vdmFsLiAgKi8KLQlmb3IgKG4gPSBmLT5yYW5nZV9oZWFkOyBuOyBuID0gbi0+cmFuZ2VfbmV4dCkgewotCQlpZiAobi0+ZGF0YV9vZmZzZXQgKyBuLT5kYXRhX3NpemUgPiBvZmZzZXQpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICghbikgewotCQkvKiBJZiB0aGVyZSdzIG5vIGRhdGEgaW4gdGhlIGZpbGUgdGhlcmUncyBubyBkYXRhIHRvCi0JCSAgIHJlbW92ZSBlaXRoZXIuICAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAobi0+ZGF0YV9vZmZzZXQgPiBvZmZzZXQpIHsKLQkJLyogWFhYOiBOb3QgaW1wbGVtZW50ZWQgeWV0LiAgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSkZGUzogQW4gdW5leHBlY3RlZCBzaXR1YXRpb24gIgotCQkgICAgICAgIm9jY3VycmVkIGluIGpmZnNfZGVsZXRlX2RhdGEuXG4iKTsKLQl9Ci0JZWxzZSBpZiAobi0+ZGF0YV9vZmZzZXQgPCBvZmZzZXQpIHsKLQkJLyogU2VlIGlmIHRoZSBub2RlIGhhcyB0byBiZSBzcGxpdCBpbnRvIHR3byBwYXJ0cy4gICovCi0JCWlmIChuLT5kYXRhX29mZnNldCArIG4tPmRhdGFfc2l6ZSA+IG9mZnNldCArIHJlbW92ZV9zaXplKSB7Ci0JCQkvKiBEbyB0aGUgc3BsaXQuICAqLwotCQkJc3RydWN0IGpmZnNfbm9kZSAqbmV3X25vZGU7Ci0JCQlEMyhwcmludGsoImpmZnNfZGVsZXRlX2RhdGEoKTogU3BsaXQgbm9kZSB3aXRoICIKLQkJCQkgICJ2ZXJzaW9uIG51bWJlciAldS5cbiIsIG4tPnZlcnNpb24pKTsKLQotCQkJaWYgKCEobmV3X25vZGUgPSBqZmZzX2FsbG9jX25vZGUoKSkpIHsKLQkJCQlEKHByaW50aygiamZmc19kZWxldGVfZGF0YSgpOiAtRU5PTUVNXG4iKSk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9Ci0JCQlESk0obm9famZmc19ub2RlKyspOwotCi0JCQluZXdfbm9kZS0+aW5vID0gbi0+aW5vOwotCQkJbmV3X25vZGUtPnZlcnNpb24gPSBuLT52ZXJzaW9uOwotCQkJbmV3X25vZGUtPmRhdGFfb2Zmc2V0ID0gb2Zmc2V0OwotCQkJbmV3X25vZGUtPmRhdGFfc2l6ZSA9IG4tPmRhdGFfc2l6ZSAtIChyZW1vdmVfc2l6ZSArIChvZmZzZXQgLSBuLT5kYXRhX29mZnNldCkpOwotCQkJbmV3X25vZGUtPmZtX29mZnNldCA9IG4tPmZtX29mZnNldCArIChyZW1vdmVfc2l6ZSArIChvZmZzZXQgLSBuLT5kYXRhX29mZnNldCkpOwotCQkJbmV3X25vZGUtPm5hbWVfc2l6ZSA9IG4tPm5hbWVfc2l6ZTsKLQkJCW5ld19ub2RlLT5mbSA9IG4tPmZtOwotCQkJbmV3X25vZGUtPnZlcnNpb25fcHJldiA9IG47Ci0JCQluZXdfbm9kZS0+dmVyc2lvbl9uZXh0ID0gbi0+dmVyc2lvbl9uZXh0OwotCQkJaWYgKG5ld19ub2RlLT52ZXJzaW9uX25leHQpIHsKLQkJCQluZXdfbm9kZS0+dmVyc2lvbl9uZXh0LT52ZXJzaW9uX3ByZXYKLQkJCQk9IG5ld19ub2RlOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZi0+dmVyc2lvbl90YWlsID0gbmV3X25vZGU7Ci0JCQl9Ci0JCQluLT52ZXJzaW9uX25leHQgPSBuZXdfbm9kZTsKLQkJCW5ld19ub2RlLT5yYW5nZV9wcmV2ID0gbjsKLQkJCW5ld19ub2RlLT5yYW5nZV9uZXh0ID0gbi0+cmFuZ2VfbmV4dDsKLQkJCWlmIChuZXdfbm9kZS0+cmFuZ2VfbmV4dCkgewotCQkJCW5ld19ub2RlLT5yYW5nZV9uZXh0LT5yYW5nZV9wcmV2ID0gbmV3X25vZGU7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmLT5yYW5nZV90YWlsID0gbmV3X25vZGU7Ci0JCQl9Ci0JCQkvKiBBIHZlcnkgaW50ZXJlc3RpbmcgY2FuIG9mIHdvcm1zLiAgKi8KLQkJCW4tPnJhbmdlX25leHQgPSBuZXdfbm9kZTsKLQkJCW4tPmRhdGFfc2l6ZSA9IG9mZnNldCAtIG4tPmRhdGFfb2Zmc2V0OwotCQkJaWYgKG5ld19ub2RlLT5mbSkKLQkJCQlqZmZzX2FkZF9ub2RlKG5ld19ub2RlKTsKLQkJCWVsc2UgewotCQkJCUQxKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnNfZGVsZXRlX2RhdGEoKTogU3BsaXR0aW5nIGFuIGVtcHR5IG5vZGUgKGZpbGUgaG9sZCkuXG4hIikpOwotCQkJCUQxKHByaW50ayhLRVJOX1dBUk5JTkcgIkZJWE1FOiBEaWQgZHdtdzIgZG8gdGhlIHJpZ2h0IHRoaW5nIGhlcmU/XG4iKSk7Ci0JCQl9Ci0JCQluID0gbmV3X25vZGUtPnJhbmdlX25leHQ7Ci0JCQlyZW1vdmVfc2l6ZSA9IDA7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBOby4gIE5vIG5lZWQgdG8gc3BsaXQgdGhlIG5vZGUuICBKdXN0IHJlbW92ZQotCQkJICAgdGhlIGVuZCBvZiB0aGUgbm9kZS4gICovCi0JCQlpbnQgciA9IG1pbihuLT5kYXRhX29mZnNldCArIG4tPmRhdGFfc2l6ZQotCQkJCQkgLSBvZmZzZXQsIHJlbW92ZV9zaXplKTsKLQkJCW4tPmRhdGFfc2l6ZSAtPSByOwotCQkJcmVtb3ZlX3NpemUgLT0gcjsKLQkJCW4gPSBuLT5yYW5nZV9uZXh0OwotCQl9Ci0JfQotCi0JLyogUmVtb3ZlIGFzIG1hbnkgbm9kZXMgYXMgbmVjZXNzYXJ5LiAgKi8KLQl3aGlsZSAobiAmJiByZW1vdmVfc2l6ZSkgewotCQlpZiAobi0+ZGF0YV9zaXplIDw9IHJlbW92ZV9zaXplKSB7Ci0JCQlzdHJ1Y3QgamZmc19ub2RlICpwID0gbjsKLQkJCXJlbW92ZV9zaXplIC09IG4tPmRhdGFfc2l6ZTsKLQkJCW4gPSBuLT5yYW5nZV9uZXh0OwotCQkJRDMocHJpbnRrKCJqZmZzX2RlbGV0ZV9kYXRhKCk6IFJlbW92aW5nIG5vZGU6ICIKLQkJCQkgICJpbm86ICV1LCB2ZXJzaW9uOiAldSVzXG4iLAotCQkJCSAgcC0+aW5vLCBwLT52ZXJzaW9uLAotCQkJCSAgKHAtPmZtID8gIiIgOiAiICh2aXJ0dWFsKSIpKSk7Ci0JCQlpZiAocC0+Zm0pIHsKLQkJCQlqZmZzX2ZtZnJlZShmLT5jLT5mbWMsIHAtPmZtLCBwKTsKLQkJCX0KLQkJCWpmZnNfdW5saW5rX25vZGVfZnJvbV9yYW5nZV9saXN0KGYsIHApOwotCQkJamZmc191bmxpbmtfbm9kZV9mcm9tX3ZlcnNpb25fbGlzdChmLCBwKTsKLQkJCWpmZnNfZnJlZV9ub2RlKHApOwotCQkJREpNKG5vX2pmZnNfbm9kZS0tKTsKLQkJfQotCQllbHNlIHsKLQkJCW4tPmRhdGFfc2l6ZSAtPSByZW1vdmVfc2l6ZTsKLQkJCW4tPmZtX29mZnNldCArPSByZW1vdmVfc2l6ZTsKLQkJCW4tPmRhdGFfb2Zmc2V0IC09IChub2RlLT5yZW1vdmVkX3NpemUgLSByZW1vdmVfc2l6ZSk7Ci0JCQluID0gbi0+cmFuZ2VfbmV4dDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogQWRqdXN0IHRoZSBmb2xsb3dpbmcgbm9kZXMnIGluZm9ybWF0aW9uIGFib3V0IG9mZnNldHMgZXRjLiAgKi8KLQl3aGlsZSAobiAmJiBub2RlLT5yZW1vdmVkX3NpemUpIHsKLQkJbi0+ZGF0YV9vZmZzZXQgLT0gbm9kZS0+cmVtb3ZlZF9zaXplOwotCQluID0gbi0+cmFuZ2VfbmV4dDsKLQl9Ci0KLQlpZiAobm9kZS0+cmVtb3ZlZF9zaXplID4gKGYtPnNpemUgLSBub2RlLT5kYXRhX29mZnNldCkpIHsKLQkJLyogSXQncyBwb3NzaWJsZSB0aGF0IHRoZSByZW1vdmVkX3NpemUgaXMgaW4gZmFjdAotCQkgKiBncmVhdGVyIHRoYW4gdGhlIGFtb3VudCBvZiBkYXRhIHdlIGFjdHVhbGx5IHRob3VnaHQKLQkJICogd2VyZSBwcmVzZW50IGluIHRoZSBmaXJzdCBwbGFjZSAtIHNvbWUgb2YgdGhlIG5vZGVzIAotCQkgKiB3aGljaCB0aGlzIG5vZGUgb3JpZ2luYWxseSBvYnNvbGV0ZWQgbWF5IGFscmVhZHkgaGF2ZQotCQkgKiBiZWVuIGRlbGV0ZWQgZnJvbSB0aGUgZmxhc2ggYnkgc3Vic2VxdWVudCBnYXJiYWdlIAotCQkgKiBjb2xsZWN0aW9uLgotCQkgKgotCQkgKiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBkb24ndCBsZXQgZi0+c2l6ZSBnbyBuZWdhdGl2ZS4KLQkJICogQmFkIHRoaW5ncyB3b3VsZCBoYXBwZW4gOikKLQkJICovCi0JCWYtPnNpemUgPSBub2RlLT5kYXRhX29mZnNldDsKLQl9IGVsc2UgewotCQlmLT5zaXplIC09IG5vZGUtPnJlbW92ZWRfc2l6ZTsKLQl9Ci0JRDMocHJpbnRrKCJqZmZzX2RlbGV0ZV9kYXRhKCk6IGYtPnNpemUgPSAlZFxuIiwgZi0+c2l6ZSkpOwotCXJldHVybiAwOwotfSAvKiBqZmZzX2RlbGV0ZV9kYXRhKCkgICovCi0KLQotLyogSW5zZXJ0IHNvbWUgZGF0YSBpbnRvIGEgZmlsZS4gIFByaW9yIHRvIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24sCi0gICBqZmZzX2RlbGV0ZV9kYXRhIHNob3VsZCBiZSBjYWxsZWQuICAqLwotc3RhdGljIGludAotamZmc19pbnNlcnRfZGF0YShzdHJ1Y3QgamZmc19maWxlICpmLCBzdHJ1Y3QgamZmc19ub2RlICpub2RlKQotewotCUQzKHByaW50aygiamZmc19pbnNlcnRfZGF0YSgpOiBub2RlLT5kYXRhX29mZnNldCA9ICV1LCAiCi0JCSAgIm5vZGUtPmRhdGFfc2l6ZSA9ICV1LCBmLT5zaXplID0gJXVcbiIsCi0JCSAgbm9kZS0+ZGF0YV9vZmZzZXQsIG5vZGUtPmRhdGFfc2l6ZSwgZi0+c2l6ZSkpOwotCi0JLyogRmluZCB0aGUgcG9zaXRpb24gd2hlcmUgd2Ugc2hvdWxkIGluc2VydCBkYXRhLiAgKi8KLQlyZXRyeToKLQlpZiAobm9kZS0+ZGF0YV9vZmZzZXQgPT0gZi0+c2l6ZSkgewotCQkvKiBBIHNpbXBsZSBhcHBlbmQuICBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBvcGVyYXRpb24uICAqLwotCQlub2RlLT5yYW5nZV9uZXh0ID0gTlVMTDsKLQkJbm9kZS0+cmFuZ2VfcHJldiA9IGYtPnJhbmdlX3RhaWw7Ci0JCWlmIChub2RlLT5yYW5nZV9wcmV2KSB7Ci0JCQlub2RlLT5yYW5nZV9wcmV2LT5yYW5nZV9uZXh0ID0gbm9kZTsKLQkJfQotCQlmLT5yYW5nZV90YWlsID0gbm9kZTsKLQkJZi0+c2l6ZSArPSBub2RlLT5kYXRhX3NpemU7Ci0JCWlmICghZi0+cmFuZ2VfaGVhZCkgewotCQkJZi0+cmFuZ2VfaGVhZCA9IG5vZGU7Ci0JCX0KLQl9Ci0JZWxzZSBpZiAobm9kZS0+ZGF0YV9vZmZzZXQgPCBmLT5zaXplKSB7Ci0JCS8qIFRyeWluZyB0byBpbnNlcnQgZGF0YSBpbnRvIHRoZSBtaWRkbGUgb2YgdGhlIGZpbGUuICBUaGlzCi0JCSAgIG1lYW5zIG5vIHByb2JsZW0gYmVjYXVzZSBqZmZzX2RlbGV0ZV9kYXRhKCkgaGFzIGFscmVhZHkKLQkJICAgcHJlcGFyZWQgdGhlIHJhbmdlIGxpc3QgZm9yIHVzLiAgKi8KLQkJc3RydWN0IGpmZnNfbm9kZSAqbjsKLQotCQkvKiBGaW5kIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aGUgaW5zZXJ0aW9uIGFuZCB0aGVuIGluc2VydAotCQkgICB0aGUgbm9kZS4gICovCi0JCWZvciAobiA9IGYtPnJhbmdlX2hlYWQ7IG47IG4gPSBuLT5yYW5nZV9uZXh0KSB7Ci0JCQlEMihwcmludGsoIkNvb2wgc3R1ZmYncyBoYXBwZW5pbmchXG4iKSk7Ci0KLQkJCWlmIChuLT5kYXRhX29mZnNldCA9PSBub2RlLT5kYXRhX29mZnNldCkgewotCQkJCW5vZGUtPnJhbmdlX3ByZXYgPSBuLT5yYW5nZV9wcmV2OwotCQkJCWlmIChub2RlLT5yYW5nZV9wcmV2KSB7Ci0JCQkJCW5vZGUtPnJhbmdlX3ByZXYtPnJhbmdlX25leHQgPSBub2RlOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJZi0+cmFuZ2VfaGVhZCA9IG5vZGU7Ci0JCQkJfQotCQkJCW5vZGUtPnJhbmdlX25leHQgPSBuOwotCQkJCW4tPnJhbmdlX3ByZXYgPSBub2RlOwotCQkJCWJyZWFrOwotCQkJfQotCQkJQVNTRVJUKGVsc2UgaWYgKG4tPmRhdGFfb2Zmc2V0ICsgbi0+ZGF0YV9zaXplID4KLQkJCQkJbm9kZS0+ZGF0YV9vZmZzZXQpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgImpmZnNfaW5zZXJ0X2RhdGEoKTogIgotCQkJCSAgICAgICAiQ291bGRuJ3QgZmluZCBhIHBsYWNlIHRvIGluc2VydCAiCi0JCQkJICAgICAgICJ0aGUgZGF0YSFcbiIpOwotCQkJCXJldHVybiAtMTsKLQkJCX0pOwotCQl9Ci0KLQkJLyogQWRqdXN0IGxhdGVyIG5vZGVzJyBvZmZzZXRzIGV0Yy4gICovCi0JCW4gPSBub2RlLT5yYW5nZV9uZXh0OwotCQl3aGlsZSAobikgewotCQkJbi0+ZGF0YV9vZmZzZXQgKz0gbm9kZS0+ZGF0YV9zaXplOwotCQkJbiA9IG4tPnJhbmdlX25leHQ7Ci0JCX0KLQkJZi0+c2l6ZSArPSBub2RlLT5kYXRhX3NpemU7Ci0JfQotCWVsc2UgaWYgKG5vZGUtPmRhdGFfb2Zmc2V0ID4gZi0+c2l6ZSkgewotCQkvKiBPa2F5LiAgVGhpcyBpcyB0cmlja3kuICBUaGlzIG1lYW5zIHRoYXQgd2Ugd2FudCB0byBpbnNlcnQKLQkJICAgZGF0YSBhdCBhIHBsYWNlIHRoYXQgaXMgYmV5b25kIHRoZSBsaW1pdHMgb2YgdGhlIGZpbGUgYXMKLQkJICAgaXQgaXMgY29uc3RydWN0ZWQgcmlnaHQgbm93LiAgVGhpcyBpcyBhY3R1YWxseSBhIGNvbW1vbgotCQkgICBldmVudCB0aGF0IGZvciBpbnN0YW5jZSBjb3VsZCBvY2N1ciBkdXJpbmcgdGhlIG1vdW50aW5nCi0JCSAgIG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBhIGxhcmdlIGZpbGUgaGF2ZSBiZWVuIHRydW5jYXRlZCwKLQkJICAgcmV3cml0dGVuIGFuZCB0aGVuIG9ubHkgcGFydGlhbGx5IGdhcmJhZ2UgY29sbGVjdGVkLiAgKi8KLQotCQlzdHJ1Y3QgamZmc19ub2RlICpuOwotCi0JCS8qIFdlIG5lZWQgYSBwbGFjZSBob2xkZXIgZm9yIHRoZSBkYXRhIHRoYXQgaXMgbWlzc2luZyBpbgotCQkgICBmcm9udCBvZiB0aGlzIGluc2VydGlvbi4gIFRoaXMgInZpcnR1YWwgbm9kZSIgd2lsbCBub3QKLQkJICAgYmUgYXNzb2NpYXRlZCB3aXRoIGFueSBzcGFjZSBvbiB0aGUgZmxhc2ggZGV2aWNlLiAgKi8KLQkJc3RydWN0IGpmZnNfbm9kZSAqdmlydHVhbF9ub2RlOwotCQlpZiAoISh2aXJ0dWFsX25vZGUgPSBqZmZzX2FsbG9jX25vZGUoKSkpIHsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJRChwcmludGsoImpmZnNfaW5zZXJ0X2RhdGE6IEluc2VydGluZyBhIHZpcnR1YWwgbm9kZS5cbiIpKTsKLQkJRChwcmludGsoIiAgbm9kZS0+ZGF0YV9vZmZzZXQgPSAldVxuIiwgbm9kZS0+ZGF0YV9vZmZzZXQpKTsKLQkJRChwcmludGsoIiAgZi0+c2l6ZSA9ICV1XG4iLCBmLT5zaXplKSk7Ci0KLQkJdmlydHVhbF9ub2RlLT5pbm8gPSBub2RlLT5pbm87Ci0JCXZpcnR1YWxfbm9kZS0+dmVyc2lvbiA9IG5vZGUtPnZlcnNpb247Ci0JCXZpcnR1YWxfbm9kZS0+cmVtb3ZlZF9zaXplID0gMDsKLQkJdmlydHVhbF9ub2RlLT5mbV9vZmZzZXQgPSAwOwotCQl2aXJ0dWFsX25vZGUtPm5hbWVfc2l6ZSA9IDA7Ci0JCXZpcnR1YWxfbm9kZS0+Zm0gPSBOVUxMOyAvKiBUaGlzIGlzIGEgdmlydHVhbCBkYXRhIGhvbGRlci4gICovCi0JCXZpcnR1YWxfbm9kZS0+dmVyc2lvbl9wcmV2ID0gTlVMTDsKLQkJdmlydHVhbF9ub2RlLT52ZXJzaW9uX25leHQgPSBOVUxMOwotCQl2aXJ0dWFsX25vZGUtPnJhbmdlX25leHQgPSBOVUxMOwotCi0JCS8qIEFyZSB0aGVyZSBhbnkgZGF0YSBhdCBhbGwgaW4gdGhlIGZpbGUgeWV0PyAgKi8KLQkJaWYgKGYtPnJhbmdlX2hlYWQpIHsKLQkJCXZpcnR1YWxfbm9kZS0+ZGF0YV9vZmZzZXQKLQkJCT0gZi0+cmFuZ2VfdGFpbC0+ZGF0YV9vZmZzZXQKLQkJCSAgKyBmLT5yYW5nZV90YWlsLT5kYXRhX3NpemU7Ci0JCQl2aXJ0dWFsX25vZGUtPmRhdGFfc2l6ZQotCQkJPSBub2RlLT5kYXRhX29mZnNldCAtIHZpcnR1YWxfbm9kZS0+ZGF0YV9vZmZzZXQ7Ci0JCQl2aXJ0dWFsX25vZGUtPnJhbmdlX3ByZXYgPSBmLT5yYW5nZV90YWlsOwotCQkJZi0+cmFuZ2VfdGFpbC0+cmFuZ2VfbmV4dCA9IHZpcnR1YWxfbm9kZTsKLQkJfQotCQllbHNlIHsKLQkJCXZpcnR1YWxfbm9kZS0+ZGF0YV9vZmZzZXQgPSAwOwotCQkJdmlydHVhbF9ub2RlLT5kYXRhX3NpemUgPSBub2RlLT5kYXRhX29mZnNldDsKLQkJCXZpcnR1YWxfbm9kZS0+cmFuZ2VfcHJldiA9IE5VTEw7Ci0JCQlmLT5yYW5nZV9oZWFkID0gdmlydHVhbF9ub2RlOwotCQl9Ci0KLQkJZi0+cmFuZ2VfdGFpbCA9IHZpcnR1YWxfbm9kZTsKLQkJZi0+c2l6ZSArPSB2aXJ0dWFsX25vZGUtPmRhdGFfc2l6ZTsKLQotCQkvKiBJbnNlcnQgdGhpcyB2aXJ0dWFsIG5vZGUgaW4gdGhlIHZlcnNpb24gbGlzdCBhcyB3ZWxsLiAgKi8KLQkJZm9yIChuID0gZi0+dmVyc2lvbl9oZWFkOyBuIDsgbiA9IG4tPnZlcnNpb25fbmV4dCkgewotCQkJaWYgKG4tPnZlcnNpb24gPT0gdmlydHVhbF9ub2RlLT52ZXJzaW9uKSB7Ci0JCQkJdmlydHVhbF9ub2RlLT52ZXJzaW9uX3ByZXYgPSBuLT52ZXJzaW9uX3ByZXY7Ci0JCQkJbi0+dmVyc2lvbl9wcmV2ID0gdmlydHVhbF9ub2RlOwotCQkJCWlmICh2aXJ0dWFsX25vZGUtPnZlcnNpb25fcHJldikgewotCQkJCQl2aXJ0dWFsX25vZGUtPnZlcnNpb25fcHJldgotCQkJCQktPnZlcnNpb25fbmV4dCA9IHZpcnR1YWxfbm9kZTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWYtPnZlcnNpb25faGVhZCA9IHZpcnR1YWxfbm9kZTsKLQkJCQl9Ci0JCQkJdmlydHVhbF9ub2RlLT52ZXJzaW9uX25leHQgPSBuOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJRChqZmZzX3ByaW50X25vZGUodmlydHVhbF9ub2RlKSk7Ci0KLQkJLyogTWFrZSBhIG5ldyB0cnkgdG8gaW5zZXJ0IHRoZSBub2RlLiAgKi8KLQkJZ290byByZXRyeTsKLQl9Ci0KLQlEMyhwcmludGsoImpmZnNfaW5zZXJ0X2RhdGEoKTogZi0+c2l6ZSA9ICVkXG4iLCBmLT5zaXplKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogQSBuZXcgbm9kZSAod2l0aCBkYXRhKSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZmlsZSBhbmQgbm93IHRoZSByYW5nZQotICAgbGlzdCBoYXMgdG8gYmUgbW9kaWZpZWQuICAqLwotc3RhdGljIGludAotamZmc191cGRhdGVfZmlsZShzdHJ1Y3QgamZmc19maWxlICpmLCBzdHJ1Y3QgamZmc19ub2RlICpub2RlKQotewotCWludCBlcnI7Ci0KLQlEMyhwcmludGsoImpmZnNfdXBkYXRlX2ZpbGUoKTogaW5vOiAldSwgdmVyc2lvbjogJXVcbiIsCi0JCSAgZi0+aW5vLCBub2RlLT52ZXJzaW9uKSk7Ci0KLQlpZiAobm9kZS0+ZGF0YV9zaXplID09IDApIHsKLQkJaWYgKG5vZGUtPnJlbW92ZWRfc2l6ZSA9PSAwKSB7Ci0JCQkvKiBkYXRhX29mZnNldCA9PSBYICAqLwotCQkJLyogZGF0YV9zaXplID09IDAgICovCi0JCQkvKiByZW1vdmVfc2l6ZSA9PSAwICAqLwotCQl9Ci0JCWVsc2UgewotCQkJLyogZGF0YV9vZmZzZXQgPT0gWCAgKi8KLQkJCS8qIGRhdGFfc2l6ZSA9PSAwICAqLwotCQkJLyogcmVtb3ZlX3NpemUgIT0gMCAgKi8KLQkJCWlmICgoZXJyID0gamZmc19kZWxldGVfZGF0YShmLCBub2RlKSkgPCAwKSB7Ci0JCQkJcmV0dXJuIGVycjsKLQkJCX0KLQkJfQotCX0KLQllbHNlIHsKLQkJLyogZGF0YV9vZmZzZXQgPT0gWCAgKi8KLQkJLyogZGF0YV9zaXplICE9IDAgICovCi0JCS8qIHJlbW92ZV9zaXplID09IFkgICovCi0JCWlmICgoZXJyID0gamZmc19kZWxldGVfZGF0YShmLCBub2RlKSkgPCAwKSB7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWlmICgoZXJyID0gamZmc19pbnNlcnRfZGF0YShmLCBub2RlKSkgPCAwKSB7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiBQcmludCB0aGUgY29udGVudHMgb2YgYSBmaWxlLiAgKi8KLSNpZiAwCi1pbnQKLWpmZnNfcHJpbnRfZmlsZShzdHJ1Y3QgamZmc19maWxlICpmKQotewotCUQoaW50IGkpOwotCUQocHJpbnRrKCJqZmZzX2ZpbGU6IDB4JXBcbiIsIGYpKTsKLQlEKHByaW50aygie1xuIikpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTA4eCwgLyogaW5vICAqL1xuIiwgZi0+aW5vKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglMDh4LCAvKiBwaW5vICAqL1xuIiwgZi0+cGlubykpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JTA4eCwgLyogbW9kZSAgKi9cbiIsIGYtPm1vZGUpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwNHgsICAgICAvKiB1aWQgICovXG4iLCBmLT51aWQpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwNHgsICAgICAvKiBnaWQgICovXG4iLCBmLT5naWQpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIGF0aW1lICAqL1xuIiwgZi0+YXRpbWUpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIG10aW1lICAqL1xuIiwgZi0+bXRpbWUpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIGN0aW1lICAqL1xuIiwgZi0+Y3RpbWUpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwMngsICAgICAgIC8qIG5zaXplICAqL1xuIiwgZi0+bnNpemUpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwMngsICAgICAgIC8qIG5saW5rICAqL1xuIiwgZi0+bmxpbmspKTsKLQlEKHByaW50aygiICAgICAgICAweCUwMngsICAgICAgIC8qIGRlbGV0ZWQgICovXG4iLCBmLT5kZWxldGVkKSk7Ci0JRChwcmludGsoIiAgICAgICAgXCIlc1wiLCAiLCAoZi0+bmFtZSA/IGYtPm5hbWUgOiAiIikpKTsKLQlEKGZvciAoaSA9IHN0cmxlbihmLT5uYW1lID8gZi0+bmFtZSA6ICIiKTsgaSA8IDg7ICsraSkgewotCQlwcmludGsoIiAiKTsKLQl9KTsKLQlEKHByaW50aygiLyogbmFtZSAgKi9cbiIpKTsKLQlEKHByaW50aygiICAgICAgICAweCUwOHgsIC8qIHNpemUgICovXG4iLCBmLT5zaXplKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglMDh4LCAvKiBoaWdoZXN0X3ZlcnNpb24gICovXG4iLAotCQkgZi0+aGlnaGVzdF92ZXJzaW9uKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglcCwgLyogYyAgKi9cbiIsIGYtPmMpKTsKLQlEKHByaW50aygiICAgICAgICAweCVwLCAvKiBwYXJlbnQgICovXG4iLCBmLT5wYXJlbnQpKTsKLQlEKHByaW50aygiICAgICAgICAweCVwLCAvKiBjaGlsZHJlbiAgKi9cbiIsIGYtPmNoaWxkcmVuKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglcCwgLyogc2libGluZ19wcmV2ICAqL1xuIiwgZi0+c2libGluZ19wcmV2KSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglcCwgLyogc2libGluZ19uZXh0ICAqL1xuIiwgZi0+c2libGluZ19uZXh0KSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglcCwgLyogaGFzaF9wcmV2ICAqL1xuIiwgZi0+aGFzaC5wcmV2KSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglcCwgLyogaGFzaF9uZXh0ICAqL1xuIiwgZi0+aGFzaC5uZXh0KSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglcCwgLyogcmFuZ2VfaGVhZCAgKi9cbiIsIGYtPnJhbmdlX2hlYWQpKTsKLQlEKHByaW50aygiICAgICAgICAweCVwLCAvKiByYW5nZV90YWlsICAqL1xuIiwgZi0+cmFuZ2VfdGFpbCkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JXAsIC8qIHZlcnNpb25faGVhZCAgKi9cbiIsIGYtPnZlcnNpb25faGVhZCkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JXAsIC8qIHZlcnNpb25fdGFpbCAgKi9cbiIsIGYtPnZlcnNpb25fdGFpbCkpOwotCUQocHJpbnRrKCJ9XG4iKSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCi12b2lkCi1qZmZzX3ByaW50X2hhc2hfdGFibGUoc3RydWN0IGpmZnNfY29udHJvbCAqYykKLXsKLQlpbnQgaTsKLQotCXByaW50aygiSkZGUzogRHVtcGluZyB0aGUgZmlsZSBzeXN0ZW0ncyBoYXNoIHRhYmxlLi4uXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgYy0+aGFzaF9sZW47IGkrKykgewotCQlzdHJ1Y3QgamZmc19maWxlICpmOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGYsICZjLT5oYXNoW2ldLCBoYXNoKSB7Ci0JCQlwcmludGsoIioqKiBjLT5oYXNoWyV1XTogXCIlc1wiICIKLQkJCSAgICAgICAiKGlubzogJXUsIHBpbm86ICV1KVxuIiwKLQkJCSAgICAgICBpLCAoZi0+bmFtZSA/IGYtPm5hbWUgOiAiIiksCi0JCQkgICAgICAgZi0+aW5vLCBmLT5waW5vKTsKLQkJfQotCX0KLX0KLQotCi12b2lkCi1qZmZzX3ByaW50X3RyZWUoc3RydWN0IGpmZnNfZmlsZSAqZmlyc3RfZmlsZSwgaW50IGluZGVudCkKLXsKLQlzdHJ1Y3QgamZmc19maWxlICpmOwotCWNoYXIgKnNwYWNlOwotCWludCBkaXI7Ci0KLQlpZiAoIWZpcnN0X2ZpbGUpIHsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghKHNwYWNlID0ga21hbGxvYyhpbmRlbnQgKyAxLCBHRlBfS0VSTkVMKSkpIHsKLQkJcHJpbnRrKCJqZmZzX3ByaW50X3RyZWUoKTogT3V0IG9mIG1lbW9yeSFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbWVtc2V0KHNwYWNlLCAnICcsIGluZGVudCk7Ci0Jc3BhY2VbaW5kZW50XSA9ICdcMCc7Ci0KLQlmb3IgKGYgPSBmaXJzdF9maWxlOyBmOyBmID0gZi0+c2libGluZ19uZXh0KSB7Ci0JCWRpciA9IFNfSVNESVIoZi0+bW9kZSk7Ci0JCXByaW50aygiJXMlcyVzIChpbm86ICV1LCBoaWdoZXN0X3ZlcnNpb246ICV1LCBzaXplOiAldSlcbiIsCi0JCSAgICAgICBzcGFjZSwgKGYtPm5hbWUgPyBmLT5uYW1lIDogIiIpLCAoZGlyID8gIi8iIDogIiIpLAotCQkgICAgICAgZi0+aW5vLCBmLT5oaWdoZXN0X3ZlcnNpb24sIGYtPnNpemUpOwotCQlpZiAoZGlyKSB7Ci0JCQlqZmZzX3ByaW50X3RyZWUoZi0+Y2hpbGRyZW4sIGluZGVudCArIDIpOwotCQl9Ci0JfQotCi0Ja2ZyZWUoc3BhY2UpOwotfQotCi0KLSNpZiBkZWZpbmVkKEpGRlNfTUVNT1JZX0RFQlVHKSAmJiBKRkZTX01FTU9SWV9ERUJVRwotdm9pZAotamZmc19wcmludF9tZW1vcnlfYWxsb2NhdGlvbl9zdGF0aXN0aWNzKHZvaWQpCi17Ci0Jc3RhdGljIGxvbmcgcHJpbnRvdXQ7Ci0JcHJpbnRrKCJfX19fX19fXyBNZW1vcnkgcHJpbnRvdXQgIyVsZCBfX19fX19fX1xuIiwgKytwcmludG91dCk7Ci0JcHJpbnRrKCJub19qZmZzX2ZpbGUgPSAlbGRcbiIsIG5vX2pmZnNfZmlsZSk7Ci0JcHJpbnRrKCJub19qZmZzX25vZGUgPSAlbGRcbiIsIG5vX2pmZnNfbm9kZSk7Ci0JcHJpbnRrKCJub19qZmZzX2NvbnRyb2wgPSAlbGRcbiIsIG5vX2pmZnNfY29udHJvbCk7Ci0JcHJpbnRrKCJub19qZmZzX3Jhd19pbm9kZSA9ICVsZFxuIiwgbm9famZmc19yYXdfaW5vZGUpOwotCXByaW50aygibm9famZmc19ub2RlX3JlZiA9ICVsZFxuIiwgbm9famZmc19ub2RlX3JlZik7Ci0JcHJpbnRrKCJub19qZmZzX2ZtID0gJWxkXG4iLCBub19qZmZzX2ZtKTsKLQlwcmludGsoIm5vX2pmZnNfZm1jb250cm9sID0gJWxkXG4iLCBub19qZmZzX2ZtY29udHJvbCk7Ci0JcHJpbnRrKCJub19oYXNoID0gJWxkXG4iLCBub19oYXNoKTsKLQlwcmludGsoIm5vX25hbWUgPSAlbGRcbiIsIG5vX25hbWUpOwotCXByaW50aygiXG4iKTsKLX0KLSNlbmRpZgotCi0KLS8qIFJld3JpdGUgYHNpemUnIGJ5dGVzLCBhbmQgYmVnaW4gYXQgYG5vZGUnLiAgKi8KLXN0YXRpYyBpbnQKLWpmZnNfcmV3cml0ZV9kYXRhKHN0cnVjdCBqZmZzX2ZpbGUgKmYsIHN0cnVjdCBqZmZzX25vZGUgKm5vZGUsIF9fdTMyIHNpemUpCi17Ci0Jc3RydWN0IGpmZnNfY29udHJvbCAqYyA9IGYtPmM7Ci0Jc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMgPSBjLT5mbWM7Ci0Jc3RydWN0IGpmZnNfcmF3X2lub2RlIHJhd19pbm9kZTsKLQlzdHJ1Y3QgamZmc19ub2RlICpuZXdfbm9kZTsKLQlzdHJ1Y3QgamZmc19mbSAqZm07Ci0JX191MzIgcG9zOwotCV9fdTMyIHBvc19kY2hrc3VtOwotCV9fdTMyIHRvdGFsX25hbWVfc2l6ZTsKLQlfX3UzMiB0b3RhbF9kYXRhX3NpemU7Ci0JX191MzIgdG90YWxfc2l6ZTsKLQlpbnQgZXJyOwotCi0JRDEocHJpbnRrKCIqKipqZmZzX3Jld3JpdGVfZGF0YSgpOiBub2RlOiAldSwgbmFtZTogXCIlc1wiLCBzaXplOiAldVxuIiwKLQkJICBmLT5pbm8sIChmLT5uYW1lID8gZi0+bmFtZSA6ICIobnVsbCkiKSwgc2l6ZSkpOwotCi0JLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBuZXcgbm9kZS4gICovCi0JaWYgKCEobmV3X25vZGUgPSBqZmZzX2FsbG9jX25vZGUoKSkpIHsKLQkJRChwcmludGsoImpmZnNfcmV3cml0ZV9kYXRhKCk6ICIKLQkJCSAiRmFpbGVkIHRvIGFsbG9jYXRlIG5vZGUuXG4iKSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlESk0obm9famZmc19ub2RlKyspOwotCW5ld19ub2RlLT5kYXRhX29mZnNldCA9IG5vZGUtPmRhdGFfb2Zmc2V0OwotCW5ld19ub2RlLT5yZW1vdmVkX3NpemUgPSBzaXplOwotCXRvdGFsX25hbWVfc2l6ZSA9IEpGRlNfUEFEKGYtPm5zaXplKTsKLQl0b3RhbF9kYXRhX3NpemUgPSBKRkZTX1BBRChzaXplKTsKLQl0b3RhbF9zaXplID0gc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSkKLQkJICAgICArIHRvdGFsX25hbWVfc2l6ZSArIHRvdGFsX2RhdGFfc2l6ZTsKLQluZXdfbm9kZS0+Zm1fb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSkKLQkJCSAgICAgICsgdG90YWxfbmFtZV9zaXplOwotCi1yZXRyeToKLQlqZmZzX2ZtX3dyaXRlX2xvY2soZm1jKTsKLQllcnIgPSAwOwotCi0JaWYgKChlcnIgPSBqZmZzX2ZtYWxsb2MoZm1jLCB0b3RhbF9zaXplLCBuZXdfbm9kZSwgJmZtKSkgPCAwKSB7Ci0JCURKTShub19qZmZzX25vZGUtLSk7Ci0JCWpmZnNfZm1fd3JpdGVfdW5sb2NrKGZtYyk7Ci0JCUQocHJpbnRrKCJqZmZzX3Jld3JpdGVfZGF0YSgpOiBGYWlsZWQgdG8gYWxsb2NhdGUgZm0uXG4iKSk7Ci0JCWpmZnNfZnJlZV9ub2RlKG5ld19ub2RlKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JZWxzZSBpZiAoIWZtLT5ub2RlcykgewotCQkvKiBUaGUgamZmc19mbSBzdHJ1Y3QgdGhhdCB3ZSBnb3QgaXMgbm90IGJpZyBlbm91Z2guICAqLwotCQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJlY2F1c2Ugd2UgZGVhbCB3aXRoIHRoaXMgY2FzZQotCQkgICBpbiBqZmZzX2dhcmJhZ2VfY29sbGVjdF9uZXh0KCkuKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiamZmc19yZXdyaXRlX2RhdGEoKTogQWxsb2NhdGVkIG5vZGUgaXMgdG9vIHNtYWxsICglZCBieXRlcyBvZiAlZClcbiIsIGZtLT5zaXplLCB0b3RhbF9zaXplKTsKLQkJaWYgKChlcnIgPSBqZmZzX3dyaXRlX2R1bW15X25vZGUoYywgZm0pKSA8IDApIHsKLQkJCUQocHJpbnRrKCJqZmZzX3Jld3JpdGVfZGF0YSgpOiAiCi0JCQkJICJqZmZzX3dyaXRlX2R1bW15X25vZGUoKSBGYWlsZWQhXG4iKSk7Ci0JCX0gZWxzZSB7Ci0JCQllcnIgPSAtRU5PU1BDOwotCQl9Ci0JCURKTShub19qZmZzX2ZtLS0pOwotCQlqZmZzX2ZtX3dyaXRlX3VubG9jayhmbWMpOwotCQlrZnJlZShmbSk7Ci0JCQotCQlyZXR1cm4gZXJyOwotCX0KLQluZXdfbm9kZS0+Zm0gPSBmbTsKLQotCS8qIEluaXRpYWxpemUgdGhlIHJhdyBpbm9kZS4gICovCi0JcmF3X2lub2RlLm1hZ2ljID0gSkZGU19NQUdJQ19CSVRNQVNLOwotCXJhd19pbm9kZS5pbm8gPSBmLT5pbm87Ci0JcmF3X2lub2RlLnBpbm8gPSBmLT5waW5vOwotCXJhd19pbm9kZS52ZXJzaW9uID0gZi0+aGlnaGVzdF92ZXJzaW9uICsgMTsKLQlyYXdfaW5vZGUubW9kZSA9IGYtPm1vZGU7Ci0JcmF3X2lub2RlLnVpZCA9IGYtPnVpZDsKLQlyYXdfaW5vZGUuZ2lkID0gZi0+Z2lkOwotCXJhd19pbm9kZS5hdGltZSA9IGYtPmF0aW1lOwotCXJhd19pbm9kZS5tdGltZSA9IGYtPm10aW1lOwotCXJhd19pbm9kZS5jdGltZSA9IGYtPmN0aW1lOwotCXJhd19pbm9kZS5vZmZzZXQgPSBub2RlLT5kYXRhX29mZnNldDsKLQlyYXdfaW5vZGUuZHNpemUgPSBzaXplOwotCXJhd19pbm9kZS5yc2l6ZSA9IHNpemU7Ci0JcmF3X2lub2RlLm5zaXplID0gZi0+bnNpemU7Ci0JcmF3X2lub2RlLm5saW5rID0gZi0+bmxpbms7Ci0JcmF3X2lub2RlLnNwYXJlID0gMDsKLQlyYXdfaW5vZGUucmVuYW1lID0gMDsKLQlyYXdfaW5vZGUuZGVsZXRlZCA9IGYtPmRlbGV0ZWQ7Ci0JcmF3X2lub2RlLmFjY3VyYXRlID0gMHhmZjsKLQlyYXdfaW5vZGUuZGNoa3N1bSA9IDA7Ci0JcmF3X2lub2RlLm5jaGtzdW0gPSAwOwotCi0JcG9zID0gbmV3X25vZGUtPmZtLT5vZmZzZXQ7Ci0JcG9zX2RjaGtzdW0gPSBwb3MgK0pGRlNfUkFXX0lOT0RFX0RDSEtTVU1fT0ZGU0VUOwotCi0JRDMocHJpbnRrKCJqZmZzX3Jld3JpdGVfZGF0YSgpOiBXcml0aW5nIHRoaXMgcmF3IGlub2RlICIKLQkJICAidG8gcG9zIDB4JXVsLlxuIiwgcG9zKSk7Ci0JRDMoamZmc19wcmludF9yYXdfaW5vZGUoJnJhd19pbm9kZSkpOwotCi0JaWYgKChlcnIgPSBmbGFzaF9zYWZlX3dyaXRlKGZtYy0+bXRkLCBwb3MsCi0JCQkJICAgICh1X2NoYXIgKikgJnJhd19pbm9kZSwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSkKLQkJCQkgICAgLSBzaXplb2YoX191MzIpCi0JCQkJICAgIC0gc2l6ZW9mKF9fdTE2KSAtIHNpemVvZihfX3UxNikpKSA8IDApIHsKLQkJamZmc19mbWZyZWVfcGFydGx5KGZtYywgZm0sCi0JCQkJICAgdG90YWxfbmFtZV9zaXplICsgdG90YWxfZGF0YV9zaXplKTsKLQkJamZmc19mbV93cml0ZV91bmxvY2soZm1jKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJKRkZTOiBqZmZzX3Jld3JpdGVfZGF0YTogV3JpdGUgZXJyb3IgZHVyaW5nICIKLQkJCSJyZXdyaXRlLiAocmF3IGlub2RlKVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiSkZGUzogamZmc19yZXdyaXRlX2RhdGE6IE5vdyByZXRyeWluZyAiCi0JCQkicmV3cml0ZS4gKHJhdyBpbm9kZSlcbiIpOwotCQlnb3RvIHJldHJ5OwotCX0KLQlwb3MgKz0gc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSk7Ci0KLQkvKiBXcml0ZSB0aGUgbmFtZSB0byB0aGUgZmxhc2ggbWVtb3J5LiAgKi8KLQlpZiAoZi0+bnNpemUpIHsKLQkJRDMocHJpbnRrKCJqZmZzX3Jld3JpdGVfZGF0YSgpOiBXcml0aW5nIG5hbWUgXCIlc1wiIHRvICIKLQkJCSAgInBvcyAweCV1bC5cbiIsIGYtPm5hbWUsICh1bnNpZ25lZCBpbnQpIHBvcykpOwotCQlpZiAoKGVyciA9IGZsYXNoX3NhZmVfd3JpdGUoZm1jLT5tdGQsIHBvcywKLQkJCQkJICAgICh1X2NoYXIgKilmLT5uYW1lLAotCQkJCQkgICAgZi0+bnNpemUpKSA8IDApIHsKLQkJCWpmZnNfZm1mcmVlX3BhcnRseShmbWMsIGZtLCB0b3RhbF9kYXRhX3NpemUpOwotCQkJamZmc19mbV93cml0ZV91bmxvY2soZm1jKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiSkZGUzogamZmc19yZXdyaXRlX2RhdGE6IFdyaXRlICIKLQkJCQkiZXJyb3IgZHVyaW5nIHJld3JpdGUuIChuYW1lKVxuIik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkpGRlM6IGpmZnNfcmV3cml0ZV9kYXRhOiBOb3cgcmV0cnlpbmcgIgotCQkJCSJyZXdyaXRlLiAobmFtZSlcbiIpOwotCQkJZ290byByZXRyeTsKLQkJfQotCQlwb3MgKz0gdG90YWxfbmFtZV9zaXplOwotCQlyYXdfaW5vZGUubmNoa3N1bSA9IGpmZnNfY2hlY2tzdW0oZi0+bmFtZSwgZi0+bnNpemUpOwotCX0KLQotCS8qIFdyaXRlIHRoZSBkYXRhLiAgKi8KLQlpZiAoc2l6ZSkgewotCQlpbnQgcjsKLQkJdW5zaWduZWQgY2hhciAqcGFnZTsKLQkJX191MzIgb2Zmc2V0ID0gbm9kZS0+ZGF0YV9vZmZzZXQ7Ci0KLQkJaWYgKCEocGFnZSA9ICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpKSkgewotCQkJamZmc19mbWZyZWVfcGFydGx5KGZtYywgZm0sIDApOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJd2hpbGUgKHNpemUpIHsKLQkJCV9fdTMyIHMgPSBtaW4oc2l6ZSwgKF9fdTMyKVBBR0VfU0laRSk7Ci0JCQlpZiAoKHIgPSBqZmZzX3JlYWRfZGF0YShmLCAoY2hhciAqKXBhZ2UsCi0JCQkJCQlvZmZzZXQsIHMpKSA8IHMpIHsKLQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZSk7Ci0JCQkJamZmc19mbWZyZWVfcGFydGx5KGZtYywgZm0sIDApOwotCQkJCWpmZnNfZm1fd3JpdGVfdW5sb2NrKGZtYyk7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJKRkZTOiBqZmZzX3Jld3JpdGVfZGF0YTogIgotCQkJCQkgImpmZnNfcmVhZF9kYXRhKCkgIgotCQkJCQkgImZhaWxlZCEgKHIgPSAlZClcbiIsIHIpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJCWlmICgoZXJyID0gZmxhc2hfc2FmZV93cml0ZShmbWMtPm10ZCwKLQkJCQkJCSAgICBwb3MsIHBhZ2UsIHIpKSA8IDApIHsKLQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZSk7Ci0JCQkJamZmc19mbWZyZWVfcGFydGx5KGZtYywgZm0sIDApOwotCQkJCWpmZnNfZm1fd3JpdGVfdW5sb2NrKGZtYyk7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJKRkZTOiBqZmZzX3Jld3JpdGVfZGF0YTogIgotCQkJCSAgICAgICAiV3JpdGUgZXJyb3IgZHVyaW5nIHJld3JpdGUuICIKLQkJCQkgICAgICAgIihkYXRhKVxuIik7Ci0JCQkJZ290byByZXRyeTsKLQkJCX0KLQkJCXBvcyArPSByOwotCQkJc2l6ZSAtPSByOwotCQkJb2Zmc2V0ICs9IHI7Ci0JCQlyYXdfaW5vZGUuZGNoa3N1bSArPSBqZmZzX2NoZWNrc3VtKHBhZ2UsIHIpOwotCQl9Ci0KLQkgICAgICAgIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYWdlKTsKLQl9Ci0KLQlyYXdfaW5vZGUuYWNjdXJhdGUgPSAwOwotCXJhd19pbm9kZS5jaGtzdW0gPSBqZmZzX2NoZWNrc3VtKCZyYXdfaW5vZGUsCi0JCQkJCSBzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKQotCQkJCQkgLSBzaXplb2YoX191MTYpKTsKLQotCS8qIEFkZCB0aGUgY2hlY2tzdW0uICAqLwotCWlmICgoZXJyCi0JICAgICA9IGZsYXNoX3NhZmVfd3JpdGUoZm1jLT5tdGQsIHBvc19kY2hrc3VtLAotCQkJCSYoKHVfY2hhciAqKQotCQkJCSZyYXdfaW5vZGUpW0pGRlNfUkFXX0lOT0RFX0RDSEtTVU1fT0ZGU0VUXSwKLQkJCQlzaXplb2YoX191MzIpICsgc2l6ZW9mKF9fdTE2KQotCQkJCSsgc2l6ZW9mKF9fdTE2KSkpIDwgMCkgewotCQlqZmZzX2ZtZnJlZV9wYXJ0bHkoZm1jLCBmbSwgMCk7Ci0JCWpmZnNfZm1fd3JpdGVfdW5sb2NrKGZtYyk7Ci0JCXByaW50ayhLRVJOX0VSUiAiSkZGUzogamZmc19yZXdyaXRlX2RhdGE6IFdyaXRlIGVycm9yIGR1cmluZyAiCi0JCSAgICAgICAicmV3cml0ZS4gKGNoZWNrc3VtKVxuIik7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCi0JLyogTm93IG1ha2UgdGhlIGZpbGUgc3lzdGVtIGF3YXJlIG9mIHRoZSBuZXdseSB3cml0dGVuIG5vZGUuICAqLwotCWpmZnNfaW5zZXJ0X25vZGUoYywgZiwgJnJhd19pbm9kZSwgZi0+bmFtZSwgbmV3X25vZGUpOwotCWpmZnNfZm1fd3JpdGVfdW5sb2NrKGZtYyk7Ci0KLQlEMyhwcmludGsoImpmZnNfcmV3cml0ZV9kYXRhKCk6IExlYXZpbmcuLi5cbiIpKTsKLQlyZXR1cm4gMDsKLX0gLyogamZmc19yZXdyaXRlX2RhdGEoKSAgKi8KLQotCi0vKiBqZmZzX2dhcmJhZ2VfY29sbGVjdF9uZXh0IGltcGxlbWVudHMgb25lIHN0ZXAgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdAotICAgcHJvY2VzcyBhbmQgaXMgb2Z0ZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzIGF0IGVhY2ggb2NjYXNpb24gb2YgYQotICAgZ2FyYmFnZSBjb2xsZWN0LiAgKi8KLQotc3RhdGljIGludAotamZmc19nYXJiYWdlX2NvbGxlY3RfbmV4dChzdHJ1Y3QgamZmc19jb250cm9sICpjKQotewotCXN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jID0gYy0+Zm1jOwotCXN0cnVjdCBqZmZzX25vZGUgKm5vZGU7Ci0Jc3RydWN0IGpmZnNfZmlsZSAqZjsKLQlpbnQgZXJyID0gMDsKLQlfX3UzMiBzaXplOwotCV9fdTMyIGRhdGFfc2l6ZTsKLQlfX3UzMiB0b3RhbF9uYW1lX3NpemU7Ci0JX191MzIgZXh0cmFfYXZhaWxhYmxlOwotCV9fdTMyIHNwYWNlX25lZWRlZDsKLQlfX3UzMiBmcmVlX2NodW5rX3NpemUxID0gamZmc19mcmVlX3NpemUxKGZtYyk7Ci0JRDIoX191MzIgZnJlZV9jaHVua19zaXplMiA9IGpmZnNfZnJlZV9zaXplMihmbWMpKTsKLQotCS8qIEdldCB0aGUgb2xkZXN0IG5vZGUgaW4gdGhlIGZsYXNoLiAgKi8KLQlub2RlID0gamZmc19nZXRfb2xkZXN0X25vZGUoZm1jKTsKLQlBU1NFUlQoaWYgKCFub2RlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSkZGUzogamZmc19nYXJiYWdlX2NvbGxlY3RfbmV4dDogIgotCQkgICAgICAgIk5vIG9sZGVzdCBub2RlIGZvdW5kIVxuIik7Ci0gICAgICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICAgICAgZ290byBqZmZzX2dhcmJhZ2VfY29sbGVjdF9uZXh0X2VuZDsKLQkJCi0KLQl9KTsKLQotCS8qIEZpbmQgaXRzIGNvcnJlc3BvbmRpbmcgZmlsZSB0b28uICAqLwotCWYgPSBqZmZzX2ZpbmRfZmlsZShjLCBub2RlLT5pbm8pOwotCi0JaWYgKCFmKSB7Ci0JICBwcmludGsgKEtFUk5fRVJSICJKRkZTOiBqZmZzX2dhcmJhZ2VfY29sbGVjdF9uZXh0OiAiCi0gICAgICAgICAgICAgICAgICAiTm8gZmlsZSB0byBnYXJiYWdlIGNvbGxlY3QhICIKLQkJICAiKGlubyA9IDB4JTA4eClcbiIsIG5vZGUtPmlubyk7Ci0gICAgICAgICAgLyogRklYTUU6IEZyZWUgdGhlIG9mZmVuZGluZyBub2RlIGFuZCByZWNvdmVyLiAqLwotICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgIGdvdG8gamZmc19nYXJiYWdlX2NvbGxlY3RfbmV4dF9lbmQ7Ci0JfQotCi0JLyogV2UgYWx3YXlzIHdyaXRlIG91dCB0aGUgbmFtZS4gVGhlb3JldGljYWxseSwgd2UgZG9uJ3QgbmVlZAotCSAgIHRvLCBidXQgZm9yIG5vdyBpdCdzIGVhc2llciAtIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlJ2QgaGF2ZQotCSAgIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgdGltZXMgdGhlIGN1cnJlbnQgbmFtZSBleGlzdHMgb24KLQkgICB0aGUgZmxhc2ggYW5kIG1ha2Ugc3VyZSBpdCBuZXZlciByZWFjaGVzIHplcm8uCi0KLQkgICBUaGUgY3VycmVudCBhcHByb2FjaCBtZWFucyB0aGF0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGNhdXNlCi0JICAgdGhlIEdDIHRvIGVuZCB1cCBlYXRpbmcgaXRzIHRhaWwgYnkgd3JpdGluZyBsb3RzIG9mIG5vZGVzCi0JICAgd2l0aCBubyBuYW1lIGZvciBpdCB0byBnYXJiYWdlLWNvbGxlY3QuIEhlbmNlIHRoZSBjaGFuZ2UgaW4KLQkgICBpbm9kZS5jIHRvIHdyaXRlIG5hbWVzIHdpdGggX2V2ZXJ5XyBub2RlLgotCi0JICAgSXQgc3Vja3MsIGJ1dCBpdCBfc2hvdWxkXyB3b3JrLgotCSovCi0JdG90YWxfbmFtZV9zaXplID0gSkZGU19QQUQoZi0+bnNpemUpOwotCi0JRDEocHJpbnRrKCJqZmZzX2dhcmJhZ2VfY29sbGVjdF9uZXh0KCk6IFwiJXNcIiwgIgotCQkgICJpbm86ICV1LCB2ZXJzaW9uOiAldSwgbG9jYXRpb24gMHgleCwgZHNpemUgJXVcbiIsCi0JCSAgKGYtPm5hbWUgPyBmLT5uYW1lIDogIiIpLCBub2RlLT5pbm8sIG5vZGUtPnZlcnNpb24sIAotCQkgIG5vZGUtPmZtLT5vZmZzZXQsIG5vZGUtPmRhdGFfc2l6ZSkpOwotCi0JLyogQ29tcHV0ZSBob3cgbWFueSBkYXRhIGl0J3MgcG9zc2libGUgdG8gcmV3cml0ZSBhdCB0aGUgbW9tZW50LiAgKi8KLQlkYXRhX3NpemUgPSBmLT5zaXplIC0gbm9kZS0+ZGF0YV9vZmZzZXQ7Ci0KLQkvKiBBbmQgZnJvbSB0aGF0LCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgY2h1bmsgd2Ugd2FudCB0byB3cml0ZSAqLwotCXNpemUgPSBzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKSArIHRvdGFsX25hbWVfc2l6ZQotCSAgICAgICArIGRhdGFfc2l6ZSArIEpGRlNfR0VUX1BBRF9CWVRFUyhkYXRhX3NpemUpOwotCi0JLyogSWYgdGhhdCdzIG1vcmUgdGhhbiBtYXhfY2h1bmtfc2l6ZSwgcmVkdWNlIGl0IGFjY29yZGluZ2x5ICovCi0JaWYgKHNpemUgPiBmbWMtPm1heF9jaHVua19zaXplKSB7Ci0JCXNpemUgPSBmbWMtPm1heF9jaHVua19zaXplOwotCQlkYXRhX3NpemUgPSBzaXplIC0gc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSkKLQkJCSAgICAtIHRvdGFsX25hbWVfc2l6ZTsKLQl9Ci0KLQkvKiBJZiB3ZSdyZSBhc2tpbmcgdG8gdGFrZSB1cCBtb3JlIHNwYWNlIHRoYW4gZnJlZV9jaHVua19zaXplMQotCSAgIGJ1dCB3ZSBfY291bGRfIGZpdCBpbiBpdCwgc2hyaW5rIGFjY29yZGluZ2x5LgotCSovCi0JaWYgKHNpemUgPiBmcmVlX2NodW5rX3NpemUxKSB7Ci0KLQkJaWYgKGZyZWVfY2h1bmtfc2l6ZTEgPAotCQkgICAgKHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpICsgdG90YWxfbmFtZV9zaXplICsgQkxPQ0tfU0laRSkpewotCQkJLyogVGhlIHNwYWNlIGxlZnQgaXMgdG9vIHNtYWxsIHRvIGJlIG9mIGFueQotCQkJICAgdXNlIHJlYWxseS4gICovCi0JCQlzdHJ1Y3QgamZmc19mbSAqZGlydHlfZm0KLQkJCT0gamZmc19mbWFsbG9jZWQoZm1jLAotCQkJCQkgZm1jLT50YWlsLT5vZmZzZXQgKyBmbWMtPnRhaWwtPnNpemUsCi0JCQkJCSBmcmVlX2NodW5rX3NpemUxLCBOVUxMKTsKLQkJCWlmICghZGlydHlfZm0pIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIkpGRlM6ICIKLQkJCQkgICAgICAgImpmZnNfZ2FyYmFnZV9jb2xsZWN0X25leHQ6ICIKLQkJCQkgICAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBgZGlydHknICIKLQkJCQkgICAgICAgImZsYXNoIG1lbW9yeSFcbiIpOwotCQkJCWVyciA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGpmZnNfZ2FyYmFnZV9jb2xsZWN0X25leHRfZW5kOwotCQkJfQotCQkJRDEocHJpbnRrKCJEaXJ0eWluZyBlbmQgb2YgZmxhc2ggLSB0b28gc21hbGxcbiIpKTsKLQkJCWpmZnNfd3JpdGVfZHVtbXlfbm9kZShjLCBkaXJ0eV9mbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAwOwotCQkJZ290byBqZmZzX2dhcmJhZ2VfY29sbGVjdF9uZXh0X2VuZDsKLQkJfQotCQlEMShwcmludGsoIlJlZHVjaW5nIHNpemUgb2YgbmV3IG5vZGUgZnJvbSAlZCB0byAlZCB0byBhdm9pZCAiCi0JCQkgICIgZXhjZWVkaW5nIGZyZWVfY2h1bmtfc2l6ZTFcbiIsCi0JCQkgIHNpemUsIGZyZWVfY2h1bmtfc2l6ZTEpKTsKLQotCQlzaXplID0gZnJlZV9jaHVua19zaXplMTsKLQkJZGF0YV9zaXplID0gc2l6ZSAtIHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpCi0JCQkgICAgLSB0b3RhbF9uYW1lX3NpemU7Ci0JfQotCi0KLQkvKiBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgdG8gaG9sZCB0aGUgbm9kZXMKLQkgICB3aGljaCBhcmUgcmVtYWluaW5nIGluIHRoZSB0YWlsICovCi0Jc3BhY2VfbmVlZGVkID0gZm1jLT5taW5fZnJlZV9zaXplIC0gKG5vZGUtPmZtLT5vZmZzZXQgJSBmbWMtPnNlY3Rvcl9zaXplKTsKLQotCS8qIEZyb20gdGhhdCwgY2FsY3VsYXRlIGhvdyBtdWNoICdleHRyYScgc3BhY2Ugd2UgY2FuIHVzZSB0bwotCSAgIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBub2RlIHdlJ3JlIHdyaXRpbmcgZnJvbSB0aGUgc2l6ZQotCSAgIG9mIHRoZSBub2RlIHdlJ3JlIG9ic29sZXRpbmcKLQkqLwotCWlmIChzcGFjZV9uZWVkZWQgPiBmbWMtPmZyZWVfc2l6ZSkgewotCQkvKiBJZiB3ZSd2ZSBnb25lIGJlbG93IG1pbl9mcmVlX3NpemUgZm9yIHNvbWUgcmVhc29uLAotCQkgICBkb24ndCBmdWNrIHVwLiBUaGlzIGlzIHdoeSB3ZSBoYXZlIAotCQkgICBtaW5fZnJlZV9zaXplID4gc2VjdG9yX3NpemUuIFdoaW5nZSBhYm91dCBpdCB0aG91Z2gsCi0JCSAgIGp1c3Qgc28gSSBjYW4gY29udmluY2UgbXlzZWxmIG15IG1hdGhzIGlzIHJpZ2h0LgotCQkqLwotCQlEMShwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzX2dhcmJhZ2VfY29sbGVjdF9uZXh0KCk6ICIKLQkJCSAgInNwYWNlX25lZWRlZCAlZCBleGNlZWRlZCBmcmVlX3NpemUgJWRcbiIsCi0JCQkgIHNwYWNlX25lZWRlZCwgZm1jLT5mcmVlX3NpemUpKTsKLQkJZXh0cmFfYXZhaWxhYmxlID0gMDsKLQl9IGVsc2UgewotCQlleHRyYV9hdmFpbGFibGUgPSBmbWMtPmZyZWVfc2l6ZSAtIHNwYWNlX25lZWRlZDsKLQl9Ci0KLQkvKiBDaGVjayB0aGF0IHdlIGRvbid0IHVzZSB1cCBhbnkgbW9yZSAnZXh0cmEnIHNwYWNlIHRoYW4KLQkgICB3aGF0J3MgYXZhaWxhYmxlICovCi0JaWYgKHNpemUgPiBKRkZTX1BBRChub2RlLT5kYXRhX3NpemUpICsgdG90YWxfbmFtZV9zaXplICsgCi0JICAgIHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpICsgZXh0cmFfYXZhaWxhYmxlKSB7Ci0JCUQxKHByaW50aygiUmVkdWNpbmcgc2l6ZSBvZiBuZXcgbm9kZSBmcm9tICVkIHRvICVsZCB0byBhdm9pZCAiCi0JCSAgICAgICAiY2F0Y2hpbmcgb3VyIHRhaWxcbiIsIHNpemUsIAotCQkJICAobG9uZykgKEpGRlNfUEFEKG5vZGUtPmRhdGFfc2l6ZSkgKyBKRkZTX1BBRChub2RlLT5uYW1lX3NpemUpICsgCi0JCQkgIHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpICsgZXh0cmFfYXZhaWxhYmxlKSkpOwotCQlEMShwcmludGsoInNwYWNlX25lZWRlZCA9ICVkLCBleHRyYV9hdmFpbGFibGUgPSAlZFxuIiwgCi0JCQkgIHNwYWNlX25lZWRlZCwgZXh0cmFfYXZhaWxhYmxlKSk7Ci0KLQkJc2l6ZSA9IEpGRlNfUEFEKG5vZGUtPmRhdGFfc2l6ZSkgKyB0b3RhbF9uYW1lX3NpemUgKyAKLQkJICBzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKSArIGV4dHJhX2F2YWlsYWJsZTsKLQkJZGF0YV9zaXplID0gc2l6ZSAtIHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpCi0JCQktIHRvdGFsX25hbWVfc2l6ZTsKLQl9OwotCi0JRDIocHJpbnRrKCIgIHRvdGFsX25hbWVfc2l6ZTogJXVcbiIsIHRvdGFsX25hbWVfc2l6ZSkpOwotCUQyKHByaW50aygiICBkYXRhX3NpemU6ICV1XG4iLCBkYXRhX3NpemUpKTsKLQlEMihwcmludGsoIiAgc2l6ZTogJXVcbiIsIHNpemUpKTsKLQlEMihwcmludGsoIiAgZi0+bnNpemU6ICV1XG4iLCBmLT5uc2l6ZSkpOwotCUQyKHByaW50aygiICBmLT5zaXplOiAldVxuIiwgZi0+c2l6ZSkpOwotCUQyKHByaW50aygiICBub2RlLT5kYXRhX29mZnNldDogJXVcbiIsIG5vZGUtPmRhdGFfb2Zmc2V0KSk7Ci0JRDIocHJpbnRrKCIgIGZyZWVfY2h1bmtfc2l6ZTE6ICV1XG4iLCBmcmVlX2NodW5rX3NpemUxKSk7Ci0JRDIocHJpbnRrKCIgIGZyZWVfY2h1bmtfc2l6ZTI6ICV1XG4iLCBmcmVlX2NodW5rX3NpemUyKSk7Ci0JRDIocHJpbnRrKCIgIG5vZGUtPmZtLT5vZmZzZXQ6IDB4JTA4eFxuIiwgbm9kZS0+Zm0tPm9mZnNldCkpOwotCi0JaWYgKChlcnIgPSBqZmZzX3Jld3JpdGVfZGF0YShmLCBub2RlLCBkYXRhX3NpemUpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzX3Jld3JpdGVfZGF0YSgpIGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCSAgCi1qZmZzX2dhcmJhZ2VfY29sbGVjdF9uZXh0X2VuZDoKLQlEMyhwcmludGsoImpmZnNfZ2FyYmFnZV9jb2xsZWN0X25leHQ6IExlYXZpbmcuLi5cbiIpKTsKLQlyZXR1cm4gZXJyOwotfSAvKiBqZmZzX2dhcmJhZ2VfY29sbGVjdF9uZXh0ICovCi0KLQotLyogSWYgYW4gb2Jzb2xldGUgbm9kZSBpcyBwYXJ0bHkgZ29pbmcgdG8gYmUgZXJhc2VkIGR1ZSB0byBnYXJiYWdlCi0gICBjb2xsZWN0aW9uLCB0aGUgcGFydCB0aGF0IGlzbid0IGdvaW5nIHRvIGJlIGVyYXNlZCBtdXN0IGJlIGZpbGxlZAotICAgd2l0aCB6ZXJvZXMgc28gdGhhdCB0aGUgc2NhbiBvZiB0aGUgZmxhc2ggd2lsbCB3b3JrIHNtb290aGx5IG5leHQKLSAgIHRpbWUuICAoVGhlIGRhdGEgaW4gdGhlIGZpbGUgY291bGQgZm9yIGluc3RhbmNlIGJlIGEgSkZGUyBpbWFnZQotICAgd2hpY2ggY291bGQgY2F1c2UgZW5vcm1vdXMgY29uZnVzaW9uIGR1cmluZyBhIHNjYW4gb2YgdGhlIGZsYXNoCi0gICBkZXZpY2UgaWYgd2UgZGlkbid0IGRvIHRoaXMuKQotICAgICBUaGVyZSBhcmUgdHdvIHBoYXNlcyBpbiB0aGlzIHByb2NlZHVyZTogRmlyc3QsIHRoZSBjbGVhcmluZyBvZgotICAgdGhlIG5hbWUgYW5kIGRhdGEgcGFydHMgb2YgdGhlIG5vZGUuIFNlY29uZCwgcG9zc2libHkgYWxzbyBjbGVhcmluZwotICAgYSBwYXJ0IG9mIHRoZSByYXcgaW5vZGUgYXMgd2VsbC4gIElmIHRoZSBib3ggaXMgcG93ZXIgY3ljbGVkIGR1cmluZwotICAgdGhlIGZpcnN0IHBoYXNlLCBvbmx5IHRoZSBjaGVja3N1bSBvZiB0aGlzIG5vZGUtdG8tYmUtY2xlYXJlZC1hdC0KLSAgIHRoZS1lbmQgd2lsbCBiZSB3cm9uZy4gIElmIHRoZSBib3ggaXMgcG93ZXIgY3ljbGVkIGR1cmluZywgb3IgYWZ0ZXIsCi0gICB0aGUgY2xlYXJpbmcgb2YgdGhlIHJhdyBpbm9kZSwgdGhlIGluZm9ybWF0aW9uIGxpa2UgdGhlIGxlbmd0aCBvZgotICAgdGhlIG5hbWUgYW5kIGRhdGEgcGFydHMgYXJlIHplcm9lZC4gIFRoZSBuZXh0IHRpbWUgdGhlIGJveCBpcwotICAgcG93ZXJlZCB1cCwgdGhlIHNjYW5uaW5nIGFsZ29yaXRobSBtYW5hZ2VzIHRoaXMgZmF1bHR5IGRhdGEgdG9vCi0gICBiZWNhdXNlOgotCi0gICAtIFRoZSBjaGVja3N1bSBpcyBpbnZhbGlkIGFuZCB0aHVzIHRoZSByYXcgaW5vZGUgbXVzdCBiZSBkaXNjYXJkZWQKLSAgICAgaW4gYW55IGNhc2UuCi0gICAtIElmIHRoZSBsZW5ndGhzIG9mIHRoZSBkYXRhIHBhcnQgb3IgdGhlIG5hbWUgcGFydCBhcmUgemVyb2VkLCB0aGUKLSAgICAgc2Nhbm5pbmcganVzdCBjb250aW51ZXMgYWZ0ZXIgdGhlIHJhdyBpbm9kZS4gIEJ1dCBhZnRlciB0aGUgaW5vZGUKLSAgICAgdGhlIHNjYW5uaW5nIHByb2NlZHVyZSBqdXN0IGZpbmRzIHplcm9lcyB3aGljaCBpcyB0aGUgc2FtZSBhcwotICAgICBkaXJ0LgotCi0gICBTbywgaW4gdGhlIGVuZCwgdGhpcyBjb3VsZCBuZXZlciBmYWlsLiA6LSkgIEV2ZW4gaWYgaXQgZG9lcyBmYWlsLAotICAgdGhlIHNjYW5uaW5nIGFsZ29yaXRobSBzaG91bGQgbWFuYWdlIHRoYXQgdG9vLiAgKi8KLQotc3RhdGljIGludAotamZmc19jbGVhcl9lbmRfb2Zfbm9kZShzdHJ1Y3QgamZmc19jb250cm9sICpjLCBfX3UzMiBlcmFzZV9zaXplKQotewotCXN0cnVjdCBqZmZzX2ZtICpmbTsKLQlzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYyA9IGMtPmZtYzsKLQlfX3UzMiB6ZXJvX29mZnNldDsKLQlfX3UzMiB6ZXJvX3NpemU7Ci0JX191MzIgemVyb19vZmZzZXRfZGF0YTsKLQlfX3UzMiB6ZXJvX3NpemVfZGF0YTsKLQlfX3UzMiBjdXR0aW5nX3Jhd19pbm9kZSA9IDA7Ci0KLQlpZiAoIShmbSA9IGpmZnNfY3V0X25vZGUoZm1jLCBlcmFzZV9zaXplKSkpIHsKLQkJRDMocHJpbnRrKCJqZmZzX2NsZWFyX2VuZF9vZl9ub2RlKCk6IGZtID09IE5VTExcbiIpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogV2hlcmUgYW5kIGhvdyBtdWNoIHNoYWxsIHdlIGNsZWFyPyAgKi8KLQl6ZXJvX29mZnNldCA9IGZtYy0+aGVhZC0+b2Zmc2V0ICsgZXJhc2Vfc2l6ZTsKLQl6ZXJvX3NpemUgPSBmbS0+b2Zmc2V0ICsgZm0tPnNpemUgLSB6ZXJvX29mZnNldDsKLQotCS8qIERvIHdlIGhhdmUgdG8gY2xlYXIgdGhlIHJhd19pbm9kZSBleHBsaWNpdGx5PyAgKi8KLQlpZiAoZm0tPnNpemUgLSB6ZXJvX3NpemUgPCBzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKSkgewotCQljdXR0aW5nX3Jhd19pbm9kZSA9IHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpCi0JCQkJICAgIC0gKGZtLT5zaXplIC0gemVyb19zaXplKTsKLQl9Ci0KLQkvKiBGaXJzdCwgY2xlYXIgdGhlIG5hbWUgYW5kIGRhdGEgZmllbGRzLiAgKi8KLQl6ZXJvX29mZnNldF9kYXRhID0gemVyb19vZmZzZXQgKyBjdXR0aW5nX3Jhd19pbm9kZTsKLQl6ZXJvX3NpemVfZGF0YSA9IHplcm9fc2l6ZSAtIGN1dHRpbmdfcmF3X2lub2RlOwotCWZsYXNoX3NhZmVfYWNxdWlyZShmbWMtPm10ZCk7Ci0JZmxhc2hfbWVtc2V0KGZtYy0+bXRkLCB6ZXJvX29mZnNldF9kYXRhLCAwLCB6ZXJvX3NpemVfZGF0YSk7Ci0JZmxhc2hfc2FmZV9yZWxlYXNlKGZtYy0+bXRkKTsKLQotCS8qIFNob3VsZCB3ZSBjbGVhciBhIHBhcnQgb2YgdGhlIHJhdyBpbm9kZT8gICovCi0JaWYgKGN1dHRpbmdfcmF3X2lub2RlKSB7Ci0JCS8qIEkgZ3Vlc3MgaXQgaXMgb2sgdG8gY2xlYXIgdGhlIHJhdyBpbm9kZSBpbiB0aGlzIG9yZGVyLiAgKi8KLQkJZmxhc2hfc2FmZV9hY3F1aXJlKGZtYy0+bXRkKTsKLQkJZmxhc2hfbWVtc2V0KGZtYy0+bXRkLCB6ZXJvX29mZnNldCwgMCwKLQkJCSAgICAgY3V0dGluZ19yYXdfaW5vZGUpOwotCQlmbGFzaF9zYWZlX3JlbGVhc2UoZm1jLT5tdGQpOwotCX0KLQotCXJldHVybiAwOwotfSAvKiBqZmZzX2NsZWFyX2VuZF9vZl9ub2RlKCkgICovCi0KLS8qIFRyeSB0byBlcmFzZSBhcyBtdWNoIGFzIHBvc3NpYmxlIG9mIHRoZSBkaXJ0IGluIHRoZSBmbGFzaCBtZW1vcnkuICAqLwotc3RhdGljIGxvbmcKLWpmZnNfdHJ5X3RvX2VyYXNlKHN0cnVjdCBqZmZzX2NvbnRyb2wgKmMpCi17Ci0Jc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMgPSBjLT5mbWM7Ci0JbG9uZyBlcmFzZV9zaXplOwotCWludCBlcnI7Ci0JX191MzIgb2Zmc2V0OwotCi0JRDMocHJpbnRrKCJqZmZzX3RyeV90b19lcmFzZSgpXG4iKSk7Ci0KLQllcmFzZV9zaXplID0gamZmc19lcmFzYWJsZV9zaXplKGZtYyk7Ci0KLQlEMihwcmludGsoImpmZnNfdHJ5X3RvX2VyYXNlKCk6IGVyYXNlX3NpemUgPSAlbGRcbiIsIGVyYXNlX3NpemUpKTsKLQotCWlmIChlcmFzZV9zaXplID09IDApIHsKLQkJcmV0dXJuIDA7Ci0JfQotCWVsc2UgaWYgKGVyYXNlX3NpemUgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSkZGUzogamZmc190cnlfdG9fZXJhc2U6ICIKLQkJICAgICAgICJqZmZzX2VyYXNhYmxlX3NpemUgcmV0dXJuZWQgJWxkLlxuIiwgZXJhc2Vfc2l6ZSk7Ci0JCXJldHVybiBlcmFzZV9zaXplOwotCX0KLQotCWlmICgoZXJyID0gamZmc19jbGVhcl9lbmRfb2Zfbm9kZShjLCBlcmFzZV9zaXplKSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSkZGUzogamZmc190cnlfdG9fZXJhc2U6ICIKLQkJICAgICAgICJDbGVhcmluZyBvZiBub2RlIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCW9mZnNldCA9IGZtYy0+aGVhZC0+b2Zmc2V0OwotCi0JLyogTm93LCBsZXQncyB0cnkgdG8gZG8gdGhlIGVyYXNlLiAgKi8KLQlpZiAoKGVyciA9IGZsYXNoX2VyYXNlX3JlZ2lvbihmbWMtPm10ZCwKLQkJCQkgICAgICBvZmZzZXQsIGVyYXNlX3NpemUpKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJKRkZTOiBFcmFzZSBvZiBmbGFzaCBmYWlsZWQuICIKLQkJICAgICAgICJvZmZzZXQgPSAldSwgZXJhc2Vfc2l6ZSA9ICVsZFxuIiwKLQkJICAgICAgIG9mZnNldCwgZXJhc2Vfc2l6ZSk7Ci0JCS8qIFhYWDogSGVyZSB3ZSBzaG91bGQgYWxsb2NhdGUgdGhpcyBhcmVhIGFzIGRpcnR5Ci0JCSAgIHdpdGggamZmc19mbWFsbG9jZWQgb3Igc29tZXRoaW5nIHNpbWlsYXIuICBOb3cKLQkJICAgd2UganVzdCByZXBvcnQgdGhlIGVycm9yLiAgKi8KLQkJcmV0dXJuIGVycjsKLQl9Ci0KLSNpZiAwCi0JLyogQ2hlY2sgaWYgdGhlIGVyYXNlZCBzZWN0b3JzIHJlYWxseSBnb3QgZXJhc2VkLiAgKi8KLQl7Ci0JCV9fdTMyIHBvczsKLQkJX191MzIgZW5kOwotCi0JCXBvcyA9IChfX3UzMilmbGFzaF9nZXRfZGlyZWN0X3BvaW50ZXIodG9fa2Rldl90KGMtPnNiLT5zX2RldiksIG9mZnNldCk7Ci0JCWVuZCA9IHBvcyArIGVyYXNlX3NpemU7Ci0KLQkJRDIocHJpbnRrKCJKRkZTOiBDaGVja2luZyBlcmFzZWQgc2VjdG9yKHMpLi4uXG4iKSk7Ci0KLQkJZmxhc2hfc2FmZV9hY3F1aXJlKGZtYy0+bXRkKTsKLQotCQlmb3IgKDsgcG9zIDwgZW5kOyBwb3MgKz0gNCkgewotCQkJaWYgKCooX191MzIgKilwb3MgIT0gSkZGU19FTVBUWV9CSVRNQVNLKSB7Ci0JCQkJcHJpbnRrKCJKRkZTOiBFcmFzZSBmYWlsZWQhIHBvcyA9IDB4JWx4XG4iLAotCQkJCSAgICAgICAobG9uZylwb3MpOwotCQkJCWpmZnNfaGV4ZHVtcChmbWMtPm10ZCwgcG9zLAotCQkJCQkgICAgIGpmZnNfbWluKDI1NiwgZW5kIC0gcG9zKSk7Ci0JCQkJZXJyID0gLTE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlmbGFzaF9zYWZlX3JlbGVhc2UoZm1jLT5tdGQpOwotCi0JCWlmICghZXJyKSB7Ci0JCQlEMihwcmludGsoIkpGRlM6IEVyYXNlIHN1Y2NlZWRlZC5cbiIpKTsKLQkJfQotCQllbHNlIHsKLQkJCS8qIFhYWDogSGVyZSB3ZSBzaG91bGQgYWxsb2NhdGUgdGhlIG1lbW9yeQotCQkJICAgd2l0aCBqZmZzX2ZtYWxsb2NlZCgpIGluIG9yZGVyIHRvIHByZXZlbnQKLQkJCSAgIEpGRlMgZnJvbSB1c2luZyB0aGlzIGFyZWEgYWNjaWRlbnRhbGx5LiAgKi8KLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCS8qIFVwZGF0ZSB0aGUgZmxhc2ggbWVtb3J5IGRhdGEgc3RydWN0dXJlcy4gICovCi0JamZmc19zeW5jX2VyYXNlKGZtYywgZXJhc2Vfc2l6ZSk7Ci0KLQlyZXR1cm4gZXJhc2Vfc2l6ZTsKLX0KLQotCi0vKiBUaGVyZSBhcmUgZGlmZmVyZW50IGNyaXRlcmlhIHRoYXQgc2hvdWxkIHRyaWdnZXIgYSBnYXJiYWdlIGNvbGxlY3Q6Ci0KLSAgIDEuIFRoZXJlIGlzIHRvbyBtdWNoIGRpcnQgaW4gdGhlIG1lbW9yeS4KLSAgIDIuIFRoZSBmcmVlIHNwYWNlIGlzIGJlY29taW5nIHNtYWxsLgotICAgMy4gVGhlcmUgYXJlIG1hbnkgdmVyc2lvbnMgb2YgYSBub2RlLgotCi0gICBUaGUgZ2FyYmFnZSBjb2xsZWN0IHNob3VsZCBhbHdheXMgYmUgZG9uZSBpbiBhIG1hbm5lciB0aGF0IGd1YXJhbnRlZXMKLSAgIHRoYXQgZnV0dXJlIGdhcmJhZ2UgY29sbGVjdHMgY2Fubm90IGJlIGxvY2tlZC4gIEUuZy4gUmV3cml0dGVuIGNodW5rcwotICAgc2hvdWxkIG5vdCBiZSB0b28gbGFyZ2UgKHNwYW4gbW9yZSB0aGFuIG9uZSBzZWN0b3IgaW4gdGhlIGZsYXNoIG1lbW9yeQotICAgZm9yIGV4ZW1wbGUpLiAgT2YgY291cnNlIHRoZXJlIGlzIGEgbGltaXQgb24gaG93IGludGVsbGlnZW50IHRoaXMgZ2FyYmFnZQotICAgY29sbGVjdGlvbiBjYW4gYmUuICAqLwotCi0KLXN0YXRpYyBpbnQKLWpmZnNfZ2FyYmFnZV9jb2xsZWN0X25vdyhzdHJ1Y3QgamZmc19jb250cm9sICpjKQotewotCXN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jID0gYy0+Zm1jOwotCWxvbmcgZXJhc2VkID0gMDsKLQlpbnQgcmVzdWx0ID0gMDsKLQlEMShpbnQgaSA9IDEpOwotCUQyKHByaW50aygiKioqamZmc19nYXJiYWdlX2NvbGxlY3Rfbm93KCk6IGZtYy0+ZGlydHlfc2l6ZSA9ICV1LCBmbWMtPmZyZWVfc2l6ZSA9IDB4JXhcbiwgZmNzMT0weCV4LCBmY3MyPTB4JXgiLAotCQkgIGZtYy0+ZGlydHlfc2l6ZSwgZm1jLT5mcmVlX3NpemUsIGpmZnNfZnJlZV9zaXplMShmbWMpLCBqZmZzX2ZyZWVfc2l6ZTIoZm1jKSkpOwotCUQyKGpmZnNfcHJpbnRfZm1jb250cm9sKGZtYykpOwotCi0JLy8JZG93bigmZm1jLT5nY2xvY2spOwotCi0JLyogSWYgaXQgaXMgcG9zc2libGUgdG8gZ2FyYmFnZSBjb2xsZWN0LCBkbyBzby4gICovCi0JCi0Jd2hpbGUgKGVyYXNlZCA9PSAwKSB7Ci0JCUQxKHByaW50aygiKioqamZmc19nYXJiYWdlX2NvbGxlY3Rfbm93KCk6IHJvdW5kICMldSwgIgotCQkJICAiZm1jLT5kaXJ0eV9zaXplID0gJXVcbiIsIGkrKywgZm1jLT5kaXJ0eV9zaXplKSk7Ci0JCUQyKGpmZnNfcHJpbnRfZm1jb250cm9sKGZtYykpOwotCi0JCWlmICgoZXJhc2VkID0gamZmc190cnlfdG9fZXJhc2UoYykpIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSkZGUzogRXJyb3IgaW4gIgotCQkJICAgICAgICJnYXJiYWdlIGNvbGxlY3Rvci5cbiIpOwotCQkJcmVzdWx0ID0gZXJhc2VkOwotCQkJZ290byBnY19lbmQ7Ci0JCX0KLQkJaWYgKGVyYXNlZCkKLQkJCWJyZWFrOwotCQkKLQkJaWYgKGZtYy0+ZnJlZV9zaXplID09IDApIHsKLQkJCS8qIEFyZ2ggKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiamZmc19nYXJiYWdlX2NvbGxlY3Rfbm93KCk6IGZyZWVfc2l6ZSA9PSAwLiBUaGlzIGlzIEJBRC5cbiIpOwotCQkJcmVzdWx0ID0gLUVOT1NQQzsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGZtYy0+ZGlydHlfc2l6ZSA8IGZtYy0+c2VjdG9yX3NpemUpIHsKLQkJCS8qIEFjdHVhbGx5LCB3ZSBfbWF5XyBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUsIAotCQkJICogaWYgdGhlcmUgYXJlIG1hbnkgb3ZlcmxhcHBpbmcgbm9kZXMgd2hpY2ggYXJlbid0Ci0JCQkgKiBhY3R1YWxseSBtYXJrZWQgZGlydHkgYmVjYXVzZSB0aGV5IHN0aWxsIGhhdmUKLQkJCSAqIHNvbWUgdmFsaWQgZGF0YSBpbiBlYWNoLgotCQkJICovCi0JCQlyZXN1bHQgPSAtRU5PU1BDOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBMZXQncyBkYXJlIHRvIG1ha2UgYSBnYXJiYWdlIGNvbGxlY3QuICAqLwotCQlpZiAoKHJlc3VsdCA9IGpmZnNfZ2FyYmFnZV9jb2xsZWN0X25leHQoYykpIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJKRkZTOiBTb21ldGhpbmcgIgotCQkJICAgICAgICJoYXMgZ29uZSBzZXJpb3VzbHkgd3JvbmcgIgotCQkJICAgICAgICJ3aXRoIGEgZ2FyYmFnZSBjb2xsZWN0LlxuIik7Ci0JCQlnb3RvIGdjX2VuZDsKLQkJfQotCi0JCUQxKHByaW50aygiICAgamZmc19nYXJiYWdlX2NvbGxlY3Rfbm93KCk6IGVyYXNlZDogJWxkXG4iLCBlcmFzZWQpKTsKLQkJREpNKGpmZnNfcHJpbnRfbWVtb3J5X2FsbG9jYXRpb25fc3RhdGlzdGljcygpKTsKLQl9Ci0JCi1nY19lbmQ6Ci0JLy8JdXAoJmZtYy0+Z2Nsb2NrKTsKLQotCUQzKHByaW50aygiICAgamZmc19nYXJiYWdlX2NvbGxlY3Rfbm93KCk6IExlYXZpbmcuLi5cbiIpKTsKLQlEMShpZiAoZXJhc2VkKSB7Ci0JCXByaW50aygiamZmc19nX2Nfbm93KCk6IGVyYXNlZCA9ICVsZFxuIiwgZXJhc2VkKTsKLQkJamZmc19wcmludF9mbWNvbnRyb2woZm1jKTsKLQl9KTsKLQotCWlmICghZXJhc2VkICYmICFyZXN1bHQpCi0JCXJldHVybiAtRU5PU1BDOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0gLyogamZmc19nYXJiYWdlX2NvbGxlY3Rfbm93KCkgKi8KLQotCi0vKiBEZXRlcm1pbmUgaWYgaXQgaXMgcmVhc29uYWJsZSB0byBzdGFydCBnYXJiYWdlIGNvbGxlY3Rpb24uCi0gICBXZSBzdGFydCBhIGdjIHBhc3MgaWYgZWl0aGVyOgotICAgLSBUaGUgbnVtYmVyIG9mIGZyZWUgYnl0ZXMgPCBNSU5fRlJFRV9CWVRFUyAmJiBhdCBsZWFzdCBvbmUKLSAgICAgYmxvY2sgaXMgZGlydHksIE9SCi0gICAtIFRoZSBudW1iZXIgb2YgZGlydHkgYnl0ZXMgPiBNQVhfRElSVFlfQllURVMKLSovCi1zdGF0aWMgaW5saW5lIGludCB0aHJlYWRfc2hvdWxkX3dha2UgKHN0cnVjdCBqZmZzX2NvbnRyb2wgKmMpCi17Ci0JRDEocHJpbnRrIChLRVJOX05PVElDRSAidGhyZWFkX3Nob3VsZF93YWtlKCk6IGZyZWU9JWQsIGRpcnR5PSVkLCBibG9ja3NpemU9JWQuXG4iLAotCQkgICBjLT5mbWMtPmZyZWVfc2l6ZSwgYy0+Zm1jLT5kaXJ0eV9zaXplLCBjLT5mbWMtPnNlY3Rvcl9zaXplKSk7Ci0KLQkvKiBJZiB0aGVyZSdzIG5vdCBlbm91Z2ggZGlydHkgc3BhY2UgdG8gZnJlZSBhIGJsb2NrLCB0aGVyZSdzIG5vIHBvaW50LiAqLwotCWlmIChjLT5mbWMtPmRpcnR5X3NpemUgPCBjLT5mbWMtPnNlY3Rvcl9zaXplKSB7Ci0JCUQyKHByaW50ayhLRVJOX05PVElDRSAidGhyZWFkX3Nob3VsZF93YWtlKCk6IE5vdCB3YWtpbmcuIEluc3VmZmljaWVudCBkaXJ0eSBzcGFjZVxuIikpOwotCQlyZXR1cm4gMDsKLQl9Ci0jaWYgMQotCS8qIElmIHRoZXJlIGlzIHRvbyBtdWNoIFJBTSB1c2VkIGJ5IHRoZSB2YXJpb3VzIHN0cnVjdHVyZXMsIEdDICovCi0JaWYgKGpmZnNfZ2V0X25vZGVfaW51c2UoKSA+IChjLT5mbWMtPnVzZWRfc2l6ZS9jLT5mbWMtPm1heF9jaHVua19zaXplICogNSArIGpmZnNfZ2V0X2ZpbGVfY291bnQoKSAqIDIgKyA1MCkpIHsKLQkJLyogRklYTUU6IFByb3ZpZGUgcHJvb2YgdGhhdCB0aGlzIHRlc3QgY2FuIGJlIHNhdGlzZmllZC4gV2UKLQkJICAgZG9uJ3Qgd2FudCBhIGZpbGVzeXN0ZW0gZG9pbmcgZW5kbGVzcyBHQyBqdXN0IGJlY2F1c2UgdGhpcwotCQkgICBjb25kaXRpb24gY2Fubm90IGV2ZXIgYmUgZmFsc2UuCi0JCSovCi0JCUQyKHByaW50ayhLRVJOX05PVElDRSAidGhyZWFkX3Nob3VsZF93YWtlKCk6IFdha2luZyBkdWUgdG8gbnVtYmVyIG9mIG5vZGVzXG4iKSk7Ci0JCXJldHVybiAxOwotCX0KLSNlbmRpZgotCS8qIElmIHRoZXJlIGFyZSBmZXdlciBmcmVlIGJ5dGVzIHRoYW4gdGhlIHRocmVzaG9sZCwgR0MgKi8KLQlpZiAoYy0+Zm1jLT5mcmVlX3NpemUgPCBjLT5nY19taW5mcmVlX3RocmVzaG9sZCkgewotCQlEMihwcmludGsoS0VSTl9OT1RJQ0UgInRocmVhZF9zaG91bGRfd2FrZSgpOiBXYWtpbmcgZHVlIHRvIGluc3VmZmljZW50IGZyZWUgc3BhY2VcbiIpKTsKLQkJcmV0dXJuIDE7Ci0JfQotCS8qIElmIHRoZXJlIGFyZSBtb3JlIGRpcnR5IGJ5dGVzIHRoYW4gdGhlIHRocmVzaG9sZCwgR0MgKi8KLQlpZiAoYy0+Zm1jLT5kaXJ0eV9zaXplID4gYy0+Z2NfbWF4ZGlydHlfdGhyZXNob2xkKSB7Ci0JCUQyKHByaW50ayhLRVJOX05PVElDRSAidGhyZWFkX3Nob3VsZF93YWtlKCk6IFdha2luZyBkdWUgdG8gZXhjZXNzaXZlIGRpcnR5IHNwYWNlXG4iKSk7Ci0JCXJldHVybiAxOwotCX0JCi0JLyogRklYTUU6IFdoYXQgYWJvdXQgdGhlICJUaGVyZSBhcmUgbWFueSB2ZXJzaW9ucyBvZiBhIG5vZGUiIGNvbmRpdGlvbj8gKi8KLQotCXJldHVybiAwOwotfQotCi0KLXZvaWQgamZmc19nYXJiYWdlX2NvbGxlY3RfdHJpZ2dlcihzdHJ1Y3QgamZmc19jb250cm9sICpjKQotewotCS8qIE5PVEU6IFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHRoZSBCS0wgaGVyZS4KLQkgKiBPdGhlcndpc2UsIHRoZSBnY190YXNrIGNvdWxkIGdvIGF3YXkgYmV0d2VlbiB0aGUgY2hlY2sKLQkgKiBhbmQgdGhlIHdha2VfdXBfcHJvY2VzcygpCi0JICovCi0JaWYgKGMtPmdjX3Rhc2sgJiYgdGhyZWFkX3Nob3VsZF93YWtlKGMpKQotCQlzZW5kX3NpZyhTSUdIVVAsIGMtPmdjX3Rhc2ssIDEpOwotfQotICAKLQotLyogS2VybmVsIHRocmVhZHMgIHRha2UgKHZvaWQgKikgYXMgYXJndW1lbnRzLiAgIFRodXMgd2UgcGFzcwotICAgdGhlIGpmZnNfY29udHJvbCBkYXRhIGFzIGEgKHZvaWQgKikgYW5kIHRoZW4gY2FzdCBpdC4gKi8KLWludAotamZmc19nYXJiYWdlX2NvbGxlY3RfdGhyZWFkKHZvaWQgKnB0cikKLXsKLSAgICAgICAgc3RydWN0IGpmZnNfY29udHJvbCAqYyA9IChzdHJ1Y3QgamZmc19jb250cm9sICopIHB0cjsKLQlzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYyA9IGMtPmZtYzsKLQlsb25nIGVyYXNlZDsKLQlpbnQgcmVzdWx0ID0gMDsKLQlEMShpbnQgaSA9IDEpOwotCi0JZGFlbW9uaXplKCJqZmZzX2djZCIpOwotCi0JYy0+Z2NfdGFzayA9IGN1cnJlbnQ7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCWluaXRfY29tcGxldGlvbigmYy0+Z2NfdGhyZWFkX2NvbXApOyAvKiBiYXJyaWVyICovIAotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXNpZ2luaXRzZXRpbnYgKCZjdXJyZW50LT5ibG9ja2VkLCBzaWdtYXNrKFNJR0hVUCkgfCBzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSB8IHNpZ21hc2soU0lHQ09OVCkpOwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCUQxKHByaW50ayAoS0VSTl9OT1RJQ0UgImpmZnNfZ2FyYmFnZV9jb2xsZWN0X3RocmVhZCgpOiBTdGFydGluZyBpbmZpbml0ZSBsb29wLlxuIikpOwotCi0JZm9yICg7OykgewotCi0JCS8qIFNlZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IGdjLiAgSWYgd2UgZG9uJ3QsIGdvIHRvIHNsZWVwLgotCQkgICAKLQkJICAgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBhIEJBRCBUSElORyh0bSkuICBJZiB3ZSB0cnkgCi0JCSAgIHRvIHVubW91bnQgdGhlIEZTLCB0aGUgdW5tb3VudCBvcGVyYXRpb24gd2lsbCBzbGVlcCB3YWl0aW5nCi0JCSAgIGZvciB0aGlzIHRocmVhZCB0byBleGl0LiAgV2UgbmVlZCB0byBhcnJhbmdlIHRvIHNlbmQgaXQgYQotCQkgICBzaWcgYmVmb3JlIHRoZSB1bW91bnQgcHJvY2VzcyBzbGVlcHMuCi0JCSovCi0KLQkJaWYgKCF0aHJlYWRfc2hvdWxkX3dha2UoYykpCi0JCQlzZXRfY3VycmVudF9zdGF0ZSAoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCi0JCXNjaGVkdWxlKCk7IC8qIFllcywgd2UgZG8gdGhpcyBldmVuIGlmIHdlIHdhbnQgdG8gZ28KLQkJCQkgICAgICAgb24gaW1tZWRpYXRlbHkgLSB3ZSdyZSBhIGxvdyBwcmlvcml0eSAKLQkJCQkgICAgICAgYmFja2dyb3VuZCB0YXNrLiAqLwotCi0JCS8qIFB1dF9zdXBlciB3aWxsIHNlbmQgYSBTSUdLSUxMIGFuZCB0aGVuIHdhaXQgb24gdGhlIHNlbS4gCi0JCSAqLwotCQl3aGlsZSAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXNpZ2luZm9fdCBpbmZvOwotCQkJdW5zaWduZWQgbG9uZyBzaWduciA9IDA7Ci0KLQkJCWlmICh0cnlfdG9fZnJlZXplKCkpCi0JCQkJY29udGludWU7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQkJc2lnbnIgPSBkZXF1ZXVlX3NpZ25hbChjdXJyZW50LCAmY3VycmVudC0+YmxvY2tlZCwgJmluZm8pOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCQkJc3dpdGNoKHNpZ25yKSB7Ci0JCQljYXNlIFNJR1NUT1A6Ci0JCQkJRDEocHJpbnRrKCJqZmZzX2dhcmJhZ2VfY29sbGVjdF90aHJlYWQoKTogU0lHU1RPUCByZWNlaXZlZC5cbiIpKTsKLQkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1NUT1BQRUQpOwotCQkJCXNjaGVkdWxlKCk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgU0lHS0lMTDoKLQkJCQlEMShwcmludGsoImpmZnNfZ2FyYmFnZV9jb2xsZWN0X3RocmVhZCgpOiBTSUdLSUxMIHJlY2VpdmVkLlxuIikpOwotCQkJCWMtPmdjX3Rhc2sgPSBOVUxMOwotCQkJCWNvbXBsZXRlX2FuZF9leGl0KCZjLT5nY190aHJlYWRfY29tcCwgMCk7Ci0JCQl9Ci0JCX0KLQotCi0JCUQxKHByaW50ayAoS0VSTl9OT1RJQ0UgImpmZnNfZ2FyYmFnZV9jb2xsZWN0X3RocmVhZCgpOiBjb2xsZWN0aW5nLlxuIikpOwotCi0JCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImdfY190aHJlYWQoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JCW11dGV4X2xvY2soJmZtYy0+YmlnbG9jayk7Ci0JCQotCQlEMShwcmludGsoIioqKmpmZnNfZ2FyYmFnZV9jb2xsZWN0X3RocmVhZCgpOiByb3VuZCAjJXUsICIKLQkJCSAgImZtYy0+ZGlydHlfc2l6ZSA9ICV1XG4iLCBpKyssIGZtYy0+ZGlydHlfc2l6ZSkpOwotCQlEMihqZmZzX3ByaW50X2ZtY29udHJvbChmbWMpKTsKLQotCQlpZiAoKGVyYXNlZCA9IGpmZnNfdHJ5X3RvX2VyYXNlKGMpKSA8IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkpGRlM6IEVycm9yIGluICIKLQkJCSAgICAgICAiZ2FyYmFnZSBjb2xsZWN0b3I6ICVsZC5cbiIsIGVyYXNlZCk7Ci0JCX0KLQotCQlpZiAoZXJhc2VkKQotCQkJZ290byBnY19lbmQ7Ci0KLQkJaWYgKGZtYy0+ZnJlZV9zaXplID09IDApIHsKLQkJCS8qIEFyZ2guIE1pZ2h0IGFzIHdlbGwgY29tbWl0IHN1aWNpZGUuICovCi0JCQlwcmludGsoS0VSTl9FUlIgImpmZnNfZ2FyYmFnZV9jb2xsZWN0X3RocmVhZCgpOiBmcmVlX3NpemUgPT0gMC4gVGhpcyBpcyBCQUQuXG4iKTsKLQkJCXNlbmRfc2lnKFNJR1FVSVQsIGMtPmdjX3Rhc2ssIDEpOwotCQkJLy8gcGFuaWMoKQotCQkJZ290byBnY19lbmQ7Ci0JCX0KLQkJCi0JCS8qIExldCdzIGRhcmUgdG8gbWFrZSBhIGdhcmJhZ2UgY29sbGVjdC4gICovCi0JCWlmICgocmVzdWx0ID0gamZmc19nYXJiYWdlX2NvbGxlY3RfbmV4dChjKSkgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkpGRlM6IFNvbWV0aGluZyAiCi0JCQkgICAgICAgImhhcyBnb25lIHNlcmlvdXNseSB3cm9uZyAiCi0JCQkgICAgICAgIndpdGggYSBnYXJiYWdlIGNvbGxlY3Q6ICVkXG4iLCByZXN1bHQpOwotCQl9Ci0JCQotCWdjX2VuZDoKLQkJRDMocHJpbnRrIChLRVJOX05PVElDRSAiZ19jX3RocmVhZCgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JCW11dGV4X3VubG9jaygmZm1jLT5iaWdsb2NrKTsKLQl9IC8qIGZvciAoOzspICovCi19IC8qIGpmZnNfZ2FyYmFnZV9jb2xsZWN0X3RocmVhZCgpICovCmRpZmYgLS1naXQgYS9mcy9qZmZzL2ludHJlcC5oIGIvZnMvamZmcy9pbnRyZXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM3YWJlMC4uMDAwMDAwMAotLS0gYS9mcy9qZmZzL2ludHJlcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIEpGRlMgLS0gSm91cm5hbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgTGludXggaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBBeGlzIENvbW11bmljYXRpb25zIEFCLgotICoKLSAqIENyZWF0ZWQgYnkgRmlubiBIYWthbnNzb24gPGZpbm5AYXhpcy5jb20+LgotICoKLSAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICRJZDogaW50cmVwLmgsdiAxLjE0IDIwMDEvMDkvMjMgMjM6Mjg6MzcgZHdtdzIgRXhwICQKLSAqCi0gKi8KLQotI2lmbmRlZiBfX0xJTlVYX0pGRlNfSU5UUkVQX0hfXwotI2RlZmluZSBfX0xJTlVYX0pGRlNfSU5UUkVQX0hfXwotI2luY2x1ZGUgImpmZnNfZm0uaCIKLXN0cnVjdCBqZmZzX25vZGUgKmpmZnNfYWxsb2Nfbm9kZSh2b2lkKTsKLXZvaWQgamZmc19mcmVlX25vZGUoc3RydWN0IGpmZnNfbm9kZSAqbik7Ci1pbnQgamZmc19nZXRfbm9kZV9pbnVzZSh2b2lkKTsKLQotdm9pZCBqZmZzX2NsZWFudXBfY29udHJvbChzdHJ1Y3QgamZmc19jb250cm9sICpjKTsKLWludCBqZmZzX2J1aWxkX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwotCi1pbnQgamZmc19pbnNlcnRfbm9kZShzdHJ1Y3QgamZmc19jb250cm9sICpjLCBzdHJ1Y3QgamZmc19maWxlICpmLAotCQkgICAgIGNvbnN0IHN0cnVjdCBqZmZzX3Jhd19pbm9kZSAqcmF3X2lub2RlLAotCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBqZmZzX25vZGUgKm5vZGUpOwotc3RydWN0IGpmZnNfZmlsZSAqamZmc19maW5kX2ZpbGUoc3RydWN0IGpmZnNfY29udHJvbCAqYywgX191MzIgaW5vKTsKLXN0cnVjdCBqZmZzX2ZpbGUgKmpmZnNfZmluZF9jaGlsZChzdHJ1Y3QgamZmc19maWxlICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOwotCi12b2lkIGpmZnNfZnJlZV9ub2RlKHN0cnVjdCBqZmZzX25vZGUgKm5vZGUpOwotCi1pbnQgamZmc19mb3JlYWNoX2ZpbGUoc3RydWN0IGpmZnNfY29udHJvbCAqYywgaW50ICgqZnVuYykoc3RydWN0IGpmZnNfZmlsZSAqKSk7Ci1pbnQgamZmc19wb3NzaWJseV9kZWxldGVfZmlsZShzdHJ1Y3QgamZmc19maWxlICpmKTsKLWludCBqZmZzX2luc2VydF9maWxlX2ludG9fdHJlZShzdHJ1Y3QgamZmc19maWxlICpmKTsKLWludCBqZmZzX3VubGlua19maWxlX2Zyb21fdHJlZShzdHJ1Y3QgamZmc19maWxlICpmKTsKLWludCBqZmZzX2ZpbGVfY291bnQoc3RydWN0IGpmZnNfZmlsZSAqZik7Ci0KLWludCBqZmZzX3dyaXRlX25vZGUoc3RydWN0IGpmZnNfY29udHJvbCAqYywgc3RydWN0IGpmZnNfbm9kZSAqbm9kZSwKLQkJICAgIHN0cnVjdCBqZmZzX3Jhd19pbm9kZSAqcmF3X2lub2RlLAotCQkgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotCQkgICAgaW50IHJlY292ZXJhYmxlLCBzdHJ1Y3QgamZmc19maWxlICpmKTsKLWludCBqZmZzX3JlYWRfZGF0YShzdHJ1Y3QgamZmc19maWxlICpmLCB1bnNpZ25lZCBjaGFyICpidWYsIF9fdTMyIHJlYWRfb2Zmc2V0LCBfX3UzMiBzaXplKTsKLQotLyogR2FyYmFnZSBjb2xsZWN0aW9uIHN0dWZmLiAgKi8KLWludCBqZmZzX2dhcmJhZ2VfY29sbGVjdF90aHJlYWQodm9pZCAqYyk7Ci12b2lkIGpmZnNfZ2FyYmFnZV9jb2xsZWN0X3RyaWdnZXIoc3RydWN0IGpmZnNfY29udHJvbCAqYyk7Ci0KLS8qIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuICAqLwotI2lmIDAKLWludCBqZmZzX3ByaW50X2ZpbGUoc3RydWN0IGpmZnNfZmlsZSAqZik7Ci0jZW5kaWYgIC8qICAwICAqLwotdm9pZCBqZmZzX3ByaW50X2hhc2hfdGFibGUoc3RydWN0IGpmZnNfY29udHJvbCAqYyk7Ci12b2lkIGpmZnNfcHJpbnRfdHJlZShzdHJ1Y3QgamZmc19maWxlICpmaXJzdF9maWxlLCBpbnQgaW5kZW50KTsKLQotI2VuZGlmIC8qIF9fTElOVVhfSkZGU19JTlRSRVBfSF9fICAqLwpkaWZmIC0tZ2l0IGEvZnMvamZmcy9qZmZzX2ZtLmMgYi9mcy9qZmZzL2pmZnNfZm0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5NWZiZC4uMDAwMDAwMAotLS0gYS9mcy9qZmZzL2pmZnNfZm0uYworKysgL2Rldi9udWxsCkBAIC0xLDc5OCArMCwwIEBACi0vKgotICogSkZGUyAtLSBKb3VybmFsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBMaW51eCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIuCi0gKgotICogQ3JlYXRlZCBieSBGaW5uIEhha2Fuc3NvbiA8ZmlubkBheGlzLmNvbT4uCi0gKgotICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogJElkOiBqZmZzX2ZtLmMsdiAxLjI3IDIwMDEvMDkvMjAgMTI6Mjk6NDcgZHdtdzIgRXhwICQKLSAqCi0gKiBQb3J0ZWQgdG8gTGludXggMi4zLnggYW5kIE1URDoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAgQWxleGFuZGVyIExhcnNzb24gKGFsZXhAY2VuZGlvLnNlKSwgQ2VuZGlvIFN5c3RlbXMgQUIKLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvamZmcy5oPgotI2luY2x1ZGUgImpmZnNfZm0uaCIKLSNpbmNsdWRlICJpbnRyZXAuaCIKLQotI2lmIGRlZmluZWQoSkZGU19NQVJLX09CU09MRVRFKSAmJiBKRkZTX01BUktfT0JTT0xFVEUKLXN0YXRpYyBpbnQgamZmc19tYXJrX29ic29sZXRlKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jLCBfX3UzMiBmbV9vZmZzZXQpOwotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgamZmc19mbSAqamZmc19hbGxvY19mbSh2b2lkKTsKLXN0YXRpYyB2b2lkIGpmZnNfZnJlZV9mbShzdHJ1Y3QgamZmc19mbSAqbik7Ci0KLWV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAgICAgKmZtX2NhY2hlOwotZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICAgICAqbm9kZV9jYWNoZTsKLQotI2lmIENPTkZJR19KRkZTX0ZTX1ZFUkJPU0UgPiAwCi12b2lkCi1qZmZzX3ByaW50X2ZtY29udHJvbChzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYykKLXsKLQlEKHByaW50aygic3RydWN0IGpmZnNfZm1jb250cm9sOiAweCVwXG4iLCBmbWMpKTsKLQlEKHByaW50aygie1xuIikpOwotCUQocHJpbnRrKCIgICAgICAgICV1LCAvKiBmbGFzaF9zaXplICAqL1xuIiwgZm1jLT5mbGFzaF9zaXplKSk7Ci0JRChwcmludGsoIiAgICAgICAgJXUsIC8qIHVzZWRfc2l6ZSAgKi9cbiIsIGZtYy0+dXNlZF9zaXplKSk7Ci0JRChwcmludGsoIiAgICAgICAgJXUsIC8qIGRpcnR5X3NpemUgICovXG4iLCBmbWMtPmRpcnR5X3NpemUpKTsKLQlEKHByaW50aygiICAgICAgICAldSwgLyogZnJlZV9zaXplICAqL1xuIiwgZm1jLT5mcmVlX3NpemUpKTsKLQlEKHByaW50aygiICAgICAgICAldSwgLyogc2VjdG9yX3NpemUgICovXG4iLCBmbWMtPnNlY3Rvcl9zaXplKSk7Ci0JRChwcmludGsoIiAgICAgICAgJXUsIC8qIG1pbl9mcmVlX3NpemUgICovXG4iLCBmbWMtPm1pbl9mcmVlX3NpemUpKTsKLQlEKHByaW50aygiICAgICAgICAldSwgLyogbWF4X2NodW5rX3NpemUgICovXG4iLCBmbWMtPm1heF9jaHVua19zaXplKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglcCwgLyogbXRkICAqL1xuIiwgZm1jLT5tdGQpKTsKLQlEKHByaW50aygiICAgICAgICAweCVwLCAvKiBoZWFkICAqLyAgICAiCi0JCSAiKGhlYWQtPm9mZnNldCA9IDB4JTA4eClcbiIsCi0JCSBmbWMtPmhlYWQsIChmbWMtPmhlYWQgPyBmbWMtPmhlYWQtPm9mZnNldCA6IDApKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglcCwgLyogdGFpbCAgKi8gICAgIgotCQkgIih0YWlsLT5vZmZzZXQgKyB0YWlsLT5zaXplID0gMHglMDh4KVxuIiwKLQkJIGZtYy0+dGFpbCwKLQkJIChmbWMtPnRhaWwgPyBmbWMtPnRhaWwtPm9mZnNldCArIGZtYy0+dGFpbC0+c2l6ZSA6IDApKSk7Ci0JRChwcmludGsoIiAgICAgICAgMHglcCwgLyogaGVhZF9leHRyYSAgKi9cbiIsIGZtYy0+aGVhZF9leHRyYSkpOwotCUQocHJpbnRrKCIgICAgICAgIDB4JXAsIC8qIHRhaWxfZXh0cmEgICovXG4iLCBmbWMtPnRhaWxfZXh0cmEpKTsKLQlEKHByaW50aygifVxuIikpOwotfQotI2VuZGlmICAvKiAgQ09ORklHX0pGRlNfRlNfVkVSQk9TRSA+IDAgICovCi0KLSNpZiBDT05GSUdfSkZGU19GU19WRVJCT1NFID4gMgotc3RhdGljIHZvaWQKLWpmZnNfcHJpbnRfZm0oc3RydWN0IGpmZnNfZm0gKmZtKQotewotCUQocHJpbnRrKCJzdHJ1Y3QgamZmc19mbTogMHglcFxuIiwgZm0pKTsKLQlEKHByaW50aygie1xuIikpOwotCUQocHJpbnRrKCIgICAgICAgMHglMDh4LCAvKiBvZmZzZXQgICovXG4iLCBmbS0+b2Zmc2V0KSk7Ci0JRChwcmludGsoIiAgICAgICAldSwgLyogc2l6ZSAgKi9cbiIsIGZtLT5zaXplKSk7Ci0JRChwcmludGsoIiAgICAgICAweCVwLCAvKiBwcmV2ICAqL1xuIiwgZm0tPnByZXYpKTsKLQlEKHByaW50aygiICAgICAgIDB4JXAsIC8qIG5leHQgICovXG4iLCBmbS0+bmV4dCkpOwotCUQocHJpbnRrKCIgICAgICAgMHglcCwgLyogbm9kZXMgICovXG4iLCBmbS0+bm9kZXMpKTsKLQlEKHByaW50aygifVxuIikpOwotfQotI2VuZGlmICAvKiAgQ09ORklHX0pGRlNfRlNfVkVSQk9TRSA+IDIgICovCi0KLSNpZiAwCi12b2lkCi1qZmZzX3ByaW50X25vZGVfcmVmKHN0cnVjdCBqZmZzX25vZGVfcmVmICpyZWYpCi17Ci0JRChwcmludGsoInN0cnVjdCBqZmZzX25vZGVfcmVmOiAweCVwXG4iLCByZWYpKTsKLQlEKHByaW50aygie1xuIikpOwotCUQocHJpbnRrKCIgICAgICAgMHglcCwgLyogbm9kZSAgKi9cbiIsIHJlZi0+bm9kZSkpOwotCUQocHJpbnRrKCIgICAgICAgMHglcCwgLyogbmV4dCAgKi9cbiIsIHJlZi0+bmV4dCkpOwotCUQocHJpbnRrKCJ9XG4iKSk7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCi0vKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgc2hpbnkgZmxhc2ggbWVtb3J5IGNvbnRyb2wgc3RydWN0dXJlLiAgKi8KLXN0cnVjdCBqZmZzX2ZtY29udHJvbCAqCi1qZmZzX2J1aWxkX2JlZ2luKHN0cnVjdCBqZmZzX2NvbnRyb2wgKmMsIGludCB1bml0KQotewotCXN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jOwotCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwotCQotCUQzKHByaW50aygiamZmc19idWlsZF9iZWdpbigpXG4iKSk7Ci0JZm1jID0ga21hbGxvYyhzaXplb2YoKmZtYyksIEdGUF9LRVJORUwpOwotCWlmICghZm1jKSB7Ci0JCUQocHJpbnRrKCJqZmZzX2J1aWxkX2JlZ2luKCk6IEFsbG9jYXRpb24gb2YgIgotCQkJICJzdHJ1Y3QgamZmc19mbWNvbnRyb2wgZmFpbGVkIVxuIikpOwotCQlyZXR1cm4gKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqKTA7Ci0JfQotCURKTShub19qZmZzX2ZtY29udHJvbCsrKTsKLQotCW10ZCA9IGdldF9tdGRfZGV2aWNlKE5VTEwsIHVuaXQpOwotCi0JaWYgKElTX0VSUihtdGQpKSB7Ci0JCWtmcmVlKGZtYyk7Ci0JCURKTShub19qZmZzX2ZtY29udHJvbC0tKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCQotCS8qIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSBmbGFzaCBtZW1vcnkuICAqLwotCWZtYy0+Zmxhc2hfc2l6ZSA9IG10ZC0+c2l6ZTsKLQlEMyhwcmludGsoIiAgZm1jLT5mbGFzaF9zaXplID0gJWQgYnl0ZXNcbiIsIGZtYy0+Zmxhc2hfc2l6ZSkpOwotCi0JZm1jLT51c2VkX3NpemUgPSAwOwotCWZtYy0+ZGlydHlfc2l6ZSA9IDA7Ci0JZm1jLT5mcmVlX3NpemUgPSBtdGQtPnNpemU7Ci0JZm1jLT5zZWN0b3Jfc2l6ZSA9IG10ZC0+ZXJhc2VzaXplOwotCWZtYy0+bWF4X2NodW5rX3NpemUgPSBmbWMtPnNlY3Rvcl9zaXplID4+IDE7Ci0JLyogbWluX2ZyZWVfc2l6ZToKLQkgICAxIHNlY3Rvciwgb2J2aW91c2x5LgotCSAgICsgMSB4IG1heF9jaHVua19zaXplLCBmb3Igd2hlbiBhIG5vZGVzIG92ZXJsYXBzIHRoZSBlbmQgb2YgYSBzZWN0b3IKLQkgICArIDEgeCBtYXhfY2h1bmtfc2l6ZSBhZ2Fpbiwgd2hpY2ggb3VnaHQgdG8gYmUgZW5vdWdoIHRvIGhhbmRsZSAKLQkJICAgdGhlIGNhc2Ugd2hlcmUgYSByZW5hbWUgY2F1c2VzIGEgbmFtZSB0byBncm93LCBhbmQgR0MgaGFzCi0JCSAgIHRvIHdyaXRlIG91dCBsYXJnZXIgbm9kZXMgdGhhbiB0aGUgb25lcyBpdCdzIG9ic29sZXRpbmcuCi0JCSAgIFdlIHNob3VsZCBmaXggaXQgc28gaXQgZG9lc24ndCBoYXZlIHRvIHdyaXRlIHRoZSBuYW1lCi0JCSAgIF9ldmVyeV8gdGltZS4gTGF0ZXIuCi0JICAgKyBhbm90aGVyIDIgc2VjdG9ycyBiZWNhdXNlIHBlb3BsZSBrZWVwIGdldHRpbmcgR0Mgc3R1Y2sgYW5kCi0JICAgICAgICAgICB3ZSBkb24ndCBrbm93IHdoeS4gVGhpcyBzY2FyZXMgbWUgLSBJIHdhbnQgZm9ybWFsIHByb29mCi0JCSAgIG9mIGNvcnJlY3RuZXNzIG9mIHdoYXRldmVyIG51bWJlciB3ZSBwdXQgaGVyZS4gZHdtdzIuCi0JKi8KLQlmbWMtPm1pbl9mcmVlX3NpemUgPSBmbWMtPnNlY3Rvcl9zaXplIDw8IDI7Ci0JZm1jLT5tdGQgPSBtdGQ7Ci0JZm1jLT5jID0gYzsKLQlmbWMtPmhlYWQgPSBOVUxMOwotCWZtYy0+dGFpbCA9IE5VTEw7Ci0JZm1jLT5oZWFkX2V4dHJhID0gTlVMTDsKLQlmbWMtPnRhaWxfZXh0cmEgPSBOVUxMOwotCW11dGV4X2luaXQoJmZtYy0+YmlnbG9jayk7Ci0JcmV0dXJuIGZtYzsKLX0KLQotCi0vKiBXaGVuIHRoZSBmbGFzaCBtZW1vcnkgc2NhbiBoYXMgY29tcGxldGVkLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQKLSAgIGJlZm9yZSB1c2Ugb2YgdGhlIGNvbnRyb2wgc3RydWN0dXJlLiAgKi8KLXZvaWQKLWpmZnNfYnVpbGRfZW5kKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jKQotewotCUQzKHByaW50aygiamZmc19idWlsZF9lbmQoKVxuIikpOwotCi0JaWYgKCFmbWMtPmhlYWQpIHsKLQkJZm1jLT5oZWFkID0gZm1jLT5oZWFkX2V4dHJhOwotCQlmbWMtPnRhaWwgPSBmbWMtPnRhaWxfZXh0cmE7Ci0JfQotCWVsc2UgaWYgKGZtYy0+aGVhZF9leHRyYSkgewotCQlmbWMtPnRhaWxfZXh0cmEtPm5leHQgPSBmbWMtPmhlYWQ7Ci0JCWZtYy0+aGVhZC0+cHJldiA9IGZtYy0+dGFpbF9leHRyYTsKLQkJZm1jLT5oZWFkID0gZm1jLT5oZWFkX2V4dHJhOwotCX0KLQlmbWMtPmhlYWRfZXh0cmEgPSBOVUxMOyAvKiBUaGVzZSB0d28gaW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSBvbWl0dGVkLiAgKi8KLQlmbWMtPnRhaWxfZXh0cmEgPSBOVUxMOwotCUQzKGpmZnNfcHJpbnRfZm1jb250cm9sKGZtYykpOwotfQotCi0KLS8qIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSBmaWxlIHN5c3RlbSBpcyB1bm1vdW50ZWQuICBUaGlzIGZ1bmN0aW9uCi0gICBmcmVlcyBhbGwgbWVtb3J5IHVzZWQgYnkgdGhpcyBtb2R1bGUuICAqLwotdm9pZAotamZmc19jbGVhbnVwX2ZtY29udHJvbChzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYykKLXsKLQlpZiAoZm1jKSB7Ci0JCXN0cnVjdCBqZmZzX2ZtICpuZXh0ID0gZm1jLT5oZWFkOwotCQl3aGlsZSAobmV4dCkgewotCQkJc3RydWN0IGpmZnNfZm0gKmN1ciA9IG5leHQ7Ci0JCQluZXh0ID0gbmV4dC0+bmV4dDsKLQkJCWpmZnNfZnJlZV9mbShjdXIpOwotCQl9Ci0JCXB1dF9tdGRfZGV2aWNlKGZtYy0+bXRkKTsKLQkJa2ZyZWUoZm1jKTsKLQkJREpNKG5vX2pmZnNfZm1jb250cm9sLS0pOwotCX0KLX0KLQotCi0vKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGZpcnN0IGNodW5rIG9mIGZyZWUgc3BhY2Ugb24gdGhlCi0gICBmbGFzaCBtZW1vcnkuICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHNvbWV0aGluZyBub256ZXJvIGlmIHRoZSBmbGFzaAotICAgbWVtb3J5IGNvbnRhaW5zIGFueSBmcmVlIHNwYWNlLiAgKi8KLV9fdTMyCi1qZmZzX2ZyZWVfc2l6ZTEoc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMpCi17Ci0JX191MzIgaGVhZDsKLQlfX3UzMiB0YWlsOwotCV9fdTMyIGVuZCA9IGZtYy0+Zmxhc2hfc2l6ZTsKLQotCWlmICghZm1jLT5oZWFkKSB7Ci0JCS8qIFRoZXJlIGlzIG5vdGhpbmcgb24gdGhlIGZsYXNoLiAgKi8KLQkJcmV0dXJuIGZtYy0+Zmxhc2hfc2l6ZTsKLQl9Ci0KLQkvKiBDb21wdXRlIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBvZiB0aGUgY29udGVudHMgb2YgdGhlIGZsYXNoLiAgKi8KLQloZWFkID0gZm1jLT5oZWFkLT5vZmZzZXQ7Ci0JdGFpbCA9IGZtYy0+dGFpbC0+b2Zmc2V0ICsgZm1jLT50YWlsLT5zaXplOwotCWlmICh0YWlsID09IGVuZCkgewotCQl0YWlsID0gMDsKLQl9Ci0JQVNTRVJUKGVsc2UgaWYgKHRhaWwgPiBlbmQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiamZmc19mcmVlX3NpemUxKCk6IHRhaWwgPiBlbmRcbiIpOwotCQl0YWlsID0gMDsKLQl9KTsKLQotCWlmIChoZWFkIDw9IHRhaWwpIHsKLQkJcmV0dXJuIGVuZCAtIHRhaWw7Ci0JfQotCWVsc2UgewotCQlyZXR1cm4gaGVhZCAtIHRhaWw7Ci0JfQotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHNvbWV0aGluZyBub256ZXJvIGluIGNhc2UgdGhlcmUgYXJlIHR3byBmcmVlCi0gICBhcmVhcyBvbiB0aGUgZmxhc2guICBMaWtlIHRoaXM6Ci0KLSAgICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCi0gICAgIHwgICAgIEZSRUUgMSAgICAgfCAgIFVTRUQgLyBESVJUWSAgIHwgICAgIEZSRUUgMiAgICAgfAotICAgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICBmbWMtPmhlYWQgLS0tLS1eCi0gICAgICAgZm1jLT50YWlsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLV4KLQotICAgVGhlIHZhbHVlIHJldHVybmVkLCB3aWxsIGJlIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBlbXB0eSBhcmVhIG9uIHRoZQotICAgZmxhc2gsIGluIHRoaXMgY2FzZSBtYXJrZWQgIkZSRUUgMSIuICAqLwotX191MzIKLWpmZnNfZnJlZV9zaXplMihzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYykKLXsKLQlpZiAoZm1jLT5oZWFkKSB7Ci0JCV9fdTMyIGhlYWQgPSBmbWMtPmhlYWQtPm9mZnNldDsKLQkJX191MzIgdGFpbCA9IGZtYy0+dGFpbC0+b2Zmc2V0ICsgZm1jLT50YWlsLT5zaXplOwotCQlpZiAodGFpbCA9PSBmbWMtPmZsYXNoX3NpemUpIHsKLQkJCXRhaWwgPSAwOwotCQl9Ci0KLQkJaWYgKHRhaWwgPj0gaGVhZCkgewotCQkJcmV0dXJuIGhlYWQ7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogQWxsb2NhdGUgYSBjaHVuayBvZiBmbGFzaCBtZW1vcnkuICBJZiB0aGVyZSBpcyBlbm91Z2ggc3BhY2Ugb24gdGhlCi0gICBkZXZpY2UsIGEgcmVmZXJlbmNlIHRvIHRoZSBhc3NvY2lhdGVkIG5vZGUgaXMgc3RvcmVkIGluIHRoZSBqZmZzX2ZtCi0gICBzdHJ1Y3QuICAqLwotaW50Ci1qZmZzX2ZtYWxsb2Moc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMsIF9fdTMyIHNpemUsIHN0cnVjdCBqZmZzX25vZGUgKm5vZGUsCi0JICAgICBzdHJ1Y3QgamZmc19mbSAqKnJlc3VsdCkKLXsKLQlzdHJ1Y3QgamZmc19mbSAqZm07Ci0JX191MzIgZnJlZV9jaHVua19zaXplMTsKLQlfX3UzMiBmcmVlX2NodW5rX3NpemUyOwotCi0JRDIocHJpbnRrKCJqZmZzX2ZtYWxsb2MoKTogZm1jID0gMHglcCwgc2l6ZSA9ICVkLCAiCi0JCSAgIm5vZGUgPSAweCVwXG4iLCBmbWMsIHNpemUsIG5vZGUpKTsKLQotCSpyZXN1bHQgPSBOVUxMOwotCi0JaWYgKCEoZm0gPSBqZmZzX2FsbG9jX2ZtKCkpKSB7Ci0JCUQocHJpbnRrKCJqZmZzX2ZtYWxsb2MoKToga21hbGxvYygpIGZhaWxlZCEgKGZtKVxuIikpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlmcmVlX2NodW5rX3NpemUxID0gamZmc19mcmVlX3NpemUxKGZtYyk7Ci0JZnJlZV9jaHVua19zaXplMiA9IGpmZnNfZnJlZV9zaXplMihmbWMpOwotCWlmIChmcmVlX2NodW5rX3NpemUxICsgZnJlZV9jaHVua19zaXplMiAhPSBmbWMtPmZyZWVfc2l6ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGcmVlIHNpemUgYWNjb3VudGluZyBzY3Jld2VkXG4iKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZnJlZV9jaHVua19zaXplMSA9PSAweCV4LCBmcmVlX2NodW5rX3NpemUyID09IDB4JXgsIGZtYy0+ZnJlZV9zaXplID09IDB4JXhcbiIsIGZyZWVfY2h1bmtfc2l6ZTEsIGZyZWVfY2h1bmtfc2l6ZTIsIGZtYy0+ZnJlZV9zaXplKTsKLQl9Ci0KLQlEMyhwcmludGsoImpmZnNfZm1hbGxvYygpOiBmcmVlX2NodW5rX3NpemUxID0gJXUsICIKLQkJICAiZnJlZV9jaHVua19zaXplMiA9ICV1XG4iLAotCQkgIGZyZWVfY2h1bmtfc2l6ZTEsIGZyZWVfY2h1bmtfc2l6ZTIpKTsKLQotCWlmIChzaXplIDw9IGZyZWVfY2h1bmtfc2l6ZTEpIHsKLQkJaWYgKCEoZm0tPm5vZGVzID0gKHN0cnVjdCBqZmZzX25vZGVfcmVmICopCi0JCQkJICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZmc19ub2RlX3JlZiksCi0JCQkJCSAgR0ZQX0tFUk5FTCkpKSB7Ci0JCQlEKHByaW50aygiamZmc19mbWFsbG9jKCk6IGttYWxsb2MoKSBmYWlsZWQhICIKLQkJCQkgIihub2RlX3JlZilcbiIpKTsKLQkJCWpmZnNfZnJlZV9mbShmbSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQlESk0obm9famZmc19ub2RlX3JlZisrKTsKLQkJZm0tPm5vZGVzLT5ub2RlID0gbm9kZTsKLQkJZm0tPm5vZGVzLT5uZXh0ID0gTlVMTDsKLQkJaWYgKGZtYy0+dGFpbCkgewotCQkJZm0tPm9mZnNldCA9IGZtYy0+dGFpbC0+b2Zmc2V0ICsgZm1jLT50YWlsLT5zaXplOwotCQkJaWYgKGZtLT5vZmZzZXQgPT0gZm1jLT5mbGFzaF9zaXplKSB7Ci0JCQkJZm0tPm9mZnNldCA9IDA7Ci0JCQl9Ci0JCQlBU1NFUlQoZWxzZSBpZiAoZm0tPm9mZnNldCA+IGZtYy0+Zmxhc2hfc2l6ZSkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnNfZm1hbGxvYygpOiAiCi0JCQkJICAgICAgICJvZmZzZXQgPiBmbGFzaF9lbmRcbiIpOwotCQkJCWZtLT5vZmZzZXQgPSAwOwotCQkJfSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBUaGVyZSBkb24ndCBoYXZlIHRvIGJlIGZpbGVzIGluIHRoZSBmaWxlCi0JCQkgICBzeXN0ZW0geWV0LiAgKi8KLQkJCWZtLT5vZmZzZXQgPSAwOwotCQl9Ci0JCWZtLT5zaXplID0gc2l6ZTsKLQkJZm1jLT5mcmVlX3NpemUgLT0gc2l6ZTsKLQkJZm1jLT51c2VkX3NpemUgKz0gc2l6ZTsKLQl9Ci0JZWxzZSBpZiAoc2l6ZSA+IGZyZWVfY2h1bmtfc2l6ZTIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSkZGUzogVHJpZWQgdG8gYWxsb2NhdGUgYSB0b28gIgotCQkgICAgICAgImxhcmdlIGZsYXNoIG1lbW9yeSBjaHVuay4gKHNpemUgPSAldSlcbiIsIHNpemUpOwotCQlqZmZzX2ZyZWVfZm0oZm0pOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0JZWxzZSB7Ci0JCWZtLT5vZmZzZXQgPSBmbWMtPnRhaWwtPm9mZnNldCArIGZtYy0+dGFpbC0+c2l6ZTsKLQkJZm0tPnNpemUgPSBmcmVlX2NodW5rX3NpemUxOwotCQlmbS0+bm9kZXMgPSBOVUxMOwotCQlmbWMtPmZyZWVfc2l6ZSAtPSBmbS0+c2l6ZTsKLQkJZm1jLT5kaXJ0eV9zaXplICs9IGZtLT5zaXplOyAvKiBDaGFuZ2VkIGJ5IHNpbW9uay4gVGhpcyBzZWVtaW5nbHkgZml4ZXMgYSAKLQkJCQkJCWJ1ZyB0aGF0IGNhdXNlZCBpbmZpbml0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uCi0JCQkJCQlJdCBwcmV2aW91c2x5IHNldCBmbWMtPmRpcnR5X3NpemUgdG8gc2l6ZSAod2hpY2ggaXMgdGhlCi0JCQkJCQlzaXplIG9mIHRoZSByZXF1ZXN0ZWQgY2h1bmspLgotCQkJCQkgICAgICovCi0JfQotCi0JZm0tPm5leHQgPSBOVUxMOwotCWlmICghZm1jLT5oZWFkKSB7Ci0JCWZtLT5wcmV2ID0gTlVMTDsKLQkJZm1jLT5oZWFkID0gZm07Ci0JCWZtYy0+dGFpbCA9IGZtOwotCX0KLQllbHNlIHsKLQkJZm0tPnByZXYgPSBmbWMtPnRhaWw7Ci0JCWZtYy0+dGFpbC0+bmV4dCA9IGZtOwotCQlmbWMtPnRhaWwgPSBmbTsKLQl9Ci0KLQlEMyhqZmZzX3ByaW50X2ZtY29udHJvbChmbWMpKTsKLQlEMyhqZmZzX3ByaW50X2ZtKGZtKSk7Ci0JKnJlc3VsdCA9IGZtOwotCXJldHVybiAwOwotfQotCi0KLS8qIFRoZSBvbi1mbGFzaCBzcGFjZSBpcyBub3QgbmVlZGVkIGFueW1vcmUgYnkgdGhlIHBhc3NlZCBub2RlLiAgUmVtb3ZlCi0gICB0aGUgcmVmZXJlbmNlIHRvIHRoZSBub2RlIGZyb20gdGhlIG5vZGUgbGlzdC4gIElmIHRoZSBkYXRhIGNodW5rIGluCi0gICB0aGUgZmxhc2ggbWVtb3J5IGlzbid0IHVzZWQgYnkgYW55IG1vcmUgbm9kZXMgYW55bW9yZSAoZm0tPm5vZGVzID09IDApLAotICAgdGhlbiBtYXJrIHRoYXQgY2h1bmsgYXMgZGlydHkuICAqLwotaW50Ci1qZmZzX2ZtZnJlZShzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYywgc3RydWN0IGpmZnNfZm0gKmZtLCBzdHJ1Y3QgamZmc19ub2RlICpub2RlKQotewotCXN0cnVjdCBqZmZzX25vZGVfcmVmICpyZWY7Ci0Jc3RydWN0IGpmZnNfbm9kZV9yZWYgKnByZXY7Ci0JQVNTRVJUKGludCBkZWwgPSAwKTsKLQotCUQyKHByaW50aygiamZmc19mbWZyZWUoKTogbm9kZS0+aW5vID0gJXUsIG5vZGUtPnZlcnNpb24gPSAldVxuIiwKLQkJIG5vZGUtPmlubywgbm9kZS0+dmVyc2lvbikpOwotCi0JQVNTRVJUKGlmICghZm1jIHx8ICFmbSB8fCAhZm0tPm5vZGVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiamZmc19mbWZyZWUoKTogZm1jOiAweCVwLCBmbTogMHglcCwgIgotCQkgICAgICAgImZtLT5ub2RlczogMHglcFxuIiwKLQkJICAgICAgIGZtYywgZm0sIChmbSA/IGZtLT5ub2RlcyA6IE5VTEwpKTsKLQkJcmV0dXJuIC0xOwotCX0pOwotCi0JLyogRmluZCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBub2RlIHRoYXQgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZAotCSAgIGFuZCByZW1vdmUgaXQuICAqLwotCWZvciAocmVmID0gZm0tPm5vZGVzLCBwcmV2ID0gTlVMTDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKLQkJaWYgKHJlZi0+bm9kZSA9PSBub2RlKSB7Ci0JCQlpZiAocHJldikgewotCQkJCXByZXYtPm5leHQgPSByZWYtPm5leHQ7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmbS0+bm9kZXMgPSByZWYtPm5leHQ7Ci0JCQl9Ci0JCQlrZnJlZShyZWYpOwotCQkJREpNKG5vX2pmZnNfbm9kZV9yZWYtLSk7Ci0JCQlBU1NFUlQoZGVsID0gMSk7Ci0JCQlicmVhazsKLQkJfQotCQlwcmV2ID0gcmVmOwotCX0KLQotCS8qIElmIHRoZSBkYXRhIGNodW5rIGluIHRoZSBmbGFzaCBtZW1vcnkgaXNuJ3QgdXNlZCBhbnltb3JlCi0JICAganVzdCBtYXJrIGl0IGFzIG9ic29sZXRlLiAgKi8KLQlpZiAoIWZtLT5ub2RlcykgewotCQkvKiBObyBub2RlIHVzZXMgdGhpcyBjaHVuayBzbyBsZXQncyByZW1vdmUgaXQuICAqLwotCQlmbWMtPnVzZWRfc2l6ZSAtPSBmbS0+c2l6ZTsKLQkJZm1jLT5kaXJ0eV9zaXplICs9IGZtLT5zaXplOwotI2lmIGRlZmluZWQoSkZGU19NQVJLX09CU09MRVRFKSAmJiBKRkZTX01BUktfT0JTT0xFVEUKLQkJaWYgKGpmZnNfbWFya19vYnNvbGV0ZShmbWMsIGZtLT5vZmZzZXQpIDwgMCkgewotCQkJRDEocHJpbnRrKCJqZmZzX2ZtZnJlZSgpOiBGYWlsZWQgdG8gbWFyayBhbiBvbi1mbGFzaCAiCi0JCQkJICAibm9kZSBvYnNvbGV0ZSFcbiIpKTsKLQkJCXJldHVybiAtMTsKLQkJfQotI2VuZGlmCi0JfQotCi0JQVNTRVJUKGlmICghZGVsKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIioqKmpmZnNfZm1mcmVlKCk6ICIKLQkJICAgICAgICJEaWRuJ3QgZGVsZXRlIGFueSBub2RlIHJlZmVyZW5jZSFcbiIpOwotCX0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyogVGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZgotICAgdGhlIGZpbGUgc3lzdGVtLiAgKi8KLXN0cnVjdCBqZmZzX2ZtICoKLWpmZnNfZm1hbGxvY2VkKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jLCBfX3UzMiBvZmZzZXQsIF9fdTMyIHNpemUsCi0JICAgICAgIHN0cnVjdCBqZmZzX25vZGUgKm5vZGUpCi17Ci0Jc3RydWN0IGpmZnNfZm0gKmZtOwotCi0JRDMocHJpbnRrKCJqZmZzX2ZtYWxsb2NlZCgpXG4iKSk7Ci0KLQlpZiAoIShmbSA9IGpmZnNfYWxsb2NfZm0oKSkpIHsKLQkJRChwcmludGsoImpmZnNfZm1hbGxvY2VkKDB4JXAsICV1LCAldSwgMHglcCk6IGZhaWxlZCFcbiIsCi0JCQkgZm1jLCBvZmZzZXQsIHNpemUsIG5vZGUpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWZtLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JZm0tPnNpemUgPSBzaXplOwotCWZtLT5wcmV2ID0gTlVMTDsKLQlmbS0+bmV4dCA9IE5VTEw7Ci0JZm0tPm5vZGVzID0gTlVMTDsKLQlpZiAobm9kZSkgewotCQkvKiBgbm9kZScgZXhpc3RzIGFuZCBpdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZQotCQkgICAgamZmc19mbSBzdHJ1Y3R1cmUgYGZtJy4gICovCi0JCWlmICghKGZtLT5ub2RlcyA9IChzdHJ1Y3QgamZmc19ub2RlX3JlZiAqKQotCQkJCSAga21hbGxvYyhzaXplb2Yoc3RydWN0IGpmZnNfbm9kZV9yZWYpLAotCQkJCQkgIEdGUF9LRVJORUwpKSkgewotCQkJRChwcmludGsoImpmZnNfZm1hbGxvY2VkKCk6ICFmbS0+bm9kZXNcbiIpKTsKLQkJCWpmZnNfZnJlZV9mbShmbSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlESk0obm9famZmc19ub2RlX3JlZisrKTsKLQkJZm0tPm5vZGVzLT5ub2RlID0gbm9kZTsKLQkJZm0tPm5vZGVzLT5uZXh0ID0gTlVMTDsKLQkJZm1jLT51c2VkX3NpemUgKz0gc2l6ZTsKLQkJZm1jLT5mcmVlX3NpemUgLT0gc2l6ZTsKLQl9Ci0JZWxzZSB7Ci0JCS8qIElmIHRoZXJlIGlzIG5vIG5vZGUsIHRoZW4gdGhpcyBpcyBqdXN0IGEgY2h1bmsgb2YgZGlydC4gICovCi0JCWZtYy0+ZGlydHlfc2l6ZSArPSBzaXplOwotCQlmbWMtPmZyZWVfc2l6ZSAtPSBzaXplOwotCX0KLQotCWlmIChmbWMtPmhlYWRfZXh0cmEpIHsKLQkJZm0tPnByZXYgPSBmbWMtPnRhaWxfZXh0cmE7Ci0JCWZtYy0+dGFpbF9leHRyYS0+bmV4dCA9IGZtOwotCQlmbWMtPnRhaWxfZXh0cmEgPSBmbTsKLQl9Ci0JZWxzZSBpZiAoIWZtYy0+aGVhZCkgewotCQlmbWMtPmhlYWQgPSBmbTsKLQkJZm1jLT50YWlsID0gZm07Ci0JfQotCWVsc2UgaWYgKGZtYy0+dGFpbC0+b2Zmc2V0ICsgZm1jLT50YWlsLT5zaXplIDwgb2Zmc2V0KSB7Ci0JCWZtYy0+aGVhZF9leHRyYSA9IGZtOwotCQlmbWMtPnRhaWxfZXh0cmEgPSBmbTsKLQl9Ci0JZWxzZSB7Ci0JCWZtLT5wcmV2ID0gZm1jLT50YWlsOwotCQlmbWMtPnRhaWwtPm5leHQgPSBmbTsKLQkJZm1jLT50YWlsID0gZm07Ci0JfQotCUQzKGpmZnNfcHJpbnRfZm1jb250cm9sKGZtYykpOwotCUQzKGpmZnNfcHJpbnRfZm0oZm0pKTsKLQlyZXR1cm4gZm07Ci19Ci0KLQotLyogQWRkIGEgbmV3IG5vZGUgdG8gYW4gYWxyZWFkeSBleGlzdGluZyBqZmZzX2ZtIHN0cnVjdC4gICovCi1pbnQKLWpmZnNfYWRkX25vZGUoc3RydWN0IGpmZnNfbm9kZSAqbm9kZSkKLXsKLQlzdHJ1Y3QgamZmc19ub2RlX3JlZiAqcmVmOwotCi0JRDMocHJpbnRrKCJqZmZzX2FkZF9ub2RlKCk6IGlubyA9ICV1XG4iLCBub2RlLT5pbm8pKTsKLQotCXJlZiA9IGttYWxsb2Moc2l6ZW9mKCpyZWYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlESk0obm9famZmc19ub2RlX3JlZisrKTsKLQlyZWYtPm5vZGUgPSBub2RlOwotCXJlZi0+bmV4dCA9IG5vZGUtPmZtLT5ub2RlczsKLQlub2RlLT5mbS0+bm9kZXMgPSByZWY7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogRnJlZSBhIHBhcnQgb2Ygc29tZSBhbGxvY2F0ZWQgc3BhY2UuICAqLwotdm9pZAotamZmc19mbWZyZWVfcGFydGx5KHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jLCBzdHJ1Y3QgamZmc19mbSAqZm0sIF9fdTMyIHNpemUpCi17Ci0JRDEocHJpbnRrKCIqKipqZmZzX2ZtZnJlZV9wYXJ0bHkoKTogZm0gPSAweCVwLCBmbS0+bm9kZXMgPSAweCVwLCAiCi0JCSAgImZtLT5ub2Rlcy0+bm9kZS0+aW5vID0gJXUsIHNpemUgPSAldVxuIiwKLQkJICBmbSwgKGZtID8gZm0tPm5vZGVzIDogMCksCi0JCSAgKCFmbSA/IDAgOiAoIWZtLT5ub2RlcyA/IDAgOiBmbS0+bm9kZXMtPm5vZGUtPmlubykpLCBzaXplKSk7Ci0KLQlpZiAoZm0tPm5vZGVzKSB7Ci0JCWtmcmVlKGZtLT5ub2Rlcyk7Ci0JCURKTShub19qZmZzX25vZGVfcmVmLS0pOwotCQlmbS0+bm9kZXMgPSBOVUxMOwotCX0KLQlmbWMtPnVzZWRfc2l6ZSAtPSBmbS0+c2l6ZTsKLQlpZiAoZm0gPT0gZm1jLT50YWlsKSB7Ci0JCWZtLT5zaXplIC09IHNpemU7Ci0JCWZtYy0+ZnJlZV9zaXplICs9IHNpemU7Ci0JfQotCWZtYy0+ZGlydHlfc2l6ZSArPSBmbS0+c2l6ZTsKLX0KLQotCi0vKiBGaW5kIHRoZSBqZmZzX2ZtIHN0cnVjdCB0aGF0IGNvbnRhaW5zIHRoZSBlbmQgb2YgdGhlIGRhdGEgY2h1bmsgdGhhdAotICAgYmVnaW5zIGF0IHRoZSBsb2dpY2FsIGJlZ2lubmluZyBvZiB0aGUgZmxhc2ggbWVtb3J5IGFuZCBzcGFucyBgc2l6ZScKLSAgIGJ5dGVzLiAgSWYgd2Ugd2FudCB0byBlcmFzZSBhIHNlY3RvciBvZiB0aGUgZmxhc2ggbWVtb3J5LCB3ZSB1c2UgdGhpcwotICAgZnVuY3Rpb24gdG8gZmluZCB3aGVyZSB0aGUgc2VjdG9yIGxpbWl0IGN1dHMgYSBjaHVuayBvZiBkYXRhLiAgKi8KLXN0cnVjdCBqZmZzX2ZtICoKLWpmZnNfY3V0X25vZGUoc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMsIF9fdTMyIHNpemUpCi17Ci0Jc3RydWN0IGpmZnNfZm0gKmZtOwotCV9fdTMyIHBvcyA9IDA7Ci0KLQlpZiAoc2l6ZSA9PSAwKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCUFTU0VSVChpZiAoIWZtYykgewotCQlwcmludGsoS0VSTl9FUlIgImpmZnNfY3V0X25vZGUoKTogZm1jID09IE5VTExcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9KTsKLQotCWZtID0gZm1jLT5oZWFkOwotCi0Jd2hpbGUgKGZtKSB7Ci0JCXBvcyArPSBmbS0+c2l6ZTsKLQkJaWYgKHBvcyA8IHNpemUpIHsKLQkJCWZtID0gZm0tPm5leHQ7Ci0JCX0KLQkJZWxzZSBpZiAocG9zID4gc2l6ZSkgewotCQkJYnJlYWs7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmbSA9IE5VTEw7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiBmbTsKLX0KLQotCi0vKiBNb3ZlIHRoZSBoZWFkIG9mIHRoZSBmbWMgc3RydWN0dXJlcyBhbmQgZGVsZXRlIHRoZSBvYnNvbGV0ZSBwYXJ0cy4gICovCi12b2lkCi1qZmZzX3N5bmNfZXJhc2Uoc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMsIGludCBlcmFzZWRfc2l6ZSkKLXsKLQlzdHJ1Y3QgamZmc19mbSAqZm07Ci0Jc3RydWN0IGpmZnNfZm0gKmRlbDsKLQotCUFTU0VSVChpZiAoIWZtYykgewotCQlwcmludGsoS0VSTl9FUlIgImpmZnNfc3luY19lcmFzZSgpOiBmbWMgPT0gTlVMTFxuIik7Ci0JCXJldHVybjsKLQl9KTsKLQotCWZtYy0+ZGlydHlfc2l6ZSAtPSBlcmFzZWRfc2l6ZTsKLQlmbWMtPmZyZWVfc2l6ZSArPSBlcmFzZWRfc2l6ZTsKLQotCWZvciAoZm0gPSBmbWMtPmhlYWQ7IGZtICYmIChlcmFzZWRfc2l6ZSA+IDApOykgewotCQlpZiAoZXJhc2VkX3NpemUgPj0gZm0tPnNpemUpIHsKLQkJCWVyYXNlZF9zaXplIC09IGZtLT5zaXplOwotCQkJZGVsID0gZm07Ci0JCQlmbSA9IGZtLT5uZXh0OwotCQkJZm0tPnByZXYgPSBOVUxMOwotCQkJZm1jLT5oZWFkID0gZm07Ci0JCQlqZmZzX2ZyZWVfZm0oZGVsKTsKLQkJfQotCQllbHNlIHsKLQkJCWZtLT5zaXplIC09IGVyYXNlZF9zaXplOwotCQkJZm0tPm9mZnNldCArPSBlcmFzZWRfc2l6ZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi0KLS8qIFJldHVybiB0aGUgb2xkZXN0IHVzZWQgbm9kZSBpbiB0aGUgZmxhc2ggbWVtb3J5LiAgKi8KLXN0cnVjdCBqZmZzX25vZGUgKgotamZmc19nZXRfb2xkZXN0X25vZGUoc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMpCi17Ci0Jc3RydWN0IGpmZnNfZm0gKmZtOwotCXN0cnVjdCBqZmZzX25vZGVfcmVmICpucmVmOwotCXN0cnVjdCBqZmZzX25vZGUgKm5vZGUgPSBOVUxMOwotCi0JQVNTRVJUKGlmICghZm1jKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiamZmc19nZXRfb2xkZXN0X25vZGUoKTogZm1jID09IE5VTExcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9KTsKLQotCWZvciAoZm0gPSBmbWMtPmhlYWQ7IGZtICYmICFmbS0+bm9kZXM7IGZtID0gZm0tPm5leHQpOwotCi0JaWYgKCFmbSkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKiBUaGUgb2xkZXN0IG5vZGUgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByZWZlcmVuY2UgbGlzdC4gIFRoaXMgbGlzdAotCSAgIHNob3VsZG4ndCBiZSB0b28gbG9uZzsganVzdCBvbmUgb3IgcGVyaGFwcyB0d28gZWxlbWVudHMuICAqLwotCWZvciAobnJlZiA9IGZtLT5ub2RlczsgbnJlZjsgbnJlZiA9IG5yZWYtPm5leHQpIHsKLQkJbm9kZSA9IG5yZWYtPm5vZGU7Ci0JfQotCi0JRDIocHJpbnRrKCJqZmZzX2dldF9vbGRlc3Rfbm9kZSgpOiBpbm8gPSAldSwgdmVyc2lvbiA9ICV1XG4iLAotCQkgIChub2RlID8gbm9kZS0+aW5vIDogMCksIChub2RlID8gbm9kZS0+dmVyc2lvbiA6IDApKSk7Ci0KLQlyZXR1cm4gbm9kZTsKLX0KLQotCi0jaWYgZGVmaW5lZChKRkZTX01BUktfT0JTT0xFVEUpICYmIEpGRlNfTUFSS19PQlNPTEVURQotCi0vKiBNYXJrIGFuIG9uLWZsYXNoIG5vZGUgYXMgb2Jzb2xldGUuCi0KLSAgIE5vdGUgdGhhdCB0aGlzIGlzIGp1c3QgYW4gb3B0aW1pemF0aW9uIHRoYXQgaXNuJ3QgbmVjZXNzYXJ5IGZvciB0aGUKLSAgIGZpbGVzeXN0ZW0gdG8gd29yay4gICovCi0KLXN0YXRpYyBpbnQKLWpmZnNfbWFya19vYnNvbGV0ZShzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYywgX191MzIgZm1fb2Zmc2V0KQotewotCS8qIFRoZSBgYWNjdXJhdGVfcG9zJyBob2xkcyB0aGUgcG9zaXRpb24gb2YgdGhlIGFjY3VyYXRlIGJ5dGUKLQkgICBpbiB0aGUgamZmc19yYXdfaW5vZGUgc3RydWN0dXJlIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG1hcmsKLQkgICBhcyBvYnNvbGV0ZS4gICovCi0JX191MzIgYWNjdXJhdGVfcG9zID0gZm1fb2Zmc2V0ICsgSkZGU19SQVdfSU5PREVfQUNDVVJBVEVfT0ZGU0VUOwotCXVuc2lnbmVkIGNoYXIgemVybyA9IDB4MDA7Ci0Jc2l6ZV90IGxlbjsKLQotCUQzKHByaW50aygiamZmc19tYXJrX29ic29sZXRlKCk6IGFjY3VyYXRlX3BvcyA9ICV1XG4iLCBhY2N1cmF0ZV9wb3MpKTsKLQlBU1NFUlQoaWYgKCFmbWMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJqZmZzX21hcmtfb2Jzb2xldGUoKTogZm1jID09IE5VTExcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfSk7Ci0KLQkvKiBXcml0ZSAweDAwIHRvIHRoZSByYXcgaW5vZGUncyBhY2N1cmF0ZSBtZW1iZXIuICBEb24ndCBjYXJlCi0JICAgYWJvdXQgdGhlIHJldHVybiB2YWx1ZS4gICovCi0JTVREX1dSSVRFKGZtYy0+bXRkLCBhY2N1cmF0ZV9wb3MsIDEsICZsZW4sICZ6ZXJvKTsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIEpGRlNfTUFSS19PQlNPTEVURSAgKi8KLQotLyogY2hlY2sgaWYgaXQncyBwb3NzaWJsZSB0byBlcmFzZSB0aGUgd2FudGVkIHJhbmdlLCBhbmQgaWYgbm90LCByZXR1cm4KLSAqIHRoZSByYW5nZSB0aGF0IElTIGVyYXNhYmxlLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCi0gKi8KLXN0YXRpYyBsb25nCi1qZmZzX2ZsYXNoX2VyYXNhYmxlX3NpemUoc3RydWN0IG10ZF9pbmZvICptdGQsIF9fdTMyIG9mZnNldCwgX191MzIgc2l6ZSkKLXsKLSAgICAgICAgIHVfbG9uZyBzc2l6ZTsKLQotCS8qIGFzc3VtZSB0aGF0IHNlY3RvciBzaXplIGZvciBhIHBhcnRpdGlvbiBpcyBjb25zdGFudCBldmVuCi0JICogaWYgaXQgc3BhbnMgbW9yZSB0aGFuIG9uZSBjaGlwICh5b3UgdXN1YWxseSBwdXQgdGhlIHNhbWUKLQkgKiB0eXBlIG9mIGNoaXBzIGluIGEgc3lzdGVtKQotCSAqLwotCi0gICAgICAgIHNzaXplID0gbXRkLT5lcmFzZXNpemU7Ci0KLQlpZiAob2Zmc2V0ICUgc3NpemUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiamZmc19mbGFzaF9lcmFzYWJsZV9zaXplKCkgZ2l2ZW4gbm9uLWFsaWduZWQgb2Zmc2V0ICV4IChlcmFzZXNpemUgJWx4KVxuIiwgb2Zmc2V0LCBzc2l6ZSk7Ci0JCS8qIFRoZSBvZmZzZXQgaXMgbm90IHNlY3RvciBzaXplIGFsaWduZWQuICAqLwotCQlyZXR1cm4gLTE7Ci0JfQotCWVsc2UgaWYgKG9mZnNldCA+IG10ZC0+c2l6ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzX2ZsYXNoX2VyYXNhYmxlX3NpemUgZ2l2ZW4gb2Zmc2V0IG9mZiB0aGUgZW5kIG9mIGRldmljZSAoJXggPiAleClcbiIsIG9mZnNldCwgbXRkLT5zaXplKTsKLQkJcmV0dXJuIC0yOwotCX0KLQllbHNlIGlmIChvZmZzZXQgKyBzaXplID4gbXRkLT5zaXplKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnNfZmxhc2hfZXJhc2FibGVfc2l6ZSgpIGdpdmVuIGxlbmd0aCB3aGljaCBydW5zIG9mZiB0aGUgZW5kIG9mIGRldmljZSAob2ZzICV4ICsgbGVuICV4ID0gJXgsID4gJXgpXG4iLCBvZmZzZXQsc2l6ZSwgb2Zmc2V0K3NpemUsIG10ZC0+c2l6ZSk7Ci0JCXJldHVybiAtMzsKLQl9Ci0KLQlyZXR1cm4gKHNpemUgLyBzc2l6ZSkgKiBzc2l6ZTsKLX0KLQotCi0vKiBIb3cgbXVjaCBkaXJ0eSBmbGFzaCBtZW1vcnkgaXMgcG9zc2libGUgdG8gZXJhc2UgYXQgdGhlIG1vbWVudD8gICovCi1sb25nCi1qZmZzX2VyYXNhYmxlX3NpemUoc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMpCi17Ci0Jc3RydWN0IGpmZnNfZm0gKmZtOwotCV9fdTMyIHNpemUgPSAwOwotCWxvbmcgcmV0OwotCi0JQVNTRVJUKGlmICghZm1jKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiamZmc19lcmFzYWJsZV9zaXplKCk6IGZtYyA9IE5VTExcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfSk7Ci0KLQlpZiAoIWZtYy0+aGVhZCkgewotCQkvKiBUaGUgZmxhc2ggbWVtb3J5IGlzIHRvdGFsbHkgZW1wdHkuIE5vIG5vZGVzLiBObyBkaXJ0LgotCQkgICBKdXN0IHJldHVybi4gICovCi0JCXJldHVybiAwOwotCX0KLQotCS8qIENhbGN1bGF0ZSBob3cgbXVjaCBzcGFjZSB0aGF0IGlzIGRpcnR5LiAgKi8KLQlmb3IgKGZtID0gZm1jLT5oZWFkOyBmbSAmJiAhZm0tPm5vZGVzOyBmbSA9IGZtLT5uZXh0KSB7Ci0JCWlmIChzaXplICYmIGZtLT5vZmZzZXQgPT0gMCkgewotCQkJLyogV2UgaGF2ZSByZWFjaGVkIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZsYXNoLiAgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCXNpemUgKz0gZm0tPnNpemU7Ci0JfQotCi0JLyogU29tZW9uZSdzIHNpZ25hdHVyZSBjb250YWluZWQgdGhpczoKLQkgICBUaGVyZSdzIGEgZmluZSBsaW5lIGJldHdlZW4gZmlzaGluZyBhbmQganVzdCBzdGFuZGluZyBvbgotCSAgIHRoZSBzaG9yZSBsaWtlIGFuIGlkaW90Li4uICAqLwotCXJldCA9IGpmZnNfZmxhc2hfZXJhc2FibGVfc2l6ZShmbWMtPm10ZCwgZm1jLT5oZWFkLT5vZmZzZXQsIHNpemUpOwotCi0JQVNTRVJUKGlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiamZmc19lcmFzYWJsZV9zaXplOiBmbGFzaF9lcmFzYWJsZV9zaXplKCkgIgotCQkgICAgICAgInJldHVybmVkIHNvbWV0aGluZyBsZXNzIHRoYW4gemVybyAoJWxkKS5cbiIsIHJldCk7Ci0JCXByaW50aygiamZmc19lcmFzYWJsZV9zaXplOiBvZmZzZXQgPSAweCUwOHhcbiIsCi0JCSAgICAgICBmbWMtPmhlYWQtPm9mZnNldCk7Ci0JfSk7Ci0KLQkvKiBJZiB0aGVyZSBpcyBkaXJ0IG9uIHRoZSBmbGFzaCAod2hpY2ggaXMgdGhlIHJlYXNvbiB0byB3aHkKLQkgICB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQgaW4gdGhlIGZpcnN0IHBsYWNlKSBidXQgbm8gc3BhY2UgaXMKLQkgICBwb3NzaWJsZSB0byBlcmFzZSByaWdodCBub3csIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGxpc3Qgb2YKLQkgICBqZmZzX2ZtIHN0cnVjdHMsIHRoYXQgaG9sZCBwbGFjZSBmb3IgZGlydHkgc3BhY2UsIGNvdWxkIHBlcmhhcHMKLQkgICBiZSBzaG9ydGVuZWQuICBUaGUgbGlzdCdzIGluaXRpYWwgImRpcnR5IiBlbGVtZW50cyBhcmUgbWVyZ2VkCi0JICAgaW50byBqdXN0IG9uZSBsYXJnZSBkaXJ0eSBqZmZzX2ZtIHN0cnVjdC4gIFRoaXMgb3BlcmF0aW9uIG11c3QKLQkgICBvbmx5IGJlIHBlcmZvcm1lZCBpZiBub3RoaW5nIGlzIHBvc3NpYmxlIHRvIGVyYXNlLiAgT3RoZXJ3aXNlLAotCSAgIGpmZnNfY2xlYXJfZW5kX29mX25vZGUoKSB3b24ndCB3b3JrIGFzIGV4cGVjdGVkLiAgKi8KLQlpZiAocmV0ID09IDApIHsKLQkJc3RydWN0IGpmZnNfZm0gKmhlYWQgPSBmbWMtPmhlYWQ7Ci0JCXN0cnVjdCBqZmZzX2ZtICpkZWw7Ci0JCS8qIFdoaWxlIHRoZXJlIGFyZSB0d28gZGlydHkgbm9kZXMgYmVzaWRlIGVhY2ggb3RoZXIuKi8KLQkJd2hpbGUgKGhlYWQtPm5vZGVzID09IDAKLQkJICAgICAgICYmIGhlYWQtPm5leHQKLQkJICAgICAgICYmIGhlYWQtPm5leHQtPm5vZGVzID09IDApIHsKLQkJCWRlbCA9IGhlYWQtPm5leHQ7Ci0JCQloZWFkLT5zaXplICs9IGRlbC0+c2l6ZTsKLQkJCWhlYWQtPm5leHQgPSBkZWwtPm5leHQ7Ci0JCQlpZiAoZGVsLT5uZXh0KSB7Ci0JCQkJZGVsLT5uZXh0LT5wcmV2ID0gaGVhZDsKLQkJCX0KLQkJCWpmZnNfZnJlZV9mbShkZWwpOwotCQl9Ci0JfQotCi0JcmV0dXJuIChyZXQgPj0gMCA/IHJldCA6IDApOwotfQotCi1zdGF0aWMgc3RydWN0IGpmZnNfZm0gKmpmZnNfYWxsb2NfZm0odm9pZCkKLXsKLQlzdHJ1Y3QgamZmc19mbSAqZm07Ci0KLQlmbSA9IGttZW1fY2FjaGVfYWxsb2MoZm1fY2FjaGUsR0ZQX0tFUk5FTCk7Ci0JREpNKGlmIChmbSkgbm9famZmc19mbSsrOyk7Ci0JCi0JcmV0dXJuIGZtOwotfQotCi1zdGF0aWMgdm9pZCBqZmZzX2ZyZWVfZm0oc3RydWN0IGpmZnNfZm0gKm4pCi17Ci0Ja21lbV9jYWNoZV9mcmVlKGZtX2NhY2hlLG4pOwotCURKTShub19qZmZzX2ZtLS0pOwotfQotCi0KLQotc3RydWN0IGpmZnNfbm9kZSAqamZmc19hbGxvY19ub2RlKHZvaWQpCi17Ci0Jc3RydWN0IGpmZnNfbm9kZSAqbjsKLQotCW4gPSAoc3RydWN0IGpmZnNfbm9kZSAqKWttZW1fY2FjaGVfYWxsb2Mobm9kZV9jYWNoZSxHRlBfS0VSTkVMKTsKLQlpZihuICE9IE5VTEwpCi0JCW5vX2pmZnNfbm9kZSsrOwotCXJldHVybiBuOwotfQotCi12b2lkIGpmZnNfZnJlZV9ub2RlKHN0cnVjdCBqZmZzX25vZGUgKm4pCi17Ci0Ja21lbV9jYWNoZV9mcmVlKG5vZGVfY2FjaGUsbik7Ci0Jbm9famZmc19ub2RlLS07Ci19Ci0KLQotaW50IGpmZnNfZ2V0X25vZGVfaW51c2Uodm9pZCkKLXsKLQlyZXR1cm4gbm9famZmc19ub2RlOwotfQpkaWZmIC0tZ2l0IGEvZnMvamZmcy9qZmZzX2ZtLmggYi9mcy9qZmZzL2pmZnNfZm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVlNmFkMi4uMDAwMDAwMAotLS0gYS9mcy9qZmZzL2pmZnNfZm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogSkZGUyAtLSBKb3VybmFsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBMaW51eCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIuCi0gKgotICogQ3JlYXRlZCBieSBGaW5uIEhha2Fuc3NvbiA8ZmlubkBheGlzLmNvbT4uCi0gKgotICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogJElkOiBqZmZzX2ZtLmgsdiAxLjEzIDIwMDEvMDEvMTEgMTI6MDM6MjUgZHdtdzIgRXhwICQKLSAqCi0gKiBQb3J0ZWQgdG8gTGludXggMi4zLnggYW5kIE1URDoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAgQWxleGFuZGVyIExhcnNzb24gKGFsZXhAY2VuZGlvLnNlKSwgQ2VuZGlvIFN5c3RlbXMgQUIKLSAqCi0gKi8KLQotI2lmbmRlZiBfX0xJTlVYX0pGRlNfRk1fSF9fCi0jZGVmaW5lIF9fTElOVVhfSkZGU19GTV9IX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvamZmcy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0vKiBUaGUgYWxpZ25tZW50IGJldHdlZW4gdHdvIG5vZGVzIGluIHRoZSBmbGFzaCBtZW1vcnkuICAqLwotI2RlZmluZSBKRkZTX0FMSUdOX1NJWkUgNAotCi0vKiBNYXJrIHRoZSBvbi1mbGFzaCBzcGFjZSBhcyBvYnNvbGV0ZSB3aGVuIGFwcHJvcHJpYXRlLiAgKi8KLSNkZWZpbmUgSkZGU19NQVJLX09CU09MRVRFIDAKLQotI2lmbmRlZiBDT05GSUdfSkZGU19GU19WRVJCT1NFCi0jZGVmaW5lIENPTkZJR19KRkZTX0ZTX1ZFUkJPU0UgMQotI2VuZGlmCi0KLSNpZiBDT05GSUdfSkZGU19GU19WRVJCT1NFID4gMAotI2RlZmluZSBEKHgpIHgKLSNkZWZpbmUgRDEoeCkgRCh4KQotI2Vsc2UKLSNkZWZpbmUgRCh4KQotI2RlZmluZSBEMSh4KQotI2VuZGlmCi0KLSNpZiBDT05GSUdfSkZGU19GU19WRVJCT1NFID4gMQotI2RlZmluZSBEMih4KSBEKHgpCi0jZWxzZQotI2RlZmluZSBEMih4KQotI2VuZGlmCi0KLSNpZiBDT05GSUdfSkZGU19GU19WRVJCT1NFID4gMgotI2RlZmluZSBEMyh4KSBEKHgpCi0jZWxzZQotI2RlZmluZSBEMyh4KQotI2VuZGlmCi0KLSNkZWZpbmUgQVNTRVJUKHgpIHgKLQotLyogSG93IG1hbnkgcGFkZGluZyBieXRlcyBzaG91bGQgYmUgaW5zZXJ0ZWQgYmV0d2VlbiB0d28gY2h1bmtzIG9mIGRhdGEKLSAgIG9uIHRoZSBmbGFzaD8gICovCi0jZGVmaW5lIEpGRlNfR0VUX1BBRF9CWVRFUyhzaXplKSAoIChKRkZTX0FMSUdOX1NJWkUtMSkgJiAtKF9fdTMyKShzaXplKSApCi0jZGVmaW5lIEpGRlNfUEFEKHNpemUpICggKHNpemUgKyAoSkZGU19BTElHTl9TSVpFLTEpKSAmIH4oSkZGU19BTElHTl9TSVpFLTEpICkKLQotCi0KLXN0cnVjdCBqZmZzX25vZGVfcmVmCi17Ci0Jc3RydWN0IGpmZnNfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgamZmc19ub2RlX3JlZiAqbmV4dDsKLX07Ci0KLQotLyogVGhlIHN0cnVjdCBqZmZzX2ZtIHJlcHJlc2VudHMgYSBjaHVuayBvZiBkYXRhIGluIHRoZSBmbGFzaCBtZW1vcnkuICAqLwotc3RydWN0IGpmZnNfZm0KLXsKLQlfX3UzMiBvZmZzZXQ7Ci0JX191MzIgc2l6ZTsKLQlzdHJ1Y3QgamZmc19mbSAqcHJldjsKLQlzdHJ1Y3QgamZmc19mbSAqbmV4dDsKLQlzdHJ1Y3QgamZmc19ub2RlX3JlZiAqbm9kZXM7IC8qIFVTRUQgaWYgIT0gMC4gICovCi19OwotCi1zdHJ1Y3QgamZmc19mbWNvbnRyb2wKLXsKLQlfX3UzMiBmbGFzaF9zaXplOwotCV9fdTMyIHVzZWRfc2l6ZTsKLQlfX3UzMiBkaXJ0eV9zaXplOwotCV9fdTMyIGZyZWVfc2l6ZTsKLQlfX3UzMiBzZWN0b3Jfc2l6ZTsKLQlfX3UzMiBtaW5fZnJlZV9zaXplOyAgLyogVGhlIG1pbmltdW0gZnJlZSBzcGFjZSBuZWVkZWQgdG8gYmUgYWJsZQotCQkJCSB0byBwZXJmb3JtIGdhcmJhZ2UgY29sbGVjdGlvbnMuICAqLwotCV9fdTMyIG1heF9jaHVua19zaXplOyAvKiBUaGUgbWF4aW11bSBzaXplIG9mIGEgY2h1bmsgb2YgZGF0YS4gICovCi0Jc3RydWN0IG10ZF9pbmZvICptdGQ7Ci0Jc3RydWN0IGpmZnNfY29udHJvbCAqYzsKLQlzdHJ1Y3QgamZmc19mbSAqaGVhZDsKLQlzdHJ1Y3QgamZmc19mbSAqdGFpbDsKLQlzdHJ1Y3QgamZmc19mbSAqaGVhZF9leHRyYTsKLQlzdHJ1Y3QgamZmc19mbSAqdGFpbF9leHRyYTsKLQlzdHJ1Y3QgbXV0ZXggYmlnbG9jazsKLX07Ci0KLS8qIE5vdGljZSB0aGUgdHdvIG1lbWJlcnMgaGVhZF9leHRyYSBhbmQgdGFpbF9leHRyYSBpbiB0aGUgamZmc19jb250cm9sCi0gICBzdHJ1Y3R1cmUgYWJvdmUuIFRob3NlIGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBzY2FubmluZyBvZiB0aGUgZmxhc2gKLSAgIG1lbW9yeTsgd2hpbGUgdGhlIGZpbGUgc3lzdGVtIGlzIGJlaW5nIGJ1aWx0LiBJZiB0aGUgZGF0YSBpbiB0aGUgZmxhc2gKLSAgIG1lbW9yeSBpcyBvcmdhbml6ZWQgbGlrZQotCi0gICAgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgIFVTRUQgLyBESVJUWSAgfCAgICAgICBGUkVFICAgICAgIHwgIFVTRUQgLyBESVJUWSAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCi0KLSAgIHRoZW4gdGhlIHNjYW4gaXMgc3BsaXQgaW4gdHdvIHBhcnRzLiBUaGUgZmlyc3Qgc2Nhbm5lZCBwYXJ0IG9mIHRoZQotICAgZmxhc2ggbWVtb3J5IGlzIG9yZ2FuaXplZCB0aHJvdWdoIHRoZSBtZW1iZXJzIGhlYWQgYW5kIHRhaWwuIFRoZQotICAgc2Vjb25kIHNjYW5uZWQgcGFydCBpcyBvcmdhbml6ZWQgd2l0aCBoZWFkX2V4dHJhIGFuZCB0YWlsX2V4dHJhLiBXaGVuCi0gICB0aGUgc2NhbiBpcyBjb21wbGV0ZWQsIHRoZSB0d28gbGlzdHMgYXJlIG1lcmdlZCB0b2dldGhlci4gVGhlIGpmZnNfZm0KLSAgIHN0cnVjdCB0aGF0IGhlYWRfZXh0cmEgcmVmZXJlbmNlcyBpcyB0aGUgbG9naWNhbCBiZWdpbm5pbmcgb2YgdGhlCi0gICBmbGFzaCBtZW1vcnkgc28gaXQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IHRoZSBoZWFkIG1lbWJlci4gICovCi0KLQotCi1zdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmpmZnNfYnVpbGRfYmVnaW4oc3RydWN0IGpmZnNfY29udHJvbCAqYywgaW50IHVuaXQpOwotdm9pZCBqZmZzX2J1aWxkX2VuZChzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKmZtYyk7Ci12b2lkIGpmZnNfY2xlYW51cF9mbWNvbnRyb2woc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMpOwotCi1pbnQgamZmc19mbWFsbG9jKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jLCBfX3UzMiBzaXplLAotCQkgc3RydWN0IGpmZnNfbm9kZSAqbm9kZSwgc3RydWN0IGpmZnNfZm0gKipyZXN1bHQpOwotaW50IGpmZnNfZm1mcmVlKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jLCBzdHJ1Y3QgamZmc19mbSAqZm0sCi0JCXN0cnVjdCBqZmZzX25vZGUgKm5vZGUpOwotCi1fX3UzMiBqZmZzX2ZyZWVfc2l6ZTEoc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMpOwotX191MzIgamZmc19mcmVlX3NpemUyKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jKTsKLXZvaWQgamZmc19zeW5jX2VyYXNlKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jLCBpbnQgZXJhc2VkX3NpemUpOwotc3RydWN0IGpmZnNfZm0gKmpmZnNfY3V0X25vZGUoc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMsIF9fdTMyIHNpemUpOwotc3RydWN0IGpmZnNfbm9kZSAqamZmc19nZXRfb2xkZXN0X25vZGUoc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMpOwotbG9uZyBqZmZzX2VyYXNhYmxlX3NpemUoc3RydWN0IGpmZnNfZm1jb250cm9sICpmbWMpOwotc3RydWN0IGpmZnNfZm0gKmpmZnNfZm1hbGxvY2VkKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jLCBfX3UzMiBvZmZzZXQsCi0JCQkgICAgICAgX191MzIgc2l6ZSwgc3RydWN0IGpmZnNfbm9kZSAqbm9kZSk7Ci1pbnQgamZmc19hZGRfbm9kZShzdHJ1Y3QgamZmc19ub2RlICpub2RlKTsKLXZvaWQgamZmc19mbWZyZWVfcGFydGx5KHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jLCBzdHJ1Y3QgamZmc19mbSAqZm0sCi0JCQlfX3UzMiBzaXplKTsKLQotI2lmIENPTkZJR19KRkZTX0ZTX1ZFUkJPU0UgPiAwCi12b2lkIGpmZnNfcHJpbnRfZm1jb250cm9sKHN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jKTsKLSNlbmRpZgotI2lmIDAKLXZvaWQgamZmc19wcmludF9ub2RlX3JlZihzdHJ1Y3QgamZmc19ub2RlX3JlZiAqcmVmKTsKLSNlbmRpZiAgLyogIDAgICovCi0KLSNlbmRpZiAvKiBfX0xJTlVYX0pGRlNfRk1fSF9fICAqLwpkaWZmIC0tZ2l0IGEvZnMvamZmcy9qZmZzX3Byb2MuYyBiL2ZzL2pmZnMvamZmc19wcm9jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZGQ5OWEuLjAwMDAwMDAKLS0tIGEvZnMvamZmcy9qZmZzX3Byb2MuYworKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi0vKgotICogSkZGUyAtLSBKb3VybmFsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBMaW51eCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIuCi0gKgotICogQ3JlYXRlZCBieSBTaW1vbiBLYWdzdHJvbSA8c2ltb25rQGF4aXMuY29tPi4KLSAqCi0gKiAkSWQ6IGpmZnNfcHJvYy5jLHYgMS41IDIwMDEvMDYvMDIgMTQ6MzQ6NTUgZHdtdzIgRXhwICQKLSAqCi0gKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgT3ZlcnZpZXc6Ci0gKiAgIFRoaXMgZmlsZSBkZWZpbmVzIEpGRlMgcGFydGl0aW9uIGVudHJpZXMgaW4gdGhlIHByb2MgZmlsZSBzeXN0ZW0uCi0gKgotICogIFRPRE86Ci0gKiAgIENyZWF0ZSBzb21lIG1vcmUgcHJvYyBmaWxlcyBmb3IgZGlmZmVyZW50IGtpbmRzIG9mIGluZm8sIGkuZS4gc3RhdGlzdGljcwotICogICBhYm91dCB3cml0dGVuIGFuZCByZWFkIGJ5dGVzLCBudW1iZXIgb2YgY2FsbHMgdG8gZGlmZmVyZW50IHJvdXRpbmVzLAotICogICByZXBvcnRzIGFib3V0IGZhaWx1cmVzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvamZmcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSAiamZmc19mbS5oIgotI2luY2x1ZGUgImpmZnNfcHJvYy5oIgotCi0vKgotICogU3RydWN0dXJlIGZvciBhIEpGRlMgcGFydGl0aW9uIGluIHRoZSBzeXN0ZW0KLSAqLwotc3RydWN0IGpmZnNfcGFydGl0aW9uX2RpciB7Ci0Jc3RydWN0IGpmZnNfY29udHJvbCAqYzsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcnRfcm9vdDsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcnRfaW5mbzsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcnRfbGF5b3V0OwotCXN0cnVjdCBqZmZzX3BhcnRpdGlvbl9kaXIgKm5leHQ7Ci19OwotCi0vKgotICogU3RydWN0dXJlIGZvciB0b3AtbGV2ZWwgZW50cnkgaW4gJy9wcm9jL2ZzJyBkaXJlY3RvcnkKLSAqLwotc3RydWN0IHByb2NfZGlyX2VudHJ5ICpqZmZzX3Byb2Nfcm9vdDsKLQotLyoKLSAqIExpbmtlZCBsaXN0IG9mICdqZmZzX3BhcnRpdGlvbl9kaXJzJyB0byBoZWxwIHVzIHRyYWNrCi0gKiB0aGUgbW91bnRlZCBKRkZTIHBhcnRpdGlvbnMgaW4gdGhlIHN5c3RlbQotICovCi1zdGF0aWMgc3RydWN0IGpmZnNfcGFydGl0aW9uX2RpciAqamZmc19wYXJ0X2RpcnM7Ci0KLS8qCi0gKiBSZWFkIGZ1bmN0aW9ucyBmb3IgZW50cmllcwotICovCi1zdGF0aWMgaW50IGpmZnNfcHJvY19pbmZvX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotc3RhdGljIGludCBqZmZzX3Byb2NfbGF5b3V0X3JlYWQgKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLQotCi0vKgotICogUmVnaXN0ZXIgYSBKRkZTIHBhcnRpdGlvbiBkaXJlY3RvcnkgKGNhbGxlZCB1cG9uIG1vdW50KQotICovCi1pbnQgamZmc19yZWdpc3Rlcl9qZmZzX3Byb2NfZGlyKGludCBtdGQsIHN0cnVjdCBqZmZzX2NvbnRyb2wgKmMpCi17Ci0Jc3RydWN0IGpmZnNfcGFydGl0aW9uX2RpciAqcGFydF9kaXI7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJ0X2luZm8gPSBOVUxMOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFydF9sYXlvdXQgPSBOVUxMOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFydF9yb290ID0gTlVMTDsKLQljaGFyIG5hbWVbMTBdOwotCi0Jc3ByaW50ZihuYW1lLCAiJWQiLCBtdGQpOwotCS8qIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgbG9jYWwgSkZGUyBwYXJ0aXRpb24gdGFibGUgKi8KLQlwYXJ0X2RpciA9IChzdHJ1Y3QgamZmc19wYXJ0aXRpb25fZGlyICopCi0JCWttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgamZmc19wYXJ0aXRpb25fZGlyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYXJ0X2RpcikKLQkJZ290byBvdXQ7Ci0KLQkvKiBDcmVhdGUgZW50cnkgZm9yIHRoaXMgcGFydGl0aW9uICovCi0JcGFydF9yb290ID0gcHJvY19ta2RpcihuYW1lLCBqZmZzX3Byb2Nfcm9vdCk7Ci0JaWYgKCFwYXJ0X3Jvb3QpCi0JCWdvdG8gb3V0MTsKLQotCS8qIENyZWF0ZSBlbnRyeSBmb3IgJ2luZm8nIGZpbGUgKi8KLQlwYXJ0X2luZm8gPSBjcmVhdGVfcHJvY19lbnRyeSAoImluZm8iLCAwLCBwYXJ0X3Jvb3QpOwotCWlmICghcGFydF9pbmZvKQotCQlnb3RvIG91dDI7Ci0JcGFydF9pbmZvLT5yZWFkX3Byb2MgPSBqZmZzX3Byb2NfaW5mb19yZWFkOwotCXBhcnRfaW5mby0+ZGF0YSA9ICh2b2lkICopIGM7Ci0KLQkvKiBDcmVhdGUgZW50cnkgZm9yICdsYXlvdXQnIGZpbGUgKi8KLQlwYXJ0X2xheW91dCA9IGNyZWF0ZV9wcm9jX2VudHJ5ICgibGF5b3V0IiwgMCwgcGFydF9yb290KTsKLQlpZiAoIXBhcnRfbGF5b3V0KQotCQlnb3RvIG91dDM7Ci0JcGFydF9sYXlvdXQtPnJlYWRfcHJvYyA9IGpmZnNfcHJvY19sYXlvdXRfcmVhZDsKLQlwYXJ0X2xheW91dC0+ZGF0YSA9ICh2b2lkICopIGM7Ci0KLQkvKiBGaWxsIGluIHN0cnVjdHVyZSBmb3IgdGFibGUgYW5kIGluc2VydCBpbiB0aGUgbGlzdCAqLwotCXBhcnRfZGlyLT5jID0gYzsKLQlwYXJ0X2Rpci0+cGFydF9yb290ID0gcGFydF9yb290OwotCXBhcnRfZGlyLT5wYXJ0X2luZm8gPSBwYXJ0X2luZm87Ci0JcGFydF9kaXItPnBhcnRfbGF5b3V0ID0gcGFydF9sYXlvdXQ7Ci0JcGFydF9kaXItPm5leHQgPSBqZmZzX3BhcnRfZGlyczsKLQlqZmZzX3BhcnRfZGlycyA9IHBhcnRfZGlyOwotCi0JLyogUmV0dXJuIGhhcHB5ICovCi0JcmV0dXJuIDA7Ci0KLW91dDM6Ci0JcmVtb3ZlX3Byb2NfZW50cnkoImluZm8iLCBwYXJ0X3Jvb3QpOwotb3V0MjoKLQlyZW1vdmVfcHJvY19lbnRyeShuYW1lLCBqZmZzX3Byb2Nfcm9vdCk7Ci1vdXQxOgotCWtmcmVlKHBhcnRfZGlyKTsKLW91dDoKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotCi0vKgotICogVW5yZWdpc3RlciBhIEpGRlMgcGFydGl0aW9uIGRpcmVjdG9yeSAoY2FsbGVkIGF0IHVtb3VudCkKLSAqLwotaW50IGpmZnNfdW5yZWdpc3Rlcl9qZmZzX3Byb2NfZGlyKHN0cnVjdCBqZmZzX2NvbnRyb2wgKmMpCi17Ci0Jc3RydWN0IGpmZnNfcGFydGl0aW9uX2RpciAqcGFydF9kaXIgPSBqZmZzX3BhcnRfZGlyczsKLQlzdHJ1Y3QgamZmc19wYXJ0aXRpb25fZGlyICpwcmV2X3BhcnRfZGlyID0gTlVMTDsKLQotCXdoaWxlIChwYXJ0X2RpcikgewotCQlpZiAocGFydF9kaXItPmMgPT0gYykgewotCQkJLyogUmVtb3ZlIGVudHJpZXMgZm9yIHBhcnRpdGlvbiAqLwotCQkJcmVtb3ZlX3Byb2NfZW50cnkgKHBhcnRfZGlyLT5wYXJ0X2luZm8tPm5hbWUsCi0JCQkJcGFydF9kaXItPnBhcnRfcm9vdCk7Ci0JCQlyZW1vdmVfcHJvY19lbnRyeSAocGFydF9kaXItPnBhcnRfbGF5b3V0LT5uYW1lLAotCQkJCXBhcnRfZGlyLT5wYXJ0X3Jvb3QpOwotCQkJcmVtb3ZlX3Byb2NfZW50cnkgKHBhcnRfZGlyLT5wYXJ0X3Jvb3QtPm5hbWUsCi0JCQkJamZmc19wcm9jX3Jvb3QpOwotCi0JCQkvKiBSZW1vdmUgZW50cnkgZnJvbSBsaXN0ICovCi0JCQlpZiAocHJldl9wYXJ0X2RpcikKLQkJCQlwcmV2X3BhcnRfZGlyLT5uZXh0ID0gcGFydF9kaXItPm5leHQ7Ci0JCQllbHNlCi0JCQkJamZmc19wYXJ0X2RpcnMgPSBwYXJ0X2Rpci0+bmV4dDsKLQotCQkJLyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IG9uZQotCQkJICogYW5kIHJlbW92ZSB0aGUgZW50cnkgZnJvbSAnL3Byb2MvZnMnCi0JCQkgKiBpZiBpdCBpcy4KLQkJCSAqLwotCQkJaWYgKGpmZnNfcGFydF9kaXJzID09IHBhcnRfZGlyLT5uZXh0KQotCQkJCXJlbW92ZV9wcm9jX2VudHJ5ICgiamZmcyIsIHByb2Nfcm9vdF9mcyk7Ci0KLQkJCS8qIEZyZWUgbWVtb3J5IGZvciBlbnRyeSAqLwotCQkJa2ZyZWUocGFydF9kaXIpOwotCi0JCQkvKiBSZXR1cm4gaGFwcHkgKi8KLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogTW92ZSB0byBuZXh0IGVudHJ5ICovCi0JCXByZXZfcGFydF9kaXIgPSBwYXJ0X2RpcjsKLQkJcGFydF9kaXIgPSBwYXJ0X2Rpci0+bmV4dDsKLQl9Ci0KLQkvKiBSZXR1cm4gdW5oYXBweSAqLwotCXJldHVybiAtMTsKLX0KLQotCi0vKgotICogUmVhZCBhIEpGRlMgcGFydGl0aW9uJ3MgYGluZm8nIGZpbGUKLSAqLwotc3RhdGljIGludCBqZmZzX3Byb2NfaW5mb19yZWFkIChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgamZmc19jb250cm9sICpjID0gKHN0cnVjdCBqZmZzX2NvbnRyb2wgKikgZGF0YTsKLQlpbnQgbGVuID0gMDsKLQotCS8qIEdldCBpbmZvcm1hdGlvbiBvbiB0aGUgcGFyaXRpb24gKi8KLQlsZW4gKz0gc3ByaW50ZiAocGFnZSwKLQkJInBhcnRpdGlvbiBzaXplOiAgICAgJTA4bFggKCV1KVxuIgotCQkic2VjdG9yIHNpemU6ICAgICAgICAlMDhsWCAoJXUpXG4iCi0JCSJ1c2VkIHNpemU6ICAgICAgICAgICUwOGxYICgldSlcbiIKLQkJImRpcnR5IHNpemU6ICAgICAgICAgJTA4bFggKCV1KVxuIgotCQkiZnJlZSBzaXplOiAgICAgICAgICAlMDhsWCAoJXUpXG5cbiIsCi0JCSh1bnNpZ25lZCBsb25nKSBjLT5mbWMtPmZsYXNoX3NpemUsIGMtPmZtYy0+Zmxhc2hfc2l6ZSwKLQkJKHVuc2lnbmVkIGxvbmcpIGMtPmZtYy0+c2VjdG9yX3NpemUsIGMtPmZtYy0+c2VjdG9yX3NpemUsCi0JCSh1bnNpZ25lZCBsb25nKSBjLT5mbWMtPnVzZWRfc2l6ZSwgYy0+Zm1jLT51c2VkX3NpemUsCi0JCSh1bnNpZ25lZCBsb25nKSBjLT5mbWMtPmRpcnR5X3NpemUsIGMtPmZtYy0+ZGlydHlfc2l6ZSwKLQkJKHVuc2lnbmVkIGxvbmcpIChjLT5mbWMtPmZsYXNoX3NpemUgLQotCQkJKGMtPmZtYy0+dXNlZF9zaXplICsgYy0+Zm1jLT5kaXJ0eV9zaXplKSksCi0JCWMtPmZtYy0+Zmxhc2hfc2l6ZSAtIChjLT5mbWMtPnVzZWRfc2l6ZSArIGMtPmZtYy0+ZGlydHlfc2l6ZSkpOwotCi0JLyogV2UncmUgZG9uZSAqLwotCSplb2YgPSAxOwotCi0JLyogUmV0dXJuIGxlbmd0aCAqLwotCXJldHVybiBsZW47Ci19Ci0KLQotLyoKLSAqIFJlYWQgYSBKRkZTIHBhcnRpdGlvbidzIGBsYXlvdXQnIGZpbGUKLSAqLwotc3RhdGljIGludCBqZmZzX3Byb2NfbGF5b3V0X3JlYWQgKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBqZmZzX2NvbnRyb2wgKmMgPSAoc3RydWN0IGpmZnNfY29udHJvbCAqKSBkYXRhOwotCXN0cnVjdCBqZmZzX2ZtICpmbSA9IE5VTEw7Ci0Jc3RydWN0IGpmZnNfZm0gKmxhc3RfZm0gPSBOVUxMOwotCWludCBsZW4gPSAwOwotCi0JLyogR2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0ICovCi0gCWZtID0gYy0+Zm1jLT5oZWFkOwotCi0JLyogUHJpbnQgZnJlZSBzcGFjZSAqLwotCWlmIChmbSAmJiBmbS0+b2Zmc2V0KSB7Ci0JCWxlbiArPSBzcHJpbnRmIChwYWdlLCAiMDAwMDAwMDAgJTA4bFggZnJlZVxuIiwKLQkJCSh1bnNpZ25lZCBsb25nKSBmbS0+b2Zmc2V0KTsKLQl9Ci0KLQkvKiBMb29wIHRocm91Z2ggYWxsIG9mIHRoZSBmbGFzaCBjb250cm9sIHN0cnVjdHVyZXMgKi8KLQl3aGlsZSAoZm0gJiYgKGxlbiA8IChvZmYgKyBjb3VudCkpKSB7Ci0JCWlmIChmbS0+bm9kZXMpIHsKLQkJCWxlbiArPSBzcHJpbnRmIChwYWdlICsgbGVuLAotCQkJCSIlMDhsWCAlMDhsWCBpbm89JTA4bFgsIHZlcj0lMDhsWFxuIiwKLQkJCQkodW5zaWduZWQgbG9uZykgZm0tPm9mZnNldCwKLQkJCQkodW5zaWduZWQgbG9uZykgZm0tPnNpemUsCi0JCQkJKHVuc2lnbmVkIGxvbmcpIGZtLT5ub2Rlcy0+bm9kZS0+aW5vLAotCQkJCSh1bnNpZ25lZCBsb25nKSBmbS0+bm9kZXMtPm5vZGUtPnZlcnNpb24pOwotCQl9Ci0JCWVsc2UgewotCQkJbGVuICs9IHNwcmludGYgKHBhZ2UgKyBsZW4sCi0JCQkJIiUwOGxYICUwOGxYIGRpcnR5XG4iLAotCQkJCSh1bnNpZ25lZCBsb25nKSBmbS0+b2Zmc2V0LAotCQkJCSh1bnNpZ25lZCBsb25nKSBmbS0+c2l6ZSk7Ci0JCX0KLQkJbGFzdF9mbSA9IGZtOwotCQlmbSA9IGZtLT5uZXh0OwotCX0KLQotCS8qIFByaW50IGZyZWUgc3BhY2UgKi8KLQlpZiAoKGxlbiA8IChvZmYgKyBjb3VudCkpICYmIGxhc3RfZm0KLQkgICAgJiYgKGxhc3RfZm0tPm9mZnNldCA8IGMtPmZtYy0+Zmxhc2hfc2l6ZSkpIHsKLQkJbGVuICs9IHNwcmludGYgKHBhZ2UgKyBsZW4sCi0JCQkgICAgICAgIiUwOGxYICUwOGxYIGZyZWVcbiIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIGxhc3RfZm0tPm9mZnNldCArIAotCQkJCWxhc3RfZm0tPnNpemUsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIChjLT5mbWMtPmZsYXNoX3NpemUgLQotCQkJCQkJICAgIChsYXN0X2ZtLT5vZmZzZXQgKyBsYXN0X2ZtLT5zaXplKSkpOwotCX0KLQotCS8qIFdlJ3JlIGRvbmUgKi8KLQkqZW9mID0gMTsKLQotCS8qIFJldHVybiBsZW5ndGggKi8KLQlyZXR1cm4gbGVuOwotfQpkaWZmIC0tZ2l0IGEvZnMvamZmcy9qZmZzX3Byb2MuaCBiL2ZzL2pmZnMvamZmc19wcm9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YTFjNWQuLjAwMDAwMDAKLS0tIGEvZnMvamZmcy9qZmZzX3Byb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBKRkZTIC0tIEpvdXJuYWxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIExpbnV4IGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAgQXhpcyBDb21tdW5pY2F0aW9ucyBBQi4KLSAqCi0gKiBDcmVhdGVkIGJ5IFNpbW9uIEthZ3N0cm9tIDxzaW1vbmtAYXhpcy5jb20+LgotICoKLSAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICRJZDogamZmc19wcm9jLmgsdiAxLjIgMjAwMC8xMS8xNSAyMjowNDoxMiBzamhpbGwgRXhwICQKLSAqLwotCi0vKiBqZmZzX3Byb2MuaCBkZWZpbmVzIGEgc3RydWN0dXJlIGZvciBpbmNsdXNpb24gaW4gdGhlIHByb2MtZmlsZSBzeXN0ZW0uICAqLwotI2lmbmRlZiBfX0xJTlVYX0pGRlNfUFJPQ19IX18KLSNkZWZpbmUgX19MSU5VWF9KRkZTX1BST0NfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0KLS8qIFRoZSBwcm9jX2Rpcl9lbnRyeSBmb3IgamZmcyAoZGVmaW5lZCBpbiBqZmZzX3Byb2MuYykuICAqLwotZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqamZmc19wcm9jX3Jvb3Q7Ci0KLWludCBqZmZzX3JlZ2lzdGVyX2pmZnNfcHJvY19kaXIoaW50IG10ZCwgc3RydWN0IGpmZnNfY29udHJvbCAqYyk7Ci1pbnQgamZmc191bnJlZ2lzdGVyX2pmZnNfcHJvY19kaXIoc3RydWN0IGpmZnNfY29udHJvbCAqYyk7Ci0KLSNlbmRpZiAvKiBfX0xJTlVYX0pGRlNfUFJPQ19IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2J1aWxkLmMgYi9mcy9qZmZzMi9idWlsZC5jCmluZGV4IDAyODI2OTYuLjA3MTE5YzQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2J1aWxkLmMKKysrIGIvZnMvamZmczIvYnVpbGQuYwpAQCAtMzQ4LDIzICszNDgsMjcgQEAKIAogCXJldCA9IGpmZnMyX3N1bV9pbml0KGMpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0X2ZyZWU7CiAKIAlpZiAoamZmczJfYnVpbGRfZmlsZXN5c3RlbShjKSkgewogCQlkYmdfZnNidWlsZCgiYnVpbGRfZnMgZmFpbGVkXG4iKTsKIAkJamZmczJfZnJlZV9pbm9fY2FjaGVzKGMpOwogCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZnMoYyk7Ci0jaWZuZGVmIF9fRUNPUwotCQlpZiAoamZmczJfYmxvY2tzX3VzZV92bWFsbG9jKGMpKQotCQkJdmZyZWUoYy0+YmxvY2tzKTsKLQkJZWxzZQotI2VuZGlmCi0JCQlrZnJlZShjLT5ibG9ja3MpOwotCi0JCXJldHVybiAtRUlPOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dF9mcmVlOwogCX0KIAogCWpmZnMyX2NhbGNfdHJpZ2dlcl9sZXZlbHMoYyk7CiAKIAlyZXR1cm4gMDsKKworIG91dF9mcmVlOgorI2lmbmRlZiBfX0VDT1MKKwlpZiAoamZmczJfYmxvY2tzX3VzZV92bWFsbG9jKGMpKQorCQl2ZnJlZShjLT5ibG9ja3MpOworCWVsc2UKKyNlbmRpZgorCQlrZnJlZShjLT5ibG9ja3MpOworCisJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2pmZnMyX2ZzX3NiLmggYi9mcy9qZmZzMi9qZmZzMl9mc19zYi5oCmluZGV4IGI5ODU5NDkuLmVhODhmNjkgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2pmZnMyX2ZzX3NiLmgKKysrIGIvZnMvamZmczIvamZmczJfZnNfc2IuaApAQCAtOTgsMjAgKzk4LDE0IEBACiAJdWludDMyX3Qgd2J1Zl9wYWdlc2l6ZTsgLyogMCBmb3IgTk9SIGFuZCBvdGhlciBmbGFzaGVzIHdpdGggbm8gd2J1ZiAqLwogCiAjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSCi0JLyogV3JpdGUtYmVoaW5kIGJ1ZmZlciBmb3IgTkFORCBmbGFzaCAqLwotCXVuc2lnbmVkIGNoYXIgKndidWY7Ci0JdW5zaWduZWQgY2hhciAqb29iYnVmOworCXVuc2lnbmVkIGNoYXIgKndidWY7IC8qIFdyaXRlLWJlaGluZCBidWZmZXIgZm9yIE5BTkQgZmxhc2ggKi8KIAl1aW50MzJfdCB3YnVmX29mczsKIAl1aW50MzJfdCB3YnVmX2xlbjsKIAlzdHJ1Y3QgamZmczJfaW5vZGlydHkgKndidWZfaW5vZGVzOwotCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSB3YnVmX3NlbTsJLyogUHJvdGVjdHMgdGhlIHdyaXRlIGJ1ZmZlciAqLwogCi0JLyogSW5mb3JtYXRpb24gYWJvdXQgb3V0LW9mLWJhbmQgYXJlYSB1c2FnZS4uLiAqLwotCXN0cnVjdCBuYW5kX2VjY2xheW91dCAqZWNjbGF5b3V0OwotCXVpbnQzMl90IGJhZGJsb2NrX3BvczsKLQl1aW50MzJfdCBmc2RhdGFfcG9zOwotCXVpbnQzMl90IGZzZGF0YV9sZW47CisJdW5zaWduZWQgY2hhciAqb29iYnVmOworCWludCBvb2JhdmFpbDsgLyogSG93IG1hbnkgYnl0ZXMgYXJlIGF2YWlsYWJsZSBmb3IgSkZGUzIgaW4gT09CICovCiAjZW5kaWYKIAogCXN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzdW1tYXJ5OwkJLyogU3VtbWFyeSBpbmZvcm1hdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvc2Nhbi5jIGIvZnMvamZmczIvc2Nhbi5jCmluZGV4IDNhZjc0NmUuLjMxYzE0NzUgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3NjYW4uYworKysgYi9mcy9qZmZzMi9zY2FuLmMKQEAgLTQ1MCwxNiArNDUwLDIwIEBACiAKICNpZmRlZiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVIKIAlpZiAoamZmczJfY2xlYW5tYXJrZXJfb29iKGMpKSB7Ci0JCWludCByZXQgPSBqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKGMsIGplYik7CisJCWludCByZXQ7CisKKwkJaWYgKGMtPm10ZC0+YmxvY2tfaXNiYWQoYy0+bXRkLCBqZWItPm9mZnNldCkpCisJCQlyZXR1cm4gQkxLX1NUQVRFX0JBREJMT0NLOworCisJCXJldCA9IGpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoYywgamViKTsKIAkJRDIocHJpbnRrKEtFUk5fTk9USUNFICJqZmZzX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIgcmV0dXJuZWQgJWRcbiIscmV0KSk7CisKIAkJLyogRXZlbiBpZiBpdCdzIG5vdCBmb3VuZCwgd2Ugc3RpbGwgc2NhbiB0byBzZWUKIAkJICAgaWYgdGhlIGJsb2NrIGlzIGVtcHR5LiBXZSB1c2UgdGhpcyBpbmZvcm1hdGlvbgogCQkgICB0byBkZWNpZGUgd2hldGhlciB0byBlcmFzZSBpdCBvciBub3QuICovCiAJCXN3aXRjaCAocmV0KSB7CiAJCWNhc2UgMDoJCWNsZWFubWFya2VyZm91bmQgPSAxOyBicmVhazsKIAkJY2FzZSAxOiAJYnJlYWs7Ci0JCWNhc2UgMjogCXJldHVybiBCTEtfU1RBVEVfQkFEQkxPQ0s7Ci0JCWNhc2UgMzoJCXJldHVybiBCTEtfU1RBVEVfQUxMRElSVFk7IC8qIEJsb2NrIGhhcyBmYWlsZWQgdG8gZXJhc2UgbWluLiBvbmNlICovCiAJCWRlZmF1bHQ6IAlyZXR1cm4gcmV0OwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvamZmczIvd2J1Zi5jIGIvZnMvamZmczIvd2J1Zi5jCmluZGV4IDljOTk4NTkuLmRlNzE4ZTMgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3didWYuYworKysgYi9mcy9qZmZzMi93YnVmLmMKQEAgLTk1Nyw0MyArOTU3LDQ4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSBOUl9PT0JfU0NBTl9QQUdFUwk0CisjZGVmaW5lIE5SX09PQl9TQ0FOX1BBR0VTIDQKKworLyogRm9yIGhpc3RvcmljYWwgcmVhc29ucyB3ZSB1c2Ugb25seSAxMiBieXRlcyBmb3IgT09CIGNsZWFuIG1hcmtlciAqLworI2RlZmluZSBPT0JfQ01fU0laRSAxMgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSBvb2JfY2xlYW5tYXJrZXIgPQoreworCS5tYWdpYyA9IGNwdV90b19qZTE2KEpGRlMyX01BR0lDX0JJVE1BU0spLAorCS5ub2RldHlwZSA9IGNwdV90b19qZTE2KEpGRlMyX05PREVUWVBFX0NMRUFOTUFSS0VSKSwKKwkudG90bGVuID0gY3B1X3RvX2plMzIoOCkKK307CiAKIC8qCi0gKiBDaGVjaywgaWYgdGhlIG91dCBvZiBiYW5kIGFyZWEgaXMgZW1wdHkKKyAqIENoZWNrLCBpZiB0aGUgb3V0IG9mIGJhbmQgYXJlYSBpcyBlbXB0eS4gVGhpcyBmdW5jdGlvbiBrbm93cyBhYm91dCB0aGUgY2xlYW4KKyAqIG1hcmtlciBhbmQgaWYgaXQgaXMgcHJlc2VudCBpbiBPT0IsIHRyZWF0cyB0aGUgT09CIGFzIGVtcHR5IGFueXdheS4KICAqLwogaW50IGpmZnMyX2NoZWNrX29vYl9lbXB0eShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKIAkJCSAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwgaW50IG1vZGUpCiB7Ci0JaW50IGksIHBhZ2UsIHJldDsKLQlpbnQgb29ic2l6ZSA9IGMtPm10ZC0+b29ic2l6ZTsKKwlpbnQgaSwgcmV0OworCWludCBjbWxlbiA9IG1pbl90KGludCwgYy0+b29iYXZhaWwsIE9PQl9DTV9TSVpFKTsKIAlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOwogCi0Jb3BzLm9vYmxlbiA9IE5SX09PQl9TQ0FOX1BBR0VTICogb29ic2l6ZTsKKwlvcHMubW9kZSA9IE1URF9PT0JfQVVUTzsKKwlvcHMub29ibGVuID0gTlJfT09CX1NDQU5fUEFHRVMgKiBjLT5vb2JhdmFpbDsKIAlvcHMub29iYnVmID0gYy0+b29iYnVmOwotCW9wcy5vb2JvZmZzID0gMDsKKwlvcHMubGVuID0gb3BzLm9vYm9mZnMgPSBvcHMucmV0bGVuID0gb3BzLm9vYnJldGxlbiA9IDA7CiAJb3BzLmRhdGJ1ZiA9IE5VTEw7Ci0Jb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOwogCiAJcmV0ID0gYy0+bXRkLT5yZWFkX29vYihjLT5tdGQsIGplYi0+b2Zmc2V0LCAmb3BzKTsKLQlpZiAocmV0KSB7Ci0JCUQxKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX29vYl9lbXB0eSgpOiBSZWFkIE9PQiAiCi0JCQkgICJmYWlsZWQgJWQgZm9yIGJsb2NrIGF0ICUwOHhcbiIsIHJldCwgamViLT5vZmZzZXQpKTsKKwlpZiAocmV0IHx8IG9wcy5vb2JyZXRsZW4gIT0gb3BzLm9vYmxlbikgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCByZWFkIE9PQiBmb3IgRUIgYXQgJTA4eCwgcmVxdWVzdGVkICV6ZCIKKwkJCQkiIGJ5dGVzLCByZWFkICV6ZCBieXRlcywgZXJyb3IgJWRcbiIsCisJCQkJamViLT5vZmZzZXQsIG9wcy5vb2JsZW4sIG9wcy5vb2JyZXRsZW4sIHJldCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gLUVJTzsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAob3BzLm9vYnJldGxlbiA8IG9wcy5vb2JsZW4pIHsKLQkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfY2hlY2tfb29iX2VtcHR5KCk6IFJlYWQgT09CICIKLQkJCSAgInJldHVybmVkIHNob3J0IHJlYWQgKCV6ZCBieXRlcyBub3QgJWQpIGZvciBibG9jayAiCi0JCQkgICJhdCAlMDh4XG4iLCBvcHMub29icmV0bGVuLCBvcHMub29ibGVuLCBqZWItPm9mZnNldCkpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBTcGVjaWFsIGNoZWNrIGZvciBmaXJzdCBwYWdlICovCi0JZm9yKGkgPSAwOyBpIDwgb29ic2l6ZSA7IGkrKykgewotCQkvKiBZZWFoLCB3ZSBrbm93IGFib3V0IHRoZSBjbGVhbm1hcmtlci4gKi8KLQkJaWYgKG1vZGUgJiYgaSA+PSBjLT5mc2RhdGFfcG9zICYmCi0JCSAgICBpIDwgYy0+ZnNkYXRhX3BvcyArIGMtPmZzZGF0YV9sZW4pCisJZm9yKGkgPSAwOyBpIDwgb3BzLm9vYmxlbjsgaSsrKSB7CisJCWlmIChtb2RlICYmIGkgPCBjbWxlbikKKwkJCS8qIFllYWgsIHdlIGtub3cgYWJvdXQgdGhlIGNsZWFubWFya2VyICovCiAJCQljb250aW51ZTsKIAogCQlpZiAob3BzLm9vYmJ1ZltpXSAhPSAweEZGKSB7CkBAIC0xMDAzLDExMSArMTAwOCw2MyBAQAogCQl9CiAJfQogCi0JLyogd2Uga25vdywgd2UgYXJlIGFsaWduZWQgOikgKi8KLQlmb3IgKHBhZ2UgPSBvb2JzaXplOyBwYWdlIDwgb3BzLm9vYmxlbjsgcGFnZSArPSBzaXplb2YobG9uZykpIHsKLQkJbG9uZyBkYXQgPSAqKGxvbmcgKikoJm9wcy5vb2JidWZbcGFnZV0pOwotCQlpZihkYXQgIT0gLTEpCi0JCQlyZXR1cm4gMTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBTY2FuIGZvciBhIHZhbGlkIGNsZWFubWFya2VyIGFuZCBmb3IgYmFkIGJsb2NrcworICogQ2hlY2sgZm9yIGEgdmFsaWQgY2xlYW5tYXJrZXIuCisgKiBSZXR1cm5zOiAwIGlmIGEgdmFsaWQgY2xlYW5tYXJrZXIgd2FzIGZvdW5kCisgKiAgICAgICAgICAxIGlmIG5vIGNsZWFubWFya2VyIHdhcyBmb3VuZAorICogICAgICAgICAgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiBhbiBlcnJvciBvY2N1cnJlZAogICovCi1pbnQgamZmczJfY2hlY2tfbmFuZF9jbGVhbm1hcmtlciAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCi0JCQkJICBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViKQoraW50IGpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCisJCQkJIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpCiB7Ci0Jc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSBuOwogCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7Ci0JaW50IG9vYnNpemUgPSBjLT5tdGQtPm9vYnNpemU7Ci0JdW5zaWduZWQgY2hhciAqcCwqYjsKLQlpbnQgaSwgcmV0OwotCXNpemVfdCBvZmZzZXQgPSBqZWItPm9mZnNldDsKKwlpbnQgcmV0LCBjbWxlbiA9IG1pbl90KGludCwgYy0+b29iYXZhaWwsIE9PQl9DTV9TSVpFKTsKIAotCS8qIENoZWNrIGZpcnN0IGlmIHRoZSBibG9jayBpcyBiYWQuICovCi0JaWYgKGMtPm10ZC0+YmxvY2tfaXNiYWQoYy0+bXRkLCBvZmZzZXQpKSB7Ci0JCUQxIChwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCkiCi0JCQkgICAiOiBCYWQgYmxvY2sgYXQgJTA4eFxuIiwgamViLT5vZmZzZXQpKTsKLQkJcmV0dXJuIDI7Ci0JfQotCi0Jb3BzLm9vYmxlbiA9IG9vYnNpemU7CisJb3BzLm1vZGUgPSBNVERfT09CX0FVVE87CisJb3BzLm9vYmxlbiA9IGNtbGVuOwogCW9wcy5vb2JidWYgPSBjLT5vb2JidWY7Ci0Jb3BzLm9vYm9mZnMgPSAwOworCW9wcy5sZW4gPSBvcHMub29ib2ZmcyA9IG9wcy5yZXRsZW4gPSBvcHMub29icmV0bGVuID0gMDsKIAlvcHMuZGF0YnVmID0gTlVMTDsKLQlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CiAKLQlyZXQgPSBjLT5tdGQtPnJlYWRfb29iKGMtPm10ZCwgb2Zmc2V0LCAmb3BzKTsKLQlpZiAocmV0KSB7Ci0JCUQxIChwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCk6ICIKLQkJCSAgICJSZWFkIE9PQiBmYWlsZWQgJWQgZm9yIGJsb2NrIGF0ICUwOHhcbiIsCi0JCQkgICByZXQsIGplYi0+b2Zmc2V0KSk7CisJcmV0ID0gYy0+bXRkLT5yZWFkX29vYihjLT5tdGQsIGplYi0+b2Zmc2V0LCAmb3BzKTsKKwlpZiAocmV0IHx8IG9wcy5vb2JyZXRsZW4gIT0gb3BzLm9vYmxlbikgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCByZWFkIE9PQiBmb3IgRUIgYXQgJTA4eCwgcmVxdWVzdGVkICV6ZCIKKwkJCQkiIGJ5dGVzLCByZWFkICV6ZCBieXRlcywgZXJyb3IgJWRcbiIsCisJCQkJamViLT5vZmZzZXQsIG9wcy5vb2JsZW4sIG9wcy5vb2JyZXRsZW4sIHJldCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gLUVJTzsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAob3BzLm9vYnJldGxlbiA8IG9wcy5vb2JsZW4pIHsKLQkJRDEgKHByaW50ayAoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCk6ICIKLQkJCSAgICAiUmVhZCBPT0IgcmV0dXJuIHNob3J0IHJlYWQgKCV6ZCBieXRlcyBub3QgJWQpICIKLQkJCSAgICAiZm9yIGJsb2NrIGF0ICUwOHhcbiIsIG9wcy5vb2JyZXRsZW4sIG9wcy5vb2JsZW4sCi0JCQkgICAgamViLT5vZmZzZXQpKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jbi5tYWdpYyA9IGNwdV90b19qZTE2IChKRkZTMl9NQUdJQ19CSVRNQVNLKTsKLQluLm5vZGV0eXBlID0gY3B1X3RvX2plMTYgKEpGRlMyX05PREVUWVBFX0NMRUFOTUFSS0VSKTsKLQluLnRvdGxlbiA9IGNwdV90b19qZTMyICg4KTsKLQlwID0gKHVuc2lnbmVkIGNoYXIgKikgJm47Ci0JYiA9IGMtPm9vYmJ1ZiArIGMtPmZzZGF0YV9wb3M7Ci0KLQlmb3IgKGkgPSBjLT5mc2RhdGFfbGVuOyBpOyBpLS0pIHsKLQkJaWYgKCpiKysgIT0gKnArKykKLQkJCXJldCA9IDE7Ci0JfQotCi0JRDEoaWYgKHJldCA9PSAxKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKTogIgotCQkgICAgICAgIkNsZWFubWFya2VyIG5vZGUgbm90IGRldGVjdGVkIGluIGJsb2NrIGF0ICUwOHhcbiIsCi0JCSAgICAgICBvZmZzZXQpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJPT0IgYXQgJTA4enggd2FzICIsIG9mZnNldCk7Ci0JCWZvciAoaT0wOyBpIDwgb29ic2l6ZTsgaSsrKQotCQkJcHJpbnRrKCIlMDJ4ICIsIGMtPm9vYmJ1ZltpXSk7Ci0JCXByaW50aygiXG4iKTsKLQl9KTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAhIW1lbWNtcCgmb29iX2NsZWFubWFya2VyLCBjLT5vb2JidWYsIGNtbGVuKTsKIH0KIAogaW50IGpmZnMyX3dyaXRlX25hbmRfY2xlYW5tYXJrZXIoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCiAJCQkJIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpCiB7Ci0Jc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSBuOwotCWludAlyZXQ7CisJaW50IHJldDsKIAlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCBjbWxlbiA9IG1pbl90KGludCwgYy0+b29iYXZhaWwsIE9PQl9DTV9TSVpFKTsKIAotCW4ubWFnaWMgPSBjcHVfdG9famUxNihKRkZTMl9NQUdJQ19CSVRNQVNLKTsKLQluLm5vZGV0eXBlID0gY3B1X3RvX2plMTYoSkZGUzJfTk9ERVRZUEVfQ0xFQU5NQVJLRVIpOwotCW4udG90bGVuID0gY3B1X3RvX2plMzIoOCk7Ci0KLQlvcHMub29ibGVuID0gYy0+ZnNkYXRhX2xlbjsKLQlvcHMub29iYnVmID0gKHVpbnQ4X3QgKikmbjsKLQlvcHMub29ib2ZmcyA9IGMtPmZzZGF0YV9wb3M7CisJb3BzLm1vZGUgPSBNVERfT09CX0FVVE87CisJb3BzLm9vYmxlbiA9IGNtbGVuOworCW9wcy5vb2JidWYgPSAodWludDhfdCAqKSZvb2JfY2xlYW5tYXJrZXI7CisJb3BzLmxlbiA9IG9wcy5vb2JvZmZzID0gb3BzLnJldGxlbiA9IG9wcy5vb2JyZXRsZW4gPSAwOwogCW9wcy5kYXRidWYgPSBOVUxMOwotCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKIAogCXJldCA9IGMtPm10ZC0+d3JpdGVfb29iKGMtPm10ZCwgamViLT5vZmZzZXQsICZvcHMpOwotCi0JaWYgKHJldCkgewotCQlEMShwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl93cml0ZV9uYW5kX2NsZWFubWFya2VyKCk6ICIKLQkJCSAgIldyaXRlIGZhaWxlZCBmb3IgYmxvY2sgYXQgJTA4eDogZXJyb3IgJWRcbiIsCi0JCQkgIGplYi0+b2Zmc2V0LCByZXQpKTsKKwlpZiAocmV0IHx8IG9wcy5vb2JyZXRsZW4gIT0gb3BzLm9vYmxlbikgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCB3cml0ZSBPT0IgZm9yIEVCIGF0ICUwOHgsIHJlcXVlc3RlZCAlemQiCisJCQkJIiBieXRlcywgcmVhZCAlemQgYnl0ZXMsIGVycm9yICVkXG4iLAorCQkJCWplYi0+b2Zmc2V0LCBvcHMub29ibGVuLCBvcHMub29icmV0bGVuLCByZXQpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IC1FSU87CiAJCXJldHVybiByZXQ7CiAJfQotCWlmIChvcHMub29icmV0bGVuICE9IG9wcy5vb2JsZW4pIHsKLQkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfd3JpdGVfbmFuZF9jbGVhbm1hcmtlcigpOiAiCi0JCQkgICJTaG9ydCB3cml0ZSBmb3IgYmxvY2sgYXQgJTA4eDogJXpkIG5vdCAlZFxuIiwKLQkJCSAgamViLT5vZmZzZXQsIG9wcy5vb2JyZXRsZW4sIG9wcy5vb2JsZW4pKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNDAsNDEgKzEwOTcsMjQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBqZmZzMl9uYW5kX3NldF9vb2JpbmZvKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQoraW50IGpmZnMyX25hbmRfZmxhc2hfc2V0dXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCiB7CiAJc3RydWN0IG5hbmRfZWNjbGF5b3V0ICpvaW5mbyA9IGMtPm10ZC0+ZWNjbGF5b3V0OwogCi0JLyogRG8gdGhpcyBvbmx5LCBpZiB3ZSBoYXZlIGFuIG9vYiBidWZmZXIgKi8KIAlpZiAoIWMtPm10ZC0+b29ic2l6ZSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBDbGVhbm1hcmtlciBpcyBvdXQtb2YtYmFuZCwgc28gaW5saW5lIHNpemUgemVybyAqLwogCWMtPmNsZWFubWFya2VyX3NpemUgPSAwOwogCi0JLyogU2hvdWxkIHdlIHVzZSBhdXRvcGxhY2VtZW50ID8gKi8KLQlpZiAoIW9pbmZvKSB7Ci0JCUQxKHByaW50ayhLRVJOX0RFQlVHICJKRkZTMiBvbiBOQU5ELiBObyBhdXRvcGxhY21lbnQgaW5mbyBmb3VuZFxuIikpOworCWlmICghb2luZm8gfHwgb2luZm8tPm9vYmF2YWlsID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpbmNvbnNpc3RlbnQgZGV2aWNlIGRlc2NyaXB0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JRDEocHJpbnRrKEtFUk5fREVCVUcgIkpGRlMyIHVzaW5nIGF1dG9wbGFjZSBvbiBOQU5EXG4iKSk7Ci0JLyogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZnJlZSBieXRlcyAqLwotCWlmICghb2luZm8tPm9vYmZyZWVbMF0ubGVuZ3RoKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJqZmZzMl9uYW5kX3NldF9vb2JpbmZvKCk6IEVlZXAuIgotCQkJIiBBdXRvcGxhY2VtZW50IHNlbGVjdGVkIGFuZCBubyBlbXB0eSBzcGFjZSBpbiBvb2JcbiIpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0JYy0+ZnNkYXRhX3BvcyA9IG9pbmZvLT5vb2JmcmVlWzBdLm9mZnNldDsKLQljLT5mc2RhdGFfbGVuID0gb2luZm8tPm9vYmZyZWVbMF0ubGVuZ3RoOwotCWlmIChjLT5mc2RhdGFfbGVuID4gOCkKLQkJYy0+ZnNkYXRhX2xlbiA9IDg7CisJRDEocHJpbnRrKEtFUk5fREVCVUcgIkpGRlMyIHVzaW5nIE9PQiBvbiBOQU5EXG4iKSk7CiAKLQlyZXR1cm4gMDsKLX0KLQotaW50IGpmZnMyX25hbmRfZmxhc2hfc2V0dXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCi17Ci0JaW50IHJlczsKKwljLT5vb2JhdmFpbCA9IG9pbmZvLT5vb2JhdmFpbDsKIAogCS8qIEluaXRpYWxpc2Ugd3JpdGUgYnVmZmVyICovCiAJaW5pdF9yd3NlbSgmYy0+d2J1Zl9zZW0pOwpAQCAtMTE4NSwyMiArMTEyNSwxMyBAQAogCWlmICghYy0+d2J1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljLT5vb2JidWYgPSBrbWFsbG9jKE5SX09PQl9TQ0FOX1BBR0VTICogYy0+bXRkLT5vb2JzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWMtPm9vYmJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXMgPSBqZmZzMl9uYW5kX3NldF9vb2JpbmZvKGMpOwotCi0jaWZkZWYgQlJFQUtNRQotCWlmICghYnJva2VuYnVmKQotCQlicm9rZW5idWYgPSBrbWFsbG9jKGMtPndidWZfcGFnZXNpemUsIEdGUF9LRVJORUwpOwotCWlmICghYnJva2VuYnVmKSB7CisJYy0+b29iYnVmID0ga21hbGxvYyhOUl9PT0JfU0NBTl9QQUdFUyAqIGMtPm9vYmF2YWlsLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWMtPm9vYmJ1ZikgewogCQlrZnJlZShjLT53YnVmKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChicm9rZW5idWYsIDB4ZGIsIGMtPndidWZfcGFnZXNpemUpOwotI2VuZGlmCi0JcmV0dXJuIHJlczsKKworCXJldHVybiAwOwogfQogCiB2b2lkIGpmZnMyX25hbmRfZmxhc2hfY2xlYW51cChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYykKZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jCmluZGV4IDdkNDg3MDQuLmNmNzkxOTYgMTAwNjQ0Ci0tLSBhL2ZzL2xpYmZzLmMKKysrIGIvZnMvbGliZnMuYwpAQCAtMzM1LDE3ICszMzUsMTggQEAKIAkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCQl9Ci0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIGludCBzaW1wbGVfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCXVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgdG8pCisJCQl1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlsb2ZmX3QgcG9zID0gKChsb2ZmX3QpcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkgKyB0bzsKIAorCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKQorCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJLyoKIAkgKiBObyBuZWVkIHRvIHVzZSBpX3NpemVfcmVhZCgpIGhlcmUsIHRoZSBpX3NpemUKIAkgKiBjYW5ub3QgY2hhbmdlIHVuZGVyIHVzIGJlY2F1c2Ugd2UgaG9sZCB0aGUgaV9tdXRleC4KZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Yy5jIGIvZnMvbG9ja2Qvc3ZjLmMKaW5kZXggNTBjYjhkYS4uMTI2YjFiZiAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjLmMKKysrIGIvZnMvbG9ja2Qvc3ZjLmMKQEAgLTQ0MCw3ICs0NDAsNyBAQAogfTsKIAogLyoKLSAqIE1vZHVsZSAoYW5kIGRyaXZlcmZzKSBwYXJhbWV0ZXJzLgorICogTW9kdWxlIChhbmQgc3lzZnMpIHBhcmFtZXRlcnMuCiAgKi8KIAogI2RlZmluZSBwYXJhbV9zZXRfbWluX21heChuYW1lLCB0eXBlLCB3aGljaF9zdHJ0b2wsIG1pbiwgbWF4KQkJXApkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMTYxZTIyMi4uZWU2MGNjNCAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0yNjg4LDEwICsyNjg4LDExIEBACiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBlcnIgPSAtRU5PTUVNOworCWludCBlcnI7CiAJY2hhciAqa2FkZHI7CiAKIHJldHJ5OgorCWVyciA9IC1FTk9NRU07CiAJcGFnZSA9IGZpbmRfb3JfY3JlYXRlX3BhZ2UobWFwcGluZywgMCwgZ2ZwX21hc2spOwogCWlmICghcGFnZSkKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnMyYWNsLmMgYi9mcy9uZnNkL25mczJhY2wuYwppbmRleCBlZGRlNWRjLi5iNjE3NDI4IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczJhY2wuYworKysgYi9mcy9uZnNkL25mczJhY2wuYwpAQCAtMjg3LDEzICsyODcsMjAgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBuZnNhY2xzdmNfcmVsZWFzZV9maGFuZGxlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwKLQkJc3RydWN0IG5mc2RfZmhhbmRsZSAqcmVzcCkKK3N0YXRpYyBpbnQgbmZzYWNsc3ZjX3JlbGVhc2VfYXR0cnN0YXQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpwLAorCQlzdHJ1Y3QgbmZzZF9hdHRyc3RhdCAqcmVzcCkKIHsKIAlmaF9wdXQoJnJlc3AtPmZoKTsKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBuZnNhY2xzdmNfcmVsZWFzZV9hY2Nlc3Moc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpwLAorICAgICAgICAgICAgICAgc3RydWN0IG5mc2QzX2FjY2Vzc3JlcyAqcmVzcCkKK3sKKyAgICAgICBmaF9wdXQoJnJlc3AtPmZoKTsKKyAgICAgICByZXR1cm4gMTsKK30KKwogI2RlZmluZSBuZnNhY2xzdmNfZGVjb2RlX3ZvaWRhcmdzCU5VTEwKICNkZWZpbmUgbmZzYWNsc3ZjX2VuY29kZV92b2lkcmVzCU5VTEwKICNkZWZpbmUgbmZzYWNsc3ZjX3JlbGVhc2Vfdm9pZAkJTlVMTApAQCAtMzIyLDkgKzMyOSw5IEBACiBzdGF0aWMgc3RydWN0IHN2Y19wcm9jZWR1cmUJCW5mc2RfYWNsX3Byb2NlZHVyZXMyW10gPSB7CiAgIFBST0MobnVsbCwJdm9pZCwJCXZvaWQsCQl2b2lkLAkgIFJDX05PQ0FDSEUsIFNUKSwKICAgUFJPQyhnZXRhY2wsCWdldGFjbCwJCWdldGFjbCwJCWdldGFjbCwJICBSQ19OT0NBQ0hFLCBTVCsxKzIqKDErQUNMKSksCi0gIFBST0Moc2V0YWNsLAlzZXRhY2wsCQlhdHRyc3RhdCwJZmhhbmRsZSwgIFJDX05PQ0FDSEUsIFNUK0FUKSwKLSAgUFJPQyhnZXRhdHRyLCBmaGFuZGxlLAlhdHRyc3RhdCwJZmhhbmRsZSwgIFJDX05PQ0FDSEUsIFNUK0FUKSwKLSAgUFJPQyhhY2Nlc3MsCWFjY2VzcywJCWFjY2VzcywJCWZoYW5kbGUsICBSQ19OT0NBQ0hFLCBTVCtBVCsxKSwKKyAgUFJPQyhzZXRhY2wsCXNldGFjbCwJCWF0dHJzdGF0LAlhdHRyc3RhdCwgUkNfTk9DQUNIRSwgU1QrQVQpLAorICBQUk9DKGdldGF0dHIsIGZoYW5kbGUsCWF0dHJzdGF0LAlhdHRyc3RhdCwgUkNfTk9DQUNIRSwgU1QrQVQpLAorICBQUk9DKGFjY2VzcywJYWNjZXNzLAkJYWNjZXNzLAkJYWNjZXNzLCAgIFJDX05PQ0FDSEUsIFNUK0FUKzEpLAogfTsKIAogc3RydWN0IHN2Y192ZXJzaW9uCW5mc2RfYWNsX3ZlcnNpb24yID0gewpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0YWNsLmMgYi9mcy9uZnNkL25mczRhY2wuYwppbmRleCA1ZDk0NTU1Li44MzI2NzNiIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRhY2wuYworKysgYi9mcy9uZnNkL25mczRhY2wuYwpAQCAtNjEsOSArNjEsMTEgQEAKIAogLyogZmxhZ3MgdXNlZCB0byBzaW11bGF0ZSBwb3NpeCBkZWZhdWx0IEFDTHMgKi8KICNkZWZpbmUgTkZTNF9JTkhFUklUQU5DRV9GTEFHUyAoTkZTNF9BQ0VfRklMRV9JTkhFUklUX0FDRSBcCi0JCXwgTkZTNF9BQ0VfRElSRUNUT1JZX0lOSEVSSVRfQUNFIHwgTkZTNF9BQ0VfSU5IRVJJVF9PTkxZX0FDRSkKKwkJfCBORlM0X0FDRV9ESVJFQ1RPUllfSU5IRVJJVF9BQ0UpCiAKLSNkZWZpbmUgTkZTNF9TVVBQT1JURURfRkxBR1MgKE5GUzRfSU5IRVJJVEFOQ0VfRkxBR1MgfCBORlM0X0FDRV9JREVOVElGSUVSX0dST1VQKQorI2RlZmluZSBORlM0X1NVUFBPUlRFRF9GTEFHUyAoTkZTNF9JTkhFUklUQU5DRV9GTEFHUyBcCisJCXwgTkZTNF9BQ0VfSU5IRVJJVF9PTkxZX0FDRSBcCisJCXwgTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUCkKIAogI2RlZmluZSBNQVNLX0VRVUFMKG1hc2sxLCBtYXNrMikgXAogCSggKChtYXNrMSkgJiBORlM0X0FDRV9NQVNLX0FMTCkgPT0gKChtYXNrMikgJiBORlM0X0FDRV9NQVNLX0FMTCkgKQpAQCAtODcsMTIgKzg5LDE5IEBACiB9CiAKIHN0YXRpYyB1MzIKLWRlbnlfbWFzayh1MzIgYWxsb3dfbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQorZGVueV9tYXNrX2Zyb21fcG9zaXgodW5zaWduZWQgc2hvcnQgcGVybSwgdTMyIGZsYWdzKQogewotCXUzMiByZXQgPSB+YWxsb3dfbWFzayAmIH5ORlM0X01BU0tfVU5TVVBQOwotCWlmICghKGZsYWdzICYgTkZTNF9BQ0xfRElSKSkKLQkJcmV0ICY9IH5ORlM0X0FDRV9ERUxFVEVfQ0hJTEQ7Ci0JcmV0dXJuIHJldDsKKwl1MzIgbWFzayA9IDA7CisKKwlpZiAocGVybSAmIEFDTF9SRUFEKQorCQltYXNrIHw9IE5GUzRfUkVBRF9NT0RFOworCWlmIChwZXJtICYgQUNMX1dSSVRFKQorCQltYXNrIHw9IE5GUzRfV1JJVEVfTU9ERTsKKwlpZiAoKHBlcm0gJiBBQ0xfV1JJVEUpICYmIChmbGFncyAmIE5GUzRfQUNMX0RJUikpCisJCW1hc2sgfD0gTkZTNF9BQ0VfREVMRVRFX0NISUxEOworCWlmIChwZXJtICYgQUNMX0VYRUNVVEUpCisJCW1hc2sgfD0gTkZTNF9FWEVDVVRFX01PREU7CisJcmV0dXJuIG1hc2s7CiB9CiAKIC8qIFhYWDogbW9kaWZ5IGZ1bmN0aW9ucyB0byByZXR1cm4gTkZTIGVycm9yczsgdGhleSdyZSBvbmx5IGV2ZXIKQEAgLTEyNiwxMDggKzEzNSwxNTEgQEAKIH07CiAKIHN0YXRpYyBzaG9ydCBhY2UydHlwZShzdHJ1Y3QgbmZzNF9hY2UgKik7Ci1zdGF0aWMgaW50IF9wb3NpeF90b19uZnN2NF9vbmUoc3RydWN0IHBvc2l4X2FjbCAqLCBzdHJ1Y3QgbmZzNF9hY2wgKiwgdW5zaWduZWQgaW50KTsKLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpfbmZzdjRfdG9fcG9zaXhfb25lKHN0cnVjdCBuZnM0X2FjbCAqLCB1bnNpZ25lZCBpbnQpOwotaW50IG5mczRfYWNsX2FkZF9hY2Uoc3RydWN0IG5mczRfYWNsICosIHUzMiwgdTMyLCB1MzIsIGludCwgdWlkX3QpOwotc3RhdGljIGludCBuZnM0X2FjbF9zcGxpdChzdHJ1Y3QgbmZzNF9hY2wgKiwgc3RydWN0IG5mczRfYWNsICopOworc3RhdGljIHZvaWQgX3Bvc2l4X3RvX25mc3Y0X29uZShzdHJ1Y3QgcG9zaXhfYWNsICosIHN0cnVjdCBuZnM0X2FjbCAqLAorCQkJCXVuc2lnbmVkIGludCk7Cit2b2lkIG5mczRfYWNsX2FkZF9hY2Uoc3RydWN0IG5mczRfYWNsICosIHUzMiwgdTMyLCB1MzIsIGludCwgdWlkX3QpOwogCiBzdHJ1Y3QgbmZzNF9hY2wgKgogbmZzNF9hY2xfcG9zaXhfdG9fbmZzdjQoc3RydWN0IHBvc2l4X2FjbCAqcGFjbCwgc3RydWN0IHBvc2l4X2FjbCAqZHBhY2wsCiAJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG5mczRfYWNsICphY2w7Ci0JaW50IGVycm9yID0gLUVJTlZBTDsKKwlpbnQgc2l6ZSA9IDA7CiAKLQlpZiAoKHBhY2wgIT0gTlVMTCAmJgotCQkocG9zaXhfYWNsX3ZhbGlkKHBhY2wpIDwgMCB8fCBwYWNsLT5hX2NvdW50ID09IDApKSB8fAotCSAgICAoZHBhY2wgIT0gTlVMTCAmJgotCQkocG9zaXhfYWNsX3ZhbGlkKGRwYWNsKSA8IDAgfHwgZHBhY2wtPmFfY291bnQgPT0gMCkpKQotCQlnb3RvIG91dF9lcnI7Ci0KLQlhY2wgPSBuZnM0X2FjbF9uZXcoKTsKLQlpZiAoYWNsID09IE5VTEwpIHsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9lcnI7CisJaWYgKHBhY2wpIHsKKwkJaWYgKHBvc2l4X2FjbF92YWxpZChwYWNsKSA8IDApCisJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJc2l6ZSArPSAyKnBhY2wtPmFfY291bnQ7CisJfQorCWlmIChkcGFjbCkgeworCQlpZiAocG9zaXhfYWNsX3ZhbGlkKGRwYWNsKSA8IDApCisJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJc2l6ZSArPSAyKmRwYWNsLT5hX2NvdW50OwogCX0KIAotCWlmIChwYWNsICE9IE5VTEwpIHsKLQkJZXJyb3IgPSBfcG9zaXhfdG9fbmZzdjRfb25lKHBhY2wsIGFjbCwKLQkJCQkJCWZsYWdzICYgfk5GUzRfQUNMX1RZUEVfREVGQVVMVCk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlnb3RvIG91dF9hY2w7Ci0JfQorCS8qIEFsbG9jYXRlIGZvciB3b3JzdCBjYXNlOiBvbmUgKGRlbnksIGFsbG93KSBwYWlyIGVhY2g6ICovCisJYWNsID0gbmZzNF9hY2xfbmV3KHNpemUpOworCWlmIChhY2wgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlpZiAoZHBhY2wgIT0gTlVMTCkgewotCQllcnJvciA9IF9wb3NpeF90b19uZnN2NF9vbmUoZHBhY2wsIGFjbCwKLQkJCQkJCWZsYWdzIHwgTkZTNF9BQ0xfVFlQRV9ERUZBVUxUKTsKLQkJaWYgKGVycm9yIDwgMCkKLQkJCWdvdG8gb3V0X2FjbDsKLQl9CisJaWYgKHBhY2wpCisJCV9wb3NpeF90b19uZnN2NF9vbmUocGFjbCwgYWNsLCBmbGFncyAmIH5ORlM0X0FDTF9UWVBFX0RFRkFVTFQpOwogCi0JcmV0dXJuIGFjbDsKLQotb3V0X2FjbDoKLQluZnM0X2FjbF9mcmVlKGFjbCk7Ci1vdXRfZXJyOgotCWFjbCA9IEVSUl9QVFIoZXJyb3IpOworCWlmIChkcGFjbCkKKwkJX3Bvc2l4X3RvX25mc3Y0X29uZShkcGFjbCwgYWNsLCBmbGFncyB8IE5GUzRfQUNMX1RZUEVfREVGQVVMVCk7CiAKIAlyZXR1cm4gYWNsOwogfQogCi1zdGF0aWMgaW50Ci1uZnM0X2FjbF9hZGRfcGFpcihzdHJ1Y3QgbmZzNF9hY2wgKmFjbCwgaW50IGVmbGFnLCB1MzIgbWFzaywgaW50IHdob3R5cGUsCi0JCXVpZF90IG93bmVyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JaW50IGVycm9yOworc3RydWN0IHBvc2l4X2FjbF9zdW1tYXJ5IHsKKwl1bnNpZ25lZCBzaG9ydCBvd25lcjsKKwl1bnNpZ25lZCBzaG9ydCB1c2VyczsKKwl1bnNpZ25lZCBzaG9ydCBncm91cDsKKwl1bnNpZ25lZCBzaG9ydCBncm91cHM7CisJdW5zaWduZWQgc2hvcnQgb3RoZXI7CisJdW5zaWduZWQgc2hvcnQgbWFzazsKK307CiAKLQllcnJvciA9IG5mczRfYWNsX2FkZF9hY2UoYWNsLCBORlM0X0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRSwKLQkJCQkgZWZsYWcsIG1hc2ssIHdob3R5cGUsIG93bmVyKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSBuZnM0X2FjbF9hZGRfYWNlKGFjbCwgTkZTNF9BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRSwKLQkJCQllZmxhZywgZGVueV9tYXNrKG1hc2ssIGZsYWdzKSwgd2hvdHlwZSwgb3duZXIpOwotCXJldHVybiBlcnJvcjsKK3N0YXRpYyB2b2lkCitzdW1tYXJpemVfcG9zaXhfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgc3RydWN0IHBvc2l4X2FjbF9zdW1tYXJ5ICpwYXMpCit7CisJc3RydWN0IHBvc2l4X2FjbF9lbnRyeSAqcGEsICpwZTsKKwlwYXMtPnVzZXJzID0gMDsKKwlwYXMtPmdyb3VwcyA9IDA7CisJcGFzLT5tYXNrID0gMDc7CisKKwlwZSA9IGFjbC0+YV9lbnRyaWVzICsgYWNsLT5hX2NvdW50OworCisJRk9SRUFDSF9BQ0xfRU5UUlkocGEsIGFjbCwgcGUpIHsKKwkJc3dpdGNoIChwYS0+ZV90YWcpIHsKKwkJCWNhc2UgQUNMX1VTRVJfT0JKOgorCQkJCXBhcy0+b3duZXIgPSBwYS0+ZV9wZXJtOworCQkJCWJyZWFrOworCQkJY2FzZSBBQ0xfR1JPVVBfT0JKOgorCQkJCXBhcy0+Z3JvdXAgPSBwYS0+ZV9wZXJtOworCQkJCWJyZWFrOworCQkJY2FzZSBBQ0xfVVNFUjoKKwkJCQlwYXMtPnVzZXJzIHw9IHBhLT5lX3Blcm07CisJCQkJYnJlYWs7CisJCQljYXNlIEFDTF9HUk9VUDoKKwkJCQlwYXMtPmdyb3VwcyB8PSBwYS0+ZV9wZXJtOworCQkJCWJyZWFrOworCQkJY2FzZSBBQ0xfT1RIRVI6CisJCQkJcGFzLT5vdGhlciA9IHBhLT5lX3Blcm07CisJCQkJYnJlYWs7CisJCQljYXNlIEFDTF9NQVNLOgorCQkJCXBhcy0+bWFzayA9IHBhLT5lX3Blcm07CisJCQkJYnJlYWs7CisJCX0KKwl9CisJLyogV2UnbGwgb25seSBjYXJlIGFib3V0IGVmZmVjdGl2ZSBwZXJtaXNzaW9uczogKi8KKwlwYXMtPnVzZXJzICY9IHBhcy0+bWFzazsKKwlwYXMtPmdyb3VwICY9IHBhcy0+bWFzazsKKwlwYXMtPmdyb3VwcyAmPSBwYXMtPm1hc2s7CiB9CiAKIC8qIFdlIGFzc3VtZSB0aGUgYWNsIGhhcyBiZWVuIHZlcmlmaWVkIHdpdGggcG9zaXhfYWNsX3ZhbGlkLiAqLwotc3RhdGljIGludAorc3RhdGljIHZvaWQKIF9wb3NpeF90b19uZnN2NF9vbmUoc3RydWN0IHBvc2l4X2FjbCAqcGFjbCwgc3RydWN0IG5mczRfYWNsICphY2wsCiAJCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHBvc2l4X2FjbF9lbnRyeSAqcGEsICpwZSwgKmdyb3VwX293bmVyX2VudHJ5OwotCWludCBlcnJvciA9IC1FSU5WQUw7Ci0JdTMyIG1hc2ssIG1hc2tfbWFzazsKKwlzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5ICpwYSwgKmdyb3VwX293bmVyX2VudHJ5OworCXN0cnVjdCBuZnM0X2FjZSAqYWNlOworCXN0cnVjdCBwb3NpeF9hY2xfc3VtbWFyeSBwYXM7CisJdW5zaWduZWQgc2hvcnQgZGVueTsKIAlpbnQgZWZsYWcgPSAoKGZsYWdzICYgTkZTNF9BQ0xfVFlQRV9ERUZBVUxUKSA/CiAJCQkJCU5GUzRfSU5IRVJJVEFOQ0VfRkxBR1MgOiAwKTsKIAogCUJVR19PTihwYWNsLT5hX2NvdW50IDwgMyk7Ci0JcGUgPSBwYWNsLT5hX2VudHJpZXMgKyBwYWNsLT5hX2NvdW50OwotCXBhID0gcGUgLSAyOyAvKiBpZiBtYXNrIGVudHJ5IGV4aXN0cywgaXQncyBzZWNvbmQgZnJvbSB0aGUgbGFzdC4gKi8KLQlpZiAocGEtPmVfdGFnID09IEFDTF9NQVNLKQotCQltYXNrX21hc2sgPSBkZW55X21hc2sobWFza19mcm9tX3Bvc2l4KHBhLT5lX3Blcm0sIGZsYWdzKSwgZmxhZ3MpOwotCWVsc2UKLQkJbWFza19tYXNrID0gMDsKKwlzdW1tYXJpemVfcG9zaXhfYWNsKHBhY2wsICZwYXMpOwogCiAJcGEgPSBwYWNsLT5hX2VudHJpZXM7Ci0JQlVHX09OKHBhLT5lX3RhZyAhPSBBQ0xfVVNFUl9PQkopOwotCW1hc2sgPSBtYXNrX2Zyb21fcG9zaXgocGEtPmVfcGVybSwgZmxhZ3MgfCBORlM0X0FDTF9PV05FUik7Ci0JZXJyb3IgPSBuZnM0X2FjbF9hZGRfcGFpcihhY2wsIGVmbGFnLCBtYXNrLCBORlM0X0FDTF9XSE9fT1dORVIsIDAsIGZsYWdzKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIG91dDsKKwlhY2UgPSBhY2wtPmFjZXMgKyBhY2wtPm5hY2VzOworCisJLyogV2UgY291bGQgZGVueSBldmVyeXRoaW5nIG5vdCBncmFudGVkIGJ5IHRoZSBvd25lcjogKi8KKwlkZW55ID0gfnBhcy5vd25lcjsKKwkvKgorCSAqIGJ1dCBpdCBpcyBlcXVpdmFsZW50IChhbmQgc2ltcGxlcikgdG8gZGVueSBvbmx5IHdoYXQgaXMgbm90CisJICogZ3JhbnRlZCBieSBsYXRlciBlbnRyaWVzOgorCSAqLworCWRlbnkgJj0gcGFzLnVzZXJzIHwgcGFzLmdyb3VwIHwgcGFzLmdyb3VwcyB8IHBhcy5vdGhlcjsKKwlpZiAoZGVueSkgeworCQlhY2UtPnR5cGUgPSBORlM0X0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFOworCQlhY2UtPmZsYWcgPSBlZmxhZzsKKwkJYWNlLT5hY2Nlc3NfbWFzayA9IGRlbnlfbWFza19mcm9tX3Bvc2l4KGRlbnksIGZsYWdzKTsKKwkJYWNlLT53aG90eXBlID0gTkZTNF9BQ0xfV0hPX09XTkVSOworCQlhY2UrKzsKKwkJYWNsLT5uYWNlcysrOworCX0KKworCWFjZS0+dHlwZSA9IE5GUzRfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFOworCWFjZS0+ZmxhZyA9IGVmbGFnOworCWFjZS0+YWNjZXNzX21hc2sgPSBtYXNrX2Zyb21fcG9zaXgocGEtPmVfcGVybSwgZmxhZ3MgfCBORlM0X0FDTF9PV05FUik7CisJYWNlLT53aG90eXBlID0gTkZTNF9BQ0xfV0hPX09XTkVSOworCWFjZSsrOworCWFjbC0+bmFjZXMrKzsKIAlwYSsrOwogCiAJd2hpbGUgKHBhLT5lX3RhZyA9PSBBQ0xfVVNFUikgewotCQltYXNrID0gbWFza19mcm9tX3Bvc2l4KHBhLT5lX3Blcm0sIGZsYWdzKTsKLQkJZXJyb3IgPSBuZnM0X2FjbF9hZGRfYWNlKGFjbCwgTkZTNF9BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRSwKLQkJCQllZmxhZywgIG1hc2tfbWFzaywgTkZTNF9BQ0xfV0hPX05BTUVELCBwYS0+ZV9pZCk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlnb3RvIG91dDsKLQotCi0JCWVycm9yID0gbmZzNF9hY2xfYWRkX3BhaXIoYWNsLCBlZmxhZywgbWFzaywKLQkJCQlORlM0X0FDTF9XSE9fTkFNRUQsIHBhLT5lX2lkLCBmbGFncyk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlnb3RvIG91dDsKKwkJZGVueSA9IH4ocGEtPmVfcGVybSAmIHBhcy5tYXNrKTsKKwkJZGVueSAmPSBwYXMuZ3JvdXBzIHwgcGFzLmdyb3VwIHwgcGFzLm90aGVyOworCQlpZiAoZGVueSkgeworCQkJYWNlLT50eXBlID0gTkZTNF9BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRTsKKwkJCWFjZS0+ZmxhZyA9IGVmbGFnOworCQkJYWNlLT5hY2Nlc3NfbWFzayA9IGRlbnlfbWFza19mcm9tX3Bvc2l4KGRlbnksIGZsYWdzKTsKKwkJCWFjZS0+d2hvdHlwZSA9IE5GUzRfQUNMX1dIT19OQU1FRDsKKwkJCWFjZS0+d2hvID0gcGEtPmVfaWQ7CisJCQlhY2UrKzsKKwkJCWFjbC0+bmFjZXMrKzsKKwkJfQorCQlhY2UtPnR5cGUgPSBORlM0X0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRTsKKwkJYWNlLT5mbGFnID0gZWZsYWc7CisJCWFjZS0+YWNjZXNzX21hc2sgPSBtYXNrX2Zyb21fcG9zaXgocGEtPmVfcGVybSAmIHBhcy5tYXNrLAorCQkJCQkJICAgZmxhZ3MpOworCQlhY2UtPndob3R5cGUgPSBORlM0X0FDTF9XSE9fTkFNRUQ7CisJCWFjZS0+d2hvID0gcGEtPmVfaWQ7CisJCWFjZSsrOworCQlhY2wtPm5hY2VzKys7CiAJCXBhKys7CiAJfQogCkBAIC0yMzYsNjcgKzI4OCw2NSBAQAogCiAJLyogYWxsb3cgQUNFcyAqLwogCi0JaWYgKHBhY2wtPmFfY291bnQgPiAzKSB7Ci0JCUJVR19PTihwYS0+ZV90YWcgIT0gQUNMX0dST1VQX09CSik7Ci0JCWVycm9yID0gbmZzNF9hY2xfYWRkX2FjZShhY2wsIE5GUzRfQUNFX0FDQ0VTU19ERU5JRURfQUNFX1RZUEUsCi0JCQkJTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUCB8IGVmbGFnLCBtYXNrX21hc2ssCi0JCQkJTkZTNF9BQ0xfV0hPX0dST1VQLCAwKTsKLQkJaWYgKGVycm9yIDwgMCkKLQkJCWdvdG8gb3V0OwotCX0KIAlncm91cF9vd25lcl9lbnRyeSA9IHBhOwotCW1hc2sgPSBtYXNrX2Zyb21fcG9zaXgocGEtPmVfcGVybSwgZmxhZ3MpOwotCWVycm9yID0gbmZzNF9hY2xfYWRkX2FjZShhY2wsIE5GUzRfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFLAotCQkJTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUCB8IGVmbGFnLCBtYXNrLAotCQkJTkZTNF9BQ0xfV0hPX0dST1VQLCAwKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIG91dDsKKworCWFjZS0+dHlwZSA9IE5GUzRfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFOworCWFjZS0+ZmxhZyA9IGVmbGFnOworCWFjZS0+YWNjZXNzX21hc2sgPSBtYXNrX2Zyb21fcG9zaXgocGFzLmdyb3VwLCBmbGFncyk7CisJYWNlLT53aG90eXBlID0gTkZTNF9BQ0xfV0hPX0dST1VQOworCWFjZSsrOworCWFjbC0+bmFjZXMrKzsKIAlwYSsrOwogCiAJd2hpbGUgKHBhLT5lX3RhZyA9PSBBQ0xfR1JPVVApIHsKLQkJbWFzayA9IG1hc2tfZnJvbV9wb3NpeChwYS0+ZV9wZXJtLCBmbGFncyk7Ci0JCWVycm9yID0gbmZzNF9hY2xfYWRkX2FjZShhY2wsIE5GUzRfQUNFX0FDQ0VTU19ERU5JRURfQUNFX1RZUEUsCi0JCQkJTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUCB8IGVmbGFnLCBtYXNrX21hc2ssCi0JCQkJTkZTNF9BQ0xfV0hPX05BTUVELCBwYS0+ZV9pZCk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlnb3RvIG91dDsKLQotCQllcnJvciA9IG5mczRfYWNsX2FkZF9hY2UoYWNsLCBORlM0X0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRSwKLQkJICAgIAkJTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUCB8IGVmbGFnLCBtYXNrLAotCQkgICAgCQlORlM0X0FDTF9XSE9fTkFNRUQsIHBhLT5lX2lkKTsKLQkJaWYgKGVycm9yIDwgMCkKLQkJCWdvdG8gb3V0OworCQlhY2UtPnR5cGUgPSBORlM0X0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRTsKKwkJYWNlLT5mbGFnID0gZWZsYWcgfCBORlM0X0FDRV9JREVOVElGSUVSX0dST1VQOworCQlhY2UtPmFjY2Vzc19tYXNrID0gbWFza19mcm9tX3Bvc2l4KHBhLT5lX3Blcm0gJiBwYXMubWFzaywKKwkJCQkJCSAgIGZsYWdzKTsKKwkJYWNlLT53aG90eXBlID0gTkZTNF9BQ0xfV0hPX05BTUVEOworCQlhY2UtPndobyA9IHBhLT5lX2lkOworCQlhY2UrKzsKKwkJYWNsLT5uYWNlcysrOwogCQlwYSsrOwogCX0KIAogCS8qIGRlbnkgQUNFcyAqLwogCiAJcGEgPSBncm91cF9vd25lcl9lbnRyeTsKLQltYXNrID0gbWFza19mcm9tX3Bvc2l4KHBhLT5lX3Blcm0sIGZsYWdzKTsKLQllcnJvciA9IG5mczRfYWNsX2FkZF9hY2UoYWNsLCBORlM0X0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFLAotCQkJTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUCB8IGVmbGFnLAotCQkJZGVueV9tYXNrKG1hc2ssIGZsYWdzKSwgTkZTNF9BQ0xfV0hPX0dST1VQLCAwKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIG91dDsKKworCWRlbnkgPSB+cGFzLmdyb3VwICYgcGFzLm90aGVyOworCWlmIChkZW55KSB7CisJCWFjZS0+dHlwZSA9IE5GUzRfQUNFX0FDQ0VTU19ERU5JRURfQUNFX1RZUEU7CisJCWFjZS0+ZmxhZyA9IGVmbGFnIHwgTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUDsKKwkJYWNlLT5hY2Nlc3NfbWFzayA9IGRlbnlfbWFza19mcm9tX3Bvc2l4KGRlbnksIGZsYWdzKTsKKwkJYWNlLT53aG90eXBlID0gTkZTNF9BQ0xfV0hPX0dST1VQOworCQlhY2UrKzsKKwkJYWNsLT5uYWNlcysrOworCX0KIAlwYSsrOworCiAJd2hpbGUgKHBhLT5lX3RhZyA9PSBBQ0xfR1JPVVApIHsKLQkJbWFzayA9IG1hc2tfZnJvbV9wb3NpeChwYS0+ZV9wZXJtLCBmbGFncyk7Ci0JCWVycm9yID0gbmZzNF9hY2xfYWRkX2FjZShhY2wsIE5GUzRfQUNFX0FDQ0VTU19ERU5JRURfQUNFX1RZUEUsCi0JCSAgICAJCU5GUzRfQUNFX0lERU5USUZJRVJfR1JPVVAgfCBlZmxhZywKLQkJICAgIAkJZGVueV9tYXNrKG1hc2ssIGZsYWdzKSwgTkZTNF9BQ0xfV0hPX05BTUVELCBwYS0+ZV9pZCk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlnb3RvIG91dDsKKwkJZGVueSA9IH4ocGEtPmVfcGVybSAmIHBhcy5tYXNrKTsKKwkJZGVueSAmPSBwYXMub3RoZXI7CisJCWlmIChkZW55KSB7CisJCQlhY2UtPnR5cGUgPSBORlM0X0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFOworCQkJYWNlLT5mbGFnID0gZWZsYWcgfCBORlM0X0FDRV9JREVOVElGSUVSX0dST1VQOworCQkJYWNlLT5hY2Nlc3NfbWFzayA9IG1hc2tfZnJvbV9wb3NpeChkZW55LCBmbGFncyk7CisJCQlhY2UtPndob3R5cGUgPSBORlM0X0FDTF9XSE9fTkFNRUQ7CisJCQlhY2UtPndobyA9IHBhLT5lX2lkOworCQkJYWNlKys7CisJCQlhY2wtPm5hY2VzKys7CisJCX0KIAkJcGErKzsKIAl9CiAKIAlpZiAocGEtPmVfdGFnID09IEFDTF9NQVNLKQogCQlwYSsrOwotCUJVR19PTihwYS0+ZV90YWcgIT0gQUNMX09USEVSKTsKLQltYXNrID0gbWFza19mcm9tX3Bvc2l4KHBhLT5lX3Blcm0sIGZsYWdzKTsKLQllcnJvciA9IG5mczRfYWNsX2FkZF9wYWlyKGFjbCwgZWZsYWcsIG1hc2ssIE5GUzRfQUNMX1dIT19FVkVSWU9ORSwgMCwgZmxhZ3MpOwotCi1vdXQ6Ci0JcmV0dXJuIGVycm9yOworCWFjZS0+dHlwZSA9IE5GUzRfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFOworCWFjZS0+ZmxhZyA9IGVmbGFnOworCWFjZS0+YWNjZXNzX21hc2sgPSBtYXNrX2Zyb21fcG9zaXgocGEtPmVfcGVybSwgZmxhZ3MpOworCWFjZS0+d2hvdHlwZSA9IE5GUzRfQUNMX1dIT19FVkVSWU9ORTsKKwlhY2wtPm5hY2VzKys7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zNDIsNDYgKzM5Miw2IEBACiAJcmV0dXJuOwogfQogCi1pbnQKLW5mczRfYWNsX25mc3Y0X3RvX3Bvc2l4KHN0cnVjdCBuZnM0X2FjbCAqYWNsLCBzdHJ1Y3QgcG9zaXhfYWNsICoqcGFjbCwKLQkJc3RydWN0IHBvc2l4X2FjbCAqKmRwYWNsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IG5mczRfYWNsICpkYWNsOwotCWludCBlcnJvciA9IC1FTk9NRU07Ci0KLQkqcGFjbCA9IE5VTEw7Ci0JKmRwYWNsID0gTlVMTDsKLQotCWRhY2wgPSBuZnM0X2FjbF9uZXcoKTsKLQlpZiAoZGFjbCA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gbmZzNF9hY2xfc3BsaXQoYWNsLCBkYWNsKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2FjbDsKLQotCSpwYWNsID0gX25mc3Y0X3RvX3Bvc2l4X29uZShhY2wsIGZsYWdzKTsKLQlpZiAoSVNfRVJSKCpwYWNsKSkgewotCQllcnJvciA9IFBUUl9FUlIoKnBhY2wpOwotCQkqcGFjbCA9IE5VTEw7Ci0JCWdvdG8gb3V0X2FjbDsKLQl9Ci0KLQkqZHBhY2wgPSBfbmZzdjRfdG9fcG9zaXhfb25lKGRhY2wsIGZsYWdzKTsKLQlpZiAoSVNfRVJSKCpkcGFjbCkpIHsKLQkJZXJyb3IgPSBQVFJfRVJSKCpkcGFjbCk7Ci0JCSpkcGFjbCA9IE5VTEw7Ci0JfQotb3V0X2FjbDoKLQlpZiAoZXJyb3IpIHsKLQkJcG9zaXhfYWNsX3JlbGVhc2UoKnBhY2wpOwotCQkqcGFjbCA9IE5VTEw7Ci0JfQotCW5mczRfYWNsX2ZyZWUoZGFjbCk7Ci1vdXQ6Ci0JcmV0dXJuIGVycm9yOwotfQotCiAvKgogICogV2hpbGUgcHJvY2Vzc2luZyB0aGUgTkZTdjQgQUNFLCB0aGlzIG1haW50YWlucyBiaXRtYXNrcyByZXByZXNlbnRpbmcKICAqIHdoaWNoIHBlcm1pc3Npb24gYml0cyBoYXZlIGJlZW4gYWxsb3dlZCBhbmQgd2hpY2ggZGVuaWVkIHRvIGEgZ2l2ZW4KQEAgLTQwNiw2ICs0MTYsNyBAQAogICogY2FsY3VsYXRlZCBzbyBmYXI6ICovCiAKIHN0cnVjdCBwb3NpeF9hY2xfc3RhdGUgeworCWludCBlbXB0eTsKIAlzdHJ1Y3QgcG9zaXhfYWNlX3N0YXRlIG93bmVyOwogCXN0cnVjdCBwb3NpeF9hY2Vfc3RhdGUgZ3JvdXA7CiAJc3RydWN0IHBvc2l4X2FjZV9zdGF0ZSBvdGhlcjsKQEAgLTQyMSw2ICs0MzIsNyBAQAogCWludCBhbGxvYzsKIAogCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBwb3NpeF9hY2xfc3RhdGUpKTsKKwlzdGF0ZS0+ZW1wdHkgPSAxOwogCS8qCiAJICogSW4gdGhlIHdvcnN0IGNhc2UsIGVhY2ggaW5kaXZpZHVhbCBhY2wgY291bGQgYmUgZm9yIGEgZGlzdGluY3QKIAkgKiBuYW1lZCB1c2VyIG9yIGdyb3VwLCBidXQgd2UgZG9uJ3Qgbm8gd2hpY2gsIHNvIHdlIGFsbG9jYXRlCkBAIC00ODgsNiArNTAwLDIwIEBACiAJaW50IG5hY2U7CiAJaW50IGksIGVycm9yID0gMDsKIAorCS8qCisJICogQUNMcyB3aXRoIG5vIEFDRXMgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkgaW4gdGhlIGluaGVyaXRhYmxlCisJICogYW5kIGVmZmVjdGl2ZSBjYXNlczogd2hlbiB0aGVyZSBhcmUgbm8gaW5oZXJpdGFibGUgQUNFcywgd2UKKwkgKiBzZXQgYSB6ZXJvLWxlbmd0aCBkZWZhdWx0IHBvc2l4IGFjbDoKKwkgKi8KKwlpZiAoc3RhdGUtPmVtcHR5ICYmIChmbGFncyAmIE5GUzRfQUNMX1RZUEVfREVGQVVMVCkpIHsKKwkJcGFjbCA9IHBvc2l4X2FjbF9hbGxvYygwLCBHRlBfS0VSTkVMKTsKKwkJcmV0dXJuIHBhY2wgPyBwYWNsIDogRVJSX1BUUigtRU5PTUVNKTsKKwl9CisJLyoKKwkgKiBXaGVuIHRoZXJlIGFyZSBubyBlZmZlY3RpdmUgQUNFcywgdGhlIGZvbGxvd2luZyB3aWxsIGVuZAorCSAqIHVwIHNldHRpbmcgYSAzLWVsZW1lbnQgZWZmZWN0aXZlIHBvc2l4IEFDTCB3aXRoIGFsbAorCSAqIHBlcm1pc3Npb25zIHplcm8uCisJICovCiAJbmFjZSA9IDQgKyBzdGF0ZS0+dXNlcnMtPm4gKyBzdGF0ZS0+Z3JvdXBzLT5uOwogCXBhY2wgPSBwb3NpeF9hY2xfYWxsb2MobmFjZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYWNsKQpAQCAtNjAzLDYgKzYyOSw4IEBACiAJdTMyIG1hc2sgPSBhY2UtPmFjY2Vzc19tYXNrOwogCWludCBpOwogCisJc3RhdGUtPmVtcHR5ID0gMDsKKwogCXN3aXRjaCAoYWNlMnR5cGUoYWNlKSkgewogCWNhc2UgQUNMX1VTRVJfT0JKOgogCQlpZiAoYWNlLT50eXBlID09IE5GUzRfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFKSB7CkBAIC02NjYsNzUgKzY5NCw2MiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKgotX25mc3Y0X3RvX3Bvc2l4X29uZShzdHJ1Y3QgbmZzNF9hY2wgKm40YWNsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCitpbnQgbmZzNF9hY2xfbmZzdjRfdG9fcG9zaXgoc3RydWN0IG5mczRfYWNsICphY2wsIHN0cnVjdCBwb3NpeF9hY2wgKipwYWNsLAorCQkJICAgIHN0cnVjdCBwb3NpeF9hY2wgKipkcGFjbCwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBwb3NpeF9hY2xfc3RhdGUgc3RhdGU7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqcGFjbDsKKwlzdHJ1Y3QgcG9zaXhfYWNsX3N0YXRlIGVmZmVjdGl2ZV9hY2xfc3RhdGUsIGRlZmF1bHRfYWNsX3N0YXRlOwogCXN0cnVjdCBuZnM0X2FjZSAqYWNlOwogCWludCByZXQ7CiAKLQlyZXQgPSBpbml0X3N0YXRlKCZzdGF0ZSwgbjRhY2wtPm5hY2VzKTsKKwlyZXQgPSBpbml0X3N0YXRlKCZlZmZlY3RpdmVfYWNsX3N0YXRlLCBhY2wtPm5hY2VzKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gRVJSX1BUUihyZXQpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShhY2UsICZuNGFjbC0+YWNlX2hlYWQsIGxfYWNlKQotCQlwcm9jZXNzX29uZV92NF9hY2UoJnN0YXRlLCBhY2UpOwotCi0JcGFjbCA9IHBvc2l4X3N0YXRlX3RvX2FjbCgmc3RhdGUsIGZsYWdzKTsKLQotCWZyZWVfc3RhdGUoJnN0YXRlKTsKLQotCWlmICghSVNfRVJSKHBhY2wpKQotCQlzb3J0X3BhY2wocGFjbCk7Ci0JcmV0dXJuIHBhY2w7Ci19Ci0KLXN0YXRpYyBpbnQKLW5mczRfYWNsX3NwbGl0KHN0cnVjdCBuZnM0X2FjbCAqYWNsLCBzdHJ1Y3QgbmZzNF9hY2wgKmRhY2wpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaCwgKm47Ci0Jc3RydWN0IG5mczRfYWNlICphY2U7Ci0JaW50IGVycm9yID0gMDsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShoLCBuLCAmYWNsLT5hY2VfaGVhZCkgewotCQlhY2UgPSBsaXN0X2VudHJ5KGgsIHN0cnVjdCBuZnM0X2FjZSwgbF9hY2UpOwotCisJCXJldHVybiByZXQ7CisJcmV0ID0gaW5pdF9zdGF0ZSgmZGVmYXVsdF9hY2xfc3RhdGUsIGFjbC0+bmFjZXMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2VzdGF0ZTsKKwlyZXQgPSAtRUlOVkFMOworCWZvciAoYWNlID0gYWNsLT5hY2VzOyBhY2UgPCBhY2wtPmFjZXMgKyBhY2wtPm5hY2VzOyBhY2UrKykgewogCQlpZiAoYWNlLT50eXBlICE9IE5GUzRfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFICYmCiAJCSAgICBhY2UtPnR5cGUgIT0gTkZTNF9BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCisJCQlnb3RvIG91dF9kc3RhdGU7CiAJCWlmIChhY2UtPmZsYWcgJiB+TkZTNF9TVVBQT1JURURfRkxBR1MpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlzd2l0Y2ggKGFjZS0+ZmxhZyAmIE5GUzRfSU5IRVJJVEFOQ0VfRkxBR1MpIHsKLQkJY2FzZSAwOgotCQkJLyogTGVhdmUgdGhpcyBhY2UgaW4gdGhlIGVmZmVjdGl2ZSBhY2w6ICovCisJCQlnb3RvIG91dF9kc3RhdGU7CisJCWlmICgoYWNlLT5mbGFnICYgTkZTNF9JTkhFUklUQU5DRV9GTEFHUykgPT0gMCkgeworCQkJcHJvY2Vzc19vbmVfdjRfYWNlKCZlZmZlY3RpdmVfYWNsX3N0YXRlLCBhY2UpOwogCQkJY29udGludWU7Ci0JCWNhc2UgTkZTNF9JTkhFUklUQU5DRV9GTEFHUzoKLQkJCS8qIEFkZCB0aGlzIGFjZSB0byB0aGUgZGVmYXVsdCBhY2wgYW5kIHJlbW92ZSBpdAotCQkJICogZnJvbSB0aGUgZWZmZWN0aXZlIGFjbDogKi8KLQkJCWVycm9yID0gbmZzNF9hY2xfYWRkX2FjZShkYWNsLCBhY2UtPnR5cGUsIGFjZS0+ZmxhZywKLQkJCQlhY2UtPmFjY2Vzc19tYXNrLCBhY2UtPndob3R5cGUsIGFjZS0+d2hvKTsKLQkJCWlmIChlcnJvcikKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQlsaXN0X2RlbChoKTsKLQkJCWtmcmVlKGFjZSk7Ci0JCQlhY2wtPm5hY2VzLS07Ci0JCQlicmVhazsKLQkJY2FzZSBORlM0X0lOSEVSSVRBTkNFX0ZMQUdTICYgfk5GUzRfQUNFX0lOSEVSSVRfT05MWV9BQ0U6Ci0JCQkvKiBBZGQgdGhpcyBhY2UgdG8gdGhlIGRlZmF1bHQsIGJ1dCBsZWF2ZSBpdCBpbgotCQkJICogdGhlIGVmZmVjdGl2ZSBhY2wgYXMgd2VsbDogKi8KLQkJCWVycm9yID0gbmZzNF9hY2xfYWRkX2FjZShkYWNsLCBhY2UtPnR5cGUsIGFjZS0+ZmxhZywKLQkJCQlhY2UtPmFjY2Vzc19tYXNrLCBhY2UtPndob3R5cGUsIGFjZS0+d2hvKTsKLQkJCWlmIChlcnJvcikKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJCWlmICghKGZsYWdzICYgTkZTNF9BQ0xfRElSKSkKKwkJCWdvdG8gb3V0X2RzdGF0ZTsKKwkJLyoKKwkJICogTm90ZSB0aGF0IHdoZW4gb25seSBvbmUgb2YgRklMRV9JTkhFUklUIG9yIERJUkVDVE9SWV9JTkhFUklUCisJCSAqIGlzIHNldCwgd2UncmUgZWZmZWN0aXZlbHkgdHVybmluZyBvbiB0aGUgb3RoZXIuICBUaGF0J3MgT0ssCisJCSAqIGFjY29yZGluZyB0byByZmMgMzUzMC4KKwkJICovCisJCXByb2Nlc3Nfb25lX3Y0X2FjZSgmZGVmYXVsdF9hY2xfc3RhdGUsIGFjZSk7CisKKwkJaWYgKCEoYWNlLT5mbGFnICYgTkZTNF9BQ0VfSU5IRVJJVF9PTkxZX0FDRSkpCisJCQlwcm9jZXNzX29uZV92NF9hY2UoJmVmZmVjdGl2ZV9hY2xfc3RhdGUsIGFjZSk7CiAJfQotCXJldHVybiAwOworCSpwYWNsID0gcG9zaXhfc3RhdGVfdG9fYWNsKCZlZmZlY3RpdmVfYWNsX3N0YXRlLCBmbGFncyk7CisJaWYgKElTX0VSUigqcGFjbCkpIHsKKwkJcmV0ID0gUFRSX0VSUigqcGFjbCk7CisJCWdvdG8gb3V0X2RzdGF0ZTsKKwl9CisJKmRwYWNsID0gcG9zaXhfc3RhdGVfdG9fYWNsKCZkZWZhdWx0X2FjbF9zdGF0ZSwKKwkJCQkJCWZsYWdzIHwgTkZTNF9BQ0xfVFlQRV9ERUZBVUxUKTsKKwlpZiAoSVNfRVJSKCpkcGFjbCkpIHsKKwkJcmV0ID0gUFRSX0VSUigqZHBhY2wpOworCQlwb3NpeF9hY2xfcmVsZWFzZSgqcGFjbCk7CisJCWdvdG8gb3V0X2RzdGF0ZTsKKwl9CisJc29ydF9wYWNsKCpwYWNsKTsKKwlzb3J0X3BhY2woKmRwYWNsKTsKKwlyZXQgPSAwOworb3V0X2RzdGF0ZToKKwlmcmVlX3N0YXRlKCZkZWZhdWx0X2FjbF9zdGF0ZSk7CitvdXRfZXN0YXRlOgorCWZyZWVfc3RhdGUoJmVmZmVjdGl2ZV9hY2xfc3RhdGUpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzaG9ydApAQCAtNzU5LDQ4ICs3NzQsMjIgQEAKIEVYUE9SVF9TWU1CT0wobmZzNF9hY2xfbmZzdjRfdG9fcG9zaXgpOwogCiBzdHJ1Y3QgbmZzNF9hY2wgKgotbmZzNF9hY2xfbmV3KHZvaWQpCituZnM0X2FjbF9uZXcoaW50IG4pCiB7CiAJc3RydWN0IG5mczRfYWNsICphY2w7CiAKLQlpZiAoKGFjbCA9IGttYWxsb2Moc2l6ZW9mKCphY2wpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlhY2wgPSBrbWFsbG9jKHNpemVvZigqYWNsKSArIG4qc2l6ZW9mKHN0cnVjdCBuZnM0X2FjZSksIEdGUF9LRVJORUwpOworCWlmIChhY2wgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0KIAlhY2wtPm5hY2VzID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmYWNsLT5hY2VfaGVhZCk7Ci0KIAlyZXR1cm4gYWNsOwogfQogCiB2b2lkCi1uZnM0X2FjbF9mcmVlKHN0cnVjdCBuZnM0X2FjbCAqYWNsKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmg7Ci0Jc3RydWN0IG5mczRfYWNlICphY2U7Ci0KLQlpZiAoIWFjbCkKLQkJcmV0dXJuOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZhY2wtPmFjZV9oZWFkKSkgewotCQloID0gYWNsLT5hY2VfaGVhZC5uZXh0OwotCQlsaXN0X2RlbChoKTsKLQkJYWNlID0gbGlzdF9lbnRyeShoLCBzdHJ1Y3QgbmZzNF9hY2UsIGxfYWNlKTsKLQkJa2ZyZWUoYWNlKTsKLQl9Ci0KLQlrZnJlZShhY2wpOwotCi0JcmV0dXJuOwotfQotCi1pbnQKIG5mczRfYWNsX2FkZF9hY2Uoc3RydWN0IG5mczRfYWNsICphY2wsIHUzMiB0eXBlLCB1MzIgZmxhZywgdTMyIGFjY2Vzc19tYXNrLAogCQlpbnQgd2hvdHlwZSwgdWlkX3Qgd2hvKQogewotCXN0cnVjdCBuZnM0X2FjZSAqYWNlOwotCi0JaWYgKChhY2UgPSBrbWFsbG9jKHNpemVvZigqYWNlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCXN0cnVjdCBuZnM0X2FjZSAqYWNlID0gYWNsLT5hY2VzICsgYWNsLT5uYWNlczsKIAogCWFjZS0+dHlwZSA9IHR5cGU7CiAJYWNlLT5mbGFnID0gZmxhZzsKQEAgLTgwOCwxMCArNzk3LDcgQEAKIAlhY2UtPndob3R5cGUgPSB3aG90eXBlOwogCWFjZS0+d2hvID0gd2hvOwogCi0JbGlzdF9hZGRfdGFpbCgmYWNlLT5sX2FjZSwgJmFjbC0+YWNlX2hlYWQpOwogCWFjbC0+bmFjZXMrKzsKLQotCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTg2NSw3ICs4NTEsNiBAQAogfQogCiBFWFBPUlRfU1lNQk9MKG5mczRfYWNsX25ldyk7Ci1FWFBPUlRfU1lNQk9MKG5mczRfYWNsX2ZyZWUpOwogRVhQT1JUX1NZTUJPTChuZnM0X2FjbF9hZGRfYWNlKTsKIEVYUE9SVF9TWU1CT0wobmZzNF9hY2xfZ2V0X3dob3R5cGUpOwogRVhQT1JUX1NZTUJPTChuZnM0X2FjbF93cml0ZV93aG8pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKaW5kZXggZjU3NjU1YS4uZmIxNGQ2OCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYworKysgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCkBAIC0zODcsNyArMzg3LDYgQEAKIAkJLmFkZHJlc3MJPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsCiAJCS5hZGRyc2l6ZQk9IHNpemVvZihhZGRyKSwKIAkJLnRpbWVvdXQJPSAmdGltZXBhcm1zLAotCQkuc2VydmVybmFtZQk9IGNscC0+Y2xfbmFtZS5kYXRhLAogCQkucHJvZ3JhbQk9IHByb2dyYW0sCiAJCS52ZXJzaW9uCT0gbmZzX2NiX3ZlcnNpb25bMV0tPm51bWJlciwKIAkJLmF1dGhmbGF2b3IJPSBSUENfQVVUSF9VTklYLAkvKiBYWFg6IG5lZWQgQVVUSF9HU1MuLi4gKi8KQEAgLTM5Nyw2ICszOTYsNyBAQAogCQkucnBjX3Byb2MgICAgICAgPSAmbmZzNF9jYl9wcm9jZWR1cmVzW05GU1BST0M0X0NMTlRfQ0JfTlVMTF0sCiAJCS5ycGNfYXJncCAgICAgICA9IGNscCwKIAl9OworCWNoYXIgY2xpZW50bmFtZVsxNl07CiAJaW50IHN0YXR1czsKIAogCWlmIChhdG9taWNfcmVhZCgmY2ItPmNiX3NldCkpCkBAIC00MTksNiArNDE5LDExIEBACiAJbWVtc2V0KHByb2dyYW0tPnN0YXRzLCAwLCBzaXplb2YoY2ItPmNiX3N0YXQpKTsKIAlwcm9ncmFtLT5zdGF0cy0+cHJvZ3JhbSA9IHByb2dyYW07CiAKKwkvKiBKdXN0IGhlcmUgdG8gbWFrZSBzb21lIHByaW50aydzIG1vcmUgdXNlZnVsOiAqLworCXNucHJpbnRmKGNsaWVudG5hbWUsIHNpemVvZihjbGllbnRuYW1lKSwKKwkJIiV1LiV1LiV1LiV1IiwgTklQUVVBRChhZGRyLnNpbl9hZGRyKSk7CisJYXJncy5zZXJ2ZXJuYW1lID0gY2xpZW50bmFtZTsKKwogCS8qIENyZWF0ZSBSUEMgY2xpZW50ICovCiAJY2ItPmNiX2NsaWVudCA9IHJwY19jcmVhdGUoJmFyZ3MpOwogCWlmIChJU19FUlIoY2ItPmNiX2NsaWVudCkpIHsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHhkci5jIGIvZnMvbmZzZC9uZnM0eGRyLmMKaW5kZXggMGVmYmE1NS4uNWQwOTBmMSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0eGRyLmMKKysrIGIvZnMvbmZzZC9uZnM0eGRyLmMKQEAgLTE5OSwyNCArMTk5LDIyIEBACiAKIHN0YXRpYyBjaGFyICpzYXZlbWVtKHN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKmFyZ3AsIF9fYmUzMiAqcCwgaW50IG5ieXRlcykKIHsKLQl2b2lkICpuZXcgPSBOVUxMOwogCWlmIChwID09IGFyZ3AtPnRtcCkgewotCQluZXcgPSBrbWFsbG9jKG5ieXRlcywgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmV3KSByZXR1cm4gTlVMTDsKLQkJcCA9IG5ldzsKKwkJcCA9IGttYWxsb2MobmJ5dGVzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwKQorCQkJcmV0dXJuIE5VTEw7CiAJCW1lbWNweShwLCBhcmdwLT50bXAsIG5ieXRlcyk7CiAJfSBlbHNlIHsKIAkJQlVHX09OKHAgIT0gYXJncC0+dG1wcCk7CiAJCWFyZ3AtPnRtcHAgPSBOVUxMOwogCX0KIAlpZiAoZGVmZXJfZnJlZShhcmdwLCBrZnJlZSwgcCkpIHsKLQkJa2ZyZWUobmV3KTsKKwkJa2ZyZWUocCk7CiAJCXJldHVybiBOVUxMOwogCX0gZWxzZQogCQlyZXR1cm4gKGNoYXIgKilwOwogfQogCi0KIHN0YXRpYyBfX2JlMzIKIG5mc2Q0X2RlY29kZV9iaXRtYXAoc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyAqYXJncCwgdTMyICpibXZhbCkKIHsKQEAgLTI1NSw3ICsyNTMsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJLyoKLQkgKiBBY2NvcmRpbmcgdG8gc3BlYywgdW5zdXBwb3J0ZWQgYXR0cmlidXRlcyByZXR1cm4gRVJSX05PVFNVUFA7CisJICogQWNjb3JkaW5nIHRvIHNwZWMsIHVuc3VwcG9ydGVkIGF0dHJpYnV0ZXMgcmV0dXJuIEVSUl9BVFRSTk9UU1VQUDsKIAkgKiByZWFkLW9ubHkgYXR0cmlidXRlcyByZXR1cm4gRVJSX0lOVkFMLgogCSAqLwogCWlmICgoYm12YWxbMF0gJiB+TkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDApIHx8IChibXZhbFsxXSAmIH5ORlNEX1NVUFBPUlRFRF9BVFRSU19XT1JEMSkpCkBAIC0yNzMsNDIgKzI3MSw0MiBAQAogCQlpYXR0ci0+aWFfdmFsaWQgfD0gQVRUUl9TSVpFOwogCX0KIAlpZiAoYm12YWxbMF0gJiBGQVRUUjRfV09SRDBfQUNMKSB7Ci0JCWludCBuYWNlLCBpOwotCQlzdHJ1Y3QgbmZzNF9hY2UgYWNlOworCQlpbnQgbmFjZTsKKwkJc3RydWN0IG5mczRfYWNlICphY2U7CiAKIAkJUkVBRF9CVUYoNCk7IGxlbiArPSA0OwogCQlSRUFEMzIobmFjZSk7CiAKLQkJKmFjbCA9IG5mczRfYWNsX25ldygpOworCQlpZiAobmFjZSA+IE5GUzRfQUNMX01BWCkKKwkJCXJldHVybiBuZnNlcnJfcmVzb3VyY2U7CisKKwkJKmFjbCA9IG5mczRfYWNsX25ldyhuYWNlKTsKIAkJaWYgKCphY2wgPT0gTlVMTCkgewogCQkJaG9zdF9lcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXRfbmZzZXJyOwogCQl9Ci0JCWRlZmVyX2ZyZWUoYXJncCwgKHZvaWQgKCopKGNvbnN0IHZvaWQgKikpbmZzNF9hY2xfZnJlZSwgKmFjbCk7CisJCWRlZmVyX2ZyZWUoYXJncCwga2ZyZWUsICphY2wpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBuYWNlOyBpKyspIHsKKwkJKCphY2wpLT5uYWNlcyA9IG5hY2U7CisJCWZvciAoYWNlID0gKCphY2wpLT5hY2VzOyBhY2UgPCAoKmFjbCktPmFjZXMgKyBuYWNlOyBhY2UrKykgewogCQkJUkVBRF9CVUYoMTYpOyBsZW4gKz0gMTY7Ci0JCQlSRUFEMzIoYWNlLnR5cGUpOwotCQkJUkVBRDMyKGFjZS5mbGFnKTsKLQkJCVJFQUQzMihhY2UuYWNjZXNzX21hc2spOworCQkJUkVBRDMyKGFjZS0+dHlwZSk7CisJCQlSRUFEMzIoYWNlLT5mbGFnKTsKKwkJCVJFQUQzMihhY2UtPmFjY2Vzc19tYXNrKTsKIAkJCVJFQUQzMihkdW1teTMyKTsKIAkJCVJFQURfQlVGKGR1bW15MzIpOwogCQkJbGVuICs9IFhEUl9RVUFETEVOKGR1bW15MzIpIDw8IDI7CiAJCQlSRUFETUVNKGJ1ZiwgZHVtbXkzMik7Ci0JCQlhY2Uud2hvdHlwZSA9IG5mczRfYWNsX2dldF93aG90eXBlKGJ1ZiwgZHVtbXkzMik7CisJCQlhY2UtPndob3R5cGUgPSBuZnM0X2FjbF9nZXRfd2hvdHlwZShidWYsIGR1bW15MzIpOwogCQkJaG9zdF9lcnIgPSAwOwotCQkJaWYgKGFjZS53aG90eXBlICE9IE5GUzRfQUNMX1dIT19OQU1FRCkKLQkJCQlhY2Uud2hvID0gMDsKLQkJCWVsc2UgaWYgKGFjZS5mbGFnICYgTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUCkKKwkJCWlmIChhY2UtPndob3R5cGUgIT0gTkZTNF9BQ0xfV0hPX05BTUVEKQorCQkJCWFjZS0+d2hvID0gMDsKKwkJCWVsc2UgaWYgKGFjZS0+ZmxhZyAmIE5GUzRfQUNFX0lERU5USUZJRVJfR1JPVVApCiAJCQkJaG9zdF9lcnIgPSBuZnNkX21hcF9uYW1lX3RvX2dpZChhcmdwLT5ycXN0cCwKLQkJCQkJCWJ1ZiwgZHVtbXkzMiwgJmFjZS53aG8pOworCQkJCQkJYnVmLCBkdW1teTMyLCAmYWNlLT53aG8pOwogCQkJZWxzZQogCQkJCWhvc3RfZXJyID0gbmZzZF9tYXBfbmFtZV90b191aWQoYXJncC0+cnFzdHAsCi0JCQkJCQlidWYsIGR1bW15MzIsICZhY2Uud2hvKTsKLQkJCWlmIChob3N0X2VycikKLQkJCQlnb3RvIG91dF9uZnNlcnI7Ci0JCQlob3N0X2VyciA9IG5mczRfYWNsX2FkZF9hY2UoKmFjbCwgYWNlLnR5cGUsIGFjZS5mbGFnLAotCQkJCSBhY2UuYWNjZXNzX21hc2ssIGFjZS53aG90eXBlLCBhY2Uud2hvKTsKKwkJCQkJCWJ1ZiwgZHVtbXkzMiwgJmFjZS0+d2hvKTsKIAkJCWlmIChob3N0X2VycikKIAkJCQlnb3RvIG91dF9uZnNlcnI7CiAJCX0KQEAgLTE1OTYsNyArMTU5NCw2IEBACiAJfQogCWlmIChibXZhbDAgJiBGQVRUUjRfV09SRDBfQUNMKSB7CiAJCXN0cnVjdCBuZnM0X2FjZSAqYWNlOwotCQlzdHJ1Y3QgbGlzdF9oZWFkICpoOwogCiAJCWlmIChhY2wgPT0gTlVMTCkgewogCQkJaWYgKChidWZsZW4gLT0gNCkgPCAwKQpAQCAtMTYwOSw5ICsxNjA2LDcgQEAKIAkJCWdvdG8gb3V0X3Jlc291cmNlOwogCQlXUklURTMyKGFjbC0+bmFjZXMpOwogCi0JCWxpc3RfZm9yX2VhY2goaCwgJmFjbC0+YWNlX2hlYWQpIHsKLQkJCWFjZSA9IGxpc3RfZW50cnkoaCwgc3RydWN0IG5mczRfYWNlLCBsX2FjZSk7Ci0KKwkJZm9yIChhY2UgPSBhY2wtPmFjZXM7IGFjZSA8IGFjbC0+YWNlcyArIGFjbC0+bmFjZXM7IGFjZSsrKSB7CiAJCQlpZiAoKGJ1ZmxlbiAtPSA0KjMpIDwgMCkKIAkJCQlnb3RvIG91dF9yZXNvdXJjZTsKIAkJCVdSSVRFMzIoYWNlLT50eXBlKTsKQEAgLTE4MjEsNyArMTgxNiw3IEBACiAJc3RhdHVzID0gbmZzX29rOwogCiBvdXQ6Ci0JbmZzNF9hY2xfZnJlZShhY2wpOworCWtmcmVlKGFjbCk7CiAJaWYgKGZocCA9PSAmdGVtcGZoKQogCQlmaF9wdXQoJnRlbXBmaCk7CiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDgyODMyMzYuLjdlNmFhMjQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtNDY2LDcgKzQ2NiwxMCBAQAogCXBvc2l4X2FjbF9yZWxlYXNlKGRwYWNsKTsKIAlyZXR1cm4gKGVycm9yKTsKIG91dF9uZnNlcnI6Ci0JZXJyb3IgPSBuZnNlcnJubyhob3N0X2Vycm9yKTsKKwlpZiAoaG9zdF9lcnJvciA9PSAtRU9QTk9UU1VQUCkKKwkJZXJyb3IgPSBuZnNlcnJfYXR0cm5vdHN1cHA7CisJZWxzZQorCQllcnJvciA9IG5mc2Vycm5vKGhvc3RfZXJyb3IpOwogCWdvdG8gb3V0OwogfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuYwppbmRleCBmN2ZhNTJiLi4yOGRkNzU3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9uYW1laS5jCisrKyBiL2ZzL29jZnMyL25hbWVpLmMKQEAgLTEwOTgsNyArMTA5OCw3IEBACiAJCQlCVUcoKTsKIAl9CiAKLQkvKiBBc3N1bWUgYSBkaXJlY3RvcnkgaGVpcmFyY2h5IHRodXNseToKKwkvKiBBc3N1bWUgYSBkaXJlY3RvcnkgaGllcmFyY2h5IHRodXNseToKIAkgKiBhL2IvYwogCSAqIGEvZAogCSAqIGEsYixjLCBhbmQgZCBhcmUgYWxsIGRpcmVjdG9yaWVzLgpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IGFjMzJhMmUuLjIyZDM4ZmYgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTM1OCw4ICszNTgsNyBAQAogCXAtPmlvc1swXSA9IHAtPmlvc1sxXSA9IDA7CiAJcC0+c2VjdG9yc1swXSA9IHAtPnNlY3RvcnNbMV0gPSAwOwogCXN5c2ZzX3JlbW92ZV9saW5rKCZwLT5rb2JqLCAic3Vic3lzdGVtIik7Ci0JaWYgKHAtPmhvbGRlcl9kaXIpCi0JCWtvYmplY3RfdW5yZWdpc3RlcihwLT5ob2xkZXJfZGlyKTsKKwlrb2JqZWN0X3VucmVnaXN0ZXIocC0+aG9sZGVyX2Rpcik7CiAJa29iamVjdF91ZXZlbnQoJnAtPmtvYmosIEtPQkpfUkVNT1ZFKTsKIAlrb2JqZWN0X2RlbCgmcC0+a29iaik7CiAJa29iamVjdF9wdXQoJnAtPmtvYmopOwpAQCAtNjAzLDEwICs2MDIsOCBAQAogCWRpc2stPnN0YW1wID0gMDsKIAogCWtvYmplY3RfdWV2ZW50KCZkaXNrLT5rb2JqLCBLT0JKX1JFTU9WRSk7Ci0JaWYgKGRpc2stPmhvbGRlcl9kaXIpCi0JCWtvYmplY3RfdW5yZWdpc3RlcihkaXNrLT5ob2xkZXJfZGlyKTsKLQlpZiAoZGlzay0+c2xhdmVfZGlyKQotCQlrb2JqZWN0X3VucmVnaXN0ZXIoZGlzay0+c2xhdmVfZGlyKTsKKwlrb2JqZWN0X3VucmVnaXN0ZXIoZGlzay0+aG9sZGVyX2Rpcik7CisJa29iamVjdF91bnJlZ2lzdGVyKGRpc2stPnNsYXZlX2Rpcik7CiAJaWYgKGRpc2stPmRyaXZlcmZzX2RldikgewogCQljaGFyICpkaXNrX25hbWUgPSBtYWtlX2Jsb2NrX25hbWUoZGlzayk7CiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZkaXNrLT5rb2JqLCAiZGV2aWNlIik7CmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggNjgwOTBlOC4uZWJhZmRlNyAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgpAQCAtOTg1LDYgKzk4NiwxMCBAQAogCQlnb3RvIGVycl9mZHI7CiAJZmR3ID0gZXJyb3I7CiAKKwllcnJvciA9IGF1ZGl0X2ZkX3BhaXIoZmRyLCBmZHcpOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gZXJyX2ZkdzsKKwogCWZkX2luc3RhbGwoZmRyLCBmcik7CiAJZmRfaW5zdGFsbChmZHcsIGZ3KTsKIAlmZFswXSA9IGZkcjsKQEAgLTk5Miw2ICs5OTcsOCBAQAogCiAJcmV0dXJuIDA7CiAKKyBlcnJfZmR3OgorCXB1dF91bnVzZWRfZmQoZmR3KTsKICBlcnJfZmRyOgogCXB1dF91bnVzZWRfZmQoZmRyKTsKICBlcnJfcmVhZF9waXBlOgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCA0ZjU3NDVhLi4wMWY3NzY5IDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtNTgxLDcgKzU4MSw3IEBACiAKICNpZm5kZWYgbWVtX3dyaXRlCiAvKiBUaGlzIGlzIGEgc2VjdXJpdHkgaGF6YXJkICovCi1zdGF0aWMgc3NpemVfdCBtZW1fd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyICogYnVmLAorc3RhdGljIHNzaXplX3QgbWVtX3dyaXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlpbnQgY29waWVkOwpkaWZmIC0tZ2l0IGEvZnMvc3RhY2suYyBiL2ZzL3N0YWNrLmMKaW5kZXggOGZmYjg4MGQuLjY3NzE2ZjYgMTAwNjQ0Ci0tLSBhL2ZzL3N0YWNrLmMKKysrIGIvZnMvc3RhY2suYwpAQCAtMjAsMTEgKzIwLDYgQEAKIHZvaWQgZnNzdGFja19jb3B5X2F0dHJfYWxsKHN0cnVjdCBpbm9kZSAqZGVzdCwgY29uc3Qgc3RydWN0IGlub2RlICpzcmMsCiAJCQkJaW50ICgqZ2V0X25saW5rcykoc3RydWN0IGlub2RlICopKQogewotCWlmICghZ2V0X25saW5rcykKLQkJZGVzdC0+aV9ubGluayA9IHNyYy0+aV9ubGluazsKLQllbHNlCi0JCWRlc3QtPmlfbmxpbmsgPSAoKmdldF9ubGlua3MpKGRlc3QpOwotCiAJZGVzdC0+aV9tb2RlID0gc3JjLT5pX21vZGU7CiAJZGVzdC0+aV91aWQgPSBzcmMtPmlfdWlkOwogCWRlc3QtPmlfZ2lkID0gc3JjLT5pX2dpZDsKQEAgLTM0LDUgKzI5LDE0IEBACiAJZGVzdC0+aV9jdGltZSA9IHNyYy0+aV9jdGltZTsKIAlkZXN0LT5pX2Jsa2JpdHMgPSBzcmMtPmlfYmxrYml0czsKIAlkZXN0LT5pX2ZsYWdzID0gc3JjLT5pX2ZsYWdzOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIG5saW5rcyBBRlRFUiB1cGRhdGluZyB0aGUgYWJvdmUgZmllbGRzLCBiZWNhdXNlIHRoZQorCSAqIGdldF9saW5rcyBjYWxsYmFjayBtYXkgZGVwZW5kIG9uIHRoZW0uCisJICovCisJaWYgKCFnZXRfbmxpbmtzKQorCQlkZXN0LT5pX25saW5rID0gc3JjLT5pX25saW5rOworCWVsc2UKKwkJZGVzdC0+aV9ubGluayA9ICgqZ2V0X25saW5rcykoZGVzdCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmc3N0YWNrX2NvcHlfYXR0cl9hbGwpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZmlsZS5jIGIvZnMvc3lzZnMvZmlsZS5jCmluZGV4IGMwZTExNzYuLjk4YjA5MTAgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2ZpbGUuYworKysgYi9mcy9zeXNmcy9maWxlLmMKQEAgLTU0LDcgKzU0LDcgQEAKIC8qKgogICoJYWRkX3RvX2NvbGxlY3Rpb24gLSBhZGQgYnVmZmVyIHRvIGEgY29sbGVjdGlvbgogICoJQGJ1ZmZlcjoJYnVmZmVyIHRvIGJlIGFkZGVkCi0gKglAbm9kZQkJaW5vZGUgb2Ygc2V0IHRvIGFkZCB0bworICoJQG5vZGU6CQlpbm9kZSBvZiBzZXQgdG8gYWRkIHRvCiAgKi8KIAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCAxYTQxMDNjLi4yZjJjNDBkIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTkwMCw3ICs5MDAsNyBAQAogCS5zZXRfeHF1b3RhCQk9IHhmc19mc19zZXR4cXVvdGEsCiB9OwogCi1TVEFUSUMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgeGZzX2ZzX3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgeGZzX2ZzX3R5cGUgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gInhmcyIsCiAJLmdldF9zYgkJCT0geGZzX2ZzX2dldF9zYiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2ludGVycC5oIGIvaW5jbHVkZS9hY3BpL2FjaW50ZXJwLmgKaW5kZXggY2U3YzlkNi4uNzM5NjdjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjaW50ZXJwLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjaW50ZXJwLmgKQEAgLTI1Myw3ICsyNTMsOCBAQAogCiB2b2lkIGFjcGlfZXhfcmVsZWFzZV9hbGxfbXV0ZXhlcyhzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgKnRocmVhZCk7CiAKLXZvaWQgYWNwaV9leF91bmxpbmtfbXV0ZXgodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2MpOwordm9pZCBhY3BpX2V4X3VubGlua19tdXRleCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKKwkJCSAgc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICp0aHJlYWQpOwogCiAvKgogICogZXhwcmVwIC0gQUNQSSBBTUwgZXhlY3V0aW9uIC0gcHJlcCB1dGlsaXRpZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oIGIvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKaW5kZXggMDRlOTczNS4uNTIwNmQ2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKQEAgLTE1NSw3ICsxNTUsNyBAQAogc3RydWN0IGFjcGlfb2JqZWN0X211dGV4IHsKIAlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHU4IHN5bmNfbGV2ZWw7CS8qIDAtMTUsIHNwZWNpZmllZCBpbiBNdXRleCgpIGNhbGwgKi8KIAl1MTYgYWNxdWlzaXRpb25fZGVwdGg7CS8qIEFsbG93IG11bHRpcGxlIEFjcXVpcmVzLCBzYW1lIHRocmVhZCAqLwotCXN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSAqb3duZXJfdGhyZWFkOwkvKiBDdXJyZW50IG93bmVyIG9mIHRoZSBtdXRleCAqLworCWFjcGlfdGhyZWFkX2lkIG93bmVyX3RocmVhZF9pZDsJLyogQ3VycmVudCBvd25lciBvZiB0aGUgbXV0ZXggKi8KIAlhY3BpX211dGV4IG9zX211dGV4OwkvKiBBY3R1YWwgT1Mgc3luY2hyb25pemF0aW9uIG9iamVjdCAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnByZXY7CS8qIExpbmsgZm9yIGxpc3Qgb2YgYWNxdWlyZWQgbXV0ZXhlcyAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5leHQ7CS8qIExpbmsgZm9yIGxpc3Qgb2YgYWNxdWlyZWQgbXV0ZXhlcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCmluZGV4IDRkYzhhNTAuLmY2Mjc1YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKQEAgLTEwNSwxMiArMTA1LDYgQEAKIAogaW50IGFjcGlfcHJvY2Vzc29yX3NldF90aGVybWFsX2xpbWl0KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHR5cGUpOwogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG90IEtleXMKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWV4dGVybiBpbnQgYWNwaV9zcGVjaWZpY19ob3RrZXlfZW5hYmxlZDsKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY2sgU3RhdGlvbgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTIyLDEwICsxMTYsMzQgQEAKIAlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNvbnRleHQpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSk7CiAjZWxzZQotI2RlZmluZSBpc19kb2NrX2RldmljZShoKQkJCSgwKQotI2RlZmluZSByZWdpc3Rlcl9kb2NrX25vdGlmaWVyKG5iKSAJCSgtRU5PREVWKQotI2RlZmluZSB1bnJlZ2lzdGVyX2RvY2tfbm90aWZpZXIobmIpICAgICAgICAgICAJZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIHJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoaDEsIGgyLCBjKQkoLUVOT0RFVikKLSNkZWZpbmUgdW5yZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKGgpICAgICAgIGRvIHsgfSB3aGlsZSgwKQorc3RhdGljIGlubGluZSBpbnQgaXNfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfZG9ja19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiAtRU5PREVWOworfQorc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfZG9ja19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworfQorc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUsCisJCQkJYWNwaV9ub3RpZnlfaGFuZGxlciBoYW5kbGVyLCB2b2lkICpjb250ZXh0KQoreworCXJldHVybiAtRU5PREVWOworfQorc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpCit7Cit9CiAjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1c3BlbmQvUmVzdW1lCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWZkZWYgQ09ORklHX0FDUElfU0xFRVAKK2V4dGVybiBpbnQgYWNwaV9zbGVlcF9pbml0KHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgYWNwaV9zbGVlcF9pbml0KCkgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKwogI2VuZGlmIC8qX19BQ1BJX0RSSVZFUlNfSF9fKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKaW5kZXggNzgxMzk0Yi4uMjc4NTA1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKQEAgLTI0MCwxMiArMjQwLDYgQEAKIGFjcGlfb3NfdmFsaWRhdGVfYWRkcmVzcyh1OCBzcGFjZV9pZCwKIAkJCSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzcywgYWNwaV9zaXplIGxlbmd0aCk7CiAKLXU4IGFjcGlfb3NfcmVhZGFibGUodm9pZCAqcG9pbnRlciwgYWNwaV9zaXplIGxlbmd0aCk7Ci0KLSNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQotdTggYWNwaV9vc193cml0YWJsZSh2b2lkICpwb2ludGVyLCBhY3BpX3NpemUgbGVuZ3RoKTsKLSNlbmRpZgotCiB1NjQgYWNwaV9vc19nZXRfdGltZXIodm9pZCk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfb3Nfc2lnbmFsKHUzMiBmdW5jdGlvbiwgdm9pZCAqaW5mbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKaW5kZXggNzc5OGQyYS4uOTE2YzAxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaApAQCAtNzksNiArNzksNyBAQAogCXUzMiBibV9hY3Rpdml0eTsKIAlpbnQgY291bnQ7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4IHN0YXRlc1tBQ1BJX1BST0NFU1NPUl9NQVhfUE9XRVJdOworCWludCB0aW1lcl9icm9hZGNhc3Rfb25fc3RhdGU7CiB9OwogCiAvKiBQZXJmb3JtYW5jZSBNYW5hZ2VtZW50ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vLmdpdGlnbm9yZSBiL2luY2x1ZGUvYXNtLWFybS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMmMxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2FyY2gKK21hY2gtdHlwZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL2VudHJ5LW1hY3JvLlMKaW5kZXggMWViMzUwMy4uODNmZGY2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hYWVjMjAwMC9lbnRyeS1tYWNyby5TCkBAIC0xNSw2ICsxNSwxMiBAQAogCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KIAorCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCS5lbmRtCisKKwkJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJCS5lbmRtCisKIAkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAogCQltb3YJcjQsICMweGY4MDAwMDAwCiAJCWFkZAlyNCwgcjQsICMweDAwMDAwNTAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfYWljLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfYWljLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX2FpYy5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfYWljLmgKaW5kZXggMjY3ZTY5OC4uZGY0NGMxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX2FpYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9haWMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfYWljLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9haWMuaAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBJdmFuIEtva3NoYXlza3kKICAqIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX2RiZ3UuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9kYmd1LmgKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX2RiZ3UuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX2RiZ3UuaAppbmRleCBlNGI4YjI3Li5iMDM2OWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfZGJndS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9kYmd1LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX2RiZ3UuaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX2RiZ3UuaAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBJdmFuIEtva3NoYXlza3kKICAqIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZQpAQCAtMzUsNiArMzUsMjAgQEAKICNkZWZpbmUJCUFUOTFfQ0lEUl9OVlBTSVoJKDB4ZiAgPDwgOCkJCS8qIE5vbnZvbGF0aWxlIFByb2dyYW0gTWVtb3J5IFNpemUgKi8KICNkZWZpbmUJCUFUOTFfQ0lEUl9OVlBTSVoyCSgweGYgIDw8IDEyKQkJLyogU2Vjb25kIE5vbnZvbGF0aWxlIFByb2dyYW0gTWVtb3J5IFNpemUgKi8KICNkZWZpbmUJCUFUOTFfQ0lEUl9TUkFNU0laCSgweGYgIDw8IDE2KQkJLyogSW50ZXJuYWwgU1JBTSBTaXplICovCisjZGVmaW5lCQkJQVQ5MV9DSURSX1NSQU1TSVpfMUsJKDEgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9DSURSX1NSQU1TSVpfMksJKDIgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9DSURSX1NSQU1TSVpfMTEySwkoNCA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX0NJRFJfU1JBTVNJWl80SwkoNSA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX0NJRFJfU1JBTVNJWl84MEsJKDYgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9DSURSX1NSQU1TSVpfMTYwSwkoNyA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX0NJRFJfU1JBTVNJWl84SwkoOCA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX0NJRFJfU1JBTVNJWl8xNksJKDkgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9DSURSX1NSQU1TSVpfMzJLCSgxMCA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX0NJRFJfU1JBTVNJWl82NEsJKDExIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfQ0lEUl9TUkFNU0laXzEyOEsJKDEyIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfQ0lEUl9TUkFNU0laXzI1NksJKDEzIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfQ0lEUl9TUkFNU0laXzk2SwkoMTQgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9DSURSX1NSQU1TSVpfNTEySwkoMTUgPDwgMTYpCiAjZGVmaW5lCQlBVDkxX0NJRFJfQVJDSAkJKDB4ZmYgPDwgMjApCQkvKiBBcmNoaXRlY3R1cmUgSWRlbnRpZmllciAqLwogI2RlZmluZQkJQVQ5MV9DSURSX05WUFRZUAkoNyAgICA8PCAyOCkJCS8qIE5vbnZvbGF0aWxlIFByb2dyYW0gTWVtb3J5IFR5cGUgKi8KICNkZWZpbmUJCUFUOTFfQ0lEUl9FWFQJCSgxICAgIDw8IDMxKQkJLyogRXh0ZW5zaW9uIEZsYWcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9lY2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9lY2MuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfZWNjLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9lY2MuaAppbmRleCA1YzU2NGVkLi5mZjkzZGY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfZWNjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX2VjYy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9lY2MuaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX2VjYy5oCiAgKgogICogRXJyb3IgQ29ycmVjdGVkIENvZGUgQ29udHJvbGxlciAoRUNDKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdzdGVycy4KICAqIEJhc2VkIG9uIEFUOTFTQU05MjYwIGRhdGFzaGVldCByZXZpc2lvbiBCLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX2xjZGMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9sY2RjLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX2xjZGMuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX2xjZGMuaAppbmRleCA5Y2JmY2RkLi5hYjA0MGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfbGNkYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9sY2RjLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX2xjZGMuaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX2xjZGMuaAogICoKICAqIExDRCBDb250cm9sbGVyIChMQ0RDKS4KICAqIEJhc2VkIG9uIEFUOTFTQU05MjYxIGRhdGFzaGVldCByZXZpc2lvbiBFLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX21jaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX21jaS5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9tY2kuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX21jaS5oCmluZGV4IDlhNTUyY2IuLjQwYTk4NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9tY2kuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfbWNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX21jaS5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfbWNpLmgKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5CiAgKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9waW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9waW8uaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcGlvLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9waW8uaAppbmRleCA2ODBlYWExLi44NGMzODY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcGlvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3Bpby5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9waW8uaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3Bpby5oCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQogICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcGl0LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcGl0LmgKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3BpdC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcGl0LmgKaW5kZXggNGEzMGQwMDkuLjUwMjYzMjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9waXQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcGl0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3BpdC5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcGl0LmgKICAqCiAgKiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciAoUElUKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdzdGVycy4KICAqIEJhc2VkIG9uIEFUOTFTQU05MjYxIGRhdGFzaGVldCByZXZpc2lvbiBELgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3BtYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3BtYy5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9wbWMuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3BtYy5oCmluZGV4IGMzYjQ4OWQuLjMzZmY1YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9wbWMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcG1jLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3BtYy5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcG1jLmgKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5CiAgKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9yc3RjLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcnN0Yy5oCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9yc3RjLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9yc3RjLmgKaW5kZXggMjM3ZDNjNC4uZmI4ZDE2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3JzdGMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcnN0Yy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9yc3RjLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9yc3RjLmgKICAqCiAgKiBSZXNldCBDb250cm9sbGVyIChSU1RDKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdzdGVycy4KICAqIEJhc2VkIG9uIEFUOTFTQU05MjYxIGRhdGFzaGVldCByZXZpc2lvbiBELgpAQCAtMTcsNyArMTcsNyBAQAogI2RlZmluZQkJQVQ5MV9SU1RDX1BST0NSU1QJKDEgPDwgMCkJCS8qIFByb2Nlc3NvciBSZXNldCAqLwogI2RlZmluZQkJQVQ5MV9SU1RDX1BFUlJTVAkoMSA8PCAyKQkJLyogUGVyaXBoZXJhbCBSZXNldCAqLwogI2RlZmluZQkJQVQ5MV9SU1RDX0VYVFJTVAkoMSA8PCAzKQkJLyogRXh0ZXJuYWwgUmVzZXQgKi8KLSNkZWZpbmUJCUFUOTFfUlNUQ19LRVkJCSgweGZmIDw8IDI0KQkJLyogS0VZIFBhc3N3b3JkICovCisjZGVmaW5lCQlBVDkxX1JTVENfS0VZCQkoMHhhNSA8PCAyNCkJCS8qIEtFWSBQYXNzd29yZCAqLwogCiAjZGVmaW5lIEFUOTFfUlNUQ19TUgkJKEFUOTFfUlNUQyArIDB4MDQpCS8qIFJlc2V0IENvbnRyb2xsZXIgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX1JTVENfVVJTVFMJCSgxIDw8IDApCQkvKiBVc2VyIFJlc2V0IFN0YXR1cyAqLwpAQCAtMzQsNiArMzQsNSBAQAogI2RlZmluZQkJQVQ5MV9SU1RDX1VSU1RFTgkoMSA8PCAwKQkJLyogVXNlciBSZXNldCBFbmFibGUgKi8KICNkZWZpbmUJCUFUOTFfUlNUQ19VUlNUSUVOCSgxIDw8IDQpCQkvKiBVc2VyIFJlc2V0IEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUJCUFUOTFfUlNUQ19FUlNUTAkJKDB4ZiA8PCA4KQkJLyogRXh0ZXJuYWwgUmVzZXQgTGVuZ3RoICovCi0jZGVmaW5lCQlBVDkxX1JTVENfS0VZCQkoMHhmZiA8PCAyNCkJCS8qIEtFWSBQYXNzd29yZCAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9ydGMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9ydGMuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcnRjLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9ydGMuaAppbmRleCAwOTVmZTA4Li5hZjliZDI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcnRjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3J0Yy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9ydGMuaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3J0Yy5oCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQogICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcnR0LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcnR0LmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3J0dC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfcnR0LmgKaW5kZXggYzY3NTFiYS4uYmFlMTEwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3J0dC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9ydHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcnR0LmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9ydHQuaAogICoKICAqIFJlYWwtdGltZSBUaW1lciAoUlRUKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdzdGVycy4KICAqIEJhc2VkIG9uIEFUOTFTQU05MjYxIGRhdGFzaGVldCByZXZpc2lvbiBELgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3NoZHdjLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfc2hkd2MuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfc2hkd2MuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3NoZHdjLmgKaW5kZXggMDQzOTI1MC4uNzk1ZmNjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3NoZHdjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3NoZHdjLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3NoZHdjLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9zaGR3Yy5oCiAgKgogICogU2h1dGRvd24gQ29udHJvbGxlciAoU0hEV0MpIC0gU3lzdGVtIHBlcmlwaGVyYWxzIHJlZ3N0ZXJzLgogICogQmFzZWQgb24gQVQ5MVNBTTkyNjEgZGF0YXNoZWV0IHJldmlzaW9uIEQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfc3BpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfc3BpLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3NwaS5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfc3BpLmgKaW5kZXggYmVjNDhjYS4uZjliOWE4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3NwaS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9zcGkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfc3BpLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9zcGkuaAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBJdmFuIEtva3NoYXlza3kKICAqIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3NzYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3NzYy5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9zc2MuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3NzYy5oCmluZGV4IDY5NGJjYWEuLjBlY2M3MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9zc2MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfc3NjLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3NzYy5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfc3NjLmgKICAqCiAgKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfc3QuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9zdC5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9zdC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfc3QuaAppbmRleCAyNDMyZGRmLi4zMDQ0NmUyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3N0LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3N0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3N0LmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9zdC5oCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQogICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfdGMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV90Yy5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV90Yy5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfdGMuaAppbmRleCA4ZDA2ZWIwLi5iODVkM2ZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfdGMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfdGMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfdGMuaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3RjLmgKICAqCiAgKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfdHdpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfdHdpLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3R3aS5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfdHdpLmgKaW5kZXggY2RhOTE0Zi4uY2E5YTkwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3R3aS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV90d2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfdHdpLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV90d2kuaAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBJdmFuIEtva3NoYXlza3kKICAqIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3dkdC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3dkdC5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV93ZHQuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxX3dkdC5oCmluZGV4IGFjNjNlNzcuLjcyNTFhMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV93ZHQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfd2R0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3dkdC5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfd2R0LmgKICAqCiAgKiBXYXRjaGRvZyBUaW1lciAoV0RUKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdzdGVycy4KICAqIEJhc2VkIG9uIEFUOTFTQU05MjYxIGRhdGFzaGVldCByZXZpc2lvbiBELgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFybTkyMDAuaApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDAuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxcm05MjAwLmgKaW5kZXggYzU2OWI2YS4uYTEyYWM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxcm05MjAwLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXJtOTIwMC5oCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQogICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfZW1hYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxcm05MjAwX2VtYWMuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfZW1hYy5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFybTkyMDBfZW1hYy5oCmluZGV4IGZiYzA5MWUuLjBjNDE3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9lbWFjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxcm05MjAwX2VtYWMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfZW1hYy5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFybTkyMDBfZW1hYy5oCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQogICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfbWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXJtOTIwMF9tYy5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9tYy5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFybTkyMDBfbWMuaAppbmRleCAwYzBkODE0Li4yNGQwMTI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfbWMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFybTkyMDBfbWMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfbWMuaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxcm05MjAwX21jLmgKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5CiAgKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjAuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjAuaAppbmRleCA0NmY0ZGQ2Li4yY2FkZWJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2MC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjAuaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2MC5oCiAgKgogICogKEMpIDIwMDYgQW5kcmV3IFZpY3RvcgogICoKQEAgLTExMyw2ICsxMTMsMTAgQEAKIAogI2RlZmluZSBBVDkxU0FNOTI2MF9VSFBfQkFTRQkweDAwNTAwMDAwCS8qIFVTQiBIb3N0IGNvbnRyb2xsZXIgKi8KIAorI2RlZmluZSBBVDkxU0FNOVhFX0ZMQVNIX0JBU0UJMHgwMDIwMDAwMAkvKiBJbnRlcm5hbCBGTEFTSCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVQ5MVNBTTlYRV9TUkFNX0JBU0UJMHgwMDMwMDAwMAkvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLworCisKICNpZiAwCiAvKgogICogUElPIHBpbiBkZWZpbml0aW9ucyAocGVyaXBoZXJhbCBBL0IgbXVsdGlwbGV4aW5nKS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjBfbWF0cml4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYwX21hdHJpeC5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjBfbWF0cml4LmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjBfbWF0cml4LmgKaW5kZXggNzhmNmI0OS4uYWFjYjFlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MF9tYXRyaXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYwX21hdHJpeC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjBfbWF0cml4LmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjBfbWF0cml4LmgKICAqCiAgKiBNZW1vcnkgQ29udHJvbGxlcnMgKE1BVFJJWCwgRUJJKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdpc3RlcnMuCiAgKiBCYXNlZCBvbiBBVDkxU0FNOTI2MCBkYXRhc2hlZXQgcmV2aXNpb24gQi4KQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzIJKEFUOTFfTUFUUklYICsgMHgwOCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLwogI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMwkoQVQ5MV9NQVRSSVggKyAweDBDKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzICovCiAjZGVmaW5lIEFUOTFfTUFUUklYX01DRkc0CShBVDkxX01BVFJJWCArIDB4MTApCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDQgKi8KLSNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzUJKEFUOTFfTUFUUklYICsgMHgwNCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHNQkoQVQ5MV9NQVRSSVggKyAweDE0KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA1ICovCiAjZGVmaW5lCQlBVDkxX01BVFJJWF9VTEJUCQkoNyA8PCAwKQkvKiBVbmRlZmluZWQgTGVuZ3RoIEJ1cnN0IFR5cGUgKi8KICNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX0lORklOSVRFCSgwIDw8IDApCiAjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9TSU5HTEUJCSgxIDw8IDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYxLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MS5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYxLmgKaW5kZXggOGQzOTY3Mi4uMDFiNThmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYxLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjEuaAogICoKICAqIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZQogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjFfbWF0cml4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYxX21hdHJpeC5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjFfbWF0cml4LmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjFfbWF0cml4LmgKaW5kZXggZWM4OGVmYS4uNmYwNzI0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MV9tYXRyaXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYxX21hdHJpeC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjFfbWF0cml4LmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjFfbWF0cml4LmgKICAqCiAgKiBNZW1vcnkgQ29udHJvbGxlcnMgKE1BVFJJWCwgRUJJKSAtIFN5c3RlbSBwZXJpcGhlcmFscyByZWdpc3RlcnMuCiAgKiBCYXNlZCBvbiBBVDkxU0FNOTI2MSBkYXRhc2hlZXQgcmV2aXNpb24gRC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGFmNjhhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2My5oCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2My5oCisgKgorICogKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24uCisgKgorICogQ29tbW9uIGRlZmluaXRpb25zLgorICogQmFzZWQgb24gQVQ5MVNBTTkyNjMgZGF0YXNoZWV0IHJldmlzaW9uIEIgKFByZWxpbWluYXJ5KS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQVQ5MVNBTTkyNjNfSAorI2RlZmluZSBBVDkxU0FNOTI2M19ICisKKy8qCisgKiBQZXJpcGhlcmFsIGlkZW50aWZpZXJzL2ludGVycnVwdHMuCisgKi8KKyNkZWZpbmUgQVQ5MV9JRF9GSVEJCTAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkgKi8KKyNkZWZpbmUgQVQ5MV9JRF9TWVMJCTEJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX1BJT0EJMgkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KKyNkZWZpbmUgQVQ5MVNBTTkyNjNfSURfUElPQgkzCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLworI2RlZmluZSBBVDkxU0FNOTI2M19JRF9QSU9DREUJNAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMsIEQgYW5kIEUgKi8KKyNkZWZpbmUgQVQ5MVNBTTkyNjNfSURfVVMwCTcJLyogVVNBUlQgMCAqLworI2RlZmluZSBBVDkxU0FNOTI2M19JRF9VUzEJOAkvKiBVU0FSVCAxICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX1VTMgk5CS8qIFVTQVJUIDIgKi8KKyNkZWZpbmUgQVQ5MVNBTTkyNjNfSURfTUNJMAkxMAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIDAgKi8KKyNkZWZpbmUgQVQ5MVNBTTkyNjNfSURfTUNJMQkxMQkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIDEgKi8KKyNkZWZpbmUgQVQ5MVNBTTkyNjNfSURfQ0FOCTEyCS8qIENBTiAqLworI2RlZmluZSBBVDkxU0FNOTI2M19JRF9UV0kJMTMJLyogVHdvLVdpcmUgSW50ZXJmYWNlICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX1NQSTAJMTQJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDAgKi8KKyNkZWZpbmUgQVQ5MVNBTTkyNjNfSURfU1BJMQkxNQkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMSAqLworI2RlZmluZSBBVDkxU0FNOTI2M19JRF9TU0MwCTE2CS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDAgKi8KKyNkZWZpbmUgQVQ5MVNBTTkyNjNfSURfU1NDMQkxNwkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX0FDOTdDCTE4CS8qIEFDOTcgQ29udHJvbGxlciAqLworI2RlZmluZSBBVDkxU0FNOTI2M19JRF9UQ0IJMTkJLyogVGltZXIgQ291bnRlciAwLCAxIGFuZCAyICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX1BXTUMJMjAJLyogUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX0VNQUMJMjEJLyogRXRoZXJuZXQgKi8KKyNkZWZpbmUgQVQ5MVNBTTkyNjNfSURfMkRHRQkyMwkvKiAyRCBHcmFwaGljIEVuZ2luZSAqLworI2RlZmluZSBBVDkxU0FNOTI2M19JRF9VRFAJMjQJLyogVVNCIERldmljZSBQb3J0ICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX0lTSQkyNQkvKiBJbWFnZSBTZW5zb3IgSW50ZXJmYWNlICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX0xDREMJMjYJLyogTENEIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQVQ5MVNBTTkyNjNfSURfRE1BCTI3CS8qIERNQSBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX1VIUAkyOQkvKiBVU0IgSG9zdCBwb3J0ICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX0lSUTAJMzAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovCisjZGVmaW5lIEFUOTFTQU05MjYzX0lEX0lSUTEJMzEJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTEpICovCisKKworLyoKKyAqIFVzZXIgUGVyaXBoZXJhbCBwaHlzaWNhbCBiYXNlIGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZSBBVDkxU0FNOTI2M19CQVNFX1VEUAkJMHhmZmY3ODAwMAorI2RlZmluZSBBVDkxU0FNOTI2M19CQVNFX1RDQjAJCTB4ZmZmN2MwMDAKKyNkZWZpbmUgQVQ5MVNBTTkyNjNfQkFTRV9UQzAJCTB4ZmZmN2MwMDAKKyNkZWZpbmUgQVQ5MVNBTTkyNjNfQkFTRV9UQzEJCTB4ZmZmN2MwNDAKKyNkZWZpbmUgQVQ5MVNBTTkyNjNfQkFTRV9UQzIJCTB4ZmZmN2MwODAKKyNkZWZpbmUgQVQ5MVNBTTkyNjNfQkFTRV9NQ0kwCQkweGZmZjgwMDAwCisjZGVmaW5lIEFUOTFTQU05MjYzX0JBU0VfTUNJMQkJMHhmZmY4NDAwMAorI2RlZmluZSBBVDkxU0FNOTI2M19CQVNFX1RXSQkJMHhmZmY4ODAwMAorI2RlZmluZSBBVDkxU0FNOTI2M19CQVNFX1VTMAkJMHhmZmY4YzAwMAorI2RlZmluZSBBVDkxU0FNOTI2M19CQVNFX1VTMQkJMHhmZmY5MDAwMAorI2RlZmluZSBBVDkxU0FNOTI2M19CQVNFX1VTMgkJMHhmZmY5NDAwMAorI2RlZmluZSBBVDkxU0FNOTI2M19CQVNFX1NTQzAJCTB4ZmZmOTgwMDAKKyNkZWZpbmUgQVQ5MVNBTTkyNjNfQkFTRV9TU0MxCQkweGZmZjljMDAwCisjZGVmaW5lIEFUOTFTQU05MjYzX0JBU0VfQUM5N0MJCTB4ZmZmYTAwMDAKKyNkZWZpbmUgQVQ5MVNBTTkyNjNfQkFTRV9TUEkwCQkweGZmZmE0MDAwCisjZGVmaW5lIEFUOTFTQU05MjYzX0JBU0VfU1BJMQkJMHhmZmZhODAwMAorI2RlZmluZSBBVDkxU0FNOTI2M19CQVNFX0NBTgkJMHhmZmZhYzAwMAorI2RlZmluZSBBVDkxU0FNOTI2M19CQVNFX1BXTUMJCTB4ZmZmYjgwMDAKKyNkZWZpbmUgQVQ5MVNBTTkyNjNfQkFTRV9FTUFDCQkweGZmZmJjMDAwCisjZGVmaW5lIEFUOTFTQU05MjYzX0JBU0VfSVNJCQkweGZmZmM0MDAwCisjZGVmaW5lIEFUOTFTQU05MjYzX0JBU0VfMkRHRQkJMHhmZmZjODAwMAorI2RlZmluZSBBVDkxX0JBU0VfU1lTCQkJMHhmZmZmZTAwMAorCisvKgorICogU3lzdGVtIFBlcmlwaGVyYWxzIChvZmZzZXQgZnJvbSBBVDkxX0JBU0VfU1lTKQorICovCisjZGVmaW5lIEFUOTFfRUNDMAkoMHhmZmZmZTAwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU0RSQU1DMAkoMHhmZmZmZTIwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU01DMAkoMHhmZmZmZTQwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfRUNDMQkoMHhmZmZmZTYwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU0RSQU1DMQkoMHhmZmZmZTgwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU01DMQkoMHhmZmZmZWEwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfTUFUUklYCSgweGZmZmZlYzAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9DQ0ZHCSgweGZmZmZlZDEwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9EQkdVCSgweGZmZmZlZTAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9BSUMJKDB4ZmZmZmYwMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJT0EJKDB4ZmZmZmYyMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJT0IJKDB4ZmZmZmY0MDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJT0MJKDB4ZmZmZmY2MDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJT0QJKDB4ZmZmZmY4MDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJT0UJKDB4ZmZmZmZhMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BNQwkoMHhmZmZmZmMwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfUlNUQwkoMHhmZmZmZmQwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU0hEV0MJKDB4ZmZmZmZkMTAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1JUVDAJKDB4ZmZmZmZkMjAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJVAkoMHhmZmZmZmQzMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfV0RUCSgweGZmZmZmZDQwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9SVFQxCSgweGZmZmZmZDUwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9HUEJSCSgweGZmZmZmZDYwIC0gQVQ5MV9CQVNFX1NZUykKKworI2RlZmluZSBBVDkxX1NNQwlBVDkxX1NNQzAKKworLyoKKyAqIEludGVybmFsIE1lbW9yeS4KKyAqLworI2RlZmluZSBBVDkxU0FNOTI2M19TUkFNMF9CQVNFCTB4MDAzMDAwMDAJLyogSW50ZXJuYWwgU1JBTSAwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBVDkxU0FNOTI2M19TUkFNMF9TSVpFCSg4MCAqIFNaXzFLKQkvKiBJbnRlcm5hbCBTUkFNIDAgc2l6ZSAoODBLYikgKi8KKworI2RlZmluZSBBVDkxU0FNOTI2M19ST01fQkFTRQkweDAwNDAwMDAwCS8qIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVQ5MVNBTTkyNjNfUk9NX1NJWkUJU1pfMTI4SwkJLyogSW50ZXJuYWwgUk9NIHNpemUgKDEyOEtiKSAqLworCisjZGVmaW5lIEFUOTFTQU05MjYzX1NSQU0xX0JBU0UJMHgwMDUwMDAwMAkvKiBJbnRlcm5hbCBTUkFNIDEgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEFUOTFTQU05MjYzX1NSQU0xX1NJWkUJU1pfMTZLCQkvKiBJbnRlcm5hbCBTUkFNIDEgc2l6ZSAoMTZLYikgKi8KKworI2RlZmluZSBBVDkxU0FNOTI2M19MQ0RDX0JBU0UJMHgwMDcwMDAwMAkvKiBMQ0QgQ29udHJvbGxlciAqLworI2RlZmluZSBBVDkxU0FNOTI2M19ETUFDX0JBU0UJMHgwMDgwMDAwMAkvKiBETUEgQ29udHJvbGxlciAqLworI2RlZmluZSBBVDkxU0FNOTI2M19VSFBfQkFTRQkweDAwYTAwMDAwCS8qIFVTQiBIb3N0IGNvbnRyb2xsZXIgKi8KKworI2lmIDAKKy8qCisgKiBQSU8gcGluIGRlZmluaXRpb25zIChwZXJpcGhlcmFsIEEvQiBtdWx0aXBsZXhpbmcpLgorICovCisKKy8vIFRPRE86IEFkZAorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYzX21hdHJpeC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2M19tYXRyaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmM2ZTRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2M19tYXRyaXguaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjNfbWF0cml4LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEF0bWVsIENvcnBvcmF0aW9uLgorICoKKyAqIE1lbW9yeSBDb250cm9sbGVycyAoTUFUUklYLCBFQkkpIC0gU3lzdGVtIHBlcmlwaGVyYWxzIHJlZ2lzdGVycy4KKyAqIEJhc2VkIG9uIEFUOTFTQU05MjYzIGRhdGFzaGVldCByZXZpc2lvbiBCIChQcmVsaW1pbmFyeSkuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIEFUOTFTQU05MjYzX01BVFJJWF9ICisjZGVmaW5lIEFUOTFTQU05MjYzX01BVFJJWF9ICisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzAJKEFUOTFfTUFUUklYICsgMHgwMCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMQkoQVQ5MV9NQVRSSVggKyAweDA0KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkcyCShBVDkxX01BVFJJWCArIDB4MDgpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzMJKEFUOTFfTUFUUklYICsgMHgwQykJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHNAkoQVQ5MV9NQVRSSVggKyAweDEwKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA0ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkc1CShBVDkxX01BVFJJWCArIDB4MTQpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDUgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzYJKEFUOTFfTUFUUklYICsgMHgxOCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHNwkoQVQ5MV9NQVRSSVggKyAweDFDKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA3ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkc4CShBVDkxX01BVFJJWCArIDB4MjApCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDggKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1VMQlQJKDcgPDwgMCkJLyogVW5kZWZpbmVkIExlbmd0aCBCdXJzdCBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9JTkZJTklURQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfU0lOR0xFCQkoMSA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfRk9VUgkJKDIgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX0VJR0hUCQkoMyA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfU0lYVEVFTgkoNCA8PCAwKQorCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcwCShBVDkxX01BVFJJWCArIDB4NDApCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMQkoQVQ5MV9NQVRSSVggKyAweDQ0KQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzIJKEFUOTFfTUFUUklYICsgMHg0OCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkczCShBVDkxX01BVFJJWCArIDB4NEMpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHNAkoQVQ5MV9NQVRSSVggKyAweDUwKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzUJKEFUOTFfTUFUUklYICsgMHg1NCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA1ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkc2CShBVDkxX01BVFJJWCArIDB4NTgpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHNwkoQVQ5MV9NQVRSSVggKyAweDVDKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDcgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1NMT1RfQ1lDTEUJCSgweGZmIDw8IDApCS8qIE1heGltdW0gTnVtYmVyIG9mIEFsbG93ZWQgQ3ljbGVzIGZvciBhIEJ1cnN0ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9ERUZNU1RSX1RZUEUJKDMgICAgPDwgMTYpCS8qIERlZmF1bHQgTWFzdGVyIFR5cGUgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9ERUZNU1RSX1RZUEVfTk9ORQkoMCA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9ERUZNU1RSX1RZUEVfTEFTVAkoMSA8PCAxNikKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9ERUZNU1RSX1RZUEVfRklYRUQJKDIgPDwgMTYpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9GSVhFRF9ERUZNU1RSCSg3ICAgIDw8IDE4KQkvKiBGaXhlZCBJbmRleCBvZiBEZWZhdWx0IE1hc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfQVJCVAkJKDMgICAgPDwgMjQpCS8qIEFyYml0cmF0aW9uIFR5cGUgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9BUkJUX1JPVU5EX1JPQklOCSgwIDw8IDI0KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0FSQlRfRklYRURfUFJJT1JJVFkJKDEgPDwgMjQpCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzAJKEFUOTFfTUFUUklYICsgMHg4MCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTMAkoQVQ5MV9NQVRSSVggKyAweDg0KQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSAwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMxCShBVDkxX01BVFJJWCArIDB4ODgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDEgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJCUzEJKEFUOTFfTUFUUklYICsgMHg4QykJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQiBmb3IgU2xhdmUgMSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMgkoQVQ5MV9NQVRSSVggKyAweDkwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAyICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQlMyCShBVDkxX01BVFJJWCArIDB4OTQpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEIgZm9yIFNsYXZlIDIgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzMJKEFUOTFfTUFUUklYICsgMHg5OCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTMwkoQVQ5MV9NQVRSSVggKyAweDlDKQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSAzICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVM0CShBVDkxX01BVFJJWCArIDB4QTApCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDQgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJCUzQJKEFUOTFfTUFUUklYICsgMHhBNCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQiBmb3IgU2xhdmUgNCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTNQkoQVQ5MV9NQVRSSVggKyAweEE4KQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSA1ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQlM1CShBVDkxX01BVFJJWCArIDB4QUMpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEIgZm9yIFNsYXZlIDUgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzYJKEFUOTFfTUFUUklYICsgMHhCMCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgNiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTNgkoQVQ5MV9NQVRSSVggKyAweEI0KQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSA2ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVM3CShBVDkxX01BVFJJWCArIDB4QjgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDcgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJCUzcJKEFUOTFfTUFUUklYICsgMHhCQykJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQiBmb3IgU2xhdmUgNyAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTBQUgkJKDMgPDwgMCkJLyogTWFzdGVyIDAgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX00xUFIJCSgzIDw8IDQpCS8qIE1hc3RlciAxIFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NMlBSCQkoMyA8PCA4KQkvKiBNYXN0ZXIgMiBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTNQUgkJKDMgPDwgMTIpCS8qIE1hc3RlciAzIFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NNFBSCQkoMyA8PCAxNikJLyogTWFzdGVyIDQgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX001UFIJCSgzIDw8IDIwKQkvKiBNYXN0ZXIgNSBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTZQUgkJKDMgPDwgMjQpCS8qIE1hc3RlciA2IFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NN1BSCQkoMyA8PCAyOCkJLyogTWFzdGVyIDcgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX004UFIJCSgzIDw8IDApCS8qIE1hc3RlciA4IFByaW9yaXR5IChpbiBSZWdpc3RlciBCKSAqLworCisjZGVmaW5lIEFUOTFfTUFUUklYX01SQ1IJKEFUOTFfTUFUUklYICsgMHgxMDApCS8qIE1hc3RlciBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0IwCQkoMSA8PCAwKQkvKiBSZW1hcCBDb21tYW5kIGZvciBBSEIgTWFzdGVyIDAgKEFSTTkyNkVKLVMgSW5zdHJ1Y3Rpb24gTWFzdGVyKSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMQkJKDEgPDwgMSkJLyogUmVtYXAgQ29tbWFuZCBmb3IgQUhCIE1hc3RlciAxIChBUk05MjZFSi1TIERhdGEgTWFzdGVyKSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMgkJKDEgPDwgMikKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjMJCSgxIDw8IDMpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0I0CQkoMSA8PCA0KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCNQkJKDEgPDwgNSkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjYJCSgxIDw8IDYpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0I3CQkoMSA8PCA3KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCOAkJKDEgPDwgOCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9UQ01SCShBVDkxX01BVFJJWCArIDB4MTE0KQkvKiBUQ00gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfSVRDTV9TSVpFCQkoMHhmIDw8IDApCS8qIFNpemUgb2YgSVRDTSBlbmFibGVkIG1lbW9yeSBibG9jayAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fMAkJKDAgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzE2CQkoNSA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fMzIJCSg2IDw8IDApCisjZGVmaW5lCQlBVDkxX01BVFJJWF9EVENNX1NJWkUJCSgweGYgPDwgNCkJLyogU2l6ZSBvZiBEVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8wCQkoMCA8PCA0KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMTYJCSg1IDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8zMgkJKDYgPDwgNCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9FQkkwQ1NBCShBVDkxX01BVFJJWCArIDB4MTIwKQkvKiBFQkkwIENoaXAgU2VsZWN0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSTBfQ1MxQQkJKDEgPDwgMSkJLyogQ2hpcCBTZWxlY3QgMSBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJMF9DUzFBX1NNQwkJKDAgPDwgMSkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQkkwX0NTMUFfU0RSQU1DCQkoMSA8PCAxKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfRUJJMF9DUzNBCQkoMSA8PCAzKQkvKiBDaGlwIFNlbGVjdCAzIEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQkkwX0NTM0FfU01DCQkoMCA8PCAzKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTBfQ1MzQV9TTUNfU01BUlRNRURJQQkoMSA8PCAzKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfRUJJMF9DUzRBCQkoMSA8PCA0KQkvKiBDaGlwIFNlbGVjdCA0IEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQkkwX0NTNEFfU01DCQkoMCA8PCA0KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTBfQ1M0QV9TTUNfQ0YxCQkoMSA8PCA0KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfRUJJMF9DUzVBCQkoMSA8PCA1KQkvKiBDaGlwIFNlbGVjdCA1IEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQkkwX0NTNUFfU01DCQkoMCA8PCA1KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTBfQ1M1QV9TTUNfQ0YyCQkoMSA8PCA1KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfRUJJMF9EQlBVQwkJKDEgPDwgOCkJLyogRGF0YSBCdXMgUHVsbC11cCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9FQkkwX1ZERElPTVNFTAkoMSA8PCAxNikJLyogTWVtb3J5IHZvbHRhZ2Ugc2VsZWN0aW9uICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJMF9WRERJT01TRUxfMV84VgkJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJMF9WRERJT01TRUxfM18zVgkJKDEgPDwgMTYpCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfRUJJMUNTQQkoQVQ5MV9NQVRSSVggKyAweDEyNCkJLyogRUJJMSBDaGlwIFNlbGVjdCBBc3NpZ25tZW50IFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9FQkkxX0NTMUEJCSgxIDw8IDEpCS8qIENoaXAgU2VsZWN0IDEgQXNzaWdubWVudCAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTFfQ1MxQV9TTUMJCSgwIDw8IDEpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJMV9DUzFBX1NEUkFNQwkJKDEgPDwgMSkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSTFfQ1MyQQkJKDEgPDwgMykJLyogQ2hpcCBTZWxlY3QgMyBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJMV9DUzJBX1NNQwkJKDAgPDwgMykKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQkkxX0NTMkFfU01DX1NNQVJUTUVESUEJKDEgPDwgMykKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSTFfREJQVUMJCSgxIDw8IDgpCS8qIERhdGEgQnVzIFB1bGwtdXAgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfRUJJMV9WRERJT01TRUwJKDEgPDwgMTYpCS8qIE1lbW9yeSB2b2x0YWdlIHNlbGVjdGlvbiAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTFfVkRESU9NU0VMXzFfOFYJCSgwIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSTFfVkRESU9NU0VMXzNfM1YJCSgxIDw8IDE2KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNnhfbWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNnhfbWMuaApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjZ4X21jLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNnhfbWMuaAppbmRleCA5NzJlNzUzLi5kODI2MzFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjZ4X21jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2eF9tYy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNnhfbWMuaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2eF9tYy5oCiAgKgogICogTWVtb3J5IENvbnRyb2xsZXJzIChTTUMsIFNEUkFNQykgLSBTeXN0ZW0gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzLgogICogQmFzZWQgb24gQVQ5MVNBTTkyNjEgZGF0YXNoZWV0IHJldmlzaW9uIEQuCkBAIC0xMzEsNCArMTMxLDExIEBACiAjZGVmaW5lCQkJQVQ5MV9TTUNfUFNfMTYJCQkoMiA8PCAyOCkKICNkZWZpbmUJCQlBVDkxX1NNQ19QU18zMgkJCSgzIDw8IDI4KQogCisjaWYgZGVmaW5lZChBVDkxX1NNQzEpCQkvKiBUaGUgQVQ5MVNBTTkyNjMgaGFzIDIgU3RhdGljIE1lbW9yeSBjb250b2xsZXJzICovCisjZGVmaW5lIEFUOTFfU01DMV9TRVRVUChuKQkoQVQ5MV9TTUMxICsgMHgwMCArICgobikqMHgxMCkpCS8qIFNldHVwIFJlZ2lzdGVyIGZvciBDUyBuICovCisjZGVmaW5lIEFUOTFfU01DMV9QVUxTRShuKQkoQVQ5MV9TTUMxICsgMHgwNCArICgobikqMHgxMCkpCS8qIFB1bHNlIFJlZ2lzdGVyIGZvciBDUyBuICovCisjZGVmaW5lIEFUOTFfU01DMV9DWUNMRShuKQkoQVQ5MV9TTUMxICsgMHgwOCArICgobikqMHgxMCkpCS8qIEN5Y2xlIFJlZ2lzdGVyIGZvciBDUyBuICovCisjZGVmaW5lIEFUOTFfU01DMV9NT0RFKG4pCShBVDkxX1NNQzEgKyAweDBjICsgKChuKSoweDEwKSkJLyogTW9kZSBSZWdpc3RlciBmb3IgQ1MgbiAqLworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9ib2FyZC5oCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYm9hcmQuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9ib2FyZC5oCmluZGV4IDc2OGUwZmMuLjdiOTkwM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2JvYXJkLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ib2FyZC5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2JvYXJkLmgKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IEhQIExhYnMKICAqCkBAIC02MCw3ICs2MCw3IEBACiAJdTgJCXdwX3BpbjsJCS8qIChTRCkgd3JpdGVwcm90ZWN0IGRldGVjdCAqLwogCXU4CQl2Y2NfcGluOwkvKiBwb3dlciBzd2l0Y2hpbmcgKGhpZ2ggPT0gb24pICovCiB9OwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc3RydWN0IGF0OTFfbW1jX2RhdGEgKmRhdGEpOworZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSk7CiAKICAvKiBFdGhlcm5ldCAqLwogc3RydWN0IGF0OTFfZXRoX2RhdGEgewpAQCAtNjksOSArNjksMTQgQEAKIH07CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYzKQorI2RlZmluZSBldGhfcGxhdGZvcm1fZGF0YQlhdDkxX2V0aF9kYXRhCisjZW5kaWYKKwogIC8qIFVTQiBIb3N0ICovCiBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgewogCXU4CQlwb3J0czsJCS8qIG51bWJlciBvZiBwb3J0cyBvbiByb290IGh1YiAqLworCXU4CQl2YnVzX3BpbltdOwkvKiBwb3J0IHBvd2VyLWNvbnRyb2wgcGluICovCiB9OwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvY3B1LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjRjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2NwdS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2NwdS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBTQU4gUGVvcGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0NQVV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQ1BVX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfZGJndS5oPgorCisKKyNkZWZpbmUgQVJDSF9JRF9BVDkxUk05MjAwCTB4MDkyOTA3ODAKKyNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOTI2MAkweDAxOTgwM2EwCisjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTkyNjEJMHgwMTk3MDNhMAorI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05MjYzCTB4MDE5NjA3YTAKKworI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05WEUxMjgJMHgzMjk5NzNhMAorI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05WEUyNTYJMHgzMjlhOTNhMAorI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05WEU1MTIJMHgzMjlhYTNhMAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXQ5MV9jcHVfaWRlbnRpZnkodm9pZCkKK3sKKwlyZXR1cm4gKGF0OTFfc3lzX3JlYWQoQVQ5MV9EQkdVX0NJRFIpICYgfkFUOTFfQ0lEUl9WRVJTSU9OKTsKK30KKworCisjZGVmaW5lIEFSQ0hfRkFNSUxZX0FUOTFYOTIJMHgwOTIwMDAwMAorI2RlZmluZSBBUkNIX0ZBTUlMWV9BVDkxU0FNOQkweDAxOTAwMDAwCisjZGVmaW5lIEFSQ0hfRkFNSUxZX0FUOTFTQU05WEUJMHgwMjkwMDAwMAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXQ5MV9hcmNoX2lkZW50aWZ5KHZvaWQpCit7CisJcmV0dXJuIChhdDkxX3N5c19yZWFkKEFUOTFfREJHVV9DSURSKSAmIEFUOTFfQ0lEUl9BUkNIKTsKK30KKworCisjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMAorI2RlZmluZSBjcHVfaXNfYXQ5MXJtOTIwMCgpCShhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MVJNOTIwMCkKKyNlbHNlCisjZGVmaW5lIGNwdV9pc19hdDkxcm05MjAwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX0FUOTFTQU05MjYwCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXhlKCkJKGF0OTFfYXJjaF9pZGVudGlmeSgpID09IEFSQ0hfRkFNSUxZX0FUOTFTQU05WEUpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOTI2MCgpCSgoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05MjYwKSB8fCBjcHVfaXNfYXQ5MXNhbTl4ZSgpKQorI2Vsc2UKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eGUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05MjYwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX0FUOTFTQU05MjYxCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOTI2MSgpCShhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MVNBTTkyNjEpCisjZWxzZQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjEoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05MjYzKCkJKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxU0FNOTI2MykKKyNlbHNlCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOTI2MygpCSgwKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTlmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvZGVidWctbWFjcm8uUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBTQU4gUGVvcGxlCisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9kYmd1Lmg+CisKKwkubWFjcm8JYWRkcnVhcnQscngKKwltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCXRzdAlccngsICMxCQkJCQkJQCBNTVUgZW5hYmxlZD8KKwlsZHJlcQlccngsID0oQVQ5MV9CQVNFX1NZUyArIEFUOTFfREJHVSkJCUAgU3lzdGVtIHBlcmlwaGVyYWxzIChwaHlzIGFkZHJlc3MpCisJbGRybmUJXHJ4LCA9KEFUOTFfVkFfQkFTRV9TWVMJKyBBVDkxX0RCR1UpCQlAIFN5c3RlbSBwZXJpcGhlcmFscyAodmlydCBhZGRyZXNzKQorCS5lbmRtCisKKwkubWFjcm8Jc2VuZHVhcnQscmQscngKKwlzdHJiCVxyZCwgW1xyeCwgIyhBVDkxX0RCR1VfVEhSIC0gQVQ5MV9EQkdVKV0JQCBXcml0ZSB0byBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyCisJLmVuZG0KKworCS5tYWNybwl3YWl0dWFydCxyZCxyeAorMTAwMToJbGRyCVxyZCwgW1xyeCwgIyhBVDkxX0RCR1VfU1IgLSBBVDkxX0RCR1UpXQkJQCBSZWFkIFN0YXR1cyBSZWdpc3RlcgorCXRzdAlccmQsICNBVDkxX0RCR1VfVFhSRFkJCQkJQCBEQkdVX1RYUkRZID0gMSB3aGVuIHJlYWR5IHRvIHRyYW5zbWl0CisJYmVxCTEwMDFiCisJLmVuZG0KKworCS5tYWNybwlidXN5dWFydCxyZCxyeAorMTAwMToJbGRyCVxyZCwgW1xyeCwgIyhBVDkxX0RCR1VfU1IgLSBBVDkxX0RCR1UpXQkJQCBSZWFkIFN0YXR1cyBSZWdpc3RlcgorCXRzdAlccmQsICNBVDkxX0RCR1VfVFhFTVBUWQkJCQlAIERCR1VfVFhFTVBUWSA9IDEgd2hlbiB0cmFuc21pc3Npb24gY29tcGxldGUKKwliZXEJMTAwMWIKKwkuZW5kbQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9kbWEuaApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2RtYS5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2RtYS5oCmluZGV4IDIyYzFkZmQuLjc3NDU2NTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9kbWEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2RtYS5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2RtYS5oCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMWQ4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvZW50cnktbWFjcm8uUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBTQU4gUGVvcGxlCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBBVDkxUk05MjAwIHBsYXRmb3JtcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfYWljLmg+CisKKwkubWFjcm8JZGlzYWJsZV9maXEKKwkuZW5kbQorCisJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCS5lbmRtCisKKwkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkuZW5kbQorCisJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCWxkcglcYmFzZSwgPShBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9BSUMpCQlAIGJhc2UgdmlydHVhbCBhZGRyZXNzIG9mIEFJQyBwZXJpcGhlcmFsCisJbGRyCVxpcnFuciwgW1xiYXNlLCAjKEFUOTFfQUlDX0lWUiAtIEFUOTFfQUlDKV0JQCByZWFkIElSUSB2ZWN0b3IgcmVnaXN0ZXI6IGRlLWFzc2VydHMgbklSUSB0byBwcm9jZXNzb3IgKGFuZCBjbGVhcnMgaW50ZXJydXB0KQorCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjKEFUOTFfQUlDX0lTUiAtIEFUOTFfQUlDKV0JQCByZWFkIGludGVycnVwdCBzb3VyY2UgbnVtYmVyCisJdGVxCVxpcnFzdGF0LCAjMAkJCQkJQCBJU1IgaXMgMCB3aGVuIG5vIGN1cnJlbnQgaW50ZXJydXB0LCBvciBzcHVyaW91cyBpbnRlcnJ1cHQKKwlzdHJlcQlcdG1wLCBbXGJhc2UsICMoQVQ5MV9BSUNfRU9JQ1IgLSBBVDkxX0FJQyldCUAgbm90IGdvaW5nIHRvIGJlIGhhbmRsZWQgZnVydGhlciwgdGhlbiBBQ0sgaXQgbm93LgorCS5lbmRtCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9ncGlvLmgKc2ltaWxhcml0eSBpbmRleCA4NCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ncGlvLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvZ3Bpby5oCmluZGV4IGUwOWQ2NTIuLjk4YWQyMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvZ3Bpby5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZ3Bpby5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2dwaW8uaAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgSFAgTGFicwogICoKQEAgLTE3LDcgKzE3LDcgQEAKIAogI2RlZmluZSBQSU5fQkFTRQkJTlJfQUlDX0lSUVMKIAotI2RlZmluZSBNQVhfR1BJT19CQU5LUwkJNAorI2RlZmluZSBNQVhfR1BJT19CQU5LUwkJNQogCiAvKiB0aGVzZSBwaW4gbnVtYmVycyBkb3VibGUgYXMgSVJRIG51bWJlcnMsIGxpa2UgQVQ5MXh4eF9JRF8qIHZhbHVlcyAqLwogCkBAIC0yNiwzNyArMjYsMzEgQEAKICNkZWZpbmUJQVQ5MV9QSU5fUEEyCShQSU5fQkFTRSArIDB4MDAgKyAyKQogI2RlZmluZQlBVDkxX1BJTl9QQTMJKFBJTl9CQVNFICsgMHgwMCArIDMpCiAjZGVmaW5lCUFUOTFfUElOX1BBNAkoUElOX0JBU0UgKyAweDAwICsgNCkKLQogI2RlZmluZQlBVDkxX1BJTl9QQTUJKFBJTl9CQVNFICsgMHgwMCArIDUpCiAjZGVmaW5lCUFUOTFfUElOX1BBNgkoUElOX0JBU0UgKyAweDAwICsgNikKICNkZWZpbmUJQVQ5MV9QSU5fUEE3CShQSU5fQkFTRSArIDB4MDAgKyA3KQogI2RlZmluZQlBVDkxX1BJTl9QQTgJKFBJTl9CQVNFICsgMHgwMCArIDgpCiAjZGVmaW5lCUFUOTFfUElOX1BBOQkoUElOX0JBU0UgKyAweDAwICsgOSkKLQogI2RlZmluZQlBVDkxX1BJTl9QQTEwCShQSU5fQkFTRSArIDB4MDAgKyAxMCkKICNkZWZpbmUJQVQ5MV9QSU5fUEExMQkoUElOX0JBU0UgKyAweDAwICsgMTEpCiAjZGVmaW5lCUFUOTFfUElOX1BBMTIJKFBJTl9CQVNFICsgMHgwMCArIDEyKQogI2RlZmluZQlBVDkxX1BJTl9QQTEzCShQSU5fQkFTRSArIDB4MDAgKyAxMykKICNkZWZpbmUJQVQ5MV9QSU5fUEExNAkoUElOX0JBU0UgKyAweDAwICsgMTQpCi0KICNkZWZpbmUJQVQ5MV9QSU5fUEExNQkoUElOX0JBU0UgKyAweDAwICsgMTUpCiAjZGVmaW5lCUFUOTFfUElOX1BBMTYJKFBJTl9CQVNFICsgMHgwMCArIDE2KQogI2RlZmluZQlBVDkxX1BJTl9QQTE3CShQSU5fQkFTRSArIDB4MDAgKyAxNykKICNkZWZpbmUJQVQ5MV9QSU5fUEExOAkoUElOX0JBU0UgKyAweDAwICsgMTgpCiAjZGVmaW5lCUFUOTFfUElOX1BBMTkJKFBJTl9CQVNFICsgMHgwMCArIDE5KQotCiAjZGVmaW5lCUFUOTFfUElOX1BBMjAJKFBJTl9CQVNFICsgMHgwMCArIDIwKQogI2RlZmluZQlBVDkxX1BJTl9QQTIxCShQSU5fQkFTRSArIDB4MDAgKyAyMSkKICNkZWZpbmUJQVQ5MV9QSU5fUEEyMgkoUElOX0JBU0UgKyAweDAwICsgMjIpCiAjZGVmaW5lCUFUOTFfUElOX1BBMjMJKFBJTl9CQVNFICsgMHgwMCArIDIzKQogI2RlZmluZQlBVDkxX1BJTl9QQTI0CShQSU5fQkFTRSArIDB4MDAgKyAyNCkKLQogI2RlZmluZQlBVDkxX1BJTl9QQTI1CShQSU5fQkFTRSArIDB4MDAgKyAyNSkKICNkZWZpbmUJQVQ5MV9QSU5fUEEyNgkoUElOX0JBU0UgKyAweDAwICsgMjYpCiAjZGVmaW5lCUFUOTFfUElOX1BBMjcJKFBJTl9CQVNFICsgMHgwMCArIDI3KQogI2RlZmluZQlBVDkxX1BJTl9QQTI4CShQSU5fQkFTRSArIDB4MDAgKyAyOCkKICNkZWZpbmUJQVQ5MV9QSU5fUEEyOQkoUElOX0JBU0UgKyAweDAwICsgMjkpCi0KICNkZWZpbmUJQVQ5MV9QSU5fUEEzMAkoUElOX0JBU0UgKyAweDAwICsgMzApCiAjZGVmaW5lCUFUOTFfUElOX1BBMzEJKFBJTl9CQVNFICsgMHgwMCArIDMxKQogCkBAIC02NSwzNyArNTksMzEgQEAKICNkZWZpbmUJQVQ5MV9QSU5fUEIyCShQSU5fQkFTRSArIDB4MjAgKyAyKQogI2RlZmluZQlBVDkxX1BJTl9QQjMJKFBJTl9CQVNFICsgMHgyMCArIDMpCiAjZGVmaW5lCUFUOTFfUElOX1BCNAkoUElOX0JBU0UgKyAweDIwICsgNCkKLQogI2RlZmluZQlBVDkxX1BJTl9QQjUJKFBJTl9CQVNFICsgMHgyMCArIDUpCiAjZGVmaW5lCUFUOTFfUElOX1BCNgkoUElOX0JBU0UgKyAweDIwICsgNikKICNkZWZpbmUJQVQ5MV9QSU5fUEI3CShQSU5fQkFTRSArIDB4MjAgKyA3KQogI2RlZmluZQlBVDkxX1BJTl9QQjgJKFBJTl9CQVNFICsgMHgyMCArIDgpCiAjZGVmaW5lCUFUOTFfUElOX1BCOQkoUElOX0JBU0UgKyAweDIwICsgOSkKLQogI2RlZmluZQlBVDkxX1BJTl9QQjEwCShQSU5fQkFTRSArIDB4MjAgKyAxMCkKICNkZWZpbmUJQVQ5MV9QSU5fUEIxMQkoUElOX0JBU0UgKyAweDIwICsgMTEpCiAjZGVmaW5lCUFUOTFfUElOX1BCMTIJKFBJTl9CQVNFICsgMHgyMCArIDEyKQogI2RlZmluZQlBVDkxX1BJTl9QQjEzCShQSU5fQkFTRSArIDB4MjAgKyAxMykKICNkZWZpbmUJQVQ5MV9QSU5fUEIxNAkoUElOX0JBU0UgKyAweDIwICsgMTQpCi0KICNkZWZpbmUJQVQ5MV9QSU5fUEIxNQkoUElOX0JBU0UgKyAweDIwICsgMTUpCiAjZGVmaW5lCUFUOTFfUElOX1BCMTYJKFBJTl9CQVNFICsgMHgyMCArIDE2KQogI2RlZmluZQlBVDkxX1BJTl9QQjE3CShQSU5fQkFTRSArIDB4MjAgKyAxNykKICNkZWZpbmUJQVQ5MV9QSU5fUEIxOAkoUElOX0JBU0UgKyAweDIwICsgMTgpCiAjZGVmaW5lCUFUOTFfUElOX1BCMTkJKFBJTl9CQVNFICsgMHgyMCArIDE5KQotCiAjZGVmaW5lCUFUOTFfUElOX1BCMjAJKFBJTl9CQVNFICsgMHgyMCArIDIwKQogI2RlZmluZQlBVDkxX1BJTl9QQjIxCShQSU5fQkFTRSArIDB4MjAgKyAyMSkKICNkZWZpbmUJQVQ5MV9QSU5fUEIyMgkoUElOX0JBU0UgKyAweDIwICsgMjIpCiAjZGVmaW5lCUFUOTFfUElOX1BCMjMJKFBJTl9CQVNFICsgMHgyMCArIDIzKQogI2RlZmluZQlBVDkxX1BJTl9QQjI0CShQSU5fQkFTRSArIDB4MjAgKyAyNCkKLQogI2RlZmluZQlBVDkxX1BJTl9QQjI1CShQSU5fQkFTRSArIDB4MjAgKyAyNSkKICNkZWZpbmUJQVQ5MV9QSU5fUEIyNgkoUElOX0JBU0UgKyAweDIwICsgMjYpCiAjZGVmaW5lCUFUOTFfUElOX1BCMjcJKFBJTl9CQVNFICsgMHgyMCArIDI3KQogI2RlZmluZQlBVDkxX1BJTl9QQjI4CShQSU5fQkFTRSArIDB4MjAgKyAyOCkKICNkZWZpbmUJQVQ5MV9QSU5fUEIyOQkoUElOX0JBU0UgKyAweDIwICsgMjkpCi0KICNkZWZpbmUJQVQ5MV9QSU5fUEIzMAkoUElOX0JBU0UgKyAweDIwICsgMzApCiAjZGVmaW5lCUFUOTFfUElOX1BCMzEJKFBJTl9CQVNFICsgMHgyMCArIDMxKQogCkBAIC0xMDQsMzcgKzkyLDMxIEBACiAjZGVmaW5lCUFUOTFfUElOX1BDMgkoUElOX0JBU0UgKyAweDQwICsgMikKICNkZWZpbmUJQVQ5MV9QSU5fUEMzCShQSU5fQkFTRSArIDB4NDAgKyAzKQogI2RlZmluZQlBVDkxX1BJTl9QQzQJKFBJTl9CQVNFICsgMHg0MCArIDQpCi0KICNkZWZpbmUJQVQ5MV9QSU5fUEM1CShQSU5fQkFTRSArIDB4NDAgKyA1KQogI2RlZmluZQlBVDkxX1BJTl9QQzYJKFBJTl9CQVNFICsgMHg0MCArIDYpCiAjZGVmaW5lCUFUOTFfUElOX1BDNwkoUElOX0JBU0UgKyAweDQwICsgNykKICNkZWZpbmUJQVQ5MV9QSU5fUEM4CShQSU5fQkFTRSArIDB4NDAgKyA4KQogI2RlZmluZQlBVDkxX1BJTl9QQzkJKFBJTl9CQVNFICsgMHg0MCArIDkpCi0KICNkZWZpbmUJQVQ5MV9QSU5fUEMxMAkoUElOX0JBU0UgKyAweDQwICsgMTApCiAjZGVmaW5lCUFUOTFfUElOX1BDMTEJKFBJTl9CQVNFICsgMHg0MCArIDExKQogI2RlZmluZQlBVDkxX1BJTl9QQzEyCShQSU5fQkFTRSArIDB4NDAgKyAxMikKICNkZWZpbmUJQVQ5MV9QSU5fUEMxMwkoUElOX0JBU0UgKyAweDQwICsgMTMpCiAjZGVmaW5lCUFUOTFfUElOX1BDMTQJKFBJTl9CQVNFICsgMHg0MCArIDE0KQotCiAjZGVmaW5lCUFUOTFfUElOX1BDMTUJKFBJTl9CQVNFICsgMHg0MCArIDE1KQogI2RlZmluZQlBVDkxX1BJTl9QQzE2CShQSU5fQkFTRSArIDB4NDAgKyAxNikKICNkZWZpbmUJQVQ5MV9QSU5fUEMxNwkoUElOX0JBU0UgKyAweDQwICsgMTcpCiAjZGVmaW5lCUFUOTFfUElOX1BDMTgJKFBJTl9CQVNFICsgMHg0MCArIDE4KQogI2RlZmluZQlBVDkxX1BJTl9QQzE5CShQSU5fQkFTRSArIDB4NDAgKyAxOSkKLQogI2RlZmluZQlBVDkxX1BJTl9QQzIwCShQSU5fQkFTRSArIDB4NDAgKyAyMCkKICNkZWZpbmUJQVQ5MV9QSU5fUEMyMQkoUElOX0JBU0UgKyAweDQwICsgMjEpCiAjZGVmaW5lCUFUOTFfUElOX1BDMjIJKFBJTl9CQVNFICsgMHg0MCArIDIyKQogI2RlZmluZQlBVDkxX1BJTl9QQzIzCShQSU5fQkFTRSArIDB4NDAgKyAyMykKICNkZWZpbmUJQVQ5MV9QSU5fUEMyNAkoUElOX0JBU0UgKyAweDQwICsgMjQpCi0KICNkZWZpbmUJQVQ5MV9QSU5fUEMyNQkoUElOX0JBU0UgKyAweDQwICsgMjUpCiAjZGVmaW5lCUFUOTFfUElOX1BDMjYJKFBJTl9CQVNFICsgMHg0MCArIDI2KQogI2RlZmluZQlBVDkxX1BJTl9QQzI3CShQSU5fQkFTRSArIDB4NDAgKyAyNykKICNkZWZpbmUJQVQ5MV9QSU5fUEMyOAkoUElOX0JBU0UgKyAweDQwICsgMjgpCiAjZGVmaW5lCUFUOTFfUElOX1BDMjkJKFBJTl9CQVNFICsgMHg0MCArIDI5KQotCiAjZGVmaW5lCUFUOTFfUElOX1BDMzAJKFBJTl9CQVNFICsgMHg0MCArIDMwKQogI2RlZmluZQlBVDkxX1BJTl9QQzMxCShQSU5fQkFTRSArIDB4NDAgKyAzMSkKIApAQCAtMTQzLDQwICsxMjUsNjcgQEAKICNkZWZpbmUJQVQ5MV9QSU5fUEQyCShQSU5fQkFTRSArIDB4NjAgKyAyKQogI2RlZmluZQlBVDkxX1BJTl9QRDMJKFBJTl9CQVNFICsgMHg2MCArIDMpCiAjZGVmaW5lCUFUOTFfUElOX1BENAkoUElOX0JBU0UgKyAweDYwICsgNCkKLQogI2RlZmluZQlBVDkxX1BJTl9QRDUJKFBJTl9CQVNFICsgMHg2MCArIDUpCiAjZGVmaW5lCUFUOTFfUElOX1BENgkoUElOX0JBU0UgKyAweDYwICsgNikKICNkZWZpbmUJQVQ5MV9QSU5fUEQ3CShQSU5fQkFTRSArIDB4NjAgKyA3KQogI2RlZmluZQlBVDkxX1BJTl9QRDgJKFBJTl9CQVNFICsgMHg2MCArIDgpCiAjZGVmaW5lCUFUOTFfUElOX1BEOQkoUElOX0JBU0UgKyAweDYwICsgOSkKLQogI2RlZmluZQlBVDkxX1BJTl9QRDEwCShQSU5fQkFTRSArIDB4NjAgKyAxMCkKICNkZWZpbmUJQVQ5MV9QSU5fUEQxMQkoUElOX0JBU0UgKyAweDYwICsgMTEpCiAjZGVmaW5lCUFUOTFfUElOX1BEMTIJKFBJTl9CQVNFICsgMHg2MCArIDEyKQogI2RlZmluZQlBVDkxX1BJTl9QRDEzCShQSU5fQkFTRSArIDB4NjAgKyAxMykKICNkZWZpbmUJQVQ5MV9QSU5fUEQxNAkoUElOX0JBU0UgKyAweDYwICsgMTQpCi0KICNkZWZpbmUJQVQ5MV9QSU5fUEQxNQkoUElOX0JBU0UgKyAweDYwICsgMTUpCiAjZGVmaW5lCUFUOTFfUElOX1BEMTYJKFBJTl9CQVNFICsgMHg2MCArIDE2KQogI2RlZmluZQlBVDkxX1BJTl9QRDE3CShQSU5fQkFTRSArIDB4NjAgKyAxNykKICNkZWZpbmUJQVQ5MV9QSU5fUEQxOAkoUElOX0JBU0UgKyAweDYwICsgMTgpCiAjZGVmaW5lCUFUOTFfUElOX1BEMTkJKFBJTl9CQVNFICsgMHg2MCArIDE5KQotCiAjZGVmaW5lCUFUOTFfUElOX1BEMjAJKFBJTl9CQVNFICsgMHg2MCArIDIwKQogI2RlZmluZQlBVDkxX1BJTl9QRDIxCShQSU5fQkFTRSArIDB4NjAgKyAyMSkKICNkZWZpbmUJQVQ5MV9QSU5fUEQyMgkoUElOX0JBU0UgKyAweDYwICsgMjIpCiAjZGVmaW5lCUFUOTFfUElOX1BEMjMJKFBJTl9CQVNFICsgMHg2MCArIDIzKQogI2RlZmluZQlBVDkxX1BJTl9QRDI0CShQSU5fQkFTRSArIDB4NjAgKyAyNCkKLQogI2RlZmluZQlBVDkxX1BJTl9QRDI1CShQSU5fQkFTRSArIDB4NjAgKyAyNSkKICNkZWZpbmUJQVQ5MV9QSU5fUEQyNgkoUElOX0JBU0UgKyAweDYwICsgMjYpCiAjZGVmaW5lCUFUOTFfUElOX1BEMjcJKFBJTl9CQVNFICsgMHg2MCArIDI3KQogI2RlZmluZQlBVDkxX1BJTl9QRDI4CShQSU5fQkFTRSArIDB4NjAgKyAyOCkKICNkZWZpbmUJQVQ5MV9QSU5fUEQyOQkoUElOX0JBU0UgKyAweDYwICsgMjkpCi0KICNkZWZpbmUJQVQ5MV9QSU5fUEQzMAkoUElOX0JBU0UgKyAweDYwICsgMzApCiAjZGVmaW5lCUFUOTFfUElOX1BEMzEJKFBJTl9CQVNFICsgMHg2MCArIDMxKQogCisjZGVmaW5lCUFUOTFfUElOX1BFMAkoUElOX0JBU0UgKyAweDgwICsgMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEUxCShQSU5fQkFTRSArIDB4ODAgKyAxKQorI2RlZmluZQlBVDkxX1BJTl9QRTIJKFBJTl9CQVNFICsgMHg4MCArIDIpCisjZGVmaW5lCUFUOTFfUElOX1BFMwkoUElOX0JBU0UgKyAweDgwICsgMykKKyNkZWZpbmUJQVQ5MV9QSU5fUEU0CShQSU5fQkFTRSArIDB4ODAgKyA0KQorI2RlZmluZQlBVDkxX1BJTl9QRTUJKFBJTl9CQVNFICsgMHg4MCArIDUpCisjZGVmaW5lCUFUOTFfUElOX1BFNgkoUElOX0JBU0UgKyAweDgwICsgNikKKyNkZWZpbmUJQVQ5MV9QSU5fUEU3CShQSU5fQkFTRSArIDB4ODAgKyA3KQorI2RlZmluZQlBVDkxX1BJTl9QRTgJKFBJTl9CQVNFICsgMHg4MCArIDgpCisjZGVmaW5lCUFUOTFfUElOX1BFOQkoUElOX0JBU0UgKyAweDgwICsgOSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEUxMAkoUElOX0JBU0UgKyAweDgwICsgMTApCisjZGVmaW5lCUFUOTFfUElOX1BFMTEJKFBJTl9CQVNFICsgMHg4MCArIDExKQorI2RlZmluZQlBVDkxX1BJTl9QRTEyCShQSU5fQkFTRSArIDB4ODAgKyAxMikKKyNkZWZpbmUJQVQ5MV9QSU5fUEUxMwkoUElOX0JBU0UgKyAweDgwICsgMTMpCisjZGVmaW5lCUFUOTFfUElOX1BFMTQJKFBJTl9CQVNFICsgMHg4MCArIDE0KQorI2RlZmluZQlBVDkxX1BJTl9QRTE1CShQSU5fQkFTRSArIDB4ODAgKyAxNSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEUxNgkoUElOX0JBU0UgKyAweDgwICsgMTYpCisjZGVmaW5lCUFUOTFfUElOX1BFMTcJKFBJTl9CQVNFICsgMHg4MCArIDE3KQorI2RlZmluZQlBVDkxX1BJTl9QRTE4CShQSU5fQkFTRSArIDB4ODAgKyAxOCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEUxOQkoUElOX0JBU0UgKyAweDgwICsgMTkpCisjZGVmaW5lCUFUOTFfUElOX1BFMjAJKFBJTl9CQVNFICsgMHg4MCArIDIwKQorI2RlZmluZQlBVDkxX1BJTl9QRTIxCShQSU5fQkFTRSArIDB4ODAgKyAyMSkKKyNkZWZpbmUJQVQ5MV9QSU5fUEUyMgkoUElOX0JBU0UgKyAweDgwICsgMjIpCisjZGVmaW5lCUFUOTFfUElOX1BFMjMJKFBJTl9CQVNFICsgMHg4MCArIDIzKQorI2RlZmluZQlBVDkxX1BJTl9QRTI0CShQSU5fQkFTRSArIDB4ODAgKyAyNCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEUyNQkoUElOX0JBU0UgKyAweDgwICsgMjUpCisjZGVmaW5lCUFUOTFfUElOX1BFMjYJKFBJTl9CQVNFICsgMHg4MCArIDI2KQorI2RlZmluZQlBVDkxX1BJTl9QRTI3CShQSU5fQkFTRSArIDB4ODAgKyAyNykKKyNkZWZpbmUJQVQ5MV9QSU5fUEUyOAkoUElOX0JBU0UgKyAweDgwICsgMjgpCisjZGVmaW5lCUFUOTFfUElOX1BFMjkJKFBJTl9CQVNFICsgMHg4MCArIDI5KQorI2RlZmluZQlBVDkxX1BJTl9QRTMwCShQSU5fQkFTRSArIDB4ODAgKyAzMCkKKyNkZWZpbmUJQVQ5MV9QSU5fUEUzMQkoUElOX0JBU0UgKyAweDgwICsgMzEpCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKiBzZXR1cCBzZXR1cCByb3V0aW5lcywgY2FsbGVkIGZyb20gYm9hcmQgaW5pdCBvciBkcml2ZXIgcHJvYmUoKSAqLwogZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X0dQSU9fcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9oYXJkd2FyZS5oCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaGFyZHdhcmUuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9oYXJkd2FyZS5oCmluZGV4IDllYTViZmUuLmVhYWYxYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2hhcmR3YXJlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9oYXJkd2FyZS5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2hhcmR3YXJlLmgKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQVRNRUwKQEAgLTIyLDIxICsyMiwyMyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYwLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYxKQogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYxLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYzKQorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYzLmg+CiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBBVDkxIHByb2Nlc3NvciIKICNlbmRpZgogCiAKIC8qCi0gKiBSZW1hcCB0aGUgcGVyaXBoZXJhbHMgZnJvbSBhZGRyZXNzIDB4RkZGQTAwMDAgLi4gMHhGRkZGRkZGRgotICogdG8gMHhGRUZBMDAwMCAuLiAweEZGMDAwMDAwLiAgKDM4NEtiKQorICogUmVtYXAgdGhlIHBlcmlwaGVyYWxzIGZyb20gYWRkcmVzcyAweEZGRjc4MDAwIC4uIDB4RkZGRkZGRkYKKyAqIHRvIDB4RkVGNzgwMDAgLi4gMHhGRjAwMDAwMC4gICg1NDQ0S2IpCiAgKi8KLSNkZWZpbmUgQVQ5MV9JT19QSFlTX0JBU0UJMHhGRkZBMDAwMAorI2RlZmluZSBBVDkxX0lPX1BIWVNfQkFTRQkweEZGRjc4MDAwCiAjZGVmaW5lIEFUOTFfSU9fU0laRQkJKDB4RkZGRkZGRkYgLSBBVDkxX0lPX1BIWVNfQkFTRSArIDEpCiAjZGVmaW5lIEFUOTFfSU9fVklSVF9CQVNFCSgweEZGMDAwMDAwIC0gQVQ5MV9JT19TSVpFKQogCiAgLyogQ29udmVydCBhIHBoeXNpY2FsIElPIGFkZHJlc3MgdG8gdmlydHVhbCBJTyBhZGRyZXNzICovCi0jZGVmaW5lIEFUOTFfSU9fUDJWKHgpCSgoeCkgLSBBVDkxX0lPX1BIWVNfQkFTRSArIEFUOTFfSU9fVklSVF9CQVNFKQorI2RlZmluZSBBVDkxX0lPX1AyVih4KQkJKCh4KSAtIEFUOTFfSU9fUEhZU19CQVNFICsgQVQ5MV9JT19WSVJUX0JBU0UpCiAKIC8qCiAgKiBWaXJ0dWFsIHRvIFBoeXNpY2FsIEFkZHJlc3MgbWFwcGluZyBmb3IgSU8gZGV2aWNlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvaW8uaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lvLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvaW8uaAppbmRleCA4OGZkMWJlLi40MDFmMzI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9pby5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaW8uaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9pby5oCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2lycXMuaApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lycXMuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9pcnFzLmgKaW5kZXggYzA2NzllYS4uMWZmYTNiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9pcnFzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9pcnFzLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvaXJxcy5oCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNCBTQU4gUGVvcGxlCiAgKgpAQCAtMzcsOCArMzcsOCBAQAogICogSVJRIGludGVycnVwdCBzeW1ib2xzIGFyZSB0aGUgQVQ5MXh4eF9JRF8qIHN5bWJvbHMKICAqIGZvciBJUlFzIGhhbmRsZWQgZGlyZWN0bHkgdGhyb3VnaCB0aGUgQUlDLCBvciBlbHNlIHRoZSBBVDkxX1BJTl8qCiAgKiBzeW1ib2xzIGluIGdwaW8uaCBmb3Igb25lcyBoYW5kbGVkIGluZGlyZWN0bHkgYXMgR1BJT3MuCi0gKiBXZSBtYWtlIHByb3Zpc2lvbiBmb3IgNCBiYW5rcyBvZiBHUElPLgorICogV2UgbWFrZSBwcm92aXNpb24gZm9yIDUgYmFua3Mgb2YgR1BJTy4KICAqLwotI2RlZmluZQlOUl9JUlFTCQkoTlJfQUlDX0lSUVMgKyAoNCAqIDMyKSkKKyNkZWZpbmUJTlJfSVJRUwkJKE5SX0FJQ19JUlFTICsgKDUgKiAzMikpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvbWVtb3J5LmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9tZW1vcnkuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9tZW1vcnkuaAppbmRleCBmOTg1MDY5Li40ODM1ZDY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvbWVtb3J5LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9tZW1vcnkuaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9tZW1vcnkuaAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgU0FOIFBlb3BsZQogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL3N5c3RlbS5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvc3lzdGVtLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvc3lzdGVtLmgKaW5kZXggOWM2NzEzMC4uNmJmODQ2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL3N5c3RlbS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvc3lzdGVtLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvc3lzdGVtLmgKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFNBTiBQZW9wbGUKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL3RpbWV4LmgKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC90aW1leC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL3RpbWV4LmgKaW5kZXggZmFlY2E0NS4uZjQxNjM2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvdGltZXguaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3RpbWV4LmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvdGltZXguaAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgU0FOIFBlb3BsZQogICoKQEAgLTMyLDYgKzMyLDExIEBACiAjZGVmaW5lIEFUOTFTQU05X01BU1RFUl9DTE9DSwk5OTMwMDAwMAogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShBVDkxU0FNOV9NQVNURVJfQ0xPQ0svMTYpCiAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMpCisKKyNkZWZpbmUgQVQ5MVNBTTlfTUFTVEVSX0NMT0NLCTk5OTU5NTAwCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEFUOTFTQU05X01BU1RFUl9DTE9DSy8xNikKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL3VuY29tcHJlc3MuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3VuY29tcHJlc3MuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS91bmNvbXByZXNzLmgKaW5kZXggMzRiNGI5My4uYTE5M2QyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC91bmNvbXByZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS91bmNvbXByZXNzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC91bmNvbXByZXNzLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvdW5jb21wcmVzcy5oCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL3ZtYWxsb2MuaApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3ZtYWxsb2MuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS92bWFsbG9jLmgKaW5kZXggMGEyM2I4Yy4uYmIwNWU3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS92bWFsbG9jLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC92bWFsbG9jLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvdm1hbGxvYy5oCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3BkYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3BkYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWQ2ZTAyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9wZGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcGRjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5Ci0gKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKLSAqCi0gKiBQZXJpcGhlcmFsIERhdGEgQ29udHJvbGxlciAoUERDKSByZWdpc3RlcnMuCi0gKiBCYXNlZCBvbiBBVDkxUk05MjAwIGRhdGFzaGVldCByZXZpc2lvbiBFLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBBVDkxX1BEQ19ICi0jZGVmaW5lIEFUOTFfUERDX0gKLQotI2RlZmluZSBBVDkxX1BEQ19SUFIJCTB4MTAwCS8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX1BEQ19SQ1IJCTB4MTA0CS8qIFJlY2VpdmUgQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX1BEQ19UUFIJCTB4MTA4CS8qIFRyYW5zbWl0IFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9QRENfVENSCQkweDEwYwkvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfUERDX1JOUFIJCTB4MTEwCS8qIFJlY2VpdmUgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfUERDX1JOQ1IJCTB4MTE0CS8qIFJlY2VpdmUgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfUERDX1ROUFIJCTB4MTE4CS8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX1BEQ19UTkNSCQkweDExYwkvKiBUcmFuc21pdCBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBBVDkxX1BEQ19QVENSCQkweDEyMAkvKiBUcmFuc2ZlciBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCQlBVDkxX1BEQ19SWFRFTgkJKDEgPDwgMCkJLyogUmVjZWl2ZXIgVHJhbnNmZXIgRW5hYmxlICovCi0jZGVmaW5lCQlBVDkxX1BEQ19SWFRESVMJCSgxIDw8IDEpCS8qIFJlY2VpdmVyIFRyYW5zZmVyIERpc2FibGUgKi8KLSNkZWZpbmUJCUFUOTFfUERDX1RYVEVOCQkoMSA8PCA4KQkvKiBUcmFuc21pdHRlciBUcmFuc2ZlciBFbmFibGUgKi8KLSNkZWZpbmUJCUFUOTFfUERDX1RYVERJUwkJKDEgPDwgOSkJLyogVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLwotCi0jZGVmaW5lIEFUOTFfUERDX1BUU1IJCTB4MTI0CS8qIFRyYW5zZmVyIFN0YXR1cyBSZWdpc3RlciAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvY3B1LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2NwdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjhkMDliLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvY3B1LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9jcHUuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgU0FOIFBlb3BsZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9DUFVfSAotI2RlZmluZSBfX0FTTV9BUkNIX0NQVV9ICi0KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX2RiZ3UuaD4KLQotCi0jZGVmaW5lIEFSQ0hfSURfQVQ5MVJNOTIwMAkweDA5MjkwNzgwCi0jZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTkyNjAJMHgwMTk4MDNhMAotI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05MjYxCTB4MDE5NzAzYTAKLQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXQ5MV9jcHVfaWRlbnRpZnkodm9pZCkKLXsKLQlyZXR1cm4gKGF0OTFfc3lzX3JlYWQoQVQ5MV9EQkdVX0NJRFIpICYgfkFUOTFfQ0lEUl9WRVJTSU9OKTsKLX0KLQotCi0jaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMAotI2RlZmluZSBjcHVfaXNfYXQ5MXJtOTIwMCgpCShhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MVJNOTIwMCkKLSNlbHNlCi0jZGVmaW5lIGNwdV9pc19hdDkxcm05MjAwKCkJKDApCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX0FUOTFTQU05MjYwCi0jZGVmaW5lIGNwdV9pc19hdDkxc2FtOTI2MCgpCShhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MVNBTTkyNjApCi0jZWxzZQotI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjAoKQkoMCkKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEKLSNkZWZpbmUgY3B1X2lzX2F0OTFzYW05MjYxKCkJKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxU0FNOTI2MSkKLSNlbHNlCi0jZGVmaW5lIGNwdV9pc19hdDkxc2FtOTI2MSgpCSgwKQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9kZWJ1Zy1tYWNyby5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWNkYWRmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZGVidWctbWFjcm8uUworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2RlYnVnLW1hY3JvLlMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgU0FOIFBlb3BsZQotICoKLSAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotKi8KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfZGJndS5oPgotCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4Ci0JbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKLQl0c3QJXHJ4LCAjMQkJCQlAIE1NVSBlbmFibGVkPwotCWxkcmVxCVxyeCwgPUFUOTFfQkFTRV9TWVMJCUAgU3lzdGVtIHBlcmlwaGVyYWxzIChwaHlzIGFkZHJlc3MpCi0JbGRybmUJXHJ4LCA9QVQ5MV9WQV9CQVNFX1NZUwkJQCBTeXN0ZW0gcGVyaXBoZXJhbHMgKHZpcnQgYWRkcmVzcykKLQkuZW5kbQotCi0JLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4Ci0Jc3RyYglccmQsIFtccngsICNBVDkxX0RCR1VfVEhSXQlAIFdyaXRlIHRvIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIKLQkuZW5kbQotCi0JLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4Ci0xMDAxOglsZHIJXHJkLCBbXHJ4LCAjQVQ5MV9EQkdVX1NSXQlAIFJlYWQgU3RhdHVzIFJlZ2lzdGVyCi0JdHN0CVxyZCwgI0FUOTFfREJHVV9UWFJEWQkJQCBEQkdVX1RYUkRZID0gMSB3aGVuIHJlYWR5IHRvIHRyYW5zbWl0Ci0JYmVxCTEwMDFiCi0JLmVuZG0KLQotCS5tYWNybwlidXN5dWFydCxyZCxyeAotMTAwMToJbGRyCVxyZCwgW1xyeCwgI0FUOTFfREJHVV9TUl0JQCBSZWFkIFN0YXR1cyBSZWdpc3RlcgotCXRzdAlccmQsICNBVDkxX0RCR1VfVFhFTVBUWQkJQCBEQkdVX1RYRU1QVFkgPSAxIHdoZW4gdHJhbnNtaXNzaW9uIGNvbXBsZXRlCi0JYmVxCTEwMDFiCi0JLmVuZG0KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9lbnRyeS1tYWNyby5TCmluZGV4IDU3MjQ4YTcuLjBlMGFhZGYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9lbnRyeS1tYWNyby5TCkBAIC0xNiw2ICsxNiwxMiBAQAogCS5tYWNybwlkaXNhYmxlX2ZpcQogCS5lbmRtCiAKKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKIAkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAJbGRyCVxiYXNlLCA9KEFUOTFfVkFfQkFTRV9TWVMpCQlAIGJhc2UgdmlydHVhbCBhZGRyZXNzIG9mIFNZUyBwZXJpcGhlcmFscwogCWxkcglcaXJxbnIsIFtcYmFzZSwgI0FUOTFfQUlDX0lWUl0JCUAgcmVhZCBJUlEgdmVjdG9yIHJlZ2lzdGVyOiBkZS1hc3NlcnRzIG5JUlEgdG8gcHJvY2Vzc29yIChhbmQgY2xlYXJzIGludGVycnVwdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2VudHJ5LW1hY3JvLlMKaW5kZXggYzllNTM5NS4uMGNmYjg5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2VudHJ5LW1hY3JvLlMKQEAgLTEsMyArMSw4IEBACiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWlvbWQuUz4KKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9lbnRyeS1tYWNyby5TCmluZGV4IGRlNDQ4MWQuLmNkOGM1YTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvZW50cnktbWFjcm8uUwpAQCAtMTMsNiArMTMsMTIgQEAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKKwkJLm1hY3JvCWdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCS5lbmRtCisKKwkJLm1hY3JvCWFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkJLmVuZG0KKwogI2lmIChJTlRTUjIgLSBJTlRTUjEpICE9IChJTlRNUjIgLSBJTlRNUjEpCiAjZXJyb3IgSU5UU1Igc3RyaWRlICE9IElOVE1SIHN0cmlkZQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2VudHJ5LW1hY3JvLlMKaW5kZXggYjEyY2EwNC4uYWEyM2M1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZW50cnktbWFjcm8uUwpAQCAtMTUsNiArMTUsMTIgQEAKIAkubWFjcm8JZGlzYWJsZV9maXEKIAkuZW5kbQogCisJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCS5lbmRtCisKKwkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkuZW5kbQorCiAJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIHN0YXQsIGJhc2UsIHRtcAogCW1vdglcYmFzZSwgI0lSUV9TVEFUCiAJbGRyYglcc3RhdCwgW1xiYXNlXQkJCUAgZ2V0IGludGVycnVwdHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvZW50cnktbWFjcm8uUwppbmRleCBjZTgxMmQ0Li40MjAzZGJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9lbnRyeS1tYWNyby5TCkBAIC0xNCw2ICsxNCwxMiBAQAogCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KIAorCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCS5lbmRtCisKKwkJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJCS5lbmRtCisKIAkJLmVxdQlkYzIxMjg1X2hpZ2gsIEFSTUNTUl9CQVNFICYgMHhmZjAwMDAwMAogCQkuZXF1CWRjMjEyODVfbG93LCBBUk1DU1JfQkFTRSAmIDB4MDBmZmZmZmYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZW50cnktbWFjcm8uUwppbmRleCA4NDE0MGEyLi4yNDFlYzIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZW50cnktbWFjcm8uUwpAQCAtMTQsNiArMTQsMTIgQEAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQkuZW5kbQorCisJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCQkuZW5kbQorCiAJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKIAkJbGRyCVxiYXNlLCA9KEVQOTNYWF9BSEJfVklSVF9CQVNFKQogCQlvcnIJXGJhc2UsIFxiYXNlLCAjMHgwMDBiMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2VwOTN4eC1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZXA5M3h4LXJlZ3MuaAppbmRleCA1OTNmNTYyLi42MjVjNmYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZXA5M3h4LXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZXA5M3h4LXJlZ3MuaApAQCAtNzMsNiArNzMsMTEgQEAKIAogI2RlZmluZSBFUDkzWFhfR1BJT19CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMDQwMDAwKQogI2RlZmluZSBFUDkzWFhfR1BJT19SRUcoeCkJCShFUDkzWFhfR1BJT19CQVNFICsgKHgpKQorI2RlZmluZSBFUDkzWFhfR1BJT19GX0lOVF9UWVBFMQkJRVA5M1hYX0dQSU9fUkVHKDB4NGMpCisjZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX1RZUEUyCQlFUDkzWFhfR1BJT19SRUcoMHg1MCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfQUNLCQlFUDkzWFhfR1BJT19SRUcoMHg1NCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfRU5BQkxFCUVQOTNYWF9HUElPX1JFRygweDU4KQorI2RlZmluZSBFUDkzWFhfR1BJT19GX0lOVF9TVEFUVVMJRVA5M1hYX0dQSU9fUkVHKDB4NWMpCiAjZGVmaW5lIEVQOTNYWF9HUElPX0FfSU5UX1RZUEUxCQlFUDkzWFhfR1BJT19SRUcoMHg5MCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfVFlQRTIJCUVQOTNYWF9HUElPX1JFRygweDk0KQogI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9BQ0sJCUVQOTNYWF9HUElPX1JFRygweDk4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9pcnFzLmgKaW5kZXggYWU1MzJlMzA0Li4yYThjNjM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9pcnFzLmgKQEAgLTY3LDkgKzY3LDEzIEBACiAjZGVmaW5lIElSUV9FUDkzWFhfU0FJCQkJNjAKICNkZWZpbmUgRVA5M1hYX1ZJQzJfVkFMSURfSVJRX01BU0sJMHgxZmZmZmZmZgogCi0jZGVmaW5lIElSUV9FUDkzWFhfR1BJTyh4KQkJKDY0ICsgKHgpKQorLyoKKyAqIE1hcCBHUElPIEEwLi5BNyB0byBpcnEgNjQuLjcxLCBCMC4uQjcgdG8gNzIuLjc5LCBhbmQKKyAqIEYwLi5GNyB0byA4MC4uODcuCisgKi8KKyNkZWZpbmUgSVJRX0VQOTNYWF9HUElPKHgpCQkoNjQgKyAoKCh4KSArICgoKHgpID4+IDIpICYgOCkpICYgMHgxZikpCiAKLSNkZWZpbmUgTlJfRVA5M1hYX0lSUVMJCQlJUlFfRVA5M1hYX0dQSU8oMTYpCisjZGVmaW5lIE5SX0VQOTNYWF9JUlFTCQkJKDY0ICsgMjQpCiAKICNkZWZpbmUgRVA5M1hYX0JPQVJEX0lSUSh4KQkJKE5SX0VQOTNYWF9JUlFTICsgKHgpKQogI2RlZmluZSBFUDkzWFhfQk9BUkRfSVJRUwkJMzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3BsYXRmb3JtLmgKaW5kZXggYjRhOGRlYjguLjQ0ZWNjZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9wbGF0Zm9ybS5oCkBAIC04LDcgKzgsNiBAQAogdm9pZCBlcDkzeHhfaW5pdF9pcnEodm9pZCk7CiB2b2lkIGVwOTN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7CiB2b2lkIGVwOTN4eF9pbml0X2RldmljZXModm9pZCk7Ci12b2lkIGVwOTN4eF9jbG9ja19pbml0KHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgZXA5M3h4X3RpbWVyOwogCiBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvZW50cnktbWFjcm8uUwppbmRleCA4ZjE2NTY0Li4zOGRkNjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2VudHJ5LW1hY3JvLlMKQEAgLTExLDYgKzExLDEyIEBACiAJCS5tYWNybyAgZGlzYWJsZV9maXEKIAkJLmVuZG0KIAorCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCS5lbmRtCisKKwkJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJCS5lbmRtCisKIAkJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKICNpZiBkZWZpbmVkIChDT05GSUdfQ1BVX0g3MjAxKSB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX0g3MjAyKQogCQlAIHdlIGNvdWxkIHVzZSB0aGUgaWQgcmVnaXN0ZXIgb24gSDcyMDIsIGJ1dCB0aGlzIGlzIG5vdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZW50cnktbWFjcm8uUwppbmRleCAzYjllZjY5Li4wYjg0ZTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvZW50cnktbWFjcm8uUwpAQCAtMTEsMjEgKzExLDIyIEBACiAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCi0jZGVmaW5lIEFJVENfTklWRUNTUiAgIDB4NDAKLQkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCQlsZHIJXGlycXN0YXQsID1JT19BRERSRVNTKElNWF9BSVRDX0JBU0UpCi0JCUAgTG9hZCBvZmZzZXQgJiBwcmlvcml0eSBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eQotCQlAIGludGVycnVwdCBwZW5kaW5nLgotCQlsZHIJXGlycW5yLCBbXGlycXN0YXQsICNBSVRDX05JVkVDU1JdCi0JCUAgU2hpZnQgb2ZmIHRoZSBwcmlvcml0eSBsZWF2aW5nIHRoZSBvZmZzZXQgb3IKLQkJQCAiaW50ZXJydXB0IG51bWJlciIKLQkJbW92CVxpcnFuciwgXGlycW5yLCBsc3IgIzE2Ci0gCQlsZHIJXGlycXN0YXQsID0xCUAgZHVtbXkgY29tcGFyZQotCQlsZHIJXGJhc2UsID0weEZGRkYJCS8vIGludmFsaWQgaW50ZXJydXB0Ci0JCWNtcAlcaXJxbnIsIFxiYXNlCi0JCWJuZQkxMDAxZgotCQlsZHIJXGlycXN0YXQsID0wCi0xMDAxOgotCQl0c3QJXGlycXN0YXQsICMxCUAgdG8gbWFrZSB0aGUgY29uZGl0aW9uIGNvZGUgPSBUUlVFCisKKwkJLm1hY3JvCWdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCiAJCS5lbmRtCiAKKwkJLm1hY3JvCWFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkJLmVuZG0KKworI2RlZmluZSBBSVRDX05JVkVDU1IgICAweDQwCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJbGRyCVxiYXNlLCA9SU9fQUREUkVTUyhJTVhfQUlUQ19CQVNFKQorCQlAIExvYWQgb2Zmc2V0ICYgcHJpb3JpdHkgb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkKKwkJQCBpbnRlcnJ1cHQgcGVuZGluZy4KKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICNBSVRDX05JVkVDU1JdCisJCUAgU2hpZnQgb2ZmIHRoZSBwcmlvcml0eSBsZWF2aW5nIHRoZSBvZmZzZXQgb3IKKwkJQCAiaW50ZXJydXB0IG51bWJlciIsIHVzZSBhcml0aG1ldGljIHNoaWZ0IHRvCisJCUAgdHJhbnNmb3JtIGlsbGVnYWwgc291cmNlICgweGZmZmYpIGFzIC0xCisJCW1vdglcaXJxbnIsIFxpcnFzdGF0LCBhc3IgIzE2CisJCWFkZHMJXHRtcCwgXGlycW5yLCAjMQorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9lbnRyeS1tYWNyby5TCmluZGV4IDY5ODM4ZDAuLjQ5MWFmMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2VudHJ5LW1hY3JvLlMKQEAgLTEzLDYgKzEzLDEyIEBACiAgCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KIAorCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCS5lbmRtCisKKwkJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJCS5lbmRtCisKIAkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAogLyogRklYTUU6IHNob3VsZCBub3QgYmUgdXNpbmcgc29vIG1hbnkgTERScyBoZXJlICovCiAJCWxkcglcYmFzZSwgPUlPX0FERFJFU1MoSU5URUdSQVRPUl9JQ19CQVNFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9lbnRyeS1tYWNyby5TCmluZGV4IDk0YzUwMjguLmE2MjRhNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2VudHJ5LW1hY3JvLlMKQEAgLTE5LDIxICsxOSwyNyBAQAogCS5tYWNybyAgZGlzYWJsZV9maXEKIAkuZW5kbQogCisJLm1hY3JvIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJbXJjCXAxNSwgMCwgXHRtcCwgYzE1LCBjMSwgMAorCW9ycglcdG1wLCBcdG1wLCAjKDEgPDwgNikKKwltY3IJcDE1LCAwLCBcdG1wLCBjMTUsIGMxLCAwCUAgRW5hYmxlIGNwNiBhY2Nlc3MKKwkuZW5kbQorCiAJLyoKIAkgKiBOb3RlOiBhIDEtY3ljbGUgd2luZG93IGV4aXN0cyB3aGVyZSBpaW50dmVjIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZQogCSAqIG9mIGlpbnRiYXNlLCBzbyB3ZSBleHBsaWNpdGx5IGNoZWNrIGZvciAiYmFkIHplcm9zIgogCSAqLwogCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0JbXJjCXAxNSwgMCwgXHRtcCwgYzE1LCBjMSwgMAotCW9ycglcdG1wLCBcdG1wLCAjKDEgPDwgNikKLQltY3IJcDE1LCAwLCBcdG1wLCBjMTUsIGMxLCAwCUAgRW5hYmxlIGNwNiBhY2Nlc3MKLQogCW1yYwlwNiwgMCwgXGlycW5yLCBjMywgYzIsIDAgIAlAIFJlYWQgSUlOVFZFQwogCWNtcAlcaXJxbnIsICMwCiAJbXJjZXEJcDYsIDAsIFxpcnFuciwgYzMsIGMyLCAwICAJQCBSZS1yZWFkIG9uIHBvdGVudGlhbGx5IGJhZCB6ZXJvCiAJYWRkcwlcaXJxc3RhdCwgXGlycW5yLCAjMQkgIAlAIENoZWNrIGZvciAweGZmZmZmZmZmCiAJbW92bmUJXGlycW5yLCBcaXJxbnIsIGxzciAjMgkgIAlAIENvbnZlcnQgdG8gaXJxbnIKKwkuZW5kbQogCi0JYmljZXEJXHRtcCwgXHRtcCwgIygxIDw8IDYpCi0JbWNyZXEJcDE1LCAwLCBcdG1wLCBjMTUsIGMxLCAwCUAgRGlzYWJsZSBjcDYgYWNjZXNzIGlmIG5vIG1vcmUgaW50ZXJydXB0cworCS5tYWNybyBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJbXJjCXAxNSwgMCwgXHRtcDEsIGMxNSwgYzEsIDAKKwlhbmRzCVx0bXAyLCBcdG1wMSwgIygxIDw8IDYpCisJYmljbmUJXHRtcDEsIFx0bXAxLCAjKDEgPDwgNikKKwltY3JuZQlwMTUsIDAsIFx0bXAxLCBjMTUsIGMxLCAwCUAgRGlzYWJsZSBjcDYgYWNjZXNzCiAJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvaW9wMTN4eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9pb3AxM3h4LmgKaW5kZXggYTg4NTIyYS4uZDI2Yjc1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9pb3AxM3h4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9pb3AxM3h4LmgKQEAgLTksMzQgKzksNiBAQAogdm9pZCBpb3AxM3h4X21hcF9pbyh2b2lkKTsKIHZvaWQgaW9wMTN4eF9wbGF0Zm9ybV9pbml0KHZvaWQpOwogdm9pZCBpb3AxM3h4X2luaXRfaXJxKHZvaWQpOwotdm9pZCBpb3AxM3h4X2luaXRfdGltZSh1bnNpZ25lZCBsb25nIHRpY2tyYXRlKTsKLXVuc2lnbmVkIGxvbmcgaW9wMTN4eF9nZXR0aW1lb2Zmc2V0KHZvaWQpOwotCi0vKiBoYW5kbGUgY3A2IGFjY2VzcwotICogdG8gZG86IGhhbmRsZSBhY2Nlc3MgaW4gZW50cnktYXJtdjUuUyBhbmQgdW5pZnkgd2l0aAotICogdGhlIGlvcDN4eCBpbXBsZW1lbnRhdGlvbgotICogbm90ZTogdXNlIGlvcDEzeHhfY3A2X2VuYWJsZV9pcnFfc2F2ZSBhbmQgaW9wMTN4eF9jcDZfaXJxX3Jlc3RvcmUgKGlycS5oKQotICogd2hlbiBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpb3AxM3h4X2NwNl9zYXZlKHZvaWQpCi17Ci0JdTMyIHRlbXAsIGNwX2ZsYWdzOwotCi0JYXNtIHZvbGF0aWxlICgKLQkJIm1yYwlwMTUsIDAsICUxLCBjMTUsIGMxLCAwXG5cdCIKLQkJIm9ycgklMCwgJTEsICMoMSA8PCA2KVxuXHQiCi0JCSJtY3IJcDE1LCAwLCAlMCwgYzE1LCBjMSwgMFxuXHQiCi0JCTogIj1yIiAodGVtcCksICI9ciIoY3BfZmxhZ3MpKTsKLQotCXJldHVybiBjcF9mbGFnczsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvcDEzeHhfY3A2X3Jlc3RvcmUodW5zaWduZWQgbG9uZyBjcF9mbGFncykKLXsKLQlhc20gdm9sYXRpbGUgKAotCQkibWNyCXAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgotCQk6IDogInIiIChjcF9mbGFncykgKTsKLX0KIAogLyogQ1BVSUQgQ1A2IFIwIFBhZ2UgMCAqLwogc3RhdGljIGlubGluZSBpbnQgaW9wMTN4eF9jcHVfaWQodm9pZCkKQEAgLTQ3OSwxNCArNDUxLDQgQEAKICNkZWZpbmUgSU9QMTNYWF9QQklfQkFSMSAgICAgIAkJSU9QMTNYWF9QQklfT0ZGU0VUKDB4MTApCiAjZGVmaW5lIElPUDEzWFhfUEJJX0xSMSAgICAgICAJCUlPUDEzWFhfUEJJX09GRlNFVCgweDE0KQogCi0jZGVmaW5lIElPUDEzWFhfVE1SX1RDCQkJMHgwMQotI2RlZmluZSBJT1AxM1hYX1RNUl9FTgkJCTB4MDIKLSNkZWZpbmUgSU9QMTNYWF9UTVJfUkVMT0FECQkweDA0Ci0jZGVmaW5lIElPUDEzWFhfVE1SX1BSSVZJTEVHRUQJCTB4MDgKLQotI2RlZmluZSBJT1AxM1hYX1RNUl9SQVRJT18xXzEJCTB4MDAKLSNkZWZpbmUgSU9QMTNYWF9UTVJfUkFUSU9fNF8xCQkweDEwCi0jZGVmaW5lIElPUDEzWFhfVE1SX1JBVElPXzhfMQkJMHgyMAotI2RlZmluZSBJT1AxM1hYX1RNUl9SQVRJT18xNl8xCQkweDMwCi0KICNlbmRpZiAvKiBfSU9QMTNYWF9IV19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2lycXMuaAppbmRleCA0NDJlMzVhLi41YzZmYWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2lycXMuaApAQCAtMyw4ICszLDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+IC8qIGxvY2FsX2lycV9zYXZlICovCi0jaW5jbHVkZSA8YXNtL2FyY2gvaW9wMTN4eC5oPiAvKiBpb3AxM3h4X2NwNl8qICovCiAKIC8qIElOVFBORDAgQ1A2IFIwIFBhZ2UgMwogICovCkBAIC00MSwyMSArMzksNiBAQAogCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzMsIGMzLCAwIjoiPXIiICh2YWwpKTsKIAlyZXR1cm4gdmFsOwogfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWlvcDEzeHhfY3A2X2VuYWJsZV9pcnFfc2F2ZSh1bnNpZ25lZCBsb25nICpjcF9mbGFncywgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKQotewotCWxvY2FsX2lycV9zYXZlKCppcnFfZmxhZ3MpOwotCSpjcF9mbGFncyA9IGlvcDEzeHhfY3A2X3NhdmUoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1pb3AxM3h4X2NwNl9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nICpjcF9mbGFncywKLQl1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpCi17Ci0JaW9wMTN4eF9jcDZfcmVzdG9yZSgqY3BfZmxhZ3MpOwotCWxvY2FsX2lycV9yZXN0b3JlKCppcnFfZmxhZ3MpOwotfQogI2VuZGlmCiAKICNkZWZpbmUgSU5UQkFTRSAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9zeXN0ZW0uaAppbmRleCBlZTNhNjI1Li4xMjc4MjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvc3lzdGVtLmgKQEAgLTQ4LDEyICs0OCwxMCBAQAogCS8qCiAJICogUmVzZXQgdGhlIGludGVybmFsIGJ1cyAod2FybmluZyBib3RoIGNvcmVzIGFyZSByZXNldCkKIAkgKi8KLQl1MzIgY3BfZmxhZ3MgPSBpb3AxM3h4X2NwNl9zYXZlKCk7CiAJd3JpdGVfd2R0Y3IoSU9QMTNYWF9XRFRDUl9FTl9BUk0pOwogCXdyaXRlX3dkdGNyKElPUDEzWFhfV0RUQ1JfRU4pOwogCXdyaXRlX3dkdHNyKElPUDEzWFhfV0RUU1JfV1JJVEVfRU4gfCBJT1AxM1hYX1dEVENSX0lCX1JFU0VUKTsKIAl3cml0ZV93ZHRjcigweDEwMDApOwotCWlvcDEzeHhfY3A2X3Jlc3RvcmUoY3BfZmxhZ3MpOwogCiAJZm9yKDs7KTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvdGltZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhODM3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvdGltZS5oCkBAIC0wLDAgKzEsNTEgQEAKKyNpZm5kZWYgX0lPUDEzWFhfVElNRV9IXworI2RlZmluZSBfSU9QMTNYWF9USU1FX0hfCisjZGVmaW5lIElSUV9JT1BfVElNRVIwIElSUV9JT1AxM1hYX1RJTUVSMAorCisjZGVmaW5lIElPUF9UTVJfRU4JICAgIDB4MDIKKyNkZWZpbmUgSU9QX1RNUl9SRUxPQUQJICAgIDB4MDQKKyNkZWZpbmUgSU9QX1RNUl9QUklWSUxFR0VEIDB4MDgKKyNkZWZpbmUgSU9QX1RNUl9SQVRJT18xXzEgIDB4MDAKKwordm9pZCBpb3BfaW5pdF90aW1lKHVuc2lnbmVkIGxvbmcgdGlja3JhdGUpOwordW5zaWduZWQgbG9uZyBpb3BfZ2V0dGltZW9mZnNldCh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3RtcjAodTMyIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMwLCBjOSwgMCIgOiA6ICJyIiAodmFsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV90bXIxKHUzMiB2YWwpCit7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMSwgYzksIDAiIDogOiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiByZWFkX3RjcjAodm9pZCkKK3sKKwl1MzIgdmFsOworCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzIsIGM5LCAwIiA6ICI9ciIgKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHJlYWRfdGNyMSh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgcDYsIDAsICUwLCBjMywgYzksIDAiIDogIj1yIiAodmFsKSk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3RycjAodTMyIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGM0LCBjOSwgMCIgOiA6ICJyIiAodmFsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV90cnIxKHUzMiB2YWwpCit7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNSwgYzksIDAiIDogOiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfdGlzcih1MzIgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzYsIGM5LCAwIiA6IDogInIiICh2YWwpKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvZW50cnktbWFjcm8uUwppbmRleCAxNTAwY2JiLi4yMDdkYjk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvZW50cnktbWFjcm8uUwpAQCAtOSwxMyArOSwyOCBAQAogICovCiAjaW5jbHVkZSA8YXNtL2FyY2gvaW9wMzJ4Lmg+CiAKLQkJLm1hY3JvCWRpc2FibGVfZmlxCi0JCS5lbmRtCisJLm1hY3JvCWRpc2FibGVfZmlxCisJLmVuZG0KIAotCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0JCWxkcglcYmFzZSwgPUlPUDNYWF9SRUdfQUREUigweDA3RDgpCi0JCWxkcglcaXJxc3RhdCwgW1xiYXNlXQkJQCBSZWFkIElJTlRTUkMKLQkJY21wCVxpcnFzdGF0LCAjMAotCQljbHpuZQlcaXJxbnIsIFxpcnFzdGF0Ci0JCXJzYm5lCVxpcnFuciwgXGlycW5yLCAjMzEKLQkJLmVuZG0KKwkubWFjcm8gZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwltcmMJcDE1LCAwLCBcdG1wLCBjMTUsIGMxLCAwCisJb3JyCVx0bXAsIFx0bXAsICMoMSA8PCA2KQorCW1jcglwMTUsIDAsIFx0bXAsIGMxNSwgYzEsIDAJQCBFbmFibGUgY3A2IGFjY2VzcworCW1yYwlwMTUsIDAsIFx0bXAsIGMxNSwgYzEsIDAKKwltb3YJXHRtcCwgXHRtcAorCXN1YglwYywgcGMsICM0CQkJQCBjcF93YWl0CisJLmVuZG0KKworCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJbXJjICAgICBwNiwgMCwgXGlycXN0YXQsIGM4LCBjMCwgMAlAIFJlYWQgSUlOVFNSQworCWNtcCAgICAgXGlycXN0YXQsICMwCisJY2x6bmUgICBcaXJxbnIsIFxpcnFzdGF0CisJcnNibmUgICBcaXJxbnIsIFxpcnFuciwgIzMxCisJLmVuZG0KKworCS5tYWNybyBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJbXJjCXAxNSwgMCwgXHRtcDEsIGMxNSwgYzEsIDAKKwlhbmRzCVx0bXAyLCBcdG1wMSwgIygxIDw8IDYpCisJYmljbmUJXHRtcDEsIFx0bXAxLCAjKDEgPDwgNikKKwltY3JuZQlwMTUsIDAsIFx0bXAxLCBjMTUsIGMxLCAwCUAgRGlzYWJsZSBjcDYgYWNjZXNzCisJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lvLmgKaW5kZXggMTJkOWVlMC4uNWY1NzBhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lvLmgKQEAgLTEzLDEwICsxMywxNiBAQAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJCTB4ZmZmZmZmZmYKK2V4dGVybiB2b2lkIF9faW9tZW0gKiBfX2lvcmVtYXAodW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKl9faW9wM3h4X2lvcmVtYXAodW5zaWduZWQgbG9uZyBjb29raWUsIHNpemVfdCBzaXplLAorCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOworZXh0ZXJuIHZvaWQgX19pb3AzeHhfaW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpOwogCi0jZGVmaW5lIF9faW8ocCkJCQkoKHZvaWQgX19pb21lbSAqKShwKSkKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgX19pbyhwKQkJKCh2b2lkIF9faW9tZW0gKilJT1AzWFhfUENJX0lPX1BIWVNfVE9fVklSVChwKSkKICNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKIAorI2RlZmluZSBfX2FyY2hfaW9yZW1hcChhLCBzLCBmKSBfX2lvcDN4eF9pb3JlbWFwKGEsIHMsIGYpCisjZGVmaW5lIF9fYXJjaF9pb3VubWFwKGEpCSBfX2lvcDN4eF9pb3VubWFwKGEpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L3RpbWUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYyOGM5OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC90aW1lLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIF9JT1AzMlhfVElNRV9IXworI2RlZmluZSBfSU9QMzJYX1RJTUVfSF8KKyNkZWZpbmUgSVJRX0lPUF9USU1FUjAgSVJRX0lPUDMyWF9USU1FUjAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvZW50cnktbWFjcm8uUwppbmRleCA5MmI3OTE3Li5iOGUzZDQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvZW50cnktbWFjcm8uUwpAQCAtOSwxNCArOSwyOSBAQAogICovCiAjaW5jbHVkZSA8YXNtL2FyY2gvaW9wMzN4Lmg+CiAKLQkJLm1hY3JvCWRpc2FibGVfZmlxCi0JCS5lbmRtCisJLm1hY3JvCWRpc2FibGVfZmlxCisJLmVuZG0KIAotCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0JCWxkcglcYmFzZSwgPUlPUDNYWF9SRUdfQUREUigweDA3QzgpCi0JCWxkcglcaXJxc3RhdCwgW1xiYXNlXQkJQCBSZWFkIElJTlRWRUMKLQkJY21wCVxpcnFzdGF0LCAjMAotCQlsZHJlcQlcaXJxc3RhdCwgW1xiYXNlXQkJQCBlcnJhdHVtIDYzIHdvcmthcm91bmQKLQkJYWRkcwlcaXJxbnIsIFxpcnFzdGF0LCAjMQotCQltb3ZuZQlcaXJxbnIsIFxpcnFzdGF0LCBsc3IgIzIKLQkJLmVuZG0KKwkubWFjcm8gZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwltcmMJcDE1LCAwLCBcdG1wLCBjMTUsIGMxLCAwCisJb3JyCVx0bXAsIFx0bXAsICMoMSA8PCA2KQorCW1jcglwMTUsIDAsIFx0bXAsIGMxNSwgYzEsIDAJQCBFbmFibGUgY3A2IGFjY2VzcworCW1yYwlwMTUsIDAsIFx0bXAsIGMxNSwgYzEsIDAKKwltb3YJXHRtcCwgXHRtcAorCXN1YglwYywgcGMsICM0CQkJQCBjcF93YWl0CisJLmVuZG0KKworCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJbXJjICAgICBwNiwgMCwgXGlycXN0YXQsIGMxNCwgYzAsIDAgICAgIEAgUmVhZCBJSU5UVkVDCisJY21wICAgICBcaXJxc3RhdCwgIzAKKwltcmNlcSAgIHA2LCAwLCBcaXJxc3RhdCwgYzE0LCBjMCwgMCAgICAgQCBlcnJhdHVtIDYzIHdvcmthcm91bmQKKwlhZGRzICAgIFxpcnFuciwgXGlycXN0YXQsICMxCisJbW92bmUgICBcaXJxbnIsIFxpcnFzdGF0LCBsc3IgIzIKKwkuZW5kbQorCisJLm1hY3JvIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwltcmMJcDE1LCAwLCBcdG1wMSwgYzE1LCBjMSwgMAorCWFuZHMJXHRtcDIsIFx0bXAxLCAjKDEgPDwgNikKKwliaWNuZQlcdG1wMSwgXHRtcDEsICMoMSA8PCA2KQorCW1jcm5lCXAxNSwgMCwgXHRtcDEsIGMxNSwgYzEsIDAJQCBEaXNhYmxlIGNwNiBhY2Nlc3MKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaW8uaAppbmRleCBjMDE3NDAyLi4xYmI1MDcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaW8uaApAQCAtMTMsOSArMTMsMTYgQEAKIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCitleHRlcm4gdm9pZCBfX2lvbWVtICogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2lvcDN4eF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgY29va2llLCBzaXplX3Qgc2l6ZSwKKwl1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiB2b2lkIF9faW9wM3h4X2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKKwogI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJMHhmZmZmZmZmZgotI2RlZmluZSBfX2lvKHApCQkJKCh2b2lkIF9faW9tZW0gKikocCkpCisjZGVmaW5lIF9faW8ocCkJCSgodm9pZCBfX2lvbWVtICopSU9QM1hYX1BDSV9JT19QSFlTX1RPX1ZJUlQocCkpCiAjZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCiAKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAoYSwgcywgZikgX19pb3AzeHhfaW9yZW1hcChhLCBzLCBmKQorI2RlZmluZSBfX2FyY2hfaW91bm1hcChhKQkgX19pb3AzeHhfaW91bm1hcChhKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC90aW1lLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzRkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvdGltZS5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBfSU9QMzNYX1RJTUVfSF8KKyNkZWZpbmUgX0lPUDMzWF9USU1FX0hfCisjZGVmaW5lIElSUV9JT1BfVElNRVIwIElSUV9JT1AzM1hfVElNRVIwCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZW50cnktbWFjcm8uUwppbmRleCAxNmUxZTYxLi4xMWQ1MTJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9lbnRyeS1tYWNyby5TCkBAIC0xMiw2ICsxMiwxMiBAQAogCQkubWFjcm8gIGRpc2FibGVfZmlxCiAJCS5lbmRtCiAKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQkuZW5kbQorCisJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCQkuZW5kbQorCiAJCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAKIAkJbW92CVxpcnFuciwgIzB4MCAgICAgICAgICAgICAgQGNsZWFyIG91dCBpcnFuciBhcyBkZWZhdWx0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L2VudHJ5LW1hY3JvLlMKaW5kZXggODY3NzYxNi4uZWM5ZGQ2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvZW50cnktbWFjcm8uUwpAQCAtNSw2ICs1LDEyIEBACiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCisJCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkJLmVuZG0KKworCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkJLmVuZG0KKwogCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAJCWxkcglcaXJxbnIsID0oSVhQMjNYWF9JTlRDX1ZJUlQgKyBJWFAyM1hYX0lOVFJfSVJRX0VOQ19TVF9PRkZTRVQpCiAJCWxkcglcaXJxbnIsIFtcaXJxbnJdCUAgZ2V0IGludGVycnVwdCBudW1iZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvaXhkcDIzNTEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvaXhkcDIzNTEuaAppbmRleCA0YTI0ZjhmLi5kNWU4YTQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L2l4ZHAyMzUxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9peGRwMjM1MS5oCkBAIC00Niw3ICs0Niw3IEBACiAjZGVmaW5lIElYRFAyMzUxX1ZJUlRfTlZSQU1fQkFTRQlJWERQMjM1MV9CQl9BUkVBX0JBU0UoMHgwKQogI2RlZmluZSBJWERQMjM1MV9OVlJBTV9TSVpFCQkoMHgyMDAwMCkKIAotI2RlZmluZSBJWERQMjM1MV9WSVJUX01CX0lYRjExMDRfQkFTRQlJWERQMzI1MV9CQl9BUkVBX0JBU0UoMHgwMDAyMDAwMCkKKyNkZWZpbmUgSVhEUDIzNTFfVklSVF9NQl9JWEYxMTA0X0JBU0UJSVhEUDIzNTFfQkJfQVJFQV9CQVNFKDB4MDAwMjAwMDApCiAjZGVmaW5lIElYRFAyMzUxX1ZJUlRfQUREX1VBUlRfQkFTRQlJWERQMjM1MV9CQl9BUkVBX0JBU0UoMHgwMDAyNDBDMCkKICNkZWZpbmUgSVhEUDIzNTFfVklSVF9GSUNfQkFTRQkJSVhEUDIzNTFfQkJfQVJFQV9CQVNFKDB4MDAyMDAwMDApCiAjZGVmaW5lIElYRFAyMzUxX1ZJUlRfREIwX0JBU0UJCUlYRFAyMzUxX0JCX0FSRUFfQkFTRSgweDAwNDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2F2aWxhLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvYXZpbGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGZlYTBjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2F2aWxhLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9hdmlsYS5oCisgKgorICogR2F0ZXdvcmtzIEF2aWxhIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBNaWNoYWVsLUx1a2UgSm9uZXMgPG1sajI4QGNhbS5hYy51az4KKyAqCisgKiBCYXNlZCBvbiBpeGRwNDI1LmgKKyAqIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNCAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSF9fCisjZXJyb3IgIkRvIG5vdCBpbmNsdWRlIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPiIKKyNlbmRpZgorCisjZGVmaW5lCUFWSUxBX1NEQV9QSU4JCTcKKyNkZWZpbmUJQVZJTEFfU0NMX1BJTgkJNgorCisvKgorICogQVZJTEEgUENJIElSUXMKKyAqLworI2RlZmluZSBBVklMQV9QQ0lfTUFYX0RFVgk0CisjZGVmaW5lIExPRlRfUENJX01BWF9ERVYgICAgNgorI2RlZmluZSBBVklMQV9QQ0lfSVJRX0xJTkVTCTQKKworCisvKiBQQ0kgY29udHJvbGxlciBHUElPIHRvIElSUSBwaW4gbWFwcGluZ3MgKi8KKyNkZWZpbmUgQVZJTEFfUENJX0lOVEFfUElOCTExCisjZGVmaW5lIEFWSUxBX1BDSV9JTlRCX1BJTgkxMAorI2RlZmluZSBBVklMQV9QQ0lfSU5UQ19QSU4JOQorI2RlZmluZSBBVklMQV9QQ0lfSU5URF9QSU4JOAorCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2VudHJ5LW1hY3JvLlMKaW5kZXggMjdlMTI0MS4uZGFkYjU2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2VudHJ5LW1hY3JvLlMKQEAgLTEyLDYgKzEyLDEyIEBACiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCisJCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkJLmVuZG0KKworCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkJLmVuZG0KKwogCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAJCWxkcglcaXJxc3RhdCwgPShJWFA0WFhfSU5UQ19CQVNFX1ZJUlQrSVhQNFhYX0lDSVBfT0ZGU0VUKQogCQlsZHIJXGlycXN0YXQsIFtcaXJxc3RhdF0JCUAgZ2V0IGludGVycnVwdHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2hhcmR3YXJlLmgKaW5kZXggNmFjYjY5Yy4uODhmZDA4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2hhcmR3YXJlLmgKQEAgLTQyLDYgKzQyLDcgQEAKIAogLyogUGxhdGZvcm0gc3BlY2lmaWMgZGV0YWlscyAqLwogI2luY2x1ZGUgIml4ZHA0MjUuaCIKKyNpbmNsdWRlICJhdmlsYS5oIgogI2luY2x1ZGUgImNveW90ZS5oIgogI2luY2x1ZGUgInBycG1jMTEwMC5oIgogI2luY2x1ZGUgIm5zbHUyLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lycXMuaAppbmRleCBmMjRiNzYzLi5lNDRhNTYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnFzLmgKQEAgLTc5LDYgKzc5LDE1IEBACiAjZGVmaW5lCUlSUV9JWERQNDI1X1BDSV9JTlRECUlSUV9JWFA0WFhfR1BJTzgKIAogLyoKKyAqIEdhdGV3b3JrcyBBdmlsYSBib2FyZCBJUlFzCisgKi8KKyNkZWZpbmUJSVJRX0FWSUxBX1BDSV9JTlRBCUlSUV9JWFA0WFhfR1BJTzExCisjZGVmaW5lCUlSUV9BVklMQV9QQ0lfSU5UQglJUlFfSVhQNFhYX0dQSU8xMAorI2RlZmluZQlJUlFfQVZJTEFfUENJX0lOVEMJSVJRX0lYUDRYWF9HUElPOQorI2RlZmluZQlJUlFfQVZJTEFfUENJX0lOVEQJSVJRX0lYUDRYWF9HUElPOAorCisKKy8qCiAgKiBQclBNQzExMDAgQm9hcmQgSVJRcwogICovCiAjZGVmaW5lCUlSUV9QUlBNQzExMDBfUENJX0lOVEEJSVJRX0lYUDRYWF9HUElPMTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC91ZGMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC91ZGMuaAppbmRleCBkYmRlYzM2Zi4uNzliODUwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3VkYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC91ZGMuaApAQCAtNiwzICs2LDI1IEBACiAKIGV4dGVybiB2b2lkIGl4cDR4eF9zZXRfdWRjX2luZm8oc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvICppbmZvKTsKIAorc3RhdGljIGlubGluZSBpbnQgdWRjX2dwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZGNfZ3Bpb19pbml0X3ZidXModW5zaWduZWQgZ3BpbykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkY19ncGlvX2luaXRfcHVsbHVwKHVuc2lnbmVkIGdwaW8pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVkY19ncGlvX2dldCh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRjX2dwaW9fc2V0KHVuc2lnbmVkIGdwaW8sIGludCBpc19vbikKK3sKK30KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2VudHJ5LW1hY3JvLlMKaW5kZXggOGI2MzQyZC4uNjM0MTFkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9lbnRyeS1tYWNyby5TCkBAIC0xNCw2ICsxNCwxMiBAQAogCQkubWFjcm8gIGRpc2FibGVfZmlxCiAJCS5lbmRtCiAKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQkuZW5kbQorCisJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCQkuZW5kbQorCiAJCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAJCW1vdiAgICAgXGlycXN0YXQsICNpcnFfYmFzZV9hZGRyCQlAIFZpcnQgYWRkciBJUlEgcmVncwogCQlhZGQJXGlycXN0YXQsIFxpcnFzdGF0LCAjMHgwMDAwMTAwMAkJQCBTdGF0dXMgcmVnCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2VudHJ5LW1hY3JvLlMKaW5kZXggOWZjN2Y0OS4uNTAyNzAwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZW50cnktbWFjcm8uUwpAQCAtMjYsNiArMjYsMTIgQEAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQkuZW5kbQorCisJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCQkuZW5kbQorCiAJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKIAogYnJhbmNoX2lycV9saDdhNDAwOiBiIDEwMDBmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uZXR4L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uZXR4L2VudHJ5LW1hY3JvLlMKaW5kZXggNjU4ZGY0ZC4uODNhZDE4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbmV0eC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5ldHgvZW50cnktbWFjcm8uUwpAQCAtMjMsNiArMjMsMTIgQEAKIAkJLm1hY3JvICBkaXNhYmxlX2ZpcQogCQkuZW5kbQogCisJCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkJLmVuZG0KKworCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkJLmVuZG0KKwogCQkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAogCQltb3YJXGJhc2UsICNpb19wMnYoMHgwMDEwMDAwMCkKIAkJYWRkCVxiYXNlLCBcYmFzZSwgIzB4MDAwZmYwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2JvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkYzhmYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9ib2FyZC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvYm9hcmQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfQk9BUkRfSAorI2RlZmluZSBfX0FTTV9BUkNIX0JPQVJEX0gKKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNkZWZpbmUgYm9hcmRfaXNfYTltOTc1MGRldigpCShtYWNoaW5lX2lzX2NjOXA5MzYwZGV2KCkpCisKKyNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9CT0FSRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvY2xvY2suaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNzFhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvY2xvY2suaApAQCAtMCwwICsxLDM3IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2Nsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0NMT0NLX0gKKyNkZWZpbmUgX19BU01fQVJDSF9DTE9DS19ICisKK3N0YXRpYyBpbmxpbmUgdTMyIG5zOXh4eF9zeXN0ZW1jbG9jayh2b2lkKQoreworCS8qCisJICogVGhpcyBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBIWiAqIFRJTUVSQ0xPQ0tTRUxFQ1QgKGluIHRpbWUuYykKKwkgKi8KKwlyZXR1cm4gMzUzODk0NDAwOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IHUzMiBuczl4eHhfY3B1Y2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gbnM5eHh4X3N5c3RlbWNsb2NrKCkgLyAyOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IHUzMiBuczl4eHhfYWhiY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gbnM5eHh4X3N5c3RlbWNsb2NrKCkgLyA0OworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IHUzMiBuczl4eHhfYmJ1c2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIG5zOXh4eF9zeXN0ZW1jbG9jaygpIC8gODsKK30KKworI2VuZGlmIC8qIGlmbmRlZiBfX0FTTV9BUkNIX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIxYjkzZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvZGVidWctbWFjcm8uUworICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoLW5zOXh4eC9yZWdzLWJvYXJkLWE5bTk3NTBkZXYuaD4KKworCQkubWFjcm8JYWRkcnVhcnQscngKKwkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEKKwkJbGRyZXEJXHJ4LCA9TlM5WFhYX0NTeFNUQVRfUEhZUygwKQorCQlsZHJuZQlccngsID1pb19wMnYoTlM5WFhYX0NTeFNUQVRfUEhZUygwKSkKKwkJLmVuZG0KKworI2RlZmluZSBVQVJUX1NISUZUCTIKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2N2NiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvZG1hLmgKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9kbWEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAorCisjZW5kaWYgLyogaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY3YTE5OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvZW50cnktbWFjcm8uUworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLmg+CisKKwkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCQlsZHIJXGJhc2UsID1TWVNfSVNSQUREUgorCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgIyhTWVNfSVNBIC0gU1lTX0lTUkFERFIpXQorCQljbXAJXGlycXN0YXQsICMwCisJCWxkcm5lCVxpcnFuciwgW1xiYXNlXQorCQkuZW5kbQorCisJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODE5ZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2hhcmR3YXJlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorCisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorCisvKgorICogTmV0U2lsaWNvbiBOUzl4eHggaW50ZXJuYWwgbWFwcGluZzoKKyAqCisgKiBwaHlzaWNhbCAgICAgICAgICAgICAgICA8LS0+IHZpcnR1YWwKKyAqIDB4OTAwMDAwMDAgLSAweDkwNmZmZmZmIDwtLT4gMHhmOTAwMDAwMCAtIDB4Zjk2ZmZmZmYKKyAqIDB4YTAxMDAwMDAgLSAweGEwYWZmZmZmIDwtLT4gMHhmYTEwMDAwMCAtIDB4ZmFhZmZmZmYKKyAqLworI2RlZmluZSBpb19wMnYoeCkJKDB4ZjAwMDAwMDAgXAorCQkJICsgKCgoeCkgJiAweGYwMDAwMDAwKSA+PiA0KSBcCisJCQkgKyAoKHgpICYgMHgwMGZmZmZmZikpCisKKyNkZWZpbmUgaW9fdjJwKHgpCSgoKCh4KSAmIDB4MGYwMDAwMDApIDw8IDQpIFwKKwkJCSArICgoeCkgJiAweDAwZmZmZmZmKSkKKworI2RlZmluZSBfX1JFR0JJVChiaXQpCQkoKHUzMikxIDw8IChiaXQpKQorI2RlZmluZSBfX1JFR0JJVFMoaGJpdCwgbGJpdCkJKCgoKHUzMikxIDw8ICgoaGJpdCkgLSAobGJpdCkgKyAxKSkgLSAxKSA8PCAobGJpdCkpCisjZGVmaW5lIF9fUkVHVkFMKG1hc2ssIHZhbHVlKQkoKCh2YWx1ZSkgKiAoKG1hc2spICYgKC0obWFzaykpKSAmIChtYXNrKSkpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyMgIGRlZmluZSBfX1JFRyh4KQkoKigodm9sYXRpbGUgdTMyICopaW9fcDJ2KCh4KSkpKQorIyAgZGVmaW5lIF9fUkVHMih4LCB5KQkoKigodm9sYXRpbGUgdTMyICopaW9fcDJ2KCh4KSkgKyAoeSkpKQorCisjICBkZWZpbmUgX19SRUdCKHgpCSgqKCh2b2xhdGlsZSB1OCAqKWlvX3AydigoeCkpKSkKKyMgIGRlZmluZSBfX1JFR0IyKHgpCSgqKCh2b2xhdGlsZSB1OCAqKWlvX3AydigoeCkpICsgKHkpKSkKKworIyAgZGVmaW5lIFJFR1NFVCh2YXIsIHJlZywgZmllbGQsIHZhbHVlKQkJCQlcCisJKCh2YXIpID0gKCgodmFyKQkJCQkJCVwKKwkJICAgJiB+KHJlZyAjIyBfICMjIGZpZWxkICYgCQkJCVwKKwkJICAgICAgIH4gcmVnICMjIF8gIyMgZmllbGQgIyMgXyAjIyB2YWx1ZSkpCQlcCisJCSAgfCAocmVnICMjIF8gIyMgZmllbGQgIyMgXyAjIyB2YWx1ZSkpKQorCisjICBkZWZpbmUgUkVHU0VUSU0odmFyLCByZWcsIGZpZWxkLCB2YWx1ZSkJCQkJXAorCSgodmFyKSA9ICgoKHZhcikJCQkJCQlcCisJCSAgICYgfihyZWcgIyMgXyAjIyBmaWVsZCAmIAkJCQlcCisJCSAgICAgICB+KF9fUkVHVkFMKHJlZyAjIyBfICMjIGZpZWxkLCB2YWx1ZSkpKSkJCVwKKwkJICB8IChfX1JFR1ZBTChyZWcgIyMgXyAjIyBmaWVsZCwgdmFsdWUpKSkpCisKKyMgIGRlZmluZSBSRUdHRVQocmVnLCBmaWVsZCkJCQkJCQlcCisJKChyZWcgJiAocmVnICMjIF8gIyMgZmllbGQpKSAvIChmaWVsZCAmICgtZmllbGQpKSkKKworI2Vsc2UKKworIyAgZGVmaW5lIF9fUkVHKHgpCWlvX3Aydih4KQorIyAgZGVmaW5lIF9fUkVHMih4LCB5KQlpb19wMnYoKHgpICsgKHkpKQorCisjICBkZWZpbmUgX19SRUdCKHgpCV9fUkVHKCh4KSkKKyMgIGRlZmluZSBfX1JFR0IyKHgsIHkpCV9fUkVHMigoeCksICh5KSkKKworI2VuZGlmCisKKyNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmODJkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvaW8uaApAQCAtMCwwICsxLDIwIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L2lvLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgIDB4ZmZmZmZmZmYgLyogWFhYICovCisKKyNkZWZpbmUgX19pbyhhKSAgICAgICAgICgodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX21lbV9wY2koYSkgICAgKGEpCisjZGVmaW5lIF9fbWVtX2lzYShhKSAgICAoSU9fQkFTRSArIChhKSkKKworI2VuZGlmIC8qIGlmbmRlZiBfX0FTTV9BUkNIX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZDhkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvaXJxcy5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JUlFTX0gKKworI2RlZmluZSBJUlFfV0FUQ0hET0cJMAorI2RlZmluZSBJUlFfQUhCQlVTRVJSCTEKKyNkZWZpbmUgSVJRX0JCVVNBR0cJMgorLyogaXJxIDMgaXMgcmVzZXJ2ZWQgZm9yIE5TOTM2MCAqLworI2RlZmluZSBJUlFfRVRIUlgJNAorI2RlZmluZSBJUlFfRVRIVFgJNQorI2RlZmluZSBJUlFfRVRIUEhZCTYKKyNkZWZpbmUgSVJRX0xDRAkJNworI2RlZmluZSBJUlFfU0VSQlJYCTgKKyNkZWZpbmUgSVJRX1NFUkJUWAk5CisjZGVmaW5lIElSUV9TRVJBUlgJMTAKKyNkZWZpbmUgSVJRX1NFUkFUWAkxMQorI2RlZmluZSBJUlFfU0VSQ1JYCTEyCisjZGVmaW5lIElSUV9TRVJDVFgJMTMKKyNkZWZpbmUgSVJRX0kyQwkJMTQKKyNkZWZpbmUgSVJRX0JCVVNETUEJMTUKKyNkZWZpbmUgSVJRX1RJTUVSMAkxNgorI2RlZmluZSBJUlFfVElNRVIxCTE3CisjZGVmaW5lIElSUV9USU1FUjIJMTgKKyNkZWZpbmUgSVJRX1RJTUVSMwkxOQorI2RlZmluZSBJUlFfVElNRVI0CTIwCisjZGVmaW5lIElSUV9USU1FUjUJMjEKKyNkZWZpbmUgSVJRX1RJTUVSNgkyMgorI2RlZmluZSBJUlFfVElNRVI3CTIzCisjZGVmaW5lIElSUV9SVEMJCTI0CisjZGVmaW5lIElSUV9VU0JIT1NUCTI1CisjZGVmaW5lIElSUV9VU0JERVZJQ0UJMjYKKyNkZWZpbmUgSVJRX0lFRUUxMjg0CTI3CisjZGVmaW5lIElSUV9FWFQwCTI4CisjZGVmaW5lIElSUV9FWFQxCTI5CisjZGVmaW5lIElSUV9FWFQyCTMwCisjZGVmaW5lIElSUV9FWFQzCTMxCisKKyNkZWZpbmUgQkJVU19JUlEoaXJxKQkoMzIgKyBpcnEpCisKKyNkZWZpbmUgSVJRX0JCVVNfRE1BCQlCQlVTX0lSUSgwKQorI2RlZmluZSBJUlFfQkJVU19TRVJCUlgJCUJCVVNfSVJRKDIpCisjZGVmaW5lIElSUV9CQlVTX1NFUkJUWAkJQkJVU19JUlEoMykKKyNkZWZpbmUgSVJRX0JCVVNfU0VSQVJYCQlCQlVTX0lSUSg0KQorI2RlZmluZSBJUlFfQkJVU19TRVJBVFgJCUJCVVNfSVJRKDUpCisjZGVmaW5lIElSUV9CQlVTX1NFUkNSWAkJQkJVU19JUlEoNikKKyNkZWZpbmUgSVJRX0JCVVNfU0VSQ1RYCQlCQlVTX0lSUSg3KQorI2RlZmluZSBJUlFfQkJVU19TRVJEUlgJCUJCVVNfSVJRKDgpCisjZGVmaW5lIElSUV9CQlVTX1NFUkRUWAkJQkJVU19JUlEoOSkKKyNkZWZpbmUgSVJRX0JCVVNfSTJDCQlCQlVTX0lSUSgxMCkKKyNkZWZpbmUgSVJRX0JCVVNfMTI4NAkJQkJVU19JUlEoMTEpCisjZGVmaW5lIElSUV9CQlVTX1VUSUwJCUJCVVNfSVJRKDEyKQorI2RlZmluZSBJUlFfQkJVU19SVEMJCUJCVVNfSVJRKDEzKQorI2RlZmluZSBJUlFfQkJVU19VU0JIU1QJCUJCVVNfSVJRKDE0KQorI2RlZmluZSBJUlFfQkJVU19VU0JERVYJCUJCVVNfSVJRKDE1KQorI2RlZmluZSBJUlFfQkJVU19BSEJETUExCUJCVVNfSVJRKDI0KQorI2RlZmluZSBJUlFfQkJVU19BSEJETUEyCUJCVVNfSVJRKDI1KQorCisvKgorICogdGhlc2UgSW50ZXJydXB0cyBhcmUgc3BlY2lmaWMgZm9yIHRoZSBhOW05NzUwZGV2IGJvYXJkLgorICogVGhleSBhcmUgZ2VuZXJhdGVkIGJ5IGFuIEZQR0EgdGhhdCBpbnRlcnJ1cHRzIHRoZSBDUFUgb24KKyAqIElSUV9FWFQyCisgKi8KKyNkZWZpbmUgRlBHQV9JUlEoaXJxKQkoNjQgKyBpcnEpCisKKyNkZWZpbmUgSVJRX0ZQR0FfVUFSVEEJCUZQR0FfSVJRKDApCisjZGVmaW5lIElSUV9GUEdBX1VBUlRCCQlGUEdBX0lSUSgxKQorI2RlZmluZSBJUlFfRlBHQV9VQVJUQwkJRlBHQV9JUlEoMikKKyNkZWZpbmUgSVJRX0ZQR0FfVUFSVEQJCUZQR0FfSVJRKDMpCisjZGVmaW5lIElSUV9GUEdBX1RPVUNICQlGUEdBX0lSUSg0KQorI2RlZmluZSBJUlFfRlBHQV9DRgkJRlBHQV9JUlEoNSkKKyNkZWZpbmUgSVJRX0ZQR0FfQ0FOMAkJRlBHQV9JUlEoNikKKyNkZWZpbmUgSVJRX0ZQR0FfQ0FOMQkJRlBHQV9JUlEoNykKKworI2RlZmluZSBOUl9JUlFTCTcyCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMTM0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvbWVtb3J5LmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9tZW1vcnkuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKy8qIHggaW4gWzAuLjNdICovCisjZGVmaW5lIE5TOVhYWF9DU3hTVEFUX1BIWVMoeCkJVUwoKCh4KSArIDQpIDw8IDI4KQorCisjZGVmaW5lIE5TOVhYWF9DUzBTVEFUX0xFTkdUSAlVTCgweDEwMDApCisjZGVmaW5lIE5TOVhYWF9DUzFTVEFUX0xFTkdUSAlVTCgweDEwMDApCisjZGVmaW5lIE5TOVhYWF9DUzJTVEFUX0xFTkdUSAlVTCgweDEwMDApCisjZGVmaW5lIE5TOVhYWF9DUzNTVEFUX0xFTkdUSAlVTCgweDEwMDApCisKKyNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpIF9fdmlydF90b19waHlzKHgpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2YzEwNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3Byb2Nlc3Nvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9BUkNIX1BST0NFU1NPUl9ICisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjZGVmaW5lIHByb2Nlc3Nvcl9pc19uczkzNjAoKQkobWFjaGluZV9pc19jYzlwOTM2MGRldigpKQorCisjZW5kaWYgLyogaWZuZGVmIF9fQVNNX0FSQ0hfUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9yZWdzLWJidS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3MtYmJ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2MjY5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9yZWdzLWJidS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcmVncy1iYnUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU0JCVV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU0JCVV9ICisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogQkJ1cyBVdGlsaXR5ICovCisKKy8qIEdQSU8gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBCQlVfR0MoeCkJX19SRUcyKDB4OTA2MDAwMGMsICh4KSkKKworI2VuZGlmIC8qIGlmbmRlZiBfX0FTTV9BUkNIX1JFR1NCQlVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3MtYm9hcmQtYTltOTc1MGRldi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3MtYm9hcmQtYTltOTc1MGRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZGM1MzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvcmVncy1ib2FyZC1hOW05NzUwZGV2LmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9yZWdzLWJvYXJkLWE5bTk3NTBkZXYuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBEaWdpIEludGVybmF0aW9uYWwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU0JPQVJEQTlNOTc1MF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU0JPQVJEQTlNOTc1MF9ICisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2RlZmluZSBGUEdBX1VBUlRBX0JBU0UJaW9fcDJ2KE5TOVhYWF9DU3hTVEFUX1BIWVMoMCkpCisjZGVmaW5lIEZQR0FfVUFSVEJfQkFTRQlpb19wMnYoTlM5WFhYX0NTeFNUQVRfUEhZUygwKSArIDB4MDgpCisjZGVmaW5lIEZQR0FfVUFSVENfQkFTRQlpb19wMnYoTlM5WFhYX0NTeFNUQVRfUEhZUygwKSArIDB4MTApCisjZGVmaW5lIEZQR0FfVUFSVERfQkFTRQlpb19wMnYoTlM5WFhYX0NTeFNUQVRfUEhZUygwKSArIDB4MTgpCisKKyNkZWZpbmUgRlBHQV9JRVIJX19SRUdCKE5TOVhYWF9DU3hTVEFUX1BIWVMoMCkgKyAweDUwKQorI2RlZmluZSBGUEdBX0lTUglfX1JFR0IoTlM5WFhYX0NTeFNUQVRfUEhZUygwKSArIDB4NjApCisKKyNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9SRUdTQk9BUkRBOU05NzUwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9yZWdzLW1lbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3MtbWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkODQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9yZWdzLW1lbS5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3MtbWVtLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NNRU1fSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NNRU1fSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1lbW9yeSBNb2R1bGUgKi8KKworLyogQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBNRU1fQ1RSTAlfX1JFRygweGEwNzAwMDAwKQorCisvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUVNX1NUQVQJX19SRUcoMHhhMDcwMDAwNCkKKworLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBNRU1fQ09ORglfX1JFRygweGEwNzAwMDA4KQorCisvKiBEeW5hbWljIE1lbW9yeSBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIE1FTV9ETUNUUkwJX19SRUcoMHhhMDcwMDAyMCkKKworLyogRHluYW1pYyBNZW1vcnkgUmVmcmVzaCBUaW1lciAqLworI2RlZmluZSBNRU1fRE1SVAlfX1JFRygweGEwNzAwMDI0KQorCisvKiBEeW5hbWljIE1lbW9yeSBSZWFkIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUVNX0RNUkMJX19SRUcoMHhhMDcwMDAyOCkKKworLyogRHluYW1pYyBNZW1vcnkgUHJlY2hhcmdlIENvbW1hbmQgUGVyaW9kICh0UlApICovCisjZGVmaW5lIE1FTV9ETVBDUAlfX1JFRygweGEwNzAwMDMwKQorCisvKiBEeW5hbWljIE1lbW9yeSBBY3RpdmUgdG8gUHJlY2hhcmdlIENvbW1hbmQgUGVyaW9kICh0UkFTKSAqLworI2RlZmluZSBNRU1fRE1BUENQCV9fUkVHKDB4YTA3MDAwMzQpCisKKy8qIER5bmFtaWMgTWVtb3J5IFNlbGYtUmVmcmVzaCBFeGl0IFRpbWUgKHRTUkVYKSAqLworI2RlZmluZSBNRU1fRE1TUkVUCV9fUkVHKDB4YTA3MDAwMzgpCisKKy8qIER5bmFtaWMgTWVtb3J5IExhc3QgRGF0YSBPdXQgdG8gQWN0aXZlIFRpbWUgKHRBUFIpICovCisjZGVmaW5lIE1FTV9ETUxET0FUCV9fUkVHKDB4YTA3MDAwM2MpCisKKy8qIER5bmFtaWMgTWVtb3J5IERhdGEtaW4gdG8gQWN0aXZlIENvbW1hbmQgVGltZSAodERBTCBvciBUQVBXKSAqLworI2RlZmluZSBNRU1fRE1ESUFDVAlfX1JFRygweGEwNzAwMDQwKQorCisvKiBEeW5hbWljIE1lbW9yeSBXcml0ZSBSZWNvdmVyeSBUaW1lICh0V1IsIHREUEwsIHRSV0wsIHRSREwpICovCisjZGVmaW5lIE1FTV9ETVdSVAlfX1JFRygweGEwNzAwMDQ0KQorCisvKiBEeW5hbWljIE1lbW9yeSBBY3RpdmUgdG8gQWN0aXZlIENvbW1hbmQgUGVyaW9kICh0UkMpICovCisjZGVmaW5lIE1FTV9ETUFBQ1AJX19SRUcoMHhhMDcwMDA0OCkKKworLyogRHluYW1pYyBNZW1vcnkgQXV0byBSZWZyZXNoIFBlcmlvZCwgYW5kIEF1dG8gUmVmcmVzaCB0byBBY3RpdmUgQ29tbWFuZCBQZXJpb2QgKHRSRkMpICovCisjZGVmaW5lIE1FTV9ETUFSUAlfX1JFRygweGEwNzAwMDRjKQorCisvKiBEeW5hbWljIE1lbW9yeSBFeGl0IFNlbGYtUmVmcmVzaCB0byBBY3RpdmUgQ29tbWFuZCAodFhTUikgKi8KKyNkZWZpbmUgTUVNX0RNRVNSQUMJX19SRUcoMHhhMDcwMDA1MCkKKworLyogRHluYW1pYyBNZW1vcnkgQWN0aXZlIEJhbmsgQSB0byBBY3RpdmUgQiBUaW1lICh0UlJEKSAqLworI2RlZmluZSBNRU1fRE1BQkFBQlQJX19SRUcoMHhhMDcwMDA1NCkKKworLyogRHluYW1pYyBNZW1vcnkgTG9hZCBNb2RlIHJlZ2lzdGVyIHRvIEFjdGl2ZSBDb21tYW5kIFRpbWUgKHRNUkQpICovCisjZGVmaW5lIE1FTV9ETUxNQUNUCV9fUkVHKDB4YTA3MDAwNTgpCisKKy8qIFN0YXRpYyBNZW1vcnkgRXh0ZW5kZWQgV2FpdCAqLworI2RlZmluZSBNRU1fU01FVwlfX1JFRygweGEwNzAwMDgwKQorCisvKiBEeW5hbWljIE1lbW9yeSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIHggKi8KKyNkZWZpbmUgTUVNX0RNQ09ORih4KSAJX19SRUcyKDB4YTA3MDAxMDAsICh4KSA8PCAzKQorCisvKiBEeW5hbWljIE1lbW9yeSBSQVMgYW5kIENBUyBEZWxheSB4ICovCisjZGVmaW5lIE1FTV9ETVJDRCh4KQlfX1JFRzIoMHhhMDcwMDEwNCwgKHgpIDw8IDMpCisKKy8qIFN0YXRpYyBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciB4ICovCisjZGVmaW5lIE1FTV9TTUMoeCkJX19SRUcyKDB4YTA3MDAyMDAsICh4KSA8PCAzKQorCisvKiBTdGF0aWMgTWVtb3J5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgeDogV3JpdGUgcHJvdGVjdCAqLworI2RlZmluZSBNRU1fU01DX1dTTUMJCV9fUkVHQklUKDIwKQorI2RlZmluZSBNRU1fU01DX1dTTUNfT0ZGCQlfX1JFR1ZBTChNRU1fU01DX1dTTUMsIDApCisjZGVmaW5lIE1FTV9TTUNfV1NNQ19PTgkJCV9fUkVHVkFMKE1FTV9TTUNfV1NNQywgMSkKKworLyogU3RhdGljIE1lbW9yeSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIHg6IEJ1ZmZlciBlbmFibGUgKi8KKyNkZWZpbmUgTUVNX1NNQ19CU01DCQlfX1JFR0JJVCgxOSkKKyNkZWZpbmUgTUVNX1NNQ19CU01DX09GRgkJX19SRUdWQUwoTUVNX1NNQ19CU01DLCAwKQorI2RlZmluZSBNRU1fU01DX0JTTUNfT04JCQlfX1JFR1ZBTChNRU1fU01DX0JTTUMsIDEpCisKKy8qIFN0YXRpYyBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciB4OiBFeHRlbmRlZCBXYWl0ICovCisjZGVmaW5lIE1FTV9TTUNfRVcJCV9fUkVHQklUKDgpCisjZGVmaW5lIE1FTV9TTUNfRVdfT0ZGCQkJX19SRUdWQUwoTUVNX1NNQ19FVywgMCkKKyNkZWZpbmUgTUVNX1NNQ19FV19PTgkJCV9fUkVHVkFMKE1FTV9TTUNfRVcsIDEpCisKKy8qIFN0YXRpYyBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciB4OiBCeXRlIGxhbmUgc3RhdGUgKi8KKyNkZWZpbmUgTUVNX1NNQ19QQgkJX19SRUdCSVQoNykKKyNkZWZpbmUgTUVNX1NNQ19QQl8wCQkJX19SRUdWQUwoTUVNX1NNQ19QQiwgMCkKKyNkZWZpbmUgTUVNX1NNQ19QQl8xCQkJX19SRUdWQUwoTUVNX1NNQ19QQiwgMSkKKworLyogU3RhdGljIE1lbW9yeSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIHg6IENoaXAgc2VsZWN0IHBvbGFyaXR5ICovCisjZGVmaW5lIE1FTV9TTUNfUEMJCV9fUkVHQklUKDYpCisjZGVmaW5lIE1FTV9TTUNfUENfQUwJCQlfX1JFR1ZBTChNRU1fU01DX1BDLCAwKQorI2RlZmluZSBNRU1fU01DX1BDX0FICQkJX19SRUdWQUwoTUVNX1NNQ19QQywgMSkKKworLyogc3RhdGljIG1lbW9yeSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHg6IHBhZ2UgbW9kZSovCisjZGVmaW5lIE1FTV9TTUNfUE0JCV9fUkVHQklUKDMpCisjZGVmaW5lIE1FTV9TTUNfUE1fRElTCQkJX19SRUdWQUwoTUVNX1NNQ19QTSwgMCkKKyNkZWZpbmUgTUVNX1NNQ19QTV9BU1lOQwkJX19SRUdWQUwoTUVNX1NNQ19QTSwgMSkKKworLyogc3RhdGljIG1lbW9yeSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHg6IE1lbW9yeSB3aWR0aCAqLworI2RlZmluZSBNRU1fU01DX01XCQlfX1JFR0JJVFMoMSwgMCkKKyNkZWZpbmUgTUVNX1NNQ19NV184CQkJX19SRUdWQUwoTUVNX1NNQ19NVywgMCkKKyNkZWZpbmUgTUVNX1NNQ19NV18xNgkJCV9fUkVHVkFMKE1FTV9TTUNfTVcsIDEpCisjZGVmaW5lIE1FTV9TTUNfTVdfMzIJCQlfX1JFR1ZBTChNRU1fU01DX01XLCAyKQorCisvKiBTdGF0aWMgTWVtb3J5IFdyaXRlIEVuYWJsZSBEZWxheSB4ICovCisjZGVmaW5lIE1FTV9TTVdFRCh4KQlfX1JFRzIoMHhhMDcwMDIwNCwgKHgpIDw8IDMpCisKKy8qIFN0YXRpYyBNZW1vcnkgT3V0cHV0IEVuYWJsZSBEZWxheSB4ICovCisjZGVmaW5lIE1FTV9TTU9FRCh4KQlfX1JFRzIoMHhhMDcwMDIwOCwgKHgpIDw8IDMpCisKKy8qIFN0YXRpYyBNZW1vcnkgUmVhZCBEZWxheSB4ICovCisjZGVmaW5lIE1FTV9TTVJEKHgpCV9fUkVHMigweGEwNzAwMjBjLCAoeCkgPDwgMykKKworLyogU3RhdGljIE1lbW9yeSBQYWdlIE1vZGUgUmVhZCBEZWxheSAwICovCisjZGVmaW5lIE1FTV9TTVBNUkQoeCkJX19SRUcyKDB4YTA3MDAyMTAsICh4KSA8PCAzKQorCisvKiBTdGF0aWMgTWVtb3J5IFdyaXRlIERlbGF5ICovCisjZGVmaW5lIE1FTV9TTVdEKHgpCV9fUkVHMigweGEwNzAwMjE0LCAoeCkgPDwgMykKKworLyogU3RhdGljIE1lbW9yeSBUdXJuIFJvdW5kIERlbGF5IHggKi8KKyNkZWZpbmUgTUVNX1NXVCh4KQlfX1JFRzIoMHhhMDcwMDIxOCwgKHgpIDw8IDMpCisKKyNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9SRUdTTUVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9yZWdzLXN5cy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2MmE1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9yZWdzLXN5cy5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3JlZ3Mtc3lzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NTWVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NTWVNfSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIFN5c3RlbSBDb250cm9sIE1vZHVsZSAqLworCisvKiBBSEIgQXJiaXRlciBHZW4gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBTWVNfQUhCQUdFTkNPTkYJX19SRUcoMHhhMDkwMDAwMCkKKworLyogQlJDICovCisjZGVmaW5lIFNZU19CUkMoeCkJX19SRUcyKDB4YTA5MDAwMDQsICh4KSkKKworLyogVGltZXIgeCBSZWxvYWQgQ291bnQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1lTX1RSQyh4KQlfX1JFRzIoMHhhMDkwMDA0NCwgKHgpKQorCisvKiBUaW1lciB4IFJlYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1lTX1RSKHgpCV9fUkVHMigweGEwOTAwMDg0LCAoeCkpCisKKy8qIEludGVycnVwdCBWZWN0b3IgQWRkcmVzcyBSZWdpc3RlciBMZXZlbCB4ICovCisjZGVmaW5lIFNZU19JVkEoeCkJX19SRUcyKDB4YTA5MDAwYzQsICh4KSkKKworLyogSW50ZXJydXB0IENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCisjZGVmaW5lIFNZU19JQyh4KQlfX1JFRzIoMHhhMDkwMDE0NCwgKHgpKQorCisvKiBJU1JBRERSICovCisjZGVmaW5lIFNZU19JU1JBRERSCV9fUkVHKDB4YTA5MDAxNjQpCisKKy8qIEludGVycnVwdCBTdGF0dXMgQWN0aXZlICovCisjZGVmaW5lIFNZU19JU0EJCV9fUkVHKDB4YTA5MDAxNjgpCisKKy8qIEludGVycnVwdCBTdGF0dXMgUmF3ICovCisjZGVmaW5lIFNZU19JU1IJCV9fUkVHKDB4YTA5MDAxNmMpCisKKy8qIFRpbWVyIEludGVycnVwdCBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1lTX1RJUwkJX19SRUcoMHhhMDkwMDE3MCkKKworLyogUExMIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1lTX1BMTAkJX19SRUcoMHhhMDkwMDE4OCkKKworLyogUExMIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXI6IFBMTCBTVyBjaGFuZ2UgKi8KKyNkZWZpbmUgU1lTX1BMTF9TV0MJCV9fUkVHQklUKDE1KQorI2RlZmluZSBTWVNfUExMX1NXQ19OTwkJCV9fUkVHVkFMKFNZU19QTExfU1dDLCAwKQorI2RlZmluZSBTWVNfUExMX1NXQ19ZRVMJCQlfX1JFR1ZBTChTWVNfUExMX1NXQywgMSkKKworLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFNZU19UQyh4KQlfX1JFRzIoMHhhMDkwMDE5MCwgKHgpKQorCisvKiBUaW1lciB4IENvbnRyb2wgcmVnaXN0ZXI6IFRpbWVyIGVuYWJsZSAqLworI2RlZmluZSBTWVNfVEN4X1RFTgkJX19SRUdCSVQoMTUpCisjZGVmaW5lIFNZU19UQ3hfVEVOX0RJUwkJCV9fUkVHVkFMKFNZU19UQ3hfVEVOLCAxKQorI2RlZmluZSBTWVNfVEN4X1RFTl9FTgkJCV9fUkVHVkFMKFNZU19UQ3hfVEVOLCAxKQorCisvKiBUaW1lciB4IENvbnRyb2wgcmVnaXN0ZXI6IENQVSBkZWJ1ZyBtb2RlICovCisjZGVmaW5lIFNZU19UQ3hfVERCRwkJX19SRUdCSVQoMTApCisjZGVmaW5lIFNZU19UQ3hfVERCR19DT05UCQlfX1JFR1ZBTChTWVNfVEN4X1REQkcsIDApCisjZGVmaW5lIFNZU19UQ3hfVERCR19TVE9QCQlfX1JFR1ZBTChTWVNfVEN4X1REQkcsIDEpCisKKy8qIFRpbWVyIHggQ29udHJvbCByZWdpc3RlcjogSW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFNZU19UQ3hfSU5UQwkJX19SRUdCSVQoOSkKKyNkZWZpbmUgU1lTX1RDeF9JTlRDX1VOU0VUCQlfX1JFR1ZBTChTWVNfVEN4X0lOVEMsIDApCisjZGVmaW5lIFNZU19UQ3hfSU5UQ19TRVQJCV9fUkVHVkFMKFNZU19UQ3hfSU5UQywgMSkKKworLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiBUaW1lciBjbG9jayBzZWxlY3QgKi8KKyNkZWZpbmUgU1lTX1RDeF9UTENTCQlfX1JFR0JJVFMoOCwgNikKKyNkZWZpbmUgU1lTX1RDeF9UTENTX0NQVQkJX19SRUdWQUwoU1lTX1RDeF9UTENTLCAwKQkvKiBDUFUgY2xvY2sgKi8KKyNkZWZpbmUgU1lTX1RDeF9UTENTX0RJVjIJCV9fUkVHVkFMKFNZU19UQ3hfVExDUywgMSkJLyogQ1BVIGNsb2NrIC8gMiAqLworI2RlZmluZSBTWVNfVEN4X1RMQ1NfRElWNAkJX19SRUdWQUwoU1lTX1RDeF9UTENTLCAyKQkvKiBDUFUgY2xvY2sgLyA0ICovCisjZGVmaW5lIFNZU19UQ3hfVExDU19ESVY4CQlfX1JFR1ZBTChTWVNfVEN4X1RMQ1MsIDMpCS8qIENQVSBjbG9jayAvIDggKi8KKyNkZWZpbmUgU1lTX1RDeF9UTENTX0RJVjE2CQlfX1JFR1ZBTChTWVNfVEN4X1RMQ1MsIDQpCS8qIENQVSBjbG9jayAvIDE2ICovCisjZGVmaW5lIFNZU19UQ3hfVExDU19ESVYzMgkJX19SRUdWQUwoU1lTX1RDeF9UTENTLCA1KQkvKiBDUFUgY2xvY2sgLyAzMiAqLworI2RlZmluZSBTWVNfVEN4X1RMQ1NfRElWNjQJCV9fUkVHVkFMKFNZU19UQ3hfVExDUywgNikJLyogQ1BVIGNsb2NrIC8gNjQgKi8KKyNkZWZpbmUgU1lTX1RDeF9UTENTX0VYVAkJX19SRUdWQUwoU1lTX1RDeF9UTENTLCA3KQorCisvKiBUaW1lciB4IENvbnRyb2wgcmVnaXN0ZXI6IFRpbWVyIG1vZGUgKi8KKyNkZWZpbmUgU1lTX1RDeF9UTQkJX19SRUdCSVRTKDUsIDQpCisjZGVmaW5lIFNZU19UQ3hfVE1fSUVFCQkJX19SRUdWQUwoU1lTX1RDeF9UTSwgMCkJCS8qIEludGVybmFsIHRpbWVyIG9yIGV4dGVybmFsIGV2ZW50ICovCisjZGVmaW5lIFNZU19UQ3hfVE1fRUxMCQkJX19SRUdWQUwoU1lTX1RDeF9UTSwgMSkJCS8qIEV4dGVybmFsIGxvdy1sZXZlbCwgZ2F0ZWQgdGltZXIgKi8KKyNkZWZpbmUgU1lTX1RDeF9UTV9FSEwJCQlfX1JFR1ZBTChTWVNfVEN4X1RNLCAyKQkJLyogRXh0ZXJuYWwgaGlnaC1sZXZlbCwgZ2F0ZWQgdGltZXIgKi8KKyNkZWZpbmUgU1lTX1RDeF9UTV9DT05DQVQJCV9fUkVHVkFMKFNZU19UQ3hfVE0sIDMpCQkvKiBDb25jYXRlbmF0ZSB0aGUgbG93ZXIgdGltZXIuICovCisKKy8qIFRpbWVyIHggQ29udHJvbCByZWdpc3RlcjogSW50ZXJydXB0IHNlbGVjdCAqLworI2RlZmluZSBTWVNfVEN4X0lOVFMJCV9fUkVHQklUKDMpCisjZGVmaW5lIFNZU19UQ3hfSU5UU19ESVMJCV9fUkVHVkFMKFNZU19UQ3hfSU5UUywgMCkKKyNkZWZpbmUgU1lTX1RDeF9JTlRTX0VOCQkJX19SRUdWQUwoU1lTX1RDeF9JTlRTLCAxKQorCisvKiBUaW1lciB4IENvbnRyb2wgcmVnaXN0ZXI6IFVwL2Rvd24gc2VsZWN0ICovCisjZGVmaW5lIFNZU19UQ3hfVURTCQlfX1JFR0JJVCgyKQorI2RlZmluZSBTWVNfVEN4X1VEU19VUAkJCV9fUkVHVkFMKFNZU19UQ3hfVURTLCAwKQorI2RlZmluZSBTWVNfVEN4X1VEU19ET1dOCQlfX1JFR1ZBTChTWVNfVEN4X1VEUywgMSkKKworLyogVGltZXIgeCBDb250cm9sIHJlZ2lzdGVyOiAzMi0gb3IgMTYtYml0IHRpbWVyICovCisjZGVmaW5lIFNZU19UQ3hfVFNaCQlfX1JFR0JJVCgxKQorI2RlZmluZSBTWVNfVEN4X1RTWl8xNgkJCV9fUkVHVkFMKFNZU19UQ3hfVFNaLCAwKQorI2RlZmluZSBTWVNfVEN4X1RTWl8zMgkJCV9fUkVHVkFMKFNZU19UQ3hfVFNaLCAxKQorCisvKiBUaW1lciB4IENvbnRyb2wgcmVnaXN0ZXI6IFJlbG9hZCBlbmFibGUgKi8KKyNkZWZpbmUgU1lTX1RDeF9SRU4JCV9fUkVHQklUKDApCisjZGVmaW5lIFNZU19UQ3hfUkVOX0RJUwkJCV9fUkVHVkFMKFNZU19UQ3hfUkVOLCAwKQorI2RlZmluZSBTWVNfVEN4X1JFTl9FTgkJCV9fUkVHVkFMKFNZU19UQ3hfUkVOLCAxKQorCisvKiBTeXN0ZW0gTWVtb3J5IENoaXAgU2VsZWN0IHggRHluYW1pYyBNZW1vcnkgQmFzZSAqLworI2RlZmluZSBTWVNfU01DU0RNQih4KQlfX1JFRzIoMHhhMDkwMDFkMCwgKHgpIDw8IDEpCisKKy8qIFN5c3RlbSBNZW1vcnkgQ2hpcCBTZWxlY3QgeCBEeW5hbWljIE1lbW9yeSBNYXNrICovCisjZGVmaW5lIFNZU19TTUNTRE1NKHgpCV9fUkVHMigweGEwOTAwMWQ0LCAoeCkgPDwgMSkKKworLyogU3lzdGVtIE1lbW9yeSBDaGlwIFNlbGVjdCB4IFN0YXRpYyBNZW1vcnkgQmFzZSAqLworI2RlZmluZSBTWVNfU01DU1NNQih4KQlfX1JFRzIoMHhhMDkwMDFmMCwgKHgpIDw8IDEpCisKKy8qIFN5c3RlbSBNZW1vcnkgQ2hpcCBTZWxlY3QgeCBTdGF0aWMgTWVtb3J5IEJhc2U6IENoaXAgc2VsZWN0IHggYmFzZSAqLworI2RlZmluZSBTWVNfU01DU1NNQl9DU3hCCV9fUkVHQklUUygzMSwgMTIpCisKKy8qIFN5c3RlbSBNZW1vcnkgQ2hpcCBTZWxlY3QgeCBTdGF0aWMgTWVtb3J5IE1hc2sgKi8KKyNkZWZpbmUgU1lTX1NNQ1NTTU0oeCkJX19SRUcyKDB4YTA5MDAxZjQsICh4KSA8PCAxKQorCisvKiBTeXN0ZW0gTWVtb3J5IENoaXAgU2VsZWN0IHggU3RhdGljIE1lbW9yeSBNYXNrOiBDaGlwIHNlbGVjdCB4IG1hc2sgKi8KKyNkZWZpbmUgU1lTX1NNQ1NTTU1fQ1N4TQlfX1JFR0JJVFMoMzEsIDEyKQorCisvKiBTeXN0ZW0gTWVtb3J5IENoaXAgU2VsZWN0IHggU3RhdGljIE1lbW9yeSBNYXNrOiBDaGlwIHNlbGVjdCB4IGVuYWJsZSAqLworI2RlZmluZSBTWVNfU01DU1NNTV9DU0V4CV9fUkVHQklUKDApCisjZGVmaW5lIFNZU19TTUNTU01NX0NTRXhfRElTCQlfX1JFR1ZBTChTWVNfU01DU1NNTV9DU0V4LCAwKQorI2RlZmluZSBTWVNfU01DU1NNTV9DU0V4X0VOCQlfX1JFR1ZBTChTWVNfU01DU1NNTV9DU0V4LCAxKQorCisvKiBHZW5lcmFsIHB1cnBvc2UsIHVzZXItZGVmaW5lZCBJRCByZWdpc3RlciAqLworI2RlZmluZSBTWVNfR0VOSUQJX19SRUcoMHhhMDkwMDIxMCkKKworLyogRXh0ZXJuYWwgSW50ZXJydXB0IHggQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBTWVNfRUlDKHgpCV9fUkVHMigweGEwOTAwMjE0LCAoeCkpCisKKy8qIEV4dGVybmFsIEludGVycnVwdCB4IENvbnRyb2wgcmVnaXN0ZXI6IFN0YXR1cyAqLworI2RlZmluZSBTWVNfRUlDX1NUUwkJX19SRUdCSVQoMykKKworLyogRXh0ZXJuYWwgSW50ZXJydXB0IHggQ29udHJvbCByZWdpc3RlcjogQ2xlYXIgKi8KKyNkZWZpbmUgU1lTX0VJQ19DTFIJCV9fUkVHQklUKDIpCisKKy8qIEV4dGVybmFsIEludGVycnVwdCB4IENvbnRyb2wgcmVnaXN0ZXI6IFBvbGFyaXR5ICovCisjZGVmaW5lIFNZU19FSUNfUExUWQkJX19SRUdCSVQoMSkKKyNkZWZpbmUgU1lTX0VJQ19QTFRZX0FICQkJX19SRUdWQUwoU1lTX0VJQ19QTFRZLCAwKQorI2RlZmluZSBTWVNfRUlDX1BMVFlfQUwJCQlfX1JFR1ZBTChTWVNfRUlDX1BMVFksIDEpCisKKy8qIEV4dGVybmFsIEludGVycnVwdCB4IENvbnRyb2wgcmVnaXN0ZXI6IExldmVsIGVkZ2UgKi8KKyNkZWZpbmUgU1lTX0VJQ19MVkVERwkJX19SRUdCSVQoMCkKKyNkZWZpbmUgU1lTX0VJQ19MVkVER19MRVZFTAkJX19SRUdWQUwoU1lTX0VJQ19MVkVERywgMCkKKyNkZWZpbmUgU1lTX0VJQ19MVkVER19FREdFCQlfX1JFR1ZBTChTWVNfRUlDX0xWRURHLCAxKQorCisjZW5kaWYgLyogaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU1NZU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjZDRkMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC9zeXN0ZW0uaApAQCAtMCwwICsxLDM0IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3N5c3RlbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9BUkNIX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC1uczl4eHgvcmVncy1zeXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJY3B1X2RvX2lkbGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBTWVNfUExMID4+IDE2OworCVJFR1NFVChyZWcsIFNZU19QTEwsIFNXQywgWUVTKTsKKwlTWVNfUExMID0gcmVnOworCisJQlVHKCk7Cit9CisKKyNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzc2Y2JkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3RpbWV4LmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC90aW1leC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKy8qCisgKiB2YWx1ZSBmb3IgQ0xPQ0tfVElDS19SQVRFIHN0b2xlbiBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdGltZXguaC4KKyAqIFNlZSB0aGVyZSBmb3IgYW4gZXhwbGFuYXRpb24uCisgKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFICAgICAgICAgMTIwMDAwMDAKKworI2VuZGlmIC8qIGlmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MWNhN2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1uczl4eHgvdW5jb21wcmVzcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IERpZ2kgSW50ZXJuYXRpb25hbCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKworc3RhdGljIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJdm9sYXRpbGUgdTggKmJhc2UgPSAodm9sYXRpbGUgdTggKikweDQwMDAwMDAwOworCWludCB0ID0gMHgxMDAwMDsKKworCWRvIHsKKwkJaWYgKGJhc2VbNV0gJiAweDIwKSB7CisJCQliYXNlWzBdID0gYzsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoLS10KTsKK30KKworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorCitzdGF0aWMgdm9pZCBmbHVzaCh2b2lkKQoreworCS8qIG5vdGhpbmcgKi8KK30KKworI2VuZGlmIC8qIGlmbmRlZiBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbnM5eHh4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzY2I2ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC92bWFsbG9jLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLW5zOXh4eC92bWFsbG9jLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAoMHhmMDAwMDAwMCkKKworI2VuZGlmIC8qIGlmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TCmluZGV4IDBmZmIxMTguLmM5MGRmZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMKQEAgLTI5LDYgKzI5LDEyIEBACiAgCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KIAorCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCS5lbmRtCisKKwkJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJCS5lbmRtCisKIAkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAogCQlsZHIJXGJhc2UsID1JT19BRERSRVNTKE9NQVBfSUgxX0JBU0UpCiAJCWxkcglcaXJxbnIsIFtcYmFzZSwgI0lSUV9JVFJfUkVHX09GRlNFVF0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZW50cnktbWFjcm8uUwppbmRleCBjMWMxOThlLi5mMTE3MzE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9lbnRyeS1tYWNyby5TCkBAIC0yOCw2ICsyOCwxMiBAQAogCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KIAorCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCS5lbmRtCisKKwkJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJCS5lbmRtCisKIAkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAogLyogZGVjb2RlIHRoZSBNSUMgaW50ZXJydXB0IG51bWJlcnMgKi8KIAkJbGRyCVxiYXNlLCA9SU9fQUREUkVTUyhQTlg0MDA4X0lOVENUUkxNSUNfQkFTRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2VudHJ5LW1hY3JvLlMKaW5kZXggNDk4NWUzMy4uMWQ1ZmJiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2VudHJ5LW1hY3JvLlMKQEAgLTEzLDYgKzEzLDEyIEBACiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCisJCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkJLmVuZG0KKworCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkJLmVuZG0KKwogCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAjaWZkZWYgQ09ORklHX1BYQTI3eAogCQltcmMJcDYsIDAsIFxpcnFzdGF0LCBjMCwgYzAsIDAJCUAgSUNJUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9ncGlvLmgKaW5kZXggZTY3YzIzOC4uM2QzNDhhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2dwaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvZ3Bpby5oCkBAIC0yNSwxMCArMjUsOCBAQAogI2RlZmluZSBfX0FTTV9BUkNIX1BYQV9HUElPX0gKIAogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKIHsKQEAgLTQyLDI2ICs0MCwzNiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQogewotCWlmIChncGlvID4gUFhBX0xBU1RfR1BJTykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcHhhX2dwaW9fbW9kZShncGlvIHwgR1BJT19JTik7CisJcmV0dXJuIHB4YV9ncGlvX21vZGUoZ3BpbyB8IEdQSU9fSU4pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbykKIHsKLQlpZiAoZ3BpbyA+IFBYQV9MQVNUX0dQSU8pCi0JCXJldHVybiAtRUlOVkFMOwotCXB4YV9ncGlvX21vZGUoZ3BpbyB8IEdQSU9fT1VUKTsKKwlyZXR1cm4gcHhhX2dwaW9fbW9kZShncGlvIHwgR1BJT19PVVQpOwogfQogCi0vKiBSRVZJU0lUIHRoZXNlIG1hY3JvcyBhcmUgY29ycmVjdCwgYnV0IHN1ZmZlciBjb2RlIGV4cGxvc2lvbgotICogZm9yIG5vbi1jb25zdGFudCBwYXJhbWV0ZXJzLiAgUHJvdmlkZSBvdXQtbGluZSB2ZXJzaW9ucyB0b28uCi0gKi8KLSNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUoZ3BpbykgXAotCShHUExSKGdwaW8pICYgR1BJT19iaXQoZ3BpbykpCitzdGF0aWMgaW5saW5lIGludCBfX2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIEdQTFIoZ3BpbykgJiBHUElPX2JpdChncGlvKTsKK30KIAotI2RlZmluZSBncGlvX3NldF92YWx1ZShncGlvLHZhbHVlKSBcCi0JKCh2YWx1ZSkgPyAoR1BTUihncGlvKSA9IEdQSU9fYml0KGdwaW8pKTooR1BDUihncGlvKSA9IEdQSU9fYml0KGdwaW8pKSkKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUoZ3BpbykJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKGdwaW8pID8JCVwKKwkgX19ncGlvX2dldF92YWx1ZShncGlvKSA6CQlcCisJIHB4YV9ncGlvX2dldF92YWx1ZShncGlvKSkKKworc3RhdGljIGlubGluZSB2b2lkIF9fZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCWlmICh2YWx1ZSkKKwkJR1BTUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOworCWVsc2UKKwkJR1BDUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOworfQorCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlKGdwaW8sdmFsdWUpCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKGdwaW8pID8JCVwKKwkgX19ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSkgOglcCisJIHB4YV9ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSkpCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CQkJLyogY2Fuc2xlZXAgd3JhcHBlcnMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaAppbmRleCAzZTcwYmQ5Li5lMmJkYzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaApAQCAtNjUsNyArNjUsMTcgQEAKIC8qCiAgKiBIYW5keSByb3V0aW5lIHRvIHNldCBHUElPIGFsdGVybmF0ZSBmdW5jdGlvbnMKICAqLwotZXh0ZXJuIHZvaWQgcHhhX2dwaW9fbW9kZSggaW50IGdwaW9fbW9kZSApOworZXh0ZXJuIGludCBweGFfZ3Bpb19tb2RlKCBpbnQgZ3Bpb19tb2RlICk7CisKKy8qCisgKiBSZXR1cm4gR1BJTyBsZXZlbCwgbm9uemVybyBtZWFucyBoaWdoLCB6ZXJvIGlzIGxvdworICovCitleHRlcm4gaW50IHB4YV9ncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKTsKKworLyoKKyAqIFNldCBvdXRwdXQgR1BJTyBsZXZlbAorICovCitleHRlcm4gdm9pZCBweGFfZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKIAogLyoKICAqIFJvdXRpbmUgdG8gZW5hYmxlIG9yIGRpc2FibGUgQ0tFTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAppbmRleCBlMjRmNmI2Li5hZWM4MzViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaApAQCAtNDYzLDkgKzQ2Myw2IEBACiAgKiBTZXJpYWwgQXVkaW8gQ29udHJvbGxlcgogICovCiAKLS8qIEZJWE1FOiBUaGlzIGNsYXNoIHdpdGggU0ExMTExIGRlZmluZXMgKi8KLSNpZm5kZWYgX0FTTV9BUkNIX1NBMTExMQotCiAjZGVmaW5lIFNBQ1IwCQlfX1JFRygweDQwNDAwMDAwKSAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0FDUjEJCV9fUkVHKDB4NDA0MDAwMDQpICAvKiBTZXJpYWwgQXVkaW8gSSAyIFMvTVNCLUp1c3RpZmllZCBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNBU1IwCQlfX1JFRygweDQwNDAwMDBDKSAgLyogU2VyaWFsIEF1ZGlvIEkgMiBTL01TQi1KdXN0aWZpZWQgSW50ZXJmYWNlIGFuZCBGSUZPIFN0YXR1cyBSZWdpc3RlciAqLwpAQCAtNDc0LDggKzQ3MSw4IEBACiAjZGVmaW5lIFNBRElWCQlfX1JFRygweDQwNDAwMDYwKSAgLyogQXVkaW8gQ2xvY2sgRGl2aWRlciBSZWdpc3Rlci4gKi8KICNkZWZpbmUgU0FEUgkJX19SRUcoMHg0MDQwMDA4MCkgIC8qIFNlcmlhbCBBdWRpbyBEYXRhIFJlZ2lzdGVyIChUWCBhbmQgUlggRklGTyBhY2Nlc3MgUmVnaXN0ZXIpLiAqLwogCi0jZGVmaW5lIFNBQ1IwX1JGVEgoeCkJKHggPDwgMTIpCS8qIFJ4IEZJRk8gSW50ZXJydXB0IG9yIERNQSBUcmlnZ2VyIFRocmVzaG9sZCAqLwotI2RlZmluZSBTQUNSMF9URlRIKHgpCSh4IDw8IDgpCS8qIFR4IEZJRk8gSW50ZXJydXB0IG9yIERNQSBUcmlnZ2VyIFRocmVzaG9sZCAqLworI2RlZmluZSBTQUNSMF9SRlRIKHgpCSgoeCkgPDwgMTIpCS8qIFJ4IEZJRk8gSW50ZXJydXB0IG9yIERNQSBUcmlnZ2VyIFRocmVzaG9sZCAqLworI2RlZmluZSBTQUNSMF9URlRIKHgpCSgoeCkgPDwgOCkJLyogVHggRklGTyBJbnRlcnJ1cHQgb3IgRE1BIFRyaWdnZXIgVGhyZXNob2xkICovCiAjZGVmaW5lIFNBQ1IwX1NUUkYJKDEgPDwgNSkJLyogRklGTyBTZWxlY3QgZm9yIEVGV1IgU3BlY2lhbCBGdW5jdGlvbiAqLwogI2RlZmluZSBTQUNSMF9FRldSCSgxIDw8IDQpCS8qIEVuYWJsZSBFRldSIEZ1bmN0aW9uICAqLwogI2RlZmluZSBTQUNSMF9SU1QJKDEgPDwgMykJLyogRklGTywgaTJzIFJlZ2lzdGVyIFJlc2V0ICovCkBAIC01MDMsOCArNTAwLDYgQEAKICNkZWZpbmUgU0FJTVJfUkZTCSgxIDw8IDQpCS8qIEVuYWJsZSBSeCBGSUZPIFNlcnZpY2UgSW50ZXJydXB0ICovCiAjZGVmaW5lIFNBSU1SX1RGUwkoMSA8PCAzKQkvKiBFbmFibGUgVHggRklGTyBTZXJ2aWNlIEludGVycnVwdCAqLwogCi0jZW5kaWYKLQogLyoKICAqIEFDOTcgQ29udHJvbGxlciByZWdpc3RlcnMKICAqLwpAQCAtMTY4MiwxNSArMTY3NywxOCBAQAogI2RlZmluZSBTU1NSX1BJTlQJCSgxIDw8IDE4KQkvKiBQZXJpcGhlcmFsIFRyYWlsaW5nIEJ5dGUgSW50ZXJydXB0ICovCiAKICNkZWZpbmUgU1NQU1BfRlNSVAkJKDEgPDwgMjUpCS8qIEZyYW1lIFN5bmMgUmVsYXRpdmUgVGltaW5nICovCi0jZGVmaW5lIFNTUFNQX0RNWVNUT1AoeCkJKHggPDwgMjMpCS8qIER1bW15IFN0b3AgKi8KLSNkZWZpbmUgU1NQU1BfU0ZSTVdEVEgoeCkJKHggPDwgMTYpCS8qIFNlcmlhbCBGcmFtZSBXaWR0aCAqLwotI2RlZmluZSBTU1BTUF9TRlJNRExZKHgpCSh4IDw8IDkpCS8qIFNlcmlhbCBGcmFtZSBEZWxheSAqLwotI2RlZmluZSBTU1BTUF9ETVlTVFJUKHgpCSh4IDw8IDcpCS8qIER1bW15IFN0YXJ0ICovCi0jZGVmaW5lIFNTUFNQX1NUUlRETFkoeCkJKHggPDwgNCkJLyogU3RhcnQgRGVsYXkgKi8KKyNkZWZpbmUgU1NQU1BfRE1ZU1RPUCh4KQkoKHgpIDw8IDIzKQkvKiBEdW1teSBTdG9wICovCisjZGVmaW5lIFNTUFNQX1NGUk1XRFRIKHgpCSgoeCkgPDwgMTYpCS8qIFNlcmlhbCBGcmFtZSBXaWR0aCAqLworI2RlZmluZSBTU1BTUF9TRlJNRExZKHgpCSgoeCkgPDwgOSkJLyogU2VyaWFsIEZyYW1lIERlbGF5ICovCisjZGVmaW5lIFNTUFNQX0RNWVNUUlQoeCkJKCh4KSA8PCA3KQkvKiBEdW1teSBTdGFydCAqLworI2RlZmluZSBTU1BTUF9TVFJURExZKHgpCSgoeCkgPDwgNCkJLyogU3RhcnQgRGVsYXkgKi8KICNkZWZpbmUgU1NQU1BfRVREUwkJCSgxIDw8IDMpCS8qIEVuZCBvZiBUcmFuc2ZlciBkYXRhIFN0YXRlICovCiAjZGVmaW5lIFNTUFNQX1NGUk1QCQkJKDEgPDwgMikJLyogU2VyaWFsIEZyYW1lIFBvbGFyaXR5ICovCi0jZGVmaW5lIFNTUFNQX1NDTU9ERSh4KQkJKHggPDwgMCkJLyogU2VyaWFsIEJpdCBSYXRlIENsb2NrIE1vZGUgKi8KKyNkZWZpbmUgU1NQU1BfU0NNT0RFKHgpCQkoKHgpIDw8IDApCS8qIFNlcmlhbCBCaXQgUmF0ZSBDbG9jayBNb2RlICovCiAKKyNkZWZpbmUgU1NBQ0RfU0NEQgkJKDEgPDwgMykJLyogU1NQU1lTQ0xLIERpdmlkZXIgQnlwYXNzICovCisjZGVmaW5lIFNTQUNEX0FDUFMoeCkJCSgoeCkgPDwgNCkJLyogQXVkaW8gY2xvY2sgUExMIHNlbGVjdCAqLworI2RlZmluZSBTU0FDRF9BQ0RTKHgpCQkoKHgpIDw8IDApCS8qIEF1ZGlvIGNsb2NrIGRpdmlkZXIgc2VsZWN0ICovCiAKICNkZWZpbmUgU1NDUjBfUDEJX19SRUcoMHg0MTAwMDAwMCkgIC8qIFNTUCBQb3J0IDEgQ29udHJvbCBSZWdpc3RlciAwICovCiAjZGVmaW5lIFNTQ1IxX1AxCV9fUkVHKDB4NDEwMDAwMDQpICAvKiBTU1AgUG9ydCAxIENvbnRyb2wgUmVnaXN0ZXIgMSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3VkYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3VkYy5oCmluZGV4IDY0NjQ4MGQuLjhiYzZmOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS91ZGMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdWRjLmgKQEAgLTksMyArOSwzMyBAQAogCiBleHRlcm4gdm9pZCBweGFfc2V0X3VkY19pbmZvKHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyAqaW5mbyk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IHVkY19ncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBJUlFfR1BJTyhncGlvICYgR1BJT19NRF9NQVNLX05SKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkY19ncGlvX2luaXRfdmJ1cyh1bnNpZ25lZCBncGlvKQoreworCXB4YV9ncGlvX21vZGUoKGdwaW8gJiBHUElPX01EX01BU0tfTlIpIHwgR1BJT19JTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZGNfZ3Bpb19pbml0X3B1bGx1cCh1bnNpZ25lZCBncGlvKQoreworCXB4YV9ncGlvX21vZGUoKGdwaW8gJiBHUElPX01EX01BU0tfTlIpIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfTE9XKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdWRjX2dwaW9fZ2V0KHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIChHUExSKGdwaW8pICYgR1BJT19iaXQoZ3BpbykpICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZGNfZ3Bpb19zZXQodW5zaWduZWQgZ3BpbywgaW50IGlzX29uKQoreworCWludCBtYXNrID0gR1BJT19iaXQoZ3Bpbyk7CisKKwlpZiAoaXNfb24pCisJCUdQU1IoZ3BpbykgPSBtYXNrOworCWVsc2UKKwkJR1BDUihncGlvKSA9IG1hc2s7Cit9CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9lbnRyeS1tYWNyby5TCmluZGV4IDFhNmVlYzguLjEzODgzOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvZW50cnktbWFjcm8uUwpAQCAtMTMsNiArMTMsMTIgQEAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQkuZW5kbQorCisJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCQkuZW5kbQorCiAJCS8qCiAJCSAqIFRoZSBpbnRlcnJ1cHQgbnVtYmVyaW5nIHNjaGVtZSBpcyBkZWZpbmVkIGluIHRoZQogCQkgKiBpbnRlcnJ1cHQgY29udHJvbGxlciBzcGVjLiAgVG8gd2l0OgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2hhcmR3YXJlLmgKaW5kZXggOWNhNzZkYy4uYWE3OGZlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9oYXJkd2FyZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KIAogLyogbWFjcm8gdG8gZ2V0IGF0IElPIHNwYWNlIHdoZW4gcnVubmluZyB2aXJ0dWFsbHkgKi8KLSNkZWZpbmUgSU9fQUREUkVTUyh4KQkJKCgoeCkgJiAweDBmZmZmZmZmKSArICgoKHgpID4+IDQpICYgMHgwZjAwMDAwMCkgKyAweGYwMDAwMDAwKQorI2RlZmluZSBJT19BRERSRVNTKHgpCQkoKCgoeCkgJiAweDBlZmZmZmZmKSB8ICgoKHgpID4+IDQpICYgMHgwZjAwMDAwMCkpICsgMHhmMDAwMDAwMCkKICNkZWZpbmUgX19pb19hZGRyZXNzKG4pCQlfX2lvKElPX0FERFJFU1MobikpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvaXJxcy5oCmluZGV4IGMxNjIyM2MuLjVhNWRiNTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9pcnFzLmgKQEAgLTY1LDYgKzY1LDIxIEBACiAjZGVmaW5lIElSUV9BQUNJCQkoSVJRX0dJQ19TVEFSVCArIElOVF9BQUNJKQogI2RlZmluZSBJUlFfRVRICQkJKElSUV9HSUNfU1RBUlQgKyBJTlRfRVRIKQogI2RlZmluZSBJUlFfVVNCCQkJKElSUV9HSUNfU1RBUlQgKyBJTlRfVVNCKQorI2RlZmluZSBJUlFfUE1VX0NQVTAJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9DUFUwKQorI2RlZmluZSBJUlFfUE1VX0NQVTEJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9DUFUxKQorI2RlZmluZSBJUlFfUE1VX0NQVTIJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9DUFUyKQorI2RlZmluZSBJUlFfUE1VX0NQVTMJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9DUFUzKQorI2RlZmluZSBJUlFfUE1VX1NDVTAJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9TQ1UwKQorI2RlZmluZSBJUlFfUE1VX1NDVTEJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9TQ1UxKQorI2RlZmluZSBJUlFfUE1VX1NDVTIJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9TQ1UyKQorI2RlZmluZSBJUlFfUE1VX1NDVTMJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9TQ1UzKQorI2RlZmluZSBJUlFfUE1VX1NDVTQJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9TQ1U0KQorI2RlZmluZSBJUlFfUE1VX1NDVTUJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9TQ1U1KQorI2RlZmluZSBJUlFfUE1VX1NDVTYJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9TQ1U2KQorI2RlZmluZSBJUlFfUE1VX1NDVTcJCShJUlFfR0lDX1NUQVJUICsgSU5UX1BNVV9TQ1U3KQorCisjZGVmaW5lIElSUV9FQl9JUlExCQkoSVJRX0dJQ19TVEFSVCArIElOVF9FQl9JUlExKQorI2RlZmluZSBJUlFfRUJfSVJRMgkJKElSUV9HSUNfU1RBUlQgKyBJTlRfRUJfSVJRMikKIAogI2RlZmluZSBJUlFNQVNLX1dET0dJTlQJCUlOVE1BU0tfV0RPR0lOVAogI2RlZmluZSBJUlFNQVNLX1NPRlRJTlQJCUlOVE1BU0tfU09GVElOVApAQCAtMTAzLDQgKzExOCw0IEBACiAjZGVmaW5lIElSUU1BU0tfRVRICQlJTlRNQVNLX0VUSAogI2RlZmluZSBJUlFNQVNLX1VTQgkJSU5UTUFTS19VU0IKIAotI2RlZmluZSBOUl9JUlFTCQkJKElSUV9HSUNfU1RBUlQgKyA2NCkKKyNkZWZpbmUgTlJfSVJRUwkJCShJUlFfR0lDX1NUQVJUICsgOTYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvcGxhdGZvcm0uaAppbmRleCAxOGQ3YzE4Li42ZTBlYWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3BsYXRmb3JtLmgKQEAgLTIwNywxMSArMjA3LDI1IEBACiAjZGVmaW5lIFJFQUxWSUVXX0dJQ19DUFVfQkFTRSAgICAgICAgIDB4MTAwNDAwMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBDUFUgaW50ZXJmYWNlICovCiAjZGVmaW5lIFJFQUxWSUVXX0dJQ19ESVNUX0JBU0UgICAgICAgIDB4MTAwNDEwMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBkaXN0cmlidXRvciAqLwogI2Vsc2UKKyNpZmRlZiBDT05GSUdfUkVBTFZJRVdfTVBDT1JFX1JFVkIKICNkZWZpbmUgUkVBTFZJRVdfTVBDT1JFX1NDVV9CQVNFCTB4MTAxMDAwMDAJLyogIFNDVSByZWdpc3RlcnMgKi8KICNkZWZpbmUgUkVBTFZJRVdfR0lDX0NQVV9CQVNFCQkweDEwMTAwMTAwCS8qIEdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgQ1BVIGludGVyZmFjZSAqLwogI2RlZmluZSBSRUFMVklFV19UV0RfQkFTRQkJMHgxMDEwMDcwMAogI2RlZmluZSBSRUFMVklFV19UV0RfU0laRQkJMHgwMDAwMDEwMAogI2RlZmluZSBSRUFMVklFV19HSUNfRElTVF9CQVNFCQkweDEwMTAxMDAwCS8qIEdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgZGlzdHJpYnV0b3IgKi8KKyNkZWZpbmUgUkVBTFZJRVdfTVBDT1JFX0wyMjBfQkFTRQkweDEwMTAyMDAwCS8qIEwyMjAgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJFQUxWSUVXX01QQ09SRV9TWVNfUExEX0NUUkwxIDB4RDgJCS8qICBSZWdpc3RlciBvZmZzZXQgZm9yIE1QQ29yZSBzeXNjdGwgKi8KKyNlbHNlCisjZGVmaW5lIFJFQUxWSUVXX01QQ09SRV9TQ1VfQkFTRSAgICAgIDB4MUYwMDAwMDAJLyogIFNDVSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUkVBTFZJRVdfR0lDX0NQVV9CQVNFICAgICAgICAgMHgxRjAwMDEwMAkvKiBHZW5lcmljIGludGVycnVwdCBjb250cm9sbGVyIENQVSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUkVBTFZJRVdfVFdEX0JBU0UgICAgICAgICAgICAgMHgxRjAwMDcwMAorI2RlZmluZSBSRUFMVklFV19UV0RfU0laRSAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFJFQUxWSUVXX0dJQ19ESVNUX0JBU0UgICAgICAgIDB4MUYwMDEwMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBkaXN0cmlidXRvciAqLworI2RlZmluZSBSRUFMVklFV19NUENPUkVfTDIyMF9CQVNFICAgICAweDFGMDAyMDAwCS8qIEwyMjAgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJFQUxWSUVXX01QQ09SRV9TWVNfUExEX0NUUkwxIDB4NzQJCS8qICBSZWdpc3RlciBvZmZzZXQgZm9yIE1QQ29yZSBzeXNjdGwgKi8KKyNlbmRpZgorI2RlZmluZSBSRUFMVklFV19HSUMxX0NQVV9CQVNFICAgICAgICAweDEwMDQwMDAwCS8qIEdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgQ1BVIGludGVyZmFjZSAqLworI2RlZmluZSBSRUFMVklFV19HSUMxX0RJU1RfQkFTRSAgICAgICAweDEwMDQxMDAwCS8qIEdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgZGlzdHJpYnV0b3IgKi8KICNlbmRpZgogI2RlZmluZSBSRUFMVklFV19TTUNfQkFTRSAgICAgICAgICAgICAweDEwMDgwMDAwCS8qIFNNQyAqLwogCS8qIFJlc2VydmVkIDB4MTAwOTAwMDAgLSAweDEwMEVGRkZGICovCkBAIC0zMDYsNyArMzIwLDExIEBACiAjZGVmaW5lIElOVF9VU0IJCQkJMjkJLyogVVNCIGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgSU5UX1RTUEVOSU5UCQkJMzAJLyogVG91Y2hzY3JlZW4gcGVuICovCiAjZGVmaW5lIElOVF9UU0tQQURJTlQJCQkzMQkvKiBUb3VjaHNjcmVlbiBrZXlwYWQgKi8KKwogI2Vsc2UKKworI2RlZmluZSBNQVhfR0lDX05SCQkJMgorCiAjZGVmaW5lIElOVF9BQUNJCQkJMAogI2RlZmluZSBJTlRfVElNRVJJTlQwXzEJCQkxCiAjZGVmaW5lIElOVF9USU1FUklOVDJfMwkJCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3NjdS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvc2N1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyOTM2NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3NjdS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTUFSTV9BUkNIX1NDVV9ICisjZGVmaW5lIF9fQVNNQVJNX0FSQ0hfU0NVX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisKKyNkZWZpbmUgU0NVX0JBU0UJUkVBTFZJRVdfTVBDT1JFX1NDVV9CQVNFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvZW50cnktbWFjcm8uUwppbmRleCBjOWU1Mzk1Li4wY2ZiODliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvZW50cnktbWFjcm8uUwpAQCAtMSwzICsxLDggQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZW50cnktbWFjcm8taW9tZC5TPgorCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkuZW5kbQorCisJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hdWRpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hdWRpby5oCmluZGV4IDY1ZTBhY2YuLjBhNjk3N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYXVkaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2F1ZGlvLmgKQEAgLTMxLDkgKzMxLDkgQEAKIAlpbnQJKCpzdXNwZW5kKShzdHJ1Y3QgczNjMjR4eF9paXNfb3BzICptZSk7CiAJaW50CSgqcmVzdW1lKShzdHJ1Y3QgczNjMjR4eF9paXNfb3BzICptZSk7CiAKLQlpbnQJKCpvcGVuKShzdHJ1Y3QgczNjMjR4eF9paXNfb3BzICptZSwgc25kX3BjbV9zdWJzdHJlYW1fdCAqc3RybSk7Ci0JaW50CSgqY2xvc2UpKHN0cnVjdCBzM2MyNHh4X2lpc19vcHMgKm1lLCBzbmRfcGNtX3N1YnN0cmVhbV90ICpzdHJtKTsKLQlpbnQJKCpwcmVwYXJlKShzdHJ1Y3QgczNjMjR4eF9paXNfb3BzICptZSwgc25kX3BjbV9zdWJzdHJlYW1fdCAqc3RybSwgc25kX3BjbV9ydW50aW1lX3QgKnJ0KTsKKwlpbnQJKCpvcGVuKShzdHJ1Y3QgczNjMjR4eF9paXNfb3BzICptZSwgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdHJtKTsKKwlpbnQJKCpjbG9zZSkoc3RydWN0IHMzYzI0eHhfaWlzX29wcyAqbWUsIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3RybSk7CisJaW50CSgqcHJlcGFyZSkoc3RydWN0IHMzYzI0eHhfaWlzX29wcyAqbWUsIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3RybSwgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnQpOwogfTsKIAogc3RydWN0IHMzYzI0eHhfcGxhdGRhdGFfaWlzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oCmluZGV4IDU4ZmZhN2IuLmM2ZThkOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kbWEuaApAQCAtNTEsMTMgKzUxLDE5IEBACiAJRE1BQ0hfVUFSVDBfU1JDMiwJLyogczNjMjQxMiBzZWNvbmQgdWFydCBzb3VyY2VzICovCiAJRE1BQ0hfVUFSVDFfU1JDMiwKIAlETUFDSF9VQVJUMl9TUkMyLAorCURNQUNIX1VBUlQzLAkJLyogczNjMjQ0MyBoYXMgZXh0cmEgdWFydCAqLworCURNQUNIX1VBUlQzX1NSQzIsCiAJRE1BQ0hfTUFYLAkJLyogdGhlIGVuZCBlbnRyeSAqLwogfTsKIAogI2RlZmluZSBETUFDSF9MT1dfTEVWRUwJKDE8PDI4KQkvKiB1c2UgdGhpcyB0byBzcGVjaWZpeSBoYXJkd2FyZSBjaCBubyAqLwogCiAvKiB3ZSBoYXZlIDQgZG1hIGNoYW5uZWxzICovCi0jZGVmaW5lIFMzQzI0MTBfRE1BX0NIQU5ORUxTICAgICAgICAoNCkKKyNpZm5kZWYgQ09ORklHX0NQVV9TM0MyNDQzCisjZGVmaW5lIFMzQzI0MTBfRE1BX0NIQU5ORUxTCQkoNCkKKyNlbHNlCisjZGVmaW5lIFMzQzI0MTBfRE1BX0NIQU5ORUxTCQkoNikKKyNlbmRpZgogCiAvKiB0eXBlcyAqLwogCkBAIC0zMjEsNiArMzI3LDcgQEAKICNkZWZpbmUgUzNDMjQxMF9ETUFfRENEU1QgICAgICAgKDB4MUMpCiAjZGVmaW5lIFMzQzI0MTBfRE1BX0RNQVNLVFJJRyAgICgweDIwKQogI2RlZmluZSBTM0MyNDEyX0RNQV9ETUFSRVFTRUwJKDB4MjQpCisjZGVmaW5lIFMzQzI0NDNfRE1BX0RNQVJFUVNFTAkoMHgyNCkKIAogI2RlZmluZSBTM0MyNDEwX0RJU1JDQ19JTkMJKDE8PDApCiAjZGVmaW5lIFMzQzI0MTBfRElTUkNDX0FQQgkoMTw8MSkKQEAgLTQxNSw0ICs0MjIsMzEgQEAKICNkZWZpbmUgUzNDMjQxMl9ETUFSRVFTRUxfVUFSVDJfMQlTM0MyNDEyX0RNQVJFUVNFTF9TUkMoMjQpCiAKICNlbmRpZgorCisjZGVmaW5lIFMzQzI0NDNfRE1BUkVRU0VMX1NSQyh4KQkoKHgpPDwxKQorCisjZGVmaW5lIFMzQzI0NDNfRE1BUkVRU0VMX0hXCQkoMSkKKworI2RlZmluZSBTM0MyNDQzX0RNQVJFUVNFTF9TUEkwVFgJUzNDMjQ0M19ETUFSRVFTRUxfU1JDKDApCisjZGVmaW5lIFMzQzI0NDNfRE1BUkVRU0VMX1NQSTBSWAlTM0MyNDQzX0RNQVJFUVNFTF9TUkMoMSkKKyNkZWZpbmUgUzNDMjQ0M19ETUFSRVFTRUxfU1BJMVRYCVMzQzI0NDNfRE1BUkVRU0VMX1NSQygyKQorI2RlZmluZSBTM0MyNDQzX0RNQVJFUVNFTF9TUEkxUlgJUzNDMjQ0M19ETUFSRVFTRUxfU1JDKDMpCisjZGVmaW5lIFMzQzI0NDNfRE1BUkVRU0VMX0kyU1RYCQlTM0MyNDQzX0RNQVJFUVNFTF9TUkMoNCkKKyNkZWZpbmUgUzNDMjQ0M19ETUFSRVFTRUxfSTJTUlgJCVMzQzI0NDNfRE1BUkVRU0VMX1NSQyg1KQorI2RlZmluZSBTM0MyNDQzX0RNQVJFUVNFTF9USU1FUgkJUzNDMjQ0M19ETUFSRVFTRUxfU1JDKDkpCisjZGVmaW5lIFMzQzI0NDNfRE1BUkVRU0VMX1NESQkJUzNDMjQ0M19ETUFSRVFTRUxfU1JDKDEwKQorI2RlZmluZSBTM0MyNDQzX0RNQVJFUVNFTF9YRFJFUTAJUzNDMjQ0M19ETUFSRVFTRUxfU1JDKDE3KQorI2RlZmluZSBTM0MyNDQzX0RNQVJFUVNFTF9YRFJFUTEJUzNDMjQ0M19ETUFSRVFTRUxfU1JDKDE4KQorI2RlZmluZSBTM0MyNDQzX0RNQVJFUVNFTF9VQVJUMF8wCVMzQzI0NDNfRE1BUkVRU0VMX1NSQygxOSkKKyNkZWZpbmUgUzNDMjQ0M19ETUFSRVFTRUxfVUFSVDBfMQlTM0MyNDQzX0RNQVJFUVNFTF9TUkMoMjApCisjZGVmaW5lIFMzQzI0NDNfRE1BUkVRU0VMX1VBUlQxXzAJUzNDMjQ0M19ETUFSRVFTRUxfU1JDKDIxKQorI2RlZmluZSBTM0MyNDQzX0RNQVJFUVNFTF9VQVJUMV8xCVMzQzI0NDNfRE1BUkVRU0VMX1NSQygyMikKKyNkZWZpbmUgUzNDMjQ0M19ETUFSRVFTRUxfVUFSVDJfMAlTM0MyNDQzX0RNQVJFUVNFTF9TUkMoMjMpCisjZGVmaW5lIFMzQzI0NDNfRE1BUkVRU0VMX1VBUlQyXzEJUzNDMjQ0M19ETUFSRVFTRUxfU1JDKDI0KQorI2RlZmluZSBTM0MyNDQzX0RNQVJFUVNFTF9VQVJUM18wCVMzQzI0NDNfRE1BUkVRU0VMX1NSQygyNSkKKyNkZWZpbmUgUzNDMjQ0M19ETUFSRVFTRUxfVUFSVDNfMQlTM0MyNDQzX0RNQVJFUVNFTF9TUkMoMjYpCisjZGVmaW5lIFMzQzI0NDNfRE1BUkVRU0VMX1BDTU9VVAlTM0MyNDQzX0RNQVJFUVNFTF9TUkMoMjcpCisjZGVmaW5lIFMzQzI0NDNfRE1BUkVRU0VMX1BDTUlOIAlTM0MyNDQzX0RNQVJFUVNFTF9TUkMoMjgpCisjZGVmaW5lIFMzQzI0NDNfRE1BUkVRU0VMX01JQ0lOCQlTM0MyNDQzX0RNQVJFUVNFTF9TUkMoMjkpCisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2VudHJ5LW1hY3JvLlMKaW5kZXggMWViNGU2Yi4uYmJlYzBhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZW50cnktbWFjcm8uUwpAQCAtMjIsNiArMjIsMTIgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKIAkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAKIAkJbW92CVxiYXNlLCAjUzNDMjRYWF9WQV9JUlEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9ncGlvLmgKaW5kZXggNjdiOGI5YWIuLmQ0N2FlNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZ3Bpby5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9ncGlvLmgKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZ3Bpby5oCiAgKgotICogUzNDMjQwMCBHUElPIHdyYXBwZXJzIGZvciBhcmNoLW5ldXRyYWwgR1BJTyBjYWxscworICogUzNDMjQxMCBHUElPIHdyYXBwZXJzIGZvciBhcmNoLW5ldXRyYWwgR1BJTyBjYWxscwogICoKICAqIFdyaXR0ZW4gYnkgUGhpbGlwcCBaYWJlbCA8cGhpbGlwcC56YWJlbEBnbWFpbC5jb20+CiAgKgpAQCAtMjEsMTQgKzIxLDEyIEBACiAgKgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9QWEFfR1BJT19ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfUFhBX0dQSU9fSAorI2lmbmRlZiBfX0FTTV9BUkNIX1MzQzI0MTBfR1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUzNDMjQxMF9HUElPX0gKIAotI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKIHsKQEAgLTU3LDggKzU1LDExIEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CQkJLyogY2Fuc2xlZXAgd3JhcHBlcnMgKi8KIAotLyogRklYTUUgb3IgbWF5YmUgczNjMjQwMF9ncGlvX2dldGlycSgpIC4uLiAqLworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQwMAorI2RlZmluZSBncGlvX3RvX2lycShncGlvKQkJczNjMjQwMF9ncGlvX2dldGlycShncGlvKQorI2Vsc2UKICNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJCXMzYzI0MTBfZ3Bpb19nZXRpcnEoZ3BpbykKKyNlbmRpZgogCiAvKiBGSVhNRSBpbXBsZW1lbnQgaXJxX3RvX2dwaW8oKSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaXJxcy5oCmluZGV4IDRiN2NmZjQuLmM3OWNiMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaXJxcy5oCkBAIC0zNCwxMCArMzQsMTAgQEAKICNkZWZpbmUgSVJRX0VJTlQ0dDcgICAgUzNDMjQxMF9JUlEoNCkJICAgIC8qIDIwICovCiAjZGVmaW5lIElSUV9FSU5UOHQyMyAgIFMzQzI0MTBfSVJRKDUpCiAjZGVmaW5lIElSUV9SRVNFUlZFRDYgIFMzQzI0MTBfSVJRKDYpCSAgICAvKiBmb3IgczNjMjQxMCAqLwotI2RlZmluZSBJUlFfQ0FNICAgICAgICBTM0MyNDEwX0lSUSg2KQkgICAgLyogZm9yIHMzYzI0NDAgKi8KKyNkZWZpbmUgSVJRX0NBTSAgICAgICAgUzNDMjQxMF9JUlEoNikJICAgIC8qIGZvciBzM2MyNDQwLHMzYzI0NDMgKi8KICNkZWZpbmUgSVJRX0JBVFRfRkxUICAgUzNDMjQxMF9JUlEoNykKICNkZWZpbmUgSVJRX1RJQ0sgICAgICAgUzNDMjQxMF9JUlEoOCkJICAgIC8qIDI0ICovCi0jZGVmaW5lIElSUV9XRFQJICAgICAgIFMzQzI0MTBfSVJRKDkpCisjZGVmaW5lIElSUV9XRFQJICAgICAgIFMzQzI0MTBfSVJRKDkpCSAgICAvKiBXRFQvQUM5NyBmb3IgczNjMjQ0MyAqLwogI2RlZmluZSBJUlFfVElNRVIwICAgICBTM0MyNDEwX0lSUSgxMCkKICNkZWZpbmUgSVJRX1RJTUVSMSAgICAgUzNDMjQxMF9JUlEoMTEpCiAjZGVmaW5lIElSUV9USU1FUjIgICAgIFMzQzI0MTBfSVJRKDEyKQpAQCAtNDUsNyArNDUsNyBAQAogI2RlZmluZSBJUlFfVElNRVI0ICAgICBTM0MyNDEwX0lSUSgxNCkKICNkZWZpbmUgSVJRX1VBUlQyICAgICAgUzNDMjQxMF9JUlEoMTUpCiAjZGVmaW5lIElSUV9MQ0QJICAgICAgIFMzQzI0MTBfSVJRKDE2KQkgICAgLyogMzIgKi8KLSNkZWZpbmUgSVJRX0RNQTAgICAgICAgUzNDMjQxMF9JUlEoMTcpCisjZGVmaW5lIElSUV9ETUEwICAgICAgIFMzQzI0MTBfSVJRKDE3KQkgICAgLyogSVJRX0RNQSBmb3IgczNjMjQ0MyAqLwogI2RlZmluZSBJUlFfRE1BMSAgICAgICBTM0MyNDEwX0lSUSgxOCkKICNkZWZpbmUgSVJRX0RNQTIgICAgICAgUzNDMjQxMF9JUlEoMTkpCiAjZGVmaW5lIElSUV9ETUEzICAgICAgIFMzQzI0MTBfSVJRKDIwKQpAQCAtOTQsMjkgKzk0LDYzIEBACiAgKiB0aGVzZSBuZWVkIHRvIGJlIG9yZGVyZWQgaW4gbnVtYmVyIG9mIGFwcGVhcmFuY2UgaW4gdGhlCiAgKiBTVUJTUkMgbWFzayByZWdpc3RlcgogKi8KLSNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgwICBTM0MyNDEwX0lSUSg1NCkgICAvKiA3MCAqLwotI2RlZmluZSBJUlFfUzNDVUFSVF9UWDAgIFMzQzI0MTBfSVJRKDU1KSAgIC8qIDcxICovCi0jZGVmaW5lIElSUV9TM0NVQVJUX0VSUjAgUzNDMjQxMF9JUlEoNTYpCiAKLSNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgxICBTM0MyNDEwX0lSUSg1NykKLSNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgxICBTM0MyNDEwX0lSUSg1OCkKLSNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMSBTM0MyNDEwX0lSUSg1OSkKKyNkZWZpbmUgUzNDMjQxMF9JUlFTVUIoeCkJUzNDMjQxMF9JUlEoKHgpKzU0KQogCi0jZGVmaW5lIElSUV9TM0NVQVJUX1JYMiAgUzNDMjQxMF9JUlEoNjApCi0jZGVmaW5lIElSUV9TM0NVQVJUX1RYMiAgUzNDMjQxMF9JUlEoNjEpCi0jZGVmaW5lIElSUV9TM0NVQVJUX0VSUjIgUzNDMjQxMF9JUlEoNjIpCisjZGVmaW5lIElSUV9TM0NVQVJUX1JYMAkJUzNDMjQxMF9JUlFTVUIoMCkJLyogNzAgKi8KKyNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgwCQlTM0MyNDEwX0lSUVNVQigxKQorI2RlZmluZSBJUlFfUzNDVUFSVF9FUlIwCVMzQzI0MTBfSVJRU1VCKDIpCiAKLSNkZWZpbmUgSVJRX1RDCQkgUzNDMjQxMF9JUlEoNjMpCi0jZGVmaW5lIElSUV9BREMJCSBTM0MyNDEwX0lSUSg2NCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgxCQlTM0MyNDEwX0lSUVNVQigzKQkvKiA3MyAqLworI2RlZmluZSBJUlFfUzNDVUFSVF9UWDEJCVMzQzI0MTBfSVJRU1VCKDQpCisjZGVmaW5lIElSUV9TM0NVQVJUX0VSUjEJUzNDMjQxMF9JUlFTVUIoNSkKKworI2RlZmluZSBJUlFfUzNDVUFSVF9SWDIJCVMzQzI0MTBfSVJRU1VCKDYpCS8qIDc2ICovCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMgkJUzNDMjQxMF9JUlFTVUIoNykKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMglTM0MyNDEwX0lSUVNVQig4KQorCisjZGVmaW5lIElSUV9UQwkJCVMzQzI0MTBfSVJRU1VCKDkpCisjZGVmaW5lIElSUV9BREMJCQlTM0MyNDEwX0lSUVNVQigxMCkKIAogLyogZXh0cmEgaXJxcyBmb3IgczNjMjQ0MCAqLwogCi0jZGVmaW5lIElSUV9TM0MyNDQwX0NBTV9DCVMzQzI0MTBfSVJRKDY1KQotI2RlZmluZSBJUlFfUzNDMjQ0MF9DQU1fUAlTM0MyNDEwX0lSUSg2NikKLSNkZWZpbmUgSVJRX1MzQzI0NDBfV0RUCQlTM0MyNDEwX0lSUSg2NykKLSNkZWZpbmUgSVJRX1MzQzI0NDBfQUM5NwlTM0MyNDEwX0lSUSg2OCkKKyNkZWZpbmUgSVJRX1MzQzI0NDBfQ0FNX0MJUzNDMjQxMF9JUlFTVUIoMTEpCS8qIFMzQzI0NDMgdG9vICovCisjZGVmaW5lIElSUV9TM0MyNDQwX0NBTV9QCVMzQzI0MTBfSVJRU1VCKDEyKQkvKiBTM0MyNDQzIHRvbyAqLworI2RlZmluZSBJUlFfUzNDMjQ0MF9XRFQJCVMzQzI0MTBfSVJRU1VCKDEzKQorI2RlZmluZSBJUlFfUzNDMjQ0MF9BQzk3CVMzQzI0MTBfSVJRU1VCKDE0KQogCisvKiBpcnFzIGZvciBzM2MyNDQzICovCisKKyNkZWZpbmUgSVJRX1MzQzI0NDNfRE1BCQlTM0MyNDEwX0lSUSgxNykJCS8qIElSUV9ETUExICovCisjZGVmaW5lIElSUV9TM0MyNDQzX1VBUlQzCVMzQzI0MTBfSVJRKDE4KQkJLyogSVJRX0RNQTIgKi8KKyNkZWZpbmUgSVJRX1MzQzI0NDNfQ0ZDT04JUzNDMjQxMF9JUlEoMTkpCQkvKiBJUlFfRE1BMyAqLworI2RlZmluZSBJUlFfUzNDMjQ0M19TREkxCVMzQzI0MTBfSVJRKDIwKQkJLyogSVJRX1NESSAqLworI2RlZmluZSBJUlFfUzNDMjQ0M19OQU5ECVMzQzI0MTBfSVJRKDI0KQkJLyogcmVzZXJ2ZWQgKi8KKworI2RlZmluZSBJUlFfUzNDMjQ0M19MQ0QxCVMzQzI0MTBfSVJRU1VCKDE0KQorI2RlZmluZSBJUlFfUzNDMjQ0M19MQ0QyCVMzQzI0MTBfSVJRU1VCKDE1KQorI2RlZmluZSBJUlFfUzNDMjQ0M19MQ0QzCVMzQzI0MTBfSVJRU1VCKDE2KQorI2RlZmluZSBJUlFfUzNDMjQ0M19MQ0Q0CVMzQzI0MTBfSVJRU1VCKDE3KQorCisjZGVmaW5lIElSUV9TM0MyNDQzX0RNQTAJUzNDMjQxMF9JUlFTVUIoMTgpCisjZGVmaW5lIElSUV9TM0MyNDQzX0RNQTEJUzNDMjQxMF9JUlFTVUIoMTkpCisjZGVmaW5lIElSUV9TM0MyNDQzX0RNQTIJUzNDMjQxMF9JUlFTVUIoMjApCisjZGVmaW5lIElSUV9TM0MyNDQzX0RNQTMJUzNDMjQxMF9JUlFTVUIoMjEpCisjZGVmaW5lIElSUV9TM0MyNDQzX0RNQTQJUzNDMjQxMF9JUlFTVUIoMjIpCisjZGVmaW5lIElSUV9TM0MyNDQzX0RNQTUJUzNDMjQxMF9JUlFTVUIoMjMpCisKKy8qIFVBUlQzICovCisjZGVmaW5lIElSUV9TM0MyNDQzX1JYMwkJUzNDMjQxMF9JUlFTVUIoMjQpCisjZGVmaW5lIElSUV9TM0MyNDQzX1RYMwkJUzNDMjQxMF9JUlFTVUIoMjUpCisjZGVmaW5lIElSUV9TM0MyNDQzX0VSUjMJUzNDMjQxMF9JUlFTVUIoMjYpCisKKyNkZWZpbmUgSVJRX1MzQzI0NDNfV0RUCQlTM0MyNDEwX0lSUVNVQigyNykKKyNkZWZpbmUgSVJRX1MzQzI0NDNfQUM5NwlTM0MyNDEwX0lSUVNVQigyOCkKKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MworI2RlZmluZSBOUl9JUlFTIChJUlFfUzNDMjQ0M19BQzk3KzEpCisjZWxzZQogI2RlZmluZSBOUl9JUlFTIChJUlFfUzNDMjQ0MF9BQzk3KzEpCi0KKyNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQVJDSF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWFkYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWFkYy5oCmluZGV4IDMxOTZhMjguLmM3ZjIzMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1hZGMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtYWRjLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgUzNDMjQxMF9BRENUU0NfWFBfU0VOCQkoMTw8NCkKICNkZWZpbmUgUzNDMjQxMF9BRENUU0NfUFVMTF9VUF9ESVNBQkxFCSgxPDwzKQogI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19BVVRPX1BTVAkJKDE8PDIpCi0jZGVmaW5lIFMzQzI0MTBfQURDVFNDX1hZX1BTVAkJKDB4Mzw8MCkKKyNkZWZpbmUgUzNDMjQxMF9BRENUU0NfWFlfUFNUKHgpCSgoKHgpJjB4Myk8PDApCiAKIC8qIEFEQ0RBVDAgQml0cyAqLwogI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDBfVVBET1dOCQkoMTw8MTUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaAppbmRleCBlYWU5MTY5Li5kZWE1NzhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmgKQEAgLTIwMSw3ICsyMDEsNyBAQAogI2RlZmluZSBTM0MyNDAwX0dQQkRBVAkgICBTM0MyNDEwX0dQSU9SRUcoMHgwQykKICNkZWZpbmUgUzNDMjQwMF9HUEJVUAkgICBTM0MyNDEwX0dQSU9SRUcoMHgxMCkKIAotLyogbm8gaS9vIHBpbiBpbiBwb3J0IGIgY2FuIGhhdmUgdmFsdWUgMyEgKi8KKy8qIG5vIGkvbyBwaW4gaW4gcG9ydCBiIGNhbiBoYXZlIHZhbHVlIDMgKHVubGVzcyBpdCBpcyBhIHMzYzI0NDMpICEgKi8KIAogI2RlZmluZSBTM0MyNDEwX0dQQjAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0IsIDApCiAjZGVmaW5lIFMzQzI0MTBfR1BCMF9JTlAgICAgICgweDAwIDw8IDApCkBAIC0yNDIsNiArMjQyLDcgQEAKICNkZWZpbmUgUzNDMjQxMF9HUEI1X0lOUCAgICAgKDB4MDAgPDwgMTApCiAjZGVmaW5lIFMzQzI0MTBfR1BCNV9PVVRQICAgICgweDAxIDw8IDEwKQogI2RlZmluZSBTM0MyNDEwX0dQQjVfblhCQUNLICAoMHgwMiA8PCAxMCkKKyNkZWZpbmUgUzNDMjQ0M19HUEI1X1hCQUNLICAgKDB4MDMgPDwgMTApCiAjZGVmaW5lIFMzQzI0MDBfR1BCNV9EQVRBMjEgICgweDAyIDw8IDEwKQogI2RlZmluZSBTM0MyNDAwX0dQQjVfbkNUUzEgICAoMHgwMyA8PCAxMCkKIApAQCAtMjQ5LDYgKzI1MCw3IEBACiAjZGVmaW5lIFMzQzI0MTBfR1BCNl9JTlAgICAgICgweDAwIDw8IDEyKQogI2RlZmluZSBTM0MyNDEwX0dQQjZfT1VUUCAgICAoMHgwMSA8PCAxMikKICNkZWZpbmUgUzNDMjQxMF9HUEI2X25YQlJFUSAgKDB4MDIgPDwgMTIpCisjZGVmaW5lIFMzQzI0NDNfR1BCNl9YQlJFUSAgICgweDAzIDw8IDEyKQogI2RlZmluZSBTM0MyNDAwX0dQQjZfREFUQTIyICAoMHgwMiA8PCAxMikKICNkZWZpbmUgUzNDMjQwMF9HUEI2X25SVFMxICAgKDB4MDMgPDwgMTIpCiAKQEAgLTI1Niw2ICsyNTgsNyBAQAogI2RlZmluZSBTM0MyNDEwX0dQQjdfSU5QICAgICAoMHgwMCA8PCAxNCkKICNkZWZpbmUgUzNDMjQxMF9HUEI3X09VVFAgICAgKDB4MDEgPDwgMTQpCiAjZGVmaW5lIFMzQzI0MTBfR1BCN19uWERBQ0sxICgweDAyIDw8IDE0KQorI2RlZmluZSBTM0MyNDQzX0dQQjdfWERBQ0sxICAoMHgwMyA8PCAxNCkKICNkZWZpbmUgUzNDMjQwMF9HUEI3X0RBVEEyMyAgKDB4MDIgPDwgMTQpCiAKICNkZWZpbmUgUzNDMjQxMF9HUEI4ICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktCLCA4KQpAQCAtMjY4LDYgKzI3MSw3IEBACiAjZGVmaW5lIFMzQzI0MTBfR1BCOV9JTlAgICAgICgweDAwIDw8IDE4KQogI2RlZmluZSBTM0MyNDEwX0dQQjlfT1VUUCAgICAoMHgwMSA8PCAxOCkKICNkZWZpbmUgUzNDMjQxMF9HUEI5X25YREFDSzAgKDB4MDIgPDwgMTgpCisjZGVmaW5lIFMzQzI0NDNfR1BCOV9YREFDSzAgICgweDAzIDw8IDE4KQogI2RlZmluZSBTM0MyNDAwX0dQQjlfREFUQTI1ICAoMHgwMiA8PCAxOCkKICNkZWZpbmUgUzNDMjQwMF9HUEI5X0kyU1NESSAgKDB4MDMgPDwgMTgpCiAKQEAgLTI3NSw2ICsyNzksNyBAQAogI2RlZmluZSBTM0MyNDEwX0dQQjEwX0lOUCAgICAoMHgwMCA8PCAyMCkKICNkZWZpbmUgUzNDMjQxMF9HUEIxMF9PVVRQICAgKDB4MDEgPDwgMjApCiAjZGVmaW5lIFMzQzI0MTBfR1BCMTBfblhEUkUwICgweDAyIDw8IDIwKQorI2RlZmluZSBTM0MyNDQzX0dQQjEwX1hEUkVRMCAoMHgwMyA8PCAyMCkKICNkZWZpbmUgUzNDMjQwMF9HUEIxMF9EQVRBMjYgKDB4MDIgPDwgMjApCiAjZGVmaW5lIFMzQzI0MDBfR1BCMTBfblNTICAgICgweDAzIDw8IDIwKQogCkBAIC01NTYsNiArNTYxLDcgQEAKICNkZWZpbmUgUzNDMjQxMF9HUEUwX0lOUCAgICAgICAoMHgwMCA8PCAwKQogI2RlZmluZSBTM0MyNDEwX0dQRTBfT1VUUCAgICAgICgweDAxIDw8IDApCiAjZGVmaW5lIFMzQzI0MTBfR1BFMF9JMlNMUkNLICAgKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDMjQ0M19HUEUwX0FDX25SRVNFVCAoMHgwMyA8PCAwKQogI2RlZmluZSBTM0MyNDAwX0dQRTBfRUlOVDAgICAgICgweDAyIDw8IDApCiAjZGVmaW5lIFMzQzI0MTBfR1BFMF9NQVNLICAgICAgKDB4MDMgPDwgMCkKIApAQCAtNTYzLDYgKzU2OSw3IEBACiAjZGVmaW5lIFMzQzI0MTBfR1BFMV9JTlAgICAgICAgKDB4MDAgPDwgMikKICNkZWZpbmUgUzNDMjQxMF9HUEUxX09VVFAgICAgICAoMHgwMSA8PCAyKQogI2RlZmluZSBTM0MyNDEwX0dQRTFfSTJTU0NMSyAgICgweDAyIDw8IDIpCisjZGVmaW5lIFMzQzI0NDNfR1BFMV9BQ19TWU5DICAgKDB4MDMgPDwgMikKICNkZWZpbmUgUzNDMjQwMF9HUEUxX0VJTlQxICAgICAoMHgwMiA8PCAyKQogI2RlZmluZSBTM0MyNDAwX0dQRTFfblNTICAgICAgICgweDAzIDw8IDIpCiAjZGVmaW5lIFMzQzI0MTBfR1BFMV9NQVNLICAgICAgKDB4MDMgPDwgMikKQEAgLTU3MSw2ICs1NzgsNyBAQAogI2RlZmluZSBTM0MyNDEwX0dQRTJfSU5QICAgICAgICgweDAwIDw8IDQpCiAjZGVmaW5lIFMzQzI0MTBfR1BFMl9PVVRQICAgICAgKDB4MDEgPDwgNCkKICNkZWZpbmUgUzNDMjQxMF9HUEUyX0NEQ0xLICAgICAoMHgwMiA8PCA0KQorI2RlZmluZSBTM0MyNDQzX0dQRTJfQUNfQklUQ0xLICgweDAzIDw8IDQpCiAjZGVmaW5lIFMzQzI0MDBfR1BFMl9FSU5UMiAgICAgKDB4MDIgPDwgNCkKICNkZWZpbmUgUzNDMjQwMF9HUEUyX0kyU1NESSAgICAoMHgwMyA8PCA0KQogCkBAIC01NzgsNiArNTg2LDcgQEAKICNkZWZpbmUgUzNDMjQxMF9HUEUzX0lOUCAgICAgICAoMHgwMCA8PCA2KQogI2RlZmluZSBTM0MyNDEwX0dQRTNfT1VUUCAgICAgICgweDAxIDw8IDYpCiAjZGVmaW5lIFMzQzI0MTBfR1BFM19JMlNTREkgICAgKDB4MDIgPDwgNikKKyNkZWZpbmUgUzNDMjQ0M19HUEUzX0FDX1NESSAgICAoMHgwMyA8PCA2KQogI2RlZmluZSBTM0MyNDAwX0dQRTNfRUlOVDMgICAgICgweDAyIDw8IDYpCiAjZGVmaW5lIFMzQzI0MDBfR1BFM19uQ1RTMSAgICAgKDB4MDMgPDwgNikKICNkZWZpbmUgUzNDMjQxMF9HUEUzX25TUzAgICAgICAoMHgwMyA8PCA2KQpAQCAtNTg3LDYgKzU5Niw3IEBACiAjZGVmaW5lIFMzQzI0MTBfR1BFNF9JTlAgICAgICAgKDB4MDAgPDwgOCkKICNkZWZpbmUgUzNDMjQxMF9HUEU0X09VVFAgICAgICAoMHgwMSA8PCA4KQogI2RlZmluZSBTM0MyNDEwX0dQRTRfSTJTU0RPICAgICgweDAyIDw8IDgpCisjZGVmaW5lIFMzQzI0NDNfR1BFNF9BQ19TRE8gICAgKDB4MDMgPDwgOCkKICNkZWZpbmUgUzNDMjQwMF9HUEU0X0VJTlQ0ICAgICAoMHgwMiA8PCA4KQogI2RlZmluZSBTM0MyNDAwX0dQRTRfblJUUzEgICAgICgweDAzIDw8IDgpCiAjZGVmaW5lIFMzQzI0MTBfR1BFNF9JMlNTREkgICAgKDB4MDMgPDwgOCkKQEAgLTU5Niw2ICs2MDYsNyBAQAogI2RlZmluZSBTM0MyNDEwX0dQRTVfSU5QICAgICAgICgweDAwIDw8IDEwKQogI2RlZmluZSBTM0MyNDEwX0dQRTVfT1VUUCAgICAgICgweDAxIDw8IDEwKQogI2RlZmluZSBTM0MyNDEwX0dQRTVfU0RDTEsgICAgICgweDAyIDw8IDEwKQorI2RlZmluZSBTM0MyNDQzX0dQRTVfU0QxX0NMSyAgICgweDAyIDw8IDEwKQogI2RlZmluZSBTM0MyNDAwX0dQRTVfRUlOVDUgICAgICgweDAyIDw8IDEwKQogI2RlZmluZSBTM0MyNDAwX0dQRTVfVENMSzEgICAgICgweDAzIDw8IDEwKQogCkBAIC02MDMsMjQgKzYxNCwzMiBAQAogI2RlZmluZSBTM0MyNDEwX0dQRTZfSU5QICAgICAgICgweDAwIDw8IDEyKQogI2RlZmluZSBTM0MyNDEwX0dQRTZfT1VUUCAgICAgICgweDAxIDw8IDEyKQogI2RlZmluZSBTM0MyNDEwX0dQRTZfU0RDTUQgICAgICgweDAyIDw8IDEyKQorI2RlZmluZSBTM0MyNDQzX0dQRTZfU0QxX0NNRCAgICgweDAyIDw8IDEyKQorI2RlZmluZSBTM0MyNDQzX0dQRTZfQUNfQklUQ0xLICgweDAzIDw8IDEyKQogI2RlZmluZSBTM0MyNDAwX0dQRTZfRUlOVDYgICAgICgweDAyIDw8IDEyKQogCiAjZGVmaW5lIFMzQzI0MTBfR1BFNyAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktFLCA3KQogI2RlZmluZSBTM0MyNDEwX0dQRTdfSU5QICAgICAgICgweDAwIDw8IDE0KQogI2RlZmluZSBTM0MyNDEwX0dQRTdfT1VUUCAgICAgICgweDAxIDw8IDE0KQogI2RlZmluZSBTM0MyNDEwX0dQRTdfU0REQVQwICAgICgweDAyIDw8IDE0KQorI2RlZmluZSBTM0MyNDQzX0dQRTVfU0QxX0RBVDAgICgweDAyIDw8IDE0KQorI2RlZmluZSBTM0MyNDQzX0dQRTdfQUNfU0RJICAgICgweDAzIDw8IDE0KQogI2RlZmluZSBTM0MyNDAwX0dQRTdfRUlOVDcgICAgICgweDAyIDw8IDE0KQogCiAjZGVmaW5lIFMzQzI0MTBfR1BFOCAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktFLCA4KQogI2RlZmluZSBTM0MyNDEwX0dQRThfSU5QICAgICAgICgweDAwIDw8IDE2KQogI2RlZmluZSBTM0MyNDEwX0dQRThfT1VUUCAgICAgICgweDAxIDw8IDE2KQogI2RlZmluZSBTM0MyNDEwX0dQRThfU0REQVQxICAgICgweDAyIDw8IDE2KQorI2RlZmluZSBTM0MyNDQzX0dQRThfU0QxX0RBVDEgICgweDAyIDw8IDE2KQorI2RlZmluZSBTM0MyNDQzX0dQRThfQUNfU0RPICAgICgweDAzIDw8IDE2KQogI2RlZmluZSBTM0MyNDAwX0dQRThfblhEQUNLMCAgICgweDAyIDw8IDE2KQogCiAjZGVmaW5lIFMzQzI0MTBfR1BFOSAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktFLCA5KQogI2RlZmluZSBTM0MyNDEwX0dQRTlfSU5QICAgICAgICgweDAwIDw8IDE4KQogI2RlZmluZSBTM0MyNDEwX0dQRTlfT1VUUCAgICAgICgweDAxIDw8IDE4KQogI2RlZmluZSBTM0MyNDEwX0dQRTlfU0REQVQyICAgICgweDAyIDw8IDE4KQorI2RlZmluZSBTM0MyNDQzX0dQRTlfU0QxX0RBVDIgICgweDAyIDw8IDE4KQorI2RlZmluZSBTM0MyNDQzX0dQRTlfQUNfU1lOQyAgICgweDAzIDw8IDE4KQogI2RlZmluZSBTM0MyNDAwX0dQRTlfblhEQUNLMSAgICgweDAyIDw8IDE4KQogI2RlZmluZSBTM0MyNDAwX0dQRTlfblhCQUNLICAgICgweDAzIDw8IDE4KQogCkBAIC02MjgsNiArNjQ3LDggQEAKICNkZWZpbmUgUzNDMjQxMF9HUEUxMF9JTlAgICAgICAoMHgwMCA8PCAyMCkKICNkZWZpbmUgUzNDMjQxMF9HUEUxMF9PVVRQICAgICAoMHgwMSA8PCAyMCkKICNkZWZpbmUgUzNDMjQxMF9HUEUxMF9TRERBVDMgICAoMHgwMiA8PCAyMCkKKyNkZWZpbmUgUzNDMjQ0M19HUEUxMF9TRDFfREFUMyAoMHgwMiA8PCAyMCkKKyNkZWZpbmUgUzNDMjQ0M19HUEUxMF9BQ19uUkVTRVQgKDB4MDMgPDwgMjApCiAjZGVmaW5lIFMzQzI0MDBfR1BFMTBfblhEUkVRMCAgKDB4MDIgPDwgMjApCiAKICNkZWZpbmUgUzNDMjQxMF9HUEUxMSAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0UsIDExKQpAQCAtNzk2LDYgKzgxNyw3IEBACiAjZGVmaW5lIFMzQzI0MDBfR1BHNF9NTUNDTEsgICAoMHgwMiA8PCA4KQogI2RlZmluZSBTM0MyNDAwX0dQRzRfSTJTU0RJICAgKDB4MDMgPDwgOCkKICNkZWZpbmUgUzNDMjQxMF9HUEc0X0xDRFBXUkVOICgweDAzIDw8IDgpCisjZGVmaW5lIFMzQzI0NDNfR1BHNF9MQ0RQV1JETiAoMHgwMyA8PCA4KQogCiAjZGVmaW5lIFMzQzI0MTBfR1BHNSAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0csIDUpCiAjZGVmaW5lIFMzQzI0MTBfR1BHNV9JTlAgICAgICAoMHgwMCA8PCAxMCkKQEAgLTgwMyw3ICs4MjUsNyBAQAogI2RlZmluZSBTM0MyNDEwX0dQRzVfRUlOVDEzICAgKDB4MDIgPDwgMTApCiAjZGVmaW5lIFMzQzI0MDBfR1BHNV9NTUNDTUQgICAoMHgwMiA8PCAxMCkKICNkZWZpbmUgUzNDMjQwMF9HUEc1X0lJQ1NEQSAgICgweDAzIDw8IDEwKQotI2RlZmluZSBTM0MyNDEwX0dQRzVfU1BJTUlTTzEgKDB4MDMgPDwgMTApCisjZGVmaW5lIFMzQzI0MTBfR1BHNV9TUElNSVNPMSAoMHgwMyA8PCAxMCkJLyogbm90IHMzYzI0NDMgKi8KIAogI2RlZmluZSBTM0MyNDEwX0dQRzYgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktHLCA2KQogI2RlZmluZSBTM0MyNDEwX0dQRzZfSU5QICAgICAgKDB4MDAgPDwgMTIpCkBAIC04NDUsNiArODY3LDcgQEAKICNkZWZpbmUgUzNDMjQxMF9HUEcxMV9PVVRQICAgICgweDAxIDw8IDIyKQogI2RlZmluZSBTM0MyNDEwX0dQRzExX0VJTlQxOSAgKDB4MDIgPDwgMjIpCiAjZGVmaW5lIFMzQzI0MTBfR1BHMTFfVENMSzEgICAoMHgwMyA8PCAyMikKKyNkZWZpbmUgUzNDMjQ0M19HUEcxMV9DRl9uSVJFUSAoMHgwMyA8PCAyMikKIAogI2RlZmluZSBTM0MyNDEwX0dQRzEyICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktHLCAxMikKICNkZWZpbmUgUzNDMjQxMF9HUEcxMl9JTlAgICAgICgweDAwIDw8IDI0KQpAQCAtODUyLDI1ICs4NzUsMjggQEAKICNkZWZpbmUgUzNDMjQxMF9HUEcxMl9FSU5UMjAgICgweDAyIDw8IDI0KQogI2RlZmluZSBTM0MyNDEwX0dQRzEyX1hNT04gICAgKDB4MDMgPDwgMjQpCiAjZGVmaW5lIFMzQzI0NDJfR1BHMTJfblNQSUNTMCAoMHgwMyA8PCAyNCkKKyNkZWZpbmUgUzNDMjQ0M19HUEcxMl9uSU5QQUNLICgweDAzIDw8IDI0KQogCiAjZGVmaW5lIFMzQzI0MTBfR1BHMTMgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0csIDEzKQogI2RlZmluZSBTM0MyNDEwX0dQRzEzX0lOUCAgICAgKDB4MDAgPDwgMjYpCiAjZGVmaW5lIFMzQzI0MTBfR1BHMTNfT1VUUCAgICAoMHgwMSA8PCAyNikKICNkZWZpbmUgUzNDMjQxMF9HUEcxM19FSU5UMjEgICgweDAyIDw8IDI2KQogI2RlZmluZSBTM0MyNDEwX0dQRzEzX25YUE9OICAgKDB4MDMgPDwgMjYpCisjZGVmaW5lIFMzQzI0NDNfR1BHMTNfQ0ZfblJFRyAoMHgwMyA8PCAyNikKIAogI2RlZmluZSBTM0MyNDEwX0dQRzE0ICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktHLCAxNCkKICNkZWZpbmUgUzNDMjQxMF9HUEcxNF9JTlAgICAgICgweDAwIDw8IDI4KQogI2RlZmluZSBTM0MyNDEwX0dQRzE0X09VVFAgICAgKDB4MDEgPDwgMjgpCiAjZGVmaW5lIFMzQzI0MTBfR1BHMTRfRUlOVDIyICAoMHgwMiA8PCAyOCkKICNkZWZpbmUgUzNDMjQxMF9HUEcxNF9ZTU9OICAgICgweDAzIDw8IDI4KQorI2RlZmluZSBTM0MyNDQzX0dQRzE0X0NGX1JFU0VUICgweDAzIDw8IDI4KQogCiAjZGVmaW5lIFMzQzI0MTBfR1BHMTUgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0csIDE1KQogI2RlZmluZSBTM0MyNDEwX0dQRzE1X0lOUCAgICAgKDB4MDAgPDwgMzApCiAjZGVmaW5lIFMzQzI0MTBfR1BHMTVfT1VUUCAgICAoMHgwMSA8PCAzMCkKICNkZWZpbmUgUzNDMjQxMF9HUEcxNV9FSU5UMjMgICgweDAyIDw8IDMwKQogI2RlZmluZSBTM0MyNDEwX0dQRzE1X25ZUE9OICAgKDB4MDMgPDwgMzApCi0KKyNkZWZpbmUgUzNDMjQ0M19HUEcxNV9DRl9QV1IgICgweDAzIDw8IDMwKQogCiAjZGVmaW5lIFMzQzI0MTBfR1BHX1BVUERJUyh4KSAgKDE8PCh4KSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXMzYzI0NDMtY2xvY2suaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zM2MyNDQzLWNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYwNTM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zM2MyNDQzLWNsb2NrLmgKQEAgLTAsMCArMSwxOTQgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1jbG9jay5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0NDMgY2xvY2sgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyovCisKKyNpZm5kZWYgX19BU01fQVJNX1JFR1NfUzNDMjQ0M19DTE9DSworI2RlZmluZSBfX0FTTV9BUk1fUkVHU19TM0MyNDQzX0NMT0NLCisKKyNkZWZpbmUgUzNDMjQ0M19DTEtSRUcoeCkJCSgoeCkgKyBTM0MyNFhYX1ZBX0NMS1BXUikKKworI2RlZmluZSBTM0MyNDQzX1BMTENPTl9NRElWU0hJRlQJMTYKKyNkZWZpbmUgUzNDMjQ0M19QTExDT05fUERJVlNISUZUCTgKKyNkZWZpbmUgUzNDMjQ0M19QTExDT05fU0RJVlNISUZUCTAKKyNkZWZpbmUgUzNDMjQ0M19QTExDT05fTURJVk1BU0sJCSgoMTw8KDErKDIzLTE2KSkpLTEpCisjZGVmaW5lIFMzQzI0NDNfUExMQ09OX1BESVZNQVNLCQkoKDE8PCgxKyg5LTgpKSktMSkKKyNkZWZpbmUgUzNDMjQ0M19QTExDT05fU0RJVk1BU0sJCSgzKQorCisjZGVmaW5lIFMzQzI0NDNfTVBMTENPTgkJCVMzQzI0NDNfQ0xLUkVHKDB4MTApCisjZGVmaW5lIFMzQzI0NDNfRVBMTENPTgkJCVMzQzI0NDNfQ0xLUkVHKDB4MTgpCisjZGVmaW5lIFMzQzI0NDNfQ0xLU1JDCQkJUzNDMjQ0M19DTEtSRUcoMHgyMCkKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYwCQkJUzNDMjQ0M19DTEtSRUcoMHgyNCkKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYxCQkJUzNDMjQ0M19DTEtSRUcoMHgyOCkKKyNkZWZpbmUgUzNDMjQ0M19IQ0xLQ09OCQkJUzNDMjQ0M19DTEtSRUcoMHgzMCkKKyNkZWZpbmUgUzNDMjQ0M19QQ0xLQ09OCQkJUzNDMjQ0M19DTEtSRUcoMHgzNCkKKyNkZWZpbmUgUzNDMjQ0M19TQ0xLQ09OCQkJUzNDMjQ0M19DTEtSRUcoMHgzOCkKKyNkZWZpbmUgUzNDMjQ0M19QV1JNT0RFCQkJUzNDMjQ0M19DTEtSRUcoMHg0MCkKKyNkZWZpbmUgUzNDMjQ0M19TV1JTVAkJCVMzQzI0NDNfQ0xLUkVHKDB4NDQpCisjZGVmaW5lIFMzQzI0NDNfQlVTUFJJMAkJCVMzQzI0NDNfQ0xLUkVHKDB4NTApCisjZGVmaW5lIFMzQzI0NDNfU1lTSUQJCQlTM0MyNDQzX0NMS1JFRygweDVDKQorI2RlZmluZSBTM0MyNDQzX1BXUkNGRwkJCVMzQzI0NDNfQ0xLUkVHKDB4NjApCisjZGVmaW5lIFMzQzI0NDNfUlNUQ09OCQkJUzNDMjQ0M19DTEtSRUcoMHg2NCkKKworI2RlZmluZSBTM0MyNDQzX1NXUlNUX1JFU0VUCQkoMHg1MzNjMjQ0MykKKworI2RlZmluZSBTM0MyNDQzX1BMTENPTl9PRkYJCSgxPDwyNCkKKworI2RlZmluZSBTM0MyNDQzX0NMS1NSQ19JMlNfRVhUCQkoMTw8MTQpCisjZGVmaW5lIFMzQzI0NDNfQ0xLU1JDX0kyU19FUExMRElWCSgwPDwxNCkKKyNkZWZpbmUgUzNDMjQ0M19DTEtTUkNfSTJTX0VQTExSRUYJKDI8PDE0KQorI2RlZmluZSBTM0MyNDQzX0NMS1NSQ19JMlNfRVBMTFJFRjMJKDM8PDE0KQorI2RlZmluZSBTM0MyNDQzX0NMS1NSQ19JMlNfTUFTSwkJKDM8PDE0KQorCisjZGVmaW5lIFMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfWFRBTAkoMjw8OCkKKyNkZWZpbmUgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9FWFRDTEsJKDM8PDgpCisjZGVmaW5lIFMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfTVBMTFJFRgkoMDw8OCkKKyNkZWZpbmUgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9NUExMUkVGMgkoMTw8OCkKKyNkZWZpbmUgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9NQVNLCSgzPDw4KQorCisjZGVmaW5lIFMzQzI0NDNfQ0xLU1JDX0VTWVNDTEtfRVBMTAkoMTw8NikKKyNkZWZpbmUgUzNDMjQ0M19DTEtTUkNfTVNZU0NMS19NUExMCSgxPDw0KQorI2RlZmluZSBTM0MyNDQzX0NMS1NSQ19FWFRDTEtfRElWCSgxPDwzKQorCisjZGVmaW5lIFMzQzI0NDNfQ0xLRElWMF9EVlMJCSgxPDwxMykKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0hBTEZfSENMSwkoMTw8MykKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0hBTEZfUENMSwkoMTw8MikKKworI2RlZmluZSBTM0MyNDQzX0NMS0RJVjBfSENMS0RJVl9NQVNLCSgzPDwwKQorCisjZGVmaW5lIFMzQzI0NDNfQ0xLRElWMF9FWFRESVZfTUFTSwkoMzw8NikKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0VYVERJVl9TSElGVAkoNikKKworI2RlZmluZSBTM0MyNDQzX0NMS0RJVjBfUFJFRElWX01BU0sJKDM8PDQpCisjZGVmaW5lIFMzQzI0NDNfQ0xLRElWMF9QUkVESVZfU0hJRlQJKDQpCisKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0FSTURJVl9NQVNLCSgxNTw8OSkKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVAkoOSkKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0FSTURJVl8xCSgwPDw5KQorI2RlZmluZSBTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzIJKDg8PDkpCisjZGVmaW5lIFMzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMwkoMjw8OSkKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0FSTURJVl80CSg5PDw5KQorI2RlZmluZSBTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzYJKDEwPDw5KQorI2RlZmluZSBTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzgJKDExPDw5KQorI2RlZmluZSBTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzEyCSgxMzw8OSkKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0FSTURJVl8xNgkoMTU8PDkpCisKKy8qIFMzQzI0NDNfQ0xLRElWMSAqLworCisjZGVmaW5lIFMzQzI0NDNfQ0xLRElWMV9DQU1ESVZfTUFTSwkoMTU8PDI2KQorI2RlZmluZSBTM0MyNDQzX0NMS0RJVjFfQ0FNRElWX1NISUZUCSgyNikKKworI2RlZmluZSBTM0MyNDQzX0NMS0RJVjFfSFNTUElESVZfTUFTSwkoMzw8MjQpCisjZGVmaW5lIFMzQzI0NDNfQ0xLRElWMV9IU1NQSURJVl9TSElGVAkoMjQpCisKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYxX0RJU1BESVZfTUFTSwkoMHhmZjw8MTYpCisjZGVmaW5lIFMzQzI0NDNfQ0xLRElWMV9ESVNQRElWX1NISUZUCSgxNikKKworI2RlZmluZSBTM0MyNDQzX0NMS0RJVjFfSTJTRElWX01BU0sJKDE1PDwxMikKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYxX0kyU0RJVl9TSElGVAkoMTIpCisKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYxX1VBUlRESVZfTUFTSwkoMTU8PDgpCisjZGVmaW5lIFMzQzI0NDNfQ0xLRElWMV9VQVJURElWX1NISUZUCSg4KQorCisjZGVmaW5lIFMzQzI0NDNfQ0xLRElWMV9IU01NQ0RJVl9NQVNLCSgzPDw2KQorI2RlZmluZSBTM0MyNDQzX0NMS0RJVjFfSFNNTUNESVZfU0hJRlQJKDYpCisKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYxX1VTQkhPU1RESVZfTUFTSwkoMzw8NCkKKyNkZWZpbmUgUzNDMjQ0M19DTEtESVYxX1VTQkhPU1RESVZfU0hJRlQgKDQpCisKKyNkZWZpbmUgUzNDMjQ0M19DTEtDT05fTkFORAorCisjZGVmaW5lIFMzQzI0NDNfSENMS0NPTl9ETUEwCQkoMTw8MCkKKyNkZWZpbmUgUzNDMjQ0M19IQ0xLQ09OX0RNQTEJCSgxPDwxKQorI2RlZmluZSBTM0MyNDQzX0hDTEtDT05fRE1BMgkJKDE8PDIpCisjZGVmaW5lIFMzQzI0NDNfSENMS0NPTl9ETUEzCQkoMTw8MykKKyNkZWZpbmUgUzNDMjQ0M19IQ0xLQ09OX0RNQTQJCSgxPDw0KQorI2RlZmluZSBTM0MyNDQzX0hDTEtDT05fRE1BNQkJKDE8PDUpCisjZGVmaW5lIFMzQzI0NDNfSENMS0NPTl9DQU1JRgkJKDE8PDgpCisjZGVmaW5lIFMzQzI0NDNfSENMS0NPTl9ESVNQCQkoMTw8OSkKKyNkZWZpbmUgUzNDMjQ0M19IQ0xLQ09OX0xDREMJCSgxPDwxMCkKKyNkZWZpbmUgUzNDMjQ0M19IQ0xLQ09OX1VTQkgJCSgxPDwxMSkKKyNkZWZpbmUgUzNDMjQ0M19IQ0xLQ09OX1VTQkQJCSgxPDwxMikKKyNkZWZpbmUgUzNDMjQ0M19IQ0xLQ09OX0hTTU1DCQkoMTw8MTYpCisjZGVmaW5lIFMzQzI0NDNfSENMS0NPTl9DRkMJCSgxPDwxNykKKyNkZWZpbmUgUzNDMjQ0M19IQ0xLQ09OX1NTTUMJCSgxPDwxOCkKKyNkZWZpbmUgUzNDMjQ0M19IQ0xLQ09OX0RSQU1DCQkoMTw8MTkpCisKKyNkZWZpbmUgUzNDMjQ0M19QQ0xLQ09OX1VBUlQwCQkoMTw8MCkKKyNkZWZpbmUgUzNDMjQ0M19QQ0xLQ09OX1VBUlQxCQkoMTw8MSkKKyNkZWZpbmUgUzNDMjQ0M19QQ0xLQ09OX1VBUlQyCQkoMTw8MikKKyNkZWZpbmUgUzNDMjQ0M19QQ0xLQ09OX1VBUlQzCQkoMTw8MykKKyNkZWZpbmUgUzNDMjQ0M19QQ0xLQ09OX0lJQwkJKDE8PDQpCisjZGVmaW5lIFMzQzI0NDNfUENMS0NPTl9TREkJCSgxPDw1KQorI2RlZmluZSBTM0MyNDQzX1BDTEtDT05fQURDCQkoMTw8NykKKyNkZWZpbmUgUzNDMjQ0M19QQ0xLQ09OX0lJUwkJKDE8PDkpCisjZGVmaW5lIFMzQzI0NDNfUENMS0NPTl9QV01UCQkoMTw8MTApCisjZGVmaW5lIFMzQzI0NDNfUENMS0NPTl9XRFQJCSgxPDwxMSkKKyNkZWZpbmUgUzNDMjQ0M19QQ0xLQ09OX1JUQwkJKDE8PDEyKQorI2RlZmluZSBTM0MyNDQzX1BDTEtDT05fR1BJTwkJKDE8PDEzKQorI2RlZmluZSBTM0MyNDQzX1BDTEtDT05fU1BJMAkJKDE8PDE0KQorI2RlZmluZSBTM0MyNDQzX1BDTEtDT05fU1BJMQkJKDE8PDE1KQorCisjZGVmaW5lIFMzQzI0NDNfU0NMS0NPTl9ERFJDTEsJCSgxPDwxNikKKyNkZWZpbmUgUzNDMjQ0M19TQ0xLQ09OX1NTTUNDTEsJCSgxPDwxNSkKKyNkZWZpbmUgUzNDMjQ0M19TQ0xLQ09OX0hTU1BJQ0xLCSgxPDwxNCkKKyNkZWZpbmUgUzNDMjQ0M19TQ0xLQ09OX0hTTU1DQ0xLX0VYVAkoMTw8MTMpCisjZGVmaW5lIFMzQzI0NDNfU0NMS0NPTl9IU01NQ0NMS19FUExMCSgxPDwxMikKKyNkZWZpbmUgUzNDMjQ0M19TQ0xLQ09OX0NBTUNMSwkJKDE8PDExKQorI2RlZmluZSBTM0MyNDQzX1NDTEtDT05fRElTUENMSwkJKDE8PDEwKQorI2RlZmluZSBTM0MyNDQzX1NDTEtDT05fSTJTQ0xLCQkoMTw8OSkKKyNkZWZpbmUgUzNDMjQ0M19TQ0xLQ09OX1VBUlRDTEsJCSgxPDw4KQorI2RlZmluZSBTM0MyNDQzX1NDTEtDT05fVVNCSE9TVAkJKDE8PDEpCisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3MzYzI0NDNfZ2V0X21wbGwodW5zaWduZWQgaW50IHBsbHZhbCwgdW5zaWduZWQgaW50IGJhc2VjbGspCit7CisJdW5zaWduZWQgaW50IG1kaXYsIHBkaXYsIHNkaXY7CisJdWludDY0X3QgZnZjbzsKKworCW1kaXYgPSBwbGx2YWwgPj4gUzNDMjQ0M19QTExDT05fTURJVlNISUZUOworCXBkaXYgPSBwbGx2YWwgPj4gUzNDMjQ0M19QTExDT05fUERJVlNISUZUOworCXNkaXYgPSBwbGx2YWwgPj4gUzNDMjQ0M19QTExDT05fU0RJVlNISUZUOworCisJbWRpdiAmPSBTM0MyNDQzX1BMTENPTl9NRElWTUFTSzsKKwlwZGl2ICY9IFMzQzI0NDNfUExMQ09OX1BESVZNQVNLOworCXNkaXYgJj0gUzNDMjQ0M19QTExDT05fU0RJVk1BU0s7CisKKwlmdmNvID0gKHVpbnQ2NF90KWJhc2VjbGsgKiAoMiAqIChtZGl2ICsgOCkpOworCWRvX2RpdihmdmNvLCBwZGl2IDw8IHNkaXYpOworCisJcmV0dXJuICh1bnNpZ25lZCBpbnQpZnZjbzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3MzYzI0NDNfZ2V0X2VwbGwodW5zaWduZWQgaW50IHBsbHZhbCwgdW5zaWduZWQgaW50IGJhc2VjbGspCit7CisJdW5zaWduZWQgaW50IG1kaXYsIHBkaXYsIHNkaXY7CisJdWludDY0X3QgZnZjbzsKKworCW1kaXYgPSBwbGx2YWwgPj4gUzNDMjQ0M19QTExDT05fTURJVlNISUZUOworCXBkaXYgPSBwbGx2YWwgPj4gUzNDMjQ0M19QTExDT05fUERJVlNISUZUOworCXNkaXYgPSBwbGx2YWwgPj4gUzNDMjQ0M19QTExDT05fU0RJVlNISUZUOworCisJbWRpdiAmPSBTM0MyNDQzX1BMTENPTl9NRElWTUFTSzsKKwlwZGl2ICY9IFMzQzI0NDNfUExMQ09OX1BESVZNQVNLOworCXNkaXYgJj0gUzNDMjQ0M19QTExDT05fU0RJVk1BU0s7CisKKwlmdmNvID0gKHVpbnQ2NF90KWJhc2VjbGsgKiAobWRpdiArIDgpOworCWRvX2RpdihmdmNvLCAocGRpdiArIDIpIDw8IHNkaXYpOworCisJcmV0dXJuICh1bnNpZ25lZCBpbnQpZnZjbzsKK30KKworI2VuZGlmIC8qICBfX0FTTV9BUk1fUkVHU19TM0MyNDQzX0NMT0NLICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zZXJpYWwuaAppbmRleCA0NmY1MjQwLi44OTQ2NzAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNlcmlhbC5oCkBAIC0zNSwxMCArMzUsMTIgQEAKICNkZWZpbmUgUzNDMjRYWF9WQV9VQVJUMCAgICAgIChTM0MyNFhYX1ZBX1VBUlQpCiAjZGVmaW5lIFMzQzI0WFhfVkFfVUFSVDEgICAgICAoUzNDMjRYWF9WQV9VQVJUICsgMHg0MDAwICkKICNkZWZpbmUgUzNDMjRYWF9WQV9VQVJUMiAgICAgIChTM0MyNFhYX1ZBX1VBUlQgKyAweDgwMDAgKQorI2RlZmluZSBTM0MyNFhYX1ZBX1VBUlQzICAgICAgKFMzQzI0WFhfVkFfVUFSVCArIDB4QzAwMCApCiAKICNkZWZpbmUgUzNDMjQxMF9QQV9VQVJUMCAgICAgIChTM0MyNFhYX1BBX1VBUlQpCiAjZGVmaW5lIFMzQzI0MTBfUEFfVUFSVDEgICAgICAoUzNDMjRYWF9QQV9VQVJUICsgMHg0MDAwICkKICNkZWZpbmUgUzNDMjQxMF9QQV9VQVJUMiAgICAgIChTM0MyNFhYX1BBX1VBUlQgKyAweDgwMDAgKQorI2RlZmluZSBTM0MyNDQzX1BBX1VBUlQzICAgICAgKFMzQzI0WFhfUEFfVUFSVCArIDB4QzAwMCApCiAKICNkZWZpbmUgUzNDMjQxMF9VUlhICSAgKDB4MjQpCiAjZGVmaW5lIFMzQzI0MTBfVVRYSAkgICgweDIwKQpAQCAtNzMsNiArNzUsOCBAQAogI2RlZmluZSBTM0MyNDQwX1VDT05fVUNMSwkgICgxPDwxMCkKICNkZWZpbmUgUzNDMjQ0MF9VQ09OX1BDTEsyCSAgKDI8PDEwKQogI2RlZmluZSBTM0MyNDQwX1VDT05fRkNMSwkgICgzPDwxMCkKKyNkZWZpbmUgUzNDMjQ0M19VQ09OX0VQTEwJICAoMzw8MTApCisKICNkZWZpbmUgUzNDMjQ0MF9VQ09OMl9GQ0xLX0VOCSAgKDE8PDE1KQogI2RlZmluZSBTM0MyNDQwX1VDT04wX0RJVk1BU0sJICAoMTUgPDwgMTIpCiAjZGVmaW5lIFMzQzI0NDBfVUNPTjFfRElWTUFTSwkgICgxNSA8PCAxMikKQEAgLTkzLDYgKzk3LDggQEAKICNkZWZpbmUgUzNDMjQxMF9VQ09OX1RYSVJRTU9ERQkgICgxPDwyKQogI2RlZmluZSBTM0MyNDEwX1VDT05fUlhJUlFNT0RFCSAgKDE8PDApCiAjZGVmaW5lIFMzQzI0MTBfVUNPTl9SWEZJRk9fVE9JCSAgKDE8PDcpCisjZGVmaW5lIFMzQzI0NDNfVUNPTl9SWEVSUl9JUlFFTiAgKDE8PDYpCisjZGVmaW5lIFMzQzI0NDNfVUNPTl9MT09QQkFDSwkgICgxPDw1KQogCiAjZGVmaW5lIFMzQzI0MTBfVUNPTl9ERUZBVUxUCSAgKFMzQzI0MTBfVUNPTl9UWElMRVZFTCAgfCBcCiAJCQkJICAgUzNDMjQxMF9VQ09OX1JYSUxFVkVMICB8IFwKQEAgLTEyNyw3ICsxMzMsNyBAQAogI2RlZmluZQlTM0MyNDEwX1VNQ09NX0FGQwkgICgxPDw0KQogI2RlZmluZQlTM0MyNDEwX1VNQ09NX1JUU19MT1cJICAoMTw8MCkKIAotI2RlZmluZSBTM0MyNDEyX1VNQ09OX0FGQ182MwkoMDw8NSkKKyNkZWZpbmUgUzNDMjQxMl9VTUNPTl9BRkNfNjMJKDA8PDUpCQkvKiBzYW1lIGFzIHMzYzI0NDMgKi8KICNkZWZpbmUgUzNDMjQxMl9VTUNPTl9BRkNfNTYJKDE8PDUpCiAjZGVmaW5lIFMzQzI0MTJfVU1DT05fQUZDXzQ4CSgyPDw1KQogI2RlZmluZSBTM0MyNDEyX1VNQ09OX0FGQ180MAkoMzw8NSkKQEAgLTE0Myw2ICsxNDksNyBAQAogI2RlZmluZSBTM0MyNDEwX1VGU1RBVF9SWE1BU0sJICAoMTU8PDApCiAjZGVmaW5lIFMzQzI0MTBfVUZTVEFUX1JYU0hJRlQJICAoMCkKIAorLyogVUZTVEFUIFMzQzI0NDMgc2FtZSBhcyBTM0MyNDQwICovCiAjZGVmaW5lIFMzQzI0NDBfVUZTVEFUX1RYRlVMTAkgICgxPDwxNCkKICNkZWZpbmUgUzNDMjQ0MF9VRlNUQVRfUlhGVUxMCSAgKDE8PDYpCiAjZGVmaW5lIFMzQzI0NDBfVUZTVEFUX1RYU0hJRlQJICAoOCkKQEAgLTE1Nyw2ICsxNjQsOCBAQAogI2RlZmluZSBTM0MyNDEwX1VFUlNUQVRfT1ZFUlJVTgkgICgxPDwwKQogI2RlZmluZSBTM0MyNDEwX1VFUlNUQVRfRlJBTUUJICAoMTw8MikKICNkZWZpbmUgUzNDMjQxMF9VRVJTVEFUX0JSRUFLCSAgKDE8PDMpCisjZGVmaW5lIFMzQzI0NDNfVUVSU1RBVF9QQVJJVFkJICAoMTw8MSkKKwogI2RlZmluZSBTM0MyNDEwX1VFUlNUQVRfQU5ZCSAgKFMzQzI0MTBfVUVSU1RBVF9PVkVSUlVOIHwgXAogCQkJCSAgIFMzQzI0MTBfVUVSU1RBVF9GUkFNRSB8IFwKIAkJCQkgICBTM0MyNDEwX1VFUlNUQVRfQlJFQUspCkBAIC0xNjQsNiArMTczLDggQEAKICNkZWZpbmUgUzNDMjQxMF9VTVNUQVRfQ1RTCSAgKDE8PDApCiAjZGVmaW5lIFMzQzI0MTBfVU1TVEFUX0RlbHRhQ1RTCSAgKDE8PDIpCiAKKyNkZWZpbmUgUzNDMjQ0M19ESVZTTE9UCQkgICgweDJDKQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKiBzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZXNldC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZXNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmODY2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3Jlc2V0LmgKQEAgLTAsMCArMSwyMiBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZXNldC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0MTAgQ1BVIHJlc2V0IGNvbnRyb2xzCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVTRVRfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFU0VUX0ggX19GSUxFX18KKworLyogVGhpcyBhbGxvd3MgdGhlIG92ZXItcmlkZSBvZiB0aGUgZGVmYXVsdCByZXNldCBjb2RlCisqLworCitleHRlcm4gdm9pZCAoKnMzYzI0eHhfcmVzZXRfaG9vaykodm9pZCk7CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3N5c3RlbS5oCmluZGV4IGVjZjI1MGQuLjFjNzRlZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0uaApAQCAtMTUsMTUgKzE1LDE2IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pZGxlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVzZXQuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtd2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CiAKIHZvaWQgKCpzM2MyNHh4X2lkbGUpKHZvaWQpOwordm9pZCAoKnMzYzI0eHhfcmVzZXRfaG9vaykodm9pZCk7CiAKIHZvaWQgczNjMjR4eF9kZWZhdWx0X2lkbGUodm9pZCkKIHsKLQl2b2lkIF9faW9tZW0gKnJlZyA9IFMzQzI0MTBfQ0xLQ09OOwogCXVuc2lnbmVkIGxvbmcgdG1wOwogCWludCBpOwogCkBAIC0zMywxNiArMzQsMTggQEAKIAogCS8qIFdhcm5pbmc6IGdvaW5nIGludG8gaWRsZSBzdGF0ZSB1cHNldHMganRhZyBzY2FubmluZyAqLwogCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHJlZykgfCAoMTw8MiksIHJlZyk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLQ09OKSB8IFMzQzI0MTBfQ0xLQ09OX0lETEUsCisJCSAgICAgUzNDMjQxMF9DTEtDT04pOwogCiAJLyogdGhlIHNhbXN1bmcgcG9ydCBzZWVtcyB0byBkbyBhIGxvb3AgYW5kIHRoZW4gdW5zZXQgaWRsZS4uICovCiAJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKLQkJdG1wICs9IF9fcmF3X3JlYWRsKHJlZyk7IC8qIGVuc3VyZSBsb29wIG5vdCBvcHRpbWlzZWQgb3V0ICovCisJCXRtcCArPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0NPTik7IC8qIGVuc3VyZSBsb29wIG5vdCBvcHRpbWlzZWQgb3V0ICovCiAJfQogCiAJLyogdGhpcyBiaXQgaXMgbm90IGNsZWFyZWQgb24gcmUtc3RhcnQuLi4gKi8KIAotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChyZWcpICYgfigxPDwyKSwgcmVnKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtDT04pICYgflMzQzI0MTBfQ0xLQ09OX0lETEUsCisJCSAgICAgUzNDMjQxMF9DTEtDT04pOwogfQogCiBzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKQEAgLTUzLDcgKzU2LDYgQEAKIAkJczNjMjR4eF9kZWZhdWx0X2lkbGUoKTsKIH0KIAotCiBzdGF0aWMgdm9pZAogYXJjaF9yZXNldChjaGFyIG1vZGUpCiB7CkBAIC02MSw2ICs2Myw5IEBACiAJCWNwdV9yZXNldCgwKTsKIAl9CiAKKwlpZiAoczNjMjR4eF9yZXNldF9ob29rKQorCQlzM2MyNHh4X3Jlc2V0X2hvb2soKTsKKwogCXByaW50aygiYXJjaF9yZXNldDogYXR0ZW1wdGluZyB3YXRjaGRvZyByZXNldFxuIik7CiAKIAlfX3Jhd193cml0ZWwoMCwgUzNDMjQxMF9XVENPTik7CSAgLyogZGlzYWJsZSB3YXRjaGRvZywgdG8gYmUgc2FmZSAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdWRjLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OWVjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VkYy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtczNjMjQxMC91ZGMuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBcm5hdWQgUGF0YXJkIDxhcm5hdWQucGF0YXJkQHJ0cC1uZXQub3JnPgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCisgKiAgQ2hhbmdlbG9nOgorICoJMTQtTWFyLTIwMDUJUlRQCUNyZWF0ZWQgZmlsZQorICoJMDItQXVnLTIwMDUJUlRQCUZpbGUgcmVuYW1lCisgKgkwNy1TZXAtMjAwNQlCSkQJTWlub3IgY2xlYW51cHMsIGNoYW5nZWQgY21kIHRvIGVudW0KKyAqCTE4LUphbi0yMDA3CUhNVwlBZGQgcGVyLXBsYXRmb3JtIHZidXNfZHJhdyBmdW5jdGlvbgorKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9VRENfSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9VRENfSAorCitlbnVtIHMzYzI0MTBfdWRjX2NtZF9lIHsKKwlTM0MyNDEwX1VEQ19QX0VOQUJMRQk9IDEsCS8qIFB1bGwtdXAgZW5hYmxlICAgICAgICAqLworCVMzQzI0MTBfVURDX1BfRElTQUJMRQk9IDIsCS8qIFB1bGwtdXAgZGlzYWJsZSAgICAgICAqLworCVMzQzI0MTBfVURDX1BfUkVTRVQJPSAzLAkvKiBVREMgcmVzZXQsIGluIGNhc2Ugb2YgKi8KK307CisKK3N0cnVjdCBzM2MyNDEwX3VkY19tYWNoX2luZm8geworCXZvaWQJKCp1ZGNfY29tbWFuZCkoZW51bSBzM2MyNDEwX3VkY19jbWRfZSk7CisgCXZvaWQJKCp2YnVzX2RyYXcpKHVuc2lnbmVkIGludCBtYSk7CisJdW5zaWduZWQgaW50IHZidXNfcGluOworCXVuc2lnbmVkIGNoYXIgdmJ1c19waW5faW52ZXJ0ZWQ7Cit9OworCitleHRlcm4gdm9pZCBfX2luaXQgczNjMjR4eF91ZGNfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2MyNDEwX3VkY19tYWNoX2luZm8gKik7CisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fQVJDSF9VRENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZW50cnktbWFjcm8uUwppbmRleCA1MWZiNTBjLi4wMjg5Njc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZW50cnktbWFjcm8uUwpAQCAtMTEsNiArMTEsMTIgQEAKICAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCisJCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkJLmVuZG0KKworCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkJLmVuZG0KKwogCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAJCW1vdglyNCwgIzB4ZmEwMDAwMDAJCQlAIElDSVAgPSAweGZhMDUwMDAwCiAJCWFkZAlyNCwgcjQsICMweDAwMDUwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2dwaW8uaAppbmRleCBhMzMxZmUzLi5kYTc1NzViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9ncGlvLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2dwaW8uaAorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2dwaW8uaAogICoKICAqIFNBMTEwMCBHUElPIHdyYXBwZXJzIGZvciBhcmNoLW5ldXRyYWwgR1BJTyBjYWxscwogICoKQEAgLTI0LDExICsyNCw4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfU0ExMTAwX0dQSU9fSAogI2RlZmluZSBfX0FTTV9BUkNIX1NBMTEwMF9HUElPX0gKIAotI2luY2x1ZGUgPGFzbS9hcmNoL1NBLTExMDAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQogewpAQCAtNDAsMjYgKzM3LDIzIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQorZXh0ZXJuIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKK2V4dGVybiBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8pOworCisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCiB7Ci0JaWYgKGdwaW8gPiBHUElPX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JR1BEUiA9IChHUERSX0luIDw8IGdwaW8pIDAKKwlyZXR1cm4gR1BMUiAmIEdQSU9fR1BJTyhncGlvKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCWlmIChncGlvID4gR1BJT19NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCUdQRFIgPSAoR1BEUl9PdXQgPDwgZ3BpbykgMAorCWlmICh2YWx1ZSkKKwkJR1BTUiA9IEdQSU9fR1BJTyhncGlvKTsKKwllbHNlCisJCUdQQ1IgPSBHUElPX0dQSU8oZ3Bpbyk7CiB9CiAKLSNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUoZ3BpbykgXAotCShHUExSICYgR1BJT19HUElPKGdwaW8pKQotCi0jZGVmaW5lIGdwaW9fc2V0X3ZhbHVlKGdwaW8sdmFsdWUpIFwKLQkoKHZhbHVlKSA/IChHUFNSID0gR1BJT19HUElPKGdwaW8pKSA6IChHUENSKGdwaW8pID0gR1BJT19HUElPKGdwaW8pKSkKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4JCQkvKiBjYW5zbGVlcCB3cmFwcGVycyAqLwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvZW50cnktbWFjcm8uUwppbmRleCBhOTI0ZjI3Li44MjQ2M2YzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL2VudHJ5LW1hY3JvLlMKQEAgLTEwLDYgKzEwLDEyIEBACiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCisJCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkJLmVuZG0KKworCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkJLmVuZG0KKwogCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAJCW1vdglyNCwgIzB4ZTAwMDAwMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvZW50cnktbWFjcm8uUwppbmRleCBmZWZmNzcxLi4wZmFlMDAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvZW50cnktbWFjcm8uUwpAQCAtMTMsNiArMTMsMTIgQEAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQkuZW5kbQorCisJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCQkuZW5kbQorCiAJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKIAkJbGRyCVxiYXNlLCA9SU9fQUREUkVTUyhWRVJTQVRJTEVfVklDX0JBU0UpCiAJCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjVklDX0lSUV9TVEFUVVNdCUAgZ2V0IG1hc2tlZCBzdGF0dXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1hcm0vY2FjaGVmbHVzaC5oCmluZGV4IDVmNTMxZWEuLmFmYWQzMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaApAQCAtMTg1LDkgKzE4NSwxNSBAQAogCXZvaWQgKCpjb2hlcmVudF91c2VyX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIAl2b2lkICgqZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkodm9pZCAqKTsKIAotCXZvaWQgKCpkbWFfaW52X3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLQl2b2lkICgqZG1hX2NsZWFuX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLQl2b2lkICgqZG1hX2ZsdXNoX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqZG1hX2ludl9yYW5nZSkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworCXZvaWQgKCpkbWFfY2xlYW5fcmFuZ2UpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKwl2b2lkICgqZG1hX2ZsdXNoX3JhbmdlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Cit9OworCitzdHJ1Y3Qgb3V0ZXJfY2FjaGVfZm5zIHsKKwl2b2lkICgqaW52X3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqY2xlYW5fcmFuZ2UpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCXZvaWQgKCpmbHVzaF9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiB9OwogCiAvKgpAQCAtMjQwLDkgKzI0Niw0MCBAQAogI2RlZmluZSBkbWFjX2NsZWFuX3JhbmdlCQlfX2dsdWUoX0NBQ0hFLF9kbWFfY2xlYW5fcmFuZ2UpCiAjZGVmaW5lIGRtYWNfZmx1c2hfcmFuZ2UJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9mbHVzaF9yYW5nZSkKIAotZXh0ZXJuIHZvaWQgZG1hY19pbnZfcmFuZ2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCBkbWFjX2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgZG1hY19mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGRtYWNfaW52X3JhbmdlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRtYWNfY2xlYW5fcmFuZ2UoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworZXh0ZXJuIHZvaWQgZG1hY19mbHVzaF9yYW5nZShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX09VVEVSX0NBQ0hFCisKK2V4dGVybiBzdHJ1Y3Qgb3V0ZXJfY2FjaGVfZm5zIG91dGVyX2NhY2hlOworCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0ZXJfaW52X3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmIChvdXRlcl9jYWNoZS5pbnZfcmFuZ2UpCisJCW91dGVyX2NhY2hlLmludl9yYW5nZShzdGFydCwgZW5kKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRlcl9jbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAob3V0ZXJfY2FjaGUuY2xlYW5fcmFuZ2UpCisJCW91dGVyX2NhY2hlLmNsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpOworfQorc3RhdGljIGlubGluZSB2b2lkIG91dGVyX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmIChvdXRlcl9jYWNoZS5mbHVzaF9yYW5nZSkKKwkJb3V0ZXJfY2FjaGUuZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRlcl9pbnZfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRlcl9jbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sgfQorc3RhdGljIGlubGluZSB2b2lkIG91dGVyX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreyB9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWFybS9jaGVja3N1bS5oCmluZGV4IDhjMGJiNWIuLmVhYTBlZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jaGVja3N1bS5oCkBAIC00MCwxMyArNDAsMjcgQEAKIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqZXJyX3B0cik7CiAKIC8qCisgKiAJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0gd2l0aG91dCBhZGRpbmcgcHNldWRvIGhlYWRlcnMKKyAqLworc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQoreworCV9fYXNtX18oCisJImFkZAklMCwgJTEsICUxLCByb3IgIzE2CUAgY3N1bV9mb2xkIgorCTogIj1yIiAoc3VtKQorCTogInIiIChzdW0pCisJOiAiY2MiKTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikofihfX2ZvcmNlIHUzMilzdW0gPj4gMTYpOworfQorCisvKgogICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAogICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KICAqLwogc3RhdGljIGlubGluZSBfX3N1bTE2CiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQogewotCXVuc2lnbmVkIGludCBzdW0sIHRtcDE7CisJdW5zaWduZWQgaW50IHRtcDE7CisJX193c3VtIHN1bTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSJsZHIJJTAsIFslMV0sICM0CQlAIGlwX2Zhc3RfY3N1bQkJXG5cCkBAIC02MiwyOSArNzYsMTEgQEAKIAlzdWJuZQklMiwgJTIsICMxCQlAIHdpdGhvdXQgZGVzdHJveWluZwlcblwKIAlibmUJMWIJCQlAIHRoZSBjYXJyeSBmbGFnCVxuXAogCWFkY3MJJTAsICUwLCAlMwkJCQkJXG5cCi0JYWRjCSUwLCAlMCwgIzAJCQkJCVxuXAotCWFkZHMJJTAsICUwLCAlMCwgbHNsICMxNgkJCQlcblwKLQlhZGRjcwklMCwgJTAsICMweDEwMDAwCQkJCVxuXAotCW12bgklMCwgJTAJCQkJCQlcblwKLQltb3YJJTAsICUwLCBsc3IgIzE2IgorCWFkYwklMCwgJTAsICMwIgogCTogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKSwgIj1yIiAodG1wMSkKIAk6ICIxIiAoaXBoKSwgIjIiIChpaGwpCiAJOiAiY2MiLCAibWVtb3J5Iik7Ci0JcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOwotfQotCi0vKgotICogCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIHdpdGhvdXQgYWRkaW5nIHBzZXVkbyBoZWFkZXJzCi0gKi8KLXN0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKLXsKLQlfX2FzbV9fKAotCSJhZGRzCSUwLCAlMSwgJTEsIGxzbCAjMTYJQCBjc3VtX2ZvbGQJCVxuXAotCWFkZGNzCSUwLCAlMCwgIzB4MTAwMDAiCi0JOiAiPXIiIChzdW0pCi0JOiAiciIgKHN1bSkKLQk6ICJjYyIpOwotCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KSh+KF9fZm9yY2UgdTMyKXN1bSA+PiAxNik7CisJcmV0dXJuIGNzdW1fZm9sZChzdW0pOwogfQogCiBzdGF0aWMgaW5saW5lIF9fd3N1bQpAQCAtMTE0LDIzICsxMTAsNyBAQAogY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKIAkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKLQlfX2FzbV9fKAotCSJhZGRzCSUwLCAlMSwgJTIJCUAgY3N1bV90Y3B1ZHBfbWFnaWMJXG5cCi0JYWRjcwklMCwgJTAsICUzCQkJCQlcbiIKLSNpZmRlZiBfX0FSTUVCX18KLQkiYWRjcwklMCwgJTAsICU0CQkJCQlcbiIKLSNlbHNlCi0JImFkY3MJJTAsICUwLCAlNCwgbHNsICM4CQkJCVxuIgotI2VuZGlmCi0JImFkY3MJJTAsICUwLCAlNQkJCQkJXG5cCi0JYWRjCSUwLCAlMCwgIzAJCQkJCVxuXAotCWFkZHMJJTAsICUwLCAlMCwgbHNsICMxNgkJCQlcblwKLQlhZGRjcwklMCwgJTAsICMweDEwMDAwCQkJCVxuXAotCW12bgklMCwgJTAiCi0JOiAiPSZyIihzdW0pCi0JOiAiciIgKHN1bSksICJyIiAoZGFkZHIpLCAiciIgKHNhZGRyKSwgInIiIChsZW4pLCAiSXIiIChodG9ucyhwcm90bykpCi0JOiAiY2MiKTsKLQlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikoKF9fZm9yY2UgdTMyKXN1bSA+PiAxNik7CisJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsIGRhZGRyLCBsZW4sIHByb3RvLCBzdW0pKTsKIH0KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZGV2aWNlLmggYi9pbmNsdWRlL2FzbS1hcm0vZGV2aWNlLmgKaW5kZXggZDhmOTg3Mi4uYzYxNjQyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2RldmljZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9kZXZpY2UuaApAQCAtMyw1ICszLDEzIEBACiAgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MgogICovCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZGV2aWNlLmg+CisjaWZuZGVmIEFTTUFSTV9ERVZJQ0VfSAorI2RlZmluZSBBU01BUk1fREVWSUNFX0gKIAorc3RydWN0IGRldl9hcmNoZGF0YSB7CisjaWZkZWYgQ09ORklHX0RNQUJPVU5DRQorCXN0cnVjdCBkbWFib3VuY2VfZGV2aWNlX2luZm8gKmRtYWJvdW5jZTsKKyNlbmRpZgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCmluZGV4IDliYzQ2YjQuLmFiZmI3NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCkBAIC0xNyw3ICsxNyw3IEBACiAgKiBwbGF0Zm9ybXMgd2l0aCBDT05GSUdfRE1BQk9VTkNFLgogICogVXNlIHRoZSBkcml2ZXIgRE1BIHN1cHBvcnQgLSBzZWUgZG1hLW1hcHBpbmcuaCAoZG1hX3N5bmNfKikKICAqLwotZXh0ZXJuIHZvaWQgY29uc2lzdGVudF9zeW5jKHZvaWQgKmthZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHJ3KTsKK2V4dGVybiB2b2lkIGNvbnNpc3RlbnRfc3luYyhjb25zdCB2b2lkICprYWRkciwgc2l6ZV90IHNpemUsIGludCBydyk7CiAKIC8qCiAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gZGV2aWNlIERNQSBhZGRyZXNzIG1hc2sgY2FuIGJlIHN1cHBvcnRlZApAQCAtNjEsNiArNjEsMjIgQEAKIAlyZXR1cm4gZG1hX2FkZHIgPT0gfjA7CiB9CiAKKy8qCisgKiBEdW1teSBub25jb2hlcmVudCBpbXBsZW1lbnRhdGlvbi4gIFdlIGRvbid0IHByb3ZpZGUgYSBkbWFfY2FjaGVfc3luYworICogZnVuY3Rpb24gc28gZHJpdmVycyB1c2luZyB0aGlzIEFQSSBhcmUgaGlnaGxpZ2h0ZWQgd2l0aCBidWlsZCB3YXJuaW5ncy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICoKK2RtYV9hbGxvY19ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfZnJlZV9ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKKwkJICAgICBkbWFfYWRkcl90IGhhbmRsZSkKK3sKK30KKwogLyoqCiAgKiBkbWFfYWxsb2NfY29oZXJlbnQgLSBhbGxvY2F0ZSBjb25zaXN0ZW50IG1lbW9yeSBmb3IgRE1BCiAgKiBAZGV2OiB2YWxpZCBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIsIG9yIE5VTEwgZm9yIElTQSBhbmQgRUlTQS1saWtlIGRldmljZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9kb21haW4uaCBiL2luY2x1ZGUvYXNtLWFybS9kb21haW4uaAppbmRleCA0YzI4ODVhLi4zYzEyYTc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oCkBAIC01Nyw2ICs1Nyw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKIAkibWNyCXAxNSwgMCwgJTAsIGMzLCBjMAlAIHNldCBkb21haW4iCVwKIAkgIDogOiAiciIgKHgpKTsJCQkJCVwKKwlpc2IoKTsJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBtb2RpZnlfZG9tYWluKGRvbSx0eXBlKQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2FybV9zY3UuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9hcm1fc2N1LmgKaW5kZXggOTkwM2Y2MC4uN2QyOGViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2FybV9zY3UuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvYXJtX3NjdS5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBBU01BUk1fSEFSRFdBUkVfQVJNX1NDVV9ICiAjZGVmaW5lIEFTTUFSTV9IQVJEV0FSRV9BUk1fU0NVX0gKIAorI2luY2x1ZGUgPGFzbS9hcmNoL3NjdS5oPgorCiAvKgogICogU0NVIHJlZ2lzdGVycwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDAyOWE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fSEFSRFdBUkVfTDJYMF9ICisjZGVmaW5lIF9fQVNNX0FSTV9IQVJEV0FSRV9MMlgwX0gKKworI2RlZmluZSBMMlgwX0NBQ0hFX0lECQkJMHgwMDAKKyNkZWZpbmUgTDJYMF9DQUNIRV9UWVBFCQkJMHgwMDQKKyNkZWZpbmUgTDJYMF9DVFJMCQkJMHgxMDAKKyNkZWZpbmUgTDJYMF9BVVhfQ1RSTAkJCTB4MTA0CisjZGVmaW5lIEwyWDBfRVZFTlRfQ05UX0NUUkwJCTB4MjAwCisjZGVmaW5lIEwyWDBfRVZFTlRfQ05UMV9DRkcJCTB4MjA0CisjZGVmaW5lIEwyWDBfRVZFTlRfQ05UMF9DRkcJCTB4MjA4CisjZGVmaW5lIEwyWDBfRVZFTlRfQ05UMV9WQUwJCTB4MjBDCisjZGVmaW5lIEwyWDBfRVZFTlRfQ05UMF9WQUwJCTB4MjEwCisjZGVmaW5lIEwyWDBfSU5UUl9NQVNLCQkJMHgyMTQKKyNkZWZpbmUgTDJYMF9NQVNLRURfSU5UUl9TVEFUCQkweDIxOAorI2RlZmluZSBMMlgwX1JBV19JTlRSX1NUQVQJCTB4MjFDCisjZGVmaW5lIEwyWDBfSU5UUl9DTEVBUgkJCTB4MjIwCisjZGVmaW5lIEwyWDBfQ0FDSEVfU1lOQwkJCTB4NzMwCisjZGVmaW5lIEwyWDBfSU5WX0xJTkVfUEEJCTB4NzcwCisjZGVmaW5lIEwyWDBfSU5WX1dBWQkJCTB4NzdDCisjZGVmaW5lIEwyWDBfQ0xFQU5fTElORV9QQQkJMHg3QjAKKyNkZWZpbmUgTDJYMF9DTEVBTl9MSU5FX0lEWAkJMHg3QjgKKyNkZWZpbmUgTDJYMF9DTEVBTl9XQVkJCQkweDdCQworI2RlZmluZSBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBCQkweDdGMAorI2RlZmluZSBMMlgwX0NMRUFOX0lOVl9MSU5FX0lEWAkJMHg3RjgKKyNkZWZpbmUgTDJYMF9DTEVBTl9JTlZfV0FZCQkweDdGQworI2RlZmluZSBMMlgwX0xPQ0tET1dOX1dBWV9ECQkweDkwMAorI2RlZmluZSBMMlgwX0xPQ0tET1dOX1dBWV9JCQkweDkwNAorI2RlZmluZSBMMlgwX1RFU1RfT1BFUkFUSU9OCQkweEYwMAorI2RlZmluZSBMMlgwX0xJTkVfREFUQQkJCTB4RjEwCisjZGVmaW5lIEwyWDBfTElORV9UQUcJCQkweEYzMAorI2RlZmluZSBMMlgwX0RFQlVHX0NUUkwJCQkweEY0MAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgX19pbml0IGwyeDBfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIF9fdTMyIGF1eF92YWwsIF9fdTMyIGF1eF9tYXNrKTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9naWMuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9naWMuaAppbmRleCAzZmE1ZWI3Li45NjZlNDI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZ2ljLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2dpYy5oCkBAIC0zMyw4ICszMyw5IEBACiAjZGVmaW5lIEdJQ19ESVNUX1NPRlRJTlQJCTB4ZjAwCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi12b2lkIGdpY19kaXN0X2luaXQodm9pZCBfX2lvbWVtICpiYXNlKTsKLXZvaWQgZ2ljX2NwdV9pbml0KHZvaWQgX19pb21lbSAqYmFzZSk7Cit2b2lkIGdpY19kaXN0X2luaXQodW5zaWduZWQgaW50IGdpY19uciwgdm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0KTsKK3ZvaWQgZ2ljX2NwdV9pbml0KHVuc2lnbmVkIGludCBnaWNfbnIsIHZvaWQgX19pb21lbSAqYmFzZSk7Cit2b2lkIGdpY19jYXNjYWRlX2lycSh1bnNpZ25lZCBpbnQgZ2ljX25yLCB1bnNpZ25lZCBpbnQgaXJxKTsKIHZvaWQgZ2ljX3JhaXNlX3NvZnRpcnEoY3B1bWFza190IGNwdW1hc2ssIHVuc2lnbmVkIGludCBpcnEpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb3AzeHguaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb3AzeHguaAppbmRleCAxM2FjOGE0Li4xNTE0MWE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9wM3h4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcDN4eC5oCkBAIC0zNyw2ICszNywxMyBAQAogI2RlZmluZSBJT1AzWFhfUEVSSVBIRVJBTF9QSFlTX0JBU0UJMHhmZmZmZTAwMAogI2RlZmluZSBJT1AzWFhfUEVSSVBIRVJBTF9WSVJUX0JBU0UJMHhmZWZmZTAwMAogI2RlZmluZSBJT1AzWFhfUEVSSVBIRVJBTF9TSVpFCQkweDAwMDAyMDAwCisjZGVmaW5lIElPUDNYWF9QRVJJUEhFUkFMX1VQUEVSX1BBIChJT1AzWFhfUEVSSVBIRVJBTF9QSFlTX0JBU0UgK1wKKwkJCQkJSU9QM1hYX1BFUklQSEVSQUxfU0laRSAtIDEpCisjZGVmaW5lIElPUDNYWF9QRVJJUEhFUkFMX1VQUEVSX1ZBIChJT1AzWFhfUEVSSVBIRVJBTF9WSVJUX0JBU0UgK1wKKwkJCQkJSU9QM1hYX1BFUklQSEVSQUxfU0laRSAtIDEpCisjZGVmaW5lIElPUDNYWF9QTU1SX1BIWVNfVE9fVklSVChhZGRyKSAodTMyKSAoKHUzMikgYWRkciAtXAorCQkJCQkoSU9QM1hYX1BFUklQSEVSQUxfUEhZU19CQVNFXAorCQkJCQktIElPUDNYWF9QRVJJUEhFUkFMX1ZJUlRfQkFTRSkpCiAjZGVmaW5lIElPUDNYWF9SRUdfQUREUihyZWcpCQkoSU9QM1hYX1BFUklQSEVSQUxfVklSVF9CQVNFICsgKHJlZykpCiAKIC8qIEFkZHJlc3MgVHJhbnNsYXRpb24gVW5pdCAgKi8KQEAgLTE4MSwxNCArMTg4LDEwIEBACiAjZGVmaW5lIElPUDNYWF9UVV9UUlIxCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1RJTUVSX1JFRygweDAwMTQpCiAjZGVmaW5lIElPUDNYWF9UVV9USVNSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1RJTUVSX1JFRygweDAwMTgpCiAjZGVmaW5lIElPUDNYWF9UVV9XRFRDUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9USU1FUl9SRUcoMHgwMDFjKQotI2RlZmluZSBJT1AzWFhfVE1SX1RDCQkweDAxCi0jZGVmaW5lIElPUDNYWF9UTVJfRU4JCTB4MDIKLSNkZWZpbmUgSU9QM1hYX1RNUl9SRUxPQUQJMHgwNAotI2RlZmluZSBJT1AzWFhfVE1SX1BSSVZJTEVHRUQJMHgwOQotI2RlZmluZSBJT1AzWFhfVE1SX1JBVElPXzFfMQkweDAwCi0jZGVmaW5lIElPUDNYWF9UTVJfUkFUSU9fNF8xCTB4MTAKLSNkZWZpbmUgSU9QM1hYX1RNUl9SQVRJT184XzEJMHgyMAotI2RlZmluZSBJT1AzWFhfVE1SX1JBVElPXzE2XzEJMHgzMAorI2RlZmluZSBJT1BfVE1SX0VOCSAgICAweDAyCisjZGVmaW5lIElPUF9UTVJfUkVMT0FECSAgICAweDA0CisjZGVmaW5lIElPUF9UTVJfUFJJVklMRUdFRCAweDA4CisjZGVmaW5lIElPUF9UTVJfUkFUSU9fMV8xICAweDAwCiAKIC8qIEFwcGxpY2F0aW9uIGFjY2VsZXJhdG9yIHVuaXQgICovCiAjZGVmaW5lIElPUDNYWF9BQVVfQUNSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDgwMCkKQEAgLTI1OCw0MyArMjYxLDYzIEBACiAjZGVmaW5lIElPUDNYWF9QQ0lfTE9XRVJfSU9fUEEJCTB4OTAwMDAwMDAKICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9JT19WQQkJMHhmZTAwMDAwMAogI2RlZmluZSBJT1AzWFhfUENJX0xPV0VSX0lPX0JBCQkoKklPUDNYWF9PSU9XVFZSKQorI2RlZmluZSBJT1AzWFhfUENJX1VQUEVSX0lPX1BBCQkoSU9QM1hYX1BDSV9MT1dFUl9JT19QQSArXAorCQkJCQlJT1AzWFhfUENJX0lPX1dJTkRPV19TSVpFIC0gMSkKKyNkZWZpbmUgSU9QM1hYX1BDSV9VUFBFUl9JT19WQQkJKElPUDNYWF9QQ0lfTE9XRVJfSU9fVkEgK1wKKwkJCQkJSU9QM1hYX1BDSV9JT19XSU5ET1dfU0laRSAtIDEpCisjZGVmaW5lIElPUDNYWF9QQ0lfSU9fUEhZU19UT19WSVJUKGFkZHIpICgoKHUzMikgYWRkciAtXAorCQkJCQlJT1AzWFhfUENJX0xPV0VSX0lPX1BBKSArXAorCQkJCQlJT1AzWFhfUENJX0xPV0VSX0lPX1ZBKQogCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiB2b2lkIGlvcDN4eF9tYXBfaW8odm9pZCk7Ci12b2lkIGlvcDN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7Ci11bnNpZ25lZCBsb25nIGlvcDN4eF9nZXR0aW1lb2Zmc2V0KHZvaWQpOwordm9pZCBpb3BfaW5pdF9jcDZfaGFuZGxlcih2b2lkKTsKK3ZvaWQgaW9wX2luaXRfdGltZSh1bnNpZ25lZCBsb25nIHRpY2tyYXRlKTsKK3Vuc2lnbmVkIGxvbmcgaW9wX2dldHRpbWVvZmZzZXQodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV90bXIwKHUzMiB2YWwpCit7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMCwgYzEsIDAiIDogOiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfdG1yMSh1MzIgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzEsIGMxLCAwIiA6IDogInIiICh2YWwpKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcmVhZF90Y3IwKHZvaWQpCit7CisJdTMyIHZhbDsKKwlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGMyLCBjMSwgMCIgOiAiPXIiICh2YWwpKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHUzMiByZWFkX3RjcjEodm9pZCkKK3sKKwl1MzIgdmFsOworCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzMsIGMxLCAwIiA6ICI9ciIgKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV90cnIwKHUzMiB2YWwpCit7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNCwgYzEsIDAiIDogOiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfdHJyMSh1MzIgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzUsIGMxLCAwIiA6IDogInIiICh2YWwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3Rpc3IodTMyIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGM2LCBjMSwgMCIgOiA6ICJyIiAodmFsKSk7Cit9CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlvcDN4eF9pMmMwX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlvcDN4eF9pMmMxX2RldmljZTsKIAotZXh0ZXJuIGlubGluZSB2b2lkIGlvcDN4eF9jcDZfZW5hYmxlKHZvaWQpCi17Ci0JdTMyIHRlbXA7Ci0KLQlhc20gdm9sYXRpbGUgKAotCQkibXJjCXAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgotCQkib3JyCSUwLCAlMCwgIygxIDw8IDYpXG5cdCIKLQkJIm1jcglwMTUsIDAsICUwLCBjMTUsIGMxLCAwXG5cdCIKLQkJIm1yYwlwMTUsIDAsICUwLCBjMTUsIGMxLCAwXG5cdCIKLQkJIm1vdgklMCwgJTBcblx0IgotCQkic3ViCXBjLCBwYywgIzRcblx0IgotCQk6ICI9ciIgKHRlbXApICk7Ci19Ci0KLWV4dGVybiBpbmxpbmUgdm9pZCBpb3AzeHhfY3A2X2Rpc2FibGUodm9pZCkKLXsKLQl1MzIgdGVtcDsKLQotCWFzbSB2b2xhdGlsZSAoCi0JCSJtcmMJcDE1LCAwLCAlMCwgYzE1LCBjMSwgMFxuXHQiCi0JCSJiaWMJJTAsICUwLCAjKDEgPDwgNilcblx0IgotCQkibWNyCXAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgotCQkibXJjCXAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgotCQkibW92CSUwLCAlMFxuXHQiCi0JCSJzdWIJcGMsIHBjLCAjNFxuXHQiCi0JCTogIj1yIiAodGVtcCkgKTsKLX0KICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zYTExMTEuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zYTExMTEuaAppbmRleCA2YWEwYTViLi42MWIxZDA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvc2ExMTExLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3NhMTExMS5oCkBAIC0yOSw2ICsyOSw5IEBACiAjZGVmaW5lIF9TQTExMTEoeCkJKCh4KSArIHNhMTExMS0+cmVzb3VyY2Uuc3RhcnQpCiAjZW5kaWYKIAorI2RlZmluZSBzYTExMTFfd3JpdGVsKHZhbCxhZGRyKQlfX3Jhd193cml0ZWwodmFsLCBhZGRyKQorI2RlZmluZSBzYTExMTFfcmVhZGwoYWRkcikJX19yYXdfcmVhZGwoYWRkcikKKwogLyoKICAqIDI2IGJpdHMgb2YgdGhlIFNBLTExMTAgYWRkcmVzcyBidXMgYXJlIGF2YWlsYWJsZSB0byB0aGUgU0EtMTExMS4KICAqIFVzZSB0aGVzZSB3aGVuIGZlZWRpbmcgdGFyZ2V0IGFkZHJlc3NlcyB0byB0aGUgRE1BIGVuZ2luZXMuCkBAIC00NSwxNCArNDgsNiBAQAogI2RlZmluZSBTQTExMTFfU0FDX0RNQV9NSU5fWEZFUgkoMHg4MDApCiAKIC8qCi0gKiBTQTExMTEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuCi0gKi8KLSNkZWZpbmUgX19DQ1JFRyh4KQlfX1JFR1AoU0ExMTExX1ZCQVNFICsgKHgpKQotCi0jZGVmaW5lIHNhMTExMV93cml0ZWwodmFsLGFkZHIpCV9fcmF3X3dyaXRlbCh2YWwsIGFkZHIpCi0jZGVmaW5lIHNhMTExMV9yZWFkbChhZGRyKQlfX3Jhd19yZWFkbChhZGRyKQotCi0vKgogICogU3lzdGVtIEJ1cyBJbnRlcmZhY2UgKFNCSSkKICAqCiAgKiBSZWdpc3RlcnMKQEAgLTE5NCw1NSArMTg5LDM3IEBACiAgKiAgICBTQURSICAgICAgICAgICAgICBTZXJpYWwgQXVkaW8gRGF0YSBSZWdpc3RlciAoMTYgeCAzMi1iaXQpCiAgKi8KIAotI2RlZmluZSBfU0FDUjAgICAgICAgICAgX1NBMTExMSggMHgwNjAwICkKLSNkZWZpbmUgX1NBQ1IxICAgICAgICAgIF9TQTExMTEoIDB4MDYwNCApCi0jZGVmaW5lIF9TQUNSMiAgICAgICAgICBfU0ExMTExKCAweDA2MDggKQotI2RlZmluZSBfU0FTUjAgICAgICAgICAgX1NBMTExMSggMHgwNjBjICkKLSNkZWZpbmUgX1NBU1IxICAgICAgICAgIF9TQTExMTEoIDB4MDYxMCApCi0jZGVmaW5lIF9TQVNDUiAgICAgICAgICBfU0ExMTExKCAweDA2MTggKQotI2RlZmluZSBfTDNfQ0FSICAgICAgICAgX1NBMTExMSggMHgwNjFjICkKLSNkZWZpbmUgX0wzX0NEUiAgICAgICAgIF9TQTExMTEoIDB4MDYyMCApCi0jZGVmaW5lIF9BQ0NBUiAgICAgICAgICBfU0ExMTExKCAweDA2MjQgKQotI2RlZmluZSBfQUNDRFIgICAgICAgICAgX1NBMTExMSggMHgwNjI4ICkKLSNkZWZpbmUgX0FDU0FSICAgICAgICAgIF9TQTExMTEoIDB4MDYyYyApCi0jZGVmaW5lIF9BQ1NEUiAgICAgICAgICBfU0ExMTExKCAweDA2MzAgKQotI2RlZmluZSBfU0FEVENTICAgICAgICAgX1NBMTExMSggMHgwNjM0ICkKLSNkZWZpbmUgX1NBRFRTQSAgICAgICAgIF9TQTExMTEoIDB4MDYzOCApCi0jZGVmaW5lIF9TQURUQ0EgICAgICAgICBfU0ExMTExKCAweDA2M2MgKQotI2RlZmluZSBfU0FEVFNCICAgICAgICAgX1NBMTExMSggMHgwNjQwICkKLSNkZWZpbmUgX1NBRFRDQiAgICAgICAgIF9TQTExMTEoIDB4MDY0NCApCi0jZGVmaW5lIF9TQURSQ1MgICAgICAgICBfU0ExMTExKCAweDA2NDggKQotI2RlZmluZSBfU0FEUlNBICAgICAgICAgX1NBMTExMSggMHgwNjRjICkKLSNkZWZpbmUgX1NBRFJDQSAgICAgICAgIF9TQTExMTEoIDB4MDY1MCApCi0jZGVmaW5lIF9TQURSU0IgICAgICAgICBfU0ExMTExKCAweDA2NTQgKQotI2RlZmluZSBfU0FEUkNCICAgICAgICAgX1NBMTExMSggMHgwNjU4ICkKLSNkZWZpbmUgX1NBSVRSICAgICAgICAgIF9TQTExMTEoIDB4MDY1YyApCi0jZGVmaW5lIF9TQURSICAgICAgICAgICBfU0ExMTExKCAweDA2ODAgKQorI2RlZmluZSBTQTExMTFfU0VSQVVESU8JCTB4MDYwMAogCi0jZGVmaW5lIFNBQ1IwCQlfX0NDUkVHKDB4MDYwMCkKLSNkZWZpbmUgU0FDUjEJCV9fQ0NSRUcoMHgwNjA0KQotI2RlZmluZSBTQUNSMgkJX19DQ1JFRygweDA2MDgpCi0jZGVmaW5lIFNBU1IwCQlfX0NDUkVHKDB4MDYwYykKLSNkZWZpbmUgU0FTUjEJCV9fQ0NSRUcoMHgwNjEwKQotI2RlZmluZSBTQVNDUgkJX19DQ1JFRygweDA2MTgpCi0jZGVmaW5lIEwzX0NBUgkJX19DQ1JFRygweDA2MWMpCi0jZGVmaW5lIEwzX0NEUgkJX19DQ1JFRygweDA2MjApCi0jZGVmaW5lIEFDQ0FSCQlfX0NDUkVHKDB4MDYyNCkKLSNkZWZpbmUgQUNDRFIJCV9fQ0NSRUcoMHgwNjI4KQotI2RlZmluZSBBQ1NBUgkJX19DQ1JFRygweDA2MmMpCi0jZGVmaW5lIEFDU0RSCQlfX0NDUkVHKDB4MDYzMCkKLSNkZWZpbmUgU0FEVENTCQlfX0NDUkVHKDB4MDYzNCkKLSNkZWZpbmUgU0FEVFNBCQlfX0NDUkVHKDB4MDYzOCkKLSNkZWZpbmUgU0FEVENBCQlfX0NDUkVHKDB4MDYzYykKLSNkZWZpbmUgU0FEVFNCCQlfX0NDUkVHKDB4MDY0MCkKLSNkZWZpbmUgU0FEVENCCQlfX0NDUkVHKDB4MDY0NCkKLSNkZWZpbmUgU0FEUkNTCQlfX0NDUkVHKDB4MDY0OCkKLSNkZWZpbmUgU0FEUlNBCQlfX0NDUkVHKDB4MDY0YykKLSNkZWZpbmUgU0FEUkNBCQlfX0NDUkVHKDB4MDY1MCkKLSNkZWZpbmUgU0FEUlNCCQlfX0NDUkVHKDB4MDY1NCkKLSNkZWZpbmUgU0FEUkNCCQlfX0NDUkVHKDB4MDY1OCkKLSNkZWZpbmUgU0FJVFIJCV9fQ0NSRUcoMHgwNjVjKQotI2RlZmluZSBTQURSCQlfX0NDUkVHKDB4MDY4MCkKKy8qCisgKiBUaGVzZSBhcmUgb2Zmc2V0cyBmcm9tIHRoZSBhYm92ZSBiYXNlLgorICovCisjZGVmaW5lIFNBMTExMV9TQUNSMAkJMHgwMAorI2RlZmluZSBTQTExMTFfU0FDUjEJCTB4MDQKKyNkZWZpbmUgU0ExMTExX1NBQ1IyCQkweDA4CisjZGVmaW5lIFNBMTExMV9TQVNSMAkJMHgwYworI2RlZmluZSBTQTExMTFfU0FTUjEJCTB4MTAKKyNkZWZpbmUgU0ExMTExX1NBU0NSCQkweDE4CisjZGVmaW5lIFNBMTExMV9MM19DQVIJCTB4MWMKKyNkZWZpbmUgU0ExMTExX0wzX0NEUgkJMHgyMAorI2RlZmluZSBTQTExMTFfQUNDQVIJCTB4MjQKKyNkZWZpbmUgU0ExMTExX0FDQ0RSCQkweDI4CisjZGVmaW5lIFNBMTExMV9BQ1NBUgkJMHgyYworI2RlZmluZSBTQTExMTFfQUNTRFIJCTB4MzAKKyNkZWZpbmUgU0ExMTExX1NBRFRDUwkJMHgzNAorI2RlZmluZSBTQTExMTFfU0FEVFNBCQkweDM4CisjZGVmaW5lIFNBMTExMV9TQURUQ0EJCTB4M2MKKyNkZWZpbmUgU0ExMTExX1NBRFRTQgkJMHg0MAorI2RlZmluZSBTQTExMTFfU0FEVENCCQkweDQ0CisjZGVmaW5lIFNBMTExMV9TQURSQ1MJCTB4NDgKKyNkZWZpbmUgU0ExMTExX1NBRFJTQQkJMHg0YworI2RlZmluZSBTQTExMTFfU0FEUkNBCQkweDUwCisjZGVmaW5lIFNBMTExMV9TQURSU0IJCTB4NTQKKyNkZWZpbmUgU0ExMTExX1NBRFJDQgkJMHg1OAorI2RlZmluZSBTQTExMTFfU0FJVFIJCTB4NWMKKyNkZWZpbmUgU0ExMTExX1NBRFIJCTB4ODAKKworI2lmbmRlZiBDT05GSUdfQVJDSF9QWEEKIAogI2RlZmluZSBTQUNSMF9FTkIJKDE8PDApCiAjZGVmaW5lIFNBQ1IwX0JDS0QJKDE8PDIpCkBAIC0zMzAsNiArMzA3LDggQEAKICNkZWZpbmUgU0FJVFJfUkRCREEJKDE8PDEwKQogI2RlZmluZSBTQUlUUl9SREJEQgkoMTw8MTEpCiAKKyNlbmRpZiAgLyogIUNPTkZJR19BUkNIX1BYQSAqLworCiAvKgogICogR2VuZXJhbC1QdXJwb3NlIEkvTyBJbnRlcmZhY2UKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0va2V4ZWMuaCBiL2luY2x1ZGUvYXNtLWFybS9rZXhlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMWM2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0va2V4ZWMuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9BUk1fS0VYRUNfSAorI2RlZmluZSBfQVJNX0tFWEVDX0gKKworI2lmZGVmIENPTkZJR19LRVhFQworCisvKiBNYXhpbXVtIHBoeXNpY2FsIGFkZHJlc3Mgd2UgY2FuIHVzZSBwYWdlcyBmcm9tICovCisjZGVmaW5lIEtFWEVDX1NPVVJDRV9NRU1PUllfTElNSVQgKC0xVUwpCisvKiBNYXhpbXVtIGFkZHJlc3Mgd2UgY2FuIHJlYWNoIGluIHBoeXNpY2FsIGFkZHJlc3MgbW9kZSAqLworI2RlZmluZSBLRVhFQ19ERVNUSU5BVElPTl9NRU1PUllfTElNSVQgKC0xVUwpCisvKiBNYXhpbXVtIGFkZHJlc3Mgd2UgY2FuIHVzZSBmb3IgdGhlIGNvbnRyb2wgY29kZSBidWZmZXIgKi8KKyNkZWZpbmUgS0VYRUNfQ09OVFJPTF9NRU1PUllfTElNSVQgVEFTS19TSVpFCisKKyNkZWZpbmUgS0VYRUNfQ09OVFJPTF9DT0RFX1NJWkUJNDA5NgorCisjZGVmaW5lIEtFWEVDX0FSQ0ggS0VYRUNfQVJDSF9BUk0KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBNQVhfTk9URV9CWVRFUyAxMDI0CisKK3N0cnVjdCBraW1hZ2U7CisvKiBQcm92aWRlIGEgZHVtbXkgZGVmaW5pdGlvbiB0byBhdm9pZCBidWlsZCBmYWlsdXJlcy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9zZXR1cF9yZWdzKHN0cnVjdCBwdF9yZWdzICpuZXdyZWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpvbGRyZWdzKSB7IH0KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogQ09ORklHX0tFWEVDICovCisKKyNlbmRpZiAvKiBfQVJNX0tFWEVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCmluZGV4IGI4Y2YyZDUuLjdiMmJhZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaApAQCAtMTc1LDE5ICsxNzUsMjkgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qCi0gKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBoYW5kbGUgdGhlIGNhY2hlIGFuZCBidWZmZXJhYmxlIGJpdHMuLi4KKyAqIFRoZSBwZ3Byb3RfKiBhbmQgcHJvdGVjdGlvbl9tYXAgZW50cmllcyB3aWxsIGJlIGZpeGVkIHVwIGluIHJ1bnRpbWUKKyAqIHRvIGluY2x1ZGUgdGhlIGNhY2hhYmxlIGFuZCBidWZmZXJhYmxlIGJpdHMgYmFzZWQgb24gbWVtb3J5IHBvbGljeSwKKyAqIGFzIHdlbGwgYXMgYW55IGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgYml0cyBsaWtlIGdsb2JhbC9BU0lEIGFuZCBTTVAKKyAqIHNoYXJlZCBtYXBwaW5nIGJpdHMuCiAgKi8KICNkZWZpbmUgX0xfUFRFX0RFRkFVTFQJTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfQ0FDSEVBQkxFIHwgTF9QVEVfQlVGRkVSQUJMRQogI2RlZmluZSBfTF9QVEVfUkVBRAlMX1BURV9VU0VSIHwgTF9QVEVfRVhFQwogCitleHRlcm4gcGdwcm90X3QJCXBncHJvdF91c2VyOwogZXh0ZXJuIHBncHJvdF90CQlwZ3Byb3Rfa2VybmVsOwogCi0jZGVmaW5lIFBBR0VfTk9ORSAgICAgICBfX3BncHJvdChfTF9QVEVfREVGQVVMVCkKLSNkZWZpbmUgUEFHRV9DT1BZICAgICAgIF9fcGdwcm90KF9MX1BURV9ERUZBVUxUIHwgX0xfUFRFX1JFQUQpCi0jZGVmaW5lIFBBR0VfU0hBUkVEICAgICBfX3BncHJvdChfTF9QVEVfREVGQVVMVCB8IF9MX1BURV9SRUFEIHwgTF9QVEVfV1JJVEUpCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFkgICBfX3BncHJvdChfTF9QVEVfREVGQVVMVCB8IF9MX1BURV9SRUFEKQorI2RlZmluZSBQQUdFX05PTkUJcGdwcm90X3VzZXIKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KHBncHJvdF92YWwocGdwcm90X3VzZXIpIHwgX0xfUFRFX1JFQUQpCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KHBncHJvdF92YWwocGdwcm90X3VzZXIpIHwgX0xfUFRFX1JFQUQgfCBcCisJCQkJIExfUFRFX1dSSVRFKQorI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KHBncHJvdF92YWwocGdwcm90X3VzZXIpIHwgX0xfUFRFX1JFQUQpCiAjZGVmaW5lIFBBR0VfS0VSTkVMCXBncHJvdF9rZXJuZWwKIAorI2RlZmluZSBfX1BBR0VfTk9ORQlfX3BncHJvdChfTF9QVEVfREVGQVVMVCkKKyNkZWZpbmUgX19QQUdFX0NPUFkJX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQgfCBfTF9QVEVfUkVBRCkKKyNkZWZpbmUgX19QQUdFX1NIQVJFRAlfX3BncHJvdChfTF9QVEVfREVGQVVMVCB8IF9MX1BURV9SRUFEIHwgTF9QVEVfV1JJVEUpCisjZGVmaW5lIF9fUEFHRV9SRUFET05MWQlfX3BncHJvdChfTF9QVEVfREVGQVVMVCB8IF9MX1BURV9SRUFEKQorCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKIC8qCkBAIC0xOTgsMjMgKzIwOCwyMyBAQAogICogIDIpIElmIHdlIGNvdWxkIGRvIGV4ZWN1dGUgcHJvdGVjdGlvbiwgdGhlbiByZWFkIGlzIGltcGxpZWQKICAqICAzKSB3cml0ZSBpbXBsaWVzIHJlYWQgcGVybWlzc2lvbnMKICAqLwotI2RlZmluZSBfX1AwMDAgIFBBR0VfTk9ORQotI2RlZmluZSBfX1AwMDEgIFBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19QMDEwICBQQUdFX0NPUFkKLSNkZWZpbmUgX19QMDExICBQQUdFX0NPUFkKLSNkZWZpbmUgX19QMTAwICBQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUDEwMSAgUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1AxMTAgIFBBR0VfQ09QWQotI2RlZmluZSBfX1AxMTEgIFBBR0VfQ09QWQorI2RlZmluZSBfX1AwMDAgIF9fUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMSAgX19QQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMCAgX19QQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExICBfX1BBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAgIF9fUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMDEgIF9fUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AxMTAgIF9fUEFHRV9DT1BZCisjZGVmaW5lIF9fUDExMSAgX19QQUdFX0NPUFkKIAotI2RlZmluZSBfX1MwMDAgIFBBR0VfTk9ORQotI2RlZmluZSBfX1MwMDEgIFBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19TMDEwICBQQUdFX1NIQVJFRAotI2RlZmluZSBfX1MwMTEgIFBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzEwMCAgUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1MxMDEgIFBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19TMTEwICBQQUdFX1NIQVJFRAotI2RlZmluZSBfX1MxMTEgIFBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAwMCAgX19QQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxICBfX1BBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwICBfX1BBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMSAgX19QQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAgIF9fUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMDEgIF9fUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MxMTAgIF9fUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTExICBfX1BBR0VfU0hBUkVECiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY2xvY2suaAppbmRleCA3ZjBlYTAzLi5mNjEzNWRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmgKQEAgLTEsNCArMSw0IEBACi0vKgorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jbG9jay5oCiAgKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suaAogICoKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmggYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmgKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NvbW1vbi1zbWRrLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaAppbmRleCAwZTNhM2JlLi41OGQ5MDk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmgKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuaAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jcHUuaApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY3B1LmgKaW5kZXggYmU0MmU0MC4uMTVkZDE4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY3B1LmgKQEAgLTEsNCArMSw0IEBACi0vKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmgKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY3B1LmgKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KQEAgLTY3LDMgKzY3LDQgQEAKIGV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTJfc3lzY2xhc3M7CiBleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDQwX3N5c2NsYXNzOwogZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0Ml9zeXNjbGFzczsKK2V4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDNfc3lzY2xhc3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9kZXZzLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9kZXZzLmgKaW5kZXggMTRmYjBiYS4uZGRkZjQ4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2RldnMuaApAQCAtMSw0ICsxLDQgQEAKLS8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmgKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZGV2cy5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwogICogQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1OTQwNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZG1hLmgKQEAgLTAsMCArMSw3NyBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9kbWEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTYW1zdW5nIFMzQzI0WFggRE1BIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgZG1hX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuIHMzYzI0MTBfY2hhbnNbUzNDMjQxMF9ETUFfQ0hBTk5FTFNdOworCisjZGVmaW5lIERNQV9DSF9WQUxJRAkJKDE8PDMxKQorI2RlZmluZSBETUFfQ0hfTkVWRVIJCSgxPDwzMCkKKworc3RydWN0IHMzYzI0eHhfZG1hX2FkZHIgeworCXVuc2lnbmVkIGxvbmcJCWZyb207CisJdW5zaWduZWQgbG9uZwkJdG87Cit9OworCisvKiBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwCisgKgorICogdGhpcyBob2xkcyB0aGUgbWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNoYW5uZWwgc2VsZWN0ZWQKKyAqIHRvIGJlIGNvbm5lY3RlZCB0byB0aGUgc3BlY2lmaWVkIGRldmljZQorKi8KKworc3RydWN0IHMzYzI0eHhfZG1hX21hcCB7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJc3RydWN0IHMzYzI0eHhfZG1hX2FkZHIgIGh3X2FkZHI7CisKKwl1bnNpZ25lZCBsb25nCQkgY2hhbm5lbHNbUzNDMjQxMF9ETUFfQ0hBTk5FTFNdOworfTsKKworc3RydWN0IHMzYzI0eHhfZG1hX3NlbGVjdGlvbiB7CisJc3RydWN0IHMzYzI0eHhfZG1hX21hcAkqbWFwOworCXVuc2lnbmVkIGxvbmcJCSBtYXBfc2l6ZTsKKwl1bnNpZ25lZCBsb25nCQkgZGNvbl9tYXNrOworCisJdm9pZAkoKnNlbGVjdCkoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sCisJCQkgIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgKm1hcCk7Cit9OworCitleHRlcm4gaW50IHMzYzI0eHhfZG1hX2luaXRfbWFwKHN0cnVjdCBzM2MyNHh4X2RtYV9zZWxlY3Rpb24gKnNlbCk7CisKKy8qIHN0cnVjdCBzM2MyNHh4X2RtYV9vcmRlcl9jaAorICoKKyAqIGNoYW5uZWwgbWFwIGZvciBvbmUgb2YgdGhlIGBlbnVtIGRtYV9jaGAgZG1hIGNoYW5uZWxzLiB0aGUgbGlzdAorICogZW50cnkgY29udGFpbnMgYSBzZXQgb2YgbG93LWxldmVsIGNoYW5uZWwgbnVtYmVycywgb3JyZWQgd2l0aAorICogRE1BX0NIX1ZBTElELCB3aGljaCBhcmUgY2hlY2tlZCBpbiB0aGUgb3JkZXIgaW4gdGhlIGFycmF5LgorKi8KKworc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyX2NoIHsKKwl1bnNpZ25lZCBpbnQJbGlzdFtTM0MyNDEwX0RNQV9DSEFOTkVMU107CS8qIGxpc3Qgb2YgY2hhbm5lbHMgKi8KKwl1bnNpZ25lZCBpbnQJZmxhZ3M7CQkJCS8qIGZsYWdzICovCit9OworCisvKiBzdHJ1Y3QgczNjMjR4eF9kbWFfb3JkZXIKKyAqCisgKiBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBlaXRoZXIgdGhlIGNvcmUgb3IgdGhlIGJvYXJkIHRvIGdpdmUgdGhlCisgKiBkbWEgc3lzdGVtIGEgaGludCBvbiBob3cgdG8gYWxsb2NhdGUgY2hhbm5lbHMKKyovCisKK3N0cnVjdCBzM2MyNHh4X2RtYV9vcmRlciB7CisJc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyX2NoCWNoYW5uZWxzW0RNQUNIX01BWF07Cit9OworCitleHRlcm4gaW50IHMzYzI0eHhfZG1hX29yZGVyX3NldChzdHJ1Y3QgczNjMjR4eF9kbWFfb3JkZXIgKm1hcCk7CisKKy8qIERNQSBpbml0IGNvZGUsIGNhbGxlZCBmcm9tIHRoZSBjcHUgc3VwcG9ydCBjb2RlICovCisKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfaW5pdCh2b2lkKTsKKworZXh0ZXJuIGludCBzM2MyNHh4X2RtYV9pbml0KHVuc2lnbmVkIGludCBjaGFubmVscywgdW5zaWduZWQgaW50IGlycSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc3RyaWRlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvaXJxLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2lycS5oCmluZGV4IGU1OTEzZGEuLjhhZjZkOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2lycS5oCkBAIC0xLDQgKzEsNCBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5oCisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2lycS5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uaCBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcG0uaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9wbS5oCmluZGV4IGZmZTE5N2EuLmNjNjIzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcG0uaApAQCAtMSw0ICsxLDQgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5oCisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3BtLmgKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglXcml0dGVuIGJ5IEJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQwMC5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDAwLmgKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MDAuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDAwLmgKaW5kZXggOGIyMzk0ZS4uM2E1YTE2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MDAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MDAuaApAQCAtMSw0ICsxLDQgQEAKLS8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDAwLmgKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQwMC5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuaCBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oCmluZGV4IGZiZWQwODQuLjM2ZGUwYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmgKQEAgLTEsNCArMSw0IEBACi0vKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5oCisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaAogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLmggYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaApzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaAppbmRleCBjNmU1NjAzLi4zZWM5NzY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oCkBAIC0xLDQgKzEsNCBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTIuaAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmgKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmgKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmgKaW5kZXggZGNkMzE2MC4uMTA3ODUzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaApAQCAtMSw0ICsxLDQgQEAKLS8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmgKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQ0MC5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQyLmgKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDIuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQyLmgKaW5kZXggMGFlMzdkMi4uNDUxYTIzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDIuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDIuaApAQCAtMSw0ICsxLDQgQEAKLS8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLmgKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQ0Mi5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmggYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWQ4M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmgKQEAgLTAsMCArMSwzMiBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgczNjMjQ0MyBjcHUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQzCisKK3N0cnVjdCBzM2MyNDEwX3VhcnRjZmc7CisKK2V4dGVybiAgaW50IHMzYzI0NDNfaW5pdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgczNjMjQ0M19tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKKworZXh0ZXJuIHZvaWQgczNjMjQ0M19pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKKworZXh0ZXJuIHZvaWQgczNjMjQ0M19pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CisKK2V4dGVybiAgaW50IHMzYzI0NDNfYmFzZWNsa19hZGQodm9pZCk7CisKKyNlbHNlCisjZGVmaW5lIHMzYzI0NDNfaW5pdF9jbG9ja3MgTlVMTAorI2RlZmluZSBzM2MyNDQzX2luaXRfdWFydHMgTlVMTAorI2RlZmluZSBzM2MyNDQzX21hcF9pbyBOVUxMCisjZGVmaW5lIHMzYzI0NDNfaW5pdCBOVUxMCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaAppbmRleCBhYTIyM2ZjLi5mNDM4NjkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCkBAIC0xNDAsNiArMTQwLDQwIEBACiAjZGVmaW5lCWNwdV9pc194c2NhbGUoKQkxCiAjZW5kaWYKIAorI2RlZmluZSBVREJHX1VOREVGSU5FRAkoMSA8PCAwKQorI2RlZmluZSBVREJHX1NZU0NBTEwJKDEgPDwgMSkKKyNkZWZpbmUgVURCR19CQURBQk9SVAkoMSA8PCAyKQorI2RlZmluZSBVREJHX1NFR1YJKDEgPDwgMykKKyNkZWZpbmUgVURCR19CVVMJKDEgPDwgNCkKKworZXh0ZXJuIHVuc2lnbmVkIGludCB1c2VyX2RlYnVnOworCisjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDQKKyNkZWZpbmUgdmVjdG9yc19oaWdoKCkJKGNyX2FsaWdubWVudCAmIENSX1YpCisjZWxzZQorI2RlZmluZSB2ZWN0b3JzX2hpZ2goKQkoMCkKKyNlbmRpZgorCisjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKKyNkZWZpbmUgaXNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCA0IiBcCisJCQkJICAgIDogOiAiciIgKDApIDogIm1lbW9yeSIpCisjZGVmaW5lIGRzYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIFwKKwkJCQkgICAgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikKKyNkZWZpbmUgZG1iKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNSIgXAorCQkJCSAgICA6IDogInIiICgwKSA6ICJtZW1vcnkiKQorI2Vsc2UKKyNkZWZpbmUgaXNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZSBkc2IoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiBcCisJCQkJICAgIDogOiAiciIgKDApIDogIm1lbW9yeSIpCisjZGVmaW5lIGRtYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgiIiA6IDogOiAibWVtb3J5IikKKyNlbmRpZgorI2RlZmluZSBtYigpIGRtYigpCisjZGVmaW5lIHJtYigpIG1iKCkKKyNkZWZpbmUgd21iKCkgbWIoKQorI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgIGRvIHsgdmFyID0gdmFsdWU7IG1iKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZcdHIwLHIwXHRAIG5vcFxuXHQiKTsKKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3Jfbm9fYWxpZ25tZW50OwkvKiBkZWZpbmVkIGluIGVudHJ5LWFybXYuUyAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3JfYWxpZ25tZW50OwkvKiBkZWZpbmVkIGluIGVudHJ5LWFybXYuUyAqLwogCkBAIC0xNTQsNiArMTg4LDcgQEAKIHsKIAlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjMSwgYzAsIDAJQCBzZXQgQ1IiCiAJICA6IDogInIiICh2YWwpIDogImNjIik7CisJaXNiKCk7CiB9CiAKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtMTc2LDM0ICsyMTEsOSBAQAogewogCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGMxLCBjMCwgMiBAIHNldCBjb3BybyBhY2Nlc3MiCiAJICA6IDogInIiICh2YWwpIDogImNjIik7CisJaXNiKCk7CiB9CiAKLSNkZWZpbmUgVURCR19VTkRFRklORUQJKDEgPDwgMCkKLSNkZWZpbmUgVURCR19TWVNDQUxMCSgxIDw8IDEpCi0jZGVmaW5lIFVEQkdfQkFEQUJPUlQJKDEgPDwgMikKLSNkZWZpbmUgVURCR19TRUdWCSgxIDw8IDMpCi0jZGVmaW5lIFVEQkdfQlVTCSgxIDw8IDQpCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgdXNlcl9kZWJ1ZzsKLQotI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA0Ci0jZGVmaW5lIHZlY3RvcnNfaGlnaCgpCShjcl9hbGlnbm1lbnQgJiBDUl9WKQotI2Vsc2UKLSNkZWZpbmUgdmVjdG9yc19oaWdoKCkJKDApCi0jZW5kaWYKLQotI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2Ci0jZGVmaW5lIG1iKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNSIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDogInIiICgwKSA6ICJtZW1vcnkiKQotI2Vsc2UKLSNkZWZpbmUgbWIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiA6IDogIm1lbW9yeSIpCi0jZW5kaWYKLSNkZWZpbmUgcm1iKCkgbWIoKQotI2RlZmluZSB3bWIoKSBtYigpCi0jZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkgZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSAgZG8geyB2YXIgPSB2YWx1ZTsgbWIoKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgbm9wKCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdlx0cjAscjBcdEAgbm9wXG5cdCIpOwotCiAvKgogICogc3dpdGNoX21tKCkgbWF5IGRvIGEgZnVsbCBjYWNoZSBmbHVzaCBvdmVyIHRoZSBjb250ZXh0IHN3aXRjaCwKICAqIHNvIGVuYWJsZSBpbnRlcnJ1cHRzIG92ZXIgdGhlIGNvbnRleHQgc3dpdGNoIHRvIGF2b2lkIGhpZ2gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKaW5kZXggY2QxMGEwYi4uMDhjNjk5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGludCBfX3RsYl9mbGFnID0gX19jcHVfdGxiX2ZsYWdzOwogCiAJaWYgKHRsYl9mbGFnKFRMQl9XQikpCi0JCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIDogOiAiciIgKHplcm8pIDogImNjIik7CisJCWRzYigpOwogCiAJaWYgKHRsYl9mbGFnKFRMQl9WM19GVUxMKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzYsIGMwLCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwpAQCAtMjU3LDYgKzI1NywxNSBAQAogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzYsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJaWYgKHRsYl9mbGFnKFRMQl9WNF9JX0ZVTEwgfCBUTEJfVjZfSV9GVUxMKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOworCisJaWYgKHRsYl9mbGFnKFRMQl9WNl9JX0ZVTEwgfCBUTEJfVjZfRF9GVUxMIHwKKwkJICAgICBUTEJfVjZfSV9QQUdFIHwgVExCX1Y2X0RfUEFHRSB8CisJCSAgICAgVExCX1Y2X0lfQVNJRCB8IFRMQl9WNl9EX0FTSUQpKSB7CisJCS8qIGZsdXNoIHRoZSBicmFuY2ggdGFyZ2V0IGNhY2hlICovCisJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjNSwgNiIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKKwkJZHNiKCk7CisJCWlzYigpOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKQEAgLTI2Niw3ICsyNzUsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGludCBfX3RsYl9mbGFnID0gX19jcHVfdGxiX2ZsYWdzOwogCiAJaWYgKHRsYl9mbGFnKFRMQl9XQikpCi0JCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIDogOiAiciIgKHplcm8pIDogImNjIik7CisJCWRzYigpOwogCiAJaWYgKGNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzaykpIHsKIAkJaWYgKHRsYl9mbGFnKFRMQl9WM19GVUxMKSkKQEAgLTI4NSw2ICsyOTQsMTQgQEAKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM2LCAyIiA6IDogInIiIChhc2lkKSA6ICJjYyIpOwogCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9BU0lEKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAyIiA6IDogInIiIChhc2lkKSA6ICJjYyIpOworCisJaWYgKHRsYl9mbGFnKFRMQl9WNl9JX0ZVTEwgfCBUTEJfVjZfRF9GVUxMIHwKKwkJICAgICBUTEJfVjZfSV9QQUdFIHwgVExCX1Y2X0RfUEFHRSB8CisJCSAgICAgVExCX1Y2X0lfQVNJRCB8IFRMQl9WNl9EX0FTSUQpKSB7CisJCS8qIGZsdXNoIHRoZSBicmFuY2ggdGFyZ2V0IGNhY2hlICovCisJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjNSwgNiIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKKwkJZHNiKCk7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTI5Niw3ICszMTMsNyBAQAogCXVhZGRyID0gKHVhZGRyICYgUEFHRV9NQVNLKSB8IEFTSUQodm1hLT52bV9tbSk7CiAKIAlpZiAodGxiX2ZsYWcoVExCX1dCKSkKLQkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIgOiA6ICJyIiAoemVybykpOworCQlkc2IoKTsKIAogCWlmIChjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCB2bWEtPnZtX21tLT5jcHVfdm1fbWFzaykpIHsKIAkJaWYgKHRsYl9mbGFnKFRMQl9WM19QQUdFKSkKQEAgLTMxNyw2ICszMzQsMTQgQEAKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM2LCAxIiA6IDogInIiICh1YWRkcikgOiAiY2MiKTsKIAlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfUEFHRSkpCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNSwgMSIgOiA6ICJyIiAodWFkZHIpIDogImNjIik7CisKKwlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfRlVMTCB8IFRMQl9WNl9EX0ZVTEwgfAorCQkgICAgIFRMQl9WNl9JX1BBR0UgfCBUTEJfVjZfRF9QQUdFIHwKKwkJICAgICBUTEJfVjZfSV9BU0lEIHwgVExCX1Y2X0RfQVNJRCkpIHsKKwkJLyogZmx1c2ggdGhlIGJyYW5jaCB0YXJnZXQgY2FjaGUgKi8KKwkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCA2IiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOworCQlkc2IoKTsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9mbHVzaF90bGJfa2VybmVsX3BhZ2UodW5zaWduZWQgbG9uZyBrYWRkcikKQEAgLTMyNyw3ICszNTIsNyBAQAogCWthZGRyICY9IFBBR0VfTUFTSzsKIAogCWlmICh0bGJfZmxhZyhUTEJfV0IpKQotCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOworCQlkc2IoKTsKIAogCWlmICh0bGJfZmxhZyhUTEJfVjNfUEFHRSkpCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM2LCBjMCwgMCIgOiA6ICJyIiAoa2FkZHIpIDogImNjIik7CkBAIC0zNDcsMTEgKzM3MiwxNCBAQAogCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9QQUdFKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAxIiA6IDogInIiIChrYWRkcikgOiAiY2MiKTsKIAotCS8qIFRoZSBBUk0gQVJNIHN0YXRlcyB0aGF0IHRoZSBjb21wbGV0aW9uIG9mIGEgVExCIG1haW50ZW5hbmNlCi0JICogb3BlcmF0aW9uIGlzIG9ubHkgZ3VhcmFudGVlZCBieSBhIERTQiBpbnN0cnVjdGlvbgotCSAqLwotCWlmICh0bGJfZmxhZyhUTEJfVjZfVV9QQUdFIHwgVExCX1Y2X0RfUEFHRSB8IFRMQl9WNl9JX1BBR0UpKQotCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOworCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9GVUxMIHwgVExCX1Y2X0RfRlVMTCB8CisJCSAgICAgVExCX1Y2X0lfUEFHRSB8IFRMQl9WNl9EX1BBR0UgfAorCQkgICAgIFRMQl9WNl9JX0FTSUQgfCBUTEJfVjZfRF9BU0lEKSkgeworCQkvKiBmbHVzaCB0aGUgYnJhbmNoIHRhcmdldCBjYWNoZSAqLworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNywgYzUsIDYiIDogOiAiciIgKHplcm8pIDogImNjIik7CisJCWRzYigpOworCQlpc2IoKTsKKwl9CiB9CiAKIC8qCkBAIC0zNjksMTUgKzM5NywxMyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfcG1kX2VudHJ5KHBtZF90ICpwbWQpCiB7Ci0JY29uc3QgdW5zaWduZWQgaW50IHplcm8gPSAwOwogCWNvbnN0IHVuc2lnbmVkIGludCBfX3RsYl9mbGFnID0gX19jcHVfdGxiX2ZsYWdzOwogCiAJaWYgKHRsYl9mbGFnKFRMQl9EQ0xFQU4pKQogCQlhc20oIm1jcglwMTUsIDAsICUwLCBjNywgYzEwLCAxCUAgZmx1c2hfcG1kIgogCQkJOiA6ICJyIiAocG1kKSA6ICJjYyIpOwogCWlmICh0bGJfZmxhZyhUTEJfV0IpKQotCQlhc20oIm1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0CUAgZmx1c2hfcG1kIgotCQkJOiA6ICJyIiAoemVybykgOiAiY2MiKTsKKwkJZHNiKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbl9wbWRfZW50cnkocG1kX3QgKnBtZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vdWFjY2Vzcy5oCmluZGV4IGM5MmRmOTUuLjRjMWEzZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3VhY2Nlc3MuaApAQCAtMTA5LDcgKzEwOSw3IEBACiAKICNkZWZpbmUgZ2V0X3VzZXIoeCxwKQkJCQkJCQlcCiAJKHsJCQkJCQkJCVwKLQkJY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpIF9fdXNlciAqX19wIGFzbSgicjAiKSA9IChwKTtcCisJCXJlZ2lzdGVyIGNvbnN0IHR5cGVvZigqKHApKSBfX3VzZXIgKl9fcCBhc20oInIwIikgPSAocCk7XAogCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjIgYXNtKCJyMiIpOwkJCVwKIAkJcmVnaXN0ZXIgaW50IF9fZSBhc20oInIwIik7CQkJCVwKIAkJc3dpdGNoIChzaXplb2YoKihfX3ApKSkgewkJCQlcCkBAIC0xNDMsOCArMTQzLDggQEAKIAogI2RlZmluZSBwdXRfdXNlcih4LHApCQkJCQkJCVwKIAkoewkJCQkJCQkJXAotCQljb25zdCByZWdpc3RlciB0eXBlb2YoKihwKSkgX19yMiBhc20oInIyIikgPSAoeCk7CVwKLQkJY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpIF9fdXNlciAqX19wIGFzbSgicjAiKSA9IChwKTtcCisJCXJlZ2lzdGVyIGNvbnN0IHR5cGVvZigqKHApKSBfX3IyIGFzbSgicjIiKSA9ICh4KTsJXAorCQlyZWdpc3RlciBjb25zdCB0eXBlb2YoKihwKSkgX191c2VyICpfX3AgYXNtKCJyMCIpID0gKHApO1wKIAkJcmVnaXN0ZXIgaW50IF9fZSBhc20oInIwIik7CQkJCVwKIAkJc3dpdGNoIChzaXplb2YoKihfX3ApKSkgewkJCQlcCiAJCWNhc2UgMToJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCmluZGV4IDk3ZTcwNjAuLjA5OTFiN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKQEAgLTM3Miw2ICszNzIsNyBAQAogI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzQ0KQogI2RlZmluZSBfX05SX2dldGNwdQkJCShfX05SX1NZU0NBTExfQkFTRSszNDUpCiAJCQkJCS8qIDM0NiBmb3IgZXBvbGxfcHdhaXQgKi8KKyNkZWZpbmUgX19OUl9zeXNfa2V4ZWNfbG9hZAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0NykKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgU1dJcyBhcmUgQVJNIHByaXZhdGUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0yNi91YWNjZXNzLmgKaW5kZXggM2YyZGQxMC4uZDY0ZWQ4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3VhY2Nlc3MuaApAQCAtNzQsNyArNzQsNyBAQAogCiAjZGVmaW5lIGdldF91c2VyKHgscCkJCQkJCQkJXAogCSh7CQkJCQkJCQlcCi0JCWNvbnN0IHJlZ2lzdGVyIHR5cGVvZigqKHApKSAqX19wIGFzbSgicjAiKSA9IChwKTsJXAorCQlyZWdpc3RlciBjb25zdCB0eXBlb2YoKihwKSkgKl9fcCBhc20oInIwIikgPSAocCk7CVwKIAkJcmVnaXN0ZXIgdHlwZW9mKCoocCkpIF9fcjEgYXNtKCJyMSIpOwkJCVwKIAkJcmVnaXN0ZXIgaW50IF9fZSBhc20oInIwIik7CQkJCVwKIAkJc3dpdGNoIChzaXplb2YoKihwKSkpIHsJCQkJCVwKQEAgLTEzOSw4ICsxMzksOCBAQAogCiAjZGVmaW5lIHB1dF91c2VyKHgscCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpIF9fcjEgYXNtKCJyMSIpID0gKHgpOyAgICAgICBcCi0gICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpICpfX3AgYXNtKCJyMCIpID0gKHApOyAgICAgICBcCisgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdHlwZW9mKCoocCkpIF9fcjEgYXNtKCJyMSIpID0gKHgpOyAgICAgICBcCisgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdHlwZW9mKCoocCkpICpfX3AgYXNtKCJyMCIpID0gKHApOyAgICAgICBcCiAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IF9fZSBhc20oInIwIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgc3dpdGNoIChzaXplb2YoKihfX3ApKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNzAsOCArMTcwLDggQEAKIAogI2RlZmluZSBwdXRfdXNlcih4LHApCQkJCQkJCVwKIAkoewkJCQkJCQkJXAotCQljb25zdCByZWdpc3RlciB0eXBlb2YoKihwKSkgX19yMSBhc20oInIxIikgPSAoeCk7CVwKLQkJY29uc3QgcmVnaXN0ZXIgdHlwZW9mKCoocCkpICpfX3AgYXNtKCJyMCIpID0gKHApOwlcCisJCXJlZ2lzdGVyIGNvbnN0IHR5cGVvZigqKHApKSBfX3IxIGFzbSgicjEiKSA9ICh4KTsJXAorCQlyZWdpc3RlciBjb25zdCB0eXBlb2YoKihwKSkgKl9fcCBhc20oInIwIikgPSAocCk7CVwKIAkJcmVnaXN0ZXIgaW50IF9fZSBhc20oInIwIik7CQkJCVwKIAkJc3dpdGNoIChzaXplb2YoKihwKSkpIHsJCQkJCVwKIAkJY2FzZSAxOgkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9hdDkxX3BkYy5oIGIvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvYXQ5MV9wZGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlkNmUwMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9hdDkxX3BkYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9wZGMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBJdmFuIEtva3NoYXlza3kKLSAqIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZQotICoKLSAqIFBlcmlwaGVyYWwgRGF0YSBDb250cm9sbGVyIChQREMpIHJlZ2lzdGVycy4KLSAqIEJhc2VkIG9uIEFUOTFSTTkyMDAgZGF0YXNoZWV0IHJldmlzaW9uIEUuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIEFUOTFfUERDX0gKLSNkZWZpbmUgQVQ5MV9QRENfSAotCi0jZGVmaW5lIEFUOTFfUERDX1JQUgkJMHgxMDAJLyogUmVjZWl2ZSBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfUERDX1JDUgkJMHgxMDQJLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfUERDX1RQUgkJMHgxMDgJLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBBVDkxX1BEQ19UQ1IJCTB4MTBjCS8qIFRyYW5zbWl0IENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9QRENfUk5QUgkJMHgxMTAJLyogUmVjZWl2ZSBOZXh0IFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9QRENfUk5DUgkJMHgxMTQJLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQVQ5MV9QRENfVE5QUgkJMHgxMTgJLyogVHJhbnNtaXQgTmV4dCBQb2ludGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFUOTFfUERDX1ROQ1IJCTB4MTFjCS8qIFRyYW5zbWl0IE5leHQgQ291bnRlciBSZWdpc3RlciAqLwotCi0jZGVmaW5lIEFUOTFfUERDX1BUQ1IJCTB4MTIwCS8qIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJCUFUOTFfUERDX1JYVEVOCQkoMSA8PCAwKQkvKiBSZWNlaXZlciBUcmFuc2ZlciBFbmFibGUgKi8KLSNkZWZpbmUJCUFUOTFfUERDX1JYVERJUwkJKDEgPDwgMSkJLyogUmVjZWl2ZXIgVHJhbnNmZXIgRGlzYWJsZSAqLwotI2RlZmluZQkJQVQ5MV9QRENfVFhURU4JCSgxIDw8IDgpCS8qIFRyYW5zbWl0dGVyIFRyYW5zZmVyIEVuYWJsZSAqLwotI2RlZmluZQkJQVQ5MV9QRENfVFhURElTCQkoMSA8PCA5KQkvKiBUcmFuc21pdHRlciBUcmFuc2ZlciBEaXNhYmxlICovCi0KLSNkZWZpbmUgQVQ5MV9QRENfUFRTUgkJMHgxMjQJLyogVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvYm9hcmQuaCBiL2luY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwL2JvYXJkLmgKaW5kZXggYjEyMGVlMC4uMWE3YjA3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9ib2FyZC5oCkBAIC0yNiw3ICsyNiw5IEBACiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKIGF0MzJfYWRkX2RldmljZV9ldGgodW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgKmRhdGEpOwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdDMyX2FkZF9kZXZpY2Vfc3BpKHVuc2lnbmVkIGludCBpZCk7CitzdHJ1Y3Qgc3BpX2JvYXJkX2luZm87CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKK2F0MzJfYWRkX2RldmljZV9zcGkodW5zaWduZWQgaW50IGlkLCBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmIsIHVuc2lnbmVkIGludCBuKTsKIAogc3RydWN0IGxjZGNfcGxhdGZvcm1fZGF0YSB7CiAJdW5zaWduZWQgbG9uZyBmYm1lbV9zdGFydDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL2lvLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9pby5oCmluZGV4IGVlYzQ3NTAuLmMwOGU4MTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWF2cjMyL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIvaW8uaApAQCAtMjgsMTMgKzI4LDEzIEBACiAgKiBHZW5lcmljIElPIHJlYWQvd3JpdGUuICBUaGVzZSBwZXJmb3JtIG5hdGl2ZS1lbmRpYW4gYWNjZXNzZXMuICBOb3RlCiAgKiB0aGF0IHNvbWUgYXJjaGl0ZWN0dXJlcyB3aWxsIHdhbnQgdG8gcmUtZGVmaW5lIF9fcmF3X3tyZWFkLHdyaXRlfXcuCiAgKi8KLWV4dGVybiB2b2lkIF9fcmF3X3dyaXRlc2IodW5zaWduZWQgaW50IGFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBieXRlbGVuKTsKLWV4dGVybiB2b2lkIF9fcmF3X3dyaXRlc3codW5zaWduZWQgaW50IGFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCB3b3JkbGVuKTsKLWV4dGVybiB2b2lkIF9fcmF3X3dyaXRlc2wodW5zaWduZWQgaW50IGFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKK2V4dGVybiB2b2lkIF9fcmF3X3dyaXRlc2Iodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgYnl0ZWxlbik7CitleHRlcm4gdm9pZCBfX3Jhd193cml0ZXN3KHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKIAotZXh0ZXJuIHZvaWQgX19yYXdfcmVhZHNiKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpkYXRhLCBpbnQgYnl0ZWxlbik7Ci1leHRlcm4gdm9pZCBfX3Jhd19yZWFkc3codW5zaWduZWQgaW50IGFkZHIsIHZvaWQgKmRhdGEsIGludCB3b3JkbGVuKTsKLWV4dGVybiB2b2lkIF9fcmF3X3JlYWRzbCh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfcmVhZHNiKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGJ5dGVsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfcmVhZHN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGViKHVuc2lnbmVkIGNoYXIgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewpAQCAtMjUyLDYgKzI1Miw5IEBACiAjZGVmaW5lIGlvcmVtYXAob2Zmc2V0LCBzaXplKQkJCVwKIAlfX2lvcmVtYXAoKG9mZnNldCksIChzaXplKSwgMCkKIAorI2RlZmluZSBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKQkJXAorCV9faW9yZW1hcCgob2Zmc2V0KSwgKHNpemUpLCAwKQorCiAjZGVmaW5lIGlvdW5tYXAoYWRkcikJCQkJXAogCV9faW91bm1hcChhZGRyKQogCkBAIC0yNjMsNiArMjY2LDE0IEBACiAjZGVmaW5lIHBhZ2VfdG9fYnVzIHBhZ2VfdG9fcGh5cwogI2RlZmluZSBidXNfdG9fcGFnZSBwaHlzX3RvX3BhZ2UKIAorLyoKKyAqIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGluZyBjb29raWUgZm9yIGFuIElPIHBvcnQgcmFuZ2UuICBUaGVyZSBleGlzdHMKKyAqIG5vIHN1Y2ggdGhpbmcgYXMgcG9ydC1iYXNlZCBJL08gb24gQVZSMzIsIHNvIGEgcmVndWxhciBpb3JlbWFwKCkKKyAqIHNob3VsZCBkbyB3aGF0IHdlIG5lZWQuCisgKi8KKyNkZWZpbmUgaW9wb3J0X21hcChwb3J0LCBucikJaW9yZW1hcChwb3J0LCBucikKKyNkZWZpbmUgaW9wb3J0X3VubWFwKHBvcnQpCWlvdW5tYXAocG9ydCkKKwogI2RlZmluZSBkbWFfY2FjaGVfd2JhY2tfaW52KF9zdGFydCwgX3NpemUpCVwKIAlmbHVzaF9kY2FjaGVfcmVnaW9uKF9zdGFydCwgX3NpemUpCiAjZGVmaW5lIGRtYV9jYWNoZV9pbnYoX3N0YXJ0LCBfc2l6ZSkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tYXZyMzIvdW5pc3RkLmgKaW5kZXggNTZlZDFmOS4uOGY1MTIwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIvdW5pc3RkLmgKQEAgLTEyMCw3ICsxMjAsNyBAQAogI2RlZmluZSBfX05SX2dldGl0aW1lcgkJMTA1CiAjZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTA2CiAjZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTA3Ci0jZGVmaW5lIF9fTlJfaXBjCQkxMDgKKy8qIDEwOCB3YXMgX19OUl9pcGMgZm9yIGEgbGl0dGxlIHdoaWxlICovCiAjZGVmaW5lIF9fTlJfc2VuZGZpbGUJCTEwOQogI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUJMTEwCiAjZGVmaW5lIF9fTlJfdW5hbWUJCTExMQpAQCAtMjgyLDggKzI4MiwyMSBAQAogI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkyNjQKICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkyNjUKIAorI2RlZmluZSBfX05SX21zZ2dldAkJMjY2CisjZGVmaW5lIF9fTlJfbXNnc25kCQkyNjcKKyNkZWZpbmUgX19OUl9tc2dyY3YJCTI2OAorI2RlZmluZSBfX05SX21zZ2N0bAkJMjY5CisjZGVmaW5lIF9fTlJfc2VtZ2V0CQkyNzAKKyNkZWZpbmUgX19OUl9zZW1vcAkJMjcxCisjZGVmaW5lIF9fTlJfc2VtY3RsCQkyNzIKKyNkZWZpbmUgX19OUl9zZW10aW1lZG9wCQkyNzMKKyNkZWZpbmUgX19OUl9zaG1hdAkJMjc0CisjZGVmaW5lIF9fTlJfc2htZ2V0CQkyNzUKKyNkZWZpbmUgX19OUl9zaG1kdAkJMjc2CisjZGVmaW5lIF9fTlJfc2htY3RsCQkyNzcKKwogI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgTlJfc3lzY2FsbHMJCTI2NgorI2RlZmluZSBOUl9zeXNjYWxscwkJMjc4CiAKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaAppbmRleCA5ZDc3NGQwLi4wMGMyMzQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaApAQCAtMTgzLDYgKzE4MywxOSBAQAogI2VuZGlmCiAKIC8qCisgKiBBIGZhY2lsaXR5IHRvIHByb3ZpZGUgYmF0Y2hpbmcgb2YgdGhlIHJlbG9hZCBvZiBwYWdlIHRhYmxlcyB3aXRoIHRoZQorICogYWN0dWFsIGNvbnRleHQgc3dpdGNoIGNvZGUgZm9yIHBhcmF2aXJ0dWFsaXplZCBndWVzdHMuICBCeSBjb252ZW50aW9uLAorICogb25seSBvbmUgb2YgdGhlIGxhenkgbW9kZXMgKENQVSwgTU1VKSBzaG91bGQgYmUgYWN0aXZlIGF0IGFueSBnaXZlbgorICogdGltZSwgZW50cnkgc2hvdWxkIG5ldmVyIGJlIG5lc3RlZCwgYW5kIGVudHJ5IGFuZCBleGl0cyBzaG91bGQgYWx3YXlzCisgKiBiZSBwYWlyZWQuICBUaGlzIGlzIGZvciBzYW5pdHkgb2YgbWFpbnRhaW5pbmcgYW5kIHJlYXNvbmluZyBhYm91dCB0aGUKKyAqIGtlcm5lbCBjb2RlLgorICovCisjaWZuZGVmIF9fSEFWRV9BUkNIX0VOVEVSX0xBWllfQ1BVX01PREUKKyNkZWZpbmUgYXJjaF9lbnRlcl9sYXp5X2NwdV9tb2RlKCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGFyY2hfbGVhdmVfbGF6eV9jcHVfbW9kZSgpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCiAgKiBXaGVuIHdhbGtpbmcgcGFnZSB0YWJsZXMsIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUgbmV4dCBib3VuZGFyeSwKICAqIG9yIHRoZSBlbmQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UgaWYgdGhhdCBjb21lcyBlYXJsaWVyLiAgQWx0aG91Z2ggbm8KICAqIHZtYSBlbmQgd3JhcHMgdG8gMCwgcm91bmRlZCB1cCBfX2JvdW5kYXJ5IG1heSB3cmFwIHRvIDAgdGhyb3VnaG91dC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYWNwaS5oIGIvaW5jbHVkZS9hc20taTM4Ni9hY3BpLmgKaW5kZXggNWU2NTdlYi4uNDQ5ZjNmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9hY3BpLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hY3BpLmgKQEAgLTEyNyw2ICsxMjcsNyBAQAogI2RlZmluZSBhY3BpX2lvYXBpYyAwCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9ub2lycV9zZXQodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9kaXNhYmxlX3BjaSh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2FjcGkodm9pZCkgeyB9CiAKICNlbmRpZgkvKiAhQ09ORklHX0FDUEkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAppbmRleCA0MWE0NDMxLi5jYzZiMTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaApAQCAtNDMsNiArNDMsOCBAQAogI2RlZmluZSBhcGljX3dyaXRlIG5hdGl2ZV9hcGljX3dyaXRlCiAjZGVmaW5lIGFwaWNfd3JpdGVfYXRvbWljIG5hdGl2ZV9hcGljX3dyaXRlX2F0b21pYwogI2RlZmluZSBhcGljX3JlYWQgbmF0aXZlX2FwaWNfcmVhZAorI2RlZmluZSBzZXR1cF9ib290X2Nsb2NrIHNldHVwX2Jvb3RfQVBJQ19jbG9jaworI2RlZmluZSBzZXR1cF9zZWNvbmRhcnlfY2xvY2sgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sKICNlbmRpZgogCiBzdGF0aWMgX19pbmxpbmUgZmFzdGNhbGwgdm9pZCBuYXRpdmVfYXBpY193cml0ZSh1bnNpZ25lZCBsb25nIHJlZywKQEAgLTkzLDkgKzk1LDcgQEAKIAlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0VPSSwgMCk7CiB9CiAKLWV4dGVybiB2b2lkICgqd2FpdF90aW1lcl90aWNrKSh2b2lkKTsKLQotZXh0ZXJuIGludCBnZXRfbWF4bHZ0KHZvaWQpOworZXh0ZXJuIGludCBsYXBpY19nZXRfbWF4bHZ0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2xlYXJfbG9jYWxfQVBJQyh2b2lkKTsKIGV4dGVybiB2b2lkIGNvbm5lY3RfYnNwX0FQSUMgKHZvaWQpOwogZXh0ZXJuIHZvaWQgZGlzY29ubmVjdF9ic3BfQVBJQyAoaW50IHZpcnRfd2lyZV9zZXR1cCk7CkBAIC0xMTEsMTQgKzExMSw5IEBACiBleHRlcm4gdm9pZCBzZXR1cF9ib290X0FQSUNfY2xvY2sgKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sgKHZvaWQpOwogZXh0ZXJuIGludCBBUElDX2luaXRfdW5pcHJvY2Vzc29yICh2b2lkKTsKLWV4dGVybiB2b2lkIGRpc2FibGVfQVBJQ190aW1lcih2b2lkKTsKLWV4dGVybiB2b2lkIGVuYWJsZV9BUElDX3RpbWVyKHZvaWQpOwogCiBleHRlcm4gdm9pZCBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCAodm9pZCAqIGR1bW15KTsKIAotdm9pZCBzbXBfc2VuZF90aW1lcl9icm9hZGNhc3RfaXBpKHZvaWQpOwotdm9pZCBzd2l0Y2hfQVBJQ190aW1lcl90b19pcGkodm9pZCAqY3B1bWFzayk7Ci12b2lkIHN3aXRjaF9pcGlfdG9fQVBJQ190aW1lcih2b2lkICpjcHVtYXNrKTsKICNkZWZpbmUgQVJDSF9BUElDVElNRVJfU1RPUFNfT05fQzMJMQogCiBleHRlcm4gaW50IHRpbWVyX292ZXJfODI1NDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYnVncy5oIGIvaW5jbHVkZS9hc20taTM4Ni9idWdzLmgKaW5kZXggMzhmMWFlYi4uYzkwYzdjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9idWdzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9idWdzLmgKQEAgLTE2MCw3ICsxNjAsNyBAQAogICogSWYgd2UgY29uZmlndXJlZCBvdXJzZWx2ZXMgZm9yIGEgVFNDLCB3ZSdkIGJldHRlciBoYXZlIG9uZSEKICAqLwogI2lmZGVmIENPTkZJR19YODZfVFNDCi0JaWYgKCFjcHVfaGFzX3RzYykKKwlpZiAoIWNwdV9oYXNfdHNjICYmICF0c2NfZGlzYWJsZSkKIAkJcGFuaWMoIktlcm5lbCBjb21waWxlZCBmb3IgUGVudGl1bSssIHJlcXVpcmVzIFRTQyBmZWF0dXJlISIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZGVzYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9kZXNjLmgKaW5kZXggZjM5OGNjNC4uMDUwODMxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9kZXNjLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9kZXNjLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBYZ3RfZGVzY19zdHJ1Y3QgaWR0X2Rlc2NyOwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBYZ3RfZGVzY19zdHJ1Y3QsIGNwdV9nZHRfZGVzY3IpOwotCitleHRlcm4gc3RydWN0IFhndF9kZXNjX3N0cnVjdCBlYXJseV9nZHRfZGVzY3I7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRlc2Nfc3RydWN0ICpnZXRfY3B1X2dkdF90YWJsZSh1bnNpZ25lZCBpbnQgY3B1KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9lbGYuaCBiL2luY2x1ZGUvYXNtLWkzODYvZWxmLmgKaW5kZXggMzY5MDM1ZC4uOGQzM2M5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2VsZi5oCkBAIC05MCw4ICs5MCw4IEBACiAJcHJfcmVnWzZdID0gcmVncy0+ZWF4OwkJCQlcCiAJcHJfcmVnWzddID0gcmVncy0+eGRzOwkJCQlcCiAJcHJfcmVnWzhdID0gcmVncy0+eGVzOwkJCQlcCi0Jc2F2ZXNlZ21lbnQoZnMscHJfcmVnWzldKTsJCQlcCi0JcHJfcmVnWzEwXSA9IHJlZ3MtPnhnczsJCQkJXAorCXByX3JlZ1s5XSA9IHJlZ3MtPnhmczsJCQkJXAorCXNhdmVzZWdtZW50KGdzLHByX3JlZ1sxMF0pOwkJCVwKIAlwcl9yZWdbMTFdID0gcmVncy0+b3JpZ19lYXg7CQkJXAogCXByX3JlZ1sxMl0gPSByZWdzLT5laXA7CQkJCVwKIAlwcl9yZWdbMTNdID0gcmVncy0+eGNzOwkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaCBiL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCmluZGV4IGU0N2JlOWEuLmZjMDNjZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCkBAIC05MCwxNiArOTAsMTkgQEAKICNkZWZpbmUgSFBFVF9NSU5fUEVSSU9EICgxMDAwMDBVTCkKICNkZWZpbmUgSFBFVF9USUNLX1JBVEUgIChIWiAqIDEwMDAwMFVMKQogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X3RpY2s7ICAJLyogaHBldCBjbGtzIGNvdW50IHBlciB0aWNrICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X2FkZHJlc3M7CS8qIGhwZXQgbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCi1leHRlcm4gaW50IGhwZXRfdXNlX3RpbWVyOworZXh0ZXJuIGludCBpc19ocGV0X2VuYWJsZWQodm9pZCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X3RpY2s7CS8qIGhwZXQgY2xrcyBjb3VudCBwZXIgdGljayAqLworZXh0ZXJuIGludCBocGV0X3VzZV90aW1lcjsKIGV4dGVybiBpbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgaHBldF9lbmFibGUodm9pZCk7Ci1leHRlcm4gaW50IGhwZXRfcmVlbmFibGUodm9pZCk7Ci1leHRlcm4gaW50IGlzX2hwZXRfZW5hYmxlZCh2b2lkKTsKIGV4dGVybiBpbnQgaXNfaHBldF9jYXBhYmxlKHZvaWQpOwogZXh0ZXJuIGludCBocGV0X3JlYWRsKHVuc2lnbmVkIGxvbmcgYSk7CisjZWxzZQorZXh0ZXJuIGludCBocGV0X2VuYWJsZSh2b2lkKTsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMKIGV4dGVybiBpbnQgaHBldF9tYXNrX3J0Y19pcnFfYml0KHVuc2lnbmVkIGxvbmcgYml0X21hc2spOwpAQCAtMTEwLDUgKzExMywxMCBAQAogZXh0ZXJuIGludCBocGV0X3J0Y190aW1lcl9pbml0KHZvaWQpOwogZXh0ZXJuIGlycXJldHVybl90IGhwZXRfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogI2VuZGlmIC8qIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDICovCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IGhwZXRfZW5hYmxlKHZvaWQpIHsgcmV0dXJuIDA7IH0KKwogI2VuZGlmIC8qIENPTkZJR19IUEVUX1RJTUVSICovCiAjZW5kaWYgLyogX0kzODZfSFBFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2k4MjUzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2k4MjUzLmgKaW5kZXggMDE1ZDhkZi4uNmNiMGRkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9pODI1My5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaTgyNTMuaApAQCAtMSw2ICsxLDIxIEBACiAjaWZuZGVmIF9fQVNNX0k4MjUzX0hfXwogI2RlZmluZSBfX0FTTV9JODI1M19IX18KIAorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKwogZXh0ZXJuIHNwaW5sb2NrX3QgaTgyNTNfbG9jazsKIAorZXh0ZXJuIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmdsb2JhbF9jbG9ja19ldmVudDsKKworLyoqCisgKiBwaXRfaW50ZXJydXB0X2hvb2sgLSBob29rIGludG8gdGltZXIgdGljaworICogQHJlZ3M6CXN0YW5kYXJkIHJlZ2lzdGVycyBmcm9tIGludGVycnVwdAorICoKKyAqIENhbGwgdGhlIGdsb2JhbCBjbG9jayBldmVudCBoYW5kbGVyLgorICoqLworc3RhdGljIGlubGluZSB2b2lkIHBpdF9pbnRlcnJ1cHRfaG9vayh2b2lkKQoreworCWdsb2JhbF9jbG9ja19ldmVudC0+ZXZlbnRfaGFuZGxlcihnbG9iYWxfY2xvY2tfZXZlbnQpOworfQorCiAjZW5kaWYJLyogX19BU01fSTgyNTNfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2lkbGUuaCBiL2luY2x1ZGUvYXNtLWkzODYvaWRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YWI5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lkbGUuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9BU01fSTM4Nl9JRExFX0gKKyNkZWZpbmUgX0FTTV9JMzg2X0lETEVfSCAxCisKKyNkZWZpbmUgSURMRV9TVEFSVCAxCisjZGVmaW5lIElETEVfRU5EIDIKKworc3RydWN0IG5vdGlmaWVyX2Jsb2NrOwordm9pZCBpZGxlX25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbik7Cit2b2lkIGlkbGVfbm90aWZpZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pOworCit2b2lkIGV4aXRfaWRsZSh2b2lkKTsKK3ZvaWQgZW50ZXJfaWRsZSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9kb190aW1lci5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvZG9fdGltZXIuaAppbmRleCA3ZDYwNmUzLi41NmU1Njg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9kb190aW1lci5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2RvX3RpbWVyLmgKQEAgLTEsODYgKzEsMTYgQEAKIC8qIGRlZmluZXMgZm9yIGlubGluZSBhcmNoIHNldHVwIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KIAotI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CisjaW5jbHVkZSA8YXNtL2k4MjUzLmg+CiAKIC8qKgogICogZG9fdGltZXJfaW50ZXJydXB0X2hvb2sgLSBob29rIGludG8gdGltZXIgdGljawotICogQHJlZ3M6CXN0YW5kYXJkIHJlZ2lzdGVycyBmcm9tIGludGVycnVwdAogICoKLSAqIERlc2NyaXB0aW9uOgotICoJVGhpcyBob29rIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgdGltZXIgaW50ZXJydXB0IGlzIGFjaydkLgotICoJSXQncyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gYWxsb3cgYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHBvc3Nlc3MKLSAqCWluZGl2aWR1YWwgcGVyIENQVSBjbG9ja3MgKGxpa2UgdGhlIENQVSBBUElDcyBzdXBwbHkpIHRvIGJyb2FkY2FzdCB0aGUKLSAqCXRpbWVyIGludGVycnVwdCBhcyBhIG1lYW5zIG9mIHRyaWdnZXJpbmcgcmVzY2hlZHVsZXMgZXRjLgorICogQ2FsbCB0aGUgcGl0IGNsb2NrIGV2ZW50IGhhbmRsZXIuIHNlZSBhc20vaTgyNTMuaAogICoqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG9fdGltZXJfaW50ZXJydXB0X2hvb2sodm9pZCkKIHsKLQlkb190aW1lcigxKTsKLSNpZm5kZWYgQ09ORklHX1NNUAotCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZV92bShnZXRfaXJxX3JlZ3MoKSkpOwotI2VuZGlmCi0vKgotICogSW4gdGhlIFNNUCBjYXNlIHdlIHVzZSB0aGUgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHQgdG8gZG8gdGhlCi0gKiBwcm9maWxpbmcsIGV4Y2VwdCB3aGVuIHdlIHNpbXVsYXRlIFNNUCBtb2RlIG9uIGEgdW5pcHJvY2Vzc29yCi0gKiBzeXN0ZW0sIGluIHRoYXQgY2FzZSB3ZSBoYXZlIHRvIGNhbGwgdGhlIGxvY2FsIGludGVycnVwdCBoYW5kbGVyLgotICovCi0jaWZuZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKLSNlbHNlCi0JaWYgKCF1c2luZ19hcGljX3RpbWVyKQotCQlzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KCk7Ci0jZW5kaWYKLX0KLQotCi0vKiB5b3UgY2FuIHNhZmVseSB1bmRlZmluZSB0aGlzIGlmIHlvdSBkb24ndCBoYXZlIHRoZSBOZXB0dW5lIGNoaXBzZXQgKi8KLQotI2RlZmluZSBCVUdHWV9ORVBUVU5fVElNRVIKLQotLyoqCi0gKiBkb190aW1lcl9vdmVyZmxvdyAtIHByb2Nlc3MgYSBkZXRlY3RlZCB0aW1lciBvdmVyZmxvdyBjb25kaXRpb24KLSAqIEBjb3VudDoJaGFyZHdhcmUgdGltZXIgaW50ZXJydXB0IGNvdW50IG9uIG92ZXJmbG93Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKglUaGlzIGNhbGwgaXMgaW52b2tlZCB3aGVuIHRoZSBqaWZmaWVzIGNvdW50IGhhcyBub3QgaW5jcmVtZW50ZWQgYnV0Ci0gKgl0aGUgaGFyZHdhcmUgdGltZXIgaW50ZXJydXB0IGhhcy4gIEl0IG1lYW5zIHRoYXQgYSB0aW1lciB0aWNrIGludGVycnVwdAotICoJY2FtZSBhbG9uZyB3aGlsZSB0aGUgcHJldmlvdXMgb25lIHdhcyBwZW5kaW5nLCB0aHVzIGEgdGljayB3YXMgbWlzc2VkCi0gKiovCi1zdGF0aWMgaW5saW5lIGludCBkb190aW1lcl9vdmVyZmxvdyhpbnQgY291bnQpCi17Ci0JaW50IGk7Ci0KLQlzcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKLQkvKgotCSAqIFRoaXMgaXMgdHJpY2t5IHdoZW4gSS9PIEFQSUNzIGFyZSB1c2VkOwotCSAqIHNlZSBkb190aW1lcl9pbnRlcnJ1cHQoKS4KLQkgKi8KLQlpID0gaW5iKDB4MjApOwotCXNwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7Ci0JCi0JLyogYXNzdW1wdGlvbiBhYm91dCB0aW1lciBiZWluZyBJUlEwICovCi0JaWYgKGkgJiAweDAxKSB7Ci0JCS8qCi0JCSAqIFdlIGNhbm5vdCBkZXRlY3QgbG9zdCB0aW1lciBpbnRlcnJ1cHRzIC4uLiAKLQkJICogd2VsbCwgdGhhdCdzIHdoeSB3ZSBjYWxsIHRoZW0gbG9zdCwgZG9uJ3Qgd2U/IDopCi0JCSAqIFtobW0sIG9uIHRoZSBQZW50aXVtIGFuZCBBbHBoYSB3ZSBjYW4gLi4uIHNvcnQgb2ZdCi0JCSAqLwotCQljb3VudCAtPSBMQVRDSDsKLQl9IGVsc2UgewotI2lmZGVmIEJVR0dZX05FUFRVTl9USU1FUgotCQkvKgotCQkgKiBmb3IgdGhlIE5lcHR1biBidWcgd2Uga25vdyB0aGF0IHRoZSAnbGF0Y2gnCi0JCSAqIGNvbW1hbmQgZG9lc24ndCBsYXRjaCB0aGUgaGlnaCBhbmQgbG93IHZhbHVlCi0JCSAqIG9mIHRoZSBjb3VudGVyIGF0b21pY2FsbHkuIFRodXMgd2UgaGF2ZSB0byAKLQkJICogc3Vic3RyYWN0IDI1NiBmcm9tIHRoZSBjb3VudGVyIAotCQkgKiAuLi4gZnVubnksIGlzbnQgaXQ/IDopCi0JCSAqLwotCQkKLQkJY291bnQgLT0gMjU2OwotI2Vsc2UKLQkJcHJpbnRrKCJkb19zbG93X2dldHRpbWVvZmZzZXQoKTogaGFyZHdhcmUgdGltZXIgcHJvYmxlbT9cbiIpOwotI2VuZGlmCi0JfQotCXJldHVybiBjb3VudDsKKwlwaXRfaW50ZXJydXB0X2hvb2soKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12b3lhZ2VyL2RvX3RpbWVyLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdm95YWdlci9kb190aW1lci5oCmluZGV4IDA0ZTY5YzEuLjYwZjlkY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12b3lhZ2VyL2RvX3RpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZveWFnZXIvZG9fdGltZXIuaApAQCAtMSwyNSArMSwxOCBAQAogLyogZGVmaW5lcyBmb3IgaW5saW5lIGFyY2ggc2V0dXAgZnVuY3Rpb25zICovCi0jaW5jbHVkZSA8YXNtL3ZveWFnZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAKKyNpbmNsdWRlIDxhc20vdm95YWdlci5oPgorI2luY2x1ZGUgPGFzbS9pODI1My5oPgorCisvKioKKyAqIGRvX3RpbWVyX2ludGVycnVwdF9ob29rIC0gaG9vayBpbnRvIHRpbWVyIHRpY2sKKyAqIEByZWdzOiAgICAgc3RhbmRhcmQgcmVnaXN0ZXJzIGZyb20gaW50ZXJydXB0CisgKgorICogQ2FsbCB0aGUgcGl0IGNsb2NrIGV2ZW50IGhhbmRsZXIuIHNlZSBhc20vaTgyNTMuaAorICoqLwogc3RhdGljIGlubGluZSB2b2lkIGRvX3RpbWVyX2ludGVycnVwdF9ob29rKHZvaWQpCiB7Ci0JZG9fdGltZXIoMSk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGVfdm0oaXJxX3JlZ3MpKTsKLSNlbmRpZgotCisJcGl0X2ludGVycnVwdF9ob29rKCk7CiAJdm95YWdlcl90aW1lcl9pbnRlcnJ1cHQoKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZG9fdGltZXJfb3ZlcmZsb3coaW50IGNvdW50KQotewotCS8qIGNhbid0IHJlYWQgdGhlIElTUiwganVzdCBhc3N1bWUgMSB0aWNrCi0JICAgb3ZlcmZsb3cgKi8KLQlpZihjb3VudCA+IExBVENIIHx8IGNvdW50IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlZPWUFHRVIgUFJPQkxFTTogY291bnQgaXMgJWQsIGxhdGNoIGlzICVkXG4iLCBjb3VudCwgTEFUQ0gpOwotCQljb3VudCA9IExBVENIOwotCX0KLQljb3VudCAtPSBMQVRDSDsKLQotCXJldHVybiBjb3VudDsKLX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWNlLmggYi9pbmNsdWRlL2FzbS1pMzg2L21jZS5oCmluZGV4IDdjYzFhOTczLi5iMGEwMmVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21jZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWNlLmgKQEAgLTMsMyArMyw1IEBACiAjZWxzZQogI2RlZmluZSBtY2hlY2tfaW5pdChjKSBkbyB7fSB3aGlsZSgwKQogI2VuZGlmCisKK2V4dGVybiBpbnQgbWNlX2Rpc2FibGVkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20taTM4Ni9tbXVfY29udGV4dC5oCmluZGV4IDY4ZmYxMDIuLmU2YWEzMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21tdV9jb250ZXh0LmgKQEAgLTYzLDcgKzYzLDcgQEAKIH0KIAogI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzaywgbW0pCQkJXAotCWFzbSgibW92bCAlMCwlJWZzIjogOiJyIiAoMCkpOworCWFzbSgibW92bCAlMCwlJWdzIjogOiJyIiAoMCkpOwogCiAjZGVmaW5lIGFjdGl2YXRlX21tKHByZXYsIG5leHQpIFwKIAlzd2l0Y2hfbW0oKHByZXYpLChuZXh0KSxOVUxMKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tcHNwZWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmgKaW5kZXggNzcwYmY2ZC4uZjIxMzQ5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tcHNwZWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21wc3BlYy5oCkBAIC0yMyw3ICsyMyw2IEBACiBleHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtcF9sYXBpY19hZGRyOwogZXh0ZXJuIGludCBwaWNfbW9kZTsKLWV4dGVybiBpbnQgdXNpbmdfYXBpY190aW1lcjsKIAogI2lmZGVmIENPTkZJR19BQ1BJCiBleHRlcm4gdm9pZCBtcF9yZWdpc3Rlcl9sYXBpYyAodTggaWQsIHU4IGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tc3IuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXNyLmgKaW5kZXggNjA5YTM4OS4uNmRiNDBkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tc3IuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21zci5oCkBAIC0zMDcsNCArMzA3LDcgQEAKICNkZWZpbmUgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTAkweDM4ZgogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTAkweDM5MAogCisvKiBHZW9kZSBkZWZpbmVkIE1TUnMgKi8KKyNkZWZpbmUgTVNSX0dFT0RFX0JVU0NPTlRfQ09ORjAgICAgICAgICAweDE5MDAKKwogI2VuZGlmIC8qIF9fQVNNX01TUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BhcmF2aXJ0LmggYi9pbmNsdWRlL2FzbS1pMzg2L3BhcmF2aXJ0LmgKaW5kZXggOWYwNjI2NS4uNjMxN2UwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wYXJhdmlydC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGFyYXZpcnQuaApAQCAtNTksOTAgKzU5LDEwMiBAQAogCSAgIGNvbnZlbnRpb24uICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBpbXBsZW1lbnQgaW5saW5lCiAJICAgYXNzZW1ibGVyIHJlcGxhY2VtZW50cy4gKi8KIAotCXZvaWQgKGZhc3RjYWxsICpjcHVpZCkodW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAorCXZvaWQgKCpjcHVpZCkodW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAogCQkgICAgICB1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgpOwogCi0JdW5zaWduZWQgbG9uZyAoZmFzdGNhbGwgKmdldF9kZWJ1Z3JlZykoaW50IHJlZ25vKTsKLQl2b2lkIChmYXN0Y2FsbCAqc2V0X2RlYnVncmVnKShpbnQgcmVnbm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfZGVidWdyZWcpKGludCByZWdubyk7CisJdm9pZCAoKnNldF9kZWJ1Z3JlZykoaW50IHJlZ25vLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKIAotCXZvaWQgKGZhc3RjYWxsICpjbHRzKSh2b2lkKTsKKwl2b2lkICgqY2x0cykodm9pZCk7CiAKLQl1bnNpZ25lZCBsb25nIChmYXN0Y2FsbCAqcmVhZF9jcjApKHZvaWQpOwotCXZvaWQgKGZhc3RjYWxsICp3cml0ZV9jcjApKHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMCkodm9pZCk7CisJdm9pZCAoKndyaXRlX2NyMCkodW5zaWduZWQgbG9uZyk7CiAKLQl1bnNpZ25lZCBsb25nIChmYXN0Y2FsbCAqcmVhZF9jcjIpKHZvaWQpOwotCXZvaWQgKGZhc3RjYWxsICp3cml0ZV9jcjIpKHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMikodm9pZCk7CisJdm9pZCAoKndyaXRlX2NyMikodW5zaWduZWQgbG9uZyk7CiAKLQl1bnNpZ25lZCBsb25nIChmYXN0Y2FsbCAqcmVhZF9jcjMpKHZvaWQpOwotCXZvaWQgKGZhc3RjYWxsICp3cml0ZV9jcjMpKHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMykodm9pZCk7CisJdm9pZCAoKndyaXRlX2NyMykodW5zaWduZWQgbG9uZyk7CiAKLQl1bnNpZ25lZCBsb25nIChmYXN0Y2FsbCAqcmVhZF9jcjRfc2FmZSkodm9pZCk7Ci0JdW5zaWduZWQgbG9uZyAoZmFzdGNhbGwgKnJlYWRfY3I0KSh2b2lkKTsKLQl2b2lkIChmYXN0Y2FsbCAqd3JpdGVfY3I0KSh1bnNpZ25lZCBsb25nKTsKKwl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjRfc2FmZSkodm9pZCk7CisJdW5zaWduZWQgbG9uZyAoKnJlYWRfY3I0KSh2b2lkKTsKKwl2b2lkICgqd3JpdGVfY3I0KSh1bnNpZ25lZCBsb25nKTsKIAotCXVuc2lnbmVkIGxvbmcgKGZhc3RjYWxsICpzYXZlX2ZsKSh2b2lkKTsKLQl2b2lkIChmYXN0Y2FsbCAqcmVzdG9yZV9mbCkodW5zaWduZWQgbG9uZyk7Ci0Jdm9pZCAoZmFzdGNhbGwgKmlycV9kaXNhYmxlKSh2b2lkKTsKLQl2b2lkIChmYXN0Y2FsbCAqaXJxX2VuYWJsZSkodm9pZCk7Ci0Jdm9pZCAoZmFzdGNhbGwgKnNhZmVfaGFsdCkodm9pZCk7Ci0Jdm9pZCAoZmFzdGNhbGwgKmhhbHQpKHZvaWQpOwotCXZvaWQgKGZhc3RjYWxsICp3YmludmQpKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgKCpzYXZlX2ZsKSh2b2lkKTsKKwl2b2lkICgqcmVzdG9yZV9mbCkodW5zaWduZWQgbG9uZyk7CisJdm9pZCAoKmlycV9kaXNhYmxlKSh2b2lkKTsKKwl2b2lkICgqaXJxX2VuYWJsZSkodm9pZCk7CisJdm9pZCAoKnNhZmVfaGFsdCkodm9pZCk7CisJdm9pZCAoKmhhbHQpKHZvaWQpOworCXZvaWQgKCp3YmludmQpKHZvaWQpOwogCiAJLyogZXJyID0gMC8tRUZBVUxULiAgd3Jtc3IgcmV0dXJucyAwLy1FRkFVTFQuICovCi0JdTY0IChmYXN0Y2FsbCAqcmVhZF9tc3IpKHVuc2lnbmVkIGludCBtc3IsIGludCAqZXJyKTsKLQlpbnQgKGZhc3RjYWxsICp3cml0ZV9tc3IpKHVuc2lnbmVkIGludCBtc3IsIHU2NCB2YWwpOworCXU2NCAoKnJlYWRfbXNyKSh1bnNpZ25lZCBpbnQgbXNyLCBpbnQgKmVycik7CisJaW50ICgqd3JpdGVfbXNyKSh1bnNpZ25lZCBpbnQgbXNyLCB1NjQgdmFsKTsKIAotCXU2NCAoZmFzdGNhbGwgKnJlYWRfdHNjKSh2b2lkKTsKLQl1NjQgKGZhc3RjYWxsICpyZWFkX3BtYykodm9pZCk7CisJdTY0ICgqcmVhZF90c2MpKHZvaWQpOworCXU2NCAoKnJlYWRfcG1jKSh2b2lkKTsKIAotCXZvaWQgKGZhc3RjYWxsICpsb2FkX3RyX2Rlc2MpKHZvaWQpOwotCXZvaWQgKGZhc3RjYWxsICpsb2FkX2dkdCkoY29uc3Qgc3RydWN0IFhndF9kZXNjX3N0cnVjdCAqKTsKLQl2b2lkIChmYXN0Y2FsbCAqbG9hZF9pZHQpKGNvbnN0IHN0cnVjdCBYZ3RfZGVzY19zdHJ1Y3QgKik7Ci0Jdm9pZCAoZmFzdGNhbGwgKnN0b3JlX2dkdCkoc3RydWN0IFhndF9kZXNjX3N0cnVjdCAqKTsKLQl2b2lkIChmYXN0Y2FsbCAqc3RvcmVfaWR0KShzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0ICopOwotCXZvaWQgKGZhc3RjYWxsICpzZXRfbGR0KShjb25zdCB2b2lkICpkZXNjLCB1bnNpZ25lZCBlbnRyaWVzKTsKLQl1bnNpZ25lZCBsb25nIChmYXN0Y2FsbCAqc3RvcmVfdHIpKHZvaWQpOwotCXZvaWQgKGZhc3RjYWxsICpsb2FkX3Rscykoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHVuc2lnbmVkIGludCBjcHUpOwotCXZvaWQgKGZhc3RjYWxsICp3cml0ZV9sZHRfZW50cnkpKHZvaWQgKmR0LCBpbnQgZW50cnludW0sCisJdm9pZCAoKmxvYWRfdHJfZGVzYykodm9pZCk7CisJdm9pZCAoKmxvYWRfZ2R0KShjb25zdCBzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0ICopOworCXZvaWQgKCpsb2FkX2lkdCkoY29uc3Qgc3RydWN0IFhndF9kZXNjX3N0cnVjdCAqKTsKKwl2b2lkICgqc3RvcmVfZ2R0KShzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0ICopOworCXZvaWQgKCpzdG9yZV9pZHQpKHN0cnVjdCBYZ3RfZGVzY19zdHJ1Y3QgKik7CisJdm9pZCAoKnNldF9sZHQpKGNvbnN0IHZvaWQgKmRlc2MsIHVuc2lnbmVkIGVudHJpZXMpOworCXVuc2lnbmVkIGxvbmcgKCpzdG9yZV90cikodm9pZCk7CisJdm9pZCAoKmxvYWRfdGxzKShzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdW5zaWduZWQgaW50IGNwdSk7CisJdm9pZCAoKndyaXRlX2xkdF9lbnRyeSkodm9pZCAqZHQsIGludCBlbnRyeW51bSwKIAkJCQkJIHUzMiBsb3csIHUzMiBoaWdoKTsKLQl2b2lkIChmYXN0Y2FsbCAqd3JpdGVfZ2R0X2VudHJ5KSh2b2lkICpkdCwgaW50IGVudHJ5bnVtLAorCXZvaWQgKCp3cml0ZV9nZHRfZW50cnkpKHZvaWQgKmR0LCBpbnQgZW50cnludW0sCiAJCQkJCSB1MzIgbG93LCB1MzIgaGlnaCk7Ci0Jdm9pZCAoZmFzdGNhbGwgKndyaXRlX2lkdF9lbnRyeSkodm9pZCAqZHQsIGludCBlbnRyeW51bSwKKwl2b2lkICgqd3JpdGVfaWR0X2VudHJ5KSh2b2lkICpkdCwgaW50IGVudHJ5bnVtLAogCQkJCQkgdTMyIGxvdywgdTMyIGhpZ2gpOwotCXZvaWQgKGZhc3RjYWxsICpsb2FkX2VzcDApKHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MsCisJdm9pZCAoKmxvYWRfZXNwMCkoc3RydWN0IHRzc19zdHJ1Y3QgKnRzcywKIAkJCQkgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKTsKIAotCXZvaWQgKGZhc3RjYWxsICpzZXRfaW9wbF9tYXNrKSh1bnNpZ25lZCBtYXNrKTsKKwl2b2lkICgqc2V0X2lvcGxfbWFzaykodW5zaWduZWQgbWFzayk7CiAKLQl2b2lkIChmYXN0Y2FsbCAqaW9fZGVsYXkpKHZvaWQpOworCXZvaWQgKCppb19kZWxheSkodm9pZCk7CiAJdm9pZCAoKmNvbnN0X3VkZWxheSkodW5zaWduZWQgbG9uZyBsb29wcyk7CiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQl2b2lkIChmYXN0Y2FsbCAqYXBpY193cml0ZSkodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgdik7Ci0Jdm9pZCAoZmFzdGNhbGwgKmFwaWNfd3JpdGVfYXRvbWljKSh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyB2KTsKLQl1bnNpZ25lZCBsb25nIChmYXN0Y2FsbCAqYXBpY19yZWFkKSh1bnNpZ25lZCBsb25nIHJlZyk7CisJdm9pZCAoKmFwaWNfd3JpdGUpKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHYpOworCXZvaWQgKCphcGljX3dyaXRlX2F0b21pYykodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgdik7CisJdW5zaWduZWQgbG9uZyAoKmFwaWNfcmVhZCkodW5zaWduZWQgbG9uZyByZWcpOworCXZvaWQgKCpzZXR1cF9ib290X2Nsb2NrKSh2b2lkKTsKKwl2b2lkICgqc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKSh2b2lkKTsKICNlbmRpZgogCi0Jdm9pZCAoZmFzdGNhbGwgKmZsdXNoX3RsYl91c2VyKSh2b2lkKTsKLQl2b2lkIChmYXN0Y2FsbCAqZmx1c2hfdGxiX2tlcm5lbCkodm9pZCk7Ci0Jdm9pZCAoZmFzdGNhbGwgKmZsdXNoX3RsYl9zaW5nbGUpKHUzMiBhZGRyKTsKKwl2b2lkICgqZmx1c2hfdGxiX3VzZXIpKHZvaWQpOworCXZvaWQgKCpmbHVzaF90bGJfa2VybmVsKSh2b2lkKTsKKwl2b2lkICgqZmx1c2hfdGxiX3NpbmdsZSkodTMyIGFkZHIpOwogCi0Jdm9pZCAoZmFzdGNhbGwgKnNldF9wdGUpKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOwotCXZvaWQgKGZhc3RjYWxsICpzZXRfcHRlX2F0KShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTMyIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOwotCXZvaWQgKGZhc3RjYWxsICpzZXRfcG1kKShwbWRfdCAqcG1kcCwgcG1kX3QgcG1kdmFsKTsKLQl2b2lkIChmYXN0Y2FsbCAqcHRlX3VwZGF0ZSkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHUzMiBhZGRyLCBwdGVfdCAqcHRlcCk7Ci0Jdm9pZCAoZmFzdGNhbGwgKnB0ZV91cGRhdGVfZGVmZXIpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgYWRkciwgcHRlX3QgKnB0ZXApOworCXZvaWQgKCphbGxvY19wdCkodTMyIHBmbik7CisJdm9pZCAoKmFsbG9jX3BkKSh1MzIgcGZuKTsKKwl2b2lkICgqYWxsb2NfcGRfY2xvbmUpKHUzMiBwZm4sIHUzMiBjbG9uZXBmbiwgdTMyIHN0YXJ0LCB1MzIgY291bnQpOworCXZvaWQgKCpyZWxlYXNlX3B0KSh1MzIgcGZuKTsKKwl2b2lkICgqcmVsZWFzZV9wZCkodTMyIHBmbik7CisKKwl2b2lkICgqc2V0X3B0ZSkocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7CisJdm9pZCAoKnNldF9wdGVfYXQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MzIgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7CisJdm9pZCAoKnNldF9wbWQpKHBtZF90ICpwbWRwLCBwbWRfdCBwbWR2YWwpOworCXZvaWQgKCpwdGVfdXBkYXRlKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTMyIGFkZHIsIHB0ZV90ICpwdGVwKTsKKwl2b2lkICgqcHRlX3VwZGF0ZV9kZWZlcikoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHUzMiBhZGRyLCBwdGVfdCAqcHRlcCk7CiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKLQl2b2lkIChmYXN0Y2FsbCAqc2V0X3B0ZV9hdG9taWMpKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOwotCXZvaWQgKGZhc3RjYWxsICpzZXRfcHRlX3ByZXNlbnQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpOwotCXZvaWQgKGZhc3RjYWxsICpzZXRfcHVkKShwdWRfdCAqcHVkcCwgcHVkX3QgcHVkdmFsKTsKLQl2b2lkIChmYXN0Y2FsbCAqcHRlX2NsZWFyKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7Ci0Jdm9pZCAoZmFzdGNhbGwgKnBtZF9jbGVhcikocG1kX3QgKnBtZHApOworCXZvaWQgKCpzZXRfcHRlX2F0b21pYykocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7CisJdm9pZCAoKnNldF9wdGVfcHJlc2VudCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CisJdm9pZCAoKnNldF9wdWQpKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWR2YWwpOworCXZvaWQgKCpwdGVfY2xlYXIpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKKwl2b2lkICgqcG1kX2NsZWFyKShwbWRfdCAqcG1kcCk7CiAjZW5kaWYKIAorCXZvaWQgKCpzZXRfbGF6eV9tb2RlKShpbnQgbW9kZSk7CisKIAkvKiBUaGVzZSB0d28gYXJlIGptcCB0bywgbm90IGFjdHVhbGx5IGNhbGxlZC4gKi8KLQl2b2lkIChmYXN0Y2FsbCAqaXJxX2VuYWJsZV9zeXNleGl0KSh2b2lkKTsKLQl2b2lkIChmYXN0Y2FsbCAqaXJldCkodm9pZCk7CisJdm9pZCAoKmlycV9lbmFibGVfc3lzZXhpdCkodm9pZCk7CisJdm9pZCAoKmlyZXQpKHZvaWQpOworCisJdm9pZCAoKnN0YXJ0dXBfaXBpX2hvb2spKGludCBwaHlzX2FwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXAsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZXNwKTsKIH07CiAKIC8qIE1hcmsgYSBwYXJhdmlydCBwcm9iZSBmdW5jdGlvbi4gKi8KQEAgLTMxMywxMyArMzI1LDM4IEBACiB7CiAJcmV0dXJuIHBhcmF2aXJ0X29wcy5hcGljX3JlYWQocmVnKTsKIH0KKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2Jvb3RfY2xvY2sodm9pZCkKK3sKKwlwYXJhdmlydF9vcHMuc2V0dXBfYm9vdF9jbG9jaygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpCit7CisJcGFyYXZpcnRfb3BzLnNldHVwX3NlY29uZGFyeV9jbG9jaygpOworfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnR1cF9pcGlfaG9vayhpbnQgcGh5c19hcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2VzcCkKK3sKKwlyZXR1cm4gcGFyYXZpcnRfb3BzLnN0YXJ0dXBfaXBpX2hvb2socGh5c19hcGljaWQsIHN0YXJ0X2VpcCwgc3RhcnRfZXNwKTsKK30KKyNlbmRpZgogCiAjZGVmaW5lIF9fZmx1c2hfdGxiKCkgcGFyYXZpcnRfb3BzLmZsdXNoX3RsYl91c2VyKCkKICNkZWZpbmUgX19mbHVzaF90bGJfZ2xvYmFsKCkgcGFyYXZpcnRfb3BzLmZsdXNoX3RsYl9rZXJuZWwoKQogI2RlZmluZSBfX2ZsdXNoX3RsYl9zaW5nbGUoYWRkcikgcGFyYXZpcnRfb3BzLmZsdXNoX3RsYl9zaW5nbGUoYWRkcikKIAorI2RlZmluZSBwYXJhdmlydF9hbGxvY19wdChwZm4pIHBhcmF2aXJ0X29wcy5hbGxvY19wdChwZm4pCisjZGVmaW5lIHBhcmF2aXJ0X3JlbGVhc2VfcHQocGZuKSBwYXJhdmlydF9vcHMucmVsZWFzZV9wdChwZm4pCisKKyNkZWZpbmUgcGFyYXZpcnRfYWxsb2NfcGQocGZuKSBwYXJhdmlydF9vcHMuYWxsb2NfcGQocGZuKQorI2RlZmluZSBwYXJhdmlydF9hbGxvY19wZF9jbG9uZShwZm4sIGNsb25lcGZuLCBzdGFydCwgY291bnQpIFwKKwlwYXJhdmlydF9vcHMuYWxsb2NfcGRfY2xvbmUocGZuLCBjbG9uZXBmbiwgc3RhcnQsIGNvdW50KQorI2RlZmluZSBwYXJhdmlydF9yZWxlYXNlX3BkKHBmbikgcGFyYXZpcnRfb3BzLnJlbGVhc2VfcGQocGZuKQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKQogewogCXBhcmF2aXJ0X29wcy5zZXRfcHRlKHB0ZXAsIHB0ZXZhbCk7CkBAIC0zNzIsNiArNDA5LDE5IEBACiB9CiAjZW5kaWYKIAorLyogTGF6eSBtb2RlIGZvciBiYXRjaGluZyB1cGRhdGVzIC8gY29udGV4dCBzd2l0Y2ggKi8KKyNkZWZpbmUgUEFSQVZJUlRfTEFaWV9OT05FIDAKKyNkZWZpbmUgUEFSQVZJUlRfTEFaWV9NTVUgIDEKKyNkZWZpbmUgUEFSQVZJUlRfTEFaWV9DUFUgIDIKKworI2RlZmluZSAgX19IQVZFX0FSQ0hfRU5URVJfTEFaWV9DUFVfTU9ERQorI2RlZmluZSBhcmNoX2VudGVyX2xhenlfY3B1X21vZGUoKSBwYXJhdmlydF9vcHMuc2V0X2xhenlfbW9kZShQQVJBVklSVF9MQVpZX0NQVSkKKyNkZWZpbmUgYXJjaF9sZWF2ZV9sYXp5X2NwdV9tb2RlKCkgcGFyYXZpcnRfb3BzLnNldF9sYXp5X21vZGUoUEFSQVZJUlRfTEFaWV9OT05FKQorCisjZGVmaW5lICBfX0hBVkVfQVJDSF9FTlRFUl9MQVpZX01NVV9NT0RFCisjZGVmaW5lIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpIHBhcmF2aXJ0X29wcy5zZXRfbGF6eV9tb2RlKFBBUkFWSVJUX0xBWllfTU1VKQorI2RlZmluZSBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKSBwYXJhdmlydF9vcHMuc2V0X2xhenlfbW9kZShQQVJBVklSVF9MQVpZX05PTkUpCisKIC8qIFRoZXNlIGFsbCBzaXQgaW4gdGhlIC5wYXJhaW5zdHJ1Y3Rpb25zIHNlY3Rpb24gdG8gdGVsbCB1cyB3aGF0IHRvIHBhdGNoLiAqLwogc3RydWN0IHBhcmF2aXJ0X3BhdGNoIHsKIAl1OCAqaW5zdHI7IAkJLyogb3JpZ2luYWwgaW5zdHJ1Y3Rpb25zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BkYS5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZGEuaAppbmRleCAyYmEyNzM2Li5iMTJkNTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BkYS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGRhLmgKQEAgLTM5LDE5ICszOSwxOSBAQAogCQlpZiAoMCkgeyBUX18gdG1wX187IHRtcF9fID0gKHZhbCk7IH0JCQlcCiAJCXN3aXRjaCAoc2l6ZW9mKF9wcm94eV9wZGEuZmllbGQpKSB7CQkJXAogCQljYXNlIDE6CQkJCQkJCVwKLQkJCWFzbShvcCAiYiAlMSwlJWdzOiVjMiIJCQkJXAorCQkJYXNtKG9wICJiICUxLCUlZnM6JWMyIgkJCQlcCiAJCQkgICAgOiAiK20iIChfcHJveHlfcGRhLmZpZWxkKQkJCVwKIAkJCSAgICA6InJpIiAoKFRfXyl2YWwpLAkJCQlcCiAJCQkgICAgICJpIihwZGFfb2Zmc2V0KGZpZWxkKSkpOwkJCVwKIAkJCWJyZWFrOwkJCQkJCVwKIAkJY2FzZSAyOgkJCQkJCQlcCi0JCQlhc20ob3AgIncgJTEsJSVnczolYzIiCQkJCVwKKwkJCWFzbShvcCAidyAlMSwlJWZzOiVjMiIJCQkJXAogCQkJICAgIDogIittIiAoX3Byb3h5X3BkYS5maWVsZCkJCQlcCiAJCQkgICAgOiJyaSIgKChUX18pdmFsKSwJCQkJXAogCQkJICAgICAiaSIocGRhX29mZnNldChmaWVsZCkpKTsJCQlcCiAJCQlicmVhazsJCQkJCQlcCiAJCWNhc2UgNDoJCQkJCQkJXAotCQkJYXNtKG9wICJsICUxLCUlZ3M6JWMyIgkJCQlcCisJCQlhc20ob3AgImwgJTEsJSVmczolYzIiCQkJCVwKIAkJCSAgICA6ICIrbSIgKF9wcm94eV9wZGEuZmllbGQpCQkJXAogCQkJICAgIDoicmkiICgoVF9fKXZhbCksCQkJCVwKIAkJCSAgICAgImkiKHBkYV9vZmZzZXQoZmllbGQpKSk7CQkJXApAQCAtNjUsMTkgKzY1LDE5IEBACiAJCXR5cGVvZihfcHJveHlfcGRhLmZpZWxkKSByZXRfXzsJCQkJXAogCQlzd2l0Y2ggKHNpemVvZihfcHJveHlfcGRhLmZpZWxkKSkgewkJCVwKIAkJY2FzZSAxOgkJCQkJCQlcCi0JCQlhc20ob3AgImIgJSVnczolYzEsJTAiCQkJCVwKKwkJCWFzbShvcCAiYiAlJWZzOiVjMSwlMCIJCQkJXAogCQkJICAgIDogIj1yIiAocmV0X18pCQkJCVwKIAkJCSAgICA6ICJpIiAocGRhX29mZnNldChmaWVsZCkpLAkJCVwKIAkJCSAgICAgICJtIiAoX3Byb3h5X3BkYS5maWVsZCkpOwkJCVwKIAkJCWJyZWFrOwkJCQkJCVwKIAkJY2FzZSAyOgkJCQkJCQlcCi0JCQlhc20ob3AgIncgJSVnczolYzEsJTAiCQkJCVwKKwkJCWFzbShvcCAidyAlJWZzOiVjMSwlMCIJCQkJXAogCQkJICAgIDogIj1yIiAocmV0X18pCQkJCVwKIAkJCSAgICA6ICJpIiAocGRhX29mZnNldChmaWVsZCkpLAkJCVwKIAkJCSAgICAgICJtIiAoX3Byb3h5X3BkYS5maWVsZCkpOwkJCVwKIAkJCWJyZWFrOwkJCQkJCVwKIAkJY2FzZSA0OgkJCQkJCQlcCi0JCQlhc20ob3AgImwgJSVnczolYzEsJTAiCQkJCVwKKwkJCWFzbShvcCAibCAlJWZzOiVjMSwlMCIJCQkJXAogCQkJICAgIDogIj1yIiAocmV0X18pCQkJCVwKIAkJCSAgICA6ICJpIiAocGRhX29mZnNldChmaWVsZCkpLAkJCVwKIAkJCSAgICAgICJtIiAoX3Byb3h5X3BkYS5maWVsZCkpOwkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgKaW5kZXggNGIxZTYxMy4uYzhkYzJkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmgKQEAgLTUsMTMgKzUsMzEgQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4JCS8qIGZvciBzdHJ1Y3QgcGFnZSAqLwogCi0jZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwobW0sIHBtZCwgcHRlKSBcCi0JCXNldF9wbWQocG1kLCBfX3BtZChfUEFHRV9UQUJMRSArIF9fcGEocHRlKSkpCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjZWxzZQorI2RlZmluZSBwYXJhdmlydF9hbGxvY19wdChwZm4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGFyYXZpcnRfYWxsb2NfcGQocGZuKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBhcmF2aXJ0X2FsbG9jX3BkKHBmbikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwYXJhdmlydF9hbGxvY19wZF9jbG9uZShwZm4sIGNsb25lcGZuLCBzdGFydCwgY291bnQpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGFyYXZpcnRfcmVsZWFzZV9wdChwZm4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGFyYXZpcnRfcmVsZWFzZV9wZChwZm4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwobW0sIHBtZCwgcHRlKQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlwYXJhdmlydF9hbGxvY19wdChfX3BhKHB0ZSkgPj4gUEFHRV9TSElGVCk7CQlcCisJc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFICsgX19wYShwdGUpKSk7CQlcCit9IHdoaWxlICgwKQogCiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpIAkJCQlcCitkbyB7CQkJCQkJCQlcCisJcGFyYXZpcnRfYWxsb2NfcHQocGFnZV90b19wZm4ocHRlKSk7CQkJXAogCXNldF9wbWQocG1kLCBfX3BtZChfUEFHRV9UQUJMRSArCQkJXAogCQkoKHVuc2lnbmVkIGxvbmcgbG9uZylwYWdlX3RvX3BmbihwdGUpIDw8CVwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIFBBR0VfU0hJRlQpKSkKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIFBBR0VfU0hJRlQpKSk7CVwKK30gd2hpbGUgKDApCisKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KICAqLwpAQCAtMzIsNyArNTAsMTEgQEAKIH0KIAogCi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYixwdGUpIHRsYl9yZW1vdmVfcGFnZSgodGxiKSwocHRlKSkKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZSkgCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXBhcmF2aXJ0X3JlbGVhc2VfcHQocGFnZV90b19wZm4ocHRlKSk7CQkJCVwKKwl0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksKHB0ZSkpOwkJCQkJXAorfSB3aGlsZSAoMCkKIAogI2lmZGVmIENPTkZJR19YODZfUEFFCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWkzODYvcHJvY2Vzc29yLmgKaW5kZXggMzU5ZjEwYi4uZWRmYmU0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oCkBAIC0yNTcsNiArMjU3LDE0IEBACiAJCTogOiJhIiAoZWF4KSwgImMiIChlY3gpKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fc3RpX213YWl0KHVuc2lnbmVkIGxvbmcgZWF4LCB1bnNpZ25lZCBsb25nIGVjeCkKK3sKKwkvKiAibXdhaXQgJWVheCwlZWN4OyIgKi8KKwlhc20gdm9sYXRpbGUoCisJCSJzdGk7IC5ieXRlIDB4MGYsMHgwMSwweGM5OyIKKwkJOiA6ImEiIChlYXgpLCAiYyIgKGVjeCkpOworfQorCiBleHRlcm4gdm9pZCBtd2FpdF9pZGxlX3dpdGhfaGludHModW5zaWduZWQgbG9uZyBlYXgsIHVuc2lnbmVkIGxvbmcgZWN4KTsKIAogLyogZnJvbSBzeXN0ZW0gZGVzY3JpcHRpb24gdGFibGUgaW4gQklPUy4gIE1vc3RseSBmb3IgTUNBIHVzZSwgYnV0CkBAIC00MjQsNyArNDMyLDcgQEAKIAkudm04Nl9pbmZvID0gTlVMTCwJCQkJCQlcCiAJLnN5c2VudGVyX2NzID0gX19LRVJORUxfQ1MsCQkJCQlcCiAJLmlvX2JpdG1hcF9wdHIgPSBOVUxMLAkJCQkJCVwKLQkuZ3MgPSBfX0tFUk5FTF9QREEsCQkJCQkJXAorCS5mcyA9IF9fS0VSTkVMX1BEQSwJCQkJCQlcCiB9CiAKIC8qCkBAIC00NDIsOCArNDUwLDggQEAKIH0KIAogI2RlZmluZSBzdGFydF90aHJlYWQocmVncywgbmV3X2VpcCwgbmV3X2VzcCkgZG8gewkJXAotCV9fYXNtX18oIm1vdmwgJTAsJSVmcyI6IDoiciIgKDApKTsJCQlcCi0JcmVncy0+eGdzID0gMDsJCQkJCQlcCisJX19hc21fXygibW92bCAlMCwlJWdzIjogOiJyIiAoMCkpOwkJCVwKKwlyZWdzLT54ZnMgPSAwOwkJCQkJCVwKIAlzZXRfZnMoVVNFUl9EUyk7CQkJCQlcCiAJcmVncy0+eGRzID0gX19VU0VSX0RTOwkJCQkJXAogCXJlZ3MtPnhlcyA9IF9fVVNFUl9EUzsJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3B0cmFjZS5oCmluZGV4IGJkYmM4OTQuLjYwMDI1OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wdHJhY2UuaApAQCAtMTYsOCArMTYsOCBAQAogCWxvbmcgZWF4OwogCWludCAgeGRzOwogCWludCAgeGVzOwotCS8qIGludCAgeGZzOyAqLwotCWludCAgeGdzOworCWludCAgeGZzOworCS8qIGludCAgeGdzOyAqLwogCWxvbmcgb3JpZ19lYXg7CiAJbG9uZyBlaXA7CiAJaW50ICB4Y3M7CkBAIC00OSw2ICs0OSwxMCBAQAogewogCXJldHVybiAoKHJlZ3MtPnhjcyAmIFNFR01FTlRfUlBMX01BU0spIHwgKHJlZ3MtPmVmbGFncyAmIFZNX01BU0spKSA+PSBVU0VSX1JQTDsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHY4MDg2X21vZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT5lZmxhZ3MgJiBWTV9NQVNLKTsKK30KIAogI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPmVpcCkKICNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUocmVncykgKChyZWdzKS0+ZWF4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zZWdtZW50LmggYi9pbmNsdWRlL2FzbS1pMzg2L3NlZ21lbnQuaAppbmRleCAzYzc5NmFmLi4wNjVmMTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NlZ21lbnQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NlZ21lbnQuaApAQCAtODMsMTQgKzgzLDggQEAKICAqIFRoZSBHRFQgaGFzIDMyIGVudHJpZXMKICAqLwogI2RlZmluZSBHRFRfRU5UUklFUyAzMgotCiAjZGVmaW5lIEdEVF9TSVpFIChHRFRfRU5UUklFUyAqIDgpCiAKLS8qIE1hdGNoZXMgX19LRVJORUxfQ1MgYW5kIF9fVVNFUl9DUyAodGhleSBtdXN0IGJlIDIgZW50cmllcyBhcGFydCkgKi8KLSNkZWZpbmUgU0VHTUVOVF9JU19GTEFUX0NPREUoeCkgICgoKHgpICYgMHhlYykgPT0gR0RUX0VOVFJZX0tFUk5FTF9DUyAqIDgpCi0vKiBNYXRjaGVzIFBOUF9DUzMyIGFuZCBQTlBfQ1MxNiAodGhleSBtdXN0IGJlIGNvbnNlY3V0aXZlKSAqLwotI2RlZmluZSBTRUdNRU5UX0lTX1BOUF9DT0RFKHgpICAgKCgoeCkgJiAweGY0KSA9PSBHRFRfRU5UUllfUE5QQklPU19CQVNFICogOCkKLQogLyogU2ltcGxlIGFuZCBzbWFsbCBHRFQgZW50cmllcyBmb3IgYm9vdGluZyBvbmx5ICovCiAKICNkZWZpbmUgR0RUX0VOVFJZX0JPT1RfQ1MJCTIKQEAgLTEzNCw0ICsxMjgsMTcgQEAKICNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCiAjZGVmaW5lIGdldF9rZXJuZWxfcnBsKCkgIDAKICNlbmRpZgorLyoKKyAqIE1hdGNoaW5nIHJ1bGVzIGZvciBjZXJ0YWluIHR5cGVzIG9mIHNlZ21lbnRzLgorICovCisKKy8qIE1hdGNoZXMgb25seSBfX0tFUk5FTF9DUywgaWdub3JpbmcgUG5QIC8gVVNFUiAvIEFQTSBzZWdtZW50cyAqLworI2RlZmluZSBTRUdNRU5UX0lTX0tFUk5FTF9DT0RFKHgpICgoKHgpICYgMHhmYykgPT0gR0RUX0VOVFJZX0tFUk5FTF9DUyAqIDgpCisKKy8qIE1hdGNoZXMgX19LRVJORUxfQ1MgYW5kIF9fVVNFUl9DUyAodGhleSBtdXN0IGJlIDIgZW50cmllcyBhcGFydCkgKi8KKyNkZWZpbmUgU0VHTUVOVF9JU19GTEFUX0NPREUoeCkgICgoKHgpICYgMHhlYykgPT0gR0RUX0VOVFJZX0tFUk5FTF9DUyAqIDgpCisKKy8qIE1hdGNoZXMgUE5QX0NTMzIgYW5kIFBOUF9DUzE2ICh0aGV5IG11c3QgYmUgY29uc2VjdXRpdmUpICovCisjZGVmaW5lIFNFR01FTlRfSVNfUE5QX0NPREUoeCkgICAoKCh4KSAmIDB4ZjQpID09IEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKiA4KQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLWkzODYvc2V0dXAuaAppbmRleCA3NjMxNjI3Li4wZTgwNzdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NldHVwLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zZXR1cC5oCkBAIC03Nyw2ICs3Nyw4IEBACiB2b2lkIF9faW5pdCBhZGRfbWVtb3J5X3JlZ2lvbih1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSwgaW50IHR5cGUpOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X3BnX3RhYmxlc19lbmQ7CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmICAvKiAgX19LRVJORUxfXyAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc21wLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCmluZGV4IDY0ZmU2MjQuLjZiZjAwMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zbXAuaApAQCAtNTIsNiArNTIsMTEgQEAKIGV4dGVybiB2b2lkIGNwdV91bmluaXQodm9pZCk7CiAjZW5kaWYKIAorI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKKyNkZWZpbmUgc3RhcnR1cF9pcGlfaG9vayhwaHlzX2FwaWNpZCwgc3RhcnRfZWlwLCBzdGFydF9lc3ApIAkJXAorZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIG5lZWRlZCBieSBhbGwgU01QIHN5c3RlbXMuIEl0IG11c3QgX2Fsd2F5c18gYmUgdmFsaWQKICAqIGZyb20gdGhlIGluaXRpYWwgc3RhcnR1cC4gV2UgbWFwIEFQSUNfQkFTRSB2ZXJ5IGVhcmx5IGluIHBhZ2Vfc2V0dXAoKSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdGltZS5oIGIvaW5jbHVkZS9hc20taTM4Ni90aW1lLmgKaW5kZXggZWE4MDY1YS4uNTcxYjQyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni90aW1lLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90aW1lLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfc2NoZWRfY2xvY2sodm9pZCk7CiAjZWxzZSAvKiAhQ09ORklHX1BBUkFWSVJUICovCiAKICNkZWZpbmUgZ2V0X3dhbGxjbG9jaygpIG5hdGl2ZV9nZXRfd2FsbGNsb2NrKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdGltZXIuaCBiL2luY2x1ZGUvYXNtLWkzODYvdGltZXIuaAppbmRleCBkMGViZDA1Li40NzUyYzNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3RpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90aW1lci5oCkBAIC04LDYgKzgsOSBAQAogLyogTW9kaWZpZXJzIGZvciBidWdneSBQSVQgaGFuZGxpbmcgKi8KIGV4dGVybiBpbnQgcGl0X2xhdGNoX2J1Z2d5OwogZXh0ZXJuIGludCB0aW1lcl9hY2s7CitleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyAoKmN1c3RvbV9zY2hlZF9jbG9jaykodm9pZCk7CitleHRlcm4gaW50IG5vX3N5bmNfY21vc19jbG9jazsKIGV4dGVybiBpbnQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3RzYy5oIGIvaW5jbHVkZS9hc20taTM4Ni90c2MuaAppbmRleCBjMTM5MzMxLi5lOTk3ODkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3RzYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdHNjLmgKQEAgLTEsNDggKzEgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3RzYy5oCi0gKgotICogaTM4NiBUU0MgcmVsYXRlZCBmdW5jdGlvbnMKLSAqLwotI2lmbmRlZiBfQVNNX2kzODZfVFNDX0gKLSNkZWZpbmUgX0FTTV9pMzg2X1RTQ19ICi0KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KLS8qCi0gKiBTdGFuZGFyZCB3YXkgdG8gYWNjZXNzIHRoZSBjeWNsZSBjb3VudGVyIG9uIGk1ODYrIENQVXMuCi0gKiBDdXJyZW50bHkgb25seSB1c2VkIG9uIFNNUC4KLSAqCi0gKiBJZiB5b3UgcmVhbGx5IGhhdmUgYSBTTVAgbWFjaGluZSB3aXRoIGk0ODYgY2hpcHMgb3Igb2xkZXIsCi0gKiBjb21waWxlIGZvciB0aGF0LCBhbmQgdGhpcyB3aWxsIGp1c3QgYWx3YXlzIHJldHVybiB6ZXJvLgotICogVGhhdCdzIG9rLCBpdCBqdXN0IG1lYW5zIHRoYXQgdGhlIG5pY2VyIHNjaGVkdWxpbmcgaGV1cmlzdGljcwotICogd29uJ3Qgd29yayBmb3IgeW91LgotICoKLSAqIFdlIG9ubHkgdXNlIHRoZSBsb3cgMzIgYml0cywgYW5kIHdlJ2Qgc2ltcGx5IGJldHRlciBtYWtlIHN1cmUKLSAqIHRoYXQgd2UgcmVzY2hlZHVsZSBiZWZvcmUgdGhhdCB3cmFwcy4gU2NoZWR1bGluZyBhdCBsZWFzdCBldmVyeQotICogZm91ciBiaWxsaW9uIGN5Y2xlcyBqdXN0IGJhc2ljYWxseSBzb3VuZHMgbGlrZSBhIGdvb2QgaWRlYSwKLSAqIHJlZ2FyZGxlc3Mgb2YgaG93IGZhc3QgdGhlIG1hY2hpbmUgaXMuCi0gKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGN5Y2xlc190OwotCi1leHRlcm4gdW5zaWduZWQgaW50IGNwdV9raHo7Ci1leHRlcm4gdW5zaWduZWQgaW50IHRzY19raHo7Ci0KLXN0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyByZXQgPSAwOwotCi0jaWZuZGVmIENPTkZJR19YODZfVFNDCi0JaWYgKCFjcHVfaGFzX3RzYykKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19YODZfVFNDKQotCXJkdHNjbGwocmV0KTsKLSNlbmRpZgotCXJldHVybiByZXQ7Ci19Ci0KLWV4dGVybiB2b2lkIHRzY19pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgbWFya190c2NfdW5zdGFibGUodm9pZCk7Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS14ODZfNjQvdHNjLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3ZtaS5oIGIvaW5jbHVkZS9hc20taTM4Ni92bWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2M4OTMzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni92bWkuaApAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIFZNSSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgVk13YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogTWFpbnRhaW5lZCBieTogWmFjaGFyeSBBbXNkZW4gemFjaEB2bXdhcmUuY29tCisgKgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIFZNSSBPcHRpb24gUk9NIEFQSQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgVk1JX1NJR05BVFVSRSAweDY5NmQ1NjYzICAgLyogImNWbWkiICovCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WTVdBUkUgICAgICAgICAgICAweDE1QUQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTVdBUkVfVk1JICAgICAgICAweDA4MDEKKworLyoKKyAqIFdlIHVzZSB0d28gdmVyc2lvbiBudW1iZXJzIGZvciBjb21wYXRpYmlsaXR5LCB3aXRoIHRoZSBtYWpvcgorICogbnVtYmVyIHNpZ25pZnlpbmcgaW50ZXJmYWNlIGJyZWFrYWdlcywgYW5kIHRoZSBtaW5vciBudW1iZXIKKyAqIGludGVyZmFjZSBleHRlbnNpb25zLgorICovCisjZGVmaW5lIFZNSV9BUElfUkVWX01BSk9SICAgICAgIDMKKyNkZWZpbmUgVk1JX0FQSV9SRVZfTUlOT1IgICAgICAgMAorCisjZGVmaW5lIFZNSV9DQUxMX0NQVUlECQkJMAorI2RlZmluZSBWTUlfQ0FMTF9XUk1TUgkJCTEKKyNkZWZpbmUgVk1JX0NBTExfUkRNU1IJCQkyCisjZGVmaW5lIFZNSV9DQUxMX1NldEdEVAkJCTMKKyNkZWZpbmUgVk1JX0NBTExfU2V0TERUCQkJNAorI2RlZmluZSBWTUlfQ0FMTF9TZXRJRFQJCQk1CisjZGVmaW5lIFZNSV9DQUxMX1NldFRSCQkJNgorI2RlZmluZSBWTUlfQ0FMTF9HZXRHRFQJCQk3CisjZGVmaW5lIFZNSV9DQUxMX0dldExEVAkJCTgKKyNkZWZpbmUgVk1JX0NBTExfR2V0SURUCQkJOQorI2RlZmluZSBWTUlfQ0FMTF9HZXRUUgkJCTEwCisjZGVmaW5lIFZNSV9DQUxMX1dyaXRlR0RURW50cnkJCTExCisjZGVmaW5lIFZNSV9DQUxMX1dyaXRlTERURW50cnkJCTEyCisjZGVmaW5lIFZNSV9DQUxMX1dyaXRlSURURW50cnkJCTEzCisjZGVmaW5lIFZNSV9DQUxMX1VwZGF0ZUtlcm5lbFN0YWNrCTE0CisjZGVmaW5lIFZNSV9DQUxMX1NldENSMAkJCTE1CisjZGVmaW5lIFZNSV9DQUxMX1NldENSMgkJCTE2CisjZGVmaW5lIFZNSV9DQUxMX1NldENSMwkJCTE3CisjZGVmaW5lIFZNSV9DQUxMX1NldENSNAkJCTE4CisjZGVmaW5lIFZNSV9DQUxMX0dldENSMAkJCTE5CisjZGVmaW5lIFZNSV9DQUxMX0dldENSMgkJCTIwCisjZGVmaW5lIFZNSV9DQUxMX0dldENSMwkJCTIxCisjZGVmaW5lIFZNSV9DQUxMX0dldENSNAkJCTIyCisjZGVmaW5lIFZNSV9DQUxMX1dCSU5WRAkJCTIzCisjZGVmaW5lIFZNSV9DQUxMX1NldERSCQkJMjQKKyNkZWZpbmUgVk1JX0NBTExfR2V0RFIJCQkyNQorI2RlZmluZSBWTUlfQ0FMTF9SRFBNQwkJCTI2CisjZGVmaW5lIFZNSV9DQUxMX1JEVFNDCQkJMjcKKyNkZWZpbmUgVk1JX0NBTExfQ0xUUwkJCTI4CisjZGVmaW5lIFZNSV9DQUxMX0VuYWJsZUludGVycnVwdHMJMjkKKyNkZWZpbmUgVk1JX0NBTExfRGlzYWJsZUludGVycnVwdHMJMzAKKyNkZWZpbmUgVk1JX0NBTExfR2V0SW50ZXJydXB0TWFzawkzMQorI2RlZmluZSBWTUlfQ0FMTF9TZXRJbnRlcnJ1cHRNYXNrCTMyCisjZGVmaW5lIFZNSV9DQUxMX0lSRVQJCQkzMworI2RlZmluZSBWTUlfQ0FMTF9TWVNFWElUCQkzNAorI2RlZmluZSBWTUlfQ0FMTF9IYWx0CQkJMzUKKyNkZWZpbmUgVk1JX0NBTExfUmVib290CQkJMzYKKyNkZWZpbmUgVk1JX0NBTExfU2h1dGRvd24JCTM3CisjZGVmaW5lIFZNSV9DQUxMX1NldFB4RQkJCTM4CisjZGVmaW5lIFZNSV9DQUxMX1NldFB4RUxvbmcJCTM5CisjZGVmaW5lIFZNSV9DQUxMX1VwZGF0ZVB4RQkJNDAKKyNkZWZpbmUgVk1JX0NBTExfVXBkYXRlUHhFTG9uZwkJNDEKKyNkZWZpbmUgVk1JX0NBTExfTWFjaGluZVRvUGh5c2ljYWwJNDIKKyNkZWZpbmUgVk1JX0NBTExfUGh5c2ljYWxUb01hY2hpbmUJNDMKKyNkZWZpbmUgVk1JX0NBTExfQWxsb2NhdGVQYWdlCQk0NAorI2RlZmluZSBWTUlfQ0FMTF9SZWxlYXNlUGFnZQkJNDUKKyNkZWZpbmUgVk1JX0NBTExfSW52YWxQYWdlCQk0NgorI2RlZmluZSBWTUlfQ0FMTF9GbHVzaFRMQgkJNDcKKyNkZWZpbmUgVk1JX0NBTExfU2V0TGluZWFyTWFwcGluZwk0OAorCisjZGVmaW5lIFZNSV9DQUxMX1NldElPUExNYXNrCQk2MQorI2RlZmluZSBWTUlfQ0FMTF9TZXRJbml0aWFsQVBTdGF0ZQk2MgorI2RlZmluZSBWTUlfQ0FMTF9BUElDV3JpdGUJCTYzCisjZGVmaW5lIFZNSV9DQUxMX0FQSUNSZWFkCQk2NAorI2RlZmluZSBWTUlfQ0FMTF9TZXRMYXp5TW9kZQkJNzMKKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogTU1VIG9wZXJhdGlvbiBmbGFncworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogRmxhZ3MgdXNlZCBieSBWTUlfe0FsbG9jYXRlfFJlbGVhc2V9UGFnZSBjYWxsICovCisjZGVmaW5lIFZNSV9QQUdFX1BBRSAgICAgICAgICAgICAweDEwICAvKiBBbGxvY2F0ZSBQQUUgc2hhZG93ICovCisjZGVmaW5lIFZNSV9QQUdFX0NMT05FICAgICAgICAgICAweDIwICAvKiBDbG9uZSBmcm9tIGFub3RoZXIgc2hhZG93ICovCisjZGVmaW5lIFZNSV9QQUdFX1pFUk9FRCAgICAgICAgICAweDQwICAvKiBQYWdlIGlzIHByZS16ZXJvZWQgKi8KKworCisvKiBGbGFncyBzaGFyZWQgYnkgQWxsb2NhdGV8UmVsZWFzZSBQYWdlIGFuZCBQVEUgdXBkYXRlcyAqLworI2RlZmluZSBWTUlfUEFHRV9QVCAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBWTUlfUEFHRV9QRCAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBWTUlfUEFHRV9QRFAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBWTUlfUEFHRV9QTUw0ICAgICAgICAgICAgMHgwOAorCisjZGVmaW5lIFZNSV9QQUdFX05PUk1BTCAgICAgICAgICAweDAwIC8qIGZvciBkZWJ1Z2dpbmcgKi8KKworLyogRmxhZ3MgdXNlZCBieSBQVEUgdXBkYXRlcyAqLworI2RlZmluZSBWTUlfUEFHRV9DVVJSRU5UX0FTICAgICAgMHgxMCAvKiBpbXBsaWVzIFZNSV9QQUdFX1ZBX01BU0sgaXMgdmFsaWQgKi8KKyNkZWZpbmUgVk1JX1BBR0VfREVGRVIgICAgICAgICAgIDB4MjAgLyogbWF5IHF1ZXVlIHVwZGF0ZSB1bnRpbCBUTEIgaW52YWwgKi8KKyNkZWZpbmUgVk1JX1BBR0VfVkFfTUFTSyAgICAgICAgIDB4ZmZmZmYwMDAKKworI2lmZGVmIENPTkZJR19YODZfUEFFCisjZGVmaW5lIFZNSV9QQUdFX0wxCQkoVk1JX1BBR0VfUFQgfCBWTUlfUEFHRV9QQUUgfCBWTUlfUEFHRV9aRVJPRUQpCisjZGVmaW5lIFZNSV9QQUdFX0wyCQkoVk1JX1BBR0VfUEQgfCBWTUlfUEFHRV9QQUUgfCBWTUlfUEFHRV9aRVJPRUQpCisjZWxzZQorI2RlZmluZSBWTUlfUEFHRV9MMQkJKFZNSV9QQUdFX1BUIHwgVk1JX1BBR0VfWkVST0VEKQorI2RlZmluZSBWTUlfUEFHRV9MMgkJKFZNSV9QQUdFX1BEIHwgVk1JX1BBR0VfWkVST0VEKQorI2VuZGlmCisKKy8qIEZsYWdzIHVzZWQgYnkgVk1JX0ZsdXNoVExCIGNhbGwgKi8KKyNkZWZpbmUgVk1JX0ZMVVNIX1RMQiAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgVk1JX0ZMVVNIX0dMT0JBTCAgICAgICAgIDB4MDIKKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIFZNSSByZWxvY2F0aW9uIGRlZmluaXRpb25zIGZvciBST00gY2FsbCBnZXRfcmVsb2MKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIFZNSSBSZWxvY2F0aW9uIHR5cGVzICovCisjZGVmaW5lIFZNSV9SRUxPQ0FUSU9OX05PTkUgICAgIDAKKyNkZWZpbmUgVk1JX1JFTE9DQVRJT05fQ0FMTF9SRUwgMQorI2RlZmluZSBWTUlfUkVMT0NBVElPTl9KVU1QX1JFTCAyCisjZGVmaW5lIFZNSV9SRUxPQ0FUSU9OX05PUAkzCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3Qgdm1pX3JlbG9jYXRpb25faW5mbyB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICplaXA7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIHR5cGU7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIHJlc2VydmVkWzNdOworfTsKKyNlbmRpZgorCisKKy8qCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBHZW5lcmljIFJPTSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHZyb21faGVhZGVyIHsKKwl1MTYgICAgIHJvbV9zaWduYXR1cmU7ICAvLyBvcHRpb24gUk9NIHNpZ25hdHVyZQorCXU4ICAgICAgcm9tX2xlbmd0aDsgICAgIC8vIFJPTSBsZW5ndGggaW4gNTEyIGJ5dGUgY2h1bmtzCisJdTggICAgICByb21fZW50cnlbNF07ICAgLy8gMTYtYml0IGNvZGUgZW50cnkgcG9pbnQKKwl1OCAgICAgIHJvbV9wYWQwOyAgICAgICAvLyA0LWJ5dGUgYWxpZ24gcGFkCisJdTMyICAgICB2cm9tX3NpZ25hdHVyZTsgLy8gVlJPTSBpZGVudGlmaWNhdGlvbiBzaWduYXR1cmUKKwl1OCAgICAgIGFwaV92ZXJzaW9uX21pbjsvLyBNaW5vciB2ZXJzaW9uIG9mIEFQSQorCXU4ICAgICAgYXBpX3ZlcnNpb25fbWFqOy8vIE1ham9yIHZlcnNpb24gb2YgQVBJCisJdTggICAgICBqdW1wX3Nsb3RzOyAgICAgLy8gTnVtYmVyIG9mIGp1bXAgc2xvdHMKKwl1OCAgICAgIHJlc2VydmVkMTsgICAgICAvLyBSZXNlcnZlZCBmb3IgZXhwYW5zaW9uCisJdTMyICAgICB2aXJ0dWFsX3RvcDsgICAgLy8gSHlwZXJ2aXNvciB2aXJ0dWFsIGFkZHJlc3Mgc3RhcnQKKwl1MTYgICAgIHJlc2VydmVkMjsgICAgICAvLyBSZXNlcnZlZCBmb3IgZXhwYW5zaW9uCisJdTE2CWxpY2Vuc2Vfb2ZmczsJLy8gT2Zmc2V0IHRvIExpY2Vuc2Ugc3RyaW5nCisJdTE2ICAgICBwY2lfaGVhZGVyX29mZnM7Ly8gT2Zmc2V0IHRvIFBDSSBPUFJPTSBoZWFkZXIKKwl1MTYgICAgIHBucF9oZWFkZXJfb2ZmczsvLyBPZmZzZXQgdG8gUG5QIE9QUk9NIGhlYWRlcgorCXUzMiAgICAgcm9tX3BhZDM7ICAgICAgIC8vIFBuUCByZXNlcnZlcmQgLyBWTUkgcmVzZXJ2ZWQKKwl1OCAgICAgIHJlc2VydmVkWzk2XTsgICAvLyBSZXNlcnZlZCBmb3IgaGVhZGVycworCWNoYXIgICAgdm1pX2luaXRbOF07ICAgIC8vIFZNSV9Jbml0IGp1bXAgcG9pbnQKKwljaGFyICAgIGdldF9yZWxvY1s4XTsgICAvLyBWTUlfR2V0UmVsb2NhdGlvbkluZm8ganVtcCBwb2ludAorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHBucF9oZWFkZXIgeworICAgICAgICBjaGFyIHNpZ1s0XTsKKyAgICAgICAgY2hhciByZXY7CisgICAgICAgIGNoYXIgc2l6ZTsKKyAgICAgICAgc2hvcnQgbmV4dDsKKyAgICAgICAgc2hvcnQgcmVzOworICAgICAgICBsb25nIGRldklEOworICAgICAgICB1bnNpZ25lZCBzaG9ydCBtYW51ZmFjdHVyZXJfb2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm9kdWN0X29mZnNldDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBwY2lfaGVhZGVyIHsKKyAgICAgICAgY2hhciBzaWdbNF07CisgICAgICAgIHNob3J0IHZlbmRvcklEOworICAgICAgICBzaG9ydCBkZXZpY2VJRDsKKyAgICAgICAgc2hvcnQgdnBkRGF0YTsKKyAgICAgICAgc2hvcnQgc2l6ZTsKKyAgICAgICAgY2hhciByZXY7CisgICAgICAgIGNoYXIgY2xhc3M7CisgICAgICAgIGNoYXIgc3ViY2xhc3M7CisgICAgICAgIGNoYXIgaW50ZXJmYWNlOworICAgICAgICBzaG9ydCBjaHVua3M7CisgICAgICAgIGNoYXIgcm9tX3ZlcnNpb25fbWluOworICAgICAgICBjaGFyIHJvbV92ZXJzaW9uX21hajsKKyAgICAgICAgY2hhciBjb2RldHlwZTsKKyAgICAgICAgY2hhciBsYXN0Um9tOworICAgICAgICBzaG9ydCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGJvb3RzdHJhcHBpbmcgKi8KK2V4dGVybiB2b2lkIHZtaV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdm1pX2JyaW5ndXAodm9pZCk7CitleHRlcm4gdm9pZCB2bWlfYXBwbHlfYm9vdF9wYWdlX2FsbG9jYXRpb25zKHZvaWQpOworCisvKiBTdGF0ZSBuZWVkZWQgdG8gc3RhcnQgYW4gYXBwbGljYXRpb24gcHJvY2Vzc29yIGluIGFuIFNNUCBzeXN0ZW0uICovCitzdHJ1Y3Qgdm1pX2FwX3N0YXRlIHsKKwl1MzIgY3IwOworCXUzMiBjcjI7CisJdTMyIGNyMzsKKwl1MzIgY3I0OworCisJdTY0IGVmZXI7CisKKwl1MzIgZWlwOworCXUzMiBlZmxhZ3M7CisJdTMyIGVheDsKKwl1MzIgZWJ4OworCXUzMiBlY3g7CisJdTMyIGVkeDsKKwl1MzIgZXNwOworCXUzMiBlYnA7CisJdTMyIGVzaTsKKwl1MzIgZWRpOworCXUxNiBjczsKKwl1MTYgc3M7CisJdTE2IGRzOworCXUxNiBlczsKKwl1MTYgZnM7CisJdTE2IGdzOworCXUxNiBsZHRyOworCisJdTE2IGdkdHJfbGltaXQ7CisJdTMyIGdkdHJfYmFzZTsKKwl1MzIgaWR0cl9iYXNlOworCXUxNiBpZHRyX2xpbWl0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3ZtaV90aW1lLmggYi9pbmNsdWRlL2FzbS1pMzg2L3ZtaV90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyOTMxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdm1pX3RpbWUuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIFZNSSBUaW1lIHdyYXBwZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCBWTXdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvIGRoZWNodEB2bXdhcmUuY29tCisgKgorICovCisKKyNpZm5kZWYgX19WTUlfVElNRV9ICisjZGVmaW5lIF9fVk1JX1RJTUVfSAorCisvKgorICogUmF3IFZNSSBjYWxsIGluZGljZXMgZm9yIHRpbWVyIGZ1bmN0aW9ucworICovCisjZGVmaW5lIFZNSV9DQUxMX0dldEN5Y2xlRnJlcXVlbmN5CTY2CisjZGVmaW5lIFZNSV9DQUxMX0dldEN5Y2xlQ291bnRlcgk2NworI2RlZmluZSBWTUlfQ0FMTF9TZXRBbGFybQkJNjgKKyNkZWZpbmUgVk1JX0NBTExfQ2FuY2VsQWxhcm0JCTY5CisjZGVmaW5lIFZNSV9DQUxMX0dldFdhbGxjbG9ja1RpbWUJNzAKKyNkZWZpbmUgVk1JX0NBTExfV2FsbGNsb2NrVXBkYXRlZAk3MQorCisvKiBDYWNoZWQgVk1JIHRpbWVyIG9wZXJhdGlvbnMgKi8KK2V4dGVybiBzdHJ1Y3Qgdm1pX3RpbWVyX29wcyB7CisJdTY0ICgqZ2V0X2N5Y2xlX2ZyZXF1ZW5jeSkodm9pZCk7CisJdTY0ICgqZ2V0X2N5Y2xlX2NvdW50ZXIpKGludCk7CisJdTY0ICgqZ2V0X3dhbGxjbG9jaykodm9pZCk7CisJaW50ICgqd2FsbGNsb2NrX3VwZGF0ZWQpKHZvaWQpOworCXZvaWQgKCpzZXRfYWxhcm0pKHUzMiBmbGFncywgdTY0IGV4cGlyeSwgdTY0IHBlcmlvZCk7CisJdm9pZCAoKmNhbmNlbF9hbGFybSkodTMyIGZsYWdzKTsKK30gdm1pX3RpbWVyX29wczsKKworLyogUHJvdG90eXBlcyAqLworZXh0ZXJuIHZvaWQgX19pbml0IHZtaV90aW1lX2luaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2bWlfZ2V0X3dhbGxjbG9jayh2b2lkKTsKK2V4dGVybiBpbnQgdm1pX3NldF93YWxsY2xvY2sodW5zaWduZWQgbG9uZyBub3cpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB2bWlfc2NoZWRfY2xvY2sodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKK2V4dGVybiB2b2lkIF9faW5pdCB2bWlfdGltZXJfc2V0dXBfYm9vdF9hbGFybSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCB2bWlfdGltZXJfc2V0dXBfc2Vjb25kYXJ5X2FsYXJtKHZvaWQpOworZXh0ZXJuIHZvaWQgYXBpY192bWlfdGltZXJfaW50ZXJydXB0KHZvaWQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgorZXh0ZXJuIGludCB2bWlfc3RvcF9oel90aW1lcih2b2lkKTsKK2V4dGVybiB2b2lkIHZtaV9hY2NvdW50X3RpbWVfcmVzdGFydF9oel90aW1lcih2b2lkKTsKKyNlbmRpZgorCisvKgorICogV2hlbiBydW4gdW5kZXIgYSBoeXBlcnZpc29yLCBhIHZjcHUgaXMgYWx3YXlzIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6CisgKiBydW5uaW5nLCBoYWx0ZWQsIG9yIHJlYWR5LiAgVGhlIHZjcHUgaXMgaW4gdGhlICdydW5uaW5nJyBzdGF0ZSBpZiBpdAorICogaXMgZXhlY3V0aW5nLiAgV2hlbiB0aGUgdmNwdSBleGVjdXRlcyB0aGUgaGFsdCBpbnRlcmZhY2UsIHRoZSB2Y3B1CisgKiBlbnRlcnMgdGhlICdoYWx0ZWQnIHN0YXRlIGFuZCByZW1haW5zIGhhbHRlZCB1bnRpbCB0aGVyZSBpcyBzb21lIHdvcmsKKyAqIHBlbmRpbmcgZm9yIHRoZSB2Y3B1IChlLmcuIGFuIGFsYXJtIGV4cGlyZXMsIGhvc3QgSS9PIGNvbXBsZXRlcyBvbgorICogYmVoYWxmIG9mIHZpcnR1YWwgSS9PKS4gIEF0IHRoaXMgcG9pbnQsIHRoZSB2Y3B1IGVudGVycyB0aGUgJ3JlYWR5JworICogc3RhdGUgKHdhaXRpbmcgZm9yIHRoZSBoeXBlcnZpc29yIHRvIHJlc2NoZWR1bGUgaXQpLiAgRmluYWxseSwgYXQgYW55CisgKiB0aW1lIHdoZW4gdGhlIHZjcHUgaXMgbm90IGluIHRoZSAncnVubmluZycgc3RhdGUgbm9yIHRoZSAnaGFsdGVkJworICogc3RhdGUsIGl0IGlzIGluIHRoZSAncmVhZHknIHN0YXRlLgorICoKKyAqIFJlYWwgdGltZSBpcyBhZHZhbmNlcyB3aGlsZSB0aGUgdmNwdSBpcyAncnVubmluZycsICdyZWFkeScsIG9yCisgKiAnaGFsdGVkJy4gIFN0b2xlbiB0aW1lIGlzIHRoZSB0aW1lIGluIHdoaWNoIHRoZSB2Y3B1IGlzIGluIHRoZQorICogJ3JlYWR5JyBzdGF0ZS4gIEF2YWlsYWJsZSB0aW1lIGlzIHRoZSByZW1haW5pbmcgdGltZSAtLSB0aGUgdmNwdSBpcworICogZWl0aGVyICdydW5uaW5nJyBvciAnaGFsdGVkJy4KKyAqCisgKiBBbGwgdGhyZWUgdmlld3Mgb2YgdGltZSBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBWTUkgY3ljbGUKKyAqIGNvdW50ZXJzLgorICovCisKKy8qIFRoZSBjeWNsZSBjb3VudGVycy4gKi8KKyNkZWZpbmUgVk1JX0NZQ0xFU19SRUFMICAgICAgICAgMAorI2RlZmluZSBWTUlfQ1lDTEVTX0FWQUlMQUJMRSAgICAxCisjZGVmaW5lIFZNSV9DWUNMRVNfU1RPTEVOICAgICAgIDIKKworLyogVGhlIGFsYXJtIGludGVyZmFjZSAnZmxhZ3MnIGJpdHMgKi8KKyNkZWZpbmUgVk1JX0FMQVJNX0NPVU5URVJTICAgICAgMgorCisjZGVmaW5lIFZNSV9BTEFSTV9DT1VOVEVSX01BU0sgIDB4MDAwMDAwZmYKKworI2RlZmluZSBWTUlfQUxBUk1fV0lSRURfSVJRMCAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZNSV9BTEFSTV9XSVJFRF9MVlRUICAgIDB4MDAwMTAwMDAKKworI2RlZmluZSBWTUlfQUxBUk1fSVNfT05FU0hPVCAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZNSV9BTEFSTV9JU19QRVJJT0RJQyAgIDB4MDAwMDAxMDAKKworI2RlZmluZSBDT05GSUdfVk1JX0FMQVJNX0haCTEwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQva2V4ZWMuaCBiL2luY2x1ZGUvYXNtLWlhNjQva2V4ZWMuaAppbmRleCAwMWMzNmIwLi5mMmFkNDY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2tleGVjLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9rZXhlYy5oCkBAIC0yMyw3ICsyMyw3IEBACiAKIGV4dGVybiBzdHJ1Y3Qga2ltYWdlICppYTY0X2tpbWFnZTsKIERFQ0xBUkVfUEVSX0NQVSh1NjQsIGlhNjRfbWNhX3BhbF9iYXNlKTsKLWNvbnN0IGV4dGVybiB1bnNpZ25lZCBpbnQgcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU7CiBleHRlcm4gdm9pZCByZWxvY2F0ZV9uZXdfa2VybmVsKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCiAJCXN0cnVjdCBpYTY0X2Jvb3RfcGFyYW0gKiwgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgaW5saW5lIHZvaWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbGliYXRhLXBvcnRtYXAuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbGliYXRhLXBvcnRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTAwYzlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taWE2NC9saWJhdGEtcG9ydG1hcC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19BU01fSUE2NF9MSUJBVEFfUE9SVE1BUF9ICisjZGVmaW5lIF9fQVNNX0lBNjRfTElCQVRBX1BPUlRNQVBfSAorCisjZGVmaW5lIEFUQV9QUklNQVJZX0NNRAkJMHgxRjAKKyNkZWZpbmUgQVRBX1BSSU1BUllfQ1RMCQkweDNGNgorI2RlZmluZSBBVEFfUFJJTUFSWV9JUlEoZGV2KQlpc2FfaXJxX3RvX3ZlY3RvcigxNCkKKworI2RlZmluZSBBVEFfU0VDT05EQVJZX0NNRAkweDE3MAorI2RlZmluZSBBVEFfU0VDT05EQVJZX0NUTAkweDM3NgorI2RlZmluZSBBVEFfU0VDT05EQVJZX0lSUShkZXYpCWlzYV9pcnFfdG9fdmVjdG9yKDE1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oCmluZGV4IGJjNzY4MTUuLmU0MzAyMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wYWwuaApAQCAtMzIsNyArMzIsNyBAQAogI2RlZmluZSBQQUxfQ0FDSEVfRkxVU0gJCTEJLyogZmx1c2ggaS9kIGNhY2hlICovCiAjZGVmaW5lIFBBTF9DQUNIRV9JTkZPCQkyCS8qIGdldCBkZXRhaWxlZCBpL2QgY2FjaGUgaW5mbyAqLwogI2RlZmluZSBQQUxfQ0FDSEVfSU5JVAkJMwkvKiBpbml0aWFsaXplIGkvZCBjYWNoZSAqLwotI2RlZmluZSBQQUxfQ0FDSEVfU1VNTUFSWQk0CS8qIGdldCBzdW1tYXJ5IG9mIGNhY2hlIGhlaXJhcmNoeSAqLworI2RlZmluZSBQQUxfQ0FDSEVfU1VNTUFSWQk0CS8qIGdldCBzdW1tYXJ5IG9mIGNhY2hlIGhpZXJhcmNoeSAqLwogI2RlZmluZSBQQUxfTUVNX0FUVFJJQgkJNQkvKiBsaXN0IHN1cHBvcnRlZCBtZW1vcnkgYXR0cmlidXRlcyAqLwogI2RlZmluZSBQQUxfUFRDRV9JTkZPCQk2CS8qIHB1cmdlIFRMQiBpbmZvICovCiAjZGVmaW5lIFBBTF9WTV9JTkZPCQk3CS8qIHJldHVybiBzdXBwb3J0ZWQgdmlydHVhbCBtZW1vcnkgZmVhdHVyZXMgKi8KQEAgLTExMywxNCArMTEzLDE0IEBACiAJCQkJCQkgKi8KICNkZWZpbmUgUEFMX1NUQVRVU19SRVFVSVJFU19NRU1PUlkJKC05KQkvKiBDYWxsIHJlcXVpcmVzIFBBTCBtZW1vcnkgYnVmZmVyICovCiAKLS8qIFByb2Nlc3NvciBjYWNoZSBsZXZlbCBpbiB0aGUgaGVpcmFyY2h5ICovCisvKiBQcm9jZXNzb3IgY2FjaGUgbGV2ZWwgaW4gdGhlIGhpZXJhcmNoeSAqLwogdHlwZWRlZiB1NjQJCQkJcGFsX2NhY2hlX2xldmVsX3Q7CiAjZGVmaW5lIFBBTF9DQUNIRV9MRVZFTF9MMAkJMAkvKiBMMCAqLwogI2RlZmluZSBQQUxfQ0FDSEVfTEVWRUxfTDEJCTEJLyogTDEgKi8KICNkZWZpbmUgUEFMX0NBQ0hFX0xFVkVMX0wyCQkyCS8qIEwyICovCiAKIAotLyogUHJvY2Vzc29yIGNhY2hlIHR5cGUgYXQgYSBwYXJ0aWN1bGFyIGxldmVsIGluIHRoZSBoZWlyYXJjaHkgKi8KKy8qIFByb2Nlc3NvciBjYWNoZSB0eXBlIGF0IGEgcGFydGljdWxhciBsZXZlbCBpbiB0aGUgaGllcmFyY2h5ICovCiAKIHR5cGVkZWYgdTY0CQkJCXBhbF9jYWNoZV90eXBlX3Q7CiAjZGVmaW5lIFBBTF9DQUNIRV9UWVBFX0lOU1RSVUNUSU9OCTEJLyogSW5zdHJ1Y3Rpb24gY2FjaGUgKi8KQEAgLTI3MiwxNCArMjcyLDE0IEBACiAjZGVmaW5lIFBBTF9DQUNIRV9QUk9UX01FVEhPRF9FQ0MJCTMJLyogRUNDIHByb3RlY3Rpb24gKi8KIAogCi0vKiBQcm9jZXNzb3IgY2FjaGUgbGluZSBpZGVudGlmaWNhdGlvbiBpbiB0aGUgaGVpcmFyY2h5ICovCisvKiBQcm9jZXNzb3IgY2FjaGUgbGluZSBpZGVudGlmaWNhdGlvbiBpbiB0aGUgaGllcmFyY2h5ICovCiB0eXBlZGVmIHVuaW9uIHBhbF9jYWNoZV9saW5lX2lkX3UgewogCXU2NAkJCXBjbGlkX2RhdGE7CiAJc3RydWN0IHsKIAkJdTY0CQljYWNoZV90eXBlCTogOCwJLyogNy0wIGNhY2hlIHR5cGUgKi8KIAkJCQlsZXZlbAkJOiA4LAkvKiAxNS04IGxldmVsIG9mIHRoZQogCQkJCQkJCSAqIGNhY2hlIGluIHRoZQotCQkJCQkJCSAqIGhlaXJhcmNoeS4KKwkJCQkJCQkgKiBoaWVyYXJjaHkuCiAJCQkJCQkJICovCiAJCQkJd2F5CQk6IDgsCS8qIDIzLTE2IHdheSBpbiB0aGUgc2V0CiAJCQkJCQkJICovCkBAIC0yOTIsNyArMjkyLDcgQEAKIAkJdTY0CQljYWNoZV90eXBlCTogOCwJLyogNy0wIGNhY2hlIHR5cGUgKi8KIAkJCQlsZXZlbAkJOiA4LAkvKiAxNS04IGxldmVsIG9mIHRoZQogCQkJCQkJCSAqIGNhY2hlIGluIHRoZQotCQkJCQkJCSAqIGhlaXJhcmNoeS4KKwkJCQkJCQkgKiBoaWVyYXJjaHkuCiAJCQkJCQkJICovCiAJCQkJd2F5CQk6IDgsCS8qIDIzLTE2IHdheSBpbiB0aGUgc2V0CiAJCQkJCQkJICovCkBAIC05NzgsNyArOTc4LDcgQEAKIAlyZXR1cm4gaXBydi5zdGF0dXM7CiB9CiAKLS8qIFJldHVybiBzdW1tYXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBoZWlyYXJjaHkgb2YgY2FjaGVzIGNvbnRyb2xsZWQgYnkgdGhlIHByb2Nlc3NvciAqLworLyogUmV0dXJuIHN1bW1hcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhpZXJhcmNoeSBvZiBjYWNoZXMgY29udHJvbGxlZCBieSB0aGUgcHJvY2Vzc29yICovCiBzdGF0aWMgaW5saW5lIHM2NAogaWE2NF9wYWxfY2FjaGVfc3VtbWFyeSAodTY0ICpjYWNoZV9sZXZlbHMsIHU2NCAqdW5pcXVlX2NhY2hlcykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYWJpLmggYi9pbmNsdWRlL2FzbS1taXBzL2FiaS5oCmluZGV4IDFjZTA1MTguLjFkZDc0ZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYWJpLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hYmkuaApAQCAtMTMsMTMgKzEzLDEzIEBACiAjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KIAogc3RydWN0IG1pcHNfYWJpIHsKLQl2b2lkICgqIGNvbnN0IGRvX3NpZ25hbCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCWludCAoKiBjb25zdCBzZXR1cF9mcmFtZSkoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNpZ25yLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKnNldCk7CiAJaW50ICgqIGNvbnN0IHNldHVwX3J0X2ZyYW1lKShzdHJ1Y3Qga19zaWdhY3Rpb24gKiBrYSwKIAkgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2lnbnIsCiAJICAgICAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqc2V0LCBzaWdpbmZvX3QgKmluZm8pOworCWNvbnN0IHVuc2lnbmVkIGxvbmcJcmVzdGFydDsKIH07CiAKICNlbmRpZiAvKiBfQVNNX0FCSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaAppbmRleCAwNmMwODIyLi44OTQzNmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmgKQEAgLTMsNyArMyw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoYykgMTk5NCAtIDE5OTcsIDE5OTksIDIwMDAsIDA2ICBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQgLSAxOTk3LCA5OSwgMjAwMCwgMDYsIDA3ICBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTksIDIwMDAgIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqLwogI2lmbmRlZiBfQVNNX0JJVE9QU19ICkBAIC0yNCwxMSArMjQsMTUgQEAKICNkZWZpbmUgU1pMT05HX01BU0sgMzFVTAogI2RlZmluZSBfX0xMCQkibGwJIgogI2RlZmluZSBfX1NDCQkic2MJIgorI2RlZmluZSBfX0lOUwkJImlucyAgICAiCisjZGVmaW5lIF9fRVhUCQkiZXh0ICAgICIKICNlbGlmIChfTUlQU19TWkxPTkcgPT0gNjQpCiAjZGVmaW5lIFNaTE9OR19MT0cgNgogI2RlZmluZSBTWkxPTkdfTUFTSyA2M1VMCiAjZGVmaW5lIF9fTEwJCSJsbGQJIgogI2RlZmluZSBfX1NDCQkic2NkCSIKKyNkZWZpbmUgX19JTlMJCSJkaW5zICAgICIKKyNkZWZpbmUgX19FWFQJCSJkZXh0ICAgICIKICNlbmRpZgogCiAvKgpAQCAtNjIsNiArNjYsMTkgQEAKIAkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKIAkJOiAiPSZyIiAodGVtcCksICI9bSIgKCptKQogCQk6ICJpciIgKDFVTCA8PCAobnIgJiBTWkxPTkdfTUFTSykpLCAibSIgKCptKSk7CisjaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKKwl9IGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG5yKSkgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CSIgX19MTCAiJTAsICUxCQkJIyBzZXRfYml0CVxuIgorCQkiCSIgX19JTlMgIiUwLCAlNCwgJTIsIDEJCQkJXG4iCisJCSIJIiBfX1NDICIlMCwgJTEJCQkJCVxuIgorCQkiCWJlcXoJJTAsIDJmCQkJCQlcbiIKKwkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKKwkJIjI6CWIJMWIJCQkJCVxuIgorCQkiCS5wcmV2aW91cwkJCQkJXG4iCisJCTogIj0mciIgKHRlbXApLCAiPW0iICgqbSkKKwkJOiAiaXIiIChuciAmIFNaTE9OR19NQVNLKSwgIm0iICgqbSksICJyIiAofjApKTsKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX01JUFNSMiAqLwogCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkiCS5zZXQJbWlwczMJCQkJCVxuIgpAQCAtMTEzLDYgKzEzMCwxOSBAQAogCQkiCS5zZXQJbWlwczAJCQkJCVxuIgogCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAoKm0pCiAJCTogImlyIiAofigxVUwgPDwgKG5yICYgU1pMT05HX01BU0spKSksICJtIiAoKm0pKTsKKyNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgorCX0gZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AobnIpKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiMToJIiBfX0xMICIlMCwgJTEJCQkjIGNsZWFyX2JpdAlcbiIKKwkJIgkiIF9fSU5TICIlMCwgJDAsICUyLCAxCQkJCVxuIgorCQkiCSIgX19TQyAiJTAsICUxCQkJCQlcbiIKKwkJIgliZXF6CSUwLCAyZgkJCQkJXG4iCisJCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCisJCSIyOgliCTFiCQkJCQlcbiIKKwkJIgkucHJldmlvdXMJCQkJCVxuIgorCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAoKm0pCisJCTogImlyIiAobnIgJiBTWkxPTkdfTUFTSyksICJtIiAoKm0pKTsKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX01JUFNSMiAqLwogCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkiCS5zZXQJbWlwczMJCQkJCVxuIgpAQCAtMjkxLDYgKzMyMSwyNiBAQAogCQk6ICJtZW1vcnkiKTsKIAogCQlyZXR1cm4gcmVzICE9IDA7CisjaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKKwl9IGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG5yKSkgeworCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOworCQl1bnNpZ25lZCBsb25nIHRlbXAsIHJlczsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6CSIgX19MTAkiJTAsICUxCQkjIHRlc3RfYW5kX2NsZWFyX2JpdAlcbiIKKwkJIgkiIF9fRVhUICIlMiwgJTAsICUzLCAxCQkJCVxuIgorCQkiCSIgX19JTlMJIiUwLCAkMCwgJTMsIDEJCQkJXG4iCisJCSIJIiBfX1NDIAkiJTAsICUxCQkJCQlcbiIKKwkJIgliZXF6CSUwLCAyZgkJCQkJXG4iCisJCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCisJCSIyOgliCTFiCQkJCQlcbiIKKwkJIgkucHJldmlvdXMJCQkJCVxuIgorCQk6ICI9JnIiICh0ZW1wKSwgIj1tIiAoKm0pLCAiPSZyIiAocmVzKQorCQk6ICJyaSIgKG5yICYgU1pMT05HX01BU0spLCAibSIgKCptKQorCQk6ICJtZW1vcnkiKTsKKworCQlyZXR1cm4gcmVzOworI2VuZGlmCiAJfSBlbHNlIGlmIChjcHVfaGFzX2xsc2MpIHsKIAkJdW5zaWduZWQgbG9uZyAqbSA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiBTWkxPTkdfTE9HKTsKIAkJdW5zaWduZWQgbG9uZyB0ZW1wLCByZXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NvbXBhdC1zaWduYWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvY29tcGF0LXNpZ25hbC5oCmluZGV4IDY3MjA3NzAuLjY1OTlhOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY29tcGF0LXNpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY29tcGF0LXNpZ25hbC5oCkBAIC01LDYgKzUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorI2luY2x1ZGUgPGFzbS9zaWdpbmZvLmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCiBzdGF0aWMgaW5saW5lIGludCBfX2NvcHlfY29udl9zaWdzZXRfdG9fdXNlcihjb21wYXRfc2lnc2V0X3QgX191c2VyICpkLAogCWNvbnN0IHNpZ3NldF90ICpzKQogewpAQCAtMzMsOSArMzgsNiBAQAogCUJVR19PTihzaXplb2YoKmQpICE9IHNpemVvZigqcykpOwogCUJVR19PTihfTlNJR19XT1JEUyAhPSAyKTsKIAotCWlmICh1bmxpa2VseSghYWNjZXNzX29rKFZFUklGWV9SRUFELCBkLCBzaXplb2YoKmQpKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCiAjaWZkZWYgQ09ORklHX0NQVV9CSUdfRU5ESUFOCiAJZXJyICA9IF9fZ2V0X3VzZXIodS0+Yy5zaWdbMV0sICZzLT5zaWdbMF0pOwogCWVyciB8PSBfX2dldF91c2VyKHUtPmMuc2lnWzBdLCAmcy0+c2lnWzFdKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZHMxMjE2LmggYi9pbmNsdWRlL2FzbS1taXBzL2RzMTIxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjhiNzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RzMTIxNi5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0RTMTIxNl9ICisjZGVmaW5lIF9EUzEyMTZfSAorCitleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqZHMxMjE2X2Jhc2U7Cit1bnNpZ25lZCBsb25nIGRzMTIxNl9nZXRfY21vc190aW1lKHZvaWQpOworaW50IGRzMTIxNl9zZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKTsKKworI2RlZmluZSBEUzEyMTZfU0VDX0JZVEUJCTEKKyNkZWZpbmUgRFMxMjE2X01JTl9CWVRFCQkyCisjZGVmaW5lIERTMTIxNl9IT1VSX0JZVEUJMworI2RlZmluZSBEUzEyMTZfSE9VUl9NQVNLCSgweDFmKQorI2RlZmluZSBEUzEyMTZfQU1QTV9NQVNLCSgxPDw1KQorI2RlZmluZSBEUzEyMTZfMTIyNF9NQVNLCSgxPDw3KQorI2RlZmluZSBEUzEyMTZfREFZX0JZVEUJCTQKKyNkZWZpbmUgRFMxMjE2X0RBWV9NQVNLCQkoMHg3KQorI2RlZmluZSBEUzEyMTZfREFURV9CWVRFCTUKKyNkZWZpbmUgRFMxMjE2X0RBVEVfTUFTSwkoMHgzZikKKyNkZWZpbmUgRFMxMjE2X01PTlRIX0JZVEUJNgorI2RlZmluZSBEUzEyMTZfTU9OVEhfTUFTSwkoMHgxZikKKyNkZWZpbmUgRFMxMjE2X1lFQVJfQllURQk3CisKKyNkZWZpbmUgRFMxMjE2X1NFQyhidWYpCQkoYnVmW0RTMTIxNl9TRUNfQllURV0pCisjZGVmaW5lIERTMTIxNl9NSU4oYnVmKQkJKGJ1ZltEUzEyMTZfTUlOX0JZVEVdKQorI2RlZmluZSBEUzEyMTZfSE9VUihidWYpCShidWZbRFMxMjE2X0hPVVJfQllURV0gJiBEUzEyMTZfSE9VUl9NQVNLKQorI2RlZmluZSBEUzEyMTZfQU1QTShidWYpCShidWZbRFMxMjE2X0hPVVJfQllURV0gJiBEUzEyMTZfQU1QTV9NQVNLKQorI2RlZmluZSBEUzEyMTZfMTIyNChidWYpCShidWZbRFMxMjE2X0hPVVJfQllURV0gJiBEUzEyMTZfMTIyNF9NQVNLKQorI2RlZmluZSBEUzEyMTZfREFURShidWYpCShidWZbRFMxMjE2X0RBVEVfQllURV0gJiBEUzEyMTZfREFURV9NQVNLKQorI2RlZmluZSBEUzEyMTZfTU9OVEgoYnVmKQkoYnVmW0RTMTIxNl9NT05USF9CWVRFXSAmIERTMTIxNl9NT05USF9NQVNLKQorI2RlZmluZSBEUzEyMTZfWUVBUihidWYpCShidWZbRFMxMjE2X1lFQVJfQllURV0pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pby5oIGIvaW5jbHVkZS9hc20tbWlwcy9pby5oCmluZGV4IGI2YTJlYjguLjkyZWMyNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lvLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9jcHUtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUtYml0cy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTUxOCwzNCArNTE5LDYgQEAKIH0KIAogLyoKLSAqIE1lbW9yeSBNYXBwZWQgSS9PCi0gKi8KLSNkZWZpbmUgaW9yZWFkOChhZGRyKQkJcmVhZGIoYWRkcikKLSNkZWZpbmUgaW9yZWFkMTYoYWRkcikJCXJlYWR3KGFkZHIpCi0jZGVmaW5lIGlvcmVhZDMyKGFkZHIpCQlyZWFkbChhZGRyKQotCi0jZGVmaW5lIGlvd3JpdGU4KGIsYWRkcikJd3JpdGViKGIsYWRkcikKLSNkZWZpbmUgaW93cml0ZTE2KHcsYWRkcikJd3JpdGV3KHcsYWRkcikKLSNkZWZpbmUgaW93cml0ZTMyKGwsYWRkcikJd3JpdGVsKGwsYWRkcikKLQotI2RlZmluZSBpb3JlYWQ4X3JlcChhLGIsYykJcmVhZHNiKGEsYixjKQotI2RlZmluZSBpb3JlYWQxNl9yZXAoYSxiLGMpCXJlYWRzdyhhLGIsYykKLSNkZWZpbmUgaW9yZWFkMzJfcmVwKGEsYixjKQlyZWFkc2woYSxiLGMpCi0KLSNkZWZpbmUgaW93cml0ZThfcmVwKGEsYixjKQl3cml0ZXNiKGEsYixjKQotI2RlZmluZSBpb3dyaXRlMTZfcmVwKGEsYixjKQl3cml0ZXN3KGEsYixjKQotI2RlZmluZSBpb3dyaXRlMzJfcmVwKGEsYixjKQl3cml0ZXNsKGEsYixjKQotCi0vKiBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgY29va2llIGZvciBhbiBJTyBwb3J0IHJhbmdlICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKTsKLWV4dGVybiB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKik7Ci0KLS8qIENyZWF0ZSBhIHZpcnR1YWwgbWFwcGluZyBjb29raWUgZm9yIGEgUENJIEJBUiAobWVtb3J5IG9yIElPKSAqLwotc3RydWN0IHBjaV9kZXY7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXgpOwotZXh0ZXJuIHZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICopOwotCi0vKgogICogSVNBIHNwYWNlIGlzICdhbHdheXMgbWFwcGVkJyBvbiBjdXJyZW50bHkgc3VwcG9ydGVkIE1JUFMgc3lzdGVtcywgbm8gbmVlZAogICogdG8gZXhwbGljaXRseSBpb3JlbWFwKCkgaXQuIFRoZSBmYWN0IHRoYXQgdGhlIElTQSBJTyBzcGFjZSBpcyBtYXBwZWQKICAqIHRvIFBBR0VfT0ZGU0VUIGlzIHB1cmUgY29pbmNpZGVuY2UgLSBpdCBkb2VzIG5vdCBtZWFuIElTQSB2YWx1ZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1ybS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1ybS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCAxMTQxMGFlLi43ZTA3MjgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcm0vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0yMSw5ICsyMSw3IEBACiAjZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCTAKICNkZWZpbmUgY3B1X2hhc19taXBzMTYJCTAKICNkZWZpbmUgY3B1X2hhc19kaXZlYwkJMAotI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAogI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkxCi0jZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCTAKICNkZWZpbmUgY3B1X2hhc19wcmVmZXRjaAkwCiAjZGVmaW5lIGNwdV9oYXNfbWNoZWNrCQkwCiAjZGVmaW5lIGNwdV9oYXNfZWp0YWcJCTAKQEAgLTM1LDkgKzMzLDYgQEAKICNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4CQkwCiAjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkxCiAKLSNkZWZpbmUgY3B1X2RjYWNoZV9saW5lX3NpemUoKQkzMgotI2RlZmluZSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpCTMyCi0KICNkZWZpbmUgY3B1X2hhc19taXBzMzJyMQkwCiAjZGVmaW5lIGNwdV9oYXNfbWlwczMycjIJMAogI2RlZmluZSBjcHVfaGFzX21pcHM2NHIxCTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGNpLmggYi9pbmNsdWRlL2FzbS1taXBzL3BjaS5oCmluZGV4IDdmMGYxMjAuLjNlZWEzYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wY2kuaApAQCAtMzIsNiArMzIsNyBAQAogCXVuc2lnbmVkIGxvbmcgbWVtX29mZnNldDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvX3Jlc291cmNlOwogCXVuc2lnbmVkIGxvbmcgaW9fb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgaW9fbWFwX2Jhc2U7CiAKIAl1bnNpZ25lZCBpbnQgaW5kZXg7CiAJLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBjdXJyZW50IChhcyBvZiBKdWx5IDIwMDMpIHBjaXV0aWxzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGdhbGxvYy5oCmluZGV4IGFmMTIxYzYuLjU2ODVkNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGdhbGxvYy5oCkBAIC0xMzAsNCArMTMwLDYgQEAKIAogI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCiAKK2V4dGVybiB2b2lkIHBhZ2V0YWJsZV9pbml0KHZvaWQpOworCiAjZW5kaWYgLyogX0FTTV9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnY29udGV4dC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWdjb250ZXh0LmgKaW5kZXggM2MxNzVhNy4uOTcyOTQ3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaWdjb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWdjb250ZXh0LmgKQEAgLTQyLDYgKzQyLDcgQEAKIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQgfHwgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKIAorI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CiAvKgogICogS2VlcCB0aGlzIHN0cnVjdCBkZWZpbml0aW9uIGluIHN5bmMgd2l0aCB0aGUgc2lnY29udGV4dCBmcmFnbWVudAogICogaW4gYXJjaC9taXBzL3Rvb2xzL29mZnNldC5jCkBAIC01MywyNyArNTQsMjUgQEAKICAqIGVudHJpZXMsIGFkZCBzY19kc3AgYW5kIHNjX3Jlc2VydmVkIGZvciBwYWRkaW5nLiAgTm8gcHJpc29uZXJzLgogICovCiBzdHJ1Y3Qgc2lnY29udGV4dCB7Ci0JdW5zaWduZWQgbG9uZwlzY19yZWdzWzMyXTsKLQl1bnNpZ25lZCBsb25nCXNjX2ZwcmVnc1szMl07Ci0JdW5zaWduZWQgbG9uZwlzY19tZGhpOwotCXVuc2lnbmVkIGxvbmcJc2NfaGkxOwotCXVuc2lnbmVkIGxvbmcJc2NfaGkyOwotCXVuc2lnbmVkIGxvbmcJc2NfaGkzOwotCXVuc2lnbmVkIGxvbmcJc2NfbWRsbzsKLQl1bnNpZ25lZCBsb25nCXNjX2xvMTsKLQl1bnNpZ25lZCBsb25nCXNjX2xvMjsKLQl1bnNpZ25lZCBsb25nCXNjX2xvMzsKLQl1bnNpZ25lZCBsb25nCXNjX3BjOwotCXVuc2lnbmVkIGludAlzY19mcGNfY3NyOwotCXVuc2lnbmVkIGludAlzY191c2VkX21hdGg7Ci0JdW5zaWduZWQgaW50CXNjX2RzcDsKLQl1bnNpZ25lZCBpbnQJc2NfcmVzZXJ2ZWQ7CisJX191NjQJc2NfcmVnc1szMl07CisJX191NjQJc2NfZnByZWdzWzMyXTsKKwlfX3U2NAlzY19tZGhpOworCV9fdTY0CXNjX2hpMTsKKwlfX3U2NAlzY19oaTI7CisJX191NjQJc2NfaGkzOworCV9fdTY0CXNjX21kbG87CisJX191NjQJc2NfbG8xOworCV9fdTY0CXNjX2xvMjsKKwlfX3U2NAlzY19sbzM7CisJX191NjQJc2NfcGM7CisJX191MzIJc2NfZnBjX2NzcjsKKwlfX3UzMglzY191c2VkX21hdGg7CisJX191MzIJc2NfZHNwOworCV9fdTMyCXNjX3Jlc2VydmVkOwogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+Ci0KIHN0cnVjdCBzaWdjb250ZXh0MzIgewogCV9fdTMyCQlzY19yZWdtYXNrOwkvKiBVbnVzZWQgKi8KIAlfX3UzMgkJc2Nfc3RhdHVzOwkvKiBVbnVzZWQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oCmluZGV4IDhiMzkxYTIuLjdhMjg5ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaApAQCAtMTM3LDIzICsxMzcsNiBAQAogCiAjZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKIAotc3RydWN0IHB0X3JlZ3M7Ci1leHRlcm4gdm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIHZvaWQgZG9fc2lnbmFsMzIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCi1leHRlcm4gaW50IHNldHVwX2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqIGthLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLSAgICAgICAgaW50IHNpZ25yLCBzaWdzZXRfdCAqc2V0KTsKLWV4dGVybiBpbnQgc2V0dXBfcnRfZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotICAgICAgICBpbnQgc2lnbnIsIHNpZ3NldF90ICpzZXQsIHNpZ2luZm9fdCAqaW5mbyk7Ci0KLWV4dGVybiBpbnQgc2V0dXBfZnJhbWVfMzIoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotICAgICAgICBpbnQgc2lnbnIsIHNpZ3NldF90ICpzZXQpOwotZXh0ZXJuIGludCBzZXR1cF9ydF9mcmFtZV8zMihzdHJ1Y3Qga19zaWdhY3Rpb24gKiBrYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0gICAgICAgIGludCBzaWduciwgc2lnc2V0X3QgKnNldCwgc2lnaW5mb190ICppbmZvKTsKLQotZXh0ZXJuIGludCBzZXR1cF9ydF9mcmFtZV9uMzIoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotICAgICAgICBpbnQgc2lnbnIsIHNpZ3NldF90ICpzZXQsIHNpZ2luZm9fdCAqaW5mbyk7Ci0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfQVNNX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbmkuaAppbmRleCBiOWJhNTRkLi42MmY5YmU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuaS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc25pLmgKQEAgLTYsMTIgKzYsNzIgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4IGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBCb2dlbmRvZXJmZXIgKHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGUpCiAgKi8KICNpZm5kZWYgX19BU01fU05JX0gKICNkZWZpbmUgX19BU01fU05JX0gKIAorZXh0ZXJuIHVuc2lnbmVkIGludCBzbmlfYnJkX3R5cGU7CisKKyNkZWZpbmUgU05JX0JSRF8xMCAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBTTklfQlJEXzEwTkVXICAgICAgICAgICAgICAzCisjZGVmaW5lIFNOSV9CUkRfVE9XRVJfT0FTSUMgICAgICAgIDQKKyNkZWZpbmUgU05JX0JSRF9NSU5JVE9XRVIgICAgICAgICAgNQorI2RlZmluZSBTTklfQlJEX1BDSV9UT1dFUiAgICAgICAgICA2CisjZGVmaW5lIFNOSV9CUkRfUk0yMDAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgU05JX0JSRF9QQ0lfTVRPV0VSICAgICAgICAgOAorI2RlZmluZSBTTklfQlJEX1BDSV9ERVNLVE9QICAgICAgICA5CisjZGVmaW5lIFNOSV9CUkRfUENJX1RPV0VSX0NQTFVTICAgMTAKKyNkZWZpbmUgU05JX0JSRF9QQ0lfTVRPV0VSX0NQTFVTICAxMQorCisvKiBSTTQwMCBjcHUgdHlwZXMgKi8KKyNkZWZpbmUgU05JX0NQVV9NODAyMSAgICAgICAgICAgMHgwMQorI2RlZmluZSBTTklfQ1BVX004MDMwICAgICAgICAgICAweDA0CisjZGVmaW5lIFNOSV9DUFVfTTgwMzEgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgU05JX0NQVV9NODAzNCAgICAgICAgICAgMHgwZgorI2RlZmluZSBTTklfQ1BVX004MDM3ICAgICAgICAgICAweDA3CisjZGVmaW5lIFNOSV9DUFVfTTgwNDAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgU05JX0NQVV9NODA0MyAgICAgICAgICAgMHgwOQorI2RlZmluZSBTTklfQ1BVX004MDUwICAgICAgICAgICAweDBiCisjZGVmaW5lIFNOSV9DUFVfTTgwNTMgICAgICAgICAgIDB4MGQKKwogI2RlZmluZSBTTklfUE9SVF9CQVNFCQkweGI0MDAwMDAwCiAKKyNpZm5kZWYgX19NSVBTRUxfXworLyoKKyAqIEFTSUMgUENJIHJlZ2lzdGVycyBmb3IgYmlnIGVuZGlhbiBjb25maWd1cmF0aW9uLgorICovCisjZGVmaW5lIFBDSU1UX1VDT05GCQkweGJmZmYwMDA0CisjZGVmaW5lIFBDSU1UX0lPQURUSU1FT1VUMgkweGJmZmYwMDBjCisjZGVmaW5lIFBDSU1UX0lPTUVNQ09ORgkJMHhiZmZmMDAxNAorI2RlZmluZSBQQ0lNVF9JT01NVQkJMHhiZmZmMDAxYworI2RlZmluZSBQQ0lNVF9JT0FEVElNRU9VVDEJMHhiZmZmMDAyNAorI2RlZmluZSBQQ0lNVF9ETUFBQ0NFU1MJCTB4YmZmZjAwMmMKKyNkZWZpbmUgUENJTVRfRE1BSElUCQkweGJmZmYwMDM0CisjZGVmaW5lIFBDSU1UX0VSUlNUQVRVUwkJMHhiZmZmMDAzYworI2RlZmluZSBQQ0lNVF9FUlJBRERSCQkweGJmZmYwMDQ0CisjZGVmaW5lIFBDSU1UX1NZTkRST01FCQkweGJmZmYwMDRjCisjZGVmaW5lIFBDSU1UX0lUUEVORAkJMHhiZmZmMDA1NAorI2RlZmluZSAgSVRfSU5UMgkJMHgwMQorI2RlZmluZSAgSVRfSU5URAkJMHgwMgorI2RlZmluZSAgSVRfSU5UQwkJMHgwNAorI2RlZmluZSAgSVRfSU5UQgkJMHgwOAorI2RlZmluZSAgSVRfSU5UQQkJMHgxMAorI2RlZmluZSAgSVRfRUlTQQkJMHgyMAorI2RlZmluZSAgSVRfU0NTSQkJMHg0MAorI2RlZmluZSAgSVRfRVRICQkJMHg4MAorI2RlZmluZSBQQ0lNVF9JUlFTRUwJCTB4YmZmZjAwNWMKKyNkZWZpbmUgUENJTVRfVEVTVE1FTQkJMHhiZmZmMDA2NAorI2RlZmluZSBQQ0lNVF9FQ0NSRUcJCTB4YmZmZjAwNmMKKyNkZWZpbmUgUENJTVRfQ09ORklHX0FERFJFU1MJMHhiZmZmMDA3NAorI2RlZmluZSBQQ0lNVF9BU0lDX0lECQkweGJmZmYwMDdjCS8qIHJlYWQgKi8KKyNkZWZpbmUgUENJTVRfU09GVF9SRVNFVAkweGJmZmYwMDdjCS8qIHdyaXRlICovCisjZGVmaW5lIFBDSU1UX1BJQV9PRQkJMHhiZmZmMDA4NAorI2RlZmluZSBQQ0lNVF9QSUFfREFUQU9VVAkweGJmZmYwMDhjCisjZGVmaW5lIFBDSU1UX1BJQV9EQVRBSU4JMHhiZmZmMDA5NAorI2RlZmluZSBQQ0lNVF9DQUNIRUNPTkYJCTB4YmZmZjAwOWMKKyNkZWZpbmUgUENJTVRfSU5WU1BBQ0UJCTB4YmZmZjAwYTQKKyNlbHNlCiAvKgogICogQVNJQyBQQ0kgcmVnaXN0ZXJzIGZvciBsaXR0bGUgZW5kaWFuIGNvbmZpZ3VyYXRpb24uCiAgKi8KQEAgLTQ1LDYgKzEwNSw4IEBACiAjZGVmaW5lIFBDSU1UX1BJQV9EQVRBSU4JMHhiZmZmMDA5MAogI2RlZmluZSBQQ0lNVF9DQUNIRUNPTkYJCTB4YmZmZjAwOTgKICNkZWZpbmUgUENJTVRfSU5WU1BBQ0UJCTB4YmZmZjAwYTAKKyNlbmRpZgorCiAjZGVmaW5lIFBDSU1UX1BDSV9DT05GCQkweGJmZmYwMTAwCiAKIC8qCkBAIC03Myw2ICsxMzUsMzYgQEAKICNkZWZpbmUgUENJTVRfUFdETgkJMHhiZmRmMDAwMAogCiAvKgorICogQTIwUiBiYXNlZCBib2FyZHMKKyAqLworI2RlZmluZSBBMjBSX1BUX0NMT0NLX0JBU0UgICAgICAweGJjMDQwMDAwCisjZGVmaW5lIEEyMFJfUFRfVElNMF9BQ0sgICAgICAgIDB4YmMwNTAwMDAKKyNkZWZpbmUgQTIwUl9QVF9USU0xX0FDSyAgICAgICAgMHhiYzA2MDAwMAorCisjZGVmaW5lIFNOSV9NSVBTX0lSUV9DUFVfQkFTRSAgIDE2CisjZGVmaW5lIFNOSV9NSVBTX0lSUV9DUFVfVElNRVIgIChTTklfTUlQU19JUlFfQ1BVX0JBU0UrNykKKworI2RlZmluZSBTTklfQTIwUl9JUlFfQkFTRSAgICAgICBTTklfTUlQU19JUlFfQ1BVX0JBU0UKKyNkZWZpbmUgU05JX0EyMFJfSVJRX1RJTUVSICAgICAgKFNOSV9BMjBSX0lSUV9CQVNFKzUpCisKKyNkZWZpbmUgU05JX0RTMTIxNl9BMjBSX0JBU0UgICAgMHhiYzA4MWZmYworI2RlZmluZSBTTklfRFMxMjE2X1JNMjAwX0JBU0UgICAweGJjZDQxZmZjCisKKyNkZWZpbmUgU05JX1BDSVRfSU5UX1JFRyAgICAgICAgMHhiZmZmMDAwYworCisjZGVmaW5lIFNOSV9QQ0lUX0lOVF9TVEFSVCAgICAgIDI0CisjZGVmaW5lIFNOSV9QQ0lUX0lOVF9FTkQgICAgICAgIDMwCisKKyNkZWZpbmUgUENJVF9JUlFfRVRIRVJORVQgICAgICAgKFNOSV9NSVBTX0lSUV9DUFVfQkFTRSArIDUpCisjZGVmaW5lIFBDSVRfSVJRX0lOVEEgICAgICAgICAgIChTTklfUENJVF9JTlRfU1RBUlQgKyAwKQorI2RlZmluZSBQQ0lUX0lSUV9JTlRCICAgICAgICAgICAoU05JX1BDSVRfSU5UX1NUQVJUICsgMSkKKyNkZWZpbmUgUENJVF9JUlFfSU5UQyAgICAgICAgICAgKFNOSV9QQ0lUX0lOVF9TVEFSVCArIDIpCisjZGVmaW5lIFBDSVRfSVJRX0lOVEQgICAgICAgICAgIChTTklfUENJVF9JTlRfU1RBUlQgKyAzKQorI2RlZmluZSBQQ0lUX0lSUV9TQ1NJMCAgICAgICAgICAoU05JX1BDSVRfSU5UX1NUQVJUICsgNCkKKyNkZWZpbmUgUENJVF9JUlFfU0NTSTEgICAgICAgICAgKFNOSV9QQ0lUX0lOVF9TVEFSVCArIDUpCisKKworLyoKICAqIEludGVycnVwdCAwLTE2IGFyZSBFSVNBIGludGVycnVwdHMuICBJbnRlcnJ1cHRzIGZyb20gMTYgb24gYXJlIGFzc2lnbmVkCiAgKiB0byB0aGUgb3RoZXIgaW50ZXJydXB0cyBnZW5lcmF0ZWQgYnkgQVNJQyBQQ0kuCiAgKgpAQCAtODAsMTggKzE3MiwyMiBAQAogICogQVNJQyBQQ0kgaW50ZXJydXB0LgogICovCiAjZGVmaW5lIFBDSU1UX0tFWUJPQVJEX0lSUQkgMQotI2RlZmluZSBQQ0lNVF9JUlFfSU5UMgkJMTYKLSNkZWZpbmUgUENJTVRfSVJRX0lOVEQJCTE3Ci0jZGVmaW5lIFBDSU1UX0lSUV9JTlRDCQkxOAotI2RlZmluZSBQQ0lNVF9JUlFfSU5UQgkJMTkKLSNkZWZpbmUgUENJTVRfSVJRX0lOVEEJCTIwCi0jZGVmaW5lIFBDSU1UX0lSUV9FSVNBCQkyMQotI2RlZmluZSBQQ0lNVF9JUlFfU0NTSQkJMjIKLSNkZWZpbmUgUENJTVRfSVJRX0VUSEVSTkVUCTIzCisjZGVmaW5lIFBDSU1UX0lSUV9JTlQyCQkyNAorI2RlZmluZSBQQ0lNVF9JUlFfSU5URAkJMjUKKyNkZWZpbmUgUENJTVRfSVJRX0lOVEMJCTI2CisjZGVmaW5lIFBDSU1UX0lSUV9JTlRCCQkyNworI2RlZmluZSBQQ0lNVF9JUlFfSU5UQQkJMjgKKyNkZWZpbmUgUENJTVRfSVJRX0VJU0EJCTI5CisjZGVmaW5lIFBDSU1UX0lSUV9TQ1NJCQkzMAorCisjZGVmaW5lIFBDSU1UX0lSUV9FVEhFUk5FVAkoU05JX01JUFNfSVJRX0NQVV9CQVNFKzYpCisKKyNpZiAwCiAjZGVmaW5lIFBDSU1UX0lSUV9URU1QRVJBVFVSRQkyNAogI2RlZmluZSBQQ0lNVF9JUlFfRUlTQV9OTUkJMjUKICNkZWZpbmUgUENJTVRfSVJRX1BPV0VSX09GRgkyNgogI2RlZmluZSBQQ0lNVF9JUlFfQlVUVE9OCTI3CisjZW5kaWYKIAogLyoKICAqIEJhc2UgYWRkcmVzcyBmb3IgdGhlIG1hcHBlZCAxNm1iIEVJU0EgYnVzIHNlZ21lbnQuCkBAIC0xMDEsNCArMTk3LDI0IEBACiAvKiBQQ0kgRUlTQSBJbnRlcnJ1cHQgYWNrbm93bGVkZ2UgICovCiAjZGVmaW5lIFBDSU1UX0lOVF9BQ0tOT1dMRURHRQkweGJhMDAwMDAwCiAKKy8qIGJvYXJkIHNwZWNpZmljIGluaXQgZnVuY3Rpb25zICovCitleHRlcm4gdm9pZCBzbmlfYTIwcl9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHNuaV9wY2l0X2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgc25pX3JtMjAwX2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgc25pX3BjaW10X2luaXQgKHZvaWQpOworCisvKiBib2FyZCBzcGVjaWZpYyBpcnEgaW5pdCBmdW5jdGlvbnMgKi8KK2V4dGVybiB2b2lkIHNuaV9hMjByX2lycV9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHNuaV9wY2l0X2lycV9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHNuaV9wY2l0X2NwbHVzX2lycV9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHNuaV9ybTIwMF9pcnFfaW5pdCAodm9pZCk7CitleHRlcm4gdm9pZCBzbmlfcGNpbXRfaXJxX2luaXQgKHZvaWQpOworCisvKiB0aW1lciBpbml0cyAqLworZXh0ZXJuIHZvaWQgc25pX2NwdV90aW1lX2luaXQodm9pZCk7CisKKy8qIGNvbW1vbiBpcnEgc3R1ZmYgKi8KK2V4dGVybiB2b2lkICgqc25pX2h3aW50KSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgaXJxYWN0aW9uIHNuaV9pc2FfaXJxOworCiAjZW5kaWYgLyogX19BU01fU05JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbWlwcy91YWNjZXNzLmgKaW5kZXggM2VmZjhkOC4uYzYyYzIwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy91YWNjZXNzLmgKQEAgLTQzNSw4ICs0MzUsMzIgQEAKIAlfX2N1X2xlbjsJCQkJCQkJXAogfSkKIAotI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgotI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWModG8sZnJvbSxuKQkJCQlcCisoewkJCQkJCQkJCVwKKwl2b2lkIF9fdXNlciAqX19jdV90bzsJCQkJCQlcCisJY29uc3Qgdm9pZCAqX19jdV9mcm9tOwkJCQkJCVwKKwlsb25nIF9fY3VfbGVuOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJX19jdV90byA9ICh0byk7CQkJCQkJCVwKKwlfX2N1X2Zyb20gPSAoZnJvbSk7CQkJCQkJXAorCV9fY3VfbGVuID0gKG4pOwkJCQkJCQlcCisJX19jdV9sZW4gPSBfX2ludm9rZV9jb3B5X3RvX3VzZXIoX19jdV90bywgX19jdV9mcm9tLCBfX2N1X2xlbik7CVwKKwlfX2N1X2xlbjsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHRvLGZyb20sbikJCQkJXAorKHsJCQkJCQkJCQlcCisJdm9pZCAqX19jdV90bzsJCQkJCQkJXAorCWNvbnN0IHZvaWQgX191c2VyICpfX2N1X2Zyb207CQkJCQlcCisJbG9uZyBfX2N1X2xlbjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCV9fY3VfdG8gPSAodG8pOwkJCQkJCQlcCisJX19jdV9mcm9tID0gKGZyb20pOwkJCQkJCVwKKwlfX2N1X2xlbiA9IChuKTsJCQkJCQkJXAorCV9fY3VfbGVuID0gX19pbnZva2VfY29weV9mcm9tX3VzZXJfaW5hdG9taWMoX19jdV90bywgX19jdV9mcm9tLAlcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N1X2xlbik7CQlcCisJX19jdV9sZW47CQkJCQkJCVwKK30pCiAKIC8qCiAgKiBjb3B5X3RvX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgaW50byB1c2VyIHNwYWNlLgpAQCAtNDkwLDYgKzUxNCwyOSBAQAogCV9fY3VfbGVuX3I7CQkJCQkJCVwKIH0pCiAKKyNkZWZpbmUgX19pbnZva2VfY29weV9mcm9tX3VzZXJfaW5hdG9taWModG8sZnJvbSxuKQkJCVwKKyh7CQkJCQkJCQkJXAorCXJlZ2lzdGVyIHZvaWQgKl9fY3VfdG9fciBfX2FzbV9fICgiJDQiKTsJCQlcCisJcmVnaXN0ZXIgY29uc3Qgdm9pZCBfX3VzZXIgKl9fY3VfZnJvbV9yIF9fYXNtX18gKCIkNSIpOwkJXAorCXJlZ2lzdGVyIGxvbmcgX19jdV9sZW5fciBfX2FzbV9fICgiJDYiKTsJCQlcCisJCQkJCQkJCQlcCisJX19jdV90b19yID0gKHRvKTsJCQkJCQlcCisJX19jdV9mcm9tX3IgPSAoZnJvbSk7CQkJCQkJXAorCV9fY3VfbGVuX3IgPSAobik7CQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIJCQkJCQlcCisJX19NT0RVTEVfSkFMKF9fY29weV91c2VyX2luYXRvbWljKQkJCQlcCisJIi5zZXRcdG5vYXRcblx0IgkJCQkJCVwKKwlfX1VBX0FERFUgIlx0JDEsICUxLCAlMlxuXHQiCQkJCQlcCisJIi5zZXRcdGF0XG5cdCIJCQkJCQkJXAorCSIuc2V0XHRyZW9yZGVyIgkJCQkJCQlcCisJOiAiK3IiIChfX2N1X3RvX3IpLCAiK3IiIChfX2N1X2Zyb21fciksICIrciIgKF9fY3VfbGVuX3IpCVwKKwk6CQkJCQkJCQlcCisJOiAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDE1IiwgIiQyNCIsICIkMzEiLAkJXAorCSAgIm1lbW9yeSIpOwkJCQkJCQlcCisJX19jdV9sZW5fcjsJCQkJCQkJXAorfSkKKwogLyoKICAqIF9fY29weV9mcm9tX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgZnJvbSB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCiAgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmgKaW5kZXggZjAzOGUzMy4uMmNlNGI2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oCkBAIC0xNjUsNyArMTY1LDggQEAKIAlyZXR1cm4gdDsKIH0KIAotI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoKGludCljbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSBcCisJKChfX3R5cGVvZl9fKCh2KS0+Y291bnRlcikpY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKICNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCiAKIC8qKgpAQCAtNDEzLDYgKzQxNCw0MyBAQAogCXJldHVybiB0OwogfQogCisjZGVmaW5lIGF0b21pYzY0X2NtcHhjaGcodiwgbywgbikgXAorCSgoX190eXBlb2ZfXygodiktPmNvdW50ZXIpKWNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAobyksIChuKSkpCisjZGVmaW5lIGF0b21pYzY0X3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisKKy8qKgorICogYXRvbWljNjRfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCisgKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljNjRfYWRkX3VubGVzcyhhdG9taWM2NF90ICp2LCBsb25nIGEsIGxvbmcgdSkKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJTFdTWU5DX09OX1NNUAorIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljX2FkZF91bmxlc3NcblwKKwljbXBkCTAsJTAsJTMgXG5cCisJYmVxLQkyZiBcblwKKwlhZGQJJTAsJTIsJTAgXG4iCisiCXN0ZGN4LgklMCwwLCUxIFxuXAorCWJuZS0JMWIgXG4iCisJSVNZTkNfT05fU01QCisiCXN1YmYJJTAsJTIsJTAgXG5cCisyOiIKKwk6ICI9JnIiICh0KQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAoYSksICJyIiAodSkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0ICE9IHU7Cit9CisKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpIGF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCiAjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Rjci1uYXRpdmUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZGNyLW5hdGl2ZS5oCmluZGV4IGQ3YTFiYzEuLjA1YWYwODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZGNyLW5hdGl2ZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZGNyLW5hdGl2ZS5oCkBAIC0yNiw4ICsyNiw4IEBACiAKICNkZWZpbmUgRENSX01BUF9PSyhob3N0KQkoMSkKIAotI2RlZmluZSBkY3JfbWFwKGRldiwgZGNyX24sIGRjcl9jKQl7fQotI2RlZmluZSBkY3JfdW5tYXAoaG9zdCwgZGNyX24sIGRjcl9jKQl7fQorI2RlZmluZSBkY3JfbWFwKGRldiwgZGNyX24sIGRjcl9jKQkoKGRjcl9ob3N0X3Qpe30pCisjZGVmaW5lIGRjcl91bm1hcChob3N0LCBkY3JfbiwgZGNyX2MpCWRvIHt9IHdoaWxlICgwKQogI2RlZmluZSBkY3JfcmVhZChob3N0LCBkY3JfbikJCW1mZGNyKGRjcl9uKQogI2RlZmluZSBkY3Jfd3JpdGUoaG9zdCwgZGNyX24sIHZhbHVlKQltdGRjcihkY3JfbiwgdmFsdWUpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1pLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMGY4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtaS5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZm5kZWYgX1BPV0VSUENfUE1JX0gKKyNkZWZpbmUgX1BPV0VSUENfUE1JX0gKKworLyoKKyAqIERlZmluaXRpb25zIGZvciB0YWxraW5nIHdpdGggUE1JIGRldmljZSBvbiBQb3dlclBDCisgKgorICogUE1JIChQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVycnVwdCkgaXMgYSB3YXkgdG8gY29tbXVuaWNhdGUKKyAqIHdpdGggdGhlIEJNQyAoQmFzZWJvYXJkIE1hbmFnZW1lbnQgQ29udHJvbGxlcikgdmlhIGludGVycnVwdHMuCisgKiBVbmxpa2UgSVBNSSBpdCBpcyBiaWRpcmVjdGlvbmFsIGFuZCBoYXMgYSBsb3cgbGF0ZW5jeS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJIIDIwMDUKKyAqCisgKiBBdXRob3I6IENocmlzdGlhbiBLcmFmZnQgPGtyYWZmdEBkZS5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisKKyNkZWZpbmUgUE1JX1RZUEVfRlJFUV9DSEFOR0UJMHgwMQorI2RlZmluZSBQTUlfUkVBRF9UWVBFCQkwCisjZGVmaW5lIFBNSV9SRUFEX0RBVEEwCQkxCisjZGVmaW5lIFBNSV9SRUFEX0RBVEExCQkyCisjZGVmaW5lIFBNSV9SRUFEX0RBVEEyCQkzCisjZGVmaW5lIFBNSV9XUklURV9UWVBFCQk0CisjZGVmaW5lIFBNSV9XUklURV9EQVRBMAkJNQorI2RlZmluZSBQTUlfV1JJVEVfREFUQTEJCTYKKyNkZWZpbmUgUE1JX1dSSVRFX0RBVEEyCQk3CisKKyNkZWZpbmUgUE1JX0FDSwkJCTB4ODAKKworI2RlZmluZSBQTUlfVElNRU9VVAkJMTAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OAl0eXBlOworCXU4CWRhdGEwOworCXU4CWRhdGExOworCXU4CWRhdGEyOworfSBwbWlfbWVzc2FnZV90OworCitzdHJ1Y3QgcG1pX2hhbmRsZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwl1OCB0eXBlOworCXZvaWQgKCpoYW5kbGVfcG1pX21lc3NhZ2UpIChzdHJ1Y3Qgb2ZfZGV2aWNlICosIHBtaV9tZXNzYWdlX3QpOworfTsKKwordm9pZCBwbWlfcmVnaXN0ZXJfaGFuZGxlcihzdHJ1Y3Qgb2ZfZGV2aWNlICosIHN0cnVjdCBwbWlfaGFuZGxlciAqKTsKK3ZvaWQgcG1pX3VucmVnaXN0ZXJfaGFuZGxlcihzdHJ1Y3Qgb2ZfZGV2aWNlICosIHN0cnVjdCBwbWlfaGFuZGxlciAqKTsKKwordm9pZCBwbWlfc2VuZF9tZXNzYWdlKHN0cnVjdCBvZl9kZXZpY2UgKiwgcG1pX21lc3NhZ2VfdCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX1BPV0VSUENfUE1JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmgKaW5kZXggMGFmZWUxNy4uMDIwZWQwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmgKQEAgLTI1NSw2ICsyNTUsOCBAQAogLyogQ1BVIE9GIG5vZGUgbWF0Y2hpbmcgKi8KIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ2V0X2NwdV9ub2RlKGludCBjcHUsIHVuc2lnbmVkIGludCAqdGhyZWFkKTsKIAorLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLworZXh0ZXJuIGNvbnN0IHZvaWQgKm9mX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKIAogLyoKICAqIE9GIGludGVycnVwdCBtYXBwaW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BzMy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wczMuaAppbmRleCBlNTk4MmFkLi44MjE1ODFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BzMy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHMzLmgKQEAgLTM1NSwxMyArMzU1LDcgQEAKIAogLyogdnVhcnQgcm91dGluZXMgKi8KIAotc3RydWN0IHBzM192dWFydF9zdGF0cyB7Ci0JdW5zaWduZWQgbG9uZyBieXRlc193cml0dGVuOwotCXVuc2lnbmVkIGxvbmcgYnl0ZXNfcmVhZDsKLQl1bnNpZ25lZCBsb25nIHR4X2ludGVycnVwdHM7Ci0JdW5zaWduZWQgbG9uZyByeF9pbnRlcnJ1cHRzOwotCXVuc2lnbmVkIGxvbmcgZGlzY29ubmVjdF9pbnRlcnJ1cHRzOwotfTsKK3N0cnVjdCBwczNfdnVhcnRfcG9ydF9wcml2OwogCiAvKioKICAqIHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgLSBhIGRldmljZSBvbiBhIHZ1YXJ0IHBvcnQKQEAgLTM3MCwyNCArMzY0LDE3IEBACiBzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlIHsKIAllbnVtIHBzM19tYXRjaF9pZCBtYXRjaF9pZDsKIAlzdHJ1Y3QgZGV2aWNlIGNvcmU7CisJc3RydWN0IHBzM192dWFydF9wb3J0X3ByaXYqIHByaXY7IC8qIHByaXZhdGUgZHJpdmVyIHZhcmlhYmxlcyAqLwogCi0JLyogcHJpdmF0ZSBkcml2ZXIgdmFyaWFibGVzICovCi0JdW5zaWduZWQgaW50IHBvcnRfbnVtYmVyOwotCXU2NCBpbnRlcnJ1cHRfbWFzazsKLQlzdHJ1Y3QgewotCQlzcGlubG9ja190IGxvY2s7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKLQl9IHR4X2xpc3Q7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgbG9uZyBieXRlc19oZWxkOwotCQlzcGlubG9ja190IGxvY2s7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKLQl9IHJ4X2xpc3Q7Ci0Jc3RydWN0IHBzM192dWFydF9zdGF0cyBzdGF0czsKIH07CiAKIGludCBwczNfdnVhcnRfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KTsKIAorLyogc3lzdGVtIG1hbmFnZXIgKi8KKwordm9pZCBwczNfc3lzX21hbmFnZXJfcmVzdGFydCh2b2lkKTsKK3ZvaWQgcHMzX3N5c19tYW5hZ2VyX3Bvd2VyX29mZih2b2lkKTsKKwogc3RydWN0IHBzM19wcmVhbGxvYyB7CiAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICB2b2lkICphZGRyZXNzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy91Y2Nfc2xvdy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy91Y2Nfc2xvdy5oCmluZGV4IDFiYWJhZDkuLmZkYWFjOWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VjY19zbG93LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy91Y2Nfc2xvdy5oCkBAIC0xNTAsNyArMTUwLDcgQEAKIAlpbnQgdWNjX251bTsKIAllbnVtIHFlX2Nsb2NrIHJ4X2Nsb2NrOwogCWVudW0gcWVfY2xvY2sgdHhfY2xvY2s7Ci0Jc3RydWN0IHVjY19zbG93ICpyZWdzOworCXUzMiByZWdzOwogCWludCBpcnE7CiAJdTE2IHVjY21fbWFzazsKIAlpbnQgZGF0YV9tZW1fcGFydDsKQEAgLTE5OSw5ICsxOTksOSBAQAogCQkJCSAgIGFuZCBsZW5ndGggZm9yIGZpcnN0IEJEIGluIGEgZnJhbWUgKi8KIAl1MzIgdHhfYmFzZV9vZmZzZXQ7CS8qIGZpcnN0IEJEIGluIFR4IEJEIHRhYmxlIG9mZnNldCAoSW4gTVVSQU0pICovCiAJdTMyIHJ4X2Jhc2Vfb2Zmc2V0OwkvKiBmaXJzdCBCRCBpbiBSeCBCRCB0YWJsZSBvZmZzZXQgKEluIE1VUkFNKSAqLwotCXU4ICpjb25mQmQ7CQkvKiBuZXh0IEJEIGZvciBjb25maXJtIGFmdGVyIFR4ICovCi0JdTggKnR4X2JkOwkJLyogbmV4dCBCRCBmb3IgbmV3IFR4IHJlcXVlc3QgKi8KLQl1OCAqcnhfYmQ7CQkvKiBuZXh0IEJEIHRvIGNvbGxlY3QgYWZ0ZXIgUnggKi8KKwlzdHJ1Y3QgcWVfYmQgKmNvbmZCZDsJLyogbmV4dCBCRCBmb3IgY29uZmlybSBhZnRlciBUeCAqLworCXN0cnVjdCBxZV9iZCAqdHhfYmQ7CS8qIG5leHQgQkQgZm9yIG5ldyBUeCByZXF1ZXN0ICovCisJc3RydWN0IHFlX2JkICpyeF9iZDsJLyogbmV4dCBCRCB0byBjb2xsZWN0IGFmdGVyIFJ4ICovCiAJdm9pZCAqcF9yeF9mcmFtZTsJLyogYWNjdW11bGF0aW5nIHJlY2VpdmUgZnJhbWUgKi8KIAl1MTYgKnBfdWNjZTsJCS8qIGEgcG9pbnRlciB0byB0aGUgZXZlbnQgcmVnaXN0ZXIgaW4gbWVtb3J5LgogCQkJCSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmgKaW5kZXggYWYyMGM3NC4uYzE3YmRiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oCkBAIC0yMTUsNiArMjE1LDggQEAKIAkgICAgICAgX19DU0dfTE9PUCh2LCBtYXNrLCAib2dyIik7CiB9CiAKKyNkZWZpbmUgYXRvbWljNjRfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKKwogc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIGF0b21pYzY0X2NtcHhjaGcoYXRvbWljNjRfdCAqdiwKIAkJCQkJICAgICBsb25nIGxvbmcgb2xkLCBsb25nIGxvbmcgbmV3KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9pcGwuaCBiL2luY2x1ZGUvYXNtLXMzOTAvaXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY1MGQzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvaXBsLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBzMzkwIChyZSlpcGwgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNworICovCisKKyNpZm5kZWYgX0FTTV9TMzkwX0lQTF9ICisjZGVmaW5lIF9BU01fUzM5MF9JUExfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgSVBMX1BBUk1CTE9DS19PUklHSU4JMHgyMDAwCisKKyNkZWZpbmUgSVBMX1BBUk1fQkxLX0ZDUF9MRU4gKHNpemVvZihzdHJ1Y3QgaXBsX2xpc3RfaGRyKSArIFwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXBsX2Jsb2NrX2ZjcCkpCisKKyNkZWZpbmUgSVBMX1BBUk1fQkxLX0NDV19MRU4gKHNpemVvZihzdHJ1Y3QgaXBsX2xpc3RfaGRyKSArIFwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXBsX2Jsb2NrX2NjdykpCisKKyNkZWZpbmUgSVBMX01BWF9TVVBQT1JURURfVkVSU0lPTiAoMCkKKworI2RlZmluZSBJUExfUEFSTUJMT0NLX1NUQVJUCSgoc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKikgXAorCQkJCSBJUExfUEFSTUJMT0NLX09SSUdJTikKKyNkZWZpbmUgSVBMX1BBUk1CTE9DS19TSVpFCShJUExfUEFSTUJMT0NLX1NUQVJULT5oZHIubGVuKQorCitzdHJ1Y3QgaXBsX2xpc3RfaGRyIHsKKwl1MzIgbGVuOworCXU4ICByZXNlcnZlZDFbM107CisJdTggIHZlcnNpb247CisJdTMyIGJsazBfbGVuOworCXU4ICBwYnQ7CisJdTggIGZsYWdzOworCXUxNiByZXNlcnZlZDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaXBsX2Jsb2NrX2ZjcCB7CisJdTggIHJlc2VydmVkMVszMTMtMV07CisJdTggIG9wdDsKKwl1OCAgcmVzZXJ2ZWQyWzNdOworCXUxNiByZXNlcnZlZDM7CisJdTE2IGRldm5vOworCXU4ICByZXNlcnZlZDRbNF07CisJdTY0IHd3cG47CisJdTY0IGx1bjsKKwl1MzIgYm9vdHByb2c7CisJdTggIHJlc2VydmVkNVsxMl07CisJdTY0IGJyX2xiYTsKKwl1MzIgc2NwX2RhdGFfbGVuOworCXU4ICByZXNlcnZlZDZbMjYwXTsKKwl1OCAgc2NwX2RhdGFbXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBpcGxfYmxvY2tfY2N3IHsKKwl1OCAgbG9hZF9wYXJhbVs4XTsKKwl1OCAgcmVzZXJ2ZWQxWzg0XTsKKwl1OCAgcmVzZXJ2ZWQyWzJdOworCXUxNiBkZXZubzsKKwl1OCAgdm1fZmxhZ3M7CisJdTggIHJlc2VydmVkM1szXTsKKwl1MzIgdm1fcGFybV9sZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayB7CisJc3RydWN0IGlwbF9saXN0X2hkciBoZHI7CisJdW5pb24geworCQlzdHJ1Y3QgaXBsX2Jsb2NrX2ZjcCBmY3A7CisJCXN0cnVjdCBpcGxfYmxvY2tfY2N3IGNjdzsKKwl9IGlwbF9pbmZvOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIElQTCB2YWxpZGl0eSBmbGFncyBhbmQgcGFyYW1ldGVycyBhcyBkZXRlY3RlZCBpbiBoZWFkLlMKKyAqLworZXh0ZXJuIHUzMiBpcGxfZmxhZ3M7CitleHRlcm4gdTE2IGlwbF9kZXZubzsKKworZXh0ZXJuIHZvaWQgZG9fcmVpcGwodm9pZCk7CitleHRlcm4gdm9pZCBpcGxfc2F2ZV9wYXJhbWV0ZXJzKHZvaWQpOworCitlbnVtIHsKKwlJUExfREVWTk9fVkFMSUQJCT0gMSwKKwlJUExfUEFSTUJMT0NLX1ZBTElECT0gMiwKKwlJUExfTlNTX1ZBTElECQk9IDQsCit9OworCisvKgorICogRElBRyAzMDggc3VwcG9ydAorICovCitlbnVtIGRpYWczMDhfc3ViY29kZSAgeworCURJQUczMDhfUkVMX0hTQQk9IDIsCisJRElBRzMwOF9JUEwJPSAzLAorCURJQUczMDhfRFVNUAk9IDQsCisJRElBRzMwOF9TRVQJPSA1LAorCURJQUczMDhfU1RPUkUJPSA2LAorfTsKKworZW51bSBkaWFnMzA4X2lwbF90eXBlIHsKKwlESUFHMzA4X0lQTF9UWVBFX0ZDUAk9IDAsCisJRElBRzMwOF9JUExfVFlQRV9DQ1cJPSAyLAorfTsKKworZW51bSBkaWFnMzA4X29wdCB7CisJRElBRzMwOF9JUExfT1BUX0lQTAk9IDB4MTAsCisJRElBRzMwOF9JUExfT1BUX0RVTVAJPSAweDIwLAorfTsKKworZW51bSBkaWFnMzA4X3JjIHsKKwlESUFHMzA4X1JDX09LCT0gMSwKK307CisKK2V4dGVybiBpbnQgZGlhZzMwOCh1bnNpZ25lZCBsb25nIHN1YmNvZGUsIHZvaWQgKmFkZHIpOworCisjZW5kaWYgLyogX0FTTV9TMzkwX0lQTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1zMzkwL2xvY2FsLmgKaW5kZXggODY3NDVhMS4uYzExYzUzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9sb2NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvbG9jYWwuaApAQCAtMSw1OCArMSBAQAotI2lmbmRlZiBfQVNNX0xPQ0FMX0gKLSNkZWZpbmUgX0FTTV9MT0NBTF9ICi0KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLSNpZm5kZWYgX19zMzkweF9fCi0KLXR5cGVkZWYgYXRvbWljX3QgbG9jYWxfdDsKLQotI2RlZmluZSBMT0NBTF9JTklUKGkpCUFUT01JQ19JTklUKGkpCi0jZGVmaW5lIGxvY2FsX3JlYWQodikJYXRvbWljX3JlYWQodikKLSNkZWZpbmUgbG9jYWxfc2V0KHYsaSkJYXRvbWljX3NldCh2LGkpCi0KLSNkZWZpbmUgbG9jYWxfaW5jKHYpCWF0b21pY19pbmModikKLSNkZWZpbmUgbG9jYWxfZGVjKHYpCWF0b21pY19kZWModikKLSNkZWZpbmUgbG9jYWxfYWRkKGksIHYpCWF0b21pY19hZGQoaSwgdikKLSNkZWZpbmUgbG9jYWxfc3ViKGksIHYpCWF0b21pY19zdWIoaSwgdikKLQotI2Vsc2UKLQotdHlwZWRlZiBhdG9taWM2NF90IGxvY2FsX3Q7Ci0KLSNkZWZpbmUgTE9DQUxfSU5JVChpKQlBVE9NSUM2NF9JTklUKGkpCi0jZGVmaW5lIGxvY2FsX3JlYWQodikJYXRvbWljNjRfcmVhZCh2KQotI2RlZmluZSBsb2NhbF9zZXQodixpKQlhdG9taWM2NF9zZXQodixpKQotCi0jZGVmaW5lIGxvY2FsX2luYyh2KQlhdG9taWM2NF9pbmModikKLSNkZWZpbmUgbG9jYWxfZGVjKHYpCWF0b21pYzY0X2RlYyh2KQotI2RlZmluZSBsb2NhbF9hZGQoaSwgdikJYXRvbWljNjRfYWRkKGksIHYpCi0jZGVmaW5lIGxvY2FsX3N1YihpLCB2KQlhdG9taWM2NF9zdWIoaSwgdikKLQotI2VuZGlmCi0KLSNkZWZpbmUgX19sb2NhbF9pbmModikJCSgodiktPmNvdW50ZXIrKykKLSNkZWZpbmUgX19sb2NhbF9kZWModikJCSgodiktPmNvdW50ZXItLSkKLSNkZWZpbmUgX19sb2NhbF9hZGQoaSx2KQkoKHYpLT5jb3VudGVyKz0oaSkpCi0jZGVmaW5lIF9fbG9jYWxfc3ViKGksdikJKCh2KS0+Y291bnRlci09KGkpKQotCi0vKgotICogVXNlIHRoZXNlIGZvciBwZXItY3B1IGxvY2FsX3QgdmFyaWFibGVzOiBvbiBzb21lIGFyY2hzIHRoZXkgYXJlCi0gKiBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlc2UgbmFpdmUgaW1wbGVtZW50YXRpb25zLiAgTm90ZSB0aGV5IHRha2UKLSAqIGEgdmFyaWFibGUsIG5vdCBhbiBhZGRyZXNzLgotICovCi0jZGVmaW5lIGNwdV9sb2NhbF9yZWFkKHYpCWxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9zZXQodiwgaSkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKHYpLCAoaSkpCi0KLSNkZWZpbmUgY3B1X2xvY2FsX2luYyh2KQlsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9kZWModikJbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIHYpCWxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIHYpCWxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQotCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2luYyh2KQlfX2xvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKHYpCV9fbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgdikJX19sb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIHYpCV9fbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCi0KLSNlbmRpZiAvKiBfQVNNX0xPQ0FMX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcHJvY2Vzc29yLmgKaW5kZXggNGMxYjczOS4uMzNiODBjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Byb2Nlc3Nvci5oCkBAIC0zNiw2ICszNiwxMSBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgdW51c2VkICA6IDE2OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY3B1aWRfdDsKIAorc3RhdGljIGlubGluZSB2b2lkIGdldF9jcHVfaWQoY3B1aWRfdCAqcHRyKQoreworCWFzbSB2b2xhdGlsZSgic3RpZHAgMCglMSkiIDogIj1tIiAoKnB0cikgOiAiYSIgKHB0cikpOworfQorCiBzdHJ1Y3QgY3B1aW5mb19TMzkwCiB7CiAgICAgICAgIGNwdWlkX3QgIGNwdV9pZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2VjdGlvbnMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2VjdGlvbnMuaAppbmRleCAxYzVhMmM0Li5mYmQ5MTE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NlY3Rpb25zLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zZWN0aW9ucy5oCkBAIC0zLDYgKzMsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KIAotZXh0ZXJuIGNoYXIgX2VzaGFyZWRbXTsKK2V4dGVybiBjaGFyIF9lc2hhcmVkW10sIF9laGVhZFtdOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2V0dXAuaAppbmRleCAzMzg4YmI1Li40NGM3YWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NldHVwLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zZXR1cC5oCkBAIC0xNiw3ICsxNiw2IEBACiAKICNkZWZpbmUgUEFSTUFSRUEJCTB4MTA0MDAKICNkZWZpbmUgTUVNT1JZX0NIVU5LUwkJMTYJLyogbWF4IDB4N2ZmZiAqLwotI2RlZmluZSBJUExfUEFSTUJMT0NLX09SSUdJTgkweDIwMDAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtOTcsODIgKzk2LDkgQEAKICNkZWZpbmUgU0VUX0NPTlNPTEVfMzIxNQlkbyB7IGNvbnNvbGVfbW9kZSA9IDI7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNFVF9DT05TT0xFXzMyNzAJZG8geyBjb25zb2xlX21vZGUgPSAzOyB9IHdoaWxlICgwKQogCi1zdHJ1Y3QgaXBsX2xpc3RfaGRyIHsKLQl1MzIgbGVuOwotCXU4ICByZXNlcnZlZDFbM107Ci0JdTggIHZlcnNpb247Ci0JdTMyIGJsazBfbGVuOwotCXU4ICBwYnQ7Ci0JdTggIGZsYWdzOwotCXUxNiByZXNlcnZlZDI7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXBsX2Jsb2NrX2ZjcCB7Ci0JdTggIHJlc2VydmVkMVszMTMtMV07Ci0JdTggIG9wdDsKLQl1OCAgcmVzZXJ2ZWQyWzNdOwotCXUxNiByZXNlcnZlZDM7Ci0JdTE2IGRldm5vOwotCXU4ICByZXNlcnZlZDRbNF07Ci0JdTY0IHd3cG47Ci0JdTY0IGx1bjsKLQl1MzIgYm9vdHByb2c7Ci0JdTggIHJlc2VydmVkNVsxMl07Ci0JdTY0IGJyX2xiYTsKLQl1MzIgc2NwX2RhdGFfbGVuOwotCXU4ICByZXNlcnZlZDZbMjYwXTsKLQl1OCAgc2NwX2RhdGFbXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBpcGxfYmxvY2tfY2N3IHsKLQl1OCAgbG9hZF9wYXJhbVs4XTsKLQl1OCAgcmVzZXJ2ZWQxWzg0XTsKLQl1OCAgcmVzZXJ2ZWQyWzJdOwotCXUxNiBkZXZubzsKLQl1OCAgdm1fZmxhZ3M7Ci0JdTggIHJlc2VydmVkM1szXTsKLQl1MzIgdm1fcGFybV9sZW47Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayB7Ci0Jc3RydWN0IGlwbF9saXN0X2hkciBoZHI7Ci0JdW5pb24gewotCQlzdHJ1Y3QgaXBsX2Jsb2NrX2ZjcCBmY3A7Ci0JCXN0cnVjdCBpcGxfYmxvY2tfY2N3IGNjdzsKLQl9IGlwbF9pbmZvOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotI2RlZmluZSBJUExfUEFSTV9CTEtfRkNQX0xFTiAoc2l6ZW9mKHN0cnVjdCBpcGxfbGlzdF9oZHIpICsgXAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpcGxfYmxvY2tfZmNwKSkKLQotI2RlZmluZSBJUExfUEFSTV9CTEtfQ0NXX0xFTiAoc2l6ZW9mKHN0cnVjdCBpcGxfbGlzdF9oZHIpICsgXAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpcGxfYmxvY2tfY2N3KSkKLQotI2RlZmluZSBJUExfTUFYX1NVUFBPUlRFRF9WRVJTSU9OICgwKQotCi0vKgotICogSVBMIHZhbGlkaXR5IGZsYWdzIGFuZCBwYXJhbWV0ZXJzIGFzIGRldGVjdGVkIGluIGhlYWQuUwotICovCi1leHRlcm4gdTMyIGlwbF9mbGFnczsKLWV4dGVybiB1MTYgaXBsX2Rldm5vOwotCi1leHRlcm4gdm9pZCBkb19yZWlwbCh2b2lkKTsKLWV4dGVybiB2b2lkIGlwbF9zYXZlX3BhcmFtZXRlcnModm9pZCk7Ci0KLWVudW0gewotCUlQTF9ERVZOT19WQUxJRAk9IDEsCi0JSVBMX1BBUk1CTE9DS19WQUxJRCA9IDIsCi0JSVBMX05TU19WQUxJRCA9IDQsCi19OwotCiAjZGVmaW5lIE5TU19OQU1FX1NJWkUJOAotCiBleHRlcm4gY2hhciBrZXJuZWxfbnNzX25hbWVbXTsKIAotI2RlZmluZSBJUExfUEFSTUJMT0NLX1NUQVJUCSgoc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKikgXAotCQkJCSBJUExfUEFSTUJMT0NLX09SSUdJTikKLSNkZWZpbmUgSVBMX1BBUk1CTE9DS19TSVpFCShJUExfUEFSTUJMT0NLX1NUQVJULT5oZHIubGVuKQotCiAjZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2lmbmRlZiBfX3MzOTB4X18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL0tidWlsZCBiL2luY2x1ZGUvYXNtLXNoL0tidWlsZAppbmRleCBjNjhlMTY4Li43NmE4Y2NmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20tc2gvS2J1aWxkCkBAIC0xICsxLDMgQEAKIGluY2x1ZGUgaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCisKK2hlYWRlci15ICs9IGNwdS1mZWF0dXJlcy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9iaWdzdXIvYmlnc3VyLmggYi9pbmNsdWRlL2FzbS1zaC9iaWdzdXIvYmlnc3VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNzI0NWYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvYmlnc3VyL2JpZ3N1ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqCi0gKiBIaXRhY2hpIEJpZyBTdXIgRXZhbCBCb2FyZCBzdXBwb3J0Ci0gKgotICogRHVzdGluIE1jSW50aXJlIChkdXN0aW5Ac2Vuc29yaWEuY29tKQotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBEZXJpdmVkIGZyb20gSGl0YWNoaSBTSDc3NTEgcmVmZXJlbmNlIG1hbnVhbAotICogCi0gKi8KLQotI2lmbmRlZiBfQVNNX0JJR1NVUl9IXwotI2RlZmluZSBfQVNNX0JJR1NVUl9IXwotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9oZDY0NDY1L2hkNjQ0NjUuaD4KLQotLyogNzc1MSBJbnRlcm5hbCBJUlEncyB1c2VkIGJ5IGV4dGVybmFsIENQTEQgY29udHJvbGxlciAqLwotI2RlZmluZSBCSUdTVVJfSVJRX0xPVwkwCi0jZGVmaW5lIEJJR1NVUl9JUlFfTlVNICAxNCAgICAgICAgIC8qIEV4dGVybmFsIENQTEQgbGV2ZWwgMSBJUlFzICovCi0jZGVmaW5lIEJJR1NVUl9JUlFfSElHSCAoQklHU1VSX0lSUV9MT1cgKyBCSUdTVVJfSVJRX05VTSkKLSNkZWZpbmUgQklHU1VSXzJORExWTF9JUlFfTE9XICAgKEhENjQ0NjVfSVJRX0JBU0UrSEQ2NDQ2NV9JUlFfTlVNKSAgCi0jZGVmaW5lIEJJR1NVUl8yTkRMVkxfSVJRX05VTSAgIDMyIC8qIExldmVsIDIgSVJRcyA9IDQgcmVncyAqIDggYml0cyAqLwotI2RlZmluZSBCSUdTVVJfMk5ETFZMX0lSUV9ISUdIICAoQklHU1VSXzJORExWTF9JUlFfTE9XICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklHU1VSXzJORExWTF9JUlFfTlVNKQotCi0vKiBQQ0kgaW50ZXJydXB0IGJhc2UgbnVtYmVyIChBX0lOVEEtQV9JTlREKSAqLwotI2RlZmluZSBCSUdTVVJfU0g3NzUxX1BDSV9JUlFfQkFTRSAgKEJJR1NVUl8yTkRMVkxfSVJRX0xPVysxMCkgIAotCi0vKiBDUExEIHJlZ2lzdGVycyBhbmQgZXh0ZXJuYWwgY2hpcCBhZGRyZXNzZXMgKi8KLSNkZWZpbmUgQklHU1VSX0hENjQ0NjRfQUREUgkweEIyMDAwMDAwCi0jZGVmaW5lIEJJR1NVUl9ER0RSCTB4QjFGRkZFMDAKLSNkZWZpbmUgQklHU1VSX0JJRFIJMHhCMUZGRkQwMAotI2RlZmluZSBCSUdTVVJfQ1NMUgkweEIxRkZGQzAwCi0jZGVmaW5lIEJJR1NVUl9TVzFSCTB4QjFGRkZCMDAKLSNkZWZpbmUgQklHU1VSX0RCR1IJMHhCMUZGRkEwMAotI2RlZmluZSBCSUdTVVJfQkRUUgkweEIxRkZGOTAwCi0jZGVmaW5lIEJJR1NVUl9CRFJSCTB4QjFGRkY4MDAKLSNkZWZpbmUgQklHU1VSX1BQUjEJMHhCMUZGRjcwMAotI2RlZmluZSBCSUdTVVJfUFBSMgkweEIxRkZGNjAwCi0jZGVmaW5lIEJJR1NVUl9JREUyCTB4QjFGRkY1MDAKLSNkZWZpbmUgQklHU1VSX0lERTMJMHhCMUZGRjQwMAotI2RlZmluZSBCSUdTVVJfU1BDUgkweEIxRkZGMzAwCi0jZGVmaW5lIEJJR1NVUl9FVEhSCTB4QjFGRTAwMDAKLSNkZWZpbmUgQklHU1VSX1BQRFIJMHhCMUZERkYwMAotI2RlZmluZSBCSUdTVVJfSUNUTAkweEIxRkRGRTAwCi0jZGVmaW5lIEJJR1NVUl9JQ01ECTB4QjFGREZEMDAKLSNkZWZpbmUgQklHU1VSX0RNQTAJMHhCMUZERkMwMAotI2RlZmluZSBCSUdTVVJfRE1BMQkweEIxRkRGQjAwCi0jZGVmaW5lIEJJR1NVUl9JUlEwCTB4QjFGREZBMDAKLSNkZWZpbmUgQklHU1VSX0lSUTEJMHhCMUZERjkwMAotI2RlZmluZSBCSUdTVVJfSVJRMgkweEIxRkRGODAwCi0jZGVmaW5lIEJJR1NVUl9JUlEzCTB4QjFGREY3MDAKLSNkZWZpbmUgQklHU1VSX0lNUjAJMHhCMUZERjYwMAotI2RlZmluZSBCSUdTVVJfSU1SMQkweEIxRkRGNTAwCi0jZGVmaW5lIEJJR1NVUl9JTVIyCTB4QjFGREY0MDAKLSNkZWZpbmUgQklHU1VSX0lNUjMJMHhCMUZERjMwMAotI2RlZmluZSBCSUdTVVJfSVJMTVIwCTB4QjFGREYyMDAKLSNkZWZpbmUgQklHU1VSX0lSTE1SMQkweEIxRkRGMTAwCi0jZGVmaW5lIEJJR1NVUl9WMzIwVVNDX0FERFIgIDB4QjEwMDAwMDAKLSNkZWZpbmUgQklHU1VSX0hENjQ0NjVfQUREUiAgMHhCMDAwMDAwMAotI2RlZmluZSBCSUdTVVJfSU5URVJOQUxfQkFTRSAweEIwMDAwMDAwCi0KLS8qIFNNQyBldGhlcm5ldCBjYXJkIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgQklHU1VSX0VUSEVSX0lPUE9SVAkJMHgyMjAKLQotLyogSURFIHJlZ2lzdGVyIHBhcmFtdGVycyAqLwotI2RlZmluZSBCSUdTVVJfSURFQ01EX0lPUE9SVAkweDFmMAotI2RlZmluZSBCSUdTVVJfSURFQ1RMX0lPUE9SVAkweDFmOAotCi0vKiBMRUQgYml0IHBvc2l0aW9uIGluIEJJR1NVUl9DU0xSICovCi0jZGVmaW5lIEJJR1NVUl9MRUQgICgxPDw0KQotCi0vKiBQQ0k6IGRlZmF1bHQgTE9DQUwgbWVtb3J5IHdpbmRvdyBzaXplcyAoc2VlbiBmcm9tIFBDSSBidXMpICovCi0jZGVmaW5lIEJJR1NVUl9MU1IwX1NJWkUgICAgKDY0KigxPDwyMCkpIC8vNjRNQgotI2RlZmluZSBCSUdTVVJfTFNSMV9TSVpFICAgICg2NCooMTw8MjApKSAvLzY0TUIKLQotI2VuZGlmIC8qIF9BU01fQklHU1VSX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9iaWdzdXIvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL2JpZ3N1ci9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDcwYWM4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL2JpZ3N1ci9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL2JpZ3N1ci9pby5oCi0gKgotICogQnkgRHVzdGluIE1jSW50aXJlIChkdXN0aW5Ac2Vuc29yaWEuY29tKSAoYykyMDAxCi0gKiBEZXJpdmVkIGZyb20gaW9faGQ2NDQ2NS5oLCB3aGljaCBib3JlIHRoZSBtZXNzYWdlOgotICogQnkgR3JlZyBCYW5rcyA8Z2JhbmtzQHBvY2tldHBlbmd1aW5zLmNvbT4KLSAqIChjKSAyMDAwIFBvY2tldFBlbmd1aW5zIEluYy4gCi0gKiBhbmQgZnJvbSBpb19oZDY0NDYxLmgsIHdoaWNoIGJvcmUgdGhlIG1lc3NhZ2U6Ci0gKiBDb3B5cmlnaHQgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogSU8gZnVuY3Rpb25zIGZvciBhIEhpdGFjaGkgQmlnIFN1ciBFdmFsdWF0aW9uIEJvYXJkLgotICovCi0KLSNpZm5kZWYgX0FTTV9TSF9JT19CSUdTVVJfSAotI2RlZmluZSBfQVNNX1NIX0lPX0JJR1NVUl9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBiaWdzdXJfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci1leHRlcm4gaW50IGJpZ3N1cl9pcnFfZGVtdXgoaW50IGlycSk7Ci0vKiBQcm92aXNpb24gZm9yIGdlbmVyaWMgc2Vjb25kYXJ5IGRlbXV4IHN0ZXAgLS0gdXNlZCBieSBQQ01DSUEgY29kZSAqLwotZXh0ZXJuIHZvaWQgYmlnc3VyX3JlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxLAotCQlpbnQgKCpkZW11eCkoaW50IGlycSwgdm9pZCAqZGV2KSwgdm9pZCAqZGV2KTsKLWV4dGVybiB2b2lkIGJpZ3N1cl91bnJlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxKTsKLS8qIFNldCB0aGlzIHZhcmlhYmxlIHRvIDEgdG8gc2VlIHBvcnQgdHJhZmZpYyAqLwotZXh0ZXJuIGludCBiaWdzdXJfaW9fZGVidWc7Ci0vKiBNYXAgYSByYW5nZSBvZiBwb3J0cyB0byBhIHJhbmdlIG9mIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeS4gKi8KLWV4dGVybiB2b2lkIGJpZ3N1cl9wb3J0X21hcCh1MzIgYmFzZXBvcnQsIHUzMiBucG9ydHMsIHUzMiBhZGRyLCB1OCBzaGlmdCk7Ci1leHRlcm4gdm9pZCBiaWdzdXJfcG9ydF91bm1hcCh1MzIgYmFzZXBvcnQsIHUzMiBucG9ydHMpOwotCi0jZW5kaWYgLyogX0FTTV9TSF9JT19CSUdTVVJfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9iaWdzdXIvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1zaC9iaWdzdXIvc2VyaWFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwOGZhODIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvYmlnc3VyL3NlcmlhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL2JpZ3N1ci9zZXJpYWwuaAotICoKLSAqIENvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3IgQmlnIFN1ciAxNjU1MCBiYXNlZCBzZXJpYWwgcG9ydHMgCi0gKiBpLmUuIEhENjQ0NjUsIFBDTUNJQSwgZXRjLgotICovCi0KLSNpZm5kZWYgX0FTTV9TRVJJQUxfQklHU1VSX0gKLSNkZWZpbmUgX0FTTV9TRVJJQUxfQklHU1VSX0gKLSNpbmNsdWRlIDxhc20vaGQ2NDQ2NS5oPgotCi0jZGVmaW5lIEJBU0VfQkFVRCAoMzM3OTIwMCAvIDE2KQotCi0jZGVmaW5lIFNURF9DT01fRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QpCi0KLQotI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLyogVUFSVCBDTEsgICBQT1JUIElSUSAgICAgRkxBR1MgICAgICAgICovICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyAwLCBCQVNFX0JBVUQsIDB4M0Y4LCBIRDY0NDY1X0lSUV9VQVJULCBTVERfQ09NX0ZMQUdTIH0gLyogdHR5UzAgKi8gCi0KLS8qIFhYWDogVGhpcyBzaG91bGQgYmUgbW92ZWQgaW5vIGlycS5oICovCi0jZGVmaW5lIGlycV9jYW5ub25pY2FsaXplKHgpICh4KQotCi0jZW5kaWYgLyogX0FTTV9TRVJJQUxfQklHU1VSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXNoL2J1Z3MuaAppbmRleCBhMjk0OTk3Li41YTExN2VjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9idWdzLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvYnVncy5oCkBAIC0xOSw5ICsxOSw5IEBACiAJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OwogCWNoYXIgKnAgPSAmaW5pdF91dHNuYW1lKCktPm1hY2hpbmVbMl07IC8qICJzaCIgKi8KIAotCWNwdV9kYXRhLT5sb29wc19wZXJfamlmZnkgPSBsb29wc19wZXJfamlmZnk7CisJY3VycmVudF9jcHVfZGF0YS5sb29wc19wZXJfamlmZnkgPSBsb29wc19wZXJfamlmZnk7CiAKLQlzd2l0Y2ggKGNwdV9kYXRhLT50eXBlKSB7CisJc3dpdGNoIChjdXJyZW50X2NwdV9kYXRhLnR5cGUpIHsKIAljYXNlIENQVV9TSDc2MDQgLi4uIENQVV9TSDc2MTk6CiAJCSpwKysgPSAnMic7CiAJCWJyZWFrOwpAQCAtNTQsNyArNTQsNyBAQAogCQlicmVhazsKIAl9CiAKLQlwcmludGsoIkNQVTogJXNcbiIsIGdldF9jcHVfc3VidHlwZSgpKTsKKwlwcmludGsoIkNQVTogJXNcbiIsIGdldF9jcHVfc3VidHlwZSgmY3VycmVudF9jcHVfZGF0YSkpOwogCiAjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCiAJLyogJ2ViJyBtZWFucyAnRW5kaWFuIEJpZycgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNoL2NhY2hlZmx1c2guaAppbmRleCAwN2Y2MmVjLi4yMmYxMjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY2FjaGVmbHVzaC5oCkBAIC0zMCw1ICszMCw4IEBACiAKICNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKIAorLyogUGFnZSBmbGFnIGZvciBsYXp5IGRjYWNoZSB3cml0ZS1iYWNrIGZvciB0aGUgYWxpYXNpbmcgVVAgY2FjaGVzICovCisjZGVmaW5lIFBHX2RjYWNoZV9kaXJ0eQlQR19hcmNoXzEKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9jYWNoZWZsdXNoLmgKaW5kZXggZjcwZDhlZjcuLjZmYWJiYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGVmbHVzaC5oCkBAIC0zNiw4ICszNiw2IEBACiAgLyogMzJLQiBjYWNoZSwgNGtiIFBBR0Ugc2l6ZXMgbmVlZCB0byBjaGVjayBiaXQgMTIgKi8KICNkZWZpbmUgQ0FDSEVfQUxJQVMgMHgwMDAwMTAwMAogCi0jZGVmaW5lIFBHX21hcHBlZAlQR19hcmNoXzEKLQogdm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCk7CiB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKICNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKSBmbHVzaF9jYWNoZV9tbShtbSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZWZsdXNoLmgKaW5kZXggYjAxYTEwZi4uYjM3NDZhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZWZsdXNoLmgKQEAgLTE3LDYgKzE3LDcgQEAKICAqICBzbyB3ZSBuZWVkIHRoZW0uCiAgKi8KIHZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpOwordm9pZCBmbHVzaF9kY2FjaGVfYWxsKHZvaWQpOwogdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkgZmx1c2hfY2FjaGVfbW0obW0pCiB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LApAQCAtMzgsMTYgKzM5LDQgQEAKIC8qIEluaXRpYWxpemF0aW9uIG9mIFAzIGFyZWEgZm9yIGNvcHlfdXNlcl9wYWdlICovCiB2b2lkIHAzX2NhY2hlX2luaXQodm9pZCk7CiAKLSNkZWZpbmUgUEdfbWFwcGVkCVBHX2FyY2hfMQotCi0jaWZkZWYgQ09ORklHX01NVQotZXh0ZXJuIGludCByZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLSNlbHNlIC8qIENPTkZJR19NTVUgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJlbWFwX2FyZWFfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKLQkJCQkgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX01NVSAqLwogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2RtYS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9kbWEuaAppbmRleCAzZTRiM2U2Li5jMTM1ZTljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLmgKQEAgLTMsNiArMywxNyBAQAogCiAjZGVmaW5lIERNQU9SX0lOSVQJKCAweDgwMDAgfCBETUFPUl9ETUUgKQogCisvKiBTSDc3NTEvNzc2MC83NzgwIERNQSBJUlEgc291cmNlcyAqLworI2RlZmluZSBETVRFMF9JUlEJMzQKKyNkZWZpbmUgRE1URTFfSVJRCTM1CisjZGVmaW5lIERNVEUyX0lSUQkzNgorI2RlZmluZSBETVRFM19JUlEJMzcKKyNkZWZpbmUgRE1URTRfSVJRCTQ0CisjZGVmaW5lIERNVEU1X0lSUQk0NQorI2RlZmluZSBETVRFNl9JUlEJNDYKKyNkZWZpbmUgRE1URTdfSVJRCTQ3CisjZGVmaW5lIERNQUVfSVJRCTM4CisKICNpZmRlZiBDT05GSUdfQ1BVX1NINEEKICNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4ZmM4MDgwMjAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmgKaW5kZXggOGQwODY3Yi4uZDNiYzc4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9kbWEtbWFwcGluZy5oCkBAIC01Myw2ICs1MywxMCBAQAogCWNvbnNpc3RlbnRfZnJlZSh2YWRkciwgc2l6ZSk7CiB9CiAKKyNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQorI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKSAoMSkKKwogc3RhdGljIGlubGluZSB2b2lkIGRtYV9jYWNoZV9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAogCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZWMzMTA0L2VjMzEwNC5oIGIvaW5jbHVkZS9hc20tc2gvZWMzMTA0L2VjMzEwNC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzljZmE0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL2VjMzEwNC9lYzMxMDQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSNpZm5kZWYgX19BU01fRUMzMTA0X0gKLSNkZWZpbmUgX19BU01fRUMzMTA0X0gKLQotCi0vKgotICogTW9zdCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGlzIGF0IDB4YjBlYzAwMDAgLSAweGIwZWNmZmZmLgotICoKLSAqIGFzIGZhciBhcyBJJ3ZlIGZpZ3VyZWQgaXQgb3V0IHRoZSByZWdpc3RlciBtYXAgaXM6Ci0gKiAweGIwZWMwMDAwIC0gaWQgc3RyaW5nCi0gKiAweGIwZWMwWFhYIC0gcG93ZXIgbWFuYWdlbWVudAotICogMHhiMGVjMVhYWCAtIGludGVycnVwdCBjb250cm9sCi0gKiAweGIwZWMzWFhYIC0gcHMyIHBvcnQgKHRvdWNoIHBhZCBvbiBhZXJvIDgwMDApCi0gKiAweGIwZWM2WFhYIC0gaTJjCi0gKiAweGIwZWM3MDAwIC0gZmlyc3Qgc2VyaWFsIHBvcnQgKHByb3ByaWV0YXJ5IGNvbm5lY3RvciBvbiBhZXJvIDgwMDApCi0gKiAweGIwZWM4MDAwIC0gc2Vjb25kIHNlcmlhbCBwb3J0Ci0gKiAweGIwZWM5MDAwIC0gdGhpcmQgc2VyaWFsIHBvcnQKLSAqIDB4YjBlY2EwMDAgLSBmb3VydGggc2VyaWFsIHBvcnQgKGtleWJvYXJkIGNvbnRyb2xsZXIgb24gYWVybyA4MDAwKQotICogMHhiMGVjY1hYWCAtIEdQSU8KLSAqIDB4YjBlY2RYWFggLSBHUElPCi0gKi8KLQotI2RlZmluZSBFQzMxMDRfQkFTRQkweGIwZWMwMDAwCi0KLSNkZWZpbmUgRUMzMTA0X1NFUjRfREFUQQkoRUMzMTA0X0JBU0UrMHhhMDAwKQotI2RlZmluZSBFQzMxMDRfU0VSNF9JSVIJCShFQzMxMDRfQkFTRSsweGEwMDgpCi0jZGVmaW5lIEVDMzEwNF9TRVI0X01DUgkJKEVDMzEwNF9CQVNFKzB4YTAxMCkKLSNkZWZpbmUgRUMzMTA0X1NFUjRfTFNSCQkoRUMzMTA0X0JBU0UrMHhhMDE0KQotI2RlZmluZSBFQzMxMDRfU0VSNF9NU1IJCShFQzMxMDRfQkFTRSsweGEwMTgpCi0KLS8qCi0gKiBvdXIgSVNBIGJ1cy4gIHRoaXMgc2VlbXMgdG8gYmUgcmVhbCBJU0EuCi0gKi8KLSNkZWZpbmUgRUMzMTA0X0lTQV9CQVNFCTB4YTUwMDAwMDAKLQotI2RlZmluZSBFQzMxMDRfSVJRCTExCi0jZGVmaW5lIEVDMzEwNF9JUlFCQVNFCTY0Ci0KLSNkZWZpbmUgRUMzMTA0X0lSUV9TRVIxCUVDMzEwNF9JUlFCQVNFICsgNwotI2RlZmluZSBFQzMxMDRfSVJRX1NFUjIJRUMzMTA0X0lSUUJBU0UgKyA4Ci0jZGVmaW5lIEVDMzEwNF9JUlFfU0VSMwlFQzMxMDRfSVJRQkFTRSArIDkKLSNkZWZpbmUgRUMzMTA0X0lSUV9TRVI0CUVDMzEwNF9JUlFCQVNFICsgMTAKLQotI2VuZGlmIC8qIF9fQVNNX0VDMzEwNF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9lYzMxMDQvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL2VjMzEwNC9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTVjOGU2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL2VjMzEwNC9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1NIX0lPX0VDMzEwNF9ICi0jZGVmaW5lIF9BU01fU0hfSU9fRUMzMTA0X0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIGVjMzEwNF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBlYzMxMDRfaW53KHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBlYzMxMDRfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB2b2lkIGVjMzEwNF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBlYzMxMDRfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIGVjMzEwNF9vdXRsKHVuc2lnbmVkIGxvbmcgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiBpbnQgZWMzMTA0X2lycV9kZW11eChpbnQgaXJxKTsKLQotI2VuZGlmIC8qIF9BU01fU0hfSU9fRUMzMTA0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2VjMzEwNC9rZXlib2FyZC5oIGIvaW5jbHVkZS9hc20tc2gvZWMzMTA0L2tleWJvYXJkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMjUzYTYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvZWMzMTA0L2tleWJvYXJkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1leHRlcm4gdW5zaWduZWQgY2hhciBlYzMxMDRfa2JkX3N5c3JxX3hsYXRlW107Ci1leHRlcm4gaW50IGVjMzEwNF9rYmRfc2V0a2V5Y29kZSh1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHVuc2lnbmVkIGludCBrZXljb2RlKTsKLWV4dGVybiBpbnQgZWMzMTA0X2tiZF9nZXRrZXljb2RlKHVuc2lnbmVkIGludCBzY2FuY29kZSk7Ci1leHRlcm4gaW50IGVjMzEwNF9rYmRfdHJhbnNsYXRlKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIgKiwgY2hhcik7Ci1leHRlcm4gY2hhciBlYzMxMDRfa2JkX3VuZXhwZWN0ZWRfdXAodW5zaWduZWQgY2hhcik7Ci1leHRlcm4gdm9pZCBlYzMxMDRfa2JkX2xlZHModW5zaWduZWQgY2hhcik7Ci1leHRlcm4gdm9pZCBlYzMxMDRfa2JkX2luaXRfaHcodm9pZCk7Ci0KLSNkZWZpbmUga2JkX3N5c3JxX3hsYXRlIGVjMzEwNF9rYmRfc3lzcnFfeGxhdGUKLSNkZWZpbmUga2JkX3NldGtleWNvZGUgZWMzMTA0X2tiZF9zZXRrZXljb2RlCi0jZGVmaW5lIGtiZF9nZXRrZXljb2RlIGVjMzEwNF9rYmRfZ2V0a2V5Y29kZQotI2RlZmluZSBrYmRfdHJhbnNsYXRlIGVjMzEwNF9rYmRfdHJhbnNsYXRlCi0jZGVmaW5lIGtiZF91bmV4cGVjdGVkX3VwIGVjMzEwNF9rYmRfdW5leHBlY3RlZF91cAotI2RlZmluZSBrYmRfbGVkcyBlYzMxMDRfa2JkX2xlZHMKLSNkZWZpbmUga2JkX2luaXRfaHcgZWMzMTA0X2tiZF9pbml0X2h3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9lYzMxMDQvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1zaC9lYzMxMDQvc2VyaWFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTRkNzguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvZWMzMTA0L3NlcmlhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS9lYzMxMDQuaD4KLS8qIE5hdHVyYWxseSB3ZSBkb24ndCBrbm93IHRoZSBleGFjdCB2YWx1ZSBidXQgMTE1MjAwIGJhdWQgaGFzIGEgZGl2aXNvcgotICogb2YgOSBhbmQgMTkyMDAgYmF1ZCBoYXMgYSBkaXZpc29yIG9mIDUyLCBzbyB0aGlzIHNlZW1zIGxpa2UgYSBnb29kCi0gKiBndWVzcy4gICovCi0jZGVmaW5lIEJBU0VfQkFVRCAoMTY4MDAwMDAgLyAxNikKLQotI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUKQotCi0vKiB0aGVyZSBpcyBhIGZvdXJ0aCBzZXJpYWwgcG9ydCB3aXRoIHRoZSBleHBlY3RlZCB2YWx1ZXMgYXMgd2VsbCwgYnV0Ci0gKiBpdCdzIGdvdCB0aGUga2V5Ym9hcmQgY29udHJvbGxlciBiZWhpbmQgaXQgc28gd2UgY2FuJ3QgcmVhbGx5IHVzZSBpdAotICogKHdpdGhvdXQgbW92aW5nIHRoZSBrZXlib2FyZCBkcml2ZXIgdG8gdXNlcnNwYWNlLCB3aGljaCBkb2Vzbid0IHNvdW5kCi0gKiBsaWtlIGEgdmVyeSBnb29kIGlkZWEpICovCi0jZGVmaW5lIFNFUklBTF9QT1JUX0RGTlMJCQlcCi0JLyogVUFSVCBDTEsgICBQT1JUIElSUSAgICAgRkxBR1MgICAgICAgICovCQkJXAotCXsgMCwgQkFTRV9CQVVELCAweDExQzAwLCBFQzMxMDRfSVJRQkFTRSs3LCBTVERfQ09NX0ZMQUdTIH0sIC8qIHR0eVMwICovCVwKLQl7IDAsIEJBU0VfQkFVRCwgMHgxMjAwMCwgRUMzMTA0X0lSUUJBU0UrOCwgU1REX0NPTV9GTEFHUyB9LCAvKiB0dHlTMSAqLwlcCi0JeyAwLCBCQVNFX0JBVUQsIDB4MTI0MDAsIEVDMzEwNF9JUlFCQVNFKzksIFNURF9DT01fRkxBR1MgfSwgLyogdHR5UzIgKi8KLQotLyogWFhYOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCBpbm8gaXJxLmggKi8KLSNkZWZpbmUgaXJxX2Nhbm5vbmljYWxpemUoeCkgKHgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pcnEuaCBiL2luY2x1ZGUvYXNtLXNoL2lycS5oCmluZGV4IGJmZjk2NWUuLjhjY2Y3YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2lycS5oCkBAIC02NiwxMiArNjYsOCBAQAogLyogMy4gT0ZGQ0hJUF9OUl9JUlFTICovCiAjaWYgZGVmaW5lZChDT05GSUdfSEQ2NDQ2MSkKICMgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyAxOAotI2VsaWYgZGVmaW5lZCAoQ09ORklHX1NIX0JJR1NVUikgLyogbXVzdCBiZSBiZWZvcmUgQ09ORklHX0hENjQ0NjUgKi8KLSMgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyA0OAogI2VsaWYgZGVmaW5lZChDT05GSUdfSEQ2NDQ2NSkKICMgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyAxNgotI2VsaWYgZGVmaW5lZCAoQ09ORklHX1NIX0VDMzEwNCkKLSMgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyAxNgogI2VsaWYgZGVmaW5lZCAoQ09ORklHX1NIX0RSRUFNQ0FTVCkKICMgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyA5NgogI2VsaWYgZGVmaW5lZCAoQ09ORklHX1NIX1RJVEFOKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gva2dkYi5oIGIvaW5jbHVkZS9hc20tc2gva2dkYi5oCmluZGV4IDdiMjZmNTMuLjAwOTVjNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2tnZGIuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9rZ2RiLmgKQEAgLTg1LDEwICs4NSwxMCBAQAogI2RlZmluZSBLR0RCX1BSSU5USyguLi4pIHByaW50aygiS0dEQjogIiBfX1ZBX0FSR1NfXykKIAogLyogRm9yY2VkIGJyZWFrcG9pbnQgKi8KLSNkZWZpbmUgQlJFQUtQT0lOVCgpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoa2dkYl9lbmFibGVkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgYXNtIHZvbGF0aWxlKCJ0cmFwYSAgICMweGZmIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBCUkVBS1BPSU5UKCkJCQkJCVwKK2RvIHsJCQkJCQkJXAorCWlmIChrZ2RiX2VuYWJsZWQpCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oInRyYXBhICAgIzB4M2MiKTsJXAogfSB3aGlsZSAoMCkKIAogLyogS0dEQiBzaG91bGQgYmUgYWJsZSB0byBmbHVzaCBhbGwga2VybmVsIHRleHQgc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21tdS5oIGIvaW5jbHVkZS9hc20tc2gvbW11LmgKaW5kZXggY2Y0N2RmNy4uZWIwMzU4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tc2gvbW11LmgKQEAgLTEsMjUgKzEsMTkgQEAKICNpZm5kZWYgX19NTVVfSAogI2RlZmluZSBfX01NVV9ICiAKLSNpZiAhZGVmaW5lZChDT05GSUdfTU1VKQorLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfaWRfdFtOUl9DUFVTXTsKIAogdHlwZWRlZiBzdHJ1Y3QgeworI2lmZGVmIENPTkZJR19NTVUKKwltbV9jb250ZXh0X2lkX3QJCWlkOworCXZvaWQJCQkqdmRzbzsKKyNlbHNlCiAJc3RydWN0IHZtX2xpc3Rfc3RydWN0CSp2bWxpc3Q7CiAJdW5zaWduZWQgbG9uZwkJZW5kX2JyazsKKyNlbmRpZgogfSBtbV9jb250ZXh0X3Q7CiAKLSNlbHNlCi0KLS8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X2lkX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQltbV9jb250ZXh0X2lkX3QgaWQ7Ci0Jdm9pZCAqdmRzbzsKLX0gbW1fY29udGV4dF90OwotCi0jZW5kaWYgLyogQ09ORklHX01NVSAqLwotCiAvKgogICogUHJpdmlsZWdlZCBTcGFjZSBNYXBwaW5nIEJ1ZmZlciAoUE1CKSBkZWZpbml0aW9ucwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tc2gvbW11X2NvbnRleHQuaAppbmRleCA0NmYwNGUyLi4zNDIwMjQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL21tdV9jb250ZXh0LmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQotICogQ29weXJpZ2h0IChDKSAyMDAzIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgUGF1bCBNdW5kdAogICoKICAqIEFTSUQgaGFuZGxpbmcgaWRlYSB0YWtlbiBmcm9tIE1JUFMgaW1wbGVtZW50YXRpb24uCiAgKi8KQEAgLTE5LDExICsxOSw2IEBACiAgKiAgICAoYikgQVNJRCAoQWRkcmVzcyBTcGFjZSBJRGVudGlmaWVyKQogICovCiAKLS8qCi0gKiBDYWNoZSBvZiBNTVUgY29udGV4dCBsYXN0IHVzZWQuCi0gKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIG1tdV9jb250ZXh0X2NhY2hlOwotCiAjZGVmaW5lIE1NVV9DT05URVhUX0FTSURfTUFTSwkJMHgwMDAwMDBmZgogI2RlZmluZSBNTVVfQ09OVEVYVF9WRVJTSU9OX01BU0sJMHhmZmZmZmYwMAogI2RlZmluZSBNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OCTB4MDAwMDAxMDAKQEAgLTMyLDYgKzI3LDExIEBACiAvKiBBU0lEIGlzIDgtYml0IHZhbHVlLCBzbyBpdCBjYW4ndCBiZSAweDEwMCAqLwogI2RlZmluZSBNTVVfTk9fQVNJRAkJCTB4MTAwCiAKKyNkZWZpbmUgY3B1X2NvbnRleHQoY3B1LCBtbSkJKChtbSktPmNvbnRleHQuaWRbY3B1XSkKKyNkZWZpbmUgY3B1X2FzaWQoY3B1LCBtbSkJKGNwdV9jb250ZXh0KChjcHUpLCAobW0pKSAmIFwKKwkJCQkgTU1VX0NPTlRFWFRfQVNJRF9NQVNLKQorI2RlZmluZSBhc2lkX2NhY2hlKGNwdSkJCShjcHVfZGF0YVtjcHVdLmFzaWRfY2FjaGUpCisKIC8qCiAgKiBWaXJ0dWFsIFBhZ2UgTnVtYmVyIG1hc2sKICAqLwpAQCAtNDEsMTggKzQxLDE3IEBACiAvKgogICogR2V0IE1NVSBjb250ZXh0IGlmIG5lZWRlZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGdldF9tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYyA9IG1tdV9jb250ZXh0X2NhY2hlOworCXVuc2lnbmVkIGxvbmcgYXNpZCA9IGFzaWRfY2FjaGUoY3B1KTsKIAogCS8qIENoZWNrIGlmIHdlIGhhdmUgb2xkIHZlcnNpb24gb2YgY29udGV4dC4gKi8KLQlpZiAoKChtbS0+Y29udGV4dC5pZCBeIG1jKSAmIE1NVV9DT05URVhUX1ZFUlNJT05fTUFTSykgPT0gMCkKKwlpZiAoKChjcHVfY29udGV4dChjcHUsIG1tKSBeIGFzaWQpICYgTU1VX0NPTlRFWFRfVkVSU0lPTl9NQVNLKSA9PSAwKQogCQkvKiBJdCdzIHVwIHRvIGRhdGUsIGRvIG5vdGhpbmcgKi8KIAkJcmV0dXJuOwogCiAJLyogSXQncyBvbGQsIHdlIG5lZWQgdG8gZ2V0IG5ldyBjb250ZXh0IHdpdGggbmV3IHZlcnNpb24uICovCi0JbWMgPSArK21tdV9jb250ZXh0X2NhY2hlOwotCWlmICghKG1jICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLKSkgeworCWlmICghKCsrYXNpZCAmIE1NVV9DT05URVhUX0FTSURfTUFTSykpIHsKIAkJLyoKIAkJICogV2UgZXhoYXVzdCBBU0lEIG9mIHRoaXMgdmVyc2lvbi4KIAkJICogRmx1c2ggYWxsIFRMQiBhbmQgc3RhcnQgbmV3IGN5Y2xlLgpAQCAtNjMsMTAgKzYyLDExIEBACiAJCSAqIEZpeCB2ZXJzaW9uOyBOb3RlIHRoYXQgd2UgYXZvaWQgdmVyc2lvbiAjMAogCQkgKiB0byBkaXN0aW5ndXNoIE5PX0NPTlRFWFQuCiAJCSAqLwotCQlpZiAoIW1jKQotCQkJbW11X2NvbnRleHRfY2FjaGUgPSBtYyA9IE1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT047CisJCWlmICghYXNpZCkKKwkJCWFzaWQgPSBNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OOwogCX0KLQltbS0+Y29udGV4dC5pZCA9IG1jOworCisJY3B1X2NvbnRleHQoY3B1LCBtbSkgPSBhc2lkX2NhY2hlKGNwdSkgPSBhc2lkOwogfQogCiAvKgpAQCAtNzQsOSArNzQsMTMgQEAKICAqIGluc3RhbmNlLgogICovCiBzdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAotCQkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKKwkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQltbS0+Y29udGV4dC5pZCA9IE5PX0NPTlRFWFQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX29ubGluZV9jcHVzKCk7IGkrKykKKwkJY3B1X2NvbnRleHQoaSwgbW0pID0gTk9fQ09OVEVYVDsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMTcsMTAgKzEyMSwxMCBAQAogICogQWZ0ZXIgd2UgaGF2ZSBzZXQgY3VycmVudC0+bW0gdG8gYSBuZXcgdmFsdWUsIHRoaXMgYWN0aXZhdGVzCiAgKiB0aGUgY29udGV4dCBmb3IgdGhlIG5ldyBtbSBzbyB3ZSBzZWUgdGhlIG5ldyBtYXBwaW5ncy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGNwdSkKIHsKLQlnZXRfbW11X2NvbnRleHQobW0pOwotCXNldF9hc2lkKG1tLT5jb250ZXh0LmlkICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLKTsKKwlnZXRfbW11X2NvbnRleHQobW0sIGNwdSk7CisJc2V0X2FzaWQoY3B1X2FzaWQoY3B1LCBtbSkpOwogfQogCiAvKiBNTVVfVFRCIGlzIHVzZWQgZm9yIG9wdGltaXppbmcgdGhlIGZhdWx0IGhhbmRsaW5nLiAqLwpAQCAtMTM4LDEwICsxNDIsMTUgQEAKIAkJCSAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKIAkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwogCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgeworCQljcHVfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spOwogCQlzZXRfVFRCKG5leHQtPnBnZCk7Ci0JCWFjdGl2YXRlX2NvbnRleHQobmV4dCk7Ci0JfQorCQlhY3RpdmF0ZV9jb250ZXh0KG5leHQsIGNwdSk7CisJfSBlbHNlCisJCWlmICghY3B1X3Rlc3RfYW5kX3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKSkKKwkJCWFjdGl2YXRlX2NvbnRleHQobmV4dCwgY3B1KTsKIH0KIAogI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQpAQCAtMTU5LDcgKzE2OCw3IEBACiAjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgc2V0X2FzaWQoYXNpZCkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGdldF9hc2lkKCkJCQkoMCkKLSNkZWZpbmUgYWN0aXZhdGVfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYWN0aXZhdGVfY29udGV4dChtbSxjcHUpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgc3dpdGNoX21tKHByZXYsbmV4dCx0c2spCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGFjdGl2YXRlX21tKHByZXYsbmV4dCkJCWRvIHsgfSB3aGlsZSAoMCkKQEAgLTE3NCwxNCArMTgzLDE2IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfbW11KHZvaWQpCiB7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwogCS8qIEVuYWJsZSBNTVUgKi8KIAljdHJsX291dGwoTU1VX0NPTlRST0xfSU5JVCwgTU1VQ1IpOwogCWN0cmxfYmFycmllcigpOwogCi0JaWYgKG1tdV9jb250ZXh0X2NhY2hlID09IE5PX0NPTlRFWFQpCi0JCW1tdV9jb250ZXh0X2NhY2hlID0gTU1VX0NPTlRFWFRfRklSU1RfVkVSU0lPTjsKKwlpZiAoYXNpZF9jYWNoZShjcHUpID09IE5PX0NPTlRFWFQpCisJCWFzaWRfY2FjaGUoY3B1KSA9IE1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT047CiAKLQlzZXRfYXNpZChtbXVfY29udGV4dF9jYWNoZSAmIE1NVV9DT05URVhUX0FTSURfTUFTSyk7CisJc2V0X2FzaWQoYXNpZF9jYWNoZShjcHUpICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfbW11KHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zaC9wYWdlLmgKaW5kZXggMzgwZmQ2Mi4uYWM0YjQ2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3BhZ2UuaApAQCAtMTMsNiArMTMsOCBAQAogICAgWyBQNCBjb250cm9sICAgXQkJMHhFMDAwMDAwMAogICovCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjaWYgZGVmaW5lZChDT05GSUdfUEFHRV9TSVpFXzRLQikKICMgZGVmaW5lIFBBR0VfU0hJRlQJMTIKQEAgLTUxLDcgKzUzLDYgQEAKICNkZWZpbmUgSFVHRVRMQl9QQUdFX09SREVSCShIUEFHRV9TSElGVC1QQUdFX1NISUZUKQogI2VuZGlmCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiBleHRlcm4gdm9pZCAoKmNsZWFyX3BhZ2UpKHZvaWQgKnRvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaAppbmRleCAwMzZjYTI4Li45MjE0YzAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oCkBAIC00MywxNyArNDMsMTcgQEAKIC8qIFBHRCBiaXRzICovCiAjZGVmaW5lIFBHRElSX1NISUZUCShQVEVfU0hJRlQgKyBQVEVfQklUUykKICNkZWZpbmUgUEdESVJfQklUUwkoMzIgLSBQR0RJUl9TSElGVCkKLSNkZWZpbmUgUEdESVJfU0laRQkoMSA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQogI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCiAKIC8qIEVudHJpZXMgcGVyIGxldmVsICovCi0jZGVmaW5lIFBUUlNfUEVSX1BURQkoUEFHRV9TSVpFIC8gNCkKKyNkZWZpbmUgUFRSU19QRVJfUFRFCShQQUdFX1NJWkUgLyAoMSA8PCBQVEVfTUFHTklUVURFKSkKICNkZWZpbmUgUFRSU19QRVJfUEdECShQQUdFX1NJWkUgLyA0KQogCiAjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUvUEdESVJfU0laRSkKICNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKIAotI2RlZmluZSBQVEVfUEhZU19NQVNLCTB4MWZmZmYwMDAKKyNkZWZpbmUgUFRFX1BIWVNfTUFTSwkJKDB4MjAwMDAwMDAgLSBQQUdFX1NJWkUpCiAKIC8qCiAgKiBGaXJzdCAxTUIgbWFwIGlzIHVzZWQgYnkgZml4ZWQgcHVycG9zZS4KQEAgLTU4MywxMSArNTgzLDYgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQga29ianNpemUoY29uc3Qgdm9pZCAqb2JqcCk7CiAjZW5kaWYgLyogIUNPTkZJR19NTVUgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpIHx8IGRlZmluZWQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKLWV4dGVybiBwdGVfdCBwdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApOwotI2VuZGlmCi0KIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOwogZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yLmgKaW5kZXggZTI5ZjJhYi4uM2U0NmE3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yLmgKQEAgLTI3LDggKzI3LDYgQEAKICNkZWZpbmUgQ0NOX0NWUgkJMHhmZjAwMDA0MAogI2RlZmluZSBDQ05fUFJSCQkweGZmMDAwMDQ0CiAKLWNvbnN0IGNoYXIgKmdldF9jcHVfc3VidHlwZSh2b2lkKTsKLQogLyoKICAqICBDUFUgdHlwZSBhbmQgaGFyZHdhcmUgYnVnIGZsYWdzLiBLZXB0IHNlcGFyYXRlbHkgZm9yIGVhY2ggQ1BVLgogICoKQEAgLTY2LDYgKzY0LDcgQEAKIHN0cnVjdCBzaF9jcHVpbmZvIHsKIAl1bnNpZ25lZCBpbnQgdHlwZTsKIAl1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKwl1bnNpZ25lZCBsb25nIGFzaWRfY2FjaGU7CiAKIAlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7CS8qIFByaW1hcnkgSS1jYWNoZSAqLwogCXN0cnVjdCBjYWNoZV9pbmZvIGRjYWNoZTsJLyogUHJpbWFyeSBELWNhY2hlICovCkBAIC0yODgsNSArMjg3LDggQEAKICNkZWZpbmUgdnN5c2NhbGxfaW5pdCgpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisvKiBhcmNoL3NoL2tlcm5lbC9zZXR1cC5jICovCitjb25zdCBjaGFyICpnZXRfY3B1X3N1YnR5cGUoc3RydWN0IHNoX2NwdWluZm8gKmMpOworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkLmggYi9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkLmgKaW5kZXggNzk2YjhmYy4uMTA1NjVhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcnRzNzc1MXIyZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3J0czc3NTFyMmQuaApAQCAtNjgsNiArNjgsMTAgQEAKICNkZWZpbmUgSVJRX1BDSVNMT1QyCTEwCQkvKiBQQ0kgU2xvdCAjMiBJUlEgKi8KICNkZWZpbmUJSVJRX0VYVEVOVElPTgkxMQkJLyogRVhUbiBJUlEgKi8KIAorLyogYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lycS5jICovCit2b2lkIGluaXRfcnRzNzc1MXIyZF9JUlEodm9pZCk7CitpbnQgcnRzNzc1MXIyZF9pcnFfZGVtdXgoaW50KTsKKwogI2RlZmluZSBfX0lPX1BSRUZJWCBydHM3NzUxcjJkCiAjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1zaC9zZXJpYWwuaAppbmRleCA4NzM0NTkwLi4yMWY2ZDMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zZXJpYWwuaApAQCAtOSwxMSArOSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAotI2lmZGVmIENPTkZJR19TSF9FQzMxMDQKLSNpbmNsdWRlIDxhc20vc2VyaWFsLWVjMzEwNC5oPgotI2VsaWYgZGVmaW5lZCAoQ09ORklHX1NIX0JJR1NVUikKLSNpbmNsdWRlIDxhc20vc2VyaWFsLWJpZ3N1ci5oPgotI2Vsc2UKIC8qCiAgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCiAgKgpAQCAtMzQsMTIgKzI5LDggQEAKIAogI2Vsc2UKIAotI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TCQkJXAotCS8qIFVBUlQgQ0xLICAgUE9SVCBJUlEgICAgIEZMQUdTICAgICAgICAqLwkJCVwKLQl7IDAsIEJBU0VfQkFVRCwgMHgzRjgsIDQsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzAgKi8JXAotCXsgMCwgQkFTRV9CQVVELCAweDJGOCwgMywgU1REX0NPTV9GTEFHUyB9CS8qIHR0eVMxICovCisjZGVmaW5lIFNFUklBTF9QT1JUX0RGTlMKIAogI2VuZGlmCiAKLSNlbmRpZgogI2VuZGlmIC8qIF9BU01fU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1zaC90aHJlYWRfaW5mby5oCmluZGV4IDg3OWY3NDEuLjI3OWU3MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvdGhyZWFkX2luZm8uaApAQCAtMzIsMTIgKzMyLDIwIEBACiAKICNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCTB4MTAwMDAwMDAKIAotI2lmZGVmIENPTkZJR180S1NUQUNLUwotI2RlZmluZSBUSFJFQURfU0laRQkJKFBBR0VfU0laRSkKKyNpZiBkZWZpbmVkKENPTkZJR180S1NUQUNLUykKKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19QQUdFX1NJWkVfNEtCKQorI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV84S0IpCisjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCSgxKQorI2VsaWYgZGVmaW5lZChDT05GSUdfUEFHRV9TSVpFXzY0S0IpCisjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCSgwKQogI2Vsc2UKLSNkZWZpbmUgVEhSRUFEX1NJWkUJCShQQUdFX1NJWkUgKiAyKQorI2Vycm9yICJVbmtub3duIHRocmVhZCBzaXplIgogI2VuZGlmCi0jZGVmaW5lIFNUQUNLX1dBUk4JCShUSFJFQURfU0laRSAvIDgpCisKKyNkZWZpbmUgVEhSRUFEX1NJWkUJKFBBR0VfU0laRSA8PCBUSFJFQURfU0laRV9PUkRFUikKKyNkZWZpbmUgU1RBQ0tfV0FSTgkoVEhSRUFEX1NJWkUgPj4gMykKIAogLyoKICAqIG1hY3Jvcy9mdW5jdGlvbnMgZm9yIGdhaW5pbmcgYWNjZXNzIHRvIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tc2gvdGxiZmx1c2guaAppbmRleCAyOGMwNzNiLi40NTVmYjhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3RsYmZsdXNoLmgKQEAgLTQsNyArNCw2IEBACiAvKgogICogVExCIGZsdXNoaW5nOgogICoKLSAqICAtIGZsdXNoX3RsYigpIGZsdXNoZXMgdGhlIGN1cnJlbnQgbW0gc3RydWN0IFRMQnMKICAqICAtIGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBwcm9jZXNzZXMgVExCcwogICogIC0gZmx1c2hfdGxiX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCBUTEIncwogICogIC0gZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2UKQEAgLTEyLDIwICsxMSw0NSBAQAogICogIC0gZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2Yga2VybmVsIHBhZ2VzCiAgKiAgLSBmbHVzaF90bGJfcGd0YWJsZXMobW0sIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlIHRhYmxlcwogICovCitleHRlcm4gdm9pZCBsb2NhbF9mbHVzaF90bGJfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgbG9jYWxfZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJICB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBsb2NhbF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgdW5zaWduZWQgbG9uZyBwYWdlKTsKK2V4dGVybiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhc2lkLCB1bnNpZ25lZCBsb25nIHBhZ2UpOwogCi1leHRlcm4gdm9pZCBmbHVzaF90bGIodm9pZCk7CisjaWZkZWYgQ09ORklHX1NNUAorCiBleHRlcm4gdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpOwogZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIGV4dGVybiB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBwYWdlKTsKLWV4dGVybiB2b2lkIF9fZmx1c2hfdGxiX3BhZ2UodW5zaWduZWQgbG9uZyBhc2lkLCB1bnNpZ25lZCBsb25nIHBhZ2UpOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitleHRlcm4gdm9pZCBmbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwgdW5zaWduZWQgbG9uZyBwYWdlKTsKKworI2Vsc2UKKworI2RlZmluZSBmbHVzaF90bGJfYWxsKCkJCQlsb2NhbF9mbHVzaF90bGJfYWxsKCkKKyNkZWZpbmUgZmx1c2hfdGxiX21tKG1tKQkJbG9jYWxfZmx1c2hfdGxiX21tKG1tKQorI2RlZmluZSBmbHVzaF90bGJfcGFnZSh2bWEsIHBhZ2UpCWxvY2FsX2ZsdXNoX3RsYl9wYWdlKHZtYSwgcGFnZSkKKyNkZWZpbmUgZmx1c2hfdGxiX29uZShhc2lkLCBwYWdlKQlsb2NhbF9mbHVzaF90bGJfb25lKGFzaWQsIHBhZ2UpCisKKyNkZWZpbmUgZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJXAorCWxvY2FsX2ZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCisKKyNkZWZpbmUgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKQlcCisJbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoteyAvKiBOb3RoaW5nIHRvIGRvICovCit7CisJLyogTm90aGluZyB0byBkbyAqLwogfQotCi1leHRlcm4gdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKLQogI2VuZGlmIC8qIF9fQVNNX1NIX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3ViYy5oIGIvaW5jbHVkZS9hc20tc2gvdWJjLmgKaW5kZXggNjk0ZjUxZi4uYWU5YmJkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvdWJjLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvdWJjLmgKQEAgLTE3LDcgKzE3LDcgQEAKIC8qIFVzZXIgQnJlYWsgQ29udHJvbGxlciAqLwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKQotI2RlZmluZSBVQkNfVFlQRV9TSDc3MjkJKGNwdV9kYXRhLT50eXBlID09IENQVV9TSDc3MjkpCisjZGVmaW5lIFVCQ19UWVBFX1NINzcyOQkoY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDc3MjkpCiAjZWxzZQogI2RlZmluZSBVQkNfVFlQRV9TSDc3MjkJMAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oCmluZGV4IGY5ODIwNzMuLjE3ZjUyN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oCkBAIC0yOTIsMjIgKzI5MiwyMiBAQAogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgICAgICAoX19OUl9tcV9vcGVuKzUpCiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKLS8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KLSNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKLSNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODcKLSNkZWZpbmUgX19OUl9rZXljdGwJCTI4OAotI2RlZmluZSBfX05SX2lvcHJpb19zZXQJCTI4OQotI2RlZmluZSBfX05SX2lvcHJpb19nZXQJCTI5MAotI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdAkyOTEKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaAkyOTIKLSNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoCTI5MworI2RlZmluZSBfX05SX2FkZF9rZXkJCTI4NQorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4NgorI2RlZmluZSBfX05SX2tleWN0bAkJMjg3CisjZGVmaW5lIF9fTlJfaW9wcmlvX3NldAkJMjg4CisjZGVmaW5lIF9fTlJfaW9wcmlvX2dldAkJMjg5CisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0CTI5MAorI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoCTI5MQorI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2gJMjkyCisvKiAyOTMgaXMgdW51c2VkICovCiAjZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcwkyOTQKICNkZWZpbmUgX19OUl9vcGVuYXQJCTI5NQogI2RlZmluZSBfX05SX21rZGlyYXQJCTI5NgogI2RlZmluZSBfX05SX21rbm9kYXQJCTI5NwogI2RlZmluZSBfX05SX2ZjaG93bmF0CQkyOTgKICNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCTI5OQotI2RlZmluZSBfX05SX25ld2ZzdGF0YXQJCTMwMAorI2RlZmluZSBfX05SX2ZzdGF0YXQ2NAkJMzAwCiAjZGVmaW5lIF9fTlJfdW5saW5rYXQJCTMwMQogI2RlZmluZSBfX05SX3JlbmFtZWF0CQkzMDIKICNkZWZpbmUgX19OUl9saW5rYXQJCTMwMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdm95YWdlcmd4LmggYi9pbmNsdWRlL2FzbS1zaC92b3lhZ2VyZ3guaAppbmRleCA5OWIwODA3Li42NGM5MzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC92b3lhZ2VyZ3guaAorKysgYi9pbmNsdWRlL2FzbS1zaC92b3lhZ2VyZ3guaApAQCAtMzA4LDYgKzMwOCw5IEBACiAjZGVmaW5lIEFDOTdDX1JFQUQJCQkoMSA8PCAxOSkKICNkZWZpbmUgQUM5N0NfV0RfQklUCQkJKDEgPDwgMikKICNkZWZpbmUgQUM5N0NfSU5ERVhfTUFTSwkJMHg3ZgotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYXJjaC9zaC9jY2hpcHMvdm95YWdlcmd4L2NvbnNpc3RlbnQuYyAqLwordm9pZCAqdm95YWdlcmd4X2NvbnNpc3RlbnRfYWxsb2Moc3RydWN0IGRldmljZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKiwgZ2ZwX3QpOworaW50IHZveWFnZXJneF9jb25zaXN0ZW50X2ZyZWUoc3RydWN0IGRldmljZSAqLCBzaXplX3QsIHZvaWQgKiwgZG1hX2FkZHJfdCk7CiAKICNlbmRpZiAvKiBfVk9ZQUdFUl9HWF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2JpdG9wcy5oCmluZGV4IDhkYTk2MDkuLmQ0ZGJiZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYml0b3BzLmgKQEAgLTcsNyArNyw3IEBACiAKICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KIAotI2lmIF9fR05VQ19fIDwgNCB8fCBfX0dOVUNfTUlOT1JfXyA8IDEKKyNpZiBfX0dOVUNfXyA8IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPCAxKQogLyogVGVjaG5pY2FsbHkgd3JvbmcsIGJ1dCB0aGlzIGF2b2lkcyBjb21waWxhdGlvbiBlcnJvcnMgb24gc29tZSBnY2MKICAgIHZlcnNpb25zLiAqLwogI2RlZmluZSBBRERSICI9bSIgKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaAppbmRleCA0OWRiYWIwLi5kMmFmMjI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaApAQCAtNjYsNiArNjYsOSBAQAogI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCiAjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCiAKKyNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQorI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorCiBleHRlcm4gdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKTsKIGV4dGVybiB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmgKaW5kZXggZmEyMDg2Ny4uNjIxNmZhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oCkBAIC00Niw2ICs0Niw3IEBACiBleHRlcm4gdm9pZCBlODIwX3ByaW50X21hcChjaGFyICp3aG8pOwogZXh0ZXJuIGludCBlODIwX2FueV9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIHR5cGUpOwogZXh0ZXJuIGludCBlODIwX2FsbF9tYXBwZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIHR5cGUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZTgyMF9ob2xlX3NpemUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCiBleHRlcm4gdm9pZCBlODIwX3NldHVwX2dhcCh2b2lkKTsKIGV4dGVybiB2b2lkIGU4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCwKQEAgLTU2LDYgKzU3LDcgQEAKIGV4dGVybiBzdHJ1Y3QgZTgyMG1hcCBlODIwOwogCiBleHRlcm4gdW5zaWduZWQgZWJkYV9hZGRyLCBlYmRhX3NpemU7CitleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlbWFwX2FkZHIsIG5vZGVtYXBfc2l6ZTsKICNlbmRpZi8qIV9fQVNTRU1CTFlfXyovCiAKICNlbmRpZi8qX19FODIwX0hFQURFUiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaHBldC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2hwZXQuaAppbmRleCBiMzkwOTg0Li41OWE2NmYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaHBldC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9ocGV0LmgKQEAgLTU2LDggKzU2LDE1IEBACiBleHRlcm4gaW50IGlzX2hwZXRfZW5hYmxlZCh2b2lkKTsKIGV4dGVybiBpbnQgaHBldF9ydGNfdGltZXJfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgYXBpY19pc19jbHVzdGVyZWRfYm94KHZvaWQpOworZXh0ZXJuIGludCBocGV0X2FyY2hfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgaHBldF90aW1lcl9zdG9wX3NldF9nbyh1bnNpZ25lZCBsb25nIHRpY2spOworZXh0ZXJuIGludCBocGV0X3JlZW5hYmxlKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBocGV0X2NhbGlicmF0ZV90c2Modm9pZCk7CiAKIGV4dGVybiBpbnQgaHBldF91c2VfdGltZXI7CitleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X2FkZHJlc3M7CitleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X3BlcmlvZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGhwZXRfdGljazsKIAogI2lmZGVmIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDCiBleHRlcm4gaW50IGhwZXRfbWFza19ydGNfaXJxX2JpdCh1bnNpZ25lZCBsb25nIGJpdF9tYXNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9od19pcnEuaAppbmRleCAxNzljY2U3Li41NTJkZjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2h3X2lycS5oCkBAIC05MSw3ICs5MSw3IEBACiBleHRlcm4gaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIG1ha2VfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogZXh0ZXJuIHZvaWQgaW5pdF84MjU5QShpbnQgYWVvaSk7Ci1leHRlcm4gdm9pZCBGQVNUQ0FMTChzZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpKTsKK2V4dGVybiB2b2lkIHNlbmRfSVBJX3NlbGYoaW50IHZlY3Rvcik7CiBleHRlcm4gdm9pZCBpbml0X1ZJU1dTX0FQSUNfaXJxcyh2b2lkKTsKIGV4dGVybiB2b2lkIHNldHVwX0lPX0FQSUModm9pZCk7CiBleHRlcm4gdm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oCmluZGV4IGY1ZDg0YmIuLmRlMmNkOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKIAotI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgX194ODZfNjRfXworI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgZGVmaW5lZChfX3g4Nl82NF9fKQogCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaW9fYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvX2FwaWMuaAppbmRleCA1NjFlY2JmLi5mNGZiMjM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaW9fYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmgKQEAgLTg1LDE4ICs4NSw4IEBACiAJCW1hc2sJCTogIDEsCS8qIDA6IGVuYWJsZWQsIDE6IGRpc2FibGVkICovCiAJCV9fcmVzZXJ2ZWRfMgk6IDE1OwogCi0JdW5pb24gewkJc3RydWN0IHsgX191MzIKLQkJCQkJX19yZXNlcnZlZF8xCTogMjQsCi0JCQkJCXBoeXNpY2FsX2Rlc3QJOiAgNCwKLQkJCQkJX19yZXNlcnZlZF8yCTogIDQ7Ci0JCQl9IHBoeXNpY2FsOwotCi0JCQlzdHJ1Y3QgeyBfX3UzMgotCQkJCQlfX3Jlc2VydmVkXzEJOiAyNCwKLQkJCQkJbG9naWNhbF9kZXN0CTogIDg7Ci0JCQl9IGxvZ2ljYWw7Ci0JfSBkZXN0OwotCisJX191MzIJX19yZXNlcnZlZF8zCTogMjQsCisJCWRlc3QJCTogIDg7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tY2UuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tY2UuaAppbmRleCA1YTExMTQ2Li4xNzdlOTJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbWNlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21jZS5oCkBAIC0xMDMsNiArMTAzLDggQEAKIAogZXh0ZXJuIGF0b21pY190IG1jZV9lbnRyeTsKIAorZXh0ZXJuIHZvaWQgZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oCmluZGV4IGMzOGViZGYuLmZiNTU4ZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmgKQEAgLTExLDI0ICsxMSwyNSBAQAogCiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCi0vKiBTaG91bGQgcmVhbGx5IHN3aXRjaCB0byBkeW5hbWljIGFsbG9jYXRpb24gYXQgc29tZSBwb2ludCAqLwotI2RlZmluZSBOT0RFTUFQU0laRSAweDRmZmYKLQogLyogU2ltcGxlIHBlcmZlY3QgaGFzaCB0byBtYXAgcGh5c2ljYWwgYWRkcmVzc2VzIHRvIG5vZGUgbnVtYmVycyAqLwogc3RydWN0IG1lbW5vZGUgewogCWludCBzaGlmdDsKLQl1OCBtYXBbTk9ERU1BUFNJWkVdOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJdW5zaWduZWQgaW50IG1hcHNpemU7CisJdTggKm1hcDsKKwl1OCBlbWJlZGRlZF9tYXBbNjQtMTZdOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7IC8qIHRvdGFsIHNpemUgPSA2NCBieXRlcyAqLwogZXh0ZXJuIHN0cnVjdCBtZW1ub2RlIG1lbW5vZGU7CiAjZGVmaW5lIG1lbW5vZGVfc2hpZnQgbWVtbm9kZS5zaGlmdAogI2RlZmluZSBtZW1ub2RlbWFwIG1lbW5vZGUubWFwCisjZGVmaW5lIG1lbW5vZGVtYXBzaXplIG1lbW5vZGUubWFwc2l6ZQogCiBleHRlcm4gc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbXTsKIAogc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChwdXJlKSkgaW50IHBoeXNfdG9fbmlkKHVuc2lnbmVkIGxvbmcgYWRkcikgCiB7IAogCXVuc2lnbmVkIG5pZDsgCi0JVklSVFVBTF9CVUdfT04oKGFkZHIgPj4gbWVtbm9kZV9zaGlmdCkgPj0gTk9ERU1BUFNJWkUpOworCVZJUlRVQUxfQlVHX09OKCFtZW1ub2RlbWFwKTsKKwlWSVJUVUFMX0JVR19PTigoYWRkciA+PiBtZW1ub2RlX3NoaWZ0KSA+PSBtZW1ub2RlbWFwc2l6ZSk7CiAJbmlkID0gbWVtbm9kZW1hcFthZGRyID4+IG1lbW5vZGVfc2hpZnRdOyAKIAlWSVJUVUFMX0JVR19PTihuaWQgPj0gTUFYX05VTU5PREVTIHx8ICFub2RlX2RhdGFbbmlkXSk7IAogCXJldHVybiBuaWQ7IApAQCAtNDYsNSArNDcsMTAgQEAKIGV4dGVybiBpbnQgcGZuX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX05VTUFfRU1VCisjZGVmaW5lIEZBS0VfTk9ERV9NSU5fU0laRQkoNjQqMTAyNCoxMDI0KQorI2RlZmluZSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSwkofihGQUtFX05PREVfTUlOX1NJWkUgLSAxdWwpKQorI2VuZGlmCisKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbXV0ZXguaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tdXRleC5oCmluZGV4IDE2Mzk2YjEuLjZjMjk0OWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tdXRleC5oCkBAIC0yMSw3ICsyMSw3IEBACiAJdW5zaWduZWQgbG9uZyBkdW1teTsJCQkJCQlcCiAJCQkJCQkJCQlcCiAJdHlwZWNoZWNrKGF0b21pY190ICosIHYpOwkJCQkJXAotCXR5cGVjaGVja19mbihmYXN0Y2FsbCB2b2lkICgqKShhdG9taWNfdCAqKSwgZmFpbF9mbik7CQlcCisJdHlwZWNoZWNrX2ZuKHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCQlcCiAJCQkJCQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAogCQlMT0NLX1BSRUZJWCAiICAgZGVjbCAoJSVyZGkpCVxuIgkJCVwKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQKIF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwoYXRvbWljX3QgKmNvdW50LAotCQkJICAgICBpbnQgZmFzdGNhbGwgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKKwkJCSAgICAgaW50ICgqZmFpbF9mbikoYXRvbWljX3QgKikpCiB7CiAJaWYgKHVubGlrZWx5KGF0b21pY19kZWNfcmV0dXJuKGNvdW50KSA8IDApKQogCQlyZXR1cm4gZmFpbF9mbihjb3VudCk7CkBAIC02Nyw3ICs2Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBkdW1teTsJCQkJCQlcCiAJCQkJCQkJCQlcCiAJdHlwZWNoZWNrKGF0b21pY190ICosIHYpOwkJCQkJXAotCXR5cGVjaGVja19mbihmYXN0Y2FsbCB2b2lkICgqKShhdG9taWNfdCAqKSwgZmFpbF9mbik7CQlcCisJdHlwZWNoZWNrX2ZuKHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCQlcCiAJCQkJCQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAogCQlMT0NLX1BSRUZJWCAiICAgaW5jbCAoJSVyZGkpCVxuIgkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGdhbGxvYy5oCmluZGV4IDQzZDRjMzMuLjRlMjhiNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BnYWxsb2MuaApAQCAtMTgsMTEgKzE4LDYgQEAKIAlzZXRfcG1kKHBtZCwgX19wbWQoX1BBR0VfVEFCTEUgfCAocGFnZV90b19wZm4ocHRlKSA8PCBQQUdFX1NISUZUKSkpOwogfQogCi1zdGF0aWMgaW5saW5lIHBtZF90ICpnZXRfcG1kKHZvaWQpCi17Ci0JcmV0dXJuIChwbWRfdCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHBtZF9mcmVlKHBtZF90ICpwbWQpCiB7CiAJQlVHX09OKCh1bnNpZ25lZCBsb25nKXBtZCAmIChQQUdFX1NJWkUtMSkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmgKaW5kZXggNTk5MDFjNi4uNzMwYmQ2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGd0YWJsZS5oCkBAIC0zNTksMTUgKzM1OSw2IEBACiAjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQogI2RlZmluZSBta19wdGVfaHVnZShlbnRyeSkgKHB0ZV92YWwoZW50cnkpIHw9IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QU0UpCiAgCi0vKiBwaHlzaWNhbCBhZGRyZXNzIC0+IFBURSAqLwotc3RhdGljIGlubGluZSBwdGVfdCBta19wdGVfcGh5cyh1bnNpZ25lZCBsb25nIHBoeXNwYWdlLCBwZ3Byb3RfdCBwZ3Byb3QpCi17IAotCXB0ZV90IHB0ZTsKLQlwdGVfdmFsKHB0ZSkgPSBwaHlzcGFnZSB8IHBncHJvdF92YWwocGdwcm90KTsgCi0JcHRlX3ZhbChwdGUpICY9IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOwotCXJldHVybiBwdGU7IAotfQotIAogLyogQ2hhbmdlIGZsYWdzIG9mIGEgUFRFICovCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQogeyAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm90by5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3Byb3RvLmgKaW5kZXggYTZkMmZmNS4uZjU0ZjNhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3Byb3RvLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3Byb3RvLmgKQEAgLTQ1LDExICs0NSw3IEBACiAjZWxzZQogI2RlZmluZSBwbXRtcl9pb3BvcnQgMAogI2VuZGlmCi1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1vbm90b25pY19iYXNlOwotZXh0ZXJuIGludCBzeXNjdGxfdnN5c2NhbGw7CiBleHRlcm4gaW50IG5vaHBldDsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHZ4dGltZV9oejsKLWV4dGVybiB2b2lkIHRpbWVfaW5pdF9ndG9kKHZvaWQpOwogCiBleHRlcm4gdm9pZCBlYXJseV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsMSwyKSkpOwogCkBAIC05MSw4ICs4Nyw2IEBACiAKIGV4dGVybiBpbnQgdW5oYW5kbGVkX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHNpZyk7CiAKLWV4dGVybiBpbnQgdW5zeW5jaHJvbml6ZWRfdHNjKHZvaWQpOwotCiBleHRlcm4gdm9pZCBzZWxlY3RfaWRsZV9yb3V0aW5lKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRhYmxlX3N0YXJ0LCB0YWJsZV9lbmQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdGltZXguaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC90aW1leC5oCmluZGV4IGI5ZTUzMjAuLjhjNjgwOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC90aW1leC5oCkBAIC0xMiwzOCArMTIsMjEgQEAKICNpbmNsdWRlIDxhc20vaHBldC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3RzYy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCVBJVF9USUNLX1JBVEUJLyogVW5kZXJseWluZyBIWiAqLwogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBjeWNsZXNfdDsKLQotc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzICh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyByZXQ7Ci0KLQlyZHRzY2xsKHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogTGlrZSBnZXRfY3ljbGVzLCBidXQgbWFrZSBzdXJlIHRoZSBDUFUgaXMgc3luY2hyb25pemVkLiAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzX3N5bmModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGxvbmcgcmV0OwotCXVuc2lnbmVkIGVheDsKLQkvKiBEb24ndCBkbyBhbiBhZGRpdGlvbmFsIHN5bmMgb24gQ1BVcyB3aGVyZSB3ZSBrbm93Ci0JICAgUkRUU0MgaXMgYWxyZWFkeSBzeW5jaHJvbm91cy4gKi8KLQlhbHRlcm5hdGl2ZV9pbygiY3B1aWQiLCBBU01fTk9QMiwgWDg2X0ZFQVRVUkVfU1lOQ19SRFRTQywKLQkJCSAgIj1hIiAoZWF4KSwgIjAiICgxKSA6ICJlYngiLCJlY3giLCJlZHgiLCJtZW1vcnkiKTsKLQlyZHRzY2xsKHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotZXh0ZXJuIHVuc2lnbmVkIGludCBjcHVfa2h6OwotCiBleHRlcm4gaW50IHJlYWRfY3VycmVudF90aW1lcih1bnNpZ25lZCBsb25nICp0aW1lcl92YWx1ZSk7CiAjZGVmaW5lIEFSQ0hfSEFTX1JFQURfQ1VSUkVOVF9USU1FUgkxCiAKLWV4dGVybiBzdHJ1Y3Qgdnh0aW1lX2RhdGEgdnh0aW1lOworI2RlZmluZSBVU0VDX1BFUl9USUNLIChVU0VDX1BFUl9TRUMgLyBIWikKKyNkZWZpbmUgTlNFQ19QRVJfVElDSyAoTlNFQ19QRVJfU0VDIC8gSFopCisjZGVmaW5lIEZTRUNfUEVSX1RJQ0sgKEZTRUNfUEVSX1NFQyAvIEhaKQogCisjZGVmaW5lIE5TX1NDQUxFICAgICAgICAxMCAvKiAyXjEwLCBjYXJlZnVsbHkgY2hvc2VuICovCisjZGVmaW5lIFVTX1NDQUxFICAgICAgICAzMiAvKiAyXjMyLCBhcmJpdHJhbHJpbHkgY2hvc2VuICovCisKK2V4dGVybiB2b2lkIG1hcmtfdHNjX3Vuc3RhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0X2N5YzJuc19zY2FsZSh1bnNpZ25lZCBsb25nIGtoeik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90c2MuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC90c2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTBhMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3RzYy5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS14ODZfNjQvdHNjLmgKKyAqCisgKiB4ODZfNjQgVFNDIHJlbGF0ZWQgZnVuY3Rpb25zCisgKi8KKyNpZm5kZWYgX0FTTV94ODZfNjRfVFNDX0gKKyNkZWZpbmUgX0FTTV94ODZfNjRfVFNDX0gKKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworLyoKKyAqIFN0YW5kYXJkIHdheSB0byBhY2Nlc3MgdGhlIGN5Y2xlIGNvdW50ZXIuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGN5Y2xlc190OworCitleHRlcm4gdW5zaWduZWQgaW50IGNwdV9raHo7CitleHRlcm4gdW5zaWduZWQgaW50IHRzY19raHo7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyByZXQgPSAwOworCisjaWZuZGVmIENPTkZJR19YODZfVFNDCisJaWYgKCFjcHVfaGFzX3RzYykKKwkJcmV0dXJuIDA7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19YODZfVFNDKQorCXJkdHNjbGwocmV0KTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKKy8qIExpa2UgZ2V0X2N5Y2xlcywgYnV0IG1ha2Ugc3VyZSB0aGUgQ1BVIGlzIHN5bmNocm9uaXplZC4gKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlc19zeW5jKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHJldDsKKyNpZmRlZiBYODZfRkVBVFVSRV9TWU5DX1JEVFNDCisJdW5zaWduZWQgZWF4OworCisJLyoKKwkgKiBEb24ndCBkbyBhbiBhZGRpdGlvbmFsIHN5bmMgb24gQ1BVcyB3aGVyZSB3ZSBrbm93CisJICogUkRUU0MgaXMgYWxyZWFkeSBzeW5jaHJvbm91czoKKwkgKi8KKwlhbHRlcm5hdGl2ZV9pbygiY3B1aWQiLCBBU01fTk9QMiwgWDg2X0ZFQVRVUkVfU1lOQ19SRFRTQywKKwkJCSAgIj1hIiAoZWF4KSwgIjAiICgxKSA6ICJlYngiLCJlY3giLCJlZHgiLCJtZW1vcnkiKTsKKyNlbHNlCisJc3luY19jb3JlKCk7CisjZW5kaWYKKwlyZHRzY2xsKHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitleHRlcm4gdm9pZCB0c2NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG1hcmtfdHNjX3Vuc3RhYmxlKHZvaWQpOworZXh0ZXJuIGludCB1bnN5bmNocm9uaXplZF90c2Modm9pZCk7CisKKy8qCisgKiBCb290LXRpbWUgY2hlY2sgd2hldGhlciB0aGUgVFNDcyBhcmUgc3luY2hyb25pemVkIGFjcm9zcworICogYWxsIENQVXMvY29yZXM6CisgKi8KK2V4dGVybiB2b2lkIGNoZWNrX3RzY19zeW5jX3NvdXJjZShpbnQgY3B1KTsKK2V4dGVybiB2b2lkIGNoZWNrX3RzY19zeW5jX3RhcmdldCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3VhY2Nlc3MuaAppbmRleCA4MDc5ZTI5Li4xOTgxZjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmgKQEAgLTM2Nyw0ICszNjcsMTggQEAKIAlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKWRzdCwgc3JjLCBzaXplKTsKIH0KIAorI2RlZmluZSBBUkNIX0hBU19OT0NBQ0hFX1VBQ0NFU1MgMQorZXh0ZXJuIGxvbmcgX19jb3B5X3VzZXJfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUsIGludCB6ZXJvcmVzdCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fY29weV9mcm9tX3VzZXJfbm9jYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUpCit7CisJbWlnaHRfc2xlZXAoKTsKKwlyZXR1cm4gX19jb3B5X3VzZXJfbm9jYWNoZShkc3QsIChfX2ZvcmNlIHZvaWQgKilzcmMsIHNpemUsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBzaXplKQoreworCXJldHVybiBfX2NvcHlfdXNlcl9ub2NhY2hlKGRzdCwgKF9fZm9yY2Ugdm9pZCAqKXNyYywgc2l6ZSwgMCk7Cit9CisKICNlbmRpZiAvKiBfX1g4Nl82NF9VQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC92c3lzY2FsbC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmgKaW5kZXggMDVjYjhkZC4uODJiNGFmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmgKQEAgLTE2LDUxICsxNiwyNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CiAKLSNkZWZpbmUgX19zZWN0aW9uX3Z4dGltZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkLCBfX3NlY3Rpb25fXyAoIi52eHRpbWUiKSwgYWxpZ25lZCgxNikpKQogI2RlZmluZSBfX3NlY3Rpb25fdmdldGNwdV9tb2RlIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLnZnZXRjcHVfbW9kZSIpLCBhbGlnbmVkKDE2KSkpCiAjZGVmaW5lIF9fc2VjdGlvbl9qaWZmaWVzIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLmppZmZpZXMiKSwgYWxpZ25lZCgxNikpKQotI2RlZmluZSBfX3NlY3Rpb25fc3lzX3R6IF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLnN5c190eiIpLCBhbGlnbmVkKDE2KSkpCi0jZGVmaW5lIF9fc2VjdGlvbl9zeXNjdGxfdnN5c2NhbGwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18gKCIuc3lzY3RsX3ZzeXNjYWxsIiksIGFsaWduZWQoMTYpKSkKLSNkZWZpbmUgX19zZWN0aW9uX3h0aW1lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLnh0aW1lIiksIGFsaWduZWQoMTYpKSkKLSNkZWZpbmUgX19zZWN0aW9uX3h0aW1lX2xvY2sgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18gKCIueHRpbWVfbG9jayIpLCBhbGlnbmVkKDE2KSkpCiAKLSNkZWZpbmUgVlhUSU1FX1RTQwkxCi0jZGVmaW5lIFZYVElNRV9IUEVUCTIKLSNkZWZpbmUgVlhUSU1FX1BNVE1SCTMKKy8qIERlZmluaXRpb25zIGZvciBDT05GSUdfR0VORVJJQ19USU1FIGRlZmluaXRpb25zICovCisjZGVmaW5lIF9fc2VjdGlvbl92c3lzY2FsbF9ndG9kX2RhdGEgX19hdHRyaWJ1dGVfXyBcCisJKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLnZzeXNjYWxsX2d0b2RfZGF0YSIpLGFsaWduZWQoMTYpKSkKKyNkZWZpbmUgX192c3lzY2FsbF9mbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkLF9fc2VjdGlvbl9fKCIudnN5c2NhbGxfZm4iKSkpCiAKICNkZWZpbmUgVkdFVENQVV9SRFRTQ1AJMQogI2RlZmluZSBWR0VUQ1BVX0xTTAkyCiAKLXN0cnVjdCB2eHRpbWVfZGF0YSB7Ci0JbG9uZyBocGV0X2FkZHJlc3M7CS8qIEhQRVQgYmFzZSBhZGRyZXNzICovCi0JaW50IGxhc3Q7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3RzYzsKLQlsb25nIHF1b3Q7Ci0JbG9uZyB0c2NfcXVvdDsKLQlpbnQgbW9kZTsKLX07Ci0KICNkZWZpbmUgaHBldF9yZWFkbChhKSAgICAgICAgICAgcmVhZGwoKGNvbnN0IHZvaWQgX19pb21lbSAqKWZpeF90b192aXJ0KEZJWF9IUEVUX0JBU0UpICsgYSkKICNkZWZpbmUgaHBldF93cml0ZWwoZCxhKSAgICAgICAgd3JpdGVsKGQsICh2b2lkIF9faW9tZW0gKilmaXhfdG9fdmlydChGSVhfSFBFVF9CQVNFKSArIGEpCiAKLS8qIHZzeXNjYWxsIHNwYWNlIChyZWFkb25seSkgKi8KLWV4dGVybiBzdHJ1Y3Qgdnh0aW1lX2RhdGEgX192eHRpbWU7CiBleHRlcm4gaW50IF9fdmdldGNwdV9tb2RlOwotZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyBfX3h0aW1lOwogZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19qaWZmaWVzOwotZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBfX3N5c190ejsKLWV4dGVybiBzZXFsb2NrX3QgX194dGltZV9sb2NrOwogCiAvKiBrZXJuZWwgc3BhY2UgKHdyaXRlYWJsZSkgKi8KLWV4dGVybiBzdHJ1Y3Qgdnh0aW1lX2RhdGEgdnh0aW1lOwogZXh0ZXJuIGludCB2Z2V0Y3B1X21vZGU7CiBleHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKLWV4dGVybiBpbnQgc3lzY3RsX3ZzeXNjYWxsOwotZXh0ZXJuIHNlcWxvY2tfdCB4dGltZV9sb2NrOwotCi1leHRlcm4gaW50IHN5c2N0bF92c3lzY2FsbDsKLQotI2RlZmluZSBBUkNIX0hBVkVfWFRJTUVfTE9DSyAxCitleHRlcm4gc3RydWN0IHZzeXNjYWxsX2d0b2RfZGF0YV90IHZzeXNjYWxsX2d0b2RfZGF0YTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hY3BpLmggYi9pbmNsdWRlL2xpbnV4L2FjcGkuaAppbmRleCA4MTVmMWZiLi44YmNmYWE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FjcGkuaApAQCAtNzUsNyArNzUsNyBAQAogCiB0eXBlZGVmIGludCAoKmFjcGlfdGFibGVfaGFuZGxlcikgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUpOwogCi10eXBlZGVmIGludCAoKmFjcGlfbWFkdF9lbnRyeV9oYW5kbGVyKSAoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICpoZWFkZXIsIGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kKTsKK3R5cGVkZWYgaW50ICgqYWNwaV90YWJsZV9lbnRyeV9oYW5kbGVyKSAoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICpoZWFkZXIsIGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kKTsKIAogY2hhciAqIF9fYWNwaV9tYXBfdGFibGUgKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwogdW5zaWduZWQgbG9uZyBhY3BpX2ZpbmRfcnNkcCAodm9pZCk7CkBAIC04NSw4ICs4NSwxMCBAQAogCiBpbnQgYWNwaV90YWJsZV9pbml0ICh2b2lkKTsKIGludCBhY3BpX3RhYmxlX3BhcnNlIChjaGFyICppZCwgYWNwaV90YWJsZV9oYW5kbGVyIGhhbmRsZXIpOwotaW50IGFjcGlfdGFibGVfcGFyc2VfbWFkdCAoZW51bSBhY3BpX21hZHRfdHlwZSBpZCwgYWNwaV9tYWR0X2VudHJ5X2hhbmRsZXIgaGFuZGxlciwgdW5zaWduZWQgaW50IG1heF9lbnRyaWVzKTsKLWludCBhY3BpX3RhYmxlX3BhcnNlX3NyYXQgKGVudW0gYWNwaV9zcmF0X3R5cGUgaWQsIGFjcGlfbWFkdF9lbnRyeV9oYW5kbGVyIGhhbmRsZXIsIHVuc2lnbmVkIGludCBtYXhfZW50cmllcyk7CitpbnQgX19pbml0IGFjcGlfdGFibGVfcGFyc2VfZW50cmllcyhjaGFyICppZCwgdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplLAorCWludCBlbnRyeV9pZCwgYWNwaV90YWJsZV9lbnRyeV9oYW5kbGVyIGhhbmRsZXIsIHVuc2lnbmVkIGludCBtYXhfZW50cmllcyk7CitpbnQgYWNwaV90YWJsZV9wYXJzZV9tYWR0IChlbnVtIGFjcGlfbWFkdF90eXBlIGlkLCBhY3BpX3RhYmxlX2VudHJ5X2hhbmRsZXIgaGFuZGxlciwgdW5zaWduZWQgaW50IG1heF9lbnRyaWVzKTsKK2ludCBhY3BpX3RhYmxlX3BhcnNlX3NyYXQgKGVudW0gYWNwaV9zcmF0X3R5cGUgaWQsIGFjcGlfdGFibGVfZW50cnlfaGFuZGxlciBoYW5kbGVyLCB1bnNpZ25lZCBpbnQgbWF4X2VudHJpZXMpOwogaW50IGFjcGlfcGFyc2VfbWNmZyAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICpoZWFkZXIpOwogdm9pZCBhY3BpX3RhYmxlX3ByaW50X21hZHRfZW50cnkgKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqbWFkdCk7CiB2b2lkIGFjcGlfdGFibGVfcHJpbnRfc3JhdF9lbnRyeSAoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICpzcmF0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaV9wbXRtci5oIGIvaW5jbHVkZS9saW51eC9hY3BpX3BtdG1yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwZWYxYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaV9wbXRtci5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX0FDUElfUE1UTVJfSF8KKyNkZWZpbmUgX0FDUElfUE1UTVJfSF8KKworI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisKKy8qIE51bWJlciBvZiBQTVRNUiB0aWNrcyBleHBlY3RlZCBkdXJpbmcgY2FsaWJyYXRpb24gcnVuICovCisjZGVmaW5lIFBNVE1SX1RJQ0tTX1BFUl9TRUMgMzU3OTU0NQorCisvKiBsaW1pdCBpdCB0byAyNCBiaXRzICovCisjZGVmaW5lIEFDUElfUE1fTUFTSyBDTE9DS1NPVVJDRV9NQVNLKDI0KQorCisvKiBPdmVycnVuIHZhbHVlICovCisjZGVmaW5lIEFDUElfUE1fT1ZSUlVOCSgxPDwyNCkKKworI2lmZGVmIENPTkZJR19YODZfUE1fVElNRVIKKworZXh0ZXJuIHUzMiBhY3BpX3BtX3JlYWRfdmVyaWZpZWQodm9pZCk7CitleHRlcm4gdTMyIHBtdG1yX2lvcG9ydDsKKworc3RhdGljIGlubGluZSB1MzIgYWNwaV9wbV9yZWFkX2Vhcmx5KHZvaWQpCit7CisJaWYgKCFwbXRtcl9pb3BvcnQpCisJCXJldHVybiAwOworCS8qIG1hc2sgdGhlIG91dHB1dCB0byAyNCBiaXRzICovCisJcmV0dXJuIGFjcGlfcG1fcmVhZF92ZXJpZmllZCgpICYgQUNQSV9QTV9NQVNLOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHUzMiBhY3BpX3BtX3JlYWRfZWFybHkodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmggYi9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmgKaW5kZXggYTVjOGJiNS4uYWJjNTIxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZ3BfYmFja2VuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaApAQCAtODcsMTAgKzg3LDE1IEBACiAJdTMyIHBoeXNpY2FsOwogCXU4IGlzX2JvdW5kOwogCXU4IGlzX2ZsdXNoZWQ7CisgICAgICAgIHU4IHZtYWxsb2NfZmxhZzsKIH07CiAKICNkZWZpbmUgQUdQX05PUk1BTF9NRU1PUlkgMAogCisjZGVmaW5lIEFHUF9VU0VSX1RZUEVTICgxIDw8IDE2KQorI2RlZmluZSBBR1BfVVNFUl9NRU1PUlkgKEFHUF9VU0VSX1RZUEVTKQorI2RlZmluZSBBR1BfVVNFUl9DQUNIRURfTUVNT1JZIChBR1BfVVNFUl9UWVBFUyArIDEpCisKIGV4dGVybiBzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICphZ3BfYnJpZGdlOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYWdwX2JyaWRnZXM7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRhLmggYi9pbmNsdWRlL2xpbnV4L2F0YS5oCmluZGV4IDE4ZTQwMWYuLjI3MjczNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdGEuaApAQCAtMzUyLDcgKzM1Miw3IEBACiB7CiAJaWYgKGF0YV9pZF9tYWpvcl92ZXJzaW9uKGRldl9pZCkgPj0gNSAmJiBhdGFfaWRfaXNfc2F0YShkZXZfaWQpKQogCQlyZXR1cm4gMDsJLyogU0FUQSAqLwotCWlmIChkZXZfaWRbOTNdICYgMHg0MDAwKQorCWlmICgoZGV2X2lkWzkzXSAmIDB4RTAwMCkgPT0gMHg2MDAwKQogCQlyZXR1cm4gMDsJLyogODAgd2lyZSAqLwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1lbF9wZGMuaCBiL2luY2x1ZGUvbGludXgvYXRtZWxfcGRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1OGEzMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRtZWxfcGRjLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvYXRtZWxfcGRjLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5CisgKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKKyAqCisgKiBQZXJpcGhlcmFsIERhdGEgQ29udHJvbGxlciAoUERDKSByZWdpc3RlcnMuCisgKiBCYXNlZCBvbiBBVDkxUk05MjAwIGRhdGFzaGVldCByZXZpc2lvbiBFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBBVE1FTF9QRENfSAorI2RlZmluZSBBVE1FTF9QRENfSAorCisjZGVmaW5lIEFUTUVMX1BEQ19SUFIJCTB4MTAwCS8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBBVE1FTF9QRENfUkNSCQkweDEwNAkvKiBSZWNlaXZlIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVRNRUxfUERDX1RQUgkJMHgxMDgJLyogVHJhbnNtaXQgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBBVE1FTF9QRENfVENSCQkweDEwYwkvKiBUcmFuc21pdCBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUTUVMX1BEQ19STlBSCQkweDExMAkvKiBSZWNlaXZlIE5leHQgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBBVE1FTF9QRENfUk5DUgkJMHgxMTQJLyogUmVjZWl2ZSBOZXh0IENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVRNRUxfUERDX1ROUFIJCTB4MTE4CS8qIFRyYW5zbWl0IE5leHQgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBBVE1FTF9QRENfVE5DUgkJMHgxMWMJLyogVHJhbnNtaXQgTmV4dCBDb3VudGVyIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgQVRNRUxfUERDX1BUQ1IJCTB4MTIwCS8qIFRyYW5zZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUTUVMX1BEQ19SWFRFTgkJKDEgPDwgMCkJLyogUmVjZWl2ZXIgVHJhbnNmZXIgRW5hYmxlICovCisjZGVmaW5lCQlBVE1FTF9QRENfUlhURElTCSgxIDw8IDEpCS8qIFJlY2VpdmVyIFRyYW5zZmVyIERpc2FibGUgKi8KKyNkZWZpbmUJCUFUTUVMX1BEQ19UWFRFTgkJKDEgPDwgOCkJLyogVHJhbnNtaXR0ZXIgVHJhbnNmZXIgRW5hYmxlICovCisjZGVmaW5lCQlBVE1FTF9QRENfVFhURElTCSgxIDw8IDkpCS8qIFRyYW5zbWl0dGVyIFRyYW5zZmVyIERpc2FibGUgKi8KKworI2RlZmluZSBBVE1FTF9QRENfUFRTUgkJMHgxMjQJLyogVHJhbnNmZXIgU3RhdHVzIFJlZ2lzdGVyICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdWRpdC5oIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCmluZGV4IDBlMDdkYjYuLjIyOWZhMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXVkaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKQEAgLTg5LDYgKzg5LDcgQEAKICNkZWZpbmUgQVVESVRfTVFfTk9USUZZCQkxMzE0CS8qIFBPU0lYIE1RIG5vdGlmeSByZWNvcmQgdHlwZSAqLwogI2RlZmluZSBBVURJVF9NUV9HRVRTRVRBVFRSCTEzMTUJLyogUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUgKi8KICNkZWZpbmUgQVVESVRfS0VSTkVMX09USEVSCTEzMTYJLyogRm9yIHVzZSBieSAzcmQgcGFydHkgbW9kdWxlcyAqLworI2RlZmluZSBBVURJVF9GRF9QQUlSCQkxMzE3ICAgIC8qIGF1ZGl0IHJlY29yZCBmb3IgcGlwZS9zb2NrZXRwYWlyICovCiAKICNkZWZpbmUgQVVESVRfQVZDCQkxNDAwCS8qIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKi8KICNkZWZpbmUgQVVESVRfU0VMSU5VWF9FUlIJMTQwMQkvKiBJbnRlcm5hbCBTRSBMaW51eCBFcnJvcnMgKi8KQEAgLTM4Nyw2ICszODgsNyBAQAogZXh0ZXJuIGludCBhdWRpdF9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwogZXh0ZXJuIGludCBhdWRpdF9zb2NrZXRjYWxsKGludCBuYXJncywgdW5zaWduZWQgbG9uZyAqYXJncyk7CiBleHRlcm4gaW50IGF1ZGl0X3NvY2thZGRyKGludCBsZW4sIHZvaWQgKmFkZHIpOworZXh0ZXJuIGludCBfX2F1ZGl0X2ZkX3BhaXIoaW50IGZkMSwgaW50IGZkMik7CiBleHRlcm4gaW50IGF1ZGl0X2F2Y19wYXRoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHZmc21vdW50ICptbnQpOwogZXh0ZXJuIGludCBhdWRpdF9zZXRfbWFjeGF0dHIoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gaW50IF9fYXVkaXRfbXFfb3BlbihpbnQgb2ZsYWcsIG1vZGVfdCBtb2RlLCBzdHJ1Y3QgbXFfYXR0ciBfX3VzZXIgKnVfYXR0cik7CkBAIC00MDEsNiArNDAzLDEyIEBACiAJCXJldHVybiBfX2F1ZGl0X2lwY19vYmooaXBjcCk7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9mZF9wYWlyKGludCBmZDEsIGludCBmZDIpCit7CisJaWYgKHVubGlrZWx5KCFhdWRpdF9kdW1teV9jb250ZXh0KCkpKQorCQlyZXR1cm4gX19hdWRpdF9mZF9wYWlyKGZkMSwgZmQyKTsKKwlyZXR1cm4gMDsKK30KIHN0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2lwY19zZXRfcGVybSh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpKSkKQEAgLTQ1OSw2ICs0NjcsNyBAQAogI2RlZmluZSBhdWRpdF9pcGNfc2V0X3Blcm0ocSx1LGcsbSkgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfYnBybShwKSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9zb2NrZXRjYWxsKG4sYSkgKHsgMDsgfSkKKyNkZWZpbmUgYXVkaXRfZmRfcGFpcihuLGEpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X3NvY2thZGRyKGxlbiwgYWRkcikgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfYXZjX3BhdGgoZGVudHJ5LCBtbnQpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X3NldF9tYWN4YXR0cihuKSBkbyB7IDsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXV0b19mczQuaCBiL2luY2x1ZGUvbGludXgvYXV0b19mczQuaAppbmRleCAwYTZiYzUyLi4zMWEyOTU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1dG9fZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oCkBAIC01OSw2ICs1OSwxMyBAQAogCWNoYXIgbmFtZVtOQU1FX01BWCsxXTsKIH07CiAKK3VuaW9uIGF1dG9mc19wYWNrZXRfdW5pb24geworCXN0cnVjdCBhdXRvZnNfcGFja2V0X2hkciBoZHI7CisJc3RydWN0IGF1dG9mc19wYWNrZXRfbWlzc2luZyBtaXNzaW5nOworCXN0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZSBleHBpcmU7CisJc3RydWN0IGF1dG9mc19wYWNrZXRfZXhwaXJlX211bHRpIGV4cGlyZV9tdWx0aTsKK307CisKIC8qIGF1dG9mcyB2NSBjb21tb24gcGFja2V0IHN0cnVjdCAqLwogc3RydWN0IGF1dG9mc192NV9wYWNrZXQgewogCXN0cnVjdCBhdXRvZnNfcGFja2V0X2hkciBoZHI7CkBAIC03OCwxMiArODUsMTMgQEAKIHR5cGVkZWYgc3RydWN0IGF1dG9mc192NV9wYWNrZXQgYXV0b2ZzX3BhY2tldF9taXNzaW5nX2RpcmVjdF90OwogdHlwZWRlZiBzdHJ1Y3QgYXV0b2ZzX3Y1X3BhY2tldCBhdXRvZnNfcGFja2V0X2V4cGlyZV9kaXJlY3RfdDsKIAotdW5pb24gYXV0b2ZzX3BhY2tldF91bmlvbiB7Cit1bmlvbiBhdXRvZnNfdjVfcGFja2V0X3VuaW9uIHsKIAlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9oZHIgaGRyOwotCXN0cnVjdCBhdXRvZnNfcGFja2V0X21pc3NpbmcgbWlzc2luZzsKLQlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9leHBpcmUgZXhwaXJlOwotCXN0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZV9tdWx0aSBleHBpcmVfbXVsdGk7CiAJc3RydWN0IGF1dG9mc192NV9wYWNrZXQgdjVfcGFja2V0OworCWF1dG9mc19wYWNrZXRfbWlzc2luZ19pbmRpcmVjdF90IG1pc3NpbmdfaW5kaXJlY3Q7CisJYXV0b2ZzX3BhY2tldF9leHBpcmVfaW5kaXJlY3RfdCBleHBpcmVfaW5kaXJlY3Q7CisJYXV0b2ZzX3BhY2tldF9taXNzaW5nX2RpcmVjdF90IG1pc3NpbmdfZGlyZWN0OworCWF1dG9mc19wYWNrZXRfZXhwaXJlX2RpcmVjdF90IGV4cGlyZV9kaXJlY3Q7CiB9OwogCiAjZGVmaW5lIEFVVE9GU19JT0NfRVhQSVJFX01VTFRJCQlfSU9XKDB4OTMsMHg2NixpbnQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaAppbmRleCBhNWNmMWJlLi4xMDIzYmEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKQEAgLTksMTcgKzksMjggQEAKICNkZWZpbmUgX0xJTlVYX0JBQ0tMSUdIVF9ICiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKKy8qIE5vdGVzIG9uIGxvY2tpbmc6CisgKgorICogYmFja2xpZ2h0X2RldmljZS0+b3BzX2xvY2sgaXMgYW4gaW50ZXJuYWwgYmFja2xpZ2h0IGxvY2sgcHJvdGVjdGluZyB0aGUKKyAqIG9wcyBwb2ludGVyIGFuZCBubyBjb2RlIG91dHNpZGUgdGhlIGNvcmUgc2hvdWxkIG5lZWQgdG8gdG91Y2ggaXQuCisgKgorICogQWNjZXNzIHRvIHVwZGF0ZV9zdGF0dXMoKSBpcyBzZXJpYWxpc2VkIGJ5IHRoZSB1cGRhdGVfbG9jayBtdXRleCBzaW5jZQorICogbW9zdCBkcml2ZXJzIHNlZW0gdG8gbmVlZCB0aGlzIGFuZCBoaXN0b3JpY2FsbHkgZ2V0IGl0IHdyb25nLgorICoKKyAqIE1vc3QgZHJpdmVycyBkb24ndCBuZWVkIGxvY2tpbmcgb24gdGhlaXIgZ2V0X2JyaWdodG5lc3MoKSBtZXRob2QuCisgKiBJZiB5b3VycyBkb2VzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgaXQgaW4gdGhlIGRyaXZlci4gWW91IGNhbiB1c2UgdGhlCisgKiB1cGRhdGVfbG9jayBtdXRleCBpZiBhcHByb3ByaWF0ZS4KKyAqCisgKiBBbnkgb3RoZXIgdXNlIG9mIHRoZSBsb2NrcyBiZWxvdyBpcyBwcm9iYWJseSB3cm9uZy4KKyAqLworCiBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZTsKIHN0cnVjdCBmYl9pbmZvOwogCi0vKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGFsbCB0aGUgcHJvcGVydGllcyBvZiBhIGJhY2tsaWdodAotICAgKHVzdWFsbHkgYXR0YWNoZWQgdG8gYSBMQ0QpLiAqLwotc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHsKLQkvKiBPd25lciBtb2R1bGUgKi8KLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQorc3RydWN0IGJhY2tsaWdodF9vcHMgewogCS8qIE5vdGlmeSB0aGUgYmFja2xpZ2h0IGRyaXZlciBzb21lIHByb3BlcnR5IGhhcyBjaGFuZ2VkICovCiAJaW50ICgqdXBkYXRlX3N0YXR1cykoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKik7CiAJLyogUmV0dXJuIHRoZSBjdXJyZW50IGJhY2tsaWdodCBicmlnaHRuZXNzIChhY2NvdW50aW5nIGZvciBwb3dlciwKQEAgLTI4LDcgKzM5LDEwIEBACiAJLyogQ2hlY2sgaWYgZ2l2ZW4gZnJhbWVidWZmZXIgZGV2aWNlIGlzIHRoZSBvbmUgYm91bmQgdG8gdGhpcyBiYWNrbGlnaHQ7CiAJICAgcmV0dXJuIDAgaWYgbm90LCAhPTAgaWYgaXQgaXMuIElmIE5VTEwsIGJhY2tsaWdodCBhbHdheXMgbWF0Y2hlcyB0aGUgZmIuICovCiAJaW50ICgqY2hlY2tfZmIpKHN0cnVjdCBmYl9pbmZvICopOworfTsKIAorLyogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbGwgdGhlIHByb3BlcnRpZXMgb2YgYSBiYWNrbGlnaHQgKi8KK3N0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyB7CiAJLyogQ3VycmVudCBVc2VyIHJlcXVlc3RlZCBicmlnaHRuZXNzICgwIC0gbWF4X2JyaWdodG5lc3MpICovCiAJaW50IGJyaWdodG5lc3M7CiAJLyogTWF4aW1hbCB2YWx1ZSBmb3IgYnJpZ2h0bmVzcyAocmVhZC1vbmx5KSAqLwpAQCAtNDEsMjAgKzU1LDM0IEBACiB9OwogCiBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSB7Ci0JLyogVGhpcyBwcm90ZWN0cyB0aGUgJ3Byb3BzJyBmaWVsZC4gSWYgJ3Byb3BzJyBpcyBOVUxMLCB0aGUgZHJpdmVyIHRoYXQKKwkvKiBCYWNrbGlnaHQgcHJvcGVydGllcyAqLworCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKKworCS8qIFNlcmlhbGlzZSBhY2Nlc3MgdG8gdXBkYXRlX3N0YXR1cyBtZXRob2QgKi8KKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CisKKwkvKiBUaGlzIHByb3RlY3RzIHRoZSAnb3BzJyBmaWVsZC4gSWYgJ29wcycgaXMgTlVMTCwgdGhlIGRyaXZlciB0aGF0CiAJICAgcmVnaXN0ZXJlZCB0aGlzIGRldmljZSBoYXMgYmVlbiB1bmxvYWRlZCwgYW5kIGlmIGNsYXNzX2dldF9kZXZkYXRhKCkKIAkgICBwb2ludHMgdG8gc29tZXRoaW5nIGluIHRoZSBib2R5IG9mIHRoYXQgZHJpdmVyLCBpdCBpcyBhbHNvIGludmFsaWQuICovCi0Jc3RydWN0IHNlbWFwaG9yZSBzZW07Ci0JLyogSWYgdGhpcyBpcyBOVUxMLCB0aGUgYmFja2luZyBtb2R1bGUgaXMgdW5sb2FkZWQgKi8KLQlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgKnByb3BzOworCXN0cnVjdCBtdXRleCBvcHNfbG9jazsKKwlzdHJ1Y3QgYmFja2xpZ2h0X29wcyAqb3BzOworCiAJLyogVGhlIGZyYW1lYnVmZmVyIG5vdGlmaWVyIGJsb2NrICovCiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZiX25vdGlmOwogCS8qIFRoZSBjbGFzcyBkZXZpY2Ugc3RydWN0dXJlICovCiAJc3RydWN0IGNsYXNzX2RldmljZSBjbGFzc19kZXY7CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCW11dGV4X2xvY2soJmJkLT51cGRhdGVfbG9jayk7CisJaWYgKGJkLT5vcHMgJiYgYmQtPm9wcy0+dXBkYXRlX3N0YXR1cykKKwkJYmQtPm9wcy0+dXBkYXRlX3N0YXR1cyhiZCk7CisJbXV0ZXhfdW5sb2NrKCZiZC0+dXBkYXRlX2xvY2spOworfQorCiBleHRlcm4gc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwKLQlzdHJ1Y3QgZGV2aWNlICpkZXYsdm9pZCAqZGV2ZGF0YSxzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgKmJwKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRldmRhdGEsIHN0cnVjdCBiYWNrbGlnaHRfb3BzICpvcHMpOwogZXh0ZXJuIHZvaWQgYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCk7CiAKICNkZWZpbmUgdG9fYmFja2xpZ2h0X2RldmljZShvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlLCBjbGFzc19kZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCmluZGV4IGMxZTgyYzUuLjJkOTU2Y2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCkBAIC01OSw2ICs1OSw3IEBACiAJaW50ICgqbG9hZF9zaGxpYikoc3RydWN0IGZpbGUgKik7CiAJaW50ICgqY29yZV9kdW1wKShsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHN0cnVjdCBmaWxlICogZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBtaW5fY29yZWR1bXA7CS8qIG1pbmltYWwgZHVtcCBzaXplICovCisJaW50IGhhc3Zkc287CiB9OwogCiBleHRlcm4gaW50IHJlZ2lzdGVyX2JpbmZtdChzdHJ1Y3QgbGludXhfYmluZm10ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZHJvbS5oIGIvaW5jbHVkZS9saW51eC9jZHJvbS5oCmluZGV4IGJiYmU3YjQuLmY1MGYwNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2Ryb20uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nkcm9tLmgKQEAgLTkzOSw3ICs5MzksNyBAQAogCWludCBzcGVlZDsJCQkvKiBtYXhpbXVtIHNwZWVkIGZvciByZWFkaW5nIGRhdGEgKi8KIAlpbnQgY2FwYWNpdHk7CQkJLyogbnVtYmVyIG9mIGRpc2NzIGluIGp1a2Vib3ggKi8KIC8qIGRldmljZS1yZWxhdGVkIHN0b3JhZ2UgKi8KLQlpbnQgb3B0aW9ucwkJOiAzMDsJLyogb3B0aW9ucyBmbGFncyAqLworCXVuc2lnbmVkIGludCBvcHRpb25zCTogMzA7CS8qIG9wdGlvbnMgZmxhZ3MgKi8KIAl1bnNpZ25lZCBtY19mbGFncwk6IDI7CS8qIG1lZGlhIGNoYW5nZSBidWZmZXIgZmxhZ3MgKi8KICAgICAJaW50IHVzZV9jb3VudDsgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgdGltZXMgZGV2aWNlIG9wZW5lZCAqLwogICAgIAljaGFyIG5hbWVbMjBdOyAgICAgICAgICAgICAgICAgIC8qIG5hbWUgb2YgdGhlIGRldmljZSB0eXBlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NmYWcxMjg2NGIuaCBiL2luY2x1ZGUvbGludXgvY2ZhZzEyODY0Yi5oCmluZGV4IDBiYzQ1ZTYuLjE2MDVkZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2ZhZzEyODY0Yi5oCisrKyBiL2luY2x1ZGUvbGludXgvY2ZhZzEyODY0Yi5oCkBAIC03Myw1ICs3MywxMCBAQAogICovCiBleHRlcm4gdW5zaWduZWQgY2hhciBjZmFnMTI4NjRiX2lzZW5hYmxlZCh2b2lkKTsKIAorLyoKKyAqIElzIHRoZSBtb2R1bGUgaW5pdGVkPworICovCitleHRlcm4gdW5zaWduZWQgY2hhciBjZmFnMTI4NjRiX2lzaW5pdGVkKHZvaWQpOworCiAjZW5kaWYgLyogX0NGQUcxMjg2NEJfSF8gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja2NoaXBzLmggYi9pbmNsdWRlL2xpbnV4L2Nsb2NrY2hpcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWE3ZTdiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja2NoaXBzLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qICBsaW51eC9pbmNsdWRlL2xpbnV4L2Nsb2NrY2hpcHMuaAorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgY2xvY2tjaGlwcy4KKyAqCisgKiAgSWYgeW91IGFyZSBub3QgYSBjbG9ja2NoaXAsIG9yIHRoZSB0aW1lIG9mIGRheSBjb2RlLCB5b3Ugc2hvdWxkCisgKiAgbm90IGJlIGluY2x1ZGluZyB0aGlzIGZpbGUhCisgKi8KKyNpZm5kZWYgX0xJTlVYX0NMT0NLQ0hJUFNfSAorI2RlZmluZSBfTElOVVhfQ0xPQ0tDSElQU19ICisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUworCisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCitzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlOworCisvKiBDbG9jayBldmVudCBtb2RlIGNvbW1hbmRzICovCitlbnVtIGNsb2NrX2V2ZW50X21vZGUgeworCUNMT0NLX0VWVF9NT0RFX1VOVVNFRCA9IDAsCisJQ0xPQ0tfRVZUX01PREVfU0hVVERPV04sCisJQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMsCisJQ0xPQ0tfRVZUX01PREVfT05FU0hPVCwKK307CisKKy8qIENsb2NrIGV2ZW50IG5vdGlmaWNhdGlvbiB2YWx1ZXMgKi8KK2VudW0gY2xvY2tfZXZlbnRfbm9maXRpZXJzIHsKKwlDTE9DS19FVlRfTk9USUZZX0FERCwKKwlDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9PTiwKKwlDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9PRkYsCisJQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRU5URVIsCisJQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRVhJVCwKKwlDTE9DS19FVlRfTk9USUZZX1NVU1BFTkQsCisJQ0xPQ0tfRVZUX05PVElGWV9SRVNVTUUsCisJQ0xPQ0tfRVZUX05PVElGWV9DUFVfREVBRCwKK307CisKKy8qCisgKiBDbG9jayBldmVudCBmZWF0dXJlcworICovCisjZGVmaW5lIENMT0NLX0VWVF9GRUFUX1BFUklPRElDCQkweDAwMDAwMQorI2RlZmluZSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UCQkweDAwMDAwMgorLyoKKyAqIHg4Nig2NCkgc3BlY2lmaWMgbWlzZmVhdHVyZXM6CisgKgorICogLSBDbG9ja2V2ZW50IHNvdXJjZSBzdG9wcyBpbiBDMyBTdGF0ZSBhbmQgbmVlZHMgYnJvYWRjYXN0IHN1cHBvcnQuCisgKiAtIExvY2FsIEFQSUMgdGltZXIgaXMgdXNlZCBhcyBhIGR1bW15IGRldmljZS4KKyAqLworI2RlZmluZSBDTE9DS19FVlRfRkVBVF9DM1NUT1AJCTB4MDAwMDA0CisjZGVmaW5lIENMT0NLX0VWVF9GRUFUX0RVTU1ZCQkweDAwMDAwOAorCisvKioKKyAqIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgLSBjbG9jayBldmVudCBkZXZpY2UgZGVzY3JpcHRvcgorICogQG5hbWU6CQlwdHIgdG8gY2xvY2sgZXZlbnQgbmFtZQorICogQGhpbnRzOgkJdXNhZ2UgaGludHMKKyAqIEBtYXhfZGVsdGFfbnM6CW1heGltdW0gZGVsdGEgdmFsdWUgaW4gbnMKKyAqIEBtaW5fZGVsdGFfbnM6CW1pbmltdW0gZGVsdGEgdmFsdWUgaW4gbnMKKyAqIEBtdWx0OgkJbmFub3NlY29uZCB0byBjeWNsZXMgbXVsdGlwbGllcgorICogQHNoaWZ0OgkJbmFub3NlY29uZHMgdG8gY3ljbGVzIGRpdmlzb3IgKHBvd2VyIG9mIHR3bykKKyAqIEByYXRpbmc6CQl2YXJpYWJsZSB0byByYXRlIGNsb2NrIGV2ZW50IGRldmljZXMKKyAqIEBpcnE6CQlpcnEgbnVtYmVyIChvbmx5IGZvciBub24gY3B1IGxvY2FsIGRldmljZXMpCisgKiBAY3B1bWFzazoJCWNwdW1hc2sgdG8gaW5kaWNhdGUgZm9yIHdoaWNoIGNwdXMgdGhpcyBkZXZpY2Ugd29ya3MKKyAqIEBzZXRfbmV4dF9ldmVudDoJc2V0IG5leHQgZXZlbnQKKyAqIEBzZXRfbW9kZToJCXNldCBtb2RlIGZ1bmN0aW9uCisgKiBAZXZ0aGFuZGxlcjoJCUFzc2lnbmVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gYmUgY2FsbGVkIGJ5IHRoZSBsb3cKKyAqCQkJbGV2ZWwgaGFuZGxlciBvZiB0aGUgZXZlbnQgc291cmNlCisgKiBAYnJvYWRjYXN0OgkJZnVuY3Rpb24gdG8gYnJvYWRjYXN0IGV2ZW50cworICogQGxpc3Q6CQlsaXN0IGhlYWQgZm9yIHRoZSBtYW5hZ2VtZW50IGNvZGUKKyAqIEBtb2RlOgkJb3BlcmF0aW5nIG1vZGUgYXNzaWduZWQgYnkgdGhlIG1hbmFnZW1lbnQgY29kZQorICogQG5leHRfZXZlbnQ6CQlsb2NhbCBzdG9yYWdlIGZvciB0aGUgbmV4dCBldmVudCBpbiBvbmVzaG90IG1vZGUKKyAqLworc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSB7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJdW5zaWduZWQgaW50CQlmZWF0dXJlczsKKwl1bnNpZ25lZCBsb25nCQltYXhfZGVsdGFfbnM7CisJdW5zaWduZWQgbG9uZwkJbWluX2RlbHRhX25zOworCXVuc2lnbmVkIGxvbmcJCW11bHQ7CisJaW50CQkJc2hpZnQ7CisJaW50CQkJcmF0aW5nOworCWludAkJCWlycTsKKwljcHVtYXNrX3QJCWNwdW1hc2s7CisJaW50CQkJKCpzZXRfbmV4dF9ldmVudCkodW5zaWduZWQgbG9uZyBldnQsCisJCQkJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7CisJdm9pZAkJCSgqc2V0X21vZGUpKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKKwl2b2lkCQkJKCpldmVudF9oYW5kbGVyKShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICopOworCXZvaWQJCQkoKmJyb2FkY2FzdCkoY3B1bWFza190IG1hc2spOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwllbnVtIGNsb2NrX2V2ZW50X21vZGUJbW9kZTsKKwlrdGltZV90CQkJbmV4dF9ldmVudDsKK307CisKKy8qCisgKiBDYWxjdWxhdGUgYSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yIHNjYWxlZCBtYXRoLCB3aGljaCBpcyB1c2VkIHRvIGNvbnZlcnQKKyAqIG5hbm9zZWNvbmRzIGJhc2VkIHZhbHVlcyB0byBjbG9jayB0aWNrczoKKyAqCisgKiBjbG9ja190aWNrcyA9IChuYW5vc2Vjb25kcyAqIGZhY3RvcikgPj4gc2hpZnQuCisgKgorICogZGl2X3NjIGlzIHRoZSByZWFycmFuZ2VkIGVxdWF0aW9uIHRvIGNhbGN1bGF0ZSBhIGZhY3RvciBmcm9tIGEgZ2l2ZW4gY2xvY2sKKyAqIHRpY2tzIC8gbmFub3NlY29uZHMgcmF0aW86CisgKgorICogZmFjdG9yID0gKGNsb2NrX3RpY2tzIDw8IHNoaWZ0KSAvIG5hbm9zZWNvbmRzCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkaXZfc2ModW5zaWduZWQgbG9uZyB0aWNrcywgdW5zaWduZWQgbG9uZyBuc2VjLAorCQkJCSAgIGludCBzaGlmdCkKK3sKKwl1aW50NjRfdCB0bXAgPSAoKHVpbnQ2NF90KXRpY2tzKSA8PCBzaGlmdDsKKworCWRvX2Rpdih0bXAsIG5zZWMpOworCXJldHVybiAodW5zaWduZWQgbG9uZykgdG1wOworfQorCisvKiBDbG9jayBldmVudCBsYXllciBmdW5jdGlvbnMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGNsb2NrZXZlbnRfZGVsdGEybnModW5zaWduZWQgbG9uZyBsYXRjaCwKKwkJCQkJIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7CitleHRlcm4gdm9pZCBjbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKKworZXh0ZXJuIHZvaWQgY2xvY2tldmVudHNfZXhjaGFuZ2VfZGV2aWNlKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKm9sZCwKKwkJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbmV3KTsKK2V4dGVybgorc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2xvY2tldmVudHNfcmVxdWVzdF9kZXZpY2UodW5zaWduZWQgaW50IGZlYXR1cmVzLAorCQkJCQkJICAgICAgY3B1bWFza190IGNwdW1hc2spOworZXh0ZXJuIHZvaWQgY2xvY2tldmVudHNfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGNsb2NrZXZlbnRzX3NldF9tb2RlKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiwKKwkJCQkgZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUpOworZXh0ZXJuIGludCBjbG9ja2V2ZW50c19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiB2b2lkIGNsb2NrZXZlbnRzX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IGNsb2NrZXZlbnRzX3Byb2dyYW1fZXZlbnQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LAorCQkJCSAgICAga3RpbWVfdCBleHBpcmVzLCBrdGltZV90IG5vdyk7CisKK2V4dGVybiB2b2lkIGNsb2NrZXZlbnRzX25vdGlmeSh1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqYXJnKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGNsb2NrZXZlbnRzX3Jlc3VtZV9ldmVudHModm9pZCkgeyB9CisjZGVmaW5lIGNsb2NrZXZlbnRzX25vdGlmeShyZWFzb24sIGFyZykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmggYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKaW5kZXggMTYyMmQyMy4uZGFhNDk0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaApAQCAtMTIsMTEgKzEyLDEzIEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIGNsb2Nrc291cmNlIGN5Y2xlIGJhc2UgdHlwZSAqLwogdHlwZWRlZiB1NjQgY3ljbGVfdDsKK3N0cnVjdCBjbG9ja3NvdXJjZTsKIAogLyoqCiAgKiBzdHJ1Y3QgY2xvY2tzb3VyY2UgLSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBmb3IgYSBmcmVlIHJ1bm5pbmcgY291bnRlcgpAQCAtNDQsOCArNDYsOCBAQAogICoJCQlzdWJ0cmFjdGlvbiBvZiBub24gNjQgYml0IGNvdW50ZXJzCiAgKiBAbXVsdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllcgogICogQHNoaWZ0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBkaXZpc29yIChwb3dlciBvZiB0d28pCi0gKiBAdXBkYXRlX2NhbGxiYWNrOgljYWxsZWQgd2hlbiBzYWZlIHRvIGFsdGVyIGNsb2Nrc291cmNlIHZhbHVlcwotICogQGlzX2NvbnRpbnVvdXM6CWRlZmluZXMgaWYgY2xvY2tzb3VyY2UgaXMgZnJlZS1ydW5uaW5nLgorICogQGZsYWdzOgkJZmxhZ3MgZGVzY3JpYmluZyBzcGVjaWFsIHByb3BlcnRpZXMKKyAqIEB2cmVhZDoJCXZzeXNjYWxsIGJhc2VkIHJlYWQKICAqIEBjeWNsZV9pbnRlcnZhbDoJVXNlZCBpbnRlcm5hbGx5IGJ5IHRpbWVrZWVwaW5nIGNvcmUsIHBsZWFzZSBpZ25vcmUuCiAgKiBAeHRpbWVfaW50ZXJ2YWw6CVVzZWQgaW50ZXJuYWxseSBieSB0aW1la2VlcGluZyBjb3JlLCBwbGVhc2UgaWdub3JlLgogICovCkBAIC01NywxNSArNTksMzAgQEAKIAljeWNsZV90IG1hc2s7CiAJdTMyIG11bHQ7CiAJdTMyIHNoaWZ0OwotCWludCAoKnVwZGF0ZV9jYWxsYmFjaykodm9pZCk7Ci0JaW50IGlzX2NvbnRpbnVvdXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljeWNsZV90ICgqdnJlYWQpKHZvaWQpOwogCiAJLyogdGltZWtlZXBpbmcgc3BlY2lmaWMgZGF0YSwgaWdub3JlICovCiAJY3ljbGVfdCBjeWNsZV9sYXN0LCBjeWNsZV9pbnRlcnZhbDsKIAl1NjQgeHRpbWVfbnNlYywgeHRpbWVfaW50ZXJ2YWw7CiAJczY0IGVycm9yOworCisjaWZkZWYgQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9HCisJLyogV2F0Y2hkb2cgcmVsYXRlZCBkYXRhLCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHdkX2xpc3Q7CisJY3ljbGVfdCB3ZF9sYXN0OworI2VuZGlmCiB9OwogCisvKgorICogQ2xvY2sgc291cmNlIGZsYWdzIGJpdHM6OgorICovCisjZGVmaW5lIENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTCQkweDAxCisjZGVmaW5lIENMT0NLX1NPVVJDRV9NVVNUX1ZFUklGWQkJMHgwMgorCisjZGVmaW5lIENMT0NLX1NPVVJDRV9XQVRDSERPRwkJCTB4MTAKKyNkZWZpbmUgQ0xPQ0tfU09VUkNFX1ZBTElEX0ZPUl9IUkVTCQkweDIwCisKIC8qIHNpbXBsaWZ5IGluaXRpYWxpemF0aW9uIG9mIG1hc2sgZmllbGQgKi8KICNkZWZpbmUgQ0xPQ0tTT1VSQ0VfTUFTSyhiaXRzKSAoY3ljbGVfdCkoYml0czw2NCA/ICgoMVVMTDw8Yml0cyktMSkgOiAtMSkKIApAQCAtMTc4LDggKzE5NSwxNiBAQAogCiAKIC8qIHVzZWQgdG8gaW5zdGFsbCBhIG5ldyBjbG9ja3NvdXJjZSAqLwotaW50IGNsb2Nrc291cmNlX3JlZ2lzdGVyKHN0cnVjdCBjbG9ja3NvdXJjZSopOwotdm9pZCBjbG9ja3NvdXJjZV9yZXNlbGVjdCh2b2lkKTsKLXN0cnVjdCBjbG9ja3NvdXJjZSogY2xvY2tzb3VyY2VfZ2V0X25leHQodm9pZCk7CitleHRlcm4gaW50IGNsb2Nrc291cmNlX3JlZ2lzdGVyKHN0cnVjdCBjbG9ja3NvdXJjZSopOworZXh0ZXJuIHN0cnVjdCBjbG9ja3NvdXJjZSogY2xvY2tzb3VyY2VfZ2V0X25leHQodm9pZCk7CitleHRlcm4gdm9pZCBjbG9ja3NvdXJjZV9jaGFuZ2VfcmF0aW5nKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIGludCByYXRpbmcpOworCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTAorZXh0ZXJuIHZvaWQgdXBkYXRlX3ZzeXNjYWxsKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCBjbG9ja3NvdXJjZSAqYyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKnRzLCBzdHJ1Y3QgY2xvY2tzb3VyY2UgKmMpCit7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9DTE9DS1NPVVJDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaCBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCmluZGV4IDdmMDA4ZjYuLjA4OTllMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCkBAIC04NCw5ICs4NCw2IEBACiAgICAgICAgIHVuc2lnbmVkIGludAkJcG9saWN5OyAvKiBzZWUgYWJvdmUgKi8KIAlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vcgkqZ292ZXJub3I7IC8qIHNlZSBiZWxvdyAqLwogCi0gCXN0cnVjdCBtdXRleAkJbG9jazsgICAvKiBDUFUgLT5zZXRwb2xpY3kgb3IgLT50YXJnZXQgbWF5Ci0JCQkJCSAgIG9ubHkgYmUgY2FsbGVkIG9uY2UgYSB0aW1lICovCi0KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdXBkYXRlOyAvKiBpZiB1cGRhdGVfcG9saWN5KCkgbmVlZHMgdG8gYmUKIAkJCQkJICogY2FsbGVkLCBidXQgeW91J3JlIGluIElSUSBjb250ZXh0ICovCiAKQEAgLTE3MiwxMSArMTY5LDE2IEBACiAJCQkJICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKTsKIAogCi1leHRlcm4gaW50IGNwdWZyZXFfZHJpdmVyX2dldGF2ZyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CitleHRlcm4gaW50IF9fY3B1ZnJlcV9kcml2ZXJfZ2V0YXZnKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KTsKIAogaW50IGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKmdvdmVybm9yKTsKIHZvaWQgY3B1ZnJlcV91bnJlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpnb3Zlcm5vcik7CiAKK2ludCBsb2NrX3BvbGljeV9yd3NlbV9yZWFkKGludCBjcHUpOworaW50IGxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGludCBjcHUpOwordm9pZCB1bmxvY2tfcG9saWN5X3J3c2VtX3JlYWQoaW50IGNwdSk7Cit2b2lkIHVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoaW50IGNwdSk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgQ1BVRlJFUSBEUklWRVIgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVtYXNrLmggYi9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaAppbmRleCBkMGU4YzhiLi4yM2Y1NTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaApAQCAtMzk4LDExICszOTgsMTEgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NNUAotaW50IGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKHZvaWQpOworZXh0ZXJuIGludCBucl9jcHVfaWRzOwogI2RlZmluZSBhbnlfb25saW5lX2NwdShtYXNrKSBfX2FueV9vbmxpbmVfY3B1KCYobWFzaykpCiBpbnQgX19hbnlfb25saW5lX2NwdShjb25zdCBjcHVtYXNrX3QgKm1hc2spOwogI2Vsc2UKLSNkZWZpbmUgaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKQkwCisjZGVmaW5lIG5yX2NwdV9pZHMJCQkxCiAjZGVmaW5lIGFueV9vbmxpbmVfY3B1KG1hc2spCQkwCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmggYi9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaAppbmRleCAwNDc1NjdkLi45ZmEwOTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaApAQCAtMzMsNiArMzMsOSBAQAogCiBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50KTsKIAorc3RydWN0IGRlbnRyeSAqZGVidWdmc19jcmVhdGVfc3ltbGluayhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJICAgICAgY29uc3QgY2hhciAqZGVzdCk7CisKIHZvaWQgZGVidWdmc19yZW1vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAogc3RydWN0IGRlbnRyeSAqZGVidWdmc19jcmVhdGVfdTgoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCkBAIC03MCw2ICs3MywxMyBAQAogCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJCQkgICAgY29uc3QgY2hhciAqZGVzdCkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGRlYnVnZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCAyNmU0NjkyLi5kMWEzYTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBkZXZpY2UuaCAtIGdlbmVyaWMsIGNlbnRyYWxpemVkIGRyaXZlciBtb2RlbAogICoKICAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAzIFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNyBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIKICAqCkBAIC0xMDEsNyArMTAyLDcgQEAKICNkZWZpbmUgQlVTX05PVElGWV9VTkJJTkRfRFJJVkVSCTB4MDAwMDAwMDQgLyogZHJpdmVyIGFib3V0IHRvIGJlCiAJCQkJCQkgICAgICB1bmJvdW5kICovCiAKLS8qIGRyaXZlcmZzIGludGVyZmFjZSBmb3IgZXhwb3J0aW5nIGJ1cyBhdHRyaWJ1dGVzICovCisvKiBzeXNmcyBpbnRlcmZhY2UgZm9yIGV4cG9ydGluZyBidXMgYXR0cmlidXRlcyAqLwogCiBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSB7CiAJc3RydWN0IGF0dHJpYnV0ZQlhdHRyOwpAQCAtMTQ2LDcgKzE0Nyw3IEBACiBleHRlcm4gc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcl9maW5kKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBidXNfdHlwZSAqYnVzKTsKIGV4dGVybiBpbnQgZHJpdmVyX3Byb2JlX2RvbmUodm9pZCk7CiAKLS8qIGRyaXZlcmZzIGludGVyZmFjZSBmb3IgZXhwb3J0aW5nIGRyaXZlciBhdHRyaWJ1dGVzICovCisvKiBzeXNmcyBpbnRlcmZhY2UgZm9yIGV4cG9ydGluZyBkcml2ZXIgYXR0cmlidXRlcyAqLwogCiBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSB7CiAJc3RydWN0IGF0dHJpYnV0ZQlhdHRyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQ0X2ZzX2V4dGVudHMuaCBiL2luY2x1ZGUvbGludXgvZXh0NF9mc19leHRlbnRzLmgKaW5kZXggYTQxY2MyNC4uN2ViMWQ3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQ0X2ZzX2V4dGVudHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfZXh0ZW50cy5oCkBAIC0yMiwxMiArMjIsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9leHQ0X2ZzLmg+CiAKIC8qCi0gKiBXaXRoIEFHUkVTU0lWRV9URVNUIGRlZmluZWQsIHRoZSBjYXBhY2l0eSBvZiBpbmRleC9sZWFmIGJsb2NrcworICogV2l0aCBBR0dSRVNTSVZFX1RFU1QgZGVmaW5lZCwgdGhlIGNhcGFjaXR5IG9mIGluZGV4L2xlYWYgYmxvY2tzCiAgKiBiZWNvbWVzIHZlcnkgc21hbGwsIHNvIGluZGV4IHNwbGl0LCBpbi1kZXB0aCBncm93aW5nIGFuZAogICogb3RoZXIgaGFyZCBjaGFuZ2VzIGhhcHBlbiBtdWNoIG1vcmUgb2Z0ZW4uCiAgKiBUaGlzIGlzIGZvciBkZWJ1ZyBwdXJwb3NlcyBvbmx5LgogICovCi0jZGVmaW5lIEFHUkVTU0lWRV9URVNUXworI2RlZmluZSBBR0dSRVNTSVZFX1RFU1RfCiAKIC8qCiAgKiBXaXRoIEVYVEVOVFNfU1RBVFMgZGVmaW5lZCwgdGhlIG51bWJlciBvZiBibG9ja3MgYW5kIGV4dGVudHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCBhNzhlMjU2Li5iZTkxM2VjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC01MTYsMTMgKzUxNiwxNSBAQAogI2RlZmluZSBGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAgICAgICAgIDB4MDcKIC8qICAgICAgQ09OU09MRS1TUEVDSUZJQzogc2V0IGNvbnNvbGUgdG8gZnJhbWVidWZmZXIgbWFwcGluZyAqLwogI2RlZmluZSBGQl9FVkVOVF9TRVRfQ09OU09MRV9NQVAgICAgICAgIDB4MDgKLS8qICAgICAgQSBkaXNwbGF5IGJsYW5rIGlzIHJlcXVlc3RlZCAgICAgICAqLworLyogICAgICBBIGhhcmR3YXJlIGRpc3BsYXkgYmxhbmsgY2hhbmdlIG9jY3VyZWQgKi8KICNkZWZpbmUgRkJfRVZFTlRfQkxBTksgICAgICAgICAgICAgICAgICAweDA5CiAvKiAgICAgIFByaXZhdGUgbW9kZWxpc3QgaXMgdG8gYmUgcmVwbGFjZWQgKi8KICNkZWZpbmUgRkJfRVZFTlRfTkVXX01PREVMSVNUICAgICAgICAgICAweDBBCiAvKglUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcGFzc2VkIGluIGZiX2luZm8gYWJvdXQgdG8gY2hhbmdlIGFuZAogICAgICAgICBhbGwgdmMncyBzaG91bGQgYmUgY2hhbmdlZCAgICAgICAgICovCiAjZGVmaW5lIEZCX0VWRU5UX01PREVfQ0hBTkdFX0FMTAkweDBCCisvKglBIHNvZnR3YXJlIGRpc3BsYXkgYmxhbmsgY2hhbmdlIG9jY3VyZWQgKi8KKyNkZWZpbmUgRkJfRVZFTlRfQ09OQkxBTksgICAgICAgICAgICAgICAweDBDCiAKIHN0cnVjdCBmYl9ldmVudCB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CkBAIC03NjcsMTYgKzc2OSwxMyBAQAogCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CS8qIGN1cnJlbnQgbW9kZSAqLwogCiAjaWZkZWYgQ09ORklHX0ZCX0JBQ0tMSUdIVAotCS8qIExvY2sgb3JkZXJpbmc6Ci0JICogYmxfbXV0ZXggKHByb3RlY3RzIGJsX2RldiBhbmQgYmxfY3VydmUpCi0JICogICBibF9kZXYtPnNlbSAoYmFja2xpZ2h0IGNsYXNzKQotCSAqLwotCXN0cnVjdCBtdXRleCBibF9tdXRleDsKLQogCS8qIGFzc2lnbmVkIGJhY2tsaWdodCBkZXZpY2UgKi8KKwkvKiBzZXQgYmVmb3JlIGZyYW1lYnVmZmVyIHJlZ2lzdHJhdGlvbiwgCisJICAgcmVtb3ZlIGFmdGVyIHVucmVnaXN0ZXIgKi8KIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxfZGV2OwogCiAJLyogQmFja2xpZ2h0IGxldmVsIGN1cnZlICovCisJc3RydWN0IG11dGV4IGJsX2N1cnZlX211dGV4OwkKIAl1OCBibF9jdXJ2ZVtGQl9CQUNLTElHSFRfTEVWRUxTXTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaCBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCmluZGV4IDYxMjQ3MmEuLjc4MDMwMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCkBAIC0xMDYsNyArMTA2LDcgQEAKICAqIGFsd2F5cyBiYWxhbmNlZCwgc28gdGhlIGludGVycnVwdGVkIHZhbHVlIG9mIC0+aGFyZGlycV9jb250ZXh0CiAgKiB3aWxsIGFsd2F5cyBiZSByZXN0b3JlZC4KICAqLwotI2RlZmluZSBpcnFfZW50ZXIoKQkJCQkJXAorI2RlZmluZSBfX2lycV9lbnRlcigpCQkJCQlcCiAJZG8gewkJCQkJCVwKIAkJYWNjb3VudF9zeXN0ZW1fdnRpbWUoY3VycmVudCk7CQlcCiAJCWFkZF9wcmVlbXB0X2NvdW50KEhBUkRJUlFfT0ZGU0VUKTsJXApAQCAtMTE0LDYgKzExNCwxMSBAQAogCX0gd2hpbGUgKDApCiAKIC8qCisgKiBFbnRlciBpcnEgY29udGV4dCAob24gTk9fSFosIHVwZGF0ZSBqaWZmaWVzKToKKyAqLworZXh0ZXJuIHZvaWQgaXJxX2VudGVyKHZvaWQpOworCisvKgogICogRXhpdCBpcnEgY29udGV4dCB3aXRob3V0IHByb2Nlc3Npbmcgc29mdGlycXM6CiAgKi8KICNkZWZpbmUgX19pcnFfZXhpdCgpCQkJCQlcCkBAIC0xMjgsNyArMTMzLDcgQEAKICAqLwogZXh0ZXJuIHZvaWQgaXJxX2V4aXQodm9pZCk7CiAKLSNkZWZpbmUgbm1pX2VudGVyKCkJCWRvIHsgbG9ja2RlcF9vZmYoKTsgaXJxX2VudGVyKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG5taV9lbnRlcigpCQlkbyB7IGxvY2tkZXBfb2ZmKCk7IF9faXJxX2VudGVyKCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIG5taV9leGl0KCkJCWRvIHsgX19pcnFfZXhpdCgpOyBsb2NrZGVwX29uKCk7IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBMSU5VWF9IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKaW5kZXggZmNhOTMwMi4uMzdmOTI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKQEAgLTIxLDIyICsyMSw3MiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKK3N0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2U7CitzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZTsKKwogLyoKICAqIE1vZGUgYXJndW1lbnRzIG9mIHh4eF9ocnRpbWVyIGZ1bmN0aW9uczoKICAqLwogZW51bSBocnRpbWVyX21vZGUgewotCUhSVElNRVJfQUJTLAkvKiBUaW1lIHZhbHVlIGlzIGFic29sdXRlICovCi0JSFJUSU1FUl9SRUwsCS8qIFRpbWUgdmFsdWUgaXMgcmVsYXRpdmUgdG8gbm93ICovCisJSFJUSU1FUl9NT0RFX0FCUywJLyogVGltZSB2YWx1ZSBpcyBhYnNvbHV0ZSAqLworCUhSVElNRVJfTU9ERV9SRUwsCS8qIFRpbWUgdmFsdWUgaXMgcmVsYXRpdmUgdG8gbm93ICovCiB9OwogCisvKgorICogUmV0dXJuIHZhbHVlcyBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKi8KIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHsKLQlIUlRJTUVSX05PUkVTVEFSVCwKLQlIUlRJTUVSX1JFU1RBUlQsCisJSFJUSU1FUl9OT1JFU1RBUlQsCS8qIFRpbWVyIGlzIG5vdCByZXN0YXJ0ZWQgKi8KKwlIUlRJTUVSX1JFU1RBUlQsCS8qIFRpbWVyIG11c3QgYmUgcmVzdGFydGVkICovCiB9OwogCi0jZGVmaW5lIEhSVElNRVJfSU5BQ1RJVkUJKCh2b2lkICopMVVMKQorLyoKKyAqIGhydGltZXIgY2FsbGJhY2sgbW9kZXM6CisgKgorICoJSFJUSU1FUl9DQl9TT0ZUSVJROgkJQ2FsbGJhY2sgbXVzdCBydW4gaW4gc29mdGlycSBjb250ZXh0CisgKglIUlRJTUVSX0NCX0lSUVNBRkU6CQlDYWxsYmFjayBtYXkgcnVuIGluIGhhcmRpcnEgY29udGV4dAorICoJSFJUSU1FUl9DQl9JUlFTQUZFX05PX1JFU1RBUlQ6CUNhbGxiYWNrIG1heSBydW4gaW4gaGFyZGlycSBjb250ZXh0IGFuZAorICoJCQkJCWRvZXMgbm90IHJlc3RhcnQgdGhlIHRpbWVyCisgKglIUlRJTUVSX0NCX0lSUVNBRkVfTk9fU09GVElSUToJQ2FsbGJhY2sgbXVzdCBydW4gaW4gc29mdGlycSBjb250ZXh0CisgKgkJCQkJU3BlY2lhbCBtb2RlIGZvciB0aWNrIGVtdWx0YXRpb24KKyAqLworZW51bSBocnRpbWVyX2NiX21vZGUgeworCUhSVElNRVJfQ0JfU09GVElSUSwKKwlIUlRJTUVSX0NCX0lSUVNBRkUsCisJSFJUSU1FUl9DQl9JUlFTQUZFX05PX1JFU1RBUlQsCisJSFJUSU1FUl9DQl9JUlFTQUZFX05PX1NPRlRJUlEsCit9OwogCi1zdHJ1Y3QgaHJ0aW1lcl9iYXNlOworLyoKKyAqIFZhbHVlcyB0byB0cmFjayBzdGF0ZSBvZiB0aGUgdGltZXIKKyAqCisgKiBQb3NzaWJsZSBzdGF0ZXM6CisgKgorICogMHgwMAkJaW5hY3RpdmUKKyAqIDB4MDEJCWVucXVldWVkIGludG8gcmJ0cmVlCisgKiAweDAyCQljYWxsYmFjayBmdW5jdGlvbiBydW5uaW5nCisgKiAweDA0CQljYWxsYmFjayBwZW5kaW5nIChoaWdoIHJlc29sdXRpb24gbW9kZSkKKyAqCisgKiBTcGVjaWFsIGNhc2U6CisgKiAweDAzCQljYWxsYmFjayBmdW5jdGlvbiBydW5uaW5nIGFuZCBlbnF1ZXVlZAorICoJCSh3YXMgcmVxdWV1ZWQgb24gYW5vdGhlciBDUFUpCisgKiBUaGUgImNhbGxiYWNrIGZ1bmN0aW9uIHJ1bm5pbmcgYW5kIGVucXVldWVkIiBzdGF0dXMgaXMgb25seSBwb3NzaWJsZSBvbgorICogU01QLiBJdCBoYXBwZW5zIGZvciBleGFtcGxlIHdoZW4gYSBwb3NpeCB0aW1lciBleHBpcmVkIGFuZCB0aGUgY2FsbGJhY2sKKyAqIHF1ZXVlZCBhIHNpZ25hbC4gQmV0d2VlbiBkcm9wcGluZyB0aGUgbG9jayB3aGljaCBwcm90ZWN0cyB0aGUgcG9zaXggdGltZXIKKyAqIGFuZCByZWFjcXVpcmluZyB0aGUgYmFzZSBsb2NrIG9mIHRoZSBocnRpbWVyLCBhbm90aGVyIENQVSBjYW4gZGVsaXZlciB0aGUKKyAqIHNpZ25hbCBhbmQgcmVhcm0gdGhlIHRpbWVyLiBXZSBoYXZlIHRvIHByZXNlcnZlIHRoZSBjYWxsYmFjayBydW5uaW5nIHN0YXRlLAorICogYXMgb3RoZXJ3aXNlIHRoZSB0aW1lciBjb3VsZCBiZSByZW1vdmVkIGJlZm9yZSB0aGUgc29mdGlycSBjb2RlIGZpbmlzaGVzIHRoZQorICogdGhlIGhhbmRsaW5nIG9mIHRoZSB0aW1lci4KKyAqCisgKiBUaGUgSFJUSU1FUl9TVEFURV9FTlFVRVVFIGJpdCBpcyBhbHdheXMgb3InZWQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgdG8KKyAqIHByZXNlcnZlIHRoZSBIUlRJTUVSX1NUQVRFX0NBTExCQUNLIGJpdCBpbiB0aGUgYWJvdmUgc2NlbmFyaW8uCisgKgorICogQWxsIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBwcm90ZWN0ZWQgYnkgY3B1X2Jhc2UtPmxvY2suCisgKi8KKyNkZWZpbmUgSFJUSU1FUl9TVEFURV9JTkFDVElWRQkweDAwCisjZGVmaW5lIEhSVElNRVJfU1RBVEVfRU5RVUVVRUQJMHgwMQorI2RlZmluZSBIUlRJTUVSX1NUQVRFX0NBTExCQUNLCTB4MDIKKyNkZWZpbmUgSFJUSU1FUl9TVEFURV9QRU5ESU5HCTB4MDQKIAogLyoqCiAgKiBzdHJ1Y3QgaHJ0aW1lciAtIHRoZSBiYXNpYyBocnRpbWVyIHN0cnVjdHVyZQpAQCAtNDYsMTQgKzk2LDM0IEBACiAgKgkJd2hpY2ggdGhlIHRpbWVyIGlzIGJhc2VkLgogICogQGZ1bmN0aW9uOgl0aW1lciBleHBpcnkgY2FsbGJhY2sgZnVuY3Rpb24KICAqIEBiYXNlOglwb2ludGVyIHRvIHRoZSB0aW1lciBiYXNlIChwZXIgY3B1IGFuZCBwZXIgY2xvY2spCisgKiBAc3RhdGU6CXN0YXRlIGluZm9ybWF0aW9uIChTZWUgYml0IHZhbHVlcyBhYm92ZSkKKyAqIEBjYl9tb2RlOgloaWdoIHJlc29sdXRpb24gdGltZXIgZmVhdHVyZSB0byBzZWxlY3QgdGhlIGNhbGxiYWNrIGV4ZWN1dGlvbgorICoJCSBtb2RlCisgKiBAY2JfZW50cnk6CWxpc3QgaGVhZCB0byBlbnF1ZXVlIGFuIGV4cGlyZWQgdGltZXIgaW50byB0aGUgY2FsbGJhY2sgbGlzdAorICogQHN0YXJ0X3NpdGU6CXRpbWVyIHN0YXRpc3RpY3MgZmllbGQgdG8gc3RvcmUgdGhlIHNpdGUgd2hlcmUgdGhlIHRpbWVyCisgKgkJd2FzIHN0YXJ0ZWQKKyAqIEBzdGFydF9jb21tOiB0aW1lciBzdGF0aXN0aWNzIGZpZWxkIHRvIHN0b3JlIHRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzIHdoaWNoCisgKgkJc3RhcnRlZCB0aGUgdGltZXIKKyAqIEBzdGFydF9waWQ6IHRpbWVyIHN0YXRpc3RpY3MgZmllbGQgdG8gc3RvcmUgdGhlIHBpZCBvZiB0aGUgdGFzayB3aGljaAorICoJCXN0YXJ0ZWQgdGhlIHRpbWVyCiAgKgotICogVGhlIGhydGltZXIgc3RydWN0dXJlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgaW5pdF9ocnRpbWVyXyNDTE9DS1RZUEUoKQorICogVGhlIGhydGltZXIgc3RydWN0dXJlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgaHJ0aW1lcl9pbml0KCkKICAqLwogc3RydWN0IGhydGltZXIgewotCXN0cnVjdCByYl9ub2RlCQlub2RlOwotCWt0aW1lX3QJCQlleHBpcmVzOwotCWludAkJCSgqZnVuY3Rpb24pKHN0cnVjdCBocnRpbWVyICopOwotCXN0cnVjdCBocnRpbWVyX2Jhc2UJKmJhc2U7CisJc3RydWN0IHJiX25vZGUJCQlub2RlOworCWt0aW1lX3QJCQkJZXhwaXJlczsKKwllbnVtIGhydGltZXJfcmVzdGFydAkJKCpmdW5jdGlvbikoc3RydWN0IGhydGltZXIgKik7CisJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZQkqYmFzZTsKKwl1bnNpZ25lZCBsb25nCQkJc3RhdGU7CisjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUworCWVudW0gaHJ0aW1lcl9jYl9tb2RlCQljYl9tb2RlOworCXN0cnVjdCBsaXN0X2hlYWQJCWNiX2VudHJ5OworI2VuZGlmCisjaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCisJdm9pZAkJCQkqc3RhcnRfc2l0ZTsKKwljaGFyCQkJCXN0YXJ0X2NvbW1bMTZdOworCWludAkJCQlzdGFydF9waWQ7CisjZW5kaWYKIH07CiAKIC8qKgpAQCAtNzAsMzcgKzE0MCwxMTQgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgaHJ0aW1lcl9iYXNlIC0gdGhlIHRpbWVyIGJhc2UgZm9yIGEgc3BlY2lmaWMgY2xvY2sKLSAqIEBpbmRleDoJCWNsb2NrIHR5cGUgaW5kZXggZm9yIHBlcl9jcHUgc3VwcG9ydCB3aGVuIG1vdmluZyBhIHRpbWVyCi0gKgkJCXRvIGEgYmFzZSBvbiBhbm90aGVyIGNwdS4KLSAqIEBsb2NrOgkJbG9jayBwcm90ZWN0aW5nIHRoZSBiYXNlIGFuZCBhc3NvY2lhdGVkIHRpbWVycworICogQGluZGV4OgkJY2xvY2sgdHlwZSBpbmRleCBmb3IgcGVyX2NwdSBzdXBwb3J0IHdoZW4gbW92aW5nIGEKKyAqCQkJdGltZXIgdG8gYSBiYXNlIG9uIGFub3RoZXIgY3B1LgogICogQGFjdGl2ZToJCXJlZCBibGFjayB0cmVlIHJvb3Qgbm9kZSBmb3IgdGhlIGFjdGl2ZSB0aW1lcnMKICAqIEBmaXJzdDoJCXBvaW50ZXIgdG8gdGhlIHRpbWVyIG5vZGUgd2hpY2ggZXhwaXJlcyBmaXJzdAogICogQHJlc29sdXRpb246CQl0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2ssIGluIG5hbm9zZWNvbmRzCiAgKiBAZ2V0X3RpbWU6CQlmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBjbG9jawogICogQGdldF9zb2Z0aXJxX3RpbWU6CWZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGUgc29mdGlycQotICogQGN1cnJfdGltZXI6CQl0aGUgdGltZXIgd2hpY2ggaXMgZXhlY3V0aW5nIGEgY2FsbGJhY2sgcmlnaHQgbm93CiAgKiBAc29mdGlycV90aW1lOgl0aGUgdGltZSB3aGVuIHJ1bm5pbmcgdGhlIGhydGltZXIgcXVldWUgaW4gdGhlIHNvZnRpcnEKLSAqIEBsb2NrX2tleToJCXRoZSBsb2NrX2NsYXNzX2tleSBmb3IgdXNlIHdpdGggbG9ja2RlcAorICogQGNiX3BlbmRpbmc6CQlsaXN0IG9mIHRpbWVycyB3aGVyZSB0aGUgY2FsbGJhY2sgaXMgcGVuZGluZworICogQG9mZnNldDoJCW9mZnNldCBvZiB0aGlzIGNsb2NrIHRvIHRoZSBtb25vdG9uaWMgYmFzZQorICogQHJlcHJvZ3JhbToJCWZ1bmN0aW9uIHRvIHJlcHJvZ3JhbSB0aGUgdGltZXIgZXZlbnQKICAqLwotc3RydWN0IGhydGltZXJfYmFzZSB7CitzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlIHsKKwlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZQkqY3B1X2Jhc2U7CiAJY2xvY2tpZF90CQlpbmRleDsKLQlzcGlubG9ja190CQlsb2NrOwogCXN0cnVjdCByYl9yb290CQlhY3RpdmU7CiAJc3RydWN0IHJiX25vZGUJCSpmaXJzdDsKIAlrdGltZV90CQkJcmVzb2x1dGlvbjsKIAlrdGltZV90CQkJKCpnZXRfdGltZSkodm9pZCk7CiAJa3RpbWVfdAkJCSgqZ2V0X3NvZnRpcnFfdGltZSkodm9pZCk7Ci0Jc3RydWN0IGhydGltZXIJCSpjdXJyX3RpbWVyOwogCWt0aW1lX3QJCQlzb2Z0aXJxX3RpbWU7Ci0Jc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvY2tfa2V5OworI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKKwlrdGltZV90CQkJb2Zmc2V0OworCWludAkJCSgqcmVwcm9ncmFtKShzdHJ1Y3QgaHJ0aW1lciAqdCwKKwkJCQkJICAgICBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiLAorCQkJCQkgICAgIGt0aW1lX3Qgbik7CisjZW5kaWYKIH07CiAKKyNkZWZpbmUgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVMgMgorCisvKgorICogc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgLSB0aGUgcGVyIGNwdSBjbG9jayBiYXNlcworICogQGxvY2s6CQlsb2NrIHByb3RlY3RpbmcgdGhlIGJhc2UgYW5kIGFzc29jaWF0ZWQgY2xvY2sgYmFzZXMKKyAqCQkJYW5kIHRpbWVycworICogQGxvY2tfa2V5OgkJdGhlIGxvY2tfY2xhc3Nfa2V5IGZvciB1c2Ugd2l0aCBsb2NrZGVwCisgKiBAY2xvY2tfYmFzZToJCWFycmF5IG9mIGNsb2NrIGJhc2VzIGZvciB0aGlzIGNwdQorICogQGN1cnJfdGltZXI6CQl0aGUgdGltZXIgd2hpY2ggaXMgZXhlY3V0aW5nIGEgY2FsbGJhY2sgcmlnaHQgbm93CisgKiBAZXhwaXJlc19uZXh0OglhYnNvbHV0ZSB0aW1lIG9mIHRoZSBuZXh0IGV2ZW50IHdoaWNoIHdhcyBzY2hlZHVsZWQKKyAqCQkJdmlhIGNsb2NrX3NldF9uZXh0X2V2ZW50KCkKKyAqIEBocmVzX2FjdGl2ZToJU3RhdGUgb2YgaGlnaCByZXNvbHV0aW9uIG1vZGUKKyAqIEBjaGVja19jbG9ja3M6CUluZGljdGF0b3IsIHdoZW4gc2V0IGV2YWx1YXRlIHRpbWUgc291cmNlIGFuZCBjbG9jaworICoJCQlldmVudCBkZXZpY2VzIHdoZXRoZXIgaGlnaCByZXNvbHV0aW9uIG1vZGUgY2FuIGJlCisgKgkJCWFjdGl2YXRlZC4KKyAqIEBjYl9wZW5kaW5nOgkJRXhwaXJlZCB0aW1lcnMgYXJlIG1vdmVkIGZyb20gdGhlIHJidHJlZSB0byB0aGlzCisgKgkJCWxpc3QgaW4gdGhlIHRpbWVyIGludGVycnVwdC4gVGhlIGxpc3QgaXMgcHJvY2Vzc2VkCisgKgkJCWluIHRoZSBzb2Z0aXJxLgorICogQG5yX2V2ZW50czoJCVRvdGFsIG51bWJlciBvZiB0aW1lciBpbnRlcnJ1cHQgZXZlbnRzCisgKi8KK3N0cnVjdCBocnRpbWVyX2NwdV9iYXNlIHsKKwlzcGlubG9ja190CQkJbG9jazsKKwlzdHJ1Y3QgbG9ja19jbGFzc19rZXkJCWxvY2tfa2V5OworCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UJY2xvY2tfYmFzZVtIUlRJTUVSX01BWF9DTE9DS19CQVNFU107CisjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUworCWt0aW1lX3QJCQkJZXhwaXJlc19uZXh0OworCWludAkJCQlocmVzX2FjdGl2ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQljYl9wZW5kaW5nOworCXVuc2lnbmVkIGxvbmcJCQlucl9ldmVudHM7CisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCitzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlOworCitleHRlcm4gdm9pZCBjbG9ja193YXNfc2V0KHZvaWQpOworZXh0ZXJuIHZvaWQgaHJ0aW1lcl9pbnRlcnJ1cHQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKKworLyoKKyAqIEluIGhpZ2ggcmVzb2x1dGlvbiBtb2RlIHRoZSB0aW1lIHJlZmVyZW5jZSBtdXN0IGJlIHJlYWQgYWNjdXJhdGUKKyAqLworc3RhdGljIGlubGluZSBrdGltZV90IGhydGltZXJfY2JfZ2V0X3RpbWUoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXJldHVybiB0aW1lci0+YmFzZS0+Z2V0X3RpbWUoKTsKK30KKworLyoKKyAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBjbG9ja3MuIFRoZSByZXNvbHV0aW9uIHZhbHVlIGlzIHJldHVybmVkIGluCisgKiB0aGUgY2xvY2tfZ2V0cmVzKCkgc3lzdGVtIGNhbGwgdG8gZ2l2ZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWVycyBhbgorICogaWRlYSBvZiB0aGUgKGluKWFjY3VyYWN5IG9mIHRpbWVycy4gVGltZXIgdmFsdWVzIGFyZSByb3VuZGVkIHVwIHRvCisgKiB0aGlzIHJlc29sdXRpb24gdmFsdWVzLgorICovCisjIGRlZmluZSBLVElNRV9ISUdIX1JFUwkJKGt0aW1lX3QpIHsgLnR2NjQgPSAxIH0KKyMgZGVmaW5lIEtUSU1FX01PTk9UT05JQ19SRVMJS1RJTUVfSElHSF9SRVMKKworI2Vsc2UKKworIyBkZWZpbmUgS1RJTUVfTU9OT1RPTklDX1JFUwlLVElNRV9MT1dfUkVTCisKIC8qCiAgKiBjbG9ja193YXNfc2V0KCkgaXMgYSBOT1AgZm9yIG5vbi0gaGlnaC1yZXNvbHV0aW9uIHN5c3RlbXMuIFRoZQogICogdGltZS1zb3J0ZWQgb3JkZXIgZ3VhcmFudGVlcyB0aGF0IGEgdGltZXIgZG9lcyBub3QgZXhwaXJlIGVhcmx5IGFuZAogICogaXMgZXhwaXJlZCBpbiB0aGUgbmV4dCBzb2Z0aXJxIHdoZW4gdGhlIGNsb2NrIHdhcyBhZHZhbmNlZC4KICAqLwotI2RlZmluZSBjbG9ja193YXNfc2V0KCkJCWRvIHsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbG9ja193YXNfc2V0KHZvaWQpIHsgfQorCisvKgorICogSW4gbm9uIGhpZ2ggcmVzb2x1dGlvbiBtb2RlIHRoZSB0aW1lIHJlZmVyZW5jZSBpcyB0YWtlbiBmcm9tCisgKiB0aGUgYmFzZSBzb2Z0aXJxIHRpbWUgdmFyaWFibGUuCisgKi8KK3N0YXRpYyBpbmxpbmUga3RpbWVfdCBocnRpbWVyX2NiX2dldF90aW1lKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwlyZXR1cm4gdGltZXItPmJhc2UtPnNvZnRpcnFfdGltZTsKK30KKworI2VuZGlmCisKK2V4dGVybiBrdGltZV90IGt0aW1lX2dldCh2b2lkKTsKK2V4dGVybiBrdGltZV90IGt0aW1lX2dldF9yZWFsKHZvaWQpOwogCiAvKiBFeHBvcnRlZCB0aW1lciBmdW5jdGlvbnM6ICovCiAKQEAgLTExNCwxOSArMjYxLDMzIEBACiBleHRlcm4gaW50IGhydGltZXJfY2FuY2VsKHN0cnVjdCBocnRpbWVyICp0aW1lcik7CiBleHRlcm4gaW50IGhydGltZXJfdHJ5X3RvX2NhbmNlbChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpOwogCi0jZGVmaW5lIGhydGltZXJfcmVzdGFydCh0aW1lcikgaHJ0aW1lcl9zdGFydCgodGltZXIpLCAodGltZXIpLT5leHBpcmVzLCBIUlRJTUVSX0FCUykKK3N0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfcmVzdGFydChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCit7CisJcmV0dXJuIGhydGltZXJfc3RhcnQodGltZXIsIHRpbWVyLT5leHBpcmVzLCBIUlRJTUVSX01PREVfQUJTKTsKK30KIAogLyogUXVlcnkgdGltZXJzOiAqLwogZXh0ZXJuIGt0aW1lX3QgaHJ0aW1lcl9nZXRfcmVtYWluaW5nKGNvbnN0IHN0cnVjdCBocnRpbWVyICp0aW1lcik7CiBleHRlcm4gaW50IGhydGltZXJfZ2V0X3Jlcyhjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIHN0cnVjdCB0aW1lc3BlYyAqdHApOwogCi0jaWZkZWYgQ09ORklHX05PX0lETEVfSFoKIGV4dGVybiBrdGltZV90IGhydGltZXJfZ2V0X25leHRfZXZlbnQodm9pZCk7Ci0jZW5kaWYKIAorLyoKKyAqIEEgdGltZXIgaXMgYWN0aXZlLCB3aGVuIGl0IGlzIGVucXVldWVkIGludG8gdGhlIHJidHJlZSBvciB0aGUgY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIGlzIHJ1bm5pbmcuCisgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfYWN0aXZlKGNvbnN0IHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKLQlyZXR1cm4gcmJfcGFyZW50KCZ0aW1lci0+bm9kZSkgIT0gJnRpbWVyLT5ub2RlOworCXJldHVybiB0aW1lci0+c3RhdGUgIT0gSFJUSU1FUl9TVEFURV9JTkFDVElWRTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjaywgd2hldGhlciB0aGUgdGltZXIgaXMgb24gb25lIG9mIHRoZSBxdWV1ZXMKKyAqLworc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9pc19xdWV1ZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXJldHVybiB0aW1lci0+c3RhdGUgJgorCQkoSFJUSU1FUl9TVEFURV9FTlFVRVVFRCB8IEhSVElNRVJfU1RBVEVfUEVORElORyk7CiB9CiAKIC8qIEZvcndhcmQgYSBocnRpbWVyIHNvIGl0IGV4cGlyZXMgYWZ0ZXIgbm93OiAqLwpAQCAtMTQ5LDQgKzMxMCw1MyBAQAogLyogQm9vdHVwIGluaXRpYWxpemF0aW9uOiAqLwogZXh0ZXJuIHZvaWQgX19pbml0IGhydGltZXJzX2luaXQodm9pZCk7CiAKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKK2V4dGVybiB1bnNpZ25lZCBsb25nIGt0aW1lX2Rpdm5zKGNvbnN0IGt0aW1lX3Qga3QsIHM2NCBkaXYpOworI2Vsc2UgLyogQklUU19QRVJfTE9ORyA8IDY0ICovCisjIGRlZmluZSBrdGltZV9kaXZucyhrdCwgZGl2KQkJKHVuc2lnbmVkIGxvbmcpKChrdCkudHY2NCAvIChkaXYpKQorI2VuZGlmCisKKy8qIFNob3cgcGVuZGluZyB0aW1lcnM6ICovCitleHRlcm4gdm9pZCBzeXNycV90aW1lcl9saXN0X3Nob3codm9pZCk7CisKKy8qCisgKiBUaW1lci1zdGF0aXN0aWNzIGluZm86CisgKi8KKyNpZmRlZiBDT05GSUdfVElNRVJfU1RBVFMKKworZXh0ZXJuIHZvaWQgdGltZXJfc3RhdHNfdXBkYXRlX3N0YXRzKHZvaWQgKnRpbWVyLCBwaWRfdCBwaWQsIHZvaWQgKnN0YXJ0ZiwKKwkJCQkgICAgIHZvaWQgKnRpbWVyZiwgY2hhciAqIGNvbW0pOworCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfYWNjb3VudF9ocnRpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwl0aW1lcl9zdGF0c191cGRhdGVfc3RhdHModGltZXIsIHRpbWVyLT5zdGFydF9waWQsIHRpbWVyLT5zdGFydF9zaXRlLAorCQkJCSB0aW1lci0+ZnVuY3Rpb24sIHRpbWVyLT5zdGFydF9jb21tKTsKK30KKworZXh0ZXJuIHZvaWQgX190aW1lcl9zdGF0c19ocnRpbWVyX3NldF9zdGFydF9pbmZvKHN0cnVjdCBocnRpbWVyICp0aW1lciwKKwkJCQkJCSB2b2lkICphZGRyKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3N0YXRzX2hydGltZXJfc2V0X3N0YXJ0X2luZm8oc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCV9fdGltZXJfc3RhdHNfaHJ0aW1lcl9zZXRfc3RhcnRfaW5mbyh0aW1lciwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3N0YXRzX2hydGltZXJfY2xlYXJfc3RhcnRfaW5mbyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCit7CisJdGltZXItPnN0YXJ0X3NpdGUgPSBOVUxMOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zdGF0c19hY2NvdW50X2hydGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfaHJ0aW1lcl9zZXRfc3RhcnRfaW5mbyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zdGF0c19ocnRpbWVyX2NsZWFyX3N0YXJ0X2luZm8oc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworfQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggMDRlMGZhOS4uNzljMDI4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC02MzYsNyArNjM2LDYgQEAKIAl1bnNpZ25lZCBpbnQJYmlvc19jeWw7CS8qIEJJT1MvZmRpc2svTElMTyBudW1iZXIgb2YgY3lscyAqLwogCXVuc2lnbmVkIGludAljeWw7CQkvKiAicmVhbCIgbnVtYmVyIG9mIGN5bHMgKi8KIAl1bnNpZ25lZCBpbnQJZHJpdmVfZGF0YTsJLyogdXNlIGJ5IHR1bmVwcm9jL3NlbGVjdHByb2MgKi8KLQl1bnNpZ25lZCBpbnQJdXNhZ2U7CQkvKiBjdXJyZW50ICJvcGVuKCkiIGNvdW50IGZvciBkcml2ZSAqLwogCXVuc2lnbmVkIGludAlmYWlsdXJlczsJLyogY3VycmVudCBmYWlsdXJlIGNvdW50ICovCiAJdW5zaWduZWQgaW50CW1heF9mYWlsdXJlczsJLyogbWF4aW11bSBhbGxvd2VkIGZhaWx1cmUgY291bnQgKi8KIAl1NjQJCXByb2JlZF9jYXBhY2l0eTsvKiBpbml0aWFsIHJlcG9ydGVkIG1lZGlhIGNhcGFjaXR5IChpZGUtY2Qgb25seSBjdXJyZW50bHkpICovCkBAIC03MzYsMjMgKzczNSwyMiBAQAogCWludCAoKmlkZV9kbWFfZW5kKShpZGVfZHJpdmVfdCAqZHJpdmUpOwogCWludCAoKmlkZV9kbWFfY2hlY2spKGlkZV9kcml2ZV90ICpkcml2ZSk7CiAJaW50ICgqaWRlX2RtYV9vbikoaWRlX2RyaXZlX3QgKmRyaXZlKTsKLQlpbnQgKCppZGVfZG1hX29mZl9xdWlldGx5KShpZGVfZHJpdmVfdCAqZHJpdmUpOworCXZvaWQgKCpkbWFfb2ZmX3F1aWV0bHkpKGlkZV9kcml2ZV90ICpkcml2ZSk7CiAJaW50ICgqaWRlX2RtYV90ZXN0X2lycSkoaWRlX2RyaXZlX3QgKmRyaXZlKTsKLQlpbnQgKCppZGVfZG1hX2hvc3Rfb24pKGlkZV9kcml2ZV90ICpkcml2ZSk7Ci0JaW50ICgqaWRlX2RtYV9ob3N0X29mZikoaWRlX2RyaXZlX3QgKmRyaXZlKTsKKwl2b2lkICgqaWRlX2RtYV9jbGVhcl9pcnEpKGlkZV9kcml2ZV90ICpkcml2ZSk7CisJdm9pZCAoKmRtYV9ob3N0X29uKShpZGVfZHJpdmVfdCAqZHJpdmUpOworCXZvaWQgKCpkbWFfaG9zdF9vZmYpKGlkZV9kcml2ZV90ICpkcml2ZSk7CiAJaW50ICgqaWRlX2RtYV9sb3N0aXJxKShpZGVfZHJpdmVfdCAqZHJpdmUpOwogCWludCAoKmlkZV9kbWFfdGltZW91dCkoaWRlX2RyaXZlX3QgKmRyaXZlKTsKIAogCXZvaWQgKCpPVVRCKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwogCXZvaWQgKCpPVVRCU1lOQykoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwogCXZvaWQgKCpPVVRXKSh1MTYgYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLQl2b2lkICgqT1VUTCkodTMyIGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CiAJdm9pZCAoKk9VVFNXKSh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCk7CiAJdm9pZCAoKk9VVFNMKSh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCk7CiAKIAl1OCAgKCpJTkIpKHVuc2lnbmVkIGxvbmcgcG9ydCk7CiAJdTE2ICgqSU5XKSh1bnNpZ25lZCBsb25nIHBvcnQpOwotCXUzMiAoKklOTCkodW5zaWduZWQgbG9uZyBwb3J0KTsKIAl2b2lkICgqSU5TVykodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpOwogCXZvaWQgKCpJTlNMKSh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCk7CiAKQEAgLTc3NCw3ICs3NzIsNiBAQAogCXVuc2lnbmVkIGludCBjdXJzZzsKIAl1bnNpZ25lZCBpbnQgY3Vyc2dfb2ZzOwogCi0JaW50CQltbWlvOwkJLyogaG9zdHMgaW9taW8gKDApIG9yIGN1c3RvbSAoMikgc2VsZWN0ICovCiAJaW50CQlycXNpemU7CQkvKiBtYXggc2VjdG9ycyBwZXIgcmVxdWVzdCAqLwogCWludAkJaXJxOwkJLyogb3VyIGlycSBudW1iZXIgKi8KIApAQCAtODAyLDEyICs3OTksMTEgQEAKIAl1bnNpZ25lZAl1ZG1hX2ZvdXIgIDogMTsJLyogMT1BVEEtNjYgY2FwYWJsZSwgMD1kZWZhdWx0ICovCiAJdW5zaWduZWQJbm9fbGJhNDggICA6IDE7IC8qIDEgPSBjYW5ub3QgZG8gTEJBNDggKi8KIAl1bnNpZ25lZAlub19sYmE0OF9kbWEgOiAxOyAvKiAxID0gY2Fubm90IGRvIExCQTQ4IERNQSAqLwotCXVuc2lnbmVkCW5vX2RzYyAgICAgOiAxOwkvKiAwIGRlZmF1bHQsIDEgZHNjX292ZXJsYXAgZGlzYWJsZWQgKi8KIAl1bnNpZ25lZAlhdXRvX3BvbGwgIDogMTsgLyogc3VwcG9ydHMgbm9wIGF1dG8tcG9sbCAqLwogCXVuc2lnbmVkCXNnX21hcHBlZCAgOiAxOwkvKiBzZ190YWJsZSBhbmQgc2dfbmVudHMgYXJlIHJlYWR5ICovCiAJdW5zaWduZWQJbm9faW9fMzJiaXQgOiAxOyAvKiAxID0gY2FuIG5vdCBkbyAzMi1iaXQgSU8gb3BzICovCiAJdW5zaWduZWQJZXJyX3N0b3BzX2ZpZm8gOiAxOyAvKiAxPWRhdGEgRklGTyBpcyBjbGVhcmVkIGJ5IGFuIGVycm9yICovCi0JdW5zaWduZWQJYXRhcGlfaXJxX2JvZ29uIDogMTsgLyogR2VuZXJhdGVzIHNwdXJpb3VzIERNQSBpbnRlcnJ1cHRzIGluIFBJTyBtb2RlICovCisJdW5zaWduZWQJbW1pbyAgICAgICA6IDE7IC8qIGhvc3QgdXNlcyBNTUlPICovCiAKIAlzdHJ1Y3QgZGV2aWNlCWdlbmRldjsKIAlzdHJ1Y3QgY29tcGxldGlvbiBnZW5kZXZfcmVsX2NvbXA7IC8qIFRvIGRlYWwgd2l0aCBkZXZpY2UgcmVsZWFzZSgpICovCkBAIC0xMjgwLDggKzEyNzYsOSBAQAogaW50IF9faWRlX2RtYV9iYWRfZHJpdmUoaWRlX2RyaXZlX3QgKik7CiBpbnQgX19pZGVfZG1hX2dvb2RfZHJpdmUoaWRlX2RyaXZlX3QgKik7CiBpbnQgaWRlX3VzZV9kbWEoaWRlX2RyaXZlX3QgKik7Ci1pbnQgX19pZGVfZG1hX29mZihpZGVfZHJpdmVfdCAqKTsKK3ZvaWQgaWRlX2RtYV9vZmYoaWRlX2RyaXZlX3QgKik7CiB2b2lkIGlkZV9kbWFfdmVyYm9zZShpZGVfZHJpdmVfdCAqKTsKK2ludCBpZGVfc2V0X2RtYShpZGVfZHJpdmVfdCAqKTsKIGlkZV9zdGFydHN0b3BfdCBpZGVfZG1hX2ludHIoaWRlX2RyaXZlX3QgKik7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJCkBAIC0xMjkxLDkgKzEyODgsOSBAQAogZXh0ZXJuIGludCBpZGVfcmVsZWFzZV9kbWEoaWRlX2h3aWZfdCAqKTsKIGV4dGVybiB2b2lkIGlkZV9zZXR1cF9kbWEoaWRlX2h3aWZfdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpOwogCi1leHRlcm4gaW50IF9faWRlX2RtYV9ob3N0X29mZihpZGVfZHJpdmVfdCAqKTsKLWV4dGVybiBpbnQgX19pZGVfZG1hX29mZl9xdWlldGx5KGlkZV9kcml2ZV90ICopOwotZXh0ZXJuIGludCBfX2lkZV9kbWFfaG9zdF9vbihpZGVfZHJpdmVfdCAqKTsKK3ZvaWQgaWRlX2RtYV9ob3N0X29mZihpZGVfZHJpdmVfdCAqKTsKK3ZvaWQgaWRlX2RtYV9vZmZfcXVpZXRseShpZGVfZHJpdmVfdCAqKTsKK3ZvaWQgaWRlX2RtYV9ob3N0X29uKGlkZV9kcml2ZV90ICopOwogZXh0ZXJuIGludCBfX2lkZV9kbWFfb24oaWRlX2RyaXZlX3QgKik7CiBleHRlcm4gaW50IF9faWRlX2RtYV9jaGVjayhpZGVfZHJpdmVfdCAqKTsKIGV4dGVybiBpbnQgaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqKTsKQEAgLTEzMDUsOCArMTMwMiw5IEBACiAKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBpZGVfdXNlX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IF9faWRlX2RtYV9vZmYoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2RtYV9vZmYoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9kbWFfdmVyYm9zZShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgOyB9CitzdGF0aWMgaW5saW5lIGludCBpZGVfc2V0X2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDE7IH0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEgKi8KIAogI2lmbmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJCkBAIC0xMzU0LDYgKzEzNTIsNyBAQAogZXh0ZXJuIGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTggeGZlcl9yYXRlKTsKIGV4dGVybiB2b2lkIGlkZV90b2dnbGVfYm91bmNlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKTsKIGV4dGVybiBpbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByYXRlKTsKK2ludCBpZGVfdXNlX2Zhc3RfcGlvKGlkZV9kcml2ZV90ICopOwogCiB1OCBpZGVfZHVtcF9zdGF0dXMoaWRlX2RyaXZlX3QgKiwgY29uc3QgY2hhciAqLCB1OCk7CiAKQEAgLTEzNjcsNyArMTM2Niw2IEBACiAJdTggcGlvX21vZGU7CiAJdTggdXNlX2lvcmR5OwogCXU4IG92ZXJyaWRkZW47Ci0JdTggYmxhY2tsaXN0ZWQ7CiAJdW5zaWduZWQgaW50IGN5Y2xlX3RpbWU7CiB9IGlkZV9waW9fZGF0YV90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCA1YThiYTBiLi44MzhjZjVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTQyLDYgKzQyLDggQEAKICAqIElSUUZfU0hBUkVEIC0gYWxsb3cgc2hhcmluZyB0aGUgaXJxIGFtb25nIHNldmVyYWwgZGV2aWNlcwogICogSVJRRl9QUk9CRV9TSEFSRUQgLSBzZXQgYnkgY2FsbGVycyB3aGVuIHRoZXkgZXhwZWN0IHNoYXJpbmcgbWlzbWF0Y2hlcyB0byBvY2N1cgogICogSVJRRl9USU1FUiAtIEZsYWcgdG8gbWFyayB0aGlzIGludGVycnVwdCBhcyB0aW1lciBpbnRlcnJ1cHQKKyAqIElSUUZfUEVSQ1BVIC0gSW50ZXJydXB0IGlzIHBlciBjcHUKKyAqIElSUUZfTk9CQUxBTkNJTkcgLSBGbGFnIHRvIGV4Y2x1ZGUgdGhpcyBpbnRlcnJ1cHQgZnJvbSBpcnEgYmFsYW5jaW5nCiAgKi8KICNkZWZpbmUgSVJRRl9ESVNBQkxFRAkJMHgwMDAwMDAyMAogI2RlZmluZSBJUlFGX1NBTVBMRV9SQU5ET00JMHgwMDAwMDA0MApAQCAtNDksNiArNTEsNyBAQAogI2RlZmluZSBJUlFGX1BST0JFX1NIQVJFRAkweDAwMDAwMTAwCiAjZGVmaW5lIElSUUZfVElNRVIJCTB4MDAwMDAyMDAKICNkZWZpbmUgSVJRRl9QRVJDUFUJCTB4MDAwMDA0MDAKKyNkZWZpbmUgSVJRRl9OT0JBTEFOQ0lORwkweDAwMDAwODAwCiAKIC8qCiAgKiBNaWdyYXRpb24gaGVscGVycy4gU2NoZWR1bGVkIGZvciByZW1vdmFsIGluIDEvMjAwNwpAQCAtMjM5LDYgKzI0Miw5IEBACiAJQkxPQ0tfU09GVElSUSwKIAlUQVNLTEVUX1NPRlRJUlEsCiAJU0NIRURfU09GVElSUSwKKyNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCisJSFJUSU1FUl9TT0ZUSVJRLAorI2VuZGlmCiB9OwogCiAvKiBzb2Z0aXJxIG1hc2sgYW5kIGFjdGl2ZSBmaWVsZHMgbW92ZWQgdG8gaXJxX2NwdXN0YXRfdCBpbgpAQCAtNDE3LDQgKzQyMywxMyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9iZV9pcnFfbWFzayh1bnNpZ25lZCBsb25nKTsJLyogcmV0dXJucyBtYXNrIG9mIElTQSBpbnRlcnJ1cHRzICovCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisvKiBJbml0aWFsaXplIC9wcm9jL2lycS8gKi8KK2V4dGVybiB2b2lkIGluaXRfaXJxX3Byb2Modm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfaXJxX3Byb2Modm9pZCkKK3sKK30KKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IDU1MDRiNjcuLmFhNWIzZTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTMxLDcgKzMxLDcgQEAKIC8qCiAgKiBJUlEgbGluZSBzdGF0dXMuCiAgKgotICogQml0cyAwLTE2IGFyZSByZXNlcnZlZCBmb3IgdGhlIElSUUZfKiBiaXRzIGluIGxpbnV4L2ludGVycnVwdC5oCisgKiBCaXRzIDAtNyBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBJUlFGXyogYml0cyBpbiBsaW51eC9pbnRlcnJ1cHQuaAogICoKICAqIElSUSB0eXBlcwogICovCkBAIC00NSwyOCArNDUsMzAgQEAKICNkZWZpbmUgSVJRX1RZUEVfUFJPQkUJCTB4MDAwMDAwMTAJLyogUHJvYmluZyBpbiBwcm9ncmVzcyAqLwogCiAvKiBJbnRlcm5hbCBmbGFncyAqLwotI2RlZmluZSBJUlFfSU5QUk9HUkVTUwkJMHgwMDAxMDAwMAkvKiBJUlEgaGFuZGxlciBhY3RpdmUgLSBkbyBub3QgZW50ZXIhICovCi0jZGVmaW5lIElSUV9ESVNBQkxFRAkJMHgwMDAyMDAwMAkvKiBJUlEgZGlzYWJsZWQgLSBkbyBub3QgZW50ZXIhICovCi0jZGVmaW5lIElSUV9QRU5ESU5HCQkweDAwMDQwMDAwCS8qIElSUSBwZW5kaW5nIC0gcmVwbGF5IG9uIGVuYWJsZSAqLwotI2RlZmluZSBJUlFfUkVQTEFZCQkweDAwMDgwMDAwCS8qIElSUSBoYXMgYmVlbiByZXBsYXllZCBidXQgbm90IGFja2VkIHlldCAqLwotI2RlZmluZSBJUlFfQVVUT0RFVEVDVAkJMHgwMDEwMDAwMAkvKiBJUlEgaXMgYmVpbmcgYXV0b2RldGVjdGVkICovCi0jZGVmaW5lIElSUV9XQUlUSU5HCQkweDAwMjAwMDAwCS8qIElSUSBub3QgeWV0IHNlZW4gLSBmb3IgYXV0b2RldGVjdGlvbiAqLwotI2RlZmluZSBJUlFfTEVWRUwJCTB4MDA0MDAwMDAJLyogSVJRIGxldmVsIHRyaWdnZXJlZCAqLwotI2RlZmluZSBJUlFfTUFTS0VECQkweDAwODAwMDAwCS8qIElSUSBtYXNrZWQgLSBzaG91bGRuJ3QgYmUgc2VlbiBhZ2FpbiAqLwotI2RlZmluZSBJUlFfUEVSX0NQVQkJMHgwMTAwMDAwMAkvKiBJUlEgaXMgcGVyIENQVSAqLworI2RlZmluZSBJUlFfSU5QUk9HUkVTUwkJMHgwMDAwMDEwMAkvKiBJUlEgaGFuZGxlciBhY3RpdmUgLSBkbyBub3QgZW50ZXIhICovCisjZGVmaW5lIElSUV9ESVNBQkxFRAkJMHgwMDAwMDIwMAkvKiBJUlEgZGlzYWJsZWQgLSBkbyBub3QgZW50ZXIhICovCisjZGVmaW5lIElSUV9QRU5ESU5HCQkweDAwMDAwNDAwCS8qIElSUSBwZW5kaW5nIC0gcmVwbGF5IG9uIGVuYWJsZSAqLworI2RlZmluZSBJUlFfUkVQTEFZCQkweDAwMDAwODAwCS8qIElSUSBoYXMgYmVlbiByZXBsYXllZCBidXQgbm90IGFja2VkIHlldCAqLworI2RlZmluZSBJUlFfQVVUT0RFVEVDVAkJMHgwMDAwMTAwMAkvKiBJUlEgaXMgYmVpbmcgYXV0b2RldGVjdGVkICovCisjZGVmaW5lIElSUV9XQUlUSU5HCQkweDAwMDAyMDAwCS8qIElSUSBub3QgeWV0IHNlZW4gLSBmb3IgYXV0b2RldGVjdGlvbiAqLworI2RlZmluZSBJUlFfTEVWRUwJCTB4MDAwMDQwMDAJLyogSVJRIGxldmVsIHRyaWdnZXJlZCAqLworI2RlZmluZSBJUlFfTUFTS0VECQkweDAwMDA4MDAwCS8qIElSUSBtYXNrZWQgLSBzaG91bGRuJ3QgYmUgc2VlbiBhZ2FpbiAqLworI2RlZmluZSBJUlFfUEVSX0NQVQkJMHgwMDAxMDAwMAkvKiBJUlEgaXMgcGVyIENQVSAqLworI2RlZmluZSBJUlFfTk9QUk9CRQkJMHgwMDAyMDAwMAkvKiBJUlEgaXMgbm90IHZhbGlkIGZvciBwcm9iaW5nICovCisjZGVmaW5lIElSUV9OT1JFUVVFU1QJCTB4MDAwNDAwMDAJLyogSVJRIGNhbm5vdCBiZSByZXF1ZXN0ZWQgKi8KKyNkZWZpbmUgSVJRX05PQVVUT0VOCQkweDAwMDgwMDAwCS8qIElSUSB3aWxsIG5vdCBiZSBlbmFibGVkIG9uIHJlcXVlc3QgaXJxICovCisjZGVmaW5lIElSUV9XQUtFVVAJCTB4MDAxMDAwMDAJLyogSVJRIHRyaWdnZXJzIHN5c3RlbSB3YWtldXAgKi8KKyNkZWZpbmUgSVJRX01PVkVfUEVORElORwkweDAwMjAwMDAwCS8qIG5lZWQgdG8gcmUtdGFyZ2V0IElSUSBkZXN0aW5hdGlvbiAqLworI2RlZmluZSBJUlFfTk9fQkFMQU5DSU5HCTB4MDA0MDAwMDAJLyogSVJRIGlzIGV4Y2x1ZGVkIGZyb20gYmFsYW5jaW5nICovCisKICNpZmRlZiBDT05GSUdfSVJRX1BFUl9DUFUKICMgZGVmaW5lIENIRUNLX0lSUV9QRVJfQ1BVKHZhcikgKCh2YXIpICYgSVJRX1BFUl9DUFUpCisjIGRlZmluZSBJUlFfTk9fQkFMQU5DSU5HX01BU0sJKElSUV9QRVJfQ1BVIHwgSVJRX05PX0JBTEFOQ0lORykKICNlbHNlCiAjIGRlZmluZSBDSEVDS19JUlFfUEVSX0NQVSh2YXIpIDAKKyMgZGVmaW5lIElSUV9OT19CQUxBTkNJTkdfTUFTSwlJUlFfTk9fQkFMQU5DSU5HCiAjZW5kaWYKIAotI2RlZmluZSBJUlFfTk9QUk9CRQkJMHgwMjAwMDAwMAkvKiBJUlEgaXMgbm90IHZhbGlkIGZvciBwcm9iaW5nICovCi0jZGVmaW5lIElSUV9OT1JFUVVFU1QJCTB4MDQwMDAwMDAJLyogSVJRIGNhbm5vdCBiZSByZXF1ZXN0ZWQgKi8KLSNkZWZpbmUgSVJRX05PQVVUT0VOCQkweDA4MDAwMDAwCS8qIElSUSB3aWxsIG5vdCBiZSBlbmFibGVkIG9uIHJlcXVlc3QgaXJxICovCi0jZGVmaW5lIElSUV9ERUxBWUVEX0RJU0FCTEUJMHgxMDAwMDAwMAkvKiBJUlEgZGlzYWJsZSAobWFza2luZykgaGFwcGVucyBkZWxheWVkLiAqLwotI2RlZmluZSBJUlFfV0FLRVVQCQkweDIwMDAwMDAwCS8qIElSUSB0cmlnZ2VycyBzeXN0ZW0gd2FrZXVwICovCi0jZGVmaW5lIElSUV9NT1ZFX1BFTkRJTkcJMHg0MDAwMDAwMAkvKiBuZWVkIHRvIHJlLXRhcmdldCBJUlEgZGVzdGluYXRpb24gKi8KLQogc3RydWN0IHByb2NfZGlyX2VudHJ5Owogc3RydWN0IG1zaV9kZXNjOwogCkBAIC0xMjcsNiArMTI5LDcgQEAKICAqCiAgKiBAaGFuZGxlX2lycToJCWhpZ2hsZXZlbCBpcnEtZXZlbnRzIGhhbmRsZXIgW2lmIE5VTEwsIF9fZG9fSVJRKCldCiAgKiBAY2hpcDoJCWxvdyBsZXZlbCBpbnRlcnJ1cHQgaGFyZHdhcmUgYWNjZXNzCisgKiBAbXNpX2Rlc2M6CQlNU0kgZGVzY3JpcHRvcgogICogQGhhbmRsZXJfZGF0YToJcGVyLUlSUSBkYXRhIGZvciB0aGUgaXJxX2NoaXAgbWV0aG9kcwogICogQGNoaXBfZGF0YToJCXBsYXRmb3JtLXNwZWNpZmljIHBlci1jaGlwIHByaXZhdGUgZGF0YSBmb3IgdGhlIGNoaXAKICAqCQkJbWV0aG9kcywgdG8gYWxsb3cgc2hhcmVkIGNoaXAgaW1wbGVtZW50YXRpb25zCkBAIC0yMzUsMTEgKzIzOCwyMSBAQAogCiAjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEgKi8KIAorZXh0ZXJuIGludCBpcnFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBjcHVtYXNrKTsKK2V4dGVybiBpbnQgaXJxX2Nhbl9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSk7CisKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KIAogI2RlZmluZSBtb3ZlX25hdGl2ZV9pcnEoeCkKICNkZWZpbmUgbW92ZV9tYXNrZWRfaXJxKHgpCiAKK3N0YXRpYyBpbmxpbmUgaW50IGlycV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IGNwdW1hc2spCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV9jYW5fc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEpIHsgcmV0dXJuIDA7IH0KKwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2lmZGVmIENPTkZJR19JUlFCQUxBTkNFCkBAIC0yNjEsNiArMjc0LDExIEBACiAKIGV4dGVybiBpbnQgbm9faXJxX2FmZmluaXR5OwogCitzdGF0aWMgaW5saW5lIGludCBpcnFfYmFsYW5jaW5nX2Rpc2FibGVkKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX05PX0JBTEFOQ0lOR19NQVNLOworfQorCiAvKiBIYW5kbGUgaXJxIGFjdGlvbiBjaGFpbnM6ICovCiBleHRlcm4gaW50IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIApAQCAtMzEwLDkgKzMyOCw2IEBACiAvKiBSZXNlbmRpbmcgb2YgaW50ZXJydXB0cyA6Ki8KIHZvaWQgY2hlY2tfaXJxX3Jlc2VuZChzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEpOwogCi0vKiBJbml0aWFsaXplIC9wcm9jL2lycS8gKi8KLWV4dGVybiB2b2lkIGluaXRfaXJxX3Byb2Modm9pZCk7Ci0KIC8qIEVuYWJsZS9kaXNhYmxlIGlycSBkZWJ1Z2dpbmcgb3V0cHV0OiAqLwogZXh0ZXJuIGludCBub2lycWRlYnVnX3NldHVwKGNoYXIgKnN0cik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamZmcy5oIGIvaW5jbHVkZS9saW51eC9qZmZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMjEzMjEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9qZmZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotLyoKLSAqIEpGRlMgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIExpbnV4IGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgQXhpcyBDb21tdW5pY2F0aW9ucyBBQi4KLSAqCi0gKiBDcmVhdGVkIGJ5IEZpbm4gSGFrYW5zc29uIDxmaW5uQGF4aXMuY29tPi4KLSAqCi0gKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAkSWQ6IGpmZnMuaCx2IDEuMjAgMjAwMS8wOS8xOCAyMTozMzozNyBkd213MiBFeHAgJAotICoKLSAqIFBvcnRlZCB0byBMaW51eCAyLjMueCBhbmQgTVREOgotICogQ29weXJpZ2h0IChDKSAyMDAwICBBbGV4YW5kZXIgTGFyc3NvbiAoYWxleEBjZW5kaW8uc2UpLCBDZW5kaW8gU3lzdGVtcyBBQgotICoKLSAqLwotCi0jaWZuZGVmIF9fTElOVVhfSkZGU19IX18KLSNkZWZpbmUgX19MSU5VWF9KRkZTX0hfXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0KLSNkZWZpbmUgSkZGU19WRVJTSU9OX1NUUklORyAiMS4wIgotCi0vKiBUaGlzIGlzIGEgbWFnaWMgbnVtYmVyIHRoYXQgaXMgdXNlZCBhcyBhbiBpZGVudGlmaWNhdGlvbiBudW1iZXIgZm9yCi0gICB0aGlzIGZpbGUgc3lzdGVtLiAgSXQgaXMgd3JpdHRlbiB0byB0aGUgc3VwZXJfYmxvY2sgc3RydWN0dXJlLiAgKi8KLSNkZWZpbmUgSkZGU19NQUdJQ19TQl9CSVRNQVNLIDB4MDdjMCAgLyogMTk4NCAqLwotCi0vKiBUaGlzIGlzIGEgbWFnaWMgbnVtYmVyIHRoYXQgZXZlcnkgb24tZmxhc2ggcmF3IGlub2RlIGJlZ2lucyB3aXRoLiAgKi8KLSNkZWZpbmUgSkZGU19NQUdJQ19CSVRNQVNLIDB4MzQzODM5MzEgLyogIjE5ODQiICovCi0KLS8qIFRoZXNlIHR3byBiaXRtYXNrcyBhcmUgdGhlIHZhbGlkIG9uZXMgZm9yIHRoZSBmbGFzaCBtZW1vcmllcyB3ZSBoYXZlCi0gICBmb3IgdGhlIG1vbWVudC4gICovCi0jZGVmaW5lIEpGRlNfRU1QVFlfQklUTUFTSyAweGZmZmZmZmZmCi0jZGVmaW5lIEpGRlNfRElSVFlfQklUTUFTSyAweDAwMDAwMDAwCi0KLS8qIFRoaXMgaXMgdGhlIGlub2RlIG51bWJlciBvZiB0aGUgcm9vdCBub2RlLiAgKi8KLSNkZWZpbmUgSkZGU19NSU5fSU5PIDEKLQotLyogSG93IG1hbnkgc2xvdHMgaW4gdGhlIGZpbGUgaGFzaCB0YWJsZSBzaG91bGQgd2UgaGF2ZT8gICovCi0jZGVmaW5lIEpGRlNfSEFTSF9TSVpFIDQwCi0KLS8qIERvbid0IHVzZSBtb3JlIHRoYW4gMjU0IGJ5dGVzIGFzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIG9mIGEgZmlsZSdzCi0gICBuYW1lIGR1ZSB0byBlcnJvcnMgdGhhdCBjb3VsZCBvY2N1ciBkdXJpbmcgdGhlIHNjYW5uaW5nIG9mIHRoZSBmbGFzaAotICAgbWVtb3J5LiBJbiBmYWN0LCBhIG5hbWUgbGVuZ3RoIG9mIDI1NSBvciAweGZmLCBjb3VsZCBiZSB0aGUgcmVzdWx0IG9mCi0gICBhbiB1bmNvbXBsZXRlZCB3cml0ZS4gIEZvciBpbnN0YW5jZSwgaWYgYSByYXcgaW5vZGUgaXMgd3JpdHRlbiB0byB0aGUKLSAgIGZsYXNoIG1lbW9yeSBhbmQgdGhlcmUgaXMgYSBwb3dlciBsb3NzYWdlIGp1c3QgYmVmb3JlIHRoZSBsZW5ndGggb2YKLSAgIHRoZSBuYW1lIGlzIHdyaXR0ZW4sIHRoZSBsZW5ndGggMjU1IHdvdWxkIGJlIGludGVycHJldGVkIGFzIGFuIGlsbGVnYWwKLSAgIHZhbHVlLiAgKi8KLSNkZWZpbmUgSkZGU19NQVhfTkFNRV9MRU4gMjU0Ci0KLS8qIENvbW1hbmRzIGZvciBpb2N0bCgpLiAgKi8KLSNkZWZpbmUgSkZGU19JT0NUTF9NQUdJQyAndCcKLSNkZWZpbmUgSkZGU19QUklOVF9IQVNIIF9JTyhKRkZTX0lPQ1RMX01BR0lDLCA5MCkKLSNkZWZpbmUgSkZGU19QUklOVF9UUkVFIF9JTyhKRkZTX0lPQ1RMX01BR0lDLCA5MSkKLSNkZWZpbmUgSkZGU19HRVRfU1RBVFVTIF9JTyhKRkZTX0lPQ1RMX01BR0lDLCA5MikKLQotLyogWFhYOiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IHdlIHNob3VsZCB0cnkgdG8gZ2V0IHJpZCBvZiBpbiB0aGUgZnV0dXJlLiAgKi8KLSNkZWZpbmUgSkZGU19NT0RJRllfSU5PREUgMHgwMQotI2RlZmluZSBKRkZTX01PRElGWV9OQU1FICAweDAyCi0jZGVmaW5lIEpGRlNfTU9ESUZZX0RBVEEgIDB4MDQKLSNkZWZpbmUgSkZGU19NT0RJRllfRVhJU1QgMHgwOAotCi1zdHJ1Y3QgamZmc19jb250cm9sOwotCi0vKiBUaGUgSkZGUyByYXcgaW5vZGUgc3RydWN0dXJlOiBVc2VkIGZvciBzdG9yYWdlIG9uIHBoeXNpY2FsIG1lZGlhLiAgKi8KLS8qIFBlcmhhcHMgdGhlIHVpZCwgZ2lkLCBhdGltZSwgbXRpbWUgYW5kIGN0aW1lIG1lbWJlcnMgc2hvdWxkIGhhdmUKLSAgIG1vcmUgc3BhY2UgZHVlIHRvIGZ1dHVyZSBjaGFuZ2VzIGluIHRoZSBMaW51eCBrZXJuZWwuIEFueWhvdywgc2luY2UKLSAgIGEgdXNlciBvZiB0aGlzIGZpbGVzeXN0ZW0gcHJvYmFibHkgaGF2ZSB0byBmaXggYSBsYXJnZSBudW1iZXIgb2YKLSAgIG90aGVyIHRoaW5ncywgd2UgaGF2ZSBkZWNpZGVkIHRvIG5vdCBiZSBmb3J3YXJkIGNvbXBhdGlibGUuICAqLwotc3RydWN0IGpmZnNfcmF3X2lub2RlCi17Ci0JX191MzIgbWFnaWM7ICAgICAgLyogQSBjb25zdGFudCBtYWdpYyBudW1iZXIuICAqLwotCV9fdTMyIGlubzsgICAgICAgIC8qIElub2RlIG51bWJlci4gICovCi0JX191MzIgcGlubzsgICAgICAgLyogUGFyZW50J3MgaW5vZGUgbnVtYmVyLiAgKi8KLQlfX3UzMiB2ZXJzaW9uOyAgICAvKiBWZXJzaW9uIG51bWJlci4gICovCi0JX191MzIgbW9kZTsgICAgICAgLyogVGhlIGZpbGUncyB0eXBlIG9yIG1vZGUuICAqLwotCV9fdTE2IHVpZDsgICAgICAgIC8qIFRoZSBmaWxlJ3Mgb3duZXIuICAqLwotCV9fdTE2IGdpZDsgICAgICAgIC8qIFRoZSBmaWxlJ3MgZ3JvdXAuICAqLwotCV9fdTMyIGF0aW1lOyAgICAgIC8qIExhc3QgYWNjZXNzIHRpbWUuICAqLwotCV9fdTMyIG10aW1lOyAgICAgIC8qIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUuICAqLwotCV9fdTMyIGN0aW1lOyAgICAgIC8qIENyZWF0aW9uIHRpbWUuICAqLwotCV9fdTMyIG9mZnNldDsgICAgIC8qIFdoZXJlIHRvIGJlZ2luIHRvIHdyaXRlLiAgKi8KLQlfX3UzMiBkc2l6ZTsgICAgICAvKiBTaXplIG9mIHRoZSBub2RlJ3MgZGF0YS4gICovCi0JX191MzIgcnNpemU7ICAgICAgLyogSG93IG11Y2ggYXJlIGdvaW5nIHRvIGJlIHJlcGxhY2VkPyAgKi8KLQlfX3U4IG5zaXplOyAgICAgICAvKiBOYW1lIGxlbmd0aC4gICovCi0JX191OCBubGluazsgICAgICAgLyogTnVtYmVyIG9mIGxpbmtzLiAgKi8KLQlfX3U4IHNwYXJlIDogNjsgICAvKiBGb3IgZnV0dXJlIHVzZS4gICovCi0JX191OCByZW5hbWUgOiAxOyAgLyogUmVuYW1lIHRvIGEgbmFtZSBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIGZpbGU/ICAqLwotCV9fdTggZGVsZXRlZCA6IDE7IC8qIEhhcyB0aGlzIGZpbGUgYmVlbiBkZWxldGVkPyAgKi8KLQlfX3U4IGFjY3VyYXRlOyAgICAvKiBUaGUgaW5vZGUgaXMgb2Jzb2xldGUgaWYgYWNjdXJhdGUgPT0gMC4gICovCi0JX191MzIgZGNoa3N1bTsgICAgLyogQ2hlY2tzdW0gZm9yIHRoZSBkYXRhLiAgKi8KLQlfX3UxNiBuY2hrc3VtOyAgICAvKiBDaGVja3N1bSBmb3IgdGhlIG5hbWUuICAqLwotCV9fdTE2IGNoa3N1bTsgICAgIC8qIENoZWNrc3VtIGZvciB0aGUgcmF3IGlub2RlLiAgKi8KLX07Ci0KLS8qIERlZmluZSB0aGUgb2Zmc2V0IG9mIHRoZSBhY2N1cmF0ZSBieXRlIGluIHN0cnVjdCBqZmZzX3Jhd19pbm9kZS4gICovCi0jZGVmaW5lIEpGRlNfUkFXX0lOT0RFX0FDQ1VSQVRFX09GRlNFVCAoc2l6ZW9mKHN0cnVjdCBqZmZzX3Jhd19pbm9kZSkgXAotCQkJCQktIDIgKiBzaXplb2YoX191MzIpIC0gc2l6ZW9mKF9fdTgpKQotCi0vKiBEZWZpbmUgdGhlIG9mZnNldCBvZiB0aGUgY2hrc3VtIG1lbWJlciBpbiBzdHJ1Y3QgamZmc19yYXdfaW5vZGUuICAqLwotI2RlZmluZSBKRkZTX1JBV19JTk9ERV9DSEtTVU1fT0ZGU0VUIChzaXplb2Yoc3RydWN0IGpmZnNfcmF3X2lub2RlKSBcCi0JCQkJICAgICAgLSBzaXplb2YoX191MTYpKQotCi0vKiBEZWZpbmUgdGhlIG9mZnNldCBvZiB0aGUgZGNoa3N1bSBtZW1iZXIgaW4gc3RydWN0IGpmZnNfcmF3X2lub2RlLiAgKi8KLSNkZWZpbmUgSkZGU19SQVdfSU5PREVfRENIS1NVTV9PRkZTRVQgKHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpICAgXAotCQkJCSAgICAgICAtIHNpemVvZihfX3UxNikgLSBzaXplb2YoX191MTYpIFwKLQkJCQkgICAgICAgLSBzaXplb2YoX191MzIpKQotCi0KLS8qIFRoZSBSQU0gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUuICBUaGUgbmFtZXMgb2YgcG9pbnRlcnMgdG8KLSAgIGpmZnNfbm9kZXMgYXJlIHZlcnkgb2Z0ZW4ganVzdCBjYWxsZWQgYG4nIGluIHRoZSBzb3VyY2UgY29kZS4gICovCi1zdHJ1Y3QgamZmc19ub2RlCi17Ci0JX191MzIgaW5vOyAgICAgICAgICAvKiBJbm9kZSBudW1iZXIuICAqLwotCV9fdTMyIHZlcnNpb247ICAgICAgLyogVmVyc2lvbiBudW1iZXIuICAqLwotCV9fdTMyIGRhdGFfb2Zmc2V0OyAgLyogTG9naWMgbG9jYXRpb24gb2YgdGhlIGRhdGEgdG8gaW5zZXJ0LiAgKi8KLQlfX3UzMiBkYXRhX3NpemU7ICAgIC8qIFRoZSBhbW91bnQgb2YgZGF0YSB0aGlzIG5vZGUgaW5zZXJ0cy4gICovCi0JX191MzIgcmVtb3ZlZF9zaXplOyAvKiBUaGUgYW1vdW50IG9mIGRhdGEgdGhhdCB0aGlzIG5vZGUgcmVtb3Zlcy4gICovCi0JX191MzIgZm1fb2Zmc2V0OyAgICAvKiBQaHlzaWNhbCBsb2NhdGlvbiBvZiB0aGUgZGF0YSBpbiB0aGUgYWN0dWFsCi0JCQkgICAgICAgZmxhc2ggbWVtb3J5IGRhdGEgY2h1bmsuICAqLwotCV9fdTggbmFtZV9zaXplOyAgICAgLyogU2l6ZSBvZiB0aGUgbmFtZS4gICovCi0Jc3RydWN0IGpmZnNfZm0gKmZtOyAvKiBQaHlzaWNhbCBtZW1vcnkgaW5mb3JtYXRpb24uICAqLwotCXN0cnVjdCBqZmZzX25vZGUgKnZlcnNpb25fcHJldjsKLQlzdHJ1Y3QgamZmc19ub2RlICp2ZXJzaW9uX25leHQ7Ci0Jc3RydWN0IGpmZnNfbm9kZSAqcmFuZ2VfcHJldjsKLQlzdHJ1Y3QgamZmc19ub2RlICpyYW5nZV9uZXh0OwotfTsKLQotCi0vKiBUaGUgUkFNIHJlcHJlc2VudGF0aW9uIG9mIGEgZmlsZSAocGxhaW4gZmlsZXMsIGRpcmVjdG9yaWVzLAotICAgbGlua3MsIGV0Yy4pLiAgUG9pbnRlcnMgdG8gamZmc19maWxlcyBhcmUgbm9ybWFsbHkgbmFtZWQgYGYnCi0gICBpbiB0aGUgSkZGUyBzb3VyY2UgY29kZS4gICovCi1zdHJ1Y3QgamZmc19maWxlCi17Ci0JX191MzIgaW5vOyAgICAvKiBJbm9kZSBudW1iZXIuICAqLwotCV9fdTMyIHBpbm87ICAgLyogUGFyZW50J3MgaW5vZGUgbnVtYmVyLiAgKi8KLQlfX3UzMiBtb2RlOyAgIC8qIGZpbGVfdHlwZSwgbW9kZSAgKi8KLQlfX3UxNiB1aWQ7ICAgIC8qIG93bmVyICAqLwotCV9fdTE2IGdpZDsgICAgLyogZ3JvdXAgICovCi0JX191MzIgYXRpbWU7ICAvKiBMYXN0IGFjY2VzcyB0aW1lLiAgKi8KLQlfX3UzMiBtdGltZTsgIC8qIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUuICAqLwotCV9fdTMyIGN0aW1lOyAgLyogQ3JlYXRpb24gdGltZS4gICovCi0JX191OCBuc2l6ZTsgICAvKiBOYW1lIGxlbmd0aC4gICovCi0JX191OCBubGluazsgICAvKiBOdW1iZXIgb2YgbGlua3MuICAqLwotCV9fdTggZGVsZXRlZDsgLyogSGFzIHRoaXMgZmlsZSBiZWVuIGRlbGV0ZWQ/ICAqLwotCWNoYXIgKm5hbWU7ICAgLyogVGhlIG5hbWUgb2YgdGhpcyBmaWxlOyBOVUxMLXRlcm1pbmF0ZWQuICAqLwotCV9fdTMyIHNpemU7ICAgLyogVGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGUncyBkYXRhLiAgKi8KLQlfX3UzMiBoaWdoZXN0X3ZlcnNpb247IC8qIFRoZSBoaWdoZXN0IHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgZmlsZS4gICovCi0Jc3RydWN0IGpmZnNfY29udHJvbCAqYzsKLQlzdHJ1Y3QgamZmc19maWxlICpwYXJlbnQ7ICAgLyogUmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5LiAgKi8KLQlzdHJ1Y3QgamZmc19maWxlICpjaGlsZHJlbjsgLyogQWx3YXlzIE5VTEwgZm9yIHBsYWluIGZpbGVzLiAgKi8KLQlzdHJ1Y3QgamZmc19maWxlICpzaWJsaW5nX3ByZXY7IC8qIFNpYmxpbmdzIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gICovCi0Jc3RydWN0IGpmZnNfZmlsZSAqc2libGluZ19uZXh0OwotCXN0cnVjdCBsaXN0X2hlYWQgaGFzaDsgICAgLyogaGFzaCBsaXN0LiAgKi8KLQlzdHJ1Y3QgamZmc19ub2RlICpyYW5nZV9oZWFkOyAgIC8qIFRoZSBmaW5hbCBkYXRhLiAgKi8KLQlzdHJ1Y3QgamZmc19ub2RlICpyYW5nZV90YWlsOyAgIC8qIFRoZSBmaXJzdCBkYXRhLiAgKi8KLQlzdHJ1Y3QgamZmc19ub2RlICp2ZXJzaW9uX2hlYWQ7IC8qIFRoZSB5b3VuZ2VzdCBub2RlLiAgKi8KLQlzdHJ1Y3QgamZmc19ub2RlICp2ZXJzaW9uX3RhaWw7IC8qIFRoZSBvbGRlc3Qgbm9kZS4gICovCi19OwotCi0KLS8qIFRoaXMgaXMganVzdCBhIGRlZmluaXRpb24gb2YgYSBzaW1wbGUgbGlzdCB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mCi0gICBmaWxlcyBkZWxldGVkIGR1ZSB0byBhIHJlbmFtZS4gIFRoaXMgbGlzdCBpcyBvbmx5IHVzZWQgZHVyaW5nIHRoZQotICAgbW91bnRpbmcgb2YgdGhlIGZpbGUgc3lzdGVtIGFuZCBvbmx5IGlmIHRoZXJlIGhhdmUgYmVlbiByZW5hbWUgb3BlcmF0aW9ucwotICAgZWFybGllci4gICovCi1zdHJ1Y3QgamZmc19kZWxldGVfbGlzdAotewotCV9fdTMyIGlubzsKLQlzdHJ1Y3QgamZmc19kZWxldGVfbGlzdCAqbmV4dDsKLX07Ci0KLQotLyogQSBzdHJ1Y3QgZm9yIHRoZSBvdmVyYWxsIGZpbGUgc3lzdGVtIGNvbnRyb2wuICBQb2ludGVycyB0bwotICAgamZmc19jb250cm9sIHN0cnVjdHMgYXJlIG5hbWVkIGBjJyBpbiB0aGUgc291cmNlIGNvZGUuICAqLwotc3RydWN0IGpmZnNfY29udHJvbAotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CQkvKiBSZWZlcmVuY2UgdG8gdGhlIFZGUyBzdXBlciBibG9jay4gICovCi0Jc3RydWN0IGpmZnNfZmlsZSAqcm9vdDsJCS8qIFRoZSByb290IGRpcmVjdG9yeSBmaWxlLiAgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkICpoYXNoOwkJLyogSGFzaCB0YWJsZSBmb3IgZmluZGluZyBmaWxlcyBieSBpbm8uICAqLwotCXN0cnVjdCBqZmZzX2ZtY29udHJvbCAqZm1jOwkvKiBGbGFzaCBtZW1vcnkgY29udHJvbCBzdHJ1Y3R1cmUuICAqLwotCV9fdTMyIGhhc2hfbGVuOwkJCS8qIFRoZSBzaXplIG9mIHRoZSBoYXNoIHRhYmxlLiAgKi8KLQlfX3UzMiBuZXh0X2lubzsJCQkvKiBOZXh0IGlub2RlIG51bWJlciB0byB1c2UgZm9yIG5ldyBmaWxlcy4gICovCi0JX191MTYgYnVpbGRpbmdfZnM7CQkvKiBJcyB0aGUgZmlsZSBzeXN0ZW0gYmVpbmcgYnVpbHQgcmlnaHQgbm93PyAgKi8KLQlzdHJ1Y3QgamZmc19kZWxldGVfbGlzdCAqZGVsZXRlX2xpc3Q7IC8qIFRyYWNrIGRlbGV0ZWQgZmlsZXMuICAqLwotCXBpZF90IHRocmVhZF9waWQ7CQkvKiBHQyB0aHJlYWQncyBQSUQgKi8KLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdjX3Rhc2s7CS8qIEdDIHRhc2sgc3RydWN0ICovCi0Jc3RydWN0IGNvbXBsZXRpb24gZ2NfdGhyZWFkX2NvbXA7IC8qIEdDIHRocmVhZCBleGl0IG11dGV4ICovCi0JX191MzIgZ2NfbWluZnJlZV90aHJlc2hvbGQ7CS8qIEdDIHRyaWdnZXIgdGhyZXNob2xkcyAqLwotCV9fdTMyIGdjX21heGRpcnR5X3RocmVzaG9sZDsKLX07Ci0KLQotLyogVXNlZCB0byBpbmZvcm0gYWJvdXQgZmxhc2ggc3RhdHVzLiAgKi8KLXN0cnVjdCBqZmZzX2ZsYXNoX3N0YXR1cwotewotCV9fdTMyIHNpemU7Ci0JX191MzIgdXNlZDsKLQlfX3UzMiBkaXJ0eTsKLQlfX3UzMiBiZWdpbjsKLQlfX3UzMiBlbmQ7Ci19OwotCi0vKiBUaGlzIHN0dWZmIGNvdWxkIGJlIHVzZWQgZm9yIGZpbmRpbmcgbWVtb3J5IGxlYWtzLiAgKi8KLSNkZWZpbmUgSkZGU19NRU1PUllfREVCVUcgMAotCi1leHRlcm4gbG9uZyBub19qZmZzX25vZGU7Ci0jaWYgZGVmaW5lZChKRkZTX01FTU9SWV9ERUJVRykgJiYgSkZGU19NRU1PUllfREVCVUcKLWV4dGVybiBsb25nIG5vX2pmZnNfY29udHJvbDsKLWV4dGVybiBsb25nIG5vX2pmZnNfcmF3X2lub2RlOwotZXh0ZXJuIGxvbmcgbm9famZmc19ub2RlX3JlZjsKLWV4dGVybiBsb25nIG5vX2pmZnNfZm07Ci1leHRlcm4gbG9uZyBub19qZmZzX2ZtY29udHJvbDsKLWV4dGVybiBsb25nIG5vX2hhc2g7Ci1leHRlcm4gbG9uZyBub19uYW1lOwotI2RlZmluZSBESk0oeCkgeAotI2Vsc2UKLSNkZWZpbmUgREpNKHgpCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fTElOVVhfSkZGU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamlmZmllcy5oIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKaW5kZXggMGVjNmUyOC4uYzA4MGY2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKQEAgLTE0MiwxMyArMTQyLDEzIEBACiAgKgogICogQW5kIHNvbWUgbm90IHNvIG9idmlvdXMuCiAgKgotICogTm90ZSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIE1BWF9MT05HLCBiZWNhdXNlCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byByZXR1cm4gTE9OR19NQVgsIGJlY2F1c2UKICAqIGZvciB2YXJpb3VzIHRpbWVvdXQgcmVhc29ucyB3ZSBvZnRlbiBlbmQgdXAgaGF2aW5nCiAgKiB0byB3YWl0ICJqaWZmaWVzKzEiIGluIG9yZGVyIHRvIGd1YXJhbnRlZSB0aGF0IHdlIHdhaXQKICAqIGF0IF9sZWFzdF8gImppZmZpZXMiIC0gc28gImppZmZpZXMrMSIgaGFkIGJldHRlciBzdGlsbAogICogYmUgcG9zaXRpdmUuCiAgKi8KLSNkZWZpbmUgTUFYX0pJRkZZX09GRlNFVCAoKH4wVUwgPj4gMSktMSkKKyNkZWZpbmUgTUFYX0pJRkZZX09GRlNFVCAoKExPTkdfTUFYID4+IDEpLTEpCiAKIC8qCiAgKiBXZSB3YW50IHRvIGRvIHJlYWxpc3RpYyBjb252ZXJzaW9ucyBvZiB0aW1lIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSBzYW1lCkBAIC0yNTksMjA3ICsyNTksMjMgQEAKICNlbmRpZgogCiAvKgotICogQ29udmVydCBqaWZmaWVzIHRvIG1pbGxpc2Vjb25kcyBhbmQgYmFjay4KLSAqCi0gKiBBdm9pZCB1bm5lY2Vzc2FyeSBtdWx0aXBsaWNhdGlvbnMvZGl2aXNpb25zIGluIHRoZQotICogdHdvIG1vc3QgY29tbW9uIEhaIGNhc2VzOgorICogQ29udmVydCB2YXJpb3VzIHRpbWUgdW5pdHMgdG8gZWFjaCBvdGhlcjoKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgamlmZmllc190b19tc2Vjcyhjb25zdCB1bnNpZ25lZCBsb25nIGopCi17Ci0jaWYgSFogPD0gTVNFQ19QRVJfU0VDICYmICEoTVNFQ19QRVJfU0VDICUgSFopCi0JcmV0dXJuIChNU0VDX1BFUl9TRUMgLyBIWikgKiBqOwotI2VsaWYgSFogPiBNU0VDX1BFUl9TRUMgJiYgIShIWiAlIE1TRUNfUEVSX1NFQykKLQlyZXR1cm4gKGogKyAoSFogLyBNU0VDX1BFUl9TRUMpIC0gMSkvKEhaIC8gTVNFQ19QRVJfU0VDKTsKLSNlbHNlCi0JcmV0dXJuIChqICogTVNFQ19QRVJfU0VDKSAvIEhaOwotI2VuZGlmCi19CitleHRlcm4gdW5zaWduZWQgaW50IGppZmZpZXNfdG9fbXNlY3MoY29uc3QgdW5zaWduZWQgbG9uZyBqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgamlmZmllc190b191c2Vjcyhjb25zdCB1bnNpZ25lZCBsb25nIGopOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXNlY3NfdG9famlmZmllcyhjb25zdCB1bnNpZ25lZCBpbnQgbSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB1c2Vjc190b19qaWZmaWVzKGNvbnN0IHVuc2lnbmVkIGludCB1KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRpbWVzcGVjX3RvX2ppZmZpZXMoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp2YWx1ZSk7CitleHRlcm4gdm9pZCBqaWZmaWVzX3RvX3RpbWVzcGVjKGNvbnN0IHVuc2lnbmVkIGxvbmcgamlmZmllcywKKwkJCQlzdHJ1Y3QgdGltZXNwZWMgKnZhbHVlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRpbWV2YWxfdG9famlmZmllcyhjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdmFsdWUpOworZXh0ZXJuIHZvaWQgamlmZmllc190b190aW1ldmFsKGNvbnN0IHVuc2lnbmVkIGxvbmcgamlmZmllcywKKwkJCSAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdmFsdWUpOworZXh0ZXJuIGNsb2NrX3QgamlmZmllc190b19jbG9ja190KGxvbmcgeCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBjbG9ja190X3RvX2ppZmZpZXModW5zaWduZWQgbG9uZyB4KTsKK2V4dGVybiB1NjQgamlmZmllc182NF90b19jbG9ja190KHU2NCB4KTsKK2V4dGVybiB1NjQgbnNlY190b19jbG9ja190KHU2NCB4KTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgamlmZmllc190b191c2Vjcyhjb25zdCB1bnNpZ25lZCBsb25nIGopCi17Ci0jaWYgSFogPD0gVVNFQ19QRVJfU0VDICYmICEoVVNFQ19QRVJfU0VDICUgSFopCi0JcmV0dXJuIChVU0VDX1BFUl9TRUMgLyBIWikgKiBqOwotI2VsaWYgSFogPiBVU0VDX1BFUl9TRUMgJiYgIShIWiAlIFVTRUNfUEVSX1NFQykKLQlyZXR1cm4gKGogKyAoSFogLyBVU0VDX1BFUl9TRUMpIC0gMSkvKEhaIC8gVVNFQ19QRVJfU0VDKTsKLSNlbHNlCi0JcmV0dXJuIChqICogVVNFQ19QRVJfU0VDKSAvIEhaOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtc2Vjc190b19qaWZmaWVzKGNvbnN0IHVuc2lnbmVkIGludCBtKQotewotCWlmIChtID4gamlmZmllc190b19tc2VjcyhNQVhfSklGRllfT0ZGU0VUKSkKLQkJcmV0dXJuIE1BWF9KSUZGWV9PRkZTRVQ7Ci0jaWYgSFogPD0gTVNFQ19QRVJfU0VDICYmICEoTVNFQ19QRVJfU0VDICUgSFopCi0JcmV0dXJuIChtICsgKE1TRUNfUEVSX1NFQyAvIEhaKSAtIDEpIC8gKE1TRUNfUEVSX1NFQyAvIEhaKTsKLSNlbGlmIEhaID4gTVNFQ19QRVJfU0VDICYmICEoSFogJSBNU0VDX1BFUl9TRUMpCi0JcmV0dXJuIG0gKiAoSFogLyBNU0VDX1BFUl9TRUMpOwotI2Vsc2UKLQlyZXR1cm4gKG0gKiBIWiArIE1TRUNfUEVSX1NFQyAtIDEpIC8gTVNFQ19QRVJfU0VDOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1c2Vjc190b19qaWZmaWVzKGNvbnN0IHVuc2lnbmVkIGludCB1KQotewotCWlmICh1ID4gamlmZmllc190b191c2VjcyhNQVhfSklGRllfT0ZGU0VUKSkKLQkJcmV0dXJuIE1BWF9KSUZGWV9PRkZTRVQ7Ci0jaWYgSFogPD0gVVNFQ19QRVJfU0VDICYmICEoVVNFQ19QRVJfU0VDICUgSFopCi0JcmV0dXJuICh1ICsgKFVTRUNfUEVSX1NFQyAvIEhaKSAtIDEpIC8gKFVTRUNfUEVSX1NFQyAvIEhaKTsKLSNlbGlmIEhaID4gVVNFQ19QRVJfU0VDICYmICEoSFogJSBVU0VDX1BFUl9TRUMpCi0JcmV0dXJuIHUgKiAoSFogLyBVU0VDX1BFUl9TRUMpOwotI2Vsc2UKLQlyZXR1cm4gKHUgKiBIWiArIFVTRUNfUEVSX1NFQyAtIDEpIC8gVVNFQ19QRVJfU0VDOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBUaGUgVElDS19OU0VDIC0gMSByb3VuZHMgdXAgdGhlIHZhbHVlIHRvIHRoZSBuZXh0IHJlc29sdXRpb24uICBOb3RlCi0gKiB0aGF0IGEgcmVtYWluZGVyIHN1YnRyYWN0IGhlcmUgd291bGQgbm90IGRvIHRoZSByaWdodCB0aGluZyBhcyB0aGUKLSAqIHJlc29sdXRpb24gdmFsdWVzIGRvbid0IGZhbGwgb24gc2Vjb25kIGJvdW5kcmllcy4gIEkuZS4gdGhlIGxpbmU6Ci0gKiBuc2VjIC09IG5zZWMgJSBUSUNLX05TRUM7IGlzIE5PVCBhIGNvcnJlY3QgcmVzb2x1dGlvbiByb3VuZGluZy4KLSAqCi0gKiBSYXRoZXIsIHdlIGp1c3Qgc2hpZnQgdGhlIGJpdHMgb2ZmIHRoZSByaWdodC4KLSAqCi0gKiBUaGUgPj4gKE5TRUNfSklGRklFX1NDIC0gU0VDX0pJRkZJRV9TQykgY29udmVydHMgdGhlIHNjYWxlZCBuc2VjCi0gKiB2YWx1ZSB0byBhIHNjYWxlZCBzZWNvbmQgdmFsdWUuCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKLXRpbWVzcGVjX3RvX2ppZmZpZXMoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHNlYyA9IHZhbHVlLT50dl9zZWM7Ci0JbG9uZyBuc2VjID0gdmFsdWUtPnR2X25zZWMgKyBUSUNLX05TRUMgLSAxOwotCi0JaWYgKHNlYyA+PSBNQVhfU0VDX0lOX0pJRkZJRVMpewotCQlzZWMgPSBNQVhfU0VDX0lOX0pJRkZJRVM7Ci0JCW5zZWMgPSAwOwotCX0KLQlyZXR1cm4gKCgodTY0KXNlYyAqIFNFQ19DT05WRVJTSU9OKSArCi0JCSgoKHU2NCluc2VjICogTlNFQ19DT05WRVJTSU9OKSA+PgotCQkgKE5TRUNfSklGRklFX1NDIC0gU0VDX0pJRkZJRV9TQykpKSA+PiBTRUNfSklGRklFX1NDOwotCi19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWppZmZpZXNfdG9fdGltZXNwZWMoY29uc3QgdW5zaWduZWQgbG9uZyBqaWZmaWVzLCBzdHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQotewotCS8qCi0JICogQ29udmVydCBqaWZmaWVzIHRvIG5hbm9zZWNvbmRzIGFuZCBzZXBhcmF0ZSB3aXRoCi0JICogb25lIGRpdmlkZS4KLQkgKi8KLQl1NjQgbnNlYyA9ICh1NjQpamlmZmllcyAqIFRJQ0tfTlNFQzsKLQl2YWx1ZS0+dHZfc2VjID0gZGl2X2xvbmdfbG9uZ19yZW0obnNlYywgTlNFQ19QRVJfU0VDLCAmdmFsdWUtPnR2X25zZWMpOwotfQotCi0vKiBTYW1lIGZvciAidGltZXZhbCIKLSAqCi0gKiBXZWxsLCBhbG1vc3QuICBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgdGhlIHJlYWwgc3lzdGVtIHJlc29sdXRpb24gaXMKLSAqIGluIG5hbm9zZWNvbmRzIGFuZCB0aGUgdmFsdWUgYmVpbmcgY29udmVydGVkIGlzIGluIG1pY3JvIHNlY29uZHMuCi0gKiBBbHNvIGZvciBzb21lIG1hY2hpbmVzICh0aG9zZSB0aGF0IHVzZSBIWiA9IDEwMjQsIGluLXBhcnRpY3VsYXIpLAotICogdGhlcmUgaXMgYSBMQVJHRSBlcnJvciBpbiB0aGUgdGljayBzaXplIGluIG1pY3Jvc2Vjb25kcy4KLQotICogVGhlIHNvbHV0aW9uIHdlIHVzZSBpcyB0byBkbyB0aGUgcm91bmRpbmcgQUZURVIgd2UgY29udmVydCB0aGUKLSAqIG1pY3Jvc2Vjb25kIHBhcnQuICBUaHVzIHRoZSBVU0VDX1JPVU5ELCB0aGUgYml0cyB0byBiZSBzaGlmdGVkIG9mZi4KLSAqIEluc3RydWN0aW9uIHdpc2UsIHRoaXMgc2hvdWxkIGNvc3Qgb25seSBhbiBhZGRpdGlvbmFsIGFkZCB3aXRoIGNhcnJ5Ci0gKiBpbnN0cnVjdGlvbiBhYm92ZSB0aGUgd2F5IGl0IHdhcyBkb25lIGFib3ZlLgotICovCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCi10aW1ldmFsX3RvX2ppZmZpZXMoY29uc3Qgc3RydWN0IHRpbWV2YWwgKnZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgc2VjID0gdmFsdWUtPnR2X3NlYzsKLQlsb25nIHVzZWMgPSB2YWx1ZS0+dHZfdXNlYzsKLQotCWlmIChzZWMgPj0gTUFYX1NFQ19JTl9KSUZGSUVTKXsKLQkJc2VjID0gTUFYX1NFQ19JTl9KSUZGSUVTOwotCQl1c2VjID0gMDsKLQl9Ci0JcmV0dXJuICgoKHU2NClzZWMgKiBTRUNfQ09OVkVSU0lPTikgKwotCQkoKCh1NjQpdXNlYyAqIFVTRUNfQ09OVkVSU0lPTiArIFVTRUNfUk9VTkQpID4+Ci0JCSAoVVNFQ19KSUZGSUVfU0MgLSBTRUNfSklGRklFX1NDKSkpID4+IFNFQ19KSUZGSUVfU0M7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWppZmZpZXNfdG9fdGltZXZhbChjb25zdCB1bnNpZ25lZCBsb25nIGppZmZpZXMsIHN0cnVjdCB0aW1ldmFsICp2YWx1ZSkKLXsKLQkvKgotCSAqIENvbnZlcnQgamlmZmllcyB0byBuYW5vc2Vjb25kcyBhbmQgc2VwYXJhdGUgd2l0aAotCSAqIG9uZSBkaXZpZGUuCi0JICovCi0JdTY0IG5zZWMgPSAodTY0KWppZmZpZXMgKiBUSUNLX05TRUM7Ci0JbG9uZyB0dl91c2VjOwotCi0JdmFsdWUtPnR2X3NlYyA9IGRpdl9sb25nX2xvbmdfcmVtKG5zZWMsIE5TRUNfUEVSX1NFQywgJnR2X3VzZWMpOwotCXR2X3VzZWMgLz0gTlNFQ19QRVJfVVNFQzsKLQl2YWx1ZS0+dHZfdXNlYyA9IHR2X3VzZWM7Ci19Ci0KLS8qCi0gKiBDb252ZXJ0IGppZmZpZXMvamlmZmllc182NCB0byBjbG9ja190IGFuZCBiYWNrLgotICovCi1zdGF0aWMgaW5saW5lIGNsb2NrX3QgamlmZmllc190b19jbG9ja190KGxvbmcgeCkKLXsKLSNpZiAoVElDS19OU0VDICUgKE5TRUNfUEVSX1NFQyAvIFVTRVJfSFopKSA9PSAwCi0JcmV0dXJuIHggLyAoSFogLyBVU0VSX0haKTsKLSNlbHNlCi0JdTY0IHRtcCA9ICh1NjQpeCAqIFRJQ0tfTlNFQzsKLQlkb19kaXYodG1wLCAoTlNFQ19QRVJfU0VDIC8gVVNFUl9IWikpOwotCXJldHVybiAobG9uZyl0bXA7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNsb2NrX3RfdG9famlmZmllcyh1bnNpZ25lZCBsb25nIHgpCi17Ci0jaWYgKEhaICUgVVNFUl9IWik9PTAKLQlpZiAoeCA+PSB+MFVMIC8gKEhaIC8gVVNFUl9IWikpCi0JCXJldHVybiB+MFVMOwotCXJldHVybiB4ICogKEhaIC8gVVNFUl9IWik7Ci0jZWxzZQotCXU2NCBqaWY7Ci0KLQkvKiBEb24ndCB3b3JyeSBhYm91dCBsb3NzIG9mIHByZWNpc2lvbiBoZXJlIC4uICovCi0JaWYgKHggPj0gfjBVTCAvIEhaICogVVNFUl9IWikKLQkJcmV0dXJuIH4wVUw7Ci0KLQkvKiAuLiBidXQgZG8gdHJ5IHRvIGNvbnRhaW4gaXQgaGVyZSAqLwotCWppZiA9IHggKiAodTY0KSBIWjsKLQlkb19kaXYoamlmLCBVU0VSX0haKTsKLQlyZXR1cm4gamlmOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdTY0IGppZmZpZXNfNjRfdG9fY2xvY2tfdCh1NjQgeCkKLXsKLSNpZiAoVElDS19OU0VDICUgKE5TRUNfUEVSX1NFQyAvIFVTRVJfSFopKSA9PSAwCi0JZG9fZGl2KHgsIEhaIC8gVVNFUl9IWik7Ci0jZWxzZQotCS8qCi0JICogVGhlcmUgYXJlIGJldHRlciB3YXlzIHRoYXQgZG9uJ3Qgb3ZlcmZsb3cgZWFybHksCi0JICogYnV0IGV2ZW4gdGhpcyBkb2Vzbid0IG92ZXJmbG93IGluIGh1bmRyZWRzIG9mIHllYXJzCi0JICogaW4gNjQgYml0cywgc28uLgotCSAqLwotCXggKj0gVElDS19OU0VDOwotCWRvX2Rpdih4LCAoTlNFQ19QRVJfU0VDIC8gVVNFUl9IWikpOwotI2VuZGlmCi0JcmV0dXJuIHg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTY0IG5zZWNfdG9fY2xvY2tfdCh1NjQgeCkKLXsKLSNpZiAoTlNFQ19QRVJfU0VDICUgVVNFUl9IWikgPT0gMAotCWRvX2Rpdih4LCAoTlNFQ19QRVJfU0VDIC8gVVNFUl9IWikpOwotI2VsaWYgKFVTRVJfSFogJSA1MTIpID09IDAKLQl4ICo9IFVTRVJfSFovNTEyOwotCWRvX2Rpdih4LCAoTlNFQ19QRVJfU0VDIC8gNTEyKSk7Ci0jZWxzZQotCS8qCi0gICAgICAgICAqIG1heCByZWxhdGl2ZSBlcnJvciA1LjdlLTggKDEuOHMgcGVyIHllYXIpIGZvciBVU0VSX0haIDw9IDEwMjQsCi0gICAgICAgICAqIG92ZXJmbG93IGFmdGVyIDY0Ljk5IHllYXJzLgotICAgICAgICAgKiBleGFjdCBmb3IgSFo9NjAsIDcyLCA5MCwgMTIwLCAxNDQsIDE4MCwgMzAwLCA2MDAsIDkwMCwgLi4uCi0gICAgICAgICAqLwotCXggKj0gOTsKLQlkb19kaXYoeCwgKHVuc2lnbmVkIGxvbmcpKCg5dWxsICogTlNFQ19QRVJfU0VDICsgKFVTRVJfSFovMikpCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAvIFVTRVJfSFopKTsKLSNlbmRpZgotCXJldHVybiB4OwotfQorI2RlZmluZSBUSU1FU1RBTVBfU0laRQkzMAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2Rldl90LmggYi9pbmNsdWRlL2xpbnV4L2tkZXZfdC5oCmluZGV4IGJjZWVhNTIuLjRjMmMzNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2Rldl90LmgKKysrIGIvaW5jbHVkZS9saW51eC9rZGV2X3QuaApAQCAtODcsNiArODcsNyBAQAogCXJldHVybiBkZXYgJiAweDNmZmZmOwogfQogCitib29sIGlzX2xhbmFuYV9tYWpvcih1bnNpZ25lZCBpbnQgbWFqb3IpOwogCiAjZWxzZSAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V4ZWMuaCBiL2luY2x1ZGUvbGludXgva2V4ZWMuaAppbmRleCBkMDI0MjVjLi42OTZlNWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXhlYy5oCkBAIC0xMjUsNiArMTI1LDcgQEAKICNkZWZpbmUgS0VYRUNfQVJDSF9QUEMgICAgICgyMCA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF9QUEM2NCAgICgyMSA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF9JQV82NCAgICg1MCA8PCAxNikKKyNkZWZpbmUgS0VYRUNfQVJDSF9BUk0gICAgICg0MCA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF9TMzkwICAgICgyMiA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF9TSCAgICAgICg0MiA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF9NSVBTX0xFICgxMCA8PCAxNikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21vZC5oIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKaW5kZXggMTBmNTA1Yy4uY2M4ZTY3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbW9kLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKQEAgLTI4LDggKzI4LDEwIEBACiAjaWZkZWYgQ09ORklHX0tNT0QKIC8qIG1vZHByb2JlIGV4aXQgc3RhdHVzIG9uIHN1Y2Nlc3MsIC12ZSBvbiBlcnJvci4gIFJldHVybiB2YWx1ZQogICogdXN1YWxseSB1c2VsZXNzIHRob3VnaC4gKi8KK2V4dGVybiB2b2lkIGttb2Rfc3lzZnNfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgcmVxdWVzdF9tb2R1bGUoY29uc3QgY2hhciAqIG5hbWUsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbW9kX3N5c2ZzX2luaXQodm9pZCkge307CiBzdGF0aWMgaW5saW5lIGludCByZXF1ZXN0X21vZHVsZShjb25zdCBjaGFyICogbmFtZSwgLi4uKSB7IHJldHVybiAtRU5PU1lTOyB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rczAxMDguaCBiL2luY2x1ZGUvbGludXgva3MwMTA4LmgKaW5kZXggODA0N2Q0Yi4uYTJjNTRhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rczAxMDguaAorKysgYi9pbmNsdWRlL2xpbnV4L2tzMDEwOC5oCkBAIC00Myw0ICs0Myw3IEBACiAvKiBTZXQgdGhlIGNvbnRyb2xsZXIncyBjdXJyZW50IHBhZ2UgKDAuLjcpICovCiBleHRlcm4gdm9pZCBrczAxMDhfcGFnZSh1bnNpZ25lZCBjaGFyIHBhZ2UpOwogCisvKiBJcyB0aGUgbW9kdWxlIGluaXRlZD8gKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIGtzMDEwOF9pc2luaXRlZCh2b2lkKTsKKwogI2VuZGlmIC8qIF9LUzAxMDhfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3RpbWUuaCBiL2luY2x1ZGUvbGludXgva3RpbWUuaAppbmRleCA3NDQ0YTYzLi5jNjhjN2FjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t0aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC9rdGltZS5oCkBAIC0yNjEsOCArMjYxLDcgQEAKICAqIGlkZWEgb2YgdGhlIChpbilhY2N1cmFjeSBvZiB0aW1lcnMuIFRpbWVyIHZhbHVlcyBhcmUgcm91bmRlZCB1cCB0bwogICogdGhpcyByZXNvbHV0aW9uIHZhbHVlcy4KICAqLwotI2RlZmluZSBLVElNRV9SRUFMVElNRV9SRVMJKGt0aW1lX3QpeyAudHY2NCA9IFRJQ0tfTlNFQyB9Ci0jZGVmaW5lIEtUSU1FX01PTk9UT05JQ19SRVMJKGt0aW1lX3QpeyAudHY2NCA9IFRJQ0tfTlNFQyB9CisjZGVmaW5lIEtUSU1FX0xPV19SRVMJCShrdGltZV90KXsgLnR2NjQgPSBUSUNLX05TRUMgfQogCiAvKiBHZXQgdGhlIG1vbm90b25pYyB0aW1lIGluIHRpbWVzcGVjIGZvcm1hdDogKi8KIGV4dGVybiB2b2lkIGt0aW1lX2dldF90cyhzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGNkLmggYi9pbmNsdWRlL2xpbnV4L2xjZC5oCmluZGV4IGQ3MzliMmUuLjU5ODc5M2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGNkLmgKKysrIGIvaW5jbHVkZS9saW51eC9sY2QuaApAQCAtOSwyMiArOSwzOCBAQAogI2RlZmluZSBfTElOVVhfTENEX0gKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIAorLyogTm90ZXMgb24gbG9ja2luZzoKKyAqCisgKiBsY2RfZGV2aWNlLT5vcHNfbG9jayBpcyBhbiBpbnRlcm5hbCBiYWNrbGlnaHQgbG9jayBwcm90ZWN0aW5nIHRoZSBvcHMKKyAqIGZpZWxkIGFuZCBubyBjb2RlIG91dHNpZGUgdGhlIGNvcmUgc2hvdWxkIG5lZWQgdG8gdG91Y2ggaXQuCisgKgorICogQWNjZXNzIHRvIHNldF9wb3dlcigpIGlzIHNlcmlhbGlzZWQgYnkgdGhlIHVwZGF0ZV9sb2NrIG11dGV4IHNpbmNlCisgKiBtb3N0IGRyaXZlcnMgc2VlbSB0byBuZWVkIHRoaXMgYW5kIGhpc3RvcmljYWxseSBnZXQgaXQgd3JvbmcuCisgKgorICogTW9zdCBkcml2ZXJzIGRvbid0IG5lZWQgbG9ja2luZyBvbiB0aGVpciBnZXRfcG93ZXIoKSBtZXRob2QuCisgKiBJZiB5b3VycyBkb2VzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgaXQgaW4gdGhlIGRyaXZlci4gWW91IGNhbiB1c2UgdGhlCisgKiB1cGRhdGVfbG9jayBtdXRleCBpZiBhcHByb3ByaWF0ZS4KKyAqCisgKiBBbnkgb3RoZXIgdXNlIG9mIHRoZSBsb2NrcyBiZWxvdyBpcyBwcm9iYWJseSB3cm9uZy4KKyAqLworCiBzdHJ1Y3QgbGNkX2RldmljZTsKIHN0cnVjdCBmYl9pbmZvOwogCi0vKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGFsbCB0aGUgcHJvcGVydGllcyBvZiBhIExDRCBmbGF0IHBhbmVsLiAqLwogc3RydWN0IGxjZF9wcm9wZXJ0aWVzIHsKLQkvKiBPd25lciBtb2R1bGUgKi8KLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwkvKiBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgY29udHJhc3QgKHJlYWQtb25seSkgKi8KKwlpbnQgbWF4X2NvbnRyYXN0OworfTsKKworc3RydWN0IGxjZF9vcHMgewogCS8qIEdldCB0aGUgTENEIHBhbmVsIHBvd2VyIHN0YXR1cyAoMDogZnVsbCBvbiwgMS4uMzogY29udHJvbGxlcgogCSAgIHBvd2VyIG9uLCBmbGF0IHBhbmVsIHBvd2VyIG9mZiwgNDogZnVsbCBvZmYpLCBzZWUgRkJfQkxBTktfWFhYICovCiAJaW50ICgqZ2V0X3Bvd2VyKShzdHJ1Y3QgbGNkX2RldmljZSAqKTsKIAkvKiBFbmFibGUgb3IgZGlzYWJsZSBwb3dlciB0byB0aGUgTENEICgwOiBvbjsgNDogb2ZmLCBzZWUgRkJfQkxBTktfWFhYKSAqLwogCWludCAoKnNldF9wb3dlcikoc3RydWN0IGxjZF9kZXZpY2UgKiwgaW50IHBvd2VyKTsKLQkvKiBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgY29udHJhc3QgKHJlYWQtb25seSkgKi8KLQlpbnQgbWF4X2NvbnRyYXN0OwogCS8qIEdldCB0aGUgY3VycmVudCBjb250cmFzdCBzZXR0aW5nICgwLW1heF9jb250cmFzdCkgKi8KIAlpbnQgKCpnZXRfY29udHJhc3QpKHN0cnVjdCBsY2RfZGV2aWNlICopOwogCS8qIFNldCBMQ0QgcGFuZWwgY29udHJhc3QgKi8KQEAgLTM1LDIwICs1MSwzMSBAQAogfTsKIAogc3RydWN0IGxjZF9kZXZpY2UgewotCS8qIFRoaXMgcHJvdGVjdHMgdGhlICdwcm9wcycgZmllbGQuIElmICdwcm9wcycgaXMgTlVMTCwgdGhlIGRyaXZlciB0aGF0CisJc3RydWN0IGxjZF9wcm9wZXJ0aWVzIHByb3BzOworCS8qIFRoaXMgcHJvdGVjdHMgdGhlICdvcHMnIGZpZWxkLiBJZiAnb3BzJyBpcyBOVUxMLCB0aGUgZHJpdmVyIHRoYXQKIAkgICByZWdpc3RlcmVkIHRoaXMgZGV2aWNlIGhhcyBiZWVuIHVubG9hZGVkLCBhbmQgaWYgY2xhc3NfZ2V0X2RldmRhdGEoKQogCSAgIHBvaW50cyB0byBzb21ldGhpbmcgaW4gdGhlIGJvZHkgb2YgdGhhdCBkcml2ZXIsIGl0IGlzIGFsc28gaW52YWxpZC4gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggb3BzX2xvY2s7CiAJLyogSWYgdGhpcyBpcyBOVUxMLCB0aGUgYmFja2luZyBtb2R1bGUgaXMgdW5sb2FkZWQgKi8KLQlzdHJ1Y3QgbGNkX3Byb3BlcnRpZXMgKnByb3BzOworCXN0cnVjdCBsY2Rfb3BzICpvcHM7CisJLyogU2VyaWFsaXNlIGFjY2VzcyB0byBzZXRfcG93ZXIgbWV0aG9kICovCisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCS8qIFRoZSBmcmFtZWJ1ZmZlciBub3RpZmllciBibG9jayAqLwogCXN0cnVjdCBub3RpZmllcl9ibG9jayBmYl9ub3RpZjsKIAkvKiBUaGUgY2xhc3MgZGV2aWNlIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBjbGFzc19kZXZpY2UgY2xhc3NfZGV2OwogfTsKIAorc3RhdGljIGlubGluZSB2b2lkIGxjZF9zZXRfcG93ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmxkLCBpbnQgcG93ZXIpCit7CisJbXV0ZXhfbG9jaygmbGQtPnVwZGF0ZV9sb2NrKTsKKwlpZiAobGQtPm9wcyAmJiBsZC0+b3BzLT5zZXRfcG93ZXIpCisJCWxkLT5vcHMtPnNldF9wb3dlcihsZCwgcG93ZXIpOworCW11dGV4X3VubG9jaygmbGQtPnVwZGF0ZV9sb2NrKTsKK30KKwogZXh0ZXJuIHN0cnVjdCBsY2RfZGV2aWNlICpsY2RfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCi0Jdm9pZCAqZGV2ZGF0YSwgc3RydWN0IGxjZF9wcm9wZXJ0aWVzICpscCk7CisJdm9pZCAqZGV2ZGF0YSwgc3RydWN0IGxjZF9vcHMgKm9wcyk7CiBleHRlcm4gdm9pZCBsY2RfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmxkKTsKIAogI2RlZmluZSB0b19sY2RfZGV2aWNlKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGxjZF9kZXZpY2UsIGNsYXNzX2RldikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDU5NmUwYzEuLjg2NzYyYTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogCiAvKgogICogRGVmaW5lIGlmIGFyY2ggaGFzIG5vbi1zdGFuZGFyZCBzZXR1cC4gIFRoaXMgaXMgYSBfUENJXyBzdGFuZGFyZApAQCAtMTcyLDYgKzE3Myw3IEBACiAJQVRBX0ZMQUdfREVCVUdNU0cJPSAoMSA8PCAxMyksCiAJQVRBX0ZMQUdfU0VUWEZFUl9QT0xMSU5HPSAoMSA8PCAxNCksIC8qIHVzZSBwb2xsaW5nIGZvciBTRVRYRkVSICovCiAJQVRBX0ZMQUdfSUdOX1NJTVBMRVgJPSAoMSA8PCAxNSksIC8qIGlnbm9yZSBTSU1QTEVYICovCisJQVRBX0ZMQUdfTk9fSU9SRFkJPSAoMSA8PCAxNiksIC8qIGNvbnRyb2xsZXIgbGFja3MgaW9yZHkgKi8KIAogCS8qIFRoZSBmb2xsb3dpbmcgZmxhZyBiZWxvbmdzIHRvIGFwLT5wZmxhZ3MgYnV0IGlzIGtlcHQgaW4KIAkgKiBhcC0+ZmxhZ3MgYmVjYXVzZSBpdCdzIHJlZmVyZW5jZWQgaW4gbWFueSBMTERzIGFuZCB3aWxsIGJlCkBAIC00OTQsNiArNDk2LDEwIEBACiAJLyogZXJyb3IgaGlzdG9yeSAqLwogCXN0cnVjdCBhdGFfZXJpbmcJZXJpbmc7CiAJdW5zaWduZWQgaW50CQlob3JrYWdlOwkvKiBMaXN0IG9mIGJyb2tlbiBmZWF0dXJlcyAqLworI2lmZGVmIENPTkZJR19TQVRBX0FDUEkKKwkvKiBBQ1BJIG9iamVjdHMgaW5mbyAqLworCWFjcGlfaGFuZGxlIG9ial9oYW5kbGU7CisjZW5kaWYKIH07CiAKIC8qIE9mZnNldCBpbnRvIHN0cnVjdCBhdGFfZGV2aWNlLiAgRmllbGRzIGFib3ZlIGl0IGFyZSBtYWludGFpbmVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvZzIuaCBiL2luY2x1ZGUvbGludXgvbG9nMi5oCmluZGV4IDk5OTIyYmUuLjU3ZTY0MWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9nMi5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9nMi5oCkBAIC0xNTIsNyArMTUyLDcgQEAKICAqIHJvdW5kdXBfcG93X29mX3R3byAtIHJvdW5kIHRoZSBnaXZlbiB2YWx1ZSB1cCB0byBuZWFyZXN0IHBvd2VyIG9mIHR3bwogICogQG4gLSBwYXJhbWV0ZXIKICAqCi0gKiByb3VuZCB0aGUgZ2l2ZW4gYmFsdWUgdXAgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgdHdvCisgKiByb3VuZCB0aGUgZ2l2ZW4gdmFsdWUgdXAgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgdHdvCiAgKiAtIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIHdoZW4gbiA9PSAwCiAgKiAtIHRoaXMgY2FuIGJlIHVzZWQgdG8gaW5pdGlhbGlzZSBnbG9iYWwgdmFyaWFibGVzIGZyb20gY29uc3RhbnQgZGF0YQogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pbml4X2ZzLmggYi9pbmNsdWRlL2xpbnV4L21pbml4X2ZzLmgKaW5kZXggOTg1MGQ1MS4uMGUzOTc0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taW5peF9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWluaXhfZnMuaApAQCAtNzgsOCArNzgsNyBAQAogICogVjMgbWluaXggc3VwZXItYmxvY2sgZGF0YSBvbiBkaXNrCiAgKi8KIHN0cnVjdCBtaW5peDNfc3VwZXJfYmxvY2sgewotCV9fdTE2IHNfbmlub2RlczsKLQlfX3UxNiBzX256b25lczsKKwlfX3UzMiBzX25pbm9kZXM7CiAJX191MTYgc19wYWQwOwogCV9fdTE2IHNfaW1hcF9ibG9ja3M7CiAJX191MTYgc196bWFwX2Jsb2NrczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IDQxOWQzZWYuLjk1Njc5ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtNzYsOCArNzYsNiBAQAogCQkgIHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpbmlzaCk7CiB2b2lkIHNvcnRfbWFpbl9leHRhYmxlKHZvaWQpOwogCi1leHRlcm4gc3RydWN0IHN1YnN5c3RlbSBtb2R1bGVfc3Vic3lzOwotCiAjaWZkZWYgTU9EVUxFCiAjZGVmaW5lIE1PRFVMRV9HRU5FUklDX1RBQkxFKGd0eXBlLG5hbWUpCQkJXAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBndHlwZSMjX2lkIF9fbW9kXyMjZ3R5cGUjI190YWJsZQkJXApAQCAtNDY3LDEwICs0NjUsNiBAQAogCiBleHRlcm4gdm9pZCBwcmludF9tb2R1bGVzKHZvaWQpOwogCi1zdHJ1Y3QgZGV2aWNlX2RyaXZlcjsKLXZvaWQgbW9kdWxlX2FkZF9kcml2ZXIoc3RydWN0IG1vZHVsZSAqLCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqKTsKLXZvaWQgbW9kdWxlX3JlbW92ZV9kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKik7Ci0KICNlbHNlIC8qICFDT05GSUdfTU9EVUxFUy4uLiAqLwogI2RlZmluZSBFWFBPUlRfU1lNQk9MKHN5bSkKICNkZWZpbmUgRVhQT1JUX1NZTUJPTF9HUEwoc3ltKQpAQCAtNTY4LDE4ICs1NjIsNTkgQEAKIHsKIH0KIAorI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCisKIHN0cnVjdCBkZXZpY2VfZHJpdmVyOworI2lmZGVmIENPTkZJR19TWVNGUwogc3RydWN0IG1vZHVsZTsKIAotc3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV9hZGRfZHJpdmVyKHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcikKK2V4dGVybiBzdHJ1Y3Qgc3Vic3lzdGVtIG1vZHVsZV9zdWJzeXM7CisKK2ludCBtb2Rfc3lzZnNfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpOworaW50IG1vZF9zeXNmc19zZXR1cChzdHJ1Y3QgbW9kdWxlICptb2QsCisJCQkgICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcGFyYW0sCisJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3BhcmFtcyk7CitpbnQgbW9kdWxlX2FkZF9tb2RpbmZvX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCk7Cit2b2lkIG1vZHVsZV9yZW1vdmVfbW9kaW5mb19hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QpOworCisjZWxzZSAvKiAhQ09ORklHX1NZU0ZTICovCisKK3N0YXRpYyBpbmxpbmUgaW50IG1vZF9zeXNmc19pbml0KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV9yZW1vdmVfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgaW5saW5lIGludCBtb2Rfc3lzZnNfc2V0dXAoc3RydWN0IG1vZHVsZSAqbW9kLAorCQkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLAorCQkJICAgdW5zaWduZWQgaW50IG51bV9wYXJhbXMpCiB7CisJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLworc3RhdGljIGlubGluZSBpbnQgbW9kdWxlX2FkZF9tb2RpbmZvX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV9yZW1vdmVfbW9kaW5mb19hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QpCit7IH0KKworI2VuZGlmIC8qIENPTkZJR19TWVNGUyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpICYmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpCisKK3ZvaWQgbW9kdWxlX2FkZF9kcml2ZXIoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTsKK3ZvaWQgbW9kdWxlX3JlbW92ZV9kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydik7CisKKyNlbHNlIC8qIG5vdCBib3RoIENPTkZJR19TWVNGUyAmJiBDT05GSUdfTU9EVUxFUyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbW9kdWxlX2FkZF9kcml2ZXIoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfcmVtb3ZlX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreyB9CisKKyNlbmRpZgogCiAjZGVmaW5lIHN5bWJvbF9yZXF1ZXN0KHgpIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHN5bWJvbF9nZXQoeCksICJzeW1ib2w6IiAjeCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCmluZGV4IDRhMTg5ZGEuLmM4MzU4OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTU5LDcgKzU5LDcgQEAKIH07CiAKIC8qIFRoaXMgaXMgdGhlIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIGZvciByZWdpc3RlcmluZyBib290L21vZHVsZQotICAgcGFyYW1ldGVycy4gIHBlcm0gc2V0cyB0aGUgdmlzaWJpbGl0eSBpbiBkcml2ZXJmczogMDAwIG1lYW5zIGl0J3MKKyAgIHBhcmFtZXRlcnMuICBwZXJtIHNldHMgdGhlIHZpc2liaWxpdHkgaW4gc3lzZnM6IDAwMCBtZWFucyBpdCdzCiAgICBub3QgdGhlcmUsIHJlYWQgYml0cyBtZWFuIGl0J3MgcmVhZGFibGUsIHdyaXRlIGJpdHMgbWVhbiBpdCdzCiAgICB3cml0YWJsZS4gKi8KICNkZWZpbmUgX19tb2R1bGVfcGFyYW1fY2FsbChwcmVmaXgsIG5hbWUsIHNldCwgZ2V0LCBhcmcsIHBlcm0pCQlcCkBAIC0xNjksMTAgKzE2OSwyMiBAQAogCiBzdHJ1Y3QgbW9kdWxlOwogCisjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpICYmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpCiBleHRlcm4gaW50IG1vZHVsZV9wYXJhbV9zeXNmc19zZXR1cChzdHJ1Y3QgbW9kdWxlICptb2QsCiAJCQkJICAgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwKIAkJCQkgICAgdW5zaWduZWQgaW50IG51bV9wYXJhbXMpOwogCiBleHRlcm4gdm9pZCBtb2R1bGVfcGFyYW1fc3lzZnNfcmVtb3ZlKHN0cnVjdCBtb2R1bGUgKm1vZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbW9kdWxlX3BhcmFtX3N5c2ZzX3NldHVwKHN0cnVjdCBtb2R1bGUgKm1vZCwKKwkJCSAgICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbnVtX3BhcmFtcykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV9wYXJhbV9zeXNmc19yZW1vdmUoc3RydWN0IG1vZHVsZSAqbW9kKQoreyB9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9NT0RVTEVfUEFSQU1TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2JibS5oIGIvaW5jbHVkZS9saW51eC9tdGQvYmJtLmgKaW5kZXggMTIyMWI3Yy4uZmZmOGM1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvYmJtLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvYmJtLmgKQEAgLTkyLDYgKzkyLDEzIEBACiAgKi8KICNkZWZpbmUgT05FTkFORF9CQURCTE9DS19QT1MJMAogCisvKgorICogQmFkIGJsb2NrIHNjYW5uaW5nIGVycm9ycworICovCisjZGVmaW5lIE9ORU5BTkRfQkJUX1JFQURfRVJST1IJCTEKKyNkZWZpbmUgT05FTkFORF9CQlRfUkVBRF9FQ0NfRVJST1IJMgorI2RlZmluZSBPTkVOQU5EX0JCVF9SRUFEX0ZBVEFMX0VSUk9SCTQKKwogLyoqCiAgKiBzdHJ1Y3QgYmJtX2luZm8gLSBbR0VORVJJQ10gQmFkIEJsb2NrIFRhYmxlIGRhdGEgc3RydWN0dXJlCiAgKiBAYmJ0X2VyYXNlX3NoaWZ0OglbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgYmJ0IGVudHJ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL21hcC5oCmluZGV4IDI4ZDQ2MWQuLjgxZjNhMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL21hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL21hcC5oCkBAIC0xODMsNyArMTgzLDcgQEAKIHN0cnVjdCBtYXBfaW5mbyB7CiAJY2hhciAqbmFtZTsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBwaHlzOworCXJlc291cmNlX3NpemVfdCBwaHlzOwogI2RlZmluZSBOT19YSVAgKC0xVUwpCiAKIAl2b2lkIF9faW9tZW0gKnZpcnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaCBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCmluZGV4IGQ2NDRlNTcuLjZhODU3MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCkBAIC04NSw2ICs4NSwxMCBAQAogICoJCW1vZGUgPSBNVERfT09CX1BMQUNFKQogICogQGRhdGJ1ZjoJZGF0YSBidWZmZXIgLSBpZiBOVUxMIG9ubHkgb29iIGRhdGEgYXJlIHJlYWQvd3JpdHRlbgogICogQG9vYmJ1ZjoJb29iIGRhdGEgYnVmZmVyCisgKgorICogTm90ZSwgaXQgaXMgYWxsb3dlZCB0byByZWFkIG1vcmUgdGhlbiBvbmUgT09CIGFyZWEgYXQgb25lIGdvLCBidXQgbm90IHdyaXRlLgorICogVGhlIGludGVyZmFjZSBhc3N1bWVzIHRoYXQgdGhlIE9PQiB3cml0ZSByZXF1ZXN0cyBwcm9ncmFtIG9ubHkgb25lIHBhZ2UncworICogT09CIGFyZWEuCiAgKi8KIHN0cnVjdCBtdGRfb29iX29wcyB7CiAJbXRkX29vYl9tb2RlX3QJbW9kZTsKQEAgLTExNywxOCArMTIxLDYgQEAKIAl1X2ludDMyX3Qgd3JpdGVzaXplOwogCiAJdV9pbnQzMl90IG9vYnNpemU7ICAgLy8gQW1vdW50IG9mIE9PQiBkYXRhIHBlciBibG9jayAoZS5nLiAxNikKLQl1X2ludDMyX3QgZWNjdHlwZTsKLQl1X2ludDMyX3QgZWNjc2l6ZTsKLQotCS8qCi0JICogUmV1c2Ugc29tZSBvZiB0aGUgYWJvdmUgdW51c2VkIGZpZWxkcyBpbiB0aGUgY2FzZSBvZiBOT1IgZmxhc2gKLQkgKiB3aXRoIGNvbmZpZ3VyYWJsZSBwcm9ncmFtbWluZyByZWdpb25zIHRvIGF2b2lkIG1vZGlmeWluZyB0aGUKLQkgKiB1c2VyIHZpc2libGUgc3RydWN0dXJlIGxheW91dC9zaXplLiAgT25seSB2YWxpZCB3aGVuIHRoZQotCSAqIE1URF9QUk9HUkFNX1JFR0lPTlMgZmxhZyBpcyBzZXQuCi0JICogKE1heWJlIHdlIHNob3VsZCBoYXZlIGFuIHVuaW9uIGZvciB0aG9zZT8pCi0JICovCi0jZGVmaW5lIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX1ZBTElEKG10ZCkgIChtdGQpLT5vb2JzaXplCi0jZGVmaW5lIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX0lOVkFMSUQobXRkKSAgKG10ZCktPmVjY3R5cGUKIAogCS8vIEtlcm5lbC1vbmx5IHN0dWZmIHN0YXJ0cyBoZXJlLgogCWNoYXIgKm5hbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKaW5kZXggMjA3MWIwMi4uOTc1MjM4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaApAQCAtMzQzLDYgKzM0Myw3IEBACiAgKiBAb3B0aW9uczoJCVtCT0FSRFNQRUNJRklDXSB2YXJpb3VzIGNoaXAgb3B0aW9ucy4gVGhleSBjYW4gcGFydGx5IGJlIHNldCB0byBpbmZvcm0gbmFuZF9zY2FuIGFib3V0CiAgKgkJCXNwZWNpYWwgZnVuY3Rpb25hbGl0eS4gU2VlIHRoZSBkZWZpbmVzIGZvciBmdXJ0aGVyIGV4cGxhbmF0aW9uCiAgKiBAYmFkYmxvY2twb3M6CVtJTlRFUk5dIHBvc2l0aW9uIG9mIHRoZSBiYWQgYmxvY2sgbWFya2VyIGluIHRoZSBvb2IgYXJlYQorICogQGNlbGxpbmZvOgkJW0lOVEVSTl0gTUxDL211bHRpY2hpcCBkYXRhIGZyb20gY2hpcCBpZGVudAogICogQG51bWNoaXBzOgkJW0lOVEVSTl0gbnVtYmVyIG9mIHBoeXNpY2FsIGNoaXBzCiAgKiBAY2hpcHNpemU6CQlbSU5URVJOXSB0aGUgc2l6ZSBvZiBvbmUgY2hpcCBmb3IgbXVsdGljaGlwIGFycmF5cwogICogQHBhZ2VtYXNrOgkJW0lOVEVSTl0gcGFnZSBudW1iZXIgbWFzayA9IG51bWJlciBvZiAocGFnZXMgLyBjaGlwKSAtIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaAppbmRleCBmNzc1YTdhLi5kOGFmOGE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBsaW51eC9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgU2Ftc3VuZyBFbGVjdHJvbmljcworICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqICBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC00MiwxNCArNDIsMTAgQEAKIAogLyoqCiAgKiBzdHJ1Y3Qgb25lbmFuZF9idWZmZXJyYW0gLSBPbmVOQU5EIEJ1ZmZlclJBTSBEYXRhCi0gKiBAYmxvY2s6CQlibG9jayBhZGRyZXNzIGluIEJ1ZmZlclJBTQotICogQHBhZ2U6CQlwYWdlIGFkZHJlc3MgaW4gQnVmZmVyUkFNCi0gKiBAdmFsaWQ6CQl2YWxpZCBmbGFnCisgKiBAYmxvY2twYWdlOgkJYmxvY2sgJiBwYWdlIGFkZHJlc3MgaW4gQnVmZmVyUkFNCiAgKi8KIHN0cnVjdCBvbmVuYW5kX2J1ZmZlcnJhbSB7Ci0JaW50IGJsb2NrOwotCWludCBwYWdlOwotCWludCB2YWxpZDsKKwlpbnQJYmxvY2twYWdlOwogfTsKIAogLyoqCkBAIC02Myw3ICs1OSw2IEBACiAgKgkJCXBhcnRseSBiZSBzZXQgdG8gaW5mb3JtIG9uZW5hbmRfc2NhbiBhYm91dAogICogQGVyYXNlX3NoaWZ0OglbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgYmxvY2sKICAqIEBwYWdlX3NoaWZ0OgkJW0lOVEVSTl0gbnVtYmVyIG9mIGFkZHJlc3MgYml0cyBpbiBhIHBhZ2UKLSAqIEBwcGJfc2hpZnQ6CQlbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgcGFnZXMgcGVyIGJsb2NrCiAgKiBAcGFnZV9tYXNrOgkJW0lOVEVSTl0gYSBwYWdlIHBlciBibG9jayBtYXNrCiAgKiBAYnVmZmVycmFtX2luZGV4OglbSU5URVJOXSBCdWZmZXJSQU0gaW5kZXgKICAqIEBidWZmZXJyYW06CQlbSU5URVJOXSBCdWZmZXJSQU0gaW5mbwpAQCAtMTAzLDcgKzk4LDYgQEAKIAogCXVuc2lnbmVkIGludAkJZXJhc2Vfc2hpZnQ7CiAJdW5zaWduZWQgaW50CQlwYWdlX3NoaWZ0OwotCXVuc2lnbmVkIGludAkJcHBiX3NoaWZ0OwkvKiBQYWdlcyBwZXIgYmxvY2sgc2hpZnQgKi8KIAl1bnNpZ25lZCBpbnQJCXBhZ2VfbWFzazsKIAogCXVuc2lnbmVkIGludAkJYnVmZmVycmFtX2luZGV4OwpAQCAtMTUwLDYgKzE0NCw5IEBACiAjZGVmaW5lIE9ORU5BTkRfU0VUX1NZU19DRkcxKHYsIHRoaXMpCQkJCQlcCiAJKHRoaXMtPndyaXRlX3dvcmQodiwgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NZU19DRkcxKSkKIAorI2RlZmluZSBPTkVOQU5EX0lTX0REUCh0aGlzKQkJCQkJCVwKKwkodGhpcy0+ZGV2aWNlX2lkICYgT05FTkFORF9ERVZJQ0VfSVNfRERQKQorCiAvKiBDaGVjayBieXRlIGFjY2VzcyBpbiBPbmVOQU5EICovCiAjZGVmaW5lIE9ORU5BTkRfQ0hFQ0tfQllURV9BQ0NFU1MoYWRkcikJCShhZGRyICYgMHgxKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCmluZGV4IGUzMWM4ZjUuLmFmOTQ3MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCkBAIC0zLDcgKzMsOCBAQAogICoKICAqICBPbmVOQU5EIFJlZ2lzdGVyIGhlYWRlciBmaWxlCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiAgS3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1zdW5nLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTgwLDkgKzgxLDExIEBACiAjZGVmaW5lIE9ORU5BTkRfVkVSU0lPTl9QUk9DRVNTX1NISUZUCSg4KQogCiAvKgotICogU3RhcnQgQWRkcmVzcyAxIEYxMDBoIChSL1cpCisgKiBTdGFydCBBZGRyZXNzIDEgRjEwMGggKFIvVykgJiBTdGFydCBBZGRyZXNzIDIgRjEwMWggKFIvVykKICAqLwogI2RlZmluZSBPTkVOQU5EX0REUF9TSElGVAkJKDE1KQorI2RlZmluZSBPTkVOQU5EX0REUF9DSElQMAkJKDApCisjZGVmaW5lIE9ORU5BTkRfRERQX0NISVAxCQkoMSA8PCBPTkVOQU5EX0REUF9TSElGVCkKIAogLyoKICAqIFN0YXJ0IEFkZHJlc3MgOCBGMTA3aCAoUi9XKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvcGh5c21hcC5oIGIvaW5jbHVkZS9saW51eC9tdGQvcGh5c21hcC5oCmluZGV4IDg2ODMxZTMuLjBkYzA3ZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3BoeXNtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmgKQEAgLTE4LDkgKzE4LDEwIEBACiAjZGVmaW5lIF9fTElOVVhfTVREX1BIWVNNQVBfXwogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCitzdHJ1Y3QgbWFwX2luZm87CisKIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgewogCXVuc2lnbmVkIGludAkJd2lkdGg7CiAJdm9pZAkJCSgqc2V0X3ZwcCkoc3RydWN0IG1hcF9pbmZvICosIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczQuaCBiL2luY2x1ZGUvbGludXgvbmZzNC5oCmluZGV4IGRiMDUxODIuLjFiZTViZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzNC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzNC5oCkBAIC0xMDUsMTIgKzEwNSwxMSBAQAogCXVpbnQzMl90CWFjY2Vzc19tYXNrOwogCWludAkJd2hvdHlwZTsKIAl1aWRfdAkJd2hvOwotCXN0cnVjdCBsaXN0X2hlYWQgbF9hY2U7CiB9OwogCiBzdHJ1Y3QgbmZzNF9hY2wgewogCXVpbnQzMl90CW5hY2VzOwotCXN0cnVjdCBsaXN0X2hlYWQgYWNlX2hlYWQ7CisJc3RydWN0IG5mczRfYWNlCWFjZXNbMF07CiB9OwogCiB0eXBlZGVmIHN0cnVjdCB7IGNoYXIgZGF0YVtORlM0X1ZFUklGSUVSX1NJWkVdOyB9IG5mczRfdmVyaWZpZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczRfYWNsLmggYi9pbmNsdWRlL2xpbnV4L25mczRfYWNsLmgKaW5kZXggMjJhZmY0ZC4uNDA5YjZlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnM0X2FjbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzNF9hY2wuaApAQCAtMzksOSArMzksMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogCi1zdHJ1Y3QgbmZzNF9hY2wgKm5mczRfYWNsX25ldyh2b2lkKTsKLXZvaWQgbmZzNF9hY2xfZnJlZShzdHJ1Y3QgbmZzNF9hY2wgKik7Ci1pbnQgbmZzNF9hY2xfYWRkX2FjZShzdHJ1Y3QgbmZzNF9hY2wgKiwgdTMyLCB1MzIsIHUzMiwgaW50LCB1aWRfdCk7CisvKiBNYXhpbXVtIEFDTCB3ZSdsbCBhY2NlcHQgZnJvbSBjbGllbnQ7IGNob3NlbiAoc29tZXdoYXQgYXJiaXRyYXJpbHkpIHRvCisgKiBmaXQgaW4gYSBwYWdlOiAqLworI2RlZmluZSBORlM0X0FDTF9NQVggMTcwCisKK3N0cnVjdCBuZnM0X2FjbCAqbmZzNF9hY2xfbmV3KGludCk7Cit2b2lkIG5mczRfYWNsX2FkZF9hY2Uoc3RydWN0IG5mczRfYWNsICosIHUzMiwgdTMyLCB1MzIsIGludCwgdWlkX3QpOwogaW50IG5mczRfYWNsX2dldF93aG90eXBlKGNoYXIgKiwgdTMyKTsKIGludCBuZnM0X2FjbF93cml0ZV93aG8oaW50IHdobywgY2hhciAqcCk7CiBpbnQgbmZzNF9hY2xfcGVybWlzc2lvbihzdHJ1Y3QgbmZzNF9hY2wgKmFjbCwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubWkuaCBiL2luY2x1ZGUvbGludXgvbm1pLmgKaW5kZXggYWNiNGVkMS4uMjlhZjJkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25taS5oCkBAIC0xNyw4ICsxNywxNSBAQAogI2lmZGVmIEFSQ0hfSEFTX05NSV9XQVRDSERPRwogI2luY2x1ZGUgPGFzbS9ubWkuaD4KIGV4dGVybiB2b2lkIHRvdWNoX25taV93YXRjaGRvZyh2b2lkKTsKK2V4dGVybiB2b2lkIGFjcGlfbm1pX2Rpc2FibGUodm9pZCk7CitleHRlcm4gdm9pZCBhY3BpX25taV9lbmFibGUodm9pZCk7CiAjZWxzZQotIyBkZWZpbmUgdG91Y2hfbm1pX3dhdGNoZG9nKCkgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpCitzdGF0aWMgaW5saW5lIHZvaWQgdG91Y2hfbm1pX3dhdGNoZG9nKHZvaWQpCit7CisJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOworfQorc3RhdGljIGlubGluZSB2b2lkIGFjcGlfbm1pX2Rpc2FibGUodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9ubWlfZW5hYmxlKHZvaWQpIHsgfQogI2VuZGlmCiAKICNpZm5kZWYgdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ub2RlbWFzay5oIGIvaW5jbHVkZS9saW51eC9ub2RlbWFzay5oCmluZGV4IGIxMDYzZTkuLjUyYzU0YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbm9kZW1hc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgKQEAgLTM1Miw3ICszNTIsNyBAQAogI2RlZmluZSBub2RlX3Bvc3NpYmxlKG5vZGUpCW5vZGVfaXNzZXQoKG5vZGUpLCBub2RlX3Bvc3NpYmxlX21hcCkKICNkZWZpbmUgZmlyc3Rfb25saW5lX25vZGUJZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApCiAjZGVmaW5lIG5leHRfb25saW5lX25vZGUobmlkKQluZXh0X25vZGUoKG5pZCksIG5vZGVfb25saW5lX21hcCkKLWludCBoaWdoZXN0X3Bvc3NpYmxlX25vZGVfaWQodm9pZCk7CitleHRlcm4gaW50IG5yX25vZGVfaWRzOwogI2Vsc2UKICNkZWZpbmUgbnVtX29ubGluZV9ub2RlcygpCTEKICNkZWZpbmUgbnVtX3Bvc3NpYmxlX25vZGVzKCkJMQpAQCAtMzYwLDcgKzM2MCw3IEBACiAjZGVmaW5lIG5vZGVfcG9zc2libGUobm9kZSkJKChub2RlKSA9PSAwKQogI2RlZmluZSBmaXJzdF9vbmxpbmVfbm9kZQkwCiAjZGVmaW5lIG5leHRfb25saW5lX25vZGUobmlkKQkoTUFYX05VTU5PREVTKQotI2RlZmluZSBoaWdoZXN0X3Bvc3NpYmxlX25vZGVfaWQoKQkwCisjZGVmaW5lIG5yX25vZGVfaWRzCQkxCiAjZW5kaWYKIAogI2RlZmluZSBhbnlfb25saW5lX25vZGUobWFzaykJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCA5OGM4NzY1Li4yYzRiNjg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTg1NCw1ICs4NTQsOCBAQAogI2RlZmluZSBQQ0lQQ0lfQUxJTUFHSUsJCTMyCS8qIE5lZWQgbG93IGxhdGVuY3kgc2V0dGluZyAqLwogI2RlZmluZSBQQ0lBR1BfRkFJTAkJNjQJLyogTm8gUENJIHRvIEFHUCBETUEgKi8KIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX2NhcmRidXNfaW9fc2l6ZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9jYXJkYnVzX21lbV9zaXplOworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIExJTlVYX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDE4MmE5NmYuLjYwMDMwOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0yMDg5LDYgKzIwODksNyBAQAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BBU0VNSQkJMHgxOTU5CiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BVFRBTlNJQwkJMHgxOTY5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDEJMHgxMDQ4CiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9KTUlDUk9OCQkweDE5N0IKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MAkweDIzNjAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKaW5kZXggNmIwNjQ4Yy4uNTJjOWViOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKQEAgLTIsNyArMiw3IEBACiAjZGVmaW5lIF9fTElOVVhfU0VRTE9DS19ICiAvKgogICogUmVhZGVyL3dyaXRlciBjb25zaXN0ZW50IG1lY2hhbmlzbSB3aXRob3V0IHN0YXJ2aW5nIHdyaXRlcnMuIFRoaXMgdHlwZSBvZgotICogbG9jayBmb3IgZGF0YSB3aGVyZSB0aGUgcmVhZGVyIHdhbnRzIGEgY29uc2l0ZW50IHNldCBvZiBpbmZvcm1hdGlvbgorICogbG9jayBmb3IgZGF0YSB3aGVyZSB0aGUgcmVhZGVyIHdhbnRzIGEgY29uc2lzdGVudCBzZXQgb2YgaW5mb3JtYXRpb24KICAqIGFuZCBpcyB3aWxsaW5nIHRvIHJldHJ5IGlmIHRoZSBpbmZvcm1hdGlvbiBjaGFuZ2VzLiAgUmVhZGVycyBuZXZlcgogICogYmxvY2sgYnV0IHRoZXkgbWF5IGhhdmUgdG8gcmV0cnkgaWYgYSB3cml0ZXIgaXMgaW4KICAqIHByb2dyZXNzLiBXcml0ZXJzIGRvIG5vdCB3YWl0IGZvciByZWFkZXJzLiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaW8uaCBiL2luY2x1ZGUvbGludXgvc2VyaW8uaAppbmRleCBhYzJjNzBlLi4xZWJmMDQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpby5oCkBAIC0xMDgsMTIgKzEwOCw2IEBACiAJCXNlcmlvLT5kcnYtPndyaXRlX3dha2V1cChzZXJpbyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXJpb19jbGVhbnVwKHN0cnVjdCBzZXJpbyAqc2VyaW8pCi17Ci0JaWYgKHNlcmlvLT5kcnYgJiYgc2VyaW8tPmRydi0+Y2xlYW51cCkKLQkJc2VyaW8tPmRydi0+Y2xlYW51cChzZXJpbyk7Ci19Ci0KIC8qCiAgKiBVc2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBzZXJpbydzIHBlci1wb3J0CiAgKiBkcml2ZXItc3BlY2lmaWMgZGF0YS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc201MDEtcmVncy5oIGIvaW5jbHVkZS9saW51eC9zbTUwMS1yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5YmU0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc201MDEtcmVncy5oCkBAIC0wLDAgKzEsMzU3IEBACisvKiBzbTUwMS1yZWdzLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFNpbGljb24gTW90aW9uIFNNNTAxIHJlZ2lzdGVyIGRlZmluaXRpb25zCisqLworCisvKiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBhcmVhICovCisvKiBTeXN0ZW0gY29uZmlnIGJhc2UgKi8KKyNkZWZpbmUgU001MDFfU1lTX0NPTkZJRwkJKDB4MDAwMDAwKQorCisvKiBjb25maWcgMSAqLworI2RlZmluZSBTTTUwMV9TWVNURU1fQ09OVFJPTCAJCSgweDAwMDAwMCkKKyNkZWZpbmUgU001MDFfTUlTQ19DT05UUk9MCQkoMHgwMDAwMDQpCisKKyNkZWZpbmUgU001MDFfTUlTQ19CVVNfU0gJCSgweDApCisjZGVmaW5lIFNNNTAxX01JU0NfQlVTX1BDSQkJKDB4MSkKKyNkZWZpbmUgU001MDFfTUlTQ19CVVNfWFNDQUxFCQkoMHgyKQorI2RlZmluZSBTTTUwMV9NSVNDX0JVU19ORUMJCSgweDYpCisjZGVmaW5lIFNNNTAxX01JU0NfQlVTX01BU0sJCSgweDcpCisKKyNkZWZpbmUgU001MDFfTUlTQ19WUl82Mk1CCQkoMTw8MykKKyNkZWZpbmUgU001MDFfTUlTQ19DRFJfUkVTRVQJCSgxPDw3KQorI2RlZmluZSBTTTUwMV9NSVNDX1VTQl9MQgkJKDE8PDgpCisjZGVmaW5lIFNNNTAxX01JU0NfVVNCX1NMQVZFCQkoMTw8OSkKKyNkZWZpbmUgU001MDFfTUlTQ19CTF8xCQkJKDE8PDEwKQorI2RlZmluZSBTTTUwMV9NSVNDX01DCQkJKDE8PDExKQorI2RlZmluZSBTTTUwMV9NSVNDX0RBQ19QT1dFUgkJKDE8PDEyKQorI2RlZmluZSBTTTUwMV9NSVNDX0lSUV9JTlZFUlQJCSgxPDwxNikKKyNkZWZpbmUgU001MDFfTUlTQ19TSAkJCSgxPDwxNykKKworI2RlZmluZSBTTTUwMV9NSVNDX0hPTERfRU1QVFkJCSgwPDwxOCkKKyNkZWZpbmUgU001MDFfTUlTQ19IT0xEXzgJCSgxPDwxOCkKKyNkZWZpbmUgU001MDFfTUlTQ19IT0xEXzE2CQkoMjw8MTgpCisjZGVmaW5lIFNNNTAxX01JU0NfSE9MRF8yNAkJKDM8PDE4KQorI2RlZmluZSBTTTUwMV9NSVNDX0hPTERfMzIJCSg0PDwxOCkKKyNkZWZpbmUgU001MDFfTUlTQ19IT0xEX01BU0sJCSg3PDwxOCkKKworI2RlZmluZSBTTTUwMV9NSVNDX0ZSRVFfMTIJCSgxPDwyNCkKKyNkZWZpbmUgU001MDFfTUlTQ19QTkxfMjRCSVQJCSgxPDwyNSkKKyNkZWZpbmUgU001MDFfTUlTQ184MDUxX0xFCQkoMTw8MjYpCisKKworCisjZGVmaW5lIFNNNTAxX0dQSU8zMV8wX0NPTlRST0wJCSgweDAwMDAwOCkKKyNkZWZpbmUgU001MDFfR1BJTzYzXzMyX0NPTlRST0wJCSgweDAwMDAwQykKKyNkZWZpbmUgU001MDFfRFJBTV9DT05UUk9MCQkoMHgwMDAwMTApCisKKy8qIGNvbW1hbmQgbGlzdCAqLworI2RlZmluZSBTTTUwMV9BUkJUUlROX0NPTlRST0wJCSgweDAwMDAxNCkKKworLyogY29tbWFuZCBsaXN0ICovCisjZGVmaW5lIFNNNTAxX0NPTU1BTkRfTElTVF9TVEFUVVMJKDB4MDAwMDI0KQorCisvKiBpbnRlcnJ1cHQgZGVidWcgKi8KKyNkZWZpbmUgU001MDFfUkFXX0lSUV9TVEFUVVMJCSgweDAwMDAyOCkKKyNkZWZpbmUgU001MDFfUkFXX0lSUV9DTEVBUgkJKDB4MDAwMDI4KQorI2RlZmluZSBTTTUwMV9JUlFfU1RBVFVTCQkoMHgwMDAwMkMpCisjZGVmaW5lIFNNNTAxX0lSUV9NQVNLCQkJKDB4MDAwMDMwKQorI2RlZmluZSBTTTUwMV9ERUJVR19DT05UUk9MCQkoMHgwMDAwMzQpCisKKy8qIHBvd2VyIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgU001MDFfQ1VSUkVOVF9HQVRFCQkoMHgwMDAwMzgpCisjZGVmaW5lIFNNNTAxX0NVUlJFTlRfQ0xPQ0sJCSgweDAwMDAzQykKKyNkZWZpbmUgU001MDFfUE9XRVJfTU9ERV8wX0dBVEUJCSgweDAwMDA0MCkKKyNkZWZpbmUgU001MDFfUE9XRVJfTU9ERV8wX0NMT0NLCSgweDAwMDA0NCkKKyNkZWZpbmUgU001MDFfUE9XRVJfTU9ERV8xX0dBVEUJCSgweDAwMDA0OCkKKyNkZWZpbmUgU001MDFfUE9XRVJfTU9ERV8xX0NMT0NLCSgweDAwMDA0QykKKyNkZWZpbmUgU001MDFfU0xFRVBfTU9ERV9HQVRFCQkoMHgwMDAwNTApCisjZGVmaW5lIFNNNTAxX1BPV0VSX01PREVfQ09OVFJPTAkoMHgwMDAwNTQpCisKKy8qIHBvd2VyIGdhdGVzIGZvciB1bml0cyB3aXRoaW4gdGhlIDUwMSAqLworI2RlZmluZSBTTTUwMV9HQVRFX0hPU1QJCQkoMCkKKyNkZWZpbmUgU001MDFfR0FURV9NRU1PUlkJCSgxKQorI2RlZmluZSBTTTUwMV9HQVRFX0RJU1BMQVkJCSgyKQorI2RlZmluZSBTTTUwMV9HQVRFXzJEX0VOR0lORQkJKDMpCisjZGVmaW5lIFNNNTAxX0dBVEVfQ1NDCQkJKDQpCisjZGVmaW5lIFNNNTAxX0dBVEVfWlZQT1JUCQkoNSkKKyNkZWZpbmUgU001MDFfR0FURV9HUElPCQkJKDYpCisjZGVmaW5lIFNNNTAxX0dBVEVfVUFSVDAJCSg3KQorI2RlZmluZSBTTTUwMV9HQVRFX1VBUlQxCQkoOCkKKyNkZWZpbmUgU001MDFfR0FURV9TU1AJCQkoMTApCisjZGVmaW5lIFNNNTAxX0dBVEVfVVNCX0hPU1QJCSgxMSkKKyNkZWZpbmUgU001MDFfR0FURV9VU0JfR0FER0VUCQkoMTIpCisjZGVmaW5lIFNNNTAxX0dBVEVfVUNPTlRST0xMRVIJCSgxNykKKyNkZWZpbmUgU001MDFfR0FURV9BQzk3CQkJKDE4KQorCisvKiBwYW5lbCBjbG9jayAqLworI2RlZmluZSBTTTUwMV9DTE9DS19QMlhDTEsJCSgyNCkKKy8qIGNydCBjbG9jayAqLworI2RlZmluZSBTTTUwMV9DTE9DS19WMlhDTEsJCSgxNikKKy8qIG1haW4gY2xvY2sgKi8KKyNkZWZpbmUgU001MDFfQ0xPQ0tfTUNMSwkJKDgpCisvKiBTRFJBTSBjb250cm9sbGVyIGNsb2NrICovCisjZGVmaW5lIFNNNTAxX0NMT0NLX00xWENMSwkJKDApCisKKy8qIGNvbmZpZyAyICovCisjZGVmaW5lIFNNNTAxX1BDSV9NQVNURVJfQkFTRQkJKDB4MDAwMDU4KQorI2RlZmluZSBTTTUwMV9FTkRJQU5fQ09OVFJPTAkJKDB4MDAwMDVDKQorI2RlZmluZSBTTTUwMV9ERVZJQ0VJRAkJCSgweDAwMDA2MCkKKy8qIDB4MDUwMTAwQTAgKi8KKworI2RlZmluZSBTTTUwMV9QTExDTE9DS19DT1VOVAkJKDB4MDAwMDY0KQorI2RlZmluZSBTTTUwMV9NSVNDX1RJTUlORwkJKDB4MDAwMDY4KQorI2RlZmluZSBTTTUwMV9DVVJSRU5UX1NEUkFNX0NMT0NLCSgweDAwMDA2QykKKworLyogR1BJTyBiYXNlICovCisjZGVmaW5lIFNNNTAxX0dQSU8JCQkoMHgwMTAwMDApCisjZGVmaW5lIFNNNTAxX0dQSU9fREFUQV9MT1cJCSgweDAwKQorI2RlZmluZSBTTTUwMV9HUElPX0RBVEFfSElHSAkJKDB4MDQpCisjZGVmaW5lIFNNNTAxX0dQSU9fRERSX0xPVwkJKDB4MDgpCisjZGVmaW5lIFNNNTAxX0dQSU9fRERSX0hJR0gJCSgweDBDKQorI2RlZmluZSBTTTUwMV9HUElPX0lSUV9TRVRVUAkJKDB4MTApCisjZGVmaW5lIFNNNTAxX0dQSU9fSVJRX1NUQVRVUwkJKDB4MTQpCisjZGVmaW5lIFNNNTAxX0dQSU9fSVJRX1JFU0VUCQkoMHgxNCkKKworLyogSTJDIGNvbnRyb2xsZXIgYmFzZSAqLworI2RlZmluZSBTTTUwMV9JMkMJCQkoMHgwMTAwNDApCisjZGVmaW5lIFNNNTAxX0kyQ19CWVRFX0NPVU5UCQkoMHgwMCkKKyNkZWZpbmUgU001MDFfSTJDX0NPTlRST0wJCSgweDAxKQorI2RlZmluZSBTTTUwMV9JMkNfU1RBVFVTCQkoMHgwMikKKyNkZWZpbmUgU001MDFfSTJDX1JFU0VUCQkJKDB4MDIpCisjZGVmaW5lIFNNNTAxX0kyQ19TTEFWRV9BRERSRVNTCQkoMHgwMykKKyNkZWZpbmUgU001MDFfSTJDX0RBVEEJCQkoMHgwNCkKKworLyogU1NQIGJhc2UgKi8KKyNkZWZpbmUgU001MDFfU1NQCQkJKDB4MDIwMDAwKQorCisvKiBVYXJ0IDAgYmFzZSAqLworI2RlZmluZSBTTTUwMV9VQVJUMAkJCSgweDAzMDAwMCkKKworLyogVWFydCAxIGJhc2UgKi8KKyNkZWZpbmUgU001MDFfVUFSVDEJCQkoMHgwMzAwMjApCisKKy8qIFVTQiBob3N0IHBvcnQgYmFzZSAqLworI2RlZmluZSBTTTUwMV9VU0JfSE9TVAkJCSgweDA0MDAwMCkKKworLyogVVNCIHNsYXZlL2dhZGdldCBiYXNlICovCisjZGVmaW5lIFNNNTAxX1VTQl9HQURHRVQJCSgweDA2MDAwMCkKKworLyogVVNCIHNsYXZlL2dhZGdldCBkYXRhIHBvcnQgYmFzZSAqLworI2RlZmluZSBTTTUwMV9VU0JfR0FER0VUX0RBVEEJCSgweDA3MDAwMCkKKworLyogRGlzcGxheSBjb250b2xsZXIvdmlkZW8gZW5naW5lIGJhc2UgKi8KKyNkZWZpbmUgU001MDFfREMJCQkoMHgwODAwMDApCisKKy8qIGNvbW1vbiBkZWZpbmVzIGZvciB0aGUgU001MDEgYWRkcmVzcyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU001MDFfQUREUl9GTElQCQkJKDE8PDMxKQorI2RlZmluZSBTTTUwMV9BRERSX0VYVAkJCSgxPDwyNykKKyNkZWZpbmUgU001MDFfQUREUl9DUzEJCQkoMTw8MjYpCisjZGVmaW5lIFNNNTAxX0FERFJfTUFTSwkJCSgweDNmIDw8IDI2KQorCisjZGVmaW5lIFNNNTAxX0ZJRk9fTUFTSwkJCSgweDMgPDwgMTYpCisjZGVmaW5lIFNNNTAxX0ZJRk9fMQkJCSgweDAgPDwgMTYpCisjZGVmaW5lIFNNNTAxX0ZJRk9fMwkJCSgweDEgPDwgMTYpCisjZGVmaW5lIFNNNTAxX0ZJRk9fNwkJCSgweDIgPDwgMTYpCisjZGVmaW5lIFNNNTAxX0ZJRk9fMTEJCQkoMHgzIDw8IDE2KQorCisvKiBjb21tb24gcmVnaXN0ZXJzIGZvciBwYW5lbCBhbmQgdGhlIGNydCAqLworI2RlZmluZSBTTTUwMV9PRkZfRENfSF9UT1QJCSgweDAwMCkKKyNkZWZpbmUgU001MDFfT0ZGX0RDX1ZfVE9UCQkoMHgwMDgpCisjZGVmaW5lIFNNNTAxX09GRl9EQ19IX1NZTkMJCSgweDAwNCkKKyNkZWZpbmUgU001MDFfT0ZGX0RDX1ZfU1lOQwkJKDB4MDBDKQorCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0wJCSgweDAwMCkKKworI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX0ZQRU4JKDE8PDI3KQorI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX0JJQVMJKDE8PDI2KQorI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX0RBVEEJKDE8PDI1KQorI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX1ZERAkoMTw8MjQpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfRFAJKDE8PDIzKQorCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfVEZUXzg4OAkoMDw8MjEpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfVEZUXzMzMwkoMTw8MjEpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfVEZUXzQ0NAkoMjw8MjEpCisKKyNkZWZpbmUgU001MDFfRENfUEFORUxfQ09OVFJPTF9ERQkoMTw8MjApCisKKyNkZWZpbmUgU001MDFfRENfUEFORUxfQ09OVFJPTF9MQ0RfVEZUCSgwPDwxOCkKKyNkZWZpbmUgU001MDFfRENfUEFORUxfQ09OVFJPTF9MQ0RfU1ROOAkoMTw8MTgpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfTENEX1NUTjEyICgyPDwxOCkKKworI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX0NQCSgxPDwxNCkKKyNkZWZpbmUgU001MDFfRENfUEFORUxfQ09OVFJPTF9WU1AJKDE8PDEzKQorI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX0hTUAkoMTw8MTIpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfQ0sJKDE8PDkpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfVEUJKDE8PDgpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfVlBECSgxPDw3KQorI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX1ZQCSgxPDw2KQorI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MX0hQRAkoMTw8NSkKKyNkZWZpbmUgU001MDFfRENfUEFORUxfQ09OVFJPTF9IUAkoMTw8NCkKKyNkZWZpbmUgU001MDFfRENfUEFORUxfQ09OVFJPTF9HQU1NQQkoMTw8MykKKyNkZWZpbmUgU001MDFfRENfUEFORUxfQ09OVFJPTF9FTgkoMTw8MikKKworI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DT05UUk9MXzhCUFAJKDA8PDApCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfMTZCUFAJKDE8PDApCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0NPTlRST0xfMzJCUFAJKDI8PDApCisKKworI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9QQU5OSU5HX0NPTlRST0wJKDB4MDA0KQorI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DT0xPUl9LRVkJKDB4MDA4KQorI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9GQl9BRERSCQkoMHgwMEMpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0ZCX09GRlNFVAkoMHgwMTApCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0ZCX1dJRFRICQkoMHgwMTQpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0ZCX0hFSUdIVAkoMHgwMTgpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX1RMX0xPQwkJKDB4MDFDKQorI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9CUl9MT0MJCSgweDAyMCkKKyNkZWZpbmUgU001MDFfRENfUEFORUxfSF9UT1QJCSgweDAyNCkKKyNkZWZpbmUgU001MDFfRENfUEFORUxfSF9TWU5DCQkoMHgwMjgpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX1ZfVE9UCQkoMHgwMkMpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX1ZfU1lOQwkJKDB4MDMwKQorI2RlZmluZSBTTTUwMV9EQ19QQU5FTF9DVVJfTElORQkJKDB4MDM0KQorCisjZGVmaW5lIFNNNTAxX0RDX1ZJREVPX0NPTlRST0wJCSgweDA0MCkKKyNkZWZpbmUgU001MDFfRENfVklERU9fRkIwX0FERFIJCSgweDA0NCkKKyNkZWZpbmUgU001MDFfRENfVklERU9fRkJfV0lEVEgJCSgweDA0OCkKKyNkZWZpbmUgU001MDFfRENfVklERU9fRkIwX0xBU1RfQUREUgkoMHgwNEMpCisjZGVmaW5lIFNNNTAxX0RDX1ZJREVPX1RMX0xPQwkJKDB4MDUwKQorI2RlZmluZSBTTTUwMV9EQ19WSURFT19CUl9MT0MJCSgweDA1NCkKKyNkZWZpbmUgU001MDFfRENfVklERU9fU0NBTEUJCSgweDA1OCkKKyNkZWZpbmUgU001MDFfRENfVklERU9fSU5JVF9TQ0FMRQkoMHgwNUMpCisjZGVmaW5lIFNNNTAxX0RDX1ZJREVPX1lVVl9DT05TVEFOVFMJKDB4MDYwKQorI2RlZmluZSBTTTUwMV9EQ19WSURFT19GQjFfQUREUgkJKDB4MDY0KQorI2RlZmluZSBTTTUwMV9EQ19WSURFT19GQjFfTEFTVF9BRERSCSgweDA2OCkKKworI2RlZmluZSBTTTUwMV9EQ19WSURFT19BTFBIQV9DT05UUk9MCSgweDA4MCkKKyNkZWZpbmUgU001MDFfRENfVklERU9fQUxQSEFfRkJfQUREUgkoMHgwODQpCisjZGVmaW5lIFNNNTAxX0RDX1ZJREVPX0FMUEhBX0ZCX09GRlNFVAkoMHgwODgpCisjZGVmaW5lIFNNNTAxX0RDX1ZJREVPX0FMUEhBX0ZCX0xBU1RfQUREUgkoMHgwOEMpCisjZGVmaW5lIFNNNTAxX0RDX1ZJREVPX0FMUEhBX1RMX0xPQwkoMHgwOTApCisjZGVmaW5lIFNNNTAxX0RDX1ZJREVPX0FMUEhBX0JSX0xPQwkoMHgwOTQpCisjZGVmaW5lIFNNNTAxX0RDX1ZJREVPX0FMUEhBX1NDQUxFCSgweDA5OCkKKyNkZWZpbmUgU001MDFfRENfVklERU9fQUxQSEFfSU5JVF9TQ0FMRQkoMHgwOUMpCisjZGVmaW5lIFNNNTAxX0RDX1ZJREVPX0FMUEhBX0NIUk9NQV9LRVkJKDB4MEEwKQorI2RlZmluZSBTTTUwMV9EQ19WSURFT19BTFBIQV9DT0xPUl9MT09LVVAJKDB4MEE0KQorCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0hXQ19CQVNFCQkoMHgwRjApCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0hXQ19BRERSCQkoMHgwRjApCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0hXQ19MT0MJCSgweDBGNCkKKyNkZWZpbmUgU001MDFfRENfUEFORUxfSFdDX0NPTE9SXzFfMgkoMHgwRjgpCisjZGVmaW5lIFNNNTAxX0RDX1BBTkVMX0hXQ19DT0xPUl8zCSgweDBGQykKKworI2RlZmluZSBTTTUwMV9IV0NfRU4JCQkoMTw8MzEpCisKKyNkZWZpbmUgU001MDFfT0ZGX0hXQ19BRERSCQkoMHgwMCkKKyNkZWZpbmUgU001MDFfT0ZGX0hXQ19MT0MJCSgweDA0KQorI2RlZmluZSBTTTUwMV9PRkZfSFdDX0NPTE9SXzFfMgkJKDB4MDgpCisjZGVmaW5lIFNNNTAxX09GRl9IV0NfQ09MT1JfMwkJKDB4MEMpCisKKyNkZWZpbmUgU001MDFfRENfQUxQSEFfQ09OVFJPTAkJKDB4MTAwKQorI2RlZmluZSBTTTUwMV9EQ19BTFBIQV9GQl9BRERSCQkoMHgxMDQpCisjZGVmaW5lIFNNNTAxX0RDX0FMUEhBX0ZCX09GRlNFVAkoMHgxMDgpCisjZGVmaW5lIFNNNTAxX0RDX0FMUEhBX1RMX0xPQwkJKDB4MTBDKQorI2RlZmluZSBTTTUwMV9EQ19BTFBIQV9CUl9MT0MJCSgweDExMCkKKyNkZWZpbmUgU001MDFfRENfQUxQSEFfQ0hST01BX0tFWQkoMHgxMTQpCisjZGVmaW5lIFNNNTAxX0RDX0FMUEhBX0NPTE9SX0xPT0tVUAkoMHgxMTgpCisKKyNkZWZpbmUgU001MDFfRENfQ1JUX0NPTlRST0wJCSgweDIwMCkKKworI2RlZmluZSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9UVlAJKDE8PDE1KQorI2RlZmluZSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9DUAkJKDE8PDE0KQorI2RlZmluZSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9WU1AJKDE8PDEzKQorI2RlZmluZSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9IU1AJKDE8PDEyKQorI2RlZmluZSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9WUwkJKDE8PDExKQorI2RlZmluZSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9CTEFOSwkoMTw8MTApCisjZGVmaW5lIFNNNTAxX0RDX0NSVF9DT05UUk9MX1NFTAkoMTw8OSkKKyNkZWZpbmUgU001MDFfRENfQ1JUX0NPTlRST0xfVEUJCSgxPDw4KQorI2RlZmluZSBTTTUwMV9EQ19DUlRfQ09OVFJPTF9QSVhFTF9NQVNLICgweEYgPDwgNCkKKyNkZWZpbmUgU001MDFfRENfQ1JUX0NPTlRST0xfR0FNTUEJKDE8PDMpCisjZGVmaW5lIFNNNTAxX0RDX0NSVF9DT05UUk9MX0VOQUJMRQkoMTw8MikKKworI2RlZmluZSBTTTUwMV9EQ19DUlRfQ09OVFJPTF84QlBQCSgwPDwwKQorI2RlZmluZSBTTTUwMV9EQ19DUlRfQ09OVFJPTF8xNkJQUAkoMTw8MCkKKyNkZWZpbmUgU001MDFfRENfQ1JUX0NPTlRST0xfMzJCUFAJKDI8PDApCisKKyNkZWZpbmUgU001MDFfRENfQ1JUX0ZCX0FERFIJCSgweDIwNCkKKyNkZWZpbmUgU001MDFfRENfQ1JUX0ZCX09GRlNFVAkJKDB4MjA4KQorI2RlZmluZSBTTTUwMV9EQ19DUlRfSF9UT1QJCSgweDIwQykKKyNkZWZpbmUgU001MDFfRENfQ1JUX0hfU1lOQwkJKDB4MjEwKQorI2RlZmluZSBTTTUwMV9EQ19DUlRfVl9UT1QJCSgweDIxNCkKKyNkZWZpbmUgU001MDFfRENfQ1JUX1ZfU1lOQwkJKDB4MjE4KQorI2RlZmluZSBTTTUwMV9EQ19DUlRfU0lHTkFUVVJFX0FOQUxZWkVSCSgweDIxQykKKyNkZWZpbmUgU001MDFfRENfQ1JUX0NVUl9MSU5FCQkoMHgyMjApCisjZGVmaW5lIFNNNTAxX0RDX0NSVF9NT05JVE9SX0RFVEVDVAkoMHgyMjQpCisKKyNkZWZpbmUgU001MDFfRENfQ1JUX0hXQ19CQVNFCQkoMHgyMzApCisjZGVmaW5lIFNNNTAxX0RDX0NSVF9IV0NfQUREUgkJKDB4MjMwKQorI2RlZmluZSBTTTUwMV9EQ19DUlRfSFdDX0xPQwkJKDB4MjM0KQorI2RlZmluZSBTTTUwMV9EQ19DUlRfSFdDX0NPTE9SXzFfMgkoMHgyMzgpCisjZGVmaW5lIFNNNTAxX0RDX0NSVF9IV0NfQ09MT1JfMwkoMHgyM0MpCisKKyNkZWZpbmUgU001MDFfRENfUEFORUxfUEFMRVRURQkJKDB4NDAwKQorCisjZGVmaW5lIFNNNTAxX0RDX1ZJREVPX1BBTEVUVEUJCSgweDgwMCkKKworI2RlZmluZSBTTTUwMV9EQ19DUlRfUEFMRVRURQkJKDB4QzAwKQorCisvKiBab29tIFZpZGVvIHBvcnQgYmFzZSAqLworI2RlZmluZSBTTTUwMV9aVlBPUlQJCQkoMHgwOTAwMDApCisKKy8qIEFDOTcvSTJTIGJhc2UgKi8KKyNkZWZpbmUgU001MDFfQUM5NwkJCSgweDBBMDAwMCkKKworLyogODA1MSBtaWNybyBjb250cm9sbGVyIGJhc2UgKi8KKyNkZWZpbmUgU001MDFfVUNPTlRST0xMRVIJCSgweDBCMDAwMCkKKworLyogODA1MSBtaWNybyBjb250cm9sbGVyIFNSQU0gYmFzZSAqLworI2RlZmluZSBTTTUwMV9VQ09OVFJPTExFUl9TUkFNCQkoMHgwQzAwMDApCisKKy8qIERNQSBiYXNlICovCisjZGVmaW5lIFNNNTAxX0RNQQkJCSgweDBEMDAwMCkKKworLyogMmQgZW5naW5lIGJhc2UgKi8KKyNkZWZpbmUgU001MDFfMkRfRU5HSU5FCQkJKDB4MTAwMDAwKQorI2RlZmluZSBTTTUwMV8yRF9TT1VSQ0UJCQkoMHgwMCkKKyNkZWZpbmUgU001MDFfMkRfREVTVElOQVRJT04JCSgweDA0KQorI2RlZmluZSBTTTUwMV8yRF9ESU1FTlNJT04JCSgweDA4KQorI2RlZmluZSBTTTUwMV8yRF9DT05UUk9MCQkoMHgwQykKKyNkZWZpbmUgU001MDFfMkRfUElUQ0gJCQkoMHgxMCkKKyNkZWZpbmUgU001MDFfMkRfRk9SRUdST1VORAkJKDB4MTQpCisjZGVmaW5lIFNNNTAxXzJEX0JBQ0tHUk9VTkQJCSgweDE4KQorI2RlZmluZSBTTTUwMV8yRF9TVFJFVENICQkoMHgxQykKKyNkZWZpbmUgU001MDFfMkRfQ09MT1JfQ09NUEFSRQkJKDB4MjApCisjZGVmaW5lIFNNNTAxXzJEX0NPTE9SX0NPTVBBUkVfTUFTSyAJKDB4MjQpCisjZGVmaW5lIFNNNTAxXzJEX01BU0sJCQkoMHgyOCkKKyNkZWZpbmUgU001MDFfMkRfQ0xJUF9UTAkJKDB4MkMpCisjZGVmaW5lIFNNNTAxXzJEX0NMSVBfQlIJCSgweDMwKQorI2RlZmluZSBTTTUwMV8yRF9NT05PX1BBVFRFUk5fTE9XCSgweDM0KQorI2RlZmluZSBTTTUwMV8yRF9NT05PX1BBVFRFUk5fSElHSAkoMHgzOCkKKyNkZWZpbmUgU001MDFfMkRfV0lORE9XX1dJRFRICQkoMHgzQykKKyNkZWZpbmUgU001MDFfMkRfU09VUkNFX0JBU0UJCSgweDQwKQorI2RlZmluZSBTTTUwMV8yRF9ERVNUSU5BVElPTl9CQVNFCSgweDQ0KQorI2RlZmluZSBTTTUwMV8yRF9BTFBIQQkJCSgweDQ4KQorI2RlZmluZSBTTTUwMV8yRF9XUkFQCQkJKDB4NEMpCisjZGVmaW5lIFNNNTAxXzJEX1NUQVRVUwkJCSgweDUwKQorCisjZGVmaW5lIFNNNTAxX0NTQ19ZX1NPVVJDRV9CQVNFCQkoMHhDOCkKKyNkZWZpbmUgU001MDFfQ1NDX0NPTlNUQU5UUwkJKDB4Q0MpCisjZGVmaW5lIFNNNTAxX0NTQ19ZX1NPVVJDRV9YCQkoMHhEMCkKKyNkZWZpbmUgU001MDFfQ1NDX1lfU09VUkNFX1kJCSgweEQ0KQorI2RlZmluZSBTTTUwMV9DU0NfVV9TT1VSQ0VfQkFTRQkJKDB4RDgpCisjZGVmaW5lIFNNNTAxX0NTQ19WX1NPVVJDRV9CQVNFCQkoMHhEQykKKyNkZWZpbmUgU001MDFfQ1NDX1NPVVJDRV9ESU1FTlNJT04JKDB4RTApCisjZGVmaW5lIFNNNTAxX0NTQ19TT1VSQ0VfUElUQ0gJCSgweEU0KQorI2RlZmluZSBTTTUwMV9DU0NfREVTVElOQVRJT04JCSgweEU4KQorI2RlZmluZSBTTTUwMV9DU0NfREVTVElOQVRJT05fRElNRU5TSU9OCSgweEVDKQorI2RlZmluZSBTTTUwMV9DU0NfREVTVElOQVRJT05fUElUQ0gJKDB4RjApCisjZGVmaW5lIFNNNTAxX0NTQ19TQ0FMRV9GQUNUT1IJCSgweEY0KQorI2RlZmluZSBTTTUwMV9DU0NfREVTVElOQVRJT05fQkFTRQkoMHhGOCkKKyNkZWZpbmUgU001MDFfQ1NDX0NPTlRST0wJCSgweEZDKQorCisvKiAyZCBlbmdpbmUgZGF0YSBwb3J0IGJhc2UgKi8KKyNkZWZpbmUgU001MDFfMkRfRU5HSU5FX0RBVEEJCSgweDExMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc201MDEuaCBiL2luY2x1ZGUvbGludXgvc201MDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTNhYWFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zbTUwMS5oCkBAIC0wLDAgKzEsMTcwIEBACisvKiBpbmNsdWRlL2xpbnV4L3NtNTAxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworZXh0ZXJuIGludCBzbTUwMV91bml0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdW5pdCwgdW5zaWduZWQgaW50IHRvKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc201MDFfc2V0X2Nsb2NrKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIGludCBjbGtzcmMsIHVuc2lnbmVkIGxvbmcgZnJlcSk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNtNTAxX2ZpbmRfY2xvY2soaW50IGNsa3NyYywgdW5zaWduZWQgbG9uZyByZXFfZnJlcSk7CisKKy8qIHNtNTAxX21pc2NfY29udHJvbAorICoKKyAqIE1vZGlmeSB0aGUgU001MDEncyBNSVNDX0NPTlRST0wgcmVnaXN0ZXIKKyovCisKK2V4dGVybiBpbnQgc201MDFfbWlzY19jb250cm9sKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2V0LCB1bnNpZ25lZCBsb25nIGNsZWFyKTsKKworLyogc201MDFfbW9kaWZ5X3JlZworICoKKyAqIE1vZGlmeSBhIHJlZ2lzdGVyIGluIHRoZSBTTTUwMSB3aGljaCBtYXkgYmUgc2hhcmVkIHdpdGggb3RoZXIKKyAqIGRyaXZlcnMuCisqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzbTUwMV9tb2RpZnlfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJlZywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNldCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNsZWFyKTsKKworLyogc201MDFfZ3Bpb19zZXQKKyAqCisgKiBzZXQgdGhlIHN0YXRlIG9mIHRoZSBnaXZlbiBHUElPIGxpbmUKKyovCisKK2V4dGVybiB2b2lkIHNtNTAxX2dwaW9fc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZ3BpbywKKwkJCSAgIHVuc2lnbmVkIGludCB0bywKKwkJCSAgIHVuc2lnbmVkIGludCBkaXIpOworCisvKiBzbTUwMV9ncGlvX2dldAorICoKKyAqIGdldCB0aGUgc3RhdGUgb2YgdGhlIGdpdmVuIEdQSU8gbGluZQorKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc201MDFfZ3Bpb19nZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGdwaW8pOworCisKKy8qIFBsYXRmb3JtIGRhdGEgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBTTTUwMUZCX0ZMQUdfVVNFX0lOSVRfTU9ERQkoMTw8MCkKKyNkZWZpbmUgU001MDFGQl9GTEFHX0RJU0FCTEVfQVRfRVhJVAkoMTw8MSkKKyNkZWZpbmUgU001MDFGQl9GTEFHX1VTRV9IV0NVUlNPUgkoMTw8MikKKyNkZWZpbmUgU001MDFGQl9GTEFHX1VTRV9IV0FDQ0VMCSgxPDwzKQorCitzdHJ1Y3Qgc201MDFfcGxhdGRhdGFfZmJzdWIgeworCXN0cnVjdCBmYl92aWRlb21vZGUJKmRlZl9tb2RlOworCXVuc2lnbmVkIGludAkJIGRlZl9icHA7CisJdW5zaWduZWQgbG9uZwkJIG1heF9tZW07CisJdW5zaWduZWQgaW50CQkgZmxhZ3M7Cit9OworCitlbnVtIHNtNTAxX2ZiX3JvdXRpbmcgeworCVNNNTAxX0ZCX09XTgkJPSAwLAkvKiBDUlQ9PkNSVCwgUGFuZWw9PlBhbmVsICovCisJU001MDFfRkJfQ1JUX1BBTkVMCT0gMSwJLyogUGFuZWw9PkNSVCwgUGFuZWw9PlBhbmVsICovCit9OworCisvKiBzbTUwMV9wbGF0ZGF0YV9mYiBmbGFnIGZpZWxkIGJpdCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIFNNNTAxX0ZCUERfU1dBUF9GQl9FTkRJQU4JKDE8PDApCS8qIG5lZWQgdG8gZW5kaWFuIHN3YXAgKi8KKworLyogc201MDFfcGxhdGRhdGFfZmIKKyAqCisgKiBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBmcmFtZWJ1ZmZlciBkcml2ZXIKKyovCisKK3N0cnVjdCBzbTUwMV9wbGF0ZGF0YV9mYiB7CisJZW51bSBzbTUwMV9mYl9yb3V0aW5nCQkgZmJfcm91dGU7CisJdW5zaWduZWQgaW50CQkJIGZsYWdzOworCXN0cnVjdCBzbTUwMV9wbGF0ZGF0YV9mYnN1YgkqZmJfY3J0OworCXN0cnVjdCBzbTUwMV9wbGF0ZGF0YV9mYnN1YgkqZmJfcG5sOworfTsKKworLyogZ3BpbyBpMmMgKi8KKworc3RydWN0IHNtNTAxX3BsYXRkYXRhX2dwaW9faTJjIHsKKwl1bnNpZ25lZCBpbnQJCXBpbl9zZGE7CisJdW5zaWduZWQgaW50CQlwaW5fc2NsOworfTsKKworLyogc201MDFfaW5pdGRhdGEKKyAqCisgKiB1c2UgZm9yIGluaXRpYWxpc2luZyB2YWx1ZXMgdGhhdCBtYXkgbm90IGhhdmUgYmVlbiBzZXR1cAorICogYmVmb3JlIHRoZSBkcml2ZXIgaXMgbG9hZGVkLgorKi8KKworc3RydWN0IHNtNTAxX3JlZ19pbml0IHsKKwl1bnNpZ25lZCBsb25nCQlzZXQ7CisJdW5zaWduZWQgbG9uZwkJbWFzazsKK307CisKKyNkZWZpbmUgU001MDFfVVNFX1VTQl9IT1NUCSgxPDwwKQorI2RlZmluZSBTTTUwMV9VU0VfVVNCX1NMQVZFCSgxPDwxKQorI2RlZmluZSBTTTUwMV9VU0VfU1NQMAkJKDE8PDIpCisjZGVmaW5lIFNNNTAxX1VTRV9TU1AxCQkoMTw8MykKKyNkZWZpbmUgU001MDFfVVNFX1VBUlQwCQkoMTw8NCkKKyNkZWZpbmUgU001MDFfVVNFX1VBUlQxCQkoMTw8NSkKKyNkZWZpbmUgU001MDFfVVNFX0ZCQUNDRUwJKDE8PDYpCisjZGVmaW5lIFNNNTAxX1VTRV9BQzk3CQkoMTw8NykKKyNkZWZpbmUgU001MDFfVVNFX0kyUwkJKDE8PDgpCisKKyNkZWZpbmUgU001MDFfVVNFX0FMTAkJKDB4ZmZmZmZmZmYpCisKK3N0cnVjdCBzbTUwMV9pbml0ZGF0YSB7CisJc3RydWN0IHNtNTAxX3JlZ19pbml0CWdwaW9fbG93OworCXN0cnVjdCBzbTUwMV9yZWdfaW5pdAlncGlvX2hpZ2g7CisJc3RydWN0IHNtNTAxX3JlZ19pbml0CW1pc2NfdGltaW5nOworCXN0cnVjdCBzbTUwMV9yZWdfaW5pdAltaXNjX2NvbnRyb2w7CisKKwl1bnNpZ25lZCBsb25nCQlkZXZpY2VzOworCXVuc2lnbmVkIGxvbmcJCW1jbGs7CQkvKiBub24temVybyB0byBtb2RpZnkgKi8KKwl1bnNpZ25lZCBsb25nCQltMXhjbGs7CQkvKiBub24temVybyB0byBtb2RpZnkgKi8KK307CisKKy8qIHNtNTAxX2luaXRfZ3BpbworICoKKyAqIGRlZmF1bHQgZ3BpbyBzZXR0aW5ncworKi8KKworc3RydWN0IHNtNTAxX2luaXRfZ3BpbyB7CisJc3RydWN0IHNtNTAxX3JlZ19pbml0CWdwaW9fZGF0YV9sb3c7CisJc3RydWN0IHNtNTAxX3JlZ19pbml0CWdwaW9fZGF0YV9oaWdoOworCXN0cnVjdCBzbTUwMV9yZWdfaW5pdAlncGlvX2Rkcl9sb3c7CisJc3RydWN0IHNtNTAxX3JlZ19pbml0CWdwaW9fZGRyX2hpZ2g7Cit9OworCisvKiBzbTUwMV9wbGF0ZGF0YQorICoKKyAqIFRoaXMgaXMgcGFzc2VkIHdpdGggdGhlIHBsYXRmb3JtIGRldmljZSB0byBhbGxvdyB0aGUgYm9hcmQKKyAqIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiB0aGUgU001MDEgZHJpdmVyKHMpIHdoaWNoIGF0dGFjaAorICogdG8gdGhlIGRldmljZS4KKyAqCisqLworCitzdHJ1Y3Qgc201MDFfcGxhdGRhdGEgeworCXN0cnVjdCBzbTUwMV9pbml0ZGF0YQkJKmluaXQ7CisJc3RydWN0IHNtNTAxX2luaXRfZ3BpbwkJKmluaXRfZ3Bpb3A7CisJc3RydWN0IHNtNTAxX3BsYXRkYXRhX2ZiCSpmYjsKKworCXN0cnVjdCBzbTUwMV9wbGF0ZGF0YV9ncGlvX2kyYwkqZ3Bpb19pMmM7CisJdW5zaWduZWQgaW50CQkJIGdwaW9faTJjX25yOworfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCmluZGV4IGRlOWZjNTc2Li4zMDY5ZWNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKQEAgLTE1MCwxMCArMTUwLDEwIEBACiAjZGVmaW5lIFJQQ19UQVNLX0hBU19USU1FUgkzCiAjZGVmaW5lIFJQQ19UQVNLX0FDVElWRQkJNAogCi0jZGVmaW5lIFJQQ19JU19SVU5OSU5HKHQpCSh0ZXN0X2JpdChSUENfVEFTS19SVU5OSU5HLCAmKHQpLT50a19ydW5zdGF0ZSkpCi0jZGVmaW5lIHJwY19zZXRfcnVubmluZyh0KQkoc2V0X2JpdChSUENfVEFTS19SVU5OSU5HLCAmKHQpLT50a19ydW5zdGF0ZSkpCisjZGVmaW5lIFJQQ19JU19SVU5OSU5HKHQpCXRlc3RfYml0KFJQQ19UQVNLX1JVTk5JTkcsICYodCktPnRrX3J1bnN0YXRlKQorI2RlZmluZSBycGNfc2V0X3J1bm5pbmcodCkJc2V0X2JpdChSUENfVEFTS19SVU5OSU5HLCAmKHQpLT50a19ydW5zdGF0ZSkKICNkZWZpbmUgcnBjX3Rlc3RfYW5kX3NldF9ydW5uaW5nKHQpIFwKLQkJCQkodGVzdF9hbmRfc2V0X2JpdChSUENfVEFTS19SVU5OSU5HLCAmKHQpLT50a19ydW5zdGF0ZSkpCisJCQkJdGVzdF9hbmRfc2V0X2JpdChSUENfVEFTS19SVU5OSU5HLCAmKHQpLT50a19ydW5zdGF0ZSkKICNkZWZpbmUgcnBjX2NsZWFyX3J1bm5pbmcodCkJXAogCWRvIHsgXAogCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsgXApAQCAtMTYxLDggKzE2MSw4IEBACiAJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7IFwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIFJQQ19JU19RVUVVRUQodCkJKHRlc3RfYml0KFJQQ19UQVNLX1FVRVVFRCwgJih0KS0+dGtfcnVuc3RhdGUpKQotI2RlZmluZSBycGNfc2V0X3F1ZXVlZCh0KQkoc2V0X2JpdChSUENfVEFTS19RVUVVRUQsICYodCktPnRrX3J1bnN0YXRlKSkKKyNkZWZpbmUgUlBDX0lTX1FVRVVFRCh0KQl0ZXN0X2JpdChSUENfVEFTS19RVUVVRUQsICYodCktPnRrX3J1bnN0YXRlKQorI2RlZmluZSBycGNfc2V0X3F1ZXVlZCh0KQlzZXRfYml0KFJQQ19UQVNLX1FVRVVFRCwgJih0KS0+dGtfcnVuc3RhdGUpCiAjZGVmaW5lIHJwY19jbGVhcl9xdWV1ZWQodCkJXAogCWRvIHsgXAogCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsgXApAQCAtMTc5LDcgKzE3OSw3IEBACiAJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7IFwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIFJQQ19JU19BQ1RJVkFURUQodCkJKHRlc3RfYml0KFJQQ19UQVNLX0FDVElWRSwgJih0KS0+dGtfcnVuc3RhdGUpKQorI2RlZmluZSBSUENfSVNfQUNUSVZBVEVEKHQpCXRlc3RfYml0KFJQQ19UQVNLX0FDVElWRSwgJih0KS0+dGtfcnVuc3RhdGUpCiAKIC8qCiAgKiBUYXNrIHByaW9yaXRpZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaCBiL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oCmluZGV4IGVjNjM5YWEuLmNlYjZjYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oCkBAIC0xMDgsNyArMTA4LDEwIEBACiAjZWxzZQogCiAjZGVmaW5lIG1ha2VfbWlncmF0aW9uX2VudHJ5KHBhZ2UsIHdyaXRlKSBzd3BfZW50cnkoMCwgMCkKLSNkZWZpbmUgaXNfbWlncmF0aW9uX2VudHJ5KHN3cCkgMAorc3RhdGljIGlubGluZSBpbnQgaXNfbWlncmF0aW9uX2VudHJ5KHN3cF9lbnRyeV90IHN3cCkKK3sKKwlyZXR1cm4gMDsKK30KICNkZWZpbmUgbWlncmF0aW9uX2VudHJ5X3RvX3BhZ2Uoc3dwKSBOVUxMCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFrZV9taWdyYXRpb25fZW50cnlfcmVhZChzd3BfZW50cnlfdCAqZW50cnlwKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGljay5oIGIvaW5jbHVkZS9saW51eC90aWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3MjUyZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGljay5oCkBAIC0wLDAgKzEsMTA5IEBACisvKiAgbGludXgvaW5jbHVkZS9saW51eC90aWNrLmgKKyAqCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgZm9yIHRpY2sgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKyNpZm5kZWYgX0xJTlVYX1RJQ0tfSAorI2RlZmluZSBfTElOVVhfVElDS19ICisKKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUworCitlbnVtIHRpY2tfZGV2aWNlX21vZGUgeworCVRJQ0tERVZfTU9ERV9QRVJJT0RJQywKKwlUSUNLREVWX01PREVfT05FU0hPVCwKK307CisKK3N0cnVjdCB0aWNrX2RldmljZSB7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ZGV2OworCWVudW0gdGlja19kZXZpY2VfbW9kZSBtb2RlOworfTsKKworZW51bSB0aWNrX25vaHpfbW9kZSB7CisJTk9IWl9NT0RFX0lOQUNUSVZFLAorCU5PSFpfTU9ERV9MT1dSRVMsCisJTk9IWl9NT0RFX0hJR0hSRVMsCit9OworCisvKioKKyAqIHN0cnVjdCB0aWNrX3NjaGVkIC0gc2NoZWQgdGljayBlbXVsYXRpb24gYW5kIG5vIGlkbGUgdGljayBjb250cm9sL3N0YXRzCisgKiBAc2NoZWRfdGltZXI6CWhydGltZXIgdG8gc2NoZWR1bGUgdGhlIHBlcmlvZGljIHRpY2sgaW4gaGlnaAorICoJCQlyZXNvbHV0aW9uIG1vZGUKKyAqIEBpZGxlX3RpY2s6CQlTdG9yZSB0aGUgbGFzdCBpZGxlIHRpY2sgZXhwaXJ5IHRpbWUgd2hlbiB0aGUgdGljaworICoJCQl0aW1lciBpcyBtb2RpZmllZCBmb3IgaWRsZSBzbGVlcHMuIFRoaXMgaXMgbmVjZXNzYXJ5CisgKgkJCXRvIHJlc3VtZSB0aGUgdGljayB0aW1lciBvcGVyYXRpb24gaW4gdGhlIHRpbWVsaW5lCisgKgkJCXdoZW4gdGhlIENQVSByZXR1cm5zIGZyb20gaWRsZQorICogQHRpY2tfc3RvcHBlZDoJSW5kaWNhdG9yIHRoYXQgdGhlIGlkbGUgdGljayBoYXMgYmVlbiBzdG9wcGVkCisgKiBAaWRsZV9qaWZmaWVzOglqaWZmaWVzIGF0IHRoZSBlbnRyeSB0byBpZGxlIGZvciBpZGxlIHRpbWUgYWNjb3VudGluZworICogQGlkbGVfY2FsbHM6CQlUb3RhbCBudW1iZXIgb2YgaWRsZSBjYWxscworICogQGlkbGVfc2xlZXBzOglOdW1iZXIgb2YgaWRsZSBjYWxscywgd2hlcmUgdGhlIHNjaGVkIHRpY2sgd2FzIHN0b3BwZWQKKyAqIEBpZGxlX2VudHJ5dGltZToJVGltZSB3aGVuIHRoZSBpZGxlIGNhbGwgd2FzIGVudGVyZWQKKyAqIEBpZGxlX3NsZWVwdGltZToJU3VtIG9mIHRoZSB0aW1lIHNsZXB0IGluIGlkbGUgd2l0aCBzY2hlZCB0aWNrIHN0b3BwZWQKKyAqLworc3RydWN0IHRpY2tfc2NoZWQgeworCXN0cnVjdCBocnRpbWVyCQkJc2NoZWRfdGltZXI7CisJdW5zaWduZWQgbG9uZwkJCWNoZWNrX2Nsb2NrczsKKwllbnVtIHRpY2tfbm9oel9tb2RlCQlub2h6X21vZGU7CisJa3RpbWVfdAkJCQlpZGxlX3RpY2s7CisJaW50CQkJCXRpY2tfc3RvcHBlZDsKKwl1bnNpZ25lZCBsb25nCQkJaWRsZV9qaWZmaWVzOworCXVuc2lnbmVkIGxvbmcJCQlpZGxlX2NhbGxzOworCXVuc2lnbmVkIGxvbmcJCQlpZGxlX3NsZWVwczsKKwlrdGltZV90CQkJCWlkbGVfZW50cnl0aW1lOworCWt0aW1lX3QJCQkJaWRsZV9zbGVlcHRpbWU7CisJdW5zaWduZWQgbG9uZwkJCWxhc3RfamlmZmllczsKKwl1bnNpZ25lZCBsb25nCQkJbmV4dF9qaWZmaWVzOworCWt0aW1lX3QJCQkJaWRsZV9leHBpcmVzOworfTsKKworZXh0ZXJuIHZvaWQgX19pbml0IHRpY2tfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgdGlja19pc19vbmVzaG90X2F2YWlsYWJsZSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgdGlja19kZXZpY2UgKnRpY2tfZ2V0X2RldmljZShpbnQgY3B1KTsKKworIyBpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCitleHRlcm4gaW50IHRpY2tfaW5pdF9oaWdocmVzKHZvaWQpOworZXh0ZXJuIGludCB0aWNrX3Byb2dyYW1fZXZlbnQoa3RpbWVfdCBleHBpcmVzLCBpbnQgZm9yY2UpOworZXh0ZXJuIHZvaWQgdGlja19zZXR1cF9zY2hlZF90aW1lcih2b2lkKTsKK2V4dGVybiB2b2lkIHRpY2tfY2FuY2VsX3NjaGVkX3RpbWVyKGludCBjcHUpOworIyBlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19jYW5jZWxfc2NoZWRfdGltZXIoaW50IGNwdSkgeyB9CisjIGVuZGlmIC8qIEhJR0hSRVMgKi8KKworIyBpZmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QKK2V4dGVybiBzdHJ1Y3QgdGlja19kZXZpY2UgKnRpY2tfZ2V0X2Jyb2FkY2FzdF9kZXZpY2Uodm9pZCk7CitleHRlcm4gY3B1bWFza190ICp0aWNrX2dldF9icm9hZGNhc3RfbWFzayh2b2lkKTsKKworIyAgaWZkZWYgQ09ORklHX1RJQ0tfT05FU0hPVAorZXh0ZXJuIGNwdW1hc2tfdCAqdGlja19nZXRfYnJvYWRjYXN0X29uZXNob3RfbWFzayh2b2lkKTsKKyMgIGVuZGlmCisKKyMgZW5kaWYgLyogQlJPQURDQVNUICovCisKKyMgaWZkZWYgQ09ORklHX1RJQ0tfT05FU0hPVAorZXh0ZXJuIHZvaWQgdGlja19jbG9ja19ub3RpZnkodm9pZCk7CitleHRlcm4gaW50IHRpY2tfY2hlY2tfb25lc2hvdF9jaGFuZ2UoaW50IGFsbG93X25vaHopOworZXh0ZXJuIHN0cnVjdCB0aWNrX3NjaGVkICp0aWNrX2dldF90aWNrX3NjaGVkKGludCBjcHUpOworIyBlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19jbG9ja19ub3RpZnkodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIGludCB0aWNrX2NoZWNrX29uZXNob3RfY2hhbmdlKGludCBhbGxvd19ub2h6KSB7IHJldHVybiAwOyB9CisjIGVuZGlmCisKKyNlbHNlIC8qIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19pbml0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2FuY2VsX3NjaGVkX3RpbWVyKGludCBjcHUpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2xvY2tfbm90aWZ5KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgdGlja19jaGVja19vbmVzaG90X2NoYW5nZShpbnQgYWxsb3dfbm9oeikgeyByZXR1cm4gMDsgfQorI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyAqLworCisjIGlmZGVmIENPTkZJR19OT19IWgorZXh0ZXJuIHZvaWQgdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljayh2b2lkKTsKK2V4dGVybiB2b2lkIHRpY2tfbm9oel9yZXN0YXJ0X3NjaGVkX3RpY2sodm9pZCk7CitleHRlcm4gdm9pZCB0aWNrX25vaHpfdXBkYXRlX2ppZmZpZXModm9pZCk7CisjIGVsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfc3RvcF9zY2hlZF90aWNrKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHRpY2tfbm9oel9yZXN0YXJ0X3NjaGVkX3RpY2sodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3VwZGF0ZV9qaWZmaWVzKHZvaWQpIHsgfQorIyBlbmRpZiAvKiAhTk9fSFogKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IDU1Y2VlMTcuLjhlYThkZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC05MCw4ICs5MCw5IEBACiAKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgeHRpbWU7CiBleHRlcm4gc3RydWN0IHRpbWVzcGVjIHdhbGxfdG9fbW9ub3RvbmljOwotZXh0ZXJuIHNlcWxvY2tfdCB4dGltZV9sb2NrOworZXh0ZXJuIHNlcWxvY2tfdCB4dGltZV9sb2NrIF9fYXR0cmlidXRlX18oKHdlYWspKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHZvaWQpOwogdm9pZCB0aW1la2VlcGluZ19pbml0KHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3NlY29uZHModm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXIuaCBiL2luY2x1ZGUvbGludXgvdGltZXIuaAppbmRleCBmYjVlZGFhLi43MTkxMTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lci5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVElNRVJfSAogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KIApAQCAtMTUsNiArMTYsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGRhdGE7CiAKIAlzdHJ1Y3QgdHZlY190X2Jhc2VfcyAqYmFzZTsKKyNpZmRlZiBDT05GSUdfVElNRVJfU1RBVFMKKwl2b2lkICpzdGFydF9zaXRlOworCWNoYXIgc3RhcnRfY29tbVsxNl07CisJaW50IHN0YXJ0X3BpZDsKKyNlbmRpZgogfTsKIAogZXh0ZXJuIHN0cnVjdCB0dmVjX3RfYmFzZV9zIGJvb3RfdHZlY19iYXNlczsKQEAgLTYxLDcgKzY3LDY1IEBACiBleHRlcm4gaW50IF9fbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKTsKIGV4dGVybiBpbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKTsKIAorLyoKKyAqIFJldHVybiB3aGVuIHRoZSBuZXh0IHRpbWVyLXdoZWVsIHRpbWVvdXQgb2NjdXJzIChpbiBhYnNvbHV0ZSBqaWZmaWVzKSwKKyAqIGxvY2tzIHRoZSB0aW1lciBiYXNlOgorICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBuZXh0X3RpbWVyX2ludGVycnVwdCh2b2lkKTsKKy8qCisgKiBSZXR1cm4gd2hlbiB0aGUgbmV4dCB0aW1lci13aGVlbCB0aW1lb3V0IG9jY3VycyAoaW4gYWJzb2x1dGUgamlmZmllcyksCisgKiBsb2NrcyB0aGUgdGltZXIgYmFzZSBhbmQgZG9lcyB0aGUgY29tcGFyaXNvbiBhZ2FpbnN0IHRoZSBnaXZlbgorICogamlmZmllLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfbmV4dF90aW1lcl9pbnRlcnJ1cHQodW5zaWduZWQgbG9uZyBub3cpOworCisvKgorICogVGltZXItc3RhdGlzdGljcyBpbmZvOgorICovCisjaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCisKK2V4dGVybiB2b2lkIGluaXRfdGltZXJfc3RhdHModm9pZCk7CisKK2V4dGVybiB2b2lkIHRpbWVyX3N0YXRzX3VwZGF0ZV9zdGF0cyh2b2lkICp0aW1lciwgcGlkX3QgcGlkLCB2b2lkICpzdGFydGYsCisJCQkJICAgICB2b2lkICp0aW1lcmYsIGNoYXIgKiBjb21tKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3N0YXRzX2FjY291bnRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQoreworCXRpbWVyX3N0YXRzX3VwZGF0ZV9zdGF0cyh0aW1lciwgdGltZXItPnN0YXJ0X3BpZCwgdGltZXItPnN0YXJ0X3NpdGUsCisJCQkJIHRpbWVyLT5mdW5jdGlvbiwgdGltZXItPnN0YXJ0X2NvbW0pOworfQorCitleHRlcm4gdm9pZCBfX3RpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCQkJICAgICAgIHZvaWQgKmFkZHIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQoreworCV9fdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8odGltZXIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zdGF0c190aW1lcl9jbGVhcl9zdGFydF9pbmZvKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKK3sKKwl0aW1lci0+c3RhcnRfc2l0ZSA9IE5VTEw7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfdGltZXJfc3RhdHModm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3N0YXRzX2FjY291bnRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfdGltZXJfY2xlYXJfc3RhcnRfaW5mbyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCit7Cit9CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgZGVsYXllZF93b3JrX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgX19kYXRhKTsKIAogLyoqCiAgKiBhZGRfdGltZXIgLSBzdGFydCBhIHRpbWVyCkBAIC05Niw3ICsxNjAsNyBAQAogZXh0ZXJuIHZvaWQgaW5pdF90aW1lcnModm9pZCk7CiBleHRlcm4gdm9pZCBydW5fbG9jYWxfdGltZXJzKHZvaWQpOwogc3RydWN0IGhydGltZXI7Ci1leHRlcm4gaW50IGl0X3JlYWxfZm4oc3RydWN0IGhydGltZXIgKik7CitleHRlcm4gZW51bSBocnRpbWVyX3Jlc3RhcnQgaXRfcmVhbF9mbihzdHJ1Y3QgaHJ0aW1lciAqKTsKIAogdW5zaWduZWQgbG9uZyBfX3JvdW5kX2ppZmZpZXModW5zaWduZWQgbG9uZyBqLCBpbnQgY3B1KTsKIHVuc2lnbmVkIGxvbmcgX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlKHVuc2lnbmVkIGxvbmcgaiwgaW50IGNwdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmggYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKaW5kZXggOWEyNGU1MC4uZGE5MjlkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1leC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXguaApAQCAtMjg2LDYgKzI4NiwxMyBAQAogCiAjZGVmaW5lIFRJQ0tfTEVOR1RIX1NISUZUCTMyCiAKKyNpZmRlZiBDT05GSUdfTk9fSFoKKyNkZWZpbmUgTlRQX0lOVEVSVkFMX0ZSRVEgICgyKQorI2Vsc2UKKyNkZWZpbmUgTlRQX0lOVEVSVkFMX0ZSRVEgIChIWikKKyNlbmRpZgorI2RlZmluZSBOVFBfSU5URVJWQUxfTEVOR1RIIChOU0VDX1BFUl9TRUMvTlRQX0lOVEVSVkFMX0ZSRVEpCisKIC8qIFJldHVybnMgaG93IGxvbmcgdGlja3MgYXJlIGF0IHByZXNlbnQsIGluIG5zIC8gMl4oU0hJRlRfU0NBTEUtMTApLiAqLwogZXh0ZXJuIHU2NCBjdXJyZW50X3RpY2tfbGVuZ3RoKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCBiNWMyMjZhLi5hOGU4ZDFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTkzNSw3ICs5MzUsNyBAQAogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJdW5zaWduZWQgaW50IGxlbmd0aDsJCS8qIGV4cGVjdGVkIGxlbmd0aCAqLwogCXVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoOwotCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IHN0YXR1czsKIH07CiAKIHN0cnVjdCB1cmI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jZGMuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCmluZGV4IGJhNjE3YzMuLjk1NmVkZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCkBAIC03Myw2ICs3MywxMyBAQAogCV9fdTgJYm1DYXBhYmlsaXRpZXM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyogY2FwYWJpbGl0aWVzIGZyb20gNS4yLjMuMyAqLworCisjZGVmaW5lIFVTQl9DRENfQ09NTV9GRUFUVVJFCTB4MDEKKyNkZWZpbmUgVVNCX0NEQ19DQVBfTElORQkweDAyCisjZGVmaW5lIFVTQl9DRENfQ0FQX0JSSwkweDA0CisjZGVmaW5lIFVTQl9DRENfQ0FQX05PVElGWQkweDA4CisKIC8qICJVbmlvbiBGdW5jdGlvbmFsIERlc2NyaXB0b3IiIGZyb20gQ0RDIHNwZWMgNS4yLjMuOCAqLwogc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyB7CiAJX191OAliTGVuZ3RoOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAppbmRleCBhZTc4MzM3Li4yNDVjNzI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaApAQCAtMzY3LDcgKzM2Nyw3IEBACiAJLyogYnVsayBlbmRwb2ludHMgd2l0aCA4IGJ5dGUgbWF4cGFja2V0ICovCiAJX191OCAgYkRlYnVnSW5FbmRwb2ludDsKIAlfX3U4ICBiRGVidWdPdXRFbmRwb2ludDsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0zOTYsNyArMzk2LDcgQEAKIAogCV9fbGUxNiB3VG90YWxMZW5ndGg7CiAJX191OCAgYk51bUVuY3J5cHRpb25UeXBlczsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00MTAsNyArNDEwLDcgQEAKIAlfX3U4ICB0VEtJRFszXTsKIAlfX3U4ICBiUmVzZXJ2ZWQ7CiAJX191OCAgYktleURhdGFbMF07Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNDI2LDcgKzQyNiw3IEBACiAjZGVmaW5lCVVTQl9FTkNfVFlQRV9SU0FfMQkJMwkvKiByc2EzMDcyL3NoYTEgYXV0aCAqLwogCV9fdTggIGJFbmNyeXB0aW9uVmFsdWU7CQkvKiB1c2UgaW4gU0VUX0VOQ1JZUFRJT04gKi8KIAlfX3U4ICBiQXV0aEtleUluZGV4OwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQzOCw3ICs0MzgsNyBAQAogCiAJX19sZTE2IHdUb3RhbExlbmd0aDsKIAlfX3U4ICBiTnVtRGV2aWNlQ2FwczsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00NDcsNyArNDQ3LDcgQEAKIAlfX3U4ICBiTGVuZ3RoOwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKIAlfX3U4ICBiRGV2Q2FwYWJpbGl0eVR5cGU7Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2RlZmluZQlVU0JfQ0FQX1RZUEVfV0lSRUxFU1NfVVNCCTEKIApAQCAtNDc1LDcgKzQ3NSw3IEBACiAJX191OCAgYm1GRklUWFBvd2VySW5mbzsJLyogRkZJIHBvd2VyIGxldmVscyAqLwogCV9fbGUxNiBibUJhbmRHcm91cDsKIAlfX3U4ICBiUmVzZXJ2ZWQ7Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNDk2LDcgKzQ5Niw3IEBACiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9TV0lUQ0hfTk8JCTAKICNkZWZpbmUgVVNCX0VORFBPSU5UX1NXSVRDSF9TV0lUQ0gJMQogI2RlZmluZSBVU0JfRU5EUE9JTlRfU1dJVENIX1NDQUxFCTIKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01MTIsNyArNTEyLDcgQEAKIAlfX3U4IENESURbMTZdOwogCV9fdTggbm9uY2VbMTZdOwogCV9fdTggTUlDWzhdOwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTUyNCw3ICs1MjQsNyBAQAogCV9fdTggQ0hJRFsxNl07CQkvKiBwZXJzaXN0ZW50IGhvc3QgaWQgKi8KIAlfX3U4IENESURbMTZdOwkJLyogZGV2aWNlIGlkICh1bmlxdWUgdy9pbiBob3N0IGNvbnRleHQpICovCiAJX191OCBDS1sxNl07CQkvKiBjb25uZWN0aW9uIGtleSAqLwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggMzNkY2Q4NS4uMzJhY2JhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKQEAgLTU0LDYgKzU0LDggQEAKICAqIEB3cml0ZV93YWl0OiBhIHdhaXRfcXVldWVfaGVhZF90IHVzZWQgYnkgdGhlIHBvcnQuCiAgKiBAd29yazogd29yayBxdWV1ZSBlbnRyeSBmb3IgdGhlIGxpbmUgZGlzY2lwbGluZSB3YWtpbmcgdXAuCiAgKiBAb3Blbl9jb3VudDogbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBoYXMgYmVlbiBvcGVuZWQuCisgKiBAdGhyb3R0bGVkOiBub256ZXJvIGlmIHRoZSByZWFkIHVyYiBpcyBpbmFjdGl2ZSB0byB0aHJvdHRsZSB0aGUgZGV2aWNlCisgKiBAdGhyb3R0bGVfcmVxOiBub256ZXJvIGlmIHRoZSB0dHkgd2FudHMgdG8gdGhyb3R0bGUgdXMKICAqCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IHRoZSB1c2Itc2VyaWFsIGNvcmUgYW5kIGRyaXZlcnMgZm9yIHRoZSBzcGVjaWZpYwogICogcG9ydHMgb2YgYSBkZXZpY2UuCkBAIC04OCw2ICs5MCw4IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJd3JpdGVfd2FpdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIAlpbnQJCQlvcGVuX2NvdW50OworCWNoYXIJCQl0aHJvdHRsZWQ7CisJY2hhcgkJCXRocm90dGxlX3JlcTsKIAlzdHJ1Y3QgZGV2aWNlCQlkZXY7CiB9OwogI2RlZmluZSB0b191c2Jfc2VyaWFsX3BvcnQoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQsIGRldikKQEAgLTI2OSw2ICsyNzMsOCBAQAogZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIGV4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYik7CiBleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY190aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVnaXN0ZXIgKGludCBkZWJ1Zyk7CiBleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfZGVyZWdpc3RlciAodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAppbmRleCAyYWU3NmZlLi4xYjc5MmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKQEAgLTQ2LDcgKzQ2LDkgQEAKIAlVU19GTEFHKE1BWF9TRUNUT1JTXzY0LAkweDAwMDAwNDAwKQkJCVwKIAkJLyogU2V0cyBtYXhfc2VjdG9ycyB0byA2NCAgICAqLwkJCVwKIAlVU19GTEFHKElHTk9SRV9ERVZJQ0UsCTB4MDAwMDA4MDApCQkJXAotCQkvKiBEb24ndCBjbGFpbSBkZXZpY2UgKi8KKwkJLyogRG9uJ3QgY2xhaW0gZGV2aWNlICovCQkJXAorCVVTX0ZMQUcoQ0FQQUNJVFlfSEVVUklTVElDUywJMHgwMDAwMTAwMCkJCVwKKwkJLyogc29tZXRpbWVzIHNpemVzIGlzIHRvbyBiaWcgKi8KIAogI2RlZmluZSBVU19GTEFHKG5hbWUsIHZhbHVlKQlVU19GTF8jI25hbWUgPSB2YWx1ZSAsCiBlbnVtIHsgVVNfRE9fQUxMX0ZMQUdTIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oIGIvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaAppbmRleCA2MTdkOGExLi4zNDJkZDVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmgKQEAgLTE1OSw5ICsxNTksOSBAQAogI2RlZmluZSBVU0JERVZGU19TVUJNSVRVUkIzMiAgICAgICBfSU9SKCdVJywgMTAsIHN0cnVjdCB1c2JkZXZmc191cmIzMikKICNkZWZpbmUgVVNCREVWRlNfRElTQ0FSRFVSQiAgICAgICAgX0lPKCdVJywgMTEpCiAjZGVmaW5lIFVTQkRFVkZTX1JFQVBVUkIgICAgICAgICAgIF9JT1coJ1UnLCAxMiwgdm9pZCAqKQotI2RlZmluZSBVU0JERVZGU19SRUFQVVJCMzIgICAgICAgICBfSU9XKCdVJywgMTIsIHUzMikKKyNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQjMyICAgICAgICAgX0lPVygnVScsIDEyLCBfX3UzMikKICNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQk5ERUxBWSAgICAgX0lPVygnVScsIDEzLCB2b2lkICopCi0jZGVmaW5lIFVTQkRFVkZTX1JFQVBVUkJOREVMQVkzMiAgIF9JT1coJ1UnLCAxMywgdTMyKQorI2RlZmluZSBVU0JERVZGU19SRUFQVVJCTkRFTEFZMzIgICBfSU9XKCdVJywgMTMsIF9fdTMyKQogI2RlZmluZSBVU0JERVZGU19ESVNDU0lHTkFMICAgICAgICBfSU9SKCdVJywgMTQsIHN0cnVjdCB1c2JkZXZmc19kaXNjb25uZWN0c2lnbmFsKQogI2RlZmluZSBVU0JERVZGU19DTEFJTUlOVEVSRkFDRSAgICBfSU9SKCdVJywgMTUsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVVNCREVWRlNfUkVMRUFTRUlOVEVSRkFDRSAgX0lPUignVScsIDE2LCB1bnNpZ25lZCBpbnQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCBkOTRlMjY4Li42NWExNjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTEsNSArMSw0NSBAQAogLyoKLSAqCVZpZGVvIGZvciBMaW51eCBUd28KKyAqICBWaWRlbyBmb3IgTGludXggVHdvIGhlYWRlciBmaWxlCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDA3IHRoZSBjb250cmlidXRvcnMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHJlZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogIEJTRCBsaWNlbnNlIGFzIHN0YXRlZCBiZWxvdzoKKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgICBkaXN0cmlidXRpb24uCisgKiAgMy4gVGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICogICAgIHBlcm1pc3Npb24uCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiAgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICoKICAqCUhlYWRlciBmaWxlIGZvciB2NGwgb3IgVjRMMiBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMKICAqIHdpdGggcHVibGljIEFQSS4KQEAgLTgsOCArNDgsOSBAQAogICoKICAqCVNlZSBodHRwOi8vbGludXh0di5vcmcgZm9yIG1vcmUgaW5mbwogICoKLSAqCUF1dGhvcjogQmlsbCBEaXJrcyA8YmRpcmtzQHBhY2JlbGwubmV0PgorICoJQXV0aG9yOiBCaWxsIERpcmtzIDxiaWxsQHRoZWRpcmtzLm9yZz4KICAqCQlKdXN0aW4gU2Nob2VtYW4KKyAqICAgICAgICAgICAgICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KICAqCQlldCBhbC4KICAqLwogI2lmbmRlZiBfX0xJTlVYX1ZJREVPREVWMl9ICkBAIC05MCwxMSArMTMxLDggQEAKIAlWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVkgICAgICA9IDMsCiAJVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAgICAgICAgPSA0LAogCVY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVCAgICAgICAgID0gNSwKLSNpZiAxCi0JLyogRXhwZXJpbWVudGFsIFNsaWNlZCBWQkkgKi8KIAlWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSA9IDYsCiAJVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCAgPSA3LAotI2VuZGlmCiAJVjRMMl9CVUZfVFlQRV9QUklWQVRFICAgICAgICAgICAgPSAweDgwLAogfTsKIApAQCAtMTg2LDEwICsyMjQsOCBAQAogI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVkVSTEFZCQkweDAwMDAwMDA0ICAvKiBDYW4gZG8gdmlkZW8gb3ZlcmxheSAqLwogI2RlZmluZSBWNEwyX0NBUF9WQklfQ0FQVFVSRQkJMHgwMDAwMDAxMCAgLyogSXMgYSByYXcgVkJJIGNhcHR1cmUgZGV2aWNlICovCiAjZGVmaW5lIFY0TDJfQ0FQX1ZCSV9PVVRQVVQJCTB4MDAwMDAwMjAgIC8qIElzIGEgcmF3IFZCSSBvdXRwdXQgZGV2aWNlICovCi0jaWYgMQogI2RlZmluZSBWNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkUJMHgwMDAwMDA0MCAgLyogSXMgYSBzbGljZWQgVkJJIGNhcHR1cmUgZGV2aWNlICovCiAjZGVmaW5lIFY0TDJfQ0FQX1NMSUNFRF9WQklfT1VUUFVUCTB4MDAwMDAwODAgIC8qIElzIGEgc2xpY2VkIFZCSSBvdXRwdXQgZGV2aWNlICovCi0jZW5kaWYKICNkZWZpbmUgVjRMMl9DQVBfUkRTX0NBUFRVUkUJCTB4MDAwMDAxMDAgIC8qIFJEUyBkYXRhIGNhcHR1cmUgKi8KIAogI2RlZmluZSBWNEwyX0NBUF9UVU5FUgkJCTB4MDAwMTAwMDAgIC8qIGhhcyBhIHR1bmVyICovCkBAIC0xMTc5LDcgKzEyMTUsNiBAQAogI2RlZmluZSBWNEwyX1ZCSV9VTlNZTkMJCSgxPDwgMCkKICNkZWZpbmUgVjRMMl9WQklfSU5URVJMQUNFRAkoMTw8IDEpCiAKLSNpZiAxCiAvKiBTbGljZWQgVkJJCiAgKgogICogICAgVGhpcyBpbXBsZW1lbnRzIGlzIGEgcHJvcG9zYWwgVjRMMiBBUEkgdG8gYWxsb3cgU0xJQ0VEIFZCSQpAQCAtMTIxMiw3ICsxMjQ3LDYgQEAKICNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzUyNSAgICAgICAgICAgICAoVjRMMl9TTElDRURfQ0FQVElPTl81MjUpCiAjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV82MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9WUFMgfCBWNEwyX1NMSUNFRF9XU1NfNjI1KQogCi0KIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwCiB7CiAJX191MTYgICBzZXJ2aWNlX3NldDsKQEAgLTEyMzMsNyArMTI2Nyw2IEBACiAJX191MzIgICByZXNlcnZlZDsgICAgICAgLyogbXVzdCBiZSAwICovCiAJX191OCAgICBkYXRhWzQ4XTsKIH07Ci0jZW5kaWYKIAogLyoKICAqCUEgRyBHIFIgRSBHIEEgVCBFICAgUyBUIFIgVSBDIFQgVSBSIEUgUwpAQCAtMTI0OSw5ICsxMjgyLDcgQEAKIAkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdAkJcGl4OyAgICAgLy8gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCiAJCXN0cnVjdCB2NGwyX3dpbmRvdwkJd2luOyAgICAgLy8gVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZCiAJCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQJCXZiaTsgICAgIC8vIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUKLSNpZiAxCiAJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0CXNsaWNlZDsgIC8vIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFCi0jZW5kaWYKIAkJX191OAlyYXdfZGF0YVsyMDBdOyAgICAgICAgICAgICAgICAgICAvLyB1c2VyLWRlZmluZWQKIAl9IGZtdDsKIH07CkBAIC0xMjcxLDYgKzEzMDIsMTcgQEAKIH07CiAKIC8qCisgKglBIEQgViBBIE4gQyBFIEQgICBEIEUgQiBVIEcgRyBJIE4gRworICovCisKKy8qIFZJRElPQ19EQkdfR19SRUdJU1RFUiBhbmQgVklESU9DX0RCR19TX1JFR0lTVEVSICovCitzdHJ1Y3QgdjRsMl9yZWdpc3RlciB7CisJX191NjQgcmVnOworCV9fdTMyIGkyY19pZDsgLyogSTJDIGRyaXZlciBJRCBvZiB0aGUgSTJDIGNoaXAsIG9yIDAgZm9yIHRoZSBob3N0ICovCisJX191MzIgdmFsOworfTsKKworLyoKICAqCUkgTyBDIFQgTCAgIEMgTyBEIEUgUyAgIEYgTyBSICAgViBJIEQgRSBPICAgRCBFIFYgSSBDIEUgUwogICoKICAqLwpAQCAtMTMyOCw5ICsxMzcwLDcgQEAKICNkZWZpbmUgVklESU9DX0VOVU1BVURPVVQJX0lPV1IgKCdWJywgNjYsIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQogI2RlZmluZSBWSURJT0NfR19QUklPUklUWSAgICAgICBfSU9SICAoJ1YnLCA2NywgZW51bSB2NGwyX3ByaW9yaXR5KQogI2RlZmluZSBWSURJT0NfU19QUklPUklUWSAgICAgICBfSU9XICAoJ1YnLCA2OCwgZW51bSB2NGwyX3ByaW9yaXR5KQotI2lmIDEKICNkZWZpbmUgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVAgX0lPV1IgKCdWJywgNjksIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwKQotI2VuZGlmCiAjZGVmaW5lIFZJRElPQ19MT0dfU1RBVFVTICAgICAgIF9JTyAgICgnVicsIDcwKQogI2RlZmluZSBWSURJT0NfR19FWFRfQ1RSTFMJX0lPV1IgKCdWJywgNzEsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scykKICNkZWZpbmUgVklESU9DX1NfRVhUX0NUUkxTCV9JT1dSICgnVicsIDcyLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCkBAIC0xMzM5LDYgKzEzNzksOSBAQAogI2RlZmluZSBWSURJT0NfRU5VTV9GUkFNRVNJWkVTCV9JT1dSICgnVicsIDc0LCBzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSkKICNkZWZpbmUgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFMJX0lPV1IgKCdWJywgNzUsIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtKQogI2VuZGlmCisvKiBvbmx5IGltcGxlbWVudGVkIGlmIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgZGVmaW5lZCAqLworI2RlZmluZQlWSURJT0NfREJHX1NfUkVHSVNURVIgCV9JT1cgKCdkJywgMTAwLCBzdHJ1Y3QgdjRsMl9yZWdpc3RlcikKKyNkZWZpbmUJVklESU9DX0RCR19HX1JFR0lTVEVSIAlfSU9XUignZCcsIDEwMSwgc3RydWN0IHY0bDJfcmVnaXN0ZXIpCiAKICNpZmRlZiBfX09MRF9WSURJT0NfCiAvKiBmb3IgY29tcGF0aWJpbGl0eSwgd2lsbCBnbyBhd2F5IHNvbWUgZGF5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmggYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKaW5kZXggN2MyNjlmNDkuLjQ0N2M1MmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKQEAgLTMzNCw3ICszMzQsNyBAQAogICogc2VwYXJhdGUgcmFuZ2UgYmVjYXVzZSBvZiBjb2xsaXNpb25zIHdpdGggb3RoZXIgdG9vbHMgc3VjaCBhcwogICogJ21paS10b29sJy4KICAqIFdlIG5vdyBoYXZlIDMyIGNvbW1hbmRzLCBzbyBhIGJpdCBtb3JlIHNwYWNlIDstKS4KLSAqIEFsc28sIGFsbCAnb2RkJyBjb21tYW5kcyBhcmUgb25seSB1c2FibGUgYnkgcm9vdCBhbmQgZG9uJ3QgcmV0dXJuIHRoZQorICogQWxzbywgYWxsICdldmVuJyBjb21tYW5kcyBhcmUgb25seSB1c2FibGUgYnkgcm9vdCBhbmQgZG9uJ3QgcmV0dXJuIHRoZQogICogY29udGVudCBvZiBpZnIvaXdyIHRvIHVzZXIgKGJ1dCB5b3UgYXJlIG5vdCBvYmxpZ2VkIHRvIHVzZSB0aGUgc2V0L2dldAogICogY29udmVudGlvbiwganVzdCB1c2UgZXZlcnkgb3RoZXIgdHdvIGNvbW1hbmQpLiBNb3JlIGRldGFpbHMgaW4gaXdwcml2LmMuCiAgKiBBbmQgSSByZXBlYXQgOiB5b3UgYXJlIG5vdCBmb3JjZWQgdG8gdXNlIHRoZW0gd2l0aCBpd3ByaXYsIGJ1dCB5b3UKQEAgLTM0OCw3ICszNDgsNyBAQAogI2RlZmluZSBTSU9DSVdMQVNUCVNJT0NJV0xBU1RQUklWCQkvKiAweDhCRkYgKi8KICNkZWZpbmUgSVdfSU9DVExfSURYKGNtZCkJKChjbWQpIC0gU0lPQ0lXRklSU1QpCiAKLS8qIEV2ZW4gOiBnZXQgKHdvcmxkIGFjY2VzcyksIG9kZCA6IHNldCAocm9vdCBhY2Nlc3MpICovCisvKiBPZGQgOiBnZXQgKHdvcmxkIGFjY2VzcyksIGV2ZW4gOiBzZXQgKHJvb3QgYWNjZXNzKSAqLwogI2RlZmluZSBJV19JU19TRVQoY21kKQkoISgoY21kKSAmIDB4MSkpCiAjZGVmaW5lIElXX0lTX0dFVChjbWQpCSgoY21kKSAmIDB4MSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmggYi9pbmNsdWRlL21lZGlhL2N4MjM0MXguaAppbmRleCBlY2FkNTViLi5kNzU4YTUyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKQEAgLTU3LDcgKzU3LDYgQEAKIAl1MTYgdmlkZW9fYl9mcmFtZXM7CiAJdTE2IHZpZGVvX2dvcF9zaXplOwogCXUxNiB2aWRlb19nb3BfY2xvc3VyZTsKLQl1MTYgdmlkZW9fcHVsbGRvd247CiAJZW51bSB2NGwyX21wZWdfdmlkZW9fYml0cmF0ZV9tb2RlIHZpZGVvX2JpdHJhdGVfbW9kZTsKIAl1MzIgdmlkZW9fYml0cmF0ZTsKIAl1MzIgdmlkZW9fYml0cmF0ZV9wZWFrOwpAQCAtMTIxLDggKzEyMCw2IEBACiAjZGVmaW5lIENYMjM0MVhfREVDX1NFVF9ESVNQTEFZX0JVRkZFUlMJCTB4MTgKICNkZWZpbmUgQ1gyMzQxWF9ERUNfRVhUUkFDVF9WQkkgCQkweDE5CiAjZGVmaW5lIENYMjM0MVhfREVDX1NFVF9ERUNPREVSX1NPVVJDRSAJCTB4MWEKLSNkZWZpbmUgQ1gyMzQxWF9ERUNfU0VUX0FVRElPX09VVFBVVCAJCTB4MWIKLSNkZWZpbmUgQ1gyMzQxWF9ERUNfU0VUX0FWX0RFTEFZIAkJMHgxYwogI2RlZmluZSBDWDIzNDFYX0RFQ19TRVRfUFJFQlVGRkVSSU5HCQkweDFlCiAKIC8qIE1QRUcgZW5jb2RlciBBUEkgKi8KQEAgLTE0MSw3ICsxMzgsNiBAQAogI2RlZmluZSBDWDIzNDFYX0VOQ19TRVRfRE5SX0ZJTFRFUl9QUk9QUyAJMHg5ZAogI2RlZmluZSBDWDIzNDFYX0VOQ19TRVRfQ09SSU5HX0xFVkVMUyAJCTB4OWYKICNkZWZpbmUgQ1gyMzQxWF9FTkNfU0VUX1NQQVRJQUxfRklMVEVSX1RZUEUgCTB4YTEKLSNkZWZpbmUgQ1gyMzQxWF9FTkNfU0VUXzNfMl9QVUxMRE9XTiAJCTB4YjEKICNkZWZpbmUgQ1gyMzQxWF9FTkNfU0VUX1ZCSV9MSU5FIAkJMHhiNwogI2RlZmluZSBDWDIzNDFYX0VOQ19TRVRfU1RSRUFNX1RZUEUgCQkweGI5CiAjZGVmaW5lIENYMjM0MVhfRU5DX1NFVF9PVVRQVVRfUE9SVCAJCTB4YmIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCmluZGV4IDRiYjBhZDguLjk4MDdhN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaApAQCAtMzYsNiArMzYsMTEgQEAKICNkZWZpbmUgSVJfS0VZQ09ERSh0YWIsY29kZSkJKCgodW5zaWduZWQpY29kZSA8IElSX0tFWVRBQl9TSVpFKSBcCiAJCQkJID8gdGFiW2NvZGVdIDogS0VZX1JFU0VSVkVEKQogCisjZGVmaW5lIFJDNV9TVEFSVCh4KQkoKCh4KT4+MTIpJjMpCisjZGVmaW5lIFJDNV9UT0dHTEUoeCkJKCgoeCk+PjExKSYxKQorI2RlZmluZSBSQzVfQUREUih4KQkoKCh4KT4+NikmMzEpCisjZGVmaW5lIFJDNV9JTlNUUih4KQkoKHgpJjYzKQorCiBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgewogCS8qIGNvbmZpZ3VyYXRpb24gKi8KIAlpbnQgICAgICAgICAgICAgICAgaXJfdHlwZTsKQEAgLTQ4LDYgKzUzLDQwIEBACiAJaW50ICAgICAgICAgICAgICAgIGtleXByZXNzZWQ7ICAvKiBjdXJyZW50IHN0YXRlICovCiB9OwogCisvKiB0aGlzIHdhcyBzYWE3MTM0X2lyIGFuZCBidHR2X2lyLCBtb3ZlZCBoZXJlIGZvcgorICogcmM1IGRlY29kaW5nLiAqLworc3RydWN0IGNhcmRfaXIgeworCXN0cnVjdCBpbnB1dF9kZXYgICAgICAgICpkZXY7CisJc3RydWN0IGlyX2lucHV0X3N0YXRlICAgaXI7CisJY2hhciAgICAgICAgICAgICAgICAgICAgbmFtZVszMl07CisJY2hhciAgICAgICAgICAgICAgICAgICAgcGh5c1szMl07CisKKwkvKiBVc3VhbCBncGlvIHNpZ25hbGxpbmcgKi8KKworCXUzMiAgICAgICAgICAgICAgICAgICAgIG1hc2tfa2V5Y29kZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBtYXNrX2tleWRvd247CisJdTMyICAgICAgICAgICAgICAgICAgICAgbWFza19rZXl1cDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBwb2xsaW5nOworCXUzMiAgICAgICAgICAgICAgICAgICAgIGxhc3RfZ3BpbzsKKwlpbnQJCQlzaGlmdF9ieTsKKwlpbnQJCQlzdGFydDsgLy8gV2hhdCBzaG91bGQgUkM1X1NUQVJUKCkgYmUKKwlpbnQJCQlhZGRyOyAvLyBXaGF0IFJDNV9BRERSKCkgc2hvdWxkIGJlLgorCWludAkJCXJjNV9rZXlfdGltZW91dDsKKwlpbnQJCQlyYzVfcmVtb3RlX2dhcDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICB3b3JrOworCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyOworCisJLyogUkM1IGdwaW8gKi8KKwl1MzIgcmM1X2dwaW87CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXJfZW5kOwkvKiB0aW1lcl9lbmQgZm9yIGNvZGUgY29tcGxldGlvbiAqLworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyX2tleXVwOwkvKiB0aW1lcl9lbmQgZm9yIGtleSByZWxlYXNlICovCisJdTMyIGxhc3RfcmM1OwkJCS8qIGxhc3QgZ29vZCByYzUgY29kZSAqLworCXUzMiBsYXN0X2JpdDsJCQkvKiBsYXN0IHJhdyBiaXQgc2VlbiAqLworCXUzMiBjb2RlOwkJCS8qIHJhdyBjb2RlIHVuZGVyIGNvbnN0cnVjdGlvbiAqLworCXN0cnVjdCB0aW1ldmFsIGJhc2VfdGltZTsJLyogdGltZSBvZiBsYXN0IHNlZW4gY29kZSAqLworCWludCBhY3RpdmU7CQkJLyogYnVpbGRpbmcgcmF3IGNvZGUgKi8KK307CisKIHZvaWQgaXJfaW5wdXRfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCiAJCSAgIGludCBpcl90eXBlLCBJUl9LRVlUQUJfVFlQRSAqaXJfY29kZXMpOwogdm9pZCBpcl9pbnB1dF9ub2tleShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIpOwpAQCAtNTgsNiArOTcsMTAgQEAKIGludCAgaXJfZGVjb2RlX2JpcGhhc2UodTMyICpzYW1wbGVzLCBpbnQgY291bnQsIGludCBsb3csIGludCBoaWdoKTsKIGludCAgaXJfZGVjb2RlX3B1bHNlZGlzdGFuY2UodTMyICpzYW1wbGVzLCBpbnQgY291bnQsIGludCBsb3csIGludCBoaWdoKTsKIAordTMyIGlyX3JjNV9kZWNvZGUodW5zaWduZWQgaW50IGNvZGUpOwordm9pZCBpcl9yYzVfdGltZXJfZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIGlyX3JjNV90aW1lcl9rZXl1cCh1bnNpZ25lZCBsb25nIGRhdGEpOworCiAvKiBLZXltYXBzIHRvIGJlIHVzZWQgYnkgb3RoZXIgbW9kdWxlcyAqLwogCiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW1wdHlbSVJfS0VZVEFCX1NJWkVdOwpAQCAtOTQsNiArMTM3LDkgQEAKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19ub3J3b29kW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19wcm90ZXVzXzIzMDlbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2J1ZGdldF9jaV9vbGRbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2FzdXNfcGMzOVtJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW5jb3JlX2VubHR2W0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc190dF8xNTAwW0lSX0tFWVRBQl9TSVpFXTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzExNS5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTE1LmgKaW5kZXggOWYwZTIyOC4uZjY3N2RmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTE1LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTE1LmgKQEAgLTQyLDUgKzQyLDggQEAKICNkZWZpbmUgU0FBNzExNV9GUkVRX0ZMX0NHQ0RJViAoMSA8PCAxKQkgICAvKiBTQSAzQVs2XSwgQ0dDRElWLCBTQUE3MTE1IG9ubHkgKi8KICNkZWZpbmUgU0FBNzExNV9GUkVRX0ZMX0FQTEwgICAoMSA8PCAyKQkgICAvKiBTQSAzQVszXSwgQVBMTCwgU0FBNzExNC81IG9ubHkgKi8KIAorI2RlZmluZSBTQUE3MTE1X0lQT1JUX09OICAgIDEKKyNkZWZpbmUgU0FBNzExNV9JUE9SVF9PRkYgICAwCisKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKaW5kZXggOTFiMTk5Mi4uMjQ0ZTQ0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaApAQCAtNjQsOSArNjQsNiBAQAogLyogUHJpbnRzIHRoZSBpb2N0bCBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCAqLwogZXh0ZXJuIHZvaWQgdjRsX3ByaW50a19pb2N0bCh1bnNpZ25lZCBpbnQgY21kKTsKIAotLyogUHJpbnRzIHRoZSBpb2N0bCBhbmQgYXJnIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybWF0ICovCi1leHRlcm4gdm9pZCB2NGxfcHJpbnRrX2lvY3RsX2FyZyhjaGFyICpzLHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci0KIC8qIFVzZSB0aGlzIG1hY3JvIGZvciBub24tSTJDIGRyaXZlcnMuIFBhc3MgdGhlIGRyaXZlciBuYW1lIGFzIHRoZSBmaXJzdCBhcmcuICovCiAjZGVmaW5lIHY0bF9wcmludF9pb2N0bChuYW1lLCBjbWQpICAJCSBcCiAJZG8geyAgCQkJCQkgXApAQCAtOTksMTMgKzk2LDYgQEAKIAogLyogSW50ZXJuYWwgaW9jdGxzICovCiAKLS8qIFZJRElPQ19JTlRfR19SRUdJU1RFUiBhbmQgVklESU9DX0lOVF9TX1JFR0lTVEVSICovCi1zdHJ1Y3QgdjRsMl9yZWdpc3RlciB7Ci0JdTMyIGkyY19pZDsgCQkvKiBJMkMgZHJpdmVyIElEIG9mIHRoZSBJMkMgY2hpcC4gMCBmb3IgdGhlIEkyQyBhZGFwdGVyLiAqLwotCXVuc2lnbmVkIGxvbmcgcmVnOwotCXUzMiB2YWw7Ci19OwotCiAvKiBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSAqLwogc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lIHsKIAl1MzIgaXNfc2Vjb25kX2ZpZWxkOwkvKiBTZXQgdG8gMCBmb3IgdGhlIGZpcnN0IChvZGQpIGZpZWxkLApAQCAtMTc1LDkgKzE2NSw3IEBACiAgICBSZXBsYWNlbWVudCBvZiBUVU5FUl9TRVRfU1RBTkRCWS4gKi8KICNkZWZpbmUgVklESU9DX0lOVF9TX1NUQU5EQlkgCSAgICAgX0lPVygnZCcsIDk0LCB1MzIpCiAKLS8qIG9ubHkgaW1wbGVtZW50ZWQgaWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBkZWZpbmVkICovCi0jZGVmaW5lCVZJRElPQ19JTlRfU19SRUdJU1RFUiAJCV9JT1cgKCdkJywgMTAwLCBzdHJ1Y3QgdjRsMl9yZWdpc3RlcikKLSNkZWZpbmUJVklESU9DX0lOVF9HX1JFR0lTVEVSIAkJX0lPV1IoJ2QnLCAxMDEsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyKQorLyogMTAwLCAxMDEgdXNlZCBieSAgVklESU9DX0RCR19bU0ddX1JFR0lTVEVSICovCiAKIC8qIEdlbmVyaWMgcmVzZXQgY29tbWFuZC4gVGhlIGFyZ3VtZW50IHNlbGVjdHMgd2hpY2ggc3Vic3lzdGVtcyB0byByZXNldC4KICAgIFBhc3NpbmcgMCB3aWxsIGFsd2F5cyByZXNldCB0aGUgd2hvbGUgY2hpcC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAppbmRleCBmYjk2NDcyLi5hZWVjNTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCkBAIC0yOTYsNiArMjk2LDE1IEBACiAJaW50ICgqdmlkaW9jX2xvZ19zdGF0dXMpICAgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgpOwogCiAKKwkvKiBEZWJ1Z2dpbmcgaW9jdGxzICovCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCWludCAoKnZpZGlvY19nX3JlZ2lzdGVyKSAgICAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKTsKKwlpbnQgKCp2aWRpb2Nfc19yZWdpc3RlcikgICAgICAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyk7CisjZW5kaWYKKworCiAjaWZkZWYgT0JTT0xFVEVfT1dORVIgLyogdG8gYmUgcmVtb3ZlZCBzb29uICovCiAvKiBvYnNvbGV0ZSAtLSBmb3BzLT5vd25lciBpcyB1c2VkIGluc3RlYWQgKi8KIHN0cnVjdCBtb2R1bGUgKm93bmVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlby1idWYuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW8tYnVmLmgKaW5kZXggMTExNWEyNS4uZDZmMDc5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlby1idWYuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvLWJ1Zi5oCkBAIC03OCw2ICs3OCw5IEBACiAJLyogZm9yIGtlcm5lbCBidWZmZXJzICovCiAJdm9pZCAgICAgICAgICAgICAgICAqdm1hbGxvYzsKIAorCS8qIFN0b3JlcyB0aGUgdXNlcnNwYWNlIHBvaW50ZXIgdG8gdm1hbGxvYyBhcmVhICovCisJdm9pZCAgICAgICAgICAgICAgICAqdmFyZWE7CisKIAkvKiBmb3Igb3ZlcmxheSBidWZmZXJzIChwY2ktcGNpIGRtYSkgKi8KIAlkbWFfYWRkcl90ICAgICAgICAgIGJ1c19hZGRyOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9tdGQtYWJpLmggYi9pbmNsdWRlL210ZC9tdGQtYWJpLmgKaW5kZXggZjkxM2MzMC4uOGU1MDFhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCisrKyBiL2luY2x1ZGUvbXRkL210ZC1hYmkuaApAQCAtMzYsMTIgKzM2LDYgQEAKICNkZWZpbmUgTVREX0NBUF9OT1JGTEFTSAkoTVREX1dSSVRFQUJMRSB8IE1URF9CSVRfV1JJVEVBQkxFKQogI2RlZmluZSBNVERfQ0FQX05BTkRGTEFTSAkoTVREX1dSSVRFQUJMRSkKIAotCi0vLyBUeXBlcyBvZiBhdXRvbWF0aWMgRUNDL0NoZWNrc3VtIGF2YWlsYWJsZQotI2RlZmluZSBNVERfRUNDX05PTkUJCTAgCS8vIE5vIGF1dG9tYXRpYyBFQ0MgYXZhaWxhYmxlCi0jZGVmaW5lIE1URF9FQ0NfUlNfRGlza09uQ2hpcAkxCS8vIEF1dG9tYXRpYyBFQ0Mgb24gRGlza09uQ2hpcAotI2RlZmluZSBNVERfRUNDX1NXCQkyCS8vIFNXIEVDQyBmb3IgVG9zaGliYSAmIFNhbXN1bmcgZGV2aWNlcwotCiAvKiBFQ0MgYnl0ZSBwbGFjZW1lbnQgKi8KICNkZWZpbmUgTVREX05BTkRFQ0NfT0ZGCQkwCS8vIFN3aXRjaCBvZmYgRUNDIChOb3QgcmVjb21tZW5kZWQpCiAjZGVmaW5lIE1URF9OQU5ERUNDX1BMQUNFCTEJLy8gVXNlIHRoZSBnaXZlbiBwbGFjZW1lbnQgaW4gdGhlIHN0cnVjdHVyZSAoWUFGRlMxIGxlZ2FjeSBtb2RlKQpAQCAtNjEsNiArNTUsOCBAQAogCXVpbnQzMl90IGVyYXNlc2l6ZTsKIAl1aW50MzJfdCB3cml0ZXNpemU7CiAJdWludDMyX3Qgb29ic2l6ZTsgICAvLyBBbW91bnQgb2YgT09CIGRhdGEgcGVyIGJsb2NrIChlLmcuIDE2KQorCS8qIFRoZSBiZWxvdyB0d28gZmllbGRzIGFyZSBvYnNvbGV0ZSBhbmQgYnJva2VuLCBkbyBub3QgdXNlIHRoZW0KKwkgKiAoVE9ETzogcmVtb3ZlIGF0IHNvbWUgcG9pbnQpICovCiAJdWludDMyX3QgZWNjdHlwZTsKIAl1aW50MzJfdCBlY2NzaXplOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2Npc2NvZGUuaCBiL2luY2x1ZGUvcGNtY2lhL2Npc2NvZGUuaAppbmRleCBjMWRhODU1Li5lYWU3ZTJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9jaXNjb2RlLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvY2lzY29kZS5oCkBAIC05NSw2ICs5NSw3IEBACiAjZGVmaW5lIFBST0RJRF9RVUFURUNIX0RVQUxfUlMyMzIJMHgwMDEyCiAjZGVmaW5lIFBST0RJRF9RVUFURUNIX0RVQUxfUlMyMzJfRDEJMHgwMDA3CiAjZGVmaW5lIFBST0RJRF9RVUFURUNIX0RVQUxfUlMyMzJfRDIJMHgwMDUyCisjZGVmaW5lIFBST0RJRF9RVUFURUNIX0RVQUxfUlMyMzJfRwkweDAwNGQKICNkZWZpbmUgUFJPRElEX1FVQVRFQ0hfUVVBRF9SUzIzMgkweDAwMWIKICNkZWZpbmUgUFJPRElEX1FVQVRFQ0hfRFVBTF9SUzQyMgkweDAwMGUKICNkZWZpbmUgUFJPRElEX1FVQVRFQ0hfUVVBRF9SUzQyMgkweDAwNDUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9hZGRyLmggYi9pbmNsdWRlL3JkbWEvaWJfYWRkci5oCmluZGV4IGMwOTRlNTAuLmMzNjc1MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9hZGRyLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX2FkZHIuaApAQCAtMTEwLDYgKzExMCwxMiBAQAogCWRldl9hZGRyLT5icm9hZGNhc3RbOV0gPSAodW5zaWduZWQgY2hhcikgcGtleTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGliX2FkZHJfZ2V0X21naWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLAorCQkJCSAgICB1bmlvbiBpYl9naWQgKmdpZCkKK3sKKwltZW1jcHkoZ2lkLCBkZXZfYWRkci0+YnJvYWRjYXN0ICsgNCwgc2l6ZW9mICpnaWQpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgaWJfYWRkcl9nZXRfc2dpZChzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIsCiAJCQkJICAgIHVuaW9uIGliX2dpZCAqZ2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3NhLmggYi9pbmNsdWRlL3JkbWEvaWJfc2EuaAppbmRleCA5NzcxNWIwLi41ZTI2YjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfc2EuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfc2EuaApAQCAtMjg1LDE4ICsyODUsNiBAQAogCQkgICAgICAgdm9pZCAqY29udGV4dCwKIAkJICAgICAgIHN0cnVjdCBpYl9zYV9xdWVyeSAqKnF1ZXJ5KTsKIAotaW50IGliX3NhX21jbWVtYmVyX3JlY19xdWVyeShzdHJ1Y3QgaWJfc2FfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sCi0JCQkgICAgIHU4IG1ldGhvZCwKLQkJCSAgICAgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqcmVjLAotCQkJICAgICBpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrLAotCQkJICAgICBpbnQgdGltZW91dF9tcywgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkgICAgIHZvaWQgKCpjYWxsYmFjaykoaW50IHN0YXR1cywKLQkJCQkJICAgICAgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqcmVzcCwKLQkJCQkJICAgICAgdm9pZCAqY29udGV4dCksCi0JCQkgICAgIHZvaWQgKmNvbnRleHQsCi0JCQkgICAgIHN0cnVjdCBpYl9zYV9xdWVyeSAqKnF1ZXJ5KTsKLQogaW50IGliX3NhX3NlcnZpY2VfcmVjX3F1ZXJ5KHN0cnVjdCBpYl9zYV9jbGllbnQgKmNsaWVudCwKIAkJCSBzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAogCQkJIHU4IG1ldGhvZCwKQEAgLTMwOSw5MyArMjk3LDgyIEBACiAJCQkgdm9pZCAqY29udGV4dCwKIAkJCSBzdHJ1Y3QgaWJfc2FfcXVlcnkgKipzYV9xdWVyeSk7CiAKLS8qKgotICogaWJfc2FfbWNtZW1iZXJfcmVjX3NldCAtIFN0YXJ0IGFuIE1DTWVtYmVyIHNldCBxdWVyeQotICogQGNsaWVudDpTQSBjbGllbnQKLSAqIEBkZXZpY2U6ZGV2aWNlIHRvIHNlbmQgcXVlcnkgb24KLSAqIEBwb3J0X251bTogcG9ydCBudW1iZXIgdG8gc2VuZCBxdWVyeSBvbgotICogQHJlYzpNQ01lbWJlciBSZWNvcmQgdG8gc2VuZCBpbiBxdWVyeQotICogQGNvbXBfbWFzazpjb21wb25lbnQgbWFzayB0byBzZW5kIGluIHF1ZXJ5Ci0gKiBAdGltZW91dF9tczp0aW1lIHRvIHdhaXQgZm9yIHJlc3BvbnNlCi0gKiBAZ2ZwX21hc2s6R0ZQIG1hc2sgdG8gdXNlIGZvciBpbnRlcm5hbCBhbGxvY2F0aW9ucwotICogQGNhbGxiYWNrOmZ1bmN0aW9uIGNhbGxlZCB3aGVuIHF1ZXJ5IGNvbXBsZXRlcywgdGltZXMgb3V0IG9yIGlzCi0gKiBjYW5jZWxlZAotICogQGNvbnRleHQ6b3BhcXVlIHVzZXIgY29udGV4dCBwYXNzZWQgdG8gY2FsbGJhY2sKLSAqIEBzYV9xdWVyeTpxdWVyeSBjb250ZXh0LCB1c2VkIHRvIGNhbmNlbCBxdWVyeQotICoKLSAqIFNlbmQgYW4gTUNNZW1iZXIgU2V0IHF1ZXJ5IHRvIHRoZSBTQSAoZWcgdG8gam9pbiBhIG11bHRpY2FzdAotICogZ3JvdXApLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHF1ZXJ5Ci0gKiBjb21wbGV0ZXMgKG9yIGZhaWxzKTsgc3RhdHVzIGlzIDAgZm9yIGEgc3VjY2Vzc2Z1bCByZXNwb25zZSwgLUVJTlRSCi0gKiBpZiB0aGUgcXVlcnkgaXMgY2FuY2VsZWQsIC1FVElNRURPVVQgaXMgdGhlIHF1ZXJ5IHRpbWVkIG91dCwgb3IKLSAqIC1FSU8gaWYgYW4gZXJyb3Igb2NjdXJyZWQgc2VuZGluZyB0aGUgcXVlcnkuICBUaGUgcmVzcCBwYXJhbWV0ZXIgb2YKLSAqIHRoZSBjYWxsYmFjayBpcyBvbmx5IHZhbGlkIGlmIHN0YXR1cyBpcyAwLgotICoKLSAqIElmIHRoZSByZXR1cm4gdmFsdWUgb2YgaWJfc2FfbWNtZW1iZXJfcmVjX3NldCgpIGlzIG5lZ2F0aXZlLCBpdCBpcwotICogYW4gZXJyb3IgY29kZS4gIE90aGVyd2lzZSBpdCBpcyBhIHF1ZXJ5IElEIHRoYXQgY2FuIGJlIHVzZWQgdG8KLSAqIGNhbmNlbCB0aGUgcXVlcnkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1pYl9zYV9tY21lbWJlcl9yZWNfc2V0KHN0cnVjdCBpYl9zYV9jbGllbnQgKmNsaWVudCwKLQkJICAgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sCi0JCSAgICAgICBzdHJ1Y3QgaWJfc2FfbWNtZW1iZXJfcmVjICpyZWMsCi0JCSAgICAgICBpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrLAotCQkgICAgICAgaW50IHRpbWVvdXRfbXMsIGdmcF90IGdmcF9tYXNrLAotCQkgICAgICAgdm9pZCAoKmNhbGxiYWNrKShpbnQgc3RhdHVzLAotCQkJCQlzdHJ1Y3QgaWJfc2FfbWNtZW1iZXJfcmVjICpyZXNwLAotCQkJCQl2b2lkICpjb250ZXh0KSwKLQkJICAgICAgIHZvaWQgKmNvbnRleHQsCi0JCSAgICAgICBzdHJ1Y3QgaWJfc2FfcXVlcnkgKipxdWVyeSkKLXsKLQlyZXR1cm4gaWJfc2FfbWNtZW1iZXJfcmVjX3F1ZXJ5KGNsaWVudCwgZGV2aWNlLCBwb3J0X251bSwKLQkJCQkJSUJfTUdNVF9NRVRIT0RfU0VULAotCQkJCQlyZWMsIGNvbXBfbWFzaywKLQkJCQkJdGltZW91dF9tcywgZ2ZwX21hc2ssIGNhbGxiYWNrLAotCQkJCQljb250ZXh0LCBxdWVyeSk7Ci19CitzdHJ1Y3QgaWJfc2FfbXVsdGljYXN0IHsKKwlzdHJ1Y3QgaWJfc2FfbWNtZW1iZXJfcmVjIHJlYzsKKwlpYl9zYV9jb21wX21hc2sJCWNvbXBfbWFzazsKKwlpbnQJCQkoKmNhbGxiYWNrKShpbnQgc3RhdHVzLAorCQkJCQkgICAgc3RydWN0IGliX3NhX211bHRpY2FzdCAqbXVsdGljYXN0KTsKKwl2b2lkCQkJKmNvbnRleHQ7Cit9OwogCiAvKioKLSAqIGliX3NhX21jbWVtYmVyX3JlY19kZWxldGUgLSBTdGFydCBhbiBNQ01lbWJlciBkZWxldGUgcXVlcnkKLSAqIEBjbGllbnQ6U0EgY2xpZW50Ci0gKiBAZGV2aWNlOmRldmljZSB0byBzZW5kIHF1ZXJ5IG9uCi0gKiBAcG9ydF9udW06IHBvcnQgbnVtYmVyIHRvIHNlbmQgcXVlcnkgb24KLSAqIEByZWM6TUNNZW1iZXIgUmVjb3JkIHRvIHNlbmQgaW4gcXVlcnkKLSAqIEBjb21wX21hc2s6Y29tcG9uZW50IG1hc2sgdG8gc2VuZCBpbiBxdWVyeQotICogQHRpbWVvdXRfbXM6dGltZSB0byB3YWl0IGZvciByZXNwb25zZQotICogQGdmcF9tYXNrOkdGUCBtYXNrIHRvIHVzZSBmb3IgaW50ZXJuYWwgYWxsb2NhdGlvbnMKLSAqIEBjYWxsYmFjazpmdW5jdGlvbiBjYWxsZWQgd2hlbiBxdWVyeSBjb21wbGV0ZXMsIHRpbWVzIG91dCBvciBpcwotICogY2FuY2VsZWQKLSAqIEBjb250ZXh0Om9wYXF1ZSB1c2VyIGNvbnRleHQgcGFzc2VkIHRvIGNhbGxiYWNrCi0gKiBAc2FfcXVlcnk6cXVlcnkgY29udGV4dCwgdXNlZCB0byBjYW5jZWwgcXVlcnkKKyAqIGliX3NhX2pvaW5fbXVsdGljYXN0IC0gSW5pdGlhdGVzIGEgam9pbiByZXF1ZXN0IHRvIHRoZSBzcGVjaWZpZWQgbXVsdGljYXN0CisgKiAgIGdyb3VwLgorICogQGNsaWVudDogU0EgY2xpZW50CisgKiBAZGV2aWNlOiBEZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBtdWx0aWNhc3QgZ3JvdXAuCisgKiBAcG9ydF9udW06IFBvcnQgb24gdGhlIHNwZWNpZmllZCBkZXZpY2UgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG11bHRpY2FzdAorICogICBncm91cC4KKyAqIEByZWM6IFNBIG11bHRpY2FzdCBtZW1iZXIgcmVjb3JkIHNwZWNpZnlpbmcgZ3JvdXAgYXR0cmlidXRlcy4KKyAqIEBjb21wX21hc2s6IENvbXBvbmVudCBtYXNrIGluZGljYXRpbmcgd2hpY2ggZ3JvdXAgYXR0cmlidXRlcyBvZiAlcmVjIGFyZQorICogICB2YWxpZC4KKyAqIEBnZnBfbWFzazogR0ZQIG1hc2sgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucy4KKyAqIEBjYWxsYmFjazogVXNlciBjYWxsYmFjayBpbnZva2VkIG9uY2UgdGhlIGpvaW4gb3BlcmF0aW9uIGNvbXBsZXRlcy4KKyAqIEBjb250ZXh0OiBVc2VyIHNwZWNpZmllZCBjb250ZXh0IHN0b3JlZCB3aXRoIHRoZSBpYl9zYV9tdWx0aWNhc3Qgc3RydWN0dXJlLgogICoKLSAqIFNlbmQgYW4gTUNNZW1iZXIgRGVsZXRlIHF1ZXJ5IHRvIHRoZSBTQSAoZWcgdG8gbGVhdmUgYSBtdWx0aWNhc3QKLSAqIGdyb3VwKS4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBxdWVyeQotICogY29tcGxldGVzIChvciBmYWlscyk7IHN0YXR1cyBpcyAwIGZvciBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UsIC1FSU5UUgotICogaWYgdGhlIHF1ZXJ5IGlzIGNhbmNlbGVkLCAtRVRJTUVET1VUIGlzIHRoZSBxdWVyeSB0aW1lZCBvdXQsIG9yCi0gKiAtRUlPIGlmIGFuIGVycm9yIG9jY3VycmVkIHNlbmRpbmcgdGhlIHF1ZXJ5LiAgVGhlIHJlc3AgcGFyYW1ldGVyIG9mCi0gKiB0aGUgY2FsbGJhY2sgaXMgb25seSB2YWxpZCBpZiBzdGF0dXMgaXMgMC4KKyAqIFRoaXMgY2FsbCBpbml0aWF0ZXMgYSBtdWx0aWNhc3Qgam9pbiByZXF1ZXN0IHdpdGggdGhlIFNBIGZvciB0aGUgc3BlY2lmaWVkCisgKiBtdWx0aWNhc3QgZ3JvdXAuICBJZiB0aGUgam9pbiBvcGVyYXRpb24gaXMgc3RhcnRlZCBzdWNjZXNzZnVsbHksIGl0IHJldHVybnMKKyAqIGFuIGliX3NhX211bHRpY2FzdCBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIHRvIHRyYWNrIHRoZSBtdWx0aWNhc3Qgb3BlcmF0aW9uLgorICogVXNlcnMgbXVzdCBmcmVlIHRoaXMgc3RydWN0dXJlIGJ5IGNhbGxpbmcgaWJfZnJlZV9tdWx0aWNhc3QsIGV2ZW4gaWYgdGhlCisgKiBqb2luIG9wZXJhdGlvbiBsYXRlciBmYWlscy4gIChUaGUgY2FsbGJhY2sgc3RhdHVzIGlzIG5vbi16ZXJvLikKICAqCi0gKiBJZiB0aGUgcmV0dXJuIHZhbHVlIG9mIGliX3NhX21jbWVtYmVyX3JlY19kZWxldGUoKSBpcyBuZWdhdGl2ZSwgaXQKLSAqIGlzIGFuIGVycm9yIGNvZGUuICBPdGhlcndpc2UgaXQgaXMgYSBxdWVyeSBJRCB0aGF0IGNhbiBiZSB1c2VkIHRvCi0gKiBjYW5jZWwgdGhlIHF1ZXJ5LgorICogSWYgdGhlIGpvaW4gb3BlcmF0aW9uIGZhaWxzOyBzdGF0dXMgd2lsbCBiZSBub24temVybywgd2l0aCB0aGUgZm9sbG93aW5nCisgKiBmYWlsdXJlcyBwb3NzaWJsZToKKyAqIC1FVElNRURPVVQ6IFRoZSByZXF1ZXN0IHRpbWVkIG91dC4KKyAqIC1FSU86IEFuIGVycm9yIG9jY3VycmVkIHNlbmRpbmcgdGhlIHF1ZXJ5LgorICogLUVJTlZBTDogVGhlIE1DTWVtYmVyUmVjb3JkIHZhbHVlcyBkaWZmZXJlZCBmcm9tIHRoZSBleGlzdGluZyBncm91cCdzLgorICogLUVORVRSRVNFVDogSW5kaWNhdGVzIHRoYXQgYW4gZmF0YWwgZXJyb3IgaGFzIG9jY3VycmVkIG9uIHRoZSBtdWx0aWNhc3QKKyAqICAgZ3JvdXAsIGFuZCB0aGUgdXNlciBtdXN0IHJlam9pbiB0aGUgZ3JvdXAgdG8gY29udGludWUgdXNpbmcgaXQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1pYl9zYV9tY21lbWJlcl9yZWNfZGVsZXRlKHN0cnVjdCBpYl9zYV9jbGllbnQgKmNsaWVudCwKLQkJCSAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKLQkJCSAgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqcmVjLAotCQkJICBpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrLAotCQkJICBpbnQgdGltZW91dF9tcywgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkgIHZvaWQgKCpjYWxsYmFjaykoaW50IHN0YXR1cywKLQkJCQkJICAgc3RydWN0IGliX3NhX21jbWVtYmVyX3JlYyAqcmVzcCwKLQkJCQkJICAgdm9pZCAqY29udGV4dCksCi0JCQkgIHZvaWQgKmNvbnRleHQsCi0JCQkgIHN0cnVjdCBpYl9zYV9xdWVyeSAqKnF1ZXJ5KQotewotCXJldHVybiBpYl9zYV9tY21lbWJlcl9yZWNfcXVlcnkoY2xpZW50LCBkZXZpY2UsIHBvcnRfbnVtLAotCQkJCQlJQl9TQV9NRVRIT0RfREVMRVRFLAotCQkJCQlyZWMsIGNvbXBfbWFzaywKLQkJCQkJdGltZW91dF9tcywgZ2ZwX21hc2ssIGNhbGxiYWNrLAotCQkJCQljb250ZXh0LCBxdWVyeSk7Ci19CitzdHJ1Y3QgaWJfc2FfbXVsdGljYXN0ICppYl9zYV9qb2luX211bHRpY2FzdChzdHJ1Y3QgaWJfc2FfY2xpZW50ICpjbGllbnQsCisJCQkJCSAgICAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKKwkJCQkJICAgICBzdHJ1Y3QgaWJfc2FfbWNtZW1iZXJfcmVjICpyZWMsCisJCQkJCSAgICAgaWJfc2FfY29tcF9tYXNrIGNvbXBfbWFzaywgZ2ZwX3QgZ2ZwX21hc2ssCisJCQkJCSAgICAgaW50ICgqY2FsbGJhY2spKGludCBzdGF0dXMsCisJCQkJCQkJICAgICBzdHJ1Y3QgaWJfc2FfbXVsdGljYXN0CisJCQkJCQkJCSAgICAqbXVsdGljYXN0KSwKKwkJCQkJICAgICB2b2lkICpjb250ZXh0KTsKKworLyoqCisgKiBpYl9mcmVlX211bHRpY2FzdCAtIEZyZWVzIHRoZSBtdWx0aWNhc3QgdHJhY2tpbmcgc3RydWN0dXJlLCBhbmQgcmVsZWFzZXMKKyAqICAgIGFueSByZWZlcmVuY2Ugb24gdGhlIG11bHRpY2FzdCBncm91cC4KKyAqIEBtdWx0aWNhc3Q6IE11bHRpY2FzdCB0cmFja2luZyBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGJ5IGliX2pvaW5fbXVsdGljYXN0LgorICoKKyAqIFRoaXMgY2FsbCBibG9ja3MgdW50aWwgdGhlIG11bHRpY2FzdCBpZGVudGlmaWVyIGlzIGRlc3Ryb3llZC4gIEl0IG1heQorICogbm90IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgbXVsdGljYXN0IGNhbGxiYWNrOyBob3dldmVyLCByZXR1cm5pbmcgYSBub24tCisgKiB6ZXJvIHZhbHVlIGZyb20gdGhlIGNhbGxiYWNrIHdpbGwgcmVzdWx0IGluIGRlc3Ryb3lpbmcgdGhlIG11bHRpY2FzdAorICogdHJhY2tpbmcgc3RydWN0dXJlLgorICovCit2b2lkIGliX3NhX2ZyZWVfbXVsdGljYXN0KHN0cnVjdCBpYl9zYV9tdWx0aWNhc3QgKm11bHRpY2FzdCk7CisKKy8qKgorICogaWJfZ2V0X21jbWVtYmVyX3JlYyAtIExvb2tzIHVwIGEgbXVsdGljYXN0IG1lbWJlciByZWNvcmQgYnkgaXRzIE1HSUQgYW5kCisgKiAgIHJldHVybnMgaXQgaWYgZm91bmQuCisgKiBAZGV2aWNlOiBEZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBtdWx0aWNhc3QgZ3JvdXAuCisgKiBAcG9ydF9udW06IFBvcnQgb24gdGhlIHNwZWNpZmllZCBkZXZpY2UgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG11bHRpY2FzdAorICogICBncm91cC4KKyAqIEBtZ2lkOiBNR0lEIG9mIG11bHRpY2FzdCBncm91cC4KKyAqIEByZWM6IExvY2F0aW9uIHRvIGNvcHkgU0EgbXVsdGljYXN0IG1lbWJlciByZWNvcmQuCisgKi8KK2ludCBpYl9zYV9nZXRfbWNtZW1iZXJfcmVjKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sCisJCQkgICB1bmlvbiBpYl9naWQgKm1naWQsIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlYyk7CisKKy8qKgorICogaWJfaW5pdF9haF9mcm9tX21jbWVtYmVyIC0gSW5pdGlhbGl6ZSBhZGRyZXNzIGhhbmRsZSBhdHRyaWJ1dGVzIGJhc2VkIG9uCisgKiBhbiBTQSBtdWx0aWNhc3QgbWVtYmVyIHJlY29yZC4KKyAqLworaW50IGliX2luaXRfYWhfZnJvbV9tY21lbWJlcihzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAorCQkJICAgICBzdHJ1Y3QgaWJfc2FfbWNtZW1iZXJfcmVjICpyZWMsCisJCQkgICAgIHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyKTsKIAogLyoqCiAgKiBpYl9pbml0X2FoX2Zyb21fcGF0aCAtIEluaXRpYWxpemUgYWRkcmVzcyBoYW5kbGUgYXR0cmlidXRlcyBiYXNlZCBvbiBhbiBTQQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL3JkbWFfY20uaCBiL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmgKaW5kZXggMzZjZDhhOC4uMmQ2YTc3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL3JkbWFfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oCkBAIC01MiwxMCArNTIsMTMgQEAKIAlSRE1BX0NNX0VWRU5UX0VTVEFCTElTSEVELAogCVJETUFfQ01fRVZFTlRfRElTQ09OTkVDVEVELAogCVJETUFfQ01fRVZFTlRfREVWSUNFX1JFTU9WQUwsCisJUkRNQV9DTV9FVkVOVF9NVUxUSUNBU1RfSk9JTiwKKwlSRE1BX0NNX0VWRU5UX01VTFRJQ0FTVF9FUlJPUgogfTsKIAogZW51bSByZG1hX3BvcnRfc3BhY2UgewogCVJETUFfUFNfU0RQICA9IDB4MDAwMSwKKwlSRE1BX1BTX0lQT0lCPSAweDAwMDIsCiAJUkRNQV9QU19UQ1AgID0gMHgwMTA2LAogCVJETUFfUFNfVURQICA9IDB4MDExMSwKIAlSRE1BX1BTX1NDVFAgPSAweDAxODMKQEAgLTI5NCw1ICsyOTcsMjEgQEAKICAqLwogaW50IHJkbWFfZGlzY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQpOwogCi0jZW5kaWYgLyogUkRNQV9DTV9IICovCisvKioKKyAqIHJkbWFfam9pbl9tdWx0aWNhc3QgLSBKb2luIHRoZSBtdWx0aWNhc3QgZ3JvdXAgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbgorICogICBhZGRyZXNzLgorICogQGlkOiBDb21tdW5pY2F0aW9uIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LgorICogQGFkZHI6IE11bHRpY2FzdCBhZGRyZXNzIGlkZW50aWZ5aW5nIHRoZSBncm91cCB0byBqb2luLgorICogQGNvbnRleHQ6IFVzZXItZGVmaW5lZCBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgam9pbiByZXF1ZXN0LCByZXR1cm5lZAorICogdG8gdGhlIHVzZXIgdGhyb3VnaCB0aGUgcHJpdmF0ZV9kYXRhIHBvaW50ZXIgaW4gbXVsdGljYXN0IGV2ZW50cy4KKyAqLworaW50IHJkbWFfam9pbl9tdWx0aWNhc3Qoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisJCQl2b2lkICpjb250ZXh0KTsKIAorLyoqCisgKiByZG1hX2xlYXZlX211bHRpY2FzdCAtIExlYXZlIHRoZSBtdWx0aWNhc3QgZ3JvdXAgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbgorICogICBhZGRyZXNzLgorICovCit2b2lkIHJkbWFfbGVhdmVfbXVsdGljYXN0KHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHNvY2thZGRyICphZGRyKTsKKworI2VuZGlmIC8qIFJETUFfQ01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL3JkbWFfY21faWIuaCBiL2luY2x1ZGUvcmRtYS9yZG1hX2NtX2liLmgKaW5kZXggOWIxNzZkZi4uOTUwNDI0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL3JkbWFfY21faWIuaAorKysgYi9pbmNsdWRlL3JkbWEvcmRtYV9jbV9pYi5oCkBAIC00NCw3ICs0NCw3IEBACiBpbnQgcmRtYV9zZXRfaWJfcGF0aHMoc3RydWN0IHJkbWFfY21faWQgKmlkLAogCQkgICAgICBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnBhdGhfcmVjLCBpbnQgbnVtX3BhdGhzKTsKIAotLyogR2xvYmFsIHFrZXkgZm9yIFVEIFFQcyBhbmQgbXVsdGljYXN0IGdyb3Vwcy4gKi8KLSNkZWZpbmUgUkRNQV9VRF9RS0VZIDB4MDEyMzQ1NjcKKy8qIEdsb2JhbCBxa2V5IGZvciBVRFAgUVBzIGFuZCBtdWx0aWNhc3QgZ3JvdXBzLiAqLworI2RlZmluZSBSRE1BX1VEUF9RS0VZIDB4MDEyMzQ1NjcKIAogI2VuZGlmIC8qIFJETUFfQ01fSUJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL3JkbWFfdXNlcl9jbS5oIGIvaW5jbHVkZS9yZG1hL3JkbWFfdXNlcl9jbS5oCmluZGV4IDk1NzJhYjguLmY2MzJiMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9yZG1hX3VzZXJfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvcmRtYV91c2VyX2NtLmgKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxyZG1hL2liX3VzZXJfdmVyYnMuaD4KICNpbmNsdWRlIDxyZG1hL2liX3VzZXJfc2EuaD4KIAotI2RlZmluZSBSRE1BX1VTRVJfQ01fQUJJX1ZFUlNJT04JMworI2RlZmluZSBSRE1BX1VTRVJfQ01fQUJJX1ZFUlNJT04JNAogCiAjZGVmaW5lIFJETUFfTUFYX1BSSVZBVEVfREFUQQkJMjU2CiAKQEAgLTU4LDcgKzU4LDkgQEAKIAlSRE1BX1VTRVJfQ01fQ01EX0dFVF9FVkVOVCwKIAlSRE1BX1VTRVJfQ01fQ01EX0dFVF9PUFRJT04sCiAJUkRNQV9VU0VSX0NNX0NNRF9TRVRfT1BUSU9OLAotCVJETUFfVVNFUl9DTV9DTURfTk9USUZZCisJUkRNQV9VU0VSX0NNX0NNRF9OT1RJRlksCisJUkRNQV9VU0VSX0NNX0NNRF9KT0lOX01DQVNULAorCVJETUFfVVNFUl9DTV9DTURfTEVBVkVfTUNBU1QKIH07CiAKIC8qCkBAIC0xODgsNiArMTkwLDEzIEBACiAJX191MzIgZXZlbnQ7CiB9OwogCitzdHJ1Y3QgcmRtYV91Y21fam9pbl9tY2FzdCB7CisJX191NjQgcmVzcG9uc2U7CQkvKiByZG1hX3VjbV9jcmVhdGVfaWRfcmVzcCAqLworCV9fdTY0IHVpZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisJX191MzIgaWQ7Cit9OworCiBzdHJ1Y3QgcmRtYV91Y21fZ2V0X2V2ZW50IHsKIAlfX3U2NCByZXNwb25zZTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCmluZGV4IGViZjMxYjEuLjlkZDM3ZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCkBAIC0xMjIsNiArMTIyLDcgQEAKIAl1bnNpZ25lZCBub191bGRfYXR0YWNoOjE7IC8qIGRpc2FibGUgY29ubmVjdGluZyB0byB1cHBlciBsZXZlbCBkcml2ZXJzICovCiAJdW5zaWduZWQgc2VsZWN0X25vX2F0bjoxOwogCXVuc2lnbmVkIGZpeF9jYXBhY2l0eToxOwkvKiBSRUFEX0NBUEFDSVRZIGlzIHRvbyBoaWdoIGJ5IDEgKi8KKwl1bnNpZ25lZCBndWVzc19jYXBhY2l0eToxOwkvKiBSRUFEX0NBUEFDSVRZIG1pZ2h0IGJlIHRvbyBoaWdoIGJ5IDEgKi8KIAl1bnNpZ25lZCByZXRyeV9od2Vycm9yOjE7CS8qIFJldHJ5IEhBUkRXQVJFX0VSUk9SICovCiAKIAl1bnNpZ25lZCBpbnQgZGV2aWNlX2Jsb2NrZWQ7CS8qIERldmljZSByZXR1cm5lZCBRVUVVRV9GVUxMLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdGd0X2lmLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90Z3RfaWYuaAppbmRleCA0NmQ1ZTcwLi4wN2Q2ZTc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90Z3RfaWYuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90Z3RfaWYuaApAQCAtODMsOCArODMsNSBAQAogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoc2l6ZW9mKHVpbnQ2NF90KSkpKTsKIAogI2RlZmluZSBUR1RfUklOR19TSVpFICgxVUwgPDwgMTYpCi0jZGVmaW5lIFRHVF9SSU5HX1BBR0VTIChUR1RfUklOR19TSVpFID4+IFBBR0VfU0hJRlQpCi0jZGVmaW5lIFRHVF9FVkVOVF9QRVJfUEFHRSAoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCB0Z3RfZXZlbnQpKQotI2RlZmluZSBUR1RfTUFYX0VWRU5UUyAoVEdUX0VWRU5UX1BFUl9QQUdFICogVEdUX1JJTkdfUEFHRVMpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnQuaAppbmRleCBjY2ExZDQ5Li4zYzE4YmFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnQuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnQuaApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHJhbnNwb3J0X2NsYXNzLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAKIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSB7CiAJLyogdGhlIGF0dHJpYnV0ZSBjb250YWluZXJzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaCBiL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCmluZGV4IGViN2NlOTYuLjIzZTQ1YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCisrKyBiL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCkBAIC02MjgsNyArNjI4LDcgQEAKICNkZWZpbmUgRlhXQ19TUERJRkxFRlQgICAgICAgICAgKDE8PDIyKQkJLyogMHgwMDQwMDAwMCAqLwogI2RlZmluZSBGWFdDX1NQRElGUklHSFQgICAgICAgICAoMTw8MjMpCQkvKiAweDAwODAwMDAwICovCiAKLSNkZWZpbmUgQV9UQkxTWglgCQkweDQzCS8qIEVmZmVjdHMgVGFuayBJbnRlcm5hbCBUYWJsZSBTaXplLiBPbmx5IGxvdyBieXRlIG9yIHJlZ2lzdGVyIHVzZWQgKi8KKyNkZWZpbmUgQV9UQkxTWgkJCTB4NDMJLyogRWZmZWN0cyBUYW5rIEludGVybmFsIFRhYmxlIFNpemUuIE9ubHkgbG93IGJ5dGUgb3IgcmVnaXN0ZXIgdXNlZCAqLwogCiAjZGVmaW5lIFRDQlMJCQkweDQ0CQkvKiBUYW5rIGNhY2hlIGJ1ZmZlciBzaXplIHJlZ2lzdGVyCQkJKi8KICNkZWZpbmUgVENCU19NQVNLCQkweDAwMDAwMDA3CS8qIFRhbmsgY2FjaGUgYnVmZmVyIHNpemUgZmllbGQJCQkJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKaW5kZXggYzM5YjM4MC4uYTliYTdlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKQEAgLTEsMyArMSwzIEBACiAvKiBpbmNsdWRlL3ZlcnNpb24uaC4gIEdlbmVyYXRlZCBieSBhbHNhL2tzeW5jIHNjcmlwdC4gICovCiAjZGVmaW5lIENPTkZJR19TTkRfVkVSU0lPTiAiMS4wLjE0cmMyIgotI2RlZmluZSBDT05GSUdfU05EX0RBVEUgIiAoRnJpIEZlYiAwOSAxMzo1MDoxMCAyMDA3IFVUQykiCisjZGVmaW5lIENPTkZJR19TTkRfREFURSAiIChXZWQgRmViIDE0IDA3OjQyOjEzIDIwMDcgVVRDKSIKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggNjQ5YWI1NC4uYTkyOTg5ZSAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KKyNpbmNsdWRlIDxsaW51eC90aWNrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGFza3N0YXRzX2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheWFjY3QuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KQEAgLTM4NSwxNCArMzg3LDE5IEBACiAvKiBDYWxsZWQgYnkgYm9vdCBwcm9jZXNzb3IgdG8gYWN0aXZhdGUgdGhlIHJlc3QuICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc21wX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXVuc2lnbmVkIGhpZ2hlc3QgPSAwOworCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVfcG9zc2libGVfbWFwKQorCQloaWdoZXN0ID0gY3B1OworCW5yX2NwdV9pZHMgPSBoaWdoZXN0ICsgMTsKIAogCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGluIHVzZXJzcGFjZSAtLVJSICovCi0JZm9yX2VhY2hfcHJlc2VudF9jcHUoaSkgeworCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgewogCQlpZiAobnVtX29ubGluZV9jcHVzKCkgPj0gbWF4X2NwdXMpCiAJCQlicmVhazsKLQkJaWYgKCFjcHVfb25saW5lKGkpKQotCQkJY3B1X3VwKGkpOworCQlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKKwkJCWNwdV91cChjcHUpOwogCX0KIAogCS8qIEFueSBjbGVhbnVwIHdvcmsgKi8KQEAgLTUxNSw2ICs1MjIsNyBAQAogICogZW5hYmxlIHRoZW0KICAqLwogCWxvY2tfa2VybmVsKCk7CisJdGlja19pbml0KCk7CiAJYm9vdF9jcHVfaW5pdCgpOwogCXBhZ2VfYWRkcmVzc19pbml0KCk7CiAJcHJpbnRrKEtFUk5fTk9USUNFKTsKQEAgLTcwMCwxMSArNzA4LDcgQEAKIAlpbml0X3dvcmtxdWV1ZXMoKTsKIAl1c2VybW9kZWhlbHBlcl9pbml0KCk7CiAJZHJpdmVyX2luaXQoKTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJaW5pdF9pcnFfcHJvYygpOwotI2VuZGlmCi0KIAlkb19pbml0Y2FsbHMoKTsKIH0KIApAQCAtNzI2LDcgKzczMCw0OSBAQAogCWtlcm5lbF9leGVjdmUoaW5pdF9maWxlbmFtZSwgYXJndl9pbml0LCBlbnZwX2luaXQpOwogfQogCi1zdGF0aWMgaW50IGluaXQodm9pZCAqIHVudXNlZCkKKy8qIFRoaXMgaXMgYSBub24gX19pbml0IGZ1bmN0aW9uLiBGb3JjZSBpdCB0byBiZSBub2lubGluZSBvdGhlcndpc2UgZ2NjCisgKiBtYWtlcyBpdCBpbmxpbmUgdG8gaW5pdCgpIGFuZCBpdCBiZWNvbWVzIHBhcnQgb2YgaW5pdC50ZXh0IHNlY3Rpb24KKyAqLworc3RhdGljIGludCBub2lubGluZSBpbml0X3Bvc3Qodm9pZCkKK3sKKwlmcmVlX2luaXRtZW0oKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJbWFya19yb2RhdGFfcm8oKTsKKwlzeXN0ZW1fc3RhdGUgPSBTWVNURU1fUlVOTklORzsKKwludW1hX2RlZmF1bHRfcG9saWN5KCk7CisKKwlpZiAoc3lzX29wZW4oKGNvbnN0IGNoYXIgX191c2VyICopICIvZGV2L2NvbnNvbGUiLCBPX1JEV1IsIDApIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogdW5hYmxlIHRvIG9wZW4gYW4gaW5pdGlhbCBjb25zb2xlLlxuIik7CisKKwkodm9pZCkgc3lzX2R1cCgwKTsKKwkodm9pZCkgc3lzX2R1cCgwKTsKKworCWlmIChyYW1kaXNrX2V4ZWN1dGVfY29tbWFuZCkgeworCQlydW5faW5pdF9wcm9jZXNzKHJhbWRpc2tfZXhlY3V0ZV9jb21tYW5kKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGV4ZWN1dGUgJXNcbiIsCisJCQkJcmFtZGlza19leGVjdXRlX2NvbW1hbmQpOworCX0KKworCS8qCisJICogV2UgdHJ5IGVhY2ggb2YgdGhlc2UgdW50aWwgb25lIHN1Y2NlZWRzLgorCSAqCisJICogVGhlIEJvdXJuZSBzaGVsbCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGluaXQgaWYgd2UgYXJlCisJICogdHJ5aW5nIHRvIHJlY292ZXIgYSByZWFsbHkgYnJva2VuIG1hY2hpbmUuCisJICovCisJaWYgKGV4ZWN1dGVfY29tbWFuZCkgeworCQlydW5faW5pdF9wcm9jZXNzKGV4ZWN1dGVfY29tbWFuZCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byBleGVjdXRlICVzLiAgQXR0ZW1wdGluZyAiCisJCQkJCSJkZWZhdWx0cy4uLlxuIiwgZXhlY3V0ZV9jb21tYW5kKTsKKwl9CisJcnVuX2luaXRfcHJvY2VzcygiL3NiaW4vaW5pdCIpOworCXJ1bl9pbml0X3Byb2Nlc3MoIi9ldGMvaW5pdCIpOworCXJ1bl9pbml0X3Byb2Nlc3MoIi9iaW4vaW5pdCIpOworCXJ1bl9pbml0X3Byb2Nlc3MoIi9iaW4vc2giKTsKKworCXBhbmljKCJObyBpbml0IGZvdW5kLiAgVHJ5IHBhc3NpbmcgaW5pdD0gb3B0aW9uIHRvIGtlcm5lbC4iKTsKK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkICogdW51c2VkKQogewogCWxvY2tfa2VybmVsKCk7CiAJLyoKQEAgLTc3NCwzOSArODIwLDYgQEAKIAkgKiB3ZSdyZSBlc3NlbnRpYWxseSB1cCBhbmQgcnVubmluZy4gR2V0IHJpZCBvZiB0aGUKIAkgKiBpbml0bWVtIHNlZ21lbnRzIGFuZCBzdGFydCB0aGUgdXNlci1tb2RlIHN0dWZmLi4KIAkgKi8KLQlmcmVlX2luaXRtZW0oKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JbWFya19yb2RhdGFfcm8oKTsKLQlzeXN0ZW1fc3RhdGUgPSBTWVNURU1fUlVOTklORzsKLQludW1hX2RlZmF1bHRfcG9saWN5KCk7Ci0KLQlpZiAoc3lzX29wZW4oKGNvbnN0IGNoYXIgX191c2VyICopICIvZGV2L2NvbnNvbGUiLCBPX1JEV1IsIDApIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogdW5hYmxlIHRvIG9wZW4gYW4gaW5pdGlhbCBjb25zb2xlLlxuIik7Ci0KLQkodm9pZCkgc3lzX2R1cCgwKTsKLQkodm9pZCkgc3lzX2R1cCgwKTsKLQotCWlmIChyYW1kaXNrX2V4ZWN1dGVfY29tbWFuZCkgewotCQlydW5faW5pdF9wcm9jZXNzKHJhbWRpc2tfZXhlY3V0ZV9jb21tYW5kKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGV4ZWN1dGUgJXNcbiIsCi0JCQkJcmFtZGlza19leGVjdXRlX2NvbW1hbmQpOwotCX0KLQotCS8qCi0JICogV2UgdHJ5IGVhY2ggb2YgdGhlc2UgdW50aWwgb25lIHN1Y2NlZWRzLgotCSAqCi0JICogVGhlIEJvdXJuZSBzaGVsbCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGluaXQgaWYgd2UgYXJlIAotCSAqIHRyeWluZyB0byByZWNvdmVyIGEgcmVhbGx5IGJyb2tlbiBtYWNoaW5lLgotCSAqLwotCWlmIChleGVjdXRlX2NvbW1hbmQpIHsKLQkJcnVuX2luaXRfcHJvY2VzcyhleGVjdXRlX2NvbW1hbmQpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gZXhlY3V0ZSAlcy4gIEF0dGVtcHRpbmcgIgotCQkJCQkiZGVmYXVsdHMuLi5cbiIsIGV4ZWN1dGVfY29tbWFuZCk7Ci0JfQotCXJ1bl9pbml0X3Byb2Nlc3MoIi9zYmluL2luaXQiKTsKLQlydW5faW5pdF9wcm9jZXNzKCIvZXRjL2luaXQiKTsKLQlydW5faW5pdF9wcm9jZXNzKCIvYmluL2luaXQiKTsKLQlydW5faW5pdF9wcm9jZXNzKCIvYmluL3NoIik7Ci0KLQlwYW5pYygiTm8gaW5pdCBmb3VuZC4gIFRyeSBwYXNzaW5nIGluaXQ9IG9wdGlvbiB0byBrZXJuZWwuIik7CisJaW5pdF9wb3N0KCk7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggNWJiNjE3Zi4uZWI1N2UyMiAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtMzcsMTEgKzM3LDIxIEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInV0aWwuaCIKIAorc3RydWN0IHNobV9maWxlX2RhdGEgeworCWludCBpZDsKKwlzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnM7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7Cit9OworCisjZGVmaW5lIHNobV9maWxlX2RhdGEoZmlsZSkgKCooKHN0cnVjdCBzaG1fZmlsZV9kYXRhICoqKSYoZmlsZSktPnByaXZhdGVfZGF0YSkpCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNobV9maWxlX29wZXJhdGlvbnM7CiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobV92bV9vcHM7CiAKQEAgLTYwLDggKzcwLDggQEAKIAogc3RhdGljIGludCBuZXdzZWcgKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywga2V5X3Qga2V5LAogCQlpbnQgc2htZmxnLCBzaXplX3Qgc2l6ZSk7Ci1zdGF0aWMgdm9pZCBzaG1fb3BlbiAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzaG1kKTsKLXN0YXRpYyB2b2lkIHNobV9jbG9zZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzaG1kKTsKK3N0YXRpYyB2b2lkIHNobV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3N0YXRpYyB2b2lkIHNobV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiBzdGF0aWMgdm9pZCBzaG1fZGVzdHJveSAoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHApOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgaW50IHN5c3ZpcGNfc2htX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KTsKQEAgLTE1MCwxMSArMTYwLDE0IEBACiAKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2htX2luYyhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsIGludCBpZCkKKy8qIFRoaXMgaXMgY2FsbGVkIGJ5IGZvcmssIG9uY2UgZm9yIGV2ZXJ5IHNobSBhdHRhY2guICovCitzdGF0aWMgdm9pZCBzaG1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3Qgc2htX2ZpbGVfZGF0YSAqc2ZkID0gc2htX2ZpbGVfZGF0YShmaWxlKTsKIAlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHA7CiAKLQlzaHAgPSBzaG1fbG9jayhucywgaWQpOworCXNocCA9IHNobV9sb2NrKHNmZC0+bnMsIHNmZC0+aWQpOwogCUJVR19PTighc2hwKTsKIAlzaHAtPnNobV9hdGltID0gZ2V0X3NlY29uZHMoKTsKIAlzaHAtPnNobV9scHJpZCA9IGN1cnJlbnQtPnRnaWQ7CkBAIC0xNjIsMTUgKzE3NSw2IEBACiAJc2htX3VubG9jayhzaHApOwogfQogCi0jZGVmaW5lIHNobV9maWxlX25zKGZpbGUpICgqKChzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqKikmKGZpbGUpLT5wcml2YXRlX2RhdGEpKQotCi0vKiBUaGlzIGlzIGNhbGxlZCBieSBmb3JrLCBvbmNlIGZvciBldmVyeSBzaG0gYXR0YWNoLiAqLwotc3RhdGljIHZvaWQgc2htX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzaG1kKQotewotCXNobV9pbmMoc2htX2ZpbGVfbnMoc2htZC0+dm1fZmlsZSksCi0JCQlzaG1kLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7Ci19Ci0KIC8qCiAgKiBzaG1fZGVzdHJveSAtIGZyZWUgdGhlIHN0cnVjdCBzaG1pZF9rZXJuZWwKICAqCkBAIC0xOTUsMjMgKzE5OSwyMSBAQAogfQogCiAvKgotICogcmVtb3ZlIHRoZSBhdHRhY2ggZGVzY3JpcHRvciBzaG1kLgorICogcmVtb3ZlIHRoZSBhdHRhY2ggZGVzY3JpcHRvciB2bWEuCiAgKiBmcmVlIG1lbW9yeSBmb3Igc2VnbWVudCBpZiBpdCBpcyBtYXJrZWQgZGVzdHJveWVkLgogICogVGhlIGRlc2NyaXB0b3IgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIGN1cnJlbnQtPm1tLT5tbWFwIGxpc3QKICAqIGFuZCB3aWxsIGxhdGVyIGJlIGtmcmVlKClkLgogICovCi1zdGF0aWMgdm9pZCBzaG1fY2xvc2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc2htZCkKK3N0YXRpYyB2b2lkIHNobV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBzaG1kLT52bV9maWxlOwotCWludCBpZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfaW5vOworCXN0cnVjdCBmaWxlICogZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3Qgc2htX2ZpbGVfZGF0YSAqc2ZkID0gc2htX2ZpbGVfZGF0YShmaWxlKTsKIAlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHA7Ci0Jc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zOwotCi0JbnMgPSBzaG1fZmlsZV9ucyhmaWxlKTsKKwlzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMgPSBzZmQtPm5zOwogCiAJbXV0ZXhfbG9jaygmc2htX2lkcyhucykubXV0ZXgpOwogCS8qIHJlbW92ZSBmcm9tIHRoZSBsaXN0IG9mIGF0dGFjaGVzIG9mIHRoZSBzaG0gc2VnbWVudCAqLwotCXNocCA9IHNobV9sb2NrKG5zLCBpZCk7CisJc2hwID0gc2htX2xvY2sobnMsIHNmZC0+aWQpOwogCUJVR19PTighc2hwKTsKIAlzaHAtPnNobV9scHJpZCA9IGN1cnJlbnQtPnRnaWQ7CiAJc2hwLT5zaG1fZHRpbSA9IGdldF9zZWNvbmRzKCk7CkBAIC0yMjQsNDYgKzIyNiw5MSBAQAogCW11dGV4X3VubG9jaygmc2htX2lkcyhucykubXV0ZXgpOwogfQogCitzdHJ1Y3QgcGFnZSAqc2htX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJaW50ICp0eXBlKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBzaG1fZmlsZV9kYXRhICpzZmQgPSBzaG1fZmlsZV9kYXRhKGZpbGUpOworCisJcmV0dXJuIHNmZC0+dm1fb3BzLT5ub3BhZ2Uodm1hLCBhZGRyZXNzLCB0eXBlKTsKK30KKworI2lmZGVmIENPTkZJR19OVU1BCitpbnQgc2htX3NldF9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtZW1wb2xpY3kgKm5ldykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3Qgc2htX2ZpbGVfZGF0YSAqc2ZkID0gc2htX2ZpbGVfZGF0YShmaWxlKTsKKwlpbnQgZXJyID0gMDsKKwlpZiAoc2ZkLT52bV9vcHMtPnNldF9wb2xpY3kpCisJCWVyciA9IHNmZC0+dm1fb3BzLT5zZXRfcG9saWN5KHZtYSwgbmV3KTsKKwlyZXR1cm4gZXJyOworfQorCitzdHJ1Y3QgbWVtcG9saWN5ICpzaG1fZ2V0X3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBzaG1fZmlsZV9kYXRhICpzZmQgPSBzaG1fZmlsZV9kYXRhKGZpbGUpOworCXN0cnVjdCBtZW1wb2xpY3kgKnBvbCA9IE5VTEw7CisKKwlpZiAoc2ZkLT52bV9vcHMtPmdldF9wb2xpY3kpCisJCXBvbCA9IHNmZC0+dm1fb3BzLT5nZXRfcG9saWN5KHZtYSwgYWRkcik7CisJZWxzZQorCQlwb2wgPSB2bWEtPnZtX3BvbGljeTsKKwlyZXR1cm4gcG9sOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgc2htX21tYXAoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCiB7CisJc3RydWN0IHNobV9maWxlX2RhdGEgKnNmZCA9IHNobV9maWxlX2RhdGEoZmlsZSk7CiAJaW50IHJldDsKIAotCXJldCA9IHNobWVtX21tYXAoZmlsZSwgdm1hKTsKLQlpZiAocmV0ID09IDApIHsKLQkJdm1hLT52bV9vcHMgPSAmc2htX3ZtX29wczsKLQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKLQkJCXZtYS0+dm1fZmxhZ3MgJj0gflZNX01BWVdSSVRFOwotCQlzaG1faW5jKHNobV9maWxlX25zKGZpbGUpLCBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7Ci0JfQorCXJldCA9IHNmZC0+ZmlsZS0+Zl9vcC0+bW1hcChzZmQtPmZpbGUsIHZtYSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCXNmZC0+dm1fb3BzID0gdm1hLT52bV9vcHM7CisJdm1hLT52bV9vcHMgPSAmc2htX3ZtX29wczsKKwlzaG1fb3Blbih2bWEpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzaG1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zOworCXN0cnVjdCBzaG1fZmlsZV9kYXRhICpzZmQgPSBzaG1fZmlsZV9kYXRhKGZpbGUpOwogCi0JbnMgPSBzaG1fZmlsZV9ucyhmaWxlKTsKLQlwdXRfaXBjX25zKG5zKTsKLQlzaG1fZmlsZV9ucyhmaWxlKSA9IE5VTEw7CisJcHV0X2lwY19ucyhzZmQtPm5zKTsKKwlzaG1fZmlsZV9kYXRhKGZpbGUpID0gTlVMTDsKKwlrZnJlZShzZmQpOwogCXJldHVybiAwOwogfQogCisjaWZuZGVmIENPTkZJR19NTVUKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNobV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAorCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHNobV9maWxlX2RhdGEgKnNmZCA9IHNobV9maWxlX2RhdGEoZmlsZSk7CisJcmV0dXJuIHNmZC0+ZmlsZS0+Zl9vcC0+Z2V0X3VubWFwcGVkX2FyZWEoc2ZkLT5maWxlLCBhZGRyLCBsZW4sIHBnb2ZmLAorCQkJCQkJCWZsYWdzKTsKK30KKyNlbHNlCisjZGVmaW5lIHNobV9nZXRfdW5tYXBwZWRfYXJlYSBOVUxMCisjZW5kaWYKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2htX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubW1hcAkJPSBzaG1fbW1hcCwKIAkucmVsZWFzZQk9IHNobV9yZWxlYXNlLAotI2lmbmRlZiBDT05GSUdfTU1VCi0JLmdldF91bm1hcHBlZF9hcmVhID0gc2htZW1fZ2V0X3VubWFwcGVkX2FyZWEsCi0jZW5kaWYKKwkuZ2V0X3VubWFwcGVkX2FyZWEJPSBzaG1fZ2V0X3VubWFwcGVkX2FyZWEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobV92bV9vcHMgPSB7CiAJLm9wZW4JPSBzaG1fb3BlbiwJLyogY2FsbGJhY2sgZm9yIGEgbmV3IHZtLWFyZWEgb3BlbiAqLwogCS5jbG9zZQk9IHNobV9jbG9zZSwJLyogY2FsbGJhY2sgZm9yIHdoZW4gdGhlIHZtLWFyZWEgaXMgcmVsZWFzZWQgKi8KLQkubm9wYWdlCT0gc2htZW1fbm9wYWdlLAotI2lmIGRlZmluZWQoQ09ORklHX05VTUEpICYmIGRlZmluZWQoQ09ORklHX1NITUVNKQotCS5zZXRfcG9saWN5ID0gc2htZW1fc2V0X3BvbGljeSwKLQkuZ2V0X3BvbGljeSA9IHNobWVtX2dldF9wb2xpY3ksCisJLm5vcGFnZQk9IHNobV9ub3BhZ2UsCisjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkKKwkuc2V0X3BvbGljeSA9IHNobV9zZXRfcG9saWN5LAorCS5nZXRfcG9saWN5ID0gc2htX2dldF9wb2xpY3ksCiAjZW5kaWYKIH07CiAKQEAgLTMzMCwxMyArMzc3LDYgQEAKIAlzaHAtPnNobV9uYXR0Y2ggPSAwOwogCXNocC0+aWQgPSBzaG1fYnVpbGRpZChucywgaWQsIHNocC0+c2htX3Blcm0uc2VxKTsKIAlzaHAtPnNobV9maWxlID0gZmlsZTsKLQlmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubyA9IHNocC0+aWQ7Ci0KLQlzaG1fZmlsZV9ucyhmaWxlKSA9IGdldF9pcGNfbnMobnMpOwotCi0JLyogSHVnZXRsYiBvcHMgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gYXNzaWduZWQuICovCi0JaWYgKCEoc2htZmxnICYgU0hNX0hVR0VUTEIpKQotCQlmaWxlLT5mX29wID0gJnNobV9maWxlX29wZXJhdGlvbnM7CiAKIAlucy0+c2htX3RvdCArPSBudW1wYWdlczsKIAlzaG1fdW5sb2NrKHNocCk7CkBAIC02MDcsMTAgKzY0Nyw3IEBACiAJCXRidWYuc2htX2N0aW1lCT0gc2hwLT5zaG1fY3RpbTsKIAkJdGJ1Zi5zaG1fY3BpZAk9IHNocC0+c2htX2NwcmlkOwogCQl0YnVmLnNobV9scGlkCT0gc2hwLT5zaG1fbHByaWQ7Ci0JCWlmICghaXNfZmlsZV9odWdlcGFnZXMoc2hwLT5zaG1fZmlsZSkpCi0JCQl0YnVmLnNobV9uYXR0Y2gJPSBzaHAtPnNobV9uYXR0Y2g7Ci0JCWVsc2UKLQkJCXRidWYuc2htX25hdHRjaCA9IGZpbGVfY291bnQoc2hwLT5zaG1fZmlsZSkgLSAxOworCQl0YnVmLnNobV9uYXR0Y2gJPSBzaHAtPnNobV9uYXR0Y2g7CiAJCXNobV91bmxvY2soc2hwKTsKIAkJaWYoY29weV9zaG1pZF90b191c2VyIChidWYsICZ0YnVmLCB2ZXJzaW9uKSkKIAkJCWVyciA9IC1FRkFVTFQ7CkBAIC03NzksMTMgKzgxNiwxNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBwcm90OwogCWludCBhY2NfbW9kZTsKLQl2b2lkICp1c2VyX2FkZHI7CisJdW5zaWduZWQgbG9uZyB1c2VyX2FkZHI7CiAJc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zOworCXN0cnVjdCBzaG1fZmlsZV9kYXRhICpzZmQ7CisJc3RydWN0IHBhdGggcGF0aDsKKwltb2RlX3QgZl9tb2RlOwogCi0JaWYgKHNobWlkIDwgMCkgewotCQllcnIgPSAtRUlOVkFMOworCWVyciA9IC1FSU5WQUw7CisJaWYgKHNobWlkIDwgMCkKIAkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmICgoYWRkciA9ICh1bG9uZylzaG1hZGRyKSkgeworCWVsc2UgaWYgKChhZGRyID0gKHVsb25nKXNobWFkZHIpKSB7CiAJCWlmIChhZGRyICYgKFNITUxCQS0xKSkgewogCQkJaWYgKHNobWZsZyAmIFNITV9STkQpCiAJCQkJYWRkciAmPSB+KFNITUxCQS0xKTsJICAgLyogcm91bmQgZG93biAqLwpAQCAtNzkzLDEyICs4MzMsMTIgQEAKICNpZm5kZWYgX19BUkNIX0ZPUkNFX1NITUxCQQogCQkJCWlmIChhZGRyICYgflBBR0VfTUFTSykKICNlbmRpZgotCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkJZ290byBvdXQ7CiAJCX0KIAkJZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVEOwogCX0gZWxzZSB7CiAJCWlmICgoc2htZmxnICYgU0hNX1JFTUFQKSkKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZ290byBvdXQ7CiAKIAkJZmxhZ3MgPSBNQVBfU0hBUkVEOwogCX0KQEAgLTgwNiw5ICs4NDYsMTEgQEAKIAlpZiAoc2htZmxnICYgU0hNX1JET05MWSkgewogCQlwcm90ID0gUFJPVF9SRUFEOwogCQlhY2NfbW9kZSA9IFNfSVJVR087CisJCWZfbW9kZSA9IEZNT0RFX1JFQUQ7CiAJfSBlbHNlIHsKIAkJcHJvdCA9IFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CiAJCWFjY19tb2RlID0gU19JUlVHTyB8IFNfSVdVR087CisJCWZfbW9kZSA9IEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURTsKIAl9CiAJaWYgKHNobWZsZyAmIFNITV9FWEVDKSB7CiAJCXByb3QgfD0gUFJPVF9FWEVDOwpAQCAtODIxLDM1ICs4NjMsNTAgQEAKIAkgKi8KIAlucyA9IGN1cnJlbnQtPm5zcHJveHktPmlwY19uczsKIAlzaHAgPSBzaG1fbG9jayhucywgc2htaWQpOwotCWlmKHNocCA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FSU5WQUw7CisJaWYoc2hwID09IE5VTEwpCiAJCWdvdG8gb3V0OwotCX0KKwogCWVyciA9IHNobV9jaGVja2lkKG5zLCBzaHAsc2htaWQpOwotCWlmIChlcnIpIHsKLQkJc2htX3VubG9jayhzaHApOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGlwY3Blcm1zKCZzaHAtPnNobV9wZXJtLCBhY2NfbW9kZSkpIHsKLQkJc2htX3VubG9jayhzaHApOwotCQllcnIgPSAtRUFDQ0VTOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5sb2NrOworCisJZXJyID0gLUVBQ0NFUzsKKwlpZiAoaXBjcGVybXMoJnNocC0+c2htX3Blcm0sIGFjY19tb2RlKSkKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJZXJyID0gc2VjdXJpdHlfc2htX3NobWF0KHNocCwgc2htYWRkciwgc2htZmxnKTsKLQlpZiAoZXJyKSB7Ci0JCXNobV91bmxvY2soc2hwKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JCQotCWZpbGUgPSBzaHAtPnNobV9maWxlOwotCXNpemUgPSBpX3NpemVfcmVhZChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlwYXRoLmRlbnRyeSA9IGRnZXQoc2hwLT5zaG1fZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CisJcGF0aC5tbnQgICAgPSBtbnRnZXQoc2hwLT5zaG1fZmlsZS0+Zl9wYXRoLm1udCk7CiAJc2hwLT5zaG1fbmF0dGNoKys7CisJc2l6ZSA9IGlfc2l6ZV9yZWFkKHBhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzaG1fdW5sb2NrKHNocCk7CiAKKwllcnIgPSAtRU5PTUVNOworCXNmZCA9IGt6YWxsb2Moc2l6ZW9mKCpzZmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNmZCkKKwkJZ290byBvdXRfcHV0X3BhdGg7CisKKwllcnIgPSAtRU5PTUVNOworCWZpbGUgPSBnZXRfZW1wdHlfZmlscCgpOworCWlmICghZmlsZSkKKwkJZ290byBvdXRfZnJlZTsKKworCWZpbGUtPmZfb3AgPSAmc2htX2ZpbGVfb3BlcmF0aW9uczsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBzZmQ7CisJZmlsZS0+Zl9wYXRoID0gcGF0aDsKKwlmaWxlLT5mX21hcHBpbmcgPSBzaHAtPnNobV9maWxlLT5mX21hcHBpbmc7CisJZmlsZS0+Zl9tb2RlID0gZl9tb2RlOworCXNmZC0+aWQgPSBzaHAtPmlkOworCXNmZC0+bnMgPSBnZXRfaXBjX25zKG5zKTsKKwlzZmQtPmZpbGUgPSBzaHAtPnNobV9maWxlOworCXNmZC0+dm1fb3BzID0gTlVMTDsKKwogCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJaWYgKGFkZHIgJiYgIShzaG1mbGcgJiBTSE1fUkVNQVApKSB7Ci0JCXVzZXJfYWRkciA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWVyciA9IC1FSU5WQUw7CiAJCWlmIChmaW5kX3ZtYV9pbnRlcnNlY3Rpb24oY3VycmVudC0+bW0sIGFkZHIsIGFkZHIgKyBzaXplKSkKIAkJCWdvdG8gaW52YWxpZDsKIAkJLyoKQEAgLTg2MSwxMSArOTE4LDE3IEBACiAJCQlnb3RvIGludmFsaWQ7CiAJfQogCQkKLQl1c2VyX2FkZHIgPSAodm9pZCopIGRvX21tYXAgKGZpbGUsIGFkZHIsIHNpemUsIHByb3QsIGZsYWdzLCAwKTsKLQorCXVzZXJfYWRkciA9IGRvX21tYXAgKGZpbGUsIGFkZHIsIHNpemUsIHByb3QsIGZsYWdzLCAwKTsKKwkqcmFkZHIgPSB1c2VyX2FkZHI7CisJZXJyID0gMDsKKwlpZiAoSVNfRVJSX1ZBTFVFKHVzZXJfYWRkcikpCisJCWVyciA9IChsb25nKXVzZXJfYWRkcjsKIGludmFsaWQ6CiAJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKKwlmcHV0KGZpbGUpOworCitvdXRfbmF0dGNoOgogCW11dGV4X2xvY2soJnNobV9pZHMobnMpLm11dGV4KTsKIAlzaHAgPSBzaG1fbG9jayhucywgc2htaWQpOwogCUJVR19PTighc2hwKTsKQEAgLTg3NywxMiArOTQwLDE5IEBACiAJCXNobV91bmxvY2soc2hwKTsKIAltdXRleF91bmxvY2soJnNobV9pZHMobnMpLm11dGV4KTsKIAotCSpyYWRkciA9ICh1bnNpZ25lZCBsb25nKSB1c2VyX2FkZHI7Ci0JZXJyID0gMDsKLQlpZiAoSVNfRVJSKHVzZXJfYWRkcikpCi0JCWVyciA9IFBUUl9FUlIodXNlcl9hZGRyKTsKIG91dDoKIAlyZXR1cm4gZXJyOworCitvdXRfdW5sb2NrOgorCXNobV91bmxvY2soc2hwKTsKKwlnb3RvIG91dDsKKworb3V0X2ZyZWU6CisJa2ZyZWUoc2ZkKTsKK291dF9wdXRfcGF0aDoKKwlkcHV0KHBhdGguZGVudHJ5KTsKKwltbnRwdXQocGF0aC5tbnQpOworCWdvdG8gb3V0X25hdHRjaDsKIH0KIAogYXNtbGlua2FnZSBsb25nIHN5c19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnKQpAQCAtOTQ0LDcgKzEwMTQsNyBAQAogCQkgKiBhIGZyYWdtZW50IGNyZWF0ZWQgYnkgbXByb3RlY3QoKSBhbmQvb3IgbXVubWFwKCksIG9yIGl0CiAJCSAqIG90aGVyd2lzZSBpdCBzdGFydHMgYXQgdGhpcyBhZGRyZXNzIHdpdGggbm8gaGFzc2xlcy4KIAkJICovCi0JCWlmICgodm1hLT52bV9vcHMgPT0gJnNobV92bV9vcHMgfHwgaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpICYmCisJCWlmICgodm1hLT52bV9vcHMgPT0gJnNobV92bV9vcHMpICYmCiAJCQkodm1hLT52bV9zdGFydCAtIGFkZHIpL1BBR0VfU0laRSA9PSB2bWEtPnZtX3Bnb2ZmKSB7CiAKIApAQCAtOTczLDcgKzEwNDMsNyBAQAogCQluZXh0ID0gdm1hLT52bV9uZXh0OwogCiAJCS8qIGZpbmRpbmcgYSBtYXRjaGluZyB2bWEgbm93IGRvZXMgbm90IGFsdGVyIHJldHZhbCAqLwotCQlpZiAoKHZtYS0+dm1fb3BzID09ICZzaG1fdm1fb3BzIHx8IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSAmJgorCQlpZiAoKHZtYS0+dm1fb3BzID09ICZzaG1fdm1fb3BzKSAmJgogCQkJKHZtYS0+dm1fc3RhcnQgLSBhZGRyKS9QQUdFX1NJWkUgPT0gdm1hLT52bV9wZ29mZikKIAogCQkJZG9fbXVubWFwKG1tLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOwpAQCAtMTAwNCw3ICsxMDc0LDcgQEAKIAkJCSAgc2hwLT5zaG1fc2Vnc3osCiAJCQkgIHNocC0+c2htX2NwcmlkLAogCQkJICBzaHAtPnNobV9scHJpZCwKLQkJCSAgaXNfZmlsZV9odWdlcGFnZXMoc2hwLT5zaG1fZmlsZSkgPyAoZmlsZV9jb3VudChzaHAtPnNobV9maWxlKSAtIDEpIDogc2hwLT5zaG1fbmF0dGNoLAorCQkJICBzaHAtPnNobV9uYXR0Y2gsCiAJCQkgIHNocC0+c2htX3Blcm0udWlkLAogCQkJICBzaHAtPnNobV9wZXJtLmdpZCwKIAkJCSAgc2hwLT5zaG1fcGVybS5jdWlkLApkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmMgYi9rZXJuZWwvYXVkaXQuYwppbmRleCBkOWI2OTBhLi43NmM5YTExIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuYworKysgYi9rZXJuZWwvYXVkaXQuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEdhdGV3YXkgYmV0d2VlbiB0aGUga2VybmVsIChlLmcuLCBzZWxpbnV4KSBhbmQgdGhlIHVzZXItc3BhY2UgYXVkaXQgZGFlbW9uLgogICogU3lzdGVtLWNhbGwgc3BlY2lmaWMgZmVhdHVyZXMgaGF2ZSBtb3ZlZCB0byBhdWRpdHNjLmMKICAqCi0gKiBDb3B5cmlnaHQgMjAwMy0yMDA0IFJlZCBIYXQgSW5jLiwgRHVyaGFtLCBOb3J0aCBDYXJvbGluYS4KKyAqIENvcHlyaWdodCAyMDAzLTIwMDcgUmVkIEhhdCBJbmMuLCBEdXJoYW0sIE5vcnRoIENhcm9saW5hLgogICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNjUsNyArNjUsOSBAQAogICogKEluaXRpYWxpemF0aW9uIGhhcHBlbnMgYWZ0ZXIgc2tiX2luaXQgaXMgY2FsbGVkLikgKi8KIHN0YXRpYyBpbnQJYXVkaXRfaW5pdGlhbGl6ZWQ7CiAKLS8qIE5vIHN5c2NhbGwgYXVkaXRpbmcgd2lsbCB0YWtlIHBsYWNlIHVubGVzcyBhdWRpdF9lbmFibGVkICE9IDAuICovCisvKiAwIC0gbm8gYXVkaXRpbmcKKyAqIDEgLSBhdWRpdGluZyBlbmFibGVkCisgKiAyIC0gYXVkaXRpbmcgZW5hYmxlZCBhbmQgY29uZmlndXJhdGlvbiBpcyBsb2NrZWQvdW5jaGFuZ2VhYmxlLiAqLwogaW50CQlhdWRpdF9lbmFibGVkOwogCiAvKiBEZWZhdWx0IHN0YXRlIHdoZW4ga2VybmVsIGJvb3RzIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMuICovCkBAIC0yMzksMTAyICsyNDEsMTUwIEBACiAKIHN0YXRpYyBpbnQgYXVkaXRfc2V0X3JhdGVfbGltaXQoaW50IGxpbWl0LCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKIHsKLQlpbnQgb2xkCT0gYXVkaXRfcmF0ZV9saW1pdDsKKwlpbnQgcmVzLCByYyA9IDAsIG9sZCA9IGF1ZGl0X3JhdGVfbGltaXQ7CisKKwkvKiBjaGVjayBpZiB3ZSBhcmUgbG9ja2VkICovCisJaWYgKGF1ZGl0X2VuYWJsZWQgPT0gMikKKwkJcmVzID0gMDsKKwllbHNlCisJCXJlcyA9IDE7CiAKIAlpZiAoc2lkKSB7CiAJCWNoYXIgKmN0eCA9IE5VTEw7CiAJCXUzMiBsZW47Ci0JCWludCByYzsKLQkJaWYgKChyYyA9IHNlbGludXhfc2lkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pKSkKLQkJCXJldHVybiByYzsKLQkJZWxzZQorCQlpZiAoKHJjID0gc2VsaW51eF9zaWRfdG9fc3RyaW5nKHNpZCwgJmN0eCwgJmxlbikpID09IDApIHsKIAkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAotCQkJCSJhdWRpdF9yYXRlX2xpbWl0PSVkIG9sZD0lZCBieSBhdWlkPSV1IHN1Ymo9JXMiLAotCQkJCWxpbWl0LCBvbGQsIGxvZ2ludWlkLCBjdHgpOwotCQlrZnJlZShjdHgpOwotCX0gZWxzZQotCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKLQkJCSJhdWRpdF9yYXRlX2xpbWl0PSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKLQkJCWxpbWl0LCBvbGQsIGxvZ2ludWlkKTsKLQlhdWRpdF9yYXRlX2xpbWl0ID0gbGltaXQ7Ci0JcmV0dXJuIDA7CisJCQkJImF1ZGl0X3JhdGVfbGltaXQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUiCisJCQkJIiBzdWJqPSVzIHJlcz0lZCIsCisJCQkJbGltaXQsIG9sZCwgbG9naW51aWQsIGN0eCwgcmVzKTsKKwkJCWtmcmVlKGN0eCk7CisJCX0gZWxzZQorCQkJcmVzID0gMDsgLyogU29tZXRoaW5nIHdlaXJkLCBkZW55IHJlcXVlc3QgKi8KKwl9CisJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCisJCSJhdWRpdF9yYXRlX2xpbWl0PSVkIG9sZD0lZCBieSBhdWlkPSV1IHJlcz0lZCIsCisJCWxpbWl0LCBvbGQsIGxvZ2ludWlkLCByZXMpOworCisJLyogSWYgd2UgYXJlIGFsbG93ZWQsIG1ha2UgdGhlIGNoYW5nZSAqLworCWlmIChyZXMgPT0gMSkKKwkJYXVkaXRfcmF0ZV9saW1pdCA9IGxpbWl0OworCS8qIE5vdCBhbGxvd2VkLCB1cGRhdGUgcmVhc29uICovCisJZWxzZSBpZiAocmMgPT0gMCkKKwkJcmMgPSAtRVBFUk07CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGF1ZGl0X3NldF9iYWNrbG9nX2xpbWl0KGludCBsaW1pdCwgdWlkX3QgbG9naW51aWQsIHUzMiBzaWQpCiB7Ci0JaW50IG9sZAk9IGF1ZGl0X2JhY2tsb2dfbGltaXQ7CisJaW50IHJlcywgcmMgPSAwLCBvbGQgPSBhdWRpdF9iYWNrbG9nX2xpbWl0OworCisJLyogY2hlY2sgaWYgd2UgYXJlIGxvY2tlZCAqLworCWlmIChhdWRpdF9lbmFibGVkID09IDIpCisJCXJlcyA9IDA7CisJZWxzZQorCQlyZXMgPSAxOwogCiAJaWYgKHNpZCkgewogCQljaGFyICpjdHggPSBOVUxMOwogCQl1MzIgbGVuOwotCQlpbnQgcmM7Ci0JCWlmICgocmMgPSBzZWxpbnV4X3NpZF90b19zdHJpbmcoc2lkLCAmY3R4LCAmbGVuKSkpCi0JCQlyZXR1cm4gcmM7Ci0JCWVsc2UKKwkJaWYgKChyYyA9IHNlbGludXhfc2lkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pKSA9PSAwKSB7CiAJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKLQkJCSAgICAiYXVkaXRfYmFja2xvZ19saW1pdD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSBzdWJqPSVzIiwKLQkJCQlsaW1pdCwgb2xkLCBsb2dpbnVpZCwgY3R4KTsKLQkJa2ZyZWUoY3R4KTsKLQl9IGVsc2UKLQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCi0JCQkiYXVkaXRfYmFja2xvZ19saW1pdD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCi0JCQlsaW1pdCwgb2xkLCBsb2dpbnVpZCk7Ci0JYXVkaXRfYmFja2xvZ19saW1pdCA9IGxpbWl0OwotCXJldHVybiAwOworCQkJCSJhdWRpdF9iYWNrbG9nX2xpbWl0PSVkIG9sZD0lZCBieSBhdWlkPSV1IgorCQkJCSIgc3Viaj0lcyByZXM9JWQiLAorCQkJCWxpbWl0LCBvbGQsIGxvZ2ludWlkLCBjdHgsIHJlcyk7CisJCQlrZnJlZShjdHgpOworCQl9IGVsc2UKKwkJCXJlcyA9IDA7IC8qIFNvbWV0aGluZyB3ZWlyZCwgZGVueSByZXF1ZXN0ICovCisJfQorCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkiYXVkaXRfYmFja2xvZ19saW1pdD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSByZXM9JWQiLAorCQlsaW1pdCwgb2xkLCBsb2dpbnVpZCwgcmVzKTsKKworCS8qIElmIHdlIGFyZSBhbGxvd2VkLCBtYWtlIHRoZSBjaGFuZ2UgKi8KKwlpZiAocmVzID09IDEpCisJCWF1ZGl0X2JhY2tsb2dfbGltaXQgPSBsaW1pdDsKKwkvKiBOb3QgYWxsb3dlZCwgdXBkYXRlIHJlYXNvbiAqLworCWVsc2UgaWYgKHJjID09IDApCisJCXJjID0gLUVQRVJNOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBhdWRpdF9zZXRfZW5hYmxlZChpbnQgc3RhdGUsIHVpZF90IGxvZ2ludWlkLCB1MzIgc2lkKQogewotCWludCBvbGQgPSBhdWRpdF9lbmFibGVkOworCWludCByZXMsIHJjID0gMCwgb2xkID0gYXVkaXRfZW5hYmxlZDsKIAotCWlmIChzdGF0ZSAhPSAwICYmIHN0YXRlICE9IDEpCisJaWYgKHN0YXRlIDwgMCB8fCBzdGF0ZSA+IDIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogY2hlY2sgaWYgd2UgYXJlIGxvY2tlZCAqLworCWlmIChhdWRpdF9lbmFibGVkID09IDIpCisJCXJlcyA9IDA7CisJZWxzZQorCQlyZXMgPSAxOworCiAJaWYgKHNpZCkgewogCQljaGFyICpjdHggPSBOVUxMOwogCQl1MzIgbGVuOwotCQlpbnQgcmM7Ci0JCWlmICgocmMgPSBzZWxpbnV4X3NpZF90b19zdHJpbmcoc2lkLCAmY3R4LCAmbGVuKSkpCi0JCQlyZXR1cm4gcmM7Ci0JCWVsc2UKKwkJaWYgKChyYyA9IHNlbGludXhfc2lkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pKSA9PSAwKSB7CiAJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKLQkJCQkiYXVkaXRfZW5hYmxlZD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSBzdWJqPSVzIiwKLQkJCQlzdGF0ZSwgb2xkLCBsb2dpbnVpZCwgY3R4KTsKLQkJa2ZyZWUoY3R4KTsKLQl9IGVsc2UKLQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCi0JCQkiYXVkaXRfZW5hYmxlZD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCi0JCQlzdGF0ZSwgb2xkLCBsb2dpbnVpZCk7Ci0JYXVkaXRfZW5hYmxlZCA9IHN0YXRlOwotCXJldHVybiAwOworCQkJCSJhdWRpdF9lbmFibGVkPSVkIG9sZD0lZCBieSBhdWlkPSV1IgorCQkJCSIgc3Viaj0lcyByZXM9JWQiLAorCQkJCXN0YXRlLCBvbGQsIGxvZ2ludWlkLCBjdHgsIHJlcyk7CisJCQlrZnJlZShjdHgpOworCQl9IGVsc2UKKwkJCXJlcyA9IDA7IC8qIFNvbWV0aGluZyB3ZWlyZCwgZGVueSByZXF1ZXN0ICovCisJfQorCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkiYXVkaXRfZW5hYmxlZD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSByZXM9JWQiLAorCQlzdGF0ZSwgb2xkLCBsb2dpbnVpZCwgcmVzKTsKKworCS8qIElmIHdlIGFyZSBhbGxvd2VkLCBtYWtlIHRoZSBjaGFuZ2UgKi8KKwlpZiAocmVzID09IDEpCisJCWF1ZGl0X2VuYWJsZWQgPSBzdGF0ZTsKKwkvKiBOb3QgYWxsb3dlZCwgdXBkYXRlIHJlYXNvbiAqLworCWVsc2UgaWYgKHJjID09IDApCisJCXJjID0gLUVQRVJNOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBhdWRpdF9zZXRfZmFpbHVyZShpbnQgc3RhdGUsIHVpZF90IGxvZ2ludWlkLCB1MzIgc2lkKQogewotCWludCBvbGQgPSBhdWRpdF9mYWlsdXJlOworCWludCByZXMsIHJjID0gMCwgb2xkID0gYXVkaXRfZmFpbHVyZTsKIAogCWlmIChzdGF0ZSAhPSBBVURJVF9GQUlMX1NJTEVOVAogCSAgICAmJiBzdGF0ZSAhPSBBVURJVF9GQUlMX1BSSU5USwogCSAgICAmJiBzdGF0ZSAhPSBBVURJVF9GQUlMX1BBTklDKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qIGNoZWNrIGlmIHdlIGFyZSBsb2NrZWQgKi8KKwlpZiAoYXVkaXRfZW5hYmxlZCA9PSAyKQorCQlyZXMgPSAwOworCWVsc2UKKwkJcmVzID0gMTsKKwogCWlmIChzaWQpIHsKIAkJY2hhciAqY3R4ID0gTlVMTDsKIAkJdTMyIGxlbjsKLQkJaW50IHJjOwotCQlpZiAoKHJjID0gc2VsaW51eF9zaWRfdG9fc3RyaW5nKHNpZCwgJmN0eCwgJmxlbikpKQotCQkJcmV0dXJuIHJjOwotCQllbHNlCisJCWlmICgocmMgPSBzZWxpbnV4X3NpZF90b19zdHJpbmcoc2lkLCAmY3R4LCAmbGVuKSkgPT0gMCkgewogCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCi0JCQkJImF1ZGl0X2ZhaWx1cmU9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUgc3Viaj0lcyIsCi0JCQkJc3RhdGUsIG9sZCwgbG9naW51aWQsIGN0eCk7Ci0JCWtmcmVlKGN0eCk7Ci0JfSBlbHNlCi0JCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAotCQkJImF1ZGl0X2ZhaWx1cmU9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUiLAotCQkJc3RhdGUsIG9sZCwgbG9naW51aWQpOwotCWF1ZGl0X2ZhaWx1cmUgPSBzdGF0ZTsKLQlyZXR1cm4gMDsKKwkJCQkiYXVkaXRfZmFpbHVyZT0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIKKwkJCQkiIHN1Ymo9JXMgcmVzPSVkIiwKKwkJCQlzdGF0ZSwgb2xkLCBsb2dpbnVpZCwgY3R4LCByZXMpOworCQkJa2ZyZWUoY3R4KTsKKwkJfSBlbHNlCisJCQlyZXMgPSAwOyAvKiBTb21ldGhpbmcgd2VpcmQsIGRlbnkgcmVxdWVzdCAqLworCX0KKwlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJImF1ZGl0X2ZhaWx1cmU9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUgcmVzPSVkIiwKKwkJc3RhdGUsIG9sZCwgbG9naW51aWQsIHJlcyk7CisKKwkvKiBJZiB3ZSBhcmUgYWxsb3dlZCwgbWFrZSB0aGUgY2hhbmdlICovCisJaWYgKHJlcyA9PSAxKQorCQlhdWRpdF9mYWlsdXJlID0gc3RhdGU7CisJLyogTm90IGFsbG93ZWQsIHVwZGF0ZSByZWFzb24gKi8KKwllbHNlIGlmIChyYyA9PSAwKQorCQlyYyA9IC1FUEVSTTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQga2F1ZGl0ZF90aHJlYWQodm9pZCAqZHVtbXkpCkBAIC01OTksNiArNjQ5LDMwIEBACiAJY2FzZSBBVURJVF9ERUw6CiAJCWlmIChubG1zZ19sZW4obmxoKSA8IHNpemVvZihzdHJ1Y3QgYXVkaXRfcnVsZSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGF1ZGl0X2VuYWJsZWQgPT0gMikgeworCQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwKKwkJCQkJQVVESVRfQ09ORklHX0NIQU5HRSk7CisJCQlpZiAoYWIpIHsKKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLAorCQkJCQkJICJwaWQ9JWQgdWlkPSV1IGF1aWQ9JXUiLAorCQkJCQkJIHBpZCwgdWlkLCBsb2dpbnVpZCk7CisJCQkJaWYgKHNpZCkgeworCQkJCQlpZiAoc2VsaW51eF9zaWRfdG9fc3RyaW5nKAorCQkJCQkJCXNpZCwgJmN0eCwgJmxlbikpIHsKKwkJCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsCisJCQkJCQkJIiBzc2lkPSV1Iiwgc2lkKTsKKwkJCQkJCS8qIE1heWJlIGNhbGwgYXVkaXRfcGFuaWM/ICovCisJCQkJCX0gZWxzZQorCQkJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKKwkJCQkJCQkiIHN1Ymo9JXMiLCBjdHgpOworCQkJCQlrZnJlZShjdHgpOworCQkJCX0KKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGF1ZGl0X2VuYWJsZWQ9JWQgcmVzPTAiLAorCQkJCQlhdWRpdF9lbmFibGVkKTsKKwkJCQlhdWRpdF9sb2dfZW5kKGFiKTsKKwkJCX0KKwkJCXJldHVybiAtRVBFUk07CisJCX0KIAkJLyogZmFsbHRocm91Z2ggKi8KIAljYXNlIEFVRElUX0xJU1Q6CiAJCWVyciA9IGF1ZGl0X3JlY2VpdmVfZmlsdGVyKG5saC0+bmxtc2dfdHlwZSwgTkVUTElOS19DQihza2IpLnBpZCwKQEAgLTYwOSw2ICs2ODMsMzAgQEAKIAljYXNlIEFVRElUX0RFTF9SVUxFOgogCQlpZiAobmxtc2dfbGVuKG5saCkgPCBzaXplb2Yoc3RydWN0IGF1ZGl0X3J1bGVfZGF0YSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGF1ZGl0X2VuYWJsZWQgPT0gMikgeworCQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwKKwkJCQkJQVVESVRfQ09ORklHX0NIQU5HRSk7CisJCQlpZiAoYWIpIHsKKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLAorCQkJCQkJICJwaWQ9JWQgdWlkPSV1IGF1aWQ9JXUiLAorCQkJCQkJIHBpZCwgdWlkLCBsb2dpbnVpZCk7CisJCQkJaWYgKHNpZCkgeworCQkJCQlpZiAoc2VsaW51eF9zaWRfdG9fc3RyaW5nKAorCQkJCQkJCXNpZCwgJmN0eCwgJmxlbikpIHsKKwkJCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsCisJCQkJCQkJIiBzc2lkPSV1Iiwgc2lkKTsKKwkJCQkJCS8qIE1heWJlIGNhbGwgYXVkaXRfcGFuaWM/ICovCisJCQkJCX0gZWxzZQorCQkJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKKwkJCQkJCQkiIHN1Ymo9JXMiLCBjdHgpOworCQkJCQlrZnJlZShjdHgpOworCQkJCX0KKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGF1ZGl0X2VuYWJsZWQ9JWQgcmVzPTAiLAorCQkJCQlhdWRpdF9lbmFibGVkKTsKKwkJCQlhdWRpdF9sb2dfZW5kKGFiKTsKKwkJCX0KKwkJCXJldHVybiAtRVBFUk07CisJCX0KIAkJLyogZmFsbHRocm91Z2ggKi8KIAljYXNlIEFVRElUX0xJU1RfUlVMRVM6CiAJCWVyciA9IGF1ZGl0X3JlY2VpdmVfZmlsdGVyKG5saC0+bmxtc2dfdHlwZSwgTkVUTElOS19DQihza2IpLnBpZCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdGZpbHRlci5jIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKaW5kZXggODc4NjVmOC4uMzc0OTE5MyAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMKKysrIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKQEAgLTkzNyw5ICs5MzcsMTAgQEAKIAkJfQogCiAJCWFiID0gYXVkaXRfbG9nX3N0YXJ0KE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UpOwotCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiYXVkaXQgdXBkYXRlZCBydWxlcyBzcGVjaWZ5aW5nIHBhdGg9Iik7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJvcD11cGRhdGVkIHJ1bGVzIHNwZWNpZnlpbmcgcGF0aD0iKTsKIAkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgb3dhdGNoLT5wYXRoKTsKIAkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiB3aXRoIGRldj0ldSBpbm89JWx1XG4iLCBkZXYsIGlubyk7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbGlzdD0lZCByZXM9MSIsIHItPmxpc3Rucik7CiAJCWF1ZGl0X2xvZ19lbmQoYWIpOwogCiAJCWF1ZGl0X3JlbW92ZV93YXRjaChvd2F0Y2gpOwpAQCAtOTY5LDE0ICs5NzAsMTQgQEAKIAkJCWUgPSBjb250YWluZXJfb2Yociwgc3RydWN0IGF1ZGl0X2VudHJ5LCBydWxlKTsKIAogCQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSk7Ci0JCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiYXVkaXQgaW1wbGljaXRseSByZW1vdmVkIHJ1bGUgcGF0aD0iKTsKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJvcD1yZW1vdmUgcnVsZSBwYXRoPSIpOwogCQkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgdy0+cGF0aCk7CiAJCQlpZiAoci0+ZmlsdGVya2V5KSB7CiAJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBrZXk9Iik7CiAJCQkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgci0+ZmlsdGVya2V5KTsKIAkJCX0gZWxzZQogCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIga2V5PShudWxsKSIpOwotCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBsaXN0PSVkIiwgci0+bGlzdG5yKTsKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbGlzdD0lZCByZXM9MSIsIHItPmxpc3Rucik7CiAJCQlhdWRpdF9sb2dfZW5kKGFiKTsKIAogCQkJbGlzdF9kZWwoJnItPnJsaXN0KTsKQEAgLTE0MTAsNyArMTQxMSw3IEBACiAJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIHN1Ymo9JXMiLCBjdHgpOwogCQlrZnJlZShjdHgpOwogCX0KLQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiICVzIHJ1bGUga2V5PSIsIGFjdGlvbik7CisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvcD0lcyBydWxlIGtleT0iLCBhY3Rpb24pOwogCWlmIChydWxlLT5maWx0ZXJrZXkpCiAJCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIHJ1bGUtPmZpbHRlcmtleSk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggMjk4ODk3NS4uMzU5OTU1OCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0xNzAsNiArMTcwLDExIEBACiAJY2hhcgkJCWFbMF07CiB9OwogCitzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfZmRfcGFpciB7CisJc3RydWN0CWF1ZGl0X2F1eF9kYXRhIGQ7CisJaW50CWZkWzJdOworfTsKKwogc3RydWN0IGF1ZGl0X2F1eF9kYXRhX3BhdGggewogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YQlkOwogCXN0cnVjdCBkZW50cnkJCSpkZW50cnk7CkBAIC05NjEsNiArOTY2LDExIEBACiAJCQlhdWRpdF9sb2dfZF9wYXRoKGFiLCAicGF0aD0iLCBheGktPmRlbnRyeSwgYXhpLT5tbnQpOwogCQkJYnJlYWs7IH0KIAorCQljYXNlIEFVRElUX0ZEX1BBSVI6IHsKKwkJCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9mZF9wYWlyICpheHMgPSAodm9pZCAqKWF1eDsKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJmZDA9JWQgZmQxPSVkIiwgYXhzLT5mZFswXSwgYXhzLT5mZFsxXSk7CisJCQlicmVhazsgfQorCiAJCX0KIAkJYXVkaXRfbG9nX2VuZChhYik7CiAJfQpAQCAtMTgxNSw2ICsxODI1LDM2IEBACiB9CiAKIC8qKgorICogX19hdWRpdF9mZF9wYWlyIC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIHBpcGUgYW5kIHNvY2tldHBhaXIKKyAqIEBmZDE6IHRoZSBmaXJzdCBmaWxlIGRlc2NyaXB0b3IKKyAqIEBmZDI6IHRoZSBzZWNvbmQgZmlsZSBkZXNjcmlwdG9yCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzIG9yIE5VTEwgY29udGV4dCBvciA8IDAgb24gZXJyb3IuCisgKi8KK2ludCBfX2F1ZGl0X2ZkX3BhaXIoaW50IGZkMSwgaW50IGZkMikKK3sKKwlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2ZkX3BhaXIgKmF4OworCisJaWYgKGxpa2VseSghY29udGV4dCkpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF4KSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWF4LT5mZFswXSA9IGZkMTsKKwlheC0+ZmRbMV0gPSBmZDI7CisKKwlheC0+ZC50eXBlID0gQVVESVRfRkRfUEFJUjsKKwlheC0+ZC5uZXh0ID0gY29udGV4dC0+YXV4OworCWNvbnRleHQtPmF1eCA9ICh2b2lkICopYXg7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogYXVkaXRfc29ja2FkZHIgLSByZWNvcmQgYXVkaXQgZGF0YSBmb3Igc3lzX2JpbmQsIHN5c19jb25uZWN0LCBzeXNfc2VuZHRvCiAgKiBAbGVuOiBkYXRhIGxlbmd0aCBpbiB1c2VyIHNwYWNlCiAgKiBAYTogZGF0YSBhZGRyZXNzIGluIGtlcm5lbCBzcGFjZQpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggMGI2MjkzZC4uZDE1NGNjNyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC04NTgsNyArODU4LDcgQEAKIAlpbml0X3NpZ3BlbmRpbmcoJnNpZy0+c2hhcmVkX3BlbmRpbmcpOwogCUlOSVRfTElTVF9IRUFEKCZzaWctPnBvc2l4X3RpbWVycyk7CiAKLQlocnRpbWVyX2luaXQoJnNpZy0+cmVhbF90aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX1JFTCk7CisJaHJ0aW1lcl9pbml0KCZzaWctPnJlYWxfdGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CiAJc2lnLT5pdF9yZWFsX2luY3IudHY2NCA9IDA7CiAJc2lnLT5yZWFsX3RpbWVyLmZ1bmN0aW9uID0gaXRfcmVhbF9mbjsKIAlzaWctPnRzayA9IHRzazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggNWE3MzdkZS4uZTc0OWU3ZCAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTExMzQsNyArMTEzNCw3IEBACiAKIAlpZiAoc2VjICE9IE1BWF9TQ0hFRFVMRV9USU1FT1VUKSB7CiAJCXRvID0gJnRpbWVvdXQ7Ci0JCWhydGltZXJfaW5pdCgmdG8tPnRpbWVyLCBDTE9DS19SRUFMVElNRSwgSFJUSU1FUl9BQlMpOworCQlocnRpbWVyX2luaXQoJnRvLT50aW1lciwgQ0xPQ0tfUkVBTFRJTUUsIEhSVElNRVJfTU9ERV9BQlMpOwogCQlocnRpbWVyX2luaXRfc2xlZXBlcih0bywgY3VycmVudCk7CiAJCXRvLT50aW1lci5leHBpcmVzID0ga3RpbWVfc2V0KHNlYywgbnNlYyk7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2hydGltZXIuYyBiL2tlcm5lbC9ocnRpbWVyLmMKaW5kZXggZjQ0ZTQ5OS4uNDc2Y2IwYyAxMDA2NDQKLS0tIGEva2VybmVsL2hydGltZXIuYworKysgYi9rZXJuZWwvaHJ0aW1lci5jCkBAIC0xLDggKzEsOSBAQAogLyoKICAqICBsaW51eC9rZXJuZWwvaHJ0aW1lci5jCiAgKgotICogIENvcHlyaWdodChDKSAyMDA1LCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLSAqICBDb3B5cmlnaHQoQykgMjAwNSwgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqICBDb3B5cmlnaHQoQykgMjAwNS0yMDA2LCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqICBDb3B5cmlnaHQoQykgMjAwNS0yMDA3LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICogIENvcHlyaWdodChDKSAyMDA2LTIwMDcgIFRpbWVzeXMgQ29ycC4sIFRob21hcyBHbGVpeG5lcgogICoKICAqICBIaWdoLXJlc29sdXRpb24ga2VybmVsIHRpbWVycwogICoKQEAgLTMxLDEyICszMiwxNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGljay5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC00NSw3ICs1MSw3IEBACiAgKgogICogcmV0dXJucyB0aGUgdGltZSBpbiBrdGltZV90IGZvcm1hdAogICovCi1zdGF0aWMga3RpbWVfdCBrdGltZV9nZXQodm9pZCkKK2t0aW1lX3Qga3RpbWVfZ2V0KHZvaWQpCiB7CiAJc3RydWN0IHRpbWVzcGVjIG5vdzsKIApAQCAtNTksNyArNjUsNyBAQAogICoKICAqIHJldHVybnMgdGhlIHRpbWUgaW4ga3RpbWVfdCBmb3JtYXQKICAqLwotc3RhdGljIGt0aW1lX3Qga3RpbWVfZ2V0X3JlYWwodm9pZCkKK2t0aW1lX3Qga3RpbWVfZ2V0X3JlYWwodm9pZCkKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgbm93OwogCkBAIC03OSwyMSArODUsMjIgQEAKICAqIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGNhcHR1cmUgZXJyb25lb3VzIGFjY2Vzc2VzIHRvIHRoZXNlIGNsb2NrIGlkcwogICogcmF0aGVyIHRoYW4gbW92aW5nIHRoZW0gaW50byB0aGUgcmFuZ2Ugb2YgdmFsaWQgY2xvY2sgaWQncy4KICAqLwotCi0jZGVmaW5lIE1BWF9IUlRJTUVSX0JBU0VTIDIKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBocnRpbWVyX2Jhc2UsIGhydGltZXJfYmFzZXNbTUFYX0hSVElNRVJfQkFTRVNdKSA9CitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSwgaHJ0aW1lcl9iYXNlcykgPQogeworCisJLmNsb2NrX2Jhc2UgPQogCXsKLQkJLmluZGV4ID0gQ0xPQ0tfUkVBTFRJTUUsCi0JCS5nZXRfdGltZSA9ICZrdGltZV9nZXRfcmVhbCwKLQkJLnJlc29sdXRpb24gPSBLVElNRV9SRUFMVElNRV9SRVMsCi0JfSwKLQl7Ci0JCS5pbmRleCA9IENMT0NLX01PTk9UT05JQywKLQkJLmdldF90aW1lID0gJmt0aW1lX2dldCwKLQkJLnJlc29sdXRpb24gPSBLVElNRV9NT05PVE9OSUNfUkVTLAotCX0sCisJCXsKKwkJCS5pbmRleCA9IENMT0NLX1JFQUxUSU1FLAorCQkJLmdldF90aW1lID0gJmt0aW1lX2dldF9yZWFsLAorCQkJLnJlc29sdXRpb24gPSBLVElNRV9MT1dfUkVTLAorCQl9LAorCQl7CisJCQkuaW5kZXggPSBDTE9DS19NT05PVE9OSUMsCisJCQkuZ2V0X3RpbWUgPSAma3RpbWVfZ2V0LAorCQkJLnJlc29sdXRpb24gPSBLVElNRV9MT1dfUkVTLAorCQl9LAorCX0KIH07CiAKIC8qKgpAQCAtMTI1LDIwICsxMzIsMzUgQEAKICAqIEdldCB0aGUgY29hcnNlIGdyYWluZWQgdGltZSBhdCB0aGUgc29mdGlycSBiYXNlZCBvbiB4dGltZSBhbmQKICAqIHdhbGxfdG9fbW9ub3RvbmljLgogICovCi1zdGF0aWMgdm9pZCBocnRpbWVyX2dldF9zb2Z0aXJxX3RpbWUoc3RydWN0IGhydGltZXJfYmFzZSAqYmFzZSkKK3N0YXRpYyB2b2lkIGhydGltZXJfZ2V0X3NvZnRpcnFfdGltZShzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqYmFzZSkKIHsKIAlrdGltZV90IHh0aW0sIHRvbW9ubzsKKwlzdHJ1Y3QgdGltZXNwZWMgeHRzOwogCXVuc2lnbmVkIGxvbmcgc2VxOwogCiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQkJeHRpbSA9IHRpbWVzcGVjX3RvX2t0aW1lKHh0aW1lKTsKLQkJdG9tb25vID0gdGltZXNwZWNfdG9fa3RpbWUod2FsbF90b19tb25vdG9uaWMpOwotCisjaWZkZWYgQ09ORklHX05PX0haCisJCWdldG5zdGltZW9mZGF5KCZ4dHMpOworI2Vsc2UKKwkJeHRzID0geHRpbWU7CisjZW5kaWYKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKIAotCWJhc2VbQ0xPQ0tfUkVBTFRJTUVdLnNvZnRpcnFfdGltZSA9IHh0aW07Ci0JYmFzZVtDTE9DS19NT05PVE9OSUNdLnNvZnRpcnFfdGltZSA9IGt0aW1lX2FkZCh4dGltLCB0b21vbm8pOworCXh0aW0gPSB0aW1lc3BlY190b19rdGltZSh4dHMpOworCXRvbW9ubyA9IHRpbWVzcGVjX3RvX2t0aW1lKHdhbGxfdG9fbW9ub3RvbmljKTsKKwliYXNlLT5jbG9ja19iYXNlW0NMT0NLX1JFQUxUSU1FXS5zb2Z0aXJxX3RpbWUgPSB4dGltOworCWJhc2UtPmNsb2NrX2Jhc2VbQ0xPQ0tfTU9OT1RPTklDXS5zb2Z0aXJxX3RpbWUgPQorCQlrdGltZV9hZGQoeHRpbSwgdG9tb25vKTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjaywgd2hldGhlciB0aGUgdGltZXIgaXMgcnVubmluZyB0aGUgY2FsbGJhY2sKKyAqIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfY2FsbGJhY2tfcnVubmluZyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCit7CisJcmV0dXJuIHRpbWVyLT5zdGF0ZSAmIEhSVElNRVJfU1RBVEVfQ0FMTEJBQ0s7CiB9CiAKIC8qCkBAIC0xNDcsOCArMTY5LDYgQEAKICAqLwogI2lmZGVmIENPTkZJR19TTVAKIAotI2RlZmluZSBzZXRfY3Vycl90aW1lcihiLCB0KQkJZG8geyAoYiktPmN1cnJfdGltZXIgPSAodCk7IH0gd2hpbGUgKDApCi0KIC8qCiAgKiBXZSBhcmUgdXNpbmcgaGFzaGVkIGxvY2tpbmc6IGhvbGRpbmcgcGVyX2NwdShocnRpbWVyX2Jhc2VzKVtuXS5sb2NrCiAgKiBtZWFucyB0aGF0IGFsbCB0aW1lcnMgd2hpY2ggYXJlIHRpZWQgdG8gdGhpcyBiYXNlIHZpYSB0aW1lci0+YmFzZSBhcmUKQEAgLTE2MSwxOSArMTgxLDIwIEBACiAgKiBwb3NzaWJsZSB0byBzZXQgdGltZXItPmJhc2UgPSBOVUxMIGFuZCBkcm9wIHRoZSBsb2NrOiB0aGUgdGltZXIgcmVtYWlucwogICogbG9ja2VkLgogICovCi1zdGF0aWMgc3RydWN0IGhydGltZXJfYmFzZSAqbG9ja19ocnRpbWVyX2Jhc2UoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICpmbGFncykKK3N0YXRpYworc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqbG9ja19ocnRpbWVyX2Jhc2UoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQogewotCXN0cnVjdCBocnRpbWVyX2Jhc2UgKmJhc2U7CisJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZTsKIAogCWZvciAoOzspIHsKIAkJYmFzZSA9IHRpbWVyLT5iYXNlOwogCQlpZiAobGlrZWx5KGJhc2UgIT0gTlVMTCkpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5sb2NrLCAqZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCAqZmxhZ3MpOwogCQkJaWYgKGxpa2VseShiYXNlID09IHRpbWVyLT5iYXNlKSkKIAkJCQlyZXR1cm4gYmFzZTsKIAkJCS8qIFRoZSB0aW1lciBoYXMgbWlncmF0ZWQgdG8gYW5vdGhlciBDUFU6ICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5sb2NrLCAqZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+Y3B1X2Jhc2UtPmxvY2ssICpmbGFncyk7CiAJCX0KIAkJY3B1X3JlbGF4KCk7CiAJfQpAQCAtMTgyLDEyICsyMDMsMTQgQEAKIC8qCiAgKiBTd2l0Y2ggdGhlIHRpbWVyIGJhc2UgdG8gdGhlIGN1cnJlbnQgQ1BVIHdoZW4gcG9zc2libGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhydGltZXJfYmFzZSAqCi1zd2l0Y2hfaHJ0aW1lcl9iYXNlKHN0cnVjdCBocnRpbWVyICp0aW1lciwgc3RydWN0IGhydGltZXJfYmFzZSAqYmFzZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqCitzd2l0Y2hfaHJ0aW1lcl9iYXNlKHN0cnVjdCBocnRpbWVyICp0aW1lciwgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSkKIHsKLQlzdHJ1Y3QgaHJ0aW1lcl9iYXNlICpuZXdfYmFzZTsKKwlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpuZXdfYmFzZTsKKwlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqbmV3X2NwdV9iYXNlOwogCi0JbmV3X2Jhc2UgPSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKVtiYXNlLT5pbmRleF07CisJbmV3X2NwdV9iYXNlID0gJl9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcyk7CisJbmV3X2Jhc2UgPSAmbmV3X2NwdV9iYXNlLT5jbG9ja19iYXNlW2Jhc2UtPmluZGV4XTsKIAogCWlmIChiYXNlICE9IG5ld19iYXNlKSB7CiAJCS8qCkBAIC0xOTksMTMgKzIyMiwxMyBAQAogCQkgKiBjb21wbGV0ZWQuIFRoZXJlIGlzIG5vIGNvbmZsaWN0IGFzIHdlIGhvbGQgdGhlIGxvY2sgdW50aWwKIAkJICogdGhlIHRpbWVyIGlzIGVucXVldWVkLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KGJhc2UtPmN1cnJfdGltZXIgPT0gdGltZXIpKQorCQlpZiAodW5saWtlbHkoaHJ0aW1lcl9jYWxsYmFja19ydW5uaW5nKHRpbWVyKSkpCiAJCQlyZXR1cm4gYmFzZTsKIAogCQkvKiBTZWUgdGhlIGNvbW1lbnQgaW4gbG9ja190aW1lcl9iYXNlKCkgKi8KIAkJdGltZXItPmJhc2UgPSBOVUxMOwotCQlzcGluX3VubG9jaygmYmFzZS0+bG9jayk7Ci0JCXNwaW5fbG9jaygmbmV3X2Jhc2UtPmxvY2spOworCQlzcGluX3VubG9jaygmYmFzZS0+Y3B1X2Jhc2UtPmxvY2spOworCQlzcGluX2xvY2soJm5ld19iYXNlLT5jcHVfYmFzZS0+bG9jayk7CiAJCXRpbWVyLT5iYXNlID0gbmV3X2Jhc2U7CiAJfQogCXJldHVybiBuZXdfYmFzZTsKQEAgLTIxMywxOSArMjM2LDE3IEBACiAKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KIAotI2RlZmluZSBzZXRfY3Vycl90aW1lcihiLCB0KQkJZG8geyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBocnRpbWVyX2Jhc2UgKgorc3RhdGljIGlubGluZSBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICoKIGxvY2tfaHJ0aW1lcl9iYXNlKGNvbnN0IHN0cnVjdCBocnRpbWVyICp0aW1lciwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7Ci0Jc3RydWN0IGhydGltZXJfYmFzZSAqYmFzZSA9IHRpbWVyLT5iYXNlOworCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UgPSB0aW1lci0+YmFzZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5sb2NrLCAqZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5jcHVfYmFzZS0+bG9jaywgKmZsYWdzKTsKIAogCXJldHVybiBiYXNlOwogfQogCi0jZGVmaW5lIHN3aXRjaF9ocnRpbWVyX2Jhc2UodCwgYikJKGIpCisjIGRlZmluZSBzd2l0Y2hfaHJ0aW1lcl9iYXNlKHQsIGIpCShiKQogCiAjZW5kaWYJLyogIUNPTkZJR19TTVAgKi8KIApAQCAtMjU2LDE1ICsyNzcsMTIgQEAKIAogCXJldHVybiBrdGltZV9hZGQoa3QsIHRtcCk7CiB9Ci0KLSNlbHNlIC8qIENPTkZJR19LVElNRV9TQ0FMQVIgKi8KLQogIyBlbmRpZiAvKiAhQ09ORklHX0tUSU1FX1NDQUxBUiAqLwogCiAvKgogICogRGl2aWRlIGEga3RpbWUgdmFsdWUgYnkgYSBuYW5vc2Vjb25kIHZhbHVlCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGt0aW1lX2Rpdm5zKGNvbnN0IGt0aW1lX3Qga3QsIHM2NCBkaXYpCit1bnNpZ25lZCBsb25nIGt0aW1lX2Rpdm5zKGNvbnN0IGt0aW1lX3Qga3QsIHM2NCBkaXYpCiB7CiAJdTY0IGRjbGMsIGluYywgZG5zOwogCWludCBzZnQgPSAwOwpAQCAtMjgxLDE4ICsyOTksMzExIEBACiAKIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIGRjbGM7CiB9Ci0KLSNlbHNlIC8qIEJJVFNfUEVSX0xPTkcgPCA2NCAqLwotIyBkZWZpbmUga3RpbWVfZGl2bnMoa3QsIGRpdikJCSh1bnNpZ25lZCBsb25nKSgoa3QpLnR2NjQgLyAoZGl2KSkKICNlbmRpZiAvKiBCSVRTX1BFUl9MT05HID49IDY0ICovCiAKKy8qIEhpZ2ggcmVzb2x1dGlvbiB0aW1lciByZWxhdGVkIGZ1bmN0aW9ucyAqLworI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKKworLyoKKyAqIEhpZ2ggcmVzb2x1dGlvbiB0aW1lciBlbmFibGVkID8KKyAqLworc3RhdGljIGludCBocnRpbWVyX2hyZXNfZW5hYmxlZCBfX3JlYWRfbW9zdGx5ICA9IDE7CisKKy8qCisgKiBFbmFibGUgLyBEaXNhYmxlIGhpZ2ggcmVzb2x1dGlvbiBtb2RlCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2hydGltZXJfaHJlcyhjaGFyICpzdHIpCit7CisJaWYgKCFzdHJjbXAoc3RyLCAib2ZmIikpCisJCWhydGltZXJfaHJlc19lbmFibGVkID0gMDsKKwllbHNlIGlmICghc3RyY21wKHN0ciwgIm9uIikpCisJCWhydGltZXJfaHJlc19lbmFibGVkID0gMTsKKwllbHNlCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJoaWdocmVzPSIsIHNldHVwX2hydGltZXJfaHJlcyk7CisKKy8qCisgKiBocnRpbWVyX2hpZ2hfcmVzX2VuYWJsZWQgLSBxdWVyeSwgaWYgdGhlIGhpZ2hyZXMgbW9kZSBpcyBlbmFibGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfaXNfaHJlc19lbmFibGVkKHZvaWQpCit7CisJcmV0dXJuIGhydGltZXJfaHJlc19lbmFibGVkOworfQorCisvKgorICogSXMgdGhlIGhpZ2ggcmVzb2x1dGlvbiBtb2RlIGFjdGl2ZSA/CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfaHJlc19hY3RpdmUodm9pZCkKK3sKKwlyZXR1cm4gX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKS5ocmVzX2FjdGl2ZTsKK30KKworLyoKKyAqIFJlcHJvZ3JhbSB0aGUgZXZlbnQgc291cmNlIHdpdGggY2hlY2tpbmcgYm90aCBxdWV1ZXMgZm9yIHRoZQorICogbmV4dCBldmVudAorICogQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBhbmQgYmFzZS0+bG9jayBoZWxkCisgKi8KK3N0YXRpYyB2b2lkIGhydGltZXJfZm9yY2VfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpjcHVfYmFzZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlID0gY3B1X2Jhc2UtPmNsb2NrX2Jhc2U7CisJa3RpbWVfdCBleHBpcmVzOworCisJY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0ID0gS1RJTUVfTUFYOworCisJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyssIGJhc2UrKykgeworCQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7CisKKwkJaWYgKCFiYXNlLT5maXJzdCkKKwkJCWNvbnRpbnVlOworCQl0aW1lciA9IHJiX2VudHJ5KGJhc2UtPmZpcnN0LCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7CisJCWV4cGlyZXMgPSBrdGltZV9zdWIodGltZXItPmV4cGlyZXMsIGJhc2UtPm9mZnNldCk7CisJCWlmIChleHBpcmVzLnR2NjQgPCBjcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQpCisJCQljcHVfYmFzZS0+ZXhwaXJlc19uZXh0ID0gZXhwaXJlczsKKwl9CisKKwlpZiAoY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0ICE9IEtUSU1FX01BWCkKKwkJdGlja19wcm9ncmFtX2V2ZW50KGNwdV9iYXNlLT5leHBpcmVzX25leHQsIDEpOworfQorCisvKgorICogU2hhcmVkIHJlcHJvZ3JhbW1pbmcgZm9yIGNsb2NrX3JlYWx0aW1lIGFuZCBjbG9ja19tb25vdG9uaWMKKyAqCisgKiBXaGVuIGEgdGltZXIgaXMgZW5xdWV1ZWQgYW5kIGV4cGlyZXMgZWFybGllciB0aGFuIHRoZSBhbHJlYWR5IGVucXVldWVkCisgKiB0aW1lcnMsIHdlIGhhdmUgdG8gY2hlY2ssIHdoZXRoZXIgaXQgZXhwaXJlcyBlYXJsaWVyIHRoYW4gdGhlIHRpbWVyIGZvcgorICogd2hpY2ggdGhlIGNsb2NrIGV2ZW50IGRldmljZSB3YXMgYXJtZWQuCisgKgorICogQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBhbmQgYmFzZS0+Y3B1X2Jhc2UubG9jayBoZWxkCisgKi8KK3N0YXRpYyBpbnQgaHJ0aW1lcl9yZXByb2dyYW0oc3RydWN0IGhydGltZXIgKnRpbWVyLAorCQkJICAgICBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlKQoreworCWt0aW1lX3QgKmV4cGlyZXNfbmV4dCA9ICZfX2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpLmV4cGlyZXNfbmV4dDsKKwlrdGltZV90IGV4cGlyZXMgPSBrdGltZV9zdWIodGltZXItPmV4cGlyZXMsIGJhc2UtPm9mZnNldCk7CisJaW50IHJlczsKKworCS8qCisJICogV2hlbiB0aGUgY2FsbGJhY2sgaXMgcnVubmluZywgd2UgZG8gbm90IHJlcHJvZ3JhbSB0aGUgY2xvY2sgZXZlbnQKKwkgKiBkZXZpY2UuIFRoZSB0aW1lciBjYWxsYmFjayBpcyBlaXRoZXIgcnVubmluZyBvbiBhIGRpZmZlcmVudCBDUFUgb3IKKwkgKiB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgaW4gdGhlIGhydGltZXJfaW50ZXJ1cHQgY29udGV4dC4gVGhlCisJICogcmVwcm9ncmFtbWluZyBpcyBoYW5kbGVkIGVpdGhlciBieSB0aGUgc29mdGlycSwgd2hpY2ggY2FsbGVkIHRoZQorCSAqIGNhbGxiYWNrIG9yIGF0IHRoZSBlbmQgb2YgdGhlIGhydGltZXJfaW50ZXJydXB0LgorCSAqLworCWlmIChocnRpbWVyX2NhbGxiYWNrX3J1bm5pbmcodGltZXIpKQorCQlyZXR1cm4gMDsKKworCWlmIChleHBpcmVzLnR2NjQgPj0gZXhwaXJlc19uZXh0LT50djY0KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ2xvY2tldmVudHMgcmV0dXJucyAtRVRJTUUsIHdoZW4gdGhlIGV2ZW50IHdhcyBpbiB0aGUgcGFzdC4KKwkgKi8KKwlyZXMgPSB0aWNrX3Byb2dyYW1fZXZlbnQoZXhwaXJlcywgMCk7CisJaWYgKCFJU19FUlJfVkFMVUUocmVzKSkKKwkJKmV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7CisJcmV0dXJuIHJlczsKK30KKworCisvKgorICogUmV0cmlnZ2VyIG5leHQgZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGNsb2NrIHdhcyBzZXQKKyAqCisgKiBDYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIHZpYSBvbl9lYWNoX2NwdSgpCisgKi8KK3N0YXRpYyB2b2lkIHJldHJpZ2dlcl9uZXh0X2V2ZW50KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqYmFzZTsKKwlzdHJ1Y3QgdGltZXNwZWMgcmVhbHRpbWVfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgc2VxOworCisJaWYgKCFocnRpbWVyX2hyZXNfYWN0aXZlKCkpCisJCXJldHVybjsKKworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CisJCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZyZWFsdGltZV9vZmZzZXQsCisJCQkJCS13YWxsX3RvX21vbm90b25pYy50dl9zZWMsCisJCQkJCS13YWxsX3RvX21vbm90b25pYy50dl9uc2VjKTsKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKKworCWJhc2UgPSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKKworCS8qIEFkanVzdCBDTE9DS19SRUFMVElNRSBvZmZzZXQgKi8KKwlzcGluX2xvY2soJmJhc2UtPmxvY2spOworCWJhc2UtPmNsb2NrX2Jhc2VbQ0xPQ0tfUkVBTFRJTUVdLm9mZnNldCA9CisJCXRpbWVzcGVjX3RvX2t0aW1lKHJlYWx0aW1lX29mZnNldCk7CisKKwlocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShiYXNlKTsKKwlzcGluX3VubG9jaygmYmFzZS0+bG9jayk7Cit9CisKKy8qCisgKiBDbG9jayByZWFsdGltZSB3YXMgc2V0CisgKgorICogQ2hhbmdlIHRoZSBvZmZzZXQgb2YgdGhlIHJlYWx0aW1lIGNsb2NrIHZzLiB0aGUgbW9ub3RvbmljCisgKiBjbG9jay4KKyAqCisgKiBXZSBtaWdodCBoYXZlIHRvIHJlcHJvZ3JhbSB0aGUgaGlnaCByZXNvbHV0aW9uIHRpbWVyIGludGVycnVwdC4gT24KKyAqIFNNUCB3ZSBjYWxsIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZSB0byByZXRyaWdnZXIgX2FsbF8gaGlnaAorICogcmVzb2x1dGlvbiB0aW1lciBpbnRlcnJ1cHRzLiBPbiBVUCB3ZSBqdXN0IGRpc2FibGUgaW50ZXJydXB0cyBhbmQKKyAqIGNhbGwgdGhlIGhpZ2ggcmVzb2x1dGlvbiBpbnRlcnJ1cHQgY29kZS4KKyAqLwordm9pZCBjbG9ja193YXNfc2V0KHZvaWQpCit7CisJLyogUmV0cmlnZ2VyIHRoZSBDUFUgbG9jYWwgZXZlbnRzIGV2ZXJ5d2hlcmUgKi8KKwlvbl9lYWNoX2NwdShyZXRyaWdnZXJfbmV4dF9ldmVudCwgTlVMTCwgMCwgMSk7Cit9CisKKy8qCisgKiBDaGVjaywgd2hldGhlciB0aGUgdGltZXIgaXMgb24gdGhlIGNhbGxiYWNrIHBlbmRpbmcgbGlzdAorICovCitzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2NiX3BlbmRpbmcoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXJldHVybiB0aW1lci0+c3RhdGUgJiBIUlRJTUVSX1NUQVRFX1BFTkRJTkc7Cit9CisKKy8qCisgKiBSZW1vdmUgYSB0aW1lciBmcm9tIHRoZSBjYWxsYmFjayBwZW5kaW5nIGxpc3QKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfcmVtb3ZlX2NiX3BlbmRpbmcoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCWxpc3RfZGVsX2luaXQoJnRpbWVyLT5jYl9lbnRyeSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBoaWdoIHJlc29sdXRpb24gcmVsYXRlZCBwYXJ0cyBvZiBjcHVfYmFzZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9pbml0X2hyZXMoc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmJhc2UpCit7CisJYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgPSBLVElNRV9NQVg7CisJYmFzZS0+aHJlc19hY3RpdmUgPSAwOworCUlOSVRfTElTVF9IRUFEKCZiYXNlLT5jYl9wZW5kaW5nKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGhpZ2ggcmVzb2x1dGlvbiByZWxhdGVkIHBhcnRzIG9mIGEgaHJ0aW1lcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9pbml0X3RpbWVyX2hyZXMoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCUlOSVRfTElTVF9IRUFEKCZ0aW1lci0+Y2JfZW50cnkpOworfQorCisvKgorICogV2hlbiBIaWdoIHJlc29sdXRpb24gdGltZXJzIGFyZSBhY3RpdmUsIHRyeSB0byByZXByb2dyYW0uIE5vdGUsIHRoYXQgaW4gY2FzZQorICogdGhlIHN0YXRlIGhhcyBIUlRJTUVSX1NUQVRFX0NBTExCQUNLIHNldCwgbm8gcmVwcm9ncmFtbWluZyBhbmQgbm8gZXhwaXJ5CisgKiBjaGVjayBoYXBwZW5zLiBUaGUgdGltZXIgZ2V0cyBlbnF1ZXVlZCBpbnRvIHRoZSByYnRyZWUuIFRoZSByZXByb2dyYW1taW5nCisgKiBhbmQgZXhwaXJ5IGNoZWNrIGlzIGRvbmUgaW4gdGhlIGhydGltZXJfaW50ZXJydXB0IG9yIGluIHRoZSBzb2Z0aXJxLgorICovCitzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2VucXVldWVfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyICp0aW1lciwKKwkJCQkJICAgIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UpCit7CisJaWYgKGJhc2UtPmNwdV9iYXNlLT5ocmVzX2FjdGl2ZSAmJiBocnRpbWVyX3JlcHJvZ3JhbSh0aW1lciwgYmFzZSkpIHsKKworCQkvKiBUaW1lciBpcyBleHBpcmVkLCBhY3QgdXBvbiB0aGUgY2FsbGJhY2sgbW9kZSAqLworCQlzd2l0Y2godGltZXItPmNiX21vZGUpIHsKKwkJY2FzZSBIUlRJTUVSX0NCX0lSUVNBRkVfTk9fUkVTVEFSVDoKKwkJCS8qCisJCQkgKiBXZSBjYW4gY2FsbCB0aGUgY2FsbGJhY2sgZnJvbSBoZXJlLiBObyByZXN0YXJ0CisJCQkgKiBoYXBwZW5zLCBzbyBubyBkYW5nZXIgb2YgcmVjdXJzaW9uCisJCQkgKi8KKwkJCUJVR19PTih0aW1lci0+ZnVuY3Rpb24odGltZXIpICE9IEhSVElNRVJfTk9SRVNUQVJUKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhSVElNRVJfQ0JfSVJRU0FGRV9OT19TT0ZUSVJROgorCQkJLyoKKwkJCSAqIFRoaXMgaXMgc29sZWx5IGZvciB0aGUgc2NoZWQgdGljayBlbXVsYXRpb24gd2l0aAorCQkJICogZHluYW1pYyB0aWNrIHN1cHBvcnQgdG8gZW5zdXJlIHRoYXQgd2UgZG8gbm90CisJCQkgKiByZXN0YXJ0IHRoZSB0aWNrIHJpZ2h0IG9uIHRoZSBlZGdlIGFuZCBlbmQgdXAgd2l0aAorCQkJICogdGhlIHRpY2sgdGltZXIgaW4gdGhlIHNvZnRpcnEgISBUaGUgY2FsbGluZyBzaXRlCisJCQkgKiB0YWtlcyBjYXJlIG9mIHRoaXMuCisJCQkgKi8KKwkJCXJldHVybiAxOworCQljYXNlIEhSVElNRVJfQ0JfSVJRU0FGRToKKwkJY2FzZSBIUlRJTUVSX0NCX1NPRlRJUlE6CisJCQkvKgorCQkJICogTW92ZSBldmVyeXRoaW5nIGVsc2UgaW50byB0aGUgc29mdGlycSBwZW5kaW5nIGxpc3QgIQorCQkJICovCisJCQlsaXN0X2FkZF90YWlsKCZ0aW1lci0+Y2JfZW50cnksCisJCQkJICAgICAgJmJhc2UtPmNwdV9iYXNlLT5jYl9wZW5kaW5nKTsKKwkJCXRpbWVyLT5zdGF0ZSA9IEhSVElNRVJfU1RBVEVfUEVORElORzsKKwkJCXJhaXNlX3NvZnRpcnEoSFJUSU1FUl9TT0ZUSVJRKTsKKwkJCXJldHVybiAxOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTd2l0Y2ggdG8gaGlnaCByZXNvbHV0aW9uIG1vZGUKKyAqLworc3RhdGljIHZvaWQgaHJ0aW1lcl9zd2l0Y2hfdG9faHJlcyh2b2lkKQoreworCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpiYXNlID0gJl9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChiYXNlLT5ocmVzX2FjdGl2ZSkKKwkJcmV0dXJuOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaWYgKHRpY2tfaW5pdF9oaWdocmVzKCkpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm47CisJfQorCWJhc2UtPmhyZXNfYWN0aXZlID0gMTsKKwliYXNlLT5jbG9ja19iYXNlW0NMT0NLX1JFQUxUSU1FXS5yZXNvbHV0aW9uID0gS1RJTUVfSElHSF9SRVM7CisJYmFzZS0+Y2xvY2tfYmFzZVtDTE9DS19NT05PVE9OSUNdLnJlc29sdXRpb24gPSBLVElNRV9ISUdIX1JFUzsKKworCXRpY2tfc2V0dXBfc2NoZWRfdGltZXIoKTsKKworCS8qICJSZXRyaWdnZXIiIHRoZSBpbnRlcnJ1cHQgdG8gZ2V0IHRoaW5ncyBnb2luZyAqLworCXJldHJpZ2dlcl9uZXh0X2V2ZW50KE5VTEwpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBoaWdoIHJlc29sdXRpb24gbW9kZSBvbiBDUFUgJWRcbiIsCisJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfaHJlc19hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9pc19ocmVzX2VuYWJsZWQodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfc3dpdGNoX3RvX2hyZXModm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmJhc2UpIHsgfQorc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9lbnF1ZXVlX3JlcHJvZ3JhbShzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsCisJCQkJCSAgICBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9jYl9wZW5kaW5nKHN0cnVjdCBocnRpbWVyICp0aW1lcikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfcmVtb3ZlX2NiX3BlbmRpbmcoc3RydWN0IGhydGltZXIgKnRpbWVyKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBocnRpbWVyX2luaXRfaHJlcyhzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqYmFzZSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9pbml0X3RpbWVyX2hyZXMoc3RydWN0IGhydGltZXIgKnRpbWVyKSB7IH0KKworI2VuZGlmIC8qIENPTkZJR19ISUdIX1JFU19USU1FUlMgKi8KKworI2lmZGVmIENPTkZJR19USU1FUl9TVEFUUwordm9pZCBfX3RpbWVyX3N0YXRzX2hydGltZXJfc2V0X3N0YXJ0X2luZm8oc3RydWN0IGhydGltZXIgKnRpbWVyLCB2b2lkICphZGRyKQoreworCWlmICh0aW1lci0+c3RhcnRfc2l0ZSkKKwkJcmV0dXJuOworCisJdGltZXItPnN0YXJ0X3NpdGUgPSBhZGRyOworCW1lbWNweSh0aW1lci0+c3RhcnRfY29tbSwgY3VycmVudC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJdGltZXItPnN0YXJ0X3BpZCA9IGN1cnJlbnQtPnBpZDsKK30KKyNlbmRpZgorCiAvKgogICogQ291bnRlcnBhcnQgdG8gbG9ja190aW1lcl9iYXNlIGFib3ZlOgogICovCiBzdGF0aWMgaW5saW5lCiB2b2lkIHVubG9ja19ocnRpbWVyX2Jhc2UoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyLCB1bnNpZ25lZCBsb25nICpmbGFncykKIHsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lci0+YmFzZS0+bG9jaywgKmZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lci0+YmFzZS0+Y3B1X2Jhc2UtPmxvY2ssICpmbGFncyk7CiB9CiAKIC8qKgpAQCAtMzQyLDcgKzY1Myw4IEBACiAgKiBUaGUgdGltZXIgaXMgaW5zZXJ0ZWQgaW4gZXhwaXJ5IG9yZGVyLiBJbnNlcnRpb24gaW50byB0aGUKICAqIHJlZCBibGFjayB0cmVlIGlzIE8obG9nKG4pKS4gTXVzdCBob2xkIHRoZSBiYXNlIGxvY2suCiAgKi8KLXN0YXRpYyB2b2lkIGVucXVldWVfaHJ0aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIHN0cnVjdCBocnRpbWVyX2Jhc2UgKmJhc2UpCitzdGF0aWMgdm9pZCBlbnF1ZXVlX2hydGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyLAorCQkJICAgIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UsIGludCByZXByb2dyYW0pCiB7CiAJc3RydWN0IHJiX25vZGUgKipsaW5rID0gJmJhc2UtPmFjdGl2ZS5yYl9ub2RlOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwpAQCAtMzY4LDM5ICs2ODAsODUgQEAKIAkgKiBJbnNlcnQgdGhlIHRpbWVyIHRvIHRoZSByYnRyZWUgYW5kIGNoZWNrIHdoZXRoZXIgaXQKIAkgKiByZXBsYWNlcyB0aGUgZmlyc3QgcGVuZGluZyB0aW1lcgogCSAqLworCWlmICghYmFzZS0+Zmlyc3QgfHwgdGltZXItPmV4cGlyZXMudHY2NCA8CisJICAgIHJiX2VudHJ5KGJhc2UtPmZpcnN0LCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSktPmV4cGlyZXMudHY2NCkgeworCQkvKgorCQkgKiBSZXByb2dyYW0gdGhlIGNsb2NrIGV2ZW50IGRldmljZS4gV2hlbiB0aGUgdGltZXIgaXMgYWxyZWFkeQorCQkgKiBleHBpcmVkIGhydGltZXJfZW5xdWV1ZV9yZXByb2dyYW0gaGFzIGVpdGhlciBjYWxsZWQgdGhlCisJCSAqIGNhbGxiYWNrIG9yIGFkZGVkIGl0IHRvIHRoZSBwZW5kaW5nIGxpc3QgYW5kIHJhaXNlZCB0aGUKKwkJICogc29mdGlycS4KKwkJICoKKwkJICogVGhpcyBpcyBhIE5PUCBmb3IgIUhJR0hSRVMKKwkJICovCisJCWlmIChyZXByb2dyYW0gJiYgaHJ0aW1lcl9lbnF1ZXVlX3JlcHJvZ3JhbSh0aW1lciwgYmFzZSkpCisJCQlyZXR1cm47CisKKwkJYmFzZS0+Zmlyc3QgPSAmdGltZXItPm5vZGU7CisJfQorCiAJcmJfbGlua19ub2RlKCZ0aW1lci0+bm9kZSwgcGFyZW50LCBsaW5rKTsKIAlyYl9pbnNlcnRfY29sb3IoJnRpbWVyLT5ub2RlLCAmYmFzZS0+YWN0aXZlKTsKLQotCWlmICghYmFzZS0+Zmlyc3QgfHwgdGltZXItPmV4cGlyZXMudHY2NCA8Ci0JICAgIHJiX2VudHJ5KGJhc2UtPmZpcnN0LCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSktPmV4cGlyZXMudHY2NCkKLQkJYmFzZS0+Zmlyc3QgPSAmdGltZXItPm5vZGU7CisJLyoKKwkgKiBIUlRJTUVSX1NUQVRFX0VOUVVFVUVEIGlzIG9yJ2VkIHRvIHRoZSBjdXJyZW50IHN0YXRlIHRvIHByZXNlcnZlIHRoZQorCSAqIHN0YXRlIG9mIGEgcG9zc2libHkgcnVubmluZyBjYWxsYmFjay4KKwkgKi8KKwl0aW1lci0+c3RhdGUgfD0gSFJUSU1FUl9TVEFURV9FTlFVRVVFRDsKIH0KIAogLyoKICAqIF9fcmVtb3ZlX2hydGltZXIgLSBpbnRlcm5hbCBmdW5jdGlvbiB0byByZW1vdmUgYSB0aW1lcgogICoKICAqIENhbGxlciBtdXN0IGhvbGQgdGhlIGJhc2UgbG9jay4KKyAqCisgKiBIaWdoIHJlc29sdXRpb24gdGltZXIgbW9kZSByZXByb2dyYW1zIHRoZSBjbG9jayBldmVudCBkZXZpY2Ugd2hlbiB0aGUKKyAqIHRpbWVyIGlzIHRoZSBvbmUgd2hpY2ggZXhwaXJlcyBuZXh0LiBUaGUgY2FsbGVyIGNhbiBkaXNhYmxlIHRoaXMgYnkgc2V0dGluZworICogcmVwcm9ncmFtIHRvIHplcm8uIFRoaXMgaXMgdXNlZnVsLCB3aGVuIHRoZSBjb250ZXh0IGRvZXMgYSByZXByb2dyYW1taW5nCisgKiBhbnl3YXkgKGUuZy4gdGltZXIgaW50ZXJydXB0KQogICovCi1zdGF0aWMgdm9pZCBfX3JlbW92ZV9ocnRpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lciwgc3RydWN0IGhydGltZXJfYmFzZSAqYmFzZSkKK3N0YXRpYyB2b2lkIF9fcmVtb3ZlX2hydGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyLAorCQkJICAgICBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlLAorCQkJICAgICB1bnNpZ25lZCBsb25nIG5ld3N0YXRlLCBpbnQgcmVwcm9ncmFtKQogewotCS8qCi0JICogUmVtb3ZlIHRoZSB0aW1lciBmcm9tIHRoZSByYnRyZWUgYW5kIHJlcGxhY2UgdGhlCi0JICogZmlyc3QgZW50cnkgcG9pbnRlciBpZiBuZWNlc3NhcnkuCi0JICovCi0JaWYgKGJhc2UtPmZpcnN0ID09ICZ0aW1lci0+bm9kZSkKLQkJYmFzZS0+Zmlyc3QgPSByYl9uZXh0KCZ0aW1lci0+bm9kZSk7Ci0JcmJfZXJhc2UoJnRpbWVyLT5ub2RlLCAmYmFzZS0+YWN0aXZlKTsKLQlyYl9zZXRfcGFyZW50KCZ0aW1lci0+bm9kZSwgJnRpbWVyLT5ub2RlKTsKKwkvKiBIaWdoIHJlcy4gY2FsbGJhY2sgbGlzdC4gTk9QIGZvciAhSElHSFJFUyAqLworCWlmIChocnRpbWVyX2NiX3BlbmRpbmcodGltZXIpKQorCQlocnRpbWVyX3JlbW92ZV9jYl9wZW5kaW5nKHRpbWVyKTsKKwllbHNlIHsKKwkJLyoKKwkJICogUmVtb3ZlIHRoZSB0aW1lciBmcm9tIHRoZSByYnRyZWUgYW5kIHJlcGxhY2UgdGhlCisJCSAqIGZpcnN0IGVudHJ5IHBvaW50ZXIgaWYgbmVjZXNzYXJ5LgorCQkgKi8KKwkJaWYgKGJhc2UtPmZpcnN0ID09ICZ0aW1lci0+bm9kZSkgeworCQkJYmFzZS0+Zmlyc3QgPSByYl9uZXh0KCZ0aW1lci0+bm9kZSk7CisJCQkvKiBSZXByb2dyYW0gdGhlIGNsb2NrIGV2ZW50IGRldmljZS4gaWYgZW5hYmxlZCAqLworCQkJaWYgKHJlcHJvZ3JhbSAmJiBocnRpbWVyX2hyZXNfYWN0aXZlKCkpCisJCQkJaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZS0+Y3B1X2Jhc2UpOworCQl9CisJCXJiX2VyYXNlKCZ0aW1lci0+bm9kZSwgJmJhc2UtPmFjdGl2ZSk7CisJfQorCXRpbWVyLT5zdGF0ZSA9IG5ld3N0YXRlOwogfQogCiAvKgogICogcmVtb3ZlIGhydGltZXIsIGNhbGxlZCB3aXRoIGJhc2UgbG9jayBoZWxkCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50Ci1yZW1vdmVfaHJ0aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIHN0cnVjdCBocnRpbWVyX2Jhc2UgKmJhc2UpCityZW1vdmVfaHJ0aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UpCiB7Ci0JaWYgKGhydGltZXJfYWN0aXZlKHRpbWVyKSkgewotCQlfX3JlbW92ZV9ocnRpbWVyKHRpbWVyLCBiYXNlKTsKKwlpZiAoaHJ0aW1lcl9pc19xdWV1ZWQodGltZXIpKSB7CisJCWludCByZXByb2dyYW07CisKKwkJLyoKKwkJICogUmVtb3ZlIHRoZSB0aW1lciBhbmQgZm9yY2UgcmVwcm9ncmFtbWluZyB3aGVuIGhpZ2gKKwkJICogcmVzb2x1dGlvbiBtb2RlIGlzIGFjdGl2ZSBhbmQgdGhlIHRpbWVyIGlzIG9uIHRoZSBjdXJyZW50CisJCSAqIENQVS4gSWYgd2UgcmVtb3ZlIGEgdGltZXIgb24gYW5vdGhlciBDUFUsIHJlcHJvZ3JhbW1pbmcgaXMKKwkJICogc2tpcHBlZC4gVGhlIGludGVycnVwdCBldmVudCBvbiB0aGlzIENQVSBpcyBmaXJlZCBhbmQKKwkJICogcmVwcm9ncmFtbWluZyBoYXBwZW5zIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcyBpcyBhCisJCSAqIHJhcmUgY2FzZSBhbmQgbGVzcyBleHBlbnNpdmUgdGhhbiBhIHNtcCBjYWxsLgorCQkgKi8KKwkJdGltZXJfc3RhdHNfaHJ0aW1lcl9jbGVhcl9zdGFydF9pbmZvKHRpbWVyKTsKKwkJcmVwcm9ncmFtID0gYmFzZS0+Y3B1X2Jhc2UgPT0gJl9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcyk7CisJCV9fcmVtb3ZlX2hydGltZXIodGltZXIsIGJhc2UsIEhSVElNRVJfU1RBVEVfSU5BQ1RJVkUsCisJCQkJIHJlcHJvZ3JhbSk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQxOSw3ICs3NzcsNyBAQAogaW50CiBocnRpbWVyX3N0YXJ0KHN0cnVjdCBocnRpbWVyICp0aW1lciwga3RpbWVfdCB0aW0sIGNvbnN0IGVudW0gaHJ0aW1lcl9tb2RlIG1vZGUpCiB7Ci0Jc3RydWN0IGhydGltZXJfYmFzZSAqYmFzZSwgKm5ld19iYXNlOworCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UsICpuZXdfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKQEAgLTQzMSw3ICs3ODksNyBAQAogCS8qIFN3aXRjaCB0aGUgdGltZXIgYmFzZSwgaWYgbmVjZXNzYXJ5OiAqLwogCW5ld19iYXNlID0gc3dpdGNoX2hydGltZXJfYmFzZSh0aW1lciwgYmFzZSk7CiAKLQlpZiAobW9kZSA9PSBIUlRJTUVSX1JFTCkgeworCWlmIChtb2RlID09IEhSVElNRVJfTU9ERV9SRUwpIHsKIAkJdGltID0ga3RpbWVfYWRkKHRpbSwgbmV3X2Jhc2UtPmdldF90aW1lKCkpOwogCQkvKgogCQkgKiBDT05GSUdfVElNRV9MT1dfUkVTIGlzIGEgdGVtcG9yYXJ5IHdheSBmb3IgYXJjaGl0ZWN0dXJlcwpAQCAtNDQ2LDcgKzgwNCw5IEBACiAJfQogCXRpbWVyLT5leHBpcmVzID0gdGltOwogCi0JZW5xdWV1ZV9ocnRpbWVyKHRpbWVyLCBuZXdfYmFzZSk7CisJdGltZXJfc3RhdHNfaHJ0aW1lcl9zZXRfc3RhcnRfaW5mbyh0aW1lcik7CisKKwllbnF1ZXVlX2hydGltZXIodGltZXIsIG5ld19iYXNlLCBiYXNlID09IG5ld19iYXNlKTsKIAogCXVubG9ja19ocnRpbWVyX2Jhc2UodGltZXIsICZmbGFncyk7CiAKQEAgLTQ2NiwxMyArODI2LDEzIEBACiAgKi8KIGludCBocnRpbWVyX3RyeV90b19jYW5jZWwoc3RydWN0IGhydGltZXIgKnRpbWVyKQogewotCXN0cnVjdCBocnRpbWVyX2Jhc2UgKmJhc2U7CisJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAtMTsKIAogCWJhc2UgPSBsb2NrX2hydGltZXJfYmFzZSh0aW1lciwgJmZsYWdzKTsKIAotCWlmIChiYXNlLT5jdXJyX3RpbWVyICE9IHRpbWVyKQorCWlmICghaHJ0aW1lcl9jYWxsYmFja19ydW5uaW5nKHRpbWVyKSkKIAkJcmV0ID0gcmVtb3ZlX2hydGltZXIodGltZXIsIGJhc2UpOwogCiAJdW5sb2NrX2hydGltZXJfYmFzZSh0aW1lciwgJmZsYWdzKTsKQEAgLTUwOCwxOSArODY4LDE5IEBACiAgKi8KIGt0aW1lX3QgaHJ0aW1lcl9nZXRfcmVtYWluaW5nKGNvbnN0IHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKLQlzdHJ1Y3QgaHJ0aW1lcl9iYXNlICpiYXNlOworCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlrdGltZV90IHJlbTsKIAogCWJhc2UgPSBsb2NrX2hydGltZXJfYmFzZSh0aW1lciwgJmZsYWdzKTsKLQlyZW0gPSBrdGltZV9zdWIodGltZXItPmV4cGlyZXMsIHRpbWVyLT5iYXNlLT5nZXRfdGltZSgpKTsKKwlyZW0gPSBrdGltZV9zdWIodGltZXItPmV4cGlyZXMsIGJhc2UtPmdldF90aW1lKCkpOwogCXVubG9ja19ocnRpbWVyX2Jhc2UodGltZXIsICZmbGFncyk7CiAKIAlyZXR1cm4gcmVtOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9nZXRfcmVtYWluaW5nKTsKIAotI2lmZGVmIENPTkZJR19OT19JRExFX0haCisjaWYgZGVmaW5lZChDT05GSUdfTk9fSURMRV9IWikgfHwgZGVmaW5lZChDT05GSUdfTk9fSFopCiAvKioKICAqIGhydGltZXJfZ2V0X25leHRfZXZlbnQgLSBnZXQgdGhlIHRpbWUgdW50aWwgbmV4dCBleHBpcnkgZXZlbnQKICAqCkBAIC01MjksMjYgKzg4OSwzMSBAQAogICovCiBrdGltZV90IGhydGltZXJfZ2V0X25leHRfZXZlbnQodm9pZCkKIHsKLQlzdHJ1Y3QgaHJ0aW1lcl9iYXNlICpiYXNlID0gX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKKwlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UgPSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKKwlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlID0gY3B1X2Jhc2UtPmNsb2NrX2Jhc2U7CiAJa3RpbWVfdCBkZWx0YSwgbWluZGVsdGEgPSB7IC50djY0ID0gS1RJTUVfTUFYIH07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFJUSU1FUl9CQVNFUzsgaSsrLCBiYXNlKyspIHsKLQkJc3RydWN0IGhydGltZXIgKnRpbWVyOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVfYmFzZS0+bG9jaywgZmxhZ3MpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5sb2NrLCBmbGFncyk7Ci0JCWlmICghYmFzZS0+Zmlyc3QpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKLQkJCWNvbnRpbnVlOworCWlmICghaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrLCBiYXNlKyspIHsKKwkJCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKKworCQkJaWYgKCFiYXNlLT5maXJzdCkKKwkJCQljb250aW51ZTsKKworCQkJdGltZXIgPSByYl9lbnRyeShiYXNlLT5maXJzdCwgc3RydWN0IGhydGltZXIsIG5vZGUpOworCQkJZGVsdGEudHY2NCA9IHRpbWVyLT5leHBpcmVzLnR2NjQ7CisJCQlkZWx0YSA9IGt0aW1lX3N1YihkZWx0YSwgYmFzZS0+Z2V0X3RpbWUoKSk7CisJCQlpZiAoZGVsdGEudHY2NCA8IG1pbmRlbHRhLnR2NjQpCisJCQkJbWluZGVsdGEudHY2NCA9IGRlbHRhLnR2NjQ7CiAJCX0KLQkJdGltZXIgPSByYl9lbnRyeShiYXNlLT5maXJzdCwgc3RydWN0IGhydGltZXIsIG5vZGUpOwotCQlkZWx0YS50djY0ID0gdGltZXItPmV4cGlyZXMudHY2NDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+bG9jaywgZmxhZ3MpOwotCQlkZWx0YSA9IGt0aW1lX3N1YihkZWx0YSwgYmFzZS0+Z2V0X3RpbWUoKSk7Ci0JCWlmIChkZWx0YS50djY0IDwgbWluZGVsdGEudHY2NCkKLQkJCW1pbmRlbHRhLnR2NjQgPSBkZWx0YS50djY0OwogCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CisKIAlpZiAobWluZGVsdGEudHY2NCA8IDApCiAJCW1pbmRlbHRhLnR2NjQgPSAwOwogCXJldHVybiBtaW5kZWx0YTsKQEAgLTU2NCwxNyArOTI5LDIzIEBACiB2b2lkIGhydGltZXJfaW5pdChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGNsb2NraWRfdCBjbG9ja19pZCwKIAkJICBlbnVtIGhydGltZXJfbW9kZSBtb2RlKQogewotCXN0cnVjdCBocnRpbWVyX2Jhc2UgKmJhc2VzOworCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpjcHVfYmFzZTsKIAogCW1lbXNldCh0aW1lciwgMCwgc2l6ZW9mKHN0cnVjdCBocnRpbWVyKSk7CiAKLQliYXNlcyA9IF9fcmF3X2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOworCWNwdV9iYXNlID0gJl9fcmF3X2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCi0JaWYgKGNsb2NrX2lkID09IENMT0NLX1JFQUxUSU1FICYmIG1vZGUgIT0gSFJUSU1FUl9BQlMpCisJaWYgKGNsb2NrX2lkID09IENMT0NLX1JFQUxUSU1FICYmIG1vZGUgIT0gSFJUSU1FUl9NT0RFX0FCUykKIAkJY2xvY2tfaWQgPSBDTE9DS19NT05PVE9OSUM7CiAKLQl0aW1lci0+YmFzZSA9ICZiYXNlc1tjbG9ja19pZF07Ci0JcmJfc2V0X3BhcmVudCgmdGltZXItPm5vZGUsICZ0aW1lci0+bm9kZSk7CisJdGltZXItPmJhc2UgPSAmY3B1X2Jhc2UtPmNsb2NrX2Jhc2VbY2xvY2tfaWRdOworCWhydGltZXJfaW5pdF90aW1lcl9ocmVzKHRpbWVyKTsKKworI2lmZGVmIENPTkZJR19USU1FUl9TVEFUUworCXRpbWVyLT5zdGFydF9zaXRlID0gTlVMTDsKKwl0aW1lci0+c3RhcnRfcGlkID0gLTE7CisJbWVtc2V0KHRpbWVyLT5zdGFydF9jb21tLCAwLCBUQVNLX0NPTU1fTEVOKTsKKyNlbmRpZgogfQogRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9pbml0KTsKIApAQCAtNTg4LDIxICs5NTksMTU5IEBACiAgKi8KIGludCBocnRpbWVyX2dldF9yZXMoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQogewotCXN0cnVjdCBocnRpbWVyX2Jhc2UgKmJhc2VzOworCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpjcHVfYmFzZTsKIAotCWJhc2VzID0gX19yYXdfZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcyk7Ci0JKnRwID0ga3RpbWVfdG9fdGltZXNwZWMoYmFzZXNbd2hpY2hfY2xvY2tdLnJlc29sdXRpb24pOworCWNwdV9iYXNlID0gJl9fcmF3X2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOworCSp0cCA9IGt0aW1lX3RvX3RpbWVzcGVjKGNwdV9iYXNlLT5jbG9ja19iYXNlW3doaWNoX2Nsb2NrXS5yZXNvbHV0aW9uKTsKIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9nZXRfcmVzKTsKIAorI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKKworLyoKKyAqIEhpZ2ggcmVzb2x1dGlvbiB0aW1lciBpbnRlcnJ1cHQKKyAqIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKKyAqLwordm9pZCBocnRpbWVyX2ludGVycnVwdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlID0gJl9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcyk7CisJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZTsKKwlrdGltZV90IGV4cGlyZXNfbmV4dCwgbm93OworCWludCBpLCByYWlzZSA9IDA7CisKKwlCVUdfT04oIWNwdV9iYXNlLT5ocmVzX2FjdGl2ZSk7CisJY3B1X2Jhc2UtPm5yX2V2ZW50cysrOworCWRldi0+bmV4dF9ldmVudC50djY0ID0gS1RJTUVfTUFYOworCisgcmV0cnk6CisJbm93ID0ga3RpbWVfZ2V0KCk7CisKKwlleHBpcmVzX25leHQudHY2NCA9IEtUSU1FX01BWDsKKworCWJhc2UgPSBjcHVfYmFzZS0+Y2xvY2tfYmFzZTsKKworCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrKSB7CisJCWt0aW1lX3QgYmFzZW5vdzsKKwkJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwkJc3Bpbl9sb2NrKCZjcHVfYmFzZS0+bG9jayk7CisKKwkJYmFzZW5vdyA9IGt0aW1lX2FkZChub3csIGJhc2UtPm9mZnNldCk7CisKKwkJd2hpbGUgKChub2RlID0gYmFzZS0+Zmlyc3QpKSB7CisJCQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7CisKKwkJCXRpbWVyID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhydGltZXIsIG5vZGUpOworCisJCQlpZiAoYmFzZW5vdy50djY0IDwgdGltZXItPmV4cGlyZXMudHY2NCkgeworCQkJCWt0aW1lX3QgZXhwaXJlczsKKworCQkJCWV4cGlyZXMgPSBrdGltZV9zdWIodGltZXItPmV4cGlyZXMsCisJCQkJCQkgICAgYmFzZS0+b2Zmc2V0KTsKKwkJCQlpZiAoZXhwaXJlcy50djY0IDwgZXhwaXJlc19uZXh0LnR2NjQpCisJCQkJCWV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIE1vdmUgc29mdGlycSBjYWxsYmFja3MgdG8gdGhlIHBlbmRpbmcgbGlzdCAqLworCQkJaWYgKHRpbWVyLT5jYl9tb2RlID09IEhSVElNRVJfQ0JfU09GVElSUSkgeworCQkJCV9fcmVtb3ZlX2hydGltZXIodGltZXIsIGJhc2UsCisJCQkJCQkgSFJUSU1FUl9TVEFURV9QRU5ESU5HLCAwKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZ0aW1lci0+Y2JfZW50cnksCisJCQkJCSAgICAgICZiYXNlLT5jcHVfYmFzZS0+Y2JfcGVuZGluZyk7CisJCQkJcmFpc2UgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlfX3JlbW92ZV9ocnRpbWVyKHRpbWVyLCBiYXNlLAorCQkJCQkgSFJUSU1FUl9TVEFURV9DQUxMQkFDSywgMCk7CisJCQl0aW1lcl9zdGF0c19hY2NvdW50X2hydGltZXIodGltZXIpOworCisJCQkvKgorCQkJICogTm90ZTogV2UgY2xlYXIgdGhlIENBTExCQUNLIGJpdCBhZnRlcgorCQkJICogZW5xdWV1ZV9ocnRpbWVyIHRvIGF2b2lkIHJlcHJvZ3JhbW1pbmcgb2YKKwkJCSAqIHRoZSBldmVudCBoYXJkd2FyZS4gVGhpcyBoYXBwZW5zIGF0IHRoZSBlbmQKKwkJCSAqIG9mIHRoaXMgZnVuY3Rpb24gYW55d2F5LgorCQkJICovCisJCQlpZiAodGltZXItPmZ1bmN0aW9uKHRpbWVyKSAhPSBIUlRJTUVSX05PUkVTVEFSVCkgeworCQkJCUJVR19PTih0aW1lci0+c3RhdGUgIT0gSFJUSU1FUl9TVEFURV9DQUxMQkFDSyk7CisJCQkJZW5xdWV1ZV9ocnRpbWVyKHRpbWVyLCBiYXNlLCAwKTsKKwkJCX0KKwkJCXRpbWVyLT5zdGF0ZSAmPSB+SFJUSU1FUl9TVEFURV9DQUxMQkFDSzsKKwkJfQorCQlzcGluX3VubG9jaygmY3B1X2Jhc2UtPmxvY2spOworCQliYXNlKys7CisJfQorCisJY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dCA9IGV4cGlyZXNfbmV4dDsKKworCS8qIFJlcHJvZ3JhbW1pbmcgbmVjZXNzYXJ5ID8gKi8KKwlpZiAoZXhwaXJlc19uZXh0LnR2NjQgIT0gS1RJTUVfTUFYKSB7CisJCWlmICh0aWNrX3Byb2dyYW1fZXZlbnQoZXhwaXJlc19uZXh0LCAwKSkKKwkJCWdvdG8gcmV0cnk7CisJfQorCisJLyogUmFpc2Ugc29mdGlycSA/ICovCisJaWYgKHJhaXNlKQorCQlyYWlzZV9zb2Z0aXJxKEhSVElNRVJfU09GVElSUSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9ocnRpbWVyX3NvZnRpcnEoc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoKQoreworCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpjcHVfYmFzZSA9ICZfX2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOworCisJc3Bpbl9sb2NrX2lycSgmY3B1X2Jhc2UtPmxvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjcHVfYmFzZS0+Y2JfcGVuZGluZykpIHsKKwkJZW51bSBocnRpbWVyX3Jlc3RhcnQgKCpmbikoc3RydWN0IGhydGltZXIgKik7CisJCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKKwkJaW50IHJlc3RhcnQ7CisKKwkJdGltZXIgPSBsaXN0X2VudHJ5KGNwdV9iYXNlLT5jYl9wZW5kaW5nLm5leHQsCisJCQkJICAgc3RydWN0IGhydGltZXIsIGNiX2VudHJ5KTsKKworCQl0aW1lcl9zdGF0c19hY2NvdW50X2hydGltZXIodGltZXIpOworCisJCWZuID0gdGltZXItPmZ1bmN0aW9uOworCQlfX3JlbW92ZV9ocnRpbWVyKHRpbWVyLCB0aW1lci0+YmFzZSwgSFJUSU1FUl9TVEFURV9DQUxMQkFDSywgMCk7CisJCXNwaW5fdW5sb2NrX2lycSgmY3B1X2Jhc2UtPmxvY2spOworCisJCXJlc3RhcnQgPSBmbih0aW1lcik7CisKKwkJc3Bpbl9sb2NrX2lycSgmY3B1X2Jhc2UtPmxvY2spOworCisJCXRpbWVyLT5zdGF0ZSAmPSB+SFJUSU1FUl9TVEFURV9DQUxMQkFDSzsKKwkJaWYgKHJlc3RhcnQgPT0gSFJUSU1FUl9SRVNUQVJUKSB7CisJCQlCVUdfT04oaHJ0aW1lcl9hY3RpdmUodGltZXIpKTsKKwkJCS8qCisJCQkgKiBFbnF1ZXVlIHRoZSB0aW1lciwgYWxsb3cgcmVwcm9ncmFtbWluZyBvZiB0aGUgZXZlbnQKKwkJCSAqIGRldmljZQorCQkJICovCisJCQllbnF1ZXVlX2hydGltZXIodGltZXIsIHRpbWVyLT5iYXNlLCAxKTsKKwkJfSBlbHNlIGlmIChocnRpbWVyX2FjdGl2ZSh0aW1lcikpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgdGltZXIgd2FzIHJlYXJtZWQgb24gYW5vdGhlciBDUFUsIHJlcHJvZ3JhbQorCQkJICogdGhlIGV2ZW50IGRldmljZS4KKwkJCSAqLworCQkJaWYgKHRpbWVyLT5iYXNlLT5maXJzdCA9PSAmdGltZXItPm5vZGUpCisJCQkJaHJ0aW1lcl9yZXByb2dyYW0odGltZXIsIHRpbWVyLT5iYXNlKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEoJmNwdV9iYXNlLT5sb2NrKTsKK30KKworI2VuZGlmCS8qIENPTkZJR19ISUdIX1JFU19USU1FUlMgKi8KKwogLyoKICAqIEV4cGlyZSB0aGUgcGVyIGJhc2UgaHJ0aW1lci1xdWV1ZToKICAqLwotc3RhdGljIGlubGluZSB2b2lkIHJ1bl9ocnRpbWVyX3F1ZXVlKHN0cnVjdCBocnRpbWVyX2Jhc2UgKmJhc2UpCitzdGF0aWMgaW5saW5lIHZvaWQgcnVuX2hydGltZXJfcXVldWUoc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlLAorCQkJCSAgICAgaW50IGluZGV4KQogewogCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UgPSAmY3B1X2Jhc2UtPmNsb2NrX2Jhc2VbaW5kZXhdOwogCiAJaWYgKCFiYXNlLT5maXJzdCkKIAkJcmV0dXJuOwpAQCAtNjEwLDUzICsxMTE5LDcyIEBACiAJaWYgKGJhc2UtPmdldF9zb2Z0aXJxX3RpbWUpCiAJCWJhc2UtPnNvZnRpcnFfdGltZSA9IGJhc2UtPmdldF9zb2Z0aXJxX3RpbWUoKTsKIAotCXNwaW5fbG9ja19pcnEoJmJhc2UtPmxvY2spOworCXNwaW5fbG9ja19pcnEoJmNwdV9iYXNlLT5sb2NrKTsKIAogCXdoaWxlICgobm9kZSA9IGJhc2UtPmZpcnN0KSkgewogCQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7Ci0JCWludCAoKmZuKShzdHJ1Y3QgaHJ0aW1lciAqKTsKKwkJZW51bSBocnRpbWVyX3Jlc3RhcnQgKCpmbikoc3RydWN0IGhydGltZXIgKik7CiAJCWludCByZXN0YXJ0OwogCiAJCXRpbWVyID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhydGltZXIsIG5vZGUpOwogCQlpZiAoYmFzZS0+c29mdGlycV90aW1lLnR2NjQgPD0gdGltZXItPmV4cGlyZXMudHY2NCkKIAkJCWJyZWFrOwogCisJCXRpbWVyX3N0YXRzX2FjY291bnRfaHJ0aW1lcih0aW1lcik7CisKIAkJZm4gPSB0aW1lci0+ZnVuY3Rpb247Ci0JCXNldF9jdXJyX3RpbWVyKGJhc2UsIHRpbWVyKTsKLQkJX19yZW1vdmVfaHJ0aW1lcih0aW1lciwgYmFzZSk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmYmFzZS0+bG9jayk7CisJCV9fcmVtb3ZlX2hydGltZXIodGltZXIsIGJhc2UsIEhSVElNRVJfU1RBVEVfQ0FMTEJBQ0ssIDApOworCQlzcGluX3VubG9ja19pcnEoJmNwdV9iYXNlLT5sb2NrKTsKIAogCQlyZXN0YXJ0ID0gZm4odGltZXIpOwogCi0JCXNwaW5fbG9ja19pcnEoJmJhc2UtPmxvY2spOworCQlzcGluX2xvY2tfaXJxKCZjcHVfYmFzZS0+bG9jayk7CiAKKwkJdGltZXItPnN0YXRlICY9IH5IUlRJTUVSX1NUQVRFX0NBTExCQUNLOwogCQlpZiAocmVzdGFydCAhPSBIUlRJTUVSX05PUkVTVEFSVCkgewogCQkJQlVHX09OKGhydGltZXJfYWN0aXZlKHRpbWVyKSk7Ci0JCQllbnF1ZXVlX2hydGltZXIodGltZXIsIGJhc2UpOworCQkJZW5xdWV1ZV9ocnRpbWVyKHRpbWVyLCBiYXNlLCAwKTsKIAkJfQogCX0KLQlzZXRfY3Vycl90aW1lcihiYXNlLCBOVUxMKTsKLQlzcGluX3VubG9ja19pcnEoJmJhc2UtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmY3B1X2Jhc2UtPmxvY2spOwogfQogCiAvKgogICogQ2FsbGVkIGZyb20gdGltZXIgc29mdGlycSBldmVyeSBqaWZmeSwgZXhwaXJlIGhydGltZXJzOgorICoKKyAqIEZvciBIUlQgaXRzIHRoZSBmYWxsIGJhY2sgY29kZSB0byBydW4gdGhlIHNvZnRpcnEgaW4gdGhlIHRpbWVyCisgKiBzb2Z0aXJxIGNvbnRleHQgaW4gY2FzZSB0aGUgaHJ0aW1lciBpbml0aWFsaXphdGlvbiBmYWlsZWQgb3IgaGFzCisgKiBub3QgYmVlbiBkb25lIHlldC4KICAqLwogdm9pZCBocnRpbWVyX3J1bl9xdWV1ZXModm9pZCkKIHsKLQlzdHJ1Y3QgaHJ0aW1lcl9iYXNlICpiYXNlID0gX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKKwlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UgPSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKIAlpbnQgaTsKIAotCWhydGltZXJfZ2V0X3NvZnRpcnFfdGltZShiYXNlKTsKKwlpZiAoaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKQorCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0hSVElNRVJfQkFTRVM7IGkrKykKLQkJcnVuX2hydGltZXJfcXVldWUoJmJhc2VbaV0pOworCS8qCisJICogVGhpcyBfaXNfIHVnbHk6IFdlIGhhdmUgdG8gY2hlY2sgaW4gdGhlIHNvZnRpcnEgY29udGV4dCwKKwkgKiB3aGV0aGVyIHdlIGNhbiBzd2l0Y2ggdG8gaGlnaHJlcyBhbmQgLyBvciBub2h6IG1vZGUuIFRoZQorCSAqIGNsb2Nrc291cmNlIHN3aXRjaCBoYXBwZW5zIGluIHRoZSB0aW1lciBpbnRlcnJ1cHQgd2l0aAorCSAqIHh0aW1lX2xvY2sgaGVsZC4gTm90aWZpY2F0aW9uIGZyb20gdGhlcmUgb25seSBzZXRzIHRoZQorCSAqIGNoZWNrIGJpdCBpbiB0aGUgdGlja19vbmVzaG90IGNvZGUsIG90aGVyd2lzZSB3ZSBtaWdodAorCSAqIGRlYWRsb2NrIHZzLiB4dGltZV9sb2NrLgorCSAqLworCWlmICh0aWNrX2NoZWNrX29uZXNob3RfY2hhbmdlKCFocnRpbWVyX2lzX2hyZXNfZW5hYmxlZCgpKSkKKwkJaHJ0aW1lcl9zd2l0Y2hfdG9faHJlcygpOworCisJaHJ0aW1lcl9nZXRfc29mdGlycV90aW1lKGNwdV9iYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrKQorCQlydW5faHJ0aW1lcl9xdWV1ZShjcHVfYmFzZSwgaSk7CiB9CiAKIC8qCiAgKiBTbGVlcCByZWxhdGVkIGZ1bmN0aW9uczoKICAqLwotc3RhdGljIGludCBocnRpbWVyX3dha2V1cChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaHJ0aW1lcl93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKQogewogCXN0cnVjdCBocnRpbWVyX3NsZWVwZXIgKnQgPQogCQljb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBocnRpbWVyX3NsZWVwZXIsIHRpbWVyKTsKQEAgLTY3Myw2ICsxMjAxLDkgQEAKIHsKIAlzbC0+dGltZXIuZnVuY3Rpb24gPSBocnRpbWVyX3dha2V1cDsKIAlzbC0+dGFzayA9IHRhc2s7CisjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUworCXNsLT50aW1lci5jYl9tb2RlID0gSFJUSU1FUl9DQl9JUlFTQUZFX05PX1JFU1RBUlQ7CisjZW5kaWYKIH0KIAogc3RhdGljIGludCBfX3NjaGVkIGRvX25hbm9zbGVlcChzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyICp0LCBlbnVtIGhydGltZXJfbW9kZSBtb2RlKQpAQCAtNjgzLDEwICsxMjE0LDExIEBACiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWhydGltZXJfc3RhcnQoJnQtPnRpbWVyLCB0LT50aW1lci5leHBpcmVzLCBtb2RlKTsKIAotCQlzY2hlZHVsZSgpOworCQlpZiAobGlrZWx5KHQtPnRhc2spKQorCQkJc2NoZWR1bGUoKTsKIAogCQlocnRpbWVyX2NhbmNlbCgmdC0+dGltZXIpOwotCQltb2RlID0gSFJUSU1FUl9BQlM7CisJCW1vZGUgPSBIUlRJTUVSX01PREVfQUJTOwogCiAJfSB3aGlsZSAodC0+dGFzayAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOwogCkBAIC03MDIsMTAgKzEyMzQsMTAgQEAKIAogCXJlc3RhcnQtPmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOwogCi0JaHJ0aW1lcl9pbml0KCZ0LnRpbWVyLCByZXN0YXJ0LT5hcmcwLCBIUlRJTUVSX0FCUyk7CisJaHJ0aW1lcl9pbml0KCZ0LnRpbWVyLCByZXN0YXJ0LT5hcmcwLCBIUlRJTUVSX01PREVfQUJTKTsKIAl0LnRpbWVyLmV4cGlyZXMudHY2NCA9ICgodTY0KXJlc3RhcnQtPmFyZzMgPDwgMzIpIHwgKHU2NCkgcmVzdGFydC0+YXJnMjsKIAotCWlmIChkb19uYW5vc2xlZXAoJnQsIEhSVElNRVJfQUJTKSkKKwlpZiAoZG9fbmFub3NsZWVwKCZ0LCBIUlRJTUVSX01PREVfQUJTKSkKIAkJcmV0dXJuIDA7CiAKIAlybXRwID0gKHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKikgcmVzdGFydC0+YXJnMTsKQEAgLTczOCw3ICsxMjcwLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBBYnNvbHV0ZSB0aW1lcnMgZG8gbm90IHVwZGF0ZSB0aGUgcm10cCB2YWx1ZSBhbmQgcmVzdGFydDogKi8KLQlpZiAobW9kZSA9PSBIUlRJTUVSX0FCUykKKwlpZiAobW9kZSA9PSBIUlRJTUVSX01PREVfQUJTKQogCQlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOwogCiAJaWYgKHJtdHApIHsKQEAgLTc3MSw3ICsxMzAzLDcgQEAKIAlpZiAoIXRpbWVzcGVjX3ZhbGlkKCZ0dSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIGhydGltZXJfbmFub3NsZWVwKCZ0dSwgcm10cCwgSFJUSU1FUl9SRUwsIENMT0NLX01PTk9UT05JQyk7CisJcmV0dXJuIGhydGltZXJfbmFub3NsZWVwKCZ0dSwgcm10cCwgSFJUSU1FUl9NT0RFX1JFTCwgQ0xPQ0tfTU9OT1RPTklDKTsKIH0KIAogLyoKQEAgLTc3OSw1NiArMTMxMSw2MCBAQAogICovCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9ocnRpbWVyc19jcHUoaW50IGNwdSkKIHsKLQlzdHJ1Y3QgaHJ0aW1lcl9iYXNlICpiYXNlID0gcGVyX2NwdShocnRpbWVyX2Jhc2VzLCBjcHUpOworCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpjcHVfYmFzZSA9ICZwZXJfY3B1KGhydGltZXJfYmFzZXMsIGNwdSk7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0hSVElNRVJfQkFTRVM7IGkrKywgYmFzZSsrKSB7Ci0JCXNwaW5fbG9ja19pbml0KCZiYXNlLT5sb2NrKTsKLQkJbG9ja2RlcF9zZXRfY2xhc3MoJmJhc2UtPmxvY2ssICZiYXNlLT5sb2NrX2tleSk7Ci0JfQorCXNwaW5fbG9ja19pbml0KCZjcHVfYmFzZS0+bG9jayk7CisJbG9ja2RlcF9zZXRfY2xhc3MoJmNwdV9iYXNlLT5sb2NrLCAmY3B1X2Jhc2UtPmxvY2tfa2V5KTsKKworCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrKQorCQljcHVfYmFzZS0+Y2xvY2tfYmFzZVtpXS5jcHVfYmFzZSA9IGNwdV9iYXNlOworCisJaHJ0aW1lcl9pbml0X2hyZXMoY3B1X2Jhc2UpOwogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAKLXN0YXRpYyB2b2lkIG1pZ3JhdGVfaHJ0aW1lcl9saXN0KHN0cnVjdCBocnRpbWVyX2Jhc2UgKm9sZF9iYXNlLAotCQkJCXN0cnVjdCBocnRpbWVyX2Jhc2UgKm5ld19iYXNlKQorc3RhdGljIHZvaWQgbWlncmF0ZV9ocnRpbWVyX2xpc3Qoc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqb2xkX2Jhc2UsCisJCQkJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqbmV3X2Jhc2UpCiB7CiAJc3RydWN0IGhydGltZXIgKnRpbWVyOwogCXN0cnVjdCByYl9ub2RlICpub2RlOwogCiAJd2hpbGUgKChub2RlID0gcmJfZmlyc3QoJm9sZF9iYXNlLT5hY3RpdmUpKSkgewogCQl0aW1lciA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKLQkJX19yZW1vdmVfaHJ0aW1lcih0aW1lciwgb2xkX2Jhc2UpOworCQlCVUdfT04oaHJ0aW1lcl9jYWxsYmFja19ydW5uaW5nKHRpbWVyKSk7CisJCV9fcmVtb3ZlX2hydGltZXIodGltZXIsIG9sZF9iYXNlLCBIUlRJTUVSX1NUQVRFX0lOQUNUSVZFLCAwKTsKIAkJdGltZXItPmJhc2UgPSBuZXdfYmFzZTsKLQkJZW5xdWV1ZV9ocnRpbWVyKHRpbWVyLCBuZXdfYmFzZSk7CisJCS8qCisJCSAqIEVucXVldWUgdGhlIHRpbWVyLiBBbGxvdyByZXByb2dyYW1taW5nIG9mIHRoZSBldmVudCBkZXZpY2UKKwkJICovCisJCWVucXVldWVfaHJ0aW1lcih0aW1lciwgbmV3X2Jhc2UsIDEpOwogCX0KIH0KIAogc3RhdGljIHZvaWQgbWlncmF0ZV9ocnRpbWVycyhpbnQgY3B1KQogewotCXN0cnVjdCBocnRpbWVyX2Jhc2UgKm9sZF9iYXNlLCAqbmV3X2Jhc2U7CisJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKm9sZF9iYXNlLCAqbmV3X2Jhc2U7CiAJaW50IGk7CiAKIAlCVUdfT04oY3B1X29ubGluZShjcHUpKTsKLQlvbGRfYmFzZSA9IHBlcl9jcHUoaHJ0aW1lcl9iYXNlcywgY3B1KTsKLQluZXdfYmFzZSA9IGdldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOworCW9sZF9iYXNlID0gJnBlcl9jcHUoaHJ0aW1lcl9iYXNlcywgY3B1KTsKKwluZXdfYmFzZSA9ICZnZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKKworCXRpY2tfY2FuY2VsX3NjaGVkX3RpbWVyKGNwdSk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IUlRJTUVSX0JBU0VTOyBpKyspIHsKKwlzcGluX2xvY2soJm5ld19iYXNlLT5sb2NrKTsKKwlzcGluX2xvY2soJm9sZF9iYXNlLT5sb2NrKTsKIAotCQlzcGluX2xvY2soJm5ld19iYXNlLT5sb2NrKTsKLQkJc3Bpbl9sb2NrKCZvbGRfYmFzZS0+bG9jayk7Ci0KLQkJQlVHX09OKG9sZF9iYXNlLT5jdXJyX3RpbWVyKTsKLQotCQltaWdyYXRlX2hydGltZXJfbGlzdChvbGRfYmFzZSwgbmV3X2Jhc2UpOwotCi0JCXNwaW5fdW5sb2NrKCZvbGRfYmFzZS0+bG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZuZXdfYmFzZS0+bG9jayk7Ci0JCW9sZF9iYXNlKys7Ci0JCW5ld19iYXNlKys7CisJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyspIHsKKwkJbWlncmF0ZV9ocnRpbWVyX2xpc3QoJm9sZF9iYXNlLT5jbG9ja19iYXNlW2ldLAorCQkJCSAgICAgJm5ld19iYXNlLT5jbG9ja19iYXNlW2ldKTsKIAl9CisJc3Bpbl91bmxvY2soJm9sZF9iYXNlLT5sb2NrKTsKKwlzcGluX3VubG9jaygmbmV3X2Jhc2UtPmxvY2spOwogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXB1dF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwpAQCAtODQ4LDYgKzEzODQsNyBAQAogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJY2FzZSBDUFVfREVBRDoKKwkJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQ1BVX0RFQUQsICZjcHUpOwogCQltaWdyYXRlX2hydGltZXJzKGNwdSk7CiAJCWJyZWFrOwogI2VuZGlmCkBAIC04NjgsNSArMTQwNSw4IEBACiAJaHJ0aW1lcl9jcHVfbm90aWZ5KCZocnRpbWVyc19uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX1VQX1BSRVBBUkUsCiAJCQkgICh2b2lkICopKGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmhydGltZXJzX25iKTsKKyNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCisJb3Blbl9zb2Z0aXJxKEhSVElNRVJfU09GVElSUSwgcnVuX2hydGltZXJfc29mdGlycSwgTlVMTCk7CisjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCA0NzVlOGE3Li4wMTMzZjRmIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAvKioKICAqCXNldF9pcnFfZGF0YSAtIHNldCBpcnEgdHlwZSBkYXRhIGZvciBhbiBpcnEKICAqCUBpcnE6CUludGVycnVwdCBudW1iZXIKLSAqCUBkYXRhOglQb2ludGVyIHRvIGludGVycnVwdCBzcGVjaWZpYyBkYXRhCisgKglAZW50cnk6CVBvaW50ZXIgdG8gTVNJIGRlc2NyaXB0b3IgZGF0YQogICoKICAqCVNldCB0aGUgaGFyZHdhcmUgaXJxIGNvbnRyb2xsZXIgZGF0YSBmb3IgYW4gaXJxCiAgKi8KQEAgLTIzMCwxMCArMjMwLDYgQEAKICAqLwogc3RhdGljIHZvaWQgZGVmYXVsdF9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0KLQlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfREVMQVlFRF9ESVNBQkxFKSkKLQkJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOwogfQogCiAvKgpAQCAtMjk4LDEzICsyOTQsMTggQEAKIAogCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykpCiAJCWdvdG8gb3V0X3VubG9jazsKLQlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwogCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOwogCiAJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwotCWlmICh1bmxpa2VseSghYWN0aW9uIHx8IChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKSkKKwlpZiAodW5saWtlbHkoIWFjdGlvbiB8fCAoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkpIHsKKwkJaWYgKGRlc2MtPmNoaXAtPm1hc2spCisJCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CisJCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7CisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVORElORzsKIAkJZ290byBvdXRfdW5sb2NrOworCX0KIAorCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyB8IElSUV9QRU5ESU5HKTsKIAlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7CiAJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogCkBAIC0zOTYsMTEgKzM5NywxMyBAQAogCiAJLyoKIAkgKiBJZiBpdHMgZGlzYWJsZWQgb3Igbm8gYWN0aW9uIGF2YWlsYWJsZQotCSAqIGtlZXAgaXQgbWFza2VkIGFuZCBnZXQgb3V0IG9mIGhlcmUKKwkgKiB0aGVuIG1hc2sgaXQgYW5kIGdldCBvdXQgb2YgaGVyZToKIAkgKi8KIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJaWYgKHVubGlrZWx5KCFhY3Rpb24gfHwgKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpKSB7CiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVORElORzsKKwkJaWYgKGRlc2MtPmNoaXAtPm1hc2spCisJCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTYyLDEwICs1NjUsOCBAQAogCiAJLyogVW5pbnN0YWxsPyAqLwogCWlmIChoYW5kbGUgPT0gaGFuZGxlX2JhZF9pcnEpIHsKLQkJaWYgKGRlc2MtPmNoaXAgIT0gJm5vX2lycV9jaGlwKSB7Ci0JCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7Ci0JCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKLQkJfQorCQlpZiAoZGVzYy0+Y2hpcCAhPSAmbm9faXJxX2NoaXApCisJCQltYXNrX2Fja19pcnEoZGVzYywgaXJxKTsKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKIAkJZGVzYy0+ZGVwdGggPSAxOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IGFjYzVkOWYuLjU1OTdjMTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMzgsNiArMzgsNDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woc3luY2hyb25pemVfaXJxKTsKIAorLyoqCisgKglpcnFfY2FuX3NldF9hZmZpbml0eSAtIENoZWNrIGlmIHRoZSBhZmZpbml0eSBvZiBhIGdpdmVuIGlycSBjYW4gYmUgc2V0CisgKglAaXJxOgkJSW50ZXJydXB0IHRvIGNoZWNrCisgKgorICovCitpbnQgaXJxX2Nhbl9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKworCWlmIChDSEVDS19JUlFfUEVSX0NQVShkZXNjLT5zdGF0dXMpIHx8ICFkZXNjLT5jaGlwIHx8CisJICAgICFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICoJaXJxX3NldF9hZmZpbml0eSAtIFNldCB0aGUgaXJxIGFmZmluaXR5IG9mIGEgZ2l2ZW4gaXJxCisgKglAaXJxOgkJSW50ZXJydXB0IHRvIHNldCBhZmZpbml0eQorICoJQGNwdW1hc2s6CWNwdW1hc2sKKyAqCisgKi8KK2ludCBpcnFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBjcHVtYXNrKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCisJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCisJCXJldHVybiAtRUlOVkFMOworCisJc2V0X2JhbGFuY2VfaXJxX2FmZmluaXR5KGlycSwgY3B1bWFzayk7CisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUQorCXNldF9wZW5kaW5nX2lycShpcnEsIGNwdW1hc2spOworI2Vsc2UKKwlkZXNjLT5hZmZpbml0eSA9IGNwdW1hc2s7CisJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgY3B1bWFzayk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmCiAKIC8qKgpAQCAtMjgxLDYgKzMyMSwxMCBAQAogCWlmIChuZXctPmZsYWdzICYgSVJRRl9QRVJDUFUpCiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVSX0NQVTsKICNlbmRpZgorCS8qIEV4Y2x1ZGUgSVJRIGZyb20gYmFsYW5jaW5nICovCisJaWYgKG5ldy0+ZmxhZ3MgJiBJUlFGX05PQkFMQU5DSU5HKQorCQlkZXNjLT5zdGF0dXMgfD0gSVJRX05PX0JBTEFOQ0lORzsKKwogCWlmICghc2hhcmVkKSB7CiAJCWlycV9jaGlwX3NldF9kZWZhdWx0cyhkZXNjLT5jaGlwKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9wcm9jLmMgYi9rZXJuZWwvaXJxL3Byb2MuYwppbmRleCA2ZDNiZTA2Li4yZGI5MWViIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Byb2MuYworKysgYi9rZXJuZWwvaXJxL3Byb2MuYwpAQCAtMTYsMjYgKzE2LDYgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAotI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCi12b2lkIHByb2Nfc2V0X2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFza192YWwpCi17Ci0Jc2V0X2JhbGFuY2VfaXJxX2FmZmluaXR5KGlycSwgbWFza192YWwpOwotCi0JLyoKLQkgKiBTYXZlIHRoZXNlIGF3YXkgZm9yIGxhdGVyIHVzZS4gUmUtcHJvZ2FtIHdoZW4gdGhlCi0JICogaW50ZXJydXB0IGlzIHBlbmRpbmcKLQkgKi8KLQlzZXRfcGVuZGluZ19pcnEoaXJxLCBtYXNrX3ZhbCk7Ci19Ci0jZWxzZQotdm9pZCBwcm9jX3NldF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2tfdmFsKQotewotCXNldF9iYWxhbmNlX2lycV9hZmZpbml0eShpcnEsIG1hc2tfdmFsKTsKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFza192YWw7Ci0JaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrX3ZhbCk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGludCBpcnFfYWZmaW5pdHlfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAogCQkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKIHsKQEAgLTU1LDcgKzM1LDcgQEAKIAljcHVtYXNrX3QgbmV3X3ZhbHVlLCB0bXA7CiAKIAlpZiAoIWlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5IHx8IG5vX2lycV9hZmZpbml0eSB8fAotCQkJCUNIRUNLX0lSUV9QRVJfQ1BVKGlycV9kZXNjW2lycV0uc3RhdHVzKSkKKwkgICAgaXJxX2JhbGFuY2luZ19kaXNhYmxlZChpcnEpKQogCQlyZXR1cm4gLUVJTzsKIAogCWVyciA9IGNwdW1hc2tfcGFyc2VfdXNlcihidWZmZXIsIGNvdW50LCBuZXdfdmFsdWUpOwpAQCAtNzMsNyArNTMsNyBAQAogCQkgICBjb2RlIHRvIHNldCBkZWZhdWx0IFNNUCBhZmZpbml0eS4gKi8KIAkJcmV0dXJuIHNlbGVjdF9zbXBfYWZmaW5pdHkoaXJxKSA/IC1FSU5WQUwgOiBmdWxsX2NvdW50OwogCi0JcHJvY19zZXRfaXJxX2FmZmluaXR5KGlycSwgbmV3X3ZhbHVlKTsKKwlpcnFfc2V0X2FmZmluaXR5KGlycSwgbmV3X3ZhbHVlKTsKIAogCXJldHVybiBmdWxsX2NvdW50OwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2l0aW1lci5jIGIva2VybmVsL2l0aW1lci5jCmluZGV4IDIwNGVkNzkuLjMwN2M2YTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pdGltZXIuYworKysgYi9rZXJuZWwvaXRpbWVyLmMKQEAgLTEyOCwxOCArMTI4LDEzIEBACiAvKgogICogVGhlIHRpbWVyIGlzIGF1dG9tYWdpY2FsbHkgcmVzdGFydGVkLCB3aGVuIGludGVydmFsICE9IDAKICAqLwotaW50IGl0X3JlYWxfZm4oc3RydWN0IGhydGltZXIgKnRpbWVyKQorZW51bSBocnRpbWVyX3Jlc3RhcnQgaXRfcmVhbF9mbihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7CiAJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZyA9CiAJICAgIGNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHNpZ25hbF9zdHJ1Y3QsIHJlYWxfdGltZXIpOwogCiAJc2VuZF9ncm91cF9zaWdfaW5mbyhTSUdBTFJNLCBTRU5EX1NJR19QUklWLCBzaWctPnRzayk7CiAKLQlpZiAoc2lnLT5pdF9yZWFsX2luY3IudHY2NCAhPSAwKSB7Ci0JCWhydGltZXJfZm9yd2FyZCh0aW1lciwgdGltZXItPmJhc2UtPnNvZnRpcnFfdGltZSwKLQkJCQlzaWctPml0X3JlYWxfaW5jcik7Ci0JCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7Ci0JfQogCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIH0KIApAQCAtMjMxLDExICsyMjYsMTQgQEAKIAkJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJCWdvdG8gYWdhaW47CiAJCX0KLQkJdHNrLT5zaWduYWwtPml0X3JlYWxfaW5jciA9Ci0JCQl0aW1ldmFsX3RvX2t0aW1lKHZhbHVlLT5pdF9pbnRlcnZhbCk7CiAJCWV4cGlyZXMgPSB0aW1ldmFsX3RvX2t0aW1lKHZhbHVlLT5pdF92YWx1ZSk7Ci0JCWlmIChleHBpcmVzLnR2NjQgIT0gMCkKLQkJCWhydGltZXJfc3RhcnQodGltZXIsIGV4cGlyZXMsIEhSVElNRVJfUkVMKTsKKwkJaWYgKGV4cGlyZXMudHY2NCAhPSAwKSB7CisJCQl0c2stPnNpZ25hbC0+aXRfcmVhbF9pbmNyID0KKwkJCQl0aW1ldmFsX3RvX2t0aW1lKHZhbHVlLT5pdF9pbnRlcnZhbCk7CisJCQlocnRpbWVyX3N0YXJ0KHRpbWVyLCBleHBpcmVzLCBIUlRJTUVSX01PREVfUkVMKTsKKwkJfSBlbHNlCisJCQl0c2stPnNpZ25hbC0+aXRfcmVhbF9pbmNyLnR2NjQgPSAwOworCiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBJVElNRVJfVklSVFVBTDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDNhNzM3OWEuLjlmOTIzZjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorZXh0ZXJuIGludCBkZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncyk7CisKIGV4dGVybiBpbnQgbWF4X3RocmVhZHM7CiAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2hlbHBlcl93cTsKQEAgLTQ2LDYgKzQ4LDcgQEAKIAltb2Rwcm9iZV9wYXRoIGlzIHNldCB2aWEgL3Byb2Mvc3lzLgogKi8KIGNoYXIgbW9kcHJvYmVfcGF0aFtLTU9EX1BBVEhfTEVOXSA9ICIvc2Jpbi9tb2Rwcm9iZSI7CitzdHJ1Y3QgbW9kdWxlX2tvYmplY3Qga21vZF9tazsKIAogLyoqCiAgKiByZXF1ZXN0X21vZHVsZSAtIHRyeSB0byBsb2FkIGEga2VybmVsIG1vZHVsZQpAQCAtNzUsNiArNzgsMTEgQEAKIAlzdGF0aWMgYXRvbWljX3Qga21vZF9jb25jdXJyZW50ID0gQVRPTUlDX0lOSVQoMCk7CiAjZGVmaW5lIE1BWF9LTU9EX0NPTkNVUlJFTlQgNTAJLyogQ29tcGxldGVseSBhcmJpdHJhcnkgdmFsdWUgLSBLQU8gKi8KIAlzdGF0aWMgaW50IGttb2RfbG9vcF9tc2c7CisJY2hhciBtb2RhbGlhc1sxNiArIE1PRFVMRV9OQU1FX0xFTl0gPSAiTU9EQUxJQVM9IjsKKwljaGFyICp1ZXZlbnRfZW52cFsyXSA9IHsKKwkJbW9kYWxpYXMsCisJCU5VTEwKKwl9OwogCiAJdmFfc3RhcnQoYXJncywgZm10KTsKIAlyZXQgPSB2c25wcmludGYobW9kdWxlX25hbWUsIE1PRFVMRV9OQU1FX0xFTiwgZm10LCBhcmdzKTsKQEAgLTgyLDYgKzkwLDEyIEBACiAJaWYgKHJldCA+PSBNT0RVTEVfTkFNRV9MRU4pCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCisJc3RyY3B5KCZtb2RhbGlhc1tzdHJsZW4oIk1PREFMSUFTPSIpXSwgbW9kdWxlX25hbWUpOworCWtvYmplY3RfdWV2ZW50X2Vudigma21vZF9tay5rb2JqLCBLT0JKX0NIQU5HRSwgdWV2ZW50X2VudnApOworCisJaWYgKG1vZHByb2JlX3BhdGhbMF0gPT0gJ1wwJykKKwkJZ290byBvdXQ7CisKIAkvKiBJZiBtb2Rwcm9iZSBuZWVkcyBhIHNlcnZpY2UgdGhhdCBpcyBpbiBhIG1vZHVsZSwgd2UgZ2V0IGEgcmVjdXJzaXZlCiAJICogbG9vcC4gIExpbWl0IHRoZSBudW1iZXIgb2YgcnVubmluZyBrbW9kIHRocmVhZHMgdG8gbWF4X3RocmVhZHMvMiBvcgogCSAqIE1BWF9LTU9EX0NPTkNVUlJFTlQsIHdoaWNoZXZlciBpcyB0aGUgc21hbGxlci4gIEEgY2xlYW5lciBtZXRob2QKQEAgLTEwOCw5ICsxMjIsMTE1IEBACiAKIAlyZXQgPSBjYWxsX3VzZXJtb2RlaGVscGVyKG1vZHByb2JlX3BhdGgsIGFyZ3YsIGVudnAsIDEpOwogCWF0b21pY19kZWMoJmttb2RfY29uY3VycmVudCk7CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocmVxdWVzdF9tb2R1bGUpOworCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tb2RfcmVxdWVzdChzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbWF0dHIsCisJCQkJIHN0cnVjdCBtb2R1bGUgKm1vZCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworCWNoYXIgbmFtZVtNT0RVTEVfTkFNRV9MRU5dOworCWludCByZXQ7CisKKwlpZiAoY291bnQgPCAxIHx8IGNvdW50KzEgPiBNT0RVTEVfTkFNRV9MRU4pCisJCXJldHVybiAtRUlOVkFMOworCW1lbWNweShuYW1lLCBidWZmZXIsIGNvdW50KTsKKwluYW1lW2NvdW50XSA9ICdcMCc7CisJaWYgKG5hbWVbY291bnQtMV0gPT0gJ1xuJykKKwkJbmFtZVtjb3VudC0xXSA9ICdcMCc7CisKKwlyZXQgPSByZXF1ZXN0X21vZHVsZShuYW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSBtb2RfcmVxdWVzdCA9IHsKKwkuYXR0ciA9IHsgLm5hbWUgPSAibW9kX3JlcXVlc3QiLCAubW9kZSA9IFNfSVdVU1IsIC5vd25lciA9IFRISVNfTU9EVUxFIH0sCisJLnN0b3JlID0gc3RvcmVfbW9kX3JlcXVlc3QsCit9OworCisjaWZkZWYgQ09ORklHX01PRFVMRV9VTkxPQUQKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX21vZF91bmxvYWQoc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1hdHRyLAorCQkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZCwKKwkJCSAgICBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKwljaGFyIG5hbWVbTU9EVUxFX05BTUVfTEVOXTsKKwlpbnQgcmV0OworCisJaWYgKGNvdW50IDwgMSB8fCBjb3VudCsxID4gTU9EVUxFX05BTUVfTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1jcHkobmFtZSwgYnVmZmVyLCBjb3VudCk7CisJbmFtZVtjb3VudF0gPSAnXDAnOworCWlmIChuYW1lW2NvdW50LTFdID09ICdcbicpCisJCW5hbWVbY291bnQtMV0gPSAnXDAnOworCisJcmV0ID0gZGVsZXRlX21vZHVsZShuYW1lLCBPX05PTkJMT0NLKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSBtb2RfdW5sb2FkID0geworCS5hdHRyID0geyAubmFtZSA9ICJtb2RfdW5sb2FkIiwgLm1vZGUgPSBTX0lXVVNSLCAub3duZXIgPSBUSElTX01PRFVMRSB9LAorCS5zdG9yZSA9IHN0b3JlX21vZF91bmxvYWQsCit9OworI2VuZGlmCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbW9kX3JlcXVlc3RfaGVscGVyKHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICptYXR0ciwKKwkJCQkgICAgICAgc3RydWN0IG1vZHVsZSAqbW9kLAorCQkJCSAgICAgICBjaGFyICpidWZmZXIpCit7CisJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJXNcbiIsIG1vZHByb2JlX3BhdGgpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tb2RfcmVxdWVzdF9oZWxwZXIoc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1hdHRyLAorCQkJCQlzdHJ1Y3QgbW9kdWxlICptb2QsCisJCQkJCWNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQoreworCWlmIChjb3VudCA8IDEgfHwgY291bnQrMSA+IEtNT0RfUEFUSF9MRU4pCisJCXJldHVybiAtRUlOVkFMOworCW1lbWNweShtb2Rwcm9iZV9wYXRoLCBidWZmZXIsIGNvdW50KTsKKwltb2Rwcm9iZV9wYXRoW2NvdW50XSA9ICdcMCc7CisJaWYgKG1vZHByb2JlX3BhdGhbY291bnQtMV0gPT0gJ1xuJykKKwkJbW9kcHJvYmVfcGF0aFtjb3VudC0xXSA9ICdcMCc7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgbW9kX3JlcXVlc3RfaGVscGVyID0geworCS5hdHRyID0geworCQkubmFtZSA9ICJtb2RfcmVxdWVzdF9oZWxwZXIiLAorCQkubW9kZSA9IFNfSVdVU1IgfCBTX0lSVUdPLAorCQkub3duZXIgPSBUSElTX01PRFVMRQorCX0sCisJLnNob3cgPSBzaG93X21vZF9yZXF1ZXN0X2hlbHBlciwKKwkuc3RvcmUgPSBzdG9yZV9tb2RfcmVxdWVzdF9oZWxwZXIsCit9OworCit2b2lkIF9faW5pdCBrbW9kX3N5c2ZzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJa21vZF9tay5tb2QgPSBUSElTX01PRFVMRTsKKwlrb2JqX3NldF9rc2V0X3MoJmttb2RfbWssIG1vZHVsZV9zdWJzeXMpOworCWtvYmplY3Rfc2V0X25hbWUoJmttb2RfbWsua29iaiwgImttb2QiKTsKKwlrb2JqZWN0X2luaXQoJmttb2RfbWsua29iaik7CisJcmV0ID0ga29iamVjdF9hZGQoJmttb2RfbWsua29iaik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoJmttb2RfbWsua29iaiwgJm1vZF9yZXF1ZXN0X2hlbHBlci5hdHRyKTsKKwlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZSgma21vZF9tay5rb2JqLCAmbW9kX3JlcXVlc3QuYXR0cik7CisjaWZkZWYgQ09ORklHX01PRFVMRV9VTkxPQUQKKwlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZSgma21vZF9tay5rb2JqLCAmbW9kX3VubG9hZC5hdHRyKTsKKyNlbmRpZgorCisJa29iamVjdF91ZXZlbnQoJmttb2RfbWsua29iaiwgS09CSl9BREQpOworb3V0OgorCXJldHVybjsKK30KICNlbmRpZiAvKiBDT05GSUdfS01PRCAqLwogCiBzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvIHsKQEAgLTIxNyw3ICszMzcsMTAgQEAKIAkJCXN1Yl9pbmZvLT5yZXR2YWwgPSByZXQ7CiAJfQogCi0JY29tcGxldGUoc3ViX2luZm8tPmNvbXBsZXRlKTsKKwlpZiAoc3ViX2luZm8tPndhaXQgPCAwKQorCQlrZnJlZShzdWJfaW5mbyk7CisJZWxzZQorCQljb21wbGV0ZShzdWJfaW5mby0+Y29tcGxldGUpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzksNiArMzYyLDkgQEAKIAkJcGlkID0ga2VybmVsX3RocmVhZChfX19fY2FsbF91c2VybW9kZWhlbHBlciwgc3ViX2luZm8sCiAJCQkJICAgIENMT05FX1ZGT1JLIHwgU0lHQ0hMRCk7CiAKKwlpZiAod2FpdCA8IDApCisJCXJldHVybjsKKwogCWlmIChwaWQgPCAwKSB7CiAJCXN1Yl9pbmZvLT5yZXR2YWwgPSBwaWQ7CiAJCWNvbXBsZXRlKHN1Yl9pbmZvLT5jb21wbGV0ZSk7CkBAIC0yNTMsNiArMzc5LDkgQEAKICAqIEBlbnZwOiBudWxsLXRlcm1pbmF0ZWQgZW52aXJvbm1lbnQgbGlzdAogICogQHNlc3Npb25fa2V5cmluZzogc2Vzc2lvbiBrZXlyaW5nIGZvciBwcm9jZXNzIChOVUxMIGZvciBhbiBlbXB0eSBrZXlyaW5nKQogICogQHdhaXQ6IHdhaXQgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBmaW5pc2ggYW5kIHJldHVybiBzdGF0dXMuCisgKiAgICAgICAgd2hlbiAtMSBkb24ndCB3YWl0IGF0IGFsbCwgYnV0IHlvdSBnZXQgbm8gdXNlZnVsIGVycm9yIGJhY2sgd2hlbgorICogICAgICAgIHRoZSBwcm9ncmFtIGNvdWxkbid0IGJlIGV4ZWMnZWQuIFRoaXMgbWFrZXMgaXQgc2FmZSB0byBjYWxsCisgKiAgICAgICAgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4KICAqCiAgKiBSdW5zIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbi4gIFRoZSBhcHBsaWNhdGlvbiBpcyBzdGFydGVkCiAgKiBhc3luY2hyb25vdXNseSBpZiB3YWl0IGlzIG5vdCBzZXQsIGFuZCBydW5zIGFzIGEgY2hpbGQgb2Yga2V2ZW50ZC4KQEAgLTI2NSwxNyArMzk0LDggQEAKIAkJCSAgICAgc3RydWN0IGtleSAqc2Vzc2lvbl9rZXlyaW5nLCBpbnQgd2FpdCkKIHsKIAlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKLQlzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvIHN1Yl9pbmZvID0gewotCQkud29yawkJPSBfX1dPUktfSU5JVElBTElaRVIoc3ViX2luZm8ud29yaywKLQkJCQkJCSAgICAgX19jYWxsX3VzZXJtb2RlaGVscGVyKSwKLQkJLmNvbXBsZXRlCT0gJmRvbmUsCi0JCS5wYXRoCQk9IHBhdGgsCi0JCS5hcmd2CQk9IGFyZ3YsCi0JCS5lbnZwCQk9IGVudnAsCi0JCS5yaW5nCQk9IHNlc3Npb25fa2V5cmluZywKLQkJLndhaXQJCT0gd2FpdCwKLQkJLnJldHZhbAkJPSAwLAotCX07CisJc3RydWN0IHN1YnByb2Nlc3NfaW5mbyAqc3ViX2luZm87CisJaW50IHJldHZhbDsKIAogCWlmICgha2hlbHBlcl93cSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTI4Myw5ICs0MDMsMjUgQEAKIAlpZiAocGF0aFswXSA9PSAnXDAnKQogCQlyZXR1cm4gMDsKIAotCXF1ZXVlX3dvcmsoa2hlbHBlcl93cSwgJnN1Yl9pbmZvLndvcmspOworCXN1Yl9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN1YnByb2Nlc3NfaW5mbyksICBHRlBfQVRPTUlDKTsKKwlpZiAoIXN1Yl9pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfV09SSygmc3ViX2luZm8tPndvcmssIF9fY2FsbF91c2VybW9kZWhlbHBlcik7CisJc3ViX2luZm8tPmNvbXBsZXRlID0gJmRvbmU7CisJc3ViX2luZm8tPnBhdGggPSBwYXRoOworCXN1Yl9pbmZvLT5hcmd2ID0gYXJndjsKKwlzdWJfaW5mby0+ZW52cCA9IGVudnA7CisJc3ViX2luZm8tPnJpbmcgPSBzZXNzaW9uX2tleXJpbmc7CisJc3ViX2luZm8tPndhaXQgPSB3YWl0OworCisJcXVldWVfd29yayhraGVscGVyX3dxLCAmc3ViX2luZm8tPndvcmspOworCWlmICh3YWl0IDwgMCkgLyogdGFzayBoYXMgZnJlZWQgc3ViX2luZm8gKi8KKwkJcmV0dXJuIDA7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7Ci0JcmV0dXJuIHN1Yl9pbmZvLnJldHZhbDsKKwlyZXR2YWwgPSBzdWJfaW5mby0+cmV0dmFsOworCWtmcmVlKHN1Yl9pbmZvKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTChjYWxsX3VzZXJtb2RlaGVscGVyX2tleXMpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCA2ZmNmOGRkLi5kMjVhOWFkIDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CkBAIC03NzgsNiArNzgwLDEyIEBACiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHByZV9oYW5kbGVyX2tyZXRwcm9iZShzdHJ1Y3Qga3Byb2JlICpwLAorCQkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIEFSQ0hfU1VQUE9SVFNfS1JFVFBST0JFUyAqLwogCiB2b2lkIF9fa3Byb2JlcyB1bnJlZ2lzdGVyX2tyZXRwcm9iZShzdHJ1Y3Qga3JldHByb2JlICpycCkKQEAgLTgxNSw3ICs4MjMsMTA5IEBACiAJcmV0dXJuIGVycjsKIH0KIAotX19pbml0Y2FsbChpbml0X2twcm9iZXMpOworI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIHZvaWQgX19rcHJvYmVzIHJlcG9ydF9wcm9iZShzdHJ1Y3Qgc2VxX2ZpbGUgKnBpLCBzdHJ1Y3Qga3Byb2JlICpwLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3ltLCBpbnQgb2Zmc2V0LGNoYXIgKm1vZG5hbWUpCit7CisJY2hhciAqa3Byb2JlX3R5cGU7CisKKwlpZiAocC0+cHJlX2hhbmRsZXIgPT0gcHJlX2hhbmRsZXJfa3JldHByb2JlKQorCQlrcHJvYmVfdHlwZSA9ICJyIjsKKwllbHNlIGlmIChwLT5wcmVfaGFuZGxlciA9PSBzZXRqbXBfcHJlX2hhbmRsZXIpCisJCWtwcm9iZV90eXBlID0gImoiOworCWVsc2UKKwkJa3Byb2JlX3R5cGUgPSAiayI7CisJaWYgKHN5bSkKKwkJc2VxX3ByaW50ZihwaSwgIiVwICAlcyAgJXMrMHgleCAgJXNcbiIsIHAtPmFkZHIsIGtwcm9iZV90eXBlLAorCQkJc3ltLCBvZmZzZXQsIChtb2RuYW1lID8gbW9kbmFtZSA6ICIgIikpOworCWVsc2UKKwkJc2VxX3ByaW50ZihwaSwgIiVwICAlcyAgJXBcbiIsIHAtPmFkZHIsIGtwcm9iZV90eXBlLCBwLT5hZGRyKTsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzICprcHJvYmVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuICgqcG9zIDwgS1BST0JFX1RBQkxFX1NJWkUpID8gcG9zIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzICprcHJvYmVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlpZiAoKnBvcyA+PSBLUFJPQkVfVEFCTEVfU0laRSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzIGtwcm9iZV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcyBzaG93X2twcm9iZV9hZGRyKHN0cnVjdCBzZXFfZmlsZSAqcGksIHZvaWQgKnYpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGtwcm9iZSAqcCwgKmtwOworCWNvbnN0IGNoYXIgKnN5bSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGkgPSAqKGxvZmZfdCAqKSB2OworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgb2Zmc2V0ID0gMDsKKwljaGFyICptb2RuYW1lLCBuYW1lYnVmWzEyOF07CisKKwloZWFkID0gJmtwcm9iZV90YWJsZVtpXTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKKwkJc3ltID0ga2FsbHN5bXNfbG9va3VwKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIsICZzaXplLAorCQkJCQkmb2Zmc2V0LCAmbW9kbmFtZSwgbmFtZWJ1Zik7CisJCWlmIChwLT5wcmVfaGFuZGxlciA9PSBhZ2dyX3ByZV9oYW5kbGVyKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrcCwgJnAtPmxpc3QsIGxpc3QpCisJCQkJcmVwb3J0X3Byb2JlKHBpLCBrcCwgc3ltLCBvZmZzZXQsIG1vZG5hbWUpOworCQl9IGVsc2UKKwkJCXJlcG9ydF9wcm9iZShwaSwgcCwgc3ltLCBvZmZzZXQsIG1vZG5hbWUpOworCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGtwcm9iZXNfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBrcHJvYmVfc2VxX3N0YXJ0LAorCS5uZXh0ICA9IGtwcm9iZV9zZXFfbmV4dCwKKwkuc3RvcCAgPSBrcHJvYmVfc2VxX3N0b3AsCisJLnNob3cgID0gc2hvd19rcHJvYmVfYWRkcgorfTsKKworc3RhdGljIGludCBfX2twcm9iZXMga3Byb2Jlc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiBzZXFfb3BlbihmaWxwLCAma3Byb2Jlc19zZXFfb3BzKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19rcHJvYmVzX29wZXJhdGlvbnMgPSB7CisJLm9wZW4gICAgICAgICAgID0ga3Byb2Jlc19vcGVuLAorCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSAgICAgICAgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGRlYnVnZnNfa3Byb2JlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpmaWxlOworCisJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJrcHJvYmVzIiwgTlVMTCk7CisJaWYgKCFkaXIpCisJCXJldHVybiAtRU5PTUVNOworCisJZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImxpc3QiLCAwNDQ0LCBkaXIgLCAwICwKKwkJCQkmZGVidWdmc19rcHJvYmVzX29wZXJhdGlvbnMpOworCWlmICghZmlsZSkgeworCQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChkZWJ1Z2ZzX2twcm9iZV9pbml0KTsKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KKworbW9kdWxlX2luaXQoaW5pdF9rcHJvYmVzKTsKIAogRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfa3Byb2JlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfa3Byb2JlKTsKQEAgLTgyNCw0ICs5MzQsMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoanByb2JlX3JldHVybik7CiBFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9rcmV0cHJvYmUpOwogRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9rcmV0cHJvYmUpOwotCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCA1OTJjNTc2Li5hMDhhMTcyIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTIyMjgsNiArMjIyOCwxMCBAQAogCiAJY3Vyci0+bG9ja2RlcF9kZXB0aCsrOwogCWNoZWNrX2NoYWluX2tleShjdXJyKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS0RFUAorCWlmICh1bmxpa2VseSghZGVidWdfbG9ja3MpKQorCQlyZXR1cm4gMDsKKyNlbmRpZgogCWlmICh1bmxpa2VseShjdXJyLT5sb2NrZGVwX2RlcHRoID49IE1BWF9MT0NLX0RFUFRIKSkgewogCQlkZWJ1Z19sb2Nrc19vZmYoKTsKIAkJcHJpbnRrKCJCVUc6IE1BWF9MT0NLX0RFUFRIIHRvbyBsb3chXG4iKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCA4YTk0ZTA1Li44YzI1YjFhIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC02NTMsMjAgKzY1MywxMSBAQAogCW11dGV4X2xvY2soJm1vZHVsZV9tdXRleCk7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZwotc3lzX2RlbGV0ZV9tb2R1bGUoY29uc3QgY2hhciBfX3VzZXIgKm5hbWVfdXNlciwgdW5zaWduZWQgaW50IGZsYWdzKQoraW50IGRlbGV0ZV9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBtb2R1bGUgKm1vZDsKLQljaGFyIG5hbWVbTU9EVUxFX05BTUVfTEVOXTsKIAlpbnQgcmV0LCBmb3JjZWQgPSAwOwogCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChzdHJuY3B5X2Zyb21fdXNlcihuYW1lLCBuYW1lX3VzZXIsIE1PRFVMRV9OQU1FX0xFTi0xKSA8IDApCi0JCXJldHVybiAtRUZBVUxUOwotCW5hbWVbTU9EVUxFX05BTUVfTEVOLTFdID0gJ1wwJzsKLQogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm1vZHVsZV9tdXRleCkgIT0gMCkKIAkJcmV0dXJuIC1FSU5UUjsKIApAQCAtNzI3LDYgKzcxOCwyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK2FzbWxpbmthZ2UgbG9uZworc3lzX2RlbGV0ZV9tb2R1bGUoY29uc3QgY2hhciBfX3VzZXIgKm5hbWVfdXNlciwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWNoYXIgbmFtZVtNT0RVTEVfTkFNRV9MRU5dOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChzdHJuY3B5X2Zyb21fdXNlcihuYW1lLCBuYW1lX3VzZXIsIE1PRFVMRV9OQU1FX0xFTi0xKSA8IDApCisJCXJldHVybiAtRUZBVUxUOworCW5hbWVbTU9EVUxFX05BTUVfTEVOLTFdID0gJ1wwJzsKKworCXJldHVybiBkZWxldGVfbW9kdWxlKG5hbWUsIGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfdW5sb2FkX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJc3RydWN0IG1vZHVsZV91c2UgKnVzZTsKQEAgLTEwNjgsNyArMTA3NCw4IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0tBTExTWU1TICovCiAKLXN0YXRpYyBpbnQgbW9kdWxlX2FkZF9tb2RpbmZvX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkKKyNpZmRlZiBDT05GSUdfU1lTRlMKK2ludCBtb2R1bGVfYWRkX21vZGluZm9fYXR0cnMoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCXN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICphdHRyOwogCXN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICp0ZW1wX2F0dHI7CkBAIC0xMDk0LDcgKzExMDEsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgbW9kdWxlX3JlbW92ZV9tb2RpbmZvX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3ZvaWQgbW9kdWxlX3JlbW92ZV9tb2RpbmZvX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqYXR0cjsKIAlpbnQgaTsKQEAgLTExMDksOCArMTExNiwxMCBAQAogCX0KIAlrZnJlZShtb2QtPm1vZGluZm9fYXR0cnMpOwogfQorI2VuZGlmCiAKLXN0YXRpYyBpbnQgbW9kX3N5c2ZzX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKQorI2lmZGVmIENPTkZJR19TWVNGUworaW50IG1vZF9zeXNmc19pbml0KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlpbnQgZXJyOwogCkBAIC0xMTMzLDcgKzExNDIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbW9kX3N5c2ZzX3NldHVwKHN0cnVjdCBtb2R1bGUgKm1vZCwKK2ludCBtb2Rfc3lzZnNfc2V0dXAoc3RydWN0IG1vZHVsZSAqbW9kLAogCQkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLAogCQkJICAgdW5zaWduZWQgaW50IG51bV9wYXJhbXMpCiB7CkBAIC0xMTY5LDE2ICsxMTc4LDE0IEBACiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBtb2Rfa29iamVjdF9yZW1vdmUoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCW1vZHVsZV9yZW1vdmVfbW9kaW5mb19hdHRycyhtb2QpOwogCW1vZHVsZV9wYXJhbV9zeXNmc19yZW1vdmUobW9kKTsKLQlpZiAobW9kLT5ta29iai5kcml2ZXJzX2RpcikKLQkJa29iamVjdF91bnJlZ2lzdGVyKG1vZC0+bWtvYmouZHJpdmVyc19kaXIpOwotCWlmIChtb2QtPmhvbGRlcnNfZGlyKQotCQlrb2JqZWN0X3VucmVnaXN0ZXIobW9kLT5ob2xkZXJzX2Rpcik7Ci0KKwlrb2JqZWN0X3VucmVnaXN0ZXIobW9kLT5ta29iai5kcml2ZXJzX2Rpcik7CisJa29iamVjdF91bnJlZ2lzdGVyKG1vZC0+aG9sZGVyc19kaXIpOwogCWtvYmplY3RfdW5yZWdpc3RlcigmbW9kLT5ta29iai5rb2JqKTsKIH0KIApAQCAtMjM0NSw2ICsyMzUyLDcgQEAKIAlwcmludGsoIlxuIik7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1lTRlMKIHN0YXRpYyBjaGFyICptYWtlX2RyaXZlcl9uYW1lKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7CiAJY2hhciAqZHJpdmVyX25hbWU7CkBAIC0yNDE5LDYgKzI0MjcsNyBAQAogCX0KIH0KIEVYUE9SVF9TWU1CT0wobW9kdWxlX3JlbW92ZV9kcml2ZXIpOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTU9EVkVSU0lPTlMKIC8qIEdlbmVyYXRlIHRoZSBzaWduYXR1cmUgZm9yIHN0cnVjdCBtb2R1bGUgaGVyZSwgdG9vLCBmb3IgbW9kdmVyc2lvbnMuICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggNTUzY2Y3ZC4uN2E3NTE1NyAxMDA2NDQKLS0tIGEva2VybmVsL3BhcmFtcy5jCisrKyBiL2tlcm5lbC9wYXJhbXMuYwpAQCAtMzAsOCArMzAsNiBAQAogI2RlZmluZSBERUJVR1AoZm10LCBhLi4uKQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIG1vZHVsZV9rdHlwZTsKLQogc3RhdGljIGlubGluZSBjaGFyIGRhc2gydW5kZXJzY29yZShjaGFyIGMpCiB7CiAJaWYgKGMgPT0gJy0nKQpAQCAtMzkxLDYgKzM4OSw3IEBACiAJc3RydWN0IHBhcmFtX2F0dHJpYnV0ZSBhdHRyc1swXTsKIH07CiAKKyNpZmRlZiBDT05GSUdfU1lTRlMKICNkZWZpbmUgdG9fcGFyYW1fYXR0cihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBhcmFtX2F0dHJpYnV0ZSwgbWF0dHIpOwogCiBzdGF0aWMgc3NpemVfdCBwYXJhbV9hdHRyX3Nob3coc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1hdHRyLApAQCAtNDI2LDYgKzQyNSw3IEBACiAJCXJldHVybiBsZW47CiAJcmV0dXJuIGVycjsKIH0KKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKICNkZWZpbmUgX19tb2Rpbml0CkBAIC00MzMsNiArNDMzLDcgQEAKICNkZWZpbmUgX19tb2Rpbml0IF9faW5pdAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU1lTRlMKIC8qCiAgKiBwYXJhbV9zeXNmc19zZXR1cCAtIHNldHVwIHN5c2ZzIHN1cHBvcnQgZm9yIG9uZSBtb2R1bGUgb3IgS0JVSUxEX01PRE5BTUUKICAqIEBtazogc3RydWN0IG1vZHVsZV9rb2JqZWN0IChjb250YWlucyBwYXJlbnQga29iamVjdCkKQEAgLTUwMCw5ICs1MDEsNyBAQAogCXJldHVybiBtcDsKIH0KIAotCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKLQogLyoKICAqIG1vZHVsZV9wYXJhbV9zeXNmc19zZXR1cCAtIHNldHVwIHN5c2ZzIHN1cHBvcnQgZm9yIG9uZSBtb2R1bGUKICAqIEBtb2Q6IG1vZHVsZQpAQCAtNjI1LDcgKzYyNCw2IEBACiAKIAogLyogbW9kdWxlLXJlbGF0ZWQgc3lzZnMgc3R1ZmYgKi8KLSNpZmRlZiBDT05GSUdfU1lTRlMKIAogI2RlZmluZSB0b19tb2R1bGVfYXR0cihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUsIGF0dHIpOwogI2RlZmluZSB0b19tb2R1bGVfa29iamVjdChuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IG1vZHVsZV9rb2JqZWN0LCBrb2JqKTsKQEAgLTY3Myw2ICs2NzEsOCBAQAogCS5zdG9yZSA9IG1vZHVsZV9hdHRyX3N0b3JlLAogfTsKIAorc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgbW9kdWxlX2t0eXBlOworCiBzdGF0aWMgaW50IHVldmVudF9maWx0ZXIoc3RydWN0IGtzZXQgKmtzZXQsIHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewogCXN0cnVjdCBrb2JqX3R5cGUgKmt0eXBlID0gZ2V0X2t0eXBlKGtvYmopOwpAQCAtNjg2LDE5ICs2ODYsMTIgQEAKIAkuZmlsdGVyID0gdWV2ZW50X2ZpbHRlciwKIH07CiAKLSNlbHNlCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBtb2R1bGVfc3lzZnNfb3BzID0gewotCS5zaG93ID0gTlVMTCwKLQkuc3RvcmUgPSBOVUxMLAotfTsKLSNlbmRpZgorZGVjbF9zdWJzeXMobW9kdWxlLCAmbW9kdWxlX2t0eXBlLCAmbW9kdWxlX3VldmVudF9vcHMpOwogCiBzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBtb2R1bGVfa3R5cGUgPSB7CiAJLnN5c2ZzX29wcyA9CSZtb2R1bGVfc3lzZnNfb3BzLAogfTsKIAotZGVjbF9zdWJzeXMobW9kdWxlLCAmbW9kdWxlX2t0eXBlLCAmbW9kdWxlX3VldmVudF9vcHMpOwotCiAvKgogICogcGFyYW1fc3lzZnNfaW5pdCAtIHdyYXBwZXIgZm9yIGJ1aWx0LWluIHBhcmFtcyBzdXBwb3J0CiAgKi8KQEAgLTcxNCwxMSArNzA3LDIxIEBACiAJfQogCiAJcGFyYW1fc3lzZnNfYnVpbHRpbigpOworCWttb2Rfc3lzZnNfaW5pdCgpOwogCiAJcmV0dXJuIDA7CiB9CiBzdWJzeXNfaW5pdGNhbGwocGFyYW1fc3lzZnNfaW5pdCk7CiAKKyNlbHNlCisjaWYgMAorc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgbW9kdWxlX3N5c2ZzX29wcyA9IHsKKwkuc2hvdyA9IE5VTEwsCisJLnN0b3JlID0gTlVMTCwKK307CisjZW5kaWYKKyNlbmRpZgorCiBFWFBPUlRfU1lNQk9MKHBhcmFtX3NldF9ieXRlKTsKIEVYUE9SVF9TWU1CT0wocGFyYW1fZ2V0X2J5dGUpOwogRVhQT1JUX1NZTUJPTChwYXJhbV9zZXRfc2hvcnQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggN2MzZTFlNi4uNjU3Zjc3NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAkJICogc2hvdWxkIGJlIGFibGUgdG8gc2VlIGl0LgogCQkgKi8KIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXAgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7CiAJCWlmIChwKSB7CiAJCQlpZiAoQ1BVQ0xPQ0tfUEVSVEhSRUFEKHdoaWNoX2Nsb2NrKSkgewpAQCAtMzEyLDEyICszMTIsMTcgQEAKIAkJCQkJZXJyb3IgPSBjcHVfY2xvY2tfc2FtcGxlKHdoaWNoX2Nsb2NrLAogCQkJCQkJCQkgcCwgJnJ0bik7CiAJCQkJfQotCQkJfSBlbHNlIGlmIChwLT50Z2lkID09IHBpZCAmJiBwLT5zaWduYWwpIHsKLQkJCQllcnJvciA9IGNwdV9jbG9ja19zYW1wbGVfZ3JvdXAod2hpY2hfY2xvY2ssCi0JCQkJCQkJICAgICAgIHAsICZydG4pOworCQkJfSBlbHNlIHsKKwkJCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQkJCWlmIChwLT50Z2lkID09IHBpZCAmJiBwLT5zaWduYWwpIHsKKwkJCQkJZXJyb3IgPQorCQkJCQkgICAgY3B1X2Nsb2NrX3NhbXBsZV9ncm91cCh3aGljaF9jbG9jaywKKwkJCQkJCQkgICAgICAgICAgIHAsICZydG4pOworCQkJCX0KKwkJCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJCQl9CiAJCX0KLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKaW5kZXggYTFiZjYxNi4uNDQzMThjYSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCQkgICAgc3RydWN0IGl0aW1lcnNwZWMgKiwgc3RydWN0IGl0aW1lcnNwZWMgKik7CiBzdGF0aWMgaW50IGNvbW1vbl90aW1lcl9kZWwoc3RydWN0IGtfaXRpbWVyICp0aW1lcik7CiAKLXN0YXRpYyBpbnQgcG9zaXhfdGltZXJfZm4oc3RydWN0IGhydGltZXIgKmRhdGEpOworc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHBvc2l4X3RpbWVyX2ZuKHN0cnVjdCBocnRpbWVyICpkYXRhKTsKIAogc3RhdGljIHN0cnVjdCBrX2l0aW1lciAqbG9ja190aW1lcih0aW1lcl90IHRpbWVyX2lkLCB1bnNpZ25lZCBsb25nICpmbGFncyk7CiAKQEAgLTMzNCwxMiArMzM0LDEyIEBACiAKICAqIFRoaXMgY29kZSBpcyBmb3IgQ0xPQ0tfUkVBTFRJTUUqIGFuZCBDTE9DS19NT05PVE9OSUMqIHRpbWVycy4KICAqLwotc3RhdGljIGludCBwb3NpeF90aW1lcl9mbihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcG9zaXhfdGltZXJfZm4oc3RydWN0IGhydGltZXIgKnRpbWVyKQogewogCXN0cnVjdCBrX2l0aW1lciAqdGltcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzaV9wcml2YXRlID0gMDsKLQlpbnQgcmV0ID0gSFJUSU1FUl9OT1JFU1RBUlQ7CisJZW51bSBocnRpbWVyX3Jlc3RhcnQgcmV0ID0gSFJUSU1FUl9OT1JFU1RBUlQ7CiAKIAl0aW1yID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3Qga19pdGltZXIsIGl0LnJlYWwudGltZXIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1yLT5pdF9sb2NrLCBmbGFncyk7CkBAIC0zNTYsNyArMzU2LDcgQEAKIAkJaWYgKHRpbXItPml0LnJlYWwuaW50ZXJ2YWwudHY2NCAhPSAwKSB7CiAJCQl0aW1yLT5pdF9vdmVycnVuICs9CiAJCQkJaHJ0aW1lcl9mb3J3YXJkKHRpbWVyLAotCQkJCQkJdGltZXItPmJhc2UtPnNvZnRpcnFfdGltZSwKKwkJCQkJCWhydGltZXJfY2JfZ2V0X3RpbWUodGltZXIpLAogCQkJCQkJdGltci0+aXQucmVhbC5pbnRlcnZhbCk7CiAJCQlyZXQgPSBIUlRJTUVSX1JFU1RBUlQ7CiAJCQkrK3RpbXItPml0X3JlcXVldWVfcGVuZGluZzsKQEAgLTcyMiw3ICs3MjIsNyBAQAogCWlmICghbmV3X3NldHRpbmctPml0X3ZhbHVlLnR2X3NlYyAmJiAhbmV3X3NldHRpbmctPml0X3ZhbHVlLnR2X25zZWMpCiAJCXJldHVybiAwOwogCi0JbW9kZSA9IGZsYWdzICYgVElNRVJfQUJTVElNRSA/IEhSVElNRVJfQUJTIDogSFJUSU1FUl9SRUw7CisJbW9kZSA9IGZsYWdzICYgVElNRVJfQUJTVElNRSA/IEhSVElNRVJfTU9ERV9BQlMgOiBIUlRJTUVSX01PREVfUkVMOwogCWhydGltZXJfaW5pdCgmdGltci0+aXQucmVhbC50aW1lciwgdGltci0+aXRfY2xvY2ssIG1vZGUpOwogCXRpbXItPml0LnJlYWwudGltZXIuZnVuY3Rpb24gPSBwb3NpeF90aW1lcl9mbjsKIApAQCAtNzM0LDcgKzczNCw3IEBACiAJLyogU0lHRVZfTk9ORSB0aW1lcnMgYXJlIG5vdCBxdWV1ZWQgISBTZWUgY29tbW9uX3RpbWVyX2dldCAqLwogCWlmICgoKHRpbXItPml0X3NpZ2V2X25vdGlmeSAmIH5TSUdFVl9USFJFQURfSUQpID09IFNJR0VWX05PTkUpKSB7CiAJCS8qIFNldHVwIGNvcnJlY3QgZXhwaXJ5IHRpbWUgZm9yIHJlbGF0aXZlIHRpbWVycyAqLwotCQlpZiAobW9kZSA9PSBIUlRJTUVSX1JFTCkKKwkJaWYgKG1vZGUgPT0gSFJUSU1FUl9NT0RFX1JFTCkKIAkJCXRpbWVyLT5leHBpcmVzID0ga3RpbWVfYWRkKHRpbWVyLT5leHBpcmVzLAogCQkJCQkJICAgdGltZXItPmJhc2UtPmdldF90aW1lKCkpOwogCQlyZXR1cm4gMDsKQEAgLTk1MCw3ICs5NTAsOCBAQAogCQkJIHN0cnVjdCB0aW1lc3BlYyAqdHNhdmUsIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnJtdHApCiB7CiAJcmV0dXJuIGhydGltZXJfbmFub3NsZWVwKHRzYXZlLCBybXRwLCBmbGFncyAmIFRJTUVSX0FCU1RJTUUgPwotCQkJCSBIUlRJTUVSX0FCUyA6IEhSVElNRVJfUkVMLCB3aGljaF9jbG9jayk7CisJCQkJIEhSVElNRVJfTU9ERV9BQlMgOiBIUlRJTUVSX01PREVfUkVMLAorCQkJCSB3aGljaF9jbG9jayk7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZwpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IDBjMTUxODcuLjRiNDdlNTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTU0LDcgKzU0LDcgQEAKIH07CiAKIC8qCi0gKiBMb3cgbGV2ZXIgZHJpdmVycyBtYXkgbmVlZCB0aGF0IHRvIGtub3cgaWYgdGhleSBjYW4gc2NoZWR1bGUgaW4KKyAqIExvdyBsZXZlbCBkcml2ZXJzIG1heSBuZWVkIHRoYXQgdG8ga25vdyBpZiB0aGV5IGNhbiBzY2hlZHVsZSBpbgogICogdGhlaXIgdW5ibGFuaygpIGNhbGxiYWNrIG9yIG5vdC4gU28gbGV0J3MgZXhwb3J0IGl0LgogICovCiBpbnQgb29wc19pbl9wcm9ncmVzczsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ydG11dGV4LmMgYi9rZXJuZWwvcnRtdXRleC5jCmluZGV4IDRhYjE3ZGEuLjE4MDk3OGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ydG11dGV4LmMKKysrIGIva2VybmVsL3J0bXV0ZXguYwpAQCAtNjI1LDcgKzYyNSw3IEBACiAJLyogU2V0dXAgdGhlIHRpbWVyLCB3aGVuIHRpbWVvdXQgIT0gTlVMTCAqLwogCWlmICh1bmxpa2VseSh0aW1lb3V0KSkKIAkJaHJ0aW1lcl9zdGFydCgmdGltZW91dC0+dGltZXIsIHRpbWVvdXQtPnRpbWVyLmV4cGlyZXMsCi0JCQkgICAgICBIUlRJTUVSX0FCUyk7CisJCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKIAogCWZvciAoOzspIHsKIAkJLyogVHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2s6ICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDA4Zjg2MTc4Li4wZGM3NTcyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMTg1Myw2ICsxODUzLDEzIEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBuZXh0LT5tbTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSA9IHByZXYtPmFjdGl2ZV9tbTsKIAorCS8qCisJICogRm9yIHBhcmF2aXJ0LCB0aGlzIGlzIGNvdXBsZWQgd2l0aCBhbiBleGl0IGluIHN3aXRjaF90byB0bworCSAqIGNvbWJpbmUgdGhlIHBhZ2UgdGFibGUgcmVsb2FkIGFuZCB0aGUgc3dpdGNoIGJhY2tlbmQgaW50bworCSAqIG9uZSBoeXBlcmNhbGwuCisJICovCisJYXJjaF9lbnRlcl9sYXp5X2NwdV9tb2RlKCk7CisKIAlpZiAoIW1tKSB7CiAJCW5leHQtPmFjdGl2ZV9tbSA9IG9sZG1tOwogCQlhdG9taWNfaW5jKCZvbGRtbS0+bW1fY291bnQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDgwNzJlNTYuLmUyYTdkNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTQ1NiwyNiArNDU2LDUwIEBACiBpbnQgZGVxdWV1ZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHNpZ3NldF90ICptYXNrLCBzaWdpbmZvX3QgKmluZm8pCiB7CiAJaW50IHNpZ25yID0gX19kZXF1ZXVlX3NpZ25hbCgmdHNrLT5wZW5kaW5nLCBtYXNrLCBpbmZvKTsKLQlpZiAoIXNpZ25yKQorCWlmICghc2lnbnIpIHsKIAkJc2lnbnIgPSBfX2RlcXVldWVfc2lnbmFsKCZ0c2stPnNpZ25hbC0+c2hhcmVkX3BlbmRpbmcsCiAJCQkJCSBtYXNrLCBpbmZvKTsKKwkJLyoKKwkJICogaXRpbWVyIHNpZ25hbCA/CisJCSAqCisJCSAqIGl0aW1lcnMgYXJlIHByb2Nlc3Mgc2hhcmVkIGFuZCB3ZSByZXN0YXJ0IHBlcmlvZGljCisJCSAqIGl0aW1lcnMgaW4gdGhlIHNpZ25hbCBkZWxpdmVyeSBwYXRoIHRvIHByZXZlbnQgRG9TCisJCSAqIGF0dGFja3MgaW4gdGhlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBjYXNlLiBUaGlzIGlzCisJCSAqIGNvbXBsaWFudCB3aXRoIHRoZSBvbGQgd2F5IG9mIHNlbGYgcmVzdGFydGluZworCQkgKiBpdGltZXJzLCBhcyB0aGUgU0lHQUxSTSBpcyBhIGxlZ2FjeSBzaWduYWwgYW5kIG9ubHkKKwkJICogcXVldWVkIG9uY2UuIENoYW5naW5nIHRoZSByZXN0YXJ0IGJlaGF2aW91ciB0bworCQkgKiByZXN0YXJ0IHRoZSB0aW1lciBpbiB0aGUgc2lnbmFsIGRlcXVldWUgcGF0aCBpcworCQkgKiByZWR1Y2luZyB0aGUgdGltZXIgbm9pc2Ugb24gaGVhdnkgbG9hZGVkICFoaWdocmVzCisJCSAqIHN5c3RlbXMgdG9vLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHNpZ25yID09IFNJR0FMUk0pKSB7CisJCQlzdHJ1Y3QgaHJ0aW1lciAqdG1yID0gJnRzay0+c2lnbmFsLT5yZWFsX3RpbWVyOworCisJCQlpZiAoIWhydGltZXJfaXNfcXVldWVkKHRtcikgJiYKKwkJCSAgICB0c2stPnNpZ25hbC0+aXRfcmVhbF9pbmNyLnR2NjQgIT0gMCkgeworCQkJCWhydGltZXJfZm9yd2FyZCh0bXIsIHRtci0+YmFzZS0+Z2V0X3RpbWUoKSwKKwkJCQkJCXRzay0+c2lnbmFsLT5pdF9yZWFsX2luY3IpOworCQkJCWhydGltZXJfcmVzdGFydCh0bXIpOworCQkJfQorCQl9CisJfQogCXJlY2FsY19zaWdwZW5kaW5nX3Rzayh0c2spOwotIAlpZiAoc2lnbnIgJiYgdW5saWtlbHkoc2lnX2tlcm5lbF9zdG9wKHNpZ25yKSkpIHsKLSAJCS8qCi0gCQkgKiBTZXQgYSBtYXJrZXIgdGhhdCB3ZSBoYXZlIGRlcXVldWVkIGEgc3RvcCBzaWduYWwuICBPdXIKLSAJCSAqIGNhbGxlciBtaWdodCByZWxlYXNlIHRoZSBzaWdsb2NrIGFuZCB0aGVuIHRoZSBwZW5kaW5nCi0gCQkgKiBzdG9wIHNpZ25hbCBpdCBpcyBhYm91dCB0byBwcm9jZXNzIGlzIG5vIGxvbmdlciBpbiB0aGUKLSAJCSAqIHBlbmRpbmcgYml0bWFza3MsIGJ1dCBtdXN0IHN0aWxsIGJlIGNsZWFyZWQgYnkgYSBTSUdDT05UCi0gCQkgKiAoYW5kIG92ZXJydWxlZCBieSBhIFNJR0tJTEwpLiAgU28gdGhvc2UgY2FzZXMgY2xlYXIgdGhpcwotIAkJICogc2hhcmVkIGZsYWcgYWZ0ZXIgd2UndmUgc2V0IGl0LiAgTm90ZSB0aGF0IHRoaXMgZmxhZyBtYXkKLSAJCSAqIHJlbWFpbiBzZXQgYWZ0ZXIgdGhlIHNpZ25hbCB3ZSByZXR1cm4gaXMgaWdub3JlZCBvcgotIAkJICogaGFuZGxlZC4gIFRoYXQgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZSBpdHMgb25seSBwdXJwb3NlCi0gCQkgKiBpcyB0byBhbGVydCBzdG9wLXNpZ25hbCBwcm9jZXNzaW5nIGNvZGUgd2hlbiBhbm90aGVyCi0gCQkgKiBwcm9jZXNzb3IgaGFzIGNvbWUgYWxvbmcgYW5kIGNsZWFyZWQgdGhlIGZsYWcuCi0gCQkgKi8KLSAJCWlmICghKHRzay0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9HUk9VUF9FWElUKSkKLSAJCQl0c2stPnNpZ25hbC0+ZmxhZ3MgfD0gU0lHTkFMX1NUT1BfREVRVUVVRUQ7Ci0gCX0KKwlpZiAoc2lnbnIgJiYgdW5saWtlbHkoc2lnX2tlcm5lbF9zdG9wKHNpZ25yKSkpIHsKKwkJLyoKKwkJICogU2V0IGEgbWFya2VyIHRoYXQgd2UgaGF2ZSBkZXF1ZXVlZCBhIHN0b3Agc2lnbmFsLiAgT3VyCisJCSAqIGNhbGxlciBtaWdodCByZWxlYXNlIHRoZSBzaWdsb2NrIGFuZCB0aGVuIHRoZSBwZW5kaW5nCisJCSAqIHN0b3Agc2lnbmFsIGl0IGlzIGFib3V0IHRvIHByb2Nlc3MgaXMgbm8gbG9uZ2VyIGluIHRoZQorCQkgKiBwZW5kaW5nIGJpdG1hc2tzLCBidXQgbXVzdCBzdGlsbCBiZSBjbGVhcmVkIGJ5IGEgU0lHQ09OVAorCQkgKiAoYW5kIG92ZXJydWxlZCBieSBhIFNJR0tJTEwpLiAgU28gdGhvc2UgY2FzZXMgY2xlYXIgdGhpcworCQkgKiBzaGFyZWQgZmxhZyBhZnRlciB3ZSd2ZSBzZXQgaXQuICBOb3RlIHRoYXQgdGhpcyBmbGFnIG1heQorCQkgKiByZW1haW4gc2V0IGFmdGVyIHRoZSBzaWduYWwgd2UgcmV0dXJuIGlzIGlnbm9yZWQgb3IKKwkJICogaGFuZGxlZC4gIFRoYXQgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZSBpdHMgb25seSBwdXJwb3NlCisJCSAqIGlzIHRvIGFsZXJ0IHN0b3Atc2lnbmFsIHByb2Nlc3NpbmcgY29kZSB3aGVuIGFub3RoZXIKKwkJICogcHJvY2Vzc29yIGhhcyBjb21lIGFsb25nIGFuZCBjbGVhcmVkIHRoZSBmbGFnLgorCQkgKi8KKwkJaWYgKCEodHNrLT5zaWduYWwtPmZsYWdzICYgU0lHTkFMX0dST1VQX0VYSVQpKQorCQkJdHNrLT5zaWduYWwtPmZsYWdzIHw9IFNJR05BTF9TVE9QX0RFUVVFVUVEOworCX0KIAlpZiAoIHNpZ25yICYmCiAJICAgICAoKGluZm8tPnNpX2NvZGUgJiBfX1NJX01BU0spID09IF9fU0lfVElNRVIpICYmCiAJICAgICBpbmZvLT5zaV9zeXNfcHJpdmF0ZSl7CmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCA5MThlNTJkLi44Yjc1MDA4IDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC90aWNrLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAvKgpAQCAtMjczLDYgKzI3NCwxOCBAQAogCiAjZW5kaWYKIAorLyoKKyAqIEVudGVyIGFuIGludGVycnVwdCBjb250ZXh0LgorICovCit2b2lkIGlycV9lbnRlcih2b2lkKQoreworCV9faXJxX2VudGVyKCk7CisjaWZkZWYgQ09ORklHX05PX0haCisJaWYgKGlkbGVfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkpCisJCXRpY2tfbm9oel91cGRhdGVfamlmZmllcygpOworI2VuZGlmCit9CisKICNpZmRlZiBfX0FSQ0hfSVJRX0VYSVRfSVJRU19ESVNBQkxFRAogIyBkZWZpbmUgaW52b2tlX3NvZnRpcnEoKQlfX2RvX3NvZnRpcnEoKQogI2Vsc2UKQEAgLTI4OSw2ICszMDIsMTIgQEAKIAlzdWJfcHJlZW1wdF9jb3VudChJUlFfRVhJVF9PRkZTRVQpOwogCWlmICghaW5faW50ZXJydXB0KCkgJiYgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkpCiAJCWludm9rZV9zb2Z0aXJxKCk7CisKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwkvKiBNYWtlIHN1cmUgdGhhdCB0aW1lciB3aGVlbCB1cGRhdGVzIGFyZSBwcm9wYWdhdGVkICovCisJaWYgKCFpbl9pbnRlcnJ1cHQoKSAmJiBpZGxlX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpICYmICFuZWVkX3Jlc2NoZWQoKSkKKwkJdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljaygpOworI2VuZGlmCiAJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS5jIGIva2VybmVsL3RpbWUuYwppbmRleCAwZTAxN2JmZi4uYzZjODBlYTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lLmMKKysrIGIva2VybmVsL3RpbWUuYwpAQCAtNDcwLDYgKzQ3MCwyNjAgQEAKIAlyZXR1cm4gdHY7CiB9CiAKKy8qCisgKiBDb252ZXJ0IGppZmZpZXMgdG8gbWlsbGlzZWNvbmRzIGFuZCBiYWNrLgorICoKKyAqIEF2b2lkIHVubmVjZXNzYXJ5IG11bHRpcGxpY2F0aW9ucy9kaXZpc2lvbnMgaW4gdGhlCisgKiB0d28gbW9zdCBjb21tb24gSFogY2FzZXM6CisgKi8KK3Vuc2lnbmVkIGludCBqaWZmaWVzX3RvX21zZWNzKGNvbnN0IHVuc2lnbmVkIGxvbmcgaikKK3sKKyNpZiBIWiA8PSBNU0VDX1BFUl9TRUMgJiYgIShNU0VDX1BFUl9TRUMgJSBIWikKKwlyZXR1cm4gKE1TRUNfUEVSX1NFQyAvIEhaKSAqIGo7CisjZWxpZiBIWiA+IE1TRUNfUEVSX1NFQyAmJiAhKEhaICUgTVNFQ19QRVJfU0VDKQorCXJldHVybiAoaiArIChIWiAvIE1TRUNfUEVSX1NFQykgLSAxKS8oSFogLyBNU0VDX1BFUl9TRUMpOworI2Vsc2UKKwlyZXR1cm4gKGogKiBNU0VDX1BFUl9TRUMpIC8gSFo7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woamlmZmllc190b19tc2Vjcyk7CisKK3Vuc2lnbmVkIGludCBqaWZmaWVzX3RvX3VzZWNzKGNvbnN0IHVuc2lnbmVkIGxvbmcgaikKK3sKKyNpZiBIWiA8PSBVU0VDX1BFUl9TRUMgJiYgIShVU0VDX1BFUl9TRUMgJSBIWikKKwlyZXR1cm4gKFVTRUNfUEVSX1NFQyAvIEhaKSAqIGo7CisjZWxpZiBIWiA+IFVTRUNfUEVSX1NFQyAmJiAhKEhaICUgVVNFQ19QRVJfU0VDKQorCXJldHVybiAoaiArIChIWiAvIFVTRUNfUEVSX1NFQykgLSAxKS8oSFogLyBVU0VDX1BFUl9TRUMpOworI2Vsc2UKKwlyZXR1cm4gKGogKiBVU0VDX1BFUl9TRUMpIC8gSFo7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woamlmZmllc190b191c2Vjcyk7CisKKy8qCisgKiBXaGVuIHdlIGNvbnZlcnQgdG8gamlmZmllcyB0aGVuIHdlIGludGVycHJldCBpbmNvbWluZyB2YWx1ZXMKKyAqIHRoZSBmb2xsb3dpbmcgd2F5OgorICoKKyAqIC0gbmVnYXRpdmUgdmFsdWVzIG1lYW4gJ2luZmluaXRlIHRpbWVvdXQnIChNQVhfSklGRllfT0ZGU0VUKQorICoKKyAqIC0gJ3RvbyBsYXJnZScgdmFsdWVzIFt0aGF0IHdvdWxkIHJlc3VsdCBpbiBsYXJnZXIgdGhhbgorICogICBNQVhfSklGRllfT0ZGU0VUIHZhbHVlc10gbWVhbiAnaW5maW5pdGUgdGltZW91dCcgdG9vLgorICoKKyAqIC0gYWxsIG90aGVyIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGppZmZpZXMgYnkgZWl0aGVyIG11bHRpcGx5aW5nCisgKiAgIHRoZSBpbnB1dCB2YWx1ZSBieSBhIGZhY3RvciBvciBkaXZpZGluZyBpdCB3aXRoIGEgZmFjdG9yCisgKgorICogV2UgbXVzdCBhbHNvIGJlIGNhcmVmdWwgYWJvdXQgMzItYml0IG92ZXJmbG93cy4KKyAqLwordW5zaWduZWQgbG9uZyBtc2Vjc190b19qaWZmaWVzKGNvbnN0IHVuc2lnbmVkIGludCBtKQoreworCS8qCisJICogTmVnYXRpdmUgdmFsdWUsIG1lYW5zIGluZmluaXRlIHRpbWVvdXQ6CisJICovCisJaWYgKChpbnQpbSA8IDApCisJCXJldHVybiBNQVhfSklGRllfT0ZGU0VUOworCisjaWYgSFogPD0gTVNFQ19QRVJfU0VDICYmICEoTVNFQ19QRVJfU0VDICUgSFopCisJLyoKKwkgKiBIWiBpcyBlcXVhbCB0byBvciBzbWFsbGVyIHRoYW4gMTAwMCwgYW5kIDEwMDAgaXMgYSBuaWNlCisJICogcm91bmQgbXVsdGlwbGUgb2YgSFosIGRpdmlkZSB3aXRoIHRoZSBmYWN0b3IgYmV0d2VlbiB0aGVtLAorCSAqIGJ1dCByb3VuZCB1cHdhcmRzOgorCSAqLworCXJldHVybiAobSArIChNU0VDX1BFUl9TRUMgLyBIWikgLSAxKSAvIChNU0VDX1BFUl9TRUMgLyBIWik7CisjZWxpZiBIWiA+IE1TRUNfUEVSX1NFQyAmJiAhKEhaICUgTVNFQ19QRVJfU0VDKQorCS8qCisJICogSFogaXMgbGFyZ2VyIHRoYW4gMTAwMCwgYW5kIEhaIGlzIGEgbmljZSByb3VuZCBtdWx0aXBsZSBvZgorCSAqIDEwMDAgLSBzaW1wbHkgbXVsdGlwbHkgd2l0aCB0aGUgZmFjdG9yIGJldHdlZW4gdGhlbS4KKwkgKgorCSAqIEJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBjYW5ub3QKKwkgKiBvdmVyZmxvdzoKKwkgKi8KKwlpZiAobSA+IGppZmZpZXNfdG9fbXNlY3MoTUFYX0pJRkZZX09GRlNFVCkpCisJCXJldHVybiBNQVhfSklGRllfT0ZGU0VUOworCisJcmV0dXJuIG0gKiAoSFogLyBNU0VDX1BFUl9TRUMpOworI2Vsc2UKKwkvKgorCSAqIEdlbmVyaWMgY2FzZSAtIG11bHRpcGx5LCByb3VuZCBhbmQgZGl2aWRlLiBCdXQgZmlyc3QKKwkgKiBjaGVjayB0aGF0IGlmIHdlIGFyZSBkb2luZyBhIG5ldCBtdWx0aXBsaWNhdGlvbiwgdGhhdAorCSAqIHdlIHdvdWxkbnQgb3ZlcmZsb3c6CisJICovCisJaWYgKEhaID4gTVNFQ19QRVJfU0VDICYmIG0gPiBqaWZmaWVzX3RvX21zZWNzKE1BWF9KSUZGWV9PRkZTRVQpKQorCQlyZXR1cm4gTUFYX0pJRkZZX09GRlNFVDsKKworCXJldHVybiAobSAqIEhaICsgTVNFQ19QRVJfU0VDIC0gMSkgLyBNU0VDX1BFUl9TRUM7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0wobXNlY3NfdG9famlmZmllcyk7CisKK3Vuc2lnbmVkIGxvbmcgdXNlY3NfdG9famlmZmllcyhjb25zdCB1bnNpZ25lZCBpbnQgdSkKK3sKKwlpZiAodSA+IGppZmZpZXNfdG9fdXNlY3MoTUFYX0pJRkZZX09GRlNFVCkpCisJCXJldHVybiBNQVhfSklGRllfT0ZGU0VUOworI2lmIEhaIDw9IFVTRUNfUEVSX1NFQyAmJiAhKFVTRUNfUEVSX1NFQyAlIEhaKQorCXJldHVybiAodSArIChVU0VDX1BFUl9TRUMgLyBIWikgLSAxKSAvIChVU0VDX1BFUl9TRUMgLyBIWik7CisjZWxpZiBIWiA+IFVTRUNfUEVSX1NFQyAmJiAhKEhaICUgVVNFQ19QRVJfU0VDKQorCXJldHVybiB1ICogKEhaIC8gVVNFQ19QRVJfU0VDKTsKKyNlbHNlCisJcmV0dXJuICh1ICogSFogKyBVU0VDX1BFUl9TRUMgLSAxKSAvIFVTRUNfUEVSX1NFQzsKKyNlbmRpZgorfQorRVhQT1JUX1NZTUJPTCh1c2Vjc190b19qaWZmaWVzKTsKKworLyoKKyAqIFRoZSBUSUNLX05TRUMgLSAxIHJvdW5kcyB1cCB0aGUgdmFsdWUgdG8gdGhlIG5leHQgcmVzb2x1dGlvbi4gIE5vdGUKKyAqIHRoYXQgYSByZW1haW5kZXIgc3VidHJhY3QgaGVyZSB3b3VsZCBub3QgZG8gdGhlIHJpZ2h0IHRoaW5nIGFzIHRoZQorICogcmVzb2x1dGlvbiB2YWx1ZXMgZG9uJ3QgZmFsbCBvbiBzZWNvbmQgYm91bmRyaWVzLiAgSS5lLiB0aGUgbGluZToKKyAqIG5zZWMgLT0gbnNlYyAlIFRJQ0tfTlNFQzsgaXMgTk9UIGEgY29ycmVjdCByZXNvbHV0aW9uIHJvdW5kaW5nLgorICoKKyAqIFJhdGhlciwgd2UganVzdCBzaGlmdCB0aGUgYml0cyBvZmYgdGhlIHJpZ2h0LgorICoKKyAqIFRoZSA+PiAoTlNFQ19KSUZGSUVfU0MgLSBTRUNfSklGRklFX1NDKSBjb252ZXJ0cyB0aGUgc2NhbGVkIG5zZWMKKyAqIHZhbHVlIHRvIGEgc2NhbGVkIHNlY29uZCB2YWx1ZS4KKyAqLwordW5zaWduZWQgbG9uZwordGltZXNwZWNfdG9famlmZmllcyhjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgc2VjID0gdmFsdWUtPnR2X3NlYzsKKwlsb25nIG5zZWMgPSB2YWx1ZS0+dHZfbnNlYyArIFRJQ0tfTlNFQyAtIDE7CisKKwlpZiAoc2VjID49IE1BWF9TRUNfSU5fSklGRklFUyl7CisJCXNlYyA9IE1BWF9TRUNfSU5fSklGRklFUzsKKwkJbnNlYyA9IDA7CisJfQorCXJldHVybiAoKCh1NjQpc2VjICogU0VDX0NPTlZFUlNJT04pICsKKwkJKCgodTY0KW5zZWMgKiBOU0VDX0NPTlZFUlNJT04pID4+CisJCSAoTlNFQ19KSUZGSUVfU0MgLSBTRUNfSklGRklFX1NDKSkpID4+IFNFQ19KSUZGSUVfU0M7CisKK30KK0VYUE9SVF9TWU1CT0wodGltZXNwZWNfdG9famlmZmllcyk7CisKK3ZvaWQKK2ppZmZpZXNfdG9fdGltZXNwZWMoY29uc3QgdW5zaWduZWQgbG9uZyBqaWZmaWVzLCBzdHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQoreworCS8qCisJICogQ29udmVydCBqaWZmaWVzIHRvIG5hbm9zZWNvbmRzIGFuZCBzZXBhcmF0ZSB3aXRoCisJICogb25lIGRpdmlkZS4KKwkgKi8KKwl1NjQgbnNlYyA9ICh1NjQpamlmZmllcyAqIFRJQ0tfTlNFQzsKKwl2YWx1ZS0+dHZfc2VjID0gZGl2X2xvbmdfbG9uZ19yZW0obnNlYywgTlNFQ19QRVJfU0VDLCAmdmFsdWUtPnR2X25zZWMpOworfQorRVhQT1JUX1NZTUJPTChqaWZmaWVzX3RvX3RpbWVzcGVjKTsKKworLyogU2FtZSBmb3IgInRpbWV2YWwiCisgKgorICogV2VsbCwgYWxtb3N0LiAgVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHRoZSByZWFsIHN5c3RlbSByZXNvbHV0aW9uIGlzCisgKiBpbiBuYW5vc2Vjb25kcyBhbmQgdGhlIHZhbHVlIGJlaW5nIGNvbnZlcnRlZCBpcyBpbiBtaWNybyBzZWNvbmRzLgorICogQWxzbyBmb3Igc29tZSBtYWNoaW5lcyAodGhvc2UgdGhhdCB1c2UgSFogPSAxMDI0LCBpbi1wYXJ0aWN1bGFyKSwKKyAqIHRoZXJlIGlzIGEgTEFSR0UgZXJyb3IgaW4gdGhlIHRpY2sgc2l6ZSBpbiBtaWNyb3NlY29uZHMuCisKKyAqIFRoZSBzb2x1dGlvbiB3ZSB1c2UgaXMgdG8gZG8gdGhlIHJvdW5kaW5nIEFGVEVSIHdlIGNvbnZlcnQgdGhlCisgKiBtaWNyb3NlY29uZCBwYXJ0LiAgVGh1cyB0aGUgVVNFQ19ST1VORCwgdGhlIGJpdHMgdG8gYmUgc2hpZnRlZCBvZmYuCisgKiBJbnN0cnVjdGlvbiB3aXNlLCB0aGlzIHNob3VsZCBjb3N0IG9ubHkgYW4gYWRkaXRpb25hbCBhZGQgd2l0aCBjYXJyeQorICogaW5zdHJ1Y3Rpb24gYWJvdmUgdGhlIHdheSBpdCB3YXMgZG9uZSBhYm92ZS4KKyAqLwordW5zaWduZWQgbG9uZwordGltZXZhbF90b19qaWZmaWVzKGNvbnN0IHN0cnVjdCB0aW1ldmFsICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHNlYyA9IHZhbHVlLT50dl9zZWM7CisJbG9uZyB1c2VjID0gdmFsdWUtPnR2X3VzZWM7CisKKwlpZiAoc2VjID49IE1BWF9TRUNfSU5fSklGRklFUyl7CisJCXNlYyA9IE1BWF9TRUNfSU5fSklGRklFUzsKKwkJdXNlYyA9IDA7CisJfQorCXJldHVybiAoKCh1NjQpc2VjICogU0VDX0NPTlZFUlNJT04pICsKKwkJKCgodTY0KXVzZWMgKiBVU0VDX0NPTlZFUlNJT04gKyBVU0VDX1JPVU5EKSA+PgorCQkgKFVTRUNfSklGRklFX1NDIC0gU0VDX0pJRkZJRV9TQykpKSA+PiBTRUNfSklGRklFX1NDOworfQorCit2b2lkIGppZmZpZXNfdG9fdGltZXZhbChjb25zdCB1bnNpZ25lZCBsb25nIGppZmZpZXMsIHN0cnVjdCB0aW1ldmFsICp2YWx1ZSkKK3sKKwkvKgorCSAqIENvbnZlcnQgamlmZmllcyB0byBuYW5vc2Vjb25kcyBhbmQgc2VwYXJhdGUgd2l0aAorCSAqIG9uZSBkaXZpZGUuCisJICovCisJdTY0IG5zZWMgPSAodTY0KWppZmZpZXMgKiBUSUNLX05TRUM7CisJbG9uZyB0dl91c2VjOworCisJdmFsdWUtPnR2X3NlYyA9IGRpdl9sb25nX2xvbmdfcmVtKG5zZWMsIE5TRUNfUEVSX1NFQywgJnR2X3VzZWMpOworCXR2X3VzZWMgLz0gTlNFQ19QRVJfVVNFQzsKKwl2YWx1ZS0+dHZfdXNlYyA9IHR2X3VzZWM7Cit9CisKKy8qCisgKiBDb252ZXJ0IGppZmZpZXMvamlmZmllc182NCB0byBjbG9ja190IGFuZCBiYWNrLgorICovCitjbG9ja190IGppZmZpZXNfdG9fY2xvY2tfdChsb25nIHgpCit7CisjaWYgKFRJQ0tfTlNFQyAlIChOU0VDX1BFUl9TRUMgLyBVU0VSX0haKSkgPT0gMAorCXJldHVybiB4IC8gKEhaIC8gVVNFUl9IWik7CisjZWxzZQorCXU2NCB0bXAgPSAodTY0KXggKiBUSUNLX05TRUM7CisJZG9fZGl2KHRtcCwgKE5TRUNfUEVSX1NFQyAvIFVTRVJfSFopKTsKKwlyZXR1cm4gKGxvbmcpdG1wOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGppZmZpZXNfdG9fY2xvY2tfdCk7CisKK3Vuc2lnbmVkIGxvbmcgY2xvY2tfdF90b19qaWZmaWVzKHVuc2lnbmVkIGxvbmcgeCkKK3sKKyNpZiAoSFogJSBVU0VSX0haKT09MAorCWlmICh4ID49IH4wVUwgLyAoSFogLyBVU0VSX0haKSkKKwkJcmV0dXJuIH4wVUw7CisJcmV0dXJuIHggKiAoSFogLyBVU0VSX0haKTsKKyNlbHNlCisJdTY0IGppZjsKKworCS8qIERvbid0IHdvcnJ5IGFib3V0IGxvc3Mgb2YgcHJlY2lzaW9uIGhlcmUgLi4gKi8KKwlpZiAoeCA+PSB+MFVMIC8gSFogKiBVU0VSX0haKQorCQlyZXR1cm4gfjBVTDsKKworCS8qIC4uIGJ1dCBkbyB0cnkgdG8gY29udGFpbiBpdCBoZXJlICovCisJamlmID0geCAqICh1NjQpIEhaOworCWRvX2RpdihqaWYsIFVTRVJfSFopOworCXJldHVybiBqaWY7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woY2xvY2tfdF90b19qaWZmaWVzKTsKKwordTY0IGppZmZpZXNfNjRfdG9fY2xvY2tfdCh1NjQgeCkKK3sKKyNpZiAoVElDS19OU0VDICUgKE5TRUNfUEVSX1NFQyAvIFVTRVJfSFopKSA9PSAwCisJZG9fZGl2KHgsIEhaIC8gVVNFUl9IWik7CisjZWxzZQorCS8qCisJICogVGhlcmUgYXJlIGJldHRlciB3YXlzIHRoYXQgZG9uJ3Qgb3ZlcmZsb3cgZWFybHksCisJICogYnV0IGV2ZW4gdGhpcyBkb2Vzbid0IG92ZXJmbG93IGluIGh1bmRyZWRzIG9mIHllYXJzCisJICogaW4gNjQgYml0cywgc28uLgorCSAqLworCXggKj0gVElDS19OU0VDOworCWRvX2Rpdih4LCAoTlNFQ19QRVJfU0VDIC8gVVNFUl9IWikpOworI2VuZGlmCisJcmV0dXJuIHg7Cit9CisKK0VYUE9SVF9TWU1CT0woamlmZmllc182NF90b19jbG9ja190KTsKKwordTY0IG5zZWNfdG9fY2xvY2tfdCh1NjQgeCkKK3sKKyNpZiAoTlNFQ19QRVJfU0VDICUgVVNFUl9IWikgPT0gMAorCWRvX2Rpdih4LCAoTlNFQ19QRVJfU0VDIC8gVVNFUl9IWikpOworI2VsaWYgKFVTRVJfSFogJSA1MTIpID09IDAKKwl4ICo9IFVTRVJfSFovNTEyOworCWRvX2Rpdih4LCAoTlNFQ19QRVJfU0VDIC8gNTEyKSk7CisjZWxzZQorCS8qCisgICAgICAgICAqIG1heCByZWxhdGl2ZSBlcnJvciA1LjdlLTggKDEuOHMgcGVyIHllYXIpIGZvciBVU0VSX0haIDw9IDEwMjQsCisgICAgICAgICAqIG92ZXJmbG93IGFmdGVyIDY0Ljk5IHllYXJzLgorICAgICAgICAgKiBleGFjdCBmb3IgSFo9NjAsIDcyLCA5MCwgMTIwLCAxNDQsIDE4MCwgMzAwLCA2MDAsIDkwMCwgLi4uCisgICAgICAgICAqLworCXggKj0gOTsKKwlkb19kaXYoeCwgKHVuc2lnbmVkIGxvbmcpKCg5dWxsICogTlNFQ19QRVJfU0VDICsgKFVTRVJfSFovMikpIC8KKwkJCQkgIFVTRVJfSFopKTsKKyNlbmRpZgorCXJldHVybiB4OworfQorCiAjaWYgKEJJVFNfUEVSX0xPTkcgPCA2NCkKIHU2NCBnZXRfamlmZmllc182NCh2b2lkKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvS2NvbmZpZyBiL2tlcm5lbC90aW1lL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2MzUxMQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90aW1lL0tjb25maWcKQEAgLTAsMCArMSwyNSBAQAorIworIyBUaW1lciBzdWJzeXN0ZW0gcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyMKK2NvbmZpZyBUSUNLX09ORVNIT1QKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBOT19IWgorCWJvb2wgIlRpY2tsZXNzIFN5c3RlbSAoRHluYW1pYyBUaWNrcykiCisJZGVwZW5kcyBvbiBHRU5FUklDX1RJTUUgJiYgR0VORVJJQ19DTE9DS0VWRU5UUworCXNlbGVjdCBUSUNLX09ORVNIT1QKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgdGlja2xlc3Mgc3lzdGVtOiB0aW1lciBpbnRlcnJ1cHRzIHdpbGwKKwkgIG9ubHkgdHJpZ2dlciBvbiBhbiBhcy1uZWVkZWQgYmFzaXMgYm90aCB3aGVuIHRoZSBzeXN0ZW0gaXMKKwkgIGJ1c3kgYW5kIHdoZW4gdGhlIHN5c3RlbSBpcyBpZGxlLgorCitjb25maWcgSElHSF9SRVNfVElNRVJTCisJYm9vbCAiSGlnaCBSZXNvbHV0aW9uIFRpbWVyIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBHRU5FUklDX1RJTUUgJiYgR0VORVJJQ19DTE9DS0VWRU5UUworCXNlbGVjdCBUSUNLX09ORVNIT1QKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBzdXBwb3J0LiBJZiB5b3VyCisJICBoYXJkd2FyZSBpcyBub3QgY2FwYWJsZSB0aGVuIHRoaXMgb3B0aW9uIG9ubHkgaW5jcmVhc2VzCisJICB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGltYWdlLgorCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9NYWtlZmlsZSBiL2tlcm5lbC90aW1lL01ha2VmaWxlCmluZGV4IDYxYTM5MDcuLjkzYmNjYmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL01ha2VmaWxlCisrKyBiL2tlcm5lbC90aW1lL01ha2VmaWxlCkBAIC0xICsxLDggQEAKLW9iai15ICs9IG50cC5vIGNsb2Nrc291cmNlLm8gamlmZmllcy5vCitvYmoteSArPSBudHAubyBjbG9ja3NvdXJjZS5vIGppZmZpZXMubyB0aW1lcl9saXN0Lm8KKworb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMpCQkrPSBjbG9ja2V2ZW50cy5vCitvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUykJCSs9IHRpY2stY29tbW9uLm8KK29iai0kKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVCkJKz0gdGljay1icm9hZGNhc3Qubworb2JqLSQoQ09ORklHX1RJQ0tfT05FU0hPVCkJCQkrPSB0aWNrLW9uZXNob3Qubworb2JqLSQoQ09ORklHX1RJQ0tfT05FU0hPVCkJCQkrPSB0aWNrLXNjaGVkLm8KK29iai0kKENPTkZJR19USU1FUl9TVEFUUykJCQkrPSB0aW1lcl9zdGF0cy5vCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzkzMmVhCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqIGxpbnV4L2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIHdoaWNoIG1hbmFnZSBjbG9jayBldmVudCBkZXZpY2VzLgorICoKKyAqIENvcHlyaWdodChDKSAyMDA1LTIwMDYsIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogQ29weXJpZ2h0KEMpIDIwMDUtMjAwNywgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqIENvcHlyaWdodChDKSAyMDA2LTIwMDcsIFRpbWVzeXMgQ29ycC4sIFRob21hcyBHbGVpeG5lcgorICoKKyAqIFRoaXMgY29kZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMIHZlcnNpb24gMi4gRm9yIGRldGFpbHMgc2VlCisgKiBrZXJuZWwtYmFzZS9DT1BZSU5HLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisvKiBUaGUgcmVnaXN0ZXJlZCBjbG9jayBldmVudCBkZXZpY2VzICovCitzdGF0aWMgTElTVF9IRUFEKGNsb2NrZXZlbnRfZGV2aWNlcyk7CitzdGF0aWMgTElTVF9IRUFEKGNsb2NrZXZlbnRzX3JlbGVhc2VkKTsKKworLyogTm90aWZpY2F0aW9uIGZvciBjbG9jayBldmVudHMgKi8KK3N0YXRpYyBSQVdfTk9USUZJRVJfSEVBRChjbG9ja2V2ZW50c19jaGFpbik7CisKKy8qIFByb3RlY3Rpb24gZm9yIHRoZSBhYm92ZSAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja2V2ZW50c19sb2NrKTsKKworLyoqCisgKiBjbG9ja2V2ZW50c19kZWx0YTJucyAtIENvbnZlcnQgYSBsYXRjaCB2YWx1ZSAoZGV2aWNlIHRpY2tzKSB0byBuYW5vc2Vjb25kcworICogQGxhdGNoOgl2YWx1ZSB0byBjb252ZXJ0CisgKiBAZXZ0Oglwb2ludGVyIHRvIGNsb2NrIGV2ZW50IGRldmljZSBkZXNjcmlwdG9yCisgKgorICogTWF0aCBoZWxwZXIsIHJldHVybnMgbGF0Y2ggdmFsdWUgY29udmVydGVkIHRvIG5hbm9zZWNvbmRzIChib3VuZCBjaGVja2VkKQorICovCit1bnNpZ25lZCBsb25nIGNsb2NrZXZlbnRfZGVsdGEybnModW5zaWduZWQgbG9uZyBsYXRjaCwKKwkJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwl1NjQgY2xjID0gKCh1NjQpIGxhdGNoIDw8IGV2dC0+c2hpZnQpOworCisJZG9fZGl2KGNsYywgZXZ0LT5tdWx0KTsKKwlpZiAoY2xjIDwgMTAwMCkKKwkJY2xjID0gMTAwMDsKKwlpZiAoY2xjID4gTE9OR19NQVgpCisJCWNsYyA9IExPTkdfTUFYOworCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSBjbGM7Cit9CisKKy8qKgorICogY2xvY2tldmVudHNfc2V0X21vZGUgLSBzZXQgdGhlIG9wZXJhdGluZyBtb2RlIG9mIGEgY2xvY2sgZXZlbnQgZGV2aWNlCisgKiBAZGV2OglkZXZpY2UgdG8gbW9kaWZ5CisgKiBAbW9kZToJbmV3IG1vZGUKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgIQorICovCit2b2lkIGNsb2NrZXZlbnRzX3NldF9tb2RlKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiwKKwkJCQkgZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUpCit7CisJaWYgKGRldi0+bW9kZSAhPSBtb2RlKSB7CisJCWRldi0+c2V0X21vZGUobW9kZSwgZGV2KTsKKwkJZGV2LT5tb2RlID0gbW9kZTsKKwl9Cit9CisKKy8qKgorICogY2xvY2tldmVudHNfcHJvZ3JhbV9ldmVudCAtIFJlcHJvZ3JhbSB0aGUgY2xvY2sgZXZlbnQgZGV2aWNlLgorICogQGV4cGlyZXM6CWFic29sdXRlIGV4cGlyeSB0aW1lIChtb25vdG9uaWMgY2xvY2spCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FVElNRSB3aGVuIHRoZSBldmVudCBpcyBpbiB0aGUgcGFzdC4KKyAqLworaW50IGNsb2NrZXZlbnRzX3Byb2dyYW1fZXZlbnQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LCBrdGltZV90IGV4cGlyZXMsCisJCQkgICAgICBrdGltZV90IG5vdykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2xjOworCWludDY0X3QgZGVsdGE7CisKKwlkZWx0YSA9IGt0aW1lX3RvX25zKGt0aW1lX3N1YihleHBpcmVzLCBub3cpKTsKKworCWlmIChkZWx0YSA8PSAwKQorCQlyZXR1cm4gLUVUSU1FOworCisJZGV2LT5uZXh0X2V2ZW50ID0gZXhwaXJlczsKKworCWlmIChkZXYtPm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfU0hVVERPV04pCisJCXJldHVybiAwOworCisJaWYgKGRlbHRhID4gZGV2LT5tYXhfZGVsdGFfbnMpCisJCWRlbHRhID0gZGV2LT5tYXhfZGVsdGFfbnM7CisJaWYgKGRlbHRhIDwgZGV2LT5taW5fZGVsdGFfbnMpCisJCWRlbHRhID0gZGV2LT5taW5fZGVsdGFfbnM7CisKKwljbGMgPSBkZWx0YSAqIGRldi0+bXVsdDsKKwljbGMgPj49IGRldi0+c2hpZnQ7CisKKwlyZXR1cm4gZGV2LT5zZXRfbmV4dF9ldmVudCgodW5zaWduZWQgbG9uZykgY2xjLCBkZXYpOworfQorCisvKioKKyAqIGNsb2NrZXZlbnRzX3JlZ2lzdGVyX25vdGlmaWVyIC0gcmVnaXN0ZXIgYSBjbG9jayBldmVudHMgY2hhbmdlIGxpc3RlbmVyCisgKi8KK2ludCBjbG9ja2V2ZW50c19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCWludCByZXQ7CisKKwlzcGluX2xvY2soJmNsb2NrZXZlbnRzX2xvY2spOworCXJldCA9IHJhd19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmY2xvY2tldmVudHNfY2hhaW4sIG5iKTsKKwlzcGluX3VubG9jaygmY2xvY2tldmVudHNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGNsb2NrZXZlbnRzX3VucmVnaXN0ZXJfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgY2xvY2sgZXZlbnRzIGNoYW5nZSBsaXN0ZW5lcgorICovCit2b2lkIGNsb2NrZXZlbnRzX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlzcGluX2xvY2soJmNsb2NrZXZlbnRzX2xvY2spOworCXJhd19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZjbG9ja2V2ZW50c19jaGFpbiwgbmIpOworCXNwaW5fdW5sb2NrKCZjbG9ja2V2ZW50c19sb2NrKTsKK30KKworLyoKKyAqIE5vdGlmeSBhYm91dCBhIGNsb2NrIGV2ZW50IGNoYW5nZS4gQ2FsbGVkIHdpdGggY2xvY2tldmVudHNfbG9jaworICogaGVsZC4KKyAqLworc3RhdGljIHZvaWQgY2xvY2tldmVudHNfZG9fbm90aWZ5KHVuc2lnbmVkIGxvbmcgcmVhc29uLCB2b2lkICpkZXYpCit7CisJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNsb2NrZXZlbnRzX2NoYWluLCByZWFzb24sIGRldik7Cit9CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgYSBub3RpZnkgYWRkIHRvIG1ha2UgZGV2aWNlcyBhdmFpbGJsZSB3aGljaCB3ZXJlCisgKiByZWxlYXNlZCBmcm9tIHRoZSBub3RpZmllciBjYWxsLgorICovCitzdGF0aWMgdm9pZCBjbG9ja2V2ZW50c19ub3RpZnlfcmVsZWFzZWQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXY7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmNsb2NrZXZlbnRzX3JlbGVhc2VkKSkgeworCQlkZXYgPSBsaXN0X2VudHJ5KGNsb2NrZXZlbnRzX3JlbGVhc2VkLm5leHQsCisJCQkJIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGxpc3QpOworCQlsaXN0X2RlbCgmZGV2LT5saXN0KTsKKwkJbGlzdF9hZGQoJmRldi0+bGlzdCwgJmNsb2NrZXZlbnRfZGV2aWNlcyk7CisJCWNsb2NrZXZlbnRzX2RvX25vdGlmeShDTE9DS19FVlRfTk9USUZZX0FERCwgZGV2KTsKKwl9Cit9CisKKy8qKgorICogY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlIC0gcmVnaXN0ZXIgYSBjbG9jayBldmVudCBkZXZpY2UKKyAqIEBkZXY6CWRldmljZSB0byByZWdpc3RlcgorICovCit2b2lkIGNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJQlVHX09OKGRldi0+bW9kZSAhPSBDTE9DS19FVlRfTU9ERV9VTlVTRUQpOworCisJc3Bpbl9sb2NrKCZjbG9ja2V2ZW50c19sb2NrKTsKKworCWxpc3RfYWRkKCZkZXYtPmxpc3QsICZjbG9ja2V2ZW50X2RldmljZXMpOworCWNsb2NrZXZlbnRzX2RvX25vdGlmeShDTE9DS19FVlRfTk9USUZZX0FERCwgZGV2KTsKKwljbG9ja2V2ZW50c19ub3RpZnlfcmVsZWFzZWQoKTsKKworCXNwaW5fdW5sb2NrKCZjbG9ja2V2ZW50c19sb2NrKTsKK30KKworLyoKKyAqIE5vb3AgaGFuZGxlciB3aGVuIHdlIHNodXQgZG93biBhbiBldmVudCBkZXZpY2UKKyAqLworc3RhdGljIHZvaWQgY2xvY2tldmVudHNfaGFuZGxlX25vb3Aoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworfQorCisvKioKKyAqIGNsb2NrZXZlbnRzX2V4Y2hhbmdlX2RldmljZSAtIHJlbGVhc2UgYW5kIHJlcXVlc3QgY2xvY2sgZGV2aWNlcworICogQG9sZDoJZGV2aWNlIHRvIHJlbGVhc2UgKGNhbiBiZSBOVUxMKQorICogQG5ldzoJZGV2aWNlIHRvIHJlcXVlc3QgKGNhbiBiZSBOVUxMKQorICoKKyAqIENhbGxlZCBmcm9tIHRoZSBub3RpZmllciBjaGFpbi4gY2xvY2tldmVudHNfbG9jayBpcyBoZWxkIGFscmVhZHkKKyAqLwordm9pZCBjbG9ja2V2ZW50c19leGNoYW5nZV9kZXZpY2Uoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqb2xkLAorCQkJCSBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpuZXcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkvKgorCSAqIENhbGxlciByZWxlYXNlcyBhIGNsb2NrIGV2ZW50IGRldmljZS4gV2UgcXVldWUgaXQgaW50byB0aGUKKwkgKiByZWxlYXNlZCBsaXN0IGFuZCBkbyBhIG5vdGlmeSBhZGQgbGF0ZXIuCisJICovCisJaWYgKG9sZCkgeworCQlvbGQtPmV2ZW50X2hhbmRsZXIgPSBjbG9ja2V2ZW50c19oYW5kbGVfbm9vcDsKKwkJY2xvY2tldmVudHNfc2V0X21vZGUob2xkLCBDTE9DS19FVlRfTU9ERV9VTlVTRUQpOworCQlsaXN0X2RlbCgmb2xkLT5saXN0KTsKKwkJbGlzdF9hZGQoJm9sZC0+bGlzdCwgJmNsb2NrZXZlbnRzX3JlbGVhc2VkKTsKKwl9CisKKwlpZiAobmV3KSB7CisJCUJVR19PTihuZXctPm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfVU5VU0VEKTsKKwkJY2xvY2tldmVudHNfc2V0X21vZGUobmV3LCBDTE9DS19FVlRfTU9ERV9TSFVURE9XTik7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoqCisgKiBjbG9ja2V2ZW50c19yZXF1ZXN0X2RldmljZQorICovCitzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjbG9ja2V2ZW50c19yZXF1ZXN0X2RldmljZSh1bnNpZ25lZCBpbnQgZmVhdHVyZXMsCisJCQkJCQkgICAgICBjcHVtYXNrX3QgY3B1bWFzaykKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjdXIsICpkZXYgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKworCXNwaW5fbG9jaygmY2xvY2tldmVudHNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJmNsb2NrZXZlbnRfZGV2aWNlcykgeworCQljdXIgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbGlzdCk7CisKKwkJaWYgKChjdXItPmZlYXR1cmVzICYgZmVhdHVyZXMpID09IGZlYXR1cmVzICYmCisJCSAgICBjcHVzX2VxdWFsKGNwdW1hc2ssIGN1ci0+Y3B1bWFzaykpIHsKKwkJCWlmICghZGV2IHx8IGRldi0+cmF0aW5nIDwgY3VyLT5yYXRpbmcpCisJCQkJZGV2ID0gY3VyOworCQl9CisJfQorCisJY2xvY2tldmVudHNfZXhjaGFuZ2VfZGV2aWNlKE5VTEwsIGRldik7CisKKwlzcGluX3VubG9jaygmY2xvY2tldmVudHNfbG9jayk7CisKKwlyZXR1cm4gZGV2OworfQorCisvKioKKyAqIGNsb2NrZXZlbnRzX3JlbGVhc2VfZGV2aWNlCisgKi8KK3ZvaWQgY2xvY2tldmVudHNfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCXNwaW5fbG9jaygmY2xvY2tldmVudHNfbG9jayk7CisKKwljbG9ja2V2ZW50c19leGNoYW5nZV9kZXZpY2UoZGV2LCBOVUxMKTsKKwljbG9ja2V2ZW50c19ub3RpZnlfcmVsZWFzZWQoKTsKKworCXNwaW5fdW5sb2NrKCZjbG9ja2V2ZW50c19sb2NrKTsKK30KKworLyoqCisgKiBjbG9ja2V2ZW50c19ub3RpZnkgLSBub3RpZmljYXRpb24gYWJvdXQgcmVsZXZhbnQgZXZlbnRzCisgKi8KK3ZvaWQgY2xvY2tldmVudHNfbm90aWZ5KHVuc2lnbmVkIGxvbmcgcmVhc29uLCB2b2lkICphcmcpCit7CisJc3Bpbl9sb2NrKCZjbG9ja2V2ZW50c19sb2NrKTsKKwljbG9ja2V2ZW50c19kb19ub3RpZnkocmVhc29uLCBhcmcpOworCisJc3dpdGNoIChyZWFzb24pIHsKKwljYXNlIENMT0NLX0VWVF9OT1RJRllfQ1BVX0RFQUQ6CisJCS8qCisJCSAqIFVucmVnaXN0ZXIgdGhlIGNsb2NrIGV2ZW50IGRldmljZXMgd2hpY2ggd2VyZQorCQkgKiByZWxlYXNlZCBmcm9tIHRoZSB1c2VycyBpbiB0aGUgbm90aWZ5IGNoYWluLgorCQkgKi8KKwkJd2hpbGUgKCFsaXN0X2VtcHR5KCZjbG9ja2V2ZW50c19yZWxlYXNlZCkpIHsKKwkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldjsKKworCQkJZGV2ID0gbGlzdF9lbnRyeShjbG9ja2V2ZW50c19yZWxlYXNlZC5uZXh0LAorCQkJCQkgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbGlzdCk7CisJCQlsaXN0X2RlbCgmZGV2LT5saXN0KTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJmNsb2NrZXZlbnRzX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2xvY2tldmVudHNfbm90aWZ5KTsKKworI2lmZGVmIENPTkZJR19TWVNGUworCisvKioKKyAqIGNsb2NrZXZlbnRzX3Nob3dfcmVnaXN0ZXJlZCAtIHN5c2ZzIGludGVyZmFjZSBmb3IgbGlzdGluZyBjbG9ja2V2ZW50cworICogQGRldjoJdW51c2VkCisgKiBAYnVmOgljaGFyIGJ1ZmZlciB0byBiZSBmaWxsZWQgd2l0aCBjbG9jayBldmVudHMgbGlzdAorICoKKyAqIFByb3ZpZGVzIHN5c2ZzIGludGVyZmFjZSBmb3IgbGlzdGluZyByZWdpc3RlcmVkIGNsb2NrIGV2ZW50IGRldmljZXMKKyAqLworc3RhdGljIHNzaXplX3QgY2xvY2tldmVudHNfc2hvd19yZWdpc3RlcmVkKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJY2hhciAqcCA9IGJ1ZjsKKwlpbnQgY3B1OworCisJc3Bpbl9sb2NrKCZjbG9ja2V2ZW50c19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2godG1wLCAmY2xvY2tldmVudF9kZXZpY2VzKSB7CisJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlOworCisJCWNlID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGxpc3QpOworCQlwICs9IHNwcmludGYocCwgIiUtMjBzIEY6JTA0eCBNOiVkIiwgY2UtPm5hbWUsCisJCQkgICAgIGNlLT5mZWF0dXJlcywgY2UtPm1vZGUpOworCQlwICs9IHNwcmludGYocCwgIiBDOiIpOworCQlpZiAoIWNwdXNfZXF1YWwoY2UtPmNwdW1hc2ssIGNwdV9wb3NzaWJsZV9tYXApKSB7CisJCQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGNlLT5jcHVtYXNrKQorCQkJCXAgKz0gc3ByaW50ZihwLCAiICVkIiwgY3B1KTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBGSVhNRTogQWRkIHRoZSBjcHUgd2hpY2ggaXMgaGFuZGxpbmcgdGhpcyBzdWNrZXIKKwkJCSAqLworCQl9CisJCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKKwl9CisKKwlzcGluX3VubG9jaygmY2xvY2tldmVudHNfbG9jayk7CisKKwlyZXR1cm4gcCAtIGJ1ZjsKK30KKworLyoKKyAqIFN5c2ZzIHNldHVwIGJpdHM6CisgKi8KK3N0YXRpYyBTWVNERVZfQVRUUihyZWdpc3RlcmVkLCAwNjAwLAorCQkgICBjbG9ja2V2ZW50c19zaG93X3JlZ2lzdGVyZWQsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBjbG9ja2V2ZW50c19zeXNjbGFzcyA9IHsKKwlzZXRfa3NldF9uYW1lKCJjbG9ja2V2ZW50cyIpLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGNsb2NrZXZlbnRzX3N5c19kZXZpY2UgPSB7CisJLmlkCT0gMCwKKwkuY2xzCT0gJmNsb2NrZXZlbnRzX3N5c2NsYXNzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2xvY2tldmVudHNfc3lzZnNfaW5pdCh2b2lkKQoreworCWludCBlcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmY2xvY2tldmVudHNfc3lzY2xhc3MpOworCisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmNsb2NrZXZlbnRzX3N5c19kZXZpY2UpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gc3lzZGV2X2NyZWF0ZV9maWxlKAorCQkJCSZjbG9ja2V2ZW50c19zeXNfZGV2aWNlLAorCQkJCSZhdHRyX3JlZ2lzdGVyZWQpOworCXJldHVybiBlcnJvcjsKK30KK2RldmljZV9pbml0Y2FsbChjbG9ja2V2ZW50c19zeXNmc19pbml0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggZDllZjE3Ni4uMTkzYTA3OSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+IC8qIGZvciBzcGluX3VubG9ja19pcnEoKSB1c2luZyBwcmVlbXB0X2NvdW50KCkgbTY4ayAqLworI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KIAogLyogWFhYIC0gV291bGQgbGlrZSBhIGJldHRlciB3YXkgZm9yIGluaXRpYWxpemluZyBjdXJyX2Nsb2Nrc291cmNlICovCiBleHRlcm4gc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX2ppZmZpZXM7CkBAIC00OCw2ICs0OSw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgKmN1cnJfY2xvY2tzb3VyY2UgPSAmY2xvY2tzb3VyY2VfamlmZmllczsKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgKm5leHRfY2xvY2tzb3VyY2U7CitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlICpjbG9ja3NvdXJjZV9vdmVycmlkZTsKIHN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzb3VyY2VfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2Nrc291cmNlX2xvY2spOwogc3RhdGljIGNoYXIgb3ZlcnJpZGVfbmFtZVszMl07CkBAIC02Miw5ICs2NCwxMjMgQEAKIAlmaW5pc2hlZF9ib290aW5nID0gMTsKIAlyZXR1cm4gMDsKIH0KLQogbGF0ZV9pbml0Y2FsbChjbG9ja3NvdXJjZV9kb25lX2Jvb3RpbmcpOwogCisjaWZkZWYgQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9HCitzdGF0aWMgTElTVF9IRUFEKHdhdGNoZG9nX2xpc3QpOworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSAqd2F0Y2hkb2c7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHdhdGNoZG9nX2xvY2spOworc3RhdGljIGN5Y2xlX3Qgd2F0Y2hkb2dfbGFzdDsKKy8qCisgKiBJbnRlcnZhbDogMC41c2VjIFRyZXNob2xkOiAwLjA2MjVzCisgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSU5URVJWQUwgKEhaID4+IDEpCisjZGVmaW5lIFdBVENIRE9HX1RSRVNIT0xEIChOU0VDX1BFUl9TRUMgPj4gNCkKKworc3RhdGljIHZvaWQgY2xvY2tzb3VyY2VfcmF0ZXdkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIGludDY0X3QgZGVsdGEpCit7CisJaWYgKGRlbHRhID4gLVdBVENIRE9HX1RSRVNIT0xEICYmIGRlbHRhIDwgV0FUQ0hET0dfVFJFU0hPTEQpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIkNsb2Nrc291cmNlICVzIHVuc3RhYmxlIChkZWx0YSA9ICVMZCBucylcbiIsCisJICAgICAgIGNzLT5uYW1lLCBkZWx0YSk7CisJY3MtPmZsYWdzICY9IH4oQ0xPQ0tfU09VUkNFX1ZBTElEX0ZPUl9IUkVTIHwgQ0xPQ0tfU09VUkNFX1dBVENIRE9HKTsKKwljbG9ja3NvdXJjZV9jaGFuZ2VfcmF0aW5nKGNzLCAwKTsKKwljcy0+ZmxhZ3MgJj0gfkNMT0NLX1NPVVJDRV9XQVRDSERPRzsKKwlsaXN0X2RlbCgmY3MtPndkX2xpc3QpOworfQorCitzdGF0aWMgdm9pZCBjbG9ja3NvdXJjZV93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGNsb2Nrc291cmNlICpjcywgKnRtcDsKKwljeWNsZV90IGNzbm93LCB3ZG5vdzsKKwlpbnQ2NF90IHdkX25zZWMsIGNzX25zZWM7CisKKwlzcGluX2xvY2soJndhdGNoZG9nX2xvY2spOworCisJd2Rub3cgPSB3YXRjaGRvZy0+cmVhZCgpOworCXdkX25zZWMgPSBjeWMybnMod2F0Y2hkb2csICh3ZG5vdyAtIHdhdGNoZG9nX2xhc3QpICYgd2F0Y2hkb2ctPm1hc2spOworCXdhdGNoZG9nX2xhc3QgPSB3ZG5vdzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjcywgdG1wLCAmd2F0Y2hkb2dfbGlzdCwgd2RfbGlzdCkgeworCQljc25vdyA9IGNzLT5yZWFkKCk7CisJCS8qIEluaXRpYWxpemVkID8gKi8KKwkJaWYgKCEoY3MtPmZsYWdzICYgQ0xPQ0tfU09VUkNFX1dBVENIRE9HKSkgeworCQkJaWYgKChjcy0+ZmxhZ3MgJiBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUykgJiYKKwkJCSAgICAod2F0Y2hkb2ctPmZsYWdzICYgQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMpKSB7CisJCQkJY3MtPmZsYWdzIHw9IENMT0NLX1NPVVJDRV9WQUxJRF9GT1JfSFJFUzsKKwkJCQkvKgorCQkJCSAqIFdlIGp1c3QgbWFya2VkIHRoZSBjbG9ja3NvdXJjZSBhcworCQkJCSAqIGhpZ2hyZXMtY2FwYWJsZSwgbm90aWZ5IHRoZSByZXN0IG9mIHRoZQorCQkJCSAqIHN5c3RlbSBhcyB3ZWxsIHNvIHRoYXQgd2UgdHJhbnNpdGlvbgorCQkJCSAqIGludG8gaGlnaC1yZXMgbW9kZToKKwkJCQkgKi8KKwkJCQl0aWNrX2Nsb2NrX25vdGlmeSgpOworCQkJfQorCQkJY3MtPmZsYWdzIHw9IENMT0NLX1NPVVJDRV9XQVRDSERPRzsKKwkJCWNzLT53ZF9sYXN0ID0gY3Nub3c7CisJCX0gZWxzZSB7CisJCQljc19uc2VjID0gY3ljMm5zKGNzLCAoY3Nub3cgLSBjcy0+d2RfbGFzdCkgJiBjcy0+bWFzayk7CisJCQljcy0+d2RfbGFzdCA9IGNzbm93OworCQkJLyogQ2hlY2sgdGhlIGRlbHRhLiBNaWdodCByZW1vdmUgZnJvbSB0aGUgbGlzdCAhICovCisJCQljbG9ja3NvdXJjZV9yYXRld2QoY3MsIGNzX25zZWMgLSB3ZF9uc2VjKTsKKwkJfQorCX0KKworCWlmICghbGlzdF9lbXB0eSgmd2F0Y2hkb2dfbGlzdCkpIHsKKwkJX19tb2RfdGltZXIoJndhdGNoZG9nX3RpbWVyLAorCQkJICAgIHdhdGNoZG9nX3RpbWVyLmV4cGlyZXMgKyBXQVRDSERPR19JTlRFUlZBTCk7CisJfQorCXNwaW5fdW5sb2NrKCZ3YXRjaGRvZ19sb2NrKTsKK30KK3N0YXRpYyB2b2lkIGNsb2Nrc291cmNlX2NoZWNrX3dhdGNoZG9nKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJc3RydWN0IGNsb2Nrc291cmNlICpjc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3YXRjaGRvZ19sb2NrLCBmbGFncyk7CisJaWYgKGNzLT5mbGFncyAmIENMT0NLX1NPVVJDRV9NVVNUX1ZFUklGWSkgeworCQlpbnQgc3RhcnRlZCA9ICFsaXN0X2VtcHR5KCZ3YXRjaGRvZ19saXN0KTsKKworCQlsaXN0X2FkZCgmY3MtPndkX2xpc3QsICZ3YXRjaGRvZ19saXN0KTsKKwkJaWYgKCFzdGFydGVkICYmIHdhdGNoZG9nKSB7CisJCQl3YXRjaGRvZ19sYXN0ID0gd2F0Y2hkb2ctPnJlYWQoKTsKKwkJCXdhdGNoZG9nX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgV0FUQ0hET0dfSU5URVJWQUw7CisJCQlhZGRfdGltZXIoJndhdGNoZG9nX3RpbWVyKTsKKwkJfQorCX0gZWxzZSBpZiAoY3MtPmZsYWdzICYgQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMpIHsKKwkJCWNzLT5mbGFncyB8PSBDTE9DS19TT1VSQ0VfVkFMSURfRk9SX0hSRVM7CisKKwkJaWYgKCF3YXRjaGRvZyB8fCBjcy0+cmF0aW5nID4gd2F0Y2hkb2ctPnJhdGluZykgeworCQkJaWYgKHdhdGNoZG9nKQorCQkJCWRlbF90aW1lcigmd2F0Y2hkb2dfdGltZXIpOworCQkJd2F0Y2hkb2cgPSBjczsKKwkJCWluaXRfdGltZXIoJndhdGNoZG9nX3RpbWVyKTsKKwkJCXdhdGNoZG9nX3RpbWVyLmZ1bmN0aW9uID0gY2xvY2tzb3VyY2Vfd2F0Y2hkb2c7CisKKwkJCS8qIFJlc2V0IHdhdGNoZG9nIGN5Y2xlcyAqLworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjc2UsICZ3YXRjaGRvZ19saXN0LCB3ZF9saXN0KQorCQkJCWNzZS0+ZmxhZ3MgJj0gfkNMT0NLX1NPVVJDRV9XQVRDSERPRzsKKwkJCS8qIFN0YXJ0IGlmIGxpc3QgaXMgbm90IGVtcHR5ICovCisJCQlpZiAoIWxpc3RfZW1wdHkoJndhdGNoZG9nX2xpc3QpKSB7CisJCQkJd2F0Y2hkb2dfbGFzdCA9IHdhdGNoZG9nLT5yZWFkKCk7CisJCQkJd2F0Y2hkb2dfdGltZXIuZXhwaXJlcyA9CisJCQkJCWppZmZpZXMgKyBXQVRDSERPR19JTlRFUlZBTDsKKwkJCQlhZGRfdGltZXIoJndhdGNoZG9nX3RpbWVyKTsKKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3YXRjaGRvZ19sb2NrLCBmbGFncyk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgY2xvY2tzb3VyY2VfY2hlY2tfd2F0Y2hkb2coc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwlpZiAoY3MtPmZsYWdzICYgQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMpCisJCWNzLT5mbGFncyB8PSBDTE9DS19TT1VSQ0VfVkFMSURfRk9SX0hSRVM7Cit9CisjZW5kaWYKKwogLyoqCiAgKiBjbG9ja3NvdXJjZV9nZXRfbmV4dCAtIFJldHVybnMgdGhlIHNlbGVjdGVkIGNsb2Nrc291cmNlCiAgKgpAQCAtODQsNjAgKzIwMCw1NCBAQAogfQogCiAvKioKLSAqIHNlbGVjdF9jbG9ja3NvdXJjZSAtIEZpbmRzIHRoZSBiZXN0IHJlZ2lzdGVyZWQgY2xvY2tzb3VyY2UuCisgKiBzZWxlY3RfY2xvY2tzb3VyY2UgLSBTZWxlY3RzIHRoZSBiZXN0IHJlZ2lzdGVyZWQgY2xvY2tzb3VyY2UuCiAgKgogICogUHJpdmF0ZSBmdW5jdGlvbi4gTXVzdCBob2xkIGNsb2Nrc291cmNlX2xvY2sgd2hlbiBjYWxsZWQuCiAgKgotICogTG9va3MgdGhyb3VnaCB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGNsb2Nrc291cmNlcywgcmV0dXJuaW5nCi0gKiB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QgcmF0aW5nIHZhbHVlLiBJZiB0aGVyZSBpcyBhIGNsb2Nrc291cmNlCi0gKiBuYW1lIHRoYXQgbWF0Y2hlcyB0aGUgb3ZlcnJpZGUgc3RyaW5nLCBpdCByZXR1cm5zIHRoYXQgY2xvY2tzb3VyY2UuCisgKiBTZWxlY3QgdGhlIGNsb2Nrc291cmNlIHdpdGggdGhlIGJlc3QgcmF0aW5nLCBvciB0aGUgY2xvY2tzb3VyY2UsCisgKiB3aGljaCBpcyBzZWxlY3RlZCBieSB1c2Vyc3BhY2Ugb3ZlcnJpZGUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgKnNlbGVjdF9jbG9ja3NvdXJjZSh2b2lkKQogewotCXN0cnVjdCBjbG9ja3NvdXJjZSAqYmVzdCA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCBjbG9ja3NvdXJjZSAqbmV4dDsKIAotCWxpc3RfZm9yX2VhY2godG1wLCAmY2xvY2tzb3VyY2VfbGlzdCkgewotCQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKnNyYzsKKwlpZiAobGlzdF9lbXB0eSgmY2xvY2tzb3VyY2VfbGlzdCkpCisJCXJldHVybiBOVUxMOwogCi0JCXNyYyA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY2xvY2tzb3VyY2UsIGxpc3QpOwotCQlpZiAoIWJlc3QpCi0JCQliZXN0ID0gc3JjOworCWlmIChjbG9ja3NvdXJjZV9vdmVycmlkZSkKKwkJbmV4dCA9IGNsb2Nrc291cmNlX292ZXJyaWRlOworCWVsc2UKKwkJbmV4dCA9IGxpc3RfZW50cnkoY2xvY2tzb3VyY2VfbGlzdC5uZXh0LCBzdHJ1Y3QgY2xvY2tzb3VyY2UsCisJCQkJICBsaXN0KTsKIAotCQkvKiBjaGVjayBmb3Igb3ZlcnJpZGU6ICovCi0JCWlmIChzdHJsZW4oc3JjLT5uYW1lKSA9PSBzdHJsZW4ob3ZlcnJpZGVfbmFtZSkgJiYKLQkJICAgICFzdHJjbXAoc3JjLT5uYW1lLCBvdmVycmlkZV9uYW1lKSkgewotCQkJYmVzdCA9IHNyYzsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIHBpY2sgdGhlIGhpZ2hlc3QgcmF0aW5nOiAqLwotCQlpZiAoc3JjLT5yYXRpbmcgPiBiZXN0LT5yYXRpbmcpCi0JCSAJYmVzdCA9IHNyYzsKLQl9CisJaWYgKG5leHQgPT0gY3Vycl9jbG9ja3NvdXJjZSkKKwkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gYmVzdDsKKwlyZXR1cm4gbmV4dDsKIH0KIAotLyoqCi0gKiBpc19yZWdpc3RlcmVkX3NvdXJjZSAtIENoZWNrcyBpZiBjbG9ja3NvdXJjZSBpcyByZWdpc3RlcmVkCi0gKiBAYzoJCXBvaW50ZXIgdG8gYSBjbG9ja3NvdXJjZQotICoKLSAqIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9uLiBNdXN0IGhvbGQgY2xvY2tzb3VyY2VfbG9jayB3aGVuIGNhbGxlZC4KLSAqCi0gKiBSZXR1cm5zIG9uZSBpZiB0aGUgY2xvY2tzb3VyY2UgaXMgYWxyZWFkeSByZWdpc3RlcmVkLCB6ZXJvIG90aGVyd2lzZS4KKy8qCisgKiBFbnF1ZXVlIHRoZSBjbG9ja3NvdXJjZSBzb3J0ZWQgYnkgcmF0aW5nCiAgKi8KLXN0YXRpYyBpbnQgaXNfcmVnaXN0ZXJlZF9zb3VyY2Uoc3RydWN0IGNsb2Nrc291cmNlICpjKQorc3RhdGljIGludCBjbG9ja3NvdXJjZV9lbnF1ZXVlKHN0cnVjdCBjbG9ja3NvdXJjZSAqYykKIHsKLQlpbnQgbGVuID0gc3RybGVuKGMtPm5hbWUpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAsICplbnRyeSA9ICZjbG9ja3NvdXJjZV9saXN0OwogCiAJbGlzdF9mb3JfZWFjaCh0bXAsICZjbG9ja3NvdXJjZV9saXN0KSB7Ci0JCXN0cnVjdCBjbG9ja3NvdXJjZSAqc3JjOworCQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzOwogCi0JCXNyYyA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY2xvY2tzb3VyY2UsIGxpc3QpOwotCQlpZiAoc3RybGVuKHNyYy0+bmFtZSkgPT0gbGVuICYmCSFzdHJjbXAoc3JjLT5uYW1lLCBjLT5uYW1lKSkKLQkJCXJldHVybiAxOworCQljcyA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY2xvY2tzb3VyY2UsIGxpc3QpOworCQlpZiAoY3MgPT0gYykKKwkJCXJldHVybiAtRUJVU1k7CisJCS8qIEtlZXAgdHJhY2sgb2YgdGhlIHBsYWNlLCB3aGVyZSB0byBpbnNlcnQgKi8KKwkJaWYgKGNzLT5yYXRpbmcgPj0gYy0+cmF0aW5nKQorCQkJZW50cnkgPSB0bXA7CiAJfQorCWxpc3RfYWRkKCZjLT5saXN0LCBlbnRyeSk7CisKKwlpZiAoc3RybGVuKGMtPm5hbWUpID09IHN0cmxlbihvdmVycmlkZV9uYW1lKSAmJgorCSAgICAhc3RyY21wKGMtPm5hbWUsIG92ZXJyaWRlX25hbWUpKQorCQljbG9ja3NvdXJjZV9vdmVycmlkZSA9IGM7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MCw0MiArMjYwLDM1IEBACiAgKi8KIGludCBjbG9ja3NvdXJjZV9yZWdpc3RlcihzdHJ1Y3QgY2xvY2tzb3VyY2UgKmMpCiB7Ci0JaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc291cmNlX2xvY2ssIGZsYWdzKTsKLQkvKiBjaGVjayBpZiBjbG9ja3NvdXJjZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KLQlpZiAoaXNfcmVnaXN0ZXJlZF9zb3VyY2UoYykpIHsKLQkJcHJpbnRrKCJyZWdpc3Rlcl9jbG9ja3NvdXJjZTogQ2Fubm90IHJlZ2lzdGVyICVzLiAiCi0JCSAgICAgICAiQWxyZWFkeSByZWdpc3RlcmVkISIsIGMtPm5hbWUpOwotCQlyZXQgPSAtRUJVU1k7Ci0JfSBlbHNlIHsKLQkJLyogcmVnaXN0ZXIgaXQgKi8KLSAJCWxpc3RfYWRkKCZjLT5saXN0LCAmY2xvY2tzb3VyY2VfbGlzdCk7Ci0JCS8qIHNjYW4gdGhlIHJlZ2lzdGVyZWQgY2xvY2tzb3VyY2VzLCBhbmQgcGljayB0aGUgYmVzdCBvbmUgKi8KKwlyZXQgPSBjbG9ja3NvdXJjZV9lbnF1ZXVlKGMpOworCWlmICghcmV0KQogCQluZXh0X2Nsb2Nrc291cmNlID0gc2VsZWN0X2Nsb2Nrc291cmNlKCk7Ci0JfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc291cmNlX2xvY2ssIGZsYWdzKTsKKwlpZiAoIXJldCkKKwkJY2xvY2tzb3VyY2VfY2hlY2tfd2F0Y2hkb2coYyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woY2xvY2tzb3VyY2VfcmVnaXN0ZXIpOwogCiAvKioKLSAqIGNsb2Nrc291cmNlX3Jlc2VsZWN0IC0gUmVzY2FuIGxpc3QgZm9yIG5leHQgY2xvY2tzb3VyY2UKKyAqIGNsb2Nrc291cmNlX2NoYW5nZV9yYXRpbmcgLSBDaGFuZ2UgdGhlIHJhdGluZyBvZiBhIHJlZ2lzdGVyZWQgY2xvY2tzb3VyY2UKICAqCi0gKiBBIHF1aWNrIGhlbHBlciBmdW5jdGlvbiB0byBiZSB1c2VkIGlmIGEgY2xvY2tzb3VyY2UgY2hhbmdlcyBpdHMKLSAqIHJhdGluZy4gRm9yY2VzIHRoZSBjbG9ja3NvdXJjZSBsaXN0IHRvIGJlIHJlLXNjYW5uZWQgZm9yIHRoZSBiZXN0Ci0gKiBjbG9ja3NvdXJjZS4KICAqLwotdm9pZCBjbG9ja3NvdXJjZV9yZXNlbGVjdCh2b2lkKQordm9pZCBjbG9ja3NvdXJjZV9jaGFuZ2VfcmF0aW5nKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIGludCByYXRpbmcpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NvdXJjZV9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNzLT5saXN0KTsKKwljcy0+cmF0aW5nID0gcmF0aW5nOworCWNsb2Nrc291cmNlX2VucXVldWUoY3MpOwogCW5leHRfY2xvY2tzb3VyY2UgPSBzZWxlY3RfY2xvY2tzb3VyY2UoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NvdXJjZV9sb2NrLCBmbGFncyk7CiB9Ci1FWFBPUlRfU1lNQk9MKGNsb2Nrc291cmNlX3Jlc2VsZWN0KTsKIAogI2lmZGVmIENPTkZJR19TWVNGUwogLyoqCkBAIC0yMjEsNyArMzI0LDExIEBACiBzdGF0aWMgc3NpemVfdCBzeXNmc19vdmVycmlkZV9jbG9ja3NvdXJjZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAogCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogeworCXN0cnVjdCBjbG9ja3NvdXJjZSAqb3ZyID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAJc2l6ZV90IHJldCA9IGNvdW50OworCWludCBsZW47CisKIAkvKiBzdHJpbmdzIGZyb20gc3lzZnMgd3JpdGUgYXJlIG5vdCAwIHRlcm1pbmF0ZWQhICovCiAJaWYgKGNvdW50ID49IHNpemVvZihvdmVycmlkZV9uYW1lKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMjksMTcgKzMzNiwzMiBAQAogCS8qIHN0cmlwIG9mIFxuOiAqLwogCWlmIChidWZbY291bnQtMV0gPT0gJ1xuJykKIAkJY291bnQtLTsKLQlpZiAoY291bnQgPCAxKQotCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnEoJmNsb2Nrc291cmNlX2xvY2spOwogCi0JLyogY29weSB0aGUgbmFtZSBnaXZlbjogKi8KLQltZW1jcHkob3ZlcnJpZGVfbmFtZSwgYnVmLCBjb3VudCk7CisJaWYgKGNvdW50ID4gMCkKKwkJbWVtY3B5KG92ZXJyaWRlX25hbWUsIGJ1ZiwgY291bnQpOwogCW92ZXJyaWRlX25hbWVbY291bnRdID0gMDsKIAotCS8qIHRyeSB0byBzZWxlY3QgaXQ6ICovCi0JbmV4dF9jbG9ja3NvdXJjZSA9IHNlbGVjdF9jbG9ja3NvdXJjZSgpOworCWxlbiA9IHN0cmxlbihvdmVycmlkZV9uYW1lKTsKKwlpZiAobGVuKSB7CisJCW92ciA9IGNsb2Nrc291cmNlX292ZXJyaWRlOworCQkvKiB0cnkgdG8gc2VsZWN0IGl0OiAqLworCQlsaXN0X2Zvcl9lYWNoKHRtcCwgJmNsb2Nrc291cmNlX2xpc3QpIHsKKwkJCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3M7CisKKwkJCWNzID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjbG9ja3NvdXJjZSwgbGlzdCk7CisJCQlpZiAoc3RybGVuKGNzLT5uYW1lKSA9PSBsZW4gJiYKKwkJCSAgICAhc3RyY21wKGNzLT5uYW1lLCBvdmVycmlkZV9uYW1lKSkKKwkJCQlvdnIgPSBjczsKKwkJfQorCX0KKworCS8qIFJlc2VsZWN0LCB3aGVuIHRoZSBvdmVycmlkZSBuYW1lIGhhcyBjaGFuZ2VkICovCisJaWYgKG92ciAhPSBjbG9ja3NvdXJjZV9vdmVycmlkZSkgeworCQljbG9ja3NvdXJjZV9vdmVycmlkZSA9IG92cjsKKwkJbmV4dF9jbG9ja3NvdXJjZSA9IHNlbGVjdF9jbG9ja3NvdXJjZSgpOworCX0KIAogCXNwaW5fdW5sb2NrX2lycSgmY2xvY2tzb3VyY2VfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuYwppbmRleCBhOTliMmE2Li4zYmU4ZGE4IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9qaWZmaWVzLmMKKysrIGIva2VybmVsL3RpbWUvamlmZmllcy5jCkBAIC02Miw3ICs2Miw2IEBACiAJLm1hc2sJCT0gMHhmZmZmZmZmZiwgLyozMmJpdHMqLwogCS5tdWx0CQk9IE5TRUNfUEVSX0pJRkZZIDw8IEpJRkZJRVNfU0hJRlQsIC8qIGRldGFpbHMgYWJvdmUgKi8KIAkuc2hpZnQJCT0gSklGRklFU19TSElGVCwKLQkuaXNfY29udGludW91cwk9IDAsIC8qIHRpY2sgYmFzZWQsIG5vdCBmcmVlIHJ1bm5pbmcgKi8KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfamlmZmllc19jbG9ja3NvdXJjZSh2b2lkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCAzYWZlYWEzLi5lYjEyNTA5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtMjQsNyArMjQsNyBAQAogCiAjZGVmaW5lIE1BWF9USUNLQURKCQk1MDAJCS8qIG1pY3Jvc2VjcyAqLwogI2RlZmluZSBNQVhfVElDS0FESl9TQ0FMRUQJKCgodTY0KShNQVhfVElDS0FESiAqIE5TRUNfUEVSX1VTRUMpIDw8IFwKLQkJCQkgIFRJQ0tfTEVOR1RIX1NISUZUKSAvIEhaKQorCQkJCSAgVElDS19MRU5HVEhfU0hJRlQpIC8gTlRQX0lOVEVSVkFMX0ZSRVEpCiAKIC8qCiAgKiBwaGFzZS1sb2NrIGxvb3AgdmFyaWFibGVzCkBAIC00NiwxMyArNDYsMTcgQEAKIAogc3RhdGljIHZvaWQgbnRwX3VwZGF0ZV9mcmVxdWVuY3kodm9pZCkKIHsKLQl0aWNrX2xlbmd0aF9iYXNlID0gKHU2NCkodGlja191c2VjICogTlNFQ19QRVJfVVNFQyAqIFVTRVJfSFopIDw8IFRJQ0tfTEVOR1RIX1NISUZUOwotCXRpY2tfbGVuZ3RoX2Jhc2UgKz0gKHM2NClDTE9DS19USUNLX0FESlVTVCA8PCBUSUNLX0xFTkdUSF9TSElGVDsKLQl0aWNrX2xlbmd0aF9iYXNlICs9IChzNjQpdGltZV9mcmVxIDw8IChUSUNLX0xFTkdUSF9TSElGVCAtIFNISUZUX05TRUMpOworCXU2NCBzZWNvbmRfbGVuZ3RoID0gKHU2NCkodGlja191c2VjICogTlNFQ19QRVJfVVNFQyAqIFVTRVJfSFopCisJCQkJPDwgVElDS19MRU5HVEhfU0hJRlQ7CisJc2Vjb25kX2xlbmd0aCArPSAoczY0KUNMT0NLX1RJQ0tfQURKVVNUIDw8IFRJQ0tfTEVOR1RIX1NISUZUOworCXNlY29uZF9sZW5ndGggKz0gKHM2NCl0aW1lX2ZyZXEgPDwgKFRJQ0tfTEVOR1RIX1NISUZUIC0gU0hJRlRfTlNFQyk7CiAKLQlkb19kaXYodGlja19sZW5ndGhfYmFzZSwgSFopOworCXRpY2tfbGVuZ3RoX2Jhc2UgPSBzZWNvbmRfbGVuZ3RoOwogCi0JdGlja19uc2VjID0gdGlja19sZW5ndGhfYmFzZSA+PiBUSUNLX0xFTkdUSF9TSElGVDsKKwlkb19kaXYoc2Vjb25kX2xlbmd0aCwgSFopOworCXRpY2tfbnNlYyA9IHNlY29uZF9sZW5ndGggPj4gVElDS19MRU5HVEhfU0hJRlQ7CisKKwlkb19kaXYodGlja19sZW5ndGhfYmFzZSwgTlRQX0lOVEVSVkFMX0ZSRVEpOwogfQogCiAvKioKQEAgLTE2Miw3ICsxNjYsNyBAQAogCQkJdGlja19sZW5ndGggLT0gTUFYX1RJQ0tBREpfU0NBTEVEOwogCQl9IGVsc2UgewogCQkJdGlja19sZW5ndGggKz0gKHM2NCkodGltZV9hZGp1c3QgKiBOU0VDX1BFUl9VU0VDIC8KLQkJCQkJICAgICBIWikgPDwgVElDS19MRU5HVEhfU0hJRlQ7CisJCQkJCU5UUF9JTlRFUlZBTF9GUkVRKSA8PCBUSUNLX0xFTkdUSF9TSElGVDsKIAkJCXRpbWVfYWRqdXN0ID0gMDsKIAkJfQogCX0KQEAgLTIzOSw3ICsyNDMsOCBAQAogCQkgICAgcmVzdWx0ID0gLUVJTlZBTDsKIAkJICAgIGdvdG8gbGVhdmU7CiAJCX0KLQkJdGltZV9mcmVxID0gKChzNjQpdHhjLT5mcmVxICogTlNFQ19QRVJfVVNFQykgPj4gKFNISUZUX1VTRUMgLSBTSElGVF9OU0VDKTsKKwkJdGltZV9mcmVxID0gKChzNjQpdHhjLT5mcmVxICogTlNFQ19QRVJfVVNFQykKKwkJCQk+PiAoU0hJRlRfVVNFQyAtIFNISUZUX05TRUMpOwogCSAgICB9CiAKIAkgICAgaWYgKHR4Yy0+bW9kZXMgJiBBREpfTUFYRVJST1IpIHsKQEAgLTMwOSw3ICszMTQsOCBAQAogCQkgICAgZnJlcV9hZGogKz0gdGltZV9mcmVxOwogCQkgICAgZnJlcV9hZGogPSBtaW4oZnJlcV9hZGosIChzNjQpTUFYRlJFUV9OU0VDKTsKIAkJICAgIHRpbWVfZnJlcSA9IG1heChmcmVxX2FkaiwgKHM2NCktTUFYRlJFUV9OU0VDKTsKLQkJICAgIHRpbWVfb2Zmc2V0ID0gKHRpbWVfb2Zmc2V0IC8gSFopIDw8IFNISUZUX1VQREFURTsKKwkJICAgIHRpbWVfb2Zmc2V0ID0gKHRpbWVfb2Zmc2V0IC8gTlRQX0lOVEVSVkFMX0ZSRVEpCisJCSAgICAJCQk8PCBTSElGVF9VUERBVEU7CiAJCX0gLyogU1RBX1BMTCAqLwogCSAgICB9IC8qIHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUICovCiAJICAgIGlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCkBAIC0zMjQsOCArMzMwLDEwIEBACiAJaWYgKCh0eGMtPm1vZGVzICYgQURKX09GRlNFVF9TSU5HTEVTSE9UKSA9PSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpCiAJICAgIHR4Yy0+b2Zmc2V0CSAgID0gc2F2ZV9hZGp1c3Q7CiAJZWxzZQotCSAgICB0eGMtPm9mZnNldCAgICA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0LCBTSElGVF9VUERBVEUpICogSFogLyAxMDAwOwotCXR4Yy0+ZnJlcQkgICA9ICh0aW1lX2ZyZXEgLyBOU0VDX1BFUl9VU0VDKSA8PCAoU0hJRlRfVVNFQyAtIFNISUZUX05TRUMpOworCSAgICB0eGMtPm9mZnNldCAgICA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0LCBTSElGVF9VUERBVEUpCisJICAgIAkJCSogTlRQX0lOVEVSVkFMX0ZSRVEgLyAxMDAwOworCXR4Yy0+ZnJlcQkgICA9ICh0aW1lX2ZyZXEgLyBOU0VDX1BFUl9VU0VDKQorCQkJCTw8IChTSElGVF9VU0VDIC0gU0hJRlRfTlNFQyk7CiAJdHhjLT5tYXhlcnJvcgkgICA9IHRpbWVfbWF4ZXJyb3I7CiAJdHhjLT5lc3RlcnJvcgkgICA9IHRpbWVfZXN0ZXJyb3I7CiAJdHhjLT5zdGF0dXMJICAgPSB0aW1lX3N0YXR1czsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjNlZmUKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCkBAIC0wLDAgKzEsNDgwIEBACisvKgorICogbGludXgva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBmdW5jdGlvbnMgd2hpY2ggZW11bGF0ZSBhIGxvY2FsIGNsb2NrLWV2ZW50CisgKiBkZXZpY2UgdmlhIGEgYnJvYWRjYXN0IGV2ZW50IHNvdXJjZS4KKyAqCisgKiBDb3B5cmlnaHQoQykgMjAwNS0yMDA2LCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqIENvcHlyaWdodChDKSAyMDA1LTIwMDcsIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCisgKiBDb3B5cmlnaHQoQykgMjAwNi0yMDA3LCBUaW1lc3lzIENvcnAuLCBUaG9tYXMgR2xlaXhuZXIKKyAqCisgKiBUaGlzIGNvZGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDIuIEZvciBkZXRhaWxzIHNlZQorICoga2VybmVsLWJhc2UvQ09QWUlORy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aWNrLmg+CisKKyNpbmNsdWRlICJ0aWNrLWludGVybmFsLmgiCisKKy8qCisgKiBCcm9hZGNhc3Qgc3VwcG9ydCBmb3IgYnJva2VuIHg4NiBoYXJkd2FyZSwgd2hlcmUgdGhlIGxvY2FsIGFwaWMKKyAqIHRpbWVyIHN0b3BzIGluIEMzIHN0YXRlLgorICovCisKK3N0cnVjdCB0aWNrX2RldmljZSB0aWNrX2Jyb2FkY2FzdF9kZXZpY2U7CitzdGF0aWMgY3B1bWFza190IHRpY2tfYnJvYWRjYXN0X21hc2s7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRpY2tfYnJvYWRjYXN0X2xvY2spOworCisvKgorICogRGVidWdnaW5nOiBzZWUgdGltZXJfbGlzdC5jCisgKi8KK3N0cnVjdCB0aWNrX2RldmljZSAqdGlja19nZXRfYnJvYWRjYXN0X2RldmljZSh2b2lkKQoreworCXJldHVybiAmdGlja19icm9hZGNhc3RfZGV2aWNlOworfQorCitjcHVtYXNrX3QgKnRpY2tfZ2V0X2Jyb2FkY2FzdF9tYXNrKHZvaWQpCit7CisJcmV0dXJuICZ0aWNrX2Jyb2FkY2FzdF9tYXNrOworfQorCisvKgorICogU3RhcnQgdGhlIGRldmljZSBpbiBwZXJpb2RpYyBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIHRpY2tfYnJvYWRjYXN0X3N0YXJ0X3BlcmlvZGljKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjKQoreworCWlmIChiYyAmJiBiYy0+bW9kZSA9PSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTikKKwkJdGlja19zZXR1cF9wZXJpb2RpYyhiYywgMSk7Cit9CisKKy8qCisgKiBDaGVjaywgaWYgdGhlIGRldmljZSBjYW4gYmUgdXRpbGl6ZWQgYXMgYnJvYWRjYXN0IGRldmljZToKKyAqLworaW50IHRpY2tfY2hlY2tfYnJvYWRjYXN0X2RldmljZShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJaWYgKHRpY2tfYnJvYWRjYXN0X2RldmljZS5ldnRkZXYgfHwKKwkgICAgKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9DM1NUT1ApKQorCQlyZXR1cm4gMDsKKworCWNsb2NrZXZlbnRzX2V4Y2hhbmdlX2RldmljZShOVUxMLCBkZXYpOworCXRpY2tfYnJvYWRjYXN0X2RldmljZS5ldnRkZXYgPSBkZXY7CisJaWYgKCFjcHVzX2VtcHR5KHRpY2tfYnJvYWRjYXN0X21hc2spKQorCQl0aWNrX2Jyb2FkY2FzdF9zdGFydF9wZXJpb2RpYyhkZXYpOworCXJldHVybiAxOworfQorCisvKgorICogQ2hlY2ssIGlmIHRoZSBkZXZpY2UgaXMgdGhlIGJyb2FkY2FzdCBkZXZpY2UKKyAqLworaW50IHRpY2tfaXNfYnJvYWRjYXN0X2RldmljZShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChkZXYgJiYgdGlja19icm9hZGNhc3RfZGV2aWNlLmV2dGRldiA9PSBkZXYpOworfQorCisvKgorICogQ2hlY2ssIGlmIHRoZSBkZXZpY2UgaXMgZGlzZnVuY3Rpb25hbCBhbmQgYSBwbGFjZSBob2xkZXIsIHdoaWNoCisgKiBuZWVkcyB0byBiZSBoYW5kbGVkIGJ5IHRoZSBicm9hZGNhc3QgZGV2aWNlLgorICovCitpbnQgdGlja19kZXZpY2VfdXNlc19icm9hZGNhc3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBEZXZpY2VzIG1pZ2h0IGJlIHJlZ2lzdGVyZWQgd2l0aCBib3RoIHBlcmlvZGljIGFuZCBvbmVzaG90CisJICogbW9kZSBkaXNhYmxlZC4gVGhpcyBzaWduYWxzLCB0aGF0IHRoZSBkZXZpY2UgbmVlZHMgdG8gYmUKKwkgKiBvcGVyYXRlZCBmcm9tIHRoZSBicm9hZGNhc3QgZGV2aWNlIGFuZCBpcyBhIHBsYWNlaG9sZGVyIGZvcgorCSAqIHRoZSBjcHUgbG9jYWwgZGV2aWNlLgorCSAqLworCWlmICghdGlja19kZXZpY2VfaXNfZnVuY3Rpb25hbChkZXYpKSB7CisJCWRldi0+ZXZlbnRfaGFuZGxlciA9IHRpY2tfaGFuZGxlX3BlcmlvZGljOworCQljcHVfc2V0KGNwdSwgdGlja19icm9hZGNhc3RfbWFzayk7CisJCXRpY2tfYnJvYWRjYXN0X3N0YXJ0X3BlcmlvZGljKHRpY2tfYnJvYWRjYXN0X2RldmljZS5ldnRkZXYpOworCQlyZXQgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQnJvYWRjYXN0IHRoZSBldmVudCB0byB0aGUgY3B1cywgd2hpY2ggYXJlIHNldCBpbiB0aGUgbWFzaworICovCitpbnQgdGlja19kb19icm9hZGNhc3QoY3B1bWFza190IG1hc2spCit7CisJaW50IHJldCA9IDAsIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgdGlja19kZXZpY2UgKnRkOworCisJLyoKKwkgKiBDaGVjaywgaWYgdGhlIGN1cnJlbnQgY3B1IGlzIGluIHRoZSBtYXNrCisJICovCisJaWYgKGNwdV9pc3NldChjcHUsIG1hc2spKSB7CisJCWNwdV9jbGVhcihjcHUsIG1hc2spOworCQl0ZCA9ICZwZXJfY3B1KHRpY2tfY3B1X2RldmljZSwgY3B1KTsKKwkJdGQtPmV2dGRldi0+ZXZlbnRfaGFuZGxlcih0ZC0+ZXZ0ZGV2KTsKKwkJcmV0ID0gMTsKKwl9CisKKwlpZiAoIWNwdXNfZW1wdHkobWFzaykpIHsKKwkJLyoKKwkJICogSXQgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IGNoZWNrIHdoZXRoZXIgdGhlIGRldmljZXMKKwkJICogaGF2ZSBkaWZmZXJlbnQgYnJvYWRjYXN0IGZ1bmN0aW9ucy4gRm9yIG5vdywganVzdCB1c2UgdGhlCisJCSAqIG9uZSBvZiB0aGUgZmlyc3QgZGV2aWNlLiBUaGlzIHdvcmtzIGFzIGxvbmcgYXMgd2UgaGF2ZSB0aGlzCisJCSAqIG1pc2ZlYXR1cmUgb25seSBvbiB4ODYgKGxhcGljKQorCQkgKi8KKwkJY3B1ID0gZmlyc3RfY3B1KG1hc2spOworCQl0ZCA9ICZwZXJfY3B1KHRpY2tfY3B1X2RldmljZSwgY3B1KTsKKwkJdGQtPmV2dGRldi0+YnJvYWRjYXN0KG1hc2spOworCQlyZXQgPSAxOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUGVyaW9kaWMgYnJvYWRjYXN0OgorICogLSBpbnZva2UgdGhlIGJyb2FkY2FzdCBoYW5kbGVycworICovCitzdGF0aWMgdm9pZCB0aWNrX2RvX3BlcmlvZGljX2Jyb2FkY2FzdCh2b2lkKQoreworCWNwdW1hc2tfdCBtYXNrOworCisJc3Bpbl9sb2NrKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrKTsKKworCWNwdXNfYW5kKG1hc2ssIGNwdV9vbmxpbmVfbWFwLCB0aWNrX2Jyb2FkY2FzdF9tYXNrKTsKKwl0aWNrX2RvX2Jyb2FkY2FzdChtYXNrKTsKKworCXNwaW5fdW5sb2NrKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrKTsKK30KKworLyoKKyAqIEV2ZW50IGhhbmRsZXIgZm9yIHBlcmlvZGljIGJyb2FkY2FzdCB0aWNrcworICovCitzdGF0aWMgdm9pZCB0aWNrX2hhbmRsZV9wZXJpb2RpY19icm9hZGNhc3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCWRldi0+bmV4dF9ldmVudC50djY0ID0gS1RJTUVfTUFYOworCisJdGlja19kb19wZXJpb2RpY19icm9hZGNhc3QoKTsKKworCS8qCisJICogVGhlIGRldmljZSBpcyBpbiBwZXJpb2RpYyBtb2RlLiBObyByZXByb2dyYW1taW5nIG5lY2Vzc2FyeToKKwkgKi8KKwlpZiAoZGV2LT5tb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNldHVwIHRoZSBuZXh0IHBlcmlvZCBmb3IgZGV2aWNlcywgd2hpY2ggZG8gbm90IGhhdmUKKwkgKiBwZXJpb2RpYyBtb2RlOgorCSAqLworCWZvciAoOzspIHsKKwkJa3RpbWVfdCBuZXh0ID0ga3RpbWVfYWRkKGRldi0+bmV4dF9ldmVudCwgdGlja19wZXJpb2QpOworCisJCWlmICghY2xvY2tldmVudHNfcHJvZ3JhbV9ldmVudChkZXYsIG5leHQsIGt0aW1lX2dldCgpKSkKKwkJCXJldHVybjsKKwkJdGlja19kb19wZXJpb2RpY19icm9hZGNhc3QoKTsKKwl9Cit9CisKKy8qCisgKiBQb3dlcnN0YXRlIGluZm9ybWF0aW9uOiBUaGUgc3lzdGVtIGVudGVycy9sZWF2ZXMgYSBzdGF0ZSwgd2hlcmUKKyAqIGFmZmVjdGVkIGRldmljZXMgbWlnaHQgc3RvcAorICovCitzdGF0aWMgdm9pZCB0aWNrX2RvX2Jyb2FkY2FzdF9vbl9vZmYodm9pZCAqd2h5KQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjLCAqZGV2OworCXN0cnVjdCB0aWNrX2RldmljZSAqdGQ7CisJdW5zaWduZWQgbG9uZyBmbGFncywgKnJlYXNvbiA9IHdoeTsKKwlpbnQgY3B1OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKKworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl0ZCA9ICZwZXJfY3B1KHRpY2tfY3B1X2RldmljZSwgY3B1KTsKKwlkZXYgPSB0ZC0+ZXZ0ZGV2OworCWJjID0gdGlja19icm9hZGNhc3RfZGV2aWNlLmV2dGRldjsKKworCS8qCisJICogSXMgdGhlIGRldmljZSBpbiBicm9hZGNhc3QgbW9kZSBmb3JldmVyIG9yIGlzIGl0IG5vdAorCSAqIGFmZmVjdGVkIGJ5IHRoZSBwb3dlcnN0YXRlID8KKwkgKi8KKwlpZiAoIWRldiB8fCAhdGlja19kZXZpY2VfaXNfZnVuY3Rpb25hbChkZXYpIHx8CisJICAgICEoZGV2LT5mZWF0dXJlcyAmIENMT0NLX0VWVF9GRUFUX0MzU1RPUCkpCisJCWdvdG8gb3V0OworCisJaWYgKCpyZWFzb24gPT0gQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfT04pIHsKKwkJaWYgKCFjcHVfaXNzZXQoY3B1LCB0aWNrX2Jyb2FkY2FzdF9tYXNrKSkgeworCQkJY3B1X3NldChjcHUsIHRpY2tfYnJvYWRjYXN0X21hc2spOworCQkJaWYgKHRkLT5tb2RlID09IFRJQ0tERVZfTU9ERV9QRVJJT0RJQykKKwkJCQljbG9ja2V2ZW50c19zZXRfbW9kZShkZXYsCisJCQkJCQkgICAgIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjcHVfaXNzZXQoY3B1LCB0aWNrX2Jyb2FkY2FzdF9tYXNrKSkgeworCQkJY3B1X2NsZWFyKGNwdSwgdGlja19icm9hZGNhc3RfbWFzayk7CisJCQlpZiAodGQtPm1vZGUgPT0gVElDS0RFVl9NT0RFX1BFUklPRElDKQorCQkJCXRpY2tfc2V0dXBfcGVyaW9kaWMoZGV2LCAwKTsKKwkJfQorCX0KKworCWlmIChjcHVzX2VtcHR5KHRpY2tfYnJvYWRjYXN0X21hc2spKQorCQljbG9ja2V2ZW50c19zZXRfbW9kZShiYywgQ0xPQ0tfRVZUX01PREVfU0hVVERPV04pOworCWVsc2UgeworCQlpZiAodGlja19icm9hZGNhc3RfZGV2aWNlLm1vZGUgPT0gVElDS0RFVl9NT0RFX1BFUklPRElDKQorCQkJdGlja19icm9hZGNhc3Rfc3RhcnRfcGVyaW9kaWMoYmMpOworCQllbHNlCisJCQl0aWNrX2Jyb2FkY2FzdF9zZXR1cF9vbmVzaG90KGJjKTsKKwl9CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogUG93ZXJzdGF0ZSBpbmZvcm1hdGlvbjogVGhlIHN5c3RlbSBlbnRlcnMvbGVhdmVzIGEgc3RhdGUsIHdoZXJlCisgKiBhZmZlY3RlZCBkZXZpY2VzIG1pZ2h0IHN0b3AuCisgKi8KK3ZvaWQgdGlja19icm9hZGNhc3Rfb25fb2ZmKHVuc2lnbmVkIGxvbmcgcmVhc29uLCBpbnQgKm9uY3B1KQoreworCWludCBjcHUgPSBnZXRfY3B1KCk7CisKKwlpZiAoY3B1ID09ICpvbmNwdSkKKwkJdGlja19kb19icm9hZGNhc3Rfb25fb2ZmKCZyZWFzb24pOworCWVsc2UKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKCpvbmNwdSwgdGlja19kb19icm9hZGNhc3Rfb25fb2ZmLAorCQkJCQkgJnJlYXNvbiwgMSwgMSk7CisJcHV0X2NwdSgpOworfQorCisvKgorICogU2V0IHRoZSBwZXJpb2RpYyBoYW5kbGVyIGRlcGVuZGluZyBvbiBicm9hZGNhc3Qgb24vb2ZmCisgKi8KK3ZvaWQgdGlja19zZXRfcGVyaW9kaWNfaGFuZGxlcihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYsIGludCBicm9hZGNhc3QpCit7CisJaWYgKCFicm9hZGNhc3QpCisJCWRldi0+ZXZlbnRfaGFuZGxlciA9IHRpY2tfaGFuZGxlX3BlcmlvZGljOworCWVsc2UKKwkJZGV2LT5ldmVudF9oYW5kbGVyID0gdGlja19oYW5kbGVfcGVyaW9kaWNfYnJvYWRjYXN0OworfQorCisvKgorICogUmVtb3ZlIGEgQ1BVIGZyb20gYnJvYWRjYXN0aW5nCisgKi8KK3ZvaWQgdGlja19zaHV0ZG93bl9icm9hZGNhc3QodW5zaWduZWQgaW50ICpjcHVwKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGNwdSA9ICpjcHVwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKKworCWJjID0gdGlja19icm9hZGNhc3RfZGV2aWNlLmV2dGRldjsKKwljcHVfY2xlYXIoY3B1LCB0aWNrX2Jyb2FkY2FzdF9tYXNrKTsKKworCWlmICh0aWNrX2Jyb2FkY2FzdF9kZXZpY2UubW9kZSA9PSBUSUNLREVWX01PREVfUEVSSU9ESUMpIHsKKwkJaWYgKGJjICYmIGNwdXNfZW1wdHkodGlja19icm9hZGNhc3RfbWFzaykpCisJCQljbG9ja2V2ZW50c19zZXRfbW9kZShiYywgQ0xPQ0tfRVZUX01PREVfU0hVVERPV04pOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKK30KKworI2lmZGVmIENPTkZJR19USUNLX09ORVNIT1QKKworc3RhdGljIGNwdW1hc2tfdCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2s7CisKKy8qCisgKiBEZWJ1Z2dpbmc6IHNlZSB0aW1lcl9saXN0LmMKKyAqLworY3B1bWFza190ICp0aWNrX2dldF9icm9hZGNhc3Rfb25lc2hvdF9tYXNrKHZvaWQpCit7CisJcmV0dXJuICZ0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2s7Cit9CisKK3N0YXRpYyBpbnQgdGlja19icm9hZGNhc3Rfc2V0X2V2ZW50KGt0aW1lX3QgZXhwaXJlcywgaW50IGZvcmNlKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjID0gdGlja19icm9hZGNhc3RfZGV2aWNlLmV2dGRldjsKKwlrdGltZV90IG5vdyA9IGt0aW1lX2dldCgpOworCWludCByZXM7CisKKwlmb3IoOzspIHsKKwkJcmVzID0gY2xvY2tldmVudHNfcHJvZ3JhbV9ldmVudChiYywgZXhwaXJlcywgbm93KTsKKwkJaWYgKCFyZXMgfHwgIWZvcmNlKQorCQkJcmV0dXJuIHJlczsKKwkJbm93ID0ga3RpbWVfZ2V0KCk7CisJCWV4cGlyZXMgPSBrdGltZV9hZGQobm93LCBrdGltZV9zZXQoMCwgYmMtPm1pbl9kZWx0YV9ucykpOworCX0KK30KKworLyoKKyAqIFJlcHJvZ3JhbSB0aGUgYnJvYWRjYXN0IGRldmljZToKKyAqCisgKiBDYWxsZWQgd2l0aCB0aWNrX2Jyb2FkY2FzdF9sb2NrIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBpbnQgdGlja19icm9hZGNhc3RfcmVwcm9ncmFtKHZvaWQpCit7CisJa3RpbWVfdCBleHBpcmVzID0geyAudHY2NCA9IEtUSU1FX01BWCB9OworCXN0cnVjdCB0aWNrX2RldmljZSAqdGQ7CisJaW50IGNwdTsKKworCS8qCisJICogRmluZCB0aGUgZXZlbnQgd2hpY2ggZXhwaXJlcyBuZXh0OgorCSAqLworCWZvciAoY3B1ID0gZmlyc3RfY3B1KHRpY2tfYnJvYWRjYXN0X29uZXNob3RfbWFzayk7IGNwdSAhPSBOUl9DUFVTOworCSAgICAgY3B1ID0gbmV4dF9jcHUoY3B1LCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2spKSB7CisJCXRkID0gJnBlcl9jcHUodGlja19jcHVfZGV2aWNlLCBjcHUpOworCQlpZiAodGQtPmV2dGRldi0+bmV4dF9ldmVudC50djY0IDwgZXhwaXJlcy50djY0KQorCQkJZXhwaXJlcyA9IHRkLT5ldnRkZXYtPm5leHRfZXZlbnQ7CisJfQorCisJaWYgKGV4cGlyZXMudHY2NCA9PSBLVElNRV9NQVgpCisJCXJldHVybiAwOworCisJcmV0dXJuIHRpY2tfYnJvYWRjYXN0X3NldF9ldmVudChleHBpcmVzLCAwKTsKK30KKworLyoKKyAqIEhhbmRsZSBvbmVzaG90IG1vZGUgYnJvYWRjYXN0aW5nCisgKi8KK3N0YXRpYyB2b2lkIHRpY2tfaGFuZGxlX29uZXNob3RfYnJvYWRjYXN0KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGlja19kZXZpY2UgKnRkOworCWNwdW1hc2tfdCBtYXNrOworCWt0aW1lX3Qgbm93OworCWludCBjcHU7CisKKwlzcGluX2xvY2soJnRpY2tfYnJvYWRjYXN0X2xvY2spOworYWdhaW46CisJZGV2LT5uZXh0X2V2ZW50LnR2NjQgPSBLVElNRV9NQVg7CisJbWFzayA9IENQVV9NQVNLX05PTkU7CisJbm93ID0ga3RpbWVfZ2V0KCk7CisJLyogRmluZCBhbGwgZXhwaXJlZCBldmVudHMgKi8KKwlmb3IgKGNwdSA9IGZpcnN0X2NwdSh0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2spOyBjcHUgIT0gTlJfQ1BVUzsKKwkgICAgIGNwdSA9IG5leHRfY3B1KGNwdSwgdGlja19icm9hZGNhc3Rfb25lc2hvdF9tYXNrKSkgeworCQl0ZCA9ICZwZXJfY3B1KHRpY2tfY3B1X2RldmljZSwgY3B1KTsKKwkJaWYgKHRkLT5ldnRkZXYtPm5leHRfZXZlbnQudHY2NCA8PSBub3cudHY2NCkKKwkJCWNwdV9zZXQoY3B1LCBtYXNrKTsKKwl9CisKKwkvKgorCSAqIFdha2V1cCB0aGUgY3B1cyB3aGljaCBoYXZlIGFuIGV4cGlyZWQgZXZlbnQuIFRoZSBicm9hZGNhc3QKKwkgKiBkZXZpY2UgaXMgcmVwcm9ncmFtbWVkIGluIHRoZSByZXR1cm4gZnJvbSBpZGxlIGNvZGUuCisJICovCisJaWYgKCF0aWNrX2RvX2Jyb2FkY2FzdChtYXNrKSkgeworCQkvKgorCQkgKiBUaGUgZ2xvYmFsIGV2ZW50IGRpZCBub3QgZXhwaXJlIGFueSBDUFUgbG9jYWwKKwkJICogZXZlbnRzLiBUaGlzIGhhcHBlbnMgaW4gZHludGljayBtb2RlLCBhcyB0aGUKKwkJICogbWF4aW11bSBQSVQgZGVsdGEgaXMgcXVpdGUgc21hbGwuCisJCSAqLworCQlpZiAodGlja19icm9hZGNhc3RfcmVwcm9ncmFtKCkpCisJCQlnb3RvIGFnYWluOworCX0KKwlzcGluX3VubG9jaygmdGlja19icm9hZGNhc3RfbG9jayk7Cit9CisKKy8qCisgKiBQb3dlcnN0YXRlIGluZm9ybWF0aW9uOiBUaGUgc3lzdGVtIGVudGVycy9sZWF2ZXMgYSBzdGF0ZSwgd2hlcmUKKyAqIGFmZmVjdGVkIGRldmljZXMgbWlnaHQgc3RvcAorICovCit2b2lkIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfY29udHJvbCh1bnNpZ25lZCBsb25nIHJlYXNvbikKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYywgKmRldjsKKwlzdHJ1Y3QgdGlja19kZXZpY2UgKnRkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNwdTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFBlcmlvZGljIG1vZGUgZG9lcyBub3QgY2FyZSBhYm91dCB0aGUgZW50ZXIvZXhpdCBvZiBwb3dlcgorCSAqIHN0YXRlcworCSAqLworCWlmICh0aWNrX2Jyb2FkY2FzdF9kZXZpY2UubW9kZSA9PSBUSUNLREVWX01PREVfUEVSSU9ESUMpCisJCWdvdG8gb3V0OworCisJYmMgPSB0aWNrX2Jyb2FkY2FzdF9kZXZpY2UuZXZ0ZGV2OworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl0ZCA9ICZwZXJfY3B1KHRpY2tfY3B1X2RldmljZSwgY3B1KTsKKwlkZXYgPSB0ZC0+ZXZ0ZGV2OworCisJaWYgKCEoZGV2LT5mZWF0dXJlcyAmIENMT0NLX0VWVF9GRUFUX0MzU1RPUCkpCisJCWdvdG8gb3V0OworCisJaWYgKHJlYXNvbiA9PSBDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9FTlRFUikgeworCQlpZiAoIWNwdV9pc3NldChjcHUsIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfbWFzaykpIHsKKwkJCWNwdV9zZXQoY3B1LCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2spOworCQkJY2xvY2tldmVudHNfc2V0X21vZGUoZGV2LCBDTE9DS19FVlRfTU9ERV9TSFVURE9XTik7CisJCQlpZiAoZGV2LT5uZXh0X2V2ZW50LnR2NjQgPCBiYy0+bmV4dF9ldmVudC50djY0KQorCQkJCXRpY2tfYnJvYWRjYXN0X3NldF9ldmVudChkZXYtPm5leHRfZXZlbnQsIDEpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNwdV9pc3NldChjcHUsIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfbWFzaykpIHsKKwkJCWNwdV9jbGVhcihjcHUsIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfbWFzayk7CisJCQljbG9ja2V2ZW50c19zZXRfbW9kZShkZXYsIENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOworCQkJaWYgKGRldi0+bmV4dF9ldmVudC50djY0ICE9IEtUSU1FX01BWCkKKwkJCQl0aWNrX3Byb2dyYW1fZXZlbnQoZGV2LT5uZXh0X2V2ZW50LCAxKTsKKwkJfQorCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiB0aWNrX2Jyb2FkY2FzdF9zZXR1cF9oaWdocmVzIC0gc2V0dXAgdGhlIGJyb2FkY2FzdCBkZXZpY2UgZm9yIGhpZ2hyZXMKKyAqLwordm9pZCB0aWNrX2Jyb2FkY2FzdF9zZXR1cF9vbmVzaG90KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjKQoreworCWlmIChiYy0+bW9kZSAhPSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKSB7CisJCWJjLT5ldmVudF9oYW5kbGVyID0gdGlja19oYW5kbGVfb25lc2hvdF9icm9hZGNhc3Q7CisJCWNsb2NrZXZlbnRzX3NldF9tb2RlKGJjLCBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKKwkJYmMtPm5leHRfZXZlbnQudHY2NCA9IEtUSU1FX01BWDsKKwl9Cit9CisKKy8qCisgKiBTZWxlY3Qgb25lc2hvdCBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIGJyb2FkY2FzdCBkZXZpY2UKKyAqLwordm9pZCB0aWNrX2Jyb2FkY2FzdF9zd2l0Y2hfdG9fb25lc2hvdCh2b2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOworCisJdGlja19icm9hZGNhc3RfZGV2aWNlLm1vZGUgPSBUSUNLREVWX01PREVfT05FU0hPVDsKKwliYyA9IHRpY2tfYnJvYWRjYXN0X2RldmljZS5ldnRkZXY7CisJaWYgKGJjKQorCQl0aWNrX2Jyb2FkY2FzdF9zZXR1cF9vbmVzaG90KGJjKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2Jyb2FkY2FzdF9sb2NrLCBmbGFncyk7Cit9CisKKworLyoKKyAqIFJlbW92ZSBhIGRlYWQgQ1BVIGZyb20gYnJvYWRjYXN0aW5nCisgKi8KK3ZvaWQgdGlja19zaHV0ZG93bl9icm9hZGNhc3Rfb25lc2hvdCh1bnNpZ25lZCBpbnQgKmNwdXApCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gKmNwdXA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOworCisJYmMgPSB0aWNrX2Jyb2FkY2FzdF9kZXZpY2UuZXZ0ZGV2OworCWNwdV9jbGVhcihjcHUsIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfbWFzayk7CisKKwlpZiAodGlja19icm9hZGNhc3RfZGV2aWNlLm1vZGUgPT0gVElDS0RFVl9NT0RFX09ORVNIT1QpIHsKKwkJaWYgKGJjICYmIGNwdXNfZW1wdHkodGlja19icm9hZGNhc3Rfb25lc2hvdF9tYXNrKSkKKwkJCWNsb2NrZXZlbnRzX3NldF9tb2RlKGJjLCBDTE9DS19FVlRfTU9ERV9TSFVURE9XTik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMgYi9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDBlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jCkBAIC0wLDAgKzEsMzQ2IEBACisvKgorICogbGludXgva2VybmVsL3RpbWUvdGljay1jb21tb24uYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYmFzZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHBlcmlvZGljIHRpY2sKKyAqIHJlbGF0ZWQgZXZlbnRzLgorICoKKyAqIENvcHlyaWdodChDKSAyMDA1LTIwMDYsIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogQ29weXJpZ2h0KEMpIDIwMDUtMjAwNywgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqIENvcHlyaWdodChDKSAyMDA2LTIwMDcsIFRpbWVzeXMgQ29ycC4sIFRob21hcyBHbGVpeG5lcgorICoKKyAqIFRoaXMgY29kZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMIHZlcnNpb24gMi4gRm9yIGRldGFpbHMgc2VlCisgKiBrZXJuZWwtYmFzZS9DT1BZSU5HLgorICovCisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKworI2luY2x1ZGUgInRpY2staW50ZXJuYWwuaCIKKworLyoKKyAqIFRpY2sgZGV2aWNlcworICovCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGlja19kZXZpY2UsIHRpY2tfY3B1X2RldmljZSk7CisvKgorICogVGljayBuZXh0IGV2ZW50OiBrZWVwcyB0cmFjayBvZiB0aGUgdGljayB0aW1lCisgKi8KK2t0aW1lX3QgdGlja19uZXh0X3BlcmlvZDsKK2t0aW1lX3QgdGlja19wZXJpb2Q7CitzdGF0aWMgaW50IHRpY2tfZG9fdGltZXJfY3B1ID0gLTE7CitERUZJTkVfU1BJTkxPQ0sodGlja19kZXZpY2VfbG9jayk7CisKKy8qCisgKiBEZWJ1Z2dpbmc6IHNlZSB0aW1lcl9saXN0LmMKKyAqLworc3RydWN0IHRpY2tfZGV2aWNlICp0aWNrX2dldF9kZXZpY2UoaW50IGNwdSkKK3sKKwlyZXR1cm4gJnBlcl9jcHUodGlja19jcHVfZGV2aWNlLCBjcHUpOworfQorCisvKioKKyAqIHRpY2tfaXNfb25lc2hvdF9hdmFpbGFibGUgLSBjaGVjayBmb3IgYSBvbmVzaG90IGNhcGFibGUgZXZlbnQgZGV2aWNlCisgKi8KK2ludCB0aWNrX2lzX29uZXNob3RfYXZhaWxhYmxlKHZvaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2ID0gX19nZXRfY3B1X3Zhcih0aWNrX2NwdV9kZXZpY2UpLmV2dGRldjsKKworCXJldHVybiBkZXYgJiYgKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UKTsKK30KKworLyoKKyAqIFBlcmlvZGljIHRpY2sKKyAqLworc3RhdGljIHZvaWQgdGlja19wZXJpb2RpYyhpbnQgY3B1KQoreworCWlmICh0aWNrX2RvX3RpbWVyX2NwdSA9PSBjcHUpIHsKKwkJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisKKwkJLyogS2VlcCB0cmFjayBvZiB0aGUgbmV4dCB0aWNrIGV2ZW50ICovCisJCXRpY2tfbmV4dF9wZXJpb2QgPSBrdGltZV9hZGQodGlja19uZXh0X3BlcmlvZCwgdGlja19wZXJpb2QpOworCisJCWRvX3RpbWVyKDEpOworCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCX0KKworCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShnZXRfaXJxX3JlZ3MoKSkpOworCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKK30KKworLyoKKyAqIEV2ZW50IGhhbmRsZXIgZm9yIHBlcmlvZGljIHRpY2tzCisgKi8KK3ZvaWQgdGlja19oYW5kbGVfcGVyaW9kaWMoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwl0aWNrX3BlcmlvZGljKGNwdSk7CisKKwlpZiAoZGV2LT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpCisJCXJldHVybjsKKwkvKgorCSAqIFNldHVwIHRoZSBuZXh0IHBlcmlvZCBmb3IgZGV2aWNlcywgd2hpY2ggZG8gbm90IGhhdmUKKwkgKiBwZXJpb2RpYyBtb2RlOgorCSAqLworCWZvciAoOzspIHsKKwkJa3RpbWVfdCBuZXh0ID0ga3RpbWVfYWRkKGRldi0+bmV4dF9ldmVudCwgdGlja19wZXJpb2QpOworCisJCWlmICghY2xvY2tldmVudHNfcHJvZ3JhbV9ldmVudChkZXYsIG5leHQsIGt0aW1lX2dldCgpKSkKKwkJCXJldHVybjsKKwkJdGlja19wZXJpb2RpYyhjcHUpOworCX0KK30KKworLyoKKyAqIFNldHVwIHRoZSBkZXZpY2UgZm9yIGEgcGVyaW9kaWMgdGljaworICovCit2b2lkIHRpY2tfc2V0dXBfcGVyaW9kaWMoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LCBpbnQgYnJvYWRjYXN0KQoreworCXRpY2tfc2V0X3BlcmlvZGljX2hhbmRsZXIoZGV2LCBicm9hZGNhc3QpOworCisJLyogQnJvYWRjYXN0IHNldHVwID8gKi8KKwlpZiAoIXRpY2tfZGV2aWNlX2lzX2Z1bmN0aW9uYWwoZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQykgeworCQljbG9ja2V2ZW50c19zZXRfbW9kZShkZXYsIENMT0NLX0VWVF9NT0RFX1BFUklPRElDKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHNlcTsKKwkJa3RpbWVfdCBuZXh0OworCisJCWRvIHsKKwkJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOworCQkJbmV4dCA9IHRpY2tfbmV4dF9wZXJpb2Q7CisJCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOworCisJCWNsb2NrZXZlbnRzX3NldF9tb2RlKGRldiwgQ0xPQ0tfRVZUX01PREVfT05FU0hPVCk7CisKKwkJZm9yICg7OykgeworCQkJaWYgKCFjbG9ja2V2ZW50c19wcm9ncmFtX2V2ZW50KGRldiwgbmV4dCwga3RpbWVfZ2V0KCkpKQorCQkJCXJldHVybjsKKwkJCW5leHQgPSBrdGltZV9hZGQobmV4dCwgdGlja19wZXJpb2QpOworCQl9CisJfQorfQorCisvKgorICogU2V0dXAgdGhlIHRpY2sgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIHRpY2tfc2V0dXBfZGV2aWNlKHN0cnVjdCB0aWNrX2RldmljZSAqdGQsCisJCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpuZXdkZXYsIGludCBjcHUsCisJCQkgICAgICBjcHVtYXNrX3QgY3B1bWFzaykKK3sKKwlrdGltZV90IG5leHRfZXZlbnQ7CisJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKikgPSBOVUxMOworCisJLyoKKwkgKiBGaXJzdCBkZXZpY2Ugc2V0dXAgPworCSAqLworCWlmICghdGQtPmV2dGRldikgeworCQkvKgorCQkgKiBJZiBubyBjcHUgdG9vayB0aGUgZG9fdGltZXIgdXBkYXRlLCBhc3NpZ24gaXQgdG8KKwkJICogdGhpcyBjcHU6CisJCSAqLworCQlpZiAodGlja19kb190aW1lcl9jcHUgPT0gLTEpIHsKKwkJCXRpY2tfZG9fdGltZXJfY3B1ID0gY3B1OworCQkJdGlja19uZXh0X3BlcmlvZCA9IGt0aW1lX2dldCgpOworCQkJdGlja19wZXJpb2QgPSBrdGltZV9zZXQoMCwgTlNFQ19QRVJfU0VDIC8gSFopOworCQl9CisKKwkJLyoKKwkJICogU3RhcnR1cCBpbiBwZXJpb2RpYyBtb2RlIGZpcnN0LgorCQkgKi8KKwkJdGQtPm1vZGUgPSBUSUNLREVWX01PREVfUEVSSU9ESUM7CisJfSBlbHNlIHsKKwkJaGFuZGxlciA9IHRkLT5ldnRkZXYtPmV2ZW50X2hhbmRsZXI7CisJCW5leHRfZXZlbnQgPSB0ZC0+ZXZ0ZGV2LT5uZXh0X2V2ZW50OworCX0KKworCXRkLT5ldnRkZXYgPSBuZXdkZXY7CisKKwkvKgorCSAqIFdoZW4gdGhlIGRldmljZSBpcyBub3QgcGVyIGNwdSwgcGluIHRoZSBpbnRlcnJ1cHQgdG8gdGhlCisJICogY3VycmVudCBjcHU6CisJICovCisJaWYgKCFjcHVzX2VxdWFsKG5ld2Rldi0+Y3B1bWFzaywgY3B1bWFzaykpCisJCWlycV9zZXRfYWZmaW5pdHkobmV3ZGV2LT5pcnEsIGNwdW1hc2spOworCisJLyoKKwkgKiBXaGVuIGdsb2JhbCBicm9hZGNhc3RpbmcgaXMgYWN0aXZlLCBjaGVjayBpZiB0aGUgY3VycmVudAorCSAqIGRldmljZSBpcyByZWdpc3RlcmVkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIGJyb2FkY2FzdCBtb2RlLgorCSAqIFRoaXMgYWxsb3dzIHVzIHRvIGhhbmRsZSB0aGlzIHg4NiBtaXNmZWF0dXJlIGluIGEgZ2VuZXJpYworCSAqIHdheS4KKwkgKi8KKwlpZiAodGlja19kZXZpY2VfdXNlc19icm9hZGNhc3QobmV3ZGV2LCBjcHUpKQorCQlyZXR1cm47CisKKwlpZiAodGQtPm1vZGUgPT0gVElDS0RFVl9NT0RFX1BFUklPRElDKQorCQl0aWNrX3NldHVwX3BlcmlvZGljKG5ld2RldiwgMCk7CisJZWxzZQorCQl0aWNrX3NldHVwX29uZXNob3QobmV3ZGV2LCBoYW5kbGVyLCBuZXh0X2V2ZW50KTsKK30KKworLyoKKyAqIENoZWNrLCBpZiB0aGUgbmV3IHJlZ2lzdGVyZWQgZGV2aWNlIHNob3VsZCBiZSB1c2VkLgorICovCitzdGF0aWMgaW50IHRpY2tfY2hlY2tfbmV3X2RldmljZShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpuZXdkZXYpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY3VyZGV2OworCXN0cnVjdCB0aWNrX2RldmljZSAqdGQ7CisJaW50IGNwdSwgcmV0ID0gTk9USUZZX09LOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY3B1bWFza190IGNwdW1hc2s7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmICghY3B1X2lzc2V0KGNwdSwgbmV3ZGV2LT5jcHVtYXNrKSkKKwkJZ290byBvdXQ7CisKKwl0ZCA9ICZwZXJfY3B1KHRpY2tfY3B1X2RldmljZSwgY3B1KTsKKwljdXJkZXYgPSB0ZC0+ZXZ0ZGV2OworCWNwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCisJLyogY3B1IGxvY2FsIGRldmljZSA/ICovCisJaWYgKCFjcHVzX2VxdWFsKG5ld2Rldi0+Y3B1bWFzaywgY3B1bWFzaykpIHsKKworCQkvKgorCQkgKiBJZiB0aGUgY3B1IGFmZmluaXR5IG9mIHRoZSBkZXZpY2UgaW50ZXJydXB0IGNhbiBub3QKKwkJICogYmUgc2V0LCBpZ25vcmUgaXQuCisJCSAqLworCQlpZiAoIWlycV9jYW5fc2V0X2FmZmluaXR5KG5ld2Rldi0+aXJxKSkKKwkJCWdvdG8gb3V0X2JjOworCisJCS8qCisJCSAqIElmIHdlIGhhdmUgYSBjcHUgbG9jYWwgZGV2aWNlIGFscmVhZHksIGRvIG5vdCByZXBsYWNlIGl0CisJCSAqIGJ5IGEgbm9uIGNwdSBsb2NhbCBkZXZpY2UKKwkJICovCisJCWlmIChjdXJkZXYgJiYgY3B1c19lcXVhbChjdXJkZXYtPmNwdW1hc2ssIGNwdW1hc2spKQorCQkJZ290byBvdXRfYmM7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGFuIGFjdGl2ZSBkZXZpY2UsIHRoZW4gY2hlY2sgdGhlIHJhdGluZyBhbmQgdGhlIG9uZXNob3QKKwkgKiBmZWF0dXJlLgorCSAqLworCWlmIChjdXJkZXYpIHsKKwkJLyoKKwkJICogUHJlZmVyIG9uZSBzaG90IGNhcGFibGUgZGV2aWNlcyAhCisJCSAqLworCQlpZiAoKGN1cmRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UKSAmJgorCQkgICAgIShuZXdkZXYtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCkpCisJCQlnb3RvIG91dF9iYzsKKwkJLyoKKwkJICogQ2hlY2sgdGhlIHJhdGluZworCQkgKi8KKwkJaWYgKGN1cmRldi0+cmF0aW5nID49IG5ld2Rldi0+cmF0aW5nKQorCQkJZ290byBvdXRfYmM7CisJfQorCisJLyoKKwkgKiBSZXBsYWNlIHRoZSBldmVudHVhbGx5IGV4aXN0aW5nIGRldmljZSBieSB0aGUgbmV3CisJICogZGV2aWNlLiBJZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgdGhlIGJyb2FkY2FzdCBkZXZpY2UsIGRvCisJICogbm90IGdpdmUgaXQgYmFjayB0byB0aGUgY2xvY2tldmVudHMgbGF5ZXIgIQorCSAqLworCWlmICh0aWNrX2lzX2Jyb2FkY2FzdF9kZXZpY2UoY3VyZGV2KSkgeworCQljbG9ja2V2ZW50c19zZXRfbW9kZShjdXJkZXYsIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOKTsKKwkJY3VyZGV2ID0gTlVMTDsKKwl9CisJY2xvY2tldmVudHNfZXhjaGFuZ2VfZGV2aWNlKGN1cmRldiwgbmV3ZGV2KTsKKwl0aWNrX3NldHVwX2RldmljZSh0ZCwgbmV3ZGV2LCBjcHUsIGNwdW1hc2spOworCWlmIChuZXdkZXYtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCkKKwkJdGlja19vbmVzaG90X25vdGlmeSgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJldHVybiBOT1RJRllfU1RPUDsKKworb3V0X2JjOgorCS8qCisJICogQ2FuIHRoZSBuZXcgZGV2aWNlIGJlIHVzZWQgYXMgYSBicm9hZGNhc3QgZGV2aWNlID8KKwkgKi8KKwlpZiAodGlja19jaGVja19icm9hZGNhc3RfZGV2aWNlKG5ld2RldikpCisJCXJldCA9IE5PVElGWV9TVE9QOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTaHV0ZG93biBhbiBldmVudCBkZXZpY2Ugb24gYSBnaXZlbiBjcHU6CisgKgorICogVGhpcyBpcyBjYWxsZWQgb24gYSBsaWZlIENQVSwgd2hlbiBhIENQVSBpcyBkZWFkLiBTbyB3ZSBjYW5ub3QKKyAqIGFjY2VzcyB0aGUgaGFyZHdhcmUgZGV2aWNlIGl0c2VsZi4KKyAqIFdlIGp1c3Qgc2V0IHRoZSBtb2RlIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdHMuCisgKi8KK3N0YXRpYyB2b2lkIHRpY2tfc2h1dGRvd24odW5zaWduZWQgaW50ICpjcHVwKQoreworCXN0cnVjdCB0aWNrX2RldmljZSAqdGQgPSAmcGVyX2NwdSh0aWNrX2NwdV9kZXZpY2UsICpjcHVwKTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYgPSB0ZC0+ZXZ0ZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXRkLT5tb2RlID0gVElDS0RFVl9NT0RFX1BFUklPRElDOworCWlmIChkZXYpIHsKKwkJLyoKKwkJICogUHJldmVudCB0aGF0IHRoZSBjbG9jayBldmVudHMgbGF5ZXIgdHJpZXMgdG8gY2FsbAorCQkgKiB0aGUgc2V0IG1vZGUgZnVuY3Rpb24hCisJCSAqLworCQlkZXYtPm1vZGUgPSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ7CisJCWNsb2NrZXZlbnRzX2V4Y2hhbmdlX2RldmljZShkZXYsIE5VTEwpOworCQl0ZC0+ZXZ0ZGV2ID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlja19kZXZpY2VfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogTm90aWZpY2F0aW9uIGFib3V0IGNsb2NrIGV2ZW50IGRldmljZXMKKyAqLworc3RhdGljIGludCB0aWNrX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHJlYXNvbiwKKwkJCSAgICAgICB2b2lkICpkZXYpCit7CisJc3dpdGNoIChyZWFzb24pIHsKKworCWNhc2UgQ0xPQ0tfRVZUX05PVElGWV9BREQ6CisJCXJldHVybiB0aWNrX2NoZWNrX25ld19kZXZpY2UoZGV2KTsKKworCWNhc2UgQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfT046CisJY2FzZSBDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9PRkY6CisJCXRpY2tfYnJvYWRjYXN0X29uX29mZihyZWFzb24sIGRldik7CisJCWJyZWFrOworCisJY2FzZSBDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9FTlRFUjoKKwljYXNlIENMT0NLX0VWVF9OT1RJRllfQlJPQURDQVNUX0VYSVQ6CisJCXRpY2tfYnJvYWRjYXN0X29uZXNob3RfY29udHJvbChyZWFzb24pOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX05PVElGWV9DUFVfREVBRDoKKwkJdGlja19zaHV0ZG93bl9icm9hZGNhc3Rfb25lc2hvdChkZXYpOworCQl0aWNrX3NodXRkb3duX2Jyb2FkY2FzdChkZXYpOworCQl0aWNrX3NodXRkb3duKGRldik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0aWNrX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gdGlja19ub3RpZnksCit9OworCisvKioKKyAqIHRpY2tfaW5pdCAtIGluaXRpYWxpemUgdGhlIHRpY2sgY29udHJvbAorICoKKyAqIFJlZ2lzdGVyIHRoZSBub3RpZmllciB3aXRoIHRoZSBjbG9ja2V2ZW50cyBmcmFtZXdvcmsKKyAqLwordm9pZCBfX2luaXQgdGlja19pbml0KHZvaWQpCit7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfbm90aWZpZXIoJnRpY2tfbm90aWZpZXIpOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oIGIva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODYxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiB0aWNrIGludGVybmFsIHZhcmlhYmxlIGFuZCBmdW5jdGlvbnMgdXNlZCBieSBsb3cvaGlnaCByZXMgY29kZQorICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHRpY2tfZGV2aWNlLCB0aWNrX2NwdV9kZXZpY2UpOworZXh0ZXJuIHNwaW5sb2NrX3QgdGlja19kZXZpY2VfbG9jazsKK2V4dGVybiBrdGltZV90IHRpY2tfbmV4dF9wZXJpb2Q7CitleHRlcm4ga3RpbWVfdCB0aWNrX3BlcmlvZDsKKworZXh0ZXJuIHZvaWQgdGlja19zZXR1cF9wZXJpb2RpYyhzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYsIGludCBicm9hZGNhc3QpOworZXh0ZXJuIHZvaWQgdGlja19oYW5kbGVfcGVyaW9kaWMoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKKworLyoKKyAqIE5PX0haIC8gaGlnaCByZXNvbHV0aW9uIHRpbWVyIHNoYXJlZCBjb2RlCisgKi8KKyNpZmRlZiBDT05GSUdfVElDS19PTkVTSE9UCitleHRlcm4gdm9pZCB0aWNrX3NldHVwX29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbmV3ZGV2LAorCQkJICAgICAgIHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICopLAorCQkJICAgICAgIGt0aW1lX3QgbmV4dGV2dCk7CitleHRlcm4gaW50IHRpY2tfcHJvZ3JhbV9ldmVudChrdGltZV90IGV4cGlyZXMsIGludCBmb3JjZSk7CitleHRlcm4gdm9pZCB0aWNrX29uZXNob3Rfbm90aWZ5KHZvaWQpOworZXh0ZXJuIGludCB0aWNrX3N3aXRjaF90b19vbmVzaG90KHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICopKTsKKworIyBpZmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QKK2V4dGVybiB2b2lkIHRpY2tfYnJvYWRjYXN0X3NldHVwX29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpOworZXh0ZXJuIHZvaWQgdGlja19icm9hZGNhc3Rfb25lc2hvdF9jb250cm9sKHVuc2lnbmVkIGxvbmcgcmVhc29uKTsKK2V4dGVybiB2b2lkIHRpY2tfYnJvYWRjYXN0X3N3aXRjaF90b19vbmVzaG90KHZvaWQpOworZXh0ZXJuIHZvaWQgdGlja19zaHV0ZG93bl9icm9hZGNhc3Rfb25lc2hvdCh1bnNpZ25lZCBpbnQgKmNwdXApOworIyBlbHNlIC8qIEJST0FEQ0FTVCAqLworc3RhdGljIGlubGluZSB2b2lkIHRpY2tfYnJvYWRjYXN0X3NldHVwX29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpCit7CisJQlVHKCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19icm9hZGNhc3Rfb25lc2hvdF9jb250cm9sKHVuc2lnbmVkIGxvbmcgcmVhc29uKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Jyb2FkY2FzdF9zd2l0Y2hfdG9fb25lc2hvdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX3NodXRkb3duX2Jyb2FkY2FzdF9vbmVzaG90KHVuc2lnbmVkIGludCAqY3B1cCkgeyB9CisjIGVuZGlmIC8qICFCUk9BRENBU1QgKi8KKworI2Vsc2UgLyogIU9ORVNIT1QgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdGlja19zZXR1cF9vbmVzaG90KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKm5ld2RldiwKKwkJCXZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICopLAorCQkJa3RpbWVfdCBuZXh0ZXZ0KQoreworCUJVRygpOworfQorc3RhdGljIGlubGluZSBpbnQgdGlja19wcm9ncmFtX2V2ZW50KGt0aW1lX3QgZXhwaXJlcywgaW50IGZvcmNlKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHRpY2tfb25lc2hvdF9ub3RpZnkodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19icm9hZGNhc3Rfc2V0dXBfb25lc2hvdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYykKK3sKKwlCVUcoKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2NvbnRyb2wodW5zaWduZWQgbG9uZyByZWFzb24pIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHRpY2tfc2h1dGRvd25fYnJvYWRjYXN0X29uZXNob3QodW5zaWduZWQgaW50ICpjcHVwKSB7IH0KKyNlbmRpZiAvKiAhVElDS19PTkVTSE9UICovCisKKy8qCisgKiBCcm9hZGNhc3Rpbmcgc3VwcG9ydAorICovCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUCitleHRlcm4gaW50IHRpY2tfZG9fYnJvYWRjYXN0KGNwdW1hc2tfdCBtYXNrKTsKKworZXh0ZXJuIGludCB0aWNrX2RldmljZV91c2VzX2Jyb2FkY2FzdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYsIGludCBjcHUpOworZXh0ZXJuIGludCB0aWNrX2NoZWNrX2Jyb2FkY2FzdF9kZXZpY2Uoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgdGlja19pc19icm9hZGNhc3RfZGV2aWNlKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCB0aWNrX2Jyb2FkY2FzdF9vbl9vZmYodW5zaWduZWQgbG9uZyByZWFzb24sIGludCAqb25jcHUpOworZXh0ZXJuIHZvaWQgdGlja19zaHV0ZG93bl9icm9hZGNhc3QodW5zaWduZWQgaW50ICpjcHVwKTsKKworZXh0ZXJuIHZvaWQKK3RpY2tfc2V0X3BlcmlvZGljX2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LCBpbnQgYnJvYWRjYXN0KTsKKworI2Vsc2UgLyogIUJST0FEQ0FTVCAqLworCitzdGF0aWMgaW5saW5lIGludCB0aWNrX2NoZWNrX2Jyb2FkY2FzdF9kZXZpY2Uoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0aWNrX2lzX2Jyb2FkY2FzdF9kZXZpY2Uoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgdGlja19kZXZpY2VfdXNlc19icm9hZGNhc3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LAorCQkJCQkgICAgIGludCBjcHUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19kb19wZXJpb2RpY19icm9hZGNhc3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19icm9hZGNhc3Rfb25fb2ZmKHVuc2lnbmVkIGxvbmcgcmVhc29uLCBpbnQgKm9uY3B1KSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX3NodXRkb3duX2Jyb2FkY2FzdCh1bnNpZ25lZCBpbnQgKmNwdXApIHsgfQorCisvKgorICogU2V0IHRoZSBwZXJpb2RpYyBoYW5kbGVyIGluIG5vbiBicm9hZGNhc3QgbW9kZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19zZXRfcGVyaW9kaWNfaGFuZGxlcihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgaW50IGJyb2FkY2FzdCkKK3sKKwlkZXYtPmV2ZW50X2hhbmRsZXIgPSB0aWNrX2hhbmRsZV9wZXJpb2RpYzsKK30KKyNlbmRpZiAvKiAhQlJPQURDQVNUICovCisKKy8qCisgKiBDaGVjaywgaWYgdGhlIGRldmljZSBpcyBmdW5jdGlvbmFsIG9yIGEgZHVtbXkgZm9yIGJyb2FkY2FzdAorICovCitzdGF0aWMgaW5saW5lIGludCB0aWNrX2RldmljZV9pc19mdW5jdGlvbmFsKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gIShkZXYtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVkpOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1vbmVzaG90LmMgYi9rZXJuZWwvdGltZS90aWNrLW9uZXNob3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZThiN2ZmCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RpbWUvdGljay1vbmVzaG90LmMKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIGxpbnV4L2tlcm5lbC90aW1lL3RpY2stb25lc2hvdC5jCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyB3aGljaCBtYW5hZ2UgaGlnaCByZXNvbHV0aW9uIHRpY2sKKyAqIHJlbGF0ZWQgZXZlbnRzLgorICoKKyAqIENvcHlyaWdodChDKSAyMDA1LTIwMDYsIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogQ29weXJpZ2h0KEMpIDIwMDUtMjAwNywgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqIENvcHlyaWdodChDKSAyMDA2LTIwMDcsIFRpbWVzeXMgQ29ycC4sIFRob21hcyBHbGVpeG5lcgorICoKKyAqIFRoaXMgY29kZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMIHZlcnNpb24gMi4gRm9yIGRldGFpbHMgc2VlCisgKiBrZXJuZWwtYmFzZS9DT1BZSU5HLgorICovCisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKworI2luY2x1ZGUgInRpY2staW50ZXJuYWwuaCIKKworLyoqCisgKiB0aWNrX3Byb2dyYW1fZXZlbnQKKyAqLworaW50IHRpY2tfcHJvZ3JhbV9ldmVudChrdGltZV90IGV4cGlyZXMsIGludCBmb3JjZSkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYgPSBfX2dldF9jcHVfdmFyKHRpY2tfY3B1X2RldmljZSkuZXZ0ZGV2OworCWt0aW1lX3Qgbm93ID0ga3RpbWVfZ2V0KCk7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgcmV0ID0gY2xvY2tldmVudHNfcHJvZ3JhbV9ldmVudChkZXYsIGV4cGlyZXMsIG5vdyk7CisKKwkJaWYgKCFyZXQgfHwgIWZvcmNlKQorCQkJcmV0dXJuIHJldDsKKwkJbm93ID0ga3RpbWVfZ2V0KCk7CisJCWV4cGlyZXMgPSBrdGltZV9hZGQobm93LCBrdGltZV9zZXQoMCwgZGV2LT5taW5fZGVsdGFfbnMpKTsKKwl9Cit9CisKKy8qKgorICogdGlja19zZXR1cF9vbmVzaG90IC0gc2V0dXAgdGhlIGV2ZW50IGRldmljZSBmb3Igb25lc2hvdCBtb2RlIChocmVzIG9yIG5vaHopCisgKi8KK3ZvaWQgdGlja19zZXR1cF9vbmVzaG90KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKm5ld2RldiwKKwkJCXZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICopLAorCQkJa3RpbWVfdCBuZXh0X2V2ZW50KQoreworCW5ld2Rldi0+ZXZlbnRfaGFuZGxlciA9IGhhbmRsZXI7CisJY2xvY2tldmVudHNfc2V0X21vZGUobmV3ZGV2LCBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKKwljbG9ja2V2ZW50c19wcm9ncmFtX2V2ZW50KG5ld2RldiwgbmV4dF9ldmVudCwga3RpbWVfZ2V0KCkpOworfQorCisvKioKKyAqIHRpY2tfc3dpdGNoX3RvX29uZXNob3QgLSBzd2l0Y2ggdG8gb25lc2hvdCBtb2RlCisgKi8KK2ludCB0aWNrX3N3aXRjaF90b19vbmVzaG90KHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICopKQoreworCXN0cnVjdCB0aWNrX2RldmljZSAqdGQgPSAmX19nZXRfY3B1X3Zhcih0aWNrX2NwdV9kZXZpY2UpOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiA9IHRkLT5ldnRkZXY7CisKKwlpZiAoIWRldiB8fCAhKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UKSB8fAorCSAgICAhdGlja19kZXZpY2VfaXNfZnVuY3Rpb25hbChkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRkLT5tb2RlID0gVElDS0RFVl9NT0RFX09ORVNIT1Q7CisJZGV2LT5ldmVudF9oYW5kbGVyID0gaGFuZGxlcjsKKwljbG9ja2V2ZW50c19zZXRfbW9kZShkZXYsIENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOworCXRpY2tfYnJvYWRjYXN0X3N3aXRjaF90b19vbmVzaG90KCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCisvKioKKyAqIHRpY2tfaW5pdF9oaWdocmVzIC0gc3dpdGNoIHRvIGhpZ2ggcmVzb2x1dGlvbiBtb2RlCisgKgorICogQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLworaW50IHRpY2tfaW5pdF9oaWdocmVzKHZvaWQpCit7CisJcmV0dXJuIHRpY2tfc3dpdGNoX3RvX29uZXNob3QoaHJ0aW1lcl9pbnRlcnJ1cHQpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyYTRhOQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtMCwwICsxLDU2NSBAQAorLyoKKyAqICBsaW51eC9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKKyAqCisgKiAgQ29weXJpZ2h0KEMpIDIwMDUtMjAwNiwgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiAgQ29weXJpZ2h0KEMpIDIwMDUtMjAwNywgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqICBDb3B5cmlnaHQoQykgMjAwNi0yMDA3ICBUaW1lc3lzIENvcnAuLCBUaG9tYXMgR2xlaXhuZXIKKyAqCisgKiAgTm8gaWRsZSB0aWNrIGltcGxlbWVudGF0aW9uIGZvciBsb3cgYW5kIGhpZ2ggcmVzb2x1dGlvbiB0aW1lcnMKKyAqCisgKiAgU3RhcnRlZCBieTogVGhvbWFzIEdsZWl4bmVyIGFuZCBJbmdvIE1vbG5hcgorICoKKyAqICBGb3IgbGljZW5jaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKworI2luY2x1ZGUgInRpY2staW50ZXJuYWwuaCIKKworLyoKKyAqIFBlciBjcHUgbm9oeiBjb250cm9sIHN0cnVjdHVyZQorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRpY2tfc2NoZWQsIHRpY2tfY3B1X3NjaGVkKTsKKworLyoKKyAqIFRoZSB0aW1lLCB3aGVuIHRoZSBsYXN0IGppZmZ5IHVwZGF0ZSBoYXBwZW5lZC4gUHJvdGVjdGVkIGJ5IHh0aW1lX2xvY2suCisgKi8KK3N0YXRpYyBrdGltZV90IGxhc3RfamlmZmllc191cGRhdGU7CisKK3N0cnVjdCB0aWNrX3NjaGVkICp0aWNrX2dldF90aWNrX3NjaGVkKGludCBjcHUpCit7CisJcmV0dXJuICZwZXJfY3B1KHRpY2tfY3B1X3NjaGVkLCBjcHUpOworfQorCisvKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICEKKyAqLworc3RhdGljIHZvaWQgdGlja19kb191cGRhdGVfamlmZmllczY0KGt0aW1lX3Qgbm93KQoreworCXVuc2lnbmVkIGxvbmcgdGlja3MgPSAwOworCWt0aW1lX3QgZGVsdGE7CisKKwkvKiBSZWV2YWx1dGUgd2l0aCB4dGltZV9sb2NrIGhlbGQgKi8KKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKworCWRlbHRhID0ga3RpbWVfc3ViKG5vdywgbGFzdF9qaWZmaWVzX3VwZGF0ZSk7CisJaWYgKGRlbHRhLnR2NjQgPj0gdGlja19wZXJpb2QudHY2NCkgeworCisJCWRlbHRhID0ga3RpbWVfc3ViKGRlbHRhLCB0aWNrX3BlcmlvZCk7CisJCWxhc3RfamlmZmllc191cGRhdGUgPSBrdGltZV9hZGQobGFzdF9qaWZmaWVzX3VwZGF0ZSwKKwkJCQkJCXRpY2tfcGVyaW9kKTsKKworCQkvKiBTbG93IHBhdGggZm9yIGxvbmcgdGltZW91dHMgKi8KKwkJaWYgKHVubGlrZWx5KGRlbHRhLnR2NjQgPj0gdGlja19wZXJpb2QudHY2NCkpIHsKKwkJCXM2NCBpbmNyID0ga3RpbWVfdG9fbnModGlja19wZXJpb2QpOworCisJCQl0aWNrcyA9IGt0aW1lX2Rpdm5zKGRlbHRhLCBpbmNyKTsKKworCQkJbGFzdF9qaWZmaWVzX3VwZGF0ZSA9IGt0aW1lX2FkZF9ucyhsYXN0X2ppZmZpZXNfdXBkYXRlLAorCQkJCQkJCSAgIGluY3IgKiB0aWNrcyk7CisJCX0KKwkJZG9fdGltZXIoKyt0aWNrcyk7CisJfQorCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGFuZCByZXR1cm4gcmV0cmlldmUgdGhlIGppZmZpZXMgdXBkYXRlLgorICovCitzdGF0aWMga3RpbWVfdCB0aWNrX2luaXRfamlmZnlfdXBkYXRlKHZvaWQpCit7CisJa3RpbWVfdCBwZXJpb2Q7CisKKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKwkvKiBEaWQgd2Ugc3RhcnQgdGhlIGppZmZpZXMgdXBkYXRlIHlldCA/ICovCisJaWYgKGxhc3RfamlmZmllc191cGRhdGUudHY2NCA9PSAwKQorCQlsYXN0X2ppZmZpZXNfdXBkYXRlID0gdGlja19uZXh0X3BlcmlvZDsKKwlwZXJpb2QgPSBsYXN0X2ppZmZpZXNfdXBkYXRlOworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisJcmV0dXJuIHBlcmlvZDsKK30KKworLyoKKyAqIE5PSFogLSBha2EgZHluYW1pYyB0aWNrIGZ1bmN0aW9uYWxpdHkKKyAqLworI2lmZGVmIENPTkZJR19OT19IWgorLyoKKyAqIE5PIEhaIGVuYWJsZWQgPworICovCitzdGF0aWMgaW50IHRpY2tfbm9oel9lbmFibGVkIF9fcmVhZF9tb3N0bHkgID0gMTsKKworLyoKKyAqIEVuYWJsZSAvIERpc2FibGUgdGlja2xlc3MgbW9kZQorICovCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF90aWNrX25vaHooY2hhciAqc3RyKQoreworCWlmICghc3RyY21wKHN0ciwgIm9mZiIpKQorCQl0aWNrX25vaHpfZW5hYmxlZCA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJvbiIpKQorCQl0aWNrX25vaHpfZW5hYmxlZCA9IDE7CisJZWxzZQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgibm9oej0iLCBzZXR1cF90aWNrX25vaHopOworCisvKioKKyAqIHRpY2tfbm9oel91cGRhdGVfamlmZmllcyAtIHVwZGF0ZSBqaWZmaWVzIHdoZW4gaWRsZSB3YXMgaW50ZXJydXB0ZWQKKyAqCisgKiBDYWxsZWQgZnJvbSBpbnRlcnJ1cHQgZW50cnkgd2hlbiB0aGUgQ1BVIHdhcyBpZGxlCisgKgorICogSW4gY2FzZSB0aGUgc2NoZWRfdGljayB3YXMgc3RvcHBlZCBvbiB0aGlzIENQVSwgd2UgaGF2ZSB0byBjaGVjayBpZiBqaWZmaWVzCisgKiBtdXN0IGJlIHVwZGF0ZWQuIE90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgaGFuZGxlciBjb3VsZCB1c2UgYSBzdGFsZSBqaWZmeQorICogdmFsdWUuIFdlIGRvIHRoaXMgdW5jb25kaXRpb25hbGx5IG9uIGFueSBjcHUsIGFzIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUKKyAqIGNwdSwgd2hpY2ggaGFzIHRoZSB1cGRhdGUgdGFzayBhc3NpZ25lZCBpcyBpbiBhIGxvbmcgc2xlZXAuCisgKi8KK3ZvaWQgdGlja19ub2h6X3VwZGF0ZV9qaWZmaWVzKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSAmcGVyX2NwdSh0aWNrX2NwdV9zY2hlZCwgY3B1KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWt0aW1lX3Qgbm93OworCisJaWYgKCF0cy0+dGlja19zdG9wcGVkKQorCQlyZXR1cm47CisKKwljcHVfY2xlYXIoY3B1LCBub2h6X2NwdV9tYXNrKTsKKwlub3cgPSBrdGltZV9nZXQoKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0aWNrX2RvX3VwZGF0ZV9qaWZmaWVzNjQobm93KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qKgorICogdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljayAtIHN0b3AgdGhlIGlkbGUgdGljayBmcm9tIHRoZSBpZGxlIHRhc2sKKyAqCisgKiBXaGVuIHRoZSBuZXh0IGV2ZW50IGlzIG1vcmUgdGhhbiBhIHRpY2sgaW50byB0aGUgZnV0dXJlLCBzdG9wIHRoZSBpZGxlIHRpY2sKKyAqIENhbGxlZCBlaXRoZXIgZnJvbSB0aGUgaWRsZSBsb29wIG9yIGZyb20gaXJxX2V4aXQoKSB3aGVuIGFuIGlkbGUgcGVyaW9kIHdhcworICoganVzdCBpbnRlcnJ1cHRlZCBieSBhbiBpbnRlcnJ1cHQgd2hpY2ggZGlkIG5vdCBjYXVzZSBhIHJlc2NoZWR1bGUuCisgKi8KK3ZvaWQgdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2VxLCBsYXN0X2ppZmZpZXMsIG5leHRfamlmZmllcywgZGVsdGFfamlmZmllcywgZmxhZ3M7CisJc3RydWN0IHRpY2tfc2NoZWQgKnRzOworCWt0aW1lX3QgbGFzdF91cGRhdGUsIGV4cGlyZXMsIG5vdywgZGVsdGE7CisJaW50IGNwdTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl0cyA9ICZwZXJfY3B1KHRpY2tfY3B1X3NjaGVkLCBjcHUpOworCisJaWYgKHVubGlrZWx5KHRzLT5ub2h6X21vZGUgPT0gTk9IWl9NT0RFX0lOQUNUSVZFKSkKKwkJZ290byBlbmQ7CisKKwlpZiAobmVlZF9yZXNjaGVkKCkpCisJCWdvdG8gZW5kOworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmICh1bmxpa2VseShsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSkpCisJCXByaW50ayhLRVJOX0VSUiAiTk9IWjogbG9jYWxfc29mdGlycV9wZW5kaW5nICUwMnhcbiIsCisJCSAgICAgICBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSk7CisKKwlub3cgPSBrdGltZV9nZXQoKTsKKwkvKgorCSAqIFdoZW4gY2FsbGVkIGZyb20gaXJxX2V4aXQgd2UgbmVlZCB0byBhY2NvdW50IHRoZSBpZGxlIHNsZWVwIHRpbWUKKwkgKiBjb3JyZWN0bHkuCisJICovCisJaWYgKHRzLT50aWNrX3N0b3BwZWQpIHsKKwkJZGVsdGEgPSBrdGltZV9zdWIobm93LCB0cy0+aWRsZV9lbnRyeXRpbWUpOworCQl0cy0+aWRsZV9zbGVlcHRpbWUgPSBrdGltZV9hZGQodHMtPmlkbGVfc2xlZXB0aW1lLCBkZWx0YSk7CisJfQorCisJdHMtPmlkbGVfZW50cnl0aW1lID0gbm93OworCXRzLT5pZGxlX2NhbGxzKys7CisKKwkvKiBSZWFkIGppZmZpZXMgYW5kIHRoZSB0aW1lIHdoZW4gamlmZmllcyB3ZXJlIHVwZGF0ZWQgbGFzdCAqLworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CisJCWxhc3RfdXBkYXRlID0gbGFzdF9qaWZmaWVzX3VwZGF0ZTsKKwkJbGFzdF9qaWZmaWVzID0gamlmZmllczsKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKKworCS8qIEdldCB0aGUgbmV4dCB0aW1lciB3aGVlbCB0aW1lciAqLworCW5leHRfamlmZmllcyA9IGdldF9uZXh0X3RpbWVyX2ludGVycnVwdChsYXN0X2ppZmZpZXMpOworCWRlbHRhX2ppZmZpZXMgPSBuZXh0X2ppZmZpZXMgLSBsYXN0X2ppZmZpZXM7CisKKwlpZiAocmN1X25lZWRzX2NwdShjcHUpKQorCQlkZWx0YV9qaWZmaWVzID0gMTsKKwkvKgorCSAqIERvIG5vdCBzdG9wIHRoZSB0aWNrLCBpZiB3ZSBhcmUgb25seSBvbmUgb2ZmCisJICogb3IgaWYgdGhlIGNwdSBpcyByZXF1aXJlZCBmb3IgcmN1CisJICovCisJaWYgKCF0cy0+dGlja19zdG9wcGVkICYmIGRlbHRhX2ppZmZpZXMgPT0gMSkKKwkJZ290byBvdXQ7CisKKwkvKiBTY2hlZHVsZSB0aGUgdGljaywgaWYgd2UgYXJlIGF0IGxlYXN0IG9uZSBqaWZmaWUgb2ZmICovCisJaWYgKChsb25nKWRlbHRhX2ppZmZpZXMgPj0gMSkgeworCisJCWlmIChkZWx0YV9qaWZmaWVzID4gMSkKKwkJCWNwdV9zZXQoY3B1LCBub2h6X2NwdV9tYXNrKTsKKwkJLyoKKwkJICogbm9oel9zdG9wX3NjaGVkX3RpY2sgY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIGJlZm9yZQorCQkgKiB0aGUgbm9oel9yZXN0YXJ0X3NjaGVkX3RpY2sgaXMgY2FsbGVkLiBUaGlzIGhhcHBlbnMgd2hlbgorCQkgKiBpbnRlcnJ1cHRzIGFycml2ZSB3aGljaCBkbyBub3QgY2F1c2UgYSByZXNjaGVkdWxlLiBJbiB0aGUKKwkJICogZmlyc3QgY2FsbCB3ZSBzYXZlIHRoZSBjdXJyZW50IHRpY2sgdGltZSwgc28gd2UgY2FuIHJlc3RhcnQKKwkJICogdGhlIHNjaGVkdWxlciB0aWNrIGluIG5vaHpfcmVzdGFydF9zY2hlZF90aWNrLgorCQkgKi8KKwkJaWYgKCF0cy0+dGlja19zdG9wcGVkKSB7CisJCQl0cy0+aWRsZV90aWNrID0gdHMtPnNjaGVkX3RpbWVyLmV4cGlyZXM7CisJCQl0cy0+dGlja19zdG9wcGVkID0gMTsKKwkJCXRzLT5pZGxlX2ppZmZpZXMgPSBsYXN0X2ppZmZpZXM7CisJCX0KKwkJLyoKKwkJICogY2FsY3VsYXRlIHRoZSBleHBpcnkgdGltZSBmb3IgdGhlIG5leHQgdGltZXIgd2hlZWwKKwkJICogdGltZXIKKwkJICovCisJCWV4cGlyZXMgPSBrdGltZV9hZGRfbnMobGFzdF91cGRhdGUsIHRpY2tfcGVyaW9kLnR2NjQgKgorCQkJCSAgICAgICBkZWx0YV9qaWZmaWVzKTsKKwkJdHMtPmlkbGVfZXhwaXJlcyA9IGV4cGlyZXM7CisJCXRzLT5pZGxlX3NsZWVwcysrOworCisJCWlmICh0cy0+bm9oel9tb2RlID09IE5PSFpfTU9ERV9ISUdIUkVTKSB7CisJCQlocnRpbWVyX3N0YXJ0KCZ0cy0+c2NoZWRfdGltZXIsIGV4cGlyZXMsCisJCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CisJCQkvKiBDaGVjaywgaWYgdGhlIHRpbWVyIHdhcyBhbHJlYWR5IGluIHRoZSBwYXN0ICovCisJCQlpZiAoaHJ0aW1lcl9hY3RpdmUoJnRzLT5zY2hlZF90aW1lcikpCisJCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZighdGlja19wcm9ncmFtX2V2ZW50KGV4cGlyZXMsIDApKQorCQkJCWdvdG8gb3V0OworCQkvKgorCQkgKiBXZSBhcmUgcGFzdCB0aGUgZXZlbnQgYWxyZWFkeS4gU28gd2UgY3Jvc3NlZCBhCisJCSAqIGppZmZpZSBib3VuZGFyeS4gVXBkYXRlIGppZmZpZXMgYW5kIHJhaXNlIHRoZQorCQkgKiBzb2Z0aXJxLgorCQkgKi8KKwkJdGlja19kb191cGRhdGVfamlmZmllczY0KGt0aW1lX2dldCgpKTsKKwkJY3B1X2NsZWFyKGNwdSwgbm9oel9jcHVfbWFzayk7CisJfQorCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKFRJTUVSX1NPRlRJUlEpOworb3V0OgorCXRzLT5uZXh0X2ppZmZpZXMgPSBuZXh0X2ppZmZpZXM7CisJdHMtPmxhc3RfamlmZmllcyA9IGxhc3RfamlmZmllczsKK2VuZDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qKgorICogbm9oel9yZXN0YXJ0X3NjaGVkX3RpY2sgLSByZXN0YXJ0IHRoZSBpZGxlIHRpY2sgZnJvbSB0aGUgaWRsZSB0YXNrCisgKgorICogUmVzdGFydCB0aGUgaWRsZSB0aWNrIHdoZW4gdGhlIENQVSBpcyB3b2tlbiB1cCBmcm9tIGlkbGUKKyAqLwordm9pZCB0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSAmcGVyX2NwdSh0aWNrX2NwdV9zY2hlZCwgY3B1KTsKKwl1bnNpZ25lZCBsb25nIHRpY2tzOworCWt0aW1lX3Qgbm93LCBkZWx0YTsKKworCWlmICghdHMtPnRpY2tfc3RvcHBlZCkKKwkJcmV0dXJuOworCisJLyogVXBkYXRlIGppZmZpZXMgZmlyc3QgKi8KKwlub3cgPSBrdGltZV9nZXQoKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7CisJY3B1X2NsZWFyKGNwdSwgbm9oel9jcHVfbWFzayk7CisKKwkvKiBBY2NvdW50IHRoZSBpZGxlIHRpbWUgKi8KKwlkZWx0YSA9IGt0aW1lX3N1Yihub3csIHRzLT5pZGxlX2VudHJ5dGltZSk7CisJdHMtPmlkbGVfc2xlZXB0aW1lID0ga3RpbWVfYWRkKHRzLT5pZGxlX3NsZWVwdGltZSwgZGVsdGEpOworCisJLyoKKwkgKiBXZSBzdG9wcGVkIHRoZSB0aWNrIGluIGlkbGUuIFVwZGF0ZSBwcm9jZXNzIHRpbWVzIHdvdWxkIG1pc3MgdGhlCisJICogdGltZSB3ZSBzbGVwdCBhcyB1cGRhdGVfcHJvY2Vzc190aW1lcyBkb2VzIG9ubHkgYSAxIHRpY2sKKwkgKiBhY2NvdW50aW5nLiBFbmZvcmNlIHRoYXQgdGhpcyBpcyBhY2NvdW50ZWQgdG8gaWRsZSAhCisJICovCisJdGlja3MgPSBqaWZmaWVzIC0gdHMtPmlkbGVfamlmZmllczsKKwkvKgorCSAqIFdlIG1pZ2h0IGJlIG9uZSBvZmYuIERvIG5vdCByYW5kb21seSBhY2NvdW50IGEgaHVnZSBudW1iZXIgb2YgdGlja3MhCisJICovCisJaWYgKHRpY2tzICYmIHRpY2tzIDwgTE9OR19NQVgpIHsKKwkJYWRkX3ByZWVtcHRfY291bnQoSEFSRElSUV9PRkZTRVQpOworCQlhY2NvdW50X3N5c3RlbV90aW1lKGN1cnJlbnQsIEhBUkRJUlFfT0ZGU0VULAorCQkJCSAgICBqaWZmaWVzX3RvX2NwdXRpbWUodGlja3MpKTsKKwkJc3ViX3ByZWVtcHRfY291bnQoSEFSRElSUV9PRkZTRVQpOworCX0KKworCS8qCisJICogQ2FuY2VsIHRoZSBzY2hlZHVsZWQgdGltZXIgYW5kIHJlc3RvcmUgdGhlIHRpY2sKKwkgKi8KKwl0cy0+dGlja19zdG9wcGVkICA9IDA7CisJaHJ0aW1lcl9jYW5jZWwoJnRzLT5zY2hlZF90aW1lcik7CisJdHMtPnNjaGVkX3RpbWVyLmV4cGlyZXMgPSB0cy0+aWRsZV90aWNrOworCisJd2hpbGUgKDEpIHsKKwkJLyogRm9yd2FyZCB0aGUgdGltZSB0byBleHBpcmUgaW4gdGhlIGZ1dHVyZSAqLworCQlocnRpbWVyX2ZvcndhcmQoJnRzLT5zY2hlZF90aW1lciwgbm93LCB0aWNrX3BlcmlvZCk7CisKKwkJaWYgKHRzLT5ub2h6X21vZGUgPT0gTk9IWl9NT0RFX0hJR0hSRVMpIHsKKwkJCWhydGltZXJfc3RhcnQoJnRzLT5zY2hlZF90aW1lciwKKwkJCQkgICAgICB0cy0+c2NoZWRfdGltZXIuZXhwaXJlcywKKwkJCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKKwkJCS8qIENoZWNrLCBpZiB0aGUgdGltZXIgd2FzIGFscmVhZHkgaW4gdGhlIHBhc3QgKi8KKwkJCWlmIChocnRpbWVyX2FjdGl2ZSgmdHMtPnNjaGVkX3RpbWVyKSkKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWlmICghdGlja19wcm9ncmFtX2V2ZW50KHRzLT5zY2hlZF90aW1lci5leHBpcmVzLCAwKSkKKwkJCQlicmVhazsKKwkJfQorCQkvKiBVcGRhdGUgamlmZmllcyBhbmQgcmVyZWFkIHRpbWUgKi8KKwkJdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7CisJCW5vdyA9IGt0aW1lX2dldCgpOworCX0KKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbnQgdGlja19ub2h6X3JlcHJvZ3JhbShzdHJ1Y3QgdGlja19zY2hlZCAqdHMsIGt0aW1lX3Qgbm93KQoreworCWhydGltZXJfZm9yd2FyZCgmdHMtPnNjaGVkX3RpbWVyLCBub3csIHRpY2tfcGVyaW9kKTsKKwlyZXR1cm4gdGlja19wcm9ncmFtX2V2ZW50KHRzLT5zY2hlZF90aW1lci5leHBpcmVzLCAwKTsKK30KKworLyoKKyAqIFRoZSBub2h6IGxvdyByZXMgaW50ZXJydXB0IGhhbmRsZXIKKyAqLworc3RhdGljIHZvaWQgdGlja19ub2h6X2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0aWNrX3NjaGVkICp0cyA9ICZfX2dldF9jcHVfdmFyKHRpY2tfY3B1X3NjaGVkKTsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOworCWt0aW1lX3Qgbm93ID0ga3RpbWVfZ2V0KCk7CisKKwlkZXYtPm5leHRfZXZlbnQudHY2NCA9IEtUSU1FX01BWDsKKworCS8qIENoZWNrLCBpZiB0aGUgamlmZmllcyBuZWVkIGFuIHVwZGF0ZSAqLworCXRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NChub3cpOworCisJLyoKKwkgKiBXaGVuIHdlIGFyZSBpZGxlIGFuZCB0aGUgdGljayBpcyBzdG9wcGVkLCB3ZSBoYXZlIHRvIHRvdWNoCisJICogdGhlIHdhdGNoZG9nIGFzIHdlIG1pZ2h0IG5vdCBzY2hlZHVsZSBmb3IgYSByZWFsbHkgbG9uZworCSAqIHRpbWUuIFRoaXMgaGFwcGVucyBvbiBjb21wbGV0ZSBpZGxlIFNNUCBzeXN0ZW1zIHdoaWxlCisJICogd2FpdGluZyBvbiB0aGUgbG9naW4gcHJvbXB0LiBXZSBhbHNvIGluY3JlbWVudCB0aGUgInN0YXJ0CisJICogb2YgaWRsZSIgamlmZnkgc3RhbXAgc28gdGhlIGlkbGUgYWNjb3VudGluZyBhZGp1c3RtZW50IHdlCisJICogZG8gd2hlbiB3ZSBnbyBidXN5IGFnYWluIGRvZXMgbm90IGFjY291bnQgdG9vIG11Y2ggdGlja3MuCisJICovCisJaWYgKHRzLT50aWNrX3N0b3BwZWQpIHsKKwkJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOworCQl0cy0+aWRsZV9qaWZmaWVzKys7CisJfQorCisJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKKwlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORyk7CisKKwkvKiBEbyBub3QgcmVzdGFydCwgd2hlbiB3ZSBhcmUgaW4gdGhlIGlkbGUgbG9vcCAqLworCWlmICh0cy0+dGlja19zdG9wcGVkKQorCQlyZXR1cm47CisKKwl3aGlsZSAodGlja19ub2h6X3JlcHJvZ3JhbSh0cywgbm93KSkgeworCQlub3cgPSBrdGltZV9nZXQoKTsKKwkJdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7CisJfQorfQorCisvKioKKyAqIHRpY2tfbm9oel9zd2l0Y2hfdG9fbm9oeiAtIHN3aXRjaCB0byBub2h6IG1vZGUKKyAqLworc3RhdGljIHZvaWQgdGlja19ub2h6X3N3aXRjaF90b19ub2h6KHZvaWQpCit7CisJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0gJl9fZ2V0X2NwdV92YXIodGlja19jcHVfc2NoZWQpOworCWt0aW1lX3QgbmV4dDsKKworCWlmICghdGlja19ub2h6X2VuYWJsZWQpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKHRpY2tfc3dpdGNoX3RvX29uZXNob3QodGlja19ub2h6X2hhbmRsZXIpKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJcmV0dXJuOworCX0KKworCXRzLT5ub2h6X21vZGUgPSBOT0haX01PREVfTE9XUkVTOworCisJLyoKKwkgKiBSZWN5Y2xlIHRoZSBocnRpbWVyIGluIHRzLCBzbyB3ZSBjYW4gc2hhcmUgdGhlCisJICogaHJ0aW1lcl9mb3J3YXJkIHdpdGggdGhlIGhpZ2hyZXMgY29kZS4KKwkgKi8KKwlocnRpbWVyX2luaXQoJnRzLT5zY2hlZF90aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfQUJTKTsKKwkvKiBHZXQgdGhlIG5leHQgcGVyaW9kICovCisJbmV4dCA9IHRpY2tfaW5pdF9qaWZmeV91cGRhdGUoKTsKKworCWZvciAoOzspIHsKKwkJdHMtPnNjaGVkX3RpbWVyLmV4cGlyZXMgPSBuZXh0OworCQlpZiAoIXRpY2tfcHJvZ3JhbV9ldmVudChuZXh0LCAwKSkKKwkJCWJyZWFrOworCQluZXh0ID0ga3RpbWVfYWRkKG5leHQsIHRpY2tfcGVyaW9kKTsKKwl9CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gTk9IeiBtb2RlIG9uIENQVSAjJWRcbiIsCisJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfc3dpdGNoX3RvX25vaHoodm9pZCkgeyB9CisKKyNlbmRpZiAvKiBOT19IWiAqLworCisvKgorICogSGlnaCByZXNvbHV0aW9uIHRpbWVyIHNwZWNpZmljIGNvZGUKKyAqLworI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKKy8qCisgKiBXZSByZWFybSB0aGUgdGltZXIgdW50aWwgd2UgZ2V0IGRpc2FibGVkIGJ5IHRoZSBpZGxlIGNvZGUKKyAqIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYW5kIHRpbWVyLT5iYXNlLT5jcHVfYmFzZS0+bG9jayBoZWxkLgorICovCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgdGlja19zY2hlZF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCit7CisJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0KKwkJY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGlja19zY2hlZCwgc2NoZWRfdGltZXIpOworCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpiYXNlID0gdGltZXItPmJhc2UtPmNwdV9iYXNlOworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7CisJa3RpbWVfdCBub3cgPSBrdGltZV9nZXQoKTsKKworCS8qIENoZWNrLCBpZiB0aGUgamlmZmllcyBuZWVkIGFuIHVwZGF0ZSAqLworCXRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NChub3cpOworCisJLyoKKwkgKiBEbyBub3QgY2FsbCwgd2hlbiB3ZSBhcmUgbm90IGluIGlycSBjb250ZXh0IGFuZCBoYXZlCisJICogbm8gdmFsaWQgcmVncyBwb2ludGVyCisJICovCisJaWYgKHJlZ3MpIHsKKwkJLyoKKwkJICogV2hlbiB3ZSBhcmUgaWRsZSBhbmQgdGhlIHRpY2sgaXMgc3RvcHBlZCwgd2UgaGF2ZSB0byB0b3VjaAorCQkgKiB0aGUgd2F0Y2hkb2cgYXMgd2UgbWlnaHQgbm90IHNjaGVkdWxlIGZvciBhIHJlYWxseSBsb25nCisJCSAqIHRpbWUuIFRoaXMgaGFwcGVucyBvbiBjb21wbGV0ZSBpZGxlIFNNUCBzeXN0ZW1zIHdoaWxlCisJCSAqIHdhaXRpbmcgb24gdGhlIGxvZ2luIHByb21wdC4gV2UgYWxzbyBpbmNyZW1lbnQgdGhlICJzdGFydCBvZgorCQkgKiBpZGxlIiBqaWZmeSBzdGFtcCBzbyB0aGUgaWRsZSBhY2NvdW50aW5nIGFkanVzdG1lbnQgd2UgZG8KKwkJICogd2hlbiB3ZSBnbyBidXN5IGFnYWluIGRvZXMgbm90IGFjY291bnQgdG9vIG11Y2ggdGlja3MuCisJCSAqLworCQlpZiAodHMtPnRpY2tfc3RvcHBlZCkgeworCQkJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOworCQkJdHMtPmlkbGVfamlmZmllcysrOworCQl9CisJCS8qCisJCSAqIHVwZGF0ZV9wcm9jZXNzX3RpbWVzKCkgbWlnaHQgdGFrZSB0YXNrbGlzdF9sb2NrLCBoZW5jZQorCQkgKiBkcm9wIHRoZSBiYXNlIGxvY2suIHNjaGVkLXRpY2sgaHJ0aW1lcnMgYXJlIHBlci1DUFUgYW5kCisJCSAqIG5ldmVyIGFjY2Vzc2libGUgYnkgdXNlcnNwYWNlIEFQSXMsIHNvIHRoaXMgaXMgc2FmZSB0byBkby4KKwkJICovCisJCXNwaW5fdW5sb2NrKCZiYXNlLT5sb2NrKTsKKwkJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKKwkJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOworCQlzcGluX2xvY2soJmJhc2UtPmxvY2spOworCX0KKworCS8qIERvIG5vdCByZXN0YXJ0LCB3aGVuIHdlIGFyZSBpbiB0aGUgaWRsZSBsb29wICovCisJaWYgKHRzLT50aWNrX3N0b3BwZWQpCisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKworCWhydGltZXJfZm9yd2FyZCh0aW1lciwgbm93LCB0aWNrX3BlcmlvZCk7CisKKwlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOworfQorCisvKioKKyAqIHRpY2tfc2V0dXBfc2NoZWRfdGltZXIgLSBzZXR1cCB0aGUgdGljayBlbXVsYXRpb24gdGltZXIKKyAqLwordm9pZCB0aWNrX3NldHVwX3NjaGVkX3RpbWVyKHZvaWQpCit7CisJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0gJl9fZ2V0X2NwdV92YXIodGlja19jcHVfc2NoZWQpOworCWt0aW1lX3Qgbm93ID0ga3RpbWVfZ2V0KCk7CisKKwkvKgorCSAqIEVtdWxhdGUgdGljayBwcm9jZXNzaW5nIHZpYSBwZXItQ1BVIGhydGltZXJzOgorCSAqLworCWhydGltZXJfaW5pdCgmdHMtPnNjaGVkX3RpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9BQlMpOworCXRzLT5zY2hlZF90aW1lci5mdW5jdGlvbiA9IHRpY2tfc2NoZWRfdGltZXI7CisJdHMtPnNjaGVkX3RpbWVyLmNiX21vZGUgPSBIUlRJTUVSX0NCX0lSUVNBRkVfTk9fU09GVElSUTsKKworCS8qIEdldCB0aGUgbmV4dCBwZXJpb2QgKi8KKwl0cy0+c2NoZWRfdGltZXIuZXhwaXJlcyA9IHRpY2tfaW5pdF9qaWZmeV91cGRhdGUoKTsKKworCWZvciAoOzspIHsKKwkJaHJ0aW1lcl9mb3J3YXJkKCZ0cy0+c2NoZWRfdGltZXIsIG5vdywgdGlja19wZXJpb2QpOworCQlocnRpbWVyX3N0YXJ0KCZ0cy0+c2NoZWRfdGltZXIsIHRzLT5zY2hlZF90aW1lci5leHBpcmVzLAorCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CisJCS8qIENoZWNrLCBpZiB0aGUgdGltZXIgd2FzIGFscmVhZHkgaW4gdGhlIHBhc3QgKi8KKwkJaWYgKGhydGltZXJfYWN0aXZlKCZ0cy0+c2NoZWRfdGltZXIpKQorCQkJYnJlYWs7CisJCW5vdyA9IGt0aW1lX2dldCgpOworCX0KKworI2lmZGVmIENPTkZJR19OT19IWgorCWlmICh0aWNrX25vaHpfZW5hYmxlZCkKKwkJdHMtPm5vaHpfbW9kZSA9IE5PSFpfTU9ERV9ISUdIUkVTOworI2VuZGlmCit9CisKK3ZvaWQgdGlja19jYW5jZWxfc2NoZWRfdGltZXIoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSAmcGVyX2NwdSh0aWNrX2NwdV9zY2hlZCwgY3B1KTsKKworCWlmICh0cy0+c2NoZWRfdGltZXIuYmFzZSkKKwkJaHJ0aW1lcl9jYW5jZWwoJnRzLT5zY2hlZF90aW1lcik7CisJdHMtPnRpY2tfc3RvcHBlZCA9IDA7CisJdHMtPm5vaHpfbW9kZSA9IE5PSFpfTU9ERV9JTkFDVElWRTsKK30KKyNlbmRpZiAvKiBISUdIX1JFU19USU1FUlMgKi8KKworLyoqCisgKiBBc3luYyBub3RpZmljYXRpb24gYWJvdXQgY2xvY2tzb3VyY2UgY2hhbmdlcworICovCit2b2lkIHRpY2tfY2xvY2tfbm90aWZ5KHZvaWQpCit7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCXNldF9iaXQoMCwgJnBlcl9jcHUodGlja19jcHVfc2NoZWQsIGNwdSkuY2hlY2tfY2xvY2tzKTsKK30KKworLyoKKyAqIEFzeW5jIG5vdGlmaWNhdGlvbiBhYm91dCBjbG9jayBldmVudCBjaGFuZ2VzCisgKi8KK3ZvaWQgdGlja19vbmVzaG90X25vdGlmeSh2b2lkKQoreworCXN0cnVjdCB0aWNrX3NjaGVkICp0cyA9ICZfX2dldF9jcHVfdmFyKHRpY2tfY3B1X3NjaGVkKTsKKworCXNldF9iaXQoMCwgJnRzLT5jaGVja19jbG9ja3MpOworfQorCisvKioKKyAqIENoZWNrLCBpZiBhIGNoYW5nZSBoYXBwZW5lZCwgd2hpY2ggbWFrZXMgb25lc2hvdCBwb3NzaWJsZS4KKyAqCisgKiBDYWxsZWQgY3ljbGljIGZyb20gdGhlIGhydGltZXIgc29mdGlycSAoZHJpdmVuIGJ5IHRoZSB0aW1lcgorICogc29mdGlycSkgYWxsb3dfbm9oeiBzaWduYWxzLCB0aGF0IHdlIGNhbiBzd2l0Y2ggaW50byBsb3ctcmVzIG5vaHoKKyAqIG1vZGUsIGJlY2F1c2UgaGlnaCByZXNvbHV0aW9uIHRpbWVycyBhcmUgZGlzYWJsZWQgKGVpdGhlciBjb21waWxlCisgKiBvciBydW50aW1lKS4KKyAqLworaW50IHRpY2tfY2hlY2tfb25lc2hvdF9jaGFuZ2UoaW50IGFsbG93X25vaHopCit7CisJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0gJl9fZ2V0X2NwdV92YXIodGlja19jcHVfc2NoZWQpOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJnRzLT5jaGVja19jbG9ja3MpKQorCQlyZXR1cm4gMDsKKworCWlmICh0cy0+bm9oel9tb2RlICE9IE5PSFpfTU9ERV9JTkFDVElWRSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXRpbWVrZWVwaW5nX2lzX2NvbnRpbnVvdXMoKSB8fCAhdGlja19pc19vbmVzaG90X2F2YWlsYWJsZSgpKQorCQlyZXR1cm4gMDsKKworCWlmICghYWxsb3dfbm9oeikKKwkJcmV0dXJuIDE7CisKKwl0aWNrX25vaHpfc3dpdGNoX3RvX25vaHooKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODJjNjM1Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCkBAIC0wLDAgKzEsMjg3IEBACisvKgorICoga2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCisgKgorICogTGlzdCBwZW5kaW5nIHRpbWVycworICoKKyAqIENvcHlyaWdodChDKSAyMDA2LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKK3R5cGVkZWYgdm9pZCAoKnByaW50X2ZuX3QpKHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKKworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlLCBocnRpbWVyX2Jhc2VzKTsKKworLyoKKyAqIFRoaXMgYWxsb3dzIHByaW50aW5nIGJvdGggdG8gL3Byb2MvdGltZXJfbGlzdCBhbmQKKyAqIHRvIHRoZSBjb25zb2xlIChvbiBTeXNScS1RKToKKyAqLworI2RlZmluZSBTRVFfcHJpbnRmKG0sIHguLi4pCQkJXAorIGRvIHsJCQkJCQlcCisJaWYgKG0pCQkJCQlcCisJCXNlcV9wcmludGYobSwgeCk7CQlcCisJZWxzZQkJCQkJXAorCQlwcmludGsoeCk7CQkJXAorIH0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIHByaW50X25hbWVfb2Zmc2V0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqc3ltKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXN5bTsKKwljaGFyIG5hbWVidWZbS1NZTV9OQU1FX0xFTisxXTsKKwl1bnNpZ25lZCBsb25nIHNpemUsIG9mZnNldDsKKwljb25zdCBjaGFyICpzeW1fbmFtZTsKKwljaGFyICptb2RuYW1lOworCisJc3ltX25hbWUgPSBrYWxsc3ltc19sb29rdXAoYWRkciwgJnNpemUsICZvZmZzZXQsICZtb2RuYW1lLCBuYW1lYnVmKTsKKwlpZiAoc3ltX25hbWUpCisJCVNFUV9wcmludGYobSwgIiVzIiwgc3ltX25hbWUpOworCWVsc2UKKwkJU0VRX3ByaW50ZihtLCAiPCVwPiIsIHN5bSk7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF90aW1lcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBocnRpbWVyICp0aW1lciwgaW50IGlkeCwgdTY0IG5vdykKK3sKKyNpZmRlZiBDT05GSUdfVElNRVJfU1RBVFMKKwljaGFyIHRtcFtUQVNLX0NPTU1fTEVOICsgMV07CisjZW5kaWYKKwlTRVFfcHJpbnRmKG0sICIgIyVkOiAiLCBpZHgpOworCXByaW50X25hbWVfb2Zmc2V0KG0sIHRpbWVyKTsKKwlTRVFfcHJpbnRmKG0sICIsICIpOworCXByaW50X25hbWVfb2Zmc2V0KG0sIHRpbWVyLT5mdW5jdGlvbik7CisJU0VRX3ByaW50ZihtLCAiLCBTOiUwMmx4IiwgdGltZXItPnN0YXRlKTsKKyNpZmRlZiBDT05GSUdfVElNRVJfU1RBVFMKKwlTRVFfcHJpbnRmKG0sICIsICIpOworCXByaW50X25hbWVfb2Zmc2V0KG0sIHRpbWVyLT5zdGFydF9zaXRlKTsKKwltZW1jcHkodG1wLCB0aW1lci0+c3RhcnRfY29tbSwgVEFTS19DT01NX0xFTik7CisJdG1wW1RBU0tfQ09NTV9MRU5dID0gMDsKKwlTRVFfcHJpbnRmKG0sICIsICVzLyVkIiwgdG1wLCB0aW1lci0+c3RhcnRfcGlkKTsKKyNlbmRpZgorCVNFUV9wcmludGYobSwgIlxuIik7CisJU0VRX3ByaW50ZihtLCAiICMgZXhwaXJlcyBhdCAlTGQgbnNlY3MgW2luICVMZCBuc2Vjc11cbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnModGltZXItPmV4cGlyZXMpLAorCQkodW5zaWduZWQgbG9uZyBsb25nKShrdGltZV90b19ucyh0aW1lci0+ZXhwaXJlcykgLSBub3cpKTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X2FjdGl2ZV90aW1lcnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlLAorCQkgICAgdTY0IG5vdykKK3sKKwlzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIHRtcDsKKwl1bnNpZ25lZCBsb25nIG5leHQgPSAwLCBpOworCXN0cnVjdCByYl9ub2RlICpjdXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKK25leHRfb25lOgorCWkgPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5jcHVfYmFzZS0+bG9jaywgZmxhZ3MpOworCisJY3VyciA9IGJhc2UtPmZpcnN0OworCS8qCisJICogQ3J1ZGUgYnV0IHdlIGhhdmUgdG8gZG8gdGhpcyBPKE4qTikgdGhpbmcsIGJlY2F1c2UKKwkgKiB3ZSBoYXZlIHRvIHVubG9jayB0aGUgYmFzZSB3aGVuIHByaW50aW5nOgorCSAqLworCXdoaWxlIChjdXJyICYmIGkgPCBuZXh0KSB7CisJCWN1cnIgPSByYl9uZXh0KGN1cnIpOworCQlpKys7CisJfQorCisJaWYgKGN1cnIpIHsKKworCQl0aW1lciA9IHJiX2VudHJ5KGN1cnIsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKKwkJdG1wID0gKnRpbWVyOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5jcHVfYmFzZS0+bG9jaywgZmxhZ3MpOworCisJCXByaW50X3RpbWVyKG0sICZ0bXAsIGksIG5vdyk7CisJCW5leHQrKzsKKwkJZ290byBuZXh0X29uZTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+Y3B1X2Jhc2UtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X2Jhc2Uoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlLCB1NjQgbm93KQoreworCVNFUV9wcmludGYobSwgIiAgLmluZGV4OiAgICAgICVkXG4iLAorCQkJYmFzZS0+aW5kZXgpOworCVNFUV9wcmludGYobSwgIiAgLnJlc29sdXRpb246ICVMZCBuc2Vjc1xuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoYmFzZS0+cmVzb2x1dGlvbikpOworCVNFUV9wcmludGYobSwgICAiICAuZ2V0X3RpbWU6ICAgIik7CisJcHJpbnRfbmFtZV9vZmZzZXQobSwgYmFzZS0+Z2V0X3RpbWUpOworCVNFUV9wcmludGYobSwgICAiXG4iKTsKKyNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCisJU0VRX3ByaW50ZihtLCAiICAub2Zmc2V0OiAgICAgJUxkIG5zZWNzXG4iLAorCQkJa3RpbWVfdG9fbnMoYmFzZS0+b2Zmc2V0KSk7CisjZW5kaWYKKwlTRVFfcHJpbnRmKG0sICAgImFjdGl2ZSB0aW1lcnM6XG4iKTsKKwlwcmludF9hY3RpdmVfdGltZXJzKG0sIGJhc2UsIG5vdyk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2NwdShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUsIHU2NCBub3cpCit7CisJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlID0gJnBlcl9jcHUoaHJ0aW1lcl9iYXNlcywgY3B1KTsKKwlpbnQgaTsKKworCVNFUV9wcmludGYobSwgIlxuY3B1OiAlZFxuIiwgY3B1KTsKKwlmb3IgKGkgPSAwOyBpIDwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVM7IGkrKykgeworCQlTRVFfcHJpbnRmKG0sICIgY2xvY2sgJWQ6XG4iLCBpKTsKKwkJcHJpbnRfYmFzZShtLCBjcHVfYmFzZS0+Y2xvY2tfYmFzZSArIGksIG5vdyk7CisJfQorI2RlZmluZSBQKHgpIFwKKwlTRVFfcHJpbnRmKG0sICIgIC4lLTE1czogJUxkXG4iLCAjeCwgKHU2NCkoY3B1X2Jhc2UtPngpKQorI2RlZmluZSBQX25zKHgpIFwKKwlTRVFfcHJpbnRmKG0sICIgIC4lLTE1czogJUxkIG5zZWNzXG4iLCAjeCwgXAorCQkodTY0KShrdGltZV90b19ucyhjcHVfYmFzZS0+eCkpKQorCisjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUworCVBfbnMoZXhwaXJlc19uZXh0KTsKKwlQKGhyZXNfYWN0aXZlKTsKKwlQKG5yX2V2ZW50cyk7CisjZW5kaWYKKyN1bmRlZiBQCisjdW5kZWYgUF9ucworCisjaWZkZWYgQ09ORklHX1RJQ0tfT05FU0hPVAorIyBkZWZpbmUgUCh4KSBcCisJU0VRX3ByaW50ZihtLCAiICAuJS0xNXM6ICVMZFxuIiwgI3gsICh1NjQpKHRzLT54KSkKKyMgZGVmaW5lIFBfbnMoeCkgXAorCVNFUV9wcmludGYobSwgIiAgLiUtMTVzOiAlTGQgbnNlY3NcbiIsICN4LCBcCisJCSh1NjQpKGt0aW1lX3RvX25zKHRzLT54KSkpCisJeworCQlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSB0aWNrX2dldF90aWNrX3NjaGVkKGNwdSk7CisJCVAobm9oel9tb2RlKTsKKwkJUF9ucyhpZGxlX3RpY2spOworCQlQKHRpY2tfc3RvcHBlZCk7CisJCVAoaWRsZV9qaWZmaWVzKTsKKwkJUChpZGxlX2NhbGxzKTsKKwkJUChpZGxlX3NsZWVwcyk7CisJCVBfbnMoaWRsZV9lbnRyeXRpbWUpOworCQlQX25zKGlkbGVfc2xlZXB0aW1lKTsKKwkJUChsYXN0X2ppZmZpZXMpOworCQlQKG5leHRfamlmZmllcyk7CisJCVBfbnMoaWRsZV9leHBpcmVzKTsKKwkJU0VRX3ByaW50ZihtLCAiamlmZmllczogJUxkXG4iLCAodTY0KWppZmZpZXMpOworCX0KKyNlbmRpZgorCisjdW5kZWYgUAorI3VuZGVmIFBfbnMKK30KKworI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCitzdGF0aWMgdm9pZAorcHJpbnRfdGlja2RldmljZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0aWNrX2RldmljZSAqdGQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2ID0gdGQtPmV2dGRldjsKKworCVNFUV9wcmludGYobSwgIlxuVGljayBEZXZpY2U6IG1vZGU6ICAgICAlZFxuIiwgdGQtPm1vZGUpOworCisJU0VRX3ByaW50ZihtLCAiQ2xvY2sgRXZlbnQgRGV2aWNlOiAiKTsKKwlpZiAoIWRldikgeworCQlTRVFfcHJpbnRmKG0sICI8TlVMTD5cbiIpOworCQlyZXR1cm47CisJfQorCVNFUV9wcmludGYobSwgIiVzXG4iLCBkZXYtPm5hbWUpOworCVNFUV9wcmludGYobSwgIiBtYXhfZGVsdGFfbnM6ICAgJWxkXG4iLCBkZXYtPm1heF9kZWx0YV9ucyk7CisJU0VRX3ByaW50ZihtLCAiIG1pbl9kZWx0YV9uczogICAlbGRcbiIsIGRldi0+bWluX2RlbHRhX25zKTsKKwlTRVFfcHJpbnRmKG0sICIgbXVsdDogICAgICAgICAgICVsZFxuIiwgZGV2LT5tdWx0KTsKKwlTRVFfcHJpbnRmKG0sICIgc2hpZnQ6ICAgICAgICAgICVkXG4iLCBkZXYtPnNoaWZ0KTsKKwlTRVFfcHJpbnRmKG0sICIgbW9kZTogICAgICAgICAgICVkXG4iLCBkZXYtPm1vZGUpOworCVNFUV9wcmludGYobSwgIiBuZXh0X2V2ZW50OiAgICAgJUxkIG5zZWNzXG4iLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBrdGltZV90b19ucyhkZXYtPm5leHRfZXZlbnQpKTsKKworCVNFUV9wcmludGYobSwgIiBzZXRfbmV4dF9ldmVudDogIik7CisJcHJpbnRfbmFtZV9vZmZzZXQobSwgZGV2LT5zZXRfbmV4dF9ldmVudCk7CisJU0VRX3ByaW50ZihtLCAiXG4iKTsKKworCVNFUV9wcmludGYobSwgIiBzZXRfbW9kZTogICAgICAgIik7CisJcHJpbnRfbmFtZV9vZmZzZXQobSwgZGV2LT5zZXRfbW9kZSk7CisJU0VRX3ByaW50ZihtLCAiXG4iKTsKKworCVNFUV9wcmludGYobSwgIiBldmVudF9oYW5kbGVyOiAgIik7CisJcHJpbnRfbmFtZV9vZmZzZXQobSwgZGV2LT5ldmVudF9oYW5kbGVyKTsKKwlTRVFfcHJpbnRmKG0sICJcbiIpOworfQorCitzdGF0aWMgdm9pZCB0aW1lcl9saXN0X3Nob3dfdGlja2RldmljZXMoc3RydWN0IHNlcV9maWxlICptKQoreworCWludCBjcHU7CisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QKKwlwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2Jyb2FkY2FzdF9kZXZpY2UoKSk7CisJU0VRX3ByaW50ZihtLCAidGlja19icm9hZGNhc3RfbWFzazogJTA4bHhcbiIsCisJCSAgIHRpY2tfZ2V0X2Jyb2FkY2FzdF9tYXNrKCktPmJpdHNbMF0pOworI2lmZGVmIENPTkZJR19USUNLX09ORVNIT1QKKwlTRVFfcHJpbnRmKG0sICJ0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2s6ICUwOGx4XG4iLAorCQkgICB0aWNrX2dldF9icm9hZGNhc3Rfb25lc2hvdF9tYXNrKCktPmJpdHNbMF0pOworI2VuZGlmCisJU0VRX3ByaW50ZihtLCAiXG4iKTsKKyNlbmRpZgorCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQkgICBwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2RldmljZShjcHUpKTsKKwlTRVFfcHJpbnRmKG0sICJcbiIpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHRpbWVyX2xpc3Rfc2hvd190aWNrZGV2aWNlcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pIHsgfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdGltZXJfbGlzdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwl1NjQgbm93ID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOworCWludCBjcHU7CisKKwlTRVFfcHJpbnRmKG0sICJUaW1lciBMaXN0IFZlcnNpb246IHYwLjNcbiIpOworCVNFUV9wcmludGYobSwgIkhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOiAlZFxuIiwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVMpOworCVNFUV9wcmludGYobSwgIm5vdyBhdCAlTGQgbnNlY3NcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbm93KTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQlwcmludF9jcHUobSwgY3B1LCBub3cpOworCisJU0VRX3ByaW50ZihtLCAiXG4iKTsKKwl0aW1lcl9saXN0X3Nob3dfdGlja2RldmljZXMobSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzeXNycV90aW1lcl9saXN0X3Nob3codm9pZCkKK3sKKwl0aW1lcl9saXN0X3Nob3coTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfbGlzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB0aW1lcl9saXN0X3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0aW1lcl9saXN0X2ZvcHMgPSB7CisJLm9wZW4JCT0gdGltZXJfbGlzdF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3RpbWVyX2xpc3RfcHJvY2ZzKHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZTsKKworCXBlID0gY3JlYXRlX3Byb2NfZW50cnkoInRpbWVyX2xpc3QiLCAwNjQ0LCBOVUxMKTsKKwlpZiAoIXBlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBlLT5wcm9jX2ZvcHMgPSAmdGltZXJfbGlzdF9mb3BzOworCisJcmV0dXJuIDA7Cit9CitfX2luaXRjYWxsKGluaXRfdGltZXJfbGlzdF9wcm9jZnMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYyBiL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJjNDg4MgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKQEAgLTAsMCArMSw0MTEgQEAKKy8qCisgKiBrZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jCisgKgorICogQ29sbGVjdCB0aW1lciB1c2FnZSBzdGF0aXN0aWNzLgorICoKKyAqIENvcHlyaWdodChDKSAyMDA2LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICogQ29weXJpZ2h0KEMpIDIwMDYgVGltZXN5cyBDb3JwLiwgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QHRpbWVzeXMuY29tPgorICoKKyAqIHRpbWVyX3N0YXRzIGlzIGJhc2VkIG9uIHRpbWVyX3RvcCwgYSBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgd2hpY2ggd2FzIHBhcnQgb2YKKyAqIENvbiBLb2xpdmFzIGR5bnRpY2sgcGF0Y2ggc2V0LiBJdCB3YXMgZGV2ZWxvcGVkIGJ5IERhbmllbCBQZXRyaW5pIGF0IHRoZQorICogSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEgLSBJTmRUIC0gTWFuYXVzLiB0aW1lcl90b3AncyBkZXNpZ24gd2FzIGJhc2VkCisgKiBvbiBkeW5hbWljIGFsbG9jYXRpb24gb2YgdGhlIHN0YXRpc3RpY3MgZW50cmllcyBhbmQgbGluZWFyIHNlYXJjaCBiYXNlZAorICogbG9va3VwIGNvbWJpbmVkIHdpdGggYSBnbG9iYWwgbG9jaywgcmF0aGVyIHRoYW4gdGhlIHN0YXRpYyBhcnJheSwgaGFzaAorICogYW5kIHBlci1DUFUgbG9ja2luZyB3aGljaCBpcyB1c2VkIGJ5IHRpbWVyX3N0YXRzLiBJdCB3YXMgd3JpdHRlbiBmb3IgdGhlCisgKiBwcmUgaHJ0aW1lciBrZXJuZWwgY29kZSBhbmQgdGhlcmVmb3JlIGRpZCBub3QgdGFrZSBocnRpbWVycyBpbnRvIGFjY291bnQuCisgKiBOZXZlcnRoZWxlc3MgaXQgcHJvdmlkZWQgdGhlIGJhc2UgZm9yIHRoZSB0aW1lcl9zdGF0cyBpbXBsZW1lbnRhdGlvbiBhbmQKKyAqIHdhcyBhIGhlbHBmdWwgc291cmNlIG9mIGluc3BpcmF0aW9uLiBLdWRvcyB0byBEYW5pZWwgYW5kIHRoZSBOb2tpYSBmb2xrcworICogZm9yIHRoaXMgZWZmb3J0LgorICoKKyAqIHRpbWVyX3RvcC5jIGlzCisgKglDb3B5cmlnaHQgKEMpIDIwMDUgSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEgLSBJTmRUIC0gTWFuYXVzCisgKglXcml0dGVuIGJ5IERhbmllbCBQZXRyaW5pIDxkLnBlbnNhdG9yQGdtYWlsLmNvbT4KKyAqCXRpbWVyX3RvcC5jIHdhcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKgorICogV2UgZXhwb3J0IHRoZSBhZGRyZXNzZXMgYW5kIGNvdW50aW5nIG9mIHRpbWVyIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQsCisgKiB0aGUgcGlkIGFuZCBjbWRsaW5lIGZyb20gdGhlIG93bmVyIHByb2Nlc3MgaWYgYXBwbGljYWJsZS4KKyAqCisgKiBTdGFydC9zdG9wIGRhdGEgY29sbGVjdGlvbjoKKyAqICMgZWNobyAxWzBdID4vcHJvYy90aW1lcl9zdGF0cworICoKKyAqIERpc3BsYXkgdGhlIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBzbyBmYXI6CisgKiAjIGNhdCAvcHJvYy90aW1lcl9zdGF0cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyoKKyAqIFRoaXMgaXMgb3VyIGJhc2ljIHVuaXQgb2YgaW50ZXJlc3Q6IGEgdGltZXIgZXhwaXJ5IGV2ZW50IGlkZW50aWZpZWQKKyAqIGJ5IHRoZSB0aW1lciwgaXRzIHN0YXJ0L2V4cGlyZSBmdW5jdGlvbnMgYW5kIHRoZSBQSUQgb2YgdGhlIHRhc2sgdGhhdAorICogc3RhcnRlZCB0aGUgdGltZXIuIFdlIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgYW4gZXZlbnQgaGFwcGVuczoKKyAqLworc3RydWN0IGVudHJ5IHsKKwkvKgorCSAqIEhhc2ggbGlzdDoKKwkgKi8KKwlzdHJ1Y3QgZW50cnkJCSpuZXh0OworCisJLyoKKwkgKiBIYXNoIGtleXM6CisJICovCisJdm9pZAkJCSp0aW1lcjsKKwl2b2lkCQkJKnN0YXJ0X2Z1bmM7CisJdm9pZAkJCSpleHBpcmVfZnVuYzsKKwlwaWRfdAkJCXBpZDsKKworCS8qCisJICogTnVtYmVyIG9mIHRpbWVvdXQgZXZlbnRzOgorCSAqLworCXVuc2lnbmVkIGxvbmcJCWNvdW50OworCisJLyoKKwkgKiBXZSBzYXZlIHRoZSBjb21tYW5kLWxpbmUgc3RyaW5nIHRvIHByZXNlcnZlCisJICogdGhpcyBpbmZvcm1hdGlvbiBwYXN0IHRhc2sgZXhpdDoKKwkgKi8KKwljaGFyCQkJY29tbVtUQVNLX0NPTU1fTEVOICsgMV07CisKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKworLyoKKyAqIFNwaW5sb2NrIHByb3RlY3RpbmcgdGhlIHRhYmxlcyAtIG5vdCB0YWtlbiBkdXJpbmcgbG9va3VwOgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhYmxlX2xvY2spOworCisvKgorICogUGVyLUNQVSBsb29rdXAgbG9ja3MgZm9yIGZhc3QgaGFzaCBsb29rdXA6CisgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzcGlubG9ja190LCBsb29rdXBfbG9jayk7CisKKy8qCisgKiBNdXRleCB0byBzZXJpYWxpemUgc3RhdGUgY2hhbmdlcyB3aXRoIHNob3ctc3RhdHMgYWN0aXZpdGllczoKKyAqLworc3RhdGljIERFRklORV9NVVRFWChzaG93X211dGV4KTsKKworLyoKKyAqIENvbGxlY3Rpb24gc3RhdHVzLCBhY3RpdmUvaW5hY3RpdmU6CisgKi8KK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSBhY3RpdmU7CisKKy8qCisgKiBCZWdpbm5pbmcvZW5kIHRpbWVzdGFtcHMgb2YgbWVhc3VyZW1lbnQ6CisgKi8KK3N0YXRpYyBrdGltZV90IHRpbWVfc3RhcnQsIHRpbWVfc3RvcDsKKworLyoKKyAqIHRzdGF0IGVudHJ5IHN0cnVjdHMgb25seSBnZXQgYWxsb2NhdGVkIHdoaWxlIGNvbGxlY3Rpb24gaXMKKyAqIGFjdGl2ZSBhbmQgbmV2ZXIgZnJlZWQgZHVyaW5nIHRoYXQgdGltZSAtIHRoaXMgc2ltcGxpZmllcworICogdGhpbmdzIHF1aXRlIGEgYml0LgorICoKKyAqIFRoZXkgZ2V0IGZyZWVkIHdoZW4gYSBuZXcgY29sbGVjdGlvbiBwZXJpb2QgaXMgc3RhcnRlZC4KKyAqLworI2RlZmluZSBNQVhfRU5UUklFU19CSVRTCTEwCisjZGVmaW5lIE1BWF9FTlRSSUVTCQkoMVVMIDw8IE1BWF9FTlRSSUVTX0JJVFMpCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5yX2VudHJpZXM7CitzdGF0aWMgc3RydWN0IGVudHJ5IGVudHJpZXNbTUFYX0VOVFJJRVNdOworCitzdGF0aWMgYXRvbWljX3Qgb3ZlcmZsb3dfY291bnQ7CisKK3N0YXRpYyB2b2lkIHJlc2V0X2VudHJpZXModm9pZCkKK3sKKwlucl9lbnRyaWVzID0gMDsKKwltZW1zZXQoZW50cmllcywgMCwgc2l6ZW9mKGVudHJpZXMpKTsKKwlhdG9taWNfc2V0KCZvdmVyZmxvd19jb3VudCwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKmFsbG9jX2VudHJ5KHZvaWQpCit7CisJaWYgKG5yX2VudHJpZXMgPj0gTUFYX0VOVFJJRVMpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGVudHJpZXMgKyBucl9lbnRyaWVzKys7Cit9CisKKy8qCisgKiBUaGUgZW50cmllcyBhcmUgaW4gYSBoYXNoLXRhYmxlLCBmb3IgZmFzdCBsb29rdXA6CisgKi8KKyNkZWZpbmUgVFNUQVRfSEFTSF9CSVRTCQkoTUFYX0VOVFJJRVNfQklUUyAtIDEpCisjZGVmaW5lIFRTVEFUX0hBU0hfU0laRQkJKDFVTCA8PCBUU1RBVF9IQVNIX0JJVFMpCisjZGVmaW5lIFRTVEFUX0hBU0hfTUFTSwkJKFRTVEFUX0hBU0hfU0laRSAtIDEpCisKKyNkZWZpbmUgX190c3RhdF9oYXNoZm4oZW50cnkpCQkJCQkJXAorCSgoKHVuc2lnbmVkIGxvbmcpKGVudHJ5KS0+dGltZXIgICAgICAgXgkJCQlcCisJICAodW5zaWduZWQgbG9uZykoZW50cnkpLT5zdGFydF9mdW5jICBeCQkJCVwKKwkgICh1bnNpZ25lZCBsb25nKShlbnRyeSktPmV4cGlyZV9mdW5jIF4JCQkJXAorCSAgKHVuc2lnbmVkIGxvbmcpKGVudHJ5KS0+cGlkCQkpICYgVFNUQVRfSEFTSF9NQVNLKQorCisjZGVmaW5lIHRzdGF0X2hhc2hlbnRyeShlbnRyeSkJKHRzdGF0X2hhc2hfdGFibGUgKyBfX3RzdGF0X2hhc2hmbihlbnRyeSkpCisKK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKnRzdGF0X2hhc2hfdGFibGVbVFNUQVRfSEFTSF9TSVpFXSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgaW50IG1hdGNoX2VudHJpZXMoc3RydWN0IGVudHJ5ICplbnRyeTEsIHN0cnVjdCBlbnRyeSAqZW50cnkyKQoreworCXJldHVybiBlbnRyeTEtPnRpbWVyICAgICAgID09IGVudHJ5Mi0+dGltZXIJICAmJgorCSAgICAgICBlbnRyeTEtPnN0YXJ0X2Z1bmMgID09IGVudHJ5Mi0+c3RhcnRfZnVuYyAgJiYKKwkgICAgICAgZW50cnkxLT5leHBpcmVfZnVuYyA9PSBlbnRyeTItPmV4cGlyZV9mdW5jICYmCisJICAgICAgIGVudHJ5MS0+cGlkCSAgID09IGVudHJ5Mi0+cGlkOworfQorCisvKgorICogTG9vayB1cCB3aGV0aGVyIGFuIGVudHJ5IG1hdGNoaW5nIHRoaXMgaXRlbSBpcyBwcmVzZW50CisgKiBpbiB0aGUgaGFzaCBhbHJlYWR5LiBNdXN0IGJlIGNhbGxlZCB3aXRoIGlycXMgb2ZmIGFuZCB0aGUKKyAqIGxvb2t1cCBsb2NrIGhlbGQ6CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKnRzdGF0X2xvb2t1cChzdHJ1Y3QgZW50cnkgKmVudHJ5LCBjaGFyICpjb21tKQoreworCXN0cnVjdCBlbnRyeSAqKmhlYWQsICpjdXJyLCAqcHJldjsKKworCWhlYWQgPSB0c3RhdF9oYXNoZW50cnkoZW50cnkpOworCWN1cnIgPSAqaGVhZDsKKworCS8qCisJICogVGhlIGZhc3RwYXRoIGlzIHdoZW4gdGhlIGVudHJ5IGlzIGFscmVhZHkgaGFzaGVkLAorCSAqIHdlIGRvIHRoaXMgd2l0aCB0aGUgbG9va3VwIGxvY2sgaGVsZCwgYnV0IHdpdGggdGhlCisJICogdGFibGUgbG9jayBub3QgaGVsZDoKKwkgKi8KKwl3aGlsZSAoY3VycikgeworCQlpZiAobWF0Y2hfZW50cmllcyhjdXJyLCBlbnRyeSkpCisJCQlyZXR1cm4gY3VycjsKKworCQljdXJyID0gY3Vyci0+bmV4dDsKKwl9CisJLyoKKwkgKiBTbG93cGF0aDogYWxsb2NhdGUsIHNldCB1cCBhbmQgbGluayBhIG5ldyBoYXNoIGVudHJ5OgorCSAqLworCXByZXYgPSBOVUxMOworCWN1cnIgPSAqaGVhZDsKKworCXNwaW5fbG9jaygmdGFibGVfbG9jayk7CisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgaGF2ZSBub3QgcmFjZWQgd2l0aCBhbm90aGVyIENQVToKKwkgKi8KKwl3aGlsZSAoY3VycikgeworCQlpZiAobWF0Y2hfZW50cmllcyhjdXJyLCBlbnRyeSkpCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJcHJldiA9IGN1cnI7CisJCWN1cnIgPSBjdXJyLT5uZXh0OworCX0KKworCWN1cnIgPSBhbGxvY19lbnRyeSgpOworCWlmIChjdXJyKSB7CisJCSpjdXJyID0gKmVudHJ5OworCQljdXJyLT5jb3VudCA9IDA7CisJCW1lbWNweShjdXJyLT5jb21tLCBjb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJaWYgKHByZXYpCisJCQlwcmV2LT5uZXh0ID0gY3VycjsKKwkJZWxzZQorCQkJKmhlYWQgPSBjdXJyOworCQljdXJyLT5uZXh0ID0gTlVMTDsKKwl9Cisgb3V0X3VubG9jazoKKwlzcGluX3VubG9jaygmdGFibGVfbG9jayk7CisKKwlyZXR1cm4gY3VycjsKK30KKworLyoqCisgKiB0aW1lcl9zdGF0c191cGRhdGVfc3RhdHMgLSBVcGRhdGUgdGhlIHN0YXRpc3RpY3MgZm9yIGEgdGltZXIuCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gZWl0aGVyIGEgdGltZXJfbGlzdCBvciBhIGhydGltZXIKKyAqIEBwaWQ6CXRoZSBwaWQgb2YgdGhlIHRhc2sgd2hpY2ggc2V0IHVwIHRoZSB0aW1lcgorICogQHN0YXJ0ZjoJcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gd2hpY2ggZGlkIHRoZSB0aW1lciBzZXR1cAorICogQHRpbWVyZjoJcG9pbnRlciB0byB0aGUgdGltZXIgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIHRpbWVyCisgKiBAY29tbToJbmFtZSBvZiB0aGUgcHJvY2VzcyB3aGljaCBzZXQgdXAgdGhlIHRpbWVyCisgKgorICogV2hlbiB0aGUgdGltZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkLCB0aGVuIHRoZSBldmVudCBjb3VudGVyIGlzCisgKiBpbmNyZW1lbnRlZC4gT3RoZXJ3aXNlIHRoZSB0aW1lciBpcyByZWdpc3RlcmVkIGluIGEgZnJlZSBzbG90LgorICovCit2b2lkIHRpbWVyX3N0YXRzX3VwZGF0ZV9zdGF0cyh2b2lkICp0aW1lciwgcGlkX3QgcGlkLCB2b2lkICpzdGFydGYsCisJCQkgICAgICB2b2lkICp0aW1lcmYsIGNoYXIgKiBjb21tKQoreworCS8qCisJICogSXQgZG9lc250IG1hdHRlciB3aGljaCBsb2NrIHdlIHRha2U6CisJICovCisJc3BpbmxvY2tfdCAqbG9jayA9ICZwZXJfY3B1KGxvb2t1cF9sb2NrLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzdHJ1Y3QgZW50cnkgKmVudHJ5LCBpbnB1dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW5wdXQudGltZXIgPSB0aW1lcjsKKwlpbnB1dC5zdGFydF9mdW5jID0gc3RhcnRmOworCWlucHV0LmV4cGlyZV9mdW5jID0gdGltZXJmOworCWlucHV0LnBpZCA9IHBpZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsKKwlpZiAoIWFjdGl2ZSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJZW50cnkgPSB0c3RhdF9sb29rdXAoJmlucHV0LCBjb21tKTsKKwlpZiAobGlrZWx5KGVudHJ5KSkKKwkJZW50cnktPmNvdW50Kys7CisJZWxzZQorCQlhdG9taWNfaW5jKCZvdmVyZmxvd19jb3VudCk7CisKKyBvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9uYW1lX29mZnNldChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwljaGFyIG5hbWVidWZbS1NZTV9OQU1FX0xFTisxXTsKKwl1bnNpZ25lZCBsb25nIHNpemUsIG9mZnNldDsKKwljb25zdCBjaGFyICpzeW1fbmFtZTsKKwljaGFyICptb2RuYW1lOworCisJc3ltX25hbWUgPSBrYWxsc3ltc19sb29rdXAoYWRkciwgJnNpemUsICZvZmZzZXQsICZtb2RuYW1lLCBuYW1lYnVmKTsKKwlpZiAoc3ltX25hbWUpCisJCXNlcV9wcmludGYobSwgIiVzIiwgc3ltX25hbWUpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAiPCVwPiIsICh2b2lkICopYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgdHN0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCB0aW1lc3BlYyBwZXJpb2Q7CisJc3RydWN0IGVudHJ5ICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIG1zOworCWxvbmcgZXZlbnRzID0gMDsKKwlrdGltZV90IHRpbWU7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZzaG93X211dGV4KTsKKwkvKgorCSAqIElmIHN0aWxsIGFjdGl2ZSB0aGVuIGNhbGN1bGF0ZSB1cCB0byBub3c6CisJICovCisJaWYgKGFjdGl2ZSkKKwkJdGltZV9zdG9wID0ga3RpbWVfZ2V0KCk7CisKKwl0aW1lID0ga3RpbWVfc3ViKHRpbWVfc3RvcCwgdGltZV9zdGFydCk7CisKKwlwZXJpb2QgPSBrdGltZV90b190aW1lc3BlYyh0aW1lKTsKKwltcyA9IHBlcmlvZC50dl9uc2VjIC8gMTAwMDAwMDsKKworCXNlcV9wdXRzKG0sICJUaW1lciBTdGF0cyBWZXJzaW9uOiB2MC4xXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJTYW1wbGUgcGVyaW9kOiAlbGQuJTAzbGQgc1xuIiwgcGVyaW9kLnR2X3NlYywgbXMpOworCWlmIChhdG9taWNfcmVhZCgmb3ZlcmZsb3dfY291bnQpKQorCQlzZXFfcHJpbnRmKG0sICJPdmVyZmxvdzogJWQgZW50cmllc1xuIiwKKwkJCWF0b21pY19yZWFkKCZvdmVyZmxvd19jb3VudCkpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2VudHJpZXM7IGkrKykgeworCQllbnRyeSA9IGVudHJpZXMgKyBpOworCQlzZXFfcHJpbnRmKG0sICIlNGx1LCAlNWQgJS0xNnMgIiwKKwkJCQllbnRyeS0+Y291bnQsIGVudHJ5LT5waWQsIGVudHJ5LT5jb21tKTsKKworCQlwcmludF9uYW1lX29mZnNldChtLCAodW5zaWduZWQgbG9uZyllbnRyeS0+c3RhcnRfZnVuYyk7CisJCXNlcV9wdXRzKG0sICIgKCIpOworCQlwcmludF9uYW1lX29mZnNldChtLCAodW5zaWduZWQgbG9uZyllbnRyeS0+ZXhwaXJlX2Z1bmMpOworCQlzZXFfcHV0cyhtLCAiKVxuIik7CisKKwkJZXZlbnRzICs9IGVudHJ5LT5jb3VudDsKKwl9CisKKwltcyArPSBwZXJpb2QudHZfc2VjICogMTAwMDsKKwlpZiAoIW1zKQorCQltcyA9IDE7CisKKwlpZiAoZXZlbnRzICYmIHBlcmlvZC50dl9zZWMpCisJCXNlcV9wcmludGYobSwgIiVsZCB0b3RhbCBldmVudHMsICVsZC4lbGQgZXZlbnRzL3NlY1xuIiwgZXZlbnRzLAorCQkJICAgZXZlbnRzIC8gcGVyaW9kLnR2X3NlYywgZXZlbnRzICogMTAwMCAvIG1zKTsKKwllbHNlCisJCXNlcV9wcmludGYobSwgIiVsZCB0b3RhbCBldmVudHNcbiIsIGV2ZW50cyk7CisKKwltdXRleF91bmxvY2soJnNob3dfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBZnRlciBhIHN0YXRlIGNoYW5nZSwgbWFrZSBzdXJlIGFsbCBjb25jdXJyZW50IGxvb2t1cC91cGRhdGUKKyAqIGFjdGl2aXRpZXMgaGF2ZSBzdG9wcGVkOgorICovCitzdGF0aWMgdm9pZCBzeW5jX2FjY2Vzcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwZXJfY3B1KGxvb2t1cF9sb2NrLCBjcHUpLCBmbGFncyk7CisJCS8qIG5vdGhpbmcgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGVyX2NwdShsb29rdXBfbG9jaywgY3B1KSwgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHNzaXplX3QgdHN0YXRzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzKQoreworCWNoYXIgY3RsWzJdOworCisJaWYgKGNvdW50ICE9IDIgfHwgKm9mZnMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGN0bCwgYnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJbXV0ZXhfbG9jaygmc2hvd19tdXRleCk7CisJc3dpdGNoIChjdGxbMF0pIHsKKwljYXNlICcwJzoKKwkJaWYgKGFjdGl2ZSkgeworCQkJYWN0aXZlID0gMDsKKwkJCXRpbWVfc3RvcCA9IGt0aW1lX2dldCgpOworCQkJc3luY19hY2Nlc3MoKTsKKwkJfQorCQlicmVhazsKKwljYXNlICcxJzoKKwkJaWYgKCFhY3RpdmUpIHsKKwkJCXJlc2V0X2VudHJpZXMoKTsKKwkJCXRpbWVfc3RhcnQgPSBrdGltZV9nZXQoKTsKKwkJCWFjdGl2ZSA9IDE7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY291bnQgPSAtRUlOVkFMOworCX0KKwltdXRleF91bmxvY2soJnNob3dfbXV0ZXgpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHRzdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB0c3RhdHNfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRzdGF0c19mb3BzID0geworCS5vcGVuCQk9IHRzdGF0c19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS53cml0ZQkJPSB0c3RhdHNfd3JpdGUsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3ZvaWQgX19pbml0IGluaXRfdGltZXJfc3RhdHModm9pZCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJc3Bpbl9sb2NrX2luaXQoJnBlcl9jcHUobG9va3VwX2xvY2ssIGNwdSkpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3RzdGF0c19wcm9jZnModm9pZCkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBlOworCisJcGUgPSBjcmVhdGVfcHJvY19lbnRyeSgidGltZXJfc3RhdHMiLCAwNjQ0LCBOVUxMKTsKKwlpZiAoIXBlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBlLT5wcm9jX2ZvcHMgPSAmdHN0YXRzX2ZvcHM7CisKKwlyZXR1cm4gMDsKK30KK19faW5pdGNhbGwoaW5pdF90c3RhdHNfcHJvY2ZzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggODUzM2MzNy4uY2IxYjg2YSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdGljay5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTI2Miw2ICsyNjQsMTggQEAKIAlsaXN0X2FkZF90YWlsKCZ0aW1lci0+ZW50cnksIHZlYyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfVElNRVJfU1RBVFMKK3ZvaWQgX190aW1lcl9zdGF0c190aW1lcl9zZXRfc3RhcnRfaW5mbyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHZvaWQgKmFkZHIpCit7CisJaWYgKHRpbWVyLT5zdGFydF9zaXRlKQorCQlyZXR1cm47CisKKwl0aW1lci0+c3RhcnRfc2l0ZSA9IGFkZHI7CisJbWVtY3B5KHRpbWVyLT5zdGFydF9jb21tLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwl0aW1lci0+c3RhcnRfcGlkID0gY3VycmVudC0+cGlkOworfQorI2VuZGlmCisKIC8qKgogICogaW5pdF90aW1lciAtIGluaXRpYWxpemUgYSB0aW1lci4KICAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGluaXRpYWxpemVkCkBAIC0yNzMsMTEgKzI4NywxNiBAQAogewogCXRpbWVyLT5lbnRyeS5uZXh0ID0gTlVMTDsKIAl0aW1lci0+YmFzZSA9IF9fcmF3X2dldF9jcHVfdmFyKHR2ZWNfYmFzZXMpOworI2lmZGVmIENPTkZJR19USU1FUl9TVEFUUworCXRpbWVyLT5zdGFydF9zaXRlID0gTlVMTDsKKwl0aW1lci0+c3RhcnRfcGlkID0gLTE7CisJbWVtc2V0KHRpbWVyLT5zdGFydF9jb21tLCAwLCBUQVNLX0NPTU1fTEVOKTsKKyNlbmRpZgogfQogRVhQT1JUX1NZTUJPTChpbml0X3RpbWVyKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRldGFjaF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCi0JCQkJCWludCBjbGVhcl9wZW5kaW5nKQorCQkJCWludCBjbGVhcl9wZW5kaW5nKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gJnRpbWVyLT5lbnRyeTsKIApAQCAtMzI0LDYgKzM0Myw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAorCXRpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKHRpbWVyKTsKIAlCVUdfT04oIXRpbWVyLT5mdW5jdGlvbik7CiAKIAliYXNlID0gbG9ja190aW1lcl9iYXNlKHRpbWVyLCAmZmxhZ3MpOwpAQCAtMzc0LDYgKzM5NCw3IEBACiAJdHZlY19iYXNlX3QgKmJhc2UgPSBwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSk7CiAgIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8odGltZXIpOwogICAJQlVHX09OKHRpbWVyX3BlbmRpbmcodGltZXIpIHx8ICF0aW1lci0+ZnVuY3Rpb24pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5sb2NrLCBmbGFncyk7CiAJdGltZXItPmJhc2UgPSBiYXNlOwpAQCAtNDA2LDYgKzQyNyw3IEBACiB7CiAJQlVHX09OKCF0aW1lci0+ZnVuY3Rpb24pOwogCisJdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8odGltZXIpOwogCS8qCiAJICogVGhpcyBpcyBhIGNvbW1vbiBvcHRpbWl6YXRpb24gdHJpZ2dlcmVkIGJ5IHRoZQogCSAqIG5ldHdvcmtpbmcgY29kZSAtIGlmIHRoZSB0aW1lciBpcyByZS1tb2RpZmllZApAQCAtNDM2LDYgKzQ1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAorCXRpbWVyX3N0YXRzX3RpbWVyX2NsZWFyX3N0YXJ0X2luZm8odGltZXIpOwogCWlmICh0aW1lcl9wZW5kaW5nKHRpbWVyKSkgewogCQliYXNlID0gbG9ja190aW1lcl9iYXNlKHRpbWVyLCAmZmxhZ3MpOwogCQlpZiAodGltZXJfcGVuZGluZyh0aW1lcikpIHsKQEAgLTU2OSw2ICs1OTIsOCBAQAogIAkJCWZuID0gdGltZXItPmZ1bmN0aW9uOwogIAkJCWRhdGEgPSB0aW1lci0+ZGF0YTsKIAorCQkJdGltZXJfc3RhdHNfYWNjb3VudF90aW1lcih0aW1lcik7CisKIAkJCXNldF9ydW5uaW5nX3RpbWVyKGJhc2UsIHRpbWVyKTsKIAkJCWRldGFjaF90aW1lcih0aW1lciwgMSk7CiAJCQlzcGluX3VubG9ja19pcnEoJmJhc2UtPmxvY2spOwpAQCAtNTkxLDEwNSArNjE2LDEyNCBAQAogCXNwaW5fdW5sb2NrX2lycSgmYmFzZS0+bG9jayk7CiB9CiAKLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgorI2lmIGRlZmluZWQoQ09ORklHX05PX0lETEVfSFopIHx8IGRlZmluZWQoQ09ORklHX05PX0haKQogLyoKICAqIEZpbmQgb3V0IHdoZW4gdGhlIG5leHQgdGltZXIgZXZlbnQgaXMgZHVlIHRvIGhhcHBlbi4gVGhpcwogICogaXMgdXNlZCBvbiBTLzM5MCB0byBzdG9wIGFsbCBhY3Rpdml0eSB3aGVuIGEgY3B1cyBpcyBpZGxlLgogICogVGhpcyBmdW5jdGlvbnMgbmVlZHMgdG8gYmUgY2FsbGVkIGRpc2FibGVkLgogICovCi11bnNpZ25lZCBsb25nIG5leHRfdGltZXJfaW50ZXJydXB0KHZvaWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25leHRfdGltZXJfaW50ZXJydXB0KHR2ZWNfYmFzZV90ICpiYXNlKQogewotCXR2ZWNfYmFzZV90ICpiYXNlOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJdW5zaWduZWQgbG9uZyB0aW1lcl9qaWZmaWVzID0gYmFzZS0+dGltZXJfamlmZmllczsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSB0aW1lcl9qaWZmaWVzICsgKExPTkdfTUFYID4+IDEpOworCWludCBpbmRleCwgc2xvdCwgYXJyYXksIGZvdW5kID0gMDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCAqbnRlOwotCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsKLQl1bnNpZ25lZCBsb25nIGhyX2V4cGlyZXMgPSBNQVhfSklGRllfT0ZGU0VUOwotCWt0aW1lX3QgaHJfZGVsdGE7CiAJdHZlY190ICp2YXJyYXlbNF07Ci0JaW50IGksIGo7Ci0KLQlocl9kZWx0YSA9IGhydGltZXJfZ2V0X25leHRfZXZlbnQoKTsKLQlpZiAoaHJfZGVsdGEudHY2NCAhPSBLVElNRV9NQVgpIHsKLQkJc3RydWN0IHRpbWVzcGVjIHRzZGVsdGE7Ci0JCXRzZGVsdGEgPSBrdGltZV90b190aW1lc3BlYyhocl9kZWx0YSk7Ci0JCWhyX2V4cGlyZXMgPSB0aW1lc3BlY190b19qaWZmaWVzKCZ0c2RlbHRhKTsKLQkJaWYgKGhyX2V4cGlyZXMgPCAzKQotCQkJcmV0dXJuIGhyX2V4cGlyZXMgKyBqaWZmaWVzOwotCX0KLQlocl9leHBpcmVzICs9IGppZmZpZXM7Ci0KLQliYXNlID0gX19nZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKLQlzcGluX2xvY2soJmJhc2UtPmxvY2spOwotCWV4cGlyZXMgPSBiYXNlLT50aW1lcl9qaWZmaWVzICsgKExPTkdfTUFYID4+IDEpOwotCWxpc3QgPSBOVUxMOwogCiAJLyogTG9vayBmb3IgdGltZXIgZXZlbnRzIGluIHR2MS4gKi8KLQlqID0gYmFzZS0+dGltZXJfamlmZmllcyAmIFRWUl9NQVNLOworCWluZGV4ID0gc2xvdCA9IHRpbWVyX2ppZmZpZXMgJiBUVlJfTUFTSzsKIAlkbyB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkobnRlLCBiYXNlLT50djEudmVjICsgaiwgZW50cnkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShudGUsIGJhc2UtPnR2MS52ZWMgKyBzbG90LCBlbnRyeSkgeworCQkJZm91bmQgPSAxOwogCQkJZXhwaXJlcyA9IG50ZS0+ZXhwaXJlczsKLQkJCWlmIChqIDwgKGJhc2UtPnRpbWVyX2ppZmZpZXMgJiBUVlJfTUFTSykpCi0JCQkJbGlzdCA9IGJhc2UtPnR2Mi52ZWMgKyAoSU5ERVgoMCkpOwotCQkJZ290byBmb3VuZDsKKwkJCS8qIExvb2sgYXQgdGhlIGNhc2NhZGUgYnVja2V0KHMpPyAqLworCQkJaWYgKCFpbmRleCB8fCBzbG90IDwgaW5kZXgpCisJCQkJZ290byBjYXNjYWRlOworCQkJcmV0dXJuIGV4cGlyZXM7CiAJCX0KLQkJaiA9IChqICsgMSkgJiBUVlJfTUFTSzsKLQl9IHdoaWxlIChqICE9IChiYXNlLT50aW1lcl9qaWZmaWVzICYgVFZSX01BU0spKTsKKwkJc2xvdCA9IChzbG90ICsgMSkgJiBUVlJfTUFTSzsKKwl9IHdoaWxlIChzbG90ICE9IGluZGV4KTsKKworY2FzY2FkZToKKwkvKiBDYWxjdWxhdGUgdGhlIG5leHQgY2FzY2FkZSBldmVudCAqLworCWlmIChpbmRleCkKKwkJdGltZXJfamlmZmllcyArPSBUVlJfU0laRSAtIGluZGV4OworCXRpbWVyX2ppZmZpZXMgPj49IFRWUl9CSVRTOwogCiAJLyogQ2hlY2sgdHYyLXR2NS4gKi8KIAl2YXJyYXlbMF0gPSAmYmFzZS0+dHYyOwogCXZhcnJheVsxXSA9ICZiYXNlLT50djM7CiAJdmFycmF5WzJdID0gJmJhc2UtPnR2NDsKIAl2YXJyYXlbM10gPSAmYmFzZS0+dHY1OwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJaiA9IElOREVYKGkpOworCisJZm9yIChhcnJheSA9IDA7IGFycmF5IDwgNDsgYXJyYXkrKykgeworCQl0dmVjX3QgKnZhcnAgPSB2YXJyYXlbYXJyYXldOworCisJCWluZGV4ID0gc2xvdCA9IHRpbWVyX2ppZmZpZXMgJiBUVk5fTUFTSzsKIAkJZG8gewotCQkJaWYgKGxpc3RfZW1wdHkodmFycmF5W2ldLT52ZWMgKyBqKSkgewotCQkJCWogPSAoaiArIDEpICYgVFZOX01BU0s7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG50ZSwgdmFycmF5W2ldLT52ZWMgKyBqLCBlbnRyeSkKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkobnRlLCB2YXJwLT52ZWMgKyBzbG90LCBlbnRyeSkgeworCQkJCWZvdW5kID0gMTsKIAkJCQlpZiAodGltZV9iZWZvcmUobnRlLT5leHBpcmVzLCBleHBpcmVzKSkKIAkJCQkJZXhwaXJlcyA9IG50ZS0+ZXhwaXJlczsKLQkJCWlmIChqIDwgKElOREVYKGkpKSAmJiBpIDwgMykKLQkJCQlsaXN0ID0gdmFycmF5W2kgKyAxXS0+dmVjICsgKElOREVYKGkgKyAxKSk7Ci0JCQlnb3RvIGZvdW5kOwotCQl9IHdoaWxlIChqICE9IChJTkRFWChpKSkpOworCQkJfQorCQkJLyoKKwkJCSAqIERvIHdlIHN0aWxsIHNlYXJjaCBmb3IgdGhlIGZpcnN0IHRpbWVyIG9yIGFyZQorCQkJICogd2UgbG9va2luZyB1cCB0aGUgY2FzY2FkZSBidWNrZXRzID8KKwkJCSAqLworCQkJaWYgKGZvdW5kKSB7CisJCQkJLyogTG9vayBhdCB0aGUgY2FzY2FkZSBidWNrZXQocyk/ICovCisJCQkJaWYgKCFpbmRleCB8fCBzbG90IDwgaW5kZXgpCisJCQkJCWJyZWFrOworCQkJCXJldHVybiBleHBpcmVzOworCQkJfQorCQkJc2xvdCA9IChzbG90ICsgMSkgJiBUVk5fTUFTSzsKKwkJfSB3aGlsZSAoc2xvdCAhPSBpbmRleCk7CisKKwkJaWYgKGluZGV4KQorCQkJdGltZXJfamlmZmllcyArPSBUVk5fU0laRSAtIGluZGV4OworCQl0aW1lcl9qaWZmaWVzID4+PSBUVk5fQklUUzsKIAl9Ci1mb3VuZDoKLQlpZiAobGlzdCkgewotCQkvKgotCQkgKiBUaGUgc2VhcmNoIHdyYXBwZWQuIFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgbmV4dCBsaXN0Ci0JCSAqIGZyb20gbmV4dCB0diBlbGVtZW50IHRoYXQgd291bGQgY2FzY2FkZSBpbnRvIHR2IGVsZW1lbnQKLQkJICogd2hlcmUgd2UgZm91bmQgdGhlIHRpbWVyIGVsZW1lbnQuCi0JCSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG50ZSwgbGlzdCwgZW50cnkpIHsKLQkJCWlmICh0aW1lX2JlZm9yZShudGUtPmV4cGlyZXMsIGV4cGlyZXMpKQotCQkJCWV4cGlyZXMgPSBudGUtPmV4cGlyZXM7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmJhc2UtPmxvY2spOwotCi0JLyoKLQkgKiBJdCBjYW4gaGFwcGVuIHRoYXQgb3RoZXIgQ1BVcyBzZXJ2aWNlIHRpbWVyIElSUXMgYW5kIGluY3JlbWVudAotCSAqIGppZmZpZXMsIGJ1dCB3ZSBoYXZlIG5vdCB5ZXQgZ290IGEgbG9jYWwgdGltZXIgdGljayB0byBwcm9jZXNzCi0JICogdGhlIHRpbWVyIHdoZWVscy4gIEluIHRoYXQgY2FzZSwgdGhlIGV4cGlyeSB0aW1lIGNhbiBiZSBiZWZvcmUKLQkgKiBqaWZmaWVzLCBidXQgc2luY2UgdGhlIGhpZ2gtcmVzb2x1dGlvbiB0aW1lciBoZXJlIGlzIHJlbGF0aXZlIHRvCi0JICogamlmZmllcywgdGhlIGRlZmF1bHQgZXhwcmVzc2lvbiB3aGVuIGhpZ2gtcmVzb2x1dGlvbiB0aW1lcnMgYXJlCi0JICogbm90IGFjdGl2ZSwKLQkgKgotCSAqICAgdGltZV9iZWZvcmUoTUFYX0pJRkZZX09GRlNFVCArIGppZmZpZXMsIGV4cGlyZXMpCi0JICoKLQkgKiB3b3VsZCBmYWxzZWx5IGV2YWx1YXRlIHRvIHRydWUuICBJZiB0aGF0IGlzIHRoZSBjYXNlLCBqdXN0Ci0JICogcmV0dXJuIGppZmZpZXMgc28gdGhhdCB3ZSBjYW4gaW1tZWRpYXRlbHkgZmlyZSB0aGUgbG9jYWwgdGltZXIKLQkgKi8KLQlpZiAodGltZV9iZWZvcmUoZXhwaXJlcywgamlmZmllcykpCi0JCXJldHVybiBqaWZmaWVzOwotCi0JaWYgKHRpbWVfYmVmb3JlKGhyX2V4cGlyZXMsIGV4cGlyZXMpKQotCQlyZXR1cm4gaHJfZXhwaXJlczsKLQogCXJldHVybiBleHBpcmVzOwogfQorCisvKgorICogQ2hlY2ssIGlmIHRoZSBuZXh0IGhydGltZXIgZXZlbnQgaXMgYmVmb3JlIHRoZSBuZXh0IHRpbWVyIHdoZWVsCisgKiBldmVudDoKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgY21wX25leHRfaHJ0aW1lcl9ldmVudCh1bnNpZ25lZCBsb25nIG5vdywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKK3sKKwlrdGltZV90IGhyX2RlbHRhID0gaHJ0aW1lcl9nZXRfbmV4dF9ldmVudCgpOworCXN0cnVjdCB0aW1lc3BlYyB0c2RlbHRhOworCisJaWYgKGhyX2RlbHRhLnR2NjQgPT0gS1RJTUVfTUFYKQorCQlyZXR1cm4gZXhwaXJlczsKKworCWlmIChocl9kZWx0YS50djY0IDw9IFRJQ0tfTlNFQykKKwkJcmV0dXJuIG5vdzsKKworCXRzZGVsdGEgPSBrdGltZV90b190aW1lc3BlYyhocl9kZWx0YSk7CisJbm93ICs9IHRpbWVzcGVjX3RvX2ppZmZpZXMoJnRzZGVsdGEpOworCWlmICh0aW1lX2JlZm9yZShub3csIGV4cGlyZXMpKQorCQlyZXR1cm4gbm93OworCXJldHVybiBleHBpcmVzOworfQorCisvKioKKyAqIG5leHRfdGltZXJfaW50ZXJydXB0IC0gcmV0dXJuIHRoZSBqaWZmeSBvZiB0aGUgbmV4dCBwZW5kaW5nIHRpbWVyCisgKi8KK3Vuc2lnbmVkIGxvbmcgZ2V0X25leHRfdGltZXJfaW50ZXJydXB0KHVuc2lnbmVkIGxvbmcgbm93KQoreworCXR2ZWNfYmFzZV90ICpiYXNlID0gX19nZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXM7CisKKwlzcGluX2xvY2soJmJhc2UtPmxvY2spOworCWV4cGlyZXMgPSBfX25leHRfdGltZXJfaW50ZXJydXB0KGJhc2UpOworCXNwaW5fdW5sb2NrKCZiYXNlLT5sb2NrKTsKKworCWlmICh0aW1lX2JlZm9yZV9lcShleHBpcmVzLCBub3cpKQorCQlyZXR1cm4gbm93OworCisJcmV0dXJuIGNtcF9uZXh0X2hydGltZXJfZXZlbnQobm93LCBleHBpcmVzKTsKK30KKworI2lmZGVmIENPTkZJR19OT19JRExFX0haCit1bnNpZ25lZCBsb25nIG5leHRfdGltZXJfaW50ZXJydXB0KHZvaWQpCit7CisJcmV0dXJuIGdldF9uZXh0X3RpbWVyX2ludGVycnVwdChqaWZmaWVzKTsKK30KKyNlbmRpZgorCiAjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTgzMiwzMiArODc2LDM1IEBACiAgKgogICogQWNjdW11bGF0ZXMgY3VycmVudCB0aW1lIGludGVydmFsIGFuZCBpbml0aWFsaXplcyBuZXcgY2xvY2tzb3VyY2UKICAqLwotc3RhdGljIGludCBjaGFuZ2VfY2xvY2tzb3VyY2Uodm9pZCkKK3N0YXRpYyB2b2lkIGNoYW5nZV9jbG9ja3NvdXJjZSh2b2lkKQogewogCXN0cnVjdCBjbG9ja3NvdXJjZSAqbmV3OwogCWN5Y2xlX3Qgbm93OwogCXU2NCBuc2VjOwotCW5ldyA9IGNsb2Nrc291cmNlX2dldF9uZXh0KCk7Ci0JaWYgKGNsb2NrICE9IG5ldykgewotCQlub3cgPSBjbG9ja3NvdXJjZV9yZWFkKG5ldyk7Ci0JCW5zZWMgPSAgX19nZXRfbnNlY19vZmZzZXQoKTsKLQkJdGltZXNwZWNfYWRkX25zKCZ4dGltZSwgbnNlYyk7CiAKLQkJY2xvY2sgPSBuZXc7Ci0JCWNsb2NrLT5jeWNsZV9sYXN0ID0gbm93OwotCQlwcmludGsoS0VSTl9JTkZPICJUaW1lOiAlcyBjbG9ja3NvdXJjZSBoYXMgYmVlbiBpbnN0YWxsZWQuXG4iLAotCQkgICAgICAgY2xvY2stPm5hbWUpOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UgaWYgKGNsb2NrLT51cGRhdGVfY2FsbGJhY2spIHsKLQkJcmV0dXJuIGNsb2NrLT51cGRhdGVfY2FsbGJhY2soKTsKLQl9Ci0JcmV0dXJuIDA7CisJbmV3ID0gY2xvY2tzb3VyY2VfZ2V0X25leHQoKTsKKworCWlmIChjbG9jayA9PSBuZXcpCisJCXJldHVybjsKKworCW5vdyA9IGNsb2Nrc291cmNlX3JlYWQobmV3KTsKKwluc2VjID0gIF9fZ2V0X25zZWNfb2Zmc2V0KCk7CisJdGltZXNwZWNfYWRkX25zKCZ4dGltZSwgbnNlYyk7CisKKwljbG9jayA9IG5ldzsKKwljbG9jay0+Y3ljbGVfbGFzdCA9IG5vdzsKKworCWNsb2NrLT5lcnJvciA9IDA7CisJY2xvY2stPnh0aW1lX25zZWMgPSAwOworCWNsb2Nrc291cmNlX2NhbGN1bGF0ZV9pbnRlcnZhbChjbG9jaywgTlRQX0lOVEVSVkFMX0xFTkdUSCk7CisKKwl0aWNrX2Nsb2NrX25vdGlmeSgpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiVGltZTogJXMgY2xvY2tzb3VyY2UgaGFzIGJlZW4gaW5zdGFsbGVkLlxuIiwKKwkgICAgICAgY2xvY2stPm5hbWUpOwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9jbG9ja3NvdXJjZSh2b2lkKQotewotCXJldHVybiAwOwotfQorc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9jbG9ja3NvdXJjZSh2b2lkKSB7IH0KICNlbmRpZgogCiAvKioKQEAgLTg3MSwzMyArOTE4LDU2IEBACiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKIAotCQlyZXQgPSBjbG9jay0+aXNfY29udGludW91czsKKwkJcmV0ID0gY2xvY2stPmZsYWdzICYgQ0xPQ0tfU09VUkNFX1ZBTElEX0ZPUl9IUkVTOwogCiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CiAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHJlYWRfcGVyc2lzdGVudF9jbG9jayAtICBSZXR1cm4gdGltZSBpbiBzZWNvbmRzIGZyb20gdGhlIHBlcnNpc3RlbnQgY2xvY2suCisgKgorICogV2VhayBkdW1teSBmdW5jdGlvbiBmb3IgYXJjaGVzIHRoYXQgZG8gbm90IHlldCBzdXBwb3J0IGl0LgorICogUmV0dXJucyBzZWNvbmRzIGZyb20gZXBvY2ggdXNpbmcgdGhlIGJhdHRlcnkgYmFja2VkIHBlcnNpc3RlbnQgY2xvY2suCisgKiBSZXR1cm5zIHplcm8gaWYgdW5zdXBwb3J0ZWQuCisgKgorICogIFhYWCAtIERvIGJlIHN1cmUgdG8gcmVtb3ZlIGl0IG9uY2UgYWxsIGFyY2hlcyBpbXBsZW1lbnQgaXQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXygod2VhaykpIHJlYWRfcGVyc2lzdGVudF9jbG9jayh2b2lkKQoreworCXJldHVybiAwOworfQorCiAvKgogICogdGltZWtlZXBpbmdfaW5pdCAtIEluaXRpYWxpemVzIHRoZSBjbG9ja3NvdXJjZSBhbmQgY29tbW9uIHRpbWVrZWVwaW5nIHZhbHVlcwogICovCiB2b2lkIF9faW5pdCB0aW1la2VlcGluZ19pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHNlYyA9IHJlYWRfcGVyc2lzdGVudF9jbG9jaygpOwogCiAJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAKIAludHBfY2xlYXIoKTsKIAogCWNsb2NrID0gY2xvY2tzb3VyY2VfZ2V0X25leHQoKTsKLQljbG9ja3NvdXJjZV9jYWxjdWxhdGVfaW50ZXJ2YWwoY2xvY2ssIHRpY2tfbnNlYyk7CisJY2xvY2tzb3VyY2VfY2FsY3VsYXRlX2ludGVydmFsKGNsb2NrLCBOVFBfSU5URVJWQUxfTEVOR1RIKTsKIAljbG9jay0+Y3ljbGVfbGFzdCA9IGNsb2Nrc291cmNlX3JlYWQoY2xvY2spOwogCisJeHRpbWUudHZfc2VjID0gc2VjOworCXh0aW1lLnR2X25zZWMgPSAwOworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKKwkJLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOworCiAJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIH0KIAotCisvKiBmbGFnIGZvciBpZiB0aW1la2VlcGluZyBpcyBzdXNwZW5kZWQgKi8KIHN0YXRpYyBpbnQgdGltZWtlZXBpbmdfc3VzcGVuZGVkOworLyogdGltZSBpbiBzZWNvbmRzIHdoZW4gc3VzcGVuZCBiZWdhbiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lOworCiAvKioKICAqIHRpbWVrZWVwaW5nX3Jlc3VtZSAtIFJlc3VtZXMgdGhlIGdlbmVyaWMgdGltZWtlZXBpbmcgc3Vic3lzdGVtLgogICogQGRldjoJdW51c2VkCkBAIC05MDksMTMgKzk3OSwyNiBAQAogc3RhdGljIGludCB0aW1la2VlcGluZ19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbm93ID0gcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCk7CiAKIAl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQkvKiByZXN0YXJ0IHRoZSBsYXN0IGN5Y2xlIHZhbHVlICovCisKKwlpZiAobm93ICYmIChub3cgPiB0aW1la2VlcGluZ19zdXNwZW5kX3RpbWUpKSB7CisJCXVuc2lnbmVkIGxvbmcgc2xlZXBfbGVuZ3RoID0gbm93IC0gdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lOworCisJCXh0aW1lLnR2X3NlYyArPSBzbGVlcF9sZW5ndGg7CisJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyAtPSBzbGVlcF9sZW5ndGg7CisJfQorCS8qIHJlLWJhc2UgdGhlIGxhc3QgY3ljbGUgdmFsdWUgKi8KIAljbG9jay0+Y3ljbGVfbGFzdCA9IGNsb2Nrc291cmNlX3JlYWQoY2xvY2spOwogCWNsb2NrLT5lcnJvciA9IDA7CiAJdGltZWtlZXBpbmdfc3VzcGVuZGVkID0gMDsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOworCisJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOworCS8qIFJlc3VtZSBocnRpbWVycyAqLworCWNsb2NrX3dhc19zZXQoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC05MjUsNiArMTAwOCw3IEBACiAKIAl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAl0aW1la2VlcGluZ19zdXNwZW5kZWQgPSAxOworCXRpbWVrZWVwaW5nX3N1c3BlbmRfdGltZSA9IHJlYWRfcGVyc2lzdGVudF9jbG9jaygpOwogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDg5LDExICsxMTczLDggQEAKIAljbG9jay0+eHRpbWVfbnNlYyAtPSAoczY0KXh0aW1lLnR2X25zZWMgPDwgY2xvY2stPnNoaWZ0OwogCiAJLyogY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbmV3IGNsb2Nrc291cmNlIHRvIHVzZSAqLwotCWlmIChjaGFuZ2VfY2xvY2tzb3VyY2UoKSkgewotCQljbG9jay0+ZXJyb3IgPSAwOwotCQljbG9jay0+eHRpbWVfbnNlYyA9IDA7Ci0JCWNsb2Nrc291cmNlX2NhbGN1bGF0ZV9pbnRlcnZhbChjbG9jaywgdGlja19uc2VjKTsKLQl9CisJY2hhbmdlX2Nsb2Nrc291cmNlKCk7CisJdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgY2xvY2spOwogfQogCiAvKgpAQCAtMTE2MiwxMSArMTI0Myw5IEBACiAgKiBUaGlzIHJlYWQtd3JpdGUgc3BpbmxvY2sgcHJvdGVjdHMgdXMgZnJvbSByYWNlcyBpbiBTTVAgd2hpbGUKICAqIHBsYXlpbmcgd2l0aCB4dGltZSBhbmQgYXZlbnJ1bi4KICAqLwotI2lmbmRlZiBBUkNIX0hBVkVfWFRJTUVfTE9DSwotX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NFUUxPQ0soeHRpbWVfbG9jayk7CitfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NFUUxPQ0soeHRpbWVfbG9jayk7CiAKIEVYUE9SVF9TWU1CT0woeHRpbWVfbG9jayk7Ci0jZW5kaWYKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gcnVucyB0aW1lcnMgYW5kIHRoZSB0aW1lci10cSBpbiBib3R0b20gaGFsZiBjb250ZXh0LgpAQCAtMTE3NSw3ICsxMjU0LDggQEAKIHsKIAl0dmVjX2Jhc2VfdCAqYmFzZSA9IF9fZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7CiAKLSAJaHJ0aW1lcl9ydW5fcXVldWVzKCk7CisJaHJ0aW1lcl9ydW5fcXVldWVzKCk7CisKIAlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBiYXNlLT50aW1lcl9qaWZmaWVzKSkKIAkJX19ydW5fdGltZXJzKGJhc2UpOwogfQpAQCAtMTYyMSw2ICsxNzAxLDggQEAKIAlpbnQgZXJyID0gdGltZXJfY3B1X25vdGlmeSgmdGltZXJzX25iLCAodW5zaWduZWQgbG9uZylDUFVfVVBfUFJFUEFSRSwKIAkJCQkodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKKwlpbml0X3RpbWVyX3N0YXRzKCk7CisKIAlCVUdfT04oZXJyID09IE5PVElGWV9CQUQpOwogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmdGltZXJzX25iKTsKIAlvcGVuX3NvZnRpcnEoVElNRVJfU09GVElSUSwgcnVuX3RpbWVyX3NvZnRpcnEsIE5VTEwpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RzYWNjdC5jIGIva2VybmVsL3RzYWNjdC5jCmluZGV4IGJhYWNjMzYuLjY1OGY2MzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90c2FjY3QuYworKysgYi9rZXJuZWwvdHNhY2N0LmMKQEAgLTIyLDggKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCi0KLSNkZWZpbmUgVVNFQ19QRVJfVElDSwkoVVNFQ19QRVJfU0VDL0haKQogLyoKICAqIGZpbGwgaW4gYmFzaWMgYWNjb3VudGluZyBmaWVsZHMKICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDAyMGQxZmYuLmI2ZmE1ZTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocXVldWVfd29yayk7CiAKLXN0YXRpYyB2b2lkIGRlbGF5ZWRfd29ya190aW1lcl9mbih1bnNpZ25lZCBsb25nIF9fZGF0YSkKK3ZvaWQgZGVsYXllZF93b3JrX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgX19kYXRhKQogewogCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gKHN0cnVjdCBkZWxheWVkX3dvcmsgKilfX2RhdGE7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxID0gZ2V0X3dxX2RhdGEoJmR3b3JrLT53b3JrKTsKQEAgLTI0NSw2ICsyNDUsNyBAQAogCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZkd29yay0+dGltZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrID0gJmR3b3JrLT53b3JrOwogCisJdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8odGltZXIpOwogCWlmIChkZWxheSA9PSAwKQogCQlyZXR1cm4gcXVldWVfd29yayh3cSwgd29yayk7CiAKQEAgLTU5Myw4ICs1OTQsMTAgQEAKICAqIEFmdGVyIHdhaXRpbmcgZm9yIGEgZ2l2ZW4gdGltZSB0aGlzIHB1dHMgYSBqb2IgaW4gdGhlIGtlcm5lbC1nbG9iYWwKICAqIHdvcmtxdWV1ZS4KICAqLwotaW50IGZhc3RjYWxsIHNjaGVkdWxlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaywgdW5zaWduZWQgbG9uZyBkZWxheSkKK2ludCBmYXN0Y2FsbCBzY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssCisJCQkJCXVuc2lnbmVkIGxvbmcgZGVsYXkpCiB7CisJdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8oJmR3b3JrLT50aW1lcik7CiAJcmV0dXJuIHF1ZXVlX2RlbGF5ZWRfd29yayhrZXZlbnRkX3dxLCBkd29yaywgZGVsYXkpOwogfQogRVhQT1JUX1NZTUJPTChzY2hlZHVsZV9kZWxheWVkX3dvcmspOwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCA2M2YwNGMxLi4zZjNlNzQwIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMTM0LDYgKzEzNCwxNyBAQAogCSAgYXBwbGljYXRpb24sIHlvdSBjYW4gc2F5IE4gdG8gYXZvaWQgdGhlIHZlcnkgc2xpZ2h0IG92ZXJoZWFkCiAJICB0aGlzIGFkZHMuCiAKK2NvbmZpZyBUSU1FUl9TVEFUUworCWJvb2wgIkNvbGxlY3Qga2VybmVsIHRpbWVycyBzdGF0aXN0aWNzIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFBST0NfRlMKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgYWRkaXRpb25hbCBjb2RlIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUKKwkgIHRpbWVyIHJvdXRpbmVzIHRvIGNvbGxlY3Qgc3RhdGlzdGljcyBhYm91dCBrZXJuZWwgdGltZXJzIGJlaW5nCisJICByZXByb2dyYW1tZWQuIFRoZSBzdGF0aXN0aWNzIGNhbiBiZSByZWFkIGZyb20gL3Byb2MvdGltZXJfc3RhdHMuCisJICBUaGUgc3RhdGlzdGljcyBjb2xsZWN0aW9uIGlzIHN0YXJ0ZWQgYnkgd3JpdGluZyAxIHRvIC9wcm9jL3RpbWVyX3N0YXRzLAorCSAgd3JpdGluZyAwIHN0b3BzIGl0LiBUaGlzIGZlYXR1cmUgaXMgdXNlZnVsIHRvIGNvbGxlY3QgaW5mb3JtYXRpb24KKwkgIGFib3V0IHRpbWVyIHVzYWdlIHBhdHRlcm5zIGluIGtlcm5lbCBhbmQgdXNlcnNwYWNlLgorCiBjb25maWcgREVCVUdfU0xBQgogCWJvb2wgIkRlYnVnIHNsYWIgbWVtb3J5IGFsbG9jYXRpb25zIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFNMQUIKQEAgLTQwMCw4ICs0MTEsNiBAQAogY29uZmlnIEZBVUxUX0lOSkVDVElPTgogCWJvb2wgIkZhdWx0LWluamVjdGlvbiBmcmFtZXdvcmsiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKLQlkZXBlbmRzIG9uIFNUQUNLVFJBQ0UKLQlzZWxlY3QgRlJBTUVfUE9JTlRFUgogCWhlbHAKIAkgIFByb3ZpZGUgZmF1bHQtaW5qZWN0aW9uIGZyYW1ld29yay4KIAkgIEZvciBtb3JlIGRldGFpbHMsIHNlZSBEb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi8uCkBAIC00MjksMyArNDM4LDExIEBACiAJZGVwZW5kcyBvbiBGQVVMVF9JTkpFQ1RJT04gJiYgU1lTRlMgJiYgREVCVUdfRlMKIAloZWxwCiAJICBFbmFibGUgY29uZmlndXJhdGlvbiBvZiBmYXVsdC1pbmplY3Rpb24gY2FwYWJpbGl0aWVzIHZpYSBkZWJ1Z2ZzLgorCitjb25maWcgRkFVTFRfSU5KRUNUSU9OX1NUQUNLVFJBQ0VfRklMVEVSCisJYm9vbCAic3RhY2t0cmFjZSBmaWx0ZXIgZm9yIGZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXRpZXMiCisJZGVwZW5kcyBvbiBGQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMgJiYgU1RBQ0tUUkFDRV9TVVBQT1JUCisJc2VsZWN0IFNUQUNLVFJBQ0UKKwlzZWxlY3QgRlJBTUVfUE9JTlRFUgorCWhlbHAKKwkgIFByb3ZpZGUgc3RhY2t0cmFjZSBmaWx0ZXIgZm9yIGZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXRpZXMKZGlmZiAtLWdpdCBhL2xpYi9jcHVtYXNrLmMgYi9saWIvY3B1bWFzay5jCmluZGV4IDNhNjdkYzUuLjFlYTJjMTggMTAwNjQ0Ci0tLSBhL2xpYi9jcHVtYXNrLmMKKysrIGIvbGliL2NwdW1hc2suYwpAQCAtMTUsMjIgKzE1LDggQEAKIH0KIEVYUE9SVF9TWU1CT0woX19uZXh0X2NwdSk7CiAKLS8qCi0gKiBGaW5kIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHNtcF9wcm9jZXNzb3JfaWQoKQotICoKLSAqIE5vdGU6IGlmIHdlJ3JlIHByZXBhcmVkIHRvIGFzc3VtZSB0aGF0IGNwdV9wb3NzaWJsZV9tYXAgbmV2ZXIgY2hhbmdlcwotICogKHJlYXNvbmFibGUpIHRoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQgY2FjaGUgaXRzIHJldHVybiB2YWx1ZS4KLSAqLwotaW50IGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGNwdTsKLQl1bnNpZ25lZCBoaWdoZXN0ID0gMDsKLQotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgY3B1X3Bvc3NpYmxlX21hcCkKLQkJaGlnaGVzdCA9IGNwdTsKLQlyZXR1cm4gaGlnaGVzdDsKLX0KLUVYUE9SVF9TWU1CT0woaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQpOworaW50IG5yX2NwdV9pZHM7CitFWFBPUlRfU1lNQk9MKG5yX2NwdV9pZHMpOwogCiBpbnQgX19hbnlfb25saW5lX2NwdShjb25zdCBjcHVtYXNrX3QgKm1hc2spCiB7CmRpZmYgLS1naXQgYS9saWIvZGV2cmVzLmMgYi9saWIvZGV2cmVzLmMKaW5kZXggMmE2NjhkZC4uZWIzODg0OSAxMDA2NDQKLS0tIGEvbGliL2RldnJlcy5jCisrKyBiL2xpYi9kZXZyZXMuYwpAQCAtMjc0LDIxICsyNzQsMjEgQEAKIAogCQlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCBpLCBuYW1lKTsKIAkJaWYgKHJjKQotCQkJZ290byBlcnJfcmVnaW9uOworCQkJZ290byBlcnJfaW52YWw7CiAKIAkJcmMgPSAtRU5PTUVNOwogCQlpZiAoIXBjaW1faW9tYXAocGRldiwgaSwgMCkpCi0JCQlnb3RvIGVycl9pb21hcDsKKwkJCWdvdG8gZXJyX3JlZ2lvbjsKIAl9CiAKIAlyZXR1cm4gMDsKIAotIGVycl9pb21hcDoKLQlwY2ltX2lvdW5tYXAocGRldiwgaW9tYXBbaV0pOwogIGVycl9yZWdpb246CiAJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIGkpOwogIGVycl9pbnZhbDoKIAl3aGlsZSAoLS1pID49IDApIHsKKwkJaWYgKCEobWFzayAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOwogCQlwY2ltX2lvdW5tYXAocGRldiwgaW9tYXBbaV0pOwogCQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgaSk7CiAJfQpkaWZmIC0tZ2l0IGEvbGliL2ZhdWx0LWluamVjdC5jIGIvbGliL2ZhdWx0LWluamVjdC5jCmluZGV4IGI1YTkwZmMuLjBmYWJkMTIgMTAwNjQ0Ci0tLSBhL2xpYi9mYXVsdC1pbmplY3QuYworKysgYi9saWIvZmF1bHQtaW5qZWN0LmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogI2RlZmluZSBNQVhfU1RBQ0tfVFJBQ0VfREVQVEggMzIKIAotI2lmIGRlZmluZWQoQ09ORklHX1NUQUNLVFJBQ0UpCisjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9TVEFDS1RSQUNFX0ZJTFRFUgogCiBzdGF0aWMgYm9vbCBmYWlsX3N0YWNrdHJhY2Uoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIpCiB7CkBAIC05MCwxNyArOTAsMTAgQEAKIAogc3RhdGljIGlubGluZSBib29sIGZhaWxfc3RhY2t0cmFjZShzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0cikKIHsKLQlzdGF0aWMgYm9vbCBmaXJzdHRpbWUgPSB0cnVlOwotCi0JaWYgKGZpcnN0dGltZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSJUaGlzIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBpbXBsZW1lbnQgc2F2ZV9zdGFja190cmFjZSgpXG4iKTsKLQkJZmlyc3R0aW1lID0gZmFsc2U7Ci0JfQotCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9TVEFDS1RSQUNFX0ZJTFRFUiAqLwogCiAvKgogICogVGhpcyBjb2RlIGlzIHN0b2xlbiBmcm9tIGZhaWxtYWxsb2MtMS4wCkBAIC0yMTcsNiArMjEwLDggQEAKIAlkZWJ1Z2ZzX3JlbW92ZShhdHRyLT5kZW50cmllcy50YXNrX2ZpbHRlcl9maWxlKTsKIAlhdHRyLT5kZW50cmllcy50YXNrX2ZpbHRlcl9maWxlID0gTlVMTDsKIAorI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fU1RBQ0tUUkFDRV9GSUxURVIKKwogCWRlYnVnZnNfcmVtb3ZlKGF0dHItPmRlbnRyaWVzLnN0YWNrdHJhY2VfZGVwdGhfZmlsZSk7CiAJYXR0ci0+ZGVudHJpZXMuc3RhY2t0cmFjZV9kZXB0aF9maWxlID0gTlVMTDsKIApAQCAtMjMyLDYgKzIyNyw4IEBACiAJZGVidWdmc19yZW1vdmUoYXR0ci0+ZGVudHJpZXMucmVqZWN0X2VuZF9maWxlKTsKIAlhdHRyLT5kZW50cmllcy5yZWplY3RfZW5kX2ZpbGUgPSBOVUxMOwogCisjZW5kaWYgLyogQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9TVEFDS1RSQUNFX0ZJTFRFUiAqLworCiAJaWYgKGF0dHItPmRlbnRyaWVzLmRpcikKIAkJV0FSTl9PTighc2ltcGxlX2VtcHR5KGF0dHItPmRlbnRyaWVzLmRpcikpOwogCkBAIC0yNjksNiArMjY2LDEzIEBACiAJYXR0ci0+ZGVudHJpZXMudGFza19maWx0ZXJfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2Jvb2woInRhc2stZmlsdGVyIiwKIAkJCQkJCW1vZGUsIGRpciwgJmF0dHItPnRhc2tfZmlsdGVyKTsKIAorCWlmICghYXR0ci0+ZGVudHJpZXMucHJvYmFiaWxpdHlfZmlsZSB8fCAhYXR0ci0+ZGVudHJpZXMuaW50ZXJ2YWxfZmlsZSB8fAorCSAgICAhYXR0ci0+ZGVudHJpZXMudGltZXNfZmlsZSB8fCAhYXR0ci0+ZGVudHJpZXMuc3BhY2VfZmlsZSB8fAorCSAgICAhYXR0ci0+ZGVudHJpZXMudmVyYm9zZV9maWxlIHx8ICFhdHRyLT5kZW50cmllcy50YXNrX2ZpbHRlcl9maWxlKQorCQlnb3RvIGZhaWw7CisKKyNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX1NUQUNLVFJBQ0VfRklMVEVSCisKIAlhdHRyLT5kZW50cmllcy5zdGFja3RyYWNlX2RlcHRoX2ZpbGUgPQogCQlkZWJ1Z2ZzX2NyZWF0ZV91bF9NQVhfU1RBQ0tfVFJBQ0VfREVQVEgoCiAJCQkic3RhY2t0cmFjZS1kZXB0aCIsIG1vZGUsIGRpciwgJmF0dHItPnN0YWNrdHJhY2VfZGVwdGgpOwpAQCAtMjg1LDE4ICsyODksMTUgQEAKIAlhdHRyLT5kZW50cmllcy5yZWplY3RfZW5kX2ZpbGUgPQogCQlkZWJ1Z2ZzX2NyZWF0ZV91bCgicmVqZWN0LWVuZCIsIG1vZGUsIGRpciwgJmF0dHItPnJlamVjdF9lbmQpOwogCi0KLQlpZiAoIWF0dHItPmRlbnRyaWVzLnByb2JhYmlsaXR5X2ZpbGUgfHwgIWF0dHItPmRlbnRyaWVzLmludGVydmFsX2ZpbGUKLQkgICAgfHwgIWF0dHItPmRlbnRyaWVzLnRpbWVzX2ZpbGUgfHwgIWF0dHItPmRlbnRyaWVzLnNwYWNlX2ZpbGUKLQkgICAgfHwgIWF0dHItPmRlbnRyaWVzLnZlcmJvc2VfZmlsZSB8fCAhYXR0ci0+ZGVudHJpZXMudGFza19maWx0ZXJfZmlsZQotCSAgICB8fCAhYXR0ci0+ZGVudHJpZXMuc3RhY2t0cmFjZV9kZXB0aF9maWxlCi0JICAgIHx8ICFhdHRyLT5kZW50cmllcy5yZXF1aXJlX3N0YXJ0X2ZpbGUKLQkgICAgfHwgIWF0dHItPmRlbnRyaWVzLnJlcXVpcmVfZW5kX2ZpbGUKLQkgICAgfHwgIWF0dHItPmRlbnRyaWVzLnJlamVjdF9zdGFydF9maWxlCi0JICAgIHx8ICFhdHRyLT5kZW50cmllcy5yZWplY3RfZW5kX2ZpbGUKLQkgICAgKQorCWlmICghYXR0ci0+ZGVudHJpZXMuc3RhY2t0cmFjZV9kZXB0aF9maWxlIHx8CisJICAgICFhdHRyLT5kZW50cmllcy5yZXF1aXJlX3N0YXJ0X2ZpbGUgfHwKKwkgICAgIWF0dHItPmRlbnRyaWVzLnJlcXVpcmVfZW5kX2ZpbGUgfHwKKwkgICAgIWF0dHItPmRlbnRyaWVzLnJlamVjdF9zdGFydF9maWxlIHx8CisJICAgICFhdHRyLT5kZW50cmllcy5yZWplY3RfZW5kX2ZpbGUpCiAJCWdvdG8gZmFpbDsKIAorI2VuZGlmIC8qIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fU1RBQ0tUUkFDRV9GSUxURVIgKi8KKwogCXJldHVybiAwOwogZmFpbDoKIAljbGVhbnVwX2ZhdWx0X2F0dHJfZGVudHJpZXMoYXR0cik7CmRpZmYgLS1naXQgYS9saWIvZ2VuYWxsb2MuYyBiL2xpYi9nZW5hbGxvYy5jCmluZGV4IDc1YWU2OGMuLmViN2MyYmEgMTAwNjQ0Ci0tLSBhL2xpYi9nZW5hbGxvYy5jCisrKyBiL2xpYi9nZW5hbGxvYy5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJCWFkZHIgPSBjaHVuay0+c3RhcnRfYWRkciArCiAJCQkJCSAgICAoKHVuc2lnbmVkIGxvbmcpc3RhcnRfYml0IDw8IG9yZGVyKTsKIAkJCXdoaWxlIChuYml0cy0tKQotCQkJCV9fc2V0X2JpdChzdGFydF9iaXQrKywgJmNodW5rLT5iaXRzKTsKKwkJCQlfX3NldF9iaXQoc3RhcnRfYml0KyssIGNodW5rLT5iaXRzKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNodW5rLT5sb2NrLCBmbGFncyk7CiAJCQlyZWFkX3VubG9jaygmcG9vbC0+bG9jayk7CiAJCQlyZXR1cm4gYWRkcjsKQEAgLTE4Nyw3ICsxODcsNyBAQAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNodW5rLT5sb2NrLCBmbGFncyk7CiAJCQliaXQgPSAoYWRkciAtIGNodW5rLT5zdGFydF9hZGRyKSA+PiBvcmRlcjsKIAkJCXdoaWxlIChuYml0cy0tKQotCQkJCV9fY2xlYXJfYml0KGJpdCsrLCAmY2h1bmstPmJpdHMpOworCQkJCV9fY2xlYXJfYml0KGJpdCsrLCBjaHVuay0+Yml0cyk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaHVuay0+bG9jaywgZmxhZ3MpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IDI3ODJmNDkuLmY0ZjYxNzYgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtMTcxLDcgKzE3MSw3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCWlmICgha29iai0+a19uYW1lKQogCQlrb2JqLT5rX25hbWUgPSBrb2JqLT5uYW1lOwotCWlmICgha29iai0+a19uYW1lKSB7CisJaWYgKCEqa29iai0+a19uYW1lKSB7CiAJCXByX2RlYnVnKCJrb2JqZWN0IGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkIHdpdGggbm8gbmFtZSFcbiIpOwogCQlXQVJOX09OKDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMyNiw2ICszMjYsNyBAQAogLyoqCiAgKglrb2JqZWN0X3JlbmFtZSAtIGNoYW5nZSB0aGUgbmFtZSBvZiBhbiBvYmplY3QKICAqCUBrb2JqOglvYmplY3QgaW4gcXVlc3Rpb24uCisgKglAbmV3X3BhcmVudDogb2JqZWN0J3MgbmV3IHBhcmVudAogICoJQG5ld19uYW1lOiBvYmplY3QncyBuZXcgbmFtZQogICovCiAKZGlmZiAtLWdpdCBhL2xpYi90ZXh0c2VhcmNoLmMgYi9saWIvdGV4dHNlYXJjaC5jCmluZGV4IDllMmEwMDIuLjg4Yzk4YTIgMTAwNjQ0Ci0tLSBhL2xpYi90ZXh0c2VhcmNoLmMKKysrIGIvbGliL3RleHRzZWFyY2guYwpAQCAtNDAsNyArNDAsNyBAQAogICogICAgICAgY29uZmlndXJhdGlvbiBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLgogICogICAoMykgVXNlciBzdGFydHMgdGhlIHNlYXJjaChlcykgYnkgY2FsbGluZyBfZmluZCgpIG9yIF9uZXh0KCkgdG8KICAqICAgICAgIGZldGNoIHN1YnNlcXVlbnQgb2NjdXJyZW5jZXMuIEEgc3RhdGUgdmFyaWFibGUgaXMgcHJvdmlkZWQKLSAqICAgICAgIHRvIHRoZSBhbGdvcmlodG0gdG8gc3RvcmUgcGVyc2lzdGVudCB2YXJpYWJsZXMuCisgKiAgICAgICB0byB0aGUgYWxnb3JpdGhtIHRvIHN0b3JlIHBlcnNpc3RlbnQgdmFyaWFibGVzLgogICogICAoNCkgQ29yZSBldmVudHVhbGx5IHJlc2V0cyB0aGUgc2VhcmNoIG9mZnNldCBhbmQgZm9yd2FyZHMgdGhlIGZpbmQoKQogICogICAgICAgcmVxdWVzdCB0byB0aGUgYWxnb3JpdGhtLgogICogICAoNSkgQWxnb3JpdGhtIGNhbGxzIGdldF9uZXh0X2Jsb2NrKCkgcHJvdmlkZWQgYnkgdGhlIHVzZXIgY29udGlub3VzbHkKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCAwMDQxNDg0Li5kMTA2MGI4IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0yMDc5LDIxICsyMDc5LDI3IEBACiAJCS8qIExpbWl0IHRoZSBzaXplIG9mIHRoZSBjb3B5IHRvIHRoZSBjYWxsZXIncyB3cml0ZSBzaXplICovCiAJCWJ5dGVzID0gbWluKGJ5dGVzLCBjb3VudCk7CiAKLQkJLyoKLQkJICogTGltaXQgdGhlIHNpemUgb2YgdGhlIGNvcHkgdG8gdGhhdCBvZiB0aGUgY3VycmVudCBzZWdtZW50LAotCQkgKiBiZWNhdXNlIGZhdWx0X2luX3BhZ2VzX3JlYWRhYmxlKCkgZG9lc24ndCBrbm93IGhvdyB0byB3YWxrCi0JCSAqIHNlZ21lbnRzLgorCQkvKiBXZSBvbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQgcHJlZmF1bHRpbmcgd2hlbiB3cml0ZXMgYXJlIGZyb20KKwkJICogdXNlci1zcGFjZS4gIE5GU2QgdXNlcyB2ZnNfd3JpdGV2IHdpdGggc2V2ZXJhbCBub24tYWxpZ25lZAorCQkgKiBzZWdtZW50cyBpbiB0aGUgdmVjdG9yLCBhbmQgbGltaXRpbmcgdG8gb25lIHNlZ21lbnQgYSB0aW1lIGlzCisJCSAqIGEgbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBmb3IgcmUtd3JpdGUKIAkJICovCi0JCWJ5dGVzID0gbWluKGJ5dGVzLCBjdXJfaW92LT5pb3ZfbGVuIC0gaW92X2Jhc2UpOworCQlpZiAoIXNlZ21lbnRfZXEoZ2V0X2ZzKCksIEtFUk5FTF9EUykpIHsKKwkJCS8qCisJCQkgKiBMaW1pdCB0aGUgc2l6ZSBvZiB0aGUgY29weSB0byB0aGF0IG9mIHRoZSBjdXJyZW50CisJCQkgKiBzZWdtZW50LCBiZWNhdXNlIGZhdWx0X2luX3BhZ2VzX3JlYWRhYmxlKCkgZG9lc24ndAorCQkJICoga25vdyBob3cgdG8gd2FsayBzZWdtZW50cy4KKwkJCSAqLworCQkJYnl0ZXMgPSBtaW4oYnl0ZXMsIGN1cl9pb3YtPmlvdl9sZW4gLSBpb3ZfYmFzZSk7CiAKLQkJLyoKLQkJICogQnJpbmcgaW4gdGhlIHVzZXIgcGFnZSB0aGF0IHdlIHdpbGwgY29weSBmcm9tIF9maXJzdF8uCi0JCSAqIE90aGVyd2lzZSB0aGVyZSdzIGEgbmFzdHkgZGVhZGxvY2sgb24gY29weWluZyBmcm9tIHRoZQotCQkgKiBzYW1lIHBhZ2UgYXMgd2UncmUgd3JpdGluZyB0bywgd2l0aG91dCBpdCBiZWluZyBtYXJrZWQKLQkJICogdXAtdG8tZGF0ZS4KLQkJICovCi0JCWZhdWx0X2luX3BhZ2VzX3JlYWRhYmxlKGJ1ZiwgYnl0ZXMpOwotCisJCQkvKgorCQkJICogQnJpbmcgaW4gdGhlIHVzZXIgcGFnZSB0aGF0IHdlIHdpbGwgY29weSBmcm9tCisJCQkgKiBfZmlyc3RfLiAgT3RoZXJ3aXNlIHRoZXJlJ3MgYSBuYXN0eSBkZWFkbG9jayBvbgorCQkJICogY29weWluZyBmcm9tIHRoZSBzYW1lIHBhZ2UgYXMgd2UncmUgd3JpdGluZyB0bywKKwkJCSAqIHdpdGhvdXQgaXQgYmVpbmcgbWFya2VkIHVwLXRvLWRhdGUuCisJCQkgKi8KKwkJCWZhdWx0X2luX3BhZ2VzX3JlYWRhYmxlKGJ1ZiwgYnl0ZXMpOworCQl9CiAJCXBhZ2UgPSBfX2dyYWJfY2FjaGVfcGFnZShtYXBwaW5nLGluZGV4LCZjYWNoZWRfcGFnZSwmbHJ1X3B2ZWMpOwogCQlpZiAoIXBhZ2UpIHsKIAkJCXN0YXR1cyA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDI1OWE3MDYuLmNmMmE1MzggMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAltYXgrKzsJCQkvKiBzcGFjZSBmb3IgemxjYWNoZV9wdHIgKHNlZSBtbXpvbmUuaCkgKi8KIAl6bCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b25lICopICogbWF4LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXpsKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJemwtPnpsY2FjaGVfcHRyID0gTlVMTDsKIAludW0gPSAwOwogCS8qIEZpcnN0IHB1dCBpbiB0aGUgaGlnaGVzdCB6b25lcyBmcm9tIGFsbCBub2RlcywgdGhlbiBhbGwgdGhlIG5leHQgCkBAIC0xNjIsNiArMTYyLDEwIEBACiAJCQlicmVhazsKIAkJay0tOwogCX0KKwlpZiAobnVtID09IDApIHsKKwkJa2ZyZWUoemwpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CiAJemwtPnpvbmVzW251bV0gPSBOVUxMOwogCXJldHVybiB6bDsKIH0KQEAgLTE5Myw5ICsxOTcsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBNUE9MX0JJTkQ6CiAJCXBvbGljeS0+di56b25lbGlzdCA9IGJpbmRfem9uZWxpc3Qobm9kZXMpOwotCQlpZiAocG9saWN5LT52LnpvbmVsaXN0ID09IE5VTEwpIHsKKwkJaWYgKElTX0VSUihwb2xpY3ktPnYuem9uZWxpc3QpKSB7CisJCQl2b2lkICplcnJvcl9jb2RlID0gcG9saWN5LT52LnpvbmVsaXN0OwogCQkJa21lbV9jYWNoZV9mcmVlKHBvbGljeV9jYWNoZSwgcG9saWN5KTsKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQkJcmV0dXJuIGVycm9yX2NvZGU7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTY2Nyw3ICsxNjcyLDcgQEAKIAkJICogdGhlbiB6b25lbGlzdF9wb2xpY3koKSB3aWxsICJGQUxMIFRIUk9VR0giIHRvIE1QT0xfREVGQVVMVC4KIAkJICovCiAKLQkJaWYgKHpvbmVsaXN0KSB7CisJCWlmICghSVNfRVJSKHpvbmVsaXN0KSkgewogCQkJLyogR29vZCAtIGdvdCBtZW0gLSBzdWJzdGl0dXRlIG5ldyB6b25lbGlzdCAqLwogCQkJa2ZyZWUocG9sLT52LnpvbmVsaXN0KTsKIAkJCXBvbC0+di56b25lbGlzdCA9IHpvbmVsaXN0OwpkaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jCmluZGV4IDk1YzVmNDkuLjVlZmUwZGUgMTAwNjQ0Ci0tLSBhL21tL21pbmNvcmUuYworKysgYi9tbS9taW5jb3JlLmMKQEAgLTc3LDggKzc3LDE2IEBACiAJICogUFRFIGFycmF5IGZvciBvdXIgYWRkcmVzcy4KIAkgKi8KIAluciA9IFBUUlNfUEVSX1BURSAtICgoYWRkciA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUtMSkpOwotCWlmIChuciA+IHBhZ2VzKQotCQluciA9IHBhZ2VzOworCisJLyoKKwkgKiBEb24ndCBvdmVycnVuIHRoaXMgdm1hCisJICovCisJbnIgPSBtaW4obnIsICh2bWEtPnZtX2VuZCAtIGFkZHIpID4+IFBBR0VfU0hJRlQpOworCisJLyoKKwkgKiBEb24ndCByZXR1cm4gbW9yZSB0aGFuIHRoZSBjYWxsZXIgYXNrZWQgZm9yCisJICovCisJbnIgPSBtaW4obnIsIHBhZ2VzKTsKIAogCXBnZCA9IHBnZF9vZmZzZXQodm1hLT52bV9tbSwgYWRkcik7CiAJaWYgKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2QpKQpAQCAtMTE2LDEwICsxMjQsMTcgQEAKIAkJCQkvKiBtaWdyYXRpb24gZW50cmllcyBhcmUgYWx3YXlzIHVwdG9kYXRlICovCiAJCQkJcHJlc2VudCA9IDE7CiAJCQl9IGVsc2UgeworI2lmZGVmIENPTkZJR19TV0FQCiAJCQkJcGdvZmYgPSBlbnRyeS52YWw7CiAJCQkJcHJlc2VudCA9IG1pbmNvcmVfcGFnZSgmc3dhcHBlcl9zcGFjZSwgcGdvZmYpOworI2Vsc2UKKwkJCQlXQVJOX09OKDEpOworCQkJCXByZXNlbnQgPSAxOworI2VuZGlmCiAJCQl9CiAJCX0KKworCQl2ZWNbaV0gPSBwcmVzZW50OwogCX0KIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZXAtMSwgcHRsKTsKIApAQCAtMTMwLDYgKzE0NSw5IEBACiAJCXBnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTsKIAkJZm9yIChpID0gMDsgaSA8IG5yOyBpKyssIHBnb2ZmKyspCiAJCQl2ZWNbaV0gPSBtaW5jb3JlX3BhZ2Uodm1hLT52bV9maWxlLT5mX21hcHBpbmcsIHBnb2ZmKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJCXZlY1tpXSA9IDA7CiAJfQogCiAJcmV0dXJuIG5yOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGQ0NjFiMjMuLjQxNzM3MzkgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTY2NCw2ICs2NjQsMjYgQEAKIAlyZXR1cm4gaTsKIH0KIAorI2lmIE1BWF9OVU1OT0RFUyA+IDEKK2ludCBucl9ub2RlX2lkcyBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChucl9ub2RlX2lkcyk7CisKKy8qCisgKiBGaWd1cmUgb3V0IHRoZSBudW1iZXIgb2YgcG9zc2libGUgbm9kZSBpZHMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ucl9ub2RlX2lkcyh2b2lkKQoreworCXVuc2lnbmVkIGludCBub2RlOworCXVuc2lnbmVkIGludCBoaWdoZXN0ID0gMDsKKworCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlX3Bvc3NpYmxlX21hcCkKKwkJaGlnaGVzdCA9IG5vZGU7CisJbnJfbm9kZV9pZHMgPSBoaWdoZXN0ICsgMTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbnJfbm9kZV9pZHModm9pZCkge30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX05VTUEKIC8qCiAgKiBDYWxsZWQgZnJvbSB0aGUgc2xhYiByZWFwZXIgdG8gZHJhaW4gcGFnZXNldHMgb24gYSBwYXJ0aWN1bGFyIG5vZGUgdGhhdApAQCAtMjk0NCw2ICsyOTY0LDcgQEAKIAkJCQkJCWVhcmx5X25vZGVfbWFwW2ldLmVuZF9wZm4pOwogCiAJLyogSW5pdGlhbGlzZSBldmVyeSBub2RlICovCisJc2V0dXBfbnJfbm9kZV9pZHMoKTsKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKIAkJcGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpOwogCQlmcmVlX2FyZWFfaW5pdF9ub2RlKG5pZCwgcGdkYXQsIE5VTEwsCkBAIC0zMzcwLDE4ICszMzkxLDQgQEAKIEVYUE9SVF9TWU1CT0wocGFnZV90b19wZm4pOwogI2VuZGlmIC8qIENPTkZJR19PVVRfT0ZfTElORV9QRk5fVE9fUEFHRSAqLwogCi0jaWYgTUFYX05VTU5PREVTID4gMQotLyoKLSAqIEZpbmQgdGhlIGhpZ2hlc3QgcG9zc2libGUgbm9kZSBpZC4KLSAqLwotaW50IGhpZ2hlc3RfcG9zc2libGVfbm9kZV9pZCh2b2lkKQotewotCXVuc2lnbmVkIGludCBub2RlOwotCXVuc2lnbmVkIGludCBoaWdoZXN0ID0gMDsKIAotCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlX3Bvc3NpYmxlX21hcCkKLQkJaGlnaGVzdCA9IG5vZGU7Ci0JcmV0dXJuIGhpZ2hlc3Q7Ci19Ci1FWFBPUlRfU1lNQk9MKGhpZ2hlc3RfcG9zc2libGVfbm9kZV9pZCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCA3MDc4NGI4Li44ZmRhZmZhIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogc3RhdGljIHN0cnVjdCBhcnJheV9jYWNoZSAqKmFsbG9jX2FsaWVuX2NhY2hlKGludCBub2RlLCBpbnQgbGltaXQpCiB7CiAJc3RydWN0IGFycmF5X2NhY2hlICoqYWNfcHRyOwotCWludCBtZW1zaXplID0gc2l6ZW9mKHZvaWQgKikgKiBNQVhfTlVNTk9ERVM7CisJaW50IG1lbXNpemUgPSBzaXplb2Yodm9pZCAqKSAqIG5yX25vZGVfaWRzOwogCWludCBpOwogCiAJaWYgKGxpbWl0ID4gMSkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IDM0YzQ5NzkuLmFjOTk4NGYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtODMzLDggKzgzMyw3IEBACiAJCS8qIHRoaXMgd2lsbCBnZXQgZnJlZSdkIGluIGRvX3JlcGxhY2UoKS9lYnRfcmVnaXN0ZXJfdGFibGUoKQogCQkgICBpZiBhbiBlcnJvciBvY2N1cnMgKi8KIAkJbmV3aW5mby0+Y2hhaW5zdGFjayA9Ci0JCQl2bWFsbG9jKChoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpCi0JCQkJCSogc2l6ZW9mKCoobmV3aW5mby0+Y2hhaW5zdGFjaykpKTsKKwkJCXZtYWxsb2MobnJfY3B1X2lkcyAqIHNpemVvZigqKG5ld2luZm8tPmNoYWluc3RhY2spKSk7CiAJCWlmICghbmV3aW5mby0+Y2hhaW5zdGFjaykKIAkJCXJldHVybiAtRU5PTUVNOwogCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewpAQCAtOTQ3LDggKzk0Niw3IEBACiAJaWYgKHRtcC5udW1fY291bnRlcnMgPj0gSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvdW50ZXJzaXplID0gQ09VTlRFUl9PRkZTRVQodG1wLm5lbnRyaWVzKSAqCi0JCQkJCShoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzEpOworCWNvdW50ZXJzaXplID0gQ09VTlRFUl9PRkZTRVQodG1wLm5lbnRyaWVzKSAqIG5yX2NwdV9pZHM7CiAJbmV3aW5mbyA9IHZtYWxsb2Moc2l6ZW9mKCpuZXdpbmZvKSArIGNvdW50ZXJzaXplKTsKIAlpZiAoIW5ld2luZm8pCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTE2OCw4ICsxMTY2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY291bnRlcnNpemUgPSBDT1VOVEVSX09GRlNFVChyZXBsLT5uZW50cmllcykgKgotCQkJCQkoaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKSsxKTsKKwljb3VudGVyc2l6ZSA9IENPVU5URVJfT0ZGU0VUKHJlcGwtPm5lbnRyaWVzKSAqIG5yX2NwdV9pZHM7CiAJbmV3aW5mbyA9IHZtYWxsb2Moc2l6ZW9mKCpuZXdpbmZvKSArIGNvdW50ZXJzaXplKTsKIAlyZXQgPSAtRU5PTUVNOwogCWlmICghbmV3aW5mbykKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggNjE4OWRjMC4uNGNiYjEyOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogCS5hdHRycyAgPSBuZXRzdGF0X2F0dHJzLAogfTsKIAotI2lmZGVmIFdJUkVMRVNTX0VYVAorI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKIC8qIGhlbHBlciBmdW5jdGlvbiB0aGF0IGRvZXMgYWxsIHRoZSBsb2NraW5nIGV0YyBmb3Igd2lyZWxlc3Mgc3RhdHMgKi8KIHN0YXRpYyBzc2l6ZV90IHdpcmVsZXNzX3Nob3coc3RydWN0IGRldmljZSAqZCwgY2hhciAqYnVmLAogCQkJICAgICBzc2l6ZV90ICgqZm9ybWF0KShjb25zdCBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqLApAQCAtNDczLDcgKzQ3Myw3IEBACiAJaWYgKG5ldC0+Z2V0X3N0YXRzKQogCQkqZ3JvdXBzKysgPSAmbmV0c3RhdF9ncm91cDsKIAotI2lmZGVmIFdJUkVMRVNTX0VYVAorI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKIAlpZiAobmV0LT53aXJlbGVzc19oYW5kbGVycyAmJiBuZXQtPndpcmVsZXNzX2hhbmRsZXJzLT5nZXRfd2lyZWxlc3Nfc3RhdHMpCiAJCSpncm91cHMrKyA9ICZ3aXJlbGVzc19ncm91cDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggYzU1OTQ5ZS4uMDI5MmQ2MyAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC01MDIsOSArNTAyLDYgQEAKIAkJaWYgKGhvc3RfZW5jcnlwdCkKIAkJCWllZWU4MDIxMV9lbmNyeXB0X2ZyYWdtZW50KGllZWUsIHNrYl9mcmFnLCBoZHJfbGVuKTsKIAkJZWxzZSBpZiAoaG9zdF9idWlsZF9pdikgewotCQkJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKLQotCQkJY3J5cHQgPSBpZWVlLT5jcnlwdFtpZWVlLT50eF9rZXlpZHhdOwogCQkJYXRvbWljX2luYygmY3J5cHQtPnJlZmNudCk7CiAJCQlpZiAoY3J5cHQtPm9wcy0+YnVpbGRfaXYpCiAJCQkJY3J5cHQtPm9wcy0+YnVpbGRfaXYoc2tiX2ZyYWcsIGhkcl9sZW4sCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCmluZGV4IDRmOGMzZWYuLmU5Y2RjNjYgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCkBAIC0yNjUsMTcgKzI2NSwxMCBAQAogCS8qIENoYW5nZSB0aGUgZGVmYXVsdCB0eHJhdGUgdG8gdGhlIGhpZ2hlc3QgcG9zc2libGUgdmFsdWUuCiAJICogVGhlIHR4cmF0ZSBtYWNoaW5lIHdpbGwgbG93ZXIgaXQsIGlmIGl0IGlzIHRvbyBoaWdoLgogCSAqLwotCS8qIEZJWE1FOiBXZSBkb24ndCBjb3JyZWN0bHkgaGFuZGxlIGJhY2tpbmcgZG93biB0byBsb3dlcgotCSAgIHJhdGVzLCBzbyA4MDEuMTFnIGRldmljZXMgc3RhcnQgb2ZmIGF0IDExTSBmb3Igbm93LiBQZW9wbGUKLQkgICBjYW4gbWFudWFsbHkgY2hhbmdlIGl0IGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8sIGJ1dCAxMU0gaXMKLQkgICBtb3JlIHJlbGlhYmxlLiBOb3RlIHNpbWlsYXIgbG9naWMgaW4KLQkgICBpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9yYXRlKCkgKi8KLQlpZiAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTikgeworCWlmIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikKKwkJdHhyYXRlcy0+dXNlcl9yYXRlID0gSUVFRTgwMjExX09GRE1fUkFURV8yNE1COworCWVsc2UKIAkJdHhyYXRlcy0+dXNlcl9yYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzExTUI7Ci0JfSBlbHNlIGlmIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgewotCQl0eHJhdGVzLT51c2VyX3JhdGUgPSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUI7Ci0JfSBlbHNlCi0JCWFzc2VydCgwKTsKIAogCXR4cmF0ZXMtPmRlZmF1bHRfcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7CiAJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFQ7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfd3guYwppbmRleCBjMzA2ZDUyLi5mMTM5MzdiIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMKQEAgLTE3NywxNSArMTc3LDEwIEBACiAJaW50IGVyciA9IC1FSU5WQUw7CiAKIAlpZiAoaW5fcmF0ZSA9PSAtMSkgewotCQkvKiBGSVhNRTogV2UgZG9uJ3QgY29ycmVjdGx5IGhhbmRsZSBiYWNraW5nIGRvd24gdG8gbG93ZXIKLQkJICAgcmF0ZXMsIHNvIDgwMS4xMWcgZGV2aWNlcyBzdGFydCBvZmYgYXQgMTFNIGZvciBub3cuIFBlb3BsZQotCQkgICBjYW4gbWFudWFsbHkgY2hhbmdlIGl0IGlmIHRoZXkgcmVhbGx5IG5lZWQgdG8sIGJ1dCAxMU0gaXMKLQkJICAgbW9yZSByZWxpYWJsZS4gTm90ZSBzaW1pbGFyIGxvZ2ljIGluCi0JCSAgIGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X3JhdGUoKSAqLwotCQlpZiAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTikKLQkJCWluX3JhdGUgPSAxMTAwMDAwMDsKKwkJaWYgKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKQorCQkJaW5fcmF0ZSA9IDI0MDAwMDAwOwogCQllbHNlCi0JCQlpbl9yYXRlID0gNTQwMDAwMDA7CisJCQlpbl9yYXRlID0gMTEwMDAwMDA7CiAJfQogCiAJc3dpdGNoIChpbl9yYXRlKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCA1MDNlNzA1Li45MWYzYTVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCisrKyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTksNyArOSw3IEBACiAJICBpbnRlbmQgdG8gcGFydGljaXBhdGUgaW4gdGhlIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wCiAJICBvZiB0aGUgSW50ZXJuZXQgd2hpY2ggY2FycmllcyBhdWRpbyBhbmQgdmlkZW8gYnJvYWRjYXN0cy4gTW9yZQogCSAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1CT05FIGlzIG9uIHRoZSBXV1cgYXQKLQkgIDxodHRwOi8vd3d3LWl0Zy5sYmwuZ292L21ib25lLz4uIEluZm9ybWF0aW9uIGFib3V0IHRoZSBtdWx0aWNhc3QKKwkgIDxodHRwOi8vd3d3LnNhdmV0ei5jb20vbWJvbmUvPi4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIG11bHRpY2FzdAogCSAgY2FwYWJpbGl0aWVzIG9mIHRoZSB2YXJpb3VzIG5ldHdvcmsgY2FyZHMgaXMgY29udGFpbmVkIGluCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXVsdGljYXN0LnR4dD4uIEZvciBtb3N0IHBlb3BsZSwgaXQncwogCSAgc2FmZSB0byBzYXkgTi4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jb25nLmMgYi9uZXQvaXB2NC90Y3BfY29uZy5jCmluZGV4IGMxYjM0ZjEuLjVjOGNhZjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9jb25nLmMKKysrIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwpAQCAtMjksNyArMjksNyBAQAogfQogCiAvKgotICogQXR0YWNoIG5ldyBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3J0aGltIHRvIHRoZSBsaXN0CisgKiBBdHRhY2ggbmV3IGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0gdG8gdGhlIGxpc3QKICAqIG9mIGF2YWlsYWJsZSBvcHRpb25zLgogICovCiBpbnQgdGNwX3JlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSkKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCAwNzc4YzU0Li45NTY2ZTU3IDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC0xMTk0LDYgKzExOTQsNyBAQAogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sxLCAqc29jazI7CiAJaW50IGZkMSwgZmQyLCBlcnI7CisJc3RydWN0IGZpbGUgKm5ld2ZpbGUxLCAqbmV3ZmlsZTI7CiAKIAkvKgogCSAqIE9idGFpbiB0aGUgZmlyc3Qgc29ja2V0IGFuZCBjaGVjayBpZiB0aGUgdW5kZXJseWluZyBwcm90b2NvbApAQCAtMTIxMiwxOCArMTIxMywzNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9yZWxlYXNlX2JvdGg7CiAKLQlmZDEgPSBmZDIgPSAtMTsKLQotCWVyciA9IHNvY2tfbWFwX2ZkKHNvY2sxKTsKLQlpZiAoZXJyIDwgMCkKKwlmZDEgPSBzb2NrX2FsbG9jX2ZkKCZuZXdmaWxlMSk7CisJaWYgKHVubGlrZWx5KGZkMSA8IDApKQogCQlnb3RvIG91dF9yZWxlYXNlX2JvdGg7Ci0JZmQxID0gZXJyOwogCi0JZXJyID0gc29ja19tYXBfZmQoc29jazIpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dF9jbG9zZV8xOwotCWZkMiA9IGVycjsKKwlmZDIgPSBzb2NrX2FsbG9jX2ZkKCZuZXdmaWxlMik7CisJaWYgKHVubGlrZWx5KGZkMiA8IDApKSB7CisJCXB1dF9maWxwKG5ld2ZpbGUxKTsKKwkJcHV0X3VudXNlZF9mZChmZDEpOworCQlnb3RvIG91dF9yZWxlYXNlX2JvdGg7CisJfQogCisJZXJyID0gc29ja19hdHRhY2hfZmQoc29jazEsIG5ld2ZpbGUxKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKKwkJZ290byBvdXRfZmQyOworCX0KKworCWVyciA9IHNvY2tfYXR0YWNoX2ZkKHNvY2syLCBuZXdmaWxlMik7CisJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJCWZwdXQobmV3ZmlsZTEpOworCQlnb3RvIG91dF9mZDE7CisJfQorCisJZXJyID0gYXVkaXRfZmRfcGFpcihmZDEsIGZkMik7CisJaWYgKGVyciA8IDApIHsKKwkJZnB1dChuZXdmaWxlMSk7CisJCWZwdXQobmV3ZmlsZTIpOworCQlnb3RvIG91dF9mZDsKKwl9CisKKwlmZF9pbnN0YWxsKGZkMSwgbmV3ZmlsZTEpOworCWZkX2luc3RhbGwoZmQyLCBuZXdmaWxlMik7CiAJLyogZmQxIGFuZCBmZDIgbWF5IGJlIGFscmVhZHkgYW5vdGhlciBkZXNjcmlwdG9ycy4KIAkgKiBOb3Qga2VybmVsIHByb2JsZW0uCiAJICovCkBAIC0xMjM4LDE3ICsxMjU4LDIzIEBACiAJc3lzX2Nsb3NlKGZkMSk7CiAJcmV0dXJuIGVycjsKIAotb3V0X2Nsb3NlXzE6Ci0Jc29ja19yZWxlYXNlKHNvY2syKTsKLQlzeXNfY2xvc2UoZmQxKTsKLQlyZXR1cm4gZXJyOwotCiBvdXRfcmVsZWFzZV9ib3RoOgogCXNvY2tfcmVsZWFzZShzb2NrMik7CiBvdXRfcmVsZWFzZV8xOgogCXNvY2tfcmVsZWFzZShzb2NrMSk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKKworb3V0X2ZkMjoKKwlwdXRfZmlscChuZXdmaWxlMSk7CisJc29ja19yZWxlYXNlKHNvY2sxKTsKK291dF9mZDE6CisJcHV0X2ZpbHAobmV3ZmlsZTIpOworCXNvY2tfcmVsZWFzZShzb2NrMik7CitvdXRfZmQ6CisJcHV0X3VudXNlZF9mZChmZDEpOworCXB1dF91bnVzZWRfZmQoZmQyKTsKKwlnb3RvIG91dDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IDRhYjEzNzQuLjgzNTM4MjkgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjLmMKKysrIGIvbmV0L3N1bnJwYy9zdmMuYwpAQCAtMTE1LDcgKzExNSw3IEBACiBzdGF0aWMgaW50CiBzdmNfcG9vbF9tYXBfaW5pdF9wZXJjcHUoc3RydWN0IHN2Y19wb29sX21hcCAqbSkKIHsKLQl1bnNpZ25lZCBpbnQgbWF4cG9vbHMgPSBoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpKzE7CisJdW5zaWduZWQgaW50IG1heHBvb2xzID0gbnJfY3B1X2lkczsKIAl1bnNpZ25lZCBpbnQgcGlkeCA9IDA7CiAJdW5zaWduZWQgaW50IGNwdTsKIAlpbnQgZXJyOwpAQCAtMTQzLDcgKzE0Myw3IEBACiBzdGF0aWMgaW50CiBzdmNfcG9vbF9tYXBfaW5pdF9wZXJub2RlKHN0cnVjdCBzdmNfcG9vbF9tYXAgKm0pCiB7Ci0JdW5zaWduZWQgaW50IG1heHBvb2xzID0gaGlnaGVzdF9wb3NzaWJsZV9ub2RlX2lkKCkrMTsKKwl1bnNpZ25lZCBpbnQgbWF4cG9vbHMgPSBucl9ub2RlX2lkczsKIAl1bnNpZ25lZCBpbnQgcGlkeCA9IDA7CiAJdW5zaWduZWQgaW50IG5vZGU7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2VybmVsLWRvYyBiL3NjcmlwdHMva2VybmVsLWRvYwppbmRleCA0ZDkyOGI4Li5mYjQzYzY0IDEwMDc1NQotLS0gYS9zY3JpcHRzL2tlcm5lbC1kb2MKKysrIGIvc2NyaXB0cy9rZXJuZWwtZG9jCkBAIC00NTIsNyArNDUyLDcgQEAKICAgICBteSAlYXJncyA9ICV7JF9bMF19OwogICAgIG15ICgkcGFyYW1ldGVyKTsKIAotICAgIHByaW50ICI8aDI+Ii4kYXJnc3sndHlwZSd9LiIgIi4kYXJnc3snc3RydWN0J30uIjwvaDI+XG4iOworICAgIHByaW50ICI8aDI+Ii4kYXJnc3sndHlwZSd9LiIgIi4kYXJnc3snc3RydWN0J30uICIgLSAiIC4kYXJnc3sncHVycG9zZSd9LiI8L2gyPlxuIjsKICAgICBwcmludCAiPGI+Ii4kYXJnc3sndHlwZSd9LiIgIi4kYXJnc3snc3RydWN0J30uIjwvYj4gezxicj5cbiI7CiAgICAgZm9yZWFjaCAkcGFyYW1ldGVyIChAeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CiAJaWYgKCRwYXJhbWV0ZXIgPX4gL14jLykgewpAQCAtNDk4LDggKzQ5OCw4IEBACiAgICAgbXkgJWFyZ3MgPSAleyRfWzBdfTsKICAgICBteSAoJHBhcmFtZXRlciwgJHNlY3Rpb24pOwogICAgIG15ICRjb3VudDsKLSAgICBwcmludCAiPGgyPkZ1bmN0aW9uPC9oMj5cbiI7CiAKKyAgICBwcmludCAiPGgyPiIgLiRhcmdzeydmdW5jdGlvbid9LiIgLSAiLiRhcmdzeydwdXJwb3NlJ30uIjwvaDI+XG4iOwogICAgIHByaW50ICI8aT4iLiRhcmdzeydmdW5jdGlvbnR5cGUnfS4iPC9pPlxuIjsKICAgICBwcmludCAiPGI+Ii4kYXJnc3snZnVuY3Rpb24nfS4iPC9iPlxuIjsKICAgICBwcmludCAiKCI7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggMmFhNDc2Mi4uYzRiNTM5OCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtNjQxLDEyICs2NDEsMjAgQEAKIAlpZiAoZjEgJiYgZjIpCiAJCXJldHVybiAxOwogCi0JLyogV2hpdGVsaXN0IGFsbCByZWZlcmVuY2VzIGZyb20gLnBjaV9maXh1cCBzZWN0aW9uIGlmIHZtbGludXggKi8KKwkvKiBXaGl0ZWxpc3QgYWxsIHJlZmVyZW5jZXMgZnJvbSAucGNpX2ZpeHVwIHNlY3Rpb24gaWYgdm1saW51eAorCSAqIFdoaXRlbGlzdCBhbGwgcmVmZXJlY2VzIGZyb20gLnRleHQuaGVhZCB0byAuaW5pdC5kYXRhIGlmIHZtbGludXgKKwkgKiBXaGl0ZWxpc3QgYWxsIHJlZmVyZWNlcyBmcm9tIC50ZXh0LmhlYWQgdG8gLmluaXQudGV4dCBpZiB2bWxpbnV4CisJICovCiAJaWYgKGlzX3ZtbGludXgobW9kbmFtZSkpIHsKIAkJaWYgKChzdHJjbXAoZnJvbXNlYywgIi5wY2lfZml4dXAiKSA9PSAwKSAmJgogCQkgICAgKHN0cmNtcCh0b3NlYywgIi5pbml0LnRleHQiKSA9PSAwKSkKIAkJcmV0dXJuIDE7CiAKKwkJaWYgKChzdHJjbXAoZnJvbXNlYywgIi50ZXh0LmhlYWQiKSA9PSAwKSAmJgorCQkJKChzdHJjbXAodG9zZWMsICIuaW5pdC5kYXRhIikgPT0gMCkgfHwKKwkJCShzdHJjbXAodG9zZWMsICIuaW5pdC50ZXh0IikgPT0gMCkpKQorCQlyZXR1cm4gMTsKKwogCQkvKiBDaGVjayBmb3IgcGF0dGVybiAzICovCiAJCWZvciAocyA9IHBhdDNyZWZzeW07ICpzOyBzKyspCiAJCQlpZiAoc3RyY21wKHJlZnN5bW5hbWUsICpzKSA9PSAwKQpAQCAtNjc4LDYgKzY4NiwzMCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpc19hcm1fbWFwcGluZ19zeW1ib2woY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiBzdHJbMF0gPT0gJyQnICYmIHN0cmNocigiYXRkIiwgc3RyWzFdKQorCSAgICAgICAmJiAoc3RyWzJdID09ICdcMCcgfHwgc3RyWzJdID09ICcuJyk7Cit9CisKKy8qCisgKiBJZiB0aGVyZSdzIG5vIG5hbWUgdGhlcmUsIGlnbm9yZSBpdDsgbGlrZXdpc2UsIGlnbm9yZSBpdCBpZiBpdCdzCisgKiBvbmUgb2YgdGhlIG1hZ2ljIHN5bWJvbHMgZW1pdHRlZCB1c2VkIGJ5IGN1cnJlbnQgQVJNIHRvb2xzLgorICoKKyAqIE90aGVyd2lzZSBpZiBmaW5kX3N5bWJvbHNfYmV0d2VlbigpIHJldHVybnMgdGhvc2Ugc3ltYm9scywgdGhleSdsbAorICogZmFpbCB0aGUgd2hpdGVsaXN0IHRlc3RzIGFuZCBjYXVzZSBsb3RzIG9mIGZhbHNlIGFsYXJtcyAuLi4gZml4YWJsZQorICogb25seSBieSBtZXJnaW5nIF9fZXhpdCBhbmQgX19pbml0IHNlY3Rpb25zIGludG8gX190ZXh0LCBibG9hdGluZworICogdGhlIGtlcm5lbCAod2hpY2ggaXMgZXNwZWNpYWxseSBldmlsIG9uIGVtYmVkZGVkIHBsYXRmb3JtcykuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3ZhbGlkX25hbWUoc3RydWN0IGVsZl9pbmZvICplbGYsIEVsZl9TeW0gKnN5bSkKK3sKKwljb25zdCBjaGFyICpuYW1lID0gZWxmLT5zdHJ0YWIgKyBzeW0tPnN0X25hbWU7CisKKwlpZiAoIW5hbWUgfHwgIXN0cmxlbihuYW1lKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFpc19hcm1fbWFwcGluZ19zeW1ib2wobmFtZSk7Cit9CisKIC8qCiAgKiBGaW5kIHN5bWJvbHMgYmVmb3JlIG9yIGVxdWFsIGFkZHIgYW5kIGFmdGVyIGFkZHIgLSBpbiB0aGUgc2VjdGlvbiBzZWMuCiAgKiBJZiB3ZSBmaW5kIHR3byBzeW1ib2xzIHdpdGggZXF1YWwgb2Zmc2V0IHByZWZlciBvbmUgd2l0aCBhIHZhbGlkIG5hbWUuCkBAIC03MDYsMTYgKzczOCwxNSBAQAogCQlzeW1zZWMgPSBzZWNzdHJpbmdzICsgZWxmLT5zZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX25hbWU7CiAJCWlmIChzdHJjbXAoc3ltc2VjLCBzZWMpICE9IDApCiAJCQljb250aW51ZTsKKwkJaWYgKCFpc192YWxpZF9uYW1lKGVsZiwgc3ltKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoc3ltLT5zdF92YWx1ZSA8PSBhZGRyKSB7CiAJCQlpZiAoKGFkZHIgLSBzeW0tPnN0X3ZhbHVlKSA8IGJlZm9yZWRpZmYpIHsKIAkJCQliZWZvcmVkaWZmID0gYWRkciAtIHN5bS0+c3RfdmFsdWU7CiAJCQkJKmJlZm9yZSA9IHN5bTsKIAkJCX0KIAkJCWVsc2UgaWYgKChhZGRyIC0gc3ltLT5zdF92YWx1ZSkgPT0gYmVmb3JlZGlmZikgewotCQkJCS8qIGVxdWFsIG9mZnNldCwgdmFsaWQgbmFtZT8gKi8KLQkJCQljb25zdCBjaGFyICpuYW1lID0gZWxmLT5zdHJ0YWIgKyBzeW0tPnN0X25hbWU7Ci0JCQkJaWYgKG5hbWUgJiYgc3RybGVuKG5hbWUpKQotCQkJCQkqYmVmb3JlID0gc3ltOworCQkJCSpiZWZvcmUgPSBzeW07CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAtNzI1LDEwICs3NTYsNyBAQAogCQkJCSphZnRlciA9IHN5bTsKIAkJCX0KIAkJCWVsc2UgaWYgKChzeW0tPnN0X3ZhbHVlIC0gYWRkcikgPT0gYWZ0ZXJkaWZmKSB7Ci0JCQkJLyogZXF1YWwgb2Zmc2V0LCB2YWxpZCBuYW1lPyAqLwotCQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBlbGYtPnN0cnRhYiArIHN5bS0+c3RfbmFtZTsKLQkJCQlpZiAobmFtZSAmJiBzdHJsZW4obmFtZSkpCi0JCQkJCSphZnRlciA9IHN5bTsKKwkJCQkqYWZ0ZXIgPSBzeW07CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5jIGIvc291bmQvYXJtL2FhY2kuYwppbmRleCA1MzY3NWNmLi5iOWVjYTlmIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5jCisrKyBiL3NvdW5kL2FybS9hYWNpLmMKQEAgLTY1LDEwICs2NSwxMiBAQAogICogIFNJMVR4RW4sIFNJMlR4RW4gYW5kIFNJMTJUeEVuIGJpdHMgYXJlIHNldCBpbiB0aGUgQUFDSV9NQUlOQ1IKICAqICByZWdpc3Rlci4KICAqLwotc3RhdGljIHZvaWQgYWFjaV9hYzk3X3dyaXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpCitzdGF0aWMgdm9pZCBhYWNpX2FjOTdfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCQkgICAgdW5zaWduZWQgc2hvcnQgdmFsKQogewogCXN0cnVjdCBhYWNpICphYWNpID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOwogCXUzMiB2OworCWludCB0aW1lb3V0ID0gNTAwMDsKIAogCWlmIChhYzk3LT5udW0gPj0gNCkKIAkJcmV0dXJuOwpAQCAtODksNyArOTEsMTEgQEAKIAkgKi8KIAlkbyB7CiAJCXYgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTEZSKTsKLQl9IHdoaWxlICh2ICYgKFNMRlJfMVRYQnxTTEZSXzJUWEIpKTsKKwl9IHdoaWxlICgodiAmIChTTEZSXzFUWEJ8U0xGUl8yVFhCKSkgJiYgdGltZW91dC0tKTsKKworCWlmICghdGltZW91dCkKKwkJZGV2X2VycigmYWFjaS0+ZGV2LT5kZXYsCisJCQkidGltZW91dCB3YWl0aW5nIGZvciB3cml0ZSB0byBjb21wbGV0ZVxuIik7CiAKIAltdXRleF91bmxvY2soJmFhY2ktPmFjOTdfc2VtKTsKIH0KQEAgLTEwMSw2ICsxMDcsOCBAQAogewogCXN0cnVjdCBhYWNpICphYWNpID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOwogCXUzMiB2OworCWludCB0aW1lb3V0ID0gNTAwMDsKKwlpbnQgcmV0cmllcyA9IDEwOwogCiAJaWYgKGFjOTctPm51bSA+PSA0KQogCQlyZXR1cm4gfjA7CkBAIC0xMTksNyArMTI3LDEzIEBACiAJICovCiAJZG8gewogCQl2ID0gcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfU0xGUik7Ci0JfSB3aGlsZSAodiAmIFNMRlJfMVRYQik7CisJfSB3aGlsZSAoKHYgJiBTTEZSXzFUWEIpICYmIHRpbWVvdXQtLSk7CisKKwlpZiAoIXRpbWVvdXQpIHsKKwkJZGV2X2VycigmYWFjaS0+ZGV2LT5kZXYsICJ0aW1lb3V0IG9uIHNsb3QgMSBUWCBidXN5XG4iKTsKKwkJdiA9IH4wOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKgogCSAqIEdpdmUgdGhlIEFDJzk3IGNvZGVjIG1vcmUgdGhhbiBlbm91Z2ggdGltZQpAQCAtMTMwLDIxICsxNDQsMzUgQEAKIAkvKgogCSAqIFdhaXQgZm9yIHNsb3QgMiB0byBpbmRpY2F0ZSBkYXRhLgogCSAqLworCXRpbWVvdXQgPSA1MDAwOwogCWRvIHsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCXYgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTEZSKSAmIChTTEZSXzFSWFZ8U0xGUl8yUlhWKTsKLQl9IHdoaWxlICh2ICE9IChTTEZSXzFSWFZ8U0xGUl8yUlhWKSk7CisJfSB3aGlsZSAoKHYgIT0gKFNMRlJfMVJYVnxTTEZSXzJSWFYpKSAmJiB0aW1lb3V0LS0pOwogCi0JdiA9IHJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX1NMMVJYKSA+PiAxMjsKLQlpZiAodiA9PSByZWcpIHsKLQkJdiA9IHJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX1NMMlJYKSA+PiA0OwotCX0gZWxzZSB7Ci0JCWRldl9lcnIoJmFhY2ktPmRldi0+ZGV2LAotCQkJIndyb25nIGFjOTcgcmVnaXN0ZXIgcmVhZCBiYWNrICgleCAhPSAleClcbiIsCi0JCQl2LCByZWcpOworCWlmICghdGltZW91dCkgeworCQlkZXZfZXJyKCZhYWNpLT5kZXYtPmRldiwgInRpbWVvdXQgb24gUlggdmFsaWRcbiIpOwogCQl2ID0gfjA7CisJCWdvdG8gb3V0OwogCX0KIAorCWRvIHsKKwkJdiA9IHJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX1NMMVJYKSA+PiAxMjsKKwkJaWYgKHYgPT0gcmVnKSB7CisJCQl2ID0gcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfU0wyUlgpID4+IDQ7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICgtLXJldHJpZXMpIHsKKwkJCWRldl93YXJuKCZhYWNpLT5kZXYtPmRldiwKKwkJCQkgImFjOTcgcmVhZCBiYWNrIGZhaWwuICByZXRyeVxuIik7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKCZhYWNpLT5kZXYtPmRldiwKKwkJCQkid3JvbmcgYWM5NyByZWdpc3RlciByZWFkIGJhY2sgKCV4ICE9ICV4KVxuIiwKKwkJCQl2LCByZWcpOworCQkJdiA9IH4wOworCQl9CisJfSB3aGlsZSAocmV0cmllcyk7Cisgb3V0OgogCW11dGV4X3VubG9jaygmYWFjaS0+YWM5N19zZW0pOwogCXJldHVybiB2OwogfQpAQCAtMTY0LDEwICsxOTIsNzAgQEAKIC8qCiAgKiBJbnRlcnJ1cHQgc3VwcG9ydC4KICAqLwotc3RhdGljIHZvaWQgYWFjaV9maWZvX2lycShzdHJ1Y3QgYWFjaSAqYWFjaSwgdTMyIG1hc2spCitzdGF0aWMgdm9pZCBhYWNpX2ZpZm9faXJxKHN0cnVjdCBhYWNpICphYWNpLCBpbnQgY2hhbm5lbCwgdTMyIG1hc2spCiB7CisJaWYgKG1hc2sgJiBJU1JfT1JJTlRSKSB7CisJCWRldl93YXJuKCZhYWNpLT5kZXYtPmRldiwgIlJYIG92ZXJydW4gb24gY2hhbiAlZFxuIiwgY2hhbm5lbCk7CisJCXdyaXRlbChJQ0xSX1JYT0VDMSA8PCBjaGFubmVsLCBhYWNpLT5iYXNlICsgQUFDSV9JTlRDTFIpOworCX0KKworCWlmIChtYXNrICYgSVNSX1JYVE9JTlRSKSB7CisJCWRldl93YXJuKCZhYWNpLT5kZXYtPmRldiwgIlJYIHRpbWVvdXQgb24gY2hhbiAlZFxuIiwgY2hhbm5lbCk7CisJCXdyaXRlbChJQ0xSX1JYVE9GRUMxIDw8IGNoYW5uZWwsIGFhY2ktPmJhc2UgKyBBQUNJX0lOVENMUik7CisJfQorCisJaWYgKG1hc2sgJiBJU1JfUlhJTlRSKSB7CisJCXN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4gPSAmYWFjaS0+Y2FwdHVyZTsKKwkJdm9pZCAqcHRyOworCisJCWlmICghYWFjaXJ1bi0+c3Vic3RyZWFtIHx8ICFhYWNpcnVuLT5zdGFydCkgeworCQkJZGV2X3dhcm4oJmFhY2ktPmRldi0+ZGV2LCAiUlggaW50ZXJydXB0Pz8/Iik7CisJCQl3cml0ZWwoMCwgYWFjaXJ1bi0+YmFzZSArIEFBQ0lfSUUpOworCQkJcmV0dXJuOworCQl9CisJCXB0ciA9IGFhY2lydW4tPnB0cjsKKworCQlkbyB7CisJCQl1bnNpZ25lZCBpbnQgbGVuID0gYWFjaXJ1bi0+Zmlmb3N6OworCQkJdTMyIHZhbDsKKworCQkJaWYgKGFhY2lydW4tPmJ5dGVzIDw9IDApIHsKKwkJCQlhYWNpcnVuLT5ieXRlcyArPSBhYWNpcnVuLT5wZXJpb2Q7CisJCQkJYWFjaXJ1bi0+cHRyID0gcHRyOworCQkJCXNwaW5fdW5sb2NrKCZhYWNpLT5sb2NrKTsKKwkJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGFhY2lydW4tPnN1YnN0cmVhbSk7CisJCQkJc3Bpbl9sb2NrKCZhYWNpLT5sb2NrKTsKKwkJCX0KKwkJCWlmICghKGFhY2lydW4tPmNyICYgQ1JfRU4pKQorCQkJCWJyZWFrOworCisJCQl2YWwgPSByZWFkbChhYWNpcnVuLT5iYXNlICsgQUFDSV9TUik7CisJCQlpZiAoISh2YWwgJiBTUl9SWEhGKSkKKwkJCQlicmVhazsKKwkJCWlmICghKHZhbCAmIFNSX1JYRkYpKQorCQkJCWxlbiA+Pj0gMTsKKworCQkJYWFjaXJ1bi0+Ynl0ZXMgLT0gbGVuOworCisJCQkvKiByZWFkaW5nIDE2IGJ5dGVzIGF0IGEgdGltZSAqLworCQkJZm9yKCA7IGxlbiA+IDA7IGxlbiAtPSAxNikgeworCQkJCWFzbSgKKwkJCQkJImxkbWlhCSUxLCB7cjAsIHIxLCByMiwgcjN9XG5cdCIKKwkJCQkJInN0bWlhCSUwISwge3IwLCByMSwgcjIsIHIzfSIKKwkJCQkJOiAiK3IiIChwdHIpCisJCQkJCTogInIiIChhYWNpcnVuLT5maWZvKQorCQkJCQk6ICJyMCIsICJyMSIsICJyMiIsICJyMyIsICJjYyIpOworCisJCQkJaWYgKHB0ciA+PSBhYWNpcnVuLT5lbmQpCisJCQkJCXB0ciA9IGFhY2lydW4tPnN0YXJ0OworCQkJfQorCQl9IHdoaWxlKDEpOworCQlhYWNpcnVuLT5wdHIgPSBwdHI7CisJfQorCiAJaWYgKG1hc2sgJiBJU1JfVVJJTlRSKSB7Ci0JCXdyaXRlbChJQ0xSX1RYVUVDMSwgYWFjaS0+YmFzZSArIEFBQ0lfSU5UQ0xSKTsKKwkJZGV2X2RiZygmYWFjaS0+ZGV2LT5kZXYsICJUWCB1bmRlcnJ1biBvbiBjaGFuICVkXG4iLCBjaGFubmVsKTsKKwkJd3JpdGVsKElDTFJfVFhVRUMxIDw8IGNoYW5uZWwsIGFhY2ktPmJhc2UgKyBBQUNJX0lOVENMUik7CiAJfQogCiAJaWYgKG1hc2sgJiBJU1JfVFhJTlRSKSB7CkBAIC0xOTIsNyArMjgwLDcgQEAKIAkJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGFhY2lydW4tPnN1YnN0cmVhbSk7CiAJCQkJc3Bpbl9sb2NrKCZhYWNpLT5sb2NrKTsKIAkJCX0KLQkJCWlmICghKGFhY2lydW4tPmNyICYgVFhDUl9UWEVOKSkKKwkJCWlmICghKGFhY2lydW4tPmNyICYgQ1JfRU4pKQogCQkJCWJyZWFrOwogCiAJCQl2YWwgPSByZWFkbChhYWNpcnVuLT5iYXNlICsgQUFDSV9TUik7CkBAIC0yMzMsNyArMzIxLDcgQEAKIAkJdTMyIG0gPSBtYXNrOwogCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrLCBtID4+PSA3KSB7CiAJCQlpZiAobSAmIDB4N2YpIHsKLQkJCQlhYWNpX2ZpZm9faXJxKGFhY2ksIG0pOworCQkJCWFhY2lfZmlmb19pcnEoYWFjaSwgaSwgbSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0zMzAsOCArNDE4LDkgQEAKIAkucGVyaW9kc19tYXgJCT0gUEFHRV9TSVpFIC8gMTYsCiB9OwogCi1zdGF0aWMgaW50IGFhY2lfcGNtX29wZW4oc3RydWN0IGFhY2kgKmFhY2ksIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJIHN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4pCitzdGF0aWMgaW50IF9fYWFjaV9wY21fb3BlbihzdHJ1Y3QgYWFjaSAqYWFjaSwKKwkJCSAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgc3RydWN0IGFhY2lfcnVudGltZSAqYWFjaXJ1bikKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWludCByZXQ7CkBAIC0zODAsNyArNDY5LDcgQEAKIAlzdHJ1Y3QgYWFjaSAqYWFjaSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhYWNpX3J1bnRpbWUgKmFhY2lydW4gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCVdBUk5fT04oYWFjaXJ1bi0+Y3IgJiBUWENSX1RYRU4pOworCVdBUk5fT04oYWFjaXJ1bi0+Y3IgJiBDUl9FTik7CiAKIAlhYWNpcnVuLT5zdWJzdHJlYW0gPSBOVUxMOwogCWZyZWVfaXJxKGFhY2ktPmRldi0+aXJxWzBdLCBhYWNpKTsKQEAgLTM5NSw3ICs0ODQsNyBAQAogCS8qCiAJICogVGhpcyBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCB0aGUgZGV2aWNlIGVuYWJsZWQuCiAJICovCi0JV0FSTl9PTihhYWNpcnVuLT5jciAmIFRYQ1JfVFhFTik7CisJV0FSTl9PTihhYWNpcnVuLT5jciAmIENSX0VOKTsKIAogCWlmIChhYWNpcnVuLT5wY21fb3BlbikKIAkJc25kX2FjOTdfcGNtX2Nsb3NlKGFhY2lydW4tPnBjbSk7CkBAIC00MjIsOSArNTExLDE1IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gc25kX2FjOTdfcGNtX29wZW4oYWFjaXJ1bi0+cGNtLCBwYXJhbXNfcmF0ZShwYXJhbXMpLAotCQkJCXBhcmFtc19jaGFubmVscyhwYXJhbXMpLAotCQkJCWFhY2lydW4tPnBjbS0+clswXS5zbG90cyk7CisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWVyciA9IHNuZF9hYzk3X3BjbV9vcGVuKGFhY2lydW4tPnBjbSwgcGFyYW1zX3JhdGUocGFyYW1zKSwKKwkJCQkJcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyksCisJCQkJCWFhY2lydW4tPnBjbS0+clswXS5zbG90cyk7CisJZWxzZQorCQllcnIgPSBzbmRfYWM5N19wY21fb3BlbihhYWNpcnVuLT5wY20sIHBhcmFtc19yYXRlKHBhcmFtcyksCisJCQkJCXBhcmFtc19jaGFubmVscyhwYXJhbXMpLAorCQkJCQlhYWNpcnVuLT5wY20tPnJbMV0uc2xvdHMpOworCiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTQ2Nyw5ICs1NjIsOSBAQAogICogUGxheWJhY2sgc3BlY2lmaWMgQUxTQSBzdHVmZgogICovCiBzdGF0aWMgY29uc3QgdTMyIGNoYW5uZWxzX3RvX3R4bWFza1tdID0gewotCVsyXSA9IFRYQ1JfVFgzIHwgVFhDUl9UWDQsCi0JWzRdID0gVFhDUl9UWDMgfCBUWENSX1RYNCB8IFRYQ1JfVFg3IHwgVFhDUl9UWDgsCi0JWzZdID0gVFhDUl9UWDMgfCBUWENSX1RYNCB8IFRYQ1JfVFg3IHwgVFhDUl9UWDggfCBUWENSX1RYNiB8IFRYQ1JfVFg5LAorCVsyXSA9IENSX1NMMyB8IENSX1NMNCwKKwlbNF0gPSBDUl9TTDMgfCBDUl9TTDQgfCBDUl9TTDcgfCBDUl9TTDgsCisJWzZdID0gQ1JfU0wzIHwgQ1JfU0w0IHwgQ1JfU0w3IHwgQ1JfU0w4IHwgQ1JfU0w2IHwgQ1JfU0w5LAogfTsKIAogLyoKQEAgLTUwNCw3ICs1OTksNyBAQAogCQkJCSBjaGFuX21hc2spOwogfQogCi1zdGF0aWMgaW50IGFhY2lfcGNtX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IGFhY2lfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IGFhY2kgKmFhY2kgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0OwpAQCAtNTE5LDcgKzYxNCwxMiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gYWFjaV9wY21fb3BlbihhYWNpLCBzdWJzdHJlYW0sICZhYWNpLT5wbGF5YmFjayk7CisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJcmV0ID0gX19hYWNpX3BjbV9vcGVuKGFhY2ksIHN1YnN0cmVhbSwgJmFhY2ktPnBsYXliYWNrKTsKKwl9IGVsc2UgeworCQlyZXQgPSBfX2FhY2lfcGNtX29wZW4oYWFjaSwgc3Vic3RyZWFtLCAmYWFjaS0+Y2FwdHVyZSk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWFjaV9wY21fcGxheWJhY2tfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApAQCAtNTQwLDExICs2NDAsMTEgQEAKIAkgKiBGSVhNRTogZG91YmxlIHJhdGUgc2xvdHM/CiAJICovCiAJaWYgKHJldCA+PSAwKSB7Ci0JCWFhY2lydW4tPmNyID0gVFhDUl9GRU4gfCBUWENSX0NPTVBBQ1QgfCBUWENSX1RTWjE2OworCQlhYWNpcnVuLT5jciA9IENSX0ZFTiB8IENSX0NPTVBBQ1QgfCBDUl9TWjE2OwogCQlhYWNpcnVuLT5jciB8PSBjaGFubmVsc190b190eG1hc2tbY2hhbm5lbHNdOwogCiAJCWFhY2lydW4tPmZpZm9zegk9IGFhY2ktPmZpZm9zaXplICogNDsKLQkJaWYgKGFhY2lydW4tPmNyICYgVFhDUl9DT01QQUNUKQorCQlpZiAoYWFjaXJ1bi0+Y3IgJiBDUl9DT01QQUNUKQogCQkJYWFjaXJ1bi0+Zmlmb3N6ID4+PSAxOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNTU3LDcgKzY1Nyw3IEBACiAJaWUgPSByZWFkbChhYWNpcnVuLT5iYXNlICsgQUFDSV9JRSk7CiAJaWUgJj0gfihJRV9VUklFfElFX1RYSUUpOwogCXdyaXRlbChpZSwgYWFjaXJ1bi0+YmFzZSArIEFBQ0lfSUUpOwotCWFhY2lydW4tPmNyICY9IH5UWENSX1RYRU47CisJYWFjaXJ1bi0+Y3IgJj0gfkNSX0VOOwogCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4pOwogCXdyaXRlbChhYWNpcnVuLT5jciwgYWFjaXJ1bi0+YmFzZSArIEFBQ0lfVFhDUik7CiB9CkBAIC01NjcsNyArNjY3LDcgQEAKIAl1MzIgaWU7CiAKIAlhYWNpX2NoYW5fd2FpdF9yZWFkeShhYWNpcnVuKTsKLQlhYWNpcnVuLT5jciB8PSBUWENSX1RYRU47CisJYWFjaXJ1bi0+Y3IgfD0gQ1JfRU47CiAKIAlpZSA9IHJlYWRsKGFhY2lydW4tPmJhc2UgKyBBQUNJX0lFKTsKIAlpZSB8PSBJRV9VUklFIHwgSUVfVFhJRTsKQEAgLTYxNSw3ICs3MTUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGFhY2lfcGxheWJhY2tfb3BzID0gewotCS5vcGVuCQk9IGFhY2lfcGNtX3BsYXliYWNrX29wZW4sCisJLm9wZW4JCT0gYWFjaV9wY21fb3BlbiwKIAkuY2xvc2UJCT0gYWFjaV9wY21fY2xvc2UsCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMJPSBhYWNpX3BjbV9wbGF5YmFja19od19wYXJhbXMsCkBAIC02MjYsNyArNzI2LDEzMyBAQAogCS5tbWFwCQk9IGFhY2lfcGNtX21tYXAsCiB9OwogCitzdGF0aWMgaW50IGFhY2lfcGNtX2NhcHR1cmVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBhYWNpICphYWNpID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFhY2lfcnVudGltZSAqYWFjaXJ1biA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CiAKKwlyZXQgPSBhYWNpX3BjbV9od19wYXJhbXMoc3Vic3RyZWFtLCBhYWNpcnVuLCBwYXJhbXMpOworCisJaWYgKHJldCA+PSAwKSB7CisJCWFhY2lydW4tPmNyID0gQ1JfRkVOIHwgQ1JfQ09NUEFDVCB8IENSX1NaMTY7CisKKwkJLyogTGluZSBpbiByZWNvcmQ6IHNsb3QgMyBhbmQgNCAqLworCQlhYWNpcnVuLT5jciB8PSBDUl9TTDMgfCBDUl9TTDQ7CisKKwkJYWFjaXJ1bi0+Zmlmb3N6ID0gYWFjaS0+Zmlmb3NpemUgKiA0OworCisJCWlmIChhYWNpcnVuLT5jciAmIENSX0NPTVBBQ1QpCisJCQlhYWNpcnVuLT5maWZvc3ogPj49IDE7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFhY2lfcGNtX2NhcHR1cmVfc3RvcChzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuKQoreworCXUzMiBpZTsKKworCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4pOworCisJaWUgPSByZWFkbChhYWNpcnVuLT5iYXNlICsgQUFDSV9JRSk7CisJaWUgJj0gfihJRV9PUklFIHwgSUVfUlhJRSk7CisJd3JpdGVsKGllLCBhYWNpcnVuLT5iYXNlK0FBQ0lfSUUpOworCisJYWFjaXJ1bi0+Y3IgJj0gfkNSX0VOOworCisJd3JpdGVsKGFhY2lydW4tPmNyLCBhYWNpcnVuLT5iYXNlICsgQUFDSV9SWENSKTsKK30KKworc3RhdGljIHZvaWQgYWFjaV9wY21fY2FwdHVyZV9zdGFydChzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuKQoreworCXUzMiBpZTsKKworCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4pOworCisjaWZkZWYgREVCVUcKKwkvKiBSWCBUaW1lb3V0IHZhbHVlOiBiaXRzIDI4OjE3IGluIFJYQ1IgKi8KKwlhYWNpcnVuLT5jciB8PSAweGYgPDwgMTc7CisjZW5kaWYKKworCWFhY2lydW4tPmNyIHw9IENSX0VOOworCXdyaXRlbChhYWNpcnVuLT5jciwgYWFjaXJ1bi0+YmFzZSArIEFBQ0lfUlhDUik7CisKKwlpZSA9IHJlYWRsKGFhY2lydW4tPmJhc2UgKyBBQUNJX0lFKTsKKwlpZSB8PSBJRV9PUklFIHxJRV9SWElFOyAvLyBvdmVycnVuIGFuZCByeCBpbnRlcnJ1cHQgLS0gaGFsZiBmdWxsCisJd3JpdGVsKGllLCBhYWNpcnVuLT5iYXNlICsgQUFDSV9JRSk7Cit9CisKK3N0YXRpYyBpbnQgYWFjaV9wY21fY2FwdHVyZV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBhYWNpICphYWNpID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFhY2lfcnVudGltZSAqYWFjaXJ1biA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWFjaS0+bG9jaywgZmxhZ3MpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlhYWNpX3BjbV9jYXB0dXJlX3N0YXJ0KGFhY2lydW4pOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCQlhYWNpX3BjbV9jYXB0dXJlX3N0YXJ0KGFhY2lydW4pOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJYWFjaV9wY21fY2FwdHVyZV9zdG9wKGFhY2lydW4pOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwkJYWFjaV9wY21fY2FwdHVyZV9zdG9wKGFhY2lydW4pOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhYWNpLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFhY2lfcGNtX2NhcHR1cmVfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBhYWNpICphYWNpID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwlhYWNpX3BjbV9wcmVwYXJlKHN1YnN0cmVhbSk7CisKKwkvKiBhbGxvdyBjaGFuZ2luZyBvZiBzYW1wbGUgcmF0ZSAqLworCWFhY2lfYWM5N193cml0ZShhYWNpLT5hYzk3LCBBQzk3X0VYVEVOREVEX1NUQVRVUywgMHgwMDAxKTsgLyogVlJBICovCisJYWFjaV9hYzk3X3dyaXRlKGFhY2ktPmFjOTcsIEFDOTdfUENNX0xSX0FEQ19SQVRFLCBydW50aW1lLT5yYXRlKTsKKwlhYWNpX2FjOTdfd3JpdGUoYWFjaS0+YWM5NywgQUM5N19QQ01fTUlDX0FEQ19SQVRFLCBydW50aW1lLT5yYXRlKTsKKworCS8qIFJlY29yZCBzZWxlY3Q6IE1pYzogMCwgQXV4OiAzLCBMaW5lOiA0ICovCisJYWFjaV9hYzk3X3dyaXRlKGFhY2ktPmFjOTcsIEFDOTdfUkVDX1NFTCwgMHgwNDA0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGFhY2lfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4JCT0gYWFjaV9wY21fb3BlbiwKKwkuY2xvc2UJCT0gYWFjaV9wY21fY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBhYWNpX3BjbV9jYXB0dXJlX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGFhY2lfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBhYWNpX3BjbV9jYXB0dXJlX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBhYWNpX3BjbV9jYXB0dXJlX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBhYWNpX3BjbV9wb2ludGVyLAorCS5tbWFwCQk9IGFhY2lfcGNtX21tYXAsCit9OwogCiAvKgogICogUG93ZXIgTWFuYWdlbWVudC4KQEAgLTY2Niw3ICs4OTIsNyBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgYWM5N19wY20gYWM5N19kZWZzW10gX19kZXZpbml0ZGF0YSA9IHsKLQlbMF0gPSB7CQkvKiBGcm9udCBQQ00gKi8KKwlbMF0gPSB7CS8qIEZyb250IFBDTSAqLwogCQkuZXhjbHVzaXZlID0gMSwKIAkJLnIgPSB7CiAJCQlbMF0gPSB7CkBAIC03NDAsNiArOTY2LDcgQEAKIAlyZXQgPSBzbmRfYWM5N19taXhlcihhYzk3X2J1cywgJmFjOTdfdGVtcGxhdGUsICZhYzk3KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKKwlhYWNpLT5hYzk3ID0gYWM5NzsKIAogCS8qCiAJICogRGlzYWJsZSBBQzk3IFBDIEJlZXAgaW5wdXQgb24gYXVkaW8gY29kZWNzLgpAQCAtNzUyLDYgKzk3OSw3IEBACiAJCWdvdG8gb3V0OwogCiAJYWFjaS0+cGxheWJhY2sucGNtID0gJmFjOTdfYnVzLT5wY21zWzBdOworCWFhY2ktPmNhcHR1cmUucGNtICA9ICZhYzk3X2J1cy0+cGNtc1sxXTsKIAogIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtODAxLDcgKzEwMjksNyBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IHJldDsKIAotCXJldCA9IHNuZF9wY21fbmV3KGFhY2ktPmNhcmQsICJBQUNJIEFDJzk3IiwgMCwgMSwgMCwgJnBjbSk7CisJcmV0ID0gc25kX3BjbV9uZXcoYWFjaS0+Y2FyZCwgIkFBQ0kgQUMnOTciLCAwLCAxLCAxLCAmcGNtKTsKIAlpZiAocmV0ID09IDApIHsKIAkJYWFjaS0+cGNtID0gcGNtOwogCQlwY20tPnByaXZhdGVfZGF0YSA9IGFhY2k7CkBAIC04MTAsNiArMTAzOCw3IEBACiAJCXN0cmxjcHkocGNtLT5uYW1lLCBEUklWRVJfTkFNRSwgc2l6ZW9mKHBjbS0+bmFtZSkpOwogCiAJCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZhYWNpX3BsYXliYWNrX29wcyk7CisJCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJmFhY2lfY2FwdHVyZV9vcHMpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC04MTcsMTUgKzEwNDYsMTUgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXQgYWFjaV9zaXplX2ZpZm8oc3RydWN0IGFhY2kgKmFhY2kpCiB7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gYWFjaS0+YmFzZSArIEFBQ0lfQ1NDSDE7CisJc3RydWN0IGFhY2lfcnVudGltZSAqYWFjaXJ1biA9ICZhYWNpLT5wbGF5YmFjazsKIAlpbnQgaTsKIAotCXdyaXRlbChUWENSX0ZFTiB8IFRYQ1JfVFNaMTYgfCBUWENSX1RYRU4sIGJhc2UgKyBBQUNJX1RYQ1IpOworCXdyaXRlbChDUl9GRU4gfCBDUl9TWjE2IHwgQ1JfRU4sIGFhY2lydW4tPmJhc2UgKyBBQUNJX1RYQ1IpOwogCi0JZm9yIChpID0gMDsgIShyZWFkbChiYXNlICsgQUFDSV9TUikgJiBTUl9UWEZGKSAmJiBpIDwgNDA5NjsgaSsrKQotCQl3cml0ZWwoMCwgYWFjaS0+YmFzZSArIEFBQ0lfRFIxKTsKKwlmb3IgKGkgPSAwOyAhKHJlYWRsKGFhY2lydW4tPmJhc2UgKyBBQUNJX1NSKSAmIFNSX1RYRkYpICYmIGkgPCA0MDk2OyBpKyspCisJCXdyaXRlbCgwLCBhYWNpcnVuLT5maWZvKTsKIAotCXdyaXRlbCgwLCBiYXNlICsgQUFDSV9UWENSKTsKKwl3cml0ZWwoMCwgYWFjaXJ1bi0+YmFzZSArIEFBQ0lfVFhDUik7CiAKIAkvKgogCSAqIFJlLWluaXRpYWxpc2UgdGhlIEFBQ0kgYWZ0ZXIgdGhlIEZJRk8gZGVwdGggdGVzdCwgdG8KQEAgLTg3Miw2ICsxMTAxLDEyIEBACiAJYWFjaS0+cGxheWJhY2suYmFzZSA9IGFhY2ktPmJhc2UgKyBBQUNJX0NTQ0gxOwogCWFhY2ktPnBsYXliYWNrLmZpZm8gPSBhYWNpLT5iYXNlICsgQUFDSV9EUjE7CiAKKwkvKgorCSAqIENhcHR1cmUgdXNlcyBBQUNJIGNoYW5uZWwgMAorCSAqLworCWFhY2ktPmNhcHR1cmUuYmFzZSA9IGFhY2ktPmJhc2UgKyBBQUNJX0NTQ0gxOworCWFhY2ktPmNhcHR1cmUuZmlmbyA9IGFhY2ktPmJhc2UgKyBBQUNJX0RSMTsKKwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJdm9pZCBfX2lvbWVtICpiYXNlID0gYWFjaS0+YmFzZSArIGkgKiAweDE0OwogCkBAIC05MDcsNyArMTE0Miw3IEBACiAJcmV0ID0gc25kX2NhcmRfcmVnaXN0ZXIoYWFjaS0+Y2FyZCk7CiAJaWYgKHJldCA9PSAwKSB7CiAJCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzLCBmaWZvICVkXG4iLCBhYWNpLT5jYXJkLT5sb25nbmFtZSwKLQkJCWFhY2ktPmZpZm9zaXplKTsKKwkJCSBhYWNpLT5maWZvc2l6ZSk7CiAJCWFtYmFfc2V0X2RydmRhdGEoZGV2LCBhYWNpLT5jYXJkKTsKIAkJcmV0dXJuIHJldDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5oIGIvc291bmQvYXJtL2FhY2kuaAppbmRleCA5MTc1ZmY5Li45MjRmNjljIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5oCisrKyBiL3NvdW5kL2FybS9hYWNpLmgKQEAgLTQ5LDI3ICs0OSwyNyBAQAogI2RlZmluZSBBQUNJX0RSNAkweDBmMAkvKiBkYXRhIHJlYWQvd3JpdHRlbiBmaWZvIDQgKi8KIAogLyoKLSAqIHRyYW5zbWl0IGZpZm8gY29udHJvbCByZWdpc3Rlci4gUDQ4CisgKiBUWC9SWCBmaWZvIGNvbnRyb2wgcmVnaXN0ZXIgKENSKS4gUDQ4CiAgKi8KLSNkZWZpbmUgVFhDUl9GRU4JKDEgPDwgMTYpCS8qIGZpZm8gZW5hYmxlICovCi0jZGVmaW5lIFRYQ1JfQ09NUEFDVAkoMSA8PCAxNSkJLyogY29tcGFjdCBtb2RlICovCi0jZGVmaW5lIFRYQ1JfVFNaMTYJKDAgPDwgMTMpCS8qIDE2IGJpdHMgKi8KLSNkZWZpbmUgVFhDUl9UU1oxOAkoMSA8PCAxMykJLyogMTggYml0cyAqLwotI2RlZmluZSBUWENSX1RTWjIwCSgyIDw8IDEzKQkvKiAyMCBiaXRzICovCi0jZGVmaW5lIFRYQ1JfVFNaMTIJKDMgPDwgMTMpCS8qIDEyIGJpdHMgKi8KLSNkZWZpbmUgVFhDUl9UWDEyCSgxIDw8IDEyKQkvKiB0cmFuc21pdHMgc2xvdCAxMiAqLwotI2RlZmluZSBUWENSX1RYMTEJKDEgPDwgMTEpCS8qIHRyYW5zbWl0cyBzbG90IDEyICovCi0jZGVmaW5lIFRYQ1JfVFgxMAkoMSA8PCAxMCkJLyogdHJhbnNtaXRzIHNsb3QgMTIgKi8KLSNkZWZpbmUgVFhDUl9UWDkJKDEgPDwgOSkJLyogdHJhbnNtaXRzIHNsb3QgMTIgKi8KLSNkZWZpbmUgVFhDUl9UWDgJKDEgPDwgOCkJLyogdHJhbnNtaXRzIHNsb3QgMTIgKi8KLSNkZWZpbmUgVFhDUl9UWDcJKDEgPDwgNykJLyogdHJhbnNtaXRzIHNsb3QgMTIgKi8KLSNkZWZpbmUgVFhDUl9UWDYJKDEgPDwgNikJLyogdHJhbnNtaXRzIHNsb3QgMTIgKi8KLSNkZWZpbmUgVFhDUl9UWDUJKDEgPDwgNSkJLyogdHJhbnNtaXRzIHNsb3QgMTIgKi8KLSNkZWZpbmUgVFhDUl9UWDQJKDEgPDwgNCkJLyogdHJhbnNtaXRzIHNsb3QgMTIgKi8KLSNkZWZpbmUgVFhDUl9UWDMJKDEgPDwgMykJLyogdHJhbnNtaXRzIHNsb3QgMTIgKi8KLSNkZWZpbmUgVFhDUl9UWDIJKDEgPDwgMikJLyogdHJhbnNtaXRzIHNsb3QgMTIgKi8KLSNkZWZpbmUgVFhDUl9UWDEJKDEgPDwgMSkJLyogdHJhbnNtaXRzIHNsb3QgMTIgKi8KLSNkZWZpbmUgVFhDUl9UWEVOCSgxIDw8IDApCS8qIHRyYW5zbWl0IGVuYWJsZSAqLworI2RlZmluZSBDUl9GRU4JCSgxIDw8IDE2KQkvKiBmaWZvIGVuYWJsZSAqLworI2RlZmluZSBDUl9DT01QQUNUCSgxIDw8IDE1KQkvKiBjb21wYWN0IG1vZGUgKi8KKyNkZWZpbmUgQ1JfU1oxNgkJKDAgPDwgMTMpCS8qIDE2IGJpdHMgKi8KKyNkZWZpbmUgQ1JfU1oxOAkJKDEgPDwgMTMpCS8qIDE4IGJpdHMgKi8KKyNkZWZpbmUgQ1JfU1oyMAkJKDIgPDwgMTMpCS8qIDIwIGJpdHMgKi8KKyNkZWZpbmUgQ1JfU1oxMgkJKDMgPDwgMTMpCS8qIDEyIGJpdHMgKi8KKyNkZWZpbmUgQ1JfU0wxMgkJKDEgPDwgMTIpCisjZGVmaW5lIENSX1NMMTEJCSgxIDw8IDExKQorI2RlZmluZSBDUl9TTDEwCQkoMSA8PCAxMCkKKyNkZWZpbmUgQ1JfU0w5CQkoMSA8PCA5KQorI2RlZmluZSBDUl9TTDgJCSgxIDw8IDgpCisjZGVmaW5lIENSX1NMNwkJKDEgPDwgNykKKyNkZWZpbmUgQ1JfU0w2CQkoMSA8PCA2KQorI2RlZmluZSBDUl9TTDUJCSgxIDw8IDUpCisjZGVmaW5lIENSX1NMNAkJKDEgPDwgNCkKKyNkZWZpbmUgQ1JfU0wzCQkoMSA8PCAzKQorI2RlZmluZSBDUl9TTDIJCSgxIDw8IDIpCisjZGVmaW5lIENSX1NMMQkJKDEgPDwgMSkKKyNkZWZpbmUgQ1JfRU4JCSgxIDw8IDApCS8qIHRyYW5zbWl0IGVuYWJsZSAqLwogCiAvKgogICogc3RhdHVzIHJlZ2lzdGVyIGJpdHMuIFA0OQpAQCAtMjI5LDYgKzIyOSw3IEBACiAJLyogQUMnOTcgKi8KIAlzdHJ1Y3QgbXV0ZXgJCWFjOTdfc2VtOwogCXN0cnVjdCBzbmRfYWM5N19idXMJKmFjOTdfYnVzOworCXN0cnVjdCBzbmRfYWM5NwkJKmFjOTc7CiAKIAl1MzIJCQltYWluY3I7CiAJc3BpbmxvY2tfdAkJbG9jazsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKaW5kZXggZGVkZTk1NC4uMjhkYjRiZSAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKQEAgLTMwNSw3ICszMDUsNyBAQAogI2RlZmluZSBweGEyeHhfYWM5N19yZXN1bWUJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgcHhhMnh4X2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2FjOTdfYnVzICphYzk3X2J1czsKQEAgLTM2OSw3ICszNjksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHB4YTJ4eF9hYzk3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIApAQCAtMzg2LDcgKzM4Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTJ4eF9hYzk3X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhMnh4X2FjOTdfcHJvYmUsCi0JLnJlbW92ZQkJPSBweGEyeHhfYWM5N19yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChweGEyeHhfYWM5N19yZW1vdmUpLAogCS5zdXNwZW5kCT0gcHhhMnh4X2FjOTdfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YTJ4eF9hYzk3X3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCA4MzM5YmFkLi5hMGYyOGY1IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC00MjMsNyArNDIzLDggQEAKIAkucG9pbnRlciA9CQlzbmRfY2FyZF9kdW1teV9wY21fcG9pbnRlciwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHNuZF9jYXJkX2R1bW15X3BjbShzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSwgaW50IGRldmljZSwgaW50IHN1YnN0cmVhbXMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9kdW1teV9wY20oc3RydWN0IHNuZF9kdW1teSAqZHVtbXksIGludCBkZXZpY2UsCisJCQkJCWludCBzdWJzdHJlYW1zKQogewogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKQEAgLTU2Miw3ICs1NjMsNyBAQAogRFVNTVlfQ0FQU1JDKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIE1JWEVSX0FERFJfQ0QpCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfY2FyZF9kdW1teV9uZXdfbWl4ZXIoc3RydWN0IHNuZF9kdW1teSAqZHVtbXkpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9kdW1teV9uZXdfbWl4ZXIoc3RydWN0IHNuZF9kdW1teSAqZHVtbXkpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZHVtbXktPmNhcmQ7CiAJdW5zaWduZWQgaW50IGlkeDsKQEAgLTU3OSw3ICs1ODAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfZHVtbXlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmluaXQgc25kX2R1bW15X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9kdW1teSAqZHVtbXk7CkBAIC02MTcsNyArNjE4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHNuZF9kdW1teV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX2R1bW15X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCiB7CiAJc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOwpAQCAtNjQ4LDcgKzY0OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9kdW1teV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNuZF9kdW1teV9wcm9iZSwKLQkucmVtb3ZlCQk9IHNuZF9kdW1teV9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfZHVtbXlfcmVtb3ZlKSwKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHNuZF9kdW1teV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc25kX2R1bW15X3Jlc3VtZSwKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXRwYXYuYyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwppbmRleCBhOWZmMzkxLi40MGViMDI2IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL210cGF2LmMKKysrIGIvc291bmQvZHJpdmVycy9tdHBhdi5jCkBAIC01ODMsNyArNTgzLDcgQEAKIC8qCiAgKiBnZXQgSVNBIHJlc291cmNlcwogICovCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfbXRwYXZfZ2V0X0lTQShzdHJ1Y3QgbXRwYXYgKiBtY2FyZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tdHBhdl9nZXRfSVNBKHN0cnVjdCBtdHBhdiAqIG1jYXJkKQogewogCWlmICgobWNhcmQtPnJlc19wb3J0ID0gcmVxdWVzdF9yZWdpb24ocG9ydCwgMywgIk1vdHVNVFBBViBNSURJIikpID09IE5VTEwpIHsKIAkJc25kX3ByaW50aygiTVRWQVAgcG9ydCAweCVseCBpcyBidXN5XG4iLCBwb3J0KTsKQEAgLTYxOSw3ICs2MTksNyBAQAogICogZ2V0IFJBV01JREkgcmVzb3VyY2VzCiAgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IHNuZF9tdHBhdl9zZXRfbmFtZShzdHJ1Y3QgbXRwYXYgKmNoaXAsCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX210cGF2X3NldF9uYW1lKHN0cnVjdCBtdHBhdiAqY2hpcCwKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJaWYgKHN1YnN0cmVhbS0+bnVtYmVyID49IDAgJiYgc3Vic3RyZWFtLT5udW1iZXIgPCBjaGlwLT5udW1fcG9ydHMpCkBAIC02MzQsNyArNjM0LDcgQEAKIAkJc3RyY3B5KHN1YnN0cmVhbS0+bmFtZSwgIk1UUCBicm9hZGNhc3QiKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX210cGF2X2dldF9SQVdNSURJKHN0cnVjdCBtdHBhdiAqbWNhcmQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXRwYXZfZ2V0X1JBV01JREkoc3RydWN0IG10cGF2ICptY2FyZCkKIHsKIAlpbnQgcnZhbDsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJhd21pZGk7CkBAIC02OTEsNyArNjkxLDcgQEAKIAogLyoKICAqLwotc3RhdGljIGludCBfX2luaXQgc25kX210cGF2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tdHBhdl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CkBAIC03NDUsNyArNzQ1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHNuZF9tdHBhdl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX210cGF2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCiB7CiAJc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOwpAQCAtNzU2LDcgKzc1Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9tdHBhdl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNuZF9tdHBhdl9wcm9iZSwKLQkucmVtb3ZlCQk9IHNuZF9tdHBhdl9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfbXRwYXZfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSBTTkRfTVRQQVZfRFJJVkVSCiAJfSwKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXRzNjQuYyBiL3NvdW5kL2RyaXZlcnMvbXRzNjQuYwppbmRleCA1MzI3YzZmLi42YzlmNGM5IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL210czY0LmMKKysrIGIvc291bmQvZHJpdmVycy9tdHM2NC5jCkBAIC0xMDI2LDcgKzEwMjYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc25kX210czY0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX210czY0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCkBAIC0xMDM5LDcgKzEwMzksNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfbXRzNjRfZHJpdmVyID0gewogCS5wcm9iZSAgPSBzbmRfbXRzNjRfcHJvYmUsCi0JLnJlbW92ZSA9IHNuZF9tdHM2NF9yZW1vdmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9tdHM2NF9yZW1vdmUpLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gUExBVEZPUk1fRFJJVkVSCiAJfQpAQCAtMTA0OCw3ICsxMDQ4LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIG1vZHVsZSBpbml0IHN0dWZmCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgc25kX210czY0X3VucmVnaXN0ZXJfYWxsKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIHNuZF9tdHM2NF91bnJlZ2lzdGVyX2FsbCh2b2lkKQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3BvcnRtYW4yeDQuYyBiL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCmluZGV4IDZjNDg3NzIuLmIyZDBiYTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCkBAIC04MTEsNyArODExLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHNuZF9wb3J0bWFuX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX3BvcnRtYW5fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKQEAgLTgyNCw3ICs4MjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfcG9ydG1hbl9kcml2ZXIgPSB7CiAJLnByb2JlICA9IHNuZF9wb3J0bWFuX3Byb2JlLAotCS5yZW1vdmUgPSBzbmRfcG9ydG1hbl9yZW1vdmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9wb3J0bWFuX3JlbW92ZSksCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBQTEFURk9STV9EUklWRVIKIAl9CkBAIC04MzMsNyArODMzLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIG1vZHVsZSBpbml0IHN0dWZmCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgc25kX3BvcnRtYW5fdW5yZWdpc3Rlcl9hbGwodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdF9vcl9tb2R1bGUgc25kX3BvcnRtYW5fdW5yZWdpc3Rlcl9hbGwodm9pZCkKIHsKIAlpbnQgaTsKIApkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMgYi9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYwppbmRleCAzYTg2YTU4Li44MzhhNDI3IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYworKysgYi9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAgKiAgcmV0dXJuIDAgaWYgZm91bmQKICAqICByZXR1cm4gbmVnYXRpdmUgZXJyb3IgaWYgbm90IGZvdW5kCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNuZF91YXJ0MTY1NTBfZGV0ZWN0KHN0cnVjdCBzbmRfdWFydDE2NTUwICp1YXJ0KQorc3RhdGljIGludCBfX2RldmluaXQgc25kX3VhcnQxNjU1MF9kZXRlY3Qoc3RydWN0IHNuZF91YXJ0MTY1NTAgKnVhcnQpCiB7CiAJdW5zaWduZWQgbG9uZyBpb19iYXNlID0gdWFydC0+YmFzZTsKIAlpbnQgb2s7CkBAIC03ODEsNyArNzgxLDcgQEAKIAlyZXR1cm4gc25kX3VhcnQxNjU1MF9mcmVlKHVhcnQpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfdWFydDE2NTUwX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfdWFydDE2NTUwX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW9iYXNlLAogCQkJCSAgICAgICBpbnQgaXJxLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3BlZWQsCkBAIC04NjAsNyArODYwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNuZF91YXJ0MTY1NTBfc3Vic3RyZWFtcyhzdHJ1Y3Qgc25kX3Jhd21pZGlfc3RyICpzdHJlYW0pCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX3VhcnQxNjU1MF9zdWJzdHJlYW1zKHN0cnVjdCBzbmRfcmF3bWlkaV9zdHIgKnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW07CiAKQEAgLTg2OSw3ICs4NjksNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX3VhcnQxNjU1MF9ybWlkaShzdHJ1Y3Qgc25kX3VhcnQxNjU1MCAqdWFydCwgaW50IGRldmljZSwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF91YXJ0MTY1NTBfcm1pZGkoc3RydWN0IHNuZF91YXJ0MTY1NTAgKnVhcnQsIGludCBkZXZpY2UsCiAJCQkJICAgICAgaW50IG91dHMsIGludCBpbnMsCiAJCQkJICAgICAgc3RydWN0IHNuZF9yYXdtaWRpICoqcm1pZGkpCiB7CkBAIC04OTYsNyArODk2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF91YXJ0MTY1NTAgKnVhcnQ7CkBAIC05ODEsNyArOTgxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHNuZF9zZXJpYWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9zZXJpYWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKIHsKIAlzbmRfY2FyZF9mcmVlKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cikpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7CkBAIC05OTIsNyArOTkyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX3NlcmlhbF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNuZF9zZXJpYWxfcHJvYmUsCi0JLnJlbW92ZQkJPSBzbmRfc2VyaWFsX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKCBzbmRfc2VyaWFsX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gU05EX1NFUklBTF9EUklWRVIKIAl9LApkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92aXJtaWRpLmMgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwppbmRleCA0MjlhZjE0Li40NmYzZDM0IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYworKysgYi9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYwpAQCAtODQsNyArODQsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbU05EUlZfQ0FSRFNdOwogCiAKLXN0YXRpYyBpbnQgX19pbml0IHNuZF92aXJtaWRpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF92aXJtaWRpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9jYXJkX3Zpcm1pZGkgKnZtaWRpOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzbmRfdmlybWlkaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX3Zpcm1pZGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKIHsKIAlzbmRfY2FyZF9mcmVlKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cikpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7CkBAIC0xMzksNyArMTM5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX3Zpcm1pZGlfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzbmRfdmlybWlkaV9wcm9iZSwKLQkucmVtb3ZlCQk9IHNuZF92aXJtaWRpX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF92aXJtaWRpX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gU05EX1ZJUk1JRElfRFJJVkVSCiAJfSwKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCmluZGV4IDk5OTA4ZTQuLjc0ZTUwMWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwpAQCAtNjUsNyArNjUsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbU05EUlZfQ0FSRFNdOwogCiAKLXN0YXRpYyBpbnQgX19pbml0IHNuZF9hZDE4NDhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9hZDE4NDhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgZGV2ID0gcGRldi0+aWQ7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NtaTgzMzAuYyBiL3NvdW5kL2lzYS9jbWk4MzMwLmMKaW5kZXggZDFmNmRmYy4uYzA5YTgwMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NtaTgzMzAuYworKysgYi9zb3VuZC9pc2EvY21pODMzMC5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfY21pODMzMF9ub25wbnBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9jbWk4MzMwX25vbnBucF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQogewogCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfY21pODMzMF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNuZF9jbWk4MzMwX25vbnBucF9wcm9iZSwKLQkucmVtb3ZlCQk9IHNuZF9jbWk4MzMwX25vbnBucF9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfY21pODMzMF9ub25wbnBfcmVtb3ZlKSwKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHNuZF9jbWk4MzMwX25vbnBucF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc25kX2NtaTgzMzBfbm9ucG5wX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCmluZGV4IDdmMjlmNTYuLjY1Zjk3ZmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwpAQCAtNzMsNyArNzMsNyBAQAogCiAjZGVmaW5lIFBGWAkiZXMxNjg4OiAiCiAKLXN0YXRpYyBpbnQgX19pbml0IHNuZF9lczE2ODhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9lczE2ODhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgZGV2ID0gcGRldi0+aWQ7CiAJc3RhdGljIGludCBwb3NzaWJsZV9pcnFzW10gPSB7NSwgOSwgMTAsIDcsIC0xfTsKQEAgLTE3MSw3ICsxNzEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2VzMTY4OF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX2VzMTY4OF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQogewogCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKQEAgLTE4Miw3ICsxODIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfZXMxNjg4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc25kX2VzMTY4OF9wcm9iZSwKLQkucmVtb3ZlCQk9IHNuZF9lczE2ODhfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2VzMTY4OF9yZW1vdmUpLAogCS8qIEZJWE1FOiBzdXNwZW5kL3Jlc3VtZSAqLwogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9IEVTMTY4OF9EUklWRVIKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKaW5kZXggMzcwNTdhMy4uMDM5NWUyZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogI2RlZmluZSBQRlgJImd1c2NsYXNzaWM6ICIKIAotc3RhdGljIGludCBfX2luaXQgc25kX2d1c2NsYXNzaWNfZGV0ZWN0KHN0cnVjdCBzbmRfZ3VzX2NhcmQgKiBndXMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZ3VzY2xhc3NpY19kZXRlY3Qoc3RydWN0IHNuZF9ndXNfY2FyZCAqIGd1cykKIHsKIAl1bnNpZ25lZCBjaGFyIGQ7CiAKQEAgLTk1LDcgKzk1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNuZF9ndXNjbGFzc2ljX2luaXQoaW50IGRldiwgc3RydWN0IHNuZF9ndXNfY2FyZCAqIGd1cykKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfZ3VzY2xhc3NpY19pbml0KGludCBkZXYsIHN0cnVjdCBzbmRfZ3VzX2NhcmQgKiBndXMpCiB7CiAJZ3VzLT5lcXVhbF9pcnEgPSAwOwogCWd1cy0+Y29kZWNfZmxhZyA9IDA7CkBAIC0xMDMsNyArMTAzLDcgQEAKIAlndXMtPmpveXN0aWNrX2RhYyA9IGpveXN0aWNrX2RhY1tkZXZdOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfZ3VzY2xhc3NpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc25kX2d1c2NsYXNzaWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgZGV2ID0gcGRldi0+aWQ7CiAJc3RhdGljIGludCBwb3NzaWJsZV9pcnFzW10gPSB7NSwgMTEsIDEyLCA5LCA3LCAxNSwgMywgNCwgLTF9OwpAQCAtMjExLDcgKzIxMSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzbmRfZ3VzY2xhc3NpY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX2d1c2NsYXNzaWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKIHsKIAlzbmRfY2FyZF9mcmVlKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cikpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7CkBAIC0yMjIsNyArMjIyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX2d1c2NsYXNzaWNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzbmRfZ3VzY2xhc3NpY19wcm9iZSwKLQkucmVtb3ZlCQk9IHNuZF9ndXNjbGFzc2ljX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9ndXNjbGFzc2ljX3JlbW92ZSksCiAJLyogRklYTUU6IHN1c3BlbmQvcmVzdW1lICovCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gR1VTQ0xBU1NJQ19EUklWRVIKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jIGIvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKaW5kZXggNTMyYzU2ZS4uNGY1NWZjMyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAogI2RlZmluZSBQRlgJImd1c2V4dHJlbWU6ICIKIAotc3RhdGljIGludCBfX2luaXQgc25kX2d1c2V4dHJlbWVfZGV0ZWN0KGludCBkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZ3VzZXh0cmVtZV9kZXRlY3QoaW50IGRldiwKIAkJCQkJc3RydWN0IHNuZF9jYXJkICpjYXJkLAogCQkJCQlzdHJ1Y3Qgc25kX2d1c19jYXJkICogZ3VzLAogCQkJCQlzdHJ1Y3Qgc25kX2VzMTY4OCAqZXMxNjg4KQpAQCAtMTQyLDEyICsxNDIsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNuZF9ndXNleHRyZW1lX2luaXQoaW50IGRldiwgc3RydWN0IHNuZF9ndXNfY2FyZCAqIGd1cykKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfZ3VzZXh0cmVtZV9pbml0KGludCBkZXYsIHN0cnVjdCBzbmRfZ3VzX2NhcmQgKiBndXMpCiB7CiAJZ3VzLT5qb3lzdGlja19kYWMgPSBqb3lzdGlja19kYWNbZGV2XTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX2d1c2V4dHJlbWVfbWl4ZXIoc3RydWN0IHNuZF9lczE2ODggKmNoaXApCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZ3VzZXh0cmVtZV9taXhlcihzdHJ1Y3Qgc25kX2VzMTY4OCAqY2hpcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBjaGlwLT5jYXJkOwogCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQxLCBpZDI7CkBAIC0xNjksNyArMTY5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX2d1c2V4dHJlbWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9ndXNleHRyZW1lX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGRldiA9IHBkZXYtPmlkOwogCXN0YXRpYyBpbnQgcG9zc2libGVfZXNzX2lycXNbXSA9IHs1LCA5LCAxMCwgNywgLTF9OwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzbmRfZ3VzZXh0cmVtZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX2d1c2V4dHJlbWVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKIHsKIAlzbmRfY2FyZF9mcmVlKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cikpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7CkBAIC0zMzIsNyArMzMyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX2d1c2V4dHJlbWVfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzbmRfZ3VzZXh0cmVtZV9wcm9iZSwKLQkucmVtb3ZlCQk9IHNuZF9ndXNleHRyZW1lX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9ndXNleHRyZW1lX3JlbW92ZSksCiAJLyogRklYTUU6IHN1c3BlbmQvcmVzdW1lICovCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gR1VTRVhUUkVNRV9EUklWRVIKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCmluZGV4IGMxYzY5ZTMuLmQxYWQ5MGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNtYXguYwpAQCAtODUsNyArODUsNyBAQAogCiAjZGVmaW5lIFBGWAkiZ3VzbWF4OiAiCiAKLXN0YXRpYyBpbnQgX19pbml0IHNuZF9ndXNtYXhfZGV0ZWN0KHN0cnVjdCBzbmRfZ3VzX2NhcmQgKiBndXMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZ3VzbWF4X2RldGVjdChzdHJ1Y3Qgc25kX2d1c19jYXJkICogZ3VzKQogewogCXVuc2lnbmVkIGNoYXIgZDsKIApAQCAtMTI3LDcgKzEyNyw4IEBACiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzbmRfZ3VzbWF4X2luaXQoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX2d1c19jYXJkICogZ3VzKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHNuZF9ndXNtYXhfaW5pdChpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisJCQkJICAgICAgc3RydWN0IHNuZF9ndXNfY2FyZCAqIGd1cykKIHsKIAlndXMtPmVxdWFsX2lycSA9IDE7CiAJZ3VzLT5jb2RlY19mbGFnID0gMTsKQEAgLTE0NSw3ICsxNDYsNyBAQAogI2RlZmluZSBDUzQyMzFfUFJJVkFURSggbGVmdCwgcmlnaHQsIHNoaWZ0LCBtdXRlICkgXAogCQkJKChsZWZ0IDw8IDI0KXwocmlnaHQgPDwgMTYpfChzaGlmdDw8OCl8bXV0ZSkKIAotc3RhdGljIGludCBfX2luaXQgc25kX2d1c21heF9taXhlcihzdHJ1Y3Qgc25kX2NzNDIzMSAqY2hpcCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9ndXNtYXhfbWl4ZXIoc3RydWN0IHNuZF9jczQyMzEgKmNoaXApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gY2hpcC0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkIGlkMSwgaWQyOwpAQCAtMjA0LDcgKzIwNSw3IEBACiAJCWZyZWVfaXJxKG1heGNhcmQtPmlycSwgKHZvaWQgKiltYXhjYXJkKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX2d1c21heF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc25kX2d1c21heF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCBkZXYgPSBwZGV2LT5pZDsKIAlzdGF0aWMgaW50IHBvc3NpYmxlX2lycXNbXSA9IHs1LCAxMSwgMTIsIDksIDcsIDE1LCAzLCAtMX07CkBAIC0zNDgsNyArMzQ5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHNuZF9ndXNtYXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9ndXNtYXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKIHsKIAlzbmRfY2FyZF9mcmVlKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cikpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7CkBAIC0zNTksNyArMzYwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX2d1c21heF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNuZF9ndXNtYXhfcHJvYmUsCi0JLnJlbW92ZQkJPSBzbmRfZ3VzbWF4X3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9ndXNtYXhfcmVtb3ZlKSwKIAkvKiBGSVhNRTogc3VzcGVuZC9yZXN1bWUgKi8KIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSBHVVNNQVhfRFJJVkVSCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3BsM3NhMi5jIGIvc291bmQvaXNhL29wbDNzYTIuYwppbmRleCAxZTMwNzEzLi5mM2RiNjg2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3BsM3NhMi5jCisrKyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKQEAgLTkxOSw3ICs5MTksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9vcGwzc2EyX25vbnBucF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX29wbDNzYTJfbm9ucG5wX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCiB7CiAJc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOwpAQCAtOTQyLDcgKzk0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9vcGwzc2EyX25vbnBucF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNuZF9vcGwzc2EyX25vbnBucF9wcm9iZSwKLQkucmVtb3ZlCQk9IHNuZF9vcGwzc2EyX25vbnBucF9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXQoIHNuZF9vcGwzc2EyX25vbnBucF9yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gc25kX29wbDNzYTJfbm9ucG5wX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzbmRfb3BsM3NhMl9ub25wbnBfcmVzdW1lLApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiOC5jIGIvc291bmQvaXNhL3NiL3NiOC5jCmluZGV4IDI2OGViZDMuLmJlMWU4M2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjguYworKysgYi9zb3VuZC9pc2Evc2Ivc2I4LmMKQEAgLTgzLDcgKzgzLDcgQEAKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGFjYXJkLT5mbV9yZXMpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfc2I4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfc2I4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGRldiA9IHBkZXYtPmlkOwogCXN0cnVjdCBzbmRfc2IgKmNoaXA7CkBAIC0xOTMsNyArMTkzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHNuZF9zYjhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfc2I4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpAQCAtMjMwLDcgKzIzMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9zYjhfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzbmRfc2I4X3Byb2JlLAotCS5yZW1vdmUJCT0gc25kX3NiOF9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfc2I4X3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBzbmRfc2I4X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzbmRfc2I4X3Jlc3VtZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwppbmRleCA3NGVkODEwLi5hOWVlYzJhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCkBAIC0xNDMsNiArMTQzLDcgQEAKIHsgMHg0MzUyNTk3MCwgMHhmZmZmZmZmOCwgIkNTNDIwMiIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDQzNTg1NDIxLCAweGZmZmZmZmZmLCAiSFNEMTEyNDYiLAkJTlVMTCwJCU5VTEwgfSwJLy8gU21hcnRNQyBJSQogeyAweDQzNTg1NDI4LCAweGZmZmZmZmY4LCAiQ3gyMDQ2OCIsCQlwYXRjaF9jb25leGFudCwJTlVMTCB9LCAvLyBTbWFydEFNQyBmaXhtZTogdGhlIG1hc2sgbWlnaHQgYmUgZGlmZmVyZW50Cit7IDB4NDM1ODU0MzEsIDB4ZmZmZmZmZmYsICJDeDIwNTUxIiwgICAgICAgICAgIHBhdGNoX2N4MjA1NTEsICBOVUxMIH0sCiB7IDB4NDQ1NDMwMzEsIDB4ZmZmZmZmZjAsICJEVDAzOTgiLAkJTlVMTCwJCU5VTEwgfSwKIHsgMHg0NTRkNDMyOCwgMHhmZmZmZmZmZiwgIkVNMjgwMjgiLAkJTlVMTCwJCU5VTEwgfSwgIC8vIHNhbWUgYXMgVFIyODAyOD8KIHsgMHg0NTgzODMwOCwgMHhmZmZmZmZmZiwgIkVTUzE5ODgiLAkJTlVMTCwJCU5VTEwgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwppbmRleCA2NDFkMGM4Li5iZmMyZmVkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCkBAIC0xMzM4LDYgKzEzMzgsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IHBhdGNoX2N4MjA1NTEoc3RydWN0IHNuZF9hYzk3ICphYzk3KQoreworCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIDB4NWMsIDB4MDEsIDB4MDEpOworCXJldHVybiAwOworfQorCiAvKgogICogQW5hbG9nIERldmljZSBBRDE4eHgsIEFEMTl4eCBjb2RlY3MKICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5oIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5oCmluZGV4IDk0MzQwZGEuLjU1NWQxYzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guaAorKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmgKQEAgLTM5LDYgKzM5LDcgQEAKIGludCBwYXRjaF9jaXJydXNfY3M0Mjk5KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwogaW50IHBhdGNoX2NpcnJ1c19zcGRpZihzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKIGludCBwYXRjaF9jb25leGFudChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKK2ludCBwYXRjaF9jeDIwNTUxKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwogaW50IHBhdGNoX2FkMTgxOShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKIGludCBwYXRjaF9hZDE4ODEoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7CiBpbnQgcGF0Y2hfYWQxODg1KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2J0ODd4LmMgYi9zb3VuZC9wY2kvYnQ4N3guYwppbmRleCBjM2YzZGEyLi5lOWIwMjllIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYnQ4N3guYworKysgYi9zb3VuZC9wY2kvYnQ4N3guYwpAQCAtODA0LDYgKzgwNCw3IEBACiAJezB4MTgyMiwgMHgwMDAxfSwgLyogVHdpbmhhbiBWaXNpb25QbHVzIERWQi1UICovCiAJezB4MThhYywgMHhkNTAwfSwgLyogRFZJQ08gRnVzaW9uSERUViA1IExpdGUgKi8KIAl7MHgxOGFjLCAweGRiMTB9LCAvKiBEVklDTyBGdXNpb25IRFRWIERWQi1UIExpdGUgKi8KKwl7MHgxOGFjLCAweGRiMTF9LCAvKiBVbHRyYXZpZXcgRFZCLVQgTGl0ZSAqLwogCXsweDI3MGYsIDB4ZmMwMH0sIC8qIENoYWludGVjaCBEaWdpdG9wIERTVC0xMDAwIERWQi1TICovCiAJezB4NzA2MywgMHgyMDAwfSwgLyogcGNIRFRWIEhELTIwMDAgVFYgKi8KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggNzNmNDY2OC4uMjNhMWM3NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtNTcsNiArNTcsNyBAQAogCQkJCQkgKiBkaWdfb3V0X25pZCBhbmQgaHBfbmlkIGFyZSBvcHRpb25hbAogCQkJCQkgKi8KIAl1bnNpZ25lZCBpbnQgY3VyX2VhcGQ7CisJdW5zaWduZWQgaW50IGhwX3ByZXNlbnQ7CiAJdW5zaWduZWQgaW50IG5lZWRfZGFjX2ZpeDsKIAogCS8qIGNhcHR1cmUgKi8KQEAgLTM1NCw3ICszNTUsNyBAQAogICogdGhlIHByaXZhdGUgdmFsdWUgPSBuaWQgfCAoaW52ZXJ0IDw8IDgpCiAgKi8KIAotc3RhdGljIGludCBjb25leGFudF9lYXBkX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCitzdGF0aWMgaW50IGN4dF9lYXBkX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOwpAQCAtMzY0LDcgKzM2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29uZXhhbnRfZWFwZF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCitzdGF0aWMgaW50IGN4dF9lYXBkX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CkBAIC0zNzUsOSArMzc2LDEwIEBACiAJZWxzZQogCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHNwZWMtPmN1cl9lYXBkOwogCXJldHVybiAwOworCiB9CiAKLXN0YXRpYyBpbnQgY29uZXhhbnRfZWFwZF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCitzdGF0aWMgaW50IGN4dF9lYXBkX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CkBAIC0zODUsMTEgKzM4NywxMyBAQAogCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAxOwogCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CiAJdW5zaWduZWQgaW50IGVhcGQ7CisKIAllYXBkID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAJaWYgKGludmVydCkKIAkJZWFwZCA9ICFlYXBkOwogCWlmIChlYXBkID09IHNwZWMtPmN1cl9lYXBkICYmICFjb2RlYy0+aW5fcmVzdW1lKQogCQlyZXR1cm4gMDsKKwkKIAlzcGVjLT5jdXJfZWFwZCA9IGVhcGQ7CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLAogCQkJICAgIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLApAQCAtNDAwLDYgKzQwNCwxNSBAQAogLyogY29udHJvbHMgZm9yIHRlc3QgbW9kZSAqLwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAorI2RlZmluZSBDWFRfRUFQRF9TV0lUQ0goeG5hbWUsIG5pZCwgbWFzaykgXAorCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IDAsICBcCisJICAuaW5mbyA9IGN4dF9lYXBkX2luZm8sIFwKKwkgIC5nZXQgPSBjeHRfZWFwZF9nZXQsIFwKKwkgIC5wdXQgPSBjeHRfZWFwZF9wdXQsIFwKKwkgIC5wcml2YXRlX3ZhbHVlID0gbmlkIHwgKG1hc2s8PDE2KSB9CisKKworCiBzdGF0aWMgaW50IGNvbmV4YW50X2NoX21vZGVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKQEAgLTQ5Miw3ICs1MDUsNyBAQAogCSAgLmdldCA9IGN4dF9ncGlvX2RhdGFfZ2V0LCBcCiAJICAucHV0ID0gY3h0X2dwaW9fZGF0YV9wdXQsIFwKIAkgIC5wcml2YXRlX3ZhbHVlID0gbmlkIHwgKG1hc2s8PDE2KSB9Ci0KKyNpZiAwCiBzdGF0aWMgaW50IGN4dF9zcGRpZl9jdHJsX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKQEAgLTU0Nyw3ICs1NjAsNyBAQAogCSAgLmdldCA9IGN4dF9zcGRpZl9jdHJsX2dldCwgXAogCSAgLnB1dCA9IGN4dF9zcGRpZl9jdHJsX3B1dCwgXAogCSAgLnByaXZhdGVfdmFsdWUgPSBuaWQgfCAobWFzazw8MTYpIH0KLQorI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX1NORF9ERUJVRyAqLwogCiAvKiBDb25leGFudCA1MDQ1IHNwZWNpZmljICovCkBAIC01NjQsNyArNTc3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ1X2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAyLAogCS5pdGVtcyA9IHsKLQkJeyAiRXh0TWljIiwgMHgxIH0sCisJCXsgIkludE1pYyIsIDB4MSB9LAogCQl7ICJMaW5lSW4iLCAweDIgfSwKIAl9CiB9OwpAQCAtNTc1LDE1ICs1ODgsMjAgQEAKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBiaXRzOwogCi0JaWYgKCFjb25leGFudF9lYXBkX3B1dChrY29udHJvbCwgdWNvbnRyb2wpKQorCWlmICghY3h0X2VhcGRfcHV0KGtjb250cm9sLCB1Y29udHJvbCkpCiAJCXJldHVybiAwOwogCi0JLyogdG9nZ2xlIEhQIG11dGUgYXBwcm9wcmlhdGVseSAqLwotCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxMSwgMCwgSERBX09VVFBVVCwgMCwKLQkJCQkgMHg4MCwgc3BlYy0+Y3VyX2VhcGQgPyAwIDogMHg4MCk7Ci0Jc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDExLCAxLCBIREFfT1VUUFVULCAwLAotCQkJCSAweDgwLCBzcGVjLT5jdXJfZWFwZCA/IDAgOiAweDgwKTsKKwkvKiB0b2dnbGUgaW50ZXJuYWwgc3BlYWtlcnMgbXV0ZSBkZXBlbmRpbmcgb2YgcHJlc2VuY2Ugb2YKKwkgKiB0aGUgaGVhZHBob25lIGphY2sKKwkgKi8KKwliaXRzID0gKCFzcGVjLT5ocF9wcmVzZW50ICYmIHNwZWMtPmN1cl9lYXBkKSA/IDAgOiAweDgwOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxMCwgMCwgSERBX09VVFBVVCwgMCwgMHg4MCwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDEwLCAxLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKKwliaXRzID0gc3BlYy0+Y3VyX2VhcGQgPyAwIDogMHg4MDsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTEsIDAsIEhEQV9PVVRQVVQsIDAsIDB4ODAsIGJpdHMpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxMSwgMSwgSERBX09VVFBVVCwgMCwgMHg4MCwgYml0cyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTYxMCwxNCArNjI4LDEzIEBACiAvKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLwogc3RhdGljIHZvaWQgY3h0NTA0NV9ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBiaXRzID0gKHNwZWMtPmhwX3ByZXNlbnQgfHwgIXNwZWMtPmN1cl9lYXBkKSA/IDB4ODAgOiAwOwogCi0JcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMSwgMCwKKwlzcGVjLT5ocF9wcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDExLCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDEwLCAwLCBIREFfT1VUUFVULCAwLAotCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOwotCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxMCwgMSwgSERBX09VVFBVVCwgMCwKLQkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQsIDAsIDB4ODAsIGJpdHMpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxMCwgMSwgSERBX09VVFBVVCwgMCwgMHg4MCwgYml0cyk7CiB9CiAKIC8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KQEAgLTY0MCwyNSArNjU3LDI3IEBACiAJCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCiAJCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKIAl9LAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBWb2x1bWUiLCAweDE3LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgQnlwYXNzIENhcHR1cmUgU3dpdGNoIiwgMHgxNywgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIFZvbHVtZSIsIDB4MTcsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludCBNaWMgU3dpdGNoIiwgMHgxNywgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJFeHQgTWljIFZvbHVtZSIsIDB4MTcsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkV4dCBNaWMgU3dpdGNoIiwgMHgxNywgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAsIEhEQV9JTlBVVCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfZ2V0LAogCQkucHV0ID0gY3h0NTA0NV9ocF9tYXN0ZXJfdm9sX3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTEsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgxMCwgMywgMCwgSERBX09VVFBVVCksCiAJfSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJLmluZm8gPSBjb25leGFudF9lYXBkX2luZm8sCi0JCS5nZXQgPSBjb25leGFudF9lYXBkX2dldCwKKwkJLmluZm8gPSBjeHRfZWFwZF9pbmZvLAorCQkuZ2V0ID0gY3h0X2VhcGRfZ2V0LAogCQkucHV0ID0gY3h0NTA0NV9ocF9tYXN0ZXJfc3dfcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTEsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgxMCwKIAl9LAogCiAJe30KQEAgLTY2OSwyMiArNjg4LDI2IEBACiAJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfEFDX1BJTkNUTF9WUkVGXzUwIH0sCiAJLyogSFAsIEFtcCAgKi8KLQl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCi0JezB4MUEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDF9LAotCXsweDFBLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCSBBQ19BTVBfU0VUX09VVFBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDAwfSwKLQl7MHgxQSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkgQUNfQU1QX1NFVF9PVVRQVVR8QUNfQU1QX1NFVF9SSUdIVHxBQ19BTVBfU0VUX0xFRlR8MHgwM30sCi0JLyogUmVjb3JkIHNlbGVjdG9yOiBGcm9udCBtaWMgKi8KLQl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwM30sCisJezB4MTEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDF9LAogCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCSBBQ19BTVBfU0VUX09VVFBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDAxfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkgQUNfQU1QX1NFVF9PVVRQVVR8QUNfQU1QX1NFVF9SSUdIVHxBQ19BTVBfU0VUX0xFRlR8MHgwMn0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJIEFDX0FNUF9TRVRfT1VUUFVUfEFDX0FNUF9TRVRfUklHSFR8QUNfQU1QX1NFVF9MRUZUfDB4MDN9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCSBBQ19BTVBfU0VUX09VVFBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDA0fSwKKwkvKiBSZWNvcmQgc2VsZWN0b3I6IEludCBtaWMgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkgQUNfQU1QX1NFVF9JTlBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDE3fSwKIAkvKiBTUERJRiByb3V0ZTogUENNICovCiAJeyAweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwIH0sCiAJLyogcGluIHNlbnNpbmcgb24gSFAgYW5kIE1pYyBqYWNrcyAqLwogCXsweDExLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfSFBfRVZFTlR9LAogCS8qIEVBUEQgKi8KLQl7MHgxMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MCB9LCAvKiBkZWZhdWx0IG9uICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDIgfSwgLyogZGVmYXVsdCBvbiAqLyAKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC03MDYsOCArNzI5LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X3Rlc3RfbWl4ZXJbXSA9IHsKIAogCS8qIE91dHB1dCBjb250cm9scyAqLwotCUhEQV9DT0RFQ19WT0xVTUUoIk91dEFtcC0xIFZvbHVtZSIsIDB4MTksIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJPdXRBbXAtMSBTd2l0Y2giLCAweDE5LDB4MDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAogCQpAQCAtNzE1LDYgKzczNiw5IEBACiAJQ1hUX1BJTl9NT0RFKCJIUC1PVVQgcGluIG1vZGUiLCAweDExLCBDWFRfUElOX0RJUl9JTk9VVCksCiAJQ1hUX1BJTl9NT0RFKCJMSU5FMSBwaW4gbW9kZSIsIDB4MTIsIENYVF9QSU5fRElSX0lOT1VUKSwKIAorCS8qIEVBUEQgU3dpdGNoIENvbnRyb2wgKi8KKwlDWFRfRUFQRF9TV0lUQ0goIkV4dGVybmFsIEFtcGxpZmllciIsIDB4MTAsIDB4MCksCisKIAkvKiBMb29wYmFjayBtaXhlciBjb250cm9scyAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIk1JQzEgUGxheWJhY2sgVm9sdW1lIiwgMHgxNywgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTUlDMSBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAweDAxLCBIREFfSU5QVVQpLApAQCAtNzI1LDE3ICs3NDksMTYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAweDA0LCBIREFfSU5QVVQpLAogCi0JLyogQ29udHJvbHMgZm9yIEdQSU8gcGlucywgYXNzdW1pbmcgdGhleSBleGlzdCBhbmQgYXJlIGNvbmZpZ3VyZWQgYXMgb3V0cHV0cyAqLwotCUNYVF9HUElPX0RBVEFfU1dJVENIKCJHUElPIHBpbiAwIiwgMHgwMSwgMHgwMSksCi0jaWYgMCAgIC8qIGxpbWl0IHRoaXMgdG8gb25lIEdQSU8gcGluIGZvciBub3cgKi8JCi0JQ1hUX0dQSU9fREFUQV9TV0lUQ0goIkdQSU8gcGluIDEiLCAweDAxLCAweDAyKSwKLQlDWFRfR1BJT19EQVRBX1NXSVRDSCgiR1BJTyBwaW4gMiIsIDB4MDEsIDB4MDQpLAotCUNYVF9HUElPX0RBVEFfU1dJVENIKCJHUElPIHBpbiAzIiwgMHgwMSwgMHgwOCksCi0jZW5kaWYKLQlDWFRfU1BESUZfQ1RSTF9TV0lUQ0goIlNQRElGIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MDEpLAotCi0JSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE3LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTcsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZS0xIFZvbHVtZSIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZS0xIFN3aXRjaCIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlLTIgVm9sdW1lIiwgMHgxNywgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlLTIgU3dpdGNoIiwgMHgxNywgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUtMyBWb2x1bWUiLCAweDE3LCAweDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUtMyBTd2l0Y2giLCAweDE3LCAweDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZS00IFZvbHVtZSIsIDB4MTcsIDB4MywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZS00IFN3aXRjaCIsIDB4MTcsIDB4MywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlLTUgVm9sdW1lIiwgMHgxNywgMHg0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlLTUgU3dpdGNoIiwgMHgxNywgMHg0LCBIREFfSU5QVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIklucHV0IFNvdXJjZSIsCkBAIC03NDgsMTQgKzc3MSw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDVfdGVzdF9pbml0X3ZlcmJzW10gPSB7Ci0JLyogRW5hYmxlIGFsbCBHUElPcyBhcyBvdXRwdXRzIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBvZiAwICovCi0JezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDBmfSwKLQl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAwfSwKLQl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDBmfSwKLQogCS8qIEVuYWJsZSByZXRhc2tpbmcgcGlucyBhcyBvdXRwdXQsIGluaXRpYWxseSB3aXRob3V0IHBvd2VyIGFtcCAqLwogCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAotCXsweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCiAKIAkvKiBEaXNhYmxlIGRpZ2l0YWwgKFNQRElGKSBwaW5zIGluaXRpYWxseSwgYnV0IHVzZXJzIGNhbiBlbmFibGUKIAkgKiB0aGVtIHZpYSBhIG1peGVyIHN3aXRjaC4gIEluIHRoZSBjYXNlIG9mIFNQRElGLW91dCwgdGhpcyBpbml0dmVyYgpAQCAtODIzLDYgKzg0MSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDQ1X2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGI3LCAiSFAgRFY2MDAwWiIsIENYVDUwNDVfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGJiLCAiSFAgRFY4MDAwIiwgQ1hUNTA0NV9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAweDEwYWQsICJGdWppdHN1IFNpMTUyMCIsIENYVDUwNDVfTEFQVE9QKSwKIAl7fQogfTsKIApAQCAtODgwLDExICs5MDAsMTEgQEAKIAogCiAvKiBDb25leGFudCA1MDQ3IHNwZWNpZmljICovCisjZGVmaW5lIENYVDUwNDdfU1BESUZfT1VUCTB4MTEKIAotc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2RhY19uaWRzWzFdID0geyAweDEwIH07CitzdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfZGFjX25pZHNbMl0gPSB7IDB4MTAsIDB4MWMgfTsKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA0N19hZGNfbmlkc1sxXSA9IHsgMHgxMiB9Owogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2NhcHNyY19uaWRzWzFdID0geyAweDFhIH07Ci0jZGVmaW5lIENYVDUwNDdfU1BESUZfT1VUCTB4MTEKIAogc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGN4dDUwNDdfbW9kZXNbMV0gPSB7CiAJeyAyLCBOVUxMIH0sCkBAIC04OTMsMTUgKzkxMywyMyBAQAogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDdfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDIsCiAJLml0ZW1zID0gewotCQl7ICJFeHRNaWMiLCAweDEgfSwKLQkJeyAiSW50TWljIiwgMHgyIH0sCisJCXsgIkV4dE1pYyIsIDB4MCB9LAorCQl7ICJJbnRNaWMiLCAweDEgfSwKIAl9CiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0N19ocF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMSwKIAkuaXRlbXMgPSB7Ci0JCXsgIkV4dE1pYyIsIDB4MSB9LAorCQl7ICJFeHRNaWMiLCAweDIgfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0N190b3NoaWJhX2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAyLAorCS5pdGVtcyA9IHsKKwkJeyAiRXh0TWljIiwgMHgyIH0sCisJCXsgIkxpbmUtSW4iLCAweDEgfSwKIAl9CiB9OwogCkBAIC05MTEsMjAgKzkzOSwyNCBAQAogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IGJpdHM7CiAKLQlpZiAoIWNvbmV4YW50X2VhcGRfcHV0KGtjb250cm9sLCB1Y29udHJvbCkpCisJaWYgKCFjeHRfZWFwZF9wdXQoa2NvbnRyb2wsIHVjb250cm9sKSkKIAkJcmV0dXJuIDA7CiAKLQkvKiB0b2dnbGUgSFAgbXV0ZSBhcHByb3ByaWF0ZWx5ICovCi0Jc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDEzLCAwLCBIREFfT1VUUFVULCAwLAotCQkJCSAweDgwLCBzcGVjLT5jdXJfZWFwZCA/IDAgOiAweDgwKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTMsIDEsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIDB4ODAsIHNwZWMtPmN1cl9lYXBkID8gMCA6IDB4ODApOworCS8qIHRvZ2dsZSBpbnRlcm5hbCBzcGVha2VycyBtdXRlIGRlcGVuZGluZyBvZiBwcmVzZW5jZSBvZgorCSAqIHRoZSBoZWFkcGhvbmUgamFjaworCSAqLworCWJpdHMgPSAoIXNwZWMtPmhwX3ByZXNlbnQgJiYgc3BlYy0+Y3VyX2VhcGQpID8gMCA6IDB4ODA7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDFkLCAwLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MWQsIDEsIEhEQV9PVVRQVVQsIDAsIDB4ODAsIGJpdHMpOworCWJpdHMgPSBzcGVjLT5jdXJfZWFwZCA/IDAgOiAweDgwOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxMywgMCwgSERBX09VVFBVVCwgMCwgMHg4MCwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDEzLCAxLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKIAlyZXR1cm4gMTsKIH0KIAotI2lmIDAKLS8qIGJpbmQgdm9sdW1lcyBvZiBib3RoIE5JRCAweDEzIGFuZCAweDFkICovCisvKiBiaW5kIHZvbHVtZXMgb2YgYm90aCBOSUQgMHgxMyAoSGVhZHBob25lcykgYW5kIDB4MWQgKFNwZWFrZXJzKSAqLwogc3RhdGljIGludCBjeHQ1MDQ3X2hwX21hc3Rlcl92b2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC05MzIsOSArOTY0LDkgQEAKIAlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CiAJaW50IGNoYW5nZTsKIAotCWNoYW5nZSA9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxYywgMCwgSERBX09VVFBVVCwgMCwKKwljaGFuZ2UgPSBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MWQsIDAsIEhEQV9PVVRQVVQsIDAsCiAJCQkJCSAgMHg3ZiwgdmFscFswXSAmIDB4N2YpOwotCWNoYW5nZSB8PSBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MWMsIDEsIEhEQV9PVVRQVVQsIDAsCisJY2hhbmdlIHw9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxZCwgMSwgSERBX09VVFBVVCwgMCwKIAkJCQkJICAgMHg3ZiwgdmFscFsxXSAmIDB4N2YpOwogCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxMywgMCwgSERBX09VVFBVVCwgMCwKIAkJCQkgMHg3ZiwgdmFscFswXSAmIDB4N2YpOwpAQCAtOTQyLDE5ICs5NzQsMjAgQEAKIAkJCQkgMHg3ZiwgdmFscFsxXSAmIDB4N2YpOwogCXJldHVybiBjaGFuZ2U7CiB9Ci0jZW5kaWYKIAogLyogbXV0ZSBpbnRlcm5hbCBzcGVha2VyIGlmIEhQIGlzIHBsdWdnZWQgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNDdfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgYml0cyA9IHNwZWMtPmhwX3ByZXNlbnQgfHwgIXNwZWMtPmN1cl9lYXBkID8gMHg4MCA6IDA7CiAKLQlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEzLCAwLAorCXNwZWMtPmhwX3ByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTMsIDAsCiAJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MWMsIDAsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIDB4ODAsIHByZXNlbnQgPyAweDgwIDogMCk7Ci0Jc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDFjLCAxLCBIREFfT1VUUFVULCAwLAotCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxZCwgMCwgSERBX09VVFBVVCwgMCwgMHg4MCwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDFkLCAxLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKKwkvKiBNdXRlL1VubXV0ZSBQQ00gMiBmb3IgZ29vZCBtZWFzdXJlIC0gc29tZSBzeXN0ZW1zIG5lZWQgdGhpcyAqLworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxYywgMCwgSERBX09VVFBVVCwgMCwgMHg4MCwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDFjLCAxLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKIH0KIAogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCkBAIC0xMDA5LDEyICsxMDQyLDU1IEBACiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDTSBTd2l0Y2giLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiUENNLTIgVm9sdW1lIiwgMHgxYywgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIlBDTS0yIFN3aXRjaCIsIDB4MWMsIDB4MDAsIEhEQV9PVVRQVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAorCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9pbmZvLAorCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldCwKKwkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3ZvbF9wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTCgweDEzLCAzLCAwLCBIREFfT1VUUFVUKSwKKwl9LAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAotCQkuaW5mbyA9IGNvbmV4YW50X2VhcGRfaW5mbywKLQkJLmdldCA9IGNvbmV4YW50X2VhcGRfZ2V0LAorCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCisJCS5nZXQgPSBjeHRfZWFwZF9nZXQsCisJCS5wdXQgPSBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgxMywKKwl9LAorCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X3Rvc2hpYmFfbWl4ZXJzW10gPSB7CisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAorCQkuaW5mbyA9IGNvbmV4YW50X211eF9lbnVtX2luZm8sCisJCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQKKwl9LAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBWb2x1bWUiLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgQnlwYXNzIENhcHR1cmUgU3dpdGNoIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIlBDTSBTd2l0Y2giLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfaW5mbywKKwkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9nZXQsCisJCS5wdXQgPSBjeHQ1MDQ3X2hwX21hc3Rlcl92b2xfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgxMywgMywgMCwgSERBX09VVFBVVCksCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBjeHRfZWFwZF9pbmZvLAorCQkuZ2V0ID0gY3h0X2VhcGRfZ2V0LAogCQkucHV0ID0gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0LAogCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTMsCiAJfSwKQEAgLTEwNDAsOCArMTExNiw4IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY29uZXhhbnRfZWFwZF9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfZWFwZF9nZXQsCisJCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKKwkJLmdldCA9IGN4dF9lYXBkX2dldCwKIAkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCwKIAkJLnByaXZhdGVfdmFsdWUgPSAweDEzLAogCX0sCkBAIC0xMDUzLDE5ICsxMTI5LDIzIEBACiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfEFDX1BJTkNUTF9WUkVGXzUwIH0sCiAJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfEFDX1BJTkNUTF9WUkVGXzUwIH0sCi0JLyogSFAsIEFtcCAgKi8KKwkvKiBIUCwgQW1wLCBTcGVha2VyICAqLwogCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7MHgxQSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwM30sCisJezB4MUEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDB9LAogCXsweDFBLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCSBBQ19BTVBfU0VUX09VVFBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDAwfSwKIAl7MHgxQSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkgQUNfQU1QX1NFVF9PVVRQVVR8QUNfQU1QX1NFVF9SSUdIVHxBQ19BTVBfU0VUX0xFRlR8MHgwM30sCisJezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MH0sCiAJLyogUmVjb3JkIHNlbGVjdG9yOiBGcm9udCBtaWMgKi8KIAl7MHgxMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwM30sCiAJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJIEFDX0FNUF9TRVRfSU5QVVR8QUNfQU1QX1NFVF9SSUdIVHxBQ19BTVBfU0VUX0xFRlR8MHgxN30sCiAJLyogU1BESUYgcm91dGU6IFBDTSAqLwogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MCB9LAorCS8qIEVuYWJsZSB1bnNvbGljaXRlZCBldmVudHMgKi8KKwl7MHgxMywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX0hQX0VWRU5UfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX01JQ19FVkVOVH0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTA3NSwxNCArMTE1NSwyNCBAQAogCS8qIHBpbiBzZW5zaW5nIG9uIEhQIGFuZCBNaWMgamFja3MgKi8KIAl7MHgxMywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX0hQX0VWRU5UfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX01JQ19FVkVOVH0sCisJLyogU3BlYWtlciByb3V0aW5nICovCisJezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MX0sCisJLyogQ2hhbmdlIGRlZmF1bHQgdG8gRXh0TWljIGZvciByZWNvcmRpbmcgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgyfSwKIAl7fQogfTsKIAogLyogY29uZmlndXJhdGlvbiBmb3IgSFAgTGFwdG9wcyAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ3X2hwX2luaXRfdmVyYnNbXSA9IHsKLQkvKiBwaW4gc2Vuc2luZyBvbiBIUCBhbmQgTWljIGphY2tzICovCisJLyogcGluIHNlbnNpbmcgb24gSFAgamFjayAqLwogCXsweDEzLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfSFBfRVZFTlR9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfTUlDX0VWRU5UfSwKKwkvKiBSZWNvcmQgc2VsZWN0b3I6IEV4dCBNaWMgKi8KKwl7MHgxMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwM30sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDJ9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCSBBQ19BTVBfU0VUX0lOUFVUfEFDX0FNUF9TRVRfUklHSFR8QUNfQU1QX1NFVF9MRUZUfDB4MTd9LAorCS8qIFNwZWFrZXIgcm91dGluZyAqLworCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDF9LAogCXt9CiB9OwogCkBAIC0xMDkxLDUzICsxMTgxLDU2IEBACiAgKi8KICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0N190ZXN0X2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSA1LAorCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKLQkJeyAiTUlYRVIiLCAweDAgfSwKLQkJeyAiTElORTEgcGluIiwgMHgxIH0sCi0JCXsgIk1JQzEgcGluIiwgMHgyIH0sCi0JCXsgIk1JQzIgcGluIiwgMHgzIH0sCi0JCXsgIkNEIHBpbiIsIDB4NCB9LAorCQl7ICJMSU5FMSBwaW4iLCAweDAgfSwKKwkJeyAiTUlDMSBwaW4iLCAweDEgfSwKKwkJeyAiTUlDMiBwaW4iLCAweDIgfSwKKwkJeyAiQ0QgcGluIiwgMHgzIH0sCiAgICAgICAgIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N190ZXN0X21peGVyW10gPSB7CiAKIAkvKiBPdXRwdXQgb25seSBjb250cm9scyAqLwotCUhEQV9DT0RFQ19WT0xVTUUoIk91dEFtcC0xIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJPdXRBbXAtMSBTd2l0Y2giLCAweDEwLDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk91dEFtcC0yIFZvbHVtZSIsIDB4MWMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJPdXRBbXAtMiBTd2l0Y2giLCAweDFjLCAweDAwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJPdXRBbXAtMSBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJPdXRBbXAtMSBTd2l0Y2giLCAweDEwLDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiT3V0QW1wLTIgVm9sdW1lIiwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiT3V0QW1wLTIgU3dpdGNoIiwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkUGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZFBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZTEtT3V0IFBsYXliYWNrIFZvbHVtZSIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUxLU91dCBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUyLU91dCBQbGF5YmFjayBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lMi1PdXQgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKIAogCS8qIE1vZGVzIGZvciByZXRhc2tpbmcgcGluIHdpZGdldHMgKi8KIAlDWFRfUElOX01PREUoIkxJTkUxIHBpbiBtb2RlIiwgMHgxNCwgQ1hUX1BJTl9ESVJfSU5PVVQpLAogCUNYVF9QSU5fTU9ERSgiTUlDMSBwaW4gbW9kZSIsIDB4MTUsIENYVF9QSU5fRElSX0lOT1VUKSwKIAorCS8qIEVBUEQgU3dpdGNoIENvbnRyb2wgKi8KKwlDWFRfRUFQRF9TV0lUQ0goIkV4dGVybmFsIEFtcGxpZmllciIsIDB4MTMsIDB4MCksCisKIAkvKiBMb29wYmFjayBtaXhlciBjb250cm9scyAqLwotCUhEQV9DT0RFQ19WT0xVTUUoIk1JQzEgUGxheWJhY2sgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTUlDMSBQbGF5YmFjayBTd2l0Y2giLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1JQzIgUGxheWJhY2sgVm9sdW1lIiwgMHgxOSwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTUlDMiBQbGF5YmFjayBTd2l0Y2giLCAweDE5LCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkxJTkUgUGxheWJhY2sgVm9sdW1lIiwgMHgxOSwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTElORSBQbGF5YmFjayBTd2l0Y2giLCAweDE5LCAweDAxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MTksIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MTksIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTUlDMSBQbGF5YmFjayBWb2x1bWUiLCAweDEyLCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNSUMxIFBsYXliYWNrIFN3aXRjaCIsIDB4MTIsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTUlDMiBQbGF5YmFjayBWb2x1bWUiLCAweDEyLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNSUMyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTElORSBQbGF5YmFjayBWb2x1bWUiLCAweDEyLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxJTkUgUGxheWJhY2sgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MTIsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MTIsIDB4MDQsIEhEQV9JTlBVVCksCiAKLSNpZiAwICAgCi0JLyogQ29udHJvbHMgZm9yIEdQSU8gcGlucywgYXNzdW1pbmcgdGhleSBleGlzdCBhbmQgYXJlIGNvbmZpZ3VyZWQgYXMgb3V0cHV0cyAqLwotCUNYVF9HUElPX0RBVEFfU1dJVENIKCJHUElPIHBpbiAwIiwgMHgwMSwgMHgwMSksCi0JQ1hUX0dQSU9fREFUQV9TV0lUQ0goIkdQSU8gcGluIDEiLCAweDAxLCAweDAyKSwKLQlDWFRfR1BJT19EQVRBX1NXSVRDSCgiR1BJTyBwaW4gMiIsIDB4MDEsIDB4MDQpLAotCUNYVF9HUElPX0RBVEFfU1dJVENIKCJHUElPIHBpbiAzIiwgMHgwMSwgMHgwOCksCi0jZW5kaWYKLQlDWFRfU1BESUZfQ1RSTF9TV0lUQ0goIlNQRElGIFBsYXliYWNrIFN3aXRjaCIsIDB4MTgsIDB4MDEpLAotCi0JSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE5LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTksIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZS0xIFZvbHVtZSIsIDB4MTksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZS0xIFN3aXRjaCIsIDB4MTksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlLTIgVm9sdW1lIiwgMHgxOSwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlLTIgU3dpdGNoIiwgMHgxOSwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUtMyBWb2x1bWUiLCAweDE5LCAweDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUtMyBTd2l0Y2giLCAweDE5LCAweDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZS00IFZvbHVtZSIsIDB4MTksIDB4MywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZS00IFN3aXRjaCIsIDB4MTksIDB4MywgSERBX0lOUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLApAQCAtMTE0NSwxNiArMTIzOCwxOCBAQAogCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAogCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0LAogCX0sCisgICAgICAgLyogQ29udHJvbHMgZm9yIEdQSU8gcGlucywgYXNzdW1pbmcgdGhleSBleGlzdCBhbmQgYXJlIGNvbmZpZ3VyZWQKKwkqIGFzIG91dHB1dHMKKwkqLworCUNYVF9HUElPX0RBVEFfU1dJVENIKCJHUElPIHBpbiAwIiwgMHgwMSwgMHgwMSksCisJQ1hUX0dQSU9fREFUQV9TV0lUQ0goIkdQSU8gcGluIDEiLCAweDAxLCAweDAyKSwKKwlDWFRfR1BJT19EQVRBX1NXSVRDSCgiR1BJTyBwaW4gMiIsIDB4MDEsIDB4MDQpLAorCUNYVF9HUElPX0RBVEFfU1dJVENIKCJHUElPIHBpbiAzIiwgMHgwMSwgMHgwOCksCiAKIAl7IH0gLyogZW5kICovCiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDdfdGVzdF9pbml0X3ZlcmJzW10gPSB7Ci0JLyogRW5hYmxlIGFsbCBHUElPcyBhcyBvdXRwdXRzIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBvZiAwICovCi0JezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDBmfSwKLQl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAwfSwKLQl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDBmfSwKLQogCS8qIEVuYWJsZSByZXRhc2tpbmcgcGlucyBhcyBvdXRwdXQsIGluaXRpYWxseSB3aXRob3V0IHBvd2VyIGFtcCAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LApAQCAtMTIxNSw3ICsxMzEwLDYgQEAKIHsKIAljb25leGFudF9pbml0KGNvZGVjKTsKIAljeHQ1MDQ3X2hwX2F1dG9tdXRlKGNvZGVjKTsKLQljeHQ1MDQ3X2hwX2F1dG9taWMoY29kZWMpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjQyLDYgKzEzMzYsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGN4dDUwNDdfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYTAsICJIUCBEVjEwMDAiLCBDWFQ1MDQ3X0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiMiwgIkhQIERWMjAwMFQvRFYzMDAwVCIsIENYVDUwNDdfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGI1LCAiSFAgRFYyMDAwWiIsIENYVDUwNDdfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGE1LCAiSFAgRFY1MjAwVC9EVjgwMDBUIiwgQ1hUNTA0N19MQVBUT1BfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMzEsICJUb3NoaWJhIFAxMDAiLCBDWFQ1MDQ3X0xBUFRPUF9FQVBEKSwKIAl7fQpAQCAtMTI5MSw4ICsxMzg2LDEwIEBACiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNDdfaHBfaW5pdDsKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDQ3X0xBUFRPUF9FQVBEOgorCQlzcGVjLT5pbnB1dF9tdXggPSAmY3h0NTA0N190b3NoaWJhX2NhcHR1cmVfc291cmNlOwogCQlzcGVjLT5udW1faW5pdF92ZXJicyA9IDI7CiAJCXNwZWMtPmluaXRfdmVyYnNbMV0gPSBjeHQ1MDQ3X3Rvc2hpYmFfaW5pdF92ZXJiczsKKwkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N190b3NoaWJhX21peGVyczsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWNhc2UgQ1hUNTA0N19URVNUOgpAQCAtMTMwNSw3ICsxNDAyLDkgQEAKIH0KIAogc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfY29uZXhhbnRbXSA9IHsKLQl7IC5pZCA9IDB4MTRmMTUwNDUsIC5uYW1lID0gIkNYVDUwNDUiLCAucGF0Y2ggPSBwYXRjaF9jeHQ1MDQ1IH0sCi0JeyAuaWQgPSAweDE0ZjE1MDQ3LCAubmFtZSA9ICJDWFQ1MDQ3IiwgLnBhdGNoID0gcGF0Y2hfY3h0NTA0NyB9LAorCXsgLmlkID0gMHgxNGYxNTA0NSwgLm5hbWUgPSAiQ1gyMDU0OSAoVmVuaWNlKSIsCisJICAucGF0Y2ggPSBwYXRjaF9jeHQ1MDQ1IH0sCisJeyAuaWQgPSAweDE0ZjE1MDQ3LCAubmFtZSA9ICJDWDIwNTUxIChXYWlraWtpKSIsCisJICAucGF0Y2ggPSBwYXRjaF9jeHQ1MDQ3IH0sCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCA2ZjRhMzkyLi5mN2VmOWM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC00NTcsNiArNDU3LDEwIEBACiAJCSAgICAgICJEZWxsIExhdGl0dWRlIDEyMEwiLCBTVEFDX1JFRiksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFjYywKIAkJICAgICAgIkRlbGwgTGF0aXR1ZGUgRDgyMCIsIFNUQUNfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWNkLAorCQkgICAgICAiRGVsbCBJbnNwaXJvbiBFMTcwNS85NDAwIiwgU1RBQ19SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAxY2UsCisJCSAgICAgICJEZWxsIFhQUyBNMTcxMCIsIFNUQUNfUkVGKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC0xODAwLDYgKzE4MDQsNyBAQAogCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBTVEFDXzkyNXhfTU9ERUxTLAogCQkJCQkJCXN0YWM5MjV4X21vZGVscywKIAkJCQkJCQlzdGFjOTI1eF9jZmdfdGJsKTsKKyBhZ2FpbjoKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgewogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzkyNXgsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwogCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwpAQCAtMTgyNSw2ICsxODMwLDE1IEBACiAJc3BlYy0+bWl4ZXIgPSBzdGFjOTI1eF9taXhlcjsKIAogCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDgsIDB4Nyk7CisJaWYgKCFlcnIpIHsKKwkJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhkYV9jb2RlYzogTm8gYXV0by1jb25maWcgaXMgIgorCQkJICAgICAgICJhdmFpbGFibGUsIGRlZmF1bHQgdG8gbW9kZWw9cmVmXG4iKTsKKwkJCXNwZWMtPmJvYXJkX2NvbmZpZyA9IFNUQUNfOTI1eF9SRUY7CisJCQlnb3RvIGFnYWluOworCQl9CisJCWVyciA9IC1FSU5WQUw7CisJfQogCWlmIChlcnIgPCAwKSB7CiAJCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwogCQlyZXR1cm4gZXJyOwpAQCAtMTg1MCw2ICsxODY0LDcgQEAKIAlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185MjJYX01PREVMUywKIAkJCQkJCQlzdGFjOTIyeF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyMnhfY2ZnX3RibCk7CisgYWdhaW46CiAJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjJ4LCAiCiAJCQkidXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CkBAIC0xODc1LDYgKzE4OTAsMTUgQEAKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCQogCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDA4LCAweDA5KTsKKwlpZiAoIWVycikgeworCQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGRhX2NvZGVjOiBObyBhdXRvLWNvbmZpZyBpcyAiCisJCQkgICAgICAgImF2YWlsYWJsZSwgZGVmYXVsdCB0byBtb2RlbD1yZWZcbiIpOworCQkJc3BlYy0+Ym9hcmRfY29uZmlnID0gU1RBQ19EOTQ1X1JFRjsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJZXJyID0gLUVJTlZBTDsKKwl9CiAJaWYgKGVyciA8IDApIHsKIAkJc3RhYzkyeHhfZnJlZShjb2RlYyk7CiAJCXJldHVybiBlcnI7CkBAIC0xOTAzLDYgKzE5MjcsNyBAQAogCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBTVEFDXzkyN1hfTU9ERUxTLAogCQkJCQkJCXN0YWM5Mjd4X21vZGVscywKIAkJCQkJCQlzdGFjOTI3eF9jZmdfdGJsKTsKKyBhZ2FpbjoKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgewogICAgICAgICAgICAgICAgIHNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTI3eCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CiAJCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7CkBAIC0xOTQ1LDYgKzE5NzAsMTUgQEAKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCiAJZXJyID0gc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoY29kZWMsIDB4MWUsIDB4MjApOworCWlmICghZXJyKSB7CisJCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZGFfY29kZWM6IE5vIGF1dG8tY29uZmlnIGlzICIKKwkJCSAgICAgICAiYXZhaWxhYmxlLCBkZWZhdWx0IHRvIG1vZGVsPXJlZlxuIik7CisJCQlzcGVjLT5ib2FyZF9jb25maWcgPSBTVEFDX0Q5NjVfUkVGOworCQkJZ290byBhZ2FpbjsKKwkJfQorCQllcnIgPSAtRUlOVkFMOworCX0KIAlpZiAoZXJyIDwgMCkgewogCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKIAkJcmV0dXJuIGVycjsKQEAgLTE5NzAsNiArMjAwNCw3IEBACiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTIwNV9NT0RFTFMsCiAJCQkJCQkJc3RhYzkyMDVfbW9kZWxzLAogCQkJCQkJCXN0YWM5MjA1X2NmZ190YmwpOworIGFnYWluOgogCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIwNSwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CiAJCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7CkBAIC0yMDA4LDYgKzIwNDMsMTUgQEAKIAkJCSAgICBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDAwMDAwMDEpOwogCiAJZXJyID0gc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoY29kZWMsIDB4MWYsIDB4MjApOworCWlmICghZXJyKSB7CisJCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZGFfY29kZWM6IE5vIGF1dG8tY29uZmlnIGlzICIKKwkJCSAgICAgICAiYXZhaWxhYmxlLCBkZWZhdWx0IHRvIG1vZGVsPXJlZlxuIik7CisJCQlzcGVjLT5ib2FyZF9jb25maWcgPSBTVEFDXzkyMDVfUkVGOworCQkJZ290byBhZ2FpbjsKKwkJfQorCQllcnIgPSAtRUlOVkFMOworCX0KIAlpZiAoZXJyIDwgMCkgewogCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdDkxL2F0OTEtaTJzLmMgYi9zb3VuZC9zb2MvYXQ5MS9hdDkxLWkycy5jCmluZGV4IGZjYzU0NGEuLjlmYzBjMDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdDkxL2F0OTEtaTJzLmMKKysrIGIvc291bmQvc29jL2F0OTEvYXQ5MS1pMnMuYwpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvYXRtZWxfcGRjLmg+CisKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0yOSw3ICszMSw2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfc3NjLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9wZGMuaD4KIAogI2luY2x1ZGUgImF0OTEtcGNtLmgiCiAjaW5jbHVkZSAiYXQ5MS1pMnMuaCIKQEAgLTUxLDE3ICs1MiwxNyBAQAogICogU1NDIFBEQyByZWdpc3RlcnMgcmVxdWlyZWQgYnkgdGhlIFBDTSBETUEgZW5naW5lLgogICovCiBzdGF0aWMgc3RydWN0IGF0OTFfcGRjX3JlZ3MgcGRjX3R4X3JlZyA9IHsKLQkueHByCQk9IEFUOTFfUERDX1RQUiwKLQkueGNyCQk9IEFUOTFfUERDX1RDUiwKLQkueG5wcgkJPSBBVDkxX1BEQ19UTlBSLAotCS54bmNyCQk9IEFUOTFfUERDX1ROQ1IsCisJLnhwcgkJPSBBVE1FTF9QRENfVFBSLAorCS54Y3IJCT0gQVRNRUxfUERDX1RDUiwKKwkueG5wcgkJPSBBVE1FTF9QRENfVE5QUiwKKwkueG5jcgkJPSBBVE1FTF9QRENfVE5DUiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXQ5MV9wZGNfcmVncyBwZGNfcnhfcmVnID0gewotCS54cHIJCT0gQVQ5MV9QRENfUlBSLAotCS54Y3IJCT0gQVQ5MV9QRENfUkNSLAotCS54bnByCQk9IEFUOTFfUERDX1JOUFIsCi0JLnhuY3IJCT0gQVQ5MV9QRENfUk5DUiwKKwkueHByCQk9IEFUTUVMX1BEQ19SUFIsCisJLnhjcgkJPSBBVE1FTF9QRENfUkNSLAorCS54bnByCQk9IEFUTUVMX1BEQ19STlBSLAorCS54bmNyCQk9IEFUTUVMX1BEQ19STkNSLAogfTsKIAogLyoKQEAgLTcyLDggKzczLDggQEAKIAkuc3NjX2Rpc2FibGUJPSBBVDkxX1NTQ19UWERJUywKIAkuc3NjX2VuZHgJPSBBVDkxX1NTQ19FTkRUWCwKIAkuc3NjX2VuZGJ1Zgk9IEFUOTFfU1NDX1RYQlVGRSwKLQkucGRjX2VuYWJsZQk9IEFUOTFfUERDX1RYVEVOLAotCS5wZGNfZGlzYWJsZQk9IEFUOTFfUERDX1RYVERJUywKKwkucGRjX2VuYWJsZQk9IEFUTUVMX1BEQ19UWFRFTiwKKwkucGRjX2Rpc2FibGUJPSBBVE1FTF9QRENfVFhURElTLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdDkxX3NzY19tYXNrIHNzY19yeF9tYXNrID0gewpAQCAtODEsOCArODIsOCBAQAogCS5zc2NfZGlzYWJsZQk9IEFUOTFfU1NDX1JYRElTLAogCS5zc2NfZW5keAk9IEFUOTFfU1NDX0VORFJYLAogCS5zc2NfZW5kYnVmCT0gQVQ5MV9TU0NfUlhCVUZGLAotCS5wZGNfZW5hYmxlCT0gQVQ5MV9QRENfUlhURU4sCi0JLnBkY19kaXNhYmxlCT0gQVQ5MV9QRENfUlhURElTLAorCS5wZGNfZW5hYmxlCT0gQVRNRUxfUERDX1JYVEVOLAorCS5wZGNfZGlzYWJsZQk9IEFUTUVMX1BEQ19SWFRESVMsCiB9OwogCiAKQEAgLTUwOCwxNCArNTA5LDE0IEBACiAJCS8qIFJlc2V0IHRoZSBTU0MgYW5kIGl0cyBQREMgcmVnaXN0ZXJzICovCiAJCWF0OTFfc3NjX3dyaXRlKHNzY19wLT5zc2MuYmFzZSArIEFUOTFfU1NDX0NSLCBBVDkxX1NTQ19TV1JTVCk7CiAKLQkJYXQ5MV9zc2Nfd3JpdGUoc3NjX3AtPnNzYy5iYXNlICsgQVQ5MV9QRENfUlBSLCAwKTsKLQkJYXQ5MV9zc2Nfd3JpdGUoc3NjX3AtPnNzYy5iYXNlICsgQVQ5MV9QRENfUkNSLCAwKTsKLQkJYXQ5MV9zc2Nfd3JpdGUoc3NjX3AtPnNzYy5iYXNlICsgQVQ5MV9QRENfUk5QUiwgMCk7Ci0JCWF0OTFfc3NjX3dyaXRlKHNzY19wLT5zc2MuYmFzZSArIEFUOTFfUERDX1JOQ1IsIDApOwotCQlhdDkxX3NzY193cml0ZShzc2NfcC0+c3NjLmJhc2UgKyBBVDkxX1BEQ19UUFIsIDApOwotCQlhdDkxX3NzY193cml0ZShzc2NfcC0+c3NjLmJhc2UgKyBBVDkxX1BEQ19UQ1IsIDApOwotCQlhdDkxX3NzY193cml0ZShzc2NfcC0+c3NjLmJhc2UgKyBBVDkxX1BEQ19UTlBSLCAwKTsKLQkJYXQ5MV9zc2Nfd3JpdGUoc3NjX3AtPnNzYy5iYXNlICsgQVQ5MV9QRENfVE5DUiwgMCk7CisJCWF0OTFfc3NjX3dyaXRlKHNzY19wLT5zc2MuYmFzZSArIEFUTUVMX1BEQ19SUFIsIDApOworCQlhdDkxX3NzY193cml0ZShzc2NfcC0+c3NjLmJhc2UgKyBBVE1FTF9QRENfUkNSLCAwKTsKKwkJYXQ5MV9zc2Nfd3JpdGUoc3NjX3AtPnNzYy5iYXNlICsgQVRNRUxfUERDX1JOUFIsIDApOworCQlhdDkxX3NzY193cml0ZShzc2NfcC0+c3NjLmJhc2UgKyBBVE1FTF9QRENfUk5DUiwgMCk7CisJCWF0OTFfc3NjX3dyaXRlKHNzY19wLT5zc2MuYmFzZSArIEFUTUVMX1BEQ19UUFIsIDApOworCQlhdDkxX3NzY193cml0ZShzc2NfcC0+c3NjLmJhc2UgKyBBVE1FTF9QRENfVENSLCAwKTsKKwkJYXQ5MV9zc2Nfd3JpdGUoc3NjX3AtPnNzYy5iYXNlICsgQVRNRUxfUERDX1ROUFIsIDApOworCQlhdDkxX3NzY193cml0ZShzc2NfcC0+c3NjLmJhc2UgKyBBVE1FTF9QRENfVE5DUiwgMCk7CiAKIAkJaWYgKChyZXQgPSByZXF1ZXN0X2lycShzc2NfcC0+c3NjLnBpZCwgYXQ5MV9pMnNfaW50ZXJydXB0LAogCQkJCQkwLCBzc2NfcC0+bmFtZSwgc3NjX3ApKSA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdDkxL2F0OTEtcGNtLmMgYi9zb3VuZC9zb2MvYXQ5MS9hdDkxLXBjbS5jCmluZGV4IGU4OGIxMmUuLmIzOWI5NWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdDkxL2F0OTEtcGNtLmMKKysrIGIvc291bmQvc29jL2F0OTEvYXQ5MS1wY20uYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWVsX3BkYy5oPgogCiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtMzAsNyArMzEsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3NzYy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcGRjLmg+CiAKICNpbmNsdWRlICJhdDkxLXBjbS5oIgogCkBAIC04Myw3ICs4Myw3IEBACiAJCQlwYXJhbXMtPm5hbWUsIHNzY19zciwgY291bnQpOwogCiAJCS8qIHJlLXN0YXJ0IHRoZSBQREMgKi8KLQkJYXQ5MV9zc2Nfd3JpdGUocGFyYW1zLT5zc2NfYmFzZSArIEFUOTFfUERDX1BUQ1IsIHBhcmFtcy0+bWFzay0+cGRjX2Rpc2FibGUpOworCQlhdDkxX3NzY193cml0ZShwYXJhbXMtPnNzY19iYXNlICsgQVRNRUxfUERDX1BUQ1IsIHBhcmFtcy0+bWFzay0+cGRjX2Rpc2FibGUpOwogCiAJCXBydGQtPnBlcmlvZF9wdHIgKz0gcHJ0ZC0+cGVyaW9kX3NpemU7CiAJCWlmIChwcnRkLT5wZXJpb2RfcHRyID49IHBydGQtPmRtYV9idWZmZXJfZW5kKSB7CkBAIC05NCw3ICs5NCw3IEBACiAJCWF0OTFfc3NjX3dyaXRlKHBhcmFtcy0+c3NjX2Jhc2UgKyBwYXJhbXMtPnBkYy0+eGNyLAogCQkJCXBydGQtPnBlcmlvZF9zaXplIC8gcGFyYW1zLT5wZGNfeGZlcl9zaXplKTsKIAotCQlhdDkxX3NzY193cml0ZShwYXJhbXMtPnNzY19iYXNlICsgQVQ5MV9QRENfUFRDUiwgcGFyYW1zLT5tYXNrLT5wZGNfZW5hYmxlKTsKKwkJYXQ5MV9zc2Nfd3JpdGUocGFyYW1zLT5zc2NfYmFzZSArIEFUTUVMX1BEQ19QVENSLCBwYXJhbXMtPm1hc2stPnBkY19lbmFibGUpOwogCX0KIAogCWlmIChzc2Nfc3IgJiBwYXJhbXMtPm1hc2stPnNzY19lbmR4KSB7CkBAIC0xNDMsNyArMTQzLDcgQEAKIAlzdHJ1Y3QgYXQ5MV9wY21fZG1hX3BhcmFtcyAqcGFyYW1zID0gcHJ0ZC0+cGFyYW1zOwogCiAJaWYgKHBhcmFtcyAhPSBOVUxMKSB7Ci0JCWF0OTFfc3NjX3dyaXRlKHBhcmFtcy0+c3NjX2Jhc2UgKyBBVDkxX1BEQ19QVENSLCBwYXJhbXMtPm1hc2stPnBkY19kaXNhYmxlKTsKKwkJYXQ5MV9zc2Nfd3JpdGUocGFyYW1zLT5zc2NfYmFzZSArIEFUTUVMX1BEQ19QVENSLCBwYXJhbXMtPm1hc2stPnBkY19kaXNhYmxlKTsKIAkJcHJ0ZC0+cGFyYW1zLT5kbWFfaW50cl9oYW5kbGVyID0gTlVMTDsKIAl9CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogCWF0OTFfc3NjX3dyaXRlKHBhcmFtcy0+c3NjX2Jhc2UgKyBBVDkxX1NTQ19JRFIsCiAJCQlwYXJhbXMtPm1hc2stPnNzY19lbmR4IHwgcGFyYW1zLT5tYXNrLT5zc2NfZW5kYnVmKTsKIAotCWF0OTFfc3NjX3dyaXRlKHBhcmFtcy0+c3NjX2Jhc2UgKyBBVDkxX1BEQ19QVENSLCBwYXJhbXMtPm1hc2stPnBkY19kaXNhYmxlKTsKKwlhdDkxX3NzY193cml0ZShwYXJhbXMtPnNzY19iYXNlICsgQVRNRUxfUERDX1BUQ1IsIHBhcmFtcy0+bWFzay0+cGRjX2Rpc2FibGUpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTIsNyArMTkyLDcgQEAKIAkJYXQ5MV9zc2Nfd3JpdGUocGFyYW1zLT5zc2NfYmFzZSArIEFUOTFfU1NDX0lFUiwKIAkJCXBhcmFtcy0+bWFzay0+c3NjX2VuZHggfCBwYXJhbXMtPm1hc2stPnNzY19lbmRidWYpOwogCi0JCWF0OTFfc3NjX3dyaXRlKHBhcmFtcy0+c3NjX2Jhc2UgKyBBVDkxX1BEQ19QVENSLCBwYXJhbXMtPm1hc2stPnBkY19lbmFibGUpOworCQlhdDkxX3NzY193cml0ZShwYXJhbXMtPnNzY19iYXNlICsgQVRNRUxfUERDX1BUQ1IsIHBhcmFtcy0+bWFzay0+cGRjX2VuYWJsZSk7CiAKIAkJREJHKCJzcj0lbHggaW1yPSVseFxuIiwgYXQ5MV9zc2NfcmVhZChwYXJhbXMtPnNzY19iYXNlICsgQVQ5MV9TU0NfU1IpLAogCQkJCQlhdDkxX3NzY19yZWFkKHBhcmFtcy0+c3NjX2Jhc2UgKyBBVDkxX1NTQ19JRVIpKTsKQEAgLTIwMSwxMiArMjAxLDEyIEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6Ci0JCWF0OTFfc3NjX3dyaXRlKHBhcmFtcy0+c3NjX2Jhc2UgKyBBVDkxX1BEQ19QVENSLCBwYXJhbXMtPm1hc2stPnBkY19kaXNhYmxlKTsKKwkJYXQ5MV9zc2Nfd3JpdGUocGFyYW1zLT5zc2NfYmFzZSArIEFUTUVMX1BEQ19QVENSLCBwYXJhbXMtPm1hc2stPnBkY19kaXNhYmxlKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6Ci0JCWF0OTFfc3NjX3dyaXRlKHBhcmFtcy0+c3NjX2Jhc2UgKyBBVDkxX1BEQ19QVENSLCBwYXJhbXMtPm1hc2stPnBkY19lbmFibGUpOworCQlhdDkxX3NzY193cml0ZShwYXJhbXMtPnNzY19iYXNlICsgQVRNRUxfUERDX1BUQ1IsIHBhcmFtcy0+bWFzay0+cGRjX2VuYWJsZSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTM3OSw3ICszNzksNyBAQAogCiAJLyogZGlzYWJsZSB0aGUgUERDIGFuZCBzYXZlIHRoZSBQREMgcmVnaXN0ZXJzICovCiAKLQlhdDkxX3NzY193cml0ZShwYXJhbXMtPnNzY19iYXNlICsgQVQ5MV9QRENfUFRDUiwgcGFyYW1zLT5tYXNrLT5wZGNfZGlzYWJsZSk7CisJYXQ5MV9zc2Nfd3JpdGUocGFyYW1zLT5zc2NfYmFzZSArIEFUTUVMX1BEQ19QVENSLCBwYXJhbXMtPm1hc2stPnBkY19kaXNhYmxlKTsKIAogCXBydGQtPnBkY194cHJfc2F2ZSAgPSBhdDkxX3NzY19yZWFkKHBhcmFtcy0+c3NjX2Jhc2UgKyBwYXJhbXMtPnBkYy0+eHByKTsKIAlwcnRkLT5wZGNfeGNyX3NhdmUgID0gYXQ5MV9zc2NfcmVhZChwYXJhbXMtPnNzY19iYXNlICsgcGFyYW1zLT5wZGMtPnhjcik7CkBAIC00MDgsNyArNDA4LDcgQEAKIAlhdDkxX3NzY193cml0ZShwYXJhbXMtPnNzY19iYXNlICsgcGFyYW1zLT5wZGMtPnhucHIsIHBydGQtPnBkY194bnByX3NhdmUpOwogCWF0OTFfc3NjX3dyaXRlKHBhcmFtcy0+c3NjX2Jhc2UgKyBwYXJhbXMtPnBkYy0+eG5jciwgcHJ0ZC0+cGRjX3huY3Jfc2F2ZSk7CiAKLQlhdDkxX3NzY193cml0ZShwYXJhbXMtPnNzY19iYXNlICsgQVQ5MV9QRENfUFRDUiwgcGFyYW1zLT5tYXNrLT5wZGNfZW5hYmxlKTsKKwlhdDkxX3NzY193cml0ZShwYXJhbXMtPnNzY19iYXNlICsgQVRNRUxfUERDX1BUQ1IsIHBhcmFtcy0+bWFzay0+cGRjX2VuYWJsZSk7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCmluZGV4IDc4YWMyNjguLmVjMmEyNzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKQEAgLTEsMTUgKzEsMTUgQEAKIGNvbmZpZyBTTkRfU09DX0FDOTdfQ09ERUMKIAl0cmlzdGF0ZQotCWRlcGVuZHMgU05EX1NPQworCWRlcGVuZHMgb24gU05EX1NPQwogCiBjb25maWcgU05EX1NPQ19XTTg3MzEKIAl0cmlzdGF0ZQotCWRlcGVuZHMgU05EX1NPQworCWRlcGVuZHMgb24gU05EX1NPQwogCiBjb25maWcgU05EX1NPQ19XTTg3NTAKIAl0cmlzdGF0ZQotCWRlcGVuZHMgU05EX1NPQworCWRlcGVuZHMgb24gU05EX1NPQwogCiBjb25maWcgU05EX1NPQ19XTTk3MTIKIAl0cmlzdGF0ZQotCWRlcGVuZHMgU05EX1NPQworCWRlcGVuZHMgb24gU05EX1NPQwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCA0ZGZiOTFkLi5iNmQ4ODYzIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uYworKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwpAQCAtMzI1LDE2ICszMjUsNiBAQAogCX0KIAl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBvZmZzOwogCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBjdHgtPnBhY2tldHM7Ci0jaWYgMCAvLyBmb3IgY2hlY2sKLQlpZiAoISB1cmItPmJhbmR3aWR0aCkgewotCQlpbnQgYnVzdGltZTsKLQkJYnVzdGltZSA9IHVzYl9jaGVja19iYW5kd2lkdGgodXJiLT5kZXYsIHVyYik7Ci0JCWlmIChidXN0aW1lIDwgMCkKLQkJCXJldHVybiBidXN0aW1lOwotCQlwcmludGsoInVyYiAlZDogYmFuZHdpZHRoID0gJWQgKHBhY2tldHMgPSAlZClcbiIsIGN0eC0+aW5kZXgsIGJ1c3RpbWUsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOwotCQl1c2JfY2xhaW1fYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIGJ1c3RpbWUsIDEpOwotCX0KLSNlbmRpZiAvLyBmb3IgY2hlY2sKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYnF1aXJrcy5oIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCmluZGV4IDI1YjRhYjRmLi44NTgyNjIwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNicXVpcmtzLmgKKysrIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCkBAIC05NDgsNiArOTQ4LDI5IEBACiB9LAogCS8qIFRPRE86IGFkZCBFZGlyb2wgTS0xMDBGWCBzdXBwb3J0ICovCiB7CisJLyogaGFzIElEIDB4MDA0ZSB3aGVuIG5vdCBpbiAiQWR2YW5jZWQgRHJpdmVyIiBtb2RlICovCisJVVNCX0RFVklDRSgweDA1ODIsIDB4MDA0YyksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJFRElST0wiLAorCQkucHJvZHVjdF9uYW1lID0gIlBDUi1BIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19DT01QT1NJVEUsCisJCS5kYXRhID0gKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrW10pIHsKKwkJCXsKKwkJCQkuaWZudW0gPSAxLAorCQkJCS50eXBlID0gUVVJUktfQVVESU9fU1RBTkRBUkRfSU5URVJGQUNFCisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IDIsCisJCQkJLnR5cGUgPSBRVUlSS19BVURJT19TVEFOREFSRF9JTlRFUkZBQ0UKKwkJCX0sCisJCQl7CisJCQkJLmlmbnVtID0gLTEKKwkJCX0KKwkJfQorCX0KK30sCit7CiAJLyogaGFzIElEIDB4MDA0ZiB3aGVuIG5vdCBpbiAiQWR2YW5jZWQgRHJpdmVyIiBtb2RlICovCiAJVVNCX0RFVklDRSgweDA1ODIsIDB4MDA0ZCksCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7Cg==