LyoKICoJVmlkZW8gZm9yIExpbnV4IFR3bwogKgogKglBIGdlbmVyaWMgdmlkZW8gZGV2aWNlIGludGVyZmFjZSBmb3IgdGhlIExJTlVYIG9wZXJhdGluZyBzeXN0ZW0KICoJdXNpbmcgYSBzZXQgb2YgZGV2aWNlIHN0cnVjdHVyZXMvdmVjdG9ycyBmb3IgbG93IGxldmVsIG9wZXJhdGlvbnMuCiAqCiAqCVRoaXMgZmlsZSByZXBsYWNlcyB0aGUgdmlkZW9kZXYuYyBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGUKICoJcmVndWxhciBrZXJuZWwgZGlzdHJpYnV0aW9uLgogKgogKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBBdXRob3I6CUJpbGwgRGlya3MgPGJkaXJrc0BwYWNiZWxsLm5ldD4KICoJCWJhc2VkIG9uIGNvZGUgYnkgQWxhbiBDb3gsIDxhbGFuQGN5bXJ1Lm5ldD4KICoKICovCgovKgogKiBWaWRlbyBjYXB0dXJlIGludGVyZmFjZSBmb3IgTGludXgKICoKICoJQSBnZW5lcmljIHZpZGVvIGRldmljZSBpbnRlcmZhY2UgZm9yIHRoZSBMSU5VWCBvcGVyYXRpbmcgc3lzdGVtCiAqCXVzaW5nIGEgc2V0IG9mIGRldmljZSBzdHJ1Y3R1cmVzL3ZlY3RvcnMgZm9yIGxvdyBsZXZlbCBvcGVyYXRpb25zLgogKgogKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogQXV0aG9yOglBbGFuIENveCwgPGFsYW5AcmVkaGF0LmNvbT4KICoKICogRml4ZXM6CiAqLwoKLyoKICogVmlkZW80bGludXggMS8yIGludGVncmF0aW9uIGJ5IEp1c3RpbiBTY2hvZW1hbgogKiA8anVzdGluQHN1bnRpZ2VyLmVlLnVwLmFjLnphPgogKiAyLjQgUFJPQ0ZTIHN1cHBvcnQgcG9ydGVkIGZyb20gMi40IGtlcm5lbHMgYnkKICogIEnxYWtpIEdhcmPtYSBFdHhlYmFycmlhIDxnYXJldHhlQGV1c2thbG5ldC5uZXQ+CiAqIE1ha2VmaWxlIGZpeCBieSAiVy4gTWljaGFlbCBQZXR1bGxvIiA8bWlrZUBmbHluLm9yZz4KICogMi40IGRldmZzIHN1cHBvcnQgcG9ydGVkIGZyb20gMi40IGtlcm5lbHMgYnkKICogIERhbiBNZXJpbGxhdCA8ZGFuQG1lcmlsbGF0Lm9yZz4KICogQWRkZWQgR2VyZCBLbm9ycnMgdjRsMSBlbmhhbmNlbWVudHMgKEp1c3RpbiBTY2hvZW1hbikKICovCgojaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgojaW5jbHVkZSA8bGludXgvbW0uaD4KI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgojaW5jbHVkZSA8bGludXgvZXJybm8uaD4KI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgojaW5jbHVkZSA8YXNtL2lvLmg+CiNpbmNsdWRlIDxhc20vZGl2NjQuaD4KI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CgojaWZkZWYgQ09ORklHX0tNT0QKI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KI2VuZGlmCgojaWYgZGVmaW5lZChDT05GSUdfVVNUKSB8fCBkZWZpbmVkKENPTkZJR19VU1RfTU9EVUxFKQojaW5jbHVkZSA8bGludXgvdXN0Lmg+CiNlbmRpZgoKCiNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgoKTU9EVUxFX0FVVEhPUigiQmlsbCBEaXJrcywgSnVzdGluIFNjaG9lbWFuLCBHZXJkIEtub3JyIik7Ck1PRFVMRV9ERVNDUklQVElPTigibWlzYyBoZWxwZXIgZnVuY3Rpb25zIGZvciB2NGwyIGRldmljZSBkcml2ZXJzIik7Ck1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKCi8qCiAqCiAqCVYgNCBMIDIgICBEIFIgSSBWIEUgUiAgIEggRSBMIFAgRSBSICAgQSBQIEkKICoKICovCgovKgogKiAgVmlkZW8gU3RhbmRhcmQgT3BlcmF0aW9ucyAoY29udHJpYnV0ZWQgYnkgTWljaGFlbCBTY2hpbWVrKQogKi8KCgovKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgYSB2NGwyX3N0YW5kYXJkIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8gdGhlCiAgICdpZCcgYW5kICd0cmFuc21pc3Npb24nIHBhcmFtZXRlcnMuICBSZXR1cm5zIG5lZ2F0aXZlIG9uIGVycm9yLiAgKi8KaW50IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqdnMsCgkJCSAgICAgaW50IGlkLCBjaGFyICpuYW1lKQp7Cgl1MzIgaW5kZXggPSB2cy0+aW5kZXg7CgoJbWVtc2V0KHZzLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKTsKCXZzLT5pbmRleCA9IGluZGV4OwoJdnMtPmlkICAgID0gaWQ7CglpZiAoaWQgJiBWNEwyX1NURF81MjVfNjApIHsKCQl2cy0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTAwMTsKCQl2cy0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAzMDAwMDsKCQl2cy0+ZnJhbWVsaW5lcyA9IDUyNTsKCX0gZWxzZSB7CgkJdnMtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDE7CgkJdnMtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMjU7CgkJdnMtPmZyYW1lbGluZXMgPSA2MjU7Cgl9CglzdHJsY3B5KHZzLT5uYW1lLG5hbWUsc2l6ZW9mKHZzLT5uYW1lKSk7CglyZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogcHJpb3JpdHkgaGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiNkZWZpbmUgVjRMMl9QUklPX1ZBTElEKHZhbCkgKHZhbCA9PSBWNEwyX1BSSU9SSVRZX0JBQ0tHUk9VTkQgICB8fCBcCgkJCSAgICAgIHZhbCA9PSBWNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFICB8fCBcCgkJCSAgICAgIHZhbCA9PSBWNEwyX1BSSU9SSVRZX1JFQ09SRCkKCmludCB2NGwyX3ByaW9faW5pdChzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICpnbG9iYWwpCnsKCW1lbXNldChnbG9iYWwsMCxzaXplb2YoKmdsb2JhbCkpOwoJcmV0dXJuIDA7Cn0KCmludCB2NGwyX3ByaW9fY2hhbmdlKHN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgKmdsb2JhbCwgZW51bSB2NGwyX3ByaW9yaXR5ICpsb2NhbCwKCQkgICAgIGVudW0gdjRsMl9wcmlvcml0eSBuZXcpCnsKCWlmICghVjRMMl9QUklPX1ZBTElEKG5ldykpCgkJcmV0dXJuIC1FSU5WQUw7CglpZiAoKmxvY2FsID09IG5ldykKCQlyZXR1cm4gMDsKCglhdG9taWNfaW5jKCZnbG9iYWwtPnByaW9zW25ld10pOwoJaWYgKFY0TDJfUFJJT19WQUxJRCgqbG9jYWwpKQoJCWF0b21pY19kZWMoJmdsb2JhbC0+cHJpb3NbKmxvY2FsXSk7CgkqbG9jYWwgPSBuZXc7CglyZXR1cm4gMDsKfQoKaW50IHY0bDJfcHJpb19vcGVuKHN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgKmdsb2JhbCwgZW51bSB2NGwyX3ByaW9yaXR5ICpsb2NhbCkKewoJcmV0dXJuIHY0bDJfcHJpb19jaGFuZ2UoZ2xvYmFsLGxvY2FsLFY0TDJfUFJJT1JJVFlfREVGQVVMVCk7Cn0KCmludCB2NGwyX3ByaW9fY2xvc2Uoc3RydWN0IHY0bDJfcHJpb19zdGF0ZSAqZ2xvYmFsLCBlbnVtIHY0bDJfcHJpb3JpdHkgKmxvY2FsKQp7CglpZiAoVjRMMl9QUklPX1ZBTElEKCpsb2NhbCkpCgkJYXRvbWljX2RlYygmZ2xvYmFsLT5wcmlvc1sqbG9jYWxdKTsKCXJldHVybiAwOwp9CgplbnVtIHY0bDJfcHJpb3JpdHkgdjRsMl9wcmlvX21heChzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICpnbG9iYWwpCnsKCWlmIChhdG9taWNfcmVhZCgmZ2xvYmFsLT5wcmlvc1tWNEwyX1BSSU9SSVRZX1JFQ09SRF0pID4gMCkKCQlyZXR1cm4gVjRMMl9QUklPUklUWV9SRUNPUkQ7CglpZiAoYXRvbWljX3JlYWQoJmdsb2JhbC0+cHJpb3NbVjRMMl9QUklPUklUWV9JTlRFUkFDVElWRV0pID4gMCkKCQlyZXR1cm4gVjRMMl9QUklPUklUWV9JTlRFUkFDVElWRTsKCWlmIChhdG9taWNfcmVhZCgmZ2xvYmFsLT5wcmlvc1tWNEwyX1BSSU9SSVRZX0JBQ0tHUk9VTkRdKSA+IDApCgkJcmV0dXJuIFY0TDJfUFJJT1JJVFlfQkFDS0dST1VORDsKCXJldHVybiBWNEwyX1BSSU9SSVRZX1VOU0VUOwp9CgppbnQgdjRsMl9wcmlvX2NoZWNrKHN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgKmdsb2JhbCwgZW51bSB2NGwyX3ByaW9yaXR5ICpsb2NhbCkKewoJaWYgKCpsb2NhbCA8IHY0bDJfcHJpb19tYXgoZ2xvYmFsKSkKCQlyZXR1cm4gLUVCVVNZOwoJcmV0dXJuIDA7Cn0KCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiBzb21lIGFycmF5cyBmb3IgcHJldHR5LXByaW50aW5nIGRlYnVnIG1lc3NhZ2VzIG9mIGVudW0gdHlwZXMgICAgICAqLwoKY2hhciAqdjRsMl9maWVsZF9uYW1lc1tdID0gewoJW1Y0TDJfRklFTERfQU5ZXSAgICAgICAgPSAiYW55IiwKCVtWNEwyX0ZJRUxEX05PTkVdICAgICAgID0gIm5vbmUiLAoJW1Y0TDJfRklFTERfVE9QXSAgICAgICAgPSAidG9wIiwKCVtWNEwyX0ZJRUxEX0JPVFRPTV0gICAgID0gImJvdHRvbSIsCglbVjRMMl9GSUVMRF9JTlRFUkxBQ0VEXSA9ICJpbnRlcmxhY2VkIiwKCVtWNEwyX0ZJRUxEX1NFUV9UQl0gICAgID0gInNlcS10YiIsCglbVjRMMl9GSUVMRF9TRVFfQlRdICAgICA9ICJzZXEtYnQiLAoJW1Y0TDJfRklFTERfQUxURVJOQVRFXSAgPSAiYWx0ZXJuYXRlIiwKfTsKCmNoYXIgKnY0bDJfdHlwZV9uYW1lc1tdID0gewoJW1Y0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV0gPSAidmlkZW8tY2FwIiwKCVtWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVldID0gInZpZGVvLW92ZXIiLAoJW1Y0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUXSAgPSAidmlkZW8tb3V0IiwKCVtWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFXSAgID0gInZiaS1jYXAiLAoJW1Y0TDJfQlVGX1RZUEVfVkJJX09VVFBVVF0gICAgPSAidmJpLW91dCIsCn07CgpzdGF0aWMgY2hhciAqdjRsMl9tZW1vcnlfbmFtZXNbXSA9IHsKCVtWNEwyX01FTU9SWV9NTUFQXSAgICA9ICJtbWFwIiwKCVtWNEwyX01FTU9SWV9VU0VSUFRSXSA9ICJ1c2VycHRyIiwKCVtWNEwyX01FTU9SWV9PVkVSTEFZXSA9ICJvdmVybGF5IiwKfTsKCiNkZWZpbmUgcHJ0X25hbWVzKGEsYXJyKSAoKChhKT49MCkmJigoYSk8QVJSQVlfU0laRShhcnIpKSk/YXJyW2FdOiJ1bmtub3duIgoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIGRlYnVnIGhlbHAgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKI2lmZGVmIEhBVkVfVjRMMQpzdGF0aWMgY29uc3QgY2hhciAqdjRsMV9pb2N0bHNbXSA9IHsKCVtfSU9DX05SKFZJRElPQ0dDQVApXSAgICAgICA9ICJWSURJT0NHQ0FQIiwKCVtfSU9DX05SKFZJRElPQ0dDSEFOKV0gICAgICA9ICJWSURJT0NHQ0hBTiIsCglbX0lPQ19OUihWSURJT0NTQ0hBTildICAgICAgPSAiVklESU9DU0NIQU4iLAoJW19JT0NfTlIoVklESU9DR1RVTkVSKV0gICAgID0gIlZJRElPQ0dUVU5FUiIsCglbX0lPQ19OUihWSURJT0NTVFVORVIpXSAgICAgPSAiVklESU9DU1RVTkVSIiwKCVtfSU9DX05SKFZJRElPQ0dQSUNUKV0gICAgICA9ICJWSURJT0NHUElDVCIsCglbX0lPQ19OUihWSURJT0NTUElDVCldICAgICAgPSAiVklESU9DU1BJQ1QiLAoJW19JT0NfTlIoVklESU9DQ0FQVFVSRSldICAgID0gIlZJRElPQ0NBUFRVUkUiLAoJW19JT0NfTlIoVklESU9DR1dJTildICAgICAgID0gIlZJRElPQ0dXSU4iLAoJW19JT0NfTlIoVklESU9DU1dJTildICAgICAgID0gIlZJRElPQ1NXSU4iLAoJW19JT0NfTlIoVklESU9DR0ZCVUYpXSAgICAgID0gIlZJRElPQ0dGQlVGIiwKCVtfSU9DX05SKFZJRElPQ1NGQlVGKV0gICAgICA9ICJWSURJT0NTRkJVRiIsCglbX0lPQ19OUihWSURJT0NLRVkpXSAgICAgICAgPSAiVklESU9DS0VZIiwKCVtfSU9DX05SKFZJRElPQ0dGUkVRKV0gICAgICA9ICJWSURJT0NHRlJFUSIsCglbX0lPQ19OUihWSURJT0NTRlJFUSldICAgICAgPSAiVklESU9DU0ZSRVEiLAoJW19JT0NfTlIoVklESU9DR0FVRElPKV0gICAgID0gIlZJRElPQ0dBVURJTyIsCglbX0lPQ19OUihWSURJT0NTQVVESU8pXSAgICAgPSAiVklESU9DU0FVRElPIiwKCVtfSU9DX05SKFZJRElPQ1NZTkMpXSAgICAgICA9ICJWSURJT0NTWU5DIiwKCVtfSU9DX05SKFZJRElPQ01DQVBUVVJFKV0gICA9ICJWSURJT0NNQ0FQVFVSRSIsCglbX0lPQ19OUihWSURJT0NHTUJVRildICAgICAgPSAiVklESU9DR01CVUYiLAoJW19JT0NfTlIoVklESU9DR1VOSVQpXSAgICAgID0gIlZJRElPQ0dVTklUIiwKCVtfSU9DX05SKFZJRElPQ0dDQVBUVVJFKV0gICA9ICJWSURJT0NHQ0FQVFVSRSIsCglbX0lPQ19OUihWSURJT0NTQ0FQVFVSRSldICAgPSAiVklESU9DU0NBUFRVUkUiLAoJW19JT0NfTlIoVklESU9DU1BMQVlNT0RFKV0gID0gIlZJRElPQ1NQTEFZTU9ERSIsCglbX0lPQ19OUihWSURJT0NTV1JJVEVNT0RFKV0gPSAiVklESU9DU1dSSVRFTU9ERSIsCglbX0lPQ19OUihWSURJT0NHUExBWUlORk8pXSAgPSAiVklESU9DR1BMQVlJTkZPIiwKCVtfSU9DX05SKFZJRElPQ1NNSUNST0NPREUpXSA9ICJWSURJT0NTTUlDUk9DT0RFIiwKCVtfSU9DX05SKFZJRElPQ0dWQklGTVQpXSAgICA9ICJWSURJT0NHVkJJRk1UIiwKCVtfSU9DX05SKFZJRElPQ1NWQklGTVQpXSAgICA9ICJWSURJT0NTVkJJRk1UIgp9OwojZGVmaW5lIFY0TDFfSU9DVExTIEFSUkFZX1NJWkUodjRsMV9pb2N0bHMpCiNlbmRpZgoKc3RhdGljIGNvbnN0IGNoYXIgKnY0bDJfaW9jdGxzW10gPSB7CglbX0lPQ19OUihWSURJT0NfUVVFUllDQVApXSAgICAgICAgID0gIlZJRElPQ19RVUVSWUNBUCIsCglbX0lPQ19OUihWSURJT0NfUkVTRVJWRUQpXSAgICAgICAgID0gIlZJRElPQ19SRVNFUlZFRCIsCglbX0lPQ19OUihWSURJT0NfRU5VTV9GTVQpXSAgICAgICAgID0gIlZJRElPQ19FTlVNX0ZNVCIsCglbX0lPQ19OUihWSURJT0NfR19GTVQpXSAgICAgICAgICAgID0gIlZJRElPQ19HX0ZNVCIsCglbX0lPQ19OUihWSURJT0NfU19GTVQpXSAgICAgICAgICAgID0gIlZJRElPQ19TX0ZNVCIsCglbX0lPQ19OUihWSURJT0NfR19NUEVHQ09NUCldICAgICAgID0gIlZJRElPQ19HX01QRUdDT01QIiwKCVtfSU9DX05SKFZJRElPQ19TX01QRUdDT01QKV0gICAgICAgPSAiVklESU9DX1NfTVBFR0NPTVAiLAoJW19JT0NfTlIoVklESU9DX1JFUUJVRlMpXSAgICAgICAgICA9ICJWSURJT0NfUkVRQlVGUyIsCglbX0lPQ19OUihWSURJT0NfUVVFUllCVUYpXSAgICAgICAgID0gIlZJRElPQ19RVUVSWUJVRiIsCglbX0lPQ19OUihWSURJT0NfR19GQlVGKV0gICAgICAgICAgID0gIlZJRElPQ19HX0ZCVUYiLAoJW19JT0NfTlIoVklESU9DX1NfRkJVRildICAgICAgICAgICA9ICJWSURJT0NfU19GQlVGIiwKCVtfSU9DX05SKFZJRElPQ19PVkVSTEFZKV0gICAgICAgICAgPSAiVklESU9DX09WRVJMQVkiLAoJW19JT0NfTlIoVklESU9DX1FCVUYpXSAgICAgICAgICAgICA9ICJWSURJT0NfUUJVRiIsCglbX0lPQ19OUihWSURJT0NfRFFCVUYpXSAgICAgICAgICAgID0gIlZJRElPQ19EUUJVRiIsCglbX0lPQ19OUihWSURJT0NfU1RSRUFNT04pXSAgICAgICAgID0gIlZJRElPQ19TVFJFQU1PTiIsCglbX0lPQ19OUihWSURJT0NfU1RSRUFNT0ZGKV0gICAgICAgID0gIlZJRElPQ19TVFJFQU1PRkYiLAoJW19JT0NfTlIoVklESU9DX0dfUEFSTSldICAgICAgICAgICA9ICJWSURJT0NfR19QQVJNIiwKCVtfSU9DX05SKFZJRElPQ19TX1BBUk0pXSAgICAgICAgICAgPSAiVklESU9DX1NfUEFSTSIsCglbX0lPQ19OUihWSURJT0NfR19TVEQpXSAgICAgICAgICAgID0gIlZJRElPQ19HX1NURCIsCglbX0lPQ19OUihWSURJT0NfU19TVEQpXSAgICAgICAgICAgID0gIlZJRElPQ19TX1NURCIsCglbX0lPQ19OUihWSURJT0NfRU5VTVNURCldICAgICAgICAgID0gIlZJRElPQ19FTlVNU1REIiwKCVtfSU9DX05SKFZJRElPQ19FTlVNSU5QVVQpXSAgICAgICAgPSAiVklESU9DX0VOVU1JTlBVVCIsCglbX0lPQ19OUihWSURJT0NfR19DVFJMKV0gICAgICAgICAgID0gIlZJRElPQ19HX0NUUkwiLAoJW19JT0NfTlIoVklESU9DX1NfQ1RSTCldICAgICAgICAgICA9ICJWSURJT0NfU19DVFJMIiwKCVtfSU9DX05SKFZJRElPQ19HX1RVTkVSKV0gICAgICAgICAgPSAiVklESU9DX0dfVFVORVIiLAoJW19JT0NfTlIoVklESU9DX1NfVFVORVIpXSAgICAgICAgICA9ICJWSURJT0NfU19UVU5FUiIsCglbX0lPQ19OUihWSURJT0NfR19BVURJTyldICAgICAgICAgID0gIlZJRElPQ19HX0FVRElPIiwKCVtfSU9DX05SKFZJRElPQ19TX0FVRElPKV0gICAgICAgICAgPSAiVklESU9DX1NfQVVESU8iLAoJW19JT0NfTlIoVklESU9DX1FVRVJZQ1RSTCldICAgICAgICA9ICJWSURJT0NfUVVFUllDVFJMIiwKCVtfSU9DX05SKFZJRElPQ19RVUVSWU1FTlUpXSAgICAgICAgPSAiVklESU9DX1FVRVJZTUVOVSIsCglbX0lPQ19OUihWSURJT0NfR19JTlBVVCldICAgICAgICAgID0gIlZJRElPQ19HX0lOUFVUIiwKCVtfSU9DX05SKFZJRElPQ19TX0lOUFVUKV0gICAgICAgICAgPSAiVklESU9DX1NfSU5QVVQiLAoJW19JT0NfTlIoVklESU9DX0dfT1VUUFVUKV0gICAgICAgICA9ICJWSURJT0NfR19PVVRQVVQiLAoJW19JT0NfTlIoVklESU9DX1NfT1VUUFVUKV0gICAgICAgICA9ICJWSURJT0NfU19PVVRQVVQiLAoJW19JT0NfTlIoVklESU9DX0VOVU1PVVRQVVQpXSAgICAgICA9ICJWSURJT0NfRU5VTU9VVFBVVCIsCglbX0lPQ19OUihWSURJT0NfR19BVURPVVQpXSAgICAgICAgID0gIlZJRElPQ19HX0FVRE9VVCIsCglbX0lPQ19OUihWSURJT0NfU19BVURPVVQpXSAgICAgICAgID0gIlZJRElPQ19TX0FVRE9VVCIsCglbX0lPQ19OUihWSURJT0NfR19NT0RVTEFUT1IpXSAgICAgID0gIlZJRElPQ19HX01PRFVMQVRPUiIsCglbX0lPQ19OUihWSURJT0NfU19NT0RVTEFUT1IpXSAgICAgID0gIlZJRElPQ19TX01PRFVMQVRPUiIsCglbX0lPQ19OUihWSURJT0NfR19GUkVRVUVOQ1kpXSAgICAgID0gIlZJRElPQ19HX0ZSRVFVRU5DWSIsCglbX0lPQ19OUihWSURJT0NfU19GUkVRVUVOQ1kpXSAgICAgID0gIlZJRElPQ19TX0ZSRVFVRU5DWSIsCglbX0lPQ19OUihWSURJT0NfQ1JPUENBUCldICAgICAgICAgID0gIlZJRElPQ19DUk9QQ0FQIiwKCVtfSU9DX05SKFZJRElPQ19HX0NST1ApXSAgICAgICAgICAgPSAiVklESU9DX0dfQ1JPUCIsCglbX0lPQ19OUihWSURJT0NfU19DUk9QKV0gICAgICAgICAgID0gIlZJRElPQ19TX0NST1AiLAoJW19JT0NfTlIoVklESU9DX0dfSlBFR0NPTVApXSAgICAgICA9ICJWSURJT0NfR19KUEVHQ09NUCIsCglbX0lPQ19OUihWSURJT0NfU19KUEVHQ09NUCldICAgICAgID0gIlZJRElPQ19TX0pQRUdDT01QIiwKCVtfSU9DX05SKFZJRElPQ19RVUVSWVNURCldICAgICAgICAgPSAiVklESU9DX1FVRVJZU1REIiwKCVtfSU9DX05SKFZJRElPQ19UUllfRk1UKV0gICAgICAgICAgPSAiVklESU9DX1RSWV9GTVQiLAoJW19JT0NfTlIoVklESU9DX0VOVU1BVURJTyldICAgICAgICA9ICJWSURJT0NfRU5VTUFVRElPIiwKCVtfSU9DX05SKFZJRElPQ19FTlVNQVVET1VUKV0gICAgICAgPSAiVklESU9DX0VOVU1BVURPVVQiLAoJW19JT0NfTlIoVklESU9DX0dfUFJJT1JJVFkpXSAgICAgICA9ICJWSURJT0NfR19QUklPUklUWSIsCglbX0lPQ19OUihWSURJT0NfU19QUklPUklUWSldICAgICAgID0gIlZJRElPQ19TX1BSSU9SSVRZIiwKI2lmIDEKCVtfSU9DX05SKFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQKV0gPSAiVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVAiLAojZW5kaWYKCVtfSU9DX05SKFZJRElPQ19MT0dfU1RBVFVTKV0gICAgICAgPSAiVklESU9DX0xPR19TVEFUVVMiCn07CiNkZWZpbmUgVjRMMl9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2lvY3RscykKCnN0YXRpYyBjb25zdCBjaGFyICp2NGwyX2ludF9pb2N0bHNbXSA9IHsKI2lmZGVmIEhBVkVfVklERU9fREVDT0RFUgoJW19JT0NfTlIoREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTKV0gICAgPSAiREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTIiwKCVtfSU9DX05SKERFQ09ERVJfR0VUX1NUQVRVUyldICAgICAgICAgID0gIkRFQ09ERVJfR0VUX1NUQVRVUyIsCglbX0lPQ19OUihERUNPREVSX1NFVF9OT1JNKV0gICAgICAgICAgICA9ICJERUNPREVSX1NFVF9OT1JNIiwKCVtfSU9DX05SKERFQ09ERVJfU0VUX0lOUFVUKV0gICAgICAgICAgID0gIkRFQ09ERVJfU0VUX0lOUFVUIiwKCVtfSU9DX05SKERFQ09ERVJfU0VUX09VVFBVVCldICAgICAgICAgID0gIkRFQ09ERVJfU0VUX09VVFBVVCIsCglbX0lPQ19OUihERUNPREVSX0VOQUJMRV9PVVRQVVQpXSAgICAgICA9ICJERUNPREVSX0VOQUJMRV9PVVRQVVQiLAoJW19JT0NfTlIoREVDT0RFUl9TRVRfUElDVFVSRSldICAgICAgICAgPSAiREVDT0RFUl9TRVRfUElDVFVSRSIsCglbX0lPQ19OUihERUNPREVSX1NFVF9HUElPKV0gICAgICAgICAgICA9ICJERUNPREVSX1NFVF9HUElPIiwKCVtfSU9DX05SKERFQ09ERVJfSU5JVCldICAgICAgICAgICAgICAgID0gIkRFQ09ERVJfSU5JVCIsCglbX0lPQ19OUihERUNPREVSX1NFVF9WQklfQllQQVNTKV0gICAgICA9ICJERUNPREVSX1NFVF9WQklfQllQQVNTIiwKCVtfSU9DX05SKERFQ09ERVJfRFVNUCldICAgICAgICAgICAgICAgID0gIkRFQ09ERVJfRFVNUCIsCiNlbmRpZgoJW19JT0NfTlIoQVVEQ19TRVRfUkFESU8pXSAgICAgICAgICAgICAgPSAiQVVEQ19TRVRfUkFESU8iLAoJW19JT0NfTlIoQVVEQ19TRVRfSU5QVVQpXSAgICAgICAgICAgICAgPSAiQVVEQ19TRVRfSU5QVVQiLAoJW19JT0NfTlIoTVNQX1NFVF9NQVRSSVgpXSAgICAgICAgICAgICAgPSAiTVNQX1NFVF9NQVRSSVgiLAoKCVtfSU9DX05SKFRVTkVSX1NFVF9UWVBFX0FERFIpXSAgICAgICAgID0gIlRVTkVSX1NFVF9UWVBFX0FERFIiLAoJW19JT0NfTlIoVFVORVJfU0VUX1NUQU5EQlkpXSAgICAgICAgICAgPSAiVFVORVJfU0VUX1NUQU5EQlkiLAoJW19JT0NfTlIoVERBOTg4N19TRVRfQ09ORklHKV0gICAgICAgICAgPSAiVERBOTg4N19TRVRfQ09ORklHIiwKCglbX0lPQ19OUihWSURJT0NfSU5UX1NfUkVHSVNURVIpXSAgICAgICA9ICJWSURJT0NfSU5UX1NfUkVHSVNURVIiLAoJW19JT0NfTlIoVklESU9DX0lOVF9HX1JFR0lTVEVSKV0gICAgICAgPSAiVklESU9DX0lOVF9HX1JFR0lTVEVSIiwKCVtfSU9DX05SKFZJRElPQ19JTlRfUkVTRVQpXSAgICAgICAgICAgID0gIlZJRElPQ19JTlRfUkVTRVQiLAoJW19JT0NfTlIoVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRKV0gPSAiVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRIiwKCVtfSU9DX05SKFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FKV0gID0gIlZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FIiwKCVtfSU9DX05SKFZJRElPQ19JTlRfU19WQklfREFUQSldICAgICAgID0gIlZJRElPQ19JTlRfU19WQklfREFUQSIsCglbX0lPQ19OUihWSURJT0NfSU5UX0dfVkJJX0RBVEEpXSAgICAgICA9ICJWSURJT0NfSU5UX0dfVkJJX0RBVEEiLAoJW19JT0NfTlIoVklESU9DX0lOVF9HX0NISVBfSURFTlQpXSAgICAgPSAiVklESU9DX0lOVF9HX0NISVBfSURFTlQiLAoJW19JT0NfTlIoVklESU9DX0lOVF9JMlNfQ0xPQ0tfRlJFUSldICAgPSAiVklESU9DX0lOVF9JMlNfQ0xPQ0tfRlJFUSIKfTsKI2RlZmluZSBWNEwyX0lOVF9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2ludF9pb2N0bHMpCgpzdGF0aWMgdm9pZCB2NGxfcHJpbnRfcGl4X2ZtdCAoY2hhciAqcywgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqZm10KQp7CglwcmludGsgKCIlczogd2lkdGg9JWQsIGhlaWdodD0lZCwgZm9ybWF0PSVkLCBmaWVsZD0lcywgIgoJCSJieXRlc3BlcmxpbmU9JWQgc2l6ZWltYWdlPSVkLCBjb2xvcnNwYWNlPSVkXG4iLCBzLAoJCWZtdC0+d2lkdGgsZm10LT5oZWlnaHQsZm10LT5waXhlbGZvcm1hdCwKCQlwcnRfbmFtZXMoZm10LT5maWVsZCx2NGwyX2ZpZWxkX25hbWVzKSwKCQlmbXQtPmJ5dGVzcGVybGluZSxmbXQtPnNpemVpbWFnZSxmbXQtPmNvbG9yc3BhY2UpOwp9OwoKLyogQ29tbW9uIGlvY3RsIGRlYnVnIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5CiAgIGV4dGVybmFsIGlvY3RsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgaW50ZXJuYWwgVjRMIGlvY3RsICovCnZvaWQgdjRsX3ByaW50a19pb2N0bCh1bnNpZ25lZCBpbnQgY21kKQp7CgljaGFyICpkaXI7CgoJc3dpdGNoIChfSU9DX0RJUihjbWQpKSB7CgljYXNlIF9JT0NfTk9ORTogICAgICAgICAgICAgIGRpciA9ICItLSI7IGJyZWFrOwoJY2FzZSBfSU9DX1JFQUQ6ICAgICAgICAgICAgICBkaXIgPSAici0iOyBicmVhazsKCWNhc2UgX0lPQ19XUklURTogICAgICAgICAgICAgZGlyID0gIi13IjsgYnJlYWs7CgljYXNlIF9JT0NfUkVBRCB8IF9JT0NfV1JJVEU6IGRpciA9ICJydyI7IGJyZWFrOwoJZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICBkaXIgPSAiKkVSUioiOyBicmVhazsKCX0KCXN3aXRjaCAoX0lPQ19UWVBFKGNtZCkpIHsKCWNhc2UgJ2QnOgoJCXByaW50aygidjRsMl9pbnQgaW9jdGwgJXMsIGRpcj0lcyAoMHglMDh4KVxuIiwKCQkgICAgICAgKF9JT0NfTlIoY21kKSA8IFY0TDJfSU5UX0lPQ1RMUykgPwoJCSAgICAgICB2NGwyX2ludF9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICJVTktOT1dOIiwgZGlyLCBjbWQpOwoJCWJyZWFrOwojaWZkZWYgSEFWRV9WNEwxCgljYXNlICd2JzoKCQlwcmludGsoInY0bDEgaW9jdGwgJXMsIGRpcj0lcyAoMHglMDh4KVxuIiwKCQkgICAgICAgKF9JT0NfTlIoY21kKSA8IFY0TDFfSU9DVExTKSA/CgkJICAgICAgIHY0bDFfaW9jdGxzW19JT0NfTlIoY21kKV0gOiAiVU5LTk9XTiIsIGRpciwgY21kKTsKCQlicmVhazsKI2VuZGlmCgljYXNlICdWJzoKCQlwcmludGsoInY0bDIgaW9jdGwgJXMsIGRpcj0lcyAoMHglMDh4KVxuIiwKCQkgICAgICAgKF9JT0NfTlIoY21kKSA8IFY0TDJfSU9DVExTKSA/CgkJICAgICAgIHY0bDJfaW9jdGxzW19JT0NfTlIoY21kKV0gOiAiVU5LTk9XTiIsIGRpciwgY21kKTsKCQlicmVhazsKCglkZWZhdWx0OgoJCXByaW50aygidW5rbm93biBpb2N0bCAnJWMnLCBkaXI9JXMsICMlZCAoMHglMDh4KVxuIiwKCQkgICAgICAgX0lPQ19UWVBFKGNtZCksIGRpciwgX0lPQ19OUihjbWQpLCBjbWQpOwoJfQp9CgovKiBDb21tb24gaW9jdGwgZGVidWcgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkKICAgZXh0ZXJuYWwgaW9jdGwgbWVzc2FnZXMgYXMgd2VsbCBhcyBpbnRlcm5hbCBWNEwgaW9jdGwgYW5kIGl0cwogICBhcmd1bWVudHMgKi8Kdm9pZCB2NGxfcHJpbnRrX2lvY3RsX2FyZyhjaGFyICpzLHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKewoJcHJpbnRrKHMpOwoJcHJpbnRrKCI6ICIpOwoJdjRsX3ByaW50a19pb2N0bChjbWQpOwoJc3dpdGNoIChjbWQpIHsKCWNhc2UgVklESU9DX0lOVF9HX0NISVBfSURFTlQ6Cgl7CgkJZW51bSB2NGwyX2NoaXBfaWRlbnQgICpwPWFyZzsKCQlwcmludGsgKCIlczogY2hpcCBpZGVudD0lZFxuIiwgcywgKnApOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19QUklPUklUWToKCWNhc2UgVklESU9DX1NfUFJJT1JJVFk6Cgl7CgkJZW51bSB2NGwyX3ByaW9yaXR5ICpwPWFyZzsKCQlwcmludGsgKCIlczogcHJpb3JpdHk9JWRcbiIsIHMsICpwKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0lOVF9TX1RVTkVSX01PREU6Cgl7CgkJZW51bSB2NGwyX3R1bmVyX3R5cGUgKnA9YXJnOwoJCXByaW50ayAoIiVzOiB0dW5lciB0eXBlPSVkXG4iLCBzLCAqcCk7CgkJYnJlYWs7Cgl9CgljYXNlIERFQ09ERVJfU0VUX1ZCSV9CWVBBU1M6CgljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgoJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CgljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgoJY2FzZSBERUNPREVSX1NFVF9HUElPOgoJY2FzZSBERUNPREVSX1NFVF9OT1JNOgoJY2FzZSBWSURJT0NDQVBUVVJFOgoJY2FzZSBWSURJT0NTWU5DOgoJY2FzZSBWSURJT0NTV1JJVEVNT0RFOgoJY2FzZSBUVU5FUl9TRVRfVFlQRV9BRERSOgoJY2FzZSBUVU5FUl9TRVRfU1RBTkRCWToKCWNhc2UgVERBOTg4N19TRVRfQ09ORklHOgoJY2FzZSBBVURDX1NFVF9JTlBVVDoKCWNhc2UgVklESU9DX09WRVJMQVlfT0xEOgoJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgoJY2FzZSBWSURJT0NfR19PVVRQVVQ6CgljYXNlIFZJRElPQ19TX09VVFBVVDoKCWNhc2UgVklESU9DX1NUUkVBTU9OOgoJY2FzZSBWSURJT0NfR19JTlBVVDoKCWNhc2UgVklESU9DX09WRVJMQVk6CgljYXNlIFZJRElPQ19TX0lOUFVUOgoJewoJCWludCAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHZhbHVlPSVkXG4iLCBzLCAqcCk7CgkJYnJlYWs7Cgl9CgljYXNlIE1TUF9TRVRfTUFUUklYOgoJewoJCXN0cnVjdCBtc3BfbWF0cml4ICpwPWFyZzsKCQlwcmludGsgKCIlczogaW5wdXQ9JWQsIG91dHB1dD0lZFxuIiwgcywgcC0+aW5wdXQsIHAtPm91dHB1dCk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19HX0FVRElPOgoJY2FzZSBWSURJT0NfU19BVURJTzoKCWNhc2UgVklESU9DX0VOVU1BVURJTzoKCWNhc2UgVklESU9DX0dfQVVESU9fT0xEOgoJewoJCXN0cnVjdCB2NGwyX2F1ZGlvICpwPWFyZzsKCgkJcHJpbnRrICgiJXM6IGluZGV4PSVkLCBuYW1lPSVzLCBjYXBhYmlsaXR5PSVkLCBtb2RlPSVkXG4iLAoJCQlzLHAtPmluZGV4LCBwLT5uYW1lLHAtPmNhcGFiaWxpdHksIHAtPm1vZGUpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19BVURPVVQ6CgljYXNlIFZJRElPQ19TX0FVRE9VVDoKCWNhc2UgVklESU9DX0VOVU1BVURPVVQ6CgljYXNlIFZJRElPQ19HX0FVRE9VVF9PTEQ6Cgl7CgkJc3RydWN0IHY0bDJfYXVkaW9vdXQgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0lZCwgbW9kZT0lZFxuIiwgcywKCQkJCXAtPmluZGV4LCBwLT5uYW1lLCBwLT5jYXBhYmlsaXR5LHAtPm1vZGUpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfUUJVRjoKCWNhc2UgVklESU9DX0RRQlVGOgoJY2FzZSBWSURJT0NfUVVFUllCVUY6Cgl7CgkJc3RydWN0IHY0bDJfYnVmZmVyICpwPWFyZzsKCQlzdHJ1Y3QgdjRsMl90aW1lY29kZSAqdGM9JnAtPnRpbWVjb2RlOwoJCXByaW50ayAoIiVzOiAlMDJsZDolMDJkOiUwMmQuJTA4bGQgaW5kZXg9JWQsIHR5cGU9JXMsICIKCQkJImJ5dGVzdXNlZD0lZCwgZmxhZ3M9MHglMDhkLCAiCgkJCSJmaWVsZD0lMGQsIHNlcXVlbmNlPSVkLCBtZW1vcnk9JXMsIG9mZnNldC91c2VycHRyPTB4JTA4bHhcbiIsCgkJCQlzLAoJCQkJKHAtPnRpbWVzdGFtcC50dl9zZWMvMzYwMCksCgkJCQkoaW50KShwLT50aW1lc3RhbXAudHZfc2VjLzYwKSU2MCwKCQkJCShpbnQpKHAtPnRpbWVzdGFtcC50dl9zZWMlNjApLAoJCQkJcC0+dGltZXN0YW1wLnR2X3VzZWMsCgkJCQlwLT5pbmRleCwKCQkJCXBydF9uYW1lcyhwLT50eXBlLHY0bDJfdHlwZV9uYW1lcyksCgkJCQlwLT5ieXRlc3VzZWQscC0+ZmxhZ3MsCgkJCQlwLT5maWVsZCxwLT5zZXF1ZW5jZSwKCQkJCXBydF9uYW1lcyhwLT5tZW1vcnksdjRsMl9tZW1vcnlfbmFtZXMpLAoJCQkJcC0+bS51c2VycHRyKTsKCQlwcmludGsgKCIlczogdGltZWNvZGU9ICUwMmQ6JTAyZDolMDJkIHR5cGU9JWQsICIKCQkJImZsYWdzPTB4JTA4ZCwgZnJhbWVzPSVkLCB1c2VyYml0cz0weCUwOHgiLAoJCQkJcyx0Yy0+aG91cnMsdGMtPm1pbnV0ZXMsdGMtPnNlY29uZHMsCgkJCQl0Yy0+dHlwZSwgdGMtPmZsYWdzLCB0Yy0+ZnJhbWVzLCAoX191MzIpIHRjLT51c2VyYml0cyk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19RVUVSWUNBUDoKCXsKCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpwPWFyZzsKCQlwcmludGsgKCIlczogZHJpdmVyPSVzLCBjYXJkPSVzLCBidXM9JXMsIHZlcnNpb249JWQsICIKCQkJImNhcGFiaWxpdGllcz0lZFxuIiwgcywKCQkJCXAtPmRyaXZlcixwLT5jYXJkLHAtPmJ1c19pbmZvLAoJCQkJcC0+dmVyc2lvbiwKCQkJCXAtPmNhcGFiaWxpdGllcyk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19HX0NUUkw6CgljYXNlIFZJRElPQ19TX0NUUkw6CgljYXNlIFZJRElPQ19TX0NUUkxfT0xEOgoJewoJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpZD0lZCwgdmFsdWU9JWRcbiIsIHMsIHAtPmlkLCBwLT52YWx1ZSk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19HX0NST1A6CgljYXNlIFZJRElPQ19TX0NST1A6Cgl7CgkJc3RydWN0IHY0bDJfY3JvcCAqcD1hcmc7CgkJLypGSVhNRTogU2hvdWxkIGFsc28gc2hvdyByZWN0IHN0cnVjdHMgKi8KCQlwcmludGsgKCIlczogdHlwZT0lZFxuIiwgcywgcC0+dHlwZSk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19DUk9QQ0FQOgoJY2FzZSBWSURJT0NfQ1JPUENBUF9PTEQ6Cgl7CgkJc3RydWN0IHY0bDJfY3JvcGNhcCAqcD1hcmc7CgkJLypGSVhNRTogU2hvdWxkIGFsc28gc2hvdyByZWN0IHN0cnVjdHMgKi8KCQlwcmludGsgKCIlczogdHlwZT0lZFxuIiwgcywgcC0+dHlwZSk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FOgoJewoJCXN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGlzX3NlY29uZF9maWVsZD0lZCwgcHRyPTB4JTA4bHgsIGxpbmU9JWQsICIKCQkJInR5cGU9JWRcbiIsIHMsCgkJCQlwLT5pc19zZWNvbmRfZmllbGQsKHVuc2lnbmVkIGxvbmcpcC0+cCxwLT5saW5lLHAtPnR5cGUpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfRU5VTV9GTVQ6Cgl7CgkJc3RydWN0IHY0bDJfZm10ZGVzYyAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGluZGV4PSVkLCB0eXBlPSVkLCBmbGFncz0lZCwgZGVzY3JpcHRpb249JXMsIgoJCQkiIHBpeGVsZm9ybWF0PSVkXG4iLCBzLAoJCQkJcC0+aW5kZXgsIHAtPnR5cGUsIHAtPmZsYWdzLHAtPmRlc2NyaXB0aW9uLAoJCQkJcC0+cGl4ZWxmb3JtYXQpOwoKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0dfRk1UOgoJY2FzZSBWSURJT0NfU19GTVQ6CgljYXNlIFZJRElPQ19UUllfRk1UOgoJewoJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHR5cGU9JXNcbiIsIHMsCgkJCQlwcnRfbmFtZXMocC0+dHlwZSx2NGwyX3R5cGVfbmFtZXMpKTsKCQlzd2l0Y2ggKHAtPnR5cGUpIHsKCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKCQkJdjRsX3ByaW50X3BpeF9mbXQgKHMsICZwLT5mbXQucGl4KTsKCQkJYnJlYWs7CgkJZGVmYXVsdDoKCQkJYnJlYWs7CgkJfQoJfQoJY2FzZSBWSURJT0NfR19GQlVGOgoJY2FzZSBWSURJT0NfU19GQlVGOgoJewoJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpwPWFyZzsKCQlwcmludGsgKCIlczogY2FwYWJpbGl0eT0lZCwgZmxhZ3M9JWQsIGJhc2U9MHglMDhseFxuIiwgcywKCQkJCXAtPmNhcGFiaWxpdHkscC0+ZmxhZ3MsICh1bnNpZ25lZCBsb25nKXAtPmJhc2UpOwoJCXY0bF9wcmludF9waXhfZm10IChzLCAmcC0+Zm10KTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgoJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Cgl7CgkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpwPWFyZzsKCQlwcmludGsgKCIlczogdHVuZXI9JWQsIHR5cGU9JWQsIGZyZXF1ZW5jeT0lZFxuIiwgcywKCQkJCXAtPnR1bmVyLHAtPnR5cGUscC0+ZnJlcXVlbmN5KTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKCXsKCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGluZGV4PSVkLCBuYW1lPSVzLCB0eXBlPSVkLCBhdWRpb3NldD0lZCwgIgoJCQkidHVuZXI9JWQsIHN0ZD0lbGxkLCBzdGF0dXM9JWRcbiIsIHMsCgkJCQlwLT5pbmRleCxwLT5uYW1lLHAtPnR5cGUscC0+YXVkaW9zZXQsCgkJCQlwLT50dW5lcixwLT5zdGQsCgkJCQlwLT5zdGF0dXMpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19KUEVHQ09NUDoKCWNhc2UgVklESU9DX1NfSlBFR0NPTVA6Cgl7CgkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwPWFyZzsKCQlwcmludGsgKCIlczogcXVhbGl0eT0lZCwgQVBQbj0lZCwgQVBQX2xlbj0lZCwgQ09NX2xlbj0lZCwiCgkJCSIganBlZ19tYXJrZXJzPSVkXG4iLCBzLAoJCQkJcC0+cXVhbGl0eSxwLT5BUFBuLHAtPkFQUF9sZW4sCgkJCQlwLT5DT01fbGVuLHAtPmpwZWdfbWFya2Vycyk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19HX01PRFVMQVRPUjoKCWNhc2UgVklESU9DX1NfTU9EVUxBVE9SOgoJewoJCXN0cnVjdCB2NGwyX21vZHVsYXRvciAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGluZGV4PSVkLCBuYW1lPSVzLCBjYXBhYmlsaXR5PSVkLCByYW5nZWxvdz0lZCwiCgkJCSIgcmFuZ2VoaWdoPSVkLCB0eHN1YmNoYW5zPSVkXG4iLCBzLAoJCQkJcC0+aW5kZXgsIHAtPm5hbWUscC0+Y2FwYWJpbGl0eSxwLT5yYW5nZWxvdywKCQkJCXAtPnJhbmdlaGlnaCxwLT50eHN1YmNoYW5zKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0dfTVBFR0NPTVA6CgljYXNlIFZJRElPQ19TX01QRUdDT01QOgoJewoJCXN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gKnA9YXJnOwoJCS8qRklYTUU6IFNldmVyYWwgZmllbGRzIG5vdCBzaG93biAqLwoJCXByaW50ayAoIiVzOiB0c19waWRfcG10PSVkLCB0c19waWRfYXVkaW89JWQsIHRzX3BpZF92aWRlbz0lZCwgIgoJCQkidHNfcGlkX3Bjcj0lZCwgcHNfc2l6ZT0lZCwgYXVfc2FtcGxlX3JhdGU9JWQsICIKCQkJImF1X3Blc2lkPSVjLCB2aV9mcmFtZV9yYXRlPSVkLCB2aV9mcmFtZXNfcGVyX2dvcD0lZCwgIgoJCQkidmlfYmZyYW1lc19jb3VudD0lZCwgdmlfcGVzaWQ9JWNcbiIsIHMsCgkJCQlwLT50c19waWRfcG10LHAtPnRzX3BpZF9hdWRpbywgcC0+dHNfcGlkX3ZpZGVvLAoJCQkJcC0+dHNfcGlkX3BjciwgcC0+cHNfc2l6ZSwgcC0+YXVfc2FtcGxlX3JhdGUsCgkJCQlwLT5hdV9wZXNpZCwgcC0+dmlfZnJhbWVfcmF0ZSwKCQkJCXAtPnZpX2ZyYW1lc19wZXJfZ29wLCBwLT52aV9iZnJhbWVzX2NvdW50LAoJCQkJcC0+dmlfcGVzaWQpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfRU5VTU9VVFBVVDoKCXsKCQlzdHJ1Y3QgdjRsMl9vdXRwdXQgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgbmFtZT0lcyx0eXBlPSVkLCBhdWRpb3NldD0lZCwgIgoJCQkibW9kdWxhdG9yPSVkLCBzdGQ9JWxsZFxuIiwKCQkJCXMscC0+aW5kZXgscC0+bmFtZSxwLT50eXBlLHAtPmF1ZGlvc2V0LAoJCQkJcC0+bW9kdWxhdG9yLHAtPnN0ZCk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19RVUVSWUNUUkw6Cgl7CgkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpwPWFyZzsKCQlwcmludGsgKCIlczogaWQ9JWQsIHR5cGU9JWQsIG5hbWU9JXMsIG1pbi9tYXg9JWQvJWQsIgoJCQkiIHN0ZXA9JWQsIGRlZmF1bHQ9JWQsIGZsYWdzPTB4JTA4eFxuIiwgcywKCQkJCXAtPmlkLHAtPnR5cGUscC0+bmFtZSxwLT5taW5pbXVtLHAtPm1heGltdW0sCgkJCQlwLT5zdGVwLHAtPmRlZmF1bHRfdmFsdWUscC0+ZmxhZ3MpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfUVVFUllNRU5VOgoJewoJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGlkPSVkLCBpbmRleD0lZCwgbmFtZT0lc1xuIiwgcywKCQkJCXAtPmlkLHAtPmluZGV4LHAtPm5hbWUpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfSU5UX0dfUkVHSVNURVI6CgljYXNlIFZJRElPQ19JTlRfU19SRUdJU1RFUjoKCXsKCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGkyY19pZD0lZCwgcmVnPSVsdSwgdmFsPSVkXG4iLCBzLAoJCQkJcC0+aTJjX2lkLHAtPnJlZyxwLT52YWwpOwoKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX1JFUUJVRlM6Cgl7CgkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBjb3VudD0lZCwgdHlwZT0lcywgbWVtb3J5PSVzXG4iLCBzLAoJCQkJcC0+Y291bnQsCgkJCQlwcnRfbmFtZXMocC0+dHlwZSx2NGwyX3R5cGVfbmFtZXMpLAoJCQkJcHJ0X25hbWVzKHAtPm1lbW9yeSx2NGwyX21lbW9yeV9uYW1lcykpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6CgljYXNlIFZJRElPQ19JTlRfR19BVURJT19ST1VUSU5HOgoJY2FzZSBWSURJT0NfSU5UX0dfVklERU9fUk9VVElORzoKCXsKCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGlucHV0PSVkLCBvdXRwdXQ9JWRcbiIsIHMsIHAtPmlucHV0LCBwLT5vdXRwdXQpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19TTElDRURfVkJJX0NBUDoKCXsKCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHNlcnZpY2Vfc2V0PSVkXG4iLCBzLAoJCQkJcC0+c2VydmljZV9zZXQpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfSU5UX1NfVkJJX0RBVEE6CgljYXNlIFZJRElPQ19JTlRfR19WQklfREFUQToKCXsKCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgICpwPWFyZzsKCQlwcmludGsgKCIlczogaWQ9JWQsIGZpZWxkPSVkLCBsaW5lPSVkXG4iLCBzLAoJCQkJcC0+aWQsIHAtPmZpZWxkLCBwLT5saW5lKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DX0VOVU1TVEQ6Cgl7CgkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgaWQ9JWxsZCwgbmFtZT0lcywgZnBzPSVkLyVkLCBmcmFtZWxpbmVzPSVkXG4iLCBzLAoJCQkJcC0+aW5kZXgsIHAtPmlkLCBwLT5uYW1lLAoJCQkJcC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yLAoJCQkJcC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IsCgkJCQlwLT5mcmFtZWxpbmVzKTsKCgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19HX1BBUk06CgljYXNlIFZJRElPQ19TX1BBUk06CgljYXNlIFZJRElPQ19TX1BBUk1fT0xEOgoJewoJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnA9YXJnOwoJCXByaW50ayAoIiVzOiB0eXBlPSVkXG4iLCBzLCBwLT50eXBlKTsKCgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ19HX1RVTkVSOgoJY2FzZSBWSURJT0NfU19UVU5FUjoKCXsKCQlzdHJ1Y3QgdjRsMl90dW5lciAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGluZGV4PSVkLCBuYW1lPSVzLCB0eXBlPSVkLCBjYXBhYmlsaXR5PSVkLCAiCgkJCSJyYW5nZWxvdz0lZCwgcmFuZ2VoaWdoPSVkLCBzaWduYWw9JWQsIGFmYz0lZCwgIgoJCQkicnhzdWJjaGFucz0lZCwgYXVkbW9kZT0lZFxuIiwgcywKCQkJCXAtPmluZGV4LCBwLT5uYW1lLCBwLT50eXBlLAoJCQkJcC0+Y2FwYWJpbGl0eSwgcC0+cmFuZ2Vsb3cscC0+cmFuZ2VoaWdoLAoJCQkJcC0+cnhzdWJjaGFucywgcC0+YXVkbW9kZSwgcC0+c2lnbmFsLAoJCQkJcC0+YWZjKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR1ZCSUZNVDoKCWNhc2UgVklESU9DU1ZCSUZNVDoKCXsKCQlzdHJ1Y3QgdmJpX2Zvcm1hdCAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHNhbXBsaW5nX3JhdGU9JWQsIHNhbXBsZXNfcGVyX2xpbmU9JWQsICIKCQkJInNhbXBsZV9mb3JtYXQ9JWQsIHN0YXJ0PSVkLyVkLCBjb3VudD0lZC8lZCwgZmxhZ3M9JWRcbiIsIHMsCgkJCQlwLT5zYW1wbGluZ19yYXRlLHAtPnNhbXBsZXNfcGVyX2xpbmUsCgkJCQlwLT5zYW1wbGVfZm9ybWF0LHAtPnN0YXJ0WzBdLHAtPnN0YXJ0WzFdLAoJCQkJcC0+Y291bnRbMF0scC0+Y291bnRbMV0scC0+ZmxhZ3MpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NHQVVESU86CgljYXNlIFZJRElPQ1NBVURJTzoKCXsKCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnA9YXJnOwoJCXByaW50ayAoIiVzOiBhdWRpbz0lZCwgdm9sdW1lPSVkLCBiYXNzPSVkLCB0cmVibGU9JWQsICIKCQkJImZsYWdzPSVkLCBuYW1lPSVzLCBtb2RlPSVkLCBiYWxhbmNlPSVkLCBzdGVwPSVkXG4iLAoJCQkJcyxwLT5hdWRpbyxwLT52b2x1bWUscC0+YmFzcywgcC0+dHJlYmxlLAoJCQkJcC0+ZmxhZ3MscC0+bmFtZSxwLT5tb2RlLHAtPmJhbGFuY2UscC0+c3RlcCk7CgkJYnJlYWs7Cgl9CgljYXNlIFZJRElPQ0dGQlVGOgoJY2FzZSBWSURJT0NTRkJVRjoKCXsKCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICpwPWFyZzsKCQlwcmludGsgKCIlczogYmFzZT0lMDhseCwgaGVpZ2h0PSVkLCB3aWR0aD0lZCwgZGVwdGg9JWQsICIKCQkJImJ5dGVzcGVybGluZT0lZFxuIiwgcywKCQkJCSh1bnNpZ25lZCBsb25nKSBwLT5iYXNlLCBwLT5oZWlnaHQsIHAtPndpZHRoLAoJCQkJcC0+ZGVwdGgscC0+Ynl0ZXNwZXJsaW5lKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR0NBUDoKCXsKCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IG5hbWU9JXMsIHR5cGU9JWQsIGNoYW5uZWxzPSVkLCBhdWRpb3M9JWQsICIKCQkJIm1heHdpZHRoPSVkLCBtYXhoZWlnaHQ9JWQsIG1pbndpZHRoPSVkLCBtaW5oZWlnaHQ9JWRcbiIsCgkJCQlzLHAtPm5hbWUscC0+dHlwZSxwLT5jaGFubmVscyxwLT5hdWRpb3MsCgkJCQlwLT5tYXh3aWR0aCxwLT5tYXhoZWlnaHQscC0+bWlud2lkdGgsCgkJCQlwLT5taW5oZWlnaHQpOwoKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR0NBUFRVUkU6CgljYXNlIFZJRElPQ1NDQVBUVVJFOgoJewoJCXN0cnVjdCB2aWRlb19jYXB0dXJlICpwPWFyZzsKCQlwcmludGsgKCIlczogeD0lZCwgeT0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZCwgZGVjaW1hdGlvbj0lZCwiCgkJCSIgZmxhZ3M9JWRcbiIsIHMsCgkJCQlwLT54LCBwLT55LHAtPndpZHRoLCBwLT5oZWlnaHQsCgkJCQlwLT5kZWNpbWF0aW9uLHAtPmZsYWdzKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR0NIQU46CgljYXNlIFZJRElPQ1NDSEFOOgoJewoJCXN0cnVjdCB2aWRlb19jaGFubmVsICpwPWFyZzsKCQlwcmludGsgKCIlczogY2hhbm5lbD0lZCwgbmFtZT0lcywgdHVuZXJzPSVkLCBmbGFncz0lZCwgIgoJCQkidHlwZT0lZCwgbm9ybT0lZFxuIiwgcywKCQkJCXAtPmNoYW5uZWwscC0+bmFtZSxwLT50dW5lcnMsCgkJCQlwLT5mbGFncyxwLT50eXBlLHAtPm5vcm0pOwoKCQlicmVhazsKCX0KCWNhc2UgVklESU9DU01JQ1JPQ09ERToKCXsKCQlzdHJ1Y3QgdmlkZW9fY29kZSAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGxvYWR3aGF0PSVzLCBkYXRhc2l6ZT0lZFxuIiwgcywKCQkJCXAtPmxvYWR3aGF0LHAtPmRhdGFzaXplKTsKCQlicmVhazsKCX0KCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgoJewoJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBmbGFncz0lZCwgaW5wdXRzPSVkLCBvdXRwdXRzPSVkXG4iLCBzLAoJCQkJcC0+ZmxhZ3MscC0+aW5wdXRzLHAtPm91dHB1dHMpOwoJCWJyZWFrOwoJfQoJY2FzZSBERUNPREVSX0lOSVQ6Cgl7CgkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGxlbj0lY1xuIiwgcywgcC0+bGVuKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR1BMQVlJTkZPOgoJewoJCXN0cnVjdCB2aWRlb19pbmZvICpwPWFyZzsKCQlwcmludGsgKCIlczogZnJhbWVfY291bnQ9JWQsIGhfc2l6ZT0lZCwgdl9zaXplPSVkLCAiCgkJCSJzbXB0ZV90aW1lY29kZT0lZCwgcGljdHVyZV90eXBlPSVkLCAiCgkJCSJ0ZW1wb3JhbF9yZWZlcmVuY2U9JWQsIHVzZXJfZGF0YT0lc1xuIiwgcywKCQkJCXAtPmZyYW1lX2NvdW50LCBwLT5oX3NpemUsCgkJCQlwLT52X3NpemUsIHAtPnNtcHRlX3RpbWVjb2RlLAoJCQkJcC0+cGljdHVyZV90eXBlLCBwLT50ZW1wb3JhbF9yZWZlcmVuY2UsCgkJCQlwLT51c2VyX2RhdGEpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NLRVk6Cgl7CgkJc3RydWN0IHZpZGVvX2tleSAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IGtleT0lcywgZmxhZ3M9JWRcbiIsIHMsCgkJCQlwLT5rZXksIHAtPmZsYWdzKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR01CVUY6Cgl7CgkJc3RydWN0IHZpZGVvX21idWYgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBzaXplPSVkLCBmcmFtZXM9JWQsIG9mZnNldHM9MHglMDhseFxuIiwgcywKCQkJCXAtPnNpemUsCgkJCQlwLT5mcmFtZXMsCgkJCQkodW5zaWduZWQgbG9uZylwLT5vZmZzZXRzKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DTUNBUFRVUkU6Cgl7CgkJc3RydWN0IHZpZGVvX21tYXAgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBmcmFtZT0lZCwgaGVpZ2h0PSVkLCB3aWR0aD0lZCwgZm9ybWF0PSVkXG4iLCBzLAoJCQkJcC0+ZnJhbWUsCgkJCQlwLT5oZWlnaHQsIHAtPndpZHRoLAoJCQkJcC0+Zm9ybWF0KTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR1BJQ1Q6CgljYXNlIFZJRElPQ1NQSUNUOgoJY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgoJewoJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwPWFyZzsKCgkJcHJpbnRrICgiJXM6IGJyaWdodG5lc3M9JWQsIGh1ZT0lZCwgY29sb3VyPSVkLCBjb250cmFzdD0lZCwiCgkJCSIgd2hpdGVuZXNzPSVkLCBkZXB0aD0lZCwgcGFsZXR0ZT0lZFxuIiwgcywKCQkJCXAtPmJyaWdodG5lc3MsIHAtPmh1ZSwgcC0+Y29sb3VyLAoJCQkJcC0+Y29udHJhc3QsIHAtPndoaXRlbmVzcywgcC0+ZGVwdGgsCgkJCQlwLT5wYWxldHRlKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DU1BMQVlNT0RFOgoJewoJCXN0cnVjdCB2aWRlb19wbGF5X21vZGUgKnA9YXJnOwoJCXByaW50ayAoIiVzOiBtb2RlPSVkLCBwMT0lZCwgcDI9JWRcbiIsIHMsCgkJCQlwLT5tb2RlLHAtPnAxLHAtPnAyKTsKCQlicmVhazsKCX0KCWNhc2UgVklESU9DR1RVTkVSOgoJY2FzZSBWSURJT0NTVFVORVI6Cgl7CgkJc3RydWN0IHZpZGVvX3R1bmVyICpwPWFyZzsKCQlwcmludGsgKCIlczogdHVuZXI9JWQsIG5hbWU9JXMsIHJhbmdlbG93PSVsZCwgcmFuZ2VoaWdoPSVsZCwgIgoJCQkiZmxhZ3M9JWQsIG1vZGU9JWQsIHNpZ25hbD0lZFxuIiwgcywKCQkJCXAtPnR1bmVyLCBwLT5uYW1lLHAtPnJhbmdlbG93LCBwLT5yYW5nZWhpZ2gsCgkJCQlwLT5mbGFncyxwLT5tb2RlLCBwLT5zaWduYWwpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NHVU5JVDoKCXsKCQlzdHJ1Y3QgdmlkZW9fdW5pdCAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHZpZGVvPSVkLCB2Ymk9JWQsIHJhZGlvPSVkLCBhdWRpbz0lZCwgIgoJCQkidGVsZXRleHQ9JWRcbiIsIHMsCgkJCQlwLT52aWRlbyxwLT52YmkscC0+cmFkaW8scC0+YXVkaW8scC0+dGVsZXRleHQpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NHV0lOOgoJY2FzZSBWSURJT0NTV0lOOgoJewoJCXN0cnVjdCB2aWRlb193aW5kb3cgKnA9YXJnOwoJCXByaW50ayAoIiVzOiB4PSVkLCB5PSVkLCB3aWR0aD0lZCwgaGVpZ2h0PSVkLCBjaHJvbWFrZXk9JWQsIgoJCQkiIGZsYWdzPSVkLCBjbGlwY291bnQ9JWRcbiIsIHMsCgkJCQlwLT54LCBwLT55LHAtPndpZHRoLCBwLT5oZWlnaHQsCgkJCQlwLT5jaHJvbWFrZXkscC0+ZmxhZ3MsCgkJCQlwLT5jbGlwY291bnQpOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6CgljYXNlIFZJRElPQ19JTlRfSTJTX0NMT0NLX0ZSRVE6CgljYXNlIFZJRElPQ19JTlRfU19TVEFOREJZOgoJewoJCXUzMiAqcD1hcmc7CgoJCXByaW50ayAoIiVzOiB2YWx1ZT0lZFxuIiwgcywgKnApOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NHRlJFUToKCWNhc2UgVklESU9DU0ZSRVE6Cgl7CgkJdW5zaWduZWQgbG9uZyAqcD1hcmc7CgkJcHJpbnRrICgiJXM6IHZhbHVlPSVsdVxuIiwgcywgKnApOwoJCWJyZWFrOwoJfQoJY2FzZSBWSURJT0NfR19TVEQ6CgljYXNlIFZJRElPQ19TX1NURDoKCWNhc2UgVklESU9DX1FVRVJZU1REOgoJewoJCXY0bDJfc3RkX2lkICpwPWFyZzsKCgkJcHJpbnRrICgiJXM6IHZhbHVlPSVsbHVcbiIsIHMsICpwKTsKCQlicmVhazsKCX0KCX0KfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCkVYUE9SVF9TWU1CT0wodjRsMl92aWRlb19zdGRfY29uc3RydWN0KTsKCkVYUE9SVF9TWU1CT0wodjRsMl9wcmlvX2luaXQpOwpFWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19jaGFuZ2UpOwpFWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19vcGVuKTsKRVhQT1JUX1NZTUJPTCh2NGwyX3ByaW9fY2xvc2UpOwpFWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19tYXgpOwpFWFBPUlRfU1lNQk9MKHY0bDJfcHJpb19jaGVjayk7CgpFWFBPUlRfU1lNQk9MKHY0bDJfZmllbGRfbmFtZXMpOwpFWFBPUlRfU1lNQk9MKHY0bDJfdHlwZV9uYW1lcyk7CkVYUE9SVF9TWU1CT0wodjRsX3ByaW50a19pb2N0bCk7CkVYUE9SVF9TWU1CT0wodjRsX3ByaW50a19pb2N0bF9hcmcpOwoKLyoKICogTG9jYWwgdmFyaWFibGVzOgogKiBjLWJhc2ljLW9mZnNldDogOAogKiBFbmQ6CiAqLwo=