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+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qIHN0cnVjdCB0aGF0IGhvbGRzIHRoZSByZXF1aXJlZCBjb25maWcgcGFyYW1ldGVycyAqLworc3RydWN0IGNvbmZpZworeworCWxvbmcgc2xlZXA7CQkvKiBzbGVlcCB0aW1lIGluILVzICovCisJbG9uZyBsb2FkOwkJLyogbG9hZCB0aW1lIGluILVzICovCisJbG9uZyBzbGVlcF9zdGVwOwkvKiB0aW1lIHZhbHVlIHdoaWNoIGNoYW5nZXMgdGhlCisJCQkJICogc2xlZXAgdGltZSBhZnRlciBldmVyeSByb3VuZCBpbiC1cyAqLworCWxvbmcgbG9hZF9zdGVwOwkJLyogdGltZSB2YWx1ZSB3aGljaCBjaGFuZ2VzIHRoZQorCQkJCSAqIGxvYWQgdGltZSBhZnRlciBldmVyeSByb3VuZCBpbiC1cyAqLworCXVuc2lnbmVkIGludCBjeWNsZXM7CS8qIGNhbGN1bGF0aW9uIGN5Y2xlcyB3aXRoIHRoZSBzYW1lIHNsZWVwL2xvYWQgdGltZSAqLworCXVuc2lnbmVkIGludCByb3VuZHM7CS8qIGNhbGN1bGF0aW9uIHJvdW5kcyB3aXRoIGl0ZXJhdGVkIHNsZWVwL2xvYWQgdGltZSAqLworCXVuc2lnbmVkIGludCBjcHU7CS8qIGNwdSBmb3Igd2hpY2ggdGhlIGFmZmluaXR5IGlzIHNldCAqLworCWNoYXIgZ292ZXJub3JbMTVdOwkvKiBjcHVmcmVxIGdvdmVybm9yICovCisJZW51bSBzY2hlZF9wcmlvCQkvKiBwb3NzaWJsZSBzY2hlZHVsZXIgcHJpb3JpdGllcyAqLworCXsKKwkJU0NIRURfRVJSPS0xLFNDSEVEX0hJR0gsIFNDSEVEX0RFRkFVTFQsIFNDSEVEX0xPVworCX0gcHJpbzsKKworCXVuc2lnbmVkIGludCB2ZXJib3NlOwkvKiB2ZXJib3NlIG91dHB1dCAqLworCUZJTEUgKm91dHB1dDsJCS8qIGxvZ2ZpbGUgKi8KKwljaGFyICpvdXRwdXRfZmlsZW5hbWU7CS8qIGxvZ2ZpbGUgbmFtZSwgbXVzdCBiZSBmcmVlZCBhdCB0aGUgZW5kCisJCQkJICAgaWYgb3V0cHV0ICE9IE5VTEwgYW5kIG91dHB1dCAhPSBzdGRvdXQqLworfTsKKworZW51bSBzY2hlZF9wcmlvIHN0cmluZ190b19wcmlvKGNvbnN0IGNoYXIgKnN0cik7CisKK0ZJTEUgKnByZXBhcmVfb3V0cHV0KGNvbnN0IGNoYXIgKmRpcik7CisKK2ludCBwcmVwYXJlX2NvbmZpZyhjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY29uZmlnICpjb25maWcpOworc3RydWN0IGNvbmZpZyAqcHJlcGFyZV9kZWZhdWx0X2NvbmZpZygpOworCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlM2E4MmUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uYwpAQCAtMCwwICsxLDE4OCBAQAorLyogIGNwdWZyZXEtYmVuY2ggQ1BVRnJlcSBtaWNyb2JlbmNobWFyaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIEtvcm5hY2tlciA8Y2tvcm5hY2tlckBzdXNlLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHNjaGVkLmg+CisKKyNpbmNsdWRlIDxjcHVmcmVxLmg+CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKworLyoqCisgKiByZXR1cm5zIHRpbWUgc2luY2UgZXBvY2ggaW4gtXMKKyAqCisgKiBAcmV0dmFsIHRpbWUKKyAqKi8KKworbG9uZyBsb25nIGludCBnZXRfdGltZSgpCit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCisJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCisJcmV0dXJuIChsb25nIGxvbmcgaW50KShub3cudHZfc2VjICogMTAwMDAwMExMICsgbm93LnR2X3VzZWMpOworfQorCisvKioKKyAqIHNldHMgdGhlIGNwdWZyZXEgZ292ZXJub3IKKyAqCisgKiBAcGFyYW0gZ292ZXJub3IgY3B1ZnJlcSBnb3Zlcm5vciBuYW1lCisgKiBAcGFyYW0gY3B1IGNwdSBmb3Igd2hpY2ggdGhlIGdvdmVybm9yIHNob3VsZCBiZSBzZXQKKyAqCisgKiBAcmV0dmFsIDAgb24gc3VjY2VzcworICogQHJldHZhbCAtMSB3aGVuIGZhaWxlZAorICoqLworCitpbnQgc2V0X2NwdWZyZXFfZ292ZXJub3IoY2hhciAqZ292ZXJub3IsIHVuc2lnbmVkIGludCBjcHUpCit7CisKKwlkcHJpbnRmKCJzZXQgJXMgYXMgY3B1ZnJlcSBnb3Zlcm5vclxuIiwgZ292ZXJub3IpOworCisJaWYgKGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpICE9IDApIHsKKwkJcGVycm9yKCJjcHVmcmVxX2NwdV9leGlzdHMiKTsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogY3B1ICV1IGRvZXMgbm90IGV4aXN0XG4iLCBjcHUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9nb3Zlcm5vcihjcHUsIGdvdmVybm9yKSAhPSAwKSB7CisJCXBlcnJvcigiY3B1ZnJlcV9tb2RpZnlfcG9saWN5X2dvdmVybm9yIik7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHVuYWJsZSB0byBzZXQgJXMgZ292ZXJub3JcbiIsIGdvdmVybm9yKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHNldHMgY3B1IGFmZmluaXR5IGZvciB0aGUgcHJvY2VzcworICoKKyAqIEBwYXJhbSBjcHUgY3B1IyB0byB3aGljaCB0aGUgYWZmaW5pdHkgc2hvdWxkIGJlIHNldAorICoKKyAqIEByZXR2YWwgMCBvbiBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIHdoZW4gc2V0dGluZyB0aGUgYWZmaW5pdHkgZmFpbGVkCisgKiovCisKK2ludCBzZXRfY3B1X2FmZmluaXR5KHVuc2lnbmVkIGludCBjcHUpCit7CisJY3B1X3NldF90IGNwdXNldDsKKwkKKwlDUFVfWkVSTygmY3B1c2V0KTsKKwlDUFVfU0VUKGNwdSwgJmNwdXNldCk7CisKKwlkcHJpbnRmKCJzZXQgYWZmaW5pdHkgdG8gY3B1ICMldVxuIiwgY3B1KTsKKworCWlmIChzY2hlZF9zZXRhZmZpbml0eShnZXRwaWQoKSwgc2l6ZW9mKGNwdV9zZXRfdCksICZjcHVzZXQpIDwgMCkgeworCQlwZXJyb3IoInNjaGVkX3NldGFmZmluaXR5Iik7CisJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogdW5hYmxlIHRvIHNldCBjcHUgYWZmaW5pdHlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2V0cyB0aGUgcHJvY2VzcyBwcmlvcml0eSBwYXJhbWV0ZXIKKyAqCisgKiBAcGFyYW0gcHJpb3JpdHkgcHJpb3JpdHkgdmFsdWUKKyAqCisgKiBAcmV0dmFsIDAgb24gc3VjY2VzcworICogQHJldHZhbCAtMSB3aGVuIHNldHRpbmcgdGhlIHByaW9yaXR5IGZhaWxlZAorICoqLworCitpbnQgc2V0X3Byb2Nlc3NfcHJpb3JpdHkoaW50IHByaW9yaXR5KQoreworCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKworCWRwcmludGYoInNldCBzY2hlZHVsZXIgcHJpb3JpdHkgdG8gJWlcbiIsIHByaW9yaXR5KTsKKworCXBhcmFtLnNjaGVkX3ByaW9yaXR5ID0gcHJpb3JpdHk7CisKKwlpZiAoc2NoZWRfc2V0c2NoZWR1bGVyKDAsIFNDSEVEVUxFUiwgJnBhcmFtKSA8IDApIHsKKwkJcGVycm9yKCJzY2hlZF9zZXRzY2hlZHVsZXIiKTsKKwkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiB1bmFibGUgdG8gc2V0IHNjaGVkdWxlciBwcmlvcml0eVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBub3RpZnlzIHRoZSB1c2VyIHRoYXQgdGhlIGJlbmNobWFyayBtYXkgcnVuIHNvbWUgdGltZSAKKyAqCisgKiBAcGFyYW0gY29uZmlnIGJlbmNobWFyayBjb25maWcgdmFsdWVzCisgKgorICoqLworCit2b2lkIHByZXBhcmVfdXNlcihjb25zdCBzdHJ1Y3QgY29uZmlnICpjb25maWcpCit7CisJdW5zaWduZWQgbG9uZyBzbGVlcF90aW1lID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvYWRfdGltZSA9IDA7CisJdW5zaWduZWQgaW50IHJvdW5kOworCisJZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgY29uZmlnLT5yb3VuZHM7IHJvdW5kKyspIHsKKwkJc2xlZXBfdGltZSArPSAgMiAqIGNvbmZpZy0+Y3ljbGVzICogKGNvbmZpZy0+c2xlZXAgKyBjb25maWctPnNsZWVwX3N0ZXAgKiByb3VuZCk7CisJCWxvYWRfdGltZSArPSAyICogY29uZmlnLT5jeWNsZXMgKiAoY29uZmlnLT5sb2FkICsgY29uZmlnLT5sb2FkX3N0ZXAgKiByb3VuZCkgKyAoY29uZmlnLT5sb2FkICsgY29uZmlnLT5sb2FkX3N0ZXAgKiByb3VuZCAqIDQpOworCX0KKworCWlmIChjb25maWctPnZlcmJvc2UgfHwgY29uZmlnLT5vdXRwdXQgIT0gc3Rkb3V0KQorCQlwcmludGYoImFwcHJveC4gdGVzdCBkdXJhdGlvbjogJWltXG4iLAorCQkgICAgICAgKGludCkoKHNsZWVwX3RpbWUgKyBsb2FkX3RpbWUpIC8gNjAwMDAwMDApKTsKK30KKworLyoqCisgKiBzZXRzIHVwIHRoZSBjcHUgYWZmaW5pdHkgYW5kIHNjaGVkdWxlciBwcmlvcml0eQorICoKKyAqIEBwYXJhbSBjb25maWcgYmVuY2htYXJrIGNvbmZpZyB2YWx1ZXMKKyAqCisgKiovCisKK3ZvaWQgcHJlcGFyZV9zeXN0ZW0oY29uc3Qgc3RydWN0IGNvbmZpZyAqY29uZmlnKQoreworCWlmIChjb25maWctPnZlcmJvc2UpCisJCXByaW50Zigic2V0IGNwdSBhZmZpbml0eSB0byBjcHUgIyV1XG4iLCBjb25maWctPmNwdSk7CisKKwlzZXRfY3B1X2FmZmluaXR5KGNvbmZpZy0+Y3B1KTsKKworCXN3aXRjaCAoY29uZmlnLT5wcmlvKSB7CisJY2FzZSBTQ0hFRF9ISUdIOgorCQlpZiAoY29uZmlnLT52ZXJib3NlKQorCQkJcHJpbnRmKCJoaWdoIHByaW9yaXR5IGNvbmRpdGlvbiByZXF1ZXN0ZWRcbiIpOworCisJCXNldF9wcm9jZXNzX3ByaW9yaXR5KFBSSU9SSVRZX0hJR0gpOworCQlicmVhazsKKwljYXNlIFNDSEVEX0xPVzoKKwkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCXByaW50ZigibG93IHByaW9yaXR5IGNvbmRpdGlvbiByZXF1ZXN0ZWRcbiIpOworCisJCXNldF9wcm9jZXNzX3ByaW9yaXR5KFBSSU9SSVRZX0xPVyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChjb25maWctPnZlcmJvc2UpCisJCQlwcmludGYoImRlZmF1bHQgcHJpb3JpdHkgY29uZGl0aW9uIHJlcXVlc3RlZFxuIik7CisKKwkJc2V0X3Byb2Nlc3NfcHJpb3JpdHkoUFJJT1JJVFlfREVGQVVMVCk7CisJfQorfQorCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOGM4NTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uaApAQCAtMCwwICsxLDI5IEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJwYXJzZS5oIgorCitsb25nIGxvbmcgZ2V0X3RpbWUoKTsKKworaW50IHNldF9jcHVmcmVxX2dvdmVybm9yKGNoYXIgKmdvdmVybm9yLCB1bnNpZ25lZCBpbnQgY3B1KTsKK2ludCBzZXRfY3B1X2FmZmluaXR5KHVuc2lnbmVkIGludCBjcHUpOworaW50IHNldF9wcm9jZXNzX3ByaW9yaXR5KGludCBwcmlvcml0eSk7CisKK3ZvaWQgcHJlcGFyZV91c2VyKGNvbnN0IHN0cnVjdCBjb25maWcgKmNvbmZpZyk7Cit2b2lkIHByZXBhcmVfc3lzdGVtKGNvbnN0IHN0cnVjdCBjb25maWcgKmNvbmZpZyk7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9idWlsZC9jY2R2LmMgYi90b29scy9wb3dlci9jcHVwb3dlci9idWlsZC9jY2R2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhZTlkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2J1aWxkL2NjZHYuYwpAQCAtMCwwICsxLDM4NyBAQAorLyogY2Nkdi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIGJ5IE1pa2UgR2xlYXNvbiwgTmNGVFAgU29mdHdhcmUuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNkZWZpbmUgU0VUQ09MT1JfU1VDQ0VTUwkoZ0FOU0lFc2NhcGVzID8gIlwwMzNcMTMzMTszMm0iIDogIiIpCisjZGVmaW5lIFNFVENPTE9SX0ZBSUxVUkUJKGdBTlNJRXNjYXBlcyA/ICJcMDMzXDEzMzE7MzFtIiA6ICIiKQorI2RlZmluZSBTRVRDT0xPUl9XQVJOSU5HCShnQU5TSUVzY2FwZXMgPyAiXDAzM1wxMzMxOzMzbSIgOiAiIikKKyNkZWZpbmUgU0VUQ09MT1JfTk9STUFMCQkoZ0FOU0lFc2NhcGVzID8gIlwwMzNcMTMzMDszOW0iIDogIiIpCisKKyNkZWZpbmUgVEVYVF9CTE9DS19TSVpFIDgxOTIKKyNkZWZpbmUgSU5ERU5UIDIKKworI2RlZmluZSBURVJNUyAidnQxMDA6dnQxMDI6dnQyMjA6dnQzMjA6eHRlcm06eHRlcm0tY29sb3I6YW5zaTpsaW51eDpzY290ZXJtOnNjb2Fuc2k6ZHR0ZXJtOmNvbnMyNTpjeWd3aW4iCisKK3NpemVfdCBnTkJ1ZlVzZWQgPSAwLCBnTkJ1ZkFsbG9jYXRlZCA9IDA7CitjaGFyICpnQnVmID0gTlVMTDsKK2ludCBnQ0NQSUQ7CitjaGFyIGdBY3Rpb25bMjAwXSA9ICIiOworY2hhciBnVGFyZ2V0WzIwMF0gPSAiIjsKK2NoYXIgZ0FyWzMyXSA9ICIiOworY2hhciBnQXJMaWJyYXJ5VGFyZ2V0WzY0XSA9ICIiOworaW50IGdEdW1wQ21kQXJncyA9IDA7CitjaGFyIGdBcmdzU3RyWzEwMDBdOworaW50IGdDb2x1bW5zID0gODA7CitpbnQgZ0FOU0lFc2NhcGVzID0gMDsKK2ludCBnRXhpdFN0YXR1cyA9IDk1OworCitzdGF0aWMgdm9pZCBEdW1wRm9ybWF0dGVkT3V0cHV0KHZvaWQpCit7CisJY2hhciAqY3A7CisJY2hhciBzcGFjZXNbOCArIDFdID0gIiAgICAgICAgIjsKKwljaGFyICpzYXZlZDsKKwlpbnQgY3VyY29sOworCWludCBpOworCisJY3VyY29sID0gMDsKKwlzYXZlZCA9IE5VTEw7CisJZm9yIChjcCA9IGdCdWYgKyAoKGdEdW1wQ21kQXJncyA9PSAwKSA/IHN0cmxlbihnQXJnc1N0cikgOiAwKTsgOyBjcCsrKSB7CisJCWlmICgqY3AgPT0gJ1wwJykgeworCQkJaWYgKHNhdmVkICE9IE5VTEwpIHsKKwkJCQljcCA9IHNhdmVkOworCQkJCXNhdmVkID0gTlVMTDsKKwkJCX0gZWxzZSBicmVhazsKKwkJfQorCQlpZiAoKmNwID09ICdccicpCisJCQljb250aW51ZTsKKwkJaWYgKCpjcCA9PSAnXHQnKSB7CisJCQlzYXZlZCA9IGNwICsgMTsKKwkJCWNwID0gc3BhY2VzICsgOCAtICg4IC0gKChjdXJjb2wgLSBJTkRFTlQgLSAxKSAlIDgpKTsKKwkJfQorCQlpZiAoY3VyY29sID09IDApIHsKKwkJCWZvciAoaSA9IElOREVOVDsgLS1pID49IDA7ICkKKwkJCQlwdXRjaGFyKCcgJyk7CisJCQljdXJjb2wgPSBJTkRFTlQ7CisJCX0KKwkJcHV0Y2hhcigqY3ApOworCQlpZiAoKytjdXJjb2wgPT0gKGdDb2x1bW5zIC0gMSkpIHsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQljdXJjb2wgPSAwOworCQl9IGVsc2UgaWYgKCpjcCA9PSAnXG4nKQorCQkJY3VyY29sID0gMDsKKwl9CisJZnJlZShnQnVmKTsKK30JLyogRHVtcEZvcm1hdHRlZE91dHB1dCAqLworCisKKworLyogRGlmZnRpbWUoKSwgb25seSBmb3IgdGltZXZhbCBzdHJ1Y3R1cmVzLiAgKi8KK3N0YXRpYyB2b2lkIFRpbWVWYWxTdWJ0cmFjdChzdHJ1Y3QgdGltZXZhbCAqdGRpZmYsIHN0cnVjdCB0aW1ldmFsICp0MSwgc3RydWN0IHRpbWV2YWwgKnQwKQoreworCXRkaWZmLT50dl9zZWMgPSB0MS0+dHZfc2VjIC0gdDAtPnR2X3NlYzsKKwl0ZGlmZi0+dHZfdXNlYyA9IHQxLT50dl91c2VjIC0gdDAtPnR2X3VzZWM7CisJaWYgKHRkaWZmLT50dl91c2VjIDwgMCkgeworCQl0ZGlmZi0+dHZfc2VjLS07CisJCXRkaWZmLT50dl91c2VjICs9IDEwMDAwMDA7CisJfQorfQkvKiBUaW1lVmFsU3VidHJhY3QgKi8KKworCisKK3N0YXRpYyB2b2lkIFdhaXQodm9pZCkKK3sKKwlpbnQgcGlkMiwgc3RhdHVzOworCisJZG8geworCQlzdGF0dXMgPSAwOworCQlwaWQyID0gKGludCkgd2FpdHBpZChnQ0NQSUQsICZzdGF0dXMsIDApOworCX0gd2hpbGUgKCgocGlkMiA+PSAwKSAmJiAoISBXSUZFWElURUQoc3RhdHVzKSkpIHx8ICgocGlkMiA8IDApICYmIChlcnJubyA9PSBFSU5UUikpKTsKKwlpZiAoV0lGRVhJVEVEKHN0YXR1cykpCisJCWdFeGl0U3RhdHVzID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKK30JLyogV2FpdCAqLworCisKKworc3RhdGljIGludCBTbHVycFByb2dyZXNzKGludCBmZCkKK3sKKwljaGFyIHMxWzcxXTsKKwljaGFyICpuZXdidWY7CisJaW50IG5yZWFkeTsKKwlzaXplX3QgbnRvcmVhZDsKKwlzc2l6ZV90IG5yZWFkOworCXN0cnVjdCB0aW1ldmFsIG5vdywgdG5leHQsIHRsZWZ0OworCWZkX3NldCBzczsKKwlmZF9zZXQgc3MyOworCWNvbnN0IGNoYXIgKnRyYWlsID0gIi8tXFx8IiwgKnRyYWlsY3A7CisKKwl0cmFpbGNwID0gdHJhaWw7CisJc25wcmludGYoczEsIHNpemVvZihzMSksICIlcyVzJXMuLi4gIiwgZ0FjdGlvbiwgZ1RhcmdldFswXSA/ICIgIiA6ICIiLCBnVGFyZ2V0KTsKKwlwcmludGYoIlxyJS03MHMlLTlzIiwgczEsICIiKTsKKwlmZmx1c2goc3Rkb3V0KTsKKworCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKwl0bmV4dCA9IG5vdzsKKwl0bmV4dC50dl9zZWMrKzsKKwl0bGVmdC50dl9zZWMgPSAxOworCXRsZWZ0LnR2X3VzZWMgPSAwOworCUZEX1pFUk8oJnNzMik7CisJRkRfU0VUKGZkLCAmc3MyKTsKKwlmb3IoOzspIHsKKwkJaWYgKGdOQnVmVXNlZCA9PSAoZ05CdWZBbGxvY2F0ZWQgLSAxKSkgeworCQkJaWYgKChuZXdidWYgPSAoY2hhciAqKSByZWFsbG9jKGdCdWYsIGdOQnVmQWxsb2NhdGVkICsgVEVYVF9CTE9DS19TSVpFKSkgPT0gTlVMTCkgeworCQkJCXBlcnJvcigiY2NkdjogcmVhbGxvYyIpOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJZ05CdWZBbGxvY2F0ZWQgKz0gVEVYVF9CTE9DS19TSVpFOworCQkJZ0J1ZiA9IG5ld2J1ZjsKKwkJfQorCQlmb3IgKDs7KSB7CisJCQlzcyA9IHNzMjsKKwkJCW5yZWFkeSA9IHNlbGVjdChmZCArIDEsICZzcywgTlVMTCwgTlVMTCwgJnRsZWZ0KTsKKwkJCWlmIChucmVhZHkgPT0gMSkKKwkJCQlicmVhazsKKwkJCWlmIChucmVhZHkgPCAwKSB7CisJCQkJaWYgKGVycm5vICE9IEVJTlRSKSB7CisJCQkJCXBlcnJvcigiY2Nkdjogc2VsZWN0Iik7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKwkJCWlmICgobm93LnR2X3NlYyA+IHRuZXh0LnR2X3NlYykgfHwgKChub3cudHZfc2VjID09IHRuZXh0LnR2X3NlYykgJiYgKG5vdy50dl91c2VjID49IHRuZXh0LnR2X3VzZWMpKSkgeworCQkJCXRuZXh0ID0gbm93OworCQkJCXRuZXh0LnR2X3NlYysrOworCQkJCXRsZWZ0LnR2X3NlYyA9IDE7CisJCQkJdGxlZnQudHZfdXNlYyA9IDA7CisJCQkJcHJpbnRmKCJcciUtNzFzJWMlLTdzIiwgczEsICp0cmFpbGNwLCAiIik7CisJCQkJZmZsdXNoKHN0ZG91dCk7CisJCQkJaWYgKCorK3RyYWlsY3AgPT0gJ1wwJykKKwkJCQkJdHJhaWxjcCA9IHRyYWlsOworCQkJfSBlbHNlIHsKKwkJCQlUaW1lVmFsU3VidHJhY3QoJnRsZWZ0LCAmdG5leHQsICZub3cpOworCQkJfQorCQl9CisJCW50b3JlYWQgPSAoZ05CdWZBbGxvY2F0ZWQgLSBnTkJ1ZlVzZWQgLSAxKTsKKwkJbnJlYWQgPSByZWFkKGZkLCBnQnVmICsgZ05CdWZVc2VkLCBudG9yZWFkKTsKKwkJaWYgKG5yZWFkIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJcGVycm9yKCJjY2R2OiByZWFkIik7CisJCQlyZXR1cm4gKC0xKTsKKwkJfSBlbHNlIGlmIChucmVhZCA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCQlnTkJ1ZlVzZWQgKz0gbnJlYWQ7CisJCWdCdWZbZ05CdWZVc2VkXSA9ICdcMCc7CisJfQorCXNucHJpbnRmKHMxLCBzaXplb2YoczEpLCAiJXMlcyVzOiAiLCBnQWN0aW9uLCBnVGFyZ2V0WzBdID8gIiAiIDogIiIsIGdUYXJnZXQpOworCVdhaXQoKTsKKwlpZiAoZ0V4aXRTdGF0dXMgPT0gMCkgeworCQlwcmludGYoIlxyJS03MHMiLCBzMSk7CisJCXByaW50ZigiWyVzJXMlc10iLCAoKGdOQnVmVXNlZCAtIHN0cmxlbihnQXJnc1N0cikpIDwgNCkgPyBTRVRDT0xPUl9TVUNDRVNTIDogU0VUQ09MT1JfV0FSTklORywgIk9LIiwgU0VUQ09MT1JfTk9STUFMKTsKKwkJcHJpbnRmKCIlLTVzXG4iLCAiICIpOworCX0gZWxzZSB7CisJCXByaW50ZigiXHIlLTcwcyIsIHMxKTsKKwkJcHJpbnRmKCJbJXMlcyVzXSIsIFNFVENPTE9SX0ZBSUxVUkUsICJFUlJPUiIsIFNFVENPTE9SX05PUk1BTCk7CisJCXByaW50ZigiJS0yc1xuIiwgIiAiKTsKKwkJZ0R1bXBDbWRBcmdzID0gMTsJLyogcHJpbnQgY21kIHdoZW4gdGhlcmUgYXJlIGVycm9ycyAqLworCX0KKwlmZmx1c2goc3Rkb3V0KTsKKwlyZXR1cm4gKDApOworfQkvKiBTbHVycFByb2dyZXNzICovCisKKworCitzdGF0aWMgaW50IFNsdXJwQWxsKGludCBmZCkKK3sKKwljaGFyICpuZXdidWY7CisJc2l6ZV90IG50b3JlYWQ7CisJc3NpemVfdCBucmVhZDsKKworCXByaW50ZigiJXMlcyVzLlxuIiwgZ0FjdGlvbiwgZ1RhcmdldFswXSA/ICIgIiA6ICIiLCBnVGFyZ2V0KTsKKwlmZmx1c2goc3Rkb3V0KTsKKworCWZvcig7OykgeworCQlpZiAoZ05CdWZVc2VkID09IChnTkJ1ZkFsbG9jYXRlZCAtIDEpKSB7CisJCQlpZiAoKG5ld2J1ZiA9IChjaGFyICopIHJlYWxsb2MoZ0J1ZiwgZ05CdWZBbGxvY2F0ZWQgKyBURVhUX0JMT0NLX1NJWkUpKSA9PSBOVUxMKSB7CisJCQkJcGVycm9yKCJjY2R2OiByZWFsbG9jIik7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQlnTkJ1ZkFsbG9jYXRlZCArPSBURVhUX0JMT0NLX1NJWkU7CisJCQlnQnVmID0gbmV3YnVmOworCQl9CisJCW50b3JlYWQgPSAoZ05CdWZBbGxvY2F0ZWQgLSBnTkJ1ZlVzZWQgLSAxKTsKKwkJbnJlYWQgPSByZWFkKGZkLCBnQnVmICsgZ05CdWZVc2VkLCBudG9yZWFkKTsKKwkJaWYgKG5yZWFkIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJcGVycm9yKCJjY2R2OiByZWFkIik7CisJCQlyZXR1cm4gKC0xKTsKKwkJfSBlbHNlIGlmIChucmVhZCA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCQlnTkJ1ZlVzZWQgKz0gbnJlYWQ7CisJCWdCdWZbZ05CdWZVc2VkXSA9ICdcMCc7CisJfQorCVdhaXQoKTsKKwlnRHVtcENtZEFyZ3MgPSAoZ0V4aXRTdGF0dXMgIT0gMCk7CS8qIHByaW50IGNtZCB3aGVuIHRoZXJlIGFyZSBlcnJvcnMgKi8KKwlyZXR1cm4gKDApOworfQkvKiBTbHVycEFsbCAqLworCisKKworc3RhdGljIGNvbnN0IGNoYXIgKkJhc2VuYW1lKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqY3A7CisJY3AgPSBzdHJyY2hyKHBhdGgsICcvJyk7CisJaWYgKGNwID09IE5VTEwpCisJCXJldHVybiAocGF0aCk7CisJcmV0dXJuIChjcCArIDEpOworfQkvKiBCYXNlbmFtZSAqLworCisKKworc3RhdGljIGNvbnN0IGNoYXIgKiBFeHRlbnNpb24oY29uc3QgY2hhciAqcGF0aCkKK3sKKwljb25zdCBjaGFyICpjcCA9IHBhdGg7CisJY3AgPSBzdHJyY2hyKHBhdGgsICcuJyk7CisJaWYgKGNwID09IE5VTEwpCisJCXJldHVybiAoIiIpOworCS8vIHByaW50ZigiRXh0ZW5zaW9uPSclcydcbiIsIGNwKTsKKwlyZXR1cm4gKGNwKTsKK30JLyogRXh0ZW5zaW9uICovCisKKworCitzdGF0aWMgdm9pZCBVc2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGNjZHYgL3BhdGgvdG8vY2MgQ0ZMQUdTLi4uXG5cbiIpOworCWZwcmludGYoc3RkZXJyLCAiSSB3cm90ZSB0aGlzIHRvIHJlZHVjZSB0aGUgZGVsdWdlIE1ha2Ugb3V0cHV0IHRvIG1ha2UgZmluZGluZyBhY3R1YWwgcHJvYmxlbXNcbiIpOworCWZwcmludGYoc3RkZXJyLCAiZWFzaWVyLiAgSXQgaXMgaW50ZW5kZWQgdG8gYmUgaW52b2tlZCBmcm9tIE1ha2VmaWxlcywgbGlrZSB0aGlzLiAgSW5zdGVhZCBvZjpcblxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdC5jLm86XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0XHQkKENDKSAkKENGTEFHUykgJChERUZTKSAkKENQUEZMQUdTKSAkPCAtY1xuIik7CisJZnByaW50ZihzdGRlcnIsICJcblJld3JpdGUgeW91ciBydWxlIHNvIGl0IGxvb2tzIGxpa2U6XG5cbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHQuYy5vOlxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdFx0QGNjZHYgJChDQykgJChDRkxBR1MpICQoREVGUykgJChDUFBGTEFHUykgJDwgLWNcblxuIik7CisJZnByaW50ZihzdGRlcnIsICJjY2R2IDEuMS4wIGlzIEZyZWUgdW5kZXIgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4gIEVuam95IVxuIik7CisJZnByaW50ZihzdGRlcnIsICIgIC0tIE1pa2UgR2xlYXNvbiwgTmNGVFAgU29mdHdhcmUgPGh0dHA6Ly93d3cubmNmdHAuY29tPlxuIik7CisJZXhpdCg5Nik7Cit9CS8qIFVzYWdlICovCisKKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IHBpcGUxWzJdOworCWludCBkZXZudWxsOworCWNoYXIgZW1lcmdbMjU2XTsKKwlpbnQgZmQ7CisJaW50IG5yZWFkOworCWludCBpOworCWludCBjYyA9IDAsIHBjaCA9IDA7CisJY29uc3QgY2hhciAqcXVvdGU7CisKKwlpZiAoYXJnYyA8IDIpCisJCVVzYWdlKCk7CisKKwlzbnByaW50ZihnQWN0aW9uLCBzaXplb2YoZ0FjdGlvbiksICJSdW5uaW5nICVzIiwgQmFzZW5hbWUoYXJndlsxXSkpOworCW1lbXNldChnQXJnc1N0ciwgMCwgc2l6ZW9mKGdBcmdzU3RyKSk7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQkvLyBwcmludGYoImFyZ3ZbJWRdPSclcydcbiIsIGksIGFyZ3ZbaV0pOworCQlxdW90ZSA9IChzdHJjaHIoYXJndltpXSwgJyAnKSAhPSBOVUxMKSA/ICJcIiIgOiAiIjsKKwkJc25wcmludGYoZ0FyZ3NTdHIgKyBzdHJsZW4oZ0FyZ3NTdHIpLCBzaXplb2YoZ0FyZ3NTdHIpIC0gc3RybGVuKGdBcmdzU3RyKSwgIiVzJXMlcyVzJXMiLCAoaSA9PSAxKSA/ICIiIDogIiAiLCBxdW90ZSwgYXJndltpXSwgcXVvdGUsIChpID09IChhcmdjIC0gMSkpID8gIlxuIiA6ICIiKTsKKwkJaWYgKChzdHJjbXAoYXJndltpXSwgIi1vIikgPT0gMCkgJiYgKChpICsgMSkgPCBhcmdjKSkgeworCQkJaWYgKHN0cmNhc2VjbXAoRXh0ZW5zaW9uKGFyZ3ZbaSArIDFdKSwgIi5vIikgIT0gMCkgeworCQkJCXN0cmNweShnQWN0aW9uLCAiTGlua2luZyIpOworCQkJCXNucHJpbnRmKGdUYXJnZXQsIHNpemVvZihnVGFyZ2V0KSwgIiVzIiwgQmFzZW5hbWUoYXJndltpICsgMV0pKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHJjaHIoIi0rIiwgKGludCkgYXJndltpXVswXSkgIT0gTlVMTCkgeworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoc3RybmNhc2VjbXAoRXh0ZW5zaW9uKGFyZ3ZbaV0pLCAiLmMiLCAyKSA9PSAwKSB7CisJCQljYysrOworCQkJc25wcmludGYoZ1RhcmdldCwgc2l6ZW9mKGdUYXJnZXQpLCAiJXMiLCBCYXNlbmFtZShhcmd2W2ldKSk7CisJCQkvLyBwcmludGYoImdUYXJnZXQ9JyVzJ1xuIiwgZ1RhcmdldCk7CisJCX0gZWxzZSBpZiAoKHN0cm5jYXNlY21wKEV4dGVuc2lvbihhcmd2W2ldKSwgIi5oIiwgMikgPT0gMCkgJiYgKGNjID09IDApKSB7CisJCQlwY2grKzsKKwkJCXNucHJpbnRmKGdUYXJnZXQsIHNpemVvZihnVGFyZ2V0KSwgIiVzIiwgQmFzZW5hbWUoYXJndltpXSkpOworCQl9IGVsc2UgaWYgKChpID09IDEpICYmIChzdHJjbXAoQmFzZW5hbWUoYXJndltpXSksICJhciIpID09IDApKSB7CisJCQlzbnByaW50ZihnQXIsIHNpemVvZihnQXIpLCAiJXMiLCBCYXNlbmFtZShhcmd2W2ldKSk7CisJCX0gZWxzZSBpZiAoKGdBckxpYnJhcnlUYXJnZXRbMF0gPT0gJ1wwJykgJiYgKHN0cmNhc2VjbXAoRXh0ZW5zaW9uKGFyZ3ZbaV0pLCAiLmEiKSA9PSAwKSkgeworCQkJc25wcmludGYoZ0FyTGlicmFyeVRhcmdldCwgc2l6ZW9mKGdBckxpYnJhcnlUYXJnZXQpLCAiJXMiLCBCYXNlbmFtZShhcmd2W2ldKSk7CisJCX0KKwl9CisJaWYgKChnQXJbMF0gIT0gJ1wwJykgJiYgKGdBckxpYnJhcnlUYXJnZXRbMF0gIT0gJ1wwJykpIHsKKwkJc3RyY3B5KGdBY3Rpb24sICJDcmVhdGluZyBsaWJyYXJ5Iik7CisJCXNucHJpbnRmKGdUYXJnZXQsIHNpemVvZihnVGFyZ2V0KSwgIiVzIiwgZ0FyTGlicmFyeVRhcmdldCk7CisJfSBlbHNlIGlmIChwY2ggPiAwKSB7CisJCXN0cmNweShnQWN0aW9uLCAiUHJlY29tcGlsaW5nIik7CisJfSBlbHNlIGlmIChjYyA+IDApIHsKKwkJc3RyY3B5KGdBY3Rpb24sICJDb21waWxpbmciKTsKKwl9CisKKwlpZiAocGlwZShwaXBlMSkgPCAwKSB7CisJCXBlcnJvcigiY2NkdjogcGlwZSIpOworCQlleGl0KDk3KTsKKwl9CisKKwkodm9pZCkgY2xvc2UoMCk7CisJZGV2bnVsbCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUiwgMDA2NjYpOworCWlmICgoZGV2bnVsbCAhPSAwKSAmJiAoZHVwMihkZXZudWxsLCAwKSA9PSAwKSkKKwkJY2xvc2UoZGV2bnVsbCk7CisKKwlnQ0NQSUQgPSAoaW50KSBmb3JrKCk7CisJaWYgKGdDQ1BJRCA8IDApIHsKKwkJKHZvaWQpIGNsb3NlKHBpcGUxWzBdKTsKKwkJKHZvaWQpIGNsb3NlKHBpcGUxWzFdKTsKKwkJcGVycm9yKCJjY2R2OiBmb3JrIik7CisJCWV4aXQoOTgpOworCX0gZWxzZSBpZiAoZ0NDUElEID09IDApIHsKKwkJLyogQ2hpbGQgKi8KKwkJKHZvaWQpIGNsb3NlKHBpcGUxWzBdKTsJCS8qIGNsb3NlIHJlYWQgZW5kICovCisJCWlmIChwaXBlMVsxXSAhPSAxKSB7CQkvKiB1c2Ugd3JpdGUgZW5kIG9uIHN0ZG91dCAqLworCQkJKHZvaWQpIGR1cDIocGlwZTFbMV0sIDEpOworCQkJKHZvaWQpIGNsb3NlKHBpcGUxWzFdKTsKKwkJfQorCQkodm9pZCkgZHVwMigxLCAyKTsJCS8qIHVzZSB3cml0ZSBlbmQgb24gc3RkZXJyICovCisJCWV4ZWN2cChhcmd2WzFdLCBhcmd2ICsgMSk7CisJCXBlcnJvcihhcmd2WzFdKTsKKwkJZXhpdCg5OSk7CisJfQorCisJLyogcGFyZW50ICovCisJKHZvaWQpIGNsb3NlKHBpcGUxWzFdKTsJCS8qIGNsb3NlIHdyaXRlIGVuZCAqLworCWZkID0gcGlwZTFbMF07CQkJLyogdXNlIHJlYWQgZW5kICovCisKKwlnQ29sdW1ucyA9IChnZXRlbnYoIkNPTFVNTlMiKSAhPSBOVUxMKSA/IGF0b2koZ2V0ZW52KCJDT0xVTU5TIikpIDogODA7CisJZ0FOU0lFc2NhcGVzID0gKGdldGVudigiVEVSTSIpICE9IE5VTEwpICYmIChzdHJzdHIoVEVSTVMsIGdldGVudigiVEVSTSIpKSAhPSBOVUxMKTsKKwlnQnVmID0gKGNoYXIgKikgbWFsbG9jKFRFWFRfQkxPQ0tfU0laRSk7CisJaWYgKGdCdWYgPT0gTlVMTCkgCisJCWdvdG8gcGFuaWM7CisJZ05CdWZVc2VkID0gMDsKKwlnTkJ1ZkFsbG9jYXRlZCA9IFRFWFRfQkxPQ0tfU0laRTsKKwlpZiAoc3RybGVuKGdBcmdzU3RyKSA8IChnTkJ1ZkFsbG9jYXRlZCAtIDEpKSB7CisJCXN0cmNweShnQnVmLCBnQXJnc1N0cik7CisJCWdOQnVmVXNlZCA9IHN0cmxlbihnQXJnc1N0cik7CisJfQorCisJaWYgKGlzYXR0eSgxKSkgeworCQlpZiAoU2x1cnBQcm9ncmVzcyhmZCkgPCAwKQorCQkJZ290byBwYW5pYzsKKwl9IGVsc2UgeworCQlpZiAoU2x1cnBBbGwoZmQpIDwgMCkKKwkJCWdvdG8gcGFuaWM7CisJfQorCUR1bXBGb3JtYXR0ZWRPdXRwdXQoKTsKKwlleGl0KGdFeGl0U3RhdHVzKTsKKworcGFuaWM6CisJZ0R1bXBDbWRBcmdzID0gMTsJLyogcHJpbnQgY21kIHdoZW4gdGhlcmUgYXJlIGVycm9ycyAqLworCUR1bXBGb3JtYXR0ZWRPdXRwdXQoKTsKKwl3aGlsZSAoKG5yZWFkID0gcmVhZChmZCwgZW1lcmcsIChzaXplX3QpIHNpemVvZihlbWVyZykpKSA+IDApCisJCSh2b2lkKSB3cml0ZSgyLCBlbWVyZywgKHNpemVfdCkgbnJlYWQpOworCVdhaXQoKTsKKwlleGl0KGdFeGl0U3RhdHVzKTsKK30JLyogbWFpbiAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9NYWtlZmlsZSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4Y2MxZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvTWFrZWZpbGUKQEAgLTAsMCArMSwyMCBAQAorZGVmYXVsdDogYWxsCisKK2NlbnRyaW5vLWRlY29kZTogY2VudHJpbm8tZGVjb2RlLmMKKwkkKENDKSAkKENGTEFHUykgLW8gY2VudHJpbm8tZGVjb2RlIGNlbnRyaW5vLWRlY29kZS5jCisKK2R1bXBfcHNiOiBkdW1wX3BzYi5jCisJJChDQykgJChDRkxBR1MpIC1vIGR1bXBfcHNiIGR1bXBfcHNiLmMKKworaW50ZWxfZ3NpYzogaW50ZWxfZ3NpYy5jCisJJChDQykgJChDRkxBR1MpIC1vIGludGVsX2dzaWMgLWxscm1pIGludGVsX2dzaWMuYworCitwb3dlcm5vdy1rOC1kZWNvZGU6IHBvd2Vybm93LWs4LWRlY29kZS5jCisJJChDQykgJChDRkxBR1MpIC1vIHBvd2Vybm93LWs4LWRlY29kZSBwb3dlcm5vdy1rOC1kZWNvZGUuYworCithbGw6IGNlbnRyaW5vLWRlY29kZSBkdW1wX3BzYiBpbnRlbF9nc2ljIHBvd2Vybm93LWs4LWRlY29kZQorCitjbGVhbjoKKwlybSAtcmYgY2VudHJpbm8tZGVjb2RlIGR1bXBfcHNiIGludGVsX2dzaWMgcG93ZXJub3ctazgtZGVjb2RlCisKKy5QSE9OWTogYWxsIGRlZmF1bHQgY2xlYW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvY2VudHJpbm8tZGVjb2RlLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2NlbnRyaW5vLWRlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZjI0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2NlbnRyaW5vLWRlY29kZS5jCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogIChDKSAyMDAzIC0gMjAwNCAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZvdW5kIGluCisgKiBsaW51eC9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCisgKiBhbmQgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgSmVyZW15IEZpdHpoYXJkaW5nZS4KKyAqCisgKiBVU0FHRTogc2ltcGx5IHJ1biBpdCB0byBkZWNvZGUgdGhlIGN1cnJlbnQgc2V0dGluZ3Mgb24gQ1BVIDAsCisgKgkgIG9yIHBhc3MgdGhlIENQVSBudW1iZXIgYXMgYXJndW1lbnQsIG9yIHBhc3MgdGhlIE1TUiBjb250ZW50CisgKgkgIGFzIGFyZ3VtZW50LgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNkZWZpbmUgTUNQVQkzMgorCisjZGVmaW5lIE1TUl9JQTMyX1BFUkZfU1RBVFVTCTB4MTk4CisKK3N0YXRpYyBpbnQgcmRtc3IodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IG1zciwKKwkJIHVuc2lnbmVkIGludCAqbG8sIHVuc2lnbmVkIGludCAqaGkpCit7CisJaW50IGZkOworCWNoYXIgZmlsZVsyMF07CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlpbnQgcmV0dmFsID0gLTE7CisKKwkqbG8gPSAqaGkgPSAwOworCisJaWYgKGNwdSA+IE1DUFUpCisJCWdvdG8gZXJyMTsKKworCXNwcmludGYoZmlsZSwgIi9kZXYvY3B1LyVkL21zciIsIGNwdSk7CisJZmQgPSBvcGVuKGZpbGUsIE9fUkRPTkxZKTsKKworCWlmIChmZCA8IDApCisJCWdvdG8gZXJyMTsKKworCWlmIChsc2VlayhmZCwgbXNyLCBTRUVLX0NVUikgPT0gLTEpCisJCWdvdG8gZXJyMjsKKworCWlmIChyZWFkKGZkLCAmdmFsLCA4KSAhPSA4KQorCQlnb3RvIGVycjI7CisKKwkqbG8gPSAodWludDMyX3QgKSh2YWwgJiAweGZmZmZmZmZmdWxsKTsKKwkqaGkgPSAodWludDMyX3QgKSh2YWw+PjMyICYgMHhmZmZmZmZmZnVsbCk7CisKKwlyZXR2YWwgPSAwOworZXJyMjoKKwljbG9zZShmZCk7CitlcnIxOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZSAodW5zaWduZWQgaW50IG1zcikKK3sKKwl1bnNpZ25lZCBpbnQgbXVsdGlwbGllcjsKKwl1bnNpZ25lZCBpbnQgbXY7CisKKwltdWx0aXBsaWVyID0gKChtc3IgPj4gOCkgJiAweEZGKTsKKworCW12ID0gKCgobXNyICYgMHhGRikgKiAxNikgKyA3MDApOworCisJcHJpbnRmKCIweCV4IG1lYW5zIG11bHRpcGxpZXIgJWQgQCAlZCBtVlxuIiwgbXNyLCBtdWx0aXBsaWVyLCBtdik7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX2xpdmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgbG8sIGhpOworCWludCBlcnI7CisKKwllcnIgPSByZG1zcihjcHUsIE1TUl9JQTMyX1BFUkZfU1RBVFVTLCAmbG8sICZoaSk7CisKKwlpZiAoZXJyKSB7CisJCXByaW50ZigiY2FuJ3QgZ2V0IE1TUl9JQTMyX1BFUkZfU1RBVFVTIGZvciBjcHUgJWRcbiIsIGNwdSk7CisJCXByaW50ZigiUG9zc2libGUgdHJvdWJsZTogeW91IGRvbid0IHJ1biBhbiBFbmhhbmNlZCBTcGVlZFN0ZXAgY2FwYWJsZSBjcHVcbiIpOworCQlwcmludGYoIm9yIHlvdSBhcmUgbm90IHJvb3QsIG9yIHRoZSBtc3IgZHJpdmVyIGlzIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZGVjb2RlKGxvKTsKKworCXJldHVybiAwOworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCBjcHUsIG1vZGUgPSAwOworCisJaWYgKGFyZ2MgPCAyKQorCQljcHUgPSAwOworCWVsc2UgeworCQljcHUgPSBzdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDApOworCQlpZiAoY3B1ID49IE1DUFUpCisJCQltb2RlID0gMTsKKwl9CisKKwlpZiAobW9kZSkKKwkJZGVjb2RlKGNwdSk7CisJZWxzZQorCQlkZWNvZGVfbGl2ZShjcHUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2R1bXBfcHNiLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2R1bXBfcHNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ2YTQ3NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvZHVtcF9wc2IuYwpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIGR1bXBfcHNiLiAoYykgMjAwNCwgRGF2ZSBKb25lcywgUmVkIEhhdCBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLgorICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNkZWZpbmUgTEVOICgweDEwMDAwMCAtIDB4YzAwMDApCisjZGVmaW5lIE9GRlNFVCAoMHhjMDAwMCkKKworI2lmbmRlZiBfX3BhY2tlZAorI2RlZmluZSBfX3BhY2tlZCBfX2F0dHJpYnV0ZSgocGFja2VkKSkKKyNlbmRpZgorCitzdGF0aWMgbG9uZyByZWxldmFudDsKKworc3RhdGljIGNvbnN0IGludCBmaWRfdG9fbXVsdFszMl0gPSB7CisJMTEwLCAxMTUsIDEyMCwgMTI1LCA1MCwgNTUsIDYwLCA2NSwKKwk3MCwgNzUsIDgwLCA4NSwgOTAsIDk1LCAxMDAsIDEwNSwKKwkzMCwgMTkwLCA0MCwgMjAwLCAxMzAsIDEzNSwgMTQwLCAyMTAsCisJMTUwLCAyMjUsIDE2MCwgMTY1LCAxNzAsIDE4MCwgLTEsIC0xLAorfTsKKworc3RhdGljIGNvbnN0IGludCB2aWRfdG9fdm9sdGFnZVszMl0gPSB7CisJMjAwMCwgMTk1MCwgMTkwMCwgMTg1MCwgMTgwMCwgMTc1MCwgMTcwMCwgMTY1MCwKKwkxNjAwLCAxNTUwLCAxNTAwLCAxNDUwLCAxNDAwLCAxMzUwLCAxMzAwLCAwLAorCTEyNzUsIDEyNTAsIDEyMjUsIDEyMDAsIDExNzUsIDExNTAsIDExMjUsIDExMDAsCisJMTA3NSwgMTA1MCwgMTAyNCwgMTAwMCwgOTc1LCA5NTAsIDkyNSwgMCwKK307CisKK3N0cnVjdCBwc2JfaGVhZGVyIHsKKwljaGFyIHNpZ25hdHVyZVsxMF07CisJdV9jaGFyIHZlcnNpb247CisJdV9jaGFyIGZsYWdzOworCXVfc2hvcnQgc2V0dGxpbmd0aW1lOworCXVfY2hhciByZXMxOworCXVfY2hhciBudW1wc3Q7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcHN0X2hlYWRlciB7CisJdV9pbnQzMl90IGNwdWlkOworCXVfY2hhciBmc2I7CisJdV9jaGFyIG1heGZpZDsKKwl1X2NoYXIgc3RhcnR2aWQ7CisJdV9jaGFyIG51bXBzdGF0ZXM7Cit9IF9fcGFja2VkOworCitzdGF0aWMgdV9pbnQgZnNiOworc3RhdGljIHVfaW50IHNndGM7CisKK3N0YXRpYyBpbnQKK2RlY29kZV9wc3QoY2hhciAqcCwgaW50IG5wc3RhdGVzKQoreworCWludCBpOworCWludCBmcmVxLCBmaWQsIHZpZDsKKworCWZvciAoaSA9IDA7IGkgPCBucHN0YXRlczsgKytpKSB7CisJCWZpZCA9ICpwKys7CisJCXZpZCA9ICpwKys7CisJCWZyZXEgPSAxMDAgKiBmaWRfdG9fbXVsdFtmaWRdICogZnNiOworCisJCXByaW50ZigiICAgJTJkICU4ZGtIeiAgRklEICUwMnggKCUyZC4lMDFkKSAgVklEICUwMnggKCU0ZG1WKVxuIiwKKwkJICAgICAgIGksCisJCSAgICAgICBmcmVxLAorCQkgICAgICAgZmlkLCBmaWRfdG9fbXVsdFtmaWRdLzEwLCBmaWRfdG9fbXVsdFtmaWRdJTEwLAorCQkgICAgICAgdmlkLCB2aWRfdG9fdm9sdGFnZVt2aWRdKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljCit2b2lkIGRlY29kZV9wc2IoY2hhciAqcCwgaW50IG51bXBzdCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcHNiX2hlYWRlciAqcHNiOworCXN0cnVjdCBwc3RfaGVhZGVyICpwc3Q7CisKKwlwc2IgPSAoc3RydWN0IHBzYl9oZWFkZXIqKSBwOworCisJaWYgKHBzYi0+dmVyc2lvbiAhPSAweDEyKQorCQlyZXR1cm47CisKKwlwcmludGYoIlBTQiB2ZXJzaW9uOiAlaGh4IGZsYWdzOiAlaGh4IHNldHRsaW5nIHRpbWUgJWhodXVzIHJlczEgJWhoeCBudW0gcHN0ICVoaHVcbiIsCisJCQlwc2ItPnZlcnNpb24sCisJCQlwc2ItPmZsYWdzLAorCQkJcHNiLT5zZXR0bGluZ3RpbWUsCisJCQlwc2ItPnJlczEsCisJCQlwc2ItPm51bXBzdCk7CisJc2d0YyA9IHBzYi0+c2V0dGxpbmd0aW1lICogMTAwOworCisJaWYgKHNndGMgPCAxMDAwMCkKKwkJc2d0YyA9IDEwMDAwOworCisJcCA9ICgoY2hhciAqKSBwc2IpICsgc2l6ZW9mKHN0cnVjdCBwc2JfaGVhZGVyKTsKKworCWlmIChudW1wc3QgPCAwKQorCQludW1wc3QgPSBwc2ItPm51bXBzdDsKKwllbHNlCisJCXByaW50ZigiT3ZlcnJpZGluZyBudW1iZXIgb2YgcHN0IDolZFxuIiwgbnVtcHN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1wc3Q7IGkrKykgeworCQlwc3QgPSAoc3RydWN0IHBzdF9oZWFkZXIqKSBwOworCisJCWlmIChyZWxldmFudCAhPSAwKSB7CisJCQlpZiAocmVsZXZhbnQhPSBwc3QtPmNwdWlkKQorCQkJCWdvdG8gbmV4dF9vbmU7CisJCX0KKworCQlwcmludGYoIiAgUFNUICVkICBjcHVpZCAlLjN4IGZzYiAlaGh1IG1maWQgJWhoeCBzdmlkICVoaHggbnVtYmVyc3RhdGVzICVoaHVcbiIsCisJCQkJaSsxLAorCQkJCXBzdC0+Y3B1aWQsCisJCQkJcHN0LT5mc2IsCisJCQkJcHN0LT5tYXhmaWQsCisJCQkJcHN0LT5zdGFydHZpZCwKKwkJCQlwc3QtPm51bXBzdGF0ZXMpOworCisJCWZzYiA9IHBzdC0+ZnNiOworCQlkZWNvZGVfcHN0KHAgKyBzaXplb2Yoc3RydWN0IHBzdF9oZWFkZXIpLCBwc3QtPm51bXBzdGF0ZXMpOworCituZXh0X29uZToKKwkJcCArPSBzaXplb2Yoc3RydWN0IHBzdF9oZWFkZXIpICsgMipwc3QtPm51bXBzdGF0ZXM7CisJfQorCit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGluZm9fb3B0c1tdID0geworCXsubmFtZSA9ICJudW1wc3QiLAkuaGFzX2FyZz1ub19hcmd1bWVudCwJLmZsYWc9TlVMTCwgLnZhbD0nbid9LAorfTsKKwordm9pZCBwcmludF9oZWxwKHZvaWQpCit7CisJcHJpbnRmICgiVXNhZ2U6IGR1bXBfcHNiIFtvcHRpb25zXVxuIik7CisJcHJpbnRmICgiT3B0aW9uczpcbiIpOworCXByaW50ZiAoIiAgLW4sIC0tbnVtcHN0ICAgICBTZXQgbnVtYmVyIG9mIFBTVCB0YWJsZXMgdG8gc2NhblxuIik7CisJcHJpbnRmICgiICAtciwgLS1yZWxldmFudCAgIE9ubHkgZGlzcGxheSBQU1RzIHJlbGV2YW50IHRvIGNwdWlkIE5cbiIpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgZmQ7CisJaW50IG51bXBzdD0tMTsKKwlpbnQgcmV0PTAsIGNvbnQ9MTsKKwljaGFyICptZW0gPSBOVUxMOworCWNoYXIgKnA7CisKKwlkbyB7CisJCXJldCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJocjpuOiIsIGluZm9fb3B0cywgTlVMTCk7CisJCXN3aXRjaCAocmV0KXsKKwkJY2FzZSAnPyc6CisJCWNhc2UgJ2gnOgorCQkJcHJpbnRfaGVscCgpOworCQkJY29udCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlyZWxldmFudCA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDE2KTsKKwkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCW51bXBzdCA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKKwkJCWJyZWFrOworCQljYXNlIC0xOgorCQkJY29udCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJfSB3aGlsZShjb250KTsKKworCWZkID0gb3BlbigiL2Rldi9tZW0iLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlwcmludGYgKCJDb3VsZG4ndCBvcGVuIC9kZXYvbWVtLiBBcmUgeW91IHJvb3Q/XG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwltZW0gPSBtbWFwKG1lbSwgMHgxMDAwMDAgLSAweGMwMDAwLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGZkLCAweGMwMDAwKTsKKwljbG9zZShmZCk7CisKKwlmb3IgKHAgPSBtZW07IHAgLSBtZW0gPCBMRU47IHArPTE2KSB7CisJCWlmIChtZW1jbXAocCwgIkFNREs3UE5PVyEiLCAxMCkgPT0gMCkgeworCQkJZGVjb2RlX3BzYihwLCBudW1wc3QpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltdW5tYXAobWVtLCBMRU4pOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9pbnRlbF9nc2ljLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2ludGVsX2dzaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Y1MjkzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9pbnRlbF9nc2ljLmMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICAoQykgMjAwMyAgQnJ1bm8gRHVjcm90CisgKiAgKEMpIDIwMDQgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogQmFzZWQgb24gY29kZSBmb3VuZCBpbgorICogbGludXgvaW5jbHVkZS9hc20taTM4Ni9pc3QuaCBhbmQgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCisgKiBhbmQgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgQW5keSBHcm92ZXIgPGFuZHJldy5ncm92ZXJAaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxybWkuaD4KKworaW50IG1haW4gKHZvaWQpCit7CisJc3RydWN0IExSTUlfcmVncwlyOworCWludAkJCXJldHZhbDsKKworCWlmICghTFJNSV9pbml0KCkpCisJCXJldHVybiAwOworCisJbWVtc2V0KCZyLCAwLCBzaXplb2YocikpOworCisJci5lYXggPSAweDAwMDBFOTgwOworCXIuZWR4ID0gMHg0NzUzNDk0MzsKKworCXJldHZhbCA9IExSTUlfaW50KDB4MTUsICZyKTsKKworCWlmICghcmV0dmFsKSB7CisJCXByaW50ZigiRmFpbGVkIVxuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAoci5lYXggPT0gMHg0NzUzNDk0MykgeworCQlwcmludGYoIkJJT1Mgc3VwcG9ydHMgR1NJQyBjYWxsOlxuIik7CisJCXByaW50ZigiXHRzaWduYXR1cmU6ICVjJWMlYyVjXG4iLAorCQkgICAgICAgKHIuZWF4ID4+IDI0KSAmIDB4ZmYsCisJCSAgICAgICAoci5lYXggPj4gMTYpICYgMHhmZiwKKwkJICAgICAgIChyLmVheCA+PiA4KSAmIDB4ZmYsCisJCSAgICAgICAoci5lYXgpICYgMHhmZik7CisJCXByaW50ZigiXHRjb21tYW5kIHBvcnQgPSAweCUuNHhcbiIsCisJCSAgICAgICByLmVieCAmIDB4ZmZmZik7CisJCXByaW50ZigiXHRjb21tYW5kID0gICAgICAweCUuNHhcbiIsCisJCSAgICAgICAoci5lYnggPj4gMTYpICYgMHhmZmZmKTsKKwkJcHJpbnRmKCJcdGV2ZW50IHBvcnQgPSAgIDB4JS44eFxuIiwgci5lY3gpOworCQlwcmludGYoIlx0ZmxhZ3MgPSAgICAgICAgMHglLjh4XG4iLCByLmVkeCk7CisJCWlmICgoKHIuZWJ4ID4+IDE2KSAmIDB4ZmZmZikgIT0gMHg4MikgeworCQkJcHJpbnRmKCJub24tZGVmYXVsdCBjb21tYW5kIHZhbHVlLiBJZiBzcGVlZHN0ZXAtc21pICIKKwkJCSAgICAgICAiZG9lc24ndCB3b3JrIG91dCBvZiB0aGUgYm94LFxueW91IG1heSB3YW50IHRvICIKKwkJCSAgICAgICAidHJ5IG91dCB0aGUgZGVmYXVsdCB2YWx1ZSBieSBwYXNzaW5nICIKKwkJCSAgICAgICAic21pX2NtZD0weDgyIHRvIHRoZSBtb2R1bGVcbiBPTiBZT1VSIE9XTiAiCisJCQkgICAgICAgIlJJU0suXG4iKTsKKwkJfQorCQlpZiAoKHIuZWJ4ICYgMHhmZmZmKSAhPSAweGIyKSB7CisJCQlwcmludGYoIm5vbi1kZWZhdWx0IGNvbW1hbmQgcG9ydC4gSWYgc3BlZWRzdGVwLXNtaSAiCisJCQkgICAgICAgImRvZXNuJ3Qgd29yayBvdXQgb2YgdGhlIGJveCxcbnlvdSBtYXkgd2FudCB0byAiCisJCQkgICAgICAgInRyeSBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgYnkgcGFzc2luZyAiCisJCQkgICAgICAgInNtaV9wb3J0PTB4ODIgdG8gdGhlIG1vZHVsZVxuIE9OIFlPVVIgT1dOICIKKwkJCSAgICAgICAiUklTSy5cbiIpOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJCSU9TIERPRVMgTk9UIHN1cHBvcnQgR1NJQyBjYWxsLiAgRHVtcGluZyByZWdpc3RlcnMgYW55d2F5OlxuIik7CisJCXByaW50ZigiZWF4ID0gMHglLjh4XG4iLCByLmVheCk7CisJCXByaW50ZigiZWJ4ID0gMHglLjh4XG4iLCByLmVieCk7CisJCXByaW50ZigiZWN4ID0gMHglLjh4XG4iLCByLmVjeCk7CisJCXByaW50ZigiZWR4ID0gMHglLjh4XG4iLCByLmVkeCk7CisJCXByaW50ZigiTm90ZSBhbHNvIHRoYXQgc29tZSBCSU9TIGRvIG5vdCBzdXBwb3J0IHRoZSBpbml0aWFsICIKKwkJICAgICAgICJHU0lDIGNhbGwsIGJ1dCB0aGUgbmV3ZXJcbnNwZWVlZHN0ZXAtc21pIGRyaXZlciBtYXkgIgorCQkgICAgICAgIndvcmsuXG5Gb3IgdGhpcywgeW91IG5lZWQgdG8gcGFzcyBzb21lIGFyZ3VtZW50cyB0byAiCisJCSAgICAgICAidGhlIHNwZWVkc3RlcC1zbWkgZHJpdmVyOlxuIik7CisJCXByaW50ZigiXHRzbWlfY21kPTB4Pz8gc21pX3BvcnQ9MHg/PyBzbWlfc2lnPTFcbiIpOworCQlwcmludGYoIlxuVW5mb3J0dW5hdGVseSwgeW91IGhhdmUgdG8ga25vdyB3aGF0IGV4YWN0bHkgYXJlICIKKwkJICAgICAgICJzbWlfY21kIGFuZCBzbWlfcG9ydCwgYW5kIHRoaXNcbmlzIHN5c3RlbSAiCisJCSAgICAgICAiZGVwZW5kYW50LlxuIik7CisJfQorCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9wb3dlcm5vdy1rOC1kZWNvZGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvcG93ZXJub3ctazgtZGVjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4YTZiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvcG93ZXJub3ctazgtZGVjb2RlLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqICAoQykgMjAwNCBCcnVubyBEdWNyb3QgPGR1Y3JvdEBwb3VwaW5vdS5vcmc+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZvdW5kIGluCisgKiBsaW51eC9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKyAqIGFuZCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBQYXVsIERldnJpZW5kdAorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNkZWZpbmUgTUNQVSAzMgorCisjZGVmaW5lIE1TUl9GSURWSURfU1RBVFVTCTB4YzAwMTAwNDIKKworI2RlZmluZSBNU1JfU19ISV9DVVJSRU5UX1ZJRAkweDAwMDAwMDFmCisjZGVmaW5lIE1TUl9TX0xPX0NVUlJFTlRfRklECTB4MDAwMDAwM2YKKworc3RhdGljIGludCBnZXRfZmlkdmlkKHVpbnQzMl90IGNwdSwgdWludDMyX3QgKmZpZCwgdWludDMyX3QgKnZpZCkKK3sKKwlpbnQgZXJyID0gMTsKKwl1aW50NjRfdCBtc3IgPSAwOworCWludCBmZDsKKwljaGFyIGZpbGVbMjBdOworCisJaWYgKGNwdSA+IE1DUFUpCisJCWdvdG8gb3V0OworCisJc3ByaW50ZihmaWxlLCAiL2Rldi9jcHUvJWQvbXNyIiwgY3B1KTsKKworCWZkID0gb3BlbihmaWxlLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZ290byBvdXQ7CisJbHNlZWsoZmQsIE1TUl9GSURWSURfU1RBVFVTLCBTRUVLX0NVUik7CisJaWYgKHJlYWQoZmQsICZtc3IsIDgpICE9IDgpCisJCWdvdG8gZXJyMTsKKworCSpmaWQgPSAoKHVpbnQzMl90ICkobXNyICYgMHhmZmZmZmZmZnVsbCkpICYgTVNSX1NfTE9fQ1VSUkVOVF9GSUQ7CisJKnZpZCA9ICgodWludDMyX3QgKShtc3I+PjMyICYgMHhmZmZmZmZmZnVsbCkpICYgTVNSX1NfSElfQ1VSUkVOVF9WSUQ7CisJZXJyID0gMDsKK2VycjE6CisJY2xvc2UoZmQpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKworLyogUmV0dXJuIGEgZnJlcXVlbmN5IGluIE1IeiwgZ2l2ZW4gYW4gaW5wdXQgZmlkICovCitzdGF0aWMgdWludDMyX3QgZmluZF9mcmVxX2Zyb21fZmlkKHVpbnQzMl90IGZpZCkKK3sKKwlyZXR1cm4gODAwICsgKGZpZCAqIDEwMCk7Cit9CisKKy8qIFJldHVybiBhIHZvbHRhZ2UgaW4gbWlsaVZvbHRzLCBnaXZlbiBhbiBpbnB1dCB2aWQgKi8KK3N0YXRpYyB1aW50MzJfdCBmaW5kX21pbGxpdm9sdHNfZnJvbV92aWQodWludDMyX3QgdmlkKQoreworCXJldHVybiAxNTUwLXZpZCoyNTsKK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IGVycjsKKwlpbnQgY3B1OworCXVpbnQzMl90IGZpZCwgdmlkOworCisJaWYgKGFyZ2MgPCAyKQorCQljcHUgPSAwOworCWVsc2UKKwkJY3B1ID0gc3RydG91bChhcmd2WzFdLCBOVUxMLCAwKTsKKworCWVyciA9IGdldF9maWR2aWQoY3B1LCAmZmlkLCAmdmlkKTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRmKCJjYW4ndCBnZXQgZmlkLCB2aWQgZnJvbSBNU1JcbiIpOworCQlwcmludGYoIlBvc3NpYmxlIHRyb3VibGU6IHlvdSBkb24ndCBydW4gYSBwb3dlcm5vdy1rOCBjYXBhYmxlIGNwdVxuIik7CisJCXByaW50Zigib3IgeW91IGFyZSBub3Qgcm9vdCwgb3IgdGhlIG1zciBkcml2ZXIgaXMgbm90IHByZXNlbnRcbiIpOworCQlleGl0KDEpOworCX0KKworCQorCXByaW50ZigiY3B1ICVkIGN1cnJlbnRseSBhdCAlZCBNSHogYW5kICVkIG1WXG4iLAorCQkJY3B1LAorCQkJZmluZF9mcmVxX2Zyb21fZmlkKGZpZCksCisJCQlmaW5kX21pbGxpdm9sdHNfZnJvbV92aWQodmlkKSk7CisJCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9rZXJuZWwvTWFrZWZpbGUgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9rZXJuZWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiMTQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9NYWtlZmlsZQpAQCAtMCwwICsxLDIzIEBACitvYmotbQk6PQorCitLRElSCTo9IC9saWIvbW9kdWxlcy8kKHNoZWxsIHVuYW1lIC1yKS9idWlsZAorUFdECQk6PSAkKHNoZWxsIHB3ZCkKK0tNSVNDICAgOj0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUgLXIpL2NwdWZyZXF1dGlscy8KKworaWZlcSAoIiQoQ09ORklHX1g4Nl9UU0MpIiwgInkiKQorICBvYmotbQkgKz0gY3B1ZnJlcS10ZXN0X3RzYy5vCitlbmRpZgorCitkZWZhdWx0OgorCSQoTUFLRSkgLUMgJChLRElSKSBNPSQoUFdEKQorCitjbGVhbjoKKwktIHJtIC1yZiAqLm8gKi5rbyAudG1wLXZlcnNpb25zIC4qLmNtZCAuKi5tb2QuKiAqLm1vZC5jCisJLSBybSAtcmYgLnRtcF92ZXJzaW9ucyogTW9kdWxlLnN5bXZlcnMgbW9kdWxlcy5vcmRlcgorCitpbnN0YWxsOiBkZWZhdWx0CisJaW5zdGFsbCAtZCAkKEtNSVNDKQorCWluc3RhbGwgLW0gNjQ0IC1jICoua28gJChLTUlTQykKKwkvc2Jpbi9kZXBtb2QgLWEKKworYWxsOglkZWZhdWx0CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9rZXJuZWwvY3B1ZnJlcS10ZXN0X3RzYy5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcva2VybmVsL2NwdWZyZXEtdGVzdF90c2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmNhY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcva2VybmVsL2NwdWZyZXEtdGVzdF90c2MuYwpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIHRlc3QgbW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIFRTQy1iYXNlZCBkZWxheSByb3V0aW5lIGNvbnRpbnVlcworICogdG8gd29yayBwcm9wZXJseSBhZnRlciBjcHVmcmVxIHRyYW5zaXRpb25zLiBOZWVkcyBBQ1BJIHRvIHdvcmsKKyAqIHByb3Blcmx5LgorICoKKyAqIEJhc2VkIHBhcnRseSBvbiB0aGUgUG93ZXIgTWFuYWdlbWVudCBUaW1lciAoUE1UTVIpIGNvZGUgdG8gYmUgZm91bmQKKyAqIGluIGFyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3BtLmMgb24gcmVjZW50IDIuNi4ga2VybmVscywgZXNwZWNpYWxseQorICogY29kZSB3cml0dGVuIGJ5IEpvaG4gU3R1bHR6LiBUaGUgcmVhZF9wbXRtciBmdW5jdGlvbiB3YXMgY29waWVkIHZlcmJhdGltCisgKiBmcm9tIHRoYXQgZmlsZS4KKyAqCisgKiAoQykgMjAwNCBEb21pbmlrIEJyb2Rvd3NraQorICoKKyAqIFRvIHVzZToKKyAqIDEuKSBwYXNzIGNsb2NrPXRzYyB0byB0aGUga2VybmVsIG9uIHlvdXIgYm9vdGxvYWRlcgorICogMi4pIG1vZHByb2JlIHRoaXMgbW9kdWxlIChpdCdsbCBmYWlsKQorICogMy4pIGNoYW5nZSBDUFUgZnJlcXVlbmN5CisgKiA0LikgbW9kcHJvYmUgdGhpcyBtb2R1bGUgYWdhaW4KKyAqIDUuKSBpZiB0aGUgdGhpcmQgdmFsdWUsICJkaWZmX3BtdG1yIiwgY2hhbmdlcyBiZXR3ZWVuIDIuIGFuZCA0LiwgdGhlCisgKiAgICAgVFNDLWJhc2VkIGRlbGF5IHJvdXRpbmUgb24gdGhlIExpbnV4IGtlcm5lbCBkb2VzIG5vdCBjb3JyZWN0bHkKKyAqICAgICBoYW5kbGUgdGhlIGNwdWZyZXEgdHJhbnNpdGlvbi4gUGxlYXNlIHJlcG9ydCB0aGlzIHRvCisgKiAgICAgY3B1ZnJlcUB2Z2VyLmtlcm5lbC5vcmcKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorCitzdGF0aWMgaW50IHBtX3Rtcl9pb3BvcnQgPSAwOworCisvKmhlbHBlciBmdW5jdGlvbiB0byBzYWZlbHkgcmVhZCBhY3BpIHBtIHRpbWVzb3VyY2UqLworc3RhdGljIHUzMiByZWFkX3BtdG1yKHZvaWQpCit7CisJdTMyIHYxPTAsdjI9MCx2Mz0wOworCS8qIEl0IGhhcyBiZWVuIHJlcG9ydGVkIHRoYXQgYmVjYXVzZSBvZiB2YXJpb3VzIGJyb2tlbgorCSAqIGNoaXBzZXRzIChJQ0g0LCBQSUlYNCBhbmQgUElJWDRFKSB3aGVyZSB0aGUgQUNQSSBQTSB0aW1lCisJICogc291cmNlIGlzIG5vdCBsYXRjaGVkLCBzbyB5b3UgbXVzdCByZWFkIGl0IG11bHRpcGxlCisJICogdGltZXMgdG8gaW5zdXJlIGEgc2FmZSB2YWx1ZSBpcyByZWFkLgorCSAqLworCWRvIHsKKwkJdjEgPSBpbmwocG1fdG1yX2lvcG9ydCk7CisJCXYyID0gaW5sKHBtX3Rtcl9pb3BvcnQpOworCQl2MyA9IGlubChwbV90bXJfaW9wb3J0KTsKKwl9IHdoaWxlICgodjEgPiB2MiAmJiB2MSA8IHYzKSB8fCAodjIgPiB2MyAmJiB2MiA8IHYxKQorCQkgfHwgKHYzID4gdjEgJiYgdjMgPCB2MikpOworCisJLyogbWFzayB0aGUgb3V0cHV0IHRvIDI0IGJpdHMgKi8KKwlyZXR1cm4gKHYyICYgMHhGRkZGRkYpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjcHVmcmVxX3Rlc3RfdHNjKHZvaWQpCit7CisJdTMyIG5vdywgdGhlbiwgZGlmZjsKKwl1NjQgbm93X3RzYywgdGhlbl90c2MsIGRpZmZfdHNjOworCWludCBpOworCisJLyogdGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZWQgaXMgY29waWVkIGZyb20gYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCisJICAgb2YgTGludXggdjIuNi4yNS4gKi8KKworCS8qIGRldGVjdCB0aGUgbG9jYXRpb24gb2YgdGhlIEFDUEkgUE0gVGltZXIgKi8KKwlpZiAoYWNwaV9nYmxfRkFEVC5oZWFkZXIucmV2aXNpb24gPj0gRkFEVDJfUkVWSVNJT05fSUQpIHsKKwkJLyogRkFEVCByZXYuIDIgKi8KKwkJaWYgKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLnNwYWNlX2lkICE9CisJCSAgICBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU8pCisJCQlyZXR1cm4gMDsKKworCQlwbV90bXJfaW9wb3J0ID0gYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suYWRkcmVzczsKKwkJLyoKKwkJICogIlgiIGZpZWxkcyBhcmUgb3B0aW9uYWwgZXh0ZW5zaW9ucyB0byB0aGUgb3JpZ2luYWwgVjEuMAorCQkgKiBmaWVsZHMsIHNvIHdlIG11c3Qgc2VsZWN0aXZlbHkgZXhwYW5kIFYxLjAgZmllbGRzIGlmIHRoZQorCQkgKiBjb3JyZXNwb25kaW5nIFggZmllbGQgaXMgemVyby4KKwkgCSAqLworCQlpZiAoIXBtX3Rtcl9pb3BvcnQpCisJCQlwbV90bXJfaW9wb3J0ID0gYWNwaV9nYmxfRkFEVC5wbV90aW1lcl9ibG9jazsKKwl9IGVsc2UgeworCQkvKiBGQURUIHJldi4gMSAqLworCQlwbV90bXJfaW9wb3J0ID0gYWNwaV9nYmxfRkFEVC5wbV90aW1lcl9ibG9jazsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAic3RhcnQtLT4gXG4iKTsKKwl0aGVuID0gcmVhZF9wbXRtcigpOworICAgICAgICByZHRzY2xsKHRoZW5fdHNjKTsKKwlmb3IgKGk9MDtpPDIwO2krKykgeworCQltZGVsYXkoMTAwKTsKKwkJbm93ID0gcmVhZF9wbXRtcigpOworCQlyZHRzY2xsKG5vd190c2MpOworCQlkaWZmID0gKG5vdyAtIHRoZW4pICYgMHhGRkZGRkY7CisJCWRpZmZfdHNjID0gbm93X3RzYyAtIHRoZW5fdHNjOworCQlwcmludGsoS0VSTl9ERUJVRyAidDE6ICUwOHUgdDI6ICUwOHUgZGlmZl9wbXRtcjogJTA4dSBkaWZmX3RzYzogJTAxNmxsdVxuIiwgdGhlbiwgbm93LCBkaWZmLCBkaWZmX3RzYyk7CisJCXRoZW4gPSBub3c7CisJCXRoZW5fdHNjID0gbm93X3RzYzsKKwl9CisJcHJpbnRrKEtFUk5fREVCVUcgIjwtLSBlbmQgXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNwdWZyZXFfbm9uZSh2b2lkKQoreworCXJldHVybjsKK30KKworbW9kdWxlX2luaXQoY3B1ZnJlcV90ZXN0X3RzYykKK21vZHVsZV9leGl0KGNwdWZyZXFfbm9uZSkKKworCitNT0RVTEVfQVVUSE9SKCJEb21pbmlrIEJyb2Rvd3NraSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJWZXJpZnkgdGhlIFRTQyBjcHVmcmVxIG5vdGlmaWVyIHdvcmtpbmcgY29ycmVjdGx5IC0tIG5lZWRzIEFDUEktZW5hYmxlZCBzeXN0ZW0iKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy94ODZfNjQvTWFrZWZpbGUgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy94ODZfNjQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmMTM5OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACitkZWZhdWx0OiBhbGwKKworY2VudHJpbm8tZGVjb2RlOiBjZW50cmluby1kZWNvZGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjZW50cmluby1kZWNvZGUgY2VudHJpbm8tZGVjb2RlLmMKKworcG93ZXJub3ctazgtZGVjb2RlOiBwb3dlcm5vdy1rOC1kZWNvZGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBwb3dlcm5vdy1rOC1kZWNvZGUgcG93ZXJub3ctazgtZGVjb2RlLmMKKworYWxsOiBjZW50cmluby1kZWNvZGUgcG93ZXJub3ctazgtZGVjb2RlCisKK2NsZWFuOgorCXJtIC1yZiBjZW50cmluby1kZWNvZGUgcG93ZXJub3ctazgtZGVjb2RlCisKKy5QSE9OWTogYWxsIGRlZmF1bHQgY2xlYW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9jZW50cmluby1kZWNvZGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9jZW50cmluby1kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4yNmZiM2YxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L2NlbnRyaW5vLWRlY29kZS5jCkBAIC0wLDAgKzEgQEAKKy4uL2kzODYvY2VudHJpbm8tZGVjb2RlLmMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy94ODZfNjQvcG93ZXJub3ctazgtZGVjb2RlLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy94ODZfNjQvcG93ZXJub3ctazgtZGVjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZWIzMGM3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9wb3dlcm5vdy1rOC1kZWNvZGUuYwpAQCAtMCwwICsxIEBACisuLi9pMzg2L3Bvd2Vybm93LWs4LWRlY29kZS5jClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9jcHVmcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3ZDhjNTdiNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9jcHVmcmVxLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiAgKEMpIDIwMDQtMjAwOSAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJjcHVmcmVxLmgiCisjaW5jbHVkZSAic3lzZnMuaCIKKworaW50IGNwdWZyZXFfY3B1X2V4aXN0cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19jcHVfZXhpc3RzKGNwdSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfZnJlcV9rZXJuZWwodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc3lzZnNfZ2V0X2ZyZXFfa2VybmVsKGNwdSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfZnJlcV9oYXJkd2FyZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfZnJlcV9oYXJkd2FyZShjcHUpOworfQorCit1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25fbGF0ZW5jeSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9uX2xhdGVuY3koY3B1KTsKK30KKworaW50IGNwdWZyZXFfZ2V0X2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCXVuc2lnbmVkIGxvbmcgKm1pbiwKKwkJCQl1bnNpZ25lZCBsb25nICptYXgpCit7CisJaWYgKCghbWluKSB8fCAoIW1heCkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBzeXNmc19nZXRfZnJlcV9oYXJkd2FyZV9saW1pdHMoY3B1LCBtaW4sIG1heCk7Cit9CisKK2NoYXIgKiBjcHVmcmVxX2dldF9kcml2ZXIodW5zaWduZWQgaW50IGNwdSkgeworCXJldHVybiBzeXNmc19nZXRfZnJlcV9kcml2ZXIoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9kcml2ZXIoY2hhciAqIHB0cikgeworCWlmICghcHRyKQorCQlyZXR1cm47CisJZnJlZShwdHIpOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKiBjcHVmcmVxX2dldF9wb2xpY3kodW5zaWduZWQgaW50IGNwdSkgeworCXJldHVybiBzeXNmc19nZXRfZnJlcV9wb2xpY3koY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9wb2xpY3koc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpIHsKKwlpZiAoKCFwb2xpY3kpIHx8ICghcG9saWN5LT5nb3Zlcm5vcikpCisJCXJldHVybjsKKworCWZyZWUocG9saWN5LT5nb3Zlcm5vcik7CisJcG9saWN5LT5nb3Zlcm5vciA9IE5VTEw7CisJZnJlZShwb2xpY3kpOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICogY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzKHN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmFueSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKnRtcCwgKm5leHQ7CisKKwlpZiAoIWFueSkKKwkJcmV0dXJuOworCisJdG1wID0gYW55LT5maXJzdDsKKwl3aGlsZSAodG1wKSB7CisJCW5leHQgPSB0bXAtPm5leHQ7CisJCWlmICh0bXAtPmdvdmVybm9yKQorCQkJZnJlZSh0bXAtPmdvdmVybm9yKTsKKwkJZnJlZSh0bXApOworCQl0bXAgPSBuZXh0OworCX0KK30KKworCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKiBjcHVmcmVxX2dldF9hdmFpbGFibGVfZnJlcXVlbmNpZXModW5zaWduZWQgaW50IGNwdSkgeworCXJldHVybiBzeXNmc19nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKGNwdSk7Cit9CisKK3ZvaWQgY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKHN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqYW55KSB7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICp0bXAsICpuZXh0OworCisJaWYgKCFhbnkpCisJCXJldHVybjsKKworCXRtcCA9IGFueS0+Zmlyc3Q7CisJd2hpbGUgKHRtcCkgeworCQluZXh0ID0gdG1wLT5uZXh0OworCQlmcmVlKHRtcCk7CisJCXRtcCA9IG5leHQ7CisJfQorfQorCisKK3N0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBjcHVmcmVxX2dldF9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlyZXR1cm4gc3lzZnNfZ2V0X2ZyZXFfYWZmZWN0ZWRfY3B1cyhjcHUpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqYW55KSB7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqdG1wLCAqbmV4dDsKKworCWlmICghYW55KQorCQlyZXR1cm47CisKKwl0bXAgPSBhbnktPmZpcnN0OworCXdoaWxlICh0bXApIHsKKwkJbmV4dCA9IHRtcC0+bmV4dDsKKwkJZnJlZSh0bXApOworCQl0bXAgPSBuZXh0OworCX0KK30KKworCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICogY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlyZXR1cm4gc3lzZnNfZ2V0X2ZyZXFfcmVsYXRlZF9jcHVzKGNwdSk7Cit9CisKK3ZvaWQgY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzKHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmFueSkgeworCWNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoYW55KTsKK30KKworCitpbnQgY3B1ZnJlcV9zZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KSB7CisJaWYgKCFwb2xpY3kgfHwgIShwb2xpY3ktPmdvdmVybm9yKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3lzZnNfc2V0X2ZyZXFfcG9saWN5KGNwdSwgcG9saWN5KTsKK30KKworCitpbnQgY3B1ZnJlcV9tb2RpZnlfcG9saWN5X21pbih1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIG1pbl9mcmVxKSB7CisJcmV0dXJuIHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9taW4oY3B1LCBtaW5fZnJlcSk7Cit9CisKKworaW50IGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9tYXgodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtYXhfZnJlcSkgeworCXJldHVybiBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfbWF4KGNwdSwgbWF4X2ZyZXEpOworfQorCisKK2ludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IodW5zaWduZWQgaW50IGNwdSwgY2hhciAqZ292ZXJub3IpIHsKKwlpZiAoKCFnb3Zlcm5vcikgfHwgKHN0cmxlbihnb3Zlcm5vcikgPiAxOSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9nb3Zlcm5vcihjcHUsIGdvdmVybm9yKTsKK30KKworaW50IGNwdWZyZXFfc2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHRhcmdldF9mcmVxdWVuY3kpIHsKKwlyZXR1cm4gc3lzZnNfc2V0X2ZyZXF1ZW5jeShjcHUsIHRhcmdldF9mcmVxdWVuY3kpOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqIGNwdWZyZXFfZ2V0X3N0YXRzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdG90YWxfdGltZSkgeworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpyZXQ7CisKKwlyZXQgPSBzeXNmc19nZXRfZnJlcV9zdGF0cyhjcHUsIHRvdGFsX3RpbWUpOworCXJldHVybiAocmV0KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9zdGF0cyhzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqYW55KSB7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnRtcCwgKm5leHQ7CisKKwlpZiAoIWFueSkKKwkJcmV0dXJuOworCisJdG1wID0gYW55LT5maXJzdDsKKwl3aGlsZSAodG1wKSB7CisJCW5leHQgPSB0bXAtPm5leHQ7CisJCWZyZWUodG1wKTsKKwkJdG1wID0gbmV4dDsKKwl9Cit9CisKK3Vuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbnModW5zaWduZWQgaW50IGNwdSkgeworCXVuc2lnbmVkIGxvbmcgcmV0ID0gc3lzZnNfZ2V0X2ZyZXFfdHJhbnNpdGlvbnMoY3B1KTsKKworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9jcHVmcmVxLmggYi90b29scy9wb3dlci9jcHVwb3dlci9saWIvY3B1ZnJlcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYmU5MDYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9saWIvY3B1ZnJlcS5oCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICogIGNwdWZyZXEuaCAtIGRlZmluaXRpb25zIGZvciBsaWJjcHVmcmVxCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9DUFVGUkVRX0gKKyNkZWZpbmUgX0NQVUZSRVFfSCAxCisKK3N0cnVjdCBjcHVmcmVxX3BvbGljeSB7CisJdW5zaWduZWQgbG9uZyBtaW47CisJdW5zaWduZWQgbG9uZyBtYXg7CisJY2hhciAqZ292ZXJub3I7Cit9OworCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzIHsKKwljaGFyICpnb3Zlcm5vcjsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpuZXh0OworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmZpcnN0OworfTsKKworc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIHsKKwl1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeTsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpmaXJzdDsKK307CisKKworc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyB7CisJdW5zaWduZWQgaW50IGNwdTsKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpuZXh0OworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmZpcnN0OworfTsKKworc3RydWN0IGNwdWZyZXFfc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5OworCXVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lX2luX3N0YXRlOworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpuZXh0OworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpmaXJzdDsKK307CisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgKiByZXR1cm5zIDAgaWYgdGhlIHNwZWNpZmllZCBDUFUgaXMgcHJlc2VudCAoaXQgZG9lc24ndCBzYXkKKyAqIHdoZXRoZXIgaXQgaXMgb25saW5lISksIGFuZCBhbiBlcnJvciB2YWx1ZSBpZiBub3QuCisgKi8KKworZXh0ZXJuIGludCBjcHVmcmVxX2NwdV9leGlzdHModW5zaWduZWQgaW50IGNwdSk7CisKKy8qIGRldGVybWluZSBjdXJyZW50IENQVSBmcmVxdWVuY3kKKyAqIC0gX2tlcm5lbCB2YXJpYW50IG1lYW5zIGtlcm5lbCdzIG9waW5pb24gb2YgQ1BVIGZyZXF1ZW5jeQorICogLSBfaGFyZHdhcmUgdmFyaWFudCBtZWFucyBhY3R1YWwgaGFyZHdhcmUgQ1BVIGZyZXF1ZW5jeSwKKyAqICAgIHdoaWNoIGlzIG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QuCisgKgorICogcmV0dXJucyAwIG9uIGZhaWx1cmUsIGVsc2UgZnJlcXVlbmN5IGluIGtIei4KKyAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfZnJlcV9oYXJkd2FyZSh1bnNpZ25lZCBpbnQgY3B1KTsKKworI2RlZmluZSBjcHVmcmVxX2dldChjcHUpIGNwdWZyZXFfZ2V0X2ZyZXFfa2VybmVsKGNwdSk7CisKKworLyogZGV0ZXJtaW5lIENQVSB0cmFuc2l0aW9uIGxhdGVuY3kKKyAqCisgKiByZXR1cm5zIDAgb24gZmFpbHVyZSwgZWxzZSB0cmFuc2l0aW9uIGxhdGVuY3kgaW4gMTBeKC05KSBzID0gbmFub3NlY29uZHMKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbl9sYXRlbmN5KHVuc2lnbmVkIGludCBjcHUpOworCisKKy8qIGRldGVybWluZSBoYXJkd2FyZSBDUFUgZnJlcXVlbmN5IGxpbWl0cworICoKKyAqIFRoZXNlIG1heSBiZSBsaW1pdGVkIGZ1cnRoZXIgYnkgdGhlcm1hbCwgZW5lcmd5IG9yIG90aGVyCisgKiBjb25zaWRlcmF0aW9ucyBieSBjcHVmcmVxIHBvbGljeSBub3RpZmllcnMgaW4gdGhlIGtlcm5lbC4KKyAqLworCitleHRlcm4gaW50IGNwdWZyZXFfZ2V0X2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1LCAKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqbWluLCAKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqbWF4KTsKKworCisvKiBkZXRlcm1pbmUgQ1BVZnJlcSBkcml2ZXIgdXNlZAorICoKKyAqIFJlbWVtYmVyIHRvIGNhbGwgY3B1ZnJlcV9wdXRfZHJpdmVyIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZAorICogdG8gYXZvaWQgbWVtb3J5IGxlYWthZ2UsIHBsZWFzZS4KKyAqLworCitleHRlcm4gY2hhciAqIGNwdWZyZXFfZ2V0X2RyaXZlcih1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgICBjcHVmcmVxX3B1dF9kcml2ZXIoY2hhciAqIHB0cik7CisKKworLyogZGV0ZXJtaW5lIENQVWZyZXEgcG9saWN5IGN1cnJlbnRseSB1c2VkCisgKgorICogUmVtZW1iZXIgdG8gY2FsbCBjcHVmcmVxX3B1dF9wb2xpY3kgd2hlbiBubyBsb25nZXIgbmVlZGVkCisgKiB0byBhdm9pZCBtZW1vcnkgbGVha2FnZSwgcGxlYXNlLgorICovCisKKworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqIGNwdWZyZXFfZ2V0X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9wdXRfcG9saWN5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KTsKKworCisvKiBkZXRlcm1pbmUgQ1BVZnJlcSBnb3Zlcm5vcnMgY3VycmVudGx5IGF2YWlsYWJsZQorICoKKyAqIG1heSBiZSBtb2RpZmllZCBieSBtb2Rwcm9iZSdpbmcgb3Igcm1tb2QnaW5nIG90aGVyIGdvdmVybm9ycy4gUGxlYXNlCisgKiBmcmVlIGFsbG9jYXRlZCBtZW1vcnkgYnkgY2FsbGluZyBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzCisgKiBhZnRlciB1c2UuCisgKi8KKworCitleHRlcm4gc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqIGNwdWZyZXFfZ2V0X2F2YWlsYWJsZV9nb3Zlcm5vcnModW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9nb3Zlcm5vcnMoc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqZmlyc3QpOworCisKKy8qIGRldGVybWluZSBDUFUgZnJlcXVlbmN5IHN0YXRlcyBhdmFpbGFibGUKKyAqCisgKiBvbmx5IHByZXNlbnQgb24gX3NvbWVfIC0+dGFyZ2V0KCkgY3B1ZnJlcSBkcml2ZXJzLiBGb3IgaW5mb3JtYXRpb24gcHVycG9zZXMKKyAqIG9ubHkuIFBsZWFzZSBmcmVlIGFsbG9jYXRlZCBtZW1vcnkgYnkgY2FsbGluZyBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZnJlcXVlbmNpZXMKKyAqIGFmdGVyIHVzZS4KKyAqLworCitleHRlcm4gc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICogY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdm9pZCBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZnJlcXVlbmNpZXMoc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpmaXJzdCk7CisKKworLyogZGV0ZXJtaW5lIGFmZmVjdGVkIENQVXMgCisgKgorICogUmVtZW1iZXIgdG8gY2FsbCBjcHVmcmVxX3B1dF9hZmZlY3RlZF9jcHVzIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZAorICogdG8gYXZvaWQgbWVtb3J5IGxlYWthZ2UsIHBsZWFzZS4KKyAqLworCitleHRlcm4gc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqIGNwdWZyZXFfZ2V0X2FmZmVjdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmlyc3QpOworCisKKy8qIGRldGVybWluZSByZWxhdGVkIENQVXMgCisgKgorICogUmVtZW1iZXIgdG8gY2FsbCBjcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMgd2hlbiBubyBsb25nZXIgbmVlZGVkCisgKiB0byBhdm9pZCBtZW1vcnkgbGVha2FnZSwgcGxlYXNlLgorICovCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICogY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdm9pZCBjcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmlyc3QpOworCisKKy8qIGRldGVybWluZSBzdGF0cyBmb3IgY3B1ZnJlcSBzdWJzeXN0ZW0KKyAqCisgKiBUaGlzIGlzIG5vdCBhdmFpbGFibGUgaW4gYWxsIGtlcm5lbCB2ZXJzaW9ucyBvciBjb25maWd1cmF0aW9ucy4KKyAqLworCitleHRlcm4gc3RydWN0IGNwdWZyZXFfc3RhdHMgKiBjcHVmcmVxX2dldF9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGxvbmcgKnRvdGFsX3RpbWUpOworCitleHRlcm4gdm9pZCBjcHVmcmVxX3B1dF9zdGF0cyhzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdHMpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF90cmFuc2l0aW9ucyh1bnNpZ25lZCBpbnQgY3B1KTsKKworCisvKiBzZXQgbmV3IGNwdWZyZXEgcG9saWN5IAorICogCisgKiBUcmllcyB0byBzZXQgdGhlIHBhc3NlZCBwb2xpY3kgYXMgbmV3IHBvbGljeSBhcyBjbG9zZSBhcyBwb3NzaWJsZSwKKyAqIGJ1dCByZXN1bHRzIG1heSBkaWZmZXIgZGVwZW5kaW5nIGUuZy4gb24gZ292ZXJub3JzIGJlaW5nIGF2YWlsYWJsZS4KKyAqLworCitleHRlcm4gaW50IGNwdWZyZXFfc2V0X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CisKKworLyogbW9kaWZ5IGEgcG9saWN5IGJ5IG9ubHkgY2hhbmdpbmcgbWluL21heCBmcmVxIG9yIGdvdmVybm9yIAorICoKKyAqIERvZXMgbm90IGNoZWNrIHdoZXRoZXIgcmVzdWx0IGlzIHdoYXQgd2FzIGludGVuZGVkLgorICovCisKK2V4dGVybiBpbnQgY3B1ZnJlcV9tb2RpZnlfcG9saWN5X21pbih1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIG1pbl9mcmVxKTsKK2V4dGVybiBpbnQgY3B1ZnJlcV9tb2RpZnlfcG9saWN5X21heCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIG1heF9mcmVxKTsKK2V4dGVybiBpbnQgY3B1ZnJlcV9tb2RpZnlfcG9saWN5X2dvdmVybm9yKHVuc2lnbmVkIGludCBjcHUsIGNoYXIgKmdvdmVybm9yKTsKKworCisvKiBzZXQgYSBzcGVjaWZpYyBmcmVxdWVuY3kKKyAqCisgKiBEb2VzIG9ubHkgd29yayBpZiB1c2Vyc3BhY2UgZ292ZXJub3IgY2FuIGJlIHVzZWQgYW5kIG5vIGV4dGVybmFsCisgKiBpbnRlcmZlcmVuY2UgKG90aGVyIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gb3IgdG8gc2V0L21vZGlmeV9wb2xpY3kpIAorICogb2NjdXJzLiBBbHNvIGRvZXMgbm90IHdvcmsgb24gLT5yYW5nZSgpIGNwdWZyZXEgZHJpdmVycy4KKyAqLworCitleHRlcm4gaW50IGNwdWZyZXFfc2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHRhcmdldF9mcmVxdWVuY3kpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0NQVUZSRVFfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9saWIvc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWIwNjFmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmMKQEAgLTAsMCArMSw2NzEgQEAKKy8qCisgKiAgKEMpIDIwMDQtMjAwOSAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKworI2RlZmluZSBQQVRIX1RPX0NQVSAiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvIgorI2RlZmluZSBNQVhfTElORV9MRU4gMjU1CisjZGVmaW5lIFNZU0ZTX1BBVEhfTUFYIDI1NQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3lzZnNfcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKwlpbnQgZmQ7CisJc2l6ZV90IG51bXJlYWQ7CisKKwlpZiAoICggZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKSApID09IC0xICkKKwkJcmV0dXJuIDA7CisKKwludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKKwlpZiAoIG51bXJlYWQgPCAxICkKKwl7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnVmW251bXJlYWRdID0gJ1wwJzsKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gbnVtcmVhZDsKK30KKworCisvKiBDUFVGUkVRIHN5c2ZzIGFjY2VzcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgZmlsZSBmcm9tIC9zeXMgaW50byBnaXZlbiBidWZmZXIgKi8KKy8qIGZuYW1lIGlzIGEgcmVsYXRpdmUgcGF0aCB1bmRlciAiY3B1WC9jcHVmcmVxIiBkaXIgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUodW5zaWduZWQgaW50IGNwdSwgY29uc3QgY2hhciAqZm5hbWUsCisJCQkJCSAgICBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgUEFUSF9UT19DUFUgImNwdSV1L2NwdWZyZXEvJXMiLAorCQkJIGNwdSwgZm5hbWUpOworCXJldHVybiBzeXNmc19yZWFkX2ZpbGUocGF0aCwgYnVmLCBidWZsZW4pOworfQorCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gd3JpdGUgYSBuZXcgdmFsdWUgdG8gYSAvc3lzIGZpbGUgKi8KKy8qIGZuYW1lIGlzIGEgcmVsYXRpdmUgcGF0aCB1bmRlciAiY3B1WC9jcHVmcmVxIiBkaXIgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3lzZnNfY3B1ZnJlcV93cml0ZV9maWxlKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCSAgICAgY29uc3QgY2hhciAqZm5hbWUsCisJCQkJCSAgICAgY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCBsZW4pCit7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKwlpbnQgZmQ7CisJc2l6ZV90IG51bXdyaXRlOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAiY3B1JXUvY3B1ZnJlcS8lcyIsCisJCQkgY3B1LCBmbmFtZSk7CisKKwlpZiAoICggZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKSApID09IC0xICkKKwkJcmV0dXJuIDA7CisKKwludW13cml0ZSA9IHdyaXRlKGZkLCB2YWx1ZSwgbGVuKTsKKwlpZiAoIG51bXdyaXRlIDwgMSApCisJeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKworCWNsb3NlKGZkKTsKKworCXJldHVybiBudW13cml0ZTsKK30KKworLyogcmVhZCBhY2Nlc3MgdG8gZmlsZXMgd2hpY2ggY29udGFpbiBvbmUgbnVtZXJpYyB2YWx1ZSAqLworCitlbnVtIGNwdWZyZXFfdmFsdWUgeworCUNQVUlORk9fQ1VSX0ZSRVEsCisJQ1BVSU5GT19NSU5fRlJFUSwKKwlDUFVJTkZPX01BWF9GUkVRLAorCUNQVUlORk9fTEFURU5DWSwKKwlTQ0FMSU5HX0NVUl9GUkVRLAorCVNDQUxJTkdfTUlOX0ZSRVEsCisJU0NBTElOR19NQVhfRlJFUSwKKwlTVEFUU19OVU1fVFJBTlNJVElPTlMsCisJTUFYX0NQVUZSRVFfVkFMVUVfUkVBRF9GSUxFUworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNwdWZyZXFfdmFsdWVfZmlsZXNbTUFYX0NQVUZSRVFfVkFMVUVfUkVBRF9GSUxFU10gPSB7CisJW0NQVUlORk9fQ1VSX0ZSRVFdID0gImNwdWluZm9fY3VyX2ZyZXEiLAorCVtDUFVJTkZPX01JTl9GUkVRXSA9ICJjcHVpbmZvX21pbl9mcmVxIiwKKwlbQ1BVSU5GT19NQVhfRlJFUV0gPSAiY3B1aW5mb19tYXhfZnJlcSIsCisJW0NQVUlORk9fTEFURU5DWV0gID0gImNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5IiwKKwlbU0NBTElOR19DVVJfRlJFUV0gPSAic2NhbGluZ19jdXJfZnJlcSIsCisJW1NDQUxJTkdfTUlOX0ZSRVFdID0gInNjYWxpbmdfbWluX2ZyZXEiLAorCVtTQ0FMSU5HX01BWF9GUkVRXSA9ICJzY2FsaW5nX21heF9mcmVxIiwKKwlbU1RBVFNfTlVNX1RSQU5TSVRJT05TXSA9ICJzdGF0cy90b3RhbF90cmFucyIKK307CisKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCQkgZW51bSBjcHVmcmVxX3ZhbHVlIHdoaWNoKQoreworIAl1bnNpZ25lZCBsb25nIHZhbHVlOworCXVuc2lnbmVkIGludCBsZW47CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqZW5kcDsKKworCWlmICggd2hpY2ggPj0gTUFYX0NQVUZSRVFfVkFMVUVfUkVBRF9GSUxFUyApCisJCXJldHVybiAwOworCisJaWYgKCAoIGxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgY3B1ZnJlcV92YWx1ZV9maWxlc1t3aGljaF0sCisJCQkJCSAgICAgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKSkgPT0gMCApCisJCXJldHVybiAwOworCisJdmFsdWUgPSBzdHJ0b3VsKGxpbmVidWYsICZlbmRwLCAwKTsKKworCWlmICggZW5kcCA9PSBsaW5lYnVmIHx8IGVycm5vID09IEVSQU5HRSApCisJCXJldHVybiAwOworCisJcmV0dXJuIHZhbHVlOworfQorCisvKiByZWFkIGFjY2VzcyB0byBmaWxlcyB3aGljaCBjb250YWluIG9uZSBzdHJpbmcgKi8KKworZW51bSBjcHVmcmVxX3N0cmluZyB7CisJU0NBTElOR19EUklWRVIsCisJU0NBTElOR19HT1ZFUk5PUiwKKwlNQVhfQ1BVRlJFUV9TVFJJTkdfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVmcmVxX3N0cmluZ19maWxlc1tNQVhfQ1BVRlJFUV9TVFJJTkdfRklMRVNdID0geworCVtTQ0FMSU5HX0RSSVZFUl0gPSAic2NhbGluZ19kcml2ZXIiLAorCVtTQ0FMSU5HX0dPVkVSTk9SXSA9ICJzY2FsaW5nX2dvdmVybm9yIiwKK307CisKKworc3RhdGljIGNoYXIgKiBzeXNmc19jcHVmcmVxX2dldF9vbmVfc3RyaW5nKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCSAgIGVudW0gY3B1ZnJlcV9zdHJpbmcgd2hpY2gpCit7CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqcmVzdWx0OworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAod2hpY2ggPj0gTUFYX0NQVUZSRVFfU1RSSU5HX0ZJTEVTKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICggKCBsZW4gPSBzeXNmc19jcHVmcmVxX3JlYWRfZmlsZShjcHUsIGNwdWZyZXFfc3RyaW5nX2ZpbGVzW3doaWNoXSwKKwkJCQkJICAgICBsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpKSA9PSAwICkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoICggcmVzdWx0ID0gc3RyZHVwKGxpbmVidWYpICkgPT0gTlVMTCApCisJCXJldHVybiBOVUxMOworCisJaWYgKHJlc3VsdFtzdHJsZW4ocmVzdWx0KSAtIDFdID09ICdcbicpCisJCXJlc3VsdFtzdHJsZW4ocmVzdWx0KSAtIDFdID0gJ1wwJzsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIHdyaXRlIGFjY2VzcyAqLworCitlbnVtIGNwdWZyZXFfd3JpdGUgeworCVdSSVRFX1NDQUxJTkdfTUlOX0ZSRVEsCisJV1JJVEVfU0NBTElOR19NQVhfRlJFUSwKKwlXUklURV9TQ0FMSU5HX0dPVkVSTk9SLAorCVdSSVRFX1NDQUxJTkdfU0VUX1NQRUVELAorCU1BWF9DUFVGUkVRX1dSSVRFX0ZJTEVTCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY3B1ZnJlcV93cml0ZV9maWxlc1tNQVhfQ1BVRlJFUV9XUklURV9GSUxFU10gPSB7CisJW1dSSVRFX1NDQUxJTkdfTUlOX0ZSRVFdID0gInNjYWxpbmdfbWluX2ZyZXEiLAorCVtXUklURV9TQ0FMSU5HX01BWF9GUkVRXSA9ICJzY2FsaW5nX21heF9mcmVxIiwKKwlbV1JJVEVfU0NBTElOR19HT1ZFUk5PUl0gPSAic2NhbGluZ19nb3Zlcm5vciIsCisJW1dSSVRFX1NDQUxJTkdfU0VUX1NQRUVEXSA9ICJzY2FsaW5nX3NldHNwZWVkIiwKK307CisKK3N0YXRpYyBpbnQgc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJIGVudW0gY3B1ZnJlcV93cml0ZSB3aGljaCwKKwkJCQkJIGNvbnN0IGNoYXIgKm5ld192YWx1ZSwgc2l6ZV90IGxlbikKK3sKKwlpZiAod2hpY2ggPj0gTUFYX0NQVUZSRVFfV1JJVEVfRklMRVMpCisJCXJldHVybiAwOworCisJaWYgKCBzeXNmc19jcHVmcmVxX3dyaXRlX2ZpbGUoY3B1LCBjcHVmcmVxX3dyaXRlX2ZpbGVzW3doaWNoXSwKKwkJCSAgICAgIG5ld192YWx1ZSwgbGVuKSAhPSBsZW4gKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfTsKKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV9rZXJuZWwodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgU0NBTElOR19DVVJfRlJFUSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfaGFyZHdhcmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgQ1BVSU5GT19DVVJfRlJFUSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfdHJhbnNpdGlvbl9sYXRlbmN5KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIENQVUlORk9fTEFURU5DWSk7Cit9CisKK2ludCBzeXNmc19nZXRfZnJlcV9oYXJkd2FyZV9saW1pdHModW5zaWduZWQgaW50IGNwdSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm1pbiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm1heCkKK3sKKwlpZiAoKCFtaW4pIHx8ICghbWF4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqbWluID0gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgQ1BVSU5GT19NSU5fRlJFUSk7CisJaWYgKCEqbWluKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCSptYXggPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBDUFVJTkZPX01BWF9GUkVRKTsKKwlpZiAoISptYXgpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7Cit9CisKK2NoYXIgKiBzeXNmc19nZXRfZnJlcV9kcml2ZXIodW5zaWduZWQgaW50IGNwdSkgeworCXJldHVybiBzeXNmc19jcHVmcmVxX2dldF9vbmVfc3RyaW5nKGNwdSwgU0NBTElOR19EUklWRVIpOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKiBzeXNmc19nZXRfZnJlcV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSkgeworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OworCisJcG9saWN5ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kpKTsKKwlpZiAoIXBvbGljeSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwb2xpY3ktPmdvdmVybm9yID0gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3N0cmluZyhjcHUsIFNDQUxJTkdfR09WRVJOT1IpOworCWlmICghcG9saWN5LT5nb3Zlcm5vcikgeworCQlmcmVlKHBvbGljeSk7CisJCXJldHVybiBOVUxMOworCX0KKwlwb2xpY3ktPm1pbiA9IHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIFNDQUxJTkdfTUlOX0ZSRVEpOworCXBvbGljeS0+bWF4ID0gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgU0NBTElOR19NQVhfRlJFUSk7CisJaWYgKCghcG9saWN5LT5taW4pIHx8ICghcG9saWN5LT5tYXgpKSB7CisJCWZyZWUocG9saWN5LT5nb3Zlcm5vcik7CisJCWZyZWUocG9saWN5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBvbGljeTsKK30KKworc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqCitzeXNmc19nZXRfZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpmaXJzdCA9IE5VTEw7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqY3VycmVudCA9IE5VTEw7CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJdW5zaWduZWQgaW50IHBvcywgaTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKCAoIGxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgInNjYWxpbmdfYXZhaWxhYmxlX2dvdmVybm9ycyIsCisJCQkJCSAgICAgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKSkgPT0gMCApCisJeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwb3MgPSAwOworCWZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQorCXsKKwkJaWYgKCBsaW5lYnVmW2ldID09ICcgJyB8fCBsaW5lYnVmW2ldID09ICdcbicgKQorCQl7CisJCQlpZiAoIGkgLSBwb3MgPCAyICkKKwkJCQljb250aW51ZTsKKwkJCWlmICggY3VycmVudCApIHsKKwkJCQljdXJyZW50LT5uZXh0ID0gbWFsbG9jKHNpemVvZiAqY3VycmVudCApOworCQkJCWlmICggISBjdXJyZW50LT5uZXh0ICkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCQl9IGVsc2UgeworCQkJCWZpcnN0ID0gbWFsbG9jKCBzaXplb2YgKmZpcnN0ICk7CisJCQkJaWYgKCAhIGZpcnN0ICkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGZpcnN0OworCQkJfQorCQkJY3VycmVudC0+Zmlyc3QgPSBmaXJzdDsKKwkJCWN1cnJlbnQtPm5leHQgPSBOVUxMOworCisJCQljdXJyZW50LT5nb3Zlcm5vciA9IG1hbGxvYyhpIC0gcG9zICsgMSk7CisJCQlpZiAoICEgY3VycmVudC0+Z292ZXJub3IgKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCisJCQltZW1jcHkoIGN1cnJlbnQtPmdvdmVybm9yLCBsaW5lYnVmICsgcG9zLCBpIC0gcG9zKTsKKwkJCWN1cnJlbnQtPmdvdmVybm9yW2kgLSBwb3NdID0gJ1wwJzsKKwkJCXBvcyA9IGkgKyAxOworCQl9CisJfQorCisJcmV0dXJuIGZpcnN0OworCisgZXJyb3Jfb3V0OgorCXdoaWxlICggZmlyc3QgKSB7CisJCWN1cnJlbnQgPSBmaXJzdC0+bmV4dDsKKwkJaWYgKCBmaXJzdC0+Z292ZXJub3IgKQorCQkJZnJlZSggZmlyc3QtPmdvdmVybm9yICk7CisJCWZyZWUoIGZpcnN0ICk7CisJCWZpcnN0ID0gY3VycmVudDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICoKK3N5c2ZzX2dldF9hdmFpbGFibGVfZnJlcXVlbmNpZXModW5zaWduZWQgaW50IGNwdSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqZmlyc3QgPSBOVUxMOworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqY3VycmVudCA9IE5VTEw7CisJY2hhciBvbmVfdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCXVuc2lnbmVkIGludCBwb3MsIGk7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICggKCBsZW4gPSBzeXNmc19jcHVmcmVxX3JlYWRfZmlsZShjcHUsCisJCQkJCSAgICAgInNjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIiwKKwkJCQkJICAgICBsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpKSA9PSAwICkKKwl7CisJCXJldHVybiBOVUxMOworCX0KKworCXBvcyA9IDA7CisJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApCisJeworCQlpZiAoIGxpbmVidWZbaV0gPT0gJyAnIHx8IGxpbmVidWZbaV0gPT0gJ1xuJyApCisJCXsKKwkJCWlmICggaSAtIHBvcyA8IDIgKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCBpIC0gcG9zID49IFNZU0ZTX1BBVEhfTUFYICkKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWlmICggY3VycmVudCApIHsKKwkJCQljdXJyZW50LT5uZXh0ID0gbWFsbG9jKHNpemVvZiAqY3VycmVudCApOworCQkJCWlmICggISBjdXJyZW50LT5uZXh0ICkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCQl9IGVsc2UgeworCQkJCWZpcnN0ID0gbWFsbG9jKHNpemVvZiAqZmlyc3QgKTsKKwkJCQlpZiAoICEgZmlyc3QgKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gZmlyc3Q7CisJCQl9CisJCQljdXJyZW50LT5maXJzdCA9IGZpcnN0OworCQkJY3VycmVudC0+bmV4dCA9IE5VTEw7CisKKwkJCW1lbWNweShvbmVfdmFsdWUsIGxpbmVidWYgKyBwb3MsIGkgLSBwb3MpOworCQkJb25lX3ZhbHVlW2kgLSBwb3NdID0gJ1wwJzsKKwkJCWlmICggc3NjYW5mKG9uZV92YWx1ZSwgIiVsdSIsICZjdXJyZW50LT5mcmVxdWVuY3kpICE9IDEgKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCisJCQlwb3MgPSBpICsgMTsKKwkJfQorCX0KKworCXJldHVybiBmaXJzdDsKKworIGVycm9yX291dDoKKwl3aGlsZSAoIGZpcnN0ICkgeworCQljdXJyZW50ID0gZmlyc3QtPm5leHQ7CisJCWZyZWUoZmlyc3QpOworCQlmaXJzdCA9IGN1cnJlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqIHN5c2ZzX2dldF9jcHVfbGlzdCh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJCSBjb25zdCBjaGFyICpmaWxlKSB7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmlyc3QgPSBOVUxMOworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmN1cnJlbnQgPSBOVUxMOworCWNoYXIgb25lX3ZhbHVlW1NZU0ZTX1BBVEhfTUFYXTsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwl1bnNpZ25lZCBpbnQgcG9zLCBpOworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAoICggbGVuID0gc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUoY3B1LCBmaWxlLCBsaW5lYnVmLAorCQkJCQkgICAgIHNpemVvZihsaW5lYnVmKSkpID09IDAgKQorCXsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcG9zID0gMDsKKwlmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkKKwl7CisJCWlmICggaSA9PSBsZW4gfHwgbGluZWJ1ZltpXSA9PSAnICcgfHwgbGluZWJ1ZltpXSA9PSAnXG4nICkKKwkJeworCQkJaWYgKCBpIC0gcG9zICA8IDEgKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCBpIC0gcG9zID49IFNZU0ZTX1BBVEhfTUFYICkKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWlmICggY3VycmVudCApIHsKKwkJCQljdXJyZW50LT5uZXh0ID0gbWFsbG9jKHNpemVvZiAqY3VycmVudCk7CisJCQkJaWYgKCAhIGN1cnJlbnQtPm5leHQgKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJZmlyc3QgPSBtYWxsb2Moc2l6ZW9mICpmaXJzdCk7CisJCQkJaWYgKCAhIGZpcnN0ICkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGZpcnN0OworCQkJfQorCQkJY3VycmVudC0+Zmlyc3QgPSBmaXJzdDsKKwkJCWN1cnJlbnQtPm5leHQgPSBOVUxMOworCisJCQltZW1jcHkob25lX3ZhbHVlLCBsaW5lYnVmICsgcG9zLCBpIC0gcG9zKTsKKwkJCW9uZV92YWx1ZVtpIC0gcG9zXSA9ICdcMCc7CisKKwkJCWlmICggc3NjYW5mKG9uZV92YWx1ZSwgIiV1IiwgJmN1cnJlbnQtPmNwdSkgIT0gMSApCisJCQkJZ290byBlcnJvcl9vdXQ7CisKKwkJCXBvcyA9IGkgKyAxOworCQl9CisJfQorCisJcmV0dXJuIGZpcnN0OworCisgZXJyb3Jfb3V0OgorCXdoaWxlIChmaXJzdCkgeworCQljdXJyZW50ID0gZmlyc3QtPm5leHQ7CisJCWZyZWUoZmlyc3QpOworCQlmaXJzdCA9IGN1cnJlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICogc3lzZnNfZ2V0X2ZyZXFfYWZmZWN0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJcmV0dXJuIHN5c2ZzX2dldF9jcHVfbGlzdChjcHUsICJhZmZlY3RlZF9jcHVzIik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBzeXNmc19nZXRfZnJlcV9yZWxhdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSkgeworCXJldHVybiBzeXNmc19nZXRfY3B1X2xpc3QoY3B1LCAicmVsYXRlZF9jcHVzIik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3N0YXRzICogc3lzZnNfZ2V0X2ZyZXFfc3RhdHModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBsb25nICp0b3RhbF90aW1lKSB7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKmZpcnN0ID0gTlVMTDsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqY3VycmVudCA9IE5VTEw7CisJY2hhciBvbmVfdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCXVuc2lnbmVkIGludCBwb3MsIGk7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICggKCBsZW4gPSBzeXNmc19jcHVmcmVxX3JlYWRfZmlsZShjcHUsICJzdGF0cy90aW1lX2luX3N0YXRlIiwKKwkJCQkJICAgICBsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpKSA9PSAwICkKKwkJcmV0dXJuIE5VTEw7CisKKwkqdG90YWxfdGltZSA9IDA7CisJcG9zID0gMDsKKwlmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkKKwl7CisJCWlmICggaSA9PSBzdHJsZW4obGluZWJ1ZikgfHwgbGluZWJ1ZltpXSA9PSAnXG4nICkKKwkJeworCQkJaWYgKCBpIC0gcG9zIDwgMiApCisJCQkJY29udGludWU7CisJCQlpZiAoIChpIC0gcG9zKSA+PSBTWVNGU19QQVRIX01BWCApCisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQlpZiAoIGN1cnJlbnQgKSB7CisJCQkJY3VycmVudC0+bmV4dCA9IG1hbGxvYyhzaXplb2YgKmN1cnJlbnQgKTsKKwkJCQlpZiAoICEgY3VycmVudC0+bmV4dCApCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlmaXJzdCA9IG1hbGxvYyhzaXplb2YgKmZpcnN0ICk7CisJCQkJaWYgKCAhIGZpcnN0ICkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGZpcnN0OworCQkJfQorCQkJY3VycmVudC0+Zmlyc3QgPSBmaXJzdDsKKwkJCWN1cnJlbnQtPm5leHQgPSBOVUxMOworCisJCQltZW1jcHkob25lX3ZhbHVlLCBsaW5lYnVmICsgcG9zLCBpIC0gcG9zKTsKKwkJCW9uZV92YWx1ZVtpIC0gcG9zXSA9ICdcMCc7CisJCQlpZiAoIHNzY2FuZihvbmVfdmFsdWUsICIlbHUgJWxsdSIsICZjdXJyZW50LT5mcmVxdWVuY3ksICZjdXJyZW50LT50aW1lX2luX3N0YXRlKSAhPSAyICkKKwkJCQlnb3RvIGVycm9yX291dDsKKworCQkJKnRvdGFsX3RpbWUgPSAqdG90YWxfdGltZSArIGN1cnJlbnQtPnRpbWVfaW5fc3RhdGU7CisJCQlwb3MgPSBpICsgMTsKKwkJfQorCX0KKworCXJldHVybiBmaXJzdDsKKworIGVycm9yX291dDoKKwl3aGlsZSAoIGZpcnN0ICkgeworCQljdXJyZW50ID0gZmlyc3QtPm5leHQ7CisJCWZyZWUoZmlyc3QpOworCQlmaXJzdCA9IGN1cnJlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCit1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25zKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIFNUQVRTX05VTV9UUkFOU0lUSU9OUyk7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2dvdihjaGFyICpuZXdfZ292LCBjaGFyICpwYXNzZWRfZ292KQoreworCXVuc2lnbmVkIGludCBpLCBqPTA7CisKKwlpZiAoIXBhc3NlZF9nb3YgfHwgKHN0cmxlbihwYXNzZWRfZ292KSA+IDE5KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJuY3B5KG5ld19nb3YsIHBhc3NlZF9nb3YsIDIwKTsKKwlmb3IgKGk9MDtpPDIwO2krKykgeworCQlpZiAoaikgeworCQkJbmV3X2dvdltpXSA9ICdcMCc7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKG5ld19nb3ZbaV0gPj0gJ2EnKSAmJiAobmV3X2dvdltpXSA8PSAneicpKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKG5ld19nb3ZbaV0gPj0gJ0EnKSAmJiAobmV3X2dvdltpXSA8PSAnWicpKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobmV3X2dvdltpXSA9PSAnLScpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChuZXdfZ292W2ldID09ICdfJykgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG5ld19nb3ZbaV0gPT0gJ1wwJykgeworCQkJaiA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbmV3X2dvdlsxOV0gPSAnXDAnOworCXJldHVybiAwOworfQorCitpbnQgc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X2dvdmVybm9yKHVuc2lnbmVkIGludCBjcHUsIGNoYXIgKmdvdmVybm9yKQoreworCWNoYXIgbmV3X2dvdltTWVNGU19QQVRIX01BWF07CisKKwlpZiAoIWdvdmVybm9yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2ZXJpZnlfZ292KG5ld19nb3YsIGdvdmVybm9yKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX0dPVkVSTk9SLAorCQkJCQkgICAgIG5ld19nb3YsIHN0cmxlbihuZXdfZ292KSk7Cit9OworCitpbnQgc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X21heCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIG1heF9mcmVxKQoreworCWNoYXIgdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCisJc25wcmludGYodmFsdWUsIFNZU0ZTX1BBVEhfTUFYLCAiJWx1IiwgbWF4X2ZyZXEpOworCisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKGNwdSwgV1JJVEVfU0NBTElOR19NQVhfRlJFUSwKKwkJCQkJICAgICB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7Cit9OworCisKK2ludCBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfbWluKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWluX2ZyZXEpCit7CisJY2hhciB2YWx1ZVtTWVNGU19QQVRIX01BWF07CisKKwlzbnByaW50Zih2YWx1ZSwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCBtaW5fZnJlcSk7CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01JTl9GUkVRLAorCQkJCQkgICAgIHZhbHVlLCBzdHJsZW4odmFsdWUpKTsKK307CisKKworaW50IHN5c2ZzX3NldF9mcmVxX3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwljaGFyIG1pbltTWVNGU19QQVRIX01BWF07CisJY2hhciBtYXhbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgZ292W1NZU0ZTX1BBVEhfTUFYXTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgb2xkX21pbjsKKwlpbnQgd3JpdGVfbWF4X2ZpcnN0OworCisJaWYgKCFwb2xpY3kgfHwgIShwb2xpY3ktPmdvdmVybm9yKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocG9saWN5LT5tYXggPCBwb2xpY3ktPm1pbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmVyaWZ5X2dvdihnb3YsIHBvbGljeS0+Z292ZXJub3IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNucHJpbnRmKG1pbiwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCBwb2xpY3ktPm1pbik7CisJc25wcmludGYobWF4LCBTWVNGU19QQVRIX01BWCwgIiVsdSIsIHBvbGljeS0+bWF4KTsKKworCW9sZF9taW4gPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTQ0FMSU5HX01JTl9GUkVRKTsKKwl3cml0ZV9tYXhfZmlyc3QgPSAob2xkX21pbiAmJiAocG9saWN5LT5tYXggPCBvbGRfbWluKSA/IDAgOiAxKTsKKworCWlmICh3cml0ZV9tYXhfZmlyc3QpIHsKKwkJcmV0ID0gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01BWF9GUkVRLAorCQkJCQkJICAgIG1heCwgc3RybGVuKG1heCkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfTUlOX0ZSRVEsIG1pbiwKKwkJCQkJICAgIHN0cmxlbihtaW4pKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCF3cml0ZV9tYXhfZmlyc3QpIHsKKwkJcmV0ID0gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01BWF9GUkVRLAorCQkJCQkJICAgIG1heCwgc3RybGVuKG1heCkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX0dPVkVSTk9SLAorCQkJCQkgICAgIGdvdiwgc3RybGVuKGdvdikpOworfQorCitpbnQgc3lzZnNfc2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHRhcmdldF9mcmVxdWVuY3kpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbCA9IHN5c2ZzX2dldF9mcmVxX3BvbGljeShjcHUpOworCWNoYXIgdXNlcnNwYWNlX2dvdltdID0gInVzZXJzcGFjZSI7CisJY2hhciBmcmVxW1NZU0ZTX1BBVEhfTUFYXTsKKwlpbnQgcmV0OworCisJaWYgKCFwb2wpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHN0cm5jbXAocG9sLT5nb3Zlcm5vciwgdXNlcnNwYWNlX2dvdiwgOSkgIT0gMCkgeworCQlyZXQgPSBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfZ292ZXJub3IoY3B1LCB1c2Vyc3BhY2VfZ292KTsKKwkJaWYgKHJldCkgeworCQkJY3B1ZnJlcV9wdXRfcG9saWN5KHBvbCk7CisJCQlyZXR1cm4gKHJldCk7CisJCX0KKwl9CisKKwljcHVmcmVxX3B1dF9wb2xpY3kocG9sKTsKKworCXNucHJpbnRmKGZyZXEsIFNZU0ZTX1BBVEhfTUFYLCAiJWx1IiwgdGFyZ2V0X2ZyZXF1ZW5jeSk7CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX1NFVF9TUEVFRCwKKwkJCQkJICAgICBmcmVxLCBzdHJsZW4oZnJlcSkpOworfQorCisvKiBDUFVGUkVRIHN5c2ZzIGFjY2VzcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogR2VuZXJhbCBzeXNmcyBhY2Nlc3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgc3lzZnNfY3B1X2V4aXN0cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCWNoYXIgZmlsZVtTWVNGU19QQVRIX01BWF07CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKworCXNucHJpbnRmKGZpbGUsIFNZU0ZTX1BBVEhfTUFYLCBQQVRIX1RPX0NQVSAiY3B1JXUvIiwgY3B1KTsKKworCWlmICggc3RhdChmaWxlLCAmc3RhdGJ1ZikgIT0gMCApCisJCXJldHVybiAtRU5PU1lTOworCisJcmV0dXJuIFNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSA/IDAgOiAtRU5PU1lTOworfQorCisvKiBHZW5lcmFsIHN5c2ZzIGFjY2VzcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9zeXNmcy5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5ZTU1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9zeXNmcy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIEdlbmVyYWwgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzZnNfY3B1X2V4aXN0cyh1bnNpZ25lZCBpbnQgY3B1KTsKKworLyogQ1BVZnJlcSAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfa2VybmVsKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfaGFyZHdhcmUodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaW50IHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nICptaW4sIHVuc2lnbmVkIGxvbmcgKm1heCk7CitleHRlcm4gY2hhciAqIHN5c2ZzX2dldF9mcmVxX2RyaXZlcih1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKiBzeXNmc19nZXRfZnJlcV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqIHN5c2ZzX2dldF9mcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnModW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICogc3lzZnNfZ2V0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICogc3lzZnNfZ2V0X2ZyZXFfYWZmZWN0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICogc3lzZnNfZ2V0X2ZyZXFfcmVsYXRlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3N0YXRzICogc3lzZnNfZ2V0X2ZyZXFfc3RhdHModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBsb25nICp0b3RhbF90aW1lKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25zKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIGludCBzeXNmc19zZXRfZnJlcV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworZXh0ZXJuIGludCBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfbWluKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWluX2ZyZXEpOworZXh0ZXJuIGludCBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfbWF4KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWF4X2ZyZXEpOworZXh0ZXJuIGludCBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfZ292ZXJub3IodW5zaWduZWQgaW50IGNwdSwgY2hhciAqZ292ZXJub3IpOworZXh0ZXJuIGludCBzeXNmc19zZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X2ZyZXF1ZW5jeSk7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItZnJlcXVlbmN5LWluZm8uMSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktaW5mby4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTQ4MTEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItZnJlcXVlbmN5LWluZm8uMQpAQCAtMCwwICsxLDc2IEBACisuVEggImNwdWZyZXEtaW5mbyIgIjEiICIwLjEiICJNYXR0aWEgRG9uZ2lsaSIgIiIKKy5TSCAiTkFNRSIKKy5MUCAKK2NwdWZyZXFcLWluZm8gXC0gVXRpbGl0eSB0byByZXRyaWV2ZSBjcHVmcmVxIGtlcm5lbCBpbmZvcm1hdGlvbgorLlNIICJTWU5UQVgiCisuTFAgCitjcHVmcmVxXC1pbmZvIFtcZklvcHRpb25zXGZQXQorLlNIICJERVNDUklQVElPTiIKKy5MUCAKK0Egc21hbGwgdG9vbCB3aGljaCBwcmludHMgb3V0IGNwdWZyZXEgaW5mb3JtYXRpb24gaGVscGZ1bCB0byBkZXZlbG9wZXJzIGFuZCBpbnRlcmVzdGVkIHVzZXJzLgorLlNIICJPUFRJT05TIgorLkxQIAorLlRQICAKK1xmQlwtZVxmUiBcZkJcLVwtZGVidWdcZlIKK1ByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24uCisuVFAgIAorXGZCXC1mXGZSIFxmQlwtXC1mcmVxXGZSCitHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZyB0byB0aGUgY3B1ZnJlcSBjb3JlLgorLlRQICAKK1xmQlwtd1xmUiBcZkJcLVwtaHdmcmVxXGZSCitHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmcgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkuCisuVFAgIAorXGZCXC1sXGZSIFxmQlwtXC1od2xpbWl0c1xmUgorRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIENQVSBmcmVxdWVuY3kgYWxsb3dlZC4KKy5UUCAgCitcZkJcLWRcZlIgXGZCXC1cLWRyaXZlclxmUgorRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIuCisuVFAgIAorXGZCXC1wXGZSIFxmQlwtXC1wb2xpY3lcZlIKK0dldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5LgorLlRQICAKK1xmQlwtZ1xmUiBcZkJcLVwtZ292ZXJub3JzXGZSCitEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycy4KKy5UUCAgCitcZkJcLWFcZlIgXGZCXC1cLXJlbGF0ZWRcLWNwdXNcZlIKK0RldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5LgorLlRQICAKK1xmQlwtYVxmUiBcZkJcLVwtYWZmZWN0ZWRcLWNwdXNcZlIKK0RldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlLgorLlRQICAKK1xmQlwtc1xmUiBcZkJcLVwtc3RhdHNcZlIKK1Nob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGUuCisuVFAgIAorXGZCXC15XGZSIFxmQlwtXC1sYXRlbmN5XGZSCitEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSBjaGFuZ2VzLgorLlRQICAKK1xmQlwtb1xmUiBcZkJcLVwtcHJvY1xmUgorUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy9jcHVmcmVxIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHMuCisuVFAgIAorXGZCXC1tXGZSIFxmQlwtXC1odW1hblxmUgoraHVtYW5cLXJlYWRhYmxlIG91dHB1dCBmb3IgdGhlIFwtZiwgXC13LCBcLXMgYW5kIFwteSBwYXJhbWV0ZXJzLgorLlRQICAKK1xmQlwtaFxmUiBcZkJcLVwtaGVscFxmUgorUHJpbnRzIG91dCB0aGUgaGVscCBzY3JlZW4uCisuU0ggIlJFTUFSS1MiCisuTFAgCitCeSBkZWZhdWx0IG9ubHkgdmFsdWVzIG9mIGNvcmUgemVybyBhcmUgZGlzcGxheWVkLiBIb3cgdG8gZGlzcGxheSBzZXR0aW5ncyBvZgorb3RoZXIgY29yZXMgaXMgZGVzY3JpYmVkIGluIHRoZSBjcHVwb3dlcigxKSBtYW5wYWdlIGluIHRoZSBcLVwtY3B1IG9wdGlvbiBzZWN0aW9uLgorLkxQIAorWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvZiB0aGUgb3V0cHV0IHNwZWNpZmljIG9wdGlvbnMgXC1vIFwtZSBcLWEgXC1nIFwtcCBcLWQgXC1sIFwtdyBcLWYgXC15LgorLkxQIAorWW91IGFsc28gY2FuJ3Qgc3BlY2lmeSB0aGUgXC1vIG9wdGlvbiBjb21iaW5lZCB3aXRoIHRoZSBcLWMgb3B0aW9uLgorLlNIICJGSUxFUyIKKy5uZiAKK1xmSS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY3B1ZnJlcS9cZlAgIAorXGZJL3Byb2MvY3B1ZnJlcVxmUCAoZGVwcmVjYXRlZCkgCitcZkkvcHJvYy9zeXMvY3B1L1xmUCAoZGVwcmVjYXRlZCkKKy5maSAKKy5TSCAiQVVUSE9SUyIKKy5uZgorRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiBcLSBhdXRob3IgCitNYXR0aWEgRG9uZ2lsaTxtYWxhdHRpYUBnbWFpbC5jb20+IFwtIGZpcnN0IGF1dG9saWJ0b29saXphdGlvbgorLmZpCisuU0ggIlNFRSBBTFNPIgorLkxQIAorY3B1cG93ZXJcLWZyZXF1ZW5jeVwtc2V0KDEpLCBjcHVwb3dlcigxKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWZyZXF1ZW5jeS1zZXQuMSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktc2V0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlM2UxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktc2V0LjEKQEAgLTAsMCArMSw1NCBAQAorLlRIICJjcHVmcmVxLXNldCIgIjEiICIwLjEiICJNYXR0aWEgRG9uZ2lsaSIgIiIKKy5TSCAiTkFNRSIKKy5MUCAKK2NwdWZyZXFcLXNldCBcLSBBIHNtYWxsIHRvb2wgd2hpY2ggYWxsb3dzIHRvIG1vZGlmeSBjcHVmcmVxIHNldHRpbmdzLgorLlNIICJTWU5UQVgiCisuTFAgCitjcHVmcmVxXC1zZXQgW1xmSW9wdGlvbnNcZlBdCisuU0ggIkRFU0NSSVBUSU9OIgorLkxQIAorY3B1ZnJlcVwtc2V0IGFsbG93cyB5b3UgdG8gbW9kaWZ5IGNwdWZyZXEgc2V0dGluZ3Mgd2l0aG91dCBoYXZpbmcgdG8gdHlwZSBlLmcuICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvc2NhbGluZ19zZXRfc3BlZWQiIGFsbCB0aGUgdGltZS4KKy5TSCAiT1BUSU9OUyIKKy5MUCAKKy5UUCAKK1xmQlwtZFxmUiBcZkJcLVwtbWluXGZSIDxGUkVRPgorbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5IHNlbGVjdC4KKy5UUCAKK1xmQlwtdVxmUiBcZkJcLVwtbWF4XGZSIDxGUkVRPgorbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5IHNlbGVjdC4KKy5UUCAKK1xmQlwtZ1xmUiBcZkJcLVwtZ292ZXJub3JcZlIgPEdPVj4KK25ldyBjcHVmcmVxIGdvdmVybm9yLgorLlRQIAorXGZCXC1mXGZSIFxmQlwtXC1mcmVxXGZSIDxGUkVRPgorc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkLgorLlRQIAorXGZCXC1yXGZSIFxmQlwtXC1yZWxhdGVkXGZSCittb2RpZnkgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVcyBhdCB0aGUgc2FtZSB0aW1lCisuVFAgCitcZkJcLWhcZlIgXGZCXC1cLWhlbHBcZlIKK1ByaW50cyBvdXQgdGhlIGhlbHAgc2NyZWVuLgorLlNIICJSRU1BUktTIgorLkxQIAorQnkgZGVmYXVsdCB2YWx1ZXMgYXJlIGFwcGxpZWQgb24gYWxsIGNvcmVzLiBIb3cgdG8gbW9kaWZ5IHNpbmdsZSBjb3JlCitjb25maWd1cmF0aW9ucyBpcyBkZXNjcmliZWQgaW4gdGhlIGNwdXBvd2VyKDEpIG1hbnBhZ2UgaW4gdGhlIFwtXC1jcHUgb3B0aW9uIHNlY3Rpb24uCisuTFAgCitUaGUgXC1mIEZSRVEsIFwtXC1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBwYXJhbWV0ZXIuCisuTFAgCitGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6IGJ5IHBvc3RmaXhpbmcgdGhlIHZhbHVlIHdpdGggdGhlIHdhbnRlZCB1bml0IG5hbWUsIHdpdGhvdXQgYW55IHNwYWNlIChmcmVxdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS4KKy5MUCAKK09uIExpbnV4IGtlcm5lbHMgdXAgdG8gMi42LjI5LCB0aGUgXC1yIG9yIFwtXC1yZWxhdGVkIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorLlNIICJGSUxFUyIgCisubmYKK1xmSS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY3B1ZnJlcS9cZlAgIAorXGZJL3Byb2MvY3B1ZnJlcVxmUCAoZGVwcmVjYXRlZCkgCitcZkkvcHJvYy9zeXMvY3B1L1xmUCAoZGVwcmVjYXRlZCkKKy5maSAKKy5TSCAiQVVUSE9SUyIKKy5uZiAKK0RvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4gXC0gYXV0aG9yIAorTWF0dGlhIERvbmdpbGk8bWFsYXR0aWFAZ21haWwuY29tPiBcLSBmaXJzdCBhdXRvbGlidG9vbGl6YXRpb24KKy5maQorLlNIICJTRUUgQUxTTyIKKy5MUCAKK2NwdXBvd2VyXC1mcmVxdWVuY3lcLWluZm8oMSksIGNwdXBvd2VyKDEpCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItaW5mby4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWluZm8uMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGUyMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWluZm8uMQpAQCAtMCwwICsxLDE5IEBACisuVEggQ1BVUE9XRVJcLUlORk8gIjEiICIyMi8wMi8yMDExIiAiIiAiY3B1cG93ZXIgTWFudWFsIgorLlNIIE5BTUUKK2NwdXBvd2VyXC1pbmZvIFwtIFNob3dzIHByb2Nlc3NvciBwb3dlciByZWxhdGVkIGtlcm5lbCBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucworLlNIIFNZTk9QU0lTCisuZnQgQgorLkIgY3B1cG93ZXIgaW5mbyBbIFwtYiBdIFsgXC1zIF0gWyBcLW0gXQorCisuU0ggREVTQ1JJUFRJT04KK1xmQmNwdXBvd2VyIGluZm8gXGZQIHNob3dzIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBwcm9jZXNzb3IgaGFyZHdhcmUKK3JlZ2lzdGVycyBhZmZlY3RpbmcgcHJvY2Vzc29yIHBvd2VyIHNhdmluZyBwb2xpY2llcy4KKworU29tZSBvcHRpb25zIGFyZSBwbGF0Zm9ybSB3aWRlLCBzb21lIGFmZmVjdCBzaW5nbGUgY29yZXMuIEJ5IGRlZmF1bHQgdmFsdWVzCitvZiBjb3JlIHplcm8gYXJlIGRpc3BsYXllZCBvbmx5LiBjcHVwb3dlciAtLWNwdSBhbGwgY3B1aW5mbyB3aWxsIHNob3cgdGhlCitzZXR0aW5ncyBvZiBhbGwgY29yZXMsIHNlZSBjcHVwb3dlcigxKSBob3cgdG8gY2hvb3NlIHNwZWNpZmljIGNvcmVzLgorCisuU0ggIlNFRSBBTFNPIgorT3B0aW9ucyBhcmUgZGVzY3JpYmVkIGluIGRldGFpbCBpbjoKKworY3B1cG93ZXIoMSksIGNwdXBvd2VyLXNldCgxKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLW1vbml0b3IuMSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1tb25pdG9yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZmEyNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1tb25pdG9yLjEKQEAgLTAsMCArMSwxNzkgQEAKKy5USCBDUFVQT1dFUlwtTU9OSVRPUiAiMSIgIjIyLzAyLzIwMTEiICIiICJjcHVwb3dlciBNYW51YWwiCisuU0ggTkFNRQorY3B1cG93ZXJcLW1vbml0b3IgXC0gUmVwb3J0IHByb2Nlc3NvciBmcmVxdWVuY3kgYW5kIGlkbGUgc3RhdGlzdGljcworLlNIIFNZTk9QU0lTCisuZnQgQgorLkIgY3B1cG93ZXIgbW9uaXRvcgorLlJCICJcLWwiCisKKy5CIGNwdXBvd2VyIG1vbml0b3IKKy5SQiBbICJcLW0gPG1vbjE+LCIgWyAiPG1vbjI+LC4uLiIgXSBdCisuUkIgWyAiXC1pIHNlY29uZHMiIF0KKy5icgorLkIgY3B1cG93ZXIgbW9uaXRvcgorLlJCIFsgIlwtbSA8bW9uMT4sIiBbICI8bW9uMj4sLi4uIiBdIF0KKy5SQiBjb21tYW5kCisuYnIKKy5TSCBERVNDUklQVElPTgorXGZCY3B1cG93ZXItbW9uaXRvciBcZlAgcmVwb3J0cyBwcm9jZXNzb3IgdG9wb2xvZ3ksIGZyZXF1ZW5jeSBhbmQgaWRsZSBwb3dlcgorc3RhdGUgc3RhdGlzdGljcy4gRWl0aGVyIFxmQmNvbW1hbmRcZlAgaXMgZm9ya2VkIGFuZAorc3RhdGlzdGljcyBhcmUgcHJpbnRlZCB1cG9uIGl0cyBjb21wbGV0aW9uLCBvciBzdGF0aXN0aWNzIGFyZSBwcmludGVkIHBlcmlvZGljYWxseS4KKworXGZCY3B1cG93ZXItbW9uaXRvciBcZlAgaW1wbGVtZW50cyBpbmRlcGVuZGVudCBwcm9jZXNzb3Igc2xlZXAgc3RhdGUgYW5kCitmcmVxdWVuY3kgY291bnRlcnMuIFNvbWUgYXJlIHJldHJpZXZlZCBmcm9tIGtlcm5lbCBzdGF0aXN0aWNzLCBzb21lIGFyZQorZGlyZWN0bHkgcmVhZGluZyBvdXQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBVc2UgXC1sIHRvIGdldCBhbiBvdmVydmlldyB3aGljaCBhcmUKK3N1cHBvcnRlZCBvbiB5b3VyIHN5c3RlbS4KKworLlNIIE9wdGlvbnMKKy5QUAorXC1sCisuUlMgNAorTGlzdCBhdmFpbGFibGUgbW9uaXRvcnMgb24geW91ciBzeXN0ZW0uIEFkZGl0aW9uYWwgZGV0YWlscyBhYm91dCBlYWNoIG1vbml0b3IKK2FyZSBzaG93bjoKKy5SUyAyCisuSVAgXChidQorVGhlIG5hbWUgaW4gcXVvdGF0aW9uIG1hcmtzIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gdGhlIFwtbSBwYXJhbWV0ZXIuCisuSVAgXChidQorVGhlIG51bWJlciBvZiBkaWZmZXJlbnQgY291bnRlcnMgdGhlIG1vbml0b3Igc3VwcG9ydHMgaW4gYnJhY2tldHMuCisuSVAgXChidQorVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdGhlIGNvdW50ZXJzIG1pZ2h0IG92ZXJmbG93LCBkdWUgdG8KK2ltcGxlbWVudGF0aW9uIGNvbnN0cmFpbnRzLgorLklQIFwoYnUKK1RoZSBuYW1lIGFuZCBhIGRlc2NyaXB0aW9uIG9mIGVhY2ggY291bnRlciBhbmQgaXRzIHByb2Nlc3NvciBoaWVyYXJjaHkgbGV2ZWwKK2NvdmVyYWdlIGluIHNxdWFyZSBicmFja2V0czoKKy5SUyA0CisuSVAgXChidQorW1RdIFwtPiBUaHJlYWQKKy5JUCBcKGJ1CitbQ10gXC0+IENvcmUKKy5JUCBcKGJ1CitbUF0gXC0+IFByb2Nlc3NvciBQYWNrYWdlIChTb2NrZXQpCisuSVAgXChidQorW01dIFwtPiBNYWNoaW5lL1BsYXRmb3JtIHdpZGUgY291bnRlcgorLlJFCisuUkUKKy5SRQorLlBQCitcLW0gPG1vbjE+LDxtb24yPiwuLi4KKy5SUyA0CitPbmx5IGRpc3BsYXkgc3BlY2lmaWMgbW9uaXRvcnMuIFVzZSB0aGUgbW9uaXRvciBzdHJpbmcocykgcHJvdmlkZWQgYnkgXC1sIG9wdGlvbi4KKy5SRQorLlBQCitcLWkgc2Vjb25kcworLlJTIDQKK01lYXN1cmUgaW50ZXJ2YWxsLgorLlJFCisuUFAKK2NvbW1hbmQKKy5SUyA0CitNZWFzdXJlIGlkbGUgYW5kIGZyZXF1ZW5jeSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYW4gYXJiaXRyYXJ5IGNvbW1hbmQvd29ya2xvYWQuCitUaGUgZXhlY3V0YWJsZSBcZkJjb21tYW5kXGZQIGlzIGZvcmtlZCBhbmQgdXBvbiBpdHMgZXhpdCwgc3RhdGlzdGljcyBnYXRoZXJlZCBzaW5jZSBpdCB3YXMKK2ZvcmtlZCBhcmUgZGlzcGxheWVkLgorLlJFCisuUFAKK1wtdgorLlJTIDQKK0luY3JlYXNlIHZlcmJvc2l0eSBpZiB0aGUgYmluYXJ5IHdhcyBjb21waWxlZCB3aXRoIHRoZSBERUJVRyBvcHRpb24gc2V0LgorLlJFCisKKy5TSCBNT05JVE9SIERFU0NSSVBUSU9OUworLlNTICJJZGxlX1N0YXRzIgorU2hvd3Mgc3RhdGlzdGljcyBvZiB0aGUgY3B1aWRsZSBrZXJuZWwgc3Vic3lzdGVtLiBWYWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCisvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NwdWlkbGUvc3RhdGUqLy4KK1RoZSBrZXJuZWwgdXBkYXRlcyB0aGVzZSB2YWx1ZXMgZXZlcnkgdGltZSBhbiBpZGxlIHN0YXRlIGlzIGVudGVyZWQgb3IKK2xlZnQuIFRoZXJlZm9yZSB0aGVyZSBjYW4gYmUgc29tZSBpbmFjY3VyYWN5IHdoZW4gY29yZXMgYXJlIGluIGFuIGlkbGUKK3N0YXRlIGZvciBzb21lIHRpbWUgd2hlbiB0aGUgbWVhc3VyZSBzdGFydHMgb3IgZW5kcy4gSW4gd29yc3QgY2FzZSBpdCBjYW4gaGFwcGVuCit0aGF0IG9uZSBjb3JlIHN0YXllZCBpbiBhbiBpZGxlIHN0YXRlIGZvciB0aGUgd2hvbGUgbWVhc3VyZSB0aW1lIGFuZCB0aGUgaWRsZQorc3RhdGUgdXNhZ2UgdGltZSBhcyBleHBvcnRlZCBieSB0aGUga2VybmVsIGRpZCBub3QgZ2V0IHVwZGF0ZWQuIEluIHRoaXMgY2FzZQorYSBzdGF0ZSByZXNpZGVuY3kgb2YgMCBwZXJjZW50IGlzIHNob3duIHdoaWxlIGl0IHdhcyAxMDAuCisKKy5TUyAiTXBlcmYiCitUaGUgbmFtZSBjb21lcyBmcm9tIHRoZSBhcGVyZi9tcGVyZiAoYXZlcmFnZSBhbmQgbWF4aW11bSkgTVNSIHJlZ2lzdGVycyB1c2VkCit3aGljaCBhcmUgYXZhaWxhYmxlIG9uIHJlY2VudCBYODYgcHJvY2Vzc29ycy4gSXQgc2hvd3MgdGhlIGF2ZXJhZ2UgZnJlcXVlbmN5CisoaW5jbHVkaW5nIGJvb3N0IGZyZXF1ZW5jaWVzKS4KK1RoZSBmYWN0IHRoYXQgb24gYWxsIHJlY2VudCBoYXJkd2FyZSB0aGUgbXBlcmYgdGltZXIgc3RvcHMgdGlja2luZyBpbiBhbnkgaWRsZQorc3RhdGUgaXQgaXMgYWxzbyB1c2VkIHRvIHNob3cgQzAgKHByb2Nlc3NvciBpcyBhY3RpdmUpIGFuZCBDeCAocHJvY2Vzc29yIGlzIGluCithbnkgc2xlZXAgc3RhdGUpIHRpbWVzLiBUaGVzZSBjb3VudGVycyBkbyBub3QgaGF2ZSB0aGUgaW5hY2N1cmFjeSByZXN0cmljdGlvbnMKK3RoZSAiSWRsZV9TdGF0cyIgY291bnRlcnMgbWF5IHNob3cuCitNYXkgd29yayBwb29ybHkgb24gTGludXgtMi42LjIwIHRocm91Z2ggMi42LjI5LCBhcyB0aGUgXGZCYWNwaS1jcHVmcmVxIFxmUAora2VybmVsIGZyZXF1ZW5jeSBkcml2ZXIgcGVyaW9kaWNhbGx5IGNsZWFyZWQgYXBlcmYvbXBlcmYgcmVnaXN0ZXJzIGluIHRob3NlCitrZXJuZWxzLgorCisuU1MgIk5laGFsZW0iICJTYW5keUJyaWRnZSIKK0ludGVsIENvcmUgYW5kIFBhY2thZ2Ugc2xlZXAgc3RhdGUgY291bnRlcnMuCitUaHJlYWRzIChoeXBlcnRocmVhZGVkIGNvcmVzKSBtYXkgbm90IGJlIGFibGUgdG8gZW50ZXIgZGVlcGVyIGNvcmUgc3RhdGVzIGlmCitpdHMgc2libGluZyBpcyB1dGlsaXplZC4KK0RlZXBlc3QgcGFja2FnZSBzbGVlcCBzdGF0ZXMgbWF5IGluIHJlYWxpdHkgc2hvdyB1cCBhcyBtYWNoaW5lL3BsYXRmb3JtIHdpZGUKK3NsZWVwIHN0YXRlcyBhbmQgY2FuIG9ubHkgYmUgZW50ZXJlZCBpZiBhbGwgY29yZXMgYXJlIGlkbGUuIExvb2sgdXAgSW50ZWwKK21hbnVhbHMgKHNvbWUgYXJlIHByb3ZpZGVkIGluIHRoZSBSZWZlcmVuY2VzIHNlY3Rpb24pIGZvciBmdXJ0aGVyIGRldGFpbHMuCisKKy5TUyAiT250YXJpbyIgIkxpYW5vIgorQU1EIGxhcHRvcCBhbmQgZGVza3RvcCBwcm9jZXNzb3IgKGZhbWlseSAxMmggYW5kIDE0aCkgc2xlZXAgc3RhdGUgY291bnRlcnMuCitUaGUgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCB2aWEgUENJIGFuZCB0aGVyZWZvcmUgY2FuIHN0aWxsIGJlIHJlYWQgb3V0IHdoaWxlCitjb3JlcyBoYXZlIGJlZW4gb2ZmbGluZWQuCisKK1RoZXJlIGlzIG9uZSBzcGVjaWFsIGNvdW50ZXI6IE5CUDEgKE5vcnRoIEJyaWRnZSBQMSkuCitUaGlzIG9uZSBhbHdheXMgcmV0dXJucyAwIG9yIDEsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBOb3J0aCBCcmlkZ2UgUDEKK3Bvd2VyIHN0YXRlIGdvdCBlbnRlcmVkIGF0IGxlYXN0IG9uY2UgZHVyaW5nIG1lYXN1cmUgdGltZS4KK0JlaW5nIGFibGUgdG8gZW50ZXIgTkJQMSBzdGF0ZSBhbHNvIGRlcGVuZHMgb24gZ3JhcGhpY3MgcG93ZXIgbWFuYWdlbWVudC4KK1RoZXJlZm9yZSB0aGlzIGNvdW50ZXIgY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGdyYXBoaWNzJyBkcml2ZXIKK3Bvd2VyIG1hbmFnZW1lbnQgaXMgd29ya2luZyBhcyBleHBlY3RlZC4KKworLlNIIEVYQU1QTEVTCisKK2NwdXBvd2VyIG1vbml0b3IgLWwiIG1heSBzaG93OgorLlJTIDQKK01vbml0b3IgIk1wZXJmIiAoMyBzdGF0ZXMpIFwtIE1pZ2h0IG92ZXJmbG93IGFmdGVyIDkyMjAwMDAwMCBzCisKKyAgIC4uLgorCitNb25pdG9yICJJZGxlX1N0YXRzIiAoMyBzdGF0ZXMpIFwtIE1pZ2h0IG92ZXJmbG93IGFmdGVyIDQyOTQ5NjcyOTUgcworCisgICAuLi4KKworLlJFCitjcHVwb3dlciBtb25pdG9yIFwtbSAiSWRsZV9TdGF0cyxNcGVyZiIgc2NwIC90bXAvdGVzdCAvbmZzL3RtcAorCitNb25pdG9yIHRoZSBzY3AgY29tbWFuZCwgc2hvdyBib3RoIE1wZXJmIGFuZCBJZGxlX1N0YXRzIHN0YXRlcyBjb3VudGVyCitzdGF0aXN0aWNzLCBidXQgaW4gZXhjaGFuZ2VkIG9yZGVyLgorCisKKworLlJFCitCZSBjYXJlZnVsIHRoYXQgdGhlIHR5cGljYWwgY29tbWFuZCB0byBmdWxseSB1dGlsaXplIG9uZSBDUFUgYnkgZG9pbmc6CisKK2NwdXBvd2VyIG1vbml0b3IgY2F0IC9kZXYvemVybyA+L2Rldi9udWxsCisKK0RvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQsIGJlY2F1c2UgdGhlIG1lYXN1cmVkIG91dHB1dCBpcyByZWRpcmVjdGVkIHRvCisvZGV2L251bGwuIFRoaXMgY291bGQgZ2V0IHdvcmthcm91bmRlZCBieSBwdXR0aW5nIHRoZSBsaW5lIGludG8gYW4gb3duLCB0aW55CitzaGVsbCBzY3JpcHQuIEhpdCBDVFJMXC1jIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZCBhbmQgZ2V0IHRoZSBtZWFzdXJlIG91dHB1dAorZGlzcGxheWVkLgorCisuU0ggUkVGRVJFTkNFUworIkJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXLigJlzIEd1aWRlIChCS0RHKSBmb3IgQU1EIEZhbWlseSAxNGggUHJvY2Vzc29ycyIKK2h0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQzMTcwLnBkZgorCisiSW50ZWzCriBUdXJibyBCb29zdCBUZWNobm9sb2d5CitpbiBJbnRlbMKuIENvcmXihKIgTWljcm9hcmNoaXRlY3R1cmUgKE5laGFsZW0pIEJhc2VkIFByb2Nlc3NvcnMiCitodHRwOi8vZG93bmxvYWQuaW50ZWwuY29tL2Rlc2lnbi9wcm9jZXNzb3IvYXBwbG5vdHMvMzIwMzU0LnBkZgorCisiSW50ZWzCriA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwKK1ZvbHVtZSAzQjogU3lzdGVtIFByb2dyYW1taW5nIEd1aWRlIgoraHR0cDovL3d3dy5pbnRlbC5jb20vcHJvZHVjdHMvcHJvY2Vzc29yL21hbnVhbHMKKworLlNIIEZJTEVTCisudGEKKy5uZgorL2Rldi9jcHUvKi9tc3IKKy9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY3B1aWRsZS9zdGF0ZSovLgorLmZpCisKKy5TSCAiU0VFIEFMU08iCitwb3dlcnRvcCg4KSwgbXNyKDQpLCB2bXN0YXQoOCkKKy5QUAorLlNIIEFVVEhPUlMKKy5uZgorV3JpdHRlbiBieSBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgorCitOZWhhbGVtLCBTYW5keUJyaWRnZSBtb25pdG9ycyBhbmQgY29tbWFuZCBwYXNzaW5nCitiYXNlZCBvbiB0dXJib3N0YXQuOCBmcm9tIExlbiBCcm93biA8bGVuLmJyb3duQGludGVsLmNvbT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1zZXQuMSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1zZXQuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDk1NGE5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLXNldC4xCkBAIC0wLDAgKzEsMTAzIEBACisuVEggQ1BVUE9XRVJcLVNFVCAiMSIgIjIyLzAyLzIwMTEiICIiICJjcHVwb3dlciBNYW51YWwiCisuU0ggTkFNRQorY3B1cG93ZXJcLXNldCBcLSBTZXQgcHJvY2Vzc29yIHBvd2VyIHJlbGF0ZWQga2VybmVsIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiBjcHVwb3dlciBzZXQgWyBcLWIgVkFMIF0gWyBcLXMgVkFMIF0gWyBcLW0gVkFMIF0KKworCisuU0ggREVTQ1JJUFRJT04KK1xmQmNwdXBvd2VyIHNldCBcZlAgc2V0cyBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgZGlyZWN0bHkgYWNjZXNzZXMgaGFyZHdhcmUKK3JlZ2lzdGVycyBhZmZlY3RpbmcgcHJvY2Vzc29yIHBvd2VyIHNhdmluZyBwb2xpY2llcy4KKworU29tZSBvcHRpb25zIGFyZSBwbGF0Zm9ybSB3aWRlLCBzb21lIGFmZmVjdCBzaW5nbGUgY29yZXMuIEJ5IGRlZmF1bHQgdmFsdWVzCithcmUgYXBwbGllZCBvbiBhbGwgY29yZXMuIEhvdyB0byBtb2RpZnkgc2luZ2xlIGNvcmUgY29uZmlndXJhdGlvbnMgaXMKK2Rlc2NyaWJlZCBpbiB0aGUgY3B1cG93ZXIoMSkgbWFucGFnZSBpbiB0aGUgXC1cLWNwdSBvcHRpb24gc2VjdGlvbi4gV2hldGhlciBhbgorb3B0aW9uIGFmZmVjdHMgdGhlIHdob2xlIHN5c3RlbSBvciBjYW4gYmUgYXBwbGllZCB0byBpbmRpdmlkdWFsIGNvcmVzIGlzCitkZXNjcmliZWQgaW4gdGhlIE9wdGlvbnMgc2VjdGlvbnMuCisKK1VzZSBcZkJjcHVwb3dlciBpbmZvIFxmUCB0byByZWFkIG91dCBjdXJyZW50IHNldHRpbmdzIGFuZCB3aGV0aGVyIHRoZXkgYXJlCitzdXBwb3J0ZWQgb24gdGhlIHN5c3RlbSBhdCBhbGwuCisKKy5TSCBPcHRpb25zCisuUFAKK1wtXC1wZXJmLWJpYXMsIFwtYgorLlJTIDQKK1NldHMgYSByZWdpc3RlciBvbiBzdXBwb3J0ZWQgSW50ZWwgcHJvY2Vzc29yZSB3aGljaCBhbGxvd3Mgc29mdHdhcmUgdG8gY29udmV5CitpdHMgcG9saWN5IGZvciB0aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiBwZXJmb3JtYW5jZSB2ZXJzdXMgZW5lcmd5IHNhdmluZ3MgdG8KK3RoZSAgcHJvY2Vzc29yLgorCitUaGUgcmFuZ2Ugb2YgdmFsaWQgbnVtYmVycyBpcyAwLTE1LCB3aGVyZSAwIGlzIG1heGltdW0KK3BlcmZvcm1hbmNlIGFuZCAxNSBpcyBtYXhpbXVtIGVuZXJneSBlZmZpY2llbmN5LgorCitUaGUgcHJvY2Vzc29yIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiBpbiBtb2RlbC1zcGVjaWZpYyB3YXlzCit3aGVuIGl0IG11c3Qgc2VsZWN0IHRyYWRlLW9mZnMgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQKK2VuZXJneSBlZmZpY2llbmN5LgorCitUaGlzIHBvbGljeSBoaW50IGRvZXMgbm90IHN1cGVyc2VkZSBQcm9jZXNzb3IgUGVyZm9ybWFuY2Ugc3RhdGVzCisoUC1zdGF0ZXMpIG9yIENQVSBJZGxlIHBvd2VyIHN0YXRlcyAoQy1zdGF0ZXMpLCBidXQgYWxsb3dzCitzb2Z0d2FyZSB0byBoYXZlIGluZmx1ZW5jZSB3aGVyZSBpdCB3b3VsZCBvdGhlcndpc2UgYmUgdW5hYmxlCit0byBleHByZXNzIGEgcHJlZmVyZW5jZS4KKworRm9yIGV4YW1wbGUsIHRoaXMgc2V0dGluZyBtYXkgdGVsbCB0aGUgaGFyZHdhcmUgaG93CithZ2dyZXNzaXZlbHkgb3IgY29uc2VydmF0aXZlbHkgdG8gY29udHJvbCBmcmVxdWVuY3kKK2luIHRoZSAidHVyYm8gcmFuZ2UiIGFib3ZlIHRoZSBleHBsaWNpdGx5IE9TLWNvbnRyb2xsZWQKK1Atc3RhdGUgZnJlcXVlbmN5IHJhbmdlLiAgSXQgbWF5IGFsc28gdGVsbCB0aGUgaGFyZHdhcmUKK2hvdyBhZ2dyZXNzaXZlbHkgaXQgc2hvdWxkIGVudGVyIHRoZSBPUyByZXF1ZXN0ZWQgQy1zdGF0ZXMuCisKK1RoaXMgb3B0aW9uIGNhbiBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwgY29yZXMgb25seSB2aWEgdGhlIFwtXC1jcHUgb3B0aW9uLAorY3B1cG93ZXIoMSkuCisKK1NldHRpbmcgdGhlIHBlcmZvcm1hbmNlIGJpYXMgdmFsdWUgb24gb25lIENQVSBjYW4gbW9kaWZ5IHRoZSBzZXR0aW5nIG9uCityZWxhdGVkIENQVXMgYXMgd2VsbCAoZm9yIGV4YW1wbGUgYWxsIENQVXMgb24gb25lIHNvY2tldCksIGJlY2F1c2Ugb2YKK2hhcmR3YXJlIHJlc3RyaWN0aW9ucy4KK1VzZSBcZkJjcHVwb3dlciAtYyBhbGwgaW5mbyAtYlxmUCB0byB2ZXJpZnkuCisKK1RoaXMgb3B0aW9ucyBuZWVkcyB0aGUgbXNyIGtlcm5lbCBkcml2ZXIgKENPTkZJR19YODZfTVNSKSBsb2FkZWQuCisuUkUKKy5QUAorXC1cLXNjaGVkXC1tYywgIFwtbSBbIFZBTCBdCisuUkUKK1wtXC1zY2hlZFwtc210LCBcLXMgWyBWQUwgXQorLlJTIDQKK1wtXC1zY2hlZFwtbWMgdXRpbGl6ZXMgY29yZXMgaW4gb25lIHByb2Nlc3NvciBwYWNrYWdlL3NvY2tldCBmaXJzdCBiZWZvcmUKK3Byb2Nlc3NlcyBhcmUgc2NoZWR1bGVkIHRvIG90aGVyIHByb2Nlc3NvciBwYWNrYWdlcy9zb2NrZXRzLgorCitcLVwtc2NoZWRcLXNtdCB1dGlsaXplcyB0aHJlYWQgc2libGluZ3Mgb2Ygb25lIHByb2Nlc3NvciBjb3JlIGZpcnN0IGJlZm9yZQorcHJvY2Vzc2VzIGFyZSBzY2hlZHVsZWQgdG8gb3RoZXIgY29yZXMuCisKK1RoZSBpbXBhY3Qgb24gcG93ZXIgY29uc3VtcHRpb24gYW5kIHBlcmZvcm1hbmNlIChwb3NpdGl2IG9yIG5lZ2F0aXYpIGhlYXZpbHkKK2RlcGVuZHMgb24gcHJvY2Vzc29yIHN1cHBvcnQgZm9yIGRlZXAgc2xlZXAgc3RhdGVzLCBmcmVxdWVuY3kgc2NhbGluZyBhbmQKK2ZyZXF1ZW5jeSBib29zdCBtb2RlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gb3RoZXIgdGhyZWFkIHNpYmxpbmdzCithbmQgcHJvY2Vzc29yIGNvcmVzLgorCitUYWtlbiBvdmVyIGZyb20ga2VybmVsIGRvY3VtZW50YXRpb246CisKK0FkanVzdCB0aGUga2VybmVsJ3MgbXVsdGktY29yZSBzY2hlZHVsZXIgc3VwcG9ydC4KKworUG9zc2libGUgdmFsdWVzIGFyZToKKy5SUyAyCiswIC0gTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAoZGVmYXVsdCB2YWx1ZSkKKworMSAtIEZpbGwgb25lIHRocmVhZC9jb3JlL3BhY2thZ2UgZmlyc3QgZm9yIGxvbmcgcnVubmluZyB0aHJlYWRzCisKKzIgLSBBbHNvIGJpYXMgdGFzayB3YWtldXBzIHRvIHNlbWktaWRsZSBjcHUgcGFja2FnZSBmb3IgcG93ZXIKK3NhdmluZ3MKKy5SRQorCitzY2hlZF9tY19wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX01DLCB3aGljaCBpcworaXRzZWxmIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQuCisKK3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX1NNVCwgd2hpY2gKK2lzIGl0c2VsZiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorCitUaGUgdHdvIGZpbGVzIGFyZSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLiBJdCBpcyBwb3NzaWJsZQordGhhdCBvbmUgZmlsZSBtYXkgYmUgcHJlc2VudCB3aXRob3V0IHRoZSBvdGhlci4KKworLlNIICJTRUUgQUxTTyIKK2NwdXBvd2VyLWluZm8oMSksIGNwdXBvd2VyLW1vbml0b3IoMSksIHBvd2VydG9wKDEpCisuUFAKKy5TSCBBVVRIT1JTCisubmYKK1wtXC1wZXJmXC1iaWFzIHBhcnRzIHdyaXR0ZW4gYnkgTGVuIEJyb3duIDxsZW4uYnJvd25AaW50ZWwuY29tPgorVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjMjBmZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci4xCkBAIC0wLDAgKzEsNzIgQEAKKy5USCBDUFVQT1dFUiAiMSIgIjA3LzAzLzIwMTEiICIiICJjcHVwb3dlciBNYW51YWwiCisuU0ggTkFNRQorY3B1cG93ZXIgXC0gU2hvd3MgYW5kIHNldHMgcHJvY2Vzc29yIHBvd2VyIHJlbGF0ZWQgdmFsdWVzCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiBjcHVwb3dlciBbIFwtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU10KKworLkIgY3B1cG93ZXIgXC12fFwtXC12ZXJzaW9uCisKKy5CIGNwdXBvd2VyIFwtaHxcLVwtaGVscAorCisuU0ggREVTQ1JJUFRJT04KK1xmQmNwdXBvd2VyIFxmUCBpcyBhIGNvbGxlY3Rpb24gb2YgdG9vbHMgdG8gZXhhbWluZSBhbmQgdHVuZSBwb3dlciBzYXZpbmcKK3JlbGF0ZWQgZmVhdHVyZXMgb2YgeW91ciBwcm9jZXNzb3IuCisKK1RoZSBtYW5wYWdlcyBvZiB0aGUgc3ViY29tbWFuZHMgKGNwdXBvd2VyXC08c3ViY29tbWFuZD4oMSkpIHByb3ZpZGUgZGV0YWlsZWQKK2Rlc2NyaXB0aW9ucyBvZiBzdXBwb3J0ZWQgZmVhdHVyZXMuIFJ1biBcZkJjcHVwb3dlciBoZWxwXGZQIHRvIGdldCBhbiBvdmVydmlldworb2Ygc3VwcG9ydGVkIHN1YmNvbW1hbmRzLgorCisuU0ggT3B0aW9ucworLlBQCitcLVwtaGVscCwgXC1oCisuUlMgNAorU2hvd3Mgc3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFuZCBnZW5lcmFsIHVzYWdlLgorLlJFCisuUFAKK1wtXC1jcHUgY3B1bGlzdCwgIFwtYyBjcHVsaXN0CisuUlMgNAorT25seSBzaG93IG9yIHNldCB2YWx1ZXMgZm9yIHNwZWNpZmljIGNvcmVzLgorVGhpcyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbGwgc3ViY29tbWFuZHMsIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZQorbWFucGFnZXMgb2YgdGhlIHN1YmNvbW1hbmRzLgorCitTb21lIHN1YmNvbW1hbmRzIGFjY2VzcyBhbGwgY29yZXMgKHR5cGljYWxseSB0aGUgKlwtc2V0IGNvbW1hbmRzKSwgc29tZSBvbmx5Cit0aGUgZmlyc3QgY29yZSAodHlwaWNhbGx5IHRoZSAqXC1pbmZvIGNvbW1hbmRzKSBieSBkZWZhdWx0LgorCitUaGUgc3ludGF4IGZvciA8Y3B1bGlzdD4gaXMgYmFzZWQgb24gaG93IHRoZSBrZXJuZWwgZXhwb3J0cyBDUFUgYml0bWFza3MgdmlhCitzeXNmcyBmaWxlcy4gU29tZSBleGFtcGxlczoKKy5SUyA0CisuVFAgMTYKK0lucHV0CitFcXVpdmFsZW50IHRvCisuVFAKK2FsbAorYWxsIGNvcmVzCisuVFAKKzBcLTMKKzAsMSwyLDMKKy5UUAorMFwtNzoyCiswLDIsNCw2CisuVFAKKzEsMyw1LTcKKzEsMyw1LDYsNworLlRQCiswXC0zOjIsOFwtMTU6NAorMCwyLDgsMTIJCisuUkUKKy5SRQorLlBQCitcLVwtdmVyc2lvbiwgIFwtdgorLlJTIDQKK1ByaW50IHRoZSBwYWNrYWdlIG5hbWUgYW5kIHZlcnNpb24gbnVtYmVyLgorCisuU0ggIlNFRSBBTFNPIgorY3B1cG93ZXItc2V0KDEpLCBjcHVwb3dlci1pbmZvKDEpLCBjcHVwb3dlci1pZGxlKDEpLAorY3B1cG93ZXItZnJlcXVlbmN5LXNldCgxKSwgY3B1cG93ZXItZnJlcXVlbmN5LWluZm8oMSksIGNwdXBvd2VyLW1vbml0b3IoMSksCitwb3dlcnRvcCgxKQorLlBQCisuU0ggQVVUSE9SUworLm5mCitcLVwtcGVyZlwtYmlhcyBwYXJ0cyB3cml0dGVuIGJ5IExlbiBCcm93biA8bGVuLmJyb3duQGludGVsLmNvbT4KK1Rob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9wby9jcy5wbyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2NzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMjJjNDUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9wby9jcy5wbwpAQCAtMCwwICsxLDk0NCBAQAorIyB0cmFuc2xhdGlvbiBvZiBjcy5wbyB0byBDemVjaAorIyBDemVjaCB0cmFuc2xhdGlvbiBmb3IgY3B1ZnJlcXV0aWxzIHBhY2thZ2UKKyMgQ3plY2ggbWVzc2FnZXMgZm9yIGNwdWZyZXF1dGlscy4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IGthdm9sCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBjcHVmcmVxdXRpbHMgcGFja2FnZS4KKyMKKyMgS2FyZWwgVm9sbsO9IDxrYXZvbEBzZXpuYW0uY3o+LCAyMDA3LCAyMDA4LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogY3NcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDMtMDggMTc6MDMrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDYtMTEgMTY6MjYrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogS2FyZWwgVm9sbsO9IDxrYXZvbEBzZXpuYW0uY3o+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ3plY2ggPGRpc2t1emVAbGlzdHMubDEwbi5jej5cbiIKKyJMYW5ndWFnZTogY3NcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6ICBucGx1cmFscz0zOyBwbHVyYWw9KG49PTEpID8gMCA6IChuPj0yICYmIG48PTQpID8gMSA6IDI7XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6MzYKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo0MworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjUxCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTggdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjcwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6MzMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMyIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQ3Cittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjU2Cittc2dpZCAiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjYzCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzEiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjc3Cittc2dpZCAiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6MzUKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjQyCittc2dpZCAiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjUwCittc2dpZCAiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy12XSBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXY6IGJlIG1vcmUgdmVyYm9zZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC10OiBzaG93IENQVSB0b3BvbG9neS9oaWVyYXJjaHlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9ubHkgb25lIG9mOiAtdCwgLWwsIC1tIGFyZSBhbGxvd2VkXG4iCisiSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCBmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKmlzIG9mZmxpbmVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGggKCVkKSBleGNlZWRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsIHRyeSAtbCBvcHRpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1IHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgcm9vdCBhY2Nlc3NcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIFsgLWMgY3B1bGlzdCBdIHN1YmNvbW1hbmQgW0FSR1NdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciAtLXZlcnNpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnRlZCBzdWJjb21tYW5kcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImFuZCByZWFkIHVwIHRoZSBzdWJjb21tYW5kJ3MgbWFucGFnZSB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJVc2UgY3B1cG93ZXIgaGVscCBzdWJjb21tYW5kIGZvciBnZXR0aW5nIGhlbHAgZm9yIGFib3ZlIHN1YmNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIgorbXNnc3RyICIiCisiQ2h5YnkgdiBwcm9ncmFtdSBwcm9zw61tIGhsYXN0ZSBuYSAlcyAoYW5nbGlja3kpLlxuIgorIkNoeWJ5IHYgcMWZZWtsYWR1IHByb3PDrW0gaGxhc3RlIG5hIGthdm9sQHNlem5hbS5jeiAoxI1lc2t5IDstKVxuIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBwYXJzaW5nIGNwdSBsaXN0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ViY29tbWFuZCAlcyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjb3VudCB0aGUgbnVtYmVyIG9mIENQVXMgKCVzOiAlcyksIGFzc3VtaW5nIDFcbiIKK21zZ3N0ciAiTmVsemUgemppc3RpdCBwb8SNZXQgQ1BVICglczogJXMpLCBwxZllZHBva2zDoWTDoSBzZSAxLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisiICAgICAgICAgbWluaW3DoWxuw60gZnJla3ZlbmNlIENQVSAtIG1heGltw6FsbsOtIGZyZWt2ZW5jZSBDUFUgLSAgcmVndWzDoXRvclxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBCb29zdCBDYXBhYmlsaXRpZXMgb24gQ1BVICVkIC0tIGFyZSB5b3Ugcm9vdD9cbiIKK21zZ3N0ciAiIgorCisjLiBQIHN0YXRlIGNoYW5nZXMgdmlhIE1TUiBhcmUgaWRlbnRpZmllZCB2aWEgY3B1aWQgODAwMDAwMDcKKyMuIG9uIEludGVsIGFuZCBBTUQsIGJ1dCB3ZSBhc3N1bWUgYm9vc3QgY2FwYWJsZSBtYWNoaW5lcyBjYW4gZG8gdGhhdAorIy4gaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3CisjLiAmJiAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgNykpKQorIy4KKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGJvb3N0IHN0YXRlIHN1cHBvcnQ6IFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgU3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJ5ZXMiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgIm5vIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgIEFjdGl2ZTogJXNcbiIKK21zZ3N0ciAiICBvdmxhZGHEjTogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBCb29zdCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUGIlZDogJWx1TUh6IChib29zdCBzdGF0ZSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QJWQ6ICAlbHVNSHpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIgorbXNnc3RyICIgIHBybyB0ZW50byBDUFUgbmVuw60gYWt0aXZuw60gxb7DoWRuw70gem7DoW3DvSBvdmxhZGHEjSBjcHVmcmVxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBvdmxhZGHEjTogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIgorbXNnc3RyICIgIENQVSwga3RlcsOpIG11c8OtIG3Em25pdCBmcmVrdmVuY2kgesOhcm92ZcWIOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIKK21zZ3N0ciAiICBDUFUsIGt0ZXLDqSBtdXPDrSBtxJtuaXQgZnJla3ZlbmNpIHrDoXJvdmXFiDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICIgIGhhcmR3YXJlIGxpbWl0czogIgorbXNnc3RyICIgIGhhcmR3YXJvdsOpIG1lemU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGZyZXF1ZW5jeSBzdGVwczogIgorbXNnc3RyICIgIGRvc3R1cG7DqSBmcmVrdmVuY2U6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzOiAiCittc2dzdHIgIiAgZG9zdHVwbsOpIHJlZ3Vsw6F0b3J5OiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiCittc2dzdHIgIiAgc291xI1hc27DoSB0YWt0aWthOiBmcmVrdmVuY2UgYnkgbcSbbGEgYsO9dCBtZXppICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbmQgIgorbXNnc3RyICIgYSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGdvdmVybm9yIFwiJXNcIiBtYXkgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuIgorIiAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGlzIHJhbmdlLlxuIgorbXNnc3RyICIiCisiICBSZWd1bMOhdG9yIFwiJXNcIiBtxa/FvmUgcm96aG9kbm91dCBqYWtvdSBmcmVrdmVuY2kgcG91xb7DrXRcbiIKKyIgICAgICAgICAgICAgICAgICAgIHYgdMSbY2h0byBtZXrDrWNoLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIgorbXNnc3RyICIgIHNvdcSNYXNuw6EgZnJla3ZlbmNlIENQVSBqZSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIgorbXNnc3RyICIgICh6amnFoXTEm25vIGhhcmR3YXJvdsO9bSB2b2zDoW7DrW0pIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjcHVmcmVxIHN0YXRzOiAiCittc2dzdHIgIiAgc3RhdGlzdGlrYSBjcHVmcmVxOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVxb5pdMOtOiBjcHVmcmVxLWluZm8gW3DFmWVww61uYcSNZV1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDczIHV0aWxzL2NwdWZyZXEtc2V0LmM6MjYgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjMKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uczpcbiIKK21zZ3N0ciAiUMWZZXDDrW5hxI1lOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBWeXDDrcWhZSBsYWRpY8OtIGluZm9ybWFjZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjcHVmcmVxIGNvcmUgKlxuIgorbXNnc3RyICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBaamlzdMOtIGFrdHXDoWxuw60gZnJla3ZlbmNpLCBuYSBrdGVyw6kgQ1BVIGLEm8W+w61cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHBvZGxlIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KSAqXG4iCittc2dzdHIgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIFpqaXN0w60gYWt0dcOhbG7DrSBmcmVrdmVuY2ksIG5hIGt0ZXLDqSBDUFUgYsSbxb7DrVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgeiBoYXJkd2FyZSAoZG9zdHVwbsOpIGplbiB1xb5pdmF0ZWxpIHJvb3QpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICIKKyJhbGxvd2VkICpcbiIKK21zZ3N0ciAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgWmppc3TDrSBtaW5pbcOhbG7DrSBhIG1heGltw6FsbsOtIGRvc3R1cG5vdSBmcmVrdmVuY2kgQ1BVICIKKyIqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIKK21zZ3N0ciAiICAtZCwgLS1kcml2ZXIgICAgICAgICBaamlzdMOtIGFrdGl2bsOtIG92bGFkYcSNIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcCwgLS1wb2xpY3kgICAgICAgICBHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeSAqXG4iCittc2dzdHIgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgWmppc3TDrSBha3R1w6FsbsOtIHRha3Rpa3UgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluZXMgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzICpcbiIKK21zZ3N0ciAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBaamlzdMOtIGRvc3R1cG7DqSByZWd1bMOhdG9yeSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlICIKKyJmcmVxdWVuY3kgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBaamlzdMOtLCBrdGVyw6kgQ1BVIG11c8OtIG3Em25pdCBmcmVrdmVuY2kgesOhcm92ZcWIICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBaamlzdMOtLCBrdGVyw6kgQ1BVIG11c8OtIG3Em25pdCBmcmVrdmVuY2kgesOhcm92ZcWIICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZVxuIgorbXNnc3RyICIgIC1zLCAtLXN0YXRzICAgICAgICAgIFpvYnJhesOtIHN0YXRpc3Rpa3UgY3B1ZnJlcSwgamUtbGkgZG9zdHVwbsOhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsYXRlbmN5IG9uIENQVSBmcmVxdWVuY3kgIgorImNoYW5nZXMgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBaamlzdMOtIG1pbmltw6FsbsOtIGEgbWF4aW3DoWxuw60gZG9zdHVwbm91IGZyZWt2ZW5jaSBDUFUgIgorIipcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJjcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFZ5cMOtxaFlIGluZm9ybWFjZSB2ZSBmb3Jtw6F0dSwgamFrw70gcG91xb7DrXZhbG8gcm96aHJhbsOtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAvcHJvYy9jcHVmcmVxIHYga2VybmVsZWNoIMWZYWR5IDIuNCBhIMSNYXNuw6kgMi42XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgIgorInBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgVsO9c3R1cCBwYXJhbWV0csWvIC1mLCAtdyBhIC1zIHYg4oCebGlkbWkgxI1pdGVsbsOpbeKAnCAiCisiZm9ybcOhdHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBWeXDDrcWhZSB0dXRvIG7DoXBvdsSbZHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiBubyBhcmd1bWVudCBvciBvbmx5IHRoZSAtYywgLS1jcHUgcGFyYW1ldGVyIGlzIGdpdmVuLCBkZWJ1ZyBvdXRwdXQgYWJvdXRcbiIKKyJjcHVmcmVxIGlzIHByaW50ZWQgd2hpY2ggaXMgdXNlZnVsIGUuZy4gZm9yIHJlcG9ydGluZyBidWdzLlxuIgorbXNnc3RyICIiCisiTmVuw60tbGkgemFkw6FuIMW+w6FkbsO9IHBhcmFtZXRyIG5lYm8gamUtbGkgemFkw6FuIHBvdXplIHDFmWVww61uYcSNIC1jLCAtLWNwdSwgIgorImpzb3VcbiIKKyJ2eXBzw6FueSBsYWRpY8OtIGluZm9ybWFjZSwgY2/FviBtxa/FvmUgYsO9dCB1xb5pdGXEjW7DqSBuYXDFmcOta2xhZCBwxZlpIGhsw6HFoWVuw60gY2h5Yi5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3IgdGhlIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCAqLCBvbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXNcbiIKKyJlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gemVyb1xuIgorbXNnc3RyICIiCisiTmVuw60tbGkgcMWZaSBwb3XFvml0w60gcMWZZXDDrW5hxI3FryBvem5hxI1lbsO9Y2ggKiB6YWTDoW4gcGFyYW1ldHIgLWMgbmVibyAtLWNwdSxcbiIKKyJwxZllZHBva2zDoWTDoSBzZSBqZWhvIGhvZG5vdGEgMC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSAiCisiYXJndW1lbnRcbiIKK21zZ3N0ciAiWmFkYW7DvSBwYXJhbWV0ciBuZW3Fr8W+ZSBiw710IHBvdcW+aXQgesOhcm92ZcWIIHMgcMWZZXDDrW5hxI1lbSAtYyBuZWJvIC0tY3B1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLWNwdSBwYXJhbWV0ZXIgYW5kL29yXG4iCisibW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk5lbHplIHphZGF0IHbDrWNlIG5lxb4gamVkZW4gcGFyYW1ldHIgLWMgbmVibyAtLWNwdVxuIgorImFuZWJvIHbDrWNlIG5lxb4gamVkZW4gcGFyYW1ldHIgdXLEjXVqw61jw60gdsO9c3R1cFxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MDAgdXRpbHMvY3B1ZnJlcS1zZXQuYzo4MiB1dGlscy9jcHVwb3dlci1zZXQuYzo0MgorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjQyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIKK21zZ3N0ciAibmVwbGF0bsO9IG5lYm8gbmV6bsOhbcO9IHBhcmFtZXRyXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIgorbXNnc3RyICJuZWx6ZSBhbmFseXpvdmF0IENQVSAlZCwgdnlwYWTDoSB0bywgxb5lIG5lbsOtIHDFmcOtdG9tZW5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjIwIHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHl6dWppIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXF1ZW5jeS1zZXQgW29wdGlvbnNdXG4iCittc2dzdHIgIlXFvml0w606IGNwdWZyZXEtc2V0IFtwxZllcMOtbmHEjWVdXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5ldyBtaW5pbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBOb3bDoSBuZWpuacW+xaHDrSBmcmVrdmVuY2UsIGt0ZXJvdSBtxa/FvmUgcmVndWzDoXRvciAiCisidnlicmF0XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIG5ldyBtYXhpbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBOb3bDoSBuZWp2ecWhxaHDrSBmcmVrdmVuY2UsIGt0ZXJvdSBtxa/FvmUgcmVndWzDoXRvciAiCisienZvbGl0XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbmV3IGNwdWZyZXEgZ292ZXJub3JcbiIKK21zZ3N0ciAiICAtZyBHT1YsIC0tZ292ZXJub3JzIEdPViAgTm92w70gcmVndWzDoXRvciBjcHVmcmVxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkXG4iCittc2dzdHIgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBGcmVrdmVuY2UsIGt0ZXLDoSBtw6EgYsO9dCBuYXN0YXZlbmEuIFZ5xb5hZHVqZSwgYWJ5ICIKKyJieWxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICB2IGrDoWTFmWUgbmFocsOhbiByZWd1bMOhdG9yIOKAmnVzZXJzcGFjZeKAmC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTd2l0Y2hlcyBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMyB1dGlscy9jcHVwb3dlci1zZXQuYzoyOCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBWeXDDrcWhZSB0dXRvIG7DoXBvdsSbZHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGVzOlxuIgorIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIgorbXNnc3RyICIiCisiTmVuw60tbGkgcMWZaSBwb3XFvml0w60gcMWZZXDDrW5hxI3FryBvem5hxI1lbsO9Y2ggKiB6YWTDoW4gcGFyYW1ldHIgLWMgbmVibyAtLWNwdSxcbiIKKyJwxZllZHBva2zDoWTDoSBzZSBqZWhvIGhvZG5vdGEgMC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIjIuIFRoZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyICIKKyJwYXJhbWV0ZXJcbiIKKyIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorIjMuIEZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHpcbiIKKyIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKK21zZ3N0ciAiIgorIlBvem7DoW1reTpcbiIKKyIxLiBWeW5lY2jDoW7DrSBwYXJhbWV0cnUgLWMgbmVibyAtLWNwdSBqZSBla3ZpdmFsZW50bsOtIGplaG8gbmFzdGF2ZW7DrSBuYSAwXG4iCisiMi4gUMWZZXDDrW5hxI0gLWYgbmVibyAtLWZyZXEgbmVtxa/FvmUgYsO9dCBwb3XFvml0IHrDoXJvdmXFiCBzIMW+w6FkbsO9bSBqaW7DvW0gdnlqbWEgLSIKKyJjXG4iCisiICAgbmVibyAtLWNwdVxuIgorIjMuIEZyZWt2ZW5jZSAoRlJFUSkgbW9ob3UgYsO9dCB6YWTDoW55IHYgSHosIGtIeiAodsO9Y2hvesOtKSwgTUh6LCBHSHogbmVibyBUSHpcbiIKKyIgICBwxZlpcG9qZW7DrW0gbsOhenZ1IGplZG5vdGt5IGJleiBtZXplcnkgbWV6aSDEjcOtc2xlbSBhIGplZG5vdGtvdVxuIgorIiAgIChGUkVRIHYga0h6ID1eIEh6ICogMCwwMDEgPSBeIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMClcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3Igc2V0dGluZyBuZXcgdmFsdWVzLiBDb21tb24gZXJyb3JzOlxuIgorIi0gRG8geW91IGhhdmUgcHJvcGVyIGFkbWluaXN0cmF0aW9uIHJpZ2h0cz8gKHN1cGVyLXVzZXI/KVxuIgorIi0gSXMgdGhlIGdvdmVybm9yIHlvdSByZXF1ZXN0ZWQgYXZhaWxhYmxlIGFuZCBtb2Rwcm9iZWQ/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGFuIGludmFsaWQgcG9saWN5P1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeSwgYnV0IHVzZXJzcGFjZSBnb3Zlcm5vciBpcyBub3QgIgorImF2YWlsYWJsZSxcbiIKKyIgICBmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIGhhcmR3YXJlIHdoaWNoIGNhbm5vdCBiZSBzZXQgdG8gYSBzcGVjaWZpYyAiCisiZnJlcXVlbmN5XG4iCisiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIKK21zZ3N0ciAiIgorIkNoeWJhIHDFmWkgbmFzdGF2b3bDoW7DrSBub3bDvWNoIGhvZG5vdC4gT2J2eWtsw6kgcHJvYmzDqW15OlxuIgorIi0gTcOhdGUgcGF0xZlpxI1uw6EgYWRtaW5pc3Ryw6F0b3Jza8OhIHByw6F2YT8gKHJvb3Q/KVxuIgorIi0gSmUgcG/FvmFkb3ZhbsO9IHJlZ3Vsw6F0b3IgZG9zdHVwbsO9IHYgasOhZMWZZT8gKG1vZHByb2JlPylcbiIKKyItIFNuYcW+w610ZSBzZSBuYXN0YXZpdCBuZXBsYXRub3UgdGFrdGlrdT9cbiIKKyItIFNuYcW+w610ZSBzZSBuYXN0YXZpdCB1csSNaXRvdSBmcmVrdmVuY2ksIGFsZSBuZW7DrSBkb3N0dXBuw71cbiIKKyIgIHJlZ3Vsw6F0b3Ig4oCadXNlcnNwYWNl4oCYLCBuYXDFmcOta2xhZCBwcm90b8W+ZSBuZW7DrSBuYWhyw6FuIHYgasOhZMWZZSxcbiIKKyIgIG5lYm8gbmVsemUgbmEgdG9tdG8gaGFyZHdhcmUgbmFzdGF2aXQgdXLEjWl0b3UgZnJla3ZlbmNpP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZywgdW5rbm93biBvciB1bmhhbmRsZWQgQ1BVP1xuIgorbXNnc3RyICJuZXpuw6Ftw70gbmVibyBuZXBvZHBvcm92YW7DvSBDUFU/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgLWYvLS1mcmVxIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtZC8tLW1pbiwgLXUvLS1tYXggb3JcbiIKKyItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorInDFmWVww61uYcSNIC1mLy0tZnJlcSBuZW3Fr8W+ZSBiw710IHBvdcW+aXQgesOhcm92ZcWIXG4iCisicyBwxZllcMOtbmHEjWVtIC1kLy0tbWluLCAtdS8tLW1heCBuZWJvIC1nLy0tZ292ZXJub3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKyItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iCittc2dzdHIgIiIKKyJNdXPDrSBiw710IHphZMOhbiBhbGVzcG/FiCBqZWRlbiBwxZllcMOtbmHEjVxuIgorIi1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4IG5lYm8gLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGNwdTogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgc2V0IFsgLWIgdmFsIF0gWyAtbSB2YWwgXSBbIC1zIHZhbCBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzIFtWQUxdICAgIFNldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLXNjaGVkLW1jICBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210IFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciAiCisicG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tcGVyZi1iaWFzIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLW1jIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1zbXQgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtc210ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgcGVyZi1iaWFzIHZhbHVlIG9uIENQVSAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaW5mbyBbIC1iIF0gWyAtbSBdIFsgLXMgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgICAgR2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1tLCAtLXNjaGVkLW1jICAgICBHZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgWmppc3TDrSBha3R1w6FsbsOtIHRha3Rpa3UgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgICAgR2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBhc3Npbmcgbm8gb3B0aW9uIHdpbGwgc2hvdyBhbGwgaW5mbywgYnkgZGVmYXVsdCBvbmx5IG9uIGNvcmUgMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyMuIGlmIHN5c2ZzIGZpbGUgaXMgbWlzc2luZyBpdCdzOiBlcnJubyA9PSBFTk9FTlQKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDUgdXRpbHMvY3B1cG93ZXItaW5mby5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmcgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZ1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcGVyZi1iaWFzIHZhbHVlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwZXJmLWJpYXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWx5enVqaSBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogTm8gaWRsZSBzdGF0ZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgaWRsZSBzdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBtYXggaWRsZSBzdGF0ZSAldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk51bWJlciBvZiBpZGxlIHN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGlkbGUgc3RhdGVzOiIKK21zZ3N0ciAiICBkb3N0dXBuw6kgZnJla3ZlbmNlOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhdGVuY3k6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJEdXJhdGlvbjogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgb3ZsYWRhxI06ICVzXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGdvdmVybm9yOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIy4gcHJpbnRmKCJDc3RhdGVzOiAlZFxuIiwgY3N0YXRlcyk7CisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWN0aXZlIHN0YXRlOiAgICAgICAgICAgIEMwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heF9jc3RhdGU6ICAgICAgICAgICAgICBDJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXRlczpcdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQyVkOiAgICAgICAgICAgICAgICAgIHR5cGVbQyVkXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGF0ZW5jeVslMDNsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZVslMDhsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXJhdGlvblslMDIwTHVdIFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGlkbGVpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVxb5pdMOtOiBjcHVmcmVxLWluZm8gW3DFmWVww61uYcSNZV1cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXNpbGVudCAgICAgICAgIE9ubHkgc2hvdyBnZW5lcmFsIEMtc3RhdGUgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBWeXDDrcWhZSBsYWRpY8OtIGluZm9ybWFjZVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImFjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFZ5cMOtxaFlIGluZm9ybWFjZSB2ZSBmb3Jtw6F0dSwgamFrw70gcG91xb7DrXZhbG8gcm96aHJhbsOtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAvcHJvYy9jcHVmcmVxIHYga2VybmVsZWNoIMWZYWR5IDIuNCBhIMSNYXNuw6kgMi42XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk5lbHplIHphZGF0IHbDrWNlIG5lxb4gamVkZW4gcGFyYW1ldHIgLWMgbmVibyAtLWNwdVxuIgorImFuZWJvIHbDrWNlIG5lxb4gamVkZW4gcGFyYW1ldHIgdXLEjXVqw61jw60gdsO9c3R1cFxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgQ1BVIG51bWJlciB3aGljaCBpbmZvcm1hdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkICIKKyN+ICJhYm91dFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICDEjMOtc2xvIENQVSwgbyBrdGVyw6ltIHNlIG1hasOtIHpqaXN0aXQgaW5mb3JtYWNlXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVtYmVyIG9mIENQVSB3aGVyZSBjcHVmcmVxIHNldHRpbmdzIHNoYWxsIGJlICIKKyN+ICJtb2RpZmllZFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgxIzDrXNsbyBDUFUgcHJvIGt0ZXLDvSBzZSBtw6EgcHJvdsOpc3QgbmFzdGF2ZW7DrSAiCisjfiAiY3B1ZnJlcVxuIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vZGUucG8gYi90b29scy9wb3dlci9jcHVwb3dlci9wby9kZS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGMwOWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vZGUucG8KQEAgLTAsMCArMSw5NjEgQEAKKyMgR2VybWFuIHRyYW5zbGF0aW9ucyBmb3IgY3B1ZnJlcXV0aWxzIHBhY2thZ2UKKyMgR2VybWFuIG1lc3NhZ2VzIGZvciBjcHVmcmVxdXRpbHMuCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLm5ldD4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGNwdWZyZXF1dGlscyBwYWNrYWdlLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogY3B1ZnJlcXV0aWxzIDAwNlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wMy0wOCAxNzowMyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wOC0wOCAxNzoxOCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiAgPGxpbnV4QGRvbWluaWticm9kb3dza2kubmV0PlxuIgorIkxhbmd1YWdlLVRlYW06IE5PTkVcbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6MzYKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo0MworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjUxCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTggdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjcwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6MzMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMyIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQ3Cittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjU2Cittc2dpZCAiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjYzCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzEiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjc3Cittc2dpZCAiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6MzUKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjQyCittc2dpZCAiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjUwCittc2dpZCAiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy12XSBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXY6IGJlIG1vcmUgdmVyYm9zZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC10OiBzaG93IENQVSB0b3BvbG9neS9oaWVyYXJjaHlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9ubHkgb25lIG9mOiAtdCwgLWwsIC1tIGFyZSBhbGxvd2VkXG4iCisiSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCBmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKmlzIG9mZmxpbmVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGggKCVkKSBleGNlZWRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsIHRyeSAtbCBvcHRpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1IHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgcm9vdCBhY2Nlc3NcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIFsgLWMgY3B1bGlzdCBdIHN1YmNvbW1hbmQgW0FSR1NdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciAtLXZlcnNpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnRlZCBzdWJjb21tYW5kcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImFuZCByZWFkIHVwIHRoZSBzdWJjb21tYW5kJ3MgbWFucGFnZSB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJVc2UgY3B1cG93ZXIgaGVscCBzdWJjb21tYW5kIGZvciBnZXR0aW5nIGhlbHAgZm9yIGFib3ZlIHN1YmNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIgorbXNnc3RyICJCaXR0ZSBtZWxkZW4gU2llIEZlaGxlciBhbiAlcy5cbiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcGFyc2luZyBjcHUgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1YmNvbW1hbmQgJXMgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY291bnQgdGhlIG51bWJlciBvZiBDUFVzICglczogJXMpLCBhc3N1bWluZyAxXG4iCittc2dzdHIgIiIKKyJLb25udGUgbmljaHQgZGllIEFuemFobCBkZXIgQ1BVcyBoZXJhdXNmaW5kZW4gKCVzIDogJXMpLCBuZWhtZSBkYWhlciAxIGFuLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisiICAgICAgICAgIG1pbmltYWxlIENQVS1UYWt0ZnJlcS4gLSAgbWF4aW1hbGUgQ1BVLVRha3RmcmVxLiAtICBSZWdsZXIgIFxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBCb29zdCBDYXBhYmlsaXRpZXMgb24gQ1BVICVkIC0tIGFyZSB5b3Ugcm9vdD9cbiIKK21zZ3N0ciAiIgorCisjLiBQIHN0YXRlIGNoYW5nZXMgdmlhIE1TUiBhcmUgaWRlbnRpZmllZCB2aWEgY3B1aWQgODAwMDAwMDcKKyMuIG9uIEludGVsIGFuZCBBTUQsIGJ1dCB3ZSBhc3N1bWUgYm9vc3QgY2FwYWJsZSBtYWNoaW5lcyBjYW4gZG8gdGhhdAorIy4gaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3CisjLiAmJiAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgNykpKQorIy4KKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGJvb3N0IHN0YXRlIHN1cHBvcnQ6IFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgU3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJ5ZXMiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgIm5vIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgIEFjdGl2ZTogJXNcbiIKK21zZ3N0ciAiICBUcmVpYmVyOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEJvb3N0IFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFRvdGFsIFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QYiVkOiAlbHVNSHogKGJvb3N0IHN0YXRlKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVAlZDogICVsdU1IelxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG5vIG9yIHVua25vd24gY3B1ZnJlcSBkcml2ZXIgaXMgYWN0aXZlIG9uIHRoaXMgQ1BVXG4iCittc2dzdHIgIiAga2VpbiBvZGVyIG5pY2h0IGJlc3RpbW1iYXJlciBjcHVmcmVxLVRyZWliZXIgYWt0aXZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIFRyZWliZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIgorbXNnc3RyICIgIEZvbGdlbmRlIENQVXMgbGF1ZmVuIG1pdCBkZXIgZ2xlaWNoZW4gSGFyZHdhcmUtVGFrdGZyZXF1ZW56OiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeSBjb29yZGluYXRlZCBieSBzb2Z0d2FyZTogIgorbXNnc3RyICIgIERpZSBUYWt0ZnJlcXVlbnogZm9sZ2VuZGVyIENQVXMgd2VyZGVuIHBlciBTb2Z0d2FyZSBrb29yZGluaWVydDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIgorbXNnc3RyICIgIE1heGltYWxlIERhdWVyIGVpbmVzIFRha3RmcmVxdWVuendlY2hzZWxzOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICIgIGhhcmR3YXJlIGxpbWl0czogIgorbXNnc3RyICIgIEhhcmR3YXJlYmVkaW5ndGUgR3JlbnplbiBkZXIgVGFrdGZyZXF1ZW56OiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIKK21zZ3N0ciAiICBt9mdsaWNoZSBUYWt0ZnJlcXVlbnplbjogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIKK21zZ3N0ciAiICBt9mdsaWNoZSBSZWdsZXI6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBwb2xpY3k6IGZyZXF1ZW5jeSBzaG91bGQgYmUgd2l0aGluICIKK21zZ3N0ciAiICBtb21lbnRhbmUgVGFrdGlrOiBkaWUgRnJlcXVlbnogc29sbCBpbm5lcmhhbGIgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFuZCAiCittc2dzdHIgIiB1bmQgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IGRlY2lkZSB3aGljaCBzcGVlZCB0byB1c2VcbiIKKyIgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIKK21zZ3N0ciAiIgorIiAgbGllZ2VuLiBEZXIgUmVnbGVyIFwiJXNcIiBrYW5uIGZyZWkgZW50c2NoZWlkZW4sXG4iCisiICAgICAgICAgICAgICAgICAgICB3ZWxjaGUgVGFrdGZyZXF1ZW56IGlubmVyaGFsYiBkaWVzZXIgR3JlbnplIHZlcndlbmRldCAiCisid2lyZC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBDUFUgZnJlcXVlbmN5IGlzICIKK21zZ3N0ciAiICBtb21lbnRhbmUgVGFrdGZyZXF1ZW56IGlzdCAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIgorbXNnc3RyICIgICh2ZXJpZml6aWVydCBkdXJjaCBOYWNoZnJhZ2UgYmVpIGRlciBIYXJkd2FyZSkiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGNwdWZyZXEgc3RhdHM6ICIKK21zZ3N0ciAiICBTdGF0aXN0aWs6IgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiQXVmcnVmOiBjcHVmcmVxLWluZm8gW09wdGlvbmVuXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzMgdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb25zOlxuIgorbXNnc3RyICJPcHRpb25lbjpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24gW2RlZmF1bHRdXG4iCittc2dzdHIgIiIKKyIgIC1lLCAtLWRlYnVnICAgICAgICAgIEVyemV1Z3QgZGV0YWlsbGllcnRlIEluZm9ybWF0aW9uZW4sIGhpbGZyZWljaFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgenVtIEF1ZnNw/HJlbiB2b24gRmVobGVyblxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjcHVmcmVxIGNvcmUgKlxuIgorbXNnc3RyICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBGaW5kZXQgZGllIG1vbWVudGFuZSBDUFUtVGFrdGZycXVlbnogaGVyYXVzIChuYWNoXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBNZWludW5nIGRlcyBCZXRyaWVic3N5c3RlbXMpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYnkgcmVhZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkgKlxuIgorbXNnc3RyICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBGaW5kZXQgZGllIG1vbWVudGFuZSBDUFUtVGFrdGZyZXF1ZW56IGhlcmF1c1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgKHZlcmlmaXppZXJ0IGR1cmNoIE5hY2hmcmFnZSBiZWkgZGVyIEhhcmR3YXJlKVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgW251ciBkZXIgQWRtaW5pc3RyYXRvciBrYW5uIGRpZXMgdHVuXSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAiCisiYWxsb3dlZCAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIEZpbmRldCBkaWUgbWluaW1hbGUgdW5kIG1heGltYWxlIFRha3RmcmVxdWVueiBoZXJhdXMgIgorIipcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIgKlxuIgorbXNnc3RyICIgIC1kLCAtLWRyaXZlciAgICAgICAgIEZpbmRldCBkZW4gbW9tZW50YW5lbiBUcmVpYmVyIGhlcmF1cyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEdldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5ICpcbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBGaW5kZXQgZGllIG1vbWVudGFuZSBUYWt0aWsgaGVyYXVzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIgorbXNnc3RyICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIEVyemV1Z3QgZWluZSBMaXN0ZSBtaXQgdmVyZvxnYmFyZW4gUmVnbGVybiAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlICIKKyJmcmVxdWVuY3kgKlxuIgorbXNnc3RyICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBGaW5kZXQgaGVyYXVzLCB3ZWxjaGUgQ1BVcyBtaXQgZGVyc2VsYmVuICIKKyJwaHlzaWthbGlzY2hlblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgVGFrdGZyZXF1ZW56IGxhdWZlbiAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBGaW5kZXQgaGVyYXVzLCB2b24gd2VsY2hlbiBDUFVzIGRpZSBUYWt0ZnJlcXVlbnogIgorImR1cmNoXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBrb29yZGluaWVydCB3ZXJkZW4gbXVzcyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorIiAgLXMsIC0tc3RhdHMgICAgICAgICAgWmVpZ3QsIHNvZmVybiBt9mdsaWNoLCBTdGF0aXN0aWtlbiD8YmVyIGNwdWZyZXEgYW4uXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSAiCisiY2hhbmdlcyAqXG4iCittc2dzdHIgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIEZpbmRldCBkaWUgbWF4aW1hbGUgRGF1ZXIgZWluZXMgVGFrdGZyZXF1ZW56d2VjaHNlbHMgIgorImhlcmF1cyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1iLCAtLWJvb3N0ICAgICAgICAgIENoZWNrcyBmb3IgdHVyYm8gb3IgYm9vc3QgbW9kZXMgICpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBFcnpldWd0IEluZm9ybWF0aW9uZW4gaW4gZWluZW0g5GhubGljaGVtIEZvcm1hdCB6dSAiCisiZGVtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBkZXIgL3Byb2MvY3B1ZnJlcS1EYXRlaSBpbiAyLjQuIHVuZCBmcvxoZW4gMi42LlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsLVZlcnNpb25lblxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgIgorInBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgRm9ybWF0aWVydCBUYWt0ZnJlcXVlbnotIHVuZCBaZWl0ZGF1ZXJhbmdhYmVuIGluICIKKyJiZXNzZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGxlc2JhcmVyIEZvcm0gKE1IeiwgR0h6OyB1cywgbXMpXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgR2lidCBkaWVzZSBLdXJ6/GJlcnNpY2h0IGF1c1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIG5vIGFyZ3VtZW50IG9yIG9ubHkgdGhlIC1jLCAtLWNwdSBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGRlYnVnIG91dHB1dCBhYm91dFxuIgorImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG4iCittc2dzdHIgIiIKKyJTb2Zlcm4ga2VpbiBhbmRlcmVyIFBhcmFtZXRlciBhbHMgJy1jLCAtLWNwdScgYW5nZWdlYmVuIHdpcmQsIGxpZWZlcnQgIgorImRpZXNlc1xuIgorIlByb2dyYW1tIEluZm9ybWF0aW9uZW4sIGRpZSB6LkIuIHp1bSBCZXJpY2h0ZW4gdm9uIEZlaGxlcm4gbvx0emxpY2ggc2luZC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3IgdGhlIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCAqLCBvbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXNcbiIKKyJlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gemVyb1xuIgorbXNnc3RyICIiCisiQmVpIGRlbiBtaXQgKiBtYXJraWVydGVuIFBhcmFtZXRlcm4gd2lyZCAnLS1jcHUgMCcgYW5nZW5vbW1lbiwgc293ZWl0IG5pY2h0XG4iCisibWl0dGVscyAtYyBvZGVyIC0tY3B1IGV0d2FzIGFuZGVyZXMgYW5nZWdlYmVuIHdpcmRcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSAiCisiYXJndW1lbnRcbiIKK21zZ3N0ciAiRGllc2UgT3B0aW9uIGthbm4gbmljaHQgbWl0IGRlciAtLWNwdS1PcHRpb24ga29tYmluaWVydCB3ZXJkZW5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tY3B1IHBhcmFtZXRlciBhbmQvb3JcbiIKKyJtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTWFuIGthbm4gbmljaHQgbWVociBhbHMgZWluZW4gLS1jcHUtUGFyYW1ldGVyIHVuZC9vZGVyIG1laHIgYWxzIGVpbmVuXG4iCisiaW5mb3JtYXRpb25zc3BlemlmaXNjaGVuIFBhcmFtZXRlciBnbGVpY2h6ZWl0aWcgYW5nZWJlblxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MDAgdXRpbHMvY3B1ZnJlcS1zZXQuYzo4MiB1dGlscy9jcHVwb3dlci1zZXQuYzo0MgorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjQyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIKK21zZ3N0ciAidW5iZWthbm50ZXIgb2RlciBmYWxzY2hlciBQYXJhbWV0ZXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGFuYWx5emUgQ1BVICVkIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50XG4iCittc2dzdHIgIiIKKyJLb25udGUgbmljaHQgZGllIENQVSAlZCBhbmFseXNpZXJlbiwgZGEgc2llIChzY2hlaW5iYXI/KSBuaWNodCBleGlzdGllcnQuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYyMCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWx5c2llcmUgQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIKK21zZ3N0ciAiQXVmcnVmOiBjcHVmcmVxLXNldCBbT3B0aW9uZW5dXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5ldyBtaW5pbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBuZXVlIG1pbmltYWxlIFRha3RmcmVxdWVueiwgZGllIGRlciBSZWdsZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXN35GhsZW4gZGFyZlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV1ZSBtYXhpbWFsZSBUYWt0ZnJlcXVlbnosIGRpZSBkZXIgUmVnbGVyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVzd+RobGVuIGRhcmZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIgorbXNnc3RyICIgIC1nIEdPViwgLS1nb3Zlcm5vcnMgR09WICB3ZWNoc2xlIHp1IFJlZ2xlciBHT1ZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIKK21zZ3N0ciAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNldHplIGV4YWt0ZSBUYWt0ZnJlcXVlbnouIEJlbvZ0aWd0IGRlbiBSZWdsZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlcnNwYWNlJy5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTd2l0Y2hlcyBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTZXR6ZSBXZXJ0ZSBm/HIgYWxsZSBDUFVzLCBkZXJlbiBUYWt0ZnJlcXVlbnpcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZWJlZGluZ3QgaWRlbnRpc2NoIGlzdC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMyB1dGlscy9jcHVwb3dlci1zZXQuYzoyOCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBHaWJ0IGRpZXNlIEt1cnr8YmVyc2ljaHQgYXVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlczpcbiIKKyIxLiBPbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIFwiYWxsXCJcbiIKK21zZ3N0ciAiIgorIkJlaSBkZW4gbWl0ICogbWFya2llcnRlbiBQYXJhbWV0ZXJuIHdpcmQgJy0tY3B1IDAnIGFuZ2Vub21tZW4sIHNvd2VpdCBuaWNodFxuIgorIm1pdHRlbHMgLWMgb2RlciAtLWNwdSBldHdhcyBhbmRlcmVzIGFuZ2VnZWJlbiB3aXJkXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciAiCisicGFyYW1ldGVyXG4iCisiICAgZXhjZXB0IHRoZSAtYyBDUFUsIC0tY3B1IENQVSBwYXJhbWV0ZXJcbiIKKyIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisiICAgYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2VcbiIKKyIgICAoRlJFUXVlbmN5IGluIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCittc2dzdHIgIiIKKyJIaW53ZWlzZTpcbiIKKyIxLiBTb2Zlcm4ga2VpbiAtYyBvZGVyIC0tY3B1LVBhcmFtZXRlciBhbmdlZ2ViZW4gaXN0LCB3aXJkICctLWNwdSAwJ1xuIgorIiAgIGFuZ2Vub21tZW5cbiIKKyIyLiBEZXIgUGFyYW1ldGVyIC1mIGJ6dy4gLS1mcmVxIGthbm4gbWl0IGtlaW5lbSBhbmRlcmVuIGFscyBkZW0gUGFyYW1ldGVyXG4iCisiICAgLWMgYnp3LiAtLWNwdSBrb21iaW5pZXJ0IHdlcmRlblxuIgorIjMuIEZSRVF1ZW56ZW4ga/ZubmVuIGluIEh6LCBrSHogKFN0YW5kYXJkKSwgTUh6LCBHSHogb2RlciBUSHogZWluZ2VnZWJlblxuIgorIiAgIHdlcmRlbiwgaW5kZW0gZGVyIFdlcnQgdW5kIHVubWl0dGVsYmFyIGFuc2NobGll32VuZCAob2huZSBMZWVyemVpY2hlbiEpXG4iCisiICAgZGllIEVpbmhlaXQgYW5nZWdlYmVuIHdlcmRlbi4gKEJzcDogMUdIeiApXG4iCisiICAgKEZSRVF1ZW56IGluIGtIeiA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKyItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCAiCisiYXZhaWxhYmxlLFxuIgorIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljICIKKyJmcmVxdWVuY3lcbiIKKyIgICBvciBiZWNhdXNlIHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IgaXNuJ3QgbG9hZGVkP1xuIgorbXNnc3RyICIiCisiQmVpbSBFaW5zdGVsbGVuIGlzdCBlaW4gRmVobGVyIGF1ZmdldHJldGVuLiBUeXBpc2NoZSBGZWhsZXJxdWVsbGVuIHNpbmQ6XG4iCisiLSBuaWNodCBhdXNyZWljaGVuZGUgUmVjaHRlIChBZG1pbmlzdHJhdG9yKVxuIgorIi0gZGVyIFJlZ2xlciBpc3QgbmljaHQgdmVyZvxnYmFyIGJ6dy4gbmljaHQgZ2VsYWRlblxuIgorIi0gZGllIGFuZ2VnZWJlbmUgVGFrdGlrIGlzdCBpbmtvcnJla3RcbiIKKyItIGVpbmUgc3BlemlmaXNjaGUgRnJlcXVlbnogd3VyZGUgYW5nZWdlYmVuLCBhYmVyIGRlciBSZWdsZXIgJ3VzZXJzcGFjZSdcbiIKKyIgIGthbm4gZW50d2VkZXIgaGFyZHdhcmViZWRpbmd0IG5pY2h0IGdlbnV0enQgd2VyZGVuIG9kZXIgaXN0IG5pY2h0IGdlbGFkZW5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcsIHVua25vd24gb3IgdW5oYW5kbGVkIENQVT9cbiIKK21zZ3N0ciAidW5iZWthbm50ZSBvZGVyIG5pY2h0IHJlZ2VsYmFyZSBDUFVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorIi1nLy0tZ292ZXJub3IgcGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisiRGVyIC1mIGJ6dy4gLS1mcmVxLVBhcmFtZXRlciBrYW5uIG5pY2h0IG1pdCBkZW4gUGFyYW1ldGVybiAtZC8tLW1pbiwgLXUvLS0iCisibWF4XG4iCisib2RlciAtZy8tLWdvdmVybm9yIGtvbWJpbmllcnQgd2VyZGVuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG91dCBvZiAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgYW5kXG4iCisiLWcvLS1nb3Zlcm5vciBtdXN0IGJlIHBhc3NlZFxuIgorbXNnc3RyICIiCisiRXMgbXVzcyBtaW5kZXN0ZW5zIGVpbiBQYXJhbWV0ZXIgYXVzIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4IG9kZXJcbiIKKyItZy8tLWdvdmVybm9yIGFuZ2VnZWJlbiB3ZXJkZW4uXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3B1OiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0tc2NoZWQtbWMgIFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyICIKKyJwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1wZXJmLWJpYXMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtbWMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLXNtdCBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtbWMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBwZXJmLWJpYXMgdmFsdWUgb24gQ1BVICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyAgICBHZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBGaW5kZXQgZGllIG1vbWVudGFuZSBUYWt0aWsgaGVyYXVzICpcbiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIy4gaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVAorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwNSB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBlcmYtYmlhczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHlzaWVyZSBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogTm8gaWRsZSBzdGF0ZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgaWRsZSBzdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBtYXggaWRsZSBzdGF0ZSAldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk51bWJlciBvZiBpZGxlIHN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGlkbGUgc3RhdGVzOiIKK21zZ3N0ciAiICBt9mdsaWNoZSBUYWt0ZnJlcXVlbnplbjogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncy9EZXNjcmlwdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXRlbmN5OiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHVyYXRpb246ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZHJpdmVyXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIFRyZWliZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGdvdmVybm9yOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIy4gcHJpbnRmKCJDc3RhdGVzOiAlZFxuIiwgY3N0YXRlcyk7CisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWN0aXZlIHN0YXRlOiAgICAgICAgICAgIEMwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heF9jc3RhdGU6ICAgICAgICAgICAgICBDJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1heGltdW0gYWxsb3dlZCBsYXRlbmN5OiAlbHUgdXNlY1xuIgorbXNnc3RyICIgIE1heGltYWxlIERhdWVyIGVpbmVzIFRha3RmcmVxdWVuendlY2hzZWxzOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGF0ZXM6XHRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEMlZDogICAgICAgICAgICAgICAgICB0eXBlW0MlZF0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9tb3Rpb25bLS1dIGRlbW90aW9uWy0tXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImxhdGVuY3lbJTAzbHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2VbJTA4bHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyYXRpb25bJTAyMEx1XSBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpZGxlaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiQXVmcnVmOiBjcHVmcmVxLWluZm8gW09wdGlvbmVuXVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc2lsZW50ICAgICAgICAgT25seSBzaG93IGdlbmVyYWwgQy1zdGF0ZSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIiCisiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBFcnpldWd0IGRldGFpbGxpZXJ0ZSBJbmZvcm1hdGlvbmVuLCBoaWxmcmVpY2hcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHp1bSBBdWZzcPxyZW4gdm9uIEZlaGxlcm5cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJhY3BpL3Byb2Nlc3Nvci8qL3Bvd2VyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gb2xkZXIga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBFcnpldWd0IEluZm9ybWF0aW9uZW4gaW4gZWluZW0g5GhubGljaGVtIEZvcm1hdCB6dSAiCisiZGVtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBkZXIgL3Byb2MvY3B1ZnJlcS1EYXRlaSBpbiAyLjQuIHVuZCBmcvxoZW4gMi42LlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsLVZlcnNpb25lblxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJNYW4ga2FubiBuaWNodCBtZWhyIGFscyBlaW5lbiAtLWNwdS1QYXJhbWV0ZXIgdW5kL29kZXIgbWVociBhbHMgZWluZW5cbiIKKyJpbmZvcm1hdGlvbnNzcGV6aWZpc2NoZW4gUGFyYW1ldGVyIGdsZWljaHplaXRpZyBhbmdlYmVuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBDUFUgbnVtYmVyIHdoaWNoIGluZm9ybWF0aW9uIHNoYWxsIGJlIGRldGVybWluZWQgIgorI34gImFib3V0XG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIE51bW1lciBkZXIgQ1BVLCD8YmVyIGRpZSBJbmZvcm1hdGlvbmVuICIKKyN+ICJoZXJhdXNnZWZ1bmRlbiB3ZXJkZW4gc29sbGVuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVtYmVyIG9mIENQVSB3aGVyZSBjcHVmcmVxIHNldHRpbmdzIHNoYWxsIGJlICIKKyN+ICJtb2RpZmllZFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgTnVtbWVyIGRlciBDUFUsIGRlcmVuIFRha3RmcmVxdWVuei0iCisjfiAiRWluc3RlbGx1bmdcbiIKKyN+ICIgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZXJkZW4gc29sbFxuIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vZnIucG8gYi90b29scy9wb3dlci9jcHVwb3dlci9wby9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDVhZDIwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vZnIucG8KQEAgLTAsMCArMSw5NDcgQEAKKyMgRnJlbmNoIHRyYW5zbGF0aW9ucyBmb3IgY3B1ZnJlcXV0aWxzIHBhY2thZ2UKKyMgQ29weXJpZ2h0IChDKSAyMDA0IFRIRSBQQUNLQUdFJ1MgQ09QWVJJR0hUIEhPTERFUgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgY3B1ZnJlcXV0aWxzIHBhY2thZ2UuCisjIER1Y3JvdCBCcnVubyA8ZHVjcm90QHBvdXBpbm91Lm9yZz4sIDIwMDQuCisjCisjLCBmdXp6eQorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogY3B1ZnJlcXV0aWxzIDAuMS1wcmUyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTAzLTA4IDE3OjAzKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA0LTExLTE3IDE1OjUzKzEwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEJydW5vIER1Y3JvdCA8ZHVjcm90QHBvdXBpbm91Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBOT05FXG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjM2Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NDMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1MQorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjU4IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjMzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0NworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo1NgorbXNnaWQgIlBhY2thZ2UgaW4gc2xlZXAgc3RhdGUgKFBDMSBvciBkZWVwZXIpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo2MworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMxIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3NworbXNnaWQgIk5vcnRoIEJyaWRnZSBQMSBib29sZWFuIGNvdW50ZXIgKHJldHVybnMgMCBvciAxKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjM1Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgbm90IGlkbGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo0MgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIGluIGFuIGlkbGUgc3RhdGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo1MAorbXNnaWQgIkF2ZXJhZ2UgRnJlcXVlbmN5IChpbmNsdWRpbmcgYm9vc3QpIGluIE1IeiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstdl0gWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC12OiBiZSBtb3JlIHZlcmJvc2VcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1oOiBwcmludCB0aGlzIGhlbHBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1pOiB0aW1lIGludGVydmFsbCB0byBtZWFzdXJlIGZvciBpbiBzZWNvbmRzIChkZWZhdWx0IDEpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdDogc2hvdyBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbDogbGlzdCBhdmFpbGFibGUgQ1BVIHNsZWVwIG1vbml0b3JzIChmb3IgdXNlIHdpdGggLW0pXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbTogc2hvdyBzcGVjaWZpYyBDUFUgc2xlZXAgbW9uaXRvcnMgb25seSAoaW4gc2FtZSBvcmRlcilcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvbmx5IG9uZSBvZjogLXQsIC1sLCAtbSBhcmUgYWxsb3dlZFxuIgorIklmIG5vbmUgb2YgdGhlbSBpcyBwYXNzZWQsIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFsbCBzdXBwb3J0ZWQgbW9uaXRvcnMgYXJlIHNob3duXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciAlcywgQ291bnRlciAlcyBoYXMgbm8gY291bnQgZnVuY3Rpb24uIEltcGxlbWVudGF0aW9uIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICppcyBvZmZsaW5lXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1heCBtb25pdG9yIG5hbWUgbGVuZ3RoICglZCkgZXhjZWVkZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtYXRjaGluZyBtb25pdG9yIGZvdW5kIGluICVzLCB0cnkgLWwgb3B0aW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciBcIiVzXCIgKCVkIHN0YXRlcykgLSBNaWdodCBvdmVyZmxvdyBhZnRlciAldSBzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdG9vayAlLjVmIHNlY29uZHMgYW5kIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZWFkIG51bWJlciBvZiBhdmFpbGFibGUgcHJvY2Vzc29yc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBtb25pdG9yICVzIG5lZWRzIHJvb3QgYWNjZXNzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSFcgQ3N0YXRlIG1vbml0b3JzIGZvdW5kXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciBbIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgLS12ZXJzaW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0ZWQgc3ViY29tbWFuZHMgYXJlOlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNvbWUgc3ViY29tbWFuZHMgY2FuIG1ha2UgdXNlIG9mIHRoZSAtYyBjcHVsaXN0IG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2sgYXQgdGhlIGdlbmVyYWwgY3B1cG93ZXIgbWFucGFnZSBob3cgdG8gdXNlIGl0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJhbmQgcmVhZCB1cCB0aGUgc3ViY29tbWFuZCdzIG1hbnBhZ2Ugd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVXNlIGNwdXBvd2VyIGhlbHAgc3ViY29tbWFuZCBmb3IgZ2V0dGluZyBoZWxwIGZvciBhYm92ZSBzdWJjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBlcnJvcnMgYW5kIGJ1Z3MgdG8gJXMsIHBsZWFzZS5cbiIKK21zZ3N0ciAiVmV1aWxsZXogcmFwcG9ydGV6IGxlcyBlcnJldXJzIGV0IGxlcyBib2d1ZXMg4CAlcywgcydpbCB2b3VzIHBsYWl0LlxuIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBwYXJzaW5nIGNwdSBsaXN0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ViY29tbWFuZCAlcyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjb3VudCB0aGUgbnVtYmVyIG9mIENQVXMgKCVzOiAlcyksIGFzc3VtaW5nIDFcbiIKK21zZ3N0ciAiROl0ZXJtaW5hdGlvbiBkdSBub21icmUgZGUgQ1BVcyAoJXMgOiAlcykgaW1wb3NzaWJsZS4gIEFzc3VtZSAxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKyIgICAgICAgICBGculxdWVuY2UgQ1BVIG1pbmltYWxlIC0gRnLpcXVlbmNlIENQVSBtYXhpbWFsZSAgLSBy6Wd1bGF0ZXVyXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIgorbXNnc3RyICIiCisKKyMuIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworIy4gb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisjLiBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKyMuICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisjLgorIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBTdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQWN0aXZlOiAlc1xuIgorbXNnc3RyICIgIHBpbG90ZSA6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQm9vc3QgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgVG90YWwgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIKK21zZ3N0ciAiICBwYXMgZGUgcGlsb3RlcyBjcHVmcmVxIHJlY29ubnUgcG91ciBjZSBDUFVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIHBpbG90ZSA6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSBmcmVxdWVuY3k6ICIKK21zZ3N0ciAiICBDUFVzIHF1aSBkb2l2ZW50IGNoYW5nZXIgZGUgZnLpcXVlbmNlcyBlbiBt6m1lIHRlbXBzIDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlOiAiCittc2dzdHIgIiAgQ1BVcyBxdWkgZG9pdmVudCBjaGFuZ2VyIGRlIGZy6XF1ZW5jZXMgZW4gbeptZSB0ZW1wcyA6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbWF4aW11bSB0cmFuc2l0aW9uIGxhdGVuY3k6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBoYXJkd2FyZSBsaW1pdHM6ICIKK21zZ3N0ciAiICBsaW1pdGF0aW9uIG1hdOlyaWVsbGUgOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIKK21zZ3N0ciAiICBwbGFnZSBkZSBmculxdWVuY2UgOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9yczogIgorbXNnc3RyICIgIHLpZ3VsYXRldXJzIGRpc3BvbmlibGVzIDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IHBvbGljeTogZnJlcXVlbmN5IHNob3VsZCBiZSB3aXRoaW4gIgorbXNnc3RyICIgIHRhY3RpcXVlIGFjdHVlbGxlIDogbGEgZnLpcXVlbmNlIGRvaXQg6nRyZSBjb21wcmlzZSBlbnRyZSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgYW5kICIKK21zZ3N0ciAiIGV0ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZ292ZXJub3IgXCIlc1wiIG1heSBkZWNpZGUgd2hpY2ggc3BlZWQgdG8gdXNlXG4iCisiICAgICAgICAgICAgICAgICAgd2l0aGluIHRoaXMgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyJMZSBy6Wd1bGF0ZXVyIFwiJXNcIiBlc3QgbGlicmUgZGUgY2hvaXNpciBsYSB2aXRlc3NlXG4iCisiICAgICAgICAgICAgICAgICAgZGFucyBjZXR0ZSBwbGFnZSBkZSBmculxdWVuY2VzLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIgorbXNnc3RyICIgIGxhIGZy6XF1ZW5jZSBhY3R1ZWxsZSBkZSBjZSBDUFUgZXN0ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoYXNzZXJ0ZWQgYnkgY2FsbCB0byBoYXJkd2FyZSkiCittc2dzdHIgIiAodulyaWZp6SBwYXIgdW4gYXBwZWwgZGlyZWN0IGR1IG1hdOlyaWVsKSIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3B1ZnJlcSBzdGF0czogIgorbXNnc3RyICIgIGRlcyBzdGF0aXN0aXF1ZSBjb25jZXJuYW50IGNwdWZyZXE6IgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNhZ2UgOiBjcHVmcmVxLWluZm8gW29wdGlvbnNdXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MyB1dGlscy9jcHVmcmVxLXNldC5jOjI2IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIzCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbnM6XG4iCittc2dzdHIgIk9wdGlvbnMgOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBBZmZpY2hlciBsZXMgaW5mb3JtYXRpb25zIGRlIGTpYm9ndWFnZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjcHVmcmVxIGNvcmUgKlxuIgorbXNnc3RyICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBPYnRlbmlyIGxhIGZy6XF1ZW5jZSBhY3R1ZWxsZSBkdSBDUFUgc2Vsb24gbGUgcG9pbnRcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGRlIHZ1ZSBkdSBjb2V1ciBkdSBzeXN06G1lIGRlIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KSAqXG4iCittc2dzdHIgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIE9idGVuaXIgbGEgZnLpcXVlbmNlIGFjdHVlbGxlIGR1IENQVSBkaXJlY3RlbWVudCBwYXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGxlIG1hdOlyaWVsIChkb2l0IOp0cmUgcm9vdCkgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIgorImFsbG93ZWQgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBBZmZpY2hlIGxlcyBmculxdWVuY2VzIG1pbmltYWxlcyBldCBtYXhpbWFsZXMgZHUgQ1BVICIKKyIqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIKK21zZ3N0ciAiICAtZCwgLS1kcml2ZXIgICAgICAgICBBZmZpY2hlIGxlIHBpbG90ZSBjcHVmcmVxIHV0aWxpc+kgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcCwgLS1wb2xpY3kgICAgICAgICBHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeSAqXG4iCittc2dzdHIgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgQWZmaWNoZSBsYSB0YWN0aXF1ZSBhY3R1ZWxsZSBkZSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIgorbXNnc3RyICIiCisiICAtZywgLS1nb3Zlcm5vcnMgICAgICBBZmZpY2hlIGxlcyBy6Wd1bGF0ZXVycyBkaXNwb25pYmxlcyBkZSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlICIKKyJmcmVxdWVuY3kgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICAgQWZmaWNoZSBxdWVscyBzb250IGxlcyBDUFVzIHF1aSBkb2l2ZW50IGNoYW5nZXIgZGVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICBmculxdWVuY2VzIGVuIG3qbWUgdGVtcHMgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5XG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlZCBieSBzb2Z0d2FyZSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgICBBZmZpY2hlIHF1ZWxzIHNvbnQgbGVzIENQVXMgcXVpIGRvaXZlbnQgY2hhbmdlciBkZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgIGZy6XF1ZW5jZXMgZW4gbeptZSB0ZW1wcyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorIiAgLXMsIC0tc3RhdHMgICAgICAgICAgSW5kaXF1ZSBkZXMgc3RhdGlzdGlxdWVzIGNvbmNlcm5hbnQgY3B1ZnJlcSwgc2lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGRpc3BvbmlibGVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsYXRlbmN5IG9uIENQVSBmcmVxdWVuY3kgIgorImNoYW5nZXMgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBBZmZpY2hlIGxlcyBmculxdWVuY2VzIG1pbmltYWxlcyBldCBtYXhpbWFsZXMgZHUgQ1BVICIKKyIqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1iLCAtLWJvb3N0ICAgICAgICAgIENoZWNrcyBmb3IgdHVyYm8gb3IgYm9vc3QgbW9kZXMgICpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBBZmZpY2hlIGxlcyBpbmZvcm1hdGlvbnMgZW4gdXRpbGlzYW50IGwnaW50ZXJmYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBmb3VybmllIHBhciAvcHJvYy9jcHVmcmVxLCBwculzZW50ZSBkYW5zIGxlcyAiCisidmVyc2lvbnNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIDIuNCBldCBsZXMgYW5jaWVubmVzIHZlcnNpb25zIDIuNiBkdSBub3lhdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBmb3IgdGhlIC1mLCAtdywgLXMgYW5kIC15ICIKKyJwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgICBhZmZpY2hlIGRhbnMgdW4gZm9ybWF0IGxpc2libGUgcG91ciB1biBodW1haW5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICBwb3VyIGxlcyBvcHRpb25zIC1mLCAtdyBldCAtcyAoTUh6LCBHSHopXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgYWZmaWNoZSBsJ2FpZGUtbeltb2lyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIG5vIGFyZ3VtZW50IG9yIG9ubHkgdGhlIC1jLCAtLWNwdSBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGRlYnVnIG91dHB1dCBhYm91dFxuIgorImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG4iCittc2dzdHIgIiIKKyJQYXIgZOlmYXV0LCBsZXMgaW5mb3JtYXRpb25zIGRlIGTpYm9ndWFnZSBzZXJvbnQgYWZmaWNo6WVzIHNpIGF1Y3VuXG4iCisiYXJndW1lbnQsIG91IGJpZW4gc2kgc2V1bGVtZW50IGwnYXJndW1lbnQgLWMgKC0tY3B1KSBlc3QgZG9ubuksIGFmaW4gZGVcbiIKKyJmYWNpbGl0ZXIgbGVzIHJhcHBvcnRzIGRlIGJvZ3VlcyBwYXIgZXhlbXBsZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvciB0aGUgYXJndW1lbnRzIG1hcmtlZCB3aXRoICosIG9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpc1xuIgorImVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byB6ZXJvXG4iCittc2dzdHIgIkxlcyBhcmd1bWVudHMgYXZlYyB1biAqIHV0aWxpc2Vyb250IGxlIENQVSAwIHNpIC1jICgtLWNwdSkgZXN0IG9taXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSAiCisiYXJndW1lbnRcbiIKK21zZ3N0ciAiQ2V0dGUgb3B0aW9uIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLWNwdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJPbiBuZSBwZXV0IGluZGlxdWVyIHBsdXMgZCd1biBwYXJhbeh0cmUgLS1jcHUsIHRvdXQgY29tbWUgbCdvbiBuZSBwZXV0XG4iCisic3DpY2lmaWVyIHBsdXMgZCd1biBhcmd1bWVudCBkZSBmb3JtYXRhZ2VcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjAwIHV0aWxzL2NwdWZyZXEtc2V0LmM6ODIgdXRpbHMvY3B1cG93ZXItc2V0LmM6NDIKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzo0MiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iCittc2dzdHIgIm9wdGlvbiBpbnZhbGlkZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgYW5hbHl6ZSBDUFUgJWQgYXMgaXQgZG9lc24ndCBzZWVtIHRvIGJlIHByZXNlbnRcbiIKK21zZ3N0ciAiYW5hbHlzZSBkdSBDUFUgJWQgaW1wb3NzaWJsZSBwdWlzcXUnaWwgbmUgc2VtYmxlIHBhcyDqdHJlIHBy6XNlbnRcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjIwIHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHlzZSBkdSBDUFUgJWQgOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNhZ2UgOiBjcHVmcmVxLXNldCBbb3B0aW9uc11cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgICBub3V2ZWxsZSBmculxdWVuY2UgbWluaW1hbGUgZHUgQ1BVIOAgdXRpbGlzZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyIGxlIHLpZ3VsYXRldXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgICBub3V2ZWxsZSBmculxdWVuY2UgbWF4aW1hbGUgZHUgQ1BVIOAgdXRpbGlzZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyIGxlIHLpZ3VsYXRldXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIgorbXNnc3RyICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBhY3RpdmUgbGUgculndWxhdGV1ciBHT1ZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIKK21zZ3N0ciAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIGZpeGUgbGEgZnLpcXVlbmNlIGR1IHByb2Nlc3NldXIg4CBGUkVRLiBJbCBmYXV0XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlIGxlIHLpZ3VsYXRldXIgqyB1c2Vyc3BhY2UguyBzb2l0IGRpc3BvbmlibGUgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZXQgYWN0aXbpLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFN3aXRjaGVzIGFsbCBoYXJkd2FyZS1yZWxhdGVkIENQVXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMzIHV0aWxzL2NwdXBvd2VyLXNldC5jOjI4IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgIGFmZmljaGUgbCdhaWRlLW3pbW9pcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGVzOlxuIgorIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIgorbXNnc3RyICJMZXMgYXJndW1lbnRzIGF2ZWMgdW4gKiB1dGlsaXNlcm9udCBsZSBDUFUgMCBzaSAtYyAoLS1jcHUpIGVzdCBvbWlzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciAiCisicGFyYW1ldGVyXG4iCisiICAgZXhjZXB0IHRoZSAtYyBDUFUsIC0tY3B1IENQVSBwYXJhbWV0ZXJcbiIKKyIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisiICAgYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2VcbiIKKyIgICAoRlJFUXVlbmN5IGluIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCittc2dzdHIgIiIKKyJSZW1hcnF1ZSA6XG4iCisiMS4gTGUgQ1BVIG51belybyAwIHNlcmEgdXRpbGlz6SBwYXIgZOlmYXV0IHNpIC1jIChvdSAtLWNwdSkgZXN0IG9taXMgO1xuIgorIjIuIGwnYXJndW1lbnQgLWYgRlJFUSAob3UgLS1mcmVxIEZSRVEpIG5lIHBldXQg6nRyZSB1dGlsaXPpIHF1J2F2ZWMgLS1jcHUgO1xuIgorIjMuIG9uIHBvdXJyYSBwculjaXNlciBsJ3VuaXTpIGRlcyBmculxdWVuY2VzIGVuIHBvc3RmaXhhbnQgc2FucyBhdWN1bmUgIgorImVzcGFjZVxuIgorIiAgIGxlcyB2YWxldXJzIHBhciBoeiwga0h6IChwYXIgZOlmYXV0KSwgTUh6LCBHSHogb3UgVEh6XG4iCisiICAgKGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHNldHRpbmcgbmV3IHZhbHVlcy4gQ29tbW9uIGVycm9yczpcbiIKKyItIERvIHlvdSBoYXZlIHByb3BlciBhZG1pbmlzdHJhdGlvbiByaWdodHM/IChzdXBlci11c2VyPylcbiIKKyItIElzIHRoZSBnb3Zlcm5vciB5b3UgcmVxdWVzdGVkIGF2YWlsYWJsZSBhbmQgbW9kcHJvYmVkP1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhbiBpbnZhbGlkIHBvbGljeT9cbiIKKyItIFRyeWluZyB0byBzZXQgYSBzcGVjaWZpYyBmcmVxdWVuY3ksIGJ1dCB1c2Vyc3BhY2UgZ292ZXJub3IgaXMgbm90ICIKKyJhdmFpbGFibGUsXG4iCisiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgIgorImZyZXF1ZW5jeVxuIgorIiAgIG9yIGJlY2F1c2UgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vciBpc24ndCBsb2FkZWQ/XG4iCittc2dzdHIgIiIKKyJFbiBhanVzdGFudCBsZXMgbm91dmVhdXggcGFyYW3odHJlcywgdW5lIGVycmV1ciBlc3QgYXBwYXJ1ZS4gTGVzIHNvdXJjZXNcbiIKKyJkJ2VycmV1ciB0eXBpcXVlIHNvbnQgOlxuIgorIi0gZHJvaXQgZCdhZG1pbmlzdHJhdGlvbiBpbnN1ZmZpc2FudCAo6nRlcy12b3VzIHJvb3QgPykgO1xuIgorIi0gbGUgculndWxhdGV1ciBjaG9pc2kgbidlc3QgcGFzIGRpc3BvbmlibGUsIG91IGJpZW4gbidlc3QgcGFzIGRpc3BvbmlibGUgIgorImVuXG4iCisiICB0YW50IHF1ZSBtb2R1bGUgbm95YXUgO1xuIgorIi0gbGEgdGFjdGlxdWUgbidlc3QgcGFzIGRpc3BvbmlibGUgO1xuIgorIi0gdm91cyB2b3VsZXogdXRpbGlzZXIgbCdvcHRpb24gLWYvLS1mcmVxLCBtYWlzIGxlIHLpZ3VsYXRldXIgqyB1c2Vyc3BhY2Ugu1xuIgorIiAgbidlc3QgcGFzIGRpc3BvbmlibGUsIHBhciBleGVtcGxlIHBhcmNlIHF1ZSBsZSBtYXTpcmllbCBuZSBsZSBzdXBwb3J0ZVxuIgorIiAgcGFzLCBvdSBiaWVuIG4nZXN0IHRvdXQgc2ltcGxlbWVudCBwYXMgY2hhcmfpLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZywgdW5rbm93biBvciB1bmhhbmRsZWQgQ1BVP1xuIgorbXNnc3RyICJDUFUgaW5jb25udSBvdSBub24gc3VwcG9ydOkgP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIC1mLy0tZnJlcSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWQvLS1taW4sIC11Ly0tbWF4IG9yXG4iCisiLWcvLS1nb3Zlcm5vciBwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyJsJ29wdGlvbiAtZi8tLWZyZXEgZXN0IGluY29tcGF0aWJsZSBhdmVjIGxlcyBvcHRpb25zIC1kLy0tbWluLCAtdS8tLW1heCBldFxuIgorIi1nLy0tZ292ZXJub3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKyItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iCittc2dzdHIgIiIKKyJMJ3VuIGRlIGNlcyBwYXJhbeh0cmVzIGVzdCBvYmxpZ2F0b2lyZSA6IC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4IGV0XG4iCisiLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGNwdTogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgc2V0IFsgLWIgdmFsIF0gWyAtbSB2YWwgXSBbIC1zIHZhbCBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzIFtWQUxdICAgIFNldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLXNjaGVkLW1jICBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210IFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciAiCisicG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tcGVyZi1iaWFzIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLW1jIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1zbXQgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtc210ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgcGVyZi1iaWFzIHZhbHVlIG9uIENQVSAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaW5mbyBbIC1iIF0gWyAtbSBdIFsgLXMgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgICAgR2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1tLCAtLXNjaGVkLW1jICAgICBHZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgQWZmaWNoZSBsYSB0YWN0aXF1ZSBhY3R1ZWxsZSBkZSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIy4gaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVAorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwNSB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBlcmYtYmlhczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHlzZSBkdSBDUFUgJWQgOlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IE5vIGlkbGUgc3RhdGVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIGlkbGUgc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgbWF4IGlkbGUgc3RhdGUgJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0NgorIywgYy1mb3JtYXQKK21zZ2lkICJOdW1iZXIgb2YgaWRsZSBzdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBpZGxlIHN0YXRlczoiCittc2dzdHIgIiAgcGxhZ2UgZGUgZnLpcXVlbmNlIDogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncy9EZXNjcmlwdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXRlbmN5OiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHVyYXRpb246ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZHJpdmVyXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIHBpbG90ZSA6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGdvdmVybm9yOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIy4gcHJpbnRmKCJDc3RhdGVzOiAlZFxuIiwgY3N0YXRlcyk7CisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWN0aXZlIHN0YXRlOiAgICAgICAgICAgIEMwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heF9jc3RhdGU6ICAgICAgICAgICAgICBDJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXRlczpcdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQyVkOiAgICAgICAgICAgICAgICAgIHR5cGVbQyVkXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGF0ZW5jeVslMDNsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZVslMDhsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXJhdGlvblslMDIwTHVdIFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGlkbGVpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc2FnZSA6IGNwdWZyZXEtaW5mbyBbb3B0aW9uc11cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXNpbGVudCAgICAgICAgIE9ubHkgc2hvdyBnZW5lcmFsIEMtc3RhdGUgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBBZmZpY2hlciBsZXMgaW5mb3JtYXRpb25zIGRlIGTpYm9ndWFnZVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImFjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIEFmZmljaGUgbGVzIGluZm9ybWF0aW9ucyBlbiB1dGlsaXNhbnQgbCdpbnRlcmZhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGZvdXJuaWUgcGFyIC9wcm9jL2NwdWZyZXEsIHBy6XNlbnRlIGRhbnMgbGVzICIKKyJ2ZXJzaW9uc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgMi40IGV0IGxlcyBhbmNpZW5uZXMgdmVyc2lvbnMgMi42IGR1IG5veWF1XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk9uIG5lIHBldXQgaW5kaXF1ZXIgcGx1cyBkJ3VuIHBhcmFt6HRyZSAtLWNwdSwgdG91dCBjb21tZSBsJ29uIG5lIHBldXRcbiIKKyJzcOljaWZpZXIgcGx1cyBkJ3VuIGFyZ3VtZW50IGRlIGZvcm1hdGFnZVxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgQ1BVIG51bWJlciB3aGljaCBpbmZvcm1hdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkICIKKyN+ICJhYm91dFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBOdW3pcm8gZHUgQ1BVIHBvdXIgbGVxdWVsIGwnaW5mb3JtYXRpb24gc2VyYSAiCisjfiAiYWZmaWNo6WVcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1iZXIgb2YgQ1BVIHdoZXJlIGNwdWZyZXEgc2V0dGluZ3Mgc2hhbGwgYmUgIgorI34gIm1vZGlmaWVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW3pcm8gZHUgQ1BVIOAgcHJlbmRyZSBlbiBjb21wdGUgcG91ciBsZXNcbiIKKyN+ICIgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VtZW50c1xuIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vaXQucG8gYi90b29scy9wb3dlci9jcHVwb3dlci9wby9pdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODBjNGRkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vaXQucG8KQEAgLTAsMCArMSw5NjEgQEAKKyMgSXRhbGlhbiB0cmFuc2xhdGlvbnMgZm9yIGNwdWZyZXF1dGlscyBwYWNrYWdlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA5CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBjcHVmcmVxdXRpbHMgcGFja2FnZS4KKyMgTWF0dGlhIERvbmdpbGkgPG1hbGF0dGlhQGdtYWlsLmNvbT4uCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBjcHVmcmVxdXRpbHMgMC4zXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTAzLTA4IDE3OjAzKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTA4LTE1IDEyOjAwKzA5MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1hdHRpYSBEb25naWxpIDxtYWxhdHRpYUBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTk9ORVxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6MzYKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo0MworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjUxCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTggdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjcwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6MzMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMyIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQ3Cittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjU2Cittc2dpZCAiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjYzCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzEiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjc3Cittc2dpZCAiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6MzUKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjQyCittc2dpZCAiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjUwCittc2dpZCAiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy12XSBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXY6IGJlIG1vcmUgdmVyYm9zZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC10OiBzaG93IENQVSB0b3BvbG9neS9oaWVyYXJjaHlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9ubHkgb25lIG9mOiAtdCwgLWwsIC1tIGFyZSBhbGxvd2VkXG4iCisiSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCBmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKmlzIG9mZmxpbmVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGggKCVkKSBleGNlZWRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsIHRyeSAtbCBvcHRpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1IHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgcm9vdCBhY2Nlc3NcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIFsgLWMgY3B1bGlzdCBdIHN1YmNvbW1hbmQgW0FSR1NdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciAtLXZlcnNpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnRlZCBzdWJjb21tYW5kcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImFuZCByZWFkIHVwIHRoZSBzdWJjb21tYW5kJ3MgbWFucGFnZSB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJVc2UgY3B1cG93ZXIgaGVscCBzdWJjb21tYW5kIGZvciBnZXR0aW5nIGhlbHAgZm9yIGFib3ZlIHN1YmNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIgorbXNnc3RyICJQZXIgZmF2b3JlLCBjb211bmljYXJlIGVycm9yaSBlIG1hbGZ1bnppb25hbWVudGkgYSAlcy5cbiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcGFyc2luZyBjcHUgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1YmNvbW1hbmQgJXMgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY291bnQgdGhlIG51bWJlciBvZiBDUFVzICglczogJXMpLCBhc3N1bWluZyAxXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGRldGVybWluYXJlIGlsIG51bWVybyBkaSBDUFUgKCVzOiAlcyksIGFzc3VtbyBzaWEgMVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisiICAgICAgICAgIGZyZXF1ZW56YSBtaW5pbWEgQ1BVICAgLSAgZnJlcXVlbnphIG1hc3NpbWEgQ1BVICAtICBnZXN0b3JlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIgorbXNnc3RyICIiCisKKyMuIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworIy4gb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisjLiBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKyMuICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisjLgorIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBTdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQWN0aXZlOiAlc1xuIgorbXNnc3RyICIgIG1vZHVsbyAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEJvb3N0IFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFRvdGFsIFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QYiVkOiAlbHVNSHogKGJvb3N0IHN0YXRlKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVAlZDogICVsdU1IelxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG5vIG9yIHVua25vd24gY3B1ZnJlcSBkcml2ZXIgaXMgYWN0aXZlIG9uIHRoaXMgQ1BVXG4iCittc2dzdHIgIiAgbmVzc3VuIG1vZHVsbyBvIG1vZHVsbyBjcHVmcmVxIHNjb25vc2NpdXRvIHBlciBxdWVzdGEgQ1BVXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBtb2R1bG8gJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiCittc2dzdHIgIiAgQ1BVIGNoZSBvcGVyYW5vIGFsbGEgc3Rlc3NhIGZyZXF1ZW56YSBoYXJkd2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIKK21zZ3N0ciAiICBDUFUgY2hlIMOoIG5lY2Vzc2FyaW8gc2lhbm8gY29vcmRpbmF0ZSBkYWwgc29mdHdhcmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbWF4aW11bSB0cmFuc2l0aW9uIGxhdGVuY3k6ICIKK21zZ3N0ciAiICBsYXRlbnphIG1hc3NpbWEgZHVyYW50ZSBsYSB0cmFuc2l6aW9uZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBoYXJkd2FyZSBsaW1pdHM6ICIKK21zZ3N0ciAiICBsaW1pdGkgaGFyZHdhcmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGZyZXF1ZW5jeSBzdGVwczogIgorbXNnc3RyICIgIGZyZXF1ZW56ZSBkaXNwb25pYmlsaTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIKK21zZ3N0ciAiICBnZXN0b3JpIGRpc3BvbmliaWxpOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiCittc2dzdHIgIiAgZ2VzdG9yZSBhdHR1YWxlOiBsYSBmcmVxdWVuemEgZGV2ZSBtYW50ZW5lcnNpIHRyYSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgYW5kICIKK21zZ3N0ciAiIGUgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IGRlY2lkZSB3aGljaCBzcGVlZCB0byB1c2VcbiIKKyIgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIKK21zZ3N0ciAiIgorIiBJbCBnZXN0b3JlIFwiJXNcIiBwdcOyIGRlY2lkZXJlIHF1YWxlIHZlbG9jaXTDoCB1c2FyZVxuIgorIiAgICAgICAgICAgICAgICAgIGluIHF1ZXN0byBpbnRlcnZhbGxvLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIgorbXNnc3RyICIgIGxhIGZyZXF1ZW56YSBhdHR1YWxlIGRlbGxhIENQVSDDqCAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIgorbXNnc3RyICIgKG90dGVudXRhIGRhIHVuYSBjaGlhbWF0YSBkaXJldHRhIGFsbCdoYXJkd2FyZSkiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGNwdWZyZXEgc3RhdHM6ICIKK21zZ3N0ciAiIHN0YXRpc3RpY2hlIGNwdWZyZXE6IgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNvOiBjcHVmcmVxLWluZm8gW29wemlvbmldXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MyB1dGlscy9jcHVmcmVxLXNldC5jOjI2IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIzCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbnM6XG4iCittc2dzdHIgIk9wemlvbmk6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBQcmludHMgb3V0IGRlYnVnIGluZm9ybWF0aW9uIFtkZWZhdWx0XVxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIE1vc3RyYSBpbmZvcm1hemlvbmkgZGkgZGVidWdcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYWNjb3JkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3B1ZnJlcSBjb3JlICpcbiIKK21zZ3N0ciAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgTW9zdHJhIGxhIGZyZXF1ZW56YSBhdHR1YWxlIGRlbGxhIENQVSBzZWNvbmRvXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbCBtb2R1bG8gY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpICpcbiIKK21zZ3N0ciAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgTW9zdHJhIGxhIGZyZXF1ZW56YSBhdHR1YWxlIGRlbGxhIENQVSBsZWdnZW5kb2xhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBkYWxsJ2hhcmR3YXJlIChkaXNwb25pYmlsZSBzb2xvIHBlciBsJ3V0ZW50ZSByb290KSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAiCisiYWxsb3dlZCAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluYSBsZSBmcmVxdWVuemUgbWluaW1hIGUgbWFzc2ltYSBwb3NzaWJpbGkgcGVyICIKKyJsYSBDUFUgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZCwgLS1kcml2ZXIgICAgICAgICBEZXRlcm1pbmVzIHRoZSB1c2VkIGNwdWZyZXEga2VybmVsIGRyaXZlciAqXG4iCittc2dzdHIgIiIKKyIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluYSBpbCBtb2R1bG8gY3B1ZnJlcSBkZWwga2VybmVsIGluIHVzbyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEdldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5ICpcbiIKK21zZ3N0ciAiIgorIiAgLXAsIC0tcG9saWN5ICAgICAgICAgTW9zdHJhIGlsIGdlc3RvcmUgY3B1ZnJlcSBhdHR1YWxtZW50ZSBpbiB1c28gKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycyAqXG4iCittc2dzdHIgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5hIGkgZ2VzdG9yaSBjcHVmcmVxIGRpc3BvbmliaWxpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgIgorImZyZXF1ZW5jeSAqXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluYSBxdWFsaSBDUFUgb3BlcmFubyBhbGxhIHN0ZXNzYSBmcmVxdWVuemEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlICpcbiIKK21zZ3N0ciAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5hIHF1YWxpIENQVSBkZXZvbm8gYXZlcmUgbGEgZnJlcXVlbnphXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRhIGRhbCBzb2Z0d2FyZSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIKK21zZ3N0ciAiICAtcywgLS1zdGF0cyAgICAgICAgICBNb3N0cmEgbGUgc3RhdGlzdGljaGUgc2UgZGlzcG9uaWJpbGlcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluZXMgdGhlIG1heGltdW0gbGF0ZW5jeSBvbiBDUFUgZnJlcXVlbmN5ICIKKyJjaGFuZ2VzICpcbiIKK21zZ3N0ciAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5hIGxhIGxhdGVuemEgbWFzc2ltYSBkdXJhbnRlIGkgY2FtYmkgZGkgIgorImZyZXF1ZW56YSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1iLCAtLWJvb3N0ICAgICAgICAgIENoZWNrcyBmb3IgdHVyYm8gb3IgYm9vc3QgbW9kZXMgICpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBTdGFtcGEgbGUgaW5mb3JtYXppb25pIGNvbWUgc2UgcHJvdmVuaXNzZXJvIGRhbGxhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2NpYSBjcHVmcmVxIC9wcm9jLyBwcmVzZW50ZSBuZWkga2VybmVsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAyLjQgZWQgaSBwcmltaSAyLjZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBmb3IgdGhlIC1mLCAtdywgLXMgYW5kIC15ICIKKyJwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIGZvcm1hdHRhIGwnb3V0cHV0IGRlbGxlIG9wemlvbmkgLWYsIC13LCAtcyBlIC15IGluICIKKyJtYW5pZXJhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBsZWdnaWJpbGUgZGEgdW4gZXNzZXJlIHVtYW5vXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgU3RhbXBhIHF1ZXN0YSBzY2hlcm1hdGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiBubyBhcmd1bWVudCBvciBvbmx5IHRoZSAtYywgLS1jcHUgcGFyYW1ldGVyIGlzIGdpdmVuLCBkZWJ1ZyBvdXRwdXQgYWJvdXRcbiIKKyJjcHVmcmVxIGlzIHByaW50ZWQgd2hpY2ggaXMgdXNlZnVsIGUuZy4gZm9yIHJlcG9ydGluZyBidWdzLlxuIgorbXNnc3RyICIiCisiU2Ugbm9uIHZpZW5lIHNwZWNpZmljYXRhIG5lc3N1bmEgb3B6aW9uZSBvIHZpZW5lIHNwZWNpZmljYXRhIHNvbG8gbCdvcHppb25lIC0iCisiYywgLS1jcHUsXG4iCisibGUgaW5mb3JtYXppb25pIGRpIGRlYnVnIHBlciBjcHVmcmVxIHNhcmFubm8gdXRpbGkgYWQgZXNlbXBpbyBhIHJpcG9ydGFyZSBpICIKKyJidWcuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9yIHRoZSBhcmd1bWVudHMgbWFya2VkIHdpdGggKiwgb21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzXG4iCisiZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIHplcm9cbiIKK21zZ3N0ciAiIgorIlBlciBsZSBvcHppb25pIHNlZ25hbGF0ZSBjb24gKiwgb21ldHRlcmUgbCdvcHppb25lIC1jIG8gLS1jcHUgw6ggY29tZSAiCisic3BlY2lmaWNhcmxhXG4iCisiY29uIGlsIHZhbG9yZSAwXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIHRvb2wgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCBwYXNzaW5nIGEgLS1jcHUgIgorImFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJMJ29wemlvbmUgc3BlY2lmaWNhdGEgYSBxdWVzdG8gcHJvZ3JhbW1hIG5vbiBwdcOyIGVzc2VyZSBjb21iaW5hdGEgY29uIC0tY3B1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLWNwdSBwYXJhbWV0ZXIgYW5kL29yXG4iCisibW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk5vbiDDqCBwb3NzaWJpbGUgc3BlY2lmaWNhcmUgcGnDuSBkaSB1bmEgdm9sdGEgbCdvcHppb25lIC0tY3B1IGUvb1xuIgorInNwZWNpZmljYXJlIHBpw7kgZGkgdW4gcGFyYW1ldHJvIGRpIG91dHB1dCBzcGVjaWZpY29cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjAwIHV0aWxzL2NwdWZyZXEtc2V0LmM6ODIgdXRpbHMvY3B1cG93ZXItc2V0LmM6NDIKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzo0MiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iCittc2dzdHIgIm9wemlvbmUgc2Nvbm9zY2l1dGEgbyBub24gdmFsaWRhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGxhIENQVSAlZCBwb2ljaMOpIG5vbiBzZW1icmEgZXNzZXJlIHByZXNlbnRlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYyMCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWxpc2kgZGVsbGEgQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNvOiBjcHVmcmVxLXNldCBbb3B6aW9uaV1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIGxhIG51b3ZhIGZyZXF1ZW56YSBtaW5pbWEgY2hlIGlsIGdlc3RvcmUgY3B1ZnJlcSAiCisicHXDsiBzY2VnbGllcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIGxhIG51b3ZhIGZyZXF1ZW56YSBtYXNzaW1hIGNoZSBpbCBnZXN0b3JlIGNwdWZyZXEgIgorInB1w7Igc2NlZ2xpZXJlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbmV3IGNwdWZyZXEgZ292ZXJub3JcbiIKK21zZ3N0ciAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbnVvdm8gZ2VzdG9yZSBjcHVmcmVxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkXG4iCittc2dzdHIgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpY2EgbGEgZnJlcXVlbnphIGEgY3VpIGltcG9zdGFyZSBsYSBDUFUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgw4ggbmVjZXNzYXJpbyBjaGUgaWwgZ2VzdG9yZSB1c2Vyc3BhY2Ugc2lhICIKKyJkaXNwb25pYmlsZSBlIGNhcmljYXRvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU3dpdGNoZXMgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVc1xuIgorbXNnc3RyICIiCisiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgTW9kaWZpY2EgdHV0dGUgbGUgQ1BVIGNvb3JkaW5hdGUgZGFsbCdoYXJkd2FyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMzIHV0aWxzL2NwdXBvd2VyLXNldC5jOjI4IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFN0YW1wYSBxdWVzdGEgc2NoZXJtYXRhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlczpcbiIKKyIxLiBPbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIFwiYWxsXCJcbiIKK21zZ3N0ciAiIgorIlBlciBsZSBvcHppb25pIHNlZ25hbGF0ZSBjb24gKiwgb21ldHRlcmUgbCdvcHppb25lIC1jIG8gLS1jcHUgw6ggY29tZSAiCisic3BlY2lmaWNhcmxhXG4iCisiY29uIGlsIHZhbG9yZSAwXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciAiCisicGFyYW1ldGVyXG4iCisiICAgZXhjZXB0IHRoZSAtYyBDUFUsIC0tY3B1IENQVSBwYXJhbWV0ZXJcbiIKKyIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisiICAgYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2VcbiIKKyIgICAoRlJFUXVlbmN5IGluIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCittc2dzdHIgIiIKKyJOb3RlOlxuIgorIjEuIE9tZXR0ZXJlIGwnb3B6aW9uZSAtYyBvIC0tY3B1IMOoIGVxdWl2YWxlbnRlIGEgaW1wb3N0YXJsbyBhIDBcbiIKKyIyLiBsJ29wemlvbmUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgbm9uIHB1w7IgZXNzZXJlIHNwZWNpZmljYXRhIGNvbiBhbHRyZSAiCisib3B6aW9uaVxuIgorIiAgIGFkIGVjY2V6aW9uZSBkZWxsJ29wemlvbmUgLWMgQ1BVIG8gLS1jcHUgQ1BVXG4iCisiMy4gbGUgRlJFUXVlbnplIHBvc3Nvbm8gZXNzZXJlIHNwZWN1ZmljYXRlIGluICBIeiwga0h6IChkZWZhdWx0KSwgTUh6LCBHSHosICIKKyJvciBUSHpcbiIKKyIgICBwb3N0cG9uZW5kbyBsJ3VuaXTDoCBkaSBtaXN1cmEgYWwgdmFsb3JlIHNlbnphIG5lc3N1bm8gc3BhemlvIGZyYSBsb3JvXG4iCisiICAgKEZSRVF1ZW56YSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKyItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCAiCisiYXZhaWxhYmxlLFxuIgorIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljICIKKyJmcmVxdWVuY3lcbiIKKyIgICBvciBiZWNhdXNlIHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IgaXNuJ3QgbG9hZGVkP1xuIgorbXNnc3RyICIiCisiU2kgc29ubyB2ZXJpZmljYXRpIGRlZ2xpIGVycm9yaSBpbXBvc3RhbmRvIGkgbnVvdmkgdmFsb3JpLlxuIgorIkFsY3VuaSBlcnJvcmkgY29tdW5pIHBvc3Nvbm8gZXNzZXJlOlxuIgorIi0gSGFpIGkgbmVjZXNzYXJpIGRpcml0dGkgZGkgYW1taW5pc3RyYXppb25lPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJbCBnZXN0b3JlIGNoZSBoYWkgcmljaGllc3RvIMOoIGRpc3BvbmliaWxlIGUgY2FyaWNhdG8/XG4iCisiLSBTdGFpIHByb3ZhbmRvIGFkIGltcG9zdGFyZSB1bmEgcG9saXRpY2EgZGkgZ2VzdGlvbmUgbm9uIHZhbGlkYT9cbiIKKyItIFN0YWkgcHJvdmFuZG8gYSBpbXBvc3RhcmUgdW5hIHNwZWNpZmljYSBmcmVxdWVuemEgbWEgaWwgZ2VzdG9yZVxuIgorIiAgdXNlcnNwYWNlIG5vbiDDqCBkaXNwb25pYmlsZSwgcGVyIGVzZW1waW8gYSBjYXVzYSBkZWxsJ2hhcmR3YXJlXG4iCisiICBjaGUgbm9uIHN1cHBvcnRhIGZyZXF1ZW56ZSBmaXNzZSBvIGEgY2F1c2EgZGVsIGZhdHRvIGNoZVxuIgorIiAgaWwgZ2VzdG9yZSB1c2Vyc3BhY2Ugbm9uIMOoIGNhcmljYXRvP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZywgdW5rbm93biBvciB1bmhhbmRsZWQgQ1BVP1xuIgorbXNnc3RyICJDUFUgZXJyYXRhLCBzY29ub3NjaXV0YSBvIG5vbiBnZXN0aXRhP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIC1mLy0tZnJlcSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWQvLS1taW4sIC11Ly0tbWF4IG9yXG4iCisiLWcvLS1nb3Zlcm5vciBwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyJsJ29wemlvbmUgLWYvLS1mcmVxIG5vbiBwdcOyIHZlbmlyZSBjb21iaW5hdGEgY29uIGkgcGFyYW1ldHJpXG4iCisiIC1kLy0tbWluLCAtdS8tLW1heCBvIC1nLy0tZ292ZXJub3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKyItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iCittc2dzdHIgIiIKKyJBbG1lbm8gdW5hIGRlbGxlIG9wemlvbmkgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGUgLWcvLS1nb3Zlcm5vclxuIgorImRldmUgZXNzZXJlIHNwZWNpZmljYXRhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3B1OiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0tc2NoZWQtbWMgIFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyICIKKyJwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1wZXJmLWJpYXMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtbWMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLXNtdCBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtbWMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBwZXJmLWJpYXMgdmFsdWUgb24gQ1BVICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyAgICBHZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorIiAgLXAsIC0tcG9saWN5ICAgICAgICAgTW9zdHJhIGlsIGdlc3RvcmUgY3B1ZnJlcSBhdHR1YWxtZW50ZSBpbiB1c28gKlxuIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210ICAgIEdldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQYXNzaW5nIG5vIG9wdGlvbiB3aWxsIHNob3cgYWxsIGluZm8sIGJ5IGRlZmF1bHQgb25seSBvbiBjb3JlIDBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjLiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTA1IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmdcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGVyZi1iaWFzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFsaXNpIGRlbGxhIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBpZGxlIHN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTnVtYmVyIG9mIGlkbGUgc3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IgorbXNnc3RyICIgIGZyZXF1ZW56ZSBkaXNwb25pYmlsaTogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncy9EZXNjcmlwdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXRlbmN5OiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHVyYXRpb246ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZHJpdmVyXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIG1vZHVsbyAlc1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBnb3Zlcm5vcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIEMtc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyMuIHByaW50ZigiQ3N0YXRlczogJWRcbiIsIGNzdGF0ZXMpOworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImFjdGl2ZSBzdGF0ZTogICAgICAgICAgICBDMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhfY3N0YXRlOiAgICAgICAgICAgICAgQyV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtYXhpbXVtIGFsbG93ZWQgbGF0ZW5jeTogJWx1IHVzZWNcbiIKK21zZ3N0ciAiICBsYXRlbnphIG1hc3NpbWEgZHVyYW50ZSBsYSB0cmFuc2l6aW9uZTogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdGVzOlx0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgdHlwZVtDJWRdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJsYXRlbmN5WyUwM2x1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlWyUwOGx1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmF0aW9uWyUwMjBMdV0gXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlVzbzogY3B1ZnJlcS1pbmZvIFtvcHppb25pXVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc2lsZW50ICAgICAgICAgT25seSBzaG93IGdlbmVyYWwgQy1zdGF0ZSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIE1vc3RyYSBpbmZvcm1hemlvbmkgZGkgZGVidWdcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJhY3BpL3Byb2Nlc3Nvci8qL3Bvd2VyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gb2xkZXIga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBTdGFtcGEgbGUgaW5mb3JtYXppb25pIGNvbWUgc2UgcHJvdmVuaXNzZXJvIGRhbGxhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2NpYSBjcHVmcmVxIC9wcm9jLyBwcmVzZW50ZSBuZWkga2VybmVsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAyLjQgZWQgaSBwcmltaSAyLjZcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBzcGVjaWZpY2FyZSBwacO5IGRpIHVuYSB2b2x0YSBsJ29wemlvbmUgLS1jcHUgZS9vXG4iCisic3BlY2lmaWNhcmUgcGnDuSBkaSB1biBwYXJhbWV0cm8gZGkgb3V0cHV0IHNwZWNpZmljb1xuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgQ1BVIG51bWJlciB3aGljaCBpbmZvcm1hdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkICIKKyN+ICJhYm91dFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBOdW1lcm8gZGkgQ1BVIHBlciBsYSBxdWFsZSBvdHRlbmVyZSBsZSAiCisjfiAiaW5mb3JtYXppb25pXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVtYmVyIG9mIENQVSB3aGVyZSBjcHVmcmVxIHNldHRpbmdzIHNoYWxsIGJlICIKKyN+ICJtb2RpZmllZFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVtZXJvIGRpIENQVSBwZXIgbGEgcXVhbGUgbW9kaWZpY2FyZSBsZSAiCisjfiAiaW1wb3N0YXppb25pXG4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiICBDUFVzIHdoaWNoIGNvb3JkaW5hdGUgc29mdHdhcmUgZnJlcXVlbmN5IHJlcXVpcmVtZW50czogIgorI34gbXNnc3RyICIiCisjfiAiICBDUFUgcGVyIGxlIHF1YWxpIGVgIG5lY2Vzc2FyaW8gY2FtYmlhcmUgbGEgZnJlcXVlbnphICIKKyN+ICJjb250ZW1wb3JhbmVhbWVudGU6ICIKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL3B0LnBvIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vcHQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwZjUyNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL3B0LnBvCkBAIC0wLDAgKzEsOTU3IEBACisjIEJyYXppbGlhbiBQb3J0dWd1ZXNlIHRyYW5zbGF0aW9ucyBmb3IgY3B1ZnJlcXV0aWxzIHBhY2thZ2UKKyMgQ29weXJpZ2h0IChDKSAyMDA4IFRIRSBjcHVmcmVxdXRpbHMnUyBDT1BZUklHSFQgSE9MREVSCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBjcHVmcmVxdXRpbHMgcGFja2FnZS4KKyMgQ2xhdWRpbyBFZHVhcmRvIDxjbGF1ZGlvZWRkeUBnbWFpbC5jb20+LCAyMDA5LgorIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogY3B1ZnJlcXV0aWxzIDAwNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wMy0wOCAxNzowMyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wNi0xNCAyMjoxNi0wNDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDbGF1ZGlvIEVkdWFyZG8gPGNsYXVkaW9lZGR5QGdtYWlsLmNvbT5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6MzYKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo0MworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjUxCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTggdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjcwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6MzMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMyIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQ3Cittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjU2Cittc2dpZCAiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjYzCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzEiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjc3Cittc2dpZCAiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6MzUKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjQyCittc2dpZCAiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjUwCittc2dpZCAiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy12XSBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXY6IGJlIG1vcmUgdmVyYm9zZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC10OiBzaG93IENQVSB0b3BvbG9neS9oaWVyYXJjaHlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9ubHkgb25lIG9mOiAtdCwgLWwsIC1tIGFyZSBhbGxvd2VkXG4iCisiSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCBmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKmlzIG9mZmxpbmVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGggKCVkKSBleGNlZWRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsIHRyeSAtbCBvcHRpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1IHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgcm9vdCBhY2Nlc3NcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIFsgLWMgY3B1bGlzdCBdIHN1YmNvbW1hbmQgW0FSR1NdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciAtLXZlcnNpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnRlZCBzdWJjb21tYW5kcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImFuZCByZWFkIHVwIHRoZSBzdWJjb21tYW5kJ3MgbWFucGFnZSB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJVc2UgY3B1cG93ZXIgaGVscCBzdWJjb21tYW5kIGZvciBnZXR0aW5nIGhlbHAgZm9yIGFib3ZlIHN1YmNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIgorbXNnc3RyICJSZXBvcnRlIGVycm9zIGUgYnVncyBwYXJhICVzLCBwb3IgZmF2b3IuXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHBhcnNpbmcgY3B1IGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgY29udGFyIG8gbsO6bWVybyBkZSBDUFVzICglczogJXMpLCBhc3N1bWluZG8gMVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisiICAgICAgICAgIGZyZXF1w6puY2lhIG3DrW5pbmEgZG8gQ1BVICAtICBmcmVxdcOqbmNpYSBtw6F4aW1hIGRvIENQVSAgLSAgIgorInJlZ3VsYWRvclxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBCb29zdCBDYXBhYmlsaXRpZXMgb24gQ1BVICVkIC0tIGFyZSB5b3Ugcm9vdD9cbiIKK21zZ3N0ciAiIgorCisjLiBQIHN0YXRlIGNoYW5nZXMgdmlhIE1TUiBhcmUgaWRlbnRpZmllZCB2aWEgY3B1aWQgODAwMDAwMDcKKyMuIG9uIEludGVsIGFuZCBBTUQsIGJ1dCB3ZSBhc3N1bWUgYm9vc3QgY2FwYWJsZSBtYWNoaW5lcyBjYW4gZG8gdGhhdAorIy4gaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3CisjLiAmJiAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgNykpKQorIy4KKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGJvb3N0IHN0YXRlIHN1cHBvcnQ6IFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgU3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJ5ZXMiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgIm5vIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgIEFjdGl2ZTogJXNcbiIKK21zZ3N0ciAiICBkcml2ZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQm9vc3QgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgVG90YWwgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIKK21zZ3N0ciAiICBuZW5odW0gb3UgZHJpdmVyIGRvIGNwdWZyZXEgZGVjb25oZWNpZG8gZXN0w6EgYXRpdm8gbmVzc2UgQ1BVXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBkcml2ZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIgorbXNnc3RyICIgIENQVXMgcXVlIHJvZGFtIG5hIG1lc21hIGZyZXF1w6puY2lhIGRlIGhhcmR3YXJlOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeSBjb29yZGluYXRlZCBieSBzb2Z0d2FyZTogIgorbXNnc3RyICIgIENQVXMgcXVlIHByZWNpc2FtIHRlciBzdWFzIGZyZXF1w6puY2lhcyBjb29yZGVuYWRhcyBwb3Igc29mdHdhcmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbWF4aW11bSB0cmFuc2l0aW9uIGxhdGVuY3k6ICIKK21zZ3N0ciAiICBtYWlvciBsYXTDqm5jaWEgZGUgdHJhbnNpw6fDo286ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgaGFyZHdhcmUgbGltaXRzOiAiCittc2dzdHIgIiAgbGltaXRlcyBkbyBoYXJkd2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgZnJlcXVlbmN5IHN0ZXBzOiAiCittc2dzdHIgIiAgbsOtdmVpcyBkZSBmcmVxdcOqbmNpYSBkaXNwb27DrXZlaXM6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzOiAiCittc2dzdHIgIiAgcmVndWxhZG9yZXMgZG8gY3B1ZnJlcSBkaXNwb27DrXZlaXM6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBwb2xpY3k6IGZyZXF1ZW5jeSBzaG91bGQgYmUgd2l0aGluICIKK21zZ3N0ciAiICBwb2zDrXRpY2EgZGUgZnJlcXXDqm5jaWEgYXR1YWwgZGV2ZSBlc3RhciBlbnRyZSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgYW5kICIKK21zZ3N0ciAiIGUgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IGRlY2lkZSB3aGljaCBzcGVlZCB0byB1c2VcbiIKKyIgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIKK21zZ3N0ciAiIgorIk8gcmVndWxhZG9yIFwiJXNcIiBkZXZlIGRlY2lkaXIgcXVhbCB2ZWxvY2lkYWRlIHVzYXJcbiIKKyIgICAgICAgICAgICAgICAgICBkZW50cm8gZGVzc2UgbGltaXRlLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIgorbXNnc3RyICIgIGZyZXF1w6puY2lhIGF0dWFsIGRvIENQVSDDqSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIgorbXNnc3RyICIgKGRlY2xhcmFkbyBwb3IgY2hhbWFkYSBhbyBoYXJkd2FyZSkiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGNwdWZyZXEgc3RhdHM6ICIKK21zZ3N0ciAiICBzdGF0dXMgZG8gY3B1ZnJlcTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNvOiBjcHVmcmVxLWluZm8gW29ww6fDtWVzXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzMgdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb25zOlxuIgorbXNnc3RyICJPcMOnw7VlczpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24gW2RlZmF1bHRdXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgTW9zdHJhIGluZm9ybWHDp8OjbyBkZSBkZWJ1Z1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjcHVmcmVxIGNvcmUgKlxuIgorbXNnc3RyICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBPYnRlbSBhIGZyZXF1w6puY2lhIG5hIHF1YWwgbyBDUFUgcm9kYSBubyBtb21lbnRvLCBkZSAiCisiYWNvcmRvXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb20gbyBuw7pjbGVvIGRvIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KSAqXG4iCittc2dzdHIgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIE9idGVtIGEgZnJlcXXDqm5jaWEgbmEgcXVhbCBvIENQVSBlc3TDoSBvcGVyYW5kbyBubyAiCisibW9tZW50byxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGF0cmF2w6lzIGRlIGxlaXR1cmEgbm8gaGFyZHdhcmUgKGRpc3BvbsOtdmVsIHNvbWVudGUgIgorInBhcmEgcm9vdCkgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIgorImFsbG93ZWQgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmEgYSBmcmVxdcOqbmNpYSBtw61uaW1hIGUgbcOheGltYSBkbyBDUFUgIgorInBlcm1pdGlkYSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIKK21zZ3N0ciAiIgorIiAgLWQsICAtLWRyaXZlciAgICAgICAgIERldGVybWluYSBvIGRyaXZlciBkbyBrZXJuZWwgZG8gY3B1ZnJlcSB1c2FkbyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEdldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5ICpcbiIKK21zZ3N0ciAiIgorIi0tcCwgLS1wb2xpY3kgICAgICAgICBPYnRlbSBhIHBvbMOtdGljYSBkbyBjcHVmcmVxIGVtIHVzbyBubyBtb21lbnRvICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIgorbXNnc3RyICIiCisiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmEgcmVndWxhZG9yZXMgZG8gY3B1ZnJlcSBkaXNwb27DrXZlaXMgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSAiCisiZnJlcXVlbmN5ICpcbiIKK21zZ3N0ciAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5hIHF1YWlzIENQVXMgcm9kYW0gbmEgbWVzbWEgZnJlcXXDqm5jaWEgZGUgIgorImhhcmR3YXJlICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5XG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlZCBieSBzb2Z0d2FyZSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluYSBxdWFpcyBDUFVzIHByZWNpc2FtIHRlciBzdWFzIGZyZXF1w6puY2lhc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRlbmFkYXMgcG9yIHNvZnR3YXJlICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZVxuIgorbXNnc3RyICIgIC1zLCAtLXN0YXRzICAgICAgICAgIE1vc3RyYSBlc3RhdMOtc3RpY2FzIGRvIGNwdWZyZXEgc2UgZGlzcG9uw612ZWlzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSAiCisiY2hhbmdlcyAqXG4iCittc2dzdHIgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluYSBhIGxhdMOqbmNpYSBtw6F4aW1hIG5hcyB0cm9jYXMgZGUgZnJlcXXDqm5jaWEgIgorImRvIENQVSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1iLCAtLWJvb3N0ICAgICAgICAgIENoZWNrcyBmb3IgdHVyYm8gb3IgYm9vc3QgbW9kZXMgICpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBNb3N0cmEgaW5mb3JtYcOnw6NvIGRvIHRpcG8gcHJvdmlkYSBwZWxhIGludGVyZmFjZSAvIgorInByb2MvY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZW0ga2VybmVscyAyLjQuIGUgbWFpcyByZWNlbnRlcyAyLjZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBmb3IgdGhlIC1mLCAtdywgLXMgYW5kIC15ICIKKyJwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIHNhw61kYSBsZWfDrXZlbCBwYXJhIGh1bWFub3MgcGFyYSBvcyBwYXLDom1ldHJvcyAtZiwgLXcsICIKKyItcyBlIC15XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAtaCwgLS1oZWxwICAgICAgICAgICBJbXByaW1lIGVzc2EgdGVsYVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIG5vIGFyZ3VtZW50IG9yIG9ubHkgdGhlIC1jLCAtLWNwdSBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGRlYnVnIG91dHB1dCBhYm91dFxuIgorImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG4iCittc2dzdHIgIiIKKyJTZSBuZW5odW0gYXJndW1lbnRvIG91IHNvbWVudGUgbyBwYXLDom1ldHJvIC1jLCAtLWNwdSDDqSBkYWRvLCBpbmZvcm1hw6fDo28gZGUgIgorImRlYnVnIHNvYnJlXG4iCisibyBjcHVmcmVxIMOpIG1vc3RyYWRhLCBvIHF1ZSDDqSDDunRpbCBwb3IgZXhlbXBsbyBwYXJhIHJlcG9ydGFyIGJ1Z3MuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9yIHRoZSBhcmd1bWVudHMgbWFya2VkIHdpdGggKiwgb21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzXG4iCisiZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIHplcm9cbiIKK21zZ3N0ciAiIgorIlBhcmEgb3MgYXJndW1lbnRvcyBtYXJjYWRvcyBjb20gKiwgb21pdGlyIG8gYXJndW1lbnRvIC1jIG91IC0tY3B1IMOpXG4iCisiZXF1aXZhbGVudGUgYSBzZXTDoS1sbyBjb21vIHplcm9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSAiCisiYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk8gYXJndW1lbnRvIHVzYWRvIHByYSBlc3NhIGZlcnJhbWVudGEgbsOjbyBwb2RlIHNlciBjb21iaW5hZG8gY29tIHVtICIKKyJhcmd1bWVudG8gLS1jcHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tY3B1IHBhcmFtZXRlciBhbmQvb3JcbiIKKyJtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiVm9jw6ogbsOjbyBwb2RlIGVzcGVjaWZpY2FyIG1haXMgZG8gcXVlIHVtIHBhcsOibWV0cm8gLS1jcHUgZS9vdVxuIgorIm1haXMgZG8gcXVlIHVtIGFyZ3VtZW50byBkZSBzYcOtZGEgZXNwZWPDrWZpY29cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjAwIHV0aWxzL2NwdWZyZXEtc2V0LmM6ODIgdXRpbHMvY3B1cG93ZXItc2V0LmM6NDIKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzo0MiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iCittc2dzdHIgImFyZ3VtZW50byBpbnbDoWxpZG8gb3UgZGVzY29uaGVjaWRvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIgorbXNnc3RyICIiCisibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gQ1BVICUgasOhIHF1ZSBvIG1lc21vIHBhcmVjZSBuw6NvIGVzdGFyIHByZXNlbnRlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYyMCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWxpc2FuZG8gbyBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxdWVuY3ktc2V0IFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtc2V0IFtvcMOnw7Vlc11cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5vdmEgZnJlcXXDqm5jaWEgbcOtbmltYSBkbyBDUFUgcXVlIG8gcmVndWxhZG9yICIKKyJkZXZlIHNlbGVjaW9uYXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIG5vdmEgZnJlcXXDqm5jaWEgbcOheGltYSBkbyBDUFUgcXVlIG8gcmVndWxhZG9yICIKKyJkZXZlIGVzY29saGVyXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbmV3IGNwdWZyZXEgZ292ZXJub3JcbiIKK21zZ3N0ciAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbm92byByZWd1bGFkb3IgZG8gY3B1ZnJlcVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Zlcm5vciB0byBiZSBhdmFpbGFibGUgYW5kIGxvYWRlZFxuIgorbXNnc3RyICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgZnJlcXXDqm5jaWEgZXNwZWPDrWZpY2EgcGFyYSBzZXIgc2V0YWRhLiBOZWNlc3NpdGEgIgorInF1ZSBvIHJlZ3VsYWRvciBlbVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIG7DrXZlbCBkZSB1c3XDoXJpbyBlc3RlamEgZGlzcG9uw612ZWwgZSBjYXJyZWdhZG9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTd2l0Y2hlcyBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBNb2RpZmljYSB0b2RvcyBvcyBDUFVzIHJlbGFjaW9uYWRvcyBhbyBoYXJkd2FyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMzIHV0aWxzL2NwdXBvd2VyLXNldC5jOjI4IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAtaCwgLS1oZWxwICAgICAgICAgICBNb3N0cmEgZXNzYSB0ZWxhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlczpcbiIKKyIxLiBPbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIFwiYWxsXCJcbiIKK21zZ3N0ciAiIgorIlBhcmEgb3MgYXJndW1lbnRvcyBtYXJjYWRvcyBjb20gKiwgb21pdGlyIG8gYXJndW1lbnRvIC1jIG91IC0tY3B1IMOpXG4iCisiZXF1aXZhbGVudGUgYSBzZXTDoS1sbyBjb21vIHplcm9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIjIuIFRoZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyICIKKyJwYXJhbWV0ZXJcbiIKKyIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorIjMuIEZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHpcbiIKKyIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKK21zZ3N0ciAiIgorIk5vdGFzOlxuIgorIjEuIE9taXRpciBvIGFyZ3VtZW50byAtYyBvciAtLWNwdSDDqSBlcXVpdmFsZW50ZSBhIHNldMOhLWxvIGNvbW8gemVyb1xuIgorIjIuIE8gcGFyw6JtZXRybyAtZiBGUkVRLCAtLWZyZXEgRlJFUSBuw6NvIHBvZGUgc2VyIGNvbWJpbmFkbyBjb20gcXVhbHF1ZXIgIgorIm91dHJvIHBhcsOibWV0cm9cbiIKKyIgICBleGNldG8gY29tIG8gcGFyw6JtZXRybyAtYyBDUFUsIC0tY3B1IENQVVxuIgorIjMuIEZSRVF1w6puY2lhcyBwb2RlbSBzZXIgdXNhZGFzIGVtIEh6LCBrSHogKHBhZHLDo28pLCBNSHosIEdIeiwgbyBUSHpcbiIKKyIgICBjb2xvY2FuZG8gbyBub21lIGRlc2VqYWRvIGRhIHVuaWRhZGUgYXDDs3MgbyB2YWxvciwgc2VtIHF1YWxxdWVyIGVzcGHDp29cbiIKKyIgICAoRlJFUXXDqm5jaWEgZW0ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3Igc2V0dGluZyBuZXcgdmFsdWVzLiBDb21tb24gZXJyb3JzOlxuIgorIi0gRG8geW91IGhhdmUgcHJvcGVyIGFkbWluaXN0cmF0aW9uIHJpZ2h0cz8gKHN1cGVyLXVzZXI/KVxuIgorIi0gSXMgdGhlIGdvdmVybm9yIHlvdSByZXF1ZXN0ZWQgYXZhaWxhYmxlIGFuZCBtb2Rwcm9iZWQ/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGFuIGludmFsaWQgcG9saWN5P1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeSwgYnV0IHVzZXJzcGFjZSBnb3Zlcm5vciBpcyBub3QgIgorImF2YWlsYWJsZSxcbiIKKyIgICBmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIGhhcmR3YXJlIHdoaWNoIGNhbm5vdCBiZSBzZXQgdG8gYSBzcGVjaWZpYyAiCisiZnJlcXVlbmN5XG4iCisiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIKK21zZ3N0ciAiIgorIkVycm8gYW8gc2V0YXIgbm92b3MgdmFsb3Jlcy4gRXJyb3MgY29tdW5zOlxuIgorIi0gVm9jw6ogdGVtIGRpcmVpdG9zIGFkbWluaXN0cmF0aXZvcyBuZWNlc3PDoXJpb3M/IChzdXBlci11c3XDoXJpbz8pXG4iCisiLSBPIHJlZ3VsYWRvciBxdWUgdm9jw6ogcmVxdWVzaXRvdSBlc3TDoSBkaXNwb27DrXZlbCBlIGZvaSBcIm1vZHByb2JlZFwiP1xuIgorIi0gVGVudGFuZG8gc2V0YXIgdW1hIHBvbMOtdGljYSBpbnbDoWxpZGE/XG4iCisiLSBUZW50YW5kbyBzZXRhciB1bWEgZnJlcXXDqm5jaWEgZXNwZWPDrWZpY2EsIG1hcyBvIHJlZ3VsYWRvciBlbSBuw612ZWwgZGUgIgorInVzdcOhcmlvIG7Do28gZXN0w6EgZGlzcG9uw612ZWwsXG4iCisiICAgcG9yIGV4ZW1wbG8gZGV2aWRvIGFvIGhhcmR3YXJlIHF1ZSBuw6NvIHBvZGUgc2VyIHNldGFkbyBwcmEgdW1hIGZyZXF1w6puY2lhICIKKyJlc3BlY8OtZmljYVxuIgorIiAgIG91IHBvcnF1ZSBvIHJlZ3VsYWRvciBlbSBuw612ZWwgZGUgdXN1w6FyaW8gbsOjbyBmb2kgY2FycmVnYWRvP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZywgdW5rbm93biBvciB1bmhhbmRsZWQgQ1BVP1xuIgorbXNnc3RyICJDUFUgZXJyYWRvLCBkZXNjb25oZWNpZG8gb3UgaW5lc3BlcmFkbz9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorIi1nLy0tZ292ZXJub3IgcGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisibyBwYXLDom1ldHJvIC1mLy0tZnJlcSBuw6NvIHBvZGUgc2VyIGNvbWJpbmFkbyBjb20gb3MgcGFyw6JtZXRyb3MgLWQvLS1taW4sIC0iCisidS8tLW1heCBvdVxuIgorIi1nLy0tZ292ZXJub3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKyItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iCittc2dzdHIgIiIKKyJQZWxvIG1lbm9zIHVtIHBhcsOibWV0cm8gZW50cmUgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGVcbiIKKyItZy8tLWdvdmVybm9yIGRldmUgc2VyIHVzYWRvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3B1OiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0tc2NoZWQtbWMgIFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyICIKKyJwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1wZXJmLWJpYXMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtbWMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLXNtdCBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtbWMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBwZXJmLWJpYXMgdmFsdWUgb24gQ1BVICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyAgICBHZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorIi0tcCwgLS1wb2xpY3kgICAgICAgICBPYnRlbSBhIHBvbMOtdGljYSBkbyBjcHVmcmVxIGVtIHVzbyBubyBtb21lbnRvICpcbiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIy4gaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVAorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwNSB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBlcmYtYmlhczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbGlzYW5kbyBvIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBpZGxlIHN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTnVtYmVyIG9mIGlkbGUgc3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IgorbXNnc3RyICIgIG7DrXZlaXMgZGUgZnJlcXXDqm5jaWEgZGlzcG9uw612ZWlzOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhdGVuY3k6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJEdXJhdGlvbjogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgZHJpdmVyOiAlc1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBnb3Zlcm5vcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIEMtc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyMuIHByaW50ZigiQ3N0YXRlczogJWRcbiIsIGNzdGF0ZXMpOworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImFjdGl2ZSBzdGF0ZTogICAgICAgICAgICBDMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhfY3N0YXRlOiAgICAgICAgICAgICAgQyV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtYXhpbXVtIGFsbG93ZWQgbGF0ZW5jeTogJWx1IHVzZWNcbiIKK21zZ3N0ciAiICBtYWlvciBsYXTDqm5jaWEgZGUgdHJhbnNpw6fDo286ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXRlczpcdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQyVkOiAgICAgICAgICAgICAgICAgIHR5cGVbQyVkXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGF0ZW5jeVslMDNsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZVslMDhsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXJhdGlvblslMDIwTHVdIFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGlkbGVpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtaW5mbyBbb3DDp8O1ZXNdXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zaWxlbnQgICAgICAgICBPbmx5IHNob3cgZ2VuZXJhbCBDLXN0YXRlIGluZm9ybWF0aW9uXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgTW9zdHJhIGluZm9ybWHDp8OjbyBkZSBkZWJ1Z1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImFjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIE1vc3RyYSBpbmZvcm1hw6fDo28gZG8gdGlwbyBwcm92aWRhIHBlbGEgaW50ZXJmYWNlIC8iCisicHJvYy9jcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBlbSBrZXJuZWxzIDIuNC4gZSBtYWlzIHJlY2VudGVzIDIuNlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJWb2PDqiBuw6NvIHBvZGUgZXNwZWNpZmljYXIgbWFpcyBkbyBxdWUgdW0gcGFyw6JtZXRybyAtLWNwdSBlL291XG4iCisibWFpcyBkbyBxdWUgdW0gYXJndW1lbnRvIGRlIHNhw61kYSBlc3BlY8OtZmljb1xuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgQ1BVIG51bWJlciB3aGljaCBpbmZvcm1hdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkICIKKyN+ICJhYm91dFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBuw7ptZXJvIGRvIENQVSBzb2JyZSBvIHF1YWwgYXMgaW5mb3LDp8O1ZXMgZGV2ZW0gc2VyICIKKyN+ICJkZXRlcm1pbmFkYXNcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1iZXIgb2YgQ1BVIHdoZXJlIGNwdWZyZXEgc2V0dGluZ3Mgc2hhbGwgYmUgIgorI34gIm1vZGlmaWVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBuw7ptZXJvIGRvIENQVSBvbmRlIGFzIGNvbmZpZ3VyYcOnw7VlcyBkbyBjcHVmcmVxICIKKyN+ICJ2w6NvIHNlciBtb2RpZmljYWRhc1xuIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvYnVpbHRpbi5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvYnVpbHRpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NzBmZmIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9idWlsdGluLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBCVUlMVElOX0gKKyNkZWZpbmUgQlVJTFRJTl9ICisKK2V4dGVybiBpbnQgY21kX3NldChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworZXh0ZXJuIGludCBjbWRfaW5mbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworZXh0ZXJuIGludCBjbWRfZnJlcV9zZXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2V4dGVybiBpbnQgY21kX2ZyZXFfaW5mbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworZXh0ZXJuIGludCBjbWRfaWRsZV9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gaW50IGNtZF9tb25pdG9yKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisKK2V4dGVybiB2b2lkIHNldF9oZWxwKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5mb19oZWxwKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlcV9zZXRfaGVscCh2b2lkKTsKK2V4dGVybiB2b2lkIGZyZXFfaW5mb19oZWxwKHZvaWQpOworZXh0ZXJuIHZvaWQgaWRsZV9pbmZvX2hlbHAodm9pZCk7CitleHRlcm4gdm9pZCBtb25pdG9yX2hlbHAodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1ZnJlcS1pbmZvLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWE4YmUwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1ZnJlcS1pbmZvLmMKQEAgLTAsMCArMSw2NjUgQEAKKy8qCisgKiAgKEMpIDIwMDQtMjAwOSAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2JpdG1hc2suaCIKKworI2RlZmluZSBMSU5FX0xFTiAxMAorCitzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X2NwdXModm9pZCkKK3sKKwlGSUxFICpmcDsKKwljaGFyIHZhbHVlW0xJTkVfTEVOXTsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgY3B1bnIgPSAwOworCisJZnAgPSBmb3BlbigiL3Byb2Mvc3RhdCIsICJyIik7CisJaWYoIWZwKSB7CisJCXByaW50ZihfKCJDb3VsZG4ndCBjb3VudCB0aGUgbnVtYmVyIG9mIENQVXMgKCVzOiAlcyksIGFzc3VtaW5nIDFcbiIpLCAiL3Byb2Mvc3RhdCIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAxOworCX0KKworCXdoaWxlICghZmVvZihmcCkpIHsKKwkJaWYgKCFmZ2V0cyh2YWx1ZSwgTElORV9MRU4sIGZwKSkKKwkJCWNvbnRpbnVlOworCQl2YWx1ZVtMSU5FX0xFTiAtIDFdID0gJ1wwJzsKKwkJaWYgKHN0cmxlbih2YWx1ZSkgPCAoTElORV9MRU4gLSAyKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3Ryc3RyKHZhbHVlLCAiY3B1ICIpKQorCQkJY29udGludWU7CisJCWlmIChzc2NhbmYodmFsdWUsICJjcHUlZCAiLCAmY3B1bnIpICE9IDEpCisJCQljb250aW51ZTsKKwkJaWYgKGNwdW5yID4gcmV0KQorCQkJcmV0ID0gY3B1bnI7CisJfQorCWZjbG9zZShmcCk7CisKKwkvKiBjcHUgY291bnQgc3RhcnRzIGZyb20gMCwgb24gZXJyb3IgcmV0dXJuIDEgKFVQKSAqLworCXJldHVybiAocmV0KzEpOworfQorCisKK3N0YXRpYyB2b2lkIHByb2NfY3B1ZnJlcV9vdXRwdXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1LCBucl9jcHVzOworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OworCXVuc2lnbmVkIGludCBtaW5fcGN0ZyA9IDA7CisJdW5zaWduZWQgaW50IG1heF9wY3RnID0gMDsKKwl1bnNpZ25lZCBsb25nIG1pbiwgbWF4OworCisJcHJpbnRmKF8oIiAgICAgICAgICBtaW5pbXVtIENQVSBmcmVxdWVuY3kgIC0gIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgZ292ZXJub3JcbiIpKTsKKworCW5yX2NwdXMgPSBjb3VudF9jcHVzKCk7CisJZm9yIChjcHU9MDsgY3B1IDwgbnJfY3B1czsgY3B1KyspIHsKKwkJcG9saWN5ID0gY3B1ZnJlcV9nZXRfcG9saWN5KGNwdSk7CisJCWlmICghcG9saWN5KQorCQkJY29udGludWU7CisKKwkJaWYgKGNwdWZyZXFfZ2V0X2hhcmR3YXJlX2xpbWl0cyhjcHUsICZtaW4sICZtYXgpKSB7CisJCQltYXggPSAwOworCQl9IGVsc2UgeworCQkJbWluX3BjdGcgPSAocG9saWN5LT5taW4gKiAxMDApIC8gbWF4OworCQkJbWF4X3BjdGcgPSAocG9saWN5LT5tYXggKiAxMDApIC8gbWF4OworCQl9CisJCXByaW50ZigiQ1BVJTNkICAgICU5bHUga0h6ICglM2QgJSUpICAtICAlOWx1IGtIeiAoJTNkICUlKSAgLSAgJXNcbiIsCisJCSAgICAgICBjcHUgLCBwb2xpY3ktPm1pbiwgbWF4ID8gbWluX3BjdGcgOiAwLCBwb2xpY3ktPm1heCwgbWF4ID8gbWF4X3BjdGcgOiAwLCBwb2xpY3ktPmdvdmVybm9yKTsKKworCQljcHVmcmVxX3B1dF9wb2xpY3kocG9saWN5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3NwZWVkKHVuc2lnbmVkIGxvbmcgc3BlZWQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAoc3BlZWQgPiAxMDAwMDAwKSB7CisJCXRtcCA9IHNwZWVkICUgMTAwMDA7CisJCWlmICh0bXAgPj0gNTAwMCkKKwkJCXNwZWVkICs9IDEwMDAwOworCQlwcmludGYgKCIldS4lMDJ1IEdIeiIsICgodW5zaWduZWQgaW50KSBzcGVlZC8xMDAwMDAwKSwKKwkJCSgodW5zaWduZWQgaW50KSAoc3BlZWQlMTAwMDAwMCkvMTAwMDApKTsKKwl9IGVsc2UgaWYgKHNwZWVkID4gMTAwMDAwKSB7CisJCXRtcCA9IHNwZWVkICUgMTAwMDsKKwkJaWYgKHRtcCA+PSA1MDApCisJCQlzcGVlZCArPSAxMDAwOworCQlwcmludGYgKCIldSBNSHoiLCAoKHVuc2lnbmVkIGludCkgc3BlZWQgLyAxMDAwKSk7CisJfSBlbHNlIGlmIChzcGVlZCA+IDEwMDApIHsKKwkJdG1wID0gc3BlZWQgJSAxMDA7CisJCWlmICh0bXAgPj0gNTApCisJCQlzcGVlZCArPSAxMDA7CisJCXByaW50ZiAoIiV1LiUwMXUgTUh6IiwgKCh1bnNpZ25lZCBpbnQpIHNwZWVkLzEwMDApLAorCQkJKCh1bnNpZ25lZCBpbnQpIChzcGVlZCUxMDAwKS8xMDApKTsKKwl9IGVsc2UKKwkJcHJpbnRmICgiJWx1IGtIeiIsIHNwZWVkKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZHVyYXRpb24odW5zaWduZWQgbG9uZyBkdXJhdGlvbikKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChkdXJhdGlvbiA+IDEwMDAwMDApIHsKKwkJdG1wID0gZHVyYXRpb24gJSAxMDAwMDsKKwkJaWYgKHRtcCA+PSA1MDAwKQorCQkJZHVyYXRpb24gKz0gMTAwMDA7CisJCXByaW50ZiAoIiV1LiUwMnUgbXMiLCAoKHVuc2lnbmVkIGludCkgZHVyYXRpb24vMTAwMDAwMCksCisJCQkoKHVuc2lnbmVkIGludCkgKGR1cmF0aW9uJTEwMDAwMDApLzEwMDAwKSk7CisJfSBlbHNlIGlmIChkdXJhdGlvbiA+IDEwMDAwMCkgeworCQl0bXAgPSBkdXJhdGlvbiAlIDEwMDA7CisJCWlmICh0bXAgPj0gNTAwKQorCQkJZHVyYXRpb24gKz0gMTAwMDsKKwkJcHJpbnRmICgiJXUgdXMiLCAoKHVuc2lnbmVkIGludCkgZHVyYXRpb24gLyAxMDAwKSk7CisJfSBlbHNlIGlmIChkdXJhdGlvbiA+IDEwMDApIHsKKwkJdG1wID0gZHVyYXRpb24gJSAxMDA7CisJCWlmICh0bXAgPj0gNTApCisJCQlkdXJhdGlvbiArPSAxMDA7CisJCXByaW50ZiAoIiV1LiUwMXUgdXMiLCAoKHVuc2lnbmVkIGludCkgZHVyYXRpb24vMTAwMCksCisJCQkoKHVuc2lnbmVkIGludCkgKGR1cmF0aW9uJTEwMDApLzEwMCkpOworCX0gZWxzZQorCQlwcmludGYgKCIlbHUgbnMiLCBkdXJhdGlvbik7CisKKwlyZXR1cm47Cit9CisKKy8qIC0tYm9vc3QgLyAtYiAqLworCitzdGF0aWMgaW50IGdldF9ib29zdF9tb2RlKHVuc2lnbmVkIGludCBjcHUpIHsKKwlpbnQgc3VwcG9ydCwgYWN0aXZlLCBiX3N0YXRlcyA9IDAsIHJldCwgcHN0YXRlX25vLCBpOworCS8qIFRvRG86IE1ha2UgdGhpcyBtb3JlIGdsb2JhbCAqLworCXVuc2lnbmVkIGxvbmcgcHN0YXRlc1tNQVhfSFdfUFNUQVRFU10gPSB7MCx9OworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciAhPSBYODZfVkVORE9SX0FNRCAmJgorCSAgICBjcHVwb3dlcl9jcHVfaW5mby52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBjcHVmcmVxX2hhc19ib29zdF9zdXBwb3J0KGNwdSwgJnN1cHBvcnQsICZhY3RpdmUsICZiX3N0YXRlcyk7CisJaWYgKHJldCkgeworCQlwcmludGYoXygiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBCb29zdCBDYXBhYmlsaXRpZXMiCisJCQkJIiBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIiksIGNwdSk7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworCSAgIG9uIEludGVsIGFuZCBBTUQsIGJ1dCB3ZSBhc3N1bWUgYm9vc3QgY2FwYWJsZSBtYWNoaW5lcyBjYW4gZG8gdGhhdAorCSAgIGlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNworCSAgICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisJKi8KKworCXByaW50ZihfKCIgIGJvb3N0IHN0YXRlIHN1cHBvcnQ6IFxuIikpOworCisJcHJpbnRmKF8oIiAgICBTdXBwb3J0ZWQ6ICVzXG4iKSwgc3VwcG9ydCA/IF8oInllcyIpIDogXygibm8iKSk7CisJcHJpbnRmKF8oIiAgICBBY3RpdmU6ICVzXG4iKSwgYWN0aXZlID8gXygieWVzIikgOiBfKCJubyIpKTsKKworCS8qIFRvRG86IE9ubHkgd29ya3MgZm9yIEFNRCBmb3Igbm93Li4uICovCisJCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgorCSAgICBjcHVwb3dlcl9jcHVfaW5mby5mYW1pbHkgPj0gMHgxMCkgeworCQlyZXQgPSBkZWNvZGVfcHN0YXRlcyhjcHUsIGNwdXBvd2VyX2NwdV9pbmZvLmZhbWlseSwgYl9zdGF0ZXMsCisJCQkJICAgICBwc3RhdGVzLCAmcHN0YXRlX25vKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfSBlbHNlCisJCXJldHVybiAwOworCisJcHJpbnRmKF8oIiAgICBCb29zdCBTdGF0ZXM6ICVkXG4iKSwgYl9zdGF0ZXMpOworCXByaW50ZihfKCIgICAgVG90YWwgU3RhdGVzOiAlZFxuIiksIHBzdGF0ZV9ubyk7CisJZm9yIChpID0gMDsgaSA8IHBzdGF0ZV9ubzsgaSsrKSB7CisJCWlmIChpIDwgYl9zdGF0ZXMpCisJCQlwcmludGYoXygiICAgIFBzdGF0ZS1QYiVkOiAlbHVNSHogKGJvb3N0IHN0YXRlKVxuIiksCisJCQkgICAgICAgaSwgcHN0YXRlc1tpXSk7CisJCWVsc2UKKwkJCXByaW50ZihfKCIgICAgUHN0YXRlLVAlZDogICVsdU1IelxuIiksCisJCQkgICAgICAgaSAtIGJfc3RhdGVzLCBwc3RhdGVzW2ldKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX291dHB1dF9vbmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwljaGFyICpkcml2ZXI7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqY3B1czsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKmZyZXFzOworCXVuc2lnbmVkIGxvbmcgbWluLCBtYXgsIGZyZXFfa2VybmVsLCBmcmVxX2hhcmR3YXJlOworCXVuc2lnbmVkIGxvbmcgdG90YWxfdHJhbnMsIGxhdGVuY3k7CisJdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3RpbWU7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqIGdvdmVybm9yczsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdHM7CisKKwlpZiAoY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpIHsKKwkJcmV0dXJuOworCX0KKworCWZyZXFfa2VybmVsID0gY3B1ZnJlcV9nZXRfZnJlcV9rZXJuZWwoY3B1KTsKKwlmcmVxX2hhcmR3YXJlID0gY3B1ZnJlcV9nZXRfZnJlcV9oYXJkd2FyZShjcHUpOworCisJZHJpdmVyID0gY3B1ZnJlcV9nZXRfZHJpdmVyKGNwdSk7CisJaWYgKCFkcml2ZXIpIHsKKwkJcHJpbnRmKF8oIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIpKTsKKwl9IGVsc2UgeworCQlwcmludGYoXygiICBkcml2ZXI6ICVzXG4iKSwgZHJpdmVyKTsKKwkJY3B1ZnJlcV9wdXRfZHJpdmVyKGRyaXZlcik7CisJfQorCisJY3B1cyA9IGNwdWZyZXFfZ2V0X3JlbGF0ZWRfY3B1cyhjcHUpOworCWlmIChjcHVzKSB7CisJCXByaW50ZihfKCIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIikpOworCQl3aGlsZSAoY3B1cy0+bmV4dCkgeworCQkJcHJpbnRmKCIlZCAiLCBjcHVzLT5jcHUpOworCQkJY3B1cyA9IGNwdXMtPm5leHQ7CisJCX0KKwkJcHJpbnRmKCIlZFxuIiwgY3B1cy0+Y3B1KTsKKwkJY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzKGNwdXMpOworCX0KKworCWNwdXMgPSBjcHVmcmVxX2dldF9hZmZlY3RlZF9jcHVzKGNwdSk7CisJaWYgKGNwdXMpIHsKKwkJcHJpbnRmKF8oIiAgQ1BVcyB3aGljaCBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlOiAiKSk7CisJCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCQlwcmludGYoIiVkICIsIGNwdXMtPmNwdSk7CisJCQljcHVzID0gY3B1cy0+bmV4dDsKKwkJfQorCQlwcmludGYoIiVkXG4iLCBjcHVzLT5jcHUpOworCQljcHVmcmVxX3B1dF9hZmZlY3RlZF9jcHVzKGNwdXMpOworCX0KKworCWxhdGVuY3kgPSBjcHVmcmVxX2dldF90cmFuc2l0aW9uX2xhdGVuY3koY3B1KTsKKwlpZiAobGF0ZW5jeSkgeworCQlwcmludGYoXygiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIikpOworCQlwcmludF9kdXJhdGlvbihsYXRlbmN5KTsKKwkJcHJpbnRmKCIuXG4iKTsKKwl9CisKKwlpZiAoIShjcHVmcmVxX2dldF9oYXJkd2FyZV9saW1pdHMoY3B1LCAmbWluLCAmbWF4KSkpIHsKKwkJcHJpbnRmKF8oIiAgaGFyZHdhcmUgbGltaXRzOiAiKSk7CisJCXByaW50X3NwZWVkKG1pbik7CisJCXByaW50ZigiIC0gIik7CisJCXByaW50X3NwZWVkKG1heCk7CisJCXByaW50ZigiXG4iKTsKKwl9CisKKwlmcmVxcyA9IGNwdWZyZXFfZ2V0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyhjcHUpOworCWlmIChmcmVxcykgeworCQlwcmludGYoXygiICBhdmFpbGFibGUgZnJlcXVlbmN5IHN0ZXBzOiAiKSk7CisJCXdoaWxlIChmcmVxcy0+bmV4dCkgeworCQkJcHJpbnRfc3BlZWQoZnJlcXMtPmZyZXF1ZW5jeSk7CisJCQlwcmludGYoIiwgIik7CisJCQlmcmVxcyA9IGZyZXFzLT5uZXh0OworCQl9CisJCXByaW50X3NwZWVkKGZyZXFzLT5mcmVxdWVuY3kpOworCQlwcmludGYoIlxuIik7CisJCWNwdWZyZXFfcHV0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyhmcmVxcyk7CisJfQorCisJZ292ZXJub3JzID0gY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2dvdmVybm9ycyhjcHUpOworCWlmIChnb3Zlcm5vcnMpIHsKKwkJcHJpbnRmKF8oIiAgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzOiAiKSk7CisJCXdoaWxlIChnb3Zlcm5vcnMtPm5leHQpIHsKKwkJCXByaW50ZigiJXMsICIsIGdvdmVybm9ycy0+Z292ZXJub3IpOworCQkJZ292ZXJub3JzID0gZ292ZXJub3JzLT5uZXh0OworCQl9CisJCXByaW50ZigiJXNcbiIsIGdvdmVybm9ycy0+Z292ZXJub3IpOworCQljcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzKGdvdmVybm9ycyk7CisJfQorCisJcG9saWN5ID0gY3B1ZnJlcV9nZXRfcG9saWN5KGNwdSk7CisJaWYgKHBvbGljeSkgeworCQlwcmludGYoXygiICBjdXJyZW50IHBvbGljeTogZnJlcXVlbmN5IHNob3VsZCBiZSB3aXRoaW4gIikpOworCQlwcmludF9zcGVlZChwb2xpY3ktPm1pbik7CisJCXByaW50ZihfKCIgYW5kICIpKTsKKwkJcHJpbnRfc3BlZWQocG9saWN5LT5tYXgpOworCisJCXByaW50ZigiLlxuICAgICAgICAgICAgICAgICAgIik7CisJCXByaW50ZihfKCJUaGUgZ292ZXJub3IgXCIlc1wiIG1heSIKKwkJICAgICAgICIgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuICAgICAgICAgICAgICAgICAgd2l0aGluIHRoaXMgcmFuZ2UuXG4iKSwKKwkJICAgICAgIHBvbGljeS0+Z292ZXJub3IpOworCQljcHVmcmVxX3B1dF9wb2xpY3kocG9saWN5KTsKKwl9CisKKwlpZiAoZnJlcV9rZXJuZWwgfHwgZnJlcV9oYXJkd2FyZSkgeworCQlwcmludGYoXygiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIikpOworCQlpZiAoZnJlcV9oYXJkd2FyZSkgeworCQkJcHJpbnRfc3BlZWQoZnJlcV9oYXJkd2FyZSk7CisJCQlwcmludGYoXygiIChhc3NlcnRlZCBieSBjYWxsIHRvIGhhcmR3YXJlKSIpKTsKKwkJfQorCQllbHNlCisJCQlwcmludF9zcGVlZChmcmVxX2tlcm5lbCk7CisJCXByaW50ZigiLlxuIik7CisJfQorCXN0YXRzID0gY3B1ZnJlcV9nZXRfc3RhdHMoY3B1LCAmdG90YWxfdGltZSk7CisJaWYgKHN0YXRzKSB7CisJCXByaW50ZihfKCIgIGNwdWZyZXEgc3RhdHM6ICIpKTsKKwkJd2hpbGUgKHN0YXRzKSB7CisJCQlwcmludF9zcGVlZChzdGF0cy0+ZnJlcXVlbmN5KTsKKwkJCXByaW50ZigiOiUuMmYlJSIsICgxMDAuMCAqIHN0YXRzLT50aW1lX2luX3N0YXRlKSAvIHRvdGFsX3RpbWUpOworCQkJc3RhdHMgPSBzdGF0cy0+bmV4dDsKKwkJCWlmIChzdGF0cykKKwkJCQlwcmludGYoIiwgIik7CisJCX0KKwkJY3B1ZnJlcV9wdXRfc3RhdHMoc3RhdHMpOworCQl0b3RhbF90cmFucyA9IGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25zKGNwdSk7CisJCWlmICh0b3RhbF90cmFucykKKwkJCXByaW50ZigiICAoJWx1KVxuIiwgdG90YWxfdHJhbnMpOworCQllbHNlCisJCQlwcmludGYoIlxuIik7CisJfQorCWdldF9ib29zdF9tb2RlKGNwdSk7CisKK30KKworLyogLS1mcmVxIC8gLWYgKi8KKworc3RhdGljIGludCBnZXRfZnJlcV9rZXJuZWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGh1bWFuKSB7CisJdW5zaWduZWQgbG9uZyBmcmVxID0gY3B1ZnJlcV9nZXRfZnJlcV9rZXJuZWwoY3B1KTsKKwlpZiAoIWZyZXEpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChodW1hbikgeworCQlwcmludF9zcGVlZChmcmVxKTsKKwkJcHJpbnRmKCJcbiIpOworCX0gZWxzZQorCQlwcmludGYoIiVsdVxuIiwgZnJlcSk7CisJcmV0dXJuIDA7Cit9CisKKworLyogLS1od2ZyZXEgLyAtdyAqLworCitzdGF0aWMgaW50IGdldF9mcmVxX2hhcmR3YXJlKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBodW1hbikgeworCXVuc2lnbmVkIGxvbmcgZnJlcSA9IGNwdWZyZXFfZ2V0X2ZyZXFfaGFyZHdhcmUoY3B1KTsKKwlpZiAoIWZyZXEpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChodW1hbikgeworCQlwcmludF9zcGVlZChmcmVxKTsKKwkJcHJpbnRmKCJcbiIpOworCX0gZWxzZQorCQlwcmludGYoIiVsdVxuIiwgZnJlcSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0taHdsaW1pdHMgLyAtbCAqLworCitzdGF0aWMgaW50IGdldF9oYXJkd2FyZV9saW1pdHModW5zaWduZWQgaW50IGNwdSkgeworCXVuc2lnbmVkIGxvbmcgbWluLCBtYXg7CisJaWYgKGNwdWZyZXFfZ2V0X2hhcmR3YXJlX2xpbWl0cyhjcHUsICZtaW4sICZtYXgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwcmludGYoIiVsdSAlbHVcbiIsIG1pbiwgbWF4KTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1kcml2ZXIgLyAtZCAqLworCitzdGF0aWMgaW50IGdldF9kcml2ZXIodW5zaWduZWQgaW50IGNwdSkgeworCWNoYXIgKmRyaXZlciA9IGNwdWZyZXFfZ2V0X2RyaXZlcihjcHUpOworCWlmICghZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwcmludGYoIiVzXG4iLCBkcml2ZXIpOworCWNwdWZyZXFfcHV0X2RyaXZlcihkcml2ZXIpOworCXJldHVybiAwOworfQorCisvKiAtLXBvbGljeSAvIC1wICovCisKK3N0YXRpYyBpbnQgZ2V0X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1KSB7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSBjcHVmcmVxX2dldF9wb2xpY3koY3B1KTsKKwlpZiAoIXBvbGljeSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcHJpbnRmKCIlbHUgJWx1ICVzXG4iLCBwb2xpY3ktPm1pbiwgcG9saWN5LT5tYXgsIHBvbGljeS0+Z292ZXJub3IpOworCWNwdWZyZXFfcHV0X3BvbGljeShwb2xpY3kpOworCXJldHVybiAwOworfQorCisvKiAtLWdvdmVybm9ycyAvIC1nICovCisKK3N0YXRpYyBpbnQgZ2V0X2F2YWlsYWJsZV9nb3Zlcm5vcnModW5zaWduZWQgaW50IGNwdSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmdvdmVybm9ycyA9IGNwdWZyZXFfZ2V0X2F2YWlsYWJsZV9nb3Zlcm5vcnMoY3B1KTsKKwlpZiAoIWdvdmVybm9ycykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoZ292ZXJub3JzLT5uZXh0KSB7CisJCXByaW50ZigiJXMgIiwgZ292ZXJub3JzLT5nb3Zlcm5vcik7CisJCWdvdmVybm9ycyA9IGdvdmVybm9ycy0+bmV4dDsKKwl9CisJcHJpbnRmKCIlc1xuIiwgZ292ZXJub3JzLT5nb3Zlcm5vcik7CisJY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2dvdmVybm9ycyhnb3Zlcm5vcnMpOworCXJldHVybiAwOworfQorCisKKy8qIC0tYWZmZWN0ZWQtY3B1cyAgLyAtYSAqLworCitzdGF0aWMgaW50IGdldF9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVzID0gY3B1ZnJlcV9nZXRfYWZmZWN0ZWRfY3B1cyhjcHUpOworCWlmICghY3B1cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoY3B1cy0+bmV4dCkgeworCQlwcmludGYoIiVkICIsIGNwdXMtPmNwdSk7CisJCWNwdXMgPSBjcHVzLT5uZXh0OworCX0KKwlwcmludGYoIiVkXG4iLCBjcHVzLT5jcHUpOworCWNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoY3B1cyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tcmVsYXRlZC1jcHVzICAvIC1yICovCisKK3N0YXRpYyBpbnQgZ2V0X3JlbGF0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqY3B1cyA9IGNwdWZyZXFfZ2V0X3JlbGF0ZWRfY3B1cyhjcHUpOworCWlmICghY3B1cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoY3B1cy0+bmV4dCkgeworCQlwcmludGYoIiVkICIsIGNwdXMtPmNwdSk7CisJCWNwdXMgPSBjcHVzLT5uZXh0OworCX0KKwlwcmludGYoIiVkXG4iLCBjcHVzLT5jcHUpOworCWNwdWZyZXFfcHV0X3JlbGF0ZWRfY3B1cyhjcHVzKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1zdGF0cyAvIC1zICovCisKK3N0YXRpYyBpbnQgZ2V0X2ZyZXFfc3RhdHModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGh1bWFuKSB7CisJdW5zaWduZWQgbG9uZyB0b3RhbF90cmFucyA9IGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25zKGNwdSk7CisJdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3RpbWU7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXRzID0gY3B1ZnJlcV9nZXRfc3RhdHMoY3B1LCAmdG90YWxfdGltZSk7CisJd2hpbGUgKHN0YXRzKSB7CisJCWlmIChodW1hbikgeworCQkJcHJpbnRfc3BlZWQoc3RhdHMtPmZyZXF1ZW5jeSk7CisJCQlwcmludGYoIjolLjJmJSUiLCAoMTAwLjAgKiBzdGF0cy0+dGltZV9pbl9zdGF0ZSkgLyB0b3RhbF90aW1lKTsKKwkJfQorCQllbHNlCisJCQlwcmludGYoIiVsdTolbGx1Iiwgc3RhdHMtPmZyZXF1ZW5jeSwgc3RhdHMtPnRpbWVfaW5fc3RhdGUpOworCQlzdGF0cyA9IHN0YXRzLT5uZXh0OworCQlpZiAoc3RhdHMpCisJCQlwcmludGYoIiwgIik7CisJfQorCWNwdWZyZXFfcHV0X3N0YXRzKHN0YXRzKTsKKwlpZiAodG90YWxfdHJhbnMpCisJCXByaW50ZigiICAoJWx1KVxuIiwgdG90YWxfdHJhbnMpOworCXJldHVybiAwOworfQorCisvKiAtLWxhdGVuY3kgLyAteSAqLworCitzdGF0aWMgaW50IGdldF9sYXRlbmN5KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBodW1hbikgeworCXVuc2lnbmVkIGxvbmcgbGF0ZW5jeSA9IGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25fbGF0ZW5jeShjcHUpOworCWlmICghbGF0ZW5jeSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaHVtYW4pIHsKKwkJcHJpbnRfZHVyYXRpb24obGF0ZW5jeSk7CisJCXByaW50ZigiXG4iKTsKKwl9IGVsc2UKKwkJcHJpbnRmKCIlbHVcbiIsIGxhdGVuY3kpOworCXJldHVybiAwOworfQorCit2b2lkIGZyZXFfaW5mb19oZWxwKHZvaWQpIHsKKwlwcmludGYoXygiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIikpOworCXByaW50ZihfKCJPcHRpb25zOlxuIikpOworCXByaW50ZihfKCIgIC1lLCAtLWRlYnVnICAgICAgICAgIFByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24gW2RlZmF1bHRdXG4iKSk7CisJcHJpbnRmKF8oIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNwdWZyZXEgY29yZSAqXG4iKSk7CisJcHJpbnRmKF8oIiAgLXcsIC0taHdmcmVxICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nXG4iCisJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpICpcbiIpKTsKKwlwcmludGYoXygiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSBhbGxvd2VkICpcbiIpKTsKKwlwcmludGYoXygiICAtZCwgLS1kcml2ZXIgICAgICAgICBEZXRlcm1pbmVzIHRoZSB1c2VkIGNwdWZyZXEga2VybmVsIGRyaXZlciAqXG4iKSk7CisJcHJpbnRmKF8oIiAgLXAsIC0tcG9saWN5ICAgICAgICAgR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kgKlxuIikpOworCXByaW50ZihfKCIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluZXMgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzICpcbiIpKTsKKwlwcmludGYoXygiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeSAqXG4iKSk7CisJcHJpbnRmKF8oIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3lcbiIKKwkJCSIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlICpcbiIpKTsKKwlwcmludGYoXygiICAtcywgLS1zdGF0cyAgICAgICAgICBTaG93cyBjcHVmcmVxIHN0YXRpc3RpY3MgaWYgYXZhaWxhYmxlXG4iKSk7CisJcHJpbnRmKF8oIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsYXRlbmN5IG9uIENQVSBmcmVxdWVuY3kgY2hhbmdlcyAqXG4iKSk7CisJcHJpbnRmKF8oIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIikpOworCXByaW50ZihfKCIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvY3B1ZnJlcVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iKSk7CisJcHJpbnRmKF8oIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgcGFyYW1ldGVyc1xuIikpOworCXByaW50ZihfKCIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIpKTsKKworCXByaW50ZigiXG4iKTsKKwlwcmludGYoXygiSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIGZ1bGwgb3V0cHV0IGFib3V0XG4iCisJICAgICAgICJjcHVmcmVxIGlzIHByaW50ZWQgd2hpY2ggaXMgdXNlZnVsIGUuZy4gZm9yIHJlcG9ydGluZyBidWdzLlxuXG4iKSk7CisJcHJpbnRmKF8oIkJ5IGRlZmF1bHQgaW5mbyBvZiBDUFUgMCBpcyBzaG93biB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiBcbiIKKwkJICJ3aXRoIHRoZSBjcHVwb3dlciAtLWNwdSBtYWluIGNvbW1hbmQgb3B0aW9uLlxuIikpOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBpbmZvX29wdHNbXSA9IHsKKwl7IC5uYW1lPSJkZWJ1ZyIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0nZSd9LAorCXsgLm5hbWU9ImJvb3N0IiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdiJ30sCisJeyAubmFtZT0iZnJlcSIsCQkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J2YnfSwKKwl7IC5uYW1lPSJod2ZyZXEiLAkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J3cnfSwKKwl7IC5uYW1lPSJod2xpbWl0cyIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0nbCd9LAorCXsgLm5hbWU9ImRyaXZlciIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0nZCd9LAorCXsgLm5hbWU9InBvbGljeSIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0ncCd9LAorCXsgLm5hbWU9ImdvdmVybm9ycyIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0nZyd9LAorCXsgLm5hbWU9InJlbGF0ZWQtY3B1cyIsIC5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0ncid9LAorCXsgLm5hbWU9ImFmZmVjdGVkLWNwdXMiLC5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0nYSd9LAorCXsgLm5hbWU9InN0YXRzIiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdzJ30sCisJeyAubmFtZT0ibGF0ZW5jeSIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0neSd9LAorCXsgLm5hbWU9InByb2MiLAkJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdvJ30sCisJeyAubmFtZT0iaHVtYW4iLAkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J20nfSwKKwl7IC5uYW1lPSJoZWxwIiwJCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0naCd9LAorCXsgfSwKK307CisKK2ludCBjbWRfZnJlcV9pbmZvKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlleHRlcm4gY2hhciAqb3B0YXJnOworCWV4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKKwlpbnQgcmV0ID0gMCwgY29udCA9IDE7CisJdW5zaWduZWQgaW50IGNwdSA9IDA7CisJdW5zaWduZWQgaW50IGh1bWFuID0gMDsKKwlpbnQgb3V0cHV0X3BhcmFtID0gMDsKKworCWRvIHsKKwkJcmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImhvZWZ3bGRwZ3Jhc215YiIsIGluZm9fb3B0cywgTlVMTCk7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgJz8nOgorCQkJb3V0cHV0X3BhcmFtID0gJz8nOworCQkJY29udCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCQlvdXRwdXRfcGFyYW0gPSAnaCc7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIC0xOgorCQkJY29udCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAnYic6CisJCWNhc2UgJ28nOgorCQljYXNlICdhJzoKKwkJY2FzZSAncic6CisJCWNhc2UgJ2cnOgorCQljYXNlICdwJzoKKwkJY2FzZSAnZCc6CisJCWNhc2UgJ2wnOgorCQljYXNlICd3JzoKKwkJY2FzZSAnZic6CisJCWNhc2UgJ2UnOgorCQljYXNlICdzJzoKKwkJY2FzZSAneSc6CisJCQlpZiAob3V0cHV0X3BhcmFtKSB7CisJCQkJb3V0cHV0X3BhcmFtID0gLTE7CisJCQkJY29udCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlvdXRwdXRfcGFyYW0gPSByZXQ7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAoaHVtYW4pIHsKKwkJCQlvdXRwdXRfcGFyYW0gPSAtMTsKKwkJCQljb250ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWh1bWFuID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpOworCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJfQorCX0gd2hpbGUoY29udCk7CisKKwlzd2l0Y2ggKG91dHB1dF9wYXJhbSkgeworCWNhc2UgJ28nOgorCQlpZiAoIWJpdG1hc2tfaXNhbGxjbGVhcihjcHVzX2Nob3NlbikpIHsKKwkJCXByaW50ZihfKCJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSAiCisJCQkJICJjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSBhcmd1bWVudFxuIikpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAwOgorCQlvdXRwdXRfcGFyYW0gPSAnZSc7CisJfQorCisJcmV0ID0gMDsKKworCS8qIERlZmF1bHQgaXM6IHNob3cgb3V0cHV0IG9mIENQVSAwIG9ubHkgKi8KKwlpZiAoYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkKKwkJYml0bWFza19zZXRiaXQoY3B1c19jaG9zZW4sIDApOworCQkKKwlzd2l0Y2ggKG91dHB1dF9wYXJhbSkgeworCWNhc2UgLTE6CisJCXByaW50ZihfKCJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tY3B1IHBhcmFtZXRlciBhbmQvb3JcbiIKKwkJICAgICAgICJtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlICc/JzoKKwkJcHJpbnRmKF8oImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIikpOworCQlmcmVxX2luZm9faGVscCgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlICdoJzoKKwkJZnJlcV9pbmZvX2hlbHAoKTsKKwkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKwljYXNlICdvJzoKKwkJcHJvY19jcHVmcmVxX291dHB1dCgpOworCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCX0KKworCWZvciAoY3B1ID0gYml0bWFza19maXJzdChjcHVzX2Nob3Nlbik7CisJICAgICBjcHUgPD0gYml0bWFza19sYXN0KGNwdXNfY2hvc2VuKTsgY3B1KyspIHsKKworCQlpZiAoIWJpdG1hc2tfaXNiaXRzZXQoY3B1c19jaG9zZW4sIGNwdSkpCisJCQljb250aW51ZTsKKwkJaWYgKGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpKSB7CisJCQlwcmludGYoXygiY291bGRuJ3QgYW5hbHl6ZSBDUFUgJWQgYXMgaXQgZG9lc24ndCBzZWVtIHRvIGJlIHByZXNlbnRcbiIpLCBjcHUpOworCQkJY29udGludWU7CisJCX0KKwkJcHJpbnRmKF8oImFuYWx5emluZyBDUFUgJWQ6XG4iKSwgY3B1KTsKKworCQlzd2l0Y2ggKG91dHB1dF9wYXJhbSkgeworCQljYXNlICdiJzoKKwkJCWdldF9ib29zdF9tb2RlKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlkZWJ1Z19vdXRwdXRfb25lKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAnYSc6CisJCQlyZXQgPSBnZXRfYWZmZWN0ZWRfY3B1cyhjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJcmV0ID0gZ2V0X3JlbGF0ZWRfY3B1cyhjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJcmV0ID0gZ2V0X2F2YWlsYWJsZV9nb3Zlcm5vcnMoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCXJldCA9IGdldF9wb2xpY3koY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCXJldCA9IGdldF9kcml2ZXIoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdsJzoKKwkJCXJldCA9IGdldF9oYXJkd2FyZV9saW1pdHMoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICd3JzoKKwkJCXJldCA9IGdldF9mcmVxX2hhcmR3YXJlKGNwdSwgaHVtYW4pOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJcmV0ID0gZ2V0X2ZyZXFfa2VybmVsKGNwdSwgaHVtYW4pOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJcmV0ID0gZ2V0X2ZyZXFfc3RhdHMoY3B1LCBodW1hbik7CisJCQlicmVhazsKKwkJY2FzZSAneSc6CisJCQlyZXQgPSBnZXRfbGF0ZW5jeShjcHUsIGh1bWFuKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXQpCisJCQlyZXR1cm4gKHJldCk7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLXNldC5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1ZnJlcS1zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDE1YjZiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1ZnJlcS1zZXQuYwpAQCAtMCwwICsxLDM1NyBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisKKyNpbmNsdWRlICJjcHVmcmVxLmgiCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKKyNkZWZpbmUgTk9STV9GUkVRX0xFTiAzMgorCit2b2lkIGZyZXFfc2V0X2hlbHAodm9pZCkKK3sKKwlwcmludGYoXygiVXNhZ2U6IGNwdXBvd2VyIGZyZXF1ZW5jeS1zZXQgW29wdGlvbnNdXG4iKSk7CisJcHJpbnRmKF8oIk9wdGlvbnM6XG4iKSk7CisJcHJpbnRmKF8oIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5ldyBtaW5pbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSBzZWxlY3RcbiIpKTsKKwlwcmludGYoXygiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5IHNlbGVjdFxuIikpOworCXByaW50ZihfKCIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIikpOworCXByaW50ZihfKCIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2VcbiIKKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkXG4iKSk7CisJcHJpbnRmKF8oIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFN3aXRjaGVzIGFsbCBoYXJkd2FyZS1yZWxhdGVkIENQVXNcbiIpKTsKKwlwcmludGYoXygiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIikpOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoXygiTm90ZXM6XG4iCisJICAgICAgICIxLiBPbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIFwiYWxsXCJcbiIpKTsKKwlwcmludGYoXygiMi4gVGhlIC1mIEZSRVEsIC0tZnJlcSBGUkVRIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgcGFyYW1ldGVyXG4iCisJICAgICAgICIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorCSAgICAgICAiMy4gRlJFUXVlbmNpZXMgY2FuIGJlIHBhc3NlZCBpbiBIeiwga0h6IChkZWZhdWx0KSwgTUh6LCBHSHosIG9yIFRIelxuIgorCSAgICAgICAiICAgYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2VcbiIKKwkgICAgICAgIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIpKTsKKworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBzZXRfb3B0c1tdID0geworCXsgLm5hbWU9Im1pbiIsCQkuaGFzX2FyZz1yZXF1aXJlZF9hcmd1bWVudCwJLmZsYWc9TlVMTCwJLnZhbD0nZCd9LAorCXsgLm5hbWU9Im1heCIsCQkuaGFzX2FyZz1yZXF1aXJlZF9hcmd1bWVudCwJLmZsYWc9TlVMTCwJLnZhbD0ndSd9LAorCXsgLm5hbWU9ImdvdmVybm9yIiwJLmhhc19hcmc9cmVxdWlyZWRfYXJndW1lbnQsCS5mbGFnPU5VTEwsCS52YWw9J2cnfSwKKwl7IC5uYW1lPSJmcmVxIiwJCS5oYXNfYXJnPXJlcXVpcmVkX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdmJ30sCisJeyAubmFtZT0iaGVscCIsCQkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J2gnfSwKKwl7IC5uYW1lPSJyZWxhdGVkIiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdyJ30sCisJeyB9LAorfTsKKworc3RhdGljIHZvaWQgcHJpbnRfZXJyb3Iodm9pZCkKK3sKKwlwcmludGYoXygiRXJyb3Igc2V0dGluZyBuZXcgdmFsdWVzLiBDb21tb24gZXJyb3JzOlxuIgorCQkJIi0gRG8geW91IGhhdmUgcHJvcGVyIGFkbWluaXN0cmF0aW9uIHJpZ2h0cz8gKHN1cGVyLXVzZXI/KVxuIgorCQkJIi0gSXMgdGhlIGdvdmVybm9yIHlvdSByZXF1ZXN0ZWQgYXZhaWxhYmxlIGFuZCBtb2Rwcm9iZWQ/XG4iCisJCQkiLSBUcnlpbmcgdG8gc2V0IGFuIGludmFsaWQgcG9saWN5P1xuIgorCQkJIi0gVHJ5aW5nIHRvIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeSwgYnV0IHVzZXJzcGFjZSBnb3Zlcm5vciBpcyBub3QgYXZhaWxhYmxlLFxuIgorCQkJIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljIGZyZXF1ZW5jeVxuIgorCQkJIiAgIG9yIGJlY2F1c2UgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vciBpc24ndCBsb2FkZWQ/XG4iKSk7Cit9OworCitzdHJ1Y3QgZnJlcV91bml0cyB7CisJY2hhcioJCXN0cl91bml0OworCWludAkJcG93ZXJfb2ZfdGVuOworfTsKKworY29uc3Qgc3RydWN0IGZyZXFfdW5pdHMgZGVmX3VuaXRzW10gPSB7CisJeyJoeiIsIC0zfSwKKwl7ImtoeiIsIDB9LCAvKiBkZWZhdWx0ICovCisJeyJtaHoiLCAzfSwKKwl7ImdoeiIsIDZ9LAorCXsidGh6IiwgOX0sCisJe05VTEwsIDB9Cit9OworCitzdGF0aWMgdm9pZCBwcmludF91bmtub3duX2FyZyh2b2lkKQoreworCXByaW50ZihfKCJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpKTsKKwlmcmVxX3NldF9oZWxwKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0cmluZ190b19mcmVxdWVuY3koY29uc3QgY2hhciAqc3RyKQoreworCWNoYXIgbm9ybWFsaXplZFtOT1JNX0ZSRVFfTEVOXTsKKwljb25zdCBzdHJ1Y3QgZnJlcV91bml0cyAqdW5pdDsKKwljb25zdCBjaGFyICpzY2FuOworCWNoYXIgKmVuZDsKKwl1bnNpZ25lZCBsb25nIGZyZXE7CisJaW50IHBvd2VyID0gMCwgbWF0Y2hfY291bnQgPSAwLCBpLCBjcCwgcGFkOworCisJd2hpbGUgKCpzdHIgPT0gJzAnKQorCQlzdHIrKzsKKworCWZvciAoc2NhbiA9IHN0cjsgaXNkaWdpdCgqc2NhbikgfHwgKnNjYW4gPT0gJy4nOyBzY2FuKyspIHsKKwkJaWYgKCpzY2FuID09ICcuJyAmJiBtYXRjaF9jb3VudCA9PSAwKQorCQkJbWF0Y2hfY291bnQgPSAxOworCQllbHNlIGlmICgqc2NhbiA9PSAnLicgJiYgbWF0Y2hfY291bnQgPT0gMSkKKwkJCXJldHVybiAwOworCX0KKworCWlmICgqc2NhbikgeworCQltYXRjaF9jb3VudCA9IDA7CisJCWZvciAodW5pdCA9IGRlZl91bml0czsgdW5pdC0+c3RyX3VuaXQ7IHVuaXQrKykgeworCQkJZm9yIChpID0gMDsKKwkJCSAgICAgc2NhbltpXSAmJiB0b2xvd2VyKHNjYW5baV0pID09IHVuaXQtPnN0cl91bml0W2ldOworCQkJICAgICArK2kpCisJCQkJY29udGludWU7CisJCQlpZiAoc2NhbltpXSkKKwkJCQljb250aW51ZTsKKwkJCW1hdGNoX2NvdW50Kys7CisJCQlwb3dlciA9IHVuaXQtPnBvd2VyX29mX3RlbjsKKwkJfQorCQlpZiAobWF0Y2hfY291bnQgIT0gMSkKKwkJCXJldHVybiAwOworCX0KKworCS8qIGNvdW50IHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGJlIGNvcGllZCAqLworCWZvciAoY3AgPSAwOyBpc2RpZ2l0KHN0cltjcF0pOyBjcCsrKQorCQljb250aW51ZTsKKworCWlmIChzdHJbY3BdID09ICcuJykgeworCQl3aGlsZSAocG93ZXIgPiAtMSAmJiBpc2RpZ2l0KHN0cltjcCsxXSkpCisJCQljcCsrLCBwb3dlci0tOworCX0KKwlpZiAocG93ZXIgPj0gLTEpCS8qIG5vdCBlbm91Z2ggPT4gcGFkICovCisJCXBhZCA9IHBvd2VyICsgMTsKKwllbHNlCQkJLyogdG8gbXVjaCA9PiBzdHJpcCAqLworCQlwYWQgPSAwLCBjcCArPSBwb3dlciArIDE7CisJLyogY2hlY2sgYm91bmRzICovCisJaWYgKGNwIDw9IDAgfHwgY3AgKyBwYWQgPiBOT1JNX0ZSRVFfTEVOIC0gMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjb3B5IGRpZ2l0cyAqLworCWZvciAoaSA9IDA7IGkgPCBjcDsgaSsrLCBzdHIrKykgeworCQlpZiAoKnN0ciA9PSAnLicpCisJCQlzdHIrKzsKKwkJbm9ybWFsaXplZFtpXSA9ICpzdHI7CisJfQorCS8qIGFuZCBwYWQgKi8KKwlmb3IgKDsgaSA8IGNwICsgcGFkOyBpKyspCisJCW5vcm1hbGl6ZWRbaV0gPSAnMCc7CisKKwkvKiByb3VuZCB1cCwgZG93biA/ICovCisJbWF0Y2hfY291bnQgPSAobm9ybWFsaXplZFtpLTFdID49ICc1Jyk7CisJLyogYW5kIGRyb3AgdGhlIGRlY2ltYWwgcGFydCAqLworCW5vcm1hbGl6ZWRbaS0xXSA9IDA7IC8qIGNwID4gMCAmJiBwYWQgPj0gMCA9PT4gaSA+IDAgKi8KKworCS8qIGZpbmFsIGNvbnZlcnNpb24gKGFuZCBhcHBseWluZyByb3VuZGluZykgKi8KKwllcnJubyA9IDA7CisJZnJlcSA9IHN0cnRvdWwobm9ybWFsaXplZCwgJmVuZCwgMTApOworCWlmIChlcnJubykKKwkJcmV0dXJuIDA7CisJZWxzZSB7CisJCWlmIChtYXRjaF9jb3VudCAmJiBmcmVxICE9IFVMT05HX01BWCkKKwkJCWZyZXErKzsKKwkJcmV0dXJuIGZyZXE7CisJfQorfQorCitzdGF0aWMgaW50IGRvX25ld19wb2xpY3kodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpuZXdfcG9sKQoreworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3VyX3BvbCA9IGNwdWZyZXFfZ2V0X3BvbGljeShjcHUpOworCWludCByZXQ7CisKKwlpZiAoIWN1cl9wb2wpIHsKKwkJcHJpbnRmKF8oIndyb25nLCB1bmtub3duIG9yIHVuaGFuZGxlZCBDUFU/XG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghbmV3X3BvbC0+bWluKQorCQluZXdfcG9sLT5taW4gPSBjdXJfcG9sLT5taW47CisKKwlpZiAoIW5ld19wb2wtPm1heCkKKwkJbmV3X3BvbC0+bWF4ID0gY3VyX3BvbC0+bWF4OworCisJaWYgKCFuZXdfcG9sLT5nb3Zlcm5vcikKKwkJbmV3X3BvbC0+Z292ZXJub3IgPSBjdXJfcG9sLT5nb3Zlcm5vcjsKKworCXJldCA9IGNwdWZyZXFfc2V0X3BvbGljeShjcHUsIG5ld19wb2wpOworCisJY3B1ZnJlcV9wdXRfcG9saWN5KGN1cl9wb2wpOworCisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IGRvX29uZV9jcHUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpuZXdfcG9sLAorCQl1bnNpZ25lZCBsb25nIGZyZXEsIHVuc2lnbmVkIGludCBwYykKK3sKKwlzd2l0Y2ggKHBjKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gY3B1ZnJlcV9zZXRfZnJlcXVlbmN5KGNwdSwgZnJlcSk7CisKKwljYXNlIDE6CisJCS8qIGlmIG9ubHkgb25lIHZhbHVlIG9mIGEgcG9saWN5IGlzIHRvIGJlIGNoYW5nZWQsIHdlIGNhbgorCQkgKiB1c2UgYSAiZmFzdCBwYXRoIi4KKwkJICovCisJCWlmIChuZXdfcG9sLT5taW4pCisJCQlyZXR1cm4gY3B1ZnJlcV9tb2RpZnlfcG9saWN5X21pbihjcHUsIG5ld19wb2wtPm1pbik7CisJCWVsc2UgaWYgKG5ld19wb2wtPm1heCkKKwkJCXJldHVybiBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWF4KGNwdSwgbmV3X3BvbC0+bWF4KTsKKwkJZWxzZSBpZiAobmV3X3BvbC0+Z292ZXJub3IpCisJCQlyZXR1cm4gY3B1ZnJlcV9tb2RpZnlfcG9saWN5X2dvdmVybm9yKGNwdSwgbmV3X3BvbC0+Z292ZXJub3IpOworCisJZGVmYXVsdDoKKwkJLyogc2xvdyBwYXRoICovCisJCXJldHVybiBkb19uZXdfcG9saWN5KGNwdSwgbmV3X3BvbCk7CisJfQorfQorCitpbnQgY21kX2ZyZXFfc2V0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlleHRlcm4gY2hhciAqb3B0YXJnOworCWV4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKKwlpbnQgcmV0ID0gMCwgY29udCA9IDE7CisJaW50IGRvdWJsZV9wYXJtID0gMCwgcmVsYXRlZCA9IDAsIHBvbGljeWNoYW5nZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmcmVxID0gMDsKKwljaGFyIGdvdlsyMF07CisJdW5zaWduZWQgaW50IGNwdTsKKworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSBuZXdfcG9sID0geworCQkubWluID0gMCwKKwkJLm1heCA9IDAsCisJCS5nb3Zlcm5vciA9IE5VTEwsCisJfTsKKworCS8qIHBhcmFtZXRlciBwYXJzaW5nICovCisJZG8geworCQlyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiZDp1Omc6ZjpociIsIHNldF9vcHRzLCBOVUxMKTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnPyc6CisJCQlwcmludF91bmtub3duX2FyZygpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNhc2UgJ2gnOgorCQkJZnJlcV9zZXRfaGVscCgpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgLTE6CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCWlmIChyZWxhdGVkKQorCQkJCWRvdWJsZV9wYXJtKys7CisJCQlyZWxhdGVkKys7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlpZiAobmV3X3BvbC5taW4pCisJCQkJZG91YmxlX3Bhcm0rKzsKKwkJCXBvbGljeWNoYW5nZSsrOworCQkJbmV3X3BvbC5taW4gPSBzdHJpbmdfdG9fZnJlcXVlbmN5KG9wdGFyZyk7CisJCQlpZiAobmV3X3BvbC5taW4gPT0gMCkgeworCQkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAndSc6CisJCQlpZiAobmV3X3BvbC5tYXgpCisJCQkJZG91YmxlX3Bhcm0rKzsKKwkJCXBvbGljeWNoYW5nZSsrOworCQkJbmV3X3BvbC5tYXggPSBzdHJpbmdfdG9fZnJlcXVlbmN5KG9wdGFyZyk7CisJCQlpZiAobmV3X3BvbC5tYXggPT0gMCkgeworCQkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlpZiAoZnJlcSkKKwkJCQlkb3VibGVfcGFybSsrOworCQkJZnJlcSA9IHN0cmluZ190b19mcmVxdWVuY3kob3B0YXJnKTsKKwkJCWlmIChmcmVxID09IDApIHsKKwkJCQlwcmludF91bmtub3duX2FyZygpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJaWYgKG5ld19wb2wuZ292ZXJub3IpCisJCQkJZG91YmxlX3Bhcm0rKzsKKwkJCXBvbGljeWNoYW5nZSsrOworCQkJaWYgKChzdHJsZW4ob3B0YXJnKSA8IDMpIHx8IChzdHJsZW4ob3B0YXJnKSA+IDE4KSkgeworCQkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQlpZiAoKHNzY2FuZihvcHRhcmcsICIlcyIsIGdvdikpICE9IDEpIHsKKwkJCQlwcmludF91bmtub3duX2FyZygpOworCQkJCXJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJbmV3X3BvbC5nb3Zlcm5vciA9IGdvdjsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZShjb250KTsKKworCS8qIHBhcmFtZXRlciBjaGVja2luZyAqLworCWlmIChkb3VibGVfcGFybSkgeworCQlwcmludGYoInRoZSBzYW1lIHBhcmFtZXRlciB3YXMgcGFzc2VkIG1vcmUgdGhhbiBvbmNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGZyZXEgJiYgcG9saWN5Y2hhbmdlKSB7CisJCXByaW50ZihfKCJ0aGUgLWYvLS1mcmVxIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtZC8tLW1pbiwgLXUvLS1tYXggb3JcbiIKKwkJCQkiLWcvLS1nb3Zlcm5vciBwYXJhbWV0ZXJzXG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZnJlcSAmJiAhcG9saWN5Y2hhbmdlKSB7CisJCXByaW50ZihfKCJBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG91dCBvZiAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgYW5kXG4iCisJCQkJIi1nLy0tZ292ZXJub3IgbXVzdCBiZSBwYXNzZWRcbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRGVmYXVsdCBpczogc2V0IGFsbCBDUFVzICovCisJaWYgKGJpdG1hc2tfaXNhbGxjbGVhcihjcHVzX2Nob3NlbikpCisJCWJpdG1hc2tfc2V0YWxsKGNwdXNfY2hvc2VuKTsKKworCS8qIEFsc28gc2V0IGZyZXF1ZW5jeSBzZXR0aW5ncyBmb3IgcmVsYXRlZCBDUFVzIGlmIC1yIGlzIHBhc3NlZCAqLworCWlmIChyZWxhdGVkKSB7CisJCWZvciAoY3B1ID0gYml0bWFza19maXJzdChjcHVzX2Nob3Nlbik7CisJCSAgICAgY3B1IDw9IGJpdG1hc2tfbGFzdChjcHVzX2Nob3Nlbik7IGNwdSsrKSB7CisJCQlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVzOworCisJCQlpZiAoIWJpdG1hc2tfaXNiaXRzZXQoY3B1c19jaG9zZW4sIGNwdSkgfHwKKwkJCSAgICBjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSkKKwkJCQljb250aW51ZTsKKworCQkJY3B1cyA9IGNwdWZyZXFfZ2V0X3JlbGF0ZWRfY3B1cyhjcHUpOworCQkJaWYgKCFjcHVzKQorCQkJCWJyZWFrOworCQkJd2hpbGUgKGNwdXMtPm5leHQpIHsKKwkJCQliaXRtYXNrX3NldGJpdChjcHVzX2Nob3NlbiwgY3B1cy0+Y3B1KTsKKwkJCQljcHVzID0gY3B1cy0+bmV4dDsKKwkJCX0KKwkJCWNwdWZyZXFfcHV0X3JlbGF0ZWRfY3B1cyhjcHVzKTsKKwkJfQorCX0KKworCisJLyogbG9vcCBvdmVyIENQVXMgKi8KKwlmb3IgKGNwdSA9IGJpdG1hc2tfZmlyc3QoY3B1c19jaG9zZW4pOworCSAgICAgY3B1IDw9IGJpdG1hc2tfbGFzdChjcHVzX2Nob3Nlbik7IGNwdSsrKSB7CisJCQorCQlpZiAoIWJpdG1hc2tfaXNiaXRzZXQoY3B1c19jaG9zZW4sIGNwdSkgfHwKKwkJICAgIGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpKQorCQkJY29udGludWU7CisKKwkJcHJpbnRmKF8oIlNldHRpbmcgY3B1OiAlZFxuIiksIGNwdSk7CisJCXJldCA9IGRvX29uZV9jcHUoY3B1LCAmbmV3X3BvbCwgZnJlcSwgcG9saWN5Y2hhbmdlKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCWlmIChyZXQpCisJCXByaW50X2Vycm9yKCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1aWRsZS1pbmZvLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVpZGxlLWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzU0NjgyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1aWRsZS1pbmZvLmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiAgKEMpIDIwMDQtMjAwOSAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKiAgKEMpIDIwMTAgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxjcHVmcmVxLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL3N5c2ZzLmgiCisjaW5jbHVkZSAiaGVscGVycy9iaXRtYXNrLmgiCisKKyNkZWZpbmUgTElORV9MRU4gMTAKKworc3RhdGljIHZvaWQgY3B1aWRsZV9jcHVfb3V0cHV0KHVuc2lnbmVkIGludCBjcHUsIGludCB2ZXJib3NlKQoreworCWludCBpZGxlc3RhdGVzLCBpZGxlc3RhdGU7CisJY2hhciAqdG1wOworCisJcHJpbnRmKF8gKCJBbmFseXppbmcgQ1BVICVkOlxuIiksIGNwdSk7CisKKwlpZGxlc3RhdGVzID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudChjcHUpOworCWlmIChpZGxlc3RhdGVzID09IDApIHsKKwkJcHJpbnRmKF8oIkNQVSAldTogTm8gaWRsZSBzdGF0ZXNcbiIpLCBjcHUpOworCQlyZXR1cm47CisJfQorCWVsc2UgaWYgKGlkbGVzdGF0ZXMgPD0gMCkgeworCQlwcmludGYoXygiQ1BVICV1OiBDYW4ndCByZWFkIGlkbGUgc3RhdGUgaW5mb1xuIiksIGNwdSk7CisJCXJldHVybjsKKwl9CisJdG1wID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9uYW1lKGNwdSwgaWRsZXN0YXRlcyAtIDEpOworCWlmICghdG1wKSB7CisJCXByaW50ZihfKCJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iKSwKKwkJICAgICAgIGlkbGVzdGF0ZXMgLSAxKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ZihfKCJOdW1iZXIgb2YgaWRsZSBzdGF0ZXM6ICVkXG4iKSwgaWRsZXN0YXRlcyk7CisKKwlwcmludGYoXygiQXZhaWxhYmxlIGlkbGUgc3RhdGVzOiIpKTsKKwlmb3IgKGlkbGVzdGF0ZSA9IDE7IGlkbGVzdGF0ZSA8IGlkbGVzdGF0ZXM7IGlkbGVzdGF0ZSsrKSB7CisJCXRtcCA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZShjcHUsIGlkbGVzdGF0ZSk7CisJCWlmICghdG1wKQorCQkJY29udGludWU7CisJCXByaW50ZigiICVzIiwgdG1wKTsKKwkJZnJlZSh0bXApOworCX0KKwlwcmludGYoIlxuIik7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCWZvciAoaWRsZXN0YXRlID0gMTsgaWRsZXN0YXRlIDwgaWRsZXN0YXRlczsgaWRsZXN0YXRlKyspIHsKKwkJdG1wID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9uYW1lKGNwdSwgaWRsZXN0YXRlKTsKKwkJaWYgKCF0bXApCisJCQljb250aW51ZTsKKwkJcHJpbnRmKCIlczpcbiIsIHRtcCk7CisJCWZyZWUodG1wKTsKKworCQl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX2Rlc2MoY3B1LCBpZGxlc3RhdGUpOworCQlpZiAoIXRtcCkKKwkJCWNvbnRpbnVlOworCQlwcmludGYoXygiRmxhZ3MvRGVzY3JpcHRpb246ICVzXG4iKSwgdG1wKTsKKwkJZnJlZSh0bXApOworCisJCXByaW50ZihfKCJMYXRlbmN5OiAlbHVcbiIpLAorCQkgICAgICAgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9sYXRlbmN5KGNwdSwgaWRsZXN0YXRlKSk7CisJCXByaW50ZihfKCJVc2FnZTogJWx1XG4iKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfdXNhZ2UoY3B1LCBpZGxlc3RhdGUpKTsKKwkJcHJpbnRmKF8oIkR1cmF0aW9uOiAlbGx1XG4iKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZShjcHUsIGlkbGVzdGF0ZSkpOworCX0KKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGNwdWlkbGVfZ2VuZXJhbF9vdXRwdXQodm9pZCkKK3sKKwljaGFyICp0bXA7CisKKwl0bXAgPSBzeXNmc19nZXRfY3B1aWRsZV9kcml2ZXIoKTsKKwlpZiAoIXRtcCkgeworCQlwcmludGYoXygiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGRyaXZlclxuIikpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKF8oIkNQVWlkbGUgZHJpdmVyOiAlc1xuIiksIHRtcCk7CisJZnJlZSAodG1wKTsKKworCXRtcCA9IHN5c2ZzX2dldF9jcHVpZGxlX2dvdmVybm9yKCk7CisJaWYgKCF0bXApIHsKKwkJcHJpbnRmKF8oIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIikpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKF8oIkNQVWlkbGUgZ292ZXJub3I6ICVzXG4iKSwgdG1wKTsKKwlmcmVlICh0bXApOworfQorCitzdGF0aWMgdm9pZCBwcm9jX2NwdWlkbGVfY3B1X291dHB1dCh1bnNpZ25lZCBpbnQgY3B1KQoreworCWxvbmcgbWF4X2FsbG93ZWRfY3N0YXRlID0gMjAwMDAwMDAwMDsKKwlpbnQgY3N0YXRlcywgY3N0YXRlOworCisJY3N0YXRlcyA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfY291bnQoY3B1KTsKKwlpZiAoY3N0YXRlcyA9PSAwKSB7CisJCS8qCisJCSAqIEdvIG9uIGFuZCBwcmludCBzYW1lIHVzZWxlc3MgaW5mbyBhcyB5b3UnZCBzZWUgd2l0aAorCQkgKiBjYXQgL3Byb2MvYWNwaS9wcm9jZXNzb3IvLi4vcG93ZXIKKwkJICoJcHJpbnRmKF8oIkNQVSAldTogTm8gQy1zdGF0ZXMgYXZhaWxhYmxlXG4iKSwgY3B1KTsKKwkJICoJcmV0dXJuOworCQkgKi8KKwl9CisJZWxzZSBpZiAoY3N0YXRlcyA8PSAwKSB7CisJCXByaW50ZihfKCJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iKSwgY3B1KTsKKwkJcmV0dXJuOworCX0KKwkvKiBwcmludGYoIkNzdGF0ZXM6ICVkXG4iLCBjc3RhdGVzKTsgKi8KKworCXByaW50ZihfKCJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQzBcbiIpKTsKKwlwcmludGYoXygibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMldVxuIiksIGNzdGF0ZXMtMSk7CisJcHJpbnRmKF8oIm1heGltdW0gYWxsb3dlZCBsYXRlbmN5OiAlbHUgdXNlY1xuIiksIG1heF9hbGxvd2VkX2NzdGF0ZSk7CisJcHJpbnRmKF8oInN0YXRlczpcdFxuIikpOworCWZvciAoY3N0YXRlID0gMTsgY3N0YXRlIDwgY3N0YXRlczsgY3N0YXRlKyspIHsKKwkJcHJpbnRmKF8oIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgIgorCQkJICJ0eXBlW0MlZF0gIiksIGNzdGF0ZSwgY3N0YXRlKTsKKwkJcHJpbnRmKF8oInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIpKTsKKwkJcHJpbnRmKF8oImxhdGVuY3lbJTAzbHVdICIpLAorCQkgICAgICAgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9sYXRlbmN5KGNwdSwgY3N0YXRlKSk7CisJCXByaW50ZihfKCJ1c2FnZVslMDhsdV0gIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX3VzYWdlKGNwdSwgY3N0YXRlKSk7CisJCXByaW50ZihfKCJkdXJhdGlvblslMDIwTHVdIFxuIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX3RpbWUoY3B1LCBjc3RhdGUpKTsKKwl9Cit9CisKKy8qIC0tZnJlcSAvIC1mICovCisKK3ZvaWQgaWRsZV9pbmZvX2hlbHAodm9pZCkgeworCXByaW50ZihfICgiVXNhZ2U6IGNwdXBvd2VyIGlkbGVpbmZvIFtvcHRpb25zXVxuIikpOworCXByaW50ZihfICgiT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXyAoIiAgLXMsIC0tc2lsZW50ICAgICAgICAgT25seSBzaG93IGdlbmVyYWwgQy1zdGF0ZSBpbmZvcm1hdGlvblxuIikpOworCXByaW50ZihfICgiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jL2FjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIG9sZGVyIGtlcm5lbHNcbiIpKTsKKwlwcmludGYoXyAoIiAgLWgsIC0taGVscCAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIikpOworCisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBpbmZvX29wdHNbXSA9IHsKKwl7IC5uYW1lPSJzaWxlbnQiLAkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J3MnfSwKKwl7IC5uYW1lPSJwcm9jIiwJCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0nbyd9LAorCXsgLm5hbWU9ImhlbHAiLAkJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdoJ30sCisJeyB9LAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNwdWlkbGVfZXhpdChpbnQgZmFpbCkKK3sKKwlpZGxlX2luZm9faGVscCgpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworaW50IGNtZF9pZGxlX2luZm8oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OworCWludCByZXQgPSAwLCBjb250ID0gMSwgb3V0cHV0X3BhcmFtID0gMCwgdmVyYm9zZSA9IDE7CisJdW5zaWduZWQgaW50IGNwdSA9IDA7CisKKwlkbyB7CisJCXJldCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJob3MiLCBpbmZvX29wdHMsIE5VTEwpOworCQlpZiAocmV0ID09IC0xKQorCQkJYnJlYWs7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgJz8nOgorCQkJb3V0cHV0X3BhcmFtID0gJz8nOworCQkJY29udCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCQlvdXRwdXRfcGFyYW0gPSAnaCc7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXZlcmJvc2UgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdvJzoKKwkJCWlmIChvdXRwdXRfcGFyYW0pIHsKKwkJCQlvdXRwdXRfcGFyYW0gPSAtMTsKKwkJCQljb250ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW91dHB1dF9wYXJhbSA9IHJldDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZShjb250KTsKKworCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisJY2FzZSAtMToKKwkJcHJpbnRmKF8oIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgIgorCQkJICJvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIpKTsKKwkJY3B1aWRsZV9leGl0KEVYSVRfRkFJTFVSRSk7CisJY2FzZSAnPyc6CisJCXByaW50ZihfKCJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpKTsKKwkJY3B1aWRsZV9leGl0KEVYSVRfRkFJTFVSRSk7CisJY2FzZSAnaCc6CisJCWNwdWlkbGVfZXhpdChFWElUX1NVQ0NFU1MpOworCX0KKworCS8qIERlZmF1bHQgaXM6IHNob3cgb3V0cHV0IG9mIENQVSAwIG9ubHkgKi8KKwlpZiAoYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkKKwkJYml0bWFza19zZXRiaXQoY3B1c19jaG9zZW4sIDApOworCQkKKwlpZiAob3V0cHV0X3BhcmFtID09IDApCisJCWNwdWlkbGVfZ2VuZXJhbF9vdXRwdXQoKTsKKwkJCQorCWZvciAoY3B1ID0gYml0bWFza19maXJzdChjcHVzX2Nob3Nlbik7CisJICAgICBjcHUgPD0gYml0bWFza19sYXN0KGNwdXNfY2hvc2VuKTsgY3B1KyspIHsKKworCQlpZiAoIWJpdG1hc2tfaXNiaXRzZXQoY3B1c19jaG9zZW4sIGNwdSkgfHwKKwkJICAgIGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChvdXRwdXRfcGFyYW0pIHsKKworCQljYXNlICdvJzoKKwkJCXByb2NfY3B1aWRsZV9jcHVfb3V0cHV0KGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJcHJpbnRmKCJcbiIpOworCQkJY3B1aWRsZV9jcHVfb3V0cHV0KGNwdSwgdmVyYm9zZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gKEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1pbmZvLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkZDA0YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLWluZm8uYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqICAoQykgMjAxMSBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgPGNwdWZyZXEuaD4KKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL3N5c2ZzLmgiCisKK3ZvaWQgaW5mb19oZWxwKHZvaWQpCit7CisJcHJpbnRmKF8oIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iKSk7CisJcHJpbnRmKF8oIk9wdGlvbnM6XG4iKSk7CisJcHJpbnRmKF8oIiAgLWIsIC0tcGVyZi1iaWFzICAgIEdldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iKSk7CisJcHJpbnRmKF8oIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIpKTsKKwlwcmludGYoXygiICAtcywgLS1zY2hlZC1zbXQgICAgR2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHBvbGljeS5cbiIpKTsKKwlwcmludGYoXygiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIikpOworCXByaW50ZihfKCJcblBhc3Npbmcgbm8gb3B0aW9uIHdpbGwgc2hvdyBhbGwgaW5mbywgYnkgZGVmYXVsdCBvbmx5IG9uIGNvcmUgMFxuIikpOworCXByaW50ZigiXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gc2V0X29wdHNbXSA9IHsKKwl7IC5uYW1lPSJwZXJmLWJpYXMiLAkuaGFzX2FyZz1vcHRpb25hbF9hcmd1bWVudCwJLmZsYWc9TlVMTCwJLnZhbD0nYid9LAorCXsgLm5hbWU9InNjaGVkLW1jIiwJLmhhc19hcmc9b3B0aW9uYWxfYXJndW1lbnQsCS5mbGFnPU5VTEwsCS52YWw9J20nfSwKKwl7IC5uYW1lPSJzY2hlZC1zbXQiLAkuaGFzX2FyZz1vcHRpb25hbF9hcmd1bWVudCwJLmZsYWc9TlVMTCwJLnZhbD0ncyd9LAorCXsgLm5hbWU9ImhlbHAiLAkJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdoJ30sCisJeyB9LAorfTsKKworc3RhdGljIHZvaWQgcHJpbnRfd3JvbmdfYXJnX2V4aXQodm9pZCkKK3sKKwlwcmludGYoXygiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iKSk7CisJaW5mb19oZWxwKCk7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitpbnQgY21kX2luZm8oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OworCXVuc2lnbmVkIGludCBjcHU7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlpbnQgc2NoZWRfbWM6MTsKKwkJCWludCBzY2hlZF9zbXQ6MTsKKwkJCWludCBwZXJmX2JpYXM6MTsKKwkJfTsKKwkJaW50IHBhcmFtczsKKwkJCQorCX0gcGFyYW1zID0ge307CisJaW50IHJldCA9IDA7CisKKwlzZXRsb2NhbGUoTENfQUxMLCAiIik7CisJdGV4dGRvbWFpbiAoUEFDS0FHRSk7CisKKwkvKiBwYXJhbWV0ZXIgcGFyc2luZyAqLworCXdoaWxlICgocmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIm1zYmgiLCBzZXRfb3B0cywgTlVMTCkpICE9IC0xKSB7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgJ2gnOgorCQkJaW5mb19oZWxwKCk7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAnYic6CisJCQlpZiAocGFyYW1zLnBlcmZfYmlhcykKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJcGFyYW1zLnBlcmZfYmlhcyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAocGFyYW1zLnNjaGVkX21jKQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlwYXJhbXMuc2NoZWRfbWMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKHBhcmFtcy5zY2hlZF9zbXQpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXBhcmFtcy5zY2hlZF9zbXQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQl9CisJfTsKKworCWlmICghcGFyYW1zLnBhcmFtcykKKwkJcGFyYW1zLnBhcmFtcyA9IDB4NzsKKworCS8qIERlZmF1bHQgaXM6IHNob3cgb3V0cHV0IG9mIENQVSAwIG9ubHkgKi8KKwlpZiAoYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkKKwkJYml0bWFza19zZXRiaXQoY3B1c19jaG9zZW4sIDApOworCisJaWYgKHBhcmFtcy5zY2hlZF9tYykgeworCQlyZXQgPSBzeXNmc19nZXRfc2NoZWQoIm1jIik7CisJCXByaW50ZihfKCJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiKSk7CisJCWlmIChyZXQgPCAwKQorCQkJLyogaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVCAqLworCQkJcHJpbnRmKF8oIm5vdCBzdXBwb3J0ZWRcbiIpKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlZFxuIiwgcmV0KTsKKwl9CQkJCisJaWYgKHBhcmFtcy5zY2hlZF9zbXQpIHsKKwkJcmV0ID0gc3lzZnNfZ2V0X3NjaGVkKCJzbXQiKTsKKwkJcHJpbnRmKF8oIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiKSk7CisJCWlmIChyZXQgPCAwKQorCQkJLyogaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVCAqLworCQkJcHJpbnRmKF8oIm5vdCBzdXBwb3J0ZWRcbiIpKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlZFxuIiwgcmV0KTsKKwl9CisKKwkvKiBBZGQgbW9yZSBwZXIgY3B1IG9wdGlvbnMgaGVyZSAqLworCWlmICghcGFyYW1zLnBlcmZfYmlhcykKKwkJcmV0dXJuIHJldDsKKworCWlmIChwYXJhbXMucGVyZl9iaWFzKSB7CisJCWlmICghcnVuX2FzX3Jvb3QpIHsKKwkJCXBhcmFtcy5wZXJmX2JpYXMgPSAwOworCQkJcHJpbnRmIChfKCJJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIpKTsKKwkJfSBlbHNlIGlmICghKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfUEVSRl9CSUFTKSkgeworCQkJcHJpbnRmKF8oIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsJ3MgcGVyZm9ybWFuY2UiCisJCQkJICIgYmlhcyBzZXR0aW5nXG4iKSk7CisJCQlwYXJhbXMucGVyZl9iaWFzID0gMDsKKwkJfQorCX0KKworCS8qIGxvb3Agb3ZlciBDUFVzICovCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCQkKKwkJaWYgKCFiaXRtYXNrX2lzYml0c2V0KGNwdXNfY2hvc2VuLCBjcHUpIHx8CisJCSAgICBjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSkKKwkJCWNvbnRpbnVlOworCisJCXByaW50ZihfKCJhbmFseXppbmcgQ1BVICVkOlxuIiksIGNwdSk7CisKKwkJaWYgKHBhcmFtcy5wZXJmX2JpYXMpIHsKKwkJCXJldCA9IG1zcl9pbnRlbF9nZXRfcGVyZl9iaWFzKGNwdSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXByaW50ZihfKCJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCXByaW50ZihfKCJwZXJmLWJpYXM6ICVkXG4iKSwgcmV0KTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXItc2V0LmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjgwN2JjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXItc2V0LmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiAgKEMpIDIwMTEgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisKKyNpbmNsdWRlIDxjcHVmcmVxLmg+CisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisjaW5jbHVkZSAiaGVscGVycy9zeXNmcy5oIgorI2luY2x1ZGUgImhlbHBlcnMvYml0bWFzay5oIgorCit2b2lkIHNldF9oZWxwKHZvaWQpCit7CisJcHJpbnRmKF8oIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIpKTsKKwlwcmludGYoXygiT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXygiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIpKTsKKwlwcmludGYoXygiICAtbSwgLS1zY2hlZC1tYyAgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIikpOworCXByaW50ZihfKCIgIC1zLCAtLXNjaGVkLXNtdCBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIikpOworCXByaW50ZihfKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iKSk7CisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBzZXRfb3B0c1tdID0geworCXsgLm5hbWU9InBlcmYtYmlhcyIsCS5oYXNfYXJnPW9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdiJ30sCisJeyAubmFtZT0ic2NoZWQtbWMiLAkuaGFzX2FyZz1vcHRpb25hbF9hcmd1bWVudCwJLmZsYWc9TlVMTCwJLnZhbD0nbSd9LAorCXsgLm5hbWU9InNjaGVkLXNtdCIsCS5oYXNfYXJnPW9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdzJ30sCisJeyAubmFtZT0iaGVscCIsCQkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J2gnfSwKKwl7IH0sCit9OworCitzdGF0aWMgdm9pZCBwcmludF93cm9uZ19hcmdfZXhpdCh2b2lkKQoreworCXByaW50ZihfKCJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpKTsKKwlzZXRfaGVscCgpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworaW50IGNtZF9zZXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OworCXVuc2lnbmVkIGludCBjcHU7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlpbnQgc2NoZWRfbWM6MTsKKwkJCWludCBzY2hlZF9zbXQ6MTsKKwkJCWludCBwZXJmX2JpYXM6MTsKKwkJfTsKKwkJaW50IHBhcmFtczsKKwkJCQorCX0gcGFyYW1zOworCWludCBzY2hlZF9tYyA9IDAsIHNjaGVkX3NtdCA9IDAsIHBlcmZfYmlhcyA9IDA7CisJaW50IHJldCA9IDA7CisKKwlzZXRsb2NhbGUoTENfQUxMLCAiIik7CisJdGV4dGRvbWFpbiAoUEFDS0FHRSk7CisKKwlwYXJhbXMucGFyYW1zID0gMDsKKwkvKiBwYXJhbWV0ZXIgcGFyc2luZyAqLworCXdoaWxlICgocmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIm06czpiOmgiLCBzZXRfb3B0cywgTlVMTCkpICE9IC0xKSB7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgJ2gnOgorCQkJc2V0X2hlbHAoKTsKKwkJCXJldHVybiAwOworCQljYXNlICdiJzoKKwkJCWlmIChwYXJhbXMucGVyZl9iaWFzKQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlwZXJmX2JpYXMgPSBhdG9pKG9wdGFyZyk7CisJCQlpZiAocGVyZl9iaWFzIDwgMCB8fCBwZXJmX2JpYXMgPiAxNSkgeworCQkJCXByaW50ZihfKCItLXBlcmYtYmlhcyBwYXJhbSBvdXQgIgorCQkJCQkgIm9mIHJhbmdlIFswLSVkXVxuIiksIDE1KTsKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJfQorCQkJcGFyYW1zLnBlcmZfYmlhcyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAocGFyYW1zLnNjaGVkX21jKQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlzY2hlZF9tYyA9IGF0b2kob3B0YXJnKTsKKwkJCWlmIChzY2hlZF9tYyA8IDAgfHwgc2NoZWRfbWMgPiAyKSB7CisJCQkJcHJpbnRmKF8oIi0tc2NoZWQtbWMgcGFyYW0gb3V0ICIKKwkJCQkJICJvZiByYW5nZSBbMC0lZF1cbiIpLCAyKTsKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJfQorCQkJcGFyYW1zLnNjaGVkX21jID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCWlmIChwYXJhbXMuc2NoZWRfc210KQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlzY2hlZF9zbXQgPSBhdG9pKG9wdGFyZyk7CisJCQlpZiAoc2NoZWRfc210IDwgMCB8fCBzY2hlZF9zbXQgPiAyKSB7CisJCQkJcHJpbnRmKF8oIi0tc2NoZWQtc210IHBhcmFtIG91dCAiCisJCQkJCSAib2YgcmFuZ2UgWzAtJWRdXG4iKSwgMik7CisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCX0KKwkJCXBhcmFtcy5zY2hlZF9zbXQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQl9CisJfTsKKworCWlmICghcGFyYW1zLnBhcmFtcykgeworCQlzZXRfaGVscCgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGFyYW1zLnNjaGVkX21jKSB7CisJCXJldCA9IHN5c2ZzX3NldF9zY2hlZCgibWMiLCBzY2hlZF9tYyk7CisJCWlmIChyZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiRXJyb3Igc2V0dGluZyBzY2hlZC1tYyAlc1xuIiksCisJCQkJKHJldCA9PSAtRU5PREVWKSA/ICJub3Qgc3VwcG9ydGVkIiA6ICIiKTsKKwl9CisJaWYgKHBhcmFtcy5zY2hlZF9zbXQpIHsKKwkJcmV0ID0gc3lzZnNfc2V0X3NjaGVkKCJzbXQiLCBzY2hlZF9zbXQpOworCQlpZiAocmV0KQorCQkJZnByaW50ZihzdGRlcnIsIF8oIkVycm9yIHNldHRpbmcgc2NoZWQtc210ICVzXG4iKSwKKwkJCQkocmV0ID09IC1FTk9ERVYpID8gIm5vdCBzdXBwb3J0ZWQiIDogIiIpOworCX0KKworCS8qIERlZmF1bHQgaXM6IHNldCBhbGwgQ1BVcyAqLworCWlmIChiaXRtYXNrX2lzYWxsY2xlYXIoY3B1c19jaG9zZW4pKQorCQliaXRtYXNrX3NldGFsbChjcHVzX2Nob3Nlbik7CisKKwkvKiBsb29wIG92ZXIgQ1BVcyAqLworCWZvciAoY3B1ID0gYml0bWFza19maXJzdChjcHVzX2Nob3Nlbik7CisJICAgICBjcHUgPD0gYml0bWFza19sYXN0KGNwdXNfY2hvc2VuKTsgY3B1KyspIHsKKwkJCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkgICAgY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCQljb250aW51ZTsKKworCQlpZiAocGFyYW1zLnBlcmZfYmlhcykgeworCQkJcmV0ID0gbXNyX2ludGVsX3NldF9wZXJmX2JpYXMoY3B1LCBwZXJmX2JpYXMpOworCQkJaWYgKHJldCkgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyAiCisJCQkJCQkgICJ2YWx1ZSBvbiBDUFUgJWRcbiIpLCBjcHUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDQ4ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXIuYwpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIElkZWFzIHRha2VuIG92ZXIgZnJvbSB0aGUgcGVyZiB1c2Vyc3BhY2UgdG9vbCAoaW5jbHVkZWQgaW4gdGhlIExpbnVzCisgKiAga2VybmVsIGdpdCByZXBvKTogc3ViY29tbWFuZCBidWlsdGlucyBhbmQgcGFyYW0gcGFyc2luZy4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2JpdG1hc2suaCIKKworc3RydWN0IGNtZF9zdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmNtZDsKKwlpbnQgKCptYWluKShpbnQsIGNvbnN0IGNoYXIgKiopOworCXZvaWQgKCp1c2FnZSkodm9pZCk7CisJaW50IG5lZWRzX3Jvb3Q7Cit9OworCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KS9zaXplb2YoeFswXSkpCisKK2ludCBjbWRfaGVscChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworCisvKiBHbG9iYWwgY3B1X2luZm8gb2JqZWN0IGF2YWlsYWJsZSBmb3IgYWxsIGJpbmFyaWVzCisgKiBJbmZvIG9ubHkgcmV0cmlldmVkIGZyb20gQ1BVIDAKKyAqCisgKiBWYWx1ZXMgd2lsbCBiZSB6ZXJvL3Vua25vd24gb24gbm9uIFg4NiBhcmNocworICovCitzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gY3B1cG93ZXJfY3B1X2luZm87CitpbnQgcnVuX2FzX3Jvb3Q7CisvKiBBZmZlY3RlZCBjcHVzIGNob3NlbiBieSAtYy8tLWNwdSBwYXJhbSAqLworc3RydWN0IGJpdG1hc2sgKmNwdXNfY2hvc2VuOworCisjaWZkZWYgREVCVUcKK2ludCBiZV92ZXJib3NlOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHByaW50X2hlbHAodm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCBjb21tYW5kc1tdID0geworCXsgImZyZXF1ZW5jeS1pbmZvIiwJY21kX2ZyZXFfaW5mbywJZnJlcV9pbmZvX2hlbHAsCTAJfSwKKwl7ICJmcmVxdWVuY3ktc2V0IiwJY21kX2ZyZXFfc2V0LAlmcmVxX3NldF9oZWxwLAkxCX0sCisJeyAiaWRsZS1pbmZvIiwJCWNtZF9pZGxlX2luZm8sCWlkbGVfaW5mb19oZWxwLAkwCX0sCisJeyAic2V0IiwJCWNtZF9zZXQsCXNldF9oZWxwLAkxCX0sCisJeyAiaW5mbyIsCQljbWRfaW5mbywJaW5mb19oZWxwLAkwCX0sCisJeyAibW9uaXRvciIsCQljbWRfbW9uaXRvciwJbW9uaXRvcl9oZWxwLAkwCX0sCisJeyAiaGVscCIsCQljbWRfaGVscCwJcHJpbnRfaGVscCwJCTAJfSwKKwkvLwl7ICJiZW5jaCIsCWNtZF9iZW5jaCwJTlVMTCwJCTEJfSwKK307CisKK2ludCBjbWRfaGVscChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoYXJnYyA+IDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZHMpOyBpKyspIHsKKwkJCXN0cnVjdCBjbWRfc3RydWN0ICpwID0gY29tbWFuZHMgKyBpOworCQkJaWYgKHN0cmNtcChwLT5jbWQsIGFyZ3ZbMV0pKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHAtPnVzYWdlKSB7CisJCQkJcC0+dXNhZ2UoKTsKKwkJCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCQkJfQorCQl9CisJfQorCXByaW50X2hlbHAoKTsKKwlpZiAoYXJnYyA9PSAxKQorCQlyZXR1cm4gRVhJVF9TVUNDRVNTOyAvKiBjcHVwb3dlciBoZWxwICovCisJcmV0dXJuIEVYSVRfRkFJTFVSRTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfaGVscCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisjaWZkZWYgREVCVUcKKwlwcmludGYoXygiY3B1cG93ZXIgWyAtZCBdWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIpKTsKKwlwcmludGYoXygiICAtZCwgLS1kZWJ1ZyAgICAgIE1heSBpbmNyZWFzZSBvdXRwdXQgKHN0ZGVycikgb24gc29tZSBzdWJjb21tYW5kc1xuIikpOworI2Vsc2UKKwlwcmludGYoXygiY3B1cG93ZXIgWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIpKTsKKyNlbmRpZgorCXByaW50ZihfKCJjcHVwb3dlciAtLXZlcnNpb25cbiIpKTsKKwlwcmludGYoXygiU3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFyZTpcbiIpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tYW5kcyk7IGkrKykKKwkJcHJpbnRmKCJcdCVzXG4iLCBjb21tYW5kc1tpXS5jbWQpOworCXByaW50ZihfKCJcblNvbWUgc3ViY29tbWFuZHMgY2FuIG1ha2UgdXNlIG9mIHRoZSAtYyBjcHVsaXN0IG9wdGlvbi5cbiIpKTsKKwlwcmludGYoXygiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIpKTsKKwlwcmludGYoXygiYW5kIHJlYWQgdXAgdGhlIHN1YmNvbW1hbmQncyBtYW5wYWdlIHdoZXRoZXIgaXQgaXMgc3VwcG9ydGVkLlxuIikpOworCXByaW50ZihfKCJcblVzZSBjcHVwb3dlciBoZWxwIHN1YmNvbW1hbmQgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgc3ViY29tbWFuZHMuXG4iKSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3ZlcnNpb24odm9pZCkgeworICAgICAgICBwcmludGYoUEFDS0FHRSAiICIgVkVSU0lPTiAiXG4iKTsKKwlwcmludGYoXygiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX29wdGlvbnMoaW50ICphcmdjLCBjb25zdCBjaGFyICoqKmFyZ3YpCit7CisJaW50IHJldCwgeCwgbmV3X2FyZ2MgPSAwOworCisJaWYgKCphcmdjIDwgMSkKKwkJcmV0dXJuOworCisJZm9yICh4ID0gMDsgIHggPCAqYXJnYyAmJiAoKCphcmd2KVt4XSlbMF0gPT0gJy0nOyB4KyspIHsKKwkJY29uc3QgY2hhciAqcGFyYW0gPSAoKmFyZ3YpW3hdOworCQlpZiAoIXN0cmNtcChwYXJhbSwgIi1oIikgfHwgIXN0cmNtcChwYXJhbSwgIi0taGVscCIpKXsKKwkJCXByaW50X2hlbHAoKTsKKwkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLCAiLWMiKSB8fCAhc3RyY21wKHBhcmFtLCAiLS1jcHUiKSl7CisJCQlpZiAoKmFyZ2MgPCAyKSB7CisJCQkJcHJpbnRfaGVscCgpOworCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCX0KKwkJCWlmICghc3RyY21wKCgqYXJndilbeCsxXSwgImFsbCIpKQorCQkJCWJpdG1hc2tfc2V0YWxsKGNwdXNfY2hvc2VuKTsKKwkJCWVsc2UgeworCQkJCXJldCA9IGJpdG1hc2tfcGFyc2VsaXN0KAorCQkJCQkJKCphcmd2KVt4KzFdLCBjcHVzX2Nob3Nlbik7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIkVycm9yIHBhcnNpbmcgY3B1ICIKKwkJCQkJCQkgICJsaXN0XG4iKSk7CisJCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCQl9CisJCQl9CisJCQl4ICs9IDE7CisJCQkvKiBDdXQgb3V0IHBhcmFtOiBjcHVwb3dlciAtYyAxIGluZm8gLT4gY3B1cG93ZXIgaW5mbyAqLworCQkJbmV3X2FyZ2MgKz0gMjsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCFzdHJjbXAocGFyYW0sICItdiIpIHx8ICFzdHJjbXAocGFyYW0sICItLXZlcnNpb24iKSl7CisJCQlwcmludF92ZXJzaW9uKCk7CisJCQlleGl0KEVYSVRfU1VDQ0VTUyk7CisjaWZkZWYgREVCVUcKKwkJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLCAiLWQiKSB8fCAhc3RyY21wKHBhcmFtLCAiLS1kZWJ1ZyIpKXsKKwkJCWJlX3ZlcmJvc2UgPSAxOworCQkJbmV3X2FyZ2MgKys7CisJCQljb250aW51ZTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogJXNcbiIsIHBhcmFtKTsKKwkJCXByaW50X2hlbHAoKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKwkqYXJnYyAtPSBuZXdfYXJnYzsKKwkqYXJndiArPSBuZXdfYXJnYzsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICpjbWQ7CisJdW5zaWduZWQgaW50IGksIHJldDsKKworCWNwdXNfY2hvc2VuID0gYml0bWFza19hbGxvYyhzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19DT05GKSk7CisKKwlhcmdjLS07CisJYXJndiArPSAxOworCisJaGFuZGxlX29wdGlvbnMoJmFyZ2MsICZhcmd2KTsKKworCWNtZCA9IGFyZ3ZbMF07CisKKwlpZiAoYXJnYyA8IDEpIHsKKwkJcHJpbnRfaGVscCgpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKwl0ZXh0ZG9tYWluIChQQUNLQUdFKTsKKworCS8qIFR1cm4gInBlcmYgY21kIC0taGVscCIgaW50byAicGVyZiBoZWxwIGNtZCIgKi8KKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcChhcmd2WzFdLCAiLS1oZWxwIikpIHsKKwkJYXJndlsxXSA9IGFyZ3ZbMF07CisJCWFyZ3ZbMF0gPSBjbWQgPSAiaGVscCI7CisJfQorCisJZ2V0X2NwdV9pbmZvKDAsICZjcHVwb3dlcl9jcHVfaW5mbyk7CisJcnVuX2FzX3Jvb3QgPSAhZ2V0dWlkKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tYW5kcyk7IGkrKykgeworCQlzdHJ1Y3QgY21kX3N0cnVjdCAqcCA9IGNvbW1hbmRzICsgaTsKKwkJaWYgKHN0cmNtcChwLT5jbWQsIGNtZCkpCisJCQljb250aW51ZTsKKwkJaWYgKCFydW5fYXNfcm9vdCAmJiBwLT5uZWVkc19yb290KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiU3ViY29tbWFuZCAlcyBuZWVkcyByb290ICIKKwkJCQkJICAicHJpdmlsZWdlc1xuIiksIGNtZCk7CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJCXJldCA9IHAtPm1haW4oYXJnYywgYXJndik7CisJCWlmIChjcHVzX2Nob3NlbikKKwkJCWJpdG1hc2tfZnJlZShjcHVzX2Nob3Nlbik7CisJCXJldHVybiByZXQ7CisJfQorCXByaW50X2hlbHAoKTsKKwlyZXR1cm4gRVhJVF9GQUlMVVJFOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9hbWQuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYW1kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0NGUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2FtZC5jCkBAIC0wLDAgKzEsMTM3IEBACisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPHBjaS9wY2kuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorCisjZGVmaW5lIE1TUl9BTURfUFNUQVRFX1NUQVRVUwkweGMwMDEwMDYzCisjZGVmaW5lIE1TUl9BTURfUFNUQVRFCQkweGMwMDEwMDY0CisjZGVmaW5lIE1TUl9BTURfUFNUQVRFX0xJTUlUCTB4YzAwMTAwNjEKKwordW5pb24gbXNyX3BzdGF0ZSB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgZmlkOjY7CisJCXVuc2lnbmVkIGRpZDozOworCQl1bnNpZ25lZCB2aWQ6NzsKKwkJdW5zaWduZWQgcmVzMTo2OworCQl1bnNpZ25lZCBuYmRpZDoxOworCQl1bnNpZ25lZCByZXMyOjI7CisJCXVuc2lnbmVkIG5idmlkOjc7CisJCXVuc2lnbmVkIGlkZHZhbDo4OworCQl1bnNpZ25lZCBpZGRkaXY6MjsKKwkJdW5zaWduZWQgcmVzMzoyMTsKKwkJdW5zaWduZWQgZW46MTsKKwl9IGJpdHM7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X2RpZChpbnQgZmFtaWx5LCB1bmlvbiBtc3JfcHN0YXRlIHBzdGF0ZSkKK3sKKwlpbnQgdDsKKworCWlmIChmYW1pbHkgPT0gMHgxMikKKwkJdCA9IHBzdGF0ZS52YWwgJiAweGY7CisJZWxzZQorCQl0ID0gcHN0YXRlLmJpdHMuZGlkOworCisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NvZihpbnQgZmFtaWx5LCB1bmlvbiBtc3JfcHN0YXRlIHBzdGF0ZSkKK3sKKwlpbnQgdDsKKwlpbnQgZmlkLCBkaWQ7CisKKwlkaWQgPSBnZXRfZGlkKGZhbWlseSwgcHN0YXRlKTsKKworCXQgPSAweDEwOworCWZpZCA9IHBzdGF0ZS5iaXRzLmZpZDsKKwlpZiAoZmFtaWx5ID09IDB4MTEpCisJCXQgPSAweDg7CisKKwlyZXR1cm4gKCgxMDAgKiAoZmlkICsgdCkpID4+IGRpZCk7CisgfQorCisvKiBOZWVkczoKKyAqIGNwdSAgICAgICAgICAtPiB0aGUgY3B1IHRoYXQgZ2V0cyBldmFsdWF0ZWQKKyAqIGNwdV9mYW1pbHkgICAtPiBUaGUgY3B1J3MgZmFtaWx5ICgweDEwLCAweDEyLC4uLikKKyAqIGJvb3RzX3N0YXRlcyAtPiBob3cgbXVjaCBib29zdCBzdGF0ZXMgdGhlIG1hY2hpbmVzIHN1cHBvcnQKKyAqCisgKiBGaWxscyB1cDoKKyAqIHBzdGF0ZXMgLT4gYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHNpemUgTUFYX0hXX1BTVEFURVMKKyAqICAgICAgICAgICAgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIHplcm9zLgorICogICAgICAgICAgICBBbGwgYXZhaWxhYmxlICBIVyBwc3RhdGVzIChpbmNsdWRpbmcgYm9vc3Qgc3RhdGVzKQorICogbm8gICAgICAtPiBhbW91bnQgb2YgcHN0YXRlcyBhYm92ZSBhcnJheSBnb3QgZmlsbGVkIHVwIHdpdGgKKyAqCisgKiByZXR1cm5zIHplcm8gb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZQorICovCitpbnQgZGVjb2RlX3BzdGF0ZXModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGNwdV9mYW1pbHksCisJCSAgIGludCBib29zdF9zdGF0ZXMsIHVuc2lnbmVkIGxvbmcgKnBzdGF0ZXMsIGludCAqbm8pCit7CisJaW50IGksIHBzbWF4LCBwc2N1cjsKKwl1bmlvbiBtc3JfcHN0YXRlIHBzdGF0ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKworCS8qIE9ubHkgcmVhZCBvdXQgZnJlcXVlbmNpZXMgZnJvbSBIVyB3aGVuIENQVSBtaWdodCBiZSBib29zdGFibGUKKwkgICB0byBrZWVwIHRoZSBjb2RlIGFzIHNob3J0IGFuZCBjbGVhbiBhcyBwb3NzaWJsZS4KKwkgICBPdGhlcndpc2UgZnJlcXVlbmNpZXMgYXJlIGV4cG9ydGVkIHZpYSBBQ1BJIHRhYmxlcy4KKwkqLworCWlmIChjcHVfZmFtaWx5IDwgMHgxMCB8fCBjcHVfZmFtaWx5ID09IDB4MTQpCisJCXJldHVybiAtMTsKKworCWlmIChyZWFkX21zcihjcHUsIE1TUl9BTURfUFNUQVRFX0xJTUlULCAmdmFsKSkKKwkJcmV0dXJuIC0xOworCisJcHNtYXggPSAodmFsID4+IDQpICYgMHg3OworCisJaWYgKHJlYWRfbXNyKGNwdSwgTVNSX0FNRF9QU1RBVEVfU1RBVFVTLCAmdmFsKSkKKwkJcmV0dXJuIC0xOworCisJcHNjdXIgPSB2YWwgJiAweDc7CisKKwlwc2N1ciArPSBib29zdF9zdGF0ZXM7CisJcHNtYXggKz0gYm9vc3Rfc3RhdGVzOworCWZvciAoaT0wOyBpPD1wc21heDsgaSsrKSB7CisJCWlmIChpID49IE1BWF9IV19QU1RBVEVTKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkhXIHBzdGF0ZXMgWyVkXSBleGNlZWRpbmcgbWF4IFslZF1cbiIsCisJCQkJcHNtYXgsIE1BWF9IV19QU1RBVEVTKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAocmVhZF9tc3IoY3B1LCBNU1JfQU1EX1BTVEFURSArIGksICZwc3RhdGUudmFsKSkKKwkJCXJldHVybiAtMTsKKwkJcHN0YXRlc1tpXSA9IGdldF9jb2YoY3B1X2ZhbWlseSwgcHN0YXRlKTsKKwl9CisJKm5vID0gaTsKKwlyZXR1cm4gMDsKK30KKworaW50IGFtZF9wY2lfZ2V0X251bV9ib29zdF9zdGF0ZXMoaW50ICphY3RpdmUsIGludCAqc3RhdGVzKQoreworCXN0cnVjdCBwY2lfYWNjZXNzICpwY2lfYWNjOworCWludCB2ZW5kb3JfaWQgPSAweDEwMjI7CisJaW50IGJvb3N0X2Rldl9pZHNbNF0gPSB7MHgxMjA0LCAweDE2MDQsIDB4MTcwNCwgMH07CisJc3RydWN0IHBjaV9kZXYgKmRldmljZTsKKwl1aW50OF90IHZhbCA9IDA7CisKKwkqYWN0aXZlID0gKnN0YXRlcyA9IDA7CisKKwlkZXZpY2UgPSBwY2lfYWNjX2luaXQoJnBjaV9hY2MsIHZlbmRvcl9pZCwgYm9vc3RfZGV2X2lkcyk7CisKKwlpZiAoZGV2aWNlID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJdmFsID0gcGNpX3JlYWRfYnl0ZShkZXZpY2UsIDB4MTVjKTsKKwlpZiAodmFsICYgMykKKwkJKmFjdGl2ZSA9IDE7CisJZWxzZQorCQkqYWN0aXZlID0gMDsKKwkqc3RhdGVzID0gKHZhbCA+PiAyKSAmIDc7CisKKwlwY2lfY2xlYW51cChwY2lfYWNjKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2JpdG1hc2suYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZjRkNjkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2JpdG1hc2suYwpAQCAtMCwwICsxLDI5MCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxoZWxwZXJzL2JpdG1hc2suaD4KKworLyogSG93IG1hbnkgYml0cyBpbiBhbiB1bnNpZ25lZCBsb25nICovCisjZGVmaW5lIGJpdHNwZXJsb25nICg4ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCisvKiBob3dtYW55KGEsYikgOiBob3cgbWFueSBlbGVtZW50cyBvZiBzaXplIGIgbmVlZGVkIHRvIGhvbGQgYWxsIG9mIGEgKi8KKyNkZWZpbmUgaG93bWFueSh4LHkpICgoKHgpKygoeSktMSkpLyh5KSkKKworLyogSG93IG1hbnkgbG9uZ3MgaW4gbWFzayBvZiBuIGJpdHMgKi8KKyNkZWZpbmUgbG9uZ3NwZXJiaXRzKG4pIGhvd21hbnkobiwgYml0c3BlcmxvbmcpCisKKyNkZWZpbmUgbWF4KGEsYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmcmVlIGBzdHJ1Y3QgYml0bWFzayAqYAorICovCisKKy8qIEFsbG9jYXRlIGEgbmV3IGBzdHJ1Y3QgYml0bWFza2Agd2l0aCBhIHNpemUgb2YgbiBiaXRzICovCitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19hbGxvYyh1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3QgYml0bWFzayAqYm1wOworCisJYm1wID0gbWFsbG9jKHNpemVvZigqYm1wKSk7CisJaWYgKGJtcCA9PSAwKQorCQlyZXR1cm4gMDsKKwlibXAtPnNpemUgPSBuOworCWJtcC0+bWFza3AgPSBjYWxsb2MobG9uZ3NwZXJiaXRzKG4pLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWlmIChibXAtPm1hc2twID09IDApIHsKKwkJZnJlZShibXApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGJtcDsKK30KKworLyogRnJlZSBgc3RydWN0IGJpdG1hc2tgICovCit2b2lkIGJpdG1hc2tfZnJlZShzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCWlmIChibXAgPT0gMCkKKwkJcmV0dXJuOworCWZyZWUoYm1wLT5tYXNrcCk7CisJYm1wLT5tYXNrcCA9ICh1bnNpZ25lZCBsb25nICopMHhkZWFkY2RlZjsgIC8qIGRvdWJsZSBmcmVlIHRyaXB3aXJlICovCisJZnJlZShibXApOworfQorCisvKgorICogVGhlIHJvdXRpbmVzIF9nZXRiaXQoKSBhbmQgX3NldGJpdCgpIGFyZSB0aGUgb25seQorICogcm91dGluZXMgdGhhdCBhY3R1YWxseSB1bmRlcnN0YW5kIHRoZSBsYXlvdXQgb2YgYm1wLT5tYXNrcFtdLgorICoKKyAqIE9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlcywgdGhpcyBjb3VsZCBzaW1wbHkgYmUgYW4gYXJyYXkgb2YKKyAqIGJ5dGVzLiAgQnV0IHRoZSBrZXJuZWwgbGF5b3V0IG9mIGJpdG1hc2tzIF9pc18gdmlzaWJsZSB0byB1c2Vyc3BhY2UKKyAqIHZpYSB0aGUgc2NoZWRfKHNldC9nZXQpYWZmaW5pdHkgY2FsbHMgaW4gTGludXggMi42LCBhbmQgb24gYmlnCisgKiBlbmRpYW4gYXJjaGl0ZWN0dXJlcywgaXQgaXMgcGFpbmZ1bGx5IG9idmlvdXMgdGhhdCB0aGlzIGlzIGFuCisgKiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncy4KKyAqLworCisvKiBSZXR1cm4gdGhlIHZhbHVlICgwIG9yIDEpIG9mIGJpdCBuIGluIGJpdG1hc2sgYm1wICovCitzdGF0aWMgdW5zaWduZWQgaW50IF9nZXRiaXQoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IG4pCit7CisJaWYgKG4gPCBibXAtPnNpemUpCisJCXJldHVybiAoYm1wLT5tYXNrcFtuL2JpdHNwZXJsb25nXSA+PiAobiAlIGJpdHNwZXJsb25nKSkgJiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIFNldCBiaXQgbiBpbiBiaXRtYXNrIGJtcCB0byB2YWx1ZSB2ICgwIG9yIDEpICovCitzdGF0aWMgdm9pZCBfc2V0Yml0KHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgdikKK3sKKwlpZiAobiA8IGJtcC0+c2l6ZSkgeworCQlpZiAodikKKwkJCWJtcC0+bWFza3Bbbi9iaXRzcGVybG9uZ10gfD0gMVVMIDw8IChuICUgYml0c3BlcmxvbmcpOworCQllbHNlCisJCQlibXAtPm1hc2twW24vYml0c3BlcmxvbmddICY9IH4oMVVMIDw8IChuICUgYml0c3BlcmxvbmcpKTsKKwl9Cit9CisKKy8qCisgKiBXaGVuIHBhcnNpbmcgYml0bWFzayBsaXN0cywgb25seSBhbGxvdyBudW1iZXJzLCBzZXBhcmF0ZWQgYnkgb25lCisgKiBvZiB0aGUgYWxsb3dlZCBuZXh0IGNoYXJhY3RlcnMuCisgKgorICogVGhlIHBhcmFtZXRlciAnc3JldCcgaXMgdGhlIHJldHVybiBmcm9tIGEgc3NjYW5mICIldSVjIi4gIEl0IGlzCisgKiAtMSBpZiB0aGUgc3NjYW5mIGlucHV0IHN0cmluZyB3YXMgZW1wdHkuICBJdCBpcyAwIGlmIHRoZSBmaXJzdAorICogY2hhcmFjdGVyIGluIHRoZSBzc2NhbmYgaW5wdXQgc3RyaW5nIHdhcyBub3QgYSBkZWNpbWFsIG51bWJlci4KKyAqIEl0IGlzIDEgaWYgdGhlIHVuc2lnbmVkIG51bWJlciBtYXRjaGluZyB0aGUgIiV1IiB3YXMgdGhlIGVuZCBvZiB0aGUKKyAqIGlucHV0IHN0cmluZy4gIEl0IGlzIDIgaWYgb25lIG9yIG1vcmUgYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGZvbGxvd2VkCisgKiB0aGUgbWF0Y2hlZCB1bnNpZ25lZCBudW1iZXIuICBJZiBpdCBpcyAyLCB0aGVuICduZXh0YycgaXMgdGhlIGZpcnN0CisgKiBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBudW1iZXIuICBUaGUgcGFyYW1ldGVyICdva19uZXh0X2NoYXJzJworICogaXMgdGhlIG51bC10ZXJtaW5hdGVkIGxpc3Qgb2YgYWxsb3dlZCBuZXh0IGNoYXJhY3RlcnMuCisgKgorICogVGhlIG1hc2sgdGVybSBqdXN0IHNjYW5uZWQgd2FzIG9rIGlmIGFuZCBvbmx5IGlmIGVpdGhlciB0aGUgbnVtYmVycworICogbWF0Y2hpbmcgdGhlICV1IHdlcmUgYWxsIG9mIHRoZSBpbnB1dCBvciBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4KKyAqIHRoZSBpbnB1dCBwYXN0IHRoZSBudW1iZXJzIHdhcyBvbmUgb2YgdGhlIGFsbG93ZWQgbmV4dCBjaGFyYWN0ZXJzLgorICovCitzdGF0aWMgaW50IHNjYW5fd2FzX29rKGludCBzcmV0LCBjaGFyIG5leHRjLCBjb25zdCBjaGFyICpva19uZXh0X2NoYXJzKQoreworCXJldHVybiBzcmV0ID09IDEgfHwKKwkJKHNyZXQgPT0gMiAmJiBzdHJjaHIob2tfbmV4dF9jaGFycywgbmV4dGMpICE9IE5VTEwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbmV4dHRva2VuKGNvbnN0IGNoYXIgKnEsICBpbnQgc2VwKQoreworCWlmIChxKQorCQlxID0gc3RyY2hyKHEsIHNlcCk7CisJaWYgKHEpCisJCXErKzsKKwlyZXR1cm4gcTsKK30KKworLyogU2V0IGEgc2luZ2xlIGJpdCBpIGluIGJpdG1hc2sgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX3NldGJpdChzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlfc2V0Yml0KGJtcCwgaSwgMSk7CisJcmV0dXJuIGJtcDsKK30KKworLyogU2V0IGFsbCBiaXRzIGluIGJpdG1hc2s6IGJtcCA9IH4wICovCitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19zZXRhbGwoc3RydWN0IGJpdG1hc2sgKmJtcCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYm1wLT5zaXplOyBpKyspCisJCV9zZXRiaXQoYm1wLCBpLCAxKTsKKwlyZXR1cm4gYm1wOworfQorCisvKiBDbGVhciBhbGwgYml0cyBpbiBiaXRtYXNrOiBibXAgPSAwICovCitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19jbGVhcmFsbChzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBibXAtPnNpemU7IGkrKykKKwkJX3NldGJpdChibXAsIGksIDApOworCXJldHVybiBibXA7Cit9CisKKy8qIFRydWUgaWYgYWxsIGJpdHMgYXJlIGNsZWFyICovCitpbnQgYml0bWFza19pc2FsbGNsZWFyKGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGJtcC0+c2l6ZTsgaSsrKQorCQlpZiAoX2dldGJpdChibXAsIGkpKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qIFRydWUgaWYgc3BlY2lmaWVkIGJpdCBpIGlzIHNldCAqLworaW50IGJpdG1hc2tfaXNiaXRzZXQoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IGkpCit7CisJcmV0dXJuIF9nZXRiaXQoYm1wLCBpKTsKK30KKworLyogTnVtYmVyIG9mIGxvd2VzdCBzZXQgYml0IChtaW4pICovCit1bnNpZ25lZCBpbnQgYml0bWFza19maXJzdChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCXJldHVybiBiaXRtYXNrX25leHQoYm1wLCAwKTsKK30KKworLyogTnVtYmVyIG9mIGhpZ2hlc3Qgc2V0IGJpdCAobWF4KSAqLwordW5zaWduZWQgaW50IGJpdG1hc2tfbGFzdChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBtID0gYm1wLT5zaXplOworCWZvciAoaSA9IDA7IGkgPCBibXAtPnNpemU7IGkrKykKKwkJaWYgKF9nZXRiaXQoYm1wLCBpKSkKKwkJCW0gPSBpOworCXJldHVybiBtOworfQorCisvKiBOdW1iZXIgb2YgbmV4dCBzZXQgYml0IGF0IG9yIGFib3ZlIGdpdmVuIGJpdCBpICovCit1bnNpZ25lZCBpbnQgYml0bWFza19uZXh0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBpKQoreworCXVuc2lnbmVkIGludCBuOworCWZvciAobiA9IGk7IG4gPCBibXAtPnNpemU7IG4rKykKKwkJaWYgKF9nZXRiaXQoYm1wLCBuKSkKKwkJCWJyZWFrOworCXJldHVybiBuOworfQorCisvKgorICogUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbnVtYmVycyBhbmQgcmFuZ2VzIG9mIG51bWJlcnMsCisgKiB3aXRoIG9wdGlvbmFsICc6JXUnIHN0cmlkZXMgbW9kaWZ5aW5nIHJhbmdlcywgaW50byBwcm92aWRlZCBiaXRtYXNrLgorICogU29tZSBleGFtcGxlcyBvZiBpbnB1dCBsaXN0cyBhbmQgdGhlaXIgZXF1aXZhbGVudCBzaW1wbGUgbGlzdDoKKyAqCUlucHV0CQlFcXVpdmFsZW50IHRvCisgKgkwLTMJCTAsMSwyLDMKKyAqCTAtNzoyCQkwLDIsNCw2CisgKgkxLDMsNS03CQkxLDMsNSw2LDcKKyAqCTAtMzoyLDgtMTU6NAkwLDIsOCwxMgkKKyAqLworaW50IGJpdG1hc2tfcGFyc2VsaXN0KGNvbnN0IGNoYXIgKmJ1Ziwgc3RydWN0IGJpdG1hc2sgKmJtcCkKK3sKKwljb25zdCBjaGFyICpwLCAqcTsKKworCWJpdG1hc2tfY2xlYXJhbGwoYm1wKTsKKworCXEgPSBidWY7CisJd2hpbGUgKHAgPSBxLCBxID0gbmV4dHRva2VuKHEsICcsJyksIHApIHsKKwkJdW5zaWduZWQgaW50IGE7CQkvKiBiZWdpbiBvZiByYW5nZSAqLworCQl1bnNpZ25lZCBpbnQgYjsJCS8qIGVuZCBvZiByYW5nZSAqLworCQl1bnNpZ25lZCBpbnQgczsJCS8qIHN0cmlkZSAqLworCQljb25zdCBjaGFyICpjMSwgKmMyOwkvKiBuZXh0IHRva2VucyBhZnRlciAnLScgb3IgJywnICovCisJCWNoYXIgbmV4dGM7CQkvKiBjaGFyIGFmdGVyIHNzY2FuZiAldSBtYXRjaCAqLworCQlpbnQgc3JldDsJCS8qIHNzY2FuZiByZXR1cm4gKG51bWJlciBvZiBtYXRjaGVzKSAqLworCisJCXNyZXQgPSBzc2NhbmYocCwgIiV1JWMiLCAmYSwgJm5leHRjKTsKKwkJaWYgKCFzY2FuX3dhc19vayhzcmV0LCBuZXh0YywgIiwtIikpCisJCQlnb3RvIGVycjsKKwkJYiA9IGE7CisJCXMgPSAxOworCQljMSA9IG5leHR0b2tlbihwLCAnLScpOworCQljMiA9IG5leHR0b2tlbihwLCAnLCcpOworCQlpZiAoYzEgIT0gTlVMTCAmJiAoYzIgPT0gTlVMTCB8fCBjMSA8IGMyKSkgeworCQkJc3JldCA9IHNzY2FuZihjMSwgIiV1JWMiLCAmYiwgJm5leHRjKTsKKwkJCWlmICghc2Nhbl93YXNfb2soc3JldCwgbmV4dGMsICIsOiIpKQorCQkJCWdvdG8gZXJyOworCQkJYzEgPSBuZXh0dG9rZW4oYzEsICc6Jyk7CisJCQlpZiAoYzEgIT0gTlVMTCAmJiAoYzIgPT0gTlVMTCB8fCBjMSA8IGMyKSkgeworCQkJCXNyZXQgPSBzc2NhbmYoYzEsICIldSVjIiwgJnMsICZuZXh0Yyk7CisJCQkJaWYgKCFzY2FuX3dhc19vayhzcmV0LCBuZXh0YywgIiwiKSkKKwkJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKwkJaWYgKCEoYSA8PSBiKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoYiA+PSBibXAtPnNpemUpCisJCQlnb3RvIGVycjsKKwkJd2hpbGUgKGEgPD0gYikgeworCQkJX3NldGJpdChibXAsIGEsIDEpOworCQkJYSArPSBzOworCQl9CisJfQorCXJldHVybiAwOworZXJyOgorCWJpdG1hc2tfY2xlYXJhbGwoYm1wKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBlbWl0KGJ1ZiwgYnVmbGVuLCByYm90LCBydG9wLCBsZW4pCisgKgorICogSGVscGVyIHJvdXRpbmUgZm9yIGJpdG1hc2tfZGlzcGxheWxpc3QoKS4gIFdyaXRlIGRlY2ltYWwgbnVtYmVyCisgKiBvciByYW5nZSB0byBidWYrbGVuLCBzdXBwcmVzc2luZyBvdXRwdXQgcGFzdCBidWYrYnVmbGVuLCB3aXRoIG9wdGlvbmFsCisgKiBjb21tYS1wcmVmaXguICBSZXR1cm4gbGVuIG9mIHdoYXQgd291bGQgYmUgd3JpdHRlbiB0byBidWYsIGlmIGl0CisgKiBhbGwgZml0LgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGVtaXQoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBpbnQgcmJvdCwgaW50IHJ0b3AsIGludCBsZW4pCit7CisJaWYgKGxlbiA+IDApCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIG1heChidWZsZW4gLSBsZW4sIDApLCAiLCIpOworCWlmIChyYm90ID09IHJ0b3ApCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIG1heChidWZsZW4gLSBsZW4sIDApLCAiJWQiLCByYm90KTsKKwllbHNlCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIG1heChidWZsZW4gLSBsZW4sIDApLCAiJWQtJWQiLCByYm90LCBydG9wKTsKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogV3JpdGUgZGVjaW1hbCBsaXN0IHJlcHJlc2VudGF0aW9uIG9mIGJtcCB0byBidWYuCisgKgorICogT3V0cHV0IGZvcm1hdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRlY2ltYWwgbnVtYmVycyBhbmQKKyAqIHJhbmdlcy4gIENvbnNlY3V0aXZlbHkgc2V0IGJpdHMgYXJlIHNob3duIGFzIHR3byBoeXBoZW4tc2VwYXJhdGVkCisgKiBkZWNpbWFsIG51bWJlcnMsIHRoZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBiaXQgbnVtYmVycyBzZXQgaW4KKyAqIHRoZSByYW5nZS4gIE91dHB1dCBmb3JtYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmb3JtYXQKKyAqIGFjY2VwdGVkIGFzIGlucHV0IGJ5IGJpdG1hcF9wYXJzZWxpc3QoKS4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaCB3b3VsZCBiZQorICogZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gaW5wdXQsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgJ1wwJywgYXMKKyAqIHBlciBJU08gQzk5LgorICovCisKK2ludCBiaXRtYXNrX2Rpc3BsYXlsaXN0KGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCkKK3sKKwlpbnQgbGVuID0gMDsKKwkvKiBjdXJyZW50IGJpdCBpcyAnY3VyJywgbW9zdCByZWNlbnRseSBzZWVuIHJhbmdlIGlzIFtyYm90LCBydG9wXSAqLworCXVuc2lnbmVkIGludCBjdXIsIHJib3QsIHJ0b3A7CisKKwlpZiAoYnVmbGVuID4gMCkKKwkJKmJ1ZiA9IDA7CisJcmJvdCA9IGN1ciA9IGJpdG1hc2tfZmlyc3QoYm1wKTsKKwl3aGlsZSAoY3VyIDwgYm1wLT5zaXplKSB7CisJCXJ0b3AgPSBjdXI7CisJCWN1ciA9IGJpdG1hc2tfbmV4dChibXAsIGN1cisxKTsKKwkJaWYgKGN1ciA+PSBibXAtPnNpemUgfHwgY3VyID4gcnRvcCArIDEpIHsKKwkJCWxlbiA9IGVtaXQoYnVmLCBidWZsZW4sIHJib3QsIHJ0b3AsIGxlbik7CisJCQlyYm90ID0gY3VyOworCQl9CisJfQorCXJldHVybiBsZW47Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2JpdG1hc2suaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjg5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2JpdG1hc2suaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9fQ1BVUE9XRVJfQklUTUFTS19fCisjZGVmaW5lIF9fQ1BVUE9XRVJfQklUTUFTS19fCisKKy8qIFRha2VuIG92ZXIgZnJvbSBsaWJiaXRtYXNrLCBhIHByb2plY3QgaW5pdGlhdGVkIGZyb20gc2dpOgorICogVXJsOiAgICAgICAgICAgIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9jcHVzZXRzLworICogVW5mb3J0dW5hdGVseSBpdCdzIG5vdCB2ZXJ5IHdpZGVzcHJlYWQsIHRoZXJlZm9yZSByZWxldmFudCBwYXJ0cyBhcmUKKyAqIHBhc3RlZCBoZXJlLgorICovCisKK3N0cnVjdCBiaXRtYXNrIHsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1bnNpZ25lZCBsb25nICptYXNrcDsKK307CisKK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX2FsbG9jKHVuc2lnbmVkIGludCBuKTsKK3ZvaWQgYml0bWFza19mcmVlKHN0cnVjdCBiaXRtYXNrICpibXApOworCitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19zZXRiaXQoc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IGkpOworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfc2V0YWxsKHN0cnVjdCBiaXRtYXNrICpibXApOworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfY2xlYXJhbGwoc3RydWN0IGJpdG1hc2sgKmJtcCk7CisKK3Vuc2lnbmVkIGludCBiaXRtYXNrX2ZpcnN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOwordW5zaWduZWQgaW50IGJpdG1hc2tfbmV4dChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgaSk7Cit1bnNpZ25lZCBpbnQgYml0bWFza19sYXN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOworaW50IGJpdG1hc2tfaXNhbGxjbGVhcihjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wKTsKK2ludCBiaXRtYXNrX2lzYml0c2V0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBpKTsKKworaW50IGJpdG1hc2tfcGFyc2VsaXN0KGNvbnN0IGNoYXIgKmJ1Ziwgc3RydWN0IGJpdG1hc2sgKmJtcCk7CitpbnQgYml0bWFza19kaXNwbGF5bGlzdChjaGFyICpidWYsIGludCBsZW4sIGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOworCisKKworI2VuZGlmIC8qX19DUFVQT1dFUl9CSVRNQVNLX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvY3B1aWQuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvY3B1aWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTAyMWYzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9jcHVpZC5jCkBAIC0wLDAgKzEsMTQ1IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVfdmVuZG9yX3RhYmxlW1g4Nl9WRU5ET1JfTUFYXSA9IHsKKwkiVW5rbm93biIsICJHZW51aW5lSW50ZWwiLCAiQXV0aGVudGljQU1EIiwKK307CisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKy8qIGZyb20gZ2NjICovCisjaW5jbHVkZSA8Y3B1aWQuaD4KKworLyoKKyAqIENQVUlEIGZ1bmN0aW9ucyByZXR1cm5pbmcgYSBzaW5nbGUgZGF0dW0KKyAqCisgKiBEZWZpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VbYWJjZF14KHVuc2lnbmVkIGludCBvcCkKKyAqLworI2RlZmluZSBjcHVpZF9mdW5jKHJlZykJCQkJCVwKKwl1bnNpZ25lZCBpbnQgY3B1aWRfIyNyZWcodW5zaWduZWQgaW50IG9wKQlcCisJewkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwkJXAorCV9fY3B1aWQob3AsIGVheCwgZWJ4LCBlY3gsIGVkeCk7CQlcCisJcmV0dXJuIHJlZzsJCQkJCVwKKwl9CitjcHVpZF9mdW5jKGVheCk7CitjcHVpZF9mdW5jKGVieCk7CitjcHVpZF9mdW5jKGVjeCk7CitjcHVpZF9mdW5jKGVkeCk7CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCisKKy8qIGdldF9jcHVfaW5mbworICoKKyAqIEV4dHJhY3QgQ1BVIHZlbmRvciwgZmFtaWx5LCBtb2RlbCwgc3RlcHBpbmcgaW5mbyBmcm9tIC9wcm9jL2NwdWluZm8KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXYgZXJyb3IgY29kZQorICoKKyAqIFRCRDogU2hvdWxkIHRoZXJlIGJlIGEgY3B1aWQgYWx0ZXJuYXRpdmUgZm9yIHRoaXMgaWYgL3Byb2MgaXMgbm90IG1vdW50ZWQ/CisgKi8KK2ludCBnZXRfY3B1X2luZm8odW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNwdXBvd2VyX2NwdV9pbmZvICpjcHVfaW5mbykKK3sKKwlGSUxFICpmcDsKKwljaGFyIHZhbHVlWzY0XTsKKwl1bnNpZ25lZCBpbnQgcHJvYywgeDsKKwl1bnNpZ25lZCBpbnQgdW5rbm93biA9IDB4ZmZmZmZmOworCXVuc2lnbmVkIGludCBjcHVpZF9sZXZlbCwgZXh0X2NwdWlkX2xldmVsOworCisJaW50IHJldCA9IC1FSU5WQUw7CisKKwljcHVfaW5mby0+dmVuZG9yCQk9IFg4Nl9WRU5ET1JfVU5LTk9XTjsKKwljcHVfaW5mby0+ZmFtaWx5CQk9IHVua25vd247CisJY3B1X2luZm8tPm1vZGVsCQkJPSB1bmtub3duOworCWNwdV9pbmZvLT5zdGVwcGluZwkJPSB1bmtub3duOworCWNwdV9pbmZvLT5jYXBzCQkJPSAwOworCisJZnAgPSBmb3BlbigiL3Byb2MvY3B1aW5mbyIsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIC1FSU87CisKKwl3aGlsZSAoIWZlb2YoZnApKSB7CisJCWlmICghZmdldHModmFsdWUsIDY0LCBmcCkpCisJCQljb250aW51ZTsKKwkJdmFsdWVbNjMgLSAxXSA9ICdcMCc7CisKKwkJaWYgKCFzdHJuY21wKHZhbHVlLCAicHJvY2Vzc29yXHQ6ICIsIDEyKSkgeworCQkJc3NjYW5mKHZhbHVlLCAicHJvY2Vzc29yXHQ6ICV1IiwgJnByb2MpOworCQl9CisJCWlmIChwcm9jICE9IGNwdSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEdldCBDUFUgdmVuZG9yICovCisJCWlmICghc3RybmNtcCh2YWx1ZSwgInZlbmRvcl9pZCIsIDkpKQorCQkJZm9yICh4ID0gMTsgeCA8IFg4Nl9WRU5ET1JfTUFYOyB4KyspIHsKKwkJCQlpZiAoc3Ryc3RyKHZhbHVlLCBjcHVfdmVuZG9yX3RhYmxlW3hdKSkKKwkJCQkJY3B1X2luZm8tPnZlbmRvciA9IHg7CisJCQl9CisJCS8qIEdldCBDUFUgZmFtaWx5LCBldGMuICovCisJCWVsc2UgaWYgKCFzdHJuY21wKHZhbHVlLCAiY3B1IGZhbWlseVx0OiAiLCAxMykpIHsKKwkJCXNzY2FuZih2YWx1ZSwgImNwdSBmYW1pbHlcdDogJXUiLAorCQkJICAgICAgICZjcHVfaW5mby0+ZmFtaWx5KTsKKwkJfQorCQllbHNlIGlmICghc3RybmNtcCh2YWx1ZSwgIm1vZGVsXHRcdDogIiwgOSkpIHsKKwkJCXNzY2FuZih2YWx1ZSwgIm1vZGVsXHRcdDogJXUiLAorCQkJICAgICAgICZjcHVfaW5mby0+bW9kZWwpOworCQl9CisJCWVsc2UgaWYgKCFzdHJuY21wKHZhbHVlLCAic3RlcHBpbmdcdDogIiwgMTApKSB7CisJCQlzc2NhbmYodmFsdWUsICJzdGVwcGluZ1x0OiAldSIsCisJCQkgICAgICAgJmNwdV9pbmZvLT5zdGVwcGluZyk7CisKKwkJCS8qIEV4aXQgLT4gYWxsIHZhbHVlcyBtdXN0IGhhdmUgYmVlbiBzZXQgKi8KKwkJCWlmIChjcHVfaW5mby0+dmVuZG9yID09IFg4Nl9WRU5ET1JfVU5LTk9XTiB8fAorCQkJICAgIGNwdV9pbmZvLT5mYW1pbHkgPT0gdW5rbm93biB8fAorCQkJICAgIGNwdV9pbmZvLT5tb2RlbCA9PSB1bmtub3duIHx8CisJCQkgICAgY3B1X2luZm8tPnN0ZXBwaW5nID09IHVua25vd24pIHsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlyZXQgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJcmV0ID0gLUVOT0RFVjsKK291dDoKKwlmY2xvc2UoZnApOworCS8qIEdldCBzb21lIHVzZWZ1bCBDUFUgY2FwYWJpbGl0aWVzIGZyb20gY3B1aWQgKi8KKwlpZiAoY3B1X2luZm8tPnZlbmRvciAhPSBYODZfVkVORE9SX0FNRCAmJgorCSAgICBjcHVfaW5mby0+dmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCisJCXJldHVybiByZXQ7CisKKwljcHVpZF9sZXZlbAk9IGNwdWlkX2VheCgwKTsKKwlleHRfY3B1aWRfbGV2ZWwJPSBjcHVpZF9lYXgoMHg4MDAwMDAwMCk7CisKKwkvKiBJbnZhcmlhbnQgVFNDICovCisJaWYgKGV4dF9jcHVpZF9sZXZlbCA+PSAweDgwMDAwMDA3ICYmCisJICAgIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA4KSkpCisJCWNwdV9pbmZvLT5jYXBzIHw9IENQVVBPV0VSX0NBUF9JTlZfVFNDOworCisJLyogQXBlcmYvTXBlcmYgcmVnaXN0ZXJzIHN1cHBvcnQgKi8KKwlpZiAoY3B1aWRfbGV2ZWwgPj0gNiAmJiAoY3B1aWRfZWN4KDYpICYgMHgxKSkKKwkJY3B1X2luZm8tPmNhcHMgfD0gQ1BVUE9XRVJfQ0FQX0FQRVJGOworCisJLyogQU1EIEJvb3N0IHN0YXRlIGVuYWJsZS9kaXNhYmxlIHJlZ2lzdGVyICovCisJaWYgKGNwdV9pbmZvLT52ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpIHsKKwkJaWYgKGV4dF9jcHVpZF9sZXZlbCA+PSAweDgwMDAwMDA3ICYmCisJCSAgICAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgOSkpKQorCQkJY3B1X2luZm8tPmNhcHMgfD0gQ1BVUE9XRVJfQ0FQX0FNRF9DQlA7CisJfQorCisJLyogSW50ZWwncyBwZXJmLWJpYXMgTVNSIHN1cHBvcnQgKi8KKwlpZiAoY3B1X2luZm8tPnZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CisJCWlmIChjcHVpZF9sZXZlbCA+PSA2ICYmIChjcHVpZF9lY3goNikgJiAoMSA8PCAzKSkpCisJCQljcHVfaW5mby0+Y2FwcyB8PSBDUFVQT1dFUl9DQVBfUEVSRl9CSUFTOworCX0KKworCS8qCXByaW50ZigiSUQ6ICV1IC0gRXh0aWQ6IDB4JXggLSBDYXBzOiAweCVsbHhcbiIsCisJCWNwdWlkX2xldmVsLCBleHRfY3B1aWRfbGV2ZWwsIGNwdV9pbmZvLT5jYXBzKTsKKwkqLworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2hlbHBlcnMuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvaGVscGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODdkYWQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2hlbHBlcnMuaApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogTWlzY2VsbGFuZW91cyBoZWxwZXJzIHdoaWNoIGRvIG5vdCBmaXQgb3IgYXJlIHdvcnRoCisgKiB0byBwdXQgaW50byBzZXBhcmF0ZSBoZWFkZXJzCisgKi8KKworI2lmbmRlZiBfX0NQVVBPV0VSVVRJTFNfSEVMUEVSU19fCisjZGVmaW5lIF9fQ1BVUE9XRVJVVElMU19IRUxQRVJTX18KKworI2luY2x1ZGUgPGxpYmludGwuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvYml0bWFzay5oIgorCisvKiBJbnRlcm5hdGlvbmFsaXphdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBfKFN0cmluZykgZ2V0dGV4dChTdHJpbmcpCisjaWZuZGVmIGdldHRleHRfbm9vcAorI2RlZmluZSBnZXR0ZXh0X25vb3AoU3RyaW5nKSBTdHJpbmcKKyNlbmRpZgorI2RlZmluZSBOXyhTdHJpbmcpIGdldHRleHRfbm9vcCAoU3RyaW5nKQorLyogSW50ZXJuYXRpb25hbGl6YXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIGludCBydW5fYXNfcm9vdDsKK2V4dGVybiBzdHJ1Y3QgYml0bWFzayAqY3B1c19jaG9zZW47CisKKy8qIEdsb2JhbCB2ZXJib3NlICgtZCkgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIGRlZmluZSBERUJVRyB2aWEgZ2xvYmFsIE1ha2VmaWxlIHZhcmlhYmxlCisgKiBEZWJ1ZyBvdXRwdXQgaXMgc2VudCB0byBzdGRlcnIsIGRvOgorICogY3B1cG93ZXIgbW9uaXRvciAyPi90bXAvZGVidWcKKyAqIHRvIHNwbGl0IGRlYnVnIG91dHB1dCBhd2F5IGZyb20gbm9ybWFsIG91dHB1dAorKi8KKyNpZmRlZiBERUJVRworZXh0ZXJuIGludCBiZV92ZXJib3NlOworCisjZGVmaW5lIGRwcmludChmbXQsIC4uLikgewkJCQkJXAorCQlpZiAoYmVfdmVyYm9zZSkgewkJCQlcCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAiIGZtdCwJCVwKKwkJCQlfX0ZVTkNUSU9OX18sICMjX19WQV9BUkdTX18pOwlcCisJCX0JCQkJCQlcCisJfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcHJpbnQoY29uc3QgY2hhciAqZm10LCAuLi4pIHsgfQkgCisjZW5kaWYKK2V4dGVybiBpbnQgYmVfdmVyYm9zZTsKKy8qIEdsb2JhbCB2ZXJib3NlICgtdikgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjcHVpZCBhbmQgY3B1aW5mbyBoZWxwZXJzICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2VudW0gY3B1cG93ZXJfY3B1X3ZlbmRvciB7WDg2X1ZFTkRPUl9VTktOT1dOID0gMCwgWDg2X1ZFTkRPUl9JTlRFTCwKKwkJCSAgWDg2X1ZFTkRPUl9BTUQsIFg4Nl9WRU5ET1JfTUFYfTsKKworI2RlZmluZSBDUFVQT1dFUl9DQVBfSU5WX1RTQwkweDAwMDAwMDAxCisjZGVmaW5lIENQVVBPV0VSX0NBUF9BUEVSRgkweDAwMDAwMDAyCisjZGVmaW5lIENQVVBPV0VSX0NBUF9BTURfQ0JQCTB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVUE9XRVJfQ0FQX1BFUkZfQklBUwkweDAwMDAwMDA4CisKKyNkZWZpbmUgTUFYX0hXX1BTVEFURVMgMTAKKworc3RydWN0IGNwdXBvd2VyX2NwdV9pbmZvIHsKKwllbnVtIGNwdXBvd2VyX2NwdV92ZW5kb3IgdmVuZG9yOworCXVuc2lnbmVkIGludCBmYW1pbHk7CisJdW5zaWduZWQgaW50IG1vZGVsOworCXVuc2lnbmVkIGludCBzdGVwcGluZzsKKwkvKiBDUFUgY2FwYWJpbGl0aWVzIHJlYWQgb3V0IGZyb20gY3B1aWQgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgY2FwczsKK307CisKKy8qIGdldF9jcHVfaW5mbworICoKKyAqIEV4dHJhY3QgQ1BVIHZlbmRvciwgZmFtaWx5LCBtb2RlbCwgc3RlcHBpbmcgaW5mbyBmcm9tIC9wcm9jL2NwdWluZm8KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXYgZXJyb3IgY29kZQorICogT25seSB1c2VkIG9uIHg4NiwgYmVsb3cgZ2xvYmFsJ3Mgc3RydWN0IHZhbHVlcyBhcmUgemVyby91bmtub3duIG9uCisgKiBvdGhlciBhcmNocworICovCitleHRlcm4gaW50IGdldF9jcHVfaW5mbyh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gKmNwdV9pbmZvKTsKK2V4dGVybiBzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gY3B1cG93ZXJfY3B1X2luZm87CisvKiBjcHVpZCBhbmQgY3B1aW5mbyBoZWxwZXJzICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5IHBhcnNpbmcgKioqKioqKioqKioqKioqKioqLworc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5IHsKKwkvKiBBbW91bnQgb2YgQ1BVIGNvcmVzLCBwYWNrYWdlcyBhbmQgdGhyZWFkcyBwZXIgY29yZSBpbiB0aGUgc3lzdGVtICovCisJdW5zaWduZWQgaW50IGNvcmVzOworCXVuc2lnbmVkIGludCBwa2dzOworCXVuc2lnbmVkIGludCB0aHJlYWRzOyAvKiBwZXIgY29yZSAqLworCisJLyogQXJyYXkgZ2V0cyBtYWxsb2NhdGVkIHdpdGggY29yZXMgZW50cmllcywgaG9sZGluZyBwZXIgY29yZSBpbmZvICovCisJc3RydWN0IHsKKwkJaW50IHBrZzsKKwkJaW50IGNvcmU7CisJCWludCBjcHU7CisJfSAqY29yZV9pbmZvOworfTsKKworZXh0ZXJuIGludCBnZXRfY3B1X3RvcG9sb2d5KHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSAqY3B1X3RvcCk7CitleHRlcm4gdm9pZCBjcHVfdG9wb2xvZ3lfcmVsZWFzZShzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kgY3B1X3RvcCk7CisvKiBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5IHBhcnNpbmcgKioqKioqKioqKioqKioqKioqLworCisvKiBYODYgT05MWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPHBjaS9wY2kuaD4KKworLyogUmVhZC9Xcml0ZSBtc3IgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBpbnQgcmVhZF9tc3IoaW50IGNwdSwgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb25nICp2YWwpOworZXh0ZXJuIGludCB3cml0ZV9tc3IoaW50IGNwdSwgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCk7CisKK2V4dGVybiBpbnQgbXNyX2ludGVsX3NldF9wZXJmX2JpYXModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHZhbCk7CitleHRlcm4gaW50IG1zcl9pbnRlbF9nZXRfcGVyZl9iaWFzKHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gaW50IG1zcl9pbnRlbF9oYXNfYm9vc3Rfc3VwcG9ydCh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBpbnQgbXNyX2ludGVsX2Jvb3N0X2lzX2FjdGl2ZSh1bnNpZ25lZCBpbnQgY3B1KTsKKworLyogUmVhZC9Xcml0ZSBtc3IgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENJIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gaW50IGFtZF9wY2lfZ2V0X251bV9ib29zdF9zdGF0ZXMoaW50ICphY3RpdmUsIGludCAqc3RhdGVzKTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2FjY19pbml0KHN0cnVjdCBwY2lfYWNjZXNzICoqcGFjYywgaW50IHZlbmRvcl9pZCwKKwkJCQkgICAgaW50ICpkZXZfaWRzKTsKKworLyogUENJIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEFNRCBIVyBwc3RhdGUgZGVjb2RpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiBpbnQgZGVjb2RlX3BzdGF0ZXModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGNwdV9mYW1pbHksCisJCQkgIGludCBib29zdF9zdGF0ZXMsIHVuc2lnbmVkIGxvbmcgKnBzdGF0ZXMsIGludCAqbm8pOworCisvKiBBTUQgSFcgcHN0YXRlIGRlY29kaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gaW50IGNwdWZyZXFfaGFzX2Jvb3N0X3N1cHBvcnQodW5zaWduZWQgaW50IGNwdSwgaW50ICpzdXBwb3J0LAorCQkJCSAgICAgaW50ICphY3RpdmUsIGludCAqIHN0YXRlcyk7CisvKgorICogQ1BVSUQgZnVuY3Rpb25zIHJldHVybmluZyBhIHNpbmdsZSBkYXR1bQorICovCit1bnNpZ25lZCBpbnQgY3B1aWRfZWF4KHVuc2lnbmVkIGludCBvcCk7Cit1bnNpZ25lZCBpbnQgY3B1aWRfZWJ4KHVuc2lnbmVkIGludCBvcCk7Cit1bnNpZ25lZCBpbnQgY3B1aWRfZWN4KHVuc2lnbmVkIGludCBvcCk7Cit1bnNpZ25lZCBpbnQgY3B1aWRfZWR4KHVuc2lnbmVkIGludCBvcCk7CisKKy8qIGNwdWlkIGFuZCBjcHVpbmZvIGhlbHBlcnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogWDg2IE9OTFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZGVjb2RlX3BzdGF0ZXModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGNwdV9mYW1pbHksCisJCQkJIGludCBib29zdF9zdGF0ZXMsIHVuc2lnbmVkIGxvbmcgKnBzdGF0ZXMsCisJCQkJIGludCAqbm8pCit7IHJldHVybiAtMTsgfTsKKworc3RhdGljIGlubGluZSBpbnQgcmVhZF9tc3IoaW50IGNwdSwgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb25nICp2YWwpCit7IHJldHVybiAtMTsgfTsKK3N0YXRpYyBpbmxpbmUgaW50IHdyaXRlX21zcihpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsKQoreyByZXR1cm4gLTE7IH07CitzdGF0aWMgaW5saW5lIGludCBtc3JfaW50ZWxfc2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgdmFsKQoreyByZXR1cm4gLTE7IH07CitzdGF0aWMgaW5saW5lIGludCBtc3JfaW50ZWxfZ2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1KQoreyByZXR1cm4gLTE7IH07CisKK3N0YXRpYyBpbmxpbmUgaW50IG1zcl9pbnRlbF9oYXNfYm9vc3Rfc3VwcG9ydCh1bnNpZ25lZCBpbnQgY3B1KQoreyByZXR1cm4gLTE7IH07CitzdGF0aWMgaW5saW5lIGludCBtc3JfaW50ZWxfYm9vc3RfaXNfYWN0aXZlKHVuc2lnbmVkIGludCBjcHUpCit7IHJldHVybiAtMTsgfTsKKworLyogUmVhZC9Xcml0ZSBtc3IgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlubGluZSBpbnQgY3B1ZnJlcV9oYXNfYm9vc3Rfc3VwcG9ydCh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgKnN1cHBvcnQsCisJCQkJCSAgICBpbnQgKmFjdGl2ZSwgaW50ICogc3RhdGVzKQoreyByZXR1cm4gLTE7IH0KKworLyogY3B1aWQgYW5kIGNwdWluZm8gaGVscGVycyAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VheCh1bnNpZ25lZCBpbnQgb3ApIHsgcmV0dXJuIDA7IH07CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYngodW5zaWduZWQgaW50IG9wKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWN4KHVuc2lnbmVkIGludCBvcCkgeyByZXR1cm4gMDsgfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VkeCh1bnNpZ25lZCBpbnQgb3ApIHsgcmV0dXJuIDA7IH07CisjZW5kaWYgLyogZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLworCisjZW5kaWYgLyogX19DUFVQT1dFUlVUSUxTX0hFTFBFUlNfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9taXNjLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTU2NmU5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9taXNjLmMKQEAgLTAsMCArMSwzNCBAQAorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorCitpbnQgY3B1ZnJlcV9oYXNfYm9vc3Rfc3VwcG9ydCh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgKnN1cHBvcnQsIGludCAqYWN0aXZlLCBpbnQgKiBzdGF0ZXMpCit7CisJc3RydWN0IGNwdXBvd2VyX2NwdV9pbmZvIGNwdV9pbmZvOworCWludCByZXQ7CisKKwkqc3VwcG9ydCA9ICphY3RpdmUgPSAqc3RhdGVzID0gMDsKKworCXJldCA9IGdldF9jcHVfaW5mbygwLCAmY3B1X2luZm8pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9BTURfQ0JQKSB7CisJCSpzdXBwb3J0ID0gMTsKKwkJYW1kX3BjaV9nZXRfbnVtX2Jvb3N0X3N0YXRlcyhhY3RpdmUsIHN0YXRlcyk7CisJCWlmIChyZXQgPD0gMCkKKwkJCXJldHVybiByZXQ7CisJCSpzdXBwb3J0ID0gMTsKKwl9IGVsc2UgaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CisJCXJldCA9IG1zcl9pbnRlbF9oYXNfYm9vc3Rfc3VwcG9ydChjcHUpOworCQlpZiAocmV0IDw9IDApCisJCQlyZXR1cm4gcmV0OworCQkqc3VwcG9ydCA9IHJldDsKKwkJcmV0ID0gbXNyX2ludGVsX2Jvb3N0X2lzX2FjdGl2ZShjcHUpOworCQlpZiAocmV0IDw9IDApCisJCQlyZXR1cm4gcmV0OworCQkqYWN0aXZlID0gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9tc3IuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbXNyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkNDhiZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbXNyLmMKQEAgLTAsMCArMSwxMjIgQEAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworLyogSW50ZWwgc3BlY2lmaWMgTVNScyAqLworI2RlZmluZSBNU1JfSUEzMl9QRVJGX1NUQVRVUwkJMHgxOTgKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVTCQkweDFhMAorI2RlZmluZSBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTCTB4MWIwCisKKy8qCisgKiByZWFkX21zcgorICoKKyAqIFdpbGwgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZS4KKyAqIFBvc3NpYmxlIGVycm5vIHZhbHVlcyBjb3VsZCBiZToKKyAqIEVGQVVMVCAtSWYgdGhlIHJlYWQvd3JpdGUgZGlkIG5vdCBmdWxseSBjb21wbGV0ZQorICogRUlPICAgIC1JZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgTVNScworICogRU5YSU8gIC1JZiB0aGUgQ1BVIGRvZXMgbm90IGV4aXN0CisgKi8KKworaW50IHJlYWRfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdmFsKQoreworCWludCBmZDsKKwljaGFyIG1zcl9maWxlX25hbWVbNjRdOworCisJc3ByaW50Zihtc3JfZmlsZV9uYW1lLCAiL2Rldi9jcHUvJWQvbXNyIiwgY3B1KTsKKwlmZCA9IG9wZW4obXNyX2ZpbGVfbmFtZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAobHNlZWsoZmQsIGlkeCwgU0VFS19DVVIpID09IC0xKQorCQlnb3RvIGVycjsKKwlpZiAocmVhZChmZCwgdmFsLCBzaXplb2YgKnZhbCkgIT0gc2l6ZW9mICp2YWwpCisJCWdvdG8gZXJyOworCWNsb3NlKGZkKTsKKwlyZXR1cm4gMDsKKyBlcnI6CisJY2xvc2UoZmQpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIHdyaXRlX21zcgorICoKKyAqIFdpbGwgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZS4KKyAqIFBvc3NpYmxlIGVycm5vIHZhbHVlcyBjb3VsZCBiZToKKyAqIEVGQVVMVCAtSWYgdGhlIHJlYWQvd3JpdGUgZGlkIG5vdCBmdWxseSBjb21wbGV0ZQorICogRUlPICAgIC1JZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgTVNScworICogRU5YSU8gIC1JZiB0aGUgQ1BVIGRvZXMgbm90IGV4aXN0CisgKi8KK2ludCB3cml0ZV9tc3IoaW50IGNwdSwgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKK3sKKwlpbnQgZmQ7CisJY2hhciBtc3JfZmlsZV9uYW1lWzY0XTsKKworCXNwcmludGYobXNyX2ZpbGVfbmFtZSwgIi9kZXYvY3B1LyVkL21zciIsIGNwdSk7CisJZmQgPSBvcGVuKG1zcl9maWxlX25hbWUsIE9fV1JPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGxzZWVrKGZkLCBpZHgsIFNFRUtfQ1VSKSA9PSAtMSkKKwkJZ290byBlcnI7CisJaWYgKHdyaXRlKGZkLCAmdmFsLCBzaXplb2YgdmFsKSAhPSBzaXplb2YgdmFsKQorCQlnb3RvIGVycjsKKwljbG9zZShmZCk7CisJcmV0dXJuIDA7CisgZXJyOgorCWNsb3NlKGZkKTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBtc3JfaW50ZWxfaGFzX2Jvb3N0X3N1cHBvcnQodW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbWlzY19lbmFibGVzOworCWludCByZXQ7CisKKwlyZXQgPSByZWFkX21zcihjcHUsIE1TUl9JQTMyX01JU0NfRU5BQkxFUywgJm1pc2NfZW5hYmxlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gKG1pc2NfZW5hYmxlcyA+PiAzOCkgJiAweDE7Cit9CisKK2ludCBtc3JfaW50ZWxfYm9vc3RfaXNfYWN0aXZlKHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHBlcmZfc3RhdHVzOworCWludCByZXQ7CisKKwlyZXQgPSByZWFkX21zcihjcHUsIE1TUl9JQTMyX1BFUkZfU1RBVFVTLCAmcGVyZl9zdGF0dXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIChwZXJmX3N0YXR1cyA+PiAzMikgJiAweDE7Cit9CisKK2ludCBtc3JfaW50ZWxfZ2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJaW50IHJldDsKKworCWlmICghKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfUEVSRl9CSUFTKSkKKwkJcmV0dXJuIC0xOworCisJcmV0ID0gcmVhZF9tc3IoY3B1LCBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiB2YWw7Cit9CisKK2ludCBtc3JfaW50ZWxfc2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgdmFsKQoreworCWludCByZXQ7CisKKwlpZiAoIShjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX1BFUkZfQklBUykpCisJCXJldHVybiAtMTsKKworCXJldCA9IHdyaXRlX21zcihjcHUsIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9wY2kuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRjYzkzOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvcGNpLmMKQEAgLTAsMCArMSw0NCBAQAorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPGhlbHBlcnMvaGVscGVycy5oPgorCisvKgorICogcGNpX2FjY19pbml0CisgKgorICogUENJIGFjY2VzcyBoZWxwZXIgZnVuY3Rpb24gZGVwZW5kaW5nIG9uIGxpYnBjaQorICoKKyAqICoqcGFjYyA6IGlmIGEgdmFsaWQgcGNpX2RldiBpcyByZXR1cm5lZAorICogICAgICAgICAqcGFjYyBtdXN0IGJlIHBhc3NlZCB0byBwY2lfYWNjX2NsZWFudXAgdG8gZnJlZSBpdAorICoKKyAqIHZlbmRvcl9pZCA6IHRoZSBwY2kgdmVuZG9yIGlkIG1hdGNoaW5nIHRoZSBwY2kgZGV2aWNlIHRvIGFjY2VzcworICogZGV2X2lkcyA6ICAgZGV2aWNlIGlkcyBtYXRjaGluZyB0aGUgcGNpIGRldmljZSB0byBhY2Nlc3MKKyAqCisgKiBSZXR1cm5zIDoKKyAqIHN0cnVjdCBwY2lfZGV2IHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggcGNpX3tyZWFkLHdyaXRlfV8qIGZ1bmN0aW9ucworICogICAgICAgICAgICAgICAgdG8gYWNjZXNzIHRoZSBQQ0kgY29uZmlnIHNwYWNlIG9mIG1hdGNoaW5nIHBjaSBkZXZpY2VzCisgKi8KK3N0cnVjdCBwY2lfZGV2ICpwY2lfYWNjX2luaXQoc3RydWN0IHBjaV9hY2Nlc3MgKipwYWNjLCBpbnQgdmVuZG9yX2lkLAorCQkJCSAgICBpbnQgKmRldl9pZHMpCit7CisJc3RydWN0IHBjaV9maWx0ZXIgZmlsdGVyX25iX2xpbmsgPSB7IC0xLCAtMSwgLTEsIC0xLCB2ZW5kb3JfaWQsIDB9OworCXN0cnVjdCBwY2lfZGV2ICpkZXZpY2U7CisJdW5zaWduZWQgaW50IGk7CisKKwkqcGFjYyA9IHBjaV9hbGxvYygpOworCWlmICgqcGFjYyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXBjaV9pbml0KCpwYWNjKTsKKwlwY2lfc2Nhbl9idXMoKnBhY2MpOworCisJZm9yIChpID0gMDsgZGV2X2lkc1tpXSAhPSAwOyBpKyspIHsKKwkJZmlsdGVyX25iX2xpbmsuZGV2aWNlID0gZGV2X2lkc1tpXTsKKwkJZm9yIChkZXZpY2U9KCpwYWNjKS0+ZGV2aWNlczsgZGV2aWNlOyBkZXZpY2UgPSBkZXZpY2UtPm5leHQpIHsKKwkJCWlmIChwY2lfZmlsdGVyX21hdGNoKCZmaWx0ZXJfbmJfbGluaywgZGV2aWNlKSkKKwkJCQlyZXR1cm4gZGV2aWNlOworCQl9CisJfQorCXBjaV9jbGVhbnVwKCpwYWNjKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1MzRlNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuYwpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqICAoQykgMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBub3ZlbGwuY29tPiBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL3N5c2ZzLmgiCisKK3Vuc2lnbmVkIGludCBzeXNmc19yZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCWludCBmZDsKKwlzaXplX3QgbnVtcmVhZDsKKworCWlmICggKCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpICkgPT0gLTEgKQorCQlyZXR1cm4gMDsKKworCW51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOworCWlmICggbnVtcmVhZCA8IDEgKQorCXsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlidWZbbnVtcmVhZF0gPSAnXDAnOworCWNsb3NlKGZkKTsKKworCXJldHVybiBudW1yZWFkOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QgbGVuKQoreworCWludCBmZDsKKwlzaXplX3QgbnVtd3JpdGU7CisKKwlpZiAoICggZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKSApID09IC0xICkKKwkJcmV0dXJuIDA7CisKKwludW13cml0ZSA9IHdyaXRlKGZkLCB2YWx1ZSwgbGVuKTsKKwlpZiAoIG51bXdyaXRlIDwgMSApCisJeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKwljbG9zZShmZCk7CisJcmV0dXJuIG51bXdyaXRlOworfQorCisvKiBDUFVpZGxlIGlkbGVzdGF0ZSBzcGVjaWZpYyAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL2NwdWlkbGUvIGFjY2VzcyAqLworCisvKgorICogaGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgZmlsZSBmcm9tIC9zeXMgaW50byBnaXZlbiBidWZmZXIKKyAqIGZuYW1lIGlzIGEgcmVsYXRpdmUgcGF0aCB1bmRlciAiY3B1WC9jcHVpZGxlL3N0YXRlWC8iIGRpcgorICogY3N0YXRlcyBzdGFydGluZyB3aXRoIDAsIEMwIGlzIG5vdCBjb3VudGVkIGFzIGNzdGF0ZS4KKyAqIFRoaXMgbWVhbnMgaWYgeW91IHdhbnQgQzEgaW5mbywgcGFzcyAwIGFzIGlkbGVzdGF0ZSBwYXJhbQorICovCit1bnNpZ25lZCBpbnQgc3lzZnNfaWRsZXN0YXRlX3JlYWRfZmlsZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlLAorCQkJICAgICBjb25zdCBjaGFyICpmbmFtZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisJaW50IGZkOworCXNpemVfdCBudW1yZWFkOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAiY3B1JXUvY3B1aWRsZS9zdGF0ZSV1LyVzIiwKKwkJIGNwdSwgaWRsZXN0YXRlLCBmbmFtZSk7CisKKwlpZiAoICggZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKSApID09IC0xICkKKwkJcmV0dXJuIDA7CisKKwludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKKwlpZiAoIG51bXJlYWQgPCAxICkKKwl7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnVmW251bXJlYWRdID0gJ1wwJzsKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gbnVtcmVhZDsKK30KKworLyogcmVhZCBhY2Nlc3MgdG8gZmlsZXMgd2hpY2ggY29udGFpbiBvbmUgbnVtZXJpYyB2YWx1ZSAqLworCitlbnVtIGlkbGVzdGF0ZV92YWx1ZSB7CisJSURMRVNUQVRFX1VTQUdFLAorCUlETEVTVEFURV9QT1dFUiwKKwlJRExFU1RBVEVfTEFURU5DWSwKKwlJRExFU1RBVEVfVElNRSwKKwlNQVhfSURMRVNUQVRFX1ZBTFVFX0ZJTEVTCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaWRsZXN0YXRlX3ZhbHVlX2ZpbGVzW01BWF9JRExFU1RBVEVfVkFMVUVfRklMRVNdID0geworCVtJRExFU1RBVEVfVVNBR0VdID0gInVzYWdlIiwKKwlbSURMRVNUQVRFX1BPV0VSXSA9ICJwb3dlciIsCisJW0lETEVTVEFURV9MQVRFTkNZXSA9ICJsYXRlbmN5IiwKKwlbSURMRVNUQVRFX1RJTUVdICA9ICJ0aW1lIiwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfdmFsdWUodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJCSAgICAgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSwKKwkJCQkJCSAgICAgZW51bSBpZGxlc3RhdGVfdmFsdWUgd2hpY2gpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOworCXVuc2lnbmVkIGludCBsZW47CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqZW5kcDsKKworCWlmICggd2hpY2ggPj0gTUFYX0lETEVTVEFURV9WQUxVRV9GSUxFUyApCisJCXJldHVybiAwOworCisJaWYgKCAoIGxlbiA9IHN5c2ZzX2lkbGVzdGF0ZV9yZWFkX2ZpbGUoY3B1LCBpZGxlc3RhdGUsCisJCQkJCSAgICBpZGxlc3RhdGVfdmFsdWVfZmlsZXNbd2hpY2hdLAorCQkJCQkgICAgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKSkgPT0gMCApCisJeworCQlyZXR1cm4gMDsKKwl9CisKKwl2YWx1ZSA9IHN0cnRvdWxsKGxpbmVidWYsICZlbmRwLCAwKTsKKworCWlmICggZW5kcCA9PSBsaW5lYnVmIHx8IGVycm5vID09IEVSQU5HRSApCisJCXJldHVybiAwOworCisJcmV0dXJuIHZhbHVlOworfQorCisvKiByZWFkIGFjY2VzcyB0byBmaWxlcyB3aGljaCBjb250YWluIG9uZSBzdHJpbmcgKi8KKworZW51bSBpZGxlc3RhdGVfc3RyaW5nIHsKKwlJRExFU1RBVEVfREVTQywKKwlJRExFU1RBVEVfTkFNRSwKKwlNQVhfSURMRVNUQVRFX1NUUklOR19GSUxFUworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmlkbGVzdGF0ZV9zdHJpbmdfZmlsZXNbTUFYX0lETEVTVEFURV9TVFJJTkdfRklMRVNdID0geworCVtJRExFU1RBVEVfREVTQ10gPSAiZGVzYyIsCisJW0lETEVTVEFURV9OQU1FXSA9ICJuYW1lIiwKK307CisKKworc3RhdGljIGNoYXIgKiBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV9zdHJpbmcodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJICB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlLAorCQkJCQkgIGVudW0gaWRsZXN0YXRlX3N0cmluZyB3aGljaCkKK3sKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICpyZXN1bHQ7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICh3aGljaCA+PSBNQVhfSURMRVNUQVRFX1NUUklOR19GSUxFUykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoICggbGVuID0gc3lzZnNfaWRsZXN0YXRlX3JlYWRfZmlsZShjcHUsIGlkbGVzdGF0ZSwKKwkJCQkJICAgIGlkbGVzdGF0ZV9zdHJpbmdfZmlsZXNbd2hpY2hdLAorCQkJCQkgICAgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKSkgPT0gMCApCisJCXJldHVybiBOVUxMOworCisJaWYgKCAoIHJlc3VsdCA9IHN0cmR1cChsaW5lYnVmKSApID09IE5VTEwgKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChyZXN1bHRbc3RybGVuKHJlc3VsdCkgLSAxXSA9PSAnXG4nKQorCQlyZXN1bHRbc3RybGVuKHJlc3VsdCkgLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCit1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9pZGxlc3RhdGVfbGF0ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKQoreworCXJldHVybiBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV92YWx1ZShjcHUsIGlkbGVzdGF0ZSwgSURMRVNUQVRFX0xBVEVOQ1kpOworfQorCit1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9pZGxlc3RhdGVfdXNhZ2UodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSkKK3sKKwlyZXR1cm4gc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfdmFsdWUoY3B1LCBpZGxlc3RhdGUsIElETEVTVEFURV9VU0FHRSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX3RpbWUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSkKK3sKKwlyZXR1cm4gc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfdmFsdWUoY3B1LCBpZGxlc3RhdGUsIElETEVTVEFURV9USU1FKTsKK30KKworY2hhciAqIHN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKQoreworCXJldHVybiBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV9zdHJpbmcoY3B1LCBpZGxlc3RhdGUsIElETEVTVEFURV9OQU1FKTsKK30KKworY2hhciAqIHN5c2ZzX2dldF9pZGxlc3RhdGVfZGVzYyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKQoreworCXJldHVybiBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV9zdHJpbmcoY3B1LCBpZGxlc3RhdGUsIElETEVTVEFURV9ERVNDKTsKK30KKworLyoKKyAqIFJldHVybnMgbnVtYmVyIG9mIHN1cHBvcnRlZCBDLXN0YXRlcyBvZiBDUFUgY29yZSBjcHUKKyAqIE5lZ2F0aXYgaW4gZXJyb3IgY2FzZQorICogWmVybyBpZiBjcHVpZGxlIGRvZXMgbm90IGV4cG9ydCBhbnkgQy1zdGF0ZXMKKyAqLworaW50IHN5c2ZzX2dldF9pZGxlc3RhdGVfY291bnQodW5zaWduZWQgaW50IGNwdSkKK3sKKwljaGFyIGZpbGVbU1lTRlNfUEFUSF9NQVhdOworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJaW50IGlkbGVzdGF0ZXMgPSAxOworCisKKwlzbnByaW50ZihmaWxlLCBTWVNGU19QQVRIX01BWCwgUEFUSF9UT19DUFUgImNwdWlkbGUiKTsKKwlpZiAoIHN0YXQoZmlsZSwgJnN0YXRidWYpICE9IDAgfHwgIVNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzbnByaW50ZihmaWxlLCBTWVNGU19QQVRIX01BWCwgUEFUSF9UT19DUFUgImNwdSV1L2NwdWlkbGUvc3RhdGUwIiwgY3B1KTsKKwlpZiAoIHN0YXQoZmlsZSwgJnN0YXRidWYpICE9IDAgfHwgIVNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZShzdGF0KGZpbGUsICZzdGF0YnVmKSA9PSAwICYmIFNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkgeworCQlzbnByaW50ZihmaWxlLCBTWVNGU19QQVRIX01BWCwgUEFUSF9UT19DUFUKKwkJCSAiY3B1JXUvY3B1aWRsZS9zdGF0ZSVkIiwgY3B1LCBpZGxlc3RhdGVzKTsKKwkJaWRsZXN0YXRlcysrOworCX0KKwlpZGxlc3RhdGVzLS07CisJcmV0dXJuIGlkbGVzdGF0ZXM7Cit9CisKKy8qIENQVWlkbGUgZ2VuZXJhbCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVpZGxlLyBzeXNmcyBhY2Nlc3MgKioqKioqKiovCisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gdG8gcmVhZCBmaWxlIGZyb20gL3N5cyBpbnRvIGdpdmVuIGJ1ZmZlcgorICogZm5hbWUgaXMgYSByZWxhdGl2ZSBwYXRoIHVuZGVyICJjcHUvY3B1aWRsZS8iIGRpcgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX2NwdWlkbGVfcmVhZF9maWxlKGNvbnN0IGNoYXIgKmZuYW1lLCBjaGFyICpidWYsCisJCQkJCSAgICBzaXplX3QgYnVmbGVuKQoreworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHVpZGxlLyVzIiwgZm5hbWUpOworCisJcmV0dXJuIHN5c2ZzX3JlYWRfZmlsZShwYXRoLCBidWYsIGJ1Zmxlbik7Cit9CisKKworCisvKiByZWFkIGFjY2VzcyB0byBmaWxlcyB3aGljaCBjb250YWluIG9uZSBzdHJpbmcgKi8KKworZW51bSBjcHVpZGxlX3N0cmluZyB7CisJQ1BVSURMRV9HT1ZFUk5PUiwKKwlDUFVJRExFX0dPVkVSTk9SX1JPLAorCUNQVUlETEVfRFJJVkVSLAorCU1BWF9DUFVJRExFX1NUUklOR19GSUxFUworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNwdWlkbGVfc3RyaW5nX2ZpbGVzW01BWF9DUFVJRExFX1NUUklOR19GSUxFU10gPSB7CisJW0NQVUlETEVfR09WRVJOT1JdCT0gImN1cnJlbnRfZ292ZXJub3IiLAorCVtDUFVJRExFX0dPVkVSTk9SX1JPXQk9ICJjdXJyZW50X2dvdmVybm9yX3JvIiwKKwlbQ1BVSURMRV9EUklWRVJdCT0gImN1cnJlbnRfZHJpdmVyIiwKK307CisKKworc3RhdGljIGNoYXIgKiBzeXNmc19jcHVpZGxlX2dldF9vbmVfc3RyaW5nKGVudW0gY3B1aWRsZV9zdHJpbmcgd2hpY2gpCit7CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqcmVzdWx0OworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAod2hpY2ggPj0gTUFYX0NQVUlETEVfU1RSSU5HX0ZJTEVTKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICggKCBsZW4gPSBzeXNmc19jcHVpZGxlX3JlYWRfZmlsZShjcHVpZGxlX3N0cmluZ19maWxlc1t3aGljaF0sCisJCQkJCSAgICBsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpKSA9PSAwICkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoICggcmVzdWx0ID0gc3RyZHVwKGxpbmVidWYpICkgPT0gTlVMTCApCisJCXJldHVybiBOVUxMOworCisJaWYgKHJlc3VsdFtzdHJsZW4ocmVzdWx0KSAtIDFdID09ICdcbicpCisJCXJlc3VsdFtzdHJsZW4ocmVzdWx0KSAtIDFdID0gJ1wwJzsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIgKiBzeXNmc19nZXRfY3B1aWRsZV9nb3Zlcm5vcih2b2lkKQoreworCWNoYXIgKnRtcCA9IHN5c2ZzX2NwdWlkbGVfZ2V0X29uZV9zdHJpbmcoQ1BVSURMRV9HT1ZFUk5PUl9STyk7CisJaWYgKCF0bXApCisJCXJldHVybiBzeXNmc19jcHVpZGxlX2dldF9vbmVfc3RyaW5nKENQVUlETEVfR09WRVJOT1IpOworCWVsc2UKKwkJcmV0dXJuIHRtcDsKK30KKworY2hhciAqIHN5c2ZzX2dldF9jcHVpZGxlX2RyaXZlcih2b2lkKQoreworCXJldHVybiBzeXNmc19jcHVpZGxlX2dldF9vbmVfc3RyaW5nKENQVUlETEVfRFJJVkVSKTsKK30KKy8qIENQVWlkbGUgaWRsZXN0YXRlIHNwZWNpZmljIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvY3B1aWRsZS8gYWNjZXNzICovCisKKy8qCisgKiBHZXQgc2NoZWRfbWMgb3Igc2NoZWRfc210IHNldHRpbmdzCisgKiBQYXNzICJtYyIgb3IgInNtdCIgYXMgYXJndW1lbnQKKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKKyAqLworaW50IHN5c2ZzX2dldF9zY2hlZChjb25zdCBjaGFyKiBzbXRfbWMpCit7CisgCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqZW5kcDsKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCisJaWYgKHN0cmNtcCgibWMiLCBzbXRfbWMpICYmIHN0cmNtcCgic210Iiwgc210X21jKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJzY2hlZF8lc19wb3dlcl9zYXZpbmdzIiwgc210X21jKTsKKwlpZiAoc3lzZnNfcmVhZF9maWxlKHBhdGgsIGxpbmVidWYsIE1BWF9MSU5FX0xFTikgPT0gMCApCisJCXJldHVybiAtMTsKKwl2YWx1ZSA9IHN0cnRvdWwobGluZWJ1ZiwgJmVuZHAsIDApOworCWlmICggZW5kcCA9PSBsaW5lYnVmIHx8IGVycm5vID09IEVSQU5HRSApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qCisgKiBHZXQgc2NoZWRfbWMgb3Igc2NoZWRfc210IHNldHRpbmdzCisgKiBQYXNzICJtYyIgb3IgInNtdCIgYXMgYXJndW1lbnQKKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKKyAqLworaW50IHN5c2ZzX3NldF9zY2hlZChjb25zdCBjaGFyKiBzbXRfbWMsIGludCB2YWwpCit7CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJaWYgKHN0cmNtcCgibWMiLCBzbXRfbWMpICYmIHN0cmNtcCgic210Iiwgc210X21jKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJzY2hlZF8lc19wb3dlcl9zYXZpbmdzIiwgc210X21jKTsKKwlzcHJpbnRmKGxpbmVidWYsICIlZCIsIHZhbCk7CisKKwlpZiAoIHN0YXQocGF0aCwgJnN0YXRidWYpICE9IDAgKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChzeXNmc193cml0ZV9maWxlKHBhdGgsIGxpbmVidWYsIE1BWF9MSU5FX0xFTikgPT0gMCApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDAyZDJmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9zeXNmcy5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19DUFVQT1dFUl9IRUxQRVJTX1NZU0ZTX0hfXworI2RlZmluZSBfX0NQVVBPV0VSX0hFTFBFUlNfU1lTRlNfSF9fCisKKyNkZWZpbmUgUEFUSF9UT19DUFUgIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1LyIKKyNkZWZpbmUgTUFYX0xJTkVfTEVOIDI1NQorI2RlZmluZSBTWVNGU19QQVRIX01BWCAyNTUKKworZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNmc19yZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9sYXRlbmN5KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2lkbGVzdGF0ZV91c2FnZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc3lzZnNfZ2V0X2lkbGVzdGF0ZV90aW1lKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpOworZXh0ZXJuIGNoYXIgKiBzeXNmc19nZXRfaWRsZXN0YXRlX25hbWUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7CitleHRlcm4gY2hhciAqIHN5c2ZzX2dldF9pZGxlc3RhdGVfZGVzYyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKTsKK2V4dGVybiBpbnQgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudCh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIGNoYXIgKiBzeXNmc19nZXRfY3B1aWRsZV9nb3Zlcm5vcih2b2lkKTsKK2V4dGVybiBjaGFyICogc3lzZnNfZ2V0X2NwdWlkbGVfZHJpdmVyKHZvaWQpOworCitleHRlcm4gaW50IHN5c2ZzX2dldF9zY2hlZChjb25zdCBjaGFyKiBzbXRfbWMpOworZXh0ZXJuIGludCBzeXNmc19zZXRfc2NoZWQoY29uc3QgY2hhciogc210X21jLCBpbnQgdmFsKTsKKworI2VuZGlmIC8qIF9fQ1BVUE9XRVJfSEVMUEVSU19TWVNGU19IX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvdG9wb2xvZ3kuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvdG9wb2xvZ3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWQ4NDJiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy90b3BvbG9neS5jCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiBUb0RvOiBOZWVkcyB0byBiZSBkb25lIG1vcmUgcHJvcGVybHkgZm9yIEFNRC9JbnRlbCBzcGVjaWZpY3MKKyAqLworCisvKiBIZWxwZXIgc3RydWN0IGZvciBxc29ydCwgbXVzdCBiZSBpbiBzeW5jIHdpdGggY3B1cG93ZXJfdG9wb2xvZ3kuY3B1X2luZm8gKi8KKy8qIEJlIGNhcmVmdWw6IE5lZWQgdG8gcGFzcyB1bnNpZ25lZCB0byB0aGUgc29ydCwgc28gdGhhdCBvZmZsaW5lZCBjb3JlcyBhcmUKKyAgIGluIHRoZSBlbmQsIGJ1dCBkb3VibGUgY2hlY2sgZm9yIC0xIGZvciBvZmZsaW5lZCBjcHVzIGF0IG90aGVyIHBsYWNlcyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxoZWxwZXJzL2hlbHBlcnMuaD4KKyNpbmNsdWRlIDxoZWxwZXJzL3N5c2ZzLmg+CisKKy8qIHJldHVybnMgLTEgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzICovCitpbnQgc3lzZnNfdG9wb2xvZ3lfcmVhZF9maWxlKHVuc2lnbmVkIGludCBjcHUsIGNvbnN0IGNoYXIgKmZuYW1lKQoreworIAl1bnNpZ25lZCBsb25nIHZhbHVlOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgKmVuZHA7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgUEFUSF9UT19DUFUgImNwdSV1L3RvcG9sb2d5LyVzIiwKKwkJCSBjcHUsIGZuYW1lKTsKKwlpZiAoc3lzZnNfcmVhZF9maWxlKHBhdGgsIGxpbmVidWYsIE1BWF9MSU5FX0xFTikgPT0gMCApCisJCXJldHVybiAtMTsKKwl2YWx1ZSA9IHN0cnRvdWwobGluZWJ1ZiwgJmVuZHAsIDApOworCWlmICggZW5kcCA9PSBsaW5lYnVmIHx8IGVycm5vID09IEVSQU5HRSApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0cnVjdCBjcHVpZF9jb3JlX2luZm8geworCXVuc2lnbmVkIGludCBwa2c7CisJdW5zaWduZWQgaW50IHRocmVhZDsKKwl1bnNpZ25lZCBpbnQgY3B1OworfTsKKworc3RhdGljIGludCBfX2NvbXBhcmUoY29uc3Qgdm9pZCAqdDEsIGNvbnN0IHZvaWQgKnQyKQoreworCXN0cnVjdCBjcHVpZF9jb3JlX2luZm8gKnRvcDEgPSAoc3RydWN0IGNwdWlkX2NvcmVfaW5mbyAqKXQxOworCXN0cnVjdCBjcHVpZF9jb3JlX2luZm8gKnRvcDIgPSAoc3RydWN0IGNwdWlkX2NvcmVfaW5mbyAqKXQyOworCWlmICh0b3AxLT5wa2cgPCB0b3AyLT5wa2cpCisJCXJldHVybiAtMTsKKwllbHNlIGlmICh0b3AxLT5wa2cgPiB0b3AyLT5wa2cpCisJCXJldHVybiAxOworCWVsc2UgaWYgKHRvcDEtPnRocmVhZCA8IHRvcDItPnRocmVhZCkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKHRvcDEtPnRocmVhZCA+IHRvcDItPnRocmVhZCkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAodG9wMS0+Y3B1IDwgdG9wMi0+Y3B1KQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAodG9wMS0+Y3B1ID4gdG9wMi0+Y3B1KQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJucyBhbW91bnQgb2YgY3B1cywgbmVnYXRpdmUgb24gZXJyb3IsIGNwdV90b3AgbXVzdCBiZQorICogcGFzc2VkIHRvIGNwdV90b3BvbG9neV9yZWxlYXNlIHRvIGZyZWUgcmVzb3VyY2VzCisgKgorICogQXJyYXkgaXMgc29ydGVkIGFmdGVyIC0+cGtnLCAtPmNvcmUsIHRoZW4gLT5jcHUKKyAqLworaW50IGdldF9jcHVfdG9wb2xvZ3koc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5ICpjcHVfdG9wKQoreworCWludCBjcHUsIGNwdXMgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19DT05GKTsKKworCWNwdV90b3AtPmNvcmVfaW5mbyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5KSAqIGNwdXMpOworCWlmIChjcHVfdG9wLT5jb3JlX2luZm8gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY3B1X3RvcC0+cGtncyA9IGNwdV90b3AtPmNvcmVzID0gMDsKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXM7IGNwdSsrKSB7CisJCWNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLnBrZyA9CisJCQlzeXNmc190b3BvbG9neV9yZWFkX2ZpbGUoY3B1LCAicGh5c2ljYWxfcGFja2FnZV9pZCIpOworCQlpZiAoKGludCljcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5wa2cgIT0gLTEgJiYKKwkJICAgIGNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLnBrZyA+IGNwdV90b3AtPnBrZ3MpCisJCQljcHVfdG9wLT5wa2dzID0gY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0ucGtnOworCQljcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5jb3JlID0KKwkJCXN5c2ZzX3RvcG9sb2d5X3JlYWRfZmlsZShjcHUsICJjb3JlX2lkIik7CisJCWNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLmNwdSA9IGNwdTsKKwl9CisJY3B1X3RvcC0+cGtncysrOworCisJcXNvcnQoY3B1X3RvcC0+Y29yZV9pbmZvLCBjcHVzLCBzaXplb2Yoc3RydWN0IGNwdWlkX2NvcmVfaW5mbyksCisJICAgICAgX19jb21wYXJlKTsKKworCS8qIEludGVsJ3MgY29yZXMgY291bnQgaXMgbm90IGNvbnNlY3V0aXZlbHkgbnVtYmVyZWQsIHRoZXJlIG1heQorCSAqIGJlIGEgY29yZV9pZCBvZiAzLCBidXQgbm9uZSBvZiAyLiBBc3N1bWUgdGhlcmUgYWx3YXlzIGlzIDAKKwkgKiBHZXQgYW1vdW50IG9mIGNvcmVzIGJ5IGNvdW50aW5nIGR1cGxpY2F0ZXMgaW4gYSBwYWNrYWdlCisJZm9yIChjcHUgPSAwOyBjcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5wa2cgPSAwICYmIGNwdSA8IGNwdXM7IGNwdSsrKSB7CisJCWlmIChjcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5jb3JlID09IDApCisJY3B1X3RvcC0+Y29yZXMrKzsKKwkqLworCXJldHVybiBjcHVzOworfQorCit2b2lkIGNwdV90b3BvbG9neV9yZWxlYXNlKHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSBjcHVfdG9wKQoreworCWZyZWUoY3B1X3RvcC5jb3JlX2luZm8pOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTk0MzIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmMKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIFBDSSBpbml0aWFsaXphdGlvbiBiYXNlZCBvbiBleGFtcGxlIGNvZGUgZnJvbToKKyAqICBBbmRyZWFzIEhlcnJtYW5uIDxhbmRyZWFzLmhlcnJtYW5uM0BhbWQuY29tPgorICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHBjaS9wY2kuaD4KKworI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKKy8qKioqKioqKiBQQ0kgcGFydHMgY291bGQgZ28gaW50byBvd24gZmlsZSBhbmQgZ2V0IHNoYXJlZCAqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUENJX05PTl9QQzBfT0ZGU0VUCTB4YjAKKyNkZWZpbmUgUENJX1BDMV9PRkZTRVQJCTB4YjQKKyNkZWZpbmUgUENJX1BDNl9PRkZTRVQJCTB4YjgKKworI2RlZmluZSBQQ0lfTU9OSVRPUl9FTkFCTEVfUkVHICAweGUwCisKKyNkZWZpbmUgUENJX05PTl9QQzBfRU5BQkxFX0JJVAkwCisjZGVmaW5lIFBDSV9QQzFfRU5BQkxFX0JJVAkxCisjZGVmaW5lIFBDSV9QQzZfRU5BQkxFX0JJVAkyCisKKyNkZWZpbmUgUENJX05CUDFfU1RBVF9PRkZTRVQJMHg5OAorI2RlZmluZSBQQ0lfTkJQMV9BQ1RJVkVfQklUCTIKKyNkZWZpbmUgUENJX05CUDFfRU5URVJFRF9CSVQJMQorCisjZGVmaW5lIFBDSV9OQlAxX0NBUF9PRkZTRVQJMHg5MAorI2RlZmluZSBQQ0lfTkJQMV9DQVBBQkxFX0JJVCAgICAzMQorCisjZGVmaW5lIE9WRVJGTE9XX01TCQkzNDM1OTcgLyogMzIgYml0IHJlZ2lzdGVyIGZpbGxlZCBhdCAxMjUwMCBIWgorCQkJCQkgICgxIHRpY2sgcGVyIDgwbnMpICovCisKK2VudW0gYW1kX2ZhbTE0aF9zdGF0ZXMge05PTl9QQzAgPSAwLCBQQzEsIFBDNiwgTkJQMSwKKwkJCUFNRF9GQU0xNEhfU1RBVEVfTlVNfTsKKworc3RhdGljIGludCBmYW0xNGhfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IHNlbGZfaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGNwdSk7CitzdGF0aWMgaW50IGZhbTE0aF9uYnAxX2NvdW50KHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgbG9uZyBsb25nICpjb3VudCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNwdSk7CisKK3N0YXRpYyBjc3RhdGVfdCBhbWRfZmFtMTRoX2NzdGF0ZXNbQU1EX0ZBTTE0SF9TVEFURV9OVU1dID0geworCXsKKwkJLm5hbWUJCQk9ICIhUEMwIiwKKwkJLmRlc2MJCQk9IE5fKCJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIpLAorCQkuaWQJCQk9IE5PTl9QQzAsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gZmFtMTRoX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIlBDMSIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIFBhY2thZ2UgQzEiKSwKKwkJLmlkCQkJPSBQQzEsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gZmFtMTRoX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIlBDNiIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIFBhY2thZ2UgQzYiKSwKKwkJLmlkCQkJPSBQQzYsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gZmFtMTRoX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIk5CUDEiLAorCQkuZGVzYwkJCT0gTl8oIk5vcnRoIEJyaWRnZSBQMSBib29sZWFuIGNvdW50ZXIgKHJldHVybnMgMCBvciAxKSIpLAorCQkuaWQJCQk9IE5CUDEsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudAkJPSBmYW0xNGhfbmJwMV9jb3VudCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfYWNjZXNzICpwY2lfYWNjOworc3RhdGljIGludCBwY2lfdmVuZG9yX2lkID0gMHgxMDIyOworc3RhdGljIGludCBwY2lfZGV2X2lkc1syXSA9IHsweDE3MTYsIDB9Oworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICphbWRfZmFtMTRoX3BjaV9kZXY7CisKK3N0YXRpYyBpbnQgbmJwMV9lbnRlcmVkOworCitzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdGltZWRpZmY7CisKKyNpZmRlZiBERUJVRworc3RydWN0IHRpbWVzcGVjIGRiZ190aW1lOworbG9uZyBkYmdfdGltZWRpZmY7CisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqcHJldmlvdXNfY291bnRbQU1EX0ZBTTE0SF9TVEFURV9OVU1dOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqY3VycmVudF9jb3VudFtBTURfRkFNMTRIX1NUQVRFX05VTV07CisKK3N0YXRpYyBpbnQgYW1kX2ZhbTE0aF9nZXRfcGNpX2luZm8oc3RydWN0IGNzdGF0ZSAqc3RhdGUsCisJCQkJICAgdW5zaWduZWQgaW50ICpwY2lfb2Zmc2V0LAorCQkJCSAgIHVuc2lnbmVkIGludCAqZW5hYmxlX2JpdCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3B1KQoreworCXN3aXRjaChzdGF0ZS0+aWQpIHsKKwljYXNlIE5PTl9QQzA6CisJCSplbmFibGVfYml0ID0gUENJX05PTl9QQzBfRU5BQkxFX0JJVDsKKwkJKnBjaV9vZmZzZXQgPSBQQ0lfTk9OX1BDMF9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUEMxOgorCQkqZW5hYmxlX2JpdCA9IFBDSV9QQzFfRU5BQkxFX0JJVDsKKwkJKnBjaV9vZmZzZXQgPSBQQ0lfUEMxX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBQQzY6CisJCSplbmFibGVfYml0ID0gUENJX1BDNl9FTkFCTEVfQklUOworCQkqcGNpX29mZnNldCA9IFBDSV9QQzZfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIE5CUDE6CisJCSplbmFibGVfYml0ID0gUENJX05CUDFfRU5URVJFRF9CSVQ7CisJCSpwY2lfb2Zmc2V0ID0gUENJX05CUDFfU1RBVF9PRkZTRVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtZF9mYW0xNGhfaW5pdChjc3RhdGVfdCAqc3RhdGUsIHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IGVuYWJsZV9iaXQsIHBjaV9vZmZzZXQsIHJldDsKKwl1aW50MzJfdCB2YWw7CisKKwlyZXQgPSBhbWRfZmFtMTRoX2dldF9wY2lfaW5mbyhzdGF0ZSwgJnBjaV9vZmZzZXQsICZlbmFibGVfYml0LCBjcHUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBOQlAxIG5lZWRzIGV4dHJhIHRyZWF0aW5nIC0+IHdyaXRlIDEgdG8gRDE4RjZ4OTggYml0IDEgZm9yIGluaXQgKi8KKwlpZiAoc3RhdGUtPmlkID09IE5CUDEpIHsKKwkJdmFsID0gcGNpX3JlYWRfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIHBjaV9vZmZzZXQpOworCQl2YWwgfD0gMSA8PCBlbmFibGVfYml0OworCQl2YWwgPSBwY2lfd3JpdGVfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIHBjaV9vZmZzZXQsIHZhbCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRW5hYmxlIG1vbml0b3IgKi8KKwl2YWwgPSBwY2lfcmVhZF9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgUENJX01PTklUT1JfRU5BQkxFX1JFRyk7CisJZHByaW50KCJJbml0ICVzOiByZWFkIGF0IG9mZnNldDogMHgleCB2YWw6ICV1XG4iLCBzdGF0ZS0+bmFtZSwKKwkgICAgICAgUENJX01PTklUT1JfRU5BQkxFX1JFRywgKHVuc2lnbmVkIGludCkgdmFsKTsKKwl2YWwgfD0gMSA8PCBlbmFibGVfYml0OworCXBjaV93cml0ZV9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgUENJX01PTklUT1JfRU5BQkxFX1JFRywgdmFsKTsKKworCWRwcmludCgiSW5pdCAlczogb2Zmc2V0OiAweCV4IGVuYWJsZV9iaXQ6ICVkIC0gdmFsOiAldSAoJXUpXG4iLAorCSAgICAgICBzdGF0ZS0+bmFtZSwgUENJX01PTklUT1JfRU5BQkxFX1JFRywgZW5hYmxlX2JpdCwKKwkgICAgICAgKHVuc2lnbmVkIGludCkgdmFsLCBjcHUpOworCisJLyogU2V0IGNvdW50ZXIgdG8gemVybyAqLworCXBjaV93cml0ZV9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgcGNpX29mZnNldCwgMCk7CisJcHJldmlvdXNfY291bnRbc3RhdGUtPmlkXVtjcHVdID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtZF9mYW0xNGhfZGlzYWJsZShjc3RhdGVfdCAqc3RhdGUsIHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IGVuYWJsZV9iaXQsIHBjaV9vZmZzZXQsIHJldDsKKwl1aW50MzJfdCB2YWw7CisKKwlyZXQgPSBhbWRfZmFtMTRoX2dldF9wY2lfaW5mbyhzdGF0ZSwgJnBjaV9vZmZzZXQsICZlbmFibGVfYml0LCBjcHUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSBwY2lfcmVhZF9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgcGNpX29mZnNldCk7CisJZHByaW50KCIlczogb2Zmc2V0OiAweCV4ICV1XG4iLCBzdGF0ZS0+bmFtZSwgcGNpX29mZnNldCwgdmFsKTsKKwlpZiAoc3RhdGUtPmlkID09IE5CUDEpIHsKKwkJLyogd2FzIHRoZSBiaXQgd2hldGhlciBOQlAxIGdvdCBlbnRlcmVkIHNldD8gKi8KKwkJbmJwMV9lbnRlcmVkID0gKHZhbCAmICgxIDw8IFBDSV9OQlAxX0FDVElWRV9CSVQpKSB8CisJCQkodmFsICYgKDEgPDwgUENJX05CUDFfRU5URVJFRF9CSVQpKTsKKwkJCQorCQlkcHJpbnQoIk5CUDEgd2FzICVzZW50ZXJlZCAtIDB4JXggLSBlbmFibGVfYml0OiAiCisJCSAgICAgICAiJWQgLSBwY2lfb2Zmc2V0OiAweCV4XG4iLAorCQkgICAgICAgbmJwMV9lbnRlcmVkID8gIiIgOiAibm90ICIsCisJCSAgICAgICB2YWwsIGVuYWJsZV9iaXQsIHBjaV9vZmZzZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwljdXJyZW50X2NvdW50W3N0YXRlLT5pZF1bY3B1XSA9IHZhbDsKKworCWRwcmludCgiJXM6IEN1cnJlbnQgLSAgJWxsdSAoJXUpXG4iLCBzdGF0ZS0+bmFtZSwKKwkgICAgICAgY3VycmVudF9jb3VudFtzdGF0ZS0+aWRdW2NwdV0sIGNwdSk7CisJZHByaW50KCIlczogUHJldmlvdXMgLSAlbGx1ICgldSlcbiIsIHN0YXRlLT5uYW1lLAorCSAgICAgICBwcmV2aW91c19jb3VudFtzdGF0ZS0+aWRdW2NwdV0sIGNwdSk7CisKKwl2YWwgPSBwY2lfcmVhZF9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgUENJX01PTklUT1JfRU5BQkxFX1JFRyk7CisJdmFsICY9IH4oMSA8PCBlbmFibGVfYml0KTsKKwlwY2lfd3JpdGVfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmYW0xNGhfbmJwMV9jb3VudCh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY291bnQsCisJCQkgICAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJaWYgKGlkID09IE5CUDEpIHsKKwkJaWYgKG5icDFfZW50ZXJlZCkKKwkJCSpjb3VudCA9IDE7CisJCWVsc2UKKwkJCSpjb3VudCA9IDA7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW50IGZhbTE0aF9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGRpZmY7CisJCisJaWYgKGlkID49IEFNRF9GQU0xNEhfU1RBVEVfTlVNKQorCQlyZXR1cm4gLTE7CisJLyogcmVzaWRlbmN5IGNvdW50IGluIDgwbnMgLT4gZGl2aWRlIHRocm91Z2ggMTIuNSB0byBnZXQgdXMgcmVzaWRlbmN5ICovCisJZGlmZiA9IGN1cnJlbnRfY291bnRbaWRdW2NwdV0gLSBwcmV2aW91c19jb3VudFtpZF1bY3B1XTsKKworCWlmICh0aW1lZGlmZiA9PSAwKQorCQkqcGVyY2VudCA9IDAuMDsKKwllbHNlCisJCSpwZXJjZW50ID0gMTAwLjAgKiBkaWZmIC8gdGltZWRpZmYgLyAxMi41OworCisJZHByaW50KCJUaW1lZGlmZjogJWxsdSAtIHJlc346ICVsdSB1cyAtIHBlcmNlbnQ6ICUuMmYgJSVcbiIsCisJICAgICAgIHRpbWVkaWZmLCBkaWZmICogMTAgLyAxMjUsICpwZXJjZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtZF9mYW0xNGhfc3RhcnQodm9pZCkKK3sKKwlpbnQgbnVtLCBjcHU7CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnN0YXJ0X3RpbWUpOworCWZvciAobnVtID0gMDsgbnVtIDwgQU1EX0ZBTTE0SF9TVEFURV9OVU07IG51bSsrKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQkJYW1kX2ZhbTE0aF9pbml0KCZhbWRfZmFtMTRoX2NzdGF0ZXNbbnVtXSwgY3B1KTsKKwkJfQorCX0KKyNpZmRlZiBERUJVRworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZkYmdfdGltZSk7CisJZGJnX3RpbWVkaWZmID0gdGltZXNwZWNfZGlmZl91cyhzdGFydF90aW1lLCBkYmdfdGltZSk7CisJZHByaW50KCJFbmFibGluZyBjb3VudGVycyB0b29rOiAlbHUgdXNcbiIsCisJICAgICAgIGRiZ190aW1lZGlmZik7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbWRfZmFtMTRoX3N0b3Aodm9pZCkKK3sKKwlpbnQgbnVtLCBjcHU7CisJc3RydWN0IHRpbWVzcGVjIGVuZF90aW1lOworCisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmVuZF90aW1lKTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgQU1EX0ZBTTE0SF9TVEFURV9OVU07IG51bSsrKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQkJYW1kX2ZhbTE0aF9kaXNhYmxlKCZhbWRfZmFtMTRoX2NzdGF0ZXNbbnVtXSwgY3B1KTsKKwkJfQorCX0KKyNpZmRlZiBERUJVRworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZkYmdfdGltZSk7CisJZGJnX3RpbWVkaWZmID0gdGltZXNwZWNfZGlmZl91cyhlbmRfdGltZSwgZGJnX3RpbWUpOworCWRwcmludCgiRGlzYWJsaW5nIGNvdW50ZXJzIHRvb2s6ICVsdSBuc1xuIiwgZGJnX3RpbWVkaWZmKTsKKyNlbmRpZgorCXRpbWVkaWZmID0gdGltZXNwZWNfZGlmZl91cyhzdGFydF90aW1lLCBlbmRfdGltZSk7CisJaWYgKHRpbWVkaWZmIC8gMTAwMCA+IE9WRVJGTE9XX01TKQorCQlwcmludF9vdmVyZmxvd19lcnIoKHVuc2lnbmVkIGludCl0aW1lZGlmZiAvIDEwMDAwMDAsCisJCQkJICAgT1ZFUkZMT1dfTVMgLyAxMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX25icDFfY2FwYWJsZSh2b2lkKQoreworCXVpbnQzMl90IHZhbDsKKwl2YWwgPSBwY2lfcmVhZF9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgUENJX05CUDFfQ0FQX09GRlNFVCk7CisJcmV0dXJuIHZhbCAmICgxIDw8IDMxKTsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciogYW1kX2ZhbTE0aF9yZWdpc3Rlcih2b2lkKSB7CisKKwlpbnQgbnVtOworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8uZmFtaWx5ID09IDB4MTQpIHsKKwkJaWYgKGNwdV9jb3VudCA8PSAwIHx8IGNwdV9jb3VudCA+IDIpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQU1EIGZhbTE0aDogSW52YWxpZCBjcHUgY291bnQ6ICVkXG4iLAorCQkJCWNwdV9jb3VudCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFdlIGRvIG5vdCBhbGxvYyBmb3IgbmJwMSBtYWNoaW5lIHdpZGUgY291bnRlciAqLworCWZvciAobnVtID0gMDsgbnVtIDwgQU1EX0ZBTTE0SF9TVEFURV9OVU0gLSAxOyBudW0rKykgeworCQlwcmV2aW91c19jb3VudFtudW1dID0gY2FsbG9jIChjcHVfY291bnQsCisJCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwkJY3VycmVudF9jb3VudFtudW1dICA9IGNhbGxvYyAoY3B1X2NvdW50LAorCQkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJfQorCisJYW1kX2ZhbTE0aF9wY2lfZGV2ID0gcGNpX2FjY19pbml0KCZwY2lfYWNjLCBwY2lfdmVuZG9yX2lkLCBwY2lfZGV2X2lkcyk7CisJaWYgKGFtZF9mYW0xNGhfcGNpX2RldiA9PSBOVUxMIHx8IHBjaV9hY2MgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWlzX25icDFfY2FwYWJsZSgpKQorCQlhbWRfZmFtMTRoX21vbml0b3IuaHdfc3RhdGVzX251bSA9IEFNRF9GQU0xNEhfU1RBVEVfTlVNIC0gMTsKKworCWFtZF9mYW0xNGhfbW9uaXRvci5uYW1lX2xlbiA9IHN0cmxlbihhbWRfZmFtMTRoX21vbml0b3IubmFtZSk7CisJcmV0dXJuICZhbWRfZmFtMTRoX21vbml0b3I7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9mYW0xNGhfdW5yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisJZm9yIChudW0gPSAwOyBudW0gPCBBTURfRkFNMTRIX1NUQVRFX05VTSAtIDE7IG51bSsrKSB7CisJCWZyZWUocHJldmlvdXNfY291bnRbbnVtXSk7CisJCWZyZWUoY3VycmVudF9jb3VudFtudW1dKTsKKwl9CisJcGNpX2NsZWFudXAocGNpX2FjYyk7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgYW1kX2ZhbTE0aF9tb25pdG9yID0geworCS5uYW1lCQkJPSAiT250YXJpbyIsCisJLmh3X3N0YXRlcwkJPSBhbWRfZmFtMTRoX2NzdGF0ZXMsCisJLmh3X3N0YXRlc19udW0JCT0gQU1EX0ZBTTE0SF9TVEFURV9OVU0sCisJLnN0YXJ0CQkJPSBhbWRfZmFtMTRoX3N0YXJ0LAorCS5zdG9wCQkJPSBhbWRfZmFtMTRoX3N0b3AsCisJLmRvX3JlZ2lzdGVyCQk9IGFtZF9mYW0xNGhfcmVnaXN0ZXIsCisJLnVucmVnaXN0ZXIJCT0gYW1kX2ZhbTE0aF91bnJlZ2lzdGVyLAorCS5uZWVkc19yb290CQk9IDEsCisJLm92ZXJmbG93X3MJCT0gT1ZFUkZMT1dfTVMgLyAxMDAwLAorfTsKKyNlbmRpZiAvKiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdWlkbGVfc3lzZnMuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVpZGxlX3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNmNmQ2NwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVpZGxlX3N5c2ZzLmMKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYworICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSAiaGVscGVycy9zeXNmcy5oIgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisKKyNkZWZpbmUgQ1BVSURMRV9TVEFURVNfTUFYIDEwCitzdGF0aWMgY3N0YXRlX3QgY3B1aWRsZV9jc3RhdGVzW0NQVUlETEVfU1RBVEVTX01BWF07CitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGNwdWlkbGVfc3lzZnNfbW9uaXRvcjsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqKnByZXZpb3VzX2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqKmN1cnJlbnRfY291bnQ7CitzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdGltZWRpZmY7CisKK3N0YXRpYyBpbnQgY3B1aWRsZV9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXRlZGlmZiA9IGN1cnJlbnRfY291bnRbY3B1XVtpZF0KKwkJLSBwcmV2aW91c19jb3VudFtjcHVdW2lkXTsKKwlkcHJpbnQoIiVzOiAtIGRpZmY6ICVsbHUgLSBwZXJjZW50OiAlZiAoJXUpXG4iLAorCSAgICAgICBjcHVpZGxlX2NzdGF0ZXNbaWRdLm5hbWUsIHRpbWVkaWZmLCAqcGVyY2VudCwgY3B1KTsKKworCWlmICh0aW1lZGlmZiA9PSAwKQorCQkqcGVyY2VudCA9IDAuMDsKKwllbHNlCisJCSpwZXJjZW50ID0gKCgxMDAuMCAqIHN0YXRlZGlmZikgLyB0aW1lZGlmZik7CisJCisJZHByaW50KCIlczogLSB0aW1lZGlmZjogJWxsdSAtIHN0YXRlZGlmZjogJWxsdSAtIHBlcmNlbnQ6ICVmICgldSlcbiIsCisJICAgICAgIGNwdWlkbGVfY3N0YXRlc1tpZF0ubmFtZSwgdGltZWRpZmYsIHN0YXRlZGlmZiwgKnBlcmNlbnQsIGNwdSk7CisJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3B1aWRsZV9zdGFydCh2b2lkKQoreworCWludCBjcHUsIHN0YXRlOworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZzdGFydF90aW1lKTsKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJZm9yIChzdGF0ZSA9IDA7IHN0YXRlIDwgY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW07CisJCSAgICAgc3RhdGUrKykgeworCQkJcHJldmlvdXNfY291bnRbY3B1XVtzdGF0ZV0gPQorCQkJCXN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZShjcHUsIHN0YXRlKTsKKwkJCWRwcmludCgiQ1BVICVkIC0gU3RhdGU6ICVkIC0gVmFsOiAlbGx1XG4iLAorCQkJICAgICAgIGNwdSwgc3RhdGUsIHByZXZpb3VzX2NvdW50W2NwdV1bc3RhdGVdKTsKKwkJfQorCQkKKwl9OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNwdWlkbGVfc3RvcCh2b2lkKQoreworCWludCBjcHUsIHN0YXRlOworCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZTsKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZW5kX3RpbWUpOworCXRpbWVkaWZmID0gdGltZXNwZWNfZGlmZl91cyhzdGFydF90aW1lLCBlbmRfdGltZSk7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJZm9yIChzdGF0ZSA9IDA7IHN0YXRlIDwgY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW07CisJCSAgICAgc3RhdGUrKykgeworCQkJY3VycmVudF9jb3VudFtjcHVdW3N0YXRlXSA9CisJCQkJc3lzZnNfZ2V0X2lkbGVzdGF0ZV90aW1lKGNwdSwgc3RhdGUpOworCQkJZHByaW50KCJDUFUgJWQgLSBTdGF0ZTogJWQgLSBWYWw6ICVsbHVcbiIsCisJCQkgICAgICAgY3B1LCBzdGF0ZSwgcHJldmlvdXNfY291bnRbY3B1XVtzdGF0ZV0pOworCQl9CisJfTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmaXhfdXBfaW50ZWxfaWRsZV9kcml2ZXJfbmFtZShjaGFyICp0bXAsIGludCBudW0pCit7CisJLyogZml4IHVwIGNwdWlkbGUgbmFtZSBmb3IgaW50ZWwgaWRsZSBkcml2ZXIgKi8KKwlpZiAoIXN0cm5jbXAodG1wLCAiTkhNLSIsIDQpKSB7CisJCXN3aXRjaChudW0pIHsKKwkJY2FzZSAxOiBzdHJjcHkodG1wLCAiQzEiKTsKKwkJCWJyZWFrOworCQljYXNlIDI6IHN0cmNweSh0bXAsICJDMyIpOworCQkJYnJlYWs7CisJCWNhc2UgMzogc3RyY3B5KHRtcCwgIkM2Iik7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cm5jbXAodG1wLCAiU05CLSIsIDQpKSB7CisJCXN3aXRjaChudW0pIHsKKwkJY2FzZSAxOiBzdHJjcHkodG1wLCAiQzEiKTsKKwkJCWJyZWFrOworCQljYXNlIDI6IHN0cmNweSh0bXAsICJDMyIpOworCQkJYnJlYWs7CisJCWNhc2UgMzogc3RyY3B5KHRtcCwgIkM2Iik7CisJCQlicmVhazsKKwkJY2FzZSA0OiBzdHJjcHkodG1wLCAiQzciKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmICghc3RybmNtcCh0bXAsICJBVE0tIiwgNCkpIHsKKwkJc3dpdGNoKG51bSkgeworCQljYXNlIDE6IHN0cmNweSh0bXAsICJDMSIpOworCQkJYnJlYWs7CisJCWNhc2UgMjogc3RyY3B5KHRtcCwgIkMyIik7CisJCQlicmVhazsKKwkJY2FzZSAzOiBzdHJjcHkodG1wLCAiQzQiKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6IHN0cmNweSh0bXAsICJDNiIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yKiBjcHVpZGxlX3JlZ2lzdGVyKHZvaWQpCit7CisJaW50IG51bTsKKwljaGFyICp0bXA7CisKKwkvKiBBc3N1bWUgaWRsZSBzdGF0ZSBjb3VudCBpcyB0aGUgc2FtZSBmb3IgYWxsIENQVXMgKi8KKwljcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bSA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfY291bnQoMCk7CisKKwlpZiAoY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW0gPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IGNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtOyBudW0gKyspIHsKKwkJdG1wID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9uYW1lKDAsIG51bSk7CisJCWlmICh0bXAgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWZpeF91cF9pbnRlbF9pZGxlX2RyaXZlcl9uYW1lKHRtcCwgbnVtKTsKKwkJc3RybmNweShjcHVpZGxlX2NzdGF0ZXNbbnVtXS5uYW1lLCB0bXAsIENTVEFURV9OQU1FX0xFTiAtIDEpOworCQlmcmVlKHRtcCk7CisKKwkJdG1wID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9kZXNjKDAsIG51bSk7CisJCWlmICh0bXAgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlzdHJuY3B5KGNwdWlkbGVfY3N0YXRlc1tudW1dLmRlc2MsIHRtcCwJQ1NUQVRFX0RFU0NfTEVOIC0gMSk7CisJCWZyZWUodG1wKTsKKworCQljcHVpZGxlX2NzdGF0ZXNbbnVtXS5yYW5nZSA9IFJBTkdFX1RIUkVBRDsKKwkJY3B1aWRsZV9jc3RhdGVzW251bV0uaWQgPSBudW07CisJCWNwdWlkbGVfY3N0YXRlc1tudW1dLmdldF9jb3VudF9wZXJjZW50ID0gY3B1aWRsZV9nZXRfY291bnRfcGVyY2VudDsKKyAJfTsKKworCS8qIEZyZWUgdGhpcyBhdCBwcm9ncmFtIHRlcm1pbmF0aW9uICovCisJcHJldmlvdXNfY291bnQgPSBtYWxsb2Moc2l6ZW9mIChsb25nIGxvbmcqKSAqIGNwdV9jb3VudCk7CisJY3VycmVudF9jb3VudCA9IG1hbGxvYyhzaXplb2YgKGxvbmcgbG9uZyopICogY3B1X2NvdW50KTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IGNwdV9jb3VudDsgbnVtKyspIHsKKwkJcHJldmlvdXNfY291bnRbbnVtXSA9IG1hbGxvYyAoc2l6ZW9mKGxvbmcgbG9uZykgKgorCQkJCQkgICAgICBjcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bSk7CisJCWN1cnJlbnRfY291bnRbbnVtXSA9IG1hbGxvYyAoc2l6ZW9mKGxvbmcgbG9uZykgKgorCQkJCQkgICAgIGNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtKTsKKwl9CisKKwljcHVpZGxlX3N5c2ZzX21vbml0b3IubmFtZV9sZW4gPSBzdHJsZW4oY3B1aWRsZV9zeXNmc19tb25pdG9yLm5hbWUpOworCXJldHVybiAmY3B1aWRsZV9zeXNmc19tb25pdG9yOworfQorCit2b2lkIGNwdWlkbGVfdW5yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IGNwdV9jb3VudDsgbnVtKyspIHsKKwkJZnJlZShwcmV2aW91c19jb3VudFtudW1dKTsKKwkJZnJlZShjdXJyZW50X2NvdW50W251bV0pOworCX0KKwlmcmVlKHByZXZpb3VzX2NvdW50KTsKKwlmcmVlKGN1cnJlbnRfY291bnQpOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGNwdWlkbGVfc3lzZnNfbW9uaXRvciA9IHsKKwkubmFtZQkJCT0gIklkbGVfU3RhdHMiLAorCS5od19zdGF0ZXMJCT0gY3B1aWRsZV9jc3RhdGVzLAorCS5zdGFydAkJCT0gY3B1aWRsZV9zdGFydCwKKwkuc3RvcAkJCT0gY3B1aWRsZV9zdG9wLAorCS5kb19yZWdpc3RlcgkJPSBjcHVpZGxlX3JlZ2lzdGVyLAorCS51bnJlZ2lzdGVyCQk9IGNwdWlkbGVfdW5yZWdpc3RlciwKKwkubmVlZHNfcm9vdAkJPSAwLAorCS5vdmVyZmxvd19zCQk9IFVJTlRfTUFYLAorfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOTZlNzkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jCkBAIC0wLDAgKzEsNDQ2IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiAgT3V0cHV0IGZvcm1hdCBpbnNwaXJlZCBieSBMZW4gQnJvd24ncyA8bGVuYkBrZXJuZWwub3JnPiB0dXJib3N0YXQgdG9vbC4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxsaWJnZW4uaD4KKworI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworLyogRGVmaW5lIHBvaW50ZXJzIHRvIGFsbCBtb25pdG9ycy4gICovCisjZGVmaW5lIERFRih4KSAmIHggIyMgX21vbml0b3IgLAorc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqIGFsbF9tb25pdG9yc1tdID0geworI2luY2x1ZGUgImlkbGVfbW9uaXRvcnMuZGVmIgorMAorfTsKKworc3RhdGljIHN0cnVjdCBjcHVpZGxlX21vbml0b3IgKm1vbml0b3JzW01PTklUT1JTX01BWF07CitzdGF0aWMgdW5zaWduZWQgaW50IGF2YWlsX21vbml0b3JzOworCitzdGF0aWMgY2hhciAqcHJvZ25hbWU7CisKK2VudW0gb3BlcmF0aW9uX21vZGVfZSB7IGxpc3QgPSAxLCBzaG93LCBzaG93X2FsbCB9Oworc3RhdGljIGludCBtb2RlOworc3RhdGljIGludCBpbnRlcnZhbCA9IDE7CitzdGF0aWMgY2hhciAqc2hvd19tb25pdG9yc19wYXJhbTsKK3N0YXRpYyBzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kgY3B1X3RvcDsKKworLyogVG9EbzogRG9jdW1lbnQgdGhpcyBpbiB0aGUgbWFucGFnZSAqLworc3RhdGljIGNoYXIgcmFuZ2VfYWJicltSQU5HRV9NQVhdID0geyAnVCcsICdDJywgJ1AnLCAnTScsIH07CisKK2xvbmcgbG9uZyB0aW1lc3BlY19kaWZmX3VzKHN0cnVjdCB0aW1lc3BlYyBzdGFydCwgc3RydWN0IHRpbWVzcGVjIGVuZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdGVtcDsKKwlpZiAoKGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYykgPCAwKSB7CisJCXRlbXAudHZfc2VjID0gZW5kLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYyAtIDE7CisJCXRlbXAudHZfbnNlYyA9IDEwMDAwMDAwMDAgKyBlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWM7CisJfSBlbHNlIHsKKwkJdGVtcC50dl9zZWMgPSBlbmQudHZfc2VjIC0gc3RhcnQudHZfc2VjOworCQl0ZW1wLnR2X25zZWMgPSBlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWM7CisJfQorCXJldHVybiAodGVtcC50dl9zZWMgKiAxMDAwMDAwKSArICh0ZW1wLnR2X25zZWMgLyAxMDAwKTsKK30KKwordm9pZCBtb25pdG9yX2hlbHAodm9pZCkKK3sKKwlwcmludGYoXygiY3B1cG93ZXIgbW9uaXRvcjogWy1tIDxtb24xPixbPG1vbjI+XSwuLiBdIGNvbW1hbmRcbiIpKTsKKwlwcmludGYoXygiY3B1cG93ZXIgbW9uaXRvcjogWy1tIDxtb24xPixbPG1vbjI+XSwuLiBdIFsgLWkgaW50ZXJ2YWxfc2VjIF1cbiIpKTsKKwlwcmludGYoXygiY3B1cG93ZXIgbW9uaXRvcjogLWxcbiIpKTsKKwlwcmludGYoXygiXHQgY29tbWFuZDogcGFzcyBhbiBhcmJpdHJhcnkgY29tbWFuZCB0byBtZWFzdXJlIHNwZWNpZmljIHdvcmtsb2FkXG4iKSk7CisJcHJpbnRmKF8oIlx0IC1pOiB0aW1lIGludGVydmFsbCB0byBtZWFzdXJlIGZvciBpbiBzZWNvbmRzIChkZWZhdWx0IDEpXG4iKSk7CisJcHJpbnRmKF8oIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIpKTsKKwlwcmludGYoXygiXHQgLW06IHNob3cgc3BlY2lmaWMgQ1BVIHNsZWVwIG1vbml0b3JzIG9ubHkgKGluIHNhbWUgb3JkZXIpXG4iKSk7CisJcHJpbnRmKF8oIlx0IC1oOiBwcmludCB0aGlzIGhlbHBcbiIpKTsKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKF8oIm9ubHkgb25lIG9mOiAtbCwgLW0gYXJlIGFsbG93ZWRcbklmIG5vbmUgb2YgdGhlbSBpcyBwYXNzZWQsIikpOworCXByaW50ZihfKCIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIpKTsKK30KKwordm9pZCBwcmludF9uX3NwYWNlcyhpbnQgbikKK3sKKwlpbnQgeDsKKwlmb3IgKHggPSAwOyB4IDwgbjsgeCsrKQorCQlwcmludGYoIiAiKTsKK30JCisKKy8qIHNpemUgb2YgcyBtdXN0IGJlIGF0IGxlYXN0IG4gKyAxICovCitpbnQgZmlsbF9zdHJpbmdfd2l0aF9zcGFjZXMoY2hhciAqcywgaW50IG4pCit7CisgICAgICAgIGludCBsZW4gPSBzdHJsZW4ocyk7CisJaWYgKGxlbiA+IG4pCisJCXJldHVybiAtMTsKKyAgICAgICAgZm9yICg7IGxlbiA8IG47IGxlbisrKQorICAgICAgICAgICAgICAgIHNbbGVuXSA9ICcgJzsKKyAgICAgICAgc1tsZW5dID0gJ1wwJzsKKwlyZXR1cm4gMDsKK30gCisKK3ZvaWQgcHJpbnRfaGVhZGVyKGludCB0b3BvbG9neV9kZXB0aCkKK3sKKwlpbnQgdW5zaWduZWQgbW9uOworCWludCBzdGF0ZSwgbmVlZF9sZW4sIHByX21vbl9sZW47CisJY3N0YXRlX3QgczsKKwljaGFyIGJ1ZlsxMjhdID0gIiI7CisJaW50IHBlcmNlbnRfd2lkdGggPSA0OworCisJZmlsbF9zdHJpbmdfd2l0aF9zcGFjZXMoYnVmLCB0b3BvbG9neV9kZXB0aCAqIDUgLSAxKTsKKwlwcmludGYoIiVzfCIsIGJ1Zik7CisKKwlmb3IgKG1vbiA9IDA7IG1vbiA8IGF2YWlsX21vbml0b3JzOyBtb24rKykgeworCQlwcl9tb25fbGVuID0gMDsKKwkJbmVlZF9sZW4gPSBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNfbnVtICogKHBlcmNlbnRfd2lkdGggKyAzKQorCQkJLSAxOworCQlpZiAobW9uICE9IDApIHsKKwkJCXByaW50ZigifHwgIik7CisJCQluZWVkX2xlbiAtLTsKKwkJfQorCQlzcHJpbnRmKGJ1ZiwgIiVzIiwgbW9uaXRvcnNbbW9uXS0+bmFtZSk7CisJCWZpbGxfc3RyaW5nX3dpdGhfc3BhY2VzKGJ1ZiwgbmVlZF9sZW4pOworCQlwcmludGYoIiVzIiwgYnVmKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCisJaWYgKHRvcG9sb2d5X2RlcHRoID4gMikKKwkJcHJpbnRmKCJQS0cgfCIpOworCWlmICh0b3BvbG9neV9kZXB0aCA+IDEpCisJCXByaW50ZigiQ09SRXwiKTsKKwlpZiAodG9wb2xvZ3lfZGVwdGggPiAwKQorCQlwcmludGYoIkNQVSB8Iik7CisKKwlmb3IgKG1vbiA9IDA7IG1vbiA8IGF2YWlsX21vbml0b3JzOyBtb24rKykgeworCQlpZiAobW9uICE9IDApCisJCQlwcmludGYoInx8ICIpOworCQllbHNlCisJCQlwcmludGYoIiAiKTsKKwkJZm9yIChzdGF0ZSA9IDA7IHN0YXRlIDwgbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzX251bTsgc3RhdGUrKykgeworCQkJaWYgKHN0YXRlICE9IDApCisJCQkJcHJpbnRmKCIgfCAiKTsKKwkJCXMgPSBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNbc3RhdGVdOworCQkJc3ByaW50ZihidWYsICIlcyIsIHMubmFtZSk7CisJCQlmaWxsX3N0cmluZ193aXRoX3NwYWNlcyhidWYsIHBlcmNlbnRfd2lkdGgpOworCQkJcHJpbnRmKCIlcyIsIGJ1Zik7CisJCX0KKwkJcHJpbnRmKCIgIik7CisJfQorCXByaW50ZigiXG4iKTsKK30KKworCit2b2lkIHByaW50X3Jlc3VsdHMoaW50IHRvcG9sb2d5X2RlcHRoLCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBtb247CisJaW50IHN0YXRlLCByZXQ7CisJZG91YmxlIHBlcmNlbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHJlc3VsdDsKKwljc3RhdGVfdCBzOworCisJaWYgKHRvcG9sb2d5X2RlcHRoID4gMikKKwkJcHJpbnRmKCIlNGR8IiwgY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5wa2cpOworCWlmICh0b3BvbG9neV9kZXB0aCA+IDEpCisJCXByaW50ZigiJTRkfCIsIGNwdV90b3AuY29yZV9pbmZvW2NwdV0uY29yZSk7CisJaWYgKHRvcG9sb2d5X2RlcHRoID4gMCkKKwkJcHJpbnRmKCIlNGR8IiwgY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5jcHUpOworCisJZm9yIChtb24gPSAwOyBtb24gPCBhdmFpbF9tb25pdG9yczsgbW9uKyspIHsKKwkJaWYgKG1vbiAhPSAwKQorCQkJcHJpbnRmKCJ8fCIpOworCisJCWZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8IG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc19udW07IHN0YXRlKyspIHsKKwkJCWlmIChzdGF0ZSAhPSAwKQorCQkJCXByaW50ZigifCIpOworCisJCQlzID0gbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzW3N0YXRlXTsKKworCQkJaWYgKHMuZ2V0X2NvdW50X3BlcmNlbnQpIHsKKwkJCQlyZXQgPSBzLmdldF9jb3VudF9wZXJjZW50KHMuaWQsICZwZXJjZW50LAorCQkJCQkJICBjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLmNwdSk7CisJCQkJaWYgKHJldCkgeworCQkJCQlwcmludGYoIioqKioqKiIpOworCQkJCX0gZWxzZSBpZiAocGVyY2VudCA+PSAxMDAuMCkKKwkJCQkJcHJpbnRmKCIlNi4xZiIsIHBlcmNlbnQpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCIlNi4yZiIsIHBlcmNlbnQpOworCQkJfQorCQkJZWxzZSBpZiAocy5nZXRfY291bnQpIHsKKwkJCQlyZXQgPSBzLmdldF9jb3VudChzLmlkLCAmcmVzdWx0LAorCQkJCQkJICBjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLmNwdSk7CisJCQkJaWYgKHJldCkgeworCQkJCQlwcmludGYoIioqKioqKiIpOworCQkJCX0gZWxzZQorCQkJCQlwcmludGYoIiU2bGx1IiwgcmVzdWx0KTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXByaW50ZihfKCJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCAiCisJCQkJCSAiZnVuY3Rpb24uIEltcGxlbWVudGF0aW9uIGVycm9yXG4iKSwKKwkJCQkgICAgICAgbW9uaXRvcnNbbW9uXS0+bmFtZSwgcy5uYW1lKTsKKwkJCQlleGl0IChFWElUX0ZBSUxVUkUpOworCQkJfQorCQl9CisJfQorCS8qIGNwdSBvZmZsaW5lICovCisJaWYgKGNwdV90b3AuY29yZV9pbmZvW2NwdV0ucGtnID09IC0xIHx8CisJICAgIGNwdV90b3AuY29yZV9pbmZvW2NwdV0uY29yZSA9PSAtMSkgeworCQlwcmludGYoXygiICppcyBvZmZsaW5lXG4iKSk7CisJCXJldHVybjsKKwl9IGVsc2UKKwkJcHJpbnRmKCJcbiIpOworfQorCisKKy8qIHBhcmFtOiBzdHJpbmcgcGFzc2VkIGJ5IC1tIHBhcmFtIChUaGUgbGlzdCBvZiBtb25pdG9ycyB0byBzaG93KQorICoKKyAqIE1vbml0b3JzIG11c3QgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYWxyZWFkeSwgbWF0Y2hpbmcgbW9uaXRvcnMKKyAqIGFyZSBwaWNrZWQgb3V0IGFuZCBhdmFpbGFibGUgbW9uaXRvcnMgYXJyYXkgaXMgb3ZlcnJpZGRlbgorICogd2l0aCBtYXRjaGluZyBvbmVzCisgKgorICogTW9uaXRvcnMgZ2V0IHNvcnRlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgdXNlciBwYXNzZXMgdGhlbQorKi8KKworc3RhdGljIHZvaWQgcGFyc2VfbW9uaXRvcl9wYXJhbShjaGFyKiBwYXJhbSkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtOworCWludCBtb24sIGhpdHMgPSAwOworCWNoYXIgKnRtcCA9IHBhcmFtLCAqdG9rZW47CisJc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqdG1wX21vbnNbTU9OSVRPUlNfTUFYXTsKKworCisJZm9yIChtb24gPSAwOyBtb24gPCBNT05JVE9SU19NQVg7bW9uKyssIHRtcCA9IE5VTEwpIHsKKwkJdG9rZW4gPSBzdHJ0b2sodG1wLCAiLCIpOworCQlpZiAodG9rZW4gPT0gTlVMTCkKKwkJCWJyZWFrOworCQlpZiAoc3RybGVuKHRva2VuKSA+PSBNT05JVE9SX05BTUVfTEVOKSB7CisJCQlwcmludGYoXygiJXM6IG1heCBtb25pdG9yIG5hbWUgbGVuZ3RoIgorCQkJCSAiICglZCkgZXhjZWVkZWRcbiIpLCB0b2tlbiwgTU9OSVRPUl9OQU1FX0xFTik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAobnVtID0gMDsgbnVtIDwgYXZhaWxfbW9uaXRvcnM7IG51bSsrKSB7CisJCQlpZiAoIXN0cmNtcChtb25pdG9yc1tudW1dLT5uYW1lLCB0b2tlbikpIHsKKwkJCQlkcHJpbnQoIkZvdW5kIHJlcXVlc3RlZCBtb25pdG9yOiAlc1xuIiwgdG9rZW4pOworCQkJCXRtcF9tb25zW2hpdHNdID0gbW9uaXRvcnNbbnVtXTsKKwkJCQloaXRzKys7CisJCQl9CisJCX0JCisJfQorCWlmIChoaXRzID09IDApIHsKKwkJcHJpbnRmKF8oIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsICIKKwkJCSAidHJ5IC1sIG9wdGlvblxuIiksIHBhcmFtKTsKKwkJbW9uaXRvcl9oZWxwKCk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJLyogT3ZlcnJpZGUgZGV0ZWN0ZWQvcmVnaXN0ZXJkIG1vbml0b3JzIGFycmF5IHdpdGggcmVxdWVzdGVkIG9uZSAqLworCW1lbWNweShtb25pdG9ycywgdG1wX21vbnMsIHNpemVvZihzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yKikgKiBNT05JVE9SU19NQVgpOworCWF2YWlsX21vbml0b3JzID0gaGl0czsKK30KKwordm9pZCBsaXN0X21vbml0b3JzKHZvaWQpIHsKKwl1bnNpZ25lZCBpbnQgbW9uOworCWludCBzdGF0ZTsKKwljc3RhdGVfdCBzOworCisJZm9yIChtb24gPSAwOyBtb24gPCBhdmFpbF9tb25pdG9yczsgbW9uKyspIHsKKwkJcHJpbnRmKF8oIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgIgorCQkJICJzXG4iKSwgbW9uaXRvcnNbbW9uXS0+bmFtZSwgbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzX251bSwKKwkJICAgICAgIG1vbml0b3JzW21vbl0tPm92ZXJmbG93X3MpOworCQkgICAgICAgCisJCWZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8IG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc19udW07IHN0YXRlKyspIHsKKwkJCXMgPSBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNbc3RhdGVdOworCQkJLyoKKwkJCSAqIFRvRG8gc2hvdyBtb3JlIHN0YXRlIGNhcGFiaWxpdGllczoKKwkJCSAqIHBlcmNlbnQsIHRpbWUgKGdyYW5sYXJpdHkpCisJCQkgKi8KKwkJCXByaW50ZigiJXNcdFslY10gLT4gJXNcbiIsIHMubmFtZSwgcmFuZ2VfYWJicltzLnJhbmdlXSwKKwkJCSAgICAgICBnZXR0ZXh0KHMuZGVzYykpOworCQl9CisJfQorfQorCitpbnQgZm9ya19pdChjaGFyICoqYXJndikKK3sKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBudW07CisJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVkaWZmOworCXBpZF90IGNoaWxkX3BpZDsKKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIGVuZDsKKworCWNoaWxkX3BpZCA9IGZvcmsoKTsKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmc3RhcnQpOworCisJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspCisJCW1vbml0b3JzW251bV0tPnN0YXJ0KCk7CisKKwlpZiAoIWNoaWxkX3BpZCkgeworCQkvKiBjaGlsZCAqLworCQlleGVjdnAoYXJndlswXSwgYXJndik7CisJfSBlbHNlIHsKKwkJLyogcGFyZW50ICovCisJCWlmIChjaGlsZF9waWQgPT0gLTEpIHsKKwkJCXBlcnJvcigiZm9yayIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCXNpZ25hbChTSUdJTlQsIFNJR19JR04pOworCQlzaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7CisJCWlmICh3YWl0cGlkKGNoaWxkX3BpZCwgJnN0YXR1cywgMCkgPT0gLTEpIHsKKwkJCXBlcnJvcigid2FpdCIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZW5kKTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IGF2YWlsX21vbml0b3JzOyBudW0rKykKKwkJbW9uaXRvcnNbbnVtXS0+c3RvcCgpOworCisJdGltZWRpZmYgPSB0aW1lc3BlY19kaWZmX3VzKHN0YXJ0LCBlbmQpOworCWlmIChXSUZFWElURUQoc3RhdHVzKSkKKwkJcHJpbnRmKF8oIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIpLAorCQkgICAgICAgYXJndlswXSwgdGltZWRpZmYgLyAoMTAwMC4wICogMTAwMCksIFdFWElUU1RBVFVTKHN0YXR1cykpOworCXJldHVybiAwOworfQorCitpbnQgZG9faW50ZXJ2YWxfbWVhc3VyZShpbnQgaSkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtOworCisJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspIHsKKwkJZHByaW50KCJIVyBDLXN0YXRlIHJlc2lkZW5jeSBtb25pdG9yOiAlcyAtIFN0YXRlczogJWRcbiIsCisJCSAgICAgICBtb25pdG9yc1tudW1dLT5uYW1lLCBtb25pdG9yc1tudW1dLT5od19zdGF0ZXNfbnVtKTsKKwkJbW9uaXRvcnNbbnVtXS0+c3RhcnQoKTsKKwl9CisJc2xlZXAoaSk7CisJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspIHsKKwkJbW9uaXRvcnNbbnVtXS0+c3RvcCgpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY21kbGluZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBvcHQ7CisJcHJvZ25hbWUgPSBiYXNlbmFtZShhcmd2WzBdKTsKKworCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICIraGxpOm06IikpICE9IC0xKSB7CisJCXN3aXRjaCAob3B0KSB7CisJCWNhc2UgJ2gnOgorCQkJbW9uaXRvcl9oZWxwKCk7CisJCQlleGl0KEVYSVRfU1VDQ0VTUyk7CisJCWNhc2UgJ2wnOgorCQkJaWYgKG1vZGUpIHsKKwkJCQltb25pdG9yX2hlbHAoKTsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCQltb2RlID0gbGlzdDsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCS8qIG9ubHkgYWxsb3cgLWkgd2l0aCAtbSBvciBubyBvcHRpb24gKi8KKwkJCWlmIChtb2RlICYmIG1vZGUgIT0gc2hvdykgeworCQkJCW1vbml0b3JfaGVscCgpOworCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCX0KKwkJCWludGVydmFsID0gYXRvaShvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJaWYgKG1vZGUpIHsKKwkJCQltb25pdG9yX2hlbHAoKTsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCQltb2RlID0gc2hvdzsKKwkJCXNob3dfbW9uaXRvcnNfcGFyYW0gPSBvcHRhcmc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1vbml0b3JfaGVscCgpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisJfQorCWlmICghbW9kZSkKKwkJbW9kZSA9IHNob3dfYWxsOworfQorCitpbnQgY21kX21vbml0b3IoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCBudW07CisJc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqdGVzdF9tb247CisJaW50IGNwdTsKKworCWNtZGxpbmUoYXJnYywgYXJndik7CisJY3B1X2NvdW50ID0gZ2V0X2NwdV90b3BvbG9neSgmY3B1X3RvcCk7CisJaWYgKGNwdV9jb3VudCA8IDApIHsKKwkJcHJpbnRmKF8oIkNhbm5vdCByZWFkIG51bWJlciBvZiBhdmFpbGFibGUgcHJvY2Vzc29yc1xuIikpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCWRwcmludCgiU3lzdGVtIGhhcyB1cCB0byAlZCBDUFUgY29yZXNcbiIsIGNwdV9jb3VudCk7CisJCisJZm9yIChudW0gPSAwOyBhbGxfbW9uaXRvcnNbbnVtXTsgbnVtKyspIHsKKwkJZHByaW50KCJUcnkgdG8gcmVnaXN0ZXI6ICVzXG4iLCBhbGxfbW9uaXRvcnNbbnVtXS0+bmFtZSk7CisJCXRlc3RfbW9uID0gYWxsX21vbml0b3JzW251bV0tPmRvX3JlZ2lzdGVyKCk7CisJCWlmICh0ZXN0X21vbikgeworCQkJaWYgKHRlc3RfbW9uLT5uZWVkc19yb290ICYmICFydW5fYXNfcm9vdCkgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyAiCisJCQkJCSAgInJvb3QgYWNjZXNzXG4iKSwgdGVzdF9tb24tPm5hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJbW9uaXRvcnNbYXZhaWxfbW9uaXRvcnNdID0gdGVzdF9tb247CisJCQlkcHJpbnQoIiVzIHJlZ2lzdGVyZWRcbiIsIGFsbF9tb25pdG9yc1tudW1dLT5uYW1lKTsKKwkJCWF2YWlsX21vbml0b3JzKys7CisJCX0KKwl9CisKKwlpZiAoYXZhaWxfbW9uaXRvcnMgPT0gMCkgeworCQlwcmludGYoXygiTm8gSFcgQ3N0YXRlIG1vbml0b3JzIGZvdW5kXG4iKSk7CisJCXJldHVybiAxOworCX0KKworCWlmIChtb2RlID09IGxpc3QpIHsKKwkJbGlzdF9tb25pdG9ycygpOworCQlleGl0KEVYSVRfU1VDQ0VTUyk7CisJfQorCisJaWYgKG1vZGUgPT0gc2hvdykKKwkJcGFyc2VfbW9uaXRvcl9wYXJhbShzaG93X21vbml0b3JzX3BhcmFtKTsKKworCWRwcmludCgiUGFja2FnZXM6ICVkIC0gQ29yZXM6ICVkIC0gQ1BVczogJWRcbiIsCisJICAgICAgIGNwdV90b3AucGtncywgY3B1X3RvcC5jb3JlcywgY3B1X2NvdW50KTsKKworCS8qCisJICogaWYgYW55IHBhcmFtcyBsZWZ0LCBpdCBtdXN0IGJlIGEgY29tbWFuZCB0byBmb3JrCisJICovCisJaWYgKGFyZ2MgLSBvcHRpbmQpCisJCWZvcmtfaXQoYXJndiArIG9wdGluZCk7CisJZWxzZQorCQlkb19pbnRlcnZhbF9tZWFzdXJlKGludGVydmFsKTsKKworCS8qIFRvRG86IFRvcG9sb2d5IHBhcnNpbmcgbmVlZHMgZml4aW5nIGZpcnN0IHRvIGRvCisJICAgdGhpcyBtb3JlIGdlbmVyaWNhbGx5ICovCisJaWYgKGNwdV90b3AucGtncyA+IDEpCisJCXByaW50X2hlYWRlcigzKTsKKwllbHNlCisJCXByaW50X2hlYWRlcigxKTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQlpZiAoY3B1X3RvcC5wa2dzID4gMSkKKwkJCXByaW50X3Jlc3VsdHMoMywgY3B1KTsKKwkJZWxzZQorCQkJcHJpbnRfcmVzdWx0cygxLCBjcHUpOworCX0KKworCWZvciAobnVtID0gMDsgbnVtIDwgYXZhaWxfbW9uaXRvcnM7IG51bSsrKSB7CisJCW1vbml0b3JzW251bV0tPnVucmVnaXN0ZXIoKTsKKwl9CisJY3B1X3RvcG9sb2d5X3JlbGVhc2UoY3B1X3RvcCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzEyZWUxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0NQVUlETEVfSU5GT19IV19fCisjZGVmaW5lIF9fQ1BVSURMRV9JTkZPX0hXX18KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImlkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmgiCisKKyNkZWZpbmUgTU9OSVRPUlNfTUFYIDIwCisjZGVmaW5lIE1PTklUT1JfTkFNRV9MRU4gMjAKKyNkZWZpbmUgQ1NUQVRFX05BTUVfTEVOIDUKKyNkZWZpbmUgQ1NUQVRFX0RFU0NfTEVOIDYwCisKK2ludCBjcHVfY291bnQ7CisKKy8qIEhhcmQgdG8gZGVmaW5lIHRoZSByaWdodCBuYW1lcyAuLi46ICovCitlbnVtIHBvd2VyX3JhbmdlX2UgeworCVJBTkdFX1RIUkVBRCwJLyogTG93ZXN0IGluIHRvcG9sb2d5IGhpZXJhcmN5LCBBTUQ6IGNvcmUsIEludGVsOiB0aHJlYWQKKwkJCSAgIGtlcm5lbCBzeXNmczogY3B1ICovCisJUkFOR0VfQ09SRSwJLyogQU1EOiB1bml0LCBJbnRlbDogY29yZSwga2VybmVsX3N5c2ZzOiBjb3JlX2lkICovCisJUkFOR0VfUEFDS0FHRSwJLyogUGFja2FnZSwgcHJvY2Vzc29yIHNvY2tldCAqLworCVJBTkdFX01BQ0hJTkUsCS8qIE1hY2hpbmUsIHBsYXRmb3JtIHdpZGUgKi8KKwlSQU5HRV9NQVggfTsKKwordHlwZWRlZiBzdHJ1Y3QgY3N0YXRlIHsKKwlpbnQgIGlkOworCWVudW0gcG93ZXJfcmFuZ2VfZSByYW5nZTsKKwljaGFyIG5hbWVbQ1NUQVRFX05BTUVfTEVOXTsKKwljaGFyIGRlc2NbQ1NUQVRFX0RFU0NfTEVOXTsKKworCS8qIGVpdGhlciBwcm92aWRlIGEgcGVyY2VudGFnZSBvciBhIGdlbmVyYWwgY291bnQgKi8KKwlpbnQgKCpnZXRfY291bnRfcGVyY2VudCkodW5zaWduZWQgaW50IHNlbGZfaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgdW5zaWduZWQgaW50IGNwdSk7CisJaW50ICgqZ2V0X2NvdW50KSh1bnNpZ25lZCBpbnQgc2VsZl9pZCwgdW5zaWduZWQgbG9uZyBsb25nICpjb3VudCwKKwkJCSB1bnNpZ25lZCBpbnQgY3B1KTsKK30gY3N0YXRlX3Q7CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgeworCS8qIE5hbWUgbXVzdCBub3QgY29udGFpbiB3aGl0ZXNwYWNlcyAqLworCWNoYXIgbmFtZVtNT05JVE9SX05BTUVfTEVOXTsKKwlpbnQgbmFtZV9sZW47CisJaW50IGh3X3N0YXRlc19udW07CisJY3N0YXRlX3QgKmh3X3N0YXRlczsKKwlpbnQgKCpzdGFydCkgKHZvaWQpOworCWludCAoKnN0b3ApICh2b2lkKTsKKwlzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yKiAoKmRvX3JlZ2lzdGVyKSAodm9pZCk7CisJdm9pZCAoKnVucmVnaXN0ZXIpKHZvaWQpOworCXVuc2lnbmVkIGludCBvdmVyZmxvd19zOworCWludCBuZWVkc19yb290OworfTsKKworZXh0ZXJuIGxvbmcgbG9uZyB0aW1lc3BlY19kaWZmX3VzKHN0cnVjdCB0aW1lc3BlYyBzdGFydCwgc3RydWN0IHRpbWVzcGVjIGVuZCk7CisKKyNkZWZpbmUgcHJpbnRfb3ZlcmZsb3dfZXJyKG1lcywgb3YpCQkJCQkJXAorewkJCQkJCQkJCQlcCisJZnByaW50ZihzdGRlcnIsIGdldHRleHQoIk1lYXN1cmUgdG9vayAldSBzZWNvbmRzLCBidXQgcmVnaXN0ZXJzIGNvdWxkICIJXAorCQkJCSJvdmVyZmxvdyBhdCAldSBzZWNvbmRzLCByZXN1bHRzICIJCVwKKwkJCQkiY291bGQgYmUgaW5hY2N1cmF0ZVxuIiksIG1lcywgb3YpOwkJXAorfQorCisjZW5kaWYgLyogX19DUFVJRExFX0lORk9fSFdfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuZGVmIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZjhkOWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5kZWYKQEAgLTAsMCArMSw3IEBACisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorREVGKGFtZF9mYW0xNGgpCitERUYoaW50ZWxfbmhtKQorREVGKGludGVsX3NuYikKK0RFRihtcGVyZikKKyNlbmRpZgorREVGKGNwdWlkbGVfc3lzZnMpCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmNkZWIxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiAgQmFzZWQgb24gdGhlIGlkZWEgZnJvbSBNaWNoYWVsIE1hdHogPG1hdHpAc3VzZS5kZT4KKyAqCisgKi8KKworI2lmbmRlZiBfQ1BVSURMRV9JRExFX01PTklUT1JTX0hfCisjZGVmaW5lIF9DUFVJRExFX0lETEVfTU9OSVRPUlNfSF8KKworI2RlZmluZSBERUYoeCkgZXh0ZXJuIHN0cnVjdCBjcHVpZGxlX21vbml0b3IgeCAjI19tb25pdG9yOworI2luY2x1ZGUgImlkbGVfbW9uaXRvcnMuZGVmIgorI3VuZGVmIERFRgorZXh0ZXJuIHN0cnVjdCBjcHVpZGxlX21vbml0b3IgKmFsbF9tb25pdG9yc1tdOworCisjZW5kaWYgLyogX0NQVUlETEVfSURMRV9NT05JVE9SU19IXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1NDVlNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmMKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSA8Y3B1ZnJlcS5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCIKKworI2RlZmluZSBNU1JfQVBFUkYJMHhFOAorI2RlZmluZSBNU1JfTVBFUkYJMHhFNworCisjZGVmaW5lIE1TUl9UU0MJMHgxMAorCitlbnVtIG1wZXJmX2lkIHsgQzAgPSAwLCBDeCwgQVZHX0ZSRVEsIE1QRVJGX0NTVEFURV9DT1VOVCB9OworCitzdGF0aWMgaW50IG1wZXJmX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBzZWxmX2lkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJICAgdW5zaWduZWQgaW50IGNwdSk7CitzdGF0aWMgaW50IG1wZXJmX2dldF9jb3VudF9mcmVxKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgbG9uZyBsb25nICpjb3VudCwKKwkJCQl1bnNpZ25lZCBpbnQgY3B1KTsKKworc3RhdGljIGNzdGF0ZV90IG1wZXJmX2NzdGF0ZXNbTVBFUkZfQ1NUQVRFX0NPVU5UXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiQzAiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBDb3JlIG5vdCBpZGxlIiksCisJCS5pZAkJCT0gQzAsCisJCS5yYW5nZQkJCT0gUkFOR0VfVEhSRUFELAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBtcGVyZl9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJDeCIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIpLAorCQkuaWQJCQk9IEN4LAorCQkucmFuZ2UJCQk9IFJBTkdFX1RIUkVBRCwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gbXBlcmZfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKworCXsKKwkJLm5hbWUJCQk9ICJGcmVxIiwKKwkJLmRlc2MJCQk9IE5fKCJBdmVyYWdlIEZyZXF1ZW5jeSAoaW5jbHVkaW5nIGJvb3N0KSBpbiBNSHoiKSwKKwkJLmlkCQkJPSBBVkdfRlJFUSwKKwkJLnJhbmdlCQkJPSBSQU5HRV9USFJFQUQsCisJCS5nZXRfY291bnQJCT0gbXBlcmZfZ2V0X2NvdW50X2ZyZXEsCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfc3RhcnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRzY19hdF9tZWFzdXJlX2VuZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9mcmVxdWVuY3k7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICptcGVyZl9wcmV2aW91c19jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKmFwZXJmX3ByZXZpb3VzX2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqbXBlcmZfY3VycmVudF9jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKmFwZXJmX2N1cnJlbnRfY291bnQ7CisvKiB2YWxpZCBmbGFnIGZvciBhbGwgQ1BVcy4gSWYgYSBNU1IgcmVhZCBmYWlsZWQgaXQgd2lsbCBiZSB6ZXJvICovCitzdGF0aWMgaW50ICppc192YWxpZDsKKworc3RhdGljIGludCBtcGVyZl9nZXRfdHNjKHVuc2lnbmVkIGxvbmcgbG9uZyAqdHNjKQoreworCXJldHVybiByZWFkX21zcigwLCBNU1JfVFNDLCB0c2MpOworfQorCitzdGF0aWMgaW50IG1wZXJmX2luaXRfc3RhdHModW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSByZWFkX21zcihjcHUsIE1TUl9BUEVSRiwgJnZhbCk7CisJYXBlcmZfcHJldmlvdXNfY291bnRbY3B1XSA9IHZhbDsKKwlyZXQgfD0gcmVhZF9tc3IoY3B1LCBNU1JfTVBFUkYsICZ2YWwpOworCW1wZXJmX3ByZXZpb3VzX2NvdW50W2NwdV0gPSB2YWw7CisJaXNfdmFsaWRbY3B1XSA9ICFyZXQ7CisJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBlcmZfbWVhc3VyZV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHJlYWRfbXNyKGNwdSwgTVNSX0FQRVJGLCAmdmFsKTsKKwlhcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gPSB2YWw7CisJcmV0IHw9IHJlYWRfbXNyKGNwdSwgTVNSX01QRVJGLCAmdmFsKTsKKwltcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gPSB2YWw7CisJaXNfdmFsaWRbY3B1XSA9ICFyZXQ7CisJCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBnZXRfYXZlcmFnZV9wZXJmKCkKKyAqCisgKiBSZXR1cm5zIHRoZSBhdmVyYWdlIHBlcmZvcm1hbmNlIChhbHNvIGNvbnNpZGVycyBib29zdGVkIGZyZXF1ZW5jaWVzKQorICoKKyAqIElucHV0OgorICogICBhcGVyZl9kaWZmOiBEaWZmZXJlbmNlIG9mIHRoZSBhcGVyZiByZWdpc3RlciBvdmVyIGEgdGltZSBwZXJpb2QKKyAqICAgbXBlcmZfZGlmZjogRGlmZmVyZW5jZSBvZiB0aGUgbXBlcmYgcmVnaXN0ZXIgb3ZlciB0aGUgc2FtZSB0aW1lIHBlcmlvZAorICogICBtYXhfZnJlcTogICBNYXhpbXVtIGZyZXF1ZW5jeSAoUDApCisgKgorICogUmV0dXJuczoKKyAqICAgQXZlcmFnZSBwZXJmb3JtYW5jZSBvdmVyIHRoZSB0aW1lIHBlcmlvZAorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfYXZlcmFnZV9wZXJmKHVuc2lnbmVkIGxvbmcgbG9uZyBhcGVyZl9kaWZmLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtcGVyZl9kaWZmKQoreworCXVuc2lnbmVkIGludCBwZXJmX3BlcmNlbnQgPSAwOworCWlmICgoKHVuc2lnbmVkIGxvbmcpKC0xKSAvIDEwMCkgPCBhcGVyZl9kaWZmKSB7CisJCWludCBzaGlmdF9jb3VudCA9IDc7CisJCWFwZXJmX2RpZmYgPj49IHNoaWZ0X2NvdW50OworCQltcGVyZl9kaWZmID4+PSBzaGlmdF9jb3VudDsKKwl9CisJcGVyZl9wZXJjZW50ID0gKGFwZXJmX2RpZmYgKiAxMDApIC8gbXBlcmZfZGlmZjsKKwlyZXR1cm4gKG1heF9mcmVxdWVuY3kgKiBwZXJmX3BlcmNlbnQpIC8gMTAwOworfQorCitzdGF0aWMgaW50IG1wZXJmX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBpZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGFwZXJmX2RpZmYsIG1wZXJmX2RpZmYsIHRzY19kaWZmOworCisJaWYgKCFpc192YWxpZFtjcHVdKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaWQgIT0gQzAgJiYgaWQgIT0gQ3gpCisJCXJldHVybiAtMTsKKworCW1wZXJmX2RpZmYgPSBtcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gLSBtcGVyZl9wcmV2aW91c19jb3VudFtjcHVdOworCWFwZXJmX2RpZmYgPSBhcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gLSBhcGVyZl9wcmV2aW91c19jb3VudFtjcHVdOworCXRzY19kaWZmID0gdHNjX2F0X21lYXN1cmVfZW5kIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQ7CisKKwkqcGVyY2VudCA9IDEwMC4wICogbXBlcmZfZGlmZiAvIHRzY19kaWZmOworCWRwcmludCgiJXM6IG1wZXJmX2RpZmY6ICVsbHUsIHRzY19kaWZmOiAlbGx1XG4iLAorCSAgICAgICBtcGVyZl9jc3RhdGVzW2lkXS5uYW1lLCBtcGVyZl9kaWZmLCB0c2NfZGlmZik7CisKKwlpZiAoaWQgPT0gQ3gpCisJCSpwZXJjZW50ID0gMTAwLjAgLSAqcGVyY2VudDsKKworCWRwcmludCgiJXM6IHByZXZpb3VzOiAlbGx1IC0gY3VycmVudDogJWxsdSAtICgldSlcbiIsIG1wZXJmX2NzdGF0ZXNbaWRdLm5hbWUsCisJICAgICAgIG1wZXJmX2RpZmYsIGFwZXJmX2RpZmYsIGNwdSk7CisJZHByaW50KCIlczogJWZcbiIsIG1wZXJmX2NzdGF0ZXNbaWRdLm5hbWUsICpwZXJjZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGVyZl9nZXRfY291bnRfZnJlcSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY291bnQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBhcGVyZl9kaWZmLCBtcGVyZl9kaWZmOworCisJaWYgKGlkICE9IEFWR19GUkVRKQorCQlyZXR1cm4gMTsKKworCWlmICghaXNfdmFsaWRbY3B1XSkKKwkJcmV0dXJuIC0xOworCisJbXBlcmZfZGlmZiA9IG1wZXJmX2N1cnJlbnRfY291bnRbY3B1XSAtIG1wZXJmX3ByZXZpb3VzX2NvdW50W2NwdV07CisJYXBlcmZfZGlmZiA9IGFwZXJmX2N1cnJlbnRfY291bnRbY3B1XSAtIGFwZXJmX3ByZXZpb3VzX2NvdW50W2NwdV07CisKKwkvKiBSZXR1cm4gTUh6IGZvciBub3csIG1pZ2h0IHdhbnQgdG8gcmV0dXJuIEtIeiBpZiBjb2x1bW4gd2lkdGggaXMgbW9yZQorCSAgIGdlbmVyaWMgKi8KKwkqY291bnQgPSBnZXRfYXZlcmFnZV9wZXJmKGFwZXJmX2RpZmYsIG1wZXJmX2RpZmYpIC8gMTAwMDsKKwlkcHJpbnQoIiVzOiAlbGx1XG4iLCBtcGVyZl9jc3RhdGVzW2lkXS5uYW1lLCAqY291bnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBlcmZfc3RhcnQodm9pZCkKK3sKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgbG9uZyBkYmc7CisKKwltcGVyZl9nZXRfdHNjKCZ0c2NfYXRfbWVhc3VyZV9zdGFydCk7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspCisJCW1wZXJmX2luaXRfc3RhdHMoY3B1KTsKKworCW1wZXJmX2dldF90c2MoJmRiZyk7CisJZHByaW50KCJUU0MgZGlmZjogJWxsdVxuIiwgZGJnIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wZXJmX3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGJnOworCWludCBjcHU7CisKKwltcGVyZl9nZXRfdHNjKCZ0c2NfYXRfbWVhc3VyZV9lbmQpOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKQorCQltcGVyZl9tZWFzdXJlX3N0YXRzKGNwdSk7CisKKwltcGVyZl9nZXRfdHNjKCZkYmcpOworCWRwcmludCgiVFNDIGRpZmY6ICVsbHVcbiIsIGRiZyAtIHRzY19hdF9tZWFzdXJlX2VuZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBtcGVyZl9tb25pdG9yOworCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yKiBtcGVyZl9yZWdpc3Rlcih2b2lkKSB7CisKKwl1bnNpZ25lZCBsb25nIG1pbjsKKworCWlmICghKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfQVBFUkYpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFzc3VtZSBtaW4vbWF4IGFsbCB0aGUgc2FtZSBvbiBhbGwgY29yZXMgKi8KKwlpZiAoY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKDAsICZtaW4sICZtYXhfZnJlcXVlbmN5KSkgeworCQlkcHJpbnQoIkNhbm5vdCByZXRyaWV2ZSBtYXggZnJlcSBmcm9tIGNwdWZyZXEga2VybmVsICIKKwkJICAgICAgICJzdWJzeXN0ZW1cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBGcmVlIHRoaXMgYXQgcHJvZ3JhbSB0ZXJtaW5hdGlvbiAqLworCWlzX3ZhbGlkID0gY2FsbG9jKGNwdV9jb3VudCwgc2l6ZW9mIChpbnQpKTsKKwltcGVyZl9wcmV2aW91c19jb3VudCA9IGNhbGxvYyAoY3B1X2NvdW50LAorCQkJCSAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJYXBlcmZfcHJldmlvdXNfY291bnQgPSBjYWxsb2MgKGNwdV9jb3VudCwKKwkJCQkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCW1wZXJmX2N1cnJlbnRfY291bnQgPSBjYWxsb2MgKGNwdV9jb3VudCwKKwkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJYXBlcmZfY3VycmVudF9jb3VudCA9IGNhbGxvYyAoY3B1X2NvdW50LAorCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwkKKwltcGVyZl9tb25pdG9yLm5hbWVfbGVuID0gc3RybGVuKG1wZXJmX21vbml0b3IubmFtZSk7CisJcmV0dXJuICZtcGVyZl9tb25pdG9yOworfQorCit2b2lkIG1wZXJmX3VucmVnaXN0ZXIodm9pZCkgeworCWZyZWUobXBlcmZfcHJldmlvdXNfY291bnQpOworCWZyZWUoYXBlcmZfcHJldmlvdXNfY291bnQpOworCWZyZWUobXBlcmZfY3VycmVudF9jb3VudCk7CisJZnJlZShhcGVyZl9jdXJyZW50X2NvdW50KTsKKwlmcmVlKGlzX3ZhbGlkKTsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBtcGVyZl9tb25pdG9yID0geworCS5uYW1lCQkJPSAiTXBlcmYiLAorCS5od19zdGF0ZXNfbnVtCQk9IE1QRVJGX0NTVEFURV9DT1VOVCwKKwkuaHdfc3RhdGVzCQk9IG1wZXJmX2NzdGF0ZXMsCisJLnN0YXJ0CQkJPSBtcGVyZl9zdGFydCwKKwkuc3RvcAkJCT0gbXBlcmZfc3RvcCwKKwkuZG9fcmVnaXN0ZXIJCT0gbXBlcmZfcmVnaXN0ZXIsCisJLnVucmVnaXN0ZXIJCT0gbXBlcmZfdW5yZWdpc3RlciwKKwkubmVlZHNfcm9vdAkJPSAxLAorCS5vdmVyZmxvd19zCQk9IDkyMjAwMDAwMCAvKiA5MjIzMzcyMDMgc2Vjb25kcyBUU0Mgb3ZlcmZsb3cKKwkJCQkJICAgICAgIGF0IDIwR0h6ICovCit9OworI2VuZGlmIC8qICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MjRiNmQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYwpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIEJhc2VkIG9uIExlbiBCcm93bidzIDxsZW5iQGtlcm5lbC5vcmc+IHR1cmJvc3RhdCB0b29sLgorICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCIKKworI2RlZmluZSBNU1JfUEtHX0MzX1JFU0lERU5DWQkweDNGOAorI2RlZmluZSBNU1JfUEtHX0M2X1JFU0lERU5DWQkweDNGOQorI2RlZmluZSBNU1JfQ09SRV9DM19SRVNJREVOQ1kJMHgzRkMKKyNkZWZpbmUgTVNSX0NPUkVfQzZfUkVTSURFTkNZCTB4M0ZECisKKyNkZWZpbmUgTVNSX1RTQwkweDEwCisKKyNkZWZpbmUgTkhNX0NTVEFURV9DT1VOVCA0CisKK2VudW0gaW50ZWxfbmhtX2lkIHsgQzMgPSAwLCBDNiwgUEMzLCBQQzYsIFRTQyA9IDB4RkZGRiB9OworCitzdGF0aWMgaW50IG5obV9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgc2VsZl9pZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSB1bnNpZ25lZCBpbnQgY3B1KTsKKworc3RhdGljIGNzdGF0ZV90IG5obV9jc3RhdGVzW05ITV9DU1RBVEVfQ09VTlRdID0geworCXsKKwkJLm5hbWUJCQk9ICJDMyIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIENvcmUgQzMiKSwKKwkJLmlkCQkJPSBDMywKKwkJLnJhbmdlCQkJPSBSQU5HRV9DT1JFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBuaG1fZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiQzYiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBDb3JlIEM2IiksCisJCS5pZAkJCT0gQzYsCisJCS5yYW5nZQkJCT0gUkFOR0VfQ09SRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gbmhtX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisKKwl7CisJCS5uYW1lCQkJPSAiUEMzIiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgUGFja2FnZSBDMyIpLAorCQkuaWQJCQk9IFBDMywKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBuaG1fZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiUEM2IiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgUGFja2FnZSBDNiIpLAorCQkuaWQJCQk9IFBDNiwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBuaG1fZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfc3RhcnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRzY19hdF9tZWFzdXJlX2VuZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKnByZXZpb3VzX2NvdW50W05ITV9DU1RBVEVfQ09VTlRdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqY3VycmVudF9jb3VudFtOSE1fQ1NUQVRFX0NPVU5UXTsKKy8qIHZhbGlkIGZsYWcgZm9yIGFsbCBDUFVzLiBJZiBhIE1TUiByZWFkIGZhaWxlZCBpdCB3aWxsIGJlIHplcm8gKi8KK3N0YXRpYyBpbnQgKmlzX3ZhbGlkOworCitzdGF0aWMgaW50IG5obV9nZXRfY291bnQoZW51bSBpbnRlbF9uaG1faWQgaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdmFsLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBtc3I7CisKKwlzd2l0Y2goaWQpIHsKKwljYXNlIEMzOgorCQltc3IgPSBNU1JfQ09SRV9DM19SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgQzY6CisJCW1zciA9IE1TUl9DT1JFX0M2X1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBQQzM6CisJCW1zciA9IE1TUl9QS0dfQzNfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIFBDNjoKKwkJbXNyID0gTVNSX1BLR19DNl9SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgVFNDOgorCQltc3IgPSBNU1JfVFNDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfTsKKwlpZiAocmVhZF9tc3IoY3B1LCBtc3IsIHZhbCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5obV9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgdW5zaWduZWQgaW50IGNwdSkKK3sKKwkqcGVyY2VudCA9IDAuMDsKKworCWlmICghaXNfdmFsaWRbY3B1XSkKKwkJcmV0dXJuIC0xOworCisJKnBlcmNlbnQgPSAoMTAwLjAgKiAoY3VycmVudF9jb3VudFtpZF1bY3B1XSAtIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdKSkgLworCQkodHNjX2F0X21lYXN1cmVfZW5kIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQpOworCisJZHByaW50KCIlczogcHJldmlvdXM6ICVsbHUgLSBjdXJyZW50OiAlbGx1IC0gKCV1KVxuIiwgbmhtX2NzdGF0ZXNbaWRdLm5hbWUsCisJICAgICAgIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdLCBjdXJyZW50X2NvdW50W2lkXVtjcHVdLAorCSAgICAgICBjcHUpOworCisJZHByaW50KCIlczogdHNjX2RpZmY6ICVsbHUgLSBjb3VudF9kaWZmOiAlbGx1IC0gcGVyY2VudDogJTIuZiAoJXUpXG4iLAorCSAgICAgICBuaG1fY3N0YXRlc1tpZF0ubmFtZSwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHNjX2F0X21lYXN1cmVfZW5kIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQsCisJICAgICAgIGN1cnJlbnRfY291bnRbaWRdW2NwdV0gLSBwcmV2aW91c19jb3VudFtpZF1bY3B1XSwKKwkgICAgICAgKnBlcmNlbnQsIGNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaG1fc3RhcnQodm9pZCkKK3sKKwlpbnQgbnVtLCBjcHU7CisJdW5zaWduZWQgbG9uZyBsb25nIGRiZywgdmFsOworCisJbmhtX2dldF9jb3VudChUU0MsICZ0c2NfYXRfbWVhc3VyZV9zdGFydCwgMCk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IE5ITV9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQkJaXNfdmFsaWRbY3B1XSA9ICFuaG1fZ2V0X2NvdW50KG51bSwgJnZhbCwgY3B1KTsKKwkJCXByZXZpb3VzX2NvdW50W251bV1bY3B1XSA9IHZhbDsKKwkJfQorCX0KKwluaG1fZ2V0X2NvdW50KFRTQywgJmRiZywgMCk7CisJZHByaW50KCJUU0MgZGlmZjogJWxsdVxuIiwgZGJnIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5obV9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGJnOworCWludCBudW0sIGNwdTsKKworCW5obV9nZXRfY291bnQoVFNDLCAmdHNjX2F0X21lYXN1cmVfZW5kLCAwKTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgTkhNX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCQlpc192YWxpZFtjcHVdID0gIW5obV9nZXRfY291bnQobnVtLCAmdmFsLCBjcHUpOworCQkJY3VycmVudF9jb3VudFtudW1dW2NwdV0gPSB2YWw7CisJCX0KKwl9CisJbmhtX2dldF9jb3VudChUU0MsICZkYmcsIDApOworCWRwcmludCgiVFNDIGRpZmY6ICVsbHVcbiIsIGRiZyAtIHRzY19hdF9tZWFzdXJlX2VuZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBpbnRlbF9uaG1fbW9uaXRvcjsKKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciogaW50ZWxfbmhtX3JlZ2lzdGVyKHZvaWQpIHsKKwlpbnQgbnVtOworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfSU5WX1RTQykpCisJCXJldHVybiBOVUxMOworCisJaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9BUEVSRikpCisJCXJldHVybiBOVUxMOworCisJLyogRnJlZSB0aGlzIGF0IHByb2dyYW0gdGVybWluYXRpb24gKi8KKwlpc192YWxpZCA9IGNhbGxvYyhjcHVfY291bnQsIHNpemVvZiAoaW50KSk7CisJZm9yIChudW0gPSAwOyBudW0gPCBOSE1fQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlwcmV2aW91c19jb3VudFtudW1dID0gY2FsbG9jIChjcHVfY291bnQsCisJCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwkJY3VycmVudF9jb3VudFtudW1dICA9IGNhbGxvYyAoY3B1X2NvdW50LAorCQkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJfQorCisJaW50ZWxfbmhtX21vbml0b3IubmFtZV9sZW4gPSBzdHJsZW4oaW50ZWxfbmhtX21vbml0b3IubmFtZSk7CisJcmV0dXJuICZpbnRlbF9uaG1fbW9uaXRvcjsKK30KKwordm9pZCBpbnRlbF9uaG1fdW5yZWdpc3Rlcih2b2lkKSB7CisJaW50IG51bTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgTkhNX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJZnJlZShwcmV2aW91c19jb3VudFtudW1dKTsKKwkJZnJlZShjdXJyZW50X2NvdW50W251bV0pOworCX0KKwlmcmVlKGlzX3ZhbGlkKTsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBpbnRlbF9uaG1fbW9uaXRvciA9IHsKKwkubmFtZQkJCT0gIk5laGFsZW0iLAorCS5od19zdGF0ZXNfbnVtCQk9IE5ITV9DU1RBVEVfQ09VTlQsCisJLmh3X3N0YXRlcwkJPSBuaG1fY3N0YXRlcywKKwkuc3RhcnQJCQk9IG5obV9zdGFydCwKKwkuc3RvcAkJCT0gbmhtX3N0b3AsCisJLmRvX3JlZ2lzdGVyCQk9IGludGVsX25obV9yZWdpc3RlciwKKwkudW5yZWdpc3RlcgkJPSBpbnRlbF9uaG1fdW5yZWdpc3RlciwKKwkubmVlZHNfcm9vdAkJPSAxLAorCS5vdmVyZmxvd19zCQk9IDkyMjAwMDAwMCAvKiA5MjIzMzcyMDMgc2Vjb25kcyBUU0Mgb3ZlcmZsb3cKKwkJCQkJICAgICAgIGF0IDIwR0h6ICovCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYzgwYTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIEJhc2VkIG9uIExlbiBCcm93bidzIDxsZW5iQGtlcm5lbC5vcmc+IHR1cmJvc3RhdCB0b29sLgorICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCIKKworI2RlZmluZSBNU1JfUEtHX0MyX1JFU0lERU5DWQkweDYwRAorI2RlZmluZSBNU1JfUEtHX0M3X1JFU0lERU5DWQkweDNGQQorI2RlZmluZSBNU1JfQ09SRV9DN19SRVNJREVOQ1kJMHgzRkUKKworI2RlZmluZSBNU1JfVFNDCTB4MTAKKworZW51bSBpbnRlbF9zbmJfaWQgeyBDNyA9IDAsIFBDMiwgUEM3LCBTTkJfQ1NUQVRFX0NPVU5ULCBUU0MgPSAweEZGRkYgfTsKKworc3RhdGljIGludCBzbmJfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IHNlbGZfaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgdW5zaWduZWQgaW50IGNwdSk7CisKK3N0YXRpYyBjc3RhdGVfdCBzbmJfY3N0YXRlc1tTTkJfQ1NUQVRFX0NPVU5UXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiQzciLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBDb3JlIEM3IiksCisJCS5pZAkJCT0gQzcsCisJCS5yYW5nZQkJCT0gUkFOR0VfQ09SRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gc25iX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIlBDMiIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIFBhY2thZ2UgQzIiKSwKKwkJLmlkCQkJPSBQQzIsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gc25iX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIlBDNyIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIFBhY2thZ2UgQzciKSwKKwkJLmlkCQkJPSBQQzcsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gc25iX2dldF9jb3VudF9wZXJjZW50LAorCX0sCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRzY19hdF9tZWFzdXJlX3N0YXJ0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9lbmQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpwcmV2aW91c19jb3VudFtTTkJfQ1NUQVRFX0NPVU5UXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKmN1cnJlbnRfY291bnRbU05CX0NTVEFURV9DT1VOVF07CisvKiB2YWxpZCBmbGFnIGZvciBhbGwgQ1BVcy4gSWYgYSBNU1IgcmVhZCBmYWlsZWQgaXQgd2lsbCBiZSB6ZXJvICovCitzdGF0aWMgaW50ICppc192YWxpZDsKKworc3RhdGljIGludCBzbmJfZ2V0X2NvdW50KGVudW0gaW50ZWxfc25iX2lkIGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgbXNyOworCisJc3dpdGNoKGlkKSB7CisJY2FzZSBDNzoKKwkJbXNyID0gTVNSX0NPUkVfQzdfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIFBDMjoKKwkJbXNyID0gTVNSX1BLR19DMl9SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgUEM3OgorCQltc3IgPSBNU1JfUEtHX0M3X1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBUU0M6CisJCW1zciA9IE1TUl9UU0M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9OworCWlmIChyZWFkX21zcihjcHUsIG1zciwgdmFsKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuYl9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgdW5zaWduZWQgaW50IGNwdSkKK3sKKwkqcGVyY2VudCA9IDAuMDsKKworCWlmICghaXNfdmFsaWRbY3B1XSkKKwkJcmV0dXJuIC0xOworCisJKnBlcmNlbnQgPSAoMTAwLjAgKiAoY3VycmVudF9jb3VudFtpZF1bY3B1XSAtIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdKSkgLworCQkodHNjX2F0X21lYXN1cmVfZW5kIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQpOworCisJZHByaW50KCIlczogcHJldmlvdXM6ICVsbHUgLSBjdXJyZW50OiAlbGx1IC0gKCV1KVxuIiwgc25iX2NzdGF0ZXNbaWRdLm5hbWUsCisJICAgICAgIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdLCBjdXJyZW50X2NvdW50W2lkXVtjcHVdLAorCSAgICAgICBjcHUpOworCisJZHByaW50KCIlczogdHNjX2RpZmY6ICVsbHUgLSBjb3VudF9kaWZmOiAlbGx1IC0gcGVyY2VudDogJTIuZiAoJXUpXG4iLAorCSAgICAgICBzbmJfY3N0YXRlc1tpZF0ubmFtZSwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHNjX2F0X21lYXN1cmVfZW5kIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQsCisJICAgICAgIGN1cnJlbnRfY291bnRbaWRdW2NwdV0KKwkgICAgICAgLSBwcmV2aW91c19jb3VudFtpZF1bY3B1XSwKKwkgICAgICAgKnBlcmNlbnQsIGNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmJfc3RhcnQodm9pZCkKK3sKKwlpbnQgbnVtLCBjcHU7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKworCWZvciAobnVtID0gMDsgbnVtIDwgU05CX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCQlzbmJfZ2V0X2NvdW50KG51bSwgJnZhbCwgY3B1KTsKKwkJCXByZXZpb3VzX2NvdW50W251bV1bY3B1XSA9IHZhbDsKKwkJfQorCX0KKwlzbmJfZ2V0X2NvdW50KFRTQywgJnRzY19hdF9tZWFzdXJlX3N0YXJ0LCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmJfc3RvcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJaW50IG51bSwgY3B1OworCisJc25iX2dldF9jb3VudChUU0MsICZ0c2NfYXRfbWVhc3VyZV9lbmQsIDApOworCisJZm9yIChudW0gPSAwOyBudW0gPCBTTkJfQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJCWlzX3ZhbGlkW2NwdV0gPSAhc25iX2dldF9jb3VudChudW0sICZ2YWwsIGNwdSk7CisJCQljdXJyZW50X2NvdW50W251bV1bY3B1XSA9IHZhbDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBpbnRlbF9zbmJfbW9uaXRvcjsKKworc3RhdGljIHN0cnVjdCBjcHVpZGxlX21vbml0b3IqIHNuYl9yZWdpc3Rlcih2b2lkKSB7CisKKwlpbnQgbnVtOworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMCisJICAgIHx8IGNwdXBvd2VyX2NwdV9pbmZvLmZhbWlseSAhPSA2KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby5tb2RlbCAhPSAweDJBCisJICAgICYmIGNwdXBvd2VyX2NwdV9pbmZvLm1vZGVsICE9IDB4MkQpCisJCXJldHVybiBOVUxMOworCisJaXNfdmFsaWQgPSBjYWxsb2MoY3B1X2NvdW50LCBzaXplb2YgKGludCkpOworCWZvciAobnVtID0gMDsgbnVtIDwgU05CX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJcHJldmlvdXNfY291bnRbbnVtXSA9IGNhbGxvYyAoY3B1X2NvdW50LAorCQkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJCWN1cnJlbnRfY291bnRbbnVtXSAgPSBjYWxsb2MgKGNwdV9jb3VudCwKKwkJCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCX0KKwlpbnRlbF9zbmJfbW9uaXRvci5uYW1lX2xlbiA9IHN0cmxlbihpbnRlbF9zbmJfbW9uaXRvci5uYW1lKTsKKwlyZXR1cm4gJmludGVsX3NuYl9tb25pdG9yOworfQorCit2b2lkIHNuYl91bnJlZ2lzdGVyKHZvaWQpCit7CisJaW50IG51bTsKKwlmcmVlKGlzX3ZhbGlkKTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IFNOQl9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCWZyZWUocHJldmlvdXNfY291bnRbbnVtXSk7CisJCWZyZWUoY3VycmVudF9jb3VudFtudW1dKTsKKwl9Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgaW50ZWxfc25iX21vbml0b3IgPSB7CisJLm5hbWUJCQk9ICJTYW5keUJyaWRnZSIsCisJLmh3X3N0YXRlcwkJPSBzbmJfY3N0YXRlcywKKwkuaHdfc3RhdGVzX251bQkJPSBTTkJfQ1NUQVRFX0NPVU5ULAorCS5zdGFydAkJCT0gc25iX3N0YXJ0LAorCS5zdG9wCQkJPSBzbmJfc3RvcCwKKwkuZG9fcmVnaXN0ZXIJCT0gc25iX3JlZ2lzdGVyLAorCS51bnJlZ2lzdGVyCQk9IHNuYl91bnJlZ2lzdGVyLAorCS5uZWVkc19yb290CQk9IDEsCisJLm92ZXJmbG93X3MJCT0gOTIyMDAwMDAwIC8qIDkyMjMzNzIwMyBzZWNvbmRzIFRTQyBvdmVyZmxvdworCQkJCQkgICAgICAgYXQgMjBHSHogKi8KK307CisjZW5kaWYgLyogZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLwo=