From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6062D89F38 for ; Tue, 25 Jun 2019 13:14:39 +0000 (UTC) From: Simon Ser Date: Tue, 25 Jun 2019 16:14:31 +0300 Message-Id: <20190625131431.29336-11-simon.ser@intel.com> In-Reply-To: <20190625131431.29336-1-simon.ser@intel.com> References: <20190625131431.29336-1-simon.ser@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v4 10/10] lib/igt_chamelium: autodiscover Chamelium port mappings List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: martin.peres@intel.com List-ID: VGhpcyByZW1vdmVzIHRoZSBuZWVkIGZvciBjb25maWd1cmluZyBDaGFtZWxpdW0gcG9ydHMgaW4g LmlndHJjLCBtYWtpbmcgaXQgYm90aAplYXNpZXIgYW5kIGxlc3MgZXJyb3ItcHJvbmUgdG8gc2V0 dXAgQ2hhbWVsaXVtIGJvYXJkcy4KCkEgbmV3IGZ1bmN0aW9uIGNoYW1lbGl1bV9hdXRvZGlzY292 ZXIgc2V0cyBhIGRpZmZlcmVudCBFRElEIG9uIGVhY2ggQ2hhbWVsaXVtCnBvcnQgYW5kIHBsdWdz IHRoZW0uIFdlIHRoZW4gd2FsayB0aGUgbGlzdCBvZiBEUk0gY29ubmVjdG9ycywgcmVhZCBiYWNr IHRoZQpFRElEIGFuZCBpbmZlciB0aGUgbWFwcGluZy4KClRoZSBFRElEIHNlcmlhbCBudW1iZXIg aXMgdXNlZCB0byB0ZWxsIGVhY2ggcG9ydCBhcGFydC4gSW4gY2FzZSBhIG1hcHBpbmcgaXMKYWxy ZWFkeSBjb25maWd1cmVkIGluIHRoZSAuaWd0cmMgZmlsZSwgd2UgY2hlY2sgdGhhdCBpdCdzIGNv bnNpc3RlbnQuCgpNU1QgaXMgbm90IGhhbmRsZWQgeWV0IChyZXF1aXJlcyByZWZhY3RvcmluZyBl eGlzdGluZyB0ZXN0cyBzaW5jZSBjb25uZWN0b3IgSURzCmFyZW4ndCBzdGFibGUpLgoKU2lnbmVk LW9mZi1ieTogU2ltb24gU2VyIDxzaW1vbi5zZXJAaW50ZWwuY29tPgotLS0KIGxpYi9pZ3RfY2hh bWVsaXVtLmMgfCAyMTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0KIDEgZmlsZSBjaGFuZ2VkLCAyMTEgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5jIGIvbGliL2lndF9jaGFtZWxpdW0uYwppbmRl eCAzY2QyYWNhZmQzODUuLjA1ZWY4YmY5OWU2NyAxMDA2NDQKLS0tIGEvbGliL2lndF9jaGFtZWxp dW0uYworKysgYi9saWIvaWd0X2NoYW1lbGl1bS5jCkBAIC0zNjAsNyArMzYwLDcgQEAgc3RhdGlj IHhtbHJwY192YWx1ZSAqY2hhbWVsaXVtX3JwYyhzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0s CiAgKi8KIHZvaWQgY2hhbWVsaXVtX3BsdWcoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLCBz dHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQpCiB7Ci0JaWd0X2RlYnVnKCJQbHVnZ2luZyAlc1xu IiwgcG9ydC0+bmFtZSk7CisJaWd0X2RlYnVnKCJQbHVnZ2luZyAlcyAoQ2hhbWVsaXVtIHBvcnQg SUQgJWQpXG4iLCBwb3J0LT5uYW1lLCBwb3J0LT5pZCk7CiAJeG1scnBjX0RFQ1JFRihjaGFtZWxp dW1fcnBjKGNoYW1lbGl1bSwgTlVMTCwgIlBsdWciLCAiKGkpIiwgcG9ydC0+aWQpKTsKIH0KIApA QCAtMTg5Myw2ICsxODkzLDIxMiBAQCBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGlu dCBwb3J0X2lkX2Zyb21fZWRpZChpbnQgZHJtX2ZkLCBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0 b3IpCit7CisJaW50IHBvcnRfaWQgPSAtMTsKKwlib29sIG9rOworCXVpbnQ2NF90IGVkaWRfYmxv Yl9pZDsKKwlkcm1Nb2RlUHJvcGVydHlCbG9iUmVzICplZGlkX2Jsb2I7CisJY29uc3Qgc3RydWN0 IGVkaWQgKmVkaWQ7CisJY2hhciBtZmdbM107CisKKwlpZiAoY29ubmVjdG9yLT5jb25uZWN0aW9u ICE9IERSTV9NT0RFX0NPTk5FQ1RFRCkgeworCQlpZ3RfZGVidWcoIlNraXBwaW5nIGF1dG8tZGlz Y292ZXJ5IGZvciBjb25uZWN0b3IgJXMtJWQ6ICIKKwkJCSAgImNvbm5lY3RvciBzdGF0dXMgaXMg bm90IGNvbm5lY3RlZFxuIiwKKwkJCSAga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoY29ubmVj dG9yLT5jb25uZWN0b3JfdHlwZSksCisJCQkgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQp OworCQlyZXR1cm4gLTE7CisJfQorCisJb2sgPSBrbXN0ZXN0X2dldF9wcm9wZXJ0eShkcm1fZmQs IGNvbm5lY3Rvci0+Y29ubmVjdG9yX2lkLAorCQkJCSAgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RP UiwgIkVESUQiLAorCQkJCSAgTlVMTCwgJmVkaWRfYmxvYl9pZCwgTlVMTCk7CisJaWYgKCFvayB8 fCAhZWRpZF9ibG9iX2lkKSB7CisJCWlndF9kZWJ1ZygiU2tpcHBpbmcgYXV0by1kaXNjb3Zlcnkg Zm9yIGNvbm5lY3RvciAlcy0lZDogIgorCQkJICAibWlzc2luZyB0aGUgRURJRCBwcm9wZXJ0eVxu IiwKKwkJCSAga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoY29ubmVjdG9yLT5jb25uZWN0b3Jf dHlwZSksCisJCQkgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQpOworCQlyZXR1cm4gLTE7 CisJfQorCisJZWRpZF9ibG9iID0gZHJtTW9kZUdldFByb3BlcnR5QmxvYihkcm1fZmQsIGVkaWRf YmxvYl9pZCk7CisJaWd0X2Fzc2VydChlZGlkX2Jsb2IpOworCisJZWRpZCA9IChjb25zdCBzdHJ1 Y3QgZWRpZCAqKSBlZGlkX2Jsb2ItPmRhdGE7CisKKwllZGlkX2dldF9tZmcoZWRpZCwgbWZnKTsK KwlpZiAobWVtY21wKG1mZywgIklHVCIsIDMpICE9IDApIHsKKwkJaWd0X2RlYnVnKCJTa2lwcGlu ZyBjb25uZWN0b3IgJXMtJWQgZm9yIGF1dG8tZGlzY292ZXJ5OiAiCisJCQkgICJtYW51ZmFjdHVy ZXIgaXMgJS4zcywgbm90IElHVFxuIiwKKwkJCSAga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIo Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSksCisJCQkgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5 cGVfaWQsIG1mZyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChlZGlkLT5wcm9kX2NvZGVbMF0g IT0gJ0MnIHx8IGVkaWQtPnByb2RfY29kZVsxXSAhPSAnSCcpIHsKKwkJaWd0X3dhcm4oIkludmFs aWQgRURJRCBmb3IgSUdUIGNvbm5lY3RvciAlcy0lZDogIgorCQkJICAiaW52YWxpZCBwcm9kdWN0 IGNvZGVcbiIsCisJCQkgIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGNvbm5lY3Rvci0+Y29u bmVjdG9yX3R5cGUpLAorCQkJICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlX2lkKTsKKwkJZ290 byBvdXQ7CisJfQorCisJcG9ydF9pZCA9ICoodWludDMyX3QgKikgJmVkaWQtPnNlcmlhbDsKKwlp Z3RfZGVidWcoIkF1dG8tZGlzY292ZXJ5IG1hcHBlZCBjb25uZWN0b3IgJXMtJWQgdG8gQ2hhbWVs aXVtICIKKwkJICAicG9ydCBJRCAlZFxuIiwKKwkJICBrbXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0 cihjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSwKKwkJICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90 eXBlX2lkLCBwb3J0X2lkKTsKKworb3V0OgorCWRybU1vZGVGcmVlUHJvcGVydHlCbG9iKGVkaWRf YmxvYik7CisJcmV0dXJuIHBvcnRfaWQ7Cit9CisKKy8qKgorICogY2hhbWVsaXVtX2F1dG9kaXNj b3ZlcjogYXV0b21hZ2ljYWxseSBkaXNjb3ZlciB0aGUgQ2hhbWVsaXVtIHBvcnQgbWFwcGluZwor ICoKKyAqIFRoZSBDaGFtZWxpdW0gQVBJIHVzZXMgcG9ydCBJRHMgd2hlcmFzIHRoZSBEZXZpY2Ug VW5kZXIgVGVzdCB1c2VzIERSTQorICogY29ubmVjdG9ycy4gV2UgbmVlZCB0byBrbm93IHdoaWNo IENoYW1lbGl1bSBwb3J0IGlzIHBsdWdnZWQgdG8gYSBnaXZlbiBEUk0KKyAqIGNvbm5lY3Rvci4g VGhpcyBoYXMgdHlwaWNhbGx5IGJlZW4gZG9uZSB2aWEgYSBjb25maWd1cmF0aW9uIGZpbGUgaW4g dGhlCisgKiBwYXN0IChzZWUgI2NoYW1lbGl1bV9yZWFkX3BvcnRfbWFwcGluZ3MpLCBidXQgdGhp cyBmdW5jdGlvbiBwcm92aWRlcyBhbgorICogYXV0b21hdGljIHdheSB0byBkbyBpdC4KKyAqCisg KiBXZSB3aWxsIHBsdWcgYWxsIENoYW1lbGl1bSBwb3J0cyB3aXRoIGEgZGlmZmVyZW50IEVESUQg b24gZWFjaC4gVGhlbiB3ZSdsbAorICogcmVhZCB0aGUgRURJRCBvbiBlYWNoIERSTSBjb25uZWN0 b3IgYW5kIGluZmVyIHRoZSBDaGFtZWxpdW0gcG9ydCBJRC4KKyAqLworc3RhdGljIGJvb2wgY2hh bWVsaXVtX2F1dG9kaXNjb3ZlcihzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sIGludCBkcm1f ZmQpCit7CisJaW50IGNhbmRpZGF0ZV9wb3J0c1tDSEFNRUxJVU1fTUFYX1BPUlRTXTsKKwlzaXpl X3QgY2FuZGlkYXRlX3BvcnRzX2xlbjsKKwlkcm1Nb2RlUmVzICpyZXM7CisJZHJtTW9kZUNvbm5l Y3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydDsKKwlzaXplX3Qg aSwgaiwgcG9ydF9jb3VudDsKKwlpbnQgcG9ydF9pZDsKKwl1aW50MzJfdCBjb25uX2lkOworCXN0 cnVjdCBjaGFtZWxpdW1fZWRpZCAqZWRpZDsKKwlib29sIGZvdW5kOworCXVpbnQzMl90IGRpc2Nv dmVyZWRfY29ubnNbQ0hBTUVMSVVNX01BWF9QT1JUU10gPSB7MH07CisJY2hhciBjb25uX25hbWVb NjRdOworCXN0cnVjdCB0aW1lc3BlYyBzdGFydDsKKwl1aW50NjRfdCBlbGFwc2VkX25zOworCisJ Y2FuZGlkYXRlX3BvcnRzX2xlbiA9IGNoYW1lbGl1bV9nZXRfdmlkZW9fcG9ydHMoY2hhbWVsaXVt LAorCQkJCQkJCWNhbmRpZGF0ZV9wb3J0cyk7CisKKwlpZ3RfZGVidWcoIlN0YXJ0aW5nIENoYW1l bGl1bSBwb3J0IGF1dG8tZGlzY292ZXJ5IG9uICV6dSBwb3J0c1xuIiwKKwkJICBjYW5kaWRhdGVf cG9ydHNfbGVuKTsKKwlpZ3RfZ2V0dGltZSgmc3RhcnQpOworCisJZWRpZCA9IGNoYW1lbGl1bV9u ZXdfZWRpZChjaGFtZWxpdW0sIGlndF9rbXNfZ2V0X2Jhc2VfZWRpZCgpKTsKKworCS8qIFNldCBF RElEIGFuZCBwbHVnIHBvcnRzIHdlIHdhbnQgdG8gYXV0by1kaXNjb3ZlciAqLworCXBvcnRfY291 bnQgPSBjaGFtZWxpdW0tPnBvcnRfY291bnQ7CisJZm9yIChpID0gMDsgaSA8IGNhbmRpZGF0ZV9w b3J0c19sZW47IGkrKykgeworCQlwb3J0X2lkID0gY2FuZGlkYXRlX3BvcnRzW2ldOworCisJCS8q IEdldCBvciBhZGQgYSBjaGFtZWxpdW1fcG9ydCBzbG90ICovCisJCXBvcnQgPSBOVUxMOworCQlm b3IgKGogPSAwOyBqIDwgY2hhbWVsaXVtLT5wb3J0X2NvdW50OyBqKyspIHsKKwkJCWlmIChjaGFt ZWxpdW0tPnBvcnRzW2pdLmlkID09IHBvcnRfaWQpIHsKKwkJCQlwb3J0ID0gJmNoYW1lbGl1bS0+ cG9ydHNbal07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFwb3J0KSB7CisJCQlpZ3Rf YXNzZXJ0KHBvcnRfY291bnQgPCBDSEFNRUxJVU1fTUFYX1BPUlRTKTsKKwkJCXBvcnQgPSAmY2hh bWVsaXVtLT5wb3J0c1twb3J0X2NvdW50XTsKKwkJCXBvcnRfY291bnQrKzsKKworCQkJcG9ydC0+ aWQgPSBwb3J0X2lkOworCQl9CisKKwkJY2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQoY2hhbWVsaXVt LCBwb3J0LCBlZGlkKTsKKwkJY2hhbWVsaXVtX3BsdWcoY2hhbWVsaXVtLCBwb3J0KTsKKwl9CisK KwkvKiBSZXByb2JlIGNvbm5lY3RvcnMgYW5kIGJ1aWxkIHRoZSBtYXBwaW5nICovCisJcmVzID0g ZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQpOworCWlmICghcmVzKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJY29u bl9pZCA9IHJlcy0+Y29ubmVjdG9yc1tpXTsKKworCQkvKiBSZWFkIHRoZSBFRElEIGFuZCBwYXJz ZSB0aGUgQ2hhbWVsaXVtIHBvcnQgSUQgd2Ugc3RvcmVkCisJCSAqIHRoZXJlLiAqLworCQljb25u ZWN0b3IgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRybV9mZCwgcmVzLT5jb25uZWN0b3JzW2ldKTsK KwkJcG9ydF9pZCA9IHBvcnRfaWRfZnJvbV9lZGlkKGRybV9mZCwgY29ubmVjdG9yKTsKKwkJZHJt TW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKKwkJaWYgKHBvcnRfaWQgPCAwKQorCQkJY29u dGludWU7CisKKwkJLyogSWYgd2UgYWxyZWFkeSBoYXZlIGEgbWFwcGluZyBmcm9tIHRoZSBjb25m aWcgZmlsZSwgY2hlY2sKKwkJICogdGhhdCBpdCdzIGNvbnNpc3RlbnQuICovCisJCWZvdW5kID0g ZmFsc2U7CisJCWZvciAoaiA9IDA7IGogPCBjaGFtZWxpdW0tPnBvcnRfY291bnQ7IGorKykgewor CQkJcG9ydCA9ICZjaGFtZWxpdW0tPnBvcnRzW2pdOworCQkJaWYgKHBvcnQtPmNvbm5lY3Rvcl9p ZCA9PSBjb25uX2lkKSB7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWlndF9hc3NlcnRfZihwb3J0 LT5pZCA9PSBwb3J0X2lkLAorCQkJCQkgICAgICJJbmNvbnNpc3RlbmN5IGRldGVjdGVkIGluIC5p Z3RyYzogIgorCQkJCQkgICAgICJjb25uZWN0b3IgJXMgaXMgY29uZmlndXJlZCB3aXRoICIKKwkJ CQkJICAgICAiQ2hhbWVsaXVtIHBvcnQgJWQsIGJ1dCBpcyAiCisJCQkJCSAgICAgImNvbm5lY3Rl ZCB0byBwb3J0ICVkXG4iLAorCQkJCQkgICAgIHBvcnQtPm5hbWUsIHBvcnQtPmlkLCBwb3J0X2lk KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoZm91bmQpCisJCQljb250aW51ZTsKKwor CQkvKiBXZSBnb3QgYSBuZXcgbWFwcGluZyAqLworCQlmb3VuZCA9IGZhbHNlOworCQlmb3IgKGog PSAwOyBqIDwgY2FuZGlkYXRlX3BvcnRzX2xlbjsgaisrKSB7CisJCQlpZiAocG9ydF9pZCA9PSBj YW5kaWRhdGVfcG9ydHNbal0pIHsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJZGlzY292ZXJlZF9j b25uc1tqXSA9IGNvbm5faWQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWd0X2Fzc2VydF9m KGZvdW5kLCAiQXV0by1kaXNjb3ZlcmVkIGEgcG9ydCAoJWQpIHdlIGhhdmVuJ3QgIgorCQkJICAg ICAic2V0dXBcbiIsIHBvcnRfaWQpOworCX0KKworCWRybU1vZGVGcmVlUmVzb3VyY2VzKHJlcyk7 CisKKwkvKiBXZSBub3cgaGF2ZSBhIENoYW1lbGl1bSBwb3J0IElEIOKGlCBEUk0gY29ubmVjdG9y IElEIG1hcHBpbmc6CisJICogY2FuZGlkYXRlX3BvcnRzIGNvbnRhaW5zIHRoZSBDaGFtZWxpdW0g cG9ydCBJRHMgYW5kCisJICogZGlzY292ZXJlZF9jb25ucyBjb250YWlucyB0aGUgRFJNIGNvbm5l Y3RvciBJRHMuICovCisJZm9yIChpID0gMDsgaSA8IGNhbmRpZGF0ZV9wb3J0c19sZW47IGkrKykg eworCQlwb3J0X2lkID0gY2FuZGlkYXRlX3BvcnRzW2ldOworCQljb25uX2lkID0gZGlzY292ZXJl ZF9jb25uc1tpXTsKKwkJaWYgKCFjb25uX2lkKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCXBv cnQgPSAmY2hhbWVsaXVtLT5wb3J0c1tjaGFtZWxpdW0tPnBvcnRfY291bnRdOworCQljaGFtZWxp dW0tPnBvcnRfY291bnQrKzsKKworCQlwb3J0LT5pZCA9IHBvcnRfaWQ7CisJCXBvcnQtPnR5cGUg PSBjaGFtZWxpdW1fZ2V0X3BvcnRfdHlwZShjaGFtZWxpdW0sIHBvcnQpOworCQlwb3J0LT5jb25u ZWN0b3JfaWQgPSBjb25uX2lkOworCisJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3JD dXJyZW50KGRybV9mZCwgY29ubl9pZCk7CisJCXNucHJpbnRmKGNvbm5fbmFtZSwgc2l6ZW9mKGNv bm5fbmFtZSksICIlcy0ldSIsCisJCQkga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoY29ubmVj dG9yLT5jb25uZWN0b3JfdHlwZSksCisJCQkgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZCk7 CisJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCXBvcnQtPm5hbWUgPSBzdHJk dXAoY29ubl9uYW1lKTsKKwl9CisKKwllbGFwc2VkX25zID0gaWd0X25zZWNfZWxhcHNlZCgmc3Rh cnQpOworCWlndF9kZWJ1ZygiQXV0by1kaXNjb3ZlcnkgdG9vayAlZm1zXG4iLAorCQkgIChmbG9h dCkgZWxhcHNlZF9ucyAvICgxMDAwICogMTAwMCkpOworCisJcmV0dXJuIHRydWU7Cit9CisKIHN0 YXRpYyBib29sIGNoYW1lbGl1bV9yZWFkX2NvbmZpZyhzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxp dW0sIGludCBkcm1fZmQpCiB7CiAJR0Vycm9yICplcnJvciA9IE5VTEw7CkBAIC0xOTEwLDcgKzIx MTYsMTAgQEAgc3RhdGljIGJvb2wgY2hhbWVsaXVtX3JlYWRfY29uZmlnKHN0cnVjdCBjaGFtZWxp dW0gKmNoYW1lbGl1bSwgaW50IGRybV9mZCkKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXJldHVy biBjaGFtZWxpdW1fcmVhZF9wb3J0X21hcHBpbmdzKGNoYW1lbGl1bSwgZHJtX2ZkKTsKKwlpZiAo IWNoYW1lbGl1bV9yZWFkX3BvcnRfbWFwcGluZ3MoY2hhbWVsaXVtLCBkcm1fZmQpKSB7CisJCXJl dHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIGNoYW1lbGl1bV9hdXRvZGlzY292ZXIoY2hhbWVsaXVt LCBkcm1fZmQpOwogfQogCiAvKioKLS0gCjIuMjIuMAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pZ3QtZGV2