From mboxrd@z Thu Jan 1 00:00:00 1970 From: ankitprasad.r.sharma@intel.com Subject: [PATCH 09/10] drm/i915: Migrate stolen objects before hibernation Date: Fri, 18 Mar 2016 11:52:09 +0530 Message-ID: <1458282130-31660-10-git-send-email-ankitprasad.r.sharma@intel.com> References: <1458282130-31660-1-git-send-email-ankitprasad.r.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 47F056E02C for ; Fri, 18 Mar 2016 06:46:34 +0000 (UTC) In-Reply-To: <1458282130-31660-1-git-send-email-ankitprasad.r.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Ankitprasad Sharma , akash.goel@intel.com List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpWaWxsZSByZW1p bmRlZCB1cyB0aGF0IHN0b2xlbiBtZW1vcnkgaXMgbm90IHByZXNlcnZlZCBhY3Jvc3MKaGliZXJu YXRpb24sIGFuZCBhIHJlc3VsdCBvZiB0aGlzIHdhcyB0aGF0IGNvbnRleHQgb2JqZWN0cyBub3cg YmVpbmcKYWxsb2NhdGVkIGZyb20gc3RvbGVuIHdlcmUgYmVpbmcgY29ycnVwdGVkIG9uIFM0IGFu ZCBwcm9tcHRseSBoYW5naW5nCnRoZSBHUFUgb24gcmVzdW1lLgoKV2Ugd2FudCB0byB1dGlsaXNl IHN0b2xlbiBmb3IgYXMgbXVjaCBhcyBwb3NzaWJsZSAobm90aGluZyBlbHNlIHdpbGwgdXNlCnRo YXQgd2FzdGVkIG1lbW9yeSBvdGhlcndpc2UpLCBzbyB3ZSBuZWVkIGEgc3RyYXRlZ3kgZm9yIGhh bmRsaW5nCmdlbmVyYWwgb2JqZWN0cyBhbGxvY2F0ZWQgZnJvbSBzdG9sZW4gYW5kIGhpYmVybmF0 aW9uLiBBIHNpbXBsZSBzb2x1dGlvbgppcyB0byBkbyBhIENQVSBjb3B5IHRocm91Z2ggdGhlIEdU VCBvZiB0aGUgc3RvbGVuIG9iamVjdCBpbnRvIGEgZnJlc2gKc2htZW1mcyBiYWNraW5nIHN0b3Jl IGFuZCB0aGVuY2Vmb3J0aCB0cmVhdCBpdCBhcyBhIG5vcm1hbCBvYmplY3RzLiBUaGlzCmNhbiBi ZSByZWZpbmVkIGluIGZ1dHVyZSB0byBlaXRoZXIgdXNlIGEgR1BVIGNvcHkgdG8gYXZvaWQgdGhl IHNsb3cKdW5jYWNoZWQgcmVhZHMgKHRob3VnaCBpdCdzIGhpYmVybmF0aW9uISkgYW5kIHJlY3Jl YXRlIHN0b2xlbiBvYmplY3RzCnVwb24gcmVzdW1lL2ZpcnN0LXVzZS4gRm9yIG5vdywgYSBzaW1w bGUgYXBwcm9hY2ggc2hvdWxkIHN1ZmZpY2UgZm9yCnRlc3RpbmcgdGhlIG9iamVjdCBtaWdyYXRp b24uCgp2MjoKU3dhcCBQVEUgZm9yIHBpbm5lZCBiaW5kaW5ncyBvdmVyIHRvIHRoZSBzaG1lbWZz LiBUaGlzIGFkZHMgYQpjb21wbGljYXRlZCBkYW5jZSwgYnV0IGlzIHJlcXVpcmVkIGFzIG1hbnkg c3RvbGVuIG9iamVjdHMgYXJlIGxpa2VseSB0bwpiZSBwaW5uZWQgZm9yIHVzZSBieSB0aGUgaGFy ZHdhcmUuIFN3YXBwaW5nIHRoZSBQVEVzIHNob3VsZCBub3QgcmVzdWx0CmluIGV4dGVybmFsbHkg dmlzaWJsZSBiZWhhdmlvdXIsIGFzIGVhY2ggUFRFIHVwZGF0ZSBzaG91bGQgYmUgYXRvbWljIGFu ZAp0aGUgdHdvIHBhZ2VzIGlkZW50aWNhbC4gKGRhbnZldCkKCnNhZmUtYnktZGVmYXVsdCwgb3Ig dGhlIHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZS4gV2UgbmVlZCBhIG5ldyBmbGFnCnRvIG1h cmsgb2JqZWN0cyB0aGF0IHdlIGNhbiB3aWxmdWxseSBkaXNjYXJkIGFuZCByZWNyZWF0ZSBhY3Jv c3MKaGliZXJuYXRpb24uIChkYW52ZXQpCgpKdXN0IHVzZSB0aGUgZ2xvYmFsX2xpc3QgcmF0aGVy IHRoYW4gaW52ZW50IGEgbmV3IHN0b2xlbl9saXN0LiBUaGlzIGlzCnRoZSBzbG93cGF0aCBoaWJl cm5hdGUgYW5kIHNvIGFkZGluZyBhIG5ldyBsaXN0IGFuZCB0aGUgYXNzb2NpYXRlZApjb21wbGV4 aXR5IGlzbid0IHdvcnRoIGl0LgoKdjM6IFJlYmFzZWQgb24gZHJtLWludGVsLW5pZ2h0bHkgKEFu a2l0KQoKdjQ6IFVzZSBpbnNlcnRfcGFnZSB0byBtYXAgc3RvbGVuIG1lbW9yeSBiYWNrZWQgcGFn ZXMgZm9yIG1pZ3JhdGlvbiB0bwpzaG1lbSAoQ2hyaXMpCgp2NTogQWNxdWlyZSBtdXRleCBsb2Nr IHdoaWxlIGNvcHlpbmcgc3RvbGVuIGJ1ZmZlciBvYmplY3RzIHRvIHNobWVtIChDaHJpcykKCnY2 OiBIYW5kbGVkIGZpbGUgbGVhaywgU3BsaXR0ZWQgb2JqZWN0IG1pZ3JhdGlvbiBmdW5jdGlvbiwg YWRkZWQga2VybmVsZG9jCmZvciBtaWdyYXRlX3N0b2xlbl90b19zaG1lbWZzKCkgZnVuY3Rpb24g KFR2cnRrbykKVXNlIGk5MTUgd3JhcHBlciBmdW5jdGlvbiBmb3IgZHJtX21tX2luc2VydF9ub2Rl X2luX3JhbmdlKCkKCnY3OiBLZWVwIHRoZSBvYmplY3QgaW4gY3B1IGRvbWFpbiBhZnRlciBnZXRf cGFnZXMsIHJlbW92ZSB0aGUgb2JqZWN0IGZyb20KdGhlIHVuYm91bmQgbGlzdCBvbmx5IHdoZW4g bWFya2VkIFBVUkdFRCwgQ29ycmVjdGVkIHNwbGl0IG9mIG9iamVjdCBtaWdyYXRpb24KZnVuY3Rp b24gKENocmlzKQoKdjg6IFNwbGl0IGk5MTVfZ2VtX2ZyZWV6ZSgpLCByZW1vdmVkIHJlZHVuZGFu dCB1c2Ugb2YgYmFycmllciwgY29ycmVjdGVkCnVzZSBvZiBzZXRfdG9fY3B1X2RvbWFpbigpIChD aHJpcykKCnY5OiBSZXBsYWNlZCBXQVJOX09OIGJ5IEJVR19PTiBhbmQgYWRkZWQgYSBjb21tZW50 IGV4cGxhaW5pbmcgaXQKKERhbmllbC9UdnJ0a28pCgp2MTA6IERvY3VtZW50IHVzZSBvZiBiYXJy aWVycyAoQ2hyaXMpCgp2MTE6IFJlc29sdmVkIGxpc3QgY29ycnVwdGlvbiBkdWUgdG8gbm90IHJl bW92aW5nIG9iaiBmcm9tIGdsb2JhbF9saXN0CmlmIG5vIHJlZmVyZW5jZSB0byBwYWdlcyBpcyBo ZWxkLCBSZWJhc2VkIChBbmtpdCkKClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXMg YXQgY2hyaXMtd2lsc29uLmNvLnVrPgpTaWduZWQtb2ZmLWJ5OiBBbmtpdHByYXNhZCBTaGFybWEg PGFua2l0cHJhc2FkLnIuc2hhcm1hQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1 bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYyAgICAgICAgIHwgIDE3ICsrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCAgICAgICAgIHwgIDEwICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAg ICAgICAgfCAyMDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jICB8ICA0OSArKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2ZiZGV2LmMgICAgICB8ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5jICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZl ci5jIHwgICA2ICsKIDggZmlsZXMgY2hhbmdlZCwgMjgzIGluc2VydGlvbnMoKyksIDEyIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDIwZTgyMDAuLmViMDE5OTEgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTAwMCw2ICsxMDAwLDIxIEBAIHN0YXRpYyBpbnQg aTkxNV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAlyZXR1cm4gaTkxNV9kcm1fc3Vz cGVuZChkcm1fZGV2KTsKIH0KIAorc3RhdGljIGludCBpOTE1X3BtX2ZyZWV6ZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVfZ2VtX2ZyZWV6ZShwY2lfZ2V0 X2RydmRhdGEodG9fcGNpX2RldihkZXYpKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldCA9IGk5MTVfcG1fc3VzcGVuZChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBpOTE1X3BtX3N1c3BlbmRfbGF0ZShzdHJ1Y3Qg ZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkZXZfdG9faTkx NShkZXYpLT5kZXY7CkBAIC0xNjQ3LDcgKzE2NjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRl dl9wbV9vcHMgaTkxNV9wbV9vcHMgPSB7CiAJICogQHJlc3RvcmUsIEByZXN0b3JlX2Vhcmx5IDog Y2FsbGVkIGFmdGVyIHJlYm9vdGluZyBhbmQgcmVzdG9yaW5nIHRoZQogCSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGhpYmVybmF0aW9uIGltYWdlIFtQTVNHX1JFU1RPUkVdCiAJICovCi0J LmZyZWV6ZSA9IGk5MTVfcG1fc3VzcGVuZCwKKwkuZnJlZXplID0gaTkxNV9wbV9mcmVlemUsCiAJ LmZyZWV6ZV9sYXRlID0gaTkxNV9wbV9zdXNwZW5kX2xhdGUsCiAJLnRoYXdfZWFybHkgPSBpOTE1 X3BtX3Jlc3VtZV9lYXJseSwKIAkudGhhdyA9IGk5MTVfcG1fcmVzdW1lLApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKaW5kZXggNGM4MTgyOC4uZjljNTgwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o CkBAIC0yMTAxLDYgKzIxMDEsMTIgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgewogCSAq IEFkdmljZTogYXJlIHRoZSBiYWNraW5nIHBhZ2VzIHB1cmdlYWJsZT8KIAkgKi8KIAl1bnNpZ25l ZCBpbnQgbWFkdjoyOworCS8qKgorCSAqIFdoZXJlYXMgbWFkdiBpcyBmb3IgdXNlcnNwYWNlLCB0 aGVyZSBhcmUgY2VydGFpbiBzaXR1YXRpb25zCisJICogd2hlcmUgd2Ugd2FudCBJOTE1X01BRFZf RE9OVE5FRUQgYmVoYXZpb3VyIG9uIGludGVybmFsIG9iamVjdHMKKwkgKiB3aXRob3V0IGNvbmZs YXRpbmcgdGhlIHVzZXJzcGFjZSBzZXR0aW5nLgorCSAqLworCXVuc2lnbmVkIGludCBpbnRlcm5h bF92b2xhdGlsZToxOwogCiAJLyoqCiAJICogQ3VycmVudCB0aWxpbmcgbW9kZSBmb3IgdGhlIG9i amVjdC4KQEAgLTMwNTgsNiArMzA2NCw5IEBAIGludCBpOTE1X2dlbV9sM19yZW1hcChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwgaW50IHNsaWNlKTsKIHZvaWQgaTkxNV9nZW1faW5p dF9zd2l6emxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGk5MTVfZ2VtX2NsZWFu dXBfZW5naW5lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGludCBfX211c3RfY2hlY2sgaTkx NV9ncHVfaWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBfX211c3RfY2hlY2sgaTkx NV9nZW1fZnJlZXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IF9fbXVzdF9jaGVjawor aTkxNV9nZW1fb2JqZWN0X21pZ3JhdGVfc3RvbGVuX3RvX3NobWVtZnMoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaik7CiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX3N1c3BlbmQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIF9faTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKIAkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpi YXRjaF9vYmosCkBAIC0zMjgwLDYgKzMyODksNyBAQCBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3N0 b2xlbl9mb3JfcHJlYWxsb2NhdGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICAg ICB1MzIgc3RvbGVuX29mZnNldCwKIAkJCQkJICAgICAgIHUzMiBndHRfb2Zmc2V0LAogCQkJCQkg ICAgICAgdTMyIHNpemUpOworaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9zdG9sZW5fZnJlZXpl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKIAogLyogaTkxNV9nZW1fc2hyaW5rZXIu YyAqLwogdW5zaWduZWQgbG9uZyBpOTE1X2dlbV9zaHJpbmsoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggYTYyNzMzMy4uZTk2OTc1 YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC00NzI0LDEyICs0NzI0LDI3IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1fb2JqZWN0X29w cyA9IHsKIAkucHV0X3BhZ2VzID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19ndHQsCiB9Owog CitzdGF0aWMgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKgoraTkxNV9nZW1fc2V0X2lub2RlX2dmcChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgYWRk cmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGVfaW5vZGUoZmlsZSktPmlfbWFwcGluZzsKKwlnZnBf dCBtYXNrOworCisJbWFzayA9IEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1JFQ0xBSU1BQkxFOworCWlm IChJU19DUkVTVExJTkUoZGV2KSB8fCBJU19CUk9BRFdBVEVSKGRldikpIHsKKwkJLyogOTY1Z20g Y2Fubm90IHJlbG9jYXRlIG9iamVjdHMgYWJvdmUgNEdpQi4gKi8KKwkJbWFzayAmPSB+X19HRlBf SElHSE1FTTsKKwkJbWFzayB8PSBfX0dGUF9ETUEzMjsKKwl9CisJbWFwcGluZ19zZXRfZ2ZwX21h c2sobWFwcGluZywgbWFzayk7CisKKwlyZXR1cm4gbWFwcGluZzsKK30KKwogc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKmk5MTVfZ2VtX2FsbG9jX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAogCQkJCQkJICBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwotCWdmcF90IG1hc2s7CiAJ aW50IHJldDsKIAogCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9hbGxvYyhkZXYpOwpAQCAtNDc0Miwx NSArNDc1Nyw3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICppOTE1X2dlbV9hbGxvY19v YmplY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9 CiAKLQltYXNrID0gR0ZQX0hJR0hVU0VSIHwgX19HRlBfUkVDTEFJTUFCTEU7Ci0JaWYgKElTX0NS RVNUTElORShkZXYpIHx8IElTX0JST0FEV0FURVIoZGV2KSkgewotCQkvKiA5NjVnbSBjYW5ub3Qg cmVsb2NhdGUgb2JqZWN0cyBhYm92ZSA0R2lCLiAqLwotCQltYXNrICY9IH5fX0dGUF9ISUdITUVN OwotCQltYXNrIHw9IF9fR0ZQX0RNQTMyOwotCX0KLQotCW1hcHBpbmcgPSBmaWxlX2lub2RlKG9i ai0+YmFzZS5maWxwKS0+aV9tYXBwaW5nOwotCW1hcHBpbmdfc2V0X2dmcF9tYXNrKG1hcHBpbmcs IG1hc2spOworCWk5MTVfZ2VtX3NldF9pbm9kZV9nZnAoZGV2LCBvYmotPmJhc2UuZmlscCk7CiAK IAlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZpOTE1X2dlbV9vYmplY3Rfb3BzKTsKIApAQCAt NDkyMiw2ICs0OTI5LDE3OSBAQCBpOTE1X2dlbV9zdG9wX2VuZ2luZXMoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKIAkJZGV2X3ByaXYtPmd0LnN0b3BfZW5naW5lKGVuZ2luZSk7CiB9CiAKK3N0YXRp YyBpbnQKK2NvcHlfY29udGVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1h cHBpbmcpCit7CisJc3RydWN0IGRybV9tbV9ub2RlIG5vZGU7CisJaW50IHJldCwgaTsKKworCXJl dCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIGZhbHNlKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogc3RvbGVuIG9iamVjdHMgYXJlIGFscmVhZHkgcGlu bmVkIHRvIHByZXZlbnQgc2hyaW5rYWdlICovCisJbWVtc2V0KCZub2RlLCAwLCBzaXplb2Yobm9k ZSkpOworCXJldCA9IGluc2VydF9tYXBwYWJsZV9ub2RlKGk5MTUsICZub2RlLCBQQUdFX1NJWkUp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgb2JqLT5iYXNl LnNpemUgLyBQQUdFX1NJWkU7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJdm9pZCAq X19pb21lbSBzcmM7CisJCXZvaWQgKmRzdDsKKworCQlpOTE1LT5ndHQuYmFzZS5pbnNlcnRfcGFn ZSgmaTkxNS0+Z3R0LmJhc2UsCisJCQkJCSAgIGk5MTVfZ2VtX29iamVjdF9nZXRfZG1hX2FkZHJl c3Mob2JqLCBpKSwKKwkJCQkJICAgbm9kZS5zdGFydCwKKwkJCQkJICAgSTkxNV9DQUNIRV9OT05F LAorCQkJCQkgICAwKTsKKworCQlwYWdlID0gc2htZW1fcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGlu ZywgaSk7CisJCWlmIChJU19FUlIocGFnZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIocGFnZSk7CisJ CQlicmVhazsKKwkJfQorCisJCXNyYyA9IGlvX21hcHBpbmdfbWFwX2F0b21pY193YyhpOTE1LT5n dHQubWFwcGFibGUsIG5vZGUuc3RhcnQpOworCQlkc3QgPSBrbWFwX2F0b21pYyhwYWdlKTsKKwkJ d21iKCk7IC8qIGZsdXNoIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEdHVFQgKGluc2VydF9wYWdlKSAq LworCQltZW1jcHlfZnJvbWlvKGRzdCwgc3JjLCBQQUdFX1NJWkUpOworCQl3bWIoKTsgCS8qIGZs dXNoIHRoZSB3cml0ZSBiZWZvcmUgd2UgbW9kaWZ5IHRoZSBHR1RUICovCisJCWt1bm1hcF9hdG9t aWMoZHN0KTsKKwkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMoc3JjKTsKKworCQlwYWdlX2NhY2hl X3JlbGVhc2UocGFnZSk7CisJfQorCisJaTkxNS0+Z3R0LmJhc2UuY2xlYXJfcmFuZ2UoJmk5MTUt Pmd0dC5iYXNlLAorCQkJCSAgIG5vZGUuc3RhcnQsIG5vZGUuc2l6ZSwKKwkJCQkgICB0cnVlKTsK KwlyZW1vdmVfbWFwcGFibGVfbm9kZSgmbm9kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldHVybiBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4ob2JqLCB0cnVlKTsK K30KKworLyoqCisgKiBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZV9zdG9sZW5fdG9fc2htZW1mcygp IC0gbWlncmF0ZXMgYSBzdG9sZW4gYmFja2VkCisgKiBvYmplY3QgdG8gc2htZW1mcworICogQG9i ajogc3RvbGVuIGJhY2tlZCBvYmplY3QgdG8gYmUgbWlncmF0ZWQKKyAqCisgKiBSZXR1cm5zOiAw IG9uIHN1Y2Nlc3NmdWwgbWlncmF0aW9uLCBlcnJubyBvbiBmYWlsdXJlCisgKi8KKworaW50Citp OTE1X2dlbV9vYmplY3RfbWlncmF0ZV9zdG9sZW5fdG9fc2htZW1mcyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9f aTkxNShvYmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgKnZuOworCXN0cnVj dCBmaWxlICpmaWxlOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCXN0cnVjdCBz Z190YWJsZSAqc3RvbGVuX3BhZ2VzLCAqc2htZW1mc19wYWdlczsKKwlpbnQgcmV0OworCisJaWYg KFdBUk5fT05fT05DRShpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopKSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaWxlID0gc2htZW1fZmlsZV9zZXR1cCgiZHJtIG1tIG9i amVjdCIsIG9iai0+YmFzZS5zaXplLCBWTV9OT1JFU0VSVkUpOworCWlmIChJU19FUlIoZmlsZSkp CisJCXJldHVybiBQVFJfRVJSKGZpbGUpOworCW1hcHBpbmcgPSBpOTE1X2dlbV9zZXRfaW5vZGVf Z2ZwKG9iai0+YmFzZS5kZXYsIGZpbGUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZt YSwgdm4sICZvYmotPnZtYV9saXN0LCBvYmpfbGluaykKKwkJaWYgKGk5MTVfdm1hX3VuYmluZCh2 bWEpKQorCQkJY29udGludWU7CisKKwlpZiAob2JqLT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVF RCAmJiBsaXN0X2VtcHR5KCZvYmotPnZtYV9saXN0KSkgeworCQkvKiBEaXNjYXJkIHRoZSBzdG9s ZW4gcmVzZXJ2YXRpb24sIGFuZCByZXBsYWNlIHdpdGgKKwkJICogYW4gdW5wb3B1bGF0ZWQgc2ht ZW1mcyBvYmplY3QuCisJCSAqLworCQlvYmotPm1hZHYgPSBfX0k5MTVfTUFEVl9QVVJHRUQ7CisJ fSBlbHNlIHsKKwkJcmV0ID0gY29weV9jb250ZW50KG9iaiwgaTkxNSwgbWFwcGluZyk7CisJCWlm IChyZXQpCisJCQlnb3RvIGVycl9maWxlOworCX0KKworCXN0b2xlbl9wYWdlcyA9IG9iai0+cGFn ZXM7CisJb2JqLT5wYWdlcyA9IE5VTEw7CisKKwlvYmotPmJhc2UuZmlscCA9IGZpbGU7CisKKwkv KiBSZWNyZWF0ZSBhbnkgcGlubmVkIGJpbmRpbmcgd2l0aCBwb2ludGVycyB0byB0aGUgbmV3IHN0 b3JhZ2UgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJm9iai0+dm1hX2xpc3QpKSB7CisJCXJldCA9IGk5 MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfZ3R0KG9iaik7CisJCWlmIChyZXQpIHsKKwkJCW9iai0+ cGFnZXMgPSBzdG9sZW5fcGFnZXM7CisJCQlnb3RvIGVycl9maWxlOworCQl9CisKKwkJb2JqLT5n ZXRfcGFnZS5zZyA9IG9iai0+cGFnZXMtPnNnbDsKKwkJb2JqLT5nZXRfcGFnZS5sYXN0ID0gMDsK KworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3QsIG9ial9saW5rKSB7 CisJCQlpZiAoIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSkKKwkJCQljb250aW51 ZTsKKworCQkJLyogQXMgdm1hIGlzIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBvbmx5IHRoZSBQVEVz CisJCQkgKiBoYXZlIHRvIGJlIHJlcHJvZ3JhbW1lZCwgbWFrZXMgdGhpcyB2bWFfYmluZAorCQkJ ICogY2FsbCBleHRyZW1lbHkgdW5saWtlbHkgdG8gZmFpbC4KKwkJCSAqLworCQkJQlVHX09OKGk5 MTVfdm1hX2JpbmQodm1hLAorCQkJCQkgICAgICBvYmotPmNhY2hlX2xldmVsLAorCQkJCQkgICAg ICBQSU5fVVBEQVRFKSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBSZW1vdmUgb2JqZWN0IGZyb20g Z2xvYmFsIGxpc3QgaWYgbm8gcmVmZXJlbmNlIHRvIHRoZQorCQkgKiBwYWdlcyBpcyBoZWxkLgor CQkgKi8KKwkJbGlzdF9kZWwoJm9iai0+Z2xvYmFsX2xpc3QpOworCX0KKworCS8qIGRyb3AgdGhl IHN0b2xlbiBwaW4gYW5kIGJhY2tpbmcgKi8KKwlzaG1lbWZzX3BhZ2VzID0gb2JqLT5wYWdlczsK KwlvYmotPnBhZ2VzID0gc3RvbGVuX3BhZ2VzOworCisJaTkxNV9nZW1fb2JqZWN0X3VucGluX3Bh Z2VzKG9iaik7CisJb2JqLT5vcHMtPnB1dF9wYWdlcyhvYmopOworCWlmIChvYmotPm9wcy0+cmVs ZWFzZSkKKwkJb2JqLT5vcHMtPnJlbGVhc2Uob2JqKTsKKworCW9iai0+b3BzID0gJmk5MTVfZ2Vt X29iamVjdF9vcHM7CisJb2JqLT5wYWdlcyA9IHNobWVtZnNfcGFnZXM7CisKKwlyZXR1cm4gMDsK KworZXJyX2ZpbGU6CisJZnB1dChmaWxlKTsKKwlvYmotPmJhc2UuZmlscCA9IE5VTEw7CisJcmV0 dXJuIHJldDsKK30KKworaW50CitpOTE1X2dlbV9mcmVlemUoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwkvKiBDYWxsZWQgYmVmb3JlIGk5MTVfZ2VtX3N1c3BlbmQoKSB3aGVuIGhpYmVybmF0 aW5nICovCisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7CisJ aW50IHJldDsKKworCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEFjcm9zcyBoaWJlcm5hdGlvbiwgdGhlIHN0 b2xlbiBhcmVhIGlzIG5vdCBwcmVzZXJ2ZWQuCisJICogQW55dGhpbmcgaW5zaWRlIHN0b2xlbiBt dXN0IGNvcGllZCBiYWNrIHRvIG5vcm1hbAorCSAqIG1lbW9yeSBpZiB3ZSB3aXNoIHRvIHByZXNl cnZlIGl0LgorCSAqLworCXJldCA9IGk5MTVfZ2VtX3N0b2xlbl9mcmVlemUoaTkxNSk7CisKKwlt dXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQK IGk5MTVfZ2VtX3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKaW5kZXggZTQyYjhmMS4uNjI0NGRhZSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKQEAgLTg0NSwzICs4NDUsNTIgQEAgZXJyOgog CWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogCXJldHVybiBFUlJfUFRS KHJldCk7CiB9CisKK2ludCBpOTE1X2dlbV9zdG9sZW5fZnJlZXplKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosICp0bXA7 CisJc3RydWN0IGxpc3RfaGVhZCAqcGhhc2VbXSA9IHsKKwkJJmk5MTUtPm1tLnVuYm91bmRfbGlz dCwgJmk5MTUtPm1tLmJvdW5kX2xpc3QsIE5VTEwKKwl9LCAqKnA7CisJaW50IHJldCA9IDA7CisK Kwlmb3IgKHAgPSBwaGFzZTsgKnA7IHArKykgeworCQlzdHJ1Y3QgbGlzdF9oZWFkIG1pZ3JhdGU7 CisJCWludCByZXQ7CisKKwkJSU5JVF9MSVNUX0hFQUQoJm1pZ3JhdGUpOworCQlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUob2JqLCB0bXAsICpwLCBnbG9iYWxfbGlzdCkgeworCQkJaWYgKG9iai0+ c3RvbGVuID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCWlmIChvYmotPmludGVybmFsX3Zv bGF0aWxlKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBJbiB0aGUgZ2VuZXJhbCBjYXNlLCB0aGlz IG9iamVjdCBtYXkgb25seSBiZSBhbGl2ZQorCQkJICogZHVlIHRvIGFuIGFjdGl2ZSByZWZlcmVu Y2UsIGFuZCB0aGF0IG1heSBkaXNhcHBlYXIKKwkJCSAqIHdoZW4gd2UgdW5iaW5kIGFueSBvZiB0 aGUgb2JqZWN0cyAoYW5kIHNvIHdhaXQgdXBvbgorCQkJICogdGhlIEdQVSBhbmQgcmV0aXJlIHJl cXVlc3RzKS4gVG8gcHJldmVudCBvbmUgb2YgdGhlCisJCQkgKiBvYmplY3RzIGZyb20gZGlzYXBw ZWFyaW5nIGJlbmVhdGggdXMsIHdlIG5lZWQgdG8KKwkJCSAqIHRha2UgYSByZWZlcmVuY2UgdG8g ZWFjaCBhcyB3ZSBidWlsZCB0aGUgbWlncmF0aW9uCisJCQkgKiBsaXN0LgorCQkJICoKKwkJCSAq IFRoaXMgaXMgc2ltaWxhciB0byB0aGUgc3RyYXRlZ3kgcmVxdWlyZWQgd2hpbHN0CisJCQkgKiBz aHJpbmtpbmcgb3IgZXZpY3Rpbmcgb2JqZWN0cyAoZm9yIHRoZSBzYW1lIHJlYXNvbikuCisJCQkg Ki8KKwkJCWRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwkJCWxpc3RfbW92 ZSgmb2JqLT5nbG9iYWxfbGlzdCwgJm1pZ3JhdGUpOworCQl9CisKKwkJcmV0ID0gMDsKKwkJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgdG1wLCAmbWlncmF0ZSwgZ2xvYmFsX2xpc3QpIHsK KwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZV9zdG9s ZW5fdG9fc2htZW1mcyhvYmopOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+ YmFzZSk7CisJCX0KKwkJbGlzdF9zcGxpY2UoJm1pZ3JhdGUsICpwKTsKKwkJaWYgKHJldCkKKwkJ CWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKaW5kZXggYzVhODBiYi4uMzFiOWFkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwpAQCAtMjUxNyw2ICsyNTE3LDkgQEAgaW50ZWxfYWxsb2NfaW5pdGlhbF9wbGFuZV9v Ymooc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKKwkvKiBO b3QgdG8gYmUgcHJlc2VydmVkIGFjcm9zcyBoaWJlcm5hdGlvbiAqLworCW9iai0+aW50ZXJuYWxf dm9sYXRpbGUgPSB0cnVlOworCiAJb2JqLT50aWxpbmdfbW9kZSA9IHBsYW5lX2NvbmZpZy0+dGls aW5nOwogCWlmIChvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1gpCiAJCW9iai0+c3Ry aWRlID0gZmItPnBpdGNoZXNbMF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwppbmRleCBk NDUwOWQ3Li5mNTY1NzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9m YmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKQEAgLTE1Niw2 ICsxNTYsMTIgQEAgc3RhdGljIGludCBpbnRlbGZiX2FsbG9jKHN0cnVjdCBkcm1fZmJfaGVscGVy ICpoZWxwZXIsCiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIERpc2NhcmQgdGhlIGNvbnRlbnRzIG9m IHRoZSBCSU9TIGZiIGFjcm9zcyBoaWJlcm5hdGlvbi4KKwkgKiBXZSByZWFsbHkgd2FudCB0byBj b21wbGV0ZWx5IHRocm93YXdheSB0aGUgZWFybGllciBmYmRldgorCSAqIGFuZCByZWNvbmZpZ3Vy ZSBpdCBhbnl3YXkuCisJICovCisJb2JqLT5pbnRlcm5hbF92b2xhdGlsZSA9IHRydWU7CisKIAlm YiA9IF9faW50ZWxfZnJhbWVidWZmZXJfY3JlYXRlKGRldiwgJm1vZGVfY21kLCBvYmopOwogCWlm IChJU19FUlIoZmIpKSB7CiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2Up OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5kZXggNGY0MzBhOC4uNWFiYjM5ZiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9wbS5jCkBAIC01MzU0LDYgKzUzNTQsOCBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2 aWV3X3NldHVwX3BjdHgoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlJOTE1X1dSSVRFKFZMVl9Q Q0JSLCBwY3R4X3BhZGRyKTsKIAogb3V0OgorCS8qIFRoZSBwb3dlciBjb250ZXh0IG5lZWQgbm90 IGJlIHByZXNlcnZlZCBhY3Jvc3MgaGliZXJuYXRpb24gKi8KKwlwY3R4LT5pbnRlcm5hbF92b2xh dGlsZSA9IHRydWU7CiAJRFJNX0RFQlVHX0RSSVZFUigiUENCUjogMHglMDh4XG4iLCBJOTE1X1JF QUQoVkxWX1BDQlIpKTsKIAlkZXZfcHJpdi0+dmx2X3BjdHggPSBwY3R4OwogCW11dGV4X3VubG9j aygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZl ci5jCmluZGV4IGY1NDMxNGUuLmU5YmI0MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9y aW5nYnVmZmVyLmMKQEAgLTIxNjcsNiArMjE2NywxMiBAQCBzdGF0aWMgaW50IGludGVsX2FsbG9j X3JpbmdidWZmZXJfb2JqKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaWYgKElTX0VSUihvYmop KQogCQlyZXR1cm4gUFRSX0VSUihvYmopOwogCisJLyogUmluZ2J1ZmZlciBvYmplY3RzIGFyZSBi eSBkZWZpbml0aW9uIHZvbGF0aWxlIC0gb25seSB0aGUgY29tbWFuZHMKKwkgKiBiZXR3ZWVuIEhF QUQgYW5kIFRBSUwgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgYW5kIHdoaWxzdCB0aGVyZSBhcmUKKwkg KiBhbnkgY29tbWFuZHMgdGhlcmUsIHRoZSByaW5nYnVmZmVyIGlzIHBpbm5lZCBieSBhY3Rpdml0 eS4KKwkgKi8KKwlvYmotPmludGVybmFsX3ZvbGF0aWxlID0gdHJ1ZTsKKwogCS8qIG1hcmsgcmlu ZyBidWZmZXJzIGFzIHJlYWQtb25seSBmcm9tIEdQVSBzaWRlIGJ5IGRlZmF1bHQgKi8KIAlvYmot Pmd0X3JvID0gMTsKIAotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=