From: authorNari Date: 2008-07-19T14:17:11+09:00 Subject: [ruby-dev:35591] Re: make profiler for gc ------=_Part_108665_1536017.1216444940664 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Content-Disposition: inline nariです。 2008/07/19 13:01 SASADA Koichi : >  ささだです. > > authorNari wrote: >> ==追加されるメソッド >> * GC::Profiler.enable? >> ** Profilerが起動しているか? >> * GC::Profiler.enable= >> ** Profiler起動 true false > > enable= / enable? のペアはないと思いますよ. > > -- > // SASADA Koichi at atdot dot net > > すみません。 須藤さんのメールを読み違えていました。 * GC::Profiler.enable ** Profiler起動 * GC::Profiler.disable ** Profiler停止 に修正しました。 失礼しました。 --- nari ------=_Part_108665_1536017.1216444940664 Content-Type: text/x-diff; name=gc_profile_by_profiler_module.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fitrrese0 Content-Disposition: attachment; filename=gc_profile_by_profiler_module.diff SW5kZXg6IHByZWx1ZGUucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcHJlbHVkZS5yYgko44Oq44OT44K444On 44OzIDE4MTMyKQorKysgcHJlbHVkZS5yYgko5L2c5qWt44Kz44OU44O8KQpAQCAtMzMsMyArMzMs MzIgQEAKICAgYWJzb2x1dGVfZmVhdHVyZSA9IEZpbGUuZXhwYW5kX3BhdGgoRmlsZS5qb2luKEZp bGUuZGlybmFtZShmaWxlKSwgcmVsYXRpdmVfZmVhdHVyZSkpCiAgIHJlcXVpcmUgYWJzb2x1dGVf ZmVhdHVyZQogZW5kCisKK21vZHVsZSBHQzo6UHJvZmlsZXIKKyAgZGVmIHNlbGYuZm9ybWF0KCkK KyAgICByZXBfZGF0YSA9IHNlbGYuZGF0YQorICAgIGhfaW5mID0gT2JqZWN0U3BhY2UuY291bnRf Y2xhc3NlcworICAgIHByb2YgPSBzcHJpbnRmKCJHQyAlMSRkIGludm9rZXMuXG4iLCBHQy5jb3Vu dCkKKworICAgIGlmIEdDOjpQcm9maWxlci5lbmFibGU/IGFuZCAhcmVwX2RhdGEuZW1wdHk/Cisg ICAgICBwcm9mICs9ICJJbmRleCAgICAgICBVc2UgU2l6ZShieXRlKSAgICAgVG90YWwgU2l6ZShi eXRlKSAgICAgICAgIFRvdGFsIE9iamVjdCAgICAgICAgICAgICAgICAgICAgR0MgdGltZShtcylc biIKKyAgICAgIHJlcF9kYXRhLmVhY2hfd2l0aF9pbmRleCBkbyB8ZSwgaXwKKyAgICAgICAgcHJv ZiArPSBzcHJpbnRmKCIlMSQ1ZCAlMiQyMGQgJTMkMjBkICU0JDIwZCAlNSQzMC4yMGZcbiIsIGks IGVbOkhFQVBfVVNFX1NJWkVdLCBlWzpIRUFQX1RPVEFMX1NJWkVdLCBlWzpIRUFQX1RPVEFMX09C SkVDVFNdLCBlWzpHQ19USU1FXSoxMDApCisgICAgICBlbmQKKyAgICAgIHByb2YgKz0gIlxuXG4i CisgICAgZW5kCisKKyAgICBwcm9mICs9IHNwcmludGYoIiUxJGQgdXNlZCBvYmplY3RzICUyJGQg ZnJlZSBvYmplY3RzIGFuZCAlMyRkIHRvdGFsIG9iamVjdHMgaW4gSGVhcC5cbiIsIGhfaW5mWzpU T1RBTF0gLSBoX2luZls6RlJFRV0sIGhfaW5mWzpGUkVFXSwgaF9pbmZbOlRPVEFMXSkKKyAgICBw cm9mICs9ICJJbmRleCAgICAgICAgICAgICAgICBDb3VudCAgICAgICAgICAgICAgICAgICAgJSAg ICAgICAgICBLaW5kIChjbGFzcylcbiIKKyAgICBoX2luZi50b19hLnNvcnR7fGIsIGF8IGFbMV0g PD0+IGJbMV0gfS5lYWNoX3dpdGhfaW5kZXggZG8gfGUsIGl8CisgICAgICAgdW5sZXNzICV3IkZS RUUgVE9UQUwiLmluY2x1ZGU/IGVbMF0udG9fcworICAgICAgICAgcHJvZiArPSBzcHJpbnRmKCIl MSQ1ZCAlMiQyMGQgJTMkMjAuOGYgJTQkMjBzXG4iLCBpLCBlWzFdLCBlWzFdLnRvX2YvaF9pbmZb OlRPVEFMXS50b19mKjEwMCwgZVswXSkKKyAgICAgICBlbmQKKyAgICBlbmQKKyAgICByZXR1cm4g cHJvZgorICBlbmQKKworICBkZWYgc2VsZi5yZXBvcnQob3V0PSRzdGRvdXQpCisgICAgb3V0LnB1 dHMgc2VsZi5mb3JtYXQKKyAgZW5kCitlbmQKSW5kZXg6IGdjLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Mu Ywko44Oq44OT44K444On44OzIDE4MTMyKQorKysgZ2MuYwko5L2c5qWt44Kz44OU44O8KQpAQCAt OTIsNiArOTIsMTI4IEBACiAKICN1bmRlZiBHQ19ERUJVRwogCisvKiBmb3IgR0MgcHJvZmlsZSAq LworI2RlZmluZSBHQ19QUk9GSUxFX01PUkVfREVUQUlMIDAKK3R5cGVkZWYgc3RydWN0IGdjX3By b2ZpbGVfZGF0YSB7CisgICAgZG91YmxlIGdjX3RpbWU7CisgICAgZG91YmxlIGdjX21hcmtfdGlt ZTsKKyAgICBkb3VibGUgZ2Nfc3dlZXBfdGltZTsKKyAgICBzaXplX3QgaGVhcF91c2Vfc2xvdHM7 CisgICAgc2l6ZV90IGhlYXBfbGl2ZV9vYmplY3RzOworICAgIHNpemVfdCBoZWFwX2ZyZWVfb2Jq ZWN0czsKKyAgICBzaXplX3QgaGVhcF90b3RhbF9vYmplY3RzOworICAgIHNpemVfdCBoZWFwX3Vz ZV9zaXplOworICAgIHNpemVfdCBoZWFwX3RvdGFsX3NpemU7CisgICAgaW50IGhhdmVfZmluYWxp emU7CisgICAgc2l6ZV90IGFsbG9jYXRlX2luY3JlYXNlOworICAgIHNpemVfdCBhbGxvY2F0ZV9s aW1pdDsKK30gZ2NfcHJvZmlsZV9kYXRhOworCisvKiByZWZlcmVuY2VkIGRvY3VtZW50IGh0dHA6 Ly9rems5Lm5ldC9jb2x1bW4vdGltZS5odG1sICovCitzdGF0aWMgZG91YmxlCitnZXRydXNhZ2Vf dGltZSh2b2lkKQoreworICAgIHN0cnVjdCBydXNhZ2UgdXNhZ2U7CisgICAgc3RydWN0IHRpbWV2 YWwgdGltZTsKKyAgICBnZXRydXNhZ2UoUlVTQUdFX1NFTEYsICZ1c2FnZSk7CisgICAgdGltZSA9 IHVzYWdlLnJ1X3V0aW1lOworICAgIHJldHVybiB0aW1lLnR2X3NlYyArIChkb3VibGUpdGltZS50 dl91c2VjKjFlLTY7Cit9CisKKyNkZWZpbmUgR0NfUFJPRl9USU1FUl9TVEFSVCBkbyB7XAorCWlm IChydWJ5X2djX3Byb2ZpbGUpIHtcCisJICAgIGlmICghb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YSkg e1wKKwkJb2Jqc3BhY2UtPnByb2ZpbGUuc2l6ZSA9IDEwMDA7XAorCQlvYmpzcGFjZS0+cHJvZmls ZS5kYXRhID0gbWFsbG9jKHNpemVvZihnY19wcm9maWxlX2RhdGEpICogb2Jqc3BhY2UtPnByb2Zp bGUuc2l6ZSk7XAorCSAgICB9XAorCSAgICBpZiAoY291bnQgPj0gb2Jqc3BhY2UtPnByb2ZpbGUu c2l6ZSkge1wKKwkJb2Jqc3BhY2UtPnByb2ZpbGUuc2l6ZSArPSAxMDAwO1wKKwkJb2Jqc3BhY2Ut PnByb2ZpbGUuZGF0YSA9IHJlYWxsb2Mob2Jqc3BhY2UtPnByb2ZpbGUuZGF0YSwgc2l6ZW9mKGdj X3Byb2ZpbGVfZGF0YSkgKiBvYmpzcGFjZS0+cHJvZmlsZS5zaXplKTtcCisJICAgIH1cCisJICAg IGlmICghb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YSkge1wKKwkJcmJfYnVnKCJnY19wcm9maWxlIG1h bGxvYyBvciByZWFsbG9jIG1pc3MiKTtcCisJICAgIH1cCisJICAgIE1FTVpFUk8oJm9ianNwYWNl LT5wcm9maWxlLmRhdGFbY291bnRdLCBnY19wcm9maWxlX2RhdGEsIDEpO1wKKwkgICAgZ2NfdGlt ZSA9IGdldHJ1c2FnZV90aW1lKCk7XAorCX1cCisgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIEdD X1BST0ZfVElNRVJfU1RPUCBkbyB7XAorCWlmIChydWJ5X2djX3Byb2ZpbGUpIHtcCisJICAgIGdj X3RpbWUgPSBnZXRydXNhZ2VfdGltZSgpIC0gZ2NfdGltZTtcCisJICAgIG9ianNwYWNlLT5wcm9m aWxlLmRhdGFbY291bnRdLmdjX3RpbWUgPSBnY190aW1lO1wKKwkgICAgb2Jqc3BhY2UtPnByb2Zp bGUuY291bnQrKztcCisJfVwKKyAgICB9IHdoaWxlKDApCisKKyNpZiBHQ19QUk9GSUxFX01PUkVf REVUQUlMCisjZGVmaW5lIElOSVRfR0NfUFJPRl9QQVJBTVMgZG91YmxlIGdjX3RpbWUgPSAwLCBt YXJrX3RpbWUgPSAwLCBzd2VlcF90aW1lID0gMDsJXAorICAgIHNpemVfdCBjb3VudCA9IG9ianNw YWNlLT5wcm9maWxlLmNvdW50CisKKyNkZWZpbmUgR0NfUFJPRl9NQVJLX1RJTUVSX1NUQVJUIGRv IHtcCisJaWYgKHJ1YnlfZ2NfcHJvZmlsZSkge1wKKwkgICAgbWFya190aW1lID0gZ2V0cnVzYWdl X3RpbWUoKTtcCisJfVwKKyAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgR0NfUFJPRl9NQVJLX1RJ TUVSX1NUT1AgZG8ge1wKKwlpZiAocnVieV9nY19wcm9maWxlKSB7XAorCSAgICBtYXJrX3RpbWUg PSBnZXRydXNhZ2VfdGltZSgpIC0gbWFya190aW1lO1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUu ZGF0YVtjb3VudF0uZ2NfbWFya190aW1lID0gbWFya190aW1lO1wKKwl9XAorICAgIH0gd2hpbGUo MCkKKworI2RlZmluZSBHQ19QUk9GX1NXRUVQX1RJTUVSX1NUQVJUIGRvIHsJCVwKKwlpZiAocnVi eV9nY19wcm9maWxlKSB7CQkJXAorCSAgICBzd2VlcF90aW1lID0gZ2V0cnVzYWdlX3RpbWUoKTsJ XAorCX0JCQkJCVwKKyAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgR0NfUFJPRl9TV0VFUF9USU1F Ul9TVE9QIGRvIHtcCisJaWYgKHJ1YnlfZ2NfcHJvZmlsZSkge1wKKwkgICAgc3dlZXBfdGltZSA9 IGdldHJ1c2FnZV90aW1lKCkgLSBzd2VlcF90aW1lO1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUu ZGF0YVtjb3VudF0uZ2Nfc3dlZXBfdGltZSA9IHN3ZWVwX3RpbWU7XAorCX1cCisgICAgfSB3aGls ZSgwKQorI2RlZmluZSBHQ19QUk9GX1NFVF9NQUxMT0NfSU5GTyBkbyB7XAorCWlmIChydWJ5X2dj X3Byb2ZpbGUpIHtcCisJICAgIHNpemVfdCBjb3VudCA9IG9ianNwYWNlLT5wcm9maWxlLmNvdW50 O1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YVtjb3VudF0uYWxsb2NhdGVfaW5jcmVhc2Ug PSBtYWxsb2NfaW5jcmVhc2U7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2NvdW50XS5h bGxvY2F0ZV9saW1pdCA9IG1hbGxvY19saW1pdDsgXAorCX1cCisgICAgfSB3aGlsZSgwKQorI2Rl ZmluZSBHQ19QUk9GX1NFVF9IRUFQX0lORk8gZG8ge1wKKwlpZiAocnVieV9nY19wcm9maWxlKSB7 XAorCSAgICBzaXplX3QgY291bnQgPSBvYmpzcGFjZS0+cHJvZmlsZS5jb3VudDtcCisJICAgIG9i anNwYWNlLT5wcm9maWxlLmRhdGFbY291bnRdLmhlYXBfdXNlX3Nsb3RzID0gaGVhcHNfdXNlZDtc CisJICAgIG9ianNwYWNlLT5wcm9maWxlLmRhdGFbY291bnRdLmhlYXBfbGl2ZV9vYmplY3RzID0g bGl2ZTtcCisJICAgIG9ianNwYWNlLT5wcm9maWxlLmRhdGFbY291bnRdLmhlYXBfZnJlZV9vYmpl Y3RzID0gZnJlZWQ7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2NvdW50XS5oZWFwX3Rv dGFsX29iamVjdHMgPSBoZWFwc191c2VkICogSEVBUF9PQkpfTElNSVQ7XAorCSAgICBvYmpzcGFj ZS0+cHJvZmlsZS5kYXRhW2NvdW50XS5oYXZlX2ZpbmFsaXplID0gZmluYWxfbGlzdCA/IFF0cnVl IDogUWZhbHNlO1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YVtjb3VudF0uaGVhcF91c2Vf c2l6ZSA9IGxpdmUgKiBzaXplb2YoUlZBTFVFKTtcCisJICAgIG9ianNwYWNlLT5wcm9maWxlLmRh dGFbY291bnRdLmhlYXBfdG90YWxfc2l6ZSA9IGhlYXBzX3VzZWQgKiAoSEVBUF9PQkpfTElNSVQg KiBzaXplb2YoUlZBTFVFKSk7XAorCX1cCisgICAgfSB3aGlsZSgwKQorCisjZWxzZQorI2RlZmlu ZSBJTklUX0dDX1BST0ZfUEFSQU1TIGRvdWJsZSBnY190aW1lID0gMDtcCisgICAgc2l6ZV90IGNv dW50ID0gb2Jqc3BhY2UtPnByb2ZpbGUuY291bnQKKyNkZWZpbmUgR0NfUFJPRl9NQVJLX1RJTUVS X1NUQVJUCisjZGVmaW5lIEdDX1BST0ZfTUFSS19USU1FUl9TVE9QCisjZGVmaW5lIEdDX1BST0Zf U1dFRVBfVElNRVJfU1RBUlQKKyNkZWZpbmUgR0NfUFJPRl9TV0VFUF9USU1FUl9TVE9QCisjZGVm aW5lIEdDX1BST0ZfU0VUX01BTExPQ19JTkZPCisjZGVmaW5lIEdDX1BST0ZfU0VUX0hFQVBfSU5G TyBkbyB7XAorCWlmIChydWJ5X2djX3Byb2ZpbGUpIHtcCisJICAgIHNpemVfdCBjb3VudCA9IG9i anNwYWNlLT5wcm9maWxlLmNvdW50O1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YVtjb3Vu dF0uaGVhcF90b3RhbF9vYmplY3RzID0gaGVhcHNfdXNlZCAqIEhFQVBfT0JKX0xJTUlUO1wKKwkg ICAgb2Jqc3BhY2UtPnByb2ZpbGUuZGF0YVtjb3VudF0uaGVhcF91c2Vfc2l6ZSA9IGxpdmUgKiBz aXplb2YoUlZBTFVFKTtcCisJICAgIG9ianNwYWNlLT5wcm9maWxlLmRhdGFbY291bnRdLmhlYXBf dG90YWxfc2l6ZSA9IGhlYXBzX3VzZWQgKiBIRUFQX1NJWkU7XAorCX1cCisgICAgfSB3aGlsZSgw KQorI2VuZGlmCisKKwogI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JMQU5E Q19fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiAjcHJhZ21hIHBhY2socHVzaCwgMSkgLyogbWFn aWMgZm9yIHJlZHVjaW5nIHNpemVvZihSVkFMVUUpOiAyNCAtPiAyMCAqLwogI2VuZGlmCkBAIC0x NzYsNiArMjk4LDEyIEBACiAJVkFMVUUgKnB0cjsKIAlpbnQgb3ZlcmZsb3c7CiAgICAgfSBtYXJr c3RhY2s7CisgICAgc3RydWN0IHsKKwlpbnQgcnVuOworCWdjX3Byb2ZpbGVfZGF0YSAqZGF0YTsK KwlzaXplX3QgY291bnQ7CisJc2l6ZV90IHNpemU7CisgICAgfSBwcm9maWxlOwogICAgIHN0cnVj dCBnY19saXN0ICpnbG9iYWxfbGlzdDsKICAgICB1bnNpZ25lZCBpbnQgY291bnQ7CiAgICAgaW50 IGdjX3N0cmVzczsKQEAgLTIwOSw2ICszMzcsNyBAQAogI2RlZmluZSBtYXJrX3N0YWNrX292ZXJm bG93CW9ianNwYWNlLT5tYXJrc3RhY2sub3ZlcmZsb3cKICNkZWZpbmUgZ2xvYmFsX0xpc3QJCW9i anNwYWNlLT5nbG9iYWxfbGlzdAogI2RlZmluZSBydWJ5X2djX3N0cmVzcwkJb2Jqc3BhY2UtPmdj X3N0cmVzcworI2RlZmluZSBydWJ5X2djX3Byb2ZpbGUJCW9ianNwYWNlLT5wcm9maWxlLnJ1bgog CiAjZGVmaW5lIG5lZWRfY2FsbF9maW5hbCAJKGZpbmFsaXplcl90YWJsZSAmJiBmaW5hbGl6ZXJf dGFibGUtPm51bV9lbnRyaWVzKQogCkBAIC0zMDksNiArNDM4LDYyIEBACiAgICAgcmV0dXJuIGJv b2w7CiB9CiAKKy8qCisgKiAgY2FsbC1zZXE6CisgKiAgICBHQzo6UHJvZmlsZXIuZW5hYmxlPyAg ICAgICAgICAgICAgICAgPT4gdHJ1ZSBvciBmYWxzZQorICoKKyAqICByZXR1cm5zIGN1cnJlbnQg c3RhdHVzIG9mIEdDIHByb2ZpbGUgbW9kZS4KKyAqLworCitzdGF0aWMgVkFMVUUKK2djX3Byb2Zp bGVfZW5hYmxlX2dldChWQUxVRSBzZWxmKQoreworICAgIHJiX29ianNwYWNlX3QgKm9ianNwYWNl ID0gJnJiX29ianNwYWNlOworICAgIHJldHVybiBydWJ5X2djX3Byb2ZpbGUgPyBRdHJ1ZSA6IFFm YWxzZTsKK30KKworLyoKKyAqICBjYWxsLXNlcToKKyAqICAgIEdDOjpQcm9maWxlci5lbmFibGUg ICAgICAgICAgPT4gYm9vbAorICoKKyAqICB1cGRhdGVzIEdDIHByb2ZpbGUgbW9kZS4KKyAqCisg KiAgV2hlbiBHQzo6UHJvZmlsZXIuZW5hYmxlID0gdHJ1ZSwgcnVuIHByb2ZpbGVyIGZvciBHQy4K KyAqCisgKiAgV2hlbiBHQzo6UHJvZmlsZXIuZW5hYmxlID0gZmFsc2UsIGRlbGV0ZSBiZWZvcmUg cHJvZmlsZXIgZGF0YSwgYW5kIHN0b3AgcHJvZmlsZXIgZm9yIEdDLgorICoKKyAqLworCitzdGF0 aWMgVkFMVUUKK2djX3Byb2ZpbGVfZW5hYmxlKHZvaWQpCit7CisgICAgcmJfb2Jqc3BhY2VfdCAq b2Jqc3BhY2UgPSAmcmJfb2Jqc3BhY2U7CisgICAgcmJfc2VjdXJlKDIpOworICAgIHJ1YnlfZ2Nf cHJvZmlsZSA9IFF0cnVlOworICAgIHJldHVybiBRbmlsOworfQorCisvKgorICogIGNhbGwtc2Vx OgorICogICAgR0M6OlByb2ZpbGVyLmRpc2FibGUgICAgICAgICAgPT4gbmlsCisgKgorICogIHVw ZGF0ZXMgR0MgcHJvZmlsZSBtb2RlLgorICoKKyAqICBkZWxldGUgYmVmb3JlIHByb2ZpbGVyIGRh dGEsIGFuZCBzdG9wIHByb2ZpbGVyIGZvciBHQy4KKyAqCisgKi8KKworc3RhdGljIFZBTFVFCitn Y19wcm9maWxlX2Rpc2FibGUodm9pZCkKK3sKKyAgICByYl9vYmpzcGFjZV90ICpvYmpzcGFjZSA9 ICZyYl9vYmpzcGFjZTsKKyAgICByYl9zZWN1cmUoMik7CisgICAgcnVieV9nY19wcm9maWxlID0g UWZhbHNlOworICAgIE1FTVpFUk8ob2Jqc3BhY2UtPnByb2ZpbGUuZGF0YSwgZ2NfcHJvZmlsZV9k YXRhLCBvYmpzcGFjZS0+cHJvZmlsZS5zaXplKTsKKyAgICBvYmpzcGFjZS0+cHJvZmlsZS5jb3Vu dCA9IDA7CisgICAgcmV0dXJuIFFuaWw7Cit9CisKIHN0YXRpYyB2b2lkICoKIHZtX3htYWxsb2Mo cmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHNpemVfdCBzaXplKQogewpAQCAtMTQ0MCw2ICsxNjI1 LDcgQEAKIAkgICAgZnJlZWQgKz0gbjsKIAl9CiAgICAgfQorICAgIEdDX1BST0ZfU0VUX01BTExP Q19JTkZPOwogICAgIGlmIChtYWxsb2NfaW5jcmVhc2UgPiBtYWxsb2NfbGltaXQpIHsKIAltYWxs b2NfbGltaXQgKz0gKG1hbGxvY19pbmNyZWFzZSAtIG1hbGxvY19saW1pdCkgKiAoZG91YmxlKWxp dmUgLyAobGl2ZSArIGZyZWVkKTsKIAlpZiAobWFsbG9jX2xpbWl0IDwgR0NfTUFMTE9DX0xJTUlU KSBtYWxsb2NfbGltaXQgPSBHQ19NQUxMT0NfTElNSVQ7CkBAIC0xNDUzLDEwICsxNjM5LDEyIEBA CiAKICAgICAvKiBjbGVhciBmaW5hbGl6YXRpb24gbGlzdCAqLwogICAgIGlmIChmaW5hbF9saXN0 KSB7CisJR0NfUFJPRl9TRVRfSEVBUF9JTkZPOwogCWRlZmVycmVkX2ZpbmFsX2xpc3QgPSBmaW5h bF9saXN0OwogCXJldHVybjsKICAgICB9CiAgICAgZnJlZV91bnVzZWRfaGVhcHMob2Jqc3BhY2Up OworICAgIEdDX1BST0ZfU0VUX0hFQVBfSU5GTzsKIH0KIAogdm9pZApAQCAtMTY3Miw2ICsxODYw LDcgQEAKIHsKICAgICBzdHJ1Y3QgZ2NfbGlzdCAqbGlzdDsKICAgICByYl90aHJlYWRfdCAqdGgg PSBHRVRfVEhSRUFEKCk7CisgICAgSU5JVF9HQ19QUk9GX1BBUkFNUzsKIAogICAgIGlmIChHQ19O T1RJRlkpIHByaW50Zigic3RhcnQgZ2FyYmFnZV9jb2xsZWN0KClcbiIpOwogCkBAIC0xNjkxLDYg KzE4ODAsOCBAQAogICAgIGR1cmluZ19nYysrOwogICAgIG9ianNwYWNlLT5jb3VudCsrOwogCisg ICAgR0NfUFJPRl9USU1FUl9TVEFSVDsKKyAgICBHQ19QUk9GX01BUktfVElNRVJfU1RBUlQ7CiAg ICAgU0VUX1NUQUNLX0VORDsKIAogICAgIGluaXRfbWFya19zdGFjayhvYmpzcGFjZSk7CkBAIC0x NzMxLDkgKzE5MjIsMTMgQEAKIAkgICAgZ2NfbWFya19yZXN0KG9ianNwYWNlKTsKIAl9CiAgICAg fQorICAgIEdDX1BST0ZfTUFSS19USU1FUl9TVE9QOwogCisgICAgR0NfUFJPRl9TV0VFUF9USU1F Ul9TVEFSVDsKICAgICBnY19zd2VlcChvYmpzcGFjZSk7CisgICAgR0NfUFJPRl9TV0VFUF9USU1F Ul9TVE9QOwogCisgICAgR0NfUFJPRl9USU1FUl9TVE9QOwogICAgIGlmIChHQ19OT1RJRlkpIHBy aW50ZigiZW5kIGdhcmJhZ2VfY29sbGVjdCgpXG4iKTsKICAgICByZXR1cm4gUXRydWU7CiB9CkBA IC0yMzAwLDYgKzI0OTUsNyBAQAogICAgIH0KICAgICByYl9oYXNoX2FzZXQoaGFzaCwgSUQyU1lN KHJiX2ludGVybigiVE9UQUwiKSksIFNJWkVUMk5VTSh0b3RhbCkpOwogICAgIHJiX2hhc2hfYXNl dChoYXNoLCBJRDJTWU0ocmJfaW50ZXJuKCJGUkVFIikpLCBTSVpFVDJOVU0oZnJlZWQpKTsKKwog ICAgIGZvciAoaSA9IDA7IGkgPD0gVF9NQVNLOyBpKyspIHsKICAgICAgICAgVkFMVUUgdHlwZTsK ICAgICAgICAgc3dpdGNoIChpKSB7CkBAIC0yMzQwLDYgKzI1MzYsODcgQEAKIAogLyoKICAqICBj YWxsLXNlcToKKyAqICAgICBPYmplY3RTcGFjZS5jb3VudF9jbGFzc2VzKFtyZXN1bHRfaGFzaF0p IC0+IGhhc2gKKyAqCisgKiAgQ291bnRzIGNsYXNzZXMgZm9yIGVhY2ggdHlwZS4KKyAqCisgKiAg SXQgcmV0dXJucyBhIGhhc2ggYXM6CisgKiAgezpUT1RBTD0+MTAwMDAsIDpGUkVFPT4zMDExLCA6 U3RyaW5nPT42LCA6QXJyYXk9PjQwNCwgLi4ufQorICoKKyAqICBJZiB0aGUgb3B0aW9uYWwgYXJn dW1lbnQsIHJlc3VsdF9oYXNoLCBpcyBnaXZlbiwKKyAqICBpdCBpcyBvdmVyd3JpdHRlbiBhbmQg cmV0dXJuZWQuCisgKiAgVGhpcyBpcyBpbnRlbmRlZCB0byBhdm9pZCBwcm9iZSBlZmZlY3QuCisg KgorICogIFRoZSBjb250ZW50cyBvZiB0aGUgcmV0dXJuZWQgaGFzaCBpcyBpbXBsZW1lbnRhdGlv biBkZWZpbmVkLgorICovCisKK1ZBTFVFCitjb3VudF9jbGFzc2VzKGludCBhcmdjLCBWQUxVRSAq YXJndiwgVkFMVUUgb3MpCit7CisgICAgVkFMVUUgaGFzaDsKKyAgICByYl9vYmpzcGFjZV90ICpv YmpzcGFjZSA9ICgmcmJfb2Jqc3BhY2UpOworICAgIFZBTFVFIHN5bXMgPSByYl9hcnlfbmV3KCk7 CisgICAgc3RfdGFibGUgKnRhYmxlOworICAgIHN0X2RhdGFfdCAqY250OworICAgIHNpemVfdCBm cmVlX29ianM9IDAsIHRvdGFsX29ianMgPSAwLCBpID0gMDsKKworICAgIGlmIChyYl9zY2FuX2Fy Z3MoYXJnYywgYXJndiwgIjAxIiwgJmhhc2gpID09IDEpIHsKKyAgICAgICAgaWYgKFRZUEUoaGFz aCkgIT0gVF9IQVNIKQorICAgICAgICAgICAgcmJfcmFpc2UocmJfZVR5cGVFcnJvciwgIm5vbi1o YXNoIGdpdmVuIik7CisgICAgfQorCisgICAgdGFibGUgPSBzdF9pbml0X251bXRhYmxlKCk7Cisg ICAgY250ID0gdm1feG1hbGxvYyhvYmpzcGFjZSwgc2l6ZW9mKHN0X2RhdGFfdCkpOworICAgIGZv ciAoaSA9IDA7IGkgPCBoZWFwc191c2VkOyBpKyspIHsKKyAgICAgICAgUlZBTFVFICpwLCAqcGVu ZDsKKyAgICAgICAgSUQgc3ltOworCisgICAgICAgIHAgPSBoZWFwc1tpXS5zbG90OyBwZW5kID0g cCArIGhlYXBzW2ldLmxpbWl0OworICAgICAgICBmb3IgKDtwIDwgcGVuZDsgcCsrKSB7CisJICAg ICpjbnQgPSAxOworCSAgICBpZiAoQlVJTFRJTl9UWVBFKHApICE9IDAgJiYgUkFOWShwKS0+YXMu YmFzaWMuZmxhZ3MpIHsgCisJCXN5bSA9IHJiX2ludGVybihyYl9vYmpfY2xhc3NuYW1lKChWQUxV RSlwKSk7CisJCWlmIChzdF9sb29rdXAodGFibGUsIChzdF9kYXRhX3Qpc3ltLCBjbnQpKSB7CisJ CSAgICAqY250ID0gKmNudCArIDE7CisJCSAgICBzdF9pbnNlcnQodGFibGUsIChzdF9kYXRhX3Qp c3ltLCAqY250KTsKKwkJfSBlbHNlIHsKKwkJICAgIHJiX2FyeV9wdXNoKHN5bXMsIElEMlNZTShz eW0pKTsKKwkJICAgIHN0X2FkZF9kaXJlY3QodGFibGUsIChzdF9kYXRhX3Qpc3ltLCAqY250KTsK KwkJfQorCSAgICB9CisJICAgIGVsc2UgeworCQlmcmVlX29ianMrKzsKKwkgICAgfQorCX0KKwl0 b3RhbF9vYmpzICs9IGhlYXBzW2ldLmxpbWl0OworICAgIH0KKworICAgIGlmIChoYXNoID09IFFu aWwpIHsKKyAgICAgICAgaGFzaCA9IHJiX2hhc2hfbmV3KCk7CisgICAgfQorICAgIGVsc2UgaWYg KCFSSEFTSF9FTVBUWV9QKGhhc2gpKSB7CisgICAgICAgIHN0X2ZvcmVhY2goUkhBU0hfVEJMKGhh c2gpLCBzZXRfemVybywgaGFzaCk7CisgICAgfQorCisgICAgcmJfaGFzaF9hc2V0KGhhc2gsIElE MlNZTShyYl9pbnRlcm4oIlRPVEFMIikpLCByYl91aW50MmludW0odG90YWxfb2JqcykpOworICAg IHJiX2hhc2hfYXNldChoYXNoLCBJRDJTWU0ocmJfaW50ZXJuKCJGUkVFIikpLCByYl91aW50Mmlu dW0oZnJlZV9vYmpzKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgUkFSUkFZX0xFTihzeW1zKTsg aSsrKSB7CisJVkFMVUUgc3ltOworCXN5bSA9IHJiX2FyeV9lbnRyeShzeW1zLCBpKTsKKwlpZiAo c3RfbG9va3VwKHRhYmxlLCAoVkFMVUUpU1lNMklEKHN5bSksIGNudCkpIHsKKwkgICAgcmJfaGFz aF9hc2V0KGhhc2gsIHN5bSwgcmJfdWludDJpbnVtKCpjbnQpKTsKKwl9CisgICAgfQorCisgICAg dm1feGZyZWUob2Jqc3BhY2UsIGNudCk7CisgICAgc3RfZnJlZV90YWJsZSh0YWJsZSk7CisKKyAg ICByZXR1cm4gaGFzaDsKK30KKworLyoKKyAqICBjYWxsLXNlcToKICAqICAgICBHQy5jb3VudCAt PiBJbnRlZ2VyCiAgKgogICogIFRoZSBudW1iZXIgb2YgdGltZXMgR0Mgb2NjdXJlZC4KQEAgLTIz ODcsNiArMjY2NCw1NSBAQAogI2VuZGlmCiAKIC8qCisgKiAgY2FsbC1zZXE6CisgKiAgICAgR0M6 OlByb2ZpbGVyLmRhdGEgLT4gaGFzaAorICoKKyAqICBSZXBvcnQgcHJvZmlsZSBkYXRhIHRvIHdy YXAgaGFzaC4KKyAqCisgKiAgSXQgcmV0dXJucyBhIGhhc2ggYXM6CisgKiAgW3s6R0NfVElNRSA9 PiAwLjAwMSwgOkhFQVBfVVNFX1NJWkUgPT4gMzQyODQwLCA6SEVBUF9UT1RBTF9TSVpFPT4zNjAz NjB9LCAuLi4gXQorICoKKyAqICBpZiBHQ19QUk9GSUxFX01PUkVfREVUQUlMIGlzIDE6CisgKiAg W3s6R0NfVElNRT0+MC4wMDQsIDpIRUFQX1VTRV9TSVpFPT4zNDI4NDAsIDpIRUFQX1RPVEFMX1NJ WkU9PjM2MDM2MCwgOkdDX01BUktfVElNRT0+LTUuMjg1NDg1NTkwODY2ODNlLTE5LAorICogICAg ICA6R0NfU1dFRVBfVElNRT0+MC4wMDQsIDpBTExPQ0FURV9JTkNSRUFTRT0+NDA0NzAsIDpBTExP Q0FURV9MSU1JVD0+ODAwMDAwMCwgOkhFQVBfVVNFX1NMT1RTPT4yMiwKKyAqICAgICAgOkhFQVBf TElWRV9PQkpFQ1RTPT4xNzE0MiwgOkhFQVBfRlJFRV9PQkpFQ1RTPT40NCwgOkhFQVBfVE9UQUxf T0JKRUNUUz0+MTgwMTgsIDpIQVZFX0ZJTkFMSVpFPT5mYWxzZX0sIC4uIF0KKyAqLworCitWQUxV RQorZ2NfcHJvZmlsZV9kYXRhX2dldCh2b2lkKQoreworICAgIFZBTFVFIHByb2Y7CisgICAgVkFM VUUgZ2NfcHJvZmlsZSA9IHJiX2FyeV9uZXcoKTsKKyAgICBzaXplX3QgaTsKKyAgICByYl9vYmpz cGFjZV90ICpvYmpzcGFjZSA9ICgmcmJfb2Jqc3BhY2UpOworICAgIAorICAgIGlmICghcnVieV9n Y19wcm9maWxlKSB7CisJcmV0dXJuIFFuaWw7CisgICAgfQorCisgICAgZm9yIChpID0wOyBpIDwg b2Jqc3BhY2UtPnByb2ZpbGUuY291bnQ7IGkrKykgeworCXByb2YgPSByYl9oYXNoX25ldygpOwor ICAgICAgICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigiR0NfVElNRSIpKSwg RE9VQkxFMk5VTShvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2ldLmdjX3RpbWUpKTsKKyAgICAgICAg cmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4oIkhFQVBfVVNFX1NJWkUiKSksIHJi X3VpbnQyaW51bShvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2ldLmhlYXBfdXNlX3NpemUpKTsKKyAg ICAgICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4oIkhFQVBfVE9UQUxfU0la RSIpKSwgcmJfdWludDJpbnVtKG9ianNwYWNlLT5wcm9maWxlLmRhdGFbaV0uaGVhcF90b3RhbF9z aXplKSk7CisgICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJIRUFQ X1RPVEFMX09CSkVDVFMiKSksIHJiX3VpbnQyaW51bShvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2ld LmhlYXBfdG90YWxfb2JqZWN0cykpOworI2lmIEdDX1BST0ZJTEVfTU9SRV9ERVRBSUwKKyAgICAg ICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4oIkdDX01BUktfVElNRSIpKSwg RE9VQkxFMk5VTShvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2ldLmdjX21hcmtfdGltZSkpOworCXJi X2hhc2hfYXNldChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJHQ19TV0VFUF9USU1FIikpLCBET1VC TEUyTlVNKG9ianNwYWNlLT5wcm9maWxlLmRhdGFbaV0uZ2Nfc3dlZXBfdGltZSkpOworICAgICAg ICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigiQUxMT0NBVEVfSU5DUkVBU0Ui KSksIHJiX3VpbnQyaW51bShvYmpzcGFjZS0+cHJvZmlsZS5kYXRhW2ldLmFsbG9jYXRlX2luY3Jl YXNlKSk7CisgICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJBTExP Q0FURV9MSU1JVCIpKSwgcmJfdWludDJpbnVtKG9ianNwYWNlLT5wcm9maWxlLmRhdGFbaV0uYWxs b2NhdGVfbGltaXQpKTsKKyAgICAgICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRl cm4oIkhFQVBfVVNFX1NMT1RTIikpLCByYl91aW50MmludW0ob2Jqc3BhY2UtPnByb2ZpbGUuZGF0 YVtpXS5oZWFwX3VzZV9zbG90cykpOworICAgICAgICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lN KHJiX2ludGVybigiSEVBUF9MSVZFX09CSkVDVFMiKSksIHJiX3VpbnQyaW51bShvYmpzcGFjZS0+ cHJvZmlsZS5kYXRhW2ldLmhlYXBfbGl2ZV9vYmplY3RzKSk7CisgICAgICAgIHJiX2hhc2hfYXNl dChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJIRUFQX0ZSRUVfT0JKRUNUUyIpKSwgcmJfdWludDJp bnVtKG9ianNwYWNlLT5wcm9maWxlLmRhdGFbaV0uaGVhcF9mcmVlX29iamVjdHMpKTsKKyAgICAg ICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4oIkhBVkVfRklOQUxJWkUiKSks IG9ianNwYWNlLT5wcm9maWxlLmRhdGFbaV0uaGF2ZV9maW5hbGl6ZSk7CisjZW5kaWYKKwlyYl9h cnlfcHVzaChnY19wcm9maWxlLCBwcm9mKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ2NfcHJvZmls ZTsKK30KKworLyoKICAqICBUaGUgPGNvZGU+R0M8L2NvZGU+IG1vZHVsZSBwcm92aWRlcyBhbiBp bnRlcmZhY2UgdG8gUnVieSdzIG1hcmsgYW5kCiAgKiAgc3dlZXAgZ2FyYmFnZSBjb2xsZWN0aW9u IG1lY2hhbmlzbS4gU29tZSBvZiB0aGUgdW5kZXJseWluZyBtZXRob2RzCiAgKiAgYXJlIGFsc28g YXZhaWxhYmxlIHZpYSB0aGUgPGNvZGU+T2JqZWN0U3BhY2U8L2NvZGU+IG1vZHVsZS4KQEAgLTIz OTYsNiArMjcyMiw3IEBACiBJbml0X0dDKHZvaWQpCiB7CiAgICAgVkFMVUUgcmJfbU9iU3BhY2U7 CisgICAgVkFMVUUgcmJfbVByb2ZpbGVyOwogCiAgICAgcmJfbUdDID0gcmJfZGVmaW5lX21vZHVs ZSgiR0MiKTsKICAgICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChyYl9tR0MsICJzdGFydCIs IHJiX2djX3N0YXJ0LCAwKTsKQEAgLTI0MDYsNiArMjczMywxMiBAQAogICAgIHJiX2RlZmluZV9z aW5nbGV0b25fbWV0aG9kKHJiX21HQywgImNvdW50IiwgZ2NfY291bnQsIDApOwogICAgIHJiX2Rl ZmluZV9tZXRob2QocmJfbUdDLCAiZ2FyYmFnZV9jb2xsZWN0IiwgcmJfZ2Nfc3RhcnQsIDApOwog CisgICAgcmJfbVByb2ZpbGVyID0gcmJfZGVmaW5lX21vZHVsZV91bmRlcihyYl9tR0MsICJQcm9m aWxlciIpOworICAgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKHJiX21Qcm9maWxlciwgImVu YWJsZT8iLCBnY19wcm9maWxlX2VuYWJsZV9nZXQsIDApOworICAgIHJiX2RlZmluZV9zaW5nbGV0 b25fbWV0aG9kKHJiX21Qcm9maWxlciwgImVuYWJsZSIsIGdjX3Byb2ZpbGVfZW5hYmxlLCAwKTsK KyAgICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChyYl9tUHJvZmlsZXIsICJkaXNhYmxlIiwg Z2NfcHJvZmlsZV9kaXNhYmxlLCAwKTsKKyAgICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChy Yl9tUHJvZmlsZXIsICJkYXRhIiwgZ2NfcHJvZmlsZV9kYXRhX2dldCwgMCk7CisKICAgICByYl9t T2JTcGFjZSA9IHJiX2RlZmluZV9tb2R1bGUoIk9iamVjdFNwYWNlIik7CiAgICAgcmJfZGVmaW5l X21vZHVsZV9mdW5jdGlvbihyYl9tT2JTcGFjZSwgImVhY2hfb2JqZWN0Iiwgb3NfZWFjaF9vYmos IC0xKTsKICAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uKHJiX21PYlNwYWNlLCAiZ2FyYmFn ZV9jb2xsZWN0IiwgcmJfZ2Nfc3RhcnQsIDApOwpAQCAtMjQyNSw2ICsyNzU4LDcgQEAKICAgICBy Yl9kZWZpbmVfbWV0aG9kKHJiX21LZXJuZWwsICJvYmplY3RfaWQiLCByYl9vYmpfaWQsIDApOwog CiAgICAgcmJfZGVmaW5lX21vZHVsZV9mdW5jdGlvbihyYl9tT2JTcGFjZSwgImNvdW50X29iamVj dHMiLCBjb3VudF9vYmplY3RzLCAtMSk7CisgICAgcmJfZGVmaW5lX21vZHVsZV9mdW5jdGlvbihy Yl9tT2JTcGFjZSwgImNvdW50X2NsYXNzZXMiLCBjb3VudF9jbGFzc2VzLCAtMSk7CiAKICNpZiBD QUxDX0VYQUNUX01BTExPQ19TSVpFCiAgICAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QocmJf bUdDLCAibWFsbG9jX2FsbG9jYXRlZF9zaXplIiwgZ2NfbWFsbG9jX2FsbG9jYXRlZF9zaXplLCAw KTsK ------=_Part_108665_1536017.1216444940664--