From: Cook, G. <GW...@ma...> - 2004-07-22 19:59:33
|
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgoKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAw MjEzOSwgVVNBLgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpjb25zdCBjaGFyICpwcm9nbmFtZSA9 ICJjaGVja19kaXNrIjsKY29uc3QgY2hhciAqcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjM4ICQi Owpjb25zdCBjaGFyICpjb3B5cmlnaHQgPSAiMTk5OS0yMDAzIjsKY29uc3QgY2hhciAqZW1haWwg PSAibmFnaW9zcGx1Zy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQiOwoKI2luY2x1ZGUgImNv bW1vbi5oIgojaWYgSEFWRV9JTlRUWVBFU19ICiMgaW5jbHVkZSA8aW50dHlwZXMuaD4KI2VuZGlm CiNpbmNsdWRlIDxhc3NlcnQuaD4KI2luY2x1ZGUgInBvcGVuLmgiCiNpbmNsdWRlICJ1dGlscy5o IgojaW5jbHVkZSA8c3RkYXJnLmg+CiNpbmNsdWRlICIuLi9saWIvZnN1c2FnZS5oIgojaW5jbHVk ZSAiLi4vbGliL21vdW50bGlzdC5oIgojaWYgSEFWRV9MSU1JVFNfSAojIGluY2x1ZGUgPGxpbWl0 cy5oPgojZW5kaWYKCi8qIElmIG5vbnplcm8sIHNob3cgaW5vZGUgaW5mb3JtYXRpb24uICovCi8q IHN0YXRpYyBpbnQgaW5vZGVfZm9ybWF0OyAqLwoKLyogSWYgbm9uemVybywgc2hvdyBldmVuIGZp bGVzeXN0ZW1zIHdpdGggemVybyBzaXplIG9yCiAgIHVuaW50ZXJlc3RpbmcgdHlwZXMuICovCnN0 YXRpYyBpbnQgc2hvd19hbGxfZnMgPSAxOwoKLyogSWYgbm9uemVybywgc2hvdyBvbmx5IGxvY2Fs IGZpbGVzeXN0ZW1zLiAgKi8Kc3RhdGljIGludCBzaG93X2xvY2FsX2ZzID0gMDsKCi8qIElmIHBv c2l0aXZlLCB0aGUgdW5pdHMgdG8gdXNlIHdoZW4gcHJpbnRpbmcgc2l6ZXM7CiAgIGlmIG5lZ2F0 aXZlLCB0aGUgaHVtYW4tcmVhZGFibGUgYmFzZS4gICovCi8qIHN0YXRpYyBpbnQgb3V0cHV0X2Js b2NrX3NpemU7ICovCgovKiBJZiBub256ZXJvLCBpbnZva2UgdGhlIGBzeW5jJyBzeXN0ZW0gY2Fs bCBiZWZvcmUgZ2V0dGluZyBhbnkgdXNhZ2UgZGF0YS4KICAgVXNpbmcgdGhpcyBvcHRpb24gY2Fu IG1ha2UgZGYgdmVyeSBzbG93LCBlc3BlY2lhbGx5IHdpdGggbWFueSBvciB2ZXJ5CiAgIGJ1c3kg ZGlza3MuICBOb3RlIHRoYXQgdGhpcyBtYXkgbWFrZSBhIGRpZmZlcmVuY2Ugb24gc29tZSBzeXN0 ZW1zIC0tCiAgIFN1bk9zNC4xLjMsIGZvciBvbmUuICBJdCBpcyAqbm90KiBuZWNlc3Nhcnkgb24g TGludXguICAqLwovKiBzdGF0aWMgaW50IHJlcXVpcmVfc3luYyA9IDA7ICovCgovKiBBIGZpbGVz eXN0ZW0gdHlwZSB0byBkaXNwbGF5LiAqLwoKc3RydWN0IG5hbWVfbGlzdAp7CiAgY2hhciAqbmFt ZTsKICBpbnQgZm91bmQ7CiAgdWludG1heF90IHdfZGY7CiAgdWludG1heF90IGNfZGY7CiAgZG91 YmxlIHdfZGZwOwogIGRvdWJsZSBjX2RmcDsKICBzdHJ1Y3QgbmFtZV9saXN0ICpuYW1lX25leHQ7 Cn07CgovKiBMaW5rZWQgbGlzdCBvZiBmaWxlc3lzdGVtIHR5cGVzIHRvIGRpc3BsYXkuCiAgIElm IGBmc19zZWxlY3RfbGlzdCcgaXMgTlVMTCwgbGlzdCBhbGwgdHlwZXMuCiAgIFRoaXMgdGFibGUg aXMgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGZyb20gY29tbWFuZC1saW5lIG9wdGlvbnMsCiAgIHJh dGhlciB0aGFuIGhhcmRjb2RpbmcgaW50byB0aGUgcHJvZ3JhbSB3aGF0IGl0IHRoaW5rcyBhcmUg dGhlCiAgIHZhbGlkIGZpbGVzeXN0ZW0gdHlwZXM7IGxldCB0aGUgdXNlciBzcGVjaWZ5IGFueSBm aWxlc3lzdGVtIHR5cGUKICAgdGhleSB3YW50IHRvLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBmaWxl c3lzdGVtcyBvZiB0aGF0IHR5cGUsIHRoZXkKICAgd2lsbCBiZSBzaG93bi4KCiAgIFNvbWUgZmls ZXN5c3RlbSB0eXBlczoKICAgNC4yIDQuMyB1ZnMgbmZzIHN3YXAgaWdub3JlIGlvIHZtIGVmcyBk YmcgKi8KCi8qIHN0YXRpYyBzdHJ1Y3QgbmFtZV9saXN0ICpmc19zZWxlY3RfbGlzdDsgKi8KCi8q IExpbmtlZCBsaXN0IG9mIGZpbGVzeXN0ZW0gdHlwZXMgdG8gb21pdC4KICAgSWYgdGhlIGxpc3Qg aXMgZW1wdHksIGRvbid0IGV4Y2x1ZGUgYW55IHR5cGVzLiAgKi8KCnN0YXRpYyBzdHJ1Y3QgbmFt ZV9saXN0ICpmc19leGNsdWRlX2xpc3Q7CgpzdGF0aWMgc3RydWN0IG5hbWVfbGlzdCAqZHBfZXhj bHVkZV9saXN0OwoKc3RhdGljIHN0cnVjdCBuYW1lX2xpc3QgKnBhdGhfc2VsZWN0X2xpc3Q7Cgpz dGF0aWMgc3RydWN0IG5hbWVfbGlzdCAqZGV2X3NlbGVjdF9saXN0OwoKLyogTGlua2VkIGxpc3Qg b2YgbW91bnRlZCBmaWxlc3lzdGVtcy4gKi8Kc3RhdGljIHN0cnVjdCBtb3VudF9lbnRyeSAqbW91 bnRfbGlzdDsKCi8qIEZvciBsb25nIG9wdGlvbnMgdGhhdCBoYXZlIG5vIGVxdWl2YWxlbnQgc2hv cnQgb3B0aW9uLCB1c2UgYQogICBub24tY2hhcmFjdGVyIGFzIGEgcHNldWRvIHNob3J0IG9wdGlv biwgc3RhcnRpbmcgd2l0aCBDSEFSX01BWCArIDEuICAqLwplbnVtCnsKICBTWU5DX09QVElPTiA9 IENIQVJfTUFYICsgMSwKICBOT19TWU5DX09QVElPTiwKICBCTE9DS19TSVpFX09QVElPTgp9OwoK I2lmZGVmIF9BSVgKICNwcmFnbWEgYWxsb2NhCiNlbmRpZgoKaW50IHByb2Nlc3NfYXJndW1lbnRz IChpbnQsIGNoYXIgKiopOwp2b2lkIHByaW50X3BhdGggKGNvbnN0IGNoYXIgKm15cGF0aCk7Cmlu dCB2YWxpZGF0ZV9hcmd1bWVudHMgKHVpbnRtYXhfdCwgdWludG1heF90LCBkb3VibGUsIGRvdWJs ZSwgY2hhciAqKTsKaW50IGNoZWNrX2Rpc2sgKGRvdWJsZSB1c3AsIHVpbnRtYXhfdCBmcmVlX2Rp c2spOwppbnQgd2Fsa19uYW1lX2xpc3QgKHN0cnVjdCBuYW1lX2xpc3QgKmxpc3QsIGNvbnN0IGNo YXIgKm5hbWUpOwp2b2lkIHByaW50X2hlbHAgKHZvaWQpOwp2b2lkIHByaW50X3VzYWdlICh2b2lk KTsKCnVpbnRtYXhfdCB3X2RmID0gMDsKdWludG1heF90IGNfZGYgPSAwOwpkb3VibGUgd19kZnAg PSAtMS4wOwpkb3VibGUgY19kZnAgPSAtMS4wOwpjaGFyICpwYXRoOwpjaGFyICpleGNsdWRlX2Rl dmljZTsKY2hhciAqdW5pdHM7CnVpbnRtYXhfdCBtdWx0ID0gMTAyNCAqIDEwMjQ7CmludCB2ZXJi b3NlID0gMDsKaW50IGVycm9ubHkgPSBGQUxTRTsKaW50IGRpc3BsYXlfbW50cCA9IEZBTFNFOwoK LyogTGlua2VkIGxpc3Qgb2YgbW91bnRlZCBmaWxlc3lzdGVtcy4gKi8Kc3RhdGljIHN0cnVjdCBt b3VudF9lbnRyeSAqbW91bnRfbGlzdDsKCgoMCmludAptYWluIChpbnQgYXJnYywgY2hhciAqKmFy Z3YpCnsKCWRvdWJsZSB1c3AgPSAtMS4wOwoJaW50IHJlc3VsdCA9IFNUQVRFX1VOS05PV047Cglp bnQgZGlza19yZXN1bHQgPSBTVEFURV9VTktOT1dOOwoJY2hhciBmaWxlX3N5c3RlbVtNQVhfSU5Q VVRfQlVGRkVSXTsKCWNoYXIgKm91dHB1dDsKCWNoYXIgKmRldGFpbHM7CgljaGFyICpwZXJmOwoJ dWludG1heF90IHBzaXplOwoJZmxvYXQgZnJlZV9zcGFjZSwgZnJlZV9zcGFjZV9wY3QsIHRvdGFs X3NwYWNlOwoKCXN0cnVjdCBtb3VudF9lbnRyeSAqbWU7CglzdHJ1Y3QgZnNfdXNhZ2UgZnNwOwoJ c3RydWN0IG5hbWVfbGlzdCAqdGVtcF9saXN0OwoKCW91dHB1dCA9IHN0cmR1cCAoIiAtIGZyZWUg c3BhY2U6Iik7CglkZXRhaWxzID0gc3RyZHVwICgiIik7CglwZXJmID0gc3RyZHVwICgiIik7CgoJ c2V0bG9jYWxlIChMQ19BTEwsICIiKTsKCWJpbmR0ZXh0ZG9tYWluIChQQUNLQUdFLCBMT0NBTEVE SVIpOwoJdGV4dGRvbWFpbiAoUEFDS0FHRSk7CgoJbW91bnRfbGlzdCA9IHJlYWRfZmlsZXN5c3Rl bV9saXN0ICgwKTsKCglpZiAocHJvY2Vzc19hcmd1bWVudHMgKGFyZ2MsIGFyZ3YpICE9IE9LKQoJ CXVzYWdlIChfKCJDb3VsZCBub3QgcGFyc2UgYXJndW1lbnRzXG4iKSk7CgoJZm9yIChtZSA9IG1v dW50X2xpc3Q7IG1lOyBtZSA9IG1lLT5tZV9uZXh0KSB7CgoJCWlmIChwYXRoX3NlbGVjdF9saXN0 ICYmCgkJICAgICAod2Fsa19uYW1lX2xpc3QgKHBhdGhfc2VsZWN0X2xpc3QsIG1lLT5tZV9tb3Vu dGRpcikgfHwKCQkgICAgICB3YWxrX25hbWVfbGlzdCAocGF0aF9zZWxlY3RfbGlzdCwgbWUtPm1l X2Rldm5hbWUpICkgKQoJCQlnZXRfZnNfdXNhZ2UgKG1lLT5tZV9tb3VudGRpciwgbWUtPm1lX2Rl dm5hbWUsICZmc3ApOwoJCWVsc2UgaWYgKGRldl9zZWxlY3RfbGlzdCB8fCBwYXRoX3NlbGVjdF9s aXN0KQoJCQljb250aW51ZTsKCQllbHNlIGlmIChtZS0+bWVfcmVtb3RlICYmIHNob3dfbG9jYWxf ZnMpCgkJCWNvbnRpbnVlOwoJCWVsc2UgaWYgKG1lLT5tZV9kdW1teSAmJiAhc2hvd19hbGxfZnMp CgkJCWNvbnRpbnVlOwoJCWVsc2UgaWYgKGZzX2V4Y2x1ZGVfbGlzdCAmJiB3YWxrX25hbWVfbGlz dCAoZnNfZXhjbHVkZV9saXN0LCBtZS0+bWVfdHlwZSkpCgkJCWNvbnRpbnVlOwoJCWVsc2UgaWYg KGRwX2V4Y2x1ZGVfbGlzdCAmJiAKCQkgICAgICAgICAod2Fsa19uYW1lX2xpc3QgKGRwX2V4Y2x1 ZGVfbGlzdCwgbWUtPm1lX2Rldm5hbWUpIHx8CgkJICAgICAgICAgIHdhbGtfbmFtZV9saXN0IChk cF9leGNsdWRlX2xpc3QsIG1lLT5tZV9tb3VudGRpcikpKQoJCQljb250aW51ZTsKCQllbHNlCgkJ CWdldF9mc191c2FnZSAobWUtPm1lX21vdW50ZGlyLCBtZS0+bWVfZGV2bmFtZSwgJmZzcCk7CgoJ CWlmIChmc3AuZnN1X2Jsb2NrcyAmJiBzdHJjbXAgKCJub25lIiwgbWUtPm1lX21vdW50ZGlyKSkg ewoJCQl1c3AgPSAoZG91YmxlKShmc3AuZnN1X2Jsb2NrcyAtIGZzcC5mc3VfYmF2YWlsKSAqIDEw MCAvIGZzcC5mc3VfYmxvY2tzOwoJCQlkaXNrX3Jlc3VsdCA9IGNoZWNrX2Rpc2sgKHVzcCwgZnNw LmZzdV9iYXZhaWwpOwoJCQlyZXN1bHQgPSBtYXhfc3RhdGUgKGRpc2tfcmVzdWx0LCByZXN1bHQp OwoJCQlwc2l6ZSA9IGZzcC5mc3VfYmxvY2tzKmZzcC5mc3VfYmxvY2tzaXplL211bHQ7CgkJCWFz cHJpbnRmICgmcGVyZiwgIiVzICVzIiwgcGVyZiwKCQkJICAgICAgICAgIHBlcmZkYXRhICgoIXN0 cmNtcChmaWxlX3N5c3RlbSwgIm5vbmUiKSB8fCBkaXNwbGF5X21udHApID8gbWUtPm1lX2Rldm5h bWUgOiBtZS0+bWVfbW91bnRkaXIsCgkJCSAgICAgICAgICAgICAgICAgICAgcHNpemUtKGZzcC5m c3VfYmF2YWlsKmZzcC5mc3VfYmxvY2tzaXplL211bHQpLCB1bml0cywKCQkJICAgICAgICAgICAg ICAgICAgICBUUlVFLCBtaW4gKCh1aW50bWF4X3QpcHNpemUtKHVpbnRtYXhfdCl3X2RmLCAodWlu dG1heF90KSgoMS4wLXdfZGZwLzEwMC4wKSpwc2l6ZSkpLAoJCQkgICAgICAgICAgICAgICAgICAg IFRSVUUsIG1pbiAoKHVpbnRtYXhfdClwc2l6ZS0odWludG1heF90KWNfZGYsICh1aW50bWF4X3Qp KCgxLjAtY19kZnAvMTAwLjApKnBzaXplKSksCgkJCSAgICAgICAgICAgICAgICAgICAgVFJVRSwg MCwKCQkJICAgICAgICAgICAgICAgICAgICBUUlVFLCBwc2l6ZSkpOwoJCQlpZiAoZGlza19yZXN1 bHQ9PVNUQVRFX09LICYmIGVycm9ubHkgJiYgIXZlcmJvc2UpCgkJCQljb250aW51ZTsKCgkJCWZy ZWVfc3BhY2UgPSAoZmxvYXQpZnNwLmZzdV9iYXZhaWwqZnNwLmZzdV9ibG9ja3NpemUvbXVsdDsK CQkJZnJlZV9zcGFjZV9wY3QgPSAoZmxvYXQpZnNwLmZzdV9iYXZhaWwqMTAwL2ZzcC5mc3VfYmxv Y2tzOwoJCQl0b3RhbF9zcGFjZSA9IChmbG9hdClmc3AuZnN1X2Jsb2Nrcypmc3AuZnN1X2Jsb2Nr c2l6ZS9tdWx0OwoJCQlpZiAoZGlza19yZXN1bHQhPVNUQVRFX09LIHx8IHZlcmJvc2U+PTApCgkJ CQlhc3ByaW50ZiAoJm91dHB1dCwgKCIlcyAlcyAlLjBmICVzICglLjBmJSUpOyIpLAoJCQkJICAg ICAgICAgIG91dHB1dCwKCQkJCSAgICAgICAgICAoIXN0cmNtcChmaWxlX3N5c3RlbSwgIm5vbmUi KSB8fCBkaXNwbGF5X21udHApID8gbWUtPm1lX2Rldm5hbWUgOiBtZS0+bWVfbW91bnRkaXIsCgkJ CQkgICAgICAgICAgZnJlZV9zcGFjZSwKCQkJCSAgICAgICAgICB1bml0cywKCQkJCQkJCQkJZnJl ZV9zcGFjZV9wY3QpOwoJCQlhc3ByaW50ZiAoJmRldGFpbHMsIF8oIiVzXG5cCiUuMGYgb2YgJS4w ZiAlcyAoJS4wZiUlKSBmcmVlIG9uICVzICh0eXBlICVzIG1vdW50ZWQgb24gJXMpIHdhcm46JWx1 IGNyaXQ6JWx1IHdhcm4lJTolLjBmJSUgY3JpdCUlOiUuMGYlJSIpLAoJCQkgICAgICAgICAgZGV0 YWlscywgZnJlZV9zcGFjZSwgdG90YWxfc3BhY2UsIHVuaXRzLCBmcmVlX3NwYWNlX3BjdCwKCQkJ ICAgICAgICAgIG1lLT5tZV9kZXZuYW1lLCBtZS0+bWVfdHlwZSwgbWUtPm1lX21vdW50ZGlyLAoJ CQkgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpd19kZiwgKHVuc2lnbmVkIGxvbmcpY19kZiwgd19k ZnAsIGNfZGZwKTsKCQl9CgoJfQoKCWFzcHJpbnRmICgmb3V0cHV0LCAiJXN8JXMiLCBvdXRwdXQs IHBlcmYpOwoKCWlmICh2ZXJib3NlID4gMikKCQlhc3ByaW50ZiAoJm91dHB1dCwgIiVzJXMiLCBv dXRwdXQsIGRldGFpbHMpOwoKCS8qIE92ZXJyaWRlIHJlc3VsdCBpZiBwYXRocyBzcGVjaWZpZWQg YW5kIG5vdCBmb3VuZCAqLwoJdGVtcF9saXN0ID0gcGF0aF9zZWxlY3RfbGlzdDsKCXdoaWxlICh0 ZW1wX2xpc3QpIHsKCQlpZiAodGVtcF9saXN0LT5mb3VuZCAhPSBUUlVFKSB7CgkJCWFzcHJpbnRm ICgmb3V0cHV0LCBfKCIlcyBbJXMgbm90IGZvdW5kXSIpLCBvdXRwdXQsIHRlbXBfbGlzdC0+bmFt ZSk7CgkJCXJlc3VsdCA9IFNUQVRFX0NSSVRJQ0FMOwoJCX0KCQl0ZW1wX2xpc3QgPSB0ZW1wX2xp c3QtPm5hbWVfbmV4dDsKCX0KCglwcmludGYgKCJESVNLICVzJXNcbiIsIHN0YXRlX3RleHQgKHJl c3VsdCksIG91dHB1dCk7CglyZXR1cm4gcmVzdWx0Owp9CgoKCgwKLyogcHJvY2VzcyBjb21tYW5k LWxpbmUgYXJndW1lbnRzICovCmludApwcm9jZXNzX2FyZ3VtZW50cyAoaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQp7CglpbnQgYzsKCXN0cnVjdCBuYW1lX2xpc3QgKnNlOwoJc3RydWN0IG5hbWVfbGlz dCAqKnBhdGh0YWlsID0gJnBhdGhfc2VsZWN0X2xpc3Q7CglzdHJ1Y3QgbmFtZV9saXN0ICoqZnN0 YWlsID0gJmZzX2V4Y2x1ZGVfbGlzdDsKCXN0cnVjdCBuYW1lX2xpc3QgKipkcHRhaWwgPSAmZHBf ZXhjbHVkZV9saXN0OwoJc3RydWN0IG5hbWVfbGlzdCAqdGVtcF9saXN0OwoJaW50IHJlc3VsdCA9 IE9LOwoKCXVuc2lnbmVkIGxvbmcgbDsKCglpbnQgb3B0aW9uID0gMDsKCXN0YXRpYyBzdHJ1Y3Qg b3B0aW9uIGxvbmdvcHRzW10gPSB7CgkJeyJ0aW1lb3V0IiwgcmVxdWlyZWRfYXJndW1lbnQsIDAs ICd0J30sCgkJeyJ3YXJuaW5nIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICd3J30sCgkJeyJjcml0 aWNhbCIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnYyd9LAoJCXsibG9jYWwiLCByZXF1aXJlZF9h cmd1bWVudCwgMCwgJ2wnfSwKCQl7ImtpbG9ieXRlcyIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAn ayd9LAoJCXsibWVnYWJ5dGVzIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICdtJ30sCgkJeyJ1bml0 cyIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAndSd9LAoJCXsicGF0aCIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCAwLCAncCd9LAoJCXsicGFydGl0aW9uIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICdwJ30s CgkJeyJleGNsdWRlX2RldmljZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAneCd9LAoJCXsiZXhj bHVkZS10eXBlIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICdYJ30sCgkJeyJtb3VudHBvaW50Iiwg bm9fYXJndW1lbnQsIDAsICdNJ30sCgkJeyJlcnJvcnMtb25seSIsIG5vX2FyZ3VtZW50LCAwLCAn ZSd9LAoJCXsidmVyYm9zZSIsIG5vX2FyZ3VtZW50LCAwLCAndid9LAoJCXsicXVpZXQiLCBub19h cmd1bWVudCwgMCwgJ3EnfSwKCQl7ImNsZWFyIiwgbm9fYXJndW1lbnQsIDAsICdDJ30sCgkJeyJ2 ZXJzaW9uIiwgbm9fYXJndW1lbnQsIDAsICdWJ30sCgkJeyJoZWxwIiwgbm9fYXJndW1lbnQsIDAs ICdoJ30sCgkJezAsIDAsIDAsIDB9Cgl9OwoKCWlmIChhcmdjIDwgMikKCQlyZXR1cm4gRVJST1I7 CgoJc2UgPSAoc3RydWN0IG5hbWVfbGlzdCAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IG5hbWVf bGlzdCkpOwoJc2UtPm5hbWUgPSBzdHJkdXAgKCJpc285NjYwIik7CglzZS0+bmFtZV9uZXh0ID0g TlVMTDsKCSpmc3RhaWwgPSBzZTsKCWZzdGFpbCA9ICZzZS0+bmFtZV9uZXh0OwoKCWZvciAoYyA9 IDE7IGMgPCBhcmdjOyBjKyspCgkJaWYgKHN0cmNtcCAoIi10byIsIGFyZ3ZbY10pID09IDApCgkJ CXN0cmNweSAoYXJndltjXSwgIi10Iik7CgoJd2hpbGUgKDEpIHsKCQljID0gZ2V0b3B0X2xvbmcg KGFyZ2MsIGFyZ3YsICIrP1ZxaHZlQ3Q6Yzp3OnU6cDp4Olg6bWtsTSIsIGxvbmdvcHRzLCAmb3B0 aW9uKTsKCgkJaWYgKGMgPT0gLTEgfHwgYyA9PSBFT0YpCgkJCWJyZWFrOwoKCQlzd2l0Y2ggKGMp IHsKCQljYXNlICd0JzoJCQkJCQkJCQkvKiB0aW1lb3V0IHBlcmlvZCAqLwoJCQlpZiAoaXNfaW50 ZWdlciAob3B0YXJnKSkgewoJCQkJdGltZW91dF9pbnRlcnZhbCA9IGF0b2kgKG9wdGFyZyk7CgkJ CQlicmVhazsKCQkJfQoJCQllbHNlIHsKCQkJCXVzYWdlIChfKCJUaW1lb3V0IEludGVydmFsIG11 c3QgYmUgYW4gaW50ZWdlciFcbiIpKTsKCQkJfQoJCWNhc2UgJ3cnOgkJCQkJCQkJCS8qIHdhcm5p bmcgdGhyZXNob2xkICovCgkJCWlmIChpc19pbnRub25uZWcgKG9wdGFyZykpIHsKCQkJCXdfZGYg PSBhdG9pIChvcHRhcmcpOwoJCQkJYnJlYWs7CgkJCX0KCQkJZWxzZSBpZiAoc3RycGJyayAob3B0 YXJnLCAiLDoiKSAmJgoJCQkJCQkJIHN0cnN0ciAob3B0YXJnLCAiJSIpICYmCgkJCQkJCQkgc3Nj YW5mIChvcHRhcmcsICIlbHUlKls6LF0lbGYlJSIsICZsLCAmd19kZnApID09IDIpIHsKCQkJCXdf ZGYgPSAodWludG1heF90KWw7CgkJCQlicmVhazsKCQkJfQoJCQllbHNlIGlmIChzdHJzdHIgKG9w dGFyZywgIiUiKSAmJiBzc2NhbmYgKG9wdGFyZywgIiVsZiUlIiwgJndfZGZwKSA9PSAxKSB7CgkJ CQlicmVhazsKCQkJfQoJCQllbHNlIHsKCQkJCXVzYWdlIChfKCJXYXJuaW5nIHRocmVzaG9sZCBt dXN0IGJlIGludGVnZXIgb3IgcGVyY2VudGFnZSFcbiIpKTsKCQkJfQoJCWNhc2UgJ2MnOgkJCQkJ CQkJCS8qIGNyaXRpY2FsIHRocmVzaG9sZCAqLwoJCQlpZiAoaXNfaW50bm9ubmVnIChvcHRhcmcp KSB7CgkJCQljX2RmID0gYXRvaSAob3B0YXJnKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWVsc2UgaWYg KHN0cnBicmsgKG9wdGFyZywgIiw6IikgJiYKCQkJCQkJCSBzdHJzdHIgKG9wdGFyZywgIiUiKSAm JgoJCQkJCQkJIHNzY2FuZiAob3B0YXJnLCAiJWx1JSpbLDpdJWxmJSUiLCAmbCwgJmNfZGZwKSA9 PSAyKSB7CgkJCQljX2RmID0gKHVpbnRtYXhfdClsOwoJCQkJYnJlYWs7CgkJCX0KCQkJZWxzZSBp ZiAoc3Ryc3RyIChvcHRhcmcsICIlIikgJiYgc3NjYW5mIChvcHRhcmcsICIlbGYlJSIsICZjX2Rm cCkgPT0gMSkgewoJCQkJYnJlYWs7CgkJCX0KCQkJZWxzZSB7CgkJCQl1c2FnZSAoXygiQ3JpdGlj YWwgdGhyZXNob2xkIG11c3QgYmUgaW50ZWdlciBvciBwZXJjZW50YWdlIVxuIikpOwoJCQl9CgkJ Y2FzZSAndSc6CgkJCWlmICh1bml0cykKCQkJCWZyZWUodW5pdHMpOwoJCQlpZiAoISBzdHJjbXAg KG9wdGFyZywgImJ5dGVzIikpIHsKCQkJCW11bHQgPSAodWludG1heF90KTE7CgkJCQl1bml0cyA9 IHN0cmR1cCAoIkIiKTsKCQkJfSBlbHNlIGlmICghIHN0cmNtcCAob3B0YXJnLCAia0IiKSkgewoJ CQkJbXVsdCA9ICh1aW50bWF4X3QpMTAyNDsKCQkJCXVuaXRzID0gc3RyZHVwICgia0IiKTsKCQkJ fSBlbHNlIGlmICghIHN0cmNtcCAob3B0YXJnLCAiTUIiKSkgewoJCQkJbXVsdCA9ICh1aW50bWF4 X3QpMTAyNCAqIDEwMjQ7CgkJCQl1bml0cyA9IHN0cmR1cCAoIk1CIik7CgkJCX0gZWxzZSBpZiAo ISBzdHJjbXAgKG9wdGFyZywgIkdCIikpIHsKCQkJCW11bHQgPSAodWludG1heF90KTEwMjQgKiAx MDI0ICogMTAyNDsKCQkJCXVuaXRzID0gc3RyZHVwICgiR0IiKTsKCQkJfSBlbHNlIGlmICghIHN0 cmNtcCAob3B0YXJnLCAiVEIiKSkgewoJCQkJbXVsdCA9ICh1aW50bWF4X3QpMTAyNCAqIDEwMjQg KiAxMDI0ICogMTAyNDsKCQkJCXVuaXRzID0gc3RyZHVwICgiVEIiKTsKCQkJfSBlbHNlIHsKCQkJ CWRpZSAoU1RBVEVfVU5LTk9XTiwgXygidW5pdCB0eXBlICVzIG5vdCBrbm93blxuIiksIG9wdGFy Zyk7CgkJCX0KCQkJaWYgKHVuaXRzID09IE5VTEwpCgkJCQlkaWUgKFNUQVRFX1VOS05PV04sIF8o ImZhaWxlZCBhbGxvY2F0aW5nIHN0b3JhZ2UgZm9yICclcydcbiIpLCAidW5pdHMiKTsKCQkJYnJl YWs7CgkJY2FzZSAnayc6IC8qIGRpc3BsYXkgbW91bnRwb2ludCAqLwoJCQltdWx0ID0gMTAyNDsK CQkJaWYgKHVuaXRzKQoJCQkJZnJlZSh1bml0cyk7CgkJCXVuaXRzID0gc3RyZHVwICgia0IiKTsK CQkJYnJlYWs7CgkJY2FzZSAnbSc6IC8qIGRpc3BsYXkgbW91bnRwb2ludCAqLwoJCQltdWx0ID0g MTAyNCAqIDEwMjQ7CgkJCWlmICh1bml0cykKCQkJCWZyZWUodW5pdHMpOwoJCQl1bml0cyA9IHN0 cmR1cCAoImtCIik7CgkJCWJyZWFrOwoJCWNhc2UgJ2wnOgoJCQlzaG93X2xvY2FsX2ZzID0gMTsJ CQkKCQkJYnJlYWs7CgkJY2FzZSAncCc6CQkJCQkJCQkJLyogc2VsZWN0IHBhdGggKi8KCQkJc2Ug PSAoc3RydWN0IG5hbWVfbGlzdCAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IG5hbWVfbGlzdCkp OwoJCQlzZS0+bmFtZSA9IG9wdGFyZzsKCQkJc2UtPm5hbWVfbmV4dCA9IE5VTEw7CgkJCXNlLT53 X2RmID0gd19kZjsKCQkJc2UtPmNfZGYgPSBjX2RmOwoJCQlzZS0+d19kZnAgPSB3X2RmcDsKCQkJ c2UtPmNfZGZwID0gY19kZnA7CgkJCSpwYXRodGFpbCA9IHNlOwoJCQlwYXRodGFpbCA9ICZzZS0+ bmFtZV9uZXh0OwoJCQlicmVhazsKIAkJY2FzZSAneCc6CQkJCQkJCQkJLyogZXhjbHVkZSBwYXRo IG9yIHBhcnRpdGlvbiAqLwoJCQlzZSA9IChzdHJ1Y3QgbmFtZV9saXN0ICopIG1hbGxvYyAoc2l6 ZW9mIChzdHJ1Y3QgbmFtZV9saXN0KSk7CgkJCXNlLT5uYW1lID0gb3B0YXJnOwoJCQlzZS0+bmFt ZV9uZXh0ID0gTlVMTDsKCQkJKmRwdGFpbCA9IHNlOwoJCQlkcHRhaWwgPSAmc2UtPm5hbWVfbmV4 dDsKCQkJYnJlYWs7CgkJY2FzZSAnWCc6CQkJCQkJCQkJLyogZXhjbHVkZSBmaWxlIHN5c3RlbSB0 eXBlICovCgkJCXNlID0gKHN0cnVjdCBuYW1lX2xpc3QgKikgbWFsbG9jIChzaXplb2YgKHN0cnVj dCBuYW1lX2xpc3QpKTsKCQkJc2UtPm5hbWUgPSBvcHRhcmc7CgkJCXNlLT5uYW1lX25leHQgPSBO VUxMOwoJCQkqZnN0YWlsID0gc2U7CgkJCWZzdGFpbCA9ICZzZS0+bmFtZV9uZXh0OwoJCQlicmVh azsKCQljYXNlICd2JzoJCQkJCQkJCQkvKiB2ZXJib3NlICovCgkJCXZlcmJvc2UrKzsKCQkJYnJl YWs7CgkJY2FzZSAncSc6CQkJCQkJCQkJLyogdmVyYm9zZSAqLwoJCQl2ZXJib3NlLS07CgkJCWJy ZWFrOwoJCWNhc2UgJ2UnOgoJCQllcnJvbmx5ID0gVFJVRTsKCQkJYnJlYWs7CgkJY2FzZSAnTSc6 IC8qIGRpc3BsYXkgbW91bnRwb2ludCAqLwoJCQlkaXNwbGF5X21udHAgPSBUUlVFOwoJCQlicmVh azsKCQljYXNlICdDJzoKCQkJd19kZiA9IDA7CgkJCWNfZGYgPSAwOwoJCQl3X2RmcCA9IC0xLjA7 CgkJCWNfZGZwID0gLTEuMDsKCQkJYnJlYWs7CgkJY2FzZSAnVic6CQkJCQkJCQkJLyogdmVyc2lv biAqLwoJCQlwcmludF9yZXZpc2lvbiAocHJvZ25hbWUsIHJldmlzaW9uKTsKCQkJZXhpdCAoU1RB VEVfT0spOwoJCWNhc2UgJ2gnOgkJCQkJCQkJCS8qIGhlbHAgKi8KCQkJcHJpbnRfaGVscCAoKTsK CQkJZXhpdCAoU1RBVEVfT0spOwoJCWNhc2UgJz8nOgkJCQkJCQkJCS8qIGhlbHAgKi8KCQkJdXNh Z2UgKF8oImNoZWNrX2Rpc2s6IHVucmVjb2duaXplZCBvcHRpb25cbiIpKTsKCQkJYnJlYWs7CgkJ fQoJfQoKCS8qIFN1cHBvcnQgZm9yICJjaGVja19kaXNrIHdhcm4gY3JpdCBbZnNdIiB3aXRoIHRo cmVzaG9sZHMgYXQgdXNlZCBsZXZlbCAqLwoJYyA9IG9wdGluZDsKCWlmICh3X2RmcCA8IDAgJiYg YXJnYyA+IGMgJiYgaXNfaW50bm9ubmVnIChhcmd2W2NdKSkKCQl3X2RmcCA9ICgxMDAuMCAtIGF0 b2YgKGFyZ3ZbYysrXSkpOwoKCWlmIChjX2RmcCA8IDAgJiYgYXJnYyA+IGMgJiYgaXNfaW50bm9u bmVnIChhcmd2W2NdKSkKCQljX2RmcCA9ICgxMDAuMCAtIGF0b2YgKGFyZ3ZbYysrXSkpOwoKCWlm IChhcmdjID4gYyAmJiBwYXRoID09IE5VTEwpIHsKCQlzZSA9IChzdHJ1Y3QgbmFtZV9saXN0ICop IG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbmFtZV9saXN0KSk7CgkJc2UtPm5hbWUgPSBzdHJkdXAg KGFyZ3ZbYysrXSk7CgkJc2UtPm5hbWVfbmV4dCA9IE5VTEw7CgkJc2UtPndfZGYgPSB3X2RmOwoJ CXNlLT5jX2RmID0gY19kZjsKCQlzZS0+d19kZnAgPSB3X2RmcDsKCQlzZS0+Y19kZnAgPSBjX2Rm cDsKCQkqcGF0aHRhaWwgPSBzZTsKCX0KCglpZiAocGF0aF9zZWxlY3RfbGlzdCkgewoJCXRlbXBf bGlzdCA9IHBhdGhfc2VsZWN0X2xpc3Q7CgkJd2hpbGUgKHRlbXBfbGlzdCkgewoJCQlpZiAodmFs aWRhdGVfYXJndW1lbnRzICh0ZW1wX2xpc3QtPndfZGYsCgkJCQkgICAgICAgICAgICAgICAgICAg ICAgdGVtcF9saXN0LT5jX2RmLAoJCQkJICAgICAgICAgICAgICAgICAgICAgIHRlbXBfbGlzdC0+ d19kZnAsCgkJCQkgICAgICAgICAgICAgICAgICAgICAgdGVtcF9saXN0LT5jX2RmcCwKCQkJCSAg ICAgICAgICAgICAgICAgICAgICB0ZW1wX2xpc3QtPm5hbWUpID09IEVSUk9SKQoJCQkJcmVzdWx0 ID0gRVJST1I7CgkJCXRlbXBfbGlzdCA9IHRlbXBfbGlzdC0+bmFtZV9uZXh0OwoJCX0KCQlyZXR1 cm4gcmVzdWx0OwoJfSBlbHNlIHsKCQlyZXR1cm4gdmFsaWRhdGVfYXJndW1lbnRzICh3X2RmLCBj X2RmLCB3X2RmcCwgY19kZnAsIE5VTEwpOwoJfQp9CgoKdm9pZApwcmludF9wYXRoIChjb25zdCBj aGFyICpteXBhdGgpIAp7CglpZiAobXlwYXRoID09IE5VTEwpCgkJcHJpbnRmICgiXG4iKTsKCWVs c2UKCQlwcmludGYgKCIgZm9yICVzXG4iLCBteXBhdGgpOwoKCXJldHVybjsKfQoKaW50CnZhbGlk YXRlX2FyZ3VtZW50cyAodWludG1heF90IHcsIHVpbnRtYXhfdCBjLCBkb3VibGUgd3AsIGRvdWJs ZSBjcCwgY2hhciAqbXlwYXRoKQp7CglpZiAodyA9PSAwICYmIGMgPT0gMCAmJiB3cCA8IDAuMCAm JiBjcCA8IDAuMCkgewoJCXByaW50ZiAoXygiSU5QVVQgRVJST1I6IE5vIHRocmVzaG9sZHMgc3Bl Y2lmaWVkIikpOwoJCXByaW50X3BhdGggKG15cGF0aCk7CgkJcmV0dXJuIEVSUk9SOwoJfQoJZWxz ZSBpZiAoKHdwID49IDAuMCB8fCBjcCA+PSAwLjApICYmCgkgICAgICAgICAod3AgPCAwLjAgfHwg Y3AgPCAwLjAgfHwgd3AgPiAxMDAuMCB8fCBjcCA+IDEwMC4wIHx8IGNwID4gd3ApKSB7CgkJcHJp bnRmIChfKCJcCklOUFVUIEVSUk9SOiBDX0RGUCAoJWYpIHNob3VsZCBiZSBsZXNzIHRoYW4gV19E RlAgKCUuMWYpIGFuZCBib3RoIHNob3VsZCBiZSBiZXR3ZWVuIHplcm8gYW5kIDEwMCBwZXJjZW50 LCBpbmNsdXNpdmUiKSwKCQkgICAgICAgIGNwLCB3cCk7CgkJcHJpbnRfcGF0aCAobXlwYXRoKTsK CQlyZXR1cm4gRVJST1I7Cgl9CgllbHNlIGlmICgodyA+IDAgfHwgYyA+IDApICYmICh3ID09IDAg fHwgYyA9PSAwIHx8IGMgPiB3KSkgewoJCXByaW50ZiAoXygiXApJTlBVVCBFUlJPUjogQ19ERiAo JWx1KSBzaG91bGQgYmUgbGVzcyB0aGFuIFdfREYgKCVsdSkgYW5kIGJvdGggc2hvdWxkIGJlIGdy ZWF0ZXIgdGhhbiB6ZXJvIiksCgkJICAgICAgICAodW5zaWduZWQgbG9uZyljLCAodW5zaWduZWQg bG9uZyl3KTsKCQlwcmludF9wYXRoIChteXBhdGgpOwoJCXJldHVybiBFUlJPUjsKCX0KCQoJaWYg KHVuaXRzID09IE5VTEwpIHsKCQl1bml0cyA9IHN0cmR1cCAoIk1CIik7CgkJbXVsdCA9ICh1aW50 bWF4X3QpMTAyNCAqIDEwMjQ7Cgl9CglyZXR1cm4gT0s7Cn0KCgoKDAppbnQKY2hlY2tfZGlzayAo ZG91YmxlIHVzcCwgdWludG1heF90IGZyZWVfZGlzaykKewoJaW50IHJlc3VsdCA9IFNUQVRFX1VO S05PV047CgkvKiBjaGVjayB0aGUgcGVyY2VudCB1c2VkIHNwYWNlIGFnYWluc3QgdGhyZXNob2xk cyAqLwoJaWYgKHVzcCA+PSAwLjAgJiYgY19kZnAgPj0wLjAgJiYgdXNwID49ICgxMDAuMCAtIGNf ZGZwKSkKCQlyZXN1bHQgPSBTVEFURV9DUklUSUNBTDsKCWVsc2UgaWYgKGNfZGYgPiAwICYmIGZy ZWVfZGlzayA8PSBjX2RmKQoJCXJlc3VsdCA9IFNUQVRFX0NSSVRJQ0FMOwoJZWxzZSBpZiAodXNw ID49IDAuMCAmJiB3X2RmcCA+PTAuMCAmJiB1c3AgPj0gKDEwMC4wIC0gd19kZnApKQoJCXJlc3Vs dCA9IFNUQVRFX1dBUk5JTkc7CgllbHNlIGlmICh3X2RmID4gMCAmJiBmcmVlX2Rpc2sgPD0gd19k ZikKCQlyZXN1bHQgPSBTVEFURV9XQVJOSU5HOwoJZWxzZSBpZiAodXNwID49IDAuMCkKCQlyZXN1 bHQgPSBTVEFURV9PSzsKCXJldHVybiByZXN1bHQ7Cn0KCgoKaW50CndhbGtfbmFtZV9saXN0IChz dHJ1Y3QgbmFtZV9saXN0ICpsaXN0LCBjb25zdCBjaGFyICpuYW1lKQp7Cgl3aGlsZSAobGlzdCkg ewoJCWlmICghIHN0cmNtcChsaXN0LT5uYW1lLCBuYW1lKSkgewoJCQlsaXN0LT5mb3VuZCA9IDE7 CgkJCS8qIGlmIHJlcXVpcmVkIGZvciBuYW1lX2xpc3RzIHRoYXQgaGF2ZSBub3Qgc2F2ZWQgd19k ZiwgZXRjIChlZyBleGNsdWRlIGxpc3RzKSAqLwoJCQlpZiAobGlzdC0+d19kZikgd19kZiA9IGxp c3QtPndfZGY7CgkJCWlmIChsaXN0LT5jX2RmKSBjX2RmID0gbGlzdC0+Y19kZjsKCQkJaWYgKGxp c3QtPndfZGZwPj0wLjApIHdfZGZwID0gbGlzdC0+d19kZnA7CgkJCWlmIChsaXN0LT5jX2RmcD49 MC4wKSBjX2RmcCA9IGxpc3QtPmNfZGZwOwoJCQlyZXR1cm4gVFJVRTsKCQl9CgkJbGlzdCA9IGxp c3QtPm5hbWVfbmV4dDsKCX0KCXJldHVybiBGQUxTRTsKfQoKCgoKCgwKdm9pZApwcmludF9oZWxw ICh2b2lkKQp7CglwcmludF9yZXZpc2lvbiAocHJvZ25hbWUsIHJldmlzaW9uKTsKCglwcmludGYg KF8oIkNvcHlyaWdodCAoYykgMTk5OSBFdGhhbiBHYWxzdGFkIDxuYWdpb3NAbmFnaW9zLm9yZz5c biIpKTsKCXByaW50ZiAoXyhDT1BZUklHSFQpLCBjb3B5cmlnaHQsIGVtYWlsKTsKCglwcmludGYg KF8oIlwKVGhpcyBwbHVnaW4gY2hlY2tzIHRoZSBhbW91bnQgb2YgdXNlZCBkaXNrIHNwYWNlIG9u IGEgbW91bnRlZCBmaWxlIHN5c3RlbVxuXAphbmQgZ2VuZXJhdGVzIGFuIGFsZXJ0IGlmIGZyZWUg c3BhY2UgaXMgbGVzcyB0aGFuIG9uZSBvZiB0aGUgdGhyZXNob2xkIHZhbHVlcy4iKSk7CgoJcHJp bnRfdXNhZ2UgKCk7CgoJcHJpbnRmIChfKFVUX0hFTFBfVlJTTikpOwoKCXByaW50ZiAoXygiXAog LXcsIC0td2FybmluZz1JTlRFR0VSXG5cCiAgIEV4aXQgd2l0aCBXQVJOSU5HIHN0YXR1cyBpZiBs ZXNzIHRoYW4gSU5URUdFUiBraWxvYnl0ZXMgb2YgZGlzayBhcmUgZnJlZVxuXAogLXcsIC0td2Fy bmluZz1QRVJDRU5UJSVcblwKICAgRXhpdCB3aXRoIFdBUk5JTkcgc3RhdHVzIGlmIGxlc3MgdGhh biBQRVJDRU5UIG9mIGRpc2sgc3BhY2UgaXMgZnJlZVxuXAogLWMsIC0tY3JpdGljYWw9SU5URUdF UlxuXAogICBFeGl0IHdpdGggQ1JJVElDQUwgc3RhdHVzIGlmIGxlc3MgdGhhbiBJTlRFR0VSIGtp bG9ieXRlcyBvZiBkaXNrIGFyZSBmcmVlXG5cCiAtYywgLS1jcml0aWNhbD1QRVJDRU5UJSVcblwK ICAgRXhpdCB3aXRoIENSSVRDQUwgc3RhdHVzIGlmIGxlc3MgdGhhbiBQRVJDRU5UIG9mIGRpc2sg c3BhY2UgaXMgZnJlZVxuXAogLUMsIC0tY2xlYXJcblwKICAgIENsZWFyIHRocmVzaG9sZHNcbiIp KTsKCglwcmludGYgKF8oIlwKIC11LCAtLXVuaXRzPVNUUklOR1xuXAogICAgQ2hvb3NlIGJ5dGVz LCBrQiwgTUIsIEdCLCBUQiAoZGVmYXVsdDogTUIpXG5cCiAtaywgLS1raWxvYnl0ZXNcblwKICAg IFNhbWUgYXMgJy0tdW5pdHMga0InXG5cCiAtbSwgLS1tZWdhYnl0ZXNcblwKICAgIFNhbWUgYXMg Jy0tdW5pdHMgTUInXG4iKSk7CgoJcHJpbnRmIChfKCJcCiAtbCwgLS1sb2NhbFxuXAogICAgT25s eSBjaGVjayBsb2NhbCBmaWxlc3lzdGVtc1xuXAogLXAsIC0tcGF0aD1QQVRILCAtLXBhcnRpdGlv bj1QQVJUSVRJT05cblwKICAgIFBhdGggb3IgcGFydGl0aW9uIChtYXkgYmUgcmVwZWF0ZWQpXG5c CiAteCwgLS1leGNsdWRlX2RldmljZT1QQVRIIDxTVFJJTkc+XG5cCiAgICBJZ25vcmUgZGV2aWNl IChvbmx5IHdvcmtzIGlmIC1wIHVuc3BlY2lmaWVkKVxuXAogLVgsIC0tZXhjbHVkZS10eXBlPVRZ UEUgPFNUUklORz5cblwKICAgIElnbm9yZSBhbGwgZmlsZXN5c3RlbXMgb2YgaW5kaWNhdGVkIHR5 cGUgKG1heSBiZSByZXBlYXRlZClcblwKIC1NLCAtLW1vdW50cG9pbnRcblwKICAgIERpc3BsYXkg dGhlIG1vdW50cG9pbnQgaW5zdGVhZCBvZiB0aGUgcGFydGl0aW9uXG5cCiAtZSwgLS1lcnJvcnMt b25seVxuXAogICAgRGlzcGxheSBvbmx5IGRldmljZXMvbW91bnRwb2ludHMgd2l0aCBlcnJvcnNc biIpKTsKCglwcmludGYgKF8oVVRfV0FSTl9DUklUKSk7CgoJcHJpbnRmIChfKFVUX1RJTUVPVVQp LCBERUZBVUxUX1NPQ0tFVF9USU1FT1VUKTsKCglwcmludGYgKF8oVVRfVkVSQk9TRSkpOwoKCXBy aW50ZiAoIiVzIiwgXygiRXhhbXBsZXM6XG5cCiBjaGVja19kaXNrIC13IDEwJSAtYyA1JSAtcCAv dG1wIC1wIC92YXIgLUMgLXcgMTAwMDAwIC1jIDUwMDAwIC1wIC9cblwKICAgQ2hlY2tzIC90bXAg YW5kIC92YXIgYXQgMTAlLDUlIGFuZCAvIGF0IDEwME1CLCA1ME1CXG4iKSk7CgoJcHJpbnRmIChf KFVUX1NVUFBPUlQpKTsKfQoKCgoKdm9pZApwcmludF91c2FnZSAodm9pZCkKewoJcHJpbnRmIChf KCJcClVzYWdlOiAlcyAtdyBsaW1pdCAtYyBsaW1pdCBbLXAgcGF0aCB8IC14IGRldmljZV0gWy10 IHRpbWVvdXRdIFstbV0gWy1lXVxuXAogICAgICAgIFstdl0gWy1xXVxuXAogICAgICAgJXMgKC1o fC0taGVscClcblwKICAgICAgICVzICgtVnwtLXZlcnNpb24pXG4iKSwKCSAgICAgICAgcHJvZ25h bWUsICBwcm9nbmFtZSwgcHJvZ25hbWUpOwp9Cg== |