ZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMTg3MjgyZC4uNjRiOTE5NiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE5MDgsNiArMTkwOCwxMiBAQAogRjoJYXJjaC94ODYva2VybmVsL2NwdWlkLmMKIEY6CWFyY2gveDg2L2tlcm5lbC9tc3IuYwogCitDUFUgUE9XRVIgTU9OSVRPUklORyBTVUJTWVNURU0KK006CURvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLm5ldD4KK006CVRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+CitTOglNYWludGFpbmVkCitGOgl0b29scy9wb3dlci9jcHVwb3dlcgorCiBDUFVTRVRTCiBNOglQYXVsIE1lbmFnZSA8bWVuYWdlQGdvb2dsZS5jb20+CiBXOglodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9jcHVzZXQvCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci8uZ2l0aWdub3JlIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGQ3YjVhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIxIEBACisubGlicworbGliY3B1ZnJlcS5zbworbGliY3B1ZnJlcS5zby4wCitsaWJjcHVmcmVxLnNvLjAuMC4wCitidWlsZC9jY2R2CitjcHVmcmVxLWluZm8KK2NwdWZyZXEtc2V0CitjcHVmcmVxLWFwZXJmCitsaWIvLmxpYnMKK2xpYi9jcHVmcmVxLmxvCitsaWIvY3B1ZnJlcS5vCitsaWIvcHJvYy5sbworbGliL3Byb2MubworbGliL3N5c2ZzLmxvCitsaWIvc3lzZnMubworbGliY3B1ZnJlcS5sYQorcG8vY3B1ZnJlcXV0aWxzLnBvdAorcG8vKi5nbW8KK3V0aWxzL2NwdWZyZXEtaW5mby5vCit1dGlscy9jcHVmcmVxLXNldC5vCit1dGlscy9jcHVmcmVxLWFwZXJmLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9BVVRIT1JTIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTBhZjJjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvQVVUSE9SUwpAQCAtMCwwICsxLDE4IEBACitEb21pbmlrIEJyb2Rvd3NraQorPGxpbnV4QGJyb2RvLmRlPgorCitNYXR0aWEgRG9uZ2lsaQordmlhIExhdGlzYW5hLCA4CiswMDE3NyBSb21lCitJdGFseQorPG1hbGF0dGlhQGdtYWlsLmNvbT4KKworR29yYW4gS29ydWdhCitTbG92ZW5pYQorPGtvcnVnYWdAc2lvbC5uZXQ+CisKK1Rob21hcyBSZW5uaW5nZXIKK1NVU0UgTGludXggR21iSAorR2VybWFueQorPHRyZW5uQHN1c2UuZGU+CisKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL0NPUFlJTkcgYi90b29scy9wb3dlci9jcHVwb3dlci9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MGMzMWEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9DT1BZSU5HCkBAIC0wLDAgKzEsMzQwIEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL01ha2VmaWxlIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmMWUzYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL01ha2VmaWxlCkBAIC0wLDAgKzEsMjczIEBACisjIE1ha2VmaWxlIGZvciBjcHVwb3dlcnV0aWxzCisjCisjIENvcHlyaWdodCAoQykgMjAwNSwyMDA2IERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLm5ldD4KKyMKKyMgQmFzZWQgbGFyZ2VseSBvbiB0aGUgTWFrZWZpbGUgZm9yIHVkZXYgYnk6CisjCisjIENvcHlyaWdodCAoQykgMjAwMywyMDA0IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorIworCisjIC0tLSBDT05GSUdVUkFUSU9OIEJFR0lOIC0tLQorCisjIFNldCB0aGUgZm9sbG93aW5nIHRvIGB0cnVlJyB0byBtYWtlIGEgdW5zdHJpcHBlZCwgdW5vcHRpbWl6ZWQKKyMgYmluYXJ5LiBMZWF2ZSB0aGlzIHNldCB0byBgZmFsc2UnIGZvciBwcm9kdWN0aW9uIHVzZS4KK0RFQlVHID89CXRydWUKKworIyBtYWtlIHRoZSBidWlsZCBzaWxlbnQuIFNldCB0aGlzIHRvIHNvbWV0aGluZyBlbHNlIHRvIG1ha2UgaXQgbm9pc3kgYWdhaW4uCitWID89CQlmYWxzZQorCisjIEludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQgKG91dHB1dCBpbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzKS4KKyMgUmVxdWlyZXMgZ2V0dGV4dC4KK05MUyA/PQkJdHJ1ZQorCisjIFNldCB0aGUgZm9sbG93aW5nIHRvICd0cnVlJyB0byBidWlsZC9pbnN0YWxsIHRoZQorIyBjcHVmcmVxLWJlbmNoIGJlbmNobWFya2luZyB0b29sCitDUFVGUlFfQkVOQ0ggPz0gdHJ1ZQorCisjIFByZWZpeCB0byB0aGUgZGlyZWN0b3JpZXMgd2UncmUgaW5zdGFsbGluZyB0bworREVTVERJUiA/PQkKKworIyAtLS0gQ09ORklHVVJBVElPTiBFTkQgLS0tCisKKworCisjIFBhY2thZ2UtcmVsYXRlZCBkZWZpbml0aW9ucy4gRGlzdHJpYnV0aW9ucyBjYW4gbW9kaWZ5IHRoZSB2ZXJzaW9uCisjIGFuZCBfc2hvdWxkXyBtb2RpZnkgdGhlIFBBQ0tBR0VfQlVHUkVQT1JUIGRlZmluaXRpb24KKworVkVSU0lPTiA9CQkJMDA5cDEKK0xJQl9NQUo9CQkJMC4wLjAKK0xJQl9NSU49CQkJMAorCitQQUNLQUdFID0JCQljcHVwb3dlcnV0aWxzCitQQUNLQUdFX0JVR1JFUE9SVCA9CQljcHVmcmVxQHZnZXIua2VybmVsLm9yZworTEFOR1VBR0VTID0gCQkJZGUgZnIgaXQgY3MgcHQKKworCisjIERpcmVjdG9yeSBkZWZpbml0aW9ucy4gVGhlc2UgYXJlIGRlZmF1bHQgYW5kIG1vc3QgcHJvYmFibHkKKyMgZG8gbm90IG5lZWQgdG8gYmUgY2hhbmdlZC4gUGxlYXNlIG5vdGUgdGhhdCBERVNURElSIGlzCisjIGFkZGVkIGluIGZyb250IG9mIGFueSBvZiB0aGVtCisKK2JpbmRpciA/PQkvdXNyL2Jpbgorc2JpbmRpciA/PQkvdXNyL3NiaW4KK21hbmRpciA/PQkvdXNyL21hbgoraW5jbHVkZWRpciA/PQkvdXNyL2luY2x1ZGUKK2xpYmRpciA/PQkvdXNyL2xpYgorbG9jYWxlZGlyID89CS91c3Ivc2hhcmUvbG9jYWxlCitkb2NkaXIgPz0gICAgICAgL3Vzci9zaGFyZS9kb2MvcGFja2FnZXMvY3B1cG93ZXJ1dGlscworY29uZmRpciA/PSAgICAgIC9ldGMvCisKKyMgVG9vbGNoYWluOiB3aGF0IHRvb2xzIGRvIHdlIHVzZSwgYW5kIHdoYXQgb3B0aW9ucyBkbyB0aGV5IG5lZWQ6CisKK0NQID0gY3AgLWZwUgorSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKK0lOU1RBTExfUFJPR1JBTSA9ICR7SU5TVEFMTH0KK0lOU1RBTExfREFUQSAgPSAke0lOU1RBTEx9IC1tIDY0NAorSU5TVEFMTF9TQ1JJUFQgPSAke0lOU1RBTExfUFJPR1JBTX0KKworIyBJZiB5b3UgYXJlIHJ1bm5pbmcgYSBjcm9zcyBjb21waWxlciwgeW91IG1heSB3YW50IHRvIHNldCB0aGlzCisjIHRvIHNvbWV0aGluZyBtb3JlIGludGVyZXN0aW5nLCBsaWtlICJhcm0tbGludXgtIi4gIElmIHlvdSB3YW50CisjIHRvIGNvbXBpbGUgdnMgdUNsaWJjLCB0aGF0IGNhbiBiZSBkb25lIGhlcmUgYXMgd2VsbC4KK0NST1NTID0gIy91c3IvaTM4Ni1saW51eC11Y2xpYmMvdXNyL2Jpbi9pMzg2LXVjbGliYy0KK0NDID0gJChDUk9TUylnY2MKK0xEID0gJChDUk9TUylnY2MKK0FSID0gJChDUk9TUylhcgorU1RSSVAgPSAkKENST1NTKXN0cmlwCitSQU5MSUIgPSAkKENST1NTKXJhbmxpYgorSE9TVENDID0gZ2NjCisKKworIyBOb3cgd2Ugc2V0IHVwIHRoZSBidWlsZCBzeXN0ZW0KKyMKKworIyBzZXQgdXAgUFdEIHNvIHRoYXQgb2xkZXIgdmVyc2lvbnMgb2YgbWFrZSB3aWxsIHdvcmsgd2l0aCBvdXIgYnVpbGQuCitQV0QgPSAkKHNoZWxsIHB3ZCkKKworZXhwb3J0IENST1NTIENDIEFSIFNUUklQIFJBTkxJQiBDRkxBR1MgTERGTEFHUyBMSUJfT0JKUworCisjIGNoZWNrIGlmIGNvbXBpbGVyIG9wdGlvbiBpcyBzdXBwb3J0ZWQKK2NjLXN1cHBvcnRzID0gJHtzaGVsbCBpZiAkKENDKSAkezF9IC1TIC1vIC9kZXYvbnVsbCAteGMgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4gZWNobyAiJCgxKSI7IGZpO30KKworIyB1c2UgJy1Pcycgb3B0aW1pemF0aW9uIGlmIGF2YWlsYWJsZSwgZWxzZSB1c2UgLU8yCitPUFRJTUlaQVRJT04gOj0gJChjYWxsIGNjLXN1cHBvcnRzLC1PcywtTzIpCisKK1dBUk5JTkdTIDo9IC1XYWxsIC1XY2hhci1zdWJzY3JpcHRzIC1XcG9pbnRlci1hcml0aCAtV3NpZ24tY29tcGFyZQorV0FSTklOR1MgKz0gJChjYWxsIGNjLXN1cHBvcnRzLC1Xbm8tcG9pbnRlci1zaWduKQorV0FSTklOR1MgKz0gJChjYWxsIGNjLXN1cHBvcnRzLC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50KQorV0FSTklOR1MgKz0gLVdzaGFkb3cKKworQ1BQRkxBR1MgKz0gLURWRVJTSU9OPVwiJChWRVJTSU9OKVwiIC1EUEFDS0FHRT1cIiQoUEFDS0FHRSlcIiBcCisJCS1EUEFDS0FHRV9CVUdSRVBPUlQ9XCIkKFBBQ0tBR0VfQlVHUkVQT1JUKVwiIC1EX0dOVV9TT1VSQ0UKKworVVRJTF9PQkpTID0gIHV0aWxzL2hlbHBlcnMvYW1kLm8gdXRpbHMvaGVscGVycy90b3BvbG9neS5vIHV0aWxzL2hlbHBlcnMvbXNyLm8gXAorCXV0aWxzL2hlbHBlcnMvc3lzZnMubyB1dGlscy9oZWxwZXJzL21pc2MubyB1dGlscy9oZWxwZXJzL2NwdWlkLm8gXAorCXV0aWxzL2hlbHBlcnMvcGNpLm8gdXRpbHMvaGVscGVycy9iaXRtYXNrLm8gXAorCXV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5vIHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5vIFwKKwl1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLm8gdXRpbHMvaWRsZV9tb25pdG9yL2NwdWlkbGVfc3lzZnMubyBcCisJdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IubyB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5vIFwKKwl1dGlscy9jcHVwb3dlci5vIHV0aWxzL2NwdWZyZXEtaW5mby5vIHV0aWxzL2NwdWZyZXEtc2V0Lm8gXAorCXV0aWxzL2NwdXBvd2VyLXNldC5vIHV0aWxzL2NwdXBvd2VyLWluZm8ubyB1dGlscy9jcHVpZGxlLWluZm8ubworCitVVElMX0hFQURFUlMgPSB1dGlscy9oZWxwZXJzL2hlbHBlcnMuaCB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIFwKKwl1dGlscy9oZWxwZXJzL2JpdG1hc2suaCBcCisJdXRpbHMvaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuaCB1dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5kZWYKKworVVRJTF9TUkMgOj0gJChVVElMX09CSlM6Lm89LmMpCisKK0xJQl9IRUFERVJTID0gCWxpYi9jcHVmcmVxLmggbGliL3N5c2ZzLmgKK0xJQl9TUkMgPSAJbGliL2NwdWZyZXEuYyBsaWIvc3lzZnMuYworTElCX09CSlMgPSAJbGliL2NwdWZyZXEubyBsaWIvc3lzZnMubworCitDRkxBR1MgKz0JLXBpcGUKKworaWZlcSAoJChzdHJpcCAkKE5MUykpLHRydWUpCisJSU5TVEFMTF9OTFMgKz0gaW5zdGFsbC1nbW8KKwlDT01QSUxFX05MUyArPSB1cGRhdGUtZ21vCitlbmRpZgorCitpZmVxICgkKHN0cmlwICQoQ1BVRlJRX0JFTkNIKSksdHJ1ZSkKKwlJTlNUQUxMX0JFTkNIICs9IGluc3RhbGwtYmVuY2gKKwlDT01QSUxFX0JFTkNIICs9IGNvbXBpbGUtYmVuY2gKK2VuZGlmCisKK0NGTEFHUyArPSAkKFdBUk5JTkdTKQorCitpZmVxICgkKHN0cmlwICQoVikpLGZhbHNlKQorCVFVSUVUPUAkKFBXRCkvYnVpbGQvY2NkdgorCUhPU1RfUFJPR1M9YnVpbGQvY2NkdgorZWxzZQorCVFVSUVUPQorCUhPU1RfUFJPR1M9CitlbmRpZgorCisjIGlmIERFQlVHIGlzIGVuYWJsZWQsIHRoZW4gd2UgZG8gbm90IHN0cmlwIG9yIG9wdGltaXplCitpZmVxICgkKHN0cmlwICQoREVCVUcpKSx0cnVlKQorCUNGTEFHUyArPSAtTzEgLWcKKwlDUFBGTEFHUyArPSAtRERFQlVHCisJU1RSSVBDTUQgPSAvYmluL3RydWUgLVNpbmNlX3dlX2FyZV9kZWJ1Z2dpbmcKK2Vsc2UKKwlDRkxBR1MgKz0gJChPUFRJTUlaQVRJT04pIC1mb21pdC1mcmFtZS1wb2ludGVyCisJU1RSSVBDTUQgPSAkKFNUUklQKSAtcyAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQKK2VuZGlmCisKKworIyB0aGUgYWN0dWFsIG1ha2UgcnVsZXMKKworYWxsOiBjY2R2IGxpYmNwdWZyZXEgY3B1cG93ZXIgJChDT01QSUxFX05MUykgJChDT01QSUxFX0JFTkNIKQorCitjY2R2OiBidWlsZC9jY2R2CitidWlsZC9jY2R2OiBidWlsZC9jY2R2LmMKKwlAZWNobyAiQnVpbGRpbmcgY2NkdiIKKwlAJChIT1NUQ0MpIC1PMSAkPCAtbyAkQAorCitsaWIvJS5vOiAkKExJQl9TUkMpICQoTElCX0hFQURFUlMpIGJ1aWxkL2NjZHYKKwkkKFFVSUVUKSAkKENDKSAkKENQUEZMQUdTKSAkKENGTEFHUykgLWZQSUMgLW8gJEAgLWMgbGliLyQqLmMKKworbGliY3B1ZnJlcS5zby4kKExJQl9NQUopOiAkKExJQl9PQkpTKQorCSQoUVVJRVQpICQoQ0MpIC1zaGFyZWQgJChDUFBGTEFHUykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgXAorCQktV2wsLXNvbmFtZSxsaWJjcHVmcmVxLnNvLiQoTElCX01JTikgJChMSUJfT0JKUykKKwlAbG4gLXNmICRAIGxpYmNwdWZyZXEuc28KKwlAbG4gLXNmICRAIGxpYmNwdWZyZXEuc28uJChMSUJfTUlOKQorCitsaWJjcHVmcmVxOiBsaWJjcHVmcmVxLnNvLiQoTElCX01BSikKKworIyBMZXQgYWxsIC5vIGZpbGVzIGRlcGVuZCBvbiBpdHMgLmMgZmlsZSBhbmQgYWxsIGhlYWRlcnMKKyMgTWlnaHQgYmUgd29ydGggdG8gcHV0IHRoaXMgaW50byB1dGlscy9NYWtlZmlsZSBhdCBzb21lIHBvaW50IG9mIHRpbWUKKyQoVVRJTF9PQkpTKTogJChVVElMX0hFQURFUlMpCisKKy5jLm86CisJJChRVUlFVCkgJChDQykgJChDRkxBR1MpICQoQ1BQRkxBR1MpIC1JLi9saWIgLUkgLi91dGlscyAtbyAkQCAtYyAkKi5jCisKK2NwdXBvd2VyOiAkKFVUSUxfT0JKUykgbGliY3B1ZnJlcQorCSQoUVVJRVQpICQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1sY3B1ZnJlcSAtbHJ0IC1scGNpIC1MLiAtbyAkQCAkKFVUSUxfT0JKUykKKwkkKFNUUklQQ01EKSAkQAorCitwby8kKFBBQ0tBR0UpLnBvdDogJChVVElMX1NSQykKKwlAeGdldHRleHQgLS1kZWZhdWx0LWRvbWFpbj0kKFBBQ0tBR0UpIC0tYWRkLWNvbW1lbnRzIFwKKwkJLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fICQoVVRJTF9TUkMpICYmIFwKKwl0ZXN0IC1mICQoUEFDS0FHRSkucG8gJiYgXAorCW12IC1mICQoUEFDS0FHRSkucG8gcG8vJChQQUNLQUdFKS5wb3QKKwordXBkYXRlLWdtbzogcG8vJChQQUNLQUdFKS5wb3QKKwkgQGZvciBITEFORyBpbiAkKExBTkdVQUdFUyk7IGRvIFwKKwkJZWNobyAtbiAiVHJhbnNsYXRpbmcgJCRITEFORyAiOyBcCisJCWlmIG1zZ21lcmdlIHBvLyQkSExBTkcucG8gcG8vJChQQUNLQUdFKS5wb3QgLW8gXAorCQkgICBwby8kJEhMQU5HLm5ldy5wbzsgdGhlbiBcCisJCQltdiAtZiBwby8kJEhMQU5HLm5ldy5wbyBwby8kJEhMQU5HLnBvOyBcCisJCWVsc2UgXAorCQkJZWNobyAibXNnbWVyZ2UgZm9yICQkSExBTkcgZmFpbGVkISI7IFwKKwkJCXJtIC1mIHBvLyQkSExBTkcubmV3LnBvOyBcCisJCWZpOyBcCisJCW1zZ2ZtdCAtLXN0YXRpc3RpY3MgLW8gcG8vJCRITEFORy5nbW8gcG8vJCRITEFORy5wbzsgXAorCWRvbmU7CisKK2NvbXBpbGUtYmVuY2g6IGxpYmNwdWZyZXEuc28uJChMSUJfTUFKKQorCUBWPSQoVikgY29uZmRpcj0kKGNvbmZkaXIpICQoTUFLRSkgLUMgYmVuY2gKKworY2xlYW46CisJLWZpbmQgLiBcKCAtbm90IC10eXBlIGQgXCkgLWFuZCBcKCAtbmFtZSAnKn4nIC1vIC1uYW1lICcqLltvYXNdJyBcKSAtdHlwZSBmIC1wcmludCBcCisJIHwgeGFyZ3Mgcm0gLWYKKwktcm0gLWYgJChVVElMX0JJTlMpCisJLXJtIC1mICQoSURMRV9PQkpTKQorCS1ybSAtZiBjcHVwb3dlcgorCS1ybSAtZiBsaWJjcHVmcmVxLnNvKgorCS1ybSAtZiBidWlsZC9jY2R2CisJLXJtIC1yZiBwby8qLmdtbyBwby8qLnBvdAorCSQoTUFLRSkgLUMgYmVuY2ggY2xlYW4KKworCitpbnN0YWxsLWxpYjoKKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikke2xpYmRpcn0KKwkkKENQKSBsaWJjcHVmcmVxLnNvKiAkKERFU1RESVIpJHtsaWJkaXJ9LworCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSR7aW5jbHVkZWRpcn0KKwkkKElOU1RBTExfREFUQSkgbGliL2NwdWZyZXEuaCAkKERFU1RESVIpJHtpbmNsdWRlZGlyfS9jcHVmcmVxLmgKKworaW5zdGFsbC10b29sczoKKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikke2JpbmRpcn0KKwkkKElOU1RBTExfUFJPR1JBTSkgY3B1cG93ZXIgJChERVNURElSKSR7YmluZGlyfQorCitpbnN0YWxsLW1hbjoKKwkkKElOU1RBTExfREFUQSkgLUQgbWFuL2NwdXBvd2VyLjEgJChERVNURElSKSR7bWFuZGlyfS9tYW4xL2NwdXBvd2VyLjEKKwkkKElOU1RBTExfREFUQSkgLUQgbWFuL2NwdXBvd2VyLWZyZXF1ZW5jeS1zZXQuMSAkKERFU1RESVIpJHttYW5kaXJ9L21hbjEvY3B1cG93ZXItZnJlcXVlbmN5LXNldC4xCisJJChJTlNUQUxMX0RBVEEpIC1EIG1hbi9jcHVwb3dlci1mcmVxdWVuY3ktaW5mby4xICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVwb3dlci1mcmVxdWVuY3ktaW5mby4xCisJJChJTlNUQUxMX0RBVEEpIC1EIG1hbi9jcHVwb3dlci1zZXQuMSAkKERFU1RESVIpJHttYW5kaXJ9L21hbjEvY3B1cG93ZXItc2V0LjEKKwkkKElOU1RBTExfREFUQSkgLUQgbWFuL2NwdXBvd2VyLWluZm8uMSAkKERFU1RESVIpJHttYW5kaXJ9L21hbjEvY3B1cG93ZXItaW5mby4xCisJJChJTlNUQUxMX0RBVEEpIC1EIG1hbi9jcHVwb3dlci1tb25pdG9yLjEgJChERVNURElSKSR7bWFuZGlyfS9tYW4xL2NwdXBvd2VyLW1vbml0b3IuMQorCitpbnN0YWxsLWdtbzoKKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikke2xvY2FsZWRpcn0KKwlmb3IgSExBTkcgaW4gJChMQU5HVUFHRVMpOyBkbyBcCisJCWVjaG8gJyQoSU5TVEFMTF9EQVRBKSAtRCBwby8kJEhMQU5HLmdtbyAkKERFU1RESVIpJHtsb2NhbGVkaXJ9LyQkSExBTkcvTENfTUVTU0FHRVMvY3B1cG93ZXJ1dGlscy5tbyc7IFwKKwkJJChJTlNUQUxMX0RBVEEpIC1EIHBvLyQkSExBTkcuZ21vICQoREVTVERJUikke2xvY2FsZWRpcn0vJCRITEFORy9MQ19NRVNTQUdFUy9jcHVwb3dlcnV0aWxzLm1vOyBcCisJZG9uZTsKKworaW5zdGFsbC1iZW5jaDoKKwlAI0RFU1RESVIgbXVzdCBiZSBzZXQgZnJvbSBvdXRzaWRlIHRvIHN1cnZpdmUKKwlAc2JpbmRpcj0kKHNiaW5kaXIpIGJpbmRpcj0kKGJpbmRpcikgZG9jZGlyPSQoZG9jZGlyKSBjb25mZGlyPSQoY29uZmRpcikgJChNQUtFKSAtQyBiZW5jaCBpbnN0YWxsCisgICAgICAgCitpbnN0YWxsOiBhbGwgaW5zdGFsbC1saWIgaW5zdGFsbC10b29scyBpbnN0YWxsLW1hbiAkKElOU1RBTExfTkxTKSAkKElOU1RBTExfQkVOQ0gpCisKK3VuaW5zdGFsbDoKKwktIHJtIC1mICQoREVTVERJUikke2xpYmRpcn0vbGliY3B1ZnJlcS4qCisJLSBybSAtZiAkKERFU1RESVIpJHtpbmNsdWRlZGlyfS9jcHVmcmVxLmgKKwktIHJtIC1mICQoREVTVERJUikke2JpbmRpcn0vdXRpbHMvY3B1cG93ZXIKKwktIHJtIC1mICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVmcmVxLXNldC4xCisJLSBybSAtZiAkKERFU1RESVIpJHttYW5kaXJ9L21hbjEvY3B1ZnJlcS1pbmZvLjEKKwktIGZvciBITEFORyBpbiAkKExBTkdVQUdFUyk7IGRvIFwKKwkJcm0gLWYgJChERVNURElSKSR7bG9jYWxlZGlyfS8kJEhMQU5HL0xDX01FU1NBR0VTL2NwdXBvd2VydXRpbHMubW87IFwKKwkgIGRvbmU7CisKKy5QSE9OWTogYWxsIHV0aWxzIGxpYmNwdWZyZXEgY2NkdiB1cGRhdGUtcG8gdXBkYXRlLWdtbyBpbnN0YWxsLWxpYiBpbnN0YWxsLXRvb2xzIGluc3RhbGwtbWFuIGluc3RhbGwtZ21vIGluc3RhbGwgdW5pbnN0YWxsIFwKKwljbGVhbiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL1JFQURNRSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDlkNGMwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvUkVBRE1FCkBAIC0wLDAgKzEsNDkgQEAKK1RoZSBjcHVmcmVxdXRpbHMgcGFja2FnZSAoaG9tZXBhZ2U6IAoraHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwvY3B1ZnJlcS9jcHVmcmVxdXRpbHMuaHRtbCApIAorY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKKworcmVxdWlyZW1lbnRzCistLS0tLS0tLS0tLS0KKworT24geDg2IHBjaXV0aWxzIGlzIG5lZWRlZCBhdCBydW50aW1lICgtbHBjaSkuCitGb3IgY29tcGlsYXRpb24gcGNpdXRpbHMtZGV2ZWwgKHBjaS9wY2kuaCkgYW5kIGEgZ2NjIHZlcnNpb24KK3Byb3ZpZGluZyBjcHVpZC5oIGlzIG5lZWRlZC4KK0ZvciBib3RoIGl0J3Mgbm90IGV4cGxpY2l0bHkgY2hlY2tlZCBmb3IgKHlldCkuCisKKworbGliY3B1ZnJlcQorLS0tLS0tLS0tLQorCisibGliY3B1ZnJlcSIgaXMgYSBsaWJyYXJ5IHdoaWNoIG9mZmVycyBhIHVuaWZpZWQgYWNjZXNzIG1ldGhvZCBmb3IgdXNlcnNwYWNlCit0b29scyBhbmQgcHJvZ3JhbXMgdG8gdGhlIGNwdWZyZXEgY29yZSBhbmQgZHJpdmVycyBpbiB0aGUgTGludXgga2VybmVsLiBUaGlzCithbGxvd3MgZm9yIGNvZGUgcmVkdWN0aW9uIGluIHVzZXJzcGFjZSB0b29scywgYSBjbGVhbiBpbXBsZW1lbnRhdGlvbiBvZgordGhlIGludGVyYWN0aW9uIHRvIHRoZSBjcHVmcmVxIGNvcmUsIGFuZCBzdXBwb3J0IGZvciBib3RoIHRoZSBzeXNmcyBhbmQgcHJvYworaW50ZXJmYWNlcyBbZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24sIHNlZSBiZWxvd10uCisKKworY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittYWtlCitzdQorbWFrZSBpbnN0YWxsCisKK3Nob3VsZCBzdWZmaWNlIG9uIG1vc3Qgc3lzdGVtcy4gSXQgYnVpbGRzIGRlZmF1bHQgbGliY3B1ZnJlcSwKK2NwdWZyZXEtc2V0IGFuZCBjcHVmcmVxLWluZm8gZmlsZXMgYW5kIGluc3RhbGxzIHRoZW0gaW4gL3Vzci9saWIgYW5kCisvdXNyL2JpbiwgcmVzcGVjdGl2ZWx5LiBJZiB5b3Ugd2FudCB0byBzZXQgdXAgdGhlIHBhdGhzIGRpZmZlcmVudGx5IGFuZC9vcgord2FudCB0byBjb25maWd1cmUgdGhlIHBhY2thZ2UgdG8geW91ciBzcGVjaWZpYyBuZWVkcywgeW91IG5lZWQgdG8gb3BlbgorIk1ha2VmaWxlIiB3aXRoIGFuIGVkaXRvciBvZiB5b3VyIGNob2ljZSBhbmQgZWRpdCB0aGUgYmxvY2sgbWFya2VkCitDT05GSUdVUkFUSU9OLgorCisKK1RIQU5LUworLS0tLS0tCitNYW55IHRoYW5rcyB0byBNYXR0aWEgRG9uZ2lsaSB3aG8gd3JvdGUgdGhlIGF1dG90b29saXphdGlvbiBhbmQKK2xpYnRvb2xpemF0aW9uLCB0aGUgbWFucGFnZXMgYW5kIHRoZSBpdGFsaWFuIGxhbmd1YWdlIGZpbGUgZm9yIGNwdWZyZXF1dGlsczsKK3RvIERhdmUgSm9uZXMgZm9yIGhpcyBmZWVkYmFjayBhbmQgaGlzIGR1bXBfcHNiIHRvb2w7IHRvIEJydW5vIER1Y3JvdCBmb3IgaGlzCitwb3dlcm5vdy1rOC1kZWNvZGUgYW5kIGludGVsX2dzaWMgdG9vbHMgYXMgd2VsbCBhcyB0aGUgZnJlbmNoIGxhbmd1YWdlIGZpbGU7CithbmQgdG8gdmFyaW91cyBvdGhlcnMgY29tbWVudGluZyBvbiB0aGUgcHJldmlvdXMgKHByZS0pcmVsZWFzZXMgb2YgCitjcHVmcmVxdXRpbHMuCisKKworICAgICAgICBEb21pbmlrIEJyb2Rvd3NraQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvVG9EbyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL1RvRG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0Yjc4YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL1RvRG8KQEAgLTAsMCArMSwxMSBAQAorVG9Eb3Mgc29ydGVkIGJ5IHByaW9yaXR5OgorCistIFVzZSBiaXRtYXNrIGZ1bmN0aW9ucyB0byBwYXJzZSBDUFUgdG9wb2xvZ3kgbW9yZSByb2J1c3QKKyAgKGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaGFzIGlzc3VlcyBvbiBBTUQpCistIFRyeSB0byByZWFkIG91dCBib29zdCBzdGF0ZXMgYW5kIGZyZXF1ZW5jaWVzIG9uIEludGVsCistIEFkanVzdCBSRUFETUUKKy0gU29tZXdoZXJlIHNhdyB0aGUgYWJpbGl0eSB0byByZWFkIHBvd2VyIGNvbnN1bXB0aW9uIG9mCisgIFJBTSBmcm9tIEhXIG9uIEludGVsIFNhbmR5QnJpZGdlIC0+IGFub3RoZXIgbW9uaXRvcj8KKy0gQWRkIGFub3RoZXIgYzFlIGRlYnVnIGlkbGUgbW9uaXRvcgorICAtPiBJcyBieSBkZXNpZ24gcmFjeSB3aXRoIEJJT1MsIGJ1dCBjb3VsZCBiZSBhZGRlZAorICAgICB3aXRoIGEgLS1mb3JjZSBvcHRpb24gYW5kIHNvbWUgImJlIGNhcmVmdWwiIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9NYWtlZmlsZSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOGZhMjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9NYWtlZmlsZQpAQCAtMCwwICsxLDMwIEBACitMSUJTID0gLUwuLi8gLWxtIC1sY3B1ZnJlcQorCitPQkpTID0gbWFpbi5vIHBhcnNlLm8gc3lzdGVtLm8gYmVuY2htYXJrLm8KK0NGTEFHUyArPSAtRF9HTlVfU09VUkNFIC1JLi4vbGliIC1EREVGQVVMVF9DT05GSUdfRklMRT1cIiQoY29uZmRpcikvY3B1ZnJlcS1iZW5jaC5jb25mXCIKKworaWZlcSAoJChzdHJpcCAkKFYpKSxmYWxzZSkKKwlDQz1ALi4vYnVpbGQvY2NkdiBnY2MKK2Vsc2UKKwlDQz1nY2MKK2VuZGlmCisKK2NwdWZyZXEtYmVuY2g6ICQoT0JKUykKKwkkKENDKSAtbyAkQCAkKENGTEFHUykgJChPQkpTKSAkKExJQlMpCisKK2FsbDogY3B1ZnJlcS1iZW5jaAorCitpbnN0YWxsOgorCW1rZGlyIC1wICQoREVTVERJUikvJChzYmluZGlyKQorCW1rZGlyIC1wICQoREVTVERJUikvJChiaW5kaXIpCisJbWtkaXIgLXAgJChERVNURElSKS8kKGRvY2RpcikKKwlta2RpciAtcCAkKERFU1RESVIpLyQoY29uZmRpcikKKwlpbnN0YWxsIC1tIDc1NSBjcHVmcmVxLWJlbmNoICQoREVTVERJUikvJChzYmluZGlyKS9jcHVmcmVxLWJlbmNoCisJaW5zdGFsbCAtbSA3NTUgY3B1ZnJlcS1iZW5jaF9wbG90LnNoICQoREVTVERJUikvJChiaW5kaXIpL2NwdWZyZXEtYmVuY2hfcGxvdC5zaAorCWluc3RhbGwgLW0gNjQ0IFJFQURNRS1CRU5DSCAkKERFU1RESVIpLyQoZG9jZGlyKS9SRUFETUUtQkVOQ0gKKwlpbnN0YWxsIC1tIDc1NSBjcHVmcmVxLWJlbmNoX3NjcmlwdC5zaCAkKERFU1RESVIpLyQoZG9jZGlyKS9jcHVmcmVxLWJlbmNoX3NjcmlwdC5zaAorCWluc3RhbGwgLW0gNjQ0IGV4YW1wbGUuY2ZnICQoREVTVERJUikvJChjb25mZGlyKS9jcHVmcmVxLWJlbmNoLmNvbmYKKworY2xlYW46CisJcm0gLWYgKi5vCisJcm0gLWYgY3B1ZnJlcS1iZW5jaApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvUkVBRE1FLUJFTkNIIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvUkVBRE1FLUJFTkNICm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOTNlYzcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9SRUFETUUtQkVOQ0gKQEAgLTAsMCArMSwxMjQgQEAKK1RoaXMgaXMgY3B1ZnJlcS1iZW5jaCwgYSBtaWNyb2JlbmNobWFyayBmb3IgdGhlIGNwdWZyZXEgZnJhbWV3b3JrLgorCitQdXJwb3NlCis9PT09PT09CisKK1doYXQgaXMgdGhpcyBiZW5jaG1hcmsgZm9yOgorICAtIElkZW50aWZ5IHdvcnN0IGNhc2UgcGVyZm9ybWFuY2UgbG9zcyB3aGVuIGRvaW5nIGR5bmFtaWMgZnJlcXVlbmN5CisgICAgc2NhbGluZyB1c2luZyBMaW51eCBrZXJuZWwgZ292ZXJub3JzCisgIC0gSWRlbnRpZnkgYXZlcmFnZSByZWFjdGlvbiB0aW1lIG9mIGEgZ292ZXJub3IgdG8gQ1BVIGxvYWQgY2hhbmdlcworICAtIChTdHJlc3MpIFRlc3Rpbmcgd2hldGhlciBhIGNwdWZyZXEgbG93IGxldmVsIGRyaXZlciBvciBnb3Zlcm5vciB3b3JrcworICAgIGFzIGV4cGVjdGVkCisgIC0gSWRlbnRpZnkgY3B1ZnJlcSByZWxhdGVkIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGJldHdlZW4ga2VybmVscworICAtIFBvc3NpYmx5IFJlYWwgdGltZSBwcmlvcml0eSB0ZXN0aW5nPyAtPiB3aGF0IGhhcHBlbnMgaWYgdGhlcmUgYXJlCisgICAgcHJvY2Vzc2VzIHdpdGggYSBoaWdoZXIgcHJpbyB0aGFuIHRoZSBnb3Zlcm5vcidzIGtlcm5lbCB0aHJlYWQKKyAgLSAuLi4KKworV2hhdCB0aGlzIGJlbmNobWFyayBkb2VzICpub3QqIGNvdmVyOgorICAtIFBvd2VyIHNhdmluZyByZWxhdGVkIHJlZ3Jlc3Npb25zIChJbiBmYWN0IGFzIGJldHRlciB0aGUgcGVyZm9ybWFuY2UKKyAgICB0aHJvdWdocHV0IGlzLCB0aGUgd29yc2UgdGhlIHBvd2VyIHNhdmluZ3Mgd2lsbCBiZSwgYnV0IHRoZSBmaXJzdCBzaG91bGQKKyAgICBtb3N0bHkgY291bnQgbW9yZS4uLikKKyAgLSBSZWFsIHdvcmxkICh3b3JrbG9hZHMpCisKKworRGVzY3JpcHRpb24KKz09PT09PT09PT09CisKK2NwdWZyZXEtYmVuY2ggaGVscHMgdG8gdGVzdCB0aGUgY29uZGl0aW9uIG9mIGEgZ2l2ZW4gY3B1ZnJlcSBnb3Zlcm5vci4KK0ZvciB0aGF0IHB1cnBvc2UsIGl0IGNvbXBhcmVzIHRoZSBwZXJmb3JtYW5jZSBnb3Zlcm5vciB0byBhIGNvbmZpZ3VyZWQKK3Bvd2Vyc2F2ZSBtb2R1bGUuCisKKworSG93IGl0IHdvcmtzCis9PT09PT09PT09PT0KK1lvdSBjYW4gc3BlY2lmeSBsb2FkICgxMDAlIENQVSBsb2FkKSBhbmQgc2xlZXAgKDAlIENQVSBsb2FkKSB0aW1lcyBpbiB1cyB3aGljaAord2lsbCBiZSBydW4gWCB0aW1lIGluIGEgcm93IChjeWNsZXMpOgorCisgICAgICAgICBzbGVlcD0yNTAwMAorICAgICAgICAgbG9hZD0yNTAwMAorICAgICAgICAgY3ljbGVzPTIwCisKK1RoaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgY3JlYXRlIDI1bXMgbG9hZC9zbGVlcCB0dXJucywKK3JlcGVhdGVkIDIwIHRpbWVzLgorCitBZGRpbmcgdGhpczoKKyAgICAgICAgIHNsZWVwX3N0ZXA9MjUwMDAKKyAgICAgICAgIGxvYWRfc3RlcD0yNTAwMAorICAgICAgICAgcm91bmRzPTUKK1dpbGwgaW5jcmVhc2UgbG9hZCBhbmQgc2xlZXAgdGltZSBieSAyNW1zIDUgdGltZXMuCitUb2dldGhlciB5b3UgZ2V0IGZvbGxvd2luZyB0ZXN0OgorMjVtcyAgbG9hZC9zbGVlcCB0aW1lIHJlcGVhdGVkIDIwIHRpbWVzIChjeWNsZXMpLgorNTBtcyAgbG9hZC9zbGVlcCB0aW1lIHJlcGVhdGVkIDIwIHRpbWVzIChjeWNsZXMpLgorLi4KKzEwMG1zIGxvYWQvc2xlZXAgdGltZSByZXBlYXRlZCAyMCB0aW1lcyAoY3ljbGVzKS4KKworRmlyc3QgaXQgaXMgY2FsaWJyYXRlZCBob3cgbG9uZyBhIHNwZWNpZmljIENQVSBpbnRlbnNpdmUgY2FsY3VsYXRpb24KK3Rha2VzIG9uIHRoaXMgbWFjaGluZSBhbmQgbmVlZHMgdG8gYmUgcnVuIGluIGEgbG9vcCB1c2luZyB0aGUgcGVyZm9ybWFuY2UKK2dvdmVybm9yLgorVGhlbiB0aGUgYWJvdmUgdGVzdCBydW5zIGFyZSBwcm9jZXNzZWQgdXNpbmcgdGhlIHBlcmZvcm1hbmNlIGdvdmVybm9yCithbmQgdGhlIGdvdmVybm9yIHRvIHRlc3QuIFRoZSB0aW1lIHRoZSBjYWxjdWxhdGlvbiByZWFsbHkgbmVlZGVkCit3aXRoIHRoZSBkeW5hbWljIGZyZXEgc2NhbGluZyBnb3Zlcm5vciBpcyBjb21wYXJlZCB3aXRoIHRoZSB0aW1lIG5lZWRlZAorb24gZnVsbCBwZXJmb3JtYW5jZSBhbmQgeW91IGdldCB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBsb3NzLgorCisKK0V4YW1wbGUgb2YgZXhwZWN0ZWQgcmVzdWx0cyB3aXRoIG9uZGVtYW5kIGdvdmVybm9yOgorCitUaGlzIHNob3dzIGV4cGVjdGVkIHJlc3VsdHMgb2YgdGhlIGZpcnN0IHR3byB0ZXN0IHJ1biByb3VuZHMgZnJvbQorYWJvdmUgY29uZmlnLCB5b3UgdGhlcmUgaGF2ZToKKworMTAwJSBDUFUgbG9hZCAobG9hZCkgfCAwICUgQ1BVIGxvYWQgKHNsZWVwKSAgfCByb3VuZAorICAgMjUgbXMgICAgICAgICAgICAgfCAgICAyNSBtcyAgICAgICAgICAgICAgfCAgIDEKKyAgIDUwIG1zICAgICAgICAgICAgIHwgICAgNTAgbXMgICAgICAgICAgICAgIHwgICAyCisKK0ZvciBleGFtcGxlIGlmIG9uZGVtYW5kIGdvdmVybm9yIGlzIGNvbmZpZ3VyZWQgdG8gaGF2ZSBhIDUwbXMKK3NhbXBsaW5nIHJhdGUgeW91IGdldDoKKworSW4gcm91bmQgMSwgb25kZW1hbmQgc2hvdWxkIGhhdmUgcmF0aGVyIHN0YXRpYyA1MCUgbG9hZCBhbmQgcHJvYmFibHkKK3dvbid0IGV2ZXIgc3dpdGNoIHVwIChhcyBsb25nIGFzIHVwX3RocmVzaG9sZCBpcyBhYm92ZSkuCisKK0luIHJvdW5kIDIsIGlmIHRoZSBvbmRlbWFuZCBzYW1wbGluZyB0aW1lcyBleGFjdGx5IG1hdGNoIHRoZSBsb2FkL3NsZWVwCit0cmlnZ2VyIG9mIHRoZSBjcHVmcmVxLWJlbmNoLCB5b3Ugd2lsbCBzZWUgbm8gcGVyZm9ybWFuY2UgbG9zcyAoY29tcGFyZSB3aXRoCitiZWxvdyBwb3NzaWJsZSBvbmRlbWFuZCBzYW1wbGUga2ljayBpbnMgKDEpKToKKworQnV0IGlmIG9uZGVtYW5kIGFsd2F5cyBraWNrcyBpbiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsb2FkIHNsZWVwIGN5Y2xlcywgaXQKK3dpbGwgYWx3YXlzIHNlZSA1MCUgbG9hZHMgYW5kIHlvdSBnZXQgd29yc3QgcGVyZm9ybWFuY2UgaW1wYWN0IG5ldmVyCitzd2l0Y2hpbmcgdXAgKGNvbXBhcmUgd2l0aCBiZWxvdyBwb3NzaWJsZSBvbmRlbWFuZCBzYW1wbGUga2ljayBpbnMgKDIpKTo6CisKKyAgICAgIDUwICAgICA1MCAgIDUwICAgNTBtcyAtPnRpbWUKK2xvYWQgLS0tLS18ICAgICB8LS0tLS18ICAgICB8LS0tLS18ICAgICB8LS0tLS18CisgICAgICAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorc2xlZXAgICAgIHwtLS0tLXwgICAgIHwtLS0tLXwgICAgIHwtLS0tLXwgICAgIHwtLS0tCisgICAgfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0gIG9uZGVtYW5kIHNhbXBsaW5nICgxKQorICAgICAgICAgMTAwICAgIDAgICAgMTAwICAgIDAgICAgMTAwICAgIDAgICAgMTAwICAgICBsb2FkIHNlZW4gYnkgb25kZW1hbmQoJSkKKyAgICAgICB8LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0gICBvbmRlbWFuZCBzYW1wbGluZyAoMikKKyAgICAgIDUwICAgICA1MCAgICA1MCAgICA1MCAgICA1MCAgICA1MCAgICA1MCAgICAgICAgbG9hZCBzZWVuIGJ5IG9uZGVtYW5kKCUpCisKK1lvdSBjYW4gZWFzaWx5IHRlc3QgYWxsIGtpbmQgb2YgbG9hZC9zbGVlcCB0aW1lcyBhbmQgY2hlY2sgd2hldGhlciB5b3VyCitnb3Zlcm5vciBpbiBhdmVyYWdlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQuCisKKworVG9EbworPT09PQorCitQcm92aWRlIGEgZ251cGxvdCB1dGlsaXR5IHNjcmlwdCBmb3IgZWFzeSBnZW5lcmF0aW9uIG9mIHBsb3RzIHRvIHByZXNlbnQKK3RoZSBvdXRjb21lIG5pY2VseS4KKworCitjcHVmcmVxLWJlbmNoIENvbW1hbmQgVXNhZ2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorLWwsIC0tbG9hZD08bG9uZyBpbnQ+ICAgICAgICAgICBpbml0aWFsIGxvYWQgdGltZSBpbiB1cworLXMsIC0tc2xlZXA9PGxvbmcgaW50PiAgICAgICAgICBpbml0aWFsIHNsZWVwIHRpbWUgaW4gdXMKKy14LCAtLWxvYWQtc3RlcD08bG9uZyBpbnQ+ICAgICAgdGltZSB0byBiZSBhZGRlZCB0byBsb2FkIHRpbWUsIGluIHVzCisteSwgLS1zbGVlcC1zdGVwPTxsb25nIGludD4gICAgIHRpbWUgdG8gYmUgYWRkZWQgdG8gc2xlZXAgdGltZSwgaW4gdXMKKy1jLCAtLWNwdT08dW5zaWduZWQgaW50PiAgICAgICAgQ1BVIE51bWJlciB0byB1c2UsIHN0YXJ0aW5nIGF0IDAKKy1wLCAtLXByaW89PHByaW9yaXR5PiAgICAgICAgICAgc2NoZWR1bGVyIHByaW9yaXR5LCBISUdILCBMT1cgb3IgREVGQVVMVAorLWcsIC0tZ292ZXJub3I9PGdvdmVybm9yPiAgICAgICBjcHVmcmVxIGdvdmVybm9yIHRvIHRlc3QKKy1uLCAtLWN5Y2xlcz08aW50PiAgICAgICAgICAgICAgbG9hZC9zbGVlcCBjeWNsZXMgdG8gZ2V0IGFuIGF2YXJhZ2UgdmFsdWUgdG8gY29tcGFyZQorLXIsIC0tcm91bmRzPGludD4gICAgICAgICAgICAgICBsb2FkL3NsZWVwIHJvdW5kcworLWYsIC0tZmlsZT08Y29uZmlnZmlsZT4gICAgICAgICBjb25maWcgZmlsZSB0byB1c2UKKy1vLCAtLW91dHB1dD08ZGlyPiAgICAgICAgICAgICAgb3V0cHV0IGRpciwgbXVzdCBleGlzdAorLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgICAgICB2ZXJib3NlIG91dHB1dCBvbi9vZmYKKworRHVlIHRvIHRoZSBoaWdoIHByaW9yaXR5LCB0aGUgYXBwbGljYXRpb24gbWF5IG5vdCBiZSByZXNwb25zaWJsZSBmb3Igc29tZSB0aW1lLgorQWZ0ZXIgdGhlIGJlbmNobWFyaywgdGhlIGxvZ2ZpbGUgaXMgc2F2ZWQgaW4gT1VUUFVURElSL2JlbmNobWFya19USU1FU1RBTVAubG9nCisKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvYmVuY2htYXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzODYzMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5jCkBAIC0wLDAgKzEsMTg0IEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUgImJlbmNobWFyay5oIgorCisvKiBQcmludCBvdXQgcHJvZ3Jlc3MgaWYgd2UgbG9nIGludG8gYSBmaWxlICovCisjZGVmaW5lIHNob3dfcHJvZ3Jlc3ModG90YWxfdGltZSwgcHJvZ3Jlc3NfdGltZSkJXAoraWYgKGNvbmZpZy0+b3V0cHV0ICE9IHN0ZG91dCkgewkJCQlcCisJZnByaW50ZihzdGRvdXQsICJQcm9ncmVzczogJTAybHUgJSVcciIsCQlcCisJCShwcm9ncmVzc190aW1lICogMTAwKSAvIHRvdGFsX3RpbWUpOwlcCisJZmZsdXNoKHN0ZG91dCk7CQkJCQlcCit9CisKKy8qKgorICogY29tcHV0ZSBob3cgbWFueSByb3VuZHMgb2YgY2FsY3VsYXRpb24gd2Ugc2hvdWxkIGRvCisgKiB0byBnZXQgdGhlIGdpdmVuIGxvYWQgdGltZQorICoKKyAqIEBwYXJhbSBsb2FkIGFpbWVkIGxvYWQgdGltZSBpbiC1cworICoKKyAqIEByZXR2YWwgcm91bmRzIG9mIGNhbGN1bGF0aW9uCisgKiovCisKK3Vuc2lnbmVkIGludCBjYWxjdWxhdGVfdGltZXNwYWNlKGxvbmcgbG9hZCwgc3RydWN0IGNvbmZpZyAqY29uZmlnKQoreworCWludCBpOworCWxvbmcgbG9uZyBub3csIHRoZW47CisJdW5zaWduZWQgaW50IGVzdGltYXRlZCA9IEdBVUdFQ09VTlQ7CisJdW5zaWduZWQgaW50IHJvdW5kcyA9IDA7CisJdW5zaWduZWQgaW50IHRpbWVkID0gMDsKKworCWlmIChjb25maWctPnZlcmJvc2UpCisJCXByaW50ZigiY2FsaWJyYXRpbmcgbG9hZCBvZiAlbGl1cywgcGxlYXNlIHdhaXQuLi5cbiIsIGxvYWQpOworCisJLyogZ2V0IHRoZSBpbml0aWFsIGNhbGN1bGF0aW9uIHRpbWUgZm9yIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHJvdW5kcyAqLworCW5vdyA9IGdldF90aW1lKCk7CisJUk9VTkRTKGVzdGltYXRlZCk7CisJdGhlbiA9IGdldF90aW1lKCk7CisKKwl0aW1lZCA9ICh1bnNpZ25lZCBpbnQpKHRoZW4gLSBub3cpOworCisJLyogYXBwcm94aW1hdGlvbiBvZiB0aGUgd2FudGVkIGxvYWQgdGltZSBieSBjb21wYXJpbmcgd2l0aCB0aGUKKwkgKiBpbml0aWFsIGNhbGN1bGF0aW9uIHRpbWUgKi8gCisJZm9yIChpPSAwOyBpIDwgNDsgaSsrKQorCXsKKwkJcm91bmRzID0gKHVuc2lnbmVkIGludCkobG9hZCAqIGVzdGltYXRlZCAvIHRpbWVkKTsKKwkJZHByaW50ZigiY2FsaWJyYXRpbmcgd2l0aCAldSByb3VuZHNcbiIsIHJvdW5kcyk7CisJCW5vdyA9IGdldF90aW1lKCk7CisJCVJPVU5EUyhyb3VuZHMpOworCQl0aGVuID0gZ2V0X3RpbWUoKTsKKworCQl0aW1lZCA9ICh1bnNpZ25lZCBpbnQpKHRoZW4gLSBub3cpOworCQllc3RpbWF0ZWQgPSByb3VuZHM7CisJfQorCWlmIChjb25maWctPnZlcmJvc2UpCisJCXByaW50ZigiY2FsaWJyYXRpb24gZG9uZVxuIik7CisKKwlyZXR1cm4gZXN0aW1hdGVkOworfQorCisvKioKKyAqIGJlbmNobWFyaworICogZ2VuZXJhdGVzIGEgc3BlY2lmaWMgc2xlZXAgYW4gbG9hZCB0aW1lIHdpdGggdGhlIHBlcmZvcm1hbmNlCisgKiBnb3Zlcm5vciBhbmQgY29tcGFyZXMgdGhlIHVzZWQgdGltZSBmb3Igc2FtZSBjYWxjdWxhdGlvbnMgZG9uZQorICogd2l0aCB0aGUgY29uZmlndXJlZCBwb3dlcnNhdmUgZ292ZXJub3IKKyAqCisgKiBAcGFyYW0gY29uZmlnIGNvbmZpZyB2YWx1ZXMgZm9yIHRoZSBiZW5jaG1hcmsKKyAqCisgKiovCisKK3ZvaWQgc3RhcnRfYmVuY2htYXJrKHN0cnVjdCBjb25maWcgKmNvbmZpZykKK3sKKwl1bnNpZ25lZCBpbnQgX3JvdW5kLCBjeWNsZTsKKwlsb25nIGxvbmcgbm93LCB0aGVuOworCWxvbmcgc2xlZXBfdGltZSA9IDAsIGxvYWRfdGltZSA9IDA7CisJbG9uZyBwZXJmb3JtYW5jZV90aW1lID0gMCwgcG93ZXJzYXZlX3RpbWUgPSAwOworCXVuc2lnbmVkIGludCBjYWxjdWxhdGlvbnM7CisJdW5zaWduZWQgbG9uZyB0b3RhbF90aW1lID0gMCwgcHJvZ3Jlc3NfdGltZSA9IDA7CisKKwlzbGVlcF90aW1lID0gY29uZmlnLT5zbGVlcDsKKwlsb2FkX3RpbWUgPSBjb25maWctPmxvYWQ7CisKKwkvKiBGb3IgdGhlIHByb2dyZXNzIGJhciAqLworCWZvciAoX3JvdW5kPTE7IF9yb3VuZCA8PSBjb25maWctPnJvdW5kczsgX3JvdW5kKyspCisJCXRvdGFsX3RpbWUgKz0gX3JvdW5kICogKGNvbmZpZy0+c2xlZXAgKyBjb25maWctPmxvYWQpOworCXRvdGFsX3RpbWUgKj0gMjsgLyogcG93ZXJzYXZlIGFuZCBwZXJmb3JtYW5jZSBjeWNsZXMgKi8KKworCWZvciAoX3JvdW5kPTA7IF9yb3VuZCA8IGNvbmZpZy0+cm91bmRzOyBfcm91bmQrKykgeworCQlwZXJmb3JtYW5jZV90aW1lID0gMExMOworCQlwb3dlcnNhdmVfdGltZSA9IDBMTDsKKworCQlzaG93X3Byb2dyZXNzKHRvdGFsX3RpbWUsIHByb2dyZXNzX3RpbWUpOworCisJCS8qIHNldCB0aGUgY3B1ZnJlcSBnb3Zlcm5vciB0byAicGVyZm9ybWFuY2UiIHdoaWNoIGRpc2FibGVzCisJCSAqIFAtU3RhdGUgc3dpdGNoaW5nLiAqLworCQlpZiAoc2V0X2NwdWZyZXFfZ292ZXJub3IoInBlcmZvcm1hbmNlIiwgY29uZmlnLT5jcHUpICE9IDApCisJCQlyZXR1cm47CisKKwkJLyogY2FsaWJyYXRlIHRoZSBjYWxjdWxhdGlvbiB0aW1lLiB0aGUgcmVzdWx0aW5nIGNhbGN1bGF0aW9uCisJCSAqIF9yb3VuZHMgc2hvdWxkIHByb2R1Y2UgYSBsb2FkIHdoaWNoIG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQKKwkJICogbG9hZCB0aW1lICovCisJCWNhbGN1bGF0aW9ucyA9IGNhbGN1bGF0ZV90aW1lc3BhY2UobG9hZF90aW1lLCBjb25maWcpOworCisJCWlmIChjb25maWctPnZlcmJvc2UpCisJCQlwcmludGYoIl9yb3VuZCAlaTogZG9pbmcgJXUgY3ljbGVzIHdpdGggJXUgY2FsY3VsYXRpb25zIgorCQkJICAgICAgICIgZm9yICVsaXVzXG4iLCBfcm91bmQgKyAxLCBjb25maWctPmN5Y2xlcywKKwkJCSAgICAgICBjYWxjdWxhdGlvbnMsIGxvYWRfdGltZSk7CisKKwkJZnByaW50Zihjb25maWctPm91dHB1dCwgIiV1ICVsaSAlbGkgIiwKKwkJCV9yb3VuZCwgbG9hZF90aW1lLCBzbGVlcF90aW1lKTsKKworCQlpZiAoY29uZmlnLT52ZXJib3NlKSB7CisJCQlwcmludGYoImF2YXJhZ2U6ICVsaXVzLCBycHM6JWxpXG4iLCBsb2FkX3RpbWUgLyBjYWxjdWxhdGlvbnMsIDEwMDAwMDAgKiBjYWxjdWxhdGlvbnMgLyBsb2FkX3RpbWUpOworCQl9CisKKwkJLyogZG8gc29tZSBzbGVlcC9sb2FkIGN5Y2xlcyB3aXRoIHRoZSBwZXJmb3JtYW5jZSBnb3Zlcm5vciAqLworCQlmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb25maWctPmN5Y2xlczsgY3ljbGUrKykgeworCQkJbm93ID0gZ2V0X3RpbWUoKTsKKwkJCXVzbGVlcChzbGVlcF90aW1lKTsKKwkJCVJPVU5EUyhjYWxjdWxhdGlvbnMpOworCQkJdGhlbiA9IGdldF90aW1lKCk7CisJCQlwZXJmb3JtYW5jZV90aW1lICs9IHRoZW4gLSBub3cgLSBzbGVlcF90aW1lOworCQkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCQlwcmludGYoInBlcmZvcm1hbmNlIGN5Y2xlIHRvb2sgJWxpdXMsIHNsZWVwOiAlbGl1cywgbG9hZDogJWxpdXMsIHJvdW5kczogJXVcbiIsCisJCQkJCShsb25nKSh0aGVuIC0gbm93KSwgc2xlZXBfdGltZSwgbG9hZF90aW1lLCBjYWxjdWxhdGlvbnMpOworCQl9CisJCWZwcmludGYoY29uZmlnLT5vdXRwdXQsICIlbGkgIiwgcGVyZm9ybWFuY2VfdGltZSAvIGNvbmZpZy0+Y3ljbGVzKTsKKworCQlwcm9ncmVzc190aW1lICs9IHNsZWVwX3RpbWUgKyBsb2FkX3RpbWU7CisJCXNob3dfcHJvZ3Jlc3ModG90YWxfdGltZSwgcHJvZ3Jlc3NfdGltZSk7CisKKwkJLyogc2V0IHRoZSBwb3dlcnNhdmUgZ292ZXJub3Igd2hpY2ggYWN0aXZhdGVzIFAtU3RhdGUgc3dpdGNoaW5nCisJCSAqIGFnYWluICovCisJCWlmIChzZXRfY3B1ZnJlcV9nb3Zlcm5vcihjb25maWctPmdvdmVybm9yLCBjb25maWctPmNwdSkgIT0gMCkKKwkJCXJldHVybjsKKworCQkvKiBhZ2FpbiwgZG8gc29tZSBzbGVlcC9sb2FkIGN5Y2xlcyB3aXRoIHRoZSBwb3dlcnNhdmUgZ292ZXJub3IgKi8KKwkJZm9yIChjeWNsZSA9IDA7IGN5Y2xlIDwgY29uZmlnLT5jeWNsZXM7IGN5Y2xlKyspIHsKKwkJCW5vdyA9IGdldF90aW1lKCk7CisJCQl1c2xlZXAoc2xlZXBfdGltZSk7CisJCQlST1VORFMoY2FsY3VsYXRpb25zKTsKKwkJCXRoZW4gPSBnZXRfdGltZSgpOworCQkJcG93ZXJzYXZlX3RpbWUgKz0gdGhlbiAtIG5vdyAtIHNsZWVwX3RpbWU7CisJCQlpZiAoY29uZmlnLT52ZXJib3NlKQorCQkJCXByaW50ZigicG93ZXJzYXZlIGN5Y2xlIHRvb2sgJWxpdXMsIHNsZWVwOiAlbGl1cywgbG9hZDogJWxpdXMsIHJvdW5kczogJXVcbiIsCisJCQkJCShsb25nKSh0aGVuIC0gbm93KSwgc2xlZXBfdGltZSwgbG9hZF90aW1lLCBjYWxjdWxhdGlvbnMpOworCQl9CisKKwkJcHJvZ3Jlc3NfdGltZSArPSBzbGVlcF90aW1lICsgbG9hZF90aW1lOworCisJCS8qIGNvbXBhcmUgdGhlIGF2YXJhZ2Ugc2xlZXAvbG9hZCBjeWNsZXMgICovCisJCWZwcmludGYoY29uZmlnLT5vdXRwdXQsICIlbGkgIiwgcG93ZXJzYXZlX3RpbWUgLyBjb25maWctPmN5Y2xlcyk7CisJCWZwcmludGYoY29uZmlnLT5vdXRwdXQsICIlLjNmXG4iLCBwZXJmb3JtYW5jZV90aW1lICogMTAwLjAgLyBwb3dlcnNhdmVfdGltZSk7CisJCWZmbHVzaChjb25maWctPm91dHB1dCk7CisKKwkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCXByaW50ZigicGVyZm9ybWFuY2UgaXMgYXQgJS4yZiUlXG4iLCBwZXJmb3JtYW5jZV90aW1lICogMTAwLjAgLyBwb3dlcnNhdmVfdGltZSk7CisKKwkJc2xlZXBfdGltZSArPSBjb25maWctPnNsZWVwX3N0ZXA7CisJCWxvYWRfdGltZSArPSBjb25maWctPmxvYWRfc3RlcDsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvYmVuY2htYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5MWY5MQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogbG9hZCBsb29wLCB0aGlzIHNjaG91bGQgdGFrZSBhYm91dCAxIHRvIDJtcyB0byBjb21wbGV0ZSAqLworI2RlZmluZSBST1VORFMoeCkge3Vuc2lnbmVkIGludCByY250OwkJCSAgICAgICBcCisJCWZvciAocmNudCA9IDA7IHJjbnQ8IHgqMTAwMDsgcmNudCsrKSB7IFwKKwkJCSh2b2lkKSgoKGludCkocG93KHJjbnQsIHJjbnQpICogc3FydChyY250KjcyMzA5NzApKSBeIDcyMzA3MTYpIF4gKGludClhdGFuMihyY250LCByY250KSk7IFwKKwkJfX0JCQkJCQkJXAorCisKK3ZvaWQgc3RhcnRfYmVuY2htYXJrKHN0cnVjdCBjb25maWcgKmNvbmZpZyk7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jb25maWcuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OTBmMWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jb25maWcuaApAQCAtMCwwICsxLDM2IEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qIGluaXRpYWwgbG9vcCBjb3VudCBmb3IgdGhlIGxvYWQgY2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgR0FVR0VDT1VOVAkxNTAwCisKKy8qIGRlZmF1bHQgc2NoZWR1bGluZyBwb2xpY3kgU0NIRURfT1RIRVIgKi8KKyNkZWZpbmUgU0NIRURVTEVSCVNDSEVEX09USEVSCisKKyNkZWZpbmUgUFJJT1JJVFlfREVGQVVMVCAwCisjZGVmaW5lIFBSSU9SSVRZX0hJR0gJIHNjaGVkX2dldF9wcmlvcml0eV9tYXgoU0NIRURVTEVSKQorI2RlZmluZSBQUklPUklUWV9MT1cJIHNjaGVkX2dldF9wcmlvcml0eV9taW4oU0NIRURVTEVSKQorCisvKiBlbmFibGUgZnVydGhlciBkZWJ1ZyBtZXNzYWdlcyAqLworI2lmZGVmIERFQlVHCisjZGVmaW5lIGRwcmludGYgcHJpbnRmCisjZWxzZQorI2RlZmluZSBkcHJpbnRmKCAuLi4gKSB3aGlsZSgwKSB7IH0KKyNlbmRpZgorCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jcHVmcmVxLWJlbmNoX3Bsb3Quc2ggYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jcHVmcmVxLWJlbmNoX3Bsb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwMDIxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NwdWZyZXEtYmVuY2hfcGxvdC5zaApAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL2Jhc2gKKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisKKyMgQXV0aG9yL0NvcHlyaWdodChjKTogMjAwOSwgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisKKyMgSGVscGVyIHNjcmlwdCB0byBlYXNpbHkgY3JlYXRlIG5pY2UgcGxvdHMgb2YgeW91ciBjcHVmcmVxLWJlbmNoIHJlc3VsdHMKKworZGlyPWBta3RlbXAgLWRgCitvdXRwdXRfZmlsZT0iY3B1ZnJlcS1iZW5jaC5wbmciCitnbG9iYWxfdGl0bGU9ImNwdWZyZXEtYmVuY2ggcGxvdCIKK3BpY3R1cmVfdHlwZT0ianBlZyIKK2ZpbGVbMF09IiIKKworZnVuY3Rpb24gdXNhZ2UoKQoreworICAgIGVjaG8gImNwdWZyZXEtYmVuY2hfcGxvdC5zaCBbT1BUSU9OU10gbG9nZmlsZSBbbWVhc3VyZV90aXRsZV0gW2xvZ2ZpbGUgW21lYXN1cmVfdGl0bGVdXSAuLi5dIgorICAgIGVjaG8KKyAgICBlY2hvICJPcHRpb25zIgorICAgIGVjaG8gIiAgIC1vIG91dHB1dF9maWxlIgorICAgIGVjaG8gIiAgIC10IGdsb2JhbF90aXRsZSIKKyAgICBlY2hvICIgICAtcCBwaWN0dXJlX3R5cGUgW2pwZWd8Z2lmfHBuZ3xwb3N0c2NyaXB0fC4uLl0iCisgICAgZXhpdCAxCit9CisKK2lmIFsgJCMgLWVxIDAgXTt0aGVuCisJZWNobyAiTm8gYmVuY2htYXJrIHJlc3VsdHMgZmlsZSBwcm92aWRlZCIKKwllY2hvCisJdXNhZ2UKK2ZpCisKK3doaWxlIGdldG9wdHMgbzp0OnA6IG5hbWUgOyBkbworICAgIGNhc2UgJG5hbWUgaW4KKwlvKQorCSAgICBvdXRwdXRfZmlsZT0iJE9QVEFSRyIuJHBpY3R1cmVfdHlwZQorCSAgICA7OworCXQpCisJICAgIGdsb2JhbF90aXRsZT0iJE9QVEFSRyIKKwkgICAgOzsKKwlwKQorCSAgICBwaWN0dXJlX3R5cGU9IiRPUFRBUkciCisJICAgIDs7CisgICAgICAgID8pCisJICAgIHVzYWdlCisJICAgIDs7CisgICAgZXNhYworZG9uZQorc2hpZnQgJCgoJE9QVElORCAtMSkpCisKK3Bsb3RzPTAKK3doaWxlIFsgIiQxIiBdO2RvCisgICAgaWYgWyAhIC1mICIkMSIgXTt0aGVuCisJZWNobyAiRmlsZSAkMSBkb2VzIG5vdCBleGlzdCIKKwl1c2FnZQorICAgIGZpCisgICAgZmlsZVskcGxvdHNdPSIkMSIKKyAgICB0aXRsZVskcGxvdHNdPSIkMiIKKyAgICAjIGVjaG8gIkZpbGU6ICR7ZmlsZVskcGxvdHNdfSAtICR7dGl0bGVbcGxvdHNdfSIKKyAgICBzaGlmdDtzaGlmdAorICAgIHBsb3RzPSQoKHBsb3RzICsgMSkpCitkb25lCisKK2VjaG8gInNldCB0ZXJtaW5hbCAkcGljdHVyZV90eXBlIgk+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorZWNobyAic2V0IG91dHB1dCBcIiRvdXRwdXRfZmlsZVwiIgk+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorZWNobyAic2V0IHRpdGxlIFwiJGdsb2JhbF90aXRsZVwiIgk+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorZWNobyAic2V0IHhsYWJlbCBcInNsZWVwL2xvYWQgdGltZVwiIgk+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorZWNobyAic2V0IHlsYWJlbCBcIlBlcmZvcm1hbmNlICglKVwiIgk+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorCitmb3IoKHBsb3Q9MDtwbG90PCRwbG90cztwbG90KyspKTtkbworCisgICAgIyBTYW5pdHkgY2hlY2sKKyAgICAjIyMjIyMgSSBhbSB0byBkdW1wIHRvIGdldCB0aGlzIHJlZGlyZWN0ZWQgdG8gc3RkZXJyL3N0ZG91dCBpbiBvbmUgYXdrIGNhbGwuLi4gIyMjIyMKKyAgICBjYXQgJHtmaWxlWyRwbG90XX0gfGdyZXAgLXYgIl4jIiB8YXdrICd7aWYgKCQyICE9ICQzKSBwcmludGYoIkVycm9yIGluIG1lYXN1cmUgJWQ6TG9hZCB0aW1lICVzIGRvZXMgbm90IGVxdWFsIHNsZWVwIHRpbWUgJXMsIHBsb3Qgd2lsbCBub3QgYmUgY29ycmVjdFxuIiwgJDEsICQyLCAkMyk7IEVSUj0xfScKKyAgICAjIyMjIyMgSSBhbSB0byBkdW1wIHRvIGdldCB0aGlzIHJlZGlyZWN0ZWQgaW4gb25lIGF3ayBjYWxsLi4uICMjIyMjCisKKyAgICAjIFBhcnNlIG91dCBsb2FkIHRpbWUgKHdoaWNoIG11c3QgYmUgZXF1YWwgdG8gc2xlZXAgdGltZSBmb3IgYSBwbG90KSwgZGl2aWRlIGl0IGJ5IDEwMDAKKyAgICAjIHRvIGdldCBtcyBhbmQgcGFyc2Ugb3V0IHRoZSBwZXJmb3JtYW5jZSBpbiBwZXJjZW50YWdlIGFuZCB3cml0ZSBpdCB0byBhIHRlbXAgZmlsZSBmb3IgcGxvdHRpbmcKKyAgICBjYXQgJHtmaWxlWyRwbG90XX0gfGdyZXAgLXYgIl4jIiB8YXdrICd7cHJpbnRmICIlbHUgJS4xZlxuIiwkMi8xMDAwLCAkNn0nID4kZGlyL2RhdGFfJHBsb3QKKworICAgIGlmIFsgJHBsb3QgLWVxIDAgXTt0aGVuCisJZWNobyAtbiAicGxvdCAiID4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCisgICAgZmkKKyAgICBlY2hvIC1uICJcIiRkaXIvZGF0YV8kcGxvdFwiIHRpdGxlIFwiJHt0aXRsZVskcGxvdF19XCIgd2l0aCBsaW5lcyIgPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKKyAgICBpZiBbICQoKCRwbG90ICsgMSkpIC1uZSAkcGxvdHMgXTt0aGVuCisJZWNobyAtbiAiLCAiID4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCisgICAgZmkKK2RvbmUKK2VjaG8gPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKKworZ251cGxvdCAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorcm0gLXIgJGRpcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NwdWZyZXEtYmVuY2hfc2NyaXB0LnNoIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY3B1ZnJlcS1iZW5jaF9zY3JpcHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyMGQyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NwdWZyZXEtYmVuY2hfc2NyaXB0LnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIS9iaW4vYmFzaAorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKworIyBBdXRob3IvQ29weXJpZ2h0KGMpOiAyMDA5LCBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKworIyBPbmRlbWFuZCB1cF90aHJlc2hvbGQgYW5kIHNhbXBsaW5nIHJhdGUgdGVzdCBzY3JpcHQgZm9yIGNwdWZyZXEtYmVuY2gKKyMgbWlyY29iZW5jaG1hcmsuCisjIE1vZGlmeSB0aGUgZ2VuZXJhbCB2YXJpYWJsZXMgYXQgdGhlIHRvcCBvciBleHRlbmQgb3IgY29weSBvdXQgcGFydHMKKyMgaWYgeW91IHdhbnQgdG8gdGVzdCBvdGhlciB0aGluZ3MKKyMKKworIyBEZWZhdWx0IHdpdGggbGF0ZXN0IGtlcm5lbHMgaXMgOTUsIGJlZm9yZSBtaWNybyBhY2NvdW50IHBhdGNoZXMKKyMgaXQgd2FzIDgwLCBjbXAuIHdpdGggZ2l0IGNvbW1pdCA4MDgwMDkxMzEwNDZiNjJhYzQzNGRiYzc5NgorVVBfVEhSRVNIT0xEPSI2MCA4MCA5NSIKKyMgRGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgYW5kIHRoZSBIVyBzYW1wbGluZyByYXRlIGNvdWxkIGJlIHJlc3RyaWN0ZWQKKyMgYW5kIGNhbm5vdCBiZSBzZXQgdGhhdCBsb3cuLi4KKyMgRS5nLiBiZWZvcmUgZ2l0IGNvbW1pdCBjZWY5NjE1YTg1M2ViYzQ5NzIwODRmNyBvbmUgY291bGQgb25seSBzZXQKKyMgbWluIHNhbXBsaW5nIHJhdGUgb2YgODAwMDAgaWYgQ09ORklHX0haPTI1MAorU0FNUExJTkdfUkFURT0iMjAwMDAgODAwMDAiCisKK2Z1bmN0aW9uIG1lYXN1cmUoKQoreworICAgIGxvY2FsIC1pIHVwX3RocmVzaG9sZF9zZXQKKyAgICBsb2NhbCAtaSBzYW1wbGluZ19yYXRlX3NldAorCisgICAgZm9yIHVwX3RocmVzaG9sZCBpbiAkVVBfVEhSRVNIT0xEO2RvCisJZm9yIHNhbXBsaW5nX3JhdGUgaW4gJFNBTVBMSU5HX1JBVEU7ZG8KKwkgICAgIyBTZXQgdmFsdWVzIGluIHN5c2ZzCisJICAgIGVjaG8gJHVwX3RocmVzaG9sZCA+L3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL29uZGVtYW5kL3VwX3RocmVzaG9sZAorCSAgICBlY2hvICRzYW1wbGluZ19yYXRlID4vc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvb25kZW1hbmQvc2FtcGxpbmdfcmF0ZQorCSAgICB1cF90aHJlc2hvbGRfc2V0PSQoY2F0IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9vbmRlbWFuZC91cF90aHJlc2hvbGQpCisJICAgIHNhbXBsaW5nX3JhdGVfc2V0PSQoY2F0IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9vbmRlbWFuZC9zYW1wbGluZ19yYXRlKQorCisJICAgICMgVmVyaWZ5IHNldCB2YWx1ZXMgaW4gc3lzZnMKKwkgICAgaWYgWyAke3VwX3RocmVzaG9sZF9zZXR9IC1lcSAke3VwX3RocmVzaG9sZH0gXTt0aGVuCisJCWVjaG8gInVwX3RocmVzaG9sZDogJHVwX3RocmVzaG9sZCwgc2V0IGluIHN5c2ZzOiAke3VwX3RocmVzaG9sZF9zZXR9IgorCSAgICBlbHNlCisJCWVjaG8gIldBUk5JTkc6IFRyaWVkIHRvIHNldCB1cF90aHJlc2hvbGQ6ICR1cF90aHJlc2hvbGQsIHNldCBpbiBzeXNmczogJHt1cF90aHJlc2hvbGRfc2V0fSIKKwkgICAgZmkKKwkgICAgaWYgWyAke3NhbXBsaW5nX3JhdGVfc2V0fSAtZXEgJHtzYW1wbGluZ19yYXRlfSBdO3RoZW4KKwkJZWNobyAic2FtcGxpbmdfcmF0ZTogJHNhbXBsaW5nX3JhdGUsIHNldCBpbiBzeXNmczogJHtzYW1wbGluZ19yYXRlX3NldH0iCisJICAgIGVsc2UKKwkJZWNobyAiV0FSTklORzogVHJpZWQgdG8gc2V0IHNhbXBsaW5nX3JhdGU6ICRzYW1wbGluZ19yYXRlLCBzZXQgaW4gc3lzZnM6ICR7c2FtcGxpbmdfcmF0ZV9zZXR9IgorCSAgICBmaQorCisJICAgICMgQmVuY2htYXJrCisJICAgIGNwdWZyZXEtYmVuY2ggLW8gL3Zhci9sb2cvY3B1ZnJlcS1iZW5jaC91cF90aHJlc2hvbGRfJHt1cF90aHJlc2hvbGR9X3NhbXBsaW5nX3JhdGVfJHtzYW1wbGluZ19yYXRlfQorCWRvbmUKKyAgICBkb25lCit9CisKK2Z1bmN0aW9uIGNyZWF0ZV9wbG90cygpCit7CisgICAgbG9jYWwgY29tbWFuZAorCisgICAgZm9yIHVwX3RocmVzaG9sZCBpbiAkVVBfVEhSRVNIT0xEO2RvCisJY29tbWFuZD0iY3B1ZnJlcS1iZW5jaF9wbG90LnNoIC1vIFwic2FtcGxpbmdfcmF0ZV8ke1NBTVBMSU5HX1JBVEV9X3VwX3RocmVzaG9sZF8ke3VwX3RocmVzaG9sZH1cIiAtdCBcIk9uZGVtYW5kIHNhbXBsaW5nX3JhdGU6ICR7U0FNUExJTkdfUkFURX0gY29tcGFyaXNvbiAtIFVwX3RocmVzaG9sZDogJHVwX3RocmVzaG9sZCAlXCIiCisJZm9yIHNhbXBsaW5nX3JhdGUgaW4gJFNBTVBMSU5HX1JBVEU7ZG8KKwkgICAgY29tbWFuZD0iJHtjb21tYW5kfSAvdmFyL2xvZy9jcHVmcmVxLWJlbmNoL3VwX3RocmVzaG9sZF8ke3VwX3RocmVzaG9sZH1fc2FtcGxpbmdfcmF0ZV8ke3NhbXBsaW5nX3JhdGV9LyogXCJzYW1wbGluZ19yYXRlID0gJHNhbXBsaW5nX3JhdGVcIiIKKwlkb25lCisJZWNobyAkY29tbWFuZAorCWV2YWwgIiRjb21tYW5kIgorCWVjaG8KKyAgICBkb25lCisKKyAgICBmb3Igc2FtcGxpbmdfcmF0ZSBpbiAkU0FNUExJTkdfUkFURTtkbworCWNvbW1hbmQ9ImNwdWZyZXEtYmVuY2hfcGxvdC5zaCAtbyBcInVwX3RocmVzaG9sZF8ke1VQX1RIUkVTSE9MRH1fc2FtcGxpbmdfcmF0ZV8ke3NhbXBsaW5nX3JhdGV9XCIgLXQgXCJPbmRlbWFuZCB1cF90aHJlc2hvbGQ6ICR7VVBfVEhSRVNIT0xEfSAlIGNvbXBhcmlzb24gLSBzYW1wbGluZ19yYXRlOiAkc2FtcGxpbmdfcmF0ZVwiIgorCWZvciB1cF90aHJlc2hvbGQgaW4gJFVQX1RIUkVTSE9MRDtkbworCSAgICBjb21tYW5kPSIke2NvbW1hbmR9IC92YXIvbG9nL2NwdWZyZXEtYmVuY2gvdXBfdGhyZXNob2xkXyR7dXBfdGhyZXNob2xkfV9zYW1wbGluZ19yYXRlXyR7c2FtcGxpbmdfcmF0ZX0vKiBcInVwX3RocmVzaG9sZCA9ICR1cF90aHJlc2hvbGRcIiIKKwlkb25lCisJZWNobyAkY29tbWFuZAorCWV2YWwgIiRjb21tYW5kIgorCWVjaG8KKyAgICBkb25lCisKKyAgICBjb21tYW5kPSJjcHVmcmVxLWJlbmNoX3Bsb3Quc2ggLW8gXCJ1cF90aHJlc2hvbGRfJHtVUF9USFJFU0hPTER9X3NhbXBsaW5nX3JhdGVfJHtTQU1QTElOR19SQVRFfVwiIC10IFwiT25kZW1hbmQgdXBfdGhyZXNob2xkOiAke1VQX1RIUkVTSE9MRH0gYW5kIHNhbXBsaW5nX3JhdGUgJHtTQU1QTElOR19SQVRFfSBjb21wYXJpc29uXCIiCisgICAgZm9yIHNhbXBsaW5nX3JhdGUgaW4gJFNBTVBMSU5HX1JBVEU7ZG8KKwlmb3IgdXBfdGhyZXNob2xkIGluICRVUF9USFJFU0hPTEQ7ZG8KKwkgICAgY29tbWFuZD0iJHtjb21tYW5kfSAvdmFyL2xvZy9jcHVmcmVxLWJlbmNoL3VwX3RocmVzaG9sZF8ke3VwX3RocmVzaG9sZH1fc2FtcGxpbmdfcmF0ZV8ke3NhbXBsaW5nX3JhdGV9LyogXCJ1cF90aHJlc2hvbGQgPSAkdXBfdGhyZXNob2xkIC0gc2FtcGxpbmdfcmF0ZSA9ICRzYW1wbGluZ19yYXRlXCIiCisJZG9uZQorICAgIGRvbmUKKyAgICBlY2hvICIkY29tbWFuZCIKKyAgICBldmFsICIkY29tbWFuZCIKK30KKworbWVhc3VyZQorY3JlYXRlX3Bsb3RzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvZXhhbXBsZS5jZmcgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9leGFtcGxlLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTFmNjQzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvZXhhbXBsZS5jZmcKQEAgLTAsMCArMSwxMSBAQAorc2xlZXAgPSA1MDAwMAorbG9hZCA9IDUwMDAwCitjcHUgPSAwCitwcmlvcml0eSA9IExPVworb3V0cHV0ID0gL3Zhci9sb2cvY3B1ZnJlcS1iZW5jaAorc2xlZXBfc3RlcCA9IDUwMDAwCitsb2FkX3N0ZXAgPSA1MDAwMAorY3ljbGVzID0gMjAKK3JvdW5kcyA9IDQwCit2ZXJib3NlID0gMAorZ292ZXJub3IgPSBvbmRlbWFuZApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvbWFpbi5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTUzZmMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9tYWluLmMKQEAgLTAsMCArMSwyMDMgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUgImJlbmNobWFyay5oIgorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9Cit7CisJeyJvdXRwdXQiLAkxLAkwLAknbyd9LAorCXsic2xlZXAiLAkxLAkwLAkncyd9LAorCXsibG9hZCIsCTEsCTAsCSdsJ30sCisJeyJ2ZXJib3NlIiwJMCwJMCwJJ3YnfSwKKwl7ImNwdSIsCQkxLAkwLAknYyd9LAorCXsiZ292ZXJub3IiLAkxLAkwLAknZyd9LAorCXsicHJpbyIsCTEsCTAsCSdwJ30sCisJeyJmaWxlIiwJMSwJMCwJJ2YnfSwKKwl7ImN5Y2xlcyIsCTEsCTAsCSduJ30sCisJeyJyb3VuZHMiLAkxLAkwLAkncid9LAorCXsibG9hZC1zdGVwIiwJMSwJMCwJJ3gnfSwKKwl7InNsZWVwLXN0ZXAiLAkxLAkwLAkneSd9LAorCXsiaGVscCIsCTAsCTAsCSdoJ30sCisJezAsIDAsIDAsIDB9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIHVzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHVzYWdlKCkgCit7CisJcHJpbnRmKCJ1c2FnZTogLi9iZW5jaFxuIik7CisJcHJpbnRmKCJPcHRpb25zOlxuIik7CisJcHJpbnRmKCIgLWwsIC0tbG9hZD08bG9uZyBpbnQ+XHRcdGluaXRpYWwgbG9hZCB0aW1lIGluIHVzXG4iKTsKKwlwcmludGYoIiAtcywgLS1zbGVlcD08bG9uZyBpbnQ+XHRcdGluaXRpYWwgc2xlZXAgdGltZSBpbiB1c1xuIik7CisJcHJpbnRmKCIgLXgsIC0tbG9hZC1zdGVwPTxsb25nIGludD5cdHRpbWUgdG8gYmUgYWRkZWQgdG8gbG9hZCB0aW1lLCBpbiB1c1xuIik7CisJcHJpbnRmKCIgLXksIC0tc2xlZXAtc3RlcD08bG9uZyBpbnQ+XHR0aW1lIHRvIGJlIGFkZGVkIHRvIHNsZWVwIHRpbWUsIGluIHVzXG4iKTsKKwlwcmludGYoIiAtYywgLS1jcHU9PGNwdSAjPlx0XHRcdENQVSBOci4gdG8gdXNlLCBzdGFydGluZyBhdCAwXG4iKTsKKwlwcmludGYoIiAtcCwgLS1wcmlvPTxwcmlvcml0eT5cdFx0XHRzY2hlZHVsZXIgcHJpb3JpdHksIEhJR0gsIExPVyBvciBERUZBVUxUXG4iKTsKKwlwcmludGYoIiAtZywgLS1nb3Zlcm5vcj08Z292ZXJub3I+XHRcdGNwdWZyZXEgZ292ZXJub3IgdG8gdGVzdFxuIik7CisJcHJpbnRmKCIgLW4sIC0tY3ljbGVzPTxpbnQ+XHRcdFx0bG9hZC9zbGVlcCBjeWNsZXNcbiIpOworCXByaW50ZigiIC1yLCAtLXJvdW5kczxpbnQ+XHRcdFx0bG9hZC9zbGVlcCByb3VuZHNcbiIpOworCXByaW50ZigiIC1mLCAtLWZpbGU9PGNvbmZpZ2ZpbGU+XHRcdGNvbmZpZyBmaWxlIHRvIHVzZVxuIik7CisJcHJpbnRmKCIgLW8sIC0tb3V0cHV0PTxkaXI+XHRcdFx0b3V0cHV0IHBhdGguIEZpbGVuYW1lIHdpbGwgYmUgT1VUUFVUUEFUSC9iZW5jaG1hcmtfVElNRVNUQU1QLmxvZ1xuIik7CisJcHJpbnRmKCIgLXYsIC0tdmVyYm9zZVx0XHRcdFx0dmVyYm9zZSBvdXRwdXQgb24vb2ZmXG4iKTsKKwlwcmludGYoIiAtaCwgLS1oZWxwXHRcdFx0XHRQcmludCB0aGlzIGhlbHAgc2NyZWVuXG4iKTsKKwlleGl0ICgxKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBtYWluCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGM7CisJaW50IG9wdGlvbl9pbmRleCA9IDA7CisJc3RydWN0IGNvbmZpZyAqY29uZmlnID0gTlVMTDsKKworCWNvbmZpZyA9IHByZXBhcmVfZGVmYXVsdF9jb25maWcoKTsKKworCWlmIChjb25maWcgPT0gTlVMTCkKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworCXdoaWxlICgxKSB7CisJCWMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImhnOm86czpsOnZjOnA6ZjpuOnI6eDp5OiIsCisJCQkJbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4KTsKKwkJaWYgKGMgPT0gLTEpCisJCQlicmVhazsKKworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnbyc6CisJCQlpZiAoY29uZmlnLT5vdXRwdXQgIT0gTlVMTCkKKwkJCQlmY2xvc2UoY29uZmlnLT5vdXRwdXQpOworCisJCQljb25maWctPm91dHB1dCA9IHByZXBhcmVfb3V0cHV0KG9wdGFyZyk7CisKKwkJCWlmIChjb25maWctPm91dHB1dCA9PSBOVUxMKQorCQkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwkJCWRwcmludGYoInVzZXIgb3V0cHV0IHBhdGggLT4gJXNcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlzc2NhbmYob3B0YXJnLCAiJWxpIiwgJmNvbmZpZy0+c2xlZXApOworCQkJZHByaW50ZigidXNlciBzbGVlcCB0aW1lIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJc3NjYW5mKG9wdGFyZywgIiVsaSIsICZjb25maWctPmxvYWQpOworCQkJZHByaW50ZigidXNlciBsb2FkIHRpbWUgLT4gJXNcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQlzc2NhbmYob3B0YXJnLCAiJXUiLCAmY29uZmlnLT5jcHUpOworCQkJZHByaW50ZigidXNlciBjcHUgLT4gJXNcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlzdHJuY3B5KGNvbmZpZy0+Z292ZXJub3IsIG9wdGFyZywgMTQpOworCQkJZHByaW50ZigidXNlciBnb3Zlcm5vciAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCWlmIChzdHJpbmdfdG9fcHJpbyhvcHRhcmcpICE9IFNDSEVEX0VSUikgeworCQkJCWNvbmZpZy0+cHJpbyA9IHN0cmluZ190b19wcmlvKG9wdGFyZyk7CisJCQkJZHByaW50ZigidXNlciBwcmlvIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY29uZmlnICE9IE5VTEwpIHsKKwkJCQkJaWYgKGNvbmZpZy0+b3V0cHV0ICE9IE5VTEwpCisJCQkJCQlmY2xvc2UoY29uZmlnLT5vdXRwdXQpOworCQkJCQlmcmVlKGNvbmZpZyk7CisJCQkJfQorCQkJCXVzYWdlKCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQlzc2NhbmYob3B0YXJnLCAiJXUiLCAmY29uZmlnLT5jeWNsZXMpOworCQkJZHByaW50ZigidXNlciBjeWNsZXMgLT4gJXNcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlzc2NhbmYob3B0YXJnLCAiJXUiLCAmY29uZmlnLT5yb3VuZHMpOworCQkJZHByaW50ZigidXNlciByb3VuZHMgLT4gJXNcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlzc2NhbmYob3B0YXJnLCAiJWxpIiwgJmNvbmZpZy0+bG9hZF9zdGVwKTsKKwkJCWRwcmludGYoInVzZXIgbG9hZF9zdGVwIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3knOgorCQkJc3NjYW5mKG9wdGFyZywgIiVsaSIsICZjb25maWctPnNsZWVwX3N0ZXApOworCQkJZHByaW50ZigidXNlciBzbGVlcF9zdGVwIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJaWYgKHByZXBhcmVfY29uZmlnKG9wdGFyZywgY29uZmlnKSkKKwkJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQkJYnJlYWs7CisJCWNhc2UgJ3YnOgorCQkJY29uZmlnLT52ZXJib3NlID0gMTsKKwkJCWRwcmludGYoInZlcmJvc2Ugb3V0cHV0IGVuYWJsZWRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQljYXNlICc/JzoKKwkJZGVmYXVsdDoKKwkJCWlmIChjb25maWcgIT0gTlVMTCkgeworCQkJCWlmIChjb25maWctPm91dHB1dCAhPSBOVUxMKQorCQkJCQlmY2xvc2UoY29uZmlnLT5vdXRwdXQpOworCQkJCWZyZWUoY29uZmlnKTsKKwkJCX0KKwkJCXVzYWdlKCk7CisJCX0KKwl9CisKKwlpZiAoY29uZmlnLT52ZXJib3NlKSB7CisJCXByaW50Zigic3RhcnRpbmcgYmVuY2htYXJrIHdpdGggcGFyYW1ldGVyczpcbiIpOworCQlwcmludGYoImNvbmZpZzpcblx0IgorCQkgICAgICAgInNsZWVwPSVsaVxuXHQiCisJCSAgICAgICAibG9hZD0lbGlcblx0IgorCQkgICAgICAgInNsZWVwX3N0ZXA9JWxpXG5cdCIKKwkJICAgICAgICJsb2FkX3N0ZXA9JWxpXG5cdCIKKwkJICAgICAgICJjcHU9JXVcblx0IgorCQkgICAgICAgImN5Y2xlcz0ldVxuXHQiCisJCSAgICAgICAicm91bmRzPSV1XG5cdCIKKwkJICAgICAgICJnb3Zlcm5vcj0lc1xuXG4iLAorCQkgICAgICAgY29uZmlnLT5zbGVlcCwKKwkJICAgICAgIGNvbmZpZy0+bG9hZCwKKwkJICAgICAgIGNvbmZpZy0+c2xlZXBfc3RlcCwKKwkJICAgICAgIGNvbmZpZy0+bG9hZF9zdGVwLAorCQkgICAgICAgY29uZmlnLT5jcHUsCisJCSAgICAgICBjb25maWctPmN5Y2xlcywKKwkJICAgICAgIGNvbmZpZy0+cm91bmRzLAorCQkgICAgICAgY29uZmlnLT5nb3Zlcm5vcik7CisJfQorCisJcHJlcGFyZV91c2VyKGNvbmZpZyk7CisJcHJlcGFyZV9zeXN0ZW0oY29uZmlnKTsKKwlzdGFydF9iZW5jaG1hcmsoY29uZmlnKTsKKworCWlmIChjb25maWctPm91dHB1dCAhPSBzdGRvdXQpCisJCWZjbG9zZShjb25maWctPm91dHB1dCk7CisKKwlmcmVlKGNvbmZpZyk7CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9wYXJzZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjI3MGFjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvcGFyc2UuYwpAQCAtMCwwICsxLDIyNCBAQAorLyogIGNwdWZyZXEtYmVuY2ggQ1BVRnJlcSBtaWNyb2JlbmNobWFyaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIEtvcm5hY2tlciA8Y2tvcm5hY2tlckBzdXNlLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJwYXJzZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCisvKioKKyAqIGNvbnZlcnRzIHByaW9yaXR5IHN0cmluZyB0byBwcmlvcml0eQorICoKKyAqIEBwYXJhbSBzdHIgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBhIHNjaGVkdWxlciBwcmlvcml0eQorICoKKyAqIEByZXR2YWwgcHJpb3JpdHkKKyAqIEByZXR2YWwgU0NIRURfRVJSIHdoZW4gdGhlIHByaW9yaXR5IGRvZXNuJ3QgZXhpdAorICoqLworCitlbnVtIHNjaGVkX3ByaW8gc3RyaW5nX3RvX3ByaW8oY29uc3QgY2hhciAqc3RyKQoreworCWlmIChzdHJuY2FzZWNtcCgiaGlnaCIsIHN0ciwgc3RybGVuKHN0cikpID09IDApCisJCXJldHVybiAgU0NIRURfSElHSDsKKwllbHNlIGlmIChzdHJuY2FzZWNtcCgiZGVmYXVsdCIsIHN0ciwgc3RybGVuKHN0cikpID09IDApCisJCXJldHVybiBTQ0hFRF9ERUZBVUxUOworCWVsc2UgaWYgKHN0cm5jYXNlY21wKCJsb3ciLCBzdHIsIHN0cmxlbihzdHIpKSA9PSAwKQorCQlyZXR1cm4gU0NIRURfTE9XOworCWVsc2UKKwkJcmV0dXJuIFNDSEVEX0VSUjsKK30KKworLyoqCisgKiBjcmVhdGUgYW5kIG9wZW4gbG9nZmlsZQorICoKKyAqIEBwYXJhbSBkaXIgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBsb2dmaWxlIHNob3VsZCBiZSBjcmVhdGVkCisgKgorICogQHJldHZhbCBsb2dmaWxlIG9uIHN1Y2Nlc3MKKyAqIEByZXR2YWwgTlVMTCB3aGVuIHRoZSBmaWxlIGNhbid0IGJlIGNyZWF0ZWQKKyAqKi8KKworRklMRSAqcHJlcGFyZV9vdXRwdXQoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwlGSUxFICpvdXRwdXQgPSBOVUxMOworCWludCBsZW47CisJY2hhciAqZmlsZW5hbWU7CisJc3RydWN0IHV0c25hbWUgc3lzZGF0YTsKKwlESVIgKmRpcjsKKworCWRpciA9IG9wZW5kaXIoZGlybmFtZSk7CisJaWYgKGRpciA9PSBOVUxMKSB7CisJCWlmIChta2RpcihkaXJuYW1lLCAwNzU1KSkgeworCQkJcGVycm9yKCJta2RpciIpOworCQkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogQ2Fubm90IGNyZWF0ZSBkaXIgJXNcbiIsCisJCQkJZGlybmFtZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCWxlbiA9IHN0cmxlbihkaXJuYW1lKSArIDMwOworCWZpbGVuYW1lID0gbWFsbG9jKHNpemVvZihjaGFyKSAqIGxlbik7CisKKwlpZiAodW5hbWUoJnN5c2RhdGEpID09IDApIHsKKwkJbGVuICs9IHN0cmxlbihzeXNkYXRhLm5vZGVuYW1lKSArIHN0cmxlbihzeXNkYXRhLnJlbGVhc2UpOworCQlmaWxlbmFtZSA9IHJlYWxsb2MoZmlsZW5hbWUsIHNpemVvZihjaGFyKSAqIGxlbik7CisKKwkJaWYoZmlsZW5hbWUgPT0gTlVMTCkgeworCQkJcGVycm9yKCJyZWFsbG9jIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXNucHJpbnRmKGZpbGVuYW1lLCBsZW4gLSAxLCAiJXMvYmVuY2htYXJrXyVzXyVzXyVsaS5sb2ciLCAKKwkJCWRpcm5hbWUsIHN5c2RhdGEubm9kZW5hbWUsIHN5c2RhdGEucmVsZWFzZSwgdGltZShOVUxMKSk7CisJfSBlbHNlIHsKKwkJc25wcmludGYoZmlsZW5hbWUsIGxlbiAtMSwgIiVzL2JlbmNobWFya18lbGkubG9nIiwgZGlybmFtZSwgdGltZShOVUxMKSk7CisJfQorCisJZHByaW50ZigibG9naWxlbmFtZTogJXNcbiIsIGZpbGVuYW1lKTsKKworCWlmICgob3V0cHV0ID0gZm9wZW4oZmlsZW5hbWUsICJ3KyIpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigiZm9wZW4iKTsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogdW5hYmxlIHRvIG9wZW4gbG9nZmlsZVxuIik7CisJfQorCisJZnByaW50ZihzdGRvdXQsICJMb2dmaWxlOiAlc1xuIiwgZmlsZW5hbWUpOworCisJZnJlZShmaWxlbmFtZSk7CisJZnByaW50ZihvdXRwdXQsICIjcm91bmQgbG9hZCBzbGVlcCBwZXJmb3JtYW5jZSBwb3dlcnNhdmUgcGVyY2VudGFnZVxuIik7CisJcmV0dXJuIG91dHB1dDsKK30KKworLyoqCisgKiByZXR1cm5zIHRoZSBkZWZhdWx0IGNvbmZpZworICoKKyAqIEByZXR2YWwgZGVmYXVsdCBjb25maWcgb24gc3VjY2VzcworICogQHJldHZhbCBOVUxMIHdoZW4gdGhlIG91dHB1dCBmaWxlIGNhbid0IGJlIGNyZWF0ZWQKKyAqKi8KKworc3RydWN0IGNvbmZpZyAqcHJlcGFyZV9kZWZhdWx0X2NvbmZpZygpCit7CisJc3RydWN0IGNvbmZpZyAqY29uZmlnID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29uZmlnKSk7CisKKwlkcHJpbnRmKCJsb2FkaW5nIGRlZmF1bHRzXG4iKTsKKworCWNvbmZpZy0+c2xlZXAgPSA1MDAwMDA7CisJY29uZmlnLT5sb2FkID0gNTAwMDAwOworCWNvbmZpZy0+c2xlZXBfc3RlcCA9IDUwMDAwMDsKKwljb25maWctPmxvYWRfc3RlcCA9IDUwMDAwMDsKKwljb25maWctPmN5Y2xlcyA9IDU7CisJY29uZmlnLT5yb3VuZHMgPSA1MDsKKwljb25maWctPmNwdSA9IDA7CQorCWNvbmZpZy0+cHJpbyA9IFNDSEVEX0hJR0g7CisJY29uZmlnLT52ZXJib3NlID0gMDsKKwlzdHJuY3B5KGNvbmZpZy0+Z292ZXJub3IsICJvbmRlbWFuZCIsIDgpOworCisJY29uZmlnLT5vdXRwdXQgPSBzdGRvdXQ7CisKKyNpZmRlZiBERUZBVUxUX0NPTkZJR19GSUxFCisJaWYgKHByZXBhcmVfY29uZmlnKERFRkFVTFRfQ09ORklHX0ZJTEUsIGNvbmZpZykpCisJCXJldHVybiBOVUxMOworI2VuZGlmCisJcmV0dXJuIGNvbmZpZzsKK30KKworLyoqCisgKiBwYXJzZXMgY29uZmlnIGZpbGUgYW5kIHJldHVybnMgdGhlIGNvbmZpZyB0byB0aGUgY2FsbGVyCisgKgorICogQHBhcmFtIHBhdGggY29uZmlnIGZpbGUgbmFtZQorICoKKyAqIEByZXR2YWwgMSBvbiBlcnJvcgorICogQHJldHZhbCAwIG9uIHN1Y2Nlc3MKKyAqKi8KKworaW50IHByZXBhcmVfY29uZmlnKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjb25maWcgKmNvbmZpZykKK3sKKwlzaXplX3QgbGVuID0gMDsKKwljaGFyICpvcHQsICp2YWwsICpsaW5lID0gTlVMTDsKKwlGSUxFICpjb25maWdmaWxlID0gZm9wZW4ocGF0aCwgInIiKTsKKworCWlmIChjb25maWcgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBjb25maWcgaXMgTlVMTFxuIik7CisJCXJldHVybiAxOworCX0KKworCWlmIChjb25maWdmaWxlID09IE5VTEwpIHsKKwkJcGVycm9yKCJmb3BlbiIpOworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHVuYWJsZSB0byByZWFkIGNvbmZpZ2ZpbGVcbiIpOworCQlmcmVlKGNvbmZpZyk7CisJCXJldHVybiAxOworCX0KKworCXdoaWxlIChnZXRsaW5lKCZsaW5lLCAmbGVuLCBjb25maWdmaWxlKSAhPSAtMSkKKwl7CisJCWlmIChsaW5lWzBdID09ICcjJyB8fCBsaW5lWzBdID09ICcgJykKKwkJCWNvbnRpbnVlOworCisJCXNzY2FuZihsaW5lLCAiJWFzID0gJWFzIiwgJm9wdCwgJnZhbCk7CisKKwkJZHByaW50ZigicGFyc2luZzogJXMgLT4gJXNcbiIsIG9wdCwgdmFsKTsKKworCQlpZiAoc3RybmNtcCgic2xlZXAiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKQorCQkJc3NjYW5mKHZhbCwgIiVsaSIsICZjb25maWctPnNsZWVwKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJsb2FkIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkgCisJCQlzc2NhbmYodmFsLCAiJWxpIiwgJmNvbmZpZy0+bG9hZCk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgibG9hZF9zdGVwIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkgCisJCQlzc2NhbmYodmFsLCAiJWxpIiwgJmNvbmZpZy0+bG9hZF9zdGVwKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJzbGVlcF9zdGVwIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkgCisJCQlzc2NhbmYodmFsLCAiJWxpIiwgJmNvbmZpZy0+c2xlZXBfc3RlcCk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgiY3ljbGVzIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkgCisJCQlzc2NhbmYodmFsLCAiJXUiLCAmY29uZmlnLT5jeWNsZXMpOworCisJCWVsc2UgaWYgKHN0cm5jbXAoInJvdW5kcyIsIG9wdCwgc3RybGVuKG9wdCkpID09IDApIAorCQkJc3NjYW5mKHZhbCwgIiV1IiwgJmNvbmZpZy0+cm91bmRzKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJ2ZXJib3NlIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkgCisJCQlzc2NhbmYodmFsLCAiJXUiLCAmY29uZmlnLT52ZXJib3NlKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJvdXRwdXQiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKSAKKwkJCWNvbmZpZy0+b3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQodmFsKTsgCisKKwkJZWxzZSBpZiAoc3RybmNtcCgiY3B1Iiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkgCisJCQlzc2NhbmYodmFsLCAiJXUiLCAmY29uZmlnLT5jcHUpOworCisJCWVsc2UgaWYgKHN0cm5jbXAoImdvdmVybm9yIiwgb3B0LCAxNCkgPT0gMCkgCisJCQlzdHJuY3B5KGNvbmZpZy0+Z292ZXJub3IsIHZhbCwgMTQpOworCisJCWVsc2UgaWYgKHN0cm5jbXAoInByaW9yaXR5Iiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkgeworCQkJaWYgKHN0cmluZ190b19wcmlvKHZhbCkgIT0gU0NIRURfRVJSKSAKKwkJCQljb25maWctPnByaW8gPSBzdHJpbmdfdG9fcHJpbyh2YWwpOworCQl9CisJfQorCisJZnJlZShsaW5lKTsKKwlmcmVlKG9wdCk7CisJZnJlZSh2YWwpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9wYXJzZS5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmNkZmEyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvcGFyc2UuaApAQCAtMCwwICsxLDUwIEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qIHN0cnVjdCB0aGF0IGhvbGRzIHRoZSByZXF1aXJlZCBjb25maWcgcGFyYW1ldGVycyAqLworc3RydWN0IGNvbmZpZworeworCWxvbmcgc2xlZXA7CQkvKiBzbGVlcCB0aW1lIGluILVzICovCisJbG9uZyBsb2FkOwkJLyogbG9hZCB0aW1lIGluILVzICovCisJbG9uZyBzbGVlcF9zdGVwOwkvKiB0aW1lIHZhbHVlIHdoaWNoIGNoYW5nZXMgdGhlCisJCQkJICogc2xlZXAgdGltZSBhZnRlciBldmVyeSByb3VuZCBpbiC1cyAqLworCWxvbmcgbG9hZF9zdGVwOwkJLyogdGltZSB2YWx1ZSB3aGljaCBjaGFuZ2VzIHRoZQorCQkJCSAqIGxvYWQgdGltZSBhZnRlciBldmVyeSByb3VuZCBpbiC1cyAqLworCXVuc2lnbmVkIGludCBjeWNsZXM7CS8qIGNhbGN1bGF0aW9uIGN5Y2xlcyB3aXRoIHRoZSBzYW1lIHNsZWVwL2xvYWQgdGltZSAqLworCXVuc2lnbmVkIGludCByb3VuZHM7CS8qIGNhbGN1bGF0aW9uIHJvdW5kcyB3aXRoIGl0ZXJhdGVkIHNsZWVwL2xvYWQgdGltZSAqLworCXVuc2lnbmVkIGludCBjcHU7CS8qIGNwdSBmb3Igd2hpY2ggdGhlIGFmZmluaXR5IGlzIHNldCAqLworCWNoYXIgZ292ZXJub3JbMTVdOwkvKiBjcHVmcmVxIGdvdmVybm9yICovCisJZW51bSBzY2hlZF9wcmlvCQkvKiBwb3NzaWJsZSBzY2hlZHVsZXIgcHJpb3JpdGllcyAqLworCXsKKwkJU0NIRURfRVJSPS0xLFNDSEVEX0hJR0gsIFNDSEVEX0RFRkFVTFQsIFNDSEVEX0xPVworCX0gcHJpbzsKKworCXVuc2lnbmVkIGludCB2ZXJib3NlOwkvKiB2ZXJib3NlIG91dHB1dCAqLworCUZJTEUgKm91dHB1dDsJCS8qIGxvZ2ZpbGUgKi8KKwljaGFyICpvdXRwdXRfZmlsZW5hbWU7CS8qIGxvZ2ZpbGUgbmFtZSwgbXVzdCBiZSBmcmVlZCBhdCB0aGUgZW5kCisJCQkJICAgaWYgb3V0cHV0ICE9IE5VTEwgYW5kIG91dHB1dCAhPSBzdGRvdXQqLworfTsKKworZW51bSBzY2hlZF9wcmlvIHN0cmluZ190b19wcmlvKGNvbnN0IGNoYXIgKnN0cik7CisKK0ZJTEUgKnByZXBhcmVfb3V0cHV0KGNvbnN0IGNoYXIgKmRpcik7CisKK2ludCBwcmVwYXJlX2NvbmZpZyhjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY29uZmlnICpjb25maWcpOworc3RydWN0IGNvbmZpZyAqcHJlcGFyZV9kZWZhdWx0X2NvbmZpZygpOworCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlM2E4MmU4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvc3lzdGVtLmMKQEAgLTAsMCArMSwxODggQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxzY2hlZC5oPgorCisjaW5jbHVkZSA8Y3B1ZnJlcS5oPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3lzdGVtLmgiCisKKy8qKgorICogcmV0dXJucyB0aW1lIHNpbmNlIGVwb2NoIGluILVzCisgKgorICogQHJldHZhbCB0aW1lCisgKiovCisKK2xvbmcgbG9uZyBpbnQgZ2V0X3RpbWUoKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKworCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKworCXJldHVybiAobG9uZyBsb25nIGludCkobm93LnR2X3NlYyAqIDEwMDAwMDBMTCArIG5vdy50dl91c2VjKTsKK30KKworLyoqCisgKiBzZXRzIHRoZSBjcHVmcmVxIGdvdmVybm9yCisgKgorICogQHBhcmFtIGdvdmVybm9yIGNwdWZyZXEgZ292ZXJub3IgbmFtZQorICogQHBhcmFtIGNwdSBjcHUgZm9yIHdoaWNoIHRoZSBnb3Zlcm5vciBzaG91bGQgYmUgc2V0CisgKgorICogQHJldHZhbCAwIG9uIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgd2hlbiBmYWlsZWQKKyAqKi8KKworaW50IHNldF9jcHVmcmVxX2dvdmVybm9yKGNoYXIgKmdvdmVybm9yLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCisJZHByaW50Zigic2V0ICVzIGFzIGNwdWZyZXEgZ292ZXJub3JcbiIsIGdvdmVybm9yKTsKKworCWlmIChjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSAhPSAwKSB7CisJCXBlcnJvcigiY3B1ZnJlcV9jcHVfZXhpc3RzIik7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGNwdSAldSBkb2VzIG5vdCBleGlzdFxuIiwgY3B1KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IoY3B1LCBnb3Zlcm5vcikgIT0gMCkgeworCQlwZXJyb3IoImNwdWZyZXFfbW9kaWZ5X3BvbGljeV9nb3Zlcm5vciIpOworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1bmFibGUgdG8gc2V0ICVzIGdvdmVybm9yXG4iLCBnb3Zlcm5vcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzZXRzIGNwdSBhZmZpbml0eSBmb3IgdGhlIHByb2Nlc3MKKyAqCisgKiBAcGFyYW0gY3B1IGNwdSMgdG8gd2hpY2ggdGhlIGFmZmluaXR5IHNob3VsZCBiZSBzZXQKKyAqCisgKiBAcmV0dmFsIDAgb24gc3VjY2VzcworICogQHJldHZhbCAtMSB3aGVuIHNldHRpbmcgdGhlIGFmZmluaXR5IGZhaWxlZAorICoqLworCitpbnQgc2V0X2NwdV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgY3B1KQoreworCWNwdV9zZXRfdCBjcHVzZXQ7CisJCisJQ1BVX1pFUk8oJmNwdXNldCk7CisJQ1BVX1NFVChjcHUsICZjcHVzZXQpOworCisJZHByaW50Zigic2V0IGFmZmluaXR5IHRvIGNwdSAjJXVcbiIsIGNwdSk7CisKKwlpZiAoc2NoZWRfc2V0YWZmaW5pdHkoZ2V0cGlkKCksIHNpemVvZihjcHVfc2V0X3QpLCAmY3B1c2V0KSA8IDApIHsKKwkJcGVycm9yKCJzY2hlZF9zZXRhZmZpbml0eSIpOworCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IHVuYWJsZSB0byBzZXQgY3B1IGFmZmluaXR5XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHNldHMgdGhlIHByb2Nlc3MgcHJpb3JpdHkgcGFyYW1ldGVyCisgKgorICogQHBhcmFtIHByaW9yaXR5IHByaW9yaXR5IHZhbHVlCisgKgorICogQHJldHZhbCAwIG9uIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgd2hlbiBzZXR0aW5nIHRoZSBwcmlvcml0eSBmYWlsZWQKKyAqKi8KKworaW50IHNldF9wcm9jZXNzX3ByaW9yaXR5KGludCBwcmlvcml0eSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CisKKwlkcHJpbnRmKCJzZXQgc2NoZWR1bGVyIHByaW9yaXR5IHRvICVpXG4iLCBwcmlvcml0eSk7CisKKwlwYXJhbS5zY2hlZF9wcmlvcml0eSA9IHByaW9yaXR5OworCisJaWYgKHNjaGVkX3NldHNjaGVkdWxlcigwLCBTQ0hFRFVMRVIsICZwYXJhbSkgPCAwKSB7CisJCXBlcnJvcigic2NoZWRfc2V0c2NoZWR1bGVyIik7CisJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogdW5hYmxlIHRvIHNldCBzY2hlZHVsZXIgcHJpb3JpdHlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbm90aWZ5cyB0aGUgdXNlciB0aGF0IHRoZSBiZW5jaG1hcmsgbWF5IHJ1biBzb21lIHRpbWUgCisgKgorICogQHBhcmFtIGNvbmZpZyBiZW5jaG1hcmsgY29uZmlnIHZhbHVlcworICoKKyAqKi8KKwordm9pZCBwcmVwYXJlX3VzZXIoY29uc3Qgc3RydWN0IGNvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGxvbmcgc2xlZXBfdGltZSA9IDA7CisJdW5zaWduZWQgbG9uZyBsb2FkX3RpbWUgPSAwOworCXVuc2lnbmVkIGludCByb3VuZDsKKworCWZvciAocm91bmQgPSAwOyByb3VuZCA8IGNvbmZpZy0+cm91bmRzOyByb3VuZCsrKSB7CisJCXNsZWVwX3RpbWUgKz0gIDIgKiBjb25maWctPmN5Y2xlcyAqIChjb25maWctPnNsZWVwICsgY29uZmlnLT5zbGVlcF9zdGVwICogcm91bmQpOworCQlsb2FkX3RpbWUgKz0gMiAqIGNvbmZpZy0+Y3ljbGVzICogKGNvbmZpZy0+bG9hZCArIGNvbmZpZy0+bG9hZF9zdGVwICogcm91bmQpICsgKGNvbmZpZy0+bG9hZCArIGNvbmZpZy0+bG9hZF9zdGVwICogcm91bmQgKiA0KTsKKwl9CisKKwlpZiAoY29uZmlnLT52ZXJib3NlIHx8IGNvbmZpZy0+b3V0cHV0ICE9IHN0ZG91dCkKKwkJcHJpbnRmKCJhcHByb3guIHRlc3QgZHVyYXRpb246ICVpbVxuIiwKKwkJICAgICAgIChpbnQpKChzbGVlcF90aW1lICsgbG9hZF90aW1lKSAvIDYwMDAwMDAwKSk7Cit9CisKKy8qKgorICogc2V0cyB1cCB0aGUgY3B1IGFmZmluaXR5IGFuZCBzY2hlZHVsZXIgcHJpb3JpdHkKKyAqCisgKiBAcGFyYW0gY29uZmlnIGJlbmNobWFyayBjb25maWcgdmFsdWVzCisgKgorICoqLworCit2b2lkIHByZXBhcmVfc3lzdGVtKGNvbnN0IHN0cnVjdCBjb25maWcgKmNvbmZpZykKK3sKKwlpZiAoY29uZmlnLT52ZXJib3NlKQorCQlwcmludGYoInNldCBjcHUgYWZmaW5pdHkgdG8gY3B1ICMldVxuIiwgY29uZmlnLT5jcHUpOworCisJc2V0X2NwdV9hZmZpbml0eShjb25maWctPmNwdSk7CisKKwlzd2l0Y2ggKGNvbmZpZy0+cHJpbykgeworCWNhc2UgU0NIRURfSElHSDoKKwkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCXByaW50ZigiaGlnaCBwcmlvcml0eSBjb25kaXRpb24gcmVxdWVzdGVkXG4iKTsKKworCQlzZXRfcHJvY2Vzc19wcmlvcml0eShQUklPUklUWV9ISUdIKTsKKwkJYnJlYWs7CisJY2FzZSBTQ0hFRF9MT1c6CisJCWlmIChjb25maWctPnZlcmJvc2UpCisJCQlwcmludGYoImxvdyBwcmlvcml0eSBjb25kaXRpb24gcmVxdWVzdGVkXG4iKTsKKworCQlzZXRfcHJvY2Vzc19wcmlvcml0eShQUklPUklUWV9MT1cpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoY29uZmlnLT52ZXJib3NlKQorCQkJcHJpbnRmKCJkZWZhdWx0IHByaW9yaXR5IGNvbmRpdGlvbiByZXF1ZXN0ZWRcbiIpOworCisJCXNldF9wcm9jZXNzX3ByaW9yaXR5KFBSSU9SSVRZX0RFRkFVTFQpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvc3lzdGVtLmggYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYThjODU4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvc3lzdGVtLmgKQEAgLTAsMCArMSwyOSBAQAorLyogIGNwdWZyZXEtYmVuY2ggQ1BVRnJlcSBtaWNyb2JlbmNobWFyaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIEtvcm5hY2tlciA8Y2tvcm5hY2tlckBzdXNlLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAicGFyc2UuaCIKKworbG9uZyBsb25nIGdldF90aW1lKCk7CisKK2ludCBzZXRfY3B1ZnJlcV9nb3Zlcm5vcihjaGFyICpnb3Zlcm5vciwgdW5zaWduZWQgaW50IGNwdSk7CitpbnQgc2V0X2NwdV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgY3B1KTsKK2ludCBzZXRfcHJvY2Vzc19wcmlvcml0eShpbnQgcHJpb3JpdHkpOworCit2b2lkIHByZXBhcmVfdXNlcihjb25zdCBzdHJ1Y3QgY29uZmlnICpjb25maWcpOwordm9pZCBwcmVwYXJlX3N5c3RlbShjb25zdCBzdHJ1Y3QgY29uZmlnICpjb25maWcpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYnVpbGQvY2Nkdi5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYnVpbGQvY2Nkdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYWU5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9idWlsZC9jY2R2LmMKQEAgLTAsMCArMSwzODcgQEAKKy8qIGNjZHYuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCBieSBNaWtlIEdsZWFzb24sIE5jRlRQIFNvZnR3YXJlLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjZGVmaW5lIFNFVENPTE9SX1NVQ0NFU1MJKGdBTlNJRXNjYXBlcyA/ICJcMDMzXDEzMzE7MzJtIiA6ICIiKQorI2RlZmluZSBTRVRDT0xPUl9GQUlMVVJFCShnQU5TSUVzY2FwZXMgPyAiXDAzM1wxMzMxOzMxbSIgOiAiIikKKyNkZWZpbmUgU0VUQ09MT1JfV0FSTklORwkoZ0FOU0lFc2NhcGVzID8gIlwwMzNcMTMzMTszM20iIDogIiIpCisjZGVmaW5lIFNFVENPTE9SX05PUk1BTAkJKGdBTlNJRXNjYXBlcyA/ICJcMDMzXDEzMzA7MzltIiA6ICIiKQorCisjZGVmaW5lIFRFWFRfQkxPQ0tfU0laRSA4MTkyCisjZGVmaW5lIElOREVOVCAyCisKKyNkZWZpbmUgVEVSTVMgInZ0MTAwOnZ0MTAyOnZ0MjIwOnZ0MzIwOnh0ZXJtOnh0ZXJtLWNvbG9yOmFuc2k6bGludXg6c2NvdGVybTpzY29hbnNpOmR0dGVybTpjb25zMjU6Y3lnd2luIgorCitzaXplX3QgZ05CdWZVc2VkID0gMCwgZ05CdWZBbGxvY2F0ZWQgPSAwOworY2hhciAqZ0J1ZiA9IE5VTEw7CitpbnQgZ0NDUElEOworY2hhciBnQWN0aW9uWzIwMF0gPSAiIjsKK2NoYXIgZ1RhcmdldFsyMDBdID0gIiI7CitjaGFyIGdBclszMl0gPSAiIjsKK2NoYXIgZ0FyTGlicmFyeVRhcmdldFs2NF0gPSAiIjsKK2ludCBnRHVtcENtZEFyZ3MgPSAwOworY2hhciBnQXJnc1N0clsxMDAwXTsKK2ludCBnQ29sdW1ucyA9IDgwOworaW50IGdBTlNJRXNjYXBlcyA9IDA7CitpbnQgZ0V4aXRTdGF0dXMgPSA5NTsKKworc3RhdGljIHZvaWQgRHVtcEZvcm1hdHRlZE91dHB1dCh2b2lkKQoreworCWNoYXIgKmNwOworCWNoYXIgc3BhY2VzWzggKyAxXSA9ICIgICAgICAgICI7CisJY2hhciAqc2F2ZWQ7CisJaW50IGN1cmNvbDsKKwlpbnQgaTsKKworCWN1cmNvbCA9IDA7CisJc2F2ZWQgPSBOVUxMOworCWZvciAoY3AgPSBnQnVmICsgKChnRHVtcENtZEFyZ3MgPT0gMCkgPyBzdHJsZW4oZ0FyZ3NTdHIpIDogMCk7IDsgY3ArKykgeworCQlpZiAoKmNwID09ICdcMCcpIHsKKwkJCWlmIChzYXZlZCAhPSBOVUxMKSB7CisJCQkJY3AgPSBzYXZlZDsKKwkJCQlzYXZlZCA9IE5VTEw7CisJCQl9IGVsc2UgYnJlYWs7CisJCX0KKwkJaWYgKCpjcCA9PSAnXHInKQorCQkJY29udGludWU7CisJCWlmICgqY3AgPT0gJ1x0JykgeworCQkJc2F2ZWQgPSBjcCArIDE7CisJCQljcCA9IHNwYWNlcyArIDggLSAoOCAtICgoY3VyY29sIC0gSU5ERU5UIC0gMSkgJSA4KSk7CisJCX0KKwkJaWYgKGN1cmNvbCA9PSAwKSB7CisJCQlmb3IgKGkgPSBJTkRFTlQ7IC0taSA+PSAwOyApCisJCQkJcHV0Y2hhcignICcpOworCQkJY3VyY29sID0gSU5ERU5UOworCQl9CisJCXB1dGNoYXIoKmNwKTsKKwkJaWYgKCsrY3VyY29sID09IChnQ29sdW1ucyAtIDEpKSB7CisJCQlwdXRjaGFyKCdcbicpOworCQkJY3VyY29sID0gMDsKKwkJfSBlbHNlIGlmICgqY3AgPT0gJ1xuJykKKwkJCWN1cmNvbCA9IDA7CisJfQorCWZyZWUoZ0J1Zik7Cit9CS8qIER1bXBGb3JtYXR0ZWRPdXRwdXQgKi8KKworCisKKy8qIERpZmZ0aW1lKCksIG9ubHkgZm9yIHRpbWV2YWwgc3RydWN0dXJlcy4gICovCitzdGF0aWMgdm9pZCBUaW1lVmFsU3VidHJhY3Qoc3RydWN0IHRpbWV2YWwgKnRkaWZmLCBzdHJ1Y3QgdGltZXZhbCAqdDEsIHN0cnVjdCB0aW1ldmFsICp0MCkKK3sKKwl0ZGlmZi0+dHZfc2VjID0gdDEtPnR2X3NlYyAtIHQwLT50dl9zZWM7CisJdGRpZmYtPnR2X3VzZWMgPSB0MS0+dHZfdXNlYyAtIHQwLT50dl91c2VjOworCWlmICh0ZGlmZi0+dHZfdXNlYyA8IDApIHsKKwkJdGRpZmYtPnR2X3NlYy0tOworCQl0ZGlmZi0+dHZfdXNlYyArPSAxMDAwMDAwOworCX0KK30JLyogVGltZVZhbFN1YnRyYWN0ICovCisKKworCitzdGF0aWMgdm9pZCBXYWl0KHZvaWQpCit7CisJaW50IHBpZDIsIHN0YXR1czsKKworCWRvIHsKKwkJc3RhdHVzID0gMDsKKwkJcGlkMiA9IChpbnQpIHdhaXRwaWQoZ0NDUElELCAmc3RhdHVzLCAwKTsKKwl9IHdoaWxlICgoKHBpZDIgPj0gMCkgJiYgKCEgV0lGRVhJVEVEKHN0YXR1cykpKSB8fCAoKHBpZDIgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKSk7CisJaWYgKFdJRkVYSVRFRChzdGF0dXMpKQorCQlnRXhpdFN0YXR1cyA9IFdFWElUU1RBVFVTKHN0YXR1cyk7Cit9CS8qIFdhaXQgKi8KKworCisKK3N0YXRpYyBpbnQgU2x1cnBQcm9ncmVzcyhpbnQgZmQpCit7CisJY2hhciBzMVs3MV07CisJY2hhciAqbmV3YnVmOworCWludCBucmVhZHk7CisJc2l6ZV90IG50b3JlYWQ7CisJc3NpemVfdCBucmVhZDsKKwlzdHJ1Y3QgdGltZXZhbCBub3csIHRuZXh0LCB0bGVmdDsKKwlmZF9zZXQgc3M7CisJZmRfc2V0IHNzMjsKKwljb25zdCBjaGFyICp0cmFpbCA9ICIvLVxcfCIsICp0cmFpbGNwOworCisJdHJhaWxjcCA9IHRyYWlsOworCXNucHJpbnRmKHMxLCBzaXplb2YoczEpLCAiJXMlcyVzLi4uICIsIGdBY3Rpb24sIGdUYXJnZXRbMF0gPyAiICIgOiAiIiwgZ1RhcmdldCk7CisJcHJpbnRmKCJcciUtNzBzJS05cyIsIHMxLCAiIik7CisJZmZsdXNoKHN0ZG91dCk7CisKKwlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisJdG5leHQgPSBub3c7CisJdG5leHQudHZfc2VjKys7CisJdGxlZnQudHZfc2VjID0gMTsKKwl0bGVmdC50dl91c2VjID0gMDsKKwlGRF9aRVJPKCZzczIpOworCUZEX1NFVChmZCwgJnNzMik7CisJZm9yKDs7KSB7CisJCWlmIChnTkJ1ZlVzZWQgPT0gKGdOQnVmQWxsb2NhdGVkIC0gMSkpIHsKKwkJCWlmICgobmV3YnVmID0gKGNoYXIgKikgcmVhbGxvYyhnQnVmLCBnTkJ1ZkFsbG9jYXRlZCArIFRFWFRfQkxPQ0tfU0laRSkpID09IE5VTEwpIHsKKwkJCQlwZXJyb3IoImNjZHY6IHJlYWxsb2MiKTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWdOQnVmQWxsb2NhdGVkICs9IFRFWFRfQkxPQ0tfU0laRTsKKwkJCWdCdWYgPSBuZXdidWY7CisJCX0KKwkJZm9yICg7OykgeworCQkJc3MgPSBzczI7CisJCQlucmVhZHkgPSBzZWxlY3QoZmQgKyAxLCAmc3MsIE5VTEwsIE5VTEwsICZ0bGVmdCk7CisJCQlpZiAobnJlYWR5ID09IDEpCisJCQkJYnJlYWs7CisJCQlpZiAobnJlYWR5IDwgMCkgeworCQkJCWlmIChlcnJubyAhPSBFSU5UUikgeworCQkJCQlwZXJyb3IoImNjZHY6IHNlbGVjdCIpOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisJCQlpZiAoKG5vdy50dl9zZWMgPiB0bmV4dC50dl9zZWMpIHx8ICgobm93LnR2X3NlYyA9PSB0bmV4dC50dl9zZWMpICYmIChub3cudHZfdXNlYyA+PSB0bmV4dC50dl91c2VjKSkpIHsKKwkJCQl0bmV4dCA9IG5vdzsKKwkJCQl0bmV4dC50dl9zZWMrKzsKKwkJCQl0bGVmdC50dl9zZWMgPSAxOworCQkJCXRsZWZ0LnR2X3VzZWMgPSAwOworCQkJCXByaW50ZigiXHIlLTcxcyVjJS03cyIsIHMxLCAqdHJhaWxjcCwgIiIpOworCQkJCWZmbHVzaChzdGRvdXQpOworCQkJCWlmICgqKyt0cmFpbGNwID09ICdcMCcpCisJCQkJCXRyYWlsY3AgPSB0cmFpbDsKKwkJCX0gZWxzZSB7CisJCQkJVGltZVZhbFN1YnRyYWN0KCZ0bGVmdCwgJnRuZXh0LCAmbm93KTsKKwkJCX0KKwkJfQorCQludG9yZWFkID0gKGdOQnVmQWxsb2NhdGVkIC0gZ05CdWZVc2VkIC0gMSk7CisJCW5yZWFkID0gcmVhZChmZCwgZ0J1ZiArIGdOQnVmVXNlZCwgbnRvcmVhZCk7CisJCWlmIChucmVhZCA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCQljb250aW51ZTsKKwkJCXBlcnJvcigiY2NkdjogcmVhZCIpOworCQkJcmV0dXJuICgtMSk7CisJCX0gZWxzZSBpZiAobnJlYWQgPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKwkJZ05CdWZVc2VkICs9IG5yZWFkOworCQlnQnVmW2dOQnVmVXNlZF0gPSAnXDAnOworCX0KKwlzbnByaW50ZihzMSwgc2l6ZW9mKHMxKSwgIiVzJXMlczogIiwgZ0FjdGlvbiwgZ1RhcmdldFswXSA/ICIgIiA6ICIiLCBnVGFyZ2V0KTsKKwlXYWl0KCk7CisJaWYgKGdFeGl0U3RhdHVzID09IDApIHsKKwkJcHJpbnRmKCJcciUtNzBzIiwgczEpOworCQlwcmludGYoIlslcyVzJXNdIiwgKChnTkJ1ZlVzZWQgLSBzdHJsZW4oZ0FyZ3NTdHIpKSA8IDQpID8gU0VUQ09MT1JfU1VDQ0VTUyA6IFNFVENPTE9SX1dBUk5JTkcsICJPSyIsIFNFVENPTE9SX05PUk1BTCk7CisJCXByaW50ZigiJS01c1xuIiwgIiAiKTsKKwl9IGVsc2UgeworCQlwcmludGYoIlxyJS03MHMiLCBzMSk7CisJCXByaW50ZigiWyVzJXMlc10iLCBTRVRDT0xPUl9GQUlMVVJFLCAiRVJST1IiLCBTRVRDT0xPUl9OT1JNQUwpOworCQlwcmludGYoIiUtMnNcbiIsICIgIik7CisJCWdEdW1wQ21kQXJncyA9IDE7CS8qIHByaW50IGNtZCB3aGVuIHRoZXJlIGFyZSBlcnJvcnMgKi8KKwl9CisJZmZsdXNoKHN0ZG91dCk7CisJcmV0dXJuICgwKTsKK30JLyogU2x1cnBQcm9ncmVzcyAqLworCisKKworc3RhdGljIGludCBTbHVycEFsbChpbnQgZmQpCit7CisJY2hhciAqbmV3YnVmOworCXNpemVfdCBudG9yZWFkOworCXNzaXplX3QgbnJlYWQ7CisKKwlwcmludGYoIiVzJXMlcy5cbiIsIGdBY3Rpb24sIGdUYXJnZXRbMF0gPyAiICIgOiAiIiwgZ1RhcmdldCk7CisJZmZsdXNoKHN0ZG91dCk7CisKKwlmb3IoOzspIHsKKwkJaWYgKGdOQnVmVXNlZCA9PSAoZ05CdWZBbGxvY2F0ZWQgLSAxKSkgeworCQkJaWYgKChuZXdidWYgPSAoY2hhciAqKSByZWFsbG9jKGdCdWYsIGdOQnVmQWxsb2NhdGVkICsgVEVYVF9CTE9DS19TSVpFKSkgPT0gTlVMTCkgeworCQkJCXBlcnJvcigiY2NkdjogcmVhbGxvYyIpOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJZ05CdWZBbGxvY2F0ZWQgKz0gVEVYVF9CTE9DS19TSVpFOworCQkJZ0J1ZiA9IG5ld2J1ZjsKKwkJfQorCQludG9yZWFkID0gKGdOQnVmQWxsb2NhdGVkIC0gZ05CdWZVc2VkIC0gMSk7CisJCW5yZWFkID0gcmVhZChmZCwgZ0J1ZiArIGdOQnVmVXNlZCwgbnRvcmVhZCk7CisJCWlmIChucmVhZCA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCQljb250aW51ZTsKKwkJCXBlcnJvcigiY2NkdjogcmVhZCIpOworCQkJcmV0dXJuICgtMSk7CisJCX0gZWxzZSBpZiAobnJlYWQgPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKwkJZ05CdWZVc2VkICs9IG5yZWFkOworCQlnQnVmW2dOQnVmVXNlZF0gPSAnXDAnOworCX0KKwlXYWl0KCk7CisJZ0R1bXBDbWRBcmdzID0gKGdFeGl0U3RhdHVzICE9IDApOwkvKiBwcmludCBjbWQgd2hlbiB0aGVyZSBhcmUgZXJyb3JzICovCisJcmV0dXJuICgwKTsKK30JLyogU2x1cnBBbGwgKi8KKworCisKK3N0YXRpYyBjb25zdCBjaGFyICpCYXNlbmFtZShjb25zdCBjaGFyICpwYXRoKQoreworCWNvbnN0IGNoYXIgKmNwOworCWNwID0gc3RycmNocihwYXRoLCAnLycpOworCWlmIChjcCA9PSBOVUxMKQorCQlyZXR1cm4gKHBhdGgpOworCXJldHVybiAoY3AgKyAxKTsKK30JLyogQmFzZW5hbWUgKi8KKworCisKK3N0YXRpYyBjb25zdCBjaGFyICogRXh0ZW5zaW9uKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqY3AgPSBwYXRoOworCWNwID0gc3RycmNocihwYXRoLCAnLicpOworCWlmIChjcCA9PSBOVUxMKQorCQlyZXR1cm4gKCIiKTsKKwkvLyBwcmludGYoIkV4dGVuc2lvbj0nJXMnXG4iLCBjcCk7CisJcmV0dXJuIChjcCk7Cit9CS8qIEV4dGVuc2lvbiAqLworCisKKworc3RhdGljIHZvaWQgVXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBjY2R2IC9wYXRoL3RvL2NjIENGTEFHUy4uLlxuXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkkgd3JvdGUgdGhpcyB0byByZWR1Y2UgdGhlIGRlbHVnZSBNYWtlIG91dHB1dCB0byBtYWtlIGZpbmRpbmcgYWN0dWFsIHByb2JsZW1zXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgImVhc2llci4gIEl0IGlzIGludGVuZGVkIHRvIGJlIGludm9rZWQgZnJvbSBNYWtlZmlsZXMsIGxpa2UgdGhpcy4gIEluc3RlYWQgb2Y6XG5cbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHQuYy5vOlxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdFx0JChDQykgJChDRkxBR1MpICQoREVGUykgJChDUFBGTEFHUykgJDwgLWNcbiIpOworCWZwcmludGYoc3RkZXJyLCAiXG5SZXdyaXRlIHlvdXIgcnVsZSBzbyBpdCBsb29rcyBsaWtlOlxuXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0LmMubzpcbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHRcdEBjY2R2ICQoQ0MpICQoQ0ZMQUdTKSAkKERFRlMpICQoQ1BQRkxBR1MpICQ8IC1jXG5cbiIpOworCWZwcmludGYoc3RkZXJyLCAiY2NkdiAxLjEuMCBpcyBGcmVlIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuICBFbmpveSFcbiIpOworCWZwcmludGYoc3RkZXJyLCAiICAtLSBNaWtlIEdsZWFzb24sIE5jRlRQIFNvZnR3YXJlIDxodHRwOi8vd3d3Lm5jZnRwLmNvbT5cbiIpOworCWV4aXQoOTYpOworfQkvKiBVc2FnZSAqLworCisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBwaXBlMVsyXTsKKwlpbnQgZGV2bnVsbDsKKwljaGFyIGVtZXJnWzI1Nl07CisJaW50IGZkOworCWludCBucmVhZDsKKwlpbnQgaTsKKwlpbnQgY2MgPSAwLCBwY2ggPSAwOworCWNvbnN0IGNoYXIgKnF1b3RlOworCisJaWYgKGFyZ2MgPCAyKQorCQlVc2FnZSgpOworCisJc25wcmludGYoZ0FjdGlvbiwgc2l6ZW9mKGdBY3Rpb24pLCAiUnVubmluZyAlcyIsIEJhc2VuYW1lKGFyZ3ZbMV0pKTsKKwltZW1zZXQoZ0FyZ3NTdHIsIDAsIHNpemVvZihnQXJnc1N0cikpOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJLy8gcHJpbnRmKCJhcmd2WyVkXT0nJXMnXG4iLCBpLCBhcmd2W2ldKTsKKwkJcXVvdGUgPSAoc3RyY2hyKGFyZ3ZbaV0sICcgJykgIT0gTlVMTCkgPyAiXCIiIDogIiI7CisJCXNucHJpbnRmKGdBcmdzU3RyICsgc3RybGVuKGdBcmdzU3RyKSwgc2l6ZW9mKGdBcmdzU3RyKSAtIHN0cmxlbihnQXJnc1N0ciksICIlcyVzJXMlcyVzIiwgKGkgPT0gMSkgPyAiIiA6ICIgIiwgcXVvdGUsIGFyZ3ZbaV0sIHF1b3RlLCAoaSA9PSAoYXJnYyAtIDEpKSA/ICJcbiIgOiAiIik7CisJCWlmICgoc3RyY21wKGFyZ3ZbaV0sICItbyIpID09IDApICYmICgoaSArIDEpIDwgYXJnYykpIHsKKwkJCWlmIChzdHJjYXNlY21wKEV4dGVuc2lvbihhcmd2W2kgKyAxXSksICIubyIpICE9IDApIHsKKwkJCQlzdHJjcHkoZ0FjdGlvbiwgIkxpbmtpbmciKTsKKwkJCQlzbnByaW50ZihnVGFyZ2V0LCBzaXplb2YoZ1RhcmdldCksICIlcyIsIEJhc2VuYW1lKGFyZ3ZbaSArIDFdKSk7CisJCQl9CisJCX0gZWxzZSBpZiAoc3RyY2hyKCItKyIsIChpbnQpIGFyZ3ZbaV1bMF0pICE9IE5VTEwpIHsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHN0cm5jYXNlY21wKEV4dGVuc2lvbihhcmd2W2ldKSwgIi5jIiwgMikgPT0gMCkgeworCQkJY2MrKzsKKwkJCXNucHJpbnRmKGdUYXJnZXQsIHNpemVvZihnVGFyZ2V0KSwgIiVzIiwgQmFzZW5hbWUoYXJndltpXSkpOworCQkJLy8gcHJpbnRmKCJnVGFyZ2V0PSclcydcbiIsIGdUYXJnZXQpOworCQl9IGVsc2UgaWYgKChzdHJuY2FzZWNtcChFeHRlbnNpb24oYXJndltpXSksICIuaCIsIDIpID09IDApICYmIChjYyA9PSAwKSkgeworCQkJcGNoKys7CisJCQlzbnByaW50ZihnVGFyZ2V0LCBzaXplb2YoZ1RhcmdldCksICIlcyIsIEJhc2VuYW1lKGFyZ3ZbaV0pKTsKKwkJfSBlbHNlIGlmICgoaSA9PSAxKSAmJiAoc3RyY21wKEJhc2VuYW1lKGFyZ3ZbaV0pLCAiYXIiKSA9PSAwKSkgeworCQkJc25wcmludGYoZ0FyLCBzaXplb2YoZ0FyKSwgIiVzIiwgQmFzZW5hbWUoYXJndltpXSkpOworCQl9IGVsc2UgaWYgKChnQXJMaWJyYXJ5VGFyZ2V0WzBdID09ICdcMCcpICYmIChzdHJjYXNlY21wKEV4dGVuc2lvbihhcmd2W2ldKSwgIi5hIikgPT0gMCkpIHsKKwkJCXNucHJpbnRmKGdBckxpYnJhcnlUYXJnZXQsIHNpemVvZihnQXJMaWJyYXJ5VGFyZ2V0KSwgIiVzIiwgQmFzZW5hbWUoYXJndltpXSkpOworCQl9CisJfQorCWlmICgoZ0FyWzBdICE9ICdcMCcpICYmIChnQXJMaWJyYXJ5VGFyZ2V0WzBdICE9ICdcMCcpKSB7CisJCXN0cmNweShnQWN0aW9uLCAiQ3JlYXRpbmcgbGlicmFyeSIpOworCQlzbnByaW50ZihnVGFyZ2V0LCBzaXplb2YoZ1RhcmdldCksICIlcyIsIGdBckxpYnJhcnlUYXJnZXQpOworCX0gZWxzZSBpZiAocGNoID4gMCkgeworCQlzdHJjcHkoZ0FjdGlvbiwgIlByZWNvbXBpbGluZyIpOworCX0gZWxzZSBpZiAoY2MgPiAwKSB7CisJCXN0cmNweShnQWN0aW9uLCAiQ29tcGlsaW5nIik7CisJfQorCisJaWYgKHBpcGUocGlwZTEpIDwgMCkgeworCQlwZXJyb3IoImNjZHY6IHBpcGUiKTsKKwkJZXhpdCg5Nyk7CisJfQorCisJKHZvaWQpIGNsb3NlKDApOworCWRldm51bGwgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IsIDAwNjY2KTsKKwlpZiAoKGRldm51bGwgIT0gMCkgJiYgKGR1cDIoZGV2bnVsbCwgMCkgPT0gMCkpCisJCWNsb3NlKGRldm51bGwpOworCisJZ0NDUElEID0gKGludCkgZm9yaygpOworCWlmIChnQ0NQSUQgPCAwKSB7CisJCSh2b2lkKSBjbG9zZShwaXBlMVswXSk7CisJCSh2b2lkKSBjbG9zZShwaXBlMVsxXSk7CisJCXBlcnJvcigiY2NkdjogZm9yayIpOworCQlleGl0KDk4KTsKKwl9IGVsc2UgaWYgKGdDQ1BJRCA9PSAwKSB7CisJCS8qIENoaWxkICovCisJCSh2b2lkKSBjbG9zZShwaXBlMVswXSk7CQkvKiBjbG9zZSByZWFkIGVuZCAqLworCQlpZiAocGlwZTFbMV0gIT0gMSkgewkJLyogdXNlIHdyaXRlIGVuZCBvbiBzdGRvdXQgKi8KKwkJCSh2b2lkKSBkdXAyKHBpcGUxWzFdLCAxKTsKKwkJCSh2b2lkKSBjbG9zZShwaXBlMVsxXSk7CisJCX0KKwkJKHZvaWQpIGR1cDIoMSwgMik7CQkvKiB1c2Ugd3JpdGUgZW5kIG9uIHN0ZGVyciAqLworCQlleGVjdnAoYXJndlsxXSwgYXJndiArIDEpOworCQlwZXJyb3IoYXJndlsxXSk7CisJCWV4aXQoOTkpOworCX0KKworCS8qIHBhcmVudCAqLworCSh2b2lkKSBjbG9zZShwaXBlMVsxXSk7CQkvKiBjbG9zZSB3cml0ZSBlbmQgKi8KKwlmZCA9IHBpcGUxWzBdOwkJCS8qIHVzZSByZWFkIGVuZCAqLworCisJZ0NvbHVtbnMgPSAoZ2V0ZW52KCJDT0xVTU5TIikgIT0gTlVMTCkgPyBhdG9pKGdldGVudigiQ09MVU1OUyIpKSA6IDgwOworCWdBTlNJRXNjYXBlcyA9IChnZXRlbnYoIlRFUk0iKSAhPSBOVUxMKSAmJiAoc3Ryc3RyKFRFUk1TLCBnZXRlbnYoIlRFUk0iKSkgIT0gTlVMTCk7CisJZ0J1ZiA9IChjaGFyICopIG1hbGxvYyhURVhUX0JMT0NLX1NJWkUpOworCWlmIChnQnVmID09IE5VTEwpIAorCQlnb3RvIHBhbmljOworCWdOQnVmVXNlZCA9IDA7CisJZ05CdWZBbGxvY2F0ZWQgPSBURVhUX0JMT0NLX1NJWkU7CisJaWYgKHN0cmxlbihnQXJnc1N0cikgPCAoZ05CdWZBbGxvY2F0ZWQgLSAxKSkgeworCQlzdHJjcHkoZ0J1ZiwgZ0FyZ3NTdHIpOworCQlnTkJ1ZlVzZWQgPSBzdHJsZW4oZ0FyZ3NTdHIpOworCX0KKworCWlmIChpc2F0dHkoMSkpIHsKKwkJaWYgKFNsdXJwUHJvZ3Jlc3MoZmQpIDwgMCkKKwkJCWdvdG8gcGFuaWM7CisJfSBlbHNlIHsKKwkJaWYgKFNsdXJwQWxsKGZkKSA8IDApCisJCQlnb3RvIHBhbmljOworCX0KKwlEdW1wRm9ybWF0dGVkT3V0cHV0KCk7CisJZXhpdChnRXhpdFN0YXR1cyk7CisKK3BhbmljOgorCWdEdW1wQ21kQXJncyA9IDE7CS8qIHByaW50IGNtZCB3aGVuIHRoZXJlIGFyZSBlcnJvcnMgKi8KKwlEdW1wRm9ybWF0dGVkT3V0cHV0KCk7CisJd2hpbGUgKChucmVhZCA9IHJlYWQoZmQsIGVtZXJnLCAoc2l6ZV90KSBzaXplb2YoZW1lcmcpKSkgPiAwKQorCQkodm9pZCkgd3JpdGUoMiwgZW1lcmcsIChzaXplX3QpIG5yZWFkKTsKKwlXYWl0KCk7CisJZXhpdChnRXhpdFN0YXR1cyk7Cit9CS8qIG1haW4gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvTWFrZWZpbGUgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOGNjMWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L01ha2VmaWxlCkBAIC0wLDAgKzEsMjAgQEAKK2RlZmF1bHQ6IGFsbAorCitjZW50cmluby1kZWNvZGU6IGNlbnRyaW5vLWRlY29kZS5jCisJJChDQykgJChDRkxBR1MpIC1vIGNlbnRyaW5vLWRlY29kZSBjZW50cmluby1kZWNvZGUuYworCitkdW1wX3BzYjogZHVtcF9wc2IuYworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkdW1wX3BzYiBkdW1wX3BzYi5jCisKK2ludGVsX2dzaWM6IGludGVsX2dzaWMuYworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBpbnRlbF9nc2ljIC1sbHJtaSBpbnRlbF9nc2ljLmMKKworcG93ZXJub3ctazgtZGVjb2RlOiBwb3dlcm5vdy1rOC1kZWNvZGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBwb3dlcm5vdy1rOC1kZWNvZGUgcG93ZXJub3ctazgtZGVjb2RlLmMKKworYWxsOiBjZW50cmluby1kZWNvZGUgZHVtcF9wc2IgaW50ZWxfZ3NpYyBwb3dlcm5vdy1rOC1kZWNvZGUKKworY2xlYW46CisJcm0gLXJmIGNlbnRyaW5vLWRlY29kZSBkdW1wX3BzYiBpbnRlbF9nc2ljIHBvd2Vybm93LWs4LWRlY29kZQorCisuUEhPTlk6IGFsbCBkZWZhdWx0IGNsZWFuCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2NlbnRyaW5vLWRlY29kZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9jZW50cmluby1kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWYyNGNjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9jZW50cmluby1kZWNvZGUuYwpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqICAoQykgMjAwMyAtIDIwMDQgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogQmFzZWQgb24gY29kZSBmb3VuZCBpbgorICogbGludXgvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYworICogYW5kIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IEplcmVteSBGaXR6aGFyZGluZ2UuCisgKgorICogVVNBR0U6IHNpbXBseSBydW4gaXQgdG8gZGVjb2RlIHRoZSBjdXJyZW50IHNldHRpbmdzIG9uIENQVSAwLAorICoJICBvciBwYXNzIHRoZSBDUFUgbnVtYmVyIGFzIGFyZ3VtZW50LCBvciBwYXNzIHRoZSBNU1IgY29udGVudAorICoJICBhcyBhcmd1bWVudC4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjZGVmaW5lIE1DUFUJMzIKKworI2RlZmluZSBNU1JfSUEzMl9QRVJGX1NUQVRVUwkweDE5OAorCitzdGF0aWMgaW50IHJkbXNyKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBtc3IsCisJCSB1bnNpZ25lZCBpbnQgKmxvLCB1bnNpZ25lZCBpbnQgKmhpKQoreworCWludCBmZDsKKwljaGFyIGZpbGVbMjBdOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJaW50IHJldHZhbCA9IC0xOworCisJKmxvID0gKmhpID0gMDsKKworCWlmIChjcHUgPiBNQ1BVKQorCQlnb3RvIGVycjE7CisKKwlzcHJpbnRmKGZpbGUsICIvZGV2L2NwdS8lZC9tc3IiLCBjcHUpOworCWZkID0gb3BlbihmaWxlLCBPX1JET05MWSk7CisKKwlpZiAoZmQgPCAwKQorCQlnb3RvIGVycjE7CisKKwlpZiAobHNlZWsoZmQsIG1zciwgU0VFS19DVVIpID09IC0xKQorCQlnb3RvIGVycjI7CisKKwlpZiAocmVhZChmZCwgJnZhbCwgOCkgIT0gOCkKKwkJZ290byBlcnIyOworCisJKmxvID0gKHVpbnQzMl90ICkodmFsICYgMHhmZmZmZmZmZnVsbCk7CisJKmhpID0gKHVpbnQzMl90ICkodmFsPj4zMiAmIDB4ZmZmZmZmZmZ1bGwpOworCisJcmV0dmFsID0gMDsKK2VycjI6CisJY2xvc2UoZmQpOworZXJyMToKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGUgKHVuc2lnbmVkIGludCBtc3IpCit7CisJdW5zaWduZWQgaW50IG11bHRpcGxpZXI7CisJdW5zaWduZWQgaW50IG12OworCisJbXVsdGlwbGllciA9ICgobXNyID4+IDgpICYgMHhGRik7CisKKwltdiA9ICgoKG1zciAmIDB4RkYpICogMTYpICsgNzAwKTsKKworCXByaW50ZigiMHgleCBtZWFucyBtdWx0aXBsaWVyICVkIEAgJWQgbVZcbiIsIG1zciwgbXVsdGlwbGllciwgbXYpOworfQorCitzdGF0aWMgaW50IGRlY29kZV9saXZlKHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgaW50IGxvLCBoaTsKKwlpbnQgZXJyOworCisJZXJyID0gcmRtc3IoY3B1LCBNU1JfSUEzMl9QRVJGX1NUQVRVUywgJmxvLCAmaGkpOworCisJaWYgKGVycikgeworCQlwcmludGYoImNhbid0IGdldCBNU1JfSUEzMl9QRVJGX1NUQVRVUyBmb3IgY3B1ICVkXG4iLCBjcHUpOworCQlwcmludGYoIlBvc3NpYmxlIHRyb3VibGU6IHlvdSBkb24ndCBydW4gYW4gRW5oYW5jZWQgU3BlZWRTdGVwIGNhcGFibGUgY3B1XG4iKTsKKwkJcHJpbnRmKCJvciB5b3UgYXJlIG5vdCByb290LCBvciB0aGUgbXNyIGRyaXZlciBpcyBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAxOworCX0KKworCWRlY29kZShsbyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgY3B1LCBtb2RlID0gMDsKKworCWlmIChhcmdjIDwgMikKKwkJY3B1ID0gMDsKKwllbHNlIHsKKwkJY3B1ID0gc3RydG91bChhcmd2WzFdLCBOVUxMLCAwKTsKKwkJaWYgKGNwdSA+PSBNQ1BVKQorCQkJbW9kZSA9IDE7CisJfQorCisJaWYgKG1vZGUpCisJCWRlY29kZShjcHUpOworCWVsc2UKKwkJZGVjb2RlX2xpdmUoY3B1KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9kdW1wX3BzYi5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9kdW1wX3BzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNmE0NzUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2R1bXBfcHNiLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBkdW1wX3BzYi4gKGMpIDIwMDQsIERhdmUgSm9uZXMsIFJlZCBIYXQgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Mi4KKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjZGVmaW5lIExFTiAoMHgxMDAwMDAgLSAweGMwMDAwKQorI2RlZmluZSBPRkZTRVQgKDB4YzAwMDApCisKKyNpZm5kZWYgX19wYWNrZWQKKyNkZWZpbmUgX19wYWNrZWQgX19hdHRyaWJ1dGUoKHBhY2tlZCkpCisjZW5kaWYKKworc3RhdGljIGxvbmcgcmVsZXZhbnQ7CisKK3N0YXRpYyBjb25zdCBpbnQgZmlkX3RvX211bHRbMzJdID0geworCTExMCwgMTE1LCAxMjAsIDEyNSwgNTAsIDU1LCA2MCwgNjUsCisJNzAsIDc1LCA4MCwgODUsIDkwLCA5NSwgMTAwLCAxMDUsCisJMzAsIDE5MCwgNDAsIDIwMCwgMTMwLCAxMzUsIDE0MCwgMjEwLAorCTE1MCwgMjI1LCAxNjAsIDE2NSwgMTcwLCAxODAsIC0xLCAtMSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgdmlkX3RvX3ZvbHRhZ2VbMzJdID0geworCTIwMDAsIDE5NTAsIDE5MDAsIDE4NTAsIDE4MDAsIDE3NTAsIDE3MDAsIDE2NTAsCisJMTYwMCwgMTU1MCwgMTUwMCwgMTQ1MCwgMTQwMCwgMTM1MCwgMTMwMCwgMCwKKwkxMjc1LCAxMjUwLCAxMjI1LCAxMjAwLCAxMTc1LCAxMTUwLCAxMTI1LCAxMTAwLAorCTEwNzUsIDEwNTAsIDEwMjQsIDEwMDAsIDk3NSwgOTUwLCA5MjUsIDAsCit9OworCitzdHJ1Y3QgcHNiX2hlYWRlciB7CisJY2hhciBzaWduYXR1cmVbMTBdOworCXVfY2hhciB2ZXJzaW9uOworCXVfY2hhciBmbGFnczsKKwl1X3Nob3J0IHNldHRsaW5ndGltZTsKKwl1X2NoYXIgcmVzMTsKKwl1X2NoYXIgbnVtcHN0OworfSBfX3BhY2tlZDsKKworc3RydWN0IHBzdF9oZWFkZXIgeworCXVfaW50MzJfdCBjcHVpZDsKKwl1X2NoYXIgZnNiOworCXVfY2hhciBtYXhmaWQ7CisJdV9jaGFyIHN0YXJ0dmlkOworCXVfY2hhciBudW1wc3RhdGVzOworfSBfX3BhY2tlZDsKKworc3RhdGljIHVfaW50IGZzYjsKK3N0YXRpYyB1X2ludCBzZ3RjOworCitzdGF0aWMgaW50CitkZWNvZGVfcHN0KGNoYXIgKnAsIGludCBucHN0YXRlcykKK3sKKwlpbnQgaTsKKwlpbnQgZnJlcSwgZmlkLCB2aWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnBzdGF0ZXM7ICsraSkgeworCQlmaWQgPSAqcCsrOworCQl2aWQgPSAqcCsrOworCQlmcmVxID0gMTAwICogZmlkX3RvX211bHRbZmlkXSAqIGZzYjsKKworCQlwcmludGYoIiAgICUyZCAlOGRrSHogIEZJRCAlMDJ4ICglMmQuJTAxZCkgIFZJRCAlMDJ4ICglNGRtVilcbiIsCisJCSAgICAgICBpLAorCQkgICAgICAgZnJlcSwKKwkJICAgICAgIGZpZCwgZmlkX3RvX211bHRbZmlkXS8xMCwgZmlkX3RvX211bHRbZmlkXSUxMCwKKwkJICAgICAgIHZpZCwgdmlkX3RvX3ZvbHRhZ2VbdmlkXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYwordm9pZCBkZWNvZGVfcHNiKGNoYXIgKnAsIGludCBudW1wc3QpCit7CisJaW50IGk7CisJc3RydWN0IHBzYl9oZWFkZXIgKnBzYjsKKwlzdHJ1Y3QgcHN0X2hlYWRlciAqcHN0OworCisJcHNiID0gKHN0cnVjdCBwc2JfaGVhZGVyKikgcDsKKworCWlmIChwc2ItPnZlcnNpb24gIT0gMHgxMikKKwkJcmV0dXJuOworCisJcHJpbnRmKCJQU0IgdmVyc2lvbjogJWhoeCBmbGFnczogJWhoeCBzZXR0bGluZyB0aW1lICVoaHV1cyByZXMxICVoaHggbnVtIHBzdCAlaGh1XG4iLAorCQkJcHNiLT52ZXJzaW9uLAorCQkJcHNiLT5mbGFncywKKwkJCXBzYi0+c2V0dGxpbmd0aW1lLAorCQkJcHNiLT5yZXMxLAorCQkJcHNiLT5udW1wc3QpOworCXNndGMgPSBwc2ItPnNldHRsaW5ndGltZSAqIDEwMDsKKworCWlmIChzZ3RjIDwgMTAwMDApCisJCXNndGMgPSAxMDAwMDsKKworCXAgPSAoKGNoYXIgKikgcHNiKSArIHNpemVvZihzdHJ1Y3QgcHNiX2hlYWRlcik7CisKKwlpZiAobnVtcHN0IDwgMCkKKwkJbnVtcHN0ID0gcHNiLT5udW1wc3Q7CisJZWxzZQorCQlwcmludGYoIk92ZXJyaWRpbmcgbnVtYmVyIG9mIHBzdCA6JWRcbiIsIG51bXBzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtcHN0OyBpKyspIHsKKwkJcHN0ID0gKHN0cnVjdCBwc3RfaGVhZGVyKikgcDsKKworCQlpZiAocmVsZXZhbnQgIT0gMCkgeworCQkJaWYgKHJlbGV2YW50IT0gcHN0LT5jcHVpZCkKKwkJCQlnb3RvIG5leHRfb25lOworCQl9CisKKwkJcHJpbnRmKCIgIFBTVCAlZCAgY3B1aWQgJS4zeCBmc2IgJWhodSBtZmlkICVoaHggc3ZpZCAlaGh4IG51bWJlcnN0YXRlcyAlaGh1XG4iLAorCQkJCWkrMSwKKwkJCQlwc3QtPmNwdWlkLAorCQkJCXBzdC0+ZnNiLAorCQkJCXBzdC0+bWF4ZmlkLAorCQkJCXBzdC0+c3RhcnR2aWQsCisJCQkJcHN0LT5udW1wc3RhdGVzKTsKKworCQlmc2IgPSBwc3QtPmZzYjsKKwkJZGVjb2RlX3BzdChwICsgc2l6ZW9mKHN0cnVjdCBwc3RfaGVhZGVyKSwgcHN0LT5udW1wc3RhdGVzKTsKKworbmV4dF9vbmU6CisJCXAgKz0gc2l6ZW9mKHN0cnVjdCBwc3RfaGVhZGVyKSArIDIqcHN0LT5udW1wc3RhdGVzOworCX0KKworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBpbmZvX29wdHNbXSA9IHsKKwl7Lm5hbWUgPSAibnVtcHN0IiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCS5mbGFnPU5VTEwsIC52YWw9J24nfSwKK307CisKK3ZvaWQgcHJpbnRfaGVscCh2b2lkKQoreworCXByaW50ZiAoIlVzYWdlOiBkdW1wX3BzYiBbb3B0aW9uc11cbiIpOworCXByaW50ZiAoIk9wdGlvbnM6XG4iKTsKKwlwcmludGYgKCIgIC1uLCAtLW51bXBzdCAgICAgU2V0IG51bWJlciBvZiBQU1QgdGFibGVzIHRvIHNjYW5cbiIpOworCXByaW50ZiAoIiAgLXIsIC0tcmVsZXZhbnQgICBPbmx5IGRpc3BsYXkgUFNUcyByZWxldmFudCB0byBjcHVpZCBOXG4iKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IGZkOworCWludCBudW1wc3Q9LTE7CisJaW50IHJldD0wLCBjb250PTE7CisJY2hhciAqbWVtID0gTlVMTDsKKwljaGFyICpwOworCisJZG8geworCQlyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaHI6bjoiLCBpbmZvX29wdHMsIE5VTEwpOworCQlzd2l0Y2ggKHJldCl7CisJCWNhc2UgJz8nOgorCQljYXNlICdoJzoKKwkJCXByaW50X2hlbHAoKTsKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJcmVsZXZhbnQgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxNik7CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQludW1wc3QgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7CisJCQlicmVhazsKKwkJY2FzZSAtMToKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCX0gd2hpbGUoY29udCk7CisKKwlmZCA9IG9wZW4oIi9kZXYvbWVtIiwgT19SRE9OTFkpOworCWlmIChmZCA8IDApIHsKKwkJcHJpbnRmICgiQ291bGRuJ3Qgb3BlbiAvZGV2L21lbS4gQXJlIHlvdSByb290P1xuIik7CisJCWV4aXQoMSk7CisJfQorCisJbWVtID0gbW1hcChtZW0sIDB4MTAwMDAwIC0gMHhjMDAwMCwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBmZCwgMHhjMDAwMCk7CisJY2xvc2UoZmQpOworCisJZm9yIChwID0gbWVtOyBwIC0gbWVtIDwgTEVOOyBwKz0xNikgeworCQlpZiAobWVtY21wKHAsICJBTURLN1BOT1chIiwgMTApID09IDApIHsKKwkJCWRlY29kZV9wc2IocCwgbnVtcHN0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXVubWFwKG1lbSwgTEVOKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvaW50ZWxfZ3NpYy5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9pbnRlbF9nc2ljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmNTI5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvaW50ZWxfZ3NpYy5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgKEMpIDIwMDMgIEJydW5vIER1Y3JvdAorICogIChDKSAyMDA0ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgZm91bmQgaW4KKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvaXN0LmggYW5kIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYworICogYW5kIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IEFuZHkgR3JvdmVyIDxhbmRyZXcuZ3JvdmVyQGludGVsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxscm1pLmg+CisKK2ludCBtYWluICh2b2lkKQoreworCXN0cnVjdCBMUk1JX3JlZ3MJcjsKKwlpbnQJCQlyZXR2YWw7CisKKwlpZiAoIUxSTUlfaW5pdCgpKQorCQlyZXR1cm4gMDsKKworCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKKworCXIuZWF4ID0gMHgwMDAwRTk4MDsKKwlyLmVkeCA9IDB4NDc1MzQ5NDM7CisKKwlyZXR2YWwgPSBMUk1JX2ludCgweDE1LCAmcik7CisKKwlpZiAoIXJldHZhbCkgeworCQlwcmludGYoIkZhaWxlZCFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHIuZWF4ID09IDB4NDc1MzQ5NDMpIHsKKwkJcHJpbnRmKCJCSU9TIHN1cHBvcnRzIEdTSUMgY2FsbDpcbiIpOworCQlwcmludGYoIlx0c2lnbmF0dXJlOiAlYyVjJWMlY1xuIiwKKwkJICAgICAgIChyLmVheCA+PiAyNCkgJiAweGZmLAorCQkgICAgICAgKHIuZWF4ID4+IDE2KSAmIDB4ZmYsCisJCSAgICAgICAoci5lYXggPj4gOCkgJiAweGZmLAorCQkgICAgICAgKHIuZWF4KSAmIDB4ZmYpOworCQlwcmludGYoIlx0Y29tbWFuZCBwb3J0ID0gMHglLjR4XG4iLAorCQkgICAgICAgci5lYnggJiAweGZmZmYpOworCQlwcmludGYoIlx0Y29tbWFuZCA9ICAgICAgMHglLjR4XG4iLAorCQkgICAgICAgKHIuZWJ4ID4+IDE2KSAmIDB4ZmZmZik7CisJCXByaW50ZigiXHRldmVudCBwb3J0ID0gICAweCUuOHhcbiIsIHIuZWN4KTsKKwkJcHJpbnRmKCJcdGZsYWdzID0gICAgICAgIDB4JS44eFxuIiwgci5lZHgpOworCQlpZiAoKChyLmVieCA+PiAxNikgJiAweGZmZmYpICE9IDB4ODIpIHsKKwkJCXByaW50Zigibm9uLWRlZmF1bHQgY29tbWFuZCB2YWx1ZS4gSWYgc3BlZWRzdGVwLXNtaSAiCisJCQkgICAgICAgImRvZXNuJ3Qgd29yayBvdXQgb2YgdGhlIGJveCxcbnlvdSBtYXkgd2FudCB0byAiCisJCQkgICAgICAgInRyeSBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgYnkgcGFzc2luZyAiCisJCQkgICAgICAgInNtaV9jbWQ9MHg4MiB0byB0aGUgbW9kdWxlXG4gT04gWU9VUiBPV04gIgorCQkJICAgICAgICJSSVNLLlxuIik7CisJCX0KKwkJaWYgKChyLmVieCAmIDB4ZmZmZikgIT0gMHhiMikgeworCQkJcHJpbnRmKCJub24tZGVmYXVsdCBjb21tYW5kIHBvcnQuIElmIHNwZWVkc3RlcC1zbWkgIgorCQkJICAgICAgICJkb2Vzbid0IHdvcmsgb3V0IG9mIHRoZSBib3gsXG55b3UgbWF5IHdhbnQgdG8gIgorCQkJICAgICAgICJ0cnkgb3V0IHRoZSBkZWZhdWx0IHZhbHVlIGJ5IHBhc3NpbmcgIgorCQkJICAgICAgICJzbWlfcG9ydD0weDgyIHRvIHRoZSBtb2R1bGVcbiBPTiBZT1VSIE9XTiAiCisJCQkgICAgICAgIlJJU0suXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ZigiQklPUyBET0VTIE5PVCBzdXBwb3J0IEdTSUMgY2FsbC4gIER1bXBpbmcgcmVnaXN0ZXJzIGFueXdheTpcbiIpOworCQlwcmludGYoImVheCA9IDB4JS44eFxuIiwgci5lYXgpOworCQlwcmludGYoImVieCA9IDB4JS44eFxuIiwgci5lYngpOworCQlwcmludGYoImVjeCA9IDB4JS44eFxuIiwgci5lY3gpOworCQlwcmludGYoImVkeCA9IDB4JS44eFxuIiwgci5lZHgpOworCQlwcmludGYoIk5vdGUgYWxzbyB0aGF0IHNvbWUgQklPUyBkbyBub3Qgc3VwcG9ydCB0aGUgaW5pdGlhbCAiCisJCSAgICAgICAiR1NJQyBjYWxsLCBidXQgdGhlIG5ld2VyXG5zcGVlZWRzdGVwLXNtaSBkcml2ZXIgbWF5ICIKKwkJICAgICAgICJ3b3JrLlxuRm9yIHRoaXMsIHlvdSBuZWVkIHRvIHBhc3Mgc29tZSBhcmd1bWVudHMgdG8gIgorCQkgICAgICAgInRoZSBzcGVlZHN0ZXAtc21pIGRyaXZlcjpcbiIpOworCQlwcmludGYoIlx0c21pX2NtZD0weD8/IHNtaV9wb3J0PTB4Pz8gc21pX3NpZz0xXG4iKTsKKwkJcHJpbnRmKCJcblVuZm9ydHVuYXRlbHksIHlvdSBoYXZlIHRvIGtub3cgd2hhdCBleGFjdGx5IGFyZSAiCisJCSAgICAgICAic21pX2NtZCBhbmQgc21pX3BvcnQsIGFuZCB0aGlzXG5pcyBzeXN0ZW0gIgorCQkgICAgICAgImRlcGVuZGFudC5cbiIpOworCX0KKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvcG93ZXJub3ctazgtZGVjb2RlLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L3Bvd2Vybm93LWs4LWRlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOGE2YjMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L3Bvd2Vybm93LWs4LWRlY29kZS5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiAgKEMpIDIwMDQgQnJ1bm8gRHVjcm90IDxkdWNyb3RAcG91cGlub3Uub3JnPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogQmFzZWQgb24gY29kZSBmb3VuZCBpbgorICogbGludXgvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisgKiBhbmQgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgUGF1bCBEZXZyaWVuZHQKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjZGVmaW5lIE1DUFUgMzIKKworI2RlZmluZSBNU1JfRklEVklEX1NUQVRVUwkweGMwMDEwMDQyCisKKyNkZWZpbmUgTVNSX1NfSElfQ1VSUkVOVF9WSUQJMHgwMDAwMDAxZgorI2RlZmluZSBNU1JfU19MT19DVVJSRU5UX0ZJRAkweDAwMDAwMDNmCisKK3N0YXRpYyBpbnQgZ2V0X2ZpZHZpZCh1aW50MzJfdCBjcHUsIHVpbnQzMl90ICpmaWQsIHVpbnQzMl90ICp2aWQpCit7CisJaW50IGVyciA9IDE7CisJdWludDY0X3QgbXNyID0gMDsKKwlpbnQgZmQ7CisJY2hhciBmaWxlWzIwXTsKKworCWlmIChjcHUgPiBNQ1BVKQorCQlnb3RvIG91dDsKKworCXNwcmludGYoZmlsZSwgIi9kZXYvY3B1LyVkL21zciIsIGNwdSk7CisKKwlmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCWdvdG8gb3V0OworCWxzZWVrKGZkLCBNU1JfRklEVklEX1NUQVRVUywgU0VFS19DVVIpOworCWlmIChyZWFkKGZkLCAmbXNyLCA4KSAhPSA4KQorCQlnb3RvIGVycjE7CisKKwkqZmlkID0gKCh1aW50MzJfdCApKG1zciAmIDB4ZmZmZmZmZmZ1bGwpKSAmIE1TUl9TX0xPX0NVUlJFTlRfRklEOworCSp2aWQgPSAoKHVpbnQzMl90ICkobXNyPj4zMiAmIDB4ZmZmZmZmZmZ1bGwpKSAmIE1TUl9TX0hJX0NVUlJFTlRfVklEOworCWVyciA9IDA7CitlcnIxOgorCWNsb3NlKGZkKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIFJldHVybiBhIGZyZXF1ZW5jeSBpbiBNSHosIGdpdmVuIGFuIGlucHV0IGZpZCAqLworc3RhdGljIHVpbnQzMl90IGZpbmRfZnJlcV9mcm9tX2ZpZCh1aW50MzJfdCBmaWQpCit7CisJcmV0dXJuIDgwMCArIChmaWQgKiAxMDApOworfQorCisvKiBSZXR1cm4gYSB2b2x0YWdlIGluIG1pbGlWb2x0cywgZ2l2ZW4gYW4gaW5wdXQgdmlkICovCitzdGF0aWMgdWludDMyX3QgZmluZF9taWxsaXZvbHRzX2Zyb21fdmlkKHVpbnQzMl90IHZpZCkKK3sKKwlyZXR1cm4gMTU1MC12aWQqMjU7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBlcnI7CisJaW50IGNwdTsKKwl1aW50MzJfdCBmaWQsIHZpZDsKKworCWlmIChhcmdjIDwgMikKKwkJY3B1ID0gMDsKKwllbHNlCisJCWNwdSA9IHN0cnRvdWwoYXJndlsxXSwgTlVMTCwgMCk7CisKKwllcnIgPSBnZXRfZmlkdmlkKGNwdSwgJmZpZCwgJnZpZCk7CisKKwlpZiAoZXJyKSB7CisJCXByaW50ZigiY2FuJ3QgZ2V0IGZpZCwgdmlkIGZyb20gTVNSXG4iKTsKKwkJcHJpbnRmKCJQb3NzaWJsZSB0cm91YmxlOiB5b3UgZG9uJ3QgcnVuIGEgcG93ZXJub3ctazggY2FwYWJsZSBjcHVcbiIpOworCQlwcmludGYoIm9yIHlvdSBhcmUgbm90IHJvb3QsIG9yIHRoZSBtc3IgZHJpdmVyIGlzIG5vdCBwcmVzZW50XG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkKKwlwcmludGYoImNwdSAlZCBjdXJyZW50bHkgYXQgJWQgTUh6IGFuZCAlZCBtVlxuIiwKKwkJCWNwdSwKKwkJCWZpbmRfZnJlcV9mcm9tX2ZpZChmaWQpLAorCQkJZmluZF9taWxsaXZvbHRzX2Zyb21fdmlkKHZpZCkpOworCQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcva2VybmVsL01ha2VmaWxlIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcva2VybmVsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjE0NmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9rZXJuZWwvTWFrZWZpbGUKQEAgLTAsMCArMSwyMyBAQAorb2JqLW0JOj0KKworS0RJUgk6PSAvbGliL21vZHVsZXMvJChzaGVsbCB1bmFtZSAtcikvYnVpbGQKK1BXRAkJOj0gJChzaGVsbCBwd2QpCitLTUlTQyAgIDo9IC9saWIvbW9kdWxlcy8kKHNoZWxsIHVuYW1lIC1yKS9jcHVmcmVxdXRpbHMvCisKK2lmZXEgKCIkKENPTkZJR19YODZfVFNDKSIsICJ5IikKKyAgb2JqLW0JICs9IGNwdWZyZXEtdGVzdF90c2MubworZW5kaWYKKworZGVmYXVsdDoKKwkkKE1BS0UpIC1DICQoS0RJUikgTT0kKFBXRCkKKworY2xlYW46CisJLSBybSAtcmYgKi5vICoua28gLnRtcC12ZXJzaW9ucyAuKi5jbWQgLioubW9kLiogKi5tb2QuYworCS0gcm0gLXJmIC50bXBfdmVyc2lvbnMqIE1vZHVsZS5zeW12ZXJzIG1vZHVsZXMub3JkZXIKKworaW5zdGFsbDogZGVmYXVsdAorCWluc3RhbGwgLWQgJChLTUlTQykKKwlpbnN0YWxsIC1tIDY0NCAtYyAqLmtvICQoS01JU0MpCisJL3NiaW4vZGVwbW9kIC1hCisKK2FsbDoJZGVmYXVsdApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcva2VybmVsL2NwdWZyZXEtdGVzdF90c2MuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9jcHVmcmVxLXRlc3RfdHNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjYWNlNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9jcHVmcmVxLXRlc3RfdHNjLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiB0ZXN0IG1vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBUU0MtYmFzZWQgZGVsYXkgcm91dGluZSBjb250aW51ZXMKKyAqIHRvIHdvcmsgcHJvcGVybHkgYWZ0ZXIgY3B1ZnJlcSB0cmFuc2l0aW9ucy4gTmVlZHMgQUNQSSB0byB3b3JrCisgKiBwcm9wZXJseS4KKyAqCisgKiBCYXNlZCBwYXJ0bHkgb24gdGhlIFBvd2VyIE1hbmFnZW1lbnQgVGltZXIgKFBNVE1SKSBjb2RlIHRvIGJlIGZvdW5kCisgKiBpbiBhcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl9wbS5jIG9uIHJlY2VudCAyLjYuIGtlcm5lbHMsIGVzcGVjaWFsbHkKKyAqIGNvZGUgd3JpdHRlbiBieSBKb2huIFN0dWx0ei4gVGhlIHJlYWRfcG10bXIgZnVuY3Rpb24gd2FzIGNvcGllZCB2ZXJiYXRpbQorICogZnJvbSB0aGF0IGZpbGUuCisgKgorICogKEMpIDIwMDQgRG9taW5payBCcm9kb3dza2kKKyAqCisgKiBUbyB1c2U6CisgKiAxLikgcGFzcyBjbG9jaz10c2MgdG8gdGhlIGtlcm5lbCBvbiB5b3VyIGJvb3Rsb2FkZXIKKyAqIDIuKSBtb2Rwcm9iZSB0aGlzIG1vZHVsZSAoaXQnbGwgZmFpbCkKKyAqIDMuKSBjaGFuZ2UgQ1BVIGZyZXF1ZW5jeQorICogNC4pIG1vZHByb2JlIHRoaXMgbW9kdWxlIGFnYWluCisgKiA1LikgaWYgdGhlIHRoaXJkIHZhbHVlLCAiZGlmZl9wbXRtciIsIGNoYW5nZXMgYmV0d2VlbiAyLiBhbmQgNC4sIHRoZQorICogICAgIFRTQy1iYXNlZCBkZWxheSByb3V0aW5lIG9uIHRoZSBMaW51eCBrZXJuZWwgZG9lcyBub3QgY29ycmVjdGx5CisgKiAgICAgaGFuZGxlIHRoZSBjcHVmcmVxIHRyYW5zaXRpb24uIFBsZWFzZSByZXBvcnQgdGhpcyB0bworICogICAgIGNwdWZyZXFAdmdlci5rZXJuZWwub3JnCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKworc3RhdGljIGludCBwbV90bXJfaW9wb3J0ID0gMDsKKworLypoZWxwZXIgZnVuY3Rpb24gdG8gc2FmZWx5IHJlYWQgYWNwaSBwbSB0aW1lc291cmNlKi8KK3N0YXRpYyB1MzIgcmVhZF9wbXRtcih2b2lkKQoreworCXUzMiB2MT0wLHYyPTAsdjM9MDsKKwkvKiBJdCBoYXMgYmVlbiByZXBvcnRlZCB0aGF0IGJlY2F1c2Ugb2YgdmFyaW91cyBicm9rZW4KKwkgKiBjaGlwc2V0cyAoSUNINCwgUElJWDQgYW5kIFBJSVg0RSkgd2hlcmUgdGhlIEFDUEkgUE0gdGltZQorCSAqIHNvdXJjZSBpcyBub3QgbGF0Y2hlZCwgc28geW91IG11c3QgcmVhZCBpdCBtdWx0aXBsZQorCSAqIHRpbWVzIHRvIGluc3VyZSBhIHNhZmUgdmFsdWUgaXMgcmVhZC4KKwkgKi8KKwlkbyB7CisJCXYxID0gaW5sKHBtX3Rtcl9pb3BvcnQpOworCQl2MiA9IGlubChwbV90bXJfaW9wb3J0KTsKKwkJdjMgPSBpbmwocG1fdG1yX2lvcG9ydCk7CisJfSB3aGlsZSAoKHYxID4gdjIgJiYgdjEgPCB2MykgfHwgKHYyID4gdjMgJiYgdjIgPCB2MSkKKwkJIHx8ICh2MyA+IHYxICYmIHYzIDwgdjIpKTsKKworCS8qIG1hc2sgdGhlIG91dHB1dCB0byAyNCBiaXRzICovCisJcmV0dXJuICh2MiAmIDB4RkZGRkZGKTsKK30KKworc3RhdGljIGludCBfX2luaXQgY3B1ZnJlcV90ZXN0X3RzYyh2b2lkKQoreworCXUzMiBub3csIHRoZW4sIGRpZmY7CisJdTY0IG5vd190c2MsIHRoZW5fdHNjLCBkaWZmX3RzYzsKKwlpbnQgaTsKKworCS8qIHRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGVkIGlzIGNvcGllZCBmcm9tIGFyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYworCSAgIG9mIExpbnV4IHYyLjYuMjUuICovCisKKwkvKiBkZXRlY3QgdGhlIGxvY2F0aW9uIG9mIHRoZSBBQ1BJIFBNIFRpbWVyICovCisJaWYgKGFjcGlfZ2JsX0ZBRFQuaGVhZGVyLnJldmlzaW9uID49IEZBRFQyX1JFVklTSU9OX0lEKSB7CisJCS8qIEZBRFQgcmV2LiAyICovCisJCWlmIChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5zcGFjZV9pZCAhPQorCQkgICAgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPKQorCQkJcmV0dXJuIDA7CisKKwkJcG1fdG1yX2lvcG9ydCA9IGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3M7CisJCS8qCisJCSAqICJYIiBmaWVsZHMgYXJlIG9wdGlvbmFsIGV4dGVuc2lvbnMgdG8gdGhlIG9yaWdpbmFsIFYxLjAKKwkJICogZmllbGRzLCBzbyB3ZSBtdXN0IHNlbGVjdGl2ZWx5IGV4cGFuZCBWMS4wIGZpZWxkcyBpZiB0aGUKKwkJICogY29ycmVzcG9uZGluZyBYIGZpZWxkIGlzIHplcm8uCisJIAkgKi8KKwkJaWYgKCFwbV90bXJfaW9wb3J0KQorCQkJcG1fdG1yX2lvcG9ydCA9IGFjcGlfZ2JsX0ZBRFQucG1fdGltZXJfYmxvY2s7CisJfSBlbHNlIHsKKwkJLyogRkFEVCByZXYuIDEgKi8KKwkJcG1fdG1yX2lvcG9ydCA9IGFjcGlfZ2JsX0ZBRFQucG1fdGltZXJfYmxvY2s7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgInN0YXJ0LS0+IFxuIik7CisJdGhlbiA9IHJlYWRfcG10bXIoKTsKKyAgICAgICAgcmR0c2NsbCh0aGVuX3RzYyk7CisJZm9yIChpPTA7aTwyMDtpKyspIHsKKwkJbWRlbGF5KDEwMCk7CisJCW5vdyA9IHJlYWRfcG10bXIoKTsKKwkJcmR0c2NsbChub3dfdHNjKTsKKwkJZGlmZiA9IChub3cgLSB0aGVuKSAmIDB4RkZGRkZGOworCQlkaWZmX3RzYyA9IG5vd190c2MgLSB0aGVuX3RzYzsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInQxOiAlMDh1IHQyOiAlMDh1IGRpZmZfcG10bXI6ICUwOHUgZGlmZl90c2M6ICUwMTZsbHVcbiIsIHRoZW4sIG5vdywgZGlmZiwgZGlmZl90c2MpOworCQl0aGVuID0gbm93OworCQl0aGVuX3RzYyA9IG5vd190c2M7CisJfQorCXByaW50ayhLRVJOX0RFQlVHICI8LS0gZW5kIFxuIik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcHVmcmVxX25vbmUodm9pZCkKK3sKKwlyZXR1cm47Cit9CisKK21vZHVsZV9pbml0KGNwdWZyZXFfdGVzdF90c2MpCittb2R1bGVfZXhpdChjcHVmcmVxX25vbmUpCisKKworTU9EVUxFX0FVVEhPUigiRG9taW5payBCcm9kb3dza2kiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVmVyaWZ5IHRoZSBUU0MgY3B1ZnJlcSBub3RpZmllciB3b3JraW5nIGNvcnJlY3RseSAtLSBuZWVkcyBBQ1BJLWVuYWJsZWQgc3lzdGVtIik7CitNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L01ha2VmaWxlIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjEzOTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy94ODZfNjQvTWFrZWZpbGUKQEAgLTAsMCArMSwxNCBAQAorZGVmYXVsdDogYWxsCisKK2NlbnRyaW5vLWRlY29kZTogY2VudHJpbm8tZGVjb2RlLmMKKwkkKENDKSAkKENGTEFHUykgLW8gY2VudHJpbm8tZGVjb2RlIGNlbnRyaW5vLWRlY29kZS5jCisKK3Bvd2Vybm93LWs4LWRlY29kZTogcG93ZXJub3ctazgtZGVjb2RlLmMKKwkkKENDKSAkKENGTEFHUykgLW8gcG93ZXJub3ctazgtZGVjb2RlIHBvd2Vybm93LWs4LWRlY29kZS5jCisKK2FsbDogY2VudHJpbm8tZGVjb2RlIHBvd2Vybm93LWs4LWRlY29kZQorCitjbGVhbjoKKwlybSAtcmYgY2VudHJpbm8tZGVjb2RlIHBvd2Vybm93LWs4LWRlY29kZQorCisuUEhPTlk6IGFsbCBkZWZhdWx0IGNsZWFuCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy94ODZfNjQvY2VudHJpbm8tZGVjb2RlLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy94ODZfNjQvY2VudHJpbm8tZGVjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMjZmYjNmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9jZW50cmluby1kZWNvZGUuYwpAQCAtMCwwICsxIEBACisuLi9pMzg2L2NlbnRyaW5vLWRlY29kZS5jClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L3Bvd2Vybm93LWs4LWRlY29kZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L3Bvd2Vybm93LWs4LWRlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmViMzBjNzkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy94ODZfNjQvcG93ZXJub3ctazgtZGVjb2RlLmMKQEAgLTAsMCArMSBAQAorLi4vaTM4Ni9wb3dlcm5vdy1rOC1kZWNvZGUuYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9jcHVmcmVxLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9saWIvY3B1ZnJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlN2Q4YzU3YjQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9saWIvY3B1ZnJlcS5jCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogIChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiY3B1ZnJlcS5oIgorI2luY2x1ZGUgInN5c2ZzLmgiCisKK2ludCBjcHVmcmVxX2NwdV9leGlzdHModW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc3lzZnNfY3B1X2V4aXN0cyhjcHUpOworfQorCit1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X2ZyZXFfa2VybmVsKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2tlcm5lbChjcHUpOworfQorCit1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X2ZyZXFfaGFyZHdhcmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc3lzZnNfZ2V0X2ZyZXFfaGFyZHdhcmUoY3B1KTsKK30KKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF90cmFuc2l0aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc3lzZnNfZ2V0X2ZyZXFfdHJhbnNpdGlvbl9sYXRlbmN5KGNwdSk7Cit9CisKK2ludCBjcHVmcmVxX2dldF9oYXJkd2FyZV9saW1pdHModW5zaWduZWQgaW50IGNwdSwKKwkJCQl1bnNpZ25lZCBsb25nICptaW4sCisJCQkJdW5zaWduZWQgbG9uZyAqbWF4KQoreworCWlmICgoIW1pbikgfHwgKCFtYXgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gc3lzZnNfZ2V0X2ZyZXFfaGFyZHdhcmVfbGltaXRzKGNwdSwgbWluLCBtYXgpOworfQorCitjaGFyICogY3B1ZnJlcV9nZXRfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpIHsKKwlyZXR1cm4gc3lzZnNfZ2V0X2ZyZXFfZHJpdmVyKGNwdSk7Cit9CisKK3ZvaWQgY3B1ZnJlcV9wdXRfZHJpdmVyKGNoYXIgKiBwdHIpIHsKKwlpZiAoIXB0cikKKwkJcmV0dXJuOworCWZyZWUocHRyKTsKK30KKworc3RydWN0IGNwdWZyZXFfcG9saWN5ICogY3B1ZnJlcV9nZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpIHsKKwlyZXR1cm4gc3lzZnNfZ2V0X2ZyZXFfcG9saWN5KGNwdSk7Cit9CisKK3ZvaWQgY3B1ZnJlcV9wdXRfcG9saWN5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KSB7CisJaWYgKCghcG9saWN5KSB8fCAoIXBvbGljeS0+Z292ZXJub3IpKQorCQlyZXR1cm47CisKKwlmcmVlKHBvbGljeS0+Z292ZXJub3IpOworCXBvbGljeS0+Z292ZXJub3IgPSBOVUxMOworCWZyZWUocG9saWN5KTsKK30KKworc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqIGNwdWZyZXFfZ2V0X2F2YWlsYWJsZV9nb3Zlcm5vcnModW5zaWduZWQgaW50IGNwdSkgeworCXJldHVybiBzeXNmc19nZXRfZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzKGNwdSk7Cit9CisKK3ZvaWQgY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2dvdmVybm9ycyhzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICphbnkpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICp0bXAsICpuZXh0OworCisJaWYgKCFhbnkpCisJCXJldHVybjsKKworCXRtcCA9IGFueS0+Zmlyc3Q7CisJd2hpbGUgKHRtcCkgeworCQluZXh0ID0gdG1wLT5uZXh0OworCQlpZiAodG1wLT5nb3Zlcm5vcikKKwkJCWZyZWUodG1wLT5nb3Zlcm5vcik7CisJCWZyZWUodG1wKTsKKwkJdG1wID0gbmV4dDsKKwl9Cit9CisKKworc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICogY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlyZXR1cm4gc3lzZnNfZ2V0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyhjcHUpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyhzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKmFueSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqdG1wLCAqbmV4dDsKKworCWlmICghYW55KQorCQlyZXR1cm47CisKKwl0bXAgPSBhbnktPmZpcnN0OworCXdoaWxlICh0bXApIHsKKwkJbmV4dCA9IHRtcC0+bmV4dDsKKwkJZnJlZSh0bXApOworCQl0bXAgPSBuZXh0OworCX0KK30KKworCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICogY3B1ZnJlcV9nZXRfYWZmZWN0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2FmZmVjdGVkX2NwdXMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9hZmZlY3RlZF9jcHVzKHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmFueSkgeworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKnRtcCwgKm5leHQ7CisKKwlpZiAoIWFueSkKKwkJcmV0dXJuOworCisJdG1wID0gYW55LT5maXJzdDsKKwl3aGlsZSAodG1wKSB7CisJCW5leHQgPSB0bXAtPm5leHQ7CisJCWZyZWUodG1wKTsKKwkJdG1wID0gbmV4dDsKKwl9Cit9CisKKworc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqIGNwdWZyZXFfZ2V0X3JlbGF0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX3JlbGF0ZWRfY3B1cyhjcHUpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X3JlbGF0ZWRfY3B1cyhzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICphbnkpIHsKKwljcHVmcmVxX3B1dF9hZmZlY3RlZF9jcHVzKGFueSk7Cit9CisKKworaW50IGNwdWZyZXFfc2V0X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkgeworCWlmICghcG9saWN5IHx8ICEocG9saWN5LT5nb3Zlcm5vcikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN5c2ZzX3NldF9mcmVxX3BvbGljeShjcHUsIHBvbGljeSk7Cit9CisKKworaW50IGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9taW4odW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtaW5fZnJlcSkgeworCXJldHVybiBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfbWluKGNwdSwgbWluX2ZyZXEpOworfQorCisKK2ludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWF4KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWF4X2ZyZXEpIHsKKwlyZXR1cm4gc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X21heChjcHUsIG1heF9mcmVxKTsKK30KKworCitpbnQgY3B1ZnJlcV9tb2RpZnlfcG9saWN5X2dvdmVybm9yKHVuc2lnbmVkIGludCBjcHUsIGNoYXIgKmdvdmVybm9yKSB7CisJaWYgKCghZ292ZXJub3IpIHx8IChzdHJsZW4oZ292ZXJub3IpID4gMTkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfZ292ZXJub3IoY3B1LCBnb3Zlcm5vcik7Cit9CisKK2ludCBjcHVmcmVxX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB0YXJnZXRfZnJlcXVlbmN5KSB7CisJcmV0dXJuIHN5c2ZzX3NldF9mcmVxdWVuY3koY3B1LCB0YXJnZXRfZnJlcXVlbmN5KTsKK30KKworc3RydWN0IGNwdWZyZXFfc3RhdHMgKiBjcHVmcmVxX2dldF9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGxvbmcgKnRvdGFsX3RpbWUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqcmV0OworCisJcmV0ID0gc3lzZnNfZ2V0X2ZyZXFfc3RhdHMoY3B1LCB0b3RhbF90aW1lKTsKKwlyZXR1cm4gKHJldCk7Cit9CisKK3ZvaWQgY3B1ZnJlcV9wdXRfc3RhdHMoc3RydWN0IGNwdWZyZXFfc3RhdHMgKmFueSkgeworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICp0bXAsICpuZXh0OworCisJaWYgKCFhbnkpCisJCXJldHVybjsKKworCXRtcCA9IGFueS0+Zmlyc3Q7CisJd2hpbGUgKHRtcCkgeworCQluZXh0ID0gdG1wLT5uZXh0OworCQlmcmVlKHRtcCk7CisJCXRtcCA9IG5leHQ7CisJfQorfQorCit1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25zKHVuc2lnbmVkIGludCBjcHUpIHsKKwl1bnNpZ25lZCBsb25nIHJldCA9IHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25zKGNwdSk7CisKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9saWIvY3B1ZnJlcS5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2JlOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuaApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqICBjcHVmcmVxLmggLSBkZWZpbml0aW9ucyBmb3IgbGliY3B1ZnJlcQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfQ1BVRlJFUV9ICisjZGVmaW5lIF9DUFVGUkVRX0ggMQorCitzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgeworCXVuc2lnbmVkIGxvbmcgbWluOworCXVuc2lnbmVkIGxvbmcgbWF4OworCWNoYXIgKmdvdmVybm9yOworfTsKKworc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyB7CisJY2hhciAqZ292ZXJub3I7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqbmV4dDsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpmaXJzdDsKK307CisKK3N0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyB7CisJdW5zaWduZWQgbG9uZyBmcmVxdWVuY3k7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpuZXh0OworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqZmlyc3Q7Cit9OworCisKK3N0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgeworCXVuc2lnbmVkIGludCBjcHU7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqbmV4dDsKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpmaXJzdDsKK307CisKK3N0cnVjdCBjcHVmcmVxX3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGltZV9pbl9zdGF0ZTsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqbmV4dDsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqZmlyc3Q7Cit9OworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogcmV0dXJucyAwIGlmIHRoZSBzcGVjaWZpZWQgQ1BVIGlzIHByZXNlbnQgKGl0IGRvZXNuJ3Qgc2F5CisgKiB3aGV0aGVyIGl0IGlzIG9ubGluZSEpLCBhbmQgYW4gZXJyb3IgdmFsdWUgaWYgbm90LgorICovCisKK2V4dGVybiBpbnQgY3B1ZnJlcV9jcHVfZXhpc3RzKHVuc2lnbmVkIGludCBjcHUpOworCisvKiBkZXRlcm1pbmUgY3VycmVudCBDUFUgZnJlcXVlbmN5CisgKiAtIF9rZXJuZWwgdmFyaWFudCBtZWFucyBrZXJuZWwncyBvcGluaW9uIG9mIENQVSBmcmVxdWVuY3kKKyAqIC0gX2hhcmR3YXJlIHZhcmlhbnQgbWVhbnMgYWN0dWFsIGhhcmR3YXJlIENQVSBmcmVxdWVuY3ksCisgKiAgICB3aGljaCBpcyBvbmx5IGF2YWlsYWJsZSB0byByb290LgorICoKKyAqIHJldHVybnMgMCBvbiBmYWlsdXJlLCBlbHNlIGZyZXF1ZW5jeSBpbiBrSHouCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfZnJlcV9rZXJuZWwodW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X2ZyZXFfaGFyZHdhcmUodW5zaWduZWQgaW50IGNwdSk7CisKKyNkZWZpbmUgY3B1ZnJlcV9nZXQoY3B1KSBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbChjcHUpOworCisKKy8qIGRldGVybWluZSBDUFUgdHJhbnNpdGlvbiBsYXRlbmN5CisgKgorICogcmV0dXJucyAwIG9uIGZhaWx1cmUsIGVsc2UgdHJhbnNpdGlvbiBsYXRlbmN5IGluIDEwXigtOSkgcyA9IG5hbm9zZWNvbmRzCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25fbGF0ZW5jeSh1bnNpZ25lZCBpbnQgY3B1KTsKKworCisvKiBkZXRlcm1pbmUgaGFyZHdhcmUgQ1BVIGZyZXF1ZW5jeSBsaW1pdHMKKyAqCisgKiBUaGVzZSBtYXkgYmUgbGltaXRlZCBmdXJ0aGVyIGJ5IHRoZXJtYWwsIGVuZXJneSBvciBvdGhlcgorICogY29uc2lkZXJhdGlvbnMgYnkgY3B1ZnJlcSBwb2xpY3kgbm90aWZpZXJzIGluIHRoZSBrZXJuZWwuCisgKi8KKworZXh0ZXJuIGludCBjcHVmcmVxX2dldF9oYXJkd2FyZV9saW1pdHModW5zaWduZWQgaW50IGNwdSwgCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm1pbiwgCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm1heCk7CisKKworLyogZGV0ZXJtaW5lIENQVWZyZXEgZHJpdmVyIHVzZWQKKyAqCisgKiBSZW1lbWJlciB0byBjYWxsIGNwdWZyZXFfcHV0X2RyaXZlciB3aGVuIG5vIGxvbmdlciBuZWVkZWQKKyAqIHRvIGF2b2lkIG1lbW9yeSBsZWFrYWdlLCBwbGVhc2UuCisgKi8KKworZXh0ZXJuIGNoYXIgKiBjcHVmcmVxX2dldF9kcml2ZXIodW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiB2b2lkICAgY3B1ZnJlcV9wdXRfZHJpdmVyKGNoYXIgKiBwdHIpOworCisKKy8qIGRldGVybWluZSBDUFVmcmVxIHBvbGljeSBjdXJyZW50bHkgdXNlZAorICoKKyAqIFJlbWVtYmVyIHRvIGNhbGwgY3B1ZnJlcV9wdXRfcG9saWN5IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZAorICogdG8gYXZvaWQgbWVtb3J5IGxlYWthZ2UsIHBsZWFzZS4KKyAqLworCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKiBjcHVmcmVxX2dldF9wb2xpY3kodW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CisKKworLyogZGV0ZXJtaW5lIENQVWZyZXEgZ292ZXJub3JzIGN1cnJlbnRseSBhdmFpbGFibGUKKyAqCisgKiBtYXkgYmUgbW9kaWZpZWQgYnkgbW9kcHJvYmUnaW5nIG9yIHJtbW9kJ2luZyBvdGhlciBnb3Zlcm5vcnMuIFBsZWFzZQorICogZnJlZSBhbGxvY2F0ZWQgbWVtb3J5IGJ5IGNhbGxpbmcgY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2dvdmVybm9ycworICogYWZ0ZXIgdXNlLgorICovCisKKworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKiBjcHVmcmVxX2dldF9hdmFpbGFibGVfZ292ZXJub3JzKHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdm9pZCBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzKHN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmZpcnN0KTsKKworCisvKiBkZXRlcm1pbmUgQ1BVIGZyZXF1ZW5jeSBzdGF0ZXMgYXZhaWxhYmxlCisgKgorICogb25seSBwcmVzZW50IG9uIF9zb21lXyAtPnRhcmdldCgpIGNwdWZyZXEgZHJpdmVycy4gRm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzCisgKiBvbmx5LiBQbGVhc2UgZnJlZSBhbGxvY2F0ZWQgbWVtb3J5IGJ5IGNhbGxpbmcgY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzCisgKiBhZnRlciB1c2UuCisgKi8KKworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqIGNwdWZyZXFfZ2V0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKHN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqZmlyc3QpOworCisKKy8qIGRldGVybWluZSBhZmZlY3RlZCBDUFVzIAorICoKKyAqIFJlbWVtYmVyIHRvIGNhbGwgY3B1ZnJlcV9wdXRfYWZmZWN0ZWRfY3B1cyB3aGVuIG5vIGxvbmdlciBuZWVkZWQKKyAqIHRvIGF2b2lkIG1lbW9yeSBsZWFrYWdlLCBwbGVhc2UuCisgKi8KKworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBjcHVmcmVxX2dldF9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdm9pZCBjcHVmcmVxX3B1dF9hZmZlY3RlZF9jcHVzKHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmZpcnN0KTsKKworCisvKiBkZXRlcm1pbmUgcmVsYXRlZCBDUFVzIAorICoKKyAqIFJlbWVtYmVyIHRvIGNhbGwgY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZAorICogdG8gYXZvaWQgbWVtb3J5IGxlYWthZ2UsIHBsZWFzZS4KKyAqLworCitleHRlcm4gc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqIGNwdWZyZXFfZ2V0X3JlbGF0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzKHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmZpcnN0KTsKKworCisvKiBkZXRlcm1pbmUgc3RhdHMgZm9yIGNwdWZyZXEgc3Vic3lzdGVtCisgKgorICogVGhpcyBpcyBub3QgYXZhaWxhYmxlIGluIGFsbCBrZXJuZWwgdmVyc2lvbnMgb3IgY29uZmlndXJhdGlvbnMuCisgKi8KKworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3N0YXRzICogY3B1ZnJlcV9nZXRfc3RhdHModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBsb25nICp0b3RhbF90aW1lKTsKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9wdXRfc3RhdHMoc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXRzKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbnModW5zaWduZWQgaW50IGNwdSk7CisKKworLyogc2V0IG5ldyBjcHVmcmVxIHBvbGljeSAKKyAqIAorICogVHJpZXMgdG8gc2V0IHRoZSBwYXNzZWQgcG9saWN5IGFzIG5ldyBwb2xpY3kgYXMgY2xvc2UgYXMgcG9zc2libGUsCisgKiBidXQgcmVzdWx0cyBtYXkgZGlmZmVyIGRlcGVuZGluZyBlLmcuIG9uIGdvdmVybm9ycyBiZWluZyBhdmFpbGFibGUuCisgKi8KKworZXh0ZXJuIGludCBjcHVmcmVxX3NldF9wb2xpY3kodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworCisKKy8qIG1vZGlmeSBhIHBvbGljeSBieSBvbmx5IGNoYW5naW5nIG1pbi9tYXggZnJlcSBvciBnb3Zlcm5vciAKKyAqCisgKiBEb2VzIG5vdCBjaGVjayB3aGV0aGVyIHJlc3VsdCBpcyB3aGF0IHdhcyBpbnRlbmRlZC4KKyAqLworCitleHRlcm4gaW50IGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9taW4odW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtaW5fZnJlcSk7CitleHRlcm4gaW50IGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9tYXgodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtYXhfZnJlcSk7CitleHRlcm4gaW50IGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9nb3Zlcm5vcih1bnNpZ25lZCBpbnQgY3B1LCBjaGFyICpnb3Zlcm5vcik7CisKKworLyogc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5CisgKgorICogRG9lcyBvbmx5IHdvcmsgaWYgdXNlcnNwYWNlIGdvdmVybm9yIGNhbiBiZSB1c2VkIGFuZCBubyBleHRlcm5hbAorICogaW50ZXJmZXJlbmNlIChvdGhlciBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIG9yIHRvIHNldC9tb2RpZnlfcG9saWN5KSAKKyAqIG9jY3Vycy4gQWxzbyBkb2VzIG5vdCB3b3JrIG9uIC0+cmFuZ2UoKSBjcHVmcmVxIGRyaXZlcnMuCisgKi8KKworZXh0ZXJuIGludCBjcHVmcmVxX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB0YXJnZXRfZnJlcXVlbmN5KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9DUFVGUkVRX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9zeXNmcy5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliMDYxZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9zeXNmcy5jCkBAIC0wLDAgKzEsNjcxIEBACisvKgorICogIChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJjcHVmcmVxLmgiCisKKyNkZWZpbmUgUEFUSF9UT19DUFUgIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1LyIKKyNkZWZpbmUgTUFYX0xJTkVfTEVOIDI1NQorI2RlZmluZSBTWVNGU19QQVRIX01BWCAyNTUKKworCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX3JlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJaW50IGZkOworCXNpemVfdCBudW1yZWFkOworCisJaWYgKCAoIGZkID0gb3BlbihwYXRoLCBPX1JET05MWSkgKSA9PSAtMSApCisJCXJldHVybiAwOworCisJbnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7CisJaWYgKCBudW1yZWFkIDwgMSApCisJeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKworCWJ1ZltudW1yZWFkXSA9ICdcMCc7CisJY2xvc2UoZmQpOworCisJcmV0dXJuIG51bXJlYWQ7Cit9CisKKworLyogQ1BVRlJFUSBzeXNmcyBhY2Nlc3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGhlbHBlciBmdW5jdGlvbiB0byByZWFkIGZpbGUgZnJvbSAvc3lzIGludG8gZ2l2ZW4gYnVmZmVyICovCisvKiBmbmFtZSBpcyBhIHJlbGF0aXZlIHBhdGggdW5kZXIgImNwdVgvY3B1ZnJlcSIgZGlyICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKHVuc2lnbmVkIGludCBjcHUsIGNvbnN0IGNoYXIgKmZuYW1lLAorCQkJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVmcmVxLyVzIiwKKwkJCSBjcHUsIGZuYW1lKTsKKwlyZXR1cm4gc3lzZnNfcmVhZF9maWxlKHBhdGgsIGJ1ZiwgYnVmbGVuKTsKK30KKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIHdyaXRlIGEgbmV3IHZhbHVlIHRvIGEgL3N5cyBmaWxlICovCisvKiBmbmFtZSBpcyBhIHJlbGF0aXZlIHBhdGggdW5kZXIgImNwdVgvY3B1ZnJlcSIgZGlyICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX2NwdWZyZXFfd3JpdGVfZmlsZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKmZuYW1lLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QgbGVuKQoreworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisJaW50IGZkOworCXNpemVfdCBudW13cml0ZTsKKworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgUEFUSF9UT19DUFUgImNwdSV1L2NwdWZyZXEvJXMiLAorCQkJIGNwdSwgZm5hbWUpOworCisJaWYgKCAoIGZkID0gb3BlbihwYXRoLCBPX1dST05MWSkgKSA9PSAtMSApCisJCXJldHVybiAwOworCisJbnVtd3JpdGUgPSB3cml0ZShmZCwgdmFsdWUsIGxlbik7CisJaWYgKCBudW13cml0ZSA8IDEgKQorCXsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gbnVtd3JpdGU7Cit9CisKKy8qIHJlYWQgYWNjZXNzIHRvIGZpbGVzIHdoaWNoIGNvbnRhaW4gb25lIG51bWVyaWMgdmFsdWUgKi8KKworZW51bSBjcHVmcmVxX3ZhbHVlIHsKKwlDUFVJTkZPX0NVUl9GUkVRLAorCUNQVUlORk9fTUlOX0ZSRVEsCisJQ1BVSU5GT19NQVhfRlJFUSwKKwlDUFVJTkZPX0xBVEVOQ1ksCisJU0NBTElOR19DVVJfRlJFUSwKKwlTQ0FMSU5HX01JTl9GUkVRLAorCVNDQUxJTkdfTUFYX0ZSRVEsCisJU1RBVFNfTlVNX1RSQU5TSVRJT05TLAorCU1BWF9DUFVGUkVRX1ZBTFVFX1JFQURfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVmcmVxX3ZhbHVlX2ZpbGVzW01BWF9DUFVGUkVRX1ZBTFVFX1JFQURfRklMRVNdID0geworCVtDUFVJTkZPX0NVUl9GUkVRXSA9ICJjcHVpbmZvX2N1cl9mcmVxIiwKKwlbQ1BVSU5GT19NSU5fRlJFUV0gPSAiY3B1aW5mb19taW5fZnJlcSIsCisJW0NQVUlORk9fTUFYX0ZSRVFdID0gImNwdWluZm9fbWF4X2ZyZXEiLAorCVtDUFVJTkZPX0xBVEVOQ1ldICA9ICJjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSIsCisJW1NDQUxJTkdfQ1VSX0ZSRVFdID0gInNjYWxpbmdfY3VyX2ZyZXEiLAorCVtTQ0FMSU5HX01JTl9GUkVRXSA9ICJzY2FsaW5nX21pbl9mcmVxIiwKKwlbU0NBTElOR19NQVhfRlJFUV0gPSAic2NhbGluZ19tYXhfZnJlcSIsCisJW1NUQVRTX05VTV9UUkFOU0lUSU9OU10gPSAic3RhdHMvdG90YWxfdHJhbnMiCit9OworCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJIGVudW0gY3B1ZnJlcV92YWx1ZSB3aGljaCkKK3sKKyAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgKmVuZHA7CisKKwlpZiAoIHdoaWNoID49IE1BWF9DUFVGUkVRX1ZBTFVFX1JFQURfRklMRVMgKQorCQlyZXR1cm4gMDsKKworCWlmICggKCBsZW4gPSBzeXNmc19jcHVmcmVxX3JlYWRfZmlsZShjcHUsIGNwdWZyZXFfdmFsdWVfZmlsZXNbd2hpY2hdLAorCQkJCQkgICAgIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKSkpID09IDAgKQorCQlyZXR1cm4gMDsKKworCXZhbHVlID0gc3RydG91bChsaW5lYnVmLCAmZW5kcCwgMCk7CisKKwlpZiAoIGVuZHAgPT0gbGluZWJ1ZiB8fCBlcnJubyA9PSBFUkFOR0UgKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB2YWx1ZTsKK30KKworLyogcmVhZCBhY2Nlc3MgdG8gZmlsZXMgd2hpY2ggY29udGFpbiBvbmUgc3RyaW5nICovCisKK2VudW0gY3B1ZnJlcV9zdHJpbmcgeworCVNDQUxJTkdfRFJJVkVSLAorCVNDQUxJTkdfR09WRVJOT1IsCisJTUFYX0NQVUZSRVFfU1RSSU5HX0ZJTEVTCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY3B1ZnJlcV9zdHJpbmdfZmlsZXNbTUFYX0NQVUZSRVFfU1RSSU5HX0ZJTEVTXSA9IHsKKwlbU0NBTElOR19EUklWRVJdID0gInNjYWxpbmdfZHJpdmVyIiwKKwlbU0NBTElOR19HT1ZFUk5PUl0gPSAic2NhbGluZ19nb3Zlcm5vciIsCit9OworCisKK3N0YXRpYyBjaGFyICogc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3N0cmluZyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgICBlbnVtIGNwdWZyZXFfc3RyaW5nIHdoaWNoKQoreworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgKnJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKHdoaWNoID49IE1BWF9DUFVGUkVRX1NUUklOR19GSUxFUykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoICggbGVuID0gc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUoY3B1LCBjcHVmcmVxX3N0cmluZ19maWxlc1t3aGljaF0sCisJCQkJCSAgICAgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKSkgPT0gMCApCisJCXJldHVybiBOVUxMOworCisJaWYgKCAoIHJlc3VsdCA9IHN0cmR1cChsaW5lYnVmKSApID09IE5VTEwgKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChyZXN1bHRbc3RybGVuKHJlc3VsdCkgLSAxXSA9PSAnXG4nKQorCQlyZXN1bHRbc3RybGVuKHJlc3VsdCkgLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiB3cml0ZSBhY2Nlc3MgKi8KKworZW51bSBjcHVmcmVxX3dyaXRlIHsKKwlXUklURV9TQ0FMSU5HX01JTl9GUkVRLAorCVdSSVRFX1NDQUxJTkdfTUFYX0ZSRVEsCisJV1JJVEVfU0NBTElOR19HT1ZFUk5PUiwKKwlXUklURV9TQ0FMSU5HX1NFVF9TUEVFRCwKKwlNQVhfQ1BVRlJFUV9XUklURV9GSUxFUworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNwdWZyZXFfd3JpdGVfZmlsZXNbTUFYX0NQVUZSRVFfV1JJVEVfRklMRVNdID0geworCVtXUklURV9TQ0FMSU5HX01JTl9GUkVRXSA9ICJzY2FsaW5nX21pbl9mcmVxIiwKKwlbV1JJVEVfU0NBTElOR19NQVhfRlJFUV0gPSAic2NhbGluZ19tYXhfZnJlcSIsCisJW1dSSVRFX1NDQUxJTkdfR09WRVJOT1JdID0gInNjYWxpbmdfZ292ZXJub3IiLAorCVtXUklURV9TQ0FMSU5HX1NFVF9TUEVFRF0gPSAic2NhbGluZ19zZXRzcGVlZCIsCit9OworCitzdGF0aWMgaW50IHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCSBlbnVtIGNwdWZyZXFfd3JpdGUgd2hpY2gsCisJCQkJCSBjb25zdCBjaGFyICpuZXdfdmFsdWUsIHNpemVfdCBsZW4pCit7CisJaWYgKHdoaWNoID49IE1BWF9DUFVGUkVRX1dSSVRFX0ZJTEVTKQorCQlyZXR1cm4gMDsKKworCWlmICggc3lzZnNfY3B1ZnJlcV93cml0ZV9maWxlKGNwdSwgY3B1ZnJlcV93cml0ZV9maWxlc1t3aGljaF0sCisJCQkgICAgICBuZXdfdmFsdWUsIGxlbikgIT0gbGVuICkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK307CisKK3Vuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfa2VybmVsKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIFNDQUxJTkdfQ1VSX0ZSRVEpOworfQorCit1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIENQVUlORk9fQ1VSX0ZSRVEpOworfQorCit1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25fbGF0ZW5jeSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBDUFVJTkZPX0xBVEVOQ1kpOworfQorCitpbnQgc3lzZnNfZ2V0X2ZyZXFfaGFyZHdhcmVfbGltaXRzKHVuc2lnbmVkIGludCBjcHUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nICptaW4sCisJCQkgICAgICB1bnNpZ25lZCBsb25nICptYXgpCit7CisJaWYgKCghbWluKSB8fCAoIW1heCkpCisJCXJldHVybiAtRUlOVkFMOworCisJKm1pbiA9IHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIENQVUlORk9fTUlOX0ZSRVEpOworCWlmICghKm1pbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkqbWF4ID0gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgQ1BVSU5GT19NQVhfRlJFUSk7CisJaWYgKCEqbWF4KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCitjaGFyICogc3lzZnNfZ2V0X2ZyZXFfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpIHsKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3N0cmluZyhjcHUsIFNDQUxJTkdfRFJJVkVSKTsKK30KKworc3RydWN0IGNwdWZyZXFfcG9saWN5ICogc3lzZnNfZ2V0X2ZyZXFfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKKworCXBvbGljeSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfcG9saWN5KSk7CisJaWYgKCFwb2xpY3kpCisJCXJldHVybiBOVUxMOworCisJcG9saWN5LT5nb3Zlcm5vciA9IHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV9zdHJpbmcoY3B1LCBTQ0FMSU5HX0dPVkVSTk9SKTsKKwlpZiAoIXBvbGljeS0+Z292ZXJub3IpIHsKKwkJZnJlZShwb2xpY3kpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcG9saWN5LT5taW4gPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTQ0FMSU5HX01JTl9GUkVRKTsKKwlwb2xpY3ktPm1heCA9IHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIFNDQUxJTkdfTUFYX0ZSRVEpOworCWlmICgoIXBvbGljeS0+bWluKSB8fCAoIXBvbGljeS0+bWF4KSkgeworCQlmcmVlKHBvbGljeS0+Z292ZXJub3IpOworCQlmcmVlKHBvbGljeSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBwb2xpY3k7Cit9CisKK3N0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKgorc3lzZnNfZ2V0X2ZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqZmlyc3QgPSBOVUxMOworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmN1cnJlbnQgPSBOVUxMOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCXVuc2lnbmVkIGludCBwb3MsIGk7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICggKCBsZW4gPSBzeXNmc19jcHVmcmVxX3JlYWRfZmlsZShjcHUsICJzY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMiLAorCQkJCQkgICAgIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKSkpID09IDAgKQorCXsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcG9zID0gMDsKKwlmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkKKwl7CisJCWlmICggbGluZWJ1ZltpXSA9PSAnICcgfHwgbGluZWJ1ZltpXSA9PSAnXG4nICkKKwkJeworCQkJaWYgKCBpIC0gcG9zIDwgMiApCisJCQkJY29udGludWU7CisJCQlpZiAoIGN1cnJlbnQgKSB7CisJCQkJY3VycmVudC0+bmV4dCA9IG1hbGxvYyhzaXplb2YgKmN1cnJlbnQgKTsKKwkJCQlpZiAoICEgY3VycmVudC0+bmV4dCApCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlmaXJzdCA9IG1hbGxvYyggc2l6ZW9mICpmaXJzdCApOworCQkJCWlmICggISBmaXJzdCApCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBmaXJzdDsKKwkJCX0KKwkJCWN1cnJlbnQtPmZpcnN0ID0gZmlyc3Q7CisJCQljdXJyZW50LT5uZXh0ID0gTlVMTDsKKworCQkJY3VycmVudC0+Z292ZXJub3IgPSBtYWxsb2MoaSAtIHBvcyArIDEpOworCQkJaWYgKCAhIGN1cnJlbnQtPmdvdmVybm9yICkKKwkJCQlnb3RvIGVycm9yX291dDsKKworCQkJbWVtY3B5KCBjdXJyZW50LT5nb3Zlcm5vciwgbGluZWJ1ZiArIHBvcywgaSAtIHBvcyk7CisJCQljdXJyZW50LT5nb3Zlcm5vcltpIC0gcG9zXSA9ICdcMCc7CisJCQlwb3MgPSBpICsgMTsKKwkJfQorCX0KKworCXJldHVybiBmaXJzdDsKKworIGVycm9yX291dDoKKwl3aGlsZSAoIGZpcnN0ICkgeworCQljdXJyZW50ID0gZmlyc3QtPm5leHQ7CisJCWlmICggZmlyc3QtPmdvdmVybm9yICkKKwkJCWZyZWUoIGZpcnN0LT5nb3Zlcm5vciApOworCQlmcmVlKCBmaXJzdCApOworCQlmaXJzdCA9IGN1cnJlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCisKK3N0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqCitzeXNmc19nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKmZpcnN0ID0gTlVMTDsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKmN1cnJlbnQgPSBOVUxMOworCWNoYXIgb25lX3ZhbHVlW1NZU0ZTX1BBVEhfTUFYXTsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwl1bnNpZ25lZCBpbnQgcG9zLCBpOworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAoICggbGVuID0gc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUoY3B1LAorCQkJCQkgICAgICJzY2FsaW5nX2F2YWlsYWJsZV9mcmVxdWVuY2llcyIsCisJCQkJCSAgICAgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKSkgPT0gMCApCisJeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwb3MgPSAwOworCWZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQorCXsKKwkJaWYgKCBsaW5lYnVmW2ldID09ICcgJyB8fCBsaW5lYnVmW2ldID09ICdcbicgKQorCQl7CisJCQlpZiAoIGkgLSBwb3MgPCAyICkKKwkJCQljb250aW51ZTsKKwkJCWlmICggaSAtIHBvcyA+PSBTWVNGU19QQVRIX01BWCApCisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQlpZiAoIGN1cnJlbnQgKSB7CisJCQkJY3VycmVudC0+bmV4dCA9IG1hbGxvYyhzaXplb2YgKmN1cnJlbnQgKTsKKwkJCQlpZiAoICEgY3VycmVudC0+bmV4dCApCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlmaXJzdCA9IG1hbGxvYyhzaXplb2YgKmZpcnN0ICk7CisJCQkJaWYgKCAhIGZpcnN0ICkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGZpcnN0OworCQkJfQorCQkJY3VycmVudC0+Zmlyc3QgPSBmaXJzdDsKKwkJCWN1cnJlbnQtPm5leHQgPSBOVUxMOworCisJCQltZW1jcHkob25lX3ZhbHVlLCBsaW5lYnVmICsgcG9zLCBpIC0gcG9zKTsKKwkJCW9uZV92YWx1ZVtpIC0gcG9zXSA9ICdcMCc7CisJCQlpZiAoIHNzY2FuZihvbmVfdmFsdWUsICIlbHUiLCAmY3VycmVudC0+ZnJlcXVlbmN5KSAhPSAxICkKKwkJCQlnb3RvIGVycm9yX291dDsKKworCQkJcG9zID0gaSArIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gZmlyc3Q7CisKKyBlcnJvcl9vdXQ6CisJd2hpbGUgKCBmaXJzdCApIHsKKwkJY3VycmVudCA9IGZpcnN0LT5uZXh0OworCQlmcmVlKGZpcnN0KTsKKwkJZmlyc3QgPSBjdXJyZW50OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBzeXNmc19nZXRfY3B1X2xpc3QodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJCQkgY29uc3QgY2hhciAqZmlsZSkgeworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmZpcnN0ID0gTlVMTDsKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjdXJyZW50ID0gTlVMTDsKKwljaGFyIG9uZV92YWx1ZVtTWVNGU19QQVRIX01BWF07CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJdW5zaWduZWQgaW50IHBvcywgaTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKCAoIGxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgZmlsZSwgbGluZWJ1ZiwKKwkJCQkJICAgICBzaXplb2YobGluZWJ1ZikpKSA9PSAwICkKKwl7CisJCXJldHVybiBOVUxMOworCX0KKworCXBvcyA9IDA7CisJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApCisJeworCQlpZiAoIGkgPT0gbGVuIHx8IGxpbmVidWZbaV0gPT0gJyAnIHx8IGxpbmVidWZbaV0gPT0gJ1xuJyApCisJCXsKKwkJCWlmICggaSAtIHBvcyAgPCAxICkKKwkJCQljb250aW51ZTsKKwkJCWlmICggaSAtIHBvcyA+PSBTWVNGU19QQVRIX01BWCApCisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQlpZiAoIGN1cnJlbnQgKSB7CisJCQkJY3VycmVudC0+bmV4dCA9IG1hbGxvYyhzaXplb2YgKmN1cnJlbnQpOworCQkJCWlmICggISBjdXJyZW50LT5uZXh0ICkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCQl9IGVsc2UgeworCQkJCWZpcnN0ID0gbWFsbG9jKHNpemVvZiAqZmlyc3QpOworCQkJCWlmICggISBmaXJzdCApCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBmaXJzdDsKKwkJCX0KKwkJCWN1cnJlbnQtPmZpcnN0ID0gZmlyc3Q7CisJCQljdXJyZW50LT5uZXh0ID0gTlVMTDsKKworCQkJbWVtY3B5KG9uZV92YWx1ZSwgbGluZWJ1ZiArIHBvcywgaSAtIHBvcyk7CisJCQlvbmVfdmFsdWVbaSAtIHBvc10gPSAnXDAnOworCisJCQlpZiAoIHNzY2FuZihvbmVfdmFsdWUsICIldSIsICZjdXJyZW50LT5jcHUpICE9IDEgKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCisJCQlwb3MgPSBpICsgMTsKKwkJfQorCX0KKworCXJldHVybiBmaXJzdDsKKworIGVycm9yX291dDoKKwl3aGlsZSAoZmlyc3QpIHsKKwkJY3VycmVudCA9IGZpcnN0LT5uZXh0OworCQlmcmVlKGZpcnN0KTsKKwkJZmlyc3QgPSBjdXJyZW50OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqIHN5c2ZzX2dldF9mcmVxX2FmZmVjdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSkgeworCXJldHVybiBzeXNmc19nZXRfY3B1X2xpc3QoY3B1LCAiYWZmZWN0ZWRfY3B1cyIpOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICogc3lzZnNfZ2V0X2ZyZXFfcmVsYXRlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlyZXR1cm4gc3lzZnNfZ2V0X2NwdV9saXN0KGNwdSwgInJlbGF0ZWRfY3B1cyIpOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqIHN5c2ZzX2dldF9mcmVxX3N0YXRzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdG90YWxfdGltZSkgeworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpmaXJzdCA9IE5VTEw7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKmN1cnJlbnQgPSBOVUxMOworCWNoYXIgb25lX3ZhbHVlW1NZU0ZTX1BBVEhfTUFYXTsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwl1bnNpZ25lZCBpbnQgcG9zLCBpOworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAoICggbGVuID0gc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUoY3B1LCAic3RhdHMvdGltZV9pbl9zdGF0ZSIsCisJCQkJCSAgICAgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKSkgPT0gMCApCisJCXJldHVybiBOVUxMOworCisJKnRvdGFsX3RpbWUgPSAwOworCXBvcyA9IDA7CisJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApCisJeworCQlpZiAoIGkgPT0gc3RybGVuKGxpbmVidWYpIHx8IGxpbmVidWZbaV0gPT0gJ1xuJyApCisJCXsKKwkJCWlmICggaSAtIHBvcyA8IDIgKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCAoaSAtIHBvcykgPj0gU1lTRlNfUEFUSF9NQVggKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJaWYgKCBjdXJyZW50ICkgeworCQkJCWN1cnJlbnQtPm5leHQgPSBtYWxsb2Moc2l6ZW9mICpjdXJyZW50ICk7CisJCQkJaWYgKCAhIGN1cnJlbnQtPm5leHQgKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJZmlyc3QgPSBtYWxsb2Moc2l6ZW9mICpmaXJzdCApOworCQkJCWlmICggISBmaXJzdCApCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBmaXJzdDsKKwkJCX0KKwkJCWN1cnJlbnQtPmZpcnN0ID0gZmlyc3Q7CisJCQljdXJyZW50LT5uZXh0ID0gTlVMTDsKKworCQkJbWVtY3B5KG9uZV92YWx1ZSwgbGluZWJ1ZiArIHBvcywgaSAtIHBvcyk7CisJCQlvbmVfdmFsdWVbaSAtIHBvc10gPSAnXDAnOworCQkJaWYgKCBzc2NhbmYob25lX3ZhbHVlLCAiJWx1ICVsbHUiLCAmY3VycmVudC0+ZnJlcXVlbmN5LCAmY3VycmVudC0+dGltZV9pbl9zdGF0ZSkgIT0gMiApCisJCQkJZ290byBlcnJvcl9vdXQ7CisKKwkJCSp0b3RhbF90aW1lID0gKnRvdGFsX3RpbWUgKyBjdXJyZW50LT50aW1lX2luX3N0YXRlOworCQkJcG9zID0gaSArIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gZmlyc3Q7CisKKyBlcnJvcl9vdXQ6CisJd2hpbGUgKCBmaXJzdCApIHsKKwkJY3VycmVudCA9IGZpcnN0LT5uZXh0OworCQlmcmVlKGZpcnN0KTsKKwkJZmlyc3QgPSBjdXJyZW50OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9ucyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTVEFUU19OVU1fVFJBTlNJVElPTlMpOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9nb3YoY2hhciAqbmV3X2dvdiwgY2hhciAqcGFzc2VkX2dvdikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgaj0wOworCisJaWYgKCFwYXNzZWRfZ292IHx8IChzdHJsZW4ocGFzc2VkX2dvdikgPiAxOSkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RybmNweShuZXdfZ292LCBwYXNzZWRfZ292LCAyMCk7CisJZm9yIChpPTA7aTwyMDtpKyspIHsKKwkJaWYgKGopIHsKKwkJCW5ld19nb3ZbaV0gPSAnXDAnOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKChuZXdfZ292W2ldID49ICdhJykgJiYgKG5ld19nb3ZbaV0gPD0gJ3onKSkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKChuZXdfZ292W2ldID49ICdBJykgJiYgKG5ld19nb3ZbaV0gPD0gJ1onKSkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG5ld19nb3ZbaV0gPT0gJy0nKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobmV3X2dvdltpXSA9PSAnXycpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChuZXdfZ292W2ldID09ICdcMCcpIHsKKwkJCWogPSAxOworCQkJY29udGludWU7CisJCX0KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW5ld19nb3ZbMTldID0gJ1wwJzsKKwlyZXR1cm4gMDsKK30KKworaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9nb3Zlcm5vcih1bnNpZ25lZCBpbnQgY3B1LCBjaGFyICpnb3Zlcm5vcikKK3sKKwljaGFyIG5ld19nb3ZbU1lTRlNfUEFUSF9NQVhdOworCisJaWYgKCFnb3Zlcm5vcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmVyaWZ5X2dvdihuZXdfZ292LCBnb3Zlcm5vcikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKGNwdSwgV1JJVEVfU0NBTElOR19HT1ZFUk5PUiwKKwkJCQkJICAgICBuZXdfZ292LCBzdHJsZW4obmV3X2dvdikpOworfTsKKworaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9tYXgodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtYXhfZnJlcSkKK3sKKwljaGFyIHZhbHVlW1NZU0ZTX1BBVEhfTUFYXTsKKworCXNucHJpbnRmKHZhbHVlLCBTWVNGU19QQVRIX01BWCwgIiVsdSIsIG1heF9mcmVxKTsKKworCXJldHVybiBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfTUFYX0ZSRVEsCisJCQkJCSAgICAgdmFsdWUsIHN0cmxlbih2YWx1ZSkpOworfTsKKworCitpbnQgc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X21pbih1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIG1pbl9mcmVxKQoreworCWNoYXIgdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCisJc25wcmludGYodmFsdWUsIFNZU0ZTX1BBVEhfTUFYLCAiJWx1IiwgbWluX2ZyZXEpOworCisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKGNwdSwgV1JJVEVfU0NBTElOR19NSU5fRlJFUSwKKwkJCQkJICAgICB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7Cit9OworCisKK2ludCBzeXNmc19zZXRfZnJlcV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJY2hhciBtaW5bU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgbWF4W1NZU0ZTX1BBVEhfTUFYXTsKKwljaGFyIGdvdltTWVNGU19QQVRIX01BWF07CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIG9sZF9taW47CisJaW50IHdyaXRlX21heF9maXJzdDsKKworCWlmICghcG9saWN5IHx8ICEocG9saWN5LT5nb3Zlcm5vcikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBvbGljeS0+bWF4IDwgcG9saWN5LT5taW4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZlcmlmeV9nb3YoZ292LCBwb2xpY3ktPmdvdmVybm9yKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzbnByaW50ZihtaW4sIFNZU0ZTX1BBVEhfTUFYLCAiJWx1IiwgcG9saWN5LT5taW4pOworCXNucHJpbnRmKG1heCwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCBwb2xpY3ktPm1heCk7CisKKwlvbGRfbWluID0gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgU0NBTElOR19NSU5fRlJFUSk7CisJd3JpdGVfbWF4X2ZpcnN0ID0gKG9sZF9taW4gJiYgKHBvbGljeS0+bWF4IDwgb2xkX21pbikgPyAwIDogMSk7CisKKwlpZiAod3JpdGVfbWF4X2ZpcnN0KSB7CisJCXJldCA9IHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKGNwdSwgV1JJVEVfU0NBTElOR19NQVhfRlJFUSwKKwkJCQkJCSAgICBtYXgsIHN0cmxlbihtYXgpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01JTl9GUkVRLCBtaW4sCisJCQkJCSAgICBzdHJsZW4obWluKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghd3JpdGVfbWF4X2ZpcnN0KSB7CisJCXJldCA9IHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKGNwdSwgV1JJVEVfU0NBTElOR19NQVhfRlJFUSwKKwkJCQkJCSAgICBtYXgsIHN0cmxlbihtYXgpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKGNwdSwgV1JJVEVfU0NBTElOR19HT1ZFUk5PUiwKKwkJCQkJICAgICBnb3YsIHN0cmxlbihnb3YpKTsKK30KKworaW50IHN5c2ZzX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB0YXJnZXRfZnJlcXVlbmN5KSB7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wgPSBzeXNmc19nZXRfZnJlcV9wb2xpY3koY3B1KTsKKwljaGFyIHVzZXJzcGFjZV9nb3ZbXSA9ICJ1c2Vyc3BhY2UiOworCWNoYXIgZnJlcVtTWVNGU19QQVRIX01BWF07CisJaW50IHJldDsKKworCWlmICghcG9sKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChzdHJuY21wKHBvbC0+Z292ZXJub3IsIHVzZXJzcGFjZV9nb3YsIDkpICE9IDApIHsKKwkJcmV0ID0gc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X2dvdmVybm9yKGNwdSwgdXNlcnNwYWNlX2dvdik7CisJCWlmIChyZXQpIHsKKwkJCWNwdWZyZXFfcHV0X3BvbGljeShwb2wpOworCQkJcmV0dXJuIChyZXQpOworCQl9CisJfQorCisJY3B1ZnJlcV9wdXRfcG9saWN5KHBvbCk7CisKKwlzbnByaW50ZihmcmVxLCBTWVNGU19QQVRIX01BWCwgIiVsdSIsIHRhcmdldF9mcmVxdWVuY3kpOworCisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKGNwdSwgV1JJVEVfU0NBTElOR19TRVRfU1BFRUQsCisJCQkJCSAgICAgZnJlcSwgc3RybGVuKGZyZXEpKTsKK30KKworLyogQ1BVRlJFUSBzeXNmcyBhY2Nlc3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEdlbmVyYWwgc3lzZnMgYWNjZXNzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IHN5c2ZzX2NwdV9leGlzdHModW5zaWduZWQgaW50IGNwdSkKK3sKKwljaGFyIGZpbGVbU1lTRlNfUEFUSF9NQVhdOworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisKKwlzbnByaW50ZihmaWxlLCBTWVNGU19QQVRIX01BWCwgUEFUSF9UT19DUFUgImNwdSV1LyIsIGNwdSk7CisKKwlpZiAoIHN0YXQoZmlsZSwgJnN0YXRidWYpICE9IDAgKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXJldHVybiBTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkgPyAwIDogLUVOT1NZUzsKK30KKworLyogR2VuZXJhbCBzeXNmcyBhY2Nlc3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9saWIvc3lzZnMuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9zeXNmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOWU1NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmgKQEAgLTAsMCArMSwyMSBAQAorLyogR2VuZXJhbCAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNmc19jcHVfZXhpc3RzKHVuc2lnbmVkIGludCBjcHUpOworCisvKiBDUFVmcmVxICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV9rZXJuZWwodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV9oYXJkd2FyZSh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25fbGF0ZW5jeSh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBpbnQgc3lzZnNfZ2V0X2ZyZXFfaGFyZHdhcmVfbGltaXRzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgKm1pbiwgdW5zaWduZWQgbG9uZyAqbWF4KTsKK2V4dGVybiBjaGFyICogc3lzZnNfZ2V0X2ZyZXFfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqIHN5c2ZzX2dldF9mcmVxX3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICogc3lzZnNfZ2V0X2ZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKiBzeXNmc19nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBzeXNmc19nZXRfZnJlcV9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBzeXNmc19nZXRfZnJlcV9yZWxhdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gc3RydWN0IGNwdWZyZXFfc3RhdHMgKiBzeXNmc19nZXRfZnJlcV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGxvbmcgKnRvdGFsX3RpbWUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfdHJhbnNpdGlvbnModW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaW50IHN5c2ZzX3NldF9mcmVxX3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9taW4odW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtaW5fZnJlcSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9tYXgodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtYXhfZnJlcSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9nb3Zlcm5vcih1bnNpZ25lZCBpbnQgY3B1LCBjaGFyICpnb3Zlcm5vcik7CitleHRlcm4gaW50IHN5c2ZzX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB0YXJnZXRfZnJlcXVlbmN5KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktaW5mby4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWZyZXF1ZW5jeS1pbmZvLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5NDgxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktaW5mby4xCkBAIC0wLDAgKzEsNzYgQEAKKy5USCAiY3B1ZnJlcS1pbmZvIiAiMSIgIjAuMSIgIk1hdHRpYSBEb25naWxpIiAiIgorLlNIICJOQU1FIgorLkxQIAorY3B1ZnJlcVwtaW5mbyBcLSBVdGlsaXR5IHRvIHJldHJpZXZlIGNwdWZyZXEga2VybmVsIGluZm9ybWF0aW9uCisuU0ggIlNZTlRBWCIKKy5MUCAKK2NwdWZyZXFcLWluZm8gW1xmSW9wdGlvbnNcZlBdCisuU0ggIkRFU0NSSVBUSU9OIgorLkxQIAorQSBzbWFsbCB0b29sIHdoaWNoIHByaW50cyBvdXQgY3B1ZnJlcSBpbmZvcm1hdGlvbiBoZWxwZnVsIHRvIGRldmVsb3BlcnMgYW5kIGludGVyZXN0ZWQgdXNlcnMuCisuU0ggIk9QVElPTlMiCisuTFAgCisuVFAgIAorXGZCXC1lXGZSIFxmQlwtXC1kZWJ1Z1xmUgorUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbi4KKy5UUCAgCitcZkJcLWZcZlIgXGZCXC1cLWZyZXFcZlIKK0dldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYWNjb3JkaW5nIHRvIHRoZSBjcHVmcmVxIGNvcmUuCisuVFAgIAorXGZCXC13XGZSIFxmQlwtXC1od2ZyZXFcZlIKK0dldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYnkgcmVhZGluZyBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KS4KKy5UUCAgCitcZkJcLWxcZlIgXGZCXC1cLWh3bGltaXRzXGZSCitEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSBhbGxvd2VkLgorLlRQICAKK1xmQlwtZFxmUiBcZkJcLVwtZHJpdmVyXGZSCitEZXRlcm1pbmVzIHRoZSB1c2VkIGNwdWZyZXEga2VybmVsIGRyaXZlci4KKy5UUCAgCitcZkJcLXBcZlIgXGZCXC1cLXBvbGljeVxmUgorR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kuCisuVFAgIAorXGZCXC1nXGZSIFxmQlwtXC1nb3Zlcm5vcnNcZlIKK0RldGVybWluZXMgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzLgorLlRQICAKK1xmQlwtYVxmUiBcZkJcLVwtcmVsYXRlZFwtY3B1c1xmUgorRGV0ZXJtaW5lcyB3aGljaCBDUFVzIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSBmcmVxdWVuY3kuCisuVFAgIAorXGZCXC1hXGZSIFxmQlwtXC1hZmZlY3RlZFwtY3B1c1xmUgorRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUuCisuVFAgIAorXGZCXC1zXGZSIFxmQlwtXC1zdGF0c1xmUgorU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZS4KKy5UUCAgCitcZkJcLXlcZlIgXGZCXC1cLWxhdGVuY3lcZlIKK0RldGVybWluZXMgdGhlIG1heGltdW0gbGF0ZW5jeSBvbiBDUFUgZnJlcXVlbmN5IGNoYW5nZXMuCisuVFAgIAorXGZCXC1vXGZSIFxmQlwtXC1wcm9jXGZSCitQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jL2NwdWZyZXEgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVscy4KKy5UUCAgCitcZkJcLW1cZlIgXGZCXC1cLWh1bWFuXGZSCitodW1hblwtcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgXC1mLCBcLXcsIFwtcyBhbmQgXC15IHBhcmFtZXRlcnMuCisuVFAgIAorXGZCXC1oXGZSIFxmQlwtXC1oZWxwXGZSCitQcmludHMgb3V0IHRoZSBoZWxwIHNjcmVlbi4KKy5TSCAiUkVNQVJLUyIKKy5MUCAKK0J5IGRlZmF1bHQgb25seSB2YWx1ZXMgb2YgY29yZSB6ZXJvIGFyZSBkaXNwbGF5ZWQuIEhvdyB0byBkaXNwbGF5IHNldHRpbmdzIG9mCitvdGhlciBjb3JlcyBpcyBkZXNjcmliZWQgaW4gdGhlIGNwdXBvd2VyKDEpIG1hbnBhZ2UgaW4gdGhlIFwtXC1jcHUgb3B0aW9uIHNlY3Rpb24uCisuTFAgCitZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIG9mIHRoZSBvdXRwdXQgc3BlY2lmaWMgb3B0aW9ucyBcLW8gXC1lIFwtYSBcLWcgXC1wIFwtZCBcLWwgXC13IFwtZiBcLXkuCisuTFAgCitZb3UgYWxzbyBjYW4ndCBzcGVjaWZ5IHRoZSBcLW8gb3B0aW9uIGNvbWJpbmVkIHdpdGggdGhlIFwtYyBvcHRpb24uCisuU0ggIkZJTEVTIgorLm5mIAorXGZJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Ki9jcHVmcmVxL1xmUCAgCitcZkkvcHJvYy9jcHVmcmVxXGZQIChkZXByZWNhdGVkKSAKK1xmSS9wcm9jL3N5cy9jcHUvXGZQIChkZXByZWNhdGVkKQorLmZpIAorLlNIICJBVVRIT1JTIgorLm5mCitEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+IFwtIGF1dGhvciAKK01hdHRpYSBEb25naWxpPG1hbGF0dGlhQGdtYWlsLmNvbT4gXC0gZmlyc3QgYXV0b2xpYnRvb2xpemF0aW9uCisuZmkKKy5TSCAiU0VFIEFMU08iCisuTFAgCitjcHVwb3dlclwtZnJlcXVlbmN5XC1zZXQoMSksIGNwdXBvd2VyKDEpCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItZnJlcXVlbmN5LXNldC4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWZyZXF1ZW5jeS1zZXQuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmUzZTEzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWZyZXF1ZW5jeS1zZXQuMQpAQCAtMCwwICsxLDU0IEBACisuVEggImNwdWZyZXEtc2V0IiAiMSIgIjAuMSIgIk1hdHRpYSBEb25naWxpIiAiIgorLlNIICJOQU1FIgorLkxQIAorY3B1ZnJlcVwtc2V0IFwtIEEgc21hbGwgdG9vbCB3aGljaCBhbGxvd3MgdG8gbW9kaWZ5IGNwdWZyZXEgc2V0dGluZ3MuCisuU0ggIlNZTlRBWCIKKy5MUCAKK2NwdWZyZXFcLXNldCBbXGZJb3B0aW9uc1xmUF0KKy5TSCAiREVTQ1JJUFRJT04iCisuTFAgCitjcHVmcmVxXC1zZXQgYWxsb3dzIHlvdSB0byBtb2RpZnkgY3B1ZnJlcSBzZXR0aW5ncyB3aXRob3V0IGhhdmluZyB0byB0eXBlIGUuZy4gIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX3NldF9zcGVlZCIgYWxsIHRoZSB0aW1lLgorLlNIICJPUFRJT05TIgorLkxQIAorLlRQIAorXGZCXC1kXGZSIFxmQlwtXC1taW5cZlIgPEZSRVE+CituZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgc2VsZWN0LgorLlRQIAorXGZCXC11XGZSIFxmQlwtXC1tYXhcZlIgPEZSRVE+CituZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgc2VsZWN0LgorLlRQIAorXGZCXC1nXGZSIFxmQlwtXC1nb3Zlcm5vclxmUiA8R09WPgorbmV3IGNwdWZyZXEgZ292ZXJub3IuCisuVFAgCitcZkJcLWZcZlIgXGZCXC1cLWZyZXFcZlIgPEZSRVE+CitzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2UgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWQuCisuVFAgCitcZkJcLXJcZlIgXGZCXC1cLXJlbGF0ZWRcZlIKK21vZGlmeSBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzIGF0IHRoZSBzYW1lIHRpbWUKKy5UUCAKK1xmQlwtaFxmUiBcZkJcLVwtaGVscFxmUgorUHJpbnRzIG91dCB0aGUgaGVscCBzY3JlZW4uCisuU0ggIlJFTUFSS1MiCisuTFAgCitCeSBkZWZhdWx0IHZhbHVlcyBhcmUgYXBwbGllZCBvbiBhbGwgY29yZXMuIEhvdyB0byBtb2RpZnkgc2luZ2xlIGNvcmUKK2NvbmZpZ3VyYXRpb25zIGlzIGRlc2NyaWJlZCBpbiB0aGUgY3B1cG93ZXIoMSkgbWFucGFnZSBpbiB0aGUgXC1cLWNwdSBvcHRpb24gc2VjdGlvbi4KKy5MUCAKK1RoZSBcLWYgRlJFUSwgXC1cLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIHBhcmFtZXRlci4KKy5MUCAKK0ZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHogYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2UgKGZyZXF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLgorLkxQIAorT24gTGludXgga2VybmVscyB1cCB0byAyLjYuMjksIHRoZSBcLXIgb3IgXC1cLXJlbGF0ZWQgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisuU0ggIkZJTEVTIiAKKy5uZgorXGZJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Ki9jcHVmcmVxL1xmUCAgCitcZkkvcHJvYy9jcHVmcmVxXGZQIChkZXByZWNhdGVkKSAKK1xmSS9wcm9jL3N5cy9jcHUvXGZQIChkZXByZWNhdGVkKQorLmZpIAorLlNIICJBVVRIT1JTIgorLm5mIAorRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiBcLSBhdXRob3IgCitNYXR0aWEgRG9uZ2lsaTxtYWxhdHRpYUBnbWFpbC5jb20+IFwtIGZpcnN0IGF1dG9saWJ0b29saXphdGlvbgorLmZpCisuU0ggIlNFRSBBTFNPIgorLkxQIAorY3B1cG93ZXJcLWZyZXF1ZW5jeVwtaW5mbygxKSwgY3B1cG93ZXIoMSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1pbmZvLjEgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItaW5mby4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTIxMTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItaW5mby4xCkBAIC0wLDAgKzEsMTkgQEAKKy5USCBDUFVQT1dFUlwtSU5GTyAiMSIgIjIyLzAyLzIwMTEiICIiICJjcHVwb3dlciBNYW51YWwiCisuU0ggTkFNRQorY3B1cG93ZXJcLWluZm8gXC0gU2hvd3MgcHJvY2Vzc29yIHBvd2VyIHJlbGF0ZWQga2VybmVsIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiBjcHVwb3dlciBpbmZvIFsgXC1iIF0gWyBcLXMgXSBbIFwtbSBdCisKKy5TSCBERVNDUklQVElPTgorXGZCY3B1cG93ZXIgaW5mbyBcZlAgc2hvd3Mga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIHByb2Nlc3NvciBoYXJkd2FyZQorcmVnaXN0ZXJzIGFmZmVjdGluZyBwcm9jZXNzb3IgcG93ZXIgc2F2aW5nIHBvbGljaWVzLgorCitTb21lIG9wdGlvbnMgYXJlIHBsYXRmb3JtIHdpZGUsIHNvbWUgYWZmZWN0IHNpbmdsZSBjb3Jlcy4gQnkgZGVmYXVsdCB2YWx1ZXMKK29mIGNvcmUgemVybyBhcmUgZGlzcGxheWVkIG9ubHkuIGNwdXBvd2VyIC0tY3B1IGFsbCBjcHVpbmZvIHdpbGwgc2hvdyB0aGUKK3NldHRpbmdzIG9mIGFsbCBjb3Jlcywgc2VlIGNwdXBvd2VyKDEpIGhvdyB0byBjaG9vc2Ugc3BlY2lmaWMgY29yZXMuCisKKy5TSCAiU0VFIEFMU08iCitPcHRpb25zIGFyZSBkZXNjcmliZWQgaW4gZGV0YWlsIGluOgorCitjcHVwb3dlcigxKSwgY3B1cG93ZXItc2V0KDEpCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItbW9uaXRvci4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLW1vbml0b3IuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWNmYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLW1vbml0b3IuMQpAQCAtMCwwICsxLDE3OSBAQAorLlRIIENQVVBPV0VSXC1NT05JVE9SICIxIiAiMjIvMDIvMjAxMSIgIiIgImNwdXBvd2VyIE1hbnVhbCIKKy5TSCBOQU1FCitjcHVwb3dlclwtbW9uaXRvciBcLSBSZXBvcnQgcHJvY2Vzc29yIGZyZXF1ZW5jeSBhbmQgaWRsZSBzdGF0aXN0aWNzCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiBjcHVwb3dlciBtb25pdG9yCisuUkIgIlwtbCIKKworLkIgY3B1cG93ZXIgbW9uaXRvcgorLlJCIFsgIlwtbSA8bW9uMT4sIiBbICI8bW9uMj4sLi4uIiBdIF0KKy5SQiBbICJcLWkgc2Vjb25kcyIgXQorLmJyCisuQiBjcHVwb3dlciBtb25pdG9yCisuUkIgWyAiXC1tIDxtb24xPiwiIFsgIjxtb24yPiwuLi4iIF0gXQorLlJCIGNvbW1hbmQKKy5icgorLlNIIERFU0NSSVBUSU9OCitcZkJjcHVwb3dlci1tb25pdG9yIFxmUCByZXBvcnRzIHByb2Nlc3NvciB0b3BvbG9neSwgZnJlcXVlbmN5IGFuZCBpZGxlIHBvd2VyCitzdGF0ZSBzdGF0aXN0aWNzLiBFaXRoZXIgXGZCY29tbWFuZFxmUCBpcyBmb3JrZWQgYW5kCitzdGF0aXN0aWNzIGFyZSBwcmludGVkIHVwb24gaXRzIGNvbXBsZXRpb24sIG9yIHN0YXRpc3RpY3MgYXJlIHByaW50ZWQgcGVyaW9kaWNhbGx5LgorCitcZkJjcHVwb3dlci1tb25pdG9yIFxmUCBpbXBsZW1lbnRzIGluZGVwZW5kZW50IHByb2Nlc3NvciBzbGVlcCBzdGF0ZSBhbmQKK2ZyZXF1ZW5jeSBjb3VudGVycy4gU29tZSBhcmUgcmV0cmlldmVkIGZyb20ga2VybmVsIHN0YXRpc3RpY3MsIHNvbWUgYXJlCitkaXJlY3RseSByZWFkaW5nIG91dCBoYXJkd2FyZSByZWdpc3RlcnMuIFVzZSBcLWwgdG8gZ2V0IGFuIG92ZXJ2aWV3IHdoaWNoIGFyZQorc3VwcG9ydGVkIG9uIHlvdXIgc3lzdGVtLgorCisuU0ggT3B0aW9ucworLlBQCitcLWwKKy5SUyA0CitMaXN0IGF2YWlsYWJsZSBtb25pdG9ycyBvbiB5b3VyIHN5c3RlbS4gQWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IGVhY2ggbW9uaXRvcgorYXJlIHNob3duOgorLlJTIDIKKy5JUCBcKGJ1CitUaGUgbmFtZSBpbiBxdW90YXRpb24gbWFya3Mgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byB0aGUgXC1tIHBhcmFtZXRlci4KKy5JUCBcKGJ1CitUaGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjb3VudGVycyB0aGUgbW9uaXRvciBzdXBwb3J0cyBpbiBicmFja2V0cy4KKy5JUCBcKGJ1CitUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGUgY291bnRlcnMgbWlnaHQgb3ZlcmZsb3csIGR1ZSB0bworaW1wbGVtZW50YXRpb24gY29uc3RyYWludHMuCisuSVAgXChidQorVGhlIG5hbWUgYW5kIGEgZGVzY3JpcHRpb24gb2YgZWFjaCBjb3VudGVyIGFuZCBpdHMgcHJvY2Vzc29yIGhpZXJhcmNoeSBsZXZlbAorY292ZXJhZ2UgaW4gc3F1YXJlIGJyYWNrZXRzOgorLlJTIDQKKy5JUCBcKGJ1CitbVF0gXC0+IFRocmVhZAorLklQIFwoYnUKK1tDXSBcLT4gQ29yZQorLklQIFwoYnUKK1tQXSBcLT4gUHJvY2Vzc29yIFBhY2thZ2UgKFNvY2tldCkKKy5JUCBcKGJ1CitbTV0gXC0+IE1hY2hpbmUvUGxhdGZvcm0gd2lkZSBjb3VudGVyCisuUkUKKy5SRQorLlJFCisuUFAKK1wtbSA8bW9uMT4sPG1vbjI+LC4uLgorLlJTIDQKK09ubHkgZGlzcGxheSBzcGVjaWZpYyBtb25pdG9ycy4gVXNlIHRoZSBtb25pdG9yIHN0cmluZyhzKSBwcm92aWRlZCBieSBcLWwgb3B0aW9uLgorLlJFCisuUFAKK1wtaSBzZWNvbmRzCisuUlMgNAorTWVhc3VyZSBpbnRlcnZhbGwuCisuUkUKKy5QUAorY29tbWFuZAorLlJTIDQKK01lYXN1cmUgaWRsZSBhbmQgZnJlcXVlbmN5IGNoYXJhY3RlcmlzdGljcyBvZiBhbiBhcmJpdHJhcnkgY29tbWFuZC93b3JrbG9hZC4KK1RoZSBleGVjdXRhYmxlIFxmQmNvbW1hbmRcZlAgaXMgZm9ya2VkIGFuZCB1cG9uIGl0cyBleGl0LCBzdGF0aXN0aWNzIGdhdGhlcmVkIHNpbmNlIGl0IHdhcworZm9ya2VkIGFyZSBkaXNwbGF5ZWQuCisuUkUKKy5QUAorXC12CisuUlMgNAorSW5jcmVhc2UgdmVyYm9zaXR5IGlmIHRoZSBiaW5hcnkgd2FzIGNvbXBpbGVkIHdpdGggdGhlIERFQlVHIG9wdGlvbiBzZXQuCisuUkUKKworLlNIIE1PTklUT1IgREVTQ1JJUFRJT05TCisuU1MgIklkbGVfU3RhdHMiCitTaG93cyBzdGF0aXN0aWNzIG9mIHRoZSBjcHVpZGxlIGtlcm5lbCBzdWJzeXN0ZW0uIFZhbHVlcyBhcmUgcmV0cmlldmVkIGZyb20KKy9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY3B1aWRsZS9zdGF0ZSovLgorVGhlIGtlcm5lbCB1cGRhdGVzIHRoZXNlIHZhbHVlcyBldmVyeSB0aW1lIGFuIGlkbGUgc3RhdGUgaXMgZW50ZXJlZCBvcgorbGVmdC4gVGhlcmVmb3JlIHRoZXJlIGNhbiBiZSBzb21lIGluYWNjdXJhY3kgd2hlbiBjb3JlcyBhcmUgaW4gYW4gaWRsZQorc3RhdGUgZm9yIHNvbWUgdGltZSB3aGVuIHRoZSBtZWFzdXJlIHN0YXJ0cyBvciBlbmRzLiBJbiB3b3JzdCBjYXNlIGl0IGNhbiBoYXBwZW4KK3RoYXQgb25lIGNvcmUgc3RheWVkIGluIGFuIGlkbGUgc3RhdGUgZm9yIHRoZSB3aG9sZSBtZWFzdXJlIHRpbWUgYW5kIHRoZSBpZGxlCitzdGF0ZSB1c2FnZSB0aW1lIGFzIGV4cG9ydGVkIGJ5IHRoZSBrZXJuZWwgZGlkIG5vdCBnZXQgdXBkYXRlZC4gSW4gdGhpcyBjYXNlCithIHN0YXRlIHJlc2lkZW5jeSBvZiAwIHBlcmNlbnQgaXMgc2hvd24gd2hpbGUgaXQgd2FzIDEwMC4KKworLlNTICJNcGVyZiIKK1RoZSBuYW1lIGNvbWVzIGZyb20gdGhlIGFwZXJmL21wZXJmIChhdmVyYWdlIGFuZCBtYXhpbXVtKSBNU1IgcmVnaXN0ZXJzIHVzZWQKK3doaWNoIGFyZSBhdmFpbGFibGUgb24gcmVjZW50IFg4NiBwcm9jZXNzb3JzLiBJdCBzaG93cyB0aGUgYXZlcmFnZSBmcmVxdWVuY3kKKyhpbmNsdWRpbmcgYm9vc3QgZnJlcXVlbmNpZXMpLgorVGhlIGZhY3QgdGhhdCBvbiBhbGwgcmVjZW50IGhhcmR3YXJlIHRoZSBtcGVyZiB0aW1lciBzdG9wcyB0aWNraW5nIGluIGFueSBpZGxlCitzdGF0ZSBpdCBpcyBhbHNvIHVzZWQgdG8gc2hvdyBDMCAocHJvY2Vzc29yIGlzIGFjdGl2ZSkgYW5kIEN4IChwcm9jZXNzb3IgaXMgaW4KK2FueSBzbGVlcCBzdGF0ZSkgdGltZXMuIFRoZXNlIGNvdW50ZXJzIGRvIG5vdCBoYXZlIHRoZSBpbmFjY3VyYWN5IHJlc3RyaWN0aW9ucwordGhlICJJZGxlX1N0YXRzIiBjb3VudGVycyBtYXkgc2hvdy4KK01heSB3b3JrIHBvb3JseSBvbiBMaW51eC0yLjYuMjAgdGhyb3VnaCAyLjYuMjksIGFzIHRoZSBcZkJhY3BpLWNwdWZyZXEgXGZQCitrZXJuZWwgZnJlcXVlbmN5IGRyaXZlciBwZXJpb2RpY2FsbHkgY2xlYXJlZCBhcGVyZi9tcGVyZiByZWdpc3RlcnMgaW4gdGhvc2UKK2tlcm5lbHMuCisKKy5TUyAiTmVoYWxlbSIgIlNhbmR5QnJpZGdlIgorSW50ZWwgQ29yZSBhbmQgUGFja2FnZSBzbGVlcCBzdGF0ZSBjb3VudGVycy4KK1RocmVhZHMgKGh5cGVydGhyZWFkZWQgY29yZXMpIG1heSBub3QgYmUgYWJsZSB0byBlbnRlciBkZWVwZXIgY29yZSBzdGF0ZXMgaWYKK2l0cyBzaWJsaW5nIGlzIHV0aWxpemVkLgorRGVlcGVzdCBwYWNrYWdlIHNsZWVwIHN0YXRlcyBtYXkgaW4gcmVhbGl0eSBzaG93IHVwIGFzIG1hY2hpbmUvcGxhdGZvcm0gd2lkZQorc2xlZXAgc3RhdGVzIGFuZCBjYW4gb25seSBiZSBlbnRlcmVkIGlmIGFsbCBjb3JlcyBhcmUgaWRsZS4gTG9vayB1cCBJbnRlbAorbWFudWFscyAoc29tZSBhcmUgcHJvdmlkZWQgaW4gdGhlIFJlZmVyZW5jZXMgc2VjdGlvbikgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworLlNTICJPbnRhcmlvIiAiTGlhbm8iCitBTUQgbGFwdG9wIGFuZCBkZXNrdG9wIHByb2Nlc3NvciAoZmFtaWx5IDEyaCBhbmQgMTRoKSBzbGVlcCBzdGF0ZSBjb3VudGVycy4KK1RoZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIHZpYSBQQ0kgYW5kIHRoZXJlZm9yZSBjYW4gc3RpbGwgYmUgcmVhZCBvdXQgd2hpbGUKK2NvcmVzIGhhdmUgYmVlbiBvZmZsaW5lZC4KKworVGhlcmUgaXMgb25lIHNwZWNpYWwgY291bnRlcjogTkJQMSAoTm9ydGggQnJpZGdlIFAxKS4KK1RoaXMgb25lIGFsd2F5cyByZXR1cm5zIDAgb3IgMSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIE5vcnRoIEJyaWRnZSBQMQorcG93ZXIgc3RhdGUgZ290IGVudGVyZWQgYXQgbGVhc3Qgb25jZSBkdXJpbmcgbWVhc3VyZSB0aW1lLgorQmVpbmcgYWJsZSB0byBlbnRlciBOQlAxIHN0YXRlIGFsc28gZGVwZW5kcyBvbiBncmFwaGljcyBwb3dlciBtYW5hZ2VtZW50LgorVGhlcmVmb3JlIHRoaXMgY291bnRlciBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgZ3JhcGhpY3MnIGRyaXZlcgorcG93ZXIgbWFuYWdlbWVudCBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLgorCisuU0ggRVhBTVBMRVMKKworY3B1cG93ZXIgbW9uaXRvciAtbCIgbWF5IHNob3c6CisuUlMgNAorTW9uaXRvciAiTXBlcmYiICgzIHN0YXRlcykgXC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgOTIyMDAwMDAwIHMKKworICAgLi4uCisKK01vbml0b3IgIklkbGVfU3RhdHMiICgzIHN0YXRlcykgXC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgNDI5NDk2NzI5NSBzCisKKyAgIC4uLgorCisuUkUKK2NwdXBvd2VyIG1vbml0b3IgXC1tICJJZGxlX1N0YXRzLE1wZXJmIiBzY3AgL3RtcC90ZXN0IC9uZnMvdG1wCisKK01vbml0b3IgdGhlIHNjcCBjb21tYW5kLCBzaG93IGJvdGggTXBlcmYgYW5kIElkbGVfU3RhdHMgc3RhdGVzIGNvdW50ZXIKK3N0YXRpc3RpY3MsIGJ1dCBpbiBleGNoYW5nZWQgb3JkZXIuCisKKworCisuUkUKK0JlIGNhcmVmdWwgdGhhdCB0aGUgdHlwaWNhbCBjb21tYW5kIHRvIGZ1bGx5IHV0aWxpemUgb25lIENQVSBieSBkb2luZzoKKworY3B1cG93ZXIgbW9uaXRvciBjYXQgL2Rldi96ZXJvID4vZGV2L251bGwKKworRG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCwgYmVjYXVzZSB0aGUgbWVhc3VyZWQgb3V0cHV0IGlzIHJlZGlyZWN0ZWQgdG8KKy9kZXYvbnVsbC4gVGhpcyBjb3VsZCBnZXQgd29ya2Fyb3VuZGVkIGJ5IHB1dHRpbmcgdGhlIGxpbmUgaW50byBhbiBvd24sIHRpbnkKK3NoZWxsIHNjcmlwdC4gSGl0IENUUkxcLWMgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kIGFuZCBnZXQgdGhlIG1lYXN1cmUgb3V0cHV0CitkaXNwbGF5ZWQuCisKKy5TSCBSRUZFUkVOQ0VTCisiQklPUyBhbmQgS2VybmVsIERldmVsb3BlcuKAmXMgR3VpZGUgKEJLREcpIGZvciBBTUQgRmFtaWx5IDE0aCBQcm9jZXNzb3JzIgoraHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDMxNzAucGRmCisKKyJJbnRlbMKuIFR1cmJvIEJvb3N0IFRlY2hub2xvZ3kKK2luIEludGVswq4gQ29yZeKEoiBNaWNyb2FyY2hpdGVjdHVyZSAoTmVoYWxlbSkgQmFzZWQgUHJvY2Vzc29ycyIKK2h0dHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vZGVzaWduL3Byb2Nlc3Nvci9hcHBsbm90cy8zMjAzNTQucGRmCisKKyJJbnRlbMKuIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbAorVm9sdW1lIDNCOiBTeXN0ZW0gUHJvZ3JhbW1pbmcgR3VpZGUiCitodHRwOi8vd3d3LmludGVsLmNvbS9wcm9kdWN0cy9wcm9jZXNzb3IvbWFudWFscworCisuU0ggRklMRVMKKy50YQorLm5mCisvZGV2L2NwdS8qL21zcgorL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Ki9jcHVpZGxlL3N0YXRlKi8uCisuZmkKKworLlNIICJTRUUgQUxTTyIKK3Bvd2VydG9wKDgpLCBtc3IoNCksIHZtc3RhdCg4KQorLlBQCisuU0ggQVVUSE9SUworLm5mCitXcml0dGVuIGJ5IFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+CisKK05laGFsZW0sIFNhbmR5QnJpZGdlIG1vbml0b3JzIGFuZCBjb21tYW5kIHBhc3NpbmcKK2Jhc2VkIG9uIHR1cmJvc3RhdC44IGZyb20gTGVuIEJyb3duIDxsZW4uYnJvd25AaW50ZWwuY29tPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLXNldC4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLXNldC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTU0YTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItc2V0LjEKQEAgLTAsMCArMSwxMDMgQEAKKy5USCBDUFVQT1dFUlwtU0VUICIxIiAiMjIvMDIvMjAxMSIgIiIgImNwdXBvd2VyIE1hbnVhbCIKKy5TSCBOQU1FCitjcHVwb3dlclwtc2V0IFwtIFNldCBwcm9jZXNzb3IgcG93ZXIgcmVsYXRlZCBrZXJuZWwgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMKKy5TSCBTWU5PUFNJUworLmZ0IEIKKy5CIGNwdXBvd2VyIHNldCBbIFwtYiBWQUwgXSBbIFwtcyBWQUwgXSBbIFwtbSBWQUwgXQorCisKKy5TSCBERVNDUklQVElPTgorXGZCY3B1cG93ZXIgc2V0IFxmUCBzZXRzIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBkaXJlY3RseSBhY2Nlc3NlcyBoYXJkd2FyZQorcmVnaXN0ZXJzIGFmZmVjdGluZyBwcm9jZXNzb3IgcG93ZXIgc2F2aW5nIHBvbGljaWVzLgorCitTb21lIG9wdGlvbnMgYXJlIHBsYXRmb3JtIHdpZGUsIHNvbWUgYWZmZWN0IHNpbmdsZSBjb3Jlcy4gQnkgZGVmYXVsdCB2YWx1ZXMKK2FyZSBhcHBsaWVkIG9uIGFsbCBjb3Jlcy4gSG93IHRvIG1vZGlmeSBzaW5nbGUgY29yZSBjb25maWd1cmF0aW9ucyBpcworZGVzY3JpYmVkIGluIHRoZSBjcHVwb3dlcigxKSBtYW5wYWdlIGluIHRoZSBcLVwtY3B1IG9wdGlvbiBzZWN0aW9uLiBXaGV0aGVyIGFuCitvcHRpb24gYWZmZWN0cyB0aGUgd2hvbGUgc3lzdGVtIG9yIGNhbiBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwgY29yZXMgaXMKK2Rlc2NyaWJlZCBpbiB0aGUgT3B0aW9ucyBzZWN0aW9ucy4KKworVXNlIFxmQmNwdXBvd2VyIGluZm8gXGZQIHRvIHJlYWQgb3V0IGN1cnJlbnQgc2V0dGluZ3MgYW5kIHdoZXRoZXIgdGhleSBhcmUKK3N1cHBvcnRlZCBvbiB0aGUgc3lzdGVtIGF0IGFsbC4KKworLlNIIE9wdGlvbnMKKy5QUAorXC1cLXBlcmYtYmlhcywgXC1iCisuUlMgNAorU2V0cyBhIHJlZ2lzdGVyIG9uIHN1cHBvcnRlZCBJbnRlbCBwcm9jZXNzb3JlIHdoaWNoIGFsbG93cyBzb2Z0d2FyZSB0byBjb252ZXkKK2l0cyBwb2xpY3kgZm9yIHRoZSByZWxhdGl2ZSBpbXBvcnRhbmNlIG9mIHBlcmZvcm1hbmNlIHZlcnN1cyBlbmVyZ3kgc2F2aW5ncyB0bwordGhlICBwcm9jZXNzb3IuCisKK1RoZSByYW5nZSBvZiB2YWxpZCBudW1iZXJzIGlzIDAtMTUsIHdoZXJlIDAgaXMgbWF4aW11bQorcGVyZm9ybWFuY2UgYW5kIDE1IGlzIG1heGltdW0gZW5lcmd5IGVmZmljaWVuY3kuCisKK1RoZSBwcm9jZXNzb3IgdXNlcyB0aGlzIGluZm9ybWF0aW9uIGluIG1vZGVsLXNwZWNpZmljIHdheXMKK3doZW4gaXQgbXVzdCBzZWxlY3QgdHJhZGUtb2ZmcyBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZAorZW5lcmd5IGVmZmljaWVuY3kuCisKK1RoaXMgcG9saWN5IGhpbnQgZG9lcyBub3Qgc3VwZXJzZWRlIFByb2Nlc3NvciBQZXJmb3JtYW5jZSBzdGF0ZXMKKyhQLXN0YXRlcykgb3IgQ1BVIElkbGUgcG93ZXIgc3RhdGVzIChDLXN0YXRlcyksIGJ1dCBhbGxvd3MKK3NvZnR3YXJlIHRvIGhhdmUgaW5mbHVlbmNlIHdoZXJlIGl0IHdvdWxkIG90aGVyd2lzZSBiZSB1bmFibGUKK3RvIGV4cHJlc3MgYSBwcmVmZXJlbmNlLgorCitGb3IgZXhhbXBsZSwgdGhpcyBzZXR0aW5nIG1heSB0ZWxsIHRoZSBoYXJkd2FyZSBob3cKK2FnZ3Jlc3NpdmVseSBvciBjb25zZXJ2YXRpdmVseSB0byBjb250cm9sIGZyZXF1ZW5jeQoraW4gdGhlICJ0dXJibyByYW5nZSIgYWJvdmUgdGhlIGV4cGxpY2l0bHkgT1MtY29udHJvbGxlZAorUC1zdGF0ZSBmcmVxdWVuY3kgcmFuZ2UuICBJdCBtYXkgYWxzbyB0ZWxsIHRoZSBoYXJkd2FyZQoraG93IGFnZ3Jlc3NpdmVseSBpdCBzaG91bGQgZW50ZXIgdGhlIE9TIHJlcXVlc3RlZCBDLXN0YXRlcy4KKworVGhpcyBvcHRpb24gY2FuIGJlIGFwcGxpZWQgdG8gaW5kaXZpZHVhbCBjb3JlcyBvbmx5IHZpYSB0aGUgXC1cLWNwdSBvcHRpb24sCitjcHVwb3dlcigxKS4KKworU2V0dGluZyB0aGUgcGVyZm9ybWFuY2UgYmlhcyB2YWx1ZSBvbiBvbmUgQ1BVIGNhbiBtb2RpZnkgdGhlIHNldHRpbmcgb24KK3JlbGF0ZWQgQ1BVcyBhcyB3ZWxsIChmb3IgZXhhbXBsZSBhbGwgQ1BVcyBvbiBvbmUgc29ja2V0KSwgYmVjYXVzZSBvZgoraGFyZHdhcmUgcmVzdHJpY3Rpb25zLgorVXNlIFxmQmNwdXBvd2VyIC1jIGFsbCBpbmZvIC1iXGZQIHRvIHZlcmlmeS4KKworVGhpcyBvcHRpb25zIG5lZWRzIHRoZSBtc3Iga2VybmVsIGRyaXZlciAoQ09ORklHX1g4Nl9NU1IpIGxvYWRlZC4KKy5SRQorLlBQCitcLVwtc2NoZWRcLW1jLCAgXC1tIFsgVkFMIF0KKy5SRQorXC1cLXNjaGVkXC1zbXQsIFwtcyBbIFZBTCBdCisuUlMgNAorXC1cLXNjaGVkXC1tYyB1dGlsaXplcyBjb3JlcyBpbiBvbmUgcHJvY2Vzc29yIHBhY2thZ2Uvc29ja2V0IGZpcnN0IGJlZm9yZQorcHJvY2Vzc2VzIGFyZSBzY2hlZHVsZWQgdG8gb3RoZXIgcHJvY2Vzc29yIHBhY2thZ2VzL3NvY2tldHMuCisKK1wtXC1zY2hlZFwtc210IHV0aWxpemVzIHRocmVhZCBzaWJsaW5ncyBvZiBvbmUgcHJvY2Vzc29yIGNvcmUgZmlyc3QgYmVmb3JlCitwcm9jZXNzZXMgYXJlIHNjaGVkdWxlZCB0byBvdGhlciBjb3Jlcy4KKworVGhlIGltcGFjdCBvbiBwb3dlciBjb25zdW1wdGlvbiBhbmQgcGVyZm9ybWFuY2UgKHBvc2l0aXYgb3IgbmVnYXRpdikgaGVhdmlseQorZGVwZW5kcyBvbiBwcm9jZXNzb3Igc3VwcG9ydCBmb3IgZGVlcCBzbGVlcCBzdGF0ZXMsIGZyZXF1ZW5jeSBzY2FsaW5nIGFuZAorZnJlcXVlbmN5IGJvb3N0IG1vZGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBvdGhlciB0aHJlYWQgc2libGluZ3MKK2FuZCBwcm9jZXNzb3IgY29yZXMuCisKK1Rha2VuIG92ZXIgZnJvbSBrZXJuZWwgZG9jdW1lbnRhdGlvbjoKKworQWRqdXN0IHRoZSBrZXJuZWwncyBtdWx0aS1jb3JlIHNjaGVkdWxlciBzdXBwb3J0LgorCitQb3NzaWJsZSB2YWx1ZXMgYXJlOgorLlJTIDIKKzAgLSBObyBwb3dlciBzYXZpbmcgbG9hZCBiYWxhbmNlIChkZWZhdWx0IHZhbHVlKQorCisxIC0gRmlsbCBvbmUgdGhyZWFkL2NvcmUvcGFja2FnZSBmaXJzdCBmb3IgbG9uZyBydW5uaW5nIHRocmVhZHMKKworMiAtIEFsc28gYmlhcyB0YXNrIHdha2V1cHMgdG8gc2VtaS1pZGxlIGNwdSBwYWNrYWdlIGZvciBwb3dlcgorc2F2aW5ncworLlJFCisKK3NjaGVkX21jX3Bvd2VyX3NhdmluZ3MgaXMgZGVwZW5kZW50IHVwb24gU0NIRURfTUMsIHdoaWNoIGlzCitpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgaXMgZGVwZW5kZW50IHVwb24gU0NIRURfU01ULCB3aGljaAoraXMgaXRzZWxmIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQuCisKK1RoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCit0aGF0IG9uZSBmaWxlIG1heSBiZSBwcmVzZW50IHdpdGhvdXQgdGhlIG90aGVyLgorCisuU0ggIlNFRSBBTFNPIgorY3B1cG93ZXItaW5mbygxKSwgY3B1cG93ZXItbW9uaXRvcigxKSwgcG93ZXJ0b3AoMSkKKy5QUAorLlNIIEFVVEhPUlMKKy5uZgorXC1cLXBlcmZcLWJpYXMgcGFydHMgd3JpdHRlbiBieSBMZW4gQnJvd24gPGxlbi5icm93bkBpbnRlbC5jb20+CitUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLjEgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGMyMGZlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLjEKQEAgLTAsMCArMSw3MiBAQAorLlRIIENQVVBPV0VSICIxIiAiMDcvMDMvMjAxMSIgIiIgImNwdXBvd2VyIE1hbnVhbCIKKy5TSCBOQU1FCitjcHVwb3dlciBcLSBTaG93cyBhbmQgc2V0cyBwcm9jZXNzb3IgcG93ZXIgcmVsYXRlZCB2YWx1ZXMKKy5TSCBTWU5PUFNJUworLmZ0IEIKKy5CIGNwdXBvd2VyIFsgXC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXQorCisuQiBjcHVwb3dlciBcLXZ8XC1cLXZlcnNpb24KKworLkIgY3B1cG93ZXIgXC1ofFwtXC1oZWxwCisKKy5TSCBERVNDUklQVElPTgorXGZCY3B1cG93ZXIgXGZQIGlzIGEgY29sbGVjdGlvbiBvZiB0b29scyB0byBleGFtaW5lIGFuZCB0dW5lIHBvd2VyIHNhdmluZworcmVsYXRlZCBmZWF0dXJlcyBvZiB5b3VyIHByb2Nlc3Nvci4KKworVGhlIG1hbnBhZ2VzIG9mIHRoZSBzdWJjb21tYW5kcyAoY3B1cG93ZXJcLTxzdWJjb21tYW5kPigxKSkgcHJvdmlkZSBkZXRhaWxlZAorZGVzY3JpcHRpb25zIG9mIHN1cHBvcnRlZCBmZWF0dXJlcy4gUnVuIFxmQmNwdXBvd2VyIGhlbHBcZlAgdG8gZ2V0IGFuIG92ZXJ2aWV3CitvZiBzdXBwb3J0ZWQgc3ViY29tbWFuZHMuCisKKy5TSCBPcHRpb25zCisuUFAKK1wtXC1oZWxwLCBcLWgKKy5SUyA0CitTaG93cyBzdXBwb3J0ZWQgc3ViY29tbWFuZHMgYW5kIGdlbmVyYWwgdXNhZ2UuCisuUkUKKy5QUAorXC1cLWNwdSBjcHVsaXN0LCAgXC1jIGNwdWxpc3QKKy5SUyA0CitPbmx5IHNob3cgb3Igc2V0IHZhbHVlcyBmb3Igc3BlY2lmaWMgY29yZXMuCitUaGlzIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBzdWJjb21tYW5kcywgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlCittYW5wYWdlcyBvZiB0aGUgc3ViY29tbWFuZHMuCisKK1NvbWUgc3ViY29tbWFuZHMgYWNjZXNzIGFsbCBjb3JlcyAodHlwaWNhbGx5IHRoZSAqXC1zZXQgY29tbWFuZHMpLCBzb21lIG9ubHkKK3RoZSBmaXJzdCBjb3JlICh0eXBpY2FsbHkgdGhlICpcLWluZm8gY29tbWFuZHMpIGJ5IGRlZmF1bHQuCisKK1RoZSBzeW50YXggZm9yIDxjcHVsaXN0PiBpcyBiYXNlZCBvbiBob3cgdGhlIGtlcm5lbCBleHBvcnRzIENQVSBiaXRtYXNrcyB2aWEKK3N5c2ZzIGZpbGVzLiBTb21lIGV4YW1wbGVzOgorLlJTIDQKKy5UUCAxNgorSW5wdXQKK0VxdWl2YWxlbnQgdG8KKy5UUAorYWxsCithbGwgY29yZXMKKy5UUAorMFwtMworMCwxLDIsMworLlRQCiswXC03OjIKKzAsMiw0LDYKKy5UUAorMSwzLDUtNworMSwzLDUsNiw3CisuVFAKKzBcLTM6Miw4XC0xNTo0CiswLDIsOCwxMgkKKy5SRQorLlJFCisuUFAKK1wtXC12ZXJzaW9uLCAgXC12CisuUlMgNAorUHJpbnQgdGhlIHBhY2thZ2UgbmFtZSBhbmQgdmVyc2lvbiBudW1iZXIuCisKKy5TSCAiU0VFIEFMU08iCitjcHVwb3dlci1zZXQoMSksIGNwdXBvd2VyLWluZm8oMSksIGNwdXBvd2VyLWlkbGUoMSksCitjcHVwb3dlci1mcmVxdWVuY3ktc2V0KDEpLCBjcHVwb3dlci1mcmVxdWVuY3ktaW5mbygxKSwgY3B1cG93ZXItbW9uaXRvcigxKSwKK3Bvd2VydG9wKDEpCisuUFAKKy5TSCBBVVRIT1JTCisubmYKK1wtXC1wZXJmXC1iaWFzIHBhcnRzIHdyaXR0ZW4gYnkgTGVuIEJyb3duIDxsZW4uYnJvd25AaW50ZWwuY29tPgorVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2NzLnBvIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vY3MucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyMmM0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2NzLnBvCkBAIC0wLDAgKzEsOTQ0IEBACisjIHRyYW5zbGF0aW9uIG9mIGNzLnBvIHRvIEN6ZWNoCisjIEN6ZWNoIHRyYW5zbGF0aW9uIGZvciBjcHVmcmVxdXRpbHMgcGFja2FnZQorIyBDemVjaCBtZXNzYWdlcyBmb3IgY3B1ZnJlcXV0aWxzLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcga2F2b2wKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGNwdWZyZXF1dGlscyBwYWNrYWdlLgorIworIyBLYXJlbCBWb2xuw70gPGthdm9sQHNlem5hbS5jej4sIDIwMDcsIDIwMDguCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBjc1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wMy0wOCAxNzowMyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wNi0xMSAxNjoyNiswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBLYXJlbCBWb2xuw70gPGthdm9sQHNlem5hbS5jej5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDemVjaCA8ZGlza3V6ZUBsaXN0cy5sMTBuLmN6PlxuIgorIkxhbmd1YWdlOiBjc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogIG5wbHVyYWxzPTM7IHBsdXJhbD0obj09MSkgPyAwIDogKG4+PTIgJiYgbjw9NCkgPyAxIDogMjtcbiIKKyJYLUdlbmVyYXRvcjogS0JhYmVsIDEuMTEuNFxuIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzozNgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjQzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTEKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1OCB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzozMworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzIiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDcKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NTYKK21zZ2lkICJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NjMKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzcKK21zZ2lkICJOb3J0aCBCcmlkZ2UgUDEgYm9vbGVhbiBjb3VudGVyIChyZXR1cm5zIDAgb3IgMSkiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzozNQorbXNnaWQgIlByb2Nlc3NvciBDb3JlIG5vdCBpZGxlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NDIKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NTAKK21zZ2lkICJBdmVyYWdlIEZyZXF1ZW5jeSAoaW5jbHVkaW5nIGJvb3N0KSBpbiBNSHoiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLXZdIFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdjogYmUgbW9yZSB2ZXJib3NlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaDogcHJpbnQgdGhpcyBoZWxwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaTogdGltZSBpbnRlcnZhbGwgdG8gbWVhc3VyZSBmb3IgaW4gc2Vjb25kcyAoZGVmYXVsdCAxKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXQ6IHNob3cgQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLW06IHNob3cgc3BlY2lmaWMgQ1BVIHNsZWVwIG1vbml0b3JzIG9ubHkgKGluIHNhbWUgb3JkZXIpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib25seSBvbmUgb2Y6IC10LCAtbCwgLW0gYXJlIGFsbG93ZWRcbiIKKyJJZiBub25lIG9mIHRoZW0gaXMgcGFzc2VkLCIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50IGZ1bmN0aW9uLiBJbXBsZW1lbnRhdGlvbiBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqaXMgb2ZmbGluZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtYXggbW9uaXRvciBuYW1lIGxlbmd0aCAoJWQpIGV4Y2VlZGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2hpbmcgbW9uaXRvciBmb3VuZCBpbiAlcywgdHJ5IC1sIG9wdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyByb290IGFjY2Vzc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIEhXIENzdGF0ZSBtb25pdG9ycyBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIC0tdmVyc2lvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTb21lIHN1YmNvbW1hbmRzIGNhbiBtYWtlIHVzZSBvZiB0aGUgLWMgY3B1bGlzdCBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5kIHJlYWQgdXAgdGhlIHN1YmNvbW1hbmQncyBtYW5wYWdlIHdoZXRoZXIgaXQgaXMgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlVzZSBjcHVwb3dlciBoZWxwIHN1YmNvbW1hbmQgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgc3ViY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iCittc2dzdHIgIiIKKyJDaHlieSB2IHByb2dyYW11IHByb3PDrW0gaGxhc3RlIG5hICVzIChhbmdsaWNreSkuXG4iCisiQ2h5YnkgdiBwxZlla2xhZHUgcHJvc8OtbSBobGFzdGUgbmEga2F2b2xAc2V6bmFtLmN6ICjEjWVza3kgOy0pXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHBhcnNpbmcgY3B1IGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIgorbXNnc3RyICJOZWx6ZSB6amlzdGl0IHBvxI1ldCBDUFUgKCVzOiAlcyksIHDFmWVkcG9rbMOhZMOhIHNlIDEuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKyIgICAgICAgICBtaW5pbcOhbG7DrSBmcmVrdmVuY2UgQ1BVIC0gbWF4aW3DoWxuw60gZnJla3ZlbmNlIENQVSAtICByZWd1bMOhdG9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIgorbXNnc3RyICIiCisKKyMuIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworIy4gb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisjLiBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKyMuICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisjLgorIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBTdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQWN0aXZlOiAlc1xuIgorbXNnc3RyICIgIG92bGFkYcSNOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEJvb3N0IFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFRvdGFsIFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QYiVkOiAlbHVNSHogKGJvb3N0IHN0YXRlKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVAlZDogICVsdU1IelxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG5vIG9yIHVua25vd24gY3B1ZnJlcSBkcml2ZXIgaXMgYWN0aXZlIG9uIHRoaXMgQ1BVXG4iCittc2dzdHIgIiAgcHJvIHRlbnRvIENQVSBuZW7DrSBha3Rpdm7DrSDFvsOhZG7DvSB6bsOhbcO9IG92bGFkYcSNIGNwdWZyZXFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIG92bGFkYcSNOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiCittc2dzdHIgIiAgQ1BVLCBrdGVyw6kgbXVzw60gbcSbbml0IGZyZWt2ZW5jaSB6w6Fyb3ZlxYg6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeSBjb29yZGluYXRlZCBieSBzb2Z0d2FyZTogIgorbXNnc3RyICIgIENQVSwga3RlcsOpIG11c8OtIG3Em25pdCBmcmVrdmVuY2kgesOhcm92ZcWIOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG1heGltdW0gdHJhbnNpdGlvbiBsYXRlbmN5OiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgaGFyZHdhcmUgbGltaXRzOiAiCittc2dzdHIgIiAgaGFyZHdhcm92w6kgbWV6ZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgZnJlcXVlbmN5IHN0ZXBzOiAiCittc2dzdHIgIiAgZG9zdHVwbsOpIGZyZWt2ZW5jZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIKK21zZ3N0ciAiICBkb3N0dXBuw6kgcmVndWzDoXRvcnk6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBwb2xpY3k6IGZyZXF1ZW5jeSBzaG91bGQgYmUgd2l0aGluICIKK21zZ3N0ciAiICBzb3XEjWFzbsOhIHRha3Rpa2E6IGZyZWt2ZW5jZSBieSBtxJtsYSBiw710IG1lemkgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFuZCAiCittc2dzdHIgIiBhICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZ292ZXJub3IgXCIlc1wiIG1heSBkZWNpZGUgd2hpY2ggc3BlZWQgdG8gdXNlXG4iCisiICAgICAgICAgICAgICAgICAgd2l0aGluIHRoaXMgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyIgIFJlZ3Vsw6F0b3IgXCIlc1wiIG3Fr8W+ZSByb3pob2Rub3V0IGpha291IGZyZWt2ZW5jaSBwb3XFvsOtdFxuIgorIiAgICAgICAgICAgICAgICAgICAgdiB0xJtjaHRvIG1lesOtY2guXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiCittc2dzdHIgIiAgc291xI1hc27DoSBmcmVrdmVuY2UgQ1BVIGplICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoYXNzZXJ0ZWQgYnkgY2FsbCB0byBoYXJkd2FyZSkiCittc2dzdHIgIiAgKHpqacWhdMSbbm8gaGFyZHdhcm92w71tIHZvbMOhbsOtbSkiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGNwdWZyZXEgc3RhdHM6ICIKK21zZ3N0ciAiICBzdGF0aXN0aWthIGNwdWZyZXE6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlXFvml0w606IGNwdWZyZXEtaW5mbyBbcMWZZXDDrW5hxI1lXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzMgdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb25zOlxuIgorbXNnc3RyICJQxZllcMOtbmHEjWU6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBQcmludHMgb3V0IGRlYnVnIGluZm9ybWF0aW9uIFtkZWZhdWx0XVxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFZ5cMOtxaFlIGxhZGljw60gaW5mb3JtYWNlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNwdWZyZXEgY29yZSAqXG4iCittc2dzdHIgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIFpqaXN0w60gYWt0dcOhbG7DrSBmcmVrdmVuY2ksIG5hIGt0ZXLDqSBDUFUgYsSbxb7DrVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgcG9kbGUgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpICpcbiIKK21zZ3N0ciAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgWmppc3TDrSBha3R1w6FsbsOtIGZyZWt2ZW5jaSwgbmEga3RlcsOpIENQVSBixJvFvsOtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB6IGhhcmR3YXJlIChkb3N0dXBuw6kgamVuIHXFvml2YXRlbGkgcm9vdCkgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIgorImFsbG93ZWQgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBaamlzdMOtIG1pbmltw6FsbsOtIGEgbWF4aW3DoWxuw60gZG9zdHVwbm91IGZyZWt2ZW5jaSBDUFUgIgorIipcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIgKlxuIgorbXNnc3RyICIgIC1kLCAtLWRyaXZlciAgICAgICAgIFpqaXN0w60gYWt0aXZuw60gb3ZsYWRhxI0gY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEdldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5ICpcbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBaamlzdMOtIGFrdHXDoWxuw60gdGFrdGlrdSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIgorbXNnc3RyICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIFpqaXN0w60gZG9zdHVwbsOpIHJlZ3Vsw6F0b3J5IGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgIgorImZyZXF1ZW5jeSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIFpqaXN0w60sIGt0ZXLDqSBDUFUgbXVzw60gbcSbbml0IGZyZWt2ZW5jaSB6w6Fyb3ZlxYggKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5XG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlZCBieSBzb2Z0d2FyZSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIFpqaXN0w60sIGt0ZXLDqSBDUFUgbXVzw60gbcSbbml0IGZyZWt2ZW5jaSB6w6Fyb3ZlxYggKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zdGF0cyAgICAgICAgICBTaG93cyBjcHVmcmVxIHN0YXRpc3RpY3MgaWYgYXZhaWxhYmxlXG4iCittc2dzdHIgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgWm9icmF6w60gc3RhdGlzdGlrdSBjcHVmcmVxLCBqZS1saSBkb3N0dXBuw6FcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSAiCisiY2hhbmdlcyAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIFpqaXN0w60gbWluaW3DoWxuw60gYSBtYXhpbcOhbG7DrSBkb3N0dXBub3UgZnJla3ZlbmNpIENQVSAiCisiKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtYiwgLS1ib29zdCAgICAgICAgICBDaGVja3MgZm9yIHR1cmJvIG9yIGJvb3N0IG1vZGVzICAqXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImNwdWZyZXFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgVnlww63FoWUgaW5mb3JtYWNlIHZlIGZvcm3DoXR1LCBqYWvDvSBwb3XFvsOtdmFsbyByb3pocmFuw61cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIC9wcm9jL2NwdWZyZXEgdiBrZXJuZWxlY2ggxZlhZHkgMi40IGEgxI1hc27DqSAyLjZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBodW1hbi1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSAtZiwgLXcsIC1zIGFuZCAteSAiCisicGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBWw71zdHVwIHBhcmFtZXRyxa8gLWYsIC13IGEgLXMgdiDigJ5saWRtaSDEjWl0ZWxuw6lt4oCcICIKKyJmb3Jtw6F0dVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFZ5cMOtxaFlIHR1dG8gbsOhcG92xJtkdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIG5vIGFyZ3VtZW50IG9yIG9ubHkgdGhlIC1jLCAtLWNwdSBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGRlYnVnIG91dHB1dCBhYm91dFxuIgorImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG4iCittc2dzdHIgIiIKKyJOZW7DrS1saSB6YWTDoW4gxb7DoWRuw70gcGFyYW1ldHIgbmVibyBqZS1saSB6YWTDoW4gcG91emUgcMWZZXDDrW5hxI0gLWMsIC0tY3B1LCAiCisianNvdVxuIgorInZ5cHPDoW55IGxhZGljw60gaW5mb3JtYWNlLCBjb8W+IG3Fr8W+ZSBiw710IHXFvml0ZcSNbsOpIG5hcMWZw61rbGFkIHDFmWkgaGzDocWhZW7DrSBjaHliLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvciB0aGUgYXJndW1lbnRzIG1hcmtlZCB3aXRoICosIG9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpc1xuIgorImVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byB6ZXJvXG4iCittc2dzdHIgIiIKKyJOZW7DrS1saSBwxZlpIHBvdcW+aXTDrSBwxZllcMOtbmHEjcWvIG96bmHEjWVuw71jaCAqIHphZMOhbiBwYXJhbWV0ciAtYyBuZWJvIC0tY3B1LFxuIgorInDFmWVkcG9rbMOhZMOhIHNlIGplaG8gaG9kbm90YSAwLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1ICIKKyJhcmd1bWVudFxuIgorbXNnc3RyICJaYWRhbsO9IHBhcmFtZXRyIG5lbcWvxb5lIGLDvXQgcG91xb5pdCB6w6Fyb3ZlxYggcyBwxZllcMOtbmHEjWVtIC1jIG5lYm8gLS1jcHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tY3B1IHBhcmFtZXRlciBhbmQvb3JcbiIKKyJtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTmVsemUgemFkYXQgdsOtY2UgbmXFviBqZWRlbiBwYXJhbWV0ciAtYyBuZWJvIC0tY3B1XG4iCisiYW5lYm8gdsOtY2UgbmXFviBqZWRlbiBwYXJhbWV0ciB1csSNdWrDrWPDrSB2w71zdHVwXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYwMCB1dGlscy9jcHVmcmVxLXNldC5jOjgyIHV0aWxzL2NwdXBvd2VyLXNldC5jOjQyCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6NDIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIgorbXNnc3RyICJuZXBsYXRuw70gbmVibyBuZXpuw6Ftw70gcGFyYW1ldHJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGFuYWx5emUgQ1BVICVkIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50XG4iCittc2dzdHIgIm5lbHplIGFuYWx5em92YXQgQ1BVICVkLCB2eXBhZMOhIHRvLCDFvmUgbmVuw60gcMWZw610b21lblxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MjAgdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJhbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFseXp1amkgQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVcW+aXTDrTogY3B1ZnJlcS1zZXQgW3DFmWVww61uYcSNZV1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIE5vdsOhIG5lam5pxb7FocOtIGZyZWt2ZW5jZSwga3Rlcm91IG3Fr8W+ZSByZWd1bMOhdG9yICIKKyJ2eWJyYXRcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIE5vdsOhIG5lanZ5xaHFocOtIGZyZWt2ZW5jZSwga3Rlcm91IG3Fr8W+ZSByZWd1bMOhdG9yICIKKyJ6dm9saXRcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIgorbXNnc3RyICIgIC1nIEdPViwgLS1nb3Zlcm5vcnMgR09WICBOb3bDvSByZWd1bMOhdG9yIGNwdWZyZXFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIKK21zZ3N0ciAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIEZyZWt2ZW5jZSwga3RlcsOhIG3DoSBiw710IG5hc3RhdmVuYS4gVnnFvmFkdWplLCBhYnkgIgorImJ5bFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgasOhZMWZZSBuYWhyw6FuIHJlZ3Vsw6F0b3Ig4oCadXNlcnNwYWNl4oCYLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFN3aXRjaGVzIGFsbCBoYXJkd2FyZS1yZWxhdGVkIENQVXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMzIHV0aWxzL2NwdXBvd2VyLXNldC5jOjI4IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFZ5cMOtxaFlIHR1dG8gbsOhcG92xJtkdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZXM6XG4iCisiMS4gT21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byBcImFsbFwiXG4iCittc2dzdHIgIiIKKyJOZW7DrS1saSBwxZlpIHBvdcW+aXTDrSBwxZllcMOtbmHEjcWvIG96bmHEjWVuw71jaCAqIHphZMOhbiBwYXJhbWV0ciAtYyBuZWJvIC0tY3B1LFxuIgorInDFmWVkcG9rbMOhZMOhIHNlIGplaG8gaG9kbm90YSAwLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiMi4gVGhlIC1mIEZSRVEsIC0tZnJlcSBGUkVRIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgIgorInBhcmFtZXRlclxuIgorIiAgIGV4Y2VwdCB0aGUgLWMgQ1BVLCAtLWNwdSBDUFUgcGFyYW1ldGVyXG4iCisiMy4gRlJFUXVlbmNpZXMgY2FuIGJlIHBhc3NlZCBpbiBIeiwga0h6IChkZWZhdWx0KSwgTUh6LCBHSHosIG9yIFRIelxuIgorIiAgIGJ5IHBvc3RmaXhpbmcgdGhlIHZhbHVlIHdpdGggdGhlIHdhbnRlZCB1bml0IG5hbWUsIHdpdGhvdXQgYW55IHNwYWNlXG4iCisiICAgKEZSRVF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorbXNnc3RyICIiCisiUG96bsOhbWt5OlxuIgorIjEuIFZ5bmVjaMOhbsOtIHBhcmFtZXRydSAtYyBuZWJvIC0tY3B1IGplIGVrdml2YWxlbnRuw60gamVobyBuYXN0YXZlbsOtIG5hIDBcbiIKKyIyLiBQxZllcMOtbmHEjSAtZiBuZWJvIC0tZnJlcSBuZW3Fr8W+ZSBiw710IHBvdcW+aXQgesOhcm92ZcWIIHMgxb7DoWRuw71tIGppbsO9bSB2eWptYSAtIgorImNcbiIKKyIgICBuZWJvIC0tY3B1XG4iCisiMy4gRnJla3ZlbmNlIChGUkVRKSBtb2hvdSBiw710IHphZMOhbnkgdiBIeiwga0h6ICh2w71jaG96w60pLCBNSHosIEdIeiBuZWJvIFRIelxuIgorIiAgIHDFmWlwb2plbsOtbSBuw6F6dnUgamVkbm90a3kgYmV6IG1lemVyeSBtZXppIMSNw61zbGVtIGEgamVkbm90a291XG4iCisiICAgKEZSRVEgdiBrSHogPV4gSHogKiAwLDAwMSA9IF4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKyItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCAiCisiYXZhaWxhYmxlLFxuIgorIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljICIKKyJmcmVxdWVuY3lcbiIKKyIgICBvciBiZWNhdXNlIHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IgaXNuJ3QgbG9hZGVkP1xuIgorbXNnc3RyICIiCisiQ2h5YmEgcMWZaSBuYXN0YXZvdsOhbsOtIG5vdsO9Y2ggaG9kbm90LiBPYnZ5a2zDqSBwcm9ibMOpbXk6XG4iCisiLSBNw6F0ZSBwYXTFmWnEjW7DoSBhZG1pbmlzdHLDoXRvcnNrw6EgcHLDoXZhPyAocm9vdD8pXG4iCisiLSBKZSBwb8W+YWRvdmFuw70gcmVndWzDoXRvciBkb3N0dXBuw70gdiBqw6FkxZllPyAobW9kcHJvYmU/KVxuIgorIi0gU25hxb7DrXRlIHNlIG5hc3Rhdml0IG5lcGxhdG5vdSB0YWt0aWt1P1xuIgorIi0gU25hxb7DrXRlIHNlIG5hc3Rhdml0IHVyxI1pdG91IGZyZWt2ZW5jaSwgYWxlIG5lbsOtIGRvc3R1cG7DvVxuIgorIiAgcmVndWzDoXRvciDigJp1c2Vyc3BhY2XigJgsIG5hcMWZw61rbGFkIHByb3Rvxb5lIG5lbsOtIG5haHLDoW4gdiBqw6FkxZllLFxuIgorIiAgbmVibyBuZWx6ZSBuYSB0b210byBoYXJkd2FyZSBuYXN0YXZpdCB1csSNaXRvdSBmcmVrdmVuY2k/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nLCB1bmtub3duIG9yIHVuaGFuZGxlZCBDUFU/XG4iCittc2dzdHIgIm5lem7DoW3DvSBuZWJvIG5lcG9kcG9yb3ZhbsO9IENQVT9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorIi1nLy0tZ292ZXJub3IgcGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisicMWZZXDDrW5hxI0gLWYvLS1mcmVxIG5lbcWvxb5lIGLDvXQgcG91xb5pdCB6w6Fyb3ZlxYhcbiIKKyJzIHDFmWVww61uYcSNZW0gLWQvLS1taW4sIC11Ly0tbWF4IG5lYm8gLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdXQgb2YgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGFuZFxuIgorIi1nLy0tZ292ZXJub3IgbXVzdCBiZSBwYXNzZWRcbiIKK21zZ3N0ciAiIgorIk11c8OtIGLDvXQgemFkw6FuIGFsZXNwb8WIIGplZGVuIHDFmWVww61uYcSNXG4iCisiLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXggbmVibyAtZy8tLWdvdmVybm9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3B1OiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0tc2NoZWQtbWMgIFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyICIKKyJwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1wZXJmLWJpYXMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtbWMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLXNtdCBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtbWMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBwZXJmLWJpYXMgdmFsdWUgb24gQ1BVICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyAgICBHZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBaamlzdMOtIGFrdHXDoWxuw60gdGFrdGlrdSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIy4gaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVAorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwNSB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBlcmYtYmlhczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHl6dWppIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBpZGxlIHN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTnVtYmVyIG9mIGlkbGUgc3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IgorbXNnc3RyICIgIGRvc3R1cG7DqSBmcmVrdmVuY2U6ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3MvRGVzY3JpcHRpb246ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGF0ZW5jeTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkR1cmF0aW9uOiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGRyaXZlclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBvdmxhZGHEjTogJXNcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZ292ZXJub3I6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjLiBwcmludGYoIkNzdGF0ZXM6ICVkXG4iLCBjc3RhdGVzKTsKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQzBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhpbXVtIGFsbG93ZWQgbGF0ZW5jeTogJWx1IHVzZWNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdGVzOlx0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgdHlwZVtDJWRdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJsYXRlbmN5WyUwM2x1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlWyUwOGx1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmF0aW9uWyUwMjBMdV0gXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlXFvml0w606IGNwdWZyZXEtaW5mbyBbcMWZZXDDrW5hxI1lXVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc2lsZW50ICAgICAgICAgT25seSBzaG93IGdlbmVyYWwgQy1zdGF0ZSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFZ5cMOtxaFlIGxhZGljw60gaW5mb3JtYWNlXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiYWNwaS9wcm9jZXNzb3IvKi9wb3dlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIG9sZGVyIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgVnlww63FoWUgaW5mb3JtYWNlIHZlIGZvcm3DoXR1LCBqYWvDvSBwb3XFvsOtdmFsbyByb3pocmFuw61cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIC9wcm9jL2NwdWZyZXEgdiBrZXJuZWxlY2ggxZlhZHkgMi40IGEgxI1hc27DqSAyLjZcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTmVsemUgemFkYXQgdsOtY2UgbmXFviBqZWRlbiBwYXJhbWV0ciAtYyBuZWJvIC0tY3B1XG4iCisiYW5lYm8gdsOtY2UgbmXFviBqZWRlbiBwYXJhbWV0ciB1csSNdWrDrWPDrSB2w71zdHVwXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBDUFUgbnVtYmVyIHdoaWNoIGluZm9ybWF0aW9uIHNoYWxsIGJlIGRldGVybWluZWQgIgorI34gImFib3V0XG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIMSMw61zbG8gQ1BVLCBvIGt0ZXLDqW0gc2UgbWFqw60gemppc3RpdCBpbmZvcm1hY2VcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1iZXIgb2YgQ1BVIHdoZXJlIGNwdWZyZXEgc2V0dGluZ3Mgc2hhbGwgYmUgIgorI34gIm1vZGlmaWVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICDEjMOtc2xvIENQVSBwcm8ga3RlcsO9IHNlIG3DoSBwcm92w6lzdCBuYXN0YXZlbsOtICIKKyN+ICJjcHVmcmVxXG4iCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9wby9kZS5wbyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzA5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9wby9kZS5wbwpAQCAtMCwwICsxLDk2MSBAQAorIyBHZXJtYW4gdHJhbnNsYXRpb25zIGZvciBjcHVmcmVxdXRpbHMgcGFja2FnZQorIyBHZXJtYW4gbWVzc2FnZXMgZm9yIGNwdWZyZXF1dGlscy4KKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kubmV0PgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgY3B1ZnJlcXV0aWxzIHBhY2thZ2UuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBjcHVmcmVxdXRpbHMgMDA2XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTAzLTA4IDE3OjAzKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTA4LTA4IDE3OjE4KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6ICA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTk9ORVxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzozNgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjQzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTEKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1OCB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzozMworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzIiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDcKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NTYKK21zZ2lkICJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NjMKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzcKK21zZ2lkICJOb3J0aCBCcmlkZ2UgUDEgYm9vbGVhbiBjb3VudGVyIChyZXR1cm5zIDAgb3IgMSkiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzozNQorbXNnaWQgIlByb2Nlc3NvciBDb3JlIG5vdCBpZGxlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NDIKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NTAKK21zZ2lkICJBdmVyYWdlIEZyZXF1ZW5jeSAoaW5jbHVkaW5nIGJvb3N0KSBpbiBNSHoiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLXZdIFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdjogYmUgbW9yZSB2ZXJib3NlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaDogcHJpbnQgdGhpcyBoZWxwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaTogdGltZSBpbnRlcnZhbGwgdG8gbWVhc3VyZSBmb3IgaW4gc2Vjb25kcyAoZGVmYXVsdCAxKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXQ6IHNob3cgQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLW06IHNob3cgc3BlY2lmaWMgQ1BVIHNsZWVwIG1vbml0b3JzIG9ubHkgKGluIHNhbWUgb3JkZXIpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib25seSBvbmUgb2Y6IC10LCAtbCwgLW0gYXJlIGFsbG93ZWRcbiIKKyJJZiBub25lIG9mIHRoZW0gaXMgcGFzc2VkLCIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50IGZ1bmN0aW9uLiBJbXBsZW1lbnRhdGlvbiBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqaXMgb2ZmbGluZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtYXggbW9uaXRvciBuYW1lIGxlbmd0aCAoJWQpIGV4Y2VlZGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2hpbmcgbW9uaXRvciBmb3VuZCBpbiAlcywgdHJ5IC1sIG9wdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyByb290IGFjY2Vzc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIEhXIENzdGF0ZSBtb25pdG9ycyBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIC0tdmVyc2lvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTb21lIHN1YmNvbW1hbmRzIGNhbiBtYWtlIHVzZSBvZiB0aGUgLWMgY3B1bGlzdCBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5kIHJlYWQgdXAgdGhlIHN1YmNvbW1hbmQncyBtYW5wYWdlIHdoZXRoZXIgaXQgaXMgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlVzZSBjcHVwb3dlciBoZWxwIHN1YmNvbW1hbmQgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgc3ViY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iCittc2dzdHIgIkJpdHRlIG1lbGRlbiBTaWUgRmVobGVyIGFuICVzLlxuIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBwYXJzaW5nIGNwdSBsaXN0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ViY29tbWFuZCAlcyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjb3VudCB0aGUgbnVtYmVyIG9mIENQVXMgKCVzOiAlcyksIGFzc3VtaW5nIDFcbiIKK21zZ3N0ciAiIgorIktvbm50ZSBuaWNodCBkaWUgQW56YWhsIGRlciBDUFVzIGhlcmF1c2ZpbmRlbiAoJXMgOiAlcyksIG5laG1lIGRhaGVyIDEgYW4uXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKyIgICAgICAgICAgbWluaW1hbGUgQ1BVLVRha3RmcmVxLiAtICBtYXhpbWFsZSBDUFUtVGFrdGZyZXEuIC0gIFJlZ2xlciAgXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIgorbXNnc3RyICIiCisKKyMuIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworIy4gb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisjLiBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKyMuICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisjLgorIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBTdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQWN0aXZlOiAlc1xuIgorbXNnc3RyICIgIFRyZWliZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQm9vc3QgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgVG90YWwgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIKK21zZ3N0ciAiICBrZWluIG9kZXIgbmljaHQgYmVzdGltbWJhcmVyIGNwdWZyZXEtVHJlaWJlciBha3RpdlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgVHJlaWJlcjogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiCittc2dzdHIgIiAgRm9sZ2VuZGUgQ1BVcyBsYXVmZW4gbWl0IGRlciBnbGVpY2hlbiBIYXJkd2FyZS1UYWt0ZnJlcXVlbno6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlOiAiCittc2dzdHIgIiAgRGllIFRha3RmcmVxdWVueiBmb2xnZW5kZXIgQ1BVcyB3ZXJkZW4gcGVyIFNvZnR3YXJlIGtvb3JkaW5pZXJ0OiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG1heGltdW0gdHJhbnNpdGlvbiBsYXRlbmN5OiAiCittc2dzdHIgIiAgTWF4aW1hbGUgRGF1ZXIgZWluZXMgVGFrdGZyZXF1ZW56d2VjaHNlbHM6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgaGFyZHdhcmUgbGltaXRzOiAiCittc2dzdHIgIiAgSGFyZHdhcmViZWRpbmd0ZSBHcmVuemVuIGRlciBUYWt0ZnJlcXVlbno6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGZyZXF1ZW5jeSBzdGVwczogIgorbXNnc3RyICIgIG32Z2xpY2hlIFRha3RmcmVxdWVuemVuOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9yczogIgorbXNnc3RyICIgIG32Z2xpY2hlIFJlZ2xlcjogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IHBvbGljeTogZnJlcXVlbmN5IHNob3VsZCBiZSB3aXRoaW4gIgorbXNnc3RyICIgIG1vbWVudGFuZSBUYWt0aWs6IGRpZSBGcmVxdWVueiBzb2xsIGlubmVyaGFsYiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgYW5kICIKK21zZ3N0ciAiIHVuZCAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGdvdmVybm9yIFwiJXNcIiBtYXkgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuIgorIiAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGlzIHJhbmdlLlxuIgorbXNnc3RyICIiCisiICBsaWVnZW4uIERlciBSZWdsZXIgXCIlc1wiIGthbm4gZnJlaSBlbnRzY2hlaWRlbixcbiIKKyIgICAgICAgICAgICAgICAgICAgIHdlbGNoZSBUYWt0ZnJlcXVlbnogaW5uZXJoYWxiIGRpZXNlciBHcmVuemUgdmVyd2VuZGV0ICIKKyJ3aXJkLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIgorbXNnc3RyICIgIG1vbWVudGFuZSBUYWt0ZnJlcXVlbnogaXN0ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoYXNzZXJ0ZWQgYnkgY2FsbCB0byBoYXJkd2FyZSkiCittc2dzdHIgIiAgKHZlcmlmaXppZXJ0IGR1cmNoIE5hY2hmcmFnZSBiZWkgZGVyIEhhcmR3YXJlKSIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3B1ZnJlcSBzdGF0czogIgorbXNnc3RyICIgIFN0YXRpc3RpazoiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJBdWZydWY6IGNwdWZyZXEtaW5mbyBbT3B0aW9uZW5dXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MyB1dGlscy9jcHVmcmVxLXNldC5jOjI2IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIzCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbnM6XG4iCittc2dzdHIgIk9wdGlvbmVuOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIKK21zZ3N0ciAiIgorIiAgLWUsIC0tZGVidWcgICAgICAgICAgRXJ6ZXVndCBkZXRhaWxsaWVydGUgSW5mb3JtYXRpb25lbiwgaGlsZnJlaWNoXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB6dW0gQXVmc3D8cmVuIHZvbiBGZWhsZXJuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNwdWZyZXEgY29yZSAqXG4iCittc2dzdHIgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIEZpbmRldCBkaWUgbW9tZW50YW5lIENQVS1UYWt0ZnJxdWVueiBoZXJhdXMgKG5hY2hcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIE1laW51bmcgZGVzIEJldHJpZWJzc3lzdGVtcykgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KSAqXG4iCittc2dzdHIgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIEZpbmRldCBkaWUgbW9tZW50YW5lIENQVS1UYWt0ZnJlcXVlbnogaGVyYXVzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAodmVyaWZpemllcnQgZHVyY2ggTmFjaGZyYWdlIGJlaSBkZXIgSGFyZHdhcmUpXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBbbnVyIGRlciBBZG1pbmlzdHJhdG9yIGthbm4gZGllcyB0dW5dICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICIKKyJhbGxvd2VkICpcbiIKK21zZ3N0ciAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRmluZGV0IGRpZSBtaW5pbWFsZSB1bmQgbWF4aW1hbGUgVGFrdGZyZXF1ZW56IGhlcmF1cyAiCisiKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZCwgLS1kcml2ZXIgICAgICAgICBEZXRlcm1pbmVzIHRoZSB1c2VkIGNwdWZyZXEga2VybmVsIGRyaXZlciAqXG4iCittc2dzdHIgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRmluZGV0IGRlbiBtb21lbnRhbmVuIFRyZWliZXIgaGVyYXVzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kgKlxuIgorbXNnc3RyICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEZpbmRldCBkaWUgbW9tZW50YW5lIFRha3RpayBoZXJhdXMgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycyAqXG4iCittc2dzdHIgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRXJ6ZXVndCBlaW5lIExpc3RlIG1pdCB2ZXJm/GdiYXJlbiBSZWdsZXJuICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgIgorImZyZXF1ZW5jeSAqXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIEZpbmRldCBoZXJhdXMsIHdlbGNoZSBDUFVzIG1pdCBkZXJzZWxiZW4gIgorInBoeXNpa2FsaXNjaGVuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBUYWt0ZnJlcXVlbnogbGF1ZmVuICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5XG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlZCBieSBzb2Z0d2FyZSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIEZpbmRldCBoZXJhdXMsIHZvbiB3ZWxjaGVuIENQVXMgZGllIFRha3RmcmVxdWVueiAiCisiZHVyY2hcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGtvb3JkaW5pZXJ0IHdlcmRlbiBtdXNzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiICAtcywgLS1zdGF0cyAgICAgICAgICBaZWlndCwgc29mZXJuIG32Z2xpY2gsIFN0YXRpc3Rpa2VuIPxiZXIgY3B1ZnJlcSBhbi5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluZXMgdGhlIG1heGltdW0gbGF0ZW5jeSBvbiBDUFUgZnJlcXVlbmN5ICIKKyJjaGFuZ2VzICpcbiIKK21zZ3N0ciAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRmluZGV0IGRpZSBtYXhpbWFsZSBEYXVlciBlaW5lcyBUYWt0ZnJlcXVlbnp3ZWNoc2VscyAiCisiaGVyYXVzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJjcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIEVyemV1Z3QgSW5mb3JtYXRpb25lbiBpbiBlaW5lbSDkaG5saWNoZW0gRm9ybWF0IHp1ICIKKyJkZW1cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGRlciAvcHJvYy9jcHVmcmVxLURhdGVpIGluIDIuNC4gdW5kIGZy/GhlbiAyLjYuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBLZXJuZWwtVmVyc2lvbmVuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBodW1hbi1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSAtZiwgLXcsIC1zIGFuZCAteSAiCisicGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBGb3JtYXRpZXJ0IFRha3RmcmVxdWVuei0gdW5kIFplaXRkYXVlcmFuZ2FiZW4gaW4gIgorImJlc3NlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgbGVzYmFyZXIgRm9ybSAoTUh6LCBHSHo7IHVzLCBtcylcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBHaWJ0IGRpZXNlIEt1cnr8YmVyc2ljaHQgYXVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgbm8gYXJndW1lbnQgb3Igb25seSB0aGUgLWMsIC0tY3B1IHBhcmFtZXRlciBpcyBnaXZlbiwgZGVidWcgb3V0cHV0IGFib3V0XG4iCisiY3B1ZnJlcSBpcyBwcmludGVkIHdoaWNoIGlzIHVzZWZ1bCBlLmcuIGZvciByZXBvcnRpbmcgYnVncy5cbiIKK21zZ3N0ciAiIgorIlNvZmVybiBrZWluIGFuZGVyZXIgUGFyYW1ldGVyIGFscyAnLWMsIC0tY3B1JyBhbmdlZ2ViZW4gd2lyZCwgbGllZmVydCAiCisiZGllc2VzXG4iCisiUHJvZ3JhbW0gSW5mb3JtYXRpb25lbiwgZGllIHouQi4genVtIEJlcmljaHRlbiB2b24gRmVobGVybiBu/HR6bGljaCBzaW5kLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvciB0aGUgYXJndW1lbnRzIG1hcmtlZCB3aXRoICosIG9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpc1xuIgorImVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byB6ZXJvXG4iCittc2dzdHIgIiIKKyJCZWkgZGVuIG1pdCAqIG1hcmtpZXJ0ZW4gUGFyYW1ldGVybiB3aXJkICctLWNwdSAwJyBhbmdlbm9tbWVuLCBzb3dlaXQgbmljaHRcbiIKKyJtaXR0ZWxzIC1jIG9kZXIgLS1jcHUgZXR3YXMgYW5kZXJlcyBhbmdlZ2ViZW4gd2lyZFxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1ICIKKyJhcmd1bWVudFxuIgorbXNnc3RyICJEaWVzZSBPcHRpb24ga2FubiBuaWNodCBtaXQgZGVyIC0tY3B1LU9wdGlvbiBrb21iaW5pZXJ0IHdlcmRlblxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJNYW4ga2FubiBuaWNodCBtZWhyIGFscyBlaW5lbiAtLWNwdS1QYXJhbWV0ZXIgdW5kL29kZXIgbWVociBhbHMgZWluZW5cbiIKKyJpbmZvcm1hdGlvbnNzcGV6aWZpc2NoZW4gUGFyYW1ldGVyIGdsZWljaHplaXRpZyBhbmdlYmVuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYwMCB1dGlscy9jcHVmcmVxLXNldC5jOjgyIHV0aWxzL2NwdXBvd2VyLXNldC5jOjQyCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6NDIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIgorbXNnc3RyICJ1bmJla2FubnRlciBvZGVyIGZhbHNjaGVyIFBhcmFtZXRlclxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgYW5hbHl6ZSBDUFUgJWQgYXMgaXQgZG9lc24ndCBzZWVtIHRvIGJlIHByZXNlbnRcbiIKK21zZ3N0ciAiIgorIktvbm50ZSBuaWNodCBkaWUgQ1BVICVkIGFuYWx5c2llcmVuLCBkYSBzaWUgKHNjaGVpbmJhcj8pIG5pY2h0IGV4aXN0aWVydC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjIwIHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHlzaWVyZSBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxdWVuY3ktc2V0IFtvcHRpb25zXVxuIgorbXNnc3RyICJBdWZydWY6IGNwdWZyZXEtc2V0IFtPcHRpb25lbl1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5ldWUgbWluaW1hbGUgVGFrdGZyZXF1ZW56LCBkaWUgZGVyIFJlZ2xlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1c3fkaGxlbiBkYXJmXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIG5ldyBtYXhpbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXVlIG1heGltYWxlIFRha3RmcmVxdWVueiwgZGllIGRlciBSZWdsZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXN35GhsZW4gZGFyZlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5ldyBjcHVmcmVxIGdvdmVybm9yXG4iCittc2dzdHIgIiAgLWcgR09WLCAtLWdvdmVybm9ycyBHT1YgIHdlY2hzbGUgenUgUmVnbGVyIEdPVlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Zlcm5vciB0byBiZSBhdmFpbGFibGUgYW5kIGxvYWRlZFxuIgorbXNnc3RyICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc2V0emUgZXhha3RlIFRha3RmcmVxdWVuei4gQmVu9nRpZ3QgZGVuIFJlZ2xlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICd1c2Vyc3BhY2UnLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFN3aXRjaGVzIGFsbCBoYXJkd2FyZS1yZWxhdGVkIENQVXNcbiIKK21zZ3N0ciAiIgorIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFNldHplIFdlcnRlIGb8ciBhbGxlIENQVXMsIGRlcmVuIFRha3RmcmVxdWVuelxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlYmVkaW5ndCBpZGVudGlzY2ggaXN0LlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMzIHV0aWxzL2NwdXBvd2VyLXNldC5jOjI4IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIEdpYnQgZGllc2UgS3VyevxiZXJzaWNodCBhdXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGVzOlxuIgorIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIgorbXNnc3RyICIiCisiQmVpIGRlbiBtaXQgKiBtYXJraWVydGVuIFBhcmFtZXRlcm4gd2lyZCAnLS1jcHUgMCcgYW5nZW5vbW1lbiwgc293ZWl0IG5pY2h0XG4iCisibWl0dGVscyAtYyBvZGVyIC0tY3B1IGV0d2FzIGFuZGVyZXMgYW5nZWdlYmVuIHdpcmRcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIjIuIFRoZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyICIKKyJwYXJhbWV0ZXJcbiIKKyIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorIjMuIEZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHpcbiIKKyIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKK21zZ3N0ciAiIgorIkhpbndlaXNlOlxuIgorIjEuIFNvZmVybiBrZWluIC1jIG9kZXIgLS1jcHUtUGFyYW1ldGVyIGFuZ2VnZWJlbiBpc3QsIHdpcmQgJy0tY3B1IDAnXG4iCisiICAgYW5nZW5vbW1lblxuIgorIjIuIERlciBQYXJhbWV0ZXIgLWYgYnp3LiAtLWZyZXEga2FubiBtaXQga2VpbmVtIGFuZGVyZW4gYWxzIGRlbSBQYXJhbWV0ZXJcbiIKKyIgICAtYyBiencuIC0tY3B1IGtvbWJpbmllcnQgd2VyZGVuXG4iCisiMy4gRlJFUXVlbnplbiBr9m5uZW4gaW4gSHosIGtIeiAoU3RhbmRhcmQpLCBNSHosIEdIeiBvZGVyIFRIeiBlaW5nZWdlYmVuXG4iCisiICAgd2VyZGVuLCBpbmRlbSBkZXIgV2VydCB1bmQgdW5taXR0ZWxiYXIgYW5zY2hsaWXfZW5kIChvaG5lIExlZXJ6ZWljaGVuISlcbiIKKyIgICBkaWUgRWluaGVpdCBhbmdlZ2ViZW4gd2VyZGVuLiAoQnNwOiAxR0h6IClcbiIKKyIgICAoRlJFUXVlbnogaW4ga0h6ID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHNldHRpbmcgbmV3IHZhbHVlcy4gQ29tbW9uIGVycm9yczpcbiIKKyItIERvIHlvdSBoYXZlIHByb3BlciBhZG1pbmlzdHJhdGlvbiByaWdodHM/IChzdXBlci11c2VyPylcbiIKKyItIElzIHRoZSBnb3Zlcm5vciB5b3UgcmVxdWVzdGVkIGF2YWlsYWJsZSBhbmQgbW9kcHJvYmVkP1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhbiBpbnZhbGlkIHBvbGljeT9cbiIKKyItIFRyeWluZyB0byBzZXQgYSBzcGVjaWZpYyBmcmVxdWVuY3ksIGJ1dCB1c2Vyc3BhY2UgZ292ZXJub3IgaXMgbm90ICIKKyJhdmFpbGFibGUsXG4iCisiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgIgorImZyZXF1ZW5jeVxuIgorIiAgIG9yIGJlY2F1c2UgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vciBpc24ndCBsb2FkZWQ/XG4iCittc2dzdHIgIiIKKyJCZWltIEVpbnN0ZWxsZW4gaXN0IGVpbiBGZWhsZXIgYXVmZ2V0cmV0ZW4uIFR5cGlzY2hlIEZlaGxlcnF1ZWxsZW4gc2luZDpcbiIKKyItIG5pY2h0IGF1c3JlaWNoZW5kZSBSZWNodGUgKEFkbWluaXN0cmF0b3IpXG4iCisiLSBkZXIgUmVnbGVyIGlzdCBuaWNodCB2ZXJm/GdiYXIgYnp3LiBuaWNodCBnZWxhZGVuXG4iCisiLSBkaWUgYW5nZWdlYmVuZSBUYWt0aWsgaXN0IGlua29ycmVrdFxuIgorIi0gZWluZSBzcGV6aWZpc2NoZSBGcmVxdWVueiB3dXJkZSBhbmdlZ2ViZW4sIGFiZXIgZGVyIFJlZ2xlciAndXNlcnNwYWNlJ1xuIgorIiAga2FubiBlbnR3ZWRlciBoYXJkd2FyZWJlZGluZ3QgbmljaHQgZ2VudXR6dCB3ZXJkZW4gb2RlciBpc3QgbmljaHQgZ2VsYWRlblxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZywgdW5rbm93biBvciB1bmhhbmRsZWQgQ1BVP1xuIgorbXNnc3RyICJ1bmJla2FubnRlIG9kZXIgbmljaHQgcmVnZWxiYXJlIENQVVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIC1mLy0tZnJlcSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWQvLS1taW4sIC11Ly0tbWF4IG9yXG4iCisiLWcvLS1nb3Zlcm5vciBwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyJEZXIgLWYgYnp3LiAtLWZyZXEtUGFyYW1ldGVyIGthbm4gbmljaHQgbWl0IGRlbiBQYXJhbWV0ZXJuIC1kLy0tbWluLCAtdS8tLSIKKyJtYXhcbiIKKyJvZGVyIC1nLy0tZ292ZXJub3Iga29tYmluaWVydCB3ZXJkZW5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKyItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iCittc2dzdHIgIiIKKyJFcyBtdXNzIG1pbmRlc3RlbnMgZWluIFBhcmFtZXRlciBhdXMgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXggb2RlclxuIgorIi1nLy0tZ292ZXJub3IgYW5nZWdlYmVuIHdlcmRlbi5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjcHU6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIHNldCBbIC1iIHZhbCBdIFsgLW0gdmFsIF0gWyAtcyB2YWwgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyBbVkFMXSAgICBTZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1zY2hlZC1tYyAgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgIgorInBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICItLXBlcmYtYmlhcyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1tYyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtc210IHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1tYyAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLXNtdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyB2YWx1ZSBvbiBDUFUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzICAgIEdldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEZpbmRldCBkaWUgbW9tZW50YW5lIFRha3RpayBoZXJhdXMgKlxuIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210ICAgIEdldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQYXNzaW5nIG5vIG9wdGlvbiB3aWxsIHNob3cgYWxsIGluZm8sIGJ5IGRlZmF1bHQgb25seSBvbiBjb3JlIDBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjLiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTA1IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmdcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGVyZi1iaWFzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFseXNpZXJlIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBpZGxlIHN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTnVtYmVyIG9mIGlkbGUgc3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IgorbXNnc3RyICIgIG32Z2xpY2hlIFRha3RmcmVxdWVuemVuOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhdGVuY3k6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJEdXJhdGlvbjogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgVHJlaWJlcjogJXNcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZ292ZXJub3I6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjLiBwcmludGYoIkNzdGF0ZXM6ICVkXG4iLCBjc3RhdGVzKTsKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQzBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iCittc2dzdHIgIiAgTWF4aW1hbGUgRGF1ZXIgZWluZXMgVGFrdGZyZXF1ZW56d2VjaHNlbHM6ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXRlczpcdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQyVkOiAgICAgICAgICAgICAgICAgIHR5cGVbQyVkXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGF0ZW5jeVslMDNsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZVslMDhsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXJhdGlvblslMDIwTHVdIFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGlkbGVpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJBdWZydWY6IGNwdWZyZXEtaW5mbyBbT3B0aW9uZW5dXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zaWxlbnQgICAgICAgICBPbmx5IHNob3cgZ2VuZXJhbCBDLXN0YXRlIGluZm9ybWF0aW9uXG4iCittc2dzdHIgIiIKKyIgIC1lLCAtLWRlYnVnICAgICAgICAgIEVyemV1Z3QgZGV0YWlsbGllcnRlIEluZm9ybWF0aW9uZW4sIGhpbGZyZWljaFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgenVtIEF1ZnNw/HJlbiB2b24gRmVobGVyblxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImFjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIEVyemV1Z3QgSW5mb3JtYXRpb25lbiBpbiBlaW5lbSDkaG5saWNoZW0gRm9ybWF0IHp1ICIKKyJkZW1cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGRlciAvcHJvYy9jcHVmcmVxLURhdGVpIGluIDIuNC4gdW5kIGZy/GhlbiAyLjYuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBLZXJuZWwtVmVyc2lvbmVuXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk1hbiBrYW5uIG5pY2h0IG1laHIgYWxzIGVpbmVuIC0tY3B1LVBhcmFtZXRlciB1bmQvb2RlciBtZWhyIGFscyBlaW5lblxuIgorImluZm9ybWF0aW9uc3NwZXppZmlzY2hlbiBQYXJhbWV0ZXIgZ2xlaWNoemVpdGlnIGFuZ2ViZW5cbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIENQVSBudW1iZXIgd2hpY2ggaW5mb3JtYXRpb24gc2hhbGwgYmUgZGV0ZXJtaW5lZCAiCisjfiAiYWJvdXRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgTnVtbWVyIGRlciBDUFUsIPxiZXIgZGllIEluZm9ybWF0aW9uZW4gIgorI34gImhlcmF1c2dlZnVuZGVuIHdlcmRlbiBzb2xsZW5cbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1iZXIgb2YgQ1BVIHdoZXJlIGNwdWZyZXEgc2V0dGluZ3Mgc2hhbGwgYmUgIgorI34gIm1vZGlmaWVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBOdW1tZXIgZGVyIENQVSwgZGVyZW4gVGFrdGZyZXF1ZW56LSIKKyN+ICJFaW5zdGVsbHVuZ1xuIgorI34gIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlcmRlbiBzb2xsXG4iCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9wby9mci5wbyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2ZyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NWFkMjAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9wby9mci5wbwpAQCAtMCwwICsxLDk0NyBAQAorIyBGcmVuY2ggdHJhbnNsYXRpb25zIGZvciBjcHVmcmVxdXRpbHMgcGFja2FnZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQgVEhFIFBBQ0tBR0UnUyBDT1BZUklHSFQgSE9MREVSCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBjcHVmcmVxdXRpbHMgcGFja2FnZS4KKyMgRHVjcm90IEJydW5vIDxkdWNyb3RAcG91cGlub3Uub3JnPiwgMjAwNC4KKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBjcHVmcmVxdXRpbHMgMC4xLXByZTJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDMtMDggMTc6MDMrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMTEtMTcgMTU6NTMrMTAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQnJ1bm8gRHVjcm90IDxkdWNyb3RAcG91cGlub3Uub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IE5PTkVcbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6MzYKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo0MworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjUxCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTggdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjcwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6MzMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMyIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQ3Cittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjU2Cittc2dpZCAiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjYzCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzEiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjc3Cittc2dpZCAiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6MzUKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjQyCittc2dpZCAiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjUwCittc2dpZCAiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy12XSBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXY6IGJlIG1vcmUgdmVyYm9zZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC10OiBzaG93IENQVSB0b3BvbG9neS9oaWVyYXJjaHlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9ubHkgb25lIG9mOiAtdCwgLWwsIC1tIGFyZSBhbGxvd2VkXG4iCisiSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCBmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKmlzIG9mZmxpbmVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGggKCVkKSBleGNlZWRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsIHRyeSAtbCBvcHRpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1IHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgcm9vdCBhY2Nlc3NcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIFsgLWMgY3B1bGlzdCBdIHN1YmNvbW1hbmQgW0FSR1NdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciAtLXZlcnNpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnRlZCBzdWJjb21tYW5kcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImFuZCByZWFkIHVwIHRoZSBzdWJjb21tYW5kJ3MgbWFucGFnZSB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJVc2UgY3B1cG93ZXIgaGVscCBzdWJjb21tYW5kIGZvciBnZXR0aW5nIGhlbHAgZm9yIGFib3ZlIHN1YmNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIgorbXNnc3RyICJWZXVpbGxleiByYXBwb3J0ZXogbGVzIGVycmV1cnMgZXQgbGVzIGJvZ3VlcyDgICVzLCBzJ2lsIHZvdXMgcGxhaXQuXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHBhcnNpbmcgY3B1IGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIgorbXNnc3RyICJE6XRlcm1pbmF0aW9uIGR1IG5vbWJyZSBkZSBDUFVzICglcyA6ICVzKSBpbXBvc3NpYmxlLiAgQXNzdW1lIDFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgICAgICAgICBtaW5pbXVtIENQVSBmcmVxdWVuY3kgIC0gIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorIiAgICAgICAgIEZy6XF1ZW5jZSBDUFUgbWluaW1hbGUgLSBGculxdWVuY2UgQ1BVIG1heGltYWxlICAtIHLpZ3VsYXRldXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGV2YWx1YXRpbmcgQm9vc3QgQ2FwYWJpbGl0aWVzIG9uIENQVSAlZCAtLSBhcmUgeW91IHJvb3Q/XG4iCittc2dzdHIgIiIKKworIy4gUCBzdGF0ZSBjaGFuZ2VzIHZpYSBNU1IgYXJlIGlkZW50aWZpZWQgdmlhIGNwdWlkIDgwMDAwMDA3CisjLiBvbiBJbnRlbCBhbmQgQU1ELCBidXQgd2UgYXNzdW1lIGJvb3N0IGNhcGFibGUgbWFjaGluZXMgY2FuIGRvIHRoYXQKKyMuIGlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNworIy4gJiYgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDcpKSkKKyMuCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBib29zdCBzdGF0ZSBzdXBwb3J0OiBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAieWVzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJubyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICBBY3RpdmU6ICVzXG4iCittc2dzdHIgIiAgcGlsb3RlIDogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBCb29zdCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUGIlZDogJWx1TUh6IChib29zdCBzdGF0ZSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QJWQ6ICAlbHVNSHpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIgorbXNnc3RyICIgIHBhcyBkZSBwaWxvdGVzIGNwdWZyZXEgcmVjb25udSBwb3VyIGNlIENQVVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgcGlsb3RlIDogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIgorbXNnc3RyICIgIENQVXMgcXVpIGRvaXZlbnQgY2hhbmdlciBkZSBmculxdWVuY2VzIGVuIG3qbWUgdGVtcHMgOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIKK21zZ3N0ciAiICBDUFVzIHF1aSBkb2l2ZW50IGNoYW5nZXIgZGUgZnLpcXVlbmNlcyBlbiBt6m1lIHRlbXBzIDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICIgIGhhcmR3YXJlIGxpbWl0czogIgorbXNnc3RyICIgIGxpbWl0YXRpb24gbWF06XJpZWxsZSA6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGZyZXF1ZW5jeSBzdGVwczogIgorbXNnc3RyICIgIHBsYWdlIGRlIGZy6XF1ZW5jZSA6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzOiAiCittc2dzdHIgIiAgculndWxhdGV1cnMgZGlzcG9uaWJsZXMgOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiCittc2dzdHIgIiAgdGFjdGlxdWUgYWN0dWVsbGUgOiBsYSBmculxdWVuY2UgZG9pdCDqdHJlIGNvbXByaXNlIGVudHJlICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbmQgIgorbXNnc3RyICIgZXQgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IGRlY2lkZSB3aGljaCBzcGVlZCB0byB1c2VcbiIKKyIgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIKK21zZ3N0ciAiIgorIkxlIHLpZ3VsYXRldXIgXCIlc1wiIGVzdCBsaWJyZSBkZSBjaG9pc2lyIGxhIHZpdGVzc2VcbiIKKyIgICAgICAgICAgICAgICAgICBkYW5zIGNldHRlIHBsYWdlIGRlIGZy6XF1ZW5jZXMuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiCittc2dzdHIgIiAgbGEgZnLpcXVlbmNlIGFjdHVlbGxlIGRlIGNlIENQVSBlc3QgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChhc3NlcnRlZCBieSBjYWxsIHRvIGhhcmR3YXJlKSIKK21zZ3N0ciAiICh26XJpZmnpIHBhciB1biBhcHBlbCBkaXJlY3QgZHUgbWF06XJpZWwpIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjcHVmcmVxIHN0YXRzOiAiCittc2dzdHIgIiAgZGVzIHN0YXRpc3RpcXVlIGNvbmNlcm5hbnQgY3B1ZnJlcToiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc2FnZSA6IGNwdWZyZXEtaW5mbyBbb3B0aW9uc11cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDczIHV0aWxzL2NwdWZyZXEtc2V0LmM6MjYgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjMKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uczpcbiIKK21zZ3N0ciAiT3B0aW9ucyA6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBQcmludHMgb3V0IGRlYnVnIGluZm9ybWF0aW9uIFtkZWZhdWx0XVxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIEFmZmljaGVyIGxlcyBpbmZvcm1hdGlvbnMgZGUgZOlib2d1YWdlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNwdWZyZXEgY29yZSAqXG4iCittc2dzdHIgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIE9idGVuaXIgbGEgZnLpcXVlbmNlIGFjdHVlbGxlIGR1IENQVSBzZWxvbiBsZSBwb2ludFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZGUgdnVlIGR1IGNvZXVyIGR1IHN5c3TobWUgZGUgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpICpcbiIKK21zZ3N0ciAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgT2J0ZW5pciBsYSBmculxdWVuY2UgYWN0dWVsbGUgZHUgQ1BVIGRpcmVjdGVtZW50IHBhclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgbGUgbWF06XJpZWwgKGRvaXQg6nRyZSByb290KSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAiCisiYWxsb3dlZCAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIEFmZmljaGUgbGVzIGZy6XF1ZW5jZXMgbWluaW1hbGVzIGV0IG1heGltYWxlcyBkdSBDUFUgIgorIipcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIgKlxuIgorbXNnc3RyICIgIC1kLCAtLWRyaXZlciAgICAgICAgIEFmZmljaGUgbGUgcGlsb3RlIGNwdWZyZXEgdXRpbGlz6SAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEdldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5ICpcbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBBZmZpY2hlIGxhIHRhY3RpcXVlIGFjdHVlbGxlIGRlIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycyAqXG4iCittc2dzdHIgIiIKKyIgIC1nLCAtLWdvdmVybm9ycyAgICAgIEFmZmljaGUgbGVzIHLpZ3VsYXRldXJzIGRpc3BvbmlibGVzIGRlIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgIgorImZyZXF1ZW5jeSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgICBBZmZpY2hlIHF1ZWxzIHNvbnQgbGVzIENQVXMgcXVpIGRvaXZlbnQgY2hhbmdlciBkZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgIGZy6XF1ZW5jZXMgZW4gbeptZSB0ZW1wcyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlICpcbiIKK21zZ3N0ciAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgIEFmZmljaGUgcXVlbHMgc29udCBsZXMgQ1BVcyBxdWkgZG9pdmVudCBjaGFuZ2VyIGRlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgZnLpcXVlbmNlcyBlbiBt6m1lIHRlbXBzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiICAtcywgLS1zdGF0cyAgICAgICAgICBJbmRpcXVlIGRlcyBzdGF0aXN0aXF1ZXMgY29uY2VybmFudCBjcHVmcmVxLCBzaVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9uaWJsZXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSAiCisiY2hhbmdlcyAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIEFmZmljaGUgbGVzIGZy6XF1ZW5jZXMgbWluaW1hbGVzIGV0IG1heGltYWxlcyBkdSBDUFUgIgorIipcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJjcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIEFmZmljaGUgbGVzIGluZm9ybWF0aW9ucyBlbiB1dGlsaXNhbnQgbCdpbnRlcmZhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGZvdXJuaWUgcGFyIC9wcm9jL2NwdWZyZXEsIHBy6XNlbnRlIGRhbnMgbGVzICIKKyJ2ZXJzaW9uc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgMi40IGV0IGxlcyBhbmNpZW5uZXMgdmVyc2lvbnMgMi42IGR1IG5veWF1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgIgorInBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgIGFmZmljaGUgZGFucyB1biBmb3JtYXQgbGlzaWJsZSBwb3VyIHVuIGh1bWFpblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgIHBvdXIgbGVzIG9wdGlvbnMgLWYsIC13IGV0IC1zIChNSHosIEdIeilcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBhZmZpY2hlIGwnYWlkZS1t6W1vaXJlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgbm8gYXJndW1lbnQgb3Igb25seSB0aGUgLWMsIC0tY3B1IHBhcmFtZXRlciBpcyBnaXZlbiwgZGVidWcgb3V0cHV0IGFib3V0XG4iCisiY3B1ZnJlcSBpcyBwcmludGVkIHdoaWNoIGlzIHVzZWZ1bCBlLmcuIGZvciByZXBvcnRpbmcgYnVncy5cbiIKK21zZ3N0ciAiIgorIlBhciBk6WZhdXQsIGxlcyBpbmZvcm1hdGlvbnMgZGUgZOlib2d1YWdlIHNlcm9udCBhZmZpY2jpZXMgc2kgYXVjdW5cbiIKKyJhcmd1bWVudCwgb3UgYmllbiBzaSBzZXVsZW1lbnQgbCdhcmd1bWVudCAtYyAoLS1jcHUpIGVzdCBkb25u6SwgYWZpbiBkZVxuIgorImZhY2lsaXRlciBsZXMgcmFwcG9ydHMgZGUgYm9ndWVzIHBhciBleGVtcGxlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9yIHRoZSBhcmd1bWVudHMgbWFya2VkIHdpdGggKiwgb21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzXG4iCisiZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIHplcm9cbiIKK21zZ3N0ciAiTGVzIGFyZ3VtZW50cyBhdmVjIHVuICogdXRpbGlzZXJvbnQgbGUgQ1BVIDAgc2kgLWMgKC0tY3B1KSBlc3Qgb21pc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1ICIKKyJhcmd1bWVudFxuIgorbXNnc3RyICJDZXR0ZSBvcHRpb24gZXN0IGluY29tcGF0aWJsZSBhdmVjIC0tY3B1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLWNwdSBwYXJhbWV0ZXIgYW5kL29yXG4iCisibW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk9uIG5lIHBldXQgaW5kaXF1ZXIgcGx1cyBkJ3VuIHBhcmFt6HRyZSAtLWNwdSwgdG91dCBjb21tZSBsJ29uIG5lIHBldXRcbiIKKyJzcOljaWZpZXIgcGx1cyBkJ3VuIGFyZ3VtZW50IGRlIGZvcm1hdGFnZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MDAgdXRpbHMvY3B1ZnJlcS1zZXQuYzo4MiB1dGlscy9jcHVwb3dlci1zZXQuYzo0MgorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjQyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIKK21zZ3N0ciAib3B0aW9uIGludmFsaWRlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIgorbXNnc3RyICJhbmFseXNlIGR1IENQVSAlZCBpbXBvc3NpYmxlIHB1aXNxdSdpbCBuZSBzZW1ibGUgcGFzIOp0cmUgcHLpc2VudFxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MjAgdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJhbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFseXNlIGR1IENQVSAlZCA6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxdWVuY3ktc2V0IFtvcHRpb25zXVxuIgorbXNnc3RyICJVc2FnZSA6IGNwdWZyZXEtc2V0IFtvcHRpb25zXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBuZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgIG5vdXZlbGxlIGZy6XF1ZW5jZSBtaW5pbWFsZSBkdSBDUFUg4CB1dGlsaXNlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXIgbGUgculndWxhdGV1clxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgIG5vdXZlbGxlIGZy6XF1ZW5jZSBtYXhpbWFsZSBkdSBDUFUg4CB1dGlsaXNlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXIgbGUgculndWxhdGV1clxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5ldyBjcHVmcmVxIGdvdmVybm9yXG4iCittc2dzdHIgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIGFjdGl2ZSBsZSBy6Wd1bGF0ZXVyIEdPVlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Zlcm5vciB0byBiZSBhdmFpbGFibGUgYW5kIGxvYWRlZFxuIgorbXNnc3RyICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgZml4ZSBsYSBmculxdWVuY2UgZHUgcHJvY2Vzc2V1ciDgIEZSRVEuIElsIGZhdXRcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWUgbGUgculndWxhdGV1ciCrIHVzZXJzcGFjZSC7IHNvaXQgZGlzcG9uaWJsZSBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBldCBhY3RpdukuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU3dpdGNoZXMgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzMgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjggdXRpbHMvY3B1cG93ZXItaW5mby5jOjI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgYWZmaWNoZSBsJ2FpZGUtbeltb2lyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZXM6XG4iCisiMS4gT21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byBcImFsbFwiXG4iCittc2dzdHIgIkxlcyBhcmd1bWVudHMgYXZlYyB1biAqIHV0aWxpc2Vyb250IGxlIENQVSAwIHNpIC1jICgtLWNwdSkgZXN0IG9taXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIjIuIFRoZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyICIKKyJwYXJhbWV0ZXJcbiIKKyIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorIjMuIEZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHpcbiIKKyIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKK21zZ3N0ciAiIgorIlJlbWFycXVlIDpcbiIKKyIxLiBMZSBDUFUgbnVt6XJvIDAgc2VyYSB1dGlsaXPpIHBhciBk6WZhdXQgc2kgLWMgKG91IC0tY3B1KSBlc3Qgb21pcyA7XG4iCisiMi4gbCdhcmd1bWVudCAtZiBGUkVRIChvdSAtLWZyZXEgRlJFUSkgbmUgcGV1dCDqdHJlIHV0aWxpc+kgcXUnYXZlYyAtLWNwdSA7XG4iCisiMy4gb24gcG91cnJhIHBy6WNpc2VyIGwndW5pdOkgZGVzIGZy6XF1ZW5jZXMgZW4gcG9zdGZpeGFudCBzYW5zIGF1Y3VuZSAiCisiZXNwYWNlXG4iCisiICAgbGVzIHZhbGV1cnMgcGFyIGh6LCBrSHogKHBhciBk6WZhdXQpLCBNSHosIEdIeiBvdSBUSHpcbiIKKyIgICAoa0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3Igc2V0dGluZyBuZXcgdmFsdWVzLiBDb21tb24gZXJyb3JzOlxuIgorIi0gRG8geW91IGhhdmUgcHJvcGVyIGFkbWluaXN0cmF0aW9uIHJpZ2h0cz8gKHN1cGVyLXVzZXI/KVxuIgorIi0gSXMgdGhlIGdvdmVybm9yIHlvdSByZXF1ZXN0ZWQgYXZhaWxhYmxlIGFuZCBtb2Rwcm9iZWQ/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGFuIGludmFsaWQgcG9saWN5P1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeSwgYnV0IHVzZXJzcGFjZSBnb3Zlcm5vciBpcyBub3QgIgorImF2YWlsYWJsZSxcbiIKKyIgICBmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIGhhcmR3YXJlIHdoaWNoIGNhbm5vdCBiZSBzZXQgdG8gYSBzcGVjaWZpYyAiCisiZnJlcXVlbmN5XG4iCisiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIKK21zZ3N0ciAiIgorIkVuIGFqdXN0YW50IGxlcyBub3V2ZWF1eCBwYXJhbeh0cmVzLCB1bmUgZXJyZXVyIGVzdCBhcHBhcnVlLiBMZXMgc291cmNlc1xuIgorImQnZXJyZXVyIHR5cGlxdWUgc29udCA6XG4iCisiLSBkcm9pdCBkJ2FkbWluaXN0cmF0aW9uIGluc3VmZmlzYW50ICjqdGVzLXZvdXMgcm9vdCA/KSA7XG4iCisiLSBsZSBy6Wd1bGF0ZXVyIGNob2lzaSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSwgb3UgYmllbiBuJ2VzdCBwYXMgZGlzcG9uaWJsZSAiCisiZW5cbiIKKyIgIHRhbnQgcXVlIG1vZHVsZSBub3lhdSA7XG4iCisiLSBsYSB0YWN0aXF1ZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSA7XG4iCisiLSB2b3VzIHZvdWxleiB1dGlsaXNlciBsJ29wdGlvbiAtZi8tLWZyZXEsIG1haXMgbGUgculndWxhdGV1ciCrIHVzZXJzcGFjZSC7XG4iCisiICBuJ2VzdCBwYXMgZGlzcG9uaWJsZSwgcGFyIGV4ZW1wbGUgcGFyY2UgcXVlIGxlIG1hdOlyaWVsIG5lIGxlIHN1cHBvcnRlXG4iCisiICBwYXMsIG91IGJpZW4gbidlc3QgdG91dCBzaW1wbGVtZW50IHBhcyBjaGFyZ+kuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nLCB1bmtub3duIG9yIHVuaGFuZGxlZCBDUFU/XG4iCittc2dzdHIgIkNQVSBpbmNvbm51IG91IG5vbiBzdXBwb3J06SA/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgLWYvLS1mcmVxIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtZC8tLW1pbiwgLXUvLS1tYXggb3JcbiIKKyItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorImwnb3B0aW9uIC1mLy0tZnJlcSBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgbGVzIG9wdGlvbnMgLWQvLS1taW4sIC11Ly0tbWF4IGV0XG4iCisiLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdXQgb2YgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGFuZFxuIgorIi1nLy0tZ292ZXJub3IgbXVzdCBiZSBwYXNzZWRcbiIKK21zZ3N0ciAiIgorIkwndW4gZGUgY2VzIHBhcmFt6HRyZXMgZXN0IG9ibGlnYXRvaXJlIDogLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXggZXRcbiIKKyItZy8tLWdvdmVybm9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3B1OiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0tc2NoZWQtbWMgIFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyICIKKyJwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1wZXJmLWJpYXMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtbWMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLXNtdCBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtbWMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBwZXJmLWJpYXMgdmFsdWUgb24gQ1BVICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyAgICBHZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBBZmZpY2hlIGxhIHRhY3RpcXVlIGFjdHVlbGxlIGRlIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210ICAgIEdldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQYXNzaW5nIG5vIG9wdGlvbiB3aWxsIHNob3cgYWxsIGluZm8sIGJ5IGRlZmF1bHQgb25seSBvbiBjb3JlIDBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjLiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTA1IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmdcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGVyZi1iaWFzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFseXNlIGR1IENQVSAlZCA6XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogTm8gaWRsZSBzdGF0ZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgaWRsZSBzdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBtYXggaWRsZSBzdGF0ZSAldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk51bWJlciBvZiBpZGxlIHN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGlkbGUgc3RhdGVzOiIKK21zZ3N0ciAiICBwbGFnZSBkZSBmculxdWVuY2UgOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhdGVuY3k6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJEdXJhdGlvbjogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgcGlsb3RlIDogJXNcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZ292ZXJub3I6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjLiBwcmludGYoIkNzdGF0ZXM6ICVkXG4iLCBjc3RhdGVzKTsKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQzBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhpbXVtIGFsbG93ZWQgbGF0ZW5jeTogJWx1IHVzZWNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdGVzOlx0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgdHlwZVtDJWRdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJsYXRlbmN5WyUwM2x1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlWyUwOGx1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmF0aW9uWyUwMjBMdV0gXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlVzYWdlIDogY3B1ZnJlcS1pbmZvIFtvcHRpb25zXVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc2lsZW50ICAgICAgICAgT25seSBzaG93IGdlbmVyYWwgQy1zdGF0ZSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIEFmZmljaGVyIGxlcyBpbmZvcm1hdGlvbnMgZGUgZOlib2d1YWdlXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiYWNwaS9wcm9jZXNzb3IvKi9wb3dlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIG9sZGVyIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgQWZmaWNoZSBsZXMgaW5mb3JtYXRpb25zIGVuIHV0aWxpc2FudCBsJ2ludGVyZmFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZm91cm5pZSBwYXIgL3Byb2MvY3B1ZnJlcSwgcHLpc2VudGUgZGFucyBsZXMgIgorInZlcnNpb25zXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAyLjQgZXQgbGVzIGFuY2llbm5lcyB2ZXJzaW9ucyAyLjYgZHUgbm95YXVcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiT24gbmUgcGV1dCBpbmRpcXVlciBwbHVzIGQndW4gcGFyYW3odHJlIC0tY3B1LCB0b3V0IGNvbW1lIGwnb24gbmUgcGV1dFxuIgorInNw6WNpZmllciBwbHVzIGQndW4gYXJndW1lbnQgZGUgZm9ybWF0YWdlXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBDUFUgbnVtYmVyIHdoaWNoIGluZm9ybWF0aW9uIHNoYWxsIGJlIGRldGVybWluZWQgIgorI34gImFib3V0XG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIE51belybyBkdSBDUFUgcG91ciBsZXF1ZWwgbCdpbmZvcm1hdGlvbiBzZXJhICIKKyN+ICJhZmZpY2jpZVxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG51bWJlciBvZiBDUFUgd2hlcmUgY3B1ZnJlcSBzZXR0aW5ncyBzaGFsbCBiZSAiCisjfiAibW9kaWZpZWRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG51belybyBkdSBDUFUg4CBwcmVuZHJlIGVuIGNvbXB0ZSBwb3VyIGxlc1xuIgorI34gIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZW1lbnRzXG4iCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9wby9pdC5wbyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MGM0ZGQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9wby9pdC5wbwpAQCAtMCwwICsxLDk2MSBAQAorIyBJdGFsaWFuIHRyYW5zbGF0aW9ucyBmb3IgY3B1ZnJlcXV0aWxzIHBhY2thZ2UKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGNwdWZyZXF1dGlscyBwYWNrYWdlLgorIyBNYXR0aWEgRG9uZ2lsaSA8bWFsYXR0aWFAZ21haWwuY29tPi4KKyMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGNwdWZyZXF1dGlscyAwLjNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDMtMDggMTc6MDMrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDgtMTUgMTI6MDArMDkwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWF0dGlhIERvbmdpbGkgPG1hbGF0dGlhQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBOT05FXG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzozNgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjQzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTEKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1OCB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzozMworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzIiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDcKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NTYKK21zZ2lkICJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NjMKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzcKK21zZ2lkICJOb3J0aCBCcmlkZ2UgUDEgYm9vbGVhbiBjb3VudGVyIChyZXR1cm5zIDAgb3IgMSkiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzozNQorbXNnaWQgIlByb2Nlc3NvciBDb3JlIG5vdCBpZGxlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NDIKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NTAKK21zZ2lkICJBdmVyYWdlIEZyZXF1ZW5jeSAoaW5jbHVkaW5nIGJvb3N0KSBpbiBNSHoiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLXZdIFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdjogYmUgbW9yZSB2ZXJib3NlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaDogcHJpbnQgdGhpcyBoZWxwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaTogdGltZSBpbnRlcnZhbGwgdG8gbWVhc3VyZSBmb3IgaW4gc2Vjb25kcyAoZGVmYXVsdCAxKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXQ6IHNob3cgQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLW06IHNob3cgc3BlY2lmaWMgQ1BVIHNsZWVwIG1vbml0b3JzIG9ubHkgKGluIHNhbWUgb3JkZXIpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib25seSBvbmUgb2Y6IC10LCAtbCwgLW0gYXJlIGFsbG93ZWRcbiIKKyJJZiBub25lIG9mIHRoZW0gaXMgcGFzc2VkLCIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50IGZ1bmN0aW9uLiBJbXBsZW1lbnRhdGlvbiBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqaXMgb2ZmbGluZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtYXggbW9uaXRvciBuYW1lIGxlbmd0aCAoJWQpIGV4Y2VlZGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2hpbmcgbW9uaXRvciBmb3VuZCBpbiAlcywgdHJ5IC1sIG9wdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyByb290IGFjY2Vzc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIEhXIENzdGF0ZSBtb25pdG9ycyBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIC0tdmVyc2lvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTb21lIHN1YmNvbW1hbmRzIGNhbiBtYWtlIHVzZSBvZiB0aGUgLWMgY3B1bGlzdCBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5kIHJlYWQgdXAgdGhlIHN1YmNvbW1hbmQncyBtYW5wYWdlIHdoZXRoZXIgaXQgaXMgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlVzZSBjcHVwb3dlciBoZWxwIHN1YmNvbW1hbmQgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgc3ViY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iCittc2dzdHIgIlBlciBmYXZvcmUsIGNvbXVuaWNhcmUgZXJyb3JpIGUgbWFsZnVuemlvbmFtZW50aSBhICVzLlxuIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBwYXJzaW5nIGNwdSBsaXN0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ViY29tbWFuZCAlcyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjb3VudCB0aGUgbnVtYmVyIG9mIENQVXMgKCVzOiAlcyksIGFzc3VtaW5nIDFcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZGV0ZXJtaW5hcmUgaWwgbnVtZXJvIGRpIENQVSAoJXM6ICVzKSwgYXNzdW1vIHNpYSAxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKyIgICAgICAgICAgZnJlcXVlbnphIG1pbmltYSBDUFUgICAtICBmcmVxdWVuemEgbWFzc2ltYSBDUFUgIC0gIGdlc3RvcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGV2YWx1YXRpbmcgQm9vc3QgQ2FwYWJpbGl0aWVzIG9uIENQVSAlZCAtLSBhcmUgeW91IHJvb3Q/XG4iCittc2dzdHIgIiIKKworIy4gUCBzdGF0ZSBjaGFuZ2VzIHZpYSBNU1IgYXJlIGlkZW50aWZpZWQgdmlhIGNwdWlkIDgwMDAwMDA3CisjLiBvbiBJbnRlbCBhbmQgQU1ELCBidXQgd2UgYXNzdW1lIGJvb3N0IGNhcGFibGUgbWFjaGluZXMgY2FuIGRvIHRoYXQKKyMuIGlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNworIy4gJiYgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDcpKSkKKyMuCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBib29zdCBzdGF0ZSBzdXBwb3J0OiBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAieWVzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJubyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICBBY3RpdmU6ICVzXG4iCittc2dzdHIgIiAgbW9kdWxvICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQm9vc3QgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgVG90YWwgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIKK21zZ3N0ciAiICBuZXNzdW4gbW9kdWxvIG8gbW9kdWxvIGNwdWZyZXEgc2Nvbm9zY2l1dG8gcGVyIHF1ZXN0YSBDUFVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIG1vZHVsbyAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSBmcmVxdWVuY3k6ICIKK21zZ3N0ciAiICBDUFUgY2hlIG9wZXJhbm8gYWxsYSBzdGVzc2EgZnJlcXVlbnphIGhhcmR3YXJlOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeSBjb29yZGluYXRlZCBieSBzb2Z0d2FyZTogIgorbXNnc3RyICIgIENQVSBjaGUgw6ggbmVjZXNzYXJpbyBzaWFubyBjb29yZGluYXRlIGRhbCBzb2Z0d2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIgorbXNnc3RyICIgIGxhdGVuemEgbWFzc2ltYSBkdXJhbnRlIGxhIHRyYW5zaXppb25lOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICIgIGhhcmR3YXJlIGxpbWl0czogIgorbXNnc3RyICIgIGxpbWl0aSBoYXJkd2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgZnJlcXVlbmN5IHN0ZXBzOiAiCittc2dzdHIgIiAgZnJlcXVlbnplIGRpc3BvbmliaWxpOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9yczogIgorbXNnc3RyICIgIGdlc3RvcmkgZGlzcG9uaWJpbGk6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBwb2xpY3k6IGZyZXF1ZW5jeSBzaG91bGQgYmUgd2l0aGluICIKK21zZ3N0ciAiICBnZXN0b3JlIGF0dHVhbGU6IGxhIGZyZXF1ZW56YSBkZXZlIG1hbnRlbmVyc2kgdHJhICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbmQgIgorbXNnc3RyICIgZSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGdvdmVybm9yIFwiJXNcIiBtYXkgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuIgorIiAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGlzIHJhbmdlLlxuIgorbXNnc3RyICIiCisiIElsIGdlc3RvcmUgXCIlc1wiIHB1w7IgZGVjaWRlcmUgcXVhbGUgdmVsb2NpdMOgIHVzYXJlXG4iCisiICAgICAgICAgICAgICAgICAgaW4gcXVlc3RvIGludGVydmFsbG8uXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiCittc2dzdHIgIiAgbGEgZnJlcXVlbnphIGF0dHVhbGUgZGVsbGEgQ1BVIMOoICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoYXNzZXJ0ZWQgYnkgY2FsbCB0byBoYXJkd2FyZSkiCittc2dzdHIgIiAob3R0ZW51dGEgZGEgdW5hIGNoaWFtYXRhIGRpcmV0dGEgYWxsJ2hhcmR3YXJlKSIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3B1ZnJlcSBzdGF0czogIgorbXNnc3RyICIgc3RhdGlzdGljaGUgY3B1ZnJlcToiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtaW5mbyBbb3B6aW9uaV1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDczIHV0aWxzL2NwdWZyZXEtc2V0LmM6MjYgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjMKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uczpcbiIKK21zZ3N0ciAiT3B6aW9uaTpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24gW2RlZmF1bHRdXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgTW9zdHJhIGluZm9ybWF6aW9uaSBkaSBkZWJ1Z1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjcHVmcmVxIGNvcmUgKlxuIgorbXNnc3RyICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBNb3N0cmEgbGEgZnJlcXVlbnphIGF0dHVhbGUgZGVsbGEgQ1BVIHNlY29uZG9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGlsIG1vZHVsbyBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYnkgcmVhZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkgKlxuIgorbXNnc3RyICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBNb3N0cmEgbGEgZnJlcXVlbnphIGF0dHVhbGUgZGVsbGEgQ1BVIGxlZ2dlbmRvbGFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGRhbGwnaGFyZHdhcmUgKGRpc3BvbmliaWxlIHNvbG8gcGVyIGwndXRlbnRlIHJvb3QpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICIKKyJhbGxvd2VkICpcbiIKK21zZ3N0ciAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5hIGxlIGZyZXF1ZW56ZSBtaW5pbWEgZSBtYXNzaW1hIHBvc3NpYmlsaSBwZXIgIgorImxhIENQVSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIKK21zZ3N0ciAiIgorIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5hIGlsIG1vZHVsbyBjcHVmcmVxIGRlbCBrZXJuZWwgaW4gdXNvICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kgKlxuIgorbXNnc3RyICIiCisiICAtcCwgLS1wb2xpY3kgICAgICAgICBNb3N0cmEgaWwgZ2VzdG9yZSBjcHVmcmVxIGF0dHVhbG1lbnRlIGluIHVzbyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluZXMgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzICpcbiIKK21zZ3N0ciAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmEgaSBnZXN0b3JpIGNwdWZyZXEgZGlzcG9uaWJpbGkgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSAiCisiZnJlcXVlbmN5ICpcbiIKK21zZ3N0ciAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5hIHF1YWxpIENQVSBvcGVyYW5vIGFsbGEgc3Rlc3NhIGZyZXF1ZW56YSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmEgcXVhbGkgQ1BVIGRldm9ubyBhdmVyZSBsYSBmcmVxdWVuemFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGEgZGFsIHNvZnR3YXJlICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZVxuIgorbXNnc3RyICIgIC1zLCAtLXN0YXRzICAgICAgICAgIE1vc3RyYSBsZSBzdGF0aXN0aWNoZSBzZSBkaXNwb25pYmlsaVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsYXRlbmN5IG9uIENQVSBmcmVxdWVuY3kgIgorImNoYW5nZXMgKlxuIgorbXNnc3RyICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmEgbGEgbGF0ZW56YSBtYXNzaW1hIGR1cmFudGUgaSBjYW1iaSBkaSAiCisiZnJlcXVlbnphICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJjcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFN0YW1wYSBsZSBpbmZvcm1hemlvbmkgY29tZSBzZSBwcm92ZW5pc3Nlcm8gZGFsbGFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjY2lhIGNwdWZyZXEgL3Byb2MvIHByZXNlbnRlIG5laSBrZXJuZWxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIDIuNCBlZCBpIHByaW1pIDIuNlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgIgorInBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgZm9ybWF0dGEgbCdvdXRwdXQgZGVsbGUgb3B6aW9uaSAtZiwgLXcsIC1zIGUgLXkgaW4gIgorIm1hbmllcmFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGxlZ2dpYmlsZSBkYSB1biBlc3NlcmUgdW1hbm9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBTdGFtcGEgcXVlc3RhIHNjaGVybWF0YVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIG5vIGFyZ3VtZW50IG9yIG9ubHkgdGhlIC1jLCAtLWNwdSBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGRlYnVnIG91dHB1dCBhYm91dFxuIgorImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG4iCittc2dzdHIgIiIKKyJTZSBub24gdmllbmUgc3BlY2lmaWNhdGEgbmVzc3VuYSBvcHppb25lIG8gdmllbmUgc3BlY2lmaWNhdGEgc29sbyBsJ29wemlvbmUgLSIKKyJjLCAtLWNwdSxcbiIKKyJsZSBpbmZvcm1hemlvbmkgZGkgZGVidWcgcGVyIGNwdWZyZXEgc2FyYW5ubyB1dGlsaSBhZCBlc2VtcGlvIGEgcmlwb3J0YXJlIGkgIgorImJ1Zy5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3IgdGhlIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCAqLCBvbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXNcbiIKKyJlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gemVyb1xuIgorbXNnc3RyICIiCisiUGVyIGxlIG9wemlvbmkgc2VnbmFsYXRlIGNvbiAqLCBvbWV0dGVyZSBsJ29wemlvbmUgLWMgbyAtLWNwdSDDqCBjb21lICIKKyJzcGVjaWZpY2FybGFcbiIKKyJjb24gaWwgdmFsb3JlIDBcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSAiCisiYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIkwnb3B6aW9uZSBzcGVjaWZpY2F0YSBhIHF1ZXN0byBwcm9ncmFtbWEgbm9uIHB1w7IgZXNzZXJlIGNvbWJpbmF0YSBjb24gLS1jcHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tY3B1IHBhcmFtZXRlciBhbmQvb3JcbiIKKyJtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBzcGVjaWZpY2FyZSBwacO5IGRpIHVuYSB2b2x0YSBsJ29wemlvbmUgLS1jcHUgZS9vXG4iCisic3BlY2lmaWNhcmUgcGnDuSBkaSB1biBwYXJhbWV0cm8gZGkgb3V0cHV0IHNwZWNpZmljb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MDAgdXRpbHMvY3B1ZnJlcS1zZXQuYzo4MiB1dGlscy9jcHVwb3dlci1zZXQuYzo0MgorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjQyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIKK21zZ3N0ciAib3B6aW9uZSBzY29ub3NjaXV0YSBvIG5vbiB2YWxpZGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGFuYWx5emUgQ1BVICVkIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50XG4iCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbGEgQ1BVICVkIHBvaWNow6kgbm9uIHNlbWJyYSBlc3NlcmUgcHJlc2VudGVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjIwIHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbGlzaSBkZWxsYSBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxdWVuY3ktc2V0IFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtc2V0IFtvcHppb25pXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBuZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbGEgbnVvdmEgZnJlcXVlbnphIG1pbmltYSBjaGUgaWwgZ2VzdG9yZSBjcHVmcmVxICIKKyJwdcOyIHNjZWdsaWVyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbGEgbnVvdmEgZnJlcXVlbnphIG1hc3NpbWEgY2hlIGlsIGdlc3RvcmUgY3B1ZnJlcSAiCisicHXDsiBzY2VnbGllcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIgorbXNnc3RyICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBudW92byBnZXN0b3JlIGNwdWZyZXFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIKK21zZ3N0ciAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljYSBsYSBmcmVxdWVuemEgYSBjdWkgaW1wb3N0YXJlIGxhIENQVS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICDDiCBuZWNlc3NhcmlvIGNoZSBpbCBnZXN0b3JlIHVzZXJzcGFjZSBzaWEgIgorImRpc3BvbmliaWxlIGUgY2FyaWNhdG9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTd2l0Y2hlcyBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBNb2RpZmljYSB0dXR0ZSBsZSBDUFUgY29vcmRpbmF0ZSBkYWxsJ2hhcmR3YXJlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzMgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjggdXRpbHMvY3B1cG93ZXItaW5mby5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgU3RhbXBhIHF1ZXN0YSBzY2hlcm1hdGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGVzOlxuIgorIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIgorbXNnc3RyICIiCisiUGVyIGxlIG9wemlvbmkgc2VnbmFsYXRlIGNvbiAqLCBvbWV0dGVyZSBsJ29wemlvbmUgLWMgbyAtLWNwdSDDqCBjb21lICIKKyJzcGVjaWZpY2FybGFcbiIKKyJjb24gaWwgdmFsb3JlIDBcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIjIuIFRoZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyICIKKyJwYXJhbWV0ZXJcbiIKKyIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorIjMuIEZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHpcbiIKKyIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKK21zZ3N0ciAiIgorIk5vdGU6XG4iCisiMS4gT21ldHRlcmUgbCdvcHppb25lIC1jIG8gLS1jcHUgw6ggZXF1aXZhbGVudGUgYSBpbXBvc3RhcmxvIGEgMFxuIgorIjIuIGwnb3B6aW9uZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBub24gcHXDsiBlc3NlcmUgc3BlY2lmaWNhdGEgY29uIGFsdHJlICIKKyJvcHppb25pXG4iCisiICAgYWQgZWNjZXppb25lIGRlbGwnb3B6aW9uZSAtYyBDUFUgbyAtLWNwdSBDUFVcbiIKKyIzLiBsZSBGUkVRdWVuemUgcG9zc29ubyBlc3NlcmUgc3BlY3VmaWNhdGUgaW4gIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgIgorIm9yIFRIelxuIgorIiAgIHBvc3Rwb25lbmRvIGwndW5pdMOgIGRpIG1pc3VyYSBhbCB2YWxvcmUgc2VuemEgbmVzc3VubyBzcGF6aW8gZnJhIGxvcm9cbiIKKyIgICAoRlJFUXVlbnphIGluIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHNldHRpbmcgbmV3IHZhbHVlcy4gQ29tbW9uIGVycm9yczpcbiIKKyItIERvIHlvdSBoYXZlIHByb3BlciBhZG1pbmlzdHJhdGlvbiByaWdodHM/IChzdXBlci11c2VyPylcbiIKKyItIElzIHRoZSBnb3Zlcm5vciB5b3UgcmVxdWVzdGVkIGF2YWlsYWJsZSBhbmQgbW9kcHJvYmVkP1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhbiBpbnZhbGlkIHBvbGljeT9cbiIKKyItIFRyeWluZyB0byBzZXQgYSBzcGVjaWZpYyBmcmVxdWVuY3ksIGJ1dCB1c2Vyc3BhY2UgZ292ZXJub3IgaXMgbm90ICIKKyJhdmFpbGFibGUsXG4iCisiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgIgorImZyZXF1ZW5jeVxuIgorIiAgIG9yIGJlY2F1c2UgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vciBpc24ndCBsb2FkZWQ/XG4iCittc2dzdHIgIiIKKyJTaSBzb25vIHZlcmlmaWNhdGkgZGVnbGkgZXJyb3JpIGltcG9zdGFuZG8gaSBudW92aSB2YWxvcmkuXG4iCisiQWxjdW5pIGVycm9yaSBjb211bmkgcG9zc29ubyBlc3NlcmU6XG4iCisiLSBIYWkgaSBuZWNlc3NhcmkgZGlyaXR0aSBkaSBhbW1pbmlzdHJhemlvbmU/IChzdXBlci11c2VyPylcbiIKKyItIElsIGdlc3RvcmUgY2hlIGhhaSByaWNoaWVzdG8gw6ggZGlzcG9uaWJpbGUgZSBjYXJpY2F0bz9cbiIKKyItIFN0YWkgcHJvdmFuZG8gYWQgaW1wb3N0YXJlIHVuYSBwb2xpdGljYSBkaSBnZXN0aW9uZSBub24gdmFsaWRhP1xuIgorIi0gU3RhaSBwcm92YW5kbyBhIGltcG9zdGFyZSB1bmEgc3BlY2lmaWNhIGZyZXF1ZW56YSBtYSBpbCBnZXN0b3JlXG4iCisiICB1c2Vyc3BhY2Ugbm9uIMOoIGRpc3BvbmliaWxlLCBwZXIgZXNlbXBpbyBhIGNhdXNhIGRlbGwnaGFyZHdhcmVcbiIKKyIgIGNoZSBub24gc3VwcG9ydGEgZnJlcXVlbnplIGZpc3NlIG8gYSBjYXVzYSBkZWwgZmF0dG8gY2hlXG4iCisiICBpbCBnZXN0b3JlIHVzZXJzcGFjZSBub24gw6ggY2FyaWNhdG8/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nLCB1bmtub3duIG9yIHVuaGFuZGxlZCBDUFU/XG4iCittc2dzdHIgIkNQVSBlcnJhdGEsIHNjb25vc2NpdXRhIG8gbm9uIGdlc3RpdGE/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgLWYvLS1mcmVxIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtZC8tLW1pbiwgLXUvLS1tYXggb3JcbiIKKyItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorImwnb3B6aW9uZSAtZi8tLWZyZXEgbm9uIHB1w7IgdmVuaXJlIGNvbWJpbmF0YSBjb24gaSBwYXJhbWV0cmlcbiIKKyIgLWQvLS1taW4sIC11Ly0tbWF4IG8gLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdXQgb2YgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGFuZFxuIgorIi1nLy0tZ292ZXJub3IgbXVzdCBiZSBwYXNzZWRcbiIKK21zZ3N0ciAiIgorIkFsbWVubyB1bmEgZGVsbGUgb3B6aW9uaSAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgZSAtZy8tLWdvdmVybm9yXG4iCisiZGV2ZSBlc3NlcmUgc3BlY2lmaWNhdGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjcHU6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIHNldCBbIC1iIHZhbCBdIFsgLW0gdmFsIF0gWyAtcyB2YWwgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyBbVkFMXSAgICBTZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1zY2hlZC1tYyAgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgIgorInBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICItLXBlcmYtYmlhcyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1tYyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtc210IHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1tYyAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLXNtdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyB2YWx1ZSBvbiBDUFUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzICAgIEdldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisiICAtcCwgLS1wb2xpY3kgICAgICAgICBNb3N0cmEgaWwgZ2VzdG9yZSBjcHVmcmVxIGF0dHVhbG1lbnRlIGluIHVzbyAqXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgICAgR2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBhc3Npbmcgbm8gb3B0aW9uIHdpbGwgc2hvdyBhbGwgaW5mbywgYnkgZGVmYXVsdCBvbmx5IG9uIGNvcmUgMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyMuIGlmIHN5c2ZzIGZpbGUgaXMgbWlzc2luZyBpdCdzOiBlcnJubyA9PSBFTk9FTlQKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDUgdXRpbHMvY3B1cG93ZXItaW5mby5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmcgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZ1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcGVyZi1iaWFzIHZhbHVlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwZXJmLWJpYXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWxpc2kgZGVsbGEgQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IE5vIGlkbGUgc3RhdGVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIGlkbGUgc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgbWF4IGlkbGUgc3RhdGUgJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0NgorIywgYy1mb3JtYXQKK21zZ2lkICJOdW1iZXIgb2YgaWRsZSBzdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBpZGxlIHN0YXRlczoiCittc2dzdHIgIiAgZnJlcXVlbnplIGRpc3BvbmliaWxpOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhdGVuY3k6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJEdXJhdGlvbjogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgbW9kdWxvICVzXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGdvdmVybm9yOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIy4gcHJpbnRmKCJDc3RhdGVzOiAlZFxuIiwgY3N0YXRlcyk7CisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWN0aXZlIHN0YXRlOiAgICAgICAgICAgIEMwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heF9jc3RhdGU6ICAgICAgICAgICAgICBDJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1heGltdW0gYWxsb3dlZCBsYXRlbmN5OiAlbHUgdXNlY1xuIgorbXNnc3RyICIgIGxhdGVuemEgbWFzc2ltYSBkdXJhbnRlIGxhIHRyYW5zaXppb25lOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGF0ZXM6XHRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEMlZDogICAgICAgICAgICAgICAgICB0eXBlW0MlZF0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9tb3Rpb25bLS1dIGRlbW90aW9uWy0tXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImxhdGVuY3lbJTAzbHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2VbJTA4bHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyYXRpb25bJTAyMEx1XSBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpZGxlaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNvOiBjcHVmcmVxLWluZm8gW29wemlvbmldXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zaWxlbnQgICAgICAgICBPbmx5IHNob3cgZ2VuZXJhbCBDLXN0YXRlIGluZm9ybWF0aW9uXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgTW9zdHJhIGluZm9ybWF6aW9uaSBkaSBkZWJ1Z1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImFjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFN0YW1wYSBsZSBpbmZvcm1hemlvbmkgY29tZSBzZSBwcm92ZW5pc3Nlcm8gZGFsbGFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjY2lhIGNwdWZyZXEgL3Byb2MvIHByZXNlbnRlIG5laSBrZXJuZWxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIDIuNCBlZCBpIHByaW1pIDIuNlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJOb24gw6ggcG9zc2liaWxlIHNwZWNpZmljYXJlIHBpw7kgZGkgdW5hIHZvbHRhIGwnb3B6aW9uZSAtLWNwdSBlL29cbiIKKyJzcGVjaWZpY2FyZSBwacO5IGRpIHVuIHBhcmFtZXRybyBkaSBvdXRwdXQgc3BlY2lmaWNvXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBDUFUgbnVtYmVyIHdoaWNoIGluZm9ybWF0aW9uIHNoYWxsIGJlIGRldGVybWluZWQgIgorI34gImFib3V0XG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIE51bWVybyBkaSBDUFUgcGVyIGxhIHF1YWxlIG90dGVuZXJlIGxlICIKKyN+ICJpbmZvcm1hemlvbmlcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1iZXIgb2YgQ1BVIHdoZXJlIGNwdWZyZXEgc2V0dGluZ3Mgc2hhbGwgYmUgIgorI34gIm1vZGlmaWVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1lcm8gZGkgQ1BVIHBlciBsYSBxdWFsZSBtb2RpZmljYXJlIGxlICIKKyN+ICJpbXBvc3RhemlvbmlcbiIKKworIywgZnV6enkKKyN+IG1zZ2lkICIgIENQVXMgd2hpY2ggY29vcmRpbmF0ZSBzb2Z0d2FyZSBmcmVxdWVuY3kgcmVxdWlyZW1lbnRzOiAiCisjfiBtc2dzdHIgIiIKKyN+ICIgIENQVSBwZXIgbGUgcXVhbGkgZWAgbmVjZXNzYXJpbyBjYW1iaWFyZSBsYSBmcmVxdWVuemEgIgorI34gImNvbnRlbXBvcmFuZWFtZW50ZTogIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vcHQucG8gYi90b29scy9wb3dlci9jcHVwb3dlci9wby9wdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTBmNTI2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vcHQucG8KQEAgLTAsMCArMSw5NTcgQEAKKyMgQnJhemlsaWFuIFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb25zIGZvciBjcHVmcmVxdXRpbHMgcGFja2FnZQorIyBDb3B5cmlnaHQgKEMpIDIwMDggVEhFIGNwdWZyZXF1dGlscydTIENPUFlSSUdIVCBIT0xERVIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGNwdWZyZXF1dGlscyBwYWNrYWdlLgorIyBDbGF1ZGlvIEVkdWFyZG8gPGNsYXVkaW9lZGR5QGdtYWlsLmNvbT4sIDIwMDkuCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBjcHVmcmVxdXRpbHMgMDA0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTAzLTA4IDE3OjAzKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTA2LTE0IDIyOjE2LTA0MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENsYXVkaW8gRWR1YXJkbyA8Y2xhdWRpb2VkZHlAZ21haWwuY29tPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzozNgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjQzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTEKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1OCB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzozMworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzIiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDcKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NTYKK21zZ2lkICJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NjMKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzcKK21zZ2lkICJOb3J0aCBCcmlkZ2UgUDEgYm9vbGVhbiBjb3VudGVyIChyZXR1cm5zIDAgb3IgMSkiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzozNQorbXNnaWQgIlByb2Nlc3NvciBDb3JlIG5vdCBpZGxlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NDIKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NTAKK21zZ2lkICJBdmVyYWdlIEZyZXF1ZW5jeSAoaW5jbHVkaW5nIGJvb3N0KSBpbiBNSHoiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLXZdIFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdjogYmUgbW9yZSB2ZXJib3NlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaDogcHJpbnQgdGhpcyBoZWxwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaTogdGltZSBpbnRlcnZhbGwgdG8gbWVhc3VyZSBmb3IgaW4gc2Vjb25kcyAoZGVmYXVsdCAxKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXQ6IHNob3cgQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLW06IHNob3cgc3BlY2lmaWMgQ1BVIHNsZWVwIG1vbml0b3JzIG9ubHkgKGluIHNhbWUgb3JkZXIpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib25seSBvbmUgb2Y6IC10LCAtbCwgLW0gYXJlIGFsbG93ZWRcbiIKKyJJZiBub25lIG9mIHRoZW0gaXMgcGFzc2VkLCIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50IGZ1bmN0aW9uLiBJbXBsZW1lbnRhdGlvbiBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqaXMgb2ZmbGluZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtYXggbW9uaXRvciBuYW1lIGxlbmd0aCAoJWQpIGV4Y2VlZGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2hpbmcgbW9uaXRvciBmb3VuZCBpbiAlcywgdHJ5IC1sIG9wdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyByb290IGFjY2Vzc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIEhXIENzdGF0ZSBtb25pdG9ycyBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIC0tdmVyc2lvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTb21lIHN1YmNvbW1hbmRzIGNhbiBtYWtlIHVzZSBvZiB0aGUgLWMgY3B1bGlzdCBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5kIHJlYWQgdXAgdGhlIHN1YmNvbW1hbmQncyBtYW5wYWdlIHdoZXRoZXIgaXQgaXMgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlVzZSBjcHVwb3dlciBoZWxwIHN1YmNvbW1hbmQgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgc3ViY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iCittc2dzdHIgIlJlcG9ydGUgZXJyb3MgZSBidWdzIHBhcmEgJXMsIHBvciBmYXZvci5cbiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcGFyc2luZyBjcHUgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1YmNvbW1hbmQgJXMgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY291bnQgdGhlIG51bWJlciBvZiBDUFVzICglczogJXMpLCBhc3N1bWluZyAxXG4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBjb250YXIgbyBuw7ptZXJvIGRlIENQVXMgKCVzOiAlcyksIGFzc3VtaW5kbyAxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKyIgICAgICAgICAgZnJlcXXDqm5jaWEgbcOtbmluYSBkbyBDUFUgIC0gIGZyZXF1w6puY2lhIG3DoXhpbWEgZG8gQ1BVICAtICAiCisicmVndWxhZG9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIgorbXNnc3RyICIiCisKKyMuIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworIy4gb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisjLiBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKyMuICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisjLgorIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBTdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQWN0aXZlOiAlc1xuIgorbXNnc3RyICIgIGRyaXZlcjogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBCb29zdCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUGIlZDogJWx1TUh6IChib29zdCBzdGF0ZSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QJWQ6ICAlbHVNSHpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIgorbXNnc3RyICIgIG5lbmh1bSBvdSBkcml2ZXIgZG8gY3B1ZnJlcSBkZWNvbmhlY2lkbyBlc3TDoSBhdGl2byBuZXNzZSBDUFVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIGRyaXZlcjogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiCittc2dzdHIgIiAgQ1BVcyBxdWUgcm9kYW0gbmEgbWVzbWEgZnJlcXXDqm5jaWEgZGUgaGFyZHdhcmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlOiAiCittc2dzdHIgIiAgQ1BVcyBxdWUgcHJlY2lzYW0gdGVyIHN1YXMgZnJlcXXDqm5jaWFzIGNvb3JkZW5hZGFzIHBvciBzb2Z0d2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIgorbXNnc3RyICIgIG1haW9yIGxhdMOqbmNpYSBkZSB0cmFuc2nDp8OjbzogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBoYXJkd2FyZSBsaW1pdHM6ICIKK21zZ3N0ciAiICBsaW1pdGVzIGRvIGhhcmR3YXJlOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIKK21zZ3N0ciAiICBuw612ZWlzIGRlIGZyZXF1w6puY2lhIGRpc3BvbsOtdmVpczogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIKK21zZ3N0ciAiICByZWd1bGFkb3JlcyBkbyBjcHVmcmVxIGRpc3BvbsOtdmVpczogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IHBvbGljeTogZnJlcXVlbmN5IHNob3VsZCBiZSB3aXRoaW4gIgorbXNnc3RyICIgIHBvbMOtdGljYSBkZSBmcmVxdcOqbmNpYSBhdHVhbCBkZXZlIGVzdGFyIGVudHJlICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbmQgIgorbXNnc3RyICIgZSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGdvdmVybm9yIFwiJXNcIiBtYXkgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuIgorIiAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGlzIHJhbmdlLlxuIgorbXNnc3RyICIiCisiTyByZWd1bGFkb3IgXCIlc1wiIGRldmUgZGVjaWRpciBxdWFsIHZlbG9jaWRhZGUgdXNhclxuIgorIiAgICAgICAgICAgICAgICAgIGRlbnRybyBkZXNzZSBsaW1pdGUuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiCittc2dzdHIgIiAgZnJlcXXDqm5jaWEgYXR1YWwgZG8gQ1BVIMOpICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoYXNzZXJ0ZWQgYnkgY2FsbCB0byBoYXJkd2FyZSkiCittc2dzdHIgIiAoZGVjbGFyYWRvIHBvciBjaGFtYWRhIGFvIGhhcmR3YXJlKSIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3B1ZnJlcSBzdGF0czogIgorbXNnc3RyICIgIHN0YXR1cyBkbyBjcHVmcmVxOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtaW5mbyBbb3DDp8O1ZXNdXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MyB1dGlscy9jcHVmcmVxLXNldC5jOjI2IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIzCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbnM6XG4iCittc2dzdHIgIk9ww6fDtWVzOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBNb3N0cmEgaW5mb3JtYcOnw6NvIGRlIGRlYnVnXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNwdWZyZXEgY29yZSAqXG4iCittc2dzdHIgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIE9idGVtIGEgZnJlcXXDqm5jaWEgbmEgcXVhbCBvIENQVSByb2RhIG5vIG1vbWVudG8sIGRlICIKKyJhY29yZG9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvbSBvIG7DumNsZW8gZG8gY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpICpcbiIKK21zZ3N0ciAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgT2J0ZW0gYSBmcmVxdcOqbmNpYSBuYSBxdWFsIG8gQ1BVIGVzdMOhIG9wZXJhbmRvIG5vICIKKyJtb21lbnRvLFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgYXRyYXbDqXMgZGUgbGVpdHVyYSBubyBoYXJkd2FyZSAoZGlzcG9uw612ZWwgc29tZW50ZSAiCisicGFyYSByb290KSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAiCisiYWxsb3dlZCAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluYSBhIGZyZXF1w6puY2lhIG3DrW5pbWEgZSBtw6F4aW1hIGRvIENQVSAiCisicGVybWl0aWRhICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIgKlxuIgorbXNnc3RyICIiCisiICAtZCwgIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5hIG8gZHJpdmVyIGRvIGtlcm5lbCBkbyBjcHVmcmVxIHVzYWRvICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kgKlxuIgorbXNnc3RyICIiCisiLS1wLCAtLXBvbGljeSAgICAgICAgIE9idGVtIGEgcG9sw610aWNhIGRvIGNwdWZyZXEgZW0gdXNvIG5vIG1vbWVudG8gKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycyAqXG4iCittc2dzdHIgIiIKKyIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluYSByZWd1bGFkb3JlcyBkbyBjcHVmcmVxIGRpc3BvbsOtdmVpcyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlICIKKyJmcmVxdWVuY3kgKlxuIgorbXNnc3RyICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmEgcXVhaXMgQ1BVcyByb2RhbSBuYSBtZXNtYSBmcmVxdcOqbmNpYSBkZSAiCisiaGFyZHdhcmUgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlICpcbiIKK21zZ3N0ciAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5hIHF1YWlzIENQVXMgcHJlY2lzYW0gdGVyIHN1YXMgZnJlcXXDqm5jaWFzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGVuYWRhcyBwb3Igc29mdHdhcmUgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zdGF0cyAgICAgICAgICBTaG93cyBjcHVmcmVxIHN0YXRpc3RpY3MgaWYgYXZhaWxhYmxlXG4iCittc2dzdHIgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgTW9zdHJhIGVzdGF0w61zdGljYXMgZG8gY3B1ZnJlcSBzZSBkaXNwb27DrXZlaXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluZXMgdGhlIG1heGltdW0gbGF0ZW5jeSBvbiBDUFUgZnJlcXVlbmN5ICIKKyJjaGFuZ2VzICpcbiIKK21zZ3N0ciAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5hIGEgbGF0w6puY2lhIG3DoXhpbWEgbmFzIHRyb2NhcyBkZSBmcmVxdcOqbmNpYSAiCisiZG8gQ1BVICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJjcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIE1vc3RyYSBpbmZvcm1hw6fDo28gZG8gdGlwbyBwcm92aWRhIHBlbGEgaW50ZXJmYWNlIC8iCisicHJvYy9jcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBlbSBrZXJuZWxzIDIuNC4gZSBtYWlzIHJlY2VudGVzIDIuNlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgIgorInBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgc2HDrWRhIGxlZ8OtdmVsIHBhcmEgaHVtYW5vcyBwYXJhIG9zIHBhcsOibWV0cm9zIC1mLCAtdywgIgorIi1zIGUgLXlcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiIC1oLCAtLWhlbHAgICAgICAgICAgIEltcHJpbWUgZXNzYSB0ZWxhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgbm8gYXJndW1lbnQgb3Igb25seSB0aGUgLWMsIC0tY3B1IHBhcmFtZXRlciBpcyBnaXZlbiwgZGVidWcgb3V0cHV0IGFib3V0XG4iCisiY3B1ZnJlcSBpcyBwcmludGVkIHdoaWNoIGlzIHVzZWZ1bCBlLmcuIGZvciByZXBvcnRpbmcgYnVncy5cbiIKK21zZ3N0ciAiIgorIlNlIG5lbmh1bSBhcmd1bWVudG8gb3Ugc29tZW50ZSBvIHBhcsOibWV0cm8gLWMsIC0tY3B1IMOpIGRhZG8sIGluZm9ybWHDp8OjbyBkZSAiCisiZGVidWcgc29icmVcbiIKKyJvIGNwdWZyZXEgw6kgbW9zdHJhZGEsIG8gcXVlIMOpIMO6dGlsIHBvciBleGVtcGxvIHBhcmEgcmVwb3J0YXIgYnVncy5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3IgdGhlIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCAqLCBvbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXNcbiIKKyJlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gemVyb1xuIgorbXNnc3RyICIiCisiUGFyYSBvcyBhcmd1bWVudG9zIG1hcmNhZG9zIGNvbSAqLCBvbWl0aXIgbyBhcmd1bWVudG8gLWMgb3UgLS1jcHUgw6lcbiIKKyJlcXVpdmFsZW50ZSBhIHNldMOhLWxvIGNvbW8gemVyb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1ICIKKyJhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTyBhcmd1bWVudG8gdXNhZG8gcHJhIGVzc2EgZmVycmFtZW50YSBuw6NvIHBvZGUgc2VyIGNvbWJpbmFkbyBjb20gdW0gIgorImFyZ3VtZW50byAtLWNwdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJWb2PDqiBuw6NvIHBvZGUgZXNwZWNpZmljYXIgbWFpcyBkbyBxdWUgdW0gcGFyw6JtZXRybyAtLWNwdSBlL291XG4iCisibWFpcyBkbyBxdWUgdW0gYXJndW1lbnRvIGRlIHNhw61kYSBlc3BlY8OtZmljb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MDAgdXRpbHMvY3B1ZnJlcS1zZXQuYzo4MiB1dGlscy9jcHVwb3dlci1zZXQuYzo0MgorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjQyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIKK21zZ3N0ciAiYXJndW1lbnRvIGludsOhbGlkbyBvdSBkZXNjb25oZWNpZG9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGFuYWx5emUgQ1BVICVkIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50XG4iCittc2dzdHIgIiIKKyJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBDUFUgJSBqw6EgcXVlIG8gbWVzbW8gcGFyZWNlIG7Do28gZXN0YXIgcHJlc2VudGVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjIwIHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbGlzYW5kbyBvIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXF1ZW5jeS1zZXQgW29wdGlvbnNdXG4iCittc2dzdHIgIlVzbzogY3B1ZnJlcS1zZXQgW29ww6fDtWVzXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBuZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbm92YSBmcmVxdcOqbmNpYSBtw61uaW1hIGRvIENQVSBxdWUgbyByZWd1bGFkb3IgIgorImRldmUgc2VsZWNpb25hclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbm92YSBmcmVxdcOqbmNpYSBtw6F4aW1hIGRvIENQVSBxdWUgbyByZWd1bGFkb3IgIgorImRldmUgZXNjb2xoZXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIgorbXNnc3RyICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBub3ZvIHJlZ3VsYWRvciBkbyBjcHVmcmVxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkXG4iCittc2dzdHIgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBmcmVxdcOqbmNpYSBlc3BlY8OtZmljYSBwYXJhIHNlciBzZXRhZGEuIE5lY2Vzc2l0YSAiCisicXVlIG8gcmVndWxhZG9yIGVtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgbsOtdmVsIGRlIHVzdcOhcmlvIGVzdGVqYSBkaXNwb27DrXZlbCBlIGNhcnJlZ2Fkb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFN3aXRjaGVzIGFsbCBoYXJkd2FyZS1yZWxhdGVkIENQVXNcbiIKK21zZ3N0ciAiIgorIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIE1vZGlmaWNhIHRvZG9zIG9zIENQVXMgcmVsYWNpb25hZG9zIGFvIGhhcmR3YXJlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzMgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjggdXRpbHMvY3B1cG93ZXItaW5mby5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiIC1oLCAtLWhlbHAgICAgICAgICAgIE1vc3RyYSBlc3NhIHRlbGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGVzOlxuIgorIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIgorbXNnc3RyICIiCisiUGFyYSBvcyBhcmd1bWVudG9zIG1hcmNhZG9zIGNvbSAqLCBvbWl0aXIgbyBhcmd1bWVudG8gLWMgb3UgLS1jcHUgw6lcbiIKKyJlcXVpdmFsZW50ZSBhIHNldMOhLWxvIGNvbW8gemVyb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiMi4gVGhlIC1mIEZSRVEsIC0tZnJlcSBGUkVRIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgIgorInBhcmFtZXRlclxuIgorIiAgIGV4Y2VwdCB0aGUgLWMgQ1BVLCAtLWNwdSBDUFUgcGFyYW1ldGVyXG4iCisiMy4gRlJFUXVlbmNpZXMgY2FuIGJlIHBhc3NlZCBpbiBIeiwga0h6IChkZWZhdWx0KSwgTUh6LCBHSHosIG9yIFRIelxuIgorIiAgIGJ5IHBvc3RmaXhpbmcgdGhlIHZhbHVlIHdpdGggdGhlIHdhbnRlZCB1bml0IG5hbWUsIHdpdGhvdXQgYW55IHNwYWNlXG4iCisiICAgKEZSRVF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorbXNnc3RyICIiCisiTm90YXM6XG4iCisiMS4gT21pdGlyIG8gYXJndW1lbnRvIC1jIG9yIC0tY3B1IMOpIGVxdWl2YWxlbnRlIGEgc2V0w6EtbG8gY29tbyB6ZXJvXG4iCisiMi4gTyBwYXLDom1ldHJvIC1mIEZSRVEsIC0tZnJlcSBGUkVRIG7Do28gcG9kZSBzZXIgY29tYmluYWRvIGNvbSBxdWFscXVlciAiCisib3V0cm8gcGFyw6JtZXRyb1xuIgorIiAgIGV4Y2V0byBjb20gbyBwYXLDom1ldHJvIC1jIENQVSwgLS1jcHUgQ1BVXG4iCisiMy4gRlJFUXXDqm5jaWFzIHBvZGVtIHNlciB1c2FkYXMgZW0gSHosIGtIeiAocGFkcsOjbyksIE1IeiwgR0h6LCBvIFRIelxuIgorIiAgIGNvbG9jYW5kbyBvIG5vbWUgZGVzZWphZG8gZGEgdW5pZGFkZSBhcMOzcyBvIHZhbG9yLCBzZW0gcXVhbHF1ZXIgZXNwYcOnb1xuIgorIiAgIChGUkVRdcOqbmNpYSBlbSBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKyItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCAiCisiYXZhaWxhYmxlLFxuIgorIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljICIKKyJmcmVxdWVuY3lcbiIKKyIgICBvciBiZWNhdXNlIHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IgaXNuJ3QgbG9hZGVkP1xuIgorbXNnc3RyICIiCisiRXJybyBhbyBzZXRhciBub3ZvcyB2YWxvcmVzLiBFcnJvcyBjb211bnM6XG4iCisiLSBWb2PDqiB0ZW0gZGlyZWl0b3MgYWRtaW5pc3RyYXRpdm9zIG5lY2Vzc8Ohcmlvcz8gKHN1cGVyLXVzdcOhcmlvPylcbiIKKyItIE8gcmVndWxhZG9yIHF1ZSB2b2PDqiByZXF1ZXNpdG91IGVzdMOhIGRpc3BvbsOtdmVsIGUgZm9pIFwibW9kcHJvYmVkXCI/XG4iCisiLSBUZW50YW5kbyBzZXRhciB1bWEgcG9sw610aWNhIGludsOhbGlkYT9cbiIKKyItIFRlbnRhbmRvIHNldGFyIHVtYSBmcmVxdcOqbmNpYSBlc3BlY8OtZmljYSwgbWFzIG8gcmVndWxhZG9yIGVtIG7DrXZlbCBkZSAiCisidXN1w6FyaW8gbsOjbyBlc3TDoSBkaXNwb27DrXZlbCxcbiIKKyIgICBwb3IgZXhlbXBsbyBkZXZpZG8gYW8gaGFyZHdhcmUgcXVlIG7Do28gcG9kZSBzZXIgc2V0YWRvIHByYSB1bWEgZnJlcXXDqm5jaWEgIgorImVzcGVjw61maWNhXG4iCisiICAgb3UgcG9ycXVlIG8gcmVndWxhZG9yIGVtIG7DrXZlbCBkZSB1c3XDoXJpbyBuw6NvIGZvaSBjYXJyZWdhZG8/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nLCB1bmtub3duIG9yIHVuaGFuZGxlZCBDUFU/XG4iCittc2dzdHIgIkNQVSBlcnJhZG8sIGRlc2NvbmhlY2lkbyBvdSBpbmVzcGVyYWRvP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIC1mLy0tZnJlcSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWQvLS1taW4sIC11Ly0tbWF4IG9yXG4iCisiLWcvLS1nb3Zlcm5vciBwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyJvIHBhcsOibWV0cm8gLWYvLS1mcmVxIG7Do28gcG9kZSBzZXIgY29tYmluYWRvIGNvbSBvcyBwYXLDom1ldHJvcyAtZC8tLW1pbiwgLSIKKyJ1Ly0tbWF4IG91XG4iCisiLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdXQgb2YgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGFuZFxuIgorIi1nLy0tZ292ZXJub3IgbXVzdCBiZSBwYXNzZWRcbiIKK21zZ3N0ciAiIgorIlBlbG8gbWVub3MgdW0gcGFyw6JtZXRybyBlbnRyZSAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgZVxuIgorIi1nLy0tZ292ZXJub3IgZGV2ZSBzZXIgdXNhZG9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjcHU6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIHNldCBbIC1iIHZhbCBdIFsgLW0gdmFsIF0gWyAtcyB2YWwgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyBbVkFMXSAgICBTZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1zY2hlZC1tYyAgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgIgorInBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICItLXBlcmYtYmlhcyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1tYyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtc210IHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1tYyAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLXNtdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyB2YWx1ZSBvbiBDUFUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzICAgIEdldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisiLS1wLCAtLXBvbGljeSAgICAgICAgIE9idGVtIGEgcG9sw610aWNhIGRvIGNwdWZyZXEgZW0gdXNvIG5vIG1vbWVudG8gKlxuIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210ICAgIEdldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQYXNzaW5nIG5vIG9wdGlvbiB3aWxsIHNob3cgYWxsIGluZm8sIGJ5IGRlZmF1bHQgb25seSBvbiBjb3JlIDBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjLiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTA1IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmdcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGVyZi1iaWFzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFsaXNhbmRvIG8gQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IE5vIGlkbGUgc3RhdGVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIGlkbGUgc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgbWF4IGlkbGUgc3RhdGUgJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0NgorIywgYy1mb3JtYXQKK21zZ2lkICJOdW1iZXIgb2YgaWRsZSBzdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBpZGxlIHN0YXRlczoiCittc2dzdHIgIiAgbsOtdmVpcyBkZSBmcmVxdcOqbmNpYSBkaXNwb27DrXZlaXM6ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3MvRGVzY3JpcHRpb246ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGF0ZW5jeTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkR1cmF0aW9uOiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGRyaXZlclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBkcml2ZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGdvdmVybm9yOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIy4gcHJpbnRmKCJDc3RhdGVzOiAlZFxuIiwgY3N0YXRlcyk7CisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWN0aXZlIHN0YXRlOiAgICAgICAgICAgIEMwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heF9jc3RhdGU6ICAgICAgICAgICAgICBDJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1heGltdW0gYWxsb3dlZCBsYXRlbmN5OiAlbHUgdXNlY1xuIgorbXNnc3RyICIgIG1haW9yIGxhdMOqbmNpYSBkZSB0cmFuc2nDp8OjbzogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdGVzOlx0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgdHlwZVtDJWRdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJsYXRlbmN5WyUwM2x1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlWyUwOGx1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmF0aW9uWyUwMjBMdV0gXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlVzbzogY3B1ZnJlcS1pbmZvIFtvcMOnw7Vlc11cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXNpbGVudCAgICAgICAgIE9ubHkgc2hvdyBnZW5lcmFsIEMtc3RhdGUgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBNb3N0cmEgaW5mb3JtYcOnw6NvIGRlIGRlYnVnXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiYWNwaS9wcm9jZXNzb3IvKi9wb3dlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIG9sZGVyIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgTW9zdHJhIGluZm9ybWHDp8OjbyBkbyB0aXBvIHByb3ZpZGEgcGVsYSBpbnRlcmZhY2UgLyIKKyJwcm9jL2NwdWZyZXFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGVtIGtlcm5lbHMgMi40LiBlIG1haXMgcmVjZW50ZXMgMi42XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIlZvY8OqIG7Do28gcG9kZSBlc3BlY2lmaWNhciBtYWlzIGRvIHF1ZSB1bSBwYXLDom1ldHJvIC0tY3B1IGUvb3VcbiIKKyJtYWlzIGRvIHF1ZSB1bSBhcmd1bWVudG8gZGUgc2HDrWRhIGVzcGVjw61maWNvXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBDUFUgbnVtYmVyIHdoaWNoIGluZm9ybWF0aW9uIHNoYWxsIGJlIGRldGVybWluZWQgIgorI34gImFib3V0XG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIG7Dum1lcm8gZG8gQ1BVIHNvYnJlIG8gcXVhbCBhcyBpbmZvcsOnw7VlcyBkZXZlbSBzZXIgIgorI34gImRldGVybWluYWRhc1xuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG51bWJlciBvZiBDUFUgd2hlcmUgY3B1ZnJlcSBzZXR0aW5ncyBzaGFsbCBiZSAiCisjfiAibW9kaWZpZWRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG7Dum1lcm8gZG8gQ1BVIG9uZGUgYXMgY29uZmlndXJhw6fDtWVzIGRvIGNwdWZyZXEgIgorI34gInbDo28gc2VyIG1vZGlmaWNhZGFzXG4iCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9idWlsdGluLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9idWlsdGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3MGZmYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2J1aWx0aW4uaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIEJVSUxUSU5fSAorI2RlZmluZSBCVUlMVElOX0gKKworZXh0ZXJuIGludCBjbWRfc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gaW50IGNtZF9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gaW50IGNtZF9mcmVxX3NldChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworZXh0ZXJuIGludCBjbWRfZnJlcV9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gaW50IGNtZF9pZGxlX2luZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2V4dGVybiBpbnQgY21kX21vbml0b3IoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKworZXh0ZXJuIHZvaWQgc2V0X2hlbHAodm9pZCk7CitleHRlcm4gdm9pZCBpbmZvX2hlbHAodm9pZCk7CitleHRlcm4gdm9pZCBmcmVxX3NldF9oZWxwKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlcV9pbmZvX2hlbHAodm9pZCk7CitleHRlcm4gdm9pZCBpZGxlX2luZm9faGVscCh2b2lkKTsKK2V4dGVybiB2b2lkIG1vbml0b3JfaGVscCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLWluZm8uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdWZyZXEtaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYThiZTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLWluZm8uYwpAQCAtMCwwICsxLDY2NSBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSAiY3B1ZnJlcS5oIgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvYml0bWFzay5oIgorCisjZGVmaW5lIExJTkVfTEVOIDEwCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfY3B1cyh2b2lkKQoreworCUZJTEUgKmZwOworCWNoYXIgdmFsdWVbTElORV9MRU5dOworCXVuc2lnbmVkIGludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBjcHVuciA9IDA7CisKKwlmcCA9IGZvcGVuKCIvcHJvYy9zdGF0IiwgInIiKTsKKwlpZighZnApIHsKKwkJcHJpbnRmKF8oIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIiksICIvcHJvYy9zdGF0Iiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIDE7CisJfQorCisJd2hpbGUgKCFmZW9mKGZwKSkgeworCQlpZiAoIWZnZXRzKHZhbHVlLCBMSU5FX0xFTiwgZnApKQorCQkJY29udGludWU7CisJCXZhbHVlW0xJTkVfTEVOIC0gMV0gPSAnXDAnOworCQlpZiAoc3RybGVuKHZhbHVlKSA8IChMSU5FX0xFTiAtIDIpKQorCQkJY29udGludWU7CisJCWlmIChzdHJzdHIodmFsdWUsICJjcHUgIikpCisJCQljb250aW51ZTsKKwkJaWYgKHNzY2FuZih2YWx1ZSwgImNwdSVkICIsICZjcHVucikgIT0gMSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY3B1bnIgPiByZXQpCisJCQlyZXQgPSBjcHVucjsKKwl9CisJZmNsb3NlKGZwKTsKKworCS8qIGNwdSBjb3VudCBzdGFydHMgZnJvbSAwLCBvbiBlcnJvciByZXR1cm4gMSAoVVApICovCisJcmV0dXJuIChyZXQrMSk7Cit9CisKKworc3RhdGljIHZvaWQgcHJvY19jcHVmcmVxX291dHB1dCh2b2lkKQoreworCXVuc2lnbmVkIGludCBjcHUsIG5yX2NwdXM7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisJdW5zaWduZWQgaW50IG1pbl9wY3RnID0gMDsKKwl1bnNpZ25lZCBpbnQgbWF4X3BjdGcgPSAwOworCXVuc2lnbmVkIGxvbmcgbWluLCBtYXg7CisKKwlwcmludGYoXygiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIikpOworCisJbnJfY3B1cyA9IGNvdW50X2NwdXMoKTsKKwlmb3IgKGNwdT0wOyBjcHUgPCBucl9jcHVzOyBjcHUrKykgeworCQlwb2xpY3kgPSBjcHVmcmVxX2dldF9wb2xpY3koY3B1KTsKKwkJaWYgKCFwb2xpY3kpCisJCQljb250aW51ZTsKKworCQlpZiAoY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKGNwdSwgJm1pbiwgJm1heCkpIHsKKwkJCW1heCA9IDA7CisJCX0gZWxzZSB7CisJCQltaW5fcGN0ZyA9IChwb2xpY3ktPm1pbiAqIDEwMCkgLyBtYXg7CisJCQltYXhfcGN0ZyA9IChwb2xpY3ktPm1heCAqIDEwMCkgLyBtYXg7CisJCX0KKwkJcHJpbnRmKCJDUFUlM2QgICAgJTlsdSBrSHogKCUzZCAlJSkgIC0gICU5bHUga0h6ICglM2QgJSUpICAtICAlc1xuIiwKKwkJICAgICAgIGNwdSAsIHBvbGljeS0+bWluLCBtYXggPyBtaW5fcGN0ZyA6IDAsIHBvbGljeS0+bWF4LCBtYXggPyBtYXhfcGN0ZyA6IDAsIHBvbGljeS0+Z292ZXJub3IpOworCisJCWNwdWZyZXFfcHV0X3BvbGljeShwb2xpY3kpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3BlZWQodW5zaWduZWQgbG9uZyBzcGVlZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChzcGVlZCA+IDEwMDAwMDApIHsKKwkJdG1wID0gc3BlZWQgJSAxMDAwMDsKKwkJaWYgKHRtcCA+PSA1MDAwKQorCQkJc3BlZWQgKz0gMTAwMDA7CisJCXByaW50ZiAoIiV1LiUwMnUgR0h6IiwgKCh1bnNpZ25lZCBpbnQpIHNwZWVkLzEwMDAwMDApLAorCQkJKCh1bnNpZ25lZCBpbnQpIChzcGVlZCUxMDAwMDAwKS8xMDAwMCkpOworCX0gZWxzZSBpZiAoc3BlZWQgPiAxMDAwMDApIHsKKwkJdG1wID0gc3BlZWQgJSAxMDAwOworCQlpZiAodG1wID49IDUwMCkKKwkJCXNwZWVkICs9IDEwMDA7CisJCXByaW50ZiAoIiV1IE1IeiIsICgodW5zaWduZWQgaW50KSBzcGVlZCAvIDEwMDApKTsKKwl9IGVsc2UgaWYgKHNwZWVkID4gMTAwMCkgeworCQl0bXAgPSBzcGVlZCAlIDEwMDsKKwkJaWYgKHRtcCA+PSA1MCkKKwkJCXNwZWVkICs9IDEwMDsKKwkJcHJpbnRmICgiJXUuJTAxdSBNSHoiLCAoKHVuc2lnbmVkIGludCkgc3BlZWQvMTAwMCksCisJCQkoKHVuc2lnbmVkIGludCkgKHNwZWVkJTEwMDApLzEwMCkpOworCX0gZWxzZQorCQlwcmludGYgKCIlbHUga0h6Iiwgc3BlZWQpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwcmludF9kdXJhdGlvbih1bnNpZ25lZCBsb25nIGR1cmF0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJaWYgKGR1cmF0aW9uID4gMTAwMDAwMCkgeworCQl0bXAgPSBkdXJhdGlvbiAlIDEwMDAwOworCQlpZiAodG1wID49IDUwMDApCisJCQlkdXJhdGlvbiArPSAxMDAwMDsKKwkJcHJpbnRmICgiJXUuJTAydSBtcyIsICgodW5zaWduZWQgaW50KSBkdXJhdGlvbi8xMDAwMDAwKSwKKwkJCSgodW5zaWduZWQgaW50KSAoZHVyYXRpb24lMTAwMDAwMCkvMTAwMDApKTsKKwl9IGVsc2UgaWYgKGR1cmF0aW9uID4gMTAwMDAwKSB7CisJCXRtcCA9IGR1cmF0aW9uICUgMTAwMDsKKwkJaWYgKHRtcCA+PSA1MDApCisJCQlkdXJhdGlvbiArPSAxMDAwOworCQlwcmludGYgKCIldSB1cyIsICgodW5zaWduZWQgaW50KSBkdXJhdGlvbiAvIDEwMDApKTsKKwl9IGVsc2UgaWYgKGR1cmF0aW9uID4gMTAwMCkgeworCQl0bXAgPSBkdXJhdGlvbiAlIDEwMDsKKwkJaWYgKHRtcCA+PSA1MCkKKwkJCWR1cmF0aW9uICs9IDEwMDsKKwkJcHJpbnRmICgiJXUuJTAxdSB1cyIsICgodW5zaWduZWQgaW50KSBkdXJhdGlvbi8xMDAwKSwKKwkJCSgodW5zaWduZWQgaW50KSAoZHVyYXRpb24lMTAwMCkvMTAwKSk7CisJfSBlbHNlCisJCXByaW50ZiAoIiVsdSBucyIsIGR1cmF0aW9uKTsKKworCXJldHVybjsKK30KKworLyogLS1ib29zdCAvIC1iICovCisKK3N0YXRpYyBpbnQgZ2V0X2Jvb3N0X21vZGUodW5zaWduZWQgaW50IGNwdSkgeworCWludCBzdXBwb3J0LCBhY3RpdmUsIGJfc3RhdGVzID0gMCwgcmV0LCBwc3RhdGVfbm8sIGk7CisJLyogVG9EbzogTWFrZSB0aGlzIG1vcmUgZ2xvYmFsICovCisJdW5zaWduZWQgbG9uZyBwc3RhdGVzW01BWF9IV19QU1RBVEVTXSA9IHswLH07CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICYmCisJICAgIGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGNwdWZyZXFfaGFzX2Jvb3N0X3N1cHBvcnQoY3B1LCAmc3VwcG9ydCwgJmFjdGl2ZSwgJmJfc3RhdGVzKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZihfKCJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyIKKwkJCQkiIG9uIENQVSAlZCAtLSBhcmUgeW91IHJvb3Q/XG4iKSwgY3B1KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLyogUCBzdGF0ZSBjaGFuZ2VzIHZpYSBNU1IgYXJlIGlkZW50aWZpZWQgdmlhIGNwdWlkIDgwMDAwMDA3CisJICAgb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisJICAgaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3CisJICAgJiYgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDcpKSkKKwkqLworCisJcHJpbnRmKF8oIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iKSk7CisKKwlwcmludGYoXygiICAgIFN1cHBvcnRlZDogJXNcbiIpLCBzdXBwb3J0ID8gXygieWVzIikgOiBfKCJubyIpKTsKKwlwcmludGYoXygiICAgIEFjdGl2ZTogJXNcbiIpLCBhY3RpdmUgPyBfKCJ5ZXMiKSA6IF8oIm5vIikpOworCisJLyogVG9EbzogT25seSB3b3JrcyBmb3IgQU1EIGZvciBub3cuLi4gKi8KKwkKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCisJICAgIGNwdXBvd2VyX2NwdV9pbmZvLmZhbWlseSA+PSAweDEwKSB7CisJCXJldCA9IGRlY29kZV9wc3RhdGVzKGNwdSwgY3B1cG93ZXJfY3B1X2luZm8uZmFtaWx5LCBiX3N0YXRlcywKKwkJCQkgICAgIHBzdGF0ZXMsICZwc3RhdGVfbm8pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwlwcmludGYoXygiICAgIEJvb3N0IFN0YXRlczogJWRcbiIpLCBiX3N0YXRlcyk7CisJcHJpbnRmKF8oIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iKSwgcHN0YXRlX25vKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHN0YXRlX25vOyBpKyspIHsKKwkJaWYgKGkgPCBiX3N0YXRlcykKKwkJCXByaW50ZihfKCIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iKSwKKwkJCSAgICAgICBpLCBwc3RhdGVzW2ldKTsKKwkJZWxzZQorCQkJcHJpbnRmKF8oIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iKSwKKwkJCSAgICAgICBpIC0gYl9zdGF0ZXMsIHBzdGF0ZXNbaV0pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVidWdfb3V0cHV0X29uZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCWNoYXIgKmRyaXZlcjsKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVzOworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqZnJlcXM7CisJdW5zaWduZWQgbG9uZyBtaW4sIG1heCwgZnJlcV9rZXJuZWwsIGZyZXFfaGFyZHdhcmU7CisJdW5zaWduZWQgbG9uZyB0b3RhbF90cmFucywgbGF0ZW5jeTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfdGltZTsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICogZ292ZXJub3JzOworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0czsKKworCWlmIChjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSkgeworCQlyZXR1cm47CisJfQorCisJZnJlcV9rZXJuZWwgPSBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbChjcHUpOworCWZyZXFfaGFyZHdhcmUgPSBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKGNwdSk7CisKKwlkcml2ZXIgPSBjcHVmcmVxX2dldF9kcml2ZXIoY3B1KTsKKwlpZiAoIWRyaXZlcikgeworCQlwcmludGYoXygiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIikpOworCX0gZWxzZSB7CisJCXByaW50ZihfKCIgIGRyaXZlcjogJXNcbiIpLCBkcml2ZXIpOworCQljcHVmcmVxX3B1dF9kcml2ZXIoZHJpdmVyKTsKKwl9CisKKwljcHVzID0gY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJaWYgKGNwdXMpIHsKKwkJcHJpbnRmKF8oIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiKSk7CisJCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCQlwcmludGYoIiVkICIsIGNwdXMtPmNwdSk7CisJCQljcHVzID0gY3B1cy0+bmV4dDsKKwkJfQorCQlwcmludGYoIiVkXG4iLCBjcHVzLT5jcHUpOworCQljcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoY3B1cyk7CisJfQorCisJY3B1cyA9IGNwdWZyZXFfZ2V0X2FmZmVjdGVkX2NwdXMoY3B1KTsKKwlpZiAoY3B1cykgeworCQlwcmludGYoXygiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIpKTsKKwkJd2hpbGUgKGNwdXMtPm5leHQpIHsKKwkJCXByaW50ZigiJWQgIiwgY3B1cy0+Y3B1KTsKKwkJCWNwdXMgPSBjcHVzLT5uZXh0OworCQl9CisJCXByaW50ZigiJWRcbiIsIGNwdXMtPmNwdSk7CisJCWNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoY3B1cyk7CisJfQorCisJbGF0ZW5jeSA9IGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25fbGF0ZW5jeShjcHUpOworCWlmIChsYXRlbmN5KSB7CisJCXByaW50ZihfKCIgIG1heGltdW0gdHJhbnNpdGlvbiBsYXRlbmN5OiAiKSk7CisJCXByaW50X2R1cmF0aW9uKGxhdGVuY3kpOworCQlwcmludGYoIi5cbiIpOworCX0KKworCWlmICghKGNwdWZyZXFfZ2V0X2hhcmR3YXJlX2xpbWl0cyhjcHUsICZtaW4sICZtYXgpKSkgeworCQlwcmludGYoXygiICBoYXJkd2FyZSBsaW1pdHM6ICIpKTsKKwkJcHJpbnRfc3BlZWQobWluKTsKKwkJcHJpbnRmKCIgLSAiKTsKKwkJcHJpbnRfc3BlZWQobWF4KTsKKwkJcHJpbnRmKCJcbiIpOworCX0KKworCWZyZXFzID0gY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKGNwdSk7CisJaWYgKGZyZXFzKSB7CisJCXByaW50ZihfKCIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIpKTsKKwkJd2hpbGUgKGZyZXFzLT5uZXh0KSB7CisJCQlwcmludF9zcGVlZChmcmVxcy0+ZnJlcXVlbmN5KTsKKwkJCXByaW50ZigiLCAiKTsKKwkJCWZyZXFzID0gZnJlcXMtPm5leHQ7CisJCX0KKwkJcHJpbnRfc3BlZWQoZnJlcXMtPmZyZXF1ZW5jeSk7CisJCXByaW50ZigiXG4iKTsKKwkJY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKGZyZXFzKTsKKwl9CisKKwlnb3Zlcm5vcnMgPSBjcHVmcmVxX2dldF9hdmFpbGFibGVfZ292ZXJub3JzKGNwdSk7CisJaWYgKGdvdmVybm9ycykgeworCQlwcmludGYoXygiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIpKTsKKwkJd2hpbGUgKGdvdmVybm9ycy0+bmV4dCkgeworCQkJcHJpbnRmKCIlcywgIiwgZ292ZXJub3JzLT5nb3Zlcm5vcik7CisJCQlnb3Zlcm5vcnMgPSBnb3Zlcm5vcnMtPm5leHQ7CisJCX0KKwkJcHJpbnRmKCIlc1xuIiwgZ292ZXJub3JzLT5nb3Zlcm5vcik7CisJCWNwdWZyZXFfcHV0X2F2YWlsYWJsZV9nb3Zlcm5vcnMoZ292ZXJub3JzKTsKKwl9CisKKwlwb2xpY3kgPSBjcHVmcmVxX2dldF9wb2xpY3koY3B1KTsKKwlpZiAocG9saWN5KSB7CisJCXByaW50ZihfKCIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiKSk7CisJCXByaW50X3NwZWVkKHBvbGljeS0+bWluKTsKKwkJcHJpbnRmKF8oIiBhbmQgIikpOworCQlwcmludF9zcGVlZChwb2xpY3ktPm1heCk7CisKKwkJcHJpbnRmKCIuXG4gICAgICAgICAgICAgICAgICAiKTsKKwkJcHJpbnRmKF8oIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IgorCQkgICAgICAgIiBkZWNpZGUgd2hpY2ggc3BlZWQgdG8gdXNlXG4gICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIpLAorCQkgICAgICAgcG9saWN5LT5nb3Zlcm5vcik7CisJCWNwdWZyZXFfcHV0X3BvbGljeShwb2xpY3kpOworCX0KKworCWlmIChmcmVxX2tlcm5lbCB8fCBmcmVxX2hhcmR3YXJlKSB7CisJCXByaW50ZihfKCIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiKSk7CisJCWlmIChmcmVxX2hhcmR3YXJlKSB7CisJCQlwcmludF9zcGVlZChmcmVxX2hhcmR3YXJlKTsKKwkJCXByaW50ZihfKCIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIikpOworCQl9CisJCWVsc2UKKwkJCXByaW50X3NwZWVkKGZyZXFfa2VybmVsKTsKKwkJcHJpbnRmKCIuXG4iKTsKKwl9CisJc3RhdHMgPSBjcHVmcmVxX2dldF9zdGF0cyhjcHUsICZ0b3RhbF90aW1lKTsKKwlpZiAoc3RhdHMpIHsKKwkJcHJpbnRmKF8oIiAgY3B1ZnJlcSBzdGF0czogIikpOworCQl3aGlsZSAoc3RhdHMpIHsKKwkJCXByaW50X3NwZWVkKHN0YXRzLT5mcmVxdWVuY3kpOworCQkJcHJpbnRmKCI6JS4yZiUlIiwgKDEwMC4wICogc3RhdHMtPnRpbWVfaW5fc3RhdGUpIC8gdG90YWxfdGltZSk7CisJCQlzdGF0cyA9IHN0YXRzLT5uZXh0OworCQkJaWYgKHN0YXRzKQorCQkJCXByaW50ZigiLCAiKTsKKwkJfQorCQljcHVmcmVxX3B1dF9zdGF0cyhzdGF0cyk7CisJCXRvdGFsX3RyYW5zID0gY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbnMoY3B1KTsKKwkJaWYgKHRvdGFsX3RyYW5zKQorCQkJcHJpbnRmKCIgICglbHUpXG4iLCB0b3RhbF90cmFucyk7CisJCWVsc2UKKwkJCXByaW50ZigiXG4iKTsKKwl9CisJZ2V0X2Jvb3N0X21vZGUoY3B1KTsKKworfQorCisvKiAtLWZyZXEgLyAtZiAqLworCitzdGF0aWMgaW50IGdldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaHVtYW4pIHsKKwl1bnNpZ25lZCBsb25nIGZyZXEgPSBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbChjcHUpOworCWlmICghZnJlcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGh1bWFuKSB7CisJCXByaW50X3NwZWVkKGZyZXEpOworCQlwcmludGYoIlxuIik7CisJfSBlbHNlCisJCXByaW50ZigiJWx1XG4iLCBmcmVxKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiAtLWh3ZnJlcSAvIC13ICovCisKK3N0YXRpYyBpbnQgZ2V0X2ZyZXFfaGFyZHdhcmUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGh1bWFuKSB7CisJdW5zaWduZWQgbG9uZyBmcmVxID0gY3B1ZnJlcV9nZXRfZnJlcV9oYXJkd2FyZShjcHUpOworCWlmICghZnJlcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGh1bWFuKSB7CisJCXByaW50X3NwZWVkKGZyZXEpOworCQlwcmludGYoIlxuIik7CisJfSBlbHNlCisJCXByaW50ZigiJWx1XG4iLCBmcmVxKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1od2xpbWl0cyAvIC1sICovCisKK3N0YXRpYyBpbnQgZ2V0X2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJdW5zaWduZWQgbG9uZyBtaW4sIG1heDsKKwlpZiAoY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKGNwdSwgJm1pbiwgJm1heCkpCisJCXJldHVybiAtRUlOVkFMOworCXByaW50ZigiJWx1ICVsdVxuIiwgbWluLCBtYXgpOworCXJldHVybiAwOworfQorCisvKiAtLWRyaXZlciAvIC1kICovCisKK3N0YXRpYyBpbnQgZ2V0X2RyaXZlcih1bnNpZ25lZCBpbnQgY3B1KSB7CisJY2hhciAqZHJpdmVyID0gY3B1ZnJlcV9nZXRfZHJpdmVyKGNwdSk7CisJaWYgKCFkcml2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCXByaW50ZigiJXNcbiIsIGRyaXZlcik7CisJY3B1ZnJlcV9wdXRfZHJpdmVyKGRyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tcG9saWN5IC8gLXAgKi8KKworc3RhdGljIGludCBnZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IGNwdWZyZXFfZ2V0X3BvbGljeShjcHUpOworCWlmICghcG9saWN5KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwcmludGYoIiVsdSAlbHUgJXNcbiIsIHBvbGljeS0+bWluLCBwb2xpY3ktPm1heCwgcG9saWN5LT5nb3Zlcm5vcik7CisJY3B1ZnJlcV9wdXRfcG9saWN5KHBvbGljeSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tZ292ZXJub3JzIC8gLWcgKi8KKworc3RhdGljIGludCBnZXRfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqZ292ZXJub3JzID0gY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2dvdmVybm9ycyhjcHUpOworCWlmICghZ292ZXJub3JzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChnb3Zlcm5vcnMtPm5leHQpIHsKKwkJcHJpbnRmKCIlcyAiLCBnb3Zlcm5vcnMtPmdvdmVybm9yKTsKKwkJZ292ZXJub3JzID0gZ292ZXJub3JzLT5uZXh0OworCX0KKwlwcmludGYoIiVzXG4iLCBnb3Zlcm5vcnMtPmdvdmVybm9yKTsKKwljcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzKGdvdmVybm9ycyk7CisJcmV0dXJuIDA7Cit9CisKKworLyogLS1hZmZlY3RlZC1jcHVzICAvIC1hICovCisKK3N0YXRpYyBpbnQgZ2V0X2FmZmVjdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSkgeworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdXMgPSBjcHVmcmVxX2dldF9hZmZlY3RlZF9jcHVzKGNwdSk7CisJaWYgKCFjcHVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCXByaW50ZigiJWQgIiwgY3B1cy0+Y3B1KTsKKwkJY3B1cyA9IGNwdXMtPm5leHQ7CisJfQorCXByaW50ZigiJWRcbiIsIGNwdXMtPmNwdSk7CisJY3B1ZnJlcV9wdXRfYWZmZWN0ZWRfY3B1cyhjcHVzKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1yZWxhdGVkLWNwdXMgIC8gLXIgKi8KKworc3RhdGljIGludCBnZXRfcmVsYXRlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVzID0gY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJaWYgKCFjcHVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCXByaW50ZigiJWQgIiwgY3B1cy0+Y3B1KTsKKwkJY3B1cyA9IGNwdXMtPm5leHQ7CisJfQorCXByaW50ZigiJWRcbiIsIGNwdXMtPmNwdSk7CisJY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzKGNwdXMpOworCXJldHVybiAwOworfQorCisvKiAtLXN0YXRzIC8gLXMgKi8KKworc3RhdGljIGludCBnZXRfZnJlcV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaHVtYW4pIHsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3RyYW5zID0gY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbnMoY3B1KTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfdGltZTsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdHMgPSBjcHVmcmVxX2dldF9zdGF0cyhjcHUsICZ0b3RhbF90aW1lKTsKKwl3aGlsZSAoc3RhdHMpIHsKKwkJaWYgKGh1bWFuKSB7CisJCQlwcmludF9zcGVlZChzdGF0cy0+ZnJlcXVlbmN5KTsKKwkJCXByaW50ZigiOiUuMmYlJSIsICgxMDAuMCAqIHN0YXRzLT50aW1lX2luX3N0YXRlKSAvIHRvdGFsX3RpbWUpOworCQl9CisJCWVsc2UKKwkJCXByaW50ZigiJWx1OiVsbHUiLCBzdGF0cy0+ZnJlcXVlbmN5LCBzdGF0cy0+dGltZV9pbl9zdGF0ZSk7CisJCXN0YXRzID0gc3RhdHMtPm5leHQ7CisJCWlmIChzdGF0cykKKwkJCXByaW50ZigiLCAiKTsKKwl9CisJY3B1ZnJlcV9wdXRfc3RhdHMoc3RhdHMpOworCWlmICh0b3RhbF90cmFucykKKwkJcHJpbnRmKCIgICglbHUpXG4iLCB0b3RhbF90cmFucyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tbGF0ZW5jeSAvIC15ICovCisKK3N0YXRpYyBpbnQgZ2V0X2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGh1bWFuKSB7CisJdW5zaWduZWQgbG9uZyBsYXRlbmN5ID0gY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbl9sYXRlbmN5KGNwdSk7CisJaWYgKCFsYXRlbmN5KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChodW1hbikgeworCQlwcmludF9kdXJhdGlvbihsYXRlbmN5KTsKKwkJcHJpbnRmKCJcbiIpOworCX0gZWxzZQorCQlwcmludGYoIiVsdVxuIiwgbGF0ZW5jeSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZnJlcV9pbmZvX2hlbHAodm9pZCkgeworCXByaW50ZihfKCJVc2FnZTogY3B1cG93ZXIgZnJlcWluZm8gW29wdGlvbnNdXG4iKSk7CisJcHJpbnRmKF8oIk9wdGlvbnM6XG4iKSk7CisJcHJpbnRmKF8oIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIpKTsKKwlwcmludGYoXygiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3B1ZnJlcSBjb3JlICpcbiIpKTsKKwlwcmludGYoXygiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkgKlxuIikpOworCXByaW50ZihfKCIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5IGFsbG93ZWQgKlxuIikpOworCXByaW50ZihfKCIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIpKTsKKwlwcmludGYoXygiICAtcCwgLS1wb2xpY3kgICAgICAgICBHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeSAqXG4iKSk7CisJcHJpbnRmKF8oIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIikpOworCXByaW50ZihfKCIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5ICpcbiIpKTsKKwlwcmludGYoXygiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorCQkJIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIikpOworCXByaW50ZihfKCIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIpKTsKKwlwcmludGYoXygiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSBjaGFuZ2VzICpcbiIpKTsKKwlwcmludGYoXygiICAtYiwgLS1ib29zdCAgICAgICAgICBDaGVja3MgZm9yIHR1cmJvIG9yIGJvb3N0IG1vZGVzICAqXG4iKSk7CisJcHJpbnRmKF8oIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy9jcHVmcmVxXG4iCisJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHNcbiIpKTsKKwlwcmludGYoXygiICAtbSwgLS1odW1hbiAgICAgICAgICBodW1hbi1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSAtZiwgLXcsIC1zIGFuZCAteSBwYXJhbWV0ZXJzXG4iKSk7CisJcHJpbnRmKF8oIiAgLWgsIC0taGVscCAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIikpOworCisJcHJpbnRmKCJcbiIpOworCXByaW50ZihfKCJJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgZnVsbCBvdXRwdXQgYWJvdXRcbiIKKwkgICAgICAgImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG5cbiIpKTsKKwlwcmludGYoXygiQnkgZGVmYXVsdCBpbmZvIG9mIENQVSAwIGlzIHNob3duIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIFxuIgorCQkgIndpdGggdGhlIGNwdXBvd2VyIC0tY3B1IG1haW4gY29tbWFuZCBvcHRpb24uXG4iKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGluZm9fb3B0c1tdID0geworCXsgLm5hbWU9ImRlYnVnIiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdlJ30sCisJeyAubmFtZT0iYm9vc3QiLAkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J2InfSwKKwl7IC5uYW1lPSJmcmVxIiwJCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0nZid9LAorCXsgLm5hbWU9Imh3ZnJlcSIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0ndyd9LAorCXsgLm5hbWU9Imh3bGltaXRzIiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdsJ30sCisJeyAubmFtZT0iZHJpdmVyIiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdkJ30sCisJeyAubmFtZT0icG9saWN5IiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdwJ30sCisJeyAubmFtZT0iZ292ZXJub3JzIiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdnJ30sCisJeyAubmFtZT0icmVsYXRlZC1jcHVzIiwgLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdyJ30sCisJeyAubmFtZT0iYWZmZWN0ZWQtY3B1cyIsLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdhJ30sCisJeyAubmFtZT0ic3RhdHMiLAkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J3MnfSwKKwl7IC5uYW1lPSJsYXRlbmN5IiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSd5J30sCisJeyAubmFtZT0icHJvYyIsCQkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J28nfSwKKwl7IC5uYW1lPSJodW1hbiIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0nbSd9LAorCXsgLm5hbWU9ImhlbHAiLAkJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdoJ30sCisJeyB9LAorfTsKKworaW50IGNtZF9mcmVxX2luZm8oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OworCWludCByZXQgPSAwLCBjb250ID0gMTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKKwl1bnNpZ25lZCBpbnQgaHVtYW4gPSAwOworCWludCBvdXRwdXRfcGFyYW0gPSAwOworCisJZG8geworCQlyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaG9lZndsZHBncmFzbXliIiwgaW5mb19vcHRzLCBOVUxMKTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnPyc6CisJCQlvdXRwdXRfcGFyYW0gPSAnPyc7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCW91dHB1dF9wYXJhbSA9ICdoJzsKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdiJzoKKwkJY2FzZSAnbyc6CisJCWNhc2UgJ2EnOgorCQljYXNlICdyJzoKKwkJY2FzZSAnZyc6CisJCWNhc2UgJ3AnOgorCQljYXNlICdkJzoKKwkJY2FzZSAnbCc6CisJCWNhc2UgJ3cnOgorCQljYXNlICdmJzoKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ3MnOgorCQljYXNlICd5JzoKKwkJCWlmIChvdXRwdXRfcGFyYW0pIHsKKwkJCQlvdXRwdXRfcGFyYW0gPSAtMTsKKwkJCQljb250ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW91dHB1dF9wYXJhbSA9IHJldDsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChodW1hbikgeworCQkJCW91dHB1dF9wYXJhbSA9IC0xOworCQkJCWNvbnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJaHVtYW4gPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIik7CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJfSB3aGlsZShjb250KTsKKworCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisJY2FzZSAnbyc6CisJCWlmICghYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkgeworCQkJcHJpbnRmKF8oIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlICIKKwkJCQkgImNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1IGFyZ3VtZW50XG4iKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIDA6CisJCW91dHB1dF9wYXJhbSA9ICdlJzsKKwl9CisKKwlyZXQgPSAwOworCisJLyogRGVmYXVsdCBpczogc2hvdyBvdXRwdXQgb2YgQ1BVIDAgb25seSAqLworCWlmIChiaXRtYXNrX2lzYWxsY2xlYXIoY3B1c19jaG9zZW4pKQorCQliaXRtYXNrX3NldGJpdChjcHVzX2Nob3NlbiwgMCk7CisJCQorCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisJY2FzZSAtMToKKwkJcHJpbnRmKF8oIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorCQkgICAgICAgIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgJz8nOgorCQlwcmludGYoXygiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iKSk7CisJCWZyZXFfaW5mb19oZWxwKCk7CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgJ2gnOgorCQlmcmVxX2luZm9faGVscCgpOworCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCWNhc2UgJ28nOgorCQlwcm9jX2NwdWZyZXFfb3V0cHV0KCk7CisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisJfQorCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpIHsKKwkJCXByaW50ZihfKCJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIiksIGNwdSk7CisJCQljb250aW51ZTsKKwkJfQorCQlwcmludGYoXygiYW5hbHl6aW5nIENQVSAlZDpcbiIpLCBjcHUpOworCisJCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisJCWNhc2UgJ2InOgorCQkJZ2V0X2Jvb3N0X21vZGUoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdlJzoKKwkJCWRlYnVnX291dHB1dF9vbmUoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdhJzoKKwkJCXJldCA9IGdldF9hZmZlY3RlZF9jcHVzKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlyZXQgPSBnZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlyZXQgPSBnZXRfYXZhaWxhYmxlX2dvdmVybm9ycyhjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJcmV0ID0gZ2V0X3BvbGljeShjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJcmV0ID0gZ2V0X2RyaXZlcihjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJcmV0ID0gZ2V0X2hhcmR3YXJlX2xpbWl0cyhjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ3cnOgorCQkJcmV0ID0gZ2V0X2ZyZXFfaGFyZHdhcmUoY3B1LCBodW1hbik7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlyZXQgPSBnZXRfZnJlcV9rZXJuZWwoY3B1LCBodW1hbik7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlyZXQgPSBnZXRfZnJlcV9zdGF0cyhjcHUsIGh1bWFuKTsKKwkJCWJyZWFrOworCQljYXNlICd5JzoKKwkJCXJldCA9IGdldF9sYXRlbmN5KGNwdSwgaHVtYW4pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJldCkKKwkJCXJldHVybiAocmV0KTsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdWZyZXEtc2V0LmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTViNmIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLXNldC5jCkBAIC0wLDAgKzEsMzU3IEBACisvKgorICogIChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworI2RlZmluZSBOT1JNX0ZSRVFfTEVOIDMyCisKK3ZvaWQgZnJlcV9zZXRfaGVscCh2b2lkKQoreworCXByaW50ZihfKCJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIpKTsKKwlwcmludGYoXygiT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXygiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5IHNlbGVjdFxuIikpOworCXByaW50ZihfKCIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgc2VsZWN0XG4iKSk7CisJcHJpbnRmKF8oIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5ldyBjcHVmcmVxIGdvdmVybm9yXG4iKSk7CisJcHJpbnRmKF8oIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIpKTsKKwlwcmludGYoXygiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU3dpdGNoZXMgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVc1xuIikpOworCXByaW50ZihfKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iKSk7CisJcHJpbnRmKCJcbiIpOworCXByaW50ZihfKCJOb3RlczpcbiIKKwkgICAgICAgIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIikpOworCXByaW50ZihfKCIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBwYXJhbWV0ZXJcbiIKKwkgICAgICAgIiAgIGV4Y2VwdCB0aGUgLWMgQ1BVLCAtLWNwdSBDUFUgcGFyYW1ldGVyXG4iCisJICAgICAgICIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisJICAgICAgICIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorCSAgICAgICAiICAgKEZSRVF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIikpOworCit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIHNldF9vcHRzW10gPSB7CisJeyAubmFtZT0ibWluIiwJCS5oYXNfYXJnPXJlcXVpcmVkX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdkJ30sCisJeyAubmFtZT0ibWF4IiwJCS5oYXNfYXJnPXJlcXVpcmVkX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSd1J30sCisJeyAubmFtZT0iZ292ZXJub3IiLAkuaGFzX2FyZz1yZXF1aXJlZF9hcmd1bWVudCwJLmZsYWc9TlVMTCwJLnZhbD0nZyd9LAorCXsgLm5hbWU9ImZyZXEiLAkJLmhhc19hcmc9cmVxdWlyZWRfYXJndW1lbnQsCS5mbGFnPU5VTEwsCS52YWw9J2YnfSwKKwl7IC5uYW1lPSJoZWxwIiwJCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0naCd9LAorCXsgLm5hbWU9InJlbGF0ZWQiLAkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J3InfSwKKwl7IH0sCit9OworCitzdGF0aWMgdm9pZCBwcmludF9lcnJvcih2b2lkKQoreworCXByaW50ZihfKCJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisJCQkiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisJCQkiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKwkJCSItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisJCQkiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCBhdmFpbGFibGUsXG4iCisJCQkiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgZnJlcXVlbmN5XG4iCisJCQkiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIpKTsKK307CisKK3N0cnVjdCBmcmVxX3VuaXRzIHsKKwljaGFyKgkJc3RyX3VuaXQ7CisJaW50CQlwb3dlcl9vZl90ZW47Cit9OworCitjb25zdCBzdHJ1Y3QgZnJlcV91bml0cyBkZWZfdW5pdHNbXSA9IHsKKwl7Imh6IiwgLTN9LAorCXsia2h6IiwgMH0sIC8qIGRlZmF1bHQgKi8KKwl7Im1oeiIsIDN9LAorCXsiZ2h6IiwgNn0sCisJeyJ0aHoiLCA5fSwKKwl7TlVMTCwgMH0KK307CisKK3N0YXRpYyB2b2lkIHByaW50X3Vua25vd25fYXJnKHZvaWQpCit7CisJcHJpbnRmKF8oImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIikpOworCWZyZXFfc2V0X2hlbHAoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RyaW5nX3RvX2ZyZXF1ZW5jeShjb25zdCBjaGFyICpzdHIpCit7CisJY2hhciBub3JtYWxpemVkW05PUk1fRlJFUV9MRU5dOworCWNvbnN0IHN0cnVjdCBmcmVxX3VuaXRzICp1bml0OworCWNvbnN0IGNoYXIgKnNjYW47CisJY2hhciAqZW5kOworCXVuc2lnbmVkIGxvbmcgZnJlcTsKKwlpbnQgcG93ZXIgPSAwLCBtYXRjaF9jb3VudCA9IDAsIGksIGNwLCBwYWQ7CisKKwl3aGlsZSAoKnN0ciA9PSAnMCcpCisJCXN0cisrOworCisJZm9yIChzY2FuID0gc3RyOyBpc2RpZ2l0KCpzY2FuKSB8fCAqc2NhbiA9PSAnLic7IHNjYW4rKykgeworCQlpZiAoKnNjYW4gPT0gJy4nICYmIG1hdGNoX2NvdW50ID09IDApCisJCQltYXRjaF9jb3VudCA9IDE7CisJCWVsc2UgaWYgKCpzY2FuID09ICcuJyAmJiBtYXRjaF9jb3VudCA9PSAxKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKCpzY2FuKSB7CisJCW1hdGNoX2NvdW50ID0gMDsKKwkJZm9yICh1bml0ID0gZGVmX3VuaXRzOyB1bml0LT5zdHJfdW5pdDsgdW5pdCsrKSB7CisJCQlmb3IgKGkgPSAwOworCQkJICAgICBzY2FuW2ldICYmIHRvbG93ZXIoc2NhbltpXSkgPT0gdW5pdC0+c3RyX3VuaXRbaV07CisJCQkgICAgICsraSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzY2FuW2ldKQorCQkJCWNvbnRpbnVlOworCQkJbWF0Y2hfY291bnQrKzsKKwkJCXBvd2VyID0gdW5pdC0+cG93ZXJfb2ZfdGVuOworCQl9CisJCWlmIChtYXRjaF9jb3VudCAhPSAxKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogY291bnQgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgY29waWVkICovCisJZm9yIChjcCA9IDA7IGlzZGlnaXQoc3RyW2NwXSk7IGNwKyspCisJCWNvbnRpbnVlOworCisJaWYgKHN0cltjcF0gPT0gJy4nKSB7CisJCXdoaWxlIChwb3dlciA+IC0xICYmIGlzZGlnaXQoc3RyW2NwKzFdKSkKKwkJCWNwKyssIHBvd2VyLS07CisJfQorCWlmIChwb3dlciA+PSAtMSkJLyogbm90IGVub3VnaCA9PiBwYWQgKi8KKwkJcGFkID0gcG93ZXIgKyAxOworCWVsc2UJCQkvKiB0byBtdWNoID0+IHN0cmlwICovCisJCXBhZCA9IDAsIGNwICs9IHBvd2VyICsgMTsKKwkvKiBjaGVjayBib3VuZHMgKi8KKwlpZiAoY3AgPD0gMCB8fCBjcCArIHBhZCA+IE5PUk1fRlJFUV9MRU4gLSAxKQorCQlyZXR1cm4gMDsKKworCS8qIGNvcHkgZGlnaXRzICovCisJZm9yIChpID0gMDsgaSA8IGNwOyBpKyssIHN0cisrKSB7CisJCWlmICgqc3RyID09ICcuJykKKwkJCXN0cisrOworCQlub3JtYWxpemVkW2ldID0gKnN0cjsKKwl9CisJLyogYW5kIHBhZCAqLworCWZvciAoOyBpIDwgY3AgKyBwYWQ7IGkrKykKKwkJbm9ybWFsaXplZFtpXSA9ICcwJzsKKworCS8qIHJvdW5kIHVwLCBkb3duID8gKi8KKwltYXRjaF9jb3VudCA9IChub3JtYWxpemVkW2ktMV0gPj0gJzUnKTsKKwkvKiBhbmQgZHJvcCB0aGUgZGVjaW1hbCBwYXJ0ICovCisJbm9ybWFsaXplZFtpLTFdID0gMDsgLyogY3AgPiAwICYmIHBhZCA+PSAwID09PiBpID4gMCAqLworCisJLyogZmluYWwgY29udmVyc2lvbiAoYW5kIGFwcGx5aW5nIHJvdW5kaW5nKSAqLworCWVycm5vID0gMDsKKwlmcmVxID0gc3RydG91bChub3JtYWxpemVkLCAmZW5kLCAxMCk7CisJaWYgKGVycm5vKQorCQlyZXR1cm4gMDsKKwllbHNlIHsKKwkJaWYgKG1hdGNoX2NvdW50ICYmIGZyZXEgIT0gVUxPTkdfTUFYKQorCQkJZnJlcSsrOworCQlyZXR1cm4gZnJlcTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZG9fbmV3X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKm5ld19wb2wpCit7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjdXJfcG9sID0gY3B1ZnJlcV9nZXRfcG9saWN5KGNwdSk7CisJaW50IHJldDsKKworCWlmICghY3VyX3BvbCkgeworCQlwcmludGYoXygid3JvbmcsIHVua25vd24gb3IgdW5oYW5kbGVkIENQVT9cbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFuZXdfcG9sLT5taW4pCisJCW5ld19wb2wtPm1pbiA9IGN1cl9wb2wtPm1pbjsKKworCWlmICghbmV3X3BvbC0+bWF4KQorCQluZXdfcG9sLT5tYXggPSBjdXJfcG9sLT5tYXg7CisKKwlpZiAoIW5ld19wb2wtPmdvdmVybm9yKQorCQluZXdfcG9sLT5nb3Zlcm5vciA9IGN1cl9wb2wtPmdvdmVybm9yOworCisJcmV0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KGNwdSwgbmV3X3BvbCk7CisKKwljcHVmcmVxX3B1dF9wb2xpY3koY3VyX3BvbCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgZG9fb25lX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKm5ld19wb2wsCisJCXVuc2lnbmVkIGxvbmcgZnJlcSwgdW5zaWduZWQgaW50IHBjKQoreworCXN3aXRjaCAocGMpIHsKKwljYXNlIDA6CisJCXJldHVybiBjcHVmcmVxX3NldF9mcmVxdWVuY3koY3B1LCBmcmVxKTsKKworCWNhc2UgMToKKwkJLyogaWYgb25seSBvbmUgdmFsdWUgb2YgYSBwb2xpY3kgaXMgdG8gYmUgY2hhbmdlZCwgd2UgY2FuCisJCSAqIHVzZSBhICJmYXN0IHBhdGgiLgorCQkgKi8KKwkJaWYgKG5ld19wb2wtPm1pbikKKwkJCXJldHVybiBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWluKGNwdSwgbmV3X3BvbC0+bWluKTsKKwkJZWxzZSBpZiAobmV3X3BvbC0+bWF4KQorCQkJcmV0dXJuIGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9tYXgoY3B1LCBuZXdfcG9sLT5tYXgpOworCQllbHNlIGlmIChuZXdfcG9sLT5nb3Zlcm5vcikKKwkJCXJldHVybiBjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IoY3B1LCBuZXdfcG9sLT5nb3Zlcm5vcik7CisKKwlkZWZhdWx0OgorCQkvKiBzbG93IHBhdGggKi8KKwkJcmV0dXJuIGRvX25ld19wb2xpY3koY3B1LCBuZXdfcG9sKTsKKwl9Cit9CisKK2ludCBjbWRfZnJlcV9zZXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OworCWludCByZXQgPSAwLCBjb250ID0gMTsKKwlpbnQgZG91YmxlX3Bhcm0gPSAwLCByZWxhdGVkID0gMCwgcG9saWN5Y2hhbmdlID0gMDsKKwl1bnNpZ25lZCBsb25nIGZyZXEgPSAwOworCWNoYXIgZ292WzIwXTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJc3RydWN0IGNwdWZyZXFfcG9saWN5IG5ld19wb2wgPSB7CisJCS5taW4gPSAwLAorCQkubWF4ID0gMCwKKwkJLmdvdmVybm9yID0gTlVMTCwKKwl9OworCisJLyogcGFyYW1ldGVyIHBhcnNpbmcgKi8KKwlkbyB7CisJCXJldCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJkOnU6ZzpmOmhyIiwgc2V0X29wdHMsIE5VTEwpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlICc/JzoKKwkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2FzZSAnaCc6CisJCQlmcmVxX3NldF9oZWxwKCk7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAtMToKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJaWYgKHJlbGF0ZWQpCisJCQkJZG91YmxlX3Bhcm0rKzsKKwkJCXJlbGF0ZWQrKzsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCWlmIChuZXdfcG9sLm1pbikKKwkJCQlkb3VibGVfcGFybSsrOworCQkJcG9saWN5Y2hhbmdlKys7CisJCQluZXdfcG9sLm1pbiA9IHN0cmluZ190b19mcmVxdWVuY3kob3B0YXJnKTsKKwkJCWlmIChuZXdfcG9sLm1pbiA9PSAwKSB7CisJCQkJcHJpbnRfdW5rbm93bl9hcmcoKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICd1JzoKKwkJCWlmIChuZXdfcG9sLm1heCkKKwkJCQlkb3VibGVfcGFybSsrOworCQkJcG9saWN5Y2hhbmdlKys7CisJCQluZXdfcG9sLm1heCA9IHN0cmluZ190b19mcmVxdWVuY3kob3B0YXJnKTsKKwkJCWlmIChuZXdfcG9sLm1heCA9PSAwKSB7CisJCQkJcHJpbnRfdW5rbm93bl9hcmcoKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWlmIChmcmVxKQorCQkJCWRvdWJsZV9wYXJtKys7CisJCQlmcmVxID0gc3RyaW5nX3RvX2ZyZXF1ZW5jeShvcHRhcmcpOworCQkJaWYgKGZyZXEgPT0gMCkgeworCQkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlpZiAobmV3X3BvbC5nb3Zlcm5vcikKKwkJCQlkb3VibGVfcGFybSsrOworCQkJcG9saWN5Y2hhbmdlKys7CisJCQlpZiAoKHN0cmxlbihvcHRhcmcpIDwgMykgfHwgKHN0cmxlbihvcHRhcmcpID4gMTgpKSB7CisJCQkJcHJpbnRfdW5rbm93bl9hcmcoKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCWlmICgoc3NjYW5mKG9wdGFyZywgIiVzIiwgZ292KSkgIT0gMSkgeworCQkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQluZXdfcG9sLmdvdmVybm9yID0gZ292OworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlKGNvbnQpOworCisJLyogcGFyYW1ldGVyIGNoZWNraW5nICovCisJaWYgKGRvdWJsZV9wYXJtKSB7CisJCXByaW50ZigidGhlIHNhbWUgcGFyYW1ldGVyIHdhcyBwYXNzZWQgbW9yZSB0aGFuIG9uY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZnJlcSAmJiBwb2xpY3ljaGFuZ2UpIHsKKwkJcHJpbnRmKF8oInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorCQkJCSItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFmcmVxICYmICFwb2xpY3ljaGFuZ2UpIHsKKwkJcHJpbnRmKF8oIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKwkJCQkiLWcvLS1nb3Zlcm5vciBtdXN0IGJlIHBhc3NlZFxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEZWZhdWx0IGlzOiBzZXQgYWxsIENQVXMgKi8KKwlpZiAoYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkKKwkJYml0bWFza19zZXRhbGwoY3B1c19jaG9zZW4pOworCisJLyogQWxzbyBzZXQgZnJlcXVlbmN5IHNldHRpbmdzIGZvciByZWxhdGVkIENQVXMgaWYgLXIgaXMgcGFzc2VkICovCisJaWYgKHJlbGF0ZWQpIHsKKwkJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkJICAgICBjcHUgPD0gYml0bWFza19sYXN0KGNwdXNfY2hvc2VuKTsgY3B1KyspIHsKKwkJCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdXM7CisKKwkJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkJICAgIGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpKQorCQkJCWNvbnRpbnVlOworCisJCQljcHVzID0gY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJCQlpZiAoIWNwdXMpCisJCQkJYnJlYWs7CisJCQl3aGlsZSAoY3B1cy0+bmV4dCkgeworCQkJCWJpdG1hc2tfc2V0Yml0KGNwdXNfY2hvc2VuLCBjcHVzLT5jcHUpOworCQkJCWNwdXMgPSBjcHVzLT5uZXh0OworCQkJfQorCQkJY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzKGNwdXMpOworCQl9CisJfQorCisKKwkvKiBsb29wIG92ZXIgQ1BVcyAqLworCWZvciAoY3B1ID0gYml0bWFza19maXJzdChjcHVzX2Nob3Nlbik7CisJICAgICBjcHUgPD0gYml0bWFza19sYXN0KGNwdXNfY2hvc2VuKTsgY3B1KyspIHsKKwkJCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkgICAgY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCQljb250aW51ZTsKKworCQlwcmludGYoXygiU2V0dGluZyBjcHU6ICVkXG4iKSwgY3B1KTsKKwkJcmV0ID0gZG9fb25lX2NwdShjcHUsICZuZXdfcG9sLCBmcmVxLCBwb2xpY3ljaGFuZ2UpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJcHJpbnRfZXJyb3IoKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVpZGxlLWluZm8uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdWlkbGUtaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTQ2ODIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVpZGxlLWluZm8uYwpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqICAoQykgMjAxMCAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGNwdWZyZXEuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvc3lzZnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2JpdG1hc2suaCIKKworI2RlZmluZSBMSU5FX0xFTiAxMAorCitzdGF0aWMgdm9pZCBjcHVpZGxlX2NwdV9vdXRwdXQodW5zaWduZWQgaW50IGNwdSwgaW50IHZlcmJvc2UpCit7CisJaW50IGlkbGVzdGF0ZXMsIGlkbGVzdGF0ZTsKKwljaGFyICp0bXA7CisKKwlwcmludGYoXyAoIkFuYWx5emluZyBDUFUgJWQ6XG4iKSwgY3B1KTsKKworCWlkbGVzdGF0ZXMgPSBzeXNmc19nZXRfaWRsZXN0YXRlX2NvdW50KGNwdSk7CisJaWYgKGlkbGVzdGF0ZXMgPT0gMCkgeworCQlwcmludGYoXygiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIiksIGNwdSk7CisJCXJldHVybjsKKwl9CisJZWxzZSBpZiAoaWRsZXN0YXRlcyA8PSAwKSB7CisJCXByaW50ZihfKCJDUFUgJXU6IENhbid0IHJlYWQgaWRsZSBzdGF0ZSBpbmZvXG4iKSwgY3B1KTsKKwkJcmV0dXJuOworCX0KKwl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX25hbWUoY3B1LCBpZGxlc3RhdGVzIC0gMSk7CisJaWYgKCF0bXApIHsKKwkJcHJpbnRmKF8oIkNvdWxkIG5vdCBkZXRlcm1pbmUgbWF4IGlkbGUgc3RhdGUgJXVcbiIpLAorCQkgICAgICAgaWRsZXN0YXRlcyAtIDEpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKF8oIk51bWJlciBvZiBpZGxlIHN0YXRlczogJWRcbiIpLCBpZGxlc3RhdGVzKTsKKworCXByaW50ZihfKCJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IikpOworCWZvciAoaWRsZXN0YXRlID0gMTsgaWRsZXN0YXRlIDwgaWRsZXN0YXRlczsgaWRsZXN0YXRlKyspIHsKKwkJdG1wID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9uYW1lKGNwdSwgaWRsZXN0YXRlKTsKKwkJaWYgKCF0bXApCisJCQljb250aW51ZTsKKwkJcHJpbnRmKCIgJXMiLCB0bXApOworCQlmcmVlKHRtcCk7CisJfQorCXByaW50ZigiXG4iKTsKKworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCisJZm9yIChpZGxlc3RhdGUgPSAxOyBpZGxlc3RhdGUgPCBpZGxlc3RhdGVzOyBpZGxlc3RhdGUrKykgeworCQl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX25hbWUoY3B1LCBpZGxlc3RhdGUpOworCQlpZiAoIXRtcCkKKwkJCWNvbnRpbnVlOworCQlwcmludGYoIiVzOlxuIiwgdG1wKTsKKwkJZnJlZSh0bXApOworCisJCXRtcCA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfZGVzYyhjcHUsIGlkbGVzdGF0ZSk7CisJCWlmICghdG1wKQorCQkJY29udGludWU7CisJCXByaW50ZihfKCJGbGFncy9EZXNjcmlwdGlvbjogJXNcbiIpLCB0bXApOworCQlmcmVlKHRtcCk7CisKKwkJcHJpbnRmKF8oIkxhdGVuY3k6ICVsdVxuIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX2xhdGVuY3koY3B1LCBpZGxlc3RhdGUpKTsKKwkJcHJpbnRmKF8oIlVzYWdlOiAlbHVcbiIpLAorCQkgICAgICAgc3lzZnNfZ2V0X2lkbGVzdGF0ZV91c2FnZShjcHUsIGlkbGVzdGF0ZSkpOworCQlwcmludGYoXygiRHVyYXRpb246ICVsbHVcbiIpLAorCQkgICAgICAgc3lzZnNfZ2V0X2lkbGVzdGF0ZV90aW1lKGNwdSwgaWRsZXN0YXRlKSk7CisJfQorCXByaW50ZigiXG4iKTsKK30KKworc3RhdGljIHZvaWQgY3B1aWRsZV9nZW5lcmFsX291dHB1dCh2b2lkKQoreworCWNoYXIgKnRtcDsKKworCXRtcCA9IHN5c2ZzX2dldF9jcHVpZGxlX2RyaXZlcigpOworCWlmICghdG1wKSB7CisJCXByaW50ZihfKCJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZHJpdmVyXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoXygiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iKSwgdG1wKTsKKwlmcmVlICh0bXApOworCisJdG1wID0gc3lzZnNfZ2V0X2NwdWlkbGVfZ292ZXJub3IoKTsKKwlpZiAoIXRtcCkgeworCQlwcmludGYoXygiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoXygiQ1BVaWRsZSBnb3Zlcm5vcjogJXNcbiIpLCB0bXApOworCWZyZWUgKHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2NfY3B1aWRsZV9jcHVfb3V0cHV0KHVuc2lnbmVkIGludCBjcHUpCit7CisJbG9uZyBtYXhfYWxsb3dlZF9jc3RhdGUgPSAyMDAwMDAwMDAwOworCWludCBjc3RhdGVzLCBjc3RhdGU7CisKKwljc3RhdGVzID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudChjcHUpOworCWlmIChjc3RhdGVzID09IDApIHsKKwkJLyoKKwkJICogR28gb24gYW5kIHByaW50IHNhbWUgdXNlbGVzcyBpbmZvIGFzIHlvdSdkIHNlZSB3aXRoCisJCSAqIGNhdCAvcHJvYy9hY3BpL3Byb2Nlc3Nvci8uLi9wb3dlcgorCQkgKglwcmludGYoXygiQ1BVICV1OiBObyBDLXN0YXRlcyBhdmFpbGFibGVcbiIpLCBjcHUpOworCQkgKglyZXR1cm47CisJCSAqLworCX0KKwllbHNlIGlmIChjc3RhdGVzIDw9IDApIHsKKwkJcHJpbnRmKF8oIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIpLCBjcHUpOworCQlyZXR1cm47CisJfQorCS8qIHByaW50ZigiQ3N0YXRlczogJWRcbiIsIGNzdGF0ZXMpOyAqLworCisJcHJpbnRmKF8oImFjdGl2ZSBzdGF0ZTogICAgICAgICAgICBDMFxuIikpOworCXByaW50ZihfKCJtYXhfY3N0YXRlOiAgICAgICAgICAgICAgQyV1XG4iKSwgY3N0YXRlcy0xKTsKKwlwcmludGYoXygibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iKSwgbWF4X2FsbG93ZWRfY3N0YXRlKTsKKwlwcmludGYoXygic3RhdGVzOlx0XG4iKSk7CisJZm9yIChjc3RhdGUgPSAxOyBjc3RhdGUgPCBjc3RhdGVzOyBjc3RhdGUrKykgeworCQlwcmludGYoXygiICAgIEMlZDogICAgICAgICAgICAgICAgICAiCisJCQkgInR5cGVbQyVkXSAiKSwgY3N0YXRlLCBjc3RhdGUpOworCQlwcmludGYoXygicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIikpOworCQlwcmludGYoXygibGF0ZW5jeVslMDNsdV0gIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX2xhdGVuY3koY3B1LCBjc3RhdGUpKTsKKwkJcHJpbnRmKF8oInVzYWdlWyUwOGx1XSAiKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfdXNhZ2UoY3B1LCBjc3RhdGUpKTsKKwkJcHJpbnRmKF8oImR1cmF0aW9uWyUwMjBMdV0gXG4iKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZShjcHUsIGNzdGF0ZSkpOworCX0KK30KKworLyogLS1mcmVxIC8gLWYgKi8KKwordm9pZCBpZGxlX2luZm9faGVscCh2b2lkKSB7CisJcHJpbnRmKF8gKCJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iKSk7CisJcHJpbnRmKF8gKCJPcHRpb25zOlxuIikpOworCXByaW50ZihfICgiICAtcywgLS1zaWxlbnQgICAgICAgICBPbmx5IHNob3cgZ2VuZXJhbCBDLXN0YXRlIGluZm9ybWF0aW9uXG4iKSk7CisJcHJpbnRmKF8gKCIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvYWNwaS9wcm9jZXNzb3IvKi9wb3dlclxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gb2xkZXIga2VybmVsc1xuIikpOworCXByaW50ZihfICgiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iKSk7CisKKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGluZm9fb3B0c1tdID0geworCXsgLm5hbWU9InNpbGVudCIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0ncyd9LAorCXsgLm5hbWU9InByb2MiLAkJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdvJ30sCisJeyAubmFtZT0iaGVscCIsCQkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J2gnfSwKKwl7IH0sCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1aWRsZV9leGl0KGludCBmYWlsKQoreworCWlkbGVfaW5mb19oZWxwKCk7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitpbnQgY21kX2lkbGVfaW5mbyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisJaW50IHJldCA9IDAsIGNvbnQgPSAxLCBvdXRwdXRfcGFyYW0gPSAwLCB2ZXJib3NlID0gMTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKKworCWRvIHsKKwkJcmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImhvcyIsIGluZm9fb3B0cywgTlVMTCk7CisJCWlmIChyZXQgPT0gLTEpCisJCQlicmVhazsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnPyc6CisJCQlvdXRwdXRfcGFyYW0gPSAnPyc7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCW91dHB1dF9wYXJhbSA9ICdoJzsKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJdmVyYm9zZSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAtMToKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJaWYgKG91dHB1dF9wYXJhbSkgeworCQkJCW91dHB1dF9wYXJhbSA9IC0xOworCQkJCWNvbnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJb3V0cHV0X3BhcmFtID0gcmV0OworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlKGNvbnQpOworCisJc3dpdGNoIChvdXRwdXRfcGFyYW0pIHsKKwljYXNlIC0xOgorCQlwcmludGYoXygiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAiCisJCQkgIm91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIikpOworCQljcHVpZGxlX2V4aXQoRVhJVF9GQUlMVVJFKTsKKwljYXNlICc/JzoKKwkJcHJpbnRmKF8oImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIikpOworCQljcHVpZGxlX2V4aXQoRVhJVF9GQUlMVVJFKTsKKwljYXNlICdoJzoKKwkJY3B1aWRsZV9leGl0KEVYSVRfU1VDQ0VTUyk7CisJfQorCisJLyogRGVmYXVsdCBpczogc2hvdyBvdXRwdXQgb2YgQ1BVIDAgb25seSAqLworCWlmIChiaXRtYXNrX2lzYWxsY2xlYXIoY3B1c19jaG9zZW4pKQorCQliaXRtYXNrX3NldGJpdChjcHVzX2Nob3NlbiwgMCk7CisJCQorCWlmIChvdXRwdXRfcGFyYW0gPT0gMCkKKwkJY3B1aWRsZV9nZW5lcmFsX291dHB1dCgpOworCQkJCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkgICAgY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKG91dHB1dF9wYXJhbSkgeworCisJCWNhc2UgJ28nOgorCQkJcHJvY19jcHVpZGxlX2NwdV9vdXRwdXQoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlwcmludGYoIlxuIik7CisJCQljcHVpZGxlX2NwdV9vdXRwdXQoY3B1LCB2ZXJib3NlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAoRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLWluZm8uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWRkMDRjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXItaW5mby5jCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogIChDKSAyMDExIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSA8Y3B1ZnJlcS5oPgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvc3lzZnMuaCIKKwordm9pZCBpbmZvX2hlbHAodm9pZCkKK3sKKwlwcmludGYoXygiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIpKTsKKwlwcmludGYoXygiT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXygiICAtYiwgLS1wZXJmLWJpYXMgICAgR2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIpKTsKKwlwcmludGYoXygiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIikpOworCXByaW50ZihfKCIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIikpOworCXByaW50ZihfKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iKSk7CisJcHJpbnRmKF8oIlxuUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iKSk7CisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBzZXRfb3B0c1tdID0geworCXsgLm5hbWU9InBlcmYtYmlhcyIsCS5oYXNfYXJnPW9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdiJ30sCisJeyAubmFtZT0ic2NoZWQtbWMiLAkuaGFzX2FyZz1vcHRpb25hbF9hcmd1bWVudCwJLmZsYWc9TlVMTCwJLnZhbD0nbSd9LAorCXsgLm5hbWU9InNjaGVkLXNtdCIsCS5oYXNfYXJnPW9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdzJ30sCisJeyAubmFtZT0iaGVscCIsCQkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J2gnfSwKKwl7IH0sCit9OworCitzdGF0aWMgdm9pZCBwcmludF93cm9uZ19hcmdfZXhpdCh2b2lkKQoreworCXByaW50ZihfKCJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpKTsKKwlpbmZvX2hlbHAoKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludCBjbWRfaW5mbyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisJdW5zaWduZWQgaW50IGNwdTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWludCBzY2hlZF9tYzoxOworCQkJaW50IHNjaGVkX3NtdDoxOworCQkJaW50IHBlcmZfYmlhczoxOworCQl9OworCQlpbnQgcGFyYW1zOworCQkJCisJfSBwYXJhbXMgPSB7fTsKKwlpbnQgcmV0ID0gMDsKKworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKwl0ZXh0ZG9tYWluIChQQUNLQUdFKTsKKworCS8qIHBhcmFtZXRlciBwYXJzaW5nICovCisJd2hpbGUgKChyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAibXNiaCIsIHNldF9vcHRzLCBOVUxMKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnaCc6CisJCQlpbmZvX2hlbHAoKTsKKwkJCXJldHVybiAwOworCQljYXNlICdiJzoKKwkJCWlmIChwYXJhbXMucGVyZl9iaWFzKQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlwYXJhbXMucGVyZl9iaWFzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChwYXJhbXMuc2NoZWRfbWMpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXBhcmFtcy5zY2hlZF9tYyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlpZiAocGFyYW1zLnNjaGVkX3NtdCkKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJcGFyYW1zLnNjaGVkX3NtdCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCX0KKwl9OworCisJaWYgKCFwYXJhbXMucGFyYW1zKQorCQlwYXJhbXMucGFyYW1zID0gMHg3OworCisJLyogRGVmYXVsdCBpczogc2hvdyBvdXRwdXQgb2YgQ1BVIDAgb25seSAqLworCWlmIChiaXRtYXNrX2lzYWxsY2xlYXIoY3B1c19jaG9zZW4pKQorCQliaXRtYXNrX3NldGJpdChjcHVzX2Nob3NlbiwgMCk7CisKKwlpZiAocGFyYW1zLnNjaGVkX21jKSB7CisJCXJldCA9IHN5c2ZzX2dldF9zY2hlZCgibWMiKTsKKwkJcHJpbnRmKF8oIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIpKTsKKwkJaWYgKHJldCA8IDApCisJCQkvKiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UICovCisJCQlwcmludGYoXygibm90IHN1cHBvcnRlZFxuIikpOworCQllbHNlCisJCQlwcmludGYoIiVkXG4iLCByZXQpOworCX0JCQkKKwlpZiAocGFyYW1zLnNjaGVkX3NtdCkgeworCQlyZXQgPSBzeXNmc19nZXRfc2NoZWQoInNtdCIpOworCQlwcmludGYoXygiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIpKTsKKwkJaWYgKHJldCA8IDApCisJCQkvKiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UICovCisJCQlwcmludGYoXygibm90IHN1cHBvcnRlZFxuIikpOworCQllbHNlCisJCQlwcmludGYoIiVkXG4iLCByZXQpOworCX0KKworCS8qIEFkZCBtb3JlIHBlciBjcHUgb3B0aW9ucyBoZXJlICovCisJaWYgKCFwYXJhbXMucGVyZl9iaWFzKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHBhcmFtcy5wZXJmX2JpYXMpIHsKKwkJaWYgKCFydW5fYXNfcm9vdCkgeworCQkJcGFyYW1zLnBlcmZfYmlhcyA9IDA7CisJCQlwcmludGYgKF8oIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIikpOworCQl9IGVsc2UgaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9QRVJGX0JJQVMpKSB7CisJCQlwcmludGYoXygiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSIKKwkJCQkgIiBiaWFzIHNldHRpbmdcbiIpKTsKKwkJCXBhcmFtcy5wZXJmX2JpYXMgPSAwOworCQl9CisJfQorCisJLyogbG9vcCBvdmVyIENQVXMgKi8KKwlmb3IgKGNwdSA9IGJpdG1hc2tfZmlyc3QoY3B1c19jaG9zZW4pOworCSAgICAgY3B1IDw9IGJpdG1hc2tfbGFzdChjcHVzX2Nob3Nlbik7IGNwdSsrKSB7CisJCQorCQlpZiAoIWJpdG1hc2tfaXNiaXRzZXQoY3B1c19jaG9zZW4sIGNwdSkgfHwKKwkJICAgIGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpKQorCQkJY29udGludWU7CisKKwkJcHJpbnRmKF8oImFuYWx5emluZyBDUFUgJWQ6XG4iKSwgY3B1KTsKKworCQlpZiAocGFyYW1zLnBlcmZfYmlhcykgeworCQkJcmV0ID0gbXNyX2ludGVsX2dldF9wZXJmX2JpYXMoY3B1KTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcHJpbnRmKF8oIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIikpOworCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJcHJpbnRmKF8oInBlcmYtYmlhczogJWRcbiIpLCByZXQpOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1zZXQuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODA3YmMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1zZXQuYwpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqICAoQykgMjAxMSBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgPGNwdWZyZXEuaD4KKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL3N5c2ZzLmgiCisjaW5jbHVkZSAiaGVscGVycy9iaXRtYXNrLmgiCisKK3ZvaWQgc2V0X2hlbHAodm9pZCkKK3sKKwlwcmludGYoXygiVXNhZ2U6IGNwdXBvd2VyIHNldCBbIC1iIHZhbCBdIFsgLW0gdmFsIF0gWyAtcyB2YWwgXVxuIikpOworCXByaW50ZihfKCJPcHRpb25zOlxuIikpOworCXByaW50ZihfKCIgIC1iLCAtLXBlcmYtYmlhcyBbVkFMXSAgICBTZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIikpOworCXByaW50ZihfKCIgIC1tLCAtLXNjaGVkLW1jICBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iKSk7CisJcHJpbnRmKF8oIiAgLXMsIC0tc2NoZWQtc210IFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iKSk7CisJcHJpbnRmKF8oIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIpKTsKKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIHNldF9vcHRzW10gPSB7CisJeyAubmFtZT0icGVyZi1iaWFzIiwJLmhhc19hcmc9b3B0aW9uYWxfYXJndW1lbnQsCS5mbGFnPU5VTEwsCS52YWw9J2InfSwKKwl7IC5uYW1lPSJzY2hlZC1tYyIsCS5oYXNfYXJnPW9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdtJ30sCisJeyAubmFtZT0ic2NoZWQtc210IiwJLmhhc19hcmc9b3B0aW9uYWxfYXJndW1lbnQsCS5mbGFnPU5VTEwsCS52YWw9J3MnfSwKKwl7IC5uYW1lPSJoZWxwIiwJCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0naCd9LAorCXsgfSwKK307CisKK3N0YXRpYyB2b2lkIHByaW50X3dyb25nX2FyZ19leGl0KHZvaWQpCit7CisJcHJpbnRmKF8oImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIikpOworCXNldF9oZWxwKCk7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitpbnQgY21kX3NldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisJdW5zaWduZWQgaW50IGNwdTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWludCBzY2hlZF9tYzoxOworCQkJaW50IHNjaGVkX3NtdDoxOworCQkJaW50IHBlcmZfYmlhczoxOworCQl9OworCQlpbnQgcGFyYW1zOworCQkJCisJfSBwYXJhbXM7CisJaW50IHNjaGVkX21jID0gMCwgc2NoZWRfc210ID0gMCwgcGVyZl9iaWFzID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKwl0ZXh0ZG9tYWluIChQQUNLQUdFKTsKKworCXBhcmFtcy5wYXJhbXMgPSAwOworCS8qIHBhcmFtZXRlciBwYXJzaW5nICovCisJd2hpbGUgKChyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAibTpzOmI6aCIsIHNldF9vcHRzLCBOVUxMKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnaCc6CisJCQlzZXRfaGVscCgpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgJ2InOgorCQkJaWYgKHBhcmFtcy5wZXJmX2JpYXMpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXBlcmZfYmlhcyA9IGF0b2kob3B0YXJnKTsKKwkJCWlmIChwZXJmX2JpYXMgPCAwIHx8IHBlcmZfYmlhcyA+IDE1KSB7CisJCQkJcHJpbnRmKF8oIi0tcGVyZi1iaWFzIHBhcmFtIG91dCAiCisJCQkJCSAib2YgcmFuZ2UgWzAtJWRdXG4iKSwgMTUpOworCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQl9CisJCQlwYXJhbXMucGVyZl9iaWFzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChwYXJhbXMuc2NoZWRfbWMpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXNjaGVkX21jID0gYXRvaShvcHRhcmcpOworCQkJaWYgKHNjaGVkX21jIDwgMCB8fCBzY2hlZF9tYyA+IDIpIHsKKwkJCQlwcmludGYoXygiLS1zY2hlZC1tYyBwYXJhbSBvdXQgIgorCQkJCQkgIm9mIHJhbmdlIFswLSVkXVxuIiksIDIpOworCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQl9CisJCQlwYXJhbXMuc2NoZWRfbWMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKHBhcmFtcy5zY2hlZF9zbXQpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXNjaGVkX3NtdCA9IGF0b2kob3B0YXJnKTsKKwkJCWlmIChzY2hlZF9zbXQgPCAwIHx8IHNjaGVkX3NtdCA+IDIpIHsKKwkJCQlwcmludGYoXygiLS1zY2hlZC1zbXQgcGFyYW0gb3V0ICIKKwkJCQkJICJvZiByYW5nZSBbMC0lZF1cbiIpLCAyKTsKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJfQorCQkJcGFyYW1zLnNjaGVkX3NtdCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCX0KKwl9OworCisJaWYgKCFwYXJhbXMucGFyYW1zKSB7CisJCXNldF9oZWxwKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwYXJhbXMuc2NoZWRfbWMpIHsKKwkJcmV0ID0gc3lzZnNfc2V0X3NjaGVkKCJtYyIsIHNjaGVkX21jKTsKKwkJaWYgKHJldCkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iKSwKKwkJCQkocmV0ID09IC1FTk9ERVYpID8gIm5vdCBzdXBwb3J0ZWQiIDogIiIpOworCX0KKwlpZiAocGFyYW1zLnNjaGVkX3NtdCkgeworCQlyZXQgPSBzeXNmc19zZXRfc2NoZWQoInNtdCIsIHNjaGVkX3NtdCk7CisJCWlmIChyZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIpLAorCQkJCShyZXQgPT0gLUVOT0RFVikgPyAibm90IHN1cHBvcnRlZCIgOiAiIik7CisJfQorCisJLyogRGVmYXVsdCBpczogc2V0IGFsbCBDUFVzICovCisJaWYgKGJpdG1hc2tfaXNhbGxjbGVhcihjcHVzX2Nob3NlbikpCisJCWJpdG1hc2tfc2V0YWxsKGNwdXNfY2hvc2VuKTsKKworCS8qIGxvb3Agb3ZlciBDUFVzICovCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCQkKKwkJaWYgKCFiaXRtYXNrX2lzYml0c2V0KGNwdXNfY2hvc2VuLCBjcHUpIHx8CisJCSAgICBjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXJhbXMucGVyZl9iaWFzKSB7CisJCQlyZXQgPSBtc3JfaW50ZWxfc2V0X3BlcmZfYmlhcyhjcHUsIHBlcmZfYmlhcyk7CisJCQlpZiAocmV0KSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkVycm9yIHNldHRpbmcgcGVyZi1iaWFzICIKKwkJCQkJCSAgInZhbHVlIG9uIENQVSAlZFxuIiksIGNwdSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNDhlNTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiAgSWRlYXMgdGFrZW4gb3ZlciBmcm9tIHRoZSBwZXJmIHVzZXJzcGFjZSB0b29sIChpbmNsdWRlZCBpbiB0aGUgTGludXMKKyAqICBrZXJuZWwgZ2l0IHJlcG8pOiBzdWJjb21tYW5kIGJ1aWx0aW5zIGFuZCBwYXJhbSBwYXJzaW5nLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvYml0bWFzay5oIgorCitzdHJ1Y3QgY21kX3N0cnVjdCB7CisJY29uc3QgY2hhciAqY21kOworCWludCAoKm1haW4pKGludCwgY29uc3QgY2hhciAqKik7CisJdm9pZCAoKnVzYWdlKSh2b2lkKTsKKwlpbnQgbmVlZHNfcm9vdDsKK307CisKKyNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKKworaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisKKy8qIEdsb2JhbCBjcHVfaW5mbyBvYmplY3QgYXZhaWxhYmxlIGZvciBhbGwgYmluYXJpZXMKKyAqIEluZm8gb25seSByZXRyaWV2ZWQgZnJvbSBDUFUgMAorICoKKyAqIFZhbHVlcyB3aWxsIGJlIHplcm8vdW5rbm93biBvbiBub24gWDg2IGFyY2hzCisgKi8KK3N0cnVjdCBjcHVwb3dlcl9jcHVfaW5mbyBjcHVwb3dlcl9jcHVfaW5mbzsKK2ludCBydW5fYXNfcm9vdDsKKy8qIEFmZmVjdGVkIGNwdXMgY2hvc2VuIGJ5IC1jLy0tY3B1IHBhcmFtICovCitzdHJ1Y3QgYml0bWFzayAqY3B1c19jaG9zZW47CisKKyNpZmRlZiBERUJVRworaW50IGJlX3ZlcmJvc2U7CisjZW5kaWYKKworc3RhdGljIHZvaWQgcHJpbnRfaGVscCh2b2lkKTsKKworc3RhdGljIHN0cnVjdCBjbWRfc3RydWN0IGNvbW1hbmRzW10gPSB7CisJeyAiZnJlcXVlbmN5LWluZm8iLAljbWRfZnJlcV9pbmZvLAlmcmVxX2luZm9faGVscCwJMAl9LAorCXsgImZyZXF1ZW5jeS1zZXQiLAljbWRfZnJlcV9zZXQsCWZyZXFfc2V0X2hlbHAsCTEJfSwKKwl7ICJpZGxlLWluZm8iLAkJY21kX2lkbGVfaW5mbywJaWRsZV9pbmZvX2hlbHAsCTAJfSwKKwl7ICJzZXQiLAkJY21kX3NldCwJc2V0X2hlbHAsCTEJfSwKKwl7ICJpbmZvIiwJCWNtZF9pbmZvLAlpbmZvX2hlbHAsCTAJfSwKKwl7ICJtb25pdG9yIiwJCWNtZF9tb25pdG9yLAltb25pdG9yX2hlbHAsCTAJfSwKKwl7ICJoZWxwIiwJCWNtZF9oZWxwLAlwcmludF9oZWxwLAkJMAl9LAorCS8vCXsgImJlbmNoIiwJY21kX2JlbmNoLAlOVUxMLAkJMQl9LAorfTsKKworaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChhcmdjID4gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tYW5kcyk7IGkrKykgeworCQkJc3RydWN0IGNtZF9zdHJ1Y3QgKnAgPSBjb21tYW5kcyArIGk7CisJCQlpZiAoc3RyY21wKHAtPmNtZCwgYXJndlsxXSkpCisJCQkJY29udGludWU7CisJCQlpZiAocC0+dXNhZ2UpIHsKKwkJCQlwLT51c2FnZSgpOworCQkJCXJldHVybiBFWElUX1NVQ0NFU1M7CisJCQl9CisJCX0KKwl9CisJcHJpbnRfaGVscCgpOworCWlmIChhcmdjID09IDEpCisJCXJldHVybiBFWElUX1NVQ0NFU1M7IC8qIGNwdXBvd2VyIGhlbHAgKi8KKwlyZXR1cm4gRVhJVF9GQUlMVVJFOworfQorCitzdGF0aWMgdm9pZCBwcmludF9oZWxwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKyNpZmRlZiBERUJVRworCXByaW50ZihfKCJjcHVwb3dlciBbIC1kIF1bIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIikpOworCXByaW50ZihfKCIgIC1kLCAtLWRlYnVnICAgICAgTWF5IGluY3JlYXNlIG91dHB1dCAoc3RkZXJyKSBvbiBzb21lIHN1YmNvbW1hbmRzXG4iKSk7CisjZWxzZQorCXByaW50ZihfKCJjcHVwb3dlciBbIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIikpOworI2VuZGlmCisJcHJpbnRmKF8oImNwdXBvd2VyIC0tdmVyc2lvblxuIikpOworCXByaW50ZihfKCJTdXBwb3J0ZWQgc3ViY29tbWFuZHMgYXJlOlxuIikpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmRzKTsgaSsrKQorCQlwcmludGYoIlx0JXNcbiIsIGNvbW1hbmRzW2ldLmNtZCk7CisJcHJpbnRmKF8oIlxuU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIikpOworCXByaW50ZihfKCJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIikpOworCXByaW50ZihfKCJhbmQgcmVhZCB1cCB0aGUgc3ViY29tbWFuZCdzIG1hbnBhZ2Ugd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQuXG4iKSk7CisJcHJpbnRmKF8oIlxuVXNlIGNwdXBvd2VyIGhlbHAgc3ViY29tbWFuZCBmb3IgZ2V0dGluZyBoZWxwIGZvciBhYm92ZSBzdWJjb21tYW5kcy5cbiIpKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdmVyc2lvbih2b2lkKSB7CisgICAgICAgIHByaW50ZihQQUNLQUdFICIgIiBWRVJTSU9OICJcbiIpOworCXByaW50ZihfKCJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfb3B0aW9ucyhpbnQgKmFyZ2MsIGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlpbnQgcmV0LCB4LCBuZXdfYXJnYyA9IDA7CisKKwlpZiAoKmFyZ2MgPCAxKQorCQlyZXR1cm47CisKKwlmb3IgKHggPSAwOyAgeCA8ICphcmdjICYmICgoKmFyZ3YpW3hdKVswXSA9PSAnLSc7IHgrKykgeworCQljb25zdCBjaGFyICpwYXJhbSA9ICgqYXJndilbeF07CisJCWlmICghc3RyY21wKHBhcmFtLCAiLWgiKSB8fCAhc3RyY21wKHBhcmFtLCAiLS1oZWxwIikpeworCQkJcHJpbnRfaGVscCgpOworCQkJZXhpdChFWElUX1NVQ0NFU1MpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAocGFyYW0sICItYyIpIHx8ICFzdHJjbXAocGFyYW0sICItLWNwdSIpKXsKKwkJCWlmICgqYXJnYyA8IDIpIHsKKwkJCQlwcmludF9oZWxwKCk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJaWYgKCFzdHJjbXAoKCphcmd2KVt4KzFdLCAiYWxsIikpCisJCQkJYml0bWFza19zZXRhbGwoY3B1c19jaG9zZW4pOworCQkJZWxzZSB7CisJCQkJcmV0ID0gYml0bWFza19wYXJzZWxpc3QoCisJCQkJCQkoKmFyZ3YpW3grMV0sIGNwdXNfY2hvc2VuKTsKKwkJCQlpZiAocmV0IDwgMCkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiRXJyb3IgcGFyc2luZyBjcHUgIgorCQkJCQkJCSAgImxpc3RcbiIpKTsKKwkJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJCX0KKwkJCX0KKwkJCXggKz0gMTsKKwkJCS8qIEN1dCBvdXQgcGFyYW06IGNwdXBvd2VyIC1jIDEgaW5mbyAtPiBjcHVwb3dlciBpbmZvICovCisJCQluZXdfYXJnYyArPSAyOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChwYXJhbSwgIi12IikgfHwgIXN0cmNtcChwYXJhbSwgIi0tdmVyc2lvbiIpKXsKKwkJCXByaW50X3ZlcnNpb24oKTsKKwkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKyNpZmRlZiBERUJVRworCQl9IGVsc2UgaWYgKCFzdHJjbXAocGFyYW0sICItZCIpIHx8ICFzdHJjbXAocGFyYW0sICItLWRlYnVnIikpeworCQkJYmVfdmVyYm9zZSA9IDE7CisJCQluZXdfYXJnYyArKzsKKwkJCWNvbnRpbnVlOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9uOiAlc1xuIiwgcGFyYW0pOworCQkJcHJpbnRfaGVscCgpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisJfQorCSphcmdjIC09IG5ld19hcmdjOworCSphcmd2ICs9IG5ld19hcmdjOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIgKmNtZDsKKwl1bnNpZ25lZCBpbnQgaSwgcmV0OworCisJY3B1c19jaG9zZW4gPSBiaXRtYXNrX2FsbG9jKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX0NPTkYpKTsKKworCWFyZ2MtLTsKKwlhcmd2ICs9IDE7CisKKwloYW5kbGVfb3B0aW9ucygmYXJnYywgJmFyZ3YpOworCisJY21kID0gYXJndlswXTsKKworCWlmIChhcmdjIDwgMSkgeworCQlwcmludF9oZWxwKCk7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCXRleHRkb21haW4gKFBBQ0tBR0UpOworCisJLyogVHVybiAicGVyZiBjbWQgLS1oZWxwIiBpbnRvICJwZXJmIGhlbHAgY21kIiAqLworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLWhlbHAiKSkgeworCQlhcmd2WzFdID0gYXJndlswXTsKKwkJYXJndlswXSA9IGNtZCA9ICJoZWxwIjsKKwl9CisKKwlnZXRfY3B1X2luZm8oMCwgJmNwdXBvd2VyX2NwdV9pbmZvKTsKKwlydW5fYXNfcm9vdCA9ICFnZXR1aWQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmRzKTsgaSsrKSB7CisJCXN0cnVjdCBjbWRfc3RydWN0ICpwID0gY29tbWFuZHMgKyBpOworCQlpZiAoc3RyY21wKHAtPmNtZCwgY21kKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJ1bl9hc19yb290ICYmIHAtPm5lZWRzX3Jvb3QpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgIgorCQkJCQkgICJwcml2aWxlZ2VzXG4iKSwgY21kKTsKKwkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCX0KKwkJcmV0ID0gcC0+bWFpbihhcmdjLCBhcmd2KTsKKwkJaWYgKGNwdXNfY2hvc2VuKQorCQkJYml0bWFza19mcmVlKGNwdXNfY2hvc2VuKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpbnRfaGVscCgpOworCXJldHVybiBFWElUX0ZBSUxVUkU7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2FtZC5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9hbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ0ZTMxZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYW1kLmMKQEAgLTAsMCArMSwxMzcgQEAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8cGNpL3BjaS5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKKyNkZWZpbmUgTVNSX0FNRF9QU1RBVEVfU1RBVFVTCTB4YzAwMTAwNjMKKyNkZWZpbmUgTVNSX0FNRF9QU1RBVEUJCTB4YzAwMTAwNjQKKyNkZWZpbmUgTVNSX0FNRF9QU1RBVEVfTElNSVQJMHhjMDAxMDA2MQorCit1bmlvbiBtc3JfcHN0YXRlIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBmaWQ6NjsKKwkJdW5zaWduZWQgZGlkOjM7CisJCXVuc2lnbmVkIHZpZDo3OworCQl1bnNpZ25lZCByZXMxOjY7CisJCXVuc2lnbmVkIG5iZGlkOjE7CisJCXVuc2lnbmVkIHJlczI6MjsKKwkJdW5zaWduZWQgbmJ2aWQ6NzsKKwkJdW5zaWduZWQgaWRkdmFsOjg7CisJCXVuc2lnbmVkIGlkZGRpdjoyOworCQl1bnNpZ25lZCByZXMzOjIxOworCQl1bnNpZ25lZCBlbjoxOworCX0gYml0czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworfTsKKworc3RhdGljIGludCBnZXRfZGlkKGludCBmYW1pbHksIHVuaW9uIG1zcl9wc3RhdGUgcHN0YXRlKQoreworCWludCB0OworCisJaWYgKGZhbWlseSA9PSAweDEyKQorCQl0ID0gcHN0YXRlLnZhbCAmIDB4ZjsKKwllbHNlCisJCXQgPSBwc3RhdGUuYml0cy5kaWQ7CisKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIGludCBnZXRfY29mKGludCBmYW1pbHksIHVuaW9uIG1zcl9wc3RhdGUgcHN0YXRlKQoreworCWludCB0OworCWludCBmaWQsIGRpZDsKKworCWRpZCA9IGdldF9kaWQoZmFtaWx5LCBwc3RhdGUpOworCisJdCA9IDB4MTA7CisJZmlkID0gcHN0YXRlLmJpdHMuZmlkOworCWlmIChmYW1pbHkgPT0gMHgxMSkKKwkJdCA9IDB4ODsKKworCXJldHVybiAoKDEwMCAqIChmaWQgKyB0KSkgPj4gZGlkKTsKKyB9CisKKy8qIE5lZWRzOgorICogY3B1ICAgICAgICAgIC0+IHRoZSBjcHUgdGhhdCBnZXRzIGV2YWx1YXRlZAorICogY3B1X2ZhbWlseSAgIC0+IFRoZSBjcHUncyBmYW1pbHkgKDB4MTAsIDB4MTIsLi4uKQorICogYm9vdHNfc3RhdGVzIC0+IGhvdyBtdWNoIGJvb3N0IHN0YXRlcyB0aGUgbWFjaGluZXMgc3VwcG9ydAorICoKKyAqIEZpbGxzIHVwOgorICogcHN0YXRlcyAtPiBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc2l6ZSBNQVhfSFdfUFNUQVRFUworICogICAgICAgICAgICBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggemVyb3MuCisgKiAgICAgICAgICAgIEFsbCBhdmFpbGFibGUgIEhXIHBzdGF0ZXMgKGluY2x1ZGluZyBib29zdCBzdGF0ZXMpCisgKiBubyAgICAgIC0+IGFtb3VudCBvZiBwc3RhdGVzIGFib3ZlIGFycmF5IGdvdCBmaWxsZWQgdXAgd2l0aAorICoKKyAqIHJldHVybnMgemVybyBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlCisgKi8KK2ludCBkZWNvZGVfcHN0YXRlcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgY3B1X2ZhbWlseSwKKwkJICAgaW50IGJvb3N0X3N0YXRlcywgdW5zaWduZWQgbG9uZyAqcHN0YXRlcywgaW50ICpubykKK3sKKwlpbnQgaSwgcHNtYXgsIHBzY3VyOworCXVuaW9uIG1zcl9wc3RhdGUgcHN0YXRlOworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCisJLyogT25seSByZWFkIG91dCBmcmVxdWVuY2llcyBmcm9tIEhXIHdoZW4gQ1BVIG1pZ2h0IGJlIGJvb3N0YWJsZQorCSAgIHRvIGtlZXAgdGhlIGNvZGUgYXMgc2hvcnQgYW5kIGNsZWFuIGFzIHBvc3NpYmxlLgorCSAgIE90aGVyd2lzZSBmcmVxdWVuY2llcyBhcmUgZXhwb3J0ZWQgdmlhIEFDUEkgdGFibGVzLgorCSovCisJaWYgKGNwdV9mYW1pbHkgPCAweDEwIHx8IGNwdV9mYW1pbHkgPT0gMHgxNCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlYWRfbXNyKGNwdSwgTVNSX0FNRF9QU1RBVEVfTElNSVQsICZ2YWwpKQorCQlyZXR1cm4gLTE7CisKKwlwc21heCA9ICh2YWwgPj4gNCkgJiAweDc7CisKKwlpZiAocmVhZF9tc3IoY3B1LCBNU1JfQU1EX1BTVEFURV9TVEFUVVMsICZ2YWwpKQorCQlyZXR1cm4gLTE7CisKKwlwc2N1ciA9IHZhbCAmIDB4NzsKKworCXBzY3VyICs9IGJvb3N0X3N0YXRlczsKKwlwc21heCArPSBib29zdF9zdGF0ZXM7CisJZm9yIChpPTA7IGk8PXBzbWF4OyBpKyspIHsKKwkJaWYgKGkgPj0gTUFYX0hXX1BTVEFURVMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSFcgcHN0YXRlcyBbJWRdIGV4Y2VlZGluZyBtYXggWyVkXVxuIiwKKwkJCQlwc21heCwgTUFYX0hXX1BTVEFURVMpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChyZWFkX21zcihjcHUsIE1TUl9BTURfUFNUQVRFICsgaSwgJnBzdGF0ZS52YWwpKQorCQkJcmV0dXJuIC0xOworCQlwc3RhdGVzW2ldID0gZ2V0X2NvZihjcHVfZmFtaWx5LCBwc3RhdGUpOworCX0KKwkqbm8gPSBpOworCXJldHVybiAwOworfQorCitpbnQgYW1kX3BjaV9nZXRfbnVtX2Jvb3N0X3N0YXRlcyhpbnQgKmFjdGl2ZSwgaW50ICpzdGF0ZXMpCit7CisJc3RydWN0IHBjaV9hY2Nlc3MgKnBjaV9hY2M7CisJaW50IHZlbmRvcl9pZCA9IDB4MTAyMjsKKwlpbnQgYm9vc3RfZGV2X2lkc1s0XSA9IHsweDEyMDQsIDB4MTYwNCwgMHgxNzA0LCAwfTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2aWNlOworCXVpbnQ4X3QgdmFsID0gMDsKKworCSphY3RpdmUgPSAqc3RhdGVzID0gMDsKKworCWRldmljZSA9IHBjaV9hY2NfaW5pdCgmcGNpX2FjYywgdmVuZG9yX2lkLCBib29zdF9kZXZfaWRzKTsKKworCWlmIChkZXZpY2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2YWwgPSBwY2lfcmVhZF9ieXRlKGRldmljZSwgMHgxNWMpOworCWlmICh2YWwgJiAzKQorCQkqYWN0aXZlID0gMTsKKwllbHNlCisJCSphY3RpdmUgPSAwOworCSpzdGF0ZXMgPSAodmFsID4+IDIpICYgNzsKKworCXBjaV9jbGVhbnVwKHBjaV9hY2MpOworCXJldHVybiAwOworfQorI2VuZGlmIC8qIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9iaXRtYXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmNGQ2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5jCkBAIC0wLDAgKzEsMjkwIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGhlbHBlcnMvYml0bWFzay5oPgorCisvKiBIb3cgbWFueSBiaXRzIGluIGFuIHVuc2lnbmVkIGxvbmcgKi8KKyNkZWZpbmUgYml0c3BlcmxvbmcgKDggKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisKKy8qIGhvd21hbnkoYSxiKSA6IGhvdyBtYW55IGVsZW1lbnRzIG9mIHNpemUgYiBuZWVkZWQgdG8gaG9sZCBhbGwgb2YgYSAqLworI2RlZmluZSBob3dtYW55KHgseSkgKCgoeCkrKCh5KS0xKSkvKHkpKQorCisvKiBIb3cgbWFueSBsb25ncyBpbiBtYXNrIG9mIG4gYml0cyAqLworI2RlZmluZSBsb25nc3BlcmJpdHMobikgaG93bWFueShuLCBiaXRzcGVybG9uZykKKworI2RlZmluZSBtYXgoYSxiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQorCisvKgorICogQWxsb2NhdGUgYW5kIGZyZWUgYHN0cnVjdCBiaXRtYXNrICpgCisgKi8KKworLyogQWxsb2NhdGUgYSBuZXcgYHN0cnVjdCBiaXRtYXNrYCB3aXRoIGEgc2l6ZSBvZiBuIGJpdHMgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX2FsbG9jKHVuc2lnbmVkIGludCBuKQoreworCXN0cnVjdCBiaXRtYXNrICpibXA7CisKKwlibXAgPSBtYWxsb2Moc2l6ZW9mKCpibXApKTsKKwlpZiAoYm1wID09IDApCisJCXJldHVybiAwOworCWJtcC0+c2l6ZSA9IG47CisJYm1wLT5tYXNrcCA9IGNhbGxvYyhsb25nc3BlcmJpdHMobiksIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJaWYgKGJtcC0+bWFza3AgPT0gMCkgeworCQlmcmVlKGJtcCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gYm1wOworfQorCisvKiBGcmVlIGBzdHJ1Y3QgYml0bWFza2AgKi8KK3ZvaWQgYml0bWFza19mcmVlKHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJaWYgKGJtcCA9PSAwKQorCQlyZXR1cm47CisJZnJlZShibXAtPm1hc2twKTsKKwlibXAtPm1hc2twID0gKHVuc2lnbmVkIGxvbmcgKikweGRlYWRjZGVmOyAgLyogZG91YmxlIGZyZWUgdHJpcHdpcmUgKi8KKwlmcmVlKGJtcCk7Cit9CisKKy8qCisgKiBUaGUgcm91dGluZXMgX2dldGJpdCgpIGFuZCBfc2V0Yml0KCkgYXJlIHRoZSBvbmx5CisgKiByb3V0aW5lcyB0aGF0IGFjdHVhbGx5IHVuZGVyc3RhbmQgdGhlIGxheW91dCBvZiBibXAtPm1hc2twW10uCisgKgorICogT24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmVzLCB0aGlzIGNvdWxkIHNpbXBseSBiZSBhbiBhcnJheSBvZgorICogYnl0ZXMuICBCdXQgdGhlIGtlcm5lbCBsYXlvdXQgb2YgYml0bWFza3MgX2lzXyB2aXNpYmxlIHRvIHVzZXJzcGFjZQorICogdmlhIHRoZSBzY2hlZF8oc2V0L2dldClhZmZpbml0eSBjYWxscyBpbiBMaW51eCAyLjYsIGFuZCBvbiBiaWcKKyAqIGVuZGlhbiBhcmNoaXRlY3R1cmVzLCBpdCBpcyBwYWluZnVsbHkgb2J2aW91cyB0aGF0IHRoaXMgaXMgYW4KKyAqIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzLgorICovCisKKy8qIFJldHVybiB0aGUgdmFsdWUgKDAgb3IgMSkgb2YgYml0IG4gaW4gYml0bWFzayBibXAgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX2dldGJpdChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgbikKK3sKKwlpZiAobiA8IGJtcC0+c2l6ZSkKKwkJcmV0dXJuIChibXAtPm1hc2twW24vYml0c3BlcmxvbmddID4+IChuICUgYml0c3BlcmxvbmcpKSAmIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogU2V0IGJpdCBuIGluIGJpdG1hc2sgYm1wIHRvIHZhbHVlIHYgKDAgb3IgMSkgKi8KK3N0YXRpYyB2b2lkIF9zZXRiaXQoc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCB2KQoreworCWlmIChuIDwgYm1wLT5zaXplKSB7CisJCWlmICh2KQorCQkJYm1wLT5tYXNrcFtuL2JpdHNwZXJsb25nXSB8PSAxVUwgPDwgKG4gJSBiaXRzcGVybG9uZyk7CisJCWVsc2UKKwkJCWJtcC0+bWFza3Bbbi9iaXRzcGVybG9uZ10gJj0gfigxVUwgPDwgKG4gJSBiaXRzcGVybG9uZykpOworCX0KK30KKworLyoKKyAqIFdoZW4gcGFyc2luZyBiaXRtYXNrIGxpc3RzLCBvbmx5IGFsbG93IG51bWJlcnMsIHNlcGFyYXRlZCBieSBvbmUKKyAqIG9mIHRoZSBhbGxvd2VkIG5leHQgY2hhcmFjdGVycy4KKyAqCisgKiBUaGUgcGFyYW1ldGVyICdzcmV0JyBpcyB0aGUgcmV0dXJuIGZyb20gYSBzc2NhbmYgIiV1JWMiLiAgSXQgaXMKKyAqIC0xIGlmIHRoZSBzc2NhbmYgaW5wdXQgc3RyaW5nIHdhcyBlbXB0eS4gIEl0IGlzIDAgaWYgdGhlIGZpcnN0CisgKiBjaGFyYWN0ZXIgaW4gdGhlIHNzY2FuZiBpbnB1dCBzdHJpbmcgd2FzIG5vdCBhIGRlY2ltYWwgbnVtYmVyLgorICogSXQgaXMgMSBpZiB0aGUgdW5zaWduZWQgbnVtYmVyIG1hdGNoaW5nIHRoZSAiJXUiIHdhcyB0aGUgZW5kIG9mIHRoZQorICogaW5wdXQgc3RyaW5nLiAgSXQgaXMgMiBpZiBvbmUgb3IgbW9yZSBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgZm9sbG93ZWQKKyAqIHRoZSBtYXRjaGVkIHVuc2lnbmVkIG51bWJlci4gIElmIGl0IGlzIDIsIHRoZW4gJ25leHRjJyBpcyB0aGUgZmlyc3QKKyAqIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIG51bWJlci4gIFRoZSBwYXJhbWV0ZXIgJ29rX25leHRfY2hhcnMnCisgKiBpcyB0aGUgbnVsLXRlcm1pbmF0ZWQgbGlzdCBvZiBhbGxvd2VkIG5leHQgY2hhcmFjdGVycy4KKyAqCisgKiBUaGUgbWFzayB0ZXJtIGp1c3Qgc2Nhbm5lZCB3YXMgb2sgaWYgYW5kIG9ubHkgaWYgZWl0aGVyIHRoZSBudW1iZXJzCisgKiBtYXRjaGluZyB0aGUgJXUgd2VyZSBhbGwgb2YgdGhlIGlucHV0IG9yIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpbgorICogdGhlIGlucHV0IHBhc3QgdGhlIG51bWJlcnMgd2FzIG9uZSBvZiB0aGUgYWxsb3dlZCBuZXh0IGNoYXJhY3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgc2Nhbl93YXNfb2soaW50IHNyZXQsIGNoYXIgbmV4dGMsIGNvbnN0IGNoYXIgKm9rX25leHRfY2hhcnMpCit7CisJcmV0dXJuIHNyZXQgPT0gMSB8fAorCQkoc3JldCA9PSAyICYmIHN0cmNocihva19uZXh0X2NoYXJzLCBuZXh0YykgIT0gTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpuZXh0dG9rZW4oY29uc3QgY2hhciAqcSwgIGludCBzZXApCit7CisJaWYgKHEpCisJCXEgPSBzdHJjaHIocSwgc2VwKTsKKwlpZiAocSkKKwkJcSsrOworCXJldHVybiBxOworfQorCisvKiBTZXQgYSBzaW5nbGUgYml0IGkgaW4gYml0bWFzayAqLworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfc2V0Yml0KHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBpKQoreworCV9zZXRiaXQoYm1wLCBpLCAxKTsKKwlyZXR1cm4gYm1wOworfQorCisvKiBTZXQgYWxsIGJpdHMgaW4gYml0bWFzazogYm1wID0gfjAgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX3NldGFsbChzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBibXAtPnNpemU7IGkrKykKKwkJX3NldGJpdChibXAsIGksIDEpOworCXJldHVybiBibXA7Cit9CisKKy8qIENsZWFyIGFsbCBiaXRzIGluIGJpdG1hc2s6IGJtcCA9IDAgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX2NsZWFyYWxsKHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGJtcC0+c2l6ZTsgaSsrKQorCQlfc2V0Yml0KGJtcCwgaSwgMCk7CisJcmV0dXJuIGJtcDsKK30KKworLyogVHJ1ZSBpZiBhbGwgYml0cyBhcmUgY2xlYXIgKi8KK2ludCBiaXRtYXNrX2lzYWxsY2xlYXIoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYm1wLT5zaXplOyBpKyspCisJCWlmIChfZ2V0Yml0KGJtcCwgaSkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogVHJ1ZSBpZiBzcGVjaWZpZWQgYml0IGkgaXMgc2V0ICovCitpbnQgYml0bWFza19pc2JpdHNldChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlyZXR1cm4gX2dldGJpdChibXAsIGkpOworfQorCisvKiBOdW1iZXIgb2YgbG93ZXN0IHNldCBiaXQgKG1pbikgKi8KK3Vuc2lnbmVkIGludCBiaXRtYXNrX2ZpcnN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJcmV0dXJuIGJpdG1hc2tfbmV4dChibXAsIDApOworfQorCisvKiBOdW1iZXIgb2YgaGlnaGVzdCBzZXQgYml0IChtYXgpICovCit1bnNpZ25lZCBpbnQgYml0bWFza19sYXN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IG0gPSBibXAtPnNpemU7CisJZm9yIChpID0gMDsgaSA8IGJtcC0+c2l6ZTsgaSsrKQorCQlpZiAoX2dldGJpdChibXAsIGkpKQorCQkJbSA9IGk7CisJcmV0dXJuIG07Cit9CisKKy8qIE51bWJlciBvZiBuZXh0IHNldCBiaXQgYXQgb3IgYWJvdmUgZ2l2ZW4gYml0IGkgKi8KK3Vuc2lnbmVkIGludCBiaXRtYXNrX25leHQoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IGkpCit7CisJdW5zaWduZWQgaW50IG47CisJZm9yIChuID0gaTsgbiA8IGJtcC0+c2l6ZTsgbisrKQorCQlpZiAoX2dldGJpdChibXAsIG4pKQorCQkJYnJlYWs7CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBudW1iZXJzIGFuZCByYW5nZXMgb2YgbnVtYmVycywKKyAqIHdpdGggb3B0aW9uYWwgJzoldScgc3RyaWRlcyBtb2RpZnlpbmcgcmFuZ2VzLCBpbnRvIHByb3ZpZGVkIGJpdG1hc2suCisgKiBTb21lIGV4YW1wbGVzIG9mIGlucHV0IGxpc3RzIGFuZCB0aGVpciBlcXVpdmFsZW50IHNpbXBsZSBsaXN0OgorICoJSW5wdXQJCUVxdWl2YWxlbnQgdG8KKyAqCTAtMwkJMCwxLDIsMworICoJMC03OjIJCTAsMiw0LDYKKyAqCTEsMyw1LTcJCTEsMyw1LDYsNworICoJMC0zOjIsOC0xNTo0CTAsMiw4LDEyCQorICovCitpbnQgYml0bWFza19wYXJzZWxpc3QoY29uc3QgY2hhciAqYnVmLCBzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCWNvbnN0IGNoYXIgKnAsICpxOworCisJYml0bWFza19jbGVhcmFsbChibXApOworCisJcSA9IGJ1ZjsKKwl3aGlsZSAocCA9IHEsIHEgPSBuZXh0dG9rZW4ocSwgJywnKSwgcCkgeworCQl1bnNpZ25lZCBpbnQgYTsJCS8qIGJlZ2luIG9mIHJhbmdlICovCisJCXVuc2lnbmVkIGludCBiOwkJLyogZW5kIG9mIHJhbmdlICovCisJCXVuc2lnbmVkIGludCBzOwkJLyogc3RyaWRlICovCisJCWNvbnN0IGNoYXIgKmMxLCAqYzI7CS8qIG5leHQgdG9rZW5zIGFmdGVyICctJyBvciAnLCcgKi8KKwkJY2hhciBuZXh0YzsJCS8qIGNoYXIgYWZ0ZXIgc3NjYW5mICV1IG1hdGNoICovCisJCWludCBzcmV0OwkJLyogc3NjYW5mIHJldHVybiAobnVtYmVyIG9mIG1hdGNoZXMpICovCisKKwkJc3JldCA9IHNzY2FuZihwLCAiJXUlYyIsICZhLCAmbmV4dGMpOworCQlpZiAoIXNjYW5fd2FzX29rKHNyZXQsIG5leHRjLCAiLC0iKSkKKwkJCWdvdG8gZXJyOworCQliID0gYTsKKwkJcyA9IDE7CisJCWMxID0gbmV4dHRva2VuKHAsICctJyk7CisJCWMyID0gbmV4dHRva2VuKHAsICcsJyk7CisJCWlmIChjMSAhPSBOVUxMICYmIChjMiA9PSBOVUxMIHx8IGMxIDwgYzIpKSB7CisJCQlzcmV0ID0gc3NjYW5mKGMxLCAiJXUlYyIsICZiLCAmbmV4dGMpOworCQkJaWYgKCFzY2FuX3dhc19vayhzcmV0LCBuZXh0YywgIiw6IikpCisJCQkJZ290byBlcnI7CisJCQljMSA9IG5leHR0b2tlbihjMSwgJzonKTsKKwkJCWlmIChjMSAhPSBOVUxMICYmIChjMiA9PSBOVUxMIHx8IGMxIDwgYzIpKSB7CisJCQkJc3JldCA9IHNzY2FuZihjMSwgIiV1JWMiLCAmcywgJm5leHRjKTsKKwkJCQlpZiAoIXNjYW5fd2FzX29rKHNyZXQsIG5leHRjLCAiLCIpKQorCQkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCQlpZiAoIShhIDw9IGIpKQorCQkJZ290byBlcnI7CisJCWlmIChiID49IGJtcC0+c2l6ZSkKKwkJCWdvdG8gZXJyOworCQl3aGlsZSAoYSA8PSBiKSB7CisJCQlfc2V0Yml0KGJtcCwgYSwgMSk7CisJCQlhICs9IHM7CisJCX0KKwl9CisJcmV0dXJuIDA7CitlcnI6CisJYml0bWFza19jbGVhcmFsbChibXApOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIGVtaXQoYnVmLCBidWZsZW4sIHJib3QsIHJ0b3AsIGxlbikKKyAqCisgKiBIZWxwZXIgcm91dGluZSBmb3IgYml0bWFza19kaXNwbGF5bGlzdCgpLiAgV3JpdGUgZGVjaW1hbCBudW1iZXIKKyAqIG9yIHJhbmdlIHRvIGJ1ZitsZW4sIHN1cHByZXNzaW5nIG91dHB1dCBwYXN0IGJ1ZitidWZsZW4sIHdpdGggb3B0aW9uYWwKKyAqIGNvbW1hLXByZWZpeC4gIFJldHVybiBsZW4gb2Ygd2hhdCB3b3VsZCBiZSB3cml0dGVuIHRvIGJ1ZiwgaWYgaXQKKyAqIGFsbCBmaXQuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgZW1pdChjaGFyICpidWYsIGludCBidWZsZW4sIGludCByYm90LCBpbnQgcnRvcCwgaW50IGxlbikKK3sKKwlpZiAobGVuID4gMCkKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KGJ1ZmxlbiAtIGxlbiwgMCksICIsIik7CisJaWYgKHJib3QgPT0gcnRvcCkKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KGJ1ZmxlbiAtIGxlbiwgMCksICIlZCIsIHJib3QpOworCWVsc2UKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KGJ1ZmxlbiAtIGxlbiwgMCksICIlZC0lZCIsIHJib3QsIHJ0b3ApOworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBXcml0ZSBkZWNpbWFsIGxpc3QgcmVwcmVzZW50YXRpb24gb2YgYm1wIHRvIGJ1Zi4KKyAqCisgKiBPdXRwdXQgZm9ybWF0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZGVjaW1hbCBudW1iZXJzIGFuZAorICogcmFuZ2VzLiAgQ29uc2VjdXRpdmVseSBzZXQgYml0cyBhcmUgc2hvd24gYXMgdHdvIGh5cGhlbi1zZXBhcmF0ZWQKKyAqIGRlY2ltYWwgbnVtYmVycywgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IGJpdCBudW1iZXJzIHNldCBpbgorICogdGhlIHJhbmdlLiAgT3V0cHV0IGZvcm1hdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGZvcm1hdAorICogYWNjZXB0ZWQgYXMgaW5wdXQgYnkgYml0bWFwX3BhcnNlbGlzdCgpLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkIGJlCisgKiBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiBpbnB1dCwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyAnXDAnLCBhcworICogcGVyIElTTyBDOTkuCisgKi8KKworaW50IGJpdG1hc2tfZGlzcGxheWxpc3QoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCWludCBsZW4gPSAwOworCS8qIGN1cnJlbnQgYml0IGlzICdjdXInLCBtb3N0IHJlY2VudGx5IHNlZW4gcmFuZ2UgaXMgW3Jib3QsIHJ0b3BdICovCisJdW5zaWduZWQgaW50IGN1ciwgcmJvdCwgcnRvcDsKKworCWlmIChidWZsZW4gPiAwKQorCQkqYnVmID0gMDsKKwlyYm90ID0gY3VyID0gYml0bWFza19maXJzdChibXApOworCXdoaWxlIChjdXIgPCBibXAtPnNpemUpIHsKKwkJcnRvcCA9IGN1cjsKKwkJY3VyID0gYml0bWFza19uZXh0KGJtcCwgY3VyKzEpOworCQlpZiAoY3VyID49IGJtcC0+c2l6ZSB8fCBjdXIgPiBydG9wICsgMSkgeworCQkJbGVuID0gZW1pdChidWYsIGJ1ZmxlbiwgcmJvdCwgcnRvcCwgbGVuKTsKKwkJCXJib3QgPSBjdXI7CisJCX0KKwl9CisJcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9iaXRtYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyODlkZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX19DUFVQT1dFUl9CSVRNQVNLX18KKyNkZWZpbmUgX19DUFVQT1dFUl9CSVRNQVNLX18KKworLyogVGFrZW4gb3ZlciBmcm9tIGxpYmJpdG1hc2ssIGEgcHJvamVjdCBpbml0aWF0ZWQgZnJvbSBzZ2k6CisgKiBVcmw6ICAgICAgICAgICAgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL2NwdXNldHMvCisgKiBVbmZvcnR1bmF0ZWx5IGl0J3Mgbm90IHZlcnkgd2lkZXNwcmVhZCwgdGhlcmVmb3JlIHJlbGV2YW50IHBhcnRzIGFyZQorICogcGFzdGVkIGhlcmUuCisgKi8KKworc3RydWN0IGJpdG1hc2sgeworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGxvbmcgKm1hc2twOworfTsKKworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfYWxsb2ModW5zaWduZWQgaW50IG4pOwordm9pZCBiaXRtYXNrX2ZyZWUoc3RydWN0IGJpdG1hc2sgKmJtcCk7CisKK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX3NldGJpdChzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgaSk7CitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19zZXRhbGwoc3RydWN0IGJpdG1hc2sgKmJtcCk7CitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19jbGVhcmFsbChzdHJ1Y3QgYml0bWFzayAqYm1wKTsKKwordW5zaWduZWQgaW50IGJpdG1hc2tfZmlyc3QoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCk7Cit1bnNpZ25lZCBpbnQgYml0bWFza19uZXh0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBpKTsKK3Vuc2lnbmVkIGludCBiaXRtYXNrX2xhc3QoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCk7CitpbnQgYml0bWFza19pc2FsbGNsZWFyKGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOworaW50IGJpdG1hc2tfaXNiaXRzZXQoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IGkpOworCitpbnQgYml0bWFza19wYXJzZWxpc3QoY29uc3QgY2hhciAqYnVmLCBzdHJ1Y3QgYml0bWFzayAqYm1wKTsKK2ludCBiaXRtYXNrX2Rpc3BsYXlsaXN0KGNoYXIgKmJ1ZiwgaW50IGxlbiwgY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCk7CisKKworCisjZW5kaWYgLypfX0NQVVBPV0VSX0JJVE1BU0tfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9jcHVpZC5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9jcHVpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMDIxZjNiYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvY3B1aWQuYwpAQCAtMCwwICsxLDE0NSBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqY3B1X3ZlbmRvcl90YWJsZVtYODZfVkVORE9SX01BWF0gPSB7CisJIlVua25vd24iLCAiR2VudWluZUludGVsIiwgIkF1dGhlbnRpY0FNRCIsCit9OworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisvKiBmcm9tIGdjYyAqLworI2luY2x1ZGUgPGNwdWlkLmg+CisKKy8qCisgKiBDUFVJRCBmdW5jdGlvbnMgcmV0dXJuaW5nIGEgc2luZ2xlIGRhdHVtCisgKgorICogRGVmaW5lIHVuc2lnbmVkIGludCBjcHVpZF9lW2FiY2RdeCh1bnNpZ25lZCBpbnQgb3ApCisgKi8KKyNkZWZpbmUgY3B1aWRfZnVuYyhyZWcpCQkJCQlcCisJdW5zaWduZWQgaW50IGNwdWlkXyMjcmVnKHVuc2lnbmVkIGludCBvcCkJXAorCXsJCQkJCQlcCisJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsJCVwKKwlfX2NwdWlkKG9wLCBlYXgsIGVieCwgZWN4LCBlZHgpOwkJXAorCXJldHVybiByZWc7CQkJCQlcCisJfQorY3B1aWRfZnVuYyhlYXgpOworY3B1aWRfZnVuYyhlYngpOworY3B1aWRfZnVuYyhlY3gpOworY3B1aWRfZnVuYyhlZHgpOworCisjZW5kaWYgLyogZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLworCisvKiBnZXRfY3B1X2luZm8KKyAqCisgKiBFeHRyYWN0IENQVSB2ZW5kb3IsIGZhbWlseSwgbW9kZWwsIHN0ZXBwaW5nIGluZm8gZnJvbSAvcHJvYy9jcHVpbmZvCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2IGVycm9yIGNvZGUKKyAqCisgKiBUQkQ6IFNob3VsZCB0aGVyZSBiZSBhIGNwdWlkIGFsdGVybmF0aXZlIGZvciB0aGlzIGlmIC9wcm9jIGlzIG5vdCBtb3VudGVkPworICovCitpbnQgZ2V0X2NwdV9pbmZvKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBjcHVwb3dlcl9jcHVfaW5mbyAqY3B1X2luZm8pCit7CisJRklMRSAqZnA7CisJY2hhciB2YWx1ZVs2NF07CisJdW5zaWduZWQgaW50IHByb2MsIHg7CisJdW5zaWduZWQgaW50IHVua25vd24gPSAweGZmZmZmZjsKKwl1bnNpZ25lZCBpbnQgY3B1aWRfbGV2ZWwsIGV4dF9jcHVpZF9sZXZlbDsKKworCWludCByZXQgPSAtRUlOVkFMOworCisJY3B1X2luZm8tPnZlbmRvcgkJPSBYODZfVkVORE9SX1VOS05PV047CisJY3B1X2luZm8tPmZhbWlseQkJPSB1bmtub3duOworCWNwdV9pbmZvLT5tb2RlbAkJCT0gdW5rbm93bjsKKwljcHVfaW5mby0+c3RlcHBpbmcJCT0gdW5rbm93bjsKKwljcHVfaW5mby0+Y2FwcwkJCT0gMDsKKworCWZwID0gZm9wZW4oIi9wcm9jL2NwdWluZm8iLCAiciIpOworCWlmICghZnApCisJCXJldHVybiAtRUlPOworCisJd2hpbGUgKCFmZW9mKGZwKSkgeworCQlpZiAoIWZnZXRzKHZhbHVlLCA2NCwgZnApKQorCQkJY29udGludWU7CisJCXZhbHVlWzYzIC0gMV0gPSAnXDAnOworCisJCWlmICghc3RybmNtcCh2YWx1ZSwgInByb2Nlc3Nvclx0OiAiLCAxMikpIHsKKwkJCXNzY2FuZih2YWx1ZSwgInByb2Nlc3Nvclx0OiAldSIsICZwcm9jKTsKKwkJfQorCQlpZiAocHJvYyAhPSBjcHUpCisJCQljb250aW51ZTsKKworCQkvKiBHZXQgQ1BVIHZlbmRvciAqLworCQlpZiAoIXN0cm5jbXAodmFsdWUsICJ2ZW5kb3JfaWQiLCA5KSkKKwkJCWZvciAoeCA9IDE7IHggPCBYODZfVkVORE9SX01BWDsgeCsrKSB7CisJCQkJaWYgKHN0cnN0cih2YWx1ZSwgY3B1X3ZlbmRvcl90YWJsZVt4XSkpCisJCQkJCWNwdV9pbmZvLT52ZW5kb3IgPSB4OworCQkJfQorCQkvKiBHZXQgQ1BVIGZhbWlseSwgZXRjLiAqLworCQllbHNlIGlmICghc3RybmNtcCh2YWx1ZSwgImNwdSBmYW1pbHlcdDogIiwgMTMpKSB7CisJCQlzc2NhbmYodmFsdWUsICJjcHUgZmFtaWx5XHQ6ICV1IiwKKwkJCSAgICAgICAmY3B1X2luZm8tPmZhbWlseSk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cm5jbXAodmFsdWUsICJtb2RlbFx0XHQ6ICIsIDkpKSB7CisJCQlzc2NhbmYodmFsdWUsICJtb2RlbFx0XHQ6ICV1IiwKKwkJCSAgICAgICAmY3B1X2luZm8tPm1vZGVsKTsKKwkJfQorCQllbHNlIGlmICghc3RybmNtcCh2YWx1ZSwgInN0ZXBwaW5nXHQ6ICIsIDEwKSkgeworCQkJc3NjYW5mKHZhbHVlLCAic3RlcHBpbmdcdDogJXUiLAorCQkJICAgICAgICZjcHVfaW5mby0+c3RlcHBpbmcpOworCisJCQkvKiBFeGl0IC0+IGFsbCB2YWx1ZXMgbXVzdCBoYXZlIGJlZW4gc2V0ICovCisJCQlpZiAoY3B1X2luZm8tPnZlbmRvciA9PSBYODZfVkVORE9SX1VOS05PV04gfHwKKwkJCSAgICBjcHVfaW5mby0+ZmFtaWx5ID09IHVua25vd24gfHwKKwkJCSAgICBjcHVfaW5mby0+bW9kZWwgPT0gdW5rbm93biB8fAorCQkJICAgIGNwdV9pbmZvLT5zdGVwcGluZyA9PSB1bmtub3duKSB7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJcmV0ID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCXJldCA9IC1FTk9ERVY7CitvdXQ6CisJZmNsb3NlKGZwKTsKKwkvKiBHZXQgc29tZSB1c2VmdWwgQ1BVIGNhcGFiaWxpdGllcyBmcm9tIGNwdWlkICovCisJaWYgKGNwdV9pbmZvLT52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgJiYKKwkgICAgY3B1X2luZm8tPnZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKQorCQlyZXR1cm4gcmV0OworCisJY3B1aWRfbGV2ZWwJPSBjcHVpZF9lYXgoMCk7CisJZXh0X2NwdWlkX2xldmVsCT0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOworCisJLyogSW52YXJpYW50IFRTQyAqLworCWlmIChleHRfY3B1aWRfbGV2ZWwgPj0gMHg4MDAwMDAwNyAmJgorCSAgICAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgOCkpKQorCQljcHVfaW5mby0+Y2FwcyB8PSBDUFVQT1dFUl9DQVBfSU5WX1RTQzsKKworCS8qIEFwZXJmL01wZXJmIHJlZ2lzdGVycyBzdXBwb3J0ICovCisJaWYgKGNwdWlkX2xldmVsID49IDYgJiYgKGNwdWlkX2VjeCg2KSAmIDB4MSkpCisJCWNwdV9pbmZvLT5jYXBzIHw9IENQVVBPV0VSX0NBUF9BUEVSRjsKKworCS8qIEFNRCBCb29zdCBzdGF0ZSBlbmFibGUvZGlzYWJsZSByZWdpc3RlciAqLworCWlmIChjcHVfaW5mby0+dmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSB7CisJCWlmIChleHRfY3B1aWRfbGV2ZWwgPj0gMHg4MDAwMDAwNyAmJgorCQkgICAgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDkpKSkKKwkJCWNwdV9pbmZvLT5jYXBzIHw9IENQVVBPV0VSX0NBUF9BTURfQ0JQOworCX0KKworCS8qIEludGVsJ3MgcGVyZi1iaWFzIE1TUiBzdXBwb3J0ICovCisJaWYgKGNwdV9pbmZvLT52ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgeworCQlpZiAoY3B1aWRfbGV2ZWwgPj0gNiAmJiAoY3B1aWRfZWN4KDYpICYgKDEgPDwgMykpKQorCQkJY3B1X2luZm8tPmNhcHMgfD0gQ1BVUE9XRVJfQ0FQX1BFUkZfQklBUzsKKwl9CisKKwkvKglwcmludGYoIklEOiAldSAtIEV4dGlkOiAweCV4IC0gQ2FwczogMHglbGx4XG4iLAorCQljcHVpZF9sZXZlbCwgZXh0X2NwdWlkX2xldmVsLCBjcHVfaW5mby0+Y2Fwcyk7CisJKi8KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9oZWxwZXJzLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2hlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg3ZGFkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9oZWxwZXJzLmgKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIE1pc2NlbGxhbmVvdXMgaGVscGVycyB3aGljaCBkbyBub3QgZml0IG9yIGFyZSB3b3J0aAorICogdG8gcHV0IGludG8gc2VwYXJhdGUgaGVhZGVycworICovCisKKyNpZm5kZWYgX19DUFVQT1dFUlVUSUxTX0hFTFBFUlNfXworI2RlZmluZSBfX0NQVVBPV0VSVVRJTFNfSEVMUEVSU19fCisKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2JpdG1hc2suaCIKKworLyogSW50ZXJuYXRpb25hbGl6YXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgXyhTdHJpbmcpIGdldHRleHQoU3RyaW5nKQorI2lmbmRlZiBnZXR0ZXh0X25vb3AKKyNkZWZpbmUgZ2V0dGV4dF9ub29wKFN0cmluZykgU3RyaW5nCisjZW5kaWYKKyNkZWZpbmUgTl8oU3RyaW5nKSBnZXR0ZXh0X25vb3AgKFN0cmluZykKKy8qIEludGVybmF0aW9uYWxpemF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiBpbnQgcnVuX2FzX3Jvb3Q7CitleHRlcm4gc3RydWN0IGJpdG1hc2sgKmNwdXNfY2hvc2VuOworCisvKiBHbG9iYWwgdmVyYm9zZSAoLWQpIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBkZWZpbmUgREVCVUcgdmlhIGdsb2JhbCBNYWtlZmlsZSB2YXJpYWJsZQorICogRGVidWcgb3V0cHV0IGlzIHNlbnQgdG8gc3RkZXJyLCBkbzoKKyAqIGNwdXBvd2VyIG1vbml0b3IgMj4vdG1wL2RlYnVnCisgKiB0byBzcGxpdCBkZWJ1ZyBvdXRwdXQgYXdheSBmcm9tIG5vcm1hbCBvdXRwdXQKKyovCisjaWZkZWYgREVCVUcKK2V4dGVybiBpbnQgYmVfdmVyYm9zZTsKKworI2RlZmluZSBkcHJpbnQoZm10LCAuLi4pIHsJCQkJCVwKKwkJaWYgKGJlX3ZlcmJvc2UpIHsJCQkJXAorCQkJZnByaW50ZihzdGRlcnIsICIlczogIiBmbXQsCQlcCisJCQkJX19GVU5DVElPTl9fLCAjI19fVkFfQVJHU19fKTsJXAorCQl9CQkJCQkJXAorCX0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZHByaW50KGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7IH0JIAorI2VuZGlmCitleHRlcm4gaW50IGJlX3ZlcmJvc2U7CisvKiBHbG9iYWwgdmVyYm9zZSAoLXYpIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogY3B1aWQgYW5kIGNwdWluZm8gaGVscGVycyAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCitlbnVtIGNwdXBvd2VyX2NwdV92ZW5kb3Ige1g4Nl9WRU5ET1JfVU5LTk9XTiA9IDAsIFg4Nl9WRU5ET1JfSU5URUwsCisJCQkgIFg4Nl9WRU5ET1JfQU1ELCBYODZfVkVORE9SX01BWH07CisKKyNkZWZpbmUgQ1BVUE9XRVJfQ0FQX0lOVl9UU0MJMHgwMDAwMDAwMQorI2RlZmluZSBDUFVQT1dFUl9DQVBfQVBFUkYJMHgwMDAwMDAwMgorI2RlZmluZSBDUFVQT1dFUl9DQVBfQU1EX0NCUAkweDAwMDAwMDA0CisjZGVmaW5lIENQVVBPV0VSX0NBUF9QRVJGX0JJQVMJMHgwMDAwMDAwOAorCisjZGVmaW5lIE1BWF9IV19QU1RBVEVTIDEwCisKK3N0cnVjdCBjcHVwb3dlcl9jcHVfaW5mbyB7CisJZW51bSBjcHVwb3dlcl9jcHVfdmVuZG9yIHZlbmRvcjsKKwl1bnNpZ25lZCBpbnQgZmFtaWx5OworCXVuc2lnbmVkIGludCBtb2RlbDsKKwl1bnNpZ25lZCBpbnQgc3RlcHBpbmc7CisJLyogQ1BVIGNhcGFiaWxpdGllcyByZWFkIG91dCBmcm9tIGNwdWlkICovCisJdW5zaWduZWQgbG9uZyBsb25nIGNhcHM7Cit9OworCisvKiBnZXRfY3B1X2luZm8KKyAqCisgKiBFeHRyYWN0IENQVSB2ZW5kb3IsIGZhbWlseSwgbW9kZWwsIHN0ZXBwaW5nIGluZm8gZnJvbSAvcHJvYy9jcHVpbmZvCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2IGVycm9yIGNvZGUKKyAqIE9ubHkgdXNlZCBvbiB4ODYsIGJlbG93IGdsb2JhbCdzIHN0cnVjdCB2YWx1ZXMgYXJlIHplcm8vdW5rbm93biBvbgorICogb3RoZXIgYXJjaHMKKyAqLworZXh0ZXJuIGludCBnZXRfY3B1X2luZm8odW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNwdXBvd2VyX2NwdV9pbmZvICpjcHVfaW5mbyk7CitleHRlcm4gc3RydWN0IGNwdXBvd2VyX2NwdV9pbmZvIGNwdXBvd2VyX2NwdV9pbmZvOworLyogY3B1aWQgYW5kIGNwdWluZm8gaGVscGVycyAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyogQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeSBwYXJzaW5nICoqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBjcHVwb3dlcl90b3BvbG9neSB7CisJLyogQW1vdW50IG9mIENQVSBjb3JlcywgcGFja2FnZXMgYW5kIHRocmVhZHMgcGVyIGNvcmUgaW4gdGhlIHN5c3RlbSAqLworCXVuc2lnbmVkIGludCBjb3JlczsKKwl1bnNpZ25lZCBpbnQgcGtnczsKKwl1bnNpZ25lZCBpbnQgdGhyZWFkczsgLyogcGVyIGNvcmUgKi8KKworCS8qIEFycmF5IGdldHMgbWFsbG9jYXRlZCB3aXRoIGNvcmVzIGVudHJpZXMsIGhvbGRpbmcgcGVyIGNvcmUgaW5mbyAqLworCXN0cnVjdCB7CisJCWludCBwa2c7CisJCWludCBjb3JlOworCQlpbnQgY3B1OworCX0gKmNvcmVfaW5mbzsKK307CisKK2V4dGVybiBpbnQgZ2V0X2NwdV90b3BvbG9neShzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kgKmNwdV90b3ApOworZXh0ZXJuIHZvaWQgY3B1X3RvcG9sb2d5X3JlbGVhc2Uoc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5IGNwdV90b3ApOworLyogQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeSBwYXJzaW5nICoqKioqKioqKioqKioqKioqKi8KKworLyogWDg2IE9OTFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxwY2kvcGNpLmg+CisKKy8qIFJlYWQvV3JpdGUgbXNyICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gaW50IHJlYWRfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdmFsKTsKK2V4dGVybiBpbnQgd3JpdGVfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpOworCitleHRlcm4gaW50IG1zcl9pbnRlbF9zZXRfcGVyZl9iaWFzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCB2YWwpOworZXh0ZXJuIGludCBtc3JfaW50ZWxfZ2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIGludCBtc3JfaW50ZWxfaGFzX2Jvb3N0X3N1cHBvcnQodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaW50IG1zcl9pbnRlbF9ib29zdF9pc19hY3RpdmUodW5zaWduZWQgaW50IGNwdSk7CisKKy8qIFJlYWQvV3JpdGUgbXNyICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDSSBzdHVmZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIGludCBhbWRfcGNpX2dldF9udW1fYm9vc3Rfc3RhdGVzKGludCAqYWN0aXZlLCBpbnQgKnN0YXRlcyk7CitleHRlcm4gc3RydWN0IHBjaV9kZXYgKnBjaV9hY2NfaW5pdChzdHJ1Y3QgcGNpX2FjY2VzcyAqKnBhY2MsIGludCB2ZW5kb3JfaWQsCisJCQkJICAgIGludCAqZGV2X2lkcyk7CisKKy8qIFBDSSBzdHVmZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBTUQgSFcgcHN0YXRlIGRlY29kaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gaW50IGRlY29kZV9wc3RhdGVzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBjcHVfZmFtaWx5LAorCQkJICBpbnQgYm9vc3Rfc3RhdGVzLCB1bnNpZ25lZCBsb25nICpwc3RhdGVzLCBpbnQgKm5vKTsKKworLyogQU1EIEhXIHBzdGF0ZSBkZWNvZGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIGludCBjcHVmcmVxX2hhc19ib29zdF9zdXBwb3J0KHVuc2lnbmVkIGludCBjcHUsIGludCAqc3VwcG9ydCwKKwkJCQkgICAgIGludCAqYWN0aXZlLCBpbnQgKiBzdGF0ZXMpOworLyoKKyAqIENQVUlEIGZ1bmN0aW9ucyByZXR1cm5pbmcgYSBzaW5nbGUgZGF0dW0KKyAqLwordW5zaWduZWQgaW50IGNwdWlkX2VheCh1bnNpZ25lZCBpbnQgb3ApOwordW5zaWduZWQgaW50IGNwdWlkX2VieCh1bnNpZ25lZCBpbnQgb3ApOwordW5zaWduZWQgaW50IGNwdWlkX2VjeCh1bnNpZ25lZCBpbnQgb3ApOwordW5zaWduZWQgaW50IGNwdWlkX2VkeCh1bnNpZ25lZCBpbnQgb3ApOworCisvKiBjcHVpZCBhbmQgY3B1aW5mbyBoZWxwZXJzICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFg4NiBPTkxZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGRlY29kZV9wc3RhdGVzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBjcHVfZmFtaWx5LAorCQkJCSBpbnQgYm9vc3Rfc3RhdGVzLCB1bnNpZ25lZCBsb25nICpwc3RhdGVzLAorCQkJCSBpbnQgKm5vKQoreyByZXR1cm4gLTE7IH07CisKK3N0YXRpYyBpbmxpbmUgaW50IHJlYWRfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdmFsKQoreyByZXR1cm4gLTE7IH07CitzdGF0aWMgaW5saW5lIGludCB3cml0ZV9tc3IoaW50IGNwdSwgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKK3sgcmV0dXJuIC0xOyB9Oworc3RhdGljIGlubGluZSBpbnQgbXNyX2ludGVsX3NldF9wZXJmX2JpYXModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHZhbCkKK3sgcmV0dXJuIC0xOyB9Oworc3RhdGljIGlubGluZSBpbnQgbXNyX2ludGVsX2dldF9wZXJmX2JpYXModW5zaWduZWQgaW50IGNwdSkKK3sgcmV0dXJuIC0xOyB9OworCitzdGF0aWMgaW5saW5lIGludCBtc3JfaW50ZWxfaGFzX2Jvb3N0X3N1cHBvcnQodW5zaWduZWQgaW50IGNwdSkKK3sgcmV0dXJuIC0xOyB9Oworc3RhdGljIGlubGluZSBpbnQgbXNyX2ludGVsX2Jvb3N0X2lzX2FjdGl2ZSh1bnNpZ25lZCBpbnQgY3B1KQoreyByZXR1cm4gLTE7IH07CisKKy8qIFJlYWQvV3JpdGUgbXNyICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdWZyZXFfaGFzX2Jvb3N0X3N1cHBvcnQodW5zaWduZWQgaW50IGNwdSwgaW50ICpzdXBwb3J0LAorCQkJCQkgICAgaW50ICphY3RpdmUsIGludCAqIHN0YXRlcykKK3sgcmV0dXJuIC0xOyB9CisKKy8qIGNwdWlkIGFuZCBjcHVpbmZvIGhlbHBlcnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYXgodW5zaWduZWQgaW50IG9wKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWJ4KHVuc2lnbmVkIGludCBvcCkgeyByZXR1cm4gMDsgfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VjeCh1bnNpZ25lZCBpbnQgb3ApIHsgcmV0dXJuIDA7IH07CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWduZWQgaW50IG9wKSB7IHJldHVybiAwOyB9OworI2VuZGlmIC8qIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KKworI2VuZGlmIC8qIF9fQ1BVUE9XRVJVVElMU19IRUxQRVJTX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbWlzYy5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1NjZlOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbWlzYy5jCkBAIC0wLDAgKzEsMzQgQEAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworaW50IGNwdWZyZXFfaGFzX2Jvb3N0X3N1cHBvcnQodW5zaWduZWQgaW50IGNwdSwgaW50ICpzdXBwb3J0LCBpbnQgKmFjdGl2ZSwgaW50ICogc3RhdGVzKQoreworCXN0cnVjdCBjcHVwb3dlcl9jcHVfaW5mbyBjcHVfaW5mbzsKKwlpbnQgcmV0OworCisJKnN1cHBvcnQgPSAqYWN0aXZlID0gKnN0YXRlcyA9IDA7CisKKwlyZXQgPSBnZXRfY3B1X2luZm8oMCwgJmNwdV9pbmZvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfQU1EX0NCUCkgeworCQkqc3VwcG9ydCA9IDE7CisJCWFtZF9wY2lfZ2V0X251bV9ib29zdF9zdGF0ZXMoYWN0aXZlLCBzdGF0ZXMpOworCQlpZiAocmV0IDw9IDApCisJCQlyZXR1cm4gcmV0OworCQkqc3VwcG9ydCA9IDE7CisJfSBlbHNlIGlmIChjcHVwb3dlcl9jcHVfaW5mby52ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgeworCQlyZXQgPSBtc3JfaW50ZWxfaGFzX2Jvb3N0X3N1cHBvcnQoY3B1KTsKKwkJaWYgKHJldCA8PSAwKQorCQkJcmV0dXJuIHJldDsKKwkJKnN1cHBvcnQgPSByZXQ7CisJCXJldCA9IG1zcl9pbnRlbF9ib29zdF9pc19hY3RpdmUoY3B1KTsKKwkJaWYgKHJldCA8PSAwKQorCQkJcmV0dXJuIHJldDsKKwkJKmFjdGl2ZSA9IHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbXNyLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL21zci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZDQ4YmQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL21zci5jCkBAIC0wLDAgKzEsMTIyIEBACisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKKy8qIEludGVsIHNwZWNpZmljIE1TUnMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJCTB4MTk4CisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFUwkJMHgxYTAKKyNkZWZpbmUgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUwkweDFiMAorCisvKgorICogcmVhZF9tc3IKKyAqCisgKiBXaWxsIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUuCisgKiBQb3NzaWJsZSBlcnJubyB2YWx1ZXMgY291bGQgYmU6CisgKiBFRkFVTFQgLUlmIHRoZSByZWFkL3dyaXRlIGRpZCBub3QgZnVsbHkgY29tcGxldGUKKyAqIEVJTyAgICAtSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IE1TUnMKKyAqIEVOWElPICAtSWYgdGhlIENQVSBkb2VzIG5vdCBleGlzdAorICovCisKK2ludCByZWFkX21zcihpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCkKK3sKKwlpbnQgZmQ7CisJY2hhciBtc3JfZmlsZV9uYW1lWzY0XTsKKworCXNwcmludGYobXNyX2ZpbGVfbmFtZSwgIi9kZXYvY3B1LyVkL21zciIsIGNwdSk7CisJZmQgPSBvcGVuKG1zcl9maWxlX25hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGxzZWVrKGZkLCBpZHgsIFNFRUtfQ1VSKSA9PSAtMSkKKwkJZ290byBlcnI7CisJaWYgKHJlYWQoZmQsIHZhbCwgc2l6ZW9mICp2YWwpICE9IHNpemVvZiAqdmFsKQorCQlnb3RvIGVycjsKKwljbG9zZShmZCk7CisJcmV0dXJuIDA7CisgZXJyOgorCWNsb3NlKGZkKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiB3cml0ZV9tc3IKKyAqCisgKiBXaWxsIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUuCisgKiBQb3NzaWJsZSBlcnJubyB2YWx1ZXMgY291bGQgYmU6CisgKiBFRkFVTFQgLUlmIHRoZSByZWFkL3dyaXRlIGRpZCBub3QgZnVsbHkgY29tcGxldGUKKyAqIEVJTyAgICAtSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IE1TUnMKKyAqIEVOWElPICAtSWYgdGhlIENQVSBkb2VzIG5vdCBleGlzdAorICovCitpbnQgd3JpdGVfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCit7CisJaW50IGZkOworCWNoYXIgbXNyX2ZpbGVfbmFtZVs2NF07CisKKwlzcHJpbnRmKG1zcl9maWxlX25hbWUsICIvZGV2L2NwdS8lZC9tc3IiLCBjcHUpOworCWZkID0gb3Blbihtc3JfZmlsZV9uYW1lLCBPX1dST05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChsc2VlayhmZCwgaWR4LCBTRUVLX0NVUikgPT0gLTEpCisJCWdvdG8gZXJyOworCWlmICh3cml0ZShmZCwgJnZhbCwgc2l6ZW9mIHZhbCkgIT0gc2l6ZW9mIHZhbCkKKwkJZ290byBlcnI7CisJY2xvc2UoZmQpOworCXJldHVybiAwOworIGVycjoKKwljbG9zZShmZCk7CisJcmV0dXJuIC0xOworfQorCitpbnQgbXNyX2ludGVsX2hhc19ib29zdF9zdXBwb3J0KHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIG1pc2NfZW5hYmxlczsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVhZF9tc3IoY3B1LCBNU1JfSUEzMl9NSVNDX0VOQUJMRVMsICZtaXNjX2VuYWJsZXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIChtaXNjX2VuYWJsZXMgPj4gMzgpICYgMHgxOworfQorCitpbnQgbXNyX2ludGVsX2Jvb3N0X2lzX2FjdGl2ZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBwZXJmX3N0YXR1czsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVhZF9tc3IoY3B1LCBNU1JfSUEzMl9QRVJGX1NUQVRVUywgJnBlcmZfc3RhdHVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiAocGVyZl9zdGF0dXMgPj4gMzIpICYgMHgxOworfQorCitpbnQgbXNyX2ludGVsX2dldF9wZXJmX2JpYXModW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoIShjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX1BFUkZfQklBUykpCisJCXJldHVybiAtMTsKKworCXJldCA9IHJlYWRfbXNyKGNwdSwgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUywgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gdmFsOworfQorCitpbnQgbXNyX2ludGVsX3NldF9wZXJmX2JpYXModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9QRVJGX0JJQVMpKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSB3cml0ZV9tc3IoY3B1LCBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvcGNpLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkY2M5MzgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3BjaS5jCkBAIC0wLDAgKzEsNDQgQEAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxoZWxwZXJzL2hlbHBlcnMuaD4KKworLyoKKyAqIHBjaV9hY2NfaW5pdAorICoKKyAqIFBDSSBhY2Nlc3MgaGVscGVyIGZ1bmN0aW9uIGRlcGVuZGluZyBvbiBsaWJwY2kKKyAqCisgKiAqKnBhY2MgOiBpZiBhIHZhbGlkIHBjaV9kZXYgaXMgcmV0dXJuZWQKKyAqICAgICAgICAgKnBhY2MgbXVzdCBiZSBwYXNzZWQgdG8gcGNpX2FjY19jbGVhbnVwIHRvIGZyZWUgaXQKKyAqCisgKiB2ZW5kb3JfaWQgOiB0aGUgcGNpIHZlbmRvciBpZCBtYXRjaGluZyB0aGUgcGNpIGRldmljZSB0byBhY2Nlc3MKKyAqIGRldl9pZHMgOiAgIGRldmljZSBpZHMgbWF0Y2hpbmcgdGhlIHBjaSBkZXZpY2UgdG8gYWNjZXNzCisgKgorICogUmV0dXJucyA6CisgKiBzdHJ1Y3QgcGNpX2RldiB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIHBjaV97cmVhZCx3cml0ZX1fKiBmdW5jdGlvbnMKKyAqICAgICAgICAgICAgICAgIHRvIGFjY2VzcyB0aGUgUENJIGNvbmZpZyBzcGFjZSBvZiBtYXRjaGluZyBwY2kgZGV2aWNlcworICovCitzdHJ1Y3QgcGNpX2RldiAqcGNpX2FjY19pbml0KHN0cnVjdCBwY2lfYWNjZXNzICoqcGFjYywgaW50IHZlbmRvcl9pZCwKKwkJCQkgICAgaW50ICpkZXZfaWRzKQoreworCXN0cnVjdCBwY2lfZmlsdGVyIGZpbHRlcl9uYl9saW5rID0geyAtMSwgLTEsIC0xLCAtMSwgdmVuZG9yX2lkLCAwfTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2aWNlOworCXVuc2lnbmVkIGludCBpOworCisJKnBhY2MgPSBwY2lfYWxsb2MoKTsKKwlpZiAoKnBhY2MgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwY2lfaW5pdCgqcGFjYyk7CisJcGNpX3NjYW5fYnVzKCpwYWNjKTsKKworCWZvciAoaSA9IDA7IGRldl9pZHNbaV0gIT0gMDsgaSsrKSB7CisJCWZpbHRlcl9uYl9saW5rLmRldmljZSA9IGRldl9pZHNbaV07CisJCWZvciAoZGV2aWNlPSgqcGFjYyktPmRldmljZXM7IGRldmljZTsgZGV2aWNlID0gZGV2aWNlLT5uZXh0KSB7CisJCQlpZiAocGNpX2ZpbHRlcl9tYXRjaCgmZmlsdGVyX25iX2xpbmssIGRldmljZSkpCisJCQkJcmV0dXJuIGRldmljZTsKKwkJfQorCX0KKwlwY2lfY2xlYW51cCgqcGFjYyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9zeXNmcy5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9zeXNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNTM0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmMKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiAgKEMpIDIwMDQtMjAwOSAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKiAgKEMpIDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Abm92ZWxsLmNvbT4gTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiaGVscGVycy9zeXNmcy5oIgorCit1bnNpZ25lZCBpbnQgc3lzZnNfcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKwlpbnQgZmQ7CisJc2l6ZV90IG51bXJlYWQ7CisKKwlpZiAoICggZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKSApID09IC0xICkKKwkJcmV0dXJuIDA7CisKKwludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKKwlpZiAoIG51bXJlYWQgPCAxICkKKwl7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnVmW251bXJlYWRdID0gJ1wwJzsKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gbnVtcmVhZDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzeXNmc193cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICBjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IGxlbikKK3sKKwlpbnQgZmQ7CisJc2l6ZV90IG51bXdyaXRlOworCisJaWYgKCAoIGZkID0gb3BlbihwYXRoLCBPX1dST05MWSkgKSA9PSAtMSApCisJCXJldHVybiAwOworCisJbnVtd3JpdGUgPSB3cml0ZShmZCwgdmFsdWUsIGxlbik7CisJaWYgKCBudW13cml0ZSA8IDEgKQorCXsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisJY2xvc2UoZmQpOworCXJldHVybiBudW13cml0ZTsKK30KKworLyogQ1BVaWRsZSBpZGxlc3RhdGUgc3BlY2lmaWMgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9jcHVpZGxlLyBhY2Nlc3MgKi8KKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiB0byByZWFkIGZpbGUgZnJvbSAvc3lzIGludG8gZ2l2ZW4gYnVmZmVyCisgKiBmbmFtZSBpcyBhIHJlbGF0aXZlIHBhdGggdW5kZXIgImNwdVgvY3B1aWRsZS9zdGF0ZVgvIiBkaXIKKyAqIGNzdGF0ZXMgc3RhcnRpbmcgd2l0aCAwLCBDMCBpcyBub3QgY291bnRlZCBhcyBjc3RhdGUuCisgKiBUaGlzIG1lYW5zIGlmIHlvdSB3YW50IEMxIGluZm8sIHBhc3MgMCBhcyBpZGxlc3RhdGUgcGFyYW0KKyAqLwordW5zaWduZWQgaW50IHN5c2ZzX2lkbGVzdGF0ZV9yZWFkX2ZpbGUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqZm5hbWUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCWludCBmZDsKKwlzaXplX3QgbnVtcmVhZDsKKworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgUEFUSF9UT19DUFUgImNwdSV1L2NwdWlkbGUvc3RhdGUldS8lcyIsCisJCSBjcHUsIGlkbGVzdGF0ZSwgZm5hbWUpOworCisJaWYgKCAoIGZkID0gb3BlbihwYXRoLCBPX1JET05MWSkgKSA9PSAtMSApCisJCXJldHVybiAwOworCisJbnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7CisJaWYgKCBudW1yZWFkIDwgMSApCisJeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKworCWJ1ZltudW1yZWFkXSA9ICdcMCc7CisJY2xvc2UoZmQpOworCisJcmV0dXJuIG51bXJlYWQ7Cit9CisKKy8qIHJlYWQgYWNjZXNzIHRvIGZpbGVzIHdoaWNoIGNvbnRhaW4gb25lIG51bWVyaWMgdmFsdWUgKi8KKworZW51bSBpZGxlc3RhdGVfdmFsdWUgeworCUlETEVTVEFURV9VU0FHRSwKKwlJRExFU1RBVEVfUE9XRVIsCisJSURMRVNUQVRFX0xBVEVOQ1ksCisJSURMRVNUQVRFX1RJTUUsCisJTUFYX0lETEVTVEFURV9WQUxVRV9GSUxFUworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmlkbGVzdGF0ZV92YWx1ZV9maWxlc1tNQVhfSURMRVNUQVRFX1ZBTFVFX0ZJTEVTXSA9IHsKKwlbSURMRVNUQVRFX1VTQUdFXSA9ICJ1c2FnZSIsCisJW0lETEVTVEFURV9QT1dFUl0gPSAicG93ZXIiLAorCVtJRExFU1RBVEVfTEFURU5DWV0gPSAibGF0ZW5jeSIsCisJW0lETEVTVEFURV9USU1FXSAgPSAidGltZSIsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3ZhbHVlKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCQkgICAgIHVuc2lnbmVkIGludCBpZGxlc3RhdGUsCisJCQkJCQkgICAgIGVudW0gaWRsZXN0YXRlX3ZhbHVlIHdoaWNoKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgKmVuZHA7CisKKwlpZiAoIHdoaWNoID49IE1BWF9JRExFU1RBVEVfVkFMVUVfRklMRVMgKQorCQlyZXR1cm4gMDsKKworCWlmICggKCBsZW4gPSBzeXNmc19pZGxlc3RhdGVfcmVhZF9maWxlKGNwdSwgaWRsZXN0YXRlLAorCQkJCQkgICAgaWRsZXN0YXRlX3ZhbHVlX2ZpbGVzW3doaWNoXSwKKwkJCQkJICAgIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKSkpID09IDAgKQorCXsKKwkJcmV0dXJuIDA7CisJfQorCisJdmFsdWUgPSBzdHJ0b3VsbChsaW5lYnVmLCAmZW5kcCwgMCk7CisKKwlpZiAoIGVuZHAgPT0gbGluZWJ1ZiB8fCBlcnJubyA9PSBFUkFOR0UgKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB2YWx1ZTsKK30KKworLyogcmVhZCBhY2Nlc3MgdG8gZmlsZXMgd2hpY2ggY29udGFpbiBvbmUgc3RyaW5nICovCisKK2VudW0gaWRsZXN0YXRlX3N0cmluZyB7CisJSURMRVNUQVRFX0RFU0MsCisJSURMRVNUQVRFX05BTUUsCisJTUFYX0lETEVTVEFURV9TVFJJTkdfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICppZGxlc3RhdGVfc3RyaW5nX2ZpbGVzW01BWF9JRExFU1RBVEVfU1RSSU5HX0ZJTEVTXSA9IHsKKwlbSURMRVNUQVRFX0RFU0NdID0gImRlc2MiLAorCVtJRExFU1RBVEVfTkFNRV0gPSAibmFtZSIsCit9OworCisKK3N0YXRpYyBjaGFyICogc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfc3RyaW5nKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCSAgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSwKKwkJCQkJICBlbnVtIGlkbGVzdGF0ZV9zdHJpbmcgd2hpY2gpCit7CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqcmVzdWx0OworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAod2hpY2ggPj0gTUFYX0lETEVTVEFURV9TVFJJTkdfRklMRVMpCisJCXJldHVybiBOVUxMOworCisJaWYgKCAoIGxlbiA9IHN5c2ZzX2lkbGVzdGF0ZV9yZWFkX2ZpbGUoY3B1LCBpZGxlc3RhdGUsCisJCQkJCSAgICBpZGxlc3RhdGVfc3RyaW5nX2ZpbGVzW3doaWNoXSwKKwkJCQkJICAgIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKSkpID09IDAgKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICggKCByZXN1bHQgPSBzdHJkdXAobGluZWJ1ZikgKSA9PSBOVUxMICkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPT0gJ1xuJykKKwkJcmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSkKK3sKKwlyZXR1cm4gc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfdmFsdWUoY3B1LCBpZGxlc3RhdGUsIElETEVTVEFURV9MQVRFTkNZKTsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX3VzYWdlKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3ZhbHVlKGNwdSwgaWRsZXN0YXRlLCBJRExFU1RBVEVfVVNBR0UpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgc3lzZnNfZ2V0X2lkbGVzdGF0ZV90aW1lKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3ZhbHVlKGNwdSwgaWRsZXN0YXRlLCBJRExFU1RBVEVfVElNRSk7Cit9CisKK2NoYXIgKiBzeXNmc19nZXRfaWRsZXN0YXRlX25hbWUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSkKK3sKKwlyZXR1cm4gc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfc3RyaW5nKGNwdSwgaWRsZXN0YXRlLCBJRExFU1RBVEVfTkFNRSk7Cit9CisKK2NoYXIgKiBzeXNmc19nZXRfaWRsZXN0YXRlX2Rlc2ModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSkKK3sKKwlyZXR1cm4gc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfc3RyaW5nKGNwdSwgaWRsZXN0YXRlLCBJRExFU1RBVEVfREVTQyk7Cit9CisKKy8qCisgKiBSZXR1cm5zIG51bWJlciBvZiBzdXBwb3J0ZWQgQy1zdGF0ZXMgb2YgQ1BVIGNvcmUgY3B1CisgKiBOZWdhdGl2IGluIGVycm9yIGNhc2UKKyAqIFplcm8gaWYgY3B1aWRsZSBkb2VzIG5vdCBleHBvcnQgYW55IEMtc3RhdGVzCisgKi8KK2ludCBzeXNmc19nZXRfaWRsZXN0YXRlX2NvdW50KHVuc2lnbmVkIGludCBjcHUpCit7CisJY2hhciBmaWxlW1NZU0ZTX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCWludCBpZGxlc3RhdGVzID0gMTsKKworCisJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVICJjcHVpZGxlIik7CisJaWYgKCBzdGF0KGZpbGUsICZzdGF0YnVmKSAhPSAwIHx8ICFTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpCisJCXJldHVybiAtRU5PREVWOworCisJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVpZGxlL3N0YXRlMCIsIGNwdSk7CisJaWYgKCBzdGF0KGZpbGUsICZzdGF0YnVmKSAhPSAwIHx8ICFTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpCisJCXJldHVybiAwOworCisJd2hpbGUoc3RhdChmaWxlLCAmc3RhdGJ1ZikgPT0gMCAmJiBTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpIHsKKwkJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVCisJCQkgImNwdSV1L2NwdWlkbGUvc3RhdGUlZCIsIGNwdSwgaWRsZXN0YXRlcyk7CisJCWlkbGVzdGF0ZXMrKzsKKwl9CisJaWRsZXN0YXRlcy0tOworCXJldHVybiBpZGxlc3RhdGVzOworfQorCisvKiBDUFVpZGxlIGdlbmVyYWwgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1aWRsZS8gc3lzZnMgYWNjZXNzICoqKioqKioqLworCisvKgorICogaGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgZmlsZSBmcm9tIC9zeXMgaW50byBnaXZlbiBidWZmZXIKKyAqIGZuYW1lIGlzIGEgcmVsYXRpdmUgcGF0aCB1bmRlciAiY3B1L2NwdWlkbGUvIiBkaXIKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBzeXNmc19jcHVpZGxlX3JlYWRfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgY2hhciAqYnVmLAorCQkJCQkgICAgc2l6ZV90IGJ1ZmxlbikKK3sKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAiY3B1aWRsZS8lcyIsIGZuYW1lKTsKKworCXJldHVybiBzeXNmc19yZWFkX2ZpbGUocGF0aCwgYnVmLCBidWZsZW4pOworfQorCisKKworLyogcmVhZCBhY2Nlc3MgdG8gZmlsZXMgd2hpY2ggY29udGFpbiBvbmUgc3RyaW5nICovCisKK2VudW0gY3B1aWRsZV9zdHJpbmcgeworCUNQVUlETEVfR09WRVJOT1IsCisJQ1BVSURMRV9HT1ZFUk5PUl9STywKKwlDUFVJRExFX0RSSVZFUiwKKwlNQVhfQ1BVSURMRV9TVFJJTkdfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVpZGxlX3N0cmluZ19maWxlc1tNQVhfQ1BVSURMRV9TVFJJTkdfRklMRVNdID0geworCVtDUFVJRExFX0dPVkVSTk9SXQk9ICJjdXJyZW50X2dvdmVybm9yIiwKKwlbQ1BVSURMRV9HT1ZFUk5PUl9ST10JPSAiY3VycmVudF9nb3Zlcm5vcl9ybyIsCisJW0NQVUlETEVfRFJJVkVSXQk9ICJjdXJyZW50X2RyaXZlciIsCit9OworCisKK3N0YXRpYyBjaGFyICogc3lzZnNfY3B1aWRsZV9nZXRfb25lX3N0cmluZyhlbnVtIGNwdWlkbGVfc3RyaW5nIHdoaWNoKQoreworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgKnJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKHdoaWNoID49IE1BWF9DUFVJRExFX1NUUklOR19GSUxFUykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoICggbGVuID0gc3lzZnNfY3B1aWRsZV9yZWFkX2ZpbGUoY3B1aWRsZV9zdHJpbmdfZmlsZXNbd2hpY2hdLAorCQkJCQkgICAgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKSkgPT0gMCApCisJCXJldHVybiBOVUxMOworCisJaWYgKCAoIHJlc3VsdCA9IHN0cmR1cChsaW5lYnVmKSApID09IE5VTEwgKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChyZXN1bHRbc3RybGVuKHJlc3VsdCkgLSAxXSA9PSAnXG4nKQorCQlyZXN1bHRbc3RybGVuKHJlc3VsdCkgLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitjaGFyICogc3lzZnNfZ2V0X2NwdWlkbGVfZ292ZXJub3Iodm9pZCkKK3sKKwljaGFyICp0bXAgPSBzeXNmc19jcHVpZGxlX2dldF9vbmVfc3RyaW5nKENQVUlETEVfR09WRVJOT1JfUk8pOworCWlmICghdG1wKQorCQlyZXR1cm4gc3lzZnNfY3B1aWRsZV9nZXRfb25lX3N0cmluZyhDUFVJRExFX0dPVkVSTk9SKTsKKwllbHNlCisJCXJldHVybiB0bXA7Cit9CisKK2NoYXIgKiBzeXNmc19nZXRfY3B1aWRsZV9kcml2ZXIodm9pZCkKK3sKKwlyZXR1cm4gc3lzZnNfY3B1aWRsZV9nZXRfb25lX3N0cmluZyhDUFVJRExFX0RSSVZFUik7Cit9CisvKiBDUFVpZGxlIGlkbGVzdGF0ZSBzcGVjaWZpYyAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL2NwdWlkbGUvIGFjY2VzcyAqLworCisvKgorICogR2V0IHNjaGVkX21jIG9yIHNjaGVkX3NtdCBzZXR0aW5ncworICogUGFzcyAibWMiIG9yICJzbXQiIGFzIGFyZ3VtZW50CisgKgorICogUmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCisgKi8KK2ludCBzeXNmc19nZXRfc2NoZWQoY29uc3QgY2hhciogc210X21jKQoreworIAl1bnNpZ25lZCBsb25nIHZhbHVlOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgKmVuZHA7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKworCWlmIChzdHJjbXAoIm1jIiwgc210X21jKSAmJiBzdHJjbXAoInNtdCIsIHNtdF9tYykpCisJCXJldHVybiAtRUlOVkFMOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAic2NoZWRfJXNfcG93ZXJfc2F2aW5ncyIsIHNtdF9tYyk7CisJaWYgKHN5c2ZzX3JlYWRfZmlsZShwYXRoLCBsaW5lYnVmLCBNQVhfTElORV9MRU4pID09IDAgKQorCQlyZXR1cm4gLTE7CisJdmFsdWUgPSBzdHJ0b3VsKGxpbmVidWYsICZlbmRwLCAwKTsKKwlpZiAoIGVuZHAgPT0gbGluZWJ1ZiB8fCBlcnJubyA9PSBFUkFOR0UgKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHZhbHVlOworfQorCisvKgorICogR2V0IHNjaGVkX21jIG9yIHNjaGVkX3NtdCBzZXR0aW5ncworICogUGFzcyAibWMiIG9yICJzbXQiIGFzIGFyZ3VtZW50CisgKgorICogUmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCisgKi8KK2ludCBzeXNmc19zZXRfc2NoZWQoY29uc3QgY2hhciogc210X21jLCBpbnQgdmFsKQoreworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKworCWlmIChzdHJjbXAoIm1jIiwgc210X21jKSAmJiBzdHJjbXAoInNtdCIsIHNtdF9tYykpCisJCXJldHVybiAtRUlOVkFMOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAic2NoZWRfJXNfcG93ZXJfc2F2aW5ncyIsIHNtdF9tYyk7CisJc3ByaW50ZihsaW5lYnVmLCAiJWQiLCB2YWwpOworCisJaWYgKCBzdGF0KHBhdGgsICZzdGF0YnVmKSAhPSAwICkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoc3lzZnNfd3JpdGVfZmlsZShwYXRoLCBsaW5lYnVmLCBNQVhfTElORV9MRU4pID09IDAgKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwMmQyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fQ1BVUE9XRVJfSEVMUEVSU19TWVNGU19IX18KKyNkZWZpbmUgX19DUFVQT1dFUl9IRUxQRVJTX1NZU0ZTX0hfXworCisjZGVmaW5lIFBBVEhfVE9fQ1BVICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS8iCisjZGVmaW5lIE1BWF9MSU5FX0xFTiAyNTUKKyNkZWZpbmUgU1lTRlNfUEFUSF9NQVggMjU1CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzZnNfcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9pZGxlc3RhdGVfbGF0ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9pZGxlc3RhdGVfdXNhZ2UodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKTsKK2V4dGVybiBjaGFyICogc3lzZnNfZ2V0X2lkbGVzdGF0ZV9uYW1lKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpOworZXh0ZXJuIGNoYXIgKiBzeXNmc19nZXRfaWRsZXN0YXRlX2Rlc2ModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7CitleHRlcm4gaW50IHN5c2ZzX2dldF9pZGxlc3RhdGVfY291bnQodW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiBjaGFyICogc3lzZnNfZ2V0X2NwdWlkbGVfZ292ZXJub3Iodm9pZCk7CitleHRlcm4gY2hhciAqIHN5c2ZzX2dldF9jcHVpZGxlX2RyaXZlcih2b2lkKTsKKworZXh0ZXJuIGludCBzeXNmc19nZXRfc2NoZWQoY29uc3QgY2hhciogc210X21jKTsKK2V4dGVybiBpbnQgc3lzZnNfc2V0X3NjaGVkKGNvbnN0IGNoYXIqIHNtdF9tYywgaW50IHZhbCk7CisKKyNlbmRpZiAvKiBfX0NQVVBPV0VSX0hFTFBFUlNfU1lTRlNfSF9fICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3RvcG9sb2d5LmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3RvcG9sb2d5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkODQyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvdG9wb2xvZ3kuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogVG9EbzogTmVlZHMgdG8gYmUgZG9uZSBtb3JlIHByb3Blcmx5IGZvciBBTUQvSW50ZWwgc3BlY2lmaWNzCisgKi8KKworLyogSGVscGVyIHN0cnVjdCBmb3IgcXNvcnQsIG11c3QgYmUgaW4gc3luYyB3aXRoIGNwdXBvd2VyX3RvcG9sb2d5LmNwdV9pbmZvICovCisvKiBCZSBjYXJlZnVsOiBOZWVkIHRvIHBhc3MgdW5zaWduZWQgdG8gdGhlIHNvcnQsIHNvIHRoYXQgb2ZmbGluZWQgY29yZXMgYXJlCisgICBpbiB0aGUgZW5kLCBidXQgZG91YmxlIGNoZWNrIGZvciAtMSBmb3Igb2ZmbGluZWQgY3B1cyBhdCBvdGhlciBwbGFjZXMgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8aGVscGVycy9oZWxwZXJzLmg+CisjaW5jbHVkZSA8aGVscGVycy9zeXNmcy5oPgorCisvKiByZXR1cm5zIC0xIG9uIGZhaWx1cmUsIDAgb24gc3VjY2VzcyAqLworaW50IHN5c2ZzX3RvcG9sb2d5X3JlYWRfZmlsZSh1bnNpZ25lZCBpbnQgY3B1LCBjb25zdCBjaGFyICpmbmFtZSkKK3sKKyAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICplbmRwOworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHUldS90b3BvbG9neS8lcyIsCisJCQkgY3B1LCBmbmFtZSk7CisJaWYgKHN5c2ZzX3JlYWRfZmlsZShwYXRoLCBsaW5lYnVmLCBNQVhfTElORV9MRU4pID09IDAgKQorCQlyZXR1cm4gLTE7CisJdmFsdWUgPSBzdHJ0b3VsKGxpbmVidWYsICZlbmRwLCAwKTsKKwlpZiAoIGVuZHAgPT0gbGluZWJ1ZiB8fCBlcnJubyA9PSBFUkFOR0UgKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHZhbHVlOworfQorCitzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgcGtnOworCXVuc2lnbmVkIGludCB0aHJlYWQ7CisJdW5zaWduZWQgaW50IGNwdTsKK307CisKK3N0YXRpYyBpbnQgX19jb21wYXJlKGNvbnN0IHZvaWQgKnQxLCBjb25zdCB2b2lkICp0MikKK3sKKwlzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvICp0b3AxID0gKHN0cnVjdCBjcHVpZF9jb3JlX2luZm8gKil0MTsKKwlzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvICp0b3AyID0gKHN0cnVjdCBjcHVpZF9jb3JlX2luZm8gKil0MjsKKwlpZiAodG9wMS0+cGtnIDwgdG9wMi0+cGtnKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAodG9wMS0+cGtnID4gdG9wMi0+cGtnKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmICh0b3AxLT50aHJlYWQgPCB0b3AyLT50aHJlYWQpCisJCXJldHVybiAtMTsKKwllbHNlIGlmICh0b3AxLT50aHJlYWQgPiB0b3AyLT50aHJlYWQpCisJCXJldHVybiAxOworCWVsc2UgaWYgKHRvcDEtPmNwdSA8IHRvcDItPmNwdSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKHRvcDEtPmNwdSA+IHRvcDItPmNwdSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybnMgYW1vdW50IG9mIGNwdXMsIG5lZ2F0aXZlIG9uIGVycm9yLCBjcHVfdG9wIG11c3QgYmUKKyAqIHBhc3NlZCB0byBjcHVfdG9wb2xvZ3lfcmVsZWFzZSB0byBmcmVlIHJlc291cmNlcworICoKKyAqIEFycmF5IGlzIHNvcnRlZCBhZnRlciAtPnBrZywgLT5jb3JlLCB0aGVuIC0+Y3B1CisgKi8KK2ludCBnZXRfY3B1X3RvcG9sb2d5KHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSAqY3B1X3RvcCkKK3sKKwlpbnQgY3B1LCBjcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfQ09ORik7CisKKwljcHVfdG9wLT5jb3JlX2luZm8gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSkgKiBjcHVzKTsKKwlpZiAoY3B1X3RvcC0+Y29yZV9pbmZvID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWNwdV90b3AtPnBrZ3MgPSBjcHVfdG9wLT5jb3JlcyA9IDA7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVzOyBjcHUrKykgeworCQljcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5wa2cgPQorCQkJc3lzZnNfdG9wb2xvZ3lfcmVhZF9maWxlKGNwdSwgInBoeXNpY2FsX3BhY2thZ2VfaWQiKTsKKwkJaWYgKChpbnQpY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0ucGtnICE9IC0xICYmCisJCSAgICBjcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5wa2cgPiBjcHVfdG9wLT5wa2dzKQorCQkJY3B1X3RvcC0+cGtncyA9IGNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLnBrZzsKKwkJY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0uY29yZSA9CisJCQlzeXNmc190b3BvbG9neV9yZWFkX2ZpbGUoY3B1LCAiY29yZV9pZCIpOworCQljcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5jcHUgPSBjcHU7CisJfQorCWNwdV90b3AtPnBrZ3MrKzsKKworCXFzb3J0KGNwdV90b3AtPmNvcmVfaW5mbywgY3B1cywgc2l6ZW9mKHN0cnVjdCBjcHVpZF9jb3JlX2luZm8pLAorCSAgICAgIF9fY29tcGFyZSk7CisKKwkvKiBJbnRlbCdzIGNvcmVzIGNvdW50IGlzIG5vdCBjb25zZWN1dGl2ZWx5IG51bWJlcmVkLCB0aGVyZSBtYXkKKwkgKiBiZSBhIGNvcmVfaWQgb2YgMywgYnV0IG5vbmUgb2YgMi4gQXNzdW1lIHRoZXJlIGFsd2F5cyBpcyAwCisJICogR2V0IGFtb3VudCBvZiBjb3JlcyBieSBjb3VudGluZyBkdXBsaWNhdGVzIGluIGEgcGFja2FnZQorCWZvciAoY3B1ID0gMDsgY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0ucGtnID0gMCAmJiBjcHUgPCBjcHVzOyBjcHUrKykgeworCQlpZiAoY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0uY29yZSA9PSAwKQorCWNwdV90b3AtPmNvcmVzKys7CisJKi8KKwlyZXR1cm4gY3B1czsKK30KKwordm9pZCBjcHVfdG9wb2xvZ3lfcmVsZWFzZShzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kgY3B1X3RvcCkKK3sKKwlmcmVlKGNwdV90b3AuY29yZV9pbmZvKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGU5NDMyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jCkBAIC0wLDAgKzEsMzQwIEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqICBQQ0kgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gZXhhbXBsZSBjb2RlIGZyb206CisgKiAgQW5kcmVhcyBIZXJybWFubiA8YW5kcmVhcy5oZXJybWFubjNAYW1kLmNvbT4KKyAqLworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxwY2kvcGNpLmg+CisKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorCisvKioqKioqKiogUENJIHBhcnRzIGNvdWxkIGdvIGludG8gb3duIGZpbGUgYW5kIGdldCBzaGFyZWQgKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFBDSV9OT05fUEMwX09GRlNFVAkweGIwCisjZGVmaW5lIFBDSV9QQzFfT0ZGU0VUCQkweGI0CisjZGVmaW5lIFBDSV9QQzZfT0ZGU0VUCQkweGI4CisKKyNkZWZpbmUgUENJX01PTklUT1JfRU5BQkxFX1JFRyAgMHhlMAorCisjZGVmaW5lIFBDSV9OT05fUEMwX0VOQUJMRV9CSVQJMAorI2RlZmluZSBQQ0lfUEMxX0VOQUJMRV9CSVQJMQorI2RlZmluZSBQQ0lfUEM2X0VOQUJMRV9CSVQJMgorCisjZGVmaW5lIFBDSV9OQlAxX1NUQVRfT0ZGU0VUCTB4OTgKKyNkZWZpbmUgUENJX05CUDFfQUNUSVZFX0JJVAkyCisjZGVmaW5lIFBDSV9OQlAxX0VOVEVSRURfQklUCTEKKworI2RlZmluZSBQQ0lfTkJQMV9DQVBfT0ZGU0VUCTB4OTAKKyNkZWZpbmUgUENJX05CUDFfQ0FQQUJMRV9CSVQgICAgMzEKKworI2RlZmluZSBPVkVSRkxPV19NUwkJMzQzNTk3IC8qIDMyIGJpdCByZWdpc3RlciBmaWxsZWQgYXQgMTI1MDAgSFoKKwkJCQkJICAoMSB0aWNrIHBlciA4MG5zKSAqLworCitlbnVtIGFtZF9mYW0xNGhfc3RhdGVzIHtOT05fUEMwID0gMCwgUEMxLCBQQzYsIE5CUDEsCisJCQlBTURfRkFNMTRIX1NUQVRFX05VTX07CisKK3N0YXRpYyBpbnQgZmFtMTRoX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBzZWxmX2lkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJICAgIHVuc2lnbmVkIGludCBjcHUpOworc3RhdGljIGludCBmYW0xNGhfbmJwMV9jb3VudCh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY291bnQsCisJCQkgICAgIHVuc2lnbmVkIGludCBjcHUpOworCitzdGF0aWMgY3N0YXRlX3QgYW1kX2ZhbTE0aF9jc3RhdGVzW0FNRF9GQU0xNEhfU1RBVEVfTlVNXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiIVBDMCIsCisJCS5kZXNjCQkJPSBOXygiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiKSwKKwkJLmlkCQkJPSBOT05fUEMwLAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IGZhbTE0aF9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJQQzEiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBQYWNrYWdlIEMxIiksCisJCS5pZAkJCT0gUEMxLAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IGZhbTE0aF9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJQQzYiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBQYWNrYWdlIEM2IiksCisJCS5pZAkJCT0gUEM2LAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IGZhbTE0aF9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJOQlAxIiwKKwkJLmRlc2MJCQk9IE5fKCJOb3J0aCBCcmlkZ2UgUDEgYm9vbGVhbiBjb3VudGVyIChyZXR1cm5zIDAgb3IgMSkiKSwKKwkJLmlkCQkJPSBOQlAxLAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnQJCT0gZmFtMTRoX25icDFfY291bnQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2FjY2VzcyAqcGNpX2FjYzsKK3N0YXRpYyBpbnQgcGNpX3ZlbmRvcl9pZCA9IDB4MTAyMjsKK3N0YXRpYyBpbnQgcGNpX2Rldl9pZHNbMl0gPSB7MHgxNzE2LCAwfTsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqYW1kX2ZhbTE0aF9wY2lfZGV2OworCitzdGF0aWMgaW50IG5icDFfZW50ZXJlZDsKKworc3RydWN0IHRpbWVzcGVjIHN0YXJ0X3RpbWU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRpbWVkaWZmOworCisjaWZkZWYgREVCVUcKK3N0cnVjdCB0aW1lc3BlYyBkYmdfdGltZTsKK2xvbmcgZGJnX3RpbWVkaWZmOworI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKnByZXZpb3VzX2NvdW50W0FNRF9GQU0xNEhfU1RBVEVfTlVNXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKmN1cnJlbnRfY291bnRbQU1EX0ZBTTE0SF9TVEFURV9OVU1dOworCitzdGF0aWMgaW50IGFtZF9mYW0xNGhfZ2V0X3BjaV9pbmZvKHN0cnVjdCBjc3RhdGUgKnN0YXRlLAorCQkJCSAgIHVuc2lnbmVkIGludCAqcGNpX29mZnNldCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKmVuYWJsZV9iaXQsCisJCQkJICAgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlzd2l0Y2goc3RhdGUtPmlkKSB7CisJY2FzZSBOT05fUEMwOgorCQkqZW5hYmxlX2JpdCA9IFBDSV9OT05fUEMwX0VOQUJMRV9CSVQ7CisJCSpwY2lfb2Zmc2V0ID0gUENJX05PTl9QQzBfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIFBDMToKKwkJKmVuYWJsZV9iaXQgPSBQQ0lfUEMxX0VOQUJMRV9CSVQ7CisJCSpwY2lfb2Zmc2V0ID0gUENJX1BDMV9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUEM2OgorCQkqZW5hYmxlX2JpdCA9IFBDSV9QQzZfRU5BQkxFX0JJVDsKKwkJKnBjaV9vZmZzZXQgPSBQQ0lfUEM2X09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBOQlAxOgorCQkqZW5hYmxlX2JpdCA9IFBDSV9OQlAxX0VOVEVSRURfQklUOworCQkqcGNpX29mZnNldCA9IFBDSV9OQlAxX1NUQVRfT0ZGU0VUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbWRfZmFtMTRoX2luaXQoY3N0YXRlX3QgKnN0YXRlLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBlbmFibGVfYml0LCBwY2lfb2Zmc2V0LCByZXQ7CisJdWludDMyX3QgdmFsOworCisJcmV0ID0gYW1kX2ZhbTE0aF9nZXRfcGNpX2luZm8oc3RhdGUsICZwY2lfb2Zmc2V0LCAmZW5hYmxlX2JpdCwgY3B1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogTkJQMSBuZWVkcyBleHRyYSB0cmVhdGluZyAtPiB3cml0ZSAxIHRvIEQxOEY2eDk4IGJpdCAxIGZvciBpbml0ICovCisJaWYgKHN0YXRlLT5pZCA9PSBOQlAxKSB7CisJCXZhbCA9IHBjaV9yZWFkX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBwY2lfb2Zmc2V0KTsKKwkJdmFsIHw9IDEgPDwgZW5hYmxlX2JpdDsKKwkJdmFsID0gcGNpX3dyaXRlX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBwY2lfb2Zmc2V0LCB2YWwpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEVuYWJsZSBtb25pdG9yICovCisJdmFsID0gcGNpX3JlYWRfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcpOworCWRwcmludCgiSW5pdCAlczogcmVhZCBhdCBvZmZzZXQ6IDB4JXggdmFsOiAldVxuIiwgc3RhdGUtPm5hbWUsCisJICAgICAgIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcsICh1bnNpZ25lZCBpbnQpIHZhbCk7CisJdmFsIHw9IDEgPDwgZW5hYmxlX2JpdDsKKwlwY2lfd3JpdGVfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcsIHZhbCk7CisKKwlkcHJpbnQoIkluaXQgJXM6IG9mZnNldDogMHgleCBlbmFibGVfYml0OiAlZCAtIHZhbDogJXUgKCV1KVxuIiwKKwkgICAgICAgc3RhdGUtPm5hbWUsIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcsIGVuYWJsZV9iaXQsCisJICAgICAgICh1bnNpZ25lZCBpbnQpIHZhbCwgY3B1KTsKKworCS8qIFNldCBjb3VudGVyIHRvIHplcm8gKi8KKwlwY2lfd3JpdGVfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIHBjaV9vZmZzZXQsIDApOworCXByZXZpb3VzX2NvdW50W3N0YXRlLT5pZF1bY3B1XSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbWRfZmFtMTRoX2Rpc2FibGUoY3N0YXRlX3QgKnN0YXRlLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBlbmFibGVfYml0LCBwY2lfb2Zmc2V0LCByZXQ7CisJdWludDMyX3QgdmFsOworCisJcmV0ID0gYW1kX2ZhbTE0aF9nZXRfcGNpX2luZm8oc3RhdGUsICZwY2lfb2Zmc2V0LCAmZW5hYmxlX2JpdCwgY3B1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gcGNpX3JlYWRfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIHBjaV9vZmZzZXQpOworCWRwcmludCgiJXM6IG9mZnNldDogMHgleCAldVxuIiwgc3RhdGUtPm5hbWUsIHBjaV9vZmZzZXQsIHZhbCk7CisJaWYgKHN0YXRlLT5pZCA9PSBOQlAxKSB7CisJCS8qIHdhcyB0aGUgYml0IHdoZXRoZXIgTkJQMSBnb3QgZW50ZXJlZCBzZXQ/ICovCisJCW5icDFfZW50ZXJlZCA9ICh2YWwgJiAoMSA8PCBQQ0lfTkJQMV9BQ1RJVkVfQklUKSkgfAorCQkJKHZhbCAmICgxIDw8IFBDSV9OQlAxX0VOVEVSRURfQklUKSk7CisJCQkKKwkJZHByaW50KCJOQlAxIHdhcyAlc2VudGVyZWQgLSAweCV4IC0gZW5hYmxlX2JpdDogIgorCQkgICAgICAgIiVkIC0gcGNpX29mZnNldDogMHgleFxuIiwKKwkJICAgICAgIG5icDFfZW50ZXJlZCA/ICIiIDogIm5vdCAiLAorCQkgICAgICAgdmFsLCBlbmFibGVfYml0LCBwY2lfb2Zmc2V0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJY3VycmVudF9jb3VudFtzdGF0ZS0+aWRdW2NwdV0gPSB2YWw7CisKKwlkcHJpbnQoIiVzOiBDdXJyZW50IC0gICVsbHUgKCV1KVxuIiwgc3RhdGUtPm5hbWUsCisJICAgICAgIGN1cnJlbnRfY291bnRbc3RhdGUtPmlkXVtjcHVdLCBjcHUpOworCWRwcmludCgiJXM6IFByZXZpb3VzIC0gJWxsdSAoJXUpXG4iLCBzdGF0ZS0+bmFtZSwKKwkgICAgICAgcHJldmlvdXNfY291bnRbc3RhdGUtPmlkXVtjcHVdLCBjcHUpOworCisJdmFsID0gcGNpX3JlYWRfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcpOworCXZhbCAmPSB+KDEgPDwgZW5hYmxlX2JpdCk7CisJcGNpX3dyaXRlX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBQQ0lfTU9OSVRPUl9FTkFCTEVfUkVHLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmFtMTRoX25icDFfY291bnQodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgKmNvdW50LAorCQkJICAgICB1bnNpZ25lZCBpbnQgY3B1KQoreworCWlmIChpZCA9PSBOQlAxKSB7CisJCWlmIChuYnAxX2VudGVyZWQpCisJCQkqY291bnQgPSAxOworCQllbHNlCisJCQkqY291bnQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorc3RhdGljIGludCBmYW0xNGhfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IGlkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJICAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBkaWZmOworCQorCWlmIChpZCA+PSBBTURfRkFNMTRIX1NUQVRFX05VTSkKKwkJcmV0dXJuIC0xOworCS8qIHJlc2lkZW5jeSBjb3VudCBpbiA4MG5zIC0+IGRpdmlkZSB0aHJvdWdoIDEyLjUgdG8gZ2V0IHVzIHJlc2lkZW5jeSAqLworCWRpZmYgPSBjdXJyZW50X2NvdW50W2lkXVtjcHVdIC0gcHJldmlvdXNfY291bnRbaWRdW2NwdV07CisKKwlpZiAodGltZWRpZmYgPT0gMCkKKwkJKnBlcmNlbnQgPSAwLjA7CisJZWxzZQorCQkqcGVyY2VudCA9IDEwMC4wICogZGlmZiAvIHRpbWVkaWZmIC8gMTIuNTsKKworCWRwcmludCgiVGltZWRpZmY6ICVsbHUgLSByZXN+OiAlbHUgdXMgLSBwZXJjZW50OiAlLjJmICUlXG4iLAorCSAgICAgICB0aW1lZGlmZiwgZGlmZiAqIDEwIC8gMTI1LCAqcGVyY2VudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbWRfZmFtMTRoX3N0YXJ0KHZvaWQpCit7CisJaW50IG51bSwgY3B1OworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZzdGFydF90aW1lKTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IEFNRF9GQU0xNEhfU1RBVEVfTlVNOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJCWFtZF9mYW0xNGhfaW5pdCgmYW1kX2ZhbTE0aF9jc3RhdGVzW251bV0sIGNwdSk7CisJCX0KKwl9CisjaWZkZWYgREVCVUcKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZGJnX3RpbWUpOworCWRiZ190aW1lZGlmZiA9IHRpbWVzcGVjX2RpZmZfdXMoc3RhcnRfdGltZSwgZGJnX3RpbWUpOworCWRwcmludCgiRW5hYmxpbmcgY291bnRlcnMgdG9vazogJWx1IHVzXG4iLAorCSAgICAgICBkYmdfdGltZWRpZmYpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1kX2ZhbTE0aF9zdG9wKHZvaWQpCit7CisJaW50IG51bSwgY3B1OworCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZTsKKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZlbmRfdGltZSk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IEFNRF9GQU0xNEhfU1RBVEVfTlVNOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJCWFtZF9mYW0xNGhfZGlzYWJsZSgmYW1kX2ZhbTE0aF9jc3RhdGVzW251bV0sIGNwdSk7CisJCX0KKwl9CisjaWZkZWYgREVCVUcKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZGJnX3RpbWUpOworCWRiZ190aW1lZGlmZiA9IHRpbWVzcGVjX2RpZmZfdXMoZW5kX3RpbWUsIGRiZ190aW1lKTsKKwlkcHJpbnQoIkRpc2FibGluZyBjb3VudGVycyB0b29rOiAlbHUgbnNcbiIsIGRiZ190aW1lZGlmZik7CisjZW5kaWYKKwl0aW1lZGlmZiA9IHRpbWVzcGVjX2RpZmZfdXMoc3RhcnRfdGltZSwgZW5kX3RpbWUpOworCWlmICh0aW1lZGlmZiAvIDEwMDAgPiBPVkVSRkxPV19NUykKKwkJcHJpbnRfb3ZlcmZsb3dfZXJyKCh1bnNpZ25lZCBpbnQpdGltZWRpZmYgLyAxMDAwMDAwLAorCQkJCSAgIE9WRVJGTE9XX01TIC8gMTAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19uYnAxX2NhcGFibGUodm9pZCkKK3sKKwl1aW50MzJfdCB2YWw7CisJdmFsID0gcGNpX3JlYWRfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIFBDSV9OQlAxX0NBUF9PRkZTRVQpOworCXJldHVybiB2YWwgJiAoMSA8PCAzMSk7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IqIGFtZF9mYW0xNGhfcmVnaXN0ZXIodm9pZCkgeworCisJaW50IG51bTsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQpCisJCXJldHVybiBOVUxMOworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLmZhbWlseSA9PSAweDE0KSB7CisJCWlmIChjcHVfY291bnQgPD0gMCB8fCBjcHVfY291bnQgPiAyKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkFNRCBmYW0xNGg6IEludmFsaWQgY3B1IGNvdW50OiAlZFxuIiwKKwkJCQljcHVfY291bnQpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBXZSBkbyBub3QgYWxsb2MgZm9yIG5icDEgbWFjaGluZSB3aWRlIGNvdW50ZXIgKi8KKwlmb3IgKG51bSA9IDA7IG51bSA8IEFNRF9GQU0xNEhfU1RBVEVfTlVNIC0gMTsgbnVtKyspIHsKKwkJcHJldmlvdXNfY291bnRbbnVtXSA9IGNhbGxvYyAoY3B1X2NvdW50LAorCQkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJCWN1cnJlbnRfY291bnRbbnVtXSAgPSBjYWxsb2MgKGNwdV9jb3VudCwKKwkJCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCX0KKworCWFtZF9mYW0xNGhfcGNpX2RldiA9IHBjaV9hY2NfaW5pdCgmcGNpX2FjYywgcGNpX3ZlbmRvcl9pZCwgcGNpX2Rldl9pZHMpOworCWlmIChhbWRfZmFtMTRoX3BjaV9kZXYgPT0gTlVMTCB8fCBwY2lfYWNjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFpc19uYnAxX2NhcGFibGUoKSkKKwkJYW1kX2ZhbTE0aF9tb25pdG9yLmh3X3N0YXRlc19udW0gPSBBTURfRkFNMTRIX1NUQVRFX05VTSAtIDE7CisKKwlhbWRfZmFtMTRoX21vbml0b3IubmFtZV9sZW4gPSBzdHJsZW4oYW1kX2ZhbTE0aF9tb25pdG9yLm5hbWUpOworCXJldHVybiAmYW1kX2ZhbTE0aF9tb25pdG9yOworfQorCitzdGF0aWMgdm9pZCBhbWRfZmFtMTRoX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgbnVtOworCWZvciAobnVtID0gMDsgbnVtIDwgQU1EX0ZBTTE0SF9TVEFURV9OVU0gLSAxOyBudW0rKykgeworCQlmcmVlKHByZXZpb3VzX2NvdW50W251bV0pOworCQlmcmVlKGN1cnJlbnRfY291bnRbbnVtXSk7CisJfQorCXBjaV9jbGVhbnVwKHBjaV9hY2MpOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGFtZF9mYW0xNGhfbW9uaXRvciA9IHsKKwkubmFtZQkJCT0gIk9udGFyaW8iLAorCS5od19zdGF0ZXMJCT0gYW1kX2ZhbTE0aF9jc3RhdGVzLAorCS5od19zdGF0ZXNfbnVtCQk9IEFNRF9GQU0xNEhfU1RBVEVfTlVNLAorCS5zdGFydAkJCT0gYW1kX2ZhbTE0aF9zdGFydCwKKwkuc3RvcAkJCT0gYW1kX2ZhbTE0aF9zdG9wLAorCS5kb19yZWdpc3RlcgkJPSBhbWRfZmFtMTRoX3JlZ2lzdGVyLAorCS51bnJlZ2lzdGVyCQk9IGFtZF9mYW0xNGhfdW5yZWdpc3RlciwKKwkubmVlZHNfcm9vdAkJPSAxLAorCS5vdmVyZmxvd19zCQk9IE9WRVJGTE9XX01TIC8gMTAwMCwKK307CisjZW5kaWYgLyogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVpZGxlX3N5c2ZzLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1aWRsZV9zeXNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjZkNjcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1aWRsZV9zeXNmcy5jCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvc3lzZnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIgorCisjZGVmaW5lIENQVUlETEVfU1RBVEVTX01BWCAxMAorc3RhdGljIGNzdGF0ZV90IGNwdWlkbGVfY3N0YXRlc1tDUFVJRExFX1NUQVRFU19NQVhdOworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBjcHVpZGxlX3N5c2ZzX21vbml0b3I7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKipwcmV2aW91c19jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKipjdXJyZW50X2NvdW50Oworc3RydWN0IHRpbWVzcGVjIHN0YXJ0X3RpbWU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRpbWVkaWZmOworCitzdGF0aWMgaW50IGNwdWlkbGVfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IGlkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0ZWRpZmYgPSBjdXJyZW50X2NvdW50W2NwdV1baWRdCisJCS0gcHJldmlvdXNfY291bnRbY3B1XVtpZF07CisJZHByaW50KCIlczogLSBkaWZmOiAlbGx1IC0gcGVyY2VudDogJWYgKCV1KVxuIiwKKwkgICAgICAgY3B1aWRsZV9jc3RhdGVzW2lkXS5uYW1lLCB0aW1lZGlmZiwgKnBlcmNlbnQsIGNwdSk7CisKKwlpZiAodGltZWRpZmYgPT0gMCkKKwkJKnBlcmNlbnQgPSAwLjA7CisJZWxzZQorCQkqcGVyY2VudCA9ICgoMTAwLjAgKiBzdGF0ZWRpZmYpIC8gdGltZWRpZmYpOworCQorCWRwcmludCgiJXM6IC0gdGltZWRpZmY6ICVsbHUgLSBzdGF0ZWRpZmY6ICVsbHUgLSBwZXJjZW50OiAlZiAoJXUpXG4iLAorCSAgICAgICBjcHVpZGxlX2NzdGF0ZXNbaWRdLm5hbWUsIHRpbWVkaWZmLCBzdGF0ZWRpZmYsICpwZXJjZW50LCBjcHUpOworCQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNwdWlkbGVfc3RhcnQodm9pZCkKK3sKKwlpbnQgY3B1LCBzdGF0ZTsKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmc3RhcnRfdGltZSk7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCWZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8IGNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtOworCQkgICAgIHN0YXRlKyspIHsKKwkJCXByZXZpb3VzX2NvdW50W2NwdV1bc3RhdGVdID0KKwkJCQlzeXNmc19nZXRfaWRsZXN0YXRlX3RpbWUoY3B1LCBzdGF0ZSk7CisJCQlkcHJpbnQoIkNQVSAlZCAtIFN0YXRlOiAlZCAtIFZhbDogJWxsdVxuIiwKKwkJCSAgICAgICBjcHUsIHN0YXRlLCBwcmV2aW91c19jb3VudFtjcHVdW3N0YXRlXSk7CisJCX0KKwkJCisJfTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcHVpZGxlX3N0b3Aodm9pZCkKK3sKKwlpbnQgY3B1LCBzdGF0ZTsKKwlzdHJ1Y3QgdGltZXNwZWMgZW5kX3RpbWU7CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmVuZF90aW1lKTsKKwl0aW1lZGlmZiA9IHRpbWVzcGVjX2RpZmZfdXMoc3RhcnRfdGltZSwgZW5kX3RpbWUpOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCWZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8IGNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtOworCQkgICAgIHN0YXRlKyspIHsKKwkJCWN1cnJlbnRfY291bnRbY3B1XVtzdGF0ZV0gPQorCQkJCXN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZShjcHUsIHN0YXRlKTsKKwkJCWRwcmludCgiQ1BVICVkIC0gU3RhdGU6ICVkIC0gVmFsOiAlbGx1XG4iLAorCQkJICAgICAgIGNwdSwgc3RhdGUsIHByZXZpb3VzX2NvdW50W2NwdV1bc3RhdGVdKTsKKwkJfQorCX07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZml4X3VwX2ludGVsX2lkbGVfZHJpdmVyX25hbWUoY2hhciAqdG1wLCBpbnQgbnVtKQoreworCS8qIGZpeCB1cCBjcHVpZGxlIG5hbWUgZm9yIGludGVsIGlkbGUgZHJpdmVyICovCisJaWYgKCFzdHJuY21wKHRtcCwgIk5ITS0iLCA0KSkgeworCQlzd2l0Y2gobnVtKSB7CisJCWNhc2UgMTogc3RyY3B5KHRtcCwgIkMxIik7CisJCQlicmVhazsKKwkJY2FzZSAyOiBzdHJjcHkodG1wLCAiQzMiKTsKKwkJCWJyZWFrOworCQljYXNlIDM6IHN0cmNweSh0bXAsICJDNiIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJuY21wKHRtcCwgIlNOQi0iLCA0KSkgeworCQlzd2l0Y2gobnVtKSB7CisJCWNhc2UgMTogc3RyY3B5KHRtcCwgIkMxIik7CisJCQlicmVhazsKKwkJY2FzZSAyOiBzdHJjcHkodG1wLCAiQzMiKTsKKwkJCWJyZWFrOworCQljYXNlIDM6IHN0cmNweSh0bXAsICJDNiIpOworCQkJYnJlYWs7CisJCWNhc2UgNDogc3RyY3B5KHRtcCwgIkM3Iik7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cm5jbXAodG1wLCAiQVRNLSIsIDQpKSB7CisJCXN3aXRjaChudW0pIHsKKwkJY2FzZSAxOiBzdHJjcHkodG1wLCAiQzEiKTsKKwkJCWJyZWFrOworCQljYXNlIDI6IHN0cmNweSh0bXAsICJDMiIpOworCQkJYnJlYWs7CisJCWNhc2UgMzogc3RyY3B5KHRtcCwgIkM0Iik7CisJCQlicmVhazsKKwkJY2FzZSA0OiBzdHJjcHkodG1wLCAiQzYiKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfbW9uaXRvciogY3B1aWRsZV9yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisJY2hhciAqdG1wOworCisJLyogQXNzdW1lIGlkbGUgc3RhdGUgY291bnQgaXMgdGhlIHNhbWUgZm9yIGFsbCBDUFVzICovCisJY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW0gPSBzeXNmc19nZXRfaWRsZXN0YXRlX2NvdW50KDApOworCisJaWYgKGNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtID09IDApCisJCXJldHVybiBOVUxMOworCisJZm9yIChudW0gPSAwOyBudW0gPCBjcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bTsgbnVtICsrKSB7CisJCXRtcCA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZSgwLCBudW0pOworCQlpZiAodG1wID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlmaXhfdXBfaW50ZWxfaWRsZV9kcml2ZXJfbmFtZSh0bXAsIG51bSk7CisJCXN0cm5jcHkoY3B1aWRsZV9jc3RhdGVzW251bV0ubmFtZSwgdG1wLCBDU1RBVEVfTkFNRV9MRU4gLSAxKTsKKwkJZnJlZSh0bXApOworCisJCXRtcCA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfZGVzYygwLCBudW0pOworCQlpZiAodG1wID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJc3RybmNweShjcHVpZGxlX2NzdGF0ZXNbbnVtXS5kZXNjLCB0bXAsCUNTVEFURV9ERVNDX0xFTiAtIDEpOworCQlmcmVlKHRtcCk7CisKKwkJY3B1aWRsZV9jc3RhdGVzW251bV0ucmFuZ2UgPSBSQU5HRV9USFJFQUQ7CisJCWNwdWlkbGVfY3N0YXRlc1tudW1dLmlkID0gbnVtOworCQljcHVpZGxlX2NzdGF0ZXNbbnVtXS5nZXRfY291bnRfcGVyY2VudCA9IGNwdWlkbGVfZ2V0X2NvdW50X3BlcmNlbnQ7CisgCX07CisKKwkvKiBGcmVlIHRoaXMgYXQgcHJvZ3JhbSB0ZXJtaW5hdGlvbiAqLworCXByZXZpb3VzX2NvdW50ID0gbWFsbG9jKHNpemVvZiAobG9uZyBsb25nKikgKiBjcHVfY291bnQpOworCWN1cnJlbnRfY291bnQgPSBtYWxsb2Moc2l6ZW9mIChsb25nIGxvbmcqKSAqIGNwdV9jb3VudCk7CisJZm9yIChudW0gPSAwOyBudW0gPCBjcHVfY291bnQ7IG51bSsrKSB7CisJCXByZXZpb3VzX2NvdW50W251bV0gPSBtYWxsb2MgKHNpemVvZihsb25nIGxvbmcpICoKKwkJCQkJICAgICAgY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW0pOworCQljdXJyZW50X2NvdW50W251bV0gPSBtYWxsb2MgKHNpemVvZihsb25nIGxvbmcpICoKKwkJCQkJICAgICBjcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bSk7CisJfQorCisJY3B1aWRsZV9zeXNmc19tb25pdG9yLm5hbWVfbGVuID0gc3RybGVuKGNwdWlkbGVfc3lzZnNfbW9uaXRvci5uYW1lKTsKKwlyZXR1cm4gJmNwdWlkbGVfc3lzZnNfbW9uaXRvcjsKK30KKwordm9pZCBjcHVpZGxlX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgbnVtOworCisJZm9yIChudW0gPSAwOyBudW0gPCBjcHVfY291bnQ7IG51bSsrKSB7CisJCWZyZWUocHJldmlvdXNfY291bnRbbnVtXSk7CisJCWZyZWUoY3VycmVudF9jb3VudFtudW1dKTsKKwl9CisJZnJlZShwcmV2aW91c19jb3VudCk7CisJZnJlZShjdXJyZW50X2NvdW50KTsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBjcHVpZGxlX3N5c2ZzX21vbml0b3IgPSB7CisJLm5hbWUJCQk9ICJJZGxlX1N0YXRzIiwKKwkuaHdfc3RhdGVzCQk9IGNwdWlkbGVfY3N0YXRlcywKKwkuc3RhcnQJCQk9IGNwdWlkbGVfc3RhcnQsCisJLnN0b3AJCQk9IGNwdWlkbGVfc3RvcCwKKwkuZG9fcmVnaXN0ZXIJCT0gY3B1aWRsZV9yZWdpc3RlciwKKwkudW5yZWdpc3RlcgkJPSBjcHVpZGxlX3VucmVnaXN0ZXIsCisJLm5lZWRzX3Jvb3QJCT0gMCwKKwkub3ZlcmZsb3dfcwkJPSBVSU5UX01BWCwKK307CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTk2ZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYwpAQCAtMCwwICsxLDQ0NiBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIE91dHB1dCBmb3JtYXQgaW5zcGlyZWQgYnkgTGVuIEJyb3duJ3MgPGxlbmJAa2VybmVsLm9yZz4gdHVyYm9zdGF0IHRvb2wuCisgKgorICovCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIgorI2luY2x1ZGUgImlkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmgiCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKKy8qIERlZmluZSBwb2ludGVycyB0byBhbGwgbW9uaXRvcnMuICAqLworI2RlZmluZSBERUYoeCkgJiB4ICMjIF9tb25pdG9yICwKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgKiBhbGxfbW9uaXRvcnNbXSA9IHsKKyNpbmNsdWRlICJpZGxlX21vbml0b3JzLmRlZiIKKzAKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yICptb25pdG9yc1tNT05JVE9SU19NQVhdOworc3RhdGljIHVuc2lnbmVkIGludCBhdmFpbF9tb25pdG9yczsKKworc3RhdGljIGNoYXIgKnByb2duYW1lOworCitlbnVtIG9wZXJhdGlvbl9tb2RlX2UgeyBsaXN0ID0gMSwgc2hvdywgc2hvd19hbGwgfTsKK3N0YXRpYyBpbnQgbW9kZTsKK3N0YXRpYyBpbnQgaW50ZXJ2YWwgPSAxOworc3RhdGljIGNoYXIgKnNob3dfbW9uaXRvcnNfcGFyYW07CitzdGF0aWMgc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5IGNwdV90b3A7CisKKy8qIFRvRG86IERvY3VtZW50IHRoaXMgaW4gdGhlIG1hbnBhZ2UgKi8KK3N0YXRpYyBjaGFyIHJhbmdlX2FiYnJbUkFOR0VfTUFYXSA9IHsgJ1QnLCAnQycsICdQJywgJ00nLCB9OworCitsb25nIGxvbmcgdGltZXNwZWNfZGlmZl91cyhzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIHN0cnVjdCB0aW1lc3BlYyBlbmQpCit7CisJc3RydWN0IHRpbWVzcGVjIHRlbXA7CisJaWYgKChlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWMpIDwgMCkgeworCQl0ZW1wLnR2X3NlYyA9IGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWMgLSAxOworCQl0ZW1wLnR2X25zZWMgPSAxMDAwMDAwMDAwICsgZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjOworCX0gZWxzZSB7CisJCXRlbXAudHZfc2VjID0gZW5kLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYzsKKwkJdGVtcC50dl9uc2VjID0gZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjOworCX0KKwlyZXR1cm4gKHRlbXAudHZfc2VjICogMTAwMDAwMCkgKyAodGVtcC50dl9uc2VjIC8gMTAwMCk7Cit9CisKK3ZvaWQgbW9uaXRvcl9oZWxwKHZvaWQpCit7CisJcHJpbnRmKF8oImNwdXBvd2VyIG1vbml0b3I6IFstbSA8bW9uMT4sWzxtb24yPl0sLi4gXSBjb21tYW5kXG4iKSk7CisJcHJpbnRmKF8oImNwdXBvd2VyIG1vbml0b3I6IFstbSA8bW9uMT4sWzxtb24yPl0sLi4gXSBbIC1pIGludGVydmFsX3NlYyBdXG4iKSk7CisJcHJpbnRmKF8oImNwdXBvd2VyIG1vbml0b3I6IC1sXG4iKSk7CisJcHJpbnRmKF8oIlx0IGNvbW1hbmQ6IHBhc3MgYW4gYXJiaXRyYXJ5IGNvbW1hbmQgdG8gbWVhc3VyZSBzcGVjaWZpYyB3b3JrbG9hZFxuIikpOworCXByaW50ZihfKCJcdCAtaTogdGltZSBpbnRlcnZhbGwgdG8gbWVhc3VyZSBmb3IgaW4gc2Vjb25kcyAoZGVmYXVsdCAxKVxuIikpOworCXByaW50ZihfKCJcdCAtbDogbGlzdCBhdmFpbGFibGUgQ1BVIHNsZWVwIG1vbml0b3JzIChmb3IgdXNlIHdpdGggLW0pXG4iKSk7CisJcHJpbnRmKF8oIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIikpOworCXByaW50ZihfKCJcdCAtaDogcHJpbnQgdGhpcyBoZWxwXG4iKSk7CisJcHJpbnRmKCJcbiIpOworCXByaW50ZihfKCJvbmx5IG9uZSBvZjogLWwsIC1tIGFyZSBhbGxvd2VkXG5JZiBub25lIG9mIHRoZW0gaXMgcGFzc2VkLCIpKTsKKwlwcmludGYoXygiIGFsbCBzdXBwb3J0ZWQgbW9uaXRvcnMgYXJlIHNob3duXG4iKSk7Cit9CisKK3ZvaWQgcHJpbnRfbl9zcGFjZXMoaW50IG4pCit7CisJaW50IHg7CisJZm9yICh4ID0gMDsgeCA8IG47IHgrKykKKwkJcHJpbnRmKCIgIik7Cit9CQorCisvKiBzaXplIG9mIHMgbXVzdCBiZSBhdCBsZWFzdCBuICsgMSAqLworaW50IGZpbGxfc3RyaW5nX3dpdGhfc3BhY2VzKGNoYXIgKnMsIGludCBuKQoreworICAgICAgICBpbnQgbGVuID0gc3RybGVuKHMpOworCWlmIChsZW4gPiBuKQorCQlyZXR1cm4gLTE7CisgICAgICAgIGZvciAoOyBsZW4gPCBuOyBsZW4rKykKKyAgICAgICAgICAgICAgICBzW2xlbl0gPSAnICc7CisgICAgICAgIHNbbGVuXSA9ICdcMCc7CisJcmV0dXJuIDA7Cit9IAorCit2b2lkIHByaW50X2hlYWRlcihpbnQgdG9wb2xvZ3lfZGVwdGgpCit7CisJaW50IHVuc2lnbmVkIG1vbjsKKwlpbnQgc3RhdGUsIG5lZWRfbGVuLCBwcl9tb25fbGVuOworCWNzdGF0ZV90IHM7CisJY2hhciBidWZbMTI4XSA9ICIiOworCWludCBwZXJjZW50X3dpZHRoID0gNDsKKworCWZpbGxfc3RyaW5nX3dpdGhfc3BhY2VzKGJ1ZiwgdG9wb2xvZ3lfZGVwdGggKiA1IC0gMSk7CisJcHJpbnRmKCIlc3wiLCBidWYpOworCisJZm9yIChtb24gPSAwOyBtb24gPCBhdmFpbF9tb25pdG9yczsgbW9uKyspIHsKKwkJcHJfbW9uX2xlbiA9IDA7CisJCW5lZWRfbGVuID0gbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzX251bSAqIChwZXJjZW50X3dpZHRoICsgMykKKwkJCS0gMTsKKwkJaWYgKG1vbiAhPSAwKSB7CisJCQlwcmludGYoInx8ICIpOworCQkJbmVlZF9sZW4gLS07CisJCX0KKwkJc3ByaW50ZihidWYsICIlcyIsIG1vbml0b3JzW21vbl0tPm5hbWUpOworCQlmaWxsX3N0cmluZ193aXRoX3NwYWNlcyhidWYsIG5lZWRfbGVuKTsKKwkJcHJpbnRmKCIlcyIsIGJ1Zik7CisJfQorCXByaW50ZigiXG4iKTsKKworCWlmICh0b3BvbG9neV9kZXB0aCA+IDIpCisJCXByaW50ZigiUEtHIHwiKTsKKwlpZiAodG9wb2xvZ3lfZGVwdGggPiAxKQorCQlwcmludGYoIkNPUkV8Iik7CisJaWYgKHRvcG9sb2d5X2RlcHRoID4gMCkKKwkJcHJpbnRmKCJDUFUgfCIpOworCisJZm9yIChtb24gPSAwOyBtb24gPCBhdmFpbF9tb25pdG9yczsgbW9uKyspIHsKKwkJaWYgKG1vbiAhPSAwKQorCQkJcHJpbnRmKCJ8fCAiKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIgIik7CisJCWZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8IG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc19udW07IHN0YXRlKyspIHsKKwkJCWlmIChzdGF0ZSAhPSAwKQorCQkJCXByaW50ZigiIHwgIik7CisJCQlzID0gbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzW3N0YXRlXTsKKwkJCXNwcmludGYoYnVmLCAiJXMiLCBzLm5hbWUpOworCQkJZmlsbF9zdHJpbmdfd2l0aF9zcGFjZXMoYnVmLCBwZXJjZW50X3dpZHRoKTsKKwkJCXByaW50ZigiJXMiLCBidWYpOworCQl9CisJCXByaW50ZigiICIpOworCX0KKwlwcmludGYoIlxuIik7Cit9CisKKwordm9pZCBwcmludF9yZXN1bHRzKGludCB0b3BvbG9neV9kZXB0aCwgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgbW9uOworCWludCBzdGF0ZSwgcmV0OworCWRvdWJsZSBwZXJjZW50OworCXVuc2lnbmVkIGxvbmcgbG9uZyByZXN1bHQ7CisJY3N0YXRlX3QgczsKKworCWlmICh0b3BvbG9neV9kZXB0aCA+IDIpCisJCXByaW50ZigiJTRkfCIsIGNwdV90b3AuY29yZV9pbmZvW2NwdV0ucGtnKTsKKwlpZiAodG9wb2xvZ3lfZGVwdGggPiAxKQorCQlwcmludGYoIiU0ZHwiLCBjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLmNvcmUpOworCWlmICh0b3BvbG9neV9kZXB0aCA+IDApCisJCXByaW50ZigiJTRkfCIsIGNwdV90b3AuY29yZV9pbmZvW2NwdV0uY3B1KTsKKworCWZvciAobW9uID0gMDsgbW9uIDwgYXZhaWxfbW9uaXRvcnM7IG1vbisrKSB7CisJCWlmIChtb24gIT0gMCkKKwkJCXByaW50ZigifHwiKTsKKworCQlmb3IgKHN0YXRlID0gMDsgc3RhdGUgPCBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNfbnVtOyBzdGF0ZSsrKSB7CisJCQlpZiAoc3RhdGUgIT0gMCkKKwkJCQlwcmludGYoInwiKTsKKworCQkJcyA9IG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc1tzdGF0ZV07CisKKwkJCWlmIChzLmdldF9jb3VudF9wZXJjZW50KSB7CisJCQkJcmV0ID0gcy5nZXRfY291bnRfcGVyY2VudChzLmlkLCAmcGVyY2VudCwKKwkJCQkJCSAgY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5jcHUpOworCQkJCWlmIChyZXQpIHsKKwkJCQkJcHJpbnRmKCIqKioqKioiKTsKKwkJCQl9IGVsc2UgaWYgKHBlcmNlbnQgPj0gMTAwLjApCisJCQkJCXByaW50ZigiJTYuMWYiLCBwZXJjZW50KTsKKwkJCQllbHNlCisJCQkJCXByaW50ZigiJTYuMmYiLCBwZXJjZW50KTsKKwkJCX0KKwkJCWVsc2UgaWYgKHMuZ2V0X2NvdW50KSB7CisJCQkJcmV0ID0gcy5nZXRfY291bnQocy5pZCwgJnJlc3VsdCwKKwkJCQkJCSAgY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5jcHUpOworCQkJCWlmIChyZXQpIHsKKwkJCQkJcHJpbnRmKCIqKioqKioiKTsKKwkJCQl9IGVsc2UKKwkJCQkJcHJpbnRmKCIlNmxsdSIsIHJlc3VsdCk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlwcmludGYoXygiTW9uaXRvciAlcywgQ291bnRlciAlcyBoYXMgbm8gY291bnQgIgorCQkJCQkgImZ1bmN0aW9uLiBJbXBsZW1lbnRhdGlvbiBlcnJvclxuIiksCisJCQkJICAgICAgIG1vbml0b3JzW21vbl0tPm5hbWUsIHMubmFtZSk7CisJCQkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBjcHUgb2ZmbGluZSAqLworCWlmIChjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLnBrZyA9PSAtMSB8fAorCSAgICBjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLmNvcmUgPT0gLTEpIHsKKwkJcHJpbnRmKF8oIiAqaXMgb2ZmbGluZVxuIikpOworCQlyZXR1cm47CisJfSBlbHNlCisJCXByaW50ZigiXG4iKTsKK30KKworCisvKiBwYXJhbTogc3RyaW5nIHBhc3NlZCBieSAtbSBwYXJhbSAoVGhlIGxpc3Qgb2YgbW9uaXRvcnMgdG8gc2hvdykKKyAqCisgKiBNb25pdG9ycyBtdXN0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGFscmVhZHksIG1hdGNoaW5nIG1vbml0b3JzCisgKiBhcmUgcGlja2VkIG91dCBhbmQgYXZhaWxhYmxlIG1vbml0b3JzIGFycmF5IGlzIG92ZXJyaWRkZW4KKyAqIHdpdGggbWF0Y2hpbmcgb25lcworICoKKyAqIE1vbml0b3JzIGdldCBzb3J0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIHVzZXIgcGFzc2VzIHRoZW0KKyovCisKK3N0YXRpYyB2b2lkIHBhcnNlX21vbml0b3JfcGFyYW0oY2hhciogcGFyYW0pCit7CisJdW5zaWduZWQgaW50IG51bTsKKwlpbnQgbW9uLCBoaXRzID0gMDsKKwljaGFyICp0bXAgPSBwYXJhbSwgKnRva2VuOworCXN0cnVjdCBjcHVpZGxlX21vbml0b3IgKnRtcF9tb25zW01PTklUT1JTX01BWF07CisKKworCWZvciAobW9uID0gMDsgbW9uIDwgTU9OSVRPUlNfTUFYO21vbisrLCB0bXAgPSBOVUxMKSB7CisJCXRva2VuID0gc3RydG9rKHRtcCwgIiwiKTsKKwkJaWYgKHRva2VuID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKHN0cmxlbih0b2tlbikgPj0gTU9OSVRPUl9OQU1FX0xFTikgeworCQkJcHJpbnRmKF8oIiVzOiBtYXggbW9uaXRvciBuYW1lIGxlbmd0aCIKKwkJCQkgIiAoJWQpIGV4Y2VlZGVkXG4iKSwgdG9rZW4sIE1PTklUT1JfTkFNRV9MRU4pOworCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKG51bSA9IDA7IG51bSA8IGF2YWlsX21vbml0b3JzOyBudW0rKykgeworCQkJaWYgKCFzdHJjbXAobW9uaXRvcnNbbnVtXS0+bmFtZSwgdG9rZW4pKSB7CisJCQkJZHByaW50KCJGb3VuZCByZXF1ZXN0ZWQgbW9uaXRvcjogJXNcbiIsIHRva2VuKTsKKwkJCQl0bXBfbW9uc1toaXRzXSA9IG1vbml0b3JzW251bV07CisJCQkJaGl0cysrOworCQkJfQorCQl9CQorCX0KKwlpZiAoaGl0cyA9PSAwKSB7CisJCXByaW50ZihfKCJObyBtYXRjaGluZyBtb25pdG9yIGZvdW5kIGluICVzLCAiCisJCQkgInRyeSAtbCBvcHRpb25cbiIpLCBwYXJhbSk7CisJCW1vbml0b3JfaGVscCgpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCS8qIE92ZXJyaWRlIGRldGVjdGVkL3JlZ2lzdGVyZCBtb25pdG9ycyBhcnJheSB3aXRoIHJlcXVlc3RlZCBvbmUgKi8KKwltZW1jcHkobW9uaXRvcnMsIHRtcF9tb25zLCBzaXplb2Yoc3RydWN0IGNwdWlkbGVfbW9uaXRvciopICogTU9OSVRPUlNfTUFYKTsKKwlhdmFpbF9tb25pdG9ycyA9IGhpdHM7Cit9CisKK3ZvaWQgbGlzdF9tb25pdG9ycyh2b2lkKSB7CisJdW5zaWduZWQgaW50IG1vbjsKKwlpbnQgc3RhdGU7CisJY3N0YXRlX3QgczsKKworCWZvciAobW9uID0gMDsgbW9uIDwgYXZhaWxfbW9uaXRvcnM7IG1vbisrKSB7CisJCXByaW50ZihfKCJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1ICIKKwkJCSAic1xuIiksIG1vbml0b3JzW21vbl0tPm5hbWUsIG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc19udW0sCisJCSAgICAgICBtb25pdG9yc1ttb25dLT5vdmVyZmxvd19zKTsKKwkJICAgICAgIAorCQlmb3IgKHN0YXRlID0gMDsgc3RhdGUgPCBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNfbnVtOyBzdGF0ZSsrKSB7CisJCQlzID0gbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzW3N0YXRlXTsKKwkJCS8qCisJCQkgKiBUb0RvIHNob3cgbW9yZSBzdGF0ZSBjYXBhYmlsaXRpZXM6CisJCQkgKiBwZXJjZW50LCB0aW1lIChncmFubGFyaXR5KQorCQkJICovCisJCQlwcmludGYoIiVzXHRbJWNdIC0+ICVzXG4iLCBzLm5hbWUsIHJhbmdlX2FiYnJbcy5yYW5nZV0sCisJCQkgICAgICAgZ2V0dGV4dChzLmRlc2MpKTsKKwkJfQorCX0KK30KKworaW50IGZvcmtfaXQoY2hhciAqKmFyZ3YpCit7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgbnVtOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lZGlmZjsKKwlwaWRfdCBjaGlsZF9waWQ7CisJc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBlbmQ7CisKKwljaGlsZF9waWQgPSBmb3JrKCk7CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnN0YXJ0KTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgYXZhaWxfbW9uaXRvcnM7IG51bSsrKQorCQltb25pdG9yc1tudW1dLT5zdGFydCgpOworCisJaWYgKCFjaGlsZF9waWQpIHsKKwkJLyogY2hpbGQgKi8KKwkJZXhlY3ZwKGFyZ3ZbMF0sIGFyZ3YpOworCX0gZWxzZSB7CisJCS8qIHBhcmVudCAqLworCQlpZiAoY2hpbGRfcGlkID09IC0xKSB7CisJCQlwZXJyb3IoImZvcmsiKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQlzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKwkJc2lnbmFsKFNJR1FVSVQsIFNJR19JR04pOworCQlpZiAod2FpdHBpZChjaGlsZF9waWQsICZzdGF0dXMsIDApID09IC0xKSB7CisJCQlwZXJyb3IoIndhaXQiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmVuZCk7CisJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspCisJCW1vbml0b3JzW251bV0tPnN0b3AoKTsKKworCXRpbWVkaWZmID0gdGltZXNwZWNfZGlmZl91cyhzdGFydCwgZW5kKTsKKwlpZiAoV0lGRVhJVEVEKHN0YXR1cykpCisJCXByaW50ZihfKCIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iKSwKKwkJICAgICAgIGFyZ3ZbMF0sIHRpbWVkaWZmIC8gKDEwMDAuMCAqIDEwMDApLCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRvX2ludGVydmFsX21lYXN1cmUoaW50IGkpCit7CisJdW5zaWduZWQgaW50IG51bTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgYXZhaWxfbW9uaXRvcnM7IG51bSsrKSB7CisJCWRwcmludCgiSFcgQy1zdGF0ZSByZXNpZGVuY3kgbW9uaXRvcjogJXMgLSBTdGF0ZXM6ICVkXG4iLAorCQkgICAgICAgbW9uaXRvcnNbbnVtXS0+bmFtZSwgbW9uaXRvcnNbbnVtXS0+aHdfc3RhdGVzX251bSk7CisJCW1vbml0b3JzW251bV0tPnN0YXJ0KCk7CisJfQorCXNsZWVwKGkpOworCWZvciAobnVtID0gMDsgbnVtIDwgYXZhaWxfbW9uaXRvcnM7IG51bSsrKSB7CisJCW1vbml0b3JzW251bV0tPnN0b3AoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNtZGxpbmUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgb3B0OworCXByb2duYW1lID0gYmFzZW5hbWUoYXJndlswXSk7CisKKwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiK2hsaTptOiIpKSAhPSAtMSkgeworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlICdoJzoKKwkJCW1vbml0b3JfaGVscCgpOworCQkJZXhpdChFWElUX1NVQ0NFU1MpOworCQljYXNlICdsJzoKKwkJCWlmIChtb2RlKSB7CisJCQkJbW9uaXRvcl9oZWxwKCk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJbW9kZSA9IGxpc3Q7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQkvKiBvbmx5IGFsbG93IC1pIHdpdGggLW0gb3Igbm8gb3B0aW9uICovCisJCQlpZiAobW9kZSAmJiBtb2RlICE9IHNob3cpIHsKKwkJCQltb25pdG9yX2hlbHAoKTsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCQlpbnRlcnZhbCA9IGF0b2kob3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChtb2RlKSB7CisJCQkJbW9uaXRvcl9oZWxwKCk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJbW9kZSA9IHNob3c7CisJCQlzaG93X21vbml0b3JzX3BhcmFtID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltb25pdG9yX2hlbHAoKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKwlpZiAoIW1vZGUpCisJCW1vZGUgPSBzaG93X2FsbDsKK30KKworaW50IGNtZF9tb25pdG9yKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgbnVtOworCXN0cnVjdCBjcHVpZGxlX21vbml0b3IgKnRlc3RfbW9uOworCWludCBjcHU7CisKKwljbWRsaW5lKGFyZ2MsIGFyZ3YpOworCWNwdV9jb3VudCA9IGdldF9jcHVfdG9wb2xvZ3koJmNwdV90b3ApOworCWlmIChjcHVfY291bnQgPCAwKSB7CisJCXByaW50ZihfKCJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIpKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlkcHJpbnQoIlN5c3RlbSBoYXMgdXAgdG8gJWQgQ1BVIGNvcmVzXG4iLCBjcHVfY291bnQpOworCQorCWZvciAobnVtID0gMDsgYWxsX21vbml0b3JzW251bV07IG51bSsrKSB7CisJCWRwcmludCgiVHJ5IHRvIHJlZ2lzdGVyOiAlc1xuIiwgYWxsX21vbml0b3JzW251bV0tPm5hbWUpOworCQl0ZXN0X21vbiA9IGFsbF9tb25pdG9yc1tudW1dLT5kb19yZWdpc3RlcigpOworCQlpZiAodGVzdF9tb24pIHsKKwkJCWlmICh0ZXN0X21vbi0+bmVlZHNfcm9vdCAmJiAhcnVuX2FzX3Jvb3QpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgIgorCQkJCQkgICJyb290IGFjY2Vzc1xuIiksIHRlc3RfbW9uLT5uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCW1vbml0b3JzW2F2YWlsX21vbml0b3JzXSA9IHRlc3RfbW9uOworCQkJZHByaW50KCIlcyByZWdpc3RlcmVkXG4iLCBhbGxfbW9uaXRvcnNbbnVtXS0+bmFtZSk7CisJCQlhdmFpbF9tb25pdG9ycysrOworCQl9CisJfQorCisJaWYgKGF2YWlsX21vbml0b3JzID09IDApIHsKKwkJcHJpbnRmKF8oIk5vIEhXIENzdGF0ZSBtb25pdG9ycyBmb3VuZFxuIikpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAobW9kZSA9PSBsaXN0KSB7CisJCWxpc3RfbW9uaXRvcnMoKTsKKwkJZXhpdChFWElUX1NVQ0NFU1MpOworCX0KKworCWlmIChtb2RlID09IHNob3cpCisJCXBhcnNlX21vbml0b3JfcGFyYW0oc2hvd19tb25pdG9yc19wYXJhbSk7CisKKwlkcHJpbnQoIlBhY2thZ2VzOiAlZCAtIENvcmVzOiAlZCAtIENQVXM6ICVkXG4iLAorCSAgICAgICBjcHVfdG9wLnBrZ3MsIGNwdV90b3AuY29yZXMsIGNwdV9jb3VudCk7CisKKwkvKgorCSAqIGlmIGFueSBwYXJhbXMgbGVmdCwgaXQgbXVzdCBiZSBhIGNvbW1hbmQgdG8gZm9yaworCSAqLworCWlmIChhcmdjIC0gb3B0aW5kKQorCQlmb3JrX2l0KGFyZ3YgKyBvcHRpbmQpOworCWVsc2UKKwkJZG9faW50ZXJ2YWxfbWVhc3VyZShpbnRlcnZhbCk7CisKKwkvKiBUb0RvOiBUb3BvbG9neSBwYXJzaW5nIG5lZWRzIGZpeGluZyBmaXJzdCB0byBkbworCSAgIHRoaXMgbW9yZSBnZW5lcmljYWxseSAqLworCWlmIChjcHVfdG9wLnBrZ3MgPiAxKQorCQlwcmludF9oZWFkZXIoMyk7CisJZWxzZQorCQlwcmludF9oZWFkZXIoMSk7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJaWYgKGNwdV90b3AucGtncyA+IDEpCisJCQlwcmludF9yZXN1bHRzKDMsIGNwdSk7CisJCWVsc2UKKwkJCXByaW50X3Jlc3VsdHMoMSwgY3B1KTsKKwl9CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IGF2YWlsX21vbml0b3JzOyBudW0rKykgeworCQltb25pdG9yc1tudW1dLT51bnJlZ2lzdGVyKCk7CisJfQorCWNwdV90b3BvbG9neV9yZWxlYXNlKGNwdV90b3ApOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMxMmVlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgX19DUFVJRExFX0lORk9fSFdfXworI2RlZmluZSBfX0NQVUlETEVfSU5GT19IV19fCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5oIgorCisjZGVmaW5lIE1PTklUT1JTX01BWCAyMAorI2RlZmluZSBNT05JVE9SX05BTUVfTEVOIDIwCisjZGVmaW5lIENTVEFURV9OQU1FX0xFTiA1CisjZGVmaW5lIENTVEFURV9ERVNDX0xFTiA2MAorCitpbnQgY3B1X2NvdW50OworCisvKiBIYXJkIHRvIGRlZmluZSB0aGUgcmlnaHQgbmFtZXMgLi4uOiAqLworZW51bSBwb3dlcl9yYW5nZV9lIHsKKwlSQU5HRV9USFJFQUQsCS8qIExvd2VzdCBpbiB0b3BvbG9neSBoaWVyYXJjeSwgQU1EOiBjb3JlLCBJbnRlbDogdGhyZWFkCisJCQkgICBrZXJuZWwgc3lzZnM6IGNwdSAqLworCVJBTkdFX0NPUkUsCS8qIEFNRDogdW5pdCwgSW50ZWw6IGNvcmUsIGtlcm5lbF9zeXNmczogY29yZV9pZCAqLworCVJBTkdFX1BBQ0tBR0UsCS8qIFBhY2thZ2UsIHByb2Nlc3NvciBzb2NrZXQgKi8KKwlSQU5HRV9NQUNISU5FLAkvKiBNYWNoaW5lLCBwbGF0Zm9ybSB3aWRlICovCisJUkFOR0VfTUFYIH07CisKK3R5cGVkZWYgc3RydWN0IGNzdGF0ZSB7CisJaW50ICBpZDsKKwllbnVtIHBvd2VyX3JhbmdlX2UgcmFuZ2U7CisJY2hhciBuYW1lW0NTVEFURV9OQU1FX0xFTl07CisJY2hhciBkZXNjW0NTVEFURV9ERVNDX0xFTl07CisKKwkvKiBlaXRoZXIgcHJvdmlkZSBhIHBlcmNlbnRhZ2Ugb3IgYSBnZW5lcmFsIGNvdW50ICovCisJaW50ICgqZ2V0X2NvdW50X3BlcmNlbnQpKHVuc2lnbmVkIGludCBzZWxmX2lkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJIHVuc2lnbmVkIGludCBjcHUpOworCWludCAoKmdldF9jb3VudCkodW5zaWduZWQgaW50IHNlbGZfaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY291bnQsCisJCQkgdW5zaWduZWQgaW50IGNwdSk7Cit9IGNzdGF0ZV90OworCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIHsKKwkvKiBOYW1lIG11c3Qgbm90IGNvbnRhaW4gd2hpdGVzcGFjZXMgKi8KKwljaGFyIG5hbWVbTU9OSVRPUl9OQU1FX0xFTl07CisJaW50IG5hbWVfbGVuOworCWludCBod19zdGF0ZXNfbnVtOworCWNzdGF0ZV90ICpod19zdGF0ZXM7CisJaW50ICgqc3RhcnQpICh2b2lkKTsKKwlpbnQgKCpzdG9wKSAodm9pZCk7CisJc3RydWN0IGNwdWlkbGVfbW9uaXRvciogKCpkb19yZWdpc3RlcikgKHZvaWQpOworCXZvaWQgKCp1bnJlZ2lzdGVyKSh2b2lkKTsKKwl1bnNpZ25lZCBpbnQgb3ZlcmZsb3dfczsKKwlpbnQgbmVlZHNfcm9vdDsKK307CisKK2V4dGVybiBsb25nIGxvbmcgdGltZXNwZWNfZGlmZl91cyhzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIHN0cnVjdCB0aW1lc3BlYyBlbmQpOworCisjZGVmaW5lIHByaW50X292ZXJmbG93X2VycihtZXMsIG92KQkJCQkJCVwKK3sJCQkJCQkJCQkJXAorCWZwcmludGYoc3RkZXJyLCBnZXR0ZXh0KCJNZWFzdXJlIHRvb2sgJXUgc2Vjb25kcywgYnV0IHJlZ2lzdGVycyBjb3VsZCAiCVwKKwkJCQkib3ZlcmZsb3cgYXQgJXUgc2Vjb25kcywgcmVzdWx0cyAiCQlcCisJCQkJImNvdWxkIGJlIGluYWNjdXJhdGVcbiIpLCBtZXMsIG92KTsJCVwKK30KKworI2VuZGlmIC8qIF9fQ1BVSURMRV9JTkZPX0hXX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmRlZiBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2Y4ZDliCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuZGVmCkBAIC0wLDAgKzEsNyBAQAorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKK0RFRihhbWRfZmFtMTRoKQorREVGKGludGVsX25obSkKK0RFRihpbnRlbF9zbmIpCitERUYobXBlcmYpCisjZW5kaWYKK0RFRihjcHVpZGxlX3N5c2ZzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjZGViMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIEJhc2VkIG9uIHRoZSBpZGVhIGZyb20gTWljaGFlbCBNYXR6IDxtYXR6QHN1c2UuZGU+CisgKgorICovCisKKyNpZm5kZWYgX0NQVUlETEVfSURMRV9NT05JVE9SU19IXworI2RlZmluZSBfQ1BVSURMRV9JRExFX01PTklUT1JTX0hfCisKKyNkZWZpbmUgREVGKHgpIGV4dGVybiBzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIHggIyNfbW9uaXRvcjsKKyNpbmNsdWRlICJpZGxlX21vbml0b3JzLmRlZiIKKyN1bmRlZiBERUYKK2V4dGVybiBzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yICphbGxfbW9uaXRvcnNbXTsKKworI2VuZGlmIC8qIF9DUFVJRExFX0lETEVfTU9OSVRPUlNfSF8gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTQ1ZTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgPGNwdWZyZXEuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisKKyNkZWZpbmUgTVNSX0FQRVJGCTB4RTgKKyNkZWZpbmUgTVNSX01QRVJGCTB4RTcKKworI2RlZmluZSBNU1JfVFNDCTB4MTAKKworZW51bSBtcGVyZl9pZCB7IEMwID0gMCwgQ3gsIEFWR19GUkVRLCBNUEVSRl9DU1RBVEVfQ09VTlQgfTsKKworc3RhdGljIGludCBtcGVyZl9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgc2VsZl9pZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSAgIHVuc2lnbmVkIGludCBjcHUpOworc3RhdGljIGludCBtcGVyZl9nZXRfY291bnRfZnJlcSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY291bnQsCisJCQkJdW5zaWduZWQgaW50IGNwdSk7CisKK3N0YXRpYyBjc3RhdGVfdCBtcGVyZl9jc3RhdGVzW01QRVJGX0NTVEFURV9DT1VOVF0gPSB7CisJeworCQkubmFtZQkJCT0gIkMwIiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIpLAorCQkuaWQJCQk9IEMwLAorCQkucmFuZ2UJCQk9IFJBTkdFX1RIUkVBRCwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gbXBlcmZfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiQ3giLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBDb3JlIGluIGFuIGlkbGUgc3RhdGUiKSwKKwkJLmlkCQkJPSBDeCwKKwkJLnJhbmdlCQkJPSBSQU5HRV9USFJFQUQsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG1wZXJmX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisKKwl7CisJCS5uYW1lCQkJPSAiRnJlcSIsCisJCS5kZXNjCQkJPSBOXygiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IiksCisJCS5pZAkJCT0gQVZHX0ZSRVEsCisJCS5yYW5nZQkJCT0gUkFOR0VfVEhSRUFELAorCQkuZ2V0X2NvdW50CQk9IG1wZXJmX2dldF9jb3VudF9mcmVxLAorCX0sCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRzY19hdF9tZWFzdXJlX3N0YXJ0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9lbmQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfZnJlcXVlbmN5Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqbXBlcmZfcHJldmlvdXNfY291bnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICphcGVyZl9wcmV2aW91c19jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKm1wZXJmX2N1cnJlbnRfY291bnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICphcGVyZl9jdXJyZW50X2NvdW50OworLyogdmFsaWQgZmxhZyBmb3IgYWxsIENQVXMuIElmIGEgTVNSIHJlYWQgZmFpbGVkIGl0IHdpbGwgYmUgemVybyAqLworc3RhdGljIGludCAqaXNfdmFsaWQ7CisKK3N0YXRpYyBpbnQgbXBlcmZfZ2V0X3RzYyh1bnNpZ25lZCBsb25nIGxvbmcgKnRzYykKK3sKKwlyZXR1cm4gcmVhZF9tc3IoMCwgTVNSX1RTQywgdHNjKTsKK30KKworc3RhdGljIGludCBtcGVyZl9pbml0X3N0YXRzKHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVhZF9tc3IoY3B1LCBNU1JfQVBFUkYsICZ2YWwpOworCWFwZXJmX3ByZXZpb3VzX2NvdW50W2NwdV0gPSB2YWw7CisJcmV0IHw9IHJlYWRfbXNyKGNwdSwgTVNSX01QRVJGLCAmdmFsKTsKKwltcGVyZl9wcmV2aW91c19jb3VudFtjcHVdID0gdmFsOworCWlzX3ZhbGlkW2NwdV0gPSAhcmV0OworCQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wZXJmX21lYXN1cmVfc3RhdHModW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSByZWFkX21zcihjcHUsIE1TUl9BUEVSRiwgJnZhbCk7CisJYXBlcmZfY3VycmVudF9jb3VudFtjcHVdID0gdmFsOworCXJldCB8PSByZWFkX21zcihjcHUsIE1TUl9NUEVSRiwgJnZhbCk7CisJbXBlcmZfY3VycmVudF9jb3VudFtjcHVdID0gdmFsOworCWlzX3ZhbGlkW2NwdV0gPSAhcmV0OworCQorCXJldHVybiAwOworfQorCisvKgorICogZ2V0X2F2ZXJhZ2VfcGVyZigpCisgKgorICogUmV0dXJucyB0aGUgYXZlcmFnZSBwZXJmb3JtYW5jZSAoYWxzbyBjb25zaWRlcnMgYm9vc3RlZCBmcmVxdWVuY2llcykKKyAqCisgKiBJbnB1dDoKKyAqICAgYXBlcmZfZGlmZjogRGlmZmVyZW5jZSBvZiB0aGUgYXBlcmYgcmVnaXN0ZXIgb3ZlciBhIHRpbWUgcGVyaW9kCisgKiAgIG1wZXJmX2RpZmY6IERpZmZlcmVuY2Ugb2YgdGhlIG1wZXJmIHJlZ2lzdGVyIG92ZXIgdGhlIHNhbWUgdGltZSBwZXJpb2QKKyAqICAgbWF4X2ZyZXE6ICAgTWF4aW11bSBmcmVxdWVuY3kgKFAwKQorICoKKyAqIFJldHVybnM6CisgKiAgIEF2ZXJhZ2UgcGVyZm9ybWFuY2Ugb3ZlciB0aGUgdGltZSBwZXJpb2QKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2F2ZXJhZ2VfcGVyZih1bnNpZ25lZCBsb25nIGxvbmcgYXBlcmZfZGlmZiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbXBlcmZfZGlmZikKK3sKKwl1bnNpZ25lZCBpbnQgcGVyZl9wZXJjZW50ID0gMDsKKwlpZiAoKCh1bnNpZ25lZCBsb25nKSgtMSkgLyAxMDApIDwgYXBlcmZfZGlmZikgeworCQlpbnQgc2hpZnRfY291bnQgPSA3OworCQlhcGVyZl9kaWZmID4+PSBzaGlmdF9jb3VudDsKKwkJbXBlcmZfZGlmZiA+Pj0gc2hpZnRfY291bnQ7CisJfQorCXBlcmZfcGVyY2VudCA9IChhcGVyZl9kaWZmICogMTAwKSAvIG1wZXJmX2RpZmY7CisJcmV0dXJuIChtYXhfZnJlcXVlbmN5ICogcGVyZl9wZXJjZW50KSAvIDEwMDsKK30KKworc3RhdGljIGludCBtcGVyZl9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBhcGVyZl9kaWZmLCBtcGVyZl9kaWZmLCB0c2NfZGlmZjsKKworCWlmICghaXNfdmFsaWRbY3B1XSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGlkICE9IEMwICYmIGlkICE9IEN4KQorCQlyZXR1cm4gLTE7CisKKwltcGVyZl9kaWZmID0gbXBlcmZfY3VycmVudF9jb3VudFtjcHVdIC0gbXBlcmZfcHJldmlvdXNfY291bnRbY3B1XTsKKwlhcGVyZl9kaWZmID0gYXBlcmZfY3VycmVudF9jb3VudFtjcHVdIC0gYXBlcmZfcHJldmlvdXNfY291bnRbY3B1XTsKKwl0c2NfZGlmZiA9IHRzY19hdF9tZWFzdXJlX2VuZCAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0OworCisJKnBlcmNlbnQgPSAxMDAuMCAqIG1wZXJmX2RpZmYgLyB0c2NfZGlmZjsKKwlkcHJpbnQoIiVzOiBtcGVyZl9kaWZmOiAlbGx1LCB0c2NfZGlmZjogJWxsdVxuIiwKKwkgICAgICAgbXBlcmZfY3N0YXRlc1tpZF0ubmFtZSwgbXBlcmZfZGlmZiwgdHNjX2RpZmYpOworCisJaWYgKGlkID09IEN4KQorCQkqcGVyY2VudCA9IDEwMC4wIC0gKnBlcmNlbnQ7CisKKwlkcHJpbnQoIiVzOiBwcmV2aW91czogJWxsdSAtIGN1cnJlbnQ6ICVsbHUgLSAoJXUpXG4iLCBtcGVyZl9jc3RhdGVzW2lkXS5uYW1lLAorCSAgICAgICBtcGVyZl9kaWZmLCBhcGVyZl9kaWZmLCBjcHUpOworCWRwcmludCgiJXM6ICVmXG4iLCBtcGVyZl9jc3RhdGVzW2lkXS5uYW1lLCAqcGVyY2VudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBlcmZfZ2V0X2NvdW50X2ZyZXEodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgKmNvdW50LAorCQkJICAgICAgdW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYXBlcmZfZGlmZiwgbXBlcmZfZGlmZjsKKworCWlmIChpZCAhPSBBVkdfRlJFUSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIWlzX3ZhbGlkW2NwdV0pCisJCXJldHVybiAtMTsKKworCW1wZXJmX2RpZmYgPSBtcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gLSBtcGVyZl9wcmV2aW91c19jb3VudFtjcHVdOworCWFwZXJmX2RpZmYgPSBhcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gLSBhcGVyZl9wcmV2aW91c19jb3VudFtjcHVdOworCisJLyogUmV0dXJuIE1IeiBmb3Igbm93LCBtaWdodCB3YW50IHRvIHJldHVybiBLSHogaWYgY29sdW1uIHdpZHRoIGlzIG1vcmUKKwkgICBnZW5lcmljICovCisJKmNvdW50ID0gZ2V0X2F2ZXJhZ2VfcGVyZihhcGVyZl9kaWZmLCBtcGVyZl9kaWZmKSAvIDEwMDA7CisJZHByaW50KCIlczogJWxsdVxuIiwgbXBlcmZfY3N0YXRlc1tpZF0ubmFtZSwgKmNvdW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wZXJmX3N0YXJ0KHZvaWQpCit7CisJaW50IGNwdTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGJnOworCisJbXBlcmZfZ2V0X3RzYygmdHNjX2F0X21lYXN1cmVfc3RhcnQpOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKQorCQltcGVyZl9pbml0X3N0YXRzKGNwdSk7CisKKwltcGVyZl9nZXRfdHNjKCZkYmcpOworCWRwcmludCgiVFNDIGRpZmY6ICVsbHVcbiIsIGRiZyAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGVyZl9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGRiZzsKKwlpbnQgY3B1OworCisJbXBlcmZfZ2V0X3RzYygmdHNjX2F0X21lYXN1cmVfZW5kKTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykKKwkJbXBlcmZfbWVhc3VyZV9zdGF0cyhjcHUpOworCisJbXBlcmZfZ2V0X3RzYygmZGJnKTsKKwlkcHJpbnQoIlRTQyBkaWZmOiAlbGx1XG4iLCBkYmcgLSB0c2NfYXRfbWVhc3VyZV9lbmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgbXBlcmZfbW9uaXRvcjsKKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciogbXBlcmZfcmVnaXN0ZXIodm9pZCkgeworCisJdW5zaWduZWQgbG9uZyBtaW47CisKKwlpZiAoIShjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX0FQRVJGKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBBc3N1bWUgbWluL21heCBhbGwgdGhlIHNhbWUgb24gYWxsIGNvcmVzICovCisJaWYgKGNwdWZyZXFfZ2V0X2hhcmR3YXJlX2xpbWl0cygwLCAmbWluLCAmbWF4X2ZyZXF1ZW5jeSkpIHsKKwkJZHByaW50KCJDYW5ub3QgcmV0cmlldmUgbWF4IGZyZXEgZnJvbSBjcHVmcmVxIGtlcm5lbCAiCisJCSAgICAgICAic3Vic3lzdGVtXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogRnJlZSB0aGlzIGF0IHByb2dyYW0gdGVybWluYXRpb24gKi8KKwlpc192YWxpZCA9IGNhbGxvYyhjcHVfY291bnQsIHNpemVvZiAoaW50KSk7CisJbXBlcmZfcHJldmlvdXNfY291bnQgPSBjYWxsb2MgKGNwdV9jb3VudCwKKwkJCQkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCWFwZXJmX3ByZXZpb3VzX2NvdW50ID0gY2FsbG9jIChjcHVfY291bnQsCisJCQkJICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwltcGVyZl9jdXJyZW50X2NvdW50ID0gY2FsbG9jIChjcHVfY291bnQsCisJCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCWFwZXJmX2N1cnJlbnRfY291bnQgPSBjYWxsb2MgKGNwdV9jb3VudCwKKwkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJCisJbXBlcmZfbW9uaXRvci5uYW1lX2xlbiA9IHN0cmxlbihtcGVyZl9tb25pdG9yLm5hbWUpOworCXJldHVybiAmbXBlcmZfbW9uaXRvcjsKK30KKwordm9pZCBtcGVyZl91bnJlZ2lzdGVyKHZvaWQpIHsKKwlmcmVlKG1wZXJmX3ByZXZpb3VzX2NvdW50KTsKKwlmcmVlKGFwZXJmX3ByZXZpb3VzX2NvdW50KTsKKwlmcmVlKG1wZXJmX2N1cnJlbnRfY291bnQpOworCWZyZWUoYXBlcmZfY3VycmVudF9jb3VudCk7CisJZnJlZShpc192YWxpZCk7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgbXBlcmZfbW9uaXRvciA9IHsKKwkubmFtZQkJCT0gIk1wZXJmIiwKKwkuaHdfc3RhdGVzX251bQkJPSBNUEVSRl9DU1RBVEVfQ09VTlQsCisJLmh3X3N0YXRlcwkJPSBtcGVyZl9jc3RhdGVzLAorCS5zdGFydAkJCT0gbXBlcmZfc3RhcnQsCisJLnN0b3AJCQk9IG1wZXJmX3N0b3AsCisJLmRvX3JlZ2lzdGVyCQk9IG1wZXJmX3JlZ2lzdGVyLAorCS51bnJlZ2lzdGVyCQk9IG1wZXJmX3VucmVnaXN0ZXIsCisJLm5lZWRzX3Jvb3QJCT0gMSwKKwkub3ZlcmZsb3dfcwkJPSA5MjIwMDAwMDAgLyogOTIyMzM3MjAzIHNlY29uZHMgVFNDIG92ZXJmbG93CisJCQkJCSAgICAgICBhdCAyMEdIeiAqLworfTsKKyNlbmRpZiAvKiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDI0YjZkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmMKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqICBCYXNlZCBvbiBMZW4gQnJvd24ncyA8bGVuYkBrZXJuZWwub3JnPiB0dXJib3N0YXQgdG9vbC4KKyAqLworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisKKyNkZWZpbmUgTVNSX1BLR19DM19SRVNJREVOQ1kJMHgzRjgKKyNkZWZpbmUgTVNSX1BLR19DNl9SRVNJREVOQ1kJMHgzRjkKKyNkZWZpbmUgTVNSX0NPUkVfQzNfUkVTSURFTkNZCTB4M0ZDCisjZGVmaW5lIE1TUl9DT1JFX0M2X1JFU0lERU5DWQkweDNGRAorCisjZGVmaW5lIE1TUl9UU0MJMHgxMAorCisjZGVmaW5lIE5ITV9DU1RBVEVfQ09VTlQgNAorCitlbnVtIGludGVsX25obV9pZCB7IEMzID0gMCwgQzYsIFBDMywgUEM2LCBUU0MgPSAweEZGRkYgfTsKKworc3RhdGljIGludCBuaG1fZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IHNlbGZfaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgdW5zaWduZWQgaW50IGNwdSk7CisKK3N0YXRpYyBjc3RhdGVfdCBuaG1fY3N0YXRlc1tOSE1fQ1NUQVRFX0NPVU5UXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiQzMiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBDb3JlIEMzIiksCisJCS5pZAkJCT0gQzMsCisJCS5yYW5nZQkJCT0gUkFOR0VfQ09SRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gbmhtX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIkM2IiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgQ29yZSBDNiIpLAorCQkuaWQJCQk9IEM2LAorCQkucmFuZ2UJCQk9IFJBTkdFX0NPUkUsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG5obV9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCisJeworCQkubmFtZQkJCT0gIlBDMyIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIFBhY2thZ2UgQzMiKSwKKwkJLmlkCQkJPSBQQzMsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gbmhtX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIlBDNiIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIFBhY2thZ2UgQzYiKSwKKwkJLmlkCQkJPSBQQzYsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gbmhtX2dldF9jb3VudF9wZXJjZW50LAorCX0sCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRzY19hdF9tZWFzdXJlX3N0YXJ0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9lbmQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpwcmV2aW91c19jb3VudFtOSE1fQ1NUQVRFX0NPVU5UXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKmN1cnJlbnRfY291bnRbTkhNX0NTVEFURV9DT1VOVF07CisvKiB2YWxpZCBmbGFnIGZvciBhbGwgQ1BVcy4gSWYgYSBNU1IgcmVhZCBmYWlsZWQgaXQgd2lsbCBiZSB6ZXJvICovCitzdGF0aWMgaW50ICppc192YWxpZDsKKworc3RhdGljIGludCBuaG1fZ2V0X2NvdW50KGVudW0gaW50ZWxfbmhtX2lkIGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgbXNyOworCisJc3dpdGNoKGlkKSB7CisJY2FzZSBDMzoKKwkJbXNyID0gTVNSX0NPUkVfQzNfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIEM2OgorCQltc3IgPSBNU1JfQ09SRV9DNl9SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgUEMzOgorCQltc3IgPSBNU1JfUEtHX0MzX1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBQQzY6CisJCW1zciA9IE1TUl9QS0dfQzZfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIFRTQzoKKwkJbXNyID0gTVNSX1RTQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX07CisJaWYgKHJlYWRfbXNyKGNwdSwgbXNyLCB2YWwpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaG1fZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IGlkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJIHVuc2lnbmVkIGludCBjcHUpCit7CisJKnBlcmNlbnQgPSAwLjA7CisKKwlpZiAoIWlzX3ZhbGlkW2NwdV0pCisJCXJldHVybiAtMTsKKworCSpwZXJjZW50ID0gKDEwMC4wICogKGN1cnJlbnRfY291bnRbaWRdW2NwdV0gLSBwcmV2aW91c19jb3VudFtpZF1bY3B1XSkpIC8KKwkJKHRzY19hdF9tZWFzdXJlX2VuZCAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0KTsKKworCWRwcmludCgiJXM6IHByZXZpb3VzOiAlbGx1IC0gY3VycmVudDogJWxsdSAtICgldSlcbiIsIG5obV9jc3RhdGVzW2lkXS5uYW1lLAorCSAgICAgICBwcmV2aW91c19jb3VudFtpZF1bY3B1XSwgY3VycmVudF9jb3VudFtpZF1bY3B1XSwKKwkgICAgICAgY3B1KTsKKworCWRwcmludCgiJXM6IHRzY19kaWZmOiAlbGx1IC0gY291bnRfZGlmZjogJWxsdSAtIHBlcmNlbnQ6ICUyLmYgKCV1KVxuIiwKKwkgICAgICAgbmhtX2NzdGF0ZXNbaWRdLm5hbWUsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRzY19hdF9tZWFzdXJlX2VuZCAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0LAorCSAgICAgICBjdXJyZW50X2NvdW50W2lkXVtjcHVdIC0gcHJldmlvdXNfY291bnRbaWRdW2NwdV0sCisJICAgICAgICpwZXJjZW50LCBjcHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmhtX3N0YXJ0KHZvaWQpCit7CisJaW50IG51bSwgY3B1OworCXVuc2lnbmVkIGxvbmcgbG9uZyBkYmcsIHZhbDsKKworCW5obV9nZXRfY291bnQoVFNDLCAmdHNjX2F0X21lYXN1cmVfc3RhcnQsIDApOworCisJZm9yIChudW0gPSAwOyBudW0gPCBOSE1fQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJCWlzX3ZhbGlkW2NwdV0gPSAhbmhtX2dldF9jb3VudChudW0sICZ2YWwsIGNwdSk7CisJCQlwcmV2aW91c19jb3VudFtudW1dW2NwdV0gPSB2YWw7CisJCX0KKwl9CisJbmhtX2dldF9jb3VudChUU0MsICZkYmcsIDApOworCWRwcmludCgiVFNDIGRpZmY6ICVsbHVcbiIsIGRiZyAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaG1fc3RvcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBsb25nIGRiZzsKKwlpbnQgbnVtLCBjcHU7CisKKwluaG1fZ2V0X2NvdW50KFRTQywgJnRzY19hdF9tZWFzdXJlX2VuZCwgMCk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IE5ITV9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQkJaXNfdmFsaWRbY3B1XSA9ICFuaG1fZ2V0X2NvdW50KG51bSwgJnZhbCwgY3B1KTsKKwkJCWN1cnJlbnRfY291bnRbbnVtXVtjcHVdID0gdmFsOworCQl9CisJfQorCW5obV9nZXRfY291bnQoVFNDLCAmZGJnLCAwKTsKKwlkcHJpbnQoIlRTQyBkaWZmOiAlbGx1XG4iLCBkYmcgLSB0c2NfYXRfbWVhc3VyZV9lbmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgaW50ZWxfbmhtX21vbml0b3I7CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IqIGludGVsX25obV9yZWdpc3Rlcih2b2lkKSB7CisJaW50IG51bTsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIShjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX0lOVl9UU0MpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfQVBFUkYpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEZyZWUgdGhpcyBhdCBwcm9ncmFtIHRlcm1pbmF0aW9uICovCisJaXNfdmFsaWQgPSBjYWxsb2MoY3B1X2NvdW50LCBzaXplb2YgKGludCkpOworCWZvciAobnVtID0gMDsgbnVtIDwgTkhNX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJcHJldmlvdXNfY291bnRbbnVtXSA9IGNhbGxvYyAoY3B1X2NvdW50LAorCQkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJCWN1cnJlbnRfY291bnRbbnVtXSAgPSBjYWxsb2MgKGNwdV9jb3VudCwKKwkJCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCX0KKworCWludGVsX25obV9tb25pdG9yLm5hbWVfbGVuID0gc3RybGVuKGludGVsX25obV9tb25pdG9yLm5hbWUpOworCXJldHVybiAmaW50ZWxfbmhtX21vbml0b3I7Cit9CisKK3ZvaWQgaW50ZWxfbmhtX3VucmVnaXN0ZXIodm9pZCkgeworCWludCBudW07CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IE5ITV9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCWZyZWUocHJldmlvdXNfY291bnRbbnVtXSk7CisJCWZyZWUoY3VycmVudF9jb3VudFtudW1dKTsKKwl9CisJZnJlZShpc192YWxpZCk7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgaW50ZWxfbmhtX21vbml0b3IgPSB7CisJLm5hbWUJCQk9ICJOZWhhbGVtIiwKKwkuaHdfc3RhdGVzX251bQkJPSBOSE1fQ1NUQVRFX0NPVU5ULAorCS5od19zdGF0ZXMJCT0gbmhtX2NzdGF0ZXMsCisJLnN0YXJ0CQkJPSBuaG1fc3RhcnQsCisJLnN0b3AJCQk9IG5obV9zdG9wLAorCS5kb19yZWdpc3RlcgkJPSBpbnRlbF9uaG1fcmVnaXN0ZXIsCisJLnVucmVnaXN0ZXIJCT0gaW50ZWxfbmhtX3VucmVnaXN0ZXIsCisJLm5lZWRzX3Jvb3QJCT0gMSwKKwkub3ZlcmZsb3dfcwkJPSA5MjIwMDAwMDAgLyogOTIyMzM3MjAzIHNlY29uZHMgVFNDIG92ZXJmbG93CisJCQkJCSAgICAgICBhdCAyMEdIeiAqLworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2M4MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmMKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqICBCYXNlZCBvbiBMZW4gQnJvd24ncyA8bGVuYkBrZXJuZWwub3JnPiB0dXJib3N0YXQgdG9vbC4KKyAqLworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisKKyNkZWZpbmUgTVNSX1BLR19DMl9SRVNJREVOQ1kJMHg2MEQKKyNkZWZpbmUgTVNSX1BLR19DN19SRVNJREVOQ1kJMHgzRkEKKyNkZWZpbmUgTVNSX0NPUkVfQzdfUkVTSURFTkNZCTB4M0ZFCisKKyNkZWZpbmUgTVNSX1RTQwkweDEwCisKK2VudW0gaW50ZWxfc25iX2lkIHsgQzcgPSAwLCBQQzIsIFBDNywgU05CX0NTVEFURV9DT1VOVCwgVFNDID0gMHhGRkZGIH07CisKK3N0YXRpYyBpbnQgc25iX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBzZWxmX2lkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJIHVuc2lnbmVkIGludCBjcHUpOworCitzdGF0aWMgY3N0YXRlX3Qgc25iX2NzdGF0ZXNbU05CX0NTVEFURV9DT1VOVF0gPSB7CisJeworCQkubmFtZQkJCT0gIkM3IiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgQ29yZSBDNyIpLAorCQkuaWQJCQk9IEM3LAorCQkucmFuZ2UJCQk9IFJBTkdFX0NPUkUsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IHNuYl9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJQQzIiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBQYWNrYWdlIEMyIiksCisJCS5pZAkJCT0gUEMyLAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IHNuYl9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJQQzciLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBQYWNrYWdlIEM3IiksCisJCS5pZAkJCT0gUEM3LAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IHNuYl9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9zdGFydDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfZW5kOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqcHJldmlvdXNfY291bnRbU05CX0NTVEFURV9DT1VOVF07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpjdXJyZW50X2NvdW50W1NOQl9DU1RBVEVfQ09VTlRdOworLyogdmFsaWQgZmxhZyBmb3IgYWxsIENQVXMuIElmIGEgTVNSIHJlYWQgZmFpbGVkIGl0IHdpbGwgYmUgemVybyAqLworc3RhdGljIGludCAqaXNfdmFsaWQ7CisKK3N0YXRpYyBpbnQgc25iX2dldF9jb3VudChlbnVtIGludGVsX3NuYl9pZCBpZCwgdW5zaWduZWQgbG9uZyBsb25nICp2YWwsIHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IG1zcjsKKworCXN3aXRjaChpZCkgeworCWNhc2UgQzc6CisJCW1zciA9IE1TUl9DT1JFX0M3X1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBQQzI6CisJCW1zciA9IE1TUl9QS0dfQzJfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIFBDNzoKKwkJbXNyID0gTVNSX1BLR19DN19SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgVFNDOgorCQltc3IgPSBNU1JfVFNDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfTsKKwlpZiAocmVhZF9tc3IoY3B1LCBtc3IsIHZhbCkpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmJfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IGlkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJIHVuc2lnbmVkIGludCBjcHUpCit7CisJKnBlcmNlbnQgPSAwLjA7CisKKwlpZiAoIWlzX3ZhbGlkW2NwdV0pCisJCXJldHVybiAtMTsKKworCSpwZXJjZW50ID0gKDEwMC4wICogKGN1cnJlbnRfY291bnRbaWRdW2NwdV0gLSBwcmV2aW91c19jb3VudFtpZF1bY3B1XSkpIC8KKwkJKHRzY19hdF9tZWFzdXJlX2VuZCAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0KTsKKworCWRwcmludCgiJXM6IHByZXZpb3VzOiAlbGx1IC0gY3VycmVudDogJWxsdSAtICgldSlcbiIsIHNuYl9jc3RhdGVzW2lkXS5uYW1lLAorCSAgICAgICBwcmV2aW91c19jb3VudFtpZF1bY3B1XSwgY3VycmVudF9jb3VudFtpZF1bY3B1XSwKKwkgICAgICAgY3B1KTsKKworCWRwcmludCgiJXM6IHRzY19kaWZmOiAlbGx1IC0gY291bnRfZGlmZjogJWxsdSAtIHBlcmNlbnQ6ICUyLmYgKCV1KVxuIiwKKwkgICAgICAgc25iX2NzdGF0ZXNbaWRdLm5hbWUsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRzY19hdF9tZWFzdXJlX2VuZCAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0LAorCSAgICAgICBjdXJyZW50X2NvdW50W2lkXVtjcHVdCisJICAgICAgIC0gcHJldmlvdXNfY291bnRbaWRdW2NwdV0sCisJICAgICAgICpwZXJjZW50LCBjcHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25iX3N0YXJ0KHZvaWQpCit7CisJaW50IG51bSwgY3B1OworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IFNOQl9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQkJc25iX2dldF9jb3VudChudW0sICZ2YWwsIGNwdSk7CisJCQlwcmV2aW91c19jb3VudFtudW1dW2NwdV0gPSB2YWw7CisJCX0KKwl9CisJc25iX2dldF9jb3VudChUU0MsICZ0c2NfYXRfbWVhc3VyZV9zdGFydCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25iX3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCBudW0sIGNwdTsKKworCXNuYl9nZXRfY291bnQoVFNDLCAmdHNjX2F0X21lYXN1cmVfZW5kLCAwKTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgU05CX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCQlpc192YWxpZFtjcHVdID0gIXNuYl9nZXRfY291bnQobnVtLCAmdmFsLCBjcHUpOworCQkJY3VycmVudF9jb3VudFtudW1dW2NwdV0gPSB2YWw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgaW50ZWxfc25iX21vbml0b3I7CisKK3N0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yKiBzbmJfcmVnaXN0ZXIodm9pZCkgeworCisJaW50IG51bTsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTAorCSAgICB8fCBjcHVwb3dlcl9jcHVfaW5mby5mYW1pbHkgIT0gNikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8ubW9kZWwgIT0gMHgyQQorCSAgICAmJiBjcHVwb3dlcl9jcHVfaW5mby5tb2RlbCAhPSAweDJEKQorCQlyZXR1cm4gTlVMTDsKKworCWlzX3ZhbGlkID0gY2FsbG9jKGNwdV9jb3VudCwgc2l6ZW9mIChpbnQpKTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IFNOQl9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCXByZXZpb3VzX2NvdW50W251bV0gPSBjYWxsb2MgKGNwdV9jb3VudCwKKwkJCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCQljdXJyZW50X2NvdW50W251bV0gID0gY2FsbG9jIChjcHVfY291bnQsCisJCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwl9CisJaW50ZWxfc25iX21vbml0b3IubmFtZV9sZW4gPSBzdHJsZW4oaW50ZWxfc25iX21vbml0b3IubmFtZSk7CisJcmV0dXJuICZpbnRlbF9zbmJfbW9uaXRvcjsKK30KKwordm9pZCBzbmJfdW5yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisJZnJlZShpc192YWxpZCk7CisJZm9yIChudW0gPSAwOyBudW0gPCBTTkJfQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmcmVlKHByZXZpb3VzX2NvdW50W251bV0pOworCQlmcmVlKGN1cnJlbnRfY291bnRbbnVtXSk7CisJfQorfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGludGVsX3NuYl9tb25pdG9yID0geworCS5uYW1lCQkJPSAiU2FuZHlCcmlkZ2UiLAorCS5od19zdGF0ZXMJCT0gc25iX2NzdGF0ZXMsCisJLmh3X3N0YXRlc19udW0JCT0gU05CX0NTVEFURV9DT1VOVCwKKwkuc3RhcnQJCQk9IHNuYl9zdGFydCwKKwkuc3RvcAkJCT0gc25iX3N0b3AsCisJLmRvX3JlZ2lzdGVyCQk9IHNuYl9yZWdpc3RlciwKKwkudW5yZWdpc3RlcgkJPSBzbmJfdW5yZWdpc3RlciwKKwkubmVlZHNfcm9vdAkJPSAxLAorCS5vdmVyZmxvd19zCQk9IDkyMjAwMDAwMCAvKiA5MjIzMzcyMDMgc2Vjb25kcyBUU0Mgb3ZlcmZsb3cKKwkJCQkJICAgICAgIGF0IDIwR0h6ICovCit9OworI2VuZGlmIC8qIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8K